summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeonah Moon <seonah1.moon@samsung.com>2024-01-02 20:07:54 +0900
committerSeonah Moon <seonah1.moon@samsung.com>2024-01-02 20:37:43 +0900
commitaf71747bfb8e0dfb8b2870e30d720ce10b839814 (patch)
treedfd86789c7a44fccf1847280213d4ff10e41cc06
parentb16a7a56e08377965863acf50afb7d91f32ba995 (diff)
downloadcurl-af71747bfb8e0dfb8b2870e30d720ce10b839814.tar.gz
curl-af71747bfb8e0dfb8b2870e30d720ce10b839814.tar.bz2
curl-af71747bfb8e0dfb8b2870e30d720ce10b839814.zip
Imported Upstream version 8.5.0upstream/8.5.0upstream
Change-Id: I8f77c680623836749aba616cecd0390fc34b0c3c
-rw-r--r--CHANGES12583
-rw-r--r--CMake/CMakeConfigurableFile.in2
-rw-r--r--CMake/CurlSymbolHiding.cmake8
-rw-r--r--CMake/CurlTests.c267
-rw-r--r--CMake/FindBearSSL.cmake2
-rw-r--r--CMake/FindBrotli.cmake6
-rw-r--r--CMake/FindCARES.cmake2
-rw-r--r--CMake/FindGSS.cmake6
-rw-r--r--CMake/FindLibPSL.cmake2
-rw-r--r--CMake/FindLibSSH2.cmake2
-rw-r--r--CMake/FindMSH3.cmake2
-rw-r--r--CMake/FindMbedTLS.cmake2
-rw-r--r--CMake/FindNGHTTP2.cmake2
-rw-r--r--CMake/FindNGHTTP3.cmake2
-rw-r--r--CMake/FindNGTCP2.cmake10
-rw-r--r--CMake/FindQUICHE.cmake2
-rw-r--r--CMake/FindWolfSSL.cmake2
-rw-r--r--CMake/FindZstd.cmake9
-rw-r--r--CMake/Macros.cmake15
-rw-r--r--CMake/OtherTests.cmake185
-rw-r--r--CMake/PickyWarnings.cmake216
-rw-r--r--CMake/Platforms/WindowsCache.cmake228
-rw-r--r--CMake/Utilities.cmake2
-rw-r--r--CMake/cmake_uninstall.cmake.in2
-rw-r--r--CMake/curl-config.cmake.in7
-rw-r--r--CMakeLists.txt1171
-rw-r--r--COPYING2
-rwxr-xr-xMacOSX-Framework2
-rw-r--r--Makefile36
-rw-r--r--Makefile.am138
-rw-r--r--Makefile.in248
-rw-r--r--RELEASE-NOTES795
-rw-r--r--acinclude.m4229
-rw-r--r--aclocal.m438
-rwxr-xr-xbuildconf2
-rw-r--r--buildconf.bat2
-rwxr-xr-xconfigure3609
-rw-r--r--configure.ac590
-rw-r--r--curl-config.in2
-rw-r--r--docs/ALTSVC.md3
-rw-r--r--docs/BINDINGS.md6
-rw-r--r--docs/BUG-BOUNTY.md4
-rw-r--r--docs/BUGS.md2
-rw-r--r--docs/CHECKSRC.md4
-rw-r--r--docs/CIPHERS.md200
-rw-r--r--docs/CMakeLists.txt2
-rw-r--r--docs/CODE_STYLE.md4
-rw-r--r--docs/CONNECTION-FILTERS.md127
-rw-r--r--docs/CONTRIBUTE.md63
-rw-r--r--docs/CURL-DISABLE.md32
-rw-r--r--docs/DEPRECATE.md50
-rw-r--r--docs/DYNBUF.md10
-rw-r--r--docs/EARLY-RELEASE.md67
-rw-r--r--docs/EXPERIMENTAL.md5
-rw-r--r--docs/FAQ76
-rw-r--r--docs/FEATURES.md6
-rw-r--r--docs/GOVERNANCE.md2
-rw-r--r--docs/HELP-US.md8
-rw-r--r--docs/HISTORY.md7
-rw-r--r--docs/HTTP-COOKIES.md15
-rw-r--r--docs/HTTP2.md6
-rw-r--r--docs/HTTP3.md130
-rw-r--r--docs/HYPER.md22
-rw-r--r--docs/INSTALL.cmake2
-rw-r--r--docs/INSTALL.md135
-rw-r--r--docs/INTERNALS.md27
-rw-r--r--docs/KNOWN_BUGS655
-rw-r--r--docs/MAIL-ETIQUETTE2
-rw-r--r--docs/MQTT.md4
-rw-r--r--docs/Makefile.am10
-rw-r--r--docs/Makefile.in22
-rw-r--r--docs/PARALLEL-TRANSFERS.md10
-rw-r--r--docs/RELEASE-PROCEDURE.md47
-rw-r--r--docs/ROADMAP.md2
-rw-r--r--docs/RUSTLS.md6
-rw-r--r--docs/SECURITY-ADVISORY.md129
-rw-r--r--docs/SSL-PROBLEMS.md2
-rw-r--r--docs/SSLCERTS.md20
-rw-r--r--docs/THANKS309
-rw-r--r--docs/TODO170
-rw-r--r--docs/TheArtOfHttpScripting.md20
-rw-r--r--docs/URL-SYNTAX.md11
-rw-r--r--docs/VULN-DISCLOSURE-POLICY.md (renamed from docs/SECURITY-PROCESS.md)97
-rw-r--r--docs/WEBSOCKET.md21
-rw-r--r--docs/cmdline-opts/CMakeLists.txt2
-rw-r--r--docs/cmdline-opts/MANPAGE.md19
-rw-r--r--docs/cmdline-opts/Makefile.am12
-rw-r--r--docs/cmdline-opts/Makefile.in35
-rw-r--r--docs/cmdline-opts/Makefile.inc12
-rw-r--r--docs/cmdline-opts/abstract-unix-socket.d2
-rw-r--r--docs/cmdline-opts/alt-svc.d10
-rw-r--r--docs/cmdline-opts/anyauth.d5
-rw-r--r--docs/cmdline-opts/append.d9
-rw-r--r--docs/cmdline-opts/aws-sigv4.d4
-rw-r--r--docs/cmdline-opts/basic.d2
-rw-r--r--docs/cmdline-opts/ca-native.d21
-rw-r--r--docs/cmdline-opts/cacert.d19
-rw-r--r--docs/cmdline-opts/capath.d4
-rw-r--r--docs/cmdline-opts/cert-status.d4
-rw-r--r--docs/cmdline-opts/cert-type.d2
-rw-r--r--docs/cmdline-opts/cert.d31
-rw-r--r--docs/cmdline-opts/ciphers.d6
-rw-r--r--docs/cmdline-opts/compressed-ssh.d2
-rw-r--r--docs/cmdline-opts/compressed.d12
-rw-r--r--docs/cmdline-opts/config.d37
-rw-r--r--docs/cmdline-opts/connect-timeout.d12
-rw-r--r--docs/cmdline-opts/connect-to.d2
-rw-r--r--docs/cmdline-opts/continue-at.d6
-rw-r--r--docs/cmdline-opts/cookie-jar.d24
-rw-r--r--docs/cmdline-opts/cookie.d20
-rw-r--r--docs/cmdline-opts/create-dirs.d14
-rw-r--r--docs/cmdline-opts/create-file-mode.d2
-rw-r--r--docs/cmdline-opts/crlf.d5
-rw-r--r--docs/cmdline-opts/crlfile.d2
-rw-r--r--docs/cmdline-opts/curves.d5
-rw-r--r--docs/cmdline-opts/data-ascii.d2
-rw-r--r--docs/cmdline-opts/data-binary.d4
-rw-r--r--docs/cmdline-opts/data-raw.d2
-rw-r--r--docs/cmdline-opts/data-urlencode.d15
-rw-r--r--docs/cmdline-opts/data.d12
-rw-r--r--docs/cmdline-opts/delegation.d3
-rw-r--r--docs/cmdline-opts/digest.d2
-rw-r--r--docs/cmdline-opts/disable-eprt.d15
-rw-r--r--docs/cmdline-opts/disable-epsv.d10
-rw-r--r--docs/cmdline-opts/disable.d11
-rw-r--r--docs/cmdline-opts/disallow-username-in-url.d2
-rw-r--r--docs/cmdline-opts/dns-interface.d2
-rw-r--r--docs/cmdline-opts/dns-ipv4-addr.d6
-rw-r--r--docs/cmdline-opts/dns-ipv6-addr.d6
-rw-r--r--docs/cmdline-opts/dns-servers.d2
-rw-r--r--docs/cmdline-opts/doh-cert-status.d2
-rw-r--r--docs/cmdline-opts/doh-insecure.d2
-rw-r--r--docs/cmdline-opts/doh-url.d12
-rw-r--r--docs/cmdline-opts/dump-header.d7
-rw-r--r--docs/cmdline-opts/egd-file.d6
-rw-r--r--docs/cmdline-opts/engine.d2
-rw-r--r--docs/cmdline-opts/etag-compare.d2
-rw-r--r--docs/cmdline-opts/etag-save.d2
-rw-r--r--docs/cmdline-opts/expect100-timeout.d9
-rw-r--r--docs/cmdline-opts/fail-early.d18
-rw-r--r--docs/cmdline-opts/fail-with-body.d8
-rw-r--r--docs/cmdline-opts/fail.d8
-rw-r--r--docs/cmdline-opts/false-start.d8
-rw-r--r--docs/cmdline-opts/form-escape.d2
-rw-r--r--docs/cmdline-opts/form-string.d4
-rw-r--r--docs/cmdline-opts/form.d13
-rw-r--r--docs/cmdline-opts/ftp-account.d2
-rw-r--r--docs/cmdline-opts/ftp-alternative-to-user.d4
-rw-r--r--docs/cmdline-opts/ftp-create-dirs.d4
-rw-r--r--docs/cmdline-opts/ftp-method.d5
-rw-r--r--docs/cmdline-opts/ftp-pasv.d4
-rw-r--r--docs/cmdline-opts/ftp-port.d3
-rw-r--r--docs/cmdline-opts/ftp-pret.d2
-rw-r--r--docs/cmdline-opts/ftp-skip-pasv-ip.d11
-rw-r--r--docs/cmdline-opts/ftp-ssl-ccc-mode.d6
-rw-r--r--docs/cmdline-opts/ftp-ssl-ccc.d4
-rw-r--r--docs/cmdline-opts/ftp-ssl-control.d2
-rwxr-xr-xdocs/cmdline-opts/gen.pl143
-rw-r--r--docs/cmdline-opts/get.d10
-rw-r--r--docs/cmdline-opts/globoff.d2
-rw-r--r--docs/cmdline-opts/happy-eyeballs-timeout-ms.d2
-rw-r--r--docs/cmdline-opts/haproxy-clientip.d29
-rw-r--r--docs/cmdline-opts/haproxy-protocol.d2
-rw-r--r--docs/cmdline-opts/head.d2
-rw-r--r--docs/cmdline-opts/header.d41
-rw-r--r--docs/cmdline-opts/help.d19
-rw-r--r--docs/cmdline-opts/hostpubmd5.d4
-rw-r--r--docs/cmdline-opts/hostpubsha256.d10
-rw-r--r--docs/cmdline-opts/hsts.d15
-rw-r--r--docs/cmdline-opts/http0.9.d10
-rw-r--r--docs/cmdline-opts/http1.0.d2
-rw-r--r--docs/cmdline-opts/http1.1.d2
-rw-r--r--docs/cmdline-opts/http2-prior-knowledge.d6
-rw-r--r--docs/cmdline-opts/http2.d15
-rw-r--r--docs/cmdline-opts/http3-only.d25
-rw-r--r--docs/cmdline-opts/http3.d21
-rw-r--r--docs/cmdline-opts/ignore-content-length.d8
-rw-r--r--docs/cmdline-opts/include.d5
-rw-r--r--docs/cmdline-opts/insecure.d7
-rw-r--r--docs/cmdline-opts/interface.d8
-rw-r--r--docs/cmdline-opts/ipfs-gateway.d32
-rw-r--r--docs/cmdline-opts/ipv4.d8
-rw-r--r--docs/cmdline-opts/ipv6.d8
-rw-r--r--docs/cmdline-opts/json.d4
-rw-r--r--docs/cmdline-opts/junk-session-cookies.d9
-rw-r--r--docs/cmdline-opts/keepalive-time.d2
-rw-r--r--docs/cmdline-opts/key-type.d2
-rw-r--r--docs/cmdline-opts/key.d12
-rw-r--r--docs/cmdline-opts/krb.d4
-rw-r--r--docs/cmdline-opts/libcurl.d12
-rw-r--r--docs/cmdline-opts/limit-rate.d8
-rw-r--r--docs/cmdline-opts/list-only.d12
-rw-r--r--docs/cmdline-opts/local-port.d6
-rw-r--r--docs/cmdline-opts/location-trusted.d10
-rw-r--r--docs/cmdline-opts/location.d23
-rw-r--r--docs/cmdline-opts/login-options.d15
-rw-r--r--docs/cmdline-opts/mail-auth.d7
-rw-r--r--docs/cmdline-opts/mail-from.d2
-rw-r--r--docs/cmdline-opts/mail-rcpt-allowfails.d10
-rw-r--r--docs/cmdline-opts/mail-rcpt.d6
-rw-r--r--docs/cmdline-opts/manual.d4
-rw-r--r--docs/cmdline-opts/max-filesize.d17
-rw-r--r--docs/cmdline-opts/max-redirs.d2
-rw-r--r--docs/cmdline-opts/max-time.d13
-rw-r--r--docs/cmdline-opts/metalink.d6
-rw-r--r--docs/cmdline-opts/negotiate.d4
-rw-r--r--docs/cmdline-opts/netrc-file.d4
-rw-r--r--docs/cmdline-opts/netrc-optional.d2
-rw-r--r--docs/cmdline-opts/netrc.d20
-rw-r--r--docs/cmdline-opts/next.d8
-rw-r--r--docs/cmdline-opts/no-alpn.d5
-rw-r--r--docs/cmdline-opts/no-buffer.d11
-rw-r--r--docs/cmdline-opts/no-clobber.d8
-rw-r--r--docs/cmdline-opts/no-keepalive.d2
-rw-r--r--docs/cmdline-opts/no-npn.d4
-rw-r--r--docs/cmdline-opts/no-progress-meter.d2
-rw-r--r--docs/cmdline-opts/no-sessionid.d2
-rw-r--r--docs/cmdline-opts/noproxy.d14
-rw-r--r--docs/cmdline-opts/ntlm-wb.d2
-rw-r--r--docs/cmdline-opts/ntlm.d4
-rw-r--r--docs/cmdline-opts/oauth2-bearer.d2
-rw-r--r--docs/cmdline-opts/output-dir.d6
-rw-r--r--docs/cmdline-opts/output.d22
-rw-r--r--docs/cmdline-opts/page-footer75
-rw-r--r--docs/cmdline-opts/page-header139
-rw-r--r--docs/cmdline-opts/parallel-immediate.d8
-rw-r--r--docs/cmdline-opts/parallel-max.d2
-rw-r--r--docs/cmdline-opts/parallel.d6
-rw-r--r--docs/cmdline-opts/pass.d2
-rw-r--r--docs/cmdline-opts/path-as-is.d4
-rw-r--r--docs/cmdline-opts/pinnedpubkey.d22
-rw-r--r--docs/cmdline-opts/post301.d2
-rw-r--r--docs/cmdline-opts/post302.d2
-rw-r--r--docs/cmdline-opts/post303.d2
-rw-r--r--docs/cmdline-opts/preproxy.d4
-rw-r--r--docs/cmdline-opts/progress-bar.d10
-rw-r--r--docs/cmdline-opts/proto-default.d2
-rw-r--r--docs/cmdline-opts/proto-redir.d4
-rw-r--r--docs/cmdline-opts/proto.d2
-rw-r--r--docs/cmdline-opts/proxy-anyauth.d2
-rw-r--r--docs/cmdline-opts/proxy-basic.d2
-rw-r--r--docs/cmdline-opts/proxy-ca-native.d21
-rw-r--r--docs/cmdline-opts/proxy-cacert.d2
-rw-r--r--docs/cmdline-opts/proxy-capath.d2
-rw-r--r--docs/cmdline-opts/proxy-cert-type.d2
-rw-r--r--docs/cmdline-opts/proxy-cert.d2
-rw-r--r--docs/cmdline-opts/proxy-ciphers.d8
-rw-r--r--docs/cmdline-opts/proxy-crlfile.d2
-rw-r--r--docs/cmdline-opts/proxy-digest.d2
-rw-r--r--docs/cmdline-opts/proxy-header.d18
-rw-r--r--docs/cmdline-opts/proxy-http2.d18
-rw-r--r--docs/cmdline-opts/proxy-insecure.d2
-rw-r--r--docs/cmdline-opts/proxy-key-type.d2
-rw-r--r--docs/cmdline-opts/proxy-key.d2
-rw-r--r--docs/cmdline-opts/proxy-negotiate.d2
-rw-r--r--docs/cmdline-opts/proxy-ntlm.d2
-rw-r--r--docs/cmdline-opts/proxy-pass.d2
-rw-r--r--docs/cmdline-opts/proxy-pinnedpubkey.d6
-rw-r--r--docs/cmdline-opts/proxy-service-name.d2
-rw-r--r--docs/cmdline-opts/proxy-ssl-allow-beast.d2
-rw-r--r--docs/cmdline-opts/proxy-ssl-auto-client-cert.d2
-rw-r--r--docs/cmdline-opts/proxy-tls13-ciphers.d6
-rw-r--r--docs/cmdline-opts/proxy-tlsauthtype.d2
-rw-r--r--docs/cmdline-opts/proxy-tlspassword.d2
-rw-r--r--docs/cmdline-opts/proxy-tlsuser.d2
-rw-r--r--docs/cmdline-opts/proxy-tlsv1.d2
-rw-r--r--docs/cmdline-opts/proxy-user.d12
-rw-r--r--docs/cmdline-opts/proxy.d24
-rw-r--r--docs/cmdline-opts/proxy1.0.d4
-rw-r--r--docs/cmdline-opts/proxytunnel.d10
-rw-r--r--docs/cmdline-opts/pubkey.d10
-rw-r--r--docs/cmdline-opts/quote.d53
-rw-r--r--docs/cmdline-opts/random-file.d10
-rw-r--r--docs/cmdline-opts/range.d18
-rw-r--r--docs/cmdline-opts/rate.d17
-rw-r--r--docs/cmdline-opts/raw.d2
-rw-r--r--docs/cmdline-opts/referer.d2
-rw-r--r--docs/cmdline-opts/remote-header-name.d17
-rw-r--r--docs/cmdline-opts/remote-name-all.d2
-rw-r--r--docs/cmdline-opts/remote-name.d14
-rw-r--r--docs/cmdline-opts/remote-time.d6
-rw-r--r--docs/cmdline-opts/remove-on-error.d2
-rw-r--r--docs/cmdline-opts/request-target.d5
-rw-r--r--docs/cmdline-opts/request.d53
-rw-r--r--docs/cmdline-opts/resolve.d20
-rw-r--r--docs/cmdline-opts/retry-all-errors.d24
-rw-r--r--docs/cmdline-opts/retry-connrefused.d4
-rw-r--r--docs/cmdline-opts/retry-delay.d6
-rw-r--r--docs/cmdline-opts/retry-max-time.d12
-rw-r--r--docs/cmdline-opts/retry.d16
-rw-r--r--docs/cmdline-opts/sasl-authzid.d15
-rw-r--r--docs/cmdline-opts/sasl-ir.d2
-rw-r--r--docs/cmdline-opts/service-name.d4
-rw-r--r--docs/cmdline-opts/show-error.d6
-rw-r--r--docs/cmdline-opts/silent.d4
-rw-r--r--docs/cmdline-opts/socks4.d9
-rw-r--r--docs/cmdline-opts/socks4a.d9
-rw-r--r--docs/cmdline-opts/socks5-basic.d2
-rw-r--r--docs/cmdline-opts/socks5-gssapi-nec.d2
-rw-r--r--docs/cmdline-opts/socks5-gssapi-service.d9
-rw-r--r--docs/cmdline-opts/socks5-gssapi.d2
-rw-r--r--docs/cmdline-opts/socks5-hostname.d9
-rw-r--r--docs/cmdline-opts/socks5.d9
-rw-r--r--docs/cmdline-opts/speed-limit.d2
-rw-r--r--docs/cmdline-opts/speed-time.d10
-rw-r--r--docs/cmdline-opts/ssl-allow-beast.d2
-rw-r--r--docs/cmdline-opts/ssl-auto-client-cert.d12
-rw-r--r--docs/cmdline-opts/ssl-no-revoke.d2
-rw-r--r--docs/cmdline-opts/ssl-reqd.d16
-rw-r--r--docs/cmdline-opts/ssl-revoke-best-effort.d4
-rw-r--r--docs/cmdline-opts/ssl.d10
-rw-r--r--docs/cmdline-opts/sslv2.d7
-rw-r--r--docs/cmdline-opts/sslv3.d7
-rw-r--r--docs/cmdline-opts/stderr.d6
-rw-r--r--docs/cmdline-opts/styled-output.d7
-rw-r--r--docs/cmdline-opts/suppress-connect-headers.d2
-rw-r--r--docs/cmdline-opts/tcp-fastopen.d7
-rw-r--r--docs/cmdline-opts/tcp-nodelay.d6
-rw-r--r--docs/cmdline-opts/telnet-option.d16
-rw-r--r--docs/cmdline-opts/tftp-blksize.d8
-rw-r--r--docs/cmdline-opts/tftp-no-options.d2
-rw-r--r--docs/cmdline-opts/time-cond.d5
-rw-r--r--docs/cmdline-opts/tls-max.d5
-rw-r--r--docs/cmdline-opts/tls13-ciphers.d10
-rw-r--r--docs/cmdline-opts/tlsauthtype.d2
-rw-r--r--docs/cmdline-opts/tlspassword.d2
-rw-r--r--docs/cmdline-opts/tlsuser.d2
-rw-r--r--docs/cmdline-opts/tlsv1.0.d2
-rw-r--r--docs/cmdline-opts/tlsv1.1.d2
-rw-r--r--docs/cmdline-opts/tlsv1.2.d2
-rw-r--r--docs/cmdline-opts/tlsv1.3.d2
-rw-r--r--docs/cmdline-opts/tlsv1.d4
-rw-r--r--docs/cmdline-opts/tr-encoding.d2
-rw-r--r--docs/cmdline-opts/trace-ascii.d8
-rw-r--r--docs/cmdline-opts/trace-config.d21
-rw-r--r--docs/cmdline-opts/trace-ids.d12
-rw-r--r--docs/cmdline-opts/trace-time.d6
-rw-r--r--docs/cmdline-opts/trace.d10
-rw-r--r--docs/cmdline-opts/unix-socket.d2
-rw-r--r--docs/cmdline-opts/upload-file.d25
-rw-r--r--docs/cmdline-opts/url-query.d25
-rw-r--r--docs/cmdline-opts/url.d11
-rw-r--r--docs/cmdline-opts/use-ascii.d2
-rw-r--r--docs/cmdline-opts/user-agent.d4
-rw-r--r--docs/cmdline-opts/user.d14
-rw-r--r--docs/cmdline-opts/variable.d55
-rw-r--r--docs/cmdline-opts/verbose.d16
-rw-r--r--docs/cmdline-opts/version.d11
-rw-r--r--docs/cmdline-opts/write-out.d215
-rw-r--r--docs/cmdline-opts/xattr.d2
-rw-r--r--docs/curl-config.14
-rw-r--r--docs/curl.14821
-rw-r--r--docs/examples/10-at-a-time.c22
-rw-r--r--docs/examples/Makefile.am9
-rw-r--r--docs/examples/Makefile.example4
-rw-r--r--docs/examples/Makefile.in406
-rw-r--r--docs/examples/Makefile.inc22
-rw-r--r--docs/examples/Makefile.mk (renamed from docs/examples/Makefile.m32)46
-rw-r--r--docs/examples/README.md2
-rw-r--r--docs/examples/altsvc.c2
-rw-r--r--docs/examples/anyauthput.c8
-rw-r--r--docs/examples/cacertinmem.c4
-rw-r--r--docs/examples/certinfo.c2
-rw-r--r--docs/examples/chkspeed.c2
-rw-r--r--docs/examples/connect-to.c70
-rw-r--r--docs/examples/cookie_interface.c6
-rw-r--r--docs/examples/crawler.c13
-rw-r--r--docs/examples/curlgtk.c119
-rw-r--r--docs/examples/debug.c2
-rw-r--r--docs/examples/default-scheme.c57
-rw-r--r--docs/examples/ephiperfifo.c10
-rw-r--r--docs/examples/evhiperfifo.c6
-rw-r--r--docs/examples/externalsocket.c11
-rw-r--r--docs/examples/fileupload.c2
-rw-r--r--docs/examples/ftp-wildcard.c2
-rw-r--r--docs/examples/ftpget.c4
-rw-r--r--docs/examples/ftpgetinfo.c2
-rw-r--r--docs/examples/ftpgetresp.c2
-rw-r--r--docs/examples/ftpsget.c4
-rw-r--r--docs/examples/ftpupload.c4
-rw-r--r--docs/examples/ftpuploadfrommem.c2
-rw-r--r--docs/examples/ftpuploadresume.c10
-rw-r--r--docs/examples/getinfo.c2
-rw-r--r--docs/examples/getinmemory.c2
-rw-r--r--docs/examples/getredirect.c2
-rw-r--r--docs/examples/getreferrer.c2
-rw-r--r--docs/examples/ghiper.c6
-rw-r--r--docs/examples/headerapi.c2
-rw-r--r--docs/examples/hiperfifo.c6
-rw-r--r--docs/examples/href_extractor.c2
-rw-r--r--docs/examples/hsts-preload.c118
-rw-r--r--docs/examples/htmltidy.c2
-rw-r--r--docs/examples/htmltitle.cpp4
-rw-r--r--docs/examples/http-options.c59
-rw-r--r--docs/examples/http-post.c4
-rw-r--r--docs/examples/http2-download.c9
-rw-r--r--docs/examples/http2-pushinmemory.c4
-rw-r--r--docs/examples/http2-serverpush.c16
-rw-r--r--docs/examples/http2-upload.c2
-rw-r--r--docs/examples/http3-present.c2
-rw-r--r--docs/examples/http3.c9
-rw-r--r--docs/examples/httpcustomheader.c2
-rw-r--r--docs/examples/httpput-postfields.c4
-rw-r--r--docs/examples/httpput.c8
-rw-r--r--docs/examples/https.c5
-rw-r--r--docs/examples/imap-append.c14
-rw-r--r--docs/examples/imap-authzid.c4
-rw-r--r--docs/examples/imap-copy.c4
-rw-r--r--docs/examples/imap-create.c4
-rw-r--r--docs/examples/imap-delete.c4
-rw-r--r--docs/examples/imap-examine.c4
-rw-r--r--docs/examples/imap-fetch.c4
-rw-r--r--docs/examples/imap-list.c4
-rw-r--r--docs/examples/imap-lsub.c6
-rw-r--r--docs/examples/imap-multi.c4
-rw-r--r--docs/examples/imap-noop.c4
-rw-r--r--docs/examples/imap-search.c4
-rw-r--r--docs/examples/imap-ssl.c6
-rw-r--r--docs/examples/imap-store.c4
-rw-r--r--docs/examples/imap-tls.c6
-rw-r--r--docs/examples/interface.c52
-rw-r--r--docs/examples/ipv6.c62
-rw-r--r--docs/examples/keepalive.c55
-rw-r--r--docs/examples/localport.c53
-rw-r--r--docs/examples/maxconnects.c66
-rw-r--r--docs/examples/multi-app.c4
-rw-r--r--docs/examples/multi-debugcallback.c11
-rw-r--r--docs/examples/multi-double.c2
-rw-r--r--docs/examples/multi-event.c2
-rw-r--r--docs/examples/multi-formadd.c2
-rw-r--r--docs/examples/multi-legacy.c6
-rw-r--r--docs/examples/multi-post.c2
-rw-r--r--docs/examples/multi-single.c4
-rw-r--r--docs/examples/multi-uv.c2
-rw-r--r--docs/examples/multithread.c4
-rw-r--r--docs/examples/opensslthreadlock.c97
-rw-r--r--docs/examples/parseurl.c4
-rw-r--r--docs/examples/persistent.c4
-rw-r--r--docs/examples/pop3-authzid.c4
-rw-r--r--docs/examples/pop3-dele.c4
-rw-r--r--docs/examples/pop3-list.c4
-rw-r--r--docs/examples/pop3-multi.c4
-rw-r--r--docs/examples/pop3-noop.c4
-rw-r--r--docs/examples/pop3-retr.c4
-rw-r--r--docs/examples/pop3-ssl.c6
-rw-r--r--docs/examples/pop3-stat.c4
-rw-r--r--docs/examples/pop3-tls.c6
-rw-r--r--docs/examples/pop3-top.c2
-rw-r--r--docs/examples/pop3-uidl.c4
-rw-r--r--docs/examples/post-callback.c4
-rw-r--r--docs/examples/postinmemory.c4
-rw-r--r--docs/examples/postit2-formadd.c4
-rw-r--r--docs/examples/postit2.c4
-rw-r--r--docs/examples/progressfunc.c2
-rw-r--r--docs/examples/protofeats.c (renamed from tests/libtest/chkdecimalpoint.c)39
-rw-r--r--docs/examples/resolve.c2
-rw-r--r--docs/examples/rtsp-options.c55
-rw-r--r--docs/examples/sendrecv.c6
-rw-r--r--docs/examples/sepheaders.c2
-rw-r--r--docs/examples/sessioninfo.c2
-rw-r--r--docs/examples/sftpget.c4
-rw-r--r--docs/examples/sftpuploadresume.c2
-rw-r--r--docs/examples/shared-connection-cache.c2
-rw-r--r--docs/examples/simple.c2
-rw-r--r--docs/examples/simplepost.c2
-rw-r--r--docs/examples/simplessl.c4
-rw-r--r--docs/examples/smooth-gtk-thread.c2
-rw-r--r--docs/examples/smtp-authzid.c16
-rw-r--r--docs/examples/smtp-expn.c10
-rw-r--r--docs/examples/smtp-mail.c16
-rw-r--r--docs/examples/smtp-mime.c15
-rw-r--r--docs/examples/smtp-multi.c8
-rw-r--r--docs/examples/smtp-ssl.c10
-rw-r--r--docs/examples/smtp-tls.c15
-rw-r--r--docs/examples/smtp-vrfy.c10
-rw-r--r--docs/examples/sslbackend.c6
-rw-r--r--docs/examples/synctime.c6
-rw-r--r--docs/examples/threaded-ssl.c2
-rw-r--r--docs/examples/unixsocket.c67
-rw-r--r--docs/examples/url2file.c2
-rw-r--r--docs/examples/urlapi.c7
-rw-r--r--docs/examples/usercertinmem.c14
-rwxr-xr-xdocs/examples/version-check.pl2
-rw-r--r--docs/examples/websocket-cb.c68
-rw-r--r--docs/examples/websocket.c131
-rw-r--r--docs/examples/xmlstream.c2
-rw-r--r--docs/libcurl/ABI.md2
-rw-r--r--docs/libcurl/CMakeLists.txt2
-rw-r--r--docs/libcurl/Makefile.am2
-rw-r--r--docs/libcurl/Makefile.in22
-rw-r--r--docs/libcurl/Makefile.inc8
-rw-r--r--docs/libcurl/curl_easy_cleanup.351
-rw-r--r--docs/libcurl/curl_easy_duphandle.357
-rw-r--r--docs/libcurl/curl_easy_escape.328
-rw-r--r--docs/libcurl/curl_easy_getinfo.381
-rw-r--r--docs/libcurl/curl_easy_header.363
-rw-r--r--docs/libcurl/curl_easy_init.353
-rw-r--r--docs/libcurl/curl_easy_nextheader.340
-rw-r--r--docs/libcurl/curl_easy_option_by_id.322
-rw-r--r--docs/libcurl/curl_easy_option_by_name.318
-rw-r--r--docs/libcurl/curl_easy_option_next.360
-rw-r--r--docs/libcurl/curl_easy_pause.377
-rw-r--r--docs/libcurl/curl_easy_perform.347
-rw-r--r--docs/libcurl/curl_easy_recv.366
-rw-r--r--docs/libcurl/curl_easy_reset.322
-rw-r--r--docs/libcurl/curl_easy_send.362
-rw-r--r--docs/libcurl/curl_easy_setopt.358
-rw-r--r--docs/libcurl/curl_easy_strerror.330
-rw-r--r--docs/libcurl/curl_easy_unescape.356
-rw-r--r--docs/libcurl/curl_easy_upkeep.337
-rw-r--r--docs/libcurl/curl_escape.334
-rw-r--r--docs/libcurl/curl_formadd.3234
-rw-r--r--docs/libcurl/curl_formfree.341
-rw-r--r--docs/libcurl/curl_formget.356
-rw-r--r--docs/libcurl/curl_free.316
-rw-r--r--docs/libcurl/curl_getdate.376
-rw-r--r--docs/libcurl/curl_getenv.314
-rw-r--r--docs/libcurl/curl_global_cleanup.319
-rw-r--r--docs/libcurl/curl_global_init.334
-rw-r--r--docs/libcurl/curl_global_init_mem.323
-rw-r--r--docs/libcurl/curl_global_sslset.383
-rw-r--r--docs/libcurl/curl_global_trace.3122
-rw-r--r--docs/libcurl/curl_mime_addpart.348
-rw-r--r--docs/libcurl/curl_mime_data.334
-rw-r--r--docs/libcurl/curl_mime_data_cb.375
-rw-r--r--docs/libcurl/curl_mime_encoder.344
-rw-r--r--docs/libcurl/curl_mime_filedata.342
-rw-r--r--docs/libcurl/curl_mime_filename.343
-rw-r--r--docs/libcurl/curl_mime_free.327
-rw-r--r--docs/libcurl/curl_mime_headers.338
-rw-r--r--docs/libcurl/curl_mime_init.358
-rw-r--r--docs/libcurl/curl_mime_name.332
-rw-r--r--docs/libcurl/curl_mime_subparts.355
-rw-r--r--docs/libcurl/curl_mime_type.340
-rw-r--r--docs/libcurl/curl_mprintf.317
-rw-r--r--docs/libcurl/curl_multi_add_handle.354
-rw-r--r--docs/libcurl/curl_multi_assign.338
-rw-r--r--docs/libcurl/curl_multi_cleanup.323
-rw-r--r--docs/libcurl/curl_multi_fdset.374
-rw-r--r--docs/libcurl/curl_multi_get_handles.383
-rw-r--r--docs/libcurl/curl_multi_info_read.355
-rw-r--r--docs/libcurl/curl_multi_init.326
-rw-r--r--docs/libcurl/curl_multi_perform.355
-rw-r--r--docs/libcurl/curl_multi_poll.375
-rw-r--r--docs/libcurl/curl_multi_remove_handle.346
-rw-r--r--docs/libcurl/curl_multi_setopt.335
-rw-r--r--docs/libcurl/curl_multi_socket.334
-rw-r--r--docs/libcurl/curl_multi_socket_action.333
-rw-r--r--docs/libcurl/curl_multi_strerror.332
-rw-r--r--docs/libcurl/curl_multi_timeout.342
-rw-r--r--docs/libcurl/curl_multi_wait.380
-rw-r--r--docs/libcurl/curl_multi_wakeup.375
-rw-r--r--docs/libcurl/curl_pushheader_byname.389
-rw-r--r--docs/libcurl/curl_pushheader_bynum.376
-rw-r--r--docs/libcurl/curl_share_cleanup.318
-rw-r--r--docs/libcurl/curl_share_init.312
-rw-r--r--docs/libcurl/curl_share_setopt.314
-rw-r--r--docs/libcurl/curl_share_strerror.321
-rw-r--r--docs/libcurl/curl_slist_append.339
-rw-r--r--docs/libcurl/curl_slist_free_all.329
-rw-r--r--docs/libcurl/curl_strequal.320
-rw-r--r--docs/libcurl/curl_unescape.345
-rw-r--r--docs/libcurl/curl_url.324
-rw-r--r--docs/libcurl/curl_url_cleanup.317
-rw-r--r--docs/libcurl/curl_url_dup.322
-rw-r--r--docs/libcurl/curl_url_get.3133
-rw-r--r--docs/libcurl/curl_url_set.3135
-rw-r--r--docs/libcurl/curl_url_strerror.327
-rw-r--r--docs/libcurl/curl_version.311
-rw-r--r--docs/libcurl/curl_version_info.3190
-rw-r--r--docs/libcurl/curl_ws_meta.360
-rw-r--r--docs/libcurl/curl_ws_recv.341
-rw-r--r--docs/libcurl/curl_ws_send.349
-rw-r--r--docs/libcurl/libcurl-easy.324
-rw-r--r--docs/libcurl/libcurl-env-dbg.398
-rw-r--r--docs/libcurl/libcurl-env.374
-rw-r--r--docs/libcurl/libcurl-errors.366
-rw-r--r--docs/libcurl/libcurl-multi.348
-rw-r--r--docs/libcurl/libcurl-security.367
-rw-r--r--docs/libcurl/libcurl-share.316
-rw-r--r--docs/libcurl/libcurl-symbols.347
-rw-r--r--docs/libcurl/libcurl-thread.3103
-rw-r--r--docs/libcurl/libcurl-tutorial.3427
-rw-r--r--docs/libcurl/libcurl-url.352
-rw-r--r--docs/libcurl/libcurl-ws.3119
-rw-r--r--docs/libcurl/libcurl.385
-rw-r--r--docs/libcurl/libcurl.m430
-rwxr-xr-xdocs/libcurl/mksymbolsmanpage.pl16
-rw-r--r--docs/libcurl/opts/CMakeLists.txt2
-rw-r--r--docs/libcurl/opts/CURLINFO_ACTIVESOCKET.338
-rw-r--r--docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.332
-rw-r--r--docs/libcurl/opts/CURLINFO_APPCONNECT_TIME_T.336
-rw-r--r--docs/libcurl/opts/CURLINFO_CAINFO.327
-rw-r--r--docs/libcurl/opts/CURLINFO_CAPATH.327
-rw-r--r--docs/libcurl/opts/CURLINFO_CERTINFO.381
-rw-r--r--docs/libcurl/opts/CURLINFO_CONDITION_UNMET.348
-rw-r--r--docs/libcurl/opts/CURLINFO_CONNECT_TIME.332
-rw-r--r--docs/libcurl/opts/CURLINFO_CONNECT_TIME_T.335
-rw-r--r--docs/libcurl/opts/CURLINFO_CONN_ID.376
-rw-r--r--docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.333
-rw-r--r--docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.333
-rw-r--r--docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.333
-rw-r--r--docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD_T.333
-rw-r--r--docs/libcurl/opts/CURLINFO_CONTENT_TYPE.343
-rw-r--r--docs/libcurl/opts/CURLINFO_COOKIELIST.353
-rw-r--r--docs/libcurl/opts/CURLINFO_EFFECTIVE_METHOD.342
-rw-r--r--docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.341
-rw-r--r--docs/libcurl/opts/CURLINFO_FILETIME.343
-rw-r--r--docs/libcurl/opts/CURLINFO_FILETIME_T.342
-rw-r--r--docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.339
-rw-r--r--docs/libcurl/opts/CURLINFO_HEADER_SIZE.336
-rw-r--r--docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.351
-rw-r--r--docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.342
-rw-r--r--docs/libcurl/opts/CURLINFO_HTTP_VERSION.336
-rw-r--r--docs/libcurl/opts/CURLINFO_LASTSOCKET.342
-rw-r--r--docs/libcurl/opts/CURLINFO_LOCAL_IP.326
-rw-r--r--docs/libcurl/opts/CURLINFO_LOCAL_PORT.311
-rw-r--r--docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.332
-rw-r--r--docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME_T.334
-rw-r--r--docs/libcurl/opts/CURLINFO_NUM_CONNECTS.334
-rw-r--r--docs/libcurl/opts/CURLINFO_OS_ERRNO.332
-rw-r--r--docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.335
-rw-r--r--docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME_T.348
-rw-r--r--docs/libcurl/opts/CURLINFO_PRIMARY_IP.326
-rw-r--r--docs/libcurl/opts/CURLINFO_PRIMARY_PORT.334
-rw-r--r--docs/libcurl/opts/CURLINFO_PRIVATE.336
-rw-r--r--docs/libcurl/opts/CURLINFO_PROTOCOL.332
-rw-r--r--docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.352
-rw-r--r--docs/libcurl/opts/CURLINFO_PROXY_ERROR.342
-rw-r--r--docs/libcurl/opts/CURLINFO_PROXY_SSL_VERIFYRESULT.336
-rw-r--r--docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.332
-rw-r--r--docs/libcurl/opts/CURLINFO_REDIRECT_TIME.334
-rw-r--r--docs/libcurl/opts/CURLINFO_REDIRECT_TIME_T.346
-rw-r--r--docs/libcurl/opts/CURLINFO_REDIRECT_URL.335
-rw-r--r--docs/libcurl/opts/CURLINFO_REFERER.343
-rw-r--r--docs/libcurl/opts/CURLINFO_REQUEST_SIZE.336
-rw-r--r--docs/libcurl/opts/CURLINFO_RESPONSE_CODE.343
-rw-r--r--docs/libcurl/opts/CURLINFO_RETRY_AFTER.335
-rw-r--r--docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.334
-rw-r--r--docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.329
-rw-r--r--docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.333
-rw-r--r--docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.335
-rw-r--r--docs/libcurl/opts/CURLINFO_SCHEME.340
-rw-r--r--docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.344
-rw-r--r--docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD_T.341
-rw-r--r--docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.332
-rw-r--r--docs/libcurl/opts/CURLINFO_SIZE_UPLOAD_T.333
-rw-r--r--docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.333
-rw-r--r--docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD_T.335
-rw-r--r--docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.331
-rw-r--r--docs/libcurl/opts/CURLINFO_SPEED_UPLOAD_T.331
-rw-r--r--docs/libcurl/opts/CURLINFO_SSL_ENGINES.333
-rw-r--r--docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.335
-rw-r--r--docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.333
-rw-r--r--docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME_T.335
-rw-r--r--docs/libcurl/opts/CURLINFO_TLS_SESSION.334
-rw-r--r--docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.349
-rw-r--r--docs/libcurl/opts/CURLINFO_TOTAL_TIME.333
-rw-r--r--docs/libcurl/opts/CURLINFO_TOTAL_TIME_T.335
-rw-r--r--docs/libcurl/opts/CURLINFO_XFER_ID.376
-rw-r--r--docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.322
-rw-r--r--docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.320
-rw-r--r--docs/libcurl/opts/CURLMOPT_MAXCONNECTS.325
-rw-r--r--docs/libcurl/opts/CURLMOPT_MAX_CONCURRENT_STREAMS.316
-rw-r--r--docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.344
-rw-r--r--docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.320
-rw-r--r--docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.338
-rw-r--r--docs/libcurl/opts/CURLMOPT_PIPELINING.360
-rw-r--r--docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.324
-rw-r--r--docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.323
-rw-r--r--docs/libcurl/opts/CURLMOPT_PUSHDATA.330
-rw-r--r--docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.361
-rw-r--r--docs/libcurl/opts/CURLMOPT_SOCKETDATA.341
-rw-r--r--docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.364
-rw-r--r--docs/libcurl/opts/CURLMOPT_TIMERDATA.358
-rw-r--r--docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.363
-rw-r--r--docs/libcurl/opts/CURLOPT_ABSTRACT_UNIX_SOCKET.331
-rw-r--r--docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.323
-rw-r--r--docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.330
-rw-r--r--docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.330
-rw-r--r--docs/libcurl/opts/CURLOPT_ALTSVC.325
-rw-r--r--docs/libcurl/opts/CURLOPT_ALTSVC_CTRL.341
-rw-r--r--docs/libcurl/opts/CURLOPT_APPEND.324
-rw-r--r--docs/libcurl/opts/CURLOPT_AUTOREFERER.337
-rw-r--r--docs/libcurl/opts/CURLOPT_AWS_SIGV4.356
-rw-r--r--docs/libcurl/opts/CURLOPT_BUFFERSIZE.335
-rw-r--r--docs/libcurl/opts/CURLOPT_CAINFO.342
-rw-r--r--docs/libcurl/opts/CURLOPT_CAINFO_BLOB.344
-rw-r--r--docs/libcurl/opts/CURLOPT_CAPATH.329
-rw-r--r--docs/libcurl/opts/CURLOPT_CA_CACHE_TIMEOUT.385
-rw-r--r--docs/libcurl/opts/CURLOPT_CERTINFO.359
-rw-r--r--docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.322
-rw-r--r--docs/libcurl/opts/CURLOPT_CHUNK_DATA.320
-rw-r--r--docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.316
-rw-r--r--docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.331
-rw-r--r--docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.329
-rw-r--r--docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.354
-rw-r--r--docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.335
-rw-r--r--docs/libcurl/opts/CURLOPT_CONNECT_ONLY.337
-rw-r--r--docs/libcurl/opts/CURLOPT_CONNECT_TO.348
-rw-r--r--docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.347
-rw-r--r--docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.342
-rw-r--r--docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.345
-rw-r--r--docs/libcurl/opts/CURLOPT_COOKIE.350
-rw-r--r--docs/libcurl/opts/CURLOPT_COOKIEFILE.349
-rw-r--r--docs/libcurl/opts/CURLOPT_COOKIEJAR.354
-rw-r--r--docs/libcurl/opts/CURLOPT_COOKIELIST.3106
-rw-r--r--docs/libcurl/opts/CURLOPT_COOKIESESSION.345
-rw-r--r--docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.330
-rw-r--r--docs/libcurl/opts/CURLOPT_CRLF.324
-rw-r--r--docs/libcurl/opts/CURLOPT_CRLFILE.331
-rw-r--r--docs/libcurl/opts/CURLOPT_CURLU.351
-rw-r--r--docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.353
-rw-r--r--docs/libcurl/opts/CURLOPT_DEBUGDATA.321
-rw-r--r--docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.352
-rw-r--r--docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.329
-rw-r--r--docs/libcurl/opts/CURLOPT_DIRLISTONLY.329
-rw-r--r--docs/libcurl/opts/CURLOPT_DISALLOW_USERNAME_IN_URL.329
-rw-r--r--docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.357
-rw-r--r--docs/libcurl/opts/CURLOPT_DNS_INTERFACE.325
-rw-r--r--docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.324
-rw-r--r--docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.324
-rw-r--r--docs/libcurl/opts/CURLOPT_DNS_SERVERS.325
-rw-r--r--docs/libcurl/opts/CURLOPT_DNS_SHUFFLE_ADDRESSES.342
-rw-r--r--docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.336
-rw-r--r--docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYHOST.337
-rw-r--r--docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYPEER.336
-rw-r--r--docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYSTATUS.336
-rw-r--r--docs/libcurl/opts/CURLOPT_DOH_URL.339
-rw-r--r--docs/libcurl/opts/CURLOPT_EGDSOCKET.328
-rw-r--r--docs/libcurl/opts/CURLOPT_ERRORBUFFER.375
-rw-r--r--docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.322
-rw-r--r--docs/libcurl/opts/CURLOPT_FAILONERROR.333
-rw-r--r--docs/libcurl/opts/CURLOPT_FILETIME.348
-rw-r--r--docs/libcurl/opts/CURLOPT_FNMATCH_DATA.335
-rw-r--r--docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.329
-rw-r--r--docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.364
-rw-r--r--docs/libcurl/opts/CURLOPT_FORBID_REUSE.329
-rw-r--r--docs/libcurl/opts/CURLOPT_FRESH_CONNECT.331
-rw-r--r--docs/libcurl/opts/CURLOPT_FTPPORT.358
-rw-r--r--docs/libcurl/opts/CURLOPT_FTPSSLAUTH.327
-rw-r--r--docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.323
-rw-r--r--docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.336
-rw-r--r--docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.338
-rw-r--r--docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.332
-rw-r--r--docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.335
-rw-r--r--docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.330
-rw-r--r--docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.345
-rw-r--r--docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.338
-rw-r--r--docs/libcurl/opts/CURLOPT_FTP_USE_PRET.326
-rw-r--r--docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.326
-rw-r--r--docs/libcurl/opts/CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.321
-rw-r--r--docs/libcurl/opts/CURLOPT_HAPROXYPROTOCOL.319
-rw-r--r--docs/libcurl/opts/CURLOPT_HAPROXY_CLIENT_IP.366
-rw-r--r--docs/libcurl/opts/CURLOPT_HEADER.321
-rw-r--r--docs/libcurl/opts/CURLOPT_HEADERDATA.339
-rw-r--r--docs/libcurl/opts/CURLOPT_HEADERFUNCTION.365
-rw-r--r--docs/libcurl/opts/CURLOPT_HEADEROPT.353
-rw-r--r--docs/libcurl/opts/CURLOPT_HSTS.329
-rw-r--r--docs/libcurl/opts/CURLOPT_HSTSREADDATA.339
-rw-r--r--docs/libcurl/opts/CURLOPT_HSTSREADFUNCTION.351
-rw-r--r--docs/libcurl/opts/CURLOPT_HSTSWRITEDATA.337
-rw-r--r--docs/libcurl/opts/CURLOPT_HSTSWRITEFUNCTION.349
-rw-r--r--docs/libcurl/opts/CURLOPT_HSTS_CTRL.327
-rw-r--r--docs/libcurl/opts/CURLOPT_HTTP09_ALLOWED.322
-rw-r--r--docs/libcurl/opts/CURLOPT_HTTP200ALIASES.335
-rw-r--r--docs/libcurl/opts/CURLOPT_HTTPAUTH.354
-rw-r--r--docs/libcurl/opts/CURLOPT_HTTPGET.329
-rw-r--r--docs/libcurl/opts/CURLOPT_HTTPHEADER.388
-rw-r--r--docs/libcurl/opts/CURLOPT_HTTPPOST.366
-rw-r--r--docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.325
-rw-r--r--docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.326
-rw-r--r--docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.331
-rw-r--r--docs/libcurl/opts/CURLOPT_HTTP_VERSION.366
-rw-r--r--docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.332
-rw-r--r--docs/libcurl/opts/CURLOPT_INFILESIZE.338
-rw-r--r--docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.334
-rw-r--r--docs/libcurl/opts/CURLOPT_INTERFACE.343
-rw-r--r--docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.328
-rw-r--r--docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.341
-rw-r--r--docs/libcurl/opts/CURLOPT_IOCTLDATA.326
-rw-r--r--docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.326
-rw-r--r--docs/libcurl/opts/CURLOPT_IPRESOLVE.336
-rw-r--r--docs/libcurl/opts/CURLOPT_ISSUERCERT.324
-rw-r--r--docs/libcurl/opts/CURLOPT_ISSUERCERT_BLOB.338
-rw-r--r--docs/libcurl/opts/CURLOPT_KEEP_SENDING_ON_ERROR.325
-rw-r--r--docs/libcurl/opts/CURLOPT_KEYPASSWD.331
-rw-r--r--docs/libcurl/opts/CURLOPT_KRBLEVEL.329
-rw-r--r--docs/libcurl/opts/CURLOPT_LOCALPORT.328
-rw-r--r--docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.337
-rw-r--r--docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.331
-rw-r--r--docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.335
-rw-r--r--docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.333
-rw-r--r--docs/libcurl/opts/CURLOPT_MAIL_AUTH.329
-rw-r--r--docs/libcurl/opts/CURLOPT_MAIL_FROM.329
-rw-r--r--docs/libcurl/opts/CURLOPT_MAIL_RCPT.337
-rw-r--r--docs/libcurl/opts/CURLOPT_MAIL_RCPT_ALLOWFAILS.3 (renamed from docs/libcurl/opts/CURLOPT_MAIL_RCPT_ALLLOWFAILS.3)52
-rw-r--r--docs/libcurl/opts/CURLOPT_MAXAGE_CONN.341
-rw-r--r--docs/libcurl/opts/CURLOPT_MAXCONNECTS.337
-rw-r--r--docs/libcurl/opts/CURLOPT_MAXFILESIZE.340
-rw-r--r--docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.343
-rw-r--r--docs/libcurl/opts/CURLOPT_MAXLIFETIME_CONN.336
-rw-r--r--docs/libcurl/opts/CURLOPT_MAXREDIRS.342
-rw-r--r--docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.331
-rw-r--r--docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.332
-rw-r--r--docs/libcurl/opts/CURLOPT_MIMEPOST.352
-rw-r--r--docs/libcurl/opts/CURLOPT_MIME_OPTIONS.344
-rw-r--r--docs/libcurl/opts/CURLOPT_NETRC.347
-rw-r--r--docs/libcurl/opts/CURLOPT_NETRC_FILE.328
-rw-r--r--docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.330
-rw-r--r--docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.326
-rw-r--r--docs/libcurl/opts/CURLOPT_NOBODY.338
-rw-r--r--docs/libcurl/opts/CURLOPT_NOPROGRESS.330
-rw-r--r--docs/libcurl/opts/CURLOPT_NOPROXY.350
-rw-r--r--docs/libcurl/opts/CURLOPT_NOSIGNAL.336
-rw-r--r--docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.340
-rw-r--r--docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.343
-rw-r--r--docs/libcurl/opts/CURLOPT_PASSWORD.326
-rw-r--r--docs/libcurl/opts/CURLOPT_PATH_AS_IS.331
-rw-r--r--docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.353
-rw-r--r--docs/libcurl/opts/CURLOPT_PIPEWAIT.348
-rw-r--r--docs/libcurl/opts/CURLOPT_PORT.326
-rw-r--r--docs/libcurl/opts/CURLOPT_POST.344
-rw-r--r--docs/libcurl/opts/CURLOPT_POSTFIELDS.388
-rw-r--r--docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.337
-rw-r--r--docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.341
-rw-r--r--docs/libcurl/opts/CURLOPT_POSTQUOTE.335
-rw-r--r--docs/libcurl/opts/CURLOPT_POSTREDIR.331
-rw-r--r--docs/libcurl/opts/CURLOPT_PREQUOTE.329
-rw-r--r--docs/libcurl/opts/CURLOPT_PREREQDATA.330
-rw-r--r--docs/libcurl/opts/CURLOPT_PREREQFUNCTION.325
-rw-r--r--docs/libcurl/opts/CURLOPT_PRE_PROXY.336
-rw-r--r--docs/libcurl/opts/CURLOPT_PRIVATE.335
-rw-r--r--docs/libcurl/opts/CURLOPT_PROGRESSDATA.353
-rw-r--r--docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.396
-rw-r--r--docs/libcurl/opts/CURLOPT_PROTOCOLS.333
-rw-r--r--docs/libcurl/opts/CURLOPT_PROTOCOLS_STR.330
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY.360
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXYAUTH.348
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXYHEADER.334
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXYPASSWORD.330
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXYPORT.329
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXYTYPE.334
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXYUSERNAME.330
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXYUSERPWD.331
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_CAINFO.347
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_CAINFO_BLOB.354
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_CAPATH.334
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_CRLFILE.338
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_ISSUERCERT.331
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_ISSUERCERT_BLOB.343
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_KEYPASSWD.336
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_PINNEDPUBLICKEY.343
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.323
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_SSLCERT.339
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_SSLCERTTYPE.333
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_SSLCERT_BLOB.344
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_SSLKEY.334
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_SSLKEYTYPE.333
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_SSLKEY_BLOB.351
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_SSLVERSION.329
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_SSL_CIPHER_LIST.337
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_SSL_OPTIONS.351
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYHOST.334
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYPEER.327
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_TLS13_CIPHERS.333
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_PASSWORD.332
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_TYPE.334
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_USERNAME.332
-rw-r--r--docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.330
-rw-r--r--docs/libcurl/opts/CURLOPT_PUT.353
-rw-r--r--docs/libcurl/opts/CURLOPT_QUICK_EXIT.364
-rw-r--r--docs/libcurl/opts/CURLOPT_QUOTE.347
-rw-r--r--docs/libcurl/opts/CURLOPT_RANDOM_FILE.326
-rw-r--r--docs/libcurl/opts/CURLOPT_RANGE.332
-rw-r--r--docs/libcurl/opts/CURLOPT_READDATA.344
-rw-r--r--docs/libcurl/opts/CURLOPT_READFUNCTION.352
-rw-r--r--docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.338
-rw-r--r--docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS_STR.335
-rw-r--r--docs/libcurl/opts/CURLOPT_REFERER.332
-rw-r--r--docs/libcurl/opts/CURLOPT_REQUEST_TARGET.331
-rw-r--r--docs/libcurl/opts/CURLOPT_RESOLVE.360
-rw-r--r--docs/libcurl/opts/CURLOPT_RESOLVER_START_DATA.326
-rw-r--r--docs/libcurl/opts/CURLOPT_RESOLVER_START_FUNCTION.332
-rw-r--r--docs/libcurl/opts/CURLOPT_RESUME_FROM.338
-rw-r--r--docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.342
-rw-r--r--docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.331
-rw-r--r--docs/libcurl/opts/CURLOPT_RTSP_REQUEST.370
-rw-r--r--docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.324
-rw-r--r--docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.332
-rw-r--r--docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.340
-rw-r--r--docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.327
-rw-r--r--docs/libcurl/opts/CURLOPT_SASL_AUTHZID.334
-rw-r--r--docs/libcurl/opts/CURLOPT_SASL_IR.332
-rw-r--r--docs/libcurl/opts/CURLOPT_SEEKDATA.330
-rw-r--r--docs/libcurl/opts/CURLOPT_SEEKFUNCTION.332
-rw-r--r--docs/libcurl/opts/CURLOPT_SERVER_RESPONSE_TIMEOUT.334
-rw-r--r--docs/libcurl/opts/CURLOPT_SERVICE_NAME.323
-rw-r--r--docs/libcurl/opts/CURLOPT_SHARE.367
-rw-r--r--docs/libcurl/opts/CURLOPT_SOCKOPTDATA.334
-rw-r--r--docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.353
-rw-r--r--docs/libcurl/opts/CURLOPT_SOCKS5_AUTH.328
-rw-r--r--docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.329
-rw-r--r--docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.325
-rw-r--r--docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.326
-rw-r--r--docs/libcurl/opts/CURLOPT_SSH_COMPRESSION.324
-rw-r--r--docs/libcurl/opts/CURLOPT_SSH_HOSTKEYDATA.336
-rw-r--r--docs/libcurl/opts/CURLOPT_SSH_HOSTKEYFUNCTION.329
-rw-r--r--docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.333
-rw-r--r--docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256.333
-rw-r--r--docs/libcurl/opts/CURLOPT_SSH_KEYDATA.332
-rw-r--r--docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.367
-rw-r--r--docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.329
-rw-r--r--docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.332
-rw-r--r--docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.331
-rw-r--r--docs/libcurl/opts/CURLOPT_SSLCERT.336
-rw-r--r--docs/libcurl/opts/CURLOPT_SSLCERTTYPE.329
-rw-r--r--docs/libcurl/opts/CURLOPT_SSLCERT_BLOB.340
-rw-r--r--docs/libcurl/opts/CURLOPT_SSLENGINE.328
-rw-r--r--docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.325
-rw-r--r--docs/libcurl/opts/CURLOPT_SSLKEY.328
-rw-r--r--docs/libcurl/opts/CURLOPT_SSLKEYTYPE.330
-rw-r--r--docs/libcurl/opts/CURLOPT_SSLKEY_BLOB.350
-rw-r--r--docs/libcurl/opts/CURLOPT_SSLVERSION.333
-rw-r--r--docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.338
-rw-r--r--docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.317
-rw-r--r--docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.334
-rw-r--r--docs/libcurl/opts/CURLOPT_SSL_EC_CURVES.326
-rw-r--r--docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.323
-rw-r--r--docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.323
-rw-r--r--docs/libcurl/opts/CURLOPT_SSL_FALSESTART.327
-rw-r--r--docs/libcurl/opts/CURLOPT_SSL_OPTIONS.348
-rw-r--r--docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.327
-rw-r--r--docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.341
-rw-r--r--docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.353
-rw-r--r--docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.334
-rw-r--r--docs/libcurl/opts/CURLOPT_STDERR.329
-rw-r--r--docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.334
-rw-r--r--docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.335
-rw-r--r--docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.342
-rw-r--r--docs/libcurl/opts/CURLOPT_SUPPRESS_CONNECT_HEADERS.332
-rw-r--r--docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.322
-rw-r--r--docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.334
-rw-r--r--docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.340
-rw-r--r--docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.339
-rw-r--r--docs/libcurl/opts/CURLOPT_TCP_NODELAY.333
-rw-r--r--docs/libcurl/opts/CURLOPT_TELNETOPTIONS.331
-rw-r--r--docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.335
-rw-r--r--docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.337
-rw-r--r--docs/libcurl/opts/CURLOPT_TIMECONDITION.338
-rw-r--r--docs/libcurl/opts/CURLOPT_TIMEOUT.356
-rw-r--r--docs/libcurl/opts/CURLOPT_TIMEOUT_MS.346
-rw-r--r--docs/libcurl/opts/CURLOPT_TIMEVALUE.335
-rw-r--r--docs/libcurl/opts/CURLOPT_TIMEVALUE_LARGE.334
-rw-r--r--docs/libcurl/opts/CURLOPT_TLS13_CIPHERS.335
-rw-r--r--docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.328
-rw-r--r--docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.329
-rw-r--r--docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.327
-rw-r--r--docs/libcurl/opts/CURLOPT_TRAILERDATA.322
-rw-r--r--docs/libcurl/opts/CURLOPT_TRAILERFUNCTION.332
-rw-r--r--docs/libcurl/opts/CURLOPT_TRANSFERTEXT.323
-rw-r--r--docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.324
-rw-r--r--docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.339
-rw-r--r--docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.344
-rw-r--r--docs/libcurl/opts/CURLOPT_UPKEEP_INTERVAL_MS.338
-rw-r--r--docs/libcurl/opts/CURLOPT_UPLOAD.361
-rw-r--r--docs/libcurl/opts/CURLOPT_UPLOAD_BUFFERSIZE.332
-rw-r--r--docs/libcurl/opts/CURLOPT_URL.373
-rw-r--r--docs/libcurl/opts/CURLOPT_USERAGENT.330
-rw-r--r--docs/libcurl/opts/CURLOPT_USERNAME.326
-rw-r--r--docs/libcurl/opts/CURLOPT_USERPWD.335
-rw-r--r--docs/libcurl/opts/CURLOPT_USE_SSL.326
-rw-r--r--docs/libcurl/opts/CURLOPT_VERBOSE.333
-rw-r--r--docs/libcurl/opts/CURLOPT_WILDCARDMATCH.334
-rw-r--r--docs/libcurl/opts/CURLOPT_WRITEDATA.327
-rw-r--r--docs/libcurl/opts/CURLOPT_WRITEFUNCTION.3111
-rw-r--r--docs/libcurl/opts/CURLOPT_WS_OPTIONS.328
-rw-r--r--docs/libcurl/opts/CURLOPT_XFERINFODATA.355
-rw-r--r--docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.398
-rw-r--r--docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.324
-rw-r--r--docs/libcurl/opts/CURLSHOPT_LOCKFUNC.324
-rw-r--r--docs/libcurl/opts/CURLSHOPT_SHARE.349
-rw-r--r--docs/libcurl/opts/CURLSHOPT_UNLOCKFUNC.323
-rw-r--r--docs/libcurl/opts/CURLSHOPT_UNSHARE.325
-rw-r--r--docs/libcurl/opts/CURLSHOPT_USERDATA.327
-rw-r--r--docs/libcurl/opts/Makefile.am4
-rw-r--r--docs/libcurl/opts/Makefile.in29
-rw-r--r--docs/libcurl/opts/Makefile.inc13
-rw-r--r--docs/libcurl/symbols-in-versions40
-rwxr-xr-xdocs/libcurl/symbols.pl10
-rw-r--r--docs/mk-ca-bundle.14
-rw-r--r--docs/options-in-versions10
-rw-r--r--include/Makefile.am2
-rw-r--r--include/Makefile.in14
-rw-r--r--include/README.md2
-rw-r--r--include/curl/Makefile.am2
-rw-r--r--include/curl/Makefile.in14
-rw-r--r--include/curl/curl.h333
-rw-r--r--include/curl/curlver.h14
-rw-r--r--include/curl/easy.h18
-rw-r--r--include/curl/header.h2
-rw-r--r--include/curl/mprintf.h42
-rw-r--r--include/curl/multi.h23
-rw-r--r--include/curl/options.h2
-rw-r--r--include/curl/stdcheaders.h2
-rw-r--r--include/curl/system.h122
-rw-r--r--include/curl/typecheck-gcc.h195
-rw-r--r--include/curl/urlapi.h9
-rw-r--r--include/curl/websockets.h15
-rw-r--r--lib/CMakeLists.txt243
-rw-r--r--lib/Makefile.am32
-rw-r--r--lib/Makefile.in909
-rw-r--r--lib/Makefile.inc59
-rw-r--r--lib/Makefile.mk (renamed from lib/Makefile.m32)294
-rw-r--r--lib/Makefile.soname (renamed from docs/examples/makefile.dj)51
-rw-r--r--lib/altsvc.c111
-rw-r--r--lib/altsvc.h2
-rw-r--r--lib/amigaos.c3
-rw-r--r--lib/amigaos.h3
-rw-r--r--lib/arpa_telnet.h11
-rw-r--r--lib/asyn-ares.c176
-rw-r--r--lib/asyn-thread.c85
-rw-r--r--lib/asyn.h2
-rw-r--r--lib/base64.c211
-rw-r--r--lib/bufq.c656
-rw-r--r--lib/bufq.h265
-rw-r--r--lib/bufref.c2
-rw-r--r--lib/bufref.h2
-rw-r--r--lib/c-hyper.c310
-rw-r--r--lib/c-hyper.h3
-rw-r--r--lib/cf-h1-proxy.c1114
-rw-r--r--lib/cf-h1-proxy.h (renamed from src/tool_panykey.c)30
-rw-r--r--lib/cf-h2-proxy.c1567
-rw-r--r--lib/cf-h2-proxy.h39
-rw-r--r--lib/cf-haproxy.c245
-rw-r--r--lib/cf-haproxy.h (renamed from lib/vtls/nssg.h)24
-rw-r--r--lib/cf-https-connect.c531
-rw-r--r--lib/cf-https-connect.h58
-rw-r--r--lib/cf-socket.c1996
-rw-r--r--lib/cf-socket.h191
-rw-r--r--lib/cfilters.c802
-rw-r--r--lib/cfilters.h616
-rw-r--r--lib/config-amigaos.h20
-rw-r--r--lib/config-dos.h19
-rw-r--r--lib/config-mac.h28
-rw-r--r--lib/config-os400.h40
-rw-r--r--lib/config-plan9.h15
-rw-r--r--lib/config-riscos.h37
-rw-r--r--lib/config-win32.h181
-rw-r--r--lib/config-win32ce.h34
-rw-r--r--lib/conncache.c44
-rw-r--r--lib/conncache.h7
-rw-r--r--lib/connect.c2392
-rw-r--r--lib/connect.h112
-rw-r--r--lib/content_encoding.c413
-rw-r--r--lib/content_encoding.h30
-rw-r--r--lib/cookie.c518
-rw-r--r--lib/cookie.h53
-rw-r--r--lib/curl_addrinfo.c9
-rw-r--r--lib/curl_addrinfo.h2
-rw-r--r--lib/curl_base64.h11
-rw-r--r--lib/curl_config.h.cmake164
-rw-r--r--lib/curl_config.h.in122
-rw-r--r--lib/curl_ctype.h8
-rw-r--r--lib/curl_des.c13
-rw-r--r--lib/curl_des.h13
-rw-r--r--lib/curl_endian.c2
-rw-r--r--lib/curl_endian.h11
-rw-r--r--lib/curl_fnmatch.c9
-rw-r--r--lib/curl_fnmatch.h2
-rw-r--r--lib/curl_get_line.c32
-rw-r--r--lib/curl_get_line.h2
-rw-r--r--lib/curl_gethostname.c2
-rw-r--r--lib/curl_gethostname.h2
-rw-r--r--lib/curl_gssapi.c12
-rw-r--r--lib/curl_gssapi.h2
-rw-r--r--lib/curl_hmac.h6
-rw-r--r--lib/curl_krb5.h2
-rw-r--r--lib/curl_ldap.h2
-rw-r--r--lib/curl_md4.h11
-rw-r--r--lib/curl_md5.h6
-rw-r--r--lib/curl_memory.h98
-rw-r--r--lib/curl_memrchr.c2
-rw-r--r--lib/curl_memrchr.h6
-rw-r--r--lib/curl_multibyte.c6
-rw-r--r--lib/curl_multibyte.h10
-rw-r--r--lib/curl_ntlm_core.c115
-rw-r--r--lib/curl_ntlm_core.h17
-rw-r--r--lib/curl_ntlm_wb.c20
-rw-r--r--lib/curl_ntlm_wb.h2
-rw-r--r--lib/curl_path.c76
-rw-r--r--lib/curl_path.h4
-rw-r--r--lib/curl_printf.h3
-rw-r--r--lib/curl_range.c6
-rw-r--r--lib/curl_range.h2
-rw-r--r--lib/curl_rtmp.c22
-rw-r--r--lib/curl_rtmp.h2
-rw-r--r--lib/curl_sasl.c45
-rw-r--r--lib/curl_sasl.h8
-rw-r--r--lib/curl_setup.h214
-rw-r--r--lib/curl_setup_once.h19
-rw-r--r--lib/curl_sha256.h10
-rw-r--r--lib/curl_sspi.c2
-rw-r--r--lib/curl_sspi.h263
-rw-r--r--lib/curl_threads.c8
-rw-r--r--lib/curl_threads.h5
-rw-r--r--lib/curl_trc.c241
-rw-r--r--lib/curl_trc.h146
-rw-r--r--lib/curlx.h2
-rw-r--r--lib/dict.c90
-rw-r--r--lib/dict.h2
-rw-r--r--lib/doh.c56
-rw-r--r--lib/doh.h2
-rw-r--r--lib/dynbuf.c19
-rw-r--r--lib/dynbuf.h5
-rw-r--r--lib/dynhds.c396
-rw-r--r--lib/dynhds.h183
-rw-r--r--lib/easy.c257
-rw-r--r--lib/easy_lock.h22
-rw-r--r--lib/easygetopt.c2
-rw-r--r--lib/easyif.h6
-rw-r--r--lib/easyoptions.c15
-rw-r--r--lib/easyoptions.h2
-rw-r--r--lib/escape.c119
-rw-r--r--lib/escape.h7
-rw-r--r--lib/file.c37
-rw-r--r--lib/file.h2
-rw-r--r--lib/fileinfo.c4
-rw-r--r--lib/fileinfo.h4
-rw-r--r--lib/fopen.c88
-rw-r--r--lib/fopen.h2
-rw-r--r--lib/formdata.c51
-rw-r--r--lib/formdata.h9
-rw-r--r--lib/ftp.c633
-rw-r--r--lib/ftp.h56
-rw-r--r--lib/ftplistparser.c181
-rw-r--r--lib/ftplistparser.h36
-rw-r--r--lib/functypes.h4
-rw-r--r--lib/getenv.c7
-rw-r--r--lib/getinfo.c17
-rw-r--r--lib/getinfo.h2
-rw-r--r--lib/gopher.c13
-rw-r--r--lib/gopher.h2
-rw-r--r--lib/h2h3.c309
-rw-r--r--lib/h2h3.h61
-rw-r--r--lib/hash.c3
-rw-r--r--lib/hash.h2
-rw-r--r--lib/headers.c35
-rw-r--r--lib/headers.h2
-rw-r--r--lib/hmac.c7
-rw-r--r--lib/hostasyn.c17
-rw-r--r--lib/hostip.c353
-rw-r--r--lib/hostip.h27
-rw-r--r--lib/hostip4.c17
-rw-r--r--lib/hostip6.c13
-rw-r--r--lib/hostsyn.c6
-rw-r--r--lib/hsts.c76
-rw-r--r--lib/hsts.h4
-rw-r--r--lib/http.c1492
-rw-r--r--lib/http.h261
-rw-r--r--lib/http1.c346
-rw-r--r--lib/http1.h63
-rw-r--r--lib/http2.c3378
-rw-r--r--lib/http2.h61
-rw-r--r--lib/http_aws_sigv4.c475
-rw-r--r--lib/http_aws_sigv4.h2
-rw-r--r--lib/http_chunks.c90
-rw-r--r--lib/http_chunks.h6
-rw-r--r--lib/http_digest.c6
-rw-r--r--lib/http_digest.h6
-rw-r--r--lib/http_negotiate.c2
-rw-r--r--lib/http_negotiate.h2
-rw-r--r--lib/http_ntlm.c4
-rw-r--r--lib/http_ntlm.h2
-rw-r--r--lib/http_proxy.c1215
-rw-r--r--lib/http_proxy.h66
-rw-r--r--lib/idn.c287
-rw-r--r--lib/idn.h (renamed from tests/libtest/sethostname.h)30
-rw-r--r--lib/idn_win32.c121
-rw-r--r--lib/if2ip.c6
-rw-r--r--lib/if2ip.h2
-rw-r--r--lib/imap.c251
-rw-r--r--lib/imap.h24
-rw-r--r--lib/inet_ntop.c30
-rw-r--r--lib/inet_ntop.h2
-rw-r--r--lib/inet_pton.c17
-rw-r--r--lib/inet_pton.h2
-rw-r--r--lib/krb5.c61
-rw-r--r--lib/ldap.c52
-rw-r--r--lib/libcurl.plist6
-rw-r--r--lib/libcurl.rc2
-rw-r--r--lib/llist.c2
-rw-r--r--lib/llist.h2
-rw-r--r--lib/macos.c55
-rw-r--r--lib/macos.h (renamed from lib/vquic/msh3.h)21
-rw-r--r--lib/makefile.dj73
-rw-r--r--lib/md4.c120
-rw-r--r--lib/md5.c77
-rw-r--r--lib/memdebug.c4
-rw-r--r--lib/memdebug.h6
-rw-r--r--lib/mime.c87
-rw-r--r--lib/mime.h20
-rw-r--r--lib/mprintf.c15
-rw-r--r--lib/mqtt.c134
-rw-r--r--lib/mqtt.h3
-rw-r--r--lib/multi.c973
-rw-r--r--lib/multihandle.h40
-rw-r--r--lib/multiif.h14
-rw-r--r--lib/netrc.c6
-rw-r--r--lib/netrc.h2
-rw-r--r--lib/nonblock.c5
-rw-r--r--lib/nonblock.h2
-rw-r--r--lib/noproxy.c86
-rw-r--r--lib/noproxy.h5
-rw-r--r--lib/openldap.c87
-rw-r--r--lib/parsedate.c161
-rw-r--r--lib/parsedate.h2
-rw-r--r--lib/pingpong.c25
-rw-r--r--lib/pingpong.h2
-rw-r--r--lib/pop3.c99
-rw-r--r--lib/pop3.h12
-rw-r--r--lib/progress.c56
-rw-r--r--lib/progress.h14
-rw-r--r--lib/psl.c2
-rw-r--r--lib/psl.h2
-rw-r--r--lib/quic.h68
-rw-r--r--lib/rand.c84
-rw-r--r--lib/rand.h25
-rw-r--r--lib/rename.c4
-rw-r--r--lib/rename.h2
-rw-r--r--lib/rtsp.c493
-rw-r--r--lib/rtsp.h16
-rw-r--r--lib/select.c21
-rw-r--r--lib/select.h2
-rw-r--r--lib/sendf.c792
-rw-r--r--lib/sendf.h195
-rw-r--r--lib/setopt.c525
-rw-r--r--lib/setopt.h2
-rw-r--r--lib/setup-os400.h103
-rw-r--r--lib/setup-vms.h3
-rw-r--r--lib/setup-win32.h15
-rw-r--r--lib/sha256.c96
-rw-r--r--lib/share.c34
-rw-r--r--lib/share.h18
-rw-r--r--lib/sigpipe.h5
-rw-r--r--lib/slist.c2
-rw-r--r--lib/slist.h2
-rw-r--r--lib/smb.c250
-rw-r--r--lib/smb.h201
-rw-r--r--lib/smtp.c112
-rw-r--r--lib/smtp.h20
-rw-r--r--lib/sockaddr.h2
-rw-r--r--lib/socketpair.c92
-rw-r--r--lib/socketpair.h19
-rw-r--r--lib/socks.c763
-rw-r--r--lib/socks.h39
-rw-r--r--lib/socks_gssapi.c48
-rw-r--r--lib/socks_sspi.c35
-rw-r--r--lib/speedcheck.c2
-rw-r--r--lib/speedcheck.h2
-rw-r--r--lib/splay.c2
-rw-r--r--lib/splay.h2
-rw-r--r--lib/strcase.c51
-rw-r--r--lib/strcase.h10
-rw-r--r--lib/strdup.c32
-rw-r--r--lib/strdup.h7
-rw-r--r--lib/strerror.c31
-rw-r--r--lib/strerror.h4
-rw-r--r--lib/strtok.c2
-rw-r--r--lib/strtok.h2
-rw-r--r--lib/strtoofft.c3
-rw-r--r--lib/strtoofft.h2
-rw-r--r--lib/system_win32.c6
-rw-r--r--lib/system_win32.h9
-rw-r--r--lib/telnet.c218
-rw-r--r--lib/telnet.h2
-rw-r--r--lib/tftp.c30
-rw-r--r--lib/tftp.h5
-rw-r--r--lib/timediff.c4
-rw-r--r--lib/timediff.h2
-rw-r--r--lib/timeval.c39
-rw-r--r--lib/timeval.h20
-rw-r--r--lib/transfer.c713
-rw-r--r--lib/transfer.h3
-rw-r--r--lib/url.c2124
-rw-r--r--lib/url.h41
-rw-r--r--lib/urlapi-int.h5
-rw-r--r--lib/urlapi.c987
-rw-r--r--lib/urldata.h472
-rw-r--r--lib/vauth/cleartext.c6
-rw-r--r--lib/vauth/cram.c6
-rw-r--r--lib/vauth/digest.c22
-rw-r--r--lib/vauth/digest.h4
-rw-r--r--lib/vauth/digest_sspi.c12
-rw-r--r--lib/vauth/gsasl.c2
-rw-r--r--lib/vauth/krb5_gssapi.c4
-rw-r--r--lib/vauth/krb5_sspi.c4
-rw-r--r--lib/vauth/ntlm.c23
-rw-r--r--lib/vauth/ntlm.h5
-rw-r--r--lib/vauth/ntlm_sspi.c2
-rw-r--r--lib/vauth/oauth2.c5
-rw-r--r--lib/vauth/spnego_gssapi.c2
-rw-r--r--lib/vauth/spnego_sspi.c2
-rw-r--r--lib/vauth/vauth.c2
-rw-r--r--lib/vauth/vauth.h14
-rw-r--r--lib/version.c226
-rw-r--r--lib/version_win32.c6
-rw-r--r--lib/version_win32.h6
-rw-r--r--lib/vquic/curl_msh3.c1092
-rw-r--r--lib/vquic/curl_msh3.h46
-rw-r--r--lib/vquic/curl_ngtcp2.c2835
-rw-r--r--lib/vquic/curl_ngtcp2.h61
-rw-r--r--lib/vquic/curl_quiche.c1717
-rw-r--r--lib/vquic/curl_quiche.h (renamed from lib/vquic/quiche.h)42
-rw-r--r--lib/vquic/msh3.c527
-rw-r--r--lib/vquic/ngtcp2.c2254
-rw-r--r--lib/vquic/ngtcp2.h94
-rw-r--r--lib/vquic/quiche.c895
-rw-r--r--lib/vquic/vquic.c592
-rw-r--r--lib/vquic/vquic.h32
-rw-r--r--lib/vquic/vquic_int.h91
-rw-r--r--lib/vssh/libssh.c182
-rw-r--r--lib/vssh/libssh2.c377
-rw-r--r--lib/vssh/ssh.h7
-rw-r--r--lib/vssh/wolfssh.c20
-rw-r--r--lib/vtls/bearssl.c366
-rw-r--r--lib/vtls/bearssl.h2
-rw-r--r--lib/vtls/gskit.c1329
-rw-r--r--lib/vtls/gtls.c772
-rw-r--r--lib/vtls/gtls.h43
-rw-r--r--lib/vtls/hostcheck.c57
-rw-r--r--lib/vtls/hostcheck.h2
-rw-r--r--lib/vtls/keylog.c11
-rw-r--r--lib/vtls/keylog.h2
-rw-r--r--lib/vtls/mbedtls.c315
-rw-r--r--lib/vtls/mbedtls.h4
-rw-r--r--lib/vtls/mbedtls_threadlock.c19
-rw-r--r--lib/vtls/mbedtls_threadlock.h6
-rw-r--r--lib/vtls/nss.c2537
-rw-r--r--lib/vtls/openssl.c2641
-rw-r--r--lib/vtls/openssl.h32
-rw-r--r--lib/vtls/rustls.c460
-rw-r--r--lib/vtls/rustls.h2
-rw-r--r--lib/vtls/schannel.c804
-rw-r--r--lib/vtls/schannel.h130
-rw-r--r--lib/vtls/schannel_int.h170
-rw-r--r--lib/vtls/schannel_verify.c137
-rw-r--r--lib/vtls/sectransp.c767
-rw-r--r--lib/vtls/sectransp.h4
-rw-r--r--lib/vtls/vtls.c1307
-rw-r--r--lib/vtls/vtls.h306
-rw-r--r--lib/vtls/vtls_int.h207
-rw-r--r--lib/vtls/wolfssl.c644
-rw-r--r--lib/vtls/wolfssl.h2
-rw-r--r--lib/vtls/x509asn1.c120
-rw-r--r--lib/vtls/x509asn1.h12
-rw-r--r--lib/warnless.c67
-rw-r--r--lib/warnless.h25
-rw-r--r--lib/wildcard.h70
-rw-r--r--lib/ws.c1345
-rw-r--r--lib/ws.h62
-rw-r--r--libcurl.def94
-rw-r--r--libcurl.pc.in2
-rwxr-xr-xltmain.sh28
-rw-r--r--m4/curl-amissl.m411
-rw-r--r--m4/curl-bearssl.m44
-rw-r--r--m4/curl-compilers.m4158
-rw-r--r--m4/curl-confopts.m410
-rw-r--r--m4/curl-functions.m4273
-rw-r--r--m4/curl-gnutls.m42
-rw-r--r--m4/curl-mbedtls.m44
-rw-r--r--m4/curl-nss.m4144
-rw-r--r--m4/curl-openssl.m444
-rw-r--r--m4/curl-override.m42
-rw-r--r--m4/curl-reentrant.m42
-rw-r--r--m4/curl-rustls.m412
-rw-r--r--m4/curl-schannel.m42
-rw-r--r--m4/curl-sectransp.m44
-rw-r--r--m4/curl-sysconfig.m410
-rw-r--r--m4/curl-wolfssl.m421
-rw-r--r--m4/xc-am-iface.m4171
-rw-r--r--m4/xc-cc-check.m42
-rw-r--r--m4/xc-lt-iface.m42
-rw-r--r--m4/xc-translit.m42
-rw-r--r--m4/xc-val-flgs.m42
-rw-r--r--m4/zz40-xc-ovr.m42
-rw-r--r--m4/zz50-xc-ovr.m42
-rw-r--r--m4/zz60-xc-ovr.m42
-rwxr-xr-xmaketgz6
-rw-r--r--packages/Android/Android.mk133
-rw-r--r--packages/DOS/README17
-rw-r--r--packages/DOS/common.dj223
-rw-r--r--packages/Makefile.am13
-rw-r--r--packages/Makefile.in27
-rw-r--r--packages/OS400/README.OS400135
-rw-r--r--packages/OS400/ccsidcurl.c243
-rw-r--r--packages/OS400/ccsidcurl.h15
-rw-r--r--packages/OS400/chkstrings.c64
-rw-r--r--packages/OS400/config400.default55
-rw-r--r--packages/OS400/curl.cmd32
-rw-r--r--packages/OS400/curl.inc.in324
-rw-r--r--packages/OS400/curlcl.c177
-rw-r--r--packages/OS400/curlmain.c121
-rwxr-xr-x[-rw-r--r--]packages/OS400/initscript.sh87
-rwxr-xr-x[-rw-r--r--]packages/OS400/make-include.sh8
-rwxr-xr-x[-rw-r--r--]packages/OS400/make-lib.sh126
-rwxr-xr-x[-rw-r--r--]packages/OS400/make-src.sh78
-rwxr-xr-x[-rw-r--r--]packages/OS400/make-tests.sh180
-rwxr-xr-x[-rw-r--r--]packages/OS400/makefile.sh52
-rw-r--r--packages/OS400/os400sys.c386
-rw-r--r--packages/OS400/os400sys.h4
-rw-r--r--packages/OS400/rpg-examples/HEADERAPI146
-rw-r--r--packages/OS400/rpg-examples/HTTPPOST129
-rw-r--r--packages/OS400/rpg-examples/INMEMORY159
-rw-r--r--packages/OS400/rpg-examples/SIMPLE1108
-rw-r--r--packages/OS400/rpg-examples/SIMPLE2108
-rw-r--r--packages/OS400/rpg-examples/SMTPSRCMBR239
-rw-r--r--packages/README27
-rw-r--r--packages/README.md12
-rw-r--r--packages/vms/Makefile.am2
-rw-r--r--packages/vms/Makefile.in14
-rw-r--r--packages/vms/backup_gnv_curl_src.com6
-rw-r--r--packages/vms/build_curl-config_script.com4
-rw-r--r--packages/vms/build_gnv_curl.com5
-rw-r--r--packages/vms/build_gnv_curl_pcsi_desc.com6
-rw-r--r--packages/vms/build_gnv_curl_pcsi_text.com6
-rw-r--r--packages/vms/build_gnv_curl_release_notes.com6
-rw-r--r--packages/vms/build_libcurl_pc.com6
-rw-r--r--packages/vms/clean_gnv_curl.com5
-rw-r--r--packages/vms/compare_curl_source.com5
-rw-r--r--packages/vms/config_h.com20
-rw-r--r--packages/vms/curl_crtl_init.c12
-rw-r--r--packages/vms/curl_gnv_build_steps.txt4
-rw-r--r--packages/vms/curl_release_note_start.txt6
-rw-r--r--packages/vms/curl_startup.com6
-rw-r--r--packages/vms/curlmsg.h2
-rw-r--r--packages/vms/curlmsg.msg2
-rw-r--r--packages/vms/curlmsg_vms.h10
-rw-r--r--packages/vms/generate_config_vms_h_curl.com13
-rw-r--r--packages/vms/generate_vax_transfer.com5
-rw-r--r--packages/vms/gnv_conftest.c_first8
-rwxr-xr-x[-rw-r--r--]packages/vms/gnv_curl_configure.sh6
-rw-r--r--packages/vms/gnv_libcurl_symbols.opt4
-rw-r--r--packages/vms/gnv_link_curl.com9
-rwxr-xr-x[-rw-r--r--]packages/vms/make_gnv_curl_install.sh5
-rw-r--r--packages/vms/make_pcsi_curl_kit_name.com6
-rw-r--r--packages/vms/pcsi_gnv_curl_file_list.txt5
-rw-r--r--packages/vms/pcsi_product_gnv_curl.com6
-rw-r--r--packages/vms/report_openssl_version.c16
-rw-r--r--packages/vms/setup_gnv_curl_build.com6
-rw-r--r--packages/vms/stage_curl_install.com6
-rw-r--r--packages/vms/vms_eco_level.h4
-rw-r--r--plan9/include/mkfile2
-rw-r--r--plan9/lib/mkfile2
-rwxr-xr-xplan9/lib/mkfile.inc2
-rw-r--r--plan9/mkfile2
-rw-r--r--plan9/mkfile.proto2
-rw-r--r--plan9/src/mkfile2
-rwxr-xr-xplan9/src/mkfile.inc2
-rw-r--r--projects/README.md2
-rw-r--r--projects/Windows/VC10/curl-all.sln298
-rw-r--r--projects/Windows/VC10/lib/libcurl.sln181
-rw-r--r--projects/Windows/VC10/lib/libcurl.vcxproj2647
-rw-r--r--projects/Windows/VC10/src/curl.sln181
-rw-r--r--projects/Windows/VC10/src/curl.vcxproj2738
-rw-r--r--projects/Windows/VC11/curl-all.sln298
-rw-r--r--projects/Windows/VC11/lib/libcurl.sln181
-rw-r--r--projects/Windows/VC11/lib/libcurl.vcxproj2703
-rw-r--r--projects/Windows/VC11/lib/libcurl.vcxproj.filters17
-rw-r--r--projects/Windows/VC11/src/curl.vcxproj2794
-rw-r--r--projects/Windows/VC11/src/curl.vcxproj.filters17
-rw-r--r--projects/Windows/VC12/lib/libcurl.vcxproj2703
-rw-r--r--projects/Windows/VC12/lib/libcurl.vcxproj.filters17
-rw-r--r--projects/Windows/VC12/src/curl.sln181
-rw-r--r--projects/Windows/VC12/src/curl.vcxproj2794
-rw-r--r--projects/Windows/VC12/src/curl.vcxproj.filters17
-rw-r--r--projects/Windows/VC14.10/lib/libcurl.vcxproj2675
-rw-r--r--projects/Windows/VC14.10/src/curl.vcxproj2766
-rw-r--r--projects/Windows/VC14.20/curl-all.sln (renamed from projects/Windows/VC12/curl-all.sln)2
-rw-r--r--projects/Windows/VC14.20/lib/libcurl.sln (renamed from projects/Windows/VC12/lib/libcurl.sln)2
-rw-r--r--projects/Windows/VC14.20/lib/libcurl.vcxproj.filters (renamed from projects/Windows/VC10/lib/libcurl.vcxproj.filters)0
-rw-r--r--projects/Windows/VC14.20/src/curl.sln (renamed from projects/Windows/VC11/src/curl.sln)2
-rw-r--r--projects/Windows/VC14.20/src/curl.vcxproj.filters (renamed from projects/Windows/VC10/src/curl.vcxproj.filters)0
-rw-r--r--projects/Windows/VC14.30/lib/libcurl.vcxproj2675
-rw-r--r--projects/Windows/VC14.30/src/curl.sln2
-rw-r--r--projects/Windows/VC14.30/src/curl.vcxproj2766
-rw-r--r--projects/Windows/VC14/lib/libcurl.vcxproj2703
-rw-r--r--projects/Windows/VC14/src/curl.vcxproj2794
-rw-r--r--projects/build-openssl.bat22
-rw-r--r--projects/build-wolfssl.bat6
-rw-r--r--projects/checksrc.bat4
-rw-r--r--projects/generate.bat31
-rw-r--r--projects/wolfssl_options.h4
-rw-r--r--scripts/Makefile.am4
-rw-r--r--scripts/Makefile.in16
-rwxr-xr-xscripts/checksrc.pl198
-rwxr-xr-xscripts/completion.pl2
-rwxr-xr-xscripts/coverage.sh2
-rwxr-xr-xscripts/firefox-db2pem.sh2
-rwxr-xr-xscripts/mk-ca-bundle.pl2
-rw-r--r--scripts/schemetable.c207
-rwxr-xr-xscripts/updatemanpages.pl2
-rw-r--r--src/.checksrc1
-rw-r--r--src/CMakeLists.txt33
-rw-r--r--src/Makefile.am20
-rw-r--r--src/Makefile.in401
-rw-r--r--src/Makefile.inc42
-rw-r--r--src/Makefile.mk (renamed from src/Makefile.m32)73
-rw-r--r--src/curl.rc4
-rw-r--r--src/makefile.dj101
-rwxr-xr-xsrc/mkhelp.pl17
-rw-r--r--src/slist_wc.c2
-rw-r--r--src/slist_wc.h2
-rw-r--r--src/tool_binmode.c2
-rw-r--r--src/tool_binmode.h2
-rw-r--r--src/tool_bname.c2
-rw-r--r--src/tool_bname.h2
-rw-r--r--src/tool_cb_dbg.c122
-rw-r--r--src/tool_cb_dbg.h2
-rw-r--r--src/tool_cb_hdr.c77
-rw-r--r--src/tool_cb_hdr.h2
-rw-r--r--src/tool_cb_prg.c23
-rw-r--r--src/tool_cb_prg.h2
-rw-r--r--src/tool_cb_rea.c63
-rw-r--r--src/tool_cb_rea.h2
-rw-r--r--src/tool_cb_see.c26
-rw-r--r--src/tool_cb_see.h6
-rw-r--r--src/tool_cb_wrt.c189
-rw-r--r--src/tool_cb_wrt.h2
-rw-r--r--src/tool_cfgable.c11
-rw-r--r--src/tool_cfgable.h47
-rw-r--r--src/tool_dirhie.c43
-rw-r--r--src/tool_dirhie.h6
-rw-r--r--src/tool_doswin.c43
-rw-r--r--src/tool_doswin.h10
-rw-r--r--src/tool_easysrc.c4
-rw-r--r--src/tool_easysrc.h4
-rw-r--r--src/tool_filetime.c53
-rw-r--r--src/tool_filetime.h9
-rw-r--r--src/tool_findfile.c16
-rw-r--r--src/tool_findfile.h4
-rw-r--r--src/tool_formparse.c54
-rw-r--r--src/tool_formparse.h2
-rw-r--r--src/tool_getparam.c894
-rw-r--r--src/tool_getparam.h4
-rw-r--r--src/tool_getpass.c63
-rw-r--r--src/tool_getpass.h2
-rw-r--r--src/tool_help.c78
-rw-r--r--src/tool_help.h31
-rw-r--r--src/tool_helpers.c10
-rw-r--r--src/tool_helpers.h2
-rw-r--r--src/tool_hugehelp.c16220
-rw-r--r--src/tool_hugehelp.h2
-rw-r--r--src/tool_ipfs.c296
-rw-r--r--src/tool_ipfs.h (renamed from lib/vtls/gskit.h)23
-rw-r--r--src/tool_libinfo.c88
-rw-r--r--src/tool_libinfo.h21
-rw-r--r--src/tool_listhelp.c38
-rw-r--r--src/tool_main.c62
-rw-r--r--src/tool_main.h4
-rw-r--r--src/tool_msgs.c18
-rw-r--r--src/tool_msgs.h3
-rw-r--r--src/tool_operate.c466
-rw-r--r--src/tool_operate.h9
-rw-r--r--src/tool_operhlp.c149
-rw-r--r--src/tool_operhlp.h4
-rw-r--r--src/tool_paramhlp.c30
-rw-r--r--src/tool_paramhlp.h4
-rw-r--r--src/tool_parsecfg.c21
-rw-r--r--src/tool_parsecfg.h2
-rw-r--r--src/tool_progress.c22
-rw-r--r--src/tool_progress.h2
-rw-r--r--src/tool_sdecls.h25
-rw-r--r--src/tool_setopt.c63
-rw-r--r--src/tool_setopt.h8
-rw-r--r--src/tool_setup.h14
-rw-r--r--src/tool_sleep.c4
-rw-r--r--src/tool_sleep.h2
-rw-r--r--src/tool_stderr.c71
-rw-r--r--src/tool_stderr.h (renamed from src/tool_panykey.h)16
-rw-r--r--src/tool_strdup.c2
-rw-r--r--src/tool_strdup.h2
-rw-r--r--src/tool_urlglob.c59
-rw-r--r--src/tool_urlglob.h14
-rw-r--r--src/tool_util.c8
-rw-r--r--src/tool_util.h2
-rw-r--r--src/tool_version.h4
-rw-r--r--src/tool_vms.c2
-rw-r--r--src/tool_vms.h2
-rw-r--r--src/tool_writeout.c244
-rw-r--r--src/tool_writeout.h29
-rw-r--r--src/tool_writeout_json.c82
-rw-r--r--src/tool_writeout_json.h5
-rw-r--r--src/tool_xattr.c8
-rw-r--r--src/tool_xattr.h2
-rw-r--r--src/var.c464
-rw-r--r--src/var.h47
-rw-r--r--tests/CMakeLists.txt10
-rw-r--r--tests/FILEFORMAT.md100
-rw-r--r--tests/Makefile.am34
-rw-r--r--tests/Makefile.in52
-rw-r--r--tests/README.md117
-rw-r--r--tests/appveyor.pm77
-rw-r--r--tests/azure.pm72
-rwxr-xr-xtests/badsymbols.pl6
-rw-r--r--tests/certs/EdelCurlRoot-ca.cacert119
-rw-r--r--tests/certs/EdelCurlRoot-ca.cnf2
-rw-r--r--tests/certs/EdelCurlRoot-ca.crt119
-rw-r--r--tests/certs/EdelCurlRoot-ca.csr24
-rw-r--r--tests/certs/EdelCurlRoot-ca.derbin918 -> 1080 bytes
-rw-r--r--tests/certs/EdelCurlRoot-ca.key55
-rw-r--r--tests/certs/EdelCurlRoot-ca.prm13
-rw-r--r--tests/certs/Makefile.am29
-rw-r--r--tests/certs/Makefile.in41
-rw-r--r--tests/certs/Server-localhost-firstSAN-sv.crl23
-rw-r--r--tests/certs/Server-localhost-firstSAN-sv.crt122
-rw-r--r--tests/certs/Server-localhost-firstSAN-sv.csr24
-rw-r--r--tests/certs/Server-localhost-firstSAN-sv.derbin994 -> 1123 bytes
-rw-r--r--tests/certs/Server-localhost-firstSAN-sv.key55
-rw-r--r--tests/certs/Server-localhost-firstSAN-sv.pem191
-rw-r--r--tests/certs/Server-localhost-firstSAN-sv.prm39
-rw-r--r--tests/certs/Server-localhost-firstSAN-sv.pub.derbin294 -> 294 bytes
-rw-r--r--tests/certs/Server-localhost-firstSAN-sv.pub.pem14
-rw-r--r--tests/certs/Server-localhost-lastSAN-sv.crl23
-rw-r--r--tests/certs/Server-localhost-lastSAN-sv.crt123
-rw-r--r--tests/certs/Server-localhost-lastSAN-sv.csr24
-rw-r--r--tests/certs/Server-localhost-lastSAN-sv.derbin994 -> 1123 bytes
-rw-r--r--tests/certs/Server-localhost-lastSAN-sv.key55
-rw-r--r--tests/certs/Server-localhost-lastSAN-sv.pem191
-rw-r--r--tests/certs/Server-localhost-lastSAN-sv.prm38
-rw-r--r--tests/certs/Server-localhost-lastSAN-sv.pub.derbin294 -> 294 bytes
-rw-r--r--tests/certs/Server-localhost-lastSAN-sv.pub.pem14
-rw-r--r--tests/certs/Server-localhost-sv.crl18
-rw-r--r--tests/certs/Server-localhost-sv.crt121
-rw-r--r--tests/certs/Server-localhost-sv.csr24
-rw-r--r--tests/certs/Server-localhost-sv.derbin967 -> 1096 bytes
-rw-r--r--tests/certs/Server-localhost-sv.key55
-rw-r--r--tests/certs/Server-localhost-sv.pem189
-rw-r--r--tests/certs/Server-localhost-sv.prm13
-rw-r--r--tests/certs/Server-localhost-sv.pub.derbin294 -> 294 bytes
-rw-r--r--tests/certs/Server-localhost-sv.pub.pem14
-rw-r--r--tests/certs/Server-localhost.nn-sv.crl20
-rw-r--r--tests/certs/Server-localhost.nn-sv.crt121
-rw-r--r--tests/certs/Server-localhost.nn-sv.csr24
-rw-r--r--tests/certs/Server-localhost.nn-sv.derbin973 -> 1102 bytes
-rw-r--r--tests/certs/Server-localhost.nn-sv.key55
-rw-r--r--tests/certs/Server-localhost.nn-sv.pem189
-rw-r--r--tests/certs/Server-localhost.nn-sv.prm13
-rw-r--r--tests/certs/Server-localhost.nn-sv.pub.derbin294 -> 294 bytes
-rw-r--r--tests/certs/Server-localhost.nn-sv.pub.pem14
-rw-r--r--tests/certs/Server-localhost0h-sv.crl22
-rw-r--r--tests/certs/Server-localhost0h-sv.crt123
-rw-r--r--tests/certs/Server-localhost0h-sv.csr24
-rw-r--r--tests/certs/Server-localhost0h-sv.derbin969 -> 1098 bytes
-rw-r--r--tests/certs/Server-localhost0h-sv.key55
-rw-r--r--tests/certs/Server-localhost0h-sv.pem191
-rw-r--r--tests/certs/Server-localhost0h-sv.prm13
-rw-r--r--tests/certs/Server-localhost0h-sv.pub.derbin294 -> 294 bytes
-rw-r--r--tests/certs/Server-localhost0h-sv.pub.pem14
-rw-r--r--tests/certs/scripts/Makefile.am2
-rw-r--r--tests/certs/scripts/Makefile.in14
-rwxr-xr-xtests/certs/scripts/genroot.sh9
-rwxr-xr-xtests/certs/scripts/genserv.sh9
-rw-r--r--tests/certs/stunnel-sv.crl15
-rw-r--r--tests/certs/stunnel-sv.crt99
-rw-r--r--tests/certs/stunnel-sv.csr16
-rw-r--r--tests/certs/stunnel-sv.derbin0 -> 1096 bytes
-rw-r--r--tests/certs/stunnel-sv.dhp0
-rw-r--r--tests/certs/stunnel-sv.key28
-rw-r--r--tests/certs/stunnel-sv.pem165
-rw-r--r--tests/certs/stunnel-sv.prm38
-rw-r--r--tests/certs/stunnel-sv.pub.pem9
-rwxr-xr-xtests/check-deprecated.pl329
-rwxr-xr-xtests/check-translatable-options.pl147
-rw-r--r--tests/config.in24
-rw-r--r--tests/data/CMakeLists.txt2
-rw-r--r--tests/data/DISABLED20
-rw-r--r--tests/data/Makefile.am2
-rw-r--r--tests/data/Makefile.in189
-rw-r--r--tests/data/Makefile.inc177
-rw-r--r--tests/data/test120
-rw-r--r--tests/data/test1011
-rw-r--r--tests/data/test1006
-rw-r--r--tests/data/test10006
-rw-r--r--tests/data/test100111
-rw-r--r--tests/data/test100212
-rw-r--r--tests/data/test10036
-rw-r--r--tests/data/test10046
-rw-r--r--tests/data/test10056
-rw-r--r--tests/data/test10066
-rw-r--r--tests/data/test100717
-rw-r--r--tests/data/test100910
-rw-r--r--tests/data/test1016
-rw-r--r--tests/data/test10106
-rw-r--r--tests/data/test10116
-rw-r--r--tests/data/test10126
-rw-r--r--tests/data/test10138
-rw-r--r--tests/data/test10148
-rw-r--r--tests/data/test101510
-rw-r--r--tests/data/test10168
-rw-r--r--tests/data/test10178
-rw-r--r--tests/data/test10188
-rw-r--r--tests/data/test10198
-rw-r--r--tests/data/test1026
-rw-r--r--tests/data/test10208
-rw-r--r--tests/data/test10228
-rw-r--r--tests/data/test10238
-rw-r--r--tests/data/test102411
-rw-r--r--tests/data/test102511
-rw-r--r--tests/data/test102610
-rw-r--r--tests/data/test10278
-rw-r--r--tests/data/test10286
-rw-r--r--tests/data/test10294
-rw-r--r--tests/data/test1036
-rw-r--r--tests/data/test103012
-rw-r--r--tests/data/test10316
-rw-r--r--tests/data/test10326
-rw-r--r--tests/data/test10336
-rw-r--r--tests/data/test10346
-rw-r--r--tests/data/test10356
-rw-r--r--tests/data/test103610
-rw-r--r--tests/data/test10378
-rw-r--r--tests/data/test103810
-rw-r--r--tests/data/test103910
-rw-r--r--tests/data/test1046
-rw-r--r--tests/data/test10408
-rw-r--r--tests/data/test104111
-rw-r--r--tests/data/test10428
-rw-r--r--tests/data/test10438
-rw-r--r--tests/data/test10446
-rw-r--r--tests/data/test10456
-rw-r--r--tests/data/test10466
-rw-r--r--tests/data/test10476
-rw-r--r--tests/data/test10486
-rw-r--r--tests/data/test104910
-rw-r--r--tests/data/test1056
-rw-r--r--tests/data/test10506
-rw-r--r--tests/data/test105112
-rw-r--r--tests/data/test105210
-rw-r--r--tests/data/test105314
-rw-r--r--tests/data/test105410
-rw-r--r--tests/data/test105511
-rw-r--r--tests/data/test105615
-rw-r--r--tests/data/test10576
-rw-r--r--tests/data/test10586
-rw-r--r--tests/data/test10596
-rw-r--r--tests/data/test1066
-rw-r--r--tests/data/test10606
-rw-r--r--tests/data/test10616
-rw-r--r--tests/data/test10626
-rw-r--r--tests/data/test106310
-rw-r--r--tests/data/test106410
-rw-r--r--tests/data/test106510
-rw-r--r--tests/data/test10666
-rw-r--r--tests/data/test10676
-rw-r--r--tests/data/test10682
-rw-r--r--tests/data/test10692
-rw-r--r--tests/data/test10710
-rw-r--r--tests/data/test107010
-rw-r--r--tests/data/test107111
-rw-r--r--tests/data/test10726
-rw-r--r--tests/data/test10736
-rw-r--r--tests/data/test10747
-rw-r--r--tests/data/test107512
-rw-r--r--tests/data/test10766
-rw-r--r--tests/data/test10776
-rw-r--r--tests/data/test107816
-rw-r--r--tests/data/test10796
-rw-r--r--tests/data/test10810
-rw-r--r--tests/data/test10806
-rw-r--r--tests/data/test10816
-rw-r--r--tests/data/test10826
-rw-r--r--tests/data/test10836
-rw-r--r--tests/data/test10846
-rw-r--r--tests/data/test10856
-rw-r--r--tests/data/test10869
-rw-r--r--tests/data/test10876
-rw-r--r--tests/data/test10886
-rw-r--r--tests/data/test10896
-rw-r--r--tests/data/test10910
-rw-r--r--tests/data/test10906
-rw-r--r--tests/data/test10916
-rw-r--r--tests/data/test10926
-rw-r--r--tests/data/test109310
-rw-r--r--tests/data/test109410
-rw-r--r--tests/data/test10956
-rw-r--r--tests/data/test10968
-rw-r--r--tests/data/test10976
-rw-r--r--tests/data/test10986
-rw-r--r--tests/data/test109911
-rw-r--r--tests/data/test116
-rw-r--r--tests/data/test1106
-rw-r--r--tests/data/test11008
-rw-r--r--tests/data/test11016
-rw-r--r--tests/data/test11026
-rw-r--r--tests/data/test11036
-rw-r--r--tests/data/test110413
-rw-r--r--tests/data/test110513
-rw-r--r--tests/data/test11066
-rw-r--r--tests/data/test11076
-rw-r--r--tests/data/test11086
-rw-r--r--tests/data/test11096
-rw-r--r--tests/data/test1116
-rw-r--r--tests/data/test11106
-rw-r--r--tests/data/test11116
-rw-r--r--tests/data/test111210
-rw-r--r--tests/data/test11146
-rw-r--r--tests/data/test11156
-rw-r--r--tests/data/test111611
-rw-r--r--tests/data/test11177
-rw-r--r--tests/data/test11186
-rw-r--r--tests/data/test11194
-rw-r--r--tests/data/test11210
-rw-r--r--tests/data/test11208
-rw-r--r--tests/data/test11216
-rw-r--r--tests/data/test11226
-rw-r--r--tests/data/test11236
-rw-r--r--tests/data/test11246
-rw-r--r--tests/data/test11256
-rw-r--r--tests/data/test11266
-rw-r--r--tests/data/test11276
-rw-r--r--tests/data/test11286
-rw-r--r--tests/data/test112910
-rw-r--r--tests/data/test1136
-rw-r--r--tests/data/test113013
-rw-r--r--tests/data/test113117
-rw-r--r--tests/data/test11324
-rw-r--r--tests/data/test113312
-rw-r--r--tests/data/test11348
-rw-r--r--tests/data/test1135185
-rw-r--r--tests/data/test11365
-rw-r--r--tests/data/test11376
-rw-r--r--tests/data/test11386
-rw-r--r--tests/data/test1146
-rw-r--r--tests/data/test11404
-rw-r--r--tests/data/test11416
-rw-r--r--tests/data/test11426
-rw-r--r--tests/data/test11436
-rw-r--r--tests/data/test11446
-rw-r--r--tests/data/test11454
-rw-r--r--tests/data/test11464
-rw-r--r--tests/data/test114710
-rw-r--r--tests/data/test114810
-rw-r--r--tests/data/test11496
-rw-r--r--tests/data/test1156
-rw-r--r--tests/data/test11506
-rw-r--r--tests/data/test115113
-rw-r--r--tests/data/test11526
-rw-r--r--tests/data/test11536
-rw-r--r--tests/data/test11546
-rw-r--r--tests/data/test115513
-rw-r--r--tests/data/test11566
-rw-r--r--tests/data/test115710
-rw-r--r--tests/data/test11586
-rw-r--r--tests/data/test11594
-rw-r--r--tests/data/test1166
-rw-r--r--tests/data/test116013
-rw-r--r--tests/data/test116113
-rw-r--r--tests/data/test11644
-rw-r--r--tests/data/test11654
-rw-r--r--tests/data/test11666
-rw-r--r--tests/data/test11674
-rw-r--r--tests/data/test11686
-rw-r--r--tests/data/test11699
-rw-r--r--tests/data/test1176
-rw-r--r--tests/data/test11706
-rw-r--r--tests/data/test11716
-rw-r--r--tests/data/test11726
-rw-r--r--tests/data/test11734
-rw-r--r--tests/data/test11746
-rw-r--r--tests/data/test11754
-rw-r--r--tests/data/test11768
-rw-r--r--tests/data/test11778
-rw-r--r--tests/data/test11786
-rw-r--r--tests/data/test1186
-rw-r--r--tests/data/test11806
-rw-r--r--tests/data/test11816
-rw-r--r--tests/data/test11826
-rw-r--r--tests/data/test11836
-rw-r--r--tests/data/test11846
-rw-r--r--tests/data/test118564
-rw-r--r--tests/data/test11866
-rw-r--r--tests/data/test118710
-rw-r--r--tests/data/test11884
-rw-r--r--tests/data/test118912
-rw-r--r--tests/data/test1196
-rw-r--r--tests/data/test11934
-rw-r--r--tests/data/test11976
-rw-r--r--tests/data/test126
-rw-r--r--tests/data/test1206
-rw-r--r--tests/data/test12006
-rw-r--r--tests/data/test12016
-rw-r--r--tests/data/test12026
-rw-r--r--tests/data/test12036
-rw-r--r--tests/data/test12046
-rw-r--r--tests/data/test12056
-rw-r--r--tests/data/test12067
-rw-r--r--tests/data/test12076
-rw-r--r--tests/data/test120810
-rw-r--r--tests/data/test12098
-rw-r--r--tests/data/test1216
-rw-r--r--tests/data/test12104
-rw-r--r--tests/data/test12118
-rw-r--r--tests/data/test12124
-rw-r--r--tests/data/test12136
-rw-r--r--tests/data/test12146
-rw-r--r--tests/data/test12152
-rw-r--r--tests/data/test121617
-rw-r--r--tests/data/test12176
-rw-r--r--tests/data/test12187
-rw-r--r--tests/data/test12196
-rw-r--r--tests/data/test1226
-rw-r--r--tests/data/test12208
-rw-r--r--tests/data/test122153
-rw-r--r--tests/data/test122224
-rw-r--r--tests/data/test12236
-rw-r--r--tests/data/test12246
-rw-r--r--tests/data/test12256
-rw-r--r--tests/data/test12266
-rw-r--r--tests/data/test12276
-rw-r--r--tests/data/test12287
-rw-r--r--tests/data/test12296
-rw-r--r--tests/data/test12310
-rw-r--r--tests/data/test12306
-rw-r--r--tests/data/test12316
-rw-r--r--tests/data/test12328
-rw-r--r--tests/data/test12336
-rw-r--r--tests/data/test12346
-rw-r--r--tests/data/test12356
-rw-r--r--tests/data/test12366
-rw-r--r--tests/data/test12376
-rw-r--r--tests/data/test123813
-rw-r--r--tests/data/test12396
-rw-r--r--tests/data/test1246
-rw-r--r--tests/data/test12406
-rw-r--r--tests/data/test12416
-rw-r--r--tests/data/test12426
-rw-r--r--tests/data/test124310
-rw-r--r--tests/data/test12466
-rw-r--r--tests/data/test12476
-rw-r--r--tests/data/test1256
-rw-r--r--tests/data/test12589
-rw-r--r--tests/data/test12596
-rw-r--r--tests/data/test1266
-rw-r--r--tests/data/test12606
-rw-r--r--tests/data/test12616
-rw-r--r--tests/data/test12626
-rw-r--r--tests/data/test12636
-rw-r--r--tests/data/test12646
-rw-r--r--tests/data/test12666
-rw-r--r--tests/data/test12676
-rw-r--r--tests/data/test126810
-rw-r--r--tests/data/test12696
-rw-r--r--tests/data/test1276
-rw-r--r--tests/data/test12706
-rw-r--r--tests/data/test127110
-rw-r--r--tests/data/test12726
-rw-r--r--tests/data/test12738
-rw-r--r--tests/data/test127410
-rw-r--r--tests/data/test127625
-rw-r--r--tests/data/test1277206
-rw-r--r--tests/data/test127848
-rw-r--r--tests/data/test127931
-rw-r--r--tests/data/test12810
-rw-r--r--tests/data/test12806
-rw-r--r--tests/data/test12816
-rw-r--r--tests/data/test12826
-rw-r--r--tests/data/test12834
-rw-r--r--tests/data/test12855
-rw-r--r--tests/data/test12872
-rw-r--r--tests/data/test12888
-rw-r--r--tests/data/test12892
-rw-r--r--tests/data/test1296
-rw-r--r--tests/data/test12916
-rw-r--r--tests/data/test12926
-rw-r--r--tests/data/test129312
-rw-r--r--tests/data/test12978
-rw-r--r--tests/data/test12986
-rw-r--r--tests/data/test12996
-rw-r--r--tests/data/test136
-rw-r--r--tests/data/test13010
-rw-r--r--tests/data/test13004
-rw-r--r--tests/data/test130115
-rw-r--r--tests/data/test13024
-rw-r--r--tests/data/test13034
-rw-r--r--tests/data/test130410
-rw-r--r--tests/data/test13054
-rw-r--r--tests/data/test13064
-rw-r--r--tests/data/test13074
-rw-r--r--tests/data/test130818
-rw-r--r--tests/data/test13094
-rw-r--r--tests/data/test13110
-rw-r--r--tests/data/test13108
-rw-r--r--tests/data/test13114
-rw-r--r--tests/data/test13124
-rw-r--r--tests/data/test13134
-rw-r--r--tests/data/test13146
-rw-r--r--tests/data/test131512
-rw-r--r--tests/data/test13166
-rw-r--r--tests/data/test13186
-rw-r--r--tests/data/test13196
-rw-r--r--tests/data/test13210
-rw-r--r--tests/data/test13206
-rw-r--r--tests/data/test13216
-rw-r--r--tests/data/test13256
-rw-r--r--tests/data/test13266
-rw-r--r--tests/data/test13278
-rw-r--r--tests/data/test132810
-rw-r--r--tests/data/test13296
-rw-r--r--tests/data/test13310
-rw-r--r--tests/data/test13302
-rw-r--r--tests/data/test13319
-rw-r--r--tests/data/test13326
-rw-r--r--tests/data/test13336
-rw-r--r--tests/data/test133410
-rw-r--r--tests/data/test13356
-rw-r--r--tests/data/test133612
-rw-r--r--tests/data/test13378
-rw-r--r--tests/data/test133810
-rw-r--r--tests/data/test13396
-rw-r--r--tests/data/test1344
-rw-r--r--tests/data/test134012
-rw-r--r--tests/data/test13418
-rw-r--r--tests/data/test134210
-rw-r--r--tests/data/test13436
-rw-r--r--tests/data/test134412
-rw-r--r--tests/data/test13458
-rw-r--r--tests/data/test13466
-rw-r--r--tests/data/test13478
-rw-r--r--tests/data/test13486
-rw-r--r--tests/data/test134910
-rw-r--r--tests/data/test1356
-rw-r--r--tests/data/test13506
-rw-r--r--tests/data/test135110
-rw-r--r--tests/data/test13526
-rw-r--r--tests/data/test135310
-rw-r--r--tests/data/test13546
-rw-r--r--tests/data/test13556
-rw-r--r--tests/data/test13568
-rw-r--r--tests/data/test135712
-rw-r--r--tests/data/test13588
-rw-r--r--tests/data/test135912
-rw-r--r--tests/data/test1366
-rw-r--r--tests/data/test13608
-rw-r--r--tests/data/test136112
-rw-r--r--tests/data/test13628
-rw-r--r--tests/data/test13638
-rw-r--r--tests/data/test136410
-rw-r--r--tests/data/test13658
-rw-r--r--tests/data/test136610
-rw-r--r--tests/data/test13678
-rw-r--r--tests/data/test136810
-rw-r--r--tests/data/test13698
-rw-r--r--tests/data/test1376
-rw-r--r--tests/data/test137010
-rw-r--r--tests/data/test13718
-rw-r--r--tests/data/test137210
-rw-r--r--tests/data/test13738
-rw-r--r--tests/data/test137410
-rw-r--r--tests/data/test13758
-rw-r--r--tests/data/test13768
-rw-r--r--tests/data/test13778
-rw-r--r--tests/data/test13788
-rw-r--r--tests/data/test137910
-rw-r--r--tests/data/test1386
-rw-r--r--tests/data/test13808
-rw-r--r--tests/data/test138110
-rw-r--r--tests/data/test13828
-rw-r--r--tests/data/test138310
-rw-r--r--tests/data/test13848
-rw-r--r--tests/data/test13858
-rw-r--r--tests/data/test13868
-rw-r--r--tests/data/test138710
-rw-r--r--tests/data/test13888
-rw-r--r--tests/data/test138910
-rw-r--r--tests/data/test1396
-rw-r--r--tests/data/test13908
-rw-r--r--tests/data/test139110
-rw-r--r--tests/data/test13928
-rw-r--r--tests/data/test13938
-rw-r--r--tests/data/test13944
-rw-r--r--tests/data/test13954
-rw-r--r--tests/data/test13964
-rw-r--r--tests/data/test139710
-rw-r--r--tests/data/test13984
-rw-r--r--tests/data/test13994
-rw-r--r--tests/data/test146
-rw-r--r--tests/data/test1406
-rw-r--r--tests/data/test140010
-rw-r--r--tests/data/test140111
-rw-r--r--tests/data/test140210
-rw-r--r--tests/data/test140310
-rw-r--r--tests/data/test140420
-rw-r--r--tests/data/test140510
-rw-r--r--tests/data/test140616
-rw-r--r--tests/data/test140712
-rw-r--r--tests/data/test14089
-rw-r--r--tests/data/test14096
-rw-r--r--tests/data/test1416
-rw-r--r--tests/data/test14106
-rw-r--r--tests/data/test141110
-rw-r--r--tests/data/test141214
-rw-r--r--tests/data/test14136
-rw-r--r--tests/data/test14146
-rw-r--r--tests/data/test141521
-rw-r--r--tests/data/test14166
-rw-r--r--tests/data/test141710
-rw-r--r--tests/data/test141810
-rw-r--r--tests/data/test141910
-rw-r--r--tests/data/test1426
-rw-r--r--tests/data/test142012
-rw-r--r--tests/data/test142112
-rw-r--r--tests/data/test14226
-rw-r--r--tests/data/test14236
-rw-r--r--tests/data/test14246
-rw-r--r--tests/data/test1425bin1735 -> 1732 bytes
-rw-r--r--tests/data/test1426bin1672 -> 1669 bytes
-rw-r--r--tests/data/test14276
-rw-r--r--tests/data/test14286
-rw-r--r--tests/data/test14294
-rw-r--r--tests/data/test1436
-rw-r--r--tests/data/test14306
-rw-r--r--tests/data/test14316
-rw-r--r--tests/data/test14324
-rw-r--r--tests/data/test14334
-rw-r--r--tests/data/test14348
-rw-r--r--tests/data/test14356
-rw-r--r--tests/data/test14366
-rw-r--r--tests/data/test14376
-rw-r--r--tests/data/test1446
-rw-r--r--tests/data/test14402
-rw-r--r--tests/data/test14412
-rw-r--r--tests/data/test14422
-rw-r--r--tests/data/test14436
-rw-r--r--tests/data/test14448
-rw-r--r--tests/data/test144514
-rw-r--r--tests/data/test144614
-rw-r--r--tests/data/test14478
-rw-r--r--tests/data/test14486
-rw-r--r--tests/data/test14496
-rw-r--r--tests/data/test1456
-rw-r--r--tests/data/test14506
-rw-r--r--tests/data/test14526
-rw-r--r--tests/data/test14536
-rw-r--r--tests/data/test14544
-rw-r--r--tests/data/test14566
-rw-r--r--tests/data/test145912
-rw-r--r--tests/data/test1466
-rw-r--r--tests/data/test14606
-rw-r--r--tests/data/test14616
-rw-r--r--tests/data/test14626
-rw-r--r--tests/data/test14636
-rw-r--r--tests/data/test14646
-rw-r--r--tests/data/test146512
-rw-r--r--tests/data/test14664
-rw-r--r--tests/data/test14677
-rw-r--r--tests/data/test14687
-rw-r--r--tests/data/test146930
-rw-r--r--tests/data/test1476
-rw-r--r--tests/data/test147065
-rw-r--r--tests/data/test147142
-rw-r--r--tests/data/test147242
-rw-r--r--tests/data/test147356
-rw-r--r--tests/data/test1474121
-rw-r--r--tests/data/test147583
-rw-r--r--tests/data/test147659
-rw-r--r--tests/data/test147730
-rw-r--r--tests/data/test1486
-rw-r--r--tests/data/test14912
-rw-r--r--tests/data/test156
-rw-r--r--tests/data/test15006
-rw-r--r--tests/data/test15017
-rw-r--r--tests/data/test15026
-rw-r--r--tests/data/test15036
-rw-r--r--tests/data/test15046
-rw-r--r--tests/data/test15056
-rw-r--r--tests/data/test15069
-rw-r--r--tests/data/test15076
-rw-r--r--tests/data/test15088
-rw-r--r--tests/data/test15099
-rw-r--r--tests/data/test1516
-rw-r--r--tests/data/test15108
-rw-r--r--tests/data/test15126
-rw-r--r--tests/data/test15137
-rw-r--r--tests/data/test151717
-rw-r--r--tests/data/test15186
-rw-r--r--tests/data/test15196
-rw-r--r--tests/data/test1526
-rw-r--r--tests/data/test15206
-rw-r--r--tests/data/test15216
-rw-r--r--tests/data/test15231
-rw-r--r--tests/data/test152411
-rw-r--r--tests/data/test15259
-rw-r--r--tests/data/test15269
-rw-r--r--tests/data/test15278
-rw-r--r--tests/data/test15286
-rw-r--r--tests/data/test15296
-rw-r--r--tests/data/test1536
-rw-r--r--tests/data/test15304
-rw-r--r--tests/data/test1531bin573 -> 571 bytes
-rw-r--r--tests/data/test15383
-rw-r--r--tests/data/test15419
-rw-r--r--tests/data/test15409
-rw-r--r--tests/data/test154212
-rw-r--r--tests/data/test154424
-rw-r--r--tests/data/test154538
-rw-r--r--tests/data/test15513
-rw-r--r--tests/data/test15506
-rw-r--r--tests/data/test15516
-rw-r--r--tests/data/test15526
-rw-r--r--tests/data/test15534
-rw-r--r--tests/data/test15546
-rw-r--r--tests/data/test15557
-rw-r--r--tests/data/test15566
-rw-r--r--tests/data/test15584
-rw-r--r--tests/data/test15592
-rw-r--r--tests/data/test15611
-rw-r--r--tests/data/test156015
-rw-r--r--tests/data/test156110
-rw-r--r--tests/data/test15668
-rw-r--r--tests/data/test15676
-rw-r--r--tests/data/test15694
-rw-r--r--tests/data/test1576
-rw-r--r--tests/data/test15704
-rw-r--r--tests/data/test1588
-rw-r--r--tests/data/test1596
-rw-r--r--tests/data/test15904
-rw-r--r--tests/data/test15928
-rw-r--r--tests/data/test166
-rw-r--r--tests/data/test1607
-rw-r--r--tests/data/test16004
-rw-r--r--tests/data/test16014
-rw-r--r--tests/data/test16024
-rw-r--r--tests/data/test16034
-rw-r--r--tests/data/test16044
-rw-r--r--tests/data/test16054
-rw-r--r--tests/data/test16064
-rw-r--r--tests/data/test16074
-rw-r--r--tests/data/test16085
-rw-r--r--tests/data/test16094
-rw-r--r--tests/data/test1616
-rw-r--r--tests/data/test16104
-rw-r--r--tests/data/test16114
-rw-r--r--tests/data/test16124
-rw-r--r--tests/data/test16146
-rw-r--r--tests/data/test1626
-rw-r--r--tests/data/test16204
-rw-r--r--tests/data/test16214
-rw-r--r--tests/data/test16312
-rw-r--r--tests/data/test16306
-rw-r--r--tests/data/test16316
-rw-r--r--tests/data/test16328
-rw-r--r--tests/data/test1646
-rw-r--r--tests/data/test1656
-rw-r--r--tests/data/test16504
-rw-r--r--tests/data/test16514
-rw-r--r--tests/data/test16546
-rw-r--r--tests/data/test16554
-rw-r--r--tests/data/test16612
-rw-r--r--tests/data/test16606
-rw-r--r--tests/data/test16614
-rw-r--r--tests/data/test166267
-rw-r--r--tests/data/test1676
-rw-r--r--tests/data/test16702
-rw-r--r--tests/data/test16714
-rw-r--r--tests/data/test1686
-rw-r--r--tests/data/test16806
-rw-r--r--tests/data/test168110
-rw-r--r--tests/data/test16828
-rw-r--r--tests/data/test168312
-rw-r--r--tests/data/test176
-rw-r--r--tests/data/test1706
-rw-r--r--tests/data/test17006
-rw-r--r--tests/data/test17016
-rw-r--r--tests/data/test17026
-rw-r--r--tests/data/test17034
-rw-r--r--tests/data/test17111
-rw-r--r--tests/data/test17215
-rw-r--r--tests/data/test1738
-rw-r--r--tests/data/test1746
-rw-r--r--tests/data/test1756
-rw-r--r--tests/data/test1766
-rw-r--r--tests/data/test1776
-rw-r--r--tests/data/test1788
-rw-r--r--tests/data/test17915
-rw-r--r--tests/data/test186
-rw-r--r--tests/data/test18010
-rw-r--r--tests/data/test18008
-rw-r--r--tests/data/test18016
-rw-r--r--tests/data/test18110
-rw-r--r--tests/data/test1836
-rw-r--r--tests/data/test1846
-rw-r--r--tests/data/test1856
-rw-r--r--tests/data/test1868
-rw-r--r--tests/data/test1876
-rw-r--r--tests/data/test1886
-rw-r--r--tests/data/test1896
-rw-r--r--tests/data/test196
-rw-r--r--tests/data/test1909
-rw-r--r--tests/data/test190038
-rw-r--r--tests/data/test190362
-rw-r--r--tests/data/test19046
-rw-r--r--tests/data/test190511
-rw-r--r--tests/data/test19066
-rw-r--r--tests/data/test19074
-rw-r--r--tests/data/test19084
-rw-r--r--tests/data/test19098
-rw-r--r--tests/data/test1918
-rw-r--r--tests/data/test19156
-rw-r--r--tests/data/test1926
-rw-r--r--tests/data/test1936
-rw-r--r--tests/data/test1949
-rw-r--r--tests/data/test19481
-rw-r--r--tests/data/test1956
-rw-r--r--tests/data/test195511
-rw-r--r--tests/data/test195673
-rw-r--r--tests/data/test195773
-rw-r--r--tests/data/test195873
-rw-r--r--tests/data/test195973
-rw-r--r--tests/data/test1966
-rw-r--r--tests/data/test196052
-rw-r--r--tests/data/test196468
-rw-r--r--tests/data/test19710
-rw-r--r--tests/data/test197074
-rw-r--r--tests/data/test197170
-rw-r--r--tests/data/test197279
-rw-r--r--tests/data/test197375
-rw-r--r--tests/data/test197473
-rw-r--r--tests/data/test197570
-rw-r--r--tests/data/test1986
-rw-r--r--tests/data/test1996
-rw-r--r--tests/data/test26
-rw-r--r--tests/data/test206
-rw-r--r--tests/data/test2008
-rw-r--r--tests/data/test20008
-rw-r--r--tests/data/test20018
-rw-r--r--tests/data/test200212
-rw-r--r--tests/data/test200313
-rw-r--r--tests/data/test200413
-rw-r--r--tests/data/test2018
-rw-r--r--tests/data/test2028
-rw-r--r--tests/data/test20236
-rw-r--r--tests/data/test20246
-rw-r--r--tests/data/test20266
-rw-r--r--tests/data/test20276
-rw-r--r--tests/data/test2038
-rw-r--r--tests/data/test20323
-rw-r--r--tests/data/test20336
-rw-r--r--tests/data/test20346
-rw-r--r--tests/data/test20356
-rw-r--r--tests/data/test20364
-rw-r--r--tests/data/test20376
-rw-r--r--tests/data/test20386
-rw-r--r--tests/data/test203910
-rw-r--r--tests/data/test20410
-rw-r--r--tests/data/test20418
-rw-r--r--tests/data/test20426
-rw-r--r--tests/data/test20436
-rw-r--r--tests/data/test20468
-rw-r--r--tests/data/test20478
-rw-r--r--tests/data/test20496
-rw-r--r--tests/data/test2058
-rw-r--r--tests/data/test20506
-rw-r--r--tests/data/test20518
-rw-r--r--tests/data/test20526
-rw-r--r--tests/data/test20536
-rw-r--r--tests/data/test20546
-rw-r--r--tests/data/test20556
-rw-r--r--tests/data/test20562
-rw-r--r--tests/data/test20572
-rw-r--r--tests/data/test205811
-rw-r--r--tests/data/test205911
-rw-r--r--tests/data/test2066
-rw-r--r--tests/data/test206011
-rw-r--r--tests/data/test20616
-rw-r--r--tests/data/test20626
-rw-r--r--tests/data/test20636
-rw-r--r--tests/data/test20646
-rw-r--r--tests/data/test20656
-rw-r--r--tests/data/test20666
-rw-r--r--tests/data/test2076
-rw-r--r--tests/data/test20706
-rw-r--r--tests/data/test20718
-rw-r--r--tests/data/test20724
-rw-r--r--tests/data/test207310
-rw-r--r--tests/data/test20746
-rw-r--r--tests/data/test20772
-rw-r--r--tests/data/test20782
-rw-r--r--tests/data/test20796
-rw-r--r--tests/data/test20811
-rw-r--r--tests/data/test2080bin20675 -> 20680 bytes
-rw-r--r--tests/data/test20816
-rw-r--r--tests/data/test20878
-rw-r--r--tests/data/test216
-rw-r--r--tests/data/test2104
-rw-r--r--tests/data/test21006
-rw-r--r--tests/data/test2116
-rw-r--r--tests/data/test2126
-rw-r--r--tests/data/test2144
-rw-r--r--tests/data/test2156
-rw-r--r--tests/data/test21610
-rw-r--r--tests/data/test2176
-rw-r--r--tests/data/test21811
-rw-r--r--tests/data/test2196
-rw-r--r--tests/data/test227
-rw-r--r--tests/data/test2206
-rw-r--r--tests/data/test22054
-rw-r--r--tests/data/test2216
-rw-r--r--tests/data/test2226
-rw-r--r--tests/data/test2236
-rw-r--r--tests/data/test2246
-rw-r--r--tests/data/test2256
-rw-r--r--tests/data/test2266
-rw-r--r--tests/data/test2276
-rw-r--r--tests/data/test2286
-rw-r--r--tests/data/test2296
-rw-r--r--tests/data/test236
-rw-r--r--tests/data/test2306
-rw-r--r--tests/data/test23006
-rw-r--r--tests/data/test230469
-rw-r--r--tests/data/test230559
-rw-r--r--tests/data/test230676
-rw-r--r--tests/data/test2318
-rw-r--r--tests/data/test2326
-rw-r--r--tests/data/test2336
-rw-r--r--tests/data/test2346
-rw-r--r--tests/data/test23510
-rw-r--r--tests/data/test23610
-rw-r--r--tests/data/test2376
-rw-r--r--tests/data/test2386
-rw-r--r--tests/data/test248
-rw-r--r--tests/data/test2406
-rw-r--r--tests/data/test240064
-rw-r--r--tests/data/test240172
-rw-r--r--tests/data/test2402109
-rw-r--r--tests/data/test240373
-rw-r--r--tests/data/test2404109
-rw-r--r--tests/data/test2416
-rw-r--r--tests/data/test2426
-rw-r--r--tests/data/test2446
-rw-r--r--tests/data/test2456
-rw-r--r--tests/data/test2466
-rw-r--r--tests/data/test24710
-rw-r--r--tests/data/test24810
-rw-r--r--tests/data/test2496
-rw-r--r--tests/data/test256
-rw-r--r--tests/data/test2507
-rw-r--r--tests/data/test250078
-rw-r--r--tests/data/test250170
-rw-r--r--tests/data/test2502104
-rw-r--r--tests/data/test250370
-rw-r--r--tests/data/test2517
-rw-r--r--tests/data/test2526
-rw-r--r--tests/data/test2536
-rw-r--r--tests/data/test2546
-rw-r--r--tests/data/test2556
-rw-r--r--tests/data/test25610
-rw-r--r--tests/data/test25710
-rw-r--r--tests/data/test25814
-rw-r--r--tests/data/test25914
-rw-r--r--tests/data/test266
-rw-r--r--tests/data/test2606
-rw-r--r--tests/data/test260025
-rw-r--r--tests/data/test260122
-rw-r--r--tests/data/test260222
-rw-r--r--tests/data/test260322
-rw-r--r--tests/data/test2616
-rw-r--r--tests/data/test262bin1228 -> 1225 bytes
-rw-r--r--tests/data/test2636
-rw-r--r--tests/data/test2646
-rw-r--r--tests/data/test2652
-rw-r--r--tests/data/test26611
-rw-r--r--tests/data/test26860
-rw-r--r--tests/data/test2696
-rw-r--r--tests/data/test279
-rw-r--r--tests/data/test2706
-rw-r--r--tests/data/test27110
-rw-r--r--tests/data/test2728
-rw-r--r--tests/data/test2736
-rw-r--r--tests/data/test2746
-rw-r--r--tests/data/test2756
-rw-r--r--tests/data/test2766
-rw-r--r--tests/data/test27712
-rw-r--r--tests/data/test2786
-rw-r--r--tests/data/test2796
-rw-r--r--tests/data/test286
-rw-r--r--tests/data/test2806
-rw-r--r--tests/data/test28111
-rw-r--r--tests/data/test2826
-rw-r--r--tests/data/test28310
-rw-r--r--tests/data/test28410
-rw-r--r--tests/data/test28512
-rw-r--r--tests/data/test28614
-rw-r--r--tests/data/test2876
-rw-r--r--tests/data/test2888
-rw-r--r--tests/data/test2898
-rw-r--r--tests/data/test296
-rw-r--r--tests/data/test2906
-rw-r--r--tests/data/test2916
-rw-r--r--tests/data/test2926
-rw-r--r--tests/data/test2936
-rw-r--r--tests/data/test2946
-rw-r--r--tests/data/test2956
-rw-r--r--tests/data/test2966
-rw-r--r--tests/data/test2976
-rw-r--r--tests/data/test2986
-rw-r--r--tests/data/test2996
-rw-r--r--tests/data/test36
-rw-r--r--tests/data/test306
-rw-r--r--tests/data/test3006
-rw-r--r--tests/data/test30026
-rw-r--r--tests/data/test30036
-rw-r--r--tests/data/test30046
-rw-r--r--tests/data/test30056
-rw-r--r--tests/data/test30066
-rw-r--r--tests/data/test30076
-rw-r--r--tests/data/test30084
-rw-r--r--tests/data/test3016
-rw-r--r--tests/data/test30114
-rw-r--r--tests/data/test30124
-rw-r--r--tests/data/test30136
-rw-r--r--tests/data/test30156
-rw-r--r--tests/data/test3026
-rw-r--r--tests/data/test302110
-rw-r--r--tests/data/test302210
-rw-r--r--tests/data/test30274
-rw-r--r--tests/data/test302873
-rw-r--r--tests/data/test302939
-rw-r--r--tests/data/test30310
-rw-r--r--tests/data/test303043
-rw-r--r--tests/data/test30422
-rw-r--r--tests/data/test3056
-rw-r--r--tests/data/test3066
-rw-r--r--tests/data/test3076
-rw-r--r--tests/data/test3086
-rw-r--r--tests/data/test3096
-rw-r--r--tests/data/test3133
-rw-r--r--tests/data/test3106
-rw-r--r--tests/data/test310085
-rw-r--r--tests/data/test310188
-rw-r--r--tests/data/test310251
-rw-r--r--tests/data/test310360
-rw-r--r--tests/data/test3116
-rw-r--r--tests/data/test3126
-rw-r--r--tests/data/test3136
-rw-r--r--tests/data/test3146
-rw-r--r--tests/data/test3156
-rw-r--r--tests/data/test3166
-rw-r--r--tests/data/test3176
-rw-r--r--tests/data/test3186
-rw-r--r--tests/data/test3194
-rw-r--r--tests/data/test326
-rw-r--r--tests/data/test3206
-rw-r--r--tests/data/test320025
-rw-r--r--tests/data/test320163
-rw-r--r--tests/data/test320267
-rw-r--r--tests/data/test3214
-rw-r--r--tests/data/test3224
-rw-r--r--tests/data/test3234
-rw-r--r--tests/data/test3244
-rw-r--r--tests/data/test3256
-rw-r--r--tests/data/test3264
-rw-r--r--tests/data/test32715
-rw-r--r--tests/data/test3286
-rw-r--r--tests/data/test32920
-rw-r--r--tests/data/test3311
-rw-r--r--tests/data/test3306
-rw-r--r--tests/data/test3317
-rw-r--r--tests/data/test33210
-rw-r--r--tests/data/test3336
-rw-r--r--tests/data/test3356
-rw-r--r--tests/data/test3366
-rw-r--r--tests/data/test3376
-rw-r--r--tests/data/test3386
-rw-r--r--tests/data/test3394
-rw-r--r--tests/data/test346
-rw-r--r--tests/data/test3406
-rw-r--r--tests/data/test3412
-rw-r--r--tests/data/test3424
-rw-r--r--tests/data/test3436
-rw-r--r--tests/data/test3444
-rw-r--r--tests/data/test3456
-rw-r--r--tests/data/test3474
-rw-r--r--tests/data/test34810
-rw-r--r--tests/data/test3496
-rw-r--r--tests/data/test35bin841 -> 846 bytes
-rw-r--r--tests/data/test3506
-rw-r--r--tests/data/test3516
-rw-r--r--tests/data/test3526
-rw-r--r--tests/data/test3536
-rw-r--r--tests/data/test3546
-rw-r--r--tests/data/test3558
-rw-r--r--tests/data/test35611
-rw-r--r--tests/data/test35739
-rw-r--r--tests/data/test35812
-rw-r--r--tests/data/test35912
-rw-r--r--tests/data/test366
-rw-r--r--tests/data/test3606
-rw-r--r--tests/data/test3616
-rw-r--r--tests/data/test36210
-rw-r--r--tests/data/test36310
-rw-r--r--tests/data/test36411
-rw-r--r--tests/data/test3656
-rw-r--r--tests/data/test3668
-rw-r--r--tests/data/test3686
-rw-r--r--tests/data/test3692
-rw-r--r--tests/data/test376
-rw-r--r--tests/data/test3702
-rw-r--r--tests/data/test3718
-rw-r--r--tests/data/test3768
-rw-r--r--tests/data/test3788
-rw-r--r--tests/data/test37912
-rw-r--r--tests/data/test3810
-rw-r--r--tests/data/test3804
-rw-r--r--tests/data/test3814
-rw-r--r--tests/data/test3836
-rw-r--r--tests/data/test3844
-rw-r--r--tests/data/test3856
-rw-r--r--tests/data/test3866
-rw-r--r--tests/data/test38724
-rw-r--r--tests/data/test3886
-rw-r--r--tests/data/test3896
-rw-r--r--tests/data/test3912
-rw-r--r--tests/data/test3904
-rw-r--r--tests/data/test3916
-rw-r--r--tests/data/test3929
-rw-r--r--tests/data/test3936
-rw-r--r--tests/data/test3946
-rw-r--r--tests/data/test3956
-rw-r--r--tests/data/test3966
-rw-r--r--tests/data/test3976
-rw-r--r--tests/data/test3986
-rw-r--r--tests/data/test3994
-rw-r--r--tests/data/test46
-rw-r--r--tests/data/test406
-rw-r--r--tests/data/test4006
-rw-r--r--tests/data/test40110
-rw-r--r--tests/data/test4026
-rw-r--r--tests/data/test4036
-rw-r--r--tests/data/test4046
-rw-r--r--tests/data/test4056
-rw-r--r--tests/data/test4066
-rw-r--r--tests/data/test4076
-rw-r--r--tests/data/test40810
-rw-r--r--tests/data/test40910
-rw-r--r--tests/data/test416
-rw-r--r--tests/data/test41010
-rw-r--r--tests/data/test41110
-rw-r--r--tests/data/test41210
-rw-r--r--tests/data/test41310
-rw-r--r--tests/data/test4142
-rw-r--r--tests/data/test4158
-rw-r--r--tests/data/test41651
-rw-r--r--tests/data/test41783
-rw-r--r--tests/data/test41867
-rw-r--r--tests/data/test41935
-rw-r--r--tests/data/test426
-rw-r--r--tests/data/test42075
-rw-r--r--tests/data/test42185
-rw-r--r--tests/data/test42244
-rw-r--r--tests/data/test42351
-rw-r--r--tests/data/test42468
-rw-r--r--tests/data/test42553
-rw-r--r--tests/data/test42634
-rw-r--r--tests/data/test42776
-rw-r--r--tests/data/test42868
-rw-r--r--tests/data/test42963
-rw-r--r--tests/data/test436
-rw-r--r--tests/data/test43014
-rw-r--r--tests/data/test43112
-rw-r--r--tests/data/test43214
-rw-r--r--tests/data/test4334
-rw-r--r--tests/data/test4344
-rw-r--r--tests/data/test4352
-rw-r--r--tests/data/test4364
-rw-r--r--tests/data/test43768
-rw-r--r--tests/data/test43890
-rw-r--r--tests/data/test43958
-rw-r--r--tests/data/test4412
-rw-r--r--tests/data/test4404
-rw-r--r--tests/data/test4414
-rw-r--r--tests/data/test4427
-rw-r--r--tests/data/test4437
-rw-r--r--tests/data/test4447
-rw-r--r--tests/data/test4456
-rw-r--r--tests/data/test44684
-rw-r--r--tests/data/test44765
-rw-r--r--tests/data/test44867
-rw-r--r--tests/data/test44965
-rw-r--r--tests/data/test456
-rw-r--r--tests/data/test45060
-rw-r--r--tests/data/test45159
-rw-r--r--tests/data/test45234
-rw-r--r--tests/data/test45333
-rw-r--r--tests/data/test45434
-rw-r--r--tests/data/test45552
-rw-r--r--tests/data/test45633
-rw-r--r--tests/data/test45769
-rw-r--r--tests/data/test45876
-rw-r--r--tests/data/test45963
-rw-r--r--tests/data/test4635
-rw-r--r--tests/data/test476
-rw-r--r--tests/data/test486
-rw-r--r--tests/data/test496
-rw-r--r--tests/data/test49012
-rw-r--r--tests/data/test49111
-rw-r--r--tests/data/test49216
-rw-r--r--tests/data/test4934
-rw-r--r--tests/data/test49410
-rw-r--r--tests/data/test4962
-rw-r--r--tests/data/test49762
-rw-r--r--tests/data/test49856
-rw-r--r--tests/data/test56
-rw-r--r--tests/data/test506
-rw-r--r--tests/data/test50010
-rw-r--r--tests/data/test5016
-rw-r--r--tests/data/test50210
-rw-r--r--tests/data/test5039
-rw-r--r--tests/data/test5046
-rw-r--r--tests/data/test50510
-rw-r--r--tests/data/test5064
-rw-r--r--tests/data/test5086
-rw-r--r--tests/data/test516
-rw-r--r--tests/data/test5106
-rw-r--r--tests/data/test5116
-rw-r--r--tests/data/test5126
-rw-r--r--tests/data/test5134
-rw-r--r--tests/data/test5144
-rw-r--r--tests/data/test5156
-rw-r--r--tests/data/test51611
-rw-r--r--tests/data/test5176
-rw-r--r--tests/data/test5186
-rw-r--r--tests/data/test5196
-rw-r--r--tests/data/test526
-rw-r--r--tests/data/test5206
-rw-r--r--tests/data/test5216
-rw-r--r--tests/data/test5226
-rw-r--r--tests/data/test5236
-rw-r--r--tests/data/test5246
-rw-r--r--tests/data/test52510
-rw-r--r--tests/data/test5266
-rw-r--r--tests/data/test5276
-rw-r--r--tests/data/test5286
-rw-r--r--tests/data/test52910
-rw-r--r--tests/data/test5315
-rw-r--r--tests/data/test53110
-rw-r--r--tests/data/test5326
-rw-r--r--tests/data/test5336
-rw-r--r--tests/data/test5346
-rw-r--r--tests/data/test5356
-rw-r--r--tests/data/test5376
-rw-r--r--tests/data/test5386
-rw-r--r--tests/data/test5396
-rw-r--r--tests/data/test546
-rw-r--r--tests/data/test5406
-rw-r--r--tests/data/test54110
-rw-r--r--tests/data/test5426
-rw-r--r--tests/data/test5436
-rw-r--r--tests/data/test5446
-rw-r--r--tests/data/test545bin822 -> 819 bytes
-rw-r--r--tests/data/test5466
-rw-r--r--tests/data/test5498
-rw-r--r--tests/data/test556
-rw-r--r--tests/data/test5506
-rw-r--r--tests/data/test5516
-rw-r--r--tests/data/test5526
-rw-r--r--tests/data/test5536
-rw-r--r--tests/data/test55417
-rw-r--r--tests/data/test5566
-rw-r--r--tests/data/test5582
-rw-r--r--tests/data/test566
-rw-r--r--tests/data/test5606
-rw-r--r--tests/data/test5616
-rw-r--r--tests/data/test5626
-rw-r--r--tests/data/test5636
-rw-r--r--tests/data/test5644
-rw-r--r--tests/data/test5656
-rw-r--r--tests/data/test56610
-rw-r--r--tests/data/test5684
-rw-r--r--tests/data/test5694
-rw-r--r--tests/data/test578
-rw-r--r--tests/data/test57119
-rw-r--r--tests/data/test5724
-rw-r--r--tests/data/test5736
-rw-r--r--tests/data/test5756
-rw-r--r--tests/data/test5766
-rw-r--r--tests/data/test57810
-rw-r--r--tests/data/test57910
-rw-r--r--tests/data/test587
-rw-r--r--tests/data/test5806
-rw-r--r--tests/data/test5816
-rw-r--r--tests/data/test58212
-rw-r--r--tests/data/test5838
-rw-r--r--tests/data/test58412
-rw-r--r--tests/data/test5856
-rw-r--r--tests/data/test5866
-rw-r--r--tests/data/test58717
-rw-r--r--tests/data/test58810
-rw-r--r--tests/data/test5898
-rw-r--r--tests/data/test596
-rw-r--r--tests/data/test59110
-rw-r--r--tests/data/test59210
-rw-r--r--tests/data/test59310
-rw-r--r--tests/data/test59412
-rw-r--r--tests/data/test5958
-rw-r--r--tests/data/test5968
-rw-r--r--tests/data/test5974
-rw-r--r--tests/data/test5989
-rw-r--r--tests/data/test59910
-rw-r--r--tests/data/test69
-rw-r--r--tests/data/test602
-rw-r--r--tests/data/test60010
-rw-r--r--tests/data/test60110
-rw-r--r--tests/data/test60210
-rw-r--r--tests/data/test60310
-rw-r--r--tests/data/test6048
-rw-r--r--tests/data/test6058
-rw-r--r--tests/data/test6068
-rw-r--r--tests/data/test6078
-rw-r--r--tests/data/test60814
-rw-r--r--tests/data/test60910
-rw-r--r--tests/data/test6123
-rw-r--r--tests/data/test61014
-rw-r--r--tests/data/test61114
-rw-r--r--tests/data/test61212
-rw-r--r--tests/data/test61312
-rw-r--r--tests/data/test61412
-rw-r--r--tests/data/test61514
-rw-r--r--tests/data/test61610
-rw-r--r--tests/data/test61710
-rw-r--r--tests/data/test61810
-rw-r--r--tests/data/test61910
-rw-r--r--tests/data/test6219
-rw-r--r--tests/data/test62010
-rw-r--r--tests/data/test62110
-rw-r--r--tests/data/test62210
-rw-r--r--tests/data/test62310
-rw-r--r--tests/data/test62412
-rw-r--r--tests/data/test62512
-rw-r--r--tests/data/test62610
-rw-r--r--tests/data/test62712
-rw-r--r--tests/data/test6286
-rw-r--r--tests/data/test6296
-rw-r--r--tests/data/test636
-rw-r--r--tests/data/test6308
-rw-r--r--tests/data/test6318
-rw-r--r--tests/data/test6328
-rw-r--r--tests/data/test63310
-rw-r--r--tests/data/test63410
-rw-r--r--tests/data/test63510
-rw-r--r--tests/data/test63610
-rw-r--r--tests/data/test63710
-rw-r--r--tests/data/test63814
-rw-r--r--tests/data/test63914
-rw-r--r--tests/data/test646
-rw-r--r--tests/data/test64010
-rw-r--r--tests/data/test64110
-rw-r--r--tests/data/test64210
-rw-r--r--tests/data/test64314
-rw-r--r--tests/data/test6442
-rw-r--r--tests/data/test64542
-rw-r--r--tests/data/test64616
-rw-r--r--tests/data/test64716
-rw-r--r--tests/data/test64814
-rw-r--r--tests/data/test64914
-rw-r--r--tests/data/test656
-rw-r--r--tests/data/test650137
-rw-r--r--tests/data/test65118
-rw-r--r--tests/data/test65210
-rw-r--r--tests/data/test65314
-rw-r--r--tests/data/test65420
-rw-r--r--tests/data/test6556
-rw-r--r--tests/data/test6568
-rw-r--r--tests/data/test6584
-rw-r--r--tests/data/test6594
-rw-r--r--tests/data/test666
-rw-r--r--tests/data/test6604
-rw-r--r--tests/data/test6616
-rw-r--r--tests/data/test6626
-rw-r--r--tests/data/test6636
-rw-r--r--tests/data/test66410
-rw-r--r--tests/data/test66510
-rw-r--r--tests/data/test66612
-rw-r--r--tests/data/test66722
-rw-r--r--tests/data/test66830
-rw-r--r--tests/data/test66912
-rw-r--r--tests/data/test67012
-rw-r--r--tests/data/test67112
-rw-r--r--tests/data/test67214
-rw-r--r--tests/data/test67314
-rw-r--r--tests/data/test6744
-rw-r--r--tests/data/test6756
-rw-r--r--tests/data/test67615
-rw-r--r--tests/data/test6774
-rw-r--r--tests/data/test6784
-rw-r--r--tests/data/test67910
-rw-r--r--tests/data/test68010
-rw-r--r--tests/data/test68210
-rw-r--r--tests/data/test68310
-rw-r--r--tests/data/test68410
-rw-r--r--tests/data/test68510
-rw-r--r--tests/data/test68634
-rw-r--r--tests/data/test68762
-rw-r--r--tests/data/test68862
-rw-r--r--tests/data/test710
-rw-r--r--tests/data/test706
-rw-r--r--tests/data/test7006
-rw-r--r--tests/data/test7016
-rw-r--r--tests/data/test7026
-rw-r--r--tests/data/test7036
-rw-r--r--tests/data/test7046
-rw-r--r--tests/data/test7056
-rw-r--r--tests/data/test7066
-rw-r--r--tests/data/test7076
-rw-r--r--tests/data/test7086
-rw-r--r--tests/data/test7096
-rw-r--r--tests/data/test7112
-rw-r--r--tests/data/test7108
-rw-r--r--tests/data/test7116
-rw-r--r--tests/data/test7128
-rw-r--r--tests/data/test7138
-rw-r--r--tests/data/test7148
-rw-r--r--tests/data/test7158
-rw-r--r--tests/data/test7162
-rw-r--r--tests/data/test7172
-rw-r--r--tests/data/test7186
-rw-r--r--tests/data/test7198
-rw-r--r--tests/data/test726
-rw-r--r--tests/data/test7208
-rw-r--r--tests/data/test7216
-rw-r--r--tests/data/test72252
-rw-r--r--tests/data/test72335
-rw-r--r--tests/data/test72458
-rw-r--r--tests/data/test72540
-rw-r--r--tests/data/test72640
-rw-r--r--tests/data/test72752
-rw-r--r--tests/data/test72864
-rw-r--r--tests/data/test72941
-rw-r--r--tests/data/test7313
-rw-r--r--tests/data/test73052
-rw-r--r--tests/data/test73158
-rw-r--r--tests/data/test73252
-rw-r--r--tests/data/test73352
-rw-r--r--tests/data/test73452
-rw-r--r--tests/data/test73552
-rw-r--r--tests/data/test73658
-rw-r--r--tests/data/test73758
-rw-r--r--tests/data/test73837
-rw-r--r--tests/data/test73934
-rw-r--r--tests/data/test748
-rw-r--r--tests/data/test74060
-rw-r--r--tests/data/test74142
-rw-r--r--tests/data/test756
-rw-r--r--tests/data/test764
-rw-r--r--tests/data/test776
-rw-r--r--tests/data/test786
-rw-r--r--tests/data/test796
-rw-r--r--tests/data/test79953
-rw-r--r--tests/data/test813
-rw-r--r--tests/data/test806
-rw-r--r--tests/data/test8006
-rw-r--r--tests/data/test8016
-rw-r--r--tests/data/test8026
-rw-r--r--tests/data/test8036
-rw-r--r--tests/data/test8046
-rw-r--r--tests/data/test80510
-rw-r--r--tests/data/test8066
-rw-r--r--tests/data/test8076
-rw-r--r--tests/data/test8086
-rw-r--r--tests/data/test8096
-rw-r--r--tests/data/test8106
-rw-r--r--tests/data/test8116
-rw-r--r--tests/data/test8126
-rw-r--r--tests/data/test8136
-rw-r--r--tests/data/test8146
-rw-r--r--tests/data/test8156
-rw-r--r--tests/data/test8166
-rw-r--r--tests/data/test8176
-rw-r--r--tests/data/test8186
-rw-r--r--tests/data/test8196
-rw-r--r--tests/data/test826
-rw-r--r--tests/data/test8206
-rw-r--r--tests/data/test8216
-rw-r--r--tests/data/test82310
-rw-r--r--tests/data/test8246
-rw-r--r--tests/data/test8256
-rw-r--r--tests/data/test8266
-rw-r--r--tests/data/test8286
-rw-r--r--tests/data/test8296
-rw-r--r--tests/data/test836
-rw-r--r--tests/data/test8306
-rw-r--r--tests/data/test8316
-rw-r--r--tests/data/test8326
-rw-r--r--tests/data/test8336
-rw-r--r--tests/data/test8346
-rw-r--r--tests/data/test8356
-rw-r--r--tests/data/test8368
-rw-r--r--tests/data/test8376
-rw-r--r--tests/data/test8386
-rw-r--r--tests/data/test8396
-rw-r--r--tests/data/test846
-rw-r--r--tests/data/test8406
-rw-r--r--tests/data/test8416
-rw-r--r--tests/data/test8426
-rw-r--r--tests/data/test8436
-rw-r--r--tests/data/test8446
-rw-r--r--tests/data/test8456
-rw-r--r--tests/data/test8466
-rw-r--r--tests/data/test8476
-rw-r--r--tests/data/test8486
-rw-r--r--tests/data/test8496
-rw-r--r--tests/data/test856
-rw-r--r--tests/data/test8506
-rw-r--r--tests/data/test8516
-rw-r--r--tests/data/test8526
-rw-r--r--tests/data/test8537
-rw-r--r--tests/data/test8546
-rw-r--r--tests/data/test8556
-rw-r--r--tests/data/test8566
-rw-r--r--tests/data/test8576
-rw-r--r--tests/data/test8586
-rw-r--r--tests/data/test8596
-rw-r--r--tests/data/test868
-rw-r--r--tests/data/test8606
-rw-r--r--tests/data/test8616
-rw-r--r--tests/data/test8626
-rw-r--r--tests/data/test8636
-rw-r--r--tests/data/test8646
-rw-r--r--tests/data/test8656
-rw-r--r--tests/data/test8666
-rw-r--r--tests/data/test8676
-rw-r--r--tests/data/test86910
-rw-r--r--tests/data/test878
-rw-r--r--tests/data/test8706
-rw-r--r--tests/data/test8716
-rw-r--r--tests/data/test8726
-rw-r--r--tests/data/test8746
-rw-r--r--tests/data/test8756
-rw-r--r--tests/data/test8766
-rw-r--r--tests/data/test8776
-rw-r--r--tests/data/test8786
-rw-r--r--tests/data/test8796
-rw-r--r--tests/data/test8811
-rw-r--r--tests/data/test8806
-rw-r--r--tests/data/test8816
-rw-r--r--tests/data/test8828
-rw-r--r--tests/data/test8836
-rw-r--r--tests/data/test8846
-rw-r--r--tests/data/test8856
-rw-r--r--tests/data/test8866
-rw-r--r--tests/data/test8876
-rw-r--r--tests/data/test8886
-rw-r--r--tests/data/test8896
-rw-r--r--tests/data/test8906
-rw-r--r--tests/data/test8916
-rw-r--r--tests/data/test8926
-rw-r--r--tests/data/test8936
-rw-r--r--tests/data/test8946
-rw-r--r--tests/data/test8956
-rw-r--r--tests/data/test8966
-rw-r--r--tests/data/test89710
-rw-r--r--tests/data/test8986
-rw-r--r--tests/data/test89964
-rw-r--r--tests/data/test912
-rw-r--r--tests/data/test9006
-rw-r--r--tests/data/test9016
-rw-r--r--tests/data/test9026
-rw-r--r--tests/data/test9036
-rw-r--r--tests/data/test9046
-rw-r--r--tests/data/test9056
-rw-r--r--tests/data/test90710
-rw-r--r--tests/data/test9086
-rw-r--r--tests/data/test90910
-rw-r--r--tests/data/test914
-rw-r--r--tests/data/test9106
-rw-r--r--tests/data/test9116
-rw-r--r--tests/data/test91210
-rw-r--r--tests/data/test91310
-rw-r--r--tests/data/test91410
-rw-r--r--tests/data/test9156
-rw-r--r--tests/data/test9166
-rw-r--r--tests/data/test9176
-rw-r--r--tests/data/test9186
-rw-r--r--tests/data/test9196
-rw-r--r--tests/data/test926
-rw-r--r--tests/data/test9206
-rw-r--r--tests/data/test9226
-rw-r--r--tests/data/test9236
-rw-r--r--tests/data/test9246
-rw-r--r--tests/data/test9256
-rw-r--r--tests/data/test9266
-rw-r--r--tests/data/test9276
-rw-r--r--tests/data/test9286
-rw-r--r--tests/data/test9296
-rw-r--r--tests/data/test936
-rw-r--r--tests/data/test9306
-rw-r--r--tests/data/test9316
-rw-r--r--tests/data/test9326
-rw-r--r--tests/data/test9336
-rw-r--r--tests/data/test9346
-rw-r--r--tests/data/test9356
-rw-r--r--tests/data/test9366
-rw-r--r--tests/data/test9376
-rw-r--r--tests/data/test93812
-rw-r--r--tests/data/test9396
-rw-r--r--tests/data/test946
-rw-r--r--tests/data/test9406
-rw-r--r--tests/data/test94110
-rw-r--r--tests/data/test9426
-rw-r--r--tests/data/test9436
-rw-r--r--tests/data/test9446
-rw-r--r--tests/data/test9456
-rw-r--r--tests/data/test9466
-rw-r--r--tests/data/test9476
-rw-r--r--tests/data/test9486
-rw-r--r--tests/data/test9496
-rw-r--r--tests/data/test956
-rw-r--r--tests/data/test9504
-rw-r--r--tests/data/test9514
-rw-r--r--tests/data/test9524
-rw-r--r--tests/data/test9536
-rw-r--r--tests/data/test9546
-rw-r--r--tests/data/test9554
-rw-r--r--tests/data/test9564
-rw-r--r--tests/data/test9574
-rw-r--r--tests/data/test9584
-rw-r--r--tests/data/test9594
-rw-r--r--tests/data/test962
-rw-r--r--tests/data/test9604
-rw-r--r--tests/data/test9614
-rw-r--r--tests/data/test9624
-rw-r--r--tests/data/test9634
-rw-r--r--tests/data/test9644
-rw-r--r--tests/data/test9654
-rw-r--r--tests/data/test9664
-rw-r--r--tests/data/test9674
-rw-r--r--tests/data/test9684
-rw-r--r--tests/data/test9696
-rw-r--r--tests/data/test976
-rw-r--r--tests/data/test9704
-rw-r--r--tests/data/test9714
-rw-r--r--tests/data/test9724
-rw-r--r--tests/data/test9736
-rw-r--r--tests/data/test9746
-rw-r--r--tests/data/test9756
-rw-r--r--tests/data/test9766
-rw-r--r--tests/data/test97711
-rw-r--r--tests/data/test97856
-rw-r--r--tests/data/test97964
-rw-r--r--tests/data/test986
-rw-r--r--tests/data/test9806
-rw-r--r--tests/data/test98110
-rw-r--r--tests/data/test9826
-rw-r--r--tests/data/test98310
-rw-r--r--tests/data/test98410
-rw-r--r--tests/data/test9856
-rw-r--r--tests/data/test98610
-rw-r--r--tests/data/test98751
-rw-r--r--tests/data/test98848
-rw-r--r--tests/data/test98948
-rw-r--r--tests/data/test996
-rw-r--r--tests/data/test99057
-rw-r--r--tests/data/test99160
-rwxr-xr-xtests/devtest.pl202
-rwxr-xr-xtests/dictserver.py2
-rw-r--r--tests/directories.pm84
-rwxr-xr-xtests/disable-scan.pl43
-rwxr-xr-x[-rw-r--r--]tests/error-codes.pl14
-rwxr-xr-xtests/extern-scan.pl69
-rwxr-xr-xtests/ftpserver.pl307
-rw-r--r--tests/getpart.pm147
-rw-r--r--tests/globalconfig.pm117
-rwxr-xr-xtests/http-server.pl (renamed from tests/httpserver.pl)56
-rw-r--r--tests/http/Makefile.am (renamed from CMake/FindNSS.cmake)27
-rw-r--r--tests/http/Makefile.in782
-rw-r--r--tests/http/README.md128
-rw-r--r--tests/http/clients/Makefile.am73
-rw-r--r--tests/http/clients/Makefile.in899
-rw-r--r--tests/http/clients/Makefile.inc (renamed from src/makefile.amiga)39
-rw-r--r--tests/http/clients/h2-download.c351
-rw-r--r--tests/http/clients/h2-pausing.c339
-rw-r--r--tests/http/clients/h2-serverpush.c272
-rw-r--r--tests/http/clients/h2-upgrade-extreme.c249
-rw-r--r--tests/http/clients/tls-session-reuse.c306
-rw-r--r--tests/http/clients/ws-data.c263
-rw-r--r--tests/http/clients/ws-pingpong.c158
-rw-r--r--tests/http/config.ini.in (renamed from lib/makefile.amiga)29
-rwxr-xr-xtests/http2-server.pl42
-rwxr-xr-xtests/http3-server.pl119
-rw-r--r--tests/libtest/CMakeLists.txt15
-rw-r--r--tests/libtest/Makefile.am8
-rw-r--r--tests/libtest/Makefile.in15879
-rw-r--r--tests/libtest/Makefile.inc282
-rw-r--r--tests/libtest/chkhostname.c2
-rw-r--r--tests/libtest/first.c21
-rw-r--r--tests/libtest/lib1156.c12
-rw-r--r--tests/libtest/lib1301.c62
-rw-r--r--tests/libtest/lib1500.c2
-rw-r--r--tests/libtest/lib1501.c2
-rw-r--r--tests/libtest/lib1502.c2
-rw-r--r--tests/libtest/lib1506.c2
-rw-r--r--tests/libtest/lib1507.c2
-rw-r--r--tests/libtest/lib1508.c2
-rw-r--r--tests/libtest/lib1509.c2
-rw-r--r--tests/libtest/lib1510.c4
-rw-r--r--tests/libtest/lib1511.c2
-rw-r--r--tests/libtest/lib1512.c11
-rw-r--r--tests/libtest/lib1513.c8
-rw-r--r--tests/libtest/lib1514.c2
-rw-r--r--tests/libtest/lib1515.c6
-rw-r--r--tests/libtest/lib1517.c12
-rw-r--r--tests/libtest/lib1518.c4
-rw-r--r--tests/libtest/lib1520.c2
-rw-r--r--tests/libtest/lib1522.c10
-rw-r--r--tests/libtest/lib1523.c4
-rw-r--r--tests/libtest/lib1525.c6
-rw-r--r--tests/libtest/lib1526.c4
-rw-r--r--tests/libtest/lib1527.c4
-rw-r--r--tests/libtest/lib1528.c4
-rw-r--r--tests/libtest/lib1529.c2
-rw-r--r--tests/libtest/lib1530.c2
-rw-r--r--tests/libtest/lib1531.c4
-rw-r--r--tests/libtest/lib1532.c2
-rw-r--r--tests/libtest/lib1533.c4
-rw-r--r--tests/libtest/lib1534.c2
-rw-r--r--tests/libtest/lib1535.c18
-rw-r--r--tests/libtest/lib1536.c2
-rw-r--r--tests/libtest/lib1537.c2
-rw-r--r--tests/libtest/lib1538.c2
-rw-r--r--tests/libtest/lib1540.c11
-rw-r--r--tests/libtest/lib1542.c8
-rw-r--r--tests/libtest/lib1545.c56
-rw-r--r--tests/libtest/lib1550.c2
-rw-r--r--tests/libtest/lib1551.c8
-rw-r--r--tests/libtest/lib1552.c2
-rw-r--r--tests/libtest/lib1553.c2
-rw-r--r--tests/libtest/lib1554.c21
-rw-r--r--tests/libtest/lib1555.c8
-rw-r--r--tests/libtest/lib1556.c2
-rw-r--r--tests/libtest/lib1557.c2
-rw-r--r--tests/libtest/lib1558.c6
-rw-r--r--tests/libtest/lib1559.c2
-rw-r--r--tests/libtest/lib1560.c523
-rw-r--r--tests/libtest/lib1564.c2
-rw-r--r--tests/libtest/lib1565.c2
-rw-r--r--tests/libtest/lib1567.c15
-rw-r--r--tests/libtest/lib1568.c4
-rw-r--r--tests/libtest/lib1569.c25
-rw-r--r--tests/libtest/lib1591.c6
-rw-r--r--tests/libtest/lib1592.c7
-rw-r--r--tests/libtest/lib1593.c2
-rw-r--r--tests/libtest/lib1594.c2
-rw-r--r--tests/libtest/lib1597.c4
-rw-r--r--tests/libtest/lib1662.c90
-rw-r--r--tests/libtest/lib1900.c55
-rw-r--r--tests/libtest/lib1903.c57
-rw-r--r--tests/libtest/lib1905.c8
-rw-r--r--tests/libtest/lib1906.c47
-rw-r--r--tests/libtest/lib1907.c12
-rw-r--r--tests/libtest/lib1908.c4
-rw-r--r--tests/libtest/lib1910.c2
-rw-r--r--tests/libtest/lib1911.c24
-rw-r--r--tests/libtest/lib1912.c76
-rw-r--r--tests/libtest/lib1913.c2
-rw-r--r--tests/libtest/lib1915.c66
-rw-r--r--tests/libtest/lib1916.c2
-rw-r--r--tests/libtest/lib1918.c2
-rw-r--r--tests/libtest/lib1919.c37
-rw-r--r--tests/libtest/lib1933.c2
-rw-r--r--tests/libtest/lib1934.c2
-rw-r--r--tests/libtest/lib1935.c2
-rw-r--r--tests/libtest/lib1936.c2
-rw-r--r--tests/libtest/lib1937.c2
-rw-r--r--tests/libtest/lib1938.c2
-rw-r--r--tests/libtest/lib1939.c2
-rw-r--r--tests/libtest/lib1940.c57
-rw-r--r--tests/libtest/lib1945.c44
-rw-r--r--tests/libtest/lib1947.c89
-rw-r--r--tests/libtest/lib1948.c51
-rw-r--r--tests/libtest/lib1955.c18
-rw-r--r--tests/libtest/lib1956.c73
-rw-r--r--tests/libtest/lib1957.c72
-rw-r--r--tests/libtest/lib1958.c72
-rw-r--r--tests/libtest/lib1959.c74
-rw-r--r--tests/libtest/lib1960.c155
-rw-r--r--tests/libtest/lib1964.c68
-rw-r--r--tests/libtest/lib1970.c73
-rw-r--r--tests/libtest/lib1971.c83
-rw-r--r--tests/libtest/lib1972.c84
-rw-r--r--tests/libtest/lib1973.c72
-rw-r--r--tests/libtest/lib1974.c65
-rw-r--r--tests/libtest/lib1975.c85
-rw-r--r--tests/libtest/lib2301.c8
-rw-r--r--tests/libtest/lib2302.c133
-rw-r--r--tests/libtest/lib2304.c142
-rw-r--r--tests/libtest/lib2305.c107
-rw-r--r--tests/libtest/lib2306.c55
-rw-r--r--tests/libtest/lib2402.c142
-rw-r--r--tests/libtest/lib2404.c144
-rw-r--r--tests/libtest/lib2502.c141
-rw-r--r--tests/libtest/lib3010.c3
-rw-r--r--tests/libtest/lib3025.c2
-rw-r--r--tests/libtest/lib3026.c14
-rw-r--r--tests/libtest/lib3027.c2
-rw-r--r--tests/libtest/lib3100.c68
-rw-r--r--tests/libtest/lib3101.c64
-rw-r--r--tests/libtest/lib3102.c141
-rw-r--r--tests/libtest/lib3103.c (renamed from lib/wildcard.c)71
-rw-r--r--tests/libtest/lib500.c2
-rw-r--r--tests/libtest/lib501.c2
-rw-r--r--tests/libtest/lib502.c2
-rw-r--r--tests/libtest/lib503.c2
-rw-r--r--tests/libtest/lib504.c2
-rw-r--r--tests/libtest/lib505.c2
-rw-r--r--tests/libtest/lib506.c8
-rw-r--r--tests/libtest/lib507.c2
-rw-r--r--tests/libtest/lib508.c2
-rw-r--r--tests/libtest/lib509.c2
-rw-r--r--tests/libtest/lib510.c2
-rw-r--r--tests/libtest/lib511.c2
-rw-r--r--tests/libtest/lib512.c2
-rw-r--r--tests/libtest/lib513.c2
-rw-r--r--tests/libtest/lib514.c2
-rw-r--r--tests/libtest/lib515.c2
-rw-r--r--tests/libtest/lib516.c6
-rw-r--r--tests/libtest/lib517.c9
-rw-r--r--tests/libtest/lib518.c4
-rw-r--r--tests/libtest/lib519.c4
-rw-r--r--tests/libtest/lib520.c2
-rw-r--r--tests/libtest/lib521.c2
-rw-r--r--tests/libtest/lib523.c2
-rw-r--r--tests/libtest/lib524.c2
-rw-r--r--tests/libtest/lib525.c2
-rw-r--r--tests/libtest/lib526.c4
-rw-r--r--tests/libtest/lib530.c4
-rw-r--r--tests/libtest/lib533.c4
-rw-r--r--tests/libtest/lib537.c4
-rw-r--r--tests/libtest/lib539.c6
-rw-r--r--tests/libtest/lib540.c9
-rw-r--r--tests/libtest/lib541.c6
-rw-r--r--tests/libtest/lib542.c2
-rw-r--r--tests/libtest/lib543.c2
-rw-r--r--tests/libtest/lib544.c4
-rw-r--r--tests/libtest/lib547.c8
-rw-r--r--tests/libtest/lib549.c2
-rw-r--r--tests/libtest/lib552.c7
-rw-r--r--tests/libtest/lib553.c2
-rw-r--r--tests/libtest/lib554.c3
-rw-r--r--tests/libtest/lib555.c8
-rw-r--r--tests/libtest/lib556.c4
-rw-r--r--tests/libtest/lib557.c120
-rw-r--r--tests/libtest/lib558.c2
-rw-r--r--tests/libtest/lib559.c2
-rw-r--r--tests/libtest/lib560.c4
-rw-r--r--tests/libtest/lib562.c2
-rw-r--r--tests/libtest/lib564.c2
-rw-r--r--tests/libtest/lib566.c8
-rw-r--r--tests/libtest/lib567.c2
-rw-r--r--tests/libtest/lib568.c18
-rw-r--r--tests/libtest/lib569.c8
-rw-r--r--tests/libtest/lib570.c10
-rw-r--r--tests/libtest/lib571.c22
-rw-r--r--tests/libtest/lib572.c20
-rw-r--r--tests/libtest/lib573.c2
-rw-r--r--tests/libtest/lib574.c5
-rw-r--r--tests/libtest/lib575.c2
-rw-r--r--tests/libtest/lib576.c11
-rw-r--r--tests/libtest/lib578.c10
-rw-r--r--tests/libtest/lib579.c6
-rw-r--r--tests/libtest/lib582.c10
-rw-r--r--tests/libtest/lib583.c8
-rw-r--r--tests/libtest/lib586.c10
-rw-r--r--tests/libtest/lib589.c4
-rw-r--r--tests/libtest/lib590.c4
-rw-r--r--tests/libtest/lib591.c9
-rw-r--r--tests/libtest/lib597.c13
-rw-r--r--tests/libtest/lib598.c2
-rw-r--r--tests/libtest/lib599.c10
-rw-r--r--tests/libtest/lib643.c20
-rw-r--r--tests/libtest/lib650.c6
-rw-r--r--tests/libtest/lib651.c3
-rw-r--r--tests/libtest/lib652.c2
-rw-r--r--tests/libtest/lib653.c2
-rw-r--r--tests/libtest/lib654.c4
-rw-r--r--tests/libtest/lib655.c2
-rw-r--r--tests/libtest/lib658.c2
-rw-r--r--tests/libtest/lib659.c2
-rw-r--r--tests/libtest/lib661.c28
-rw-r--r--tests/libtest/lib666.c2
-rw-r--r--tests/libtest/lib667.c2
-rw-r--r--tests/libtest/lib668.c4
-rw-r--r--tests/libtest/lib670.c12
-rw-r--r--tests/libtest/lib674.c2
-rw-r--r--tests/libtest/lib676.c4
-rw-r--r--tests/libtest/lib677.c50
-rw-r--r--tests/libtest/lib678.c10
-rw-r--r--tests/libtest/libauthretry.c2
-rw-r--r--tests/libtest/libntlmconnect.c21
-rw-r--r--tests/libtest/libprereq.c2
-rwxr-xr-xtests/libtest/mk-lib1521.pl60
-rwxr-xr-xtests/libtest/notexists.pl2
-rw-r--r--tests/libtest/sethostname.c4
-rw-r--r--tests/libtest/stub_gssapi.c17
-rw-r--r--tests/libtest/stub_gssapi.h162
-rw-r--r--tests/libtest/test.h22
-rwxr-xr-xtests/libtest/test1013.pl2
-rwxr-xr-xtests/libtest/test1022.pl2
-rwxr-xr-xtests/libtest/test307.pl2
-rwxr-xr-xtests/libtest/test610.pl2
-rwxr-xr-xtests/libtest/test613.pl4
-rw-r--r--tests/libtest/testtrace.c2
-rw-r--r--tests/libtest/testtrace.h2
-rw-r--r--tests/libtest/testutil.c36
-rw-r--r--tests/libtest/testutil.h5
-rwxr-xr-xtests/manpage-scan.pl42
-rwxr-xr-x[-rw-r--r--]tests/manpage-syntax.pl127
-rwxr-xr-x[-rw-r--r--]tests/markdown-uppercase.pl8
-rwxr-xr-xtests/mem-include-scan.pl10
-rwxr-xr-xtests/memanalyze.pl12
-rwxr-xr-xtests/negtelnetserver.py18
-rwxr-xr-xtests/nroff-scan.pl12
-rwxr-xr-xtests/option-check.pl66
-rwxr-xr-x[-rw-r--r--]tests/options-scan.pl15
-rw-r--r--tests/pathhelp.pm106
-rw-r--r--tests/processhelp.pm (renamed from tests/ftp.pm)51
-rwxr-xr-xtests/rtspserver.pl29
-rw-r--r--tests/runner.pm1468
-rw-r--r--tests/runtests.163
-rwxr-xr-xtests/runtests.pl5764
-rwxr-xr-xtests/secureserver.pl78
-rw-r--r--tests/server/CMakeLists.txt8
-rw-r--r--tests/server/Makefile.am2
-rw-r--r--tests/server/Makefile.in206
-rw-r--r--tests/server/Makefile.inc3
-rwxr-xr-xtests/server/base64.pl2
-rw-r--r--tests/server/disabled.c33
-rw-r--r--tests/server/fake_ntlm.c22
-rw-r--r--tests/server/getpart.c7
-rw-r--r--tests/server/getpart.h2
-rw-r--r--tests/server/mqttd.c48
-rw-r--r--tests/server/resolve.c6
-rw-r--r--tests/server/rtspd.c104
-rw-r--r--tests/server/server_setup.h2
-rw-r--r--tests/server/server_sockaddr.h2
-rw-r--r--tests/server/sockfilt.c144
-rw-r--r--tests/server/socksd.c51
-rw-r--r--tests/server/sws.c216
-rw-r--r--tests/server/testpart.c2
-rw-r--r--tests/server/tftp.h4
-rw-r--r--tests/server/tftpd.c68
-rw-r--r--tests/server/util.c115
-rw-r--r--tests/server/util.h20
-rw-r--r--tests/serverhelp.pm110
-rw-r--r--tests/servers.pm3010
-rwxr-xr-xtests/smbserver.py57
-rw-r--r--tests/sshhelp.pm221
-rwxr-xr-x[-rw-r--r--]tests/sshserver.pl283
-rw-r--r--tests/stunnel.pem289
-rwxr-xr-xtests/symbol-scan.pl30
-rw-r--r--tests/testcurl.14
-rwxr-xr-xtests/testcurl.pl156
-rw-r--r--tests/testutil.pm204
-rwxr-xr-xtests/tftpserver.pl21
-rw-r--r--tests/unit/CMakeLists.txt49
-rw-r--r--tests/unit/Makefile.am10
-rw-r--r--tests/unit/Makefile.in2057
-rw-r--r--tests/unit/Makefile.inc65
-rw-r--r--tests/unit/README.md4
-rw-r--r--tests/unit/curlcheck.h36
-rw-r--r--tests/unit/unit1300.c8
-rw-r--r--tests/unit/unit1301.c56
-rw-r--r--tests/unit/unit1302.c12
-rw-r--r--tests/unit/unit1303.c2
-rw-r--r--tests/unit/unit1304.c47
-rw-r--r--tests/unit/unit1305.c2
-rw-r--r--tests/unit/unit1307.c6
-rw-r--r--tests/unit/unit1308.c9
-rw-r--r--tests/unit/unit1309.c2
-rw-r--r--tests/unit/unit1323.c12
-rw-r--r--tests/unit/unit1330.c2
-rw-r--r--tests/unit/unit1394.c4
-rw-r--r--tests/unit/unit1395.c36
-rw-r--r--tests/unit/unit1396.c2
-rw-r--r--tests/unit/unit1397.c136
-rw-r--r--tests/unit/unit1398.c4
-rw-r--r--tests/unit/unit1399.c4
-rw-r--r--tests/unit/unit1600.c2
-rw-r--r--tests/unit/unit1601.c6
-rw-r--r--tests/unit/unit1602.c2
-rw-r--r--tests/unit/unit1603.c2
-rw-r--r--tests/unit/unit1604.c6
-rw-r--r--tests/unit/unit1605.c2
-rw-r--r--tests/unit/unit1606.c2
-rw-r--r--tests/unit/unit1607.c6
-rw-r--r--tests/unit/unit1608.c19
-rw-r--r--tests/unit/unit1609.c6
-rw-r--r--tests/unit/unit1610.c6
-rw-r--r--tests/unit/unit1611.c4
-rw-r--r--tests/unit/unit1612.c6
-rw-r--r--tests/unit/unit1614.c81
-rw-r--r--tests/unit/unit1620.c2
-rw-r--r--tests/unit/unit1621.c15
-rw-r--r--tests/unit/unit1650.c104
-rw-r--r--tests/unit/unit1651.c5
-rw-r--r--tests/unit/unit1652.c2
-rw-r--r--tests/unit/unit1653.c23
-rw-r--r--tests/unit/unit1654.c63
-rw-r--r--tests/unit/unit1655.c6
-rw-r--r--tests/unit/unit1660.c18
-rw-r--r--tests/unit/unit1661.c2
-rw-r--r--tests/unit/unit2600.c399
-rw-r--r--tests/unit/unit2601.c246
-rw-r--r--tests/unit/unit2602.c148
-rw-r--r--tests/unit/unit2603.c190
-rw-r--r--tests/unit/unit3200.c180
-rwxr-xr-xtests/util.py2
-rw-r--r--tests/valgrind.pm22
-rwxr-xr-xtests/version-scan.pl44
-rw-r--r--winbuild/Makefile.vc9
-rw-r--r--winbuild/MakefileBuild.vc23
-rw-r--r--winbuild/README.md4
-rwxr-xr-xwinbuild/gen_resp_file.bat8
3522 files changed, 120544 insertions, 125095 deletions
diff --git a/CHANGES b/CHANGES
index d48ababb4..f9066e768 100644
--- a/CHANGES
+++ b/CHANGES
@@ -6,8860 +6,10369 @@
Changelog
-Version 7.86.0 (26 Oct 2022)
+Version 8.5.0 (6 Dec 2023)
-Daniel Stenberg (26 Oct 2022)
-- RELEASE: synced
+Daniel Stenberg (6 Dec 2023)
- The 7.86.0 release
+- RELEASE-NOTES: synced
-- THANKS: added from the 7.86.0 release
+ The curl 8.5.0 release.
-Viktor Szakats (25 Oct 2022)
-- noproxy: include netinet/in.h for htonl()
+Dan Fandrich (5 Dec 2023)
- Solve the Amiga build warning by including `netinet/in.h`.
+- github/labeler: switch from the beta to labeler v5
- `krb5.c` and `socketpair.c` are using `htonl()` too. This header is
- already included in those sources.
+ Some keys were renamed and the dot option was made default.
- Regression from 1e9a538e05c0107c54ef81d9de7cd0b27cd13309
+ Closes #12458
- Reviewed-by: Daniel Stenberg
- Closes #9787
+Daniel Stenberg (5 Dec 2023)
-Marc Hoersken (24 Oct 2022)
-- CI: fix AppVeyor status failing for starting jobs
+- DEPRECATE: remove NTLM_WB in June 2024
-Daniel Stenberg (24 Oct 2022)
-- test445: verifies the protocols-over-http-proxy flaw and fix
+ Ref: https://curl.se/mail/lib-2023-12/0010.html
-- http_proxy: restore the protocol pointer on error
+ Closes #12451
- Reported-by: Trail of Bits
+Jacob Hoffman-Andrews (4 Dec 2023)
- Closes #9790
+- rustls: implement connect_blocking
-- multi: remove duplicate include of connect.h
+ Closes #11647
- Reported-by: Martin Strunz
- Fixes #9794
- Closes #9795
+Daniel Stenberg (4 Dec 2023)
-Daniel Gustafsson (24 Oct 2022)
-- idn: fix typo in test description
+- examples/rtsp-options.c: add
- s/enabked/enabled/i
+ Just a bare bones RTSP example using CURLOPT_RTSP_SESSION_ID and
+ CURLOPT_RTSP_REQUEST set to CURL_RTSPREQ_OPTIONS.
-Daniel Stenberg (24 Oct 2022)
-- url: use IDN decoded names for HSTS checks
+ Closes #12452
- Reported-by: Hiroki Kurosawa
+Stefan Eissing (4 Dec 2023)
- Closes #9791
+- ngtcp2: ignore errors on unknown streams
-- unit1614: fix disabled-proxy build
+ - expecially in is_alive checks on connections, we might
+ see incoming packets on streams already forgotten and closed,
+ leading to errors reported by nghttp3. Ignore those.
- Follow-up to 1e9a538e05c01
+ Closes #12449
- Closes #9792
+Daniel Stenberg (4 Dec 2023)
-Daniel Gustafsson (24 Oct 2022)
-- cookies: optimize control character check
+- docs: make all examples in all libcurl man pages compile
- When checking for invalid octets the strcspn() call will return the
- position of the first found invalid char or the first NULL byte.
- This means that we can check the indicated position in the search-
- string saving a strlen() call.
+ Closes #12448
- Closes: #9736
- Reviewed-by: Jay Satiro <raysatiro@yahoo.com>
+- checksrc.pl: support #line instructions
-Daniel Stenberg (24 Oct 2022)
-- netrc: replace fgets with Curl_get_line
+ makes it identify the correct source file and line
- Make the parser only accept complete lines and avoid problems with
- overly long lines.
+- GHA/man-examples: verify libcurl man page examples
- Reported-by: Hiroki Kurosawa
+- verify-examples.pl: verify that all man page examples compile clean
- Closes #9789
+- RELEASE-NOTES: synced
-- RELEASE-NOTES: add "Planned upcoming removals include"
+Graham Campbell (2 Dec 2023)
- URL: https://curl.se/mail/archive-2022-10/0001.html
+- http3: bump ngtcp2 and nghttp3 versions
- Suggested-by: Dan Fandrich
+ nghttp3 v1.1.0
+ ngtcp2 v1.1.0
-Viktor Szakats (23 Oct 2022)
-- ci: bump to gcc-11 for macos
+ In docs and CI
- Ref: https://github.blog/changelog/2022-10-03-github-actions-jobs-running-on-macos-latest-are-now-running-on-macos-12/
- Ref: https://github.com/actions/runner-images/blob/main/images/macos/macos-12-Readme.md
+ Closes #12446
- Reviewed-by: Max Dymond
- Closes #9785
+- CI/quiche: use `3.1.4+quic` consistently in CI workflows
-- Makefile.m32: reintroduce CROSSPREFIX and -W -Wall [ci skip]
+ Closes #12447
- - Reintroduce `CROSSPREFIX`:
+Viktor Szakats (2 Dec 2023)
- If set, we add it to the `CC` and `AR` values, and to the _default_
- value of `RC`, which is `windres`. This allows to control each of
- these individidually, while also allowing to simplify configuration
- via `CROSSPREFIX`.
+- test1545: disable deprecation warnings
- This variable worked differently earlier. Hopefully this new solution
- hits a better compromise in usefulness/complexity/flexibility.
+ Fixes:
+ https://ci.appveyor.com/project/curlorg/curl/builds/48631551/job/bhx74e0i66yr
+ p6pk#L1205
- Follow-up to: aa970c4c08775afcd0c2853be89b0a6f02582d50
+ Same with details:
+ https://ci.appveyor.com/project/curlorg/curl/builds/48662893/job/ol8a78q9gmil
+ b6wt#L1263
+ ```
+ tests/libtest/lib1545.c:38:3: error: 'curl_formadd' is deprecated: since 7.56
+ .0. Use curl_mime_init() [-Werror=deprecated-declarations]
+ 38 | curl_formadd(&m_formpost, &lastptr, CURLFORM_COPYNAME, "file",
+ | ^~~~~~~~~~~~
+ [...]
+ ```
- - Enable warnings again:
+ Follow-up to 07a3cd83e0456ca17dfd8c3104af7cf45b7a1ff5 #12421
- This time with an option to override it via `CFLAGS`. Warnings are
- also enabled by default in CMake, `makefile.dj` and `makefile.amiga`
- builds (not in autotools though).
+ Fixes #12445
+ Closes #12444
- Follow-up to 10fbd8b4e3f83b967fd9ad9a41ab484c0e7e7ca3
+Daniel Stenberg (2 Dec 2023)
- Closes #9784
+- INSTALL: update list of ports and CPU archs
-- noproxy: silence unused variable warnings with no ipv6
+- symbols-in-versions: the CLOSEPOLICY options are deprecated
- Follow-up to 36474f1050c7f4117e3c8de6cc9217cfebfc717d
+ The were used with the CURLOPT_CLOSEPOLICY option, which *never* worked.
- Reviewed-by: Daniel Stenberg
- Closes #9782
+z2_ (1 Dec 2023)
-Daniel Stenberg (22 Oct 2022)
-- test644: verify --xattr (with redirect)
+- build: fix builds that disable protocols but not digest auth
-- tool_xattr: save the original URL, not the final redirected one
+ - Build base64 functions if digest auth is not disabled.
- Adjusted test 1621 accordingly.
+ Prior to this change if some protocols were disabled but not digest auth
+ then a build error would occur due to missing base64 functions.
- Reported-by: Viktor Szakats
- Fixes #9766
- Closes #9768
+ Fixes https://github.com/curl/curl/issues/12440
+ Closes https://github.com/curl/curl/pull/12442
-- docs: make sure libcurl opts examples pass in long arguments
+Michał Antoniak (1 Dec 2023)
- Reported-by: Sergey
- Fixes #9779
- Closes #9780
+- connect: reduce number of transportation providers
-Marc Hoersken (21 Oct 2022)
-- CI: fix AppVeyor job links only working for most recent build
+ Use only the ones necessary - the ones that are built-in. Saves a few
+ bytes in the resulting code.
- Ref: https://github.com/curl/curl/pull/9768#issuecomment-1286675916
- Reported-by: Daniel Stenberg
+ Closes #12438
- Follow up to #9769
+David Benjamin (1 Dec 2023)
-Viktor Szakats (21 Oct 2022)
-- noproxy: fix builds without AF_INET6
+- vtls: consistently use typedef names for OpenSSL structs
- Regression from 1e9a538e05c0107c54ef81d9de7cd0b27cd13309
+ The foo_st names don't appear in OpenSSL public API documentation. The
+ FOO typedefs are more common. This header was already referencing
+ SSL_CTX via <openssl/ssl.h>. There is a comment about avoiding
+ <openssl/x509v3.h>, but OpenSSL actually declares all the typedefs in
+ <openssl/ossl_typ.h>, which is already included by <openssl/ssl.h> (and
+ every other OpenSSL header), so just use that. Though I've included it
+ just to be explicit.
- Reviewed-by: Daniel Stenberg
+ (I'm also fairly sure including <openssl/ssl.h> already triggers the
+ Schannel conflicts anyway. The comment was probably just out of date.)
+
+ Closes #12439
+
+Lau (1 Dec 2023)
+
+- libcurl-security.3: fix typo
+
+ Fixed minimal typo.
+
+ Closes #12437
+
+Stefan Eissing (1 Dec 2023)
+
+- ngtcp2: fix races in stream handling
+
+ - fix cases where ngtcp2 invokes callbacks on streams that
+ nghttp3 has already forgotten. Ignore the NGHTTP3_ERR_STREAM_NOT_FOUND
+ in these cases as it is normal behaviour.
+
+ Closes #12435
+
+Emanuele Torre (1 Dec 2023)
+
+- tool_writeout_json: fix JSON encoding of non-ascii bytes
+
+ char variables if unspecified can be either signed or unsigned depending
+ on the platform according to the C standard; in most platforms, they are
+ signed.
+
+ This meant that the *i<32 waas always true for bytes with the top bit
+ set. So they were always getting encoded as \uXXXX, and then since they
+ were also signed negative, they were getting extended with 1s causing
+ '\xe2' to be expanded to \uffffffe2, for example:
+
+ $ curl --variable 'v=“' --expand-write-out '{{v:json}}\n' file:///dev/nul
+ l
+ \uffffffe2\uffffff80\uffffff9c
+
+ I fixed this bug by making the code use explicitly unsigned char*
+ variables instead of char* variables.
+
+ Test 268 verifies
- Closes #9778
+ Reported-by: iconoclasthero
+ Closes #12434
-Daniel Stenberg (21 Oct 2022)
-- noproxy: support proxies specified using cidr notation
+Stefan Eissing (1 Dec 2023)
- For both IPv4 and IPv6 addresses. Now also checks IPv6 addresses "correctly"
- and not with string comparisons.
+- cf-socket: TCP trace output local address used in connect
- Split out the noproxy checks and functionality into noproxy.c
+ Closes #12427
- Added unit test 1614 to verify checking functions.
+Jay Satiro (1 Dec 2023)
- Reported-by: Mathieu Carbonneaux
+- CURLINFO_PRETRANSFER_TIME_T.3: fix time explanation
- Fixes #9773
- Fixes #5745
- Closes #9775
+ - Change CURLINFO_PRETRANSFER_TIME_T explanation to say that it
+ includes protocol-specific instructions that trigger a transfer.
-- urlapi: remove two variable assigns
+ Prior to this change it explicitly said that it did not include those
+ instructions in the time, but that is incorrect.
- To please scan-build:
+ The change is a copy of the fixed explanation already in
+ CURLINFO_PRETRANSFER_TIME, fixed by ec8dcd7b.
- urlapi.c:1163:9: warning: Value stored to 'qlen' is never read
- qlen = Curl_dyn_len(&enc);
- ^ ~~~~~~~~~~~~~~~~~~
- urlapi.c:1164:9: warning: Value stored to 'query' is never read
- query = u->query = Curl_dyn_ptr(&enc);
- ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Reported-by: eeverettrbx@users.noreply.github.com
- Follow-up to 7d6cf06f571d57
+ Fixes https://github.com/curl/curl/issues/12431
+ Closes https://github.com/curl/curl/pull/12432
- Closes #9777
+Daniel Stenberg (30 Nov 2023)
-- [Jeremy Maitin-Shepard brought this change]
+- multi: during ratelimit multi_getsock should return no sockets
- cmake: improve usability of CMake build as a sub-project
+ ... as there is nothing to wait for then, it just waits. Otherwise, this
+ causes much more CPU work and updates than necessary during ratelimit
+ periods.
- - Renames `uninstall` -> `curl_uninstall`
- - Ensures all export rules are guarded by CURL_ENABLE_EXPORT_TARGET
+ Ref: https://curl.se/mail/lib-2023-11/0056.html
+ Closes #12430
- Closes #9638
+Dmitry Karpov (30 Nov 2023)
-- [Don J Olmstead brought this change]
+- transfer: abort pause send when connection is marked for closing
- easy_lock: check for HAVE_STDATOMIC_H as well
+ This handles cases of some bi-directional "upgrade" scenarios
+ (i.e. WebSockets) where sending is paused until some "upgrade" handshake
+ is completed, but server rejects the handshake and closes the
+ connection.
- The check for `HAVE_STDATOMIC_H` looks to see if the `stdatomic.h`
- header is present.
+ Closes #12428
- Closes #9755
+Daniel Stenberg (28 Nov 2023)
- RELEASE-NOTES: synced
-- [Brad Harder brought this change]
+- openssl: when a session-ID is reused, skip OCSP stapling
- CURLMOPT_PIPELINING.3: dedup manpage xref
+ Fixes #12399
+ Reported-by: Alexey Larikov
+ Closes #12418
- Closes #9776
+- test1545: test doing curl_formadd twice with missing file
-Marc Hoersken (20 Oct 2022)
-- CI: report AppVeyor build status for each job
+ Reproduces #12410
+ Verifies the fix
+ Closes #12421
- Also give each job on AppVeyor CI a human-readable name.
+- Curl_http_body: cleanup properly when Curl_getformdata errors
- This aims to make job and therefore build failures more visible.
+ Reported-by: yushicheng7788 on github
+ Based-on-work-by: yushicheng7788 on github
+ Fixes #12410
+ Closes #12421
- Reviewed-by: Marcel Raad
- Closes #9769
+- test1477: verify that libcurl-errors.3 and public headers are synced
-Viktor Szakats (20 Oct 2022)
-- amiga: set SIZEOF_CURL_OFF_T=8 by default [ci skip]
+ The script errorcodes.pl extracts all error codes from all headers and
+ checks that they are all documented, then checks that all documented
+ error codes are also specified in a header file.
- Reviewed-by: Daniel Stenberg
+ Closes #12424
- Closes #9771
+- libcurl-errors.3: sync with current public headers
-- connect: fix builds without AF_INET6
+ Closes #12424
- Regression from 2b309560c1e5d6ed5c0e542e6fdffa968b0521c9
+Stefan Eissing (28 Nov 2023)
- Reviewed-by: Daniel Stenberg
- Reviewed-by: Jay Satiro
+- test459: fix for parallel runs
- Closes #9770
+ - change warniing message to work better with varying filename
+ length.
+ - adapt test output check to new formatting
-Daniel Stenberg (20 Oct 2022)
-- test1105: adjust <data> to work with a hyper build
+ Follow-up to 97ccc4479f77ba3191c6
+ Closes #12423
- Closes #9767
+Daniel Stenberg (27 Nov 2023)
-- urlapi: fix parsing URL without slash with CURLU_URLENCODE
+- tool_cb_prg: make the carriage return fit for wide progress bars
- When CURLU_URLENCODE is set, the parser would mistreat the path
- component if the URL was specified without a slash like in
- http://local.test:80?-123
+ When the progress bar was made max width (256 columns), the fly()
+ function attempted to generate its output buffer too long so that the
+ trailing carriage return would not fit and then the output would show
+ wrongly. The fly function is called when the expected total transfer is
+ unknown, which could be one or more progress calls before the actual
+ progress meter get shown when the expected transfer size is provided.
- Extended test 1560 to reproduce and verify the fix.
+ This new take also replaces the msnprintf() call with a much simpler
+ memset() for speed.
- Reported-by: Trail of Bits
+ Reported-by: Tim Hill
+ Fixes #12407
+ Closes #12415
- Closes #9763
+- tool_parsecfg: make warning output propose double-quoting
-Marc Hoersken (19 Oct 2022)
-- tests: avoid CreateThread if _beginthreadex is available
+ When the config file parser detects a word that *probably* should be
+ quoted, mention double-quotes as a possible remedy.
- CreateThread is not threadsafe if mixed with CRT calls.
- _beginthreadex on the other hand can be mixed with CRT.
+ Test 459 verifies.
- Reviewed-by: Marcel Raad
- Closes #9705
+ Proposed-by: Jiehong on github
+ Fixes #12409
+ Closes #12412
-Jay Satiro (19 Oct 2022)
-- [Joel Depooter brought this change]
+Jay Satiro (26 Nov 2023)
- schannel: Don't reset recv/send function pointers on renegotiation
+- curl.rc: switch out the copyright symbol for plain ASCII
- These function pointers will have been set when the initial TLS
- handshake was completed. If they are unchanged, there is no need to set
- them again. If they have been changed, as is the case with HTTP/2, we
- don't want to override that change. That would result in the
- http22_recv/send functions being completely bypassed.
+ .. like we already do for libcurl.rc.
- Prior to this change a connection that uses Schannel with HTTP/2 would
- fail on renegotiation with error "Received HTTP/0.9 when not allowed".
+ libcurl.rc copyright symbol used to cause a "non-ascii 8-bit codepoint"
+ warning so it was switched to ascii.
- Fixes https://github.com/curl/curl/issues/9451
- Closes https://github.com/curl/curl/pull/9756
+ Ref: https://github.com/curl/curl/commit/1ca62bb5#commitcomment-133474972
-Viktor Szakats (18 Oct 2022)
-- hostip: guard PF_INET6 use
+ Suggested-by: Robert Southee
- Some platforms (e.g. Amiga OS) do not have `PF_INET6`. Adjust the code
- for these.
+ Closes https://github.com/curl/curl/pull/12403
- ```
- hostip.c: In function 'fetch_addr':
- hostip.c:308:12: error: 'PF_INET6' undeclared (first use in this function)
- pf = PF_INET6;
- ^~~~~~~~
- ```
+Daniel Stenberg (26 Nov 2023)
- Regression from 1902e8fc511078fb5e26fc2b907b4cce77e1240d
+- conncache: use the closure handle when disconnecting surplus connections
- Reviewed-by: Daniel Stenberg
+ Use the closure handle for disconnecting connection cache entries so
+ that anything that happens during the disconnect is not stored and
+ associated with the 'data' handle which already just finished a transfer
+ and it is important that details from the unrelated disconnect does not
+ taint meta-data in the data handle.
- Closes #9760
+ Like storing the response code.
-- amiga: do not hardcode openssl/zlib into the os config [ci skip]
+ This also adjust test 1506. Unfortunately it also removes a key part of
+ the test that verifies that a connection is closed since when this
+ output vanishes (because the closure handle is used), we don't know
+ exactly that the connection actually gets closed in this test...
- Enable them in `lib/makefile.amiga` and `src/makefile.amiga` instead.
+ Reported-by: ohyeaah on github
+ Fixes #12367
+ Closes #12405
- This allows builds without openssl and/or zlib. E.g. with the
- <https://github.com/bebbo/amiga-gcc> cross-compiler.
+- RELEASE-NOTES: synced
- Reviewed-by: Daniel Stenberg
+Stefan Eissing (24 Nov 2023)
- Closes #9762
+- quic: make eyeballers connect retries stop at weird replies
-- amigaos: add missing curl header [ci skip]
+ - when a connect immediately goes into DRAINING state, do
+ not attempt retries in the QUIC connection filter. Instead,
+ return CURLE_WEIRD_SERVER_REPLY
+ - When eyeballing, interpret CURLE_WEIRD_SERVER_REPLY as an
+ inconclusive answer. When all addresses have been attempted,
+ rewind the address list once on an inconclusive answer.
+ - refs #11832 where connects were retried indefinitely until
+ the overall timeout fired
- Without it, `CURLcode` and `CURLE_*` are undefined. `lib/hostip.h` and
- conditional local code need them.
+ Closes #12400
- Reviewed-by: Daniel Stenberg
+Daniel Stenberg (24 Nov 2023)
- Closes #9761
+- CI: verify libcurl function SYNPOSIS sections
-Daniel Stenberg (18 Oct 2022)
-- cmdline/docs: add a required 'multi' keyword for each option
+ With the .github/scripits/verify-synopsis.pl script
- The keyword specifies how option works when specified multiple times:
+ Closes #12402
- - single: the last provided value replaces the earlier ones
- - append: it supports being provided multiple times
- - boolean: on/off values
- - mutex: flag-like option that disable anoter flag
+- docs/libcurl: SYNSOPSIS cleanup
- The 'gen.pl' script then outputs the proper and unified language for
- each option's multi-use behavior in the generated man page.
+ - use the correct include file
+ - make sure they are declared as in the header file
+ - fix minor nroff syntax mistakes (missing .fi)
- The multi: header is requires in each .d file and will cause build error
- if missing or set to an unknown value.
+ These are verified by verify-synopsis.pl, which extracts the SYNPOSIS
+ code and runs it through gcc.
- Closes #9759
+ Closes #12402
-- CURLOPT_AUTOREFERER.3: highlight the privacy leak risk
+- sendf: fix comment typo
- Closes #9757
+- fopen: allocate the dir after fopen
-- mprintf: reject two kinds of precision for the same argument
+ Move the allocation of the directory name down to after the fopen() call
+ to allow that shortcut code path to avoid a superfluous malloc+free
+ cycle.
- An input like "%.*1$.9999d" would first use the precision taken as an
- argument *and* then the precision specified in the string, which is
- confusing and wrong. pass1 will now instead return error on this double
- use.
+ Follow-up to 73b65e94f35311
- Adjusted unit test 1398 to verify
+ Closes #12398
- Reported-by: Peter Goodman
+Stefan Eissing (24 Nov 2023)
- Closes #9754
+- transfer: cleanup done+excess handling
-- ftp: remove redundant if
+ - add `SingleRequest->download_done` as indicator that
+ all download bytes have been received
+ - remove `stop_reading` bool from readwrite functions
+ - move excess body handling into client download writer
- Reported-by: Trail of Bits
+ Closes #12371
- Closes #9753
+Daniel Stenberg (23 Nov 2023)
-- tool_operate: more transfer cleanup after parallel transfer fail
+- fopen: create new file using old file's mode
- In some circumstances when doing parallel transfers, the
- single_transfer_cleanup() would not be called and then 'inglob' could
- leak.
+ Because the function renames the temp file to the target name as a last
+ step, if the file was previously owned by a different user, not ORing
+ the old mode could otherwise end up creating a file that was no longer
+ readable by the original owner after save.
- Test 496 verifies
+ Reported-by: Loïc Yhuel
+ Fixes #12299
+ Closes #12395
- Reported-by: Trail of Bits
- Closes #9749
+- test1476: require proxy
-- mqtt: spell out CONNECT in comments
+ Follow-up from 323df4261c3542
- Instead of calling it 'CONN' in several comments, use the full and
- correct protocol packet name.
+ Closes #12394
- Suggested by Trail of Bits
+- fopen: create short(er) temporary file name
- Closes #9751
+ Only using random letters in the name plus a ".tmp" extension. Not by
+ appending characters to the final file name.
-- CURLOPT_POSTFIELDS.3: refer to CURLOPT_MIMEPOST
+ Reported-by: Maksymilian Arciemowicz
- Not the deprecated CURLOPT_HTTPPOST option.
+ Closes #12388
- Also added two see-alsos.
+Stefan Eissing (23 Nov 2023)
- Reported-by: Trail of Bits
- Closes #9752
+- tests: git ignore generated second-hsts.txt file
-- RELEASE-NOTES: synced
+ File is generated in test lib1900
-Jay Satiro (17 Oct 2022)
-- ngtcp2: Fix build errors due to changes in ngtcp2 library
+ Follow-up to 7cb03229d9e9c5
- ngtcp2/ngtcp2@b0d86f60 changed:
+ Closes #12393
- - ngtcp2_conn_get_max_udp_payload_size =>
- ngtcp2_conn_get_max_tx_udp_payload_size
+Viktor Szakats (23 Nov 2023)
- - ngtcp2_conn_get_path_max_udp_payload_size =>
- ngtcp2_conn_get_path_max_tx_udp_payload_size
+- openssl: enable `infof_certstack` for 1.1 and LibreSSL 3.6
- ngtcp2/ngtcp2@ec59b873 changed:
+ Lower the barrier to enable `infof_certstack()` from OpenSSL 3 to
+ OpenSSL 1.1.x, and LibreSSL 3.6 or upper.
- - 'early_data_rejected' member added to ng_callbacks.
+ With the caveat, that "group name" and "type name" are missing from
+ the log output with these TLS backends.
- Assisted-by: Daniel Stenberg
- Reported-by: jurisuk@users.noreply.github.com
+ Follow-up to b6e6d4ff8f253c8b8055bab9d4d6a10f9be109f3 #12030
- Fixes https://github.com/curl/curl/issues/9747
- Closes https://github.com/curl/curl/pull/9748
+ Reviewed-by: Daniel Stenberg
+ Closes #12385
+
+Daniel Stenberg (23 Nov 2023)
-Daniel Stenberg (16 Oct 2022)
-- curl_path: return error if given a NULL homedir
+- urldata: fix typo in comment
- Closes #9740
+- CI: codespell
-- libssh: if sftp_init fails, don't get the sftp error code
+ The list of words to ignore is in the file
+ .github/scripts/codespell-ignore.txt
- This flow extracted the wrong code (sftp code instead of ssh code), and
- the code is sometimes (erroneously) returned as zero anyway, so skip
- getting it and set a generic error.
+ Closes #12390
- Reported-by: David McLaughlin
- Fixes #9737
- Closes #9740
+- lib: fix comment typos
-- mqtt: return error for too long topic
+ Five separate ones, found by codespell
- Closes #9744
+ Closes #12390
-- [Rickard Hallerbäck brought this change]
+- test1476: verify cookie PSL mixed case
- tool_paramhlp: make the max argument a 'double'
+- cookie: lowercase the domain names before PSL checks
- To fix compiler warnings "Implicit conversion from 'long' to 'double'
- may lose precision"
+ Reported-by: Harry Sintonen
- Closes #9700
+ Closes #12387
+
+Viktor Szakats (23 Nov 2023)
+
+- openssl: fix building with v3 `no-deprecated` + add CI test
+
+ - build quictls with `no-deprecated` in CI to have test coverage for
+ this OpenSSL 3 configuration.
+
+ - don't call `OpenSSL_add_all_algorithms()`, `OpenSSL_add_all_digests()`.
+ The caller code is meant for OpenSSL 3, while these two functions were
+ only necessary before OpenSSL 1.1.0. They are missing from OpenSSL 3
+ if built with option `no-deprecated`, causing build errors:
+ ```
+ vtls/openssl.c:4097:3: error: call to undeclared function 'OpenSSL_add_all_
+ algorithms'; ISO C99 and later do not support implicit function declaration
+ s [-Wimplicit-function-declaration]
+ vtls/openssl.c:4098:3: error: call to undeclared function 'OpenSSL_add_all_
+ digests'; ISO C99 and later do not support implicit function declarations [
+ -Wimplicit-function-declaration]
+ ```
+ Ref: https://ci.appveyor.com/project/curlorg/curl-for-win/builds/48587418?f
+ ullLog=true#L7667
+
+ Regression from b6e6d4ff8f253c8b8055bab9d4d6a10f9be109f3 #12030
+ Bug: https://github.com/curl/curl/issues/12380#issuecomment-1822944669
+ Reviewed-by: Alex Bozarth
+
+ - vquic/curl_ngtcp2: fix using `SSL_get_peer_certificate` with
+ `no-deprecated` quictls 3 builds.
+ Do it by moving an existing solution for this from `vtls/openssl.c`
+ to `vtls/openssl.h` and adjusting caller code.
+ ```
+ vquic/curl_ngtcp2.c:1950:19: error: implicit declaration of function 'SSL_g
+ et_peer_certificate'; did you mean 'SSL_get1_peer_certificate'? [-Wimplicit
+ -function-declaration]
+ ```
+ Ref: https://github.com/curl/curl/actions/runs/6960723097/job/18940818625#s
+ tep:24:1178
+
+ - curl_ntlm_core: fix `-Wunused-parameter`, `-Wunused-variable` and
+ `-Wunused-function` when trying to build curl with NTLM enabled but
+ without the necessary TLS backend (with DES) support.
+
+ Closes #12384
+
+- curl.h: delete Symbian OS references
+
+ curl deprecated Symbian OS in 3d64031fa7a80ac4ae3fd09a5939196268b92f81
+ via #5989. Delete references to it from public headers, because there
+ is no fresh release to use those headers with.
+
+ Reviewed-by: Dan Fandrich
+ Reviewed-by: Jay Satiro
+ Closes #12378
-Marc Hoersken (15 Oct 2022)
-- [Philip Heiduck brought this change]
+- windows: use built-in `_WIN32` macro to detect Windows
- cirrus-ci: add more macOS builds with m1 based on x86_64 builds
+ Windows compilers define `_WIN32` automatically. Windows SDK headers
+ or build env defines `WIN32`, or we have to take care of it. The
+ agreement seems to be that `_WIN32` is the preferred practice here.
+ Make the source code rely on that to detect we're building for Windows.
- Also refactor macOS builds to use task matrix.
+ Public `curl.h` was using `WIN32`, `__WIN32__` and `CURL_WIN32` for
+ Windows detection, next to the official `_WIN32`. After this patch it
+ only uses `_WIN32` for this. Also, make it stop defining `CURL_WIN32`.
- Assisted-by: Marc Hörsken
- Closes #9565
+ There is a slight chance these break compatibility with Windows
+ compilers that fail to define `_WIN32`. I'm not aware of any obsolete
+ or modern compiler affected, but in case there is one, one possible
+ solution is to define this macro manually.
-Viktor Szakats (14 Oct 2022)
-- cmake: set HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID on Windows
+ grepping for `WIN32` remains useful to discover Windows-specific code.
- `lib/config-win32.h` enables this configuration option unconditionally.
- Make it apply to CMake builds as well.
+ Also:
- While here, delete a broken check for
- `HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID` from `CMakeLists.txt`. This came with
- the initial commit [1], but did not include the actual verification code
- inside `CMake/CurlTests.c`, so it always failed. A later commit [2]
- added a second test, for non-Windows platforms.
+ - extend `checksrc` to ensure we're not using `WIN32` anymore.
- Enabling this flag causes test 1056 to fail with CMake builds, as they
- do with autotools builds. Let's apply the same solution and ignore the
- results here as well.
+ - apply minor formatting here and there.
- [1] 4c5307b45655ba75ab066564afdc0c111a8b9291
- [2] aec7c5a87c8482b6ddffa352d7d220698652262e
+ - delete unnecessary checks for `!MSDOS` when `_WIN32` is present.
+ Co-authored-by: Jay Satiro
Reviewed-by: Daniel Stenberg
- Assisted-by: Marcel Raad
- Closes #9726
+ Closes #12376
+
+Stefan Eissing (22 Nov 2023)
-- cmake: set HAVE_GETADDRINFO_THREADSAFE on Windows
+- url: ConnectionExists revisited
- autotools enables this configuration option unconditionally for Windows
- [^1]. Do the same in CMake.
+ - have common pattern of `if not match, continue`
+ - revert pages long if()s to return early
+ - move dead connection check to later since it may
+ be relatively expensive
+ - check multiuse also when NOT building with NGHTTP2
+ - for MULTIUSE bundles, verify that the inspected
+ connection indeed supports multiplexing when in use
+ (bundles may contain a mix of connection, afaict)
- The above will make this work for all reasonably recent environments.
- The logic present in `lib/config-win32.h` [^2] has the following
- exceptions which we did not cover in this CMake update:
+ Closes #12373
- - Builds targeting Windows 2000 and earlier
- - MS Visual C++ 5.0 (1997) and earlier
+Daniel Stenberg (22 Nov 2023)
- Also make sure to disable this feature when `HAVE_GETADDRINFO` isn't
- set, to avoid a broken build. We might want to handle that in the C
- sources in a future commit.
+- CURLMOPT_MAX_CONCURRENT_STREAMS: make sure the set value is within range
- [^1]: https://github.com/curl/curl/blob/68fa9bf3f5d7b4fcbb57619f70cb4aabb79a51f6/m4/curl-functions.m4#L2067-L2070
+ ... or use the default value.
- [^2]: https://github.com/curl/curl/blob/68fa9bf3f5d7b4fcbb57619f70cb4aabb79a51f6/lib/config-win32.h#L511-L528
+ Also clarify the documentation language somewhat.
- Closes #9727
+ Closes #12382
-- cmake: sync HAVE_SIGNAL detection with autotools
+- urldata: make maxconnects a 32 bit value
- `HAVE_SIGNAL` means the availability of the `signal()` function in
- autotools, while in CMake it meant the availability of that function
- _and_ the symbol `SIGALRM`.
+ "2^32 idle connections ought to be enough for anybody"
- The latter is not available on Windows, but the function is, which means
- on Windows, autotools did define `HAVE_SIGNAL`, but CMake did not,
- introducing a slight difference into the binaries.
+ Closes #12375
- This patch syncs CMake behaviour with autotools to look for the function
- only.
+- FEATURES: update the URL phrasing
- The logic came with the initial commit adding CMake support to curl, so
- the commit history doesn't reveal the reason behind it. In any case,
- it's best to check the existence of `SIGALRM` directly in the source
- before use. For now, curl builds fine with `HAVE_SIGNAL` enabled and
- `SIGALRM` missing.
+ The URL is length limited since a while back so "no limit" simply is not
+ true anymore. Mention the URL RFC standard used instead.
- Follow-up to 68fa9bf3f5d7b4fcbb57619f70cb4aabb79a51f6
+ Closes #12383
+
+- wolfssh: remove redundant static prototypes
+
+ vssh/wolfssh.c:346:18: error: redundant redeclaration of ‘wscp_recv’ [-We
+ rror=redundant-decls]
+
+ Closes #12381
+
+- setopt: remove superfluous use of ternary expressions
+
+ Closes #12374
+
+- mime: store "form escape" as a single bit
+
+ Closes #12374
+
+- setopt: check CURLOPT_TFTP_BLKSIZE range on set
+
+ ... instead of later when the transfer is about to happen.
+
+ Closes #12374
+
+Viktor Szakats (21 Nov 2023)
+
+- build: add more picky warnings and fix them
- Closes #9725
+ Enable more picky compiler warnings. I've found these options in the
+ nghttp3 project when implementing the CMake quick picky warning
+ functionality for it [1].
-- cmake: delete duplicate HAVE_GETADDRINFO test
+ `-Wunused-macros` was too noisy to keep around, but fixed a few issues
+ it revealed while testing.
- A custom `HAVE_GETADDRINFO` check came with the initial CMake commit
- [1]. A later commit [2] added a standard check for it as well. The
- standard check run before the custom one, so CMake ignored the latter.
+ - autotools: reflect the more precisely-versioned clang warnings.
+ Follow-up to 033f8e2a08eb1d3102f08c4d8c8e85470f8b460e #12324
+ - autotools: sync between clang and gcc the way we set `no-multichar`.
+ - autotools: avoid setting `-Wstrict-aliasing=3` twice.
+ - autotools: disable `-Wmissing-noreturn` for MSYS gcc targets [2].
+ It triggers in libtool-generated stub code.
- The custom check was also non-portable, so this patch deletes it in
- favor of the standard check.
+ - lib/timeval: delete a redundant `!MSDOS` guard from a `WIN32` branch.
- [1] 4c5307b45655ba75ab066564afdc0c111a8b9291
- [2] aec7c5a87c8482b6ddffa352d7d220698652262e
+ - lib/curl_setup.h: delete duplicate declaration for `fileno`.
+ Added in initial commit ae1912cb0d494b48d514d937826c9fe83ec96c4d
+ (1999-12-29). This suggests this may not be needed anymore, but if
+ it does, we may restore this for those specific (non-Windows) systems.
+ - lib: delete unused macro `FTP_BUFFER_ALLOCSIZE` since
+ c1d6fe2aaa5a26e49a69a4f2495b3cc7a24d9394.
+ - lib: delete unused macro `isxdigit_ascii` since
+ f65f750742068f579f4ee6d8539ed9d5f0afcb85.
+ - lib/mqtt: delete unused macro `MQTT_HEADER_LEN`.
+ - lib/multi: delete unused macro `SH_READ`/`SH_WRITE`.
+ - lib/hostip: add `noreturn` function attribute via new `CURL_NORETURN`
+ macro.
+ - lib/mprintf: delete duplicate declaration for `Curl_dyn_vprintf`.
+ - lib/rand: fix `-Wunreachable-code` and related fallouts [3].
+ - lib/setopt: fix `-Wunreachable-code-break`.
+ - lib/system_win32 and lib/timeval: fix double declarations for
+ `Curl_freq` and `Curl_isVistaOrGreater` in CMake UNITY mode [4].
+ - lib/warnless: fix double declarations in CMake UNITY mode [5].
+ This was due to force-disabling the header guard of `warnless.h` to
+ to reapply it to source code coming after `warnless.c` in UNITY
+ builds. This reapplied declarations too, causing the warnings.
+ Solved by adding a header guard for the lines that actually need
+ to be reapplied.
+ - lib/vauth/digest: fix `-Wunreachable-code-break` [6].
+ - lib/vssh/libssh2: fix `-Wunreachable-code-break` and delete redundant
+ block.
+ - lib/vtls/sectransp: fix `-Wunreachable-code-break` [7].
+ - lib/vtls/sectransp: suppress `-Wunreachable-code`.
+ Detected in `else` branches of dynamic feature checks, with results
+ known at compile-time, e.g.
+ ```c
+ if(SecCertificateCopySubjectSummary) /* -> true */
+ ```
+ Likely fixable as a separate micro-project, but given SecureTransport
+ is deprecated anyway, let's just silence these locally.
+ - src/tool_help: delete duplicate declaration for `helptext`.
+ - src/tool_xattr: fix `-Wunreachable-code`.
+ - tests: delete duplicate declaration for `unitfail` [8].
+ - tests: delete duplicate declaration for `strncasecompare`.
+ - tests/libtest: delete duplicate declaration for `gethostname`.
+ Originally added in 687df5c8c39c370a59999b9afc0917d808d978b7
+ (2010-08-02).
+ Got complicated later: c49e9683b85ba9d12cbb6eebc4ab2c8dba68fbdc
+ If there are still systems around with warnings, we may restore the
+ prototype, but limited for those systems.
+ - tests/lib2305: delete duplicate declaration for
+ `libtest_debug_config`.
+ - tests/h2-download: fix `-Wunreachable-code-break`.
+
+ [1] https://github.com/ngtcp2/nghttp3/blob/a70edb08e954d690e8fb2c1df999b5a056
+ f8bf9f/cmake/PickyWarningsC.cmake
+ [2] https://ci.appveyor.com/project/curlorg/curl/builds/48553586/job/3qkgjaui
+ qla5fj45?fullLog=true#L1675
+ [3] https://github.com/curl/curl/actions/runs/6880886309/job/18716044703?pr=1
+ 2331#step:7:72
+ https://github.com/curl/curl/actions/runs/6883016087/job/18722707368?pr=1
+ 2331#step:7:109
+ [4] https://ci.appveyor.com/project/curlorg/curl/builds/48555101/job/9g15qkrr
+ iklpf1ut#L204
+ [5] https://ci.appveyor.com/project/curlorg/curl/builds/48555101/job/9g15qkrr
+ iklpf1ut#L218
+ [6] https://github.com/curl/curl/actions/runs/6880886309/job/18716042927?pr=1
+ 2331#step:7:290
+ [7] https://github.com/curl/curl/actions/runs/6891484996/job/18746659406?pr=1
+ 2331#step:9:1193
+ [8] https://github.com/curl/curl/actions/runs/6882803986/job/18722082562?pr=1
+ 2331#step:33:1870
+
+ Closes #12331
+
+Daniel Stenberg (21 Nov 2023)
+
+- transfer: avoid unreachable expression
+
+ If curl_off_t and size_t have the same size (which is common on modern
+ 64 bit systems), a condition cannot occur which Coverity pointed
+ out. Avoid the warning by having the code conditionally only used if
+ curl_off_t actually is larger.
+
+ Follow-up to 1cd2f0072fa482e25baa2
+
+ Closes #12370
+
+Stefan Eissing (21 Nov 2023)
+
+- transfer: readwrite improvements
+
+ - changed header/chunk/handler->readwrite prototypes to accept `buf`,
+ `blen` and a `pconsumed` pointer. They now get the buffer to work on
+ and report back how many bytes they consumed
+ - eliminated `k->str` in SingleRequest
+ - improved excess data handling to properly calculate with any body data
+ left in the headerb buffer
+ - eliminated `k->badheader` enum to only be a bool
+
+ Closes #12283
+
+Daniel Stenberg (21 Nov 2023)
- Closes #9731
+- RELEASE-NOTES: synced
-Daniel Stenberg (14 Oct 2022)
-- tool_formparse: unroll the NULL_CHECK and CONST_FREE macros
+Jiří Hruška (21 Nov 2023)
- To make the code read more obvious
+- transfer: avoid calling the read callback again after EOF
- Assisted-by: Jay Satiro
+ Regression since 7f43f3dc5994d01b12 (7.84.0)
- Closes #9710
+ Bug: https://curl.se/mail/lib-2023-11/0017.html
-- [Christopher Sauer brought this change]
+ Closes #12363
- docs/INSTALL: update Android Instructions for newer NDKs
+Daniel Stenberg (21 Nov 2023)
- Closes #9732
+- doh: provide better return code for responses w/o addresses
-- markdown-uppercase: ignore quoted sections
+ Previously it was wrongly returning CURLE_OUT_OF_MEMORY when the
+ response did not contain any addresses. Now it more accurately returns
+ CURLE_COULDNT_RESOLVE_HOST.
- Sections within the markdown ~~~ or ``` are now ignored.
+ Reported-by: lRoccoon on github
- Closes #9733
+ Fixes #12365
+ Closes #12366
-- RELEASE-NOTES: synced
+Stefan Eissing (21 Nov 2023)
-- test8: update as cookies no longer can have "embedded" TABs in content
+- HTTP/2, HTTP/3: handle detach of onoing transfers
-- test1105: extend to verify TAB in name/content discarding cookies
+ - refs #12356 where a UAF is reported when closing a connection
+ with a stream whose easy handle was cleaned up already
+ - handle DETACH events same as DONE events in h2/h3 filters
-- cookie: reject cookie names or content with TAB characters
+ Fixes #12356
+ Reported-by: Paweł Wegner
+ Closes #12364
- TABs in name and content seem allowed by RFC 6265: "the algorithm strips
- leading and trailing whitespace from the cookie name and value (but
- maintains internal whitespace)"
+Viktor Szakats (20 Nov 2023)
- Cookies with TABs in the names are rejected by Firefox and Chrome.
+- autotools: stop setting `-std=gnu89` with `--enable-warnings`
- TABs in content are stripped out by Firefox, while Chrome discards the
- whole cookie.
+ Do not alter the C standard when building with `--enable-warnings` when
+ building with gcc.
- TABs in cookies also cause issues in saved netscape cookie files.
+ On one hand this alters warning results compared to a default build.
+ On the other, it may produce different binaries, which is unexpected.
- Reported-by: Trail of Bits
+ Also fix new warnings that appeared after removing `-std=gnu89`:
- URL: https://curl.se/mail/lib-2022-10/0032.html
- URL: https://github.com/httpwg/http-extensions/issues/2262
+ - include: fix public curl headers to use the correct printf mask for
+ `CURL_FORMAT_CURL_OFF_T` and `CURL_FORMAT_CURL_OFF_TU` with mingw-w64
+ and Visual Studio 2013 and newer. This fixes the printf mask warnings
+ in examples and tests. E.g. [1]
- Closes #9659
+ - conncache: fix printf format string [2].
-- curl/add_parallel_transfers: better error handling
+ - http2: fix potential null pointer dereference [3].
+ (seen on Slackware with gcc 11.)
- 1 - consider the transfer handled at once when in the function, to avoid
- the same list entry to get added more than once in rare error
- situations
+ - libssh: fix printf format string in SFTP code [4].
+ Also make MSVC builds compatible with old CRT versions.
- 2 - set the ERRORBUFFER for the handle first after it has been added
- successfully
+ - libssh2: fix printf format string in SFTP code for MSVC.
+ Applying the same fix as for libssh above.
- Reported-by: Trail of Bits
+ - unit1395: fix `argument is null` and related issues [5]:
+ - stop calling `strcmp()` with NULL to avoid undefined behaviour.
+ - fix checking results if some of them were NULL.
+ - do not pass NULL to printf `%s`.
- Closes #9729
+ - ci: keep a build job with `-std=gnu89` to continue testing for
+ C89-compliance. We can apply this to other gcc jobs as needed.
+ Ref: b23ce2cee7329bbf425f18b49973b7a5f23dfcb4 (2022-09-23) #9542
-- netrc: remove the two 'changed' arguments
+ [1] https://dev.azure.com/daniel0244/curl/_build/results?buildId=18581&view=l
+ ogs&jobId=ccf9cc6d-2ef1-5cf2-2c09-30f0c14f923b
+ [2] https://github.com/curl/curl/actions/runs/6896854263/job/18763831142?pr=1
+ 2346#step:6:67
+ [3] https://github.com/curl/curl/actions/runs/6896854253/job/18763839238?pr=1
+ 2346#step:30:214
+ [4] https://github.com/curl/curl/actions/runs/6896854253/job/18763838007?pr=1
+ 2346#step:29:895
+ [5] https://github.com/curl/curl/actions/runs/6896854253/job/18763836775?pr=1
+ 2346#step:33:1689
- As no user of these functions used the returned content.
+ Closes #12346
-- test495: verify URL encoded user name + netrc-optional
+- autotools: fix/improve gcc and Apple clang version detection
- Reproduced issue #9709
+ - Before this patch we expected `n.n` `-dumpversion` output, but Ubuntu
+ may return `n-win32` (also with `-dumpfullversion`). Causing these
+ errors and failing to enable picky warnings:
+ ```
+ ../configure: line 23845: test: : integer expression expected
+ ```
+ Ref: https://github.com/libssh2/libssh2/actions/runs/6263453828/job/1700789
+ 3718#step:5:143
-- netrc: use the URL-decoded user
+ Fix that by stripping any dash-suffix and handling a dotless (major-only)
+ version number by assuming `.0` in that case.
- When the user name is provided in the URL it is URL encoded there, but
- when used for authentication the encoded version should be used.
+ `9.3-posix`, `9.3-win32`, `6`, `9.3.0`, `11`, `11.2`, `11.2.0`
+ Ref: https://github.com/mamedev/mame/pull/9767
- Regression introduced after 7.83.0
+ - fix Apple clang version detection for releases between
+ 'Apple LLVM version 7.3.0' and 'Apple LLVM version 10.0.1' where the
+ version was under-detected as 3.7 llvm/clang equivalent.
- Reported-by: Jonas Haag
- Fixes #9709
- Closes #9715
+ - fix Apple clang version detection for 'Apple clang version 11.0.0'
+ and newer where the Apple clang version was detected, instead of its
+ llvm/clang equivalent.
-- [Shaun Mirani brought this change]
+ - display detected clang/gcc/icc compiler version.
- url: allow non-HTTPS HSTS-matching for debug builds
+ Via libssh2:
+ - https://github.com/libssh2/libssh2/commit/00a3b88c51cdb407fbbb347a2e38c5c7d
+ 89875ad
+ https://github.com/libssh2/libssh2/pull/1187
+ - https://github.com/libssh2/libssh2/commit/89ccc83c7da73e7ca3a112e3500081319
+ 42b592e
+ https://github.com/libssh2/libssh2/pull/1232
- Closes #9728
+ Closes #12362
-- test1275: remove the check of stderr
+- autotools: delete LCC compiler support bits
- To avoid the mysterious test failures on Windows, instead rely on the
- error code returned on failure.
+ Follow-up to fd7ef00f4305a2919e6950def1cf83d0110a4acd #12222
- Fixes #9716
- Closes #9723
+ Closes #12357
-Viktor Szakats (13 Oct 2022)
-- lib: set more flags in config-win32.h
+- cmake: add test for `DISABLE` options, add `CURL_DISABLE_HEADERS_API`
- The goal is to add any flag that affect the created binary, to get in
- sync with the ones built with CMake and autotools.
+ - tests: verify CMake `DISABLE` options.
- I took these flags from curl-for-win [0], where they've been tested with
- mingw-w64 and proven to work well.
+ Make an exception for 2 CMake-only ones, and one more that's
+ using a different naming scheme, also in autotools and source.
- This patch brings them to curl as follows:
+ - cmake: add support for `CURL_DISABLE_HEADERS_API`.
- - Enable unconditionally those force-enabled via
- `CMake/WindowsCache.cmake`:
+ Suggested-by: Daniel Stenberg
+ Ref: https://github.com/curl/curl/pull/12345#pullrequestreview-1736238641
+
+ Closes #12353
- - `HAVE_SETJMP_H`
- - `HAVE_STRING_H`
- - `HAVE_SIGNAL` (CMake equivalent is `HAVE_SIGNAL_FUNC`)
+Jacob Hoffman-Andrews (20 Nov 2023)
- - Expand existing guards with mingw-w64:
+- hyper: temporarily remove HTTP/2 support
- - `HAVE_STDBOOL_H`
- - `HAVE_BOOL_T`
+ The current design of the Hyper integration requires rebuilding the
+ Hyper clientconn for each request. However, building the clientconn
+ requires resending the HTTP/2 connection preface, which is incorrect
+ from a protocol perspective. That in turn causes servers to send GOAWAY
+ frames, effectively degrading performance to "no connection reuse" in
+ the best case. It may also be triggering some bugs where requests get
+ dropped entirely and reconnects take too long.
- - Enable Win32 API functions for Windows Vista and later:
+ This doesn't rule out HTTP/2 support with Hyper, but it may take a
+ redesign of the Hyper integration in order to make things work.
- - `HAVE_INET_NTOP`
- - `HAVE_INET_PTON`
+ Closes #12191
- - Set sizes, if not already set:
+Jay Satiro (20 Nov 2023)
- - `SIZEOF_OFF_T = 8`
- - `_FILE_OFFSET_BITS = 64` when `USE_WIN32_LARGE_FILES` is set,
- and using mingw-w64.
+- schannel: fix unused variable warning
- - Add the remaining for mingw-w64 only. Feel free to expand as desired:
+ Bug: https://github.com/curl/curl/pull/12349#issuecomment-1818000846
+ Reported-by: Viktor Szakats
- - `HAVE_LIBGEN_H`
- - `HAVE_FTRUNCATE`
- - `HAVE_BASENAME`
- - `HAVE_STRTOK_R`
+ Closes https://github.com/curl/curl/pull/12361
- Future TODO:
+Daniel Stenberg (19 Nov 2023)
- - `HAVE_SIGNAL` has a different meaning in CMake. It's enabled when both
- the `signal()` function and the `SIGALRM` macro are found. In
- autotools and this header, it means the function only. For the
- function alone, CMake uses `HAVE_SIGNAL_FUNC`.
+- url: find scheme with a "perfect hash"
- [0] https://github.com/curl/curl-for-win/blob/c9b9a5f273c94c73d2b565ee892c4dff0ca97a8c/curl-m32.sh#L53-L58
+ Instead of a loop to scan over the potentially 30+ scheme names, this
+ uses a "perfect hash" table. This works fine because the set of schemes
+ is known and cannot change in a build. The hash algorithm and table size
+ is made to only make a single scheme index per table entry.
+
+ The perfect hash is generated by a separate tool (scripts/schemetable.c)
+
+ Closes #12347
+
+- scripts: add schemetable.c
+
+ This tool generates a scheme-matching table.
+
+ It iterates over a number of different initial and shift values in order
+ to find the hash algorithm that needs the smallest possible table.
+
+ The generated hash function, table and table size then needs to be used
+ by the url.c:Curl_getn_scheme_handler() function.
+
+Stefan Eissing (19 Nov 2023)
+
+- vtls/vquic, keep peer name information together
+
+ - add `struct ssl_peer` to keep hostname, dispname and sni
+ for a filter
+ - allocate `sni` for use in VTLS backend
+ - eliminate `Curl_ssl_snihost()` and its use of the download buffer
+ - use ssl_peer in SSL and QUIC filters
+
+ Closes #12349
+
+Viktor Szakats (18 Nov 2023)
+
+- build: always revert `#pragma GCC diagnostic` after use
+
+ Before this patch some source files were overriding gcc warning options,
+ but without restoring them at the end of the file. In CMake UNITY builds
+ these options spilled over to the remainder of the source code,
+ effecitvely disabling them for a larger portion of the codebase than
+ intended.
+
+ `#pragma clang diagnostic` didn't have such issue in the codebase.
+
+ Reviewed-by: Marcel Raad
+ Closes #12352
+
+- tidy-up: casing typos, delete unused Windows version aliases
+
+ - cmake: fix casing of `UnixSockets` to match the rest of the codebase.
+
+ - curl-compilers.m4: fix casing in a comment.
+
+ - setup-win32: delete unused Windows version constant aliases.
+
+ Reviewed-by: Marcel Raad
+ Closes #12351
+
+- keylog: disable if unused
+
+ Fully disable keylog code if there is no TLS or QUIC subsystem using it.
+
+ Closes #12350
+
+- cmake: add `CURL_DISABLE_BINDLOCAL` option
+
+ To match similar autotools option.
+
+ Default is `ON`.
Reviewed-by: Daniel Stenberg
+ Closes #12345
+
+- url: fix `-Wzero-length-array` with no protocols
- Closes #9712
+ Fixes:
+ ```
+ ./lib/url.c:178:56: warning: use of an empty initializer is a C2x extension [
+ -Wc2x-extensions]
+ 178 | static const struct Curl_handler * const protocols[] = {
+ | ^
+ ./lib/url.c:178:56: warning: zero size arrays are an extension [-Wzero-length
+ -array]
+ ```
-Daniel Stenberg (13 Oct 2022)
-- tests: add tests/markdown-uppercase.pl to dist tarball
+ Closes #12344
- Follow-up to aafb06c5928183d
+- url: fix builds with `CURL_DISABLE_HTTP`
- Closes #9722
+ Fixes:
+ ```
+ ./lib/url.c:456:35: error: no member named 'formp' in 'struct UrlState'
+ 456 | Curl_mime_cleanpart(data->state.formp);
+ | ~~~~~~~~~~~ ^
+ ```
-- tool_paramhelp: asserts verify maximum sizes for string loading
+ Regression from 74b87a8af13a155c659227f5acfa78243a8b2aa6 #11682
- The two defines MAX_FILE2MEMORY and MAX_FILE2STRING define the largest
- strings accepted when loading files into memory, but as the size is
- later used as input to functions that take the size as 'int' as
- argument, the sizes must not be larger than INT_MAX.
+ Closes #12343
- These two new assert()s make the code error out if someone would bump
- the sizes without this consideration.
+- http: fix `-Wunused-parameter` with no auth and no proxy
- Reported-by Trail of Bits
+ ```
+ lib/http.c:734:26: warning: unused parameter 'proxy' [-Wunused-parameter]
+ bool proxy)
+ ^
+ ```
- Closes #9719
+ Reviewed-by: Marcel Raad
+ Closes #12338
-- http: try parsing Retry-After: as a number first
+Daniel Stenberg (16 Nov 2023)
- Since the date parser allows YYYYMMDD as a date format (due to it being
- a bit too generic for parsing this particular header), a large integer
- number could wrongly match that pattern and cause the parser to generate
- a wrong value.
+- TODO: Some TLS options are not offered for HTTPS proxies
- No date format accepted for this header starts with a decimal number, so
- by reversing the check and trying a number first we can deduct that if
- that works, it was not a date.
+ Closes #12286
+ Closes #12342
- Reported-by Trail of Bits
+- RELEASE-NOTES: synced
- Closes #9718
+- duphandle: make dupset() not return with pointers to old alloced data
-- [Patrick Monnerat brought this change]
+ As the blob pointers are to be duplicated, the function must not return
+ mid-function with lingering pointers to the old handle's allocated data,
+ as that would lead to double-free in OOM situations.
- doc: fix deprecation versions inconsistencies
+ Make sure to clear all destination pointers first to avoid this risk.
- Ref: https://curl.se/mail/lib-2022-10/0026.html
+ Closes #12337
- Closes #9711
+Viktor Szakats (16 Nov 2023)
-- http_aws_sigv4: fix strlen() check
+- http: fix `-Wunused-variable` compiler warning
- The check was off-by-one leading to buffer overflow.
+ Fix compiler warnings in builds with disabled auths, NTLM and SPNEGO.
- Follow-up to 29c4aa00a16872
+ E.g. with `CURL_DISABLE_BASIC_AUTH` + `CURL_DISABLE_BEARER_AUTH` +
+ `CURL_DISABLE_DIGEST_AUTH` + `CURL_DISABLE_NEGOTIATE_AUTH` +
+ `CURL_DISABLE_NTLM` on non-Windows.
- Detected by OSS-Fuzz
+ ```
+ ./curl/lib/http.c:737:12: warning: unused variable 'result' [-Wunused-variabl
+ e]
+ CURLcode result = CURLE_OK;
+ ^
+ ./curl/lib/http.c:995:18: warning: variable 'availp' set but not used [-Wunus
+ ed-but-set-variable]
+ unsigned long *availp;
+ ^
+ ./curl/lib/http.c:996:16: warning: variable 'authp' set but not used [-Wunuse
+ d-but-set-variable]
+ struct auth *authp;
+ ^
+ ```
- Closes #9714
+ Regression from e92edfbef64448ef461117769881f3ed776dec4e #11490
-- curl/main_checkfds: check the fcntl return code better
+ Fixes #12228
+ Closes #12335
- fcntl() can (in theory) return a non-zero number for success, so a
- better test for error is checking for -1 explicitly.
+Jay Satiro (16 Nov 2023)
- Follow-up to 41e1b30ea1b77e9ff
+- tool: support bold headers in Windows
- Mentioned-by: Dominik Klemba
+ - If virtual terminal processing is enabled in Windows then use ANSI
+ escape codes Esc[1m and Esc[22m to turn bold on and off.
- Closes #9708
+ Suggested-by: Gisle Vanem
-Viktor Szakats (12 Oct 2022)
-- tidy-up: delete unused HAVE_STRUCT_POLLFD
+ Ref: https://github.com/curl/curl/discussions/11770
- It was only defined in `lib/config-win32.h`, when building for Vista.
+ Closes https://github.com/curl/curl/pull/12321
- It was only used in `select.h`, in a condition that also included a
- check for `POLLIN` which is a superior choice for this detection and
- which was already used by cmake and autotools builds.
+Viktor Szakats (15 Nov 2023)
- Delete both instances of this macro.
+- build: fix libssh2 + `CURL_DISABLE_DIGEST_AUTH` + `CURL_DISABLE_AWS`
- Closes #9707
+ Builds with libssh2 + `-DCURL_DISABLE_DIGEST_AUTH=ON` +
+ `-DCURL_DISABLE_AWS=ON` in combination with either Schannel on Windows,
+ or `-DCURL_DISABLE_NTLM=ON` on other operating systems failed while
+ compiling due to a missing HMAC declaration.
-Daniel Stenberg (12 Oct 2022)
-- test1275: verify upercase after period in markdown
+ The reason is that HMAC is required by `lib/sha256.c` which publishes
+ `Curl_sha256it()` which is required by `lib/vssh/libssh2.c` when
+ building for libssh2 v1.8.2 (2019-05-25) or older.
- Script based on the #9474 pull-request logic, but implemented in perl.
+ Make sure to compile the HMAC bits for a successful build.
- Updated docs/URL-SYNTAX.md accordingly.
+ Both HMAC and `Curl_sha256it()` rely on the same internals, so splitting
+ them into separate sources isn't practical.
- Suggested-by: Dan Fandrich
+ Fixes:
+ ```
+ [...]
+ In file included from ./curl/_x64-win-ucrt-cmake-llvm-bld/lib/CMakeFiles/libc
+ url_object.dir/Unity/unity_0_c.c:310:
+ ./curl/lib/sha256.c:527:42: error: array has incomplete element type 'const s
+ truct HMAC_params'
+ 527 | const struct HMAC_params Curl_HMAC_SHA256[] = {
+ | ^
+ ./curl/lib/curl_sha256.h:34:21: note: forward declaration of 'struct HMAC_par
+ ams'
+ [...]
+ ```
- Closes #9697
+ Regression from e92edfbef64448ef461117769881f3ed776dec4e #11490
-- [12932 brought this change]
+ Fixes #12273
+ Closes #12332
- misc: nitpick grammar in comments/docs
+Daniel Stenberg (15 Nov 2023)
- because the 'u' in URL is actually a consonant *sound* it is only
- correct to write "a URL"
+- duphandle: also free 'outcurl->cookies' in error path
- sorry this is a bit nitpicky :P
+ Fixes memory-leak when OOM mid-function
- https://english.stackexchange.com/questions/152/when-should-i-use-a-vs-an
- https://www.techtarget.com/whatis/feature/Which-is-correct-a-URL-or-an-URL
+ Use plain free instead of safefree, since the entire struct is
+ freed below.
- Closes #9699
+ Remove some free calls that is already freed in Curl_freeset()
-Viktor Szakats (11 Oct 2022)
-- Makefile.m32: drop CROSSPREFIX and our CC/AR defaults [ci skip]
+ Closes #12329
- This patch aimed to fix a regression [0], where `CC` initialization
- moved beyond its first use. But, on closer inspection it turned out that
- the `CC` initialization does not work as expected due to GNU Make
- filling it with `cc` by default. So unless implicit values were
- explicitly disabled via a GNU Make option, the default value of
- `$CROSSPREFIX` + `gcc` was never used. At the same time the implicit
- value `cc` maps to `gcc` in (most/all?) MinGW envs.
+Viktor Szakats (15 Nov 2023)
- `AR` has the same issue, with a default value of `ar`.
+- config-win32: set `HAVE_SNPRINTF` for mingw-w64
- We could reintroduce a separate variable to fix this without ill
- effects, but for simplicity and flexibility, it seems better to drop
- support for `CROSSPREFIX`, along with our own `CC`/`AR` init logic, and
- require the caller to initialize `CC`, `AR` and `RC` to the full
- (prefixed if necessary) names of these tools, as desired.
+ It's available in all mingw-w64 releases. We already pre-fill this
+ detection in CMake.
- We keep `RC ?= windres` because `RC` is empty by default.
+ Closes #12325
- Also fix grammar in a comment.
+- sasl: fix `-Wunused-function` compiler warning
- [0] 10fbd8b4e3f83b967fd9ad9a41ab484c0e7e7ca3
+ In builds with disabled auths.
- Closes #9698
+ ```
+ lib/curl_sasl.c:266:17: warning: unused function 'get_server_message' [-Wunus
+ ed-function]
+ static CURLcode get_server_message(struct SASL *sasl, struct Curl_easy *data,
+ ^
+ 1 warning generated.
+ ```
+ Ref: https://github.com/curl/trurl/actions/runs/6871732122/job/18689066151#st
+ ep:3:3822
-- smb: replace CURL_WIN32 with WIN32
+ Reviewed-by: Daniel Stenberg
+ Closes #12326
- PR #9255 aimed to fix a Cygwin/MSYS issue (#8220). It used the
- `CURL_WIN32` macro, but that one is not defined here, while compiling
- curl itself. This patch changes this to `WIN32`, assuming this was the
- original intent.
+- build: picky warning updates
- Regression from 1c52e8a3795ccdf8ec9c308f4f8f19cf10ea1f1a
+ - cmake: sync some picky gcc warnings with autotools.
+ - cmake, autotools: add `-Wold-style-definition` for clang too.
+ - cmake: more precise version info for old clang options.
+ - cmake: use `IN LISTS` syntax in `foreach()`.
+ Reviewed-by: Daniel Stenberg
Reviewed-by: Marcel Raad
+ Closes #12324
- Closes #9701
+Daniel Stenberg (15 Nov 2023)
-Daniel Stenberg (11 Oct 2022)
-- [Matthias Gatto brought this change]
+- urldata: move cookielist from UserDefined to UrlState
- aws_sigv4: fix header computation
+ 1. Because the value is not strictly set with a setopt option.
- Handle canonical headers and signed headers creation as explained here:
- https://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html
+ 2. Because otherwise when duping a handle when all the set.* fields are
+ first copied and an error happens (think out of memory mid-function),
+ the function would easily free the list *before* it was deep-copied,
+ which could lead to a double-free.
- The algo tells that signed and canonical must contain at last host and
- x-amz-date.
+ Closes #12323
- So we check whatever thoses are present in the curl http headers list.
- If they are, we use the one enter by curl user, otherwise we generate
- them. then we to lower, and remove space from each http headers plus
- host and x-amz-date, then sort them all by alphabetical order.
+Viktor Szakats (14 Nov 2023)
- This patch also fix a bug with host header, which was ignoring the port.
+- autotools: avoid passing `LDFLAGS` twice to libcurl
- Closes #7966
+ autotools passes `LDFLAGS` automatically linker commands. curl's
+ `lib/Makefile.am` customizes libcurl linker flags. In that
+ customization, it added `LDFLAGS` to the custom flags. This resulted in
+ passing `LDFLAGS` _twice_ to the `libtool` command.
-Jay Satiro (11 Oct 2022)
-- [Aftab Alam brought this change]
+ Most of the time this is benign, but some `LDFLAGS` options can break
+ the build when passed twice. One such example is passing `.o` files,
+ e.g. `crt*.o` files necessary when customizing the C runtime, e.g. for
+ MUSL builds.
- README.md: link the curl logo to the website
+ Passing them twice resulted in duplicate symbol errors:
+ ```
+ libtool: link: clang-15 --target=aarch64-unknown-linux-musl [...] /usr/lib/a
+ arch64-linux-musl/crt1.o [...] /usr/lib/aarch64-linux-musl/crt1.o [...]
+ ld.lld-15: error: duplicate symbol: _start
+ >>> defined at crt1.c
+ >>> /usr/lib/aarch64-linux-musl/crt1.o:(.text+0x0)
+ >>> defined at crt1.c
+ >>> /usr/lib/aarch64-linux-musl/crt1.o:(.text+0x0)
+ [...]
+ clang: error: linker command failed with exit code 1 (use -v to see invocatio
+ n)
+ ```
- - Link the curl:// image to https://curl.se/
+ This behaviour came with commit 1a593191c2769a47b8c3e4d9715ec9f6dddf5e36
+ (2013-07-23) as a fix for bug https://curl.haxx.se/bug/view.cgi?id=1217.
+ The patch was a works-for-me hack that ended up merged in curl:
+ https://sourceforge.net/p/curl/bugs/1217/#06ef
+ With the root cause remaining unclear.
- Closes https://github.com/curl/curl/pull/9675
+ Perhaps the SUNPro 12 linker was sensitive to `-L` `-l` order, requiring
+ `-L` first? This would be unusual and suggests a bug in either the
+ linker or in `libtool`.
-- [Dustin Howett brought this change]
+ The curl build does pass the list of detected libs via its own
+ `LIBCURL_LIBS` variable, which ends up before `LDFLAGS` on the `libtool`
+ command line, but it's the job of `libtool` to ensure that even
+ a peculiar linker gets the options in the expected order. Also because
+ autotools passes `LDFLAGS` last, making it hardly possible to pass
+ anything after it.
- schannel: when importing PFX, disable key persistence
+ Perhaps in the 10 years since this issue, this already got a fix
+ upstream.
- By default, the PFXImportCertStore API persists the key in the user's
- key store (as though the certificate was being imported for permanent,
- ongoing use.)
+ This patch deletes `LDFLAGS` from our customized libcurl options,
+ leaving a single copy of them as passed by autotools automatically.
- The documentation specifies that keys that are not to be persisted
- should be imported with the flag PKCS12_NO_PERSIST_KEY.
- NOTE: this flag is only supported on versions of Windows newer than XP
- and Server 2003.
+ Reverts 1a593191c2769a47b8c3e4d9715ec9f6dddf5e36
+ Closes #12310
- --
+- autotools: accept linker flags via `CURL_LDFLAGS_{LIB,BIN}`
- This is take 2 of the original fix. It extends the lifetime of the
- client certificate store to that of the credential handle. The original
- fix which landed in 70d010d and was later reverted in aec8d30 failed to
- work properly because it did not do that.
+ To allow passing `LDFLAGS` specific to libcurl (`CURL_LDFLAGS_LIB`) and
+ curl tool (`CURL_LDFLAGS_BIN`).
- Minor changes were made to the schannel credential context to support
- closing the client certificate store handle at the end of an SSL session.
+ This makes it possible to build libcurl and curl with a single
+ invocation with lib- and tool-specific custom linker flags.
- --
+ Such flag can be enabling `.map` files, a `.def` file for libcurl DLL,
+ controlling static/shared, incl. requesting a static curl tool (with
+ `-static-libtool-libs`) while building both shared and static libcurl.
- Reported-by: ShadowZzj@users.noreply.github.com
+ curl-for-win uses the above and some more.
- Fixes https://github.com/curl/curl/issues/9300
- Supersedes https://github.com/curl/curl/pull/9363
- Closes https://github.com/curl/curl/pull/9460
+ These options are already supported in `Makefile.mk`. CMake has built-in
+ variables for this.
-Viktor Szakats (11 Oct 2022)
-- Makefile.m32: support more options [ci skip]
+ Closes #12312
- - Add support for these options:
- `-wolfssl`, `-wolfssh`, `-mbedtls`, `-libssh`, `-psl`
+Jay Satiro (14 Nov 2023)
- Caveats:
- - `-wolfssh` requires `-wolfssl`.
- - `-wolfssl` cannot be used with OpenSSL backends in parallel.
- - `-libssh` has build issues with BoringSSL and LibreSSL, and also
- what looks like a world-writable-config vulnerability on Windows.
- Consider it experimental.
- - `-psl` requires `-idn2` and extra libs passed via
- `LIBS=-liconv -lunistring`.
+- tool_cb_hdr: add an additional parsing check
- - Detect BoringSSL/wolfSSL and set ngtcp2 crypto lib accordingly.
- - Generalize MultiSSL detection.
- - Use else-if syntax. Requires GNU Make 3.81 (2006-04-01).
- - Document more customization options.
+ - Don't dereference the past-the-end element when parsing the server's
+ Content-disposition header.
- This brings over some configuration logic from `curl-for-win`.
+ As 'p' is advanced it can point to the past-the-end element and prior
+ to this change 'p' could be dereferenced in that case.
- Closes #9680
+ Technically the past-the-end element is not out of bounds because dynbuf
+ (which manages the header line) automatically adds a null terminator to
+ every buffer and that is not included in the buffer length passed to
+ the header callback.
-- cmake: enable more detection on Windows
+ Closes https://github.com/curl/curl/pull/12320
- Enable `HAVE_UNISTD_H`, `HAVE_STRTOK_R` and `HAVE_STRCASECMP` detection
- on Windows, instead of having predefined values.
+Philip Heiduck (14 Nov 2023)
- With these features detected correctly, CMake Windows builds get closer
- to the autotools and `config-win32.h` ones.
+- .cirrus.yml: freebsd 14
- This also fixes detecting `HAVE_FTRUNCATE` correctly, which required
- `unistd.h`.
+ ensure curl works on latest freebsd version
- Fixing `ftruncate()` in turn causes a build warning/error with legacy
- MinGW/MSYS1 due to an offset type size mismatch. This env misses to
- detect `HAVE_FILE_OFFSET_BITS`, which may be a reason. This patch
- force-disables `HAVE_FTRUNCATE` for this platform.
+ Closes #12053
- Reviewed-by: Daniel Stenberg
+Daniel Stenberg (13 Nov 2023)
- Closes #9687
+- easy: in duphandle, init the cookies for the new handle
-- autotools: allow unix sockets on Windows
+ ... not the source handle.
- Fixes: https://github.com/curl/curl-for-win/blob/73a070d96fd906fdee929e2f1f00a9149fb39239/curl-autotools.sh#L44-L47
+ Closes #12318
- On Windows this feature is present, but not the header used in the
- detection logic. It also requires an elaborate enabler logic
- (as seen in `lib/curl_setup.h`). Let's always allow it and let the
- lib code deal with the details.
+- duphandle: use strdup to clone *COPYPOSTFIELDS if size is not set
- Closes #9688
+ Previously it would unconditionally use the size, which is set to -1
+ when strlen is requested.
-- cmake: add missing inet_ntop check
+ Updated test 544 to verify.
- This adds the missing half of the check, next to the other half
- already present in `lib/curl_config.h.cmake`.
+ Closes #12317
- Force disable `HAVE_INET_NTOP` for old MSVC where it caused compiler
- warnings.
+- RELEASE-NOTES: synced
- Reviewed-by: Daniel Stenberg
+- curl_easy_duphandle.3: clarify how HSTS and alt-svc are duped
- Closes #9689
+ Closes #12315
-Daniel Stenberg (11 Oct 2022)
-- RELEASE-NOTES: synced
+- urldata: move hstslist from 'set' to 'state'
-- [bsergean on github brought this change]
+ To make it work properly with curl_easy_duphandle(). This, because
+ duphandle duplicates the entire 'UserDefined' struct by plain copy while
+ 'hstslist' is a linked curl_list of file names. This would lead to a
+ double-free when the second of the two involved easy handles were
+ closed.
- asyn-ares: set hint flags when calling ares_getaddrinfo
+ Closes #12315
- The hint flag is ARES_AI_NUMERICSERV, and it will save a call to
- getservbyname or getservbyname_r to set it.
+- test1900: verify duphandle with HSTS using multiple files
- Closes #9694
+ Closes #12315
-- header.d: add category smtp and imap
+Goro FUJI (13 Nov 2023)
- They were previously (erroneously) added manually to tool_listhelp.c
- which would make them get removed again when the file is updated next
- time, unless added correctly here in header.d
+- http: allow longer HTTP/2 request method names
- Follow-up to 2437fac01
+ - Increase the maximum request method name length from 11 to 23.
- Closes #9690
+ For HTTP/1.1 and earlier there's not a specific limit in libcurl for
+ method length except that it is limited by the initial HTTP request
+ limit (DYN_HTTP_REQUEST). Prior to fc2f1e54 HTTP/2 was treated the same
+ and there was no specific limit.
-- curl/get_url_file_name: use libcurl URL parser
+ According to Internet Assigned Numbers Authority (IANA) the longest
+ registered method is UPDATEREDIRECTREF which is 17 characters.
- To avoid URL tricks, use the URL parser for this.
+ Also there are unregistered methods used by some companies that are
+ longer than 11 characters.
- This update changes curl's behavior slightly in that it will ignore the
- possible query part from the URL and only use the file name from the
- actual path from the URL. I consider it a bugfix.
+ The limit was originally added by 61f52a97 but not used until fc2f1e54.
- "curl -O localhost/name?giveme-giveme" will now save the output in the
- local file named 'name'
+ Ref: https://www.iana.org/assignments/http-methods/http-methods.xhtml
- Updated test 1210 to verify
+ Closes https://github.com/curl/curl/pull/12311
- Assisted-by: Jay Satiro
+Jay Satiro (12 Nov 2023)
- Closes #9684
+- CURLOPT_CAINFO_BLOB.3: explain what CURL_BLOB_COPY does
-- [Martin Ã…gren brought this change]
+ - Add an explanation of the CURL_BLOB_COPY flag to CURLOPT_CAINFO_BLOB
+ and CURLOPT_PROXY_CAINFO_BLOB docs.
- docs: fix grammar around needing pass phrase
+ All the other _BLOB option docs already have the same explanation.
- "You never needed a pass phrase" reads like it's about to be followed by
- something like "until version so-and-so", but that is not what is
- intended. Change to "You never need a pass phrase". There are two
- instances of this text, so make sure to update both.
+ Closes https://github.com/curl/curl/pull/12277
-- [Xiang Xiao brought this change]
+Viktor Szakats (11 Nov 2023)
- cmake: add the check of HAVE_SOCKETPAIR
+- tidy-up: dedupe Windows system libs in cmake
- which is used by Curl_socketpair
+ Reviewed-by: Daniel Stenberg
+ Closes #12307
- Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
+Junho Choi (11 Nov 2023)
- Closes #9686
+- ci: test with latest quiche release (0.19.0)
-- curl/add_file_name_to_url: use the libcurl URL parser
+ Closes #12180
- instead of the custom error-prone parser, to extract and update the path
- of the given URL
+- quiche: use quiche_conn_peer_transport_params()
- Closes #9683
+ In recent quiche, transport parameter API is separated
+ with quiche_conn_peer_transport_params().
+ (https://github.com/cloudflare/quiche/pull/1575)
+ It breaks with bulding with latest(post 0.18.0) quiche.
-- single_transfer: use the libcurl URL parser when appending query parts
+ Closes #12180
- Instead of doing "manual" error-prone parsing in another place.
+Daniel Stenberg (11 Nov 2023)
- Used when --data contents is added to the URL query when -G is provided.
+- Makefile: generate the VC 14.20 project files at dist-time
- Closes #9681
+ Follow-up to 28287092cc5a6d6ef8 (#12282)
-- ws: fix buffer pointer use in the callback loop
+ Closes #12290
- Closes #9678
+Sam James (11 Nov 2023)
-- [Petr Å tetiar brought this change]
+- misc: fix -Walloc-size warnings
- curl-wolfssl.m4: error out if wolfSSL is not usable
+ GCC 14 introduces a new -Walloc-size included in -Wextra which gives:
- When I explicitly declare, that I would like to have curl built with
- wolfSSL support using `--with-wolfssl` configure option, then I would
- expect, that either I endup with curl having that support, for example
- in form of https support or it wouldn't be available at all.
+ ```
+ src/tool_operate.c: In function ‘add_per_transfer’:
+ src/tool_operate.c:213:5: warning: allocation of insufficient size ‘1’ fo
+ r type ‘struct per_transfer’ with size ‘480’ [-Walloc-size]
+ 213 | p = calloc(sizeof(struct per_transfer), 1);
+ | ^
+ src/var.c: In function ‘addvariable’:
+ src/var.c:361:5: warning: allocation of insufficient size ‘1’ for type â€
+ ˜struct var’ with size ‘32’ [-Walloc-size]
+ 361 | p = calloc(sizeof(struct var), 1);
+ | ^
+ ```
+
+ The calloc prototype is:
+ ```
+ void *calloc(size_t nmemb, size_t size);
+ ```
- Downstream projects like for example OpenWrt build curl wolfSSL variant
- with `--with-wolfssl` already, but in certain corner cases it does fail:
+ So, just swap the number of members and size arguments to match the
+ prototype, as we're initialising 1 struct of size `sizeof(struct
+ ...)`. GCC then sees we're not doing anything wrong.
- configure:25299: checking for wolfSSL_Init in -lwolfssl
- configure:25321: x86_64-openwrt-linux-musl-gcc -o conftest [snip]
- In file included from target-x86_64_musl/usr/include/wolfssl/wolfcrypt/dsa.h:33,
- from target-x86_64_musl/usr/include/wolfssl/wolfcrypt/asn_public.h:35,
- from target-x86_64_musl/usr/include/wolfssl/ssl.h:35,
- from conftest.c:47:
- target-x86_64_musl/usr/include/wolfssl/wolfcrypt/integer.h:37:14: fatal error: wolfssl/wolfcrypt/sp_int.h: No such file or directory
- #include <wolfssl/wolfcrypt/sp_int.h>
- ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
- compilation terminated.
+ Closes #12292
- and in the end thus produces curl without https support:
+Mark Gaiser (11 Nov 2023)
- curl: (1) Protocol "https" not supported or disabled in libcurl
+- IPFS: bugfixes
- So fix it, by making the working wolfSSL mandatory and error out in
- configure step when that's not the case:
+ - Fixed endianness bug in gateway file parsing
+ - Use IPFS_PATH in tests where IPFS_DATA was used
+ - Fixed typos from traling -> trailing
+ - Fixed broken link in IPFS.md
- checking for wolfSSL_Init in -lwolfssl... no
- configure: error: --with-wolfssl but wolfSSL was not found or doesn't work
+ Follow-up to 859e88f6533f9e
- References: https://github.com/openwrt/packages/issues/19005
- References: https://github.com/openwrt/packages/issues/19547
- Signed-off-by: Petr Å tetiar <ynezz@true.cz>
+ Reported-by: Michael Kaufmann
+ Bug: https://github.com/curl/curl/pull/12152#issuecomment-1798214137
+ Closes #12305
- Closes #9682
+Daniel Stenberg (11 Nov 2023)
-- tool_getparam: pass in the snprintf("%.*s") string length as 'int'
+- VULN-DISCLOSURE-POLIC: remove broken link to hackerone
- Reported by Coverity CID 1515928
+ It should ideally soon not be done from hackerone anyway
- Closes #9679
+ Closes #12308
-- [Paul Seligman brought this change]
+Andrew Kurushin (11 Nov 2023)
- ws: minor fixes for web sockets without the CONNECT_ONLY flag
+- schannel: add CA cache support for files and memory blobs
- - Fixed an issue where is_in_callback was getting cleared when using web
- sockets with debug logging enabled
- - Ensure the handle is is_in_callback when calling out to fwrite_func
- - Change the write vs. send_data decision to whether or not the handle
- is in CONNECT_ONLY mode.
- - Account for buflen not including the header length in curl_ws_send
+ - Support CA bundle and blob caching.
- Closes #9665
+ Cache timeout is 24 hours or can be set via CURLOPT_CA_CACHE_TIMEOUT.
-Marc Hoersken (8 Oct 2022)
-- CI/cirrus: merge existing macOS jobs into a job matrix
+ Closes https://github.com/curl/curl/pull/12261
- Ref: #9627
- Reviewed-by: Philip H.
+Daniel Stenberg (10 Nov 2023)
- Closes #9672
+- RELEASE-NOTES: synced
-Daniel Stenberg (8 Oct 2022)
-- strcase: add and use Curl_timestrcmp
+Charlie C (10 Nov 2023)
- This is a strcmp() alternative function for comparing "secrets",
- designed to take the same time no matter the content to not leak
- match/non-match info to observers based on how fast it is.
+- cmake: option to disable install & drop `curlu` target when unused
- The time this function takes is only a function of the shortest input
- string.
+ This patch makes the following changes:
+ - adds the option `CURL_DISABLE_INSTALL` - to disable 'install' targets.
+ - Removes the target `curlu` when the option `BUILD_TESTING` is set to
+ `OFF` - to prevent it from being loaded in Visual Studio.
- Reported-by: Trail of Bits
+ Closes #12287
- Closes #9658
+Kai Pastor (10 Nov 2023)
-- tool_getparam: split out data_urlencode() into its own function
+- cmake: fix multiple include of CURL package
- Closes #9673
+ Fixes errors on second `find_package(CURL)`. This is a frequent case
+ with transitive dependencies:
+ ```
+ CMake Error at ...:
+ add_library cannot create ALIAS target "CURL::libcurl" because another
+ target with the same name already exists.
+ ```
-- connect: fix Curl_updateconninfo for TRNSPRT_UNIX
+ Test to reproduce:
+ ```cmake
+ cmake_minimum_required(VERSION 3.27) # must be 3.18 or higher
+
+ project(curl)
+
+ set(CURL_DIR "example/lib/cmake/CURL/")
+ find_package(CURL CONFIG REQUIRED)
+ find_package(CURL CONFIG REQUIRED) # fails
+
+ add_executable(main main.c)
+ target_link_libraries(main CURL::libcurl)
+ ```
+
+ Ref: https://cmake.org/cmake/help/latest/release/3.18.html#other-changes
+ Ref: https://cmake.org/cmake/help/v3.18/policy/CMP0107.html
+ Ref: #12300
+ Assisted-by: Harry Mallon
+ Closes #11913
+
+Viktor Szakats (8 Nov 2023)
+
+- tidy-up: use `OPENSSL_VERSION_NUMBER`
+
+ Uniformly use `OPENSSL_VERSION_NUMBER` to check for OpenSSL version.
+ Before this patch some places used `OPENSSL_VERSION_MAJOR`.
+
+ Also fix `lib/md4.c`, which included `opensslconf.h`, but that doesn't
+ define any version number in these implementations: BoringSSL, AWS-LC,
+ LibreSSL, wolfSSL. (Only in mainline OpenSSL/quictls). Switch that to
+ `opensslv.h`. This wasn't causing a deeper problem because the code is
+ looking for v3, which is only provided by OpenSSL/quictls as of now.
+
+ According to https://github.com/openssl/openssl/issues/17517, the macro
+ `OPENSSL_VERSION_NUMBER` is safe to use and not deprecated.
+
+ Reviewed-by: Marcel Raad
+ Closes #12298
- Reported-by: Vasiliy Ulyanov
- Fixes #9664
- Closes #9670
+Daniel Stenberg (8 Nov 2023)
-- ws: fix Coverity complaints
+- resolve.d: drop a multi use-sentence
- Coverity pointed out several flaws where variables remained
- uninitialized after forks.
+ Since the `multi:` keyword adds that message.
- Follow-up to e3f335148adc6742728f
+ Reported-by: ç©ä¸¹å°¼ Dan Jacobson
+ Fixes https://github.com/curl/curl/discussions/12294
+ Closes #12295
- Closes #9666
+- content_encoding: make Curl_all_content_encodings allocless
-Marc Hoersken (7 Oct 2022)
-- CI/GHA: merge msh3 and openssl3 builds into linux workflow
+ - Fixes a memory leak pointed out by Coverity
+ - Also found by OSS-Fuzz: https://bugs.chromium.org/p/oss-fuzz/issues/detail?
+ id=63947
+ - Avoids unncessary allocations
- Continue work on merging all Linux workflows into one file.
+ Follow-up ad051e1cbec68b2456a22661b
- Follow up to #9501
- Closes #9646
+ Closes #12289
-Daniel Stenberg (7 Oct 2022)
-- curl_ws_send.3: call the argument 'fragsize'
+Michael Kaufmann (7 Nov 2023)
- Since WebSocket works with "fragments" not "frames"
+- vtls: use ALPN "http/1.1" for HTTP/1.x, including HTTP/1.0
- Closes #9668
+ Some servers don't support the ALPN protocol "http/1.0" (e.g. IIS 10),
+ avoid it and use "http/1.1" instead.
-- easy: avoid Intel error #2312: pointer cast involving 64-bit pointed-to type
+ This reverts commit df856cb5c9 (#10183).
- Follow-up to e3f335148adc6742728ff8
+ Fixes #12259
+ Closes #12285
- Closes #9669
+Daniel Stenberg (7 Nov 2023)
-- tool_main: exit at once if out of file descriptors
+- Makefile.am: drop vc10, vc11 and vc12 projects from dist
- If the main_checkfds function cannot create new file descriptors in an
- attempt to detect of stdin, stdout or stderr are closed.
+ They are end of life products. Support for generating them remain in the
+ repo for a while but this change drops them from distribution.
- Also changed the check to use fcntl() to check if the descriptors are
- open, which avoids superfluously calling pipe() if they all already are.
+ Closes #12288
- Follow-up to facfa19cdd4d0094
+David Suter (7 Nov 2023)
- Reported-by: Trail of Bits
+- projects: add VC14.20 project files
- Closes #9663
+ Windows projects included VC14, VC14.10, VC14.30 but not VC14.20.
+ OpenSSL and Wolf SSL scripts mention VC14.20 so I don't see a reason why
+ this is missing. Updated the templates to produce a VC14.20 project.
+ Project opens in Visual Studio 2019 as expected.
-- websockets: remodeled API to support 63 bit frame sizes
+ Closes #12282
- curl_ws_recv() now receives data to fill up the provided buffer, but can
- return a partial fragment. The function now also get a pointer to a
- curl_ws_frame struct with metadata that also mentions the offset and
- total size of the fragment (of which you might be receiving a smaller
- piece). This way, large incoming fragments will be "streamed" to the
- application. When the curl_ws_frame struct field 'bytesleft' is 0, the
- final fragment piece has been delivered.
+Daniel Stenberg (7 Nov 2023)
- curl_ws_recv() was also adjusted to work with a buffer size smaller than
- the fragment size. (Possibly needless to say as the fragment size can
- now be 63 bit large).
+- curl: move IPFS code into src/tool_ipfs.[ch]
- curl_ws_send() now supports sending a piece of a fragment, in a
- streaming manner, in addition to sending the entire fragment in a single
- call if it is small enough. To send a huge fragment, curl_ws_send() can
- be used to send it in many small calls by first telling libcurl about
- the total expected fragment size, and then send the payload in N number
- of separate invokes and libcurl will stream those over the wire.
+ - convert ensure_trailing into ensure_trailing_slash
+ - strdup the URL string to own it proper
+ - use shorter variable names
+ - combine some expressions
+ - simplify error handling in ipfs_gateway()
+ - add MAX_GATEWAY_URL_LEN + proper bailout if maximum is reached
+ - ipfs-gateway.d polish and simplification
+ - shorten ipfs error message + make them "synthetic"
- The struct curl_ws_meta() returns is now called 'curl_ws_frame' and it
- has been extended with two new fields: *offset* and *bytesleft*. To help
- describe the passed on data chunk when a fragment is delivered in many
- smaller pieces.
+ Closes #12281
- The documentation has been updated accordingly.
+Viktor Szakats (6 Nov 2023)
- Closes #9636
+- build: delete support bits for obsolete Windows compilers
-- [Patrick Monnerat brought this change]
+ - Pelles C: Unclear status, failed to obtain a fresh copy a few months
+ ago. Possible website is HTTP-only. ~10 years ago I left this compiler
+ dealing with crashes and other issues with no response on the forum
+ for years. It has seen some activity in curl back in 2021.
+ - LCC: Last stable release in September 2002.
+ - Salford C: Misses winsock2 support, possibly abandoned? Last mentioned
+ in 2006.
+ - Borland C++: We dropped Borland C++ support in 2018.
+ - MS Visual C++ 6.0: Released in 1998. curl already requires VS 2010
+ (or possibly 2008) as a minimum.
- docs/examples: avoid deprecated options in examples where possible
+ Closes #12222
- Example programs targeting a deprecated feature/option are commented with
- a warning about it.
- Other examples are adapted to not use deprecated options.
+- build: delete `HAVE_STDINT_H` and `HAVE_INTTYPES_H`
- Closes #9661
+ We use `stdint.h` unconditionally in all places except one. These uses
+ are imposed by external dependencies / features. nghttp2, quic, wolfSSL
+ and `HAVE_MACH_ABSOLUTE_TIME` do require this C99 header. It means that
+ any of these features make curl require a C99 compiler. (In case of
+ MSVC, this means Visual Studio 2010 or newer.)
-Viktor Szakats (6 Oct 2022)
-- cmake: fix enabling websocket support
+ This patch changes the single use of `stdint.h` guarded by
+ `HAVE_STDINT_H` to use `stdint.h` unconditionally. Also stop using
+ `inttypes.h` as an alternative there. `HAVE_INTTYPES_H` wasn't used
+ anywhere else, allowing to delete this feature check as well.
- Follow-up from 664249d095275ec532f55dd1752d80c8c1093a77
+ Closes #12275
- Closes #9660
+Daniel Stenberg (6 Nov 2023)
-- tidy-up: delete parallel/unused feature flags
+- tool_operate: do not mix memory models
- Detecting headers and lib separately makes sense when headers come in
- variations or with extra ones, but this wasn't the case here. These were
- duplicate/parallel macros that we had to keep in sync with each other
- for a working build. This patch leaves a single macro for each of these
- dependencies:
+ Make sure 'inputpath' only points to memory allocated by libcurl so that
+ curl_free works correctly.
- - Rely on `HAVE_LIBZ`, delete parallel `HAVE_ZLIB_H`.
+ Pointed out by Coverity
- Also delete CMake logic making sure these two were in sync, along with
- a toggle to turn off that logic, called `CURL_SPECIAL_LIBZ`.
+ Follow-up to 859e88f6533f9e1f890
- Also delete stray `HAVE_ZLIB` defines.
+ Closes #12280
- There is also a `USE_ZLIB` variant in `lib/config-dos.h`. This patch
- retains it for compatibility and deprecates it.
+Stefan Eissing (6 Nov 2023)
- - Rely on `USE_LIBSSH2`, delete parallel `HAVE_LIBSSH2_H`.
+- lib: client writer, part 2, accounting + logging
- Also delete `LIBSSH2_WIN32`, `LIBSSH2_LIBRARY` from
- `winbuild/MakefileBuild.vc`, these have a role when building libssh2
- itself. And `CURL_USE_LIBSSH`, which had no use at all.
+ This PR has these changes:
- Also delete stray `HAVE_LIBSSH2` defines.
+ Renaming of unencode_* to cwriter, e.g. client writers
+ - documentation of sendf.h functions
+ - move max decode stack checks back to content_encoding.c
+ - define writer phase which was used as order before
+ - introduce phases for monitoring inbetween decode phases
+ - offering default implementations for init/write/close
- - Rely on `USE_LIBSSH`, delete parallel `HAVE_LIBSSH_LIBSSH_H`.
+ Add type paramter to client writer's do_write()
+ - always pass all writes through the writer stack
+ - writers who only care about BODY data will pass other writes unchanged
- Also delete `LIBSSH_WIN32`, `LIBSSH_LIBRARY` and `HAVE_LIBSSH` from
- `winbuild/MakefileBuild.vc`, these were the result of copy-pasting the
- libssh2 line, and were not having any use.
+ add RAW and PROTOCOL client writers
+ - RAW used for Curl_debug() logging of CURLINFO_DATA_IN
+ - PROTOCOL used for updates to data->req.bytecount, max_filesize checks and
+ Curl_pgrsSetDownloadCounter()
+ - remove all updates of data->req.bytecount and calls to
+ Curl_pgrsSetDownloadCounter() and Curl_debug() from other code
+ - adjust test457 expected output to no longer see the excess write
- - Delete unused `HAVE_LIBPSL_H` and `HAVE_LIBPSL`.
+ Closes #12184
+
+Daniel Stenberg (6 Nov 2023)
+
+- VULN-DISCLOSURE-POLICY: escape sequences are not a security flaw
+
+ Closes #12278
+
+Viktor Szakats (6 Nov 2023)
+
+- rand: fix build error with autotools + LibreSSL
+
+ autotools unexpectedly detects `arc4random` because it is also looking
+ into dependency libs. One dependency, LibreSSL, happens to publish an
+ `arc4random` function (via its shared lib before v3.7, also via static
+ lib as of v3.8.2). When trying to use this function in `lib/rand.c`,
+ its protoype is missing. To fix that, curl included a prototype, but
+ that used a C99 type without including `stdint.h`, causing:
+
+ ```
+ ../../lib/rand.c:37:1: error: unknown type name 'uint32_t'
+ 37 | uint32_t arc4random(void);
+ | ^
+ 1 error generated.
+ ```
+
+ This patch improves this by dropping the local prototype and instead
+ limiting `arc4random` use for non-OpenSSL builds. OpenSSL builds provide
+ their own random source anyway.
+
+ The better fix would be to teach autotools to not link dependency libs
+ while detecting `arc4random`.
+
+ LibreSSL publishing a non-namespaced `arc4random` tracked here:
+ https://github.com/libressl/portable/issues/928
+
+ Regression from 755ddbe901cd0c921fbc3ac5b3775c0dc683bc73 #10672
Reviewed-by: Daniel Stenberg
+ Fixes #12257
+ Closes #12274
+
+Daniel Stenberg (5 Nov 2023)
- Closes #9652
+- RELEASE-NOTES: synced
-Daniel Stenberg (6 Oct 2022)
-- netrc: compare user name case sensitively
+- strdup: do Curl_strndup without strncpy
- User name comparisions in netrc need to match the case.
+ To avoid (false positive) gcc-13 compiler warnings.
- Closes #9657
+ Follow-up to 4855debd8a2c1cb
-- CURLOPT_COOKIEFILE: insist on "" for enable-without-file
+ Assisted-by: Jay Satiro
+ Reported-by: Viktor Szakats
+ Fixes #12258
- The former way that also suggested using a non-existing file to just
- enable the cookie engine could lead to developers maybe a bit carelessly
- guessing a file name that will not exist, and then in a future due to
- circumstances, such a file could be made to exist and then accidentally
- libcurl would read cookies not actually meant to.
+Enno Boland (5 Nov 2023)
- Reported-by: Trail of bits
+- HTTP: fix empty-body warning
- Closes #9654
+ This change fixes a compiler warning with gcc-12.2.0 when
+ `-DCURL_DISABLE_BEARER_AUTH=ON` is used.
-- tests/Makefile: remove run time stats from ci-test
+ /home/tox/src/curl/lib/http.c: In function 'Curl_http_input_auth':
+ /home/tox/src/curl/lib/http.c:1147:12: warning: suggest braces around emp
+ ty body in an 'else' statement [-Wempty-body]
+ 1147 | ;
+ | ^
- The ci-test is the normal makefile target invoked in CI jobs. This has
- been using the -r option to runtests.pl since a long time, but I find
- that it mostly just adds many lines to the test output report without
- anyone caring much about those stats.
+ Closes #12262
- Remove it.
+Daniel Stenberg (5 Nov 2023)
- Closes #9656
+- openssl: identify the "quictls" backend correctly
-- [Patrick Monnerat brought this change]
+ Since vanilla OpenSSL does not support the QUIC API I think it helps
+ users to identify the correct OpenSSL fork in version output. The best
+ (crude) way to do that right now seems to be to check if ngtcp2 support
+ is enabled.
- tool: reorganize function c_escape around a dynbuf
+ Closes #12270
- This is a bit shorter and a lot safer.
+Mark Gaiser (5 Nov 2023)
- Substrings of unescaped characters are added by a single call to reduce
- overhead.
+- curl: improved IPFS and IPNS URL support
- Extend test 1465 to handle more kind of escapes.
+ Previously just ipfs://<cid> and ipns://<cid> was supported, which is
+ too strict for some usecases.
- Closes #9653
+ This patch allows paths and query arguments to be used too.
+ Making this work according to normal http semantics:
-Jay Satiro (5 Oct 2022)
-- CURLOPT_HTTPPOST.3: bolden the deprecation notice
+ ipfs://<cid>/foo/bar?key=val
+ ipns://<cid>/foo/bar?key=val
- Ref: https://github.com/curl/curl/pull/9621
+ The gateway url support is changed.
+ It now only supports gateways in the form of:
- Closes https://github.com/curl/curl/pull/9637
+ http://<gateway>/foo/bar
+ http://<gateway>
-Daniel Stenberg (5 Oct 2022)
-- [John Bampton brought this change]
+ Query arguments here are explicitly not allowed and trigger an intended
+ malformed url error.
- misc: fix spelling in docs and comments
+ There also was a crash when IPFS_PATH was set with a non trailing
+ forward slash. This has been fixed.
- also: remove outdated sentence
+ Lastly, a load of test cases have been added to verify the above.
- Closes #9644
+ Reported-by: Steven Allen
+ Fixes #12148
+ Closes #12152
-- [Patrick Monnerat brought this change]
+Harry Mallon (5 Nov 2023)
- tool: avoid generating ambiguous escaped characters in --libcurl
+- docs: KNOWN_BUGS cleanup
- C string hexadecimal-escaped characters may have more than 2 digits.
- This results in a wrong C compiler interpretation of a 2-digit escaped
- character when followed by an hex digit character.
+ * Remove other mention of hyper memory-leaks from `KNOWN_BUGS`.
+ Should have been removed in 629723ecf22a8eae78d64cceec2f3bdae703ec95
- The solution retained here is to represent such characters as 3-digit
- octal escapes.
+ * Remove mention of aws-sigv4 sort query string from `KNOWN_BUGS`.
+ Fixed in #11806
- Adjust and extend test 1465 for this case.
+ * Remove mention of aws-sigv4 query empty value problems
- Closes #9643
+ * Remove mention of aws-sigv4 missing amz-content-sha256
+ Fixed in #9995
-- configure: the ngtcp2 option should default to 'no'
+- http_aws_sigv4: canonicalise valueless query params
- While still experimental.
+ Fixes #8107
+ Closes #12244
- Bug: https://curl.se/mail/lib-2022-10/0007.html
- Reported-by: Daniel Hallberg
+Michael Kaufmann (4 Nov 2023)
- Closes #9650
+- docs: preserve the modification date when copying the prebuilt man page
-- CURLOPT_MIMEPOST.3: add an (inline) example
+ The previously built man page "curl.1" must be copied with the original
+ modification date, otherwise the man page is never updated.
- Reported-by: Jay Satiro
- Bug: https://github.com/curl/curl/pull/9637#issuecomment-1268070723
+ This fixes a bug that has been introduced with commit 2568441cab.
+
+ Reviewed-by: Dan Fandrich
+ Reviewed-by: Daniel Stenberg
+
+ Closes #12199
+
+Daniel Stenberg (4 Nov 2023)
+
+- docs: remove bold from some man page SYNOPSIS sections
+
+ In the name of consistency
- Closes #9649
+ Closes #12267
-Viktor Szakats (5 Oct 2022)
-- Makefile.m32: exclude libs & libpaths for shared mode exes [ci skip]
+- openssl: two multi pointer checks should probably rather be asserts
- Exclude linker flags specifying depedency libs and libpaths, when
- building against `libcurl.dll`. In such case these options are not
- necessary (but may cause errors if not/wrongly configured.)
+ ... so add the asserts now and consider removing the dynamic checks in a
+ future.
+
+ Ref: #12261
+ Closes #12264
+
+boilingoden (4 Nov 2023)
+
+- docs: add supported version for the json write-out
+
+ xref: https://curl.se/changes.html#7_70_0
+
+ Closes #12266
+
+Viktor Szakats (3 Nov 2023)
+
+- appveyor: make VS2008-built curl tool runnable
+
+ By linking the CRT statically. This avoids the error about missing
+ runtime DLL `MSVCR90.dll` when running the freshly built `curl.exe`.
+
+ Closes #12263
+
+Stefan Eissing (3 Nov 2023)
+
+- url: proxy ssl connection reuse fix
+
+ - tunnel https proxy used for http: transfers does
+ no check if proxy-ssl configuration matches
+ - test cases added, test_10_12 fails on 8.4.0
- Also move and reword a comment on `CPPFLAGS` to not apply to
- `UNICODE` options. These are necessary for all build targets.
+ Closes #12255
- Closes #9651
+Jay Satiro (3 Nov 2023)
-Jay Satiro (5 Oct 2022)
-- runtests: fix uninitialized value on ignored tests
+- curl_sspi: support more revocation error names in error messages
- - Don't show TESTFAIL message (ie tests failed which aren't ignored) if
- only ignored tests failed.
+ - Add these revocation errors to sspi error list:
+ CRYPT_E_NO_REVOCATION_DLL, CRYPT_E_NO_REVOCATION_CHECK,
+ CRYPT_E_REVOCATION_OFFLINE and CRYPT_E_NOT_IN_REVOCATION_DATABASE.
+
+ Prior to this change those error codes were not matched to their macro
+ name and instead shown as "unknown error".
Before:
- IGNORED: failed tests: 571 612 1056
- TESTDONE: 1214 tests out of 1217 reported OK: 99%
- Use of uninitialized value $failed in concatenation (.) or string at
- ./runtests.pl line 6290.
- TESTFAIL: These test cases failed:
+
+ schannel: next InitializeSecurityContext failed:
+ Unknown error (0x80092013) - The revocation function was
+ unable to check revocation because the revocation server was offline.
After:
- IGNORED: failed tests: 571 612 1056
- TESTDONE: 1214 tests out of 1217 reported OK: 99%
- Closes https://github.com/curl/curl/pull/9648
+ schannel: next InitializeSecurityContext failed:
+ CRYPT_E_REVOCATION_OFFLINE (0x80092013) - The revocation function was
+ unable to check revocation because the revocation server was offline.
+
+ Bug: https://github.com/curl/curl/issues/12239
+ Reported-by: Niracler Li
-- cirrus: use make LDFLAGS=-all-static instead of curl_LDFLAGS
+ Closes https://github.com/curl/curl/pull/12241
- - Correct the use of -all-static for static Windows CI builds.
+- strdup: don't allow Curl_strndup to read past a null terminator
- curl_LDFLAGS was removed from the makefile when metalink support was
- removed. LDFLAGS=-all-static is passed to make only, because it is not a
- valid option for configure compilation tests.
+ - Use malloc + strncpy instead of Curl_memdup to dupe the string before
+ null terminating it.
- Closes https://github.com/curl/curl/pull/9633
+ Prior to this change if Curl_strndup was passed a length longer than
+ the allocated string then it could copy out of bounds.
-Viktor Szakats (4 Oct 2022)
-- Makefile.m32: fix regression with tool_hugehelp [ci skip]
+ This change is for posterity. Curl_strndup was added in the parent
+ commit and currently none of the calls to it pass a length that would
+ cause it to read past the allocated length of the input.
- In a recent commit I mistakenly deleted this logic, after seeing a
- reference to a filename ending with `.cvs` and thinking it must have
- been long gone. Turns out this is an existing file. Restore the rule
- and the necessary `COPY` definitions with it.
+ Follow-up to d3b3ba35.
- The restored logic is required for a successful build on a bare source
- tree (as opposed to a source release tarball).
+ Closes https://github.com/curl/curl/pull/12254
- Also shorten an existing condition similar to the one added in this
- patch.
+Daniel Stenberg (2 Nov 2023)
- Regression since 07a0047882dd3f1fbf73486c5dd9c15370877ad6
+- lib: add and use Curl_strndup()
- Closes #9645
+ The Curl_strndup() function is similar to memdup(), but copies 'n' bytes
+ then adds a terminating null byte ('\0').
-- Makefile.m32: deduplicate build rules [ci skip]
+ Closes #12251
- After this patch, we reduce the three copies of most `Makefile.m32`
- logic to one. This now resides in `lib/Makefile.m32`. It makes future
- updates easier, the code shorter, with a small amount of added
- complexity.
+- CURPOST_POSTFIELDS.3: add CURLOPT_COPYPOSTFIELDS in SEE ALSO
- `Makefile.m32` reduction:
+Stefan Eissing (2 Nov 2023)
- | | bytes | LOC total | blank | comment | code |
- |-------------------|-------:|----------:|-------:|---------:|------:|
- | 7.85.0 | 34772 | 1337 | 79 | 192 | 1066 |
- | before this patch | 17601 | 625 | 62 | 106 | 457 |
- | after this patch | 11680 | 392 | 52 | 104 | 236 |
+- pytest: use lower count in repeat tests
- Details:
+ - lower large iteration counts in some tests somewhat for
+ the same coverage with less duration
- - Change rules to create objects for the `v*` subdirs in the `lib` dir.
- This allows to use a shared compile rule and assumes that filenames
- are not (and will not be) colliding across these directories.
- `Makefile.m32` now also stores a list of these subdirs. They are
- changing rarely though.
+ Closes #12248
- - Sync as much as possible between the three `Makefile.m32` scripts'
- rules and their source/target sections.
+Daniel Stenberg (2 Nov 2023)
- - After this patch `CPPFLAGS` are all applied to the `src` sources once
- again. This matches the behaviour of cmake/autotools. Only zlib ones
- are actually required there.
+- RELEASE-NOTES: synced
- - Use `.rc` names from `Makefile.inc` instead of keeping a duplicate.
+- docs: clarify that curl passes on input unfiltered
- - Change examples to link `libcurl.dll` by default. This makes building
- trivial, even as a cross-build:
- `CC=x86_64-w64-mingw32-gcc make -f Makefile.m32`
- To run them, you need to move/copy or add-to-path `libcurl.dll`.
- You can select static mode via `CFG=-static`.
+ ... for several options.
- - List more of the `Makefile.m32` config variables.
+ Reported-by: Ophir Lojkine
- - Drop `.rc` support from examples. It made it fragile without much
- benefit.
+ Closes #12249
- - Include a necessary system lib for the `externalsocket.c` example.
+- urlapi: when URL encoding the fragment, pass in the right length
- - Exclude unnecessary systems libs when building in `-dyn` mode.
+ A benign bug because it would only add an extra null terminator.
- Closes #9642
+ Made lib1560 get a test that runs this code.
-Daniel Stenberg (4 Oct 2022)
-- RELEASE-NOTES: synced
+ Closes #12250
-- CURLOPT_COOKIELIST.3: fix formatting mistake
-
- Also, updated manpage-syntax.pl to make it detect this error in test
- 1173.
-
- Reported-by: ProceduralMan on github
- Fixes #9639
- Closes #9640
-
-- [Jay Satiro brought this change]
-
- connect: change verbose IPv6 address:port to [address]:port
-
- - Use brackets for the IPv6 address shown in verbose message when the
- format is address:port so that it is less confusing.
-
- Before: Trying 2606:4700:4700::1111:443...
- After: Trying [2606:4700:4700::1111]:443...
-
- Bug: https://curl.se/mail/archive-2022-02/0041.html
- Reported-by: David Hu
-
- Closes #9635
-
-Viktor Szakats (3 Oct 2022)
-- Makefile.m32: major rework [ci skip]
-
- This patch overhauls `Makefile.m32` scripts, fixing a list of quirks,
- making its behaviour and customization envvars align better with other
- build systems, aiming for less code, that is easier to read, use and
- maintain.
-
- Details:
- - Rename customization envvars:
- `CURL_CC` -> `CC`
- `CURL_RC` -> `RC`
- `CURL_AR` -> `AR`
- `CURL_LDFLAG_EXTRAS_DLL` -> `CURL_LDFLAGS_LIB`
- `CURL_LDFLAG_EXTRAS_EXE` -> `CURL_LDFLAGS_BIN`
- - Drop `CURL_STRIP` and `CURL_RANLIB`. These tools are no longer used.
- - Accept `CFLAGS`, `CPPFLAGS`, `RCFLAGS`, `LDFLAGS` and `LIBS` envvars.
- - Drop `CURL_CFLAG_EXTRAS`, `CURL_LDFLAG_EXTRAS`, `CURL_RCFLAG_EXTRAS` in
- favor of the above.
- - Do not automatically enable `zlib` with `libssh2`. `zlib` is optional
- with `libssh2`.
- - Omit unnecessary `CPPFLAGS` options when building `curl.exe` and
- examples.
- - Drop support for deprecated `-winssl` `CFG` option. Use `-schannel`
- instead.
- - Avoid late evaluation where not necessary (`=` -> `:=`).
- - Drop support for `CURL_DLL_A_SUFFIX` to override the implib suffix.
- Instead, use the standard naming scheme by default: `libcurl.dll.a`.
- The toolchain recognizes the name, and selects it automatically when
- asking for a `-shared` vs. `-static` build.
- - Stop applying `strip` to `libcurl.a`. Follow-up from
- 16a58e9f93c7e89e1f87720199388bcfcfa148a4. There was no debug info to
- strip since then.
- - Stop setting `-O3`, `-W`, `-Wall` options. You can add these to
- `CFLAGS` as desired.
- - Always enable `-DCURL_DISABLE_OPENSSL_AUTO_LOAD_CONFIG` with OpenSSL,
- to avoid that vulnerability on Windows.
- - Add `-lbrotlicommon` to `LIBS` when using `brotli`.
- - Do not enable `-nghttp3` without `-ngtcp2`.
- - `-ssh2` and `-rtmp` options no longer try to auto-select a TLS-backend.
- You need to set the backend explicitly. This scales better and avoids
- issues with certain combinations (e.g. `libssh2` + `wolfssl` with no
- `schannel`).
- - Default to OpenSSL TLS-backend with `ngtcp2`. Possible to override via
- `NGTCP2_LIBS`.
- - Old, alternate method of enabling components (e.g. `SSH2=1`) no longer
- supported.
- - Delete `SPNEGO` references. They were no-ops.
- - Drop support for Win9x environments.
- - Allow setting `OPENSSL_LIBS` independently from `OPENSSL_LIBPATH`.
- - Support autotools/CMake `libssh2` builds by default.
- - Respect `CURL_DLL_SUFFIX` in `-dyn` mode when building `curl.exe` and
- examples.
- - Assume standard directory layout with `LIBCARES_PATH`. (Instead of the
- long gone embedded one.)
- - Stop static linking with c-ares by default. Add
- `CPPFLAGS=-DCARES_STATICLIB` to enable it.
- - Reorganize internal layout to avoid redundancy and emit clean diffs
- between src/lib and example make files.
- - Delete unused variables.
- - Code cleanups/rework.
- - Comment and indentation fixes.
-
- Closes #9632
-
-- scripts/release-notes.pl: strip ci skip tag [ci skip]
-
- Ref: https://github.com/curl/curl/commit/e604a82cae922bf86403a94f5803ac5e4303ae97#commitcomment-85637701
+Stefan Eissing (2 Nov 2023)
- Reviewed-by: Daniel Stenberg
+- vtls: late clone of connection ssl config
- Closes #9634
+ - perform connection cache matching against `data->set.ssl.primary`
+ and proxy counterpart
+ - fully clone connection ssl config only when connection is used
-- Makefile.m32: delete legacy component bits [ci skip]
+ Closes #12237
- - Drop auto-detection of OpenSSL 1.0.2 and earlier. Now always defaulting
- to OpenSSL 1.1.0 and later, LibreSSL and BoringSSL.
+- msh3: error when built with CURL_DISABLE_SOCKETPAIR set
- - Drop `Invalid path to OpenSSL package` detection. OpenSSL has been
- using a standard file layout since 1.1.0, so this seems unnecessary
- now.
+ Reported-by: Gisle Vanem
+ Closes #12252
+ Fixes #12213
- - Drop special logic to enable Novell LDAP SDK support.
+Daniel Stenberg (2 Nov 2023)
- - Drop special logic to enable OpenLDAP LDAP SDK support. This seems
- to be distinct from native OpenLDAP, with support implemented inside
- `lib/ldap.c` (vs. `lib/openldap.c`) back when the latter did not exist
- yet in curl.
+- hsts: skip single-dot hostname
- - Add `-lwldap32` only if there is no other LDAP library (either native
- OpenLDAP, or SDKs above) present.
+ Reported-by: Maksymilian Arciemowicz
- - Update `doc/INSTALL.md` accordingly.
+ Closes #12247
- After this patch, it's necessary to make configration changes when using
- OpenSSL 1.0.2 or earlier, or the two LDAP SDKs.
+- vtls: fix build without proxy
- OpenSSL 1.0.2 and earlier:
- ```
- export OPENSSL_INCLUDE = <path-to-openssl>/outinc
- export OPENSSL_LIBPATH = <path-to-openssl>/out
- export OPENSSL_LIBS = -lssl32 -leay32 -lgdi32
- ```
+ Follow-up to bf0e278a3c54bc7fee7360da17c
- Novell LDAP SDK, previously enabled via `USE_LDAP_NOVELL=1`:
- ```
- export CURL_CFLAG_EXTRAS = -I<path-to-sdk>/inc -DCURL_HAS_NOVELL_LDAPSDK
- export CURL_LDFLAG_EXTRAS = -L<path-to-sdk>/lib/mscvc -lldapsdk -lldapssl -lldapx
- ```
+ closes #12243
+
+- docs/example/keepalive.c: show TCP keep-alive options
+
+ Closes #12242
+
+- lib1560: verify appending blank URL encoded query string
+
+- urlapi: skip appending NULL pointer query
+
+ Reported-by: kirbyn17 on hackerone
+
+ Closes #12240
+
+- lib1560: verify setting host to "" with and without URL encode
+
+- urlapi: avoid null deref if setting blank host to url encode
+
+ Reported-by: kirbyn17 on hackerone
+
+ Closes #12240
+
+- dynbuf: assert for NULL pointer inputs
+
+ Help us catch more mistakes.
+
+ Closes #12238
+
+- HTTP3: ngtcp2 builds are no longer experimental
+
+ The other HTTP/3 backends are still experimental.
+
+ Closes #12235
+
+Stefan Eissing (31 Oct 2023)
+
+- vtls: cleanup SSL config management
+
+ - remove `Curl_ssl_get_config()`, no longer needed
+
+ Closes #12204
+
+Daniel Stenberg (31 Oct 2023)
+
+- libcurl-thread.3: simplify the TLS section
+
+ All TLS libraries curl can use are threadsafe since OpenSSL 1.1.x, August
+ 2016.
+
+ Closes #12233
+
+- configure: better --disable-http
+
+ - disable HTTPS-proxy as well, since it can't work without HTTP
+
+ - curl_setup: when HTTP is disabled, also disable all features that are
+ HTTP-only
+
+ - version: HTTPS-proxy only exists if HTTP support exists
+
+ Closes #12223
+
+- http: consider resume with CURLOPT_FAILONERRROR and 416 to be fine
+
+ Finding a 'Content-Range:' in the response changed the handling.
+
+ Add test case 1475 to verify -C - with 416 and Content-Range: header,
+ which is almost exactly like test 194 which instead uses a fixed -C
+ offset. Adjusted test 194 to also be considered fine.
+
+ Fixes #10521
+ Reported-by: Smackd0wn
+ Fixes #12174
+ Reported-by: Anubhav Rai
+ Closes #12176
+
+Stefan Eissing (30 Oct 2023)
+
+- GHA: fix checkout of quictls repository to use correct branch name
+
+ Follow-up to c868b0e30f10cd0ac7
+
+ Closes #12232
+
+Daniel Stenberg (30 Oct 2023)
+
+- docs/example/localport.c: show off CURLOPT_LOCALPORT
+
+ Closes #12230
+
+- docs/examples/interface.c: show CURLOPT_INTERFACE use
+
+ Although super simple.
+
+ Closes #12229
+
+Viktor Szakats (30 Oct 2023)
+
+- build: fix compiler warning with auths disabled
- OpenLDAP LDAP SDK, previously enabled via `USE_LDAP_OPENLDAP=1`:
```
- export CURL_CFLAG_EXTRAS = -I<path-to-sdk>/include -DCURL_HAS_OPENLDAP_LDAPSDK
- export CURL_LDFLAG_EXTRAS = -L<path-to-sdk>/lib -lldap -llber
+ ./curl/lib/http.c:979:12: warning: unused function 'is_valid_auth_separator'
+ [-Wunused-function]
+ static int is_valid_auth_separator(char ch)
+ ^
+ 5 warnings generated.
```
- I haven't tested these scenarios, and in general we recommend using
- a recent OpenSSL release. Also, WinLDAP (the Windows default) and
- OpenLDAP (via `-DUSE_OPENLDAP`) are the LDAP options actively worked on
- in curl.
-
- Closes #9631
-
-Daniel Stenberg (2 Oct 2022)
-- vauth/ntlm.h: make line shorter than 80 columns
-
- Follow-up from 265fbd937
-
-Viktor Szakats (1 Oct 2022)
-- docs: update sourceforge project links [ci skip]
-
- SourceForge projects can now choose between two hostnames, with .io and
- .net ending. Both support HTTPS by default now. Opening the other variant
- will perm-redirected to the one chosen by the project.
-
- The .io -> .net redirection is done insecurely.
-
- Let's update the URLs to point to the current canonical endpoints to
- avoid any redirects.
-
- Closes #9630
-
-Daniel Stenberg (1 Oct 2022)
-- curl_url_set.3: document CURLU_APPENDQUERY proper
-
- Listed among the other supported flags.
-
- Reported-by: Robby Simpson
- Fixes #9628
- Closes #9629
-
-Viktor Szakats (1 Oct 2022)
-- Makefile.m32: cleanups and fixes [ci skip]
-
- - Add `-lcrypt32` once, and add it always for simplicity.
- - Delete broken link and reference to the pre-Vista WinIDN add-on.
- MS no longer distribute it.
- - Delete related `WINIDN_PATH` option. IDN is a system lib since Vista.
- - Sync `LIBCARES_PATH` default with the rest of dependencies.
- - Delete version numbers from dependency path defaults.
- - `libgsasl` package is now called `gsasl`.
- - Delete `libexpat` and `libxml2` references. No longer used by curl.
- - Delete `Edit the path below...` comments. We recommend to predefine
- those envvars instead.
- - `libcares.a` is not an internal dependency anymore. Stop using it as
- such.
- - `windres` `--include-dir` -> `-I`, `-F` -> `--target=` for readability.
- - Delete `STRIP`, `CURL_STRIP`, `AR` references from `src/Makefile.m32`.
- They were never used.
- - Stop to `clean` some objects twice in `src/Makefile.m32`.
- - Delete cvs-specific leftovers.
- - Finish resource support in examples make file.
- - Delete `-I<root>/lib` from examples make file.
- - Fix copyright start year in examples make file.
- - Delete duplicate `ftpuploadresume` input in examples make file.
- - Sync OpenSSL lib order, `SYNC` support, `PROOT` use, dependency path
- defaults, variables names and other internal bits between the three
- make files.
- - `lib/Makefile.m32` accepted custom options via `DLL_LIBS` envvar. This
- was lib-specific and possibly accidental. Use `CURL_LDFLAG_EXTRAS_DLL`
- envvar for the same effect.
- - Fix linking `curl.exe` and examples to wrong static libs with
- auto-detected OpenSSL 1.0.2 or earlier.
- - Add `-lgdi32` for OpenSSL 1.0.2 and earlier only.
- - Add link to Novell LDAP SDK and use a relative default path. Latest
- version is from 2016, linked to an outdated OpenSSL 1.0.1.
- - Whitespace and comment cleanups.
-
- TODO in a next commit:
-
- Delete built-in detection/logic for OpenSSL 1.0.2 and earlier, the Novell
- LDAP SDK and the other LDAP SDK (which is _not_ OpenLDAP). Write up the
- necessary custom envvars to configure them.
-
- Closes #9616
-
-Daniel Stenberg (30 Sep 2022)
+ Follow-up to e92edfbef64448ef461117769881f3ed776dec4e #11490
+
+ Closes #12227
+
+- build: require Windows XP or newer
+
+ After this patch we assume availability of `getaddrinfo` and
+ `freeaddrinfo`, first introduced in Windows XP. Meaning curl
+ now requires building for Windows XP as a minimum.
+
+ TODO: assume these also in autotools.
+
+ Ref: https://github.com/curl/curl/pull/12221#issuecomment-1783761806
+ Closes #12225
+
+- appveyor: bump one job to OpenSSL 3.1 (was 1.1.1)
+
+ Use 3.1 with the modern runner image.
+
+ We still use 1.1.1 in 8 jobs.
+
+ 1.1.1 is EOL since 2023-09-11:
+ https://www.openssl.org/blog/blog/2023/03/28/1.1.1-EOL/
+
+ Also:
+ - add missing SSL-backend to job descriptions.
+ - tidy up CPU in job descriptions.
+
+ Closes #12226
+
+Daniel Stenberg (30 Oct 2023)
+
- RELEASE-NOTES: synced
-- [Matt Holt brought this change]
+- GHA: bump ngtcp2, nghttp3, nghttp2 and quictls versions
- HTTP3.md: update Caddy example
+ ngtcp2 1.0.1
+ nghttp3 1.0.0
+ nghttp2 1.58.0
+ quictls 3.1.4+quic
- Closes #9623
+ also sync HTTP3.md with these changes
-- easy: fix the altsvc init for curl_easy_duphandle
+ Closes #12132
- It was using the old #ifdef which nothing sets anymore
+Kareem (29 Oct 2023)
- Closes #9624
+- wolfssl: add default case for wolfssl_connect_step1 switch
-- GHA: build tests in a separate step from the running of them
+ Closes #12218
- ... to make the output smaller for when you want to look at test
- failures.
+Jay Satiro (29 Oct 2023)
- Removed the examples build from msh3
+- curl_setup: disallow Windows IPv6 builds missing getaddrinfo
- Closes #9619
+ - On Windows if IPv6 is enabled but getaddrinfo is missing then #error
+ the build.
-Viktor Szakats (29 Sep 2022)
-- ldap: delete stray CURL_HAS_MOZILLA_LDAP reference
+ curl can be built with IPv6 support (ENABLE_IPV6) but without the
+ ability to resolve hosts to IPv6 addresses (HAVE_GETADDRINFO). On
+ Windows this is highly unlikely and should be considered a bad build
+ configuration.
- Added in 68b215157fdf69612edebdb220b3804822277822, while adding openldap
- support. This is also the single mention of this constant in the source
- tree and also in that commit. Based on these, it seems like an accident.
+ Such a bad configuration has already given us a bug that was hard to
+ diagnose. See #12134 and #12136 for discussion.
- Delete this reference.
+ Ref: https://github.com/curl/curl/issues/12134
+ Ref: https://github.com/curl/curl/pull/12136
- Reviewed-by: Daniel Stenberg
+ Closes https://github.com/curl/curl/pull/12221
- Closes #9625
+Nico Rieck (29 Oct 2023)
-- docs: spelling nits
+- openssl: make CURLSSLOPT_NATIVE_CA import Windows intermediate CAs
- - MingW -> MinGW (Minimalist GNU for Windows)
- - f.e. -> e.g.
- - some whitespace and punctuation.
+ - If CURLSSLOPT_NATIVE_CA on Windows then import from intermediate CA
+ "CA" store after importing from root CA "ROOT" store.
- Reviewed-by: Daniel Stenberg
+ This change allows curl to work in situations where a server does not
+ send all intermediate certs and they are present in the "CA" store (the
+ store with intermediate CAs). This is already allowed by the Schannel
+ backend.
- Closes #9622
+ Also this change makes partial chain verification possible for those
+ certs since we allow partial chain verification by default for OpenSSL
+ (unless CURLSSLOPT_NO_PARTIALCHAIN). This is not allowed by the Schannel
+ backend.
-Daniel Stenberg (29 Sep 2022)
-- [Philip Heiduck brought this change]
+ Prior to this change CURLSSLOPT_NATIVE_CA only imported "ROOT" certs.
- cirrus-ci: add macOS build with m1
+ Fixes https://github.com/curl/curl/issues/12155
+ Closes https://github.com/curl/curl/pull/12185
- Signed-off-by: Philip H <47042125+pheiduck@users.noreply.github.com>
+Viktor Szakats (28 Oct 2023)
- Closes #9565
+- Makefile.mk: fix `-rtmp` option for non-Windows [ci skip]
-- [Patrick Monnerat brought this change]
+Daniel Stenberg (28 Oct 2023)
- lib: sanitize conditional exclusion around MIME
+- asyn-ares: handle no connection in the addrinfo callback
- The introduction of CURL_DISABLE_MIME came with some additional bugs:
- - Disabled MIME is compiled-in anyway if SMTP and/or IMAP is enabled.
- - CURLOPT_MIMEPOST, CURLOPT_MIME_OPTIONS and CURLOPT_HTTPHEADER are
- conditioned on HTTP, although also needed for SMTP and IMAP MIME mail
- uploads.
+ To avoid crashing.
- In addition, the CURLOPT_HTTPHEADER and --header documentation does not
- mention their use for MIME mail.
+ Follow-up from 56a4db2
+ Closes #12219
- This commit fixes the problems above.
+Jay Satiro (28 Oct 2023)
- Closes #9610
+- hostip6: fix DEBUG_ADDRINFO builds
-- [Thiago Suchorski brought this change]
+ - Removed unused and incorrect parameter from dump_addrinfo().
- docs: minor grammar fixes
+ Bug: https://github.com/curl/curl/commit/56a4db2e#commitcomment-131050442
+ Reported-by: Gisle Vanem
- Closes #9609
+ Closes https://github.com/curl/curl/pull/12212
-- CURLSHOPT_UNLOCKFUNC.3: the callback as no 'access' argument
+Viktor Szakats (28 Oct 2023)
- Probably a copy and paste error from the lock function man page.
+- Makefile.mk: restore `_mingw.h` for default `_WIN32_WINNT`
- Reported-by: Robby Simpson
- Fixes #9612
- Closes #9613
+ In 8.4.0 we deleted `_mingw.h` as part of purging old-mingw support.
+ Turns out `_mingw.h` had the side-effect of setting a default
+ `_WIN32_WINNT` value expected by `lib/config-win32.h` to enable
+ `getaddrinfo` support in `Makefile.mk` mingw-w64 builds. This caused
+ disabling support for this unless specifying the value manually.
-- CURLOPT_ACCEPT_ENCODING.3: remove "four" as they are five
+ Restore this header and update its comment to tell why we continue
+ to need it.
- ... instead just list the supported encodings.
+ This triggered a regression in official Windows curl builds starting
+ with 8.4.0_1. Fixed in 8.4.0_6. (8.5.0 will be using CMake.)
- Reported-by: ProceduralMan on github
- Fixes #9614
- Closes #9615
+ Regression from 38029101e2d78ba125732b3bab6ec267b80a0e72 #11625
-Dan Fandrich (28 Sep 2022)
-- tests: Remove a duplicated keyword
+ Reported-by: zhengqwe on github
+ Helped-by: Nico Rieck
+ Fixes #12134
+ Fixes #12136
+ Closes #12217
-- docs: document more server names for test files
+- hostip: silence compiler warning `-Wparentheses-equality`
-Daniel Stenberg (28 Sep 2022)
-- altsvc: reject bad port numbers
+ Seen with LLVM 17.
- The existing code tried but did not properly reject alternative services
- using negative or too large port numbers.
+ ```
+ hostip.c:1336:22: warning: equality comparison with extraneous parentheses [-
+ Wparentheses-equality]
+ 1336 | (a->ai_family == PF_INET)) {
+ | ~~~~~~~~~~~~~^~~~~~~~~~
+ hostip.c:1336:22: note: remove extraneous parentheses around the comparison t
+ o silence this warning
+ 1336 | (a->ai_family == PF_INET)) {
+ | ~ ^ ~
+ hostip.c:1336:22: note: use '=' to turn this equality comparison into an assi
+ gnment
+ 1336 | (a->ai_family == PF_INET)) {
+ | ^~
+ | =
+ 1 warning generated.
+ ```
- With this fix, the logic now also flushes the old entries immediately
- before adding a new one, making a following header with an illegal entry
- not flush the already stored entry.
+ Follow-up to b651aba0962bb31353f55de4dc35f745952a1b10 #12145
- Report from the ongoing source code audit by Trail of Bits.
+ Reviewed-by: Daniel Stenberg
+ Closes #12215
+
+Stefan Eissing (27 Oct 2023)
+
+- doh: use PIPEWAIT when HTTP/2 is attempted
+
+ Closes #12214
+
+Daniel Stenberg (27 Oct 2023)
+
+- setopt: remove outdated cookie comment
- Adjusted test 356 to verify.
+ Closes #12206
- Closes #9607
+Stefan Eissing (27 Oct 2023)
-- functypes: provide the recv and send arg and return types
+- cfilter: provide call to tell connection to forget a socket
- This header is for providing the argument types for recv() and send()
- when built to not use a dedicated config-[platfor].h file.
+ - fixed libssh.c workaround for a socket being closed by
+ the library
+ - eliminate the terrible hack in cf-socket.c to guess when
+ this happened and try not closing the socket again.
+ - fixes race in eyeballing when socket could have failed to
+ be closed for a discarded connect attempt
- Remove the slow brute-force checks from configure and cmake.
+ Closes #12207
- This change also removes the use of the types for select, as they were
- not used in code.
+- url: protocol handler lookup tidy-up
- Closes #9592
+ - rename lookup to what it does
+ - use ARRAYSIZE instead of NULL check for end
+ - offer alternate lookup for 0-terminated strings
-- urlapi: reject more bad characters from the host name field
+ Closes #12216
- Extended test 1560 to verify
+Viktor Szakats (27 Oct 2023)
- Report from the ongoing source code audit by Trail of Bits.
+- build: variadic macro tidy-ups
- Closes #9608
+ - delete unused `HAVE_VARIADIC_MACROS_C99/GCC` feature checks.
+ (both autotools and CMake.)
+ - delete duplicate `NULL` check in `Curl_trc_cf_infof()`.
+ - fix compiler warning in `CURL_DISABLE_VERBOSE_STRINGS` builds.
+ ```
+ ./lib/cf-socket.c:122:41: warning: unused parameter 'data' [-Wunused-parame
+ ter]
+ static void nosigpipe(struct Curl_easy *data,
+ ^
+ ```
+ - fix `#ifdef` comments in `lib/curl_trc.{c,h}`.
+ - fix indentation in some `infof()` calls.
-- configure: deprecate builds with small curl_off_t
+ Follow-up to dac293cfb7026b1ca4175d88b80f1432d3d3c684 #12167
- If curl_off_t turns out to be smaller than 8 bytes,
- --with-n64-deprecated needs to be used to allow the build to
- continue. This is to highlight the fact that support for such builds is
- going away next year.
+ Cherry-picked from #12105
+ Closes #12210
- Also mentioned in DEPRECATED.md
+- cmake: speed up threads setup for Windows
- Closes #9605
+ Win32 threads are always available. We enabled them unconditionally
+ (with `ENABLE_THREADED_RESOLVER`). CMake built-in thread detection
+ logic has this condition hard-coded for Windows as well (since at least
+ 2007).
-- [Patrick Monnerat brought this change]
+ Instead of doing all the work of detecting pthread combinations on
+ Windows, then discarding those results, skip these efforts and assume
+ built-in thread support when building for Windows.
- http, vauth: always provide Curl_allow_auth_to_host() functionality
+ This saves 1-3 slow CMake configuration steps.
- This function is currently located in the lib/http.c module and is
- therefore disabled by the CURL_DISABLE_HTTP conditional token.
+ Reviewed-by: Daniel Stenberg
+ Closes #12202
+
+- cmake: speed up zstd detection
+
+ Before this patch we detected the presence of a specific zstd API to
+ see if we can use the library. zstd published that API in its first
+ stable release: v1.0.0 (2016-08-31).
- As it may be called by TLS backends, disabling HTTP results in an
- undefined reference error at link time.
+ Replace that method by detecting the zstd library version instead and
+ accepting if it's v1.0.0 or newer. Also display this detected version
+ and display a warning if the zstd found is unfit for curl.
- Move this function to vauth/vauth.c to always provide it and rename it
- as Curl_auth_allowed_to_host() to respect the vauth module naming
- convention.
+ We use the same version detection method as zstd itself, via its public
+ C header.
- Closes #9600
+ This deviates from autotools which keeps using the slow method of
+ looking for the API by building a test program. The outcome is the same
+ as long as zstd keeps offering this API.
+
+ Ref: https://github.com/facebook/zstd/commit/5a0c8e24395079f8e8cdc90aa1659cd5
+ ab1b7427 (2016-08-12, committed)
+ Ref: https://github.com/facebook/zstd/releases/tag/v0.8.1 (2016-08-18, first
+ released)
+ Ref: https://github.com/facebook/zstd/releases/tag/v1.0.0
+
+ Reviewed-by: Daniel Stenberg
+ Closes #12200
-- ngtcp2: fix C89 compliance nit
+Daniel Stenberg (26 Oct 2023)
-- openssl: make certinfo available for QUIC
+- openssl: fix infof() to avoid compiler warning for %s with null
- Curl_ossl_certchain() is now an exported function in lib/vtls/openssl.c that
- can also be used from quiche.c and ngtcp2.c to get the cert chain for QUIC
- connections as well.
+ vtls/openssl.c: In function ‘ossl_connect_step2’:
+ ../lib/curl_trc.h:120:10: error: ‘%s’ directive argument is null [-Werror
+ =format-overflow=]
+ 120 | Curl_infof(data, __VA_ARGS__); } while(0)
+ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ vtls/openssl.c:4008:5: note: in expansion of macro ‘infof’
+ 4008 | infof(data, "SSL connection using %s / %s / %s / %s",
+ | ^~~~~
+ vtls/openssl.c:4008:49: note: format string is defined here
+ 4008 | infof(data, "SSL connection using %s / %s / %s / %s",
+ | ^~
- The *certchain function was moved to the top of the file for this reason.
+ Follow-up to b6e6d4ff8f253c8b8055bab
+ Closes #12196
- Reported-by: Eloy Degen
- Fixes #9584
- Closes #9597
+Stefan Eissing (26 Oct 2023)
+
+- lib: apache style infof and trace macros/functions
+
+ - test for a simplified C99 variadic check
+ - args to infof() in --disable-verbose are no longer disregarded but
+ must compile.
+
+ Closes #12167
+ Fixes #12083
+ Fixes #11880
+ Fixes #11891
+
+Daniel Stenberg (26 Oct 2023)
- RELEASE-NOTES: synced
-- DEPRECATE.md: Support for systems without 64 bit data types
+Stefan Eissing (26 Oct 2023)
- Closes #9604
+- urldata: move async resolver state from easy handle to connectdata
-- [Patrick Monnerat brought this change]
+ - resolving is done for a connection, not for every transfer
+ - save create/dup/free of a cares channel for each transfer
+ - check values of setopt calls against a local channel if no
+ connection has been attached yet, when needed.
- tests: skip mime/form tests when mime is not built-in
+ Closes #12198
- Closes #9596
+Daniel Stenberg (26 Oct 2023)
-- url: rename function due to name-clash in Watt-32
+- CURLOPT_WRITEFUNCTION.3: clarify what libcurl returns for CURL_WRITEFUNC_ERRO
+ R
- Follow-up to 2481dbe5f4f58 and applies the change the way it was
- intended.
+ It returns CURLE_WRITE_ERROR. It was not previously stated clearly.
+
+ Reported-by: enWILLYado on github
+ Fixes #12201
+ Closes #12203
+
+Viktor Szakats (25 Oct 2023)
-Viktor Szakats (26 Sep 2022)
-- windows: adjust name of two internal public functions
+- autotools: update references to deleted `crypt-auth` option
- According to `docs/INTERNALS.md`, internal function names spanning source
- files start with uppercase `Curl_`. Bring these two functions in
- alignment with this.
+ Delete leftovers of the `crypt-auth` `./configure` option and
+ add the new ones that replaced them.
- This also stops exporting them from `libcurl.dll` in autotools builds.
+ Follow-up to e92edfbef64448ef461117769881f3ed776dec4e #11490
Reviewed-by: Daniel Stenberg
+ Closes #12194
+
+Stefan Eissing (25 Oct 2023)
+
+- lib: introduce struct easy_poll_set for poll information
+
+ Connection filter had a `get_select_socks()` method, inspired by the
+ various `getsocks` functions involved during the lifetime of a
+ transfer. These, depending on transfer state (CONNECT/DO/DONE/ etc.),
+ return sockets to monitor and flag if this shall be done for POLLIN
+ and/or POLLOUT.
+
+ Due to this design, sockets and flags could only be added, not
+ removed. This led to problems in filters like HTTP/2 where flow control
+ prohibits the sending of data until the peer increases the flow
+ window. The general transfer loop wants to write, adds POLLOUT, the
+ socket is writeable but no data can be written.
+
+ This leads to cpu busy loops. To prevent that, HTTP/2 did set the
+ `SEND_HOLD` flag of such a blocked transfer, so the transfer loop cedes
+ further attempts. This works if only one such filter is involved. If a
+ HTTP/2 transfer goes through a HTTP/2 proxy, two filters are
+ setting/clearing this flag and may step on each other's toes.
+
+ Connection filters `get_select_socks()` is replaced by
+ `adjust_pollset()`. They get passed a `struct easy_pollset` that keeps
+ up to `MAX_SOCKSPEREASYHANDLE` sockets and their `POLLIN|POLLOUT`
+ flags. This struct is initialized in `multi_getsock()` by calling the
+ various `getsocks()` implementations based on transfer state, as before.
+
+ After protocol handlers/transfer loop have set the sockets and flags
+ they want, the `easy_pollset` is *always* passed to the filters. Filters
+ "higher" in the chain are called first, starting at the first
+ not-yet-connection one. Each filter may add sockets and/or change
+ flags. When all flags are removed, the socket itself is removed from the
+ pollset.
- Closes #9598
+ Example:
-Daniel Stenberg (26 Sep 2022)
-- [Gisle Vanem brought this change]
+ * transfer wants to send, adds POLLOUT
+ * http/2 filter has a flow control block, removes POLLOUT and adds
+ POLLIN (it is waiting on a WINDOW_UPDATE from the server)
+ * TLS filter is connected and changes nothing
+ * h2-proxy filter also has a flow control block on its tunnel stream,
+ removes POLLOUT and adds POLLIN also.
+ * socket filter is connected and changes nothing
+ * The resulting pollset is then mixed together with all other transfers
+ and their pollsets, just as before.
- url: rename function due to name-clash in Watt-32
+ Use of `SEND_HOLD` is no longer necessary in the filters.
- Since the commit 764c958c52edb427f39, there was a new function called
- resolve_ip(). This clashes with an internal function in Watt-32.
+ All filters are adapted for the changed method. The handling in
+ `multi.c` has been adjusted, but its state handling the the protocol
+ handlers' `getsocks` method are untouched.
- Closes #9585
+ The most affected filters are http/2, ngtcp2, quiche and h2-proxy. TLS
+ filters needed to be adjusted for the connecting handshake read/write
+ handling.
-Jay Satiro (26 Sep 2022)
-- schannel: ban server ALPN change during recv renegotiation
+ No noticeable difference in performance was detected in local scorecard
+ runs.
- By the time schannel_recv is renegotiating the connection, libcurl has
- already decided on a protocol and it is too late for the server to
- select a protocol via ALPN except for the originally selected protocol.
+ Closes #11833
- Ref: https://github.com/curl/curl/issues/9451
+Daniel Stenberg (25 Oct 2023)
- Closes https://github.com/curl/curl/pull/9463
+- tests/README: SOCKS tests are not using OpenSSH, it has its own server
-Daniel Stenberg (26 Sep 2022)
-- url: a zero-length userinfo part in the URL is still a (blank) user
+ Follow-up to 04fd67555cc
- Adjusted test 1560 to verify
+ Closes #12195
- Reported-by: Jay Satiro
+Jacob Hoffman-Andrews (25 Oct 2023)
- Fixes #9088
- Closes #9590
+- tets: make test documentation more user-friendly
-Viktor Szakats (25 Sep 2022)
-- autotools: allow --enable-symbol-hiding with windows
+ Put the instructions to run tests right at the top of tests/README.md.
- This local autotools logic was put in place in
- 9e24b9c7afbcb81120af4cf3f6cdee49a06d8224 (in 2012) which disabled it for
- Windows unconditionally. Testing reveals that it actually works with
- tested toolchains (mingw-w64 and CI ones), so let's allow this build
- feature on that platform. Bringing this in sync with CMake, which already
- supported this.
+ Give instructions to read the runtests.1 man page for information
+ about flags. Delete redundant copy of the flags documentation in the
+ README.
- Reviewed-by: Jay Satiro
+ Add a mention in README.md of the important parallelism flag, to make
+ test runs go much faster.
- Closes #9586
+ Move documentation of output line format into the runtests.1 man page,
+ and update it with missing flags.
-- autotools: reduce brute-force when detecting recv/send arg list
+ Fix the order of two flags in the man page.
- autotools uses brute-force to detect `recv`/`send`/`select` argument
- lists, by interating through _all_ argument type combinations on each
- `./configure` run. This logic exists since
- 01fa02d0b545e1433dced2430561f8c0c72b74a9 (from 2006) and was a bit later
- extended with Windows support.
+ Closes #12193
- This results in a worst-case number of compile + link cycles as below:
- - `recv`: 96
- - `send`: 192
- - `select`: 60
- Total: 348 (the number of curl C source files is 195, for comparison)
+Viktor Szakats (24 Oct 2023)
- Notice that e.g. curl-for-win autotools builds require two `./configure`
- invocations, doubling these numbers.
+- cmake: pre-fill rest of detection values for Windows
- `recv` on Windows was especially unlucky because `SOCKET` (the correct
- choice there) was listed _last_ in one of the outer trial loops. This
- resulted in lengthy waits while autotools was trying all invalid
- combinations first, wasting cycles, disk writes and slowing down
- iteration.
+ The goal of this patch is to avoid unnecessary feature detection work
+ when doing Windows builds with CMake. Do this by pre-filling well-known
+ detection results for Windows and specifically for mingw-w64 and MSVC
+ compilers. Also limit feature checks to platforms where the results are
+ actually used. Drop a few redundant ones. And some tidying up.
- This patch reduces the amount of idle work by reordering the tests in
- a way to succeed first on a well-known platform such as Windows, and
- also on non-Windows by testing for POSIX prototypes first, on the
- assumption that these are the most likely candidates these days. (We do
- not touch `select`, where the order was already optimal for these
- platforms.)
+ - pre-fill remaining detection values in Windows CMake builds.
- For non-Windows, this means to try a return value of `ssize_t` first,
- then `int`, reordering the buffer argument type to try `void *` first,
- then `byte *`, and prefer the `const` flavor with `send`. If we are
- here, also stop testing for `SOCKET` type in non-Windows builds.
+ Based on actual detection results observed in CI runs, preceding
+ similar work over libssh2 and matching up values with
+ `lib/config-win32.h`.
- After the patch, detection on Windows is instantaneous. It should also be
- faster on popular platforms such as Linux and BSD-based ones.
+ This brings down CMake configuration time from 58 to 14 seconds on the
+ same local machine.
- If there are known-good variations for other platforms, they can also be
- fast-tracked like above, given a way to check for that platform inside
- the autotools logic.
+ On AppVeyor CI this translates to:
+ - 128 seconds -> 50 seconds VS2022 MSVC with OpenSSL (per CMake job):
+ https://ci.appveyor.com/project/curlorg/curl/builds/48208419/job/4gw66ecr
+ jpy7necb#L296
+ https://ci.appveyor.com/project/curlorg/curl/builds/48217440/job/8m4fwrr2
+ fe249uo8#L186
+ - 62 seconds -> 16 seconds VS2017 MINGW (per CMake job):
+ https://ci.appveyor.com/project/curlorg/curl/builds/48208419/job/s1y8q5iv
+ lcs7ub29?fullLog=true#L290
+ https://ci.appveyor.com/project/curlorg/curl/builds/48217440/job/pchpxyjs
+ yc9kl13a?fullLog=true#L194
- Reviewed-by: Daniel Stenberg
+ The formula is about 1-3 seconds delay for each detection. Almost all
+ of these trigger a full compile-link cycle behind the scenes, slow
+ even today, both cross and native, mingw-w64 and apparently MSVC too.
+ Enabling .map files or other custom build features slows it down
+ further. (Similar is expected for autotools configure.)
+
+ - stop detecting `idn2.h` if idn2 was deselected.
+ autotools does this.
- Closes #9591
+ - stop detecting `idn2.h` if idn2 was not found.
+ This deviates from autotools. Source code requires both header and
+ lib, so this is still correct, but faster.
-Daniel Stenberg (23 Sep 2022)
-- TODO: Provide the error body from a CONNECT response
+ - limit `ADDRESS_FAMILY` detection to Windows.
- Spellchecked-by: Jay Satiro
+ - normalize `HAVE_WIN32_WINNT` value to lowercase `0x0a12` format.
- Closes #9513
- Closes #9581
+ - pre-fill `HAVE_WIN32_WINNT`-dependent detection results.
+ Saving 4 (slow) feature-detections in most builds: `getaddrinfo`,
+ `freeaddrinfo`, `inet_ntop`, `inet_pton`
-Viktor Szakats (23 Sep 2022)
-- windows: autotools .rc warnings fixup
+ - fix pre-filled `HAVE_SYS_TIME_H`, `HAVE_SYS_PARAM_H`,
+ `HAVE_GETTIMEOFDAY` for mingw-w64.
+ Luckily this do not change build results, as `WIN32` took
+ priority over `HAVE_GETTIMEOFDAY` with the current source
+ code.
- Move `LT_LANG([Windows Resource])` after `XC_LIBTOOL`, fixing:
+ - limit `HAVE_CLOCK_GETTIME_MONOTONIC_RAW` and
+ `HAVE_CLOCK_GETTIME_MONOTONIC` detections to non-Windows.
+ We're not using these in the source code for Windows.
- - Warnings when running `autoreconf -fi`.
+ - reduce compiler warning noise in CMake internal logs:
+ - fix to include `winsock2.h` before `windows.h`.
+ Apply it to autotools test snippets too.
+ - delete previous `-D_WINSOCKAPI_=` hack that aimed to fix the above.
+ - cleanup `CMake/CurlTests.c` to emit less warnings.
- - Warning when compiling .rc files:
- libtool: compile: unable to infer tagged configuration
- libtool: error: specify a tag with '--tag'
+ - delete redundant `HAVE_MACRO_SIGSETJMP` feature check.
+ It was the same check as `HAVE_SIGSETJMP`.
- Follow up to 6de7322c03d5b4d91576a7d9fc893e03cc9d1057
- Ref: https://github.com/curl/curl/pull/9521#issuecomment-1256291156
+ - delete 'experimental' marking from `CURL_USE_OPENSSL`.
- Suggested-by: Patrick Monnerat
- Closes #9582
+ - show CMake version via `CMakeLists.txt`.
+ Credit to the `zlib-ng` project for the idea:
+ https://github.com/zlib-ng/zlib-ng/blob/61e181c8ae93dbf56040336179c9954078b
+ d1399/CMakeLists.txt#L7
-Daniel Stenberg (23 Sep 2022)
-- [Randall S. Becker brought this change]
+ - make `CMake/CurlTests.c` pass `checksrc`.
- curl_setup: disable use of FLOSS for 64-bit NonStop builds
+ - `CMake/WindowsCache.cmake` tidy-ups.
- Older 32-bit builds currently need FLOSS. This dependency may be removed
- in future OS releases.
+ - replace `WIN32` guard with `_WIN32` in `CMake/CurlTests.c`.
- Signed-off-by: Randall S. Becker <randall.becker@nexbridge.ca>
+ Closes #12044
- Closes #9575
+Jay Satiro (24 Oct 2023)
-- [Patrick Monnerat brought this change]
+- page-footer: clarify exit code 25
- tool: remove dead code
+ - Clarify that curl tool exit code 25 means an upload failed to start.
- Add a debug assertion to verify protocols included/excluded in a set
- are always tokenized.
+ Exit code 25 is equivalent to CURLE_UPLOAD_FAILED (25). Prior to this
+ change the documentation only mentioned the case of FTP STOR failing.
- Follow-up to commit 677266c.
+ Reported-by: Emanuele Torre
- Closes #9576
+ Ref: https://github.com/curl/curl/blob/curl-8_4_0/docs/libcurl/libcurl-errors
+ .3#L113-L115
-- [Patrick Monnerat brought this change]
+ Fixes https://github.com/curl/curl/issues/12189
+ Closes https://github.com/curl/curl/pull/12190
- lib: prepare the incoming of additional protocols
+Daniel Stenberg (24 Oct 2023)
- Move the curl_prot_t to its own conditional block. Introduce symbol
- PROTO_TYPE_SMALL to control it.
+- scripts/cijobs.pl: adjust for appveyor
- Fix a cast in a curl_prot_t assignment.
- Remove an outdated comment.
+ Follow-up to a1d73a6bb
- Follow-up to cd5ca80.
+Alex Bozarth (24 Oct 2023)
- Closes #9534
+- OpenSSL: Include SIG and KEM algorithms in verbose
-- msh3: change the static_assert to make the code C89
+ Currently the verbose output does not include which algorithms are used
+ for the signature and key exchange when using OpenSSL. Including the
+ algorithms used will enable better debugging when working on using new
+ algorithm implementations. Know what algorithms are used has become more
+ important with the fast growing research into new quantum-safe
+ algorithms.
-- bearssl: make it proper C89 compliant
+ This implementation includes a build time check for the OpenSSL version
+ to use a new function that will be included in OpenSSL 3.2 that was
+ introduced in openssl/openssl@6866824
-- curl-compilers.m4: for gcc + want warnings, set gnu89 standard
+ Based-on-patch-by: Martin Schmatz <mrt@zurich.ibm.com>
+ Closes #12030
- To better verify that the code is C89
+Daniel Stenberg (23 Oct 2023)
- Closes #9542
+- http2: provide an error callback and failf the message
-- [Patrick Monnerat brought this change]
+ Getting nghttp2's error message helps users understand what's going
+ on. For example when the connection is brought down due a forbidden
+ header is used - as that header is then not displayed by curl itself.
- lib517: fix C89 constant signedness
+ Example:
- In C89, positive integer literals that overflow an int but not an
- unsigned int may be understood as a negative int.
+ curl: (92) Invalid HTTP header field was received: frame type: 1,
+ stream: 1, name: [upgrade], value: [h2,h2c]
- lib517.c:129:3: warning: this decimal constant is unsigned only in ISO C90
- {"Sun, 06 Nov 2044 08:49:37 GMT", 2362034977 },
- ^
+ Ref: #12172
+ Closes #12179
- Closes #9572
+Turiiya (23 Oct 2023)
-- mprintf: use snprintf if available
+- BINDINGS: add V binding
- This is the single place in libcurl code where it uses the "native"
- s(n)printf() function. Used for writing floats. The use has been
- reviewed and vetted and uses a HUGE target buffer, but switching to
- snprintf() still makes this safer and removes build-time warnings.
+ Closes #12182
- Reported-by: Philip Heiduck
+Daniel Stenberg (22 Oct 2023)
- Fixes #9569
- Closes #9570
+- configure: check for the fseeko declaration too
-- docs: tag curl options better in man pages
+ ... and make the code require both symbol and declaration.
- As it makes them links in the HTML versions.
+ This is because for Android, the symbol is always present in the lib at
+ build-time even when not actually available in run-time.
- Verified by the extended test 1176
+ Assisted-by: Viktor Szakats
+ Reported-by: 12932 on github
+ Fixes #12086
+ Closes #12158
-- symbols-in-versions: CURLOPT_ENCODING is deprecated since 7.21.6
+Viktor Szakats (22 Oct 2023)
-- manpage-syntax.pl: all libcurl option symbols should be \fI-tagged
+- cmake: fix OpenSSL quic detection in quiche builds
- ... as that makes them links to their corresponding man page.
+ An orphan call to `CheckQuicSupportInOpenSSL()` remained after a recent
+ update when checking QUIC for quiche. Move back QUIC detection to
+ a function and fixup callers to use that. Also make sure that quiche
+ gets QUIC from BoringSSL, because it doesn't support other forks at this
+ time.
- This script is used for test 1173.
+ Regression from dee310d54261f9a8416e87d50bccfe2cbe404949 #11555
- Closes #9574
+ Reported-by: Casey Bodley <cbodley@redhat.com>
+ Fixes #12160
+ Closes #12162
+
+Daniel Stenberg (22 Oct 2023)
- RELEASE-NOTES: synced
-- [Patrick Monnerat brought this change]
+ bump to 8.5.0 for pending release
- tool: remove protocol count limitation
+Dan Fandrich (21 Oct 2023)
- Replace bit mask protocol sets by null-terminated arrays of protocol
- tokens. These are the addresses of the protocol names returned by
- curl_version_info().
+- test3103: add missing quotes around a test tag attribute
- Protocol names are sorted case-insensitively before output to satisfy CI
- tests matches consistency.
+Loïc Yhuel (21 Oct 2023)
- The protocol list returned by curl_version_info() is augmented with all
- RTMP protocol variants.
+- tool: fix --capath when proxy support is disabled
- Test 1401 adjusted for new alpha ordered output.
+ After 95e8515ca0, --capath always sets CURLOPT_PROXY_CAPATH, which fails
+ with CURLE_UNKNOWN_OPTION when proxy support is disabled.
- Closes #9546
+ Closes #12089
-- test972: verify the output without using external tool
+Daniel Stenberg (21 Oct 2023)
- It seems too restrictive to assume and use an external tool to verify
- the JSON. This now verifies the outut byte per byte. We could consider
- building a local "JSON verifyer" in a future.
+- openldap: move the alloc of ldapconninfo to *connect()
- Remove 'jsonlint' from the CI job.
+ Fixes a minor memory leak on LDAP connection reuse.
- Reported-by: Marcel Raad
- Fixes #9563
- Closes #9564
+ Doing the allocation already in *setup_connection() is wrong since that
+ connect struct might get discarded early when an existing connection is
+ reused instead.
+
+ Closes #12166
+
+- openldap: set the callback argument in oldap_do
+
+ ... to make sure it has the current 'data' pointer and not a stale old
+ one.
+
+ Reported-by: Dan Fandrich
+ Closes #12166
-- hostip: lazily wait to figure out if IPv6 works until needed
+- gnutls: support CURLSSLOPT_NATIVE_CA
- The check may take many milliseconds, so now it is performed once the
- value is first needed. Also, this change makes sure that the value is
- not used if the resolve is set to be IPv4-only.
+ Remove the CURL_CA_FALLBACK logic. That build option was added to allow
+ primarily OpenSSL to use the default paths for loading the CA certs. For
+ GnuTLS it was instead made to load the "system certs", which is
+ different and not desirable.
- Closes #9553
+ The native CA store loading is now asked for with this option.
-- curl.h: fix mention of wrong error code in comment
+ Follow-up to 7b55279d1d856
- The same error and comment were also used and is now corrected in
- CURLOPT_SSH_KEYFUNCTION.3
+ Co-authored-by: Jay Satiro
-- symbol-scan.pl: scan and verify .3 man pages
+ Closes #12137
- This script now also finds all .3 man pages in docs/include and
- docs/include/opts, extracts all uses of CURL* symbols and verifies that all
- symbols mentioned in docs are defined in public headers.
+Stefan Eissing (21 Oct 2023)
- A "global symbol" is one of those matching a known prefix and the script makes
- an attempt to check all/most of them. Just using *all* symbols that match
- CURL* proved matching a little too many other references as well and turned
- difficult turning into something useful.
+- RTSP: improved RTP parser
- Closes #9544
+ - fix HTTP header parsing to report incomplete
+ lines it buffers as consumed!
+ - re-implement the RTP parser for interleave RTP
+ messages for robustness. It is now keeping its
+ state at the connection
+ - RTSP protocol handler "readwrite" implementation
+ now tracks if the response is before/in/after
+ header parsing or "in" a bod by calling
+ "Curl_http_readwrite_headers()" itself. This
+ allows it to know when non-RTP bytes are "junk"
+ or HEADER or BODY.
+ - tested with #12035 and various small receive
+ sizes where current master fails
-- symbols-in-versions: add missing LIBCURL* symbols
+ Closes #12052
-- symbol-scan.pl: also check for LIBCURL* symbols
+- http2: header conversion tightening
- Closes #9544
+ - fold the code to convert dynhds to the nghttp2 structs
+ into a dynhds internal method
+ - saves code duplication
+ - pacifies compiler analyzers
-- docs/libcurl/symbols-in-versions: add several missing symbols
+ Closes #12097
-- test1119: scan all public headers
+Daniel Stenberg (21 Oct 2023)
- Previously this test only scanned a subset of the headers, which made us
- accidentally miss symbols that were provided in the others. Now, the script
- iterates over all headers present in include/curl.
+- curl_ntlm_wb: fix elif typo
- Closes #9544
+ Reported-by: Manfred Schwarb
+ Follow-up to d4314cdf65ae
+ Bug: https://github.com/curl/curl/commit/d4314cdf65aee295db627016934bd9eb621a
+ b077#r130551295
-- [Patrick Monnerat brought this change]
+Dan Fandrich (20 Oct 2023)
- examples/chkspeed: improve portability
+- test1683: remove commented-out check alternatives
- The example program chkspeed uses strncasecmp() which is not portable
- across systems. Replace calls to this function by tests on characters.
+ Python precheck/postcheck alternatives were included but commented out.
+ Since these are not used and perl is guaranteed to be available to run
+ the perl versions anyway, the Python ones are removed.
- Closes #9562
+Daniel Stenberg (20 Oct 2023)
-- easy: fix the #include order
+- hostip: show the list of IPs when resolving is done
- The mentioned "last 3 includes" order should be respected. easy_lock.h should
- be included before those three.
+ Getting 'curl.se' today then gets this verbose output which might help
+ debugging connectivity related matters.
- Reported-by: Yuriy Chernyshov
- Fixes #9560
- Closes #9561
+ * Host curl.se:80 was resolved.
+ * IPv6: 2a04:4e42::347, 2a04:4e42:200::347, 2a04:4e42:400::347,
+ 2a04:4e42:600::347, 2a04:4e42:800::347, 2a04:4e42:a00::347,
+ 2a04:4e42:c00::347, 2a04:4e42:e00::347
+ * IPv4: 151.101.193.91, 151.101.1.91, 151.101.65.91, 151.101.129.91
-- docs: spellfixes
+ Co-authored-by: Jay Satiro
+ Closes #12145
- Pointed by the new CI job
+rilysh (20 Oct 2023)
-- GHA: spellcheck
+- docs: fix function typo in curl_easy_option_next.3
- This spellchecker checks markdown files. For this reason this job
- converts all man pages in the repository to markdown with pandoc before
- the check runs.
+ Closes #12170
- The perl script 'cleanspell' filters out details from the man page in
- the process, to avoid the spellchecker trying to spellcheck things it
- can't. Like curl specific symbols and the SYNOPSIS and EXAMPLE sections
- of libcurl man pages.
+Daniel Stenberg (20 Oct 2023)
- The spell checker does not check words in sections that are within pre,
- strong and em tags.
+- vssh: remove the #ifdef for Curl_ssh_init, use empty macro
- 'spellcheck.words' is a custom word list with additional accepted words.
+ In the same style as other init calls
- Closes #9523
+- easy: remove duplicate wolfSSH init call
-- connect: fix the wrong error message on connect failures
+ It is already done in Curl_ssh_init() where it belongs.
- The "Failed to connect to" message after a connection failure would
- include the strerror message based on the presumed previous socket
- error, but in times it seems that error number is not set when reaching
- this code and therefore it would include the wrong error message.
+ Closes #12168
- The strerror message is now removed from here and the curl_easy_strerror
- error is used instead.
+- socks: make SOCKS5 use the CURLOPT_IPRESOLVE choice
- Reported-by: Edoardo Lolletti
- Fixes #9549
- Closes #9554
+ Fixes #11949
+ Reported-by: Ammar Faizi
+ Closes #12163
-- httpput-postfields.c: shorten string for C89 compliance
+- urldata: move the 'internal' boolean to the state struct
- httpput-postfields.c:41:3: error: string length ‘522’ is greater than the length ‘509’ ISO C90 compilers are required to support [-Woverlength-strings]
- 41 | "this chapter.";
- | ^~~~~~~~~~~~~~~
+ ... where all the other state bits for the easy handles live.
- Closes #9555
+ Closes #12165
-- ws: fix a C89 compliance nit
+- url: don't touch the multi handle when closing internal handles
- Closes #9541
+ Reported-by: Maksymilian Arciemowicz
+ Closes #12165
-- [Patrick Monnerat brought this change]
+Faraz Fallahi (19 Oct 2023)
- unit test 1655: make it C89-compliant
+- getenv: PlayStation doesn't have getenv()
- Initializations performed in unit test 1655 use automatic variables in
- aggregates and thus can only be computed at run-time. Using gcc in C89
- dialect mode produces warning messages like:
+ Closes #12140
- unit1655.c:96:7: warning: initializer element is not computable at load time [-Wpedantic]
- 96 | { toolong, DOH_DNS_NAME_TOO_LONG }, /* expect early failure */
- | ^~~~~~~
+Daniel Stenberg (19 Oct 2023)
- Fix the problem by converting these automatic pointer variables to
- static arrays.
+- transfer: only reset the FTP wildcard engine in CLEAR state
- Closes #9551
+ To avoid the state machine to start over and redownload all the files
+ *again*.
-- [Tobias Schaefer brought this change]
+ Reported-by: lkordos on github
+ Regression from 843b3baa3e3cb228 (shipped in 8.1.0)
+ Bisect-by: Dan Fandrich
+ Fixes #11775
+ Closes #12156
- curl_strequal.3: fix typo
+Stefan Eissing (19 Oct 2023)
- Closes #9548
+- GHA: move mod_h2 version in CI to v2.0.25
-- [Dmitry Karpov brought this change]
+ Closes #12157
- resolve: make forced IPv4 resolve only use A queries
+Daniel Stenberg (19 Oct 2023)
- This protects IPv4-only transfers from undesired bad IPv6-related side
- effects and make IPv4 transfers in dual-stack libcurl behave the same
- way as in IPv4 single-stack libcurl.
+- ntlm_wb: use pipe instead of socketpair when possible
- Closes #9540
+ Closes #12149
- RELEASE-NOTES: synced
-- winbuild/MakefileBuild.vc: handle spaces in libssh(2) include paths
+- asyn-thread: use pipe instead of socketpair for IPC when available
- Patched-by: Mark Itzcovitz
- Bug: https://curl.se/mail/lib-2022-09/0038.html
+ If pipe() is present. Less overhead.
- Closes #9536
+ Helped-by: Viktor Szakats
+ Closes #12146
-- TODO: Reduce CA certificate bundle reparsing
+Dan Fandrich (17 Oct 2023)
- By adding some sort of cache.
+- tests: Fix Windows test helper tool search & use it for handle64
- Reported-by: Michael Drake
- Closes #9379
- Closes #9538
+ The checkcmd() and checktestcmd() functions would not have worked on
+ Windows due to hard-coding the UNIX PATH separator character and not
+ adding .exe file extension. This meant that tools like stunnel, valgrind
+ and nghttpx would not have been found and used on Windows, and
+ inspection of previous test runs show none of those being found in pure
+ Windows CI builds.
-Marc Hoersken (19 Sep 2022)
-- CI/GHA: cancel outdated CI runs on new PR changes
+ With this fixed, they can be used to detect the handle64.exe program
+ before attempting to use it. When handle64.exe was called
+ unconditionally without it existing, it caused perl to abort the test
+ run with the error
- Avoid letting outdated CI runs continue if a PR receives
- new changes. Outside a PR we let them continue running
- by tying the concurrency to the commit hash instead.
+ The running command stopped because the preference variable
+ "ErrorActionPreference" or common parameter is set to Stop:
+ sh: handle64.exe: command not found
- Also only let one CodeQL or Hacktoberfest job run at a time.
+ Closes #12115
- Other CI platforms we use have this build in, but GitHub
- unfortunately neither by default nor with a simple option.
+Daniel Stenberg (17 Oct 2023)
- This saves CI resources and therefore a little energy.
+- multi: use pipe instead of socketpair to *wakeup()
- Approved-by: Daniel Stenberg
- Approved-by: Max Dymond
- Closes #9533
+ If pipe() is present. Less overhead.
-Daniel Stenberg (19 Sep 2022)
-- docs: fix proselint complaints
+ Closes #12142
-- GHA: run proselint on markdown files
+Jay Satiro (17 Oct 2023)
- Co-authored-by: Marc Hörsken
+- build: fix 'threadsafe' feature detection for older gcc
- Closes #9520
+ - Add 'threadsafe' to the feature list shown during build if POSIX
+ threads are being used.
-- lib: the number four in a sequence is the "fourth"
+ This is a follow-up to 5adb6000 which added support for building a
+ thread-safe libcurl with older versions of gcc where atomic is not
+ available but pthread is.
- Spelling is hard
+ Reported-by: Dan Fandrich
+ Co-authored-by: Dan Fandrich
- Closes #9535
+ Fixes https://github.com/curl/curl/issues/12125
+ Closes https://github.com/curl/curl/pull/12127
-- [John Bampton brought this change]
+Daniel Stenberg (16 Oct 2023)
- misc: fix spelling in two source files
+- test729: verify socks4a with excessive proxy user name length
- Closes #9529
+- socks: better buffer size checks for socks4a user and hostname
-Viktor Szakats (18 Sep 2022)
-- windows: add .rc support to autotools builds
+ Also limit the proxy user name to 255 bytes, which is the same limit as
+ in SOCKS5.
- After this update autotools builds will compile and link `.rc` resources
- to Windows executables. Bringing this feature on par with CMake and
- Makefile.m32 builds. And also making it unnecessary to improvise these
- steps manually, while monkey patching build files, e.g. [0].
+ Reported-by: sd0 on hackerone
+ Closes #12139
- You can customize the resource compiler via the `RC` envvar, and its
- options via `RCFLAGS`.
+- curl.h: on FreeBSD include sys/param.h instead of osreldate.h
- This harmless warning may appear throughout the build, even though the
- autotools manual documents [1] `RC` as a valid tag, and it fails when
- omitting one:
- `libtool: error: ignoring unknown tag RC`
+ Should things build on Playstation as well
- [0] https://github.com/curl/curl-for-win/blob/535f19060d4b708f72e75dd849409ce50baa1b84/curl-autotools.sh#L376-L382
- [1] https://www.gnu.org/software/libtool/manual/html_node/Tags.html
+ Fixes #12107
+ Reported-by: Faraz Fallahi
+ Closes #12123
- Closes #9521
+Marcin Rataj (16 Oct 2023)
-Marc Hoersken (18 Sep 2022)
-- CI/linkcheck: only run if a Markdown file is changed
+- tool_operate: fix links in ipfs errors
- This saves CI resources and therefore a little energy.
+ URL fragment links generated from headers in
+ https://curl.se/docs/ipfs.html are lowercase.
- Reviewed-by: Max Dymond
- Closes #9531
+ Closes #12133
-- README.md: add GHA status badges for Linux and macOS builds
+Viktor Szakats (15 Oct 2023)
- This makes sense now that Linux builds are being consolidated.
+- cmake: replace `check_library_exists_concat()`
- Approved-by: Daniel Stenberg
- Closes #9530
+ The idea of `check_library_exists_concat()` is that it detects an
+ optional component and adds it to the list of libs that we also use in
+ subsequent component checks. This caused problems when detecting
+ components with unnecessary dependencies that were not yet built.
- [skip ci]
+ CMake offers the `CMAKE_REQUIRED_LIBRARIES` variable to set libs used
+ for component checks, which we already use in most cases. That left 4
+ uses of `check_library_exists_concat()`. Only one of these actually
+ needed the 'concat' feature (ldap/lber).
-Daniel Stenberg (17 Sep 2022)
-- misc: null-terminate
+ Delete this function and replace it with standard
+ `check_library_exists()` and manual management of our `CURL_LIBS`
+ list we use when linking build targets. And special logic to handle the
+ ldap/lber case.
- Make use of this term consistently.
+ (We have a similar function for headers: `check_include_file_concat()`.
+ It works, but problematic for performance reasons and because it hides
+ the actual headers required in `check_symbol_exists()` calls.)
- Closes #9527
+ Ref: #11537 #11558
+ Fixes #11285
+ Fixes #11648
+ Closes #12070
-Marc Hoersken (17 Sep 2022)
-- CI/GHA: merge intel CC and more TLS libs into linux workflow
+LoRd_MuldeR (15 Oct 2023)
- Continue work on merging all Linux workflows into one file.
+- tool_cb_wrt: fix write output for very old Windows versions
- Reviewed-by: Max Dymond
- Follow up to #9501
- Closes #9514
+ - Pass missing parameter for 'lpNumberOfCharsWritten' to WriteConsoleW()
+ function.
-Daniel Stenberg (17 Sep 2022)
-- [Patrick Monnerat brought this change]
+ Apparently this parameter was *not* optional on older Windows versions.
- lib1597: make it C89-compliant again
+ Issue observed on Windows XP SP2. Issue not observed on Windows 7 SP1.
+ So at some point between those two Microsoft changed the behavior.
- Automatic variable addresses cannot be used in an initialisation
- aggregate.
+ Prior to this change, on those versions if parameter is NULL then the
+ function call fails with error ERROR_INVALID_ACCESS.
- Follow-up to 9d51329
+ Regression since af3f4e41.
- Reported-by: Daniel Stenberg
- Fixes: #9524
- Closes #9525
+ Ref: https://github.com/MicrosoftDocs/Console-Docs/issues/299
-- tool_libinfo: silence "different 'const' qualifiers" in qsort()
+ Fixes https://github.com/curl/curl/issues/12131
+ Closes https://github.com/curl/curl/pull/12130
- MSVC 15.0.30729.1 warned about it
+Jay Satiro (15 Oct 2023)
- Follow-up to dd2a024323dcc
+- tool_urlglob: fix build for old gcc versions
- Closes #9522
+ - Don't use __builtin_mul_overflow for GCC 4 and earlier.
-- [Patrick Monnerat brought this change]
+ The function was added in GCC 5.
- docs: tell about disabled protocols in CURLOPT_*PROTOCOLS_STR.
+ Ref: https://gcc.gnu.org/gcc-5/changes.html
- Disabled protocols are now handled as if they were unknown.
- Also update the possible protocol list.
+ Reported-by: Dan Fandrich
-- [Patrick Monnerat brought this change]
+ Fixes https://github.com/curl/curl/issues/12124
+ Closes https://github.com/curl/curl/pull/12128
- cli tool: do not use disabled protocols
+Carlos Henrique Lima Melara (14 Oct 2023)
- As they are now rejected by the library, take care of not passing
- disabled protocol names to CURLOPT_PROTOCOLS_STR and
- CURLOPT_REDIR_PROTOCOLS_STR.
+- docs/libcurl: fix three minor man page format mistakes
- Rather than using the CURLPROTO_* constants, dynamically assign protocol
- numbers based on the order they are listed by curl_version_info().
+ Reported-by: Samuel Henrique
- New type proto_set_t implements prototype bit masks: it should therefore
- be large enough to accomodate all library-enabled protocols. If not,
- protocol numbers beyond the bit count of proto_set_t are recognized but
- "inaccessible": when used, a warning is displayed and the value is
- ignored. Should proto_set_t overflows, enabled protocols are reordered to
- force those having a public CURLPROTO_* representation to be accessible.
+ Closes https://github.com/curl/curl/pull/12126
- Code has been added to subordinate RTMP?* protocols to the presence of
- RTMP in the enabled protocol list, being returned by curl_version_info()
- or not.
+Jay Satiro (14 Oct 2023)
-- [Patrick Monnerat brought this change]
+- tests/server: add more SOCKS5 handshake error checking
- setopt: use the handler table for protocol name to number conversions
+ - Add additional checking for missing and too-short SOCKS5 handshake
+ messages.
- This also returns error CURLE_UNSUPPORTED_PROTOCOL rather than
- CURLE_BAD_FUNCTION_ARGUMENT when a listed protocol name is not found.
+ Prior to this change the SOCKS5 test server did not check that all parts
+ of the handshake were received successfully. If those parts were missing
+ or too short then the server would access uninitialized memory.
- A new schemelen parameter is added to Curl_builtin_scheme() to support
- this extended use.
+ This issue was discovered in CI job 'memory-sanitizer' test results.
+ Test 2055 was failing due to the SOCKS5 test server not running. It was
+ not running because either it crashed or memory sanitizer aborted it
+ during Test 728. Test 728 connects to the SOCKS5 test server on a
+ redirect but does not send any data on purpose. The test server was not
+ prepared for that.
- Note that disabled protocols are not recognized anymore.
+ Reported-by: Dan Fandrich
- Tests adapted accordingly.
+ Fixes https://github.com/curl/curl/issues/12117
+ Closes https://github.com/curl/curl/pull/12118
- Closes #9472
+Daniel Stenberg (14 Oct 2023)
-- altsvc: use 'h3' for h3
+- RELEASE-NOTES: synced
- Since the official and real version has been out for a while now and servers
- are deployed out there using it, there is no point in sticking to h3-29.
+Sohom Datta (14 Oct 2023)
- Reported-by: ウã•ã‚“
- Fixes #9515
- Closes #9516
+- tool_getparam: limit --rate to be smaller than number of ms
-Jay Satiro (16 Sep 2022)
-- [chemodax brought this change]
+ Currently, curl allows users to specify absurd request rates that might
+ be higher than the number of milliseconds in the unit (ex: curl --rate
+ 3600050/h http://localhost:8080 does not error out despite there being
+ only 3600000ms in a hour).
- winbuild: Use NMake batch-rules for compilation
+ This change adds a conditional check before the millisecond calculation
+ making sure that the number is not higher than the numerator (the unit)
+ If the number is higher, curl errors out with PARAM_NUMBER_TOO_LARGE
- - Invoke cl compiler once for each group of .c files.
+ Closes #12116
- This is significantly improves compilation time. For example in my
- environment: 40 s --> 20 s.
+Daniel Stenberg (14 Oct 2023)
- Prior to this change cl was invoked per .c file.
+- opts: fix two minor man page format mistakes
- Closes https://github.com/curl/curl/pull/9512
+Jay Satiro (14 Oct 2023)
-Daniel Stenberg (16 Sep 2022)
-- ws: the infof() flags should be %zu
+- curl_trc: remove a bad assertion
- Follow-up to e5e9e0c5e49ae0
+ - Remove DEBUGASSERT that an internal handle must not have user
+ private_data set before calling the user's debug callback.
- Closes #9518
+ This is a follow-up to 0dc40b2a. The user can distinguish their easy
+ handle from an internal easy handle by setting CURLOPT_PRIVATE on their
+ easy handle. I had wrongly assumed that meant the user couldn't then
+ set CURLOPT_PRIVATE on an internal handle as well.
-- curl: warn for --ssl use, considered insecure
+ Bug: https://github.com/curl/curl/pull/12060#issuecomment-1754594697
+ Reported-by: Daniel Stenberg
- Closes #9519
+ Closes https://github.com/curl/curl/pull/12104
-- [Sergey Bronnikov brought this change]
+Dan Fandrich (13 Oct 2023)
- curl_escape.3: fix typo
+- test613: stop showing an error on missing output file
- lengthf -> length
+ This test would show an error message if the output was missing during
+ the log post-processing step, but the message was not captured by the
+ test harness and wasn't useful since the normal golden log file
+ comparison would the problem more clearly.
- Closes #9517
+Stefan Eissing (13 Oct 2023)
-- mailmap: merge Philip Heiduck's two addresses into one
+- quic: manage connection idle timeouts
-- test1948: verify PUT + POST reusing the same handle
+ - configure a 120s idle timeout on our side of the connection
+ - track the timestamp when actual socket IO happens
+ - check IO timestamp to our *and* the peer's idle timeouts
+ in "is this connection alive" checks
- Reproduced #9507, verifies the fix
+ Reported-by: calvin2021y on github
+ Fixes #12064
+ Closes #12077
-- setopt: when POST is set, reset the 'upload' field
+Dan Fandrich (13 Oct 2023)
- Reported-by: RobBotic1 on github
- Fixes #9507
- Closes #9511
+- CI: ignore test 286 on Appveyor gcc 9 build
-Marc Hoersken (15 Sep 2022)
-- github: initial CODEOWNERS setup for CI configuration
+ This test fails sometimes with a super fast retry loop due to what may
+ just be a compiler bug. The test results are ignored on the one CI job
+ where it occurs because there seems to be nothing we can do to fix it.
- Reviewed-by: Daniel Stenberg
- Reviewed-by: Marcel Raad
- Reviewed-by: Max Dymond
+ Fixes #12040
+ Closes #12106
+
+Viktor Szakats (13 Oct 2023)
- Closes #9505
+- lib: fix gcc warning in printf call
- [skip ci]
+ Do not pass NULL to printf %s.
-- [Philip Heiduck brought this change]
+ Seen with gcc 13.2.0 on Debian:
+ ```
+ .../curl/lib/connect.c:696:27: warning: '%s' directive argument is null [-Wfo
+ rmat-overflow=]
+ ```
+ Ref: https://github.com/curl/curl-for-win/actions/runs/6476161689/job/1758442
+ 6483#step:3:11104
- CI: optimize some more dependencies install
+ Ref: #10284
+ Co-authored-by: Jay Satiro
+ Closes #12082
- Signed-off-by: Philip Heiduck <pheiduck@Philips-MBP.lan>
+Alex Klyubin (13 Oct 2023)
- Closes #9500
+- http2: safer invocation of populate_binsettings
-- CI/GHA: merge event-based and NSS into new linux workflow
+ populate_binsettings now returns a negative value on error, instead of a
+ huge positive value. Both places which call this function have been
+ updated to handle this change in its contract.
- Continue work on merging all Linux workflows into one file.
+ The way populate_binsettings had been used prior to this change the huge
+ positive values -- due to signed->unsigned conversion of the potentially
+ negative result of nghttp2_pack_settings_payload which returns negative
+ values on error -- are not possible. But only because http2.c currently
+ always provides a large enough output buffer and provides H2 SETTINGS
+ IVs which pass the verification logic inside nghttp2. If the
+ verification logic were to change or if http2.c started passing in more
+ IVs without increasing the output buffer size, the overflow could become
+ reachable, and libcurl/curl might start leaking memory contents to
+ servers/proxies...
- Follow up to #9501
- Closes #9506
+ Closes #12101
-Daniel Stenberg (15 Sep 2022)
-- include/curl/websockets.h: add extern "C" for C++
+Daniel Stenberg (13 Oct 2023)
- Reported-by: n0name321 on github
- Fixes #9509
- Closes #9510
+- openssl: avoid BN_num_bits() NULL pointer derefs
-- lib1560: extended to verify detect/reject of unknown schemes
+ Reported-by: icy17 on github
+ Fixes #12099
+ Closes #12100
- ... when no guessing is allowed.
+- wolfssl: require WOLFSSL_SYS_CA_CERTS for loading system CA
-- urlapi: detect scheme better when not guessing
+ This define is set in wolfssl's options.h file when this function and
+ feature is present. Handles both builds with the feature explicitly
+ disabled and wolfSSL versions before 5.5.2 - which introduced this API
+ call.
- When the parser is not allowed to guess scheme, it should consider the
- word ending at the first colon to be the scheme, independently of number
- of slashes.
+ Closes #12108
- The parser now checks that the scheme is known before it counts slashes,
- to improve the error messge for URLs with unknown schemes and maybe no
- slashes.
+- tool_urlglob: make multiply() bail out on negative values
- When following redirects, no scheme guessing is allowed and therefore
- this change effectively prevents redirects to unknown schemes such as
- "data".
+ - Does not work correctly with negative values
+ - use __builtin_mul_overflow() on gcc
- Fixes #9503
+ Reported-by: Torben Dury
+ Closes #12102
-- strerror: improve two URL API error messages
+Loïc Yhuel (13 Oct 2023)
-Marc Hoersken (14 Sep 2022)
-- CI/GHA: merge bearssl and hyper into initial linux workflow
+- cmake: fix CURL_DISABLE_GETOPTIONS
- Begin work on merging all Linux workflows into one file.
+ - Add CURL_DISABLE_GETOPTIONS to curl_config.h.cmake.
- Closes #9501
+ Prior to this change the option had no effect because it was missing
+ from that file.
-Daniel Stenberg (14 Sep 2022)
-- RELEASE-NOTES: synced
+ Closes https://github.com/curl/curl/pull/12091
-- cmake: define BUILDING_LIBCURL in lib/CMakeLists, not config.h
+- easy_lock: add a pthread_mutex_t fallback
- Since the config file might also get included by the tool code at times.
- This syncs with how other builds do it.
+ This allows to keep the init threadsafe with gcc < 4.9.0 (no C11
+ atomics).
- Closes #9498
+ Closes https://github.com/curl/curl/pull/12090
-- tool_hugehelp: make hugehelp a blank macro when disabled
+Viktor Szakats (12 Oct 2023)
- Closes #9485
+- CI: add autotools, out-of-tree, debug build to distro check job
-- getparameter: return PARAM_MANUAL_REQUESTED for -M even when disabled
+ Add a job that builds curl from a generated source tarball sample, with
+ autotools, out-of-tree, in debug mode.
- ... to improve the output in this situation. Now it doesn't say "option
- unknown" anymore.
+ Ref: #12085
+ Closes #12088
- Closes #9485
+Daniel Stenberg (12 Oct 2023)
-- setopt: fix compiler warning
+- http: avoid Expect: 100-continue if Upgrade: is used
- Follow-up to cd5ca80f00d2
+ Reported-by: Daniel Jelinski
+ Fixes #12022
+ Closes #12062
- closes #9502
+Jan Alexander Steffens (heftig) (12 Oct 2023)
-- [Philip Heiduck brought this change]
+- docs: use SOURCE_DATE_EPOCH for generated manpages
- CI: skip make, do make install at once for dependencies
+ This should make builds from Git reproducible.
- Signed-off-by: Philip Heiduck <pheiduck@Philips-MBP.lan>
+ Closes #12092
- Closes #9477
+Daniel Stenberg (12 Oct 2023)
-- formdata: typecast the va_arg return value
+- RELEASE-NOTES: synced
+
+ Bumped to 8.4.1
+
+Viktor Szakats (12 Oct 2023)
- To avoid "enumerated type mixed with another type" warnings
+- cmake: fix `HAVE_H_ERRNO_ASSIGNABLE` detection
- Follow-up from 0f52dd5fd5aa3592691a
+ Fix `HAVE_H_ERRNO_ASSIGNABLE` to not run, only compile its test snippet,
+ aligning this with autotools. This fixes an error when doing
+ cross-builds and also actually detects this feature. It affected systems
+ not allowlisted into this, e.g. SerenityOS.
- Closes #9499
+ We used this detection result to enable `HAVE_GETADDRINFO_THREADSAFE`.
-- RELEASE-PROCEDURE.md: mention patch releases
+ Follow-up to 04a3a377d83fd72c4cf7a96c9cb6d44785e33264 #11979
+ Ref: #12095 (closed in favour of this patch)
+ Ref: #11964 (effort to sync cmake detections with autotools)
- - When to make them and how to argue for them
- - Refreshed the release date list
+ Reported-by: Kartatz on Github
+ Assisted-by: Kartatz on Github
+ Fixes #12093
+ Closes #12094
- Closes #9495
+- build: add `src/.checksrc` to source tarball
-- urldata: use a curl_prot_t type for storing protocol bits
+ Regression from e5bb88b8f824ed87620bd923552534c83c2a516e #11958
- This internal-use-only storage type can be bumped to a curl_off_t once
- we need to use bit 32 as the previous 'unsigned int' can no longer hold
- them all then.
+ Bug: https://github.com/curl/curl/pull/11958#issuecomment-1757079071
+ Reported-by: Romain Geissler
+ Fixes #12084
+ Closes #12085
- The websocket protocols take bit 30 and 31 so they are the last ones
- that fit within 32 bits - but cannot properly be exported through APIs
- since those use *signed* 32 bit types (long) in places.
+Version 8.4.0 (11 Oct 2023)
+
+Daniel Stenberg (11 Oct 2023)
+
+- RELEASE-NOTES: synced
- Closes #9481
+- THANKS: add contributors from 8.4.0
-- [zhanghu on xiaomi brought this change]
+Jay Satiro (11 Oct 2023)
- formdata: fix warning: 'CURLformoption' is promoted to 'int'
+- socks: return error if hostname too long for remote resolve
- curl/lib/formdata.c: In function 'FormAdd':
- curl/lib/formdata.c:249:31: warning: 'CURLformoption' is promoted to 'int' when passed through '...'
- 249 | option = va_arg(params, CURLformoption);
- | ^
- curl/lib/formdata.c:249:31: note: (so you should pass 'int' not 'CURLformoption' to 'va_arg')
- curl/lib/formdata.c:249:31: note: if this code is reached, the program will abort
+ Prior to this change the state machine attempted to change the remote
+ resolve to a local resolve if the hostname was longer than 255
+ characters. Unfortunately that did not work as intended and caused a
+ security issue.
- Closes #9484
+ Bug: https://curl.se/docs/CVE-2023-38545.html
-- CURLOPT_CONNECT_ONLY.3: for ws(s) as well
+Stefan Eissing (10 Oct 2023)
- and correct the version number for when that support comes. Even if it
- is still experimental for WebSocket.
+- CI: remove slowed-network tests
- Closes #9487
+ - remove these tests as they are currently not reliable in our CI
+ setups.
-- tool_operate: avoid a few #ifdefs for disabled-libcurl builds
+ curl handles the test cases, but CI sometimes fails on these due to
+ additional conditions. Rather than mix them in, an additional CI job
+ will be added in the future that is specific to them.
- By providing empty macros in the header file instead, the code gets
- easier to read and yet is disabled on demand.
+ Closes https://github.com/curl/curl/pull/12075
- Closes #9486
+Jay Satiro (10 Oct 2023)
-- [a1346054 on github brought this change]
+- libcurl-env-dbg.3: move debug variables from libcurl-env.3
- scripts: use `grep -E` instead of `egrep`
+ - Move documentation of libcurl environment variables used only in debug
+ builds from libcurl-env into a separate document libcurl-env-dbg.
- egrep is deprecated
+ - Document more debug environment variables.
- Closes #9491
+ Previously undocumented or missing a description:
-- [Hayden Roche brought this change]
+ CURL_ALTSVC_HTTP, CURL_DBG_SOCK_WBLOCK, CURL_DBG_SOCK_WPARTIAL,
+ CURL_DBG_QUIC_WBLOCK, CURL_DEBUG, CURL_DEBUG_SIZE, CURL_GETHOSTNAME,
+ CURL_HSTS_HTTP, CURL_FORCETIME, CURL_SMALLREQSEND, CURL_SMALLSENDS,
+ CURL_TIME.
- wolfSSL: fix session management bug.
+ Closes https://github.com/curl/curl/pull/11811
- Prior to this commit, non-persistent pointers were being used to store
- sessions. When a WOLFSSL object was then freed, that freed the session
- it owned, and thus invalidated the pointer held in curl's cache. This
- commit makes it so we get a persistent (deep copied) session pointer
- that we then add to the cache. Accordingly, wolfssl_session_free, which
- was previously a no-op, now needs to actually call SSL_SESSION_free.
+Dan Fandrich (9 Oct 2023)
- This bug was discovered by a wolfSSL customer.
+- test670: increase the test timeout
- Closes #9492
+ This should make it more immune to loaded servers.
-- docs: use "WebSocket" in singular
+ Ref: #11328
- This is how the RFC calls the protocol. Also rename the file in docs/ to
- WEBSOCKET.md in uppercase to match how we have done it for many other
- protocol docs in similar fashion.
+Stefan Eissing (9 Oct 2023)
- Add the WebSocket docs to the tarball.
+- MQTT: improve receive of ACKs
- Closes #9496
+ - add `mq->recvbuf` to provide buffering of incomplete
+ ACK responses
+ - continue ACK reading until sufficient bytes available
+ - fixes test failures on low network receives
-Marcel Raad (12 Sep 2022)
-- ws: fix build without `USE_WEBSOCKETS`
+ Closes #12071
- The curl.h include is required unconditionally.
+Viktor Szakats (9 Oct 2023)
-- ws: add missing curl.h include
+- quic: fix BoringSSL build
- A conflict between commits 664249d0952 and e5839f4ee70 broke the build.
+ Add guard around `SSL_CTX_set_ciphersuites()` use.
-Daniel Stenberg (12 Sep 2022)
-- ws: fix an infof() call to use %uz for size_t output
+ Bug: https://github.com/curl/curl/pull/12065#issuecomment-1752171885
- Detected by Coverity, CID 1514665.
+ Follow-up to aa9a6a177017e4b74d33cdf85a3594900f4a7f81
- Closes #9480
+ Co-authored-by: Jay Satiro
+ Reviewed-by: Daniel Stenberg
+ Closes #12067
-Marcel Raad (12 Sep 2022)
-- curl_setup: include only system.h instead of curl.h
+Stefan Eissing (9 Oct 2023)
- As done before commit 9506d01ee50.
+- test1540: improve reliability
- Ref: https://github.com/curl/curl/pull/9375#discussion_r957010158
- Closes https://github.com/curl/curl/pull/9453
+ - print that bytes have been received on pausing, but not how many
-- lib: add missing limits.h includes
+ Closes #12069
- Closes https://github.com/curl/curl/pull/9453
+- test2302: improve reliability
-- lib and tests: add missing curl.h includes
+ - make result print collected write data, unless
+ change in meta flags is detected
+ - will show same result even when data arrives via
+ several writecb invocations
- Closes https://github.com/curl/curl/pull/9453
+ Closes #12068
-- curl_setup: include curl.h after platform setup headers
+Daniel Stenberg (9 Oct 2023)
- The platform setup headers might set definitions required for the
- includes in curl.h.
+- curl_easy_pause: set "in callback" true on exit if true
- Ref: https://github.com/curl/curl/pull/9375#discussion_r956998269
- Closes https://github.com/curl/curl/pull/9453
+ Because it might have called another callback in the mean time that then
+ set the bit FALSE on exit.
-Daniel Stenberg (12 Sep 2022)
-- [Benjamin Loison brought this change]
+ Reported-by: Jay Satiro
+ Fixes #12059
+ Closes #12061
- docs: correct missing uppercase in Markdown files
+Viktor Szakats (8 Oct 2023)
- To detect these typos I used:
+- h3: add support for ngtcp2 with AWS-LC builds
```
- clear && grep -rn '\. [a-z]' . | uniq | grep -v '\. lib' | grep -v '[0-9]\. [a-z]' | grep -v '\.\. [a-z]' | grep -v '\. curl' | grep -v 'e.g. [a-z]' | grep -v 'eg. [a-z]' | grep -v '\etc. [a-z]' | grep -v 'i.e\. [a-z]' | grep --color=always '\. [a-z]' | grep '\.md'
+ curl 8.4.0-DEV (x86_64-apple-darwin) libcurl/8.4.0-DEV (SecureTransport) AWS-
+ LC/1.15.0 nghttp2/1.56.0 ngtcp2/0.19.1 nghttp3/0.15.0
+ Release-Date: [unreleased]
+ Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps
+ mqtt pop3 pop3s rtsp smb smbs smtp smtps telnet tftp ws wss
+ Features: alt-svc AsynchDNS HSTS HTTP2 HTTP3 HTTPS-proxy IPv6 Largefile Multi
+ SSL NTLM SSL threadsafe UnixSockets
```
- Closes #9474
+ Also delete an obsolete GnuTLS TODO and update the header comment in
+ `FindNGTCP2.cmake`.
-- tool_setopt: use better English in --libcurl source comments
+ Reviewed-by: Daniel Stenberg
+ Closes #12066
- Like this:
+- build: do not publish `HAVE_BORINGSSL`, `HAVE_AWSLC` macros
- XYZ was set to an object pointer
- ABC was set to a function pointer
+ Syncing this up with CMake.
- Closes #9475
+ Source code uses the built-in `OPENSSL_IS_AWSLC` and
+ `OPENSSL_IS_BORINSSL` macros to detect BoringSSL and AWS-LC. No help is
+ necessary from the build tools.
-- setopt: make protocol2num use a curl_off_t for the protocol bit
+ The one use of `HAVE_BORINGSSL` in the source turned out to be no longer
+ necessary for warning-free BoringSSL + Schannel builds. Ref: #1610 #2634
- ... since WSS does not fit within 32 bit.
+ autotools detects this anyway for display purposes.
+ CMake detects this to decide whether to use the BoringSSL-specific
+ crypto lib with ngtcp2. It detects AWS-LC, but doesn't use the detection
+ result just yet (planned in #12066).
- Bug: https://github.com/curl/curl/pull/9467#issuecomment-1243014887
- Closes #9476
+ Ref: #11964
-- RELEASE-NOTES: synced
+ Reviewed-by: Daniel Stenberg
+ Reviewed-by: Jay Satiro
+ Closes #12065
-- configure: polish the grep -E message a bit further
+Marc Hoersken (8 Oct 2023)
- Suggested-by: Emanuele Torre
- Closes #9473
+- CI: move distcheck job from Azure Pipelines to GitHub Actions
-- GHA: add a gcc-11 -O3 build using OpenSSL
+ This will allow for more trigger excludes within Azure Pipelines.
- Since -O3 might trigger other warnings
+ Also fixes seemingly broken check with scripts/installcheck.sh.
+ Ref: 190374c74ec4e5247d9066544c86e8d095e1d7b5
- Closes #9454
+ Assisted-by: Philip Heiduck
+ Closes #9532
-- [Patrick Monnerat brought this change]
+Daniel Stenberg (8 Oct 2023)
- content_encoding: use writer struct subclasses for different encodings
+- url: fall back to http/https proxy env-variable if ws/wss not set
- The variable-sized encoding-specific storage of a struct contenc_writer
- currently relies on void * alignment that may be insufficient with
- regards to the specific storage fields, although having not caused any
- problems yet.
+ Reported-by: Craig Andrews
+ Fixes #12031
+ Closes #12058
- In addition, gcc 11.3 issues a warning on access to fields of partially
- allocated structures that can occur when the specific storage size is 0:
+Stefan Eissing (8 Oct 2023)
- content_encoding.c: In function ‘Curl_build_unencoding_stack’:
- content_encoding.c:980:21: warning: array subscript ‘struct contenc_writer[0]’ is partly outside array bounds of ‘unsigned char[16]’ [-Warray-bounds]
- 980 | writer->handler = handler;
- | ~~~~~~~~~~~~~~~~^~~~~~~~~
- In file included from content_encoding.c:49:
- memdebug.h:115:29: note: referencing an object of size 16 allocated by ‘curl_dbg_calloc’
- 115 | #define calloc(nbelem,size) curl_dbg_calloc(nbelem, size, __LINE__, __FILE__)
- | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- content_encoding.c:977:60: note: in expansion of macro ‘calloc’
- 977 | struct contenc_writer *writer = (struct contenc_writer *)calloc(1, sz);
+- cf-socket: simulate slow/blocked receives in debug
- To solve both these problems, the current commit replaces the
- contenc_writer/params structure pairs by "subclasses" of struct
- contenc_writer. These are structures that contain a contenc_writer at
- offset 0. Proper field alignment is therefore handled by the compiler and
- full structure allocation is performed, silencing the warnings.
+ add 2 env variables for non-UDP sockets:
+ 1. CURL_DBG_SOCK_RBLOCK: percentage of receive calls that randomly
+ should return EAGAIN
+ 2. CURL_DBG_SOCK_RMAX: max amount of bytes read from socket
- Closes #9455
+ Closes #12035
-- configure: correct the wording when checking grep -E
+- http2: refused stream handling for retry
- The check first checks that grep -E works, and only as a fallback tries
- to find and use egrep. egrep is deprecated.
+ - answer HTTP/2 streams refused via a GOAWAY from the server to
+ respond with CURLE_RECV_ERROR in order to trigger a retry
+ on another connection
- This change only corrects the output wording, not the checks themselves.
+ Reported-by: black-desk on github
+ Ref #11859
+ Closes #12054
- Closes #9471
+Jay Satiro (8 Oct 2023)
-Viktor Szakats (10 Sep 2022)
-- websockets: sync prototypes in docs with implementation [ci skip]
+- CURLOPT_DEBUGFUNCTION.3: warn about internal handles
- Docs for the new send/recv functions synced with the committed versions
- of these.
+ - Warn that the user's debug callback may be called with the handle
+ parameter set to an internal handle.
- Closes #9470
+ Without this warning the user may assume that the only handles their
+ debug callback receives are the easy handles on which they set
+ CURLOPT_DEBUGFUNCTION.
-Daniel Stenberg (10 Sep 2022)
-- setopt: make protocols2num() work with websockets
+ This is a follow-up to f8cee8cc which changed DoH handles to inherit
+ the debug callback function set in the user's easy handle. As a result
+ those handles are now passed to the user's debug callback function.
- So that CURLOPT_PROTOCOLS_STR and CURLOPT_REDIR_PROTOCOLS_STR can
- specify those as well.
+ Closes https://github.com/curl/curl/pull/12034
- Reported-by: Patrick Monnerat
- Bug: https://curl.se/mail/lib-2022-09/0016.html
- Closes #9467
+- url: fix typo
-- curl/websockets.h: remove leftover bad typedef
+Daniel Stenberg (8 Oct 2023)
- Just a leftover trace of a development thing that did not stay like
- that.
+- test458: verify --expand-output, expanding a file name accepting option
- Reported-by: Marc Hörsken
- Fixes #9465
- Cloes #9466
+ Verifies the fix in #12055 (commit f2c8086ff15e6e995e1)
-Marcel Raad (10 Sep 2022)
-- [Orgad Shaneh brought this change]
+- tool_getparam: accept variable expansion on file names too
- fix Cygwin/MSYS compilation
+ Reported-by: PBudmark on github
+ Fixes #12048
+ Closes #12055
- _getpid is Windows API. On Cygwin variants it should remain getpid.
+- RELEASE-NOTES: synced
- Fixes #8220
- Closes #9255
+- multi: do CURLM_CALL_MULTI_PERFORM at two more places
-Marc Hoersken (10 Sep 2022)
-- GHA: prepare workflow merge by aligning structure again
+ ... when it does a state transition but there is no particular socket or
+ timer activity. This was made apparent when commit b5bb84c removed a
+ superfluous timer expiry.
- Closes #9413
+ Reported-by: Dan Fandrich.
+ Fixes #12033
+ Closes #12056
-Daniel Stenberg (9 Sep 2022)
-- docs: the websockets symbols are added in 7.86.0
+Viktor Szakats (7 Oct 2023)
- Nothing else
+- GHA/linux: mbedtls 3.5.0 + minor dep bumps
- Closes #9459
+ Closes #12057
-- tests/libtest/Makefile.inc: fixup merge conflict mistake
+Dan Fandrich (7 Oct 2023)
-- EXPERIMENTAL.md: add WebSockets
+- CI: bump OpenLDAP package version on FreeBSD
-- appveyor: enable websockets
+ The old one is no longer available.
-- cirrus: enable websockets in the windows builds
+Marc Hoersken (7 Oct 2023)
-- GHA: add websockets to macos, openssl3 and hyper builds
+- docs/libcurl/opts/Makefile.inc: add missing manpage files
-- tests: add websockets tests
+ Detected with #9532
- - add websockets support to sws
- - 2300: first very basic websockets test
- - 2301: first libcurl test for ws (not working yet)
- - 2302: use the ws callback
- - 2303: test refused upgrade
+Dan Fandrich (7 Oct 2023)
-- curl_ws_meta: initial implementation
+- tests: fix a race condition in ftp server disconnect
-- curl_ws_meta.3: added docs
+ If a client disconnected and reconnected quickly, before the ftp server
+ had a chance to respond, the protocol message/ack (ping/pong) sequence
+ got out of sync, causing messages sent to the old client to be delivered
+ to the new. A disconnect must now be acknowledged and intermediate
+ requests thrown out until it is, which ensures that such synchronization
+ problems can't occur. This problem could affect ftp, pop3, imap and smtp
+ tests.
-- ws: initial websockets support
+ Fixes #12002
+ Closes #12049
- Closes #8995
+Viktor Szakats (7 Oct 2023)
-- version: add ws + wss
+- appveyor: bump mingw-w64 job to gcc 13 (was: 8)
-- libtest/lib1560: test basic websocket URL parsing
+ This sets gcc 6, 7, 9, 13 in our test mix (was: 6, 7, 8, 9).
+ Adding a modern gcc version to the tests.
-- configure: add --enable-websockets
+ (The gcc 8 job used to take around 50 minutes. The new image with gcc 13
+ finished in 32, 35, 34 minutes in the 3 test runs so far.)
-- docs/WebSockets.md: docs
+ It also adds a modern CMake version and OS env to our mingw-w64 builds.
-- test415: verify Content-Length parser with control code + negative value
+ Closes #12051
-- strtoofft: after space, there cannot be a control code
+David Benjamin (6 Oct 2023)
- With the change from ISSPACE() to ISBLANK() this function no longer
- deals with (ignores) control codes the same way, which could lead to
- this function returning unexpected values like in the case of
- "Content-Length: \r-12354".
+- openssl: use X509_ALGOR_get0 instead of reaching into X509_ALGOR
- Follow-up to 6f9fb7ec2d7cb389a0da5
+ While the struct is still public in OpenSSL, there is a (somewhat
+ inconvenient) accessor. Use it to remain compatible if it becomes opaque
+ in the future.
- Detected by OSS-fuzz
- Bug: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=51140
- Assisted-by: Max Dymond
- Closes #9458
+ Closes #12038
-- headers: reset the requests counter at transfer start
+Daniel Stenberg (6 Oct 2023)
- If not, reusing an easy handle to do a subsequent transfer would
- continue the counter from the previous invoke, which then would make use
- of the header API difficult/impossible as the request counter
- mismatched.
+- curl_easy_pause.3: mention it works within callbacks
- Add libtest 1947 to verify.
+ Reported-by: Maxim Dzhura
+ Bug: https://curl.se/mail/lib-2023-10/0010.html
+ Closes #12046
- Reported-by: Andrew Lambert
- Fixes #9424
- Closes #9447
+- curl_easy_pause.3: mention h2/h3 buffering
-Jay Satiro (8 Sep 2022)
-- header: define public API functions as extern c
+ Asked-by: Maxim Dzhura
+ Ref: https://curl.se/mail/lib-2023-10/0011.html
- Prior to this change linker errors would occur if curl_easy_header or
- curl_easy_nextheader was called from a C++ unit.
+ Closes #12045
- Bug: https://github.com/curl/curl/issues/9424#issuecomment-1238818007
- Reported-by: Andrew Lambert
+Viktor Szakats (6 Oct 2023)
- Closes https://github.com/curl/curl/pull/9446
+- cmake: re-add missed C89 headers for specific detections
-Daniel Stenberg (8 Sep 2022)
-- http2: make nghttp2 less picky about field whitespace
+ We removed C89 `setjmp.h` and `signal.h` detections and excluded them
+ from the global header list we use when detecting functions [1]. Then
+ missed to re-add these headers to the specific functions which need
+ them to be detected [2]. Fix this omission in this patch.
- In nghttp2 1.49.0 it returns error on leading and trailing whitespace in
- header fields according to language in the recently shipped RFC 9113.
+ [1] Follow-up to 3795fcde995d96db641ddbcc8a04f9f0f03bef9f #11951
+ [2] Follow-up to 96c29900bcec32dd6bc8e9857c8871ff4b8b8ed9 #11940
- nghttp2 1.50.0 introduces an option to switch off this strict check and
- this change enables this option by default which should make curl behave
- more similar to how it did with nghttp2 1.48.0 and earlier.
+ Closes #12043
- We might want to consider making this an option in the future.
+Daniel Stenberg (6 Oct 2023)
- Closes #9448
+- multi: set CURLM_CALL_MULTI_PERFORM after switch to DOING_MORE
-- RELEASE-NOTES: synced
+ Since there is nothing to wait for there. Avoids the test 1233 hang
+ reported in #12033.
- And bump to 7.86.0 for the pending next release
+ Reported-by: Dan Fandrich
+ Closes #12042
-- [Michael Heimpold brought this change]
+Dan Fandrich (5 Oct 2023)
- ftp: ignore a 550 response to MDTM
+- test1903: actually verify the cookies after the test
- The 550 is overused as a return code for multiple error case, e.g.
- file not found and/or insufficient permissions to access the file.
+ The test otherwise could do just about anything (except leak memory in
+ debug mode) and its bad behaviour wouldn't be detected. Now, check the
+ resulting cookie file to ensure the cookies are still there.
- So we cannot fail hard in this case.
+ Closes #12041
- Adjust test 511 since we now fail later.
- Add new test 3027 which check that when MDTM failed, but the file could
- actually be retrieved, that in this case no filetime is provided.
+- test: add missing <feature>s
- Reported-by: Michael Heimpold
- Fixes #9357
- Closes #9387
+ The tests will otherwise fail if curl has them disabled.
-- urlapi: leaner with fewer allocs
+- test1906: set a lower timeout since it's hit on Windows
- Slightly faster with more robust code. Uses fewer and smaller mallocs.
+ msys2 builds actually hit the connect timeout in normal operation, so
+ lower the timeout from 5 minutes to 5 seconds to reduce test time.
- - remove two fields from the URL handle struct
- - reduce copies and allocs
- - use dynbuf buffers more instead of custom malloc + copies
- - uses dynbuf to build the host name in reduces serial alloc+free within
- the same function.
- - move dedotdotify into urlapi.c and make it static, not strdup the input
- and optimize it by checking for . and / before using strncmp
- - remove a few strlen() calls
- - add Curl_dyn_setlen() that can "trim" an existing dynbuf
+ Ref: #11328
+ Closes #12036
- Closes #9408
+Daniel Stenberg (5 Oct 2023)
-Jay Satiro (7 Sep 2022)
-- setup-win32: no longer define UNICODE/_UNICODE implicitly
+- RELEASE-NOTES: synced
- - If UNICODE or _UNICODE is defined but the other isn't then error
- instead of implicitly defining it.
+Jay Satiro (5 Oct 2023)
- As Marcel pointed out it is too late at this point to make such a define
- because Windows headers may already be included, so likely it never
- worked. We never noticed because build systems that can make Windows
- Unicode builds always define both. If one is defined but not the other
- then something went wrong during the build configuration.
+- idn: fix WinIDN null ptr deref on bad host
- Bug: https://github.com/curl/curl/pull/9375#discussion_r956545272
- Reported-by: Marcel Raad
+ - Return CURLE_URL_MALFORMAT if IDN hostname cannot be converted from
+ UTF-8 to UTF-16.
- Closes https://github.com/curl/curl/pull/9384
+ Prior to this change a failed conversion erroneously returned CURLE_OK
+ which meant 'decoded' pointer (what would normally point to the
+ punycode) would not be written to, remain NULL and be dereferenced
+ causing an access violation.
-Dan Fandrich (6 Sep 2022)
-- tests: fix tag syntax errors in test files
+ Closes https://github.com/curl/curl/pull/11983
-Marc Hoersken (6 Sep 2022)
-- lib: add required Win32 setup definitions in setup-win32.h
+Dan Fandrich (4 Oct 2023)
- Assisted-by: Jay Satiro
- Reviewed-by: Marcel Raad
+- tests: close the shell used to start sshd
- Follow up to #9312
- Closes #9375
+ This shell isn't needed once sshd starts, so use "exec" so it doesn't
+ stick around.
-Daniel Stenberg (6 Sep 2022)
-- pingpong: extend the response reading error with errno
+ Closes #12032
- To help diagnosing the cause of the problem.
+Daniel Stenberg (4 Oct 2023)
- See #9380
- Closes #9443
+- base64: also build for curl
-- curl-compilers.m4: use -O2 as default optimize for clang
+ Since the tool itself now uses the base64 code using the curlx way, it
+ needs to build also when the tool needs it. Starting now, the tool build
+ defines BULDING_CURL to allow lib-side code to use it.
- Not -Os
+ Follow-up to 2e160c9c6525
- Closes #9444
+ Closes #12010
-- tool_operate: fix msnprintfing the error message
+Eduard Strehlau (4 Oct 2023)
- Follow-up to 7be53774c41c59b47075fba
+- tests: Fix zombie processes left behind by FTP tests.
- Coverity CID 1513717 pointed out that we cannot use sizeof() on the
- error buffer anymore.
+ ftpserver.pl correctly cleans up spawned server processes,
+ but forgets to wait for the shell used to spawn them.
+ This is barely noticeable during a normal testrun,
+ but causes process exhaustion and test failure
+ during a complete torture run of the FTP tests.
- Closes #9440
+ Fixes #12018
+ Closes #12020
-- [Emanuele Torre brought this change]
+Dan Fandrich (4 Oct 2023)
- curl_ctype: add space around <= operator in ISSPACE macro
+- github/labeler: improve labeler matches
- Follow-up to f65f750
+- test574: add a timeout to the test
- Closes #9441
+ This one hangs occasionally, so this will speed up a test run and allow
+ logs to be seen when it does.
-- CURLOPT_PROXY_SSLCERT_BLOB.3: this is for HTTPS proxies
+ Closes #12025
- The 'protocols' listed were previously wrong.
+- tests: propagate errors in libtests
- Reported-by: ProceduralMan on github
- Fixes #9434
- Closes #9435
+ Use the test macros to automatically propagate some errors, and check
+ and log others while running the tests. This can help in debugging
+ exactly why a test has failed.
-- curl_ctype: convert to macros-only
+- tests: set --expect100-timeout to improve test reliability
- This no longer provide functions, only macros. Runs faster and produces
- smaller output.
+ On an overloaded server, the default 1 second timeout can go by without
+ the test server having a chance to respond with the expected headers,
+ causing tests to fail. Increase the 1 second timeout to 99 seconds so
+ this failure mode is no longer a problem on test 1129. Some other tests
+ already set a high value, but make them consistently 99 seconds so if
+ something goes wrong the test is stalled for less time.
- The biggest precaution this change brings:
+ Ref: #11328
- DO NOT use post/pre-increments when passing arguments to the macros.
+- CI: ignore the "flaky" and "timing-dependent" test results in CMake
- Closes #9429
+ This was already done for automake builds but CMake builds were missed.
+ Test 1086 actually causes the test harness to crash with:
-- misc: ISSPACE() => ISBLANK()
+ Warning: unable to close filehandle DWRITE properly: Broken pipe at C:/projec
+ ts/curl/tests/ftpserver.pl line 527
- Instances of ISSPACE() use that should rather use ISBLANK(). I think
- somewhat carelessly used because it sounds as if it checks for space or
- whitespace, but also includes %0a to %0d.
+ Rather than fix it now, this change leaves test 1086 entirely skipped on
+ those builds that show this problem.
- For parsing purposes, we should only accept what we must and not be
- overly liberal. It leads to surprises and surprises lead to bad things.
+ Follow-up to 589dca761
- Closes #9432
+ Ref: #11865
-- ctype: remove all use of <ctype.h>, use our own versions
+Viktor Szakats (4 Oct 2023)
- Except in the test servers.
+- cmake: improve OpenLDAP builds
- Closes #9433
+ - cmake: detect OpenLDAP based on function `ldap_init_fd`.
+ autotools does this. autotools also publishes this detection result
+ in `HAVE_LDAP_INIT_FD`. We don't mimic that with CMake as the source
+ doesn't use this value. (it might need to be remove-listed in
+ `scripts/cmp-config.pl` for future OpenLDAP test builds.)
+ This also deletes existing self-declaration method via the
+ CMake-specific `CURL_USE_OPENLDAP` configuration.
-Marc Hoersken (5 Sep 2022)
-- cmake: skip superfluous hex2dec conversion using math expr
+ - cmake: define `LDAP_DEPRECATED=1` for OpenLDAP.
+ Like autotools does. This fixes a long list of these warnings:
+ ```
+ /usr/local/opt/openldap/include/ldap.h:1049:5: warning: 'LDAP_DEPRECATED' i
+ s not defined, evaluates to 0 [-Wundef]
+ ```
- CMake seems to be able to compare two hex values just fine.
- Also make sure CURL_TARGET_WINDOWS_VERSION is respected.
+ - cmake: delete LDAP TODO comment no longer relevant.
- Assisted-by: Marcel Raad
- Reviewed-by: Viktor Szakats
- Reported-by: Keitagit-kun on github
+ Also:
- Follow up to #9312
- Fixes #9406
- Closes #9411
+ - autotools: replace domain name `dummy` with `0.0.0.0` in LDAP feature
+ detection functions.
-Daniel Stenberg (5 Sep 2022)
-- curl_easy_pause.3: unpausing is as fast as possible
+ Ref: #11964 (effort to sync cmake detections with autotools)
- Reported-by: ssdbest on github
- Fixes #9410
- Closes #9430
+ Closes #12024
-- CURLOPT_DNS_INTERFACE.3: mention it works for almost all protocols
+- cmake: fix unity builds for more build combinations
- Except file.
+ By using unique static function/variable names in source files
+ implementing these interfaces.
- Reported-by: ProceduralMan on github
- Fixes #9427
- Closes #9428
+ - OpenLDAP combined with any SSH backend.
-- NPN: remove support for and use of
+ - MultiSSL with mbedTLS, OpenSSL, wolfSSL, SecureTransport.
- Next Protocol Negotiation is a TLS extension that was created and used
- for agreeing to use the SPDY protocol (the precursor to HTTP/2) for
- HTTPS. In the early days of HTTP/2, before the spec was finalized and
- shipped, the protocol could be enabled using this extension with some
- servers.
+ Closes #12027
- curl supports the NPN extension with some TLS backends since then, with
- a command line option `--npn` and in libcurl with
- `CURLOPT_SSL_ENABLE_NPN`.
+Daniel Stenberg (4 Oct 2023)
- HTTP/2 proper is made to use the ALPN (Application-Layer Protocol
- Negotiation) extension and the NPN extension has no purposes
- anymore. The HTTP/2 spec was published in May 2015.
+- tests: remove leading spaces from some tags
- Today, use of NPN in the wild should be extremely rare and most likely
- totally extinct. Chrome removed NPN support in Chrome 51, shipped in
- June 2016. Removed in Firefox 53, April 2017.
+ The threee tags `<name>`, `</name>` and `<command>` were frequently used
+ with a leading space that this removes. The reason this habbit is so
+ widespread in testcases is probably that they have been copy and pasted.
- Closes #9307
+ Hence, fixing them all now might curb this practice from now on.
-- RELEASE-NOTES: synced
+ Closes #12028
- and bump the tentative next release version to 7.85.1
+Viktor Szakats (4 Oct 2023)
-- [Samuel Henrique brought this change]
+- GHA: bump actions/checkout
- configure: fail if '--without-ssl' + explicit parameter for an ssl lib
+ Follow-up to 2e0fa50fc16b9339f51e0a7bfff0352829323acb #11964
+ Follow-up to c39585d9b7ef3cbfc1380812dec60e7b275b6af3 #12000
- A side effect of a previous change to configure (576e507c78bdd2ec88)
- exposed a non-critical issue that can happen if configure is called with
- both '--without-ssl' and some parameter setting the use of a ssl library
- (e.g. --with-gnutls). The configure script would end up assuming this is
- a MultiSSL build, due to the way the case statement is written.
+ Closes #12023
- I have changed the order of the variables in the string concatenation
- for the case statement and also tweaked the options so that
- --without-ssl never turns the build into a MultiSSL one and also clearly
- stating that there are conflicting parameters if the user sets it like
- described above.
+- spelling: fix codespell 2.2.6 typos
- Closes #9414
+ Closes #12019
-- tests/certs/scripts: insert standard curl source headers
+Daniel Stenberg (3 Oct 2023)
- ... including the SPDX-License-Identifier.
+- GHA: add workflow to compare configure vs cmake outputs
- These omissions were not detected by the RUEUSE CI job nor the copyright.pl
- scanners because we have a general wildcard in .reuse/dep5 for
- "tests/certs/*".
+ Uses scripts/cmp-config.pl two compare two curl_config.h files,
+ presumbly generated with configure and cmake. It displays the
+ differences and filters out a lot of known lines we ignore.
- Reported-by: Samuel Henrique
- Fixes #9417
- Closes #9420
+ The script also shows the matches that were *not* used. Possibly
+ subjects for removal.
-- [Samuel Henrique brought this change]
+ Closes #11964
- docs: remove mentions of deprecated '--without-openssl' config parameter
+- appveyor: enable test 571
- Closes #9415
+ Follow-up from 8a940fd55c175f7 / #12013
-- [Samuel Henrique brought this change]
+ Closes #12017
- manpages: Fix spelling of "allows to" -> "allows one to"
+Viktor Szakats (3 Oct 2023)
- References:
- https://salsa.debian.org/lintian/lintian/-/blob/master/tags/t/typo-in-manual-page.tag
- https://english.stackexchange.com/questions/60271/grammatical-complements-for-allow/60285#60285
+- build: alpha-sort source files for lib and src
- Closes #9419
+ Closes #12014
-- [Samuel Henrique brought this change]
+- cmake: delete old `HAVE_LDAP_URL_PARSE` logic
- CURLOPT_WILDCARDMATCH.3: Fix backslash escaping under single quotes
+ Left there by accident after adding proper detection for this.
- Lintian (on Debian) has been complaining about this for a while but
- I didn't bother initially as the groff parser that we use is not
- affected by this.
+ Follow-up to 772f0d8edf1c3c2745543f42388ccec5a16ee2c0 #12006
- But I have now noticed that the online manpage is affected by it:
- https://curl.se/libcurl/c/CURLOPT_WILDCARDMATCH.html
+ Ref: #11964 (effort to sync cmake detections with autotools)
- (I'm using double quotes for quoting-only down below)
+ Closes #12015
- The section that should be parsed as "'\'" ends up being parsed as
- "'´".
+Stefan Eissing (3 Oct 2023)
- This is due to roffit not parsing "'\\'" correctly, which is fine
- as the "correct" way of writing "'\'" is "'\e'" instead.
+- tests: increase lib571 timeout from 3s to 30s
- Note that this fix is not enough to fix the online manpage at
- curl's website, as roffit seems to parse it wrongly either way.
+ - 3s is too short for our CI, making this test fail occasionally
+ - test usually experiences no delay run locally, so 30s wont hurt
- My intent is to at least fix the manpage so that roffit can
- be changed to parse "'\e'" correctly (although I suggest making
- roffit parse both ways correctly, since that's what groff does).
+ Closes #12013
- More details at:
- https://bugs.debian.org/966803
- https://salsa.debian.org/lintian/lintian/-/blob/930b18e4b28b7540253f458ef42a884cca7965c3/tags/a/acute-accent-in-manual-page.tag
+Viktor Szakats (3 Oct 2023)
- Closes #9418
+- cmake: fix unity with Windows Unicode + TrackMemory
-- tool_operate: reduce errorbuffer allocs
+ Found the root cause of the startup crash in unity builds with Unicode
+ and TrackMemory enabled at the same time.
- - parallel transfers: only alloc and keep errorbuffers in memory for
- actual "live" transfers and not for the ones in the pending queue
+ We must make sure that the `memdebug.h` header doesn't apply to
+ `lib/curl_multibyte.c` (as even noted in a comment there.) In unity
+ builds all headers apply to all sources, including `curl_multibyte.c`.
+ This probably resulted in an infinite loop on startup.
- - serial transfers: reuse the same fixed buffer for all transfers, not
- allocated at all.
+ Exclude this source from unity compilation with TrackMemory enabled,
+ in both libcurl and curl tool. Enable unity mode for a debug Unicode
+ CI job to keep it tested. Also delete the earlier workaround that
+ fully disabled unity for affected builds.
- Closes #9394
+ Follow-up to d82b080f6374433ce7c98241329189ad2d3976f8 #12005
+ Follow-up to 3f8fc25720900b14b7432f4bd93407ca15311719 #11095
-Viktor Szakats (31 Aug 2022)
-- misc: spelling fixes
+ Closes #11928
- Found using codespell 2.2.1.
+- cmake: disable unity mode with Windows Unicode + TrackMemory
- Also delete the redundant protocol designator from an archive.org URL.
+ "TrackMemory" is `ENABLE_DEBUG=ON` (aka `ENABLE_CURLDEBUG=ON`,
+ aka `-DCURLDEBUG`).
- Reviewed-by: Daniel Stenberg
- Closes #9403
+ There is an issue with memory tracking and Unicode when built in "unity"
+ mode, which results in the curl tool crashing right on startup, even
+ without any command-line option. Interestingly this doesn't happen under
+ WINE (at least on the system I tested this on), but consistenly happens
+ on real Windows machines. Crash is 0xC0000374 heap corruption. Both
+ shared and static curl executables are affected.
+
+ This limitation probably won't hit too many people, but it remains
+ a TODO to find and fix the root cause and drop this workaround.
-Daniel Stenberg (31 Aug 2022)
-- tool_progress: remove 'Qd' from the parallel progress bar
+ Example builds and runs:
+ https://ci.appveyor.com/project/curlorg/curl/builds/48169111/job/17cptxhtpubd
+ 7iwj#L313 (static)
+ https://ci.appveyor.com/project/curlorg/curl/builds/48169111/job/76e1ge758tby
+ qu9c#L317 (shared)
- The "queued" value is no longer showing anything useful to the user. It
- is an internal number of transfers waiting at that moment.
+ Follow-up to 3f8fc25720900b14b7432f4bd93407ca15311719 #11095
- Closes #9389
+ Ref: #11928
+ Closes #12005
-- tool_operate: prevent over-queuing in parallel mode
+- cmake: tidy-up `NOT_NEED_LBER_H` detection
- When doing a huge amount of parallel transfers, we must not add them to
- the per_transfer list frivolously since they all use memory after all.
- This was previous done without really considering millions or billions
- of transfers. Massive parallelism would use a lot of memory for no good
- purpose.
+ Follow-up to 772f0d8edf1c3c2745543f42388ccec5a16ee2c0 #12006
- The queue is now limited to twice the paralleism number.
+- appveyor: rewrite batch in PowerShell + CI improvements
- This makes the 'Qd' value in the parallel progress meter mostly useless
- for users, but works for now for us as a debug display.
+ 1. Rewrite in PowerShell:
- Reported-by: justchen1369 on github
- Fixes #8933
- Closes #9389
+ - rewrite MS-DOS batch build script in PowerShell.
+ - move some bash operations into native PowerShell.
+ - fixups for PowerShell insisting on failure when a command outputs
+ something to stderr.
+ - fix to actually run `curl -V` after every build.
+ (and exclude ARM64 builds.)
+ - also say why we skipped `curl -V` if we had to skip.
+ - fix CMake warnings about unused configuration variables, by adapting
+ these dynamically for build cases.
+ - dedupe OpenSSL path into a variable.
+ - disable `test1451` failing with a warning anyway due to missing python
+ impacket. (after trying and failing to install impacket)
+ PowerShell promotes these warnings to errors by PowerShell. We can also
+ suppress they wholesale if they start causing issues in the future,
+ like we already to with `autoreconf` and `./configure`.
-Viktor Szakats (31 Aug 2022)
-- cmake: fix original MinGW builds
+ PowerShell is better than MS-DOS batches, so the hope is this makes it
+ easier to extend and maintain the AppVeyor build logic. POSIX/bash isn't
+ supported inline by AppVeyor on Windows build machines, but we are okay
+ to keep it in an external script, so it's also an option.
- 1. Re-enable `HAVE_GETADDRINFO` detection on Windows
+ 2. CI improvements:
- Commit d08ee3c83d6bd416aef62ff844c98e47c4682429 (in 2013) added logic
- that automatically assumed `getaddrinfo()` to be present for builds
- with IPv6 enabled. As it turns out, certain toolchains (e.g. original
- MinGW) by default target older Windows versions, and thus do not
- support `getaddrinfo()` out of the box. The issue was masked for
- a while by CMake builds forcing a newer Windows version, but that
- logic got deleted in commit 8ba22ffb2030ed91312fc8634e29516cdf0a9761.
- Since then, some CI builds started failing due to IPv6 enabled,
- `HAVE_GETADDRINFO` set, but `getaddrinfo()` in fact missing.
+ - enable tests for a "unity" build job.
+ - speed-up CI initialization by using shallow clones of the curl repo.
+ - speed-up CMake MSVC jobs with `TrackFileAccess=false`.
+ - enable parallelism in `VisualStudioSolution` builds.
+ - display CMake version before builds.
+ - always show the CPU in job names.
+ - tell which jobs are build-only in job names.
+ - move `TESTING:` value next to `DISABLED_TESTS:` in two jobs.
+ - add `config.log` (autotools) to dumped logs (need to enable manually).
- It also turns out that IPv6 works without `getaddrinfo()` since commit
- 67a08dca27a6a07b36c7f97252e284ca957ff1a5 (from 2019, via #4662). So,
- to resolve all this, we can now revert the initial commit, thus
- restoring `getaddrinfo()` detection and support IPv6 regardless of its
- outcome.
+ 3. Style:
- Reported-by: Daniel Stenberg
+ - use single-quotes in YAML like we do in other CI YAML files.
+ It also allows to drop quoting characters and lighter to write/read.
+ (keep double quotes for PowerShell strings needing expansion.)
- 2. Omit `bcrypt` with original MinGW
+ Closes #11999
- Original (aka legacy/old) MinGW versions do not support `bcrypt`
- (introduced with Vista). We already have logic to handle that in
- `lib/rand.c` and autotools builds, where we do not call the
- unsupported API and do not link `bcrypt`, respectively, when using
- original MinGW.
+- cmake: fix `HAVE_LDAP_SSL`, `HAVE_LDAP_URL_PARSE` on non-Windows
- This patch ports that logic to CMake, fixing the link error:
- `c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: cannot find -lbcrypt`
+ - set `HAVE_LDAP_URL_PARSE` if `ldap_url_parse` function exists.
+ Before this patch we set it based it on the presence of `stricmp`,
+ which correctly enabled it on e.g. Windows, but was inaccurate for
+ other platforms.
- Ref: https://ci.appveyor.com/project/curlorg/curl/builds/44624888/job/40vle84cn4vle7s0#L508
- Regression since 76172511e7adcf720f4c77bd91f49278300ec97e
+ - always set `HAVE_LDAP_SSL` if an LDAP backend is detected and
+ LDAPS is not explicitly disabled. This mimics autotools behaviour.
+ Previously we set it only for Windows LDAP. After this fix, LDAPS is
+ correctly enabled in default macOS builds.
- Fixes #9214
- Fixes #9393
- Fixes #9395
- Closes #9396
+ - enable LDAP[S] for a CMake macOS CI job. Target OS X 10.9 (Mavericks)
+ to avoid deprecation warnings for LDAP API.
-Version 7.85.0 (31 Aug 2022)
+ - always detect `HAVE_LDAP_SSL_H`, even with LDAPS explicitly disabled.
+ This doesn't make much sense, but let's do it to sync behaviour with
+ autotools.
+
+ - fix benign typo in variable name.
+
+ Ref: #11964 (effort to sync cmake detections with autotools)
+
+ Closes #12006
+
+- autotools: restore `HAVE_IOCTL_*` detections
+
+ This restores `CURL_CHECK_FUNC_IOCTL` detection. I deleted it in
+ 4d73854462f30948acab12984b611e9e33ee41e6 and
+ c3456652a0c72d1845d08df9769667db7e159949 (2022-08), because the
+ `HAVE_IOCTL` result it generated was unused in the source. But,
+ I did miss the fact that this had two dependent checks:
+ `CURL_CHECK_FUNC_IOCTL_FIONBIO`,
+ `CURL_CHECK_FUNC_IOCTL_SIOCGIFADDR` that we do actually need:
+ `HAVE_IOCTL_FIONBIO`, `HAVE_IOCTL_SIOCGIFADDR`.
+
+ Regression from 4d73854462f30948acab12984b611e9e33ee41e6
+
+ Ref: #11964 (effort to sync cmake detections with autotools)
+
+ Closes #12008
+
+Daniel Stenberg (2 Oct 2023)
+
+- RELEASE-PROCEDURE.md: updated coming release dates
-Daniel Stenberg (31 Aug 2022)
- RELEASE-NOTES: synced
- curl 7.85.0 release
+Viktor Szakats (1 Oct 2023)
-- THANKS: add contributors from the 7.85.0 release
+- cmake: pre-cache `HAVE_POLL_FINE` on Windows
-- getparam: correctly clean args
+ Windows doesn't support `poll()`, so we can safely skip checking for
+ fine poll.
- Follow-up to bf7e887b2442783ab52
+ Closes #12003
- The previous fix for #9128 was incomplete and caused #9397.
+- gha: bump actions to latest versions
- Fixes #9397
- Closes #9399
+ - actions@checkout@v4 (from v3 and v2)
-- zuul: remove the clang-tidy job
+ - fsfe/reuse-action@v2 (from v1)
- Turns out we don't see the warnings, but the warnings right now are
- plain ridiculous and unhelpful so we can just as well just kill this
- job.
+ Closes #12000
- Closes #9390
+Stefan Eissing (30 Sep 2023)
-- cmake: set feature PSL if present
+- h2: testcase and fix for pausing h2 streams
- ... make test 1014 pass when libpsl is used.
+ - refs #11982 where it was noted that paused transfers may
+ close successfully without delivering the complete data
+ - made sample poc into tests/http/client/h2-pausing.c and
+ added test_02_27 to reproduce
- Closes #9391
+ Closes #11989
+ Fixes #11982
+ Reported-by: Harry Sintonen
-- lib530: simplify realloc failure exit path
+Viktor Szakats (30 Sep 2023)
- To make code analyzers happier
+- cmake: validate `CURL_DEFAULT_SSL_BACKEND` config value
- Closes #9392
+ Before this patch CMake builds accepted any value and it was used at
+ runtime as-is. This patch make sure that the selected default backend
+ is also enabled in the build. It also enforces a full lowercase value.
-- [Orgad Shaneh brought this change]
+ This improves reproducibility and brings CMake in sync with autotools
+ which already worked like described above.
- tests: add tests for netrc login/password combinations
+ Follow-up to 26c7feb8b9d51a57fab3325571b4bbfa03b11af0 #11774
- Covers the following PRs:
+ Closes #11998
- - #9066
- - #9247
- - #9248
+- autotools: adjust `CURL_CA_PATH` value to CMake
- Closes #9256
+ autotools was using the same value as CMake, but with an ending
+ slash. Delete the ending slash to match configurations.
-- [Orgad Shaneh brought this change]
+ Ref: #11964 (effort to sync cmake detections with autotools)
- url: really use the user provided in the url when netrc entry exists
+ Closes #11997
- If the user is specified as part of the URL, and the same user exists
- in .netrc, Authorization header was not sent at all.
+- cmake: detect `sys/wait.h` and `netinet/udp.h`
- The user and password fields were assigned in conn->user and password
- but the user was not assigned to data->state.aptr, which is the field
- that is used in output_auth_headers and friends.
+ Ref: #11964 (effort to sync cmake detections with autotools)
- Fix by assigning the user also to aptr.
+ Closes #11996
- Amends commit d1237ac906ae7e3cd7a22c3a2d3a135a97edfbf5.
+Daniel Stenberg (30 Sep 2023)
- Fixes #9243
+- lib: provide and use Curl_hexencode
-- [Orgad Shaneh brought this change]
+ Generates a lower case ASCII hex output from a binary input.
- netrc: Use the password from lines without login
+ Closes #11990
- If netrc entry has password with empty login, use it for any username.
+- configure: check for the capath by default
- Example:
- .netrc:
- machine example.com password 123456
+ ... if the chosen TLS backend supports it: OpenSSL, GnuTLS, mbedTLS or wolfSS
+ L
- curl -vn http://user@example.com/
+ cmake: synced
- Fix it by initializing state_our_login to TRUE, and reset it only when
- finding an entry with the same host and different login.
+ Assisted-by: Viktor Szakats
+ Closes #11987
- Closes #9248
+- wolfssl: ignore errors in CA path
-- [Jay Satiro brought this change]
+ The default wolfSSL_CTX_load_verify_locations() function is quite picky
+ with the certificates it loads and will for example return error if just
+ one of the certs has expired.
- url: treat missing usernames in netrc as empty
+ With the *_ex() function and its WOLFSSL_LOAD_FLAG_IGNORE_ERR flag, it
+ behaves more similar to what OpenSSL does by default.
- - If, after parsing netrc, there is a password with no username then
- set a blank username.
+ Even the set of default certs on my Debian unstable has several expired
+ ones.
- This used to be the case prior to 7d600ad (precedes 7.82). Note
- parseurlandfillconn already does the same thing for URLs.
+ Assisted-by: Juliusz Sosinowicz
+ Assisted-by: Michael Osipov
- Reported-by: Raivis <standsed@users.noreply.github.com>
- Testing-by: Domen Kožar
+ Closes #11987
- Fixes https://github.com/curl/curl/issues/8653
- Closes #9334
- Closes #9066
+- create-dirs.d: clarify it also uses --output-dirs
-- test8: verify that "ctrl-byte cookies" are ignored
+ Reported-by: Robert Simpson
+ Fixes #11991
+ Closes #11995
-- cookie: reject cookies with "control bytes"
+Viktor Szakats (30 Sep 2023)
- Rejects 0x01 - 0x1f (except 0x09) plus 0x7f
+- appveyor: fix yamlint issues, indent
- Reported-by: Axel Chong
+ Also:
+ - use double quotes in all batch if statements.
- Bug: https://curl.se/docs/CVE-2022-35252.html
+ Closes #11994
- CVE-2022-35252
+- cmake: detect `HAVE_CLOCK_GETTIME_MONOTONIC_RAW`
- Closes #9381
+ Based on existing autotools logic.
-- libssh: ignore deprecation warnings
+ Ref: #11964 (effort to sync cmake detections with autotools)
- libssh 0.10.0 marks all SCP functions as "deprecated" which causes
- compiler warnings and errors in our CI jobs and elsewhere. Ignore
- deprecation warnings if 0.10.0 or later is found in the build.
+ Closes #11981
- If they actually remove the functions at a later point, then someone can
- deal with that pain and functionality break then.
+- cmake: detect `HAVE_GETADDRINFO_THREADSAFE`
- Fixes #9382
- Closes #9383
+ Based on existing autotools logic.
-- Revert "schannel: when importing PFX, disable key persistence"
+ autotools checks for old versions of the allowlisted target OSes and
+ disables this feature when seeing them. In CMake we assume we're running
+ on newer systems and enable regardless of OS version.
- This reverts commit 70d010d285315e5f1cad6bdb4953e167b069b692.
+ autotools always runs all 3 probes for non-fast-tracked systems and
+ enables this feature if any one of them was successful. To save
+ configuration time, CMake stops at the first successful check.
- Due to further reports in #9300 that indicate this commit might
- introduce problems.
+ OpenBSD is not fast-tracked and then gets blocklisted as a generic BSD
+ system. I haven't double-checked if this is correct, but looks odd.
-- multi: use larger dns hash table for multi interface
+ Ref: #11964 (effort to sync cmake detections with autotools)
- Have curl_multi_init() use a much larger DNS hash table than used for
- the easy interface to scale and perform better when used with _many_
- host names.
+ Closes #11979
- curl_share_init() sets an in-between size.
+- cmake: fix `HAVE_WRITABLE_ARGV` detection
- Inspired-by: Ivan Tsybulin
- See #9340
- Closes #9376
+ Move detection before the creation of detection results in
+ `curl_config.h`.
-Marc Hoersken (28 Aug 2022)
-- CI/runtests.pl: add param for dedicated curl to talk to APIs
+ Ref: #11964 (effort to sync cmake detections with autotools)
- This should make it possible to also report test failures
- if our freshly build curl binary is not fully functional.
+ Closes #11978
+
+- appveyor: minor improvements
+
+ - run `curl -V` after builds to see if they run and with what features.
+ Except for one job where a CRT DLL is missing. And ARM64 which should
+ fail, but is silently not launched instead.
+
+ - copy libcurl DLL next to curl tool and tests binaries in shared mode.
+ This makes it possible to run the tests. (We don't run tests after
+ these builds yet.)
+
+ - list the DLLs and EXEs present after the builds.
+
+ - add `DEBUG` variable for CMake builds to allow disabling it, for
+ testing non-debug builds. (currently enabled for all)
+
+ - add commented lines that dump CMake configuration logs for debugging
+ build/auto-detection issues.
+
+ - add gcc version to jobs where missing.
+
+ - switch a job to the native MSYS2 mingw-w64 toolchain. This adds gcc 9
+ to the build mix.
+
+ - make `SHARED=OFF` and `OPENSSL=OFF` defaults global.
+
+ - delete a duplicate backslash.
+
+ Closes #11976
+
+- configure: replace adhoc domain with `localhost` in tests
Reviewed-by: Daniel Stenberg
- Closes #9360
+ Closes #11988
-Daniel Stenberg (27 Aug 2022)
-- [Jacob Tolar brought this change]
+- tidy-up: use more example domains
- openssl: add cert path in error message
+ Also make use of the example TLD:
+ https://en.wikipedia.org/wiki/.example
- Closes #9349
+ Reviewed-by: Daniel Stenberg
+ Closes #11992
-- [Jacob Tolar brought this change]
+Dan Fandrich (29 Sep 2023)
- cert.d: clarify that escape character works for file paths
+- runtests: display the test status if tests appear hung
- Closes #9349
+ It sometimes happens that a test hangs during a test run and never
+ returns. The test harness will wait indefinitely for the results and on
+ CI servers the CI job will eventually be killed after an hour or two.
+ At the end of a test run, if results haven't come in within a couple of
+ minutes, display the status of all test runners and what tests they're
+ running to help in debugging the problem.
-- gha: move over ngtcp2-gnutls CI job from zuul
+ This feature is really only kick in with parallel testing enabled, which
+ is fine because without parallel testing it's usually easy to tell what
+ test has hung.
- Closes #9331
+ Closes #11980
-Marc Hoersken (26 Aug 2022)
-- cmake: add detection of threadsafe feature
+- github/labeler: remove workaround for labeler
- Avoids failing test 1014 by replicating configure checks
- for HAVE_ATOMIC and _WIN32_WINNT with custom CMake tests.
+ This was added due to what seemed to be a bug regarding the sync-labels:
+ config option, but it looks like it wasn't necessary.
- Reviewed-by: Marcel Raad
+ Follow-up to b2b0534e7
- Follow up to #8680
- Closes #9312
+Viktor Szakats (29 Sep 2023)
-Daniel Stenberg (26 Aug 2022)
-- RELEASE-NOTES: synced
+- docs: upgrade an URL to HTTPS in `BINDINGS.md` [ci skip]
-Marc Hoersken (26 Aug 2022)
-- CI/azure: align torture shallowness with GHA
+Daniel Stenberg (29 Sep 2023)
- There 25 is used with FTP tests skipped, and 20 for FTP tests.
- This should make torture tests stay within the 60min timeout.
+- docs: replace made up domains with example.com
- Reviewed-by: Daniel Stenberg
- Closes #9371
+ in FAQ and MANUAL.md
-- multi_wait: fix and improve Curl_poll error handling on Windows
+ - example.com was made for this purpose.
- First check for errors and return CURLM_UNRECOVERABLE_POLL
- before moving forward and waiting on socket readiness events.
+ - reduces the risk that one of those domains suddenly start hosting
+ something nasty and we provide links to them
- Reviewed-by: Jay Satiro
- Reviewed-by: Marcel Raad
+ Closes #11986
- Reported-by: Daniel Stenberg
- Ref: #9361
+Michael Osipov (29 Sep 2023)
- Follow up to #8961
- Closes #9372
+- acinclude.m4: Document proper system truststore on FreeBSD
-- multi_wait: fix skipping to populate revents for extra_fds
+ The default system truststore on FreeBSD has been /etc/ssl/certs for many
+ years now. It is managed canonically through certctl(8) and contains hashed
+ symlinks for OpenSSL and other TLS providers.
+ The previous ones require security/ca_root_nss which might not be installed o
+ r
+ will not contain any custom CA certificates.
- On Windows revents was not populated for extra_fds if
- multi_wait had to wait due to the Curl_poll pre-check
- not signalling any readiness. This commit fixes that.
+ Closes #11985
- Reviewed-by: Marcel Raad
- Reviewed-by: Jay Satiro
+Daniel Stenberg (29 Sep 2023)
- Closes #9361
+- FAQ: How do I upgrade curl.exe in Windows?
-- CI/appveyor: disable TLS in msys2-native autotools builds
+ This is a growing question, better answer it here to get somewhere to
+ point users to.
- Schannel cannot be used from msys2-native Linux-emulated builds.
+ Closes #11984
- Reviewed-by: Marcel Raad
- Reviewed-by: Daniel Stenberg
+Viktor Szakats (28 Sep 2023)
- Follow up to #9367
- Closes #9370
+- cmake: pre-cache `HAVE_BASENAME` for mingw-w64 and MSVC
-Jay Satiro (25 Aug 2022)
-- tests: fix http2 tests to use CRLF headers
+ `basename` is present in mingw-w64, missing from MSVC. Pre-cache
+ accordingly to make configure faster.
- Prior to this change some tests that rely on nghttpx proxy did not use
- CRLF headers everywhere. A recent change in nghttp2, which updated its
- version of llhttp (HTTP parser), requires curl's HTTP/1.1 test server to
- use CRLF headers.
+ Notice that `basename` has a bug so we later disable it even with
+ mingw-w64:
+ https://github.com/curl/curl/blob/781242ffa44a9f9b95b6da5ac5a1bf6372ec6257/li
+ b/curl_setup.h#L820-L825
- Ref: https://github.com/nghttp2/nghttp2/commit/9d389e8
+ Closes #11974
- Fixes https://github.com/curl/curl/issues/9364
- Closes https://github.com/curl/curl/pull/9365
+Daniel Stenberg (28 Sep 2023)
-Daniel Stenberg (25 Aug 2022)
-- [rcombs brought this change]
+- cmake: add missing checks
- multi: use a pipe instead of a socketpair on apple platforms
+ - check for arc4random. To make rand.c use it accordingly.
+ - check for fcntl
+ - fix fseek detection
+ - add SIZEOF_CURL_SOCKET_T
+ - fix USE_UNIX_SOCKETS
+ - define HAVE_SNPRINTF to 1
+ - check for fnmatch
+ - check for sched_yield
+ - remove HAVE_GETPPID duplicate from curl_config.h
+ - add HAVE_SENDMSG
- Sockets may be shut down by the kernel when the app is moved to the
- background, but pipes are not.
+ Ref: #11964
- Removed from KNOWN_BUGS
+ Co-authored-by: Viktor Szakats
+ Closes #11973
- Fixes #6132
- Closes #9368
+- configure: remove unused checks
-- [Somnath Kundu brought this change]
+ - for sys/uio.h
+ - for fork
+ - for connect
- libssh2: provide symlink name in SFTP dir listing
+ Ref: #11964
- When reading the symbolic link name for a file, we need to add the file
- name to base path name.
+ Closes #11973
- Closes #9369
+- lib: remove TIME_WITH_SYS_TIME
-- configure: if asked to use TLS, fail if no TLS lib was detected
+ It is not used in any code anywhere.
- Previously the configure script would just warn about this fact and
- continue with TLS disabled build which is not always helpful. TLS should
- be explicitly disabled if that is what the user wants.
+ Ref: #11964
+ Closes #11975
- Closes #9367
+- docs: update curl man page references
-- [Dustin Howett brought this change]
+ Detected by the manpage-syntax update
- schannel: when importing PFX, disable key persistence
+ Closes #11963
- By default, the PFXImportCertStore API persists the key in the user's
- key store (as though the certificate was being imported for permanent,
- ongoing use.)
+- manpage-syntax: verify curl man page references
- The documentation specifies that keys that are not to be persisted
- should be imported with the flag `PKCS12_NO_PERSIST_KEY`.
- NOTE: this flag is only supported on versions of Windows newer than XP
- and Server 2003.
+ 1. References to curl symbols are now checked that they indeed exist as
+ man pages. This for \f references as well as the names referenced in the
+ SEE ALSO section.
- Fixes #9300
- Closes #9363
+ Allowlist curl.1 since it is not always built in builds
-- unit1303: four tests should have TRUE for 'connecting'
+ 2. References to curl symbols that lack section now causes warning, since tha
+ t
+ will prevent them from getting linked properly
- To match the comments.
+ 3. Check for "bare" references to curl functions and warn, they should be
+ references
- Reported-by: Wu Zheng
+ Closes #11963
- See #9355
- Closes #9356
+- cmake: add check for suseconds_t
-- CURLOPT_BUFFERSIZE.3: add upload buffersize to see also
+ And fix the HAVE_LONGLONG define
- Closes #9354
+ Ref: #11964
+ Closes #11977
-- [Fabian Fischer brought this change]
+Viktor Szakats (28 Sep 2023)
- HTTP3.md: add missing autoreconf command for building with wolfssl
+- tidy-up: whitespace fixes
- Closes #9353
+ Closes #11972
-- RELEASE-NOTES: synced
+- cmake: detect TLS-SRP in OpenSSL/wolfSSL/GnuTLS
-- multi: have curl_multi_remove_handle close CONNECT_ONLY transfer
+ With new option `CURL_DISABLE_SRP=ON` to force-disable it.
+ To match existing option and detection logic in autotools.
- Ẃhen it has been used in the multi interface, it is otherwise left in
- the connection cache, can't be reused and nothing will close them since
- the easy handle loses the association with the multi handle and thus the
- connection cache - until the multi handle is closed or it gets pruned
- because the cache is full.
+ Also:
+ - fix detecting GnuTLS.
+ We assume `nettle` as a GnuTLS dependency.
+ - add CMake GnuTLS CI job.
+ - bump AppVeyor CMake OpenSSL MSVC job to OpenSSL 1.1.1 (from 1.0.2)
+ TLS-SRP fails to detect with 1.0.2 due to an OpenSSL header bug.
+ - fix compiler warning when building with GnuTLS and disabled TLS-SRP.
+ - fix comment typos, whitespace.
- Reported-by: Dominik Thalhammer
- Fixes #9335
- Closes #9342
+ Ref: #11964
-- docs/cmdline-opts: remove \& escapes from all .d files
+ Closes #11967
- gen.pl escapes them itself now
+- tool: use our own stderr variable
-- docs/cmdline-opts/gen.pl: encode leading single and double quotes
+ Earlier this year we changed our own stderr variable to use the standard
+ name `stderr` (to avoid bugs where someone is using `stderr` instead of
+ the curl-tool specific variable). This solution needed to override the
+ standard `stderr` symbol via the preprocessor. This in turn didn't play
+ well with unity builds and caused curl tool to crash or stay silent due
+ to an uninitialized stderr. This was a hard to find issue, fixed by
+ manually breaking out one file from the unity sources.
- As "(aq" and "(dq" to prevent them from implying a meaning in the nroff
- output. This removes the need for using \& escapes in the .d files'
- description parts.
+ To avoid two these two tricks, this patch implements a different
+ solution: Restore using our own local variable for our stderr output and
+ leave `stderr` as-is. To avoid using `stderr` by mistake, add a
+ `checksrc` rule (based on logic we already used in lib for `strerror`)
+ that detects any `stderr` use in `src` and points to using our own
+ variable instead: `tool_stderr`.
- Closes #9352
+ Follow-up to 06133d3e9b8aeb9e9ca0b3370c246bdfbfc8619e
+ Follow-up to 2f17a9b654121dd1ecf4fc043c6d08a9da3522db
-Marc Hoersken (23 Aug 2022)
-- tests/server/sockfilt.c: avoid race condition without a mutex
+ Closes #11958
- Avoid loosing any triggered handles by first aborting and joining
- the waiting threads before evaluating the individual signal state.
+Loïc Yhuel (28 Sep 2023)
- This removes the race condition and therefore need for a mutex.
+- connect: only start the happy eyeballs timer when needed
- Closes #9023
+ The timeout is only used when there is a second address family, for the
+ delayed eyeballer.
-Daniel Stenberg (22 Aug 2022)
-- [Emil Engler brought this change]
+ Closes #11939
- url: output the maximum when rejecting a url
+Daniel Stenberg (28 Sep 2023)
- This commit changes the failf message to output the maximum length, when
- curl refuses to process a URL because it is too long.
+- tool_operate: free 'gateway' correctly
- See: #9317
- Closes: #9327
+ Pointed out by Coverity. The fix in 93885cf3a8d4e was incomplete.
-- [Chris Paulson-Ellis brought this change]
+ Also removed repeated wording in IPFS related error messages.
- configure: fix broken m4 syntax in TLS options
+ Closes #11969
- Commit b589696f added lines to some shell within AC_ARG_WITH macros, but
- inadvertently failed to move the final closing ).
+Stefan Eissing (28 Sep 2023)
- Quote the script section using braces.
+- lib: move handling of `data->req.writer_stack` into Curl_client_write()
- So, if these problems have been around for a while, how did I find them?
- Only because I did a configure including these options:
+ - move definitions from content_encoding.h to sendf.h
+ - move create/cleanup/add code into sendf.c
+ - installed content_encoding writers will always be called
+ on Curl_client_write(CLIENTWRITE_BODY)
+ - Curl_client_cleanup() frees writers and tempbuffers from
+ paused transfers, irregardless of protocol
- $ ./configure --with-openssl --without-rustls
- SSL: enabled (OpenSSL)
+ Closes #11908
- Closes #9344
+Loïc Yhuel (28 Sep 2023)
-- tests/data/CMakeLists: remove making the 'show' makefile target
+- multi: round the timeout up to prevent early wakeups
- It is not used by runtests since 3c0f462
+ Curl_timediff rounds down to the millisecond, so curl_multi_perform can
+ be called too early, then we get a timeout of 0 and call it again.
- Closes #9333
+ The code already handled the case of timeouts which expired less than
+ 1ms in the future. By rounding up, we make sure we will never ask the
+ platform to wake up too early.
-- tests/data/Makefile: remove 'filecheck' target
+ Closes #11938
- No practical use anymore since 3c0f4622cdfd6
+Daniel Stenberg (28 Sep 2023)
- Closes #9332
+- RELEASE-NOTES: spell out that IPFS is via gateway
-- libssh2: make atime/mtime date overflow return error
+- RELEASE-NOTES: synced
- Closes #9328
+- tool_operate: avoid strlen() -1 on zero length content from file
-- libssh: make atime/mtime date overflow return error
+ Follow-up to 65b563a96a226649ba12cb1e
- Closes #9328
+ Closes #11959
-- examples/curlx.c: remove
+- tool_operate: fix memory mixups
- This example is a bit convoluted to use as an example, combined with the
- special license for it makes it unsuitable.
+ Switch to plain getenv() from curl_getenv() to avoid the allocation and
+ having to keep track of which free() or curl_free() that need to be
+ used.
- Closes #9330
+ Coverity found issues and a memory leak.
-- [Tobias Nygren brought this change]
+ Follow-up to 65b563a96a226649ba12cb1e
- curl.h: include <sys/select.h> on SunOS
+ Closes #11959
- It is needed for fd_set to be visible to downstream consumers that use
- <curl/multi.h>. Header is known to exist at least as far back as Solaris
- 2.6.
+Viktor Szakats (27 Sep 2023)
- Closes #9329
+- curl-functions.m4: fixup recent bad edits
-- DEPRECATE.md: push the NSS deprecation date forward one year to 2023
+ Follow-up to 96c29900bcec32dd6bc8e9857c8871ff4b8b8ed9 #11940
- URL: https://curl.se/mail/lib-2022-08/0016.html
+ Closes #11966
-- libssh2: setting atime or mtime >32bit on 4-bytes-long systems
+Daniel Stenberg (27 Sep 2023)
- Since the libssh2 API uses 'long' to store the timestamp, it cannot
- transfer >32bit times on Windows and 32bit architecture builds.
+- curl-functions.m4: fix include line
- Avoid nasty surprises by instead not setting such time.
+ This made the getaddrinfo detection fail, but we did not spot it in the
+ CI because it graciously falled back to using legacy functions instead!
- Spotted by Coverity
+ Follow-up to 96c29900bcec (#11940)
- Closes #9325
+ Closes #11965
-- libssh: setting atime or mtime > 32bit is now just skipped
+- inet_ntop: add typecast to silence Coverity
- The libssh API used caps the time to an unsigned 32bit variable. Avoid
- nasty surprises by instead not setting such time.
+ CID 1024653: Integer handling issues (SIGN_EXTENSION)
- Spotted by Coverity.
+ Suspicious implicit sign extension: "src[i]" with type "unsigned char
+ const" (8 bits, unsigned) is promoted in "src[i] << (1 - i % 2 << 3)" to
+ type "int" (32 bits, signed), then sign-extended to type "unsigned long"
+ (64 bits, unsigned). If "src[i] << (1 - i % 2 << 3)" is greater than
+ 0x7FFFFFFF, the upper bits of the result will all be 1.
- Closes #9324
+ 111 words[i/2] |= (src[i] << ((1 - (i % 2)) << 3));
-Jay Satiro (16 Aug 2022)
-- KNOWN_BUGS: Windows Unicode builds use homedir in current locale
+ The value will not be greater than 0x7FFFFFFF so this still cannot
+ happen.
- Bug: https://github.com/curl/curl/pull/7252
- Reported-by: dEajL3kA@users.noreply.github.com
+ Also, switch to ints here instead of longs. The values stored are 16 bit
+ so at least no need to use 64 bit variables. Also, longs are 32 bit on
+ some platforms so this logic still needs to work with 32 bits.
- Ref: https://github.com/curl/curl/pull/7281
+ Closes #11960
- Closes https://github.com/curl/curl/pull/9305
+- docs: adapt SEE ALSO sections to new requirements
-Daniel Stenberg (16 Aug 2022)
-- test399: switch it to use a config file instead
+ To please manpage-syntax.pl used by test 1173
- ... as using a 65535 bytes host name in a URL does not fit on the
- command line on some systems - like Windows.
+ Closes #11957
- Reported-by: Marcel Raad
- Fixes #9321
- Closes #9322
+- manpage-syntax.pl: verify SEE ALSO syntax
-- RELEASE-NOTES: synced
+ - Enforce a single reference per .BR line
+ - Skip the quotes around the section number for example (3)
+ - Insist on trailing commas on all lines except the last
+ - Error on comma on the last SEE ALSO entry
-- asyn-ares: make a single alloc out of hostname + async data
+ - List the entries alpha-sorted, not enforced just recommended
- This saves one alloc per name resolve and simplifies the exit path.
+ Closes #11957
- Closes #9310
+- connect: expire the timeout when trying next
-- Curl_close: call Curl_resolver_cancel to avoid memory-leak
+ ... so that it gets called again immediately and can continue trying
+ addresses to connect to. Otherwise it might unnecessarily wait for a
+ while there.
- There might be a pending (c-ares) resolve that isn't free'd up yet.
+ Fixes #11920
+ Reported-by: Loïc Yhuel
+ Closes #11935
- Closes #9310
+- http: remove wrong comment for http_should_fail
-- asyn-thread: fix socket leak on OOM
+ Reported-by: Christian Schmitz
+ Ref: #11936
+ Closes #11941
- Closes #9310
+Dan Fandrich (26 Sep 2023)
-- GHA: mv CI torture test from Zuul
+- tool_setopt: remove unused function tool_setopt_flags
- Closes #9310
+ This function is identical to tool_setopt_bitmask except that it treats
+ the argument as unsigned.
-- ngtcp2-wolfssl.yml: add GHA to build ngtcp2 + wolfSSL
+ Closes #11943
- Closes #9318
+Viktor Szakats (26 Sep 2023)
-- test399: verify check of too long host name
+- cmake: add feature checks for `memrchr` and `getifaddrs`
-- url: reject URLs with hostnames longer than 65535 bytes
+ - `HAVE_MEMRCHR` for `memrchr`.
+ - `HAVE_GETIFADDRS` for `getifaddrs`.
+ This was present in `lib/curl_config.h.cmake` but missed the detection
+ logic.
- It *probably* causes other problems too since DNS can't resolve such
- long names, but the SNI field in TLS is limited to 16 bits length.
+ To match existing autotools feature checks.
- Closes #9317
+ Closes #11954
-- curl_multi_perform.3: minor language fix
+- cmake: move global headers to specific checks
- Closes #9316
+ Before this patch we added standard headers unconditionally to the
+ global list of headers used for feature checks. This is unnecessary
+ and also doesn't help CMake 'Generate' performance. This patch moves
+ these headers to each feature check where they are actually needed.
+ Stop using `stddef.h`, as it seems unnecessary.
-- ngtcp2: fix picky compiler warnings with wolfSSL for QUIC
+ I've used autotools' `m4/curl-functions.m4` to figure out these
+ dependencies.
- Follow-up to 8a13be227eede2
+ Also delete checking for the C89 standard header `time.h`, that I
+ missed in the earlier commit.
- Closes #9315
+ Ref: 96c29900bcec32dd6bc8e9857c8871ff4b8b8ed9 #11940
-- ngtcp2: remove leftover variable
+ Closes #11951
- Mistake leftover from my edit before push.
+- src/mkhelp: make generated code pass `checksrc`
- Follow-up from 8a13be227eede2601c2b3b
- Reported-by: Viktor Szakats
- Bug: https://github.com/curl/curl/pull/9290#issuecomment-1214569167
+ Closes #11955
-Viktor Szakats (15 Aug 2022)
-- Makefile.m32: allow -nghttp3/-ngtcp2 without -ssl [ci skip]
+- tests: show which curl tool `runtests.pl` is using
- Before this patch `-nghttp3`/`-ngtcp2` had an effect only when `-ssl`
- was also enabled. `-ssl` meaning OpenSSL (and its forks). After
- 8a13be227eede2601c2b3b1c63e08b3dc9b35dd5 nghttp3/ngtcp2 can also be
- used together with wolfSSL. This patch adds the ability to enable
- `-nghttp3`/`-ngtcp2` independently from `-ssl` (OpenSSL), allowing to
- use it with wolfSSL or other, future TLS backends.
+ To help debugging when there is issue finding or running it.
- Before this patch, it was fine to enable `-nghttp3`/`-ngtcp2`
- unconditionally. After this patch, this is no longer the case, and now
- it's the user's responsibility to enable `-nghttp3`/`-ngtcp2` only
- together with a compatible TLS backend.
+ Closes #11953
- When using a TLS backend other than OpenSSL, the TLS-specific ngtcp2
- library must be configured manually, e.g.:
- `export CURL_LDFLAG_EXTRAS=-lngtcp2_crypto_wolfssl`
+- CI/azure: make `MAKEFLAGS` global to parallelize all jobs
- (or via `NGTCP2_LIBS`)
+ https://dev.azure.com/daniel0244/curl/_build/results?buildId=17528 (before)
+ https://dev.azure.com/daniel0244/curl/_build/results?buildId=17545 (after, wi
+ th -j3)
- Closes #9314
+ Closes #11952
-Daniel Stenberg (15 Aug 2022)
-- [Stefan Eissing brought this change]
+- CI/azure: migrate old mingw MSYS1 jobs to MSYS2
- quic: add support via wolfSSL
+ Also delete an accidental variable reference.
- - based on ngtcp2 PR https://github.com/ngtcp2/ngtcp2/pull/505
- - configure adapted to build against ngtcp2 wolfssl crypto lib
- - quic code added for creation of WOLFSSL* instances
+ Follow-up to 38029101e2d78ba125732b3bab6ec267b80a0e72
- Closes #9290
+ Closes #11945
-Marcel Raad (14 Aug 2022)
-- [David Carlier brought this change]
+Daniel Stenberg (26 Sep 2023)
- memdebug: add annotation attributes
+- docs: add see also curl_multi_get_handles to some man pages
- memory debug tracking annotates whether the returned pointer does not
- `alias`, hints where the size required is, for Windows to be better
- debugged via Visual Studio.
+ Assisted-by: Jay Satiro
- Closes https://github.com/curl/curl/pull/9306
+ Closes #11942
-Daniel Stenberg (14 Aug 2022)
-- GHA: move libressl CI from zuul to GitHub
+Viktor Szakats (26 Sep 2023)
- Closes #9309
+- cmake: assume `_fseeki64` and no `fseeko` on Windows
-- KNOWN_BUGS: FTPS directory listing hangs on Windows with Schannel
+ `_fseeki64` is present in mingw-w64 1.0 (2011-09-26) headers, and
+ at least Watcom C 1.9 (2010) headers and MSVS 2008 [1].
- Closes #9161
+ `fseeko` is not present in any of these.
-- KNOWN_BUGS: CURLOPT_CERTINFO results in CURLE_OUT_OF_MEMORY with Schannel
+ (mingw-w64 1.0 also offers `fseeko64`.)
- Closes #8741
+ [1] https://github.com/curl/curl/pull/11944#issuecomment-1734995004
-- KNOWN_BUGS: libssh blocking and infinite loop problem
+ Follow-up to 9c7165e96a3a9a2d0b7059c87c699b5ca8cdae93 #11918
- Closes #8632
+ Closes #11950
-- RELEASE-NOTES: synced
+- build: delete checks for C89 standard headers
-- msh3: fix the QUIC disconnect function
+ Delete checks and guards for standard C89 headers and assume these are
+ available: `stdio.h`, `string.h`, `time.h`, `setjmp.h`, `stdlib.h`,
+ `stddef.h`, `signal.h`.
- And free request related memory better in 'done'. Fixes a memory-leak.
+ Some of these we already used unconditionally, some others we only used
+ for feature checks.
- Reported-by: Gisle Vanem
- Fixes #8915
- Closes #9304
+ Follow-up to 9c7165e96a3a9a2d0b7059c87c699b5ca8cdae93 #11918 (for `stdio.h` i
+ n CMake)
-- connect: close the happy eyeballs loser connection when using QUIC
+ Closes #11940
- Reviewed-by: Nick Banks
+Stefan Eissing (26 Sep 2023)
- Closes #9303
+- multiif.h: remove Curl_multi_dump declaration
-- [Emil Engler brought this change]
+ Follow-up to d850eea2 which removed the Curl_multi_dump definition.
- refactor: split resolve_server() into functions
+ Closes https://github.com/curl/curl/pull/11946
- This commit splits the branch-heavy resolve_server() function into
- various sub-functions, in order to reduce the amount of nested
- if/else-statements.
+Jay Satiro (26 Sep 2023)
- Beside this, it also removes many else-sequences, by returning in the
- previous if-statement.
+- config-win32: define HAVE__FSEEKI64
- Closes #9283
+ Follow-up to 9c7165e9 which added an fseeko wrapper to the lib that
+ calls _fseeki64 if it is available.
-- schannel: re-indent to use curl style better
+ Closes https://github.com/curl/curl/pull/11944
- Only white space changes
+- docs: explain how PINNEDPUBLICKEY is independent of VERIFYPEER
- Closes #9301
+ - Explain that peer verification via CURLOPT_PINNEDPUBLICKEY takes place
+ even if peer verification via CURLOPT_SSL_VERIFYPEER is turned off.
-- [Emanuele Torre brought this change]
+ The behavior is verified by test2048.
- docs/cmdline-opts: fix example and categories for --form-escape
+ Bug: https://github.com/curl/curl/issues/2935#issuecomment-418371872
+ Reported-by: claudiusaiz@users.noreply.github.com
- The example was missing a "--form" argument
- I also replaced "--form" with "-F" to shorten the line a bit since it
- was already very long.
+ Bug: https://github.com/curl/curl/discussions/11910
+ Reported-by: Hakan Sunay Halil
- And I also moved --form-escape from the "post" category to the "upload"
- category (this is what I originally wanted to fix, before also noticing
- the mistake in the example).
+ Closes https://github.com/curl/curl/pull/11930
- Closes #9298
+Stefan Eissing (26 Sep 2023)
-- [Nick Banks brought this change]
+- openssl: improve ssl shutdown handling
- HTTP3.md: update to msh3 v0.4.0
+ - If SSL shutdown is not finished then make an additional call to
+ SSL_read to gather additional tracing.
- Closes #9297
+ - Fix http2 and h2-proxy filters to forward do_close() calls to the next
+ filter.
-- hostip: resolve *.localhost to 127.0.0.1/::1
+ For example h2 and SSL shutdown before and after this change:
- Following the footsteps of other clients like Firefox/Chrome. RFC 6761
- says clients SHOULD do this.
+ Before:
- Add test 389 to verify.
+ Curl_conn_close -> cf_hc_close -> Curl_conn_cf_discard_chain ->
+ ssl_cf_destroy
- Reported-by: TheKnarf on github
- Fixes #9192
- Closes #9296
+ After:
-Jay Satiro (11 Aug 2022)
-- KNOWN_BUGS: long paths are not fully supported on Windows
+ Curl_conn_close -> cf_hc_close -> cf_h2_close -> cf_setup_close ->
+ ssl_cf_close
- Bug: https://github.com/curl/curl/issues/8361
- Reported-by: Gisle Vanem
+ Note that currently the tracing does not show output on the connection
+ closure handle. Refer to discussion in #11878.
- Closes https://github.com/curl/curl/pull/9288
+ Ref: https://github.com/curl/curl/discussions/11878
-Daniel Stenberg (11 Aug 2022)
-- config: remove the check for and use of SIZEOF_SHORT
+ Closes https://github.com/curl/curl/pull/11858
- shorts are 2 bytes on all platforms curl runs and have ever run on.
+Loïc Yhuel (26 Sep 2023)
- Closes #9291
+- multi: fix small timeouts
-- configure: introduce CURL_SIZEOF
+ Since Curl_timediff rounds down to the millisecond, timeouts which
+ expire in less than 1ms are considered as outdated and removed from the
+ list. We can use Curl_timediff_us instead, big timeouts could saturate
+ but this is not an issue.
- This is a rewrite of the previously used GPLv3+exception licensed
- file. With this change, there is no more reference to GPL so we can
- remove that from LICENSES/.
+ Closes #11937
- Ref: #9220
- Closes #9291
+Viktor Szakats (25 Sep 2023)
-- [Sean McArthur brought this change]
+- cmake: fix stderr initialization in unity builds
- hyper: customize test1274 to how hyper unfolds headers
+ Before this patch, in certain build configurations the curl tool may
+ not have displayed anything (debug, macOS), or crashed at startup
+ (debug, Windows).
- Closes #9217
+ Follow-up to 3f8fc25720900b14b7432f4bd93407ca15311719
+ Necessary after 2f17a9b654121dd1ecf4fc043c6d08a9da3522db
-- [Orgad Shaneh brought this change]
+ Closes #11929
- curl-config: quote directories with potential space
+- cmake: fix missing `zlib.h` when compiling `libcurltool`
- On Windows (at least with CMake), the default prefix is
- C:/Program Files (x86)/CURL.
+ Came up while testing debug/testing build for Windows. I'm not sure why
+ it didn't come up in earlier tests with similar config.
+ `tool_hugehelp.c` might indeed require `zlib.h` and without linking
+ `CURL_LIBS` to the `curltool` target, CMake doesn't seem to add detected
+ dependency headers to the compiler command.
- Closes #9253
+ ```
+ [ 25%] Building C object src/CMakeFiles/curltool.dir/tool_hugehelp.c.obj
+ cd .../curl/bld-cmake-llvm-x64/src && /usr/local/opt/llvm/bin/clang
+ --target=x86_64-w64-mingw32 --sysroot=/usr/local/opt/mingw-w64/toolchain-x8
+ 6_64
+ -DCURLDEBUG -DCURL_STATICLIB -DHAVE_CONFIG_H -DUNICODE -DUNITTESTS -D_UNICO
+ DE
+ -I.../curl/include -I.../curl/lib -I.../curl/bld-cmake-llvm-x64/lib
+ -I.../curl/bld-cmake-llvm-x64/include -I.../curl/src -Wno-unused-command-li
+ ne-argument
+ -D_UCRT -DDEBUGBUILD -DHAS_ALPN -DUSE_MANUAL=1 -fuse-ld=lld -Wl,-s -static
+ -libgcc
+ -lucrt [...] -O3 -DNDEBUG -municode -MD
+ -MT src/CMakeFiles/curltool.dir/tool_hugehelp.c.obj
+ -MF CMakeFiles/curltool.dir/tool_hugehelp.c.obj.d
+ -o CMakeFiles/curltool.dir/tool_hugehelp.c.obj -c .../curl/bld-cmake-llvm-x
+ 64/src/tool_hugehelp.c
+ .../curl/bld-cmake-llvm-x64/src/tool_hugehelp.c:6:10: fatal error: 'zlib.h' f
+ ile not found
+ 6 | #include <zlib.h>
+ | ^~~~~~~~
+ ```
-- [Oliver Roberts brought this change]
+ Follow-up to 39e7c22bb459c2e818f079984989a26a09741860
+
+ Closes #11927
+
+- cmake: fix duplicate symbols when linking tests
+
+ The linker resolves this automatically in non-unity builds. In unity
+ builds the linker cannot drop a single object with the duplicates,
+ resulting in these errors. The root issue is that we started including
+ certain objects both via both libcurlu and libcurltool libs.
+
+ Regression from 39e7c22bb459c2e818f079984989a26a09741860
+
+ Windows errors:
+ ```
+ [ 3%] Linking C executable unit1303.exe
+ [ 3%] Building C object tests/server/CMakeFiles/rtspd.dir/__/__/lib/curl_mul
+ tibyte.c.obj
+ ../../lib/libcurlu-d.a(unity_0.c.obj): In function `curlx_convert_UTF8_to_wch
+ ar':
+ C:/projects/curl/lib/curl_multibyte.c:44: multiple definition of `curlx_conve
+ rt_UTF8_to_wchar'
+ ../../src/libcurltool-d.a(unity_0.c.obj):C:/projects/curl/lib/curl_multibyte.
+ c:44: first defined here
+ ../../lib/libcurlu-d.a(unity_0.c.obj): In function `curlx_convert_wchar_to_UT
+ F8':
+ C:/projects/curl/lib/curl_multibyte.c:66: multiple definition of `curlx_conve
+ rt_wchar_to_UTF8'
+ ../../src/libcurltool-d.a(unity_0.c.obj):C:/projects/curl/lib/curl_multibyte.
+ c:66: first defined here
+ ../../lib/libcurlu-d.a(unity_0.c.obj): In function `curlx_win32_open':
+ C:/projects/curl/lib/curl_multibyte.c:92: multiple definition of `curlx_win32
+ _open'
+ ../../src/libcurltool-d.a(unity_0.c.obj):C:/projects/curl/lib/curl_multibyte.
+ c:92: first defined here
+ ../../lib/libcurlu-d.a(unity_0.c.obj): In function `curlx_win32_fopen':
+ C:/projects/curl/lib/curl_multibyte.c:120: multiple definition of `curlx_win3
+ 2_fopen'
+ ../../src/libcurltool-d.a(unity_0.c.obj):C:/projects/curl/lib/curl_multibyte.
+ c:120: first defined here
+ ../../lib/libcurlu-d.a(unity_0.c.obj): In function `curlx_win32_stat':
+ [...]
+ ```
+ Ref: https://ci.appveyor.com/project/curlorg/curl/builds/48110107/job/nvlhpt9
+ aa4ehny5q#L247
+
+ macOS errors:
+ ```
+ [ 56%] Linking C executable unit1302
+ duplicate symbol '_curlx_sotouz' in:
+ ../../lib/libcurlu.a(unity_0_c.c.o)
+ ../../src/libcurltool.a(unity_0_c.c.o)
+ duplicate symbol '_curlx_sitouz' in:
+ ../../lib/libcurlu.a(unity_0_c.c.o)
+ ../../src/libcurltool.a(unity_0_c.c.o)
+ duplicate symbol '_curlx_uztosz' in:
+ ../../lib/libcurlu.a(unity_0_c.c.o)
+ ../../src/libcurltool.a(unity_0_c.c.o)
+ [...]
+ ```
+ with config:
+ ```
+ -DCMAKE_UNITY_BUILD=ON \
+ -DENABLE_DEBUG=ON -DBUILD_TESTING=ON -DCMAKE_C_FLAGS=-DDEBUGBUILD \
+ -DBUILD_SHARED_LIBS=ON \
+ -DBUILD_STATIC_LIBS=OFF
+ ```
- amigaos: fix threaded resolver on AmigaOS 4.x
+ Closes #11926
- Replace ip4 resolution function on AmigaOS 4.x, as it requires runtime
- feature detection and extra code to make it thread safe.
+- cmake: lib `CURL_STATICLIB` fixes (Windows)
- Closes #9265
+ - always define `CURL_STATICLIB` when building libcurl for Windows.
-- [Emil Engler brought this change]
+ This disables `__declspec(dllexport)` for exported libcurl symbols.
+ In normal mode (hide symbols) these exported symbols are specified
+ via `libcurl.def`. When not hiding symbols, all symbols are exported
+ by default.
- imap: use ISALNUM() for alphanumeric checks
+ Regression from 1199308dbc902c52be67fc805c72dd2582520d30
- This commit replaces a self-made character check for alphanumeric
- characters within imap_is_bchar() with the ISALNUM() macro, as it is
- reduces the size of the code and makes the performance better, due to
- ASCII arithmetic.
+ Fixes #11844
- Closes #9289
+ - fix to omit `libcurl.def` when not hiding private symbols.
+
+ Regression from 2ebc74c36a19a1700af394c16855ce144d9878e3
+
+ - fix `ENABLED_DEBUG=ON` + shared curl tool Windows builds by also
+ omitting `libcurl.def` in this case, and exporting all symbols
+ instead. This ensures that a shared curl tool can access all debug
+ functions which are not normally exported from libcurl DLL.
+
+ - delete `INTERFACE_COMPILE_DEFINITIONS "CURL_STATICLIB"` for "objects"
+ target.
+
+ Follow-up to 2ebc74c36a19a1700af394c16855ce144d9878e3
+
+ - delete duplicate `BUILDING_LIBCURL` definitions.
+
+ - fix `HIDES_CURL_PRIVATE_SYMBOLS` to not overwrite earlier build settings.
+
+ Follow-up to 1199308dbc902c52be67fc805c72dd2582520d30
+
+ Closes #11914
+
+Daniel Stenberg (25 Sep 2023)
- RELEASE-NOTES: synced
-- [Cering on github brought this change]
+Dan Fandrich (25 Sep 2023)
- connect: add quic connection information
+- tests: fix log directory path in IPFS tests
- Fixes #9286
- Closes #9287
+ Hard-coding the log directory name fails with parallel tests.
-- [Philip Heiduck brought this change]
+ Follow-up to 65b563a96
- cirrus/freebsd-ci: bootstrap the pip installer
+ Ref: #8805
- Signed-off-by: Philip H <47042125+pheiduck@users.noreply.github.com>
+Daniel Stenberg (25 Sep 2023)
- Closes #9213
+- curl_multi_get_handles: get easy handles from a multi handle
-- urldata: move smaller fields down in connectdata struct
+ Closes #11750
- By (almost) sorting the struct fields in connectdata in a decending size
- order, having the single char ones last, we reduce the number of holes
- in the struct and thus the amount of storage needed.
+Stefan Eissing (25 Sep 2023)
- Closes #9280
+- http: h1/h2 proxy unification
-- ldap: adapt to conn->port now being an 'int'
+ - use shared code for setting up the CONNECT request
+ when tunneling, used in HTTP/1.x and HTTP/2 proxying
+ - eliminate use of Curl_buffer_send() and other manipulations
+ of `data->req` or `data->state.ulbuf`
- Remove typecasts. Fix printf() formats.
+ Closes #11808
- Follow-up from 764c6bd3bf.
- Pointed out by Coverity CID 1507858.
+Natanael Copa (25 Sep 2023)
- Closes #9281
+- lib: use wrapper for curl_mime_data fseek callback
-- KNOWN_BUGS: Negotiate authentication against Hadoop HDFS
+ fseek uses long offset which does not match with curl_off_t. This leads
+ to undefined behavior when calling the callback and caused failure on
+ arm 32 bit.
- Closes #8264
+ Use a wrapper to solve this and use fseeko which uses off_t instead of
+ long.
-- [Oliver Roberts brought this change]
+ Thanks to the nice people at Libera IRC #musl for helping finding this
+ out.
- file: add handling of native AmigaOS paths
+ Fixes #11882
+ Fixes #11900
+ Closes #11918
- On AmigaOS 4.x, handle native absolute paths, whilst blocking relative
- paths. Also allow unix style paths if feature enabled at link time.
+- configure: sort AC_CHECK_FUNCS
- Inspiration-from: Michael Trebilcock
+ No functional changes.
- Closes #9259
+Daniel Stenberg (25 Sep 2023)
-- KNOWN_BUGS: cmake build is not thread-safe
+- warnless: remove unused functions
- The cmake build does not check for and verify presence of a working
- Atomic type, which then makes curl_global_init() to not build
- thread-safe on non-Windows platforms.
+ Previously put there for use with the intel compiler
- Closes https://github.com/curl/curl/issues/8973
- Closes https://github.com/curl/curl/pull/8982
+ Closes #11932
-- [Oliver Roberts brought this change]
+- GHA/linux: run singleuse to detect single-use global functions
- configure: fixup bsdsocket detection code for AmigaOS 4.x
+ Use --unit for configure --enable-debug builds
- The code that detects bsdsocket.library for AmigaOS did not work
- for AmigaOS 4.x. This has been fixed and also cleaned up a little
- to reduce duplication. Wasn't technically necessary before, but is
- required when building with AmiSSL instead of OpenSSL.
+ Closes #11932
- Closes #9268
+- singleuse: add scan for use in other source codes
-- [Oliver Roberts brought this change]
+ This should reduce false-positive to almost zero. Checks for presence in
+ unit tests if --unit is specified, which is intended for debug builds
+ where unit testing is enabled.
- tool: reintroduce set file comment code for AmigaOS
+ Closes #11932
- Amiga specific code which put the URL in the file comment was perhaps
- accidentally removed in b88940850002a3f1c25bc6488b95ad30eb80d696 having
- originally been added in 5c215bdbdfde8b2350cdcbac82aae0c914da5314.
- Reworked to fit the code changes and added it back in.
+- multi: remove Curl_multi_dump
- Reported-by: Michael Trebilcock
- Originally-added-by: Chris Young
+ A debug-only function that is basically never used. Removed to ease the
+ use of the singleuse script to detect non-static functions not used
+ outside the file where it is defined.
- Closes #9258
+ Closes #11931
-- urldata: make 'negnpn' use less storage
+Viktor Szakats (24 Sep 2023)
- The connectdata struct field 'negnpn' never holds a value larger than
- 30, so an unsigned char saves 3 bytes struct space.
+- tests: fix compiler warnings
- Closes #9279
+ Seen with llvm 17 on Windows x64.
+
+ ```
+ .../curl/tests/server/rtspd.c:136:13: warning: no previous extern declaration
+ for non-static variable 'logdir' [-Wmissing-variable-declarations]
+ 136 | const char *logdir = "log";
+ | ^
+ .../curl/tests/server/rtspd.c:136:7: note: declare 'static' if the variable i
+ s not intended to be used outside of this translation unit
+ 136 | const char *logdir = "log";
+ | ^
+ .../curl/tests/server/rtspd.c:137:6: warning: no previous extern declaration
+ for non-static variable 'loglockfile' [-Wmissing-variable-declarations]
+ 137 | char loglockfile[256];
+ | ^
+ .../curl/tests/server/rtspd.c:137:1: note: declare 'static' if the variable i
+ s not intended to be used outside of this translation unit
+ 137 | char loglockfile[256];
+ | ^
+ .../curl/tests/server/fake_ntlm.c:43:13: warning: no previous extern declarat
+ ion for non-static variable 'logdir' [-Wmissing-variable-declarations]
+ 43 | const char *logdir = "log";
+ | ^
+ .../curl/tests/server/fake_ntlm.c:43:7: note: declare 'static' if the variabl
+ e is not intended to be used outside of this translation unit
+ 43 | const char *logdir = "log";
+ | ^
+ .../curl/src/tool_doswin.c:350:8: warning: possible misuse of comma operator
+ here [-Wcomma]
+ 350 | ++d, ++s;
+ | ^
+ .../curl/src/tool_doswin.c:350:5: note: cast expression to void to silence wa
+ rning
+ 350 | ++d, ++s;
+ | ^~~
+ | (void)( )
+ ```
-- urldata: make three *_proto struct fields smaller
+ ```
+ .../curl/tests/libtest/lib540.c:146:27: warning: result of comparison 'long'
+ > 2147483647 is always false [-Wtautological-type-limit-compare]
+ 146 | int itimeout = (L > (long)INT_MAX) ? INT_MAX : (int)L;
+ | ~ ^ ~~~~~~~~~~~~~
+ 1 warning generated.
+
+ .../curl/tests/libtest/libntlmconnect.c:195:31: warning: result of comparison
+ 'long' > 2147483647 is always false [-Wtautological-type-limit-compare]
+ 195 | int itimeout = (timeout > (long)INT_MAX) ? INT_MAX : (int)timeo
+ ut;
+ | ~~~~~~~ ^ ~~~~~~~~~~~~~
+ 1 warning generated.
+
+ .../curl/tests/libtest/lib591.c:117:31: warning: result of comparison 'long'
+ > 2147483647 is always false [-Wtautological-type-limit-compare]
+ 117 | int itimeout = (timeout > (long)INT_MAX) ? INT_MAX : (int)timeo
+ ut;
+ | ~~~~~~~ ^ ~~~~~~~~~~~~~
+ 1 warning generated.
+ .../curl/tests/libtest/lib597.c:99:31: warning: result of comparison 'long' >
+ 2147483647 is always false [-Wtautological-type-limit-compare]
+ 99 | int itimeout = (timeout > (long)INT_MAX) ? INT_MAX : (int)timeo
+ ut;
+ | ~~~~~~~ ^ ~~~~~~~~~~~~~
+ 1 warning generated.
+ ```
- Use 'unsigned char' for storage instead of the enum, for three GSSAPI
- related fields in the connectdata struct.
+ Seen on macOS Intel:
+ ```
+ .../curl/tests/server/sws.c:440:64: warning: field precision should have type
+ 'int', but argument has type 'size_t' (aka 'unsigned long') [-Wformat]
+ msnprintf(logbuf, sizeof(logbuf), "Got request: %s %.*s HTTP/%d.%d"
+ ,
+ ~~^~
+ 1 warning generated.
+ ```
- Closes #9278
+ Closes #11925
-- connect: set socktype/protocol correctly
+Jay Satiro (24 Sep 2023)
- So that an address used from the DNS cache that was previously used for
- QUIC can be reused for TCP and vice versa.
+- url: fix netrc info message
- To make this possible, set conn->transport to "unix" for unix domain
- connections ... and store the transport struct field in an unsigned char
- to use less space.
+ - Fix netrc info message to use the generic ".netrc" filename if the
+ user did not specify a netrc location.
- Reported-by: ウã•ã‚“
- Fixes #9274
- Closes #9276
+ - Update --netrc doc to add that recent versions of curl on Windows
+ prefer .netrc over _netrc.
-- [Oliver Roberts brought this change]
+ Before:
+ * Couldn't find host google.com in the (nil) file; using defaults
- amissl: allow AmiSSL to be used with AmigaOS 4.x builds
+ After:
+ * Couldn't find host google.com in the .netrc file; using defaults
- Enable AmiSSL to be used instead of static OpenSSL link libraries.
- for AmigaOS 4.x, as it already is in the AmigaOS 3.x build.
+ Closes https://github.com/curl/curl/pull/11904
- Closes #9269
+Dan Fandrich (23 Sep 2023)
-- [opensignature on github brought this change]
+- wolfssh: do cleanup in Curl_ssh_cleanup
- openssl: add details to "unable to set client certificate" error
+ Closes: #11921
- from: "curl: (58) unable to set client certificate"
+Daniel Stenberg (24 Sep 2023)
- to: curl: (58) unable to set client certificate [error:0A00018F:SSL
- routines::ee key too small]
+- tool_listhelp: regenerated
- Closes #9228
+ Polished the --ipfs-gateway description
-- [Oliver Roberts brought this change]
+ Fixed the --trace-config description
- amissl: make AmiSSL v5 a minimum requirement
+ The script also fixed some other small mistakes
- AmiSSL v5 is the latest version, featuring a port of OpenSSL 3.0.
- Support for previous OpenSSL 1.1.x versions has been dropped, so
- makes sense to enforce v5 as the minimum requirement. This also
- allows all the AmiSSL stub workarounds to be removed as they are
- now provided in a link library in the AmiSSL SDK.
+ Closes #11923
- Closes #9267
+Viktor Szakats (23 Sep 2023)
-- [Oliver Roberts brought this change]
+- Makefile.mk: always set `CURL_STATICLIB` for lib (Windows)
- configure: -pthread not available on AmigaOS 4.x
+ Also fix to export all symbols in Windows debug builds, making
+ `-debug-dyn` builds work with `-DCURL_STATICLIB` set.
- The most recent GCC builds for AmigaOS 4.x do not allow -pthread and
- exit with an error. Instead, need to explictly specify -lpthread.
+ Ref: https://github.com/curl/curl/pull/11914 (same for CMake)
- Closes #9266
+ Closes #11924
-- digest: pass over leading spaces in qop values
+Daniel Stenberg (23 Sep 2023)
- When parsing the "qop=" parameter of the digest authentication, and the
- value is provided within quotes, the list of values can have leading
- white space which the parser previously did not handle correctly.
+- quic: set ciphers/curves the same way regular TLS does
- Add test case 388 to verify.
+ for OpenSSL/BoringSSL
- Reported-by: vlubart on github
- Fixes #9264
- Closes #9270
+ Fixes #11796
+ Reported-by: Karthikdasari0423 on github
+ Assisted-by: Jay Satiro
+ Closes #11836
-- [Evgeny Grin (Karlson2k) brought this change]
+- test457: verify --max-filesize with chunked encoding
- digest: reject broken header with session protocol but without qop
+- lib: let the max filesize option stop too big transfers too
- Closes #9077
+ Previously it would only stop them from getting started if the size is
+ known to be too big then.
-- CURLINFO_SPEED_UPLOAD/DOWNLOAD.3: fix examples
+ Update the libcurl and curl docs accordingly.
- Reported-by: jvvprasad78 on github
+ Fixes #11810
+ Reported-by: Elliot Killick
Assisted-by: Jay Satiro
- Fixes #9239
- Closes #9241
+ Closes #11820
+
+Viktor Szakats (23 Sep 2023)
+
+- mingw: delete support for legacy mingw.org toolchain
+
+ Drop support for "old" / "legacy" / "classic" / "v1" / "mingw32" MinGW:
+ https://en.wikipedia.org/wiki/MinGW, https://osdn.net/projects/mingw/
+ Its homepage used to be http://mingw.org/ [no HTTPS], and broken now.
+ It supported the x86 CPU only and used a old Windows API header and
+ implib set, often causing issues. It also misses most modern Windows
+ features, offering old versions of both binutils and gcc (no llvm/clang
+ support). It was last updated 2 years ago.
+
+ curl now relies on toolchains based on the mingw-w64 project:
+ https://www.mingw-w64.org/ https://sourceforge.net/projects/mingw-w64/
+ https://www.msys2.org/ https://github.com/msys2/msys2
+ https://github.com/mstorsjo/llvm-mingw
+ (Also available via Linux and macOS package managers.)
-- [Fabian Keil brought this change]
+ Closes #11625
- test44[2-4]: add '--resolve' to the keywords
+Mark Gaiser (23 Sep 2023)
- ... so the tests can be automatically skipped when
- using an external proxy like Privoxy.
+- curl: add support for the IPFS protocols:
- Closes #9250
+ - ipfs://<cid>
+ - ipns://<cid>
+
+ This allows you tu use ipfs in curl like:
+ curl ipfs://<cid>
+ and
+ curl ipns://<cid>
+
+ For more information consult the readme at:
+ https://curl.se/docs/ipfs.html
+
+ Closes #8805
+
+Daniel Stenberg (23 Sep 2023)
+
+- bufq: remove Curl_bufq_skip_and_shift (unused)
+
+ Closes #11915
+
+- scripts/singleuse.pl: add curl_global_trace
+
+Viktor Szakats (22 Sep 2023)
+
+- cmake: fix unity symbol collisions in h2 builds
+
+ Regression from 331b89a319d0067fa1e6441719307cfef9c7960f
+
+ Reviewed-by: Daniel Stenberg
+ Reviewed-by: Jay Satiro
+ Closes #11912
+
+Daniel Stenberg (22 Sep 2023)
- RELEASE-NOTES: synced
-- CURLOPT_CONNECT_ONLY.3: clarify multi API use
+Dan Fandrich (21 Sep 2023)
- Reported-by: Maxim Ivanov
- Fixes #9244
- Closes #9262
+- github/labeler: improve the match patterns
-- [Andrew Lambert brought this change]
+ This includes new rules for setting the appleOS and logging labels and
+ matches on some example files. Also, enable dot mode for wildcard
+ matches in the .github directory.
- curl_easy_header: Add CURLH_PSEUDO to sanity check
+Daniel Stenberg (21 Sep 2023)
- Fixes #9235
- Closes #9236
+- upload-file.d: describe the file name slash/backslash handling
-- [Emil Engler brought this change]
+ Closes #11911
- docs: add dns category to --resolve
+Jakub Jelen (21 Sep 2023)
- This commit adds the dns category to the --resolve command line option,
- because it can be interpreted as both: a low-level connection option and
- an option related to the resolving of a hostname.
+- libssh: cap SFTP packet size sent
- It is also not common for dns options to belong to the connection
- category and vice versa. --ipv4 and --ipv6 are both good examples.
+ Due to libssh limitations
- Closes #9229
+ Signed-off-by: Jakub Jelen <jjelen@redhat.com>
-Jay Satiro (2 Aug 2022)
-- [Wyatt O'Day brought this change]
+ Closes #11804
- schannel: Add TLS 1.3 support
+Daniel Stenberg (21 Sep 2023)
- - Support TLS 1.3 as the default max TLS version for Windows Server 2022
- and Windows 11.
+- curl.h: mark CURLSSLBACKEND_NSS as deprecated since 8.3.0
- - Support specifying TLS 1.3 ciphers via existing option
- CURLOPT_TLS13_CIPHERS (tool: --tls13-ciphers).
+ Closes #11905
- Closes https://github.com/curl/curl/pull/8419
+- mailmap: unify Michael Osipov under a single email
-Daniel Stenberg (2 Aug 2022)
-- [Emil Engler brought this change]
+Ted Lyngmo (21 Sep 2023)
- cmdline-opts/gen.pl: improve performance
+- docs: use CURLSSLBACKEND_NONE
- On some systems, the gen.pl script takes nearly two minutes for the
- generation of the main-page, which is a completely unacceptable time.
+ [ssl] use CURLSSLBACKEND_NONE instead of (curl_sslbackend)-1 in
+ documentation and examples.
- The slow performance has two causes:
- 1. Use of a regex locale operator
- 2. Useless invokations of loops
+ Signed-off-by: Ted Lyngmo <ted@lyncon.se>
- The commit addresses the first issue by replacing the "\W" wiht
- [^a-zA-Z0-9_], which is, according to regex101.com, functionally
- equivalent to the previous operation, except that it is obviously
- limited to ASCII only, which is fine, as the curl project is
- English-only anyway.
+ Closes #11909
- The second issue is being addressed by only running the loop if the line
- contains a "--" in it. The loop may be completeley removed in the
- future.
+Dan Fandrich (21 Sep 2023)
- Co-authored-by: Emanuele Torre <torreemanuele6@gmail.com>
+- github/labeler: give the sync-labels config item a default value
- See #8299
- Fixes #9230
- Closes #9232
+ This shouldn't be necessary and is likely a bug with this beta version
+ of the labeller.
-- docs/cmdline: mark fail and fail-with-body as mutually exclusive
+ Also, fix the negative matches for the documentation label.
- Reported-by: Andreas Sommer
- Fixes #9221
- Closes #9222
+ Follow-up to dd12b452a
+ Closes #11907
-- [Nao Yonashiro brought this change]
+- github/labeler: fix up more the labeler config format
- quiche: fix build failure
+ The new version didn't like the workaround we had for a bug in the
+ previous labeler version, and it should no longer be needed.
- Reviewed-by: Alessandro Ghedini
- Closes #9223
+ Follow-up to dd12b452a
+ Closes #11906
-Viktor Szakats (2 Aug 2022)
-- configure.ac: drop references to deleted functions
+- github/labeler: fix indenting to try to appease labeller
- follow-up from 4d73854462f30948acab12984b611e9e33ee41e6
+ Follow-up to dd12b452a
- Reported-by: Oliver Roberts
- Fixes #9238
- Closes #9240
+Jay Satiro (21 Sep 2023)
-Daniel Stenberg (28 Jul 2022)
-- [Sean McArthur brought this change]
+- libssh2: fix error message on failed pubkey-from-file
- hyper: enable obs-folded multiline headers
+ - If libssh2_userauth_publickey_fromfile_ex returns -1 then show error
+ message "SSH public key authentication failed: Reason unknown (-1)".
- Closes #9216
+ When libssh2_userauth_publickey_fromfile_ex returns -1 it does so as a
+ generic error and therefore doesn't set an error message. AFAICT that is
+ not documented behavior.
-- connect: revert the use of IP*_RECVERR
+ Prior to this change libcurl retrieved the last set error message which
+ would be from a previous function failing. That resulted in misleading
+ auth failed error messages in verbose mode.
- The options were added in #6341 and d13179d, but cause problems: Lots of
- POLLIN event occurs but recvfrom read nothing.
+ Bug: https://github.com/curl/curl/issues/11837#issue-1891827355
+ Reported-by: consulion@users.noreply.github.com
- Reported-by: Tatsuhiro Tsujikawa
- Fixes #9209
- Closes #9215
+ Closes https://github.com/curl/curl/pull/11881
-- [Marco Kamner brought this change]
+Stefan Eissing (21 Sep 2023)
- docs: remove him/her/he/she from documentation
+- pytest: exclude test_03_goaway in CI runs due to timing dependency
- Closes #9208
+ Closes #11860
-- RELEASE-NOTES: synced
+- lib: disambiguate Curl_client_write flag semantics
-- tool_getparam: make --doh-url "" switch it off
+ - use CLIENTWRITE_BODY *only* when data is actually body data
+ - add CLIENTWRITE_INFO for meta data that is *not* a HEADER
+ - debug assertions that BODY/INFO/HEADER is not used mixed
+ - move `data->set.include_header` check into Curl_client_write
+ so protocol handlers no longer have to care
+ - add special in FTP for `data->set.include_header` for historic,
+ backward compatible reasons
+ - move unpausing of client writes from easy.c to sendf.c, so that
+ code is in one place and can forward flags correctly
- A possible future addition could be to parse the URL first too to verify
- that it is valid before trying to use it.
+ Closes #11885
- Assisted-by: Jay Satiro
- Closes #9207
+Patrick Monnerat (21 Sep 2023)
-- mailmap: add rzrymiak on github
+- tftpd: always use curl's own tftp.h
-Jay Satiro (26 Jul 2022)
-- ngtcp2: Fix build error due to change in nghttp3 prototypes
+ Using the system's provided arpa/tftp.h and optimizing, GCC 12 detects
+ and reports a stringop-overread warning:
- ngtcp2/nghttp3@4a066b2 changed nghttp3_conn_block_stream and
- nghttp3_conn_shutdown_stream_write return from int to void.
+ tftpd.c: In function ‘write_behind.isra’:
+ tftpd.c:485:12: warning: ‘write’ reading between 1 and 2147483647 bytes f
+ rom a region of size 0 [-Wstringop-overread]
+ 485 | return write(test->ofile, writebuf, count);
+ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ In file included from tftpd.c:71:
+ /usr/include/arpa/tftp.h:58:30: note: source object ‘tu_data’ of size 0
+ 58 | char tu_data[0]; /* data or error stri
+ ng */
+ | ^~~~~~~
- Reported-by: jurisuk@users.noreply.github.com
+ This occurs because writebuf points to this field and the latter
+ cannot be considered as being of dynamic length because it is not
+ the last field in the structure. Thus it is bound to its declared
+ size.
- Fixes https://github.com/curl/curl/issues/9204
- Closes https://github.com/curl/curl/pull/9200
+ This commit always uses curl's own version of tftp.h where the
+ target field is last in its structure, effectively avoiding the
+ warning.
-Daniel Stenberg (26 Jul 2022)
-- [rzrymiak on github brought this change]
+ As HAVE_ARPA_TFTP_H is not used anymore, cmake/configure checks for
+ arpa/tftp.h are removed.
- BUGS.md: improve language
+ Closes #11897
- Closes #9205
+Dan Fandrich (20 Sep 2023)
-- [Philip Heiduck brought this change]
+- test1474: make precheck more robust on non-Solaris systems
- cirrus.yml: replace py38-pip with py39-pip
+ If uname -r returns something odd, perl could return an error code and
+ the test would be erroneously skipped. The qx// syntax avoid this.
- Reported-by: Jay Satiro
- Fixes #9201
- Closes #9202
+ Followup to 08f9b2148
-- tool_getparam: fix cleanarg() for unicode builds
+- github/labeler: switch to the 5 beta version
- Use the correct type, and make cleanarg an empty macro if the cleaning
- ability is absent.
+ This version adds an important feature that will allow more PRs to be
+ labelled. Rather than being limited to labeling PRs with files that
+ match a single glob, it can now label them if multiple changed files
+ match any one of a number of globs.
- Fixes #9195
- Closes #9196
+Daniel Stenberg (20 Sep 2023)
- Reviewed-by: Jay Satiro
- Reviewed-by: Marcel Raad
+- lib: enable hmac for digest as well
-Marc Hoersken (25 Jul 2022)
-- test3026: add support for Windows using native Win32 threads
+ Previously a build that disabled NTLM and aws-sigv4 would fail to build
+ since the hmac was disabled, but it is also needed for digest auth.
- Reviewed-by: Viktor Szakats
- Reviewed-by: Jay Satiro
- Reviewed-by: Daniel Stenberg
+ Follow-up to e92edfbef64448ef
- Follow up to 7ade9c50b35d95d47a43880c3097bebab7a7e690
- Closes #9012
+ Fixes #11890
+ Reported-by: Aleksander Mazur
+ Closes #11896
-Jay Satiro (25 Jul 2022)
-- [Evgeny Grin (Karlson2k) brought this change]
+- idn: if idn2_check_version returns NULL, return error
- digest: fix memory leak, fix not quoted 'opaque'
+ ... this avoids a NULL dereference for this unusual case.
- Fix leak regression introduced by 3a6fe0c.
+ Reported-by: s0urc3_ on hackerone
+ Closes #11898
- Closes https://github.com/curl/curl/pull/9199
+- http: fix CURL_DISABLE_BEARER_AUTH breakage
-Daniel Stenberg (23 Jul 2022)
-- tests: several enumerated type cleanups
+ When bearer auth was disabled, the if/else logic got wrong and caused
+ problems.
- To please icc
+ Follow-up to e92edfbef64448ef461
+ Fixes #11892
+ Reported-by: Aleksander Mazur
+ Closes #11895
- Closes #9179
+Michael Osipov (20 Sep 2023)
-- tool_paramhlp: fix "enumerated type mixed with another type"
+- wolfssl: allow capath with CURLOPT_CAINFO_BLOB
- Warning by icc
+ Remain consistent with OpenSSL. While CAfile is nulled as documented
+ with CURLOPT_CAINFO_BLOB, CApath remains intact.
- Closes #9179
+ Closes #11886
-- tool_writeout: fix enumerated type mixed with another type
+- wolfssl: use ssl_cafile/ssl_capath variables consistent with openssl.c
- Closes #9179
+ Closes #11886
-- tool_cfgable: make 'synthetic_error' a plain bool
+Dan Fandrich (19 Sep 2023)
- The specific reason was not used.
+- test1474: disable test on NetBSD, OpenBSD and Solaris 10
- Closes #9179
+ These kernels only send a fraction of the requested amount of the first
+ large block, invalidating the assumptions of the test and causing it to
+ fail.
-- tool_paramhlp: make check_protocol return ParameterError
+ Assisted-by: Christian Weisgerber
+ Ref: https://curl.se/mail/lib-2023-09/0021.html
+ Closes #11888
- "enumerated type mixed with another type"
+Ryan Schmidt (20 Sep 2023)
- Closes #9179
+- cmake, configure: also link with CoreServices
-- tool_formparse: fix variable may be used before its value is set
+ When linking with CoreFoundation, also link with CoreServices which is
+ apparently required to avoid an NSInvalidArgumentException in software
+ linking with libcurl on macOS Sonoma 14 and later.
- Warning by icc
+ Fixes #11893
+ Closes #11894
- Closes #9179
+Marc Hoersken (19 Sep 2023)
-- sendf: skip storing HTTP headers if HTTP disabled
+- CI/azure: remove pip, wheel, cryptography, pyopenssl and impacket
- Closes #9179
+ These dependencies are now already included in the Docker image.
-- url: enumerated type mixed with another type
+ Ref: https://github.com/mback2k/curl-docker-winbuildenv/commit/2607a31bcab544
+ b41d15606e97f38cf312c1ce56
- Follow-up to 1c58e7ae99ce2030213f28b
+ Closes #11889
- Closes #9179
+Daniel Stenberg (19 Sep 2023)
-- urldata: change second proxytype field to unsigned char to match
+- wolfssl: if CURLOPT_CAINFO_BLOB is set, ignore the CA files
- To avoid "enumerated type mixed with another type"
+ Ref: #11883
+ Reported-by: Michael Osipov
+ Closes #11884
- Closes #9179
+- RELEASE-NOTES: synced
-- http: typecast the httpreq assignment to avoid icc compiler warning
+- test3103: CURLOPT_COOKIELIST test
- error #188: enumerated type mixed with another type
+- cookie: set ->running in cookie_init even if data is NULL
- Closes #9179
+ This is a regression introduced in b1b326ec500 (shipped in curl 8.1.0)
-- urldata: make state.httpreq an unsigned char
+ Test 3103 verifies.
- To match set.method used for the same purpose.
+ Fixes #11875
+ Reported-by: wangp on github
+ Closes #11876
- Closes #9179
+- test498: total header size for all redirects is larger than accepted
-- splay: avoid using -1 in unsigned variable
+- http: use per-request counter to check too large headers
- To fix icc compiler warning integer conversion resulted in a change of sign
+ Not the counter that accumulates all headers over all redirects.
- Closes #9179
+ Follow-up to 3ee79c1674fd6
-- sendf: store the header type in an usigned char to avoid icc warnings
+ Do a second check for 20 times the limit for the accumulated size for
+ all headers.
- Closes #9179
+ Fixes #11871
+ Reported-by: Joshix-1 on github
+ Closes #11872
-- multi: fix the return code from Curl_pgrsDone()
+Jay Satiro (18 Sep 2023)
- It does not return a CURLcode. Detected by the icc compiler warning
- "enumerated type mixed with another type"
+- THANKS: add Eric Murphy
- Closes #9179
+ He reported #11850 (quiche build error) but I forgot to add a
+ 'reported-by' entry in the fix 267e14f1.
-- sendf: make Curl_debug a void function
+Daniel Stenberg (18 Sep 2023)
- As virtually no called checked the return code, and those that did
- wrongly treated it as a CURLcode. Detected by the icc compiler warning:
- enumerated type mixed with another type
+- h2-proxy: remove left-over mistake in drain_tunnel()
- Closes #9179
+ Left-over from 331b89a319
-- http_chunks: remove an assign + typecast
+ Reported-by: å—宫雪çŠ
- As it caused icc to complain: "pointer cast involving 64-bit pointed-to
- type"
+ Closes https://github.com/curl/curl/pull/11877
- Closes #9179
+vvb2060 (18 Sep 2023)
-- vtls: make Curl_ssl_backend() return the enum type curl_sslbackend
+- lib: failf/infof compiler warnings
- To fix the icc warning enumerated type mixed with another type
+ Closes #11874
- Closes #9179
+Daniel Stenberg (17 Sep 2023)
-- curl-compilers.m4: make icc use -diag* options and disable two warnings
+- rand: fix 'alnum': array is too small to include a terminating null character
- -wd and -we are deprecated and are now -diag-disable and -diag-error
+ It was that small on purpose, but this change now adds the null byte to
+ avoid the error.
- Disable warning 1024 and 2259
+ Follow-up to 3aa3cc9b052353b1
- Closes #9179
+ Reported-by: Dan Fandrich
+ Ref: #11838
+ Closes #11870
-- [Matthew Thompson brought this change]
+Mathias Fuchs (16 Sep 2023)
- GHA: add two Intel compiler CI jobs
+- cmake: fix the help text to the static build option in CMakeLists.txt
- Closes #9179
+ Closes #11843
-- [Daniel Katz brought this change]
+John Haugabook (16 Sep 2023)
- curl-functions.m4: check whether atomics can link rather than just compile
+- MANUAL.md: change domain to example.com
- Some build toolchains support C11 atomics (i.e., _Atomic types), but
- will not link the associated atomics runtime unless a flag is passed. In
- such an environment, linking an application with libcurl.a can fail due
- to undefined symbols for atomic load/store functions.
+ Closes #11866
- I encountered this behavior when upgrading curl to 7.84.0 and attempting
- to build with Solaris Studio 12.6. Solaris provides the flag
- -xatomic=[gcc | studio], allowing users to link to one of two atomics
- runtime implementations. However, if the user does not provide this
- flag, then neither runtime is linked. This led to builds failing in CI.
+Daniel Stenberg (16 Sep 2023)
- Closes #9190
+- doh: inherit DEBUGFUNCTION/DATA
-- [Rosen Penev brought this change]
+ When creating new transfers for doing DoH, they now inherit the debug
+ settings from the initiating transfer, so that the application can
+ redirect and handle the verbose output correctly even for the DoH
+ transfers.
- curl-wolfssl.m4: add options header when building test code
+ Reported-by: calvin2021y on github
+ Fixes #11864
+ Closes #11869
- Needed for certain configurations of wolfSSL. Otherwise, missing header
- error may occur.
+Dan Fandrich (16 Sep 2023)
- Tested with OpenWrt.
+- http_aws_sigv4: fix sorting with empty parts
- Closes #9187
+ When comparing with an empty part, the non-empty one is always
+ considered greater-than. Previously, the two would be considered equal
+ which would randomly place empty parts amongst non-empty ones. This
+ showed as a test 439 failure on Solaris as it uses a different
+ implementation of qsort() that compares parts differently.
-- ftp: use a correct expire ID for timer expiry
+ Fixes #11855
+ Closes #11868
- This was an accurate error pointed out by the icc warning: enumerated
- type mixed with another type
+- CI: ignore the "flaky" and "timing-dependent" test results
- Ref: #9179
- Closes #9184
+ CI builds will now run these tests, but will ignore the results if they
+ fail. The relevant tests are ones that are sensitive to timing or
+ have edge conditions that make them more likely to fail on CI servers,
+ which are often heavily overloaded and slow.
-- sendf: fix paused header writes since after the header API
+ This change only adds two additional tests to be ignored, since the
+ others already had the flaky keyword.
- Regression since d1e4a67
+ Closes #11865
- Reported-by: Sergey Ogryzkov
- Fixes #9180
- Closes #9182
+- runtests: eliminate a warning on old perl versions
-- mprintf: fix *dyn_vprintf() when out-of-memory
+ The warning "Use of implicit split to @_ is deprecated" showed between
+ perl versions about 5.8 through 5.11.
- Follow-up to 0e48ac1f99a. Torture-testing 1455 would lead to a memory
- leak otherwise.
+- tests: log the test result code after each libtest
- Closes #9185
+ This makes it easier to determine the test status. Also, capitalize
+ FAILURE and ABORT messages in log lines to make them easier to spot.
-- curl-confopts: remove leftover AC_REQUIREs
+Harry Sintonen (16 Sep 2023)
- configure.ac:3488: warning: CURL_CHECK_FUNC_IOCTL is m4_require'd but not m4_defun'd
- configure.ac:3488: warning: CURL_CHECK_FUNC_SETSOCKOPT is m4_require'd but not m4_defun'd
+- misc: better random strings
- follow-up from 4d73854462f30
+ Generate alphanumerical random strings.
- Closes #9183
+ Prior this change curl used to create random hex strings. This was
+ mostly okay, but having alphanumerical random strings is better: The
+ strings have more entropy in the same space.
-- file: fix icc enumerated type mixed with another type warning
+ The MIME multipart boundary used to be mere 64-bits of randomness due
+ to being 16 hex chars. With these changes the boundary is 22
+ alphanumerical chars, or little over 130 bits of randomness.
- Ref: #9179
- Closes #9181
+ Closes #11838
-Viktor Szakats (19 Jul 2022)
-- tidy-up: delete unused build configuration macros
-
- Most of them feature guards:
-
- - `CURL_INCLUDES_SYS_UIO` [1]
- - `HAVE_ALLOCA_H` [2]
- - `HAVE_CRYPTO_CLEANUP_ALL_EX_DATA` (unused since de71e68000c8624ea13f90b136f8734dd0fb1bdc)
- - `HAVE_DLFCN_H`
- - `HAVE_DLOPEN`
- - `HAVE_DOPRNT`
- - `HAVE_FCNTL`
- - `HAVE_GETHOSTBYNAME` [3]
- - `HAVE_GETOPT_H`
- - `HAVE_GETPASS`
- - `HAVE_GETPROTOBYNAME`
- - `HAVE_GETSERVBYNAME`
- - `HAVE_IDN_FREE*`
- - `HAVE_INET_ADDR`
- - `HAVE_IOCTL`
- - `HAVE_KRB4`
- - `HAVE_KRB_GET_OUR_IP_FOR_REALM`
- - `HAVE_KRB_H`
- - `HAVE_LDAPSSL_H`
- - `HAVE_LDAP_INIT_FD`
- - `HAVE_LIBDL`
- - `HAVE_LIBNSL`
- - `HAVE_LIBRESOLV*`
- - `HAVE_LIBUCB`
- - `HAVE_LL`
- - `HAVE_LOCALTIME_R`
- - `HAVE_MALLOC_H`
- - `HAVE_MEMCPY`
- - `HAVE_MEMORY_H`
- - `HAVE_NETINET_IF_ETHER_H`
- - `HAVE_NI_WITHSCOPEID`
- - `HAVE_OPENSSL_CRYPTO_H`
- - `HAVE_OPENSSL_ERR_H`
- - `HAVE_OPENSSL_PEM_H`
- - `HAVE_OPENSSL_PKCS12_H`
- - `HAVE_OPENSSL_RAND_H`
- - `HAVE_OPENSSL_RSA_H`
- - `HAVE_OPENSSL_SSL_H`
- - `HAVE_OPENSSL_X509_H`
- - `HAVE_PEM_H`
- - `HAVE_POLL`
- - `HAVE_RAND_SCREEN`
- - `HAVE_RAND_STATUS`
- - `HAVE_RECVFROM`
- - `HAVE_SETSOCKOPT`
- - `HAVE_SETVBUF`
- - `HAVE_SIZEOF_LONG_DOUBLE`
- - `HAVE_SOCKIO_H`
- - `HAVE_SOCK_OPTS`
- - `HAVE_STDIO_H`
- - `HAVE_STRCASESTR`
- - `HAVE_STRFTIME`
- - `HAVE_STRLCAT`
- - `HAVE_STRNCMPI`
- - `HAVE_STRNICMP`
- - `HAVE_STRSTR`
- - `HAVE_STRUCT_IN6_ADDR`
- - `HAVE_TLD_H`
- - `HAVE_TLD_STRERROR`
- - `HAVE_UNAME`
- - `HAVE_USLEEP`
- - `HAVE_WINBER_H`
- - `HAVE_WRITEV`
- - `HAVE_X509_H`
- - `LT_OBJDIR`
- - `NEED_BASENAME_PROTO`
- - `NOT_NEED_LIBNSL`
- - `OPENSSL_NO_KRB5`
- - `RECVFROM_TYPE*`
- - `SIZEOF_LONG_DOUBLE`
- - `STRERROR_R_TYPE_ARG3`
- - `USE_YASSLEMUL`
- - `_USRDLL` (from CMake) [4]
-
- [1] Related parts in `m4/curl-functions.m4` and `configure.ac` might
- also be deleted.
-
- [2] Related comment can possibly be deleted in
- `packages/vms/generate_config_vms_h_curl.com`.
-
- [3] There are more instances of this in autotools, but I did not dare to
- touch those. Looked like it's used to detect socket support.
-
- [4] This is necessary for MFC (Microsoft Foundation Class) DLLs to
- force linking MFC components statically to the DLL. `libcurl.dll`
- does not use MFC, so we can delete this define.
- Ref: https://docs.microsoft.com/cpp/build/regular-dlls-statically-linked-to-mfc
-
- Script that can help finding unused settings like above:
- ```shell
-
- autoheader configure.ac # generate lib/curl_config.h.in
-
- {
- grep -o -E 'set\([A-Z][A-Z0-9_]{3,}' CMake/Platforms/WindowsCache.cmake | sed -E 's|set\(||g'
- grep -o -E -h '#define +[A-Z][A-Z0-9_]{3,}' lib/config-*.h | sed -E 's|#define +||g'
- grep -o -E '#cmakedefine +[A-Z][A-Z0-9_]{3,}' lib/curl_config.h.cmake | sed -E 's|#cmakedefine +||g'
- grep -o -E '#undef +[A-Z][A-Z0-9_]{3,}' lib/curl_config.h.in | sed -E 's|#undef +||g'
- } | sort -u | grep -v -F 'HEADER_CURL_' | while read -r def; do
- c="$(git grep -w -F "${def}" | grep -v -E -c '(/libcurl\.tmpl|^lib/config-|^lib/curl_config\.h\.cmake|^CMakeLists\.txt|^CMake/Platforms/WindowsCache\.cmake|^packages/vms/config_h\.com|^m4/curl-functions\.m4|^acinclude\.m4|^configure\.ac)')"
- if [ "${c}" = '0' ]; then
- echo "${def}"
- fi
- done
- ```
+Daniel Stenberg (15 Sep 2023)
- Reviewed-by: Daniel Stenberg
- Closes #9044
+- cookie: reduce variable scope, add const
+
+- cookie: do not store the expire or max-age strings
+
+ Convert it to an expire time at once and save memory.
+
+ Closes #11862
+
+- cookie: remove unnecessary struct fields
+
+ Plus: reduce the hash table size from 256 to 63. It seems unlikely to
+ make much of a speed difference for most use cases but saves 1.5KB of
+ data per instance.
+
+ Closes #11862
-Daniel Stenberg (19 Jul 2022)
- RELEASE-NOTES: synced
-- cookie: treat a blank domain in Set-Cookie: as non-existing
+ Bumped to 8.4.0, the next presumed version
- This matches what RFC 6265 section 5.2.3 says.
+Dan Fandrich (14 Sep 2023)
- Extended test 31 to verify.
+- test2600: remove special case handling for USE_ALARM_TIMEOUT
- Fixes #9164
- Reported-by: Gwen Shapira
- Closes #9177
+ This was originally added to handle platforms that supported only 1
+ second granularity in connect timeouts, but after some recent changes
+ the test currently permafails on several Windows platforms.
-- [Patrick Monnerat brought this change]
+ The need for this special-case was removed in commit 8627416, which
+ increased the connect timeout in all cases to well above 1 second.
- base64: base64url encoding has no padding
+ Fixes #11767
+ Closes #11849
- See RFC4648 section 5 and RFC7540 section 3.2.1.
+Daniel Stenberg (14 Sep 2023)
- Suppress generation of '=' padding of base64url encoding. This is
- accomplished by considering the string beginning at offset 64 in the
- character table as the padding: this is "=" for base64, "" for base64url.
+- SECURITY-PROCESS.md. call it vulnerability disclosure policy
- Also use strchr() to replace character search loops where possible.
+ SECURITY-PROCESS.md -> VULN-DISCLOSURE-POLICY.md
- Suppress erroneous comments about empty encoding results.
+ This a name commonly used for a document like this. This name helps
+ users find it.
- Adjust unit test 1302 to unpadded base64url encoding and add tests for
- empty results.
+ Closes #11852
- Closes #9139
+Junho Choi (14 Sep 2023)
-- easyoptions: fix icc warning
+- quiche: fix build error with --with-ca-fallback
- easyoptions.c(360): error #188: enumerated type mixed with another type
+ - Fix build error when curl is built with --with-quiche
+ and --with-ca-fallback.
- Ref: #9156
- Reported-by: Matthew Thompson
- Closes #9176
+ - Add --with-ca-fallback to the quiche CI job.
-- [lwthiker brought this change]
+ Fixes https://github.com/curl/curl/issues/11850
+ Closes https://github.com/curl/curl/pull/11847
- h2h3: fix overriding the 'TE: Trailers' header
+Jay Satiro (14 Sep 2023)
- A 'TE: Trailers' header is explicitly replaced by 'te: trailers'
- (lowercase) in Curl_pseudo_headers() when building the list of HTTP/2 or
- HTTP/3 headers. However, this is then replaced again by the original
- value due to a bug, resulting in the uppercased version being sent. Some
- HTTP/2 servers reject the whole HTTP/2 stream when this is the case.
+- escape: replace Curl_isunreserved with ISUNRESERVED
- Closes #9170
+ - Use the ALLCAPS version of the macro so that it is clear a macro is
+ being called that evaluates the variable multiple times.
-- lib3026: reduce the number of threads to 100
+ - Also capitalize macro isurlpuntcs => ISURLPUNTCS since it evaluates
+ a variable multiple times.
- Down from 1000, to make it run and work in more systems.
+ This is a follow-up to 291d225a which changed Curl_isunreserved into an
+ alias macro for ISUNRESERVED. The problem is the former is not easily
+ identified as a macro by the caller, which could lead to a bug.
- Fixes #9172
- Reported-by: Érico Nogueira Rolim
- Closes #9173
+ For example, ISUNRESERVED(*foo++) is easily identifiable as wrong but
+ Curl_isunreserved(*foo++) is not even though they both are the same.
-- doh: move doh related struct definitions to doh.h
+ Closes https://github.com/curl/curl/pull/11846
- and make 'dnstype' in 'struct dnsprobe' use the DNStype to fix the icc compiler warning:
+Dan Fandrich (13 Sep 2023)
- doh.c(924): error #188: enumerated type mixed with another type
+- tests: increase the default server logs lock timeout
- Reported-by: Matthew Thompson
- Ref #9156
- Closes #9174
+ This timeout is used to wait for the server to finish writing its logs
+ before checking them against the expected values. An overloaded machine
+ could take more than the two seconds previously allocated, so increase
+ the timeout to 5 seconds.
-Viktor Szakats (17 Jul 2022)
-- Makefile.m32: stop trying to build libcares.a [ci skip]
+ Ref: #11328
+ Closes #11834
- Before this patch, `lib/Makefile.m32` had a rule to build `libcares.a` in
- `-cares`-enabled builds, via c-ares's own `Makefile.m32`. Committed in
- 2007 [1]. The commit message doesn't specifically address this particular
- change. This logic comes from the times when c-ares was part of the curl
- source tree, hence the special treatment.
+- tests: increase TEST_HANG_TIMEOUT in two tests
- This feature creates problems when building c-ares first, using CMake
- and pointing `LIBCARES_PATH` to its install prefix, where `Makefile.m32`
- is missing in such case. A sub-build for c-ares is undesired also when
- c-ares had already been build via its own `Makefile.m32`.
+ These tests had a 5 second timeout compared to 60 seconds for all other
+ tests. Make these consistent with the others for more reliability on
+ heavily-loaded machines.
- To avoid the sub-build, this patch deletes its Makefile rule. After this
- patch `libcares.a` needs to be manually built before using it in
- `Makefile.m32`. Aligning it with the rest of dependencies.
+ Ref: #11328
- [1] 46c92c0b806da041d7a5c6fb64dbcdc474d99b31
+- test1056: disable on Windows
- Reviewed-by: Daniel Stenberg
- Closes #9169
+ This test relies on the IPv6 scope field being ignored when connecting to
+ ipv6-localhost (i.e. [::1%259999] is treated as [::1]). Maybe this is a bit
+ dodgy, but it works on all our test platforms except Windows. This
+ test was disabled manually on all Windows CI builds already, so instead
+ add an incompatible feature and precheck so it's skipped on Windows
+ everywhere automatically.
-Daniel Stenberg (17 Jul 2022)
-- curl: writeout: fix repeated header outputs
+- test587: add a slight delay after test
- The function stored a terminating zero into the buffer for convenience,
- but when on repeated calls that would cause problems. Starting now, the
- passed in buffer is not modified.
+ This test is designed to connect to the server, then immediately send a
+ few bytes and disconnect. In some situations, such as on a loaded
+ server, this doesn't give the server enough time to write its lock file
+ before its existence is checked. The test harness then fails to find the
+ server's input log file (because it hasn't been written yet) and fails
+ the test. By adding a short delay after the test, the HTTP server has
+ enough time to write its lock file which gives itself more time to write
+ its remaining files.
- Reported-by: highmtworks on github
- Fixes #9150
- Closes #9152
+ Ref: #11328
-- curl_multi_timeout.3: clarify usage
+- tests: stop overriding the lock timeout
- Fixes #9155
- Closes #9157
- Reported-by: jvvprasad78 on github
+ These tests reduce the server lock wait timeout which can increase
+ flakiness on loaded machines. Since this is merely an optimization,
+ eliminate them in favour of reliability.
-- mprintf: make dprintf_formatf never return negative
+ Ref: #11328
- This function no longer returns a negative value if the formatting
- string is bad since the return value would sometimes be propagated as a
- return code from the mprintf* functions and they are documented to
- return the length of the output. Which cannot be negative.
+- tests: add some --expect100-timeout to reduce timing dependencies
- Fixes #9149
- Closes #9151
- Reported-by: yiyuaner on github
+ These tests can fail when the test machine is so slow that the test HTTP
+ server didn't get a chance to complete before the client's one second
+ 100-continue timeout triggered. Increase that 1 second to 999 seconds so
+ this situation doesn't happen.
-Viktor Szakats (17 Jul 2022)
-- trace: 0x7F character is non-printable
+ Ref: #11328
- `0x7F` is `DEL`, a non-printable symbol, so print it as
- `UNPRINTABLE_CHAR`.
+- test661: return from test early in case of curl error
- Reported-by: MasterInQuestion on github
- Fixes #9162
- Closes #9166
+- tests: add the timing-dependent keyword on several tests
-- doh: use https protocol by default
+ These are ones likely to fail on heavily-loaded machines that alter the
+ normal test timing. Most of these tests already had the flaky keyword
+ since this condition makes them more likely to fail on CI.
- The only allowed protocol is https, so it makes sense to use that
- by default if not passed explicitly by the user.
+- test1592: greatly increase the maximum test timeout
- Reported-by: MasterInQuestion on github
- Reviewed-by: Jay Satiro
- Fixes #9163
- Closes #9165
+ It was too short to be reliable on heavily loaded CI machines, and
+ as a fail-safe only, it didn't need to be short.
+
+ Ref: #11328
-- openssl: fix BoringSSL symbol conflicts with LDAP and Schannel
+- test: minor test cleanups
- Same issue as here [1], but this time when building curl with BoringSSL
- for Windows with LDAP(S) or Schannel support enabled.
+ Remove an obsolete block of code in tests 2032 & 576.
+ Add a comment in test 1474.
- Apply the same fix [2] for these source files as well.
+- tests: quadruple the %FTPTIME2 and %FTPTIME3 timeouts
- This can also be fixed by moving `#include "urldata.h"` _before_
- including `winldap.h` and `schnlsp.h` respectively. This seems like
- a cleaner fix, though I'm not sure why it works and if it has any
- downside.
+ This gives more of a margin for error when running on overloaded CI
+ servers.
- [1] https://github.com/curl/curl/issues/5669
- [2] https://github.com/curl/curl/commit/fbe07c6829ba8c5793c84c2856526e19e9029ab9
+ Ref: #11328
- Co-authored-by: Jay Satiro
- Closes #9110
+- tests: improve SLOWDOWN test reliability by reducing sent data
+
+ These tests are run in SLOWDOWN mode which adds a 10 msec delay after
+ each character output, which means it takes at least 1.6 seconds (and
+ 320 kernel calls) just to get through the long welcome banner. On an
+ overloaded system, this can end up taking much more than 1.6 seconds,
+ and even more than the 7 or 16 second curl timeout that the tests rely
+ on, causing them to fail. Reducing the size of the welcome banner drops
+ the total number of characters sent before the transfer starts by more
+ than half, which reduces the opportunity for test-breaking slowdowns by
+ the same amount.
+
+ Ref: #11328
+
+- test650: fix an end tag typo
+
+Jay Satiro (13 Sep 2023)
+
+- tool_cb_wrt: fix debug assertion
+
+ - Fix off-by-one out-of-bounds array index in Windows debug assertion.
+
+ Bug: https://github.com/curl/curl/commit/af3f4e41#r127212213
+ Reported-by: Gisle Vanem
+
+Daniel Stenberg (13 Sep 2023)
+
+- ctype: add ISUNRESERVED()
+
+ ... and make Curl_isunreserved() use that macro instead of providing a
+ separate funtion for the purpose.
+
+ Closes #11840
+
+Version 8.3.0 (13 Sep 2023)
-Daniel Stenberg (13 Jul 2022)
-- asyn-thread: make getaddrinfo_complete return CURLcode
+Daniel Stenberg (13 Sep 2023)
- ... as the only caller that cares about what it returns assumes that
- anyway. This caused icc to warn:
+- RELEASE-NOTES: syn ced
- asyn-thread.c(505): error #188: enumerated type mixed with another type
- result = getaddrinfo_complete(data);
+ curl 8.3.0 release
- Repoorted-by: Matthew Thompson
- Bug: https://github.com/curl/curl/issues/9081#issuecomment-1182143076
- Closes #9146
+- THANKS: contributors from 8.3.0
-- easy_lock: fix build with icc
+Thorsten Klein (12 Sep 2023)
- The Intel compiler tries to look like GCC *and* clang *and* it lies in
- its __has_builtin() function (returns true when it should return false),
- so override it.
+- cmake: set SIZEOF_LONG_LONG in curl_config.h
- Reported-by: Matthew Thompson
- Fixes #9081
- Closes #9144
+ in order to support 32bit builds regarding wolfssl CTC_SETTINGS
-- configure: fix --disable-headers-api
+ Closes #11839
- Reported-by: Michał Antoniak
- Fixes #9134
- Closes #9143
+Jay Satiro (12 Sep 2023)
-- test3026: require 'threadsafe'
+- curl_ngtcp2: fix error message
- Reported-by: Sukanya Hanumanthu
- Fixes #9141
- Closes #9142
+- http_aws_sigv4: handle no-value user header entries
-- [Even Rouault brought this change]
+ - Handle user headers in format 'name:' and 'name;' with no value.
- CMake: link curl to its dependencies with PRIVATE
+ The former is used when the user wants to remove an internal libcurl
+ header and the latter is used when the user actually wants to send a
+ no-value header in the format 'name:' (note the semi-colon is converted
+ by libcurl to a colon).
- The current PUBLIC visibility causes issues for downstream users.
- Cf https://github.com/OSGeo/PROJ/pull/3172#issuecomment-1157942986
+ Prior to this change the AWS header import code did not special case
+ either of those and the generated AWS SignedHeaders would be incorrect.
- Reviewed-by: Jakub Zakrzewski
- Closes #9125
+ Reported-by: apparentorder@users.noreply.github.com
-- [Even Rouault brought this change]
+ Ref: https://curl.se/docs/manpage.html#-H
- CMake: remove APPEND in export(TARGETS)
+ Fixes https://github.com/curl/curl/issues/11664
+ Closes https://github.com/curl/curl/pull/11668
- When running cmake several times, new content was appended to already
- existing generated files, which is not appropriate
+Dan Fandrich (11 Sep 2023)
- Reviewed-by: Jakub Zakrzewski
- Closes #9124
+- CI: run pytest with the -v option
-- [Tatsuhiro Tsujikawa brought this change]
+ This lists of the test cases being run so it can be tracked over time.
- ngtcp2: implement cb_h3_stop_sending and cb_h3_reset_stream callbacks
+ Closes #11824
- Closes #9135
+Daniel Stenberg (11 Sep 2023)
+
+- HTTP3: the msquic backend is not functional
+
+ I ask that we do not submit bugs for this backend just yet as we know it
+ does not fully work.
+
+ Closes #11831
+ Closes #11819
+
+- aws_sigv4: the query canon code miscounted URL encoded input
+
+ Added some extra ampersands to test 439 to verify "blank" query parts
+
+ Follow-up to fc76a24c53b08cdf
+
+ Closes #11829
+
+vvb2060 (11 Sep 2023)
+
+- quic: don't set SNI if hostname is an IP address
+
+ We already do this for TLS connections.
+
+ RFC 6066 says: Literal IPv4 and IPv6 addresses are not permitted in
+ "HostName".
+
+ Ref: https://www.rfc-editor.org/rfc/rfc6066#section-3
+
+ Fixes https://github.com/curl/curl/issues/11827
+ Closes https://github.com/curl/curl/pull/11828
+
+Daniel Stenberg (10 Sep 2023)
- RELEASE-NOTES: synced
-Viktor Szakats (11 Jul 2022)
-- build: improve OS string in CMake and `config-win32.h`
+Benoit Pierre (10 Sep 2023)
- This patch makes CMake fill the "OS string" with the value of
- `CMAKE_C_COMPILER_TARGET`, if passed. This typically contains a triplet,
- the same we can pass to `./configure` via `--host=`.
+- configure: fix `HAVE_TIME_T_UNSIGNED` check
- For non-CMake, non-autotools, Windows builds, this patch adds the ability
- to override the default `OS` value in `lib/config-win32.h`.
+ The syntax was incorrect (need a proper main body), and the test
+ condition was wrong (resulting in a signed `time_t` detected as
+ unsigned).
- With these its possible to get the same OS string across the three build
- systems.
+ Closes #11825
- This patch supersedes the earlier, partial, CMake-only solution:
- 435f395f3f8c11eebfcc243ca55ebcc11a19b8b8, thus retiring the
- `CURL_OS_SUFFIX` CMake option.
+Daniel Stenberg (9 Sep 2023)
- Reviewed-by: Jay Satiro
- Closes #9117
+- THANKS-filter: pszlazak on github
-- Makefile.m32: add `CURL_RC` and `CURL_STRIP` variables [ci skip]
+pszlazak (9 Sep 2023)
- They allow to override the hardcoded values for the `windres` and `strip`
- tools, complementing the existing set of `CURL_{CC,AR,RANLIB}` variables.
+- include.d: explain headers not printed with --fail before 7.75.0
- `CURL_RC` comes handy when using LLVM tools with `CROSSPREFIX=llvm-` and
- `CURL_CC=clang` set on current latest debian:unstable or earlier, where
- `llvm-windres` is missing, and a `CURL_RC=<triplet>-windres` fixes it.
- Hopefully this will be fixed in the llvm package. FWIW `llvm-windres`
- does exist in Homebrew llvm, MSYS2 llvm and llvm-mingw.
+ Prior to 7.75.0 response headers were not printed if -f/--fail was used
+ and an error was reported by server. This was fixed in ab525c0
+ (precedes 7.75.0).
- Reviewed-by: Daniel Stenberg
- Closes #9132
+ Closes #11822
+
+Daniel Stenberg (8 Sep 2023)
+
+- http_aws_sigv4: skip the op if the query pair is zero bytes
+
+ Follow-up to fc76a24c53b08cdf
+
+ Spotted by OSS-Fuzz
+
+ Bug: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=62175
+ Closes #11823
+
+- cmdline-docs: use present tense, not future
+
+ + some smaller cleanups
+
+ Closes #11821
+
+- cmdline-docs: make sure to phrase it as "added in ...."
-Daniel Stenberg (10 Jul 2022)
-- [Tatsuhiro Tsujikawa brought this change]
+ References to things that were added or changed in a specific version
+ should be specified as "(added in [version]) for two reasons:
- ngtcp2: fix stall or busy loop on STOP_SENDING with upload data
+ 1 - consistency
- Fixes #9122
- Closes #9123
+ 2 - to allow gen.pl to strip them out if deemed referring to too old
+ versions
-- [Xiaoke Wang brought this change]
+ Closes #11821
- tool_operate: better cleanup of easy handle in exit path
+Jay Satiro (8 Sep 2023)
- Closes #9114
+- docs: mark --ssl-revoke-best-effort as Schannel specific
-- [Xiaoke Wang brought this change]
+ Closes https://github.com/curl/curl/pull/11760
- getinfo: return better error on NULL as first argument
+Nathan Moinvaziri (8 Sep 2023)
+
+- schannel: fix ordering of cert chain info
+
+ - Use CERT_CONTEXT's pbCertEncoded to determine chain order.
+
+ CERT_CONTEXT from SECPKG_ATTR_REMOTE_CERT_CONTEXT contains
+ end-entity/server certificate in pbCertEncoded. We can use this pointer
+ to determine the order of certificates when enumerating hCertStore using
+ CertEnumCertificatesInStore.
+
+ This change is to help ensure that the ordering of the certificate chain
+ requested by the user via CURLINFO_CERTINFO has the same ordering on all
+ versions of Windows.
+
+ Prior to this change Schannel certificate order was reversed in 8986df80
+ but that was later reverted in f540a39b when it was discovered that
+ Windows 11 22H2 does the reversal on its own.
+
+ Ref: https://github.com/curl/curl/issues/9706
+
+ Closes https://github.com/curl/curl/pull/11632
+
+Chris Talbot (8 Sep 2023)
+
+- digest: Use hostname to generate spn instead of realm
+
+ In https://www.rfc-editor.org/rfc/rfc2831#section-2.1.2
+
+ digest-uri-value should be serv-type "/" host , where host is:
+
+ The DNS host name or IP address for the service requested. The
+ DNS host name must be the fully-qualified canonical name of the
+ host. The DNS host name is the preferred form; see notes on server
+ processing of the digest-uri.
+
+ Realm may not be the host, so we must specify the host explicitly.
+
+ Note this change only affects the non-SSPI digest code. The digest code
+ used by SSPI builds already uses the hostname to generate the spn.
+
+ Ref: https://github.com/curl/curl/issues/11369
+
+ Closes https://github.com/curl/curl/pull/11395
+
+Daniel Stenberg (7 Sep 2023)
+
+- docs: remove use of the word 'very'
+
+ It is mostly superfluous. proselint would complain.
+
+ Closes #11818
+
+- curl_multi_remove_handle.3: clarify what happens with connection
+
+ Closes #11817
+
+- RELEASE-NOTES: synced
- Closes #9114
+- test439: verify query canonization for aws-sigv4
-- tool_getparam: repair cleanarg
+- tool_operate: make aws-sigv4 not require TLS to be used
- Regression since 9e5669f.
+ Maybe not used too often, but we want it for testing and it should work.
- Make sure the "cleaning" of command line arguments is done on the
- original argv[] pointers. As a bonus, it also exits better on out of
- memory error.
+- http_aws_sigv4: canonicalize the query
- Reported-by: Litter White
- Fixes #9128
- Closes #9130
+ Percent encoding needs to be done using uppercase, and most
+ non-alphanumerical must be percent-encoded.
-Jay Satiro (10 Jul 2022)
-- docs: explain curl_easy_escape/unescape curl handle is ignored
+ Fixes #11794
+ Reported-by: John Walker
+ Closes #11806
- 26101421 (precedes 7.82.0) removed character conversion support used by
- very old legacy operating systems and since then the curl handle passed
- to curl_easy_escape/unescape is always ignored.
+Wyatt O'Day (7 Sep 2023)
- Bug: https://github.com/curl/curl/discussions/9115
- Reported-by: Ted Lyngmo
+- lib: add ability to disable auths individually
- Closes https://github.com/curl/curl/pull/9121
+ Both with configure and cmake
-Viktor Szakats (8 Jul 2022)
-- openssl: add `CURL_BORINGSSL_VERSION` to identify BoringSSL
+ Closes #11490
- BoringSSL doesn't keep a version number, and doesn't self-identify itself
- via any other revision number via its own headers. We can identify
- BoringSSL revisions by their commit hash. This hash is typically known by
- the builder. This patch adds a way to pass this hash to libcurl, so that
- it can display in the curl version string:
+Stefan Eissing (7 Sep 2023)
- For example:
+- ngtcp2: fix handling of large requests
- `CFLAGS=-DCURL_BORINGSSL_VERSION="c239ffd0"`
+ - requests >64K are send in parts to the filter
+ - fix parsing of the request to assemble it correctly
+ from several sends
+ - open a QUIC stream only when the complete request has
+ been collected
+ Closes #11815
+
+- openssl: when CURLOPT_SSL_CTX_FUNCTION is registered, init x509 store before
+
+ - we delay loading the x509 store to shorten the handshake time.
+ However an application callback installed via CURLOPT_SSL_CTX_FUNCTION
+ may need to have the store loaded and try to manipulate it.
+ - load the x509 store before invoking the app callback
+
+ Fixes #11800
+ Reported-by: guoxinvmware on github
+ Cloes #11805
+
+Daniel Stenberg (7 Sep 2023)
+
+- krb5: fix "implicit conversion loses integer precision" warnings
+
+ conversions to/from enum and unsigned chars
+
+ Closes #11814
+
+Stefan Eissing (7 Sep 2023)
+
+- pytest: improvements
+
+ - set CURL_CI for pytest runs in CI environments
+ - exclude timing sensitive tests from CI runs
+ - for failed results, list only the log and stat of
+ the failed transfer
+
+ - fix type in http.c comment
+
+ Closes #11812
+
+- CI: move on to ngtcp2 v0.19.1
+
+ Closes #11809
+
+Dan Fandrich (5 Sep 2023)
+
+- CI: run Circle macOS builds on x86 for now
+
+ The ARM machines aren't ready for us and requesting them now causes
+ warnings e-mails to be sent to some PR pushers.
+
+ Ref: #11771
+
+Viktor Szakats (5 Sep 2023)
+
+- http3: adjust cast for ngtcp2 v0.19.0
+
+ ngtcp2 v0.19.0 made size of `ecn` member of `ngtcp2_pkt_info`
+ an `uint8_t` (was: `uint32_t`). Adjust our local cast accordingly.
+
+ Fixes:
```
- curl 7.84.0 (x86_64-w64-mingw32) libcurl/7.84.0 BoringSSL/c239ffd0 (Schannel) zlib/1.2.12 [...]
- Release-Date: 2022-06-27
- Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 [...]
- Features: alt-svc AsynchDNS brotli gsasl HSTS HTTP2 HTTP3 HTTPS-proxy IDN IPv6 Kerberos [...]
+ ./curl/lib/vquic/curl_ngtcp2.c:1912:12: warning: implicit conversion loses in
+ teger precision: 'uint32_t' (aka 'unsigned int') to 'uint8_t' (aka 'unsigned
+ char') [-Wimplicit-int-conversion]
+ pi.ecn = (uint32_t)ecn;
+ ~ ^~~~~~~~~~~~~
```
- The setting is optional, and if not passed, BoringSSL will appear without
- a version number, like before this patch.
+ Also bump ngtcp2, nghttp3 and nghttp2 to their latest versions in our
+ docs and CI.
+
+ Ref: https://github.com/ngtcp2/ngtcp2/commit/80447281bbc94af53f8aa7a4cfc19175
+ 782894a3
+ Ref: https://github.com/ngtcp2/ngtcp2/pull/877
+ Closes #11798
+
+Stefan Eissing (5 Sep 2023)
+
+- http: fix sending of large requests
- Closes #9113
+ - refs #11342 where errors with git https interactions
+ were observed
+ - problem was caused by 1st sends of size larger than 64KB
+ which resulted in later retries of 64KB only
+ - limit sending of 1st block to 64KB
+ - adjust h2/h3 filters to cope with parsing the HTTP/1.1
+ formatted request in chunks
-Jay Satiro (8 Jul 2022)
-- escape: remove outdated comment
+ - introducing Curl_nwrite() as companion to Curl_write()
+ for the many cases where the sockindex is already known
- Bug: https://github.com/curl/curl/discussions/9115
- Reported-by: Ted Lyngmo
+ Fixes #11342 (again)
+ Closes #11803
-- [Tatsuhiro Tsujikawa brought this change]
+- pytest: fix check for slow_network skips to only apply when intended
- ngtcp2: Fix missing initialization of nghttp3_nv.flags
+ Closes #11801
- Closes https://github.com/curl/curl/pull/9118
+Daniel Stenberg (5 Sep 2023)
-Daniel Stenberg (6 Jul 2022)
-- [Brad Forschinger brought this change]
+- curl_url_get/set.3: add missing semicolon in SYNOPSIS
- netrc.d: remove spurious quote
+- CURLOPT_URL.3: explain curl_url_set() uses the same parser
- Closes #9111
+- CURLOPT_URL.3: add two URL API calls in the see-also section
-Viktor Szakats (6 Jul 2022)
-- Makefile.m32: add `NGTCP2_LIBS` option [ci skip]
+Dan Fandrich (4 Sep 2023)
- Makefile.m32's ngtcp2 has its two libs hardwired for OpenSSL.
- Add `NGTCP2_LIBS` envvar to override them with a custom list,
- making it possible to use BoringSSL, or any other backend.
+- CI: add a 32-bit i686 Linux build
- Closes #9109
+ This is done by cross-compiling under regular x86_64 Linux. Since the
+ kernel offers backwards compatibility, the binaries can be tested as
+ normal.
-Jay Satiro (6 Jul 2022)
-- [Evgeny Grin (Karlson2k) brought this change]
+ Closes #11799
- digest: fix missing increment of 'nc' value for auth-int
+- tests: fix a type warning on 32-bit x86
- - Increment nc regardless of qop type.
+Viktor Szakats (4 Sep 2023)
- Prior to this change nc was only incremented for qop type auth even
- though libcurl sends nc with any qop.
+- tests: delete stray `.orig` file
- Closes https://github.com/curl/curl/pull/9090
+ Follow-up to 331b89a319d0067fa1e6441719307cfef9c7960f
+ Closes #11797
+
+Daniel Stenberg (4 Sep 2023)
-Daniel Stenberg (5 Jul 2022)
- RELEASE-NOTES: synced
- Bumped to 7.85.0
+Viktor Szakats (4 Sep 2023)
-- urldata: reduce size of four ftp related members
+- lib: silence compiler warning in inet_ntop6
- ftp_filemethod, ftpsslauth and ftp_ccc are now uchars
+ ```
+ ./curl/lib/inet_ntop.c:121:21: warning: possible misuse of comma operator her
+ e [-Wcomma]
+ cur.base = i, cur.len = 1;
+ ^
+ ./curl/lib/inet_ntop.c:121:9: note: cast expression to void to silence warnin
+ g
+ cur.base = i, cur.len = 1;
+ ^~~~~~~~~~~~
+ (void)( )
+ ```
- accepttimeout is now unsigned int - almost 50 days ought to be enough
- for this value.
+ Closes #11790
- Closes #9106
+Daniel Stenberg (4 Sep 2023)
-- urldata: reduce three type-members from int to uchar
+- transfer: also stop the sending on closed connection
- - timecondition
- - proxytype
- - method
+ Previously this cleared the receiving bit only but in some cases it is
+ also still sending (like a request-body) when disconnected and neither
+ direction can continue then.
- ... previously used their enum type in the struct, which made them
- unnecesarily large.
+ Fixes #11769
+ Reported-by: Oleg Jukovec
+ Closes #11795
- Closes #9105
+John Bampton (4 Sep 2023)
-- CURLOPT_SERVER_RESPONSE_TIMEOUT: the new name
+- docs: change `sub-domain` to `subdomain`
- Starting now, CURLOPT_FTP_RESPONSE_TIMEOUT is the alias instead of the
- other way around.
+ https://en.wikipedia.org/wiki/Subdomain
- Since 7.20.0, CURLOPT_SERVER_RESPONSE_TIMEOUT has existed as an alias
- but since the option is for more protocols than FTP the more "correct"
- version of the option is the "server" one so now we switch.
+ Closes #11793
- Closes #9104
+Stefan Eissing (4 Sep 2023)
-- urldata: make 'ftp_create_missing_dirs' a uchar
+- multi: more efficient pollfd count for poll
- It only ever holds the values 0-2.
+ - do not use separate pollfds for sockets that have POLLIN+POLLOUT
- Closes #9103
+ Closes #11792
-- [Don J Olmstead brought this change]
+- http2: polish things around POST
- cmake: support ngtcp2 boringssl backend
+ - added test cases for various code paths
+ - fixed handling of blocked write when stream had
+ been closed inbetween attempts
+ - re-enabled DEBUGASSERT on send with smaller data size
- Update the ngtcp2 find module to detect the boringssl backend. Determine
- if the underlying OpenSSL implementation is BoringSSL and if so use that
- as the ngtcp2 backend.
+ - in debug builds, environment variables can be set to simulate a slow
+ network when sending data. cf-socket.c and vquic.c support
+ * CURL_DBG_SOCK_WBLOCK: percentage of send() calls that should be
+ answered with a EAGAIN. TCP/UNIX sockets.
+ This is chosen randomly.
+ * CURL_DBG_SOCK_WPARTIAL: percentage of data that shall be written
+ to the network. TCP/UNIX sockets.
+ Example: 80 means a send with 1000 bytes would only send 800
+ This is applied to every send.
+ * CURL_DBG_QUIC_WBLOCK: percentage of send() calls that should be
+ answered with EAGAIN. QUIC only.
+ This is chosen randomly.
- Reviewed-by: Jakub Zakrzewski
- Closes #9065
+ Closes #11756
-- urldata: change 4 timeouts to unsigned int from long
+Daniel Stenberg (4 Sep 2023)
- They're not used for that long times anyway, 32 bit milliseconds is long
- enough.
+- docs: add curl_global_trace to some SEE ALSO sections
- Closes #9101
+ Closes #11791
-- urldata: make 'use_netrc' a uchar
+- os400: fix checksrc nits
- Closes #9102
+ Closes #11789
-- urldata: make 'buffer_size' an unsigned int
+Nicholas Nethercote (3 Sep 2023)
- It is already capped at READBUFFER_MAX which fits easily in 32 bits.
+- hyper: remove `hyptransfer->endtask`
- Closes #9098
+ `Curl_hyper_stream` needs to distinguish between two kinds of
+ `HYPER_TASK_EMPTY` tasks: (a) the `foreach` tasks it creates itself, and
+ (b) background tasks that hyper produces. It does this by recording the
+ address of any `foreach` task in `hyptransfer->endtask` before pushing
+ it into the executor, and then comparing that against the address of
+ tasks later polled out of the executor.
-- urldata: remove the unused 'rtspversion' struct member
+ This works right now, but there is no guarantee from hyper that the
+ addresses are stable. `hyper_executor_push` says "The executor takes
+ ownership of the task, which should not be accessed again unless
+ returned back to the user with `hyper_executor_poll`". That wording is a
+ bit ambiguous but with my Rust programmer's hat on I read it as meaning
+ the task returned with `hyper_executor_poll` may be conceptually the
+ same as a task that was pushed, but that there are no other guarantees
+ and comparing addresses is a bad idea.
- Closes #9100
+ This commit instead uses `hyper_task_set_userdata` to mark the `foreach`
+ task with a `USERDATA_RESP_BODY` value which can then be checked for,
+ removing the need for `hyptransfer->endtask`. This makes the code look
+ more like that hyper C API examples, which use userdata for every task
+ and never look at task addresses.
-- urldata: make 'use_port' an usigned short
+ Closes #11779
- ... instead of a long. It is already enforced to not attempt to set any
- value outside of 16 bits unsigned.
+Dave Cottlehuber (3 Sep 2023)
- Closes #9099
+- ws: fix spelling mistakes in examples and tests
-- urldata: store dns cache timeout in an int
+ Closes #11784
- 68 years ought to be enough for most.
+Daniel Stenberg (3 Sep 2023)
- Closes #9097
+- tool_filetime: make -z work with file dates before 1970
-- curl: proto2num: make sure obuf is inited
+ Fixes #11785
+ Reported-by: Harry Sintonen
+ Closes #11786
- Detected by Coverity. CID 1507052.
+Dan Fandrich (1 Sep 2023)
- Closes #9096
+- build: fix portability of mancheck and checksrc targets
-- cookie: use %zu to infof() for size_t values
+ At least FreeBSD preserves cwd across makefile lines, so rules
+ consisting of more than one "cd X; do_something" must be explicitly run
+ in a subshell to avoid this. This problem caused the Cirrus FreeBSD
+ build to fail when parallel make jobs were enabled.
- Detected by Coverity. CID 1507051
- Closes #9095
+- CI: adjust labeler match patterns for new & obsolete files
-Viktor Szakats (4 Jul 2022)
-- makefile.m32: add support for custom ARCH [ci skip]
+- configure: trust pkg-config when it's used for zlib
- When building curl for target platform other than x64 and x86, it is now
- possible to pass `ARCH=custom`, that will omit all hardcoded logic for
- setting up CFLAGS/LDFLAGS/RCFLAGS for these platforms, and let these be
- customized via `CURL_CFLAG_EXTRAS`, `CURL_LDFLAG_EXTRAS`, and a newly
- added one for the resource compiler: `CURL_RCFLAG_EXTRAS`.
+ The library flags retrieved from pkg-config were later thrown out and
+ harded-coded, which negates the whole reason to use pkg-config.
+ Also, previously, the assumption was made that --libs-only-l and
+ --libs-only-L are the full decomposition of --libs, which is untrue and
+ would not allow linking against a static zlib. The new approach is
+ better in that it uses --libs, although only if --libs-only-l returns
+ nothing.
- This makes it possible to use `makefile.m32` to build for ARM64 for
- example.
+ Bug: https://curl.se/mail/lib-2023-08/0081.html
+ Reported-by: Randall
+ Closes #11778
- Reviewed-by: Daniel Stenberg
- Closes #9092
+Stefan Eissing (1 Sep 2023)
-- cmake: do not force Windows target versions
+- CI/ngtcp2: clear wolfssl for when cache is ignored
- The goal of this patch is to avoid CMake forcing specific Windows
- versions and rely on toolchain defaults or manual selection instead.
- This gives back control to the user. This also brings CMake closer to
- how autotools and `Makefile.m32` behaves in this regard.
+ Closes #11783
- - CMake had a setting `ENABLE_INET_PTON` defaulting to `ON`, which did
- nothing else than fixing the Windows build target to Vista. This also
- happened when the toolchain did not have Vista support (e.g. original
- MinGW), breaking such builds.
+Daniel Stenberg (1 Sep 2023)
- In other environments it did not make a user-facing difference,
- because libcurl has its own pton() implementation, so it works well
- with or without Vista's inet_pton().
+- RELEASE-NOTES: synced
- This patch drops this setting. inet_pton() is now used whenever
- building for Vista or newer, either when requested manually or by
- default with modern toolchains (e.g. mingw-w64). Older envs will fall
- back to curl's pton().
+Nicholas Nethercote (1 Sep 2023)
- Ref: https://github.com/curl/curl/pull/9027#issuecomment-1164157604
- Ref: https://github.com/curl/curl/pull/8997#issuecomment-1164344155
+- hyper: fix a progress upload counter bug
- - When the user did no select a Windows target version manually, stop
- explicitly targeting Windows XP, and instead use the toolchain default.
+ `Curl_pgrsSetUploadCounter` should be a passed a total count, not an
+ increment.
- This may pose an issue with old toolchains defaulting to pre-XP
- targets. In such case you must manually target Windows XP via:
- `-DCURL_TARGET_WINDOWS_VERSION=0x0501`
- or
- `-DCMAKE_C_FLAGS=-D_WIN32_WINNT=0x0501`
+ This changes the failing diff for test 579 with hyper from this:
+ ```
+ Progress callback called with UL 0 out of 0[LF]
+ -Progress callback called with UL 8 out of 0[LF]
+ -Progress callback called with UL 16 out of 0[LF]
+ -Progress callback called with UL 26 out of 0[LF]
+ -Progress callback called with UL 61 out of 0[LF]
+ -Progress callback called with UL 66 out of 0[LF]
+ +Progress callback called with UL 29 out of 0[LF]
+ ```
+ to this:
+ ```
+ Progress callback called with UL 0 out of 0[LF]
+ -Progress callback called with UL 8 out of 0[LF]
+ -Progress callback called with UL 16 out of 0[LF]
+ -Progress callback called with UL 26 out of 0[LF]
+ -Progress callback called with UL 61 out of 0[LF]
+ -Progress callback called with UL 66 out of 0[LF]
+ +Progress callback called with UL 40 out of 0[LF]
+ ```
+ Presumably a step in the right direction.
- Reviewed-by: Jay Satiro
- Reviewed-by: Marcel Raad
- Closes #9046
+ Closes #11780
-- windows: improve random source
+Daniel Stenberg (1 Sep 2023)
- - Use the Windows API to seed the fallback random generator.
+- awssiv4: avoid freeing the date pointer on error
- This ensures to always have a random seed, even when libcurl is built
- with a vtls backend lacking a random generator API, such as rustls
- (experimental), GSKit and certain mbedTLS builds, or, when libcurl is
- built without a TLS backend. We reuse the Windows-specific random
- function from the Schannel backend.
+ Since it was not allocated, don't free it even if it was wrong syntax
- - Implement support for `BCryptGenRandom()` [1] on Windows, as a
- replacement for the deprecated `CryptGenRandom()` [2] function.
+ Bug: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=61908
- It is used as the secure random generator for Schannel, and also to
- provide entropy for libcurl's fallback random generator. The new
- function is supported on Vista and newer via its `bcrypt.dll`. It is
- used automatically when building for supported versions. It also works
- in UWP apps (the old function did not).
+ Follow-up to b137634ba3adb
- - Clear entropy buffer before calling the Windows random generator.
+ Closes #11782
- This avoids using arbitrary application memory as entropy (with
- `CryptGenRandom()`) and makes sure to return in a predictable state
- when an API call fails.
+Stefan Eissing (1 Sep 2023)
- [1] https://docs.microsoft.com/windows/win32/api/bcrypt/nf-bcrypt-bcryptgenrandom
- [2] https://docs.microsoft.com/windows/win32/api/wincrypt/nf-wincrypt-cryptgenrandom
+- CI: ngtcp2-linux: use separate caches for tls libraries
- Closes #9027
+ allow ever changing master for wolfssl
-Daniel Stenberg (4 Jul 2022)
-- setopt: add CURLOPT_PROTOCOLS_STR and CURLOPT_REDIR_PROTOCOLS_STR
+ Closes #11766
- ... as replacements for deprecated CURLOPT_PROTOCOLS and
- CURLOPT_REDIR_PROTOCOLS as these new ones do not risk running into the
- 32 bit limit the old ones are facing.
+- replace `master` as wolfssl-version with recent commit
- CURLINFO_PROTCOOL is now deprecated.
+- wolfssl, use master again in CI
- The curl tool is updated to use the new options.
+ - with the shared session update fix landed in master, it
+ is time to use that in our CI again
- Added test 1597 to verify the libcurl protocol parser.
+Nicholas Nethercote (31 Aug 2023)
- Closes #8992
+- tests: fix formatting errors in `FILEFORMAT.md`.
-- digest: simplify a switch() to a simple if
+ Without the surrounding backticks, these tags get swallowed when the
+ markdown is rendered.
-- digest: provide a special bit for "sess" algos
+ Closes #11777
- Also shortened the names and moved them to the .c file since they are
- private for this source file only. Also made them #defines instead of
- enum.
+Viktor Szakats (31 Aug 2023)
- Closes #9079
+- cmake: add support for `CURL_DEFAULT_SSL_BACKEND`
-Jay Satiro (4 Jul 2022)
-- [Thomas Weißschuh brought this change]
+ Allow overriding the default TLS backend via a CMake setting.
- select: do not return fatal error on EINTR from poll()
+ E.g.:
+ `cmake [...] -DCURL_DEFAULT_SSL_BACKEND=mbedtls`
- The same was done for select() in 5912da25 but poll() was missed.
+ Accepted values: bearssl, gnutls, mbedtls, openssl, rustls,
+ schannel, secure-transport, wolfssl
- Bug: https://bugs.archlinux.org/task/75201
- Reported-by: Alexandre Bury (gyscos at archlinux)
+ The passed string is baked into the curl/libcurl binaries.
+ The value is case-insensitive.
- Ref: https://github.com/curl/curl/issues/8921
- Ref: https://github.com/curl/curl/pull/8961
- Ref: https://github.com/curl/curl/commit/5912da25#r77584294
+ We added a similar option to autotools in 2017 via
+ c7170e20d0a18ec8a514b4daa53bcdbb4dcb3a05.
- Closes https://github.com/curl/curl/pull/9091
+ TODO: Convert to lowercase to improve reproducibility.
-- [Kai Pastor brought this change]
+ Closes #11774
- cmake: fix build for mingw cross compile
+- sectransp: fix compiler warnings
- - Change normaliz lib name to all lowercase.
+ https://github.com/curl/curl-for-win/actions/runs/6037489221/job/16381860220#
+ step:3:11046
+ ```
+ /Users/runner/work/curl-for-win/curl-for-win/curl/lib/vtls/sectransp.c:2435:1
+ 4: warning: unused variable 'success' [-Wunused-variable]
+ OSStatus success;
+ ^
+ /Users/runner/work/curl-for-win/curl-for-win/curl/lib/vtls/sectransp.c:3300:4
+ 4: warning: unused parameter 'sha256len' [-Wunused-parameter]
+ size_t sha256len)
+ ^
+ ```
- This is from a standing patch in vcpkg:
- Mingw has libnormaliz.a. For case-sensitive file systems (e.g. cross
- builds from Linux), the spelling must match exactly.
+ Closes #11773
- Closes https://github.com/curl/curl/pull/9084
+- tidy-up: mostly whitespace nits
-- easy_lock: fix build for mingw
+ - delete completed TODO from `./CMakeLists.txt`.
+ - convert a C++ comment to C89 in `./CMake/CurlTests.c`.
+ - delete duplicate EOLs from EOF.
+ - add missing EOL at EOF.
+ - delete whitespace at EOL (except from expected test results).
+ - convert tabs to spaces.
+ - convert CRLF EOLs to LF in GHA yaml.
+ - text casing fixes in `./CMakeLists.txt`.
+ - fix a codespell typo in `packages/OS400/initscript.sh`.
- - Define SRWLOCK symbols missing in some mingw environments.
+ Closes #11772
- Closes https://github.com/curl/curl/pull/8997
+Dan Fandrich (31 Aug 2023)
-Daniel Stenberg (2 Jul 2022)
-- tool_progress: avoid division by zero in parallel progress meter
+- CI: remove Windows builds from Cirrus, without replacement
- Reported-by: Brian Carpenter
- Fixes #9082
- Closes #9083
+ If we don't do this, all coverage on Cirrus will cease in a few days. By
+ removing the Windows builds, the FreeBSD one should still continue
+ as before. The Windows builds will need be moved to another service to
+ maintain test coverage.
-- http_aws_sigv4.c: remove two unusued includes
+ Closes #11771
- Closes #9080
+- CI: switch macOS ARM build from Cirrus to Circle CI
-- .mailmap: additional edit
+ Cirrus is drastically reducing their free tier on Sept. 1, so they will
+ no longer perform all these builds for us. All but one build has been
+ moved, with the LibreSSL one being dropped because of linking problems
+ on Circle.
- Follow-up to 861e2a8aca6c7 so that Evgeny appears with the same in git
- logs even when using old email.
+ One important note about this change is that Circle CI is currently
+ directing all these builds to x86_64 hardware, despite them requesting
+ ARM. This is because ARM nodes are scheduled to be available on the
+ free tier only in December. This reduces our architectural diversity
+ until then but it should automatically come back once those machines are
+ enabled.
-- RELEASE-NOTES: synced
+- CI: use the right variable for BSD make
- bumped to 7.84.1
+ BSD uses MAKEFLAGS instead of MAKE_FLAGS so it wasn't doing parallel
+ builds before.
-- [Evgeny Grin (Karlson2k) brought this change]
+- CI: drop the FreeBSD 12.X build
- .mailmap: updated
+ Cirrus' new free tier won't let us have many builds, so drop the
+ nonessential ones. The FreeBSD 13.X build will still give us the most
+ relevant FreeBSD coverage.
-- [Evgeny Grin (Karlson2k) brought this change]
+- CI: move the Alpine build from Cirrus to GHA
- THANKS: merged two entries for Evgeny Grin
+ Cirrus is reducing their free tier to next to nothing, so we must move
+ builds elsewhere.
- Also updated THANKS-filter file
+Stefan Eissing (30 Aug 2023)
- Closes #9076
+- test_07_upload.py: fix test_07_34 curl args
-- [Jilayne Lovejoy brought this change]
+ - Pass correct filename to --data-binary.
- lib/curl_path.c: add ISC to license expression
+ Prior to this change --data-binary was passed an incorrect filename due
+ to a missing separator in the arguments list. Since aacbeae7 curl will
+ error on incorrect filenames for POST.
- THe text of the ISC license is in this file, so the SPDX license
- expression should be updated
+ Fixes https://github.com/curl/curl/issues/11761
+ Closes https://github.com/curl/curl/pull/11763
- Closes #9073
+Nicholas Nethercote (30 Aug 2023)
-- [Sean McArthur brought this change]
+- tests: document which tests fail due to hyper's lack of trailer support.
- hyper: use wakers for curl pause/resume
+ Closes #11762
- Closes #9070
+- docs: removing "pausing transfers" from HYPER.md.
-Viktor Szakats (30 Jun 2022)
-- Makefile.m32: do not set the libcurl.rc debug flag [ci skip]
+ It's a reference to #8600, which was fixed by #9070.
- Delete `-DDEBUGBUILD=0` windres option. This was likely meant to
- disable VS_FF_DEBUG in FILEFLAGS, but any assigned value enabled
- it instead. Delete this unnecessary option and thus sync up with
- how CMake compiles libcurl.rc by default.
+ Closes #11764
- Reviewed-by: Jay Satiro
- Closes #9069
+Patrick Monnerat (30 Aug 2023)
-Daniel Stenberg (29 Jun 2022)
-- curl.h: CURLE_CONV_FAILED is obsoleted
+- os400: handle CURL_TEMP_PRINTF() while building bind source
- The last use was removed in 7.82.0. Updated some docs too to reflect the
- current error code situation.
+ Closes #11547
- Closes #9067
+- os400: build test servers
-- curl: output warning when a cookie is dropped due to size
+ Also fix a non-compliant main prototype in disabled.c.
- Dropped from the request, that is.
+ Closes #11547
- Closes #9064
+- tests: fix compilation error for os400
-- curl_mime_data.3: polish the wording
+ OS400 uses BSD 4.3 setsockopt() prototype by default: this does not
+ define parameter as const, resulting in an error if actual parameter is
+ const. Remove the const keyword from the actual parameter cast: this
+ works in all conditions, even if the formal parameter uses it.
- Closes #9063
+ Closes #11547
-- configure: check for the stdatomic.h header in configure
+- os400: make programs and command name configurable
- ... and only set HAVE_ATOMIC if that header exists since we use
- typedefes set in it.
+ Closes #11547
- Reported-by: Ryan Schmidt
- Fixes #9059
- Closes #9060
+- os400: move build configuration parameters to a separate script
-- easy_lock: fix the #ifdef conditional for ia32_pause
+ They can then easily be overriden in a script named "config400.override"
+ that is not part of the distribution.
- To work better with new and old clang compilers.
+ Closes #11547
- Reported-by: Ryan Schmidt
- Assisted-by: Joshua Root
+- os400: implement CLI tool
- Fixes #9058
- Closes #9062
+ This is provided as a QADRT (ascii) program, a link to it in the IFS and
+ a minimal CL command.
-- easy_lock: switch to using atomic_int instead of bool
+ Closes #11547
- To work with more compilers without requiring separate libs to
- link. Like with gcc-12 for RISC-V on Linux.
+Matthias Gatto (30 Aug 2023)
- Reported-by: Adam Sampson
- Fixes #9055
- Closes #9061
+- lib: fix aws-sigv4 having date header twice in some cases
-- [vvb2060 brought this change]
+ When the user was providing the header X-XXX-Date, the header was
+ re-added during signature computation, and we had it twice in the
+ request.
- ngtcp2: fix incompatible function pointer types
+ Reported-by: apparentorder@users.noreply.github.com
- Closes #9056
+ Signed-off-by: Matthias Gatto <matthias.gatto@outscale.com>
-- [vvb2060 brought this change]
+ Fixes: https://github.com/curl/curl/issues/11738
+ Closes: https://github.com/curl/curl/pull/11754
- easy_lock.h: use __asm__ instead of asm to fix build
+Jay Satiro (30 Aug 2023)
- Closes #9056
+- multi: remove 'processing: <url>' debug message
-- [Samuel Henrique brought this change]
+ - Remove debug message added by e024d566.
- libcurl-security.3: fix typo on macro "SH_"
+ Closes https://github.com/curl/curl/pull/11759
- During the packaging of the latest curl release for Debian, Lintian
- warned me about a typo which causes the section name "Secrets in memory"
- to not be rendered in the manpage due to "SH_" not being recognized as a
- header.
+- ftp: fix temp write of ipv6 address
- Closes #9057
+ - During the check to differentiate between a port and IPv6 address
+ without brackets, write the binary IPv6 address to an in6_addr.
-- easy_lock.h: include sched.h if available to fix build
+ Prior to this change the binary IPv6 address was erroneously written to
+ a sockaddr_in6 'sa6' when it should have been written to its in6_addr
+ member 'sin6_addr'. There's no fallout because no members of 'sa6' are
+ accessed before it is later overwritten.
- Patched-by: Harry Sintonen
+ Closes https://github.com/curl/curl/pull/11747
- Closes #9054
+- tool: change some fopen failures from warnings to errors
-Version 7.84.0 (27 Jun 2022)
+ - Error on missing input file for --data, --data-binary,
+ --data-urlencode, --header, --variable, --write-out.
-Daniel Stenberg (27 Jun 2022)
-- RELEASE-NOTES: synced
+ Prior to this change if a user of the curl tool specified an input file
+ for one of the above options and that file could not be opened then it
+ would be treated as zero length data instead of an error. For example, a
+ POST using `--data @filenametypo` would cause a zero length POST which
+ is probably not what the user intended.
- Version 7.84.0 release
+ Closes https://github.com/curl/curl/pull/11677
-- THANKS: contributors from 7.84.0 release notes
+- hostip: fix typo
-- hsts: use Curl_fopen()
+Davide Masserut (29 Aug 2023)
-- altsvc: use Curl_fopen()
+- tool: avoid including leading spaces in the Location hyperlink
-- fopen: add Curl_fopen() for better overwriting of files
+ Co-authored-by: Dan Fandrich <dan@coneharvesters.com>
- Bug: https://curl.se/docs/CVE-2022-32207.html
- CVE-2022-32207
- Reported-by: Harry Sintonen
- Closes #9050
+ Closes #11735
-- test444: test many received Set-Cookie:
+Daniel Stenberg (29 Aug 2023)
- The amount of sent cookies in the test is limited to 80 because hyper
- has its own strict limits in how many headers it allows to be received
- which triggers at some point beyond this number.
+- SECURITY-PROCESS.md: not a sec issue: Tricking user to run a cmdline
-- test442/443: test cookie caps
+ Closes #11757
- 442 - verify that only 150 cookies are sent
- 443 - verify that the cookie: header remains less than 8K in size
+- connect: stop halving the remaining timeout when less than 600 ms left
-- cookie: apply limits
+ When curl wants to connect to a host, it always has a TIMEOUT. The
+ maximum time it is allowed to spend until a connect is confirmed.
- - Send no more than 150 cookies per request
- - Cap the max length used for a cookie: header to 8K
- - Cap the max number of received Set-Cookie: headers to 50
+ curl will try to connect to each of the IP adresses returned for the
+ host. Two loops, one for each IP family.
- Bug: https://curl.se/docs/CVE-2022-32205.html
- CVE-2022-32205
- Reported-by: Harry Sintonen
- Closes #9048
+ During the connect loop, while curl has more than one IP address left to
+ try within a single address family, curl has traditionally allowed (time
+ left/2) for *this* connect attempt. This, to not get stuck on the
+ initial addresses in case the timeout but still allow later addresses to
+ get attempted.
-- test387: verify rejection of compression chain attack
+ This has the downside that when users set a very short timeout and the
+ host has a large number of IP addresses, the effective result might be
+ that every attempt gets a little too short time.
-- content_encoding: return error on too many compression steps
+ This change stop doing the divided-by-two if the total time left is
+ below a threshold. This threshold is 600 milliseconds.
- The max allowed steps is arbitrarily set to 5.
+ Closes #11693
- Bug: https://curl.se/docs/CVE-2022-32206.html
- CVE-2022-32206
- Reported-by: Harry Sintonen
- Closes #9049
+- asyn-ares: reduce timeout to 2000ms
-- krb5: return error properly on decode errors
+ When UDP packets get lost this makes for slightly faster retries. This
+ lower timeout is used by @c-ares itself by default starting next
+ release.
- Bug: https://curl.se/docs/CVE-2022-32208.html
- CVE-2022-32208
- Reported-by: Harry Sintonen
- Closes #9051
+ Closes #11753
+
+John Bampton (29 Aug 2023)
-- easy_lock.h: remove use of the deprecated ATOMIC_VAR_INIT macro
+- misc: remove duplicate words
- clang 14 warns about its use. It is being deprecated by the working
- group for the programming language C: "The macro ATOMIC_VAR_INIT is
- basically useless for the purpose for which it was designed"
+ Closes #11740
- Ref: https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2886.htm
+Daniel Stenberg (29 Aug 2023)
- Reported-by: Tatsuhiro Tsujikawa
- Fixes #9041
- Closes #9042
+- RELEASE-NOTES: synced
-- [Stefan Eissing brought this change]
+- wolfSSL: avoid the OpenSSL compat API when not needed
- ngtcp2: avoid supplying 0 length `msg_control` to sendmsg()
+ ... and instead call wolfSSL functions directly.
- Testing on macOS 12.4, sendmsg() fails with EINVAL when a msg_control
- buffer is provided in sengmsg(), even though msg_controllen was set to
- 0.
+ Closes #11752
- Initialize msg.msg_controllen just as needed and also perform the size
- assertion only when needed.
+Viktor Szakats (28 Aug 2023)
- Closes #9039
+- lib: fix null ptr derefs and uninitialized vars (h2/h3)
-- [Tom Eccles brought this change]
+ Fixing compiler warnings with gcc 13.2.0 in unity builds.
- ftp: restore protocol state after http proxy CONNECT
+ Assisted-by: Jay Satiro
+ Assisted-by: Stefan Eissing
+ Closes #11739
- connect_init() (lib/http_proxy.c) swaps out the protocol state while
- working on the proxy connection, this is then restored by
- Curl_connect_done() after the connection completes.
+Jay Satiro (28 Aug 2023)
- ftp_do_more() extracted the protocol state pointer to a local variable
- at the start of the function then calls Curl_proxy_connect(). If the proxy
- connection completes, Curl_proxy_connect() will call Curl_connect_done()
- (via Curl_proxyCONNECT()), which restores data->req.p to point to the ftp
- protocol state instead of the http proxy protocol state, but the local
- variable in ftp_do_more still pointed to the old value.
+- secureserver.pl: fix stunnel version parsing
- Ultimately this meant that the state worked on by ftp_do_more() was the
- http proxy state not the ftp state initialised by ftp_connect(), but
- subsequent calls to any ftp_ function would use the original state.
+ - Allow the stunnel minor-version version part to be zero.
- For my use-case, the visible consequence was that ftp->downloadsize was
- never set and so downloaded data was never returned to the application.
+ Prior to this change with the stunnel version scheme of <major>.<minor>
+ if either part was 0 then version parsing would fail, causing
+ secureserver.pl to fail with error "No stunnel", causing tests that use
+ the SSL protocol to be skipped. As a practical matter this bug can only
+ be caused by a minor-version part of 0, since the major-version part is
+ always greater than 0.
- This commit updates the ftp protocol state pointer in ftp_do_more() after
- Curl_proxy_connect() returns, ensuring that the correct state pointer is
- used.
+ Closes https://github.com/curl/curl/pull/11722
- Fixes #8737
- Closes #9043
+- secureserver.pl: fix stunnel path quoting
-Jay Satiro (23 Jun 2022)
-- THANKS: add contributor missing from aea8ac1
+ - Store the stunnel path in the private variable $stunnel unquoted and
+ instead quote it in the command strings.
- aea8ac1 fixed #8980 which was reported by Sgharat on github, but that
- info was not included in the commit message.
+ Prior to this change the quoted stunnel path was passed to perl's file
+ operators which cannot handle quoted paths. For example:
-- curl_setup: include _mingw.h
+ $stunnel = "\"/C/Program Files (x86)/stunnel/bin/tstunnel\"";
+ if(-x $stunnel or -x "$stunnel")
+ # false even if path exists and is executable
- Prior to this change _mingw.h needed to be included in each unit before
- evaluating __MINGW{32,64}_xxx_VERSION macros since it defines them. It
- is included only in some mingw headers (eg stdio.h) and not others
- (eg windows.h) so it's better to explicitly include it once.
+ Our other test scripts written in perl, unlike this one, use servers.pm
+ which has a global $stunnel variable with the path stored unquoted and
+ therefore those scripts don't have this problem.
- Closes https://github.com/curl/curl/pull/9036
+ Closes https://github.com/curl/curl/pull/11721
-Viktor Szakats (22 Jun 2022)
-- rand: stop detecting /dev/urandom in cross-builds
+Daniel Stenberg (28 Aug 2023)
- - Prevent CMake to auto-detect /dev/urandom when cross-building.
- Before this patch, it would detect it in a cross-build scenario on *nix
- hosts with this device present. This was a problem for example with
- Windows builds, but it could affect any target system with this device
- missing. This also syncs detection behaviour with autotools, which also
- skips it for cross-builds.
- - Also, make sure to never use the file RANDOM_FILE as entropy for libcurl's
- fallback random number generator on Windows. Windows does not have the
- concept of reading a random stream from a filename, nor any guaranteed
- non-world-writable path on disk. With this, a manual misconfiguration or
- an overeager auto-detection can no longer result in a user-controllable
- seed source.
+- altsvc: accept and parse IPv6 addresses in response headers
- Reviewed-by: Daniel Stenberg
- Closes #9038
+ Store numerical IPv6 addresses in the alt-svc file with the brackets
+ present.
-Daniel Stenberg (22 Jun 2022)
-- [Emanuele Torre brought this change]
+ Verify with test 437 and 438
- ci: avoid `cmake -Hpath`
+ Fixes #11737
+ Reported-by: oliverpool on github
+ Closes #11743
- This is an undocumented option similar to the `-Spath' option introduced
- in cmake 3.13.
- Replace all instances of `-Hpath' with `-Spath' in macos workflow.
- Replace `-H. -Bpath' with `mkdir path; cd ./path; cmake ..' in zuul
- scripts since it runs an older version of cmake.
+- libtest: use curl_free() to free libcurl allocated data
- Fixes #9008
- Closes #9014
+ In several test programs. These mistakes are not detected or a problem
+ as long as memdebug.h is included, as that provides the debug wrappers
+ for all memory functions in the same style libcurl internals do it,
+ which makes curl_free and free effectively the same call.
-- INTERNALS: bring back the "Library symbols" section
+ Reported-by: Nicholas Nethercote
+ Closes #11746
- Most contents was moved, but this text should remain here.
+Jay Satiro (28 Aug 2023)
- Follow-up to: d324ac8
- Reported-by: Viktor Szakats
- Bug: https://github.com/curl/curl/pull/9027#discussion_r903382326
- Closes #9037
+- disable.d: explain --disable not implemented prior to 7.50.0
-Viktor Szakats (22 Jun 2022)
-- Makefile.m32: stop forcing XP target with ipv6 enabled [ci skip]
+ Option -q/--disable was added in 5.0 but only -q was actually
+ implemented. Later --disable was implemented in e200034 (precedes
+ 7.49.0), but incorrectly, and fixed in 6dbc23c (precedes 7.50.0).
- Since this [1] commit in 2011, `_WIN32_WINNT` was set fixed to Windows
- XP when the `-ipv6` option is selected. Maybe this was added to support
- pre-XP Windows versions (?). These days libcurl builds fine for both XP
- and post-XP versions with IPv6 support enabled. The relevance of pre-XP
- version is also low by now. Other build methods also do not impose such
- limitation for a similar configuration. So, drop this hard-wired
- `_WIN32_WINNT` limit from `Makefile.m32`, thus building for the default
- Windows version set by the compiler. This is Vista for recent MinGW
- versions.
+ Reported-by: pszlazak@users.noreply.github.com
- Old behaviour can be restored by setting this envvar:
- export CURL_CFLAG_EXTRAS=-D_WIN32_WINNT=0x0501
+ Fixes https://github.com/curl/curl/issues/11710
+ Closes #11712
- [1] 98a61d8e2e8982786aaf3916cbbcac96838316e7
+Nicholas Nethercote (28 Aug 2023)
- Closes #9035
+- hyper: fix ownership problems
-Daniel Stenberg (21 Jun 2022)
-- CONTRIBUTE: mention how we maintain REUSE compliance
+ Some of these changes come from comparing `Curl_http` and
+ `start_CONNECT`, which are similar, and adding things to them that are
+ present in one and missing in another.
- for copyright and license information of all files stored in git
+ The most important changes:
+ - In `start_CONNECT`, add a missing `hyper_clientconn_free` call on the
+ happy path.
+ - In `start_CONNECT`, add a missing `hyper_request_free` on the error
+ path.
+ - In `bodysend`, add a missing `hyper_body_free` on an early-exit path.
+ - In `bodysend`, remove an unnecessary `hyper_body_free` on a different
+ error path that would cause a double-free.
+ https://docs.rs/hyper/latest/hyper/ffi/fn.hyper_request_set_body.html
+ says of `hyper_request_set_body`: "This takes ownership of the
+ hyper_body *, you must not use it or free it after setting it on the
+ request." This is true even if `hyper_request_set_body` returns an
+ error; I confirmed this by looking at the hyper source code.
- Closes #9032
+ Other changes are minor but make things slightly nicer.
-- CURLOPT_ALTSVC.3: document the file format
+ Closes #11745
- Closes #9033
+Daniel Stenberg (28 Aug 2023)
-Jay Satiro (21 Jun 2022)
-- runtests: add "threadsafe" to detected features
+- multi.h: the 'revents' field of curl_waitfd is supported
- Follow-up to recent commits which added thread-safety support.
+ Since 6d30f8ebed34e7276
- Bug: https://github.com/curl/curl/pull/9012#discussion_r902018782
- Reported-by: Marc Hörsken
+ Reported-by: Nicolás Ojeda Bär
+ Ref: #11748
+ Closes #11749
- Closes https://github.com/curl/curl/pull/9030
+Gerome Fournier (27 Aug 2023)
-Daniel Stenberg (20 Jun 2022)
-- easy: remove dead code
+- tool_paramhlp: improve str2num(): avoid unnecessary call to strlen()
- Follow-up from 5912da253b64d
+ Closes #11742
- Detected by Coverity (CID 1506519)
+Daniel Stenberg (27 Aug 2023)
- Closes #9029
+- docs: mention critical files in same directories as curl saves
-- [Glenn Strauss brought this change]
+ ... cannot be fully protected. Don't do it.
- transfer: upload performance; avoid tiny send
+ Co-authored-by: Jay Satiro
+ Reported-by: Harry Sintonen
+ Fixes #11530
+ Closes #11701
- Append to the upload buffer when only small amount remains in buffer
- rather than performing a separate tiny send to empty buffer.
+John Hawthorn (26 Aug 2023)
- Avoid degenerative upload behavior which might cause curl to send mostly
- 1-byte DATA frames after exhausing the h2 send window size
+- OpenSSL: clear error queue after SSL_shutdown
- Related discussion: https://github.com/nghttp2/nghttp2/issues/1722
+ We've seen errors left in the OpenSSL error queue (specifically,
+ "shutdown while in init") by adding some logging it revealed that the
+ source was this file.
- Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
- Closes #8965
+ Since we call SSL_read and SSL_shutdown here, but don't check the return
+ code for an error, we should clear the OpenSSL error queue in case one
+ was raised.
-- [Steve Holme brought this change]
+ This didn't affect curl because we call ERR_clear_error before every
+ write operation (a0dd9df9ab35528eb9eb669e741a5df4b1fb833c), but when
+ libcurl is used in a process with other OpenSSL users, they may detect
+ an OpenSSL error pushed by libcurl's SSL_shutdown as if it was their
+ own.
- projects: fix third-party SSL library build paths for Visual Studio
+ Co-authored-by: Satana de Sant'Ana <satana@skylittlesystem.org>
- The paths used by the build batch files were inconsistent with those in
- the Visual Studio project files.
+ Closes #11736
- Closes #8991
+Alexander Kanavin (25 Aug 2023)
-- [Pierrick Charron brought this change]
+- tests: update cookie expiry dates to far in the future
- urlapi: make curl_url_set(url, CURLUPART_URL, NULL, 0) clear all parts
+ This allows testing Y2038 with system time set to after that, so that
+ actual Y2038 issues can be exposed, and not masked by expiry errors.
- As per the documentation :
+ Fixes #11576
+ Closes #11610
- > Setting a part to a NULL pointer will effectively remove that
- > part's contents from the CURLU handle.
+John Bampton (25 Aug 2023)
- But currently clearing CURLUPART_URL does nothing and returns
- CURLUE_OK. This change will clear all parts of the URL at once.
+- misc: fix spelling
- Closes #9028
+ Closes #11733
-- [Philip Heiduck brought this change]
+Daniel Stenberg (25 Aug 2023)
- CI: bump FreeBSD 13.0 to 13.1
+- cmdline-opts/page-header: clarify stronger that !opt == URL
- Signed-off-by: Philip H <47042125+pheiduck@users.noreply.github.com>
- Closes #8815
+ Everything provided on the command line that is not an option (or an
+ argument to an option) is treated as a URL.
-- RELEASE-NOTES: synced
+ Closes #11734
- and updated release date in RELEASE-PROCEDURE.md
+- tests/runner: fix %else handling
-- [divinity76 brought this change]
+ Getting the show state proper for %else and %endif did not properly work
+ in nested cases.
- CURLOPT_HTTPHEADER.3: improve comment in example
+ Follow-up to 3d089c41ea9
- Closes #9025
+ Closes #11731
-Marc Hoersken (16 Jun 2022)
-- CI/azure: reduce flakiness by retrying install/prepare steps
+Nicholas Nethercote (25 Aug 2023)
- Closes #9010
+- docs: Remove mention of #10803 from `KNOWN_BUGS`.
-- CI/cirrus: align Windows timeout with Azure CI at 120 minutes
+ Because the leaks have been fixed.
- Closes #9009
+- c-hyper: fix another memory leak in `Curl_http`.
-Jay Satiro (16 Jun 2022)
-- vtls: make curl_global_sslset thread-safe
+ There is a `hyper_clientconn_free` call on the happy path, but not one
+ on the error path. This commit adds one.
- .. and update some docs to explain curl_global_* is now thread-safe.
+ Fixes the second memory leak reported by Valgrind in #10803.
- Follow-up to 23af112 which made curl_global_init/cleanup thread-safe.
+ Fixes #10803
+ Closes #11729
- Closes https://github.com/curl/curl/pull/9016
+- c-hyper: fix a memory leak in `Curl_http`.
-- curl_easy_pause.3: remove explanation of progress function
+ A request created with `hyper_request_new` must be consumed by either
+ `hyper_clientconn_send` or `hyper_request_free`.
- - Remove misleading text that says progress function "gets called at
- least once per second, even if the connection is paused."
+ This is not terrifically clear from the hyper docs --
+ `hyper_request_free` is documented only with "Free an HTTP request if
+ not going to send it on a client" -- but a perusal of the hyper code
+ confirms it.
- The progress function behavior is more nuanced and the user is better
- served reading the progress function doc rather than attempt to explain
- it in the curl_easy_pause doc.
+ This commit adds a `hyper_request_free` to the `error:` path in
+ `Curl_http` so that the request is consumed when an error occurs after
+ the request is created but before it is sent.
- The progress function can only be called at least once per second if an
- appropriate multi transfer function is called (eg curl_multi_perform) in
- that time. For a paused transfer there may not be such a call. Rather
- than explain this in detail in the curl_easy_pause doc, rely on the user
- reading the CURLOPT_PROGRESSFUNCTION doc.
+ Fixes the first memory leak reported by Valgrind in #10803.
- Ref: https://github.com/curl/curl/issues/8983
+ Closes #11729
- Closes https://github.com/curl/curl/pull/9015
+Daniel Stenberg (25 Aug 2023)
-Daniel Stenberg (15 Jun 2022)
-- libssh: skip the fake-close when libssh does the right thing
+- RELEASE-NOTES: synced
- Starting in libssh 0.10.0 ssh_disconnect() will no longer close our
- socket. Instead it will be kept alive as we want it, and it is our
- responsibility to close it later.
+John Bampton (25 Aug 2023)
- Ref: #8718
- Ref: https://gitlab.com/libssh/libssh-mirror/-/merge_requests/240
- Closes #9021
+- misc: spellfixes
-- configure: warn about rustls being experimental
+ Closes #11730
- Right now a dozen test cases are disabled because they don't work with
- rustls.
+Daniel Stenberg (25 Aug 2023)
- Closes #9019
+- tests: add support for nested %if conditions
-- runtests: skip starting the ssh server if user name is lacking
+ Provides more flexiblity to test cases.
- Because the ssh server startup script *requires* a user name there's no
- point in invoking it if no name was found.
+ Also warn and bail out if there is an '%else' or %endif' without a
+ preceeding '%if'.
- Reported-by: Ricardo M. Correia
- Ref: #9007
- Closes #9013
+ Ref: #11610
+ Closes #11728
-- copyright.pl: parse and use .reuse/dep5 for skips
+- time-cond.d: mention what happens on a missing file
- Also scan skipped files to be able to find superfluous ignores, shown with -v.
+ Closes #11727
- Closes #9006
+Christian Hesse (24 Aug 2023)
-- reuse/dep5: adjusted to parse better
+- docs/cmdline-opts: match the current output
- ... adjusted a few files to contain copyright and license info.
+ The release date has been added in output, reflect that in documentation.
- Closes #9006
+ Closes #11723
-- buildconf.bat: update copyright year range
+Daniel Stenberg (24 Aug 2023)
- Closes #9006
+- lib: minor comment corrections
-- README.md: use the common "Copyright" style formatting
+- docs: rewrite to present tense
- Closes #9006
+ ... instead of using future tense.
-- reuse: move license info from .mailmap.license to .reuse/dep5
+ + numerous cleanups and improvements
+ + stick to "reuse" not "re-use"
+ + fewer contractions
- Closes #9006
+ Closes #11713
-- README.md: add a REUSE badge
+- urlapi: setting a blank URL ("") is not an ok URL
- Closes #9004
+ Test it in 1560
+ Fixes #11714
+ Reported-by: ad0p on github
+ Closes #11715
-- .reuse/dep5: remove recursive docs ignore, only skip markdown files
+- spelling: use 'reuse' not 're-use' in code and elsewhere
- ... and some additional non-markdown individual files in docs/
+ Unify the spelling as both versions were previously used intermittently
- Closes #9005
+ Closes #11717
-- docs/cmdline-opts: add copyright and license identifier to each file
+Michael Osipov (23 Aug 2023)
- gen.pl now insists on C: and SPDX-License-Identifier: fields to be
- present in all files.
+- system.h: add CURL_OFF_T definitions on HP-UX with HP aCC
- Closes #9002
+ HP-UX on IA64 provides two modes: 32 and 64 bit while 32 bit being the
+ default one. Use "long long" in 32 bit mode and just "long" in 64 bit
+ mode.
-- copyright: info for/ignore .github/ISSUE_TEMPLATE/bug_report.md
+ Closes #11718
- Follow-up from 448f7ef9ab2afb7. The adding of the copyright text in that
- file broke site functionality.
+Dan Fandrich (22 Aug 2023)
- Closes #9001
+- tests: don't call HTTP errors OK in test cases
-- bug_report.md: revert the REUSE template to see if it works again
+ Some HTTP errors codes were accompanied by the text OK, which causes
+ some cognitive dissonance when reading them.
-Viktor Szakats (13 Jun 2022)
-- version: rename threadsafe-init to threadsafe
+- http: close the connection after a late 417 is received
- Referring to Daniel's article [1], making the init function thread-safe
- was the last bit to make libcurl thread-safe as a whole. So the name of
- the feature may as well be the more concise 'threadsafe', also telling
- the story that libcurl is now fully thread-safe, not just its init
- function. Chances are high that libcurl wants to remain so in the
- future, so there is little likelihood of ever needing any other distinct
- `threadsafe-<name>` feature flags.
+ In this situation, only part of the data has been sent before aborting
+ so the connection is no longer usable.
- For consistency we also shorten `CURL_VERSION_THREADSAFE_INIT` to
- `CURL_VERSION_THREADSAFE`, update its description and reference libcurl's
- thread safety documentation.
+ Assisted-by: Jay Satiro
+ Fixes #11678
+ Closes #11679
- [1]: https://daniel.haxx.se/blog/2022/06/08/making-libcurl-init-more-thread-safe/
+- runtests: slightly increase the longest log file displayed
- Reviewed-by: Daniel Stenberg
- Reviewed-by: Jay Satiro
- Closes #8989
+ The new limit provides enough space for a 64 KiB data block to be logged
+ in a trace file, plus a few lines at the start and end for context. This
+ happens to be the amount of data sent at a time in a PUT request.
-Daniel Stenberg (13 Jun 2022)
-- test3026: disable on win32
+- tests: add delay command to the HTTP server
- ... as it's not likely to have working pthreads
+ This adds a delay after client connect.
- Closes #8996
+Daniel Stenberg (22 Aug 2023)
-- GHA: shorten the reuse CI job name
+- cirrus: install everthing with pkg, avoid pip
- "REUSE compliance / check" should be good enough
+ Assisted-by: Sevan Janiyan
- Closes #9000
+ Closes #11711
-- misc: add missing SPDX-License-Identifier info
+- curl_url*.3: update function descriptions
- For some reason the REUSE CI job did not find these.
+ - expand and clarify several descriptions
+ - avoid using future tense all over
- Closes #8999
+ Closes #11708
-- copyright: verify SPDX-License-Identifier presence as well
+- RELEASE-NOTES: synced
-- easy_lock: add SPDX license identifier
+Stefan Eissing (21 Aug 2023)
- Closes #8998
+- CI/cirrus: disable python install on FreeBSD
-- mailmap: Max Mehl
+ - python cryptography package does not build build FreeBSD
+ - install just mentions "error"
+ - this gets the build and the main test suite going again
-- [Max Mehl brought this change]
+ Closes #11705
- git: ignore large commit making the curl REUSE compliant
+- test2600: fix flakiness on low cpu
-- [Max Mehl brought this change]
+ - refs #11355 where failures to to low cpu resources in CI
+ are reported
+ - vastly extend CURLOPT_CONNECTTIMEOUT_MS and max durations
+ to test cases
+ - trigger Curl_expire() in test filter to allow re-checks before
+ the usual 1second interval
- copyright: make repository REUSE compliant
+ Closes #11690
- Add licensing and copyright information for all files in this repository. This
- either happens in the file itself as a comment header or in the file
- `.reuse/dep5`.
+Maksim Sciepanienka (20 Aug 2023)
- This commit also adds a Github workflow to check pull requests and adapts
- copyright.pl to the changes.
+- tool_urlglob: use the correct format specifier for curl_off_t in msnprintf
- Closes #8869
+ Closes #11698
-- curl_url_set.3: clarify by default using known schemes only
+Daniel Stenberg (20 Aug 2023)
- Closes #8994
+- test687/688: two more basic --xattr tests
-- scripts/copyright.pl: ignore leading spaces
+ Closes #11697
-Viktor Szakats (10 Jun 2022)
-- ngtcp2: fix typo in preprocessor condition
+- cmdline-opts/docs: mentioned the negative option part
- Ref: 927ede7edcb7b05b8e8bbf9ced6aed523ae594a7
+ ... for --no-alpn and --no-buffer in the same style done for other --no-
+ options:
- Bug: https://github.com/curl/curl/pull/8981#discussion_r894312185
- Reported-by: Emil Engler
- Closes #8987
+ "Note that this is the negated option name documented."
-Daniel Stenberg (10 Jun 2022)
-- RELEASE-NOTES: synced
+ Closes #11695
-- [Tatsuhiro Tsujikawa brought this change]
+Emanuele Torre (19 Aug 2023)
- ngtcp2: build without sendmsg
+- tool/var: also error when expansion result starts with NUL
- Closes #8981
+ Expansions whose output starts with NUL were being expanded to the empty
+ string, and not being recognised as values that contain a NUL byte, and
+ should error.
-- [Tatsuhiro Tsujikawa brought this change]
+ Closes #11694
- ngtcp2: use handshake helper funcs to simplify TLS handshake integration
+Daniel Stenberg (19 Aug 2023)
- Closes #8968
+- tests: add 'large-time' as a testable feature
-- test390: verify --parallel
+ This allows test cases to require this feature to run and to be used in
+ %if conditions.
- Closes #8985
+ Large here means larger than 32 bits. Ie does not suffer from y2038.
-- test1543: verify CURLINFO_EFFECTIVE_URL with CURLOPT_CURLU set
+ Closes #11696
- Triggered by a bug report from Adam Light:
- https://curl.se/mail/lib-2022-06/0013.html - which ended up being mostly
- a misunderstanding of how CURLINFO_EFFECTIVE_URL works.
+- tests/Makefile: add check-translatable-options.pl to tarball
- Closes #8971
+ Used in test 1544
-- url: URL encode the path when extracted, if spaces were set
+ Follow-up to ae806395abc8c
-- urlapi: support CURLU_URLENCODE for curl_url_get()
+- gen.pl: fix a long version generation mistake
-- server/sws: support spaces in the HTTP request path
+ Too excessive escaping made the parsing not find the correct long names
+ later and instead add "wrong" links.
-- tests/getpart: fix getpartattr to work with "data" and "data2"
+ Follow-up to 439ff2052e219
-- select: return error from "lethal" poll/select errors
+ Reported-by: Lukas Tribus
+ Fixes #11688
+ Closes #11689
- Adds two new error codes: CURLE_UNRECOVERABLE_POLL and
- CURLM_UNRECOVERABLE_POLL one each for the easy and the multi interfaces.
+- lib: move mimepost data from ->req.p.http to ->state
- Reported-by: Harry Sintonen
- Fixes #8921
- Closes #8961
+ When the legacy CURLOPT_HTTPPOST option is used, it gets converted into
+ the modem mimpost struct at first use. This data is (now) kept for the
+ entire transfer and not only per single HTTP request. This re-enables
+ rewind in the beginning of the second request instead of in end of the
+ first, as brought by 1b39731.
+
+ The request struct is per-request data only.
+
+ Extend test 650 to verify.
+
+ Fixes #11680
+ Reported-by: yushicheng7788 on github
+ Closes #11682
+
+Patrick Monnerat (17 Aug 2023)
-- test3026: add missing control file
+- os400: do not check translatable options at build time
- Follow-up from 2ed101256414ea5
+ Now that there is a test for this, the build time check is not needed
+ anymore.
- Makes the test run, makes 'make dist' work
+ Closes #11650
- This single test takes 24-25 seconds on my machine (with valgrind). For
- this reason I tag it with a "slow" keyword.
+- test1554: check translatable string options in OS400 wrapper
- Closes #8976
+ This test runs a perl script that checks all string options are properly
+ translated by the OS400 character code conversion wrapper. It also
+ verifies these options are listed in alphanumeric order in the wrapper
+ switch statement.
-- runtests: fix skipping tests not done event-based
+ Closes #11650
- ... and call timestampskippedevents() to avoid the flood of
- uninitialized variable warnings.
+Daniel Stenberg (17 Aug 2023)
- Closes #8977
+- unit3200: skip testing if function is not present
-- transfer: maintain --path-as-is after redirects
+ Fake a successful run since we have no easy mechanism to skip this test
+ for this advanced condition.
- Reported-by: Marcus T
- Fixes #8974
- Closes #8975
+- unit2600: fix build warning if built without verbose messages
-- test391: verify --path-as-is with redirect
+- test1608: make it build and get skipped without shuffle DNS support
-Jay Satiro (8 Jun 2022)
-- curl_global_init.3: Separate the Windows loader lock warning
+- lib: --disable-bindlocal builds curl without local binding support
- This is a slight correction of the parent commit which implied the
- loader lock warning only applied if not thread-safe. In fact the loader
- lock warning applies either way.
+- test1304: build and skip without netrc support
- Ref: https://github.com/curl/curl/pull/8972#discussion_r891987030
+- lib: build fixups when built with most things disabled
-Daniel Stenberg (8 Jun 2022)
-- curl_global_init.3: this is now (usually) thread-safe
+ Closes #11687
- Follow-up to 23af112f5556
+- workflows/macos.yml: disable zstd and alt-svc in the http-only build
- Closes #8972
+ Closes #11683
-Jay Satiro (8 Jun 2022)
-- [Haxatron brought this change]
+Stefan Eissing (17 Aug 2023)
- libcurl-security.3: Document CRLF header injection
+- bearssl: handshake fix, provide proper get_select_socks() implementation
- - Document that user input to header options is not sanitized, which
- could result in CRLF used to modify the request in a way other than
- what was intended.
+ - bring bearssl handshake times down from +200ms down to other TLS backends
+ - vtls: improve generic get_select_socks() implementation
+ - tests: provide Apache with a suitable ssl session cache
- Ref: https://hackerone.com/reports/1589877
- Ref: https://medium.com/@tomnomnom/crlf-injection-into-phps-curl-options-e2e0d7cfe545
+ Closes #11675
- Closes https://github.com/curl/curl/pull/8964
+- tests: TLS session sharing test
-- CURLOPT_RANGE.3: remove ranged upload advice
+ - test TLS session sharing with special test client
+ - expect failure with wolfSSL
+ - disable flaky wolfSSL test_02_07b
- The e-mail link in the advice contains instructions that are prone to
- error. We need an example that works and can demonstrate how to properly
- perform a ranged upload, and then we can refer to that example instead.
+ Closes #11675
- Bug: https://github.com/curl/curl/issues/8969
- Reported-by: Simon Berger
+Daniel Stenberg (17 Aug 2023)
- Closes https://github.com/curl/curl/pull/8970
+- CURLOPT_*TIMEOUT*: extend and clarify
-Daniel Stenberg (7 Jun 2022)
-- [Thomas Guillem brought this change]
+ Closes #11686
- curl_version_info: add CURL_VERSION_THREADSAFE_INIT
+- urlapi: return CURLUE_BAD_HOSTNAME if puny2idn encoding fails
- This flag can be used to make sure that curl_global_init() is
- thread-safe.
+ And document it. Only return out of memory when it actually is a memory
+ problem.
- This can be useful for libraries that can't control what other
- dependencies are doing with Curl.
+ Pointed-out-by: Jacob Mealey
+ Closes #11674
- Closes #8680
+Mathew Benson (17 Aug 2023)
-- [Thomas Guillem brought this change]
+- cmake: add GnuTLS option
- lib: make curl_global_init() threadsafe when possible
+ - Option to use GNUTLS was missing. Hence was not able to use GNUTLS
+ with ngtcp2 for http3.
- Use a posix pthread or a Windows SRWLOCK to lock curl_global_init*() and
- curl_global_cleanup().
+ Closes #11685
- Closes #8680
+Daniel Stenberg (16 Aug 2023)
- RELEASE-NOTES: synced
-- [Fabian Keil brought this change]
+- http: remove the p_pragma struct field
- test414: add the '--resolve' keyword
+ unused since 40e8b4e52 (2008)
- ... so the test can be automatically skipped when
- using an external proxy like Privoxy.
+ Closes #11681
- Closes #8959
+Jay Satiro (16 Aug 2023)
-- [Fabian Keil brought this change]
+- CURLINFO_CERTINFO.3: better explain curl_certinfo struct
- test{440,441,493,977}: add "HTTP proxy" keywords
+ Closes https://github.com/curl/curl/pull/11666
- ... so the tests can be automatically skipped when
- using an external proxy like Privoxy.
+- CURLINFO_TLS_SSL_PTR.3: clarify a recommendation
- Closes #8959
+ - Remove the out-of-date SSL backend list supported by
+ CURLOPT_SSL_CTX_FUNCTION.
-- [Fabian Keil brought this change]
+ It makes more sense to just refer to that document instead of having
+ a separate list that has to be kept in sync.
- runtests.pl: add the --repeat parameter to the --help output
+ Closes https://github.com/curl/curl/pull/11665
- Closes #8959
+- write-out.d: clarify %{time_starttransfer}
-- [Fabian Keil brought this change]
+ sync it up with CURLINFO_STARTTRANSFER_TIME_T
- test 2081: add a valid reply for the second request
+Daniel Stenberg (15 Aug 2023)
- ... so the test works when using a HTTP proxy like
- Privoxy that sends an error message if the server
- doesn't send data.
+- transfer: don't set TIMER_STARTTRANSFER on first send
- Closes #8959
+ The time stamp is for measuring the first *received* byte
-- [Fabian Keil brought this change]
+ Fixes #11669
+ Reported-by: JazJas on github
+ Closes #11670
- test 675: add missing CR so the test passes when run through Privoxy
+trrui-huawei (15 Aug 2023)
- Closes #8959
+- quiche: enable quiche to handle timeout events
-- ftp: when failing to do a secure GSSAPI login, fail hard
+ In parallel with ngtcp2, quiche also offers the `quiche_conn_on_timeout`
+ interface for the application to invoke upon timer
+ expiration. Therefore, invoking the `on_timeout` function of the
+ Connection is crucial to ensure seamless functionality of quiche with
+ timeout events.
- ... instead of switching to cleartext. For the sake of security.
+ Closes #11654
- Reported-by: Harry Sintonen
- Bug: https://hackerone.com/reports/1590102
- Closes #8963
+- quiche: adjust quiche `QUIC_IDLE_TIMEOUT` to 60s
-- http2: reject overly many push-promise headers
+ Set the `QUIC_IDLE_TIMEOUT` parameter to match ngtcp2 for consistency.
- Getting more than a thousand of them is rather a sign of some kind of
- attack.
+Daniel Stenberg (15 Aug 2023)
- Reported-by: Harry Sintonen
- Bug: https://hackerone.com/reports/1589847
- Closes #8962
+- KNOWN_BUGS: LDAPS requests to ActiveDirectory server hang
-- [Fabian Keil brought this change]
+ Closes #9580
- misc: spelling improvements
+- imap: add a check for failing strdup()
- Closes #8956
+- imap: remove the only sscanf() call in the IMAP code
-- [Tatsuhiro Tsujikawa brought this change]
+ Avoids the use of a stack buffer.
- ngtcp2: fix assertion failure on EMSGSIZE
+ Closes #11673
- Closes #8958
+- imap: use a dynbuf in imap_atom
-- easy/transfer: fix cookie-disabled build
+ Avoid a calculation + malloc. Build the output in a dynbuf.
- Follow-up from 45de940cebf6a
- Reported-by: Marcel Raad
- Fixes #8953
- Closes #8954
+ Closes #11672
-- examples/crawler.c: use the curl license
+Marin Hannache (14 Aug 2023)
- With permission from Jeroen Ooms
+- http: do not require a user name when using CURLAUTH_NEGOTIATE
- URL: https://github.com/curl/curl/pull/8869#issuecomment-1144742731
- Closes #8950
+ In order to get Negotiate (SPNEGO) authentication to work in HTTP you
+ used to be required to provide a (fake) user name (this concerned both
+ curl and the lib) because the code wrongly only considered
+ authentication if there was a user name provided, as in:
-- speed-limit/time.d: mention these affect transfers in either direction
+ curl -u : --negotiate https://example.com/
- Reported-by: Ladar Levison
- Fixes #8948
- Closes #8951
+ This commit leverages the `struct auth` want member to figure out if the
+ user enabled CURLAUTH_NEGOTIATE, effectively removing the requirement of
+ setting a user name both in curl and the lib.
-- scripts/copyright.pl: fix the exclusion to not ignore man pages
+ Signed-off-by: Marin Hannache <git@mareo.fr>
+ Reported-by: Enrico Scholz
+ Fixes https://sourceforge.net/p/curl/bugs/440/
+ Fixes #1161
+ Closes #9047
- Ref: #8869
- Closes #8952
+Viktor Szakats (13 Aug 2023)
-- examples: remove fopen.c and rtsp.c
+- build: streamline non-UWP wincrypt detections
- To simplify the license situation, as they were the only files in the
- source tree using these specific BSD-3 clause licenses.
+ - with CMake, use the variable `WINDOWS_STORE` to detect an UWP build
+ and disable our non-UWP-compatible use the Windows crypto API. This
+ allows to drop two dynamic feature checks.
- For an fopen style API, we recommend instead going
- https://github.com/curl/fcurl
+ `WINDOWS_STORE` is true when invoking CMake with
+ `CMAKE_SYSTEM_NAME` == `WindowsStore`. Introduced in CMake v3.1.
- Ref: #8869
- Closes #8949
+ Ref: https://cmake.org/cmake/help/latest/variable/WINDOWS_STORE.html
-- [Wolf Vollprecht brought this change]
+ - with autotools, drop the separate feature check for `wincrypt.h`. On
+ one hand this header has been present for long (even Borland C 5.5 had
+ it from year 2000), on the other we used the check result solely to
+ enable another check for certain crypto functions. This fails anyway
+ with the header not present. We save one dynamic feature check at the
+ configure stage.
- netrc: check %USERPROFILE% as well on Windows
+ Reviewed-by: Marcel Raad
+ Closes #11657
- Closes #8855
+Nicholas Nethercote (13 Aug 2023)
-- CURLOPT_SSH_HOSTKEYDATA/FUNCTION.3: minor polish
+- docs/HYPER.md: update hyper build instructions
-- [michael musset brought this change]
+ Nightly Rust and `-Z unstable-options` are not needed.
- libssh2: add CURLOPT_SSH_HOSTKEYFUNCTION
+ The instructions here now match the hyper docs exactly:
+ https://github.com/hyperium/hyper/commit/bd7928f3dd6a8461f0f0fdf7ee0fd95c2f15
+ 6f88
- The callback set by CURLOPT_SSH_HOSTKEYFUNCTION is called to check
- wether or not the connection should continue.
+ Closes #11662
- The host key is passed in argument with a custom handle for the
- application.
+Daniel Stenberg (13 Aug 2023)
- It overrides CURLOPT_SSH_KNOWNHOSTS
+- RELEASE-NOTES: synced
- Closes #7959
+- urlapi: CURLU_PUNY2IDN - convert from punycode to IDN name
-- docs/CONTRIBUTE.md: document the 'needs-votes' concept
+ Asssisted-by: Jay Satiro
+ Closes #11655
- 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
- proven support/thumbs-ups from more community members to be considered
- for merging.
+- spellcheck: adapt to backslashed minuses
- Closes #8910
+ As the curl.1 has more backslashed minus, the cleanup sed lines xneed to
+ adapt.
-- [Evgeny Grin (Karlson2k) brought this change]
+ Adjusted some docs slighly.
- digest: tolerate missing "realm"
+ Follow-up to 439ff2052e
- Server headers may not define "realm", avoid NULL pointer dereference
- in such cases.
+ Closes #11663
- Closes #8912
+- gen: escape more minus
-- [Evgeny Grin (Karlson2k) brought this change]
+ Detected since it was still hard to search for option names using dashes
+ in the middle in the man page.
- digest: added detection of more syntax error in server headers
+ Closes #11660
- Invalid headers should not be processed otherwise they may create
- a security risk.
+- cookie-jar.d: enphasize that this option is ONLY writing cookies
- Closes #8912
+ Reported-by: Dan Jacobson
+ Tweaked-by: Jay Satiro
+ Ref: #11642
+ Closes #11661
-- [Evgeny Grin (Karlson2k) brought this change]
+Nicholas Nethercote (11 Aug 2023)
- digest: unquote realm and nonce before processing
+- docs/HYPER.md: document a workaround for a link error
- RFC 7616 (and 2617) requires values to be "unquoted" before used for
- digest calculations. The only place where unquoting can be done
- correctly is header parsing function (realm="DOMAIN\\host" and
- realm=DOMAN\\host are different realms).
+ Closes #11653
- This commit adds unquoting (de-escaping) of all values during header
- parsing and quoting of the values during header forming. This approach
- should be most straightforward and easy to read/maintain as all values
- are processed in the same way as required by RFC.
+Jay Satiro (11 Aug 2023)
- Closes #8912
+- schannel: verify hostname independent of verify cert
-- headers: handle unfold of space-cleansed headers
+ Prior to this change when CURLOPT_SSL_VERIFYPEER (verifypeer) was off
+ and CURLOPT_SSL_VERIFYHOST (verifyhost) was on we did not verify the
+ hostname in schannel code.
- Detected by OSS-fuzz
+ This fixes KNOWN_BUG 2.8 "Schannel disable CURLOPT_SSL_VERIFYPEER and
+ verify hostname". We discussed a fix several years ago in #3285 but it
+ went stale.
- Bug: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=47767
+ Assisted-by: Daniel Stenberg
- Updated test 1274
+ Bug: https://curl.haxx.se/mail/lib-2018-10/0113.html
+ Reported-by: Martin Galvan
- Closes #8947
+ Ref: https://github.com/curl/curl/pull/3285
-- lib: make more protocol specific struct fields #ifdefed
+ Fixes https://github.com/curl/curl/issues/3284
+ Closes https://github.com/curl/curl/pull/10056
- ... so that they don't take up space if the protocols are disabled in
- the build.
+Daniel Stenberg (11 Aug 2023)
- Closes #8944
+- curl_quiche: remove superfluous NULL check
-- DISABLED: disable 1021 for hyper again
+ 'stream' is always non-NULL at this point
- due to flakiness in the CI builds
+ Pointed out by Coverity
-- urldata: store tcp_keepidle and tcp_keepintvl as ints
+ Closes #11656
- They can't be set larger than INT_MAX in the setsocket API calls.
+- curl/urlapi.h: tiny typo
- Also document the max values in their respective man pages.
+- github/labeler: make HYPER.md set Hyper and not TLS
- Closes #8940
+- docs/cmdline-opts/gen.pl: hide "added in" before 7.50.0
-- urldata: reduce size of a few struct fields
+ 7.50.0 shipped on Jul 21 2016, over seven years ago. We no longer need
+ to specify version changes for earlier releases in the generated output.
- When the values are never larger than 32 bit, ints are better than longs.
+ This ups the limit from the previous 7.30.0 (Apr 12 2013)
- Closes #8940
+ This hides roughly 35 "added in" mentions.
-- urldata: remove three unused booleans from struct UserDefined
+ Closes #11651
- - is_fwrite_set
- - free_referer
- - strip_path_slash
+Jay Satiro (10 Aug 2023)
- Closes #8940
+- bug_report: require reporters to specify curl and os versions
-- remote-name.d: mention --output-dir
+ - Change curl version and os sections from single-line input to
+ multi-line textarea.
- plus add two see-alsos
+ - Require curl version and os sections to be filled out before report
+ can be submitted.
- Closes #8945
+ Closes https://github.com/curl/curl/pull/11636
-Jay Satiro (1 Jun 2022)
-- configure: skip libidn2 detection when winidn is used
+Daniel Stenberg (9 Aug 2023)
- Prior to this change --with-winidn could be overridden by libidn2
- detection.
+- gen.pl: replace all single quotes with aq
- Closes https://github.com/curl/curl/pull/8934
+ - this prevents man from using a unicode sequence for them
+ - which then allows search to work properly
-Daniel Stenberg (31 May 2022)
-- CURLOPT_FILETIME.3: fix the protocols this works with
+ Closes #11645
-- test681: verify --no-remote-name
+Viktor Szakats (9 Aug 2023)
- Follow-up to 83ee5c428d960 (from #8931)
+- cmake: fix to use variable for the curl namespace
- Closes #8942
+ Replace (wrong) literal with a variable to specify the curl
+ namespace.
-- [Tatsuhiro Tsujikawa brought this change]
+ Follow-up to 1199308dbc902c52be67fc805c72dd2582520d30 #11505
- ngtcp2: enable Linux GSO
+ Reported-by: balikalina on Github
+ Fixes https://github.com/curl/curl/commit/1199308dbc902c52be67fc805c72dd25825
+ 20d30#r123923098
+ Closes #11629
- Enable Linux GSO in ngtcp2 QUIC. In order to recover from the
- EAGAIN/EWOULDBLOCK by sendmsg with multiple packets in one GSO write,
- packet buffer is now held by struct quicsocket. GSO write might fail in
- runtime depending on NIC. Disable GSO if sendmsg returns EIO.
+- cmake: allow `SHARE_LIB_OBJECT=ON` on all platforms
- Closes #8909
+ 2ebc74c36a19a1700af394c16855ce144d9878e3 #11546 introduced sharing
+ libcurl objects for shared and static targets.
-- CURLOPT_PORT.3: We discourage using this option
+ The above automatically enabled for Windows builds, with an option to
+ disable with `SHARE_LIB_OBJECT=OFF`.
- Closes #8941
+ This patch extend this feature to all platforms as a manual option.
+ You can enable it by setting `SHARE_LIB_OBJECT=ON`. Then shared objects
+ are built in PIC mode, meaning the static lib will also have PIC code.
+
+ [EXPERIMENTAL]
+
+ Closes #11627
+
+- cmake: assume `wldap32` availability on Windows
+
+ This system library first shipped with Windows ME, available as an extra
+ install for some older releases (according to [1]). The import library
+ was present already in old MinGW 3.4.2 (year 2007).
+
+ Drop the feature check and its associated `HAVE_WLDAP32` variable.
+
+ To manually disable `wldap32`, you can use the `USE_WIN32_LDAP=OFF`
+ CMake option, like before.
+
+ [1]: https://dlcdn.apache.org/httpd/binaries/win32/LEGACY.html
+
+ Reviewed-by: Jay Satiro
+ Closes #11624
+
+Daniel Stenberg (9 Aug 2023)
+
+- page-header: move up a URL paragraph from GLOBBING to URL
+
+- variable.d: output the function names table style
+
+ Also correct the url function name in the header
+
+ Closes #11641
+
+- haproxy-clientip.d: remove backticks
+
+ This is not markdown
+
+ Follow-up to 0a75964d0d94a4
+
+ Closes #11639
- RELEASE-NOTES: synced
-- headers_push: error out if a folded header has no previous header
+- gen.pl: escape all dashes (ascii minus) to avoid unicode hyphens
- As that would indicate an illegal header. The fuzzer reached the assert
- in unfold_value() proving that this case can happen.
+ Reported-by: FC Stegerman
+ Fixes #11635
+ Closes #11637
- Follow-up to c9b60f005358a364
+- cmdline-opts/page-header: reorder, clean up
- Closes #8939
+ - removed some unnecessary blurb to focus
+ - moved up the more important URL details
+ - put "globbing" into its own subtitle and moved down a little
+ - mention the online man page in the version section
-- [Boris Verkhovskiy brought this change]
+ Closes #11638
- curl: re-enable --no-remote-name
+- c-hyper: adjust the hyper to curlcode conversion
- Closes #8931
+ Closes #11621
-- test680: require 'http' since it uses such a URL
+- test2306: make it use a persistent connection
- Follow-up to d1b376c03524
+ + enable verbose already from the start
-- CURLOPT_NETRC.3: document the .netrc file format
+ Closes #11621
-- test680: verify rejection of malformatted .netrc quoted password
+eppesuig (8 Aug 2023)
-- test679: verify netrc quoted string
+- list-only.d: mention SFTP as supported protocol
-- netrc: support quoted strings
+ Closes #11628
- The .netrc parser now accepts strings within double-quotes in order to
- deal with for example passwords containing white space - which
- previously was not possible.
+Daniel Stenberg (8 Aug 2023)
- A password that starts with a double-quote also ends with one, and
- double-quotes themselves are escaped with backslashes, like \". It also
- supports \n, \r and \t for newline, carriage return and tabs
- respectively.
+- request.d: use .TP for protocol "labels"
- If the password does not start with a double quote, it will end at first
- white space and no escaping is performed.
+ To render the section nicer in man page.
- WARNING: this change is not entirely backwards compatible. If anyone
- previously used a double-quote as the first letter of their password,
- the parser will now get it differently compared to before. This is
- highly unfortunate but hard to avoid.
+ Closes #11630
- Reported-by: ImpatientHippo on GitHub
- Fixes #8908
- Closes #8937
+- cf-haproxy: make CURLOPT_HAPROXY_CLIENT_IP set the *source* IP
-- curl_getdate.3: document that some illegal dates pass through
+ ... as documented.
- Closes #8938
+ Update test 3201 and 3202 accordingly.
-- CI: remove configure --enable-headers-api flags
+ Reported-by: Markus Sommer
+ Fixes #11619
+ Closes #11626
-- headers api: remove EXPERIMENTAL tag
+- page-footer: QLOGDIR works with ngtcp2 and quiche
- Closes #8900
+ It previously said "both" backends which is confusing as we currently
+ have three...
-Daniel Gustafsson (30 May 2022)
-- cookies: fix documentation comment
+ Closes #11631
- Commit 4073cd83b2 added the noexpire parameter to Curl_cookie_add but
- missed updating the documentation comment at the head of the file.
+Stefan Eissing (8 Aug 2023)
-Daniel Stenberg (30 May 2022)
-- [Marc Hoersken brought this change]
+- http3: quiche, handshake optimization, trace cleanup
- tests/data/test1940: use binary mode for expected stdout
+ - load x509 store after clienthello
+ - cleanup of tracing
- The generated stdout data is written in binary mode with [LF]
- line endings, therefore we also need to do a binary comparison.
+ Closes #11618
- Assisted-by: Jay Satiro
- Assisted-by: Daniel Stenberg
+Daniel Stenberg (8 Aug 2023)
- Follow up to c9b60f005358a364cbcddbebd8d12593acffdd84
- Fixes #8920
- Closes #8936
+- ngtcp2: remove dead code
-- CURLINFO_CAINFO/PATH.3: clarify the multiple TLS situation
+ 'result' is always zero (CURLE_OK) at this point
- Spell out the multi-TLS situation.
+ Detected by Coverity
- Reported-by: Dan Fandrich
- Fixes #8926
- Closes #8932
+ Closes #11622
-Jay Satiro (28 May 2022)
-- [JustAnotherArchivist brought this change]
+Viktor Szakats (8 Aug 2023)
- tool_getparam: fix --parallel-max maximum value constraint
+- openssl: auto-detect `SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED`
- - Clamp --parallel-max to MAX_PARALLEL (300) instead of resetting to
- default value.
+ OpenSSL 1.1.1 defines this macro, but no ealier version, or any of the
+ popular forks (yet). Use the macro itself to detect its presence,
+ replacing the hard-wired fork-specific conditions.
- Previously, --parallel-max 300 would use 300 concurrent transfers, but
- --parallel-max 301 would unexpectedly use only 50. This change clamps
- higher values to the maximum (ie --parallel-max 301 would use 300).
+ This way the feature will enable automatically when forks implement it,
+ while also shorter and possibly requiring less future maintenance.
- Closes https://github.com/curl/curl/pull/8930
+ Follow-up to 94241a9e78397a2aaf89a213e6ada61e7de7ee02 #6721
-Daniel Stenberg (27 May 2022)
-- curl.1: add a few see also --tls-max
+ Reviewed-by: Jay Satiro
+ Closes #11617
- Closes #8929
+- openssl: use `SSL_CTX_set_ciphersuites` with LibreSSL 3.4.1
-Viktor Szakats (26 May 2022)
-- cmake: do not add libcurl.rc to the static libcurl library
+ LibreSSL 3.4.1 (2021-10-14) added support for
+ `SSL_CTX_set_ciphersuites`.
- Fixes: https://github.com/curl/curl/pull/8918#issuecomment-1138263855
+ Ref: https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-3.4.1-relnotes.txt
- Reviewed-By: Karlson2k@users.noreply.github.com
- Closes #8923
+ Reviewed-by: Jay Satiro
+ Closes #11616
-- cmake: support adding a suffix to the OS value
+- openssl: use `SSL_CTX_set_keylog_callback` with LibreSSL 3.5.0
- CMake automatically uses the `CMAKE_SYSTEM_NAME` value to fill the OS
- string appearing in the --version output after the curl version number,
- for example:
+ LibreSSL 3.5.0 (2022-02-24) added support for
+ `SSL_CTX_set_keylog_callback`.
- 'curl 7.83.1 (Windows)'
+ Ref: https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-3.5.0-relnotes.txt
- This patchs adds the ability to pass a suffix that is appended to this
- value. It's useful to add CPU info or other platform details,
- for example:
+ Reviewed-by: Jay Satiro
+ Closes #11615
+
+- cmake: drop `HAVE_LIBWINMM` and `HAVE_LIBWS2_32` feature checks
- 'curl 7.83.1 (Windows-x64)'
+ - `HAVE_LIBWINMM` was detected but unused. The `winmm` system library is
+ also not used by curl, but it is by its optional dependency `librtmp`.
+ Change the logic to always add `winmm` when `USE_LIBRTMP` is set. This
+ library has been available since the early days of Windows.
- Closes #8919
+ - `HAVE_LIBWS2_32` detected `ws2_32` lib on Windows. This lib is present
+ since Windows 95 OSR2 (AFAIR). Winsock1 already wasn't supported and
+ other existing logic already assumed this lib being present, so delete
+ the check and replace the detection variable with `WIN32` and always
+ add `ws2_32` on Windows.
-- cmake: enable curl.rc for all Windows targets
+ Closes #11612
- Before this patch, it was only enabled for MSVC. This syncs this
- configuration with libcurl.rc, which was already included with
- every Windows compiler.
+Daniel Gustafsson (8 Aug 2023)
- Closes #8918
+- crypto: ensure crypto initialization works
-- cmake: fix detecting libidn2
+ Make sure that context initialization during hash setup works to avoid
+ going forward with the risk of a null pointer dereference.
- Without this patch, libidn2 detection doesn't even seem to be
- attempted. With this patch, cmake can be configured to pick it
- up and enable it. Necessary configuration remains manual and
- differs from most other dependencies.
+ Reported-by: Philippe Antoine on HackerOne
+ Assisted-by: Jay Satiro
+ Assisted-by: Daniel Stenberg
- If you are aware of a better fix, we're glad hearing about it
- in a new Issue.
+ Closes #11614
- Closes #8917
+Viktor Szakats (7 Aug 2023)
-- version: allow stricmp() for sorting the feature list
+- openssl: switch to modern init for LibreSSL 2.7.0+
- In CMakeLists.txt there is an attempt to detect `stricmp()`, and in
- certain cases, this attempt is the only successful one to detect a
- case-insensitive comparison function. `HAVE_STRICMP` is defined as
- a result, but this macro wasn't used anywhere in the source. This
- patch makes use of it as an alternative when alpha-sorting the
- `--version` feature list.
+ LibreSSL 2.7.0 (2018-03-21) introduced automatic initialization,
+ `OPENSSL_init_ssl()` function and deprecated the old, manual init
+ method, as seen in OpenSSL 1.1.0. Switch to the modern method when
+ available.
+
+ Ref: https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.7.0-relnotes.txt
Reviewed-by: Daniel Stenberg
- Closes #8916
+ Closes #11611
-Daniel Stenberg (25 May 2022)
-- DISABLED: add six tests that fail with hyper
+Daniel Stenberg (7 Aug 2023)
- 1117 1274 1940 1941 1942 1943
+- gskit: remove
-- c-hyper: mark status line as status for Curl_client_write()
+ We remove support for building curl with gskit.
- To make sure the headers API can filter it out as not a regular header.
+ - This is a niche TLS library, only running on some IBM systems
+ - no regular curl contributors use this backend
+ - no CI builds use or verify this backend
+ - gskit, or the curl adaption for it, lacks many modern TLS features
+ making it an inferior solution
+ - build breakages in this code take weeks or more to get detected
+ - fixing gskit code is mostly done "flying blind"
- Reported-by: Gisle Vanem
- Fixes #8894
- Closes #8914
+ This removal has been advertized in DEPRECATED in Jan 2, 2023 and it has
+ been mentioned on the curl-library mailing list.
-Marc Hoersken (25 May 2022)
-- tests/data/test1501: kill ftp server after slow LIST response
+ It could be brought back, this is not a ban. Given proper effort and
+ will, gskit support is welcome back into the curl TLS backend family.
- This test is contributing to flakiness on the Windows CI runs.
- Killing the ftp server after the test run like other slowness
- tests already do may help resolve or reduce the flakiness.
+ Closes #11460
- Closes #8907
+- RELEASE-NOTES: synced
-Daniel Stenberg (25 May 2022)
-- headers: fix the unfold realloc to use proper new size
+Dan Fandrich (7 Aug 2023)
- Previously it didn't take the old name length into acount
+- THANKS-filter: add a name typo
- Follow-up to: c9b60f005358a364
- Closes #8913
+Stefan Eissing (7 Aug 2023)
-Marc Hoersken (25 May 2022)
-- GHA: align all install, configure and build steps again
+- http3/ngtcp2: shorten handshake, trace cleanup
- First step towards more unified build steps on GitHub Actions.
+ - shorten handshake timing by delayed x509 store load (OpenSSL)
+ as we do for HTTP/2
+ - cleanup of trace output, align with HTTP/2 output
- Closes #8873
+ Closes #11609
-- CI/azure: remove obsolete strategy for single builds
+Daniel Stenberg (7 Aug 2023)
- This shortens these CI job names on GitHub even more.
- Follow up to #8906 which also increased their timeout.
+- headers: accept leading whitespaces on first response header
- Closes #8911
+ This is a bad header fold but since the popular browsers accept this
+ violation, so does curl now. Unless built with hyper.
-- CI/azure: shorten names of Windows CI jobs
+ Add test 1473 to verify and adjust test 2306.
- Suggested-by: Daniel Stenberg
- Closes #8906
+ Reported-by: junsik on github
+ Fixes #11605
+ Closes #11607
+
+- include/curl/mprintf.h: add __attribute__ for the prototypes
+
+ - if gcc or clang is used
+ - if __STDC_VERSION__ >= 199901L, which means greater than C90
+ - if not using mingw
+ - if CURL_NO_FMT_CHECKS is not defined
+
+ Closes #11589
+
+- tests: fix bad printf format flags in test code
+
+- tests: fix header scan tools for attribute edits in mprintf.h
-Daniel Stenberg (24 May 2022)
-- http: restore header folding behavior
+- cf-socket: log successful interface bind
- Folded header lines will now get passed through like before. The headers
- API is adapted and will provide the content unfolded.
+ When the setsockopt SO_BINDTODEVICE operation succeeds, output that in
+ the verbose output.
- Added test 1274 and extended test 1940 to verify.
+ Ref: #11599
+ Closes #11608
- Reported-by: Petr Pisar
- Fixes #8844
- Closes #8899
+- CURLOPT_SSL_VERIFYPEER.3: mention it does not load CA certs when disabled
-Viktor Szakats (24 May 2022)
-- Makefile.m32: delete obsolete options, improve -On [ci skip]
+ Ref: #11457
+ Closes #11606
- - `-D_AMD64_` has not been necessary for mingw-w64 builds for a long time now.
- - `-fno-strict-aliasing` is mentioned for Intel C compiler in autotools, and
- I used this with VxWorks in another project, but otherwise this isn't
- necessary anymore as a default. If a target still needs it, it can be
- added with `CURL_CFLAG_EXTRAS=-fno-strict-aliasing`
- - bump up default optimization level to `-O3` (from `-O2`), and also rearrange
- option order so the default can now be overridden via
- `CURL_CFLAG_EXTRAS`.
- - delete `-g` (generate debug info) from `CFLAGS` and `-s` from `LDFLAGS`
- (strip debug info). They were working against each other. Now, if someone
- needs debug info, it can be enabled via `CURL_CFLAG_EXTRAS=-g`
+- CURLOPT_SSL_VERIFYPEER.3: add two more see also options
- Closes #8904
+ CURLINFO_CAINFO and CURLINFO_CAPATH
-Daniel Gustafsson (24 May 2022)
-- ntlm: fix one more hostname test fallout
+ Closes #11603
- This fixup was missed in commit 5a41abef6dca19.
+- KNOWN_BUGS: aws-sigv4 does not behave well with AWS VPC Lattice
- Closes: #8901
- Reviewed-by: Daniel Stenberg <daniel@haxx.se>
+ Closes #11007
-- doh: remove UNITTEST macro definition
+Graham Campbell (6 Aug 2023)
- The UNITTEST macro is defined by curl_setup.h so there is no use in
- carry a local copy of the logic.
+- CI: use openssl 3.0.10+quic, nghttp3 0.14.0, ngtcp2 0.18.0
- Closes: #8902
- Reviewed-by: Daniel Stenberg <daniel@haxx.se>
+ Closes #11585
-Daniel Stenberg (24 May 2022)
-- cookie: fix false positive "potentially uninitialized local variable"
+Daniel Stenberg (6 Aug 2023)
- Reviewed-by: Daniel Gustafsson
- Closes #8903
+- TODO: add *5* entries for aws-sigv4
-- curl: add --rate to set max request rate per time unit
+ Closes #7559
+ Closes #8107
+ Closes #8810
+ Closes #9717
+ Closes #10129
- --rate "12/m" - for 12 per minute or
- --rate "5/h" - for 5 per hour
+- TODO: LDAP Certificate-Based Authentication
- Removed from TODO
+ Closes #9641
- Closes #8671
+Stefan Eissing (6 Aug 2023)
-- [Jay Satiro brought this change]
+- http2: cleanup trace messages
- max-time.d: clarify max-time sets max transfer time
+ - more compact format with bracketed stream id
+ - all frames traced in and out
- Prior to this change the doc said --max-time set the maximum time of the
- 'whole operation' which is not accurate. The option maps to
- CURLOPT_TIMEOUT_MS which sets maximum transfer time.
+ Closes #11592
- For example, the maximum time on a transfer is reset if the transfer is
- retried (--retry).
+Daniel Stenberg (6 Aug 2023)
- Reported-by: Nuru@users.noreply.github.com
+- tests/tftpd+mqttd: make variables static to silence picky warnings
- Fixes https://github.com/curl/curl/issues/8877
- Closes #8879
+ Closes #11594
-- GHA/hyper: enable debug in the build
+- docs/cmdline: remove repeated working for negotiate + ntlm
-- hyper: use 'alt-used'
+ The extra wording is added automatically by the gen.pl tool
- Makes test 412+413 work
+ Closes #11597
- Closes #8898
+- docs/cmdline: add small "warning" to verbose options
+
+ "Note that verbose output of curl activities and network traffic might
+ contain sensitive data, including user names, credentials or secret data
+ content. Be aware and be careful when sharing trace logs with others."
+
+ Closes #11596
- RELEASE-NOTES: synced
-- CURLINFO_CAPATH/CAINFO: get the default CA paths from libcurl
+- pingpong: don't use *bump_headersize
- Closes #8888
+ We use that for HTTP(S) only.
-- links: update dead links
+ Follow-up to 3ee79c1674fd6
- The wiki pages are gone, remove and link to more long-living docs.
+ Closes #11590
- Closes #8897
+- urldata: remove spurious parenthesis to unbreak no-proxy build
-- ntlm: (void) typecast msnprintf() where we ignore return code
+ Follow-up to e12b39e13382
- Follow-up to 5a41abef6, to please Coverity
+ Closes #11591
-Daniel Gustafsson (22 May 2022)
-- ntlm: copy NTLM_HOSTNAME to host buffer
+- easy: don't call Curl_trc_opt() in disabled-verbose builds
- Commit 709ae2454f43 added a fake hostname to avoid leaking the local
- hostname, but omitted copying it to the host buffer. Fix by copying
- and adjust the test fallout.
+ Follow-up to e12b39e133822c6a0
- Closes: #8895
- Fixes: #8893
- Reported-by: Patrick Monnerat <patrick@monnerat.net>
- Reviewed-by: Daniel Stenberg <daniel@haxx.se>
+ Closes #11588
-- configure: use the SED value to invoke sed
+- http: use %u for printfing int
- Rather than assuming sed in PATH, use the resolved $SED variable
- like in all other invocations of sed in configure.
+ Follow-up to 3ee79c1674fd6f99e8efca5
- Closes: #8891
- Reviewed-by: Daniel Stenberg <daniel@haxx.se>
- Reviewed-by: Marcel Raad <Marcel.Raad@teamviewer.com>
+ Closes #11587
-Daniel Stenberg (20 May 2022)
-- [Tatsuhiro Tsujikawa brought this change]
+Goro FUJI (3 Aug 2023)
- ngtcp2: Allow curl to send larger UDP datagrams
+- vquic: show stringified messages for errno
- Allow curl to send larger UDP datagram if Path MTU Discovery finds the
- availability of larger path MTU. To make it work and not to send
- fragmented packet, we need to set DF bit. That makes send(2) fail with
- EMSGSIZE if UDP datagram is too large. In that case, just let it be
- lost. This patch enables DF bit for Linux only.
+ Closes #11584
- Closes #8883
+Stefan Eissing (3 Aug 2023)
-- libcurl-security.3: add "Secrets in memory"
+- trace: make tracing available in non-debug builds
- Closes #8881
+ Add --trace-config to curl
-- tests: update NTLM tests to use new host name
+ Add curl_global_trace() to libcurl
- Also drop the debug requirement, remove the setenv sections, remove
- prechecks and add NTLM to the top keywords.
+ Closes #11421
- Closes #8889
+Daniel Stenberg (3 Aug 2023)
-- ntlm: provide a fixed fake host name
+- TODO: remove "Support intermediate & root pinning for PINNEDPUBLICKEY"
- The NTLM protocol includes providing the local host name, but apparently
- other implementations already provide a fixed fake name instead to avoid
- leaking the real local name.
+ See also https://github.com/curl/curl/pull/7507
- The exact name used is 'WORKSTATION', because Firefox uses that.
+- TODO: add "WebSocket read callback"
- The change is written to allow someone to "back-pedal" fairly easy in
- case of need.
+ remove "Upgrade to websockets" as we already have this
- Reported-by: Carlo Alberto
- Fixes #8859
- Closes #8889
+ Closes #11402
-Daniel Gustafsson (20 May 2022)
-- KNOWN_BUGS: fix typo in problem description
+- test497: verify rejecting too large incoming headers
- s/TSL/TLS/
+- http: return error when receiving too large header set
-- FEATURES: remove yassl as TLS library for NTLM
+ To avoid abuse. The limit is set to 300 KB for the accumulated size of
+ all received HTTP headers for a single response. Incomplete research
+ suggests that Chrome uses a 256-300 KB limit, while Firefox allows up to
+ 1MB.
- yassl was added in commit 9d904ee41b880b but is no longer available
- and is thus not a library to use for NTLM. This aligns the FEATURES
- doc with the FAQ.
+ Closes #11582
- Closes: #8886
- Reviewed-by: Daniel Stenberg <daniel@haxx.se>
+Stefan Eissing (3 Aug 2023)
-- FEATURES: reorder footnotes
+- http2: upgrade tests and add fix for non-existing stream
- The empty left-behind footnote confused the website rendering into
- creating a nested emoty list, making the resulting page look quite
- odd. Remove and re-order the remaining ones to avoid a gap in the
- sequence.
+ - check in h2 filter recv that stream actually exists
+ and return error if not
+ - add test for parallel, extreme h2 upgrades that fail if
+ connections get reused before fully switched
+ - add h2 upgrade upload test just for completeness
- Closes: #8886
- Reviewed-by: Daniel Stenberg <daniel@haxx.se>
+ Closes #11563
-- FAQ: remove opinionated sentence on NTLM
+Viktor Szakats (3 Aug 2023)
- curl is a tool that support many different things, and it doesn't
- really seem like our job to tell other what to use (as they might
- not have much say in the matter even). Also tidy up wording.
+- tests: ensure `libcurl.def` contains all exports
- Closes: #8886
- Reviewed-by: Daniel Stenberg <daniel@haxx.se>
+ Add `test1279` to verify that `libcurl.def` lists all exported API
+ functions found in libcurl headers.
-Viktor Szakats (20 May 2022)
-- log2changes: do not indent empty lines [ci skip]
+ Also:
- This will omit two spaces of indentation from lines with no content,
- thus avoiding 'spaces @ EOL'.
+ - extend test suite XML `stdout` tag with the `loadfile` attribute.
- Reviewed-by: Daniel Stenberg <daniel@haxx.se>
- Closes #8887
+ - fix `tests/extern-scan.pl` and `test1135` to include websocket API.
-Daniel Stenberg (19 May 2022)
-- wolfssl: correct the failf() message when a handle can't be made
+ - use all headers (sorted) in `test1135` instead of a manual list.
- Closes #8885
+ - add options `--sort`, `--heading=` to `tests/extern-scan.pl`.
-Viktor Szakats (19 May 2022)
-- Makefile.m32: delete two obsolete OpenSSL options [ci skip]
+ - add `libcurl.def` to the auto-labeler GHA task.
- - -DOPENSSL_NO_KRB5: No longer used by OpenSSL 1.1.x, 3.x, or
- LibreSSL 3.5.x, yet it collides with the latter, which defines
- it unconditionally, resulting in this warning:
- ../../libressl/include/openssl/opensslfeatures.h:14:9: warning: 'OPENSSL_NO_KRB5' macro redefined [-Wmacro-redefined]
- It was originally added to curl in 2004.
+ Follow-up to 2ebc74c36a19a1700af394c16855ce144d9878e3
- - -DHAVE_OPENSSL_PKCS12_H: No longer used by OpenSSL 1.1.x, 3.x, or
- LibreSSL back to at least 2.5.5. Originally added in the same
- commit as the above, in 2004.
+ Closes #11570
- Closes #8884
+Daniel Stenberg (2 Aug 2023)
-Daniel Stenberg (19 May 2022)
-- RELEASE-NOTES: synced
+- url: change default value for CURLOPT_MAXREDIRS to 30
- bump to 7.84.0
+ It was previously unlimited by default, but that's not a sensible
+ default. While changing this has a remote risk of breaking an existing
+ use case, I figure it is more likely to actually save users from loops.
-- [Christian Weisgerber via curl-library brought this change]
+ Closes #11581
- Makefile.am: fix portability issues
+- lib: fix a few *printf() flag mistakes
- Commit a04f0b961333e1a19848d073d8c7db9c20b2a371 made me notice that
- there is a portability issue in curl's top-level Makefile.am.
+ Reported-by: Gisle Vanem
+ Ref: #11574
+ Closes #11579
- $< can only be used in rules that deal with .SUFFIXES. Its use
- for general prerequisites is a GNU make extension.
+Samuel Chiang (2 Aug 2023)
- $< could be replaced by $?, but I think in an autotools context,
- something like this is better:
+- openssl: make aws-lc version support OCSP
- Bug: https://curl.se/mail/lib-2022-05/0024.html
- Closes #8861
+ And bump version in CI
-- [Balakrishnan Balasubramanian brought this change]
+ Closes #11568
- socks: support unix sockets for socks proxy
+Daniel Stenberg (2 Aug 2023)
- Usage:
- curl -x "socks5h://localhost/run/tor/socks" "https://example.com"
+- tool: make the length argument an int for printf()-.* flags
- Updated runtests.pl to run a socksd server listening on unix socket
+ Closes #11578
- Added tests test1467 test1468
+- tool_operate: fix memory leak when SSL_CERT_DIR is used
- Added documentation for proxy command line option and socks proxy
- options
+ Detected by Coverity
- Closes #8668
+ Follow-up to 29bce9857a12b6cfa726a5
-- [Vincent Torri brought this change]
+ Closes #11577
- cmake: add libpsl support
+- tool/var: free memory on OOM
- Fixes #8865
- Closes #8867
+ Coverity detected this memory leak in OOM situation
-- [Tatsuhiro Tsujikawa brought this change]
+ Follow-up to 2e160c9c652504e
- ngtcp2: extend QUIC transport parameters buffer
+ Closes #11575
- Extend QUIC transport parameters buffer because 64 bytes are too
- short for the ever increasing parameters.
+Viktor Szakats (2 Aug 2023)
- Closes #8872
+- gha: bump libressl and mbedtls versions
-- [Tatsuhiro Tsujikawa brought this change]
+ Closes #11573
- ngtcp2: handle error from ngtcp2_conn_submit_crypto_data
+Jay Satiro (2 Aug 2023)
- Closes #8871
+- schannel: fix user-set legacy algorithms in Windows 10 & 11
-- [Tatsuhiro Tsujikawa brought this change]
+ - If the user set a legacy algorithm list (CURLOPT_SSL_CIPHER_LIST) then
+ use the SCHANNEL_CRED legacy structure to pass the list to Schannel.
- ngtcp2: send appropriate connection close error code
+ - If the user set both a legacy algorithm list and a TLS 1.3 cipher list
+ then abort.
- Closes #8870
+ Although MS doesn't document it, Schannel will not negotiate TLS 1.3
+ when SCHANNEL_CRED is used. That means setting a legacy algorithm list
+ limits the user to earlier versions of TLS.
-- test1561: adjusted for the cookie fix
+ Prior to this change, since 8beff435 (precedes 7.85.0), libcurl would
+ ignore legacy algorithms in Windows 10 1809 and later.
-- test414: verify secure cookie domain overlay
+ Reported-by: zhihaoy@users.noreply.github.com
-- [Harry Sintonen brought this change]
+ Fixes https://github.com/curl/curl/pull/10741
+ Closes https://github.com/curl/curl/pull/10746
- cookie: address secure domain overlay
+Daniel Stenberg (2 Aug 2023)
- Bug: https://hackerone.com/reports/1560324
- Co-authored-by: Daniel Stenberg
- Closes #8840
+- variable.d: setting a variable again overwrites it
-- [Frank Gevaerts brought this change]
+ Reported-by: Niall McGee
+ Bug: https://twitter.com/niallmcgee/status/1686523075423322113
+ Closes #11571
- strcase: some optimisations
+Jay Satiro (2 Aug 2023)
- Lookup tables for toupper() and tolower() make Curl_strcasecompare()
- about 1.5 times faster. Reorganising Curl_strcasecompare() to fully exit
- early then also allows simplifying the check at the end, for another
- 15%. In total, the changes make Curl_strcasecompare() around 1.6 to 1.7
- times faster.
+- CURLOPT_PROXY_SSL_OPTIONS.3: sync formatting
- Note that these optimisation assume ASCII. The original
- Curl_raw_toupper() and raw_tolower() look like they already made that
- assumption.
+ - Re-wrap CURLSSLOPT_ALLOW_BEAST description.
- Closes #8875
+Daniel Stenberg (2 Aug 2023)
-- BUG-BOUNTY.md: mention the audit exception
+- RELEASE-NOTES: synced
- Dedicated - paid for - security audits that are performed in
- collaboration with curl developers are not eligible for bounties.
+- resolve: use PF_INET6 family lookups when CURL_IPRESOLVE_V6 is set
- (plus I changed the sub-titles to use ## instead of # in the markdown)
+ Previously it would always do PF_UNSPEC if CURL_IPRESOLVE_V4 is not
+ used, thus unnecessarily asking for addresses that will not be used.
- Closes #8880
+ Reported-by: Joseph Tharayil
+ Fixes #11564
+ Closes #11565
-- lib/vssh/wolfssh.h: removed
+- docs: link to the website versions instead of markdowns
- Unused header file
+ ... to make the links work when the markdown is converted to webpages on
+ https://curl.se
- Reported-by: Illarion Taev
- Fixes #8863
- Closes #8866
+ Reported-by: Maurício Meneghini Fauth
+ Fixes https://github.com/curl/curl-www/issues/272
+ Closes #11569
-- [Elms brought this change]
+Viktor Szakats (1 Aug 2023)
- wolfSSL: explicitly use compatibility layer
+- cmake: cache more config and delete unused ones
- This change removes adding an include `$prefix/wolfssl` or similar to
- allow for openssl include aliasing. Include paths of `wolfssl/openssl/`
- are used to explicitly use wolfSSL includes. This fixes cmake builds as
- well as avoiding potentially using openSSL headers since include path
- order is not guaranteed.
+ - cache more Windows config results for faster initialization.
- Closes #8864
+ - delete unused config macros `HAVE_SYS_UTSNAME_H`, `HAVE_SSL_H`.
-- curl: deprecate --random-file and --egd-file
+ - delete dead references to `sys/utsname.h`.
- As libcurl no longer has any functionality for them, the tool now does
- nothing with them.
+ Closes #11551
- Closes #8670
+- egd: delete feature detection and related source code
-- opts: deprecate RANDOM_FILE and EGDSOCKET
+ EGD is Entropy Gathering Daemon, a socket-based entropy source supported
+ by pre-OpenSSL v1.1 versions and now deprecated. curl also deprecated it
+ a while ago.
- These two options were only ever used for the OpenSSL backend for
- versions before 1.1.0. They were never used for other backends and they
- are not used with recent OpenSSL versions. They were never used much by
- applications.
+ Its detection in CMake was broken all along because OpenSSL libs were
+ not linked at the point of feature check.
- The defines RANDOM_FILE and EGD_SOCKET can still be set at build-time
- for ancient EOL OpenSSL versions.
+ Delete detection from both cmake and autotools, along with the related
+ source snippet, and the `--with-egd-socket=` `./configure` option.
- Closes #8670
+ Closes #11556
-- [Harry Sintonen brought this change]
+Stefan Eissing (1 Aug 2023)
- bindlocal: don't use a random port if port number would wrap
+- tests: fix h3 server check and parallel instances
- Earlier if CURLOPT_LOCALPORT + CURLOPT_LOCALPORTRANGE would go past port
- 65535 the code would fall back to random port rather than giving up.
+ - fix check for availability of nghttpx server
+ - add `tcp` frontend config for same port as quic, as
+ without this, port 3000 is bound which clashes for parallel
+ testing
- Closes #8862
+ Closes #11553
-Daniel Gustafsson (16 May 2022)
-- transfer: Fix potential NULL pointer dereference
+Daniel Stenberg (1 Aug 2023)
- Commit 0ef54abf5208 accidentally used the conn variable before the
- assertion for it being NULL. Fix by moving the assignment which use
- conn to after the assertion.
+- docs/cmdline-opts: spellfixes, typos and polish
- Closes: #8857
- Reviewed-by: Daniel Stenberg <daniel@haxx.se>
+ To make them accepted by the spell checker
-- docs: clarify data replacement policy for MIME API
+ Closes #11562
- The API documentation for the MIME functions specify that the parts
- can be set twice, with the last call winning. While true, the user
- can set the parts n times for n > 2, reword to specify multiple API
- calls instead.
+- CI/spellcheck: build curl.1 and spellcheck it
- Closes: #8860
- Reviewed-by: Daniel Stenberg <daniel@haxx.se>
+ Added acceptable words
-Daniel Stenberg (16 May 2022)
-- [vvb2060 on github brought this change]
+ Closes #11562
- ngtcp2: support boringssl crypto backend
+Alexander Jaeger (1 Aug 2023)
- Closes #8789
+- misc: fix various typos
-- [Tatsuhiro Tsujikawa brought this change]
+ Closes #11561
- quic: add Curl_quic_idle
+Daniel Stenberg (1 Aug 2023)
- Add Curl_quic_idle which is called when no HTTP level read or write is
- performed. It is a good place to handle timer expiry for QUIC transport
- (.e.g, retransmission).
+- http2: avoid too early connection re-use/multiplexing
- Closes #8698
+ HTTP/1 connections that are upgraded to HTTP/2 should not be picked up
+ for reuse and multiplexing by other handles until the 101 switching
+ process is completed.
-- [Gregor Jasny brought this change]
+ Lots-of-debgging-by: Stefan Eissing
+ Reported-by: Richard W.M. Jones
+ Bug: https://curl.se/mail/lib-2023-07/0045.html
+ Closes #11557
- mprintf: ignore clang non-literal format string
+- Revert "KNOWN_BUGS: build for iOS simulator on macOS 13.2 with Xcode 14"
- Closes #8740
+ This reverts commit 2e8a3d7cb73c85a9aa151e263315f8a496dbb9d4.
-- [Nick Zitzmann brought this change]
+ It's a user error for supplying incomplete information to the build system.
- sectransp: check for a function defined when __BLOCKS__ is undefined
+ Reported-by: Ryan Schmidt
+ Ref: https://github.com/curl/curl/issues/11215#issuecomment-1658729367
- SecTrustEvaluateAsync() is defined in the macOS 10.7 SDK, but it
- requires Grand Central Dispatch to be supported by the compiler, and
- some third-party macOS compilers do not support Grand Central Dispatch.
- SecTrustCopyPublicKey() is not present in macOS 10.6, so this shouldn't
- adversely affect anything.
+Viktor Szakats (1 Aug 2023)
- Fixes #8846
- Reported-by: Egor Pugin
- Closes #8854
+- cmake: add support for single libcurl compilation pass
-Daniel Gustafsson (16 May 2022)
-- test412/413: Use version macro for User-Agent
+ Before this patch CMake builds used two separate compilation passes to
+ build the shared and static libcurl respectively. This patch allows to
+ reduce that to a single pass if the target platform and build settings
+ allow it.
- Commit 46d45ea3a incorrectly hardcoded the User-Agent in the test
- output file which breaks when curlver is updated. Shift to using
- the %VERSION macro instead.
+ This reduces CMake build times when building both static and shared
+ libcurl at the same time, making these dual builds an almost zero-cost
+ option.
- Closes: #8856
+ Enable this feature for Windows builds, where the difference between the
+ two passes was the use of `__declspec(dllexport)` attribute for exported
+ API functions for the shared builds. This patch replaces this method
+ with the use of `libcurl.def` at DLL link time.
-- macos9: remove partial support
+ Also update `Makefile.mk` to use `libcurl.def` to export libcurl API
+ symbols on Windows. This simplifies (or fixes) this build method (e.g.
+ in curl-for-win, which generated a `libcurl.def` from `.h` files using
+ an elaborate set of transformations).
- The support for compiling on Mac OS 9 hasn't been modified since 2001
- and has no active maintainer or packager, so it's time to remove it as
- it's incredibly unlikely to work. If a maintainer re-emerges it can be
- resurrected from Git history.
+ `libcurl.def` has the maintenance cost of keeping the list of public
+ libcurl API symbols up-to-date. This list seldom changes, so the cost
+ is low.
- Closes: #8836
- Reviewed-by: Daniel Stenberg <daniel@haxx.se>
+ Closes #11546
-Daniel Stenberg (16 May 2022)
-- test1635: verify --fail-with-body with --retry
+- cmake: detect `SSL_set0_wbio` in OpenSSL
- Almost a dupe of 1634
+ Present in OpenSSL 1.1.0 and BoringSSL.
+ Missing from LibreSSL 3.8.0.
- Closes #8847
+ Follow-up to f39472ea9f4f4e12cfbc0500c4580a8d52ce4a59
-- tool_operate: make sure --fail-with-body works with --retry
+ While here, also fix `RAND_egd()` detection which was broken, likely all
+ along. This feature is probably broken with CMake builds and also
+ requires a sufficiently obsolete OpenSSL version, so this part of the
+ update was not tested.
- ... in the same way --fail already does.
+ Closes #11555
- Reported-by: Jakub Bochenski
- Fixes #8845
- Closes #8847
+- cmake: fixup H2 duplicate symbols for unity builds
-- [Tatsuhiro Tsujikawa brought this change]
+ Closes #11550
- ngtcp2: Correct use of ngtcp2 and nghttp3 signed integer types
+Pablo Busse (1 Aug 2023)
- Closes #8851
+- openssl: Support async cert verify callback
-- [Tatsuhiro Tsujikawa brought this change]
+ - Update the OpenSSL connect state machine to handle
+ SSL_ERROR_WANT_RETRY_VERIFY.
- ngtcp2: Fix alert_read_func return value
+ This allows libcurl users that are using custom certificate validation
+ to suspend processing while waiting for external I/O during certificate
+ validation.
- Closes #8852
+ Closes https://github.com/curl/curl/pull/11499
-- [Harry Sintonen brought this change]
+Jay Satiro (1 Aug 2023)
- Curl_parsenetrc: don't access local pwbuf outside of scope
+- tool_cb_wrt: fix invalid unicode for windows console
- Accessing local variables outside of the scope is forbidden and
- depending on the compiler can result in the value being
- overwritten. Fixed by moving the pwbuf to be in scope.
+ - Suppress an incomplete UTF-8 sequence at the end of the buffer.
- Closes #8850
+ - Attempt to reconstruct incomplete UTF-8 sequence from prior call(s)
+ in current call.
-- RELEASE-NOTES: synced
+ Prior to this change, in Windows console UTF-8 sequences split between
+ two or more calls to the write callback would cause invalid "replacement
+ characters" U+FFFD to be printed instead of the actual Unicode
+ character. This is because in Windows only UTF-16 encoded characters are
+ printed to the console, therefore we convert the UTF-8 contents to
+ UTF-16, which cannot be done with partial UTF-8 sequences.
- and bump curlver to 7.83.2 for now (but likely to become 7.84.0 soon)
+ Reported-by: Maksim Arhipov
-- [Frazer Smith brought this change]
+ Fixes https://github.com/curl/curl/issues/9841
+ Closes https://github.com/curl/curl/pull/10890
- ci: update github actions
+Daniel Stenberg (1 Aug 2023)
- - bump actions/checkout from 2 to 3
- - bump actions/upload-artifact from 1 to 3
- - bump github/codeql-actions from 1 to 2
- - use version tag for actions/checkout
+- sectransp: prevent CFRelease() of NULL
- Closes #8843
+ When SecCertificateCopyCommonName() returns NULL, the common_name
+ pointer remains set to NULL which apparently when calling CFRelease() on
+ (sometimes?) crashes.
-- test1919: verify CURLOPT_XOAUTH2_BEARER leak fix
+ Reported-by: Guillaume Algis
+ Fixes #9194
+ Closes #11554
-- url: free old conn better on reuse
+Jay Satiro (1 Aug 2023)
- Make use of conn_free() better and avoid duplicate code.
+- vtls: clarify "ALPN: offers" message
- Reported-by: Andrea Pappacoda
- Fixes #8841
- Closes #8842
+ Before:
+ * ALPN: offers h2,http/1.1
-Jay Satiro (14 May 2022)
-- FAQ: Clarify Windows double quote usage
+ After:
+ * ALPN: curl offers h2,http/1.1
- - Windows command prompt doesn't use literal quoting via single quotes.
+ Bug: https://curl.se/mail/lib-2023-07/0041.html
+ Reported-by: Richard W.M. Jones
+ Closes #11544
- - Windows command prompt inner double quotes are escaped with a
- backslash.
+Daniel Stenberg (1 Aug 2023)
- - Windows powershell does use single quotes but curl is not a powershell
- script so the arguments may not be passed on correctly.
+- urlapi: make sure zoneid is also duplicated in curl_url_dup
- - Windows powershell inner double quotes seems can be passed to curl if
- the outer quotes are double quotes and an escape of backslash-backtick
- is used.
+ Add several curl_url_dup() tests to the general lib1560 test.
- Command prompt example:
+ Reported-by: Rutger Broekhoff
+ Bug: https://curl.se/mail/lib-2023-07/0047.html
+ Closes #11549
- ~~~
- getargs -v -d "\"a\""
+Sergey (1 Aug 2023)
- argv[0]: getargs
- argv[1]: -v
- argv[2]: -d
- argv[3]: "a"
- ~~~
+- urlapi: fix heap buffer overflow
- Ref: https://github.com/curl/curl/issues/8818
- Ref: https://gist.github.com/jay/19aba48653bd591cf4b90eb9249a302c
+ `u->path = Curl_memdup(path, pathlen + 1);` accesses bytes after the null-ter
+ minator.
- Reported-by: KotlinIsland@users.noreply.github.com
+ ```
+ ==2676==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x04d48c75 a
+ t pc 0x0112708a bp 0x006fb7e0 sp 0x006fb3c4
+ READ of size 78 at 0x04d48c75 thread T0
+ #0 0x1127089 in __asan_wrap_memcpy D:\a\_work\1\s\src\vctools\asan\llvm\c
+ ompiler-rt\lib\sanitizer_common\sanitizer_common_interceptors.inc:840
+ #1 0x1891a0e in Curl_memdup C:\actions-runner\_work\client\client\third_p
+ arty\curl\lib\strdup.c:97
+ #2 0x18db4b0 in parseurl C:\actions-runner\_work\client\client\third_part
+ y\curl\lib\urlapi.c:1297
+ #3 0x18db819 in parseurl_and_replace C:\actions-runner\_work\client\clien
+ t\third_party\curl\lib\urlapi.c:1342
+ #4 0x18d6e39 in curl_url_set C:\actions-runner\_work\client\client\third_
+ party\curl\lib\urlapi.c:1790
+ #5 0x1877d3e in parseurlandfillconn C:\actions-runner\_work\client\client
+ \third_party\curl\lib\url.c:1768
+ #6 0x1871acf in create_conn C:\actions-runner\_work\client\client\third_p
+ arty\curl\lib\url.c:3403
+ #7 0x186d8dc in Curl_connect C:\actions-runner\_work\client\client\third_
+ party\curl\lib\url.c:3888
+ #8 0x1856b78 in multi_runsingle C:\actions-runner\_work\client\client\thi
+ rd_party\curl\lib\multi.c:1982
+ #9 0x18531e3 in curl_multi_perform C:\actions-runner\_work\client\client\
+ third_party\curl\lib\multi.c:2756
+ ```
- Closes https://github.com/curl/curl/pull/8823
+ Closes #11560
-Daniel Stenberg (12 May 2022)
-- github/workflows/nss: apt update first
+Daniel Stenberg (31 Jul 2023)
- Fix "libnss3-dev_3.49.1-1ubuntu1.6_amd64.deb 404 Not Found"
+- curl: make %output{} in -w specify a file to write to
- Closes #8837
+ It can be used multiple times. Use %output{>>name} to append.
-- page-footer: mention exit code zero too
+ Add docs. Test 990 and 991 verify.
- Success (zero) is also an "exit code" worth mentioning.
+ Idea: #11400
+ Suggested-by: ed0d2b2ce19451f2
+ Closes #11416
- Closes #8833
+- RELEASE-NOTES: synced
-Daniel Gustafsson (12 May 2022)
-- gssapi: initialize gss_buffer_desc strings
+- tool: add "variable" support
- Explicitly initialize gss_buffer_desc strings such that a call to
- freeing resources will succeed even if no data has been allocated
- to it.
+ Add support for command line variables. Set variables with --variable
+ name=content or --variable name@file (where "file" can be stdin if set
+ to a single dash (-)).
- Reported-by: Jay Satiro <raysatiro@yahoo.com>
+ Variable content is 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 "\\{{".
-- gssapi: improve handling of errors from gss_display_status
+ Import an environment variable with --variable %name. It makes curl exit
+ with an error if the environment variable is not set. It can also rather
+ get a default value if the variable does not exist, using =content or
+ @file like shown above.
- In case gss_display_status() returns an error, avoid trying to add
- it to the buffer as the message may well be a NULL pointer.
+ Example: get the USER environment variable into the URL:
- Originally this fix comes from a discussion in issue #8816.
+ --variable %USER
+ --expand-url = "https://example.com/api/{{USER}}/method"
- Closes: #8832
- Reviewed-by: Jay Satiro <raysatiro@yahoo.com>
+ 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", output the contents as a JSON quoted
+ string with "json", URL encode it with "url" and base 64 encode it with
+ "b64". To apply functions to a variable expansion, add them colon
+ separated to the right side of the variable. They are then performed in
+ a left to right order.
-Jay Satiro (12 May 2022)
-- [steini2000 brought this change]
+ 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:
- http2: always debug print stream id in decimal with %u
+ --variable %HOME=/home/default
+ --expand-variable fix@{{HOME}}/.secret
+ --expand-data "{{fix:trim:url}}"
+ https://example.com/
- Prior to this change the stream id shown could be hex or decimal which
- was inconsistent and confusing.
+ Documented. Many new test cases.
- Closes https://github.com/curl/curl/pull/8808
+ Co-brainstormed-by: Emanuele Torre
+ Assisted-by: Jat Satiro
+ Closes #11346
-Kamil Dudka (11 May 2022)
-- url: remove redundant #ifdefs in allocate_conn()
+- KNOWN_BUGS: cygwin: make install installs curl-config.1 twice
- No change in behavior intended by this commit.
+ Closes #8839
-Daniel Stenberg (11 May 2022)
-- [Fabian Keil brought this change]
+- KNOWN_BUGS: build for iOS simulator on macOS 13.2 with Xcode 14
- tests 266, 116 and 1540: add a small write delay
+ Closes #11215
- This makes it more likely that the trailer is received
- seperately from the last-chunk.
+- KNOWN_BUGS: cmake outputs: no version information available
- curl doesn't seem to care about this but it makes the tests
- more useful when testing external proxies like Privoxy.
+ Closes #11158
-- [Fabian Keil brought this change]
+- KNOWN_BUGS: APOP authentication fails on POP3
- tests 1117,1238,1523: adjust writedelay servercmds
+ Closes #10073
- ... so the delays are the same now that the unit
- is in milliseconds.
+- KNOWN_BUGS: hyper is slow
-- [Fabian Keil brought this change]
+ Closes #11203
- tests/server/sws.c: change the HTTP writedelay unit to milliseconds
+Patrick Monnerat (31 Jul 2023)
- This allows to use write delays for large responses without
- resulting in the test taking an unreasonable amount of time.
+- configure, cmake, lib: more form api deprecation
- In many cases delaying writes by a whole second or more isn't
- necessary for the desired effect.
+ Introduce a --enable-form-api configure option to control its inclusion
+ in builds. The condition name defined for it is CURL_DISABLE_FORM_API.
- Closes #8827
+ Form api code is dependent of MIME: configure and CMake handle this
+ dependency automatically: CMake by making it a dependent option
+ explicitly, configure by inheriting the MIME value by default and
+ rejecting explicit incompatible values.
-Daniel Gustafsson (11 May 2022)
-- aws-sigv4: fix potentional NULL pointer arithmetic
+ "form-api" is now a new hidden test feature.
- We need to check if the strchr() call returns NULL (due to missing
- char) before we use the returned value in arithmetic. There is no
- live bug here, but fixing it before it can become for hygiene.
+ Update libcurl modules to respect this option and adjust tests
+ accordingly.
- Closes: #8814
- Reviewed-by: Daniel Stenberg <daniel@haxx.se>
+ Closes #9621
-Daniel Stenberg (11 May 2022)
-- quiche: support ca-fallback
+Daniel Stenberg (31 Jul 2023)
- Follow-up to b01f3e679f4c1ea3 which added this for ngtcp2/openssl
+- mailmap: add Derzsi Dániel
- Removed from KNOWN_BUGS
+Derzsi Dániel (31 Jul 2023)
- Fixes #8696
- Closes #8830
+- wolfssl: support loading system CA certificates
-Daniel Gustafsson (11 May 2022)
-- x509asn1: mark msnprintf return as unchecked
+ Closes #11452
- We have lots of unchecked msnprintf calls, and this particular msnprintf
- call isn't more interesting than the others, but this one yields a Coverity
- warning so let's implicitly silence it. Going over the other invocations
- is probably a worthwhile project, but for now let's keep the static
- analyzers happy.
+Viktor Szakats (30 Jul 2023)
- Closes: #8831
- Reviewed-by: Daniel Stenberg <daniel@haxx.se>
+- nss: delete more NSS references
-Version 7.83.1 (11 May 2022)
+ Fix the distcheck CI failure and delete more NSS references.
-Daniel Stenberg (11 May 2022)
-- RELEASE-NOTES: synced
+ Follow-up to 7c8bae0d9c9b2dfeeb008b9a316117d7b9675175
- curl 7.83.1 release
+ Reviewed-by: Marcel Raad
+ Reviewed-by: Daniel Stenberg
+ Closes #11548
-- THANKS: added contributors from 7.83.1
+Daniel Stenberg (29 Jul 2023)
-- zuul: fix the ngtcp2-gnutls build
+- nss: remove support for this TLS library
- Add packages and tweak the configure options.
+ Closes #11459
- Use the GnuTLS 3.7.4 branch (not main).
+Ryan Schmidt (29 Jul 2023)
- Closes #8829
+- macOS: fix target detection more
-- [Tatsuhiro Tsujikawa brought this change]
+ Now SCDynamicStoreCopyProxies is called (and the required frameworks are
+ linked in) on all versions of macOS and only on macOS. Fixes crash due
+ to undefined symbol when built with the macOS 10.11 SDK or earlier.
- ngtcp2: add ca-fallback support for OpenSSL backend
+ CURL_OSX_CALL_COPYPROXIES is renamed to CURL_MACOS_CALL_COPYPROXIES and
+ is now only defined when SCDynamicStoreCopyProxies will actually be
+ called. Previously, it was defined when ENABLE_IPV6 was not defined but
+ SCDynamicStoreCopyProxies is not called in that case.
- Closes #8828
+ TARGET_OS_OSX is only defined in the macOS 10.12 SDK and later and only
+ when dynamic targets are enabled. TARGET_OS_MAC is always defined but
+ means any Mac OS or derivative including macOS, iOS, tvOS, and watchOS.
+ TARGET_OS_IPHONE means any Darwin OS other than macOS.
-- url: check SSH config match on connection reuse
+ Follow-up to c73b2f82
- CVE-2022-27782
+ Fixes #11502
+ Closes #11516
- Reported-by: Harry Sintonen
- Bug: https://curl.se/docs/CVE-2022-27782.html
- Closes #8825
+Daniel Stenberg (29 Jul 2023)
-- tls: check more TLS details for connection reuse
+- tool_operate: allow SSL_CERT_FILE and SSL_CERT_DIR
- CVE-2022-27782
+ ... used at once.
- Reported-by: Harry Sintonen
- Bug: https://curl.se/docs/CVE-2022-27782.html
- Closes #8825
+ Reported-by: Gabriel Corona
+ Fixes #11325
+ Closes #11531
-- cookies: make bad_domain() not consider a trailing dot fine
+Thomas M. DuBuisson (29 Jul 2023)
- The check for a dot in the domain must not consider a single trailing
- dot to be fine, as then TLD + trailing dot is fine and curl will accept
- setting cookies for it.
+- CI: remove Lift's configuration
- CVE-2022-27779
+ The Lift tool is being retired. Their site reads:
- Reported-by: Axel Chong
- Bug: https://curl.se/docs/CVE-2022-27779.html
- Closes #8820
+ "Sonatype Lift will be retiring on Sep 12, 2023, with its analysis
+ stopping on Aug 12, 2023."
-- test977: reproduce ability to set cookie on TLD
+ Closes #11541
- When PSL is not enabled
+Nathan Moinvaziri (29 Jul 2023)
-- scripts/contributors.sh: correct the copyright range
+- Revert "schannel: reverse the order of certinfo insertions"
-- docs/RELEASE-PROCEDURE.md: refreshed and adjsuted the release dates
+ This reverts commit 8986df802db9b5338d9d50a54232ebae4dbcf6dd.
-- test379: verify --remove-on-error with --no-clobber
+ Windows does not guarantee a particular certificate ordering, even
+ though TLS may have its own ordering/relationship guarantees. Recent
+ versions of Windows 11 reversed the ordering of ceritifcates returned by
+ CertEnumCertificatesInStore, therefore this commit no longer works as
+ initially intended. libcurl makes no guarantees about certificate
+ ordering if the operating system can't.
-- post_per_transfer: remove the updated file name
+ Ref: https://github.com/curl/curl/issues/9706
- When --remove-on-error is used with --no-clobber, it might have an
- updated file name to remove.
+ Closes https://github.com/curl/curl/pull/11536
- Bug: https://curl.se/docs/CVE-2022-27778.html
+wangzhikun (29 Jul 2023)
- CVE-2022-27778
+- winbuild: improve check for static zlib
- Reported-by: Harry Sintonen
+ - Check for zlib static library name zlibstatic.lib.
- Closes #8824
+ zlib's static library has a different name depending on how it was
+ built. zlibstatic.lib is output by cmake. zlibstat.lib is output by
+ their pre-generated Visual Studio project files (in the contrib
+ directory) and defines ZLIB_WINAPI (ie it's meant to use stdcall
+ instead of cdecl if you end up exporting the zlib functions).
-- hsts: ignore trailing dots when comparing hosts names
+ Prior to this change the makefile only checked for the latter.
- CVE-2022-30115
+ Closes https://github.com/curl/curl/pull/11521
- Reported-by: Axel Chong
- Bug: https://curl.se/docs/CVE-2022-30115.html
- Closes #8821
+Daniel Stenberg (29 Jul 2023)
-- test440/441: verify HSTS with trailing dots
+- configure: use the pkg-config --libs-only-l flag for libssh2
-- libtest/lib1560: verify the host name percent decode fix
+ ... instead of --libs, as that one also returns -L flags.
-- urlapi: reject percent-decoding host name into separator bytes
+ Reported-by: Wilhelm von Thiele
+ Fixes #11538
+ Closes #11539
- CVE-2022-27780
+Viktor Szakats (29 Jul 2023)
- Reported-by: Axel Chong
- Bug: https://curl.se/docs/CVE-2022-27780.html
- Closes #8826
+- cmake: support building static and shared libcurl in one go
-- nss: return error if seemingly stuck in a cert loop
+ This patch adds the ability to build a static and shared libcurl library
+ in a single build session. It also adds an option to select which one to
+ use when building the curl executable.
- CVE-2022-27781
+ New build options:
+ - `BUILD_STATIC_LIBS`. Default: `OFF`.
+ Enabled automatically if `BUILD_SHARED_LIBS` is `OFF`.
+ - `BUILD_STATIC_CURL`. Default: `OFF`.
+ Requires `BUILD_STATIC_LIBS` enabled.
+ Enabled automatically if building static libcurl only.
+ - `STATIC_LIB_SUFFIX`. Default: empty.
+ - `IMPORT_LIB_SUFFIX`. Default: `_imp` if implib filename would collide
+ with static lib name (typically with MSVC) in Windows builds.
+ Otherwise empty.
- Reported-by: Florian Kohnhäuser
- Bug: https://curl.se/docs/CVE-2022-27781.html
- Closes #8822
+ Also:
-- test412/413: verify alt-svc with trailing dots
+ - Stop setting the `CURL_STATICLIB` macro via `curl_config.h`, and pass
+ it directly to the compiler. This also allows to delete a condition
+ from `tests/server/CMakeLists.txt`.
-- altsvc: fix host name matching for trailing dots
+ - Complete a TODO by following the logic used in autotools (also for
+ `LIBCURL_NO_SHARED`), and set `-DCURL_STATICLIB` in `Cflags:` of
+ `libcurl.pc` for _static-only_ curl builds.
- Closes #8819
+ - Convert an existing CI test to build both shared and static libcurl.
-- [Garrett Squire brought this change]
+ Closes #11505
- hyper: fix test 357
+Stefan Eissing (28 Jul 2023)
- This change fixes the hyper API such that PUT requests that receive a
- 417 response can retry without the Expect header.
+- CI/awslc: add cache for build awslc library
- Closes #8811
+ Closes #11535
-- [Harry Sintonen brought this change]
+- GHA/linux.yml: add caching
- sectransp: bail out if SSLSetPeerDomainName fails
+ Closes #11532
- Before the code would just warn about SSLSetPeerDomainName() errors.
+Daniel Stenberg (27 Jul 2023)
- Closes #8798
+- RELEASE-NOTES: synced
-- http_proxy/hyper: handle closed connections
+ Bump working version to 8.3.0
- Enable test 1021 for hyper builds.
+- url: remove infof() output for "still name resolving"
- Patched-by: Prithvi MK
- Fixes #8700
- Closes #8806
+ The message does not help and might get spewed a lot during times.
-- KNOWN_BUGS: timeout when reusing a http3 connection
+ Reported-by: yushicheng7788 on github
+ Fixes #11394
+ Closes #11529
- Closes #8764
+- KNOWN_BUGS: cygwin: "WARNING: UNPROTECTED PRIVATE KEY FILE!"
-- KNOWN_BUGS: configure --with-ca-fallback is not supported by h3
+ Closes #11244
- Closes #8696
+Stefan Eissing (27 Jul 2023)
-- [Ryan Schmidt brought this change]
+- CI: quiche updates
- Makefile: fix "make ca-firefox"
+ - remove quiche from standard `linux` workflow
+ - add mod_h2 caching to quiche workflow
+ - rename quiche to quiche-linux
+ - move version definitions into env section
- Closes #8804
+ Closes #11528
-Daniel Gustafsson (5 May 2022)
-- tests: fix markdown formatting in README
+- http2: disable asssertion blocking OSSFuzz testing
- The asterisk in the abbreviation *NIX (for UNIX/Linux) needs to be
- escaped to not mean start of italic formatting. This is consistent
- with docs/RELEASE-PROCEDURE.md.
+ - not clear how this triggers and it blocks OSSFuzz testing other
+ things. Since we handle the case with an error return, disabling the
+ assertion for now seems the best way forward.
- Closes: #8802
- Reviewed-by: Daniel Stenberg <daniel@haxx.se>
+ Fixes #11500
+ Closes #11519
-Daniel Stenberg (5 May 2022)
-- TODO: expand on "Expose tried IP addresses that failed"
+- http2: fix in h2 proxy tunnel: progress in ingress on sending
- Ref: #8794
+ - depending on what is tunneled, the proxy may never get invoked for
+ receiving data explicitly. Not progressing ingress may lead to stalls
+ due to missed WINDOW_UPDATEs.
-Daniel Gustafsson (5 May 2022)
-- [Fabian Keil brought this change]
+ CI:
+ - add a chache for building mod_h2
- tests/server: declare variable 'reqlogfile' static
+ Closes #11527
- Silences the warning:
+- CI ngtcp2+quictls: use nghttpx cache as in quiche build
- CC socksd-socksd.o
- socksd.c:143:13: warning: no previous extern declaration for
- non-static variable 'reqlogfile' [-Wmissing-variable-declarations]
- const char *reqlogfile = DEFAULT_REQFILE;
- ^
- socksd.c:143:7: note: declare 'static' if the variable is not
- intended to be used outside of this translation unit
- const char *reqlogfile = DEFAULT_REQFILE;
- ^
- 1 warning generated.
+Jay Satiro (27 Jul 2023)
+
+- bearssl: don't load CA certs when peer verification is disabled
- ... when compiling with clang 13.
+ We already do this for other SSL backends.
- Closes: #8799
- Reviewed-by: Daniel Gustafsson <daniel@yesql.se>
+ Bug: https://github.com/curl/curl/pull/11457#issuecomment-1644587473
+ Reported-by: kyled-dell@users.noreply.github.com
-- HTTP-COOKIES: add missing CURLOPT_COOKIESESSION
+ Closes https://github.com/curl/curl/pull/11497
- Commit 980a47b42 added support for ignoring session cookies, but it
- was never added to the documentation.
+Daniel Stenberg (26 Jul 2023)
- Closes: #8795
- Reviewed-by: Daniel Stenberg <daniel@haxx.se>
+- easy: remove #ifdefs to make code easier on the eye
-Daniel Stenberg (5 May 2022)
-- docs/THANKS: remove name duplicate
+ Closes #11525
-- [Philip Heiduck brought this change]
+Stefan Eissing (26 Jul 2023)
- .mailmap: update
+- GHA: adding quiche workflow
- Closes #8800
+ - adding separate quiche workflow to also build nghttpx server for testing
-Jay Satiro (5 May 2022)
-- mbedtls: fix some error messages
+ Closes #11517
- Prior to this change some of the error messages misidentified the
- function that failed.
+Version 8.2.1 (26 Jul 2023)
+
+Daniel Stenberg (26 Jul 2023)
-Daniel Stenberg (5 May 2022)
- RELEASE-NOTES: synced
-- [Sergey Markelov brought this change]
+ curl 8.2.1 release
+
+- THANKS: add contributors from 8.2.1
+
+- docs: provide more see also for cipher options
- x509asn1: make do_pubkey handle EC public keys
+ More cross references. Hide nroff errors.
- Closes #8757
+ Closes #11513
-- [Harry Sintonen brought this change]
+- docs: mark two TLS options for TLS, not SSL
- mbedtls: bail out if rng init fails
+ Closes #11514
- There was a failf() call but no actual error return.
+Brad Harder (25 Jul 2023)
- Closes #8796
+- curl_multi_wait.3: fix arg quoting to doc macro .BR
-- [Sergey Markelov brought this change]
+ Closes #11511
- urlapi: address (harmless) UndefinedBehavior sanitizer warning
+Daniel Stenberg (24 Jul 2023)
- `while(i--)` causes runtime error: unsigned integer overflow: 0 - 1
- cannot be represented in type 'size_t' (aka 'unsigned long')
+- RELEASE-NOTES: synced
+
+Viktor Szakats (24 Jul 2023)
+
+- cmake: update ngtcp2 detection
+
+ Replace `OpenSSL` with `quictls` to follow the same change
+ in the v0.17.0 ngtcp2 release.
+
+ Follow-up to e0093b4b732f6495b0fb1cd6747cbfedcdcf63ed
+
+ Closes #11508
- Closes #8797
+Stefan Eissing (24 Jul 2023)
-- [Fabian Keil brought this change]
+- http: VLH, very large header test and fixes
- test{898,974,976}: add 'HTTP proxy' keywords
+ - adding tests using very large passwords in auth
+ - fixes general http sending to treat h3 like h2, and
+ not like http1.1
+ - eliminate H2_HEADER max definitions and use the commmon
+ DYN_HTTP_REQUEST everywhere, different limits do not help
+ - fix http2 handling of requests denied by nghttp2 on send
+ to immediately report the refused stream
- ... so the tests can be automatically skipped when
- testing external HTTP proxies like Privoxy.
+ Closes #11509
- Closes #8791
+Andrei Rybak (23 Jul 2023)
-- [Harry Sintonen brought this change]
+- CONTRIBUTE: drop mention of copyright year ranges
- gskit_connect_step1: fixed bogus setsockopt calls
+ Year ranges in copyrights were dropped in commits [1] and [2].
+ Verification of year ranges in copyrights was dropped from script
+ 'scripts/copyright.pl' in commit [3]. However, the corresponding
+ passages in file 'docs/CONTRIBUTE.md' weren't updated.
- setsockopt takes a reference to value, not value. With the current
- code this just leads to -1 return value with errno EFAULT.
+ Drop mentions of copyright year ranges from 'docs/CONTRIBUTE.md'.
- Closes #8793
+ [1] 2bc1d775f (copyright: update all copyright lines and remove year
+ ranges, 2023-01-02)
+ [2] c46761bd8 (tests/http: remove year ranges from copyrights,
+ 2023-03-14)
+ [3] 0e293bacb (copyright.pl: cease doing year verifications, 2023-01-28)
-- CURLOPT_SSH_AUTH_TYPES.3: fix the default
+ Closes #11504
- The default is all possible methods.
+- CONTRIBUTE: fix syntax in commit message description
- Closes #8792
+ File 'docs/CONTRIBUTE.md' includes a description of how one should write
+ commit messages in the curl project. Different possible parts of the
+ message are enclosed in square brackets. One exception is the section
+ describing how the curl project doesn't use "Signed-off-by" commit
+ trailers [1], which is enclosed in an opening curly brace paired with a
+ closing square bracket.
-- CURLOPT_DOH_URL.3: mention the known bug
+ Fix the enclosing square brackets in description of "Signed-off-by"
+ trailers in commit messages in file 'docs/CONTRIBUTE.md'.
- It is mostly duplicating info from KNOWN_BUGS but make it easier to find
- for users of this option.
+ [1] See description of option '--signoff' in Git documentation:
+ https://git-scm.com/docs/git-commit
- Closes #8790
+ Closes #11504
-- CURLOPT_HSTS*FUNCTION.3: document the involved structs as well
+Daniel Stenberg (23 Jul 2023)
- Reviewed-By: Daniel Gustafsson
- Closes #8788
+- src/mkhelp: strip off escape sequences
-- docs/SECURITY-PROCESS.md: "Visible command line arguments"
+ At some point the nroff command stopped stripping off escape sequences,
+ so then this script needs to do the job instead.
-- SECURITY-PROCESS: mention "URL inconsistencies"
+ Reported-by: VictorVG on github
+ Fixes #11501
+ Closes #11503
- ... as common problems that are *not* vulns.
+- KNOWN_BUGS: building for old macOS fails with gcc
-Daniel Gustafsson (2 May 2022)
-- contributors: strip off final comma
+ Closes #11441
- The final row of contributors should not end with a comma as it's the
- end of the list.
+Jacob Hoffman-Andrews (22 Jul 2023)
- Closes: #8785
- Reviewed-by: Daniel Stenberg <daniel@haxx.se>
+- rustls: update rustls-ffi 0.10.0
-Daniel Stenberg (2 May 2022)
-- [Philip Heiduck brought this change]
+ This brings in version 0.21.0 of the upstream rustls implementation,
+ which notable includes support for IP address certificates.
- misc: use "autoreconf -fi" instead buildconf
+ Closes #10865
- Signed-off-by: Philip H <47042125+pheiduck@users.noreply.github.com>
- Closes #8777
+Brad Harder (22 Jul 2023)
-Daniel Gustafsson (2 May 2022)
-- [Philip Heiduck brought this change]
+- websocket: rename arguments/variables to match docs
- cirrus: Use pip for Python packages on FreeBSD
+ Pedantry/semantic-alignment between functions, docs, comments with
+ respect to websocket protocol code; No functional change intended.
- Using pip instead of easy_install is more in line with how other
- CI images are being maintained.
+ * "totalsize", "framesize" becomes "fragsize" (we deal in frame fragments).
- Closes: #8783
- Reviewed-by: Daniel Gustafsson <daniel@yesql.se>
+ * "sendflags" becomes "flags"
-- [Philip Heiduck brought this change]
+ * use canonical CURL *handle
- cirrus: Update to FreeBSD 12.3
+ Closes #11493
- Closes: #8783
- Reviewed-by: Daniel Gustafsson <daniel@yesql.se>
+Jan Macku (21 Jul 2023)
-- tool_getparam: simplify conditional statement
+- bug_report: use issue forms instead of markdown template
- param_place cannot be NULL here since we immediately efter this block
- perform arithmetic on it (and use it in order to get here) so there is
- little reason to check.
+ Issue forms allow you to define web-like input forms using YAML
+ syntax. It allows you to guide the reporter to get the required
+ information.
- Closes: #8786
- Reviewed-by: Daniel Stenberg <daniel@haxx.se>
+ Signed-off-by: Jan Macku <jamacku@redhat.com>
+ Closes #11474
+
+Daniel Stenberg (21 Jul 2023)
+
+- TODO: Obey Retry-After in redirects
+
+ (remove "Set custom client ip when using haproxy protocol" which was
+ shipped in 8.2.0)
+
+ Mentioned-by: Yair Lenga
+ Closes #11447
- RELEASE-NOTES: synced
-- gskit: remove unused function set_callback
+Oliver Roberts (21 Jul 2023)
- This function has been unused since the initial commit of the GSKit
- backend in 0eba02fd4. The motivation for the code was getting the
- whole certificate chain: the only place where the latter is available
- is as a callback parameter. Unfortunately it is not possible to pass
- a user pointer to this callback, which precludes the possibility to
- associate the cert chain with a data/conn structure.
+- amissl: fix AmiSSL v5 detection
- For further information, search for pgsk_cert_validation_callback on:
- https://www.ibm.com/docs/api/v1/content/ssw_ibm_i_71/apis/gsk_attribute_set_callback.htm
+ Due to changes in the AmiSSL SDK, the detection needed adjusting.
- As the upstream library never added a parameter like that to the API,
- we give up the wait and remove the dead code.
+ Closes #11477
- Closes: #8782
- Reviewed-by: Patrick Monnerat <patrick@monnerat.net>
+Alois Klink (21 Jul 2023)
-- curl: free resource in error path
+- unittest/makefile: remove unneeded unit1621_LDADD
- If the new filename cannot be generated due to memory pressure, free
- the allocated aname on the way out to avoid a small leak.
+ The `unit1621_LDADD` variable has the exact same value as the `LDADD`
+ flag in `Makefile.am`, except without `@LDFLAGS@ @LIBCURL_LIBS@`.
- Closes: #8770
- Reviewed-by: Daniel Stenberg <daniel@haxx.se>
+ This was originally added by [98e6629][], but I can't see any reason
+ why it exists, so we should remove it to clean things up.
-- curl: guard against size_t wraparound in no-clobber code
+ [98e6629]: https://github.com/curl/curl/commit/98e6629154044e4ab1ee7cff8351c7
+ ebcb131e88
- When generating the new filename, make sure we aren't overflowing the
- size_t limit when calculating the new length. This is mostly academic
- but good code hygeine nonetheless.
+ Closes #11494
- Closes: #8771
- Reviewed-by: Daniel Stenberg <daniel@haxx.se>
+- unittest/makefile: remove unneeded unit1394_LDADD
-Daniel Stenberg (30 Apr 2022)
-- gha: build msh3
+ These custom `unit1394_LDADD` and similar automake overrides are no
+ longer neded. They were originally added by added by [8dac7be][] for
+ metalink support, but are no longer after [265b14d][] removed metalink.
- Closes #8779
+ [8dac7be]: https://github.com/curl/curl/commit/8dac7be438512a8725d3c71e9139bd
+ fdcac1ed8c
+ [265b14d]: https://github.com/curl/curl/commit/265b14d6b37c4298bd5556fabcbc37
+ d36f911693
-- scripts/cijobs.pl: try "current branch" first then "master"
+ Closes #11494
-- [Yusuke Nakamura brought this change]
+- cmake: add `libcurlu`/`libcurltool` for unit tests
- msh3: get msh3 version from MsH3Version
+ Add a `libcurlu`/`libcurltool` static library that is compiled only for
+ unit tests. We use `EXCLUDE_FROM_ALL` to make sure that they're not
+ built by default, they're only built if unit tests are built.
- Closes #8762
+ These libraries allow us to compile every unit test with CMake.
-- [Yusuke Nakamura brought this change]
+ Closes #11446
- msh3: psss remote_port to MsH3ConnectionOpen
+Daniel Stenberg (21 Jul 2023)
- MsH3 supported additional "Port" parameter to connect not hosted on
- 443 port QUIC website.
+- test979: test -u with redirect to (the same) absolute host
- * https://github.com/nibanks/msh3/releases/tag/v0.3.0
- * https://github.com/nibanks/msh3/pull/37
+ Verifies #11492
- Closes #8762
+- transfer: do not clear the credentials on redirect to absolute URL
-- [Christian Weisgerber brought this change]
+ Makes test 979 work. Regression shipped in 8.2.0 from commit
+ dd4d1a26959f63a2c
- openssl: define HAVE_SSL_CTX_SET_EC_CURVES for libressl
+ Fixes #11486
+ Reported-by: Cloudogu Siebels
+ Closes #11492
- SSL_CTX_set1_curves_list() has been available since LibreSSL 2.5.3,
- released five years ago.
+Jon Rumsey (20 Jul 2023)
- Bug: https://curl.se/mail/lib-2022-04/0059.html
- Closes #8773
+- os400: correct EXPECTED_STRING_LASTZEROTERMINATED
-- http: move Curl_allow_auth_to_host()
+ Correct EXPECTED_STRING_LASTZEROTERMINATED to account for
+ CURLOPT_HAPROXY_CLIENT_IP which requires EBCDIC to ASCII conversion when
+ passed into curl_easy_setopt().
- It was mistakenly put within the CURL_DISABLE_HTTP_AUTH #ifdef
+ Closes #11476
- Reported-by: Michael Olbrich
- Fixes #8772
- Closes #8775
+Oliver Roberts (20 Jul 2023)
-Daniel Gustafsson (29 Apr 2022)
-- msh3: print boolean value as text representation
+- amissl: add missing signal.h include
- Print the boolean value as its string representation instead of with
- %hhu which isn't a format we typically use.
+ In some environments, signal.h is already included, but not in others
+ which cause compilation to fail, so explictly include it.
- Closes: #8763
- Reviewed-by: Nick Banks <nibanks@microsoft.com>
+ Closes #11478
-Daniel Stenberg (29 Apr 2022)
-- data/test376: set a proper name
+- amigaos: fix sys/mbuf.h m_len macro clash
-- GHA/mbedtls: enabled nghttp2 in the build
+ The updated Curl_http_req_make and Curl_http_req_make2 functions spawned
+ a parameter called m_len. The AmigaOS networking headers, derived from
+ NetBSD, contain "#define m_len m_hdr.mh_len" which clashes with
+ this. Since we do not actually use mbuf, force the include file to be
+ ignored, removing the clash.
- Closes #8767
+ Closes #11479
-- mbedtls: fix compile when h2-enabled
+Daniel Stenberg (20 Jul 2023)
- Fixes #8766
- Reported-by: LigH-de on github
- Closes #8768
+- socks: print ipv6 address within brackets
-- RELEASE-NOTES: synced
+ Fixes #11483
+ Closes #11484
+
+Christian Schmitz (20 Jul 2023)
- bumped curlver to 7.83.1-dev
+- libcurl-errors.3: add CURLUE_OK
-- SECURITY-PROCESS: extended
+ Closes #11488
- Also clarify BUG-BOUNTY.md with IBB details.
+Oliver Roberts (20 Jul 2023)
- Closes #8754
+- cfilters: rename close/connect functions to avoid clashes
-- [Adam Rosenfield brought this change]
+ Rename `close` and `connect` in `struct Curl_cftype` for
+ consistency and to avoid clashes with macros of the same name
+ (the standard AmigaOS networking connect() function is implemented
+ via a macro).
- conn: fix typo 'connnection' -> 'connection' in two function names
+ Closes #11491
- Closes #8759
+Stefan Eissing (20 Jul 2023)
-Version 7.83.0 (27 Apr 2022)
+- http2: fix regression on upload EOF handling
+
+ - a regression introduced by c9ec85121110d7cbbbed2990024222c8f5b8afe5
+ where optimization of small POST bodies leads to a new code path
+ for such uploads that did not trigger the "done sending" event
+ - add triggering this event for early "upload_done" situations
+
+ Fixes #11485
+ Closes #11487
+ Reported-by: Aleksander Mazur
+
+Daniel Stenberg (19 Jul 2023)
+
+- configure: check for nghttp2_session_get_stream_local_window_size
+
+ The http2 code uses it now. Introduced in nghttp2 1.15.0 (Sep 2016)
+
+ Fixes #11470
+ Reported-by: Paul Howarth
+ Closes #11473
+
+Stefan Eissing (19 Jul 2023)
+
+- quiche: fix segfault and other things
+
+ - refs #11449 where a segfault is reported when IP Eyeballing did
+ not immediately connect but made several attempts
+ - The transfer initiating the eyeballing was initialized too early,
+ leadding to references to the filter instance that was then
+ replaced in the subsequent eyeball attempts. That led to a use
+ after free in the buffer handling for the transfer
+ - transfers are initiated now more lazy (like in the ngtcp2 filter),
+ when the stream is actually opened
+ - suppress reporting on quiche event errors for "other" transfers
+ than the current one to not fail a transfer due to faults in
+ another one.
+ - revert recent return value handling for quiche_h3_recv_body()
+ to not indicate an error but an EAGAIN situation. We wish quiche
+ would document what functions return.
+
+ Fixes #11449
+ Closes #11469
+ Reported-by: ウã•ã‚“
+
+Daniel Stenberg (19 Jul 2023)
+
+- hostip: return IPv6 first for localhost resolves
+
+ Fixes #11465
+ Reported-by: Chilledheart on github
+ Closes #11466
+
+Harry Sintonen (19 Jul 2023)
+
+- tool: fix tool_seek_cb build when SIZEOF_CURL_OFF_T > SIZEOF_OFF_T
+
+ - a variable was renamed, and some use of it wasn't. this fixes the
+ build.
+
+ Closes #11468
+
+Stefan Eissing (19 Jul 2023)
+
+- quiche: fix lookup of transfer at multi
+
+ - refs #11449 where weirdness in quiche multi connection tranfers was
+ observed
+ - fixes lookup of transfer for a quiche event to take the connection
+ into account
+ - formerly, a transfer with the same stream_id, but on another connection
+ could be found
+
+ Closes #11462
+
+Daniel Stenberg (19 Jul 2023)
-Daniel Stenberg (27 Apr 2022)
- RELEASE-NOTES: synced
- The 7.83.0 release
+ bump to 8.2.1
-- docs/THANKS: contributors from 7.83.0
+John Haugabook (19 Jul 2023)
-- test 898/974/976: require proxy to run
+- ciphers.d: put URL in first column
- Fixes #8755
- Reported-by: Marc Hörsken
- Closes #8756
+ This makes the URL turn into a link properly when "webified".
-- gnutls: don't leak the SRP credentials in redirects
+ Fixes https://github.com/curl/curl-www/issues/270
+ Closes #11464
- Follow-up to 620ea21410030 and 139a54ed0a172a
+Version 8.2.0 (19 Jul 2023)
- Reported-by: Harry Sintonen
- Closes #8752
+Daniel Stenberg (19 Jul 2023)
-- CURLOPT*TLSAUTH: they only work with OpenSSL or GnuTLS
+- RELEASE-NOTES: synced
- Closes #8753
+ 8.2.0 release
-- openssl: don't leak the SRP credentials in redirects either
+- THANKS-filter: strip out "GitHub"
- Follow-up to 620ea21410030
+- THANKS: add contributors from 8.2.0
- Reported-by: Harry Sintonen
- Closes #8751
+- RELEASE-PROCEDURE.md: adjust the release dates
-- [Liam Warfield brought this change]
+Stefan Eissing (17 Jul 2023)
- hyper: fix tests 580 and 581 for hyper
+- quiche: fix defects found in latest coverity report
- Hyper now has the ability to preserve header order. This commit adds a
- few lines setting the connection options for this feature.
+ Closes #11455
- Related to issue #8617
- Closes #8707
+Daniel Stenberg (17 Jul 2023)
-- conncache: remove name arg from Curl_conncache_find_bundle
+- quiche: avoid NULL deref in debug logging
- To simplify, and also since the returned name is not the full actual
- name used for the check. The port number and zone id is also involved,
- so just showing the name is misleading.
+ Coverity reported "Dereference after null check"
- Closes #8750
+ If stream is NULL and the function exits, the logging must not deref it.
-- tests: verify the fix for CVE-2022-27774
+ Closes #11454
- - Test 973 redirects from HTTP to FTP, clear auth
- - Test 974 redirects from HTTP to HTTP different port, clear auth
- - Test 975 redirects from HTTP to FTP, permitted to keep auth
- - Test 976 redirects from HTTP to HTTP different port, permitted to keep
- auth
+Stefan Eissing (17 Jul 2023)
-- transfer: redirects to other protocols or ports clear auth
+- http2: treat initial SETTINGS as a WINDOW_UPDATE
- ... unless explicitly permitted.
+ - refs #11426 where spurious stalls on large POST requests
+ are reported
+ - the issue seems to involve the following
+ * first stream on connection adds up to 64KB of POST
+ data, which is the max default HTTP/2 stream window size
+ transfer is set to HOLD
+ * initial SETTINGS from server arrive, enlarging the stream
+ window. But no WINDOW_UPDATE is received.
+ * curl stalls
+ - the fix un-HOLDs a stream on receiving SETTINGS, not
+ relying on a WINDOW_UPDATE from lazy servers
- Bug: https://curl.se/docs/CVE-2022-27774.html
- Reported-by: Harry Sintonen
- Closes #8748
+ Closes #11450
-- connect: store "conn_remote_port" in the info struct
+Daniel Stenberg (17 Jul 2023)
- To make it available after the connection ended.
+- ngtcp2: assigning timeout, but value is overwritten before used
-- cookie.d: clarify when cookies are always sent
+ Reported by Coverity
-- test898: verify the fix for CVE-2022-27776
+ Closes #11453
- Do not pass on Authorization headers on redirects to another port
+- krb5: add typecast to please Coverity
-- http: avoid auth/cookie on redirects same host diff port
+Derzsi Dániel (16 Jul 2023)
- CVE-2022-27776
+- wolfssl: support setting CA certificates as blob
- Reported-by: Harry Sintonen
- Bug: https://curl.se/docs/CVE-2022-27776.html
- Closes #8749
+ Closes #11445
-- libssh2: make the md5 comparison fail if wrong length
+- wolfssl: detect when TLS 1.2 support is not built into wolfssl
- Making it just skip the check unless exactly 32 is too brittle. Even if
- the docs says it needs to be exactly 32, it is be safer to make the
- comparison fail here instead.
+ Closes #11444
- Reported-by: Harry Sintonen
- Bug: https://hackerone.com/reports/1549461
- Closes #8745
+Graham Campbell (15 Jul 2023)
-- conncache: include the zone id in the "bundle" hashkey
+- CI: bump nghttp2 from 1.55.0 to 1.55.1
- Make connections to two separate IPv6 zone ids create separate
- connections.
+ Closes #11442
- Reported-by: Harry Sintonen
- Bug: https://curl.se/docs/CVE-2022-27775.html
- Closes #8747
+Daniel Stenberg (15 Jul 2023)
-- [Patrick Monnerat brought this change]
+- curl: return error when asked to use an unsupported HTTP version
- url: check sasl additional parameters for connection reuse.
+ When one of the following options are used but the libcurl in use does
+ not support it:
- Also move static function safecmp() as non-static Curl_safecmp() since
- its purpose is needed at several places.
+ --http2
+ --http2-prior-knowledge
+ --proxy-http2
- Bug: https://curl.se/docs/CVE-2022-22576.html
+ Closes #11440
- CVE-2022-22576
+Chris Paulson-Ellis (14 Jul 2023)
- Closes #8746
+- cf-socket: don't bypass fclosesocket callback if cancelled before connect
-- libssh2: compare sha256 strings case sensitively
+ After upgrading to 8.1.2 from 7.84.0, I found that sockets were being
+ closed without calling the fclosesocket callback if a request was
+ cancelled after the associated socket was created, but before the socket
+ was connected. This lead to an imbalance of fopensocket & fclosesocket
+ callbacks, causing problems with a custom event loop integration using
+ the multi-API.
- Reported-by: Harry Sintonen
- Bug: https://hackerone.com/reports/1549435
- Closes #8744
+ This was caused by cf_socket_close() calling sclose() directly instead
+ of calling socket_close() if the socket was not active. For regular TCP
+ client connections, the socket is activated by cf_socket_active(), which
+ is only called when the socket completes the connect.
-- tool_getparam: error out on missing -K file
+ As far as I can tell, this issue has existed since 7.88.0. That is,
+ since the code in question was introduced by:
+ commit 71b7e0161032927cdfb4e75ea40f65b8898b3956
+ Author: Stefan Eissing <stefan@eissing.org>
+ Date: Fri Dec 30 09:14:55 2022 +0100
- Add test 411 to verify.
+ lib: connect/h2/h3 refactor
- Reported-by: Median Median Stride
- Bug: https://hackerone.com/reports/1542881
- Closes #8731
+ Closes #11439
-- [Tatsuhiro Tsujikawa brought this change]
+Daniel Stenberg (13 Jul 2023)
- ngtcp2: deal with sub-millisecond timeout
+- tool_parsecfg: accept line lengths up to 10M
- Closes #8738
+ Bumped from 100K set in 47dd957daff9
-- misc: update copyright year ranges
+ Reported-by: Antoine du Hamel
+ Fixes #11431
+ Closes #11435
-- c_escape: escape '?' in generated --libcurl code
+Stefan Eissing (13 Jul 2023)
- In order to avoid the risk of it being used in an accidental trigraph in
- the generated code.
+- CI: brew fix for openssl in default path
- Reported-by: Harry Sintonen
- Bug: https://hackerone.com/reports/1548535
- Closes #8742
+ If brew install/update links openssl into /usr/local, it will be found
+ before anything we add with `-isystem path` to CPP/LDLFAGS. Get rid of
+ that by unlinking the keg.
-- [Philip Heiduck brought this change]
+ Fixes #11413
+ Closes #11436
- mlc: curl.zuul.vexxhost.dev is reachable again
+Daniel Stenberg (13 Jul 2023)
- remove it from ignorelist for linkcheck
+- RELEASE-NOTES: synced
- Closes #8736
+OndÅ™ej KoláÄek (13 Jul 2023)
-- [Tatsuhiro Tsujikawa brought this change]
+- sectransp: fix EOF handling
- ngtcp2: avoid busy loop in low CWND situation
+ Regression since the large refactor from 2022
- Closes #8739
+ Closes #11427
-- TODO: telnet - exit immediately upon connection if stdin is /dev/null
+Daniel Stenberg (13 Jul 2023)
- Suggested-by: Robin A. Meade
- URL: https://curl.se/mail/archive-2022-04/0027.html
+- checksrc: quote the file name to work with "funny" letters
-- [Kushal Das brought this change]
+ Closes #11437
- docs: updates spellings with full words
+Karthikdasari0423 (13 Jul 2023)
- Closes #8730
+- HTTP3.md: ngtcp2 updated to v0.17.0 and nghttp3 to v0.13.0
-- tests/FILEFORMAT.md: spellfix
+ Follow-up to e0093b4b732f6
-Daniel Gustafsson (21 Apr 2022)
-- misc: fix typos
+ Closes #11433
- Fix a few random typos is comments and workflow names.
+Daniel Stenberg (13 Jul 2023)
-- macos: fix .plist installation into framework
+- CURLOPT_MIMEPOST.3: clarify what setting to NULL means
- The copy command introduced in e498a9b1f had leftover '>' from the
- previous sed command it replaced, which broke its syntax. Fix by
- removing.
+ Follow-up to e08382a208d4e480
- Reported-by: Emanuele Torre <torreemanuele6@gmail.com>
+ Closes #11430
-Daniel Stenberg (21 Apr 2022)
-- [Christopher Degawa brought this change]
+Tatsuhiro Tsujikawa (12 Jul 2023)
- Makefile: fix ca-bundle due to mk-ca-bundle.pl being moved
+- ngtcp2: build with 0.17.0 and nghttp3 0.13.0
- The script was moved in 8e22fc68e7dda43e9f but the lines that called it
- was not changed to reflect it's new position
+ - ngtcp2_crypto_openssl was renamed to ngtcp2_crypto_quictls.
- Signed-off-by: Christopher Degawa <ccom@randomderp.com>
+ Closes #11428
- Closes #8728
+- CI: Bump ngtcp2, nghttp3, and nghttp2
-Daniel Gustafsson (20 Apr 2022)
-- macos: set .plist version in autoconf
+ Closes #11428
- Set the libcurl version in libcurl.plist like how libcurl.vers is
- created.
+James Fuller (11 Jul 2023)
- Closes: #8692
- Reviewed-by: Daniel Stenberg <daniel@haxx.se>
- Reviewed-by: Nick Zitzmann <nickzman@gmail.com>
+- example/maxconnects: set maxconnect example
-- cookies: Improve errorhandling for reading cookiefile
+ Closes #11343
- The existing programming had some issues with errorhandling for reading
- the cookie file. If the file failed to open, we would silently ignore it
- and continue as if there was no file (or stdin) passed. In this case, we
- would also call fclose() on the NULL FILE pointer, which is undefined
- behavior. Fix by ensuring that the FILE pointer is set before calling
- fclose on it, and issue a warning in case the file cannot be opened.
- Erroring out on nonexisting file would break backwards compatibility of
- very old behavior so we can't really go there.
+Pontakorn Prasertsuk (11 Jul 2023)
- Closes: #8699
- Reviewed-by: Daniel Stenberg <daniel@haxx.se>
- Reviewed-by: Jay Satiro <raysatiro@yahoo.com>
+- http2: send HEADER & DATA together if possible
-Daniel Stenberg (20 Apr 2022)
-- libcurl-tutorial.3: spellfix and minor polish
+ Closes #11420
-- CURLINFO_PRIMARY_PORT.3: spellfix
+Daniel Stenberg (11 Jul 2023)
- Reported-by: Patrick Monnerat
+- CI: use wolfSSL 5.6.3 in builds
-- [Jay Dommaschk brought this change]
+ No using master anymore
- libssh: fix double close
+ Closes #11424
- libssh closes the socket in ssh_diconnect() so make sure that libcurl
- does not also close it.
+SaltyMilk (11 Jul 2023)
- Fixes #8708
- Closes #8718
+- fopen: optimize
-Jay Satiro (20 Apr 2022)
-- [Gisle Vanem brought this change]
+ Closes #11419
- unit1620: call global_init before calling Curl_open
+Daniel Stenberg (11 Jul 2023)
- Curl_open calls the resolver init and on Windows if the resolver backend
- is c-ares then the Windows sockets library (winsock) must already have
- been initialized (via global init).
+- cmake: make use of snprintf
- Ref: https://github.com/curl/curl/pull/8540#issuecomment-1059771800
+ Follow-up to 935b1bd4544a23a91d68
- Closes https://github.com/curl/curl/pull/8719
+ Closes #11423
-Daniel Stenberg (19 Apr 2022)
-- CURLINFO_PRIMARY_PORT.3: clarify which port this is
+Stefan Eissing (11 Jul 2023)
- As it was not entirely clear previously.
+- macOS: fix taget detection
- Closes #8725
+ - TARGET_OS_OSX is not always defined on macOS
+ - this leads to missing symbol Curl_macos_init()
+ - TargetConditionals.h seems to define these only when
+ dynamic targets are enabled (somewhere?)
+ - this PR fixes that on my macOS 13.4.1
+ - I have no clue why CI builds worked without it
-- CURLOPT_UNRESTRICTED_AUTH.3: extended explanation
+ Follow-up to c7308592fb8ba213fc2c1
+ Closes #11417
- Include details about Authentication headers.
+Stan Hu (9 Jul 2023)
- Reported-by: Brad Spencer
- Fixes #8724
- Closes #8726
+- hostip.c: Move macOS-specific calls into global init call
-- .github/workflows/macos.yml: add a libssh job with c-ares
+ https://github.com/curl/curl/pull/7121 introduced a macOS system call
+ to `SCDynamicStoreCopyProxies`, which is invoked every time an IP
+ address needs to be resolved.
- ... to enable the memdebug system
+ However, this system call is not thread-safe, and macOS will kill the
+ process if the system call is run first in a fork. To make it possible
+ for the parent process to call this once and prevent the crash, only
+ invoke this system call in the global initialization routine.
- Closes #8720
+ In addition, this change is beneficial because it:
-- RELEASE-NOTES: synced
+ 1. Avoids extra macOS system calls for every IP lookup.
+ 2. Consolidates macOS-specific initialization in a separate file.
-Jay Satiro (17 Apr 2022)
-- [Gisle Vanem brought this change]
+ Fixes #11252
+ Closes #11254
- docs/HTTP3.md: fix typo
+Daniel Stenberg (9 Jul 2023)
- also fix msh3 section formatting
+- docs: use a space after RFC when spelling out RFC numbers
- Ref: https://github.com/curl/curl/commit/37492ebb#r70980087
+ Closes #11382
-Marc Hoersken (17 Apr 2022)
-- timediff.[ch]: add curlx helper functions for timeval conversions
+Margu (9 Jul 2023)
- Also move timediff_t definitions from timeval.h to timediff.h and
- then make timeval.h include the new standalone-capable timediff.h.
+- imap-append.c: update to make it more likely to work
- Reviewed-by: Jay Satiro
- Reviewed-by: Daniel Stenberg
+ Fixes #10300
+ Closes #11397
+
+Emanuele Torre (9 Jul 2023)
- Supersedes #5888
- Closes #8595
+- tool_writeout_json: fix encoding of control characters
-Daniel Stenberg (17 Apr 2022)
-- [Balakrishnan Balasubramanian brought this change]
+ Control characters without a special escape sequence e.g. %00 or %06
+ were being encoded as "u0006" instead of "\u0006".
- tests: refactor server/socksd.c to support --unix-socket
+ Ref: https://github.com/curl/trurl/pull/214#discussion_r1257487858
+ Closes #11414
- Closes #8687
+Stefan Eissing (9 Jul 2023)
-- [Emanuele Torre brought this change]
+- http3/ngtcp2: upload EAGAIN handling
- tool_paramhlp: use feof(3) to identify EOF correctly when using fread(3)
+ - refs #11389 where IDLE timeouts on upload are reported
+ - reword ngtcp2 expiry handling to apply to both send+recv
+ calls into the filter
+ - EAGAIN uploads similar to the recent changes in HTTP/2, e.g.
+ report success only when send data was ACKed.
+ - HOLD sending of EAGAINed uploads to avoid cpu busy loops
+ - rename internal function for consistency with HTTP/2
+ implementation
- This loop was using the number of bytes read from the file as condition
- to keep reading.
+ Fixes #11389
+ Closes #11390
- From Linux's fread(3) man page:
- > On success, fread() and fwrite() return the number of items read or
- > written. This number equals the number of bytes transferred only when
- > size is 1. If an error occurs, or the end of the file is reached, the
- > return value is a short item count (or zero).
- >
- > The file position indicator for the stream is advanced by the number
- > of bytes successfully read or written.
- >
- > fread() does not distinguish between end-of-file and error, and
- > callers must use feof(3) and ferror(3) to determine which occurred.
+Brian Nixon (9 Jul 2023)
- This means that nread!=0 doesn't make much sense as an end condition for
- the loop: nread==0 doesn't necessarily mean that EOF has been reached or
- an error has occured (but that is usually the case) and nread!=0 doesn't
- necessarily mean that EOF has not been reached or that no read errors
- have occured. feof(3) and ferror(3) should be uses when using fread(3).
+- tool_easysrc.h: correct `easysrc_perform` for `CURL_DISABLE_LIBCURL_OPTION`
- Currently curl has to performs an extra fread(3) call to get a return
- value equal to 0 to stop looping.
+ Closes #11398
- This usually "works" (even though nread==0 shouldn't be interpreted as
- EOF) if stdin is a pipe because EOF usually marks the "real" end of the
- stream, so the extra fread(3) call will return immediately and the extra
- read syscall won't be noticeable:
+Daniel Stenberg (9 Jul 2023)
- bash-5.1$ strace -e read curl -s -F file=@- 0x0.st <<< a 2>&1 |
- > tail -n 5
- read(0, "a\n", 4096) = 2
- read(0, "", 4096) = 0
- read(0, "", 4096) = 0
- http://0x0.st/oRs.txt
- +++ exited with 0 +++
- bash-5.1$
+- RELEASE-NOTES: synced
- But this doesn't work if curl is reading from stdin, stdin is a
- terminal, and the EOF is being emulated using a shell with ^D. Two
- consecutive ^D will be required in this case to actually make curl stop
- reading:
+- transfer: clear credentials when redirecting to absolute URL
- bash-5.1$ curl -F file=@- 0x0.st
- a
- ^D^D
- http://0x0.st/oRs.txt
- bash-5.1$
+ Make sure the user and password for the second request is taken from the
+ redirected-to URL.
- A possible workaround to this issue is to use a program that handles EOF
- correctly to indirectly send data to curl's stdin:
+ Add test case 899 to verify.
- bash-5.1$ cat - | curl -F file=@- 0x0.st
- a
- ^D
- http://0x0.st/oRs.txt
- bash-5.1$
+ Reported-by: James Lucas
+ Fixes #11410
+ Closes #11412
- This patch makes curl handle EOF properly when using fread(3) in
- file2memory() so that the workaround is not necessary.
+Stefan Eissing (8 Jul 2023)
- Since curl was previously ignoring read errors caused by this fread(3),
- ferror(3) is also used in the condition of the loop: read errors and EOF
- will have the same meaning; this is done to somewhat preserve the old
- behaviour instead of making the command fail when a read error occurs.
+- hyper: fix EOF handling on input
- Closes #8701
+ We ran out of disc space due to an infinite loop with debug logging
-- gen.pl: change wording for mutexed options
+ Fixes #11377
+ Closes #11385
+ Reported-by: Dan Fandrich
- Instead of saying "This option overrides NNN", now say "This option is
- mutually exclusive to NNN" in the generated man page ouput, as the
- option does not in all cases actually override the others but they are
- always mutually exclusive.
+- http2: raise header limitations above and beyond
- Ref: #8704
- Closes #8716
+ - not quite to infinity
+ - rewrote the implementation of our internal HTTP/1.x request
+ parsing to work with very large lines using dynbufs.
+ - new default limit is `DYN_HTTP_REQUEST`, aka 1MB, which
+ is also the limit of curl's general HTTP request processing.
-- curl: error out if -T and -d are used for the same URL
+ Fixes #11405
+ Closes #11407
- As one implies PUT and the other POST, both cannot be used
- simultaneously.
+Juan Cruz Viotti (8 Jul 2023)
- Add test 378 to verify.
+- curl_easy_nextheader.3: add missing open parenthesis examples
- Reported-by: Boris Verkhovskiy
- Fixes #8704
- Closes #8715
+ Closes #11409
+ Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
-- lib: remove exclamation marks
+Dan Fandrich (7 Jul 2023)
- ... from infof() and failf() calls. Make them less attention seeking.
+- CI: enable verbose test output on pytest
- Closes #8713
+ This shows individual pass/fail status on tests and makes this output
+ consistent with other jobs' pytest invocations.
-- fail.d: tweak the description
+Stefan Eissing (28 Jun 2023)
- Reviewed-by: Daniel Gustafsson
- Suggested-by: Robert Charles Muir
- Ref: https://twitter.com/rcmuir/status/1514915401574010887
+- http2: fix crash in handling stream weights
- Closes #8714
+ - Delay the priority handling until the stream has been opened.
-Daniel Gustafsson (15 Apr 2022)
-- docs: Fix missing semicolon in example code
+ - Add test2404 to reproduce and verify.
- Multiple share examples were missing a semicolon on the line defining
- the CURLSHcode variable.
+ Weights may change "on the run", which is why there are checks in
+ general egress handling. These must not trigger when the stream has not
+ been opened yet.
- Closes: #8697
- Reported-by: Michael Kaufmann <mail@michael-kaufmann.ch>
- Reviewed-by: Daniel Stenberg <daniel@haxx.se>
+ Reported-by: jbgoog@users.noreply.github.com
-- infof: consistent capitalization of warning messages
+ Fixes https://github.com/curl/curl/issues/11379
+ Closes https://github.com/curl/curl/pull/11384
- Ensure that all infof calls with a warning message are capitalized
- in the same way. At some point we should probably set up a style-
- guide for infof but until then let's aim for a little consistenncy
- where we can.
+- tests/http: Add mod_h2 directive `H2ProxyRequests`
- Closes: #8711
- Reviewed-by: Daniel Stenberg <daniel@haxx.se>
+ master of mod_h2 now requires H2ProxyRequests directives for forward
+ proxying with HTTP/2 to work.
-- RELEASE-NOTES: synced
+ Ref: https://github.com/icing/mod_h2/commit/3897a7086
-- [Matteo Baccan brought this change]
+ Closes https://github.com/curl/curl/pull/11392
- perl: removed a double semicolon at end of line
+Dan Fandrich (28 Jun 2023)
- Remove double semicolons at end of line in Perl code.
+- CI: make Appveyor job names unique
- Closes: #8709
- Reviewed-by: Daniel Gustafsson <daniel@yesql.se>
+ Two otherwise identical mingw-w64 jobs now have their differing compiler
+ versions mentioned in their names.
-- curl_easy_header: fix typos in documentation
+Sheshadri.V (25 Jun 2023)
- Closes: #8694
- Reviewed-by: Daniel Stenberg <daniel@haxx.se>
+- curl.h: include <sys/select.h> for vxworks
-Marcel Raad (11 Apr 2022)
-- appveyor: add Cygwin build
+ Closes #11356
- Closes https://github.com/curl/curl/pull/8693
+Dan Fandrich (24 Jun 2023)
-- appveyor: only add MSYS2 to PATH where required
+- CI: enable parallel make in more builds
- Closes https://github.com/curl/curl/pull/8693
+ Most CI services provide at least two cores, so enable parallel make
+ jobs to take advantage of that for builds. Some dependencies aren't safe
+ to build in parallel so leave those as-is. Also, rename a few
+ workflows to eliminate duplicate names and provide a better idea what
+ they're about.
-Daniel Stenberg (10 Apr 2022)
-- [Tatsuhiro Tsujikawa brought this change]
+- CI: don't install impacket if tests are not run
- ngtcp2: fix memory leak
+ It just wastes time and bandwidth and isn't even used.
- Closes #8691
+divinity76 (24 Jun 2023)
-- [Tatsuhiro Tsujikawa brought this change]
+- configure: the --without forms of the options are also gone
- ngtcp2: remove remote_addr which is not used in a meaningful way
+ --without-darwin-ssl and --without-metalink
- Closes #8689
+ Closes #11378
-- [Tatsuhiro Tsujikawa brought this change]
+Daniel Stenberg (23 Jun 2023)
- ngtcp2: enlarge H3_SEND_SIZE
+- configure: add check for ldap_init_fd
- Make h3_SEND_SIZE larger because current value (20KiB) is too small
- for the high latency environment.
+ ... as otherwise the configure script will say it is OpenLDAP in the
+ summary, but not set the USE_OPENLDAP define, therefor not using the
+ intended OpenLDAP code paths.
- Closes #8690
+ Regression since 4d7385446 (7.85.0)
+ Fixes #11372
+ Closes #11374
+ Reported-by: vlkl-sap on github
-- [Tatsuhiro Tsujikawa brought this change]
+Michał Petryka (23 Jun 2023)
- ngtcp2: fix HTTP/3 upload stall and avoid busy loop
+- cmake: stop CMake from quietly ignoring missing Brotli
- This commit fixes HTTP/3 upload stall if upload data is larger than
- H3_SEND_SIZE. Only check writability of socket if a stream is
- writable to avoid busy loop when QUIC flow control window is filled
- up, or upload buffer is full.
+ The CMake project was set to `QUIET` for Brotli instead of
+ `REQUIRED`. This makes builds unexpectedly ignore missing Brotli even
+ when `CURL_BROTLI` is enabled.
- Closes #8688
+ Closes #11376
-- [Nick Banks brought this change]
+Emanuele Torre (22 Jun 2023)
- msh3: add support for QUIC and HTTP/3 using msh3
+- docs: add more .IP after .RE to fix indentation of generate paragraphs
- Considered experimental, as the other HTTP/3 backends.
+ follow-up from 099f41e097c030077b8ec078f2c2d4038d31353b
- Closes #8517
+ I just thought of checking all the other files with .RE, and I found 6
+ other files that were missing .IP at the end.
-- TODO: "SFTP with SCP://"
+ Closes #11375
-- GHA: move bearssl jobs over from zuul
+Stefan Eissing (22 Jun 2023)
- Closes #8684
+- http2: h2 and h2-PROXY connection alive check fixes
-- data/DISABLED: disable test 313 on bearssl builds
+ - fix HTTP/2 check to not declare a connection dead when
+ the read attempt results in EAGAIN
+ - add H2-PROXY alive check as for HTTP/2 that was missing
+ and is needed
+ - add attach/detach around Curl_conn_is_alive() and remove
+ these in filter methods
+ - add checks for number of connections used in some test_10
+ proxy tunneling tests
- Closes #8684
+ Closes #11368
-- runtests: add 'bearssl' as testable feature
+- http2: error stream resets with code CURLE_HTTP2_STREAM
- Closes #8684
+ - refs #11357, where it was reported that HTTP/1.1 downgrades
+ no longer works
+ - fixed with suggested change
+ - added test_05_03 and a new handler in the curltest module
+ to reproduce that downgrades work
-- GHA: add openssl3 jobs moved over from zuul
+ Fixes #11357
+ Closes #11362
+ Reported-by: Jay Satiro
+
+Daniel Stenberg (22 Jun 2023)
- Closes #8683
+- connect-timeout.d: mention that the DNS lookup is included
-- schannel: remove dead code that will never run
+ Closes #11370
- As the condition can't ever evaluate true
+Emanuele Torre (22 Jun 2023)
- Reported-by: Andrey Alifanov
- Ref: #8675
- Closes #8677
+- quote.d: fix indentation of generated paragraphs
-- connecache: remove duplicate connc->closure_handle check
+ quote.d was missing a .IP at the end which caused the paragraphs
+ generated for See-also, Multi, and Example to not be indented correctly.
- The superfluous extra check could cause analyzer false positives
- and doesn't serve any purpose.
+ I also remove a redundant "This option can be used multiple times.", and
+ replaced .IP "item" with .TP .B "item" to make more clear which lines
+ are part of the list of commands and which aren't.
- Closes #8676
+ Closes #11371
-- [Michał Antoniak brought this change]
+Paul Wise (22 Jun 2023)
- mbedtls: remove server_fd from backend
+- checksrc: modernise perl file open
- Closes #8682
+ Use regular variables and separate file open modes from filenames.
-- [Tatsuhiro Tsujikawa brought this change]
+ Suggested by perlcritic
- ngtcp2: use token when detecting :status header field
+ Copied from https://github.com/curl/trurl/commit/f2784a9240f47ee28a845
- Closes #8679
+ Closes #11358
-- [Tatsuhiro Tsujikawa brought this change]
+Dan Fandrich (21 Jun 2023)
- ngtcp2: make curl 1ms faster
+- runtests: work around a perl without SIGUSR1
- Pass 0 for an already expired timer.
+ At least msys2 perl v5.32.1 doesn't seem to define this signal. Since
+ this signal is only used for debugging, just ignore if setting it fails.
- Closes #8678
+ Reported-by: Marcel Raad
+ Fixes #11350
+ Closes #11366
-- [Tatsuhiro Tsujikawa brought this change]
+- runtests: include missing valgrind package
- ngtcp2: fix QUIC_IDLE_TIMEOUT
+ use valgrind was missing which caused torture tests with valgrind
+ enabled to fail.
- QUIC_IDLE_TIMEOUT should be of type ngtcp2_duration which is
- nanoseconds resolution.
+ Reported-by: Daniel Stenberg
+ Fixes #11364
+ Closes #11365
- Closes #8678
+- runtests: use more consistent failure lines
-- English: use American spelling consistently
+ After a test failure log a consistent log message to make it easier to
+ parse the log file. Also, log a consistent message with "ignored" for
+ failures that cause the test to be not considered at all. These should
+ perhaps be counted in the skipped category, but this commit does not
+ change that behaviour.
- Authorization, Initialization, Organization etc.
+- runtests: consistently write the test check summary block
- Closes #8673
+ The memory check character was erroneously omitted if the memory
+ checking file was not available for some reason, making the block of
+ characters an inconsistent length.
-Daniel Gustafsson (5 Apr 2022)
-- [Sascha Zengler brought this change]
+- test2600: fix the description
- BUGS: Fix incorrect punctuation
+ It looks like it was cut-and-pasted.
- Closes #8672
- Reviewed-by: Daniel Gustafsson <daniel@yesql.se>
+ Closes #11354
-Daniel Stenberg (4 Apr 2022)
-- tool_listhelp.c: uppercase URL
+Daniel Stenberg (21 Jun 2023)
-- RELEASE-NOTES: synced
+- TODO: "Support HTTP/2 for HTTP(S) proxies" *done*
-- http: streamclose "already downloaded"
+humbleacolyte (21 Jun 2023)
- Instead of connclose()ing, since when HTTP/2 is used it doesn't need to
- close the connection as stopping the current transfer is enough.
+- cf-socket: move ctx declaration under HAVE_GETPEERNAME
- Reported-by: Evangelos Foutras
- Closes #8665
+ Closes #11352
-Jay Satiro (1 Apr 2022)
-- ftp: fix error message for partial file upload
+Daniel Stenberg (20 Jun 2023)
- - Show the count of bytes written on partial file upload.
+- RELEASE-NOTES: synced
- Prior to this change the error message mistakenly showed the count of
- bytes read, not written.
+- example/connect-to: show CURLOPT_CONNECT_TO
- Bug: https://github.com/curl/curl/discussions/8637
- Reported-by: Taras Kushnir
+ Closes #11340
- Closes https://github.com/curl/curl/pull/8649
+Stefan Eissing (20 Jun 2023)
-Daniel Stenberg (1 Apr 2022)
-- http: correct the header error message to say colon
+- hyper: unslow
- Not semicolon
+ - refs #11203 where hyper was reported as being slow
+ - fixes hyper_executor_poll to loop until it is out of
+ tasks as advised by @seanmonstar in https://github.com/hyperium/hyper/issue
+ s/3237
+ - added a fix in hyper io handling for detecting EAGAIN
+ - added some debug logs to see IO results
+ - pytest http/1.1 test cases pass
+ - pytest h2 test cases fail on connection reuse. HTTP/2
+ connection reuse does not seem to work. Hyper submits
+ a request on a reused connection, curl's IO works and
+ thereafter hyper declares `Hyper: [1] operation was canceled: connection cl
+ osed`
+ on stderr without any error being logged before.
+ Fixes #11203
Reported-by: Gisle Vanem
- Ref: #8666
- Closes #8667
+ Advised-by: Sean McArthur
+ Closes #11344
+
+- HTTP/2: upload handling fixes
+
+ - fixes #11242 where 100% CPU on uploads was reported
+ - fixes possible stalls on last part of a request body when
+ that information could not be fully send on the connection
+ due to an EAGAIN
+ - applies the same EGAIN handling to HTTP/2 proxying
+
+ Reported-by: Sergey Alirzaev
+ Fixed #11242
+ Closes #11342
-- lib: #ifdef on USE_HTTP2 better
+Daniel Stenberg (20 Jun 2023)
- ... as nghttp2 might not be the library that provides HTTP/2 support.
+- example/opensslthreadlock: remove
- Closes #8661
+ This shows how to setup OpenSSL mutex callbacks, but this is not
+ necessary since OpenSSL 1.1.0 - meaning that no currently supported
+ OpenSSL version requires this anymore
-- [Michał Antoniak brought this change]
+ Closes #11341
- mbedtls: remove 'protocols' array from backend when ALPN is not used
+Dan Fandrich (19 Jun 2023)
- Closes #8663
+- libtest: display the times after a test timeout error
-- http2: RST the stream if we stop it on our own will
+ This is to help with test failure debugging.
- For the "simulated 304" case the done-call isn't considered "premature"
- but since the server didn't close the stream it needs to be reset to
- stop delivering data.
+ Ref: #11328
+ Closes #11329
- Closes #8664
+- test2600: bump a test timeout
-- http: close the stream (not connection) on time condition abort
+ Case 1 failed at least once on GHA by going 30 msec too long.
- Closes #8664
+ Ref: #11328
-- http2: handle DONE called for the paused stream
+- runtests: better detect and handle pipe errors in the controller
- As it could otherwise stall all streams on the connection
+ Errors reading and writing to the pipes are now better detected and
+ propagated up to the main test loop so it can be cleanly shut down. Such
+ errors are usually due to a runner dying so it doesn't make much sense
+ to try to continue the test run.
- Reported-by: Evangelos Foutras
- Fixes #8626
- Closes #8664
+- runtests: cleanly abort the runner if the controller dies
-- tls: make mbedtls and NSS check for h2, not nghttp2
+ If the controller dies unexpectedly, have the runner stop its servers
+ and exit cleanly. Otherwise, the orphaned servers will stay running in
+ the background.
- This makes them able to also negotiate HTTP/2 even when built to use
- hyper for h2.
+- runtests: improve error logging
- Closes #8656
+ Give more information about test harness error conditions to help figure
+ out what might be wrong. Print some internal test state when SIGUSR1 is
+ sent to runtests.pl.
-- tests/libtest/lib670.c: fixup the copyright year range
+ Ref: #11328
- follow-up to b54e18640ea4b7
+- runtests: better handle ^C during slow tests
-- [Leandro Coutinho brought this change]
+ Since the SIGINT handler now just sets a flag that must be checked in the
+ main controller loop, make sure that runs periodically. Rather than
+ blocking on a response from a test runner near the end of the test run,
+ add a short timeout to allow it.
- lib670: avoid double check result
+- runtests: rename server command file
- Closes #8660
+ The name ftpserver.cmd was historical and has been used for more than
+ ftp for many years now. Rename it to plain server.cmd to reduce
+ confusion.
-- vtls: use a generic "ALPN, server accepted" message
+- tests: improve reliability of TFTP tests
- Closes #8657
+ Stop checking the timeout used by the client under test (for most
+ tests). The timeout will change if the TFTP test server is slow (such as
+ happens on an overprovisioned CI server) because the client will retry
+ and reduce its timeout, and the actual value is not important for most
+ tests.
-- vtls: use a backend standard message for "ALPN: offers %s"
+ test285 is changed a different way, by increasing the connect timeout.
+ This improves test coverage by allowing the changed timeout value to be
+ checked, but improves reliability with a carefully-chosen timeout that
+ not only allows twice the time to respond as before, but also allows
+ several retries before the client will change its timeout value.
- I call it VTLS_INFOF_ALPN_OFFER_1STR, the '1str' meaning that the
- infof() call also needs a string argument: the ALPN ID.
+ Ref: #11328
- Closes #8657
+Daniel Stenberg (19 Jun 2023)
-- [Christian Schmitz brought this change]
+- cf-socket: skip getpeername()/getsockname for TFTP
- strcase.h: add comment about the return code
+ Since the socket is not connected then the call fails. When the call
+ fails, failf() is called to write an error message that is then
+ surviving and is returned when the *real* error occurs later. The
+ earlier, incorrect, error therefore hides the actual error message.
- Tool often we run into expecting this to work like strcmp, but it
- returns 1 instead of 0 for match.
+ This could be seen in stderr for test 1007
- Closes #8658
+ Test 1007 has now been extended to verify the stderr message.
-- vtls: provide a unified APLN-disagree string for all backends
+ Closes #11332
- Also rephrase to make it sound less dangerous:
+- example/crawler: make it use a few more options
- "ALPN: server did not agree on a protocol. Uses default."
+ For show, but reasonable
- Reported-by: Nick Coghlan
- Fixes #8643
- Closes #8651
+- libcurl-ws.3: mention raw mode
-- projects/README: converted to markdown
+ Closes #11339
- Closes #8652
+- example/default-scheme: set the default scheme for schemeless URLs
-- misc: spelling fixes
+ Closes #11338
- Mostly in comments but also in the -w documentation for headers_json.
+- example/hsts-preload: show one way to HSTS preload
- Closes #8647
+ Closes #11337
-- KNOW_BUGS: HTTP3/Transfer closed with n bytes remaining to read
+- examples/http-options: show how to send "OPTIONS *"
- "HTTP/3 does not support client certs" considered fixed, at least with
- the ngtcp2 backend.
+ With CURLOPT_REQUEST_TARGET.
- Closes #8523
+ Also add use of CURLOPT_QUICK_EXIT to show.
-- CURLOPT_PREQUOTE.3: only works for FTP file transfers, not dirs
+ Closes #11333
- Also add to quote.d. Add to TODO as something to add in a future.
+- examples: make use of CURLOPT_(REDIR_|)PROTOCOLS_STR
- Reported-by: anon00000000 on github
- Closes #8602
- Closes #8648
+ To show how to use them
+
+ Closes #11334
+
+- examples/smtp-mime: use CURLOPT_MAIL_RCPT_ALLOWFAILS
+
+ For show
+
+ Closes #11335
+
+- http: rectify the outgoing Cookie: header field size check
+
+ Previously it would count the size of the entire outgoing request and
+ not just the size of only the Cookie: header field - which was the
+ intention.
+
+ This could make the check be off by several hundred bytes in some cases.
+
+ Closes #11331
+
+Jay Satiro (17 Jun 2023)
+
+- lib: fix some format specifiers
+
+ - Use CURL_FORMAT_CURL_OFF_T where %zd was erroneously used for some
+ curl_off_t variables.
+
+ - Use %zu where %zd was erroneously used for some size_t variables.
+
+ Prior to this change some of the Windows CI tests were failing because
+ in Windows 32-bit targets have a 32-bit size_t and a 64-bit curl_off_t.
+ When %zd was used for some curl_off_t variables then only the lower
+ 32-bits was read and the upper 32-bits would be read for part or all of
+ the next specifier.
+
+ Fixes https://github.com/curl/curl/issues/11327
+ Closes https://github.com/curl/curl/pull/11321
+
+Marcel Raad (16 Jun 2023)
+
+- test427: add `cookies` feature and keyword
+
+ This test doesn't work with `--disable-cookies`.
+
+ Closes https://github.com/curl/curl/pull/11320
+
+Chris Talbot (15 Jun 2023)
+
+- imap: Provide method to disable SASL if it is advertised
+
+ - Implement AUTH=+LOGIN for CURLOPT_LOGIN_OPTIONS to prefer plaintext
+ LOGIN over SASL auth.
+
+ Prior to this change there was no method to be able to fall back to
+ LOGIN if an IMAP server advertises SASL capabilities. However, this may
+ be desirable for e.g. a misconfigured server.
+
+ Per: https://www.ietf.org/rfc/rfc5092.html#section-3.2
+
+ ";AUTH=<enc-auth-type>" looks to be the correct way to specify what
+ authenication method to use, regardless of SASL or not.
+
+ Closes https://github.com/curl/curl/pull/10041
+
+Daniel Stenberg (15 Jun 2023)
- RELEASE-NOTES: synced
-- pop3/smtp: return *WEIRD_SERVER_REPLY when not understood
+- examples/multi-debugcallback.c: avoid the bool typedef
+
+ Apparently this cannot be done in c23
+
+ Reported-by: Cristian Rodríguez
+ Fixes #11299
+ Closes #11319
+
+- docs/libcurl/libcurl.3: cleanups and improvements
+
+ Closes #11317
+
+- libcurl-ws.3: fix typo
+
+- curl_ws_*.3: enhance
+
+ - all: SEE ALSO the libcurl-ws man page
+ - send: add example and return value information
+ - meta: mention that the returned data is read-only
+
+ Closes #11318
+
+- docs/libcurl/libcurl-ws.3: see also CURLOPT_WS_OPTIONS
+
+- docs/libcurl/libcurl-ws.3: minor polish
+
+- libcurl-ws.3. WebSocket API overview
+
+ Closes #11314
+
+- libcurl-url.3: also mention CURLUPART_ZONEID
+
+ ... and sort the two part-using lists alphabetically
+
+Marcel Raad (14 Jun 2023)
+
+- fopen: fix conversion warning on 32-bit Android
+
+ When building for 32-bit ARM or x86 Android, `st_mode` is defined as
+ `unsigned int` instead of `mode_t`, resulting in a
+ -Wimplicit-int-conversion clang warning because `mode_t` is
+ `unsigned short`. Add a cast to silence the warning.
+
+ Ref: https://android.googlesource.com/platform/bionic/+/refs/tags/ndk-r25c/li
+ bc/include/sys/stat.h#86
+ Closes https://github.com/curl/curl/pull/11313
+
+- http2: fix variable type
+
+ `max_recv_speed` is `curl_off_t`, so using `size_t` might result in
+ -Wconversion GCC warnings for 32-bit `size_t`. Visible in the NetBSD
+ ARM autobuilds.
+
+ Closes https://github.com/curl/curl/pull/11312
+
+Daniel Stenberg (13 Jun 2023)
+
+- vtls: fix potentially uninitialized local variable warnings
- This leaves the CURLE_RECV_ERROR error code for explicit failure to
- receive network data and allows users to better separate the problems.
+ Follow-up from a4a5e438ae533c
- Ref #8356
- Reported-by: Rianov Viacheslav
- Closes #8506
+ Closes #11310
-- docs: lots of minor language polish
+- timeval: use CLOCK_MONOTONIC_RAW if available
- Mostly based on recent language decisions from "everything curl":
+ Reported-by: Harry Sintonen
+ Ref: #11288
+ Closes #11291
+
+Stefan Eissing (12 Jun 2023)
+
+- tool: add curl command line option `--trace-ids`
+
+ - added and documented --trace-ids to prepend (after the timestamp)
+ the transfer and connection identifiers to each verbose log line
+ - format is [n-m] with `n` being the transfer id and `m` being the
+ connection id. In case there is not valid connection id, print 'x'.
+ - Log calls with a handle that has no transfer id yet, are written
+ without any ids.
+
+ Closes #11185
+
+- lib: add CURLINFO_CONN_ID and CURLINFO_XFER_ID
+
+ - add an `id` long to Curl_easy, -1 on init
+ - once added to a multi (or its own multi), it gets
+ a non-negative number assigned by the connection cache
+ - `id` is unique among all transfers using the same
+ cache until reaching LONG_MAX where it will wrap
+ around. So, not unique eternally.
+ - CURLINFO_CONN_ID returns the connection id attached to
+ data or, if none present, data->state.lastconnect_id
+ - variables and type declared in tool for write out
- - remove contractions (isn't => is not)
- - *an* HTTP (consistency)
- - runtime (no hyphen)
- - backend (no hyphen)
- - URL is uppercase
+ Closes #11185
- Closes #8646
+Daniel Stenberg (12 Jun 2023)
-Jay Satiro (29 Mar 2022)
-- projects: Update VC version names for VS2017, VS2022
+- CURLOPT_INFILESIZE.3: mention -1 triggers chunked
- - Rename VC15 -> VC14.10, VC17 -> VC14.30.
+ Ref: #11300
+ Closes #11304
- The projects directory that holds the pre-generated Visual Studio
- project files uses VC<ver> to indicate the MSVC version. At some point
- support for Visual Studio 2017 (Visual Studio version 15 which uses MSVC
- 14.10) was added as VC15. Visual Studio 2022 (Visual Studio version 17
- which uses MSVC 14.30) project files were recently added and followed
- that same format using VC17.
+Philip Heiduck (12 Jun 2023)
- There is no such MSVC version (yet) as VC15 or VC17.
+- CI: openssl-3.0.9+quic
- For VS 2017 for example, the name we use is correct as either VS17,
- VS2017, VC14.10. I opted for the latter since we use VC for earlier
- versions (eg VC10, VC12, etc).
+ Closes #11296
- Ref: https://github.com/curl/curl/pull/8438#issuecomment-1037070192
+Karthikdasari0423 (12 Jun 2023)
- Closes https://github.com/curl/curl/pull/8447
+- HTTP3.md: update openssl version
-Daniel Stenberg (29 Mar 2022)
-- mqtt: better handling of TCP disconnect mid-message
+ Closes #11297
- Reported-by: Jenny Heino
- Bug: https://hackerone.com/reports/1521610
- Closes #8644
+Daniel Stenberg (12 Jun 2023)
-- CURLOPT_DISALLOW_USERNAME_IN_URL.3: use uppercase URL
+- vtls: avoid memory leak if sha256 call fails
-- [Ian Blanes brought this change]
+ ... in the pinned public key handling function.
- docs/DYNBUF: clarify documentation for Curl_dyn_ptr and Curl_dyn_uptr
+ Reported-by: lizhuang0630 on github
+ Fixes #11306
+ Closes #11307
- Closes #8606
+- examples/ipv6: disable on win32
-- [Ian Blanes brought this change]
+ I can't make if_nametoindex() work there
- curl: fix segmentation fault for empty output file names.
+ Follow-up to c23dc42f3997acf23
- Function glob_match_url set *result to NULL when called with filename =
- "", producing an indirect NULL pointer dereference.
+ Closes #11305
- Closes #8606
+- tool_operate: allow cookie lines up to 8200 bytes
-- TODO: Read keys from ~/.ssh/id_ecdsa, id_ed25519
+ Since this option might set multiple cookies in the same line, it does
+ not make total sense to cap this at 4096 bytes, which is the limit for a
+ single cookie name or value.
- It would be nice to expand the list of key locations curl uses for the
- newer key types supported by libssh2.
+ Closes #11303
- Closes #8586
+- test427: verify sending more cookies than fit in a 8190 bytes line
-- ngtcp2: update to work after recent ngtcp2 updates
+ curl will then only populate the header with cookies that fit, dropping
+ ones that otherwise would have been sent
- Assisted-by: Tatsuhiro Tsujikawa
- Reported-by: jurisuk on github
- Fixes #8638
- Closes #8639
+ Ref: https://curl.se/mail/lib-2023-06/0020.html
-- [Farzin brought this change]
+ Closes #11303
- CURLOPT_PROGRESSFUNCTION.3: fix typo in example
+- testutil: allow multiple %-operators on the same line
- Closes #8636
+ Closes #11303
-- curl/header_json: output the header names in lowercase
+Oleg Jukovec (12 Jun 2023)
- To better allow json[“headerâ€].
+- docs: update CURLOPT_UPLOAD.3
- Reported-by: Peter Korsgaard
- Bug: https://daniel.haxx.se/blog/2022/03/24/easier-header-picking-with-curl/comment-page-1/#comment-25878
- Closes #8633
+ The behavior of CURLOPT_UPLOAD differs from what is described in the
+ documentation. The option automatically adds the 'Transfer-Encoding:
+ chunked' header if the upload size is unknown.
+
+ Closes #11300
+
+Daniel Stenberg (12 Jun 2023)
- RELEASE-NOTES: synced
-- headers.h: make Curl_headers_push() be CURLE_OK when not built
+- CURLOPT_AWS_SIGV4.3: remove unused variable from example
- ... to avoid errors when the function isn't there.
+ Closes #11302
- Reported-by: Marcel Raad
- Fixes #8627
- Closes #8628
+- examples/https.c: use CURLOPT_CA_CACHE_TIMEOUT
-- scripts: move three scripts from lib/ to scripts/
+ for demonstration purposes
- Move checksrc.pl, firefox-db2pem.sh and mk-ca-bundle.pl since they don't
- particularly belong in lib/
+ Closes #11290
- Also created an EXTRA_DIST= in scripts/Makefile.am instead of specifying
- those files in the root Makefile.am
+- example/ipv6: feature CURLOPT_ADDRESS_SCOPE in use
- Closes #8625
+ Closes #11282
-Marc Hoersken (23 Mar 2022)
-- lib/warnless.[ch]: only check for WIN32 and ignore _WIN32
+Karthikdasari0423 (10 Jun 2023)
- curl_setup.h automatically defines WIN32 if just _WIN32 is defined.
+- docs: Update HTTP3.md for newer ngtcp2 and nghttp3
- Therefore make sure curl_setup.h is included through warnless.h.
+ Follow-up to fb9b9b58
- Reviewed-by: Daniel Stenberg
- Reviewed-by: Jay Satiro
+ Ref: #11184
+ Closes #11295
- Closes #8594
+Dan Fandrich (10 Jun 2023)
-- tests/server/util.h: align WIN32 condition with util.c
+- docs: update the supported ngtcp2 and nghttp3 versions
- There is no need to test for both _WIN32 and WIN32 as curl_setup.h
- automatically defines the later if the first one is defined.
+ Follow-up to cae9d10b
- Also tests/server/util.c is only checking for WIN32 arouund the
- implementation of win32_perror, so just defining _WIN32
- would not be sufficient for a successful compilation.
+ Ref: #11184
+ Closes #11294
- Reviewed-by: Daniel Stenberg
- Reviewed-by: Jay Satiro
+- tests: fix error messages & handling around sockets
+
+ The wrong error code was checked on Windows on UNIX socket failures,
+ which could have caused all UNIX sockets to be reported as having
+ errored and the tests therefore skipped. Also, a useless error message
+ was displayed on socket errors in many test servers on Windows because
+ strerror() doesn't work on WinSock error codes; perror() is overridden
+ there to work on all errors and is used instead.
+
+ Ref #11258
+ Closes #11265
- Closes #8594
+Daniel Stenberg (9 Jun 2023)
-Daniel Stenberg (22 Mar 2022)
-- [Philip Heiduck brought this change]
+- CURLOPT_SSH_PRIVATE_KEYFILE.3: expand on the file search
- firefox-db2pem.sh: make the shell script safer
+ Reported-by: atjg on github
+ Ref: #11287
+ Closes #11289
- Reported by lift
+Stefan Eissing (9 Jun 2023)
- Closes #8616
+- ngtcp2: use ever increasing timestamp in io
-Jay Satiro (22 Mar 2022)
-- gtls: fix build for disabled TLS-SRP
+ - ngtcp2 v0.16.0 asserts that timestamps passed to its function
+ will only ever increase.
+ - Use a context shared between ingress/egress operations that
+ uses a shared timestamp, regularly updated during calls.
- Prior to this change if, at build time, the GnuTLS backend was found to
- have TLS-SRP support (HAVE_GNUTLS_SRP) but TLS-SRP was disabled in curl
- via --disable-tls-srp (!USE_TLS_SRP) then a build error would occur.
+ Closes #11288
- Bug: https://curl.se/mail/lib-2022-03/0046.html
- Reported-by: Robert Brose
+Daniel Stenberg (9 Jun 2023)
- Closes https://github.com/curl/curl/pull/8604
+- GHA: use nghttp2 1.54.0 for the ngtcp2 jobs
-- winbuild: Add a Visual Studio example to the README
+Philip Heiduck (9 Jun 2023)
- - Add an example that explains in detail how the user can add libcurl to
- their Visual Studio project.
+- GHA: ngtcp2: use 0.16.0 and nghttp3 0.12.0
- Ref: https://github.com/curl/curl/issues/8591
+Daniel Stenberg (9 Jun 2023)
- Closes https://github.com/curl/curl/pull/8592
+- ngtcp2: build with 0.16.0 and nghttp3 0.12.0
-- docs/opts: Mention Schannel client cert type is P12
+ - moved to qlog_write
+ - crypto => encryption
+ - CRYPTO => ENCRYPTION
+ - removed "_is_"
+ - ngtcp2_conn_shutdown_stream_read and
+ ngtcp2_conn_shutdown_stream_write got flag arguments
+ - the nghttp3_callbacks struct got a recv_settings callback
- Schannel backend code behaves same as Secure Transport, it expects a P12
- certificate file or the name of a certificate already in the user's OS
- key store. Also, both backends ignore CURLOPT_SSLKEY (tool: --key)
- because they expect the private key to already be available from the
- keystore or P12 certificate.
+ Closes #11184
- Ref: https://github.com/curl/curl/discussions/8581#discussioncomment-2337260
+- example/http2-download: set CURLOPT_BUFFERSIZE
- Closes https://github.com/curl/curl/pull/8587
+ Primarily because no other example sets it, and remove the disabling of
+ the certificate check because we should not recommend that.
-Daniel Stenberg (22 Mar 2022)
-- lib1945: fix compiler warning 4706 on MSVC
+ Closes #11284
- Follow-up from d1e4a677340c
+- example/crawler: also set CURLOPT_AUTOREFERER
- Closes #8623
+ Could make sense, and it was not used in any example before.
-- [Philip Heiduck brought this change]
+ Closes #11283
- ci/event-based.yml: improve impacket install
+Wyatt OʼDay (9 Jun 2023)
- skip python3-pip
- install impacket with library module
+- tls13-ciphers.d: include Schannel
- Closes #8621
+ Closes #11271
-- test1459: disable for oldlibssh
+Daniel Stenberg (9 Jun 2023)
- This test with libssh 0.9.3 works fine on github but fails on circleci.
- Might as well disable this test for oldlibssh installations.
+- curl_pushheader_byname/bynum.3: document in their own man pages
- Closes #8622
+ These two functions were added in 7.44.0 when CURLMOPT_PUSHFUNCTION was
+ introduced but always lived a life in the shadows, embedded in the
+ CURLMOPT_PUSHFUNCTION man page. Until now.
-- test1135: sync with recent API updates
+ It makes better sense and gives more visibility to document them in
+ their own stand-alone man pages.
- This test verifies that the order of functions in public headers remain
- the same but hasn't been updated to care for recently added header
- files. The order is important for some few platforms - or VERSIONINFO
- needs to updated.
+ Closes #11286
- This fix also updates VERSIONINFO to be sure.
+- curl_mprintf.3: minor fix of the example
- Closes #8620
+- curl_url_set: enforce the max string length check for all parts
-- curl_easy_nextheader.3: fix two typos
+ Update the docs and test 1559 accordingly
- Reported-by: Timothe Litt
- Bug: https://curl.se/mail/lib-2022-03/0060.html
+ Closes #11273
-- options: remove mistaken space before paren in prototype
+- examples/ftpuploadresume.c: add use of CURLOPT_ACCEPTTIMEOUT_MS
-- cirrus: add --enable-headers-api for some windows builds
+ For show
-- GHA: --enable-headers-api in all workflows
+ Closes #11277
-- lib: make the headers API depend on --enable-headers-api
+- examples/unixsocket.c: example using CURLOPT_UNIX_SOCKET_PATH
-- configure: add --enable-headers-api to enable the headers API
+ and alternatively CURLOPT_ABSTRACT_UNIX_SOCKET
- Defaults to disabled while labeled EXPERIMENTAL.
+ Closes #11276
- Make all the headers API tests require 'headers-api' to run.
+Anssi Kolehmainen (8 Jun 2023)
-- test1671: verify -w '%{header_json}
+- docs: fix missing parameter names in examples
-- test1670: verify -w %header{}
+ Closes #11278
-- curl: add %{header_json} support in -w handling
+Daniel Stenberg (8 Jun 2023)
- Outputs all response headers as a JSON object.
+- urlapi: have *set(PATH) prepend a slash if one is missing
-- curl: add %header{name} support in -w handling
+ Previously the code would just do that for the path when extracting the
+ full URL, which made a subsequent curl_url_get() of the path to
+ (unexpectedly) still return it without the leading path.
- Outputs the response header 'name'
+ Amend lib1560 to verify this. Clarify the curl_url_set() docs about it.
-- header api: add curl_easy_header and curl_easy_nextheader
+ Bug: https://curl.se/mail/lib-2023-06/0015.html
+ Closes #11272
+ Reported-by: Pedro Henrique
- Add test 1940 to 1946 to verify.
+Dan Fandrich (7 Jun 2023)
- Closes #8593
+- runtests; give each server a unique log lock file
-- test1459: remove the different exit code for oldlibssh
+ Logs are written by several servers and all of them must be finished
+ writing before the test results can be determined. This means each
+ server must have its own lock file rather than sharing a single one,
+ which is how it was done up to now. Previously, the first server to
+ complete a test would clear the lock before the other server was done,
+ which caused flaky tests.
- When using libssh/0.9.3/openssl/zlib, we seem to be getting the "right"
- error code.
+ Lock files are now all found in their own directory, so counting locks
+ equals counting the files in that directory. The result is that the
+ proxy logs are now reliably written which actually changes the expected
+ output for two tests.
- Closes #8490
+ Fixes #11231
+ Closes #11259
-- libssh: unstick SFTP transfers when done event-based
+- runtests: make test file directories in log/N
- Test 604 and 606 (at least).
+ Test files in subdirectories were not created after parallel test log
+ directories were moved down a level due to a now-bad comparison.
- Closes #8490
+ Follow-up to 92d7dd39
-- gha: move the event-based test over from Zuul
+ Ref #11264
+ Closes #11267
- Switched libssh2 to libssh
+Daniel Stenberg (7 Jun 2023)
- Closes #8490
+- ws: make the curl_ws_meta() return pointer a const
+
+ The returned info is read-only for the user.
+
+ Closes #11261
- RELEASE-NOTES: synced
-- http: return error on colon-less HTTP headers
+- runtests: move parallel log dirs from logN to log/N
+
+ Having several hundreds of them in there gets annoying.
- It's a protocol violation and accepting them leads to no good.
+ Closes #11264
- Add test case 398 to verify
+Dan Fandrich (7 Jun 2023)
- Closes #8610
+- test447: move the test file into %LOGDIR
-- test718: edited slightly to return better HTTP
+Viktor Szakats (7 Jun 2023)
- Since hyper is picky and won't play ball otherwise.
+- cmake: add support for "unity" builds
- Bug: https://github.com/hyperium/hyper/issues/2783
- Reported-by: Daniel Valenzuela
- Closes #8614
+ Aka "jumbo" or "amalgamation" builds. It means to compile all sources
+ per target as a single C source. This is experimental.
-- hyper: no h2c support
+ You can enable it by passing `-DCMAKE_UNITY_BUILD=ON` to cmake.
+ It requires CMake 3.16 or newer.
- Make tests require h2c feature present to run, and only set h2c if
- nghttp2 is used in the build. Hyper does not support it.
+ It makes builds (much) faster, allows for better optimizations and tends
+ to promote less ambiguous code.
- Remove those tests from DISABLED
+ Also add a new AppVeyor CI job and convert an existing one to use
+ "unity" mode (one MSVC, one MinGW), and enable it for one macOS CI job.
- Fixes #8605
- Closes #8613
+ Fix related issues:
+ - add missing include guard to `easy_lock.h`.
+ - rename static variables and functions (and a macro) with names reused
+ across sources, or shadowed by local variables.
+ - add an `#undef` after use.
+ - add a missing `#undef` before use.
+ - move internal definitions from `ftp.h` to `ftp.c`.
+ - `curl_memory.h` fixes to make it work when included repeatedly.
+ - stop building/linking curlx bits twice for a static-mode curl tool.
+ These caused doubly defined symbols in unity builds.
+ - silence missing extern declarations compiler warning for ` _CRT_glob`.
+ - fix extern declarations for `tool_freq` and `tool_isVistaOrGreater`.
+ - fix colliding static symbols in debug mode: `debugtime()` and
+ `statename`.
+ - rename `ssl_backend_data` structure to unique names for each
+ TLS-backend, along with the `ssl_connect_data` struct member
+ referencing them. This required adding casts for each access.
+ - add workaround for missing `[P]UNICODE_STRING` types in certain Windows
+ builds when compiling `lib/ldap.c`. To support "unity" builds, we had
+ to enable `SCHANNEL_USE_BLACKLISTS` for Schannel (a Windows
+ `schannel.h` option) _globally_. This caused an indirect inclusion of
+ Windows `schannel.h` from `ldap.c` via `winldap.h` to have it enabled
+ as well. This requires `[P]UNICODE_STRING` types, which is apperantly
+ not defined automatically (as seen with both MSVS and mingw-w64).
+ This patch includes `<subauth.h>` to fix it.
+ Ref: https://github.com/curl/curl/runs/13987772013
+ Ref: https://dev.azure.com/daniel0244/curl/_build/results?buildId=15827&vie
+ w=logs&jobId=2c9f582d-e278-56b6-4354-f38a4d851906&j=2c9f582d-e278-56b6-4354-f
+ 38a4d851906&t=90509b00-34fa-5a81-35d7-5ed9569d331c
+ - tweak unity builds to compile `lib/memdebug.c` separately in memory
+ trace builds to avoid PP confusion.
+ - force-disable unity for test programs.
+ - do not compile and link libcurl sources to libtests _twice_ when libcurl
+ is built in static mode.
-- configure: bump the copyright year range int the generated output
+ KNOWN ISSUES:
+ - running tests with unity builds may fail in cases.
+ - some build configurations/env may not compile in unity mode. E.g.:
+ https://ci.appveyor.com/project/curlorg/curl/builds/47230972/job/51wfesgnfu
+ auwl8q#L250
-- [Andreas Falkenhahn brought this change]
+ Ref: https://github.com/libssh2/libssh2/issues/1034
+ Ref: https://cmake.org/cmake/help/latest/prop_tgt/UNITY_BUILD.html
+ Ref: https://en.wikipedia.org/wiki/Unity_build
- BINDINGS.md: add Hollywood binding
+ Closes #11095
- Closes #8609
+Daniel Stenberg (7 Jun 2023)
-- HISTORY: add some 2022 data
+- examples/websocket.c: websocket example using CONNECT_ONLY
-- scripts/copyright.pl: ignore the new mlc_config.json file
+ Closes #11262
-- [Philip Heiduck brought this change]
+- websocket-cb: example doing WebSocket download using callback
- mlc_config.json: add file to ignore known troublesome URLs
+ Very basic
- This is the config file for the CI markdown link checker and lets us
- filter URLs that are known to cause problems. Like
- https://curl.zuul.vexxhost.dev/ for now.
+ Closes #11260
- Closes #8597
+- test/.gitignore: ignore log*
-- [Philip Heiduck brought this change]
+Dan Fandrich (5 Jun 2023)
- winbuild/README.md: fixup dead link
+- runtests: document the -j parallel testing option
- Closes #8597
+ Reported-by: Daniel Stenberg
+ Ref: #10818
+ Closes #11255
-Jay Satiro (18 Mar 2022)
-- rtsp: don't let CSeq error override earlier errors
+- runtests: create multiple test runners when requested
- - When done, if an error has already occurred then don't check the
- sequence numbers for mismatch.
+ Parallel testing is enabled by using a nonzero value for the -j option
+ to runtests.pl. Performant values seem to be about 7*num CPU cores, or
+ 1.3*num CPU cores if Valgrind is in use.
- A sequence number may not have been received if an error occurred.
+ Flaky tests due to improper log locking (bug #11231) are exacerbated
+ while parallel testing, so it is not enabled by default yet.
- Prior to this change a sequence mismatch error would override earlier
- errors. For example, a server that returns nothing would cause error
- CURLE_GOT_NOTHING in Curl_http_done which was then overridden by
- CURLE_RTSP_CSEQ_ERROR in rtsp_done.
+ Fixes #10818
+ Closes #11246
- Closes https://github.com/curl/curl/pull/8525
+- runtests: handle repeating tests in multiprocess mode
-- lib: fix some misuse of curlx_convert_wchar_to_UTF8
+ Such as what happens with the --repeat option. Some functions are
+ changed to pass the runner ID instead of relying on the non-unique test
+ number.
- curlx_convert_wchar_to_UTF8 must be freed by curlx_unicodefree, but
- prior to this change some uses mistakenly called free.
+ Ref: #10818
- I've reviewed all other uses of curlx_convert_wchar_to_UTF8 and
- curlx_convert_UTF8_to_wchar.
+- runtests: buffer logmsg while running singletest()
- Ref: https://github.com/curl/curl/commit/1d5d0ae
+ This allows all messages relating to a single test case to be displayed
+ together at the end of the test.
- Closes https://github.com/curl/curl/pull/8521
+ Ref: #10818
-- mk-ca-bundle.pl: Use stricter logic to process the certificates
+- runtests: call initserverconfig() in the runner
- .. and bump version to 1.29.
+ This must be done so variables pick up the runner's unique $LOGDIR.
- This change makes the script properly ignore unknown blocks and
- otherwise fail when Mozilla changes the certdata format in ways we
- don't expect. Though this is less flexible behavior it makes it far less
- likely that an invalid certificate can slip through.
+ Ref: #10818
- Prior to this change the state machine did not always properly reset,
- and it was possible that a certificate marked as invalid could then
- later be marked as valid when there was conflicting trust info or
- an unknown block was erroneously processed as part of the certificate.
+- runtests: use a per-runner random seed
- Ref: https://github.com/curl/curl/pull/7801#pullrequestreview-768384569
+ Each runner needs a unique random seed to reduce the chance of port
+ number collisions. The new scheme uses a consistent per-runner source of
+ randomness which results in deterministic behaviour, as it did before.
- Closes https://github.com/curl/curl/pull/8411
+ Ref: #10818
-Marcel Raad (17 Mar 2022)
-- test375: fix line endings on Windows
+- runtests: complete main test loop refactor for multiple runners
- Closes https://github.com/curl/curl/pull/8599
+ The main test loop is now able to handle multiple runners, or no
+ additional runner processes at all. At most one process is still
+ created, however.
-Daniel Stenberg (17 Mar 2022)
-- http: reject header contents with nul bytes
+ Ref: #10818
- They are not allowed by the protocol and allowing them risk that curl
- misbehaves somewhere where C functions are used but won't work on the
- full contents. Further, they are not supported by hyper and they cause
- problems for the new coming headers API work.
+- runtests: prepare main test loop for multiple runners
- Updated test 262 to verify and enabled it for hyper as well
+ Some variables are expanded to arrays and hashes so that multiple
+ runners can be used for running tests.
- Closes #8601
+ Ref: #10818
-- [Philip Heiduck brought this change]
+Stefan Eissing (5 Jun 2023)
- CI: Do not use buildconf. Instead, just use: autoreconf -fi
+- bufq: make write/pass methods more robust
- Closes #8596
+ - related to #11242 where curl enters busy loop when
+ sending http2 data to the server
-- RELEASE-NOTES: synced
+ Closes #11247
+
+Boris Verkhovskiy (5 Jun 2023)
-Jay Satiro (14 Mar 2022)
-- libssh: Improve fix for missing SSH_S_ stat macros
+- tool_getparam: fix comment
- - If building libcurl against an old libssh version missing SSH_S_IFMT
- and SSH_S_IFLNK then use the values from a supported version.
+ Closes #11253
- Prior to this change if libssh did not define SSH_S_IFMT and SSH_S_IFLNK
- then S_IFMT and S_IFLNK, respectively, were used instead. The problem
- with that is the user's S_ stat macros don't have the same values across
- platforms. For example Windows has values different from Linux.
+Raito Bezarius (5 Jun 2023)
- Follow-up to 7b0fd39.
+- haproxy: add --haproxy-clientip flag to spoof client IPs
- Ref: https://github.com/curl/curl/pull/8511#discussion_r815292391
- Ref: https://github.com/curl/curl/pull/8574
+ CURLOPT_HAPROXY_CLIENT_IP in the library
- Closes https://github.com/curl/curl/pull/8588
+ Closes #10779
-Marc Hoersken (13 Mar 2022)
-- tool and tests: force flush of all buffers at end of program
+Daniel Stenberg (5 Jun 2023)
+
+- curl: add --ca-native and --proxy-ca-native
+
+ These are two boolean options to ask curl to use the native OS's CA
+ store when verifying TLS servers. For peers and for proxies
+ respectively.
- On Windows data can be lost in buffers in case of abnormal program
- termination, especially in process chains as seen due to flaky tests.
- Therefore flushing all buffers manually should avoid this data loss.
+ They currently only have an effect for curl on Windows when built to use
+ OpenSSL for TLS.
- In the curl tool we play the safe game by only flushing write buffers,
- but in the testsuite where we manage all buffers, we flush everything.
+ Closes #11049
- This should drastically reduce Windows CI and testsuite flakiness.
+Viktor Szakats (5 Jun 2023)
+- build: drop unused/redundant `HAVE_WINLDAP_H`
+
+ Sources did not use it. Autotools used it when checking for the
+ `winldap` library, which is redundant.
+
+ With CMake, detection was broken:
+ ```
+ Run Build Command(s):/usr/local/Cellar/cmake/3.26.3/bin/cmake -E env VERBOSE=
+ 1 /usr/bin/make -f Makefile cmTC_2d8fe/fast && /Library/Developer/CommandLine
+ Tools/usr/bin/make -f CMakeFiles/cmTC_2d8fe.dir/build.make CMakeFiles/cmTC_2
+ d8fe.dir/build
+ Building C object CMakeFiles/cmTC_2d8fe.dir/HAVE_WINLDAP_H.c.obj
+ /usr/local/opt/llvm/bin/clang --target=x86_64-w64-mingw32 --sysroot=/usr/loca
+ l/opt/mingw-w64/toolchain-x86_64 -D_WINSOCKAPI_="" -I/my/quictls/x64-ucrt/usr
+ /include -I/my/zlib/x64-ucrt/usr/include -I/my/brotli/x64-ucrt/usr/include -W
+ no-unused-command-line-argument -D_UCRT -DCURL_HIDDEN_SYMBOLS -DHAVE_SSL_SE
+ T0_WBIO -DHAS_ALPN -DNGHTTP2_STATICLIB -DNGHTTP3_STATICLIB -DNGTCP2_STATICLIB
+ -DUSE_MANUAL=1 -fuse-ld=lld -Wl,-s -static-libgcc -lucrt -Wextra -Wall -p
+ edantic -Wbad-function-cast -Wconversion -Winline -Wmissing-declarations -Wmi
+ ssing-prototypes -Wnested-externs -Wno-long-long -Wno-multichar -Wpointer-ari
+ th -Wshadow -Wsign-compare -Wundef -Wunused -Wwrite-strings -Wcast-align -Wde
+ claration-after-statement -Wempty-body -Wendif-labels -Wfloat-equal -Wignored
+ -qualifiers -Wno-format-nonliteral -Wno-sign-conversion -Wno-system-headers -
+ Wstrict-prototypes -Wtype-limits -Wvla -Wshift-sign-overflow -Wshorten-64-to-
+ 32 -Wdouble-promotion -Wenum-conversion -Wunused-const-variable -Wcomma -Wmis
+ sing-variable-declarations -Wassign-enum -Wextra-semi-stmt -MD -MT CMakeFile
+ s/cmTC_2d8fe.dir/HAVE_WINLDAP_H.c.obj -MF CMakeFiles/cmTC_2d8fe.dir/HAVE_WINL
+ DAP_H.c.obj.d -o CMakeFiles/cmTC_2d8fe.dir/HAVE_WINLDAP_H.c.obj -c /my/curl/b
+ ld-cmake-llvm-x64-shared/CMakeFiles/CMakeScratch/TryCompile-3JP6dR/HAVE_WINLD
+ AP_H.c
+ In file included from /my/curl/bld-cmake-llvm-x64-shared/CMakeFiles/CMakeScra
+ tch/TryCompile-3JP6dR/HAVE_WINLDAP_H.c:2:
+ In file included from /usr/local/opt/mingw-w64/toolchain-x86_64/x86_64-w64-mi
+ ngw32/include/winldap.h:17:
+ In file included from /usr/local/opt/mingw-w64/toolchain-x86_64/x86_64-w64-mi
+ ngw32/include/schnlsp.h:9:
+ In file included from /usr/local/opt/mingw-w64/toolchain-x86_64/x86_64-w64-mi
+ ngw32/include/schannel.h:10:
+ /usr/local/opt/mingw-w64/toolchain-x86_64/x86_64-w64-mingw32/include/wincrypt
+ .h:5041:254: error: unknown type name 'PSYSTEMTIME'
+ WINIMPM PCCERT_CONTEXT WINAPI CertCreateSelfSignCertificate (HCRYPTPROV_OR_
+ NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey, PCERT_NAME_BLOB pSubjectIssuerBlob,
+ DWORD dwFlags, PCRYPT_KEY_PROV_INFO pKeyProvInfo, PCRYPT_ALGORITHM_IDENTIFIER
+ pSignatureAlgorithm, PSYSTEMTIME pStartTime, PSYSTEMTIME pEndTime, PCERT_EXT
+ ENSIONS pExtensions);
+
+
+
+ ^
+ /usr/local/opt/mingw-w64/toolchain-x86_64/x86_64-w64-mingw32/include/wincrypt
+ .h:5041:278: error: unknown type name 'PSYSTEMTIME'
+ WINIMPM PCCERT_CONTEXT WINAPI CertCreateSelfSignCertificate (HCRYPTPROV_OR_
+ NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey, PCERT_NAME_BLOB pSubjectIssuerBlob,
+ DWORD dwFlags, PCRYPT_KEY_PROV_INFO pKeyProvInfo, PCRYPT_ALGORITHM_IDENTIFIER
+ pSignatureAlgorithm, PSYSTEMTIME pStartTime, PSYSTEMTIME pEndTime, PCERT_EXT
+ ENSIONS pExtensions);
+
+
+
+ ^
+ 2 errors generated.
+ make[1]: *** [CMakeFiles/cmTC_2d8fe.dir/HAVE_WINLDAP_H.c.obj] Error 1
+ make: *** [cmTC_2d8fe/fast] Error 2
+ exitCode: 2
+ ```
+
+ Cherry-picked from #11095 88e4a21ff70ccef391cf99c8165281ff81374503
Reviewed-by: Daniel Stenberg
+ Closes #11245
+
+Daniel Stenberg (5 Jun 2023)
- Supersedes #7833 and #6064
- Closes #8516
+- urlapi: scheme starts with alpha
-Daniel Stenberg (12 Mar 2022)
-- [Jan Venekamp brought this change]
+ Add multiple tests to lib1560 to verify
- BearSSL: add CURLOPT_SSL_CTX_FUNCTION support
+ Fixes #11249
+ Reported-by: ad0p on github
+ Closes #11250
- Closes #8478
+- RELEASE-NOTES: synced
-- [Jan Venekamp brought this change]
+- CURLOPT_MAIL_RCPT_ALLOWFAILS: replace CURLOPT_MAIL_RCPT_ALLLOWFAILS
- BearSSL: add CURLOPT_SSL_CIPHER_LIST support
+ Deprecate the name using three Ls and prefer the name with two.
- Closes #8477
+ Replaces #10047
+ Closes #11218
-Dan Fandrich (11 Mar 2022)
-- tool_cb_hdr: Turn the Location: into a terminal hyperlink
+- tests/servers: generate temp names in /tmp for unix domain sockets
- This turns even relative URLs into clickable hyperlinks in a supported
- terminal when --styled-output is enabled. Many terminals already turn
- URLs into clickable links but there is not enough information in a
- relative URL to do this automatically otherwise.
+ ... instead of putting them in the regular pid directories because
+ systems generally have strict length requirements for the path name to
+ be shorter than 107 bytes and we easily hit that boundary otherwise.
-- keepalive-time.d: It takes many probes to detect brokenness
+ The new concept generates two random names: one for the socks daemon and
+ one for http.
-Daniel Stenberg (11 Mar 2022)
-- [HexTheDragon brought this change]
+ Reported-by: Andy Fiddaman
+ Fixes #11152
+ Closes #11166
- curl: add --no-clobber
+Stefan Eissing (2 Jun 2023)
- Does not overwrite output files if they already exist
+- http2: better support for --limit-rate
- Closes #7708
- Co-authored-by: Daniel Stenberg
+ - leave transfer loop when --limit-rate is in effect and has
+ been received
+ - adjust stream window size to --limit-rate plus some slack
+ to make the server observe the pacing we want
+ - add test case to confirm behaviour
-- RELEASE-NOTES: synced
+ Closes #11115
+
+- curl_log: evaluate log statement only when transfer is verbose
+
+ Closes #11238
+
+Daniel Stenberg (2 Jun 2023)
+
+- libssh2: provide error message when setting host key type fails
- also bump next pending version to become 7.83.0
+ Ref: https://curl.se/mail/archive-2023-06/0001.html
-- [Jean-Philippe Menil brought this change]
+ Closes #11240
- openssl: check SSL_get_peer_cert_chain return value
+Igor Todorovski (2 Jun 2023)
- Signed-off-by: Jean-Philippe Menil <jpmenil@gmail.com>
- Closes #8579
+- system.h: remove __IBMC__/__IBMCPP__ guards and apply to all z/OS compiles
-- [Jay Satiro brought this change]
+ Closes #11241
- mk-ca-bundle.vbs: delete this script in favor of mk-ca-bundle.pl
+Daniel Stenberg (2 Jun 2023)
- mk-ca-bundle.vbs is a Windows-specific script for Mozilla certificate
- extraction, similar to mk-ca-bundle.pl which runs on any platform. The
- vbs version has not been maintained while the perl version has been
- maintained with improvements and security fixes. I don't think it's
- worth the work to maintain both versions. Windows users should be able
- to use mk-ca-bundle.pl without any problems, as long as they have perl.
+- docs/SECURITY-PROCESS.md: link to example of previous critical flaw
- Closes #8412
+Mark Seuffert (2 Jun 2023)
-- CURLSHOPT_UNLOCKFUNC.3: fix the callback prototype
+- README.md: updated link to opencollective
- Copy and paste error
+ Closes #11232
- Reported-by: Francisco Olarte
- Fixes #8573
- Closes #8577
+Daniel Stenberg (1 Jun 2023)
-- remove-on-error.d: typo
+- libssh2: use custom memory functions
- Reported-by: Colin Leroy
- Bug: https://github.com/curl/curl/pull/8503#pullrequestreview-906520081
+ Because of how libssh2_userauth_keyboard_interactive_ex() works: the
+ libcurl callback allocates memory that is later free()d by libssh2, we
+ must set the custom memory functions.
-- curl: add --remove-on-error
+ Reverts 8b5f100db388ee60118c08aa28
- If a transfer returns an error, using this option makes curl remove the
- leftover downloded (partial) local file before exiting.
+ Ref: https://github.com/libssh2/libssh2/issues/1078
+ Closes #11235
- Added test 376 to verify
+- test447: test PUTting a file that grows
- Closes #8503
+ ... and have curl trim the end when it reaches the expected total amount
+ of bytes instead of over-sending.
-- libssh: fix build with old libssh versions
+ Reported-by: JustAnotherArchivist on github
+ Closes #11223
- ... that don't have the SSH_S_* defines. Spotted on a machine using
- libssh 0.7.3
+- curl: count uploaded data to stop at the originally given size
- Closes #8574
+ Closes #11223
+ Fixes #11222
+ Reported-by: JustAnotherArchivist on github
-- hyper: fix status_line() return code
+- tool: remove exclamation marks from error/warning messages
- Detected while working on #7708 that happened to trigger an error here
- with a new test case.
+- tool: use errorf() for error output
- Closes #8572
+ Convert a number of fprintf() calls.
-- [Alejandro R. Sedeño brought this change]
+- tool: remove newlines from all helpf/notef/warnf/errorf calls
- configure.ac: move -pthread CFLAGS setting back where it used to be
+ Make voutf() always add one.
- The fix for #8276 proposed in #8374 set `CFLAGS="$CFLAGS -pthead"`
- earlier than it used to be set, applying it in cases where it should not
- have been applied.
+ Closes #11226
- This moves the AIX XLC check to a new `case $host in` block inside of
- the `if test "$USE_THREADS_POSIX" != "1"` block, where `CFLAGS="$CFLAGS
- -pthead"` used to happen.
+- tests/servers.pm: pick unused port number with a server socket
- Fixes #8541
- Closes #8542
+ This change replaces the previous method of picking a port number at
+ random to try to start servers on, then retrying up to ten times with
+ new random numbers each time, with a function that creates a server
+ socket on port zero, thereby getting a suitable random port set by the
+ kernel. That server socket is then closed and that port number is used
+ to setup the actual test server on.
-- [Tatsuhiro Tsujikawa brought this change]
+ There is a risk that *another* server can be started on the machine in
+ the time gap, but the server verification feature will detect that.
- ngtcp2: add client certificate authentication for OpenSSL
+ Closes #11220
- Closes #8522
+- RELEASE-NOTES: synced
+
+ bump to 8.2.0
+
+Alejandro R. Sedeño (31 May 2023)
+
+- configure: fix run-compiler for old /bin/sh
+
+ If you try to assign and export on the same line on some older /bin/sh
+ implementations, it complains:
+
+ ```
+ $ export "NAME=value"
+ NAME=value: is not an identifier
+ ```
-- tool_operate: fix a scan-build warning
+ This commit rewrites run-compiler's assignments and exports to work with
+ old /bin/sh, splitting assignment and export into two separate
+ statements, and only quote the value. So now we have:
- ... and avoid the temp storing of the return code in a diff variable.
+ ```
+ NAME="value"
+ export NAME
+ ```
- Closes #8565
+ While we're here, make the same change to the two supporting
+ assign+export lines preceeding the script to be consistent with how
+ exports work throughout the rest of configure.ac.
-- test375: verify that --proxy errors out if proxy is disabled in the build
+ Closes #11228
- Closes #8565
+Philip Heiduck (31 May 2023)
-- curl: error out when options need features not present in libcurl
+- circleci: install impacket & wolfssl 5.6.0
- Trying to use a proxy when libcurl was built with proxy support disabled
- should make curl error out properly.
+ Closes #11221
- Remove knowledge of disabled features from the tool code and instead
- make it properly respond to what libcurl returns. Update all tests to
- properly require the necessary features to be present/absent so that the
- test suite can still be run even with libcurl builds with disabled
- features.
+Daniel Stenberg (31 May 2023)
- Ref: https://curl.se/mail/archive-2022-03/0013.html
- Closes #8565
+- tool_urlglob: use curl_off_t instead of longs
-- ngtcp2: disconnect the QUIC connection proper
+ To handle more globs better (especially on Windows)
- Reported-by: mehatzri on github
- Reviewed-by: Tatsuhiro Tsujikawa
- Fixes #8534
- closes #8569
+ Closes #11224
-Dan Fandrich (9 Mar 2022)
-- test386: Fix an incorrect test markup tag
+Dan Fandrich (30 May 2023)
-Daniel Stenberg (9 Mar 2022)
-- [Don J Olmstead brought this change]
+- scripts: Fix GHA matrix job detection in cijobs.pl
- nonblock: restore setsockopt method to curlx_nonblock
+ The parsing is pretty brittle and it broke detecting some jobs at some
+ point. Also, detect if Windows is used in GHA.
- The implementation using setsockopt was removed when BeOS support was
- purged. However this functionality wasn't BeOS specific, it is still
- used by for example Orbis OS (Playstation 4/5 OS).
+- runtests: abort test run after failure without -a
- Closes #8562
+ This was broken in a recent refactor and test runs would not stop.
-- openssl: fix CN check error code
+ Follow-up to d4a1b5b6
- Due to a missing 'else' this returns error too easily.
+ Reported-by: Daniel Stenberg
+ Fixes #11225
+ Closes #11227
- Regressed in: d15692ebb
+Version 8.1.2 (30 May 2023)
- Reported-by: Kristoffer Gleditsch
- Fixes #8559
- Closes #8560
+Daniel Stenberg (30 May 2023)
-- [Frank Meier brought this change]
+- RELEASE-NOTES: synced
- connect: make Curl_getconnectinfo work with conn cache from share handle
+ 8.1.2 release
- Closes #8524
+- THANKS: contributors from 8.1.2
diff --git a/CMake/CMakeConfigurableFile.in b/CMake/CMakeConfigurableFile.in
index b93e7539a..a3d2bc4a2 100644
--- a/CMake/CMakeConfigurableFile.in
+++ b/CMake/CMakeConfigurableFile.in
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/CMake/CurlSymbolHiding.cmake b/CMake/CurlSymbolHiding.cmake
index 75215a122..8289b4924 100644
--- a/CMake/CurlSymbolHiding.cmake
+++ b/CMake/CurlSymbolHiding.cmake
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -26,6 +26,12 @@ 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)
diff --git a/CMake/CurlTests.c b/CMake/CurlTests.c
index 6a9fdea09..e54628626 100644
--- a/CMake/CurlTests.c
+++ b/CMake/CurlTests.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -21,26 +21,8 @@
* SPDX-License-Identifier: curl
*
***************************************************************************/
-#ifdef TIME_WITH_SYS_TIME
-/* Time with sys/time test */
-
-#include <sys/types.h>
-#include <sys/time.h>
-#include <time.h>
-
-int
-main ()
-{
-if ((struct tm *) 0)
-return 0;
- ;
- return 0;
-}
-
-#endif
#ifdef HAVE_FCNTL_O_NONBLOCK
-
/* headers for FCNTL_O_NONBLOCK test */
#include <sys/types.h>
#include <unistd.h>
@@ -62,14 +44,13 @@ return 0;
#error "O_NONBLOCK does not work on this platform"
#endif
-int
-main ()
+int main(void)
{
- /* O_NONBLOCK source test */
- int flags = 0;
- if(0 != fcntl(0, F_SETFL, flags | O_NONBLOCK))
- return 1;
- return 0;
+ /* O_NONBLOCK source test */
+ int flags = 0;
+ if(0 != fcntl(0, F_SETFL, flags | O_NONBLOCK))
+ return 1;
+ return 0;
}
#endif
@@ -125,36 +106,16 @@ int main(void)
}
#endif
-#ifdef HAVE_SOCKLEN_T
-#ifdef _WIN32
-#include <ws2tcpip.h>
-#else
-#include <sys/types.h>
-#include <sys/socket.h>
-#endif
-int
-main ()
-{
-if ((socklen_t *) 0)
- return 0;
-if (sizeof (socklen_t))
- return 0;
- ;
- return 0;
-}
-#endif
#ifdef HAVE_IN_ADDR_T
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
-
-int
-main ()
+int main(void)
{
-if ((in_addr_t *) 0)
- return 0;
-if (sizeof (in_addr_t))
- return 0;
+ if((in_addr_t *) 0)
+ return 0;
+ if(sizeof(in_addr_t))
+ return 0;
;
return 0;
}
@@ -167,11 +128,10 @@ if (sizeof (in_addr_t))
#ifdef HAVE_STDBOOL_H
#include <stdbool.h>
#endif
-int
-main ()
+int main(void)
{
-if (sizeof (bool *) )
- return 0;
+ if(sizeof(bool *))
+ return 0;
;
return 0;
}
@@ -182,8 +142,9 @@ if (sizeof (bool *) )
#include <stdarg.h>
#include <string.h>
#include <float.h>
-int main() { return 0; }
+int main(void) { return 0; }
#endif
+
#ifdef HAVE_FILE_OFFSET_BITS
#ifdef _FILE_OFFSET_BITS
#undef _FILE_OFFSET_BITS
@@ -198,104 +159,95 @@ int main() { return 0; }
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
-int main () { ; return 0; }
+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
-# include <windows.h>
# ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
# endif
+# include <windows.h>
#endif
-
-int
-main ()
+int main(void)
{
-
-/* ioctlsocket source code */
- int socket;
- unsigned long flags = ioctlsocket(socket, FIONBIO, &flags);
-
+ /* 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
-# include <windows.h>
# ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
# endif
+# include <windows.h>
#endif
-
-int
-main ()
+int main(void)
{
-
-/* IoctlSocket source code */
- if(0 != IoctlSocket(0, 0, 0))
- return 1;
+ /* 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
-# include <windows.h>
# ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
# endif
+# include <windows.h>
#endif
-
-int
-main ()
+int main(void)
{
-
-/* IoctlSocket source code */
- long flags = 0;
- if(0 != IoctlSocket(0, FIONBIO, &flags))
- return 1;
+ /* 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
-# include <windows.h>
# ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
# endif
+# include <windows.h>
#endif
-
-int
-main ()
+int main(void)
{
-
- int flags = 0;
- if(0 != ioctlsocket(0, FIONBIO, &flags))
- return 1;
-
+ int flags = 0;
+ if(0 != ioctlsocket(0, FIONBIO, &flags))
+ return 1;
;
return 0;
}
#endif
+
#ifdef HAVE_IOCTL_FIONBIO
/* headers for FIONBIO test */
/* includes start */
@@ -314,19 +266,16 @@ main ()
#ifdef HAVE_STROPTS_H
# include <stropts.h>
#endif
-
-int
-main ()
+int main(void)
{
-
- int flags = 0;
- if(0 != ioctl(0, FIONBIO, &flags))
- return 1;
-
+ int flags = 0;
+ if(0 != ioctl(0, FIONBIO, &flags))
+ return 1;
;
return 0;
}
#endif
+
#ifdef HAVE_IOCTL_SIOCGIFADDR
/* headers for FIONBIO test */
/* includes start */
@@ -346,28 +295,26 @@ main ()
# include <stropts.h>
#endif
#include <net/if.h>
-
-int
-main ()
+int main(void)
{
- struct ifreq ifr;
- if(0 != ioctl(0, SIOCGIFADDR, &ifr))
- return 1;
-
+ 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
-# include <windows.h>
# ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
# endif
+# include <windows.h>
#endif
/* includes start */
#ifdef HAVE_SYS_TYPES_H
@@ -377,30 +324,30 @@ main ()
# include <sys/socket.h>
#endif
/* includes end */
-
-int
-main ()
+int main(void)
{
- if(0 != setsockopt(0, SOL_SOCKET, SO_NONBLOCK, 0, 0))
- return 1;
+ if(0 != setsockopt(0, SOL_SOCKET, SO_NONBLOCK, 0, 0))
+ return 1;
;
return 0;
}
#endif
+
#ifdef HAVE_GLIBC_STRERROR_R
#include <string.h>
#include <errno.h>
void check(char c) {}
-int
-main () {
+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 <string.h>
#include <errno.h>
@@ -408,92 +355,51 @@ main () {
/* float, because a pointer can't be implicitly cast to float */
void check(float f) {}
-int
-main () {
+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 <sys/xattr.h> /* header from libc, not from libattr */
-int
-main() {
+int main(void)
+{
fsetxattr(0, 0, 0, 0, 0, 0);
return 0;
}
#endif
+
#ifdef HAVE_FSETXATTR_5
#include <sys/xattr.h> /* header from libc, not from libattr */
-int
-main() {
+int main(void)
+{
fsetxattr(0, 0, 0, 0, 0);
return 0;
}
#endif
+
#ifdef HAVE_CLOCK_GETTIME_MONOTONIC
#include <time.h>
-int
-main() {
+int main(void)
+{
struct timespec ts = {0, 0};
clock_gettime(CLOCK_MONOTONIC, &ts);
return 0;
}
#endif
+
#ifdef HAVE_BUILTIN_AVAILABLE
-int
-main() {
+int main(void)
+{
if(__builtin_available(macOS 10.12, *)) {}
return 0;
}
#endif
-#ifdef HAVE_VARIADIC_MACROS_C99
-#define c99_vmacro3(first, ...) fun3(first, __VA_ARGS__)
-#define c99_vmacro2(first, ...) fun2(first, __VA_ARGS__)
-
-int fun3(int arg1, int arg2, int arg3);
-int fun2(int arg1, int arg2);
-
-int fun3(int arg1, int arg2, int arg3) {
- return arg1 + arg2 + arg3;
-}
-int fun2(int arg1, int arg2) {
- return arg1 + arg2;
-}
-
-int
-main() {
- int res3 = c99_vmacro3(1, 2, 3);
- int res2 = c99_vmacro2(1, 2);
- (void)res3;
- (void)res2;
- return 0;
-}
-#endif
-#ifdef HAVE_VARIADIC_MACROS_GCC
-#define gcc_vmacro3(first, args...) fun3(first, args)
-#define gcc_vmacro2(first, args...) fun2(first, args)
-
-int fun3(int arg1, int arg2, int arg3);
-int fun2(int arg1, int arg2);
-
-int fun3(int arg1, int arg2, int arg3) {
- return arg1 + arg2 + arg3;
-}
-int fun2(int arg1, int arg2) {
- return arg1 + arg2;
-}
-int
-main() {
- int res3 = gcc_vmacro3(1, 2, 3);
- int res2 = gcc_vmacro2(1, 2);
- (void)res3;
- (void)res2;
- return 0;
-}
-#endif
#ifdef HAVE_ATOMIC
/* includes start */
#ifdef HAVE_SYS_TYPES_H
@@ -507,17 +413,24 @@ main() {
#endif
/* includes end */
-int
-main() {
+int main(void)
+{
_Atomic int i = 1;
- i = 0; // Force an atomic-write operation.
+ i = 0; /* Force an atomic-write operation. */
return i;
}
#endif
+
#ifdef HAVE_WIN32_WINNT
/* includes start */
-#ifdef WIN32
-# include "../lib/setup-win32.h"
+#ifdef _WIN32
+# ifndef WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+# endif
+# ifndef NOGDI
+# define NOGDI
+# endif
+# include <windows.h>
#endif
/* includes end */
@@ -525,8 +438,8 @@ main() {
#define expand(x) enquote(x)
#pragma message("_WIN32_WINNT=" expand(_WIN32_WINNT))
-int
-main() {
+int main(void)
+{
return 0;
}
#endif
diff --git a/CMake/FindBearSSL.cmake b/CMake/FindBearSSL.cmake
index 88d5e87ad..56a064eac 100644
--- a/CMake/FindBearSSL.cmake
+++ b/CMake/FindBearSSL.cmake
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/CMake/FindBrotli.cmake b/CMake/FindBrotli.cmake
index 833e1811a..11ab7f825 100644
--- a/CMake/FindBrotli.cmake
+++ b/CMake/FindBrotli.cmake
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -28,7 +28,7 @@ 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
+find_package_handle_standard_args(Brotli
FOUND_VAR
BROTLI_FOUND
REQUIRED_VARS
@@ -36,7 +36,7 @@ find_package_handle_standard_args(BROTLI
BROTLICOMMON_LIBRARY
BROTLI_INCLUDE_DIR
FAIL_MESSAGE
- "Could NOT find BROTLI"
+ "Could NOT find Brotli"
)
set(BROTLI_INCLUDE_DIRS ${BROTLI_INCLUDE_DIR})
diff --git a/CMake/FindCARES.cmake b/CMake/FindCARES.cmake
index 99cf31d91..fa7589118 100644
--- a/CMake/FindCARES.cmake
+++ b/CMake/FindCARES.cmake
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/CMake/FindGSS.cmake b/CMake/FindGSS.cmake
index ec2bd57ba..b244e610e 100644
--- a/CMake/FindGSS.cmake
+++ b/CMake/FindGSS.cmake
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -181,14 +181,14 @@ if(NOT _GSS_FOUND) #not found by pkg-config. Let's take more traditional approac
set(GSS_FLAVOUR "MIT")
else()
# prevent compiling the header - just check if we can include it
- set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D__ROKEN_H__")
+ 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()
- set(CMAKE_REQUIRED_DEFINITIONS "")
+ 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
diff --git a/CMake/FindLibPSL.cmake b/CMake/FindLibPSL.cmake
index 66abdd79a..e3bd68d1d 100644
--- a/CMake/FindLibPSL.cmake
+++ b/CMake/FindLibPSL.cmake
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/CMake/FindLibSSH2.cmake b/CMake/FindLibSSH2.cmake
index 0ec7f7e3b..a0c251ae3 100644
--- a/CMake/FindLibSSH2.cmake
+++ b/CMake/FindLibSSH2.cmake
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/CMake/FindMSH3.cmake b/CMake/FindMSH3.cmake
index 96477e282..7d9c6b654 100644
--- a/CMake/FindMSH3.cmake
+++ b/CMake/FindMSH3.cmake
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/CMake/FindMbedTLS.cmake b/CMake/FindMbedTLS.cmake
index fcd6717f6..814bd97da 100644
--- a/CMake/FindMbedTLS.cmake
+++ b/CMake/FindMbedTLS.cmake
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/CMake/FindNGHTTP2.cmake b/CMake/FindNGHTTP2.cmake
index 6d70c4a04..3957646c4 100644
--- a/CMake/FindNGHTTP2.cmake
+++ b/CMake/FindNGHTTP2.cmake
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/CMake/FindNGHTTP3.cmake b/CMake/FindNGHTTP3.cmake
index 8d8ebc1b1..9b13e6c6f 100644
--- a/CMake/FindNGHTTP3.cmake
+++ b/CMake/FindNGHTTP3.cmake
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/CMake/FindNGTCP2.cmake b/CMake/FindNGTCP2.cmake
index 61e54c2d6..7ea466582 100644
--- a/CMake/FindNGTCP2.cmake
+++ b/CMake/FindNGTCP2.cmake
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -31,8 +31,10 @@ Find the ngtcp2 library
This module accepts optional COMPONENTS to control the crypto library (these are
mutually exclusive)::
- OpenSSL: Use libngtcp2_crypto_openssl
- GnuTLS: Use libngtcp2_crypto_gnutls
+ 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
^^^^^^^^^^^^^^^^
@@ -71,7 +73,7 @@ endif()
if(NGTCP2_FIND_COMPONENTS)
set(NGTCP2_CRYPTO_BACKEND "")
foreach(component IN LISTS NGTCP2_FIND_COMPONENTS)
- if(component MATCHES "^(BoringSSL|OpenSSL|GnuTLS)")
+ if(component MATCHES "^(BoringSSL|quictls|wolfSSL|GnuTLS)")
if(NGTCP2_CRYPTO_BACKEND)
message(FATAL_ERROR "NGTCP2: Only one crypto library can be selected")
endif()
diff --git a/CMake/FindQUICHE.cmake b/CMake/FindQUICHE.cmake
index fc47027d7..0488463d5 100644
--- a/CMake/FindQUICHE.cmake
+++ b/CMake/FindQUICHE.cmake
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/CMake/FindWolfSSL.cmake b/CMake/FindWolfSSL.cmake
index 986f01e00..d67c0eb24 100644
--- a/CMake/FindWolfSSL.cmake
+++ b/CMake/FindWolfSSL.cmake
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/CMake/FindZstd.cmake b/CMake/FindZstd.cmake
index 2d6540443..0ea9e0c87 100644
--- a/CMake/FindZstd.cmake
+++ b/CMake/FindZstd.cmake
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -56,11 +56,18 @@ find_library(Zstd_LIBRARY NAMES zstd
${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)
diff --git a/CMake/Macros.cmake b/CMake/Macros.cmake
index 4d7380eb5..7ad2f5c40 100644
--- a/CMake/Macros.cmake
+++ b/CMake/Macros.cmake
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -23,19 +23,6 @@
###########################################################################
#File defines convenience macros for available feature testing
-# This macro checks if the symbol exists in the library and if it
-# does, it prepends library to the list. It is intended to be called
-# multiple times with a sequence of possibly dependent libraries in
-# order of least-to-most-dependent. Some libraries depend on others
-# to link correctly.
-macro(check_library_exists_concat LIBRARY SYMBOL VARIABLE)
- check_library_exists("${LIBRARY};${CURL_LIBS}" ${SYMBOL} "${CMAKE_LIBRARY_PATH}"
- ${VARIABLE})
- if(${VARIABLE})
- set(CURL_LIBS ${LIBRARY} ${CURL_LIBS})
- endif()
-endmacro()
-
# 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
diff --git a/CMake/OtherTests.cmake b/CMake/OtherTests.cmake
index b3031f749..a613f6ecd 100644
--- a/CMake/OtherTests.cmake
+++ b/CMake/OtherTests.cmake
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -22,6 +22,8 @@
#
###########################################################################
include(CheckCSourceCompiles)
+include(CheckCSourceRuns)
+
# The begin of the sources (macros and includes)
set(_source_epilogue "#undef inline")
@@ -33,13 +35,13 @@ endmacro()
set(signature_call_conv)
if(HAVE_WINDOWS_H)
- add_header_include(HAVE_WINSOCK2_H "winsock2.h")
- add_header_include(HAVE_WINDOWS_H "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(HAVE_LIBWS2_32)
- set(CMAKE_REQUIRED_LIBRARIES ws2_32)
+ if(WIN32)
+ set(CMAKE_REQUIRED_LIBRARIES "ws2_32")
endif()
else()
add_header_include(HAVE_SYS_TYPES_H "sys/types.h")
@@ -57,10 +59,9 @@ check_c_source_compiles("${_source_epilogue}
if(NOT HAVE_WINDOWS_H)
add_header_include(HAVE_SYS_TIME_H "sys/time.h")
- add_header_include(TIME_WITH_SYS_TIME "time.h")
- add_header_include(HAVE_TIME_H "time.h")
endif()
check_c_source_compiles("${_source_epilogue}
+#include <time.h>
int main(void) {
struct timeval ts;
ts.tv_sec = 0;
@@ -70,11 +71,11 @@ int main(void) {
}" HAVE_STRUCT_TIMEVAL)
if(HAVE_WINDOWS_H)
- set(CMAKE_EXTRA_INCLUDE_FILES winsock2.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)
+ set(CMAKE_EXTRA_INCLUDE_FILES "sys/socket.h")
endif()
endif()
@@ -85,52 +86,136 @@ endif()
unset(CMAKE_TRY_COMPILE_TARGET_TYPE)
-if(NOT DEFINED CMAKE_TOOLCHAIN_FILE)
+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...
- include(CheckCSourceRuns)
- 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")
+ # 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 <stdlib.h>
+ #include <sys/time.h>
+
+ #ifdef HAVE_SYS_POLL_H
+ # include <sys/poll.h>
+ #elif HAVE_POLL_H
+ # include <poll.h>
+ #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()
- check_c_source_runs("
- #include <stdlib.h>
- #include <sys/time.h>
-
- #ifdef HAVE_SYS_POLL_H
- # include <sys/poll.h>
- #elif HAVE_POLL_H
- # include <poll.h>
- #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)
{
- 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)
+ #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 <time.h>
+ 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/CMake/PickyWarnings.cmake b/CMake/PickyWarnings.cmake
new file mode 100644
index 000000000..5a0d15604
--- /dev/null
+++ b/CMake/PickyWarnings.cmake
@@ -0,0 +1,216 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed 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/CMake/Platforms/WindowsCache.cmake b/CMake/Platforms/WindowsCache.cmake
index 9a513bb6c..ec09fd4bd 100644
--- a/CMake/Platforms/WindowsCache.cmake
+++ b/CMake/Platforms/WindowsCache.cmake
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -21,75 +21,167 @@
# SPDX-License-Identifier: curl
#
###########################################################################
-if(NOT UNIX)
- if(WIN32)
- set(HAVE_LIBSOCKET 0)
- set(HAVE_GETHOSTNAME 1)
- set(HAVE_LIBZ 0)
+if(NOT WIN32)
+ message(FATAL_ERROR "This file should be included on Windows platform only")
+endif()
- set(HAVE_ARPA_INET_H 0)
- set(HAVE_FCNTL_H 1)
- set(HAVE_INTTYPES_H 0)
- set(HAVE_IO_H 1)
- set(HAVE_NETDB_H 0)
- set(HAVE_NETINET_IN_H 0)
- set(HAVE_NET_IF_H 0)
- set(HAVE_PROCESS_H 1)
- set(HAVE_PWD_H 0)
- set(HAVE_SETJMP_H 1)
- set(HAVE_SIGNAL_H 1)
- set(HAVE_STDINT_H 0)
- set(HAVE_STDLIB_H 1)
- set(HAVE_STRINGS_H 0)
- set(HAVE_STRING_H 1)
- set(HAVE_SYS_PARAM_H 0)
- set(HAVE_SYS_POLL_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_TIME_H 0)
- set(HAVE_SYS_TYPES_H 1)
- set(HAVE_SYS_UTIME_H 1)
- set(HAVE_TERMIOS_H 0)
- set(HAVE_TERMIO_H 0)
- set(HAVE_TIME_H 1)
- set(HAVE_UTIME_H 0)
+set(HAVE_LOCALE_H 1)
- set(HAVE_SOCKET 1)
- set(HAVE_SELECT 1)
- set(HAVE_STRDUP 1)
- set(HAVE_STRICMP 1)
- set(HAVE_STRCMPI 1)
- set(HAVE_GETTIMEOFDAY 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_RAND_EGD 0)
- set(HAVE_GMTIME_R 0)
- set(HAVE_GETADDRINFO_THREADSAFE 1)
- set(HAVE_GETHOSTBYNAME_R 0)
- set(HAVE_SIGNAL 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()
- 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)
+# Available in Windows XP and newer
+set(HAVE_GETADDRINFO 1)
+set(HAVE_FREEADDRINFO 1)
- set(TIME_WITH_SYS_TIME 0)
- set(HAVE_O_NONBLOCK 0)
- set(HAVE_IN_ADDR_T 0)
- set(STDC_HEADERS 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_SIGACTION 0)
- set(HAVE_MACRO_SIGSETJMP 0)
- else()
- message("This file should be included on Windows platform only")
- endif()
-endif()
+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/CMake/Utilities.cmake b/CMake/Utilities.cmake
index 78bfd6ffe..9ff38e3a0 100644
--- a/CMake/Utilities.cmake
+++ b/CMake/Utilities.cmake
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/CMake/cmake_uninstall.cmake.in b/CMake/cmake_uninstall.cmake.in
index 55801f507..47aec8d42 100644
--- a/CMake/cmake_uninstall.cmake.in
+++ b/CMake/cmake_uninstall.cmake.in
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/CMake/curl-config.cmake.in b/CMake/curl-config.cmake.in
index 496a92d0e..9adb96e0a 100644
--- a/CMake/curl-config.cmake.in
+++ b/CMake/curl-config.cmake.in
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -33,3 +33,8 @@ 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/CMakeLists.txt b/CMakeLists.txt
index 62fee8e6d..a54c2fff9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -49,18 +49,18 @@
# https://cmake.org/cmake/help/latest/module/FetchContent.html#integrating-with-find-package
#
# The following variables are available:
-# HAVE_RAND_EGD: `RAND_egd` present in OpenSSL
-# HAVE_BORINGSSL: OpenSSL is BoringSSL
-# HAVE_PK11_CREATEMANAGEDGENERICOBJECTL: `PK11_CreateManagedGenericObject` present in NSS
-# HAVE_SSL_CTX_SET_QUIC_METHOD: `SSL_CTX_set_quic_method` present in OpenSSL
+# 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
-# HAVE_ZSTD_CREATEDSTREAM: `ZSTD_createDStream` present in Zstd
#
# 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.2...3.16 FATAL_ERROR)
+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)
@@ -96,18 +96,24 @@ 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})
- set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_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)
@@ -126,28 +132,7 @@ cmake_dependent_option(ENABLE_THREADED_RESOLVER "Set to ON to enable threaded DN
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)
-if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG)
- if(PICKY_COMPILER)
- foreach(_CCOPT -pedantic -Wall -W -Wpointer-arith -Wwrite-strings -Wunused -Wshadow -Winline -Wnested-externs -Wmissing-declarations -Wmissing-prototypes -Wfloat-equal -Wsign-compare -Wundef -Wendif-labels -Wstrict-prototypes -Wdeclaration-after-statement -Wstrict-aliasing=3 -Wcast-align -Wtype-limits -Wold-style-declaration -Wmissing-parameter-type -Wempty-body -Wclobbered -Wignored-qualifiers -Wconversion -Wvla -Wdouble-promotion -Wenum-conversion -Warith-conversion)
- # surprisingly, CHECK_C_COMPILER_FLAG needs a new variable to store each new
- # test result in.
- string(MAKE_C_IDENTIFIER "OPT${_CCOPT}" _optvarname)
- check_c_compiler_flag(${_CCOPT} ${_optvarname})
- if(${_optvarname})
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_CCOPT}")
- endif()
- endforeach()
- foreach(_CCOPT long-long multichar format-nonliteral sign-conversion system-headers pedantic-ms-format)
- # GCC only warns about unknown -Wno- options if there are also other diagnostic messages,
- # so test for the positive form instead
- string(MAKE_C_IDENTIFIER "OPT${_CCOPT}" _optvarname)
- check_c_compiler_flag("-W${_CCOPT}" ${_optvarname})
- if(${_optvarname})
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-${_CCOPT}")
- endif()
- endforeach()
- endif()
-endif()
+include(PickyWarnings)
if(ENABLE_DEBUG)
# DEBUGBUILD will be defined only for Debug builds
@@ -164,6 +149,32 @@ 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 "")
@@ -180,22 +191,39 @@ 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_CRYPTO_AUTH "disables cryptographic authentication" OFF)
-mark_as_advanced(CURL_DISABLE_CRYPTO_AUTH)
+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)
@@ -213,6 +241,8 @@ 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)
@@ -280,7 +310,7 @@ if(ENABLE_IPV6 AND NOT WIN32)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND NOT ENABLE_ARES)
- set(use_core_foundation ON)
+ set(use_core_foundation_and_core_services ON)
find_library(SYSTEMCONFIGURATION_FRAMEWORK "SystemConfiguration")
if(NOT SYSTEMCONFIGURATION_FRAMEWORK)
@@ -321,6 +351,11 @@ 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)
@@ -333,71 +368,63 @@ include(CheckCSourceCompiles)
# On windows preload settings
if(WIN32)
- set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_WINSOCKAPI_=")
+ 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)
- find_package(Threads REQUIRED)
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()
- set(CURL_LIBS ${CURL_LIBS} ${CMAKE_THREAD_LIBS_INIT})
endif()
# Check for all needed libraries
-check_library_exists_concat("socket" connect HAVE_LIBSOCKET)
+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)
- check_library_exists_concat("ws2_32" getch HAVE_LIBWS2_32)
- check_library_exists_concat("winmm" getch HAVE_LIBWINMM)
-endif()
-
-# This check below for use of deprecated symbols is only temporary and is to
-# be removed again after a year's service. Remove after November 25, 2022.
-set(CURL_RECONFIG_REQUIRED 0)
-foreach(_LIB GSSAPI OPENLDAP LIBSSH LIBSSH2 BEARSSL MBEDTLS NSS OPENSSL
- SCHANNEL SECTRANSP WOLFSSL)
- if(CMAKE_USE_${_LIB})
- set(CURL_RECONFIG_REQUIRED 1)
- message(SEND_ERROR "The option CMAKE_USE_${_LIB} was renamed to CURL_USE_${_LIB}.")
+ list(APPEND CURL_LIBS "ws2_32" "bcrypt")
+ if(USE_LIBRTMP)
+ list(APPEND CURL_LIBS "winmm")
endif()
-endforeach()
-if(CMAKE_USE_WINSSL)
- set(CURL_RECONFIG_REQUIRED 1)
- message(SEND_ERROR "The option CMAKE_USE_WINSSL was renamed to CURL_USE_SCHANNEL.")
-endif()
-if(CURL_RECONFIG_REQUIRED)
- message(FATAL_ERROR "Reconfig required")
endif()
# check SSL libraries
-# TODO support GnuTLS
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)
+ 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
+ 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_NSS "Enable NSS 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_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_NSS OR CURL_USE_WOLFSSL)
+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 "Use OpenSSL code. Experimental" ${openssl_default} CURL_ENABLE_SSL OFF)
+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
@@ -406,7 +433,6 @@ count_true(enabled_ssl_options_count
CURL_USE_OPENSSL
CURL_USE_MBEDTLS
CURL_USE_BEARSSL
- CURL_USE_NSS
CURL_USE_WOLFSSL
)
if(enabled_ssl_options_count GREATER "1")
@@ -417,14 +443,17 @@ 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)
- set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -DSECURITY_WIN32")
endif()
if(CURL_USE_SECTRANSP)
- set(use_core_foundation ON)
+ set(use_core_foundation_and_core_services ON)
find_library(SECURITY_FRAMEWORK "Security")
if(NOT SECURITY_FRAMEWORK)
@@ -434,15 +463,24 @@ if(CURL_USE_SECTRANSP)
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)
+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")
+ list(APPEND CURL_LIBS "-framework CoreFoundation -framework CoreServices")
endif()
if(CURL_USE_OPENSSL)
@@ -460,15 +498,17 @@ if(CURL_USE_OPENSSL)
include_directories(${OPENSSL_INCLUDE_DIR})
endif()
- set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
- if(NOT DEFINED HAVE_RAND_EGD)
- check_symbol_exists(RAND_egd "${CURL_INCLUDES}" HAVE_RAND_EGD)
+ 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()
-
- add_definitions(-DOPENSSL_SUPPRESS_DEPRECATED)
+ if(NOT DEFINED HAVE_AWSLC)
+ check_symbol_exists(OPENSSL_IS_AWSLC "openssl/base.h" HAVE_AWSLC)
+ endif()
endif()
if(CURL_USE_MBEDTLS)
@@ -477,6 +517,10 @@ if(CURL_USE_MBEDTLS)
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)
@@ -485,6 +529,10 @@ if(CURL_USE_BEARSSL)
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)
@@ -493,58 +541,158 @@ if(CURL_USE_WOLFSSL)
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_NSS)
- find_package(NSS REQUIRED)
- include_directories(${NSS_INCLUDE_DIRS})
- list(APPEND CURL_LIBS ${NSS_LIBRARIES})
+if(CURL_USE_GNUTLS)
+ find_package(GnuTLS REQUIRED)
set(SSL_ENABLED ON)
- set(USE_NSS ON)
- if(NOT DEFINED HAVE_PK11_CREATEMANAGEDGENERICOBJECT)
+ 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 ${NSS_INCLUDE_DIRS})
- set(CMAKE_REQUIRED_LIBRARIES ${NSS_LIBRARIES})
- check_symbol_exists(PK11_CreateManagedGenericObject "pk11pub.h" HAVE_PK11_CREATEMANAGEDGENERICOBJECT)
+ 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()
-option(USE_NGHTTP2 "Use Nghttp2 library" OFF)
-if(USE_NGHTTP2)
- find_package(NGHTTP2 REQUIRED)
- include_directories(${NGHTTP2_INCLUDE_DIRS})
- list(APPEND CURL_LIBS ${NGHTTP2_LIBRARIES})
+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()
-function(CheckQuicSupportInOpenSSL)
- # Be sure that the OpenSSL library actually supports QUIC.
- if(NOT DEFINED HAVE_SSL_CTX_SET_QUIC_METHOD)
- cmake_push_check_state()
+# 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 <v3.15 CMake.
+ list(APPEND CURL_LIBS ${BROTLI_LIBRARIES})
+ include_directories(${BROTLI_INCLUDE_DIRS})
+ list(APPEND CMAKE_REQUIRED_INCLUDES ${BROTLI_INCLUDE_DIRS})
+ endif()
+endif()
+
+option(CURL_ZSTD "Set to ON to enable building curl with zstd support." OFF)
+set(HAVE_ZSTD OFF)
+if(CURL_ZSTD)
+ find_package(Zstd REQUIRED)
+ if(Zstd_FOUND AND NOT Zstd_VERSION VERSION_LESS "1.0.0")
+ set(HAVE_ZSTD ON)
+ list(APPEND CURL_LIBS ${Zstd_LIBRARIES})
+ include_directories(${Zstd_INCLUDE_DIRS})
+ else()
+ message(WARNING "zstd v1.0.0 or newer is required, disabling zstd support.")
+ endif()
+endif()
+
+# Check symbol in OpenSSL-like TLS backends.
+macro(openssl_check_symbol_exists SYMBOL FILES VARIABLE)
+ cmake_push_check_state()
+ if(USE_OPENSSL)
set(CMAKE_REQUIRED_INCLUDES "${OPENSSL_INCLUDE_DIR}")
set(CMAKE_REQUIRED_LIBRARIES "${OPENSSL_LIBRARIES}")
- check_symbol_exists(SSL_CTX_set_quic_method "openssl/ssl.h" HAVE_SSL_CTX_SET_QUIC_METHOD)
- cmake_pop_check_state()
+ if(HAVE_LIBZ)
+ list(APPEND CMAKE_REQUIRED_LIBRARIES "${ZLIB_LIBRARIES}")
+ endif()
+ if(WIN32)
+ list(APPEND CMAKE_REQUIRED_LIBRARIES "ws2_32")
+ list(APPEND CMAKE_REQUIRED_LIBRARIES "bcrypt") # for OpenSSL/LibreSSL
+ endif()
+ elseif(USE_WOLFSSL)
+ set(CMAKE_REQUIRED_INCLUDES "${WolfSSL_INCLUDE_DIRS}")
+ set(CMAKE_REQUIRED_LIBRARIES "${WolfSSL_LIBRARIES}")
+ if(HAVE_LIBZ)
+ list(APPEND CMAKE_REQUIRED_INCLUDES "${ZLIB_INCLUDE_DIRS}") # Public wolfSSL headers require zlib headers
+ list(APPEND CMAKE_REQUIRED_LIBRARIES "${ZLIB_LIBRARIES}")
+ endif()
+ if(WIN32)
+ list(APPEND CMAKE_REQUIRED_LIBRARIES "ws2_32" "crypt32")
+ endif()
+ list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_UINTPTR_T) # to pull in stdint.h (as of wolfSSL v5.5.4)
+ endif()
+ check_symbol_exists("${SYMBOL}" "${FILES}" "${VARIABLE}")
+ cmake_pop_check_state()
+endmacro()
+
+# Ensure that the OpenSSL fork actually supports QUIC.
+macro(openssl_check_quic)
+ if(NOT DEFINED HAVE_SSL_CTX_SET_QUIC_METHOD)
+ if(USE_OPENSSL)
+ openssl_check_symbol_exists(SSL_CTX_set_quic_method "openssl/ssl.h" HAVE_SSL_CTX_SET_QUIC_METHOD)
+ elseif(USE_WOLFSSL)
+ openssl_check_symbol_exists(wolfSSL_set_quic_method "wolfssl/options.h;wolfssl/openssl/ssl.h" HAVE_SSL_CTX_SET_QUIC_METHOD)
+ endif()
endif()
if(NOT HAVE_SSL_CTX_SET_QUIC_METHOD)
- message(FATAL_ERROR "QUIC support is missing in OpenSSL/BoringSSL. Try setting -DOPENSSL_ROOT_DIR")
+ message(FATAL_ERROR "QUIC support is missing in OpenSSL fork. Try setting -DOPENSSL_ROOT_DIR")
endif()
-endfunction()
+endmacro()
+
+if(USE_OPENSSL OR USE_WOLFSSL)
+ if(NOT DEFINED HAVE_SSL_SET0_WBIO)
+ openssl_check_symbol_exists(SSL_set0_wbio "openssl/ssl.h" HAVE_SSL_SET0_WBIO)
+ endif()
+ if(NOT DEFINED HAVE_OPENSSL_SRP AND NOT CURL_DISABLE_SRP)
+ openssl_check_symbol_exists(SSL_CTX_set_srp_username "openssl/ssl.h" HAVE_OPENSSL_SRP)
+ endif()
+endif()
+
+option(USE_NGHTTP2 "Use nghttp2 library" OFF)
+if(USE_NGHTTP2)
+ find_package(NGHTTP2 REQUIRED)
+ include_directories(${NGHTTP2_INCLUDE_DIRS})
+ list(APPEND CURL_LIBS ${NGHTTP2_LIBRARIES})
+endif()
option(USE_NGTCP2 "Use ngtcp2 and nghttp3 libraries for HTTP/3 support" OFF)
if(USE_NGTCP2)
- if(USE_OPENSSL)
- if(HAVE_BORINGSSL)
+ if(USE_OPENSSL OR USE_WOLFSSL)
+ if(USE_WOLFSSL)
+ find_package(NGTCP2 REQUIRED wolfSSL)
+ elseif(HAVE_BORINGSSL OR HAVE_AWSLC)
find_package(NGTCP2 REQUIRED BoringSSL)
else()
- find_package(NGTCP2 REQUIRED OpenSSL)
+ find_package(NGTCP2 REQUIRED quictls)
endif()
- CheckQuicSupportInOpenSSL()
+ openssl_check_quic()
elseif(USE_GNUTLS)
- # TODO add GnuTLS support as vtls library.
find_package(NGTCP2 REQUIRED GnuTLS)
else()
- message(FATAL_ERROR "ngtcp2 requires OpenSSL or GnuTLS")
+ message(FATAL_ERROR "ngtcp2 requires OpenSSL, wolfSSL or GnuTLS")
endif()
set(USE_NGTCP2 ON)
include_directories(${NGTCP2_INCLUDE_DIRS})
@@ -562,7 +710,10 @@ if(USE_QUICHE)
message(FATAL_ERROR "Only one HTTP/3 backend can be selected!")
endif()
find_package(QUICHE REQUIRED)
- CheckQuicSupportInOpenSSL()
+ if(NOT HAVE_BORINGSSL)
+ message(FATAL_ERROR "quiche requires BoringSSL")
+ endif()
+ openssl_check_quic()
set(USE_QUICHE ON)
include_directories(${QUICHE_INCLUDE_DIRS})
list(APPEND CURL_LIBS ${QUICHE_LIBRARIES})
@@ -585,34 +736,34 @@ if(USE_MSH3)
list(APPEND CURL_LIBS ${MSH3_LIBRARIES})
endif()
+if(NOT CURL_DISABLE_SRP AND (HAVE_GNUTLS_SRP OR HAVE_OPENSSL_SRP))
+ set(USE_TLS_SRP 1)
+endif()
+
if(NOT CURL_DISABLE_LDAP)
if(WIN32)
option(USE_WIN32_LDAP "Use Windows LDAP implementation" ON)
if(USE_WIN32_LDAP)
- check_library_exists_concat("wldap32" cldap_open HAVE_WLDAP32)
- if(NOT HAVE_WLDAP32)
- set(USE_WIN32_LDAP OFF)
+ list(APPEND CURL_LIBS "wldap32")
+ if(NOT CURL_DISABLE_LDAPS)
+ set(HAVE_LDAP_SSL ON)
endif()
endif()
endif()
- option(CURL_USE_OPENLDAP "Use OpenLDAP code." OFF)
- mark_as_advanced(CURL_USE_OPENLDAP)
set(CMAKE_LDAP_LIB "ldap" CACHE STRING "Name or full path to ldap library")
set(CMAKE_LBER_LIB "lber" CACHE STRING "Name or full path to lber library")
- if(CURL_USE_OPENLDAP AND USE_WIN32_LDAP)
- message(FATAL_ERROR "Cannot use USE_WIN32_LDAP and CURL_USE_OPENLDAP at the same time")
- endif()
-
# Now that we know, we're not using windows LDAP...
- if(USE_WIN32_LDAP)
- check_include_file_concat("winldap.h" HAVE_WINLDAP_H)
- else()
+ if(NOT USE_WIN32_LDAP)
# Check for LDAP
set(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_LIBRARIES})
- check_library_exists_concat(${CMAKE_LDAP_LIB} ldap_init HAVE_LIBLDAP)
- check_library_exists_concat(${CMAKE_LBER_LIB} ber_init HAVE_LIBLBER)
+ check_library_exists("${CMAKE_LDAP_LIB}" "ldap_init" "" HAVE_LIBLDAP)
+ if(HAVE_LIBLDAP)
+ check_library_exists("${CMAKE_LDAP_LIB};${CMAKE_LBER_LIB}" "ber_init" "" HAVE_LIBLBER)
+ else()
+ check_library_exists("${CMAKE_LBER_LIB}" "ber_init" "" HAVE_LIBLBER)
+ endif()
set(CMAKE_REQUIRED_INCLUDES_BAK ${CMAKE_REQUIRED_INCLUDES})
set(CMAKE_LDAP_INCLUDE_DIR "" CACHE STRING "Path to LDAP include directory")
@@ -631,9 +782,6 @@ if(NOT CURL_DISABLE_LDAP)
set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE)
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_BAK}) #LDAP includes won't be used
else()
- if(CURL_USE_OPENLDAP)
- set(USE_OPENLDAP ON)
- endif()
if(CMAKE_LDAP_INCLUDE_DIR)
include_directories(${CMAKE_LDAP_INCLUDE_DIR})
endif()
@@ -647,13 +795,20 @@ if(NOT CURL_DISABLE_LDAP)
endif()
list(APPEND _HEADER_LIST "ldap.h")
- set(_SRC_STRING "")
+ set(_INCLUDE_STRING "")
foreach(_HEADER ${_HEADER_LIST})
set(_INCLUDE_STRING "${_INCLUDE_STRING}#include <${_HEADER}>\n")
endforeach()
- set(_SRC_STRING
- "
+ 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)
{
@@ -661,21 +816,27 @@ if(NOT CURL_DISABLE_LDAP)
BerElement *bep = ber_init(bvp);
ber_free(bep, 1);
return 0;
- }"
- )
- set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -DLDAP_DEPRECATED=1")
- list(APPEND CMAKE_REQUIRED_LIBRARIES ${CMAKE_LDAP_LIB})
- if(HAVE_LIBLBER)
- list(APPEND CMAKE_REQUIRED_LIBRARIES ${CMAKE_LBER_LIB})
- endif()
- check_c_source_compiles("${_SRC_STRING}" NOT_NEED_LBER_H)
- unset(CMAKE_REQUIRED_LIBRARIES)
-
+ }" 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()
@@ -688,14 +849,14 @@ if(CURL_DISABLE_LDAP)
endif()
endif()
-if(NOT CURL_DISABLE_LDAPS)
- check_include_file_concat("ldap_ssl.h" HAVE_LDAP_SSL_H)
-endif()
-
# Check for idn2
option(USE_LIBIDN2 "Use libidn2 for IDN support" ON)
if(USE_LIBIDN2)
- check_library_exists_concat("idn2" idn2_lookup_ul HAVE_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()
@@ -704,56 +865,6 @@ if(WIN32)
option(USE_WIN32_IDN "Use WinIDN for IDN support" OFF)
if(USE_WIN32_IDN)
list(APPEND CURL_LIBS "normaliz")
- set(WANT_IDN_PROTOTYPES ON)
- endif()
-endif()
-
-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 QUIET)
- if(BROTLI_FOUND)
- set(HAVE_BROTLI ON)
- list(APPEND CURL_LIBS ${BROTLI_LIBRARIES})
- include_directories(${BROTLI_INCLUDE_DIRS})
- list(APPEND CMAKE_REQUIRED_INCLUDES ${BROTLI_INCLUDE_DIRS})
- endif()
-endif()
-
-option(CURL_ZSTD "Set to ON to enable building curl with zstd support." OFF)
-set(HAVE_ZSTD OFF)
-if(CURL_ZSTD)
- find_package(Zstd REQUIRED)
- if (NOT DEFINED HAVE_ZSTD_CREATEDSTREAM)
- cmake_push_check_state()
- set(CMAKE_REQUIRED_INCLUDES ${Zstd_INCLUDE_DIRS})
- set(CMAKE_REQUIRED_LIBRARIES ${Zstd_LIBRARIES})
- check_symbol_exists(ZSTD_createDStream "zstd.h" HAVE_ZSTD_CREATEDSTREAM)
- cmake_pop_check_state()
- endif()
- if(Zstd_FOUND AND HAVE_ZSTD_CREATEDSTREAM)
- set(HAVE_ZSTD ON)
- list(APPEND CURL_LIBS ${Zstd_LIBRARIES})
- include_directories(${Zstd_INCLUDE_DIRS})
endif()
endif()
@@ -852,6 +963,7 @@ if(CURL_USE_GSSAPI)
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}")
@@ -891,7 +1003,9 @@ elseif("${CURL_CA_BUNDLE}" STREQUAL "none")
unset(CURL_CA_BUNDLE CACHE)
elseif("${CURL_CA_BUNDLE}" STREQUAL "auto")
unset(CURL_CA_BUNDLE CACHE)
- set(CURL_CA_BUNDLE_AUTODETECT TRUE)
+ if(NOT CMAKE_CROSSCOMPILING)
+ set(CURL_CA_BUNDLE_AUTODETECT TRUE)
+ endif()
else()
set(CURL_CA_BUNDLE_SET TRUE)
endif()
@@ -902,7 +1016,7 @@ elseif("${CURL_CA_PATH}" STREQUAL "none")
unset(CURL_CA_PATH CACHE)
elseif("${CURL_CA_PATH}" STREQUAL "auto")
unset(CURL_CA_PATH CACHE)
- if(NOT USE_NSS)
+ if(NOT CMAKE_CROSSCOMPILING)
set(CURL_CA_PATH_AUTODETECT TRUE)
endif()
else()
@@ -944,22 +1058,59 @@ elseif(CURL_CA_PATH_AUTODETECT OR CURL_CA_BUNDLE_AUTODETECT)
endif()
endif()
-if(CURL_CA_PATH_SET AND NOT USE_OPENSSL AND NOT USE_MBEDTLS)
+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, GnuTLS or mbed TLS. "
+ "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(NOT UNIX)
- check_include_file_concat("windows.h" HAVE_WINDOWS_H)
- check_include_file_concat("ws2tcpip.h" HAVE_WS2TCPIP_H)
+if(WIN32)
check_include_file_concat("winsock2.h" HAVE_WINSOCK2_H)
- check_include_file_concat("wincrypt.h" HAVE_WINCRYPT_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("inttypes.h" HAVE_INTTYPES_H)
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)
@@ -974,11 +1125,7 @@ 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("arpa/tftp.h" HAVE_ARPA_TFTP_H)
-check_include_file_concat("assert.h" HAVE_ASSERT_H)
-check_include_file_concat("errno.h" HAVE_ERRNO_H)
check_include_file_concat("fcntl.h" HAVE_FCNTL_H)
-check_include_file_concat("idn2.h" HAVE_IDN2_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)
@@ -987,31 +1134,20 @@ 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("setjmp.h" HAVE_SETJMP_H)
-check_include_file_concat("signal.h" HAVE_SIGNAL_H)
-check_include_file_concat("ssl.h" HAVE_SSL_H)
check_include_file_concat("stdatomic.h" HAVE_STDATOMIC_H)
check_include_file_concat("stdbool.h" HAVE_STDBOOL_H)
-check_include_file_concat("stdint.h" HAVE_STDINT_H)
-check_include_file_concat("stdlib.h" HAVE_STDLIB_H)
-check_include_file_concat("string.h" HAVE_STRING_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("time.h" HAVE_TIME_H)
check_include_file_concat("unistd.h" HAVE_UNISTD_H)
check_include_file_concat("utime.h" HAVE_UTIME_H)
-check_include_file_concat("process.h" HAVE_PROCESS_H)
-check_include_file_concat("stddef.h" HAVE_STDDEF_H)
-check_include_file_concat("stdint.h" HAVE_STDINT_H)
-check_include_file_concat("sys/utsname.h" HAVE_SYS_UTSNAME_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)
@@ -1019,6 +1155,7 @@ 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)
@@ -1029,9 +1166,12 @@ if(NOT HAVE_SIZEOF_SSIZE_T)
endif()
# off_t is sized later, after the HAVE_FILE_OFFSET_BITS test
-if(HAVE_SIZEOF_LONG_LONG)
+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)
@@ -1039,52 +1179,57 @@ if(NOT CMAKE_CROSSCOMPILING)
endif()
# Check for some functions that are used
-if(HAVE_LIBWS2_32)
+if(WIN32)
set(CMAKE_REQUIRED_LIBRARIES ws2_32)
elseif(HAVE_LIBSOCKET)
set(CMAKE_REQUIRED_LIBRARIES socket)
endif()
-check_symbol_exists(fchmod "${CURL_INCLUDES}" HAVE_FCHMOD)
-check_symbol_exists(basename "${CURL_INCLUDES}" HAVE_BASENAME)
+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}" HAVE_STRDUP)
-check_symbol_exists(strtok_r "${CURL_INCLUDES}" HAVE_STRTOK_R)
-check_symbol_exists(strcasecmp "${CURL_INCLUDES}" HAVE_STRCASECMP)
-check_symbol_exists(stricmp "${CURL_INCLUDES}" HAVE_STRICMP)
-check_symbol_exists(strcmpi "${CURL_INCLUDES}" HAVE_STRCMPI)
+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}" HAVE_SIGSETJMP)
+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}" HAVE_GMTIME_R)
+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}" HAVE_SIGNAL)
-check_symbol_exists(strtoll "${CURL_INCLUDES}" HAVE_STRTOLL)
-check_symbol_exists(_strtoi64 "${CURL_INCLUDES}" HAVE__STRTOI64)
-check_symbol_exists(strerror_r "${CURL_INCLUDES}" HAVE_STRERROR_R)
-check_symbol_exists(siginterrupt "${CURL_INCLUDES}" HAVE_SIGINTERRUPT)
-check_symbol_exists(getaddrinfo "${CURL_INCLUDES}" HAVE_GETADDRINFO)
-if(NOT HAVE_GETADDRINFO)
- set(HAVE_GETADDRINFO_THREADSAFE OFF)
-endif()
+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)
@@ -1093,16 +1238,20 @@ 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 "${CURL_INCLUDES}" HAVE_SNPRINTF)
+ 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}" HAVE_INET_NTOP)
+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}" HAVE_INET_PTON)
+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)
@@ -1116,29 +1265,11 @@ 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 "")
-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 "")
-
-# sigaction and sigsetjmp are special. Use special mechanism for
-# detecting those, but only if previous attempt failed.
-if(HAVE_SIGNAL_H)
- check_symbol_exists(sigaction "signal.h" HAVE_SIGACTION)
-endif()
-
-if(NOT HAVE_SIGSETJMP)
- if(HAVE_SETJMP_H)
- check_symbol_exists(sigsetjmp "setjmp.h" HAVE_MACRO_SIGSETJMP)
- if(HAVE_MACRO_SIGSETJMP)
- set(HAVE_SIGSETJMP 1)
- endif()
- endif()
-endif()
-
-# If there is no stricmp(), do not allow LDAP to parse URLs
-if(NOT HAVE_STRICMP)
- set(HAVE_LDAP_URL_PARSE 1)
+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
@@ -1151,7 +1282,6 @@ foreach(CURL_TEST
HAVE_IOCTL_FIONBIO
HAVE_IOCTL_SIOCGIFADDR
HAVE_SETSOCKOPT_SO_NONBLOCK
- TIME_WITH_SYS_TIME
HAVE_O_NONBLOCK
HAVE_GETHOSTBYNAME_R_3
HAVE_GETHOSTBYNAME_R_5
@@ -1163,8 +1293,6 @@ foreach(CURL_TEST
HAVE_BOOL_T
STDC_HEADERS
HAVE_FILE_OFFSET_BITS
- HAVE_VARIADIC_MACROS_C99
- HAVE_VARIADIC_MACROS_GCC
HAVE_ATOMIC
)
curl_internal_test(${CURL_TEST})
@@ -1180,18 +1308,20 @@ check_type_size("off_t" SIZEOF_OFF_T)
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(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=" "" HAVE_WIN32_WINNT "${OUTPUT}")
- message(STATUS "Found _WIN32_WINNT=${HAVE_WIN32_WINNT}")
- endif()
- # avoid storing HAVE_WIN32_WINNT in CMake cache
- unset(HAVE_WIN32_WINNT CACHE)
+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)
@@ -1237,8 +1367,10 @@ if(NEED_REENTRANT)
endforeach()
endif()
-# Check clock_gettime(CLOCK_MONOTONIC, x) support
-curl_internal_test(HAVE_CLOCK_GETTIME_MONOTONIC)
+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)
@@ -1282,8 +1414,6 @@ else()
set(CURL_PULL_SYS_SOCKET_H ${HAVE_SYS_SOCKET_H})
set(CURL_PULL_SYS_POLL_H ${HAVE_SYS_POLL_H})
endif()
-set(CURL_PULL_STDINT_H ${HAVE_STDINT_H})
-set(CURL_PULL_INTTYPES_H ${HAVE_INTTYPES_H})
include(CMake/OtherTests.cmake)
@@ -1296,11 +1426,8 @@ if(WIN32)
# Use the manifest embedded in the Windows Resource
set(CMAKE_RC_FLAGS "${CMAKE_RC_FLAGS} -DCURL_EMBED_MANIFEST")
- # Check if crypto functions in wincrypt.h are actually available
- if(HAVE_WINCRYPT_H)
- check_symbol_exists(CryptAcquireContext "${CURL_INCLUDES}" USE_WINCRYPT)
- endif()
- if(USE_WINCRYPT)
+ # We use crypto functions that are not available for UWP apps
+ if(NOT WINDOWS_STORE)
set(USE_WIN32_CRYPTO ON)
endif()
@@ -1308,25 +1435,6 @@ if(WIN32)
if(USE_WIN32_CRYPTO OR USE_SCHANNEL)
list(APPEND CURL_LIBS "advapi32" "crypt32")
endif()
-
- # Matching logic used for Curl_win32_random()
- if(MINGW)
- check_c_source_compiles("
- #include <_mingw.h>
- #if defined(__MINGW64_VERSION_MAJOR)
- #error
- #endif
- int main(void) {
- return 0;
- }"
- HAVE_MINGW_ORIGINAL)
- endif()
-
- if(NOT HAVE_MINGW_ORIGINAL)
- list(APPEND CURL_LIBS "bcrypt")
- else()
- set(HAVE_FTRUNCATE OFF)
- endif()
endif()
if(MSVC)
@@ -1413,241 +1521,262 @@ if(BUILD_TESTING)
add_subdirectory(tests)
endif()
-# 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}")
+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()
-endmacro()
-# NTLM support requires crypto function adaptions from various SSL libs
-# TODO alternative SSL libs tests for SSP1, GNUTLS, NSS
-if(NOT (CURL_DISABLE_CRYPTO_AUTH OR CURL_DISABLE_NTLM) AND
- (USE_OPENSSL OR USE_MBEDTLS OR USE_DARWINSSL OR USE_WIN32_CRYPTO))
- 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_CRYPTO_AUTH AND
- (HAVE_GSSAPI OR USE_WINDOWS_SSPI))
-_add_if("Kerberos" NOT CURL_DISABLE_CRYPTO_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_CRYPTO_AUTH OR 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_CRYPTO_AUTH OR CURL_DISABLE_NTLM) AND
- (use_curl_ntlm_core OR USE_WINDOWS_SSPI) AND
- NOT CURL_DISABLE_HTTP AND NTLM_WB_ENABLED)
-# TODO missing option (--enable-tls-srp), depends on GNUTLS_SRP/OPENSSL_SRP
-_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)
-_add_if("HTTPS-proxy" SSL_ENABLED AND (USE_OPENSSL OR USE_GNUTLS OR USE_NSS))
-_add_if("unicode" ENABLE_UNICODE)
-_add_if("threadsafe" HAVE_ATOMIC 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
-# TODO check HAVE_LDAP_SSL (in autoconf this is enabled with --enable-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("NSS" SSL_ENABLED AND USE_NSS)
-_add_if("wolfSSL" SSL_ENABLED AND USE_WOLFSSL)
-if(_items)
- list(SORT _items)
-endif()
-string(REPLACE ";" " " SSL_BACKENDS "${_items}")
-message(STATUS "Enabled SSL backends: ${SSL_BACKENDS}")
-
-# curl-config needs the following options to be set.
-set(CC "${CMAKE_C_COMPILER}")
-# TODO probably put a -D... options here?
-set(CONFIGURE_OPTIONS "")
-# TODO when to set "-DCURL_STATICLIB" for CPPFLAG_CURL_STATICLIB?
-set(CPPFLAG_CURL_STATICLIB "")
-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()
+ # 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()
- get_target_property(_lib "${_libname}" LOCATION)
- if(NOT _lib)
- message(WARNING "Bad lib in library list: ${_libname}")
- continue()
+ 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(_lib MATCHES ".*/.*" OR _lib MATCHES "^-")
- set(LIBCURL_LIBS "${LIBCURL_LIBS} ${_lib}")
+ if(BUILD_STATIC_LIBS)
+ set(ENABLE_STATIC "yes")
else()
- set(LIBCURL_LIBS "${LIBCURL_LIBS} -l${_lib}")
+ set(ENABLE_STATIC "no")
endif()
-endforeach()
-if(BUILD_SHARED_LIBS)
- set(ENABLE_SHARED "yes")
- set(ENABLE_STATIC "no")
- set(LIBCURL_NO_SHARED "")
-else()
- set(ENABLE_SHARED "no")
- set(ENABLE_STATIC "yes")
- set(LIBCURL_NO_SHARED "${LIBCURL_LIBS}")
-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
-)
+ # "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}
-)
+ # 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()
-if(CURL_ENABLE_EXPORT_TARGET)
install(
- EXPORT "${TARGETS_EXPORT_NAME}"
- NAMESPACE "${PROJECT_NAME}::"
+ FILES ${version_config} ${project_config}
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")
+ # 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()
-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)
+ 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)
+ add_custom_target(curl_uninstall
+ COMMAND ${CMAKE_COMMAND} -P
+ ${CMAKE_CURRENT_BINARY_DIR}/CMake/cmake_uninstall.cmake)
+ endif()
endif()
diff --git a/COPYING b/COPYING
index 90f05adf2..d1eab3eb9 100644
--- a/COPYING
+++ b/COPYING
@@ -1,6 +1,6 @@
COPYRIGHT AND PERMISSION NOTICE
-Copyright (c) 1996 - 2022, Daniel Stenberg, <daniel@haxx.se>, and many
+Copyright (c) 1996 - 2023, Daniel Stenberg, <daniel@haxx.se>, and many
contributors, see the THANKS file.
All rights reserved.
diff --git a/MacOSX-Framework b/MacOSX-Framework
index 240eb845e..5ac537633 100755
--- a/MacOSX-Framework
+++ b/MacOSX-Framework
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/Makefile b/Makefile
index ab5a9b5f3..a5818e1da 100644
--- a/Makefile
+++ b/Makefile
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -31,25 +31,25 @@ ssl:
make
mingw32:
- $(MAKE) -C lib -f Makefile.m32
- $(MAKE) -C src -f Makefile.m32
+ $(MAKE) -C lib -f Makefile.mk
+ $(MAKE) -C src -f Makefile.mk
mingw32-clean:
- $(MAKE) -C lib -f Makefile.m32 clean
- $(MAKE) -C src -f Makefile.m32 clean
- $(MAKE) -C docs/examples -f Makefile.m32 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.m32 vclean
- $(MAKE) -C src -f Makefile.m32 vclean
- $(MAKE) -C docs/examples -f Makefile.m32 vclean
+ $(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.m32 CFG=$@
+ $(MAKE) -C docs/examples -f Makefile.mk CFG=$@
mingw32%:
- $(MAKE) -C lib -f Makefile.m32 CFG=$@
- $(MAKE) -C src -f Makefile.m32 CFG=$@
+ $(MAKE) -C lib -f Makefile.mk CFG=$@
+ $(MAKE) -C src -f Makefile.mk CFG=$@
vc:
cd winbuild
@@ -59,9 +59,9 @@ vc-x64:
cd winbuild
nmake /f Makefile.vc MACHINE=x64
-djgpp:
- $(MAKE) -C lib -f Makefile.dj
- $(MAKE) -C src -f Makefile.dj
+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
@@ -71,9 +71,9 @@ cygwin-ssl:
./configure --with-openssl
make
-amiga:
- cd ./lib && make -f makefile.amiga
- cd ./src && make -f makefile.amiga
+amiga%:
+ $(MAKE) -C lib -f Makefile.mk CFG=$@ CROSSPREFIX=m68k-amigaos-
+ $(MAKE) -C src -f Makefile.mk CFG=$@ CROSSPREFIX=m68k-amigaos-
unix: all
diff --git a/Makefile.am b/Makefile.am
index 40771ed38..c8afcb505 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -43,37 +43,16 @@ CMAKE_DIST = \
CMake/FindNGHTTP2.cmake \
CMake/FindNGHTTP3.cmake \
CMake/FindNGTCP2.cmake \
- CMake/FindNSS.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
-VC10_LIBTMPL = projects/Windows/VC10/lib/libcurl.tmpl
-VC10_LIBVCXPROJ = projects/Windows/VC10/lib/libcurl.vcxproj.dist
-VC10_LIBVCXPROJ_DEPS = $(VC10_LIBTMPL) Makefile.am lib/Makefile.inc
-VC10_SRCTMPL = projects/Windows/VC10/src/curl.tmpl
-VC10_SRCVCXPROJ = projects/Windows/VC10/src/curl.vcxproj.dist
-VC10_SRCVCXPROJ_DEPS = $(VC10_SRCTMPL) Makefile.am src/Makefile.inc
-
-VC11_LIBTMPL = projects/Windows/VC11/lib/libcurl.tmpl
-VC11_LIBVCXPROJ = projects/Windows/VC11/lib/libcurl.vcxproj.dist
-VC11_LIBVCXPROJ_DEPS = $(VC11_LIBTMPL) Makefile.am lib/Makefile.inc
-VC11_SRCTMPL = projects/Windows/VC11/src/curl.tmpl
-VC11_SRCVCXPROJ = projects/Windows/VC11/src/curl.vcxproj.dist
-VC11_SRCVCXPROJ_DEPS = $(VC11_SRCTMPL) Makefile.am src/Makefile.inc
-
-VC12_LIBTMPL = projects/Windows/VC12/lib/libcurl.tmpl
-VC12_LIBVCXPROJ = projects/Windows/VC12/lib/libcurl.vcxproj.dist
-VC12_LIBVCXPROJ_DEPS = $(VC12_LIBTMPL) Makefile.am lib/Makefile.inc
-VC12_SRCTMPL = projects/Windows/VC12/src/curl.tmpl
-VC12_SRCVCXPROJ = projects/Windows/VC12/src/curl.vcxproj.dist
-VC12_SRCVCXPROJ_DEPS = $(VC12_SRCTMPL) Makefile.am src/Makefile.inc
-
VC14_LIBTMPL = projects/Windows/VC14/lib/libcurl.tmpl
VC14_LIBVCXPROJ = projects/Windows/VC14/lib/libcurl.vcxproj.dist
VC14_LIBVCXPROJ_DEPS = $(VC14_LIBTMPL) Makefile.am lib/Makefile.inc
@@ -88,6 +67,13 @@ 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
@@ -99,21 +85,6 @@ VC_DIST = projects/README.md \
projects/build-openssl.bat \
projects/build-wolfssl.bat \
projects/checksrc.bat \
- projects/Windows/VC10/curl-all.sln \
- projects/Windows/VC10/lib/libcurl.sln \
- projects/Windows/VC10/lib/libcurl.vcxproj.filters \
- projects/Windows/VC10/src/curl.sln \
- projects/Windows/VC10/src/curl.vcxproj.filters \
- projects/Windows/VC11/curl-all.sln \
- projects/Windows/VC11/lib/libcurl.sln \
- projects/Windows/VC11/lib/libcurl.vcxproj.filters \
- projects/Windows/VC11/src/curl.sln \
- projects/Windows/VC11/src/curl.vcxproj.filters \
- projects/Windows/VC12/curl-all.sln \
- projects/Windows/VC12/lib/libcurl.sln \
- projects/Windows/VC12/lib/libcurl.vcxproj.filters \
- projects/Windows/VC12/src/curl.sln \
- projects/Windows/VC12/src/curl.vcxproj.filters \
projects/Windows/VC14/curl-all.sln \
projects/Windows/VC14/lib/libcurl.sln \
projects/Windows/VC14/lib/libcurl.vcxproj.filters \
@@ -124,6 +95,11 @@ VC_DIST = projects/README.md \
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 \
@@ -148,10 +124,10 @@ PLAN9_DIST = plan9/include/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
+ $(VC_DIST) $(WINBUILD_DIST) $(PLAN9_DIST) lib/libcurl.vers.in buildconf.bat \
+ libcurl.def
-CLEANFILES = $(VC10_LIBVCXPROJ) $(VC10_SRCVCXPROJ) $(VC11_LIBVCXPROJ) \
- $(VC11_SRCVCXPROJ) $(VC12_LIBVCXPROJ) $(VC12_SRCVCXPROJ) $(VC14_LIBVCXPROJ) \
+CLEANFILES = $(VC14_LIBVCXPROJ) \
$(VC14_SRCVCXPROJ) $(VC14_10_LIBVCXPROJ) $(VC14_10_SRCVCXPROJ) \
$(VC14_30_LIBVCXPROJ) $(VC14_30_SRCVCXPROJ)
@@ -299,10 +275,9 @@ checksrc:
.PHONY: vc-ide
-vc-ide: $(VC10_LIBVCXPROJ_DEPS) $(VC10_SRCVCXPROJ_DEPS) \
- $(VC11_LIBVCXPROJ_DEPS) $(VC11_SRCVCXPROJ_DEPS) $(VC12_LIBVCXPROJ_DEPS) \
- $(VC12_SRCVCXPROJ_DEPS) $(VC14_LIBVCXPROJ_DEPS) $(VC14_SRCVCXPROJ_DEPS) \
- $(VC14_10_LIBVCXPROJ_DEPS) $(VC14_10_SRCVCXPROJ_DEPS) \
+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'; \
@@ -464,55 +439,7 @@ function gen_element(type, dir, file)\
printf("%s\r\n", $$0);\
}';\
\
- echo "generating '$(VC10_LIBVCXPROJ)'"; \
- awk -v proj_type=vcxproj \
- -v lib_srcs="$$sorted_lib_srcs" \
- -v lib_hdrs="$$sorted_lib_hdrs" \
- -v lib_rc="$$win32_lib_rc" \
- -v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \
- -v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \
- -v lib_vquic_srcs="$$sorted_lib_vquic_srcs" \
- -v lib_vquic_hdrs="$$sorted_lib_vquic_hdrs" \
- -v lib_vssh_srcs="$$sorted_lib_vssh_srcs" \
- -v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \
- -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
- -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
- "$$awk_code" $(srcdir)/$(VC10_LIBTMPL) > $(VC10_LIBVCXPROJ) || { exit 1; }; \
- \
- echo "generating '$(VC10_SRCVCXPROJ)'"; \
- awk -v proj_type=vcxproj \
- -v src_srcs="$$sorted_src_srcs" \
- -v src_hdrs="$$sorted_src_hdrs" \
- -v src_rc="$$win32_src_rc" \
- -v src_x_srcs="$$sorted_src_x_srcs" \
- -v src_x_hdrs="$$sorted_src_x_hdrs" \
- "$$awk_code" $(srcdir)/$(VC10_SRCTMPL) > $(VC10_SRCVCXPROJ) || { exit 1; }; \
- \
- echo "generating '$(VC11_LIBVCXPROJ)'"; \
- awk -v proj_type=vcxproj \
- -v lib_srcs="$$sorted_lib_srcs" \
- -v lib_hdrs="$$sorted_lib_hdrs" \
- -v lib_rc="$$win32_lib_rc" \
- -v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \
- -v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \
- -v lib_vquic_srcs="$$sorted_lib_vquic_srcs" \
- -v lib_vquic_hdrs="$$sorted_lib_vquic_hdrs" \
- -v lib_vssh_srcs="$$sorted_lib_vssh_srcs" \
- -v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \
- -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
- -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
- "$$awk_code" $(srcdir)/$(VC11_LIBTMPL) > $(VC11_LIBVCXPROJ) || { exit 1; }; \
- \
- echo "generating '$(VC11_SRCVCXPROJ)'"; \
- awk -v proj_type=vcxproj \
- -v src_srcs="$$sorted_src_srcs" \
- -v src_hdrs="$$sorted_src_hdrs" \
- -v src_rc="$$win32_src_rc" \
- -v src_x_srcs="$$sorted_src_x_srcs" \
- -v src_x_hdrs="$$sorted_src_x_hdrs" \
- "$$awk_code" $(srcdir)/$(VC11_SRCTMPL) > $(VC11_SRCVCXPROJ) || { exit 1; }; \
- \
- echo "generating '$(VC12_LIBVCXPROJ)'"; \
+ echo "generating '$(VC14_LIBVCXPROJ)'"; \
awk -v proj_type=vcxproj \
-v lib_srcs="$$sorted_lib_srcs" \
-v lib_hdrs="$$sorted_lib_hdrs" \
@@ -525,18 +452,18 @@ function gen_element(type, dir, file)\
-v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \
-v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
-v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
- "$$awk_code" $(srcdir)/$(VC12_LIBTMPL) > $(VC12_LIBVCXPROJ) || { exit 1; }; \
+ "$$awk_code" $(srcdir)/$(VC14_LIBTMPL) > $(VC14_LIBVCXPROJ) || { exit 1; }; \
\
- echo "generating '$(VC12_SRCVCXPROJ)'"; \
+ 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)/$(VC12_SRCTMPL) > $(VC12_SRCVCXPROJ) || { exit 1; }; \
+ "$$awk_code" $(srcdir)/$(VC14_SRCTMPL) > $(VC14_SRCVCXPROJ) || { exit 1; }; \
\
- echo "generating '$(VC14_LIBVCXPROJ)'"; \
+ echo "generating '$(VC14_10_LIBVCXPROJ)'"; \
awk -v proj_type=vcxproj \
-v lib_srcs="$$sorted_lib_srcs" \
-v lib_hdrs="$$sorted_lib_hdrs" \
@@ -549,18 +476,18 @@ function gen_element(type, dir, file)\
-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; }; \
+ "$$awk_code" $(srcdir)/$(VC14_10_LIBTMPL) > $(VC14_10_LIBVCXPROJ) || { exit 1; }; \
\
- echo "generating '$(VC14_SRCVCXPROJ)'"; \
+ 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_SRCTMPL) > $(VC14_SRCVCXPROJ) || { exit 1; }; \
+ "$$awk_code" $(srcdir)/$(VC14_10_SRCTMPL) > $(VC14_10_SRCVCXPROJ) || { exit 1; }; \
\
- echo "generating '$(VC14_10_LIBVCXPROJ)'"; \
+ echo "generating '$(VC14_20_LIBVCXPROJ)'"; \
awk -v proj_type=vcxproj \
-v lib_srcs="$$sorted_lib_srcs" \
-v lib_hdrs="$$sorted_lib_hdrs" \
@@ -573,17 +500,16 @@ function gen_element(type, dir, file)\
-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; }; \
+ "$$awk_code" $(srcdir)/$(VC14_20_LIBTMPL) > $(VC14_20_LIBVCXPROJ) || { exit 1; }; \
\
- echo "generating '$(VC14_10_SRCVCXPROJ)'"; \
+ 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_10_SRCTMPL) > $(VC14_10_SRCVCXPROJ) || { exit 1; }; \
- \
+ "$$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" \
diff --git a/Makefile.in b/Makefile.in
index 158bdfc4f..59519f7b2 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -21,7 +21,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -45,7 +45,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -69,7 +69,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -176,7 +176,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.m4 \
$(top_srcdir)/m4/curl-confopts.m4 \
$(top_srcdir)/m4/curl-functions.m4 \
$(top_srcdir)/m4/curl-gnutls.m4 \
- $(top_srcdir)/m4/curl-mbedtls.m4 $(top_srcdir)/m4/curl-nss.m4 \
+ $(top_srcdir)/m4/curl-mbedtls.m4 \
$(top_srcdir)/m4/curl-openssl.m4 \
$(top_srcdir)/m4/curl-override.m4 \
$(top_srcdir)/m4/curl-reentrant.m4 \
@@ -339,6 +339,8 @@ distcleancheck_listfiles = find . -type f -print
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APACHECTL = @APACHECTL@
+APXS = @APXS@
AR = @AR@
AR_FLAGS = @AR_FLAGS@
AS = @AS@
@@ -347,6 +349,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@
+CADDY = @CADDY@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -408,6 +411,8 @@ HAVE_LIBZ = @HAVE_LIBZ@
HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
HAVE_PROTO_BSDSOCKET_H = @HAVE_PROTO_BSDSOCKET_H@
HAVE_ZSTD = @HAVE_ZSTD@
+HTTPD = @HTTPD@
+HTTPD_NGHTTPX = @HTTPD_NGHTTPX@
IDN_ENABLED = @IDN_ENABLED@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -435,7 +440,6 @@ MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
NROFF = @NROFF@
-NSS_LIBS = @NSS_LIBS@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
@@ -466,6 +470,7 @@ SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@
SUPPORT_FEATURES = @SUPPORT_FEATURES@
SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_NGHTTPX = @TEST_NGHTTPX@
USE_ARES = @USE_ARES@
USE_BEARSSL = @USE_BEARSSL@
USE_GNUTLS = @USE_GNUTLS@
@@ -479,9 +484,8 @@ USE_NGHTTP2 = @USE_NGHTTP2@
USE_NGHTTP3 = @USE_NGHTTP3@
USE_NGTCP2 = @USE_NGTCP2@
USE_NGTCP2_CRYPTO_GNUTLS = @USE_NGTCP2_CRYPTO_GNUTLS@
-USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@
+USE_NGTCP2_CRYPTO_QUICTLS = @USE_NGTCP2_CRYPTO_QUICTLS@
USE_NGTCP2_CRYPTO_WOLFSSL = @USE_NGTCP2_CRYPTO_WOLFSSL@
-USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_RUSTLS = @USE_RUSTLS@
@@ -571,34 +575,16 @@ CMAKE_DIST = \
CMake/FindNGHTTP2.cmake \
CMake/FindNGHTTP3.cmake \
CMake/FindNGTCP2.cmake \
- CMake/FindNSS.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
-VC10_LIBTMPL = projects/Windows/VC10/lib/libcurl.tmpl
-VC10_LIBVCXPROJ = projects/Windows/VC10/lib/libcurl.vcxproj.dist
-VC10_LIBVCXPROJ_DEPS = $(VC10_LIBTMPL) Makefile.am lib/Makefile.inc
-VC10_SRCTMPL = projects/Windows/VC10/src/curl.tmpl
-VC10_SRCVCXPROJ = projects/Windows/VC10/src/curl.vcxproj.dist
-VC10_SRCVCXPROJ_DEPS = $(VC10_SRCTMPL) Makefile.am src/Makefile.inc
-VC11_LIBTMPL = projects/Windows/VC11/lib/libcurl.tmpl
-VC11_LIBVCXPROJ = projects/Windows/VC11/lib/libcurl.vcxproj.dist
-VC11_LIBVCXPROJ_DEPS = $(VC11_LIBTMPL) Makefile.am lib/Makefile.inc
-VC11_SRCTMPL = projects/Windows/VC11/src/curl.tmpl
-VC11_SRCVCXPROJ = projects/Windows/VC11/src/curl.vcxproj.dist
-VC11_SRCVCXPROJ_DEPS = $(VC11_SRCTMPL) Makefile.am src/Makefile.inc
-VC12_LIBTMPL = projects/Windows/VC12/lib/libcurl.tmpl
-VC12_LIBVCXPROJ = projects/Windows/VC12/lib/libcurl.vcxproj.dist
-VC12_LIBVCXPROJ_DEPS = $(VC12_LIBTMPL) Makefile.am lib/Makefile.inc
-VC12_SRCTMPL = projects/Windows/VC12/src/curl.tmpl
-VC12_SRCVCXPROJ = projects/Windows/VC12/src/curl.vcxproj.dist
-VC12_SRCVCXPROJ_DEPS = $(VC12_SRCTMPL) Makefile.am src/Makefile.inc
VC14_LIBTMPL = projects/Windows/VC14/lib/libcurl.tmpl
VC14_LIBVCXPROJ = projects/Windows/VC14/lib/libcurl.vcxproj.dist
VC14_LIBVCXPROJ_DEPS = $(VC14_LIBTMPL) Makefile.am lib/Makefile.inc
@@ -611,6 +597,12 @@ 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
@@ -621,21 +613,6 @@ VC_DIST = projects/README.md \
projects/build-openssl.bat \
projects/build-wolfssl.bat \
projects/checksrc.bat \
- projects/Windows/VC10/curl-all.sln \
- projects/Windows/VC10/lib/libcurl.sln \
- projects/Windows/VC10/lib/libcurl.vcxproj.filters \
- projects/Windows/VC10/src/curl.sln \
- projects/Windows/VC10/src/curl.vcxproj.filters \
- projects/Windows/VC11/curl-all.sln \
- projects/Windows/VC11/lib/libcurl.sln \
- projects/Windows/VC11/lib/libcurl.vcxproj.filters \
- projects/Windows/VC11/src/curl.sln \
- projects/Windows/VC11/src/curl.vcxproj.filters \
- projects/Windows/VC12/curl-all.sln \
- projects/Windows/VC12/lib/libcurl.sln \
- projects/Windows/VC12/lib/libcurl.vcxproj.filters \
- projects/Windows/VC12/src/curl.sln \
- projects/Windows/VC12/src/curl.vcxproj.filters \
projects/Windows/VC14/curl-all.sln \
projects/Windows/VC14/lib/libcurl.sln \
projects/Windows/VC14/lib/libcurl.vcxproj.filters \
@@ -646,6 +623,11 @@ VC_DIST = projects/README.md \
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 \
@@ -670,10 +652,10 @@ PLAN9_DIST = plan9/include/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
+ $(VC_DIST) $(WINBUILD_DIST) $(PLAN9_DIST) lib/libcurl.vers.in buildconf.bat \
+ libcurl.def
-CLEANFILES = $(VC10_LIBVCXPROJ) $(VC10_SRCVCXPROJ) $(VC11_LIBVCXPROJ) \
- $(VC11_SRCVCXPROJ) $(VC12_LIBVCXPROJ) $(VC12_SRCVCXPROJ) $(VC14_LIBVCXPROJ) \
+CLEANFILES = $(VC14_LIBVCXPROJ) \
$(VC14_SRCVCXPROJ) $(VC14_10_LIBVCXPROJ) $(VC14_10_SRCVCXPROJ) \
$(VC14_30_LIBVCXPROJ) $(VC14_30_SRCVCXPROJ)
@@ -704,13 +686,11 @@ LIB_VAUTH_HFILES = \
LIB_VTLS_CFILES = \
vtls/bearssl.c \
- vtls/gskit.c \
vtls/gtls.c \
vtls/hostcheck.c \
vtls/keylog.c \
vtls/mbedtls.c \
vtls/mbedtls_threadlock.c \
- vtls/nss.c \
vtls/openssl.c \
vtls/rustls.c \
vtls/schannel.c \
@@ -722,32 +702,33 @@ LIB_VTLS_CFILES = \
LIB_VTLS_HFILES = \
vtls/bearssl.h \
- vtls/gskit.h \
vtls/gtls.h \
vtls/hostcheck.h \
vtls/keylog.h \
vtls/mbedtls.h \
vtls/mbedtls_threadlock.h \
- vtls/nssg.h \
vtls/openssl.h \
vtls/rustls.h \
vtls/schannel.h \
+ vtls/schannel_int.h \
vtls/sectransp.h \
vtls/vtls.h \
+ vtls/vtls_int.h \
vtls/wolfssl.h \
vtls/x509asn1.h
LIB_VQUIC_CFILES = \
- vquic/msh3.c \
- vquic/ngtcp2.c \
- vquic/quiche.c \
+ vquic/curl_msh3.c \
+ vquic/curl_ngtcp2.c \
+ vquic/curl_quiche.c \
vquic/vquic.c
LIB_VQUIC_HFILES = \
- vquic/msh3.h \
- vquic/ngtcp2.h \
- vquic/quiche.h \
- vquic/vquic.h
+ vquic/curl_msh3.h \
+ vquic/curl_ngtcp2.h \
+ vquic/curl_quiche.h \
+ vquic/vquic.h \
+ vquic/vquic_int.h
LIB_VSSH_CFILES = \
vssh/libssh.c \
@@ -763,8 +744,15 @@ LIB_CFILES = \
asyn-ares.c \
asyn-thread.c \
base64.c \
+ bufq.c \
bufref.c \
c-hyper.c \
+ cf-h1-proxy.c \
+ cf-h2-proxy.c \
+ cf-haproxy.c \
+ cf-https-connect.c \
+ cf-socket.c \
+ cfilters.c \
conncache.c \
connect.c \
content_encoding.c \
@@ -786,9 +774,11 @@ LIB_CFILES = \
curl_sasl.c \
curl_sspi.c \
curl_threads.c \
+ curl_trc.c \
dict.c \
doh.c \
dynbuf.c \
+ dynhds.c \
easy.c \
easygetopt.c \
easyoptions.c \
@@ -802,7 +792,6 @@ LIB_CFILES = \
getenv.c \
getinfo.c \
gopher.c \
- h2h3.c \
hash.c \
headers.c \
hmac.c \
@@ -813,14 +802,15 @@ LIB_CFILES = \
hostsyn.c \
hsts.c \
http.c \
+ http1.c \
http2.c \
+ http_aws_sigv4.c \
http_chunks.c \
http_digest.c \
http_negotiate.c \
http_ntlm.c \
http_proxy.c \
- http_aws_sigv4.c \
- idn_win32.c \
+ idn.c \
if2ip.c \
imap.c \
inet_ntop.c \
@@ -828,6 +818,7 @@ LIB_CFILES = \
krb5.c \
ldap.c \
llist.c \
+ macos.c \
md4.c \
md5.c \
memdebug.c \
@@ -877,7 +868,6 @@ LIB_CFILES = \
version.c \
version_win32.c \
warnless.c \
- wildcard.c \
ws.c
LIB_HFILES = \
@@ -885,8 +875,15 @@ LIB_HFILES = \
amigaos.h \
arpa_telnet.h \
asyn.h \
+ bufq.h \
bufref.h \
c-hyper.h \
+ cf-h1-proxy.h \
+ cf-h2-proxy.h \
+ cf-haproxy.h \
+ cf-https-connect.h \
+ cf-socket.h \
+ cfilters.h \
conncache.h \
connect.h \
content_encoding.h \
@@ -920,10 +917,12 @@ LIB_HFILES = \
curl_sha256.h \
curl_sspi.h \
curl_threads.h \
+ curl_trc.h \
curlx.h \
dict.h \
doh.h \
dynbuf.h \
+ dynhds.h \
easy_lock.h \
easyif.h \
easyoptions.h \
@@ -932,29 +931,31 @@ LIB_HFILES = \
fileinfo.h \
fopen.h \
formdata.h \
- functypes.h \
ftp.h \
ftplistparser.h \
+ functypes.h \
getinfo.h \
gopher.h \
- h2h3.h \
hash.h \
headers.h \
hostip.h \
hsts.h \
http.h \
+ http1.h \
http2.h \
+ http_aws_sigv4.h \
http_chunks.h \
http_digest.h \
http_negotiate.h \
http_ntlm.h \
http_proxy.h \
- http_aws_sigv4.h \
+ idn.h \
if2ip.h \
imap.h \
inet_ntop.h \
inet_pton.h \
llist.h \
+ macos.h \
memdebug.h \
mime.h \
mqtt.h \
@@ -968,7 +969,6 @@ LIB_HFILES = \
pop3.h \
progress.h \
psl.h \
- quic.h \
rand.h \
rename.h \
rtsp.h \
@@ -1002,7 +1002,6 @@ LIB_HFILES = \
urldata.h \
version_win32.h \
warnless.h \
- wildcard.h \
ws.h
LIB_RCFILES = libcurl.rc
@@ -1013,27 +1012,34 @@ HHEADERS = $(LIB_HFILES) $(LIB_VAUTH_HFILES) $(LIB_VTLS_HFILES) \
$(LIB_VQUIC_HFILES) $(LIB_VSSH_HFILES)
+# libcurl sources to include in curltool lib we use for test binaries
+CURLTOOL_LIBCURL_CFILES = \
+ ../lib/base64.c \
+ ../lib/dynbuf.c
+
+
# libcurl has sources that provide functions named curlx_* that aren't part of
-# the official API, but we re-use the code here to avoid duplication.
+# the official API, but we reuse the code here to avoid duplication.
CURLX_CFILES = \
+ ../lib/base64.c \
+ ../lib/curl_multibyte.c \
+ ../lib/dynbuf.c \
+ ../lib/nonblock.c \
../lib/strtoofft.c \
../lib/timediff.c \
- ../lib/nonblock.c \
- ../lib/warnless.c \
- ../lib/curl_multibyte.c \
../lib/version_win32.c \
- ../lib/dynbuf.c
+ ../lib/warnless.c
CURLX_HFILES = \
+ ../lib/curl_ctype.h \
+ ../lib/curl_multibyte.h \
../lib/curl_setup.h \
+ ../lib/dynbuf.h \
+ ../lib/nonblock.h \
../lib/strtoofft.h \
../lib/timediff.h \
- ../lib/nonblock.h \
- ../lib/warnless.h \
- ../lib/curl_ctype.h \
- ../lib/curl_multibyte.h \
../lib/version_win32.h \
- ../lib/dynbuf.h
+ ../lib/warnless.h
CURL_CFILES = \
slist_wc.c \
@@ -1057,25 +1063,27 @@ CURL_CFILES = \
tool_help.c \
tool_helpers.c \
tool_hugehelp.c \
+ tool_ipfs.c \
tool_libinfo.c \
tool_listhelp.c \
tool_main.c \
tool_msgs.c \
tool_operate.c \
tool_operhlp.c \
- tool_panykey.c \
tool_paramhlp.c \
tool_parsecfg.c \
tool_progress.c \
- tool_strdup.c \
tool_setopt.c \
tool_sleep.c \
+ tool_stderr.c \
+ tool_strdup.c \
tool_urlglob.c \
tool_util.c \
tool_vms.c \
tool_writeout.c \
tool_writeout_json.c \
- tool_xattr.c
+ tool_xattr.c \
+ var.c
CURL_HFILES = \
slist_wc.h \
@@ -1099,12 +1107,12 @@ CURL_HFILES = \
tool_help.h \
tool_helpers.h \
tool_hugehelp.h \
+ tool_ipfs.h \
tool_libinfo.h \
tool_main.h \
tool_msgs.h \
tool_operate.h \
tool_operhlp.h \
- tool_panykey.h \
tool_paramhlp.h \
tool_parsecfg.h \
tool_progress.h \
@@ -1112,6 +1120,7 @@ CURL_HFILES = \
tool_setopt.h \
tool_setup.h \
tool_sleep.h \
+ tool_stderr.h \
tool_strdup.h \
tool_urlglob.h \
tool_util.h \
@@ -1119,7 +1128,8 @@ CURL_HFILES = \
tool_vms.h \
tool_writeout.h \
tool_writeout_json.h \
- tool_xattr.h
+ tool_xattr.h \
+ var.h
CURL_RCFILES = curl.rc
@@ -1798,10 +1808,9 @@ checksrc:
.PHONY: vc-ide
-vc-ide: $(VC10_LIBVCXPROJ_DEPS) $(VC10_SRCVCXPROJ_DEPS) \
- $(VC11_LIBVCXPROJ_DEPS) $(VC11_SRCVCXPROJ_DEPS) $(VC12_LIBVCXPROJ_DEPS) \
- $(VC12_SRCVCXPROJ_DEPS) $(VC14_LIBVCXPROJ_DEPS) $(VC14_SRCVCXPROJ_DEPS) \
- $(VC14_10_LIBVCXPROJ_DEPS) $(VC14_10_SRCVCXPROJ_DEPS) \
+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'; \
@@ -1963,55 +1972,7 @@ function gen_element(type, dir, file)\
printf("%s\r\n", $$0);\
}';\
\
- echo "generating '$(VC10_LIBVCXPROJ)'"; \
- awk -v proj_type=vcxproj \
- -v lib_srcs="$$sorted_lib_srcs" \
- -v lib_hdrs="$$sorted_lib_hdrs" \
- -v lib_rc="$$win32_lib_rc" \
- -v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \
- -v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \
- -v lib_vquic_srcs="$$sorted_lib_vquic_srcs" \
- -v lib_vquic_hdrs="$$sorted_lib_vquic_hdrs" \
- -v lib_vssh_srcs="$$sorted_lib_vssh_srcs" \
- -v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \
- -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
- -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
- "$$awk_code" $(srcdir)/$(VC10_LIBTMPL) > $(VC10_LIBVCXPROJ) || { exit 1; }; \
- \
- echo "generating '$(VC10_SRCVCXPROJ)'"; \
- awk -v proj_type=vcxproj \
- -v src_srcs="$$sorted_src_srcs" \
- -v src_hdrs="$$sorted_src_hdrs" \
- -v src_rc="$$win32_src_rc" \
- -v src_x_srcs="$$sorted_src_x_srcs" \
- -v src_x_hdrs="$$sorted_src_x_hdrs" \
- "$$awk_code" $(srcdir)/$(VC10_SRCTMPL) > $(VC10_SRCVCXPROJ) || { exit 1; }; \
- \
- echo "generating '$(VC11_LIBVCXPROJ)'"; \
- awk -v proj_type=vcxproj \
- -v lib_srcs="$$sorted_lib_srcs" \
- -v lib_hdrs="$$sorted_lib_hdrs" \
- -v lib_rc="$$win32_lib_rc" \
- -v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \
- -v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \
- -v lib_vquic_srcs="$$sorted_lib_vquic_srcs" \
- -v lib_vquic_hdrs="$$sorted_lib_vquic_hdrs" \
- -v lib_vssh_srcs="$$sorted_lib_vssh_srcs" \
- -v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \
- -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
- -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
- "$$awk_code" $(srcdir)/$(VC11_LIBTMPL) > $(VC11_LIBVCXPROJ) || { exit 1; }; \
- \
- echo "generating '$(VC11_SRCVCXPROJ)'"; \
- awk -v proj_type=vcxproj \
- -v src_srcs="$$sorted_src_srcs" \
- -v src_hdrs="$$sorted_src_hdrs" \
- -v src_rc="$$win32_src_rc" \
- -v src_x_srcs="$$sorted_src_x_srcs" \
- -v src_x_hdrs="$$sorted_src_x_hdrs" \
- "$$awk_code" $(srcdir)/$(VC11_SRCTMPL) > $(VC11_SRCVCXPROJ) || { exit 1; }; \
- \
- echo "generating '$(VC12_LIBVCXPROJ)'"; \
+ echo "generating '$(VC14_LIBVCXPROJ)'"; \
awk -v proj_type=vcxproj \
-v lib_srcs="$$sorted_lib_srcs" \
-v lib_hdrs="$$sorted_lib_hdrs" \
@@ -2024,18 +1985,18 @@ function gen_element(type, dir, file)\
-v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \
-v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
-v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
- "$$awk_code" $(srcdir)/$(VC12_LIBTMPL) > $(VC12_LIBVCXPROJ) || { exit 1; }; \
+ "$$awk_code" $(srcdir)/$(VC14_LIBTMPL) > $(VC14_LIBVCXPROJ) || { exit 1; }; \
\
- echo "generating '$(VC12_SRCVCXPROJ)'"; \
+ 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)/$(VC12_SRCTMPL) > $(VC12_SRCVCXPROJ) || { exit 1; }; \
+ "$$awk_code" $(srcdir)/$(VC14_SRCTMPL) > $(VC14_SRCVCXPROJ) || { exit 1; }; \
\
- echo "generating '$(VC14_LIBVCXPROJ)'"; \
+ echo "generating '$(VC14_10_LIBVCXPROJ)'"; \
awk -v proj_type=vcxproj \
-v lib_srcs="$$sorted_lib_srcs" \
-v lib_hdrs="$$sorted_lib_hdrs" \
@@ -2048,18 +2009,18 @@ function gen_element(type, dir, file)\
-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; }; \
+ "$$awk_code" $(srcdir)/$(VC14_10_LIBTMPL) > $(VC14_10_LIBVCXPROJ) || { exit 1; }; \
\
- echo "generating '$(VC14_SRCVCXPROJ)'"; \
+ 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_SRCTMPL) > $(VC14_SRCVCXPROJ) || { exit 1; }; \
+ "$$awk_code" $(srcdir)/$(VC14_10_SRCTMPL) > $(VC14_10_SRCVCXPROJ) || { exit 1; }; \
\
- echo "generating '$(VC14_10_LIBVCXPROJ)'"; \
+ echo "generating '$(VC14_20_LIBVCXPROJ)'"; \
awk -v proj_type=vcxproj \
-v lib_srcs="$$sorted_lib_srcs" \
-v lib_hdrs="$$sorted_lib_hdrs" \
@@ -2072,17 +2033,16 @@ function gen_element(type, dir, file)\
-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; }; \
+ "$$awk_code" $(srcdir)/$(VC14_20_LIBTMPL) > $(VC14_20_LIBVCXPROJ) || { exit 1; }; \
\
- echo "generating '$(VC14_10_SRCVCXPROJ)'"; \
+ 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_10_SRCTMPL) > $(VC14_10_SRCVCXPROJ) || { exit 1; }; \
- \
+ "$$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" \
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index 9b70c8c86..3f7dc99f6 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -1,210 +1,206 @@
-curl and libcurl 7.86.0
+curl and libcurl 8.5.0
- Public curl releases: 211
- Command line options: 248
- curl_easy_setopt() options: 300
- Public functions in libcurl: 91
- Contributors: 2733
+ 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 NPN: remove support for and use of [16]
- o Websockets: initial support [23]
+ o gnutls: support CURLSSLOPT_NATIVE_CA [31]
+ o HTTP3: ngtcp2 builds are no longer experimental [77]
This release includes the following bugfixes:
- o altsvc: reject bad port numbers [86]
- o altsvc: use 'h3' for h3 [46]
- o amiga: do not hardcode openssl/zlib into the os config [158]
- o amiga: set SIZEOF_CURL_OFF_T=8 by default [150]
- o amigaos: add missing curl header [159]
- o asyn-ares: set hint flags when calling ares_getaddrinfo [93]
- o autotools: allow --enable-symbol-hiding with windows [65]
- o autotools: allow unix sockets on Windows [144]
- o autotools: reduce brute-force when detecting recv/send arg list [66]
- o aws_sigv4: fix header computation [139]
- o bearssl: make it proper C89 compliant
- o CI/GHA: cancel outdated CI runs on new PR changes [20]
- o CI/GHA: merge msh3 and openssl3 builds into linux workflow [110]
- o cirrus-ci: add macOS build with m1 [81]
- o cirrus: use make LDFLAGS=-all-static instead of curl_LDFLAGS [129]
- o cli tool: do not use disabled protocols
- o cmake: add missing inet_ntop check [145]
- o cmake: add the check of HAVE_SOCKETPAIR [98]
- o cmake: define BUILDING_LIBCURL in lib/CMakeLists, not config.h [5]
- o cmake: delete duplicate HAVE_GETADDRINFO test [149]
- o cmake: enable more detection on Windows [143]
- o cmake: fix original MinGW builds [177]
- o cmake: improve usability of CMake build as a sub-project [186]
- o cmake: set HAVE_GETADDRINFO_THREADSAFE on Windows [147]
- o cmake: set HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID on Windows [146]
- o cmake: sync HAVE_SIGNAL detection with autotools [148]
- o cmdline/docs: add a required 'multi' keyword for each option [160]
- o configure: correct the wording when checking grep -E [13]
- o configure: deprecate builds with small curl_off_t [89]
- o configure: fail if '--without-ssl' + explicit parameter for an ssl lib [164]
- o configure: the ngtcp2 option should default to 'no' [125]
- o connect: change verbose IPv6 address:port to [address]:port [83]
- o connect: fix builds without AF_INET6 [152]
- o connect: fix Curl_updateconninfo for TRNSPRT_UNIX [108]
- o connect: fix the wrong error message on connect failures [55]
- o content_encoding: use writer struct subclasses for different encodings [8]
- o cookie: reject cookie names or content with TAB characters [94]
- o ctype: remove all use of <ctype.h>, use our own versions [12]
- o curl-compilers.m4: for gcc + want warnings, set gnu89 standard [72]
- o curl-compilers.m4: use -O2 as default optimize for clang [6]
- o curl-wolfssl.m4: error out if wolfSSL is not usable [102]
- o curl.h: fix mention of wrong error code in comment
- o curl/add_file_name_to_url: use the libcurl URL parser [99]
- o curl/add_parallel_transfers: better error handling [101]
- o curl/get_url_file_name: use libcurl URL parser [97]
- o curl: warn for --ssl use, considered insecure [49]
- o curl_ctype: convert to macros-only [10]
- o curl_easy_pause.3: unpausing is as fast as possible [14]
- o curl_escape.3: fix typo [50]
- o curl_setup: disable use of FLOSS for 64-bit NonStop builds [69]
- o curl_setup: include curl.h after platform setup headers [37]
- o curl_setup: include only system.h instead of curl.h [34]
- o curl_strequal.3: fix argument typo [60]
- o curl_url_set.3: document CURLU_APPENDQUERY proper [96]
- o CURLMOPT_PIPELINING.3: dedup manpage xref [111]
- o CURLOPT_ACCEPT_ENCODING.3: remove "four" as they are five [85]
- o CURLOPT_AUTOREFERER.3: highlight the privacy leak risk [161]
- o CURLOPT_COOKIEFILE: insist on "" for enable-without-file [119]
- o CURLOPT_COOKIELIST.3: fix formatting mistake [80]
- o CURLOPT_DNS_INTERFACE.3: mention it works for almost all protocols [15]
- o CURLOPT_MIMEPOST.3: add an (inline) example [126]
- o CURLOPT_POSTFIELDS.3: refer to CURLOPT_MIMEPOST [167]
- o CURLOPT_PROXY_SSLCERT_BLOB.3: this is for HTTPS proxies [9]
- o CURLOPT_WILDCARDMATCH.3: Fix backslash escaping under single quotes [172]
- o CURLSHOPT_UNLOCKFUNC.3: the callback has no 'access' argument [84]
- o DEPRECATE.md: Support for systems without 64 bit data types [19]
- o docs/examples: avoid deprecated options in examples where possible [115]
- o docs/INSTALL: update Android Instructions for newer NDKs [151]
- o docs/libcurl/symbols-in-versions: add several missing symbols
- o docs: 100+ spellfixes
- o docs: correct missing uppercase in Markdown files [38]
- o docs: document more server names for test files
- o docs: fix deprecation versions inconsistencies [123]
- o docs: make sure libcurl opts examples pass in long arguments [182]
- o docs: remove mentions of deprecated '--without-openssl' parameter [170]
- o docs: tag curl options better in man pages
- o docs: tell about disabled protocols in CURLOPT_*PROTOCOLS_STR.
- o docs: update sourceforge project links [95]
- o easy: fix the #include order [53]
- o easy: fix the altsvc init for curl_easy_duphandle [77]
- o easy_lock: check for HAVE_STDATOMIC_H as well [187]
- o examples/chkspeed: improve portability [48]
- o formdata: fix warning: 'CURLformoption' is promoted to 'int' [24]
- o ftp: ignore a 550 response to MDTM [1]
- o ftp: remove redundant if [163]
- o functypes: provide the recv and send arg and return types [87]
- o getparameter: return PARAM_MANUAL_REQUESTED for -M even when disabled [17]
- o GHA: build tests in a separate step from the running of them [78]
- o GHA: run proselint on markdown files [22]
- o github: initial CODEOWNERS setup for CI configuration [52]
- o header: define public API functions as extern c [26]
- o headers: reset the requests counter at transfer start [25]
- o hostip: guard PF_INET6 use [157]
- o hostip: lazily wait to figure out if IPv6 works until needed [36]
- o http, vauth: always provide Curl_allow_auth_to_host() functionality [90]
- o http2: make nghttp2 less picky about field whitespace [27]
- o HTTP3.md: update Caddy example [76]
- o http: try parsing Retry-After: as a number first [122]
- o http_proxy: restore the protocol pointer on error [104]
- o httpput-postfields.c: shorten string for C89 compliance [57]
- o ldap: delete stray CURL_HAS_MOZILLA_LDAP reference [79]
- o lib1560: extended to verify detect/reject of unknown schemes
- o lib517: fix C89 constant signedness [73]
- o lib: add missing limits.h includes [35]
- o lib: add required Win32 setup definitions in setup-win32.h [4]
- o lib: prepare the incoming of additional protocols [71]
- o lib: sanitize conditional exclusion around MIME [82]
- o lib: set more flags in config-win32.h [109]
- o lib: the number four in a sequence is the "fourth" [28]
- o libssh: if sftp_init fails, don't get the sftp error code [132]
- o Makefile.m32: deduplicate build rules [131]
- o Makefile.m32: drop CROSSPREFIX and our CC/AR defaults [137]
- o Makefile.m32: exclude libs & libpaths for shared mode exes [127]
- o Makefile.m32: fix regression with tool_hugehelp [130]
- o Makefile.m32: major rework [92]
- o Makefile.m32: reintroduce CROSSPREFIX and -W -Wall [179]
- o Makefile.m32: support more options [142]
- o manpage-syntax.pl: all libcurl option symbols should be \fI-tagged [75]
- o manpages: Fix spelling of "allows to" -> "allows one to" [171]
- o misc: ISSPACE() => ISBLANK() [11]
- o misc: use the term "null-terminate" consistently [41]
- o mprintf: reject two kinds of precision for the same argument [162]
- o mprintf: use snprintf if available [74]
- o mqtt: return error for too long topic [133]
- o mqtt: spell out CONNECT in comments [166]
- o msh3: change the static_assert to make the code C89
- o netrc: compare user name case sensitively [118]
- o netrc: replace fgets with Curl_get_line [174]
- o netrc: use the URL-decoded user [103]
- o ngtcp2: fix build errors due to changes in ngtcp2 library [107]
- o ngtcp2: fix C89 compliance nit
- o noproxy: support proxies specified using cidr notation [184]
- o openssl: make certinfo available for QUIC [91]
- o README.md: add GHA status badges for Linux and macOS builds [40]
- o RELEASE-PROCEDURE.md: mention patch releases [21]
- o resolve: make forced IPv4 resolve only use A queries [61]
- o runtests: fix uninitialized value on ignored tests [128]
- o schannel: ban server ALPN change during recv renegotiation [63]
- o schannel: don't reset recv/send function pointers on renegotiation [156]
- o schannel: when importing PFX, disable key persistence [141]
- o scripts: use `grep -E` instead of `egrep` [30]
- o setopt: use the handler table for protocol name to number conversions [45]
- o setopt: when POST is set, reset the 'upload' field [51]
- o setup-win32: no longer define UNICODE/_UNICODE implicitly [3]
- o single_transfer: use the libcurl URL parser when appending query parts [100]
- o smb: replace CURL_WIN32 with WIN32 [138]
- o strcase: add and use Curl_timestrcmp [106]
- o strerror: improve two URL API error messages
- o symbol-scan.pl: also check for LIBCURL* symbols [43]
- o symbol-scan.pl: scan and verify .3 man pages [42]
- o symbols-in-versions: add missing LIBCURL* symbols
- o symbols-in-versions: CURLOPT_ENCODING is deprecated since 7.21.6
- o test1119: scan all public headers [44]
- o test1275: verify uppercase after period in markdown [135]
- o test972: verify the output without using external tool [32]
- o tests/certs/scripts: insert standard curl source headers [169]
- o tests/Makefile: remove run time stats from ci-test [120]
- o tests: avoid CreateThread if _beginthreadex is available [155]
- o tests: fix tag syntax errors in test files
- o tests: skip mime/form tests when mime is not built-in [54]
- o tidy-up: delete parallel/unused feature flags [117]
- o tidy-up: delete unused HAVE_STRUCT_POLLFD [134]
- o TODO: provide the error body from a CONNECT response [67]
- o tool: avoid generating ambiguous escaped characters in --libcurl [124]
- o tool: remove dead code [70]
- o tool: reorganize function c_escape around a dynbuf [121]
- o tool_hugehelp: make hugehelp a blank macro when disabled [7]
- o tool_main: exit at once if out of file descriptors [113]
- o tool_operate: avoid a few #ifdefs for disabled-libcurl builds [29]
- o tool_operate: more transfer cleanup after parallel transfer fail [165]
- o tool_operate: prevent over-queuing in parallel mode [176]
- o tool_operate: reduce errorbuffer allocs [173]
- o tool_paramhelp: asserts verify maximum sizes for string loading [112]
- o tool_paramhelp: make the max argument a 'double' [136]
- o tool_progress: remove 'Qd' from the parallel progress bar [175]
- o tool_setopt: use better English in --libcurl source comments [39]
- o tool_xattr: save the original URL, not the final redirected one [181]
- o unit test 1655: make it C89-compliant [59]
- o url: a zero-length userinfo part in the URL is still a (blank) user [64]
- o url: allow non-HTTPS HSTS-matching for debug builds [105]
- o url: rename function due to name-clash in Watt-32 [62]
- o url: use IDN decoded names for HSTS checks [140]
- o urlapi: detect scheme better when not guessing [56]
- o urlapi: fix parsing URL without slash with CURLU_URLENCODE [154]
- o urlapi: leaner with fewer allocs [2]
- o urlapi: reject more bad characters from the host name field [88]
- o winbuild/MakefileBuild.vc: handle spaces in libssh(2) include paths [18]
- o winbuild: use NMake batch-rules for compilation [47]
- o windows: add .rc support to autotools builds [33]
- o windows: adjust name of two internal public functions [58]
- o windows: autotools .rc warnings fixup [68]
- o wolfSSL: fix session management bug. [31]
+ 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:
@@ -212,212 +208,211 @@ This release includes the following known bugs:
Planned upcoming removals include:
- o NSS
- o Support for systems without 64 bit data types
+ 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, a1346054 on github, Aftab Alam, ajak in #curl,
- Andrew Lambert, Benjamin Loison, Brad Harder, bsergean on github,
- Christopher Sauer, Dan Fandrich, Daniel Gustafsson, Daniel Hallberg,
- Daniel Stenberg, David Hu, David McLaughlin, Dmitry Karpov, Dominik Klemba,
- Don J Olmstead, Dustin Howett, Edoardo Lolletti, Eloy Degen, Emanuele Torre,
- Emilio López, Gisle Vanem, Hayden Roche, Hiroki Kurosawa, James Fuller,
- Jeremy Maitin-Shepard, Joel Depooter, John Bampton, Jonas Haag,
- jurisuk on github, justchen1369 on github, Keitagit-kun on github,
- Kelly Kaoudis, Marcel Raad, Marc Hörsken, Mark Itzcovitz, Martin Ågren,
- Martin Strunz, Mathieu Carbonneaux, Matthias Gatto, Matt Holt, Max Dymond,
- Michael Drake, Michael Heimpold, n0name321 on github, Orgad Shaneh,
- Patrick Monnerat, Paul Seligman, Peter Goodman, Petr Å tetiar, Philip H,
- Philip H., Philip Heiduck, ProceduralMan on github, Randall S. Becker,
- Ray Satiro, Rickard Hallerbäck, RobBotic1 on github, Robby Simpson,
- Samuel Henrique, Sergey Bronnikov, ShadowZzj on github, Shaun Mirani,
- ssdbest on github, Thiago Suchorski, Tobias Schaefer, Trail of Bits,
- Vasiliy Ulyanov, Viktor Szakats, Xiang Xiao, Yuriy Chernyshov,
- zhanghu on xiaomi
- (74 contributors)
+ 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=9357
- [2] = https://curl.se/bug/?i=9408
- [3] = https://curl.se/bug/?i=9375
- [4] = https://curl.se/bug/?i=9375
- [5] = https://curl.se/bug/?i=9498
- [6] = https://curl.se/bug/?i=9444
- [7] = https://curl.se/bug/?i=9485
- [8] = https://curl.se/bug/?i=9455
- [9] = https://curl.se/bug/?i=9434
- [10] = https://curl.se/bug/?i=9429
- [11] = https://curl.se/bug/?i=9432
- [12] = https://curl.se/bug/?i=9433
- [13] = https://curl.se/bug/?i=9471
- [14] = https://curl.se/bug/?i=9410
- [15] = https://curl.se/bug/?i=9427
- [16] = https://curl.se/bug/?i=9307
- [17] = https://curl.se/bug/?i=9485
- [18] = https://curl.se/mail/lib-2022-09/0038.html
- [19] = https://curl.se/bug/?i=9604
- [20] = https://curl.se/bug/?i=9533
- [21] = https://curl.se/bug/?i=9495
- [22] = https://curl.se/bug/?i=9520
- [23] = https://curl.se/bug/?i=8995
- [24] = https://curl.se/bug/?i=9484
- [25] = https://curl.se/bug/?i=9424
- [26] = https://curl.se/bug/?i=9424
- [27] = https://curl.se/bug/?i=9448
- [28] = https://curl.se/bug/?i=9535
- [29] = https://curl.se/bug/?i=9486
- [30] = https://curl.se/bug/?i=9491
- [31] = https://curl.se/bug/?i=9492
- [32] = https://curl.se/bug/?i=9563
- [33] = https://curl.se/bug/?i=9521
- [34] = https://curl.se/bug/?i=9453
- [35] = https://curl.se/bug/?i=9453
- [36] = https://curl.se/bug/?i=9553
- [37] = https://curl.se/bug/?i=9453
- [38] = https://curl.se/bug/?i=9474
- [39] = https://curl.se/bug/?i=9475
- [40] = https://curl.se/bug/?i=9530
- [41] = https://curl.se/bug/?i=9527
- [42] = https://curl.se/bug/?i=9544
- [43] = https://curl.se/bug/?i=9544
- [44] = https://curl.se/bug/?i=9544
- [45] = https://curl.se/bug/?i=9472
- [46] = https://curl.se/bug/?i=9515
- [47] = https://curl.se/bug/?i=9512
- [48] = https://curl.se/bug/?i=9562
- [49] = https://curl.se/bug/?i=9519
- [50] = https://curl.se/bug/?i=9517
- [51] = https://curl.se/bug/?i=9507
- [52] = https://curl.se/bug/?i=9505
- [53] = https://curl.se/bug/?i=9560
- [54] = https://curl.se/bug/?i=9596
- [55] = https://curl.se/bug/?i=9549
- [56] = https://curl.se/bug/?i=9503
- [57] = https://curl.se/bug/?i=9555
- [58] = https://curl.se/bug/?i=9598
- [59] = https://curl.se/bug/?i=9551
- [60] = https://curl.se/bug/?i=9548
- [61] = https://curl.se/bug/?i=9540
- [62] = https://curl.se/bug/?i=9585
- [63] = https://curl.se/bug/?i=9463
- [64] = https://curl.se/bug/?i=9088
- [65] = https://curl.se/bug/?i=9586
- [66] = https://curl.se/bug/?i=9591
- [67] = https://curl.se/bug/?i=9513
- [68] = https://curl.se/bug/?i=9582
- [69] = https://curl.se/bug/?i=9575
- [70] = https://curl.se/bug/?i=9576
- [71] = https://curl.se/bug/?i=9534
- [72] = https://curl.se/bug/?i=9542
- [73] = https://curl.se/bug/?i=9572
- [74] = https://curl.se/bug/?i=9569
- [75] = https://curl.se/bug/?i=9574
- [76] = https://curl.se/bug/?i=9623
- [77] = https://curl.se/bug/?i=9624
- [78] = https://curl.se/bug/?i=9619
- [79] = https://curl.se/bug/?i=9625
- [80] = https://curl.se/bug/?i=9639
- [81] = https://curl.se/bug/?i=9565
- [82] = https://curl.se/bug/?i=9610
- [83] = https://curl.se/mail/archive-2022-02/0041.html
- [84] = https://curl.se/bug/?i=9612
- [85] = https://curl.se/bug/?i=9614
- [86] = https://curl.se/bug/?i=9607
- [87] = https://curl.se/bug/?i=9592
- [88] = https://curl.se/bug/?i=9608
- [89] = https://curl.se/bug/?i=9605
- [90] = https://curl.se/bug/?i=9600
- [91] = https://curl.se/bug/?i=9584
- [92] = https://curl.se/bug/?i=9632
- [93] = https://curl.se/bug/?i=9694
- [94] = https://curl.se/bug/?i=9659
- [95] = https://curl.se/bug/?i=9630
- [96] = https://curl.se/bug/?i=9628
- [97] = https://curl.se/bug/?i=9684
- [98] = https://curl.se/bug/?i=9686
- [99] = https://curl.se/bug/?i=9683
- [100] = https://curl.se/bug/?i=9681
- [101] = https://curl.se/bug/?i=9729
- [102] = https://curl.se/bug/?i=9682
- [103] = https://curl.se/bug/?i=9709
- [104] = https://curl.se/bug/?i=9790
- [105] = https://curl.se/bug/?i=9728
- [106] = https://curl.se/bug/?i=9658
- [107] = https://curl.se/bug/?i=9747
- [108] = https://curl.se/bug/?i=9664
- [109] = https://curl.se/bug/?i=9712
- [110] = https://curl.se/bug/?i=9646
- [111] = https://curl.se/bug/?i=9776
- [112] = https://curl.se/bug/?i=9719
- [113] = https://curl.se/bug/?i=9663
- [115] = https://curl.se/bug/?i=9661
- [117] = https://curl.se/bug/?i=9652
- [118] = https://curl.se/bug/?i=9657
- [119] = https://curl.se/bug/?i=9654
- [120] = https://curl.se/bug/?i=9656
- [121] = https://curl.se/bug/?i=9653
- [122] = https://curl.se/bug/?i=9718
- [123] = https://curl.se/bug/?i=9711
- [124] = https://curl.se/bug/?i=9643
- [125] = https://curl.se/mail/lib-2022-10/0007.html
- [126] = https://curl.se/bug/?i=9637
- [127] = https://curl.se/bug/?i=9651
- [128] = https://curl.se/bug/?i=9648
- [129] = https://curl.se/bug/?i=9633
- [130] = https://curl.se/bug/?i=9645
- [131] = https://curl.se/bug/?i=9642
- [132] = https://curl.se/bug/?i=9737
- [133] = https://curl.se/bug/?i=9744
- [134] = https://curl.se/bug/?i=9707
- [135] = https://curl.se/bug/?i=9697
- [136] = https://curl.se/bug/?i=9700
- [137] = https://curl.se/bug/?i=9698
- [138] = https://curl.se/bug/?i=9701
- [139] = https://curl.se/bug/?i=7966
- [140] = https://curl.se/bug/?i=9791
- [141] = https://curl.se/bug/?i=9300
- [142] = https://curl.se/bug/?i=9680
- [143] = https://curl.se/bug/?i=9687
- [144] = https://github.com/curl/curl-for-win/blob/73a070d96fd906fdee929e2f1f00a9149fb39239/curl-autotools.sh#L44-L47
- [145] = https://curl.se/bug/?i=9689
- [146] = https://curl.se/bug/?i=9726
- [147] = https://curl.se/bug/?i=9727
- [148] = https://curl.se/bug/?i=9725
- [149] = https://curl.se/bug/?i=9731
- [150] = https://curl.se/bug/?i=9771
- [151] = https://curl.se/bug/?i=9732
- [152] = https://curl.se/bug/?i=9770
- [154] = https://curl.se/bug/?i=9763
- [155] = https://curl.se/bug/?i=9705
- [156] = https://curl.se/bug/?i=9451
- [157] = https://curl.se/bug/?i=9760
- [158] = https://curl.se/bug/?i=9762
- [159] = https://curl.se/bug/?i=9761
- [160] = https://curl.se/bug/?i=9759
- [161] = https://curl.se/bug/?i=9757
- [162] = https://curl.se/bug/?i=9754
- [163] = https://curl.se/bug/?i=9753
- [164] = https://curl.se/bug/?i=9414
- [165] = https://curl.se/bug/?i=9749
- [166] = https://curl.se/bug/?i=9751
- [167] = https://curl.se/bug/?i=9752
- [169] = https://curl.se/bug/?i=9417
- [170] = https://curl.se/bug/?i=9415
- [171] = https://curl.se/bug/?i=9419
- [172] = https://curl.se/bug/?i=9418
- [173] = https://curl.se/bug/?i=9394
- [174] = https://curl.se/bug/?i=9789
- [175] = https://curl.se/bug/?i=9389
- [176] = https://curl.se/bug/?i=8933
- [177] = https://curl.se/bug/?i=9214
- [179] = https://curl.se/bug/?i=9784
- [181] = https://curl.se/bug/?i=9766
- [182] = https://curl.se/bug/?i=9779
- [184] = https://curl.se/bug/?i=9773
- [186] = https://curl.se/bug/?i=9638
- [187] = https://curl.se/bug/?i=9755
+ [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/acinclude.m4 b/acinclude.m4
index 1a0bd14d0..ac026e39d 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -312,79 +312,6 @@ AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [
])
-dnl CURL_CHECK_HEADER_WINCRYPT
-dnl -------------------------------------------------
-dnl Check for compilable and valid wincrypt.h header
-
-AC_DEFUN([CURL_CHECK_HEADER_WINCRYPT], [
- AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
- AC_CACHE_CHECK([for wincrypt.h], [curl_cv_header_wincrypt_h], [
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([[
-#undef inline
-#ifndef WIN32_LEAN_AND_MEAN
-#define WIN32_LEAN_AND_MEAN
-#endif
-#include <windows.h>
-#include <wincrypt.h>
- ]],[[
- int dummy=2*PROV_RSA_FULL;
- ]])
- ],[
- curl_cv_header_wincrypt_h="yes"
- ],[
- curl_cv_header_wincrypt_h="no"
- ])
- ])
- case "$curl_cv_header_wincrypt_h" in
- yes)
- AC_DEFINE_UNQUOTED(HAVE_WINCRYPT_H, 1,
- [Define to 1 if you have the wincrypt.h header file.])
- ;;
- esac
-])
-
-
-dnl CURL_CHECK_HEADER_WINLDAP
-dnl -------------------------------------------------
-dnl Check for compilable and valid winldap.h header
-
-AC_DEFUN([CURL_CHECK_HEADER_WINLDAP], [
- AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl
- AC_CACHE_CHECK([for winldap.h], [curl_cv_header_winldap_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 <windows.h>
-#endif
-#include <winldap.h>
- ]],[[
-#if defined(__CYGWIN__) || defined(__CEGCC__)
- HAVE_WINLDAP_H shall not be defined.
-#else
- LDAP *ldp = ldap_init("dummy", LDAP_PORT);
- ULONG res = ldap_unbind(ldp);
-#endif
- ]])
- ],[
- curl_cv_header_winldap_h="yes"
- ],[
- curl_cv_header_winldap_h="no"
- ])
- ])
- case "$curl_cv_header_winldap_h" in
- yes)
- AC_DEFINE_UNQUOTED(HAVE_WINLDAP_H, 1,
- [Define to 1 if you have the winldap.h header file.])
- ;;
- esac
-])
-
-
dnl CURL_CHECK_HEADER_LBER
dnl -------------------------------------------------
dnl Check for compilable and valid lber.h header,
@@ -494,7 +421,7 @@ AC_DEFUN([CURL_CHECK_HEADER_LDAP], [
#endif
#include <ldap.h>
]],[[
- LDAP *ldp = ldap_init("dummy", LDAP_PORT);
+ LDAP *ldp = ldap_init("0.0.0.0", LDAP_PORT);
int res = ldap_unbind(ldp);
]])
],[
@@ -543,7 +470,7 @@ AC_DEFUN([CURL_CHECK_HEADER_LDAP_SSL], [
#endif
#include <ldap_ssl.h>
]],[[
- LDAP *ldp = ldapssl_init("dummy", LDAPS_PORT, 1);
+ LDAP *ldp = ldapssl_init("0.0.0.0", LDAPS_PORT, 1);
]])
],[
curl_cv_header_ldap_ssl_h="yes"
@@ -612,9 +539,7 @@ AC_DEFUN([CURL_CHECK_LIBS_WINLDAP], [
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
-#ifdef HAVE_WINLDAP_H
#include <winldap.h>
-#endif
#ifdef HAVE_WINBER_H
#include <winber.h>
#endif
@@ -622,7 +547,7 @@ AC_DEFUN([CURL_CHECK_LIBS_WINLDAP], [
]],[[
BERVAL *bvp = NULL;
BerElement *bep = ber_init(bvp);
- LDAP *ldp = ldap_init("dummy", LDAP_PORT);
+ LDAP *ldp = ldap_init("0.0.0.0", LDAP_PORT);
ULONG res = ldap_unbind(ldp);
ber_free(bep, 1);
]])
@@ -732,7 +657,7 @@ AC_DEFUN([CURL_CHECK_LIBS_LDAP], [
]],[[
BerValue *bvp = NULL;
BerElement *bep = ber_init(bvp);
- LDAP *ldp = ldap_init("dummy", LDAP_PORT);
+ LDAP *ldp = ldap_init("0.0.0.0", LDAP_PORT);
int res = ldap_unbind(ldp);
ber_free(bep, 1);
]])
@@ -780,10 +705,10 @@ AC_DEFUN([TYPE_SOCKADDR_STORAGE],
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
-#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
+#include <windows.h>
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -818,10 +743,10 @@ AC_DEFUN([CURL_CHECK_FUNC_RECV], [
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
-#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
+#include <windows.h>
#else
$curl_includes_bsdsocket
#ifdef HAVE_SYS_TYPES_H
@@ -869,10 +794,10 @@ AC_DEFUN([CURL_CHECK_FUNC_SEND], [
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
-#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
+#include <windows.h>
#else
$curl_includes_bsdsocket
#ifdef HAVE_SYS_TYPES_H
@@ -916,10 +841,10 @@ AC_DEFUN([CURL_CHECK_MSG_NOSIGNAL], [
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
-#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
+#include <windows.h>
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -961,10 +886,10 @@ AC_DEFUN([CURL_CHECK_STRUCT_TIMEVAL], [
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
-#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
+#include <windows.h>
#endif
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -1016,10 +941,10 @@ AC_DEFUN([TYPE_IN_ADDR_T], [
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
-#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
+#include <windows.h>
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -1058,10 +983,10 @@ AC_DEFUN([TYPE_IN_ADDR_T], [
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
-#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
+#include <windows.h>
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -1114,6 +1039,38 @@ AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [
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 <sys/types.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#include <time.h>
+ ]],[[
+ 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 -------------------------------------------------
@@ -1185,9 +1142,7 @@ AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [
AC_MSG_CHECKING([if monotonic clock_gettime works])
CURL_RUN_IFELSE([
AC_LANG_PROGRAM([[
-#ifdef HAVE_STDLIB_H
#include <stdlib.h>
-#endif
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
@@ -1343,10 +1298,10 @@ AC_DEFUN([CURL_CHECK_FUNC_SELECT], [
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
-#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
+#include <windows.h>
#endif
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -1419,70 +1374,6 @@ int main()
])
-dnl CURL_CHECK_VARIADIC_MACROS
-dnl -------------------------------------------------
-dnl Check compiler support of variadic macros
-
-AC_DEFUN([CURL_CHECK_VARIADIC_MACROS], [
- AC_CACHE_CHECK([for compiler support of C99 variadic macro style],
- [curl_cv_variadic_macros_c99], [
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([[
-#define c99_vmacro3(first, ...) fun3(first, __VA_ARGS__)
-#define c99_vmacro2(first, ...) fun2(first, __VA_ARGS__)
- int fun3(int arg1, int arg2, int arg3);
- int fun2(int arg1, int arg2);
- int fun3(int arg1, int arg2, int arg3)
- { return arg1 + arg2 + arg3; }
- int fun2(int arg1, int arg2)
- { return arg1 + arg2; }
- ]],[[
- int res3 = c99_vmacro3(1, 2, 3);
- int res2 = c99_vmacro2(1, 2);
- ]])
- ],[
- curl_cv_variadic_macros_c99="yes"
- ],[
- curl_cv_variadic_macros_c99="no"
- ])
- ])
- case "$curl_cv_variadic_macros_c99" in
- yes)
- AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_C99, 1,
- [Define to 1 if compiler supports C99 variadic macro style.])
- ;;
- esac
- AC_CACHE_CHECK([for compiler support of old gcc variadic macro style],
- [curl_cv_variadic_macros_gcc], [
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([[
-#define gcc_vmacro3(first, args...) fun3(first, args)
-#define gcc_vmacro2(first, args...) fun2(first, args)
- int fun3(int arg1, int arg2, int arg3);
- int fun2(int arg1, int arg2);
- int fun3(int arg1, int arg2, int arg3)
- { return arg1 + arg2 + arg3; }
- int fun2(int arg1, int arg2)
- { return arg1 + arg2; }
- ]],[[
- int res3 = gcc_vmacro3(1, 2, 3);
- int res2 = gcc_vmacro2(1, 2);
- ]])
- ],[
- curl_cv_variadic_macros_gcc="yes"
- ],[
- curl_cv_variadic_macros_gcc="no"
- ])
- ])
- case "$curl_cv_variadic_macros_gcc" in
- yes)
- AC_DEFINE_UNQUOTED(HAVE_VARIADIC_MACROS_GCC, 1,
- [Define to 1 if compiler supports old gcc variadic macro style.])
- ;;
- esac
-])
-
-
dnl CURL_CHECK_CA_BUNDLE
dnl -------------------------------------------------
dnl Check if a default ca-bundle should be used
@@ -1491,9 +1382,9 @@ 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 FreeBSD, MidnightBSD
-dnl /etc/ssl/cert.pem OpenBSD, FreeBSD, MidnightBSD (symlink)
-dnl /etc/ssl/certs/ (ca path) SUSE
+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], [
@@ -1514,7 +1405,7 @@ AS_HELP_STRING([--without-ca-bundle], [Don't use a default CA bundle]),
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 and mbedTLS backends. Refer to OpenSSL c_rehash for details. \
+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]),
[
@@ -1540,8 +1431,11 @@ AS_HELP_STRING([--without-ca-path], [Don't use a default CA path]),
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"; then
- AC_MSG_ERROR([--with-ca-path only works with OpenSSL, GnuTLS or mbedTLS])
+ 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"
@@ -1575,9 +1469,14 @@ AS_HELP_STRING([--without-ca-path], [Don't use a default CA path]),
fi
done
fi
- if test "x$want_capath" = "xunset" -a "x$ca" = "xno" -a \
- "x$OPENSSL_ENABLED" = "x1"; then
- check_capath="/etc/ssl/certs/"
+ 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
@@ -1707,10 +1606,10 @@ dnl -------------------------------------------------
dnl Check if curl's WIN32 crypto lib can be used
AC_DEFUN([CURL_CHECK_WIN32_CRYPTO], [
- AC_REQUIRE([CURL_CHECK_HEADER_WINCRYPT])dnl
+ 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_wincrypt_h" = "yes"; then
+ if test "$curl_cv_header_windows_h" = "yes"; then
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
#undef inline
diff --git a/aclocal.m4 b/aclocal.m4
index 380bdb0b8..a1af02ca7 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -108,6 +108,43 @@ AC_DEFUN([AM_AUX_DIR_EXPAND],
am_aux_dir=`cd "$ac_aux_dir" && pwd`
])
+# AM_COND_IF -*- Autoconf -*-
+
+# Copyright (C) 2008-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_COND_IF
+# _AM_COND_ELSE
+# _AM_COND_ENDIF
+# --------------
+# These macros are only used for tracing.
+m4_define([_AM_COND_IF])
+m4_define([_AM_COND_ELSE])
+m4_define([_AM_COND_ENDIF])
+
+# AM_COND_IF(COND, [IF-TRUE], [IF-FALSE])
+# ---------------------------------------
+# If the shell condition COND is true, execute IF-TRUE, otherwise execute
+# IF-FALSE. Allow automake to learn about conditional instantiating macros
+# (the AC_CONFIG_FOOS).
+AC_DEFUN([AM_COND_IF],
+[m4_ifndef([_AM_COND_VALUE_$1],
+ [m4_fatal([$0: no such condition "$1"])])dnl
+_AM_COND_IF([$1])dnl
+if test -z "$$1_TRUE"; then :
+ m4_n([$2])[]dnl
+m4_ifval([$3],
+[_AM_COND_ELSE([$1])dnl
+else
+ $3
+])dnl
+_AM_COND_ENDIF([$1])dnl
+fi[]dnl
+])
+
# AM_CONDITIONAL -*- Autoconf -*-
# Copyright (C) 1997-2021 Free Software Foundation, Inc.
@@ -1191,7 +1228,6 @@ m4_include([m4/curl-confopts.m4])
m4_include([m4/curl-functions.m4])
m4_include([m4/curl-gnutls.m4])
m4_include([m4/curl-mbedtls.m4])
-m4_include([m4/curl-nss.m4])
m4_include([m4/curl-openssl.m4])
m4_include([m4/curl-override.m4])
m4_include([m4/curl-reentrant.m4])
diff --git a/buildconf b/buildconf
index 16fc8a75e..ee6a2800b 100755
--- a/buildconf
+++ b/buildconf
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright (C) 2000 - 2022 Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# SPDX-License-Identifier: curl
diff --git a/buildconf.bat b/buildconf.bat
index 9af46275a..118a70d86 100644
--- a/buildconf.bat
+++ b/buildconf.bat
@@ -6,7 +6,7 @@ rem * / __| | | | |_) | |
rem * | (__| |_| | _ <| |___
rem * \___|\___/|_| \_\_____|
rem *
-rem * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+rem * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, 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
diff --git a/configure b/configure
index fdad6a87f..2bd4ff283 100755
--- a/configure
+++ b/configure
@@ -12,7 +12,7 @@
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
#
-# Copyright (c) 1998 - 2022 Daniel Stenberg, <daniel@haxx.se>
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>
# This configure script may be copied, distributed and modified under the
# terms of the curl license; see COPYING for more details
@@ -933,7 +933,7 @@ USE_QUICHE
USE_NGHTTP3
USE_NGTCP2_CRYPTO_WOLFSSL
USE_NGTCP2_CRYPTO_GNUTLS
-USE_NGTCP2_CRYPTO_OPENSSL
+USE_NGTCP2_CRYPTO_QUICTLS
USE_NGTCP2
USE_NGHTTP2
IDN_ENABLED
@@ -952,8 +952,6 @@ USE_LIBPSL_TRUE
CURL_CA_BUNDLE
CURL_WITH_MULTI_SSL
SSL_ENABLED
-NSS_LIBS
-USE_NSS
USE_RUSTLS
USE_BEARSSL
USE_WOLFSSL
@@ -997,8 +995,8 @@ CURL_DISABLE_FILE
CURL_DISABLE_FTP
CURL_DISABLE_RTSP
CURL_DISABLE_HTTP
-OS_WINDOWS_FALSE
-OS_WINDOWS_TRUE
+HAVE_WINDRES_FALSE
+HAVE_WINDRES_TRUE
USE_WIN32_CRYPTO
USE_WIN32_SMALL_FILES
USE_WIN32_LARGE_FILES
@@ -1051,6 +1049,12 @@ build_os
build_vendor
build_cpu
build
+HTTPD_NGHTTPX
+APACHECTL
+HTTPD
+APXS
+CADDY
+TEST_NGHTTPX
PKGADD_VENDOR
PKGADD_NAME
PKGADD_PKG
@@ -1180,8 +1184,9 @@ with_mbedtls
with_wolfssl
with_bearssl
with_rustls
-with_nss_deprecated
-with_nss
+with_test_nghttpx
+with_test_caddy
+with_test_httpd
with_darwinssl
enable_largefile
enable_shared
@@ -1222,7 +1227,6 @@ with_gssapi_includes
with_gssapi_libs
with_gssapi
with_default_ssl_backend
-with_egd_socket
with_random
enable_openssl_auto_load_config
with_ca_bundle
@@ -1245,12 +1249,16 @@ with_quiche
with_msh3
with_zsh_functions_dir
with_fish_functions_dir
-with_n64_deprecated
enable_threaded_resolver
enable_pthreads
enable_verbose
enable_sspi
-enable_crypto_auth
+enable_basic_auth
+enable_bearer_auth
+enable_digest_auth
+enable_kerberos_auth
+enable_negotiate_auth
+enable_aws
enable_ntlm
enable_ntlm_wb
enable_tls_srp
@@ -1260,6 +1268,8 @@ enable_socketpair
enable_http_auth
enable_doh
enable_mime
+enable_bindlocal
+enable_form_api
enable_dateparse
enable_netrc
enable_progress_meter
@@ -1951,7 +1961,7 @@ Optional Features:
--enable-ldaps Enable LDAPS support
--disable-ldaps Disable LDAPS support
--enable-rtsp Enable RTSP support
- --disable-rtsp Disable RTSP support
+ --disable-rtsp Disable RTSP support
--enable-proxy Enable proxy support
--disable-proxy Disable proxy support
--enable-dict Enable DICT support
@@ -1998,8 +2008,19 @@ Optional Features:
--disable-verbose Disable verbose strings
--enable-sspi Enable SSPI
--disable-sspi Disable SSPI
- --enable-crypto-auth Enable cryptographic authentication
- --disable-crypto-auth Disable cryptographic authentication
+ --enable-basic-auth Enable basic authentication (default)
+ --disable-basic-auth Disable basic authentication
+ --enable-bearer-auth Enable bearer authentication (default)
+ --disable-bearer-auth Disable bearer authentication
+ --enable-digest-auth Enable digest authentication (default)
+ --disable-digest-auth Disable digest authentication
+ --enable-kerberos-auth Enable kerberos authentication (default)
+ --disable-kerberos-auth Disable kerberos authentication
+ --enable-negotiate-auth Enable negotiate authentication (default)
+ --disable-negotiate-auth
+ Disable negotiate authentication
+ --enable-aws Enable AWS sig support (default)
+ --disable-aws Disable AWS sig support
--enable-ntlm Enable NTLM support
--disable-ntlm Disable NTLM support
--enable-ntlm-wb[=FILE] Enable NTLM delegation to winbind's ntlm_auth
@@ -2021,6 +2042,10 @@ Optional Features:
--disable-doh Disable DoH support
--enable-mime Enable mime API support
--disable-mime Disable mime API support
+ --enable-bindlocal Enable local binding support
+ --disable-bindlocal Disable local binding support
+ --enable-form-api Enable form API support
+ --disable-form-api Disable form API support
--enable-dateparse Enable date parsing
--disable-dateparse Disable date parsing
--enable-netrc Enable netrc parsing
@@ -2039,7 +2064,7 @@ Optional Features:
--enable-headers-api Enable headers-api support
--disable-headers-api Disable headers-api support
--enable-hsts Enable HSTS support
- --disable-hsts Disable HSTS support
+ --disable-hsts Disable HSTS support
--enable-websockets Enable WebSockets support
--disable-websockets Disable WebSockets support
@@ -2065,9 +2090,10 @@ Optional Packages:
installation root
--with-rustls=PATH where to look for rustls, PATH points to the
installation root
- --with-nss-deprecated confirm you realize NSS is going away
- --with-nss=PATH where to look for NSS, PATH points to the
- installation root
+ --with-test-nghttpx=PATH
+ where to find nghttpx for testing
+ --with-test-caddy=PATH where to find caddy for testing
+ --with-test-httpd=PATH where to find httpd/apache2 for testing
--with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use
both]
@@ -2100,7 +2126,6 @@ Optional Packages:
Use NAME as default SSL backend
--without-default-ssl-backend
Use implicit default SSL backend
- --with-egd-socket=FILE Entropy Gathering Daemon socket pathname
--with-random=FILE read randomness from FILE (default=/dev/urandom)
--with-ca-bundle=FILE Path to a file containing CA certificates (example:
/etc/ca-bundle.crt)
@@ -2109,8 +2134,9 @@ Optional Packages:
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 and mbedTLS backends. Refer to OpenSSL
- c_rehash for details. (example: /etc/certificates)
+ GnuTLS, mbedTLS and wolfSSL backends. Refer to
+ OpenSSL c_rehash for details. (example:
+ /etc/certificates)
--without-ca-path Don't use a default CA path
--with-ca-fallback Use the built in CA store of the SSL library
--without-ca-fallback Don't use the built in CA store of the SSL library
@@ -2157,8 +2183,6 @@ Optional Packages:
Install fish completions to PATH
--without-fish-functions-dir
Do not install fish completions
- --with-n64-deprecated confirm you realize support for systems without 64
- bit data types is going away
Some influential environment variables:
CC C compiler command
@@ -2246,7 +2270,7 @@ Copyright (C) 2021 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
-Copyright (c) 1998 - 2022 Daniel Stenberg, <daniel@haxx.se>
+Copyright (C) Daniel Stenberg, <daniel@haxx.se>
This configure script may be copied, distributed and modified under the
terms of the curl license; see COPYING for more details
_ACEOF
@@ -6626,7 +6650,7 @@ PKGADD_VENDOR="curl.se"
- curl_ssl_msg="no (--with-{openssl,gnutls,nss,mbedtls,wolfssl,schannel,secure-transport,amissl,bearssl,rustls} )"
+ 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)"
@@ -6653,8 +6677,8 @@ curl_headers_msg="enabled (--disable-headers-api)"
curl_ws_msg="no (--enable-websockets)"
ssl_backends=
curl_h1_msg="enabled (internal)"
- curl_h2_msg="no (--with-nghttp2, --with-hyper)"
- curl_h3_msg="no (--with-ngtcp2, --with-quiche --with-msh3)"
+ curl_h2_msg="no (--with-nghttp2)"
+ curl_h3_msg="no (--with-ngtcp2 --with-nghttp3, --with-quiche, --with-msh3)"
enable_altsvc="yes"
hsts="yes"
@@ -6662,6 +6686,19 @@ hsts="yes"
INITIAL_LDFLAGS=$LDFLAGS
INITIAL_LIBS=$LIBS
+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
+
OPT_SCHANNEL=no
# Check whether --with-schannel was given.
@@ -6798,32 +6835,422 @@ then :
fi
-OPT_NSS_AWARE=no
+TEST_NGHTTPX=nghttpx
-# Check whether --with-nss-deprecated was given.
-if test ${with_nss_deprecated+y}
+# Check whether --with-test-nghttpx was given.
+if test ${with_test_nghttpx+y}
then :
- withval=$with_nss_deprecated; if test X"$withval" != Xno; then
- OPT_NSS_AWARE=$withval
+ withval=$with_test_nghttpx; TEST_NGHTTPX=$withval
+ if test X"$OPT_TEST_NGHTTPX" = "Xno" ; then
+ TEST_NGHTTPX=""
fi
fi
-OPT_NSS=no
-# Check whether --with-nss was given.
-if test ${with_nss+y}
+CADDY=caddy
+
+# Check whether --with-test-caddy was given.
+if test ${with_test_caddy+y}
then :
- withval=$with_nss; OPT_NSS=$withval
- if test X"$withval" != Xno; then
+ withval=$with_test_caddy; CADDY=$withval
+ if test X"$OPT_CADDY" = "Xno" ; then
+ CADDY=""
+ fi
+
+fi
+
+
+
+HTTPD_ENABLED="maybe"
+
+# Check whether --with-test-httpd was given.
+if test ${with_test_httpd+y}
+then :
+ withval=$with_test_httpd; request_httpd=$withval
+else $as_nop
+ request_httpd=check
+fi
+
+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"
+ # Extract the first word of "apxs", so it can be a program name with args.
+set dummy apxs; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_APXS+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $APXS in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_APXS="$APXS" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_APXS="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+APXS=$ac_cv_path_APXS
+if test -n "$APXS"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $APXS" >&5
+printf "%s\n" "$APXS" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
- if test X"$OPT_NSS_AWARE" = "Xno" ; then
- as_fn_error $? "NSS use must be confirmed using --with-nss-deprecated. NSS support will be dropped from curl in August 2022. See docs/DEPRECATE.md" "$LINENO" 5
+
+ if test "x$APXS" = "x"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: apache2-dev not installed, httpd tests disabled" >&5
+printf "%s\n" "$as_me: apache2-dev not installed, httpd tests disabled" >&6;}
+ HTTPD_ENABLED="no"
fi
+ else
+ # Extract the first word of "httpd", so it can be a program name with args.
+set dummy httpd; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_HTTPD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $HTTPD in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_HTTPD="$HTTPD" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_HTTPD="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+HTTPD=$ac_cv_path_HTTPD
+if test -n "$HTTPD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $HTTPD" >&5
+printf "%s\n" "$HTTPD" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ if test "x$HTTPD" = "x"; then
+ # Extract the first word of "apache2", so it can be a program name with args.
+set dummy apache2; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_HTTPD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $HTTPD in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_HTTPD="$HTTPD" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_HTTPD="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+HTTPD=$ac_cv_path_HTTPD
+if test -n "$HTTPD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $HTTPD" >&5
+printf "%s\n" "$HTTPD" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
- TLSCHOICE="${TLSCHOICE:+$TLSCHOICE, }NSS"
+ fi
+ # Extract the first word of "apachectl", so it can be a program name with args.
+set dummy apachectl; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_APACHECTL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $APACHECTL in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_APACHECTL="$APACHECTL" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_APACHECTL="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+APACHECTL=$ac_cv_path_APACHECTL
+if test -n "$APACHECTL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $APACHECTL" >&5
+printf "%s\n" "$APACHECTL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ # Extract the first word of "apxs", so it can be a program name with args.
+set dummy apxs; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_APXS+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $APXS in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_APXS="$APXS" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_APXS="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+APXS=$ac_cv_path_APXS
+if test -n "$APXS"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $APXS" >&5
+printf "%s\n" "$APXS" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ if test "x$HTTPD" = "x" -o "x$APACHECTL" = "x"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: httpd/apache2 not in PATH, http tests disabled" >&5
+printf "%s\n" "$as_me: httpd/apache2 not in PATH, http tests disabled" >&6;}
+ HTTPD_ENABLED="no"
+ fi
+ if test "x$APXS" = "x"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: apxs not in PATH, http tests disabled" >&5
+printf "%s\n" "$as_me: apxs not in PATH, http tests disabled" >&6;}
+ 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
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: httpd not found as ${HTTPD}, http tests disabled" >&5
+printf "%s\n" "$as_me: httpd not found as ${HTTPD}, http tests disabled" >&6;}
+ HTTPD_ENABLED="no"
+ elif test ! -x "${APACHECTL}"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: apachectl not found as ${APACHECTL}, http tests disabled" >&5
+printf "%s\n" "$as_me: apachectl not found as ${APACHECTL}, http tests disabled" >&6;}
+ HTTPD_ENABLED="no"
+ elif test ! -x "${APXS}"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: apxs not found as ${APXS}, http tests disabled" >&5
+printf "%s\n" "$as_me: apxs not found as ${APXS}, http tests disabled" >&6;}
+ HTTPD_ENABLED="no"
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: using HTTPD=$HTTPD for tests" >&5
+printf "%s\n" "$as_me: using HTTPD=$HTTPD for tests" >&6;}
+ fi
+fi
+if test x"$HTTPD_ENABLED" = "xno"; then
+ HTTPD=""
+ APACHECTL=""
+ APXS=""
+fi
+
+
+
+
+if test "x$TEST_NGHTTPX" != "x" -a "x$TEST_NGHTTPX" != "xnghttpx"; then
+ HTTPD_NGHTTPX="$TEST_NGHTTPX"
+else
+ # Extract the first word of "nghttpx", so it can be a program name with args.
+set dummy nghttpx; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_HTTPD_NGHTTPX+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $HTTPD_NGHTTPX in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_HTTPD_NGHTTPX="$HTTPD_NGHTTPX" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_dummy="$PATH:/usr/bin:/usr/local/bin"
+for as_dir in $as_dummy
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_HTTPD_NGHTTPX="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+HTTPD_NGHTTPX=$ac_cv_path_HTTPD_NGHTTPX
+if test -n "$HTTPD_NGHTTPX"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $HTTPD_NGHTTPX" >&5
+printf "%s\n" "$HTTPD_NGHTTPX" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+
+
+if test "x$TEST_CADDY" != "x"; then
+ CADDY="$TEST_CADDY"
+else
+ # Extract the first word of "caddy", so it can be a program name with args.
+set dummy caddy; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_CADDY+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $CADDY in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_CADDY="$CADDY" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_CADDY="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+CADDY=$ac_cv_path_CADDY
+if test -n "$CADDY"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CADDY" >&5
+printf "%s\n" "$CADDY" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
fi
@@ -6838,7 +7265,6 @@ Select from these:
--with-bearssl
--with-gnutls
--with-mbedtls
- --with-nss
--with-openssl (also works for BoringSSL and libressl)
--with-rustls
--with-schannel
@@ -6852,7 +7278,7 @@ fi
# Check whether --with-darwinssl was given.
if test ${with_darwinssl+y}
then :
- withval=$with_darwinssl; as_fn_error $? "--with-darwin-ssl no longer works!" "$LINENO" 5
+ withval=$with_darwinssl; as_fn_error $? "--with-darwin-ssl and --without-darwin-ssl no longer work!" "$LINENO" 5
fi
@@ -17258,7 +17684,11 @@ rm -f conftest.err conftest.i conftest.$ac_ext
if test "$curl_cv_have_def___INTEL_COMPILER" = "yes"; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking compiler version" >&5
+printf %s "checking compiler version... " >&6; }
compiler_num="$curl_cv_def___INTEL_COMPILER"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Intel C '$compiler_num'" >&5
+printf "%s\n" "Intel C '$compiler_num'" >&6; }
OLDCPPFLAGS=$CPPFLAGS
# CPPPFLAG comes from CURL_CPP_P
@@ -17429,18 +17859,41 @@ printf "%s\n" "yes" >&6; }
printf "%s\n" "no" >&6; }
compiler_id="CLANG"
fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking compiler version" >&5
+printf %s "checking compiler version... " >&6; }
fullclangver=`$CC -v 2>&1 | grep version`
+ if echo $fullclangver | grep 'Apple' >/dev/null; then
+ appleclang=1
+ else
+ appleclang=0
+ fi
clangver=`echo $fullclangver | grep "based on LLVM " | "$SED" 's/.*(based on LLVM \([0-9]*\.[0-9]*\).*)/\1/'`
if test -z "$clangver"; then
- if echo $fullclangver | grep "Apple LLVM version " >/dev/null; then
- clangver="3.7"
- else
- clangver=`echo $fullclangver | "$SED" 's/.*version \([0-9]*\.[0-9]*\).*/\1/'`
- fi
+ clangver=`echo $fullclangver | "$SED" 's/.*version \([0-9]*\.[0-9]*\).*/\1/'`
+ oldapple=0
+ else
+ oldapple=1
fi
clangvhi=`echo $clangver | cut -d . -f1`
clangvlo=`echo $clangver | cut -d . -f2`
compiler_num=`(expr $clangvhi "*" 100 + $clangvlo) 2>/dev/null`
+ if test "$appleclang" = '1' && test "$oldapple" = '0'; then
+ if test "$compiler_num" -ge '1300'; then compiler_num='1200'
+ elif test "$compiler_num" -ge '1205'; then compiler_num='1101'
+ elif test "$compiler_num" -ge '1204'; then compiler_num='1000'
+ elif test "$compiler_num" -ge '1107'; then compiler_num='900'
+ elif test "$compiler_num" -ge '1103'; then compiler_num='800'
+ elif test "$compiler_num" -ge '1003'; then compiler_num='700'
+ elif test "$compiler_num" -ge '1001'; then compiler_num='600'
+ elif test "$compiler_num" -ge '904'; then compiler_num='500'
+ elif test "$compiler_num" -ge '902'; then compiler_num='400'
+ elif test "$compiler_num" -ge '803'; then compiler_num='309'
+ elif test "$compiler_num" -ge '703'; then compiler_num='308'
+ else compiler_num='307'
+ fi
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: clang '$compiler_num' (raw: '$fullclangver' / '$clangver')" >&5
+printf "%s\n" "clang '$compiler_num' (raw: '$fullclangver' / '$clangver')" >&6; }
flags_dbg_yes="-g"
flags_opt_all="-O -O0 -O1 -O2 -Os -O3 -O4"
flags_opt_yes="-O2"
@@ -17503,10 +17956,19 @@ rm -f conftest.err conftest.i conftest.$ac_ext
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
compiler_id="GNU_C"
- gccver=`$CC -dumpversion`
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking compiler version" >&5
+printf %s "checking compiler version... " >&6; }
+ # strip '-suffix' parts, e.g. Ubuntu Windows cross-gcc returns '10-win32'
+ gccver=`$CC -dumpversion | sed -E 's/-.+$//'`
gccvhi=`echo $gccver | cut -d . -f1`
- gccvlo=`echo $gccver | cut -d . -f2`
+ if echo $gccver | grep -F '.' >/dev/null; then
+ gccvlo=`echo $gccver | cut -d . -f2`
+ else
+ gccvlo="0"
+ fi
compiler_num=`(expr $gccvhi "*" 100 + $gccvlo) 2>/dev/null`
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: gcc '$compiler_num' (raw: '$gccver')" >&5
+printf "%s\n" "gcc '$compiler_num' (raw: '$gccver')" >&6; }
flags_dbg_yes="-g"
flags_opt_all="-O -O0 -O1 -O2 -O3 -Os -Og -Ofast"
flags_opt_yes="-O2"
@@ -17562,67 +18024,6 @@ printf "%s\n" "no" >&6; }
fi
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler is LCC" >&5
-printf %s "checking if compiler is LCC... " >&6; }
-
- OLDCPPFLAGS=$CPPFLAGS
- # CPPPFLAG comes from CURL_CPP_P
- CPPFLAGS="$CPPFLAGS $CPPPFLAG"
- if test -z "$SED"; then
- as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
- fi
- if test -z "$GREP"; then
- as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5
- fi
-
- tmp_exp=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-#ifdef __LCC__
-CURL_DEF_TOKEN __LCC__
-#endif
-
-
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"
-then :
-
- 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" = "__LCC__"; then
- tmp_exp=""
- fi
-
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
- if test -z "$tmp_exp"; then
- curl_cv_have_def___LCC__=no
-
- else
- curl_cv_have_def___LCC__=yes
- curl_cv_def___LCC__=$tmp_exp
-
- fi
- CPPFLAGS=$OLDCPPFLAGS
-
- if test "$curl_cv_have_def___LCC__" = "yes"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
- compiler_id="LCC"
- flags_dbg_yes="-g"
- flags_opt_all=""
- flags_opt_yes=""
- flags_opt_off=""
- else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
- fi
-
-
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler is SGI MIPSpro C" >&5
printf %s "checking if compiler is SGI MIPSpro C... " >&6; }
@@ -18051,7 +18452,6 @@ squeeze() {
CLANG)
#
tmp_CFLAGS="$tmp_CFLAGS -Qunused-arguments"
- tmp_CFLAGS="$tmp_CFLAGS -Wno-pointer-bool-conversion"
;;
#
DEC_C)
@@ -18094,11 +18494,6 @@ squeeze() {
tmp_CFLAGS="$tmp_CFLAGS"
;;
#
- LCC)
- #
- tmp_CFLAGS="$tmp_CFLAGS -n"
- ;;
- #
SGI_MIPS_C)
#
tmp_CFLAGS="$tmp_CFLAGS"
@@ -18244,7 +18639,9 @@ fi
;;
*)
+ oldcc=$CC
old=$LD_LIBRARY_PATH
+ CC="sh ./run-compiler"
LD_LIBRARY_PATH=$CURL_LIBRARY_PATH:$old
export LD_LIBRARY_PATH
if test "$cross_compiling" = yes
@@ -18289,6 +18686,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
LD_LIBRARY_PATH=$old # restore
+ CC=$oldcc
;;
esac
@@ -18573,7 +18971,9 @@ fi
;;
*)
+ oldcc=$CC
old=$LD_LIBRARY_PATH
+ CC="sh ./run-compiler"
LD_LIBRARY_PATH=$CURL_LIBRARY_PATH:$old
export LD_LIBRARY_PATH
if test "$cross_compiling" = yes
@@ -18618,6 +19018,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
LD_LIBRARY_PATH=$old # restore
+ CC=$oldcc
;;
esac
@@ -18802,7 +19203,7 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;}
ac_var_added_warnings=""
- for warning in no-multichar sign-compare; do
+ for warning in sign-compare; do
ac_var_match_word="no"
for word1 in $CFLAGS; do
@@ -18820,6 +19221,7 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;}
tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
squeeze tmp_CFLAGS
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-multichar"
ac_var_added_warnings=""
for warning in undef; do
@@ -18946,9 +19348,274 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;}
fi
#
+ if test "$compiler_num" -ge "207"; then
+
+ ac_var_added_warnings=""
+ for warning in address; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+
+ ac_var_added_warnings=""
+ for warning in attributes; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+
+ ac_var_added_warnings=""
+ for warning in bad-function-cast; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+
+ ac_var_added_warnings=""
+ for warning in conversion; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+
+ ac_var_added_warnings=""
+ for warning in div-by-zero format-security; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+
+ ac_var_added_warnings=""
+ for warning in empty-body; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+
+ ac_var_added_warnings=""
+ for warning in missing-field-initializers; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+
+ ac_var_added_warnings=""
+ for warning in missing-noreturn; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+
+ ac_var_added_warnings=""
+ for warning in old-style-definition; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+
+ ac_var_added_warnings=""
+ for warning in redundant-decls; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+ # CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [switch-enum]) # Not used because this basically disallows default case
+
+ ac_var_added_warnings=""
+ for warning in type-limits; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+ # CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unused-macros]) # Not practical
+
+ ac_var_added_warnings=""
+ for warning in unreachable-code unused-parameter; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+ fi
+ #
if test "$compiler_num" -ge "208"; then
ac_var_added_warnings=""
+ for warning in ignored-qualifiers; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+
+ ac_var_added_warnings=""
for warning in vla; do
ac_var_match_word="no"
@@ -18970,6 +19637,7 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;}
fi
#
if test "$compiler_num" -ge "209"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-sign-conversion"
ac_var_added_warnings=""
for warning in shift-sign-overflow; do
@@ -18990,9 +19658,73 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;}
tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
squeeze tmp_CFLAGS
+ # CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [padded]) # Not used because we cannot change public structs
+ fi
+ #
+ if test "$compiler_num" -ge "300"; then
+
+ ac_var_added_warnings=""
+ for warning in language-extension-token; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
fi
#
if test "$compiler_num" -ge "302"; then
+
+ ac_var_added_warnings=""
+ for warning in enum-conversion; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+
+ ac_var_added_warnings=""
+ for warning in sometimes-uninitialized; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
case $host_os in
cygwin* | mingw*)
;;
@@ -19021,6 +19753,92 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;}
esac
fi
#
+ if test "$compiler_num" -ge "304"; then
+
+ ac_var_added_warnings=""
+ for warning in header-guard; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+
+ ac_var_added_warnings=""
+ for warning in unused-const-variable; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+ fi
+ #
+ if test "$compiler_num" -ge "305"; then
+
+ ac_var_added_warnings=""
+ for warning in pragmas; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+
+ ac_var_added_warnings=""
+ for warning in unreachable-code-break; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+ fi
+ #
if test "$compiler_num" -ge "306"; then
ac_var_added_warnings=""
@@ -19114,6 +19932,7 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;}
fi
fi
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-pointer-bool-conversion"
;;
#
DEC_C)
@@ -19126,7 +19945,6 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;}
GNU_C)
#
if test "$want_warnings" = "yes"; then
- tmp_CFLAGS="$tmp_CFLAGS -std=gnu89"
#
if test "x$cross_compiling" != "xyes" ||
test "$compiler_num" -ge "300"; then
@@ -19433,6 +20251,158 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;}
tmp_CFLAGS="$tmp_CFLAGS -Wstrict-aliasing=3"
fi
#
+ if test "$compiler_num" -ge "401"; then
+
+ ac_var_added_warnings=""
+ for warning in attributes; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+
+ ac_var_added_warnings=""
+ for warning in div-by-zero format-security; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+
+ ac_var_added_warnings=""
+ for warning in missing-field-initializers; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+ case $host in
+ *-*-msys*)
+ ;;
+ *)
+
+ ac_var_added_warnings=""
+ for warning in missing-noreturn; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+ # Seen to clash with libtool-generated stub code
+ ;;
+ esac
+
+ ac_var_added_warnings=""
+ for warning in unreachable-code unused-parameter; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+ # CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [padded]) # Not used because we cannot change public structs
+
+ ac_var_added_warnings=""
+ for warning in pragmas; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+
+ ac_var_added_warnings=""
+ for warning in redundant-decls; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+ # CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [switch-enum]) # Not used because this basically disallows default case
+ # CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unused-macros]) # Not practical
+ fi
+ #
if test "$compiler_num" -ge "402"; then
ac_var_added_warnings=""
@@ -19459,6 +20429,26 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;}
if test "$compiler_num" -ge "403"; then
ac_var_added_warnings=""
+ for warning in address; do
+
+ ac_var_match_word="no"
+ for word1 in $CFLAGS; do
+ for word2 in -Wno-$warning -W$warning; do
+ if test "$word1" = "$word2"; then
+ ac_var_match_word="yes"
+ fi
+ done
+ done
+
+ if test "$ac_var_match_word" = "no"; then
+ ac_var_added_warnings="$ac_var_added_warnings -W$warning"
+ fi
+ done
+ tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings"
+ squeeze tmp_CFLAGS
+
+
+ ac_var_added_warnings=""
for warning in type-limits old-style-declaration; do
ac_var_match_word="no"
@@ -19850,13 +20840,6 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;}
tmp_CFLAGS="$tmp_CFLAGS"
;;
#
- LCC)
- #
- if test "$want_warnings" = "yes"; then
- tmp_CFLAGS="$tmp_CFLAGS"
- fi
- ;;
- #
SGI_MIPS_C)
#
if test "$want_warnings" = "yes"; then
@@ -20070,7 +21053,9 @@ fi
;;
*)
+ oldcc=$CC
old=$LD_LIBRARY_PATH
+ CC="sh ./run-compiler"
LD_LIBRARY_PATH=$CURL_LIBRARY_PATH:$old
export LD_LIBRARY_PATH
if test "$cross_compiling" = yes
@@ -20115,6 +21100,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
LD_LIBRARY_PATH=$old # restore
+ CC=$oldcc
;;
esac
@@ -20496,92 +21482,6 @@ else
fi
-# For original MinGW (ie not MinGW-w64) define the Windows minimum supported OS
-# version to Windows XP (0x501) if it hasn't already been defined by the user.
-# Without this override original MinGW defaults the version to Windows NT 4.0.
-# Note original MinGW sets _WIN32_WINNT if not defined to whatever WINVER is.
-case $host in
- *-*-mingw32*)
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if MinGW minimum supported OS should be set to XP" >&5
-printf %s "checking if MinGW minimum supported OS should be set to XP... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-#include <_mingw.h>
-
-int main (void)
-{
-
-#if defined(__MINGW64_VERSION_MAJOR) || \
- defined(WINVER) || \
- defined(_WIN32_WINNT)
-#error
-#endif
-
- ;
- return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"
-then :
-
- CPPFLAGS="$CPPFLAGS -DWINVER=0x501"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
-
-else $as_nop
-
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
- ;;
-esac
-
-# Detect original MinGW (not MinGW-w64)
-curl_mingw_original=no
-case $host in
- *-*-mingw32*)
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking using original MinGW (not MinGW-w64)" >&5
-printf %s "checking using original MinGW (not MinGW-w64)... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-#include <_mingw.h>
-
-int main (void)
-{
-
-#if defined(__MINGW64_VERSION_MAJOR)
-#error
-#endif
-
- ;
- return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"
-then :
-
- curl_mingw_original=yes
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
-
-else $as_nop
-
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
- ;;
-esac
-
@@ -20810,123 +21710,10 @@ printf "%s\n" "#define HAVE_WS2TCPIP_H 1" >>confdefs.h
;;
esac
-
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wincrypt.h" >&5
-printf %s "checking for wincrypt.h... " >&6; }
-if test ${curl_cv_header_wincrypt_h+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-#undef inline
-#ifndef WIN32_LEAN_AND_MEAN
-#define WIN32_LEAN_AND_MEAN
-#endif
-#include <windows.h>
-#include <wincrypt.h>
-
-int main (void)
-{
-
- int dummy=2*PROV_RSA_FULL;
-
- ;
- return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"
-then :
-
- curl_cv_header_wincrypt_h="yes"
-
-else $as_nop
-
- curl_cv_header_wincrypt_h="no"
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
-
-fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $curl_cv_header_wincrypt_h" >&5
-printf "%s\n" "$curl_cv_header_wincrypt_h" >&6; }
- case "$curl_cv_header_wincrypt_h" in
- yes)
-
-printf "%s\n" "#define HAVE_WINCRYPT_H 1" >>confdefs.h
-
- ;;
- esac
-
-
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for winldap.h" >&5
-printf %s "checking for winldap.h... " >&6; }
-if test ${curl_cv_header_winldap_h+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-#undef inline
-#ifdef HAVE_WINDOWS_H
-#ifndef WIN32_LEAN_AND_MEAN
-#define WIN32_LEAN_AND_MEAN
-#endif
-#include <windows.h>
-#endif
-#include <winldap.h>
-
-int main (void)
-{
-
-#if defined(__CYGWIN__) || defined(__CEGCC__)
- HAVE_WINLDAP_H shall not be defined.
-#else
- LDAP *ldp = ldap_init("dummy", LDAP_PORT);
- ULONG res = ldap_unbind(ldp);
-#endif
-
- ;
- return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"
-then :
-
- curl_cv_header_winldap_h="yes"
-
-else $as_nop
-
- curl_cv_header_winldap_h="no"
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
-
-fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $curl_cv_header_winldap_h" >&5
-printf "%s\n" "$curl_cv_header_winldap_h" >&6; }
- case "$curl_cv_header_winldap_h" in
- yes)
-
-printf "%s\n" "#define HAVE_WINLDAP_H 1" >>confdefs.h
-
- ;;
- esac
-
;;
*)
curl_cv_header_winsock2_h="no"
curl_cv_header_ws2tcpip_h="no"
- curl_cv_header_wincrypt_h="no"
- curl_cv_header_winldap_h="no"
;;
esac
@@ -21022,7 +21809,7 @@ printf "%s\n" "no" >&6; }
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build target supports WIN32 crypto API" >&5
printf %s "checking whether build target supports WIN32 crypto API... " >&6; }
curl_win32_crypto_api="no"
- if test "$curl_cv_header_wincrypt_h" = "yes"; then
+ if test "$curl_cv_header_windows_h" = "yes"; then
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -21116,8 +21903,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to link macOS CoreFoundation and SystemConfiguration framework" >&5
-printf %s "checking whether to link macOS CoreFoundation and SystemConfiguration framework... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to link macOS CoreFoundation, CoreServices, and SystemConfiguration frameworks" >&5
+printf %s "checking whether to link macOS CoreFoundation, CoreServices, and SystemConfiguration frameworks... " >&6; }
case $host_os in
darwin*)
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -21129,10 +21916,10 @@ case $host_os in
int main (void)
{
-#if (TARGET_OS_OSX)
+#if TARGET_OS_MAC && !(defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE)
return 0;
#else
-#error Not a macOS
+#error Not macOS
#endif
;
@@ -21154,7 +21941,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
if test "x$build_for_macos" != xno; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
- LDFLAGS="$LDFLAGS -framework CoreFoundation -framework SystemConfiguration"
+ LDFLAGS="$LDFLAGS -framework CoreFoundation -framework CoreServices -framework SystemConfiguration"
else
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
@@ -21202,15 +21989,22 @@ fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
- if test "$curl_cv_native_windows" = "yes"; then
- OS_WINDOWS_TRUE=
- OS_WINDOWS_FALSE='#'
+ if test "$curl_cv_native_windows" = "yes" && test -n "${RC}"; then
+ HAVE_WINDRES_TRUE=
+ HAVE_WINDRES_FALSE='#'
else
- OS_WINDOWS_TRUE='#'
- OS_WINDOWS_FALSE=
+ HAVE_WINDRES_TRUE='#'
+ HAVE_WINDRES_FALSE=
fi
+if test "$curl_cv_native_windows" = "yes"; then
+ if test -z "$HAVE_WINDRES_TRUE"; then :
+ else
+ as_fn_error $? "windres not found in PATH. Windows builds require windres. Cannot continue." "$LINENO" 5
+fi
+fi
+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to support http" >&5
printf %s "checking whether to support http... " >&6; }
# Check whether --enable-http was given.
@@ -21656,7 +22450,6 @@ then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Hyper support is experimental" >&5
printf "%s\n" "$as_me: Hyper support is experimental" >&6;}
curl_h1_msg="enabled (Hyper)"
- curl_h2_msg=$curl_h1_msg
HYPER_ENABLED=1
printf "%s\n" "#define USE_HYPER 1" >>confdefs.h
@@ -21692,9 +22485,7 @@ printf "%s\n" "#define CURL_DISABLE_RTSP 1" >>confdefs.h
CURL_DISABLE_RTSP=1
-
else
-
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to support rtsp" >&5
printf %s "checking whether to support rtsp... " >&6; }
# Check whether --enable-rtsp was given.
@@ -22304,16 +23095,16 @@ printf %s "checking for gethostbyname in $winsock_LIB... " >&6; }
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
-#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
+#include <windows.h>
#endif
int main (void)
{
- gethostbyname("www.dummysite.com");
+ gethostbyname("localhost");
;
return 0;
@@ -22355,7 +23146,7 @@ printf %s "checking for gethostbyname for Minix 3... " >&6; }
int main (void)
{
- gethostbyname("www.dummysite.com");
+ gethostbyname("localhost");
;
return 0;
@@ -22393,7 +23184,7 @@ printf %s "checking for gethostbyname for eCos... " >&6; }
int main (void)
{
- gethostbyname("www.dummysite.com");
+ gethostbyname("localhost");
;
return 0;
@@ -22436,7 +23227,7 @@ printf %s "checking for gethostbyname for AmigaOS bsdsocket.library... " >&6; }
int main (void)
{
- gethostbyname("www.dummysite.com");
+ gethostbyname("localhost");
;
return 0;
@@ -22523,10 +23314,10 @@ curl_includes_winsock2="\
# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# endif
-# include <windows.h>
# ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
# endif
+# include <windows.h>
#endif
/* includes end */"
@@ -22883,9 +23674,7 @@ else $as_nop
/* end confdefs.h. */
-#ifdef HAVE_STDLIB_H
#include <stdlib.h>
-#endif
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
@@ -22928,7 +23717,9 @@ fi
;;
*)
+ oldcc=$CC
old=$LD_LIBRARY_PATH
+ CC="sh ./run-compiler"
LD_LIBRARY_PATH=$CURL_LIBRARY_PATH:$old
export LD_LIBRARY_PATH
if test "$cross_compiling" = yes
@@ -22942,9 +23733,7 @@ else $as_nop
/* end confdefs.h. */
-#ifdef HAVE_STDLIB_H
#include <stdlib.h>
-#endif
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
@@ -22986,6 +23775,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
LD_LIBRARY_PATH=$old # restore
+ CC=$oldcc
;;
esac
@@ -23003,6 +23793,66 @@ printf "%s\n" "#define HAVE_CLOCK_GETTIME_MONOTONIC 1" >>confdefs.h
#
+
+ ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_types_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_time_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_TIME_H 1" >>confdefs.h
+
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for raw monotonic clock_gettime" >&5
+printf %s "checking for raw monotonic clock_gettime... " >&6; }
+ #
+ if test "x$dontwant_rt" = "xno" ; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#include <time.h>
+
+int main (void)
+{
+
+ struct timespec ts;
+ (void)clock_gettime(CLOCK_MONOTONIC_RAW, &ts);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+printf "%s\n" "#define HAVE_CLOCK_GETTIME_MONOTONIC_RAW 1" >>confdefs.h
+
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
+
+
CURL_NETWORK_AND_TIME_LIBS=$LIBS
@@ -23166,9 +24016,14 @@ printf "%s\n" "found" >&6; }
if test "$PKGCONFIG" != "no" ; then
- LIBS="`$PKGCONFIG --libs-only-l zlib` $LIBS"
- LDFLAGS="$LDFLAGS `$PKGCONFIG --libs-only-L zlib`"
- CPPFLAGS="$CPPFLAGS `$PKGCONFIG --cflags-only-I zlib`"
+ 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
@@ -23214,7 +24069,8 @@ printf "%s\n" "$ac_cv_lib_z_inflateEnd" >&6; }
if test "x$ac_cv_lib_z_inflateEnd" = xyes
then :
HAVE_LIBZ="1"
- LIBS="-lz $LIBS"
+ ZLIB_LIBS="-lz"
+ LIBS="$ZLIB_LIBS $LIBS"
else $as_nop
OPT_ZLIB="/usr/local"
fi
@@ -23272,7 +24128,8 @@ if test "x$ac_cv_lib_z_gzread" = xyes
then :
HAVE_LIBZ="1"
- LIBS="-lz $LIBS"
+ ZLIB_LIBS="-lz"
+ LIBS="$ZLIB_LIBS $LIBS"
else $as_nop
CPPFLAGS=$clean_CPPFLAGS
@@ -23297,6 +24154,7 @@ printf "%s\n" "$as_me: WARNING: configure found only the libz lib, not the heade
CPPFLAGS=$clean_CPPFLAGS
LDFLAGS=$clean_LDFLAGS
LIBS=$clean_LIBS
+ ZLIB_LIBS=""
elif test "$HAVE_LIBZ" != "1" && test "$HAVE_ZLIB_H" = "1"
then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: configure found only the libz header file, not the lib!" >&5
@@ -23304,15 +24162,14 @@ printf "%s\n" "$as_me: WARNING: configure found only the libz header file, not t
CPPFLAGS=$clean_CPPFLAGS
LDFLAGS=$clean_LDFLAGS
LIBS=$clean_LIBS
+ ZLIB_LIBS=""
elif test "$HAVE_LIBZ" = "1" && test "$HAVE_ZLIB_H" = "1"
then
printf "%s\n" "#define HAVE_LIBZ 1" >>confdefs.h
-
- ZLIB_LIBS="-lz"
- LIBS="-lz $clean_LIBS"
+ LIBS="$ZLIB_LIBS $clean_LIBS"
AMFIXLIB="1"
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found both libz and libz.h header" >&5
@@ -24033,7 +24890,7 @@ else $as_nop
int main (void)
{
- LDAP *ldp = ldap_init("dummy", LDAP_PORT);
+ LDAP *ldp = ldap_init("0.0.0.0", LDAP_PORT);
int res = ldap_unbind(ldp);
;
@@ -24101,7 +24958,7 @@ else $as_nop
int main (void)
{
- LDAP *ldp = ldapssl_init("dummy", LDAPS_PORT, 1);
+ LDAP *ldp = ldapssl_init("0.0.0.0", LDAPS_PORT, 1);
;
return 0;
@@ -24264,7 +25121,7 @@ int main (void)
BerValue *bvp = NULL;
BerElement *bep = ber_init(bvp);
- LDAP *ldp = ldap_init("dummy", LDAP_PORT);
+ LDAP *ldp = ldap_init("0.0.0.0", LDAP_PORT);
int res = ldap_unbind(ldp);
ber_free(bep, 1);
@@ -24405,6 +25262,12 @@ then :
printf "%s\n" "#define HAVE_LDAP_URL_PARSE 1" >>confdefs.h
fi
+ac_fn_c_check_func "$LINENO" "ldap_init_fd" "ac_cv_func_ldap_init_fd"
+if test "x$ac_cv_func_ldap_init_fd" = xyes
+then :
+ printf "%s\n" "#define HAVE_LDAP_INIT_FD 1" >>confdefs.h
+
+fi
if test "$LDAPLIBNAME" = "wldap32"; then
@@ -24413,13 +25276,15 @@ fi
printf "%s\n" "#define USE_WIN32_LDAP 1" >>confdefs.h
else
- curl_ldap_msg="enabled (OpenLDAP)"
if test "x$ac_cv_func_ldap_init_fd" = "xyes"; then
+ curl_ldap_msg="enabled (OpenLDAP)"
printf "%s\n" "#define USE_OPENLDAP 1" >>confdefs.h
USE_OPENLDAP=1
+ else
+ curl_ldap_msg="enabled (ancient OpenLDAP)"
fi
fi
fi
@@ -24566,9 +25431,17 @@ else $as_nop
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
}
_ACEOF
@@ -24586,7 +25459,9 @@ fi
;;
*)
+ oldcc=$CC
old=$LD_LIBRARY_PATH
+ CC="sh ./run-compiler"
LD_LIBRARY_PATH=$CURL_LIBRARY_PATH:$old
export LD_LIBRARY_PATH
if test "$cross_compiling" = yes
@@ -24599,9 +25474,17 @@ else $as_nop
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
}
_ACEOF
@@ -24618,6 +25501,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
LD_LIBRARY_PATH=$old # restore
+ CC=$oldcc
;;
esac
@@ -25561,7 +26445,7 @@ printf "%s\n" "#define USE_SECTRANSP 1" >>confdefs.h
ssl_msg="Secure Transport"
test secure-transport != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
SECURETRANSPORT_ENABLED=1
- LDFLAGS="$LDFLAGS -framework CoreFoundation -framework Security"
+ LDFLAGS="$LDFLAGS -framework CoreFoundation -framework CoreServices -framework Security"
else
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
@@ -25589,8 +26473,8 @@ if test "$HAVE_PROTO_BSDSOCKET_H" = "1"; then
int main (void)
{
- #if defined(AMISSL_CURRENT_VERSION) && (AMISSL_CURRENT_VERSION >= AMISSL_V303) && \
- defined(OPENSSL_VERSION_MAJOR) && (OPENSSL_VERSION_MAJOR >= 3) && \
+ #if defined(AMISSL_CURRENT_VERSION) && defined(AMISSL_V3xx) && \
+ (OPENSSL_VERSION_NUMBER >= 0x30000000L) && \
defined(PROTO_AMISSL_H)
return 0;
#else
@@ -25661,7 +26545,6 @@ then :
fi
- CPPFLAGS="$CPPFLAGS -DOPENSSL_SUPPRESS_DEPRECATED"
else $as_nop
@@ -25762,7 +26645,6 @@ printf "%s\n" "$as_me: PKG_CONFIG_LIBDIR will be set to \"$OPENSSL_PCDIR\"" >&6;
SSL_LDFLAGS="-L$LIB_OPENSSL"
SSL_CPPFLAGS="-I$PREFIX_OPENSSL/include"
fi
- SSL_CPPFLAGS="$SSL_CPPFLAGS -I$PREFIX_OPENSSL/include/openssl"
;;
esac
@@ -25992,7 +26874,7 @@ else $as_nop
fi
if test "$PKGCONFIG" = "no" -a -n "$PREFIX_OPENSSL" ; then
# only set this if pkg-config wasn't used
- CPPFLAGS="$CLEANCPPFLAGS -I$PREFIX_OPENSSL/include/openssl -I$PREFIX_OPENSSL/include"
+ CPPFLAGS="$CLEANCPPFLAGS -I$PREFIX_OPENSSL/include"
fi
# Linking previously failed, try extra paths from --with-openssl or
# pkg-config. Use a different function name to avoid reusing the earlier
@@ -26234,7 +27116,7 @@ then :
#define `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1
_ACEOF
ssl_msg="OpenSSL"
- test openssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
+ test openssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
OPENSSL_ENABLED=1
printf "%s\n" "#define USE_OPENSSL 1" >>confdefs.h
@@ -26303,14 +27185,6 @@ fi
if test X"$OPENSSL_ENABLED" = X"1"; then
- ac_fn_c_check_func "$LINENO" "RAND_egd" "ac_cv_func_RAND_egd"
-if test "x$ac_cv_func_RAND_egd" = xyes
-then :
- printf "%s\n" "#define HAVE_RAND_EGD 1" >>confdefs.h
-
-fi
-
-
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BoringSSL" >&5
printf %s "checking for BoringSSL... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -26336,10 +27210,42 @@ then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
+ ssl_msg="BoringSSL"
+
+else $as_nop
-printf "%s\n" "#define HAVE_BORINGSSL 1" >>confdefs.h
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
- ssl_msg="BoringSSL"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for AWS-LC" >&5
+printf %s "checking for AWS-LC... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ #include <openssl/base.h>
+
+int main (void)
+{
+
+ #ifndef OPENSSL_IS_AWSLC
+ #error not AWS-LC
+ #endif
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ ssl_msg="AWS-LC"
else $as_nop
@@ -26396,7 +27302,7 @@ printf %s "checking for OpenSSL >= v3... " >&6; }
int main (void)
{
- #if defined(OPENSSL_VERSION_MAJOR) && (OPENSSL_VERSION_MAJOR >= 3)
+ #if (OPENSSL_VERSION_NUMBER >= 0x30000000L)
return 0;
#else
#error older than 3
@@ -26415,7 +27321,6 @@ printf "%s\n" "yes" >&6; }
printf "%s\n" "#define HAVE_OPENSSL3 1" >>confdefs.h
- CPPFLAGS="$CPPFLAGS -DOPENSSL_SUPPRESS_DEPRECATED"
ssl_msg="OpenSSL v3+"
else $as_nop
@@ -26454,20 +27359,6 @@ fi
if test X"$OPENSSL_ENABLED" = X"1"; then
-# Check whether --with-egd-socket was given.
-if test ${with_egd_socket+y}
-then :
- withval=$with_egd_socket; EGD_SOCKET="$withval"
-
-fi
-
- if test -n "$EGD_SOCKET" ; then
-
-printf "%s\n" "#define EGD_SOCKET \"$EGD_SOCKET\"" >>confdefs.h
-
- fi
-
-
# Check whether --with-random was given.
if test ${with_random+y}
then :
@@ -27051,7 +27942,7 @@ printf "%s\n" "#define USE_MBEDTLS 1" >>confdefs.h
MBEDTLS_ENABLED=1
USE_MBEDTLS="yes"
ssl_msg="mbedTLS"
- test mbedtls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
+ test mbedtls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
fi
@@ -27387,7 +28278,7 @@ printf %s "checking for wolfSSL_Init in -lwolfssl... " >&6; }
int main (void)
{
- return wolfSSL_Init();
+ return wolfSSL_Init();
;
return 0;
@@ -27407,7 +28298,7 @@ printf "%s\n" "#define USE_WOLFSSL 1" >>confdefs.h
WOLFSSL_ENABLED=1
USE_WOLFSSL="yes"
ssl_msg="WolfSSL"
- test wolfssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
+ test wolfssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
else $as_nop
@@ -27507,6 +28398,19 @@ printf "%s\n" "#define HAVE_WOLFSSL_DES_ECB_ENCRYPT 1" >>confdefs.h
fi
+ ac_fn_c_check_func "$LINENO" "wolfSSL_BIO_set_shutdown" "ac_cv_func_wolfSSL_BIO_set_shutdown"
+if test "x$ac_cv_func_wolfSSL_BIO_set_shutdown" = xyes
+then :
+
+
+printf "%s\n" "#define HAVE_WOLFSSL_FULL_BIO 1" >>confdefs.h
+
+ WOLFSSL_FULL_BIO=1
+
+
+fi
+
+
if test -n "$wolfssllibpath"; then
if test "x$cross_compiling" != "xyes"; then
CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$wolfssllibpath"
@@ -27585,7 +28489,7 @@ printf "%s\n" "#define USE_BEARSSL 1" >>confdefs.h
BEARSSL_ENABLED=1
USE_BEARSSL="yes"
ssl_msg="BearSSL"
- test bearssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
+ test bearssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
fi
@@ -27697,6 +28601,14 @@ if test "x$OPT_RUSTLS" != xno; then
OPT_RUSTLS=""
fi
+ case $host_os in
+ darwin*)
+ LDFLAGS="$LDFLAGS -framework Security"
+ ;;
+ *)
+ ;;
+ esac
+
if test -z "$OPT_RUSTLS" ; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for rustls_client_session_read in -lrustls" >&5
@@ -27745,7 +28657,7 @@ printf "%s\n" "#define USE_RUSTLS 1" >>confdefs.h
RUSTLS_ENABLED=1
USE_RUSTLS="yes"
ssl_msg="rustls"
- test rustls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
+ test rustls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
fi
@@ -27837,473 +28749,19 @@ printf "%s\n" "$as_me: Added $rustlslib to CURL_LIBRARY_PATH" >&6;}
fi
-if test "x$OPT_NSS" != xno; then
- ssl_msg=
-
- if test X"$OPT_NSS" != Xno; then
-
- addld=""
- addlib=""
- addcflags=""
- nssprefix=""
- version=""
-
- if test "x$OPT_NSS" = "xyes"; then
-
-
- if test -n "$PKG_CONFIG"; then
- PKGCONFIG="$PKG_CONFIG"
- else
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
-set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_path_PKGCONFIG+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
- case $PKGCONFIG in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_PKGCONFIG="$PKGCONFIG" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_dummy="$PATH:/usr/bin:/usr/local/bin"
-for as_dir in $as_dummy
-do
- IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
- ac_cv_path_PKGCONFIG="$as_dir$ac_word$ac_exec_ext"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-PKGCONFIG=$ac_cv_path_PKGCONFIG
-if test -n "$PKGCONFIG"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG" >&5
-printf "%s\n" "$PKGCONFIG" >&6; }
-else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_path_PKGCONFIG"; then
- ac_pt_PKGCONFIG=$PKGCONFIG
- # Extract the first word of "pkg-config", so it can be a program name with args.
-set dummy pkg-config; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_path_ac_pt_PKGCONFIG+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
- case $ac_pt_PKGCONFIG in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_ac_pt_PKGCONFIG="$ac_pt_PKGCONFIG" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_dummy="$PATH:/usr/bin:/usr/local/bin"
-for as_dir in $as_dummy
-do
- IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
- ac_cv_path_ac_pt_PKGCONFIG="$as_dir$ac_word$ac_exec_ext"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-ac_pt_PKGCONFIG=$ac_cv_path_ac_pt_PKGCONFIG
-if test -n "$ac_pt_PKGCONFIG"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKGCONFIG" >&5
-printf "%s\n" "$ac_pt_PKGCONFIG" >&6; }
-else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
-fi
-
- if test "x$ac_pt_PKGCONFIG" = x; then
- PKGCONFIG="no"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- PKGCONFIG=$ac_pt_PKGCONFIG
- fi
-else
- PKGCONFIG="$ac_cv_path_PKGCONFIG"
-fi
-
- fi
-
- if test "x$PKGCONFIG" != "xno"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nss options with pkg-config" >&5
-printf %s "checking for nss options with pkg-config... " >&6; }
- itexists=`
- if test -n ""; then
- PKG_CONFIG_LIBDIR=""
- export PKG_CONFIG_LIBDIR
- fi
- $PKGCONFIG --exists nss >/dev/null 2>&1 && echo 1`
-
- if test -z "$itexists"; then
- PKGCONFIG="no"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
- else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: found" >&5
-printf "%s\n" "found" >&6; }
- fi
- fi
-
-
- if test "$PKGCONFIG" != "no" ; then
- addlib=`$PKGCONFIG --libs nss`
- addcflags=`$PKGCONFIG --cflags nss`
- version=`$PKGCONFIG --modversion nss`
- nssprefix=`$PKGCONFIG --variable=prefix nss`
- else
-
- check=`nss-config --version 2>/dev/null`
- if test -n "$check"; then
- addlib=`nss-config --libs`
- addcflags=`nss-config --cflags`
- version=`nss-config --version`
- nssprefix=`nss-config --prefix`
- else
- addlib="-lnss3"
- addcflags=""
- version="unknown"
- fi
- fi
- else
- NSS_PCDIR="$OPT_NSS/lib/pkgconfig"
- if test -f "$NSS_PCDIR/nss.pc"; then
-
- if test -n "$PKG_CONFIG"; then
- PKGCONFIG="$PKG_CONFIG"
- else
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
-set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_path_PKGCONFIG+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
- case $PKGCONFIG in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_PKGCONFIG="$PKGCONFIG" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_dummy="$PATH:/usr/bin:/usr/local/bin"
-for as_dir in $as_dummy
-do
- IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
- ac_cv_path_PKGCONFIG="$as_dir$ac_word$ac_exec_ext"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-PKGCONFIG=$ac_cv_path_PKGCONFIG
-if test -n "$PKGCONFIG"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG" >&5
-printf "%s\n" "$PKGCONFIG" >&6; }
-else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_path_PKGCONFIG"; then
- ac_pt_PKGCONFIG=$PKGCONFIG
- # Extract the first word of "pkg-config", so it can be a program name with args.
-set dummy pkg-config; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_path_ac_pt_PKGCONFIG+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
- case $ac_pt_PKGCONFIG in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_ac_pt_PKGCONFIG="$ac_pt_PKGCONFIG" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_dummy="$PATH:/usr/bin:/usr/local/bin"
-for as_dir in $as_dummy
-do
- IFS=$as_save_IFS
- case $as_dir in #(((
- '') as_dir=./ ;;
- */) ;;
- *) as_dir=$as_dir/ ;;
- esac
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
- ac_cv_path_ac_pt_PKGCONFIG="$as_dir$ac_word$ac_exec_ext"
- printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-ac_pt_PKGCONFIG=$ac_cv_path_ac_pt_PKGCONFIG
-if test -n "$ac_pt_PKGCONFIG"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKGCONFIG" >&5
-printf "%s\n" "$ac_pt_PKGCONFIG" >&6; }
-else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
-fi
-
- if test "x$ac_pt_PKGCONFIG" = x; then
- PKGCONFIG="no"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- PKGCONFIG=$ac_pt_PKGCONFIG
- fi
-else
- PKGCONFIG="$ac_cv_path_PKGCONFIG"
-fi
-
- fi
-
- if test "x$PKGCONFIG" != "xno"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nss options with pkg-config" >&5
-printf %s "checking for nss options with pkg-config... " >&6; }
- itexists=`
- if test -n "$NSS_PCDIR"; then
- PKG_CONFIG_LIBDIR="$NSS_PCDIR"
- export PKG_CONFIG_LIBDIR
- fi
- $PKGCONFIG --exists nss >/dev/null 2>&1 && echo 1`
-
- if test -z "$itexists"; then
- PKGCONFIG="no"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
- else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: found" >&5
-printf "%s\n" "found" >&6; }
- fi
- fi
-
- if test "$PKGCONFIG" != "no" ; then
- addld=`
- if test -n "$NSS_PCDIR"; then
- PKG_CONFIG_LIBDIR="$NSS_PCDIR"
- export PKG_CONFIG_LIBDIR
- fi
- $PKGCONFIG --libs-only-L nss`
- addlib=`
- if test -n "$NSS_PCDIR"; then
- PKG_CONFIG_LIBDIR="$NSS_PCDIR"
- export PKG_CONFIG_LIBDIR
- fi
- $PKGCONFIG --libs-only-l nss`
- addcflags=`
- if test -n "$NSS_PCDIR"; then
- PKG_CONFIG_LIBDIR="$NSS_PCDIR"
- export PKG_CONFIG_LIBDIR
- fi
- $PKGCONFIG --cflags nss`
- version=`
- if test -n "$NSS_PCDIR"; then
- PKG_CONFIG_LIBDIR="$NSS_PCDIR"
- export PKG_CONFIG_LIBDIR
- fi
- $PKGCONFIG --modversion nss`
- nssprefix=`
- if test -n "$NSS_PCDIR"; then
- PKG_CONFIG_LIBDIR="$NSS_PCDIR"
- export PKG_CONFIG_LIBDIR
- fi
- $PKGCONFIG --variable=prefix nss`
- fi
- fi
- fi
-
- if test -z "$addlib"; then
- # Without pkg-config, we'll kludge in some defaults
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Using hard-wired libraries and compilation flags for NSS." >&5
-printf "%s\n" "$as_me: WARNING: Using hard-wired libraries and compilation flags for NSS." >&2;}
- addld="-L$OPT_NSS/lib"
- addlib="-lssl3 -lsmime3 -lnss3 -lplds4 -lplc4 -lnspr4"
- addcflags="-I$OPT_NSS/include"
- version="unknown"
- nssprefix=$OPT_NSS
- fi
-
- CLEANLDFLAGS="$LDFLAGS"
- CLEANLIBS="$LIBS"
- CLEANCPPFLAGS="$CPPFLAGS"
-
- LDFLAGS="$addld $LDFLAGS"
- LIBS="$addlib $LIBS"
- if test "$addcflags" != "-I/usr/include"; then
- CPPFLAGS="$CPPFLAGS $addcflags"
- fi
-
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SSL_VersionRangeSet in -lnss3" >&5
-printf %s "checking for SSL_VersionRangeSet in -lnss3... " >&6; }
-if test ${ac_cv_lib_nss3_SSL_VersionRangeSet+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lnss3 $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-#ifdef __cplusplus
-extern "C"
-#endif
-char SSL_VersionRangeSet ();
-int main (void)
-{
-return SSL_VersionRangeSet ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"
-then :
- ac_cv_lib_nss3_SSL_VersionRangeSet=yes
-else $as_nop
- ac_cv_lib_nss3_SSL_VersionRangeSet=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nss3_SSL_VersionRangeSet" >&5
-printf "%s\n" "$ac_cv_lib_nss3_SSL_VersionRangeSet" >&6; }
-if test "x$ac_cv_lib_nss3_SSL_VersionRangeSet" = xyes
-then :
-
-
-printf "%s\n" "#define USE_NSS 1" >>confdefs.h
-
- USE_NSS=1
-
- USE_NSS="yes"
- NSS_ENABLED=1
- ssl_msg="NSS"
- test nss != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
-
-else $as_nop
-
- LDFLAGS="$CLEANLDFLAGS"
- LIBS="$CLEANLIBS"
- CPPFLAGS="$CLEANCPPFLAGS"
-
-fi
-
-
- if test "x$USE_NSS" = "xyes"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: detected NSS version $version" >&5
-printf "%s\n" "$as_me: detected NSS version $version" >&6;}
-
- ac_fn_c_check_func "$LINENO" "PK11_CreateManagedGenericObject" "ac_cv_func_PK11_CreateManagedGenericObject"
-if test "x$ac_cv_func_PK11_CreateManagedGenericObject" = xyes
-then :
-
-
-printf "%s\n" "#define HAVE_PK11_CREATEMANAGEDGENERICOBJECT 1" >>confdefs.h
-
-
-fi
-
-
- NSS_LIBS=$addlib
-
-
- if test "x$cross_compiling" != "xyes"; then
- CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$nssprefix/lib$libsuff"
- export CURL_LIBRARY_PATH
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Added $nssprefix/lib$libsuff to CURL_LIBRARY_PATH" >&5
-printf "%s\n" "$as_me: Added $nssprefix/lib$libsuff to CURL_LIBRARY_PATH" >&6;}
- fi
-
- fi
- fi
- test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
-fi
-
-
-
if test "x$USE_WIN32_CRYPTO" = "x1" -o "x$USE_SCHANNEL" = "x1"; then
LIBS="-ladvapi32 -lcrypt32 $LIBS"
fi
-if test "x$curl_cv_native_windows" = "xyes" &&
- test "x$curl_mingw_original" = "xno"; then
+if test "x$curl_cv_native_windows" = "xyes"; then
LIBS="-lbcrypt $LIBS"
fi
-case "x$SSL_DISABLED$OPENSSL_ENABLED$GNUTLS_ENABLED$NSS_ENABLED$MBEDTLS_ENABLED$WOLFSSL_ENABLED$SCHANNEL_ENABLED$SECURETRANSPORT_ENABLED$BEARSSL_ENABLED$RUSTLS_ENABLED"
+case "x$SSL_DISABLED$OPENSSL_ENABLED$GNUTLS_ENABLED$MBEDTLS_ENABLED$WOLFSSL_ENABLED$SCHANNEL_ENABLED$SECURETRANSPORT_ENABLED$BEARSSL_ENABLED$RUSTLS_ENABLED"
in
x)
as_fn_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-nss, --with-schannel, --with-secure-transport, --with-amissl, --with-bearssl or --with-rustls to address this." "$LINENO" 5
+Use --with-openssl, --with-gnutls, --with-wolfssl, --with-mbedtls, --with-schannel, --with-secure-transport, --with-amissl, --with-bearssl or --with-rustls to address this." "$LINENO" 5
;;
x1)
# one SSL backend is enabled
@@ -28317,7 +28775,7 @@ xD)
;;
xD*)
as_fn_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-nss, --with-schannel, --with-secure-transport, --with-amissl, --with-bearssl, --with-rustls).
+(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." "$LINENO" 5
;;
*)
@@ -28401,8 +28859,11 @@ fi
ca="$want_ca"
capath="no"
elif test "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then
- if test "x$OPENSSL_ENABLED" != "x1" -a "x$GNUTLS_ENABLED" != "x1" -a "x$MBEDTLS_ENABLED" != "x1"; then
- as_fn_error $? "--with-ca-path only works with OpenSSL, GnuTLS or mbedTLS" "$LINENO" 5
+ if test "x$OPENSSL_ENABLED" != "x1" -a \
+ "x$GNUTLS_ENABLED" != "x1" -a \
+ "x$MBEDTLS_ENABLED" != "x1" -a \
+ "x$WOLFSSL_ENABLED" != "x1"; then
+ as_fn_error $? "--with-ca-path only works with OpenSSL, GnuTLS, mbedTLS or wolfSSL" "$LINENO" 5
fi
capath="$want_capath"
ca="no"
@@ -28429,9 +28890,15 @@ fi
fi
done
fi
- if test "x$want_capath" = "xunset" -a "x$ca" = "xno" -a \
- "x$OPENSSL_ENABLED" = "x1"; then
- check_capath="/etc/ssl/certs/"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: want $want_capath ca $ca" >&5
+printf "%s\n" "$as_me: want $want_capath ca $ca" >&6;}
+ 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
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: skipped the ca-cert path detection when cross-compiling" >&5
@@ -28698,7 +29165,7 @@ fi
# Check whether --with-libmetalink was given.
if test ${with_libmetalink+y}
then :
- withval=$with_libmetalink; as_fn_error $? "--with-libmetalink no longer works!" "$LINENO" 5
+ withval=$with_libmetalink; as_fn_error $? "--with-libmetalink and --without-libmetalink no longer work!" "$LINENO" 5
fi
@@ -28882,7 +29349,7 @@ printf "%s\n" "found" >&6; }
if test "$PKGCONFIG" != "no" ; then
- LIB_SSH2=`$PKGCONFIG --libs libssh2`
+ 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`
@@ -29593,8 +30060,6 @@ printf "%s\n" "yes" >&6; }
versioned_symbols_flavour="OPENSSL_"
elif test "x$GNUTLS_ENABLED" = "x1"; then
versioned_symbols_flavour="GNUTLS_"
- elif test "x$NSS_ENABLED" = "x1"; then
- versioned_symbols_flavour="NSS_"
elif test "x$WOLFSSL_ENABLED" = "x1"; then
versioned_symbols_flavour="WOLFSSL_"
elif test "x$SCHANNEL_ENABLED" = "x1"; then
@@ -29757,9 +30222,6 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \
printf "%s\n" "#define USE_WIN32_IDN 1" >>confdefs.h
-
-printf "%s\n" "#define WANT_IDN_PROTOTYPES 1" >>confdefs.h
-
IDN_ENABLED=1
curl_idn_msg="enabled (Windows-native)"
@@ -30445,17 +30907,19 @@ printf "%s\n" "$as_me: -L is $LD_H2" >&6;}
DIR_H2=${want_nghttp2_path}/lib$libsuff
elif test X"$want_nghttp2" != Xdefault; then
as_fn_error $? "--with-nghttp2 was specified but could not find libnghttp2 pkg-config file." "$LINENO" 5
+ else
+ LIB_H2="-lnghttp2"
fi
LDFLAGS="$LDFLAGS $LD_H2"
CPPFLAGS="$CPPFLAGS $CPP_H2"
LIBS="$LIB_H2 $LIBS"
- # use nghttp2_session_set_local_window_size to require nghttp2
- # >= 1.12.0
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nghttp2_session_set_local_window_size in -lnghttp2" >&5
-printf %s "checking for nghttp2_session_set_local_window_size in -lnghttp2... " >&6; }
-if test ${ac_cv_lib_nghttp2_nghttp2_session_set_local_window_size+y}
+ # use nghttp2_session_get_stream_local_window_size to require nghttp2
+ # >= 1.15.0
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nghttp2_session_get_stream_local_window_size in -lnghttp2" >&5
+printf %s "checking for nghttp2_session_get_stream_local_window_size in -lnghttp2... " >&6; }
+if test ${ac_cv_lib_nghttp2_nghttp2_session_get_stream_local_window_size+y}
then :
printf %s "(cached) " >&6
else $as_nop
@@ -30468,27 +30932,27 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#ifdef __cplusplus
extern "C"
#endif
-char nghttp2_session_set_local_window_size ();
+char nghttp2_session_get_stream_local_window_size ();
int main (void)
{
-return nghttp2_session_set_local_window_size ();
+return nghttp2_session_get_stream_local_window_size ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"
then :
- ac_cv_lib_nghttp2_nghttp2_session_set_local_window_size=yes
+ ac_cv_lib_nghttp2_nghttp2_session_get_stream_local_window_size=yes
else $as_nop
- ac_cv_lib_nghttp2_nghttp2_session_set_local_window_size=no
+ ac_cv_lib_nghttp2_nghttp2_session_get_stream_local_window_size=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nghttp2_nghttp2_session_set_local_window_size" >&5
-printf "%s\n" "$ac_cv_lib_nghttp2_nghttp2_session_set_local_window_size" >&6; }
-if test "x$ac_cv_lib_nghttp2_nghttp2_session_set_local_window_size" = xyes
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nghttp2_nghttp2_session_get_stream_local_window_size" >&5
+printf "%s\n" "$ac_cv_lib_nghttp2_nghttp2_session_get_stream_local_window_size" >&6; }
+if test "x$ac_cv_lib_nghttp2_nghttp2_session_get_stream_local_window_size" = xyes
then :
for ac_header in nghttp2/nghttp2.h
@@ -30929,14 +31393,14 @@ fi
fi
if test "x$PKGCONFIG" != "xno"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libngtcp2_crypto_openssl options with pkg-config" >&5
-printf %s "checking for libngtcp2_crypto_openssl options with pkg-config... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libngtcp2_crypto_quictls options with pkg-config" >&5
+printf %s "checking for libngtcp2_crypto_quictls options with pkg-config... " >&6; }
itexists=`
if test -n "$want_tcp2_path"; then
PKG_CONFIG_LIBDIR="$want_tcp2_path"
export PKG_CONFIG_LIBDIR
fi
- $PKGCONFIG --exists libngtcp2_crypto_openssl >/dev/null 2>&1 && echo 1`
+ $PKGCONFIG --exists libngtcp2_crypto_quictls >/dev/null 2>&1 && echo 1`
if test -z "$itexists"; then
PKGCONFIG="no"
@@ -30950,50 +31414,50 @@ printf "%s\n" "found" >&6; }
if test "$PKGCONFIG" != "no" ; then
- LIB_NGTCP2_CRYPTO_OPENSSL=`
+ LIB_NGTCP2_CRYPTO_QUICTLS=`
if test -n "$want_tcp2_path"; then
PKG_CONFIG_LIBDIR="$want_tcp2_path"
export PKG_CONFIG_LIBDIR
fi
- $PKGCONFIG --libs-only-l libngtcp2_crypto_openssl`
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: -l is $LIB_NGTCP2_CRYPTO_OPENSSL" >&5
-printf "%s\n" "$as_me: -l is $LIB_NGTCP2_CRYPTO_OPENSSL" >&6;}
+ $PKGCONFIG --libs-only-l libngtcp2_crypto_quictls`
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: -l is $LIB_NGTCP2_CRYPTO_QUICTLS" >&5
+printf "%s\n" "$as_me: -l is $LIB_NGTCP2_CRYPTO_QUICTLS" >&6;}
- CPP_NGTCP2_CRYPTO_OPENSSL=`
+ CPP_NGTCP2_CRYPTO_QUICTLS=`
if test -n "$want_tcp2_path"; then
PKG_CONFIG_LIBDIR="$want_tcp2_path"
export PKG_CONFIG_LIBDIR
fi
- $PKGCONFIG --cflags-only-I libngtcp2_crypto_openssl`
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: -I is $CPP_NGTCP2_CRYPTO_OPENSSL" >&5
-printf "%s\n" "$as_me: -I is $CPP_NGTCP2_CRYPTO_OPENSSL" >&6;}
+ $PKGCONFIG --cflags-only-I libngtcp2_crypto_quictls`
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: -I is $CPP_NGTCP2_CRYPTO_QUICTLS" >&5
+printf "%s\n" "$as_me: -I is $CPP_NGTCP2_CRYPTO_QUICTLS" >&6;}
- LD_NGTCP2_CRYPTO_OPENSSL=`
+ LD_NGTCP2_CRYPTO_QUICTLS=`
if test -n "$want_tcp2_path"; then
PKG_CONFIG_LIBDIR="$want_tcp2_path"
export PKG_CONFIG_LIBDIR
fi
- $PKGCONFIG --libs-only-L libngtcp2_crypto_openssl`
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: -L is $LD_NGTCP2_CRYPTO_OPENSSL" >&5
-printf "%s\n" "$as_me: -L is $LD_NGTCP2_CRYPTO_OPENSSL" >&6;}
+ $PKGCONFIG --libs-only-L libngtcp2_crypto_quictls`
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: -L is $LD_NGTCP2_CRYPTO_QUICTLS" >&5
+printf "%s\n" "$as_me: -L is $LD_NGTCP2_CRYPTO_QUICTLS" >&6;}
- LDFLAGS="$LDFLAGS $LD_NGTCP2_CRYPTO_OPENSSL"
- CPPFLAGS="$CPPFLAGS $CPP_NGTCP2_CRYPTO_OPENSSL"
- LIBS="$LIB_NGTCP2_CRYPTO_OPENSSL $LIBS"
+ 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_OPENSSL=`echo $LD_NGTCP2_CRYPTO_OPENSSL | $SED -e 's/^-L//'`
+ DIR_NGTCP2_CRYPTO_QUICTLS=`echo $LD_NGTCP2_CRYPTO_QUICTLS | $SED -e 's/^-L//'`
fi
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ngtcp2_crypto_recv_client_initial_cb in -lngtcp2_crypto_openssl" >&5
-printf %s "checking for ngtcp2_crypto_recv_client_initial_cb in -lngtcp2_crypto_openssl... " >&6; }
-if test ${ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_recv_client_initial_cb+y}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ngtcp2_crypto_recv_client_initial_cb in -lngtcp2_crypto_quictls" >&5
+printf %s "checking for ngtcp2_crypto_recv_client_initial_cb in -lngtcp2_crypto_quictls... " >&6; }
+if test ${ac_cv_lib_ngtcp2_crypto_quictls_ngtcp2_crypto_recv_client_initial_cb+y}
then :
printf %s "(cached) " >&6
else $as_nop
ac_check_lib_save_LIBS=$LIBS
-LIBS="-lngtcp2_crypto_openssl $LIBS"
+LIBS="-lngtcp2_crypto_quictls $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -31011,17 +31475,17 @@ return ngtcp2_crypto_recv_client_initial_cb ();
_ACEOF
if ac_fn_c_try_link "$LINENO"
then :
- ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_recv_client_initial_cb=yes
+ ac_cv_lib_ngtcp2_crypto_quictls_ngtcp2_crypto_recv_client_initial_cb=yes
else $as_nop
- ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_recv_client_initial_cb=no
+ ac_cv_lib_ngtcp2_crypto_quictls_ngtcp2_crypto_recv_client_initial_cb=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_recv_client_initial_cb" >&5
-printf "%s\n" "$ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_recv_client_initial_cb" >&6; }
-if test "x$ac_cv_lib_ngtcp2_crypto_openssl_ngtcp2_crypto_recv_client_initial_cb" = xyes
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ngtcp2_crypto_quictls_ngtcp2_crypto_recv_client_initial_cb" >&5
+printf "%s\n" "$ac_cv_lib_ngtcp2_crypto_quictls_ngtcp2_crypto_recv_client_initial_cb" >&6; }
+if test "x$ac_cv_lib_ngtcp2_crypto_quictls_ngtcp2_crypto_recv_client_initial_cb" = xyes
then :
for ac_header in ngtcp2/ngtcp2_crypto.h
@@ -31032,14 +31496,14 @@ then :
printf "%s\n" "#define HAVE_NGTCP2_NGTCP2_CRYPTO_H 1" >>confdefs.h
NGTCP2_ENABLED=1
-printf "%s\n" "#define USE_NGTCP2_CRYPTO_OPENSSL 1" >>confdefs.h
+printf "%s\n" "#define USE_NGTCP2_CRYPTO_QUICTLS 1" >>confdefs.h
- USE_NGTCP2_CRYPTO_OPENSSL=1
+ USE_NGTCP2_CRYPTO_QUICTLS=1
- CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_NGTCP2_CRYPTO_OPENSSL"
+ CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_NGTCP2_CRYPTO_QUICTLS"
export CURL_LIBRARY_PATH
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Added $DIR_NGTCP2_CRYPTO_OPENSSL to CURL_LIBRARY_PATH" >&5
-printf "%s\n" "$as_me: Added $DIR_NGTCP2_CRYPTO_OPENSSL to CURL_LIBRARY_PATH" >&6;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Added $DIR_NGTCP2_CRYPTO_QUICTLS to CURL_LIBRARY_PATH" >&5
+printf "%s\n" "$as_me: Added $DIR_NGTCP2_CRYPTO_QUICTLS to CURL_LIBRARY_PATH" >&6;}
fi
@@ -31055,7 +31519,7 @@ fi
else
if test X"$want_tcp2" != Xdefault; then
- as_fn_error $? "--with-ngtcp2 was specified but could not find ngtcp2_crypto_openssl pkg-config file." "$LINENO" 5
+ as_fn_error $? "--with-ngtcp2 was specified but could not find ngtcp2_crypto_quictls pkg-config file." "$LINENO" 5
fi
fi
fi
@@ -31830,7 +32294,6 @@ printf "%s\n" "#define USE_NGHTTP3 1" >>confdefs.h
export CURL_LIBRARY_PATH
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Added $DIR_NGHTTP3 to CURL_LIBRARY_PATH" >&5
printf "%s\n" "$as_me: Added $DIR_NGHTTP3 to CURL_LIBRARY_PATH" >&6;}
- experimental="$experimental HTTP3"
fi
@@ -32065,9 +32528,9 @@ printf "%s\n" "$as_me: -L is $LD_QUICHE" >&6;}
if test "x$cross_compiling" != "xyes"; then
DIR_QUICHE=`echo $LD_QUICHE | $SED -e 's/^-L//'`
fi
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for quiche_connect in -lquiche" >&5
-printf %s "checking for quiche_connect in -lquiche... " >&6; }
-if test ${ac_cv_lib_quiche_quiche_connect+y}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for quiche_conn_send_ack_eliciting in -lquiche" >&5
+printf %s "checking for quiche_conn_send_ack_eliciting in -lquiche... " >&6; }
+if test ${ac_cv_lib_quiche_quiche_conn_send_ack_eliciting+y}
then :
printf %s "(cached) " >&6
else $as_nop
@@ -32080,27 +32543,27 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#ifdef __cplusplus
extern "C"
#endif
-char quiche_connect ();
+char quiche_conn_send_ack_eliciting ();
int main (void)
{
-return quiche_connect ();
+return quiche_conn_send_ack_eliciting ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"
then :
- ac_cv_lib_quiche_quiche_connect=yes
+ ac_cv_lib_quiche_quiche_conn_send_ack_eliciting=yes
else $as_nop
- ac_cv_lib_quiche_quiche_connect=no
+ ac_cv_lib_quiche_quiche_conn_send_ack_eliciting=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_quiche_quiche_connect" >&5
-printf "%s\n" "$ac_cv_lib_quiche_quiche_connect" >&6; }
-if test "x$ac_cv_lib_quiche_quiche_connect" = xyes
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_quiche_quiche_conn_send_ack_eliciting" >&5
+printf "%s\n" "$ac_cv_lib_quiche_quiche_conn_send_ack_eliciting" >&6; }
+if test "x$ac_cv_lib_quiche_quiche_conn_send_ack_eliciting" = xyes
then :
for ac_header in quiche.h
@@ -32614,70 +33077,6 @@ then :
printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h
fi
-ac_fn_c_check_header_compile "$LINENO" "sys/uio.h" "ac_cv_header_sys_uio_h" "
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#elif defined(HAVE_UNISTD_H)
-#include <unistd.h>
-#endif
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_NETINET_IN6_H
-#include <netinet/in6.h>
-#endif
-#ifdef HAVE_SYS_UN_H
-#include <sys/un.h>
-#endif
-
-
-"
-if test "x$ac_cv_header_sys_uio_h" = xyes
-then :
- printf "%s\n" "#define HAVE_SYS_UIO_H 1" >>confdefs.h
-
-fi
-ac_fn_c_check_header_compile "$LINENO" "assert.h" "ac_cv_header_assert_h" "
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#elif defined(HAVE_UNISTD_H)
-#include <unistd.h>
-#endif
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_NETINET_IN6_H
-#include <netinet/in6.h>
-#endif
-#ifdef HAVE_SYS_UN_H
-#include <sys/un.h>
-#endif
-
-
-"
-if test "x$ac_cv_header_assert_h" = xyes
-then :
- printf "%s\n" "#define HAVE_ASSERT_H 1" >>confdefs.h
-
-fi
ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -33542,38 +33941,6 @@ then :
printf "%s\n" "#define HAVE_LOCALE_H 1" >>confdefs.h
fi
-ac_fn_c_check_header_compile "$LINENO" "errno.h" "ac_cv_header_errno_h" "
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#elif defined(HAVE_UNISTD_H)
-#include <unistd.h>
-#endif
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_NETINET_IN6_H
-#include <netinet/in6.h>
-#endif
-#ifdef HAVE_SYS_UN_H
-#include <sys/un.h>
-#endif
-
-
-"
-if test "x$ac_cv_header_errno_h" = xyes
-then :
- printf "%s\n" "#define HAVE_ERRNO_H 1" >>confdefs.h
-
-fi
ac_fn_c_check_header_compile "$LINENO" "stdbool.h" "ac_cv_header_stdbool_h" "
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -33606,38 +33973,6 @@ then :
printf "%s\n" "#define HAVE_STDBOOL_H 1" >>confdefs.h
fi
-ac_fn_c_check_header_compile "$LINENO" "arpa/tftp.h" "ac_cv_header_arpa_tftp_h" "
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#elif defined(HAVE_UNISTD_H)
-#include <unistd.h>
-#endif
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_NETINET_IN6_H
-#include <netinet/in6.h>
-#endif
-#ifdef HAVE_SYS_UN_H
-#include <sys/un.h>
-#endif
-
-
-"
-if test "x$ac_cv_header_arpa_tftp_h" = xyes
-then :
- printf "%s\n" "#define HAVE_ARPA_TFTP_H 1" >>confdefs.h
-
-fi
ac_fn_c_check_header_compile "$LINENO" "sys/filio.h" "ac_cv_header_sys_filio_h" "
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -33819,114 +34154,6 @@ printf "%s\n" "#define const /**/" >>confdefs.h
fi
-
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for compiler support of C99 variadic macro style" >&5
-printf %s "checking for compiler support of C99 variadic macro style... " >&6; }
-if test ${curl_cv_variadic_macros_c99+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-#define c99_vmacro3(first, ...) fun3(first, __VA_ARGS__)
-#define c99_vmacro2(first, ...) fun2(first, __VA_ARGS__)
- int fun3(int arg1, int arg2, int arg3);
- int fun2(int arg1, int arg2);
- int fun3(int arg1, int arg2, int arg3)
- { return arg1 + arg2 + arg3; }
- int fun2(int arg1, int arg2)
- { return arg1 + arg2; }
-
-int main (void)
-{
-
- int res3 = c99_vmacro3(1, 2, 3);
- int res2 = c99_vmacro2(1, 2);
-
- ;
- return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"
-then :
-
- curl_cv_variadic_macros_c99="yes"
-
-else $as_nop
-
- curl_cv_variadic_macros_c99="no"
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
-
-fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $curl_cv_variadic_macros_c99" >&5
-printf "%s\n" "$curl_cv_variadic_macros_c99" >&6; }
- case "$curl_cv_variadic_macros_c99" in
- yes)
-
-printf "%s\n" "#define HAVE_VARIADIC_MACROS_C99 1" >>confdefs.h
-
- ;;
- esac
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for compiler support of old gcc variadic macro style" >&5
-printf %s "checking for compiler support of old gcc variadic macro style... " >&6; }
-if test ${curl_cv_variadic_macros_gcc+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-#define gcc_vmacro3(first, args...) fun3(first, args)
-#define gcc_vmacro2(first, args...) fun2(first, args)
- int fun3(int arg1, int arg2, int arg3);
- int fun2(int arg1, int arg2);
- int fun3(int arg1, int arg2, int arg3)
- { return arg1 + arg2 + arg3; }
- int fun2(int arg1, int arg2)
- { return arg1 + arg2; }
-
-int main (void)
-{
-
- int res3 = gcc_vmacro3(1, 2, 3);
- int res2 = gcc_vmacro2(1, 2);
-
- ;
- return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"
-then :
-
- curl_cv_variadic_macros_gcc="yes"
-
-else $as_nop
-
- curl_cv_variadic_macros_gcc="no"
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
-
-fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $curl_cv_variadic_macros_gcc" >&5
-printf "%s\n" "$curl_cv_variadic_macros_gcc" >&6; }
- case "$curl_cv_variadic_macros_gcc" in
- yes)
-
-printf "%s\n" "#define HAVE_VARIADIC_MACROS_GCC 1" >>confdefs.h
-
- ;;
- esac
-
ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
if test "x$ac_cv_type_size_t" = xyes
then :
@@ -33974,10 +34201,10 @@ else $as_nop
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
-#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
+#include <windows.h>
#endif
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -34066,7 +34293,9 @@ fi
;;
*)
+ oldcc=$CC
old=$LD_LIBRARY_PATH
+ CC="sh ./run-compiler"
LD_LIBRARY_PATH=$CURL_LIBRARY_PATH:$old
export LD_LIBRARY_PATH
if test "$cross_compiling" = yes
@@ -34100,6 +34329,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
LD_LIBRARY_PATH=$old # restore
+ CC=$oldcc
;;
esac
@@ -34406,6 +34636,57 @@ printf "%s\n" "#define SIZEOF_CURL_OFF_T $r" >>confdefs.h
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of curl_socket_t" >&5
+printf %s "checking size of curl_socket_t... " >&6; }
+ r=0
+ for typesize in 8 4 2 16 1; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/types.h>
+
+#include <curl/curl.h>
+
+
+int main (void)
+{
+switch(0) {
+ case 0:
+ case (sizeof(curl_socket_t) == $typesize):;
+ }
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+ r=$typesize
+else $as_nop
+
+ r=0
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ if test $r -gt 0; then
+ break;
+ fi
+ done
+ if test $r -eq 0; then
+ as_fn_error $? "Failed to find size of curl_socket_t" "$LINENO" 5
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $r" >&5
+printf "%s\n" "$r" >&6; }
+ tname=$(echo "ac_cv_sizeof_curl_socket_t" | tr A-Z a-z | tr " " "_")
+ eval "$tname=$r"
+
+
+printf "%s\n" "#define SIZEOF_CURL_SOCKET_T $r" >>confdefs.h
+
+
+
CPPFLAGS=$o
ac_fn_c_check_type "$LINENO" "long long" "ac_cv_type_long_long" "$ac_includes_default"
@@ -34419,21 +34700,8 @@ printf "%s\n" "#define HAVE_LONGLONG 1" >>confdefs.h
fi
-
if test ${ac_cv_sizeof_curl_off_t} -lt 8; then
-
-# Check whether --with-n64-deprecated was given.
-if test ${with_n64_deprecated+y}
-then :
- withval=$with_n64_deprecated; if test X"$withval" != Xno; then
- OPT_N64_AWARE=$withval
- fi
-
-fi
-
- if test -z "$OPT_N64_AWARE"; then
- as_fn_error $? "support for systems without 64 bit curl_off_t is deprecated, use --with-n64-deprecated until then" "$LINENO" 5
- fi
+ as_fn_error $? "64 bit curl_off_t is required" "$LINENO" 5
fi
# check for ssize_t
@@ -34540,8 +34808,10 @@ else $as_nop
#include <time.h>
#include <limits.h>
- time_t t = -1;
- return (t > 0);
+ int main(void) {
+ time_t t = -1;
+ return (t < 0);
+ }
_ACEOF
if ac_fn_c_try_run "$LINENO"
@@ -34563,7 +34833,9 @@ fi
;;
*)
+ oldcc=$CC
old=$LD_LIBRARY_PATH
+ CC="sh ./run-compiler"
LD_LIBRARY_PATH=$CURL_LIBRARY_PATH:$old
export LD_LIBRARY_PATH
if test "$cross_compiling" = yes
@@ -34577,8 +34849,10 @@ else $as_nop
#include <time.h>
#include <limits.h>
- time_t t = -1;
- return (t > 0);
+ int main(void) {
+ time_t t = -1;
+ return (t < 0);
+ }
_ACEOF
if ac_fn_c_try_run "$LINENO"
@@ -34599,6 +34873,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
LD_LIBRARY_PATH=$old # restore
+ CC=$oldcc
;;
esac
@@ -34694,10 +34969,10 @@ _EOF
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
-#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
+#include <windows.h>
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -34738,10 +35013,10 @@ else $as_nop
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
-#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
+#include <windows.h>
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -34803,10 +35078,10 @@ fi
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
-#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
+#include <windows.h>
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -34858,10 +35133,10 @@ printf %s "checking for select... " >&6; }
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
-#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
+#include <windows.h>
#endif
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -34943,10 +35218,10 @@ printf %s "checking for recv... " >&6; }
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
-#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
+#include <windows.h>
#else
$curl_includes_bsdsocket
#ifdef HAVE_SYS_TYPES_H
@@ -35019,10 +35294,10 @@ printf %s "checking for send... " >&6; }
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
-#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
+#include <windows.h>
#else
$curl_includes_bsdsocket
#ifdef HAVE_SYS_TYPES_H
@@ -35099,10 +35374,10 @@ else $as_nop
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
-#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
+#include <windows.h>
#else
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -35328,9 +35603,7 @@ curl_includes_string="\
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
-#ifdef HAVE_STRING_H
-# include <string.h>
-#endif
+#include <string.h>
#ifdef HAVE_STRINGS_H
# include <strings.h>
#endif
@@ -35342,13 +35615,6 @@ then :
printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h
fi
-ac_fn_c_check_header_compile "$LINENO" "string.h" "ac_cv_header_string_h" "$curl_includes_string
-"
-if test "x$ac_cv_header_string_h" = xyes
-then :
- printf "%s\n" "#define HAVE_STRING_H 1" >>confdefs.h
-
-fi
ac_fn_c_check_header_compile "$LINENO" "strings.h" "ac_cv_header_strings_h" "$curl_includes_string
"
if test "x$ac_cv_header_strings_h" = xyes
@@ -35877,155 +36143,6 @@ printf "%s\n" "no" >&6; }
fi
- #
- tst_links_connect="unknown"
- tst_proto_connect="unknown"
- tst_compi_connect="unknown"
- tst_allow_connect="unknown"
- #
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if connect can be linked" >&5
-printf %s "checking if connect can be linked... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
- $curl_includes_winsock2
- $curl_includes_bsdsocket
- $curl_includes_sys_socket
- $curl_includes_socket
-
-int main (void)
-{
-
- if(0 != connect(0, 0, 0))
- return 1;
-
- ;
- return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_link "$LINENO"
-then :
-
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
- tst_links_connect="yes"
-
-else $as_nop
-
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
- tst_links_connect="no"
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam \
- conftest$ac_exeext conftest.$ac_ext
- #
- if test "$tst_links_connect" = "yes"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if connect is prototyped" >&5
-printf %s "checking if connect is prototyped... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
- $curl_includes_winsock2
- $curl_includes_bsdsocket
- $curl_includes_sys_socket
- $curl_includes_socket
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "connect" >/dev/null 2>&1
-then :
-
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
- tst_proto_connect="yes"
-
-else $as_nop
-
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
- tst_proto_connect="no"
-
-fi
-rm -rf conftest*
-
- fi
- #
- if test "$tst_proto_connect" = "yes"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if connect is compilable" >&5
-printf %s "checking if connect is compilable... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
- $curl_includes_winsock2
- $curl_includes_bsdsocket
- $curl_includes_sys_socket
- $curl_includes_socket
-
-int main (void)
-{
-
- if(0 != connect(0, 0, 0))
- return 1;
-
- ;
- return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"
-then :
-
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
- tst_compi_connect="yes"
-
-else $as_nop
-
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
- tst_compi_connect="no"
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
- fi
- #
- if test "$tst_compi_connect" = "yes"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if connect usage allowed" >&5
-printf %s "checking if connect usage allowed... " >&6; }
- if test "x$curl_disallow_connect" != "xyes"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
- tst_allow_connect="yes"
- else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
- tst_allow_connect="no"
- fi
- fi
- #
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if connect might be used" >&5
-printf %s "checking if connect might be used... " >&6; }
- if test "$tst_links_connect" = "yes" &&
- test "$tst_proto_connect" = "yes" &&
- test "$tst_compi_connect" = "yes" &&
- test "$tst_allow_connect" = "yes"; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
-
-printf "%s\n" "#define HAVE_CONNECT 1" >>confdefs.h
-
- curl_cv_func_connect="yes"
- else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
- curl_cv_func_connect="no"
- fi
-
-
curl_includes_fcntl="\
/* includes start */
#ifdef HAVE_SYS_TYPES_H
@@ -36297,13 +36414,13 @@ curl_includes_ws2tcpip="\
# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# endif
-# include <windows.h>
# ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
# ifdef HAVE_WS2TCPIP_H
# include <ws2tcpip.h>
# endif
# endif
+# include <windows.h>
#endif
/* includes end */"
@@ -37038,9 +37155,7 @@ curl_includes_stdlib="\
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
-#ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
+#include <stdlib.h>
/* includes end */"
ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$curl_includes_stdlib
"
@@ -37049,13 +37164,6 @@ then :
printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h
fi
-ac_fn_c_check_header_compile "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$curl_includes_stdlib
-"
-if test "x$ac_cv_header_stdlib_h" = xyes
-then :
- printf "%s\n" "#define HAVE_STDLIB_H 1" >>confdefs.h
-
-fi
@@ -37244,7 +37352,9 @@ fi
;;
*)
+ oldcc=$CC
old=$LD_LIBRARY_PATH
+ CC="sh ./run-compiler"
LD_LIBRARY_PATH=$CURL_LIBRARY_PATH:$old
export LD_LIBRARY_PATH
if test "$cross_compiling" = yes
@@ -37309,6 +37419,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
LD_LIBRARY_PATH=$old # restore
+ CC=$oldcc
;;
esac
@@ -38801,7 +38912,9 @@ fi
;;
*)
+ oldcc=$CC
old=$LD_LIBRARY_PATH
+ CC="sh ./run-compiler"
LD_LIBRARY_PATH=$CURL_LIBRARY_PATH:$old
export LD_LIBRARY_PATH
if test "$cross_compiling" = yes
@@ -38852,6 +38965,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
LD_LIBRARY_PATH=$old # restore
+ CC=$oldcc
;;
esac
@@ -39093,7 +39207,9 @@ fi
;;
*)
+ oldcc=$CC
old=$LD_LIBRARY_PATH
+ CC="sh ./run-compiler"
LD_LIBRARY_PATH=$CURL_LIBRARY_PATH:$old
export LD_LIBRARY_PATH
if test "$cross_compiling" = yes
@@ -39144,6 +39260,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
LD_LIBRARY_PATH=$old # restore
+ CC=$oldcc
;;
esac
@@ -39450,7 +39567,9 @@ fi
;;
*)
+ oldcc=$CC
old=$LD_LIBRARY_PATH
+ CC="sh ./run-compiler"
LD_LIBRARY_PATH=$CURL_LIBRARY_PATH:$old
export LD_LIBRARY_PATH
if test "$cross_compiling" = yes
@@ -39543,6 +39662,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
LD_LIBRARY_PATH=$old # restore
+ CC=$oldcc
;;
esac
@@ -39792,7 +39912,9 @@ fi
;;
*)
+ oldcc=$CC
old=$LD_LIBRARY_PATH
+ CC="sh ./run-compiler"
LD_LIBRARY_PATH=$CURL_LIBRARY_PATH:$old
export LD_LIBRARY_PATH
if test "$cross_compiling" = yes
@@ -39878,6 +40000,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
LD_LIBRARY_PATH=$old # restore
+ CC=$oldcc
;;
esac
@@ -39918,6 +40041,359 @@ printf "%s\n" "no" >&6; }
fi
+curl_includes_stropts="\
+/* includes start */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+#ifdef HAVE_SYS_IOCTL_H
+# include <sys/ioctl.h>
+#endif
+#ifdef HAVE_STROPTS_H
+# include <stropts.h>
+#endif
+/* includes end */"
+ ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$curl_includes_stropts
+"
+if test "x$ac_cv_header_sys_types_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$curl_includes_stropts
+"
+if test "x$ac_cv_header_unistd_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$curl_includes_stropts
+"
+if test "x$ac_cv_header_sys_socket_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$curl_includes_stropts
+"
+if test "x$ac_cv_header_sys_ioctl_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "stropts.h" "ac_cv_header_stropts_h" "$curl_includes_stropts
+"
+if test "x$ac_cv_header_stropts_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_STROPTS_H 1" >>confdefs.h
+
+fi
+
+
+
+ #
+ tst_links_ioctl="unknown"
+ tst_proto_ioctl="unknown"
+ tst_compi_ioctl="unknown"
+ tst_allow_ioctl="unknown"
+ #
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctl can be linked" >&5
+printf %s "checking if ioctl can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define ioctl innocuous_ioctl
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef ioctl
+#ifdef __cplusplus
+extern "C"
+#endif
+char ioctl ();
+#if defined __stub_ioctl || defined __stub___ioctl
+choke me
+#endif
+
+int main (void)
+{
+return ioctl ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ tst_links_ioctl="yes"
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ tst_links_ioctl="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_ioctl" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctl is prototyped" >&5
+printf %s "checking if ioctl is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $curl_includes_stropts
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "ioctl" >/dev/null 2>&1
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ tst_proto_ioctl="yes"
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ tst_proto_ioctl="no"
+
+fi
+rm -rf conftest*
+
+ fi
+ #
+ if test "$tst_proto_ioctl" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctl is compilable" >&5
+printf %s "checking if ioctl is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_stropts
+
+int main (void)
+{
+
+ if(0 != ioctl(0, 0, 0))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ tst_compi_ioctl="yes"
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ tst_compi_ioctl="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_ioctl" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctl usage allowed" >&5
+printf %s "checking if ioctl usage allowed... " >&6; }
+ if test "x$curl_disallow_ioctl" != "xyes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ tst_allow_ioctl="yes"
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ tst_allow_ioctl="no"
+ fi
+ fi
+ #
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctl might be used" >&5
+printf %s "checking if ioctl might be used... " >&6; }
+ if test "$tst_links_ioctl" = "yes" &&
+ test "$tst_proto_ioctl" = "yes" &&
+ test "$tst_compi_ioctl" = "yes" &&
+ test "$tst_allow_ioctl" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+printf "%s\n" "#define HAVE_IOCTL 1" >>confdefs.h
+
+ curl_cv_func_ioctl="yes"
+
+ #
+ tst_compi_ioctl_fionbio="unknown"
+ tst_allow_ioctl_fionbio="unknown"
+ #
+ if test "$curl_cv_func_ioctl" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctl FIONBIO is compilable" >&5
+printf %s "checking if ioctl FIONBIO is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_stropts
+
+int main (void)
+{
+
+ int flags = 0;
+ if(0 != ioctl(0, FIONBIO, &flags))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ tst_compi_ioctl_fionbio="yes"
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ tst_compi_ioctl_fionbio="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_ioctl_fionbio" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctl FIONBIO usage allowed" >&5
+printf %s "checking if ioctl FIONBIO usage allowed... " >&6; }
+ if test "x$curl_disallow_ioctl_fionbio" != "xyes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ tst_allow_ioctl_fionbio="yes"
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ tst_allow_ioctl_fionbio="no"
+ fi
+ fi
+ #
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctl FIONBIO might be used" >&5
+printf %s "checking if ioctl FIONBIO might be used... " >&6; }
+ if test "$tst_compi_ioctl_fionbio" = "yes" &&
+ test "$tst_allow_ioctl_fionbio" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+printf "%s\n" "#define HAVE_IOCTL_FIONBIO 1" >>confdefs.h
+
+ curl_cv_func_ioctl_fionbio="yes"
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ curl_cv_func_ioctl_fionbio="no"
+ fi
+
+
+ #
+ tst_compi_ioctl_siocgifaddr="unknown"
+ tst_allow_ioctl_siocgifaddr="unknown"
+ #
+ if test "$curl_cv_func_ioctl" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctl SIOCGIFADDR is compilable" >&5
+printf %s "checking if ioctl SIOCGIFADDR is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $curl_includes_stropts
+ #include <net/if.h>
+
+int main (void)
+{
+
+ struct ifreq ifr;
+ if(0 != ioctl(0, SIOCGIFADDR, &ifr))
+ return 1;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ tst_compi_ioctl_siocgifaddr="yes"
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ tst_compi_ioctl_siocgifaddr="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_ioctl_siocgifaddr" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctl SIOCGIFADDR usage allowed" >&5
+printf %s "checking if ioctl SIOCGIFADDR usage allowed... " >&6; }
+ if test "x$curl_disallow_ioctl_siocgifaddr" != "xyes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ tst_allow_ioctl_siocgifaddr="yes"
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ tst_allow_ioctl_siocgifaddr="no"
+ fi
+ fi
+ #
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctl SIOCGIFADDR might be used" >&5
+printf %s "checking if ioctl SIOCGIFADDR might be used... " >&6; }
+ if test "$tst_compi_ioctl_siocgifaddr" = "yes" &&
+ test "$tst_allow_ioctl_siocgifaddr" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+printf "%s\n" "#define HAVE_IOCTL_SIOCGIFADDR 1" >>confdefs.h
+
+ curl_cv_func_ioctl_siocgifaddr="yes"
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ curl_cv_func_ioctl_siocgifaddr="no"
+ fi
+
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ curl_cv_func_ioctl="no"
+ fi
+
+
#
tst_links_ioctlsocket="unknown"
tst_proto_ioctlsocket="unknown"
@@ -40716,7 +41192,9 @@ fi
;;
*)
+ oldcc=$CC
old=$LD_LIBRARY_PATH
+ CC="sh ./run-compiler"
LD_LIBRARY_PATH=$CURL_LIBRARY_PATH:$old
export LD_LIBRARY_PATH
if test "$cross_compiling" = yes
@@ -40779,6 +41257,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
LD_LIBRARY_PATH=$old # restore
+ CC=$oldcc
;;
esac
@@ -40824,9 +41303,7 @@ curl_includes_signal="\
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
-#ifdef HAVE_SIGNAL_H
-# include <signal.h>
-#endif
+#include <signal.h>
/* includes end */"
ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$curl_includes_signal
"
@@ -40835,13 +41312,6 @@ then :
printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h
fi
-ac_fn_c_check_header_compile "$LINENO" "signal.h" "ac_cv_header_signal_h" "$curl_includes_signal
-"
-if test "x$ac_cv_header_signal_h" = xyes
-then :
- printf "%s\n" "#define HAVE_SIGNAL_H 1" >>confdefs.h
-
-fi
@@ -41300,9 +41770,7 @@ curl_includes_setjmp="\
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
-#ifdef HAVE_SETJMP_H
-# include <setjmp.h>
-#endif
+#include <setjmp.h>
/* includes end */"
ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$curl_includes_setjmp
"
@@ -41311,13 +41779,6 @@ then :
printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h
fi
-ac_fn_c_check_header_compile "$LINENO" "setjmp.h" "ac_cv_header_setjmp_h" "$curl_includes_setjmp
-"
-if test "x$ac_cv_header_setjmp_h" = xyes
-then :
- printf "%s\n" "#define HAVE_SETJMP_H 1" >>confdefs.h
-
-fi
@@ -42494,7 +42955,9 @@ fi
;;
*)
+ oldcc=$CC
old=$LD_LIBRARY_PATH
+ CC="sh ./run-compiler"
LD_LIBRARY_PATH=$CURL_LIBRARY_PATH:$old
export LD_LIBRARY_PATH
if test "$cross_compiling" = yes
@@ -42548,6 +43011,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
LD_LIBRARY_PATH=$old # restore
+ CC=$oldcc
;;
esac
@@ -42660,7 +43124,9 @@ fi
;;
*)
+ oldcc=$CC
old=$LD_LIBRARY_PATH
+ CC="sh ./run-compiler"
LD_LIBRARY_PATH=$CURL_LIBRARY_PATH:$old
export LD_LIBRARY_PATH
if test "$cross_compiling" = yes
@@ -42714,6 +43180,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
LD_LIBRARY_PATH=$old # restore
+ CC=$oldcc
;;
esac
@@ -43346,8 +43813,7 @@ fi
-
- for ac_func in fnmatch fchmod geteuid getpass_r getppid getpwuid getpwuid_r getrlimit gettimeofday if_nametoindex mach_absolute_time pipe sched_yield sendmsg setlocale setmode setrlimit snprintf utime utimes
+ for ac_func in _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
do :
as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -43406,6 +43872,15 @@ fi
done
+ac_fn_check_decl "$LINENO" "fseeko" "ac_cv_have_decl_fseeko" "#include <stdio.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_fseeko" = xyes
+then :
+
+printf "%s\n" "#define HAVE_DECL_FSEEKO 1" >>confdefs.h
+
+fi
+
#
tst_method="unknown"
@@ -44294,19 +44769,145 @@ printf "%s\n" "no" >&6; }
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable cryptographic authentication methods" >&5
-printf %s "checking whether to enable cryptographic authentication methods... " >&6; }
-# Check whether --enable-crypto-auth was given.
-if test ${enable_crypto_auth+y}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable basic authentication method" >&5
+printf %s "checking whether to enable basic authentication method... " >&6; }
+# Check whether --enable-basic-auth was given.
+if test ${enable_basic_auth+y}
+then :
+ enableval=$enable_basic_auth; case "$enableval" in
+ no)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+printf "%s\n" "#define CURL_DISABLE_BASIC_AUTH 1" >>confdefs.h
+
+ CURL_DISABLE_BASIC_AUTH=1
+ ;;
+ *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ ;;
+ esac
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+fi
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable bearer authentication method" >&5
+printf %s "checking whether to enable bearer authentication method... " >&6; }
+# Check whether --enable-bearer-auth was given.
+if test ${enable_bearer_auth+y}
+then :
+ enableval=$enable_bearer_auth; case "$enableval" in
+ no)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+printf "%s\n" "#define CURL_DISABLE_BEARER_AUTH 1" >>confdefs.h
+
+ CURL_DISABLE_BEARER_AUTH=1
+ ;;
+ *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ ;;
+ esac
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+fi
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable digest authentication method" >&5
+printf %s "checking whether to enable digest authentication method... " >&6; }
+# Check whether --enable-digest-auth was given.
+if test ${enable_digest_auth+y}
+then :
+ enableval=$enable_digest_auth; case "$enableval" in
+ no)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+printf "%s\n" "#define CURL_DISABLE_DIGEST_AUTH 1" >>confdefs.h
+
+ CURL_DISABLE_DIGEST_AUTH=1
+ ;;
+ *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ ;;
+ esac
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+fi
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable kerberos authentication method" >&5
+printf %s "checking whether to enable kerberos authentication method... " >&6; }
+# Check whether --enable-kerberos-auth was given.
+if test ${enable_kerberos_auth+y}
+then :
+ enableval=$enable_kerberos_auth; case "$enableval" in
+ no)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+printf "%s\n" "#define CURL_DISABLE_KERBEROS_AUTH 1" >>confdefs.h
+
+ CURL_DISABLE_KERBEROS_AUTH=1
+ ;;
+ *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ ;;
+ esac
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+fi
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable negotiate authentication method" >&5
+printf %s "checking whether to enable negotiate authentication method... " >&6; }
+# Check whether --enable-negotiate-auth was given.
+if test ${enable_negotiate_auth+y}
+then :
+ enableval=$enable_negotiate_auth; case "$enableval" in
+ no)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+printf "%s\n" "#define CURL_DISABLE_NEGOTIATE_AUTH 1" >>confdefs.h
+
+ CURL_DISABLE_NEGOTIATE_AUTH=1
+ ;;
+ *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ ;;
+ esac
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+fi
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable aws sig methods" >&5
+printf %s "checking whether to enable aws sig methods... " >&6; }
+# Check whether --enable-aws was given.
+if test ${enable_aws+y}
then :
- enableval=$enable_crypto_auth; case "$enableval" in
+ enableval=$enable_aws; case "$enableval" in
no)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
-printf "%s\n" "#define CURL_DISABLE_CRYPTO_AUTH 1" >>confdefs.h
+printf "%s\n" "#define CURL_DISABLE_AWS 1" >>confdefs.h
- CURL_DISABLE_CRYPTO_AUTH=1
+ CURL_DISABLE_AWS=1
;;
*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
@@ -44376,6 +44977,8 @@ printf %s "checking whether to enable NTLM delegation to winbind's helper... " >
test "x$SSL_ENABLED" = "x"; then
want_ntlm_wb_file=""
want_ntlm_wb="no"
+ elif test "x$ac_cv_func_fork" != "xyes"; then
+ want_ntlm_wb="no"
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $want_ntlm_wb" >&5
printf "%s\n" "$want_ntlm_wb" >&6; }
@@ -44599,6 +45202,65 @@ printf "%s\n" "yes" >&6; }
fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to support binding connections locally" >&5
+printf %s "checking whether to support binding connections locally... " >&6; }
+# Check whether --enable-bindlocal was given.
+if test ${enable_bindlocal+y}
+then :
+ enableval=$enable_bindlocal; case "$enableval" in
+ no)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+printf "%s\n" "#define CURL_DISABLE_BINDLOCAL 1" >>confdefs.h
+
+ ;;
+ *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ ;;
+ esac
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+fi
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to support the form API" >&5
+printf %s "checking whether to support the form API... " >&6; }
+# Check whether --enable-form-api was given.
+if test ${enable_form_api+y}
+then :
+ enableval=$enable_form_api; case "$enableval" in
+ no) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+printf "%s\n" "#define CURL_DISABLE_FORM_API 1" >>confdefs.h
+
+ ;;
+ *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ test "$enable_mime" = no &&
+ as_fn_error $? "MIME support needs to be enabled in order to enable form API support" "$LINENO" 5
+ ;;
+ esac
+else $as_nop
+
+ if test "$enable_mime" = no; then
+ enable_form_api=no
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+printf "%s\n" "#define CURL_DISABLE_FORM_API 1" >>confdefs.h
+
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ fi
+
+fi
+
+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to support date parsing" >&5
printf %s "checking whether to support date parsing... " >&6; }
# Check whether --enable-dateparse was given.
@@ -44771,7 +45433,6 @@ fi
if test -n "$SSL_ENABLED"; then
-
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to support HSTS" >&5
printf %s "checking whether to support HSTS... " >&6; }
# Check whether --enable-hsts was given.
@@ -44841,6 +45502,16 @@ printf "%s\n" "$ECH_SUPPORT" >&6; }
fi
fi
+if test "x$OPENSSL_ENABLED" = "x1"; then
+ ac_fn_c_check_func "$LINENO" "SSL_set0_wbio" "ac_cv_func_SSL_set0_wbio"
+if test "x$ac_cv_func_SSL_set0_wbio" = xyes
+then :
+ printf "%s\n" "#define HAVE_SSL_SET0_WBIO 1" >>confdefs.h
+
+fi
+
+fi
+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to support WebSockets" >&5
printf %s "checking whether to support WebSockets... " >&6; }
# Check whether --enable-websockets was given.
@@ -44940,6 +45611,8 @@ else
fi
+rm $compilersh
+
if test "x$OPENSSL_ENABLED" = "x1"; then
SUPPORT_FEATURES="$SUPPORT_FEATURES SSL"
@@ -44991,22 +45664,21 @@ if test "x$hsts" = "xyes"; then
SUPPORT_FEATURES="$SUPPORT_FEATURES HSTS"
fi
-if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" -a \
+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_CRYPTO_AUTH" != "x1" -a \
+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_CRYPTO_AUTH" != "x1" -a \
- "x$CURL_DISABLE_NTLM" != "x1"; then
+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$NSS_ENABLED" = "x1" \
+ -o "x$GNUTLS_ENABLED" = "x1" \
-o "x$SECURETRANSPORT_ENABLED" = "x1" \
-o "x$USE_WIN32_CRYPTO" = "x1" \
-o "x$WOLFSSL_NTLM" = "x1"; then
@@ -45028,7 +45700,7 @@ if test "x$USE_TLS_SRP" = "x1"; then
SUPPORT_FEATURES="$SUPPORT_FEATURES TLS-SRP"
fi
-if test "x$USE_NGHTTP2" = "x1" -o "x$USE_HYPER" = "x1"; then
+if test "x$USE_NGHTTP2" = "x1"; then
SUPPORT_FEATURES="$SUPPORT_FEATURES HTTP2"
fi
@@ -45041,11 +45713,36 @@ if test "x$CURL_WITH_MULTI_SSL" = "x1"; then
SUPPORT_FEATURES="$SUPPORT_FEATURES MultiSSL"
fi
-if test "x$https_proxy" != "xno"; then
- if test "x$OPENSSL_ENABLED" = "x1" -o "x$GNUTLS_ENABLED" = "x1" \
- -o "x$NSS_ENABLED" = "x1"; then
- SUPPORT_FEATURES="$SUPPORT_FEATURES HTTPS-proxy"
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if this build supports HTTPS-proxy" >&5
+printf %s "checking if this build supports HTTPS-proxy... " >&6; }
+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"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ elif test "x$WOLFSSL_ENABLED" = "x1" -a "x$WOLFSSL_FULL_BIO" = "x1"; then
+ SUPPORT_FEATURES="$SUPPORT_FEATURES HTTPS-proxy"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ fi
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
fi
if test "x$ECH_ENABLED" = "x1"; then
@@ -45061,6 +45758,9 @@ 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
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -45371,7 +46071,7 @@ if test "x$want_curldebug_assumed" = "xyes" &&
ac_configure_args="$ac_configure_args --enable-curldebug"
fi
-ac_config_files="$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/certs/Makefile tests/certs/scripts/Makefile tests/data/Makefile tests/server/Makefile tests/libtest/Makefile tests/unit/Makefile packages/Makefile packages/vms/Makefile curl-config libcurl.pc"
+ac_config_files="$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"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -45542,8 +46242,8 @@ if test -z "${DOING_NATIVE_WINDOWS_TRUE}" && test -z "${DOING_NATIVE_WINDOWS_FAL
as_fn_error $? "conditional \"DOING_NATIVE_WINDOWS\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${OS_WINDOWS_TRUE}" && test -z "${OS_WINDOWS_FALSE}"; then
- as_fn_error $? "conditional \"OS_WINDOWS\" was never defined.
+if test -z "${HAVE_WINDRES_TRUE}" && test -z "${HAVE_WINDRES_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_WINDRES\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${HAVE_LIBZ_TRUE}" && test -z "${HAVE_LIBZ_FALSE}"; then
@@ -46539,12 +47239,16 @@ do
"lib/libcurl.vers") CONFIG_FILES="$CONFIG_FILES lib/libcurl.vers" ;;
"lib/libcurl.plist") CONFIG_FILES="$CONFIG_FILES lib/libcurl.plist" ;;
"tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+ "tests/config") CONFIG_FILES="$CONFIG_FILES tests/config" ;;
"tests/certs/Makefile") CONFIG_FILES="$CONFIG_FILES tests/certs/Makefile" ;;
"tests/certs/scripts/Makefile") CONFIG_FILES="$CONFIG_FILES tests/certs/scripts/Makefile" ;;
"tests/data/Makefile") CONFIG_FILES="$CONFIG_FILES tests/data/Makefile" ;;
"tests/server/Makefile") CONFIG_FILES="$CONFIG_FILES tests/server/Makefile" ;;
"tests/libtest/Makefile") CONFIG_FILES="$CONFIG_FILES tests/libtest/Makefile" ;;
"tests/unit/Makefile") CONFIG_FILES="$CONFIG_FILES tests/unit/Makefile" ;;
+ "tests/http/config.ini") CONFIG_FILES="$CONFIG_FILES tests/http/config.ini" ;;
+ "tests/http/Makefile") CONFIG_FILES="$CONFIG_FILES tests/http/Makefile" ;;
+ "tests/http/clients/Makefile") CONFIG_FILES="$CONFIG_FILES tests/http/clients/Makefile" ;;
"packages/Makefile") CONFIG_FILES="$CONFIG_FILES packages/Makefile" ;;
"packages/vms/Makefile") CONFIG_FILES="$CONFIG_FILES packages/vms/Makefile" ;;
"curl-config") CONFIG_FILES="$CONFIG_FILES curl-config" ;;
@@ -48002,111 +48706,6 @@ use vars qw(
_EOF
-
-## ---------------------------------- ##
-## Start of distclean amending code ##
-## ---------------------------------- ##
-
-for xc_subdir in lib src tests/unit tests/server tests/libtest docs/examples
-do
-
-if test ! -f "$xc_subdir/Makefile"; then
- echo "$xc_msg_err $xc_subdir/Makefile file not found. $xc_msg_abrt" >&2
- exit 1
-fi
-
-# Fetch dependency tracking file list from Makefile include lines.
-
-xc_inc_lines=`grep '^include .*(DEPDIR)' "$xc_subdir/Makefile" 2>/dev/null`
-xc_cnt_words=`echo "$xc_inc_lines" | wc -w | tr -d "$xc_space$xc_tab"`
-
-# --disable-dependency-tracking might have been used, consequently
-# there is nothing to amend without a dependency tracking file list.
-
-if test $xc_cnt_words -gt 0; then
-
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: amending $xc_subdir/Makefile" >&5
-printf "%s\n" "$as_me: amending $xc_subdir/Makefile" >&6;}
-
-# Build Makefile specific patch hunk.
-
-xc_p="$xc_subdir/xc_patch.tmp"
-
-xc_rm_depfiles=`echo "$xc_inc_lines" \
- | $SED 's%include% -rm -f%' 2>/dev/null`
-
-xc_dep_subdirs=`echo "$xc_inc_lines" \
- | $SED 's%include[ ][ ]*%%' 2>/dev/null \
- | $SED 's%(DEPDIR)/.*%(DEPDIR)%' 2>/dev/null \
- | sort | uniq`
-
-echo "$xc_rm_depfiles" >$xc_p
-
-for xc_dep_dir in $xc_dep_subdirs; do
- echo "${xc_tab}@xm_dep_cnt=\`ls $xc_dep_dir | wc -l 2>/dev/null\`; \\" >>$xc_p
- echo "${xc_tab}if test \$\$xm_dep_cnt -eq 0 && test -d $xc_dep_dir; then \\" >>$xc_p
- echo "${xc_tab} rm -rf $xc_dep_dir; \\" >>$xc_p
- echo "${xc_tab}fi" >>$xc_p
-done
-
-# Build Makefile patching sed scripts.
-
-xc_s1="$xc_subdir/xc_script_1.tmp"
-xc_s2="$xc_subdir/xc_script_2.tmp"
-xc_s3="$xc_subdir/xc_script_3.tmp"
-
-cat >$xc_s1 <<\_EOT
-/^distclean[ ]*:/,/^[^ ][^ ]*:/{
- s/^.*(DEPDIR)/___xc_depdir_line___/
-}
-/^maintainer-clean[ ]*:/,/^[^ ][^ ]*:/{
- s/^.*(DEPDIR)/___xc_depdir_line___/
-}
-_EOT
-
-cat >$xc_s2 <<\_EOT
-/___xc_depdir_line___$/{
- N
- /___xc_depdir_line___$/D
-}
-_EOT
-
-cat >$xc_s3 <<_EOT
-/^___xc_depdir_line___/{
- r $xc_p
- d
-}
-_EOT
-
-# Apply patch to Makefile and cleanup.
-
-$SED -f "$xc_s1" "$xc_subdir/Makefile" >"$xc_subdir/Makefile.tmp1"
-$SED -f "$xc_s2" "$xc_subdir/Makefile.tmp1" >"$xc_subdir/Makefile.tmp2"
-$SED -f "$xc_s3" "$xc_subdir/Makefile.tmp2" >"$xc_subdir/Makefile.tmp3"
-
-if test -f "$xc_subdir/Makefile.tmp3"; then
- mv -f "$xc_subdir/Makefile.tmp3" "$xc_subdir/Makefile"
-fi
-
-test -f "$xc_subdir/Makefile.tmp1" && rm -f "$xc_subdir/Makefile.tmp1"
-test -f "$xc_subdir/Makefile.tmp2" && rm -f "$xc_subdir/Makefile.tmp2"
-test -f "$xc_subdir/Makefile.tmp3" && rm -f "$xc_subdir/Makefile.tmp3"
-
-test -f "$xc_p" && rm -f "$xc_p"
-test -f "$xc_s1" && rm -f "$xc_s1"
-test -f "$xc_s2" && rm -f "$xc_s2"
-test -f "$xc_s3" && rm -f "$xc_s3"
-
-fi
-
-done
-
-## -------------------------------- ##
-## End of distclean amending code ##
-## -------------------------------- ##
-
-
-
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Configured to build curl/libcurl:
Host setup: ${host}
diff --git a/configure.ac b/configure.ac
index 445b3f904..d9b396376 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -33,7 +33,7 @@ XC_OVR_ZZ60
CURL_OVERRIDE_AUTOCONF
dnl configure script copyright
-AC_COPYRIGHT([Copyright (c) 1998 - 2022 Daniel Stenberg, <daniel@haxx.se>
+AC_COPYRIGHT([Copyright (C) Daniel Stenberg, <daniel@haxx.se>
This configure script may be copied, distributed and modified under the
terms of the curl license; see COPYING for more details])
@@ -147,7 +147,7 @@ AC_SUBST(PKGADD_VENDOR)
dnl
dnl initialize all the info variables
- curl_ssl_msg="no (--with-{openssl,gnutls,nss,mbedtls,wolfssl,schannel,secure-transport,amissl,bearssl,rustls} )"
+ 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)"
@@ -174,8 +174,8 @@ curl_headers_msg="enabled (--disable-headers-api)"
curl_ws_msg="no (--enable-websockets)"
ssl_backends=
curl_h1_msg="enabled (internal)"
- curl_h2_msg="no (--with-nghttp2, --with-hyper)"
- curl_h3_msg="no (--with-ngtcp2, --with-quiche --with-msh3)"
+ curl_h2_msg="no (--with-nghttp2)"
+ curl_h3_msg="no (--with-ngtcp2 --with-nghttp3, --with-quiche, --with-msh3)"
enable_altsvc="yes"
hsts="yes"
@@ -186,6 +186,25 @@ 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
@@ -279,27 +298,100 @@ AS_HELP_STRING([--with-rustls=PATH],[where to look for rustls, PATH points to th
fi
])
-OPT_NSS_AWARE=no
-AC_ARG_WITH(nss-deprecated,dnl
-AS_HELP_STRING([--with-nss-deprecated],[confirm you realize NSS is going away]),
- if test X"$withval" != Xno; then
- OPT_NSS_AWARE=$withval
+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)
-OPT_NSS=no
-AC_ARG_WITH(nss,dnl
-AS_HELP_STRING([--with-nss=PATH],[where to look for NSS, PATH points to the installation root]),
- OPT_NSS=$withval
- if test X"$withval" != Xno; then
-
- if test X"$OPT_NSS_AWARE" = "Xno" ; then
- AC_MSG_ERROR([NSS use must be confirmed using --with-nss-deprecated. NSS support will be dropped from curl in August 2022. See docs/DEPRECATE.md])
+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
-
- [TLSCHOICE="${TLSCHOICE:+$TLSCHOICE, }NSS"]
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.
@@ -313,7 +405,6 @@ Select from these:
--with-bearssl
--with-gnutls
--with-mbedtls
- --with-nss
--with-openssl (also works for BoringSSL and libressl)
--with-rustls
--with-schannel
@@ -324,7 +415,7 @@ Select from these:
fi
AC_ARG_WITH(darwinssl,,
- AC_MSG_ERROR([--with-darwin-ssl no longer works!]))
+ AC_MSG_ERROR([--with-darwin-ssl and --without-darwin-ssl no longer work!]))
dnl
dnl Detect the canonical host and target build environment
@@ -488,54 +579,6 @@ else
fi
AM_CONDITIONAL(BUILD_UNITTESTS, test x$want_unittests = xyes)
-# For original MinGW (ie not MinGW-w64) define the Windows minimum supported OS
-# version to Windows XP (0x501) if it hasn't already been defined by the user.
-# Without this override original MinGW defaults the version to Windows NT 4.0.
-# Note original MinGW sets _WIN32_WINNT if not defined to whatever WINVER is.
-case $host in
- *-*-mingw32*)
- AC_MSG_CHECKING([if MinGW minimum supported OS should be set to XP])
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([[
-#include <_mingw.h>
- ]],[[
-#if defined(__MINGW64_VERSION_MAJOR) || \
- defined(WINVER) || \
- defined(_WIN32_WINNT)
-#error
-#endif
- ]])
- ],[
- CPPFLAGS="$CPPFLAGS -DWINVER=0x501"
- AC_MSG_RESULT([yes])
- ],[
- AC_MSG_RESULT([no])
- ])
- ;;
-esac
-
-# Detect original MinGW (not MinGW-w64)
-curl_mingw_original=no
-case $host in
- *-*-mingw32*)
- AC_MSG_CHECKING([using original MinGW (not MinGW-w64)])
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([[
-#include <_mingw.h>
- ]],[[
-#if defined(__MINGW64_VERSION_MAJOR)
-#error
-#endif
- ]])
- ],[
- curl_mingw_original=yes
- AC_MSG_RESULT([yes])
- ],[
- AC_MSG_RESULT([no])
- ])
- ;;
-esac
-
dnl **********************************************************************
dnl Compilation based checks should not be done before this point.
dnl **********************************************************************
@@ -553,14 +596,10 @@ case X-"$curl_cv_native_windows" in
X-yes)
CURL_CHECK_HEADER_WINSOCK2
CURL_CHECK_HEADER_WS2TCPIP
- CURL_CHECK_HEADER_WINCRYPT
- CURL_CHECK_HEADER_WINLDAP
;;
*)
curl_cv_header_winsock2_h="no"
curl_cv_header_ws2tcpip_h="no"
- curl_cv_header_wincrypt_h="no"
- curl_cv_header_winldap_h="no"
;;
esac
CURL_CHECK_WIN32_LARGEFILE
@@ -570,7 +609,13 @@ CURL_DARWIN_CFLAGS
CURL_DARWIN_SYSTEMCONFIGURATION
CURL_SUPPORTS_BUILTIN_AVAILABLE
-AM_CONDITIONAL([OS_WINDOWS], [test "$curl_cv_native_windows" = "yes"])
+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
@@ -758,7 +803,6 @@ if test X"$want_hyper" != Xno; then
experimental="$experimental Hyper"
AC_MSG_NOTICE([Hyper support is experimental])
curl_h1_msg="enabled (Hyper)"
- curl_h2_msg=$curl_h1_msg
HYPER_ENABLED=1
AC_DEFINE(USE_HYPER, 1, [if hyper is in use])
AC_SUBST(USE_HYPER, [1])
@@ -781,13 +825,11 @@ 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]),
+AS_HELP_STRING([--enable-rtsp],[Enable RTSP support])
+AS_HELP_STRING([--disable-rtsp],[Disable RTSP support]),
[ case "$enableval" in
no)
AC_MSG_RESULT(no)
@@ -1102,13 +1144,13 @@ then
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
-#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
+#include <windows.h>
#endif
]],[[
- gethostbyname("www.dummysite.com");
+ gethostbyname("localhost");
]])
],[
AC_MSG_RESULT([yes])
@@ -1131,7 +1173,7 @@ then
/* Older Minix versions may need <net/gen/netdb.h> here instead */
#include <netdb.h>
]],[[
- gethostbyname("www.dummysite.com");
+ gethostbyname("localhost");
]])
],[
AC_MSG_RESULT([yes])
@@ -1150,7 +1192,7 @@ then
#include <stdio.h>
#include <netdb.h>
]],[[
- gethostbyname("www.dummysite.com");
+ gethostbyname("localhost");
]])
],[
AC_MSG_RESULT([yes])
@@ -1174,7 +1216,7 @@ then
struct Library *SocketBase = NULL;
#endif
]],[[
- gethostbyname("www.dummysite.com");
+ gethostbyname("localhost");
]])
],[
AC_MSG_RESULT([yes])
@@ -1210,6 +1252,9 @@ 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
@@ -1244,9 +1289,14 @@ else
CURL_CHECK_PKGCONFIG(zlib)
if test "$PKGCONFIG" != "no" ; then
- LIBS="`$PKGCONFIG --libs-only-l zlib` $LIBS"
- LDFLAGS="$LDFLAGS `$PKGCONFIG --libs-only-L zlib`"
- CPPFLAGS="$CPPFLAGS `$PKGCONFIG --cflags-only-I zlib`"
+ 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
@@ -1259,7 +1309,8 @@ else
AC_CHECK_LIB(z, inflateEnd,
dnl libz found, set the variable
[HAVE_LIBZ="1"
- LIBS="-lz $LIBS"],
+ ZLIB_LIBS="-lz"
+ LIBS="$ZLIB_LIBS $LIBS"],
dnl if no lib found, try /usr/local
[OPT_ZLIB="/usr/local"])
fi
@@ -1281,7 +1332,8 @@ else
[
dnl the lib was found!
HAVE_LIBZ="1"
- LIBS="-lz $LIBS"
+ ZLIB_LIBS="-lz"
+ LIBS="$ZLIB_LIBS $LIBS"
],
[ CPPFLAGS=$clean_CPPFLAGS
LDFLAGS=$clean_LDFLAGS])
@@ -1300,20 +1352,20 @@ else
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])
-
- ZLIB_LIBS="-lz"
- LIBS="-lz $clean_LIBS"
+ LIBS="$ZLIB_LIBS $clean_LIBS"
dnl replace 'HAVE_LIBZ' in the automake makefile.ams
AMFIXLIB="1"
@@ -1574,16 +1626,19 @@ if test x$CURL_DISABLE_LDAP != x1 ; then
fi
if test x$CURL_DISABLE_LDAP != x1 ; then
- AC_CHECK_FUNCS([ldap_url_parse])
+ 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
- curl_ldap_msg="enabled (OpenLDAP)"
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
@@ -1680,9 +1735,17 @@ 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
@@ -1948,7 +2011,6 @@ CURL_WITH_MBEDTLS
CURL_WITH_WOLFSSL
CURL_WITH_BEARSSL
CURL_WITH_RUSTLS
-CURL_WITH_NSS
dnl link required libraries for USE_WIN32_CRYPTO or USE_SCHANNEL
if test "x$USE_WIN32_CRYPTO" = "x1" -o "x$USE_SCHANNEL" = "x1"; then
@@ -1956,16 +2018,15 @@ if test "x$USE_WIN32_CRYPTO" = "x1" -o "x$USE_SCHANNEL" = "x1"; then
fi
dnl link bcrypt for BCryptGenRandom() (used when building for Vista or newer)
-if test "x$curl_cv_native_windows" = "xyes" &&
- test "x$curl_mingw_original" = "xno"; then
+if test "x$curl_cv_native_windows" = "xyes"; then
LIBS="-lbcrypt $LIBS"
fi
-case "x$SSL_DISABLED$OPENSSL_ENABLED$GNUTLS_ENABLED$NSS_ENABLED$MBEDTLS_ENABLED$WOLFSSL_ENABLED$SCHANNEL_ENABLED$SECURETRANSPORT_ENABLED$BEARSSL_ENABLED$RUSTLS_ENABLED"
+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-nss, --with-schannel, --with-secure-transport, --with-amissl, --with-bearssl or --with-rustls to address this.])
+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
@@ -1978,7 +2039,7 @@ xD)
;;
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-nss, --with-schannel, --with-secure-transport, --with-amissl, --with-bearssl, --with-rustls).
+(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.])
;;
*)
@@ -2061,7 +2122,7 @@ fi
AM_CONDITIONAL([USE_GSASL], [test "$curl_gsasl_msg" = "enabled"])
AC_ARG_WITH(libmetalink,,
- AC_MSG_ERROR([--with-libmetalink no longer works!]))
+ AC_MSG_ERROR([--with-libmetalink and --without-libmetalink no longer work!]))
dnl **********************************************************************
dnl Check for the presence of LIBSSH2 libraries and headers
@@ -2099,7 +2160,7 @@ if test X"$OPT_LIBSSH2" != Xno; then
CURL_CHECK_PKGCONFIG(libssh2)
if test "$PKGCONFIG" != "no" ; then
- LIB_SSH2=`$PKGCONFIG --libs libssh2`
+ 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`
@@ -2361,8 +2422,6 @@ AS_HELP_STRING([--disable-versioned-symbols], [Disable versioned symbols in shar
versioned_symbols_flavour="OPENSSL_"
elif test "x$GNUTLS_ENABLED" = "x1"; then
versioned_symbols_flavour="GNUTLS_"
- elif test "x$NSS_ENABLED" = "x1"; then
- versioned_symbols_flavour="NSS_"
elif test "x$WOLFSSL_ENABLED" = "x1"; then
versioned_symbols_flavour="WOLFSSL_"
elif test "x$SCHANNEL_ENABLED" = "x1"; then
@@ -2479,7 +2538,6 @@ if test "$want_winidn" = "yes"; then
#
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_DEFINE(WANT_IDN_PROTOTYPES, 1, [Define to 1 to provide own prototypes.])
AC_SUBST([IDN_ENABLED], [1])
curl_idn_msg="enabled (Windows-native)"
else
@@ -2685,15 +2743,17 @@ if test X"$want_nghttp2" != Xno; 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_set_local_window_size to require nghttp2
- # >= 1.12.0
- AC_CHECK_LIB(nghttp2, nghttp2_session_set_local_window_size,
+ # 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)"
@@ -2803,42 +2863,42 @@ if test X"$want_tcp2" != Xno; then
fi
if test "x$NGTCP2_ENABLED" = "x1" -a "x$OPENSSL_ENABLED" = "x1"; then
- dnl backup the pre-ngtcp2_crypto_openssl variables
+ dnl backup the pre-ngtcp2_crypto_quictls variables
CLEANLDFLAGS="$LDFLAGS"
CLEANCPPFLAGS="$CPPFLAGS"
CLEANLIBS="$LIBS"
- CURL_CHECK_PKGCONFIG(libngtcp2_crypto_openssl, $want_tcp2_path)
+ CURL_CHECK_PKGCONFIG(libngtcp2_crypto_quictls, $want_tcp2_path)
if test "$PKGCONFIG" != "no" ; then
- LIB_NGTCP2_CRYPTO_OPENSSL=`CURL_EXPORT_PCDIR([$want_tcp2_path])
- $PKGCONFIG --libs-only-l libngtcp2_crypto_openssl`
- AC_MSG_NOTICE([-l is $LIB_NGTCP2_CRYPTO_OPENSSL])
+ 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_OPENSSL=`CURL_EXPORT_PCDIR([$want_tcp2_path]) dnl
- $PKGCONFIG --cflags-only-I libngtcp2_crypto_openssl`
- AC_MSG_NOTICE([-I is $CPP_NGTCP2_CRYPTO_OPENSSL])
+ 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_OPENSSL=`CURL_EXPORT_PCDIR([$want_tcp2_path])
- $PKGCONFIG --libs-only-L libngtcp2_crypto_openssl`
- AC_MSG_NOTICE([-L is $LD_NGTCP2_CRYPTO_OPENSSL])
+ 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_OPENSSL"
- CPPFLAGS="$CPPFLAGS $CPP_NGTCP2_CRYPTO_OPENSSL"
- LIBS="$LIB_NGTCP2_CRYPTO_OPENSSL $LIBS"
+ 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_OPENSSL=`echo $LD_NGTCP2_CRYPTO_OPENSSL | $SED -e 's/^-L//'`
+ DIR_NGTCP2_CRYPTO_QUICTLS=`echo $LD_NGTCP2_CRYPTO_QUICTLS | $SED -e 's/^-L//'`
fi
- AC_CHECK_LIB(ngtcp2_crypto_openssl, ngtcp2_crypto_recv_client_initial_cb,
+ 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_OPENSSL, 1, [if ngtcp2_crypto_openssl is in use])
- AC_SUBST(USE_NGTCP2_CRYPTO_OPENSSL, [1])
- CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_NGTCP2_CRYPTO_OPENSSL"
+ 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_OPENSSL to CURL_LIBRARY_PATH])
+ AC_MSG_NOTICE([Added $DIR_NGTCP2_CRYPTO_QUICTLS to CURL_LIBRARY_PATH])
)
],
dnl not found, revert back to clean variables
@@ -2848,11 +2908,11 @@ if test "x$NGTCP2_ENABLED" = "x1" -a "x$OPENSSL_ENABLED" = "x1"; then
)
else
- dnl no ngtcp2_crypto_openssl pkg-config found, deal with it
+ 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_openssl pkg-config file.])
+ AC_MSG_ERROR([--with-ngtcp2 was specified but could not find ngtcp2_crypto_quictls pkg-config file.])
fi
fi
fi
@@ -3038,7 +3098,6 @@ if test X"$want_nghttp3" != Xno; then
CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_NGHTTP3"
export CURL_LIBRARY_PATH
AC_MSG_NOTICE([Added $DIR_NGHTTP3 to CURL_LIBRARY_PATH])
- experimental="$experimental HTTP3"
)
],
dnl not found, revert back to clean variables
@@ -3123,7 +3182,7 @@ if test X"$want_quiche" != Xno; then
if test "x$cross_compiling" != "xyes"; then
DIR_QUICHE=`echo $LD_QUICHE | $SED -e 's/^-L//'`
fi
- AC_CHECK_LIB(quiche, quiche_connect,
+ AC_CHECK_LIB(quiche, quiche_conn_send_ack_eliciting,
[
AC_CHECK_HEADERS(quiche.h,
experimental="$experimental HTTP3"
@@ -3291,14 +3350,12 @@ AC_CHECK_HEADERS(
sys/select.h \
sys/socket.h \
sys/ioctl.h \
- sys/uio.h \
- assert.h \
unistd.h \
stdlib.h \
arpa/inet.h \
net/if.h \
netinet/in.h \
- netinet/in6.h \
+ netinet/in6.h \
sys/un.h \
linux/tcp.h \
netinet/tcp.h \
@@ -3320,9 +3377,7 @@ AC_CHECK_HEADERS(
sys/resource.h \
libgen.h \
locale.h \
- errno.h \
stdbool.h \
- arpa/tftp.h \
sys/filio.h \
sys/wait.h \
setjmp.h,
@@ -3361,7 +3416,6 @@ dnl default includes
dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
-CURL_CHECK_VARIADIC_MACROS
AC_TYPE_SIZE_T
CURL_CHECK_STRUCT_TIMEVAL
@@ -3378,6 +3432,9 @@ CPPFLAGS="-I$srcdir/include $CPPFLAGS"
CURL_SIZEOF(curl_off_t, [
#include <curl/system.h>
])
+CURL_SIZEOF(curl_socket_t, [
+#include <curl/curl.h>
+])
CPPFLAGS=$o
AC_CHECK_TYPE(long long,
@@ -3386,17 +3443,8 @@ AC_CHECK_TYPE(long long,
longlong="yes"
)
-
if test ${ac_cv_sizeof_curl_off_t} -lt 8; then
- AC_ARG_WITH(n64-deprecated,dnl
-AS_HELP_STRING([--with-n64-deprecated],[confirm you realize support for systems without 64 bit data types is going away]),
- if test X"$withval" != Xno; then
- OPT_N64_AWARE=$withval
- fi
-)
- if test -z "$OPT_N64_AWARE"; then
- AC_MSG_ERROR([support for systems without 64 bit curl_off_t is deprecated, use --with-n64-deprecated until then])
- fi
+ AC_MSG_ERROR([64 bit curl_off_t is required])
fi
# check for ssize_t
@@ -3454,8 +3502,10 @@ CURL_RUN_IFELSE(
[
#include <time.h>
#include <limits.h>
- time_t t = -1;
- return (t > 0);
+ 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])
@@ -3482,7 +3532,6 @@ CURL_CHECK_FUNC_ALARM
CURL_CHECK_FUNC_BASENAME
CURL_CHECK_FUNC_CLOSESOCKET
CURL_CHECK_FUNC_CLOSESOCKET_CAMEL
-CURL_CHECK_FUNC_CONNECT
CURL_CHECK_FUNC_FCNTL
CURL_CHECK_FUNC_FREEADDRINFO
CURL_CHECK_FUNC_FSETXATTR
@@ -3498,6 +3547,7 @@ 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
@@ -3528,9 +3578,11 @@ AC_CHECK_DECLS([getpwuid_r], [], [AC_DEFINE(HAVE_DECL_GETPWUID_R_MISSING, 1, "Se
[[#include <pwd.h>
#include <sys/types.h>]])
-
-AC_CHECK_FUNCS([fnmatch \
- fchmod \
+AC_CHECK_FUNCS([\
+ _fseeki64 \
+ arc4random \
+ fnmatch \
+ fseeko \
geteuid \
getpass_r \
getppid \
@@ -3548,7 +3600,7 @@ AC_CHECK_FUNCS([fnmatch \
setrlimit \
snprintf \
utime \
- utimes
+ utimes \
],[
],[
func="$ac_func"
@@ -3571,6 +3623,15 @@ AC_CHECK_FUNCS([fnmatch \
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 <stdio.h>]])
+
CURL_CHECK_NONBLOCKING_SOCKET
dnl ************************************************************
@@ -3818,17 +3879,113 @@ AS_HELP_STRING([--disable-sspi],[Disable SSPI]),
)
dnl ************************************************************
-dnl disable cryptographic authentication
+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 cryptographic authentication methods])
-AC_ARG_ENABLE(crypto-auth,
-AS_HELP_STRING([--enable-crypto-auth],[Enable cryptographic authentication])
-AS_HELP_STRING([--disable-crypto-auth],[Disable cryptographic authentication]),
+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_CRYPTO_AUTH, 1, [to disable cryptographic authentication])
- CURL_DISABLE_CRYPTO_AUTH=1
+ 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)
;;
@@ -4015,6 +4172,50 @@ AS_HELP_STRING([--disable-mime],[Disable mime API support]),
)
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])
@@ -4145,14 +4346,13 @@ AS_HELP_STRING([--disable-headers-api],[Disable headers-api support]),
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]),
+AS_HELP_STRING([--enable-hsts],[Enable HSTS support])
+AS_HELP_STRING([--disable-hsts],[Disable HSTS support]),
[ case "$enableval" in
no)
AC_MSG_RESULT(no)
@@ -4204,6 +4404,13 @@ if test "x$want_ech" != "xno"; then
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])
@@ -4274,6 +4481,8 @@ else
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
@@ -4329,22 +4538,21 @@ if test "x$hsts" = "xyes"; then
SUPPORT_FEATURES="$SUPPORT_FEATURES HSTS"
fi
-if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" -a \
+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_CRYPTO_AUTH" != "x1" -a \
+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_CRYPTO_AUTH" != "x1" -a \
- "x$CURL_DISABLE_NTLM" != "x1"; then
+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$NSS_ENABLED" = "x1" \
+ -o "x$GNUTLS_ENABLED" = "x1" \
-o "x$SECURETRANSPORT_ENABLED" = "x1" \
-o "x$USE_WIN32_CRYPTO" = "x1" \
-o "x$WOLFSSL_NTLM" = "x1"; then
@@ -4366,7 +4574,7 @@ if test "x$USE_TLS_SRP" = "x1"; then
SUPPORT_FEATURES="$SUPPORT_FEATURES TLS-SRP"
fi
-if test "x$USE_NGHTTP2" = "x1" -o "x$USE_HYPER" = "x1"; then
+if test "x$USE_NGHTTP2" = "x1"; then
SUPPORT_FEATURES="$SUPPORT_FEATURES HTTP2"
fi
@@ -4379,12 +4587,31 @@ 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$https_proxy" != "xno"; then
- if test "x$OPENSSL_ENABLED" = "x1" -o "x$GNUTLS_ENABLED" = "x1" \
- -o "x$NSS_ENABLED" = "x1"; then
- SUPPORT_FEATURES="$SUPPORT_FEATURES HTTPS-proxy"
+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
@@ -4400,6 +4627,9 @@ 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([[
@@ -4553,12 +4783,16 @@ AC_CONFIG_FILES([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 \
@@ -4568,8 +4802,6 @@ AC_OUTPUT
CURL_GENERATE_CONFIGUREHELP_PM
-XC_AMEND_DISTCLEAN([lib src tests/unit tests/server tests/libtest docs/examples])
-
AC_MSG_NOTICE([Configured to build curl/libcurl:
Host setup: ${host}
diff --git a/curl-config.in b/curl-config.in
index f3e51617f..54f92d931 100644
--- a/curl-config.in
+++ b/curl-config.in
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2001 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/docs/ALTSVC.md b/docs/ALTSVC.md
index 560b43748..b9117e4d4 100644
--- a/docs/ALTSVC.md
+++ b/docs/ALTSVC.md
@@ -33,6 +33,9 @@ space separated fields.
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
diff --git a/docs/BINDINGS.md b/docs/BINDINGS.md
index c397c53c2..7f5da4219 100644
--- a/docs/BINDINGS.md
+++ b/docs/BINDINGS.md
@@ -41,6 +41,8 @@ Clojure: [clj-curl](https://github.com/lsevero/clj-curl) by Lucas Severo
[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
@@ -109,7 +111,7 @@ Ruby: [curb](https://github.com/taf2/curb) written by Ross Bamford,
[Rust](https://github.com/alexcrichton/curl-rust) curl-rust - by Carl Lerche
-[Scheme](http://www.metapaper.net/lisovsky/web/curl/) Bigloo binding by Kirill Lisovsky
+[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
@@ -123,6 +125,8 @@ Ruby: [curb](https://github.com/taf2/curb) written by Ross Bamford,
[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
diff --git a/docs/BUG-BOUNTY.md b/docs/BUG-BOUNTY.md
index aa8ee8957..3714efda5 100644
--- a/docs/BUG-BOUNTY.md
+++ b/docs/BUG-BOUNTY.md
@@ -11,8 +11,8 @@ 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](SECURITY-PROCESS.md) document for how
-we work with security issues.
+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?
diff --git a/docs/BUGS.md b/docs/BUGS.md
index 9d18ffe9f..2a8c56fe6 100644
--- a/docs/BUGS.md
+++ b/docs/BUGS.md
@@ -199,7 +199,7 @@
## Not reproducible
- We may require further work from you who actually see or experience the
+ 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.
diff --git a/docs/CHECKSRC.md b/docs/CHECKSRC.md
index 0406a7f6b..f73e7a834 100644
--- a/docs/CHECKSRC.md
+++ b/docs/CHECKSRC.md
@@ -41,7 +41,7 @@ warnings are:
more appropriate `char *name` style. The asterisk should sit right next to
the name without a space in between.
-- `BADCOMMAND`: There's a bad `checksrc` instruction in the code. See the
+- `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,
@@ -137,6 +137,8 @@ Currently these are the extended warnings which can be enabled:
- `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,
diff --git a/docs/CIPHERS.md b/docs/CIPHERS.md
index e5e5def19..27de94036 100644
--- a/docs/CIPHERS.md
+++ b/docs/CIPHERS.md
@@ -51,7 +51,7 @@ When specifying multiple cipher names, separate them with colon (`:`).
`ADH-RC4-MD5`
`ADH-DES-CBC3-SHA`
-### AES cipher suites from RFC3268, extending TLS v1.0
+### AES cipher suites from RFC 3268, extending TLS v1.0
`AES128-SHA`
`AES256-SHA`
@@ -66,7 +66,7 @@ When specifying multiple cipher names, separate them with colon (`:`).
`ADH-AES128-SHA`
`ADH-AES256-SHA`
-### SEED cipher suites from RFC4162, extending TLS v1.0
+### SEED cipher suites from RFC 4162, extending TLS v1.0
`SEED-SHA`
`DH-DSS-SEED-SHA`
@@ -148,7 +148,7 @@ When specifying multiple cipher names, separate them with colon (`:`).
`ECDHE-ECDSA-AES128-CCM8`
`ECDHE-ECDSA-AES256-CCM8`
-### Camellia HMAC-Based cipher suites from RFC6367, extending TLS v1.2
+### Camellia HMAC-Based cipher suites from RFC 6367, extending TLS v1.2
`ECDHE-ECDSA-CAMELLIA128-SHA256`
`ECDHE-ECDSA-CAMELLIA256-SHA384`
@@ -165,183 +165,6 @@ When specifying multiple cipher names, separate them with colon (`:`).
`TLS_AES_128_CCM_8_SHA256`
`TLS_AES_128_CCM_SHA256`
-## NSS
-
-### Totally insecure
-
-`rc4`
-`rc4-md5`
-`rc4export`
-`rc2`
-`rc2export`
-`des`
-`desede3`
-
-### SSL3/TLS cipher suites
-
-`rsa_rc4_128_md5`
-`rsa_rc4_128_sha`
-`rsa_3des_sha`
-`rsa_des_sha`
-`rsa_rc4_40_md5`
-`rsa_rc2_40_md5`
-`rsa_null_md5`
-`rsa_null_sha`
-`fips_3des_sha`
-`fips_des_sha`
-`fortezza`
-`fortezza_rc4_128_sha`
-`fortezza_null`
-
-### TLS 1.0 Exportable 56-bit Cipher Suites
-
-`rsa_des_56_sha`
-`rsa_rc4_56_sha`
-
-### AES ciphers
-
-`dhe_dss_aes_128_cbc_sha`
-`dhe_dss_aes_256_cbc_sha`
-`dhe_rsa_aes_128_cbc_sha`
-`dhe_rsa_aes_256_cbc_sha`
-`rsa_aes_128_sha`
-`rsa_aes_256_sha`
-
-### ECC ciphers
-
-`ecdh_ecdsa_null_sha`
-`ecdh_ecdsa_rc4_128_sha`
-`ecdh_ecdsa_3des_sha`
-`ecdh_ecdsa_aes_128_sha`
-`ecdh_ecdsa_aes_256_sha`
-`ecdhe_ecdsa_null_sha`
-`ecdhe_ecdsa_rc4_128_sha`
-`ecdhe_ecdsa_3des_sha`
-`ecdhe_ecdsa_aes_128_sha`
-`ecdhe_ecdsa_aes_256_sha`
-`ecdh_rsa_null_sha`
-`ecdh_rsa_128_sha`
-`ecdh_rsa_3des_sha`
-`ecdh_rsa_aes_128_sha`
-`ecdh_rsa_aes_256_sha`
-`ecdhe_rsa_null`
-`ecdhe_rsa_rc4_128_sha`
-`ecdhe_rsa_3des_sha`
-`ecdhe_rsa_aes_128_sha`
-`ecdhe_rsa_aes_256_sha`
-`ecdh_anon_null_sha`
-`ecdh_anon_rc4_128sha`
-`ecdh_anon_3des_sha`
-`ecdh_anon_aes_128_sha`
-`ecdh_anon_aes_256_sha`
-
-### HMAC-SHA256 cipher suites
-
-`rsa_null_sha_256`
-`rsa_aes_128_cbc_sha_256`
-`rsa_aes_256_cbc_sha_256`
-`dhe_rsa_aes_128_cbc_sha_256`
-`dhe_rsa_aes_256_cbc_sha_256`
-`ecdhe_ecdsa_aes_128_cbc_sha_256`
-`ecdhe_rsa_aes_128_cbc_sha_256`
-
-### AES GCM cipher suites in RFC 5288 and RFC 5289
-
-`rsa_aes_128_gcm_sha_256`
-`dhe_rsa_aes_128_gcm_sha_256`
-`dhe_dss_aes_128_gcm_sha_256`
-`ecdhe_ecdsa_aes_128_gcm_sha_256`
-`ecdh_ecdsa_aes_128_gcm_sha_256`
-`ecdhe_rsa_aes_128_gcm_sha_256`
-`ecdh_rsa_aes_128_gcm_sha_256`
-
-### cipher suites using SHA384
-
-`rsa_aes_256_gcm_sha_384`
-`dhe_rsa_aes_256_gcm_sha_384`
-`dhe_dss_aes_256_gcm_sha_384`
-`ecdhe_ecdsa_aes_256_sha_384`
-`ecdhe_rsa_aes_256_sha_384`
-`ecdhe_ecdsa_aes_256_gcm_sha_384`
-`ecdhe_rsa_aes_256_gcm_sha_384`
-
-### chacha20-poly1305 cipher suites
-
-`ecdhe_rsa_chacha20_poly1305_sha_256`
-`ecdhe_ecdsa_chacha20_poly1305_sha_256`
-`dhe_rsa_chacha20_poly1305_sha_256`
-
-### TLS 1.3 cipher suites
-
-`aes_128_gcm_sha_256`
-`aes_256_gcm_sha_384`
-`chacha20_poly1305_sha_256`
-
-## GSKit
-
-Ciphers are internally defined as [numeric
-codes](https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/apis/gsk_attribute_set_buffer.htm). libcurl
-maps them to the following case-insensitive names.
-
-### SSL2 cipher suites (insecure: disabled by default)
-
-`rc2-md5`
-`rc4-md5`
-`exp-rc2-md5`
-`exp-rc4-md5`
-`des-cbc-md5`
-`des-cbc3-md5`
-
-### SSL3 cipher suites
-
-`null-md5`
-`null-sha`
-`rc4-md5`
-`rc4-sha`
-`exp-rc2-cbc-md5`
-`exp-rc4-md5`
-`exp-des-cbc-sha`
-`des-cbc3-sha`
-
-### TLS v1.0 cipher suites
-
-`null-md5`
-`null-sha`
-`rc4-md5`
-`rc4-sha`
-`exp-rc2-cbc-md5`
-`exp-rc4-md5`
-`exp-des-cbc-sha`
-`des-cbc3-sha`
-`aes128-sha`
-`aes256-sha`
-
-### TLS v1.1 cipher suites
-
-`null-md5`
-`null-sha`
-`rc4-md5`
-`rc4-sha`
-`exp-des-cbc-sha`
-`des-cbc3-sha`
-`aes128-sha`
-`aes256-sha`
-
-### TLS v1.2 cipher suites
-
-`null-md5`
-`null-sha`
-`null-sha256`
-`rc4-md5`
-`rc4-sha`
-`des-cbc3-sha`
-`aes128-sha`
-`aes256-sha`
-`aes128-sha256`
-`aes256-sha256`
-`aes128-gcm-sha256`
-`aes256-gcm-sha384`
-
## WolfSSL
`RC4-SHA`,
@@ -458,10 +281,13 @@ maps them to the following case-insensitive names.
## Schannel
Schannel allows the enabling and disabling of encryption algorithms, but not
-specific cipher suites. They are
+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
@@ -524,7 +350,12 @@ are running an outdated OS you might still be supporting weak ciphers.
### TLS 1.3 cipher suites
-(Note these ciphers are set with `CURLOPT_TLS13_CIPHERS` and `--tls13-ciphers`)
+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`
@@ -532,6 +363,11 @@ are running an outdated OS you might still be supporting weak ciphers.
`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`).
diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
index 97101a482..dd2c6dc74 100644
--- a/docs/CMakeLists.txt
+++ b/docs/CMakeLists.txt
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/docs/CODE_STYLE.md b/docs/CODE_STYLE.md
index 5481aa506..9cdf0d17e 100644
--- a/docs/CODE_STYLE.md
+++ b/docs/CODE_STYLE.md
@@ -60,11 +60,11 @@ 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's a reason
+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. I often have two or three source
+ 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.
diff --git a/docs/CONNECTION-FILTERS.md b/docs/CONNECTION-FILTERS.md
new file mode 100644
index 000000000..c4b11dbb0
--- /dev/null
+++ b/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/docs/CONTRIBUTE.md b/docs/CONTRIBUTE.md
index 43a747df5..72d319001 100644
--- a/docs/CONTRIBUTE.md
+++ b/docs/CONTRIBUTE.md
@@ -148,7 +148,7 @@ changes.
### About pull requests
-With github it is easy to send a [pull
+With GitHub it is easy to send a [pull
request](https://github.com/curl/curl/pulls) to the curl project to have
changes merged.
@@ -188,34 +188,62 @@ to the list or better yet: change it to a pull request.
### Commit messages
-A short guide to how to write commit messages in the curl project.
+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 describe as much as
+ [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]
+ it fixes and everything else that is related, with unwieldy URLs replaced
+ with references like [0], [1], etc.]
-- empty line --
- [Closes/Fixes #1234 - if this closes or fixes a github issue]
- [Bug: URL to source of the report or more related discussion]
- [Reported-by: John Doe - credit the reporter]
- [whatever-else-by: credit all helpers, finders, doers]
+ [[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 first letter
- - no dot (.) at the end
+ - 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's no fixed list to select from but using the same "area" as
+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
+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
+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
@@ -280,12 +308,9 @@ 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
-an accurate copyright year range and 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.
-
-We update copyright year ranges to end on the year of the most recent change
-of the individual file.
+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/docs/CURL-DISABLE.md b/docs/CURL-DISABLE.md
index 1548df6bc..7978ed212 100644
--- a/docs/CURL-DISABLE.md
+++ b/docs/CURL-DISABLE.md
@@ -4,13 +4,37 @@
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_CRYPTO_AUTH`
+## `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.
-Disable support for authentication methods using crypto.
+## `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`
@@ -24,6 +48,10 @@ Disable DNS-over-HTTPS
Disable the FILE protocol
+## `CURL_DISABLE_FORM_API`
+
+Disable the form API
+
## `CURL_DISABLE_FTP`
Disable the FTP (and FTPS) protocol
diff --git a/docs/DEPRECATE.md b/docs/DEPRECATE.md
index 80be68f7d..4cd5a22ce 100644
--- a/docs/DEPRECATE.md
+++ b/docs/DEPRECATE.md
@@ -6,39 +6,35 @@ email the
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.
-## Support for systems without 64 bit data types
+## NTLM_WB auth
-curl will *require* support for a 64 bit data type (like `long long` or an
-alternative) to build. These days, few systems are used where no such type is
-around so the cost of maintaining this support is increasingly unnecessary to
-spent effort and time on, while supporting 32 bit values for some of those
-fields is complicated and hard to test.
+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.
-Adding this requirement will make the code simpler, easier to maintain and the
-test coverage better. It is a low price too, since virtually no users are
-still building curl on such systems.
+We keep the native NTLM implementation.
-`long long` was not a standard type until C99, but has been supported by C89
-compilers since the 1990s.
+curl will remove the support for NTLM_WB auth in June 2024.
-Starting in 8.0.0 (March 2023), the plan is to drop support.
+## space-separated `NOPROXY` patterns
-Starting in 7.86.0, building curl with configure requires the additional flag
-`--with-n64-deprecated` if the `curl_off_t` type on your system is smaller
-than 8 bytes, in an attempt to highlight these plans to affected users.
+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.
-## NSS
+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.
-We remove support for building curl with the NSS TLS library in August 2023.
+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.
-- There are few users left who use curl+NSS
-- NSS has few users outside of curl as well (primarily Firefox)
-- NSS is harder than ever to find documentation for
-- NSS was always "best" used with Red Hat Linux when they provided additional
- features on top of the regular NSS that is not shipped by the vanilla library
-
-Starting in 7.82.0, building curl to use NSS configure requires the additional
-flag `--with-nss-deprecated` in an attempt to highlight these plans.
+curl will remove the support for space-separated names in July 2024.
## past removals
@@ -46,3 +42,7 @@ flag `--with-nss-deprecated` in an attempt to highlight these plans.
- axTLS
- PolarSSL
- NPN
+ - Support for systems without 64 bit data types
+ - NSS
+ - gskit
+ - mingw v1
diff --git a/docs/DYNBUF.md b/docs/DYNBUF.md
index 41b022c42..c3a4b7667 100644
--- a/docs/DYNBUF.md
+++ b/docs/DYNBUF.md
@@ -27,7 +27,7 @@ void Curl_dyn_free(struct dynbuf *s);
```
Free the associated memory and clean up. After a free, the `dynbuf` struct can
-be re-used to start appending new data to.
+be reused to start appending new data to.
## `Curl_dyn_addn`
@@ -37,6 +37,8 @@ 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
@@ -45,6 +47,8 @@ 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
@@ -53,6 +57,8 @@ 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
@@ -61,6 +67,8 @@ 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
diff --git a/docs/EARLY-RELEASE.md b/docs/EARLY-RELEASE.md
new file mode 100644
index 000000000..6d5a5e25b
--- /dev/null
+++ b/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/docs/EXPERIMENTAL.md b/docs/EXPERIMENTAL.md
index 9aaa7ada1..de694013d 100644
--- a/docs/EXPERIMENTAL.md
+++ b/docs/EXPERIMENTAL.md
@@ -10,7 +10,7 @@ Experimental support in curl means:
"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 advice against using this feature in production.
+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.
@@ -19,7 +19,6 @@ Experimental support in curl means:
## Experimental features right now
- The Hyper HTTP backend
- - HTTP/3 support and options
- - `CURLSSLOPT_NATIVE_CA` (No configure option, feature built in when supported)
+ - HTTP/3 support (using the quiche or msh3 backends)
- The rustls backend
- WebSocket
diff --git a/docs/FAQ b/docs/FAQ
index c8ba7feb3..1450a1e75 100644
--- a/docs/FAQ
+++ b/docs/FAQ
@@ -26,6 +26,7 @@ FAQ
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
@@ -422,10 +423,26 @@ FAQ
backends.
curl can be built to use one of the following SSL alternatives: OpenSSL,
- libressl, BoringSSL, GnuTLS, wolfSSL, NSS, mbedTLS, Secure
- Transport (native iOS/OS X), Schannel (native Windows), GSKit (native IBM
- i), 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
+ 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) ?
@@ -435,19 +452,19 @@ FAQ
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.
+ 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 the 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.
+ 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".
@@ -505,11 +522,11 @@ FAQ
One example would be to delete a file after you have downloaded it:
- curl -O ftp://download.com/coolfile -Q '-DELE coolfile'
+ curl -O ftp://example.com/coolfile -Q '-DELE coolfile'
or rename a file after upload:
- curl -T infile ftp://upload.com/dir/ -Q "-RNFR infile" -Q "-RNTO newname"
+ curl -T infile ftp://example.com/dir/ -Q "-RNFR infile" -Q "-RNTO newname"
3.8 How do I tell curl to follow HTTP redirects?
@@ -517,7 +534,7 @@ FAQ
that informs the client about this is only interpreted if you are using the
-L/--location option. As in:
- curl -L http://redirector.com
+ curl -L http://example.com
Not all redirects are HTTP ones, see 4.14
@@ -580,11 +597,11 @@ FAQ
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 " url.com
+ curl -d " with spaces " example.com
or perhaps
- curl -d ' with spaces ' url.com
+ 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
@@ -681,12 +698,12 @@ FAQ
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.sunet.se/%2ftmp/
+ 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.sunet.se//tmp/
+ curl ftp://ftp.example.com//tmp/
3.18 Can I use curl to send a POST/PUT and not wait for a response?
@@ -781,7 +798,7 @@ FAQ
An example that would invoke a remote CGI that uses &-symbols could be:
- curl 'http://www.altavista.com/cgi-bin/query?text=yes&q=curl'
+ 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
@@ -803,7 +820,7 @@ FAQ
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.site.com/weirdname[].html'
+ curl -g 'www.example.com/weirdname[].html'
4.4 Why do I get downloaded data even though the web page does not exist?
@@ -817,7 +834,7 @@ FAQ
4.5 Why do I get return code XXX from an HTTP server?
- RFC2616 clearly explains the return codes. This is a short transcript. Go
+ 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"
@@ -902,7 +919,7 @@ FAQ
4.9 curl cannot authenticate to a server that requires NTLM?
- NTLM support requires OpenSSL, GnuTLS, mbedTLS, NSS, Secure Transport, or
+ 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
@@ -985,16 +1002,15 @@ FAQ
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 RFC4217. This kind of connection will then of course use the
+ 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 POST requests with a
- tiny 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.
+ 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
@@ -1333,7 +1349,7 @@ FAQ
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 RFC3659 section 7.5.1. If MLSD is not supported
+ 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.
@@ -1499,7 +1515,7 @@ FAQ
unknown to me).
After a transfer, you just set new options in the handle and make another
- transfer. This will make libcurl re-use the same connection if it can.
+ transfer. This will make libcurl reuse the same connection if it can.
7.4 Does PHP/CURL have dependencies?
diff --git a/docs/FEATURES.md b/docs/FEATURES.md
index 52608c08e..05364aaf3 100644
--- a/docs/FEATURES.md
+++ b/docs/FEATURES.md
@@ -12,7 +12,7 @@
## libcurl
- - full URL syntax with no length limit
+ - URL RFC 3986 syntax
- custom maximum download time
- custom least download speed acceptable
- custom output result after completion
@@ -43,7 +43,7 @@
- PUT
- HEAD
- POST
- - multipart formpost (RFC1867-style)
+ - multipart formpost (RFC 1867-style)
- authentication: Basic, Digest, NTLM (9) and Negotiate (SPNEGO) (3)
to server and proxy
- resume (both GET and PUT)
@@ -212,7 +212,7 @@
6. requires c-ares
7. requires libssh2, libssh or wolfSSH
8. requires libssh2 or libssh
- 9. requires OpenSSL, GnuTLS, mbedTLS, NSS, Secure Transport or SSPI
+ 9. requires OpenSSL, GnuTLS, mbedTLS, Secure Transport or SSPI
(native Windows)
10. requires libidn2 or Windows
11. requires libz, brotli and/or zstd
diff --git a/docs/GOVERNANCE.md b/docs/GOVERNANCE.md
index f45aaa24c..dd09de456 100644
--- a/docs/GOVERNANCE.md
+++ b/docs/GOVERNANCE.md
@@ -158,7 +158,7 @@ When you are merging patches/pull requests...
- 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:")
+ control and full audit trail (GitHub leaves out you as "Committer:")
- remember to credit the reporter and the helpers.
## Who are maintainers?
diff --git a/docs/HELP-US.md b/docs/HELP-US.md
index eabf80810..90c9724b2 100644
--- a/docs/HELP-US.md
+++ b/docs/HELP-US.md
@@ -4,9 +4,11 @@ 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.
-A good idea is to start by subscribing to the [curl-library mailing
+You may subscribe to the [curl-library mailing
list](https://lists.haxx.se/listinfo/curl-library) to keep track of the
-current discussion topics.
+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
@@ -36,7 +38,7 @@ even maybe not a terribly experienced developer, here's our advice:
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's nobody known to work on this
+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.
diff --git a/docs/HISTORY.md b/docs/HISTORY.md
index 5a142b4b2..f39c45ea1 100644
--- a/docs/HISTORY.md
+++ b/docs/HISTORY.md
@@ -161,7 +161,7 @@ Starting with 7.10, curl verifies SSL server certificates by default.
January: Started working on the distributed curl tests. The autobuilds.
February: the curl site averages at 20000 visits weekly. At any given moment,
-there's an average of 3 people browsing the website.
+there is an average of 3 people browsing the website.
Multiple new authentication schemes are supported: Digest (May), NTLM (June)
and Negotiate (June).
@@ -430,3 +430,8 @@ April: added the cyassl backend (later renamed to WolfSSL)
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/docs/HTTP-COOKIES.md b/docs/HTTP-COOKIES.md
index 939e9fab2..d6fd87d20 100644
--- a/docs/HTTP-COOKIES.md
+++ b/docs/HTTP-COOKIES.md
@@ -17,7 +17,7 @@
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, [RFC6265](https://www.ietf.org/rfc/rfc6265.txt) was finally
+ 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),
@@ -25,10 +25,15 @@
[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-02)
- RFC6265. Cookie prefixes and secure cookie modification protection has been
+ [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
@@ -47,7 +52,9 @@
## Cookie file format
The cookie file format is text based and stores one cookie per line. Lines
- that start with `#` are treated as comments.
+ 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
diff --git a/docs/HTTP2.md b/docs/HTTP2.md
index a15bb3108..5b4028349 100644
--- a/docs/HTTP2.md
+++ b/docs/HTTP2.md
@@ -7,7 +7,7 @@ HTTP/2 with curl
Build prerequisites
-------------------
- nghttp2
- - OpenSSL, libressl, BoringSSL, NSS, GnuTLS, mbedTLS, wolfSSL or Schannel
+ - OpenSSL, libressl, BoringSSL, GnuTLS, mbedTLS, wolfSSL or Schannel
with a new enough version.
[nghttp2](https://nghttp2.org/)
@@ -55,14 +55,14 @@ 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 re-use existing HTTP/2 connections and just add a new stream over
+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's a
+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.
diff --git a/docs/HTTP3.md b/docs/HTTP3.md
index 26141bb75..7f2f08ada 100644
--- a/docs/HTTP3.md
+++ b/docs/HTTP3.md
@@ -9,29 +9,43 @@ book describing the protocols involved.
## QUIC libraries
-QUIC libraries we are experimenting with:
+QUIC libraries we are using:
[ngtcp2](https://github.com/ngtcp2/ngtcp2)
-[quiche](https://github.com/cloudflare/quiche)
+[quiche](https://github.com/cloudflare/quiche) - **EXPERIMENTAL**
-[msquic](https://github.com/microsoft/msquic) & [msh3](https://github.com/nibanks/msh3)
+[msh3](https://github.com/nibanks/msh3) (with [msquic](https://github.com/microsoft/msquic)) - **EXPERIMENTAL**
## Experimental
-HTTP/3 and QUIC support in curl is considered **EXPERIMENTAL** until further
-notice. It needs to be enabled at build-time.
+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
-## Build with OpenSSL
+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 (patched) OpenSSL
+Build quictls
- % git clone --depth 1 -b openssl-3.0.0+quic https://github.com/quictls/openssl
+ % git clone --depth 1 -b openssl-3.1.4+quic https://github.com/quictls/openssl
% cd openssl
% ./config enable-tls1_3 --prefix=<somewhere1>
% make
@@ -40,7 +54,7 @@ Build (patched) OpenSSL
Build nghttp3
% cd ..
- % git clone https://github.com/ngtcp2/nghttp3
+ % git clone -b v1.1.0 https://github.com/ngtcp2/nghttp3
% cd nghttp3
% autoreconf -fi
% ./configure --prefix=<somewhere2> --enable-lib-only
@@ -50,7 +64,7 @@ Build nghttp3
Build ngtcp2
% cd ..
- % git clone https://github.com/ngtcp2/ngtcp2
+ % git clone -b v1.1.0 https://github.com/ngtcp2/ngtcp2
% cd ngtcp2
% autoreconf -fi
% ./configure PKG_CONFIG_PATH=<somewhere1>/lib/pkgconfig:<somewhere2>/lib/pkgconfig LDFLAGS="-Wl,-rpath,<somewhere1>/lib" --prefix=<somewhere3> --enable-lib-only
@@ -83,7 +97,7 @@ Build GnuTLS
Build nghttp3
% cd ..
- % git clone https://github.com/ngtcp2/nghttp3
+ % git clone -b v1.1.0 https://github.com/ngtcp2/nghttp3
% cd nghttp3
% autoreconf -fi
% ./configure --prefix=<somewhere2> --enable-lib-only
@@ -93,7 +107,7 @@ Build nghttp3
Build ngtcp2
% cd ..
- % git clone https://github.com/ngtcp2/ngtcp2
+ % git clone -b v1.1.0 https://github.com/ngtcp2/ngtcp2
% cd ngtcp2
% autoreconf -fi
% ./configure PKG_CONFIG_PATH=<somewhere1>/lib/pkgconfig:<somewhere2>/lib/pkgconfig LDFLAGS="-Wl,-rpath,<somewhere1>/lib" --prefix=<somewhere3> --enable-lib-only --with-gnutls
@@ -124,17 +138,17 @@ Build wolfSSL
Build nghttp3
% cd ..
- % git clone https://github.com/ngtcp2/nghttp3
+ % git clone -b v1.1.0 https://github.com/ngtcp2/nghttp3
% cd nghttp3
% autoreconf -fi
% ./configure --prefix=<somewhere2> --enable-lib-only
% make
% make install
-Build ngtcp2 (once https://github.com/ngtcp2/ngtcp2/pull/505 is merged)
+Build ngtcp2
% cd ..
- % git clone https://github.com/ngtcp2/ngtcp2
+ % git clone -b v1.1.0 https://github.com/ngtcp2/ngtcp2
% cd ngtcp2
% autoreconf -fi
% ./configure PKG_CONFIG_PATH=<somewhere1>/lib/pkgconfig:<somewhere2>/lib/pkgconfig LDFLAGS="-Wl,-rpath,<somewhere1>/lib" --prefix=<somewhere3> --enable-lib-only --with-wolfssl
@@ -153,6 +167,10 @@ Build curl
# 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:
@@ -177,11 +195,17 @@ Build curl:
# 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.4.0 --depth 1 --recursive https://github.com/nibanks/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 .
@@ -202,45 +226,89 @@ Run from `/usr/local/bin/curl`.
Build msh3:
- % git clone -b v0.4.0 --depth 1 --recursive https://github.com/nibanks/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.
+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)):
+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.
+**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://www.google.com
+ % 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 HTTP/3 directly:
+Use only HTTP/3:
- curl --http3 https://nghttp2.org:4433/
+ 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://quic.aiortc.org/
+ 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).
@@ -257,8 +325,8 @@ 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 my Debian setup I just installed **apache2**. It runs on port 80 and has a
-document root in `/var/www/html`. I can get the 8GB file from it with `curl
+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
@@ -297,7 +365,7 @@ should be either in your PATH or your current directory.
Create a `Caddyfile` with the following content:
~~~
localhost:7443 {
- respond "Hello, world! You're using {http.request.proto}"
+ respond "Hello, world! you are using {http.request.proto}"
}
~~~
diff --git a/docs/HYPER.md b/docs/HYPER.md
index ad23a9039..9932c1bbf 100644
--- a/docs/HYPER.md
+++ b/docs/HYPER.md
@@ -9,7 +9,7 @@ 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 in the master branch using pull-requests, just like ordinary
+happen in the master branch using pull-requests, just like ordinary
changes.
## Hyper version
@@ -18,23 +18,20 @@ The C API for Hyper is brand new and is still under development.
## build curl with hyper
-Since March 3 2022, hyper needs the nightly rustc to build, which you may need
-to install first with:
-
- % rustup toolchain install nightly
-
-Then build hyper and enable its C API like this:
+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 +nightly rustc --features client,http1,http2,ffi -Z unstable-options --crate-type cdylib
+ % 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 --with-hyper=<hyper dir>
+ % ./configure LDFLAGS="-Wl,-rpath,<hyper-dir>/target/debug -Wl,-rpath,<hyper-dir>/target/release" --with-openssl --with-hyper=<hyper-dir>
% make
# using Hyper internally
@@ -57,8 +54,13 @@ The hyper backend does not support
- `--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
@@ -67,7 +69,5 @@ still need attention and verification include:
- multiplexed HTTP/2
- h2 Upgrade:
-- pausing transfers
- receiving HTTP/1 trailers
- sending HTTP/1 trailers
-
diff --git a/docs/INSTALL.cmake b/docs/INSTALL.cmake
index 3f905d79a..4e7f706a9 100644
--- a/docs/INSTALL.cmake
+++ b/docs/INSTALL.cmake
@@ -25,7 +25,7 @@ Current flaws in the curl CMake build
- Builds libcurl without large file support
- Does not support all SSL libraries (only OpenSSL, Schannel,
- Secure Transport, and mbed TLS, NSS, WolfSSL)
+ 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
diff --git a/docs/INSTALL.md b/docs/INSTALL.md
index 801ec44e8..a6780b45d 100644
--- a/docs/INSTALL.md
+++ b/docs/INSTALL.md
@@ -74,8 +74,8 @@ Without pkg-config installed, use this:
./configure --with-openssl=/opt/OpenSSL
-If you insist on forcing a build without SSL support, even though you may
-have OpenSSL installed in your system, you can run configure like this:
+If you insist on forcing a build without SSL support, you can run configure
+like this:
./configure --without-ssl
@@ -92,17 +92,32 @@ 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
-## More Options
+## Static builds
To force a static library compile, disable the shared library creation by
running configure like:
./configure --disable-shared
-To tell the configure script to skip searching for thread-safe functions, add
-an option like:
+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.
- ./configure --disable-thread
+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.
@@ -119,15 +134,36 @@ These options are provided to select the TLS backend to use.
- BearSSL: `--with-bearssl`
- GnuTLS: `--with-gnutls`.
- mbedTLS: `--with-mbedtls`
- - NSS: `--with-nss`
- - OpenSSL: `--with-openssl` (also for BoringSSL and libressl)
+ - 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
@@ -149,12 +185,12 @@ multi-threaded dynamic C runtime.
If you get linkage errors read section 5.7 of the FAQ document.
-## MinGW32
+## mingw-w64
-Make sure that MinGW32's bin directory is in the search path, for example:
+Make sure that mingw-w64's bin directory is in the search path, for example:
```cmd
-set PATH=c:\mingw32\bin;%PATH%
+set PATH=c:\mingw-w64\bin;%PATH%
```
then run `mingw32-make mingw32` in the root dir. There are other
@@ -167,7 +203,7 @@ make targets available to build libcurl with more features, use:
and SSPI support.
If you have any problems linking libraries or finding header files, be sure
-to verify that the provided `Makefile.m32` files use the proper paths, and
+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:
@@ -195,7 +231,7 @@ set LDFLAGS=-Lc:/openldapsdk/lib/mscvc
set LIBS=-lldapsdk -lldapssl -lldapx
```
-If you want to enable LDAPS support then set LDAPS=1.
+If you want to enable LDAPS support then append `-ldaps` to the make target.
## Cygwin
@@ -205,6 +241,30 @@ 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
@@ -364,7 +424,7 @@ OpenSSL, follow the OpenSSL build instructions and then install `libssl.a` and
OpenSSL like this:
```bash
-LIBS="-lssl -lcrypto -lc++" # For OpenSSL/BoringSSL. In general, you'll need to the SSL/TLS layer's transtive dependencies if you're linking statically.
+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"
```
@@ -466,7 +526,12 @@ disabling support for some feature:
- `--disable-alt-svc` (HTTP Alt-Svc)
- `--disable-ares` (the C-ARES DNS library)
- `--disable-cookies` (HTTP cookies)
- - `--disable-crypto-auth` (cryptographic authentication)
+ - `--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)
@@ -531,27 +596,29 @@ that are not automatically detected:
- `--disable-libcurl-option` !`--libcurl`
- `--disable-verbose` !verbose\ logs
-# PORTS
+# 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!
-## 85 Operating Systems
-
-AIX, AmigaOS, Android, Aros, BeOS, Blackberry 10, Blackberry Tablet OS, Cell
-OS, ChromeOS, Cisco IOS, Cygwin, Dragonfly BSD, eCOS, FreeBSD, FreeDOS,
-FreeRTOS, Fuchsia, Garmin OS, Genode, Haiku, HardenedBSD, HP-UX, Hurd,
-Illumos, Integrity, iOS, ipadOS, IRIX, LineageOS, Linux, Lua RTOS, Mac OS 9,
-macOS, Mbed, Micrium, MINIX, MorphOS, MPE/iX, MS-DOS, NCR MP-RAS, NetBSD,
-Netware, 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, Sailfish OS, SCO Unix, Serenity, SINIX-Z, Solaris, SunOS,
-Syllable OS, Symbian, Tizen, TPF, Tru64, tvOS, ucLinux, Ultrix, UNICOS,
-UnixWare, VMS, vxWorks, WebOS, Wii system software, Windows, Windows CE, Xbox
-System, z/OS, z/TPF, z/VM, z/VSE
-
-## 22 CPU Architectures
-
-Alpha, ARC, ARM, AVR32, Cell, HP-PA, Itanium, m68k, MicroBlaze, MIPS, Nios,
-OpenRISC, POWER, PowerPC, RISC-V, s390, SH4, SPARC, VAX, x86, x86-64, Xtensa
+## 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/docs/INTERNALS.md b/docs/INTERNALS.md
index 30cce8c98..d7513a8ff 100644
--- a/docs/INTERNALS.md
+++ b/docs/INTERNALS.md
@@ -2,11 +2,11 @@
The canonical libcurl internals documentation is now in the [everything
curl](https://everything.curl.dev/internals) book. This file lists supported
-versions of libs, tools and operating systems.
+versions of libs and build tools.
## Portability
- We write curl and libcurl to compile with C89 compilers. On 32-bit and up
+ 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.
@@ -27,24 +27,10 @@ versions of libs, tools and operating systems.
- wolfSSL 2.0.0
- OpenLDAP 2.0
- MIT Kerberos 1.2.4
- - GSKit V5R3M0
- - NSS 3.14.x
- Heimdal ?
- - nghttp2 1.12.0
+ - nghttp2 1.15.0
- WinSock 2.2 (on Windows 95+ and Windows CE .NET 4.1+)
-## Operating Systems
-
- On systems where configure runs, we aim at working on them all - if they have
- a suitable C compiler. On systems that do not run configure, we strive to
- keep curl running correctly on:
-
- - Windows 98
- - AS/400 V5R3M0
- - Symbian 9.1
- - Windows CE ?
- - TPF ?
-
## Build tools
When writing code (mostly for generating stuff included in release tarballs)
@@ -52,12 +38,13 @@ versions of libs, tools and operating systems.
these versions:
- GNU Libtool 1.4.2
- - GNU Autoconf 2.57
+ - GNU Autoconf 2.59
- GNU Automake 1.7
- GNU M4 1.4
- - perl 5.004
+ - perl 5.6
- roffit 0.5
- - groff ? (any version that supports `groff -Tps -man [in] [out]`)
+ - nroff any version that supports `-man [in] [out]`
+ - cmake 3.7
Library Symbols
===============
diff --git a/docs/KNOWN_BUGS b/docs/KNOWN_BUGS
index 6cbcd51de..e52774a15 100644
--- a/docs/KNOWN_BUGS
+++ b/docs/KNOWN_BUGS
@@ -12,56 +12,36 @@ 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 Multiple methods in a single WWW-Authenticate: header
- 1.3 STARTTRANSFER time is wrong for HTTP POSTs
- 1.4 multipart formposts file name encoding
+ 1.2 hyper is slow
1.5 Expect-100 meets 417
- 1.6 Unnecessary close when 401 received waiting for 100
- 1.7 Deflate error after all content was received
- 1.8 DoH is not used for all name resolves when enabled
- 1.11 CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM
2. TLS
- 2.1 CURLINFO_SSL_VERIFYRESULT has limited support
- 2.2 DER in keychain
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.6 CURL_GLOBAL_SSL
2.7 Client cert (MTLS) issues with Schannel
- 2.8 Schannel disable CURLOPT_SSL_VERIFYPEER and verify hostname
- 2.9 TLS session cache does not work with TFO
- 2.10 Store TLS context per transfer instead of per connection
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
- 2.14 Secure Transport disabling hostname validation also disables SNI
- 2.15 Renegotiate from server may cause hang for OpenSSL backend
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
- 4.1 -J and -O with %-encoded file names
- 4.2 -J with -C - fails
- 4.3 --retry and transfer timeouts
5. Build and portability issues
5.1 OS400 port requires deprecated IBM library
5.2 curl-config --libs contains private details
- 5.3 curl compiled on OSX 10.13 failed to run on OSX 10.10
- 5.4 Build with statically built dependency
+ 5.3 building for old macOS fails with gcc
5.5 cannot handle Unicode arguments in non-Unicode builds on Windows
- 5.6 make distclean loops forever
- 5.7 Visual Studio project gaps
- 5.8 configure finding libs in wrong directory
+ 5.6 cygwin: make install installs curl-config.1 twice
5.9 Utilize Requires.private directives in libcurl.pc
- 5.10 curl hangs on SMB upload over stdin
5.11 configure --with-gssapi with Heimdal is ignored on macOS
- 5.12 flaky Windows CI builds
+ 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
@@ -69,11 +49,9 @@ problems may have been fixed or changed somewhat since this was written.
6.1 NTLM authentication and unicode
6.2 MIT Kerberos for Windows build
6.3 NTLM in system context uses wrong name
- 6.4 Negotiate and Kerberos V5 need a fake user 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.8 RTSP authentication breaks without redirect support
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
@@ -81,120 +59,66 @@ problems may have been fixed or changed somewhat since this was written.
6.13 Negotiate against Hadoop HDFS
7. FTP
- 7.1 FTP without or slow 220 response
- 7.2 FTP with CONNECT and slow server
7.3 FTP with NOBODY and FAILONERROR
7.4 FTP with ACCT
- 7.5 ASCII FTP
- 7.6 FTP with NULs in URL parts
- 7.7 FTP and empty path parts in the URL
- 7.8 Premature transfer end but healthy control channel
- 7.9 Passive transfer tries only one IP address
- 7.10 FTPS needs session reuse
7.11 FTPS upload data loss with TLS 1.3
7.12 FTPS directory listing hangs on Windows with Schannel
- 8. TELNET
- 8.1 TELNET and time limitations do not work
- 8.2 Microsoft telnet server
-
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
- 10.4 active FTP over a SOCKS
11. Internals
- 11.1 Curl leaks .onion hostnames in DNS
11.2 error buffer not set if connection to multiple addresses fails
- 11.3 Disconnects do not do verbose
11.4 HTTP test server 'connection-monitor' problems
11.5 Connection information when using TCP Fast Open
- 11.7 signal-based resolver timeouts
- 11.8 DoH leaks memory after followlocation
- 11.9 DoH does not inherit all transfer options
- 11.10 Blocking socket operations in non-blocking API
- 11.11 A shared connection cache is not thread-safe
- 11.14 Multi perform hangs waiting for threaded resolver
- 11.15 CURLOPT_OPENSOCKETPAIRFUNCTION is missing
- 11.16 libcurl uses renames instead of locking for atomic operations
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 with NSS is slow
+ 12.4 LDAPS requests to ActiveDirectory server hang
13. TCP/IP
- 13.1 --interface for ipv6 binds to unusable IP address
13.2 Trying local ports fails on Windows
- 14. DICT
- 14.1 DICT responses show the underlying protocol
-
15. CMake
- 15.1 use correct SONAME
+ 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.5 build on Linux links libcurl to libdl
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.9 cert paths autodetected when cross-compiling
- 15.10 libpsl is not supported
15.11 ExternalProject_Add does not set CURL_CA_PATH
- 15.12 cannot enable LDAPS on Windows
15.13 CMake build with MIT Kerberos does not work
- 15.14 cmake build is not thread-safe
- 16. Applications
+ 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.1 Excessive HTTP/2 packets with TCP_NODELAY
17.2 HTTP/2 frames while in the connection pool kill reuse
17.3 ENHANCE_YOUR_CALM causes infinite retries
- 17.4 Connection failures with parallel HTTP/2
- 17.5 HTTP/2 connections through HTTPS proxy frequently stall
18. HTTP/3
- 18.1 If the HTTP/3 server closes connection during upload curl hangs
- 18.2 Transfer closed with n bytes remaining to read
- 18.4 timeout when reusing a http3 connection
- 18.9 connection migration does not work
+ 18.1 connection migration does not work
==============================================================================
1. HTTP
-1.2 Multiple methods in a single WWW-Authenticate: header
-
- The HTTP responses headers WWW-Authenticate: can provide information about
- multiple authentication methods as multiple headers or as several methods
- within a single header. The latter way, several methods in the same physical
- line, is not supported by libcurl's parser. (For no good reason.)
-
-1.3 STARTTRANSFER time is wrong for HTTP POSTs
-
- Wrong STARTTRANSFER timer accounting for POST requests Timer works fine with
- GET requests, but while using POST the time for CURLINFO_STARTTRANSFER_TIME
- is wrong. While using POST CURLINFO_STARTTRANSFER_TIME minus
- CURLINFO_PRETRANSFER_TIME is near to zero every time.
-
- https://github.com/curl/curl/issues/218
- https://curl.se/bug/view.cgi?id=1213
+1.2 hyper is slow
-1.4 multipart formposts file name encoding
+ When curl is built to use hyper for HTTP, it is unnecessary slow.
- When creating multipart formposts. The file name part can be encoded with
- something beyond ascii but currently libcurl will only pass in the verbatim
- string the app provides. There are several browsers that already do this
- encoding. The key seems to be the updated draft to RFC2231:
- https://datatracker.ietf.org/doc/html/draft-reschke-rfc2231-in-http-02
+ https://github.com/curl/curl/issues/11203
1.5 Expect-100 meets 417
@@ -203,54 +127,8 @@ problems may have been fixed or changed somewhat since this was written.
the client application to redo the transfer after disabling Expect:.
https://curl.se/mail/archive-2008-02/0043.html
-1.6 Unnecessary close when 401 received waiting for 100
-
- libcurl closes the connection if an HTTP 401 reply is received while it is
- waiting for the 100-continue response.
- https://curl.se/mail/lib-2008-08/0462.html
-
-1.7 Deflate error after all content was received
-
- There's a situation where we can get an error in an HTTP response that is
- compressed, when that error is detected after all the actual body contents
- have been received and delivered to the application. This is tricky, but is
- ultimately a broken server.
-
- See https://github.com/curl/curl/issues/2719
-
-1.8 DoH is not used for all name resolves when enabled
-
- Even if DoH is specified to be used, there are some name resolves that are
- done without it. This should be fixed. When the internal function
- `Curl_resolver_wait_resolv()` is called, it does not use DoH to complete the
- resolve as it otherwise should.
-
- See https://github.com/curl/curl/pull/3857 and
- https://github.com/curl/curl/pull/3850
-
-1.11 CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM
-
- When using libcurl to POST form data using a FILE* with the CURLFORM_STREAM
- option of curl_formadd(). I notice that if the connection drops at just the
- right time, the POST is reattempted without the data from the file. It seems
- like the file stream position is not getting reset to the beginning of the
- file. I found the CURLOPT_SEEKFUNCTION option and set that with a function
- that performs an fseek() on the FILE*. However, setting that did not seem to
- fix the issue or even get called. See https://github.com/curl/curl/issues/768
-
-
2. TLS
-2.1 CURLINFO_SSL_VERIFYRESULT has limited support
-
- CURLINFO_SSL_VERIFYRESULT is only implemented for the OpenSSL, NSS and
- GnuTLS backends, so relying on this information in a generic app is flaky.
-
-2.2 DER in keychain
-
- Curl does not recognize certificates in DER format in keychain, but it works
- with PEM. https://curl.se/bug/view.cgi?id=1065
-
2.3 Unable to use PKCS12 certificate with Secure Transport
See https://github.com/curl/curl/issues/5403
@@ -269,58 +147,10 @@ problems may have been fixed or changed somewhat since this was written.
See https://github.com/curl/curl/issues/1411
-2.6 CURL_GLOBAL_SSL
-
- Since libcurl 7.57.0, the flag CURL_GLOBAL_SSL is a no-op. The change was
- merged in https://github.com/curl/curl/commit/d661b0afb571a
-
- It was removed since it was
-
- A) never clear for applications on how to deal with init in the light of
- different SSL backends (the option was added back in the days when life
- was simpler)
-
- B) multissl introduced dynamic switching between SSL backends which
- emphasized (A) even more
-
- C) libcurl uses some TLS backend functionality even for non-TLS functions (to
- get "good" random) so applications trying to avoid the init for
- performance reasons would do wrong anyway
-
- D) not documented carefully so all this mostly just happened to work
- for some users
-
- However, in spite of the problems with the feature, there were some users who
- apparently depended on this feature and who now claim libcurl is broken for
- them. The fix for this situation is not obvious as a downright revert of the
- patch is totally ruled out due to those reasons above.
-
- https://github.com/curl/curl/issues/2276
-
2.7 Client cert (MTLS) issues with Schannel
See https://github.com/curl/curl/issues/3145
-2.8 Schannel disable CURLOPT_SSL_VERIFYPEER and verify hostname
-
- This seems to be a limitation in the underlying Schannel API.
-
- https://github.com/curl/curl/issues/3284
-
-2.9 TLS session cache does not work with TFO
-
- See https://github.com/curl/curl/issues/4301
-
-2.10 Store TLS context per transfer instead of per connection
-
- The GnuTLS `backend->cred` and the OpenSSL `backend->ctx` data and their
- proxy versions (and possibly other TLS backends), could be better moved to be
- stored in the Curl_easy handle instead of in per connection so that a single
- transfer that makes multiple connections can reuse the context and reduce
- memory consumption.
-
- https://github.com/curl/curl/issues/5102
-
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
@@ -339,31 +169,6 @@ problems may have been fixed or changed somewhat since this was written.
https://github.com/curl/curl/issues/8741
-2.14 Secure Transport disabling hostname validation also disables SNI
-
- SNI is the hostname that is sent by the TLS library to the server as part of
- the TLS handshake. Secure Transport does not send SNI when hostname validation
- is disabled. Servers that host multiple websites may not know which
- certificate to serve without SNI or which backend server to connect to. The
- server may serve the certificate of a default server or abort.
-
- If a server aborts a handshake then curl shows error "SSL peer handshake
- failed, the server most likely requires a client certificate to connect".
- In this case the error may also have been caused by lack of SNI.
-
- https://github.com/curl/curl/issues/6347
-
-2.15 Renegotiate from server may cause hang for OpenSSL backend
-
- A race condition has been observed when, immediately after the initial
- handshake, curl has sent an HTTP request to the server and at the same time
- the server has sent a TLS hello request (renegotiate) to curl. Both are
- waiting for the other to respond. OpenSSL is supposed to send a handshake
- response but does not.
-
- https://github.com/curl/curl/issues/6785
- https://github.com/openssl/openssl/issues/14722
-
3. Email protocols
3.1 IMAP SEARCH ALL truncated response
@@ -391,41 +196,11 @@ problems may have been fixed or changed somewhat since this was written.
See https://github.com/curl/curl/issues/4080
-4. Command line
-
-4.1 -J and -O with %-encoded file names
-
- -J/--remote-header-name does not decode %-encoded file names. RFC6266 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.
+3.5 APOP authentication fails on POP3
- 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.
+ See https://github.com/curl/curl/issues/10073
-4.2 -J with -C - fails
-
- 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.
- https://curl.se/bug/view.cgi?id=1169
-
-4.3 --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
+4. Command line
5. Build and portability issues
@@ -443,31 +218,12 @@ problems may have been fixed or changed somewhat since this was written.
run that might be needed only for building libcurl. Further, curl-config
--cflags suffers from the same effects with CFLAGS/CPPFLAGS.
-5.3 curl compiled on OSX 10.13 failed to run on OSX 10.10
-
- See https://github.com/curl/curl/issues/2905
+5.3 building for old macOS fails with gcc
-5.4 Build with statically built dependency
+ Building curl for certain old macOS versions fails when gcc is used. We
+ command using clang in those cases.
- The build scripts in curl (autotools, cmake and others) are 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, we 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 also involve figuring out the dependencies of the dependencies and they
- may vary between platforms and even 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/LDFLAGS
- on the command line.
-
- We welcome help to improve curl's ability to link with static libraries, but
- it is likely a task that we can never fully support.
+ See https://github.com/curl/curl/issues/11441
5.5 cannot handle Unicode arguments in non-Unicode builds on Windows
@@ -482,59 +238,21 @@ problems may have been fixed or changed somewhat since this was written.
https://curl.se/bug/?i=731
https://curl.se/bug/?i=3747
-5.6 make distclean loops forever
-
- Due to an issue (probably) in automake, "make distclean" can end up in a
- never-ending loop.
-
- See https://github.com/curl/curl/issues/7716
-
-5.7 Visual Studio project gaps
-
- The Visual Studio projects lack some features that the autoconf and nmake
- builds offer, such as the following:
-
- - support for zlib and nghttp2
- - use of static runtime libraries
- - add the test suite components
-
- In addition to this the following could be implemented:
+5.6 cygwin: make install installs curl-config.1 twice
- - support for other development IDEs
- - add PATH environment variables for third-party DLLs
-
-5.8 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.
-
- A possibly better way to do these checks would be to keep the pristine LDFLAGS
- even after successful checks and instead add those verified paths to a
- separate variable that only after all library checks have been performed gets
- appended to LDFLAGS.
+ https://github.com/curl/curl/issues/8839
5.9 Utilize Requires.private directives in libcurl.pc
https://github.com/curl/curl/issues/864
-5.10 curl hangs on SMB upload over stdin
-
- See https://github.com/curl/curl/issues/7896
-
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 Windows CI builds
+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
@@ -588,18 +306,6 @@ problems may have been fixed or changed somewhat since this was written.
"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.4 Negotiate and Kerberos V5 need a fake user name
-
- In order to get Negotiate (SPNEGO) authentication to work in HTTP or Kerberos
- V5 in the email protocols, you need to provide a (fake) user name (this
- concerns both curl and the lib) because the code wrongly only considers
- authentication if there's a user name provided by setting
- conn->bits.user_passwd in url.c https://curl.se/bug/view.cgi?id=440 How?
- https://curl.se/mail/lib-2004-08/0182.html A possible solution is to
- either modify this variable to be set or introduce a variable such as
- new conn->bits.want_authentication which is set when any of the authentication
- options are set.
-
6.5 NTLM does not support password with § character
https://github.com/curl/curl/issues/2120
@@ -619,15 +325,6 @@ problems may have been fixed or changed somewhat since this was written.
https://github.com/curl/curl/issues/3267
-6.8 RTSP authentication breaks without redirect support
-
- RTSP authentication broke in 7.66.0. A work-around is to enable RTSP in
- CURLOPT_REDIR_PROTOCOLS. Authentication should however not be considered an
- actual redirect so a "proper" fix needs to be different and not require users
- to allow redirects to RTSP to work.
-
- See https://github.com/curl/curl/pull/4750
-
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
@@ -663,23 +360,6 @@ problems may have been fixed or changed somewhat since this was written.
7. FTP
-7.1 FTP without or slow 220 response
-
- If a connection is made to an FTP server but the server then just never sends
- the 220 response or otherwise is dead slow, libcurl will not acknowledge the
- connection timeout during that phase but only the "real" timeout - which may
- surprise users as it is probably considered to be the connect phase to most
- people. Brought up (and is being misunderstood) in:
- https://curl.se/bug/view.cgi?id=856
-
-7.2 FTP with CONNECT and slow server
-
- When doing FTP over a socks proxy or CONNECT through HTTP proxy and the multi
- interface is used, libcurl will fail if the (passive) TCP connection for the
- data transfer is not more or less instant as the code does not properly wait
- for the connect to be confirmed. See test case 564 for a first shot at a test
- case.
-
7.3 FTP with NOBODY and FAILONERROR
It seems sensible to be able to use CURLOPT_NOBODY and CURLOPT_FAILONERROR
@@ -693,71 +373,6 @@ problems may have been fixed or changed somewhat since this was written.
thus fails to issue the correct command:
https://curl.se/bug/view.cgi?id=635
-7.5 ASCII FTP
-
- FTP ASCII transfers do not follow RFC959. They do not convert the data
- accordingly (not for sending nor for receiving). RFC 959 section 3.1.1.1
- clearly describes how this should be done:
-
- The sender converts the data from an internal character representation to
- the standard 8-bit NVT-ASCII representation (see the Telnet
- specification). The receiver will convert the data from the standard
- form to his own internal form.
-
- Since 7.15.4 at least line endings are converted.
-
-7.6 FTP with NULs in URL parts
-
- FTP URLs passed to curl may contain NUL (0x00) in the RFC 1738 <user>,
- <password>, and <fpath> components, encoded as "%00". The problem is that
- curl_unescape does not detect this, but instead returns a shortened C string.
- From a strict FTP protocol standpoint, NUL is a valid character within RFC
- 959 <string>, so the way to handle this correctly in curl would be to use a
- data structure other than a plain C string, one that can handle embedded NUL
- characters. From a practical standpoint, most FTP servers would not
- meaningfully support NUL characters within RFC 959 <string>, anyway (e.g.,
- Unix pathnames may not contain NUL).
-
-7.7 FTP and empty path parts in the URL
-
- libcurl ignores empty path parts in FTP URLs, whereas RFC1738 states that
- such parts should be sent to the server as 'CWD ' (without an argument). The
- only exception to this rule, is that we knowingly break this if the empty
- part is first in the path, as then we use the double slashes to indicate that
- the user wants to reach the root dir (this exception SHALL remain even when
- this bug is fixed).
-
-7.8 Premature transfer end but healthy control channel
-
- When 'multi_done' is called before the transfer has been completed the normal
- way, it is considered a "premature" transfer end. In this situation, libcurl
- closes the connection assuming it does not know the state of the connection so
- it cannot be reused for subsequent requests.
-
- With FTP however, this is not necessarily true but there are a bunch of
- situations (listed in the ftp_done code) where it *could* keep the connection
- alive even in this situation - but the current code does not. Fixing this would
- allow libcurl to reuse FTP connections better.
-
-7.9 Passive transfer tries only one IP address
-
- 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 should 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
-
-7.10 FTPS needs session reuse
-
- When the control connection is reused for a subsequent transfer, some FTPS
- servers complain about "missing session reuse" for the data channel for the
- second transfer.
-
- https://github.com/curl/curl/issues/4654
-
7.11 FTPS upload data loss with TLS 1.3
During FTPS upload curl does not attempt to read TLS handshake messages sent
@@ -779,19 +394,6 @@ problems may have been fixed or changed somewhat since this was written.
https://github.com/curl/curl/issues/9161
-8. TELNET
-
-8.1 TELNET and time limitations do not work
-
- When using telnet, the time limitation options do not work.
- https://curl.se/bug/view.cgi?id=846
-
-8.2 Microsoft telnet server
-
- There seems to be a problem when connecting to the Microsoft telnet server.
- https://curl.se/bug/view.cgi?id=649
-
-
9. SFTP and SCP
9.1 SFTP does not do CURLOPT_POSTQUOTE correct
@@ -826,6 +428,11 @@ problems may have been fixed or changed somewhat since this was written.
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
@@ -833,21 +440,9 @@ problems may have been fixed or changed somewhat since this was written.
libcurl does not support FTPS over a SOCKS proxy.
-10.4 active FTP over a SOCKS
-
- libcurl does not support active FTP over a SOCKS proxy
-
11. Internals
-11.1 Curl leaks .onion hostnames in DNS
-
- Curl sends DNS requests for hostnames with a .onion TLD. This leaks
- information about what the user is attempting to access, and violates this
- requirement of RFC7686: https://datatracker.ietf.org/doc/html/rfc7686
-
- Issue: https://github.com/curl/curl/issues/543
-
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
@@ -855,24 +450,6 @@ problems may have been fixed or changed somewhat since this was written.
CURLE_COULDNT_CONNECT. But the error buffer set by CURLOPT_ERRORBUFFER
remains empty. Issue: https://github.com/curl/curl/issues/544
-11.3 Disconnects do not do verbose
-
- Due to how libcurl keeps connections alive in the "connection pool" after use
- to potentially transcend the life-time of the initial easy handle that was
- used to drive the transfer over that connection, it uses a *separate* and
- internal easy handle when it shuts down the connection. That separate
- connection might not have the same settings as the original easy handle, and
- in particular it is often note-worthy that it does not have the same VERBOSE
- and debug callbacks setup so that an application will not get the protocol
- data for the disconnect phase of a transfer the same way it got all the other
- data.
-
- This is because the original easy handle might have already been freed at that
- point and the application might not at all be prepared that the callback
- would get called again long after the handle was freed.
-
- See for example https://github.com/curl/curl/issues/6995
-
11.4 HTTP test server 'connection-monitor' problems
The 'connection-monitor' feature of the sws HTTP test server does not work
@@ -888,75 +465,6 @@ problems may have been fixed or changed somewhat since this was written.
See https://github.com/curl/curl/issues/1332 and
https://github.com/curl/curl/issues/4296
-11.7 signal-based resolver timeouts
-
- libcurl built without an asynchronous resolver library uses alarm() to time
- out DNS lookups. When a timeout occurs, this causes libcurl to jump from the
- signal handler back into the library with a sigsetjmp, which effectively
- causes libcurl to continue running within the signal handler. This is
- non-portable and could cause problems on some platforms. A discussion on the
- problem is available at https://curl.se/mail/lib-2008-09/0197.html
-
- Also, alarm() provides timeout resolution only to the nearest second. alarm
- ought to be replaced by setitimer on systems that support it.
-
-11.8 DoH leaks memory after followlocation
-
- https://github.com/curl/curl/issues/4592
-
-11.9 DoH does not inherit all transfer options
-
- 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
-
-11.10 Blocking socket operations in non-blocking API
-
- The list of blocking socket operations is in TODO section "More non-blocking".
-
-11.11 A shared connection cache is not thread-safe
-
- 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
-
-11.14 Multi perform hangs waiting for threaded resolver
-
- If a threaded resolver takes a long time to complete, libcurl can be blocked
- waiting for it for a longer time than expected - and longer than the set
- timeouts.
-
- See https://github.com/curl/curl/issues/2975 and
- https://github.com/curl/curl/issues/4852
-
-11.15 CURLOPT_OPENSOCKETPAIRFUNCTION is missing
-
- When libcurl creates sockets with socketpair(), those are not "exposed" in
- CURLOPT_OPENSOCKETFUNCTION and therefore might surprise and be unknown to
- applications that expect and want all sockets known beforehand. One way to
- address this issue is to introduce a CURLOPT_OPENSOCKETPAIRFUNCTION callback.
-
- https://github.com/curl/curl/issues/5747
-
-11.16 libcurl uses renames instead of locking for atomic operations
-
- For saving cookies, alt-svc and hsts files. This is bad when for example the
- file is stored in a directory where the application has no write permission
- but it has permission for the file.
-
- https://github.com/curl/curl/issues/6882
- https://github.com/curl/curl/pull/6884
-
12. LDAP
12.1 OpenLDAP hangs after returning results
@@ -989,45 +497,27 @@ problems may have been fixed or changed somewhat since this was written.
https://github.com/curl/curl/issues/4261
-12.4 LDAPS with NSS is slow
+12.4 LDAPS requests to ActiveDirectory server hang
- See https://github.com/curl/curl/issues/5874
+ https://github.com/curl/curl/issues/9580
13. TCP/IP
-13.1 --interface for ipv6 binds to unusable IP address
-
- Since IPv6 provides a lot of addresses with different scope, binding to an
- IPv6 address needs to take the proper care so that it does not bind to a
- locally scoped address as that is bound to fail.
-
- https://github.com/curl/curl/issues/686
-
13.2 Trying local ports fails on Windows
- This makes '--local-port [range]' to not work since curl can't properly
- detect if a port is already in use, so it'll try the first port, use that and
+ 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
-14. DICT
-
-14.1 DICT responses show the underlying protocol
-
- When getting a DICT response, the protocol parts of DICT are not stripped off
- from the output.
-
- https://github.com/curl/curl/issues/1809
-
15. CMake
-15.1 use correct SONAME
+15.1 cmake outputs: no version information available
- The autotools build sets the SONAME properly according to VERSIONINFO in
- lib/Makefile.am and so should cmake to make comparable build.
+ Something in the SONAME generation seems to be wrong in the cmake build.
- See https://github.com/curl/curl/pull/5935
+ https://github.com/curl/curl/issues/11158
15.2 support build with GnuTLS
@@ -1041,12 +531,6 @@ problems may have been fixed or changed somewhat since this was written.
it being there already. This makes the --manual option not work and test
cases like 1139 cannot function.
-15.5 build on Linux links libcurl to libdl
-
- ... which it should not need to!
-
- See https://github.com/curl/curl/issues/6165
-
15.6 uses -lpthread instead of Threads::Threads
See https://github.com/curl/curl/issues/6166
@@ -1066,17 +550,6 @@ problems may have been fixed or changed somewhat since this was written.
See https://github.com/curl/curl/issues/6169
-15.9 cert paths autodetected when cross-compiling
-
- The autotools build disables the ca_path/ca_bundle detection when
- cross-compiling. The cmake build keeps doing the detection.
-
- See https://github.com/curl/curl/issues/6178
-
-15.10 libpsl is not supported
-
- See https://github.com/curl/curl/issues/6214
-
15.11 ExternalProject_Add does not set CURL_CA_PATH
CURL_CA_BUNDLE and CURL_CA_PATH are not set properly when cmake's
@@ -1084,10 +557,6 @@ problems may have been fixed or changed somewhat since this was written.
See https://github.com/curl/curl/issues/6313
-15.12 cannot enable LDAPS on Windows
-
- See https://github.com/curl/curl/issues/6284
-
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
@@ -1099,28 +568,17 @@ problems may have been fixed or changed somewhat since this was written.
https://github.com/curl/curl/issues/6904
-15.14 cmake build is not thread-safe
+16. aws-sigv4
- The cmake build does not check for and verify presence of a working Atomic
- type, which then makes curl_global_init() to not build thread-safe on
- non-Windows platforms.
+16.1 aws-sigv4 does not sign requests with * correctly
- Bug: https://github.com/curl/curl/issues/8973
- Partial fix: https://github.com/curl/curl/pull/8982
+ https://github.com/curl/curl/issues/7559
-16. Applications
+16.6 aws-sigv4 does not behave well with AWS VPC Lattice
-17. HTTP/2
+ https://github.com/curl/curl/issues/11007
-17.1 Excessive HTTP/2 packets with TCP_NODELAY
-
- Because of how curl sets TCP_NODELAY by default, HTTP/2 requests are issued
- using more separate TCP packets than it would otherwise need to use. This
- means spending more bytes than it has to. Just disabling TCP_NODELAY for
- HTTP/2 is also not the correct fix because that then makes the outgoing
- packets to get delayed.
-
- See https://github.com/curl/curl/issues/6363
+17. HTTP/2
17.2 HTTP/2 frames while in the connection pool kill reuse
@@ -1139,33 +597,8 @@ problems may have been fixed or changed somewhat since this was written.
See https://github.com/curl/curl/issues/5119
-17.4 Connection failures with parallel HTTP/2
-
- See https://github.com/curl/curl/issues/5611
-
-17.5 HTTP/2 connections through HTTPS proxy frequently stall
-
- See https://github.com/curl/curl/issues/6936
-
18. HTTP/3
-18.1 If the HTTP/3 server closes connection during upload curl hangs
-
- See https://github.com/curl/curl/issues/6606
-
-18.2 Transfer closed with n bytes remaining to read
-
- HTTP/3 transfers with the Jetty HTTP/3 server seem to not work.
-
- https://github.com/curl/curl/issues/8523
-
-18.4 timeout when reusing a http3 connection
-
- HTTP/3 with quiche seems to not work and always timeout a subsequent transfer
- that reuses an already established connection
-
- https://github.com/curl/curl/issues/8764
-
-18.9 connection migration does not work
+18.1 connection migration does not work
https://github.com/curl/curl/issues/7695
diff --git a/docs/MAIL-ETIQUETTE b/docs/MAIL-ETIQUETTE
index ccd3e01f9..2dcf9cb89 100644
--- a/docs/MAIL-ETIQUETTE
+++ b/docs/MAIL-ETIQUETTE
@@ -120,7 +120,7 @@ MAIL ETIQUETTE
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's a footer
+ 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.
diff --git a/docs/MQTT.md b/docs/MQTT.md
index 0f034f72e..660ff29a8 100644
--- a/docs/MQTT.md
+++ b/docs/MQTT.md
@@ -7,11 +7,11 @@ Doing a "POST" publishes the post data to the topic and exits.
Example subscribe:
- curl mqtt://host/home/bedroom/temp
+ curl mqtt://host.home/bedroom/temp
Example publish:
- curl -d 75 mqtt://host/home/bedroom/dimmer
+ curl -d 75 mqtt://host.home/bedroom/dimmer
## What does curl deliver as a response to a subscribe
diff --git a/docs/Makefile.am b/docs/Makefile.am
index 0d565796f..9190b4411 100644
--- a/docs/Makefile.am
+++ b/docs/Makefile.am
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -55,10 +55,12 @@ EXTRA_DIST = \
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 \
@@ -84,7 +86,7 @@ EXTRA_DIST = \
RELEASE-PROCEDURE.md \
RUSTLS.md \
ROADMAP.md \
- SECURITY-PROCESS.md \
+ SECURITY-ADVISORY.md \
SSL-PROBLEMS.md \
SSLCERTS.md \
THANKS \
@@ -92,6 +94,7 @@ EXTRA_DIST = \
TheArtOfHttpScripting.md \
URL-SYNTAX.md \
VERSIONS.md \
+ VULN-DISCLOSURE-POLICY.md \
WEBSOCKET.md
MAN2HTML= roffit $< >$@
@@ -108,7 +111,8 @@ SUFFIXES = .1 .html .pdf
# 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" $@; fi
+ $(INSTALL_DATA) "$(srcdir)/curl.1" $@ \
+ && touch -r "$(srcdir)/curl.1" $@; fi
cd cmdline-opts && $(MAKE)
html: $(HTMLPAGES)
diff --git a/docs/Makefile.in b/docs/Makefile.in
index 2c3fb230c..78be3afd7 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -21,7 +21,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -119,7 +119,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.m4 \
$(top_srcdir)/m4/curl-confopts.m4 \
$(top_srcdir)/m4/curl-functions.m4 \
$(top_srcdir)/m4/curl-gnutls.m4 \
- $(top_srcdir)/m4/curl-mbedtls.m4 $(top_srcdir)/m4/curl-nss.m4 \
+ $(top_srcdir)/m4/curl-mbedtls.m4 \
$(top_srcdir)/m4/curl-openssl.m4 \
$(top_srcdir)/m4/curl-override.m4 \
$(top_srcdir)/m4/curl-reentrant.m4 \
@@ -261,6 +261,8 @@ am__relativize = \
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APACHECTL = @APACHECTL@
+APXS = @APXS@
AR = @AR@
AR_FLAGS = @AR_FLAGS@
AS = @AS@
@@ -269,6 +271,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@
+CADDY = @CADDY@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -330,6 +333,8 @@ HAVE_LIBZ = @HAVE_LIBZ@
HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
HAVE_PROTO_BSDSOCKET_H = @HAVE_PROTO_BSDSOCKET_H@
HAVE_ZSTD = @HAVE_ZSTD@
+HTTPD = @HTTPD@
+HTTPD_NGHTTPX = @HTTPD_NGHTTPX@
IDN_ENABLED = @IDN_ENABLED@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -357,7 +362,6 @@ MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
NROFF = @NROFF@
-NSS_LIBS = @NSS_LIBS@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
@@ -388,6 +392,7 @@ SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@
SUPPORT_FEATURES = @SUPPORT_FEATURES@
SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_NGHTTPX = @TEST_NGHTTPX@
USE_ARES = @USE_ARES@
USE_BEARSSL = @USE_BEARSSL@
USE_GNUTLS = @USE_GNUTLS@
@@ -401,9 +406,8 @@ USE_NGHTTP2 = @USE_NGHTTP2@
USE_NGHTTP3 = @USE_NGHTTP3@
USE_NGTCP2 = @USE_NGTCP2@
USE_NGTCP2_CRYPTO_GNUTLS = @USE_NGTCP2_CRYPTO_GNUTLS@
-USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@
+USE_NGTCP2_CRYPTO_QUICTLS = @USE_NGTCP2_CRYPTO_QUICTLS@
USE_NGTCP2_CRYPTO_WOLFSSL = @USE_NGTCP2_CRYPTO_WOLFSSL@
-USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_RUSTLS = @USE_RUSTLS@
@@ -504,10 +508,12 @@ EXTRA_DIST = \
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 \
@@ -533,7 +539,7 @@ EXTRA_DIST = \
RELEASE-PROCEDURE.md \
RUSTLS.md \
ROADMAP.md \
- SECURITY-PROCESS.md \
+ SECURITY-ADVISORY.md \
SSL-PROBLEMS.md \
SSLCERTS.md \
THANKS \
@@ -541,6 +547,7 @@ EXTRA_DIST = \
TheArtOfHttpScripting.md \
URL-SYNTAX.md \
VERSIONS.md \
+ VULN-DISCLOSURE-POLICY.md \
WEBSOCKET.md
MAN2HTML = roffit $< >$@
@@ -914,7 +921,8 @@ uninstall-man: uninstall-man1
# 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" $@; fi
+ $(INSTALL_DATA) "$(srcdir)/curl.1" $@ \
+ && touch -r "$(srcdir)/curl.1" $@; fi
cd cmdline-opts && $(MAKE)
html: $(HTMLPAGES)
diff --git a/docs/PARALLEL-TRANSFERS.md b/docs/PARALLEL-TRANSFERS.md
index 8ab477862..337fab5fa 100644
--- a/docs/PARALLEL-TRANSFERS.md
+++ b/docs/PARALLEL-TRANSFERS.md
@@ -1,6 +1,6 @@
# Parallel transfers
-curl 7.66.0 introduces support for doing multiple transfers simultaneously; in
+curl 7.66.0 introduced support for doing multiple transfers simultaneously; in
parallel.
## -Z, --parallel
@@ -48,11 +48,3 @@ 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.
-
-## Feedback
-
-This is early days for parallel transfer support. Keep your eyes open for
-unintended side effects or downright bugs.
-
-Tell us what you think and how you think we could improve this feature!
-
diff --git a/docs/RELEASE-PROCEDURE.md b/docs/RELEASE-PROCEDURE.md
index 776bebe83..0ce02fbbc 100644
--- a/docs/RELEASE-PROCEDURE.md
+++ b/docs/RELEASE-PROCEDURE.md
@@ -66,27 +66,27 @@ curl release scheduling
Release Cycle
-------------
-We do releases every 8 weeks on Wednesdays. If critical problems arise, we can
-insert releases outside of the schedule or we can move the release date - but
-this is rare.
+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 release cycle is split in two 4-week periods.
+Each 8 week (56 days) release cycle is divided into three distinct periods:
-- During the first 4 weeks after a release, 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 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 second 4-week period we do not merge any features or changes, we
- then only focus on fixing bugs and polishing things to make a solid coming
- 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.
-- After a regular procedure-following release (made on Wednesdays), the
- feature window remains closed until the following Monday in case of special
- actions or patch releases etc.
+- 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 away traveling,
-the release date can be moved forwards or backwards a full week. This is then
+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
@@ -107,12 +107,11 @@ Coming dates
Based on the description above, here are some planned release dates (at the
time of this writing):
-- October 26, 2022 (7.86.0)
-- December 21, 2022
-- February 15, 2023 (last version 7 release, no feature window after)
-- March 20, 2023 (8.0.0 - curl 25 years)
-- April 17, 2023
-- July 12, 2023
-- September 6, 2023
-- November 1, 2023
-- December 27, 2023
+- 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/docs/ROADMAP.md b/docs/ROADMAP.md
index e48c21b58..464293834 100644
--- a/docs/ROADMAP.md
+++ b/docs/ROADMAP.md
@@ -21,4 +21,4 @@ See: https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-svcb-https-02
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 https://github.com/curl/curl/pull/4011
+ Initial work exists in [PR 4011](https://github.com/curl/curl/pull/4011)
diff --git a/docs/RUSTLS.md b/docs/RUSTLS.md
index 4b49b5cf7..7a0d806b6 100644
--- a/docs/RUSTLS.md
+++ b/docs/RUSTLS.md
@@ -1,9 +1,9 @@
# Rustls
-[Rustls is a TLS backend written in Rust.](https://docs.rs/rustls/). Curl can
+[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.8.2 of rustls-ffi.
+version of curl depends on version v0.10.0 of rustls-ffi.
# Building with rustls
@@ -12,7 +12,7 @@ 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.8.2
+ % git clone https://github.com/rustls/rustls-ffi -b v0.10.0
% cd rustls-ffi
% make
% make DESTDIR=${HOME}/rustls-ffi-built/ install
diff --git a/docs/SECURITY-ADVISORY.md b/docs/SECURITY-ADVISORY.md
new file mode 100644
index 000000000..0ddc38b90
--- /dev/null
+++ b/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/docs/SSL-PROBLEMS.md b/docs/SSL-PROBLEMS.md
index 29f400a59..afe42506c 100644
--- a/docs/SSL-PROBLEMS.md
+++ b/docs/SSL-PROBLEMS.md
@@ -66,7 +66,7 @@
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
- advice against building curl to use Schannel on really old Windows versions.
+ 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)
diff --git a/docs/SSLCERTS.md b/docs/SSLCERTS.md
index 7f2f73557..4094e2fec 100644
--- a/docs/SSLCERTS.md
+++ b/docs/SSLCERTS.md
@@ -127,26 +127,6 @@ 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 NSS
----------------------------------
-
-If libcurl was built with NSS support, then depending on the OS distribution,
-it is probably required to take some additional steps to use the system-wide
-CA cert db. Red Hat ships with an additional module, libnsspem.so, which
-enables NSS to read the OpenSSL PEM CA bundle. On openSUSE you can install
-p11-kit-nss-trust which makes NSS use the system wide CA certificate
-store. NSS also has a new [database
-format](https://wiki.mozilla.org/NSS_Shared_DB).
-
-Starting with version 7.19.7, libcurl automatically adds the `sql:` prefix to
-the certificate database directory (either the set default `/etc/pki/nssdb` or
-the directory configured with the `SSL_DIR` environment variable). To check
-which certificate database format your distribution provides, examine the
-default certificate database location: `/etc/pki/nssdb`; the new certificate
-database format can be identified by the filenames `cert9.db`, `key4.db`,
-`pkcs11.txt`; filenames of older versions are `cert8.db`, `key3.db`,
-`secmod.db`.
-
Certificate Verification with Schannel and Secure Transport
-----------------------------------------------------------
diff --git a/docs/THANKS b/docs/THANKS
index b898341c9..88d924f63 100644
--- a/docs/THANKS
+++ b/docs/THANKS
@@ -22,6 +22,8 @@ Abhinav Singh
Abram Pousada
accountantM on github
AceCrow on Github
+ad0p on github
+Adam Averay
Adam Barclay
Adam Brown
Adam Coyne
@@ -69,6 +71,7 @@ Alessandro Vesely
Alex aka WindEagle
Alex Baines
Alex Bligh
+Alex Bozarth
Alex Chan
Alex Crichton
Alex Fishman
@@ -76,6 +79,7 @@ Alex Gaynor
Alex Grebenschikov
Alex Gruz
Alex Kiernan
+Alex Klyubin
Alex Konev
Alex Malinovich
Alex Mayorga
@@ -92,6 +96,7 @@ Alexander Beedie
Alexander Chuykov
Alexander Dyagilev
Alexander Elgert
+Alexander Jaeger
Alexander Kanavin
Alexander Klauer
Alexander Kourakos
@@ -104,11 +109,14 @@ 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
@@ -116,11 +124,16 @@ 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
@@ -140,6 +153,7 @@ Andreas Damm
Andreas Falkenhahn
Andreas Farber
Andreas Fischer
+Andreas Huebner
Andreas Kostyrka
Andreas Malzahn
Andreas Ntaflos
@@ -184,14 +198,17 @@ 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
@@ -202,7 +219,9 @@ Anthony Ramine
Anthony Shaw
Antoine Aubert
Antoine Calando
+Antoine du Hamel
Antoine Pietri
+Antoine Pitrou
Anton Bychkov
Anton Gerasimov
Anton Kalmykov
@@ -212,6 +231,8 @@ 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
@@ -220,6 +241,7 @@ Armel Asselin
Arnaud Compan
Arnaud Ebalard
Arnaud Rebillout
+Arne Soete
Aron Bergman
Aron Rotteveel
Artak Galoyan
@@ -233,7 +255,9 @@ Ashish Shukla
Ashwin Metpalli
Ask Bjørn Hansen
Askar Safin
+AtariDreams on github
Ates Goral
+atjg on github
Augustus Saunders
Austin Green
Avery Fay
@@ -241,15 +265,18 @@ 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
@@ -265,6 +292,7 @@ bdry on github
beckenc on github
Ben Boeckel
Ben Darnell
+Ben Fritz
Ben Greear
Ben Kohler
Ben Madsen
@@ -283,6 +311,7 @@ Benjamin Riefenstahl
Benjamin Ritcey
Benjamin Sergeant
Benoit Neil
+Benoit Pierre
Benoit Sigoure
Bernard Leak
Bernard Spil
@@ -307,12 +336,14 @@ 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
@@ -323,6 +354,9 @@ Bob Schader
bobmitchell1956 on github
Bodo Bergmann
Bogdan Nicula
+boilingoden
+Boris Kuschel
+Boris Okunskiy
Boris Rasin
Boris Verkhovskiy
Brad Burdick
@@ -337,6 +371,7 @@ bramus on github
Brandon Casey
Brandon Dong
Brandon Wang
+BratSinot on github
Brendan Jurd
Brent Beardsley
Brian Akins
@@ -347,8 +382,11 @@ 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
@@ -360,6 +398,7 @@ BrumBrum on hackerone
Bruno Baguette
Bruno de Carvalho
Bruno Grasselli
+Bruno Henrique Batista Cruz da Silva
Bruno Thomsen
Bryan Henderson
Bryan Kemp
@@ -372,6 +411,8 @@ Bylon2 on github
Byrial Jensen
Caleb Raitto
Calvin Buckley
+calvin2021y on github
+Cameron Blomquist
Cameron Cawley
Cameron Kaiser
Cameron MacMinn
@@ -387,8 +428,10 @@ 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
@@ -401,11 +444,14 @@ 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
@@ -420,10 +466,12 @@ 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
@@ -434,6 +482,7 @@ Christian Vogt
Christian Weisgerber
Christoph Krey
Christoph M. Becker
+Christoph Reiter
Christophe Demory
Christophe Dervieux
Christophe Legry
@@ -451,11 +500,13 @@ 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
@@ -465,13 +516,17 @@ 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
@@ -509,7 +564,6 @@ Dan Becker
Dan Cristian
Dan Donahue
Dan Fandrich
-Dan Jacobson
Dan Johnson
Dan Kenigsberg
Dan Locks
@@ -524,6 +578,7 @@ Daniel Black
Daniel Carpenter
Daniel Cater
Daniel Egger
+Daniel Faust
Daniel Gustafsson
Daniel Hallberg
Daniel Hwang
@@ -555,6 +610,7 @@ Darryl House
Darshan Mody
Darío Hereñú
dasimx on github
+Dave Cottlehuber
Dave Dribin
Dave Halbakken
Dave Hamilton
@@ -601,6 +657,7 @@ David Sanderson
David Schweikert
David Shaw
David Strauss
+David Suter
David Tarendash
David Thiel
David Walser
@@ -608,9 +665,13 @@ 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
@@ -621,6 +682,7 @@ Denis Ollier
Dennis Clarke
Dennis Felsing
Derek Higgins
+Derzsi Dániel
Desmond O. Chang
destman on github
Detlef Schmier
@@ -639,19 +701,24 @@ 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
@@ -696,9 +763,11 @@ 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
@@ -706,18 +775,21 @@ 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
@@ -726,6 +798,7 @@ elelel on github
elephoenix on github
Eli Schwartz
Elia Tufarolo
+Elliot Killick
Elliot Saba
Ellis Pritchard
Elmira A Semenova
@@ -738,11 +811,16 @@ 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
@@ -753,6 +831,7 @@ Eric Lavigne
Eric Lubin
Eric Melville
Eric Mertens
+Eric Murphy
Eric Musser
Eric Rautman
Eric Rescorla
@@ -762,6 +841,7 @@ Eric S. Raymond
Eric Sauvageau
Eric Thelin
Eric Vergnaud
+Eric Vigeant
Eric Wong
Eric Wu
Eric Young
@@ -776,6 +856,7 @@ Ernest Beinrohr
Ernst Sjöstrand
Erwan Legrand
Erwin Authried
+Esdras de Morais da Silva
Estanislau Augé-Pujadas
Ethan Glasser Camp
Etienne Simard
@@ -799,12 +880,17 @@ 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
@@ -815,6 +901,7 @@ Feng Tu
Fernando Muñoz
Filip Lundgren
Filip Salomonsson
+finkjsc on github
Firefox OS
Flameborn on github
Flavio Medeiros
@@ -841,6 +928,7 @@ Frank Ticheler
Frank Van Uffelen
FrantiÅ¡ek KuÄera
François Charlier
+François Michel
François Rigault
Frazer Smith
Fred Machado
@@ -852,7 +940,10 @@ 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
@@ -882,6 +973,7 @@ George Liu
Gerd v. Egidy
Gergely Nagy
Gerhard Herre
+Gerome Fournier
Gerrit Bruchhäuser
Gerrit Renker
Ghennadi Procopciuc
@@ -906,11 +998,14 @@ 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
@@ -923,14 +1018,19 @@ 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
@@ -943,12 +1043,14 @@ 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
@@ -959,6 +1061,7 @@ Hao Wu
Hardeep Singh
Haris Okanovic
Harold Stuart
+Harry Mallon
Harry Sarson
Harry Sintonen
Harshal Pradhan
@@ -972,6 +1075,7 @@ Helge Klein
Helmut K. C. Tessarek
Helwing Lutz
Hendrik Visage
+Henning Schild
Henri Gomez
Henrik Gaßmann
Henrik Holst
@@ -980,10 +1084,13 @@ 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
@@ -995,6 +1102,7 @@ htasta on github
Hubert Kario
Hugh Macdonald
Hugo van Kemenade
+humbleacolyte
Huzaifa Sidhpurwala
huzunhao on github
hydra3333 on github
@@ -1009,12 +1117,15 @@ 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
@@ -1023,6 +1134,7 @@ Ilguiz Latypov
Ilja van Sprundel
Illarion Taev
illusory-dream on github
+Ilmari Lauhakangas
Ilya Kosarev
imilli on github
Immanuel Gregoire
@@ -1050,9 +1162,11 @@ 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
@@ -1060,7 +1174,9 @@ Jactry Zeng
Jad Chamcham
Jaime Fullaondo
jakirkham on github
+Jakob Hirsch
Jakub Bochenski
+Jakub Jelen
Jakub Wilk
Jakub Zakrzewski
James Atwill
@@ -1074,8 +1190,10 @@ James Fuller
James Gallagher
James Griffiths
James Housley
+James Keast
James Knight
James Le Cuirot
+James Lucas
James MacMillan
James Slaughter
Jamie Lokier
@@ -1084,8 +1202,10 @@ Jamie Wilkinson
Jan Alexander Steffens
Jan Chren
Jan Ehrhardt
+Jan Engelhardt
Jan Koen Annot
Jan Kunder
+Jan Macku
Jan Mazur
Jan Schaumann
Jan Schmidt
@@ -1094,6 +1214,7 @@ Jan Venekamp
Jan Verbeek
Jan-Piet Mens
JanB on github
+Janne Blomqvist
Janne Johansson
Jared Jennings
Jared Lundell
@@ -1116,6 +1237,8 @@ Jay Austin
Jay Dommaschk
Jayesh A Shah
Jaz Fresh
+JazJas on github
+jbgoog on github
Jean Fabrice
Jean Gressmann
Jean Jacques Drouin
@@ -1140,6 +1263,7 @@ Jeff Weber
Jeffrey Tolar
Jeffrey Walton
jeffrson on github
+Jelle van der Waa
Jenny Heino
Jens Finkhaeuser
Jens Rantil
@@ -1159,6 +1283,7 @@ Jeroen Ooms
Jerome Mao
Jerome Muffat-Meridol
Jerome Robert
+Jerome St-Louis
Jerome Vouillon
Jerry Krinock
Jerry Wu
@@ -1170,12 +1295,14 @@ 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
@@ -1220,6 +1347,8 @@ John E. Malmberg
John Gardiner Myers
John H. Ayad
John Hascall
+John Haugabook
+John Hawthorn
John Janssen
John Joseph Bachir
John Kelly
@@ -1231,11 +1360,14 @@ 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
@@ -1254,6 +1386,7 @@ Jon Torrey
Jon Travis
Jon Turner
Jon Wilkes
+Jonas Bülow
Jonas Forsman
Jonas Haag
Jonas Minnberg
@@ -1276,10 +1409,14 @@ 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
@@ -1289,6 +1426,7 @@ Josue Andrade Gomes
José Joaquín Atria
Jozef Kralik
Juan Barreto
+Juan Cruz Viotti
Juan F. Codagnone
Juan Ignacio Hervás
Juan RP
@@ -1305,14 +1443,17 @@ 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
@@ -1320,9 +1461,11 @@ 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
@@ -1341,15 +1484,20 @@ 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
@@ -1361,10 +1509,12 @@ 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
@@ -1374,12 +1524,14 @@ 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
@@ -1410,12 +1562,15 @@ 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
@@ -1429,11 +1584,13 @@ 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
@@ -1478,16 +1635,23 @@ 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
@@ -1499,6 +1663,7 @@ Ludek Finstrle
Ludovico Cavedon
Ludwig Nussel
Lukas Ruzicka
+Lukas Tribus
Lukasz Czekierda
lukaszgn on github
Luke Amery
@@ -1514,14 +1679,19 @@ 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
@@ -1548,6 +1718,7 @@ Marcelo Juchem
Marcin Adamski
Marcin Gryszkalis
Marcin Konicki
+Marcin Rataj
Marco Deckel
Marco G. Salvagno
Marco Kamner
@@ -1558,19 +1729,24 @@ 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
@@ -1582,13 +1758,16 @@ 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
@@ -1603,12 +1782,14 @@ 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
@@ -1617,9 +1798,12 @@ 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
@@ -1629,6 +1813,7 @@ Mats Lindestam
Matt Arsenault
Matt Ford
Matt Holt
+Matt Jolly
Matt Kraai
Matt McClure
Matt Veenstra
@@ -1652,6 +1837,7 @@ Matus Uzak
Maurice Barnum
Mauro Iorio
Mauro Rappa
+Maurício Meneghini Fauth
Max Dymond
Max Katsev
Max Kellermann
@@ -1660,6 +1846,7 @@ Max Mehl
Max Peal
Max Savenkov
Max Zettlmeißl
+Maxim Dzhura
Maxim Ivanov
Maxim Perenesenko
Maxim Prohorov
@@ -1675,6 +1862,7 @@ Melissa Mears
Melroy van den Berg
Mert Yazıcıoğlu
Mettgut Jamalla
+Micah Snyder)
Michael Afanasiev
Michael Anti
Michael Baentsch
@@ -1726,6 +1914,7 @@ Michał Fita
Michał Górny
Michał Janiszewski
Michał Kowalczyk
+Michał Petryka
Michał Piechowski
Michel Promonet
Michele Bini
@@ -1740,6 +1929,7 @@ Mike Bytnar
Mike Crowe
Mike Dobbs
Mike Dowell
+Mike Duglas
Mike Frysinger
Mike Gelfand
Mike Giancola
@@ -1752,6 +1942,7 @@ Mike Power
Mike Protts
Mike Revi
Mike Tzou
+Mikhail Kuznetsov
Miklos Nemeth
Miloš Ljumović
Mingliang Zhu
@@ -1762,6 +1953,7 @@ Mischa Salle
Mitz Wark
mkzero on github
modbw on github
+Mohamed Daahir
Mohamed Lrhazi
Mohamed Osama
Mohammad AlSaleh
@@ -1770,6 +1962,7 @@ Mohammed Naser
Mohun Biswas
momala454 on github
Momoka Yamamoto
+MonkeybreadSoftware on github
moohoorama on github
Morten Minde Neergaard
Mostyn Bramley-Moore
@@ -1777,8 +1970,10 @@ 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
@@ -1786,8 +1981,10 @@ 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
@@ -1807,12 +2004,14 @@ 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
@@ -1820,8 +2019,10 @@ 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
@@ -1829,7 +2030,9 @@ 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
@@ -1843,10 +2046,12 @@ 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
@@ -1854,32 +2059,41 @@ 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
@@ -1887,13 +2101,18 @@ 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
@@ -1937,10 +2156,13 @@ 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
@@ -1951,6 +2173,8 @@ Pawel A. Gajda
Pawel Kierski
Paweł Kowalski
Paweł Wegner
+PBudmark on github
+Pedro Henrique
Pedro Larroy
Pedro Monreal
Pedro Neves
@@ -2000,13 +2224,17 @@ 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
@@ -2022,6 +2250,7 @@ Pierrick Charron
Piotr Dobrogost
Piotr Komborski
Po-Chuan Hsieh
+Pontakorn Prasertsuk
Pontus Lundkvist
Pooyan McSporran
Poul T Lomholt
@@ -2032,8 +2261,10 @@ 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
@@ -2043,8 +2274,10 @@ 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
@@ -2056,6 +2289,7 @@ Rainer Canavan
Rainer Jung
Rainer Koenig
Rainer Müller
+Raito Bezarius
Rajesh Naganathan
Rajkumar Mandal
Ralf S. Engelschall
@@ -2065,6 +2299,7 @@ Ralph Mitchell
Ram Krushna Mishra
ramsay-jones on github
Ran Mozes
+RanBarLavie on github
Randall S. Becker
Randolf J
Randy Armstrong
@@ -2126,6 +2361,7 @@ Richard Moore
Richard Prescott
Richard Silverman
Richard van den Berg
+Richard W.M. Jones
Richard Whitehouse
Richy Kim
Rici Lake
@@ -2141,11 +2377,13 @@ 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
@@ -2166,6 +2404,8 @@ Robert Olson
Robert Prag
Robert Ronto
Robert Schumann
+Robert Simpson
+Robert Southee
Robert Weaver
Robert Wruck
Robin A. Meade
@@ -2173,6 +2413,7 @@ Robin Cornelius
Robin Douine
Robin Johnson
Robin Kay
+Robin Marx
Robson Braga Araujo
Rod Widdowson
Rodger Combs
@@ -2198,10 +2439,12 @@ 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
@@ -2210,9 +2453,11 @@ 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
@@ -2227,17 +2472,21 @@ 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
@@ -2245,6 +2494,7 @@ Samuel Marks
Samuel Surtees
Samuel Thibault
Samuel Tranchet
+SandakovMM on github
Sander Gates
Sandor Feldi
Sandro Jaeckel
@@ -2256,6 +2506,7 @@ Saran Neti
Sascha Swiercy
Sascha Zengler
Satadru Pramanik
+Satana de Sant'Ana
Saul good
Saurav Babu
sayrer on github
@@ -2265,6 +2516,7 @@ Scott Barrett
Scott Cantor
Scott Davis
Scott McCreary
+sd0 on hackerone
Sean Boudreau
Sean Burford
Sean MacLennan
@@ -2277,12 +2529,18 @@ 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
@@ -2290,8 +2548,11 @@ 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
@@ -2309,12 +2570,14 @@ 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
@@ -2328,11 +2591,15 @@ 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
@@ -2349,6 +2616,7 @@ Stan Hu
Stan van de Burgt
Stanislav Ivochkin
Stanislav Zidek
+Stanley Wucw
Stathis Kapnidis
Stav Nir
steelman on github
@@ -2363,6 +2631,7 @@ Stefan Karpinski
Stefan Krause
Stefan Neis
Stefan Strogin
+Stefan Talpalaru
Stefan Teleman
Stefan Tomanek
Stefan Ulrich
@@ -2373,6 +2642,7 @@ steini2000 on github
Stepan Broz
Stepan Efremov
Stephan Bergmann
+Stephan Guilloux
Stephan Lagerholm
Stephan Mühlstrasser
Stephan Szabo
@@ -2388,6 +2658,7 @@ Sterling Hughes
Steve Green
Steve H Truong
Steve Havelka
+Steve Herrell
Steve Holme
Steve Lhomme
Steve Little
@@ -2395,6 +2666,7 @@ Steve Marx
Steve Oliphant
Steve Roskowski
Steve Walch
+Steven Allen
Steven Bazyl
Steven G. Johnson
Steven Gu
@@ -2411,6 +2683,7 @@ SumatraPeter on github
Sune Ahlgren
Sunny Bean
Sunny Purushe
+SuperIlu on github
Sven Anders
Sven Blumenstein
Sven Neuhaus
@@ -2420,6 +2693,7 @@ swalkaus at yahoo.com
sylgal on github
Sylvestre Ledru
Symeon Paraschoudis
+Sébastien Helleu
Sébastien Willemijns
T. Bharath
T. Yamada
@@ -2461,10 +2735,13 @@ 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
@@ -2475,6 +2752,7 @@ Tim Chen
Tim Costello
Tim Harder
Tim Heckman
+Tim Hill
Tim Mcdonough
Tim Newsome
Tim Rühsen
@@ -2484,6 +2762,7 @@ Tim Stack
Tim Starling
Tim Tassonis
Tim Verhoeven
+Timmy Schierling
Timo Lange
Timo Sirainen
Timotej Lazar
@@ -2553,6 +2832,7 @@ tonystz on Github
Toon Verwaest
Tor Arntsen
Torben Dannhauer
+Torben Dury
Torsten Foertsch
Toshio Kuratomi
Toshiyuki Maezawa
@@ -2564,17 +2844,21 @@ 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
@@ -2597,6 +2881,7 @@ Vicente Garcia
Victor Magierski
Victor Snezhko
Victor Vieux
+VictorVG on github
Vijay Panghal
Vikram Saxena
Viktor Szakats
@@ -2610,6 +2895,7 @@ Vincent Le Normand
Vincent Penquerc'h
Vincent Sanders
Vincent Torri
+violetlige on github
vitaha85 on github
Vitaly Varyvdin
vl409 on github
@@ -2621,6 +2907,7 @@ Vladimir Lazarenko
Vladimir Panteleev
Vladimir Varlamov
Vlastimil OvÄáÄík
+vlkl-sap on github
vlubart on github
Vojtech Janota
Vojtech Minarik
@@ -2628,14 +2915,19 @@ 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
@@ -2647,6 +2939,7 @@ Wesley Miaw
Wez Furlong
Wham Bang
Wilfredo Sanchez
+Wilhelm von Thiele
Will Dietz
Will Roberts
Willem Hoek
@@ -2654,6 +2947,7 @@ Willem Sparreboom
William A. Rowe Jr
William Ahern
William Desportes
+William Tang
wmsch on github
wncboy on github
Wojciech Zwiefka
@@ -2669,12 +2963,16 @@ 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
@@ -2698,11 +2996,14 @@ 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
@@ -2711,11 +3012,14 @@ 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
@@ -2734,4 +3038,7 @@ zzq1015 on github
ウã•ã‚“
ä¸ç¡®å®š
加藤éƒä¹‹
+å—宫雪çŠ
+左潇峰
梦终无痕
+ç©ä¸¹å°¼ Dan Jacobson
diff --git a/docs/TODO b/docs/TODO
index 329104435..06162c8bb 100644
--- a/docs/TODO
+++ b/docs/TODO
@@ -23,7 +23,6 @@
1.4 alt-svc sharing
1.5 get rid of PATH_MAX
1.6 native IDN support on macOS
- 1.7 Support HTTP/2 for HTTP(S) proxies
1.8 CURLOPT_RESOLVE for any port number
1.9 Cache negative name resolves
1.10 auto-detect proxy
@@ -41,10 +40,11 @@
1.23 Offer API to flush the connection pool
1.25 Expose tried IP addresses that failed
1.28 FD_CLOEXEC
- 1.29 Upgrade to websockets
+ 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
@@ -68,10 +68,11 @@
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 CONNNECT response
- 5.2 Set custom client ip when using haproxy protocol
+ 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
@@ -99,6 +100,7 @@
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
@@ -120,7 +122,7 @@
13.8 Support DANE
13.9 TLS record padding
13.10 Support Authority Information Access certificate extension (AIA)
- 13.11 Support intermediate & root pinning for PINNEDPUBLICKEY
+ 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
@@ -169,6 +171,9 @@
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
@@ -176,6 +181,7 @@
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
@@ -183,7 +189,7 @@
20.3 more protocols supported
20.4 more platforms supported
20.5 Add support for concurrent connections
- 20.6 Use the RFC6265 test suite
+ 20.6 Use the RFC 6265 test suite
20.7 Support LD_PRELOAD on macOS
20.8 Run web-platform-tests URL tests
@@ -217,13 +223,22 @@
SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete.
To support IPv6 interface addresses for network interfaces properly.
-1.4 alt-svc sharing
+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:
@@ -243,12 +258,6 @@
See initial work in https://github.com/curl/curl/pull/5371
-1.7 Support HTTP/2 for HTTP(S) proxies
-
- Support for doing HTTP/2 to HTTP and HTTPS proxies is still missing.
-
- See https://github.com/curl/curl/issues/3570
-
1.8 CURLOPT_RESOLVE for any port number
This option allows applications to set a replacement IP address for a given
@@ -393,13 +402,12 @@
https://github.com/curl/curl/issues/2252
-1.29 Upgrade to websockets
+1.29 WebSocket read callback
- libcurl could offer a smoother path to get to a websocket connection.
- See https://github.com/curl/curl/issues/3523
+ Call the read callback once the connection is established to allow sending
+ the first message in the connection.
- Michael Kaufmann suggestion here:
- https://curl.se/video/curlup-2017/2017-03-19_05_Michael_Kaufmann_Websocket_support_for_curl.mp4
+ https://github.com/curl/curl/issues/11402
1.30 config file parsing
@@ -427,6 +435,21 @@
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
@@ -547,7 +570,7 @@
4.5 ASCII support
- FTP ASCII transfers do not follow RFC959. They do not convert the data
+ FTP ASCII transfers do not follow RFC 959. They do not convert the data
accordingly.
4.6 GSSAPI via Windows SSPI
@@ -564,9 +587,20 @@
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 CONNNECT response
+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
@@ -575,16 +609,17 @@
See https://github.com/curl/curl/issues/9513
-5.2 Set custom client ip when using haproxy protocol
+5.2 Obey Retry-After in redirects
- This would allow testing servers with different client ip addresses (without
- using x-forward-for header).
+ 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.
- https://github.com/curl/curl/issues/5125
+ See https://github.com/curl/curl/issues/11447
5.3 Rearrange request header order
- Server implementors often make an effort to detect browser and to reject
+ 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
@@ -651,7 +686,7 @@
6.4 exit immediately upon connection if stdin is /dev/null
- If it did, curl could be used to probe if there's an server there listening
+ 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:
@@ -718,6 +753,12 @@
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
@@ -779,9 +820,9 @@
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 re-use that SSL context in the same
- style connections are re-used. It will make us use slightly more memory but
- it will libcurl do less creations and deletions of SSL contexts.
+ 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
@@ -801,7 +842,7 @@
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's so much that could be done if it were.
+ it be? There is so much that could be done if it were.
13.7 Less memory massaging with Schannel
@@ -844,16 +885,13 @@
See https://github.com/curl/curl/issues/2793
-13.11 Support intermediate & root pinning for PINNEDPUBLICKEY
+13.11 Some TLS options are not offered for HTTPS proxies
- CURLOPT_PINNEDPUBLICKEY does not consider the hashes of intermediate & root
- certificates when comparing the pinned keys. Therefore it is not compatible
- with "HTTP Public Key Pinning" as there also intermediate and root
- certificates can be pinned. This is useful as it prevents webadmins from
- "locking themselves out of their servers".
+ 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
- Adding this feature would make curls pinning 100% compatible to HPKP and
- allow more flexible pinning.
+ https://github.com/curl/curl/issues/12286
13.12 Reduce CA certificate bundle reparsing
@@ -1072,7 +1110,7 @@
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's also a
+ 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
@@ -1110,7 +1148,7 @@
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's no surprise
+ 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
@@ -1203,6 +1241,43 @@
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
@@ -1243,6 +1318,13 @@
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
@@ -1268,9 +1350,9 @@
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 re-use a connection under such circumstances.
+ 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
@@ -1280,7 +1362,7 @@
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 RFC6265 test suite
+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
diff --git a/docs/TheArtOfHttpScripting.md b/docs/TheArtOfHttpScripting.md
index 7d0d77e66..43f13e2af 100644
--- a/docs/TheArtOfHttpScripting.md
+++ b/docs/TheArtOfHttpScripting.md
@@ -11,8 +11,9 @@
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. I will assume that you know how to
- invoke `curl --help` or `curl --manual` to get basic information about it.
+ 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
@@ -63,6 +64,17 @@
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
@@ -292,7 +304,7 @@
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
- RFC1867-posting.
+ 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:
@@ -543,7 +555,7 @@
cookie file at the end of an operation:
curl --cookie cookies.txt --cookie-jar newcookies.txt \
- http://www.example.com
+ http://www.example.com
# HTTPS
diff --git a/docs/URL-SYNTAX.md b/docs/URL-SYNTAX.md
index 691fcceac..ddd99454f 100644
--- a/docs/URL-SYNTAX.md
+++ b/docs/URL-SYNTAX.md
@@ -52,7 +52,7 @@ security concerns:
3. Such a URL might use other schemes than you thought of or planned for.
-## "RFC3986 plus"
+## "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
@@ -125,7 +125,7 @@ character or string.
For example, this could look like:
- http://user:password@www.example.com:80/index.hmtl?foo=bar#top
+ http://user:password@www.example.com:80/index.html?foo=bar#top
## Scheme
@@ -197,7 +197,7 @@ of Windows.
## Port number
-If there's a colon after the hostname, that should be followed by the port
+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.
@@ -360,6 +360,9 @@ 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
@@ -376,7 +379,7 @@ The default smtp port is 25. Some servers use port 587 as an alternative.
## RTMP
-There's no official URL spec for RTMP so libcurl uses the URL syntax supported
+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.
diff --git a/docs/SECURITY-PROCESS.md b/docs/VULN-DISCLOSURE-POLICY.md
index 96d6bec42..650599348 100644
--- a/docs/SECURITY-PROCESS.md
+++ b/docs/VULN-DISCLOSURE-POLICY.md
@@ -1,7 +1,7 @@
-# curl security process
+# curl vulnerability disclosure policy
-This document describes how security vulnerabilities should be handled in the
-curl project.
+This document describes how security vulnerabilities are handled in the curl
+project.
## Publishing Information
@@ -55,18 +55,23 @@ announcement.
- 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.
+ 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](https://docs.hackerone.com/programs/cve-requests.html)
+- 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.
+ 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 security team also decides on and delivers a monetary reward to the
- reporter as per the bug-bounty policies.
+- 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)
@@ -134,6 +139,49 @@ has been published.
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.
@@ -212,3 +260,34 @@ security vulnerabilities.
- 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/docs/WEBSOCKET.md b/docs/WEBSOCKET.md
index 25b1e5244..ba84c2284 100644
--- a/docs/WEBSOCKET.md
+++ b/docs/WEBSOCKET.md
@@ -1,11 +1,26 @@
<!--
-Copyright (C) 2000 - 2022 Daniel Stenberg, <daniel@haxx.se>, et al.
+Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
-->
# 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.
@@ -17,7 +32,7 @@ WebSocket with libcurl can be done two ways.
of it).
2. Set `CURLOPT_CONNECT_ONLY` to 2L (new for WebSocket), which makes libcurl
- do a HTTP GET + `Upgrade:` request plus response in the
+ 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.
@@ -94,7 +109,7 @@ Ideas:
## Why not libWebSocket
-[libWebSocket](https://libWebSocket.org/) is said to be a solid, fast and
+[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.
diff --git a/docs/cmdline-opts/CMakeLists.txt b/docs/cmdline-opts/CMakeLists.txt
index fe7870f5d..3dd8be49b 100644
--- a/docs/cmdline-opts/CMakeLists.txt
+++ b/docs/cmdline-opts/CMakeLists.txt
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/docs/cmdline-opts/MANPAGE.md b/docs/cmdline-opts/MANPAGE.md
index b760a9ad8..6de32dab9 100644
--- a/docs/cmdline-opts/MANPAGE.md
+++ b/docs/cmdline-opts/MANPAGE.md
@@ -1,5 +1,5 @@
<!--
- Copyright (C) 2000 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
-->
@@ -31,10 +31,11 @@ Each file has a set of meta-data and a body of text.
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 (if used more than once)
+ 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
@@ -44,19 +45,19 @@ Each file has a set of meta-data and a body of text.
### Body
The body of the description. Only refer to options with their long form option
-version, like `--verbose`. The output generator will replace such with the
+version, like `--verbose`. The output generator replaces such option with the
correct markup that shows both short and long version.
-Text written within `*asterisks*` will get shown using italics. Text within
-two `**asterisks**` will get shown using bold.
+Text written within `*asterisks*` is shown using italics. Text within two
+`**asterisks**` is shown using bold.
-Text that is prefixed with a space will be treated like an "example" and will
-be output in monospace.
+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 will be output before the generated options
-output for the master man page.
+`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.
diff --git a/docs/cmdline-opts/Makefile.am b/docs/cmdline-opts/Makefile.am
index df38e192a..5a8996bc2 100644
--- a/docs/cmdline-opts/Makefile.am
+++ b/docs/cmdline-opts/Makefile.am
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -30,8 +30,12 @@ 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
- @echo "generate $(MANPAGE)"
- @(cd $(srcdir) && @PERL@ ./gen.pl mainpage $(DPAGES)) > $(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/docs/cmdline-opts/Makefile.in b/docs/cmdline-opts/Makefile.in
index 4450fa73a..f861c23fa 100644
--- a/docs/cmdline-opts/Makefile.in
+++ b/docs/cmdline-opts/Makefile.in
@@ -21,7 +21,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -45,7 +45,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -144,7 +144,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.m4 \
$(top_srcdir)/m4/curl-confopts.m4 \
$(top_srcdir)/m4/curl-functions.m4 \
$(top_srcdir)/m4/curl-gnutls.m4 \
- $(top_srcdir)/m4/curl-mbedtls.m4 $(top_srcdir)/m4/curl-nss.m4 \
+ $(top_srcdir)/m4/curl-mbedtls.m4 \
$(top_srcdir)/m4/curl-openssl.m4 \
$(top_srcdir)/m4/curl-override.m4 \
$(top_srcdir)/m4/curl-reentrant.m4 \
@@ -198,6 +198,8 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APACHECTL = @APACHECTL@
+APXS = @APXS@
AR = @AR@
AR_FLAGS = @AR_FLAGS@
AS = @AS@
@@ -206,6 +208,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@
+CADDY = @CADDY@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -267,6 +270,8 @@ HAVE_LIBZ = @HAVE_LIBZ@
HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
HAVE_PROTO_BSDSOCKET_H = @HAVE_PROTO_BSDSOCKET_H@
HAVE_ZSTD = @HAVE_ZSTD@
+HTTPD = @HTTPD@
+HTTPD_NGHTTPX = @HTTPD_NGHTTPX@
IDN_ENABLED = @IDN_ENABLED@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -294,7 +299,6 @@ MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
NROFF = @NROFF@
-NSS_LIBS = @NSS_LIBS@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
@@ -325,6 +329,7 @@ SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@
SUPPORT_FEATURES = @SUPPORT_FEATURES@
SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_NGHTTPX = @TEST_NGHTTPX@
USE_ARES = @USE_ARES@
USE_BEARSSL = @USE_BEARSSL@
USE_GNUTLS = @USE_GNUTLS@
@@ -338,9 +343,8 @@ USE_NGHTTP2 = @USE_NGHTTP2@
USE_NGHTTP3 = @USE_NGHTTP3@
USE_NGTCP2 = @USE_NGTCP2@
USE_NGTCP2_CRYPTO_GNUTLS = @USE_NGTCP2_CRYPTO_GNUTLS@
-USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@
+USE_NGTCP2_CRYPTO_QUICTLS = @USE_NGTCP2_CRYPTO_QUICTLS@
USE_NGTCP2_CRYPTO_WOLFSSL = @USE_NGTCP2_CRYPTO_WOLFSSL@
-USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_RUSTLS = @USE_RUSTLS@
@@ -420,6 +424,7 @@ DPAGES = \
append.d \
aws-sigv4.d \
basic.d \
+ ca-native.d \
cacert.d \
capath.d \
cert-status.d \
@@ -485,6 +490,7 @@ DPAGES = \
globoff.d \
happy-eyeballs-timeout-ms.d \
haproxy-protocol.d \
+ haproxy-clientip.d \
head.d \
header.d \
help.d \
@@ -497,10 +503,12 @@ DPAGES = \
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 \
@@ -559,6 +567,7 @@ DPAGES = \
proto.d \
proxy-anyauth.d \
proxy-basic.d \
+ proxy-ca-native.d \
proxy-cacert.d \
proxy-capath.d \
proxy-cert-type.d \
@@ -567,6 +576,7 @@ DPAGES = \
proxy-crlfile.d \
proxy-digest.d \
proxy-header.d \
+ proxy-http2.d \
proxy-insecure.d \
proxy-key-type.d \
proxy-key.d \
@@ -650,14 +660,18 @@ DPAGES = \
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 \
@@ -665,6 +679,10 @@ DPAGES = \
OTHERPAGES = page-footer page-header
EXTRA_DIST = $(DPAGES) MANPAGE.md gen.pl $(OTHERPAGES) CMakeLists.txt
+GEN = $(GN_$(V))
+GN_0 = @echo " GENERATE" $@;
+GN_1 =
+GN_ = $(GN_0)
all: all-am
.SUFFIXES:
@@ -862,9 +880,8 @@ uninstall-am:
all: $(MANPAGE)
-$(MANPAGE): $(DPAGES) $(OTHERPAGES) Makefile.inc
- @echo "generate $(MANPAGE)"
- @(cd $(srcdir) && @PERL@ ./gen.pl mainpage $(DPAGES)) > $(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))
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/docs/cmdline-opts/Makefile.inc b/docs/cmdline-opts/Makefile.inc
index 350fa9fa7..a7c92f264 100644
--- a/docs/cmdline-opts/Makefile.inc
+++ b/docs/cmdline-opts/Makefile.inc
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -30,6 +30,7 @@ DPAGES = \
append.d \
aws-sigv4.d \
basic.d \
+ ca-native.d \
cacert.d \
capath.d \
cert-status.d \
@@ -95,6 +96,7 @@ DPAGES = \
globoff.d \
happy-eyeballs-timeout-ms.d \
haproxy-protocol.d \
+ haproxy-clientip.d \
head.d \
header.d \
help.d \
@@ -107,10 +109,12 @@ DPAGES = \
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 \
@@ -169,6 +173,7 @@ DPAGES = \
proto.d \
proxy-anyauth.d \
proxy-basic.d \
+ proxy-ca-native.d \
proxy-cacert.d \
proxy-capath.d \
proxy-cert-type.d \
@@ -177,6 +182,7 @@ DPAGES = \
proxy-crlfile.d \
proxy-digest.d \
proxy-header.d \
+ proxy-http2.d \
proxy-insecure.d \
proxy-key-type.d \
proxy-key.d \
@@ -260,14 +266,18 @@ DPAGES = \
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 \
diff --git a/docs/cmdline-opts/abstract-unix-socket.d b/docs/cmdline-opts/abstract-unix-socket.d
index 32cd5e209..5c2fd4a47 100644
--- a/docs/cmdline-opts/abstract-unix-socket.d
+++ b/docs/cmdline-opts/abstract-unix-socket.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: abstract-unix-socket
Arg: <path>
diff --git a/docs/cmdline-opts/alt-svc.d b/docs/cmdline-opts/alt-svc.d
index 6689d605c..276ac1b66 100644
--- a/docs/cmdline-opts/alt-svc.d
+++ b/docs/cmdline-opts/alt-svc.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: alt-svc
Arg: <file name>
@@ -11,11 +11,11 @@ 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 will be used. After a completed transfer,
-the cache will be saved to the file name again if it has been modified.
+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 will load contents from all the
-files but the last one will be used for saving.
+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/docs/cmdline-opts/anyauth.d b/docs/cmdline-opts/anyauth.d
index cc871b6e2..2498bdcd8 100644
--- a/docs/cmdline-opts/anyauth.d
+++ b/docs/cmdline-opts/anyauth.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: anyauth
Help: Pick any authentication method
@@ -17,7 +17,6 @@ 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 will
-fail.
+the need should arise when uploading from stdin, the upload operation fails.
Used together with --user.
diff --git a/docs/cmdline-opts/append.d b/docs/cmdline-opts/append.d
index b1eab78cf..7561c951c 100644
--- a/docs/cmdline-opts/append.d
+++ b/docs/cmdline-opts/append.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Short: a
Long: append
@@ -10,6 +10,7 @@ Example: --upload-file local --append ftp://example.com/
Added: 4.8
Multi: boolean
---
-When used in an upload, this makes curl append to the target file instead of
-overwriting it. If the remote file does not exist, it will be created. Note
-that this flag is ignored by some SFTP servers (including OpenSSH).
+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/docs/cmdline-opts/aws-sigv4.d b/docs/cmdline-opts/aws-sigv4.d
index 7f69c03ab..b771eee6a 100644
--- a/docs/cmdline-opts/aws-sigv4.d
+++ b/docs/cmdline-opts/aws-sigv4.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: aws-sigv4
Arg: <provider1[:provider2[:region[:service]]]>
@@ -6,7 +6,7 @@ Help: Use AWS V4 signature authentication
Category: auth http
Added: 7.75.0
See-also: basic user
-Example: --aws-sigv4 "aws:amz:east-2:es" --user "key:secret" $URL
+Example: --aws-sigv4 "aws:amz:us-east-2:es" --user "key:secret" $URL
Multi: single
---
Use AWS V4 signature authentication in the transfer.
diff --git a/docs/cmdline-opts/basic.d b/docs/cmdline-opts/basic.d
index ca873b8bb..cb0642620 100644
--- a/docs/cmdline-opts/basic.d
+++ b/docs/cmdline-opts/basic.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: basic
Help: Use HTTP Basic Authentication
diff --git a/docs/cmdline-opts/ca-native.d b/docs/cmdline-opts/ca-native.d
new file mode 100644
index 000000000..51e36918a
--- /dev/null
+++ b/docs/cmdline-opts/ca-native.d
@@ -0,0 +1,21 @@
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, 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/docs/cmdline-opts/cacert.d b/docs/cmdline-opts/cacert.d
index 1f86b0e96..5e4e74901 100644
--- a/docs/cmdline-opts/cacert.d
+++ b/docs/cmdline-opts/cacert.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: cacert
Arg: <file>
@@ -19,20 +19,17 @@ 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 will automatically look for a CA certs file named
+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.
-If curl is built against the NSS SSL library, the NSS PEM PKCS#11 module
-(libnsspem.so) needs to be available for this option to work properly.
-
(iOS and macOS only) If curl is built against Secure Transport, then this
option is supported for backward compatibility with other SSL engines, but it
-should not be set. If the option is not set, then curl will use the
-certificates in the system and user Keychain to verify the peer, which is the
-preferred method of verifying the peer's certificate chain.
+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
-with libcurl 7.60 or later. 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).
+(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/docs/cmdline-opts/capath.d b/docs/cmdline-opts/capath.d
index 552c05a3c..75e9f2e40 100644
--- a/docs/cmdline-opts/capath.d
+++ b/docs/cmdline-opts/capath.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: capath
Arg: <dir>
@@ -18,4 +18,4 @@ 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 will be ignored.
+If this option is set, the default capath value is ignored.
diff --git a/docs/cmdline-opts/cert-status.d b/docs/cmdline-opts/cert-status.d
index 83241dba2..e2d1d7aa2 100644
--- a/docs/cmdline-opts/cert-status.d
+++ b/docs/cmdline-opts/cert-status.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: cert-status
Protocols: TLS
@@ -16,4 +16,4 @@ 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, GnuTLS and NSS backends.
+This is currently only implemented in the OpenSSL and GnuTLS backends.
diff --git a/docs/cmdline-opts/cert-type.d b/docs/cmdline-opts/cert-type.d
index 13643fb53..cf9f17b7d 100644
--- a/docs/cmdline-opts/cert-type.d
+++ b/docs/cmdline-opts/cert-type.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: cert-type
Protocols: TLS
diff --git a/docs/cmdline-opts/cert.d b/docs/cmdline-opts/cert.d
index 54c5cb0a0..56d0df7fd 100644
--- a/docs/cmdline-opts/cert.d
+++ b/docs/cmdline-opts/cert.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Short: E
Long: cert
@@ -14,7 +14,7 @@ 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 will be queried for on
+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.
@@ -24,21 +24,12 @@ 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 the NSS SSL library then this option can tell
-curl the nickname of the certificate to use within the NSS database defined
-by the environment variable SSL_DIR (or by default /etc/pki/nssdb). If the
-NSS PEM PKCS#11 module (libnsspem.so) is available then PEM files may be
-loaded.
-
-If you provide a path relative to the current directory, you must prefix the
-path with "./" in order to avoid confusion with an NSS database nickname.
-
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:" will be interpreted as a
-PKCS#11 URI. If a PKCS#11 URI is provided, then the --engine option will be set
-as "pkcs11" if none was provided and the --cert-type option will be set as
-"ENG" if none was provided.
+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
@@ -47,12 +38,12 @@ 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
+expression to a certificate store. (Loading *PFX* is not supported; you can
import it to a store first). You can use
"<store location>\\<store name>\\<thumbprint>" to refer to a certificate
in the system certificates store, for example,
-"CurrentUser\\MY\\934a7ac6f8a5d579285a74fa61e19f23ddfe8d7a". Thumbprint is
+*"CurrentUser\\MY\\934a7ac6f8a5d579285a74fa61e19f23ddfe8d7a"*. Thumbprint is
usually a SHA-1 hex string which you can see in certificate details. Following
-store locations are supported: CurrentUser, LocalMachine, CurrentService,
-Services, CurrentUserGroupPolicy, LocalMachineGroupPolicy,
-LocalMachineEnterprise.
+store locations are supported: *CurrentUser*, *LocalMachine*, *CurrentService*,
+*Services*, *CurrentUserGroupPolicy*, *LocalMachineGroupPolicy* and
+*LocalMachineEnterprise*.
diff --git a/docs/cmdline-opts/ciphers.d b/docs/cmdline-opts/ciphers.d
index e64a3f6a0..a30902bdb 100644
--- a/docs/cmdline-opts/ciphers.d
+++ b/docs/cmdline-opts/ciphers.d
@@ -1,11 +1,11 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: ciphers
Arg: <list of ciphers>
Help: SSL ciphers to use
Protocols: TLS
Category: tls
-See-also: tlsv1.3
+See-also: tlsv1.3 tls13-ciphers proxy-ciphers
Example: --ciphers ECDHE-ECDSA-AES256-CCM8 $URL
Added: 7.9
Multi: single
@@ -13,4 +13,4 @@ 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
+https://curl.se/docs/ssl-ciphers.html
diff --git a/docs/cmdline-opts/compressed-ssh.d b/docs/cmdline-opts/compressed-ssh.d
index 0521a2ba4..897395677 100644
--- a/docs/cmdline-opts/compressed-ssh.d
+++ b/docs/cmdline-opts/compressed-ssh.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: compressed-ssh
Help: Enable SSH compression
diff --git a/docs/cmdline-opts/compressed.d b/docs/cmdline-opts/compressed.d
index f3b03c672..bb1d3baa7 100644
--- a/docs/cmdline-opts/compressed.d
+++ b/docs/cmdline-opts/compressed.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: compressed
Help: Request compressed response
@@ -10,8 +10,12 @@ Added: 7.10
Multi: boolean
---
Request a compressed response using one of the algorithms curl supports, and
-automatically decompress the content. Headers are not modified.
+automatically decompress the content.
-If this option is used and the server sends an unsupported encoding, curl will
-report an error. This is a request, not an order; the server may or may not
+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/docs/cmdline-opts/config.d b/docs/cmdline-opts/config.d
index 84456f627..c22a827f6 100644
--- a/docs/cmdline-opts/config.d
+++ b/docs/cmdline-opts/config.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: config
Arg: <file>
@@ -11,7 +11,7 @@ See-also: disable
Multi: append
---
Specify a text file to read curl arguments from. The command line arguments
-found in the text file will be used as if they were provided on the command
+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,
@@ -21,15 +21,16 @@ 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 : or =), the parameter
-must be enclosed within 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 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 column of a config line is a '#' character, the rest of the line
-will be treated as a comment.
+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.
+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.
@@ -55,22 +56,22 @@ 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"
+1) **"$CURL_HOME/.curlrc"**
-2) "$XDG_CONFIG_HOME/.curlrc" (Added in 7.73.0)
+2) **"$XDG_CONFIG_HOME/curlrc"** (Added in 7.73.0)
-3) "$HOME/.curlrc"
+3) **"$HOME/.curlrc"**
-4) Windows: "%USERPROFILE%\\.curlrc"
+4) Windows: **"%USERPROFILE%\\.curlrc"**
-5) Windows: "%APPDATA%\\.curlrc"
+5) Windows: **"%APPDATA%\\.curlrc"**
-6) Windows: "%USERPROFILE%\\Application Data\\.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
+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.
+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/docs/cmdline-opts/connect-timeout.d b/docs/cmdline-opts/connect-timeout.d
index 6a2889d21..b3d19b3c3 100644
--- a/docs/cmdline-opts/connect-timeout.d
+++ b/docs/cmdline-opts/connect-timeout.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: connect-timeout
Arg: <fractional seconds>
@@ -12,5 +12,11 @@ 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
-will continue - if not it will exit. Since version 7.32.0, this option
-accepts decimal values.
+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/docs/cmdline-opts/connect-to.d b/docs/cmdline-opts/connect-to.d
index 040ea19dd..95fab9112 100644
--- a/docs/cmdline-opts/connect-to.d
+++ b/docs/cmdline-opts/connect-to.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: connect-to
Arg: <HOST1:PORT1:HOST2:PORT2>
diff --git a/docs/cmdline-opts/continue-at.d b/docs/cmdline-opts/continue-at.d
index 726171a41..a4fc1a969 100644
--- a/docs/cmdline-opts/continue-at.d
+++ b/docs/cmdline-opts/continue-at.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Short: C
Long: continue-at
@@ -12,9 +12,9 @@ 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 will be skipped, counting from the beginning
+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 will not be used by curl.
+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/docs/cmdline-opts/cookie-jar.d b/docs/cmdline-opts/cookie-jar.d
index 2f3b8e9e6..28738cac9 100644
--- a/docs/cmdline-opts/cookie-jar.d
+++ b/docs/cmdline-opts/cookie-jar.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Short: c
Long: cookie-jar
@@ -14,16 +14,18 @@ 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 will be
-written. The file will be written using the Netscape cookie file format. If
-you set the file name to a single dash, "-", the cookies will be written to
-stdout.
+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.
-This command line option will activate the cookie engine that makes curl
-record and use cookies. Another way to activate it is to use the --cookie
-option.
+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
-will not fail or even report an error clearly. Using --verbose will get a
-warning displayed, but that is the only visible feedback you get about this
-possibly lethal situation.
+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/docs/cmdline-opts/cookie.d b/docs/cmdline-opts/cookie.d
index 2b736539e..0f858d661 100644
--- a/docs/cmdline-opts/cookie.d
+++ b/docs/cmdline-opts/cookie.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Short: b
Long: cookie
@@ -17,25 +17,25 @@ 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 will all get this cookie passed on.
+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 will make curl record incoming cookies, which may be handy if
-you are using this in combination with the --location option or do multiple URL
+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
-will instead read the contents from stdin.
+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 will be
-written to the file. To store cookies, use the --cookie-jar option.
+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 will never match. To address this, set a
-domain in Set-Cookie line (doing that will include sub-domains) or preferably:
-use the Netscape format.
+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
diff --git a/docs/cmdline-opts/create-dirs.d b/docs/cmdline-opts/create-dirs.d
index 01b7ccf92..966b70384 100644
--- a/docs/cmdline-opts/create-dirs.d
+++ b/docs/cmdline-opts/create-dirs.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: create-dirs
Help: Create necessary local directory hierarchy
@@ -8,12 +8,12 @@ Added: 7.10.3
See-also: ftp-create-dirs output-dir
Multi: boolean
---
-When used in conjunction with the --output option, curl will create the
-necessary local directory hierarchy as needed. This option creates the
-directories mentioned with the --output option, nothing else. If the --output
-file name uses no directory, or if the directories it mentions already exist,
-no directories will be created.
+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 dirs are made with mode 0750 on unix style file systems.
+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/docs/cmdline-opts/create-file-mode.d b/docs/cmdline-opts/create-file-mode.d
index 32e6e84bf..c0ebc08d4 100644
--- a/docs/cmdline-opts/create-file-mode.d
+++ b/docs/cmdline-opts/create-file-mode.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: create-file-mode
Arg: <mode>
diff --git a/docs/cmdline-opts/crlf.d b/docs/cmdline-opts/crlf.d
index f19a5b25d..ea7fb1526 100644
--- a/docs/cmdline-opts/crlf.d
+++ b/docs/cmdline-opts/crlf.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: crlf
Help: Convert LF to CRLF in upload
@@ -9,6 +9,7 @@ Added: 5.7
See-also: use-ascii
Multi: boolean
---
-Convert LF to CRLF in upload. Useful for MVS (OS/390).
+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/docs/cmdline-opts/crlfile.d b/docs/cmdline-opts/crlfile.d
index deb54e124..da0d239ba 100644
--- a/docs/cmdline-opts/crlfile.d
+++ b/docs/cmdline-opts/crlfile.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: crlfile
Arg: <file>
diff --git a/docs/cmdline-opts/curves.d b/docs/cmdline-opts/curves.d
index 84f1291d8..58d472d20 100644
--- a/docs/cmdline-opts/curves.d
+++ b/docs/cmdline-opts/curves.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: curves
Arg: <algorithm list>
@@ -19,5 +19,4 @@ in the "openssl s_client/s_server" utilities.
the (EC) curve requested by the client, avoiding nontransparent client/server
negotiations.
-If this option is set, the default curves list built into openssl will be
-ignored.
+If this option is set, the default curves list built into OpenSSL are ignored.
diff --git a/docs/cmdline-opts/data-ascii.d b/docs/cmdline-opts/data-ascii.d
index 4f9bdb1d3..5c7840bbc 100644
--- a/docs/cmdline-opts/data-ascii.d
+++ b/docs/cmdline-opts/data-ascii.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: data-ascii
Arg: <data>
diff --git a/docs/cmdline-opts/data-binary.d b/docs/cmdline-opts/data-binary.d
index c1c9b20d1..2cedda97b 100644
--- a/docs/cmdline-opts/data-binary.d
+++ b/docs/cmdline-opts/data-binary.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: data-binary
Arg: <data>
@@ -21,5 +21,5 @@ 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 will append
+If this option is used several times, the ones following the first append
data as described in --data.
diff --git a/docs/cmdline-opts/data-raw.d b/docs/cmdline-opts/data-raw.d
index 8ec29fad8..e6a5a5b2b 100644
--- a/docs/cmdline-opts/data-raw.d
+++ b/docs/cmdline-opts/data-raw.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: data-raw
Arg: <data>
diff --git a/docs/cmdline-opts/data-urlencode.d b/docs/cmdline-opts/data-urlencode.d
index e9adc4563..3c436b26b 100644
--- a/docs/cmdline-opts/data-urlencode.d
+++ b/docs/cmdline-opts/data-urlencode.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: data-urlencode
Arg: <data>
@@ -21,21 +21,22 @@ by a separator and a content specification. The <data> part can be passed to
curl using one of the following syntaxes:
.RS
.IP "content"
-This will make curl URL-encode the content and pass that on. Just be careful
-so that the content does not contain any = or @ symbols, as that will then make
+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 will make curl URL-encode the content and pass that on. The preceding =
+This makes curl URL-encode the content and pass that on. The preceding =
symbol is not included in the data.
.IP "name=content"
-This will make curl URL-encode the content part and pass that on. Note that
+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 will make curl load data from the given file (including any newlines),
+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 will make curl load data from the given file (including any newlines),
+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/docs/cmdline-opts/data.d b/docs/cmdline-opts/data.d
index 628b15069..f1d67b950 100644
--- a/docs/cmdline-opts/data.d
+++ b/docs/cmdline-opts/data.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: data
Short: d
@@ -16,7 +16,7 @@ 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 will cause curl to pass the data to the server using 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
@@ -25,7 +25,7 @@ the @ character. To post data purely binary, you should instead use the
--data-urlencode.
If any of these options is used more than once on the same command line, the
-data pieces specified will be merged with a separating &-symbol. Thus, using
+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'.
@@ -33,5 +33,9 @@ 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
-will be stripped out. If you do not want the @ character to have a special
+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/docs/cmdline-opts/delegation.d b/docs/cmdline-opts/delegation.d
index c4659d844..794184934 100644
--- a/docs/cmdline-opts/delegation.d
+++ b/docs/cmdline-opts/delegation.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: delegation
Arg: <LEVEL>
@@ -21,3 +21,4 @@ service ticket, which is a matter of realm policy.
.IP "always"
Unconditionally allow the server to delegate.
.RE
+.IP
diff --git a/docs/cmdline-opts/digest.d b/docs/cmdline-opts/digest.d
index c42486f04..f2ee551c5 100644
--- a/docs/cmdline-opts/digest.d
+++ b/docs/cmdline-opts/digest.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: digest
Help: Use HTTP Digest Authentication
diff --git a/docs/cmdline-opts/disable-eprt.d b/docs/cmdline-opts/disable-eprt.d
index 8a21fed8d..b6d382baf 100644
--- a/docs/cmdline-opts/disable-eprt.d
+++ b/docs/cmdline-opts/disable-eprt.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: disable-eprt
Help: Inhibit using EPRT or LPRT
@@ -10,17 +10,16 @@ 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 will normally always first attempt to use EPRT, then LPRT
-before using PORT, but with this option, it will use PORT right away. EPRT and
-LPRT are extensions to the original FTP protocol, and may not work on all
-servers, but they enable more functionality in a better way than the
-traditional PORT command.
+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 will have no effect as EPRT
-is necessary then.
+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/docs/cmdline-opts/disable-epsv.d b/docs/cmdline-opts/disable-epsv.d
index 3f58f508c..f02df763d 100644
--- a/docs/cmdline-opts/disable-epsv.d
+++ b/docs/cmdline-opts/disable-epsv.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: disable-epsv
Help: Inhibit using EPSV
@@ -10,14 +10,14 @@ See-also: disable-eprt ftp-port
Multi: boolean
---
Tell curl to disable the use of the EPSV command when doing passive FTP
-transfers. Curl will normally always first attempt to use EPSV before
-PASV, but with this option, it will not try using EPSV.
+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 will have no effect as EPSV is
-necessary then.
+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/docs/cmdline-opts/disable.d b/docs/cmdline-opts/disable.d
index 4ce33cd61..979c03991 100644
--- a/docs/cmdline-opts/disable.d
+++ b/docs/cmdline-opts/disable.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: disable
Short: q
@@ -9,6 +9,9 @@ Added: 5.0
See-also: config
Multi: boolean
---
-If used as the first parameter on the command line, the *curlrc* config
-file will not be read and used. See the --config for details on the default
-config file search path.
+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/docs/cmdline-opts/disallow-username-in-url.d b/docs/cmdline-opts/disallow-username-in-url.d
index 3e1de348a..d0537db97 100644
--- a/docs/cmdline-opts/disallow-username-in-url.d
+++ b/docs/cmdline-opts/disallow-username-in-url.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: disallow-username-in-url
Help: Disallow username in URL
diff --git a/docs/cmdline-opts/dns-interface.d b/docs/cmdline-opts/dns-interface.d
index 8cd4d1347..fd924b897 100644
--- a/docs/cmdline-opts/dns-interface.d
+++ b/docs/cmdline-opts/dns-interface.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: dns-interface
Arg: <interface>
diff --git a/docs/cmdline-opts/dns-ipv4-addr.d b/docs/cmdline-opts/dns-ipv4-addr.d
index 358bec368..593055739 100644
--- a/docs/cmdline-opts/dns-ipv4-addr.d
+++ b/docs/cmdline-opts/dns-ipv4-addr.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: dns-ipv4-addr
Arg: <address>
@@ -11,6 +11,6 @@ Category: dns
Example: --dns-ipv4-addr 10.1.2.3 $URL
Multi: single
---
-Tell curl to bind to <ip-address> when making IPv4 DNS requests, so that
-the DNS requests originate from this address. The argument should be a
+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/docs/cmdline-opts/dns-ipv6-addr.d b/docs/cmdline-opts/dns-ipv6-addr.d
index 945265686..a76120cdc 100644
--- a/docs/cmdline-opts/dns-ipv6-addr.d
+++ b/docs/cmdline-opts/dns-ipv6-addr.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: dns-ipv6-addr
Arg: <address>
@@ -11,6 +11,6 @@ Category: dns
Example: --dns-ipv6-addr 2a04:4e42::561 $URL
Multi: single
---
-Tell curl to bind to <ip-address> when making IPv6 DNS requests, so that
-the DNS requests originate from this address. The argument should be a
+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/docs/cmdline-opts/dns-servers.d b/docs/cmdline-opts/dns-servers.d
index ff0705122..bec23a3c3 100644
--- a/docs/cmdline-opts/dns-servers.d
+++ b/docs/cmdline-opts/dns-servers.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: dns-servers
Arg: <addresses>
diff --git a/docs/cmdline-opts/doh-cert-status.d b/docs/cmdline-opts/doh-cert-status.d
index 534c79529..37ae0f827 100644
--- a/docs/cmdline-opts/doh-cert-status.d
+++ b/docs/cmdline-opts/doh-cert-status.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: doh-cert-status
Help: Verify the status of the DoH server cert via OCSP-staple
diff --git a/docs/cmdline-opts/doh-insecure.d b/docs/cmdline-opts/doh-insecure.d
index 30c44bba3..dcc65fb6c 100644
--- a/docs/cmdline-opts/doh-insecure.d
+++ b/docs/cmdline-opts/doh-insecure.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: doh-insecure
Help: Allow insecure DoH server connections
diff --git a/docs/cmdline-opts/doh-url.d b/docs/cmdline-opts/doh-url.d
index 4717a6ac6..6d0dd1605 100644
--- a/docs/cmdline-opts/doh-url.d
+++ b/docs/cmdline-opts/doh-url.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: doh-url
Arg: <URL>
@@ -12,10 +12,10 @@ 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 will apply to DoH since the
+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 and can be controlled separately via
---doh-insecure and --doh-cert-status.
+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)
+This option is unset if an empty string "" is used as the URL.
+(Added in 7.85.0)
diff --git a/docs/cmdline-opts/dump-header.d b/docs/cmdline-opts/dump-header.d
index 3dabac85e..42a79e7dd 100644
--- a/docs/cmdline-opts/dump-header.d
+++ b/docs/cmdline-opts/dump-header.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: dump-header
Short: D
@@ -12,7 +12,10 @@ Added: 5.7
Multi: single
---
Write the received protocol headers to the specified file. If no headers are
-received, the use of this option will create an empty file.
+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/docs/cmdline-opts/egd-file.d b/docs/cmdline-opts/egd-file.d
index b6661c773..4543ecf15 100644
--- a/docs/cmdline-opts/egd-file.d
+++ b/docs/cmdline-opts/egd-file.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: egd-file
Arg: <file>
@@ -10,8 +10,8 @@ Example: --egd-file /random/here $URL
Added: 7.7
Multi: single
---
-Deprecated option. This option is ignored by curl since 7.84.0. Prior to that
-it only had an effect on curl if built to use old versions of OpenSSL.
+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/docs/cmdline-opts/engine.d b/docs/cmdline-opts/engine.d
index 58578ea8f..1ebc779c0 100644
--- a/docs/cmdline-opts/engine.d
+++ b/docs/cmdline-opts/engine.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: engine
Arg: <name>
diff --git a/docs/cmdline-opts/etag-compare.d b/docs/cmdline-opts/etag-compare.d
index 12c786790..d3c48d17a 100644
--- a/docs/cmdline-opts/etag-compare.d
+++ b/docs/cmdline-opts/etag-compare.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: etag-compare
Arg: <file>
diff --git a/docs/cmdline-opts/etag-save.d b/docs/cmdline-opts/etag-save.d
index 2f44c0f7d..6295a9e31 100644
--- a/docs/cmdline-opts/etag-save.d
+++ b/docs/cmdline-opts/etag-save.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: etag-save
Arg: <file>
diff --git a/docs/cmdline-opts/expect100-timeout.d b/docs/cmdline-opts/expect100-timeout.d
index 93e3c633e..f9a119bd9 100644
--- a/docs/cmdline-opts/expect100-timeout.d
+++ b/docs/cmdline-opts/expect100-timeout.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: expect100-timeout
Arg: <seconds>
@@ -12,5 +12,8 @@ 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 will wait one second. This option accepts decimal values! When
-curl stops waiting, it will continue as if the response has been received.
+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/docs/cmdline-opts/fail-early.d b/docs/cmdline-opts/fail-early.d
index cedc884f8..36b330999 100644
--- a/docs/cmdline-opts/fail-early.d
+++ b/docs/cmdline-opts/fail-early.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: fail-early
Help: Fail on first transfer error, do not continue
@@ -7,21 +7,19 @@ 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 will
-attempt to operate on each given URL, one by one. By default, it will ignore
-errors if there are more URLs given and the last URL's success will determine
-the error code curl returns. So early failures will be "hidden" by subsequent
-successful transfers.
+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 will instead return an error on the first transfer
-that fails, independent of the amount of URLs that are given on the command
+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 is global and does not need to be specified for each use of --next.
-
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/docs/cmdline-opts/fail-with-body.d b/docs/cmdline-opts/fail-with-body.d
index adf5294f4..dddb86e22 100644
--- a/docs/cmdline-opts/fail-with-body.d
+++ b/docs/cmdline-opts/fail-with-body.d
@@ -1,11 +1,11 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, 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
+See-also: fail fail-early
Mutexed: fail
Example: --fail-with-body $URL
Multi: boolean
@@ -13,8 +13,8 @@ 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 will still allow curl to output and save that content but
-also to return error 22.
+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/docs/cmdline-opts/fail.d b/docs/cmdline-opts/fail.d
index 66c08fa50..8196a908d 100644
--- a/docs/cmdline-opts/fail.d
+++ b/docs/cmdline-opts/fail.d
@@ -1,10 +1,10 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, 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
+See-also: fail-with-body fail-early
Category: important http
Example: --fail $URL
Mutexed: fail-with-body
@@ -14,9 +14,9 @@ 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 will prevent curl from
+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 will slip through, especially when authentication is involved
+response codes slip through, especially when authentication is involved
(response codes 401 and 407).
diff --git a/docs/cmdline-opts/false-start.d b/docs/cmdline-opts/false-start.d
index b617a6b67..73240492b 100644
--- a/docs/cmdline-opts/false-start.d
+++ b/docs/cmdline-opts/false-start.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: false-start
Help: Enable TLS False Start
@@ -10,9 +10,9 @@ 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 will start sending application data before verifying the
+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 NSS and Secure Transport (on iOS 7.0
-or later, or OS X 10.9 or later) backends.
+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/docs/cmdline-opts/form-escape.d b/docs/cmdline-opts/form-escape.d
index b399741e2..304bfe814 100644
--- a/docs/cmdline-opts/form-escape.d
+++ b/docs/cmdline-opts/form-escape.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: form-escape
Help: Escape multipart form field/file names using backslash
diff --git a/docs/cmdline-opts/form-string.d b/docs/cmdline-opts/form-string.d
index a2c450b17..6d7a500a4 100644
--- a/docs/cmdline-opts/form-string.d
+++ b/docs/cmdline-opts/form-string.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: form-string
Help: Specify multipart MIME data
@@ -13,5 +13,5 @@ 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's any possibility that the string value may accidentally trigger the
+there is any possibility that the string value may accidentally trigger the
'@' or '<' features of --form.
diff --git a/docs/cmdline-opts/form.d b/docs/cmdline-opts/form.d
index 3954fdaf6..e53e93ae0 100644
--- a/docs/cmdline-opts/form.d
+++ b/docs/cmdline-opts/form.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: form
Short: F
@@ -29,14 +29,13 @@ 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 unfortunately not subject to buffering and will
-be effectively 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.
+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 will be the input:
+form-field to which the file **portrait.jpg** is the input:
curl -F profile=@portrait.jpg https://example.com/upload.cgi
diff --git a/docs/cmdline-opts/ftp-account.d b/docs/cmdline-opts/ftp-account.d
index f71773f14..eb669c562 100644
--- a/docs/cmdline-opts/ftp-account.d
+++ b/docs/cmdline-opts/ftp-account.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: ftp-account
Arg: <data>
diff --git a/docs/cmdline-opts/ftp-alternative-to-user.d b/docs/cmdline-opts/ftp-alternative-to-user.d
index 22e5b4f92..f030bcf59 100644
--- a/docs/cmdline-opts/ftp-alternative-to-user.d
+++ b/docs/cmdline-opts/ftp-alternative-to-user.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: ftp-alternative-to-user
Arg: <command>
@@ -12,5 +12,5 @@ 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" will tell the server to retrieve the
+client certificate, using "SITE AUTH" tells the server to retrieve the
username from the certificate.
diff --git a/docs/cmdline-opts/ftp-create-dirs.d b/docs/cmdline-opts/ftp-create-dirs.d
index 7cf3e1c79..7c64f0e21 100644
--- a/docs/cmdline-opts/ftp-create-dirs.d
+++ b/docs/cmdline-opts/ftp-create-dirs.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: ftp-create-dirs
Protocols: FTP SFTP
@@ -11,4 +11,4 @@ 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
-will instead attempt to create missing directories.
+instead attempts to create missing directories.
diff --git a/docs/cmdline-opts/ftp-method.d b/docs/cmdline-opts/ftp-method.d
index d745cca32..8061d2b68 100644
--- a/docs/cmdline-opts/ftp-method.d
+++ b/docs/cmdline-opts/ftp-method.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: ftp-method
Arg: <method>
@@ -20,10 +20,11 @@ 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 will do SIZE, RETR, STOR etc and give a full
+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/docs/cmdline-opts/ftp-pasv.d b/docs/cmdline-opts/ftp-pasv.d
index d6b4bfd9f..c43bf2bee 100644
--- a/docs/cmdline-opts/ftp-pasv.d
+++ b/docs/cmdline-opts/ftp-pasv.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: ftp-pasv
Help: Use PASV/EPSV instead of PORT
@@ -16,5 +16,5 @@ 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 will try the EPSV command first and then PASV,
+Passive mode means that curl tries the EPSV command first and then PASV,
unless --disable-epsv is used.
diff --git a/docs/cmdline-opts/ftp-port.d b/docs/cmdline-opts/ftp-port.d
index 4f660bd9e..e1f4a1dba 100644
--- a/docs/cmdline-opts/ftp-port.d
+++ b/docs/cmdline-opts/ftp-port.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: ftp-port
Arg: <address>
@@ -29,6 +29,7 @@ e.g. "my.host.domain" to specify the machine
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++.
diff --git a/docs/cmdline-opts/ftp-pret.d b/docs/cmdline-opts/ftp-pret.d
index f31cc5625..4bea99e6d 100644
--- a/docs/cmdline-opts/ftp-pret.d
+++ b/docs/cmdline-opts/ftp-pret.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: ftp-pret
Help: Send PRET before PASV
diff --git a/docs/cmdline-opts/ftp-skip-pasv-ip.d b/docs/cmdline-opts/ftp-skip-pasv-ip.d
index af9eb7d57..3af9c6de4 100644
--- a/docs/cmdline-opts/ftp-skip-pasv-ip.d
+++ b/docs/cmdline-opts/ftp-skip-pasv-ip.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: ftp-skip-pasv-ip
Help: Skip the IP address for PASV
@@ -9,11 +9,10 @@ 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
-will re-use the same IP address it already uses for the control
-connection.
+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.
-Since curl 7.74.0 this option is enabled by default.
+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/docs/cmdline-opts/ftp-ssl-ccc-mode.d b/docs/cmdline-opts/ftp-ssl-ccc-mode.d
index e738b55ba..ae9af9429 100644
--- a/docs/cmdline-opts/ftp-ssl-ccc-mode.d
+++ b/docs/cmdline-opts/ftp-ssl-ccc-mode.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: ftp-ssl-ccc-mode
Arg: <active/passive>
@@ -10,7 +10,7 @@ Category: ftp tls
Example: --ftp-ssl-ccc-mode active --ftp-ssl-ccc ftps://example.com/
Multi: boolean
---
-Sets the CCC mode. The passive mode will not initiate the shutdown, but
-instead wait for the server to do it, and will not reply to the shutdown from
+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/docs/cmdline-opts/ftp-ssl-ccc.d b/docs/cmdline-opts/ftp-ssl-ccc.d
index c6c0bfa4c..33ae83b1c 100644
--- a/docs/cmdline-opts/ftp-ssl-ccc.d
+++ b/docs/cmdline-opts/ftp-ssl-ccc.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: ftp-ssl-ccc
Help: Send CCC after authenticating
@@ -10,6 +10,6 @@ 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 will be
+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/docs/cmdline-opts/ftp-ssl-control.d b/docs/cmdline-opts/ftp-ssl-control.d
index 6bdc5806d..b89577927 100644
--- a/docs/cmdline-opts/ftp-ssl-control.d
+++ b/docs/cmdline-opts/ftp-ssl-control.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: ftp-ssl-control
Help: Require SSL/TLS for FTP login, clear for transfer
diff --git a/docs/cmdline-opts/gen.pl b/docs/cmdline-opts/gen.pl
index fe3e43e06..edf90622b 100755
--- a/docs/cmdline-opts/gen.pl
+++ b/docs/cmdline-opts/gen.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -33,7 +33,7 @@ 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 can't handle a global input-only
+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
@@ -48,9 +48,16 @@ my %protolong;
my %catlong;
use POSIX qw(strftime);
-my $date = strftime "%B %d %Y", localtime;
-my $year = strftime "%Y", localtime;
+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(<INC>) {
@@ -65,13 +72,16 @@ close(INC);
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}.", --$k\\fP";
+ $l = "\\fI-".$optlong{$k}.", \\-\\-$klong\\fP";
}
else {
# only long
- $l = "\\fI--$k\\fP";
+ $l = "\\fI\\-\\-$klong\\fP";
}
return $l;
}
@@ -104,16 +114,21 @@ sub printdesc {
}
# skip lines starting with space (examples)
if($d =~ /^[^ ]/ && $d =~ /--/) {
- for my $k (keys %optlong) {
+ # 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/--\Q$k\E([^a-z0-9_-])([^a-zA-Z0-9_])/$l$1$2/;
+ $d =~ s/\-\-$k([^a-z0-9-])/$l$1/g;
}
}
- # quote "bare" minuses in the output
- $d =~ s/( |\\fI|^)--/$1\\-\\-/g;
- $d =~ s/([ -]|\\fI|^)-/$1\\-/g;
- # handle single quotes first on the line
- $d =~ s/^(\s*)\'/$1\\(aq/;
+ # 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;
@@ -163,8 +178,8 @@ sub too_old {
elsif($version =~ /^(\d+)\.(\d+)/) {
$a = $1 * 1000 + $2 * 10;
}
- if($a < 7300) {
- # we consider everything before 7.30.0 to be too old to mention
+ if($a < 7500) {
+ # we consider everything before 7.50.0 to be too old to mention
# specific changes for
return 1;
}
@@ -174,7 +189,7 @@ sub too_old {
sub added {
my ($standalone, $data)=@_;
if(too_old($data)) {
- # don't mention ancient additions
+ # do not mention ancient additions
return "";
}
if($standalone) {
@@ -205,6 +220,7 @@ sub single {
my $magic; # cmdline special option
my $line;
my $multi;
+ my $scope;
my $experimental;
while(<F>) {
$line++;
@@ -233,6 +249,10 @@ sub single {
$protocols=$1;
}
elsif(/^See-also: *(.*)/i) {
+ if($seealso) {
+ print STDERR "ERROR: duplicated See-also in $f\n";
+ return 1;
+ }
$seealso=$1;
}
elsif(/^Requires: *(.*)/i) {
@@ -247,6 +267,9 @@ sub single {
elsif(/^Multi: *(.*)/i) {
$multi=$1;
}
+ elsif(/^Scope: *(.*)/i) {
+ $scope=$1;
+ }
elsif(/^Experimental: yes/i) {
$experimental=1;
}
@@ -264,10 +287,6 @@ sub single {
print STDERR "ERROR: no 'Long:' in $f\n";
return 1;
}
- if($multi !~ /(single|append|boolean|mutex)/) {
- print STDERR "ERROR: bad 'Multi:' in $f\n";
- return 1;
- }
if(!$category) {
print STDERR "ERROR: no 'Category:' in $f\n";
return 2;
@@ -305,6 +324,7 @@ sub single {
}
close(F);
my $opt;
+
if(defined($short) && $long) {
$opt = "-$short, --$long";
}
@@ -320,8 +340,7 @@ sub single {
}
# quote "bare" minuses in opt
- $opt =~ s/( |^)--/$1\\-\\-/g;
- $opt =~ s/( |^)-/$1\\-/g;
+ $opt =~ s/-/\\-/g;
if($standalone) {
print ".TH curl 1 \"30 Nov 2016\" \"curl 7.52.0\" \"curl manual\"\n";
print ".SH OPTION\n";
@@ -345,12 +364,23 @@ sub single {
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") {
- print "\nIf --$long is provided several times, the last set ".
- "value will be used.\n";
+ push @extra, "\nIf --$long is provided several times, the last set ".
+ "value is used.\n";
}
elsif($multi eq "append") {
- print "\n--$long can be used several times in a command line\n";
+ push @extra, "\n--$long can be used several times in a command line\n";
}
elsif($multi eq "boolean") {
my $rev = "no-$long";
@@ -360,13 +390,24 @@ sub single {
$rev = $long;
$rev =~ s/^no-//;
}
- print "\nProviding --$long multiple times has no extra effect.\n".
- "Disable it again with --$rev.\n";
+ push @extra,
+ "\nProviding --$long multiple times has no extra effect.\n".
+ "Disable it again with \\-\\-$rev.\n";
}
elsif($multi eq "mutex") {
- print "\nProviding --$long multiple times has no extra effect.\n";
+ 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);
@@ -392,6 +433,7 @@ sub single {
}
push @foot, seealso($standalone, $mstr);
}
+
if($requires) {
my $l = manpageify($long);
push @foot, "$l requires that the underlying libcurl".
@@ -416,6 +458,8 @@ sub single {
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";
@@ -491,6 +535,7 @@ sub header {
while(<F>) {
s/%DATE/$date/g;
s/%VERSION/$version/g;
+ s/%GLOBALS/$globals/g;
push @d, $_;
}
close(F);
@@ -506,7 +551,7 @@ sub listhelp {
* | (__| |_| | _ <| |___
* \\___|\\___/|_| \\_\\_____|
*
- * Copyright (C) 1998 - $year, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel\@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -540,7 +585,7 @@ HEAD
my $long = $f;
my $short = $optlong{$long};
my @categories = split ' ', $catlong{$long};
- my $bitmask;
+ my $bitmask = ' ';
my $opt;
if(defined($short) && $long) {
@@ -556,6 +601,7 @@ HEAD
$bitmask .= ' | ';
}
}
+ $bitmask =~ s/(?=.{76}).{1,76}\|/$&\n /g;
my $arg = $arglong{$long};
if($arg) {
$opt .= " $arg";
@@ -563,7 +609,7 @@ HEAD
my $desc = $helplong{$f};
$desc =~ s/\"/\\\"/g; # escape double quotes
- my $line = sprintf " {\"%s\",\n \"%s\",\n %s},\n", $opt, $desc, $bitmask;
+ 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";
@@ -599,6 +645,36 @@ sub listcats {
}
}
+sub listglobals {
+ my (@files) = @_;
+ my @globalopts;
+
+ # Find all global options and output them
+ foreach my $f (sort @files) {
+ open(F, "<:crlf", "$f") ||
+ next;
+ my $long;
+ while(<F>) {
+ 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;
@@ -610,7 +686,9 @@ sub mainpage {
$ret += single($f, 0);
}
- header("page-footer");
+ if(!$ret) {
+ header("page-footer");
+ }
exit $ret if($ret);
}
@@ -637,6 +715,7 @@ sub showprotocols {
sub getargs {
my ($f, @s) = @_;
if($f eq "mainpage") {
+ listglobals(@s);
mainpage(@s);
return;
}
diff --git a/docs/cmdline-opts/get.d b/docs/cmdline-opts/get.d
index fbfbe8672..2e03a255b 100644
--- a/docs/cmdline-opts/get.d
+++ b/docs/cmdline-opts/get.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: get
Short: G
@@ -11,10 +11,10 @@ Added: 7.8.1
See-also: data request
Multi: boolean
---
-When used, this option will make all data specified with --data, --data-binary
+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 will be appended to the URL
+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 will instead be appended to
-the URL with a HEAD request.
+If used in combination with --head, the POST data is instead appended to the
+URL with a HEAD request.
diff --git a/docs/cmdline-opts/globoff.d b/docs/cmdline-opts/globoff.d
index ff84ad01d..53bed6ec8 100644
--- a/docs/cmdline-opts/globoff.d
+++ b/docs/cmdline-opts/globoff.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: globoff
Short: g
diff --git a/docs/cmdline-opts/happy-eyeballs-timeout-ms.d b/docs/cmdline-opts/happy-eyeballs-timeout-ms.d
index c5f10f6db..29114e209 100644
--- a/docs/cmdline-opts/happy-eyeballs-timeout-ms.d
+++ b/docs/cmdline-opts/happy-eyeballs-timeout-ms.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: happy-eyeballs-timeout-ms
Arg: <milliseconds>
diff --git a/docs/cmdline-opts/haproxy-clientip.d b/docs/cmdline-opts/haproxy-clientip.d
new file mode 100644
index 000000000..25cb7e623
--- /dev/null
+++ b/docs/cmdline-opts/haproxy-clientip.d
@@ -0,0 +1,29 @@
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, 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/docs/cmdline-opts/haproxy-protocol.d b/docs/cmdline-opts/haproxy-protocol.d
index b2129e6eb..34119062e 100644
--- a/docs/cmdline-opts/haproxy-protocol.d
+++ b/docs/cmdline-opts/haproxy-protocol.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: haproxy-protocol
Help: Send HAProxy PROXY protocol v1 header
diff --git a/docs/cmdline-opts/head.d b/docs/cmdline-opts/head.d
index 31de19aca..bb748b72e 100644
--- a/docs/cmdline-opts/head.d
+++ b/docs/cmdline-opts/head.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: head
Short: I
diff --git a/docs/cmdline-opts/header.d b/docs/cmdline-opts/header.d
index a64873fcb..95c1565e8 100644
--- a/docs/cmdline-opts/header.d
+++ b/docs/cmdline-opts/header.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: header
Short: H
@@ -10,6 +10,7 @@ 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
---
@@ -22,22 +23,23 @@ 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 will be 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 will make sure that each header you add/replace is sent with the proper
+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 will only mess things
-up for you.
+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 @- will make curl read the header file
-from stdin. Added in 7.55.0.
+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:"
@@ -47,10 +49,9 @@ 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, will make curl send the data using chunked encoding.
+with a request body, makes curl send the data using chunked encoding.
-**WARNING**: headers set with this option will be 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.
+**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/docs/cmdline-opts/help.d b/docs/cmdline-opts/help.d
index 7d835a381..f8675e484 100644
--- a/docs/cmdline-opts/help.d
+++ b/docs/cmdline-opts/help.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: help
Arg: <category>
@@ -8,11 +8,14 @@ Category: important curl
Example: --help all
Added: 4.0
See-also: verbose
-Multi: boolean
+Multi: custom
---
-Usage help. This lists all commands of the <category>.
-If no arg was provided, curl will display the most important
-command line arguments.
-If the argument "all" was provided, curl will display all options available.
-If the argument "category" was provided, curl will display all categories and
-their meanings.
+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/docs/cmdline-opts/hostpubmd5.d b/docs/cmdline-opts/hostpubmd5.d
index 966bbca27..e9db23db0 100644
--- a/docs/cmdline-opts/hostpubmd5.d
+++ b/docs/cmdline-opts/hostpubmd5.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: hostpubmd5
Arg: <md5>
@@ -11,5 +11,5 @@ 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 will refuse
+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/docs/cmdline-opts/hostpubsha256.d b/docs/cmdline-opts/hostpubsha256.d
index c95248504..b33f338bd 100644
--- a/docs/cmdline-opts/hostpubsha256.d
+++ b/docs/cmdline-opts/hostpubsha256.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: hostpubsha256
Arg: <sha256>
@@ -10,6 +10,8 @@ Example: --hostpubsha256 NDVkMTQxMGQ1ODdmMjQ3MjczYjAyOTY5MmRkMjVmNDQ= sftp://exa
See-also: hostpubmd5
Multi: single
---
-Pass a string containing a Base64-encoded SHA256 hash of the remote
-host's public key. Curl will refuse the connection with the host
-unless the hashes match.
+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/docs/cmdline-opts/hsts.d b/docs/cmdline-opts/hsts.d
index ec251acbe..e30d3b419 100644
--- a/docs/cmdline-opts/hsts.d
+++ b/docs/cmdline-opts/hsts.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: hsts
Arg: <file name>
@@ -11,11 +11,16 @@ See-also: proto
Multi: append
---
This option enables HSTS for the transfer. If the file name points to an
-existing HSTS cache file, that will be used. After a completed transfer, the
-cache will be saved to the file name again if it has been modified.
+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 will load contents from all the
-files but the last one will be used for saving.
+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/docs/cmdline-opts/http0.9.d b/docs/cmdline-opts/http0.9.d
index 58dec5577..3dd14a05c 100644
--- a/docs/cmdline-opts/http0.9.d
+++ b/docs/cmdline-opts/http0.9.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: http0.9
Tags: Versions
@@ -12,8 +12,8 @@ Multi: boolean
---
Tells curl to be fine with HTTP version 0.9 response.
-HTTP/0.9 is a completely headerless response and therefore you can also
-connect with this to non-HTTP servers and still get a response since curl will
-simply transparently downgrade - if allowed.
+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.
-Since curl 7.66.0, HTTP/0.9 is disabled by default.
+HTTP/0.9 is disabled by default (added in 7.66.0)
diff --git a/docs/cmdline-opts/http1.0.d b/docs/cmdline-opts/http1.0.d
index 3f8277edd..c5f4de872 100644
--- a/docs/cmdline-opts/http1.0.d
+++ b/docs/cmdline-opts/http1.0.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Short: 0
Long: http1.0
diff --git a/docs/cmdline-opts/http1.1.d b/docs/cmdline-opts/http1.1.d
index 205755309..3057aed36 100644
--- a/docs/cmdline-opts/http1.1.d
+++ b/docs/cmdline-opts/http1.1.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: http1.1
Tags: Versions
diff --git a/docs/cmdline-opts/http2-prior-knowledge.d b/docs/cmdline-opts/http2-prior-knowledge.d
index eb79c9f36..7d7cabfd8 100644
--- a/docs/cmdline-opts/http2-prior-knowledge.d
+++ b/docs/cmdline-opts/http2-prior-knowledge.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: http2-prior-knowledge
Tags: Versions
@@ -14,5 +14,5 @@ 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 will still do HTTP/2 the standard way with negotiated
-protocol version in the TLS handshake.
+away. HTTPS requests still do HTTP/2 the standard way with negotiated protocol
+version in the TLS handshake.
diff --git a/docs/cmdline-opts/http2.d b/docs/cmdline-opts/http2.d
index e247b649c..af5f3c4f5 100644
--- a/docs/cmdline-opts/http2.d
+++ b/docs/cmdline-opts/http2.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: http2
Tags: Versions
@@ -6,20 +6,19 @@ Protocols: HTTP
Added: 7.33.0
Mutexed: http1.1 http1.0 http2-prior-knowledge http3
Requires: HTTP/2
-See-also: no-alpn
-Help: Use HTTP 2
-See-also: http1.1 http3
+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 will attempt to negotiate HTTP/2 in the TLS
-handshake. curl does this by default.
+For HTTPS, this means curl negotiates HTTP/2 in the TLS handshake. curl does
+this by default.
-For HTTP, this means curl will attempt to upgrade the request to HTTP/2 using
-the Upgrade: request header.
+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
diff --git a/docs/cmdline-opts/http3-only.d b/docs/cmdline-opts/http3-only.d
new file mode 100644
index 000000000..c3f0f31aa
--- /dev/null
+++ b/docs/cmdline-opts/http3-only.d
@@ -0,0 +1,25 @@
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, 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/docs/cmdline-opts/http3.d b/docs/cmdline-opts/http3.d
index 7f5b8eb5a..a8258c4d3 100644
--- a/docs/cmdline-opts/http3.d
+++ b/docs/cmdline-opts/http3.d
@@ -1,10 +1,10 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, 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
+Mutexed: http1.1 http1.0 http2 http2-prior-knowledge http3-only
Requires: HTTP/3
Help: Use HTTP v3
See-also: http1.1 http2
@@ -13,10 +13,15 @@ Example: --http3 $URL
Multi: mutex
Experimental: yes
---
-Tells curl to use HTTP version 3 directly to the host and port number used in
-the URL. A normal HTTP/3 transaction will be done to a host and then get
-redirected via Alt-Svc, but this option allows a user to circumvent that when
-you know that the target speaks HTTP/3 on the given host and port.
+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 will make curl fail if a QUIC connection cannot be established, it
-cannot fall back to a lower HTTP version on its own.
+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/docs/cmdline-opts/ignore-content-length.d b/docs/cmdline-opts/ignore-content-length.d
index eda4bd016..505c04c18 100644
--- a/docs/cmdline-opts/ignore-content-length.d
+++ b/docs/cmdline-opts/ignore-content-length.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: ignore-content-length
Help: Ignore the size of the remote resource
@@ -10,10 +10,10 @@ 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 will report incorrect Content-Length for
+servers running Apache 1.x, which reports incorrect Content-Length for
files larger than 2 gigabytes.
-For FTP (since 7.46.0), skip the RETR command to figure out the size before
-downloading a file.
+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/docs/cmdline-opts/include.d b/docs/cmdline-opts/include.d
index 9e9649b7e..ce7b9d87b 100644
--- a/docs/cmdline-opts/include.d
+++ b/docs/cmdline-opts/include.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: include
Short: i
@@ -14,3 +14,6 @@ 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/docs/cmdline-opts/insecure.d b/docs/cmdline-opts/insecure.d
index c75817efc..e48d50002 100644
--- a/docs/cmdline-opts/insecure.d
+++ b/docs/cmdline-opts/insecure.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: insecure
Short: k
@@ -26,3 +26,8 @@ For SFTP and SCP, this option makes curl skip the *known_hosts* verification.
".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/docs/cmdline-opts/interface.d b/docs/cmdline-opts/interface.d
index 275f6151c..026ceaef5 100644
--- a/docs/cmdline-opts/interface.d
+++ b/docs/cmdline-opts/interface.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: interface
Arg: <name>
@@ -14,6 +14,6 @@ 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
+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/docs/cmdline-opts/ipfs-gateway.d b/docs/cmdline-opts/ipfs-gateway.d
new file mode 100644
index 000000000..e6845b327
--- /dev/null
+++ b/docs/cmdline-opts/ipfs-gateway.d
@@ -0,0 +1,32 @@
+c: Copyright (C) 2023, Mark Gaiser, <markg85@gmail.com>
+SPDX-License-Identifier: curl
+Long: ipfs-gateway
+Arg: <URL>
+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/docs/cmdline-opts/ipv4.d b/docs/cmdline-opts/ipv4.d
index 8a3e35e73..60690bedc 100644
--- a/docs/cmdline-opts/ipv4.d
+++ b/docs/cmdline-opts/ipv4.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Short: 4
Long: ipv4
@@ -11,7 +11,7 @@ See-also: http1.1 http2
Help: Resolve names to IPv4 addresses
Category: connection dns
Example: --ipv4 $URL
-Multi: boolean
+Multi: mutex
---
-This option tells curl to use IPv4 addresses only, and not for example try
-IPv6.
+This option tells curl to use IPv4 addresses only when resolving host names,
+and not for example try IPv6.
diff --git a/docs/cmdline-opts/ipv6.d b/docs/cmdline-opts/ipv6.d
index 16c47f178..24ce201a2 100644
--- a/docs/cmdline-opts/ipv6.d
+++ b/docs/cmdline-opts/ipv6.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Short: 6
Long: ipv6
@@ -11,7 +11,7 @@ See-also: http1.1 http2
Help: Resolve names to IPv6 addresses
Category: connection dns
Example: --ipv6 $URL
-Multi: boolean
+Multi: mutex
---
-This option tells curl to use IPv6 addresses only, and not for example try
-IPv4.
+This option tells curl to use IPv6 addresses only when resolving host names,
+and not for example try IPv4.
diff --git a/docs/cmdline-opts/json.d b/docs/cmdline-opts/json.d
index d2ea553b0..aa3b49de2 100644
--- a/docs/cmdline-opts/json.d
+++ b/docs/cmdline-opts/json.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: json
Arg: <data>
@@ -30,6 +30,6 @@ 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 will be concatenated to the previous before sending.
+data pieces are concatenated to the previous before sending.
The headers this option sets can be overridden with --header as usual.
diff --git a/docs/cmdline-opts/junk-session-cookies.d b/docs/cmdline-opts/junk-session-cookies.d
index 7816125fa..daea7840a 100644
--- a/docs/cmdline-opts/junk-session-cookies.d
+++ b/docs/cmdline-opts/junk-session-cookies.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: junk-session-cookies
Short: j
@@ -10,7 +10,6 @@ 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 will make it
-discard all "session cookies". This will basically have the same effect as if
-a new session is started. Typical browsers always discard session cookies when
-they are closed down.
+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/docs/cmdline-opts/keepalive-time.d b/docs/cmdline-opts/keepalive-time.d
index 9667633b9..5e284774d 100644
--- a/docs/cmdline-opts/keepalive-time.d
+++ b/docs/cmdline-opts/keepalive-time.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: keepalive-time
Arg: <seconds>
diff --git a/docs/cmdline-opts/key-type.d b/docs/cmdline-opts/key-type.d
index 83ab99b94..22339b4c9 100644
--- a/docs/cmdline-opts/key-type.d
+++ b/docs/cmdline-opts/key-type.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: key-type
Arg: <type>
diff --git a/docs/cmdline-opts/key.d b/docs/cmdline-opts/key.d
index 3e07c8ed1..4236218c9 100644
--- a/docs/cmdline-opts/key.d
+++ b/docs/cmdline-opts/key.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: key
Arg: <key>
@@ -15,11 +15,11 @@ 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:" will be interpreted as a
-PKCS#11 URI. If a PKCS#11 URI is provided, then the --engine option will be set
-as "pkcs11" if none was provided and the --key-type option will be set as
-"ENG" if none was provided.
+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
diff --git a/docs/cmdline-opts/krb.d b/docs/cmdline-opts/krb.d
index b2375ee79..42aa67ada 100644
--- a/docs/cmdline-opts/krb.d
+++ b/docs/cmdline-opts/krb.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: krb
Arg: <level>
@@ -13,4 +13,4 @@ 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' will instead be used.
+level that is not one of these, 'private' is used.
diff --git a/docs/cmdline-opts/libcurl.d b/docs/cmdline-opts/libcurl.d
index da845d939..52e252f3b 100644
--- a/docs/cmdline-opts/libcurl.d
+++ b/docs/cmdline-opts/libcurl.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: libcurl
Arg: <file>
@@ -8,10 +8,8 @@ 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 will get
-libcurl-using C source code written to the file that does the equivalent
-of what your command-line operation does!
-
-This option is global and does not need to be specified for each use of
---next.
+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/docs/cmdline-opts/limit-rate.d b/docs/cmdline-opts/limit-rate.d
index 0a1e4cf60..43ebf2c23 100644
--- a/docs/cmdline-opts/limit-rate.d
+++ b/docs/cmdline-opts/limit-rate.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: limit-rate
Arg: <speed>
@@ -8,7 +8,7 @@ Example: --limit-rate 100K $URL
Example: --limit-rate 1000 $URL
Example: --limit-rate 10M $URL
Added: 7.10
-See-also: speed-limit speed-time
+See-also: rate speed-limit speed-time
Multi: single
---
Specify the maximum transfer rate you want curl to use - for both downloads
@@ -17,13 +17,13 @@ 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' will count the number as kilobytes, 'm' or 'M' makes it
+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 will take precedence and
+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/docs/cmdline-opts/list-only.d b/docs/cmdline-opts/list-only.d
index d84974f49..dcfbf2ccc 100644
--- a/docs/cmdline-opts/list-only.d
+++ b/docs/cmdline-opts/list-only.d
@@ -1,11 +1,11 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: list-only
Short: l
-Protocols: FTP POP3
+Protocols: FTP POP3 SFTP
Help: List only mode
Added: 4.0
-Category: ftp pop3
+Category: ftp pop3 sftp
Example: --list-only ftp://example.com/dir/
See-also: quote request
Multi: boolean
@@ -20,6 +20,12 @@ 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
diff --git a/docs/cmdline-opts/local-port.d b/docs/cmdline-opts/local-port.d
index e889ee443..d6949b7ee 100644
--- a/docs/cmdline-opts/local-port.d
+++ b/docs/cmdline-opts/local-port.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: local-port
Arg: <num/range>
@@ -11,5 +11,5 @@ 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
-that will be busy at times so setting this range to something too narrow might
-cause unnecessary connection setup failures.
+so setting this range to something too narrow might cause unnecessary
+connection setup failures.
diff --git a/docs/cmdline-opts/location-trusted.d b/docs/cmdline-opts/location-trusted.d
index 8d19416d7..9f83d0ef0 100644
--- a/docs/cmdline-opts/location-trusted.d
+++ b/docs/cmdline-opts/location-trusted.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: location-trusted
Help: Like --location, and send auth to other hosts
@@ -9,7 +9,7 @@ Example: --location-trusted -u user:password $URL
Added: 7.10.4
Multi: boolean
---
-Like --location, but will allow 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 will send your authentication
-info (which is plaintext in the case of HTTP Basic authentication).
+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/docs/cmdline-opts/location.d b/docs/cmdline-opts/location.d
index c3b2b5d82..9a99a0513 100644
--- a/docs/cmdline-opts/location.d
+++ b/docs/cmdline-opts/location.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: location
Short: L
@@ -12,18 +12,19 @@ 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 will make curl redo the request on the new place. If used together with
---include or --head, headers from all requested pages will be shown. When
-authentication is used, curl only sends its credentials to the initial
-host. If a redirect takes curl to a different host, it will not be able to
-intercept the user+password. See also --location-trusted on how to change
-this. You can limit the amount of redirects to follow by using the
---max-redirs option.
+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 curl follows a redirect and if the request is a POST, it will send the
+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 will re-send the following request
-using the same unmodified method.
+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.
diff --git a/docs/cmdline-opts/login-options.d b/docs/cmdline-opts/login-options.d
index e9e07a3ef..c67be90f8 100644
--- a/docs/cmdline-opts/login-options.d
+++ b/docs/cmdline-opts/login-options.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: login-options
Arg: <options>
@@ -13,6 +13,13 @@ 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 IETF draft draft-earhart-url-smtp-00.txt
+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/docs/cmdline-opts/mail-auth.d b/docs/cmdline-opts/mail-auth.d
index e215575be..45ceebd99 100644
--- a/docs/cmdline-opts/mail-auth.d
+++ b/docs/cmdline-opts/mail-auth.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: mail-auth
Arg: <address>
@@ -10,6 +10,5 @@ Category: smtp
Example: --mail-auth user@example.come -T mail smtp://example.com/
Multi: single
---
-Specify a single address. This will be used to specify the authentication
-address (identity) of a submitted message that is being relayed to another
-server.
+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/docs/cmdline-opts/mail-from.d b/docs/cmdline-opts/mail-from.d
index c96193840..0729e841a 100644
--- a/docs/cmdline-opts/mail-from.d
+++ b/docs/cmdline-opts/mail-from.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: mail-from
Arg: <address>
diff --git a/docs/cmdline-opts/mail-rcpt-allowfails.d b/docs/cmdline-opts/mail-rcpt-allowfails.d
index d14b9e8f0..d2a5f39d3 100644
--- a/docs/cmdline-opts/mail-rcpt-allowfails.d
+++ b/docs/cmdline-opts/mail-rcpt-allowfails.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: mail-rcpt-allowfails
Help: Allow RCPT TO command to fail for some recipients
@@ -9,14 +9,14 @@ 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 will abort SMTP
+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 will make curl ignore errors and proceed with the
+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
-will still abort the SMTP conversation and return the error received from to
-the last RCPT TO command.
+still aborts the SMTP conversation and returns the error received from to the
+last RCPT TO command.
diff --git a/docs/cmdline-opts/mail-rcpt.d b/docs/cmdline-opts/mail-rcpt.d
index d1e6a1561..a4b16c4f7 100644
--- a/docs/cmdline-opts/mail-rcpt.d
+++ b/docs/cmdline-opts/mail-rcpt.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: mail-rcpt
Arg: <address>
@@ -13,9 +13,9 @@ 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
+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
-RFC5321). (Added in 7.34.0)
+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".
diff --git a/docs/cmdline-opts/manual.d b/docs/cmdline-opts/manual.d
index e6d439713..9ee4d075a 100644
--- a/docs/cmdline-opts/manual.d
+++ b/docs/cmdline-opts/manual.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: manual
Short: M
@@ -7,6 +7,6 @@ Category: curl
Example: --manual
Added: 5.2
See-also: verbose libcurl trace
-Multi: boolean
+Multi: custom
---
Manual. Display the huge help text.
diff --git a/docs/cmdline-opts/max-filesize.d b/docs/cmdline-opts/max-filesize.d
index 822252e82..7541a2712 100644
--- a/docs/cmdline-opts/max-filesize.d
+++ b/docs/cmdline-opts/max-filesize.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: max-filesize
Arg: <bytes>
@@ -11,13 +11,16 @@ 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 will not start and curl will
-return with exit code 63.
+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' will count the
+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**: The file size is not always known prior to download, and for such
-files this option has no effect even if the file transfer ends up being larger
-than this given limit. \ No newline at end of file
+**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/docs/cmdline-opts/max-redirs.d b/docs/cmdline-opts/max-redirs.d
index f8434748e..31ce98ea5 100644
--- a/docs/cmdline-opts/max-redirs.d
+++ b/docs/cmdline-opts/max-redirs.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: max-redirs
Arg: <num>
diff --git a/docs/cmdline-opts/max-time.d b/docs/cmdline-opts/max-time.d
index 8efef1279..0d5747b26 100644
--- a/docs/cmdline-opts/max-time.d
+++ b/docs/cmdline-opts/max-time.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: max-time
Short: m
@@ -11,12 +11,13 @@ 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. Since 7.32.0, this option accepts decimal
-values, but the actual timeout will decrease in accuracy as the specified
-timeout increases in decimal precision.
+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/docs/cmdline-opts/metalink.d b/docs/cmdline-opts/metalink.d
index 2a05228ae..88f012176 100644
--- a/docs/cmdline-opts/metalink.d
+++ b/docs/cmdline-opts/metalink.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: metalink
Help: Process given URLs as metalink XML file
@@ -8,5 +8,5 @@ Example: --metalink file $URL
See-also: parallel
Multi: single
---
-This option was previously used to specify a metalink resource. Metalink
-support has been disabled in curl since 7.78.0 for security reasons.
+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/docs/cmdline-opts/negotiate.d b/docs/cmdline-opts/negotiate.d
index 727f89826..f1dd34dba 100644
--- a/docs/cmdline-opts/negotiate.d
+++ b/docs/cmdline-opts/negotiate.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: negotiate
Help: Use HTTP Negotiate (SPNEGO) authentication
@@ -17,5 +17,3 @@ This option requires a library built with GSS-API or SSPI support. Use
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.
-
-If this option is used several times, only the first one is used.
diff --git a/docs/cmdline-opts/netrc-file.d b/docs/cmdline-opts/netrc-file.d
index f50c0ed34..7b1a214da 100644
--- a/docs/cmdline-opts/netrc-file.d
+++ b/docs/cmdline-opts/netrc-file.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: netrc-file
Help: Specify FILE for netrc
@@ -14,4 +14,4 @@ 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 will abide by --netrc-optional if specified.
+It abides by --netrc-optional if specified.
diff --git a/docs/cmdline-opts/netrc-optional.d b/docs/cmdline-opts/netrc-optional.d
index 6d96acf6c..a7759640f 100644
--- a/docs/cmdline-opts/netrc-optional.d
+++ b/docs/cmdline-opts/netrc-optional.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: netrc-optional
Help: Use either .netrc or URL
diff --git a/docs/cmdline-opts/netrc.d b/docs/cmdline-opts/netrc.d
index 7f109f7ad..f0ec75f37 100644
--- a/docs/cmdline-opts/netrc.d
+++ b/docs/cmdline-opts/netrc.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: netrc
Short: n
@@ -7,15 +7,19 @@ 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* (*_netrc* on Windows) 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 will enable user authentication. See
-*netrc(5)* and *ftp(1)* for details on the file format. Curl will 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.
+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'
diff --git a/docs/cmdline-opts/next.d b/docs/cmdline-opts/next.d
index 49a3d2e2e..93c9c45b3 100644
--- a/docs/cmdline-opts/next.d
+++ b/docs/cmdline-opts/next.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Short: :
Long: next
@@ -18,9 +18,9 @@ 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 will reset all local options and only global ones will have their
-values survive over to the operation following the --next instruction. Global
-options include --verbose, --trace, --trace-ascii and --fail-early.
+--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:
diff --git a/docs/cmdline-opts/no-alpn.d b/docs/cmdline-opts/no-alpn.d
index 8f01f4af4..102f2990e 100644
--- a/docs/cmdline-opts/no-alpn.d
+++ b/docs/cmdline-opts/no-alpn.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: no-alpn
Tags: HTTP/2
@@ -14,3 +14,6 @@ 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/docs/cmdline-opts/no-buffer.d b/docs/cmdline-opts/no-buffer.d
index 2de48c97c..33f6fbc5b 100644
--- a/docs/cmdline-opts/no-buffer.d
+++ b/docs/cmdline-opts/no-buffer.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: no-buffer
Short: N
@@ -10,6 +10,9 @@ See-also: progress-bar
Multi: boolean
---
Disables the buffering of the output stream. In normal work situations, curl
-will use a standard buffered output stream that will have the effect that it
-will output the data in chunks, not necessarily exactly when the data arrives.
-Using this option will disable that buffering.
+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/docs/cmdline-opts/no-clobber.d b/docs/cmdline-opts/no-clobber.d
index d8fc3f141..9325558da 100644
--- a/docs/cmdline-opts/no-clobber.d
+++ b/docs/cmdline-opts/no-clobber.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: no-clobber
Help: Do not overwrite files that already exist
@@ -10,10 +10,10 @@ 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 will not
+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 or -J is
+--clobber to enforce the clobbering, even if --remote-header-name is
specified.
diff --git a/docs/cmdline-opts/no-keepalive.d b/docs/cmdline-opts/no-keepalive.d
index 0f4464647..0aeaef8d5 100644
--- a/docs/cmdline-opts/no-keepalive.d
+++ b/docs/cmdline-opts/no-keepalive.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: no-keepalive
Help: Disable TCP keepalive on the connection
diff --git a/docs/cmdline-opts/no-npn.d b/docs/cmdline-opts/no-npn.d
index 97314e8cc..cd0e5e2af 100644
--- a/docs/cmdline-opts/no-npn.d
+++ b/docs/cmdline-opts/no-npn.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: no-npn
Tags: Versions HTTP/2
@@ -12,7 +12,7 @@ Category: tls http
Example: --no-npn $URL
Multi: boolean
---
-In curl 7.86.0 and later, curl never uses NPN.
+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
diff --git a/docs/cmdline-opts/no-progress-meter.d b/docs/cmdline-opts/no-progress-meter.d
index 9a298c44c..820557d9d 100644
--- a/docs/cmdline-opts/no-progress-meter.d
+++ b/docs/cmdline-opts/no-progress-meter.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: no-progress-meter
Help: Do not show the progress meter
diff --git a/docs/cmdline-opts/no-sessionid.d b/docs/cmdline-opts/no-sessionid.d
index b3e51b216..9699f46bc 100644
--- a/docs/cmdline-opts/no-sessionid.d
+++ b/docs/cmdline-opts/no-sessionid.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: no-sessionid
Help: Disable SSL session-ID reusing
diff --git a/docs/cmdline-opts/noproxy.d b/docs/cmdline-opts/noproxy.d
index c28e897eb..001c109b6 100644
--- a/docs/cmdline-opts/noproxy.d
+++ b/docs/cmdline-opts/noproxy.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: noproxy
Arg: <no-proxy-list>
@@ -16,6 +16,12 @@ 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.
-Since 7.53.0, This option overrides the environment variables that disable the
-proxy ('no_proxy' and 'NO_PROXY'). If there's an environment variable
-disabling a proxy, you can set the noproxy list to "" to override it.
+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/docs/cmdline-opts/ntlm-wb.d b/docs/cmdline-opts/ntlm-wb.d
index 7317adc78..4a3225293 100644
--- a/docs/cmdline-opts/ntlm-wb.d
+++ b/docs/cmdline-opts/ntlm-wb.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: ntlm-wb
Help: Use HTTP NTLM authentication with winbind
diff --git a/docs/cmdline-opts/ntlm.d b/docs/cmdline-opts/ntlm.d
index 9e1a99687..cc98c51e3 100644
--- a/docs/cmdline-opts/ntlm.d
+++ b/docs/cmdline-opts/ntlm.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: ntlm
Help: Use HTTP NTLM authentication
@@ -20,5 +20,3 @@ method instead, such as Digest.
If you want to enable NTLM for your proxy authentication, then use
--proxy-ntlm.
-
-If this option is used several times, only the first one is used.
diff --git a/docs/cmdline-opts/oauth2-bearer.d b/docs/cmdline-opts/oauth2-bearer.d
index 6b639cba0..6f3514784 100644
--- a/docs/cmdline-opts/oauth2-bearer.d
+++ b/docs/cmdline-opts/oauth2-bearer.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: oauth2-bearer
Help: OAuth 2 Bearer Token
diff --git a/docs/cmdline-opts/output-dir.d b/docs/cmdline-opts/output-dir.d
index 5c53c7fdc..803b2948b 100644
--- a/docs/cmdline-opts/output-dir.d
+++ b/docs/cmdline-opts/output-dir.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: output-dir
Arg: <dir>
@@ -15,5 +15,5 @@ This option specifies the directory in which files should be stored, when
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 will fail
-unless --create-dirs is also used.
+If the specified target directory does not exist, the operation fails unless
+--create-dirs is also used.
diff --git a/docs/cmdline-opts/output.d b/docs/cmdline-opts/output.d
index e3005d587..316f10999 100644
--- a/docs/cmdline-opts/output.d
+++ b/docs/cmdline-opts/output.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: output
Arg: <file>
@@ -8,42 +8,42 @@ 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].com" -o "#1_#2"
+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 <file> 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 <file> specifier. That variable will be replaced with the current
+number in the <file> 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].com" -o "#1_#2"
+ 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
+ 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
+ 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) will force the
-output to be done to stdout.
+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
+ curl example.com -o /dev/null
-Or for Windows use nul:
+Or for Windows:
- curl example.com -o nul
+ curl example.com -o nul
diff --git a/docs/cmdline-opts/page-footer b/docs/cmdline-opts/page-footer
index c8a65be04..af41c9482 100644
--- a/docs/cmdline-opts/page-footer
+++ b/docs/cmdline-opts/page-footer
@@ -37,64 +37,65 @@ 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.
-IPv6 numerical addresses are compared as strings, so they will only match if
-the representations are the same: "::1" is the same as "::0:1" but they do not
-match.
+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 <dir>"
On Windows, this variable is used when trying to find the home directory. If
the primary home variable are all unset.
.IP "COLUMNS <terminal width>"
-If set, the specified number of characters will be used as the terminal width
-when the alternative progress-bar is shown. If not set, curl will try to
-figure it out using other ways.
+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 <file>"
-If set, will be used as the \fI--cacert\fP value.
+If set, it is used as the --cacert value.
.IP "CURL_HOME <dir>"
If set, is the first variable curl checks when trying to find its home
-directory. If not set, it continues to check \fBXDG_CONFIG_HOME\fP.
+directory. If not set, it continues to check *XDG_CONFIG_HOME*
.IP "CURL_SSL_BACKEND <TLS backend>"
If curl was built with support for "MultiSSL", meaning that it has built-in
support for more than one TLS backend, this environment variable can be set to
the case insensitive name of the particular backend to use when curl is
-invoked. Setting a name that is not a built-in alternative will make curl
-stay with the default.
+invoked. Setting a name that is not a built-in alternative makes curl stay
+with the default.
-SSL backend names (case-insensitive): bearssl, gnutls, gskit, mbedtls,
-nss, openssl, rustls, schannel, secure-transport, wolfssl
+SSL backend names (case-insensitive): **bearssl**, **gnutls**, **mbedtls**,
+**openssl**, **rustls**, **schannel**, **secure-transport**, **wolfssl**
.IP "HOME <dir>"
If set, this is used to find the home directory when that is needed. Like when
-looking for the default .curlrc. \fBCURL_HOME\fP and \fBXDG_CONFIG_HOME\fP
+looking for the default .curlrc. *CURL_HOME* and *XDG_CONFIG_HOME*
have preference.
.IP "QLOGDIR <directory name>"
If curl was built with HTTP/3 support, setting this environment variable to a
-local directory will make curl produce qlogs in that directory, using file
+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 both QUIC backends.
+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.
+Used on VMS when trying to detect if using a **DCL** or a **unix** shell.
.IP "SSL_CERT_DIR <dir>"
-If set, will be used as the \fI--capath\fP value.
+If set, it is used as the --capath value.
.IP "SSL_CERT_FILE <path>"
-If set, will be used as the \fI--cacert\fP value.
+If set, it is used as the --cacert value.
.IP "SSLKEYLOGFILE <file name>"
-If you set this environment variable to a file name, curl will store 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, NSS and wolfSSL.
+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 <dir>"
On Windows, this variable is used when trying to find the home directory. If
-the other, primary, variable are all unset. If set, curl will use the path
-"$USERPROFILE\\Application Data".
+the other, primary, variable are all unset. If set, curl uses the path
+**"$USERPROFILE\\Application Data"**.
.IP "XDG_CONFIG_HOME <dir>"
-If \fBCURL_HOME\fP is not set, this variable is checked when looking for a
+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 will be treated as an HTTP proxy.
+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://"
@@ -172,8 +173,8 @@ appears if --fail is used.
.IP 23
Write error. Curl could not write data to a local filesystem or similar.
.IP 25
-FTP could not STOR file. The server denied the STOR operation, used for FTP
-uploading.
+Failed starting the upload. For FTP, the server typically denied the STOR
+command.
.IP 26
Read error. Various reading problems.
.IP 27
@@ -242,7 +243,7 @@ Requested FTP SSL level failed.
.IP 65
Sending the data requires a rewind that failed.
.IP 66
-Failed to initialise SSL Engine.
+Failed to initialize SSL Engine.
.IP 67
The user name, password, or similar was not accepted and curl failed to log in.
.IP 68
@@ -282,7 +283,7 @@ Unable to parse FTP file list.
.IP 88
FTP chunk callback reported error.
.IP 89
-No connection available, the session will be queued.
+No connection available, the session is queued.
.IP 90
SSL public key does not matched pinned public key.
.IP 91
@@ -299,9 +300,15 @@ 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 will appear here in future releases. The existing ones
-are meant to never change.
+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
diff --git a/docs/cmdline-opts/page-header b/docs/cmdline-opts/page-header
index 1737ab5bd..7d14f4c45 100644
--- a/docs/cmdline-opts/page-header
+++ b/docs/cmdline-opts/page-header
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -30,16 +30,10 @@ curl \- transfer a URL
.SH SYNOPSIS
.B curl [options / URLs]
.SH DESCRIPTION
-**curl** is a tool for transferring data from or to a server. 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. The command is designed to work without user
-interaction.
-
-curl offers a busload of useful tricks like proxy support, user
-authentication, FTP upload, HTTP post, SSL connections, cookies, file transfer
-resume and more. As you will see below, the number of features will make your
-head spin.
+**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.
@@ -47,8 +41,33 @@ curl is powered by libcurl for all transfer-related features. See
The URL syntax is protocol-dependent. You find a detailed description in
RFC 3986.
-You can specify multiple URLs or parts of URLs by writing part sets within
-braces and quoting the URL as in:
+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"
@@ -65,10 +84,6 @@ other:
"http://example.com/archive[1996-1999]/vol[1-4]/part{a,b,c}.html"
-You can specify any amount of URLs on the command line. They will be fetched
-in a sequential manner in the specified order. You can specify command line
-options and URLs mixed and in any order on the command line.
-
You can specify a step counter for the ranges to get every Nth number or
letter:
@@ -81,25 +96,49 @@ 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 '*'.
-Provide the IPv6 zone index in the URL with an escaped percentage sign and the
-interface name. Like in
+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 (-)).
- "http://[fe80::3%25eth0]/"
+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 "\\{{".
-If you specify URL without protocol:// prefix, curl will attempt to guess what
-protocol you might want. It will then default to HTTP but try other protocols
-based on often-used host name prefixes. For example, for host names starting
-with "ftp." curl will assume you want to speak FTP.
+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.
-curl will do its best to use what you pass to it as a URL. It is not trying to
-validate it as a syntactically correct URL by any means but is fairly liberal
-with what it accepts.
+Example. Get the USER environment variable into the URL, fail if USER is not
+set:
-curl will attempt to re-use connections for multiple file transfers, so that
-getting many files from the same server will not do multiple connects /
-handshakes. This improves speed. Of course this is only done on files
-specified on a single command line and cannot be used between separate curl
-invocations.
+ --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
@@ -117,7 +156,7 @@ 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
-will work.
+works.
.IP FTP(S)
curl supports the File Transfer Protocol with a lot of tweaks and levers. With
or without using TLS.
@@ -140,7 +179,7 @@ not supported (yet).
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 server streaming media
+The **Realtime Messaging Protocol** is primarily used to serve streaming media
and curl can download it.
.IP RTSP
curl supports RTSP 1.0 downloads.
@@ -161,9 +200,9 @@ 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 number of bytes and the speeds are in bytes per
-second. The suffixes (k, M, G, T, P) are 1024 based. For example 1k is 1024
-bytes. 1M is 1048576 bytes.
+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
@@ -180,9 +219,22 @@ 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.
+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
@@ -191,9 +243,16 @@ 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.
+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.
+*--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/docs/cmdline-opts/parallel-immediate.d b/docs/cmdline-opts/parallel-immediate.d
index e202214c1..b534dd512 100644
--- a/docs/cmdline-opts/parallel-immediate.d
+++ b/docs/cmdline-opts/parallel-immediate.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: parallel-immediate
Help: Do not wait for multiplexing (with --parallel)
@@ -7,11 +7,9 @@ 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 will instruct curl that it should
+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.
-
-This option is global and does not need to be specified for each use of
---next.
diff --git a/docs/cmdline-opts/parallel-max.d b/docs/cmdline-opts/parallel-max.d
index 7bdd1b8f4..cc6d32d18 100644
--- a/docs/cmdline-opts/parallel-max.d
+++ b/docs/cmdline-opts/parallel-max.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: parallel-max
Arg: <num>
diff --git a/docs/cmdline-opts/parallel.d b/docs/cmdline-opts/parallel.d
index 83c5cc5bd..4f698f8b3 100644
--- a/docs/cmdline-opts/parallel.d
+++ b/docs/cmdline-opts/parallel.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Short: Z
Long: parallel
@@ -8,9 +8,7 @@ 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.
-
-This option is global and does not need to be specified for each use of
---next.
diff --git a/docs/cmdline-opts/pass.d b/docs/cmdline-opts/pass.d
index a81c34892..2c0a2bef6 100644
--- a/docs/cmdline-opts/pass.d
+++ b/docs/cmdline-opts/pass.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: pass
Arg: <phrase>
diff --git a/docs/cmdline-opts/path-as-is.d b/docs/cmdline-opts/path-as-is.d
index 45c161b6d..9897d882f 100644
--- a/docs/cmdline-opts/path-as-is.d
+++ b/docs/cmdline-opts/path-as-is.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: path-as-is
Help: Do not squash .. sequences in URL path
@@ -9,5 +9,5 @@ See-also: request-target
Multi: boolean
---
Tell curl to not handle sequences of /../ or /./ in the given URL
-path. Normally curl will squash or merge them according to standards but with
+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/docs/cmdline-opts/pinnedpubkey.d b/docs/cmdline-opts/pinnedpubkey.d
index 3ac484690..d799bfac8 100644
--- a/docs/cmdline-opts/pinnedpubkey.d
+++ b/docs/cmdline-opts/pinnedpubkey.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: pinnedpubkey
Arg: <hashes>
@@ -18,21 +18,21 @@ or DER format, or any number of base64 encoded sha256 hashes preceded by
When negotiating a TLS or SSL connection, the server sends a certificate
indicating its identity. A public key is extracted from this certificate and
-if it does not exactly match the public key provided to this option, curl will
-abort the connection before sending or receiving any data.
+if it does not exactly match the public key provided to this option, curl
+aborts the connection before sending or receiving any data.
-PEM/DER support:
-
-7.39.0: OpenSSL, GnuTLS and GSKit
+This option is independent of option --insecure. If you use both options
+together then the peer is still verified by public key.
-7.43.0: NSS and wolfSSL
+PEM/DER support:
-7.47.0: mbedtls
+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:
-7.44.0: OpenSSL, GnuTLS, NSS and wolfSSL
-
-7.47.0: mbedtls
+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/docs/cmdline-opts/post301.d b/docs/cmdline-opts/post301.d
index 0de2e519e..d067fc8cc 100644
--- a/docs/cmdline-opts/post301.d
+++ b/docs/cmdline-opts/post301.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: post301
Help: Do not switch to GET after following a 301
diff --git a/docs/cmdline-opts/post302.d b/docs/cmdline-opts/post302.d
index 4a42c79d0..b7190ce0f 100644
--- a/docs/cmdline-opts/post302.d
+++ b/docs/cmdline-opts/post302.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: post302
Help: Do not switch to GET after following a 302
diff --git a/docs/cmdline-opts/post303.d b/docs/cmdline-opts/post303.d
index 79c891687..52d440c45 100644
--- a/docs/cmdline-opts/post303.d
+++ b/docs/cmdline-opts/post303.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: post303
Help: Do not switch to GET after following a 303
diff --git a/docs/cmdline-opts/preproxy.d b/docs/cmdline-opts/preproxy.d
index 5be20712b..b55c1d47a 100644
--- a/docs/cmdline-opts/preproxy.d
+++ b/docs/cmdline-opts/preproxy.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: preproxy
Arg: [protocol://]host[:port]
@@ -16,7 +16,7 @@ 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 will make curl default to SOCKS4.
+specified makes curl default to SOCKS4.
If the port number is not specified in the proxy string, it is assumed to be
1080.
diff --git a/docs/cmdline-opts/progress-bar.d b/docs/cmdline-opts/progress-bar.d
index 5c87023b8..fee170979 100644
--- a/docs/cmdline-opts/progress-bar.d
+++ b/docs/cmdline-opts/progress-bar.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Short: #
Long: progress-bar
@@ -8,15 +8,13 @@ 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 will be space ship (-=o=-) that moves back and forth but
-only while data is being transferred, with a set of flying hash sign symbols on
+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.
-
-This option is global and does not need to be specified for each use of
---next.
diff --git a/docs/cmdline-opts/proto-default.d b/docs/cmdline-opts/proto-default.d
index bb8940f7e..d5b4bcd10 100644
--- a/docs/cmdline-opts/proto-default.d
+++ b/docs/cmdline-opts/proto-default.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proto-default
Help: Use PROTOCOL for any URL missing a scheme
diff --git a/docs/cmdline-opts/proto-redir.d b/docs/cmdline-opts/proto-redir.d
index b6f0f0f36..dec871614 100644
--- a/docs/cmdline-opts/proto-redir.d
+++ b/docs/cmdline-opts/proto-redir.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proto-redir
Arg: <protocols>
@@ -17,6 +17,6 @@ Example, allow only HTTP and HTTPS on redirect:
curl --proto-redir -all,http,https http://example.com
-By default curl will only allow HTTP, HTTPS, FTP and FTPS on redirect (since
+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/docs/cmdline-opts/proto.d b/docs/cmdline-opts/proto.d
index a24c0dbdc..ac024bf42 100644
--- a/docs/cmdline-opts/proto.d
+++ b/docs/cmdline-opts/proto.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proto
Arg: <protocols>
diff --git a/docs/cmdline-opts/proxy-anyauth.d b/docs/cmdline-opts/proxy-anyauth.d
index c215ad746..fa460876e 100644
--- a/docs/cmdline-opts/proxy-anyauth.d
+++ b/docs/cmdline-opts/proxy-anyauth.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-anyauth
Help: Pick any proxy authentication method
diff --git a/docs/cmdline-opts/proxy-basic.d b/docs/cmdline-opts/proxy-basic.d
index 3856c49f3..ff56631f7 100644
--- a/docs/cmdline-opts/proxy-basic.d
+++ b/docs/cmdline-opts/proxy-basic.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-basic
Help: Use Basic authentication on the proxy
diff --git a/docs/cmdline-opts/proxy-ca-native.d b/docs/cmdline-opts/proxy-ca-native.d
new file mode 100644
index 000000000..aab4fcabc
--- /dev/null
+++ b/docs/cmdline-opts/proxy-ca-native.d
@@ -0,0 +1,21 @@
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, 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/docs/cmdline-opts/proxy-cacert.d b/docs/cmdline-opts/proxy-cacert.d
index a7c8e743b..45dc3f301 100644
--- a/docs/cmdline-opts/proxy-cacert.d
+++ b/docs/cmdline-opts/proxy-cacert.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-cacert
Help: CA certificate to verify peer against for proxy
diff --git a/docs/cmdline-opts/proxy-capath.d b/docs/cmdline-opts/proxy-capath.d
index e6113012b..309f9408a 100644
--- a/docs/cmdline-opts/proxy-capath.d
+++ b/docs/cmdline-opts/proxy-capath.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-capath
Help: CA directory to verify peer against for proxy
diff --git a/docs/cmdline-opts/proxy-cert-type.d b/docs/cmdline-opts/proxy-cert-type.d
index 2376acab4..4ab38f5a8 100644
--- a/docs/cmdline-opts/proxy-cert-type.d
+++ b/docs/cmdline-opts/proxy-cert-type.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-cert-type
Arg: <type>
diff --git a/docs/cmdline-opts/proxy-cert.d b/docs/cmdline-opts/proxy-cert.d
index cc2f8041b..2a869deb0 100644
--- a/docs/cmdline-opts/proxy-cert.d
+++ b/docs/cmdline-opts/proxy-cert.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-cert
Arg: <cert[:passwd]>
diff --git a/docs/cmdline-opts/proxy-ciphers.d b/docs/cmdline-opts/proxy-ciphers.d
index 1fdbb3443..5879f397e 100644
--- a/docs/cmdline-opts/proxy-ciphers.d
+++ b/docs/cmdline-opts/proxy-ciphers.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-ciphers
Arg: <list>
@@ -10,3 +10,9 @@ 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/docs/cmdline-opts/proxy-crlfile.d b/docs/cmdline-opts/proxy-crlfile.d
index 7e4ef24a9..1a8fdf25d 100644
--- a/docs/cmdline-opts/proxy-crlfile.d
+++ b/docs/cmdline-opts/proxy-crlfile.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-crlfile
Arg: <file>
diff --git a/docs/cmdline-opts/proxy-digest.d b/docs/cmdline-opts/proxy-digest.d
index f8a56fac9..c5cb19c48 100644
--- a/docs/cmdline-opts/proxy-digest.d
+++ b/docs/cmdline-opts/proxy-digest.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-digest
Help: Use Digest authentication on the proxy
diff --git a/docs/cmdline-opts/proxy-header.d b/docs/cmdline-opts/proxy-header.d
index c064b1ff8..06ae3bcba 100644
--- a/docs/cmdline-opts/proxy-header.d
+++ b/docs/cmdline-opts/proxy-header.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-header
Arg: <header/@file>
@@ -17,16 +17,16 @@ 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 will make sure that each header you add/replace is sent with the proper
+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 will only mess things
-up for you.
+content: do not add newlines or carriage returns, they only mess things up for
+you.
-Headers specified with this option will not be included in requests that curl
-knows will not be sent to a proxy.
+Headers specified with this option are not included in requests that curl
+knows are not be sent to a proxy.
-Starting in 7.55.0, this option can take an argument in @filename style, which
-then adds a header for each line in the input file. Using @- will make curl
-read the header file from stdin.
+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/docs/cmdline-opts/proxy-http2.d b/docs/cmdline-opts/proxy-http2.d
new file mode 100644
index 000000000..58f55e74d
--- /dev/null
+++ b/docs/cmdline-opts/proxy-http2.d
@@ -0,0 +1,18 @@
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, 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/docs/cmdline-opts/proxy-insecure.d b/docs/cmdline-opts/proxy-insecure.d
index 7eb00244e..beb8c2531 100644
--- a/docs/cmdline-opts/proxy-insecure.d
+++ b/docs/cmdline-opts/proxy-insecure.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-insecure
Help: Do HTTPS proxy connections without verifying the proxy
diff --git a/docs/cmdline-opts/proxy-key-type.d b/docs/cmdline-opts/proxy-key-type.d
index 7f4e51ef0..3fd11f3a3 100644
--- a/docs/cmdline-opts/proxy-key-type.d
+++ b/docs/cmdline-opts/proxy-key-type.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-key-type
Arg: <type>
diff --git a/docs/cmdline-opts/proxy-key.d b/docs/cmdline-opts/proxy-key.d
index 01bd51aa6..4bf2748a4 100644
--- a/docs/cmdline-opts/proxy-key.d
+++ b/docs/cmdline-opts/proxy-key.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-key
Help: Private key for HTTPS proxy
diff --git a/docs/cmdline-opts/proxy-negotiate.d b/docs/cmdline-opts/proxy-negotiate.d
index f0ca0b08a..89b5c1bde 100644
--- a/docs/cmdline-opts/proxy-negotiate.d
+++ b/docs/cmdline-opts/proxy-negotiate.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-negotiate
Help: Use HTTP Negotiate (SPNEGO) authentication on the proxy
diff --git a/docs/cmdline-opts/proxy-ntlm.d b/docs/cmdline-opts/proxy-ntlm.d
index 57cb9945d..f8481e5d6 100644
--- a/docs/cmdline-opts/proxy-ntlm.d
+++ b/docs/cmdline-opts/proxy-ntlm.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-ntlm
Help: Use NTLM authentication on the proxy
diff --git a/docs/cmdline-opts/proxy-pass.d b/docs/cmdline-opts/proxy-pass.d
index 733e62615..307139951 100644
--- a/docs/cmdline-opts/proxy-pass.d
+++ b/docs/cmdline-opts/proxy-pass.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-pass
Arg: <phrase>
diff --git a/docs/cmdline-opts/proxy-pinnedpubkey.d b/docs/cmdline-opts/proxy-pinnedpubkey.d
index 4f139af60..7bf99d8c5 100644
--- a/docs/cmdline-opts/proxy-pinnedpubkey.d
+++ b/docs/cmdline-opts/proxy-pinnedpubkey.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-pinnedpubkey
Arg: <hashes>
@@ -18,5 +18,5 @@ or DER format, or any number of base64 encoded sha256 hashes preceded by
When negotiating a TLS or SSL connection, the server sends a certificate
indicating its identity. A public key is extracted from this certificate and
-if it does not exactly match the public key provided to this option, curl will
-abort the connection before sending or receiving any data.
+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/docs/cmdline-opts/proxy-service-name.d b/docs/cmdline-opts/proxy-service-name.d
index 02191afb0..200973fb5 100644
--- a/docs/cmdline-opts/proxy-service-name.d
+++ b/docs/cmdline-opts/proxy-service-name.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-service-name
Arg: <name>
diff --git a/docs/cmdline-opts/proxy-ssl-allow-beast.d b/docs/cmdline-opts/proxy-ssl-allow-beast.d
index c5149f597..55ff62b46 100644
--- a/docs/cmdline-opts/proxy-ssl-allow-beast.d
+++ b/docs/cmdline-opts/proxy-ssl-allow-beast.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-ssl-allow-beast
Help: Allow security flaw for interop for HTTPS proxy
diff --git a/docs/cmdline-opts/proxy-ssl-auto-client-cert.d b/docs/cmdline-opts/proxy-ssl-auto-client-cert.d
index 21d09faa6..ea0f0c04d 100644
--- a/docs/cmdline-opts/proxy-ssl-auto-client-cert.d
+++ b/docs/cmdline-opts/proxy-ssl-auto-client-cert.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-ssl-auto-client-cert
Help: Use auto client certificate for proxy (Schannel)
diff --git a/docs/cmdline-opts/proxy-tls13-ciphers.d b/docs/cmdline-opts/proxy-tls13-ciphers.d
index 90952ffad..f18c3d5c0 100644
--- a/docs/cmdline-opts/proxy-tls13-ciphers.d
+++ b/docs/cmdline-opts/proxy-tls13-ciphers.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-tls13-ciphers
Arg: <ciphersuite list>
@@ -7,14 +7,14 @@ 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
+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
+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
diff --git a/docs/cmdline-opts/proxy-tlsauthtype.d b/docs/cmdline-opts/proxy-tlsauthtype.d
index 8ba7428e2..f83153e7b 100644
--- a/docs/cmdline-opts/proxy-tlsauthtype.d
+++ b/docs/cmdline-opts/proxy-tlsauthtype.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-tlsauthtype
Arg: <type>
diff --git a/docs/cmdline-opts/proxy-tlspassword.d b/docs/cmdline-opts/proxy-tlspassword.d
index ba232e68a..7ec01401b 100644
--- a/docs/cmdline-opts/proxy-tlspassword.d
+++ b/docs/cmdline-opts/proxy-tlspassword.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-tlspassword
Arg: <string>
diff --git a/docs/cmdline-opts/proxy-tlsuser.d b/docs/cmdline-opts/proxy-tlsuser.d
index 944d87601..17be7f7ba 100644
--- a/docs/cmdline-opts/proxy-tlsuser.d
+++ b/docs/cmdline-opts/proxy-tlsuser.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-tlsuser
Arg: <name>
diff --git a/docs/cmdline-opts/proxy-tlsv1.d b/docs/cmdline-opts/proxy-tlsv1.d
index b6d039b15..c4345023e 100644
--- a/docs/cmdline-opts/proxy-tlsv1.d
+++ b/docs/cmdline-opts/proxy-tlsv1.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-tlsv1
Help: Use TLSv1 for HTTPS proxy
diff --git a/docs/cmdline-opts/proxy-user.d b/docs/cmdline-opts/proxy-user.d
index 572cb06c0..df30de2d9 100644
--- a/docs/cmdline-opts/proxy-user.d
+++ b/docs/cmdline-opts/proxy-user.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy-user
Short: U
@@ -16,8 +16,8 @@ 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 will hide 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 will still be 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.
+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/docs/cmdline-opts/proxy.d b/docs/cmdline-opts/proxy.d
index a3be835bf..b7d550a11 100644
--- a/docs/cmdline-opts/proxy.d
+++ b/docs/cmdline-opts/proxy.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy
Short: x
@@ -13,27 +13,28 @@ Multi: single
Use the specified proxy.
The proxy string can be specified with a protocol:// prefix. No protocol
-specified or http:// will be treated as HTTP proxy. Use socks4://, socks4a://,
-socks5:// or socks5h:// to request a specific SOCKS version to be used.
-(Added in 7.21.7)
+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 via https:// protocol prefix was added in 7.52.0 for
-OpenSSL, GnuTLS and NSS.
+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 since 7.52.0.
-Prior versions may ignore the protocol and use http:// instead.
+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's an environment variable setting a proxy, you can set 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 will transparently be
+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.
@@ -45,3 +46,6 @@ 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/docs/cmdline-opts/proxy1.0.d b/docs/cmdline-opts/proxy1.0.d
index 3f7b61331..0657a9519 100644
--- a/docs/cmdline-opts/proxy1.0.d
+++ b/docs/cmdline-opts/proxy1.0.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxy1.0
Arg: <host[:port]>
@@ -13,5 +13,5 @@ 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 will specify an HTTP 1.0 protocol
+attempts to use CONNECT through the proxy specifies an HTTP 1.0 protocol
instead of the default HTTP 1.1.
diff --git a/docs/cmdline-opts/proxytunnel.d b/docs/cmdline-opts/proxytunnel.d
index ef2d56b2a..51457870b 100644
--- a/docs/cmdline-opts/proxytunnel.d
+++ b/docs/cmdline-opts/proxytunnel.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: proxytunnel
Short: p
@@ -9,10 +9,10 @@ Example: --proxytunnel -x http://proxy $URL
Added: 7.3
Multi: boolean
---
-When an HTTP proxy is used --proxy, this option will make curl tunnel 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.
+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/docs/cmdline-opts/pubkey.d b/docs/cmdline-opts/pubkey.d
index 2078982e2..b2f4b727b 100644
--- a/docs/cmdline-opts/pubkey.d
+++ b/docs/cmdline-opts/pubkey.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: pubkey
Arg: <key>
@@ -13,7 +13,7 @@ Multi: single
Public key file name. Allows you to provide your public key in this separate
file.
-(As of 7.39.0, 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.)
+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/docs/cmdline-opts/quote.d b/docs/cmdline-opts/quote.d
index 96c4e1f17..5008d4932 100644
--- a/docs/cmdline-opts/quote.d
+++ b/docs/cmdline-opts/quote.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: quote
Arg: <command>
@@ -12,9 +12,9 @@ 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 '-'.
+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
@@ -22,55 +22,66 @@ directory, just before the file transfer command(s), prefix the command with a
You may specify any number of commands.
-By default curl will stop at first failure. To make curl continue even if the
+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 will be
+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.
-This option can be used multiple times.
-
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
-.IP "atime date file"
+.TP
+**"atime date file"**
The atime command sets the last access time of the file named by the file
operand. The <date expression> can be all sorts of date strings, see the
*curl_getdate(3)* man page for date expression details. (Added in 7.73.0)
-.IP "chgrp group file"
+.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.
-.IP "chmod mode file"
+.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.
-.IP "chown user file"
+.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.
-.IP "ln source_file target_file"
+.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.
-.IP "mkdir directory_name"
+.TP
+**"mkdir directory_name"**
The mkdir command creates the directory named by the directory_name operand.
-.IP "mtime date file"
+.TP
+**"mtime date file"**
The mtime command sets the last modification time of the file named by the
file operand. The <date expression> can be all sorts of date strings, see the
*curl_getdate(3)* man page for date expression details. (Added in 7.73.0)
-.IP "pwd"
-The pwd command returns the absolute pathname of the current working directory.
-.IP "rename source target"
+.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.
-.IP "rm file"
+.TP
+**"rm file"**
The rm command removes the file specified by the file operand.
-.IP "rmdir directory"
+.TP
+**"rmdir directory"**
The rmdir command removes the directory entry specified by the directory
operand, provided it is empty.
-.IP "symlink source_file target_file"
+.TP
+**"symlink source_file target_file"**
See ln.
.RE
+.IP
diff --git a/docs/cmdline-opts/random-file.d b/docs/cmdline-opts/random-file.d
index ad0a558cc..aa076de7f 100644
--- a/docs/cmdline-opts/random-file.d
+++ b/docs/cmdline-opts/random-file.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: random-file
Arg: <file>
@@ -9,8 +9,8 @@ Added: 7.7
See-also: egd-file
Multi: single
---
-Deprecated option. This option is ignored by curl since 7.84.0. Prior to that
-it only had an effect on curl if built to use old versions of OpenSSL.
+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 what will be considered as random
-data. The data may be used to seed the random engine for SSL connections.
+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/docs/cmdline-opts/range.d b/docs/cmdline-opts/range.d
index f49d40472..eba7220e1 100644
--- a/docs/cmdline-opts/range.d
+++ b/docs/cmdline-opts/range.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: range
Short: r
@@ -34,18 +34,16 @@ specifies the first and last byte only(*)(HTTP)
specifies two separate 100-byte ranges(*) (HTTP)
.RE
.IP
-(*) = NOTE that this will cause the server to reply with a multipart
-response, which will be returned as-is by curl! Parsing or otherwise
-transforming this response is the responsibility of the caller.
+(*) = 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 will be unspecified, depending on the server's
-configuration.
+'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.
-You should also be aware that many HTTP/1.1 servers do not have this feature
-enabled, so that when you attempt to get a range, you will instead get the
-whole document.
+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
diff --git a/docs/cmdline-opts/rate.d b/docs/cmdline-opts/rate.d
index 953f86596..d3cbd2849 100644
--- a/docs/cmdline-opts/rate.d
+++ b/docs/cmdline-opts/rate.d
@@ -1,22 +1,23 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: rate
Arg: <max request rate>
Help: Request rate for serial transfers
Category: connection
-Example: --rate 2/s $URL
-Example: --rate 3/h $URL
-Example: --rate 14/m $URL
+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 will start the next transfer as fast as possible.
+option, curl starts the next transfer as fast as possible.
If given several URLs and a transfer completes faster than the allowed rate,
-curl will wait until the next transfer is started to maintain the requested
+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
@@ -24,11 +25,11 @@ 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 will not start the next
+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 will instead run unrestricted.
+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/docs/cmdline-opts/raw.d b/docs/cmdline-opts/raw.d
index 8e753c126..0523d62fa 100644
--- a/docs/cmdline-opts/raw.d
+++ b/docs/cmdline-opts/raw.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: raw
Help: Do HTTP "raw"; no transfer decoding
diff --git a/docs/cmdline-opts/referer.d b/docs/cmdline-opts/referer.d
index 3740957eb..0609e8c99 100644
--- a/docs/cmdline-opts/referer.d
+++ b/docs/cmdline-opts/referer.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: referer
Short: e
diff --git a/docs/cmdline-opts/remote-header-name.d b/docs/cmdline-opts/remote-header-name.d
index f97cf49a3..917fe7abf 100644
--- a/docs/cmdline-opts/remote-header-name.d
+++ b/docs/cmdline-opts/remote-header-name.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: remote-header-name
Short: J
@@ -12,20 +12,23 @@ 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 will be stripped off
-before the file name is used.
+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 will not be overwritten and an error will
-occur. If the server does not specify a file name then this option has no
-effect.
+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's no attempt to decode %-sequences (yet) in the provided file name, so
+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/docs/cmdline-opts/remote-name-all.d b/docs/cmdline-opts/remote-name-all.d
index fa6a233bb..249c4e265 100644
--- a/docs/cmdline-opts/remote-name-all.d
+++ b/docs/cmdline-opts/remote-name-all.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: remote-name-all
Help: Use the remote file name for all URLs
diff --git a/docs/cmdline-opts/remote-name.d b/docs/cmdline-opts/remote-name.d
index 4e51b1206..215cf72de 100644
--- a/docs/cmdline-opts/remote-name.d
+++ b/docs/cmdline-opts/remote-name.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: remote-name
Short: O
@@ -12,17 +12,17 @@ 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 will be 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 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 will be overwritten. If you want the
+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 will not be overwritten.
+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 will end up as-is as file name.
+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/docs/cmdline-opts/remote-time.d b/docs/cmdline-opts/remote-time.d
index 12bd88306..6dfb26c49 100644
--- a/docs/cmdline-opts/remote-time.d
+++ b/docs/cmdline-opts/remote-time.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: remote-time
Short: R
@@ -9,6 +9,6 @@ Added: 7.9
See-also: remote-name time-cond
Multi: boolean
---
-When used, this will make curl attempt to figure out the timestamp of the
-remote file, and if that is available make the local file get that same
+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/docs/cmdline-opts/remove-on-error.d b/docs/cmdline-opts/remove-on-error.d
index 4ac1595a9..50b7b1b65 100644
--- a/docs/cmdline-opts/remove-on-error.d
+++ b/docs/cmdline-opts/remove-on-error.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: remove-on-error
Help: Remove output file on errors
diff --git a/docs/cmdline-opts/request-target.d b/docs/cmdline-opts/request-target.d
index 0ddcbc0b2..be53c658c 100644
--- a/docs/cmdline-opts/request-target.d
+++ b/docs/cmdline-opts/request-target.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: request-target
Arg: <path>
@@ -14,3 +14,6 @@ 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/docs/cmdline-opts/request.d b/docs/cmdline-opts/request.d
index c837f0987..6afd53564 100644
--- a/docs/cmdline-opts/request.d
+++ b/docs/cmdline-opts/request.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: request
Short: X
@@ -11,35 +11,44 @@ Added: 6.0
See-also: request-target
Multi: single
---
-(HTTP) Specifies a custom request method to use when communicating with the
-HTTP server. The specified request method will be 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
+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.
+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 will not suffice. You need to use the --head option.
+request, using -X HEAD does not suffice. You need to use the --head option.
-The method string you set with --request will be used for all requests, which
+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.
-
-(FTP)
-Specifies a custom FTP command to use instead of LIST when doing file lists
+.TP
+**FTP**
+Specifies a custom FTP command to use instead of *LIST* when doing file lists
with FTP.
-
-(POP3)
-Specifies a custom POP3 command to use instead of LIST or RETR.
+.TP
+**POP3**
+Specifies a custom POP3 command to use instead of *LIST* or *RETR*.
(Added in 7.26.0)
-
-(IMAP)
-Specifies a custom IMAP command to use instead of LIST. (Added in 7.30.0)
-
-(SMTP)
-Specifies a custom SMTP command to use instead of HELP or VRFY. (Added in 7.34.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/docs/cmdline-opts/resolve.d b/docs/cmdline-opts/resolve.d
index f5592bc75..badb54e45 100644
--- a/docs/cmdline-opts/resolve.d
+++ b/docs/cmdline-opts/resolve.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: resolve
Arg: <[+]host:port:addr[,addr]...>
@@ -13,22 +13,22 @@ 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 will be used for. It means
+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 will be used first.
+with a specific host and port is used first.
-The provided address set by this option will be used even if --ipv4 or --ipv6
-is set to make curl use another IP version.
+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 will only make sense for long
-running parallel transfers with a lot of files. In such cases, if this option
-is used curl will try to resolve the host as it normally would once the
-timeout has expired.
+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.
@@ -37,5 +37,3 @@ 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.
-
-This option can be used many times to add many host names to resolve.
diff --git a/docs/cmdline-opts/retry-all-errors.d b/docs/cmdline-opts/retry-all-errors.d
index a1fb89e9d..1190d6a3a 100644
--- a/docs/cmdline-opts/retry-all-errors.d
+++ b/docs/cmdline-opts/retry-all-errors.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: retry-all-errors
Help: Retry all errors (use with --retry)
@@ -11,10 +11,10 @@ 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 (eg in 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.
+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
@@ -25,10 +25,10 @@ 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 will not error on 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 will retry 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.
+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/docs/cmdline-opts/retry-connrefused.d b/docs/cmdline-opts/retry-connrefused.d
index 6916603d6..a7b9643ce 100644
--- a/docs/cmdline-opts/retry-connrefused.d
+++ b/docs/cmdline-opts/retry-connrefused.d
@@ -1,10 +1,10 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, 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 $URL
+Example: --retry-connrefused --retry 7 $URL
See-also: retry retry-all-errors
Multi: boolean
---
diff --git a/docs/cmdline-opts/retry-delay.d b/docs/cmdline-opts/retry-delay.d
index 78d0aac2a..686a0d8ba 100644
--- a/docs/cmdline-opts/retry-delay.d
+++ b/docs/cmdline-opts/retry-delay.d
@@ -1,15 +1,15 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: retry-delay
Arg: <seconds>
Help: Wait time between retries
Added: 7.12.3
Category: curl
-Example: --retry-delay 5 --retry $URL
+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 will make curl use the default backoff time.
+used. Setting this delay to zero makes curl use the default backoff time.
diff --git a/docs/cmdline-opts/retry-max-time.d b/docs/cmdline-opts/retry-max-time.d
index 2e132f946..de2aff9a8 100644
--- a/docs/cmdline-opts/retry-max-time.d
+++ b/docs/cmdline-opts/retry-max-time.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: retry-max-time
Arg: <seconds>
@@ -9,9 +9,9 @@ Example: --retry-max-time 30 --retry 10 $URL
See-also: retry
Multi: single
---
-The retry timer is reset before the first transfer attempt. Retries will be
-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 will be
+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.
+limit a single request's maximum time, use --max-time. Set this option to zero
+to not timeout retries.
diff --git a/docs/cmdline-opts/retry.d b/docs/cmdline-opts/retry.d
index 080825bf8..d49a0cdfb 100644
--- a/docs/cmdline-opts/retry.d
+++ b/docs/cmdline-opts/retry.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: retry
Arg: <num>
@@ -10,16 +10,16 @@ See-also: retry-max-time
Multi: single
---
If a transient error is returned when curl tries to perform a transfer, it
-will retry this number of times before giving up. Setting the number to 0
+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 will first wait one second and then
-for all forthcoming retries it will double the waiting time until it reaches
-10 minutes which then will be the delay between the rest of the retries. By
-using --retry-delay you disable this exponential backoff algorithm. See also
+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.
-Since curl 7.66.0, curl will comply with the Retry-After: response header if
-one was present to know when to issue the next retry.
+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/docs/cmdline-opts/sasl-authzid.d b/docs/cmdline-opts/sasl-authzid.d
index ff56ce9c2..872818df7 100644
--- a/docs/cmdline-opts/sasl-authzid.d
+++ b/docs/cmdline-opts/sasl-authzid.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: sasl-authzid
Arg: <identity>
@@ -9,10 +9,11 @@ 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.
+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 will derive 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.
+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/docs/cmdline-opts/sasl-ir.d b/docs/cmdline-opts/sasl-ir.d
index 8fe3a60e2..56f1ae8ad 100644
--- a/docs/cmdline-opts/sasl-ir.d
+++ b/docs/cmdline-opts/sasl-ir.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: sasl-ir
Help: Enable initial response in SASL authentication
diff --git a/docs/cmdline-opts/service-name.d b/docs/cmdline-opts/service-name.d
index 0cf9cef74..54d7ebf7b 100644
--- a/docs/cmdline-opts/service-name.d
+++ b/docs/cmdline-opts/service-name.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: service-name
Help: SPNEGO service name
@@ -10,5 +10,3 @@ See-also: negotiate proxy-service-name
Multi: single
---
This option allows you to change the service name for SPNEGO.
-
-Examples: --negotiate --service-name sockd would use sockd/server-name.
diff --git a/docs/cmdline-opts/show-error.d b/docs/cmdline-opts/show-error.d
index a31e07d9e..f15028745 100644
--- a/docs/cmdline-opts/show-error.d
+++ b/docs/cmdline-opts/show-error.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: show-error
Short: S
@@ -8,8 +8,6 @@ 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.
-
-This option is global and does not need to be specified for each use of
---next.
diff --git a/docs/cmdline-opts/silent.d b/docs/cmdline-opts/silent.d
index b31fe5cf1..74bb299cc 100644
--- a/docs/cmdline-opts/silent.d
+++ b/docs/cmdline-opts/silent.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: silent
Short: s
@@ -10,7 +10,7 @@ Added: 4.0
Multi: boolean
---
Silent or quiet mode. Do not show progress meter or error messages. Makes Curl
-mute. It will still output the data you ask for, potentially even to the
+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
diff --git a/docs/cmdline-opts/socks4.d b/docs/cmdline-opts/socks4.d
index c99a134e4..d8cf719aa 100644
--- a/docs/cmdline-opts/socks4.d
+++ b/docs/cmdline-opts/socks4.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: socks4
Arg: <host[:port]>
@@ -22,6 +22,7 @@ exclusive.
This option is superfluous since you can specify a socks4 proxy with --proxy
using a socks4:// protocol prefix. (Added in 7.21.7)
-Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at the same time
---proxy is used with an HTTP/HTTPS proxy. In such a case curl first connects to
-the SOCKS proxy and then connects (through SOCKS) to the HTTP or HTTPS proxy.
+--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/docs/cmdline-opts/socks4a.d b/docs/cmdline-opts/socks4a.d
index e3afbaf6b..cbb62724c 100644
--- a/docs/cmdline-opts/socks4a.d
+++ b/docs/cmdline-opts/socks4a.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: socks4a
Arg: <host[:port]>
@@ -21,6 +21,7 @@ exclusive.
This option is superfluous since you can specify a socks4a proxy with --proxy
using a socks4a:// protocol prefix. (Added in 7.21.7)
-Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at the same time
---proxy is used with an HTTP/HTTPS proxy. In such a case curl first connects to
-the SOCKS proxy and then connects (through SOCKS) to the HTTP or HTTPS proxy.
+--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/docs/cmdline-opts/socks5-basic.d b/docs/cmdline-opts/socks5-basic.d
index 1f4d5e33f..a16831be1 100644
--- a/docs/cmdline-opts/socks5-basic.d
+++ b/docs/cmdline-opts/socks5-basic.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: socks5-basic
Help: Enable username/password auth for SOCKS5 proxies
diff --git a/docs/cmdline-opts/socks5-gssapi-nec.d b/docs/cmdline-opts/socks5-gssapi-nec.d
index bc5d31735..957655a09 100644
--- a/docs/cmdline-opts/socks5-gssapi-nec.d
+++ b/docs/cmdline-opts/socks5-gssapi-nec.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: socks5-gssapi-nec
Help: Compatibility with NEC SOCKS5 server
diff --git a/docs/cmdline-opts/socks5-gssapi-service.d b/docs/cmdline-opts/socks5-gssapi-service.d
index 218c0bf38..66c2f33a5 100644
--- a/docs/cmdline-opts/socks5-gssapi-service.d
+++ b/docs/cmdline-opts/socks5-gssapi-service.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: socks5-gssapi-service
Arg: <name>
@@ -9,10 +9,5 @@ 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
+The default service name for a socks server is **rcmd/server-fqdn**. This option
allows you to change it.
-
-Examples: --socks5 proxy-name --socks5-gssapi-service sockd would use
-sockd/proxy-name --socks5 proxy-name --socks5-gssapi-service sockd/real-name
-would use sockd/real-name for cases where the proxy-name does not match the
-principal name.
diff --git a/docs/cmdline-opts/socks5-gssapi.d b/docs/cmdline-opts/socks5-gssapi.d
index 3a4fda21c..cec684f42 100644
--- a/docs/cmdline-opts/socks5-gssapi.d
+++ b/docs/cmdline-opts/socks5-gssapi.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: socks5-gssapi
Help: Enable GSS-API auth for SOCKS5 proxies
diff --git a/docs/cmdline-opts/socks5-hostname.d b/docs/cmdline-opts/socks5-hostname.d
index a5781370d..ee49ca642 100644
--- a/docs/cmdline-opts/socks5-hostname.d
+++ b/docs/cmdline-opts/socks5-hostname.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: socks5-hostname
Arg: <host[:port]>
@@ -21,6 +21,7 @@ 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)
-Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at the same time
---proxy is used with an HTTP/HTTPS proxy. In such a case curl first connects to
-the SOCKS proxy and then connects (through SOCKS) to the HTTP or HTTPS proxy.
+--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/docs/cmdline-opts/socks5.d b/docs/cmdline-opts/socks5.d
index 183b8c24d..0e52166ea 100644
--- a/docs/cmdline-opts/socks5.d
+++ b/docs/cmdline-opts/socks5.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: socks5
Arg: <host[:port]>
@@ -21,8 +21,9 @@ exclusive.
This option is superfluous since you can specify a socks5 proxy with --proxy
using a socks5:// protocol prefix. (Added in 7.21.7)
-Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at the same time
---proxy is used with an HTTP/HTTPS proxy. In such a case curl first connects to
-the SOCKS proxy and then connects (through SOCKS) to the HTTP or HTTPS proxy.
+--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/docs/cmdline-opts/speed-limit.d b/docs/cmdline-opts/speed-limit.d
index 878ca440d..dc9778db9 100644
--- a/docs/cmdline-opts/speed-limit.d
+++ b/docs/cmdline-opts/speed-limit.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: speed-limit
Short: Y
diff --git a/docs/cmdline-opts/speed-time.d b/docs/cmdline-opts/speed-time.d
index 1426b5648..4a8860660 100644
--- a/docs/cmdline-opts/speed-time.d
+++ b/docs/cmdline-opts/speed-time.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: speed-time
Short: y
@@ -10,9 +10,9 @@ 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 will be 1 unless set with --speed-limit.
+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 will not affect slow
+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/docs/cmdline-opts/ssl-allow-beast.d b/docs/cmdline-opts/ssl-allow-beast.d
index 2545d07ba..2547675d6 100644
--- a/docs/cmdline-opts/ssl-allow-beast.d
+++ b/docs/cmdline-opts/ssl-allow-beast.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: ssl-allow-beast
Help: Allow security flaw to improve interop
diff --git a/docs/cmdline-opts/ssl-auto-client-cert.d b/docs/cmdline-opts/ssl-auto-client-cert.d
index 617d20a64..5328adea7 100644
--- a/docs/cmdline-opts/ssl-auto-client-cert.d
+++ b/docs/cmdline-opts/ssl-auto-client-cert.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: ssl-auto-client-cert
Help: Use auto client certificate (Schannel)
@@ -8,9 +8,7 @@ Category: tls
Example: --ssl-auto-client-cert $URL
Multi: boolean
---
-Tell libcurl to automatically locate and use a client certificate for
-authentication, when requested by the server. This option is only supported
-for Schannel (the native Windows SSL library). Prior to 7.77.0 this was the
-default behavior in libcurl with Schannel. Since the server can request any
-certificate that supports client authentication in the OS certificate store it
-could be a privacy violation and unexpected.
+(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/docs/cmdline-opts/ssl-no-revoke.d b/docs/cmdline-opts/ssl-no-revoke.d
index ad036740f..37e91d9c2 100644
--- a/docs/cmdline-opts/ssl-no-revoke.d
+++ b/docs/cmdline-opts/ssl-no-revoke.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: ssl-no-revoke
Help: Disable cert revocation checks (Schannel)
diff --git a/docs/cmdline-opts/ssl-reqd.d b/docs/cmdline-opts/ssl-reqd.d
index cf81fb229..8a5b8577e 100644
--- a/docs/cmdline-opts/ssl-reqd.d
+++ b/docs/cmdline-opts/ssl-reqd.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: ssl-reqd
Help: Require SSL/TLS
@@ -9,11 +9,15 @@ Example: --ssl-reqd ftp://example.com
See-also: ssl insecure
Multi: boolean
---
-Require SSL/TLS for the connection. Terminates the connection if the server
-does not support SSL/TLS.
+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 since version 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 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/docs/cmdline-opts/ssl-revoke-best-effort.d b/docs/cmdline-opts/ssl-revoke-best-effort.d
index edf04cc0e..cb26d0b9a 100644
--- a/docs/cmdline-opts/ssl-revoke-best-effort.d
+++ b/docs/cmdline-opts/ssl-revoke-best-effort.d
@@ -1,7 +1,7 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: ssl-revoke-best-effort
-Help: Ignore missing/offline cert CRL dist points
+Help: Ignore missing/offline cert CRL dist points (Schannel)
Added: 7.70.0
Category: tls
Example: --ssl-revoke-best-effort $URL
diff --git a/docs/cmdline-opts/ssl.d b/docs/cmdline-opts/ssl.d
index 31d46f883..b8fd22a9c 100644
--- a/docs/cmdline-opts/ssl.d
+++ b/docs/cmdline-opts/ssl.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: ssl
Help: Try SSL/TLS
@@ -16,11 +16,11 @@ 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 since version 7.81.0. It is fully supported
-by the OpenLDAP backend and ignored by the generic ldap backend.
+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 will be removed in a future version.
+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/docs/cmdline-opts/sslv2.d b/docs/cmdline-opts/sslv2.d
index fbda3fa12..3ecf109a0 100644
--- a/docs/cmdline-opts/sslv2.d
+++ b/docs/cmdline-opts/sslv2.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Short: 2
Long: sslv2
@@ -13,6 +13,5 @@ Category: tls
Example: --sslv2 $URL
Multi: mutex
---
-This option previously asked curl to use SSLv2, but starting in curl 7.77.0
-this instruction is ignored. SSLv2 is widely considered insecure (see RFC
-6176).
+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/docs/cmdline-opts/sslv3.d b/docs/cmdline-opts/sslv3.d
index 26f8e44b0..409afc610 100644
--- a/docs/cmdline-opts/sslv3.d
+++ b/docs/cmdline-opts/sslv3.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Short: 3
Long: sslv3
@@ -13,6 +13,5 @@ Category: tls
Example: --sslv3 $URL
Multi: mutex
---
-This option previously asked curl to use SSLv3, but starting in curl 7.77.0
-this instruction is ignored. SSLv3 is widely considered insecure (see RFC
-7568).
+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/docs/cmdline-opts/stderr.d b/docs/cmdline-opts/stderr.d
index e23f3cd14..a80bf43d1 100644
--- a/docs/cmdline-opts/stderr.d
+++ b/docs/cmdline-opts/stderr.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: stderr
Arg: <file>
@@ -8,9 +8,7 @@ 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.
-
-This option is global and does not need to be specified for each use of
---next.
diff --git a/docs/cmdline-opts/styled-output.d b/docs/cmdline-opts/styled-output.d
index 20e011405..70e9da4e8 100644
--- a/docs/cmdline-opts/styled-output.d
+++ b/docs/cmdline-opts/styled-output.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: styled-output
Help: Enable styled output for HTTP headers
@@ -7,9 +7,10 @@ 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.
-This option is global and does not need to be specified for each use of
---next.
+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/docs/cmdline-opts/suppress-connect-headers.d b/docs/cmdline-opts/suppress-connect-headers.d
index adde2499c..ed38f36de 100644
--- a/docs/cmdline-opts/suppress-connect-headers.d
+++ b/docs/cmdline-opts/suppress-connect-headers.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: suppress-connect-headers
Help: Suppress proxy CONNECT response headers
diff --git a/docs/cmdline-opts/tcp-fastopen.d b/docs/cmdline-opts/tcp-fastopen.d
index 155dfed94..bcf1edbff 100644
--- a/docs/cmdline-opts/tcp-fastopen.d
+++ b/docs/cmdline-opts/tcp-fastopen.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: tcp-fastopen
Added: 7.49.0
@@ -8,4 +8,7 @@ Example: --tcp-fastopen $URL
See-also: false-start
Multi: boolean
---
-Enable use of TCP Fast Open (RFC7413).
+
+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/docs/cmdline-opts/tcp-nodelay.d b/docs/cmdline-opts/tcp-nodelay.d
index cbb0a92ba..2bf51cb5f 100644
--- a/docs/cmdline-opts/tcp-nodelay.d
+++ b/docs/cmdline-opts/tcp-nodelay.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: tcp-nodelay
Help: Use the TCP_NODELAY option
@@ -11,5 +11,5 @@ Multi: boolean
Turn on the TCP_NODELAY option. See the *curl_easy_setopt(3)* man page for
details about this option.
-Since 7.50.2, curl sets this option by default and you need to explicitly
-switch it off if you do not want it on.
+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/docs/cmdline-opts/telnet-option.d b/docs/cmdline-opts/telnet-option.d
index 3e239e20f..651ce4203 100644
--- a/docs/cmdline-opts/telnet-option.d
+++ b/docs/cmdline-opts/telnet-option.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: telnet-option
Short: t
@@ -12,8 +12,12 @@ Multi: append
---
Pass options to the telnet protocol. Supported options are:
-TTYPE=<term> Sets the terminal type.
-
-XDISPLOC=<X display> Sets the X display location.
-
-NEW_ENV=<var,val> Sets an environment variable.
+.RS
+.TP 15
+**TTYPE**=<term> Sets the terminal type.
+.TP
+**XDISPLOC**=<X display> Sets the X display location.
+.TP
+**NEW_ENV**=<var,val> Sets an environment variable.
+.RE
+.IP
diff --git a/docs/cmdline-opts/tftp-blksize.d b/docs/cmdline-opts/tftp-blksize.d
index 9aaa9850d..76c7ee4b1 100644
--- a/docs/cmdline-opts/tftp-blksize.d
+++ b/docs/cmdline-opts/tftp-blksize.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: tftp-blksize
Arg: <value>
@@ -10,6 +10,6 @@ Example: --tftp-blksize 1024 tftp://example.com/file
See-also: tftp-no-options
Multi: single
---
-Set TFTP BLKSIZE option (must be >512). This is the block size that curl will
-try to use when transferring data to or from a TFTP server. By default 512
-bytes will be used.
+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/docs/cmdline-opts/tftp-no-options.d b/docs/cmdline-opts/tftp-no-options.d
index 8b252bd28..43b1c00c4 100644
--- a/docs/cmdline-opts/tftp-no-options.d
+++ b/docs/cmdline-opts/tftp-no-options.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: tftp-no-options
Help: Do not send any TFTP options
diff --git a/docs/cmdline-opts/time-cond.d b/docs/cmdline-opts/time-cond.d
index 416b16527..c21ed2853 100644
--- a/docs/cmdline-opts/time-cond.d
+++ b/docs/cmdline-opts/time-cond.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: time-cond
Short: z
@@ -22,3 +22,6 @@ instead. See the *curl_getdate(3)* man pages for date expression details.
Start the date expression with a dash (-) to make it request for a document
that is older than the given date/time, default is a document that is newer
than the specified date/time.
+
+If provided a non-existing file, curl outputs a warning about that fact and
+proceeds to do the transfer without a time condition.
diff --git a/docs/cmdline-opts/tls-max.d b/docs/cmdline-opts/tls-max.d
index 6a7375a70..2d52c1039 100644
--- a/docs/cmdline-opts/tls-max.d
+++ b/docs/cmdline-opts/tls-max.d
@@ -1,9 +1,9 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: tls-max
Arg: <VERSION>
Tags: Versions
-Protocols: SSL
+Protocols: TLS
Added: 7.54.0
Requires: TLS
See-also: tlsv1.0 tlsv1.1 tlsv1.2 tlsv1.3
@@ -31,3 +31,4 @@ Use up to TLSv1.2.
.IP "1.3"
Use up to TLSv1.3.
.RE
+.IP
diff --git a/docs/cmdline-opts/tls13-ciphers.d b/docs/cmdline-opts/tls13-ciphers.d
index 60cbfe59a..34c607dd1 100644
--- a/docs/cmdline-opts/tls13-ciphers.d
+++ b/docs/cmdline-opts/tls13-ciphers.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: tls13-ciphers
Arg: <ciphersuite list>
@@ -7,15 +7,15 @@ Protocols: TLS
Category: tls
Example: --tls13-ciphers TLS_AES_128_GCM_SHA256 $URL
Added: 7.61.0
-See-also: ciphers curves
+See-also: ciphers curves proxy-tls13-ciphers
Multi: single
---
Specifies which cipher suites to use in the connection if 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
+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 --ciphers option.
+later, or Schannel. If you are using a different SSL backend you can try
+setting TLS 1.3 cipher suites by using the --ciphers option.
diff --git a/docs/cmdline-opts/tlsauthtype.d b/docs/cmdline-opts/tlsauthtype.d
index 239753994..7d3f7e5aa 100644
--- a/docs/cmdline-opts/tlsauthtype.d
+++ b/docs/cmdline-opts/tlsauthtype.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: tlsauthtype
Arg: <type>
diff --git a/docs/cmdline-opts/tlspassword.d b/docs/cmdline-opts/tlspassword.d
index 053751e7f..0513191ae 100644
--- a/docs/cmdline-opts/tlspassword.d
+++ b/docs/cmdline-opts/tlspassword.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: tlspassword
Arg: <string>
diff --git a/docs/cmdline-opts/tlsuser.d b/docs/cmdline-opts/tlsuser.d
index a3f0d54cd..f87532a7c 100644
--- a/docs/cmdline-opts/tlsuser.d
+++ b/docs/cmdline-opts/tlsuser.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: tlsuser
Arg: <name>
diff --git a/docs/cmdline-opts/tlsv1.0.d b/docs/cmdline-opts/tlsv1.0.d
index f5fe3bfb0..493c0c653 100644
--- a/docs/cmdline-opts/tlsv1.0.d
+++ b/docs/cmdline-opts/tlsv1.0.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: tlsv1.0
Help: Use TLSv1.0 or greater
diff --git a/docs/cmdline-opts/tlsv1.1.d b/docs/cmdline-opts/tlsv1.1.d
index 567254d70..f8ecdf67a 100644
--- a/docs/cmdline-opts/tlsv1.1.d
+++ b/docs/cmdline-opts/tlsv1.1.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: tlsv1.1
Help: Use TLSv1.1 or greater
diff --git a/docs/cmdline-opts/tlsv1.2.d b/docs/cmdline-opts/tlsv1.2.d
index df1b90be9..a9953604e 100644
--- a/docs/cmdline-opts/tlsv1.2.d
+++ b/docs/cmdline-opts/tlsv1.2.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: tlsv1.2
Help: Use TLSv1.2 or greater
diff --git a/docs/cmdline-opts/tlsv1.3.d b/docs/cmdline-opts/tlsv1.3.d
index d91b175d3..5690aa113 100644
--- a/docs/cmdline-opts/tlsv1.3.d
+++ b/docs/cmdline-opts/tlsv1.3.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: tlsv1.3
Help: Use TLSv1.3 or greater
diff --git a/docs/cmdline-opts/tlsv1.d b/docs/cmdline-opts/tlsv1.d
index b958a809e..16aee71a3 100644
--- a/docs/cmdline-opts/tlsv1.d
+++ b/docs/cmdline-opts/tlsv1.d
@@ -1,9 +1,9 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Short: 1
Long: tlsv1
Tags: Versions
-Protocols: SSL
+Protocols: TLS
Added: 7.9.2
Mutexed: tlsv1.1 tlsv1.2 tlsv1.3
Requires: TLS
diff --git a/docs/cmdline-opts/tr-encoding.d b/docs/cmdline-opts/tr-encoding.d
index ca385ce53..053e18ca1 100644
--- a/docs/cmdline-opts/tr-encoding.d
+++ b/docs/cmdline-opts/tr-encoding.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: tr-encoding
Added: 7.21.6
diff --git a/docs/cmdline-opts/trace-ascii.d b/docs/cmdline-opts/trace-ascii.d
index 01484f9f6..2aebc2863 100644
--- a/docs/cmdline-opts/trace-ascii.d
+++ b/docs/cmdline-opts/trace-ascii.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: trace-ascii
Arg: <file>
@@ -9,6 +9,7 @@ Example: --trace-ascii log.txt $URL
Added: 7.9.7
See-also: verbose trace
Multi: single
+Scope: global
---
Enables a full trace dump of all incoming and outgoing data, including
descriptive information, to the given output file. Use "-" as filename to have
@@ -18,5 +19,6 @@ This is similar to --trace, but leaves out the hex part and only shows the
ASCII part of the dump. It makes smaller output that might be easier to read
for untrained humans.
-This option is global and does not need to be specified for each use of
---next.
+Note that verbose output of curl activities and network traffic might contain
+sensitive data, including user names, credentials or secret data content. Be
+aware and be careful when sharing trace logs with others.
diff --git a/docs/cmdline-opts/trace-config.d b/docs/cmdline-opts/trace-config.d
new file mode 100644
index 000000000..a731c9dc9
--- /dev/null
+++ b/docs/cmdline-opts/trace-config.d
@@ -0,0 +1,21 @@
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+SPDX-License-Identifier: curl
+Long: trace-config
+Arg: <string>
+Help: Details to log in trace/verbose output
+Mutexed: trace verbose
+Category: verbose
+Example: --trace-config ids,http/2 $URL
+Added: 8.3.0
+See-also: verbose trace
+Multi: append
+Scope: global
+---
+Set configuration for trace output. A comma-separated list of components where
+detailed output can be made available from. Names are case-insensitive.
+Specify 'all' to enable all trace components.
+
+In addition to trace component names, specify "ids" and "time" to
+avoid extra --trace-ids or --trace-time parameters.
+
+See the *curl_global_trace(3)* man page for more details.
diff --git a/docs/cmdline-opts/trace-ids.d b/docs/cmdline-opts/trace-ids.d
new file mode 100644
index 000000000..7b8ce6f70
--- /dev/null
+++ b/docs/cmdline-opts/trace-ids.d
@@ -0,0 +1,12 @@
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+SPDX-License-Identifier: curl
+Long: trace-ids
+Help: Add transfer and connection identifiers to trace/verbose output
+Added: 8.2.0
+Category: verbose
+Example: --trace-ids --trace-ascii output $URL
+See-also: trace verbose
+Multi: boolean
+Scope: global
+---
+Prepends the transfer and connection identifiers to each trace or verbose line that curl displays.
diff --git a/docs/cmdline-opts/trace-time.d b/docs/cmdline-opts/trace-time.d
index e76988544..f40ee02d7 100644
--- a/docs/cmdline-opts/trace-time.d
+++ b/docs/cmdline-opts/trace-time.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: trace-time
Help: Add time stamps to trace/verbose output
@@ -7,8 +7,6 @@ Category: verbose
Example: --trace-time --trace-ascii output $URL
See-also: trace verbose
Multi: boolean
+Scope: global
---
Prepends a time stamp to each trace or verbose line that curl displays.
-
-This option is global and does not need to be specified for each use of
---next.
diff --git a/docs/cmdline-opts/trace.d b/docs/cmdline-opts/trace.d
index 2f088ecb0..35b2248e9 100644
--- a/docs/cmdline-opts/trace.d
+++ b/docs/cmdline-opts/trace.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: trace
Arg: <file>
@@ -7,13 +7,15 @@ Mutexed: verbose trace-ascii
Category: verbose
Example: --trace log.txt $URL
Added: 7.9.7
-See-also: trace-ascii trace-time
+See-also: trace-ascii trace-config trace-ids trace-time
Multi: single
+Scope: global
---
Enables a full trace dump of all incoming and outgoing data, including
descriptive information, to the given output file. Use "-" as filename to have
the output sent to stdout. Use "%" as filename to have the output sent to
stderr.
-This option is global and does not need to be specified for each use of
---next.
+Note that verbose output of curl activities and network traffic might contain
+sensitive data, including user names, credentials or secret data content. Be
+aware and be careful when sharing trace logs with others.
diff --git a/docs/cmdline-opts/unix-socket.d b/docs/cmdline-opts/unix-socket.d
index 7d95a71df..5ea56ebf1 100644
--- a/docs/cmdline-opts/unix-socket.d
+++ b/docs/cmdline-opts/unix-socket.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: unix-socket
Arg: <path>
diff --git a/docs/cmdline-opts/upload-file.d b/docs/cmdline-opts/upload-file.d
index 3709896f6..8e0091d18 100644
--- a/docs/cmdline-opts/upload-file.d
+++ b/docs/cmdline-opts/upload-file.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: upload-file
Short: T
@@ -9,21 +9,28 @@ Example: -T file $URL
Example: -T "img[1-1000].png" ftp://ftp.example.com/
Example: --upload-file "{file1,file2}" $URL
Added: 4.0
-See-also: get head
+See-also: get head request data
Multi: append
---
-This transfers the specified local file to the remote URL. If there is no file
-part in the specified URL, curl will append the local file name. NOTE that you
-must use a trailing / on the last directory to really prove to Curl that there
-is no file name or curl will think that your last directory name is the remote
-file name to use. That will most likely cause the upload operation to fail. If
-this is used on an HTTP(S) server, the PUT command will be used.
+This transfers the specified local file to the remote URL.
+
+If there is no file part in the specified URL, curl appends the local file
+name to the end of the URL before the operation starts. You must use a
+trailing slash (/) on the last directory to prove to curl that there is no
+file name or curl thinks that your last directory name is the remote file name
+to use.
+
+When putting the local file name at the end of the URL, curl ignores what is
+on the left side of any slash (/) or backslash (\\) used in the file name and
+only appends what is on the right side of the rightmost such character.
Use the file name "-" (a single dash) to use stdin instead of a given file.
Alternately, the file name "." (a single period) may be specified instead of
"-" to use stdin in non-blocking mode to allow reading server output while
stdin is being uploaded.
+If this option is used with a HTTP(S) URL, the PUT method is used.
+
You can specify one --upload-file for each URL on the command line. Each
--upload-file + URL pair specifies what to upload and to where. curl also
supports "globbing" of the --upload-file argument, meaning that you can upload
@@ -32,5 +39,5 @@ in the URL.
When uploading to an SMTP server: the uploaded data is assumed to be RFC 5322
formatted. It has to feature the necessary set of headers and mail body
-formatted correctly by the user as curl will not transcode nor encode it
+formatted correctly by the user as curl does not transcode nor encode it
further in any way.
diff --git a/docs/cmdline-opts/url-query.d b/docs/cmdline-opts/url-query.d
new file mode 100644
index 000000000..29b31e338
--- /dev/null
+++ b/docs/cmdline-opts/url-query.d
@@ -0,0 +1,25 @@
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+SPDX-License-Identifier: curl
+Long: url-query
+Arg: <data>
+Help: Add a URL query part
+Protocols: all
+See-also: data-urlencode get
+Added: 7.87.0
+Category: http post upload
+Example: --url-query name=val $URL
+Example: --url-query =encodethis http://example.net/foo
+Example: --url-query name@file $URL
+Example: --url-query @fileonly $URL
+Example: --url-query "+name=%20foo" $URL
+Multi: append
+---
+This option adds a piece of data, usually a name + value pair, to the end of
+the URL query part. The syntax is identical to that used for --data-urlencode
+with one extension:
+
+If the argument starts with a '+' (plus), the rest of the string is provided
+as-is unencoded.
+
+The query part of a URL is the one following the question mark on the right
+end.
diff --git a/docs/cmdline-opts/url.d b/docs/cmdline-opts/url.d
index 5ec61b1df..fa0421e08 100644
--- a/docs/cmdline-opts/url.d
+++ b/docs/cmdline-opts/url.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: url
Arg: <url>
@@ -13,10 +13,11 @@ Specify a URL to fetch. This option is mostly handy when you want to specify
URL(s) in a config file.
If the given URL is missing a scheme name (such as "http://" or "ftp://" etc)
-then curl will make a guess based on the host. If the outermost sub-domain
-name matches DICT, FTP, IMAP, LDAP, POP3 or SMTP then that protocol will be
-used, otherwise HTTP will be used. Since 7.45.0 guessing can be disabled by
-setting a default protocol, see --proto-default for details.
+then curl makes a guess based on the host. If the outermost subdomain name
+matches DICT, FTP, IMAP, LDAP, POP3 or SMTP then that protocol is used,
+otherwise HTTP is used. Guessing can be avoided by providing a full URL
+including the scheme, or disabled by setting a default protocol (added in
+7.45.0), see --proto-default for details.
To control where this URL is written, use the --output or the --remote-name
options.
diff --git a/docs/cmdline-opts/use-ascii.d b/docs/cmdline-opts/use-ascii.d
index 569c7c6da..772992c17 100644
--- a/docs/cmdline-opts/use-ascii.d
+++ b/docs/cmdline-opts/use-ascii.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Short: B
Long: use-ascii
diff --git a/docs/cmdline-opts/user-agent.d b/docs/cmdline-opts/user-agent.d
index 3f2b65d1a..1681b7e8b 100644
--- a/docs/cmdline-opts/user-agent.d
+++ b/docs/cmdline-opts/user-agent.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Short: A
Long: user-agent
@@ -15,6 +15,6 @@ Specify the User-Agent string to send to the HTTP server. To encode blanks in
the string, surround the string with single quote marks. This header can also
be set with the --header or the --proxy-header options.
-If you give an empty argument to --user-agent (""), it will remove the header
+If you give an empty argument to --user-agent (""), it removes the header
completely from the request. If you prefer a blank header, you can set it to a
single space (" ").
diff --git a/docs/cmdline-opts/user.d b/docs/cmdline-opts/user.d
index 930df83cc..f776ab7ae 100644
--- a/docs/cmdline-opts/user.d
+++ b/docs/cmdline-opts/user.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: user
Short: u
@@ -13,17 +13,17 @@ Multi: single
Specify the user name and password to use for server authentication. Overrides
--netrc and --netrc-optional.
-If you simply specify the user name, curl will prompt for a password.
+If you simply specify the user name, curl prompts for a password.
The user name and passwords are split up on the first colon, which makes it
impossible to use a colon in the user name with this option. The password can,
still.
-On systems where it works, curl will hide 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 will still be 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.
+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 brief 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.
When using Kerberos V5 with a Windows based server you should include the
Windows domain name in the user name, in order for the server to successfully
diff --git a/docs/cmdline-opts/variable.d b/docs/cmdline-opts/variable.d
new file mode 100644
index 000000000..d7d773eda
--- /dev/null
+++ b/docs/cmdline-opts/variable.d
@@ -0,0 +1,55 @@
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+SPDX-License-Identifier: curl
+Long: variable
+Arg: <[%]name=text/@file>
+Help: Set variable
+Category: curl
+Example: --variable name=smith $URL
+Added: 8.3.0
+See-also: config
+Multi: append
+---
+Set a variable with "name=content" or "name@file" (where "file" can be stdin
+if set to a single dash (-)). The name is a case sensitive identifier that
+must consist of no other letters than a-z, A-Z, 0-9 or underscore. The
+specified content is then associated with this identifier.
+
+Setting the same variable name again overwrites the old contents with the new.
+
+The contents of a variable can be referenced in a later command line option
+when that option name is prefixed with "--expand-", and the name is used as
+"{{name}}" (without the quotes).
+
+--variable can import environment variables into the name space. Opt to either
+require the environment variable to be set or provide a default value for the
+variable in case it is not already set.
+
+--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
+the environment variable is not set, use --variable %name=content or
+--variable %name@content. Note that on some systems - but not all -
+environment variables are case insensitive.
+
+When expanding variables, curl supports a set of functions that can make the
+variable contents more convenient to use. You apply a function to a variable
+expansion by adding a colon and then list the desired functions in a
+comma-separated list that is evaluated in a left-to-right order. Variable
+content holding null bytes that are not encoded when expanded, causes an
+error.
+
+Available functions:
+.RS
+.TP 15
+**trim**
+removes all leading and trailing white space.
+.TP
+**json**
+outputs the content using JSON string quoting rules.
+.TP
+**url**
+shows the content URL (percent) encoded.
+.TP
+**b64**
+expands the variable base64 encoded
+.RE
+.IP
diff --git a/docs/cmdline-opts/verbose.d b/docs/cmdline-opts/verbose.d
index 7122f7d24..c5661f86a 100644
--- a/docs/cmdline-opts/verbose.d
+++ b/docs/cmdline-opts/verbose.d
@@ -1,14 +1,15 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Short: v
Long: verbose
Mutexed: trace trace-ascii
Help: Make the operation more talkative
-See-also: include
+See-also: include silent trace trace-ascii
Category: important verbose
Example: --verbose $URL
Added: 4.0
Multi: boolean
+Scope: global
---
Makes curl verbose during the operation. Useful for debugging and seeing
what's going on "under the hood". A line starting with '>' means "header data"
@@ -16,13 +17,12 @@ sent by curl, '<' means "header data" received by curl that is hidden in
normal cases, and a line starting with '*' means additional info provided by
curl.
-If you only want HTTP headers in the output, --include might be the option
-you are looking for.
+If you only want HTTP headers in the output, --include or --dump-header might
+be more suitable options.
If you think this option still does not give you enough details, consider using
--trace or --trace-ascii instead.
-This option is global and does not need to be specified for each use of
---next.
-
-Use --silent to make curl really quiet.
+Note that verbose output of curl activities and network traffic might contain
+sensitive data, including user names, credentials or secret data content. Be
+aware and be careful when sharing trace logs with others.
diff --git a/docs/cmdline-opts/version.d b/docs/cmdline-opts/version.d
index 032e2e2db..8d231ce0c 100644
--- a/docs/cmdline-opts/version.d
+++ b/docs/cmdline-opts/version.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: version
Short: V
@@ -7,17 +7,19 @@ Category: important curl
Example: --version
Added: 4.0
See-also: help manual
-Multi: boolean
+Multi: custom
---
Displays information about curl and the libcurl version it uses.
The first line includes the full version of curl, libcurl and other 3rd party
libraries linked with the executable.
-The second line (starts with "Protocols:") shows all protocols that libcurl
+The second line (starts with "Release-Date:") shows the release date.
+
+The third line (starts with "Protocols:") shows all protocols that libcurl
reports to support.
-The third line (starts with "Features:") shows specific features libcurl
+The fourth line (starts with "Features:") shows specific features libcurl
reports to offer. Available features include:
.RS
.IP "alt-svc"
@@ -83,3 +85,4 @@ Unix sockets support is provided.
.IP "zstd"
Automatic decompression (via zstd) of compressed files over HTTP is supported.
.RE
+.IP
diff --git a/docs/cmdline-opts/write-out.d b/docs/cmdline-opts/write-out.d
index 8ca1746d0..e069afcf1 100644
--- a/docs/cmdline-opts/write-out.d
+++ b/docs/cmdline-opts/write-out.d
@@ -1,11 +1,11 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: write-out
Short: w
Arg: <format>
Help: Use output FORMAT after completion
Category: verbose
-Example: -w '%{http_code}\\n' $URL
+Example: -w '%{response_code}\\n' $URL
Added: 6.5
See-also: verbose head
Multi: single
@@ -16,193 +16,276 @@ variables. The format can be specified as a literal "string", or you can have
curl read the format from a file with "@filename" and to tell curl to read the
format from stdin you write "@-".
-The variables present in the output format will be substituted by the value or
+The variables present in the output format are substituted by the value or
text that curl thinks fit, as described below. All variables are specified as
%{variable_name} and to output a normal % you just write them as %%. You can
output a newline by using \\n, a carriage return with \\r and a tab space with
\\t.
-The output will be written to standard output, but this can be switched to
-standard error by using %{stderr}.
+The output is by default written to standard output, but can be changed with
+%{stderr} and %output{}.
-Output HTTP headers from the most recent request by using \fB%header{name}\fP
-where \fBname\fP is the case insensitive name of the header (without the
-trailing colon). The header contents are exactly as sent over the network,
-with leading and trailing whitespace trimmed. Added in curl 7.84.0.
+Output HTTP headers from the most recent request by using *%header{name}*
+where *name* is the case insensitive name of the header (without the trailing
+colon). The header contents are exactly as sent over the network, with leading
+and trailing whitespace trimmed (added in 7.84.0).
-.B NOTE:
-The %-symbol is a special symbol in the win32-environment, where all
-occurrences of % must be doubled when using this option.
+Select a specific target destination file to write the output to, by using
+*%output{name}* (added in curl 8.3.0) where *name* is the full file name. The
+output following that instruction is then written to that file. More than one
+*%output{}* instruction can be specified in the same write-out argument. If
+the file name cannot be created, curl leaves the output destination to the one
+used prior to the *%output{}* instruction. Use *%output{>>name}* to append
+data to an existing file.
+
+**NOTE:**
+In Windows the %-symbol is a special symbol used to expand environment
+variables. In batch files all occurrences of % must be doubled when using this
+option to properly escape. If this option is used at the command prompt then
+the % cannot be escaped and unintended expansion is possible.
The variables available are:
.RS
.TP 15
-.B content_type
+**certs**
+Output the certificate chain with details. Supported only by the OpenSSL,
+GnuTLS, Schannel and Secure Transport backends. (Added in 7.88.0)
+.TP
+**content_type**
The Content-Type of the requested document, if there was any.
.TP
-.B errormsg
+**errormsg**
The error message. (Added in 7.75.0)
.TP
-.B exitcode
-The numerical exitcode of the transfer. (Added in 7.75.0)
+**exitcode**
+The numerical exit code of the transfer. (Added in 7.75.0)
.TP
-.B filename_effective
+**filename_effective**
The ultimate filename that curl writes out to. This is only meaningful if curl
is told to write to a file with the --remote-name or --output
option. It's most useful in combination with the --remote-header-name
option. (Added in 7.26.0)
.TP
-.B ftp_entry_path
+**ftp_entry_path**
The initial path curl ended up in when logging on to the remote FTP
server. (Added in 7.15.4)
.TP
-.B header_json
+**header_json**
A JSON object with all HTTP response headers from the recent transfer. Values
are provided as arrays, since in the case of multiple headers there can be
-multiple values.
+multiple values. (Added in 7.83.0)
The header names provided in lowercase, listed in order of appearance over the
wire. Except for duplicated headers. They are grouped on the first occurrence
of that header, each value is presented in the JSON array.
.TP
-.B http_code
+**http_code**
The numerical response code that was found in the last retrieved HTTP(S) or
FTP(s) transfer.
.TP
-.B http_connect
+**http_connect**
The numerical code that was found in the last response (from a proxy) to a
curl CONNECT request. (Added in 7.12.4)
.TP
-.B http_version
+**http_version**
The http version that was effectively used. (Added in 7.50.0)
.TP
-.B json
-A JSON object with all available keys.
+**json**
+A JSON object with all available keys. (Added in 7.70.0)
.TP
-.B local_ip
+**local_ip**
The IP address of the local end of the most recently done connection - can be
either IPv4 or IPv6. (Added in 7.29.0)
.TP
-.B local_port
+**local_port**
The local port number of the most recently done connection. (Added in 7.29.0)
.TP
-.B method
+**method**
The http method used in the most recent HTTP request. (Added in 7.72.0)
.TP
-.B num_connects
+**num_certs**
+Number of server certificates received in the TLS handshake. Supported only by
+the OpenSSL, GnuTLS, Schannel and Secure Transport backends.
+(Added in 7.88.0)
+.TP
+**num_connects**
Number of new connects made in the recent transfer. (Added in 7.12.3)
.TP
-.B num_headers
+**num_headers**
The number of response headers in the most recent request (restarted at each
redirect). Note that the status line IS NOT a header. (Added in 7.73.0)
.TP
-.B num_redirects
+**num_redirects**
Number of redirects that were followed in the request. (Added in 7.12.3)
.TP
-.B onerror
-The rest of the output is only shown if the transfer returned a non-zero error
+**onerror**
+The rest of the output is only shown if the transfer returned a non-zero error.
(Added in 7.75.0)
.TP
-.B proxy_ssl_verify_result
+**proxy_ssl_verify_result**
The result of the HTTPS proxy's SSL peer certificate verification that was
requested. 0 means the verification was successful. (Added in 7.52.0)
.TP
-.B redirect_url
+**redirect_url**
When an HTTP request was made without --location to follow redirects (or when
---max-redirs is met), this variable will show the actual URL a redirect
+--max-redirs is met), this variable shows the actual URL a redirect
*would* have gone to. (Added in 7.18.2)
.TP
-.B referer
+**referer**
The Referer: header, if there was any. (Added in 7.76.0)
.TP
-.B remote_ip
+**remote_ip**
The remote IP address of the most recently done connection - can be either
IPv4 or IPv6. (Added in 7.29.0)
.TP
-.B remote_port
+**remote_port**
The remote port number of the most recently done connection. (Added in 7.29.0)
.TP
-.B response_code
+**response_code**
The numerical response code that was found in the last transfer (formerly
known as "http_code"). (Added in 7.18.2)
.TP
-.B scheme
+**scheme**
The URL scheme (sometimes called protocol) that was effectively used. (Added in 7.52.0)
.TP
-.B size_download
+**size_download**
The total amount of bytes that were downloaded. This is the size of the
body/data that was transferred, excluding headers.
.TP
-.B size_header
+**size_header**
The total amount of bytes of the downloaded headers.
.TP
-.B size_request
+**size_request**
The total amount of bytes that were sent in the HTTP request.
.TP
-.B size_upload
+**size_upload**
The total amount of bytes that were uploaded. This is the size of the
body/data that was transferred, excluding headers.
.TP
-.B speed_download
+**speed_download**
The average download speed that curl measured for the complete download. Bytes
per second.
.TP
-.B speed_upload
+**speed_upload**
The average upload speed that curl measured for the complete upload. Bytes per
second.
.TP
-.B ssl_verify_result
+**ssl_verify_result**
The result of the SSL peer certificate verification that was requested. 0
means the verification was successful. (Added in 7.19.0)
.TP
-.B stderr
-From this point on, the --write-out output will be written to standard
+**stderr**
+From this point on, the --write-out output is written to standard
error. (Added in 7.63.0)
.TP
-.B stdout
-From this point on, the --write-out output will be written to standard output.
+**stdout**
+From this point on, the --write-out output is written to standard output.
This is the default, but can be used to switch back after switching to stderr.
(Added in 7.63.0)
.TP
-.B time_appconnect
+**time_appconnect**
The time, in seconds, it took from the start until the SSL/SSH/etc
connect/handshake to the remote host was completed. (Added in 7.19.0)
.TP
-.B time_connect
+**time_connect**
The time, in seconds, it took from the start until the TCP connect to the
remote host (or proxy) was completed.
.TP
-.B time_namelookup
+**time_namelookup**
The time, in seconds, it took from the start until the name resolving was
completed.
.TP
-.B time_pretransfer
+**time_pretransfer**
The time, in seconds, it took from the start until the file transfer was just
about to begin. This includes all pre-transfer commands and negotiations that
are specific to the particular protocol(s) involved.
.TP
-.B time_redirect
+**time_redirect**
The time, in seconds, it took for all redirection steps including name lookup,
connect, pretransfer and transfer before the final transaction was
started. time_redirect shows the complete execution time for multiple
redirections. (Added in 7.12.3)
.TP
-.B time_starttransfer
-The time, in seconds, it took from the start until the first byte was just
-about to be transferred. This includes time_pretransfer and also the time the
-server needed to calculate the result.
+**time_starttransfer**
+The time, in seconds, it took from the start until the first byte is received.
+This includes time_pretransfer and also the time the server needed to calculate
+the result.
.TP
-.B time_total
+**time_total**
The total time, in seconds, that the full operation lasted.
.TP
-.B url
+**url**
The URL that was fetched. (Added in 7.75.0)
.TP
-.B urlnum
-The URL index number of this transfer, 0-indexed. De-globbed URLs share the
+**url.scheme**
+The scheme part of the URL that was fetched. (Added in 8.1.0)
+.TP
+**url.user**
+The user part of the URL that was fetched. (Added in 8.1.0)
+.TP
+**url.password**
+The password part of the URL that was fetched. (Added in 8.1.0)
+.TP
+**url.options**
+The options part of the URL that was fetched. (Added in 8.1.0)
+.TP
+**url.host**
+The host part of the URL that was fetched. (Added in 8.1.0)
+.TP
+**url.port**
+The port number of the URL that was fetched. If no port number was specified,
+but the URL scheme is known, that scheme's default port number is
+shown. (Added in 8.1.0)
+.TP
+**url.path**
+The path part of the URL that was fetched. (Added in 8.1.0)
+.TP
+**url.query**
+The query part of the URL that was fetched. (Added in 8.1.0)
+.TP
+**url.fragment**
+The fragment part of the URL that was fetched. (Added in 8.1.0)
+.TP
+**url.zoneid**
+The zone id part of the URL that was fetched. (Added in 8.1.0)
+.TP
+**urle.scheme**
+The scheme part of the effective (last) URL that was fetched. (Added in 8.1.0)
+.TP
+**urle.user**
+The user part of the effective (last) URL that was fetched. (Added in 8.1.0)
+.TP
+**urle.password**
+The password part of the effective (last) URL that was fetched. (Added in 8.1.0)
+.TP
+**urle.options**
+The options part of the effective (last) URL that was fetched. (Added in 8.1.0)
+.TP
+**urle.host**
+The host part of the effective (last) URL that was fetched. (Added in 8.1.0)
+.TP
+**urle.port**
+The port number of the effective (last) URL that was fetched. If no port
+number was specified, but the URL scheme is known, that scheme's default port
+number is shown. (Added in 8.1.0)
+.TP
+**urle.path**
+The path part of the effective (last) URL that was fetched. (Added in 8.1.0)
+.TP
+**urle.query**
+The query part of the effective (last) URL that was fetched. (Added in 8.1.0)
+.TP
+**urle.fragment**
+The fragment part of the effective (last) URL that was fetched. (Added in 8.1.0)
+.TP
+**urle.zoneid**
+The zone id part of the effective (last) URL that was fetched. (Added in 8.1.0)
+.TP
+**urlnum**
+The URL index number of this transfer, 0-indexed. Unglobbed URLs share the
same index number as the origin globbed URL. (Added in 7.75.0)
.TP
-.B url_effective
+**url_effective**
The URL that was fetched last. This is most meaningful if you have told curl
to follow location: headers.
.RE
diff --git a/docs/cmdline-opts/xattr.d b/docs/cmdline-opts/xattr.d
index 9f1a6cf8a..31bdb2d72 100644
--- a/docs/cmdline-opts/xattr.d
+++ b/docs/cmdline-opts/xattr.d
@@ -1,4 +1,4 @@
-c: Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: xattr
Help: Store metadata in extended file attributes
diff --git a/docs/curl-config.1 b/docs/curl-config.1
index 6a7fa86aa..7c1144851 100644
--- a/docs/curl-config.1
+++ b/docs/curl-config.1
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH curl-config 1 "September 20, 2022" "Curl 7.86.0" "curl-config manual"
+.TH curl-config 1 "April 26, 2023" "url-config 8.5.0" curl-config
.SH NAME
curl-config \- Get information about a libcurl installation
diff --git a/docs/curl.1 b/docs/curl.1
index 18d2cf07c..15042dc07 100644
--- a/docs/curl.1
+++ b/docs/curl.1
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 \- 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -18,37 +18,58 @@
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
-.\" * SPDX-License-Identifier: curl
+.\" * SPDX\-License\-Identifier: curl
.\" *
.\" **************************************************************************
.\"
.\" DO NOT EDIT. Generated by the curl project gen.pl man page generator.
.\"
-.TH curl 1 "October 23 2022" "curl 7.86.0" "curl Manual"
+.TH curl 1 "December 05 2023" "curl 8.5.0" "curl Manual"
.SH NAME
curl \- transfer a URL
.SH SYNOPSIS
.B curl [options / URLs]
.SH DESCRIPTION
-\fBcurl\fP is a tool for transferring data from or to a server. 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. The command is designed to work without user
-interaction.
-
-curl offers a busload of useful tricks like proxy support, user
-authentication, FTP upload, HTTP post, SSL connections, cookies, file transfer
-resume and more. As you will see below, the number of features will make your
-head spin.
-
-curl is powered by libcurl for all transfer-related features. See
+\fBcurl\fP 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
\fIlibcurl(3)\fP for details.
.SH URL
-The URL syntax is protocol-dependent. You find a detailed description in
+The URL syntax is protocol\-dependent. You find a detailed description in
RFC 3986.
-You can specify multiple URLs or parts of URLs by writing part sets within
-braces and quoting the URL as in:
+If you provide a URL without a leading \fBprotocol://\fP 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
+\(dqftp." 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 \fI\-Z, \-\-parallel\fP. 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
+
+.nf
+ \(dqhttp://[fe80::3%25eth0]/"
+.fi
+
+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:
.nf
\(dqhttp://site.{one,two,three}.com"
@@ -57,69 +78,91 @@ braces and quoting the URL as in:
or you can get sequences of alphanumeric series by using [] as in:
.nf
- \(dqftp://ftp.example.com/file[1-100].txt"
+ \(dqftp://ftp.example.com/file[1\-100].txt"
.fi
.nf
- \(dqftp://ftp.example.com/file[001-100].txt" (with leading zeros)
+ \(dqftp://ftp.example.com/file[001\-100].txt" (with leading zeros)
.fi
.nf
- \(dqftp://ftp.example.com/file[a-z].txt"
+ \(dqftp://ftp.example.com/file[a\-z].txt"
.fi
Nested sequences are not supported, but you can use several ones next to each
other:
.nf
- \(dqhttp://example.com/archive[1996-1999]/vol[1-4]/part{a,b,c}.html"
+ \(dqhttp://example.com/archive[1996\-1999]/vol[1\-4]/part{a,b,c}.html"
.fi
-You can specify any amount of URLs on the command line. They will be fetched
-in a sequential manner in the specified order. You can specify command line
-options and URLs mixed and in any order on the command line.
-
You can specify a step counter for the ranges to get every Nth number or
letter:
.nf
- \(dqhttp://example.com/file[1-100:10].txt"
+ \(dqhttp://example.com/file[1\-100:10].txt"
.fi
.nf
- \(dqhttp://example.com/file[a-z:2].txt"
+ \(dqhttp://example.com/file[a\-z:2].txt"
.fi
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 '*'.
+for example \(aq&\(aq, \(aq?\(aq and \(aq*\(aq.
+
+Switch off globbing with \fI\-g, \-\-globoff\fP.
+.SH VARIABLES
+curl supports command line variables (added in 8.3.0). Set variables with
+\fI\-\-variable\fP name=content or \fI\-\-variable\fP 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 \fI\-\-variable\fP %name
+imports the variable called \(aqname\(aq but exits with an error if that environment
+variable is not already set. To provide a default value if it is not set, use
+\fI\-\-variable\fP %name=content or \fI\-\-variable\fP %name@content.
-Provide the IPv6 zone index in the URL with an escaped percentage sign and the
-interface name. Like in
+Example. Get the USER environment variable into the URL, fail if USER is not
+set:
.nf
- \(dqhttp://[fe80::3%25eth0]/"
+ \--variable \(aq%USER\(aq
+ \--expand\-url = "https://example.com/api/{{USER}}/method"
.fi
-If you specify URL without protocol:// prefix, curl will attempt to guess what
-protocol you might want. It will then default to HTTP but try other protocols
-based on often-used host name prefixes. For example, for host names starting
-with "ftp." curl will assume you want to speak FTP.
+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 \fItrim\fP, it can output the contents as a JSON quoted string
+with \fIjson\fP, URL encode the string with \fIurl\fP or base64 encode it with
+\fIb64\fP. 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:
-curl will do its best to use what you pass to it as a URL. It is not trying to
-validate it as a syntactically correct URL by any means but is fairly liberal
-with what it accepts.
+.nf
+ \--variable %HOME
+ \--expand\-variable fix@{{HOME}}/.secret
+ \--expand\-data "{{fix:trim:url}}"
+ https://example.com/
+.fi
-curl will attempt to re-use connections for multiple file transfers, so that
-getting many files from the same server will not do multiple connects /
-handshakes. This improves speed. Of course this is only done on files
-specified on a single command line and cannot be used between separate curl
-invocations.
+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
+instructed to instead save that data into a local file, using the \fI\-o, \-\-output\fP or
+\fI\-O, \-\-remote\-name\fP 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
@@ -133,7 +176,7 @@ 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
-will work.
+works.
.IP FTP(S)
curl supports the File Transfer Protocol with a lot of tweaks and levers. With
or without using TLS.
@@ -156,7 +199,7 @@ not supported (yet).
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 server streaming media
+The \fI\fPRealtime Messaging Protocol\fI\fP is primarily used to serve streaming media
and curl can download it.
.IP RTSP
curl supports RTSP 1.0 downloads.
@@ -177,9 +220,9 @@ 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 number of bytes and the speeds are in bytes per
-second. The suffixes (k, M, G, T, P) are 1024 based. For example 1k is 1024
-bytes. 1M is 1048576 bytes.
+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
@@ -187,121 +230,143 @@ do an operation and it is about to write data to the terminal, it
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
+redirect the response output to a file, using shell redirect (>), \fI\-o, \-\-output\fP 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
+If you prefer a progress "bar" instead of the regular meter, \fI\-#, \-\-progress\-bar\fP is
your friend. You can also disable the progress meter completely with the
-\-\-silent option.
+\fI\-s, \-\-silent\fP option.
+.SH VERSION
+This man page describes curl 8.5.0. 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
+
+.nf
+ curl https://curl.se/info
+.fi
+
+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.
+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
+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
+separator. The long "double\-dash" form, \fI\-d, \-\-data\fP 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.
+options \fI\-O\fP, \fI\-L\fP and \fI\-v\fP at once as \fI\-OLv\fP.
-In general, all boolean options are enabled with \-\-\fBoption\fP and yet again
-disabled with \-\-\fBno-\fPoption. 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.
-.IP "\-\-abstract-unix-socket <path>"
+In general, all boolean options are enabled with \--\fBoption\fP and yet again
+disabled with \--\fBno\-\fPoption. That is, you use the same option name but
+prefix it with "no\-". However, in this list we mostly only list and show the
+\fI\--option\fP version of them.
+
+When \fI\-:, \-\-next\fP 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 \fI\-:, \-\-next\fP.
+
+The following options are global:
+\fI\-\-fail\-early\fP, \fI\-\-libcurl\fP, \fI\-\-parallel\-immediate\fP, \fI\-Z, \-\-parallel\fP, \fI\-#, \-\-progress\-bar\fP, \fI\-\-rate\fP, \fI\-S, \-\-show\-error\fP, \fI\-\-stderr\fP, \fI\-\-styled\-output\fP, \fI\-\-trace\-ascii\fP, \fI\-\-trace\-config\fP, \fI\-\-trace\-ids\fP, \fI\-\-trace\-time\fP, \fI\-\-trace\fP and \fI\-v, \-\-verbose\fP.
+.IP "\-\-abstract\-unix\-socket <path>"
(HTTP) Connect through an abstract Unix domain socket, instead of using the network.
-Note: netstat shows the path of an abstract socket prefixed with '@', however
+Note: netstat shows the path of an abstract socket prefixed with \(aq@\(aq, however
the <path> argument should not have this leading character.
-If --abstract-unix-socket is provided several times, the last set value will be used.
+If \fI\-\-abstract\-unix\-socket\fP is provided several times, the last set value is used.
Example:
.nf
- curl --abstract-unix-socket socketpath https://example.com
+ curl \-\-abstract\-unix\-socket socketpath https://example.com
.fi
-See also \fI--unix-socket\fP. Added in 7.53.0.
-.IP "\-\-alt-svc <file name>"
-(HTTPS) This option enables the alt-svc parser in curl. If the file name points to an
-existing alt-svc cache file, that will be used. After a completed transfer,
-the cache will be saved to the file name again if it has been modified.
+See also \fI\-\-unix\-socket\fP. Added in 7.53.0.
+.IP "\-\-alt\-svc <file name>"
+(HTTPS) 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 will load contents from all the
-files but the last one will be used for saving.
+If this option is used several times, curl loads contents from all the
+files but the last one is used for saving.
---alt-svc can be used several times in a command line
+\fI\-\-alt\-svc\fP can be used several times in a command line
Example:
.nf
- curl --alt-svc svc.txt https://example.com
+ curl \-\-alt\-svc svc.txt https://example.com
.fi
-See also \fI--resolve\fP and \fI--connect-to\fP. Added in 7.64.1.
+See also \fI\-\-resolve\fP and \fI\-\-connect\-to\fP. Added in 7.64.1.
.IP "\-\-anyauth"
(HTTP) 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
+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 \fI\-\-basic\fP, \fI\-\-digest\fP, \fI\-\-ntlm\fP, and \fI\-\-negotiate\fP.
-Using \-\-anyauth is not recommended if you do uploads from stdin, since it may
+Using \fI\-\-anyauth\fP 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 will
-fail.
+the need should arise when uploading from stdin, the upload operation fails.
Used together with \fI\-u, \-\-user\fP.
-Providing --anyauth multiple times has no extra effect.
+Providing \fI\-\-anyauth\fP multiple times has no extra effect.
Example:
.nf
- curl --anyauth --user me:pwd https://example.com
+ curl \-\-anyauth \-\-user me:pwd https://example.com
.fi
-See also \fI--proxy-anyauth\fP, \fI--basic\fP and \fI--digest\fP.
+See also \fI\-\-proxy\-anyauth\fP, \fI\-\-basic\fP and \fI\-\-digest\fP.
.IP "\-a, \-\-append"
-(FTP SFTP) When used in an upload, this makes curl append to the target file instead of
-overwriting it. If the remote file does not exist, it will be created. Note
-that this flag is ignored by some SFTP servers (including OpenSSH).
+(FTP SFTP) 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).
-Providing --append multiple times has no extra effect.
-Disable it again with --no-append.
+Providing \fI\-a, \-\-append\fP multiple times has no extra effect.
+Disable it again with \-\-no\-append.
Example:
.nf
- curl --upload-file local --append ftp://example.com/
+ curl \-\-upload\-file local \-\-append ftp://example.com/
.fi
-See also \fI-r, --range\fP and \fI-C, --continue-at\fP.
-.IP "\-\-aws-sigv4 <provider1[:provider2[:region[:service]]]>"
+See also \fI-r, \-\-range\fP and \fI-C, \-\-continue\-at\fP.
+.IP "\-\-aws\-sigv4 <provider1[:provider2[:region[:service]]]>"
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
+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.
+(service\-code) when the service name is omitted from the endpoint.
-If --aws-sigv4 is provided several times, the last set value will be used.
+If \fI\-\-aws\-sigv4\fP is provided several times, the last set value is used.
Example:
.nf
- curl --aws-sigv4 "aws:amz:east-2:es" --user "key:secret" https://example.com
+ curl \-\-aws\-sigv4 "aws:amz:us\-east\-2:es" \-\-user "key:secret" https://example.com
.fi
-See also \fI--basic\fP and \fI-u, --user\fP. Added in 7.75.0.
+See also \fI\-\-basic\fP and \fI-u, \-\-user\fP. Added in 7.75.0.
.IP "\-\-basic"
(HTTP) 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
@@ -310,70 +375,88 @@ previously set option that sets a different authentication method (such as
Used together with \fI\-u, \-\-user\fP.
-Providing --basic multiple times has no extra effect.
+Providing \fI\-\-basic\fP multiple times has no extra effect.
+
+Example:
+.nf
+ curl \-u name:password \-\-basic https://example.com
+.fi
+
+See also \fI\-\-proxy\-basic\fP.
+.IP "\-\-ca\-native"
+(TLS) 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\(aqs
+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).
+
+Providing \fI\-\-ca\-native\fP multiple times has no extra effect.
+Disable it again with \-\-no\-ca\-native.
Example:
.nf
- curl -u name:password --basic https://example.com
+ curl \-\-ca\-native https://example.com
.fi
-See also \fI--proxy-basic\fP.
+See also \fI\-\-cacert\fP, \fI\-\-capath\fP and \fI-k, \-\-insecure\fP. Added in 8.2.0.
.IP "\-\-cacert <file>"
(TLS) 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
+curl recognizes the environment variable named \(aqCURL_CA_BUNDLE\(aq 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 will automatically look for a CA certs file named
-\(aqcurl-ca-bundle.crt', either in the same directory as curl.exe, or in the
+The windows version of curl automatically looks for a CA certs file named
+\(aqcurl\-ca\-bundle.crt\(aq, either in the same directory as curl.exe, or in the
Current Working Directory, or in any folder along your PATH.
-If curl is built against the NSS SSL library, the NSS PEM PKCS#11 module
-(libnsspem.so) needs to be available for this option to work properly.
-
(iOS and macOS only) If curl is built against Secure Transport, then this
option is supported for backward compatibility with other SSL engines, but it
-should not be set. If the option is not set, then curl will use the
-certificates in the system and user Keychain to verify the peer, which is the
-preferred method of verifying the peer's certificate chain.
+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\(aqs certificate chain.
(Schannel only) This option is supported for Schannel in Windows 7 or later
-with libcurl 7.60 or later. 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).
+(added in 7.60.0). This option is supported for backward compatibility with
+other SSL engines; instead it is recommended to use Windows\(aq store of root
+certificates (the default for Schannel).
-If --cacert is provided several times, the last set value will be used.
+If \fI\-\-cacert\fP is provided several times, the last set value is used.
Example:
.nf
- curl --cacert CA-file.txt https://example.com
+ curl \-\-cacert CA\-file.txt https://example.com
.fi
-See also \fI--capath\fP and \fI-k, --insecure\fP.
+See also \fI\-\-capath\fP and \fI-k, \-\-insecure\fP.
.IP "\-\-capath <dir>"
(TLS) Tells curl to use the specified certificate directory to verify the
peer. Multiple paths can be provided by separating them with ":" (e.g.
\(dqpath1: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.
+c_rehash utility supplied with OpenSSL. Using \fI\-\-capath\fP can allow
+OpenSSL\-powered curl to make SSL\-connections much more efficiently than using
+\fI\-\-cacert\fP if the \fI\-\-cacert\fP file contains many CA certificates.
-If this option is set, the default capath value will be ignored.
+If this option is set, the default capath value is ignored.
-If --capath is provided several times, the last set value will be used.
+If \fI\-\-capath\fP is provided several times, the last set value is used.
Example:
.nf
- curl --capath /local/directory https://example.com
+ curl \-\-capath /local/directory https://example.com
.fi
-See also \fI--cacert\fP and \fI-k, --insecure\fP.
-.IP "\-\-cert-status"
+See also \fI\-\-cacert\fP and \fI-k, \-\-insecure\fP.
+.IP "\-\-cert\-status"
(TLS) Tells curl to verify the status of the server certificate by using the
Certificate Status Request (aka. OCSP stapling) TLS extension.
@@ -381,40 +464,40 @@ 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, GnuTLS and NSS backends.
+This is currently only implemented in the OpenSSL and GnuTLS backends.
-Providing --cert-status multiple times has no extra effect.
-Disable it again with --no-cert-status.
+Providing \fI\-\-cert\-status\fP multiple times has no extra effect.
+Disable it again with \-\-no\-cert\-status.
Example:
.nf
- curl --cert-status https://example.com
+ curl \-\-cert\-status https://example.com
.fi
-See also \fI--pinnedpubkey\fP. Added in 7.41.0.
-.IP "\-\-cert-type <type>"
+See also \fI\-\-pinnedpubkey\fP.
+.IP "\-\-cert\-type <type>"
(TLS) 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
+Secure Transport and Schannel it is P12. If \fI\-E, \-\-cert\fP is a pkcs11: URI then ENG is
the default type.
-If --cert-type is provided several times, the last set value will be used.
+If \fI\-\-cert\-type\fP is provided several times, the last set value is used.
Example:
.nf
- curl --cert-type PEM --cert file https://example.com
+ curl \-\-cert\-type PEM \-\-cert file https://example.com
.fi
-See also \fI-E, --cert\fP, \fI--key\fP and \fI--key-type\fP.
+See also \fI-E, \-\-cert\fP, \fI\-\-key\fP and \fI\-\-key\-type\fP.
.IP "\-E, \-\-cert <certificate[:password]>"
(TLS) 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
+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 will be queried for on
+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
+private key and the client certificate concatenated. See \fI\-E, \-\-cert\fP and \fI\-\-key\fP to
specify them independently.
In the <certificate> portion of the argument, you must escape the character ":"
@@ -422,96 +505,89 @@ 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 the NSS SSL library then this option can tell
-curl the nickname of the certificate to use within the NSS database defined
-by the environment variable SSL_DIR (or by default /etc/pki/nssdb). If the
-NSS PEM PKCS#11 module (libnsspem.so) is available then PEM files may be
-loaded.
-
-If you provide a path relative to the current directory, you must prefix the
-path with "./" in order to avoid confusion with an NSS database nickname.
-
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:" will be interpreted as a
-PKCS#11 URI. If a PKCS#11 URI is provided, then the \-\-engine option will be set
-as "pkcs11" if none was provided and the \-\-cert-type option will be set as
-\(dqENG" if none was provided.
+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 \fI\-\-engine\fP option is set as
+\(dqpkcs11" if none was provided and the \fI\-\-cert\-type\fP 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
+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
+expression to a certificate store. (Loading \fIPFX\fP is not supported; you can
import it to a store first). You can use
\(dq<store location>\\<store name>\\<thumbprint>" to refer to a certificate
in the system certificates store, for example,
-\(dqCurrentUser\\MY\\934a7ac6f8a5d579285a74fa61e19f23ddfe8d7a". Thumbprint is
-usually a SHA-1 hex string which you can see in certificate details. Following
-store locations are supported: CurrentUser, LocalMachine, CurrentService,
-Services, CurrentUserGroupPolicy, LocalMachineGroupPolicy,
-LocalMachineEnterprise.
+\fI"CurrentUser\\MY\\934a7ac6f8a5d579285a74fa61e19f23ddfe8d7a"\fP. Thumbprint is
+usually a SHA\-1 hex string which you can see in certificate details. Following
+store locations are supported: \fICurrentUser\fP, \fILocalMachine\fP, \fICurrentService\fP,
+\fIServices\fP, \fICurrentUserGroupPolicy\fP, \fILocalMachineGroupPolicy\fP and
+\fILocalMachineEnterprise\fP.
-If --cert is provided several times, the last set value will be used.
+If \fI\-E, \-\-cert\fP is provided several times, the last set value is used.
Example:
.nf
- curl --cert certfile --key keyfile https://example.com
+ curl \-\-cert certfile \-\-key keyfile https://example.com
.fi
-See also \fI--cert-type\fP, \fI--key\fP and \fI--key-type\fP.
+See also \fI\-\-cert\-type\fP, \fI\-\-key\fP and \fI\-\-key\-type\fP.
.IP "\-\-ciphers <list of ciphers>"
(TLS) 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:
-.nf
- https://curl.se/docs/ssl-ciphers.html
-.fi
+https://curl.se/docs/ssl\-ciphers.html
-If --ciphers is provided several times, the last set value will be used.
+If \fI\-\-ciphers\fP is provided several times, the last set value is used.
Example:
.nf
- curl --ciphers ECDHE-ECDSA-AES256-CCM8 https://example.com
+ curl \-\-ciphers ECDHE\-ECDSA\-AES256\-CCM8 https://example.com
.fi
-See also \fI--tlsv1.3\fP.
-.IP "\-\-compressed-ssh"
-(SCP SFTP) Enables built-in SSH compression.
+See also \fI\-\-tlsv1.3\fP, \fI\-\-tls13\-ciphers\fP and \fI\-\-proxy\-ciphers\fP.
+.IP "\-\-compressed\-ssh"
+(SCP SFTP) Enables built\-in SSH compression.
This is a request, not an order; the server may or may not do it.
-Providing --compressed-ssh multiple times has no extra effect.
-Disable it again with --no-compressed-ssh.
+Providing \fI\-\-compressed\-ssh\fP multiple times has no extra effect.
+Disable it again with \-\-no\-compressed\-ssh.
Example:
.nf
- curl --compressed-ssh sftp://example.com/
+ curl \-\-compressed\-ssh sftp://example.com/
.fi
-See also \fI--compressed\fP. Added in 7.56.0.
+See also \fI\-\-compressed\fP. Added in 7.56.0.
.IP "\-\-compressed"
(HTTP) Request a compressed response using one of the algorithms curl supports, and
-automatically decompress the content. Headers are not modified.
+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 will
-report an error. This is a request, not an order; the server may or may not
+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.
-Providing --compressed multiple times has no extra effect.
-Disable it again with --no-compressed.
+Providing \fI\-\-compressed\fP multiple times has no extra effect.
+Disable it again with \-\-no\-compressed.
Example:
.nf
- curl --compressed https://example.com
+ curl \-\-compressed https://example.com
.fi
-See also \fI--compressed-ssh\fP.
+See also \fI\-\-compressed\-ssh\fP.
.IP "\-K, \-\-config <file>"
Specify a text file to read curl arguments from. The command line arguments
-found in the text file will be used as if they were provided on the command
+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,
@@ -521,30 +597,31 @@ 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 : or =), the parameter
-must be enclosed within 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 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 column of a config line is a '#' character, the rest of the line
-will be treated as a comment.
+If the first non\-blank column of a config line is a \(aq#\(aq character, that line
+is treated as a comment.
-Only write one option per physical line in the config file.
+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.
+Specify the filename to \fI\-K, \-\-config\fP as \(aq\-\(aq 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
+it using the \fI\-\-url\fP option, and not by simply writing the URL on its own
line. So, it could look similar to this:
url = "https://curl.se/docs/"
.nf
- # \-\-\- Example file \-\-\-
+ # \--\- Example file \--\-
# this is a comment
url = "example.com"
output = "curlhere.html"
- user-agent = "superagent/1.0"
+ user\-agent = "superagent/1.0"
.fi
.nf
@@ -552,57 +629,63 @@ url = "https://curl.se/docs/"
url = "example.com/docs/manpage.html"
\-O
referer = "http://nowhereatall.example.com/"
- # \-\-\- End of example file \-\-\-
+ # \--\- End of example file \--\-
.fi
-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
+When curl is invoked, it (unless \fI\-q, \-\-disable\fP is used) checks for a default
+config file and uses it if found, even when \fI\-K, \-\-config\fP is used. The default
config file is checked for in the following places in this order:
-1) "$CURL_HOME/.curlrc"
+1) \fB"$CURL_HOME/.curlrc"\fP
-2) "$XDG_CONFIG_HOME/.curlrc" (Added in 7.73.0)
+2) \fB"$XDG_CONFIG_HOME/curlrc"\fP (Added in 7.73.0)
-3) "$HOME/.curlrc"
+3) \fB"$HOME/.curlrc"\fP
-4) Windows: "%USERPROFILE%\\.curlrc"
+4) Windows: \fB"%USERPROFILE%\\.curlrc"\fP
-5) Windows: "%APPDATA%\\.curlrc"
+5) Windows: \fB"%APPDATA%\\.curlrc"\fP
-6) Windows: "%USERPROFILE%\\Application Data\\.curlrc"
+6) Windows: \fI\fP"%USERPROFILE%\\Application Data\\.curlrc"\fI\fP
-7) Non-Windows: use getpwuid to find the home directory
+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
+8) On Windows, if it finds no \fI.curlrc\fP 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.
+On Windows two filenames are checked per location: \fI.curlrc\fP and \fI_curlrc\fP,
+preferring the former. Older versions on Windows checked for \fI_curlrc\fP only.
---config can be used several times in a command line
+\fI\-K, \-\-config\fP can be used several times in a command line
Example:
.nf
- curl --config file.txt https://example.com
+ curl \-\-config file.txt https://example.com
.fi
-See also \fI-q, --disable\fP.
-.IP "\-\-connect-timeout <fractional seconds>"
-Maximum time in seconds that you allow curl's connection to take. This only
+See also \fI-q, \-\-disable\fP.
+.IP "\-\-connect\-timeout <fractional seconds>"
+Maximum time in seconds that you allow curl\(aqs connection to take. This only
limits the connection phase, so if curl connects within the given period it
-will continue \- if not it will exit. Since version 7.32.0, this option
-accepts decimal values.
+continues \- if not it exits.
+
+This option accepts decimal values. 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.
-If --connect-timeout is provided several times, the last set value will be used.
+If \fI\-\-connect\-timeout\fP is provided several times, the last set value is used.
Examples:
.nf
- curl --connect-timeout 20 https://example.com
- curl --connect-timeout 3.14 https://example.com
+ curl \-\-connect\-timeout 20 https://example.com
+ curl \-\-connect\-timeout 3.14 https://example.com
.fi
-See also \fI-m, --max-time\fP.
-.IP "\-\-connect-to <HOST1:PORT1:HOST2:PORT2>"
+See also \fI-m, \-\-max\-time\fP.
+.IP "\-\-connect\-to <HOST1:PORT1:HOST2:PORT2>"
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
@@ -611,304 +694,311 @@ 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".
+request\(aqs 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
\(dq127.0.0.1" or the full host name such as "example.org".
---connect-to can be used several times in a command line
+\fI\-\-connect\-to\fP can be used several times in a command line
Example:
.nf
- curl --connect-to example.com:443:example.net:8443 https://example.com
+ curl \-\-connect\-to example.com:443:example.net:8443 https://example.com
.fi
-See also \fI--resolve\fP and \fI-H, --header\fP. Added in 7.49.0.
-.IP "\-C, \-\-continue-at <offset>"
+See also \fI\-\-resolve\fP and \fI-H, \-\-header\fP.
+.IP "\-C, \-\-continue\-at <offset>"
Continue/Resume a previous file transfer at the given offset. The given offset
-is the exact number of bytes that will be skipped, counting from the beginning
+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 will not be used by curl.
+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
+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.
-If --continue-at is provided several times, the last set value will be used.
+If \fI\-C, \-\-continue\-at\fP is provided several times, the last set value is used.
Examples:
.nf
- curl -C - https://example.com
- curl -C 400 https://example.com
+ curl \-C \- https://example.com
+ curl \-C 400 https://example.com
.fi
-See also \fI-r, --range\fP.
-.IP "\-c, \-\-cookie-jar <filename>"
+See also \fI-r, \-\-range\fP.
+.IP "\-c, \-\-cookie\-jar <filename>"
(HTTP) 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 will be
-written. The file will be written using the Netscape cookie file format. If
-you set the file name to a single dash, "-", the cookies will be written to
-stdout.
+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.
-This command line option will activate the cookie engine that makes curl
-record and use cookies. Another way to activate it is to use the \-\-cookie
-option.
+The file specified with \fI\-c, \-\-cookie\-jar\fP is only used for output. No cookies are
+read from the file. To read cookies, use the \fI\-b, \-\-cookie\fP option. Both options
+can specify the same file.
+
+This command line option activates the cookie engine that makes curl record
+and use cookies. The \fI\-b, \-\-cookie\fP option also activates it.
If the cookie jar cannot be created or written to, the whole curl operation
-will not fail or even report an error clearly. Using \-\-verbose will get a
-warning displayed, but that is the only visible feedback you get about this
-possibly lethal situation.
+does not fail or even report an error clearly. Using \fI\-v, \-\-verbose\fP gets a warning
+displayed, but that is the only visible feedback you get about this possibly
+lethal situation.
-If --cookie-jar is provided several times, the last set value will be used.
+If \fI\-c, \-\-cookie\-jar\fP is provided several times, the last set value is used.
Examples:
.nf
- curl -c store-here.txt https://example.com
- curl -c store-here.txt -b read-these https://example.com
+ curl \-c store\-here.txt https://example.com
+ curl \-c store\-here.txt \-b read\-these https://example.com
.fi
-See also \fI-b, --cookie\fP.
+See also \fI-b, \-\-cookie\fP.
.IP "\-b, \-\-cookie <data|filename>"
(HTTP) 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
+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 will all get this cookie passed on.
+similar, they all get this cookie passed on.
-If no '=' symbol is used in the argument, it is instead treated as a filename
+If no \(aq=\(aq 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 will make 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
-will instead read the contents from stdin.
+engine which makes curl record incoming cookies, which may be handy if you are
+using this in combination with the \fI\-L, \-\-location\fP 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.
+(Set\-Cookie style) or the Netscape/Mozilla cookie file format.
-The file specified with \-\-cookie is only used as input. No cookies will be
-written to the file. To store cookies, use the \-\-cookie-jar option.
+The file specified with \fI\-b, \-\-cookie\fP is only used as input. No cookies are written
+to the file. To store cookies, use the \fI\-c, \-\-cookie\-jar\fP option.
-If you use the Set-Cookie file format and do not specify a domain then the
-cookie is not sent since the domain will never match. To address this, set a
-domain in Set-Cookie line (doing that will include sub-domains) or preferably:
-use the Netscape format.
+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
+back to a file, so using both \fI\-b, \-\-cookie\fP and \fI\-c, \-\-cookie\-jar\fP in the same command
line is common.
---cookie can be used several times in a command line
+\fI\-b, \-\-cookie\fP can be used several times in a command line
Examples:
.nf
- curl -b cookiefile https://example.com
- curl -b cookiefile -c cookiefile https://example.com
+ curl \-b cookiefile https://example.com
+ curl \-b cookiefile \-c cookiefile https://example.com
.fi
-See also \fI-c, --cookie-jar\fP and \fI-j, --junk-session-cookies\fP.
-.IP "\-\-create-dirs"
-When used in conjunction with the \-\-output option, curl will create the
-necessary local directory hierarchy as needed. This option creates the
-directories mentioned with the \-\-output option, nothing else. If the \-\-output
-file name uses no directory, or if the directories it mentions already exist,
-no directories will be created.
+See also \fI-c, \-\-cookie\-jar\fP and \fI-j, \-\-junk\-session\-cookies\fP.
+.IP "\-\-create\-dirs"
+When used in conjunction with the \fI\-o, \-\-output\fP option, curl creates the necessary
+local directory hierarchy as needed. This option creates the directories
+mentioned with the \fI\-o, \-\-output\fP option combined with the path possibly set with
+\fI\-\-output\-dir\fP. If the combined output file name uses no directory, or if the
+directories it mentions already exist, no directories are created.
-Created dirs are made with mode 0750 on unix style file systems.
+Created directories are made with mode 0750 on unix style file systems.
-To create remote directories when using FTP or SFTP, try \fI\-\-ftp-create-dirs\fP.
+To create remote directories when using FTP or SFTP, try \fI\-\-ftp\-create\-dirs\fP.
-Providing --create-dirs multiple times has no extra effect.
-Disable it again with --no-create-dirs.
+Providing \fI\-\-create\-dirs\fP multiple times has no extra effect.
+Disable it again with \-\-no\-create\-dirs.
Example:
.nf
- curl --create-dirs --output local/dir/file https://example.com
+ curl \-\-create\-dirs \-\-output local/dir/file https://example.com
.fi
-See also \fI--ftp-create-dirs\fP and \fI--output-dir\fP.
-.IP "\-\-create-file-mode <mode>"
+See also \fI\-\-ftp\-create\-dirs\fP and \fI\-\-output\-dir\fP.
+.IP "\-\-create\-file\-mode <mode>"
(SFTP SCP FILE) 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
+protocols, this option allows the user to set which \(aqmode\(aq to set on the file
at creation time, instead of the default 0644.
This option takes an octal number as argument.
-If --create-file-mode is provided several times, the last set value will be used.
+If \fI\-\-create\-file\-mode\fP is provided several times, the last set value is used.
Example:
.nf
- curl --create-file-mode 0777 -T localfile sftp://example.com/new
+ curl \-\-create\-file\-mode 0777 \-T localfile sftp://example.com/new
.fi
-See also \fI--ftp-create-dirs\fP. Added in 7.75.0.
+See also \fI\-\-ftp\-create\-dirs\fP. Added in 7.75.0.
.IP "\-\-crlf"
-(FTP SMTP) Convert LF to CRLF in upload. Useful for MVS (OS/390).
+(FTP SMTP) Convert line feeds to carriage return plus line feeds in upload. Useful for
+\fI\fPMVS (OS/390)\fI\fP.
(SMTP added in 7.40.0)
-Providing --crlf multiple times has no extra effect.
-Disable it again with --no-crlf.
+Providing \fI\-\-crlf\fP multiple times has no extra effect.
+Disable it again with \-\-no\-crlf.
Example:
.nf
- curl --crlf -T file ftp://example.com/
+ curl \-\-crlf \-T file ftp://example.com/
.fi
-See also \fI-B, --use-ascii\fP.
+See also \fI-B, \-\-use\-ascii\fP.
.IP "\-\-crlfile <file>"
(TLS) Provide a file using PEM format with a Certificate Revocation List that may
specify peer certificates that are to be considered revoked.
-If --crlfile is provided several times, the last set value will be used.
+If \fI\-\-crlfile\fP is provided several times, the last set value is used.
Example:
.nf
- curl --crlfile rejects.txt https://example.com
+ curl \-\-crlfile rejects.txt https://example.com
.fi
-See also \fI--cacert\fP and \fI--capath\fP.
+See also \fI\-\-cacert\fP and \fI\-\-capath\fP.
.IP "\-\-curves <algorithm list>"
(TLS) 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
+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
+\fI\-\-curves\fP 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 will be
-ignored.
+If this option is set, the default curves list built into OpenSSL are ignored.
-If --curves is provided several times, the last set value will be used.
+If \fI\-\-curves\fP is provided several times, the last set value is used.
Example:
.nf
- curl --curves X25519 https://example.com
+ curl \-\-curves X25519 https://example.com
.fi
-See also \fI--ciphers\fP. Added in 7.73.0.
-.IP "\-\-data-ascii <data>"
+See also \fI\-\-ciphers\fP. Added in 7.73.0.
+.IP "\-\-data\-ascii <data>"
(HTTP) This is just an alias for \fI\-d, \-\-data\fP.
---data-ascii can be used several times in a command line
+\fI\-\-data\-ascii\fP can be used several times in a command line
Example:
.nf
- curl --data-ascii @file https://example.com
+ curl \-\-data\-ascii @file https://example.com
.fi
-See also \fI--data-binary\fP, \fI--data-raw\fP and \fI--data-urlencode\fP.
-.IP "\-\-data-binary <data>"
+See also \fI\-\-data\-binary\fP, \fI\-\-data\-raw\fP and \fI\-\-data\-urlencode\fP.
+.IP "\-\-data\-binary <data>"
(HTTP) 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
+is posted in a similar manner as \fI\-d, \-\-data\fP 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".
+Like \fI\-d, \-\-data\fP 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 will append
+If this option is used several times, the ones following the first append
data as described in \fI\-d, \-\-data\fP.
---data-binary can be used several times in a command line
+\fI\-\-data\-binary\fP can be used several times in a command line
Example:
.nf
- curl --data-binary @filename https://example.com
+ curl \-\-data\-binary @filename https://example.com
.fi
-See also \fI--data-ascii\fP.
-.IP "\-\-data-raw <data>"
-(HTTP) This posts data similarly to \-\-data but without the special
+See also \fI\-\-data\-ascii\fP.
+.IP "\-\-data\-raw <data>"
+(HTTP) This posts data similarly to \fI\-d, \-\-data\fP but without the special
interpretation of the @ character.
---data-raw can be used several times in a command line
+\fI\-\-data\-raw\fP can be used several times in a command line
Examples:
.nf
- curl --data-raw "hello" https://example.com
- curl --data-raw "@at@at@" https://example.com
+ curl \-\-data\-raw "hello" https://example.com
+ curl \-\-data\-raw "@at@at@" https://example.com
.fi
-See also \fI-d, --data\fP. Added in 7.43.0.
-.IP "\-\-data-urlencode <data>"
-(HTTP) This posts data, similar to the other \-\-data options with the exception
-that this performs URL-encoding.
+See also \fI-d, \-\-data\fP.
+.IP "\-\-data\-urlencode <data>"
+(HTTP) This posts data, similar to the other \fI\-d, \-\-data\fP options with the exception
+that this performs URL\-encoding.
-To be CGI-compliant, the <data> part should begin with a \fIname\fP followed
+To be CGI\-compliant, the <data> part should begin with a \fIname\fP followed
by a separator and a content specification. The <data> part can be passed to
curl using one of the following syntaxes:
.RS
.IP "content"
-This will make curl URL-encode the content and pass that on. Just be careful
-so that the content does not contain any = or @ symbols, as that will then make
+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 will make curl URL-encode the content and pass that on. The preceding =
+This makes curl URL\-encode the content and pass that on. The preceding =
symbol is not included in the data.
.IP "name=content"
-This will make curl URL-encode the content part and pass that on. Note that
-the name part is expected to be URL-encoded already.
+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 will make curl load data from the given file (including any newlines),
-URL-encode that data and pass it on in the POST.
+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 will make 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 \fIname=urlencoded-file-content\fP. Note that the
-name is expected to be URL-encoded already.
+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 \fIname=urlencoded\-file\-content\fP. Note that the
+name is expected to be URL\-encoded already.
.RE
+.IP
---data-urlencode can be used several times in a command line
+\fI\-\-data\-urlencode\fP can be used several times in a command line
Examples:
.nf
- curl --data-urlencode name=val https://example.com
- curl --data-urlencode =encodethis https://example.com
- curl --data-urlencode name@file https://example.com
- curl --data-urlencode @fileonly https://example.com
+ curl \-\-data\-urlencode name=val https://example.com
+ curl \-\-data\-urlencode =encodethis https://example.com
+ curl \-\-data\-urlencode name@file https://example.com
+ curl \-\-data\-urlencode @fileonly https://example.com
.fi
-See also \fI-d, --data\fP and \fI--data-raw\fP.
+See also \fI-d, \-\-data\fP and \fI\-\-data\-raw\fP.
.IP "\-d, \-\-data <data>"
(HTTP MQTT) 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 will cause curl to pass the data to the server using the
-content-type application/x-www-form-urlencoded. Compare to \fI\-F, \-\-form\fP.
+submit button. This makes curl pass the data to the server using the
+content\-type application/x\-www\-form\-urlencoded. Compare to \fI\-F, \-\-form\fP.
-\-\-data-raw is almost the same but does not have a special interpretation of
+\fI\-\-data\-raw\fP 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
-\fI\-\-data-urlencode\fP.
+\fI\-\-data\-binary\fP option. To URL\-encode the value of a form field you may use
+\fI\-\-data\-urlencode\fP.
If any of these options is used more than once on the same command line, the
-data pieces specified will be merged with a separating &-symbol. Thus, using
-\(aq-d name=daniel \-d skill=lousy' would generate a post chunk that looks like
-\(aqname=daniel&skill=lousy'.
+data pieces specified are merged with a separating &\-symbol. Thus, using
+\(aq\-d name=daniel \-d skill=lousy\(aq would generate a post chunk that looks like
+\(aqname=daniel&skill=lousy\(aq.
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 \fI\-d, \-\-data\fP @foobar. When
-\-\-data is told to read from a file like that, carriage returns and newlines
-will be stripped out. If you do not want the @ character to have a special
-interpretation use \-\-data-raw instead.
+data from a file named \(aqfoobar\(aq would thus be done with \fI\-d, \-\-data\fP @foobar. When
+\fI\-d, \-\-data\fP 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 \fI\-\-data\-raw\fP instead.
---data can be used several times in a command line
+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.
+
+\fI\-d, \-\-data\fP can be used several times in a command line
Examples:
.nf
- curl -d "name=curl" https://example.com
- curl -d "name=curl" -d "tool=cmdline" https://example.com
- curl -d @filename https://example.com
+ curl \-d "name=curl" https://example.com
+ curl \-d "name=curl" \-d "tool=cmdline" https://example.com
+ curl \-d @filename https://example.com
.fi
-See also \fI--data-binary\fP, \fI--data-urlencode\fP and \fI--data-raw\fP. This option is mutually exclusive to \fI-F, --form\fP and \fI-I, --head\fP and \fI-T, --upload-file\fP.
+See also \fI\-\-data\-binary\fP, \fI\-\-data\-urlencode\fP and \fI\-\-data\-raw\fP. This option is mutually exclusive to \fI-F, \-\-form\fP and \fI-I, \-\-head\fP and \fI-T, \-\-upload\-file\fP.
.IP "\-\-delegation <LEVEL>"
(GSS/kerberos) Set LEVEL to tell the server what it is allowed to delegate when it
comes to user credentials.
@@ -916,420 +1006,428 @@ comes to user credentials.
.IP "none"
Do not allow any delegation.
.IP "policy"
-Delegates if and only if the OK-AS-DELEGATE flag is set in the Kerberos
+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
-If --delegation is provided several times, the last set value will be used.
+If \fI\-\-delegation\fP is provided several times, the last set value is used.
Example:
.nf
- curl --delegation "none" https://example.com
+ curl \-\-delegation "none" https://example.com
.fi
-See also \fI-k, --insecure\fP and \fI--ssl\fP.
+See also \fI-k, \-\-insecure\fP and \fI\-\-ssl\fP.
.IP "\-\-digest"
(HTTP) 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.
+combination with the normal \fI\-u, \-\-user\fP option to set user name and password.
-Providing --digest multiple times has no extra effect.
-Disable it again with --no-digest.
+Providing \fI\-\-digest\fP multiple times has no extra effect.
+Disable it again with \-\-no\-digest.
Example:
.nf
- curl -u name:password --digest https://example.com
+ curl \-u name:password \-\-digest https://example.com
.fi
-See also \fI-u, --user\fP, \fI--proxy-digest\fP and \fI--anyauth\fP. This option is mutually exclusive to \fI--basic\fP and \fI--ntlm\fP and \fI--negotiate\fP.
-.IP "\-\-disable-eprt"
+See also \fI-u, \-\-user\fP, \fI\-\-proxy\-digest\fP and \fI\-\-anyauth\fP. This option is mutually exclusive to \fI\-\-basic\fP and \fI\-\-ntlm\fP and \fI\-\-negotiate\fP.
+.IP "\-\-disable\-eprt"
(FTP) Tell curl to disable the use of the EPRT and LPRT commands when doing active
-FTP transfers. Curl will normally always first attempt to use EPRT, then LPRT
-before using PORT, but with this option, it will use PORT right away. EPRT and
-LPRT are extensions to the original FTP protocol, and may not work on all
-servers, but they enable more functionality in a better way than the
-traditional PORT command.
+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 \fI\-\-disable-eprt\fP.
+-\-eprt can be used to explicitly enable EPRT again and \--no\-eprt is an alias
+for \fI\-\-disable\-eprt\fP.
-If the server is accessed using IPv6, this option will have no effect as EPRT
-is necessary then.
+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 \fI\-\-ftp-pasv\fP.
+passive mode you need to not use \fI\-P, \-\-ftp\-port\fP or force it with \fI\-\-ftp\-pasv\fP.
-Providing --disable-eprt multiple times has no extra effect.
-Disable it again with --no-disable-eprt.
+Providing \fI\-\-disable\-eprt\fP multiple times has no extra effect.
+Disable it again with \-\-no\-disable\-eprt.
Example:
.nf
- curl --disable-eprt ftp://example.com/
+ curl \-\-disable\-eprt ftp://example.com/
.fi
-See also \fI--disable-epsv\fP and \fI-P, --ftp-port\fP.
-.IP "\-\-disable-epsv"
+See also \fI\-\-disable\-epsv\fP and \fI-P, \-\-ftp\-port\fP.
+.IP "\-\-disable\-epsv"
(FTP) Tell curl to disable the use of the EPSV command when doing passive FTP
-transfers. Curl will normally always first attempt to use EPSV before
-PASV, but with this option, it will not try using EPSV.
+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 \fI\-\-disable-epsv\fP.
+-\-epsv can be used to explicitly enable EPSV again and \--no\-epsv is an alias
+for \fI\-\-disable\-epsv\fP.
-If the server is an IPv6 host, this option will have no effect as EPSV is
-necessary then.
+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 \fI\-P, \-\-ftp-port\fP.
+active mode you need to use \fI\-P, \-\-ftp\-port\fP.
-Providing --disable-epsv multiple times has no extra effect.
-Disable it again with --no-disable-epsv.
+Providing \fI\-\-disable\-epsv\fP multiple times has no extra effect.
+Disable it again with \-\-no\-disable\-epsv.
Example:
.nf
- curl --disable-epsv ftp://example.com/
+ curl \-\-disable\-epsv ftp://example.com/
.fi
-See also \fI--disable-eprt\fP and \fI-P, --ftp-port\fP.
+See also \fI\-\-disable\-eprt\fP and \fI-P, \-\-ftp\-port\fP.
.IP "\-q, \-\-disable"
-If used as the first parameter on the command line, the \fIcurlrc\fP config
-file will not be read and used. See the \-\-config for details on the default
-config file search path.
+If used as the \fBfirst\fP parameter on the command line, the \fIcurlrc\fP config
+file is not read or used. See the \fI\-K, \-\-config\fP for details on the default config
+file search path.
+
+Prior to 7.50.0 curl supported the short option name \fIq\fP but not the long
+option name \fIdisable\fP.
-Providing --disable multiple times has no extra effect.
-Disable it again with --no-disable.
+Providing \fI\-q, \-\-disable\fP multiple times has no extra effect.
+Disable it again with \-\-no\-disable.
Example:
.nf
- curl -q https://example.com
+ curl \-q https://example.com
.fi
-See also \fI-K, --config\fP.
-.IP "\-\-disallow-username-in-url"
+See also \fI-K, \-\-config\fP.
+.IP "\-\-disallow\-username\-in\-url"
(HTTP) 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.
-Providing --disallow-username-in-url multiple times has no extra effect.
-Disable it again with --no-disallow-username-in-url.
+Providing \fI\-\-disallow\-username\-in\-url\fP multiple times has no extra effect.
+Disable it again with \-\-no\-disallow\-username\-in\-url.
Example:
.nf
- curl --disallow-username-in-url https://example.com
+ curl \-\-disallow\-username\-in\-url https://example.com
.fi
-See also \fI--proto\fP. Added in 7.61.0.
-.IP "\-\-dns-interface <interface>"
+See also \fI\-\-proto\fP. Added in 7.61.0.
+.IP "\-\-dns\-interface <interface>"
(DNS) Tell curl to send outgoing DNS requests through <interface>. This option is a
counterpart to \fI\-\-interface\fP (which does not affect DNS). The supplied string
must be an interface name (not an address).
-If --dns-interface is provided several times, the last set value will be used.
+If \fI\-\-dns\-interface\fP is provided several times, the last set value is used.
Example:
.nf
- curl --dns-interface eth0 https://example.com
+ curl \-\-dns\-interface eth0 https://example.com
.fi
-See also \fI--dns-ipv4-addr\fP and \fI--dns-ipv6-addr\fP. \fI--dns-interface\fP requires that the underlying libcurl was built to support c-ares. Added in 7.33.0.
-.IP "\-\-dns-ipv4-addr <address>"
-(DNS) Tell curl to bind to <ip-address> when making IPv4 DNS requests, so that
-the DNS requests originate from this address. The argument should be a
+See also \fI\-\-dns\-ipv4\-addr\fP and \fI\-\-dns\-ipv6\-addr\fP. \fI\-\-dns\-interface\fP requires that the underlying libcurl was built to support c-ares.
+.IP "\-\-dns\-ipv4\-addr <address>"
+(DNS) 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.
-If --dns-ipv4-addr is provided several times, the last set value will be used.
+If \fI\-\-dns\-ipv4\-addr\fP is provided several times, the last set value is used.
Example:
.nf
- curl --dns-ipv4-addr 10.1.2.3 https://example.com
+ curl \-\-dns\-ipv4\-addr 10.1.2.3 https://example.com
.fi
-See also \fI--dns-interface\fP and \fI--dns-ipv6-addr\fP. \fI--dns-ipv4-addr\fP requires that the underlying libcurl was built to support c-ares. Added in 7.33.0.
-.IP "\-\-dns-ipv6-addr <address>"
-(DNS) Tell curl to bind to <ip-address> when making IPv6 DNS requests, so that
-the DNS requests originate from this address. The argument should be a
+See also \fI\-\-dns\-interface\fP and \fI\-\-dns\-ipv6\-addr\fP. \fI\-\-dns\-ipv4\-addr\fP requires that the underlying libcurl was built to support c-ares.
+.IP "\-\-dns\-ipv6\-addr <address>"
+(DNS) 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.
-If --dns-ipv6-addr is provided several times, the last set value will be used.
+If \fI\-\-dns\-ipv6\-addr\fP is provided several times, the last set value is used.
Example:
.nf
- curl --dns-ipv6-addr 2a04:4e42::561 https://example.com
+ curl \-\-dns\-ipv6\-addr 2a04:4e42::561 https://example.com
.fi
-See also \fI--dns-interface\fP and \fI--dns-ipv4-addr\fP. \fI--dns-ipv6-addr\fP requires that the underlying libcurl was built to support c-ares. Added in 7.33.0.
-.IP "\-\-dns-servers <addresses>"
+See also \fI\-\-dns\-interface\fP and \fI\-\-dns\-ipv4\-addr\fP. \fI\-\-dns\-ipv6\-addr\fP requires that the underlying libcurl was built to support c-ares.
+.IP "\-\-dns\-servers <addresses>"
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 \fI:<port-number>\fP after each IP
+may also optionally be given as \fI:<port\-number>\fP after each IP
address.
-If --dns-servers is provided several times, the last set value will be used.
+If \fI\-\-dns\-servers\fP is provided several times, the last set value is used.
Example:
.nf
- curl --dns-servers 192.168.0.1,192.168.0.2 https://example.com
+ curl \-\-dns\-servers 192.168.0.1,192.168.0.2 https://example.com
.fi
-See also \fI--dns-interface\fP and \fI--dns-ipv4-addr\fP. \fI--dns-servers\fP requires that the underlying libcurl was built to support c-ares. Added in 7.33.0.
-.IP "\-\-doh-cert-status"
-Same as \-\-cert-status but used for DoH (DNS-over-HTTPS).
+See also \fI\-\-dns\-interface\fP and \fI\-\-dns\-ipv4\-addr\fP. \fI\-\-dns\-servers\fP requires that the underlying libcurl was built to support c-ares.
+.IP "\-\-doh\-cert\-status"
+Same as \fI\-\-cert\-status\fP but used for DoH (DNS\-over\-HTTPS).
-Providing --doh-cert-status multiple times has no extra effect.
-Disable it again with --no-doh-cert-status.
+Providing \fI\-\-doh\-cert\-status\fP multiple times has no extra effect.
+Disable it again with \-\-no\-doh\-cert\-status.
Example:
.nf
- curl --doh-cert-status --doh-url https://doh.example https://example.com
+ curl \-\-doh\-cert\-status \-\-doh\-url https://doh.example https://example.com
.fi
-See also \fI--doh-insecure\fP. Added in 7.76.0.
-.IP "\-\-doh-insecure"
-Same as \-\-insecure but used for DoH (DNS-over-HTTPS).
+See also \fI\-\-doh\-insecure\fP. Added in 7.76.0.
+.IP "\-\-doh\-insecure"
+Same as \fI\-k, \-\-insecure\fP but used for DoH (DNS\-over\-HTTPS).
-Providing --doh-insecure multiple times has no extra effect.
-Disable it again with --no-doh-insecure.
+Providing \fI\-\-doh\-insecure\fP multiple times has no extra effect.
+Disable it again with \-\-no\-doh\-insecure.
Example:
.nf
- curl --doh-insecure --doh-url https://doh.example https://example.com
+ curl \-\-doh\-insecure \-\-doh\-url https://doh.example https://example.com
.fi
-See also \fI--doh-url\fP. Added in 7.76.0.
-.IP "\-\-doh-url <URL>"
-Specifies which DNS-over-HTTPS (DoH) server to use to resolve hostnames,
+See also \fI\-\-doh\-url\fP. Added in 7.76.0.
+.IP "\-\-doh\-url <URL>"
+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 will apply to DoH since the
+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 and can be controlled separately via
-\-\-doh-insecure and \fI\-\-doh-cert-status\fP.
+settings are not inherited but are controlled separately via \fI\-\-doh\-insecure\fP
+and \fI\-\-doh\-cert\-status\fP.
-This option is unset if an empty string "" is used as the URL. (Added in
-7.85.0)
+This option is unset if an empty string "" is used as the URL.
+(Added in 7.85.0)
-If --doh-url is provided several times, the last set value will be used.
+If \fI\-\-doh\-url\fP is provided several times, the last set value is used.
Example:
.nf
- curl --doh-url https://doh.example https://example.com
+ curl \-\-doh\-url https://doh.example https://example.com
.fi
-See also \fI--doh-insecure\fP. Added in 7.62.0.
-.IP "\-D, \-\-dump-header <filename>"
+See also \fI\-\-doh\-insecure\fP. Added in 7.62.0.
+.IP "\-D, \-\-dump\-header <filename>"
(HTTP FTP) Write the received protocol headers to the specified file. If no headers are
-received, the use of this option will create an empty file.
+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.
-If --dump-header is provided several times, the last set value will be used.
+Having multiple transfers in one set of operations (i.e. the URLs in one
+\fI\-:, \-\-next\fP clause), appends them to the same file, separated by a blank line.
+
+If \fI\-D, \-\-dump\-header\fP is provided several times, the last set value is used.
Example:
.nf
- curl --dump-header store.txt https://example.com
+ curl \-\-dump\-header store.txt https://example.com
.fi
-See also \fI-o, --output\fP.
-.IP "\-\-egd-file <file>"
-(TLS) Deprecated option. This option is ignored by curl since 7.84.0. Prior to that
-it only had an effect on curl if built to use old versions of OpenSSL.
+See also \fI-o, \-\-output\fP.
+.IP "\-\-egd\-file <file>"
+(TLS) 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.
-If --egd-file is provided several times, the last set value will be used.
+If \fI\-\-egd\-file\fP is provided several times, the last set value is used.
Example:
.nf
- curl --egd-file /random/here https://example.com
+ curl \-\-egd\-file /random/here https://example.com
.fi
-See also \fI--random-file\fP.
+See also \fI\-\-random\-file\fP.
.IP "\-\-engine <name>"
-(TLS) 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
+(TLS) Select the OpenSSL crypto engine to use for cipher operations. Use \fI\-\-engine\fP
+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.
-If --engine is provided several times, the last set value will be used.
+If \fI\-\-engine\fP is provided several times, the last set value is used.
Example:
.nf
- curl --engine flavor https://example.com
+ curl \-\-engine flavor https://example.com
.fi
-See also \fI--ciphers\fP and \fI--curves\fP.
-.IP "\-\-etag-compare <file>"
+See also \fI\-\-ciphers\fP and \fI\-\-curves\fP.
+.IP "\-\-etag\-compare <file>"
(HTTP) 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
+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
+Use the option \fI\-\-etag\-save\fP to first save the ETag from a response, and
then use this option to compare against the saved ETag in a subsequent
request.
-If --etag-compare is provided several times, the last set value will be used.
+If \fI\-\-etag\-compare\fP is provided several times, the last set value is used.
Example:
.nf
- curl --etag-compare etag.txt https://example.com
+ curl \-\-etag\-compare etag.txt https://example.com
.fi
-See also \fI--etag-save\fP and \fI-z, --time-cond\fP. Added in 7.68.0.
-.IP "\-\-etag-save <file>"
+See also \fI\-\-etag\-save\fP and \fI-z, \-\-time\-cond\fP. Added in 7.68.0.
+.IP "\-\-etag\-save <file>"
(HTTP) 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.
-If --etag-save is provided several times, the last set value will be used.
+If \fI\-\-etag\-save\fP is provided several times, the last set value is used.
Example:
.nf
- curl --etag-save storetag.txt https://example.com
+ curl \-\-etag\-save storetag.txt https://example.com
.fi
-See also \fI--etag-compare\fP. Added in 7.68.0.
-.IP "\-\-expect100-timeout <seconds>"
-(HTTP) 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 will wait one second. This option accepts decimal values! When
-curl stops waiting, it will continue as if the response has been received.
+See also \fI\-\-etag\-compare\fP. Added in 7.68.0.
+.IP "\-\-expect100\-timeout <seconds>"
+(HTTP) 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.
-If --expect100-timeout is provided several times, the last set value will be used.
+If \fI\-\-expect100\-timeout\fP is provided several times, the last set value is used.
Example:
.nf
- curl --expect100-timeout 2.5 -T file https://example.com
+ curl \-\-expect100\-timeout 2.5 \-T file https://example.com
.fi
-See also \fI--connect-timeout\fP. Added in 7.47.0.
-.IP "\-\-fail-early"
+See also \fI\-\-connect\-timeout\fP.
+.IP "\-\-fail\-early"
Fail and exit on the first detected transfer error.
-When curl is used to do multiple transfers on the command line, it will
-attempt to operate on each given URL, one by one. By default, it will ignore
-errors if there are more URLs given and the last URL's success will determine
-the error code curl returns. So early failures will be "hidden" by subsequent
-successful transfers.
+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\(aqs success determines the error code curl
+returns. So early failures are "hidden" by subsequent successful transfers.
-Using this option, curl will instead return an error on the first transfer
-that fails, independent of the amount of URLs that are given on the command
+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 is global and does not need to be specified for each use of \fI\-:, \-\-next\fP.
-
This option does not imply \fI\-f, \-\-fail\fP, which causes transfers to fail due to the
-server's HTTP status code. You can combine the two options, however note \-\-fail
+server\(aqs HTTP status code. You can combine the two options, however note \fI\-f, \-\-fail\fP
is not global and is therefore contained by \fI\-:, \-\-next\fP.
-Providing --fail-early multiple times has no extra effect.
-Disable it again with --no-fail-early.
+This option is global and does not need to be specified for each use of --next.
+
+Providing \fI\-\-fail\-early\fP multiple times has no extra effect.
+Disable it again with \-\-no\-fail\-early.
Example:
.nf
- curl --fail-early https://example.com https://two.example
+ curl \-\-fail\-early https://example.com https://two.example
.fi
-See also \fI-f, --fail\fP and \fI--fail-with-body\fP. Added in 7.52.0.
-.IP "\-\-fail-with-body"
+See also \fI-f, \-\-fail\fP and \fI\-\-fail\-with\-body\fP. Added in 7.52.0.
+.IP "\-\-fail\-with\-body"
(HTTP) 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 will still allow curl to output and save that content but
-also to return error 22.
+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
+This is an alternative option to \fI\-f, \-\-fail\fP which makes curl fail for the same
circumstances but without saving the content.
-Providing --fail-with-body multiple times has no extra effect.
-Disable it again with --no-fail-with-body.
+Providing \fI\-\-fail\-with\-body\fP multiple times has no extra effect.
+Disable it again with \-\-no\-fail\-with\-body.
Example:
.nf
- curl --fail-with-body https://example.com
+ curl \-\-fail\-with\-body https://example.com
.fi
-See also \fI-f, --fail\fP. This option is mutually exclusive to \fI-f, --fail\fP. Added in 7.76.0.
+See also \fI-f, \-\-fail\fP and \fI\-\-fail\-early\fP. This option is mutually exclusive to \fI-f, \-\-fail\fP. Added in 7.76.0.
.IP "\-f, \-\-fail"
(HTTP) 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 will prevent curl from
+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 will slip through, especially when authentication is involved
+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).
-Providing --fail multiple times has no extra effect.
-Disable it again with --no-fail.
+Providing \fI\-f, \-\-fail\fP multiple times has no extra effect.
+Disable it again with \-\-no\-fail.
Example:
.nf
- curl --fail https://example.com
+ curl \-\-fail https://example.com
.fi
-See also \fI--fail-with-body\fP. This option is mutually exclusive to \fI--fail-with-body\fP.
-.IP "\-\-false-start"
+See also \fI\-\-fail\-with\-body\fP and \fI\-\-fail\-early\fP. This option is mutually exclusive to \fI\-\-fail\-with\-body\fP.
+.IP "\-\-false\-start"
(TLS) Tells curl to use false start during the TLS handshake. False start is a mode
-where a TLS client will start sending application data before verifying the
-server's Finished message, thus saving a round trip when performing a full
+where a TLS client starts sending application data before verifying the
+server\(aqs Finished message, thus saving a round trip when performing a full
handshake.
-This is currently only implemented in the NSS and Secure Transport (on iOS 7.0
-or later, or OS X 10.9 or later) backends.
+This is currently only implemented in the Secure Transport (on iOS 7.0 or
+later, or OS X 10.9 or later) backend.
-Providing --false-start multiple times has no extra effect.
-Disable it again with --no-false-start.
+Providing \fI\-\-false\-start\fP multiple times has no extra effect.
+Disable it again with \-\-no\-false\-start.
Example:
.nf
- curl --false-start https://example.com
+ curl \-\-false\-start https://example.com
.fi
-See also \fI--tcp-fastopen\fP. Added in 7.42.0.
-.IP "\-\-form-escape"
+See also \fI\-\-tcp\-fastopen\fP.
+.IP "\-\-form\-escape"
(HTTP) Tells curl to pass on names of multipart form fields and files using
-backslash-escaping instead of percent-encoding.
+backslash\-escaping instead of percent\-encoding.
-If --form-escape is provided several times, the last set value will be used.
+If \fI\-\-form\-escape\fP is provided several times, the last set value is used.
Example:
.nf
- curl --form-escape -F 'field\\name=curl' -F 'file=@load"this' https://example.com
+ curl \-\-form\-escape \-F \(aqfield\\name=curl\(aq \-F \(aqfile=@load"this\(aq https://example.com
.fi
-See also \fI-F, --form\fP. Added in 7.81.0.
-.IP "\-\-form-string <name=string>"
-(HTTP SMTP IMAP) 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's any possibility that the string value may accidentally trigger the
-\(aq@' or '<' features of \fI\-F, \-\-form\fP.
+See also \fI-F, \-\-form\fP. Added in 7.81.0.
+.IP "\-\-form\-string <name=string>"
+(HTTP SMTP IMAP) Similar to \fI\-F, \-\-form\fP except that the value string for the named parameter is used
+literally. Leading \(aq@\(aq and \(aq<\(aq characters, and the \(aq;type=\(aq string in
+the value have no special meaning. Use this in preference to \fI\-F, \-\-form\fP if
+there is any possibility that the string value may accidentally trigger the
+\(aq@\(aq or \(aq<\(aq features of \fI\-F, \-\-form\fP.
---form-string can be used several times in a command line
+\fI\-\-form\-string\fP can be used several times in a command line
Example:
.nf
- curl --form-string "data" https://example.com
+ curl \-\-form\-string "data" https://example.com
.fi
-See also \fI-F, --form\fP.
+See also \fI-F, \-\-form\fP.
.IP "\-F, \-\-form <name=content>"
-(HTTP SMTP IMAP) For HTTP protocol family, this lets curl emulate a filled-in form in which a
+(HTTP SMTP IMAP) 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.
+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
+This enables uploading of binary files etc. To force the \(aqcontent\(aq 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
@@ -1339,14 +1437,13 @@ 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 unfortunately not subject to buffering and will
-be effectively 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.
+possible resend. Defining a part\(aqs 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 will be the input:
+Example: send an image to an HTTP server, where \(aqprofile\(aq is the name of the
+form\-field to which the file \fBportrait.jpg\fP is the input:
.nf
curl \-F profile=@portrait.jpg https://example.com/upload.cgi
@@ -1365,7 +1462,7 @@ text field, but get the contents for it from a local file:
curl \-F "story=<hugefile.txt" https://example.com/
.fi
-You can also tell curl what Content-Type to use by using 'type=', in a manner
+You can also tell curl what Content\-Type to use by using \(aqtype=\(aq, in a manner
similar to:
.nf
@@ -1385,7 +1482,7 @@ filename=, like this:
curl \-F "file=@localfile;filename=nameinpost" example.com
.fi
-If filename/path contains ',' or ';', it must be quoted by double-quotes like:
+If filename/path contains \(aq,\(aq or \(aq;\(aq, it must be quoted by double\-quotes like:
.nf
curl \-F "file=@\\"local,file\\";filename=\\"name;in;post\\"" example.com
@@ -1394,23 +1491,23 @@ If filename/path contains ',' or ';', it must be quoted by double-quotes like:
or
.nf
- curl \-F 'file=@"local,file";filename="name;in;post"' example.com
+ curl \-F \(aqfile=@"local,file";filename="name;in;post"\(aq example.com
.fi
-Note that if a filename/path is quoted by double-quotes, any double-quote
+Note that if a filename/path is quoted by double\-quotes, any double\-quote
or backslash within the filename must be escaped by backslash.
-Quoting must also be applied to non-file data if it contains semicolons,
+Quoting must also be applied to non\-file data if it contains semicolons,
leading/trailing spaces or leading double quotes:
.nf
- curl \-F 'colors="red; green; blue";type=text/x-myapp' example.com
+ curl \-F \(aqcolors="red; green; blue";type=text/x\-myapp\(aq example.com
.fi
You can add custom headers to the field by setting headers=, like
.nf
- curl \-F "submit=OK;headers=\\"X-submit-type: OK\\"" example.com
+ curl \-F "submit=OK;headers=\\"X\-submit\-type: OK\\"" example.com
.fi
or
@@ -1421,108 +1518,108 @@ or
The headers= keyword may appear more that once and above notes about quoting
apply. When headers are read from a file, Empty lines and lines starting
-with '#' are comments and ignored; each header can be folded by splitting
+with \(aq#\(aq are comments and ignored; each header can be folded by splitting
between two words and starting the continuation line with a space; embedded
-carriage-returns and trailing spaces are stripped.
+carriage\-returns and trailing spaces are stripped.
Here is an example of a header file contents:
.nf
# This file contain two headers.
- X-header-1: this is a header
+ X\-header\-1: this is a header
.fi
.nf
# The following header is folded.
- X-header-2: this is
+ X\-header\-2: this is
another header
.fi
To support sending multipart mail messages, the syntax is extended as follows:
.br
-\- name can be omitted: the equal sign is the first character of the argument,
+- name can be omitted: the equal sign is the first character of the argument,
.br
-\- if data starts with '(', this signals to start a new multipart: it can be
+- if data starts with \(aq(\(aq, this signals to start a new multipart: it can be
followed by a content type specification.
.br
-\- a multipart can be terminated with a '=)' argument.
+- a multipart can be terminated with a \(aq=)\(aq argument.
Example: the following command sends an SMTP mime email consisting in an
inline part in two alternative formats: plain text and HTML. It attaches a
text file:
.nf
- curl \-F '=(;type=multipart/alternative' \\
- \-F '=plain text message' \\
- \-F '= <body>HTML message</body>;type=text/html' \\
- \-F '=)' \-F '=@textfile.txt' ... smtp://example.com
+ curl \-F \(aq=(;type=multipart/alternative\(aq \\
+ \-F \(aq=plain text message\(aq \\
+ \-F \(aq= <body>HTML message</body>;type=text/html\(aq \\
+ \-F \(aq=)\(aq \-F \(aq=@textfile.txt\(aq ... smtp://example.com
.fi
Data can be encoded for transfer using encoder=. Available encodings are
\fIbinary\fP and \fI8bit\fP that do nothing else than adding the corresponding
-Content-Transfer-Encoding header, \fI7bit\fP that only rejects 8-bit characters
-with a transfer error, \fIquoted-printable\fP and \fIbase64\fP that encodes data
+Content\-Transfer\-Encoding header, \fI7bit\fP that only rejects 8\-bit characters
+with a transfer error, \fIquoted\-printable\fP and \fIbase64\fP 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
+Example: send multipart mail with a quoted\-printable text message and a
base64 attached file:
.nf
- curl \-F '=text message;encoder=quoted-printable' \\
- \-F '=@localfile;encoder=base64' ... smtp://example.com
+ curl \-F \(aq=text message;encoder=quoted\-printable\(aq \\
+ \-F \(aq=@localfile;encoder=base64\(aq ... smtp://example.com
.fi
See further examples and details in the MANUAL.
---form can be used several times in a command line
+\fI\-F, \-\-form\fP can be used several times in a command line
Example:
.nf
- curl --form "name=curl" --form "file=@loadthis" https://example.com
+ curl \-\-form "name=curl" \-\-form "file=@loadthis" https://example.com
.fi
-See also \fI-d, --data\fP, \fI--form-string\fP and \fI--form-escape\fP. This option is mutually exclusive to \fI-d, --data\fP and \fI-I, --head\fP and \fI-T, --upload-file\fP.
-.IP "\-\-ftp-account <data>"
+See also \fI-d, \-\-data\fP, \fI\-\-form\-string\fP and \fI\-\-form\-escape\fP. This option is mutually exclusive to \fI-d, \-\-data\fP and \fI-I, \-\-head\fP and \fI-T, \-\-upload\-file\fP.
+.IP "\-\-ftp\-account <data>"
(FTP) 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.
-If --ftp-account is provided several times, the last set value will be used.
+If \fI\-\-ftp\-account\fP is provided several times, the last set value is used.
Example:
.nf
- curl --ftp-account "mr.robot" ftp://example.com/
+ curl \-\-ftp\-account "mr.robot" ftp://example.com/
.fi
-See also \fI-u, --user\fP.
-.IP "\-\-ftp-alternative-to-user <command>"
+See also \fI-u, \-\-user\fP.
+.IP "\-\-ftp\-alternative\-to\-user <command>"
(FTP) 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" will tell the server to retrieve the
+When connecting to Tumbleweed\(aqs Secure Transport server over FTPS using a
+client certificate, using "SITE AUTH" tells the server to retrieve the
username from the certificate.
-If --ftp-alternative-to-user is provided several times, the last set value will be used.
+If \fI\-\-ftp\-alternative\-to\-user\fP is provided several times, the last set value is used.
Example:
.nf
- curl --ftp-alternative-to-user "U53r" ftp://example.com
+ curl \-\-ftp\-alternative\-to\-user "U53r" ftp://example.com
.fi
-See also \fI--ftp-account\fP and \fI-u, --user\fP.
-.IP "\-\-ftp-create-dirs"
+See also \fI\-\-ftp\-account\fP and \fI-u, \-\-user\fP.
+.IP "\-\-ftp\-create\-dirs"
(FTP SFTP) 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
-will instead attempt to create missing directories.
+instead attempts to create missing directories.
-Providing --ftp-create-dirs multiple times has no extra effect.
-Disable it again with --no-ftp-create-dirs.
+Providing \fI\-\-ftp\-create\-dirs\fP multiple times has no extra effect.
+Disable it again with \-\-no\-ftp\-create\-dirs.
Example:
.nf
- curl --ftp-create-dirs -T file ftp://example.com/remote/path/file
+ curl \-\-ftp\-create\-dirs \-T file ftp://example.com/remote/path/file
.fi
-See also \fI--create-dirs\fP.
-.IP "\-\-ftp-method <method>"
+See also \fI\-\-create\-dirs\fP.
+.IP "\-\-ftp\-method <method>"
(FTP) 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
@@ -1531,497 +1628,564 @@ 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 will do SIZE, RETR, STOR etc and give a full
+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
\(dqnormally" (like in the multicwd case). This is somewhat more standards
-compliant than 'nocwd' but without the full penalty of 'multicwd'.
+compliant than \(aqnocwd\(aq but without the full penalty of \(aqmulticwd\(aq.
.RE
+.IP
-If --ftp-method is provided several times, the last set value will be used.
+If \fI\-\-ftp\-method\fP is provided several times, the last set value is used.
Examples:
.nf
- curl --ftp-method multicwd ftp://example.com/dir1/dir2/file
- curl --ftp-method nocwd ftp://example.com/dir1/dir2/file
- curl --ftp-method singlecwd ftp://example.com/dir1/dir2/file
+ curl \-\-ftp\-method multicwd ftp://example.com/dir1/dir2/file
+ curl \-\-ftp\-method nocwd ftp://example.com/dir1/dir2/file
+ curl \-\-ftp\-method singlecwd ftp://example.com/dir1/dir2/file
.fi
-See also \fI-l, --list-only\fP.
-.IP "\-\-ftp-pasv"
+See also \fI-l, \-\-list\-only\fP.
+.IP "\-\-ftp\-pasv"
(FTP) 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
+behavior, but using this option can be used to override a previous \fI\-P, \-\-ftp\-port\fP
option.
Reversing an enforced passive really is not doable but you must then instead
-enforce the correct \-\-ftp-port again.
+enforce the correct \fI\-P, \-\-ftp\-port\fP again.
-Passive mode means that curl will try the EPSV command first and then PASV,
-unless \-\-disable-epsv is used.
+Passive mode means that curl tries the EPSV command first and then PASV,
+unless \fI\-\-disable\-epsv\fP is used.
-Providing --ftp-pasv multiple times has no extra effect.
-Disable it again with --no-ftp-pasv.
+Providing \fI\-\-ftp\-pasv\fP multiple times has no extra effect.
+Disable it again with \-\-no\-ftp\-pasv.
Example:
.nf
- curl --ftp-pasv ftp://example.com/
+ curl \-\-ftp\-pasv ftp://example.com/
.fi
-See also \fI--disable-epsv\fP.
-.IP "\-P, \-\-ftp-port <address>"
+See also \fI\-\-disable\-epsv\fP.
+.IP "\-P, \-\-ftp\-port <address>"
(FTP) 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 the client\(aqs specified address and port, while passive mode asks the server
to setup an IP address and port for it to connect to. <address> should be one
of:
.RS
.IP interface
-e.g. "eth0" to specify which interface's IP address you want to use (Unix only)
+e.g. "eth0" to specify which interface\(aqs 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 "-"
+.IP "\-"
make curl pick the same IP address that is already used for the control
connection
.RE
+.IP
-Disable the use of PORT with \fI\-\-ftp-pasv\fP. Disable the attempt to use the EPRT
-command instead of PORT by using \fI\-\-disable-eprt\fP. EPRT is really PORT++.
+Disable the use of PORT with \fI\-\-ftp\-pasv\fP. Disable the attempt to use the EPRT
+command instead of PORT by using \fI\-\-disable\-eprt\fP. EPRT is really PORT++.
-You can also append ":[start]-[end]\&" to the right of the address, to tell
+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.
-If --ftp-port is provided several times, the last set value will be used.
+If \fI\-P, \-\-ftp\-port\fP is provided several times, the last set value is used.
Examples:
.nf
- curl -P - ftp:/example.com
- curl -P eth0 ftp:/example.com
- curl -P 192.168.0.2 ftp:/example.com
+ curl \-P \- ftp:/example.com
+ curl \-P eth0 ftp:/example.com
+ curl \-P 192.168.0.2 ftp:/example.com
.fi
-See also \fI--ftp-pasv\fP and \fI--disable-eprt\fP.
-.IP "\-\-ftp-pret"
+See also \fI\-\-ftp\-pasv\fP and \fI\-\-disable\-eprt\fP.
+.IP "\-\-ftp\-pret"
(FTP) 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
+mainly drftpd, require this non\-standard command for directory listings as
well as up and downloads in PASV mode.
-Providing --ftp-pret multiple times has no extra effect.
-Disable it again with --no-ftp-pret.
+Providing \fI\-\-ftp\-pret\fP multiple times has no extra effect.
+Disable it again with \-\-no\-ftp\-pret.
Example:
.nf
- curl --ftp-pret ftp://example.com/
+ curl \-\-ftp\-pret ftp://example.com/
.fi
-See also \fI-P, --ftp-port\fP and \fI--ftp-pasv\fP.
-.IP "\-\-ftp-skip-pasv-ip"
-(FTP) 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
-will re-use the same IP address it already uses for the control
-connection.
+See also \fI-P, \-\-ftp\-port\fP and \fI\-\-ftp\-pasv\fP.
+.IP "\-\-ftp\-skip\-pasv\-ip"
+(FTP) Tell curl to not use the IP address the server suggests in its response to
+curl\(aqs PASV command when curl connects the data connection. Instead curl
+reuses the same IP address it already uses for the control connection.
-Since curl 7.74.0 this option is enabled by default.
+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.
-Providing --ftp-skip-pasv-ip multiple times has no extra effect.
-Disable it again with --no-ftp-skip-pasv-ip.
+Providing \fI\-\-ftp\-skip\-pasv\-ip\fP multiple times has no extra effect.
+Disable it again with \-\-no\-ftp\-skip\-pasv\-ip.
Example:
.nf
- curl --ftp-skip-pasv-ip ftp://example.com/
+ curl \-\-ftp\-skip\-pasv\-ip ftp://example.com/
.fi
-See also \fI--ftp-pasv\fP.
-.IP "\-\-ftp-ssl-ccc-mode <active/passive>"
-(FTP) Sets the CCC mode. The passive mode will not initiate the shutdown, but
-instead wait for the server to do it, and will not reply to the shutdown from
+See also \fI\-\-ftp\-pasv\fP.
+.IP "\-\-ftp\-ssl\-ccc\-mode <active/passive>"
+(FTP) 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.
-Providing --ftp-ssl-ccc-mode multiple times has no extra effect.
-Disable it again with --no-ftp-ssl-ccc-mode.
+Providing \fI\-\-ftp\-ssl\-ccc\-mode\fP multiple times has no extra effect.
+Disable it again with \-\-no\-ftp\-ssl\-ccc\-mode.
Example:
.nf
- curl --ftp-ssl-ccc-mode active --ftp-ssl-ccc ftps://example.com/
+ curl \-\-ftp\-ssl\-ccc\-mode active \-\-ftp\-ssl\-ccc ftps://example.com/
.fi
-See also \fI--ftp-ssl-ccc\fP.
-.IP "\-\-ftp-ssl-ccc"
+See also \fI\-\-ftp\-ssl\-ccc\fP.
+.IP "\-\-ftp\-ssl\-ccc"
(FTP) Use CCC (Clear Command Channel) Shuts down the SSL/TLS layer after
-authenticating. The rest of the control channel communication will be
+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.
-Providing --ftp-ssl-ccc multiple times has no extra effect.
-Disable it again with --no-ftp-ssl-ccc.
+Providing \fI\-\-ftp\-ssl\-ccc\fP multiple times has no extra effect.
+Disable it again with \-\-no\-ftp\-ssl\-ccc.
Example:
.nf
- curl --ftp-ssl-ccc ftps://example.com/
+ curl \-\-ftp\-ssl\-ccc ftps://example.com/
.fi
-See also \fI--ssl\fP and \fI--ftp-ssl-ccc-mode\fP.
-.IP "\-\-ftp-ssl-control"
+See also \fI\-\-ssl\fP and \fI\-\-ftp\-ssl\-ccc\-mode\fP.
+.IP "\-\-ftp\-ssl\-control"
(FTP) Require SSL/TLS for the FTP login, clear for transfer. Allows secure
-authentication, but non-encrypted data transfers for efficiency. Fails the
+authentication, but non\-encrypted data transfers for efficiency. Fails the
transfer if the server does not support SSL/TLS.
-Providing --ftp-ssl-control multiple times has no extra effect.
-Disable it again with --no-ftp-ssl-control.
+Providing \fI\-\-ftp\-ssl\-control\fP multiple times has no extra effect.
+Disable it again with \-\-no\-ftp\-ssl\-control.
Example:
.nf
- curl --ftp-ssl-control ftp://example.com
+ curl \-\-ftp\-ssl\-control ftp://example.com
.fi
-See also \fI--ssl\fP.
+See also \fI\-\-ssl\fP.
.IP "\-G, \-\-get"
-When used, this option will make all data specified with \fI\-d, \-\-data\fP, \-\-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 will be appended to the URL
-with a '?' separator.
+When used, this option makes all data specified with \fI\-d, \-\-data\fP, \fI\-\-data\-binary\fP
+or \fI\-\-data\-urlencode\fP 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 \(aq?\(aq separator.
-If used in combination with \fI\-I, \-\-head\fP, the POST data will instead be appended to
-the URL with a HEAD request.
+If used in combination with \fI\-I, \-\-head\fP, the POST data is instead appended to the
+URL with a HEAD request.
-Providing --get multiple times has no extra effect.
-Disable it again with --no-get.
+Providing \fI\-G, \-\-get\fP multiple times has no extra effect.
+Disable it again with \-\-no\-get.
Examples:
.nf
- curl --get https://example.com
- curl --get -d "tool=curl" -d "age=old" https://example.com
- curl --get -I -d "tool=curl" https://example.com
+ curl \-\-get https://example.com
+ curl \-\-get \-d "tool=curl" \-d "age=old" https://example.com
+ curl \-\-get \-I \-d "tool=curl" https://example.com
.fi
-See also \fI-d, --data\fP and \fI-X, --request\fP.
+See also \fI-d, \-\-data\fP and \fI-X, \-\-request\fP.
.IP "\-g, \-\-globoff"
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.
-Providing --globoff multiple times has no extra effect.
-Disable it again with --no-globoff.
+Providing \fI\-g, \-\-globoff\fP multiple times has no extra effect.
+Disable it again with \-\-no\-globoff.
Example:
.nf
- curl -g "https://example.com/{[]}}}}"
+ curl \-g "https://example.com/{[]}}}}"
.fi
-See also \fI-K, --config\fP and \fI-q, --disable\fP.
-.IP "\-\-happy-eyeballs-timeout-ms <milliseconds>"
+See also \fI-K, \-\-config\fP and \fI-q, \-\-disable\fP.
+.IP "\-\-happy\-eyeballs\-timeout\-ms <milliseconds>"
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
+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
-\(dqIt is RECOMMENDED that connection attempts be paced 150-250 ms apart to
+\(dqIt 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.
-If --happy-eyeballs-timeout-ms is provided several times, the last set value will be used.
+If \fI\-\-happy\-eyeballs\-timeout\-ms\fP is provided several times, the last set value is used.
+
+Example:
+.nf
+ curl \-\-happy\-eyeballs\-timeout\-ms 500 https://example.com
+.fi
+
+See also \fI-m, \-\-max\-time\fP and \fI\-\-connect\-timeout\fP. Added in 7.59.0.
+.IP "\-\-haproxy\-clientip"
+(HTTP) 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 \fI\-\-haproxy\-protocol\fP 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.
+
+If \fI\-\-haproxy\-clientip\fP is provided several times, the last set value is used.
Example:
.nf
- curl --happy-eyeballs-timeout-ms 500 https://example.com
+ curl \-\-haproxy\-clientip $IP
.fi
-See also \fI-m, --max-time\fP and \fI--connect-timeout\fP. Added in 7.59.0.
-.IP "\-\-haproxy-protocol"
+See also \fI-x, \-\-proxy\fP. Added in 8.2.0.
+.IP "\-\-haproxy\-protocol"
(HTTP) 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.
+indicate the client\(aqs true IP address and port.
This option is primarily useful when sending test requests to a service that
expects this header.
-Providing --haproxy-protocol multiple times has no extra effect.
-Disable it again with --no-haproxy-protocol.
+Providing \fI\-\-haproxy\-protocol\fP multiple times has no extra effect.
+Disable it again with \-\-no\-haproxy\-protocol.
Example:
.nf
- curl --haproxy-protocol https://example.com
+ curl \-\-haproxy\-protocol https://example.com
.fi
-See also \fI-x, --proxy\fP. Added in 7.60.0.
+See also \fI-x, \-\-proxy\fP. Added in 7.60.0.
.IP "\-I, \-\-head"
-(HTTP FTP FILE) Fetch the headers only! HTTP-servers feature the command HEAD which this uses
+(HTTP FTP FILE) 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.
-Providing --head multiple times has no extra effect.
-Disable it again with --no-head.
+Providing \fI\-I, \-\-head\fP multiple times has no extra effect.
+Disable it again with \-\-no\-head.
Example:
.nf
- curl -I https://example.com
+ curl \-I https://example.com
.fi
-See also \fI-G, --get\fP, \fI-v, --verbose\fP and \fI--trace-ascii\fP.
+See also \fI-G, \-\-get\fP, \fI-v, \-\-verbose\fP and \fI\-\-trace\-ascii\fP.
.IP "\-H, \-\-header <header/@file>"
(HTTP IMAP SMTP) 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
+For an IMAP or SMTP MIME uploaded mail built with \fI\-F, \-\-form\fP 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 will be 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 will make sure that each header you add/replace is sent with the proper
-end-of-line marker, you should thus \fBnot\fP add that as a part of the header
-content: do not add newlines or carriage returns, they will only mess things
-up for you.
+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
+\(dqX\-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 \fBnot\fP 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 @- will make curl read the header file
-from stdin. Added in 7.55.0.
+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
+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
+You need \fI\-\-proxy\-header\fP 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, will make curl send the data using chunked encoding.
+Passing on a "Transfer\-Encoding: chunked" header when doing an HTTP request
+with a request body, makes curl send the data using chunked encoding.
-\fBWARNING\fP: headers set with this option will be set in all HTTP requests
-\- even after redirects are followed, like when told with \fI\-L, \-\-location\fP. 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.
+\fBWARNING\fP: headers set with this option are set in all HTTP requests \- even
+after redirects are followed, like when told with \fI\-L, \-\-location\fP. 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.
---header can be used several times in a command line
+\fI\-H, \-\-header\fP can be used several times in a command line
Examples:
.nf
- curl -H "X-First-Name: Joe" https://example.com
- curl -H "User-Agent: yes-please/2000" https://example.com
- curl -H "Host:" https://example.com
+ curl \-H "X\-First\-Name: Joe" https://example.com
+ curl \-H "User\-Agent: yes\-please/2000" https://example.com
+ curl \-H "Host:" https://example.com
+ curl \-H @headers.txt https://example.com
.fi
-See also \fI-A, --user-agent\fP and \fI-e, --referer\fP.
+See also \fI-A, \-\-user\-agent\fP and \fI-e, \-\-referer\fP.
.IP "\-h, \-\-help <category>"
-Usage help. This lists all commands of the <category>.
-If no arg was provided, curl will display the most important
-command line arguments.
-If the argument "all" was provided, curl will display all options available.
-If the argument "category" was provided, curl will display all categories and
-their meanings.
+Usage help. This lists all curl command line options within the given
+\fBcategory\fP.
-Providing --help multiple times has no extra effect.
-Disable it again with --no-help.
+If no argument is provided, curl displays only the most important command line
+arguments.
+
+For category \fBall\fP, curl displays help for all options.
+
+If \fBcategory\fP is specified, curl displays all available help categories.
Example:
.nf
- curl --help all
+ curl \-\-help all
.fi
-See also \fI-v, --verbose\fP.
+See also \fI-v, \-\-verbose\fP.
.IP "\-\-hostpubmd5 <md5>"
(SFTP SCP) Pass a string containing 32 hexadecimal digits. The string should
-be the 128 bit MD5 checksum of the remote host's public key, curl will refuse
+be the 128 bit MD5 checksum of the remote host\(aqs public key, curl refuses
the connection with the host unless the md5sums match.
-If --hostpubmd5 is provided several times, the last set value will be used.
+If \fI\-\-hostpubmd5\fP is provided several times, the last set value is used.
Example:
.nf
- curl --hostpubmd5 e5c1c49020640a5ab0f2034854c321a8 sftp://example.com/
+ curl \-\-hostpubmd5 e5c1c49020640a5ab0f2034854c321a8 sftp://example.com/
.fi
-See also \fI--hostpubsha256\fP.
+See also \fI\-\-hostpubsha256\fP.
.IP "\-\-hostpubsha256 <sha256>"
-(SFTP SCP) Pass a string containing a Base64-encoded SHA256 hash of the remote
-host's public key. Curl will refuse the connection with the host
-unless the hashes match.
+(SFTP SCP) Pass a string containing a Base64\-encoded SHA256 hash of the remote host\(aqs
+public key. Curl refuses the connection with the host unless the hashes match.
-If --hostpubsha256 is provided several times, the last set value will be used.
+This feature requires libcurl to be built with libssh2 and does not work with
+other SSH backends.
+
+If \fI\-\-hostpubsha256\fP is provided several times, the last set value is used.
Example:
.nf
- curl --hostpubsha256 NDVkMTQxMGQ1ODdmMjQ3MjczYjAyOTY5MmRkMjVmNDQ= sftp://example.com/
+ curl \-\-hostpubsha256 NDVkMTQxMGQ1ODdmMjQ3MjczYjAyOTY5MmRkMjVmNDQ= sftp://example.com/
.fi
-See also \fI--hostpubmd5\fP. Added in 7.80.0.
+See also \fI\-\-hostpubmd5\fP. Added in 7.80.0.
.IP "\-\-hsts <file name>"
(HTTPS) This option enables HSTS for the transfer. If the file name points to an
-existing HSTS cache file, that will be used. After a completed transfer, the
-cache will be saved to the file name again if it has been modified.
+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 will load contents from all the
-files but the last one will be used for saving.
+If this option is used several times, curl loads contents from all the
+files but the last one is used for saving.
---hsts can be used several times in a command line
+\fI\-\-hsts\fP can be used several times in a command line
Example:
.nf
- curl --hsts cache.txt https://example.com
+ curl \-\-hsts cache.txt https://example.com
.fi
-See also \fI--proto\fP. Added in 7.74.0.
+See also \fI\-\-proto\fP. Added in 7.74.0.
.IP "\-\-http0.9"
(HTTP) Tells curl to be fine with HTTP version 0.9 response.
-HTTP/0.9 is a completely headerless response and therefore you can also
-connect with this to non-HTTP servers and still get a response since curl will
-simply transparently downgrade \- if allowed.
+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.
-Since curl 7.66.0, HTTP/0.9 is disabled by default.
+HTTP/0.9 is disabled by default (added in 7.66.0)
-Providing --http0.9 multiple times has no extra effect.
-Disable it again with --no-http0.9.
+Providing \fI\-\-http0.9\fP multiple times has no extra effect.
+Disable it again with \-\-no\-http0.9.
Example:
.nf
- curl --http0.9 https://example.com
+ curl \-\-http0.9 https://example.com
.fi
-See also \fI--http1.1\fP, \fI--http2\fP and \fI--http3\fP. Added in 7.64.0.
+See also \fI\-\-http1.1\fP, \fI\-\-http2\fP and \fI\-\-http3\fP. Added in 7.64.0.
.IP "\-0, \-\-http1.0"
(HTTP) Tells curl to use HTTP version 1.0 instead of using its internally preferred
HTTP version.
-Providing --http1.0 multiple times has no extra effect.
+Providing \fI\-0, \-\-http1.0\fP multiple times has no extra effect.
Example:
.nf
- curl --http1.0 https://example.com
+ curl \-\-http1.0 https://example.com
.fi
-See also \fI--http0.9\fP and \fI--http1.1\fP. This option is mutually exclusive to \fI--http1.1\fP and \fI--http2\fP and \fI--http2-prior-knowledge\fP and \fI--http3\fP.
+See also \fI\-\-http0.9\fP and \fI\-\-http1.1\fP. This option is mutually exclusive to \fI\-\-http1.1\fP and \fI\-\-http2\fP and \fI\-\-http2\-prior\-knowledge\fP and \fI\-\-http3\fP.
.IP "\-\-http1.1"
(HTTP) Tells curl to use HTTP version 1.1.
-Providing --http1.1 multiple times has no extra effect.
+Providing \fI\-\-http1.1\fP multiple times has no extra effect.
Example:
.nf
- curl --http1.1 https://example.com
+ curl \-\-http1.1 https://example.com
.fi
-See also \fI-0, --http1.0\fP and \fI--http0.9\fP. This option is mutually exclusive to \fI-0, --http1.0\fP and \fI--http2\fP and \fI--http2-prior-knowledge\fP and \fI--http3\fP. Added in 7.33.0.
-.IP "\-\-http2-prior-knowledge"
-(HTTP) Tells curl to issue its non-TLS HTTP requests using HTTP/2 without HTTP/1.1
+See also \fI-0, \-\-http1.0\fP and \fI\-\-http0.9\fP. This option is mutually exclusive to \fI-0, \-\-http1.0\fP and \fI\-\-http2\fP and \fI\-\-http2\-prior\-knowledge\fP and \fI\-\-http3\fP.
+.IP "\-\-http2\-prior\-knowledge"
+(HTTP) 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 will still do HTTP/2 the standard way with negotiated
-protocol version in the TLS handshake.
+away. HTTPS requests still do HTTP/2 the standard way with negotiated protocol
+version in the TLS handshake.
-Providing --http2-prior-knowledge multiple times has no extra effect.
-Disable it again with --no-http2-prior-knowledge.
+Providing \fI\-\-http2\-prior\-knowledge\fP multiple times has no extra effect.
+Disable it again with \-\-no\-http2\-prior\-knowledge.
Example:
.nf
- curl --http2-prior-knowledge https://example.com
+ curl \-\-http2\-prior\-knowledge https://example.com
.fi
-See also \fI--http2\fP and \fI--http3\fP. \fI--http2-prior-knowledge\fP requires that the underlying libcurl was built to support HTTP/2. This option is mutually exclusive to \fI--http1.1\fP and \fI-0, --http1.0\fP and \fI--http2\fP and \fI--http3\fP. Added in 7.49.0.
+See also \fI\-\-http2\fP and \fI\-\-http3\fP. \fI\-\-http2\-prior\-knowledge\fP requires that the underlying libcurl was built to support HTTP/2. This option is mutually exclusive to \fI\-\-http1.1\fP and \fI-0, \-\-http1.0\fP and \fI\-\-http2\fP and \fI\-\-http3\fP.
.IP "\-\-http2"
(HTTP) Tells curl to use HTTP version 2.
-For HTTPS, this means curl will attempt to negotiate HTTP/2 in the TLS
-handshake. curl does this by default.
+For HTTPS, this means curl negotiates HTTP/2 in the TLS handshake. curl does
+this by default.
-For HTTP, this means curl will attempt to upgrade the request to HTTP/2 using
-the Upgrade: request header.
+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 \fI\-\-tlsv1.2\fP.
-Providing --http2 multiple times has no extra effect.
+Providing \fI\-\-http2\fP multiple times has no extra effect.
Example:
.nf
- curl --http2 https://example.com
+ curl \-\-http2 https://example.com
.fi
-See also \fI--http1.1\fP and \fI--http3\fP. \fI--http2\fP requires that the underlying libcurl was built to support HTTP/2. This option is mutually exclusive to \fI--http1.1\fP and \fI-0, --http1.0\fP and \fI--http2-prior-knowledge\fP and \fI--http3\fP. Added in 7.33.0.
+See also \fI\-\-http1.1\fP, \fI\-\-http3\fP and \fI\-\-no\-alpn\fP. \fI\-\-http2\fP requires that the underlying libcurl was built to support HTTP/2. This option is mutually exclusive to \fI\-\-http1.1\fP and \fI-0, \-\-http1.0\fP and \fI\-\-http2\-prior\-knowledge\fP and \fI\-\-http3\fP.
+.IP "\-\-http3\-only"
+(HTTP) **WARNING**: this option is experimental. Do not use in production.
+
+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 \fI\-\-http3\fP for similar
+functionality \fIwith\fP a fallback.
+
+Providing \fI\-\-http3\-only\fP multiple times has no extra effect.
+
+Example:
+.nf
+ curl \-\-http3\-only https://example.com
+.fi
+
+See also \fI\-\-http1.1\fP, \fI\-\-http2\fP and \fI\-\-http3\fP. \fI\-\-http3\-only\fP requires that the underlying libcurl was built to support HTTP/3. This option is mutually exclusive to \fI\-\-http1.1\fP and \fI-0, \-\-http1.0\fP and \fI\-\-http2\fP and \fI\-\-http2\-prior\-knowledge\fP and \fI\-\-http3\fP. Added in 7.88.0.
.IP "\-\-http3"
(HTTP) **WARNING**: this option is experimental. Do not use in production.
-Tells curl to use HTTP version 3 directly to the host and port number used in
-the URL. A normal HTTP/3 transaction will be done to a host and then get
-redirected via Alt-Svc, but this option allows a user to circumvent that when
-you know that the target speaks HTTP/3 on the given host and port.
+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 will make curl fail if a QUIC connection cannot be established, it
-cannot fall back to a lower HTTP version on its own.
+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.
-Providing --http3 multiple times has no extra effect.
+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 \fI\-\-http3\-only\fP for similar functionality \fIwithout\fP a fallback.
+
+Providing \fI\-\-http3\fP multiple times has no extra effect.
Example:
.nf
- curl --http3 https://example.com
+ curl \-\-http3 https://example.com
.fi
-See also \fI--http1.1\fP and \fI--http2\fP. \fI--http3\fP requires that the underlying libcurl was built to support HTTP/3. This option is mutually exclusive to \fI--http1.1\fP and \fI-0, --http1.0\fP and \fI--http2\fP and \fI--http2-prior-knowledge\fP. Added in 7.66.0.
-.IP "\-\-ignore-content-length"
-(FTP HTTP) For HTTP, Ignore the Content-Length header. This is particularly useful for
-servers running Apache 1.x, which will report incorrect Content-Length for
+See also \fI\-\-http1.1\fP and \fI\-\-http2\fP. \fI\-\-http3\fP requires that the underlying libcurl was built to support HTTP/3. This option is mutually exclusive to \fI\-\-http1.1\fP and \fI-0, \-\-http1.0\fP and \fI\-\-http2\fP and \fI\-\-http2\-prior\-knowledge\fP and \fI\-\-http3\-only\fP. Added in 7.66.0.
+.IP "\-\-ignore\-content\-length"
+(FTP HTTP) 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 (since 7.46.0), skip the RETR command to figure out the size before
+For FTP, this makes curl skip the SIZE command to figure out the size before
downloading a file.
This option does not work for HTTP if libcurl was built to use hyper.
-Providing --ignore-content-length multiple times has no extra effect.
-Disable it again with --no-ignore-content-length.
+Providing \fI\-\-ignore\-content\-length\fP multiple times has no extra effect.
+Disable it again with \-\-no\-ignore\-content\-length.
Example:
.nf
- curl --ignore-content-length https://example.com
+ curl \-\-ignore\-content\-length https://example.com
.fi
-See also \fI--ftp-skip-pasv-ip\fP.
+See also \fI\-\-ftp\-skip\-pasv\-ip\fP.
.IP "\-i, \-\-include"
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.
+To view the request headers, consider the \fI\-v, \-\-verbose\fP option.
+
+Prior to 7.75.0 curl did not print the headers if \fI\-f, \-\-fail\fP was used in
+combination with this option and there was error reported by server.
-Providing --include multiple times has no extra effect.
-Disable it again with --no-include.
+Providing \fI\-i, \-\-include\fP multiple times has no extra effect.
+Disable it again with \-\-no\-include.
Example:
.nf
- curl -i https://example.com
+ curl \-i https://example.com
.fi
-See also \fI-v, --verbose\fP.
+See also \fI-v, \-\-verbose\fP.
.IP "\-k, \-\-insecure"
(TLS SFTP SCP) 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
+server\(aqs 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:
@@ -2030,536 +2194,588 @@ See this online resource for further details:
.fi
For SFTP and SCP, this option makes curl skip the \fIknown_hosts\fP verification.
-\fIknown_hosts\fP is a file normally stored in the user's home directory in the
+\fIknown_hosts\fP is a file normally stored in the user\(aqs home directory in the
\(dq.ssh" subdirectory, which contains host names and their public keys.
\fBWARNING\fP: using this option makes the transfer insecure.
-Providing --insecure multiple times has no extra effect.
-Disable it again with --no-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
+\fI\-k, \-\-insecure\fP can make curl trust and use such information from malicious
+servers.
+
+Providing \fI\-k, \-\-insecure\fP multiple times has no extra effect.
+Disable it again with \-\-no\-insecure.
Example:
.nf
- curl --insecure https://example.com
+ curl \-\-insecure https://example.com
.fi
-See also \fI--proxy-insecure\fP, \fI--cacert\fP and \fI--capath\fP.
+See also \fI\-\-proxy\-insecure\fP, \fI\-\-cacert\fP and \fI\-\-capath\fP.
.IP "\-\-interface <name>"
Perform an operation using a specified interface. You can enter interface
name, IP address or host name. An example could look like:
.nf
- curl \-\-interface eth0:1 https://www.example.com/
+ curl \--interface eth0:1 https://www.example.com/
.fi
-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
+On Linux it can be used to specify a \fBVRF\fP, but the binary needs to either
+have \fBCAP_NET_RAW\fP or to be run as root. More information about Linux
+\fBVRF\fP: https://www.kernel.org/doc/Documentation/networking/vrf.txt
-If --interface is provided several times, the last set value will be used.
+If \fI\-\-interface\fP is provided several times, the last set value is used.
Example:
.nf
- curl --interface eth0 https://example.com
+ curl \-\-interface eth0 https://example.com
+.fi
+
+See also \fI\-\-dns\-interface\fP.
+.IP "\-\-ipfs\-gateway <URL>"
+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:
+
+.nf
+ curl \--ipfs\-gateway http://localhost:8080 ipfs://bafybeigagd5nmnn2iys2f3doro7ydrevyr2mzarwidgadawmamiteydbzi
.fi
-See also \fI--dns-interface\fP.
+There are many public IPFS gateways. See for example:
+
+.nf
+ https://ipfs.github.io/public\-gateway\-checker/
+.fi
+
+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
+
+If \fI\-\-ipfs\-gateway\fP is provided several times, the last set value is used.
+
+Example:
+.nf
+ curl \-\-ipfs\-gateway https://example.com ipfs://
+.fi
+
+See also \fI-h, \-\-help\fP and \fI-M, \-\-manual\fP. Added in 8.4.0.
.IP "\-4, \-\-ipv4"
-This option tells curl to use IPv4 addresses only, and not for example try
-IPv6.
+This option tells curl to use IPv4 addresses only when resolving host names,
+and not for example try IPv6.
-Providing --ipv4 multiple times has no extra effect.
-Disable it again with --no-ipv4.
+Providing \fI\-4, \-\-ipv4\fP multiple times has no extra effect.
Example:
.nf
- curl --ipv4 https://example.com
+ curl \-\-ipv4 https://example.com
.fi
-See also \fI--http1.1\fP and \fI--http2\fP. This option is mutually exclusive to \fI-6, --ipv6\fP.
+See also \fI\-\-http1.1\fP and \fI\-\-http2\fP. This option is mutually exclusive to \fI-6, \-\-ipv6\fP.
.IP "\-6, \-\-ipv6"
-This option tells curl to use IPv6 addresses only, and not for example try
-IPv4.
+This option tells curl to use IPv6 addresses only when resolving host names,
+and not for example try IPv4.
-Providing --ipv6 multiple times has no extra effect.
-Disable it again with --no-ipv6.
+Providing \fI\-6, \-\-ipv6\fP multiple times has no extra effect.
Example:
.nf
- curl --ipv6 https://example.com
+ curl \-\-ipv6 https://example.com
.fi
-See also \fI--http1.1\fP and \fI--http2\fP. This option is mutually exclusive to \fI-4, --ipv4\fP.
+See also \fI\-\-http1.1\fP and \fI\-\-http2\fP. This option is mutually exclusive to \fI-4, \-\-ipv4\fP.
.IP "\-\-json <data>"
-(HTTP) Sends the specified JSON data in a POST request to the HTTP server. \-\-json
+(HTTP) Sends the specified JSON data in a POST request to the HTTP server. \fI\-\-json\fP
works as a shortcut for passing on these three options:
.nf
- \-\-data [arg]
- \-\-header "Content-Type: application/json"
- \-\-header "Accept: application/json"
+ \--data [arg]
+ \--header "Content\-Type: application/json"
+ \--header "Accept: application/json"
.fi
There is \fI\fPno verification\fI\fP 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
-\fI\-\-json\fP @foobar and to instead read the data from stdin, use \-\-json @-.
+read the data from, or a single dash (\-) if you want curl to read the data
+from stdin. Posting data from a file named \(aqfoobar\(aq would thus be done with
+\fI\-\-json\fP @foobar and to instead read the data from stdin, use \fI\-\-json\fP @\-.
If this option is used more than once on the same command line, the additional
-data pieces will be concatenated to the previous before sending.
+data pieces are concatenated to the previous before sending.
-The headers this option sets can be overridden with \-\-header as usual.
+The headers this option sets can be overridden with \fI\-H, \-\-header\fP as usual.
---json can be used several times in a command line
+\fI\-\-json\fP can be used several times in a command line
Examples:
.nf
- curl --json '{ "drink": "coffe" }' https://example.com
- curl --json '{ "drink":' --json ' "coffe" }' https://example.com
- curl --json @prepared https://example.com
- curl --json @- https://example.com < json.txt
+ curl \-\-json \(aq{ "drink": "coffe" }\(aq https://example.com
+ curl \-\-json \(aq{ "drink":\(aq \-\-json \(aq "coffe" }\(aq https://example.com
+ curl \-\-json @prepared https://example.com
+ curl \-\-json @\- https://example.com < json.txt
.fi
-See also \fI--data-binary\fP and \fI--data-raw\fP. This option is mutually exclusive to \fI-F, --form\fP and \fI-I, --head\fP and \fI-T, --upload-file\fP. Added in 7.82.0.
-.IP "\-j, \-\-junk-session-cookies"
-(HTTP) When curl is told to read cookies from a given file, this option will make it
-discard all "session cookies". This will basically have the same effect as if
-a new session is started. Typical browsers always discard session cookies when
-they are closed down.
+See also \fI\-\-data\-binary\fP and \fI\-\-data\-raw\fP. This option is mutually exclusive to \fI-F, \-\-form\fP and \fI-I, \-\-head\fP and \fI-T, \-\-upload\-file\fP. Added in 7.82.0.
+.IP "\-j, \-\-junk\-session\-cookies"
+(HTTP) 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.
-Providing --junk-session-cookies multiple times has no extra effect.
-Disable it again with --no-junk-session-cookies.
+Providing \fI\-j, \-\-junk\-session\-cookies\fP multiple times has no extra effect.
+Disable it again with \-\-no\-junk\-session\-cookies.
Example:
.nf
- curl --junk-session-cookies -b cookies.txt https://example.com
+ curl \-\-junk\-session\-cookies \-b cookies.txt https://example.com
.fi
-See also \fI-b, --cookie\fP and \fI-c, --cookie-jar\fP.
-.IP "\-\-keepalive-time <seconds>"
+See also \fI-b, \-\-cookie\fP and \fI-c, \-\-cookie\-jar\fP.
+.IP "\-\-keepalive\-time <seconds>"
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).
+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.
+effect if \fI\-\-no\-keepalive\fP is used.
If unspecified, the option defaults to 60 seconds.
-If --keepalive-time is provided several times, the last set value will be used.
+If \fI\-\-keepalive\-time\fP is provided several times, the last set value is used.
Example:
.nf
- curl --keepalive-time 20 https://example.com
+ curl \-\-keepalive\-time 20 https://example.com
.fi
-See also \fI--no-keepalive\fP and \fI-m, --max-time\fP.
-.IP "\-\-key-type <type>"
-(TLS) Private key file type. Specify which type your \-\-key provided private key
+See also \fI\-\-no\-keepalive\fP and \fI-m, \-\-max\-time\fP.
+.IP "\-\-key\-type <type>"
+(TLS) Private key file type. Specify which type your \fI\-\-key\fP provided private key
is. DER, PEM, and ENG are supported. If not specified, PEM is assumed.
-If --key-type is provided several times, the last set value will be used.
+If \fI\-\-key\-type\fP is provided several times, the last set value is used.
Example:
.nf
- curl --key-type DER --key here https://example.com
+ curl \-\-key\-type DER \-\-key here https://example.com
.fi
-See also \fI--key\fP.
+See also \fI\-\-key\fP.
.IP "\-\-key <key>"
(TLS SSH) 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:
-\(aq~/.ssh/id_rsa', '~/.ssh/id_dsa', './id_rsa', './id_dsa'.
+\(aq~/.ssh/id_rsa\(aq, \(aq~/.ssh/id_dsa\(aq, \(aq./id_rsa\(aq, \(aq./id_dsa\(aq.
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:" will be interpreted as a
-PKCS#11 URI. If a PKCS#11 URI is provided, then the \-\-engine option will be set
-as "pkcs11" if none was provided and the \-\-key-type option will be set as
-\(dqENG" if none was provided.
+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 \fI\-\-engine\fP option is set as
+\(dqpkcs11" if none was provided and the \fI\-\-key\-type\fP 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.
-If --key is provided several times, the last set value will be used.
+If \fI\-\-key\fP is provided several times, the last set value is used.
Example:
.nf
- curl --cert certificate --key here https://example.com
+ curl \-\-cert certificate \-\-key here https://example.com
.fi
-See also \fI--key-type\fP and \fI-E, --cert\fP.
+See also \fI\-\-key\-type\fP and \fI-E, \-\-cert\fP.
.IP "\-\-krb <level>"
(FTP) 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' will instead be used.
+be one of \(aqclear\(aq, \(aqsafe\(aq, \(aqconfidential\(aq, or \(aqprivate\(aq. Should you use a
+level that is not one of these, \(aqprivate\(aq is used.
-If --krb is provided several times, the last set value will be used.
+If \fI\-\-krb\fP is provided several times, the last set value is used.
Example:
.nf
- curl --krb clear ftp://example.com/
+ curl \-\-krb clear ftp://example.com/
.fi
-See also \fI--delegation\fP and \fI--ssl\fP. \fI--krb\fP requires that the underlying libcurl was built to support Kerberos.
+See also \fI\-\-delegation\fP and \fI\-\-ssl\fP. \fI\-\-krb\fP requires that the underlying libcurl was built to support Kerberos.
.IP "\-\-libcurl <file>"
-Append this option to any ordinary curl command line, and you will get
-libcurl-using C source code written to the file that does the equivalent
-of what your command-line operation does!
+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!
-This option is global and does not need to be specified for each use of
-\fI\-:, \-\-next\fP.
+This option is global and does not need to be specified for each use of --next.
-If --libcurl is provided several times, the last set value will be used.
+If \fI\-\-libcurl\fP is provided several times, the last set value is used.
Example:
.nf
- curl --libcurl client.c https://example.com
+ curl \-\-libcurl client.c https://example.com
.fi
-See also \fI-v, --verbose\fP.
-.IP "\-\-limit-rate <speed>"
+See also \fI-v, \-\-verbose\fP.
+.IP "\-\-limit\-rate <speed>"
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' will count the number as kilobytes, 'm' or 'M' makes it
-megabytes, while 'g' or 'G' makes it gigabytes. The suffixes (k, M, G, T, P)
+Appending \(aqk\(aq or \(aqK\(aq counts the number as kilobytes, \(aqm\(aq or \(aqM\(aq makes it
+megabytes, while \(aqg\(aq or \(aqG\(aq 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 will take precedence and
-might cripple the rate-limiting slightly, to help keeping the speed-limit
+If you also use the \fI\-Y, \-\-speed\-limit\fP option, that option takes precedence and
+might cripple the rate\-limiting slightly, to help keeping the speed\-limit
logic working.
-If --limit-rate is provided several times, the last set value will be used.
+If \fI\-\-limit\-rate\fP is provided several times, the last set value is used.
Examples:
.nf
- curl --limit-rate 100K https://example.com
- curl --limit-rate 1000 https://example.com
- curl --limit-rate 10M https://example.com
+ curl \-\-limit\-rate 100K https://example.com
+ curl \-\-limit\-rate 1000 https://example.com
+ curl \-\-limit\-rate 10M https://example.com
.fi
-See also \fI-Y, --speed-limit\fP and \fI-y, --speed-time\fP.
-.IP "\-l, \-\-list-only"
-(FTP POP3) (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
+See also \fI\-\-rate\fP, \fI-Y, \-\-speed\-limit\fP and \fI-y, \-\-speed\-time\fP.
+.IP "\-l, \-\-list\-only"
+(FTP POP3 SFTP) (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.
+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.
+to see if a specific message\-id exists on the server and what size it is.
Note: When combined with \fI\-X, \-\-request\fP, 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.
+command instead, so the user may use the email\(aqs unique identifier rather than
+its message\-id to make the request.
-Providing --list-only multiple times has no extra effect.
-Disable it again with --no-list-only.
+Providing \fI\-l, \-\-list\-only\fP multiple times has no extra effect.
+Disable it again with \-\-no\-list\-only.
Example:
.nf
- curl --list-only ftp://example.com/dir/
+ curl \-\-list\-only ftp://example.com/dir/
.fi
-See also \fI-Q, --quote\fP and \fI-X, --request\fP.
-.IP "\-\-local-port <num/range>"
-Set a preferred single number or range (FROM-TO) of local port numbers to use
+See also \fI-Q, \-\-quote\fP and \fI-X, \-\-request\fP.
+.IP "\-\-local\-port <num/range>"
+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
-that will be busy at times so setting this range to something too narrow might
-cause unnecessary connection setup failures.
+so setting this range to something too narrow might cause unnecessary
+connection setup failures.
-If --local-port is provided several times, the last set value will be used.
+If \fI\-\-local\-port\fP is provided several times, the last set value is used.
Example:
.nf
- curl --local-port 1000-3000 https://example.com
+ curl \-\-local\-port 1000\-3000 https://example.com
.fi
-See also \fI-g, --globoff\fP.
-.IP "\-\-location-trusted"
-(HTTP) Like \fI\-L, \-\-location\fP, but will allow 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 will send your authentication
-info (which is plaintext in the case of HTTP Basic authentication).
+See also \fI-g, \-\-globoff\fP.
+.IP "\-\-location\-trusted"
+(HTTP) Like \fI\-L, \-\-location\fP, 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).
-Providing --location-trusted multiple times has no extra effect.
-Disable it again with --no-location-trusted.
+Providing \fI\-\-location\-trusted\fP multiple times has no extra effect.
+Disable it again with \-\-no\-location\-trusted.
Example:
.nf
- curl --location-trusted -u user:password https://example.com
+ curl \-\-location\-trusted \-u user:password https://example.com
.fi
-See also \fI-u, --user\fP.
+See also \fI-u, \-\-user\fP.
.IP "\-L, \-\-location"
(HTTP) 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 will make curl redo the request on the new place. If used together with
-\-\-include or \fI\-I, \-\-head\fP, headers from all requested pages will be shown. When
-authentication is used, curl only sends its credentials to the initial
-host. If a redirect takes curl to a different host, it will not be able to
-intercept the user+password. See also \-\-location-trusted on how to change
-this. You can 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 will send the
+option makes curl redo the request on the new place. If used together with
+\fI\-i, \-\-include\fP or \fI\-I, \-\-head\fP, 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 \fI\-\-location\-trusted\fP on how to change this.
+
+Limit the amount of redirects to follow by using the \fI\-\-max\-redirs\fP 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 will re-send the following request
-using the same unmodified method.
+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: \fI\-\-post301\fP, \-\-post302 and \fI\-\-post303\fP.
+using the dedicated options for that: \fI\-\-post301\fP, \fI\-\-post302\fP and \fI\-\-post303\fP.
-The method set with \-\-request overrides the method curl would otherwise select
+The method set with \fI\-X, \-\-request\fP overrides the method curl would otherwise select
to use.
-Providing --location multiple times has no extra effect.
-Disable it again with --no-location.
+Providing \fI\-L, \-\-location\fP multiple times has no extra effect.
+Disable it again with \-\-no\-location.
Example:
.nf
- curl -L https://example.com
+ curl \-L https://example.com
.fi
-See also \fI--resolve\fP and \fI--alt-svc\fP.
-.IP "\-\-login-options <options>"
+See also \fI\-\-resolve\fP and \fI\-\-alt\-svc\fP.
+.IP "\-\-login\-options <options>"
(IMAP LDAP POP3 SMTP) 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 IETF draft draft-earhart-url-smtp-00.txt
+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.
-If --login-options is provided several times, the last set value will be used.
+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).
+
+If \fI\-\-login\-options\fP is provided several times, the last set value is used.
Example:
.nf
- curl --login-options 'AUTH=*' imap://example.com
+ curl \-\-login\-options \(aqAUTH=*\(aq imap://example.com
.fi
-See also \fI-u, --user\fP. Added in 7.34.0.
-.IP "\-\-mail-auth <address>"
-(SMTP) Specify a single address. This will be used to specify the authentication
-address (identity) of a submitted message that is being relayed to another
-server.
+See also \fI-u, \-\-user\fP.
+.IP "\-\-mail\-auth <address>"
+(SMTP) Specify a single address. This is used to specify the authentication address
+(identity) of a submitted message that is being relayed to another server.
-If --mail-auth is provided several times, the last set value will be used.
+If \fI\-\-mail\-auth\fP is provided several times, the last set value is used.
Example:
.nf
- curl --mail-auth user@example.come -T mail smtp://example.com/
+ curl \-\-mail\-auth user@example.come \-T mail smtp://example.com/
.fi
-See also \fI--mail-rcpt\fP and \fI--mail-from\fP.
-.IP "\-\-mail-from <address>"
+See also \fI\-\-mail\-rcpt\fP and \fI\-\-mail\-from\fP.
+.IP "\-\-mail\-from <address>"
(SMTP) Specify a single address that the given mail should get sent from.
-If --mail-from is provided several times, the last set value will be used.
+If \fI\-\-mail\-from\fP is provided several times, the last set value is used.
Example:
.nf
- curl --mail-from user@example.com -T mail smtp://example.com/
+ curl \-\-mail\-from user@example.com \-T mail smtp://example.com/
.fi
-See also \fI--mail-rcpt\fP and \fI--mail-auth\fP.
-.IP "\-\-mail-rcpt-allowfails"
-(SMTP) When sending data to multiple recipients, by default curl will abort SMTP
+See also \fI\-\-mail\-rcpt\fP and \fI\-\-mail\-auth\fP.
+.IP "\-\-mail\-rcpt\-allowfails"
+(SMTP) 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 will make curl ignore errors and proceed with the
+The default behavior can be changed by passing \fI\-\-mail\-rcpt\-allowfails\fP
+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
-will still abort the SMTP conversation and return the error received from to
-the last RCPT TO command.
+still aborts the SMTP conversation and returns the error received from to the
+last RCPT TO command.
-Providing --mail-rcpt-allowfails multiple times has no extra effect.
-Disable it again with --no-mail-rcpt-allowfails.
+Providing \fI\-\-mail\-rcpt\-allowfails\fP multiple times has no extra effect.
+Disable it again with \-\-no\-mail\-rcpt\-allowfails.
Example:
.nf
- curl --mail-rcpt-allowfails --mail-rcpt dest@example.com smtp://example.com
+ curl \-\-mail\-rcpt\-allowfails \-\-mail\-rcpt dest@example.com smtp://example.com
.fi
-See also \fI--mail-rcpt\fP. Added in 7.69.0.
-.IP "\-\-mail-rcpt <address>"
+See also \fI\-\-mail\-rcpt\fP. Added in 7.69.0.
+.IP "\-\-mail\-rcpt <address>"
(SMTP) 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
+When performing an address verification (\fBVRFY\fP command), the recipient should be
specified as the user name or user name and domain (as per Section 3.5 of
-RFC5321). (Added in 7.34.0)
+RFC 5321).
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)
+specified using the mailing list name, such as "Friends" or "London\-Office".
---mail-rcpt can be used several times in a command line
+
+\fI\-\-mail\-rcpt\fP can be used several times in a command line
Example:
.nf
- curl --mail-rcpt user@example.net smtp://example.com
+ curl \-\-mail\-rcpt user@example.net smtp://example.com
.fi
-See also \fI--mail-rcpt-allowfails\fP.
+See also \fI\-\-mail\-rcpt\-allowfails\fP.
.IP "\-M, \-\-manual"
Manual. Display the huge help text.
-Providing --manual multiple times has no extra effect.
-Disable it again with --no-manual.
-
Example:
.nf
- curl --manual
+ curl \-\-manual
.fi
-See also \fI-v, --verbose\fP, \fI--libcurl\fP and \fI--trace\fP.
-.IP "\-\-max-filesize <bytes>"
+See also \fI-v, \-\-verbose\fP, \fI\-\-libcurl\fP and \fI\-\-trace\fP.
+.IP "\-\-max\-filesize <bytes>"
(FTP HTTP MQTT) Specify the maximum size (in bytes) of a file to download. If the file
-requested is larger than this value, the transfer will not start and curl will
-return with exit code 63.
+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' will count the
-number as kilobytes, 'm' or 'M' makes it megabytes, while 'g' or 'G' makes it
+A size modifier may be used. For example, Appending \(aqk\(aq or \(aqK\(aq counts the
+number as kilobytes, \(aqm\(aq or \(aqM\(aq makes it megabytes, while \(aqg\(aq or \(aqG\(aq makes it
gigabytes. Examples: 200K, 3m and 1G. (Added in 7.58.0)
-\fBNOTE\fP: The file size is not always known prior to download, and for such
-files this option has no effect even if the file transfer ends up being larger
-than this given limit.
-If --max-filesize is provided several times, the last set value will be used.
+\fBNOTE\fP: 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.
+
+If \fI\-\-max\-filesize\fP is provided several times, the last set value is used.
Example:
.nf
- curl --max-filesize 100K https://example.com
+ curl \-\-max\-filesize 100K https://example.com
.fi
-See also \fI--limit-rate\fP.
-.IP "\-\-max-redirs <num>"
-(HTTP) Set maximum number of redirections to follow. When \-\-location is used, to
+See also \fI\-\-limit\-rate\fP.
+.IP "\-\-max\-redirs <num>"
+(HTTP) Set maximum number of redirections to follow. When \fI\-L, \-\-location\fP 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.
-If --max-redirs is provided several times, the last set value will be used.
+If \fI\-\-max\-redirs\fP is provided several times, the last set value is used.
Example:
.nf
- curl --max-redirs 3 --location https://example.com
+ curl \-\-max\-redirs 3 \-\-location https://example.com
.fi
-See also \fI-L, --location\fP.
-.IP "\-m, \-\-max-time <fractional seconds>"
-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. Since 7.32.0, this option accepts decimal
-values, but the actual timeout will decrease in accuracy as the specified
-timeout increases in decimal precision.
+See also \fI-L, \-\-location\fP.
+.IP "\-m, \-\-max\-time <fractional seconds>"
+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.
If you enable retrying the transfer (\fI\-\-retry\fP) then the maximum time counter is
-reset each time the transfer is retried. You can use \-\-retry-max-time to limit
+reset each time the transfer is retried. You can use \fI\-\-retry\-max\-time\fP to limit
the retry time.
-If --max-time is provided several times, the last set value will be used.
+The decimal value needs to provided using a dot (.) as decimal separator \- not
+the local version even if it might be using another separator.
+
+If \fI\-m, \-\-max\-time\fP is provided several times, the last set value is used.
Examples:
.nf
- curl --max-time 10 https://example.com
- curl --max-time 2.92 https://example.com
+ curl \-\-max\-time 10 https://example.com
+ curl \-\-max\-time 2.92 https://example.com
.fi
-See also \fI--connect-timeout\fP and \fI--retry-max-time\fP.
+See also \fI\-\-connect\-timeout\fP and \fI\-\-retry\-max\-time\fP.
.IP "\-\-metalink"
-This option was previously used to specify a metalink resource. Metalink
-support has been disabled in curl since 7.78.0 for security reasons.
+This option was previously used to specify a Metalink resource. Metalink
+support is disabled in curl for security reasons (added in 7.78.0).
-If --metalink is provided several times, the last set value will be used.
+If \fI\-\-metalink\fP is provided several times, the last set value is used.
Example:
.nf
- curl --metalink file https://example.com
+ curl \-\-metalink file https://example.com
.fi
-See also \fI-Z, --parallel\fP.
+See also \fI-Z, \-\-parallel\fP.
.IP "\-\-negotiate"
(HTTP) 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.
+This option requires a library built with GSS\-API or SSPI support. Use
+\fI\-V, \-\-version\fP 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.
+When using this option, you must also provide a fake \fI\-u, \-\-user\fP option to activate
+the authentication code properly. Sending a \(aq\-u :\(aq is enough as the user name
+and password from the \fI\-u, \-\-user\fP option are not actually used.
-If this option is used several times, only the first one is used.
-
-Providing --negotiate multiple times has no extra effect.
+Providing \fI\-\-negotiate\fP multiple times has no extra effect.
Example:
.nf
- curl --negotiate -u : https://example.com
+ curl \-\-negotiate \-u : https://example.com
.fi
-See also \fI--basic\fP, \fI--ntlm\fP, \fI--anyauth\fP and \fI--proxy-negotiate\fP.
-.IP "\-\-netrc-file <filename>"
+See also \fI\-\-basic\fP, \fI\-\-ntlm\fP, \fI\-\-anyauth\fP and \fI\-\-proxy\-negotiate\fP.
+.IP "\-\-netrc\-file <filename>"
This option is similar to \fI\-n, \-\-netrc\fP, 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 will abide by \-\-netrc-optional if specified.
+It abides by \fI\-\-netrc\-optional\fP if specified.
-If --netrc-file is provided several times, the last set value will be used.
+If \fI\-\-netrc\-file\fP is provided several times, the last set value is used.
Example:
.nf
- curl --netrc-file netrc https://example.com
+ curl \-\-netrc\-file netrc https://example.com
.fi
-See also \fI-n, --netrc\fP, \fI-u, --user\fP and \fI-K, --config\fP. This option is mutually exclusive to \fI-n, --netrc\fP.
-.IP "\-\-netrc-optional"
+See also \fI-n, \-\-netrc\fP, \fI-u, \-\-user\fP and \fI-K, \-\-config\fP. This option is mutually exclusive to \fI-n, \-\-netrc\fP.
+.IP "\-\-netrc\-optional"
Similar to \fI\-n, \-\-netrc\fP, but this option makes the .netrc usage \fBoptional\fP
-and not mandatory as the \-\-netrc option does.
+and not mandatory as the \fI\-n, \-\-netrc\fP option does.
-Providing --netrc-optional multiple times has no extra effect.
-Disable it again with --no-netrc-optional.
+Providing \fI\-\-netrc\-optional\fP multiple times has no extra effect.
+Disable it again with \-\-no\-netrc\-optional.
Example:
.nf
- curl --netrc-optional https://example.com
+ curl \-\-netrc\-optional https://example.com
.fi
-See also \fI--netrc-file\fP. This option is mutually exclusive to \fI-n, --netrc\fP.
+See also \fI\-\-netrc\-file\fP. This option is mutually exclusive to \fI-n, \-\-netrc\fP.
.IP "\-n, \-\-netrc"
-Makes curl scan the \fI.netrc\fP (\fI_netrc\fP on Windows) 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 will enable user authentication. See
-\fInetrc(5)\fP and \fIftp(1)\fP for details on the file format. Curl will 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.
+Makes curl scan the \fI.netrc\fP file in the user\(aqs home directory for login name
+and password. This is typically used for FTP on Unix. If used with HTTP, curl
+enables user authentication. See \fInetrc(5)\fP and \fIftp(1)\fP 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: \fI.netrc\fP and
+\fI_netrc\fP, preferring the former. Older versions on Windows checked for \fI_netrc\fP
+only.
A quick and simple example of how to setup a \fI.netrc\fP to allow curl to FTP to
-the machine host.domain.com with user name 'myself' and password 'secret'
+the machine host.domain.com with user name \(aqmyself\(aq and password \(aqsecret\(aq
could look similar to:
.nf
@@ -2568,246 +2784,256 @@ could look similar to:
password secret
.fi
-Providing --netrc multiple times has no extra effect.
-Disable it again with --no-netrc.
+Providing \fI\-n, \-\-netrc\fP multiple times has no extra effect.
+Disable it again with \-\-no\-netrc.
Example:
.nf
- curl --netrc https://example.com
+ curl \-\-netrc https://example.com
.fi
-See also \fI--netrc-file\fP, \fI-K, --config\fP and \fI-u, --user\fP.
+See also \fI\-\-netrc\-file\fP, \fI-K, \-\-config\fP and \fI-u, \-\-user\fP. This option is mutually exclusive to \fI\-\-netrc\-file\fP and \fI\-\-netrc\-optional\fP.
.IP "\-:, \-\-next"
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 will reset all local options and only global ones will have their
-values survive over to the operation following the \-\-next instruction. Global
-options include \fI\-v, \-\-verbose\fP, \fI\-\-trace\fP, \-\-trace-ascii and \fI\-\-fail-early\fP.
+\fI\-:, \-\-next\fP resets all local options and only global ones have their values survive
+over to the operation following the \fI\-:, \-\-next\fP instruction. Global options include
+\fI\-v, \-\-verbose\fP, \fI\-\-trace\fP, \fI\-\-trace\-ascii\fP and \fI\-\-fail\-early\fP.
For example, you can do both a GET and a POST in a single command line:
.nf
- curl www1.example.com \-\-next \-d postthis www2.example.com
+ curl www1.example.com \--next \-d postthis www2.example.com
.fi
---next can be used several times in a command line
+\fI\-:, \-\-next\fP can be used several times in a command line
Examples:
.nf
- curl https://example.com --next -d postthis www2.example.com
- curl -I https://example.com --next https://example.net/
+ curl https://example.com \-\-next \-d postthis www2.example.com
+ curl \-I https://example.com \-\-next https://example.net/
.fi
-See also \fI-Z, --parallel\fP and \fI-K, --config\fP. Added in 7.36.0.
-.IP "\-\-no-alpn"
+See also \fI-Z, \-\-parallel\fP and \fI-K, \-\-config\fP.
+.IP "\-\-no\-alpn"
(HTTPS) 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.
-Providing --no-alpn multiple times has no extra effect.
-Disable it again with --alpn.
+Note that this is the negated option name documented. You can use \--alpn to
+enable ALPN.
+
+Providing \fI\-\-no\-alpn\fP multiple times has no extra effect.
+Disable it again with \-\-alpn.
Example:
.nf
- curl --no-alpn https://example.com
+ curl \-\-no\-alpn https://example.com
.fi
-See also \fI--no-npn\fP and \fI--http2\fP. \fI--no-alpn\fP requires that the underlying libcurl was built to support TLS. Added in 7.36.0.
-.IP "\-N, \-\-no-buffer"
+See also \fI\-\-no\-npn\fP and \fI\-\-http2\fP. \fI\-\-no\-alpn\fP requires that the underlying libcurl was built to support TLS.
+.IP "\-N, \-\-no\-buffer"
Disables the buffering of the output stream. In normal work situations, curl
-will use a standard buffered output stream that will have the effect that it
-will output the data in chunks, not necessarily exactly when the data arrives.
-Using this option will disable that buffering.
+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.
-Providing --no-buffer multiple times has no extra effect.
-Disable it again with --buffer.
+Note that this is the negated option name documented. You can use \--buffer to
+enable buffering again.
+
+Providing \fI\-N, \-\-no\-buffer\fP multiple times has no extra effect.
+Disable it again with \-\-buffer.
Example:
.nf
- curl --no-buffer https://example.com
+ curl \-\-no\-buffer https://example.com
.fi
-See also \fI-#, --progress-bar\fP.
-.IP "\-\-no-clobber"
-When used in conjunction with the \fI\-o, \-\-output\fP, \fI\-J, \-\-remote-header-name\fP,
-\fI\-O, \-\-remote-name\fP, 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 will not
+See also \fI-#, \-\-progress\-bar\fP.
+.IP "\-\-no\-clobber"
+When used in conjunction with the \fI\-o, \-\-output\fP, \fI\-J, \-\-remote\-header\-name\fP,
+\fI\-O, \-\-remote\-name\fP, or \fI\-\-remote\-name\-all\fP 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 or \-J is
+-\-clobber to enforce the clobbering, even if \fI\-J, \-\-remote\-header\-name\fP is
specified.
-Providing --no-clobber multiple times has no extra effect.
-Disable it again with --clobber.
+Providing \fI\-\-no\-clobber\fP multiple times has no extra effect.
+Disable it again with \-\-clobber.
Example:
.nf
- curl --no-clobber --output local/dir/file https://example.com
+ curl \-\-no\-clobber \-\-output local/dir/file https://example.com
.fi
-See also \fI-o, --output\fP and \fI-O, --remote-name\fP. Added in 7.83.0.
-.IP "\-\-no-keepalive"
+See also \fI-o, \-\-output\fP and \fI-O, \-\-remote\-name\fP. Added in 7.83.0.
+.IP "\-\-no\-keepalive"
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.
+-\-keepalive to enforce keepalive.
-Providing --no-keepalive multiple times has no extra effect.
-Disable it again with --keepalive.
+Providing \fI\-\-no\-keepalive\fP multiple times has no extra effect.
+Disable it again with \-\-keepalive.
Example:
.nf
- curl --no-keepalive https://example.com
+ curl \-\-no\-keepalive https://example.com
.fi
-See also \fI--keepalive-time\fP.
-.IP "\-\-no-npn"
-(HTTPS) In curl 7.86.0 and later, curl never uses NPN.
+See also \fI\-\-keepalive\-time\fP.
+.IP "\-\-no\-npn"
+(HTTPS) 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.
-Providing --no-npn multiple times has no extra effect.
-Disable it again with --npn.
+Providing \fI\-\-no\-npn\fP multiple times has no extra effect.
+Disable it again with \-\-npn.
Example:
.nf
- curl --no-npn https://example.com
+ curl \-\-no\-npn https://example.com
.fi
-See also \fI--no-alpn\fP and \fI--http2\fP. \fI--no-npn\fP requires that the underlying libcurl was built to support TLS. Added in 7.36.0.
-.IP "\-\-no-progress-meter"
+See also \fI\-\-no\-alpn\fP and \fI\-\-http2\fP. \fI\-\-no\-npn\fP requires that the underlying libcurl was built to support TLS.
+.IP "\-\-no\-progress\-meter"
Option to switch off the progress meter output without muting or otherwise
-affecting warning and informational messages like \-\-silent does.
+affecting warning and informational messages like \fI\-s, \-\-silent\fP does.
Note that this is the negated option name documented. You can thus use
-\-\-progress-meter to enable the progress meter again.
+-\-progress\-meter to enable the progress meter again.
-Providing --no-progress-meter multiple times has no extra effect.
-Disable it again with --progress-meter.
+Providing \fI\-\-no\-progress\-meter\fP multiple times has no extra effect.
+Disable it again with \-\-progress\-meter.
Example:
.nf
- curl --no-progress-meter -o store https://example.com
+ curl \-\-no\-progress\-meter \-o store https://example.com
.fi
-See also \fI-v, --verbose\fP and \fI-s, --silent\fP. Added in 7.67.0.
-.IP "\-\-no-sessionid"
-(TLS) Disable curl's use of SSL session-ID caching. By default all transfers are
+See also \fI-v, \-\-verbose\fP and \fI-s, \-\-silent\fP. Added in 7.67.0.
+.IP "\-\-no\-sessionid"
+(TLS) Disable curl\(aqs 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
+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.
+-\-sessionid to enforce session\-ID caching.
-Providing --no-sessionid multiple times has no extra effect.
-Disable it again with --sessionid.
+Providing \fI\-\-no\-sessionid\fP multiple times has no extra effect.
+Disable it again with \-\-sessionid.
Example:
.nf
- curl --no-sessionid https://example.com
+ curl \-\-no\-sessionid https://example.com
.fi
-See also \fI-k, --insecure\fP.
-.IP "\-\-noproxy <no-proxy-list>"
-Comma-separated list of hosts for which not to use a proxy, if one is
+See also \fI-k, \-\-insecure\fP.
+.IP "\-\-noproxy <no\-proxy\-list>"
+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.
-Since 7.53.0, This option overrides the environment variables that disable the
-proxy ('no_proxy' and 'NO_PROXY'). If there's an environment variable
-disabling a proxy, you can set the noproxy list to "" to override it.
+This option overrides the environment variables that disable the proxy
+(\(aqno_proxy\(aq and \(aqNO_PROXY\(aq) (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
+\(dqnetwork bits" out of the address to use in the comparison. For example
+\(dq192.168.0.0/16" would match all addresses starting with "192.168".
-If --noproxy is provided several times, the last set value will be used.
+If \fI\-\-noproxy\fP is provided several times, the last set value is used.
Example:
.nf
- curl --noproxy "www.example" https://example.com
+ curl \-\-noproxy "www.example" https://example.com
.fi
-See also \fI-x, --proxy\fP.
-.IP "\-\-ntlm-wb"
-(HTTP) Enables NTLM much in the style \-\-ntlm does, but hand over the authentication
+See also \fI-x, \-\-proxy\fP.
+.IP "\-\-ntlm\-wb"
+(HTTP) Enables NTLM much in the style \fI\-\-ntlm\fP does, but hand over the authentication
to the separate binary ntlmauth application that is executed when needed.
-Providing --ntlm-wb multiple times has no extra effect.
+Providing \fI\-\-ntlm\-wb\fP multiple times has no extra effect.
Example:
.nf
- curl --ntlm-wb -u user:password https://example.com
+ curl \-\-ntlm\-wb \-u user:password https://example.com
.fi
-See also \fI--ntlm\fP and \fI--proxy-ntlm\fP.
+See also \fI\-\-ntlm\fP and \fI\-\-proxy\-ntlm\fP.
.IP "\-\-ntlm"
(HTTP) 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
+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
-\fI\-\-proxy-ntlm\fP.
+\fI\-\-proxy\-ntlm\fP.
-If this option is used several times, only the first one is used.
-
-Providing --ntlm multiple times has no extra effect.
+Providing \fI\-\-ntlm\fP multiple times has no extra effect.
Example:
.nf
- curl --ntlm -u user:password https://example.com
+ curl \-\-ntlm \-u user:password https://example.com
.fi
-See also \fI--proxy-ntlm\fP. \fI--ntlm\fP requires that the underlying libcurl was built to support TLS. This option is mutually exclusive to \fI--basic\fP and \fI--negotiate\fP and \fI--digest\fP and \fI--anyauth\fP.
-.IP "\-\-oauth2-bearer <token>"
+See also \fI\-\-proxy\-ntlm\fP. \fI\-\-ntlm\fP requires that the underlying libcurl was built to support TLS. This option is mutually exclusive to \fI\-\-basic\fP and \fI\-\-negotiate\fP and \fI\-\-digest\fP and \fI\-\-anyauth\fP.
+.IP "\-\-oauth2\-bearer <token>"
(IMAP LDAP POP3 SMTP HTTP) 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 \fI\-\-url\fP or \fI\-u, \-\-user\fP options.
The Bearer Token and user name are formatted according to RFC 6750.
-If --oauth2-bearer is provided several times, the last set value will be used.
+If \fI\-\-oauth2\-bearer\fP is provided several times, the last set value is used.
Example:
.nf
- curl --oauth2-bearer "mF_9.B5f-4.1JqM" https://example.com
+ curl \-\-oauth2\-bearer "mF_9.B5f\-4.1JqM" https://example.com
.fi
-See also \fI--basic\fP, \fI--ntlm\fP and \fI--digest\fP. Added in 7.33.0.
-.IP "\-\-output-dir <dir>"
+See also \fI\-\-basic\fP, \fI\-\-ntlm\fP and \fI\-\-digest\fP.
+.IP "\-\-output\-dir <dir>"
This option specifies the directory in which files should be stored, when
-\-\-remote-name or \-\-output are used.
+\fI\-O, \-\-remote\-name\fP or \fI\-o, \-\-output\fP are used.
The given output directory is used for all URLs and output options on the
command line, up until the first \fI\-:, \-\-next\fP.
-If the specified target directory does not exist, the operation will fail
-unless \-\-create-dirs is also used.
+If the specified target directory does not exist, the operation fails unless
+\fI\-\-create\-dirs\fP is also used.
-If --output-dir is provided several times, the last set value will be used.
+If \fI\-\-output\-dir\fP is provided several times, the last set value is used.
Example:
.nf
- curl --output-dir "tmp" -O https://example.com
+ curl \-\-output\-dir "tmp" \-O https://example.com
.fi
-See also \fI-O, --remote-name\fP and \fI-J, --remote-header-name\fP. Added in 7.73.0.
+See also \fI-O, \-\-remote\-name\fP and \fI-J, \-\-remote\-header\-name\fP. Added in 7.73.0.
.IP "\-o, \-\-output <file>"
Write output to <file> 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 <file> specifier. That variable will be replaced with the current
+multiple documents, you should quote the URL and you can use \(aq#\(aq followed by a
+number in the <file> specifier. That variable is replaced with the current
string for the URL being fetched. Like in:
.nf
@@ -2817,7 +3043,7 @@ string for the URL being fetched. Like in:
or use several variables like:
.nf
- curl "http://{site,host}.host[1-5].com" \-o "#1_#2"
+ curl "http://{site,host}.host[1\-5].example" \-o "#1_#2"
.fi
You may use this option as many times as the number of URLs you have. For
@@ -2825,7 +3051,7 @@ example, if you specify two URLs on the same command line, you can use it like
this:
.nf
- curl \-o aa example.com \-o bb example.net
+ curl \-o aa example.com \-o bb example.net
.fi
and the order of the \-o options and the URLs does not matter, just that the
@@ -2833,55 +3059,54 @@ first \-o is for the first URL and so on, so the above command line can also be
written as
.nf
- curl example.com example.net \-o aa \-o bb
+ curl example.com example.net \-o aa \-o bb
.fi
-See also the \-\-create-dirs option to create the local directories
-dynamically. Specifying the output as '-' (a single dash) will force the
-output to be done to stdout.
+See also the \fI\-\-create\-dirs\fP option to create the local directories
+dynamically. Specifying the output as \(aq\-\(aq (a single dash) passes the output to
+stdout.
To suppress response bodies, you can redirect output to /dev/null:
.nf
- curl example.com \-o /dev/null
+ curl example.com \-o /dev/null
.fi
-Or for Windows use nul:
+Or for Windows:
.nf
- curl example.com \-o nul
+ curl example.com \-o nul
.fi
---output can be used several times in a command line
+\fI\-o, \-\-output\fP can be used several times in a command line
Examples:
.nf
- curl -o file https://example.com
- curl "http://{one,two}.example.com" -o "file_#1.txt"
- curl "http://{site,host}.host[1-5].com" -o "#1_#2"
- curl -o file https://example.com -o file2 https://example.net
+ curl \-o file https://example.com
+ curl "http://{one,two}.example.com" \-o "file_#1.txt"
+ curl "http://{site,host}.host[1\-5].example" \-o "#1_#2"
+ curl \-o file https://example.com \-o file2 https://example.net
.fi
-See also \fI-O, --remote-name\fP, \fI--remote-name-all\fP and \fI-J, --remote-header-name\fP.
-.IP "\-\-parallel-immediate"
-When doing parallel transfers, this option will instruct curl that it should
+See also \fI-O, \-\-remote\-name\fP, \fI\-\-remote\-name\-all\fP and \fI-J, \-\-remote\-header\-name\fP.
+.IP "\-\-parallel\-immediate"
+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.
-This option is global and does not need to be specified for each use of
-\fI\-:, \-\-next\fP.
+This option is global and does not need to be specified for each use of --next.
-Providing --parallel-immediate multiple times has no extra effect.
-Disable it again with --no-parallel-immediate.
+Providing \fI\-\-parallel\-immediate\fP multiple times has no extra effect.
+Disable it again with \-\-no\-parallel\-immediate.
Example:
.nf
- curl --parallel-immediate -Z https://example.com -o file1 https://example.com -o file2
+ curl \-\-parallel\-immediate \-Z https://example.com \-o file1 https://example.com \-o file2
.fi
-See also \fI-Z, --parallel\fP and \fI--parallel-max\fP. Added in 7.68.0.
-.IP "\-\-parallel-max <num>"
+See also \fI-Z, \-\-parallel\fP and \fI\-\-parallel\-max\fP. Added in 7.68.0.
+.IP "\-\-parallel\-max <num>"
When asked to do parallel transfers, using \fI\-Z, \-\-parallel\fP, this option controls
the maximum amount of transfers to do simultaneously.
@@ -2890,138 +3115,137 @@ This option is global and does not need to be specified for each use of
The default is 50.
-If --parallel-max is provided several times, the last set value will be used.
+If \fI\-\-parallel\-max\fP is provided several times, the last set value is used.
Example:
.nf
- curl --parallel-max 100 -Z https://example.com ftp://example.com/
+ curl \-\-parallel\-max 100 \-Z https://example.com ftp://example.com/
.fi
-See also \fI-Z, --parallel\fP. Added in 7.66.0.
+See also \fI-Z, \-\-parallel\fP. Added in 7.66.0.
.IP "\-Z, \-\-parallel"
Makes curl perform its transfers in parallel as compared to the regular serial
manner.
-This option is global and does not need to be specified for each use of
-\fI\-:, \-\-next\fP.
+This option is global and does not need to be specified for each use of --next.
-Providing --parallel multiple times has no extra effect.
-Disable it again with --no-parallel.
+Providing \fI\-Z, \-\-parallel\fP multiple times has no extra effect.
+Disable it again with \-\-no\-parallel.
Example:
.nf
- curl --parallel https://example.com -o file1 https://example.com -o file2
+ curl \-\-parallel https://example.com \-o file1 https://example.com \-o file2
.fi
-See also \fI-:, --next\fP and \fI-v, --verbose\fP. Added in 7.66.0.
+See also \fI-:, \-\-next\fP and \fI-v, \-\-verbose\fP. Added in 7.66.0.
.IP "\-\-pass <phrase>"
(SSH TLS) Passphrase for the private key.
-If --pass is provided several times, the last set value will be used.
+If \fI\-\-pass\fP is provided several times, the last set value is used.
Example:
.nf
- curl --pass secret --key file https://example.com
+ curl \-\-pass secret \-\-key file https://example.com
.fi
-See also \fI--key\fP and \fI-u, --user\fP.
-.IP "\-\-path-as-is"
+See also \fI\-\-key\fP and \fI-u, \-\-user\fP.
+.IP "\-\-path\-as\-is"
Tell curl to not handle sequences of /../ or /./ in the given URL
-path. Normally curl will squash or merge them according to standards but with
+path. Normally curl squashes or merges them according to standards but with
this option set you tell it not to do that.
-Providing --path-as-is multiple times has no extra effect.
-Disable it again with --no-path-as-is.
+Providing \fI\-\-path\-as\-is\fP multiple times has no extra effect.
+Disable it again with \-\-no\-path\-as\-is.
Example:
.nf
- curl --path-as-is https://example.com/../../etc/passwd
+ curl \-\-path\-as\-is https://example.com/../../etc/passwd
.fi
-See also \fI--request-target\fP. Added in 7.42.0.
+See also \fI\-\-request\-target\fP.
.IP "\-\-pinnedpubkey <hashes>"
(TLS) 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
-\(aqsha256//' and separated by ';'.
+\(aqsha256//\(aq and separated by \(aq;\(aq.
When negotiating a TLS or SSL connection, the server sends a certificate
indicating its identity. A public key is extracted from this certificate and
-if it does not exactly match the public key provided to this option, curl will
-abort the connection before sending or receiving any data.
-
-PEM/DER support:
+if it does not exactly match the public key provided to this option, curl
+aborts the connection before sending or receiving any data.
-7.39.0: OpenSSL, GnuTLS and GSKit
+This option is independent of option \fI\-k, \-\-insecure\fP. If you use both options
+together then the peer is still verified by public key.
-7.43.0: NSS and wolfSSL
+PEM/DER support:
-7.47.0: mbedtls
+OpenSSL and GnuTLS, wolfSSL (added in 7.43.0), mbedTLS
+, Secure Transport macOS 10.7+/iOS 10+ (7.54.1), Schannel
+(7.58.1)
sha256 support:
-7.44.0: OpenSSL, GnuTLS, NSS and wolfSSL
-
-7.47.0: mbedtls
+OpenSSL, GnuTLS and wolfSSL, 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.
-If --pinnedpubkey is provided several times, the last set value will be used.
+If \fI\-\-pinnedpubkey\fP is provided several times, the last set value is used.
Examples:
.nf
- curl --pinnedpubkey keyfile https://example.com
- curl --pinnedpubkey 'sha256//ce118b51897f4452dc' https://example.com
+ curl \-\-pinnedpubkey keyfile https://example.com
+ curl \-\-pinnedpubkey \(aqsha256//ce118b51897f4452dc\(aq https://example.com
.fi
-See also \fI--hostpubsha256\fP. Added in 7.39.0.
+See also \fI\-\-hostpubsha256\fP.
.IP "\-\-post301"
(HTTP) 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
+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 \fI\-L, \-\-location\fP.
-Providing --post301 multiple times has no extra effect.
-Disable it again with --no-post301.
+Providing \fI\-\-post301\fP multiple times has no extra effect.
+Disable it again with \-\-no\-post301.
Example:
.nf
- curl --post301 --location -d "data" https://example.com
+ curl \-\-post301 \-\-location \-d "data" https://example.com
.fi
-See also \fI--post302\fP, \fI--post303\fP and \fI-L, --location\fP.
+See also \fI\-\-post302\fP, \fI\-\-post303\fP and \fI-L, \-\-location\fP.
.IP "\-\-post302"
(HTTP) 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
+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 \fI\-L, \-\-location\fP.
-Providing --post302 multiple times has no extra effect.
-Disable it again with --no-post302.
+Providing \fI\-\-post302\fP multiple times has no extra effect.
+Disable it again with \-\-no\-post302.
Example:
.nf
- curl --post302 --location -d "data" https://example.com
+ curl \-\-post302 \-\-location \-d "data" https://example.com
.fi
-See also \fI--post301\fP, \fI--post303\fP and \fI-L, --location\fP.
+See also \fI\-\-post301\fP, \fI\-\-post303\fP and \fI-L, \-\-location\fP.
.IP "\-\-post303"
(HTTP) 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 \fI\-L, \-\-location\fP.
-Providing --post303 multiple times has no extra effect.
-Disable it again with --no-post303.
+Providing \fI\-\-post303\fP multiple times has no extra effect.
+Disable it again with \-\-no\-post303.
Example:
.nf
- curl --post303 --location -d "data" https://example.com
+ curl \-\-post303 \-\-location \-d "data" https://example.com
.fi
-See also \fI--post302\fP, \fI--post301\fP and \fI-L, --location\fP.
+See also \fI\-\-post302\fP, \fI\-\-post301\fP and \fI-L, \-\-location\fP.
.IP "\-\-preproxy [protocol://]host[:port]"
Use the specified SOCKS proxy before connecting to an HTTP or HTTPS \fI\-x, \-\-proxy\fP. In
such a case curl first connects to the SOCKS proxy and then connects (through
@@ -3030,7 +3254,7 @@ 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 will make curl default to SOCKS4.
+specified makes curl default to SOCKS4.
If the port number is not specified in the proxy string, it is assumed to be
1080.
@@ -3039,37 +3263,36 @@ 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.
-If --preproxy is provided several times, the last set value will be used.
+If \fI\-\-preproxy\fP is provided several times, the last set value is used.
Example:
.nf
- curl --preproxy socks5://proxy.example -x http://http.example https://example.com
+ curl \-\-preproxy socks5://proxy.example \-x http://http.example https://example.com
.fi
-See also \fI-x, --proxy\fP and \fI--socks5\fP. Added in 7.52.0.
-.IP "\-#, \-\-progress-bar"
+See also \fI-x, \-\-proxy\fP and \fI\-\-socks5\fP. Added in 7.52.0.
+.IP "\-#, \-\-progress\-bar"
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
+This progress bar draws a single line of \(aq#\(aq characters across the screen and
shows a percentage if the transfer size is known. For transfers without a
-known size, there will be space ship (-=o=-) that moves back and forth but
-only while data is being transferred, with a set of flying hash sign symbols on
+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.
-This option is global and does not need to be specified for each use of
-\fI\-:, \-\-next\fP.
+This option is global and does not need to be specified for each use of --next.
-Providing --progress-bar multiple times has no extra effect.
-Disable it again with --no-progress-bar.
+Providing \fI\-#, \-\-progress\-bar\fP multiple times has no extra effect.
+Disable it again with \-\-no\-progress\-bar.
Example:
.nf
- curl -# -O https://example.com
+ curl \-# \-O https://example.com
.fi
-See also \fI--styled-output\fP.
-.IP "\-\-proto-default <protocol>"
+See also \fI\-\-styled\-output\fP.
+.IP "\-\-proto\-default <protocol>"
Tells curl to use \fIprotocol\fP for any URL missing a scheme name.
An unknown or unsupported protocol causes error
@@ -3078,43 +3301,43 @@ An unknown or unsupported protocol causes error
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.
+\fI\-\-url\fP for details.
-If --proto-default is provided several times, the last set value will be used.
+If \fI\-\-proto\-default\fP is provided several times, the last set value is used.
Example:
.nf
- curl --proto-default https ftp.example.com
+ curl \-\-proto\-default https ftp.example.com
.fi
-See also \fI--proto\fP and \fI--proto-redir\fP. Added in 7.45.0.
-.IP "\-\-proto-redir <protocols>"
+See also \fI\-\-proto\fP and \fI\-\-proto\-redir\fP.
+.IP "\-\-proto\-redir <protocols>"
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
+\fI\-\-proto\fP are not overridden by this option. See \fI\-\-proto\fP for how protocols are
represented.
Example, allow only HTTP and HTTPS on redirect:
.nf
- curl \-\-proto-redir \-all,http,https http://example.com
+ curl \--proto\-redir \-all,http,https http://example.com
.fi
-By default curl will only allow HTTP, HTTPS, FTP and FTPS on redirect (since
+By default curl only allows HTTP, HTTPS, FTP and FTPS on redirects (added in
7.65.2). Specifying \fIall\fP or \fI+all\fP enables all protocols on redirects, which
is not good for security.
-If --proto-redir is provided several times, the last set value will be used.
+If \fI\-\-proto\-redir\fP is provided several times, the last set value is used.
Example:
.nf
- curl --proto-redir =http,https https://example.com
+ curl \-\-proto\-redir =http,https https://example.com
.fi
-See also \fI--proto\fP.
+See also \fI\-\-proto\fP.
.IP "\-\-proto <protocols>"
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
-\(aqall', optionally prefixed by zero or more modifiers. Available modifiers are:
+\(aqall\(aq, optionally prefixed by zero or more modifiers. Available modifiers are:
.RS
.TP 3
.B +
@@ -3150,386 +3373,427 @@ 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.
-If --proto is provided several times, the last set value will be used.
+If \fI\-\-proto\fP is provided several times, the last set value is used.
Example:
.nf
- curl --proto =http,https,sftp https://example.com
+ curl \-\-proto =http,https,sftp https://example.com
.fi
-See also \fI--proto-redir\fP and \fI--proto-default\fP.
-.IP "\-\-proxy-anyauth"
+See also \fI\-\-proto\-redir\fP and \fI\-\-proto\-default\fP.
+.IP "\-\-proxy\-anyauth"
Tells curl to pick a suitable authentication method when communicating with
-the given HTTP proxy. This might cause an extra request/response round-trip.
+the given HTTP proxy. This might cause an extra request/response round\-trip.
-Providing --proxy-anyauth multiple times has no extra effect.
+Providing \fI\-\-proxy\-anyauth\fP multiple times has no extra effect.
Example:
.nf
- curl --proxy-anyauth --proxy-user user:passwd -x proxy https://example.com
+ curl \-\-proxy\-anyauth \-\-proxy\-user user:passwd \-x proxy https://example.com
.fi
-See also \fI-x, --proxy\fP, \fI--proxy-basic\fP and \fI--proxy-digest\fP.
-.IP "\-\-proxy-basic"
+See also \fI-x, \-\-proxy\fP, \fI\-\-proxy\-basic\fP and \fI\-\-proxy\-digest\fP.
+.IP "\-\-proxy\-basic"
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
+proxy. Use \fI\-\-basic\fP for enabling HTTP Basic with a remote host. Basic is the
default authentication method curl uses with proxies.
-Providing --proxy-basic multiple times has no extra effect.
+Providing \fI\-\-proxy\-basic\fP multiple times has no extra effect.
+
+Example:
+.nf
+ curl \-\-proxy\-basic \-\-proxy\-user user:passwd \-x proxy https://example.com
+.fi
+
+See also \fI-x, \-\-proxy\fP, \fI\-\-proxy\-anyauth\fP and \fI\-\-proxy\-digest\fP.
+.IP "\-\-proxy\-ca\-native"
+(TLS) 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\(aqs 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).
+
+Providing \fI\-\-proxy\-ca\-native\fP multiple times has no extra effect.
+Disable it again with \-\-no\-proxy\-ca\-native.
Example:
.nf
- curl --proxy-basic --proxy-user user:passwd -x proxy https://example.com
+ curl \-\-ca\-native https://example.com
.fi
-See also \fI-x, --proxy\fP, \fI--proxy-anyauth\fP and \fI--proxy-digest\fP.
-.IP "\-\-proxy-cacert <file>"
-Same as \-\-cacert but used in HTTPS proxy context.
+See also \fI\-\-cacert\fP, \fI\-\-capath\fP and \fI-k, \-\-insecure\fP. Added in 8.2.0.
+.IP "\-\-proxy\-cacert <file>"
+Same as \fI\-\-cacert\fP but used in HTTPS proxy context.
-If --proxy-cacert is provided several times, the last set value will be used.
+If \fI\-\-proxy\-cacert\fP is provided several times, the last set value is used.
Example:
.nf
- curl --proxy-cacert CA-file.txt -x https://proxy https://example.com
+ curl \-\-proxy\-cacert CA\-file.txt \-x https://proxy https://example.com
.fi
-See also \fI--proxy-capath\fP, \fI--cacert\fP, \fI--capath\fP and \fI-x, --proxy\fP. Added in 7.52.0.
-.IP "\-\-proxy-capath <dir>"
-Same as \-\-capath but used in HTTPS proxy context.
+See also \fI\-\-proxy\-capath\fP, \fI\-\-cacert\fP, \fI\-\-capath\fP and \fI-x, \-\-proxy\fP. Added in 7.52.0.
+.IP "\-\-proxy\-capath <dir>"
+Same as \fI\-\-capath\fP but used in HTTPS proxy context.
-If --proxy-capath is provided several times, the last set value will be used.
+If \fI\-\-proxy\-capath\fP is provided several times, the last set value is used.
Example:
.nf
- curl --proxy-capath /local/directory -x https://proxy https://example.com
+ curl \-\-proxy\-capath /local/directory \-x https://proxy https://example.com
.fi
-See also \fI--proxy-cacert\fP, \fI-x, --proxy\fP and \fI--capath\fP. Added in 7.52.0.
-.IP "\-\-proxy-cert-type <type>"
-Same as \-\-cert-type but used in HTTPS proxy context.
+See also \fI\-\-proxy\-cacert\fP, \fI-x, \-\-proxy\fP and \fI\-\-capath\fP. Added in 7.52.0.
+.IP "\-\-proxy\-cert\-type <type>"
+Same as \fI\-\-cert\-type\fP but used in HTTPS proxy context.
-If --proxy-cert-type is provided several times, the last set value will be used.
+If \fI\-\-proxy\-cert\-type\fP is provided several times, the last set value is used.
Example:
.nf
- curl --proxy-cert-type PEM --proxy-cert file -x https://proxy https://example.com
+ curl \-\-proxy\-cert\-type PEM \-\-proxy\-cert file \-x https://proxy https://example.com
.fi
-See also \fI--proxy-cert\fP. Added in 7.52.0.
-.IP "\-\-proxy-cert <cert[:passwd]>"
-Same as \-\-cert but used in HTTPS proxy context.
+See also \fI\-\-proxy\-cert\fP. Added in 7.52.0.
+.IP "\-\-proxy\-cert <cert[:passwd]>"
+Same as \fI\-E, \-\-cert\fP but used in HTTPS proxy context.
-If --proxy-cert is provided several times, the last set value will be used.
+If \fI\-\-proxy\-cert\fP is provided several times, the last set value is used.
Example:
.nf
- curl --proxy-cert file -x https://proxy https://example.com
+ curl \-\-proxy\-cert file \-x https://proxy https://example.com
.fi
-See also \fI--proxy-cert-type\fP. Added in 7.52.0.
-.IP "\-\-proxy-ciphers <list>"
-Same as \-\-ciphers but used in HTTPS proxy context.
+See also \fI\-\-proxy\-cert\-type\fP. Added in 7.52.0.
+.IP "\-\-proxy\-ciphers <list>"
+Same as \fI\-\-ciphers\fP 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
-If --proxy-ciphers is provided several times, the last set value will be used.
+If \fI\-\-proxy\-ciphers\fP is provided several times, the last set value is used.
Example:
.nf
- curl --proxy-ciphers ECDHE-ECDSA-AES256-CCM8 -x https://proxy https://example.com
+ curl \-\-proxy\-ciphers ECDHE\-ECDSA\-AES256\-CCM8 \-x https://proxy https://example.com
.fi
-See also \fI--ciphers\fP, \fI--curves\fP and \fI-x, --proxy\fP. Added in 7.52.0.
-.IP "\-\-proxy-crlfile <file>"
-Same as \-\-crlfile but used in HTTPS proxy context.
+See also \fI\-\-ciphers\fP, \fI\-\-curves\fP and \fI-x, \-\-proxy\fP. Added in 7.52.0.
+.IP "\-\-proxy\-crlfile <file>"
+Same as \fI\-\-crlfile\fP but used in HTTPS proxy context.
-If --proxy-crlfile is provided several times, the last set value will be used.
+If \fI\-\-proxy\-crlfile\fP is provided several times, the last set value is used.
Example:
.nf
- curl --proxy-crlfile rejects.txt -x https://proxy https://example.com
+ curl \-\-proxy\-crlfile rejects.txt \-x https://proxy https://example.com
.fi
-See also \fI--crlfile\fP and \fI-x, --proxy\fP. Added in 7.52.0.
-.IP "\-\-proxy-digest"
+See also \fI\-\-crlfile\fP and \fI-x, \-\-proxy\fP. Added in 7.52.0.
+.IP "\-\-proxy\-digest"
Tells curl to use HTTP Digest authentication when communicating with the given
-proxy. Use \-\-digest for enabling HTTP Digest with a remote host.
+proxy. Use \fI\-\-digest\fP for enabling HTTP Digest with a remote host.
-Providing --proxy-digest multiple times has no extra effect.
+Providing \fI\-\-proxy\-digest\fP multiple times has no extra effect.
Example:
.nf
- curl --proxy-digest --proxy-user user:passwd -x proxy https://example.com
+ curl \-\-proxy\-digest \-\-proxy\-user user:passwd \-x proxy https://example.com
.fi
-See also \fI-x, --proxy\fP, \fI--proxy-anyauth\fP and \fI--proxy-basic\fP.
-.IP "\-\-proxy-header <header/@file>"
+See also \fI-x, \-\-proxy\fP, \fI\-\-proxy\-anyauth\fP and \fI\-\-proxy\-basic\fP.
+.IP "\-\-proxy\-header <header/@file>"
(HTTP) 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
+specify any number of extra headers. This is the equivalent option to \fI\-H, \-\-header\fP
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 will make sure that each header you add/replace is sent with the proper
-end-of-line marker, you should thus \fBnot\fP add that as a part of the header
-content: do not add newlines or carriage returns, they will only mess things
-up for you.
+curl makes sure that each header you add/replace is sent with the proper
+end\-of\-line marker, you should thus \fBnot\fP 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 will not be included in requests that curl
-knows will not be sent to a proxy.
+Headers specified with this option are not included in requests that curl
+knows are not be sent to a proxy.
-Starting in 7.55.0, this option can take an argument in @filename style, which
-then adds a header for each line in the input file. Using @- will make curl
-read the header file from stdin.
+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.
---proxy-header can be used several times in a command line
+\fI\-\-proxy\-header\fP can be used several times in a command line
Examples:
.nf
- curl --proxy-header "X-First-Name: Joe" -x http://proxy https://example.com
- curl --proxy-header "User-Agent: surprise" -x http://proxy https://example.com
- curl --proxy-header "Host:" -x http://proxy https://example.com
+ curl \-\-proxy\-header "X\-First\-Name: Joe" \-x http://proxy https://example.com
+ curl \-\-proxy\-header "User\-Agent: surprise" \-x http://proxy https://example.com
+ curl \-\-proxy\-header "Host:" \-x http://proxy https://example.com
.fi
-See also \fI-x, --proxy\fP. Added in 7.37.0.
-.IP "\-\-proxy-insecure"
-Same as \-\-insecure but used in HTTPS proxy context.
+See also \fI-x, \-\-proxy\fP.
+.IP "\-\-proxy\-http2"
+(HTTP) 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.
-Providing --proxy-insecure multiple times has no extra effect.
-Disable it again with --no-proxy-insecure.
+Providing \fI\-\-proxy\-http2\fP multiple times has no extra effect.
+Disable it again with \-\-no\-proxy\-http2.
Example:
.nf
- curl --proxy-insecure -x https://proxy https://example.com
+ curl \-\-proxy\-http2 \-x proxy https://example.com
.fi
-See also \fI-x, --proxy\fP and \fI-k, --insecure\fP. Added in 7.52.0.
-.IP "\-\-proxy-key-type <type>"
-Same as \-\-key-type but used in HTTPS proxy context.
+See also \fI-x, \-\-proxy\fP. \fI\-\-proxy\-http2\fP requires that the underlying libcurl was built to support HTTP/2. Added in 8.1.0.
+.IP "\-\-proxy\-insecure"
+Same as \fI\-k, \-\-insecure\fP but used in HTTPS proxy context.
-If --proxy-key-type is provided several times, the last set value will be used.
+Providing \fI\-\-proxy\-insecure\fP multiple times has no extra effect.
+Disable it again with \-\-no\-proxy\-insecure.
Example:
.nf
- curl --proxy-key-type DER --proxy-key here -x https://proxy https://example.com
+ curl \-\-proxy\-insecure \-x https://proxy https://example.com
.fi
-See also \fI--proxy-key\fP and \fI-x, --proxy\fP. Added in 7.52.0.
-.IP "\-\-proxy-key <key>"
-Same as \-\-key but used in HTTPS proxy context.
+See also \fI-x, \-\-proxy\fP and \fI-k, \-\-insecure\fP. Added in 7.52.0.
+.IP "\-\-proxy\-key\-type <type>"
+Same as \fI\-\-key\-type\fP but used in HTTPS proxy context.
-If --proxy-key is provided several times, the last set value will be used.
+If \fI\-\-proxy\-key\-type\fP is provided several times, the last set value is used.
Example:
.nf
- curl --proxy-key here -x https://proxy https://example.com
+ curl \-\-proxy\-key\-type DER \-\-proxy\-key here \-x https://proxy https://example.com
.fi
-See also \fI--proxy-key-type\fP and \fI-x, --proxy\fP. Added in 7.52.0.
-.IP "\-\-proxy-negotiate"
+See also \fI\-\-proxy\-key\fP and \fI-x, \-\-proxy\fP. Added in 7.52.0.
+.IP "\-\-proxy\-key <key>"
+Same as \fI\-\-key\fP but used in HTTPS proxy context.
+
+If \fI\-\-proxy\-key\fP is provided several times, the last set value is used.
+
+Example:
+.nf
+ curl \-\-proxy\-key here \-x https://proxy https://example.com
+.fi
+
+See also \fI\-\-proxy\-key\-type\fP and \fI-x, \-\-proxy\fP. Added in 7.52.0.
+.IP "\-\-proxy\-negotiate"
Tells curl to use HTTP Negotiate (SPNEGO) authentication when communicating
-with the given proxy. Use \-\-negotiate for enabling HTTP Negotiate (SPNEGO)
+with the given proxy. Use \fI\-\-negotiate\fP for enabling HTTP Negotiate (SPNEGO)
with a remote host.
-Providing --proxy-negotiate multiple times has no extra effect.
+Providing \fI\-\-proxy\-negotiate\fP multiple times has no extra effect.
Example:
.nf
- curl --proxy-negotiate --proxy-user user:passwd -x proxy https://example.com
+ curl \-\-proxy\-negotiate \-\-proxy\-user user:passwd \-x proxy https://example.com
.fi
-See also \fI--proxy-anyauth\fP and \fI--proxy-basic\fP.
-.IP "\-\-proxy-ntlm"
+See also \fI\-\-proxy\-anyauth\fP and \fI\-\-proxy\-basic\fP.
+.IP "\-\-proxy\-ntlm"
Tells curl to use HTTP NTLM authentication when communicating with the given
-proxy. Use \-\-ntlm for enabling NTLM with a remote host.
+proxy. Use \fI\-\-ntlm\fP for enabling NTLM with a remote host.
-Providing --proxy-ntlm multiple times has no extra effect.
+Providing \fI\-\-proxy\-ntlm\fP multiple times has no extra effect.
Example:
.nf
- curl --proxy-ntlm --proxy-user user:passwd -x http://proxy https://example.com
+ curl \-\-proxy\-ntlm \-\-proxy\-user user:passwd \-x http://proxy https://example.com
.fi
-See also \fI--proxy-negotiate\fP and \fI--proxy-anyauth\fP.
-.IP "\-\-proxy-pass <phrase>"
-Same as \-\-pass but used in HTTPS proxy context.
+See also \fI\-\-proxy\-negotiate\fP and \fI\-\-proxy\-anyauth\fP.
+.IP "\-\-proxy\-pass <phrase>"
+Same as \fI\-\-pass\fP but used in HTTPS proxy context.
-If --proxy-pass is provided several times, the last set value will be used.
+If \fI\-\-proxy\-pass\fP is provided several times, the last set value is used.
Example:
.nf
- curl --proxy-pass secret --proxy-key here -x https://proxy https://example.com
+ curl \-\-proxy\-pass secret \-\-proxy\-key here \-x https://proxy https://example.com
.fi
-See also \fI-x, --proxy\fP and \fI--proxy-key\fP. Added in 7.52.0.
-.IP "\-\-proxy-pinnedpubkey <hashes>"
+See also \fI-x, \-\-proxy\fP and \fI\-\-proxy\-key\fP. Added in 7.52.0.
+.IP "\-\-proxy\-pinnedpubkey <hashes>"
(TLS) 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
-\(aqsha256//' and separated by ';'.
+\(aqsha256//\(aq and separated by \(aq;\(aq.
When negotiating a TLS or SSL connection, the server sends a certificate
indicating its identity. A public key is extracted from this certificate and
-if it does not exactly match the public key provided to this option, curl will
-abort the connection before sending or receiving any data.
+if it does not exactly match the public key provided to this option, curl
+aborts the connection before sending or receiving any data.
-If --proxy-pinnedpubkey is provided several times, the last set value will be used.
+If \fI\-\-proxy\-pinnedpubkey\fP is provided several times, the last set value is used.
Examples:
.nf
- curl --proxy-pinnedpubkey keyfile https://example.com
- curl --proxy-pinnedpubkey 'sha256//ce118b51897f4452dc' https://example.com
+ curl \-\-proxy\-pinnedpubkey keyfile https://example.com
+ curl \-\-proxy\-pinnedpubkey \(aqsha256//ce118b51897f4452dc\(aq https://example.com
.fi
-See also \fI--pinnedpubkey\fP and \fI-x, --proxy\fP. Added in 7.59.0.
-.IP "\-\-proxy-service-name <name>"
+See also \fI\-\-pinnedpubkey\fP and \fI-x, \-\-proxy\fP. Added in 7.59.0.
+.IP "\-\-proxy\-service\-name <name>"
This option allows you to change the service name for proxy negotiation.
-If --proxy-service-name is provided several times, the last set value will be used.
+If \fI\-\-proxy\-service\-name\fP is provided several times, the last set value is used.
Example:
.nf
- curl --proxy-service-name "shrubbery" -x proxy https://example.com
+ curl \-\-proxy\-service\-name "shrubbery" \-x proxy https://example.com
.fi
-See also \fI--service-name\fP and \fI-x, --proxy\fP. Added in 7.43.0.
-.IP "\-\-proxy-ssl-allow-beast"
-Same as \-\-ssl-allow-beast but used in HTTPS proxy context.
+See also \fI\-\-service\-name\fP and \fI-x, \-\-proxy\fP.
+.IP "\-\-proxy\-ssl\-allow\-beast"
+Same as \fI\-\-ssl\-allow\-beast\fP but used in HTTPS proxy context.
-Providing --proxy-ssl-allow-beast multiple times has no extra effect.
-Disable it again with --no-proxy-ssl-allow-beast.
+Providing \fI\-\-proxy\-ssl\-allow\-beast\fP multiple times has no extra effect.
+Disable it again with \-\-no\-proxy\-ssl\-allow\-beast.
Example:
.nf
- curl --proxy-ssl-allow-beast -x https://proxy https://example.com
+ curl \-\-proxy\-ssl\-allow\-beast \-x https://proxy https://example.com
.fi
-See also \fI--ssl-allow-beast\fP and \fI-x, --proxy\fP. Added in 7.52.0.
-.IP "\-\-proxy-ssl-auto-client-cert"
-Same as \-\-ssl-auto-client-cert but used in HTTPS proxy context.
+See also \fI\-\-ssl\-allow\-beast\fP and \fI-x, \-\-proxy\fP. Added in 7.52.0.
+.IP "\-\-proxy\-ssl\-auto\-client\-cert"
+Same as \fI\-\-ssl\-auto\-client\-cert\fP but used in HTTPS proxy context.
-Providing --proxy-ssl-auto-client-cert multiple times has no extra effect.
-Disable it again with --no-proxy-ssl-auto-client-cert.
+Providing \fI\-\-proxy\-ssl\-auto\-client\-cert\fP multiple times has no extra effect.
+Disable it again with \-\-no\-proxy\-ssl\-auto\-client\-cert.
Example:
.nf
- curl --proxy-ssl-auto-client-cert -x https://proxy https://example.com
+ curl \-\-proxy\-ssl\-auto\-client\-cert \-x https://proxy https://example.com
.fi
-See also \fI--ssl-auto-client-cert\fP and \fI-x, --proxy\fP. Added in 7.77.0.
-.IP "\-\-proxy-tls13-ciphers <ciphersuite list>"
+See also \fI\-\-ssl\-auto\-client\-cert\fP and \fI-x, \-\-proxy\fP. Added in 7.77.0.
+.IP "\-\-proxy\-tls13\-ciphers <ciphersuite list>"
(TLS) 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:
-.nf
- https://curl.se/docs/ssl-ciphers.html
-.fi
+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.
+cipher suites by using the \fI\-\-proxy\-ciphers\fP option.
-If --proxy-tls13-ciphers is provided several times, the last set value will be used.
+If \fI\-\-proxy\-tls13\-ciphers\fP is provided several times, the last set value is used.
Example:
.nf
- curl --proxy-tls13-ciphers TLS_AES_128_GCM_SHA256 -x proxy https://example.com
+ curl \-\-proxy\-tls13\-ciphers TLS_AES_128_GCM_SHA256 \-x proxy https://example.com
.fi
-See also \fI--tls13-ciphers\fP and \fI--curves\fP. Added in 7.61.0.
-.IP "\-\-proxy-tlsauthtype <type>"
-Same as \-\-tlsauthtype but used in HTTPS proxy context.
+See also \fI\-\-tls13\-ciphers\fP, \fI\-\-curves\fP and \fI\-\-proxy\-ciphers\fP. Added in 7.61.0.
+.IP "\-\-proxy\-tlsauthtype <type>"
+Same as \fI\-\-tlsauthtype\fP but used in HTTPS proxy context.
-If --proxy-tlsauthtype is provided several times, the last set value will be used.
+If \fI\-\-proxy\-tlsauthtype\fP is provided several times, the last set value is used.
Example:
.nf
- curl --proxy-tlsauthtype SRP -x https://proxy https://example.com
+ curl \-\-proxy\-tlsauthtype SRP \-x https://proxy https://example.com
.fi
-See also \fI-x, --proxy\fP and \fI--proxy-tlsuser\fP. Added in 7.52.0.
-.IP "\-\-proxy-tlspassword <string>"
-Same as \-\-tlspassword but used in HTTPS proxy context.
+See also \fI-x, \-\-proxy\fP and \fI\-\-proxy\-tlsuser\fP. Added in 7.52.0.
+.IP "\-\-proxy\-tlspassword <string>"
+Same as \fI\-\-tlspassword\fP but used in HTTPS proxy context.
-If --proxy-tlspassword is provided several times, the last set value will be used.
+If \fI\-\-proxy\-tlspassword\fP is provided several times, the last set value is used.
Example:
.nf
- curl --proxy-tlspassword passwd -x https://proxy https://example.com
+ curl \-\-proxy\-tlspassword passwd \-x https://proxy https://example.com
.fi
-See also \fI-x, --proxy\fP and \fI--proxy-tlsuser\fP. Added in 7.52.0.
-.IP "\-\-proxy-tlsuser <name>"
-Same as \-\-tlsuser but used in HTTPS proxy context.
+See also \fI-x, \-\-proxy\fP and \fI\-\-proxy\-tlsuser\fP. Added in 7.52.0.
+.IP "\-\-proxy\-tlsuser <name>"
+Same as \fI\-\-tlsuser\fP but used in HTTPS proxy context.
-If --proxy-tlsuser is provided several times, the last set value will be used.
+If \fI\-\-proxy\-tlsuser\fP is provided several times, the last set value is used.
Example:
.nf
- curl --proxy-tlsuser smith -x https://proxy https://example.com
+ curl \-\-proxy\-tlsuser smith \-x https://proxy https://example.com
.fi
-See also \fI-x, --proxy\fP and \fI--proxy-tlspassword\fP. Added in 7.52.0.
-.IP "\-\-proxy-tlsv1"
-Same as \-\-tlsv1 but used in HTTPS proxy context.
+See also \fI-x, \-\-proxy\fP and \fI\-\-proxy\-tlspassword\fP. Added in 7.52.0.
+.IP "\-\-proxy\-tlsv1"
+Same as \fI\-1, \-\-tlsv1\fP but used in HTTPS proxy context.
-Providing --proxy-tlsv1 multiple times has no extra effect.
+Providing \fI\-\-proxy\-tlsv1\fP multiple times has no extra effect.
Example:
.nf
- curl --proxy-tlsv1 -x https://proxy https://example.com
+ curl \-\-proxy\-tlsv1 \-x https://proxy https://example.com
.fi
-See also \fI-x, --proxy\fP. Added in 7.52.0.
-.IP "\-U, \-\-proxy-user <user:password>"
+See also \fI-x, \-\-proxy\fP. Added in 7.52.0.
+.IP "\-U, \-\-proxy\-user <user:password>"
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
+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 :".
+from your environment by specifying a single colon with this option: "\-U :".
-On systems where it works, curl will hide 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 will still be 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.
+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.
-If --proxy-user is provided several times, the last set value will be used.
+If \fI\-U, \-\-proxy\-user\fP is provided several times, the last set value is used.
Example:
.nf
- curl --proxy-user name:pwd -x proxy https://example.com
+ curl \-\-proxy\-user name:pwd \-x proxy https://example.com
.fi
-See also \fI--proxy-pass\fP.
+See also \fI\-\-proxy\-pass\fP.
.IP "\-x, \-\-proxy [protocol://]host[:port]"
Use the specified proxy.
The proxy string can be specified with a protocol:// prefix. No protocol
-specified or http:// will be treated as HTTP proxy. Use socks4://, socks4a://,
-socks5:// or socks5h:// to request a specific SOCKS version to be used.
-
+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.
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 via https:// protocol prefix was added in 7.52.0 for
-OpenSSL, GnuTLS and NSS.
+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 since 7.52.0.
-Prior versions may ignore the protocol and use http:// instead.
+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's an environment variable setting a proxy, you can set proxy to
+use. If there is an environment variable setting a proxy, you can set proxy to
\(dq" to override it.
-All operations that are performed over an HTTP proxy will transparently be
+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.
+one with the \fI\-p, \-\-proxytunnel\fP 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
@@ -3539,445 +3803,474 @@ The proxy host can be specified the same way as the proxy environment
variables, including the protocol prefix (http://) and the embedded user +
password.
-If --proxy is provided several times, the last set value will be used.
+When a proxy is used, the active FTP mode as set with \fI\-P, \-\-ftp\-port\fP, cannot be
+used.
+
+If \fI\-x, \-\-proxy\fP is provided several times, the last set value is used.
Example:
.nf
- curl --proxy http://proxy.example https://example.com
+ curl \-\-proxy http://proxy.example https://example.com
.fi
-See also \fI--socks5\fP and \fI--proxy-basic\fP.
+See also \fI\-\-socks5\fP and \fI\-\-proxy\-basic\fP.
.IP "\-\-proxy1.0 <host[:port]>"
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 \fI\-x, \-\-proxy\fP, is that
-attempts to use CONNECT through the proxy will specify an HTTP 1.0 protocol
+attempts to use CONNECT through the proxy specifies an HTTP 1.0 protocol
instead of the default HTTP 1.1.
-Providing --proxy1.0 multiple times has no extra effect.
+Providing \fI\-\-proxy1.0\fP multiple times has no extra effect.
Example:
.nf
- curl --proxy1.0 -x http://proxy https://example.com
+ curl \-\-proxy1.0 \-x http://proxy https://example.com
.fi
-See also \fI-x, --proxy\fP, \fI--socks5\fP and \fI--preproxy\fP.
+See also \fI-x, \-\-proxy\fP, \fI\-\-socks5\fP and \fI\-\-preproxy\fP.
.IP "\-p, \-\-proxytunnel"
-When an HTTP proxy is used \fI\-x, \-\-proxy\fP, this option will make curl tunnel 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.
+When an HTTP proxy is used \fI\-x, \-\-proxy\fP, 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 \fI\-\-suppress-connect-headers\fP.
+use \fI\-\-suppress\-connect\-headers\fP.
-Providing --proxytunnel multiple times has no extra effect.
-Disable it again with --no-proxytunnel.
+Providing \fI\-p, \-\-proxytunnel\fP multiple times has no extra effect.
+Disable it again with \-\-no\-proxytunnel.
Example:
.nf
- curl --proxytunnel -x http://proxy https://example.com
+ curl \-\-proxytunnel \-x http://proxy https://example.com
.fi
-See also \fI-x, --proxy\fP.
+See also \fI-x, \-\-proxy\fP.
.IP "\-\-pubkey <key>"
(SFTP SCP) Public key file name. Allows you to provide your public key in this separate
file.
-(As of 7.39.0, 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.)
+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.
-If --pubkey is provided several times, the last set value will be used.
+If \fI\-\-pubkey\fP is provided several times, the last set value is used.
Example:
.nf
- curl --pubkey file.pub sftp://example.com/
+ curl \-\-pubkey file.pub sftp://example.com/
.fi
-See also \fI--pass\fP.
+See also \fI\-\-pass\fP.
.IP "\-Q, \-\-quote <command>"
(FTP SFTP) 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 '-'.
+sent BEFORE the transfer takes place (just after the initial \fBPWD\fP command
+in an FTP transfer, to be exact). To make commands take place after a
+successful transfer, prefix them with a dash \(aq\-\(aq.
(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
-\(aq+'. This is not performed when a directory listing is performed.
+\(aq+\(aq. This is not performed when a directory listing is performed.
You may specify any number of commands.
-By default curl will stop at first failure. To make curl continue even if the
+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 will be
+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.
-This option can be used multiple times.
-
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
+shell\-style to embed spaces or special characters. Following is the list of
all supported SFTP quote commands:
.RS
-.IP "atime date file"
+.TP
+\fI\fP"atime date file"\fI\fP
The atime command sets the last access time of the file named by the file
operand. The <date expression> can be all sorts of date strings, see the
\fIcurl_getdate(3)\fP man page for date expression details. (Added in 7.73.0)
-.IP "chgrp group file"
+.TP
+\fI\fP"chgrp group file"\fI\fP
The chgrp command sets the group ID of the file named by the file operand to
the group ID specified by the group operand. The group operand is a decimal
integer group ID.
-.IP "chmod mode file"
+.TP
+\fI\fP"chmod mode file"\fI\fP
The chmod command modifies the file mode bits of the specified file. The
mode operand is an octal integer mode number.
-.IP "chown user file"
+.TP
+\fI\fP"chown user file"\fI\fP
The chown command sets the owner of the file named by the file operand to the
user ID specified by the user operand. The user operand is a decimal
integer user ID.
-.IP "ln source_file target_file"
+.TP
+\fI\fP"ln source_file target_file"\fI\fP
The ln and symlink commands create a symbolic link at the target_file location
pointing to the source_file location.
-.IP "mkdir directory_name"
+.TP
+\fI\fP"mkdir directory_name"\fI\fP
The mkdir command creates the directory named by the directory_name operand.
-.IP "mtime date file"
+.TP
+\fI\fP"mtime date file"\fI\fP
The mtime command sets the last modification time of the file named by the
file operand. The <date expression> can be all sorts of date strings, see the
\fIcurl_getdate(3)\fP man page for date expression details. (Added in 7.73.0)
-.IP "pwd"
-The pwd command returns the absolute pathname of the current working directory.
-.IP "rename source target"
+.TP
+\fB"pwd"\fP
+The pwd command returns the absolute path name of the current working directory.
+.TP
+\fI\fP"rename source target"\fI\fP
The rename command renames the file or directory named by the source
operand to the destination path named by the target operand.
-.IP "rm file"
+.TP
+\fI\fP"rm file"\fI\fP
The rm command removes the file specified by the file operand.
-.IP "rmdir directory"
+.TP
+\fI\fP"rmdir directory"\fI\fP
The rmdir command removes the directory entry specified by the directory
operand, provided it is empty.
-.IP "symlink source_file target_file"
+.TP
+\fI\fP"symlink source_file target_file"\fI\fP
See ln.
.RE
+.IP
---quote can be used several times in a command line
+\fI\-Q, \-\-quote\fP can be used several times in a command line
Example:
.nf
- curl --quote "DELE file" ftp://example.com/foo
+ curl \-\-quote "DELE file" ftp://example.com/foo
.fi
-See also \fI-X, --request\fP.
-.IP "\-\-random-file <file>"
-Deprecated option. This option is ignored by curl since 7.84.0. Prior to that
-it only had an effect on curl if built to use old versions of OpenSSL.
+See also \fI-X, \-\-request\fP.
+.IP "\-\-random\-file <file>"
+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 what will be considered as random
-data. The data may be used to seed the random engine for SSL connections.
+Specify the path name to file containing random data. The data may be used to
+seed the random engine for SSL connections.
-If --random-file is provided several times, the last set value will be used.
+If \fI\-\-random\-file\fP is provided several times, the last set value is used.
Example:
.nf
- curl --random-file rubbish https://example.com
+ curl \-\-random\-file rubbish https://example.com
.fi
-See also \fI--egd-file\fP.
+See also \fI\-\-egd\-file\fP.
.IP "\-r, \-\-range <range>"
(HTTP FTP SFTP FILE) 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
+.B 0\-499
specifies the first 500 bytes
.TP
-.B 500-999
+.B 500\-999
specifies the second 500 bytes
.TP
.B \-500
specifies the last 500 bytes
.TP
-.B 9500-
+.B 9500\-
specifies the bytes from offset 9500 and forward
.TP
-.B 0-0,-1
+.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)
+.B 100\-199,500\-599
+specifies two separate 100\-byte ranges(*) (HTTP)
.RE
.IP
-(*) = NOTE that this will cause the server to reply with a multipart
-response, which will be returned as-is by curl! Parsing or otherwise
-transforming this response is the responsibility of the caller.
+(*) = 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
-\(aqstart-stop' range syntax. If a non-digit character is given in the range,
-the server's response will be unspecified, depending on the server's
-configuration.
+Only digit characters (0\-9) are valid in the \(aqstart\(aq and \(aqstop\(aq fields of the
+\(aqstart\-stop\(aq range syntax. If a non\-digit character is given in the range, the
+server\(aqs response is unspecified, depending on the server\(aqs configuration.
-You should also be aware that many HTTP/1.1 servers do not have this feature
-enabled, so that when you attempt to get a range, you will instead get the
-whole document.
+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
+FTP and SFTP range downloads only support the simple \(aqstart\-stop\(aq syntax
(optionally with one of the numbers omitted). FTP use depends on the extended
FTP command SIZE.
-If --range is provided several times, the last set value will be used.
+If \fI\-r, \-\-range\fP is provided several times, the last set value is used.
Example:
.nf
- curl --range 22-44 https://example.com
+ curl \-\-range 22\-44 https://example.com
.fi
-See also \fI-C, --continue-at\fP and \fI-a, --append\fP.
+See also \fI-C, \-\-continue\-at\fP and \fI-a, \-\-append\fP.
.IP "\-\-rate <max request rate>"
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 will start the next transfer as fast as possible.
+option, curl starts the next transfer as fast as possible.
If given several URLs and a transfer completes faster than the allowed rate,
-curl will wait until the next transfer is started to maintain the requested
-rate. This option has no effect when \-\-parallel is used.
+curl waits until the next transfer is started to maintain the requested
+rate. This option has no effect when \fI\-Z, \-\-parallel\fP 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'
+time unit. Supported units are \(aqs\(aq (second), \(aqm\(aq (minute), \(aqh\(aq (hour) and \(aqd\(aq
/(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 will not start the next
+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 will instead run unrestricted.
+more than 1000 per second, it instead runs unrestricted.
When retrying transfers, enabled with \fI\-\-retry\fP, the separate retry delay logic
is used and not this setting.
-If --rate is provided several times, the last set value will be used.
+This option is global and does not need to be specified for each use of --next.
+
+If \fI\-\-rate\fP is provided several times, the last set value is used.
Examples:
.nf
- curl --rate 2/s https://example.com
- curl --rate 3/h https://example.com
- curl --rate 14/m https://example.com
+ curl \-\-rate 2/s https://example.com ...
+ curl \-\-rate 3/h https://example.com ...
+ curl \-\-rate 14/m https://example.com ...
.fi
-See also \fI--limit-rate\fP and \fI--retry-delay\fP. Added in 7.84.0.
+See also \fI\-\-limit\-rate\fP and \fI\-\-retry\-delay\fP. Added in 7.84.0.
.IP "\-\-raw"
(HTTP) When used, it disables all internal HTTP decoding of content or transfer
encodings and instead makes them passed on unaltered, raw.
-Providing --raw multiple times has no extra effect.
-Disable it again with --no-raw.
+Providing \fI\-\-raw\fP multiple times has no extra effect.
+Disable it again with \-\-no\-raw.
Example:
.nf
- curl --raw https://example.com
+ curl \-\-raw https://example.com
.fi
-See also \fI--tr-encoding\fP.
+See also \fI\-\-tr\-encoding\fP.
.IP "\-e, \-\-referer <URL>"
(HTTP) 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
-\(dq;auto" to the \-\-referer URL to make curl automatically set the previous URL
+with the \fI\-H, \-\-header\fP flag of course. When used with \fI\-L, \-\-location\fP you can append
+\(dq;auto" to the \fI\-e, \-\-referer\fP 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 \fI\-e, \-\-referer\fP.
-If --referer is provided several times, the last set value will be used.
+If \fI\-e, \-\-referer\fP is provided several times, the last set value is used.
Examples:
.nf
- curl --referer "https://fake.example" https://example.com
- curl --referer "https://fake.example;auto" -L https://example.com
- curl --referer ";auto" -L https://example.com
+ curl \-\-referer "https://fake.example" https://example.com
+ curl \-\-referer "https://fake.example;auto" \-L https://example.com
+ curl \-\-referer ";auto" \-L https://example.com
.fi
-See also \fI-A, --user-agent\fP and \fI-H, --header\fP.
-.IP "\-J, \-\-remote-header-name"
-(HTTP) 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 will be stripped off
-before the file name is used.
+See also \fI-A, \-\-user\-agent\fP and \fI-H, \-\-header\fP.
+.IP "\-J, \-\-remote\-header\-name"
+(HTTP) This option tells the \fI\-O, \-\-remote\-name\fP 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
-\fI\-\-output-dir\fP.
+\fI\-\-output\-dir\fP.
If the server specifies a file name and a file with that name already exists
-in the destination directory, it will not be overwritten and an error will
-occur. If the server does not specify a file name then this option has no
-effect.
+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's no attempt to decode %-sequences (yet) in the provided file name, so
+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).
+
\fBWARNING\fP: 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.
-Providing --remote-header-name multiple times has no extra effect.
-Disable it again with --no-remote-header-name.
+Providing \fI\-J, \-\-remote\-header\-name\fP multiple times has no extra effect.
+Disable it again with \-\-no\-remote\-header\-name.
Example:
.nf
- curl -OJ https://example.com/file
+ curl \-OJ https://example.com/file
.fi
-See also \fI-O, --remote-name\fP.
-.IP "\-\-remote-name-all"
+See also \fI-O, \-\-remote\-name\fP.
+.IP "\-\-remote\-name\-all"
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.
+if \fI\-O, \-\-remote\-name\fP were used for each one. So if you want to disable that for a
+specific URL after \fI\-\-remote\-name\-all\fP has been used, you must use "\-o \-" or
+-\-no\-remote\-name.
-Providing --remote-name-all multiple times has no extra effect.
-Disable it again with --no-remote-name-all.
+Providing \fI\-\-remote\-name\-all\fP multiple times has no extra effect.
+Disable it again with \-\-no\-remote\-name\-all.
Example:
.nf
- curl --remote-name-all ftp://example.com/file1 ftp://example.com/file2
+ curl \-\-remote\-name\-all ftp://example.com/file1 ftp://example.com/file2
.fi
-See also \fI-O, --remote-name\fP.
-.IP "\-O, \-\-remote-name"
+See also \fI-O, \-\-remote\-name\fP.
+.IP "\-O, \-\-remote\-name"
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 will be 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 \fI\-\-output-dir\fP.
+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 \fI\-\-output\-dir\fP.
The remote file name to use for saving is extracted from the given URL,
-nothing else, and if it already exists it will be overwritten. If you want the
-server to be able to choose the file name refer to \-\-remote-header-name which
+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 \fI\-J, \-\-remote\-header\-name\fP which
can be used in addition to this option. If the server chooses a file name and
-that name already exists it will not be overwritten.
+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 will end up as-is as file name.
+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.
---remote-name can be used several times in a command line
+\fI\-O, \-\-remote\-name\fP can be used several times in a command line
Example:
.nf
- curl -O https://example.com/filename
+ curl \-O https://example.com/filename
.fi
-See also \fI--remote-name-all\fP, \fI--output-dir\fP and \fI-J, --remote-header-name\fP.
-.IP "\-R, \-\-remote-time"
-When used, this will make curl attempt to figure out the timestamp of the
-remote file, and if that is available make the local file get that same
+See also \fI\-\-remote\-name\-all\fP, \fI\-\-output\-dir\fP and \fI-J, \-\-remote\-header\-name\fP.
+.IP "\-R, \-\-remote\-time"
+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.
-Providing --remote-time multiple times has no extra effect.
-Disable it again with --no-remote-time.
+Providing \fI\-R, \-\-remote\-time\fP multiple times has no extra effect.
+Disable it again with \-\-no\-remote\-time.
Example:
.nf
- curl --remote-time -o foo https://example.com
+ curl \-\-remote\-time \-o foo https://example.com
.fi
-See also \fI-O, --remote-name\fP and \fI-z, --time-cond\fP.
-.IP "\-\-remove-on-error"
+See also \fI-O, \-\-remote\-name\fP and \fI-z, \-\-time\-cond\fP.
+.IP "\-\-remove\-on\-error"
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.
-Providing --remove-on-error multiple times has no extra effect.
-Disable it again with --no-remove-on-error.
+Providing \fI\-\-remove\-on\-error\fP multiple times has no extra effect.
+Disable it again with \-\-no\-remove\-on\-error.
Example:
.nf
- curl --remove-on-error -o output https://example.com
+ curl \-\-remove\-on\-error \-o output https://example.com
.fi
-See also \fI-f, --fail\fP. Added in 7.83.0.
-.IP "\-\-request-target <path>"
+See also \fI-f, \-\-fail\fP. Added in 7.83.0.
+.IP "\-\-request\-target <path>"
(HTTP) 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 *".
-If --request-target is provided several times, the last set value will be used.
+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.
+
+If \fI\-\-request\-target\fP is provided several times, the last set value is used.
Example:
.nf
- curl --request-target "*" -X OPTIONS https://example.com
+ curl \-\-request\-target "*" \-X OPTIONS https://example.com
.fi
-See also \fI-X, --request\fP. Added in 7.55.0.
+See also \fI-X, \-\-request\fP. Added in 7.55.0.
.IP "\-X, \-\-request <method>"
-(HTTP) Specifies a custom request method to use when communicating with the
-HTTP server. The specified request method will be 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
+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
+\fBHTTP\fP
+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 \fIGET\fP). Read the HTTP 1.1 specification for details
+and explanations. Common additional HTTP requests include \fIPUT\fP and \fIDELETE\fP,
+but related technologies like WebDAV offers \fIPROPFIND\fP, \fICOPY\fP, \fIMOVE\fP 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.
+Normally you do not need this option. All sorts of \fIGET\fP, \fIHEAD\fP, \fIPOST\fP and
+\fIPUT\fP 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 will not suffice. You need to use the \-\-head option.
+request, using \-X HEAD does not suffice. You need to use the \fI\-I, \-\-head\fP option.
-The method string you set with \-\-request will be used for all requests, which
-if you for example use \-\-location may cause unintended side-effects when curl
+The method string you set with \fI\-X, \-\-request\fP is used for all requests, which
+if you for example use \fI\-L, \-\-location\fP may cause unintended side\-effects when curl
does not change request method according to the HTTP 30x response codes \- and
similar.
-
-(FTP)
-Specifies a custom FTP command to use instead of LIST when doing file lists
+.TP
+\fBFTP\fP
+Specifies a custom FTP command to use instead of \fILIST\fP when doing file lists
with FTP.
+.TP
+\fBPOP3\fP
+Specifies a custom POP3 command to use instead of \fILIST\fP or \fIRETR\fP.
-(POP3)
-Specifies a custom POP3 command to use instead of LIST or RETR.
-
-
-(IMAP)
-Specifies a custom IMAP command to use instead of LIST. (Added in 7.30.0)
-
-(SMTP)
-Specifies a custom SMTP command to use instead of HELP or VRFY. (Added in 7.34.0)
+.TP
+\fBIMAP\fP
+Specifies a custom IMAP command to use instead of \fILIST\fP.
+.TP
+\fBSMTP\fP
+Specifies a custom SMTP command to use instead of \fIHELP\fP or \fBVRFY\fP.
+.RE
+.IP
-If --request is provided several times, the last set value will be used.
+If \fI\-X, \-\-request\fP is provided several times, the last set value is used.
Examples:
.nf
- curl -X "DELETE" https://example.com
- curl -X NLST ftp://example.com/
+ curl \-X "DELETE" https://example.com
+ curl \-X NLST ftp://example.com/
.fi
-See also \fI--request-target\fP.
+See also \fI\-\-request\-target\fP.
.IP "\-\-resolve <[+]host:port:addr[,addr]...>"
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 will be used for. It means
+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 will be used first.
+By specifying \(aq*\(aq as host you can tell curl to resolve any host and specific
+port pair to the specified address. Wildcard is resolved last so any \fI\-\-resolve\fP
+with a specific host and port is used first.
-The provided address set by this option will be used even if \-\-ipv4 or \-\-ipv6
-is set to make curl use another IP version.
+The provided address set by this option is used even if \fI\-4, \-\-ipv4\fP or \fI\-6, \-\-ipv6\fP 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 will only make sense for long
-running parallel transfers with a lot of files. In such cases, if this option
-is used curl will try to resolve the host as it normally would once the
-timeout has expired.
+By prefixing the host with a \(aq+\(aq you can make the entry time out after curl\(aqs
+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.
@@ -3985,26 +4278,24 @@ 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.
-
-This option can be used many times to add many host names to resolve.
+Support for the \(aq+\(aq prefix was was added in 7.75.0.
---resolve can be used several times in a command line
+\fI\-\-resolve\fP can be used several times in a command line
Example:
.nf
- curl --resolve example.com:443:127.0.0.1 https://example.com
+ curl \-\-resolve example.com:443:127.0.0.1 https://example.com
.fi
-See also \fI--connect-to\fP and \fI--alt-svc\fP.
-.IP "\-\-retry-all-errors"
+See also \fI\-\-connect\-to\fP and \fI\-\-alt\-svc\fP.
+.IP "\-\-retry\-all\-errors"
Retry on any error. This option is used together with \fI\-\-retry\fP.
This option is the "sledgehammer" of retrying. Do not use this option by
-default (eg in 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.
+default (for example in your \fBcurlrc\fP), there may be unintended consequences
+such as sending or receiving duplicate data. Do not use with redirected input
+or output. You\(aqd be much better off handling your unique problems in shell
+script. Please read the example below.
\fBWARNING\fP: For server compatibility curl attempts to retry failed flaky
transfers as close as possible to how they were started, but this is not
@@ -4015,164 +4306,162 @@ 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 will not error on 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 will retry 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 \fI\-f, \-\-fail\fP.
+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 \fI\-\-retry\fP 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 \fI\-f, \-\-fail\fP.
-Providing --retry-all-errors multiple times has no extra effect.
-Disable it again with --no-retry-all-errors.
+Providing \fI\-\-retry\-all\-errors\fP multiple times has no extra effect.
+Disable it again with \-\-no\-retry\-all\-errors.
Example:
.nf
- curl --retry 5 --retry-all-errors https://example.com
+ curl \-\-retry 5 \-\-retry\-all\-errors https://example.com
.fi
-See also \fI--retry\fP. Added in 7.71.0.
-.IP "\-\-retry-connrefused"
+See also \fI\-\-retry\fP. Added in 7.71.0.
+.IP "\-\-retry\-connrefused"
In addition to the other conditions, consider ECONNREFUSED as a transient
-error too for \fI\-\-retry\fP. This option is used together with \-\-retry.
+error too for \fI\-\-retry\fP. This option is used together with \fI\-\-retry\fP.
-Providing --retry-connrefused multiple times has no extra effect.
-Disable it again with --no-retry-connrefused.
+Providing \fI\-\-retry\-connrefused\fP multiple times has no extra effect.
+Disable it again with \-\-no\-retry\-connrefused.
Example:
.nf
- curl --retry-connrefused --retry https://example.com
+ curl \-\-retry\-connrefused \-\-retry 7 https://example.com
.fi
-See also \fI--retry\fP and \fI--retry-all-errors\fP. Added in 7.52.0.
-.IP "\-\-retry-delay <seconds>"
+See also \fI\-\-retry\fP and \fI\-\-retry\-all\-errors\fP. Added in 7.52.0.
+.IP "\-\-retry\-delay <seconds>"
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 will make curl use the default backoff time.
+between retries). This option is only interesting if \fI\-\-retry\fP is also
+used. Setting this delay to zero makes curl use the default backoff time.
-If --retry-delay is provided several times, the last set value will be used.
+If \fI\-\-retry\-delay\fP is provided several times, the last set value is used.
Example:
.nf
- curl --retry-delay 5 --retry https://example.com
+ curl \-\-retry\-delay 5 \-\-retry 7 https://example.com
.fi
-See also \fI--retry\fP.
-.IP "\-\-retry-max-time <seconds>"
-The retry timer is reset before the first transfer attempt. Retries will be
-done as usual (see \fI\-\-retry\fP) as long as the timer has not reached this given
-limit. Notice that if the timer has not reached the limit, the request will be
+See also \fI\-\-retry\fP.
+.IP "\-\-retry\-max\-time <seconds>"
+The retry timer is reset before the first transfer attempt. Retries are done
+as usual (see \fI\-\-retry\fP) 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 \fI\-m, \-\-max-time\fP. Set this option to
-zero to not timeout retries.
+limit a single request\(aqs maximum time, use \fI\-m, \-\-max\-time\fP. Set this option to zero
+to not timeout retries.
-If --retry-max-time is provided several times, the last set value will be used.
+If \fI\-\-retry\-max\-time\fP is provided several times, the last set value is used.
Example:
.nf
- curl --retry-max-time 30 --retry 10 https://example.com
+ curl \-\-retry\-max\-time 30 \-\-retry 10 https://example.com
.fi
-See also \fI--retry\fP.
+See also \fI\-\-retry\fP.
.IP "\-\-retry <num>"
If a transient error is returned when curl tries to perform a transfer, it
-will retry this number of times before giving up. Setting the number to 0
+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 will first wait one second and then
-for all forthcoming retries it will double the waiting time until it reaches
-10 minutes which then will be the 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.
+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
+\fI\-\-retry\-delay\fP you disable this exponential backoff algorithm. See also
+\fI\-\-retry\-max\-time\fP to limit the total time allowed for retries.
-Since curl 7.66.0, curl will comply with the Retry-After: response header if
-one was present to know when to issue the next retry.
+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).
-If --retry is provided several times, the last set value will be used.
+If \fI\-\-retry\fP is provided several times, the last set value is used.
Example:
.nf
- curl --retry 7 https://example.com
+ curl \-\-retry 7 https://example.com
.fi
-See also \fI--retry-max-time\fP.
-.IP "\-\-sasl-authzid <identity>"
-Use this authorization identity (authzid), during SASL PLAIN authentication,
-in addition to the authentication identity (authcid) as specified by \fI\-u, \-\-user\fP.
+See also \fI\-\-retry\-max\-time\fP.
+.IP "\-\-sasl\-authzid <identity>"
+Use this authorization identity (\fBauthzid\fP), during SASL PLAIN
+authentication, in addition to the authentication identity (\fBauthcid\fP) as
+specified by \fI\-u, \-\-user\fP.
-If the option is not specified, the server will derive 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.
+If the option is not specified, the server derives the \fBauthzid\fP from the
+\fBauthcid\fP, but if specified, and depending on the server implementation, it
+may be used to access another user\(aqs inbox, that the user has been granted
+access to, or a shared mailbox for example.
-If --sasl-authzid is provided several times, the last set value will be used.
+If \fI\-\-sasl\-authzid\fP is provided several times, the last set value is used.
Example:
.nf
- curl --sasl-authzid zid imap://example.com/
+ curl \-\-sasl\-authzid zid imap://example.com/
.fi
-See also \fI--login-options\fP. Added in 7.66.0.
-.IP "\-\-sasl-ir"
+See also \fI\-\-login\-options\fP. Added in 7.66.0.
+.IP "\-\-sasl\-ir"
Enable initial response in SASL authentication.
-Providing --sasl-ir multiple times has no extra effect.
-Disable it again with --no-sasl-ir.
+Providing \fI\-\-sasl\-ir\fP multiple times has no extra effect.
+Disable it again with \-\-no\-sasl\-ir.
Example:
.nf
- curl --sasl-ir imap://example.com/
+ curl \-\-sasl\-ir imap://example.com/
.fi
-See also \fI--sasl-authzid\fP. Added in 7.31.0.
-.IP "\-\-service-name <name>"
+See also \fI\-\-sasl\-authzid\fP.
+.IP "\-\-service\-name <name>"
This option allows you to change the service name for SPNEGO.
-Examples: \fI\-\-negotiate\fP \-\-service-name sockd would use sockd/server-name.
-
-If --service-name is provided several times, the last set value will be used.
+If \fI\-\-service\-name\fP is provided several times, the last set value is used.
Example:
.nf
- curl --service-name sockd/server https://example.com
+ curl \-\-service\-name sockd/server https://example.com
.fi
-See also \fI--negotiate\fP and \fI--proxy-service-name\fP. Added in 7.43.0.
-.IP "\-S, \-\-show-error"
+See also \fI\-\-negotiate\fP and \fI\-\-proxy\-service\-name\fP.
+.IP "\-S, \-\-show\-error"
When used with \fI\-s, \-\-silent\fP, it makes curl show an error message if it fails.
-This option is global and does not need to be specified for each use of
-\fI\-:, \-\-next\fP.
+This option is global and does not need to be specified for each use of --next.
-Providing --show-error multiple times has no extra effect.
-Disable it again with --no-show-error.
+Providing \fI\-S, \-\-show\-error\fP multiple times has no extra effect.
+Disable it again with \-\-no\-show\-error.
Example:
.nf
- curl --show-error --silent https://example.com
+ curl \-\-show\-error \-\-silent https://example.com
.fi
-See also \fI--no-progress-meter\fP.
+See also \fI\-\-no\-progress\-meter\fP.
.IP "\-s, \-\-silent"
Silent or quiet mode. Do not show progress meter or error messages. Makes Curl
-mute. It will still output the data you ask for, potentially even to the
+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
+Use \fI\-S, \-\-show\-error\fP in addition to this option to disable progress meter but
still show error messages.
-Providing --silent multiple times has no extra effect.
-Disable it again with --no-silent.
+Providing \fI\-s, \-\-silent\fP multiple times has no extra effect.
+Disable it again with \-\-no\-silent.
Example:
.nf
- curl -s https://example.com
+ curl \-s https://example.com
.fi
-See also \fI-v, --verbose\fP, \fI--stderr\fP and \fI--no-progress-meter\fP.
+See also \fI-v, \-\-verbose\fP, \fI\-\-stderr\fP and \fI\-\-no\-progress\-meter\fP.
.IP "\-\-socks4 <host[:port]>"
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
@@ -4184,21 +4473,22 @@ socks4://localhost/path/to/socket.sock
This option overrides any previous use of \fI\-x, \-\-proxy\fP, as they are mutually
exclusive.
-This option is superfluous since you can specify a socks4 proxy with \-\-proxy
+This option is superfluous since you can specify a socks4 proxy with \fI\-x, \-\-proxy\fP
using a socks4:// protocol prefix.
-Since 7.52.0, \-\-preproxy can be used to specify a SOCKS proxy at the same time
-\-\-proxy is used with an HTTP/HTTPS proxy. In such a case curl first connects to
-the SOCKS proxy and then connects (through SOCKS) to the HTTP or HTTPS proxy.
+\fI\-\-preproxy\fP 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.
-If --socks4 is provided several times, the last set value will be used.
+If \fI\-\-socks4\fP is provided several times, the last set value is used.
Example:
.nf
- curl --socks4 hostname:4096 https://example.com
+ curl \-\-socks4 hostname:4096 https://example.com
.fi
-See also \fI--socks4a\fP, \fI--socks5\fP and \fI--socks5-hostname\fP.
+See also \fI\-\-socks4a\fP, \fI\-\-socks5\fP and \fI\-\-socks5\-hostname\fP.
.IP "\-\-socks4a <host[:port]>"
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.
@@ -4209,82 +4499,78 @@ socks4a://localhost/path/to/socket.sock
This option overrides any previous use of \fI\-x, \-\-proxy\fP, as they are mutually
exclusive.
-This option is superfluous since you can specify a socks4a proxy with \-\-proxy
+This option is superfluous since you can specify a socks4a proxy with \fI\-x, \-\-proxy\fP
using a socks4a:// protocol prefix.
-Since 7.52.0, \-\-preproxy can be used to specify a SOCKS proxy at the same time
-\-\-proxy is used with an HTTP/HTTPS proxy. In such a case curl first connects to
-the SOCKS proxy and then connects (through SOCKS) to the HTTP or HTTPS proxy.
+\fI\-\-preproxy\fP can be used to specify a SOCKS proxy at the same time \fI\-x, \-\-proxy\fP 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.
-If --socks4a is provided several times, the last set value will be used.
+If \fI\-\-socks4a\fP is provided several times, the last set value is used.
Example:
.nf
- curl --socks4a hostname:4096 https://example.com
+ curl \-\-socks4a hostname:4096 https://example.com
.fi
-See also \fI--socks4\fP, \fI--socks5\fP and \fI--socks5-hostname\fP.
-.IP "\-\-socks5-basic"
+See also \fI\-\-socks4\fP, \fI\-\-socks5\fP and \fI\-\-socks5\-hostname\fP.
+.IP "\-\-socks5\-basic"
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.
+\fI\-\-socks5\-gssapi\fP to force GSS\-API authentication to SOCKS5 proxies.
-Providing --socks5-basic multiple times has no extra effect.
+Providing \fI\-\-socks5\-basic\fP multiple times has no extra effect.
Example:
.nf
- curl --socks5-basic --socks5 hostname:4096 https://example.com
+ curl \-\-socks5\-basic \-\-socks5 hostname:4096 https://example.com
.fi
-See also \fI--socks5\fP. Added in 7.55.0.
-.IP "\-\-socks5-gssapi-nec"
-As part of the GSS-API negotiation a protection mode is negotiated. RFC 1961
+See also \fI\-\-socks5\fP. Added in 7.55.0.
+.IP "\-\-socks5\-gssapi\-nec"
+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
+implementation does not. The option \fI\-\-socks5\-gssapi\-nec\fP allows the
unprotected exchange of the protection mode negotiation.
-Providing --socks5-gssapi-nec multiple times has no extra effect.
-Disable it again with --no-socks5-gssapi-nec.
+Providing \fI\-\-socks5\-gssapi\-nec\fP multiple times has no extra effect.
+Disable it again with \-\-no\-socks5\-gssapi\-nec.
Example:
.nf
- curl --socks5-gssapi-nec --socks5 hostname:4096 https://example.com
+ curl \-\-socks5\-gssapi\-nec \-\-socks5 hostname:4096 https://example.com
.fi
-See also \fI--socks5\fP.
-.IP "\-\-socks5-gssapi-service <name>"
-The default service name for a socks server is rcmd/server-fqdn. This option
+See also \fI\-\-socks5\fP.
+.IP "\-\-socks5\-gssapi\-service <name>"
+The default service name for a socks server is \fBrcmd/server\-fqdn\fP. This option
allows you to change it.
-Examples: \-\-socks5 proxy-name \-\-socks5-gssapi-service sockd would use
-sockd/proxy-name \-\-socks5 proxy-name \-\-socks5-gssapi-service sockd/real-name
-would use sockd/real-name for cases where the proxy-name does not match the
-principal name.
-
-If --socks5-gssapi-service is provided several times, the last set value will be used.
+If \fI\-\-socks5\-gssapi\-service\fP is provided several times, the last set value is used.
Example:
.nf
- curl --socks5-gssapi-service sockd --socks5 hostname:4096 https://example.com
+ curl \-\-socks5\-gssapi\-service sockd \-\-socks5 hostname:4096 https://example.com
.fi
-See also \fI--socks5\fP.
-.IP "\-\-socks5-gssapi"
-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
+See also \fI\-\-socks5\fP.
+.IP "\-\-socks5\-gssapi"
+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 \fI\-\-socks5\-basic\fP to force username/password authentication
to SOCKS5 proxies.
-Providing --socks5-gssapi multiple times has no extra effect.
-Disable it again with --no-socks5-gssapi.
+Providing \fI\-\-socks5\-gssapi\fP multiple times has no extra effect.
+Disable it again with \-\-no\-socks5\-gssapi.
Example:
.nf
- curl --socks5-gssapi --socks5 hostname:4096 https://example.com
+ curl \-\-socks5\-gssapi \-\-socks5 hostname:4096 https://example.com
.fi
-See also \fI--socks5\fP. Added in 7.55.0.
-.IP "\-\-socks5-hostname <host[:port]>"
+See also \fI\-\-socks5\fP. Added in 7.55.0.
+.IP "\-\-socks5\-hostname <host[:port]>"
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.
@@ -4295,20 +4581,21 @@ This option overrides any previous use of \fI\-x, \-\-proxy\fP, as they are mutu
exclusive.
This option is superfluous since you can specify a socks5 hostname proxy with
-\-\-proxy using a socks5h:// protocol prefix.
+\fI\-x, \-\-proxy\fP using a socks5h:// protocol prefix.
-Since 7.52.0, \-\-preproxy can be used to specify a SOCKS proxy at the same time
-\-\-proxy is used with an HTTP/HTTPS proxy. In such a case curl first connects to
-the SOCKS proxy and then connects (through SOCKS) to the HTTP or HTTPS proxy.
+\fI\-\-preproxy\fP can be used to specify a SOCKS proxy at the same time \fI\-x, \-\-proxy\fP 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.
-If --socks5-hostname is provided several times, the last set value will be used.
+If \fI\-\-socks5\-hostname\fP is provided several times, the last set value is used.
Example:
.nf
- curl --socks5-hostname proxy.example:7000 https://example.com
+ curl \-\-socks5\-hostname proxy.example:7000 https://example.com
.fi
-See also \fI--socks5\fP and \fI--socks4a\fP.
+See also \fI\-\-socks5\fP and \fI\-\-socks4a\fP.
.IP "\-\-socks5 <host[:port]>"
Use the specified SOCKS5 proxy \- but resolve the host name locally. If the
port number is not specified, it is assumed at port 1080.
@@ -4319,53 +4606,54 @@ socks5://localhost/path/to/socket.sock
This option overrides any previous use of \fI\-x, \-\-proxy\fP, as they are mutually
exclusive.
-This option is superfluous since you can specify a socks5 proxy with \-\-proxy
+This option is superfluous since you can specify a socks5 proxy with \fI\-x, \-\-proxy\fP
using a socks5:// protocol prefix.
-Since 7.52.0, \-\-preproxy can be used to specify a SOCKS proxy at the same time
-\-\-proxy is used with an HTTP/HTTPS proxy. In such a case curl first connects to
-the SOCKS proxy and then connects (through SOCKS) to the HTTP or HTTPS proxy.
+\fI\-\-preproxy\fP can be used to specify a SOCKS proxy at the same time \fI\-x, \-\-proxy\fP 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 \fI\-\-socks4\fP) does not work with IPV6, FTPS or LDAP.
-If --socks5 is provided several times, the last set value will be used.
+If \fI\-\-socks5\fP is provided several times, the last set value is used.
Example:
.nf
- curl --socks5 proxy.example:7000 https://example.com
+ curl \-\-socks5 proxy.example:7000 https://example.com
.fi
-See also \fI--socks5-hostname\fP and \fI--socks4a\fP.
-.IP "\-Y, \-\-speed-limit <speed>"
+See also \fI\-\-socks5\-hostname\fP and \fI\-\-socks4a\fP.
+.IP "\-Y, \-\-speed\-limit <speed>"
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
+speed\-time seconds it gets aborted. speed\-time is set with \fI\-y, \-\-speed\-time\fP and is
30 if not set.
-If --speed-limit is provided several times, the last set value will be used.
+If \fI\-Y, \-\-speed\-limit\fP is provided several times, the last set value is used.
Example:
.nf
- curl --speed-limit 300 --speed-time 10 https://example.com
+ curl \-\-speed\-limit 300 \-\-speed\-time 10 https://example.com
.fi
-See also \fI-y, --speed-time\fP, \fI--limit-rate\fP and \fI-m, --max-time\fP.
-.IP "\-y, \-\-speed-time <seconds>"
-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 will be 1 unless set with \fI\-Y, \-\-speed-limit\fP.
+See also \fI-y, \-\-speed\-time\fP, \fI\-\-limit\-rate\fP and \fI-m, \-\-max\-time\fP.
+.IP "\-y, \-\-speed\-time <seconds>"
+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 \fI\-Y, \-\-speed\-limit\fP.
-This option controls transfers (in both directions) but will not affect slow
-connects etc. If this is a concern for you, try the \-\-connect-timeout option.
+This option controls transfers (in both directions) but does not affect slow
+connects etc. If this is a concern for you, try the \fI\-\-connect\-timeout\fP option.
-If --speed-time is provided several times, the last set value will be used.
+If \fI\-y, \-\-speed\-time\fP is provided several times, the last set value is used.
Example:
.nf
- curl --speed-limit 300 --speed-time 10 https://example.com
+ curl \-\-speed\-limit 300 \-\-speed\-time 10 https://example.com
.fi
-See also \fI-Y, --speed-limit\fP and \fI--limit-rate\fP.
-.IP "\-\-ssl-allow-beast"
+See also \fI-Y, \-\-speed\-limit\fP and \fI\-\-limit\-rate\fP.
+.IP "\-\-ssl\-allow\-beast"
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
@@ -4374,278 +4662,289 @@ SSL implementations.
\fBWARNING\fP: this option loosens the SSL security, and by using this flag you
ask for exactly that.
-Providing --ssl-allow-beast multiple times has no extra effect.
-Disable it again with --no-ssl-allow-beast.
+Providing \fI\-\-ssl\-allow\-beast\fP multiple times has no extra effect.
+Disable it again with \-\-no\-ssl\-allow\-beast.
Example:
.nf
- curl --ssl-allow-beast https://example.com
+ curl \-\-ssl\-allow\-beast https://example.com
.fi
-See also \fI--proxy-ssl-allow-beast\fP and \fI-k, --insecure\fP.
-.IP "\-\-ssl-auto-client-cert"
-Tell libcurl to automatically locate and use a client certificate for
-authentication, when requested by the server. This option is only supported
-for Schannel (the native Windows SSL library). Prior to 7.77.0 this was the
-default behavior in libcurl with Schannel. Since the server can request any
-certificate that supports client authentication in the OS certificate store it
-could be a privacy violation and unexpected.
+See also \fI\-\-proxy\-ssl\-allow\-beast\fP and \fI-k, \-\-insecure\fP.
+.IP "\-\-ssl\-auto\-client\-cert"
+(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.
-Providing --ssl-auto-client-cert multiple times has no extra effect.
-Disable it again with --no-ssl-auto-client-cert.
+Providing \fI\-\-ssl\-auto\-client\-cert\fP multiple times has no extra effect.
+Disable it again with \-\-no\-ssl\-auto\-client\-cert.
Example:
.nf
- curl --ssl-auto-client-cert https://example.com
+ curl \-\-ssl\-auto\-client\-cert https://example.com
.fi
-See also \fI--proxy-ssl-auto-client-cert\fP. Added in 7.77.0.
-.IP "\-\-ssl-no-revoke"
+See also \fI\-\-proxy\-ssl\-auto\-client\-cert\fP. Added in 7.77.0.
+.IP "\-\-ssl\-no\-revoke"
(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.
-Providing --ssl-no-revoke multiple times has no extra effect.
-Disable it again with --no-ssl-no-revoke.
+Providing \fI\-\-ssl\-no\-revoke\fP multiple times has no extra effect.
+Disable it again with \-\-no\-ssl\-no\-revoke.
Example:
.nf
- curl --ssl-no-revoke https://example.com
+ curl \-\-ssl\-no\-revoke https://example.com
.fi
-See also \fI--crlfile\fP. Added in 7.44.0.
-.IP "\-\-ssl-reqd"
-(FTP IMAP POP3 SMTP LDAP) Require SSL/TLS for the connection. Terminates the connection if the server
-does not support SSL/TLS.
+See also \fI\-\-crlfile\fP.
+.IP "\-\-ssl\-reqd"
+(FTP IMAP POP3 SMTP LDAP) 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 handled in LDAP since version 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.
+This option was formerly known as \--ftp\-ssl\-reqd.
-Providing --ssl-reqd multiple times has no extra effect.
-Disable it again with --no-ssl-reqd.
+Providing \fI\-\-ssl\-reqd\fP multiple times has no extra effect.
+Disable it again with \-\-no\-ssl\-reqd.
Example:
.nf
- curl --ssl-reqd ftp://example.com
+ curl \-\-ssl\-reqd ftp://example.com
.fi
-See also \fI--ssl\fP and \fI-k, --insecure\fP.
-.IP "\-\-ssl-revoke-best-effort"
+See also \fI\-\-ssl\fP and \fI-k, \-\-insecure\fP.
+.IP "\-\-ssl\-revoke\-best\-effort"
(Schannel) This option tells curl to ignore certificate revocation checks when
they failed due to missing/offline distribution points for the revocation check
lists.
-Providing --ssl-revoke-best-effort multiple times has no extra effect.
-Disable it again with --no-ssl-revoke-best-effort.
+Providing \fI\-\-ssl\-revoke\-best\-effort\fP multiple times has no extra effect.
+Disable it again with \-\-no\-ssl\-revoke\-best\-effort.
Example:
.nf
- curl --ssl-revoke-best-effort https://example.com
+ curl \-\-ssl\-revoke\-best\-effort https://example.com
.fi
-See also \fI--crlfile\fP and \fI-k, --insecure\fP. Added in 7.70.0.
+See also \fI\-\-crlfile\fP and \fI-k, \-\-insecure\fP. Added in 7.70.0.
.IP "\-\-ssl"
-(FTP IMAP POP3 SMTP LDAP) Warning: this is considered an insecure option. Consider using \-\-ssl-reqd
+(FTP IMAP POP3 SMTP LDAP) Warning: this is considered an insecure option. Consider using \fI\-\-ssl\-reqd\fP
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
+Try to use SSL/TLS for the connection. Reverts to a non\-secure connection if
+the server does not support SSL/TLS. See also \fI\-\-ftp\-ssl\-control\fP and \fI\-\-ssl\-reqd\fP
for different levels of encryption required.
-This option is handled in LDAP since version 7.81.0. It is fully supported
-by the OpenLDAP backend and ignored by the generic ldap backend.
+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. That option
-name can still be used but will be removed in a future version.
+This option was formerly known as \--ftp\-ssl. That option
+name can still be used but might be removed in a future version.
-Providing --ssl multiple times has no extra effect.
-Disable it again with --no-ssl.
+Providing \fI\-\-ssl\fP multiple times has no extra effect.
+Disable it again with \-\-no\-ssl.
Example:
.nf
- curl --ssl pop3://example.com/
+ curl \-\-ssl pop3://example.com/
.fi
-See also \fI--ssl-reqd\fP, \fI-k, --insecure\fP and \fI--ciphers\fP.
+See also \fI\-\-ssl\-reqd\fP, \fI-k, \-\-insecure\fP and \fI\-\-ciphers\fP.
.IP "\-2, \-\-sslv2"
-(SSL) This option previously asked curl to use SSLv2, but starting in curl 7.77.0
-this instruction is ignored. SSLv2 is widely considered insecure (see RFC
-6176).
+(SSL) 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).
-Providing --sslv2 multiple times has no extra effect.
+Providing \fI\-2, \-\-sslv2\fP multiple times has no extra effect.
Example:
.nf
- curl --sslv2 https://example.com
+ curl \-\-sslv2 https://example.com
.fi
-See also \fI--http1.1\fP and \fI--http2\fP. \fI-2, --sslv2\fP requires that the underlying libcurl was built to support TLS. This option is mutually exclusive to \fI-3, --sslv3\fP and \fI-1, --tlsv1\fP and \fI--tlsv1.1\fP and \fI--tlsv1.2\fP.
+See also \fI\-\-http1.1\fP and \fI\-\-http2\fP. \fI-2, \-\-sslv2\fP requires that the underlying libcurl was built to support TLS. This option is mutually exclusive to \fI-3, \-\-sslv3\fP and \fI-1, \-\-tlsv1\fP and \fI\-\-tlsv1.1\fP and \fI\-\-tlsv1.2\fP.
.IP "\-3, \-\-sslv3"
-(SSL) This option previously asked curl to use SSLv3, but starting in curl 7.77.0
-this instruction is ignored. SSLv3 is widely considered insecure (see RFC
-7568).
+(SSL) 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).
-Providing --sslv3 multiple times has no extra effect.
+Providing \fI\-3, \-\-sslv3\fP multiple times has no extra effect.
Example:
.nf
- curl --sslv3 https://example.com
+ curl \-\-sslv3 https://example.com
.fi
-See also \fI--http1.1\fP and \fI--http2\fP. \fI-3, --sslv3\fP requires that the underlying libcurl was built to support TLS. This option is mutually exclusive to \fI-2, --sslv2\fP and \fI-1, --tlsv1\fP and \fI--tlsv1.1\fP and \fI--tlsv1.2\fP.
+See also \fI\-\-http1.1\fP and \fI\-\-http2\fP. \fI-3, \-\-sslv3\fP requires that the underlying libcurl was built to support TLS. This option is mutually exclusive to \fI-2, \-\-sslv2\fP and \fI-1, \-\-tlsv1\fP and \fI\-\-tlsv1.1\fP and \fI\-\-tlsv1.2\fP.
.IP "\-\-stderr <file>"
Redirect all writes to stderr to the specified file instead. If the file name
-is a plain '-', it is instead written to stdout.
+is a plain \(aq\-\(aq, it is instead written to stdout.
-This option is global and does not need to be specified for each use of
-\fI\-:, \-\-next\fP.
+This option is global and does not need to be specified for each use of --next.
-If --stderr is provided several times, the last set value will be used.
+If \fI\-\-stderr\fP is provided several times, the last set value is used.
Example:
.nf
- curl --stderr output.txt https://example.com
+ curl \-\-stderr output.txt https://example.com
.fi
-See also \fI-v, --verbose\fP and \fI-s, --silent\fP.
-.IP "\-\-styled-output"
+See also \fI-v, \-\-verbose\fP and \fI-s, \-\-silent\fP.
+.IP "\-\-styled\-output"
Enables the automatic use of bold font styles when writing HTTP headers to the
-terminal. Use \-\-no-styled-output to switch them off.
+terminal. Use \--no\-styled\-output to switch them off.
-This option is global and does not need to be specified for each use of
-\fI\-:, \-\-next\fP.
+Styled output requires a terminal that supports bold fonts. This feature is
+not present on curl for Windows due to lack of this capability.
+
+This option is global and does not need to be specified for each use of --next.
-Providing --styled-output multiple times has no extra effect.
-Disable it again with --no-styled-output.
+Providing \fI\-\-styled\-output\fP multiple times has no extra effect.
+Disable it again with \-\-no\-styled\-output.
Example:
.nf
- curl --styled-output -I https://example.com
+ curl \-\-styled\-output \-I https://example.com
.fi
-See also \fI-I, --head\fP and \fI-v, --verbose\fP. Added in 7.61.0.
-.IP "\-\-suppress-connect-headers"
-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 \fI\-\-trace\fP, or any statistics.
+See also \fI-I, \-\-head\fP and \fI-v, \-\-verbose\fP. Added in 7.61.0.
+.IP "\-\-suppress\-connect\-headers"
+When \fI\-p, \-\-proxytunnel\fP is used and a CONNECT request is made do not output proxy
+CONNECT response headers. This option is meant to be used with \fI\-D, \-\-dump\-header\fP or
+\fI\-i, \-\-include\fP which are used to show protocol headers in the output. It has no
+effect on debug options such as \fI\-v, \-\-verbose\fP or \fI\-\-trace\fP, or any statistics.
-Providing --suppress-connect-headers multiple times has no extra effect.
-Disable it again with --no-suppress-connect-headers.
+Providing \fI\-\-suppress\-connect\-headers\fP multiple times has no extra effect.
+Disable it again with \-\-no\-suppress\-connect\-headers.
Example:
.nf
- curl --suppress-connect-headers --include -x proxy https://example.com
+ curl \-\-suppress\-connect\-headers \-\-include \-x proxy https://example.com
.fi
-See also \fI-D, --dump-header\fP, \fI-i, --include\fP and \fI-p, --proxytunnel\fP. Added in 7.54.0.
-.IP "\-\-tcp-fastopen"
-Enable use of TCP Fast Open (RFC7413).
+See also \fI-D, \-\-dump\-header\fP, \fI-i, \-\-include\fP and \fI-p, \-\-proxytunnel\fP. Added in 7.54.0.
+.IP "\-\-tcp\-fastopen"
-Providing --tcp-fastopen multiple times has no extra effect.
-Disable it again with --no-tcp-fastopen.
+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.
+
+Providing \fI\-\-tcp\-fastopen\fP multiple times has no extra effect.
+Disable it again with \-\-no\-tcp\-fastopen.
Example:
.nf
- curl --tcp-fastopen https://example.com
+ curl \-\-tcp\-fastopen https://example.com
.fi
-See also \fI--false-start\fP. Added in 7.49.0.
-.IP "\-\-tcp-nodelay"
+See also \fI\-\-false\-start\fP.
+.IP "\-\-tcp\-nodelay"
Turn on the TCP_NODELAY option. See the \fIcurl_easy_setopt(3)\fP man page for
details about this option.
-Since 7.50.2, curl sets this option by default and you need to explicitly
-switch it off if you do not want it on.
+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).
-Providing --tcp-nodelay multiple times has no extra effect.
-Disable it again with --no-tcp-nodelay.
+Providing \fI\-\-tcp\-nodelay\fP multiple times has no extra effect.
+Disable it again with \-\-no\-tcp\-nodelay.
Example:
.nf
- curl --tcp-nodelay https://example.com
+ curl \-\-tcp\-nodelay https://example.com
.fi
-See also \fI-N, --no-buffer\fP.
-.IP "\-t, \-\-telnet-option <opt=val>"
+See also \fI-N, \-\-no\-buffer\fP.
+.IP "\-t, \-\-telnet\-option <opt=val>"
Pass options to the telnet protocol. Supported options are:
-TTYPE=<term> Sets the terminal type.
-
-XDISPLOC=<X display> Sets the X display location.
-
-NEW_ENV=<var,val> Sets an environment variable.
+.RS
+.TP 15
+\fBTTYPE\fP=<term> Sets the terminal type.
+.TP
+\fBXDISPLOC\fP=<X display> Sets the X display location.
+.TP
+\fBNEW_ENV\fP=<var,val> Sets an environment variable.
+.RE
+.IP
---telnet-option can be used several times in a command line
+\fI\-t, \-\-telnet\-option\fP can be used several times in a command line
Example:
.nf
- curl -t TTYPE=vt100 telnet://example.com/
+ curl \-t TTYPE=vt100 telnet://example.com/
.fi
-See also \fI-K, --config\fP.
-.IP "\-\-tftp-blksize <value>"
-(TFTP) Set TFTP BLKSIZE option (must be >512). This is the block size that curl will
-try to use when transferring data to or from a TFTP server. By default 512
-bytes will be used.
+See also \fI-K, \-\-config\fP.
+.IP "\-\-tftp\-blksize <value>"
+(TFTP) Set the TFTP \fBBLKSIZE\fP 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.
-If --tftp-blksize is provided several times, the last set value will be used.
+If \fI\-\-tftp\-blksize\fP is provided several times, the last set value is used.
Example:
.nf
- curl --tftp-blksize 1024 tftp://example.com/file
+ curl \-\-tftp\-blksize 1024 tftp://example.com/file
.fi
-See also \fI--tftp-no-options\fP.
-.IP "\-\-tftp-no-options"
+See also \fI\-\-tftp\-no\-options\fP.
+.IP "\-\-tftp\-no\-options"
(TFTP) 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
+or properly implement TFTP options. When this option is used \fI\-\-tftp\-blksize\fP is
ignored.
-Providing --tftp-no-options multiple times has no extra effect.
-Disable it again with --no-tftp-no-options.
+Providing \fI\-\-tftp\-no\-options\fP multiple times has no extra effect.
+Disable it again with \-\-no\-tftp\-no\-options.
Example:
.nf
- curl --tftp-no-options tftp://192.168.0.1/
+ curl \-\-tftp\-no\-options tftp://192.168.0.1/
.fi
-See also \fI--tftp-blksize\fP. Added in 7.48.0.
-.IP "\-z, \-\-time-cond <time>"
+See also \fI\-\-tftp\-blksize\fP.
+.IP "\-z, \-\-time\-cond <time>"
(HTTP FTP) Request a file that has been modified later than the given time and date, or
one that has been modified before that time. The <date expression> can be all
sorts of date strings or if it does not match any internal ones, it is taken as
a filename and tries to get the modification date (mtime) from <file>
instead. See the \fIcurl_getdate(3)\fP man pages for date expression details.
-Start the date expression with a dash (-) to make it request for a document
+Start the date expression with a dash (\-) to make it request for a document
that is older than the given date/time, default is a document that is newer
than the specified date/time.
-If --time-cond is provided several times, the last set value will be used.
+If provided a non\-existing file, curl outputs a warning about that fact and
+proceeds to do the transfer without a time condition.
+
+If \fI\-z, \-\-time\-cond\fP is provided several times, the last set value is used.
Examples:
.nf
- curl -z "Wed 01 Sep 2021 12:18:00" https://example.com
- curl -z "-Wed 01 Sep 2021 12:18:00" https://example.com
- curl -z file https://example.com
+ curl \-z "Wed 01 Sep 2021 12:18:00" https://example.com
+ curl \-z "\-Wed 01 Sep 2021 12:18:00" https://example.com
+ curl \-z file https://example.com
.fi
-See also \fI--etag-compare\fP and \fI-R, --remote-time\fP.
-.IP "\-\-tls-max <VERSION>"
-(SSL) VERSION defines maximum supported TLS version. The minimum acceptable version
+See also \fI\-\-etag\-compare\fP and \fI-R, \-\-remote\-time\fP.
+.IP "\-\-tls\-max <VERSION>"
+(TLS) VERSION defines maximum supported TLS version. The minimum acceptable version
is set by tlsv1.0, tlsv1.1, tlsv1.2 or tlsv1.3.
If the connection is done without TLS, this option has no effect. This
-includes QUIC-using (HTTP/3) transfers.
+includes QUIC\-using (HTTP/3) transfers.
.RS
.IP "default"
@@ -4659,334 +4958,403 @@ Use up to TLSv1.2.
.IP "1.3"
Use up to TLSv1.3.
.RE
+.IP
-If --tls-max is provided several times, the last set value will be used.
+If \fI\-\-tls\-max\fP is provided several times, the last set value is used.
Examples:
.nf
- curl --tls-max 1.2 https://example.com
- curl --tls-max 1.3 --tlsv1.2 https://example.com
+ curl \-\-tls\-max 1.2 https://example.com
+ curl \-\-tls\-max 1.3 \-\-tlsv1.2 https://example.com
.fi
-See also \fI--tlsv1.0\fP, \fI--tlsv1.1\fP, \fI--tlsv1.2\fP and \fI--tlsv1.3\fP. \fI--tls-max\fP requires that the underlying libcurl was built to support TLS. Added in 7.54.0.
-.IP "\-\-tls13-ciphers <ciphersuite list>"
+See also \fI\-\-tlsv1.0\fP, \fI\-\-tlsv1.1\fP, \fI\-\-tlsv1.2\fP and \fI\-\-tlsv1.3\fP. \fI\-\-tls\-max\fP requires that the underlying libcurl was built to support TLS. Added in 7.54.0.
+.IP "\-\-tls13\-ciphers <ciphersuite list>"
(TLS) Specifies which cipher suites to use in the connection if 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:
-.nf
- https://curl.se/docs/ssl-ciphers.html
-.fi
+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 \-\-ciphers option.
+later, or Schannel. If you are using a different SSL backend you can try
+setting TLS 1.3 cipher suites by using the \fI\-\-ciphers\fP option.
-If --tls13-ciphers is provided several times, the last set value will be used.
+If \fI\-\-tls13\-ciphers\fP is provided several times, the last set value is used.
Example:
.nf
- curl --tls13-ciphers TLS_AES_128_GCM_SHA256 https://example.com
+ curl \-\-tls13\-ciphers TLS_AES_128_GCM_SHA256 https://example.com
.fi
-See also \fI--ciphers\fP and \fI--curves\fP. Added in 7.61.0.
+See also \fI\-\-ciphers\fP, \fI\-\-curves\fP and \fI\-\-proxy\-tls13\-ciphers\fP. Added in 7.61.0.
.IP "\-\-tlsauthtype <type>"
Set TLS authentication type. Currently, the only supported option is "SRP",
-for TLS-SRP (RFC 5054). If \-\-tlsuser and \-\-tlspassword are specified but
-\-\-tlsauthtype is not, then this option defaults to "SRP". This option works
-only if the underlying libcurl is built with TLS-SRP support, which requires
-OpenSSL or GnuTLS with TLS-SRP support.
+for TLS\-SRP (RFC 5054). If \fI\-\-tlsuser\fP and \fI\-\-tlspassword\fP are specified but
+\fI\-\-tlsauthtype\fP is not, then this option defaults to "SRP". This option works
+only if the underlying libcurl is built with TLS\-SRP support, which requires
+OpenSSL or GnuTLS with TLS\-SRP support.
-If --tlsauthtype is provided several times, the last set value will be used.
+If \fI\-\-tlsauthtype\fP is provided several times, the last set value is used.
Example:
.nf
- curl --tlsauthtype SRP https://example.com
+ curl \-\-tlsauthtype SRP https://example.com
.fi
-See also \fI--tlsuser\fP.
+See also \fI\-\-tlsuser\fP.
.IP "\-\-tlspassword <string>"
Set password for use with the TLS authentication method specified with
-\fI\-\-tlsauthtype\fP. Requires that \-\-tlsuser also be set.
+\fI\-\-tlsauthtype\fP. Requires that \fI\-\-tlsuser\fP also be set.
This option does not work with TLS 1.3.
-If --tlspassword is provided several times, the last set value will be used.
+If \fI\-\-tlspassword\fP is provided several times, the last set value is used.
Example:
.nf
- curl --tlspassword pwd --tlsuser user https://example.com
+ curl \-\-tlspassword pwd \-\-tlsuser user https://example.com
.fi
-See also \fI--tlsuser\fP.
+See also \fI\-\-tlsuser\fP.
.IP "\-\-tlsuser <name>"
Set username for use with the TLS authentication method specified with
-\fI\-\-tlsauthtype\fP. Requires that \-\-tlspassword also is set.
+\fI\-\-tlsauthtype\fP. Requires that \fI\-\-tlspassword\fP also is set.
This option does not work with TLS 1.3.
-If --tlsuser is provided several times, the last set value will be used.
+If \fI\-\-tlsuser\fP is provided several times, the last set value is used.
Example:
.nf
- curl --tlspassword pwd --tlsuser user https://example.com
+ curl \-\-tlspassword pwd \-\-tlsuser user https://example.com
.fi
-See also \fI--tlspassword\fP.
+See also \fI\-\-tlspassword\fP.
.IP "\-\-tlsv1.0"
(TLS) Forces curl to use TLS version 1.0 or later when connecting to a remote TLS server.
In old versions of curl this option was documented to allow _only_ TLS 1.0.
-That behavior was inconsistent depending on the TLS library. Use \-\-tls-max if
+That behavior was inconsistent depending on the TLS library. Use \fI\-\-tls\-max\fP if
you want to set a maximum TLS version.
-Providing --tlsv1.0 multiple times has no extra effect.
+Providing \fI\-\-tlsv1.0\fP multiple times has no extra effect.
Example:
.nf
- curl --tlsv1.0 https://example.com
+ curl \-\-tlsv1.0 https://example.com
.fi
-See also \fI--tlsv1.3\fP. Added in 7.34.0.
+See also \fI\-\-tlsv1.3\fP.
.IP "\-\-tlsv1.1"
(TLS) Forces curl to use TLS version 1.1 or later when connecting to a remote TLS server.
In old versions of curl this option was documented to allow _only_ TLS 1.1.
-That behavior was inconsistent depending on the TLS library. Use \-\-tls-max if
+That behavior was inconsistent depending on the TLS library. Use \fI\-\-tls\-max\fP if
you want to set a maximum TLS version.
-Providing --tlsv1.1 multiple times has no extra effect.
+Providing \fI\-\-tlsv1.1\fP multiple times has no extra effect.
Example:
.nf
- curl --tlsv1.1 https://example.com
+ curl \-\-tlsv1.1 https://example.com
.fi
-See also \fI--tlsv1.3\fP and \fI--tls-max\fP. Added in 7.34.0.
+See also \fI\-\-tlsv1.3\fP and \fI\-\-tls\-max\fP.
.IP "\-\-tlsv1.2"
(TLS) Forces curl to use TLS version 1.2 or later when connecting to a remote TLS server.
In old versions of curl this option was documented to allow _only_ TLS 1.2.
-That behavior was inconsistent depending on the TLS library. Use \-\-tls-max if
+That behavior was inconsistent depending on the TLS library. Use \fI\-\-tls\-max\fP if
you want to set a maximum TLS version.
-Providing --tlsv1.2 multiple times has no extra effect.
+Providing \fI\-\-tlsv1.2\fP multiple times has no extra effect.
Example:
.nf
- curl --tlsv1.2 https://example.com
+ curl \-\-tlsv1.2 https://example.com
.fi
-See also \fI--tlsv1.3\fP and \fI--tls-max\fP. Added in 7.34.0.
+See also \fI\-\-tlsv1.3\fP and \fI\-\-tls\-max\fP.
.IP "\-\-tlsv1.3"
(TLS) Forces curl to use TLS version 1.3 or later when connecting to a remote TLS
server.
If the connection is done without TLS, this option has no effect. This
-includes QUIC-using (HTTP/3) transfers.
+includes QUIC\-using (HTTP/3) transfers.
Note that TLS 1.3 is not supported by all TLS backends.
-Providing --tlsv1.3 multiple times has no extra effect.
+Providing \fI\-\-tlsv1.3\fP multiple times has no extra effect.
Example:
.nf
- curl --tlsv1.3 https://example.com
+ curl \-\-tlsv1.3 https://example.com
.fi
-See also \fI--tlsv1.2\fP and \fI--tls-max\fP. Added in 7.52.0.
+See also \fI\-\-tlsv1.2\fP and \fI\-\-tls\-max\fP. Added in 7.52.0.
.IP "\-1, \-\-tlsv1"
-(SSL) Tells curl to use at least TLS version 1.x when negotiating with a remote TLS
+(TLS) Tells curl to use at least TLS version 1.x when negotiating with a remote TLS
server. That means TLS version 1.0 or higher
-Providing --tlsv1 multiple times has no extra effect.
+Providing \fI\-1, \-\-tlsv1\fP multiple times has no extra effect.
Example:
.nf
- curl --tlsv1 https://example.com
+ curl \-\-tlsv1 https://example.com
.fi
-See also \fI--http1.1\fP and \fI--http2\fP. \fI-1, --tlsv1\fP requires that the underlying libcurl was built to support TLS. This option is mutually exclusive to \fI--tlsv1.1\fP and \fI--tlsv1.2\fP and \fI--tlsv1.3\fP.
-.IP "\-\-tr-encoding"
-(HTTP) Request a compressed Transfer-Encoding response using one of the algorithms
+See also \fI\-\-http1.1\fP and \fI\-\-http2\fP. \fI-1, \-\-tlsv1\fP requires that the underlying libcurl was built to support TLS. This option is mutually exclusive to \fI\-\-tlsv1.1\fP and \fI\-\-tlsv1.2\fP and \fI\-\-tlsv1.3\fP.
+.IP "\-\-tr\-encoding"
+(HTTP) Request a compressed Transfer\-Encoding response using one of the algorithms
curl supports, and uncompress the data while receiving it.
-Providing --tr-encoding multiple times has no extra effect.
-Disable it again with --no-tr-encoding.
+Providing \fI\-\-tr\-encoding\fP multiple times has no extra effect.
+Disable it again with \-\-no\-tr\-encoding.
Example:
.nf
- curl --tr-encoding https://example.com
+ curl \-\-tr\-encoding https://example.com
.fi
-See also \fI--compressed\fP.
-.IP "\-\-trace-ascii <file>"
+See also \fI\-\-compressed\fP.
+.IP "\-\-trace\-ascii <file>"
Enables a full trace dump of all incoming and outgoing data, including
-descriptive information, to the given output file. Use "-" as filename to have
+descriptive information, to the given output file. Use "\-" as filename to have
the output sent to stdout.
This is similar to \fI\-\-trace\fP, but leaves out the hex part and only shows the
ASCII part of the dump. It makes smaller output that might be easier to read
for untrained humans.
-This option is global and does not need to be specified for each use of
-\fI\-:, \-\-next\fP.
+Note that verbose output of curl activities and network traffic might contain
+sensitive data, including user names, credentials or secret data content. Be
+aware and be careful when sharing trace logs with others.
+
+This option is global and does not need to be specified for each use of --next.
-If --trace-ascii is provided several times, the last set value will be used.
+If \fI\-\-trace\-ascii\fP is provided several times, the last set value is used.
Example:
.nf
- curl --trace-ascii log.txt https://example.com
+ curl \-\-trace\-ascii log.txt https://example.com
.fi
-See also \fI-v, --verbose\fP and \fI--trace\fP. This option is mutually exclusive to \fI--trace\fP and \fI-v, --verbose\fP.
-.IP "\-\-trace-time"
+See also \fI-v, \-\-verbose\fP and \fI\-\-trace\fP. This option is mutually exclusive to \fI\-\-trace\fP and \fI-v, \-\-verbose\fP.
+.IP "\-\-trace\-config <string>"
+Set configuration for trace output. A comma\-separated list of components where
+detailed output can be made available from. Names are case\-insensitive.
+Specify \(aqall\(aq to enable all trace components.
+
+In addition to trace component names, specify "ids" and "time" to
+avoid extra \fI\-\-trace\-ids\fP or \fI\-\-trace\-time\fP parameters.
+
+See the \fIcurl_global_trace(3)\fP man page for more details.
+
+This option is global and does not need to be specified for each use of --next.
+
+\fI\-\-trace\-config\fP can be used several times in a command line
+
+Example:
+.nf
+ curl \-\-trace\-config ids,http/2 https://example.com
+.fi
+
+See also \fI-v, \-\-verbose\fP and \fI\-\-trace\fP. This option is mutually exclusive to \fI\-\-trace\fP and \fI-v, \-\-verbose\fP. Added in 8.3.0.
+.IP "\-\-trace\-ids"
+Prepends the transfer and connection identifiers to each trace or verbose line that curl displays.
+
+This option is global and does not need to be specified for each use of --next.
+
+Providing \fI\-\-trace\-ids\fP multiple times has no extra effect.
+Disable it again with \-\-no\-trace\-ids.
+
+Example:
+.nf
+ curl \-\-trace\-ids \-\-trace\-ascii output https://example.com
+.fi
+
+See also \fI\-\-trace\fP and \fI-v, \-\-verbose\fP. Added in 8.2.0.
+.IP "\-\-trace\-time"
Prepends a time stamp to each trace or verbose line that curl displays.
-This option is global and does not need to be specified for each use of
-\fI\-:, \-\-next\fP.
+This option is global and does not need to be specified for each use of --next.
-Providing --trace-time multiple times has no extra effect.
-Disable it again with --no-trace-time.
+Providing \fI\-\-trace\-time\fP multiple times has no extra effect.
+Disable it again with \-\-no\-trace\-time.
Example:
.nf
- curl --trace-time --trace-ascii output https://example.com
+ curl \-\-trace\-time \-\-trace\-ascii output https://example.com
.fi
-See also \fI--trace\fP and \fI-v, --verbose\fP.
+See also \fI\-\-trace\fP and \fI-v, \-\-verbose\fP.
.IP "\-\-trace <file>"
Enables a full trace dump of all incoming and outgoing data, including
-descriptive information, to the given output file. Use "-" as filename to have
+descriptive information, to the given output file. Use "\-" as filename to have
the output sent to stdout. Use "%" as filename to have the output sent to
stderr.
-This option is global and does not need to be specified for each use of
-\fI\-:, \-\-next\fP.
+Note that verbose output of curl activities and network traffic might contain
+sensitive data, including user names, credentials or secret data content. Be
+aware and be careful when sharing trace logs with others.
-If --trace is provided several times, the last set value will be used.
+This option is global and does not need to be specified for each use of --next.
+
+If \fI\-\-trace\fP is provided several times, the last set value is used.
Example:
.nf
- curl --trace log.txt https://example.com
+ curl \-\-trace log.txt https://example.com
.fi
-See also \fI--trace-ascii\fP and \fI--trace-time\fP. This option is mutually exclusive to \fI-v, --verbose\fP and \fI--trace-ascii\fP.
-.IP "\-\-unix-socket <path>"
+See also \fI\-\-trace\-ascii\fP, \fI\-\-trace\-config\fP, \fI\-\-trace\-ids\fP and \fI\-\-trace\-time\fP. This option is mutually exclusive to \fI-v, \-\-verbose\fP and \fI\-\-trace\-ascii\fP.
+.IP "\-\-unix\-socket <path>"
(HTTP) Connect through this Unix domain socket, instead of using the network.
-If --unix-socket is provided several times, the last set value will be used.
+If \fI\-\-unix\-socket\fP is provided several times, the last set value is used.
Example:
.nf
- curl --unix-socket socket-path https://example.com
+ curl \-\-unix\-socket socket\-path https://example.com
.fi
-See also \fI--abstract-unix-socket\fP. Added in 7.40.0.
-.IP "\-T, \-\-upload-file <file>"
-This transfers the specified local file to the remote URL. If there is no file
-part in the specified URL, curl will append the local file name. NOTE that you
-must use a trailing / on the last directory to really prove to Curl that there
-is no file name or curl will think that your last directory name is the remote
-file name to use. That will most likely cause the upload operation to fail. If
-this is used on an HTTP(S) server, the PUT command will be used.
+See also \fI\-\-abstract\-unix\-socket\fP.
+.IP "\-T, \-\-upload\-file <file>"
+This transfers the specified local file to the remote URL.
-Use the file name "-" (a single dash) to use stdin instead of a given file.
+If there is no file part in the specified URL, curl appends the local file
+name to the end of the URL before the operation starts. You must use a
+trailing slash (/) on the last directory to prove to curl that there is no
+file name or curl thinks that your last directory name is the remote file name
+to use.
+
+When putting the local file name at the end of the URL, curl ignores what is
+on the left side of any slash (/) or backslash (\\) used in the file name and
+only appends what is on the right side of the rightmost such character.
+
+Use the file name "\-" (a single dash) to use stdin instead of a given file.
Alternately, the file name "." (a single period) may be specified instead of
-\(dq-" to use stdin in non-blocking mode to allow reading server output while
+\(dq\-" to use stdin in non\-blocking mode to allow reading server output while
stdin is being uploaded.
-You can specify one \-\-upload-file for each URL on the command line. Each
-\fI\-T, \-\-upload-file\fP + URL pair specifies what to upload and to where. curl also
-supports "globbing" of the \-\-upload-file argument, meaning that you can upload
+If this option is used with a HTTP(S) URL, the PUT method is used.
+
+You can specify one \fI\-T, \-\-upload\-file\fP for each URL on the command line. Each
+\fI\-T, \-\-upload\-file\fP + URL pair specifies what to upload and to where. curl also
+supports "globbing" of the \fI\-T, \-\-upload\-file\fP argument, meaning that you can upload
multiple files to a single URL by using the same URL globbing style supported
in the URL.
When uploading to an SMTP server: the uploaded data is assumed to be RFC 5322
formatted. It has to feature the necessary set of headers and mail body
-formatted correctly by the user as curl will not transcode nor encode it
+formatted correctly by the user as curl does not transcode nor encode it
further in any way.
---upload-file can be used several times in a command line
+\fI\-T, \-\-upload\-file\fP can be used several times in a command line
Examples:
.nf
- curl -T file https://example.com
- curl -T "img[1-1000].png" ftp://ftp.example.com/
- curl --upload-file "{file1,file2}" https://example.com
+ curl \-T file https://example.com
+ curl \-T "img[1\-1000].png" ftp://ftp.example.com/
+ curl \-\-upload\-file "{file1,file2}" https://example.com
.fi
-See also \fI-G, --get\fP and \fI-I, --head\fP.
+See also \fI-G, \-\-get\fP, \fI-I, \-\-head\fP, \fI-X, \-\-request\fP and \fI-d, \-\-data\fP.
+.IP "\-\-url\-query <data>"
+(all) This option adds a piece of data, usually a name + value pair, to the end of
+the URL query part. The syntax is identical to that used for \fI\-\-data\-urlencode\fP
+with one extension:
+
+If the argument starts with a \(aq+\(aq (plus), the rest of the string is provided
+as\-is unencoded.
+
+The query part of a URL is the one following the question mark on the right
+end.
+
+\fI\-\-url\-query\fP can be used several times in a command line
+
+Examples:
+.nf
+ curl \-\-url\-query name=val https://example.com
+ curl \-\-url\-query =encodethis http://example.net/foo
+ curl \-\-url\-query name@file https://example.com
+ curl \-\-url\-query @fileonly https://example.com
+ curl \-\-url\-query "+name=%20foo" https://example.com
+.fi
+
+See also \fI\-\-data\-urlencode\fP and \fI-G, \-\-get\fP. Added in 7.87.0.
.IP "\-\-url <url>"
Specify a URL to fetch. This option is mostly handy when you want to specify
URL(s) in a config file.
If the given URL is missing a scheme name (such as "http://" or "ftp://" etc)
-then curl will make a guess based on the host. If the outermost sub-domain
-name matches DICT, FTP, IMAP, LDAP, POP3 or SMTP then that protocol will be
-used, otherwise HTTP will be used. Since 7.45.0 guessing can be disabled by
-setting a default protocol, see \-\-proto-default for details.
+then curl makes a guess based on the host. If the outermost subdomain name
+matches DICT, FTP, IMAP, LDAP, POP3 or SMTP then that protocol is used,
+otherwise HTTP is used. Guessing can be avoided by providing a full URL
+including the scheme, or disabled by setting a default protocol (added in
+7.45.0), see \fI\-\-proto\-default\fP for details.
-To control where this URL is written, use the \-\-output or the \-\-remote-name
+To control where this URL is written, use the \fI\-o, \-\-output\fP or the \fI\-O, \-\-remote\-name\fP
options.
\fBWARNING\fP: On Windows, particular file:// accesses can be converted to
network accesses by the operating system. Beware!
---url can be used several times in a command line
+\fI\-\-url\fP can be used several times in a command line
Example:
.nf
- curl --url https://example.com
+ curl \-\-url https://example.com
.fi
-See also \fI-:, --next\fP and \fI-K, --config\fP.
-.IP "\-B, \-\-use-ascii"
+See also \fI-:, \-\-next\fP and \fI-K, \-\-config\fP.
+.IP "\-B, \-\-use\-ascii"
(FTP LDAP) Enable ASCII transfer. For FTP, this can also be enforced by using a URL that
ends with ";type=A". This option causes data sent to stdout to be in text mode
for win32 systems.
-Providing --use-ascii multiple times has no extra effect.
-Disable it again with --no-use-ascii.
+Providing \fI\-B, \-\-use\-ascii\fP multiple times has no extra effect.
+Disable it again with \-\-no\-use\-ascii.
Example:
.nf
- curl -B ftp://example.com/README
+ curl \-B ftp://example.com/README
.fi
-See also \fI--crlf\fP and \fI--data-ascii\fP.
-.IP "\-A, \-\-user-agent <name>"
-(HTTP) Specify the User-Agent string to send to the HTTP server. To encode blanks in
+See also \fI\-\-crlf\fP and \fI\-\-data\-ascii\fP.
+.IP "\-A, \-\-user\-agent <name>"
+(HTTP) Specify the User\-Agent string to send to the HTTP server. To encode blanks in
the string, surround the string with single quote marks. This header can also
-be set with the \-\-header or the \-\-proxy-header options.
+be set with the \fI\-H, \-\-header\fP or the \fI\-\-proxy\-header\fP options.
-If you give an empty argument to \fI\-A, \-\-user-agent\fP (""), it will remove the header
+If you give an empty argument to \fI\-A, \-\-user\-agent\fP (""), it removes the header
completely from the request. If you prefer a blank header, you can set it to a
single space (" ").
-If --user-agent is provided several times, the last set value will be used.
+If \fI\-A, \-\-user\-agent\fP is provided several times, the last set value is used.
Example:
.nf
- curl -A "Agent 007" https://example.com
+ curl \-A "Agent 007" https://example.com
.fi
-See also \fI-H, --header\fP and \fI--proxy-header\fP.
+See also \fI-H, \-\-header\fP and \fI\-\-proxy\-header\fP.
.IP "\-u, \-\-user <user:password>"
Specify the user name and password to use for server authentication. Overrides
-\-\-netrc and \fI\-\-netrc-optional\fP.
+\fI\-n, \-\-netrc\fP and \fI\-\-netrc\-optional\fP.
-If you simply specify the user name, curl will prompt for a password.
+If you simply specify the user name, curl prompts for a password.
The user name and passwords are split up on the first colon, which makes it
impossible to use a colon in the user name with this option. The password can,
still.
-On systems where it works, curl will hide 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 will still be 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.
+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 brief 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.
When using Kerberos V5 with a Windows based server you should include the
Windows domain name in the user name, in order for the server to successfully
@@ -4997,86 +5365,143 @@ When using NTLM, the user name can be specified simply as the user name,
without the domain, if there is a single domain and forest in your setup
for example.
-To specify the domain name use either Down-Level Logon Name or UPN (User
+To specify the domain name use either Down\-Level Logon Name or UPN (User
Principal Name) formats. For example, EXAMPLE\\user and user@example.com
respectively.
-If you use a Windows SSPI-enabled curl binary and perform Kerberos V5,
+If you use a Windows SSPI\-enabled curl binary and perform Kerberos V5,
Negotiate, NTLM or Digest 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 :".
+with this option: "\-u :".
-If --user is provided several times, the last set value will be used.
+If \fI\-u, \-\-user\fP is provided several times, the last set value is used.
Example:
.nf
- curl -u user:secret https://example.com
+ curl \-u user:secret https://example.com
.fi
-See also \fI-n, --netrc\fP and \fI-K, --config\fP.
+See also \fI-n, \-\-netrc\fP and \fI-K, \-\-config\fP.
+.IP "\-\-variable <[%]name=text/@file>"
+Set a variable with "name=content" or "name@file" (where "file" can be stdin
+if set to a single dash (\-)). The name is a case sensitive identifier that
+must consist of no other letters than a\-z, A\-Z, 0\-9 or underscore. The
+specified content is then associated with this identifier.
+
+Setting the same variable name again overwrites the old contents with the new.
+
+The contents of a variable can be referenced in a later command line option
+when that option name is prefixed with "\--expand\-", and the name is used as
+\(dq{{name}}" (without the quotes).
+
+\fI\-\-variable\fP can import environment variables into the name space. Opt to either
+require the environment variable to be set or provide a default value for the
+variable in case it is not already set.
+
+\fI\-\-variable\fP %name imports the variable called \(aqname\(aq but exits with an error if
+that environment variable is not already set. To provide a default value if
+the environment variable is not set, use \fI\-\-variable\fP %name=content or
+\fI\-\-variable\fP %name@content. Note that on some systems \- but not all \-
+environment variables are case insensitive.
+
+When expanding variables, curl supports a set of functions that can make the
+variable contents more convenient to use. You apply a function to a variable
+expansion by adding a colon and then list the desired functions in a
+comma\-separated list that is evaluated in a left\-to\-right order. Variable
+content holding null bytes that are not encoded when expanded, causes an
+error.
+
+Available functions:
+.RS
+.TP 15
+\fBtrim\fP
+removes all leading and trailing white space.
+.TP
+\fBjson\fP
+outputs the content using JSON string quoting rules.
+.TP
+\fBurl\fP
+shows the content URL (percent) encoded.
+.TP
+\fBb64\fP
+expands the variable base64 encoded
+.RE
+.IP
+
+\fI\-\-variable\fP can be used several times in a command line
+
+Example:
+.nf
+ curl \-\-variable name=smith https://example.com
+.fi
+
+See also \fI-K, \-\-config\fP. Added in 8.3.0.
.IP "\-v, \-\-verbose"
Makes curl verbose during the operation. Useful for debugging and seeing
-what's going on "under the hood". A line starting with '>' means "header data"
-sent by curl, '<' means "header data" received by curl that is hidden in
-normal cases, and a line starting with '*' means additional info provided by
+what\(aqs going on "under the hood". A line starting with \(aq>\(aq means "header data"
+sent by curl, \(aq<\(aq means "header data" received by curl that is hidden in
+normal cases, and a line starting with \(aq*\(aq means additional info provided by
curl.
-If you only want HTTP headers in the output, \-\-include might be the option
-you are looking for.
+If you only want HTTP headers in the output, \fI\-i, \-\-include\fP or \fI\-D, \-\-dump\-header\fP might
+be more suitable options.
If you think this option still does not give you enough details, consider using
-\-\-trace or \-\-trace-ascii instead.
+\fI\-\-trace\fP or \fI\-\-trace\-ascii\fP instead.
-This option is global and does not need to be specified for each use of
-\fI\-:, \-\-next\fP.
+Note that verbose output of curl activities and network traffic might contain
+sensitive data, including user names, credentials or secret data content. Be
+aware and be careful when sharing trace logs with others.
-Use \-\-silent to make curl really quiet.
+This option is global and does not need to be specified for each use of --next.
-Providing --verbose multiple times has no extra effect.
-Disable it again with --no-verbose.
+Providing \fI\-v, \-\-verbose\fP multiple times has no extra effect.
+Disable it again with \-\-no\-verbose.
Example:
.nf
- curl --verbose https://example.com
+ curl \-\-verbose https://example.com
.fi
-See also \fI-i, --include\fP. This option is mutually exclusive to \fI--trace\fP and \fI--trace-ascii\fP.
+See also \fI-i, \-\-include\fP, \fI-s, \-\-silent\fP, \fI\-\-trace\fP and \fI\-\-trace\-ascii\fP. This option is mutually exclusive to \fI\-\-trace\fP and \fI\-\-trace\-ascii\fP.
.IP "\-V, \-\-version"
Displays information about curl and the libcurl version it uses.
The first line includes the full version of curl, libcurl and other 3rd party
libraries linked with the executable.
-The second line (starts with "Protocols:") shows all protocols that libcurl
+The second line (starts with "Release\-Date:") shows the release date.
+
+The third line (starts with "Protocols:") shows all protocols that libcurl
reports to support.
-The third line (starts with "Features:") shows specific features libcurl
+The fourth line (starts with "Features:") shows specific features libcurl
reports to offer. Available features include:
.RS
-.IP "alt-svc"
-Support for the Alt-Svc: header is provided.
+.IP "alt\-svc"
+Support for the Alt\-Svc: header is provided.
.IP "AsynchDNS"
This curl uses asynchronous name resolves. Asynchronous name resolves can be
-done using either the c-ares or the threaded resolver backends.
+done using either the c\-ares or the threaded resolver backends.
.IP "brotli"
Support for automatic brotli compression over HTTP(S).
.IP "CharConv"
curl was built with support for character set conversions (like EBCDIC)
.IP "Debug"
-This curl uses a libcurl built with Debug. This enables more error-tracking
-and memory debugging etc. For curl-developers only!
+This curl uses a libcurl built with Debug. This enables more error\-tracking
+and memory debugging etc. For curl\-developers only!
.IP "gsasl"
-The built-in SASL authentication includes extensions to support SCRAM because
+The built\-in SASL authentication includes extensions to support SCRAM because
libcurl was built with libgsasl.
-.IP "GSS-API"
-GSS-API is supported.
+.IP "GSS\-API"
+GSS\-API is supported.
.IP "HSTS"
HSTS support is present.
.IP "HTTP2"
-HTTP/2 support has been built-in.
+HTTP/2 support has been built\-in.
.IP "HTTP3"
-HTTP/3 support has been built-in.
-.IP "HTTPS-proxy"
+HTTP/3 support has been built\-in.
+.IP "HTTPS\-proxy"
This curl is built to support HTTPS proxy.
.IP "IDN"
This curl supports IDN \- international domain names.
@@ -5105,7 +5530,7 @@ SSL versions of various protocols are supported, such as HTTPS, FTPS, POP3S
and so on.
.IP "SSPI"
SSPI is supported.
-.IP "TLS-SRP"
+.IP "TLS\-SRP"
SRP (Secure Remote Password) authentication is supported for TLS.
.IP "TrackMemory"
Debug memory tracking is supported.
@@ -5116,223 +5541,304 @@ Unix sockets support is provided.
.IP "zstd"
Automatic decompression (via zstd) of compressed files over HTTP is supported.
.RE
-
-Providing --version multiple times has no extra effect.
-Disable it again with --no-version.
+.IP
Example:
.nf
- curl --version
+ curl \-\-version
.fi
-See also \fI-h, --help\fP and \fI-M, --manual\fP.
-.IP "\-w, \-\-write-out <format>"
+See also \fI-h, \-\-help\fP and \fI-M, \-\-manual\fP.
+.IP "\-w, \-\-write\-out <format>"
Make curl display information on stdout after a completed transfer. The format
is a string that may contain plain text mixed with any number of
variables. The format can be specified as a literal "string", or you can have
curl read the format from a file with "@filename" and to tell curl to read the
-format from stdin you write "@-".
+format from stdin you write "@\-".
-The variables present in the output format will be substituted by the value or
+The variables present in the output format are substituted by the value or
text that curl thinks fit, as described below. All variables are specified as
%{variable_name} and to output a normal % you just write them as %%. You can
output a newline by using \\n, a carriage return with \\r and a tab space with
\\t.
-The output will be written to standard output, but this can be switched to
-standard error by using %{stderr}.
+The output is by default written to standard output, but can be changed with
+%{stderr} and %output{}.
+
+Output HTTP headers from the most recent request by using \fI%header{name}\fP
+where \fIname\fP is the case insensitive name of the header (without the trailing
+colon). The header contents are exactly as sent over the network, with leading
+and trailing whitespace trimmed (added in 7.84.0).
-Output HTTP headers from the most recent request by using \fB%header{name}\fP
-where \fBname\fP is the case insensitive name of the header (without the
-trailing colon). The header contents are exactly as sent over the network,
-with leading and trailing whitespace trimmed. Added in curl 7.84.0.
+Select a specific target destination file to write the output to, by using
+\fI%output{name}\fP (added in curl 8.3.0) where \fIname\fP is the full file name. The
+output following that instruction is then written to that file. More than one
+\fI%output{}\fP instruction can be specified in the same write\-out argument. If
+the file name cannot be created, curl leaves the output destination to the one
+used prior to the \fI%output{}\fP instruction. Use \fI%output{>>name}\fP to append
+data to an existing file.
-.B NOTE:
-The %-symbol is a special symbol in the win32-environment, where all
-occurrences of % must be doubled when using this option.
+\fBNOTE:\fP
+In Windows the %\-symbol is a special symbol used to expand environment
+variables. In batch files all occurrences of % must be doubled when using this
+option to properly escape. If this option is used at the command prompt then
+the % cannot be escaped and unintended expansion is possible.
The variables available are:
.RS
.TP 15
-.B content_type
-The Content-Type of the requested document, if there was any.
+\fBcerts\fP
+Output the certificate chain with details. Supported only by the OpenSSL,
+GnuTLS, Schannel and Secure Transport backends. (Added in 7.88.0)
.TP
-.B errormsg
+\fBcontent_type\fP
+The Content\-Type of the requested document, if there was any.
+.TP
+\fBerrormsg\fP
The error message. (Added in 7.75.0)
.TP
-.B exitcode
-The numerical exitcode of the transfer. (Added in 7.75.0)
+\fBexitcode\fP
+The numerical exit code of the transfer. (Added in 7.75.0)
.TP
-.B filename_effective
+\fBfilename_effective\fP
The ultimate filename that curl writes out to. This is only meaningful if curl
-is told to write to a file with the \-\-remote-name or \-\-output
-option. It's most useful in combination with the \-\-remote-header-name
+is told to write to a file with the \fI\-O, \-\-remote\-name\fP or \fI\-o, \-\-output\fP
+option. It\(aqs most useful in combination with the \fI\-J, \-\-remote\-header\-name\fP
option.
.TP
-.B ftp_entry_path
+\fBftp_entry_path\fP
The initial path curl ended up in when logging on to the remote FTP
server.
.TP
-.B header_json
+\fBheader_json\fP
A JSON object with all HTTP response headers from the recent transfer. Values
are provided as arrays, since in the case of multiple headers there can be
-multiple values.
+multiple values. (Added in 7.83.0)
The header names provided in lowercase, listed in order of appearance over the
wire. Except for duplicated headers. They are grouped on the first occurrence
of that header, each value is presented in the JSON array.
.TP
-.B http_code
+\fBhttp_code\fP
The numerical response code that was found in the last retrieved HTTP(S) or
FTP(s) transfer.
.TP
-.B http_connect
+\fBhttp_connect\fP
The numerical code that was found in the last response (from a proxy) to a
curl CONNECT request.
.TP
-.B http_version
+\fBhttp_version\fP
The http version that was effectively used. (Added in 7.50.0)
.TP
-.B json
-A JSON object with all available keys.
+\fBjson\fP
+A JSON object with all available keys. (Added in 7.70.0)
.TP
-.B local_ip
+\fBlocal_ip\fP
The IP address of the local end of the most recently done connection \- can be
either IPv4 or IPv6.
.TP
-.B local_port
+\fBlocal_port\fP
The local port number of the most recently done connection.
.TP
-.B method
+\fBmethod\fP
The http method used in the most recent HTTP request. (Added in 7.72.0)
.TP
-.B num_connects
+\fBnum_certs\fP
+Number of server certificates received in the TLS handshake. Supported only by
+the OpenSSL, GnuTLS, Schannel and Secure Transport backends.
+(Added in 7.88.0)
+.TP
+\fBnum_connects\fP
Number of new connects made in the recent transfer.
.TP
-.B num_headers
+\fBnum_headers\fP
The number of response headers in the most recent request (restarted at each
redirect). Note that the status line IS NOT a header. (Added in 7.73.0)
.TP
-.B num_redirects
+\fBnum_redirects\fP
Number of redirects that were followed in the request.
.TP
-.B onerror
-The rest of the output is only shown if the transfer returned a non-zero error
+\fBonerror\fP
+The rest of the output is only shown if the transfer returned a non\-zero error.
(Added in 7.75.0)
.TP
-.B proxy_ssl_verify_result
-The result of the HTTPS proxy's SSL peer certificate verification that was
+\fBproxy_ssl_verify_result\fP
+The result of the HTTPS proxy\(aqs SSL peer certificate verification that was
requested. 0 means the verification was successful. (Added in 7.52.0)
.TP
-.B redirect_url
-When an HTTP request was made without \-\-location to follow redirects (or when
-\-\-max-redirs is met), this variable will show the actual URL a redirect
+\fBredirect_url\fP
+When an HTTP request was made without \fI\-L, \-\-location\fP to follow redirects (or when
+\fI\-\-max\-redirs\fP is met), this variable shows the actual URL a redirect
\fIwould\fP have gone to.
.TP
-.B referer
+\fBreferer\fP
The Referer: header, if there was any. (Added in 7.76.0)
.TP
-.B remote_ip
+\fBremote_ip\fP
The remote IP address of the most recently done connection \- can be either
IPv4 or IPv6.
.TP
-.B remote_port
+\fBremote_port\fP
The remote port number of the most recently done connection.
.TP
-.B response_code
+\fBresponse_code\fP
The numerical response code that was found in the last transfer (formerly
known as "http_code").
.TP
-.B scheme
+\fBscheme\fP
The URL scheme (sometimes called protocol) that was effectively used. (Added in 7.52.0)
.TP
-.B size_download
+\fBsize_download\fP
The total amount of bytes that were downloaded. This is the size of the
body/data that was transferred, excluding headers.
.TP
-.B size_header
+\fBsize_header\fP
The total amount of bytes of the downloaded headers.
.TP
-.B size_request
+\fBsize_request\fP
The total amount of bytes that were sent in the HTTP request.
.TP
-.B size_upload
+\fBsize_upload\fP
The total amount of bytes that were uploaded. This is the size of the
body/data that was transferred, excluding headers.
.TP
-.B speed_download
+\fBspeed_download\fP
The average download speed that curl measured for the complete download. Bytes
per second.
.TP
-.B speed_upload
+\fBspeed_upload\fP
The average upload speed that curl measured for the complete upload. Bytes per
second.
.TP
-.B ssl_verify_result
+\fBssl_verify_result\fP
The result of the SSL peer certificate verification that was requested. 0
means the verification was successful.
.TP
-.B stderr
-From this point on, the \-\-write-out output will be written to standard
+\fBstderr\fP
+From this point on, the \fI\-w, \-\-write\-out\fP output is written to standard
error. (Added in 7.63.0)
.TP
-.B stdout
-From this point on, the \-\-write-out output will be written to standard output.
+\fBstdout\fP
+From this point on, the \fI\-w, \-\-write\-out\fP output is written to standard output.
This is the default, but can be used to switch back after switching to stderr.
(Added in 7.63.0)
.TP
-.B time_appconnect
+\fBtime_appconnect\fP
The time, in seconds, it took from the start until the SSL/SSH/etc
connect/handshake to the remote host was completed.
.TP
-.B time_connect
+\fBtime_connect\fP
The time, in seconds, it took from the start until the TCP connect to the
remote host (or proxy) was completed.
.TP
-.B time_namelookup
+\fBtime_namelookup\fP
The time, in seconds, it took from the start until the name resolving was
completed.
.TP
-.B time_pretransfer
+\fBtime_pretransfer\fP
The time, in seconds, it took from the start until the file transfer was just
-about to begin. This includes all pre-transfer commands and negotiations that
+about to begin. This includes all pre\-transfer commands and negotiations that
are specific to the particular protocol(s) involved.
.TP
-.B time_redirect
+\fBtime_redirect\fP
The time, in seconds, it took for all redirection steps including name lookup,
connect, pretransfer and transfer before the final transaction was
started. time_redirect shows the complete execution time for multiple
redirections.
.TP
-.B time_starttransfer
-The time, in seconds, it took from the start until the first byte was just
-about to be transferred. This includes time_pretransfer and also the time the
-server needed to calculate the result.
+\fBtime_starttransfer\fP
+The time, in seconds, it took from the start until the first byte is received.
+This includes time_pretransfer and also the time the server needed to calculate
+the result.
.TP
-.B time_total
+\fBtime_total\fP
The total time, in seconds, that the full operation lasted.
.TP
-.B url
+\fBurl\fP
The URL that was fetched. (Added in 7.75.0)
.TP
-.B urlnum
-The URL index number of this transfer, 0-indexed. De-globbed URLs share the
+\fBurl.scheme\fP
+The scheme part of the URL that was fetched. (Added in 8.1.0)
+.TP
+\fBurl.user\fP
+The user part of the URL that was fetched. (Added in 8.1.0)
+.TP
+\fBurl.password\fP
+The password part of the URL that was fetched. (Added in 8.1.0)
+.TP
+\fBurl.options\fP
+The options part of the URL that was fetched. (Added in 8.1.0)
+.TP
+\fBurl.host\fP
+The host part of the URL that was fetched. (Added in 8.1.0)
+.TP
+\fBurl.port\fP
+The port number of the URL that was fetched. If no port number was specified,
+but the URL scheme is known, that scheme\(aqs default port number is
+shown. (Added in 8.1.0)
+.TP
+\fBurl.path\fP
+The path part of the URL that was fetched. (Added in 8.1.0)
+.TP
+\fBurl.query\fP
+The query part of the URL that was fetched. (Added in 8.1.0)
+.TP
+\fBurl.fragment\fP
+The fragment part of the URL that was fetched. (Added in 8.1.0)
+.TP
+\fBurl.zoneid\fP
+The zone id part of the URL that was fetched. (Added in 8.1.0)
+.TP
+\fBurle.scheme\fP
+The scheme part of the effective (last) URL that was fetched. (Added in 8.1.0)
+.TP
+\fBurle.user\fP
+The user part of the effective (last) URL that was fetched. (Added in 8.1.0)
+.TP
+\fBurle.password\fP
+The password part of the effective (last) URL that was fetched. (Added in 8.1.0)
+.TP
+\fBurle.options\fP
+The options part of the effective (last) URL that was fetched. (Added in 8.1.0)
+.TP
+\fBurle.host\fP
+The host part of the effective (last) URL that was fetched. (Added in 8.1.0)
+.TP
+\fBurle.port\fP
+The port number of the effective (last) URL that was fetched. If no port
+number was specified, but the URL scheme is known, that scheme\(aqs default port
+number is shown. (Added in 8.1.0)
+.TP
+\fBurle.path\fP
+The path part of the effective (last) URL that was fetched. (Added in 8.1.0)
+.TP
+\fBurle.query\fP
+The query part of the effective (last) URL that was fetched. (Added in 8.1.0)
+.TP
+\fBurle.fragment\fP
+The fragment part of the effective (last) URL that was fetched. (Added in 8.1.0)
+.TP
+\fBurle.zoneid\fP
+The zone id part of the effective (last) URL that was fetched. (Added in 8.1.0)
+.TP
+\fBurlnum\fP
+The URL index number of this transfer, 0\-indexed. Unglobbed URLs share the
same index number as the origin globbed URL. (Added in 7.75.0)
.TP
-.B url_effective
+\fBurl_effective\fP
The URL that was fetched last. This is most meaningful if you have told curl
to follow location: headers.
.RE
.IP
-If --write-out is provided several times, the last set value will be used.
+If \fI\-w, \-\-write\-out\fP is provided several times, the last set value is used.
Example:
.nf
- curl -w '%{http_code}\\n' https://example.com
+ curl \-w \(aq%{response_code}\\n\(aq https://example.com
.fi
-See also \fI-v, --verbose\fP and \fI-I, --head\fP.
+See also \fI-v, \-\-verbose\fP and \fI-I, \-\-head\fP.
.IP "\-\-xattr"
When saving output to a file, this option tells curl to store certain file
metadata in extended file attributes. Currently, the URL is stored in the
@@ -5340,44 +5846,44 @@ xdg.origin.url attribute and, for HTTP, the content type is stored in
the mime_type attribute. If the file system does not support extended
attributes, a warning is issued.
-Providing --xattr multiple times has no extra effect.
-Disable it again with --no-xattr.
+Providing \fI\-\-xattr\fP multiple times has no extra effect.
+Disable it again with \-\-no\-xattr.
Example:
.nf
- curl --xattr -o storage https://example.com
+ curl \-\-xattr \-o storage https://example.com
.fi
-See also \fI-R, --remote-time\fP, \fI-w, --write-out\fP and \fI-v, --verbose\fP.
+See also \fI-R, \-\-remote\-time\fP, \fI-w, \-\-write\-out\fP and \fI-v, \-\-verbose\fP.
.SH FILES
.I ~/.curlrc
.RS
-Default config file, see \-\-config for details.
+Default config file, see \fI\-K, \-\-config\fP 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.
+the \fI\-x, \-\-proxy\fP option.
.IP "http_proxy [protocol://]<host>[:port]"
Sets the proxy server to use for HTTP.
.IP "HTTPS_PROXY [protocol://]<host>[:port]"
Sets the proxy server to use for HTTPS.
-.IP "[url-protocol]_PROXY [protocol://]<host>[:port]"
-Sets the proxy server to use for [url-protocol], where the protocol is a
+.IP "[url\-protocol]_PROXY [protocol://]<host>[: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://]<host>[:port]"
-Sets the proxy server to use if no protocol-specific proxy is set.
-.IP "NO_PROXY <comma-separated list of hosts/domains>"
+Sets the proxy server to use if no protocol\-specific proxy is set.
+.IP "NO_PROXY <comma\-separated list of hosts/domains>"
list of host names that should not go through any proxy. If set to an asterisk
-\(aq*' only, it matches all hosts. Each name in this list is matched as either
+\(aq*\(aq 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
+the \fI\-x, \-\-proxy\fP 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
@@ -5388,64 +5894,65 @@ 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.
-IPv6 numerical addresses are compared as strings, so they will only match if
-the representations are the same: "::1" is the same as "::0:1" but they do not
-match.
+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 <dir>"
On Windows, this variable is used when trying to find the home directory. If
the primary home variable are all unset.
.IP "COLUMNS <terminal width>"
-If set, the specified number of characters will be used as the terminal width
-when the alternative progress-bar is shown. If not set, curl will try to
-figure it out using other ways.
+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 <file>"
-If set, will be used as the \fI\-\-cacert\fP value.
+If set, it is used as the \fI\-\-cacert\fP value.
.IP "CURL_HOME <dir>"
If set, is the first variable curl checks when trying to find its home
-directory. If not set, it continues to check \fBXDG_CONFIG_HOME\fP.
+directory. If not set, it continues to check \fIXDG_CONFIG_HOME\fP
.IP "CURL_SSL_BACKEND <TLS backend>"
-If curl was built with support for "MultiSSL", meaning that it has built-in
+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 will make curl
-stay with the default.
+invoked. Setting a name that is not a built\-in alternative makes curl stay
+with the default.
-SSL backend names (case-insensitive): bearssl, gnutls, gskit, mbedtls,
-nss, openssl, rustls, schannel, secure-transport, wolfssl
+SSL backend names (case\-insensitive): \fBbearssl\fP, \fBgnutls\fP, \fBmbedtls\fP,
+\fBopenssl\fP, \fBrustls\fP, \fBschannel\fP, \fBsecure\-transport\fP, \fBwolfssl\fP
.IP "HOME <dir>"
If set, this is used to find the home directory when that is needed. Like when
-looking for the default .curlrc. \fBCURL_HOME\fP and \fBXDG_CONFIG_HOME\fP
+looking for the default .curlrc. \fICURL_HOME\fP and \fIXDG_CONFIG_HOME\fP
have preference.
.IP "QLOGDIR <directory name>"
If curl was built with HTTP/3 support, setting this environment variable to a
-local directory will make curl produce qlogs in that directory, using file
+local directory makes curl produce \fBqlogs\fP 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 both QUIC backends.
+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.
+Used on VMS when trying to detect if using a \fBDCL\fP or a \fBunix\fP shell.
.IP "SSL_CERT_DIR <dir>"
-If set, will be used as the \fI\-\-capath\fP value.
+If set, it is used as the \fI\-\-capath\fP value.
.IP "SSL_CERT_FILE <path>"
-If set, will be used as the \fI\-\-cacert\fP value.
+If set, it is used as the \fI\-\-cacert\fP value.
.IP "SSLKEYLOGFILE <file name>"
-If you set this environment variable to a file name, curl will store 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, NSS and wolfSSL.
+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 <dir>"
On Windows, this variable is used when trying to find the home directory. If
-the other, primary, variable are all unset. If set, curl will use the path
-\(dq$USERPROFILE\\Application Data".
+the other, primary, variable are all unset. If set, curl uses the path
+\fI\fP"$USERPROFILE\\Application Data"\fI\fP.
.IP "XDG_CONFIG_HOME <dir>"
-If \fBCURL_HOME\fP is not set, this variable is checked when looking for a
+If \fICURL_HOME\fP 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.
-If no protocol is specified in the proxy string or if the string does not match
-a supported one, the proxy will be treated as an HTTP proxy.
+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://"
@@ -5453,13 +5960,13 @@ Makes it use it as an HTTP proxy. The default if no scheme prefix is used.
.IP "https://"
Makes it treated as an \fBHTTPS\fP proxy.
.IP "socks4://"
-Makes it the equivalent of \-\-socks4
+Makes it the equivalent of \fI\-\-socks4\fP
.IP "socks4a://"
-Makes it the equivalent of \-\-socks4a
+Makes it the equivalent of \fI\-\-socks4a\fP
.IP "socks5://"
-Makes it the equivalent of \-\-socks5
+Makes it the equivalent of \fI\-\-socks5\fP
.IP "socks5h://"
-Makes it the equivalent of \-\-socks5-hostname
+Makes it the equivalent of \fI\-\-socks5\-hostname\fP
.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,
@@ -5474,7 +5981,7 @@ Failed to initialize.
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
+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.
@@ -5500,9 +6007,9 @@ 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.
+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.
+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
@@ -5519,18 +6026,18 @@ 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.
+appears if \fI\-f, \-\-fail\fP is used.
.IP 23
Write error. Curl could not write data to a local filesystem or similar.
.IP 25
-FTP could not STOR file. The server denied the STOR operation, used for FTP
-uploading.
+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
+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
@@ -5541,7 +6048,7 @@ resumed FTP transfers.
.IP 33
HTTP range error. The range "command" did not work.
.IP 34
-HTTP post error. Internal post-request generation error.
+HTTP post error. Internal post\-request generation error.
.IP 35
SSL connect error. The SSL handshaking failed.
.IP 36
@@ -5593,7 +6100,7 @@ Requested FTP SSL level failed.
.IP 65
Sending the data requires a rewind that failed.
.IP 66
-Failed to initialise SSL Engine.
+Failed to initialize SSL Engine.
.IP 67
The user name, password, or similar was not accepted and curl failed to log in.
.IP 68
@@ -5633,7 +6140,7 @@ Unable to parse FTP file list.
.IP 88
FTP chunk callback reported error.
.IP 89
-No connection available, the session will be queued.
+No connection available, the session is queued.
.IP 90
SSL public key does not matched pinned public key.
.IP 91
@@ -5650,11 +6157,17 @@ 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 will appear here in future releases. The existing ones
-are meant to never change.
+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
+If you experience any problems with curl, submit an issue in the project\(aqs 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
diff --git a/docs/examples/10-at-a-time.c b/docs/examples/10-at-a-time.c
index 1739a9e78..607775058 100644
--- a/docs/examples/10-at-a-time.c
+++ b/docs/examples/10-at-a-time.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -29,7 +29,7 @@
#include <errno.h>
#include <stdlib.h>
#include <string.h>
-#ifndef WIN32
+#ifndef _WIN32
# include <unistd.h>
#endif
#include <curl/curl.h>
@@ -95,13 +95,14 @@ static size_t write_cb(char *data, size_t n, size_t l, void *userp)
return n*l;
}
-static void add_transfer(CURLM *cm, int i)
+static void add_transfer(CURLM *cm, int i, int *left)
{
CURL *eh = curl_easy_init();
curl_easy_setopt(eh, CURLOPT_WRITEFUNCTION, write_cb);
curl_easy_setopt(eh, CURLOPT_URL, urls[i]);
curl_easy_setopt(eh, CURLOPT_PRIVATE, urls[i]);
curl_multi_add_handle(cm, eh);
+ (*left)++;
}
int main(void)
@@ -110,7 +111,7 @@ int main(void)
CURLMsg *msg;
unsigned int transfers = 0;
int msgs_left = -1;
- int still_alive = 1;
+ int left = 0;
curl_global_init(CURL_GLOBAL_ALL);
cm = curl_multi_init();
@@ -118,10 +119,12 @@ int main(void)
/* Limit the amount of simultaneous connections curl should allow: */
curl_multi_setopt(cm, CURLMOPT_MAXCONNECTS, (long)MAX_PARALLEL);
- for(transfers = 0; transfers < MAX_PARALLEL; transfers++)
- add_transfer(cm, transfers);
+ for(transfers = 0; transfers < MAX_PARALLEL && transfers < NUM_URLS;
+ transfers++)
+ add_transfer(cm, transfers, &left);
do {
+ int still_alive = 1;
curl_multi_perform(cm, &still_alive);
while((msg = curl_multi_info_read(cm, &msgs_left))) {
@@ -133,17 +136,18 @@ int main(void)
msg->data.result, curl_easy_strerror(msg->data.result), url);
curl_multi_remove_handle(cm, e);
curl_easy_cleanup(e);
+ left--;
}
else {
fprintf(stderr, "E: CURLMsg (%d)\n", msg->msg);
}
if(transfers < NUM_URLS)
- add_transfer(cm, transfers++);
+ add_transfer(cm, transfers++, &left);
}
- if(still_alive)
+ if(left)
curl_multi_wait(cm, NULL, 0, 1000, NULL);
- } while(still_alive || (transfers < NUM_URLS));
+ } while(left);
curl_multi_cleanup(cm);
curl_global_cleanup();
diff --git a/docs/examples/Makefile.am b/docs/examples/Makefile.am
index 6759d97f1..80ccc5925 100644
--- a/docs/examples/Makefile.am
+++ b/docs/examples/Makefile.am
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -24,8 +24,8 @@
AUTOMAKE_OPTIONS = foreign nostdinc
-EXTRA_DIST = README.md Makefile.example Makefile.inc Makefile.m32 \
- makefile.dj $(COMPLICATED_EXAMPLES) .checksrc
+EXTRA_DIST = README.md Makefile.example Makefile.inc Makefile.mk \
+ $(COMPLICATED_EXAMPLES) .checksrc
# Specify our include paths here, and do it relative to $(top_srcdir) and
# $(top_builddir), to ensure that these paths which belong to the library
@@ -34,7 +34,8 @@ EXTRA_DIST = README.md Makefile.example Makefile.inc Makefile.m32 \
#
# $(top_srcdir)/include is for libcurl's external include files
-AM_CPPFLAGS = -I$(top_srcdir)/include
+AM_CPPFLAGS = -I$(top_srcdir)/include \
+ -DCURL_DISABLE_DEPRECATION
LIBDIR = $(top_builddir)/lib
diff --git a/docs/examples/Makefile.example b/docs/examples/Makefile.example
index b05ca8ee1..b10cdecf5 100644
--- a/docs/examples/Makefile.example
+++ b/docs/examples/Makefile.example
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -34,7 +34,7 @@ CC = gcc
# Compiler flags, -g for debug, -c to make an object file
CFLAGS = -c -g
-# This should point to a directory that holds libcurl, if it isn't
+# This should point to a directory that holds libcurl, if it is not
# in the system's standard lib dir
# We also set a -L to include the directory where we have the openssl
# libraries
diff --git a/docs/examples/Makefile.in b/docs/examples/Makefile.in
index dc32d817a..9286442ab 100644
--- a/docs/examples/Makefile.in
+++ b/docs/examples/Makefile.in
@@ -21,7 +21,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -45,7 +45,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -138,13 +138,14 @@ host_triplet = @host@
@USE_CPPFLAG_CURL_STATICLIB_TRUE@am__append_1 = -DCURL_STATICLIB
check_PROGRAMS = 10-at-a-time$(EXEEXT) altsvc$(EXEEXT) \
anyauthput$(EXEEXT) certinfo$(EXEEXT) chkspeed$(EXEEXT) \
- cookie_interface$(EXEEXT) debug$(EXEEXT) \
- externalsocket$(EXEEXT) fileupload$(EXEEXT) \
- ftp-wildcard$(EXEEXT) ftpget$(EXEEXT) ftpgetinfo$(EXEEXT) \
- ftpgetresp$(EXEEXT) ftpsget$(EXEEXT) ftpupload$(EXEEXT) \
- ftpuploadfrommem$(EXEEXT) ftpuploadresume$(EXEEXT) \
- getinfo$(EXEEXT) getinmemory$(EXEEXT) getredirect$(EXEEXT) \
- getreferrer$(EXEEXT) headerapi$(EXEEXT) http-post$(EXEEXT) \
+ connect-to$(EXEEXT) cookie_interface$(EXEEXT) debug$(EXEEXT) \
+ default-scheme$(EXEEXT) externalsocket$(EXEEXT) \
+ fileupload$(EXEEXT) ftp-wildcard$(EXEEXT) ftpget$(EXEEXT) \
+ ftpgetinfo$(EXEEXT) ftpgetresp$(EXEEXT) ftpsget$(EXEEXT) \
+ ftpupload$(EXEEXT) ftpuploadfrommem$(EXEEXT) \
+ ftpuploadresume$(EXEEXT) getinfo$(EXEEXT) getinmemory$(EXEEXT) \
+ getredirect$(EXEEXT) getreferrer$(EXEEXT) headerapi$(EXEEXT) \
+ hsts-preload$(EXEEXT) http-options$(EXEEXT) http-post$(EXEEXT) \
http2-download$(EXEEXT) http2-pushinmemory$(EXEEXT) \
http2-serverpush$(EXEEXT) http2-upload$(EXEEXT) http3$(EXEEXT) \
http3-present$(EXEEXT) httpcustomheader$(EXEEXT) \
@@ -154,24 +155,27 @@ check_PROGRAMS = 10-at-a-time$(EXEEXT) altsvc$(EXEEXT) \
imap-examine$(EXEEXT) imap-fetch$(EXEEXT) imap-list$(EXEEXT) \
imap-lsub$(EXEEXT) imap-multi$(EXEEXT) imap-noop$(EXEEXT) \
imap-search$(EXEEXT) imap-ssl$(EXEEXT) imap-store$(EXEEXT) \
- imap-tls$(EXEEXT) multi-app$(EXEEXT) \
- multi-debugcallback$(EXEEXT) multi-double$(EXEEXT) \
- multi-formadd$(EXEEXT) multi-legacy$(EXEEXT) \
- multi-post$(EXEEXT) multi-single$(EXEEXT) parseurl$(EXEEXT) \
- persistent$(EXEEXT) pop3-authzid$(EXEEXT) pop3-dele$(EXEEXT) \
- pop3-list$(EXEEXT) pop3-multi$(EXEEXT) pop3-noop$(EXEEXT) \
- pop3-retr$(EXEEXT) pop3-ssl$(EXEEXT) pop3-stat$(EXEEXT) \
- pop3-tls$(EXEEXT) pop3-top$(EXEEXT) pop3-uidl$(EXEEXT) \
- post-callback$(EXEEXT) postinmemory$(EXEEXT) postit2$(EXEEXT) \
+ imap-tls$(EXEEXT) interface$(EXEEXT) ipv6$(EXEEXT) \
+ keepalive$(EXEEXT) localport$(EXEEXT) maxconnects$(EXEEXT) \
+ multi-app$(EXEEXT) multi-debugcallback$(EXEEXT) \
+ multi-double$(EXEEXT) multi-formadd$(EXEEXT) \
+ multi-legacy$(EXEEXT) multi-post$(EXEEXT) \
+ multi-single$(EXEEXT) parseurl$(EXEEXT) persistent$(EXEEXT) \
+ pop3-authzid$(EXEEXT) pop3-dele$(EXEEXT) pop3-list$(EXEEXT) \
+ pop3-multi$(EXEEXT) pop3-noop$(EXEEXT) pop3-retr$(EXEEXT) \
+ pop3-ssl$(EXEEXT) pop3-stat$(EXEEXT) pop3-tls$(EXEEXT) \
+ pop3-top$(EXEEXT) pop3-uidl$(EXEEXT) post-callback$(EXEEXT) \
+ postinmemory$(EXEEXT) postit2$(EXEEXT) \
postit2-formadd$(EXEEXT) progressfunc$(EXEEXT) \
- resolve$(EXEEXT) sendrecv$(EXEEXT) sepheaders$(EXEEXT) \
- sftpget$(EXEEXT) sftpuploadresume$(EXEEXT) \
- shared-connection-cache$(EXEEXT) simple$(EXEEXT) \
- simplepost$(EXEEXT) simplessl$(EXEEXT) smtp-authzid$(EXEEXT) \
- smtp-expn$(EXEEXT) smtp-mail$(EXEEXT) smtp-mime$(EXEEXT) \
- smtp-multi$(EXEEXT) smtp-ssl$(EXEEXT) smtp-tls$(EXEEXT) \
- smtp-vrfy$(EXEEXT) sslbackend$(EXEEXT) url2file$(EXEEXT) \
- urlapi$(EXEEXT)
+ protofeats$(EXEEXT) resolve$(EXEEXT) rtsp-options$(EXEEXT) \
+ sendrecv$(EXEEXT) sepheaders$(EXEEXT) sftpget$(EXEEXT) \
+ sftpuploadresume$(EXEEXT) shared-connection-cache$(EXEEXT) \
+ simple$(EXEEXT) simplepost$(EXEEXT) simplessl$(EXEEXT) \
+ smtp-authzid$(EXEEXT) smtp-expn$(EXEEXT) smtp-mail$(EXEEXT) \
+ smtp-mime$(EXEEXT) smtp-multi$(EXEEXT) smtp-ssl$(EXEEXT) \
+ smtp-tls$(EXEEXT) smtp-vrfy$(EXEEXT) sslbackend$(EXEEXT) \
+ unixsocket$(EXEEXT) url2file$(EXEEXT) urlapi$(EXEEXT) \
+ websocket$(EXEEXT) websocket-cb$(EXEEXT)
subdir = docs/examples
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.m4 \
@@ -180,7 +184,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.m4 \
$(top_srcdir)/m4/curl-confopts.m4 \
$(top_srcdir)/m4/curl-functions.m4 \
$(top_srcdir)/m4/curl-gnutls.m4 \
- $(top_srcdir)/m4/curl-mbedtls.m4 $(top_srcdir)/m4/curl-nss.m4 \
+ $(top_srcdir)/m4/curl-mbedtls.m4 \
$(top_srcdir)/m4/curl-openssl.m4 \
$(top_srcdir)/m4/curl-override.m4 \
$(top_srcdir)/m4/curl-reentrant.m4 \
@@ -246,6 +250,13 @@ chkspeed_LDADD = $(LDADD)
@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
@USE_EXPLICIT_LIB_DEPS_TRUE@chkspeed_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
+connect_to_SOURCES = connect-to.c
+connect_to_OBJECTS = connect-to.$(OBJEXT)
+connect_to_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@connect_to_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@connect_to_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
cookie_interface_SOURCES = cookie_interface.c
cookie_interface_OBJECTS = cookie_interface.$(OBJEXT)
cookie_interface_LDADD = $(LDADD)
@@ -259,6 +270,13 @@ debug_LDADD = $(LDADD)
@USE_EXPLICIT_LIB_DEPS_FALSE@debug_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
@USE_EXPLICIT_LIB_DEPS_TRUE@debug_DEPENDENCIES = $(LIBDIR)/libcurl.la
+default_scheme_SOURCES = default-scheme.c
+default_scheme_OBJECTS = default-scheme.$(OBJEXT)
+default_scheme_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@default_scheme_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@default_scheme_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
externalsocket_SOURCES = externalsocket.c
externalsocket_OBJECTS = externalsocket.$(OBJEXT)
externalsocket_LDADD = $(LDADD)
@@ -364,6 +382,20 @@ headerapi_LDADD = $(LDADD)
@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
@USE_EXPLICIT_LIB_DEPS_TRUE@headerapi_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
+hsts_preload_SOURCES = hsts-preload.c
+hsts_preload_OBJECTS = hsts-preload.$(OBJEXT)
+hsts_preload_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@hsts_preload_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@hsts_preload_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
+http_options_SOURCES = http-options.c
+http_options_OBJECTS = http-options.$(OBJEXT)
+http_options_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@http_options_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@http_options_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
http_post_SOURCES = http-post.c
http_post_OBJECTS = http-post.$(OBJEXT)
http_post_LDADD = $(LDADD)
@@ -544,6 +576,39 @@ imap_tls_LDADD = $(LDADD)
@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
@USE_EXPLICIT_LIB_DEPS_TRUE@imap_tls_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
+interface_SOURCES = interface.c
+interface_OBJECTS = interface.$(OBJEXT)
+interface_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@interface_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@interface_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
+ipv6_SOURCES = ipv6.c
+ipv6_OBJECTS = ipv6.$(OBJEXT)
+ipv6_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@ipv6_DEPENDENCIES = $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@ipv6_DEPENDENCIES = $(LIBDIR)/libcurl.la
+keepalive_SOURCES = keepalive.c
+keepalive_OBJECTS = keepalive.$(OBJEXT)
+keepalive_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@keepalive_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@keepalive_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
+localport_SOURCES = localport.c
+localport_OBJECTS = localport.$(OBJEXT)
+localport_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@localport_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@localport_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
+maxconnects_SOURCES = maxconnects.c
+maxconnects_OBJECTS = maxconnects.$(OBJEXT)
+maxconnects_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@maxconnects_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@maxconnects_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
multi_app_SOURCES = multi-app.c
multi_app_OBJECTS = multi-app.$(OBJEXT)
multi_app_LDADD = $(LDADD)
@@ -719,6 +784,13 @@ progressfunc_LDADD = $(LDADD)
@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
@USE_EXPLICIT_LIB_DEPS_TRUE@progressfunc_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
+protofeats_SOURCES = protofeats.c
+protofeats_OBJECTS = protofeats.$(OBJEXT)
+protofeats_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@protofeats_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@protofeats_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
resolve_SOURCES = resolve.c
resolve_OBJECTS = resolve.$(OBJEXT)
resolve_LDADD = $(LDADD)
@@ -726,6 +798,13 @@ resolve_LDADD = $(LDADD)
@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
@USE_EXPLICIT_LIB_DEPS_TRUE@resolve_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
+rtsp_options_SOURCES = rtsp-options.c
+rtsp_options_OBJECTS = rtsp-options.$(OBJEXT)
+rtsp_options_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@rtsp_options_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@rtsp_options_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
sendrecv_SOURCES = sendrecv.c
sendrecv_OBJECTS = sendrecv.$(OBJEXT)
sendrecv_LDADD = $(LDADD)
@@ -845,6 +924,13 @@ sslbackend_LDADD = $(LDADD)
@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
@USE_EXPLICIT_LIB_DEPS_TRUE@sslbackend_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
+unixsocket_SOURCES = unixsocket.c
+unixsocket_OBJECTS = unixsocket.$(OBJEXT)
+unixsocket_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@unixsocket_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@unixsocket_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
url2file_SOURCES = url2file.c
url2file_OBJECTS = url2file.$(OBJEXT)
url2file_LDADD = $(LDADD)
@@ -859,6 +945,20 @@ urlapi_LDADD = $(LDADD)
@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
@USE_EXPLICIT_LIB_DEPS_TRUE@urlapi_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
+websocket_SOURCES = websocket.c
+websocket_OBJECTS = websocket.$(OBJEXT)
+websocket_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@websocket_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@websocket_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
+websocket_cb_SOURCES = websocket-cb.c
+websocket_cb_OBJECTS = websocket-cb.$(OBJEXT)
+websocket_cb_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@websocket_cb_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@websocket_cb_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -877,7 +977,8 @@ am__maybe_remake_depfiles = depfiles
am__depfiles_remade = ./$(DEPDIR)/10-at-a-time.Po \
./$(DEPDIR)/altsvc.Po ./$(DEPDIR)/anyauthput.Po \
./$(DEPDIR)/certinfo.Po ./$(DEPDIR)/chkspeed.Po \
- ./$(DEPDIR)/cookie_interface.Po ./$(DEPDIR)/debug.Po \
+ ./$(DEPDIR)/connect-to.Po ./$(DEPDIR)/cookie_interface.Po \
+ ./$(DEPDIR)/debug.Po ./$(DEPDIR)/default-scheme.Po \
./$(DEPDIR)/externalsocket.Po ./$(DEPDIR)/fileupload.Po \
./$(DEPDIR)/ftp-wildcard.Po ./$(DEPDIR)/ftpget.Po \
./$(DEPDIR)/ftpgetinfo.Po ./$(DEPDIR)/ftpgetresp.Po \
@@ -885,7 +986,8 @@ am__depfiles_remade = ./$(DEPDIR)/10-at-a-time.Po \
./$(DEPDIR)/ftpuploadfrommem.Po ./$(DEPDIR)/ftpuploadresume.Po \
./$(DEPDIR)/getinfo.Po ./$(DEPDIR)/getinmemory.Po \
./$(DEPDIR)/getredirect.Po ./$(DEPDIR)/getreferrer.Po \
- ./$(DEPDIR)/headerapi.Po ./$(DEPDIR)/http-post.Po \
+ ./$(DEPDIR)/headerapi.Po ./$(DEPDIR)/hsts-preload.Po \
+ ./$(DEPDIR)/http-options.Po ./$(DEPDIR)/http-post.Po \
./$(DEPDIR)/http2-download.Po \
./$(DEPDIR)/http2-pushinmemory.Po \
./$(DEPDIR)/http2-serverpush.Po ./$(DEPDIR)/http2-upload.Po \
@@ -900,29 +1002,34 @@ am__depfiles_remade = ./$(DEPDIR)/10-at-a-time.Po \
./$(DEPDIR)/imap-multi.Po ./$(DEPDIR)/imap-noop.Po \
./$(DEPDIR)/imap-search.Po ./$(DEPDIR)/imap-ssl.Po \
./$(DEPDIR)/imap-store.Po ./$(DEPDIR)/imap-tls.Po \
- ./$(DEPDIR)/multi-app.Po ./$(DEPDIR)/multi-debugcallback.Po \
- ./$(DEPDIR)/multi-double.Po ./$(DEPDIR)/multi-formadd.Po \
- ./$(DEPDIR)/multi-legacy.Po ./$(DEPDIR)/multi-post.Po \
- ./$(DEPDIR)/multi-single.Po ./$(DEPDIR)/parseurl.Po \
- ./$(DEPDIR)/persistent.Po ./$(DEPDIR)/pop3-authzid.Po \
- ./$(DEPDIR)/pop3-dele.Po ./$(DEPDIR)/pop3-list.Po \
- ./$(DEPDIR)/pop3-multi.Po ./$(DEPDIR)/pop3-noop.Po \
- ./$(DEPDIR)/pop3-retr.Po ./$(DEPDIR)/pop3-ssl.Po \
- ./$(DEPDIR)/pop3-stat.Po ./$(DEPDIR)/pop3-tls.Po \
- ./$(DEPDIR)/pop3-top.Po ./$(DEPDIR)/pop3-uidl.Po \
- ./$(DEPDIR)/post-callback.Po ./$(DEPDIR)/postinmemory.Po \
- ./$(DEPDIR)/postit2-formadd.Po ./$(DEPDIR)/postit2.Po \
- ./$(DEPDIR)/progressfunc.Po ./$(DEPDIR)/resolve.Po \
- ./$(DEPDIR)/sendrecv.Po ./$(DEPDIR)/sepheaders.Po \
- ./$(DEPDIR)/sftpget.Po ./$(DEPDIR)/sftpuploadresume.Po \
+ ./$(DEPDIR)/interface.Po ./$(DEPDIR)/ipv6.Po \
+ ./$(DEPDIR)/keepalive.Po ./$(DEPDIR)/localport.Po \
+ ./$(DEPDIR)/maxconnects.Po ./$(DEPDIR)/multi-app.Po \
+ ./$(DEPDIR)/multi-debugcallback.Po ./$(DEPDIR)/multi-double.Po \
+ ./$(DEPDIR)/multi-formadd.Po ./$(DEPDIR)/multi-legacy.Po \
+ ./$(DEPDIR)/multi-post.Po ./$(DEPDIR)/multi-single.Po \
+ ./$(DEPDIR)/parseurl.Po ./$(DEPDIR)/persistent.Po \
+ ./$(DEPDIR)/pop3-authzid.Po ./$(DEPDIR)/pop3-dele.Po \
+ ./$(DEPDIR)/pop3-list.Po ./$(DEPDIR)/pop3-multi.Po \
+ ./$(DEPDIR)/pop3-noop.Po ./$(DEPDIR)/pop3-retr.Po \
+ ./$(DEPDIR)/pop3-ssl.Po ./$(DEPDIR)/pop3-stat.Po \
+ ./$(DEPDIR)/pop3-tls.Po ./$(DEPDIR)/pop3-top.Po \
+ ./$(DEPDIR)/pop3-uidl.Po ./$(DEPDIR)/post-callback.Po \
+ ./$(DEPDIR)/postinmemory.Po ./$(DEPDIR)/postit2-formadd.Po \
+ ./$(DEPDIR)/postit2.Po ./$(DEPDIR)/progressfunc.Po \
+ ./$(DEPDIR)/protofeats.Po ./$(DEPDIR)/resolve.Po \
+ ./$(DEPDIR)/rtsp-options.Po ./$(DEPDIR)/sendrecv.Po \
+ ./$(DEPDIR)/sepheaders.Po ./$(DEPDIR)/sftpget.Po \
+ ./$(DEPDIR)/sftpuploadresume.Po \
./$(DEPDIR)/shared-connection-cache.Po ./$(DEPDIR)/simple.Po \
./$(DEPDIR)/simplepost.Po ./$(DEPDIR)/simplessl.Po \
./$(DEPDIR)/smtp-authzid.Po ./$(DEPDIR)/smtp-expn.Po \
./$(DEPDIR)/smtp-mail.Po ./$(DEPDIR)/smtp-mime.Po \
./$(DEPDIR)/smtp-multi.Po ./$(DEPDIR)/smtp-ssl.Po \
./$(DEPDIR)/smtp-tls.Po ./$(DEPDIR)/smtp-vrfy.Po \
- ./$(DEPDIR)/sslbackend.Po ./$(DEPDIR)/url2file.Po \
- ./$(DEPDIR)/urlapi.Po
+ ./$(DEPDIR)/sslbackend.Po ./$(DEPDIR)/unixsocket.Po \
+ ./$(DEPDIR)/url2file.Po ./$(DEPDIR)/urlapi.Po \
+ ./$(DEPDIR)/websocket-cb.Po ./$(DEPDIR)/websocket.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -943,49 +1050,57 @@ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = 10-at-a-time.c altsvc.c anyauthput.c certinfo.c chkspeed.c \
- cookie_interface.c debug.c externalsocket.c fileupload.c \
- ftp-wildcard.c ftpget.c ftpgetinfo.c ftpgetresp.c ftpsget.c \
- ftpupload.c ftpuploadfrommem.c ftpuploadresume.c getinfo.c \
- getinmemory.c getredirect.c getreferrer.c headerapi.c \
- http-post.c http2-download.c http2-pushinmemory.c \
- http2-serverpush.c http2-upload.c http3.c http3-present.c \
- httpcustomheader.c httpput.c httpput-postfields.c https.c \
- imap-append.c imap-authzid.c imap-copy.c imap-create.c \
- imap-delete.c imap-examine.c imap-fetch.c imap-list.c \
- imap-lsub.c imap-multi.c imap-noop.c imap-search.c imap-ssl.c \
- imap-store.c imap-tls.c multi-app.c multi-debugcallback.c \
- multi-double.c multi-formadd.c multi-legacy.c multi-post.c \
- multi-single.c parseurl.c persistent.c pop3-authzid.c \
- pop3-dele.c pop3-list.c pop3-multi.c pop3-noop.c pop3-retr.c \
- pop3-ssl.c pop3-stat.c pop3-tls.c pop3-top.c pop3-uidl.c \
- post-callback.c postinmemory.c postit2.c postit2-formadd.c \
- progressfunc.c resolve.c sendrecv.c sepheaders.c sftpget.c \
- sftpuploadresume.c shared-connection-cache.c simple.c \
- simplepost.c simplessl.c smtp-authzid.c smtp-expn.c \
+ connect-to.c cookie_interface.c debug.c default-scheme.c \
+ externalsocket.c fileupload.c ftp-wildcard.c ftpget.c \
+ ftpgetinfo.c ftpgetresp.c ftpsget.c ftpupload.c \
+ ftpuploadfrommem.c ftpuploadresume.c getinfo.c getinmemory.c \
+ getredirect.c getreferrer.c headerapi.c hsts-preload.c \
+ http-options.c http-post.c http2-download.c \
+ http2-pushinmemory.c http2-serverpush.c http2-upload.c http3.c \
+ http3-present.c httpcustomheader.c httpput.c \
+ httpput-postfields.c https.c imap-append.c imap-authzid.c \
+ imap-copy.c imap-create.c imap-delete.c imap-examine.c \
+ imap-fetch.c imap-list.c imap-lsub.c imap-multi.c imap-noop.c \
+ imap-search.c imap-ssl.c imap-store.c imap-tls.c interface.c \
+ ipv6.c keepalive.c localport.c maxconnects.c multi-app.c \
+ multi-debugcallback.c multi-double.c multi-formadd.c \
+ multi-legacy.c multi-post.c multi-single.c parseurl.c \
+ persistent.c pop3-authzid.c pop3-dele.c pop3-list.c \
+ pop3-multi.c pop3-noop.c pop3-retr.c pop3-ssl.c pop3-stat.c \
+ pop3-tls.c pop3-top.c pop3-uidl.c post-callback.c \
+ postinmemory.c postit2.c postit2-formadd.c progressfunc.c \
+ protofeats.c resolve.c rtsp-options.c sendrecv.c sepheaders.c \
+ sftpget.c sftpuploadresume.c shared-connection-cache.c \
+ simple.c simplepost.c simplessl.c smtp-authzid.c smtp-expn.c \
smtp-mail.c smtp-mime.c smtp-multi.c smtp-ssl.c smtp-tls.c \
- smtp-vrfy.c sslbackend.c url2file.c urlapi.c
+ smtp-vrfy.c sslbackend.c unixsocket.c url2file.c urlapi.c \
+ websocket.c websocket-cb.c
DIST_SOURCES = 10-at-a-time.c altsvc.c anyauthput.c certinfo.c \
- chkspeed.c cookie_interface.c debug.c externalsocket.c \
- fileupload.c ftp-wildcard.c ftpget.c ftpgetinfo.c ftpgetresp.c \
- ftpsget.c ftpupload.c ftpuploadfrommem.c ftpuploadresume.c \
- getinfo.c getinmemory.c getredirect.c getreferrer.c \
- headerapi.c http-post.c http2-download.c http2-pushinmemory.c \
- http2-serverpush.c http2-upload.c http3.c http3-present.c \
- httpcustomheader.c httpput.c httpput-postfields.c https.c \
- imap-append.c imap-authzid.c imap-copy.c imap-create.c \
- imap-delete.c imap-examine.c imap-fetch.c imap-list.c \
- imap-lsub.c imap-multi.c imap-noop.c imap-search.c imap-ssl.c \
- imap-store.c imap-tls.c multi-app.c multi-debugcallback.c \
- multi-double.c multi-formadd.c multi-legacy.c multi-post.c \
- multi-single.c parseurl.c persistent.c pop3-authzid.c \
- pop3-dele.c pop3-list.c pop3-multi.c pop3-noop.c pop3-retr.c \
- pop3-ssl.c pop3-stat.c pop3-tls.c pop3-top.c pop3-uidl.c \
- post-callback.c postinmemory.c postit2.c postit2-formadd.c \
- progressfunc.c resolve.c sendrecv.c sepheaders.c sftpget.c \
- sftpuploadresume.c shared-connection-cache.c simple.c \
- simplepost.c simplessl.c smtp-authzid.c smtp-expn.c \
+ chkspeed.c connect-to.c cookie_interface.c debug.c \
+ default-scheme.c externalsocket.c fileupload.c ftp-wildcard.c \
+ ftpget.c ftpgetinfo.c ftpgetresp.c ftpsget.c ftpupload.c \
+ ftpuploadfrommem.c ftpuploadresume.c getinfo.c getinmemory.c \
+ getredirect.c getreferrer.c headerapi.c hsts-preload.c \
+ http-options.c http-post.c http2-download.c \
+ http2-pushinmemory.c http2-serverpush.c http2-upload.c http3.c \
+ http3-present.c httpcustomheader.c httpput.c \
+ httpput-postfields.c https.c imap-append.c imap-authzid.c \
+ imap-copy.c imap-create.c imap-delete.c imap-examine.c \
+ imap-fetch.c imap-list.c imap-lsub.c imap-multi.c imap-noop.c \
+ imap-search.c imap-ssl.c imap-store.c imap-tls.c interface.c \
+ ipv6.c keepalive.c localport.c maxconnects.c multi-app.c \
+ multi-debugcallback.c multi-double.c multi-formadd.c \
+ multi-legacy.c multi-post.c multi-single.c parseurl.c \
+ persistent.c pop3-authzid.c pop3-dele.c pop3-list.c \
+ pop3-multi.c pop3-noop.c pop3-retr.c pop3-ssl.c pop3-stat.c \
+ pop3-tls.c pop3-top.c pop3-uidl.c post-callback.c \
+ postinmemory.c postit2.c postit2-formadd.c progressfunc.c \
+ protofeats.c resolve.c rtsp-options.c sendrecv.c sepheaders.c \
+ sftpget.c sftpuploadresume.c shared-connection-cache.c \
+ simple.c simplepost.c simplessl.c smtp-authzid.c smtp-expn.c \
smtp-mail.c smtp-mime.c smtp-multi.c smtp-ssl.c smtp-tls.c \
- smtp-vrfy.c sslbackend.c url2file.c urlapi.c
+ smtp-vrfy.c sslbackend.c unixsocket.c url2file.c urlapi.c \
+ websocket.c websocket-cb.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -1014,6 +1129,8 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APACHECTL = @APACHECTL@
+APXS = @APXS@
AR = @AR@
AR_FLAGS = @AR_FLAGS@
AS = @AS@
@@ -1022,6 +1139,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@
+CADDY = @CADDY@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
@@ -1085,6 +1203,8 @@ HAVE_LIBZ = @HAVE_LIBZ@
HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
HAVE_PROTO_BSDSOCKET_H = @HAVE_PROTO_BSDSOCKET_H@
HAVE_ZSTD = @HAVE_ZSTD@
+HTTPD = @HTTPD@
+HTTPD_NGHTTPX = @HTTPD_NGHTTPX@
IDN_ENABLED = @IDN_ENABLED@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -1114,7 +1234,6 @@ MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
NROFF = @NROFF@
-NSS_LIBS = @NSS_LIBS@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
@@ -1145,6 +1264,7 @@ SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@
SUPPORT_FEATURES = @SUPPORT_FEATURES@
SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_NGHTTPX = @TEST_NGHTTPX@
USE_ARES = @USE_ARES@
USE_BEARSSL = @USE_BEARSSL@
USE_GNUTLS = @USE_GNUTLS@
@@ -1158,9 +1278,8 @@ USE_NGHTTP2 = @USE_NGHTTP2@
USE_NGHTTP3 = @USE_NGHTTP3@
USE_NGTCP2 = @USE_NGTCP2@
USE_NGTCP2_CRYPTO_GNUTLS = @USE_NGTCP2_CRYPTO_GNUTLS@
-USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@
+USE_NGTCP2_CRYPTO_QUICTLS = @USE_NGTCP2_CRYPTO_QUICTLS@
USE_NGTCP2_CRYPTO_WOLFSSL = @USE_NGTCP2_CRYPTO_WOLFSSL@
-USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_RUSTLS = @USE_RUSTLS@
@@ -1232,8 +1351,8 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AUTOMAKE_OPTIONS = foreign nostdinc
-EXTRA_DIST = README.md Makefile.example Makefile.inc Makefile.m32 \
- makefile.dj $(COMPLICATED_EXAMPLES) .checksrc
+EXTRA_DIST = README.md Makefile.example Makefile.inc Makefile.mk \
+ $(COMPLICATED_EXAMPLES) .checksrc
# Specify our include paths here, and do it relative to $(top_srcdir) and
@@ -1244,7 +1363,8 @@ EXTRA_DIST = README.md Makefile.example Makefile.inc Makefile.m32 \
# $(top_srcdir)/include is for libcurl's external include files
# Avoid libcurl obsolete stuff
-AM_CPPFLAGS = -I$(top_srcdir)/include -DCURL_NO_OLDIES $(am__append_1)
+AM_CPPFLAGS = -I$(top_srcdir)/include -DCURL_DISABLE_DEPRECATION \
+ -DCURL_NO_OLDIES $(am__append_1)
LIBDIR = $(top_builddir)/lib
@USE_EXPLICIT_LIB_DEPS_FALSE@LDADD = $(LIBDIR)/libcurl.la
@@ -1252,11 +1372,10 @@ LIBDIR = $(top_builddir)/lib
@USE_EXPLICIT_LIB_DEPS_TRUE@LDADD = $(LIBDIR)/libcurl.la @LIBCURL_LIBS@
# These examples require external dependencies that may not be commonly
-# available on POSIX systems, so don't bother attempting to compile them here.
+# available on POSIX systems, so do not bother attempting to compile them here.
COMPLICATED_EXAMPLES = \
cacertinmem.c \
crawler.c \
- curlgtk.c \
ephiperfifo.c \
evhiperfifo.c \
ghiper.c \
@@ -1267,7 +1386,6 @@ COMPLICATED_EXAMPLES = \
multi-event.c \
multi-uv.c \
multithread.c \
- opensslthreadlock.c \
sessioninfo.c \
smooth-gtk-thread.c \
synctime.c \
@@ -1344,6 +1462,10 @@ chkspeed$(EXEEXT): $(chkspeed_OBJECTS) $(chkspeed_DEPENDENCIES) $(EXTRA_chkspeed
@rm -f chkspeed$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(chkspeed_OBJECTS) $(chkspeed_LDADD) $(LIBS)
+connect-to$(EXEEXT): $(connect_to_OBJECTS) $(connect_to_DEPENDENCIES) $(EXTRA_connect_to_DEPENDENCIES)
+ @rm -f connect-to$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(connect_to_OBJECTS) $(connect_to_LDADD) $(LIBS)
+
cookie_interface$(EXEEXT): $(cookie_interface_OBJECTS) $(cookie_interface_DEPENDENCIES) $(EXTRA_cookie_interface_DEPENDENCIES)
@rm -f cookie_interface$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(cookie_interface_OBJECTS) $(cookie_interface_LDADD) $(LIBS)
@@ -1352,6 +1474,10 @@ debug$(EXEEXT): $(debug_OBJECTS) $(debug_DEPENDENCIES) $(EXTRA_debug_DEPENDENCIE
@rm -f debug$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(debug_OBJECTS) $(debug_LDADD) $(LIBS)
+default-scheme$(EXEEXT): $(default_scheme_OBJECTS) $(default_scheme_DEPENDENCIES) $(EXTRA_default_scheme_DEPENDENCIES)
+ @rm -f default-scheme$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(default_scheme_OBJECTS) $(default_scheme_LDADD) $(LIBS)
+
externalsocket$(EXEEXT): $(externalsocket_OBJECTS) $(externalsocket_DEPENDENCIES) $(EXTRA_externalsocket_DEPENDENCIES)
@rm -f externalsocket$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(externalsocket_OBJECTS) $(externalsocket_LDADD) $(LIBS)
@@ -1412,6 +1538,14 @@ headerapi$(EXEEXT): $(headerapi_OBJECTS) $(headerapi_DEPENDENCIES) $(EXTRA_heade
@rm -f headerapi$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(headerapi_OBJECTS) $(headerapi_LDADD) $(LIBS)
+hsts-preload$(EXEEXT): $(hsts_preload_OBJECTS) $(hsts_preload_DEPENDENCIES) $(EXTRA_hsts_preload_DEPENDENCIES)
+ @rm -f hsts-preload$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(hsts_preload_OBJECTS) $(hsts_preload_LDADD) $(LIBS)
+
+http-options$(EXEEXT): $(http_options_OBJECTS) $(http_options_DEPENDENCIES) $(EXTRA_http_options_DEPENDENCIES)
+ @rm -f http-options$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(http_options_OBJECTS) $(http_options_LDADD) $(LIBS)
+
http-post$(EXEEXT): $(http_post_OBJECTS) $(http_post_DEPENDENCIES) $(EXTRA_http_post_DEPENDENCIES)
@rm -f http-post$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(http_post_OBJECTS) $(http_post_LDADD) $(LIBS)
@@ -1516,6 +1650,26 @@ imap-tls$(EXEEXT): $(imap_tls_OBJECTS) $(imap_tls_DEPENDENCIES) $(EXTRA_imap_tls
@rm -f imap-tls$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(imap_tls_OBJECTS) $(imap_tls_LDADD) $(LIBS)
+interface$(EXEEXT): $(interface_OBJECTS) $(interface_DEPENDENCIES) $(EXTRA_interface_DEPENDENCIES)
+ @rm -f interface$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(interface_OBJECTS) $(interface_LDADD) $(LIBS)
+
+ipv6$(EXEEXT): $(ipv6_OBJECTS) $(ipv6_DEPENDENCIES) $(EXTRA_ipv6_DEPENDENCIES)
+ @rm -f ipv6$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(ipv6_OBJECTS) $(ipv6_LDADD) $(LIBS)
+
+keepalive$(EXEEXT): $(keepalive_OBJECTS) $(keepalive_DEPENDENCIES) $(EXTRA_keepalive_DEPENDENCIES)
+ @rm -f keepalive$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(keepalive_OBJECTS) $(keepalive_LDADD) $(LIBS)
+
+localport$(EXEEXT): $(localport_OBJECTS) $(localport_DEPENDENCIES) $(EXTRA_localport_DEPENDENCIES)
+ @rm -f localport$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(localport_OBJECTS) $(localport_LDADD) $(LIBS)
+
+maxconnects$(EXEEXT): $(maxconnects_OBJECTS) $(maxconnects_DEPENDENCIES) $(EXTRA_maxconnects_DEPENDENCIES)
+ @rm -f maxconnects$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(maxconnects_OBJECTS) $(maxconnects_LDADD) $(LIBS)
+
multi-app$(EXEEXT): $(multi_app_OBJECTS) $(multi_app_DEPENDENCIES) $(EXTRA_multi_app_DEPENDENCIES)
@rm -f multi-app$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(multi_app_OBJECTS) $(multi_app_LDADD) $(LIBS)
@@ -1616,10 +1770,18 @@ progressfunc$(EXEEXT): $(progressfunc_OBJECTS) $(progressfunc_DEPENDENCIES) $(EX
@rm -f progressfunc$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(progressfunc_OBJECTS) $(progressfunc_LDADD) $(LIBS)
+protofeats$(EXEEXT): $(protofeats_OBJECTS) $(protofeats_DEPENDENCIES) $(EXTRA_protofeats_DEPENDENCIES)
+ @rm -f protofeats$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(protofeats_OBJECTS) $(protofeats_LDADD) $(LIBS)
+
resolve$(EXEEXT): $(resolve_OBJECTS) $(resolve_DEPENDENCIES) $(EXTRA_resolve_DEPENDENCIES)
@rm -f resolve$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(resolve_OBJECTS) $(resolve_LDADD) $(LIBS)
+rtsp-options$(EXEEXT): $(rtsp_options_OBJECTS) $(rtsp_options_DEPENDENCIES) $(EXTRA_rtsp_options_DEPENDENCIES)
+ @rm -f rtsp-options$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(rtsp_options_OBJECTS) $(rtsp_options_LDADD) $(LIBS)
+
sendrecv$(EXEEXT): $(sendrecv_OBJECTS) $(sendrecv_DEPENDENCIES) $(EXTRA_sendrecv_DEPENDENCIES)
@rm -f sendrecv$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(sendrecv_OBJECTS) $(sendrecv_LDADD) $(LIBS)
@@ -1688,6 +1850,10 @@ sslbackend$(EXEEXT): $(sslbackend_OBJECTS) $(sslbackend_DEPENDENCIES) $(EXTRA_ss
@rm -f sslbackend$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(sslbackend_OBJECTS) $(sslbackend_LDADD) $(LIBS)
+unixsocket$(EXEEXT): $(unixsocket_OBJECTS) $(unixsocket_DEPENDENCIES) $(EXTRA_unixsocket_DEPENDENCIES)
+ @rm -f unixsocket$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(unixsocket_OBJECTS) $(unixsocket_LDADD) $(LIBS)
+
url2file$(EXEEXT): $(url2file_OBJECTS) $(url2file_DEPENDENCIES) $(EXTRA_url2file_DEPENDENCIES)
@rm -f url2file$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(url2file_OBJECTS) $(url2file_LDADD) $(LIBS)
@@ -1696,6 +1862,14 @@ urlapi$(EXEEXT): $(urlapi_OBJECTS) $(urlapi_DEPENDENCIES) $(EXTRA_urlapi_DEPENDE
@rm -f urlapi$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(urlapi_OBJECTS) $(urlapi_LDADD) $(LIBS)
+websocket$(EXEEXT): $(websocket_OBJECTS) $(websocket_DEPENDENCIES) $(EXTRA_websocket_DEPENDENCIES)
+ @rm -f websocket$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(websocket_OBJECTS) $(websocket_LDADD) $(LIBS)
+
+websocket-cb$(EXEEXT): $(websocket_cb_OBJECTS) $(websocket_cb_DEPENDENCIES) $(EXTRA_websocket_cb_DEPENDENCIES)
+ @rm -f websocket-cb$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(websocket_cb_OBJECTS) $(websocket_cb_LDADD) $(LIBS)
+
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -1707,8 +1881,10 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/anyauthput.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/certinfo.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chkspeed.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connect-to.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cookie_interface.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/default-scheme.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/externalsocket.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileupload.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftp-wildcard.Po@am__quote@ # am--include-marker
@@ -1724,6 +1900,8 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getredirect.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getreferrer.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/headerapi.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hsts-preload.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http-options.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http-post.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http2-download.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http2-pushinmemory.Po@am__quote@ # am--include-marker
@@ -1750,6 +1928,11 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imap-ssl.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imap-store.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imap-tls.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interface.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipv6.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keepalive.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localport.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maxconnects.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-app.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-debugcallback.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi-double.Po@am__quote@ # am--include-marker
@@ -1775,7 +1958,9 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/postit2-formadd.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/postit2.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/progressfunc.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/protofeats.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resolve.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtsp-options.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendrecv.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sepheaders.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sftpget.Po@am__quote@ # am--include-marker
@@ -1793,8 +1978,11 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-tls.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp-vrfy.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sslbackend.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unixsocket.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/url2file.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/urlapi.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/websocket-cb.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/websocket.Po@am__quote@ # am--include-marker
$(am__depfiles_remade):
@$(MKDIR_P) $(@D)
@@ -1962,8 +2150,10 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/anyauthput.Po
-rm -f ./$(DEPDIR)/certinfo.Po
-rm -f ./$(DEPDIR)/chkspeed.Po
+ -rm -f ./$(DEPDIR)/connect-to.Po
-rm -f ./$(DEPDIR)/cookie_interface.Po
-rm -f ./$(DEPDIR)/debug.Po
+ -rm -f ./$(DEPDIR)/default-scheme.Po
-rm -f ./$(DEPDIR)/externalsocket.Po
-rm -f ./$(DEPDIR)/fileupload.Po
-rm -f ./$(DEPDIR)/ftp-wildcard.Po
@@ -1979,6 +2169,8 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/getredirect.Po
-rm -f ./$(DEPDIR)/getreferrer.Po
-rm -f ./$(DEPDIR)/headerapi.Po
+ -rm -f ./$(DEPDIR)/hsts-preload.Po
+ -rm -f ./$(DEPDIR)/http-options.Po
-rm -f ./$(DEPDIR)/http-post.Po
-rm -f ./$(DEPDIR)/http2-download.Po
-rm -f ./$(DEPDIR)/http2-pushinmemory.Po
@@ -2005,6 +2197,11 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/imap-ssl.Po
-rm -f ./$(DEPDIR)/imap-store.Po
-rm -f ./$(DEPDIR)/imap-tls.Po
+ -rm -f ./$(DEPDIR)/interface.Po
+ -rm -f ./$(DEPDIR)/ipv6.Po
+ -rm -f ./$(DEPDIR)/keepalive.Po
+ -rm -f ./$(DEPDIR)/localport.Po
+ -rm -f ./$(DEPDIR)/maxconnects.Po
-rm -f ./$(DEPDIR)/multi-app.Po
-rm -f ./$(DEPDIR)/multi-debugcallback.Po
-rm -f ./$(DEPDIR)/multi-double.Po
@@ -2030,7 +2227,9 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/postit2-formadd.Po
-rm -f ./$(DEPDIR)/postit2.Po
-rm -f ./$(DEPDIR)/progressfunc.Po
+ -rm -f ./$(DEPDIR)/protofeats.Po
-rm -f ./$(DEPDIR)/resolve.Po
+ -rm -f ./$(DEPDIR)/rtsp-options.Po
-rm -f ./$(DEPDIR)/sendrecv.Po
-rm -f ./$(DEPDIR)/sepheaders.Po
-rm -f ./$(DEPDIR)/sftpget.Po
@@ -2048,8 +2247,11 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/smtp-tls.Po
-rm -f ./$(DEPDIR)/smtp-vrfy.Po
-rm -f ./$(DEPDIR)/sslbackend.Po
+ -rm -f ./$(DEPDIR)/unixsocket.Po
-rm -f ./$(DEPDIR)/url2file.Po
-rm -f ./$(DEPDIR)/urlapi.Po
+ -rm -f ./$(DEPDIR)/websocket-cb.Po
+ -rm -f ./$(DEPDIR)/websocket.Po
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
@@ -2100,8 +2302,10 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/anyauthput.Po
-rm -f ./$(DEPDIR)/certinfo.Po
-rm -f ./$(DEPDIR)/chkspeed.Po
+ -rm -f ./$(DEPDIR)/connect-to.Po
-rm -f ./$(DEPDIR)/cookie_interface.Po
-rm -f ./$(DEPDIR)/debug.Po
+ -rm -f ./$(DEPDIR)/default-scheme.Po
-rm -f ./$(DEPDIR)/externalsocket.Po
-rm -f ./$(DEPDIR)/fileupload.Po
-rm -f ./$(DEPDIR)/ftp-wildcard.Po
@@ -2117,6 +2321,8 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/getredirect.Po
-rm -f ./$(DEPDIR)/getreferrer.Po
-rm -f ./$(DEPDIR)/headerapi.Po
+ -rm -f ./$(DEPDIR)/hsts-preload.Po
+ -rm -f ./$(DEPDIR)/http-options.Po
-rm -f ./$(DEPDIR)/http-post.Po
-rm -f ./$(DEPDIR)/http2-download.Po
-rm -f ./$(DEPDIR)/http2-pushinmemory.Po
@@ -2143,6 +2349,11 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/imap-ssl.Po
-rm -f ./$(DEPDIR)/imap-store.Po
-rm -f ./$(DEPDIR)/imap-tls.Po
+ -rm -f ./$(DEPDIR)/interface.Po
+ -rm -f ./$(DEPDIR)/ipv6.Po
+ -rm -f ./$(DEPDIR)/keepalive.Po
+ -rm -f ./$(DEPDIR)/localport.Po
+ -rm -f ./$(DEPDIR)/maxconnects.Po
-rm -f ./$(DEPDIR)/multi-app.Po
-rm -f ./$(DEPDIR)/multi-debugcallback.Po
-rm -f ./$(DEPDIR)/multi-double.Po
@@ -2168,7 +2379,9 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/postit2-formadd.Po
-rm -f ./$(DEPDIR)/postit2.Po
-rm -f ./$(DEPDIR)/progressfunc.Po
+ -rm -f ./$(DEPDIR)/protofeats.Po
-rm -f ./$(DEPDIR)/resolve.Po
+ -rm -f ./$(DEPDIR)/rtsp-options.Po
-rm -f ./$(DEPDIR)/sendrecv.Po
-rm -f ./$(DEPDIR)/sepheaders.Po
-rm -f ./$(DEPDIR)/sftpget.Po
@@ -2186,8 +2399,11 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/smtp-tls.Po
-rm -f ./$(DEPDIR)/smtp-vrfy.Po
-rm -f ./$(DEPDIR)/sslbackend.Po
+ -rm -f ./$(DEPDIR)/unixsocket.Po
-rm -f ./$(DEPDIR)/url2file.Po
-rm -f ./$(DEPDIR)/urlapi.Po
+ -rm -f ./$(DEPDIR)/websocket-cb.Po
+ -rm -f ./$(DEPDIR)/websocket.Po
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
diff --git a/docs/examples/Makefile.inc b/docs/examples/Makefile.inc
index 42247fe61..1f1996c37 100644
--- a/docs/examples/Makefile.inc
+++ b/docs/examples/Makefile.inc
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -29,8 +29,10 @@ check_PROGRAMS = \
anyauthput \
certinfo \
chkspeed \
+ connect-to \
cookie_interface \
debug \
+ default-scheme \
externalsocket \
fileupload \
ftp-wildcard \
@@ -46,6 +48,8 @@ check_PROGRAMS = \
getredirect \
getreferrer \
headerapi \
+ hsts-preload \
+ http-options \
http-post \
http2-download \
http2-pushinmemory \
@@ -72,6 +76,11 @@ check_PROGRAMS = \
imap-ssl \
imap-store \
imap-tls \
+ interface \
+ ipv6 \
+ keepalive \
+ localport \
+ maxconnects \
multi-app \
multi-debugcallback \
multi-double \
@@ -97,7 +106,9 @@ check_PROGRAMS = \
postit2 \
postit2-formadd \
progressfunc \
+ protofeats \
resolve \
+ rtsp-options \
sendrecv \
sepheaders \
sftpget \
@@ -115,15 +126,17 @@ check_PROGRAMS = \
smtp-tls \
smtp-vrfy \
sslbackend \
+ unixsocket \
url2file \
- urlapi
+ urlapi \
+ websocket \
+ websocket-cb
# These examples require external dependencies that may not be commonly
-# available on POSIX systems, so don't bother attempting to compile them here.
+# available on POSIX systems, so do not bother attempting to compile them here.
COMPLICATED_EXAMPLES = \
cacertinmem.c \
crawler.c \
- curlgtk.c \
ephiperfifo.c \
evhiperfifo.c \
ghiper.c \
@@ -134,7 +147,6 @@ COMPLICATED_EXAMPLES = \
multi-event.c \
multi-uv.c \
multithread.c \
- opensslthreadlock.c \
sessioninfo.c \
smooth-gtk-thread.c \
synctime.c \
diff --git a/docs/examples/Makefile.m32 b/docs/examples/Makefile.mk
index 076608216..599acee0b 100644
--- a/docs/examples/Makefile.m32
+++ b/docs/examples/Makefile.mk
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1999 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -22,37 +22,53 @@
#
#***************************************************************************
-# Build libcurl via lib/Makefile.m32 first.
+# Build libcurl via lib/Makefile.mk first.
PROOT := ../..
+ifeq ($(findstring -static,$(CFG)),)
+ DYN := 1
+endif
+
+### Common
+
+include $(PROOT)/lib/Makefile.mk
+
+### Local
+
+CPPFLAGS += -DCURL_NO_OLDIES
LDFLAGS += -L$(PROOT)/lib
-LIBS += -lcurl
+LIBS := -lcurl $(LIBS)
-ifeq ($(findstring -static,$(CFG)),)
+ifdef DYN
curl_DEPENDENCIES += $(PROOT)/lib/libcurl.dll.a
- DYN := 1
else
curl_DEPENDENCIES := $(PROOT)/lib/libcurl.a
- CPPFLAGS += -DCURL_STATICLIB
- LDFLAGS += -static
+ ifdef WIN32
+ CPPFLAGS += -DCURL_STATICLIB
+ LDFLAGS += -static
+ endif
endif
-LIBS += -lws2_32
+ifdef WIN32
+ LIBS += -lws2_32
+endif
### Sources and targets
# Provides check_PROGRAMS
include Makefile.inc
-TARGETS := $(patsubst %,%.exe,$(strip $(check_PROGRAMS) synctime))
-TOCLEAN := $(TARGETS:.exe=.o)
+ifdef WIN32
+check_PROGRAMS += synctime
+endif
-### Local rules
+TARGETS := $(patsubst %,%$(BIN_EXT),$(strip $(check_PROGRAMS)))
+TOCLEAN := $(TARGETS)
-%.exe: %.o $(curl_DEPENDENCIES)
- $(CC) $(LDFLAGS) $(CURL_LDFLAGS_BIN) -o $@ $< $(LIBS)
+### Rules
-### Global script
+%$(BIN_EXT): %.c $(curl_DEPENDENCIES)
+ $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(CURL_LDFLAGS_BIN) $< -o $@ $(LIBS)
-include $(PROOT)/lib/Makefile.m32
+all: $(TARGETS)
diff --git a/docs/examples/README.md b/docs/examples/README.md
index c74dc9416..3f95f03c0 100644
--- a/docs/examples/README.md
+++ b/docs/examples/README.md
@@ -1,5 +1,5 @@
<!--
-Copyright (C) 1998 - 2022 Daniel Stenberg, <daniel@haxx.se>, et al.
+Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
-->
diff --git a/docs/examples/altsvc.c b/docs/examples/altsvc.c
index 7fa47c2c2..28e9794e8 100644
--- a/docs/examples/altsvc.c
+++ b/docs/examples/altsvc.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/anyauthput.c b/docs/examples/anyauthput.c
index b5764327c..1f4340f4d 100644
--- a/docs/examples/anyauthput.c
+++ b/docs/examples/anyauthput.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -33,7 +33,7 @@
#include <curl/curl.h>
-#ifdef WIN32
+#ifdef _WIN32
# define FILENO(fp) _fileno(fp)
#else
# define FILENO(fp) fileno(fp)
@@ -44,7 +44,7 @@
#endif
/*
- * This example shows a HTTP PUT operation with authentication using "any"
+ * This example shows an HTTP PUT operation with authentication using "any"
* type. It PUTs a file given as a command line argument to the URL also given
* on the command line.
*
@@ -60,7 +60,7 @@ static int my_seek(void *userp, curl_off_t offset, int origin)
FILE *fp = (FILE *) userp;
if(-1 == fseek(fp, (long) offset, origin))
- /* couldn't seek */
+ /* could not seek */
return CURL_SEEKFUNC_CANTSEEK;
return CURL_SEEKFUNC_OK; /* success! */
diff --git a/docs/examples/cacertinmem.c b/docs/examples/cacertinmem.c
index a16d319d2..647b495b4 100644
--- a/docs/examples/cacertinmem.c
+++ b/docs/examples/cacertinmem.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
*
***************************************************************************/
/* <DESC>
- * CA cert in memory with OpenSSL to get a HTTPS page.
+ * CA cert in memory with OpenSSL to get an HTTPS page.
* </DESC>
*/
diff --git a/docs/examples/certinfo.c b/docs/examples/certinfo.c
index 381ee5110..795be6c3d 100644
--- a/docs/examples/certinfo.c
+++ b/docs/examples/certinfo.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/chkspeed.c b/docs/examples/chkspeed.c
index a467913a7..45765b988 100644
--- a/docs/examples/chkspeed.c
+++ b/docs/examples/chkspeed.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/connect-to.c b/docs/examples/connect-to.c
new file mode 100644
index 000000000..fcdd2cc4f
--- /dev/null
+++ b/docs/examples/connect-to.c
@@ -0,0 +1,70 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ ***************************************************************************/
+/* <DESC>
+ * Use CURLOPT_CONNECT_TO to connect to "wrong" host name
+ * </DESC>
+ */
+#include <stdio.h>
+#include <curl/curl.h>
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res = CURLE_OK;
+
+ /*
+ Each single string should be written using the format
+ HOST:PORT:CONNECT-TO-HOST:CONNECT-TO-PORT where HOST is the host of the
+ request, PORT is the port of the request, CONNECT-TO-HOST is the host name
+ to connect to, and CONNECT-TO-PORT is the port to connect to.
+ */
+ /* instead of curl.se:443, it will resolve and use example.com:443 but in
+ other aspects work as if it still is curl.se */
+ struct curl_slist *host = curl_slist_append(NULL,
+ "curl.se:443:example.com:443");
+
+ curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_CONNECT_TO, host);
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+ curl_easy_setopt(curl, CURLOPT_URL, "https://curl.se/");
+
+ /* since this connects to the wrong host, checking the host name in the
+ server certificate will fail, so unless we disable the check libcurl
+ returns CURLE_PEER_FAILED_VERIFICATION */
+ curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
+
+ /* Letting the wrong host name in the certificate be okay, the transfer
+ goes through but will (most likely) cause a 404 or similar because it
+ sends an unknown name in the Host: header field */
+ res = curl_easy_perform(curl);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+
+ curl_slist_free_all(host);
+
+ return (int)res;
+}
diff --git a/docs/examples/cookie_interface.c b/docs/examples/cookie_interface.c
index 62e9dd798..120049830 100644
--- a/docs/examples/cookie_interface.c
+++ b/docs/examples/cookie_interface.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -91,14 +91,14 @@ main(void)
printf("-----------------------------------------------\n"
"Setting a cookie \"PREF\" via cookie interface:\n");
-#ifdef WIN32
+#ifdef _WIN32
#define snprintf _snprintf
#endif
/* Netscape format cookie */
snprintf(nline, sizeof(nline), "%s\t%s\t%s\t%s\t%.0f\t%s\t%s",
".example.com", "TRUE", "/", "FALSE",
difftime(time(NULL) + 31337, (time_t)0),
- "PREF", "hello example, i like you very much!");
+ "PREF", "hello example, i like you!");
res = curl_easy_setopt(curl, CURLOPT_COOKIELIST, nline);
if(res != CURLE_OK) {
fprintf(stderr, "Curl curl_easy_setopt failed: %s\n",
diff --git a/docs/examples/crawler.c b/docs/examples/crawler.c
index 1859c274e..2ff4ae714 100644
--- a/docs/examples/crawler.c
+++ b/docs/examples/crawler.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2018 - 2022 Jeroen Ooms <jeroenooms@gmail.com>
+ * Copyright (C) Jeroen Ooms <jeroenooms@gmail.com>
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -95,8 +95,17 @@ CURL *make_handle(char *url)
curl_easy_setopt(handle, CURLOPT_ACCEPT_ENCODING, "");
curl_easy_setopt(handle, CURLOPT_TIMEOUT, 5L);
curl_easy_setopt(handle, CURLOPT_FOLLOWLOCATION, 1L);
+ /* only allow redirects to HTTP and HTTPS URLs */
+ curl_easy_setopt(handle, CURLOPT_REDIR_PROTOCOLS_STR, "http,https");
+ curl_easy_setopt(handle, CURLOPT_AUTOREFERER, 1L);
curl_easy_setopt(handle, CURLOPT_MAXREDIRS, 10L);
- curl_easy_setopt(handle, CURLOPT_CONNECTTIMEOUT, 2L);
+ /* each transfer needs to be done within 20 seconds! */
+ curl_easy_setopt(handle, CURLOPT_TIMEOUT_MS, 20000L);
+ /* connect fast or fail */
+ curl_easy_setopt(handle, CURLOPT_CONNECTTIMEOUT_MS, 2000L);
+ /* skip files larger than a gigabyte */
+ curl_easy_setopt(handle, CURLOPT_MAXFILESIZE_LARGE,
+ (curl_off_t)1024*1024*1024);
curl_easy_setopt(handle, CURLOPT_COOKIEFILE, "");
curl_easy_setopt(handle, CURLOPT_FILETIME, 1L);
curl_easy_setopt(handle, CURLOPT_USERAGENT, "mini crawler");
diff --git a/docs/examples/curlgtk.c b/docs/examples/curlgtk.c
deleted file mode 100644
index 756894121..000000000
--- a/docs/examples/curlgtk.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (c) 2000 - 2022 David Odin (aka DindinX) for MandrakeSoft
- *
- * This software is licensed 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
- *
- ***************************************************************************/
-/* <DESC>
- * use the libcurl in a gtk-threaded application
- * </DESC>
- */
-
-#include <stdio.h>
-#include <gtk/gtk.h>
-
-#include <curl/curl.h>
-
-GtkWidget *Bar;
-
-static size_t my_write_func(void *ptr, size_t size, size_t nmemb, FILE *stream)
-{
- return fwrite(ptr, size, nmemb, stream);
-}
-
-static size_t my_read_func(char *ptr, size_t size, size_t nmemb, FILE *stream)
-{
- return fread(ptr, size, nmemb, stream);
-}
-
-static int my_progress_func(GtkWidget *bar,
- double t, /* dltotal */
- double d, /* dlnow */
- double ultotal,
- double ulnow)
-{
-/* printf("%d / %d (%g %%)\n", d, t, d*100.0/t);*/
- gdk_threads_enter();
- gtk_progress_set_value(GTK_PROGRESS(bar), d*100.0/t);
- gdk_threads_leave();
- return 0;
-}
-
-static void *my_thread(void *ptr)
-{
- CURL *curl;
-
- curl = curl_easy_init();
- if(curl) {
- gchar *url = ptr;
- const char *filename = "test.curl";
- FILE *outfile = fopen(filename, "wb");
-
- curl_easy_setopt(curl, CURLOPT_URL, url);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile);
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_write_func);
- curl_easy_setopt(curl, CURLOPT_READFUNCTION, my_read_func);
- curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
- curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, my_progress_func);
- curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, Bar);
-
- curl_easy_perform(curl);
-
- fclose(outfile);
- /* always cleanup */
- curl_easy_cleanup(curl);
- }
-
- return NULL;
-}
-
-int main(int argc, char **argv)
-{
- GtkWidget *Window, *Frame, *Frame2;
- GtkAdjustment *adj;
-
- /* Must initialize libcurl before any threads are started */
- curl_global_init(CURL_GLOBAL_ALL);
-
- /* Init thread */
- g_thread_init(NULL);
-
- gtk_init(&argc, &argv);
- Window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- Frame = gtk_frame_new(NULL);
- gtk_frame_set_shadow_type(GTK_FRAME(Frame), GTK_SHADOW_OUT);
- gtk_container_add(GTK_CONTAINER(Window), Frame);
- Frame2 = gtk_frame_new(NULL);
- gtk_frame_set_shadow_type(GTK_FRAME(Frame2), GTK_SHADOW_IN);
- gtk_container_add(GTK_CONTAINER(Frame), Frame2);
- gtk_container_set_border_width(GTK_CONTAINER(Frame2), 5);
- adj = (GtkAdjustment*)gtk_adjustment_new(0, 0, 100, 0, 0, 0);
- Bar = gtk_progress_bar_new_with_adjustment(adj);
- gtk_container_add(GTK_CONTAINER(Frame2), Bar);
- gtk_widget_show_all(Window);
-
- if(!g_thread_create(&my_thread, argv[1], FALSE, NULL) != 0)
- g_warning("cannot create the thread");
-
- gdk_threads_enter();
- gtk_main();
- gdk_threads_leave();
- return 0;
-}
diff --git a/docs/examples/debug.c b/docs/examples/debug.c
index aeef8290a..684a18327 100644
--- a/docs/examples/debug.c
+++ b/docs/examples/debug.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/default-scheme.c b/docs/examples/default-scheme.c
new file mode 100644
index 000000000..525dcc3c3
--- /dev/null
+++ b/docs/examples/default-scheme.c
@@ -0,0 +1,57 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ ***************************************************************************/
+/* <DESC>
+ * Change default scheme when none is provided in the URL
+ * </DESC>
+ */
+#include <stdio.h>
+#include <curl/curl.h>
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res;
+
+ curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "example.com");
+
+ /* Change the default protocol (scheme) for schemeless URLs from plain
+ "http" to use a secure one instead. */
+ curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
+
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ /* Perform the request, res will get the return code */
+ res = curl_easy_perform(curl);
+ /* Check for errors */
+ if(res != CURLE_OK)
+ fprintf(stderr, "curl_easy_perform() failed: %s\n",
+ curl_easy_strerror(res));
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ return 0;
+}
diff --git a/docs/examples/ephiperfifo.c b/docs/examples/ephiperfifo.c
index 7079846fd..0ce68de5d 100644
--- a/docs/examples/ephiperfifo.c
+++ b/docs/examples/ephiperfifo.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -166,7 +166,7 @@ static int multi_timer_cb(CURLM *multi, long timeout_ms, GlobalInfo *g)
memset(&its, 0, sizeof(struct itimerspec));
}
- timerfd_settime(g->tfd, /*flags=*/0, &its, NULL);
+ timerfd_settime(g->tfd, /* flags= */0, &its, NULL);
return 0;
}
@@ -197,7 +197,7 @@ static void check_multi_info(GlobalInfo *g)
}
}
-/* Called by libevent when we get action on a multi socket filedescriptor*/
+/* Called by libevent when we get action on a multi socket filedescriptor */
static void event_cb(GlobalInfo *g, int fd, int revents)
{
CURLMcode rc;
@@ -386,8 +386,8 @@ static void new_conn(char *url, GlobalInfo *g)
rc = curl_multi_add_handle(g->multi, conn->easy);
mcode_or_die("new_conn: curl_multi_add_handle", rc);
- /* note that the add_handle() will set a time-out to trigger very soon so
- that the necessary socket_action() call will be called by this app */
+ /* note that the add_handle() will set a time-out to trigger soon so that
+ the necessary socket_action() call will be called by this app */
}
/* This gets called whenever data is received from the fifo */
diff --git a/docs/examples/evhiperfifo.c b/docs/examples/evhiperfifo.c
index 3c9ca57dd..17bff2b65 100644
--- a/docs/examples/evhiperfifo.c
+++ b/docs/examples/evhiperfifo.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -364,8 +364,8 @@ static void new_conn(char *url, GlobalInfo *g)
rc = curl_multi_add_handle(g->multi, conn->easy);
mcode_or_die("new_conn: curl_multi_add_handle", rc);
- /* note that the add_handle() will set a time-out to trigger very soon so
- that the necessary socket_action() call will be called by this app */
+ /* note that the add_handle() will set a time-out to trigger soon so that
+ the necessary socket_action() call will be called by this app */
}
/* This gets called whenever data is received from the fifo */
diff --git a/docs/examples/externalsocket.c b/docs/examples/externalsocket.c
index dfdd1c275..270a31996 100644
--- a/docs/examples/externalsocket.c
+++ b/docs/examples/externalsocket.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -22,8 +22,7 @@
*
***************************************************************************/
/* <DESC>
- * An example demonstrating how an application can pass in a custom
- * socket to libcurl to use. This example also handles the connect itself.
+ * Pass in a custom socket for libcurl to use.
* </DESC>
*/
#include <stdio.h>
@@ -31,7 +30,7 @@
#include <stdlib.h>
#include <curl/curl.h>
-#ifdef WIN32
+#ifdef _WIN32
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
@@ -97,7 +96,7 @@ int main(void)
struct sockaddr_in servaddr; /* socket address structure */
curl_socket_t sockfd;
-#ifdef WIN32
+#ifdef _WIN32
WSADATA wsaData;
int initwsa = WSAStartup(MAKEWORD(2, 2), &wsaData);
if(initwsa) {
@@ -169,7 +168,7 @@ int main(void)
}
}
-#ifdef WIN32
+#ifdef _WIN32
WSACleanup();
#endif
return 0;
diff --git a/docs/examples/fileupload.c b/docs/examples/fileupload.c
index 8d3e6cdf8..9e3bd84f7 100644
--- a/docs/examples/fileupload.c
+++ b/docs/examples/fileupload.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/ftp-wildcard.c b/docs/examples/ftp-wildcard.c
index 9c1c913f1..f80543247 100644
--- a/docs/examples/ftp-wildcard.c
+++ b/docs/examples/ftp-wildcard.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/ftpget.c b/docs/examples/ftpget.c
index 3229dbf7b..94609fe0d 100644
--- a/docs/examples/ftpget.c
+++ b/docs/examples/ftpget.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -66,7 +66,7 @@ int main(void)
*/
curl_easy_setopt(curl, CURLOPT_URL,
"ftp://ftp.example.com/curl/curl-7.9.2.tar.gz");
- /* Define our callback to get called when there's data to be written */
+ /* Define our callback to get called when there is data to be written */
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite);
/* Set a pointer to our struct to pass to the callback */
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile);
diff --git a/docs/examples/ftpgetinfo.c b/docs/examples/ftpgetinfo.c
index d95753d3e..be24fa71e 100644
--- a/docs/examples/ftpgetinfo.c
+++ b/docs/examples/ftpgetinfo.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/ftpgetresp.c b/docs/examples/ftpgetresp.c
index 1bee903db..238885dfe 100644
--- a/docs/examples/ftpgetresp.c
+++ b/docs/examples/ftpgetresp.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/ftpsget.c b/docs/examples/ftpsget.c
index 521ad5cb6..dbe7d14bf 100644
--- a/docs/examples/ftpsget.c
+++ b/docs/examples/ftpsget.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -70,7 +70,7 @@ int main(void)
*/
curl_easy_setopt(curl, CURLOPT_URL,
"ftp://user@server/home/user/file.txt");
- /* Define our callback to get called when there's data to be written */
+ /* Define our callback to get called when there is data to be written */
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite);
/* Set a pointer to our struct to pass to the callback */
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile);
diff --git a/docs/examples/ftpupload.c b/docs/examples/ftpupload.c
index 046166a43..92bb0b8a0 100644
--- a/docs/examples/ftpupload.c
+++ b/docs/examples/ftpupload.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -29,7 +29,7 @@
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
-#ifdef WIN32
+#ifdef _WIN32
#include <io.h>
#else
#include <unistd.h>
diff --git a/docs/examples/ftpuploadfrommem.c b/docs/examples/ftpuploadfrommem.c
index b32020e80..9613cca26 100644
--- a/docs/examples/ftpuploadfrommem.c
+++ b/docs/examples/ftpuploadfrommem.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/ftpuploadresume.c b/docs/examples/ftpuploadresume.c
index 5014e3f23..42d31a2bb 100644
--- a/docs/examples/ftpuploadresume.c
+++ b/docs/examples/ftpuploadresume.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
*
***************************************************************************/
/* <DESC>
- * Upload to FTP, resuming failed transfers.
+ * Upload to FTP, resuming failed transfers. Active mode.
* </DESC>
*/
@@ -96,8 +96,12 @@ static int upload(CURL *curlhandle, const char *remotepath,
curl_easy_setopt(curlhandle, CURLOPT_READFUNCTION, readfunc);
curl_easy_setopt(curlhandle, CURLOPT_READDATA, f);
- /* disable passive mode */
+ /* enable active mode */
curl_easy_setopt(curlhandle, CURLOPT_FTPPORT, "-");
+
+ /* allow the server no more than 7 seconds to connect back */
+ curl_easy_setopt(curlhandle, CURLOPT_ACCEPTTIMEOUT_MS, 7000L);
+
curl_easy_setopt(curlhandle, CURLOPT_FTP_CREATE_MISSING_DIRS, 1L);
curl_easy_setopt(curlhandle, CURLOPT_VERBOSE, 1L);
diff --git a/docs/examples/getinfo.c b/docs/examples/getinfo.c
index d63b030aa..9c178c2c8 100644
--- a/docs/examples/getinfo.c
+++ b/docs/examples/getinfo.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/getinmemory.c b/docs/examples/getinmemory.c
index 085ece7b7..8ec84142d 100644
--- a/docs/examples/getinmemory.c
+++ b/docs/examples/getinmemory.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/getredirect.c b/docs/examples/getredirect.c
index 85ea382b7..9163c9b07 100644
--- a/docs/examples/getredirect.c
+++ b/docs/examples/getredirect.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/getreferrer.c b/docs/examples/getreferrer.c
index d320c104d..6073f9fca 100644
--- a/docs/examples/getreferrer.c
+++ b/docs/examples/getreferrer.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/ghiper.c b/docs/examples/ghiper.c
index e18ca6e5b..5a4f4a705 100644
--- a/docs/examples/ghiper.c
+++ b/docs/examples/ghiper.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -323,8 +323,8 @@ static void new_conn(char *url, GlobalInfo *g)
rc = curl_multi_add_handle(g->multi, conn->easy);
mcode_or_die("new_conn: curl_multi_add_handle", rc);
- /* note that the add_handle() will set a time-out to trigger very soon so
- that the necessary socket_action() call will be called by this app */
+ /* note that the add_handle() will set a time-out to trigger soon so that
+ the necessary socket_action() call will be called by this app */
}
/* This gets called by glib whenever data is received from the fifo */
diff --git a/docs/examples/headerapi.c b/docs/examples/headerapi.c
index 58c858629..4df6cbd67 100644
--- a/docs/examples/headerapi.c
+++ b/docs/examples/headerapi.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/hiperfifo.c b/docs/examples/hiperfifo.c
index ea0cdb185..9fba341bb 100644
--- a/docs/examples/hiperfifo.c
+++ b/docs/examples/hiperfifo.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -358,8 +358,8 @@ static void new_conn(char *url, GlobalInfo *g)
rc = curl_multi_add_handle(g->multi, conn->easy);
mcode_or_die("new_conn: curl_multi_add_handle", rc);
- /* note that the add_handle() will set a time-out to trigger very soon so
- that the necessary socket_action() call will be called by this app */
+ /* note that the add_handle() will set a time-out to trigger soon so that
+ the necessary socket_action() call will be called by this app */
}
/* This gets called whenever data is received from the fifo */
diff --git a/docs/examples/href_extractor.c b/docs/examples/href_extractor.c
index b73157b8d..5c92b0c23 100644
--- a/docs/examples/href_extractor.c
+++ b/docs/examples/href_extractor.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2012 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/hsts-preload.c b/docs/examples/hsts-preload.c
new file mode 100644
index 000000000..ee4253533
--- /dev/null
+++ b/docs/examples/hsts-preload.c
@@ -0,0 +1,118 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ ***************************************************************************/
+/* <DESC>
+ * Preload domains to HSTS
+ * </DESC>
+ */
+#include <stdio.h>
+#include <string.h>
+#include <curl/curl.h>
+
+struct entry {
+ const char *name;
+ const char *exp;
+};
+
+static const struct entry preload_hosts[] = {
+ { "example.com", "20370320 01:02:03" },
+ { "curl.se", "20370320 03:02:01" },
+ { NULL, NULL } /* end of list marker */
+};
+
+struct state {
+ int index;
+};
+
+/* "read" is from the point of the library, it wants data from us. One domain
+ entry per invoke. */
+static CURLSTScode hstsread(CURL *easy, struct curl_hstsentry *e,
+ void *userp)
+{
+ const char *host;
+ const char *expire;
+ struct state *s = (struct state *)userp;
+ (void)easy;
+ host = preload_hosts[s->index].name;
+ expire = preload_hosts[s->index++].exp;
+
+ if(host && (strlen(host) < e->namelen)) {
+ strcpy(e->name, host);
+ e->includeSubDomains = 0;
+ strcpy(e->expire, expire);
+ fprintf(stderr, "HSTS preload '%s' until '%s'\n", host, expire);
+ }
+ else
+ return CURLSTS_DONE;
+ return CURLSTS_OK;
+}
+
+static CURLSTScode hstswrite(CURL *easy, struct curl_hstsentry *e,
+ struct curl_index *i, void *userp)
+{
+ (void)easy;
+ (void)userp; /* we have no custom input */
+ printf("[%u/%u] %s %s\n", (unsigned int)i->index, (unsigned int)i->total,
+ e->name, e->expire);
+ return CURLSTS_OK;
+}
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res;
+
+ curl = curl_easy_init();
+ if(curl) {
+ struct state st = {0};
+
+ /* enable HSTS for this handle */
+ curl_easy_setopt(curl, CURLOPT_HSTS_CTRL, (long)CURLHSTS_ENABLE);
+
+ /* function to call at first to populate the cache before the transfer */
+ curl_easy_setopt(curl, CURLOPT_HSTSREADFUNCTION, hstsread);
+ curl_easy_setopt(curl, CURLOPT_HSTSREADDATA, &st);
+
+ /* function to call after transfer to store the new state of the HSTS
+ cache */
+ curl_easy_setopt(curl, CURLOPT_HSTSWRITEFUNCTION, hstswrite);
+ curl_easy_setopt(curl, CURLOPT_HSTSWRITEDATA, NULL);
+
+ /* use the domain with HTTP but due to the preload, it should do the
+ transfer using HTTPS */
+ curl_easy_setopt(curl, CURLOPT_URL, "http://curl.se");
+
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ /* Perform the request, res will get the return code */
+ res = curl_easy_perform(curl);
+ /* Check for errors */
+ if(res != CURLE_OK)
+ fprintf(stderr, "curl_easy_perform() failed: %s\n",
+ curl_easy_strerror(res));
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ return 0;
+}
diff --git a/docs/examples/htmltidy.c b/docs/examples/htmltidy.c
index 97e3eac73..cc6f63e1c 100644
--- a/docs/examples/htmltidy.c
+++ b/docs/examples/htmltidy.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/htmltitle.cpp b/docs/examples/htmltitle.cpp
index b5c78f796..ee3e023a2 100644
--- a/docs/examples/htmltitle.cpp
+++ b/docs/examples/htmltitle.cpp
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -272,7 +272,7 @@ int main(int argc, char *argv[])
// Initialize CURL connection
if(!init(conn, argv[1])) {
- fprintf(stderr, "Connection initializion failed\n");
+ fprintf(stderr, "Connection initialization failed\n");
exit(EXIT_FAILURE);
}
diff --git a/docs/examples/http-options.c b/docs/examples/http-options.c
new file mode 100644
index 000000000..964e0ef37
--- /dev/null
+++ b/docs/examples/http-options.c
@@ -0,0 +1,59 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ ***************************************************************************/
+/* <DESC>
+ * Issue an HTTP 'OPTIONS *' request
+ * </DESC>
+ */
+#include <stdio.h>
+#include <curl/curl.h>
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res;
+
+ curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "OPTIONS");
+
+ /* issue an OPTIONS * request (no leading slash) */
+ curl_easy_setopt(curl, CURLOPT_REQUEST_TARGET, "*");
+
+ /* if this operation fails, allow risking a memory leak and do quick exit
+ from libcurl as this will exit() anyway */
+ curl_easy_setopt(curl, CURLOPT_QUICK_EXIT, 1L);
+
+ /* Perform the request, res will get the return code */
+ res = curl_easy_perform(curl);
+ /* Check for errors */
+ if(res != CURLE_OK)
+ fprintf(stderr, "curl_easy_perform() failed: %s\n",
+ curl_easy_strerror(res));
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ return 0;
+}
diff --git a/docs/examples/http-post.c b/docs/examples/http-post.c
index df0e5a7a4..2cacefee4 100644
--- a/docs/examples/http-post.c
+++ b/docs/examples/http-post.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -40,7 +40,7 @@ int main(void)
curl = curl_easy_init();
if(curl) {
/* First set the URL that is about to receive our POST. This URL can
- just as well be a https:// URL if that is what should receive the
+ just as well be an https:// URL if that is what should receive the
data. */
curl_easy_setopt(curl, CURLOPT_URL, "http://postit.example.com/moo.cgi");
/* Now specify the POST data */
diff --git a/docs/examples/http2-download.c b/docs/examples/http2-download.c
index e88f578cd..a2291a8c7 100644
--- a/docs/examples/http2-download.c
+++ b/docs/examples/http2-download.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -170,13 +170,12 @@ static void setup(struct transfer *t, int num)
curl_easy_setopt(hnd, CURLOPT_DEBUGFUNCTION, my_trace);
curl_easy_setopt(hnd, CURLOPT_DEBUGDATA, t);
+ /* enlarge the receive buffer for potentially higher transfer speeds */
+ curl_easy_setopt(hnd, CURLOPT_BUFFERSIZE, 100000L);
+
/* HTTP/2 please */
curl_easy_setopt(hnd, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
- /* we use a self-signed test server, skip verification during debugging */
- curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYPEER, 0L);
- curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYHOST, 0L);
-
#if (CURLPIPE_MULTIPLEX > 0)
/* wait for pipe connection to confirm */
curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L);
diff --git a/docs/examples/http2-pushinmemory.c b/docs/examples/http2-pushinmemory.c
index 78273c9db..74c64e0a6 100644
--- a/docs/examples/http2-pushinmemory.c
+++ b/docs/examples/http2-pushinmemory.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -92,7 +92,7 @@ static void setup(CURL *hnd)
curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L);
}
-/* called when there's an incoming push */
+/* called when there is an incoming push */
static int server_push_callback(CURL *parent,
CURL *easy,
size_t num_headers,
diff --git a/docs/examples/http2-serverpush.c b/docs/examples/http2-serverpush.c
index f27935516..b5ebe2eb9 100644
--- a/docs/examples/http2-serverpush.c
+++ b/docs/examples/http2-serverpush.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -130,7 +130,7 @@ int my_trace(CURL *handle, curl_infotype type,
#define OUTPUTFILE "dl"
-static int setup(CURL *hnd)
+static int setup(CURL *hnd, const char *url)
{
FILE *out = fopen(OUTPUTFILE, "wb");
if(!out)
@@ -141,7 +141,7 @@ static int setup(CURL *hnd)
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, out);
/* set the same URL */
- curl_easy_setopt(hnd, CURLOPT_URL, "https://localhost:8443/index.html");
+ curl_easy_setopt(hnd, CURLOPT_URL, url);
/* please be verbose */
curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
@@ -161,7 +161,7 @@ static int setup(CURL *hnd)
return 0; /* all is good */
}
-/* called when there's an incoming push */
+/* called when there is an incoming push */
static int server_push_callback(CURL *parent,
CURL *easy,
size_t num_headers,
@@ -211,12 +211,16 @@ static int server_push_callback(CURL *parent,
/*
* Download a file over HTTP/2, take care of server push.
*/
-int main(void)
+int main(int argc, char *argv[])
{
CURL *easy;
CURLM *multi_handle;
int transfers = 1; /* we start with one */
struct CURLMsg *m;
+ const char *url = "https://localhost:8443/index.html";
+
+ if(argc == 2)
+ url = argv[1];
/* init a multi stack */
multi_handle = curl_multi_init();
@@ -224,7 +228,7 @@ int main(void)
easy = curl_easy_init();
/* set options */
- if(setup(easy)) {
+ if(setup(easy, url)) {
fprintf(stderr, "failed\n");
return 1;
}
diff --git a/docs/examples/http2-upload.c b/docs/examples/http2-upload.c
index d0d54695e..5889d0c36 100644
--- a/docs/examples/http2-upload.c
+++ b/docs/examples/http2-upload.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/http3-present.c b/docs/examples/http3-present.c
index 3e189203c..56ba0f572 100644
--- a/docs/examples/http3-present.c
+++ b/docs/examples/http3-present.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/http3.c b/docs/examples/http3.c
index 6463ccfd0..900e11920 100644
--- a/docs/examples/http3.c
+++ b/docs/examples/http3.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -37,10 +37,9 @@ int main(void)
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Forcing HTTP/3 will make the connection fail if the server is not
- accessible over QUIC + HTTP/3 on the given host and port.
- Consider using CURLOPT_ALTSVC instead! */
- curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, (long)CURL_HTTP_VERSION_3);
+ /* Use HTTP/3 but fallback to earlier HTTP if necessary */
+ curl_easy_setopt(curl, CURLOPT_HTTP_VERSION,
+ (long)CURL_HTTP_VERSION_3);
/* Perform the request, res will get the return code */
res = curl_easy_perform(curl);
diff --git a/docs/examples/httpcustomheader.c b/docs/examples/httpcustomheader.c
index c72a474e0..a3881674c 100644
--- a/docs/examples/httpcustomheader.c
+++ b/docs/examples/httpcustomheader.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/httpput-postfields.c b/docs/examples/httpput-postfields.c
index f8a5c43a6..98d7c3d74 100644
--- a/docs/examples/httpput-postfields.c
+++ b/docs/examples/httpput-postfields.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -43,7 +43,7 @@ static const char olivertwist[]=
509 byte limit. */
/*
- * This example shows a HTTP PUT operation that sends a fixed buffer with
+ * This example shows an HTTP PUT operation that sends a fixed buffer with
* CURLOPT_POSTFIELDS to the URL given as an argument.
*/
diff --git a/docs/examples/httpput.c b/docs/examples/httpput.c
index 00ad99cb7..b9a6c87b7 100644
--- a/docs/examples/httpput.c
+++ b/docs/examples/httpput.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -31,7 +31,7 @@
#include <curl/curl.h>
/*
- * This example shows a HTTP PUT operation. PUTs a file given as a command
+ * This example shows an HTTP PUT operation. PUTs a file given as a command
* line argument to the URL also given on the command line.
*
* This example also uses its own read callback.
@@ -101,8 +101,8 @@ int main(int argc, char **argv)
/* now specify which file to upload */
curl_easy_setopt(curl, CURLOPT_READDATA, hd_src);
- /* provide the size of the upload, we specicially typecast the value
- to curl_off_t since we must be sure to use the correct data size */
+ /* provide the size of the upload, we typecast the value to curl_off_t
+ since we must be sure to use the correct data size */
curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE,
(curl_off_t)file_info.st_size);
diff --git a/docs/examples/https.c b/docs/examples/https.c
index 7be330a8e..2a34e37d8 100644
--- a/docs/examples/https.c
+++ b/docs/examples/https.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -63,6 +63,9 @@ int main(void)
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
#endif
+ /* cache the CA cert bundle in memory for a week */
+ curl_easy_setopt(curl, CURLOPT_CA_CACHE_TIMEOUT, 604800L);
+
/* Perform the request, res will get the return code */
res = curl_easy_perform(curl);
/* Check for errors */
diff --git a/docs/examples/imap-append.c b/docs/examples/imap-append.c
index b66d8687e..33566bb64 100644
--- a/docs/examples/imap-append.c
+++ b/docs/examples/imap-append.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * IMAP example showing how to send emails
+ * Send email with IMAP
* </DESC>
*/
@@ -49,11 +49,11 @@ static const char *payload_text =
"Message-ID: "
"<dcd7cb36-11db-487a-9f3a-e652a9458efd@rfcpedant.example.org>\r\n"
"Subject: IMAP example message\r\n"
- "\r\n" /* empty line to divide headers from body, see RFC5322 */
+ "\r\n" /* empty line to divide headers from body, see RFC 5322 */
"The body of the message starts here.\r\n"
"\r\n"
"It could be a lot of lines, could be MIME encoded, whatever.\r\n"
- "Check RFC5322.\r\n";
+ "Check RFC 5322.\r\n";
struct upload_status {
size_t bytes_read;
@@ -99,10 +99,8 @@ int main(void)
curl_easy_setopt(curl, CURLOPT_USERNAME, "user");
curl_easy_setopt(curl, CURLOPT_PASSWORD, "secret");
- /* This will create a new message 100. Note that you should perform an
- * EXAMINE command to obtain the UID of the next message to create and a
- * SELECT to ensure you are creating the message in the OUTBOX. */
- curl_easy_setopt(curl, CURLOPT_URL, "imap://imap.example.com/100");
+ /* This will create a new message in folder "Sent". */
+ curl_easy_setopt(curl, CURLOPT_URL, "imap://imap.example.com/Sent");
/* In this case, we are using a callback function to specify the data. You
* could just use the CURLOPT_READDATA option to specify a FILE pointer to
diff --git a/docs/examples/imap-authzid.c b/docs/examples/imap-authzid.c
index 62eca4a68..af0732064 100644
--- a/docs/examples/imap-authzid.c
+++ b/docs/examples/imap-authzid.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * IMAP example showing how to retreieve emails from a shared mailed box
+ * Retrieve emails from a shared IMAP mailbox
* </DESC>
*/
diff --git a/docs/examples/imap-copy.c b/docs/examples/imap-copy.c
index 81ec5be70..0920f0944 100644
--- a/docs/examples/imap-copy.c
+++ b/docs/examples/imap-copy.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * IMAP example showing how to copy an email from one folder to another
+ * Copy an email from one IMAP folder to another
* </DESC>
*/
diff --git a/docs/examples/imap-create.c b/docs/examples/imap-create.c
index 12e7113f3..6a9b56534 100644
--- a/docs/examples/imap-create.c
+++ b/docs/examples/imap-create.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * IMAP example showing how to create a new folder
+ * Create a new IMAP folder
* </DESC>
*/
diff --git a/docs/examples/imap-delete.c b/docs/examples/imap-delete.c
index 467b06010..e43ab2e98 100644
--- a/docs/examples/imap-delete.c
+++ b/docs/examples/imap-delete.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * IMAP example showing how to delete a folder
+ * Delete an IMAP folder
* </DESC>
*/
diff --git a/docs/examples/imap-examine.c b/docs/examples/imap-examine.c
index 68cc63693..34217bfa4 100644
--- a/docs/examples/imap-examine.c
+++ b/docs/examples/imap-examine.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * IMAP example showing how to obtain information about a folder
+ * Obtain information about an IMAP folder
* </DESC>
*/
diff --git a/docs/examples/imap-fetch.c b/docs/examples/imap-fetch.c
index d6237c386..3361d7cfe 100644
--- a/docs/examples/imap-fetch.c
+++ b/docs/examples/imap-fetch.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * IMAP example showing how to retreieve emails
+ * Retrieve IMAP emails
* </DESC>
*/
diff --git a/docs/examples/imap-list.c b/docs/examples/imap-list.c
index 85bddac07..2f3780f2d 100644
--- a/docs/examples/imap-list.c
+++ b/docs/examples/imap-list.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * IMAP example to list the folders within a mailbox
+ * List the folders within an IMAP mailbox
* </DESC>
*/
diff --git a/docs/examples/imap-lsub.c b/docs/examples/imap-lsub.c
index 1b22fa1e2..cf45a5fc2 100644
--- a/docs/examples/imap-lsub.c
+++ b/docs/examples/imap-lsub.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * IMAP example to list the subscribed folders
+ * List the subscribed IMAP folders
* </DESC>
*/
@@ -50,7 +50,7 @@ int main(void)
/* This is just the server URL */
curl_easy_setopt(curl, CURLOPT_URL, "imap://imap.example.com");
- /* Set the LSUB command. Note the syntax is very similar to that of a LIST
+ /* Set the LSUB command. Note the syntax is similar to that of a LIST
command. */
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "LSUB \"\" *");
diff --git a/docs/examples/imap-multi.c b/docs/examples/imap-multi.c
index 3b5c63368..6a5f4b070 100644
--- a/docs/examples/imap-multi.c
+++ b/docs/examples/imap-multi.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * IMAP example using the multi interface
+ * Get IMAP email with the multi interface
* </DESC>
*/
diff --git a/docs/examples/imap-noop.c b/docs/examples/imap-noop.c
index ee1a7772d..9e5a3da2d 100644
--- a/docs/examples/imap-noop.c
+++ b/docs/examples/imap-noop.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * IMAP example showing how to perform a noop
+ * Perform an IMAP noop
* </DESC>
*/
diff --git a/docs/examples/imap-search.c b/docs/examples/imap-search.c
index 7b175b27c..141b06f64 100644
--- a/docs/examples/imap-search.c
+++ b/docs/examples/imap-search.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * IMAP example showing how to search for new emails
+ * Search for new IMAP emails
* </DESC>
*/
diff --git a/docs/examples/imap-ssl.c b/docs/examples/imap-ssl.c
index 5b0befbc2..e920720c0 100644
--- a/docs/examples/imap-ssl.c
+++ b/docs/examples/imap-ssl.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * IMAP example using SSL
+ * IMAP with implicit SSL
* </DESC>
*/
@@ -73,7 +73,7 @@ int main(void)
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
#endif
- /* Since the traffic will be encrypted, it is very useful to turn on debug
+ /* Since the traffic will be encrypted, it is useful to turn on debug
* information within libcurl to see what is happening during the
* transfer */
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
diff --git a/docs/examples/imap-store.c b/docs/examples/imap-store.c
index 6a4c75677..d04a6072c 100644
--- a/docs/examples/imap-store.c
+++ b/docs/examples/imap-store.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * IMAP example showing how to modify the properties of an email
+ * Modify the properties of an email over IMAP
* </DESC>
*/
diff --git a/docs/examples/imap-tls.c b/docs/examples/imap-tls.c
index dbebbc722..d98f5ef9f 100644
--- a/docs/examples/imap-tls.c
+++ b/docs/examples/imap-tls.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * IMAP example using TLS
+ * IMAP using TLS
* </DESC>
*/
@@ -73,7 +73,7 @@ int main(void)
* for more information. */
curl_easy_setopt(curl, CURLOPT_CAINFO, "/path/to/certificate.pem");
- /* Since the traffic will be encrypted, it is very useful to turn on debug
+ /* Since the traffic will be encrypted, it is useful to turn on debug
* information within libcurl to see what is happening during the
* transfer */
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
diff --git a/docs/examples/interface.c b/docs/examples/interface.c
new file mode 100644
index 000000000..f1a2016ce
--- /dev/null
+++ b/docs/examples/interface.c
@@ -0,0 +1,52 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ ***************************************************************************/
+/* <DESC>
+ * Use CURLOPT_INTERFACE to bind the outgoing socket to an interface
+ * </DESC>
+ */
+#include <stdio.h>
+#include <curl/curl.h>
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res = CURLE_OK;
+
+ curl = curl_easy_init();
+ if(curl) {
+ /* The interface needs to be a local existing interface over which you can
+ connect to the host in the URL. It can also specify an IP address, but
+ that address needs to be assigned one of the local network
+ interfaces. */
+ curl_easy_setopt(curl, CURLOPT_INTERFACE, "enp3s0");
+ curl_easy_setopt(curl, CURLOPT_URL, "https://curl.se/");
+
+ res = curl_easy_perform(curl);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+
+ return (int)res;
+}
diff --git a/docs/examples/ipv6.c b/docs/examples/ipv6.c
new file mode 100644
index 000000000..dc305a072
--- /dev/null
+++ b/docs/examples/ipv6.c
@@ -0,0 +1,62 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ ***************************************************************************/
+/* <DESC>
+ * HTTP GET to an IPv6 address with specific scope
+ * </DESC>
+ */
+#include <stdio.h>
+#include <curl/curl.h>
+
+#ifndef _WIN32
+#include <net/if.h>
+#endif
+
+int main(void)
+{
+#ifndef _WIN32
+ /* Windows users need to find how to use if_nametoindex() */
+ CURL *curl;
+ CURLcode res;
+
+ curl = curl_easy_init();
+ if(curl) {
+ long my_scope_id;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+
+ my_scope_id = if_nametoindex("eth0");
+ curl_easy_setopt(curl, CURLOPT_ADDRESS_SCOPE, my_scope_id);
+
+ /* Perform the request, res will get the return code */
+ res = curl_easy_perform(curl);
+ /* Check for errors */
+ if(res != CURLE_OK)
+ fprintf(stderr, "curl_easy_perform() failed: %s\n",
+ curl_easy_strerror(res));
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+#endif
+ return 0;
+}
diff --git a/docs/examples/keepalive.c b/docs/examples/keepalive.c
new file mode 100644
index 000000000..1c876bb1f
--- /dev/null
+++ b/docs/examples/keepalive.c
@@ -0,0 +1,55 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ ***************************************************************************/
+/* <DESC>
+ * Use the TCP keep-alive options
+ * </DESC>
+ */
+#include <stdio.h>
+#include <curl/curl.h>
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res = CURLE_OK;
+
+ curl = curl_easy_init();
+ if(curl) {
+ /* enable TCP keep-alive for this transfer */
+ curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);
+
+ /* keep-alive idle time to 120 seconds */
+ curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 120L);
+
+ /* interval time between keep-alive probes: 60 seconds */
+ curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L);
+
+ curl_easy_setopt(curl, CURLOPT_URL, "https://curl.se/");
+
+ res = curl_easy_perform(curl);
+
+ curl_easy_cleanup(curl);
+ }
+
+ return (int)res;
+}
diff --git a/docs/examples/localport.c b/docs/examples/localport.c
new file mode 100644
index 000000000..56e0b62cf
--- /dev/null
+++ b/docs/examples/localport.c
@@ -0,0 +1,53 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ ***************************************************************************/
+/* <DESC>
+ * Use CURLOPT_LOCALPORT to control local port number
+ * </DESC>
+ */
+#include <stdio.h>
+#include <curl/curl.h>
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res = CURLE_OK;
+
+ curl = curl_easy_init();
+ if(curl) {
+ /* Try to use a local port number between 20000-20009 */
+ curl_easy_setopt(curl, CURLOPT_LOCALPORT, 20000L);
+ /* 10 means number of attempts, which starts with the number set in
+ CURLOPT_LOCALPORT. The lowe value set, the smaller the change it will
+ work. */
+ curl_easy_setopt(curl, CURLOPT_LOCALPORTRANGE, 10L);
+ curl_easy_setopt(curl, CURLOPT_URL, "https://curl.se/");
+
+ res = curl_easy_perform(curl);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+
+ return (int)res;
+}
diff --git a/docs/examples/maxconnects.c b/docs/examples/maxconnects.c
new file mode 100644
index 000000000..84fefd7bc
--- /dev/null
+++ b/docs/examples/maxconnects.c
@@ -0,0 +1,66 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) James Fuller, <jim@webcomposite.com>, et al.
+ *
+ * This software is licensed 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
+ *
+ ***************************************************************************/
+/* <DESC>
+ * Set maximum number of persistent connections to 1.
+ * </DESC>
+ */
+#include <stdio.h>
+#include <curl/curl.h>
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res;
+
+ curl = curl_easy_init();
+ if(curl) {
+ const char *urls[] = { "https://example.com",
+ "https://curl.se",
+ "https://www.example/",
+ NULL /* end of list */
+ };
+ int i = 0;
+
+ /* Change the maximum number of persistent connection */
+ curl_easy_setopt(curl, CURLOPT_MAXCONNECTS, 1L);
+
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ /* loop over the URLs */
+ while(urls[i]) {
+ curl_easy_setopt(curl, CURLOPT_URL, urls[i]);
+
+ /* Perform the request, res will get the return code */
+ res = curl_easy_perform(curl);
+ /* Check for errors */
+ if(res != CURLE_OK)
+ fprintf(stderr, "curl_easy_perform() failed: %s\n",
+ curl_easy_strerror(res));
+ i++;
+ }
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ return 0;
+}
diff --git a/docs/examples/multi-app.c b/docs/examples/multi-app.c
index 813623865..3dbc46483 100644
--- a/docs/examples/multi-app.c
+++ b/docs/examples/multi-app.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -38,7 +38,7 @@
#include <curl/curl.h>
/*
- * Download a HTTP file and upload an FTP file simultaneously.
+ * Download an HTTP file and upload an FTP file simultaneously.
*/
#define HANDLECOUNT 2 /* Number of simultaneous transfers */
diff --git a/docs/examples/multi-debugcallback.c b/docs/examples/multi-debugcallback.c
index 16d5d56ca..8bdb58800 100644
--- a/docs/examples/multi-debugcallback.c
+++ b/docs/examples/multi-debugcallback.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -36,13 +36,10 @@
/* curl stuff */
#include <curl/curl.h>
-typedef char bool;
#define TRUE 1
-static
-void dump(const char *text,
- FILE *stream, unsigned char *ptr, size_t size,
- bool nohex)
+static void dump(const char *text, FILE *stream, unsigned char *ptr,
+ size_t size, char nohex)
{
size_t i;
size_t c;
@@ -126,7 +123,7 @@ int my_trace(CURL *handle, curl_infotype type,
}
/*
- * Simply download a HTTP file.
+ * Simply download an HTTP file.
*/
int main(void)
{
diff --git a/docs/examples/multi-double.c b/docs/examples/multi-double.c
index b9bba520d..62295a92c 100644
--- a/docs/examples/multi-double.c
+++ b/docs/examples/multi-double.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/multi-event.c b/docs/examples/multi-event.c
index 4f61f5e4b..5a24bb203 100644
--- a/docs/examples/multi-event.c
+++ b/docs/examples/multi-event.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/multi-formadd.c b/docs/examples/multi-formadd.c
index e62de32ab..801b61e6d 100644
--- a/docs/examples/multi-formadd.c
+++ b/docs/examples/multi-formadd.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/multi-legacy.c b/docs/examples/multi-legacy.c
index f9bc699dd..f36139fe1 100644
--- a/docs/examples/multi-legacy.c
+++ b/docs/examples/multi-legacy.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -38,7 +38,7 @@
#include <curl/curl.h>
/*
- * Download a HTTP file and upload an FTP file simultaneously.
+ * Download an HTTP file and upload an FTP file simultaneously.
*/
#define HANDLECOUNT 2 /* Number of simultaneous transfers */
@@ -102,7 +102,7 @@ int main(void)
if(timeout.tv_sec > 1)
timeout.tv_sec = 1;
else
- timeout.tv_usec = (curl_timeo % 1000) * 1000;
+ timeout.tv_usec = (int)(curl_timeo % 1000) * 1000;
}
/* get file descriptors from the transfers */
diff --git a/docs/examples/multi-post.c b/docs/examples/multi-post.c
index c141c68e9..112f3c0cd 100644
--- a/docs/examples/multi-post.c
+++ b/docs/examples/multi-post.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/multi-single.c b/docs/examples/multi-single.c
index 373ede34b..c5933627a 100644
--- a/docs/examples/multi-single.c
+++ b/docs/examples/multi-single.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -37,7 +37,7 @@
#include <curl/curl.h>
/*
- * Simply download a HTTP file.
+ * Simply download an HTTP file.
*/
int main(void)
{
diff --git a/docs/examples/multi-uv.c b/docs/examples/multi-uv.c
index fe7b357e8..6581b9fa6 100644
--- a/docs/examples/multi-uv.c
+++ b/docs/examples/multi-uv.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/multithread.c b/docs/examples/multithread.c
index 4f2c85574..cc4ce7c12 100644
--- a/docs/examples/multithread.c
+++ b/docs/examples/multithread.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
*
***************************************************************************/
/* <DESC>
- * A multi-threaded example that uses pthreads to fetch several files at once
+ * A multi-threaded program using pthreads to fetch several files at once
* </DESC>
*/
diff --git a/docs/examples/opensslthreadlock.c b/docs/examples/opensslthreadlock.c
deleted file mode 100644
index a7de777ca..000000000
--- a/docs/examples/opensslthreadlock.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed 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
- *
- ***************************************************************************/
-/* <DESC>
- * one way to set the necessary OpenSSL locking callbacks if you want to do
- * multi-threaded transfers with HTTPS/FTPS with libcurl built to use OpenSSL.
- * </DESC>
- */
-/*
- * This is not a complete stand-alone example.
- *
- * Author: Jeremy Brown
- */
-
-#include <stdio.h>
-#include <pthread.h>
-#include <openssl/err.h>
-
-#define MUTEX_TYPE pthread_mutex_t
-#define MUTEX_SETUP(x) pthread_mutex_init(&(x), NULL)
-#define MUTEX_CLEANUP(x) pthread_mutex_destroy(&(x))
-#define MUTEX_LOCK(x) pthread_mutex_lock(&(x))
-#define MUTEX_UNLOCK(x) pthread_mutex_unlock(&(x))
-#define THREAD_ID pthread_self()
-
-
-void handle_error(const char *file, int lineno, const char *msg)
-{
- fprintf(stderr, "** %s:%d %s\n", file, lineno, msg);
- ERR_print_errors_fp(stderr);
- /* exit(-1); */
-}
-
-/* This array will store all of the mutexes available to OpenSSL. */
-static MUTEX_TYPE *mutex_buf = NULL;
-
-static void locking_function(int mode, int n, const char *file, int line)
-{
- if(mode & CRYPTO_LOCK)
- MUTEX_LOCK(mutex_buf[n]);
- else
- MUTEX_UNLOCK(mutex_buf[n]);
-}
-
-static unsigned long id_function(void)
-{
- return ((unsigned long)THREAD_ID);
-}
-
-int thread_setup(void)
-{
- int i;
-
- mutex_buf = malloc(CRYPTO_num_locks() * sizeof(MUTEX_TYPE));
- if(!mutex_buf)
- return 0;
- for(i = 0; i < CRYPTO_num_locks(); i++)
- MUTEX_SETUP(mutex_buf[i]);
- CRYPTO_set_id_callback(id_function);
- CRYPTO_set_locking_callback(locking_function);
- return 1;
-}
-
-int thread_cleanup(void)
-{
- int i;
-
- if(!mutex_buf)
- return 0;
- CRYPTO_set_id_callback(NULL);
- CRYPTO_set_locking_callback(NULL);
- for(i = 0; i < CRYPTO_num_locks(); i++)
- MUTEX_CLEANUP(mutex_buf[i]);
- free(mutex_buf);
- mutex_buf = NULL;
- return 1;
-}
diff --git a/docs/examples/parseurl.c b/docs/examples/parseurl.c
index d6682d70b..688336f02 100644
--- a/docs/examples/parseurl.c
+++ b/docs/examples/parseurl.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -74,7 +74,7 @@ int main(void)
curl_free(path);
}
- fail:
+fail:
curl_url_cleanup(h); /* free url handle */
return 0;
}
diff --git a/docs/examples/persistent.c b/docs/examples/persistent.c
index 6ddfc40ac..51bd8c352 100644
--- a/docs/examples/persistent.c
+++ b/docs/examples/persistent.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
*
***************************************************************************/
/* <DESC>
- * re-using handles to do HTTP persistent connections
+ * reusing handles to do HTTP persistent connections
* </DESC>
*/
#include <stdio.h>
diff --git a/docs/examples/pop3-authzid.c b/docs/examples/pop3-authzid.c
index 8e0c2f2c6..a948e95c6 100644
--- a/docs/examples/pop3-authzid.c
+++ b/docs/examples/pop3-authzid.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * POP3 example showing how to retrieve emails from a shared mailbox
+ * Retrieve emails from a shared POP3 mailbox
* </DESC>
*/
diff --git a/docs/examples/pop3-dele.c b/docs/examples/pop3-dele.c
index d0281cb76..fe3795c24 100644
--- a/docs/examples/pop3-dele.c
+++ b/docs/examples/pop3-dele.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * POP3 example showing how to delete emails
+ * Delete POP3 emails
* </DESC>
*/
diff --git a/docs/examples/pop3-list.c b/docs/examples/pop3-list.c
index 991ff2417..2e8b3baee 100644
--- a/docs/examples/pop3-list.c
+++ b/docs/examples/pop3-list.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * POP3 example to list the contents of a mailbox
+ * List the contents of a POP3 mailbox
* </DESC>
*/
diff --git a/docs/examples/pop3-multi.c b/docs/examples/pop3-multi.c
index 69a108857..b4fad1925 100644
--- a/docs/examples/pop3-multi.c
+++ b/docs/examples/pop3-multi.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * POP3 example using the multi interface
+ * Get POP3 email using the multi interface
* </DESC>
*/
diff --git a/docs/examples/pop3-noop.c b/docs/examples/pop3-noop.c
index a3ecb8821..16181d287 100644
--- a/docs/examples/pop3-noop.c
+++ b/docs/examples/pop3-noop.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * POP3 example showing how to perform a noop
+ * Perform a POP3 noop
* </DESC>
*/
diff --git a/docs/examples/pop3-retr.c b/docs/examples/pop3-retr.c
index 1df065716..4940e0781 100644
--- a/docs/examples/pop3-retr.c
+++ b/docs/examples/pop3-retr.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * POP3 example showing how to retrieve emails
+ * Retrieve POP3 email
* </DESC>
*/
diff --git a/docs/examples/pop3-ssl.c b/docs/examples/pop3-ssl.c
index 6f3455a69..e72cf6f38 100644
--- a/docs/examples/pop3-ssl.c
+++ b/docs/examples/pop3-ssl.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * POP3 example using SSL
+ * Get POP3 email using implicit SSL
* </DESC>
*/
@@ -72,7 +72,7 @@ int main(void)
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
#endif
- /* Since the traffic will be encrypted, it is very useful to turn on debug
+ /* Since the traffic will be encrypted, it is useful to turn on debug
* information within libcurl to see what is happening during the
* transfer */
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
diff --git a/docs/examples/pop3-stat.c b/docs/examples/pop3-stat.c
index 3df35719d..419859bfa 100644
--- a/docs/examples/pop3-stat.c
+++ b/docs/examples/pop3-stat.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * POP3 example showing how to obtain message statistics
+ * Obtain POP3 message statistics
* </DESC>
*/
diff --git a/docs/examples/pop3-tls.c b/docs/examples/pop3-tls.c
index d58b5e49a..04e6e3b71 100644
--- a/docs/examples/pop3-tls.c
+++ b/docs/examples/pop3-tls.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * POP3 example using TLS
+ * POP3 using TLS
* </DESC>
*/
@@ -72,7 +72,7 @@ int main(void)
* for more information. */
curl_easy_setopt(curl, CURLOPT_CAINFO, "/path/to/certificate.pem");
- /* Since the traffic will be encrypted, it is very useful to turn on debug
+ /* Since the traffic will be encrypted, it is useful to turn on debug
* information within libcurl to see what is happening during the
* transfer */
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
diff --git a/docs/examples/pop3-top.c b/docs/examples/pop3-top.c
index c63b43c73..7ceba881b 100644
--- a/docs/examples/pop3-top.c
+++ b/docs/examples/pop3-top.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/pop3-uidl.c b/docs/examples/pop3-uidl.c
index 308de3b44..496e5b08d 100644
--- a/docs/examples/pop3-uidl.c
+++ b/docs/examples/pop3-uidl.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * POP3 example to list the contents of a mailbox by unique ID
+ * List the contents of a POP3 mailbox by unique ID
* </DESC>
*/
diff --git a/docs/examples/post-callback.c b/docs/examples/post-callback.c
index dabcef056..a802c3582 100644
--- a/docs/examples/post-callback.c
+++ b/docs/examples/post-callback.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -101,7 +101,7 @@ int main(void)
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
/*
- If you use POST to a HTTP 1.1 server, you can send data without knowing
+ If you use POST to an HTTP 1.1 server, you can send data without knowing
the size before starting the POST if you use chunked encoding. You
enable this by adding a header like "Transfer-Encoding: chunked" with
CURLOPT_HTTPHEADER. With HTTP 1.0 or without chunked transfer, you must
diff --git a/docs/examples/postinmemory.c b/docs/examples/postinmemory.c
index bbe145773..1610ad5a5 100644
--- a/docs/examples/postinmemory.c
+++ b/docs/examples/postinmemory.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
*
***************************************************************************/
/* <DESC>
- * Make a HTTP POST with data from memory and receive response in memory.
+ * Make an HTTP POST with data from memory and receive response in memory.
* </DESC>
*/
#include <stdio.h>
diff --git a/docs/examples/postit2-formadd.c b/docs/examples/postit2-formadd.c
index 502776960..27761fcda 100644
--- a/docs/examples/postit2-formadd.c
+++ b/docs/examples/postit2-formadd.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -28,7 +28,7 @@
/*
* Example code that uploads a file name 'foo' to a remote script that accepts
- * "HTML form based" (as described in RFC1738) uploads using HTTP POST.
+ * "HTML form based" (as described in RFC 1738) uploads using HTTP POST.
*
* Warning: this example uses the deprecated form api. See "postit2.c"
* for a similar example using the mime api.
diff --git a/docs/examples/postit2.c b/docs/examples/postit2.c
index 5e9c609d3..a1fb12b0f 100644
--- a/docs/examples/postit2.c
+++ b/docs/examples/postit2.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -26,7 +26,7 @@
* </DESC>
*/
/* Example code that uploads a file name 'foo' to a remote script that accepts
- * "HTML form based" (as described in RFC1738) uploads using HTTP POST.
+ * "HTML form based" (as described in RFC 1738) uploads using HTTP POST.
*
* The imaginary form we will fill in looks like:
*
diff --git a/docs/examples/progressfunc.c b/docs/examples/progressfunc.c
index be32b67aa..e164f03ca 100644
--- a/docs/examples/progressfunc.c
+++ b/docs/examples/progressfunc.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/chkdecimalpoint.c b/docs/examples/protofeats.c
index 0ff0b7d6d..3e762218a 100644
--- a/tests/libtest/chkdecimalpoint.c
+++ b/docs/examples/protofeats.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -21,23 +21,32 @@
* SPDX-License-Identifier: curl
*
***************************************************************************/
+/* <DESC>
+ * Outputs all protocols and features supported
+ * </DESC>
+ */
+#include <stdio.h>
+#include <curl/curl.h>
-#include "curl_printf.h"
-
-#include <string.h>
-#include <locale.h>
-
-#define TOTAL_STR_LEN 4
+#if !CURL_AT_LEAST_VERSION(7,87,0)
+#error "too old libcurl"
+#endif
int main(void)
{
- char zero[TOTAL_STR_LEN] = {'\0'};
- int chars;
+ curl_version_info_data *ver;
+ const char *const *ptr;
+
+ curl_global_init(CURL_GLOBAL_ALL);
+
+ ver = curl_version_info(CURLVERSION_NOW);
+ printf("Protocols:\n");
+ for(ptr = ver->protocols; *ptr; ++ptr)
+ printf(" %s\n", *ptr);
+ printf("Features:\n");
+ for(ptr = ver->feature_names; *ptr; ++ptr)
+ printf(" %s\n", *ptr);
- setlocale(LC_NUMERIC, "");
- chars = msnprintf(zero, TOTAL_STR_LEN, "%.1f", 0.0);
- if((chars == (TOTAL_STR_LEN - 1)) && (strcmp(zero, "0.0") == 0))
- return 0;
- else
- return 1;
+ curl_global_cleanup();
+ return 0;
}
diff --git a/docs/examples/resolve.c b/docs/examples/resolve.c
index 40bdfb345..a16f45954 100644
--- a/docs/examples/resolve.c
+++ b/docs/examples/resolve.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/rtsp-options.c b/docs/examples/rtsp-options.c
new file mode 100644
index 000000000..e4a623048
--- /dev/null
+++ b/docs/examples/rtsp-options.c
@@ -0,0 +1,55 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ ***************************************************************************/
+/* <DESC>
+ * Very simple RTSP request sending OPTIONS.
+ * </DESC>
+ */
+#include <stdio.h>
+#include <curl/curl.h>
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res;
+
+ curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "rtsp://example.com/");
+
+ curl_easy_setopt(curl, CURLOPT_RTSP_SESSION_ID, "12345");
+
+ curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_OPTIONS);
+
+ /* Perform the request, res will get the return code */
+ res = curl_easy_perform(curl);
+ /* Check for errors */
+ if(res != CURLE_OK)
+ fprintf(stderr, "curl_easy_perform() failed: %s\n",
+ curl_easy_strerror(res));
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ return 0;
+}
diff --git a/docs/examples/sendrecv.c b/docs/examples/sendrecv.c
index 7da740a09..b935bee10 100644
--- a/docs/examples/sendrecv.c
+++ b/docs/examples/sendrecv.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
*
***************************************************************************/
/* <DESC>
- * An example of curl_easy_send() and curl_easy_recv() usage.
+ * Demonstrate curl_easy_send() and curl_easy_recv() usage.
* </DESC>
*/
@@ -38,7 +38,7 @@ static int wait_on_socket(curl_socket_t sockfd, int for_recv, long timeout_ms)
int res;
tv.tv_sec = timeout_ms / 1000;
- tv.tv_usec = (timeout_ms % 1000) * 1000;
+ tv.tv_usec = (int)(timeout_ms % 1000) * 1000;
FD_ZERO(&infd);
FD_ZERO(&outfd);
diff --git a/docs/examples/sepheaders.c b/docs/examples/sepheaders.c
index a398d0568..0d090ed81 100644
--- a/docs/examples/sepheaders.c
+++ b/docs/examples/sepheaders.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/sessioninfo.c b/docs/examples/sessioninfo.c
index 4a848b9fe..befb8f3c0 100644
--- a/docs/examples/sessioninfo.c
+++ b/docs/examples/sessioninfo.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/sftpget.c b/docs/examples/sftpget.c
index 05041b18b..6f0cb2ad4 100644
--- a/docs/examples/sftpget.c
+++ b/docs/examples/sftpget.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -77,7 +77,7 @@ int main(void)
*/
curl_easy_setopt(curl, CURLOPT_URL,
"sftp://user@server/home/user/file.txt");
- /* Define our callback to get called when there's data to be written */
+ /* Define our callback to get called when there is data to be written */
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite);
/* Set a pointer to our struct to pass to the callback */
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile);
diff --git a/docs/examples/sftpuploadresume.c b/docs/examples/sftpuploadresume.c
index 7c72e5d09..aabe5c395 100644
--- a/docs/examples/sftpuploadresume.c
+++ b/docs/examples/sftpuploadresume.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/shared-connection-cache.c b/docs/examples/shared-connection-cache.c
index ac9eb5492..26bfb1a46 100644
--- a/docs/examples/shared-connection-cache.c
+++ b/docs/examples/shared-connection-cache.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/simple.c b/docs/examples/simple.c
index 38134c394..8579b0ba5 100644
--- a/docs/examples/simple.c
+++ b/docs/examples/simple.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/simplepost.c b/docs/examples/simplepost.c
index 95564d75f..89435afa6 100644
--- a/docs/examples/simplepost.c
+++ b/docs/examples/simplepost.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/simplessl.c b/docs/examples/simplessl.c
index 879672b3f..9d933ce82 100644
--- a/docs/examples/simplessl.c
+++ b/docs/examples/simplessl.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -118,7 +118,7 @@ int main(void)
/* set the private key (file or ID in engine) */
curl_easy_setopt(curl, CURLOPT_SSLKEY, pKeyName);
- /* set the file with the certs vaildating the server */
+ /* set the file with the certs validating the server */
curl_easy_setopt(curl, CURLOPT_CAINFO, pCACertFile);
/* disconnect if we cannot validate server's cert */
diff --git a/docs/examples/smooth-gtk-thread.c b/docs/examples/smooth-gtk-thread.c
index c9923746f..906660f99 100644
--- a/docs/examples/smooth-gtk-thread.c
+++ b/docs/examples/smooth-gtk-thread.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/smtp-authzid.c b/docs/examples/smtp-authzid.c
index d48a811c8..dc24d7f4d 100644
--- a/docs/examples/smtp-authzid.c
+++ b/docs/examples/smtp-authzid.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -39,7 +39,7 @@
*/
/* The libcurl options want plain addresses, the viewable headers in the mail
- * can very well get a full name as well.
+ * can get a full name as well.
*/
#define FROM_ADDR "<ursel@example.org>"
#define SENDER_ADDR "<kurt@example.org>"
@@ -57,11 +57,11 @@ static const char *payload_text =
"Message-ID: <dcd7cb36-11db-487a-9f3a-e652a9458efd@"
"rfcpedant.example.org>\r\n"
"Subject: SMTP example message\r\n"
- "\r\n" /* empty line to divide headers from body, see RFC5322 */
+ "\r\n" /* empty line to divide headers from body, see RFC 5322 */
"The body of the message starts here.\r\n"
"\r\n"
"It could be a lot of lines, could be MIME encoded, whatever.\r\n"
- "Check RFC5322.\r\n";
+ "Check RFC 5322.\r\n";
struct upload_status {
size_t bytes_read;
@@ -148,12 +148,12 @@ int main(void)
curl_slist_free_all(recipients);
/* curl will not send the QUIT command until you call cleanup, so you
- * should be able to re-use this connection for additional messages
+ * should be able to reuse this connection for additional messages
* (setting CURLOPT_MAIL_FROM and CURLOPT_MAIL_RCPT as required, and
* calling curl_easy_perform() again. It may not be a good idea to keep
- * the connection open for a very long time though (more than a few
- * minutes may result in the server timing out the connection), and you do
- * want to clean up in the end.
+ * the connection open for a long time though (more than a few minutes may
+ * result in the server timing out the connection), and you do want to
+ * clean up in the end.
*/
curl_easy_cleanup(curl);
}
diff --git a/docs/examples/smtp-expn.c b/docs/examples/smtp-expn.c
index 6d9d4a4b8..e61b6b4ee 100644
--- a/docs/examples/smtp-expn.c
+++ b/docs/examples/smtp-expn.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * SMTP example showing how to expand an email mailing list
+ * Expand an SMTP email mailing list
* </DESC>
*/
@@ -69,9 +69,9 @@ int main(void)
curl_slist_free_all(recipients);
/* curl will not send the QUIT command until you call cleanup, so you
- * should be able to re-use this connection for additional requests. It
- * may not be a good idea to keep the connection open for a very long time
- * though (more than a few minutes may result in the server timing out the
+ * should be able to reuse this connection for additional requests. It may
+ * not be a good idea to keep the connection open for a long time though
+ * (more than a few minutes may result in the server timing out the
* connection) and you do want to clean up in the end.
*/
curl_easy_cleanup(curl);
diff --git a/docs/examples/smtp-mail.c b/docs/examples/smtp-mail.c
index 5f3fcfddb..742787824 100644
--- a/docs/examples/smtp-mail.c
+++ b/docs/examples/smtp-mail.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -36,7 +36,7 @@
*/
/* The libcurl options want plain addresses, the viewable headers in the mail
- * can very well get a full name as well.
+ * can get a full name as well.
*/
#define FROM_ADDR "<sender@example.org>"
#define TO_ADDR "<addressee@example.net>"
@@ -54,11 +54,11 @@ static const char *payload_text =
"Message-ID: <dcd7cb36-11db-487a-9f3a-e652a9458efd@"
"rfcpedant.example.org>\r\n"
"Subject: SMTP example message\r\n"
- "\r\n" /* empty line to divide headers from body, see RFC5322 */
+ "\r\n" /* empty line to divide headers from body, see RFC 5322 */
"The body of the message starts here.\r\n"
"\r\n"
"It could be a lot of lines, could be MIME encoded, whatever.\r\n"
- "Check RFC5322.\r\n";
+ "Check RFC 5322.\r\n";
struct upload_status {
size_t bytes_read;
@@ -136,12 +136,12 @@ int main(void)
curl_slist_free_all(recipients);
/* curl will not send the QUIT command until you call cleanup, so you
- * should be able to re-use this connection for additional messages
+ * should be able to reuse this connection for additional messages
* (setting CURLOPT_MAIL_FROM and CURLOPT_MAIL_RCPT as required, and
* calling curl_easy_perform() again. It may not be a good idea to keep
- * the connection open for a very long time though (more than a few
- * minutes may result in the server timing out the connection), and you do
- * want to clean up in the end.
+ * the connection open for a long time though (more than a few minutes may
+ * result in the server timing out the connection), and you do want to
+ * clean up in the end.
*/
curl_easy_cleanup(curl);
}
diff --git a/docs/examples/smtp-mime.c b/docs/examples/smtp-mime.c
index ce95582b3..36703a1d8 100644
--- a/docs/examples/smtp-mime.c
+++ b/docs/examples/smtp-mime.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * SMTP example showing how to send mime emails
+ * Send SMTP mime emails
* </DESC>
*/
@@ -102,6 +102,9 @@ int main(void)
recipients = curl_slist_append(recipients, CC);
curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);
+ /* allow one of the recipients to fail and still consider it okay */
+ curl_easy_setopt(curl, CURLOPT_MAIL_RCPT_ALLOWFAILS, 1L);
+
/* Build and set the message header list. */
for(cpp = headers_text; *cpp; cpp++)
headers = curl_slist_append(headers, *cpp);
@@ -148,12 +151,12 @@ int main(void)
curl_slist_free_all(headers);
/* curl will not send the QUIT command until you call cleanup, so you
- * should be able to re-use this connection for additional messages
+ * should be able to reuse this connection for additional messages
* (setting CURLOPT_MAIL_FROM and CURLOPT_MAIL_RCPT as required, and
* calling curl_easy_perform() again. It may not be a good idea to keep
- * the connection open for a very long time though (more than a few
- * minutes may result in the server timing out the connection), and you do
- * want to clean up in the end.
+ * the connection open for a long time though (more than a few minutes may
+ * result in the server timing out the connection), and you do want to
+ * clean up in the end.
*/
curl_easy_cleanup(curl);
diff --git a/docs/examples/smtp-multi.c b/docs/examples/smtp-multi.c
index 385827c0c..e5bc4011c 100644
--- a/docs/examples/smtp-multi.c
+++ b/docs/examples/smtp-multi.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * SMTP example using the multi interface
+ * Send SMTP email with the multi interface
* </DESC>
*/
@@ -47,11 +47,11 @@ static const char *payload_text =
"Message-ID: <dcd7cb36-11db-487a-9f3a-e652a9458efd@"
"rfcpedant.example.org>\r\n"
"Subject: SMTP example message\r\n"
- "\r\n" /* empty line to divide headers from body, see RFC5322 */
+ "\r\n" /* empty line to divide headers from body, see RFC 5322 */
"The body of the message starts here.\r\n"
"\r\n"
"It could be a lot of lines, could be MIME encoded, whatever.\r\n"
- "Check RFC5322.\r\n";
+ "Check RFC 5322.\r\n";
struct upload_status {
size_t bytes_read;
diff --git a/docs/examples/smtp-ssl.c b/docs/examples/smtp-ssl.c
index 70b204591..89708408d 100644
--- a/docs/examples/smtp-ssl.c
+++ b/docs/examples/smtp-ssl.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * SMTP example using SSL
+ * Send SMTP email using implicit SSL
* </DESC>
*/
@@ -51,11 +51,11 @@ static const char *payload_text =
"Message-ID: <dcd7cb36-11db-487a-9f3a-e652a9458efd@"
"rfcpedant.example.org>\r\n"
"Subject: SMTP example message\r\n"
- "\r\n" /* empty line to divide headers from body, see RFC5322 */
+ "\r\n" /* empty line to divide headers from body, see RFC 5322 */
"The body of the message starts here.\r\n"
"\r\n"
"It could be a lot of lines, could be MIME encoded, whatever.\r\n"
- "Check RFC5322.\r\n";
+ "Check RFC 5322.\r\n";
struct upload_status {
size_t bytes_read;
@@ -146,7 +146,7 @@ int main(void)
curl_easy_setopt(curl, CURLOPT_READDATA, &upload_ctx);
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
- /* Since the traffic will be encrypted, it is very useful to turn on debug
+ /* Since the traffic will be encrypted, it is useful to turn on debug
* information within libcurl to see what is happening during the
* transfer */
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
diff --git a/docs/examples/smtp-tls.c b/docs/examples/smtp-tls.c
index e30f4788e..83aab69cb 100644
--- a/docs/examples/smtp-tls.c
+++ b/docs/examples/smtp-tls.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * SMTP example using TLS
+ * Send SMTP email using implicit TLS
* </DESC>
*/
@@ -51,11 +51,11 @@ static const char *payload_text =
"Message-ID: <dcd7cb36-11db-487a-9f3a-e652a9458efd@"
"rfcpedant.example.org>\r\n"
"Subject: SMTP example message\r\n"
- "\r\n" /* empty line to divide headers from body, see RFC5322 */
+ "\r\n" /* empty line to divide headers from body, see RFC 5322 */
"The body of the message starts here.\r\n"
"\r\n"
"It could be a lot of lines, could be MIME encoded, whatever.\r\n"
- "Check RFC5322.\r\n";
+ "Check RFC 5322.\r\n";
struct upload_status {
size_t bytes_read;
@@ -101,7 +101,7 @@ int main(void)
/* This is the URL for your mailserver. Note the use of port 587 here,
* instead of the normal SMTP port (25). Port 587 is commonly used for
- * secure mail submission (see RFC4403), but you should use whatever
+ * secure mail submission (see RFC 4403), but you should use whatever
* matches your server configuration. */
curl_easy_setopt(curl, CURLOPT_URL, "smtp://mainserver.example.net:587");
@@ -148,8 +148,9 @@ int main(void)
curl_easy_setopt(curl, CURLOPT_READDATA, &upload_ctx);
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
- /* Since the traffic will be encrypted, it is very useful to turn on debug
- * information within libcurl to see what is happening during the transfer.
+ /* Since the traffic will be encrypted, it is useful to turn on debug
+ * information within libcurl to see what is happening during the
+ * transfer.
*/
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
diff --git a/docs/examples/smtp-vrfy.c b/docs/examples/smtp-vrfy.c
index e6815b6cb..70da41b06 100644
--- a/docs/examples/smtp-vrfy.c
+++ b/docs/examples/smtp-vrfy.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
***************************************************************************/
/* <DESC>
- * SMTP example showing how to verify an email address
+ * Verify an SMTP email address
* </DESC>
*/
@@ -69,9 +69,9 @@ int main(void)
curl_slist_free_all(recipients);
/* curl will not send the QUIT command until you call cleanup, so you
- * should be able to re-use this connection for additional requests. It
- * may not be a good idea to keep the connection open for a very long time
- * though (more than a few minutes may result in the server timing out the
+ * should be able to reuse this connection for additional requests. It may
+ * not be a good idea to keep the connection open for a long time though
+ * (more than a few minutes may result in the server timing out the
* connection) and you do want to clean up in the end.
*/
curl_easy_cleanup(curl);
diff --git a/docs/examples/sslbackend.c b/docs/examples/sslbackend.c
index e07d1905e..fd2b57534 100644
--- a/docs/examples/sslbackend.c
+++ b/docs/examples/sslbackend.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -49,7 +49,7 @@ int main(int argc, char **argv)
const curl_ssl_backend **list;
int i;
- result = curl_global_sslset((curl_sslbackend)-1, NULL, &list);
+ result = curl_global_sslset(CURLSSLBACKEND_NONE, NULL, &list);
assert(result == CURLSSLSET_UNKNOWN_BACKEND);
for(i = 0; list[i]; i++)
@@ -64,7 +64,7 @@ int main(int argc, char **argv)
result = curl_global_sslset((curl_sslbackend)id, NULL, NULL);
}
else
- result = curl_global_sslset((curl_sslbackend)-1, name, NULL);
+ result = curl_global_sslset(CURLSSLBACKEND_NONE, name, NULL);
if(result == CURLSSLSET_UNKNOWN_BACKEND) {
fprintf(stderr, "Unknown SSL backend id: %s\n", name);
diff --git a/docs/examples/synctime.c b/docs/examples/synctime.c
index b617dd6ab..fcf25d941 100644
--- a/docs/examples/synctime.c
+++ b/docs/examples/synctime.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -41,7 +41,7 @@
*
* Synchronising your computer clock via Internet time server usually relies
* on DAYTIME, TIME, or NTP protocols. These protocols provide good accurate
- * time synchronization but it does not work very well through a
+ * time synchronization but it does not work well through a
* firewall/proxy. Some adjustment has to be made to the firewall/proxy for
* these protocols to work properly.
*
@@ -54,7 +54,7 @@
* 2. Webserver system time must in sync with the NTP time server,
* or at least provide an accurate time keeping.
* 3. Webserver HTTP header does not provide the milliseconds units,
- * so there is no way to get very accurate time.
+ * so there is no way to get an accurate time.
* 4. This software could only provide an accuracy of +- a few seconds,
* as Round-Trip delay time is not taken into consideration.
* Compensation of network, firewall/proxy delay cannot be simply divide
diff --git a/docs/examples/threaded-ssl.c b/docs/examples/threaded-ssl.c
index 09292c49a..f58e44741 100644
--- a/docs/examples/threaded-ssl.c
+++ b/docs/examples/threaded-ssl.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/unixsocket.c b/docs/examples/unixsocket.c
new file mode 100644
index 000000000..53c5fd2de
--- /dev/null
+++ b/docs/examples/unixsocket.c
@@ -0,0 +1,67 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ ***************************************************************************/
+/* <DESC>
+ * Access HTTP server over unix domain socket
+ * </DESC>
+ */
+#include <stdio.h>
+#include <curl/curl.h>
+
+#ifdef USE_ABSTRACT
+/*
+ * The abstract socket namespace is a nonportable Linux extension. The name
+ * has no connection with filesystem pathnames.
+ */
+#define ABSTRACT "http-unix-domain"
+#else
+#define PATH "/tmp/http-unix-domain"
+#endif
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res;
+
+ curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+
+#ifdef USE_ABSTRACT
+ curl_easy_setopt(curl, CURLOPT_ABSTRACT_UNIX_SOCKET, ABSTRACT);
+#else
+ curl_easy_setopt(curl, CURLOPT_UNIX_SOCKET_PATH, PATH);
+#endif
+
+ /* Perform the request, res will get the return code */
+ res = curl_easy_perform(curl);
+ /* Check for errors */
+ if(res != CURLE_OK)
+ fprintf(stderr, "curl_easy_perform() failed: %s\n",
+ curl_easy_strerror(res));
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ return 0;
+}
diff --git a/docs/examples/url2file.c b/docs/examples/url2file.c
index c01bcf3e4..f95d57464 100644
--- a/docs/examples/url2file.c
+++ b/docs/examples/url2file.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/examples/urlapi.c b/docs/examples/urlapi.c
index 11962abc5..2ed78eb11 100644
--- a/docs/examples/urlapi.c
+++ b/docs/examples/urlapi.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -58,6 +58,9 @@ int main(void)
curl_easy_setopt(curl, CURLOPT_CURLU, urlp);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+ /* only allow HTTP, TFTP and SFTP */
+ curl_easy_setopt(curl, CURLOPT_PROTOCOLS_STR, "http,tftp,sftp");
+
res = curl_easy_perform(curl);
/* Check for errors */
if(res != CURLE_OK)
@@ -67,7 +70,7 @@ int main(void)
goto cleanup;
}
- cleanup:
+cleanup:
curl_url_cleanup(urlp);
curl_easy_cleanup(curl);
return 0;
diff --git a/docs/examples/usercertinmem.c b/docs/examples/usercertinmem.c
index 89a0c3c40..12a2b7937 100644
--- a/docs/examples/usercertinmem.c
+++ b/docs/examples/usercertinmem.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2013 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -94,7 +94,7 @@ static CURLcode sslctx_function(CURL *curl, void *sslctx, void *parm)
"omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD\n"\
"-----END CERTIFICATE-----\n";
-/*replace the XXX with the actual RSA key*/
+/* replace the XXX with the actual RSA key */
const char *mykey =
"-----BEGIN RSA PRIVATE KEY-----\n"\
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"\
@@ -133,25 +133,25 @@ static CURLcode sslctx_function(CURL *curl, void *sslctx, void *parm)
printf("PEM_read_bio_X509 failed...\n");
}
- /*tell SSL to use the X509 certificate*/
+ /* tell SSL to use the X509 certificate */
ret = SSL_CTX_use_certificate((SSL_CTX*)sslctx, cert);
if(ret != 1) {
printf("Use certificate failed\n");
}
- /*create a bio for the RSA key*/
+ /* create a bio for the RSA key */
kbio = BIO_new_mem_buf((char *)mykey, -1);
if(!kbio) {
printf("BIO_new_mem_buf failed\n");
}
- /*read the key bio into an RSA object*/
+ /* read the key bio into an RSA object */
rsa = PEM_read_bio_RSAPrivateKey(kbio, NULL, 0, NULL);
if(!rsa) {
printf("Failed to create key bio\n");
}
- /*tell SSL to use the RSA key from memory*/
+ /* tell SSL to use the RSA key from memory */
ret = SSL_CTX_use_RSAPrivateKey((SSL_CTX*)sslctx, rsa);
if(ret != 1) {
printf("Use Key failed\n");
@@ -192,7 +192,7 @@ int main(void)
curl_easy_setopt(ch, CURLOPT_SSLCERTTYPE, "PEM");
/* both VERIFYPEER and VERIFYHOST are set to 0 in this case because there is
- no CA certificate*/
+ no CA certificate */
curl_easy_setopt(ch, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(ch, CURLOPT_SSL_VERIFYHOST, 0L);
diff --git a/docs/examples/version-check.pl b/docs/examples/version-check.pl
index aca37995a..932d154bd 100755
--- a/docs/examples/version-check.pl
+++ b/docs/examples/version-check.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/docs/examples/websocket-cb.c b/docs/examples/websocket-cb.c
new file mode 100644
index 000000000..7adbf4489
--- /dev/null
+++ b/docs/examples/websocket-cb.c
@@ -0,0 +1,68 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ ***************************************************************************/
+/* <DESC>
+ * WebSocket download-only using write callback
+ * </DESC>
+ */
+#include <stdio.h>
+#include <curl/curl.h>
+
+static size_t writecb(char *b, size_t size, size_t nitems, void *p)
+{
+ CURL *easy = p;
+ size_t i;
+ const struct curl_ws_frame *frame = curl_ws_meta(easy);
+ fprintf(stderr, "Type: %s\n", frame->flags & CURLWS_BINARY ?
+ "binary" : "text");
+ fprintf(stderr, "Bytes: %u", (unsigned int)(nitems * size));
+ for(i = 0; i < nitems; i++)
+ fprintf(stderr, "%02x ", (unsigned char)b[i]);
+ return nitems;
+}
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res;
+
+ curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "wss://example.com");
+
+ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writecb);
+ /* pass the easy handle to the callback */
+ curl_easy_setopt(curl, CURLOPT_WRITEDATA, curl);
+
+ /* Perform the request, res will get the return code */
+ res = curl_easy_perform(curl);
+ /* Check for errors */
+ if(res != CURLE_OK)
+ fprintf(stderr, "curl_easy_perform() failed: %s\n",
+ curl_easy_strerror(res));
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ return 0;
+}
diff --git a/docs/examples/websocket.c b/docs/examples/websocket.c
new file mode 100644
index 000000000..dbcd044f5
--- /dev/null
+++ b/docs/examples/websocket.c
@@ -0,0 +1,131 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ ***************************************************************************/
+/* <DESC>
+ * WebSocket using CONNECT_ONLY
+ * </DESC>
+ */
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <curl/curl.h>
+
+static int ping(CURL *curl, const char *send_payload)
+{
+ size_t sent;
+ CURLcode result =
+ curl_ws_send(curl, send_payload, strlen(send_payload), &sent, 0,
+ CURLWS_PING);
+ return (int)result;
+}
+
+static int recv_pong(CURL *curl, const char *expected_payload)
+{
+ size_t rlen;
+ const struct curl_ws_frame *meta;
+ char buffer[256];
+ CURLcode result = curl_ws_recv(curl, buffer, sizeof(buffer), &rlen, &meta);
+ if(!result) {
+ if(meta->flags & CURLWS_PONG) {
+ int same = 0;
+ fprintf(stderr, "ws: got PONG back\n");
+ if(rlen == strlen(expected_payload)) {
+ if(!memcmp(expected_payload, buffer, rlen)) {
+ fprintf(stderr, "ws: got the same payload back\n");
+ same = 1;
+ }
+ }
+ if(!same)
+ fprintf(stderr, "ws: did NOT get the same payload back\n");
+ }
+ else {
+ fprintf(stderr, "recv_pong: got %u bytes rflags %x\n", (int)rlen,
+ meta->flags);
+ }
+ }
+ fprintf(stderr, "ws: curl_ws_recv returned %u, received %u\n",
+ (unsigned int)result, (unsigned int)rlen);
+ return (int)result;
+}
+
+static int recv_any(CURL *curl)
+{
+ size_t rlen;
+ const struct curl_ws_frame *meta;
+ char buffer[256];
+ CURLcode result = curl_ws_recv(curl, buffer, sizeof(buffer), &rlen, &meta);
+ if(result)
+ return result;
+
+ return 0;
+}
+
+/* close the connection */
+static void websocket_close(CURL *curl)
+{
+ size_t sent;
+ (void)curl_ws_send(curl, "", 0, &sent, 0, CURLWS_CLOSE);
+}
+
+static void websocket(CURL *curl)
+{
+ int i = 0;
+ do {
+ recv_any(curl);
+ if(ping(curl, "foobar"))
+ return;
+ if(recv_pong(curl, "foobar")) {
+ return;
+ }
+ sleep(2);
+ } while(i++ < 10);
+ websocket_close(curl);
+}
+
+int main(void)
+{
+ CURL *curl;
+ CURLcode res;
+
+ curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "wss://example.com");
+
+ curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 2L); /* websocket style */
+
+ /* Perform the request, res will get the return code */
+ res = curl_easy_perform(curl);
+ /* Check for errors */
+ if(res != CURLE_OK)
+ fprintf(stderr, "curl_easy_perform() failed: %s\n",
+ curl_easy_strerror(res));
+ else {
+ /* connected and ready */
+ websocket(curl);
+ }
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ return 0;
+}
diff --git a/docs/examples/xmlstream.c b/docs/examples/xmlstream.c
index ae5963b95..76a8e48cc 100644
--- a/docs/examples/xmlstream.c
+++ b/docs/examples/xmlstream.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/docs/libcurl/ABI.md b/docs/libcurl/ABI.md
index f03363327..408ea1094 100644
--- a/docs/libcurl/ABI.md
+++ b/docs/libcurl/ABI.md
@@ -1,5 +1,5 @@
<!--
-Copyright (C) 1998 - 2022 Daniel Stenberg, <daniel@haxx.se>, et al.
+Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
-->
diff --git a/docs/libcurl/CMakeLists.txt b/docs/libcurl/CMakeLists.txt
index e90d9bbd5..c83b5c91c 100644
--- a/docs/libcurl/CMakeLists.txt
+++ b/docs/libcurl/CMakeLists.txt
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/docs/libcurl/Makefile.am b/docs/libcurl/Makefile.am
index aa0eda05a..8d512a6c2 100644
--- a/docs/libcurl/Makefile.am
+++ b/docs/libcurl/Makefile.am
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/docs/libcurl/Makefile.in b/docs/libcurl/Makefile.in
index 93e506756..bee39635e 100644
--- a/docs/libcurl/Makefile.in
+++ b/docs/libcurl/Makefile.in
@@ -21,7 +21,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -45,7 +45,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2008 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -146,7 +146,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.m4 \
$(top_srcdir)/m4/curl-confopts.m4 \
$(top_srcdir)/m4/curl-functions.m4 \
$(top_srcdir)/m4/curl-gnutls.m4 \
- $(top_srcdir)/m4/curl-mbedtls.m4 $(top_srcdir)/m4/curl-nss.m4 \
+ $(top_srcdir)/m4/curl-mbedtls.m4 \
$(top_srcdir)/m4/curl-openssl.m4 \
$(top_srcdir)/m4/curl-override.m4 \
$(top_srcdir)/m4/curl-reentrant.m4 \
@@ -468,6 +468,8 @@ am__relativize = \
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APACHECTL = @APACHECTL@
+APXS = @APXS@
AR = @AR@
AR_FLAGS = @AR_FLAGS@
AS = @AS@
@@ -476,6 +478,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@
+CADDY = @CADDY@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -537,6 +540,8 @@ HAVE_LIBZ = @HAVE_LIBZ@
HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
HAVE_PROTO_BSDSOCKET_H = @HAVE_PROTO_BSDSOCKET_H@
HAVE_ZSTD = @HAVE_ZSTD@
+HTTPD = @HTTPD@
+HTTPD_NGHTTPX = @HTTPD_NGHTTPX@
IDN_ENABLED = @IDN_ENABLED@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -564,7 +569,6 @@ MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
NROFF = @NROFF@
-NSS_LIBS = @NSS_LIBS@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
@@ -595,6 +599,7 @@ SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@
SUPPORT_FEATURES = @SUPPORT_FEATURES@
SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_NGHTTPX = @TEST_NGHTTPX@
USE_ARES = @USE_ARES@
USE_BEARSSL = @USE_BEARSSL@
USE_GNUTLS = @USE_GNUTLS@
@@ -608,9 +613,8 @@ USE_NGHTTP2 = @USE_NGHTTP2@
USE_NGHTTP3 = @USE_NGHTTP3@
USE_NGTCP2 = @USE_NGTCP2@
USE_NGTCP2_CRYPTO_GNUTLS = @USE_NGTCP2_CRYPTO_GNUTLS@
-USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@
+USE_NGTCP2_CRYPTO_QUICTLS = @USE_NGTCP2_CRYPTO_QUICTLS@
USE_NGTCP2_CRYPTO_WOLFSSL = @USE_NGTCP2_CRYPTO_WOLFSSL@
-USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_RUSTLS = @USE_RUSTLS@
@@ -713,6 +717,7 @@ man_MANS = \
curl_global_cleanup.3 \
curl_global_init.3 \
curl_global_init_mem.3 \
+ curl_global_trace.3 \
curl_global_sslset.3 \
curl_mime_addpart.3 \
curl_mime_data.3 \
@@ -731,6 +736,7 @@ man_MANS = \
curl_multi_assign.3 \
curl_multi_cleanup.3 \
curl_multi_fdset.3 \
+ curl_multi_get_handles.3 \
curl_multi_info_read.3 \
curl_multi_init.3 \
curl_multi_perform.3 \
@@ -744,6 +750,8 @@ man_MANS = \
curl_multi_timeout.3 \
curl_multi_wakeup.3 \
curl_multi_wait.3 \
+ curl_pushheader_bynum.3 \
+ curl_pushheader_byname.3 \
curl_share_cleanup.3 \
curl_share_init.3 \
curl_share_setopt.3 \
@@ -766,6 +774,7 @@ man_MANS = \
curl_ws_send.3 \
libcurl-easy.3 \
libcurl-env.3 \
+ libcurl-env-dbg.3 \
libcurl-errors.3 \
libcurl-multi.3 \
libcurl-security.3 \
@@ -774,6 +783,7 @@ man_MANS = \
libcurl-thread.3 \
libcurl-tutorial.3 \
libcurl-url.3 \
+ libcurl-ws.3 \
libcurl.3
man_DISTMANS = $(man_MANS:.3=.3.dist)
diff --git a/docs/libcurl/Makefile.inc b/docs/libcurl/Makefile.inc
index 3e62ff0b0..336b4192e 100644
--- a/docs/libcurl/Makefile.inc
+++ b/docs/libcurl/Makefile.inc
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2008 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -54,6 +54,7 @@ man_MANS = \
curl_global_cleanup.3 \
curl_global_init.3 \
curl_global_init_mem.3 \
+ curl_global_trace.3 \
curl_global_sslset.3 \
curl_mime_addpart.3 \
curl_mime_data.3 \
@@ -72,6 +73,7 @@ man_MANS = \
curl_multi_assign.3 \
curl_multi_cleanup.3 \
curl_multi_fdset.3 \
+ curl_multi_get_handles.3 \
curl_multi_info_read.3 \
curl_multi_init.3 \
curl_multi_perform.3 \
@@ -85,6 +87,8 @@ man_MANS = \
curl_multi_timeout.3 \
curl_multi_wakeup.3 \
curl_multi_wait.3 \
+ curl_pushheader_bynum.3 \
+ curl_pushheader_byname.3 \
curl_share_cleanup.3 \
curl_share_init.3 \
curl_share_setopt.3 \
@@ -107,6 +111,7 @@ man_MANS = \
curl_ws_send.3 \
libcurl-easy.3 \
libcurl-env.3 \
+ libcurl-env-dbg.3 \
libcurl-errors.3 \
libcurl-multi.3 \
libcurl-security.3 \
@@ -115,4 +120,5 @@ man_MANS = \
libcurl-thread.3 \
libcurl-tutorial.3 \
libcurl-url.3 \
+ libcurl-ws.3 \
libcurl.3
diff --git a/docs/libcurl/curl_easy_cleanup.3 b/docs/libcurl/curl_easy_cleanup.3
index dec1f51ce..11d90dbb7 100644
--- a/docs/libcurl/curl_easy_cleanup.3
+++ b/docs/libcurl/curl_easy_cleanup.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH curl_easy_cleanup 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_easy_cleanup 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_easy_cleanup - End a libcurl easy handle
@@ -33,14 +33,13 @@ curl_easy_cleanup - End a libcurl easy handle
void curl_easy_cleanup(CURL *handle);
.fi
.SH DESCRIPTION
-This function must be the last function to call for an easy session. It is the
-opposite of the \fIcurl_easy_init(3)\fP function and must be called with the
-same \fIhandle\fP as input that a \fIcurl_easy_init(3)\fP call returned.
+This function is the opposite of \fIcurl_easy_init(3)\fP. It closes down and
+frees all resources previously associated with this easy handle.
-This might close all connections this handle has used and possibly has kept
-open until now - unless it was attached to a multi handle while doing the
-transfers. Do not call this function if you intend to transfer more files,
-re-using handles is a key to good performance with libcurl.
+This call closes all connections this handle has used and possibly has kept
+open until now unless the easy handle was attached to a multi handle while
+doing the transfers. Do not call this function if you intend to transfer more
+files, reusing handles is a key to good performance with libcurl.
Occasionally you may get your progress callback or header callback called from
within \fIcurl_easy_cleanup(3)\fP (if previously set for the handle using
@@ -48,24 +47,28 @@ within \fIcurl_easy_cleanup(3)\fP (if previously set for the handle using
connection and the protocol is of a kind that requires a command/response
sequence before disconnect. Examples of such protocols are FTP, POP3 and IMAP.
-Any use of the \fBhandle\fP after this function has been called and have
-returned, is illegal. \fIcurl_easy_cleanup(3)\fP kills the handle and all
-memory associated with it!
+Any use of the easy \fBhandle\fP after this function has been called and have
+returned, is illegal.
To close an easy handle that has been used with the multi interface, make sure
-to call \fIcurl_multi_remove_handle(3)\fP first to remove it from the multi
+to first call \fIcurl_multi_remove_handle(3)\fP to remove it from the multi
handle before it is closed.
-Passing in a NULL pointer in \fIhandle\fP will make this function return
+Passing in a NULL pointer in \fIhandle\fP makes this function return
immediately with no action.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
+ if(res)
+ printf("error: %s\\n", curl_easy_strerror(res));
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -73,6 +76,8 @@ Added in 7.1
.SH RETURN VALUE
None
.SH "SEE ALSO"
-.BR curl_easy_init "(3), " curl_easy_duphandle "(3), "
-.BR curl_easy_reset "(3), "
-.BR curl_multi_cleanup "(3), " curl_multi_remove_handle "(3) "
+.BR curl_easy_duphandle (3),
+.BR curl_easy_init (3),
+.BR curl_easy_reset (3),
+.BR curl_multi_cleanup (3),
+.BR curl_multi_remove_handle (3)
diff --git a/docs/libcurl/curl_easy_duphandle.3 b/docs/libcurl/curl_easy_duphandle.3
index c0e0f498e..b3dcf68da 100644
--- a/docs/libcurl/curl_easy_duphandle.3
+++ b/docs/libcurl/curl_easy_duphandle.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_easy_duphandle 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_easy_duphandle 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_easy_duphandle - Clone a libcurl session handle
@@ -32,34 +32,39 @@ curl_easy_duphandle - Clone a libcurl session handle
CURL *curl_easy_duphandle(CURL *handle);
.fi
.SH DESCRIPTION
-This function will return a new curl handle, a duplicate, using all the
-options previously set in the input curl \fIhandle\fP. Both handles can
-subsequently be used independently and they must both be freed with
+This function returns a new curl handle, a duplicate, using all the options
+previously set in the input curl \fIhandle\fP. Both handles can subsequently
+be used independently and they must both be freed with
\fIcurl_easy_cleanup(3)\fP.
-All strings that the input handle has been told to point to (as opposed to
-copy) with previous calls to \fIcurl_easy_setopt(3)\fP using char * inputs,
-will be pointed to by the new handle as well. You must therefore make sure to
-keep the data around until both handles have been cleaned up.
+Any options that the input handle has been told to point to (as opposed to
+copy) with previous calls to \fIcurl_easy_setopt(3)\fP, are pointed to by the
+new handle as well. You must therefore make sure to keep the data around until
+both handles have been cleaned up.
-The new handle will \fBnot\fP inherit any state information, no connections,
-no SSL sessions and no cookies. It also will not inherit any share object
-states or options (it will be made as if \fICURLOPT_SHARE(3)\fP was set to
-NULL).
+The new handle does \fBnot\fP inherit any state information, no connections,
+no SSL sessions and no cookies. It also does not inherit any share object
+states or options (created as if \fICURLOPT_SHARE(3)\fP was set to NULL).
+
+If the source handle has HSTS or alt-svc enabled, the duplicate gets data read
+data from the main file name to populate the cache.
In multi-threaded programs, this function must be called in a synchronous way,
the input handle may not be in use when cloned.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-CURL *nother;
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- nother = curl_easy_duphandle(curl);
- res = curl_easy_perform(nother);
- curl_easy_cleanup(nother);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ CURL *nother;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ nother = curl_easy_duphandle(curl);
+ res = curl_easy_perform(nother);
+ curl_easy_cleanup(nother);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -67,6 +72,8 @@ Added in 7.9
.SH RETURN VALUE
If this function returns NULL, something went wrong and no valid handle was
returned.
-.SH "SEE ALSO"
-.BR curl_easy_init "(3)," curl_easy_cleanup "(3)," curl_easy_reset "(3),"
-.BR curl_global_init "(3)"
+.SH SEE ALSO
+.BR curl_easy_cleanup (3),
+.BR curl_easy_init (3),
+.BR curl_easy_reset (3),
+.BR curl_global_init (3)
diff --git a/docs/libcurl/curl_easy_escape.3 b/docs/libcurl/curl_easy_escape.3
index 0648cfdc6..e5d5ee1f8 100644
--- a/docs/libcurl/curl_easy_escape.3
+++ b/docs/libcurl/curl_easy_escape.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH curl_easy_escape 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_easy_escape 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_easy_escape - URL encodes the given string
@@ -43,8 +43,8 @@ the input \fIstring\fP to find out the size. This function does not accept
input strings longer than \fBCURL_MAX_INPUT_LENGTH\fP (8 MB).
Since 7.82.0, the \fBcurl\fP parameter is ignored. Prior to that there was
-per-handle character conversion support for some very old operating systems
-such as TPF, but it was otherwise ignored.
+per-handle character conversion support for some old operating systems such as
+TPF, but it was otherwise ignored.
You must \fIcurl_free(3)\fP the returned string when you are done with it.
.SH ENCODING
@@ -58,14 +58,17 @@ The caller of \fIcurl_easy_escape(3)\fP must make sure that the data passed in
to the function is encoded correctly.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- char *output = curl_easy_escape(curl, "data to convert", 15);
- if(output) {
- printf("Encoded: %s\\n", output);
- curl_free(output);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ char *output = curl_easy_escape(curl, "data to convert", 15);
+ if(output) {
+ printf("Encoded: %s\\n", output);
+ curl_free(output);
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -73,4 +76,5 @@ Added in 7.15.4 and replaces the old \fIcurl_escape(3)\fP function.
.SH RETURN VALUE
A pointer to a null-terminated string or NULL if it failed.
.SH "SEE ALSO"
-.BR curl_easy_unescape "(3), " curl_free "(3), " RFC 3986
+.BR curl_easy_unescape (3),
+.BR curl_free (3)
diff --git a/docs/libcurl/curl_easy_getinfo.3 b/docs/libcurl/curl_easy_getinfo.3
index a053ff53b..d397aee2e 100644
--- a/docs/libcurl/curl_easy_getinfo.3
+++ b/docs/libcurl/curl_easy_getinfo.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH curl_easy_getinfo 3 "October 12, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_easy_getinfo 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_easy_getinfo - extract information from a curl handle
@@ -33,12 +33,11 @@ curl_easy_getinfo - extract information from a curl handle
CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );
.fi
.SH DESCRIPTION
-Request internal information from the curl session with this function. The
-third argument \fBMUST\fP be a pointer to a long, a pointer to a char *, a
-pointer to a struct curl_slist * or a pointer to a double (as this
-documentation describes further down). The data pointed-to will be filled in
-accordingly and can be relied upon only if the function returns CURLE_OK. Use
-this function AFTER a performed transfer if you want to get transfer related
+Get the \fIinfo\fP kept in the \fIcurl\fP handle. The third argument
+\fBMUST\fP be pointing to the specific type of the used option which is
+documented in each man page of the \fIinfo\fP option. The data is stored
+accordingly and can be relied upon only if this function returns CURLE_OK. Use
+this function after a performed transfer if you want to get transfer related
data.
You should not free the memory returned by this function unless it is
@@ -171,7 +170,7 @@ Upload size. See \fICURLINFO_CONTENT_LENGTH_UPLOAD_T(3)\fP
Content type from the Content-Type header.
See \fICURLINFO_CONTENT_TYPE(3)\fP
.IP CURLINFO_RETRY_AFTER
-The value from the from the Retry-After header.
+The value from the Retry-After header.
See \fICURLINFO_RETRY_AFTER(3)\fP
.IP CURLINFO_PRIVATE
User's private data pointer.
@@ -235,10 +234,10 @@ See \fICURLINFO_CONDITION_UNMET(3)\fP
RTSP session ID.
See \fICURLINFO_RTSP_SESSION_ID(3)\fP
.IP CURLINFO_RTSP_CLIENT_CSEQ
-RTSP CSeq that will next be used.
+The RTSP client CSeq that is expected next.
See \fICURLINFO_RTSP_CLIENT_CSEQ(3)\fP
.IP CURLINFO_RTSP_SERVER_CSEQ
-RTSP CSeq that will next be expected.
+The RTSP server CSeq that is expected next.
See \fICURLINFO_RTSP_SERVER_CSEQ(3)\fP
.IP CURLINFO_RTSP_CSEQ_RECV
RTSP CSeq last received.
@@ -249,9 +248,15 @@ See \fICURLINFO_PROTOCOL(3)\fP
.IP CURLINFO_SCHEME
The scheme used for the connection. (Added in 7.52.0)
See \fICURLINFO_SCHEME(3)\fP
+.IP CURLINFO_CONN_ID
+The ID of the last connection used by the transfer. (Added in 8.2.0)
+See \fICURLINFO_CONN_ID(3)\fP
+.IP CURLINFO_XFER_ID
+The ID of the transfer. (Added in 8.2.0)
+See \fICURLINFO_XFER_ID(3)\fP
.SH TIMES
+An overview of the six time values available from \fIcurl_easy_getinfo(3)\fP
.nf
-An overview of the six time values available from curl_easy_getinfo()
curl_easy_perform()
|
@@ -264,38 +269,41 @@ curl_easy_perform()
|--|--|--|--|--|--REDIRECT
.fi
.IP NAMELOOKUP
-\fICURLINFO_NAMELOOKUP_TIME\fP and \fICURLINFO_NAMELOOKUP_TIME_T\fP.
+\fICURLINFO_NAMELOOKUP_TIME(3)\fP and \fICURLINFO_NAMELOOKUP_TIME_T(3)\fP.
The time it took from the start until the name resolving was completed.
.IP CONNECT
-\fICURLINFO_CONNECT_TIME\fP and \fICURLINFO_CONNECT_TIME_T\fP.
-The time it took from the start until the connect
-to the remote host (or proxy) was completed.
+\fICURLINFO_CONNECT_TIME(3)\fP and \fICURLINFO_CONNECT_TIME_T(3)\fP. The time
+it took from the start until the connect to the remote host (or proxy) was
+completed.
.IP APPCONNECT
-\fICURLINFO_APPCONNECT_TIME\fP and \fICURLINFO_APPCONNECT_TIME_T\fP.
-The time it took from the start until the SSL
-connect/handshake with the remote host was completed. (Added in 7.19.0)
-The latter is the integer version (measuring microseconds). (Added in 7.60.0)
+\fICURLINFO_APPCONNECT_TIME(3)\fP and \fICURLINFO_APPCONNECT_TIME_T(3)\fP.
+The time it took from the start until the SSL connect/handshake with the
+remote host was completed. (Added in 7.19.0) The latter is the integer version
+(measuring microseconds). (Added in 7.60.0)
.IP PRETRANSFER
-\fICURLINFO_PRETRANSFER_TIME\fP and \fICURLINFO_PRETRANSFER_TIME_T\fP.
-The time it took from the start until the
-file transfer is just about to begin. This includes all pre-transfer commands
-and negotiations that are specific to the particular protocol(s) involved.
+\fICURLINFO_PRETRANSFER_TIME(3)\fP and \fICURLINFO_PRETRANSFER_TIME_T(3)\fP.
+The time it took from the start until the file transfer is just about to
+begin. This includes all pre-transfer commands and negotiations that are
+specific to the particular protocol(s) involved.
.IP STARTTRANSFER
-\fICURLINFO_STARTTRANSFER_TIME\fP and \fICURLINFO_STARTTRANSFER_TIME_T\fP.
-The time it took from the start until the
-first byte is received by libcurl.
+\fICURLINFO_STARTTRANSFER_TIME(3)\fP and
+\fICURLINFO_STARTTRANSFER_TIME_T(3)\fP. The time it took from the start until
+the first byte is received by libcurl.
.IP TOTAL
-\fICURLINFO_TOTAL_TIME\fP and \fICURLINFO_TOTAL_TIME_T\fP.
-Total time of the previous request.
+\fICURLINFO_TOTAL_TIME(3)\fP and \fICURLINFO_TOTAL_TIME_T(3)\fP. Total time
+of the previous request.
.IP REDIRECT
-\fICURLINFO_REDIRECT_TIME\fP and \fICURLINFO_REDIRECT_TIME_T\fP.
-The time it took for all redirection steps
-include name lookup, connect, pretransfer and transfer before final
-transaction was started. So, this is zero if no redirection took place.
+\fICURLINFO_REDIRECT_TIME(3)\fP and \fICURLINFO_REDIRECT_TIME_T(3)\fP. The
+time it took for all redirection steps include name lookup, connect,
+pretransfer and transfer before final transaction was started. So, this is
+zero if no redirection took place.
.SH EXAMPLE
.nf
- curl = curl_easy_init();
+int main(void)
+{
+ CURL *curl = curl_easy_init();
if(curl) {
+ CURLcode res;
curl_easy_setopt(curl, CURLOPT_URL, "https://www.example.com/");
res = curl_easy_perform(curl);
@@ -311,11 +319,12 @@ transaction was started. So, this is zero if no redirection took place.
/* always cleanup */
curl_easy_cleanup(curl);
}
+}
.fi
.SH AVAILABILITY
Added in 7.4.1
.SH RETURN VALUE
If the operation was successful, CURLE_OK is returned. Otherwise an
-appropriate error code will be returned.
+appropriate error code is returned.
.SH "SEE ALSO"
-.BR curl_easy_setopt "(3)"
+.BR curl_easy_setopt (3)
diff --git a/docs/libcurl/curl_easy_header.3 b/docs/libcurl/curl_easy_header.3
index 35c59e65c..46a2293ca 100644
--- a/docs/libcurl/curl_easy_header.3
+++ b/docs/libcurl/curl_easy_header.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_easy_header 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_easy_header 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_easy_header - get an HTTP header
@@ -35,6 +35,7 @@ CURLHcode curl_easy_header(CURL *easy,
unsigned int origin,
int request,
struct curl_header **hout);
+.fi
.SH DESCRIPTION
\fIcurl_easy_header(3)\fP returns a pointer to a "curl_header" struct in
\fBhout\fP with data for the HTTP response header \fIname\fP. The case
@@ -61,23 +62,23 @@ amount of requests used.
libcurl stores and provides the actually used "correct" headers. If for
example two headers with the same name arrive and the latter overrides the
-former, then only the latter will be provided. If the first header survives
-the second, then only the first one will be provided. An application using
-this API does not have to bother about multiple headers used wrongly.
+former, then only the latter is provided. If the first header survives the
+second, then only the first one is provided. An application using this API
+does not have to bother about multiple headers used wrongly.
The memory for the returned struct is associated with the easy handle and
-subsequent calls to \fIcurl_easy_header(3)\fP will clobber the struct used in
-the previous calls for the same easy handle. Applications need to copy the
-data if it wants to keep it around. The memory used for the struct gets freed
-with calling \fIcurl_easy_cleanup(3)\fP of the easy handle.
+subsequent calls to \fIcurl_easy_header(3)\fP clobbers the struct used in the
+previous calls for the same easy handle. Applications need to copy the data if
+it wants to keep it around. The memory used for the struct gets freed with
+calling \fIcurl_easy_cleanup(3)\fP of the easy handle.
The first line in an HTTP response is called the status line. It is not
considered a header by this function. Headers are the "name: value" lines
following the status.
This function can be used before (all) headers have been received and is fine
-to call from within libcurl callbacks. It will always return the state of the
-headers at the time it is called.
+to call from within libcurl callbacks. It returns the state of the headers at
+the time it is called.
.SH "The header struct"
.nf
struct curl_header {
@@ -90,8 +91,8 @@ struct curl_header {
};
.fi
-The data \fBname\fP field points to, will be the same as the requested name
-but it might have a different case.
+The data \fBname\fP field points to, is the same as the requested name, but
+might have a different case.
The data \fBvalue\fP field points to, comes exactly as delivered over the
network but with leading and trailing whitespace and newlines stripped
@@ -127,28 +128,26 @@ response that might happen before the "real" response.
The header is an HTTP/2 or HTTP/3 pseudo header
.SH EXAMPLE
.nf
-struct curl_header *type;
-CURLHcode h =
- curl_easy_header(easy, "Content-Type", 0, CURLH_HEADER, -1, &type);
+int main(void)
+{
+ struct curl_header *type;
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLHcode h;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_perform(curl);
+ h = curl_easy_header(curl, "Content-Type", 0, CURLH_HEADER, -1, &type);
+ curl_easy_cleanup(curl);
+ }
+}
.fi
.SH AVAILABILITY
Added in 7.83.0. Officially supported since 7.84.0.
.SH RETURN VALUE
This function returns a CURLHcode indicating success or error.
-.IP "CURLHE_BADINDEX (1)"
-There is no header with the requested index.
-.IP "CURLHE_MISSING (2)"
-No such header exists.
-.IP "CURLHE_NOHEADERS (3)"
-No headers at all have been recorded.
-.IP "CURLHE_NOREQUEST (4)"
-There was no such request number.
-.IP "CURLHE_OUT_OF_MEMORY (5)"
-Out of resources
-.IP "CURLHE_BAD_ARGUMENT (6)"
-One or more of the given arguments are bad.
-.IP "CURLHE_NOT_BUILT_IN (7)"
-HTTP or the header API has been disabled in the build.
.SH "SEE ALSO"
-.BR curl_easy_nextheader "(3), " curl_easy_perform "(3), "
-.BR CURLOPT_HEADERFUNCTION "(3), " CURLINFO_CONTENT_TYPE "(3) "
+.BR curl_easy_nextheader (3),
+.BR curl_easy_perform (3),
+.BR CURLINFO_CONTENT_TYPE (3),
+.BR CURLOPT_HEADERFUNCTION (3),
+.BR libcurl-errors (3)
diff --git a/docs/libcurl/curl_easy_init.3 b/docs/libcurl/curl_easy_init.3
index 7b6362344..777420bc6 100644
--- a/docs/libcurl/curl_easy_init.3
+++ b/docs/libcurl/curl_easy_init.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_easy_init 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_easy_init 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_easy_init - Start a libcurl easy session
@@ -32,28 +32,41 @@ curl_easy_init - Start a libcurl easy session
CURL *curl_easy_init();
.fi
.SH DESCRIPTION
-This function must be the first function to call, and it returns a CURL easy
-handle that you must use as input to other functions in the easy
-interface. This call \fBMUST\fP have a corresponding call to
-\fIcurl_easy_cleanup(3)\fP when the operation is complete.
+This function allocates and returns a CURL easy handle. Such a handle is used
+as input to other functions in the easy interface. This call must have a
+corresponding call to \fIcurl_easy_cleanup(3)\fP when the operation is
+complete.
-If you did not already call \fIcurl_global_init(3)\fP, \fIcurl_easy_init(3)\fP
-does it automatically. This may be lethal in multi-threaded cases, since
-\fIcurl_global_init(3)\fP is not thread-safe, and it may result in resource
-problems because there is no corresponding cleanup.
+The easy handle is used to hold and control a single network transfer. It is
+encouraged to reuse easy handles for repeated transfers.
+
+An alternative way to get a new easy handle is to duplicate an already
+existing one with \fIcurl_easy_duphandle(3)\fP, which has the upside that it
+gets all the options that were set in the source handle set in the new copy as
+well.
+
+If you did not already call \fIcurl_global_init(3)\fP before calling this
+function, \fIcurl_easy_init(3)\fP does it automatically. This may be lethal in
+multi-threaded cases, if \fIcurl_global_init(3)\fP is not thread-safe in your
+system, and it may then result in resource problems because there is no
+corresponding cleanup.
You are strongly advised to not allow this automatic behavior, by calling
\fIcurl_global_init(3)\fP yourself properly. See the description in
\fBlibcurl\fP(3) of global environment requirements for details of how to use
this function.
+
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -62,5 +75,9 @@ Always
If this function returns NULL, something went wrong and you cannot use the
other curl functions.
.SH "SEE ALSO"
-.BR curl_easy_cleanup "(3), " curl_global_init "(3), " curl_easy_reset "(3), "
-.BR curl_easy_perform "(3) "
+.BR curl_easy_cleanup (3),
+.BR curl_easy_duphandle (3),
+.BR curl_easy_perform (3),
+.BR curl_easy_reset (3),
+.BR curl_global_init (3),
+.BR curl_multi_init (3)
diff --git a/docs/libcurl/curl_easy_nextheader.3 b/docs/libcurl/curl_easy_nextheader.3
index d7ac7a277..b1fdf7525 100644
--- a/docs/libcurl/curl_easy_nextheader.3
+++ b/docs/libcurl/curl_easy_nextheader.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_easy_nextheader 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_easy_nextheader 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_easy_nextheader - get the next HTTP header
@@ -69,20 +69,29 @@ is associated with the easy handle. Applications must copy the data if they
want it to survive subsequent API calls or the life-time of the easy handle.
.SH EXAMPLE
.nf
-struct curl_header *prev = NULL;
-struct curl_header *h;
+int main(void)
+{
+ struct curl_header *prev = NULL;
+ struct curl_header *h;
-/* extract the normal headers from the first request */
-while((h = curl_easy_nextheader(easy, CURLH_HEADER, 0, prev))) {
- print "%s: %s\\n", h->name, h->value);
- prev = h;
-}
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_perform(curl);
+
+ /* extract the normal headers from the first request */
+ while((h = curl_easy_nextheader(curl, CURLH_HEADER, 0, prev))) {
+ printf("%s: %s\\n", h->name, h->value);
+ prev = h;
+ }
-/* extract the normal headers + 1xx + trailers from the last request */
-unsigned int origin = CURLH_HEADER| CURLH_1XX | CURLH_TRAILER;
-while((h = curl_easy_nextheader(easy, origin, -1, prev))) {
- print "%s: %s\\n", h->name, h->value);
- prev = h;
+ /* extract the normal headers + 1xx + trailers from the last request */
+ unsigned int origin = CURLH_HEADER| CURLH_1XX | CURLH_TRAILER;
+ while((h = curl_easy_nextheader(curl, origin, -1, prev))) {
+ printf("%s: %s\\n", h->name, h->value);
+ prev = h;
+ }
+ }
}
.fi
.SH AVAILABILITY
@@ -94,4 +103,5 @@ This function returns the next header, or NULL when there are no more
If this function returns NULL when \fIprev\fP was set to NULL, then there are
no headers available within the scope to return.
.SH "SEE ALSO"
-.BR curl_easy_header "(3), " curl_easy_perform "(3) "
+.BR curl_easy_header (3),
+.BR curl_easy_perform (3)
diff --git a/docs/libcurl/curl_easy_option_by_id.3 b/docs/libcurl/curl_easy_option_by_id.3
index 9951332c4..70f503c42 100644
--- a/docs/libcurl/curl_easy_option_by_id.3
+++ b/docs/libcurl/curl_easy_option_by_id.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_easy_option_by_id 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_easy_option_by_id 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_easy_option_by_id - find an easy setopt option by id
@@ -36,15 +36,18 @@ Given a \fICURLoption\fP \fBid\fP, this function returns a pointer to the
\fIcurl_easyoption\fP struct, holding information about the
\fIcurl_easy_setopt(3)\fP option using that id. The option id is the CURLOPT_
prefix ones provided in the standard curl/curl.h header file. This function
-will return the non-aliases version for the cases where there is an alias
-function as well.
+returns the non-alias version of the cases where there is an alias function as
+well.
If libcurl has no option with the given id, this function returns NULL.
.SH EXAMPLE
.nf
-const struct curl_easyoption *opt = curl_easy_option_by_id(CURLOPT_URL);
-if(opt) {
- printf("This option wants type %x\\n", opt->type);
+int main(void)
+{
+ const struct curl_easyoption *opt = curl_easy_option_by_id(CURLOPT_URL);
+ if(opt) {
+ printf("This option wants type %x\\n", opt->type);
+ }
}
.fi
.SH AVAILABILITY
@@ -52,5 +55,6 @@ This function was added in libcurl 7.73.0
.SH RETURN VALUE
A pointer to the \fIcurl_easyoption\fP struct for the option or NULL.
.SH "SEE ALSO"
-.BR curl_easy_option_by_name "(3)," curl_easy_option_next "(3),"
-.BR curl_easy_setopt "(3),"
+.BR curl_easy_option_by_name (3),
+.BR curl_easy_option_next (3),
+.BR curl_easy_setopt (3)
diff --git a/docs/libcurl/curl_easy_option_by_name.3 b/docs/libcurl/curl_easy_option_by_name.3
index 66c08693b..3c65503b5 100644
--- a/docs/libcurl/curl_easy_option_by_name.3
+++ b/docs/libcurl/curl_easy_option_by_name.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_easy_option_by_name 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_easy_option_by_name 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_easy_option_by_name - find an easy setopt option by name
@@ -41,9 +41,12 @@ insensitive.
If libcurl has no option with the given name, this function returns NULL.
.SH EXAMPLE
.nf
-const struct curl_easyoption *opt = curl_easy_option_by_name("URL");
-if(opt) {
- printf("This option wants CURLoption %x\\n", (int)opt->id);
+int main(void)
+{
+ const struct curl_easyoption *opt = curl_easy_option_by_name("URL");
+ if(opt) {
+ printf("This option wants CURLoption %x\\n", (int)opt->id);
+ }
}
.fi
.SH AVAILABILITY
@@ -51,5 +54,6 @@ This function was added in libcurl 7.73.0
.SH RETURN VALUE
A pointer to the \fIcurl_easyoption\fP struct for the option or NULL.
.SH "SEE ALSO"
-.BR curl_easy_option_next "(3)," curl_easy_option_by_id "(3),"
-.BR curl_easy_setopt "(3),"
+.BR curl_easy_option_by_id (3),
+.BR curl_easy_option_next (3),
+.BR curl_easy_setopt (3)
diff --git a/docs/libcurl/curl_easy_option_next.3 b/docs/libcurl/curl_easy_option_next.3
index cea14a5b0..0318854d7 100644
--- a/docs/libcurl/curl_easy_option_next.3
+++ b/docs/libcurl/curl_easy_option_next.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_easy_option_next 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_easy_option_next 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_easy_option_next - iterate over easy setopt options
@@ -29,6 +29,25 @@ curl_easy_option_next - iterate over easy setopt options
.nf
#include <curl/curl.h>
+const struct curl_easyoption *
+curl_easy_option_next(const struct curl_easyoption *prev);
+.fi
+.SH DESCRIPTION
+This function returns a pointer to the first or the next \fIcurl_easyoption\fP
+struct, providing an ability to iterate over all known options for
+\fIcurl_easy_setopt(3)\fP in this instance of libcurl.
+
+Pass a \fBNULL\fP argument as \fBprev\fP to get the first option returned, or
+pass in the current option to get the next one returned. If there is no more
+option to return, \fIcurl_easy_option_next(3)\fP returns NULL.
+
+The options returned by this functions are the ones known to this libcurl and
+information about what argument type they want.
+
+If the \fBCURLOT_FLAG_ALIAS\fP bit is set in the flags field, it means the
+name is provided for backwards compatibility as an alias.
+.SH struct
+.nf
typedef enum {
CURLOT_LONG, /* long (a range of values) */
CURLOT_VALUES, /* (a defined set or bitmask) */
@@ -49,32 +68,18 @@ struct curl_easyoption {
curl_easytype type;
unsigned int flags;
};
-
-const struct curl_easyoption *
-curl_easy_option_next(const struct curl_easyoption *prev);
.fi
-.SH DESCRIPTION
-This function returns a pointer to the first or the next \fIcurl_easyoption\fP
-struct, providing an ability to iterate over all known options for
-\fIcurl_easy_setopt(3)\fP in this instance of libcurl.
-
-Pass a \fBNULL\fP argument as \fBprev\fP to get the first option returned, or
-pass in the current option to get the next one returned. If there is no more
-option to return, \fIcurl_easy_option_next(3)\fP returns NULL.
-
-The options returned by this functions are the ones known to this libcurl and
-information about what argument type they want.
-
-If the \fBCURLOT_FLAG_ALIAS\fP bit is set in the flags field, it means the
-name is provided for backwards compatibility as an alias.
.SH EXAMPLE
.nf
-/* iterate over all available options */
-const struct curl_easyoption *opt;
-opt = curl_easy_option_by_next(NULL);
-while(opt) {
- printf("Name: %s\\n", opt->name);
- opt = curl_easy_option_by_next(opt);
+int main(void)
+{
+ /* iterate over all available options */
+ const struct curl_easyoption *opt;
+ opt = curl_easy_option_next(NULL);
+ while(opt) {
+ printf("Name: %s\\n", opt->name);
+ opt = curl_easy_option_next(opt);
+ }
}
.fi
.SH AVAILABILITY
@@ -83,5 +88,6 @@ This function was added in libcurl 7.73.0
A pointer to the \fIcurl_easyoption\fP struct for the next option or NULL if
no more options.
.SH "SEE ALSO"
-.BR curl_easy_option_by_name "(3)," curl_easy_option_by_id "(3),"
-.BR curl_easy_setopt "(3),"
+.BR curl_easy_option_by_id (3),
+.BR curl_easy_option_by_name (3),
+.BR curl_easy_setopt (3)
diff --git a/docs/libcurl/curl_easy_pause.3 b/docs/libcurl/curl_easy_pause.3
index eee478a09..a876f2d1c 100644
--- a/docs/libcurl/curl_easy_pause.3
+++ b/docs/libcurl/curl_easy_pause.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,26 +21,28 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_easy_pause 3 "September 05, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_easy_pause 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_easy_pause - pause and unpause a connection
.SH SYNOPSIS
.nf
-.B #include <curl/curl.h>
+#include <curl/curl.h>
-.BI "CURLcode curl_easy_pause(CURL *"handle ", int "bitmask ");"
+CURLcode curl_easy_pause(CURL *handle, int bitmask );
.fi
.SH DESCRIPTION
Using this function, you can explicitly mark a running connection to get
-paused, and you can unpause a connection that was previously paused.
+paused, and you can unpause a connection that was previously paused. Unlike
+most other libcurl functions, \fIcurl_easy_pause(3)\fP can be used from within
+callbacks.
A connection can be paused by using this function or by letting the read or
the write callbacks return the proper magic return code
(\fICURL_READFUNC_PAUSE\fP and \fICURL_WRITEFUNC_PAUSE\fP). A write callback
that returns pause signals to the library that it could not take care of any
-data at all, and that data will then be delivered again to the callback when
-the transfer is unpaused.
+data at all, and that data is then delivered again to the callback when the
+transfer is unpaused.
While it may feel tempting, take care and notice that you cannot call this
function from another thread. To unpause, you may for example call it from the
@@ -48,27 +50,27 @@ progress callback (\fICURLOPT_PROGRESSFUNCTION(3)\fP).
When this function is called to unpause receiving, the write callback might
get called before this function returns to deliver cached content. When
-libcurl delivers such cached data to the write callback, it will be delivered
-as fast as possible, which may overstep the boundary set in
+libcurl delivers such cached data to the write callback, it is delivered as
+fast as possible, which may overstep the boundary set in
\fICURLOPT_MAX_RECV_SPEED_LARGE(3)\fP etc.
The \fBhandle\fP argument identifies the transfer you want to pause or
unpause.
A paused transfer is excluded from low speed cancels via the
-\fICURLOPT_LOW_SPEED_LIMIT(3)\fP option and unpausing a transfer will reset
-the time period required for the low speed limit to be met.
+\fICURLOPT_LOW_SPEED_LIMIT(3)\fP option and unpausing a transfer resets the
+time period required for the low speed limit to be met.
The \fBbitmask\fP argument is a set of bits that sets the new state of the
connection. The following bits can be used:
.IP CURLPAUSE_RECV
-Pause receiving data. There will be no data received on this connection until
-this function is called again without this bit set. Thus, the write callback
-(\fICURLOPT_WRITEFUNCTION(3)\fP) will not be called.
+Pause receiving data. There is no data received on this connection until this
+function is called again without this bit set. Thus, the write callback
+(\fICURLOPT_WRITEFUNCTION(3)\fP) is not called.
.IP CURLPAUSE_SEND
-Pause sending data. There will be no data sent on this connection until this
+Pause sending data. There is no data sent on this connection until this
function is called again without this bit set. Thus, the read callback
-(\fICURLOPT_READFUNCTION(3)\fP) will not be called.
+(\fICURLOPT_READFUNCTION(3)\fP) is not called.
.IP CURLPAUSE_ALL
Convenience define that pauses both directions.
.IP CURLPAUSE_CONT
@@ -76,37 +78,49 @@ Convenience define that unpauses both directions.
.SH LIMITATIONS
The pausing of transfers does not work with protocols that work without
network connectivity, like FILE://. Trying to pause such a transfer, in any
-direction, will cause problems in the worst case or an error in the best case.
+direction, might cause problems or error.
.SH MULTIPLEXED
When a connection is used multiplexed, like for HTTP/2, and one of the
transfers over the connection is paused and the others continue flowing,
libcurl might end up buffering contents for the paused transfer. It has to do
this because it needs to drain the socket for the other transfers and the
-already announced window size for the paused transfer will allow the server to
+already announced window size for the paused transfer allows the server to
continue sending data up to that window size amount. By default, libcurl
announces a 32 megabyte window size, which thus can make libcurl end up
buffering 32 megabyte of data for a paused stream.
-When such a paused stream is unpaused again, any buffered data will be
-delivered first.
+When such a paused stream is unpaused again, any buffered data is delivered
+first.
.SH EXAMPLE
.nf
-/* pause a transfer in both directions */
-curl_easy_pause(curl, CURL_READFUNC_PAUSE | CURL_WRITEFUNC_PAUSE);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ /* pause a transfer in both directions */
+ curl_easy_pause(curl, CURL_READFUNC_PAUSE | CURL_WRITEFUNC_PAUSE);
+
+ }
+}
.fi
.SH "MEMORY USE"
-When pausing a read by returning the magic return code from a write callback,
-the read data is already in libcurl's internal buffers so it will have to keep
-it in an allocated buffer until the receiving is again unpaused using this
-function.
+When pausing a download transfer by returning the magic return code from a
+write callback, the read data is already in libcurl's internal buffers so it
+has to keep it in an allocated buffer until the receiving is again unpaused
+using this function.
If the downloaded data is compressed and is asked to get uncompressed
-automatically on download, libcurl will continue to uncompress the entire
-downloaded chunk and it will cache the data uncompressed. This has the side-
+automatically on download, libcurl continues to uncompress the entire
+downloaded chunk and it caches the data uncompressed. This has the side-
effect that if you download something that is compressed a lot, it can result
in a large data amount needing to be allocated to save the data during the
-pause. This said, you should probably consider not using paused receiving if
-you allow libcurl to uncompress data automatically.
+pause. consider not using paused receiving if you allow libcurl to uncompress
+data automatically.
+
+If the download is done with HTTP/2 or HTTP/3, there is up to a stream window
+size worth of data that curl cannot stop but instead needs to cache while the
+transfer is paused. This means that if a window size of 64 MB is used, libcurl
+might end up having to cache 64 MB of data.
.SH AVAILABILITY
Added in 7.18.0.
.SH RETURN VALUE
@@ -114,4 +128,5 @@ CURLE_OK (zero) means that the option was set properly, and a non-zero return
code means something wrong occurred after the new state was set. See the
\fIlibcurl-errors(3)\fP man page for the full list with descriptions.
.SH "SEE ALSO"
-.BR curl_easy_cleanup "(3), " curl_easy_reset "(3)"
+.BR curl_easy_cleanup (3),
+.BR curl_easy_reset (3)
diff --git a/docs/libcurl/curl_easy_perform.3 b/docs/libcurl/curl_easy_perform.3
index c6b3d7660..dea11e6b5 100644
--- a/docs/libcurl/curl_easy_perform.3
+++ b/docs/libcurl/curl_easy_perform.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_easy_perform 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_easy_perform 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_easy_perform - perform a blocking file transfer
@@ -32,22 +32,22 @@ curl_easy_perform - perform a blocking file transfer
CURLcode curl_easy_perform(CURL *easy_handle);
.fi
.SH DESCRIPTION
+\fIcurl_easy_perform(3)\fP performs a network transfer in a blocking manner
+and returns when done, or earlier if it fails. For non-blocking behavior, see
+\fIcurl_multi_perform(3)\fP.
+
Invoke this function after \fIcurl_easy_init(3)\fP and all the
\fIcurl_easy_setopt(3)\fP calls are made, and it performs the transfer as
described in the options. It must be called with the same \fBeasy_handle\fP as
input as the \fIcurl_easy_init(3)\fP call returned.
-\fIcurl_easy_perform(3)\fP performs the entire request in a blocking manner
-and returns when done, or earlier if it fails. For non-blocking behavior, see
-\fIcurl_multi_perform(3)\fP.
-
You can do any amount of calls to \fIcurl_easy_perform(3)\fP while using the
same \fBeasy_handle\fP. If you intend to transfer more than one file, you are
-even encouraged to do so. libcurl will then attempt to re-use the same
-connection for the following transfers, thus making the operations faster,
-less CPU intense and using less network resources. Just note that you will
-have to use \fIcurl_easy_setopt(3)\fP between the invokes to set options for
-the following curl_easy_perform.
+even encouraged to do so. libcurl attempts to reuse existing connections for
+the following transfers, thus making the operations faster, less CPU intense
+and using less network resources. You probably want to use
+\fIcurl_easy_setopt(3)\fP between the invokes to set options for the following
+\fIcurl_easy_perform(3)\fP call.
You must never call this function simultaneously from two places using the
same \fBeasy_handle\fP. Let the function return first before invoking it
@@ -64,12 +64,15 @@ While the \fBeasy_handle\fP is added to a multi handle, it cannot be used by
\fIcurl_easy_perform(3)\fP.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -78,9 +81,11 @@ Always
CURLE_OK (0) means everything was OK, non-zero means an error occurred as
.I <curl/curl.h>
defines - see \fIlibcurl-errors(3)\fP. If the \fICURLOPT_ERRORBUFFER(3)\fP was
-set with \fIcurl_easy_setopt(3)\fP there will be a readable error message in
+set with \fIcurl_easy_setopt(3)\fP there is a readable error message stored in
the error buffer when non-zero is returned.
.SH "SEE ALSO"
-.BR curl_easy_init "(3), " curl_easy_setopt "(3), "
-.BR curl_multi_add_handle "(3), " curl_multi_perform "(3), "
-.BR libcurl-errors "(3), "
+.BR curl_easy_init (3),
+.BR curl_easy_setopt (3),
+.BR curl_multi_add_handle (3),
+.BR curl_multi_perform (3),
+.BR libcurl-errors (3)
diff --git a/docs/libcurl/curl_easy_recv.3 b/docs/libcurl/curl_easy_recv.3
index 810faf515..7fc022b62 100644
--- a/docs/libcurl/curl_easy_recv.3
+++ b/docs/libcurl/curl_easy_recv.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,13 +22,13 @@
.\" *
.\" **************************************************************************
.\"
-.TH curl_easy_recv 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_easy_recv 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_easy_recv - receives raw data on an "easy" connection
.SH SYNOPSIS
.nf
-#include <curl/easy.h>
+#include <curl/curl.h>
CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen, size_t *n);
.fi
@@ -36,23 +36,22 @@ CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen, size_t *n);
This function receives raw data from the established connection. You may use
it together with \fIcurl_easy_send(3)\fP to implement custom protocols using
libcurl. This functionality can be particularly useful if you use proxies
-and/or SSL encryption: libcurl will take care of proxy negotiation and
-connection setup.
+and/or SSL encryption: libcurl takes care of proxy negotiation and connection
+setup.
-\fBbuffer\fP is a pointer to your buffer that will get the received
-data. \fBbuflen\fP is the maximum amount of data you can get in that
-buffer. The variable \fBn\fP points to will receive the number of received
-bytes.
+\fBbuffer\fP is a pointer to your buffer memory that gets populated by the
+received data. \fBbuflen\fP is the maximum amount of data you can get in that
+buffer. The variable \fBn\fP points to receives the number of received bytes.
To establish the connection, set \fICURLOPT_CONNECT_ONLY(3)\fP option before
calling \fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP. Note that
\fIcurl_easy_recv(3)\fP does not work on connections that were created without
this option.
-The call will return \fBCURLE_AGAIN\fP if there is no data to read - the
-socket is used in non-blocking mode internally. When \fBCURLE_AGAIN\fP is
-returned, use your operating system facilities like \fIselect(2)\fP to wait
-for data. The socket may be obtained using \fIcurl_easy_getinfo(3)\fP with
+The call returns \fBCURLE_AGAIN\fP if there is no data to read - the socket is
+used in non-blocking mode internally. When \fBCURLE_AGAIN\fP is returned, use
+your operating system facilities like \fIselect(2)\fP to wait for data. The
+socket may be obtained using \fIcurl_easy_getinfo(3)\fP with
\fICURLINFO_ACTIVESOCKET(3)\fP.
Wait on the socket only if \fIcurl_easy_recv(3)\fP returns \fBCURLE_AGAIN\fP.
@@ -65,19 +64,29 @@ Furthermore if you wait on the socket and it tells you there is data to read,
read was for internal SSL processing, and no other data is available.
.SH EXAMPLE
.nf
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Do not do the transfer - only connect to host */
- curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);
- res = curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ /* Do not do the transfer - only connect to host */
+ curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);
+ res = curl_easy_perform(curl);
- if(res == CURLE_OK) {
- /* Extract the socket from the curl handle -
- we will need it for waiting. */
- res = curl_easy_getinfo(curl, CURLINFO_ACTIVESOCKET, &sockfd);
+ if(res == CURLE_OK) {
+ char buf[256];
+ size_t nread;
+ long sockfd;
- /* read data */
- res = curl_easy_recv(curl, buf, sizeof(buf), &nread);
- }
+ /* Extract the socket from the curl handle - we need it for waiting. */
+ res = curl_easy_getinfo(curl, CURLINFO_ACTIVESOCKET, &sockfd);
+
+ /* read data */
+ res = curl_easy_recv(curl, buf, sizeof(buf), &nread);
+ }
+ }
+}
.fi
.SH AVAILABILITY
Added in 7.18.2.
@@ -92,9 +101,10 @@ system facilities to wait until data can be read, and retry.
Reading exactly 0 bytes indicates a closed connection.
-If there's no socket available to use from the previous transfer, this function
+If there is no socket available to use from the previous transfer, this function
returns \fBCURLE_UNSUPPORTED_PROTOCOL\fP.
.SH "SEE ALSO"
-.BR curl_easy_setopt "(3), " curl_easy_perform "(3), "
-.BR curl_easy_getinfo "(3), "
-.BR curl_easy_send "(3) "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_perform (3),
+.BR curl_easy_send (3),
+.BR curl_easy_setopt (3)
diff --git a/docs/libcurl/curl_easy_reset.3 b/docs/libcurl/curl_easy_reset.3
index 85b11cf0b..9bd880bbe 100644
--- a/docs/libcurl/curl_easy_reset.3
+++ b/docs/libcurl/curl_easy_reset.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_easy_reset 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_easy_reset 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_easy_reset - reset all options of a libcurl session handle
@@ -41,16 +41,22 @@ connections, the Session ID cache, the DNS cache, the cookies, the shares or
the alt-svc cache.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
-/* ... the handle is used and options are set ... */
-
-curl_easy_reset(curl);
+ /* ... the handle is used and options are set ... */
+ curl_easy_reset(curl);
+ }
+}
.fi
.SH AVAILABILITY
This function was added in libcurl 7.12.1
.SH RETURN VALUE
Nothing
.SH "SEE ALSO"
-.BR curl_easy_init "(3)," curl_easy_cleanup "(3)," curl_easy_setopt "(3),"
-.BR curl_easy_duphandle "(3)"
+.BR curl_easy_cleanup (3),
+.BR curl_easy_duphandle (3),
+.BR curl_easy_init (3),
+.BR curl_easy_setopt (3)
diff --git a/docs/libcurl/curl_easy_send.3 b/docs/libcurl/curl_easy_send.3
index b7dd97251..a02fb30db 100644
--- a/docs/libcurl/curl_easy_send.3
+++ b/docs/libcurl/curl_easy_send.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,13 +22,13 @@
.\" *
.\" **************************************************************************
.\"
-.TH curl_easy_send 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_easy_send 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_easy_send - sends raw data over an "easy" connection
.SH SYNOPSIS
.nf
-#include <curl/easy.h>
+#include <curl/curl.h>
CURLcode curl_easy_send(CURL *curl, const void *buffer,
size_t buflen, size_t *n);
@@ -37,41 +37,49 @@ CURLcode curl_easy_send(CURL *curl, const void *buffer,
This function sends arbitrary data over the established connection. You may
use it together with \fIcurl_easy_recv(3)\fP to implement custom protocols
using libcurl. This functionality can be particularly useful if you use
-proxies and/or SSL encryption: libcurl will take care of proxy negotiation and
+proxies and/or SSL encryption: libcurl takes care of proxy negotiation and
connection setup.
-\fBbuffer\fP is a pointer to the data of length \fBbuflen\fP that you want sent.
-The variable \fBn\fP points to will receive the number of sent bytes.
+\fBbuffer\fP is a pointer to the data of length \fBbuflen\fP that you want
+sent. The variable \fBn\fP points to receives the number of sent bytes.
To establish the connection, set \fICURLOPT_CONNECT_ONLY(3)\fP option before
calling \fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP. Note that
-\fIcurl_easy_send(3)\fP will not work on connections that were created without
+\fIcurl_easy_send(3)\fP does not work on connections that were created without
this option.
-The call will return \fBCURLE_AGAIN\fP if it's not possible to send data right
-now - the socket is used in non-blocking mode internally. When
-\fBCURLE_AGAIN\fP is returned, use your operating system facilities like
-\fIselect(2)\fP to wait until the socket is writable. The socket may be
-obtained using \fIcurl_easy_getinfo(3)\fP with \fICURLINFO_ACTIVESOCKET(3)\fP.
+The call returns \fBCURLE_AGAIN\fP if it's not possible to send data right now
+- the socket is used in non-blocking mode internally. When \fBCURLE_AGAIN\fP
+is returned, use your operating system facilities like \fIselect(2)\fP to wait
+until the socket is writable. The socket may be obtained using
+\fIcurl_easy_getinfo(3)\fP with \fICURLINFO_ACTIVESOCKET(3)\fP.
Furthermore if you wait on the socket and it tells you it's writable,
\fIcurl_easy_send(3)\fP may return \fBCURLE_AGAIN\fP if the only data that was
sent was for internal SSL processing, and no other data could be sent.
.SH EXAMPLE
.nf
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Do not do the transfer - only connect to host */
- curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);
- res = curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ /* Do not do the transfer - only connect to host */
+ curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);
+ res = curl_easy_perform(curl);
- if(res == CURLE_OK) {
- /* Extract the socket from the curl handle -
- we will need it for waiting. */
- res = curl_easy_getinfo(curl, CURLINFO_ACTIVESOCKET, &sockfd);
+ if(res == CURLE_OK) {
+ long sockfd;
+ size_t sent;
+ /* Extract the socket from the curl handle - we need it for waiting. */
+ res = curl_easy_getinfo(curl, CURLINFO_ACTIVESOCKET, &sockfd);
- /* send data */
- res = curl_easy_send(curl, "hello", 5, &sent);
- }
+ /* send data */
+ res = curl_easy_send(curl, "hello", 5, &sent);
+ }
+ }
+}
.fi
.SH AVAILABILITY
Added in 7.18.2.
@@ -85,8 +93,10 @@ On failure, returns the appropriate error code.
This function may return \fBCURLE_AGAIN\fP. In this case, use your operating
system facilities to wait until the socket is writable, and retry.
-If there's no socket available to use from the previous transfer, this function
+If there is no socket available to use from the previous transfer, this function
returns \fBCURLE_UNSUPPORTED_PROTOCOL\fP.
.SH "SEE ALSO"
-.BR curl_easy_setopt "(3), " curl_easy_perform "(3), " curl_easy_getinfo "(3), "
-.BR curl_easy_recv "(3) "
+.BR curl_easy_setopt (3),
+.BR curl_easy_perform (3),
+.BR curl_easy_getinfo (3),
+.BR curl_easy_recv (3)
diff --git a/docs/libcurl/curl_easy_setopt.3 b/docs/libcurl/curl_easy_setopt.3
index b00079601..c462a2d0c 100644
--- a/docs/libcurl/curl_easy_setopt.3
+++ b/docs/libcurl/curl_easy_setopt.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH curl_easy_setopt 3 "October 12, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_easy_setopt 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_easy_setopt \- set options for a curl easy handle
@@ -127,11 +127,14 @@ Callback for SSL context logic. See \fICURLOPT_SSL_CTX_FUNCTION(3)\fP
.IP CURLOPT_SSL_CTX_DATA
Data pointer to pass to the SSL context callback. See \fICURLOPT_SSL_CTX_DATA(3)\fP
.IP CURLOPT_CONV_TO_NETWORK_FUNCTION
-Callback for code base conversion. See \fICURLOPT_CONV_TO_NETWORK_FUNCTION(3)\fP
+\fBOBSOLETE\fP Callback for code base conversion.
+See \fICURLOPT_CONV_TO_NETWORK_FUNCTION(3)\fP
.IP CURLOPT_CONV_FROM_NETWORK_FUNCTION
-Callback for code base conversion. See \fICURLOPT_CONV_FROM_NETWORK_FUNCTION(3)\fP
+\fBOBSOLETE\fP Callback for code base conversion.
+See \fICURLOPT_CONV_FROM_NETWORK_FUNCTION(3)\fP
.IP CURLOPT_CONV_FROM_UTF8_FUNCTION
-Callback for code base conversion. See \fICURLOPT_CONV_FROM_UTF8_FUNCTION(3)\fP
+\fBOBSOLETE\fP Callback for code base conversion.
+See \fICURLOPT_CONV_FROM_UTF8_FUNCTION(3)\fP
.IP CURLOPT_INTERLEAVEFUNCTION
Callback for RTSP interleaved data. See \fICURLOPT_INTERLEAVEFUNCTION(3)\fP
.IP CURLOPT_INTERLEAVEDATA
@@ -206,6 +209,8 @@ Socks5 GSSAPI NEC mode. See \fICURLOPT_SOCKS5_GSSAPI_NEC(3)\fP
Proxy authentication service name. \fICURLOPT_PROXY_SERVICE_NAME(3)\fP
.IP CURLOPT_HAPROXYPROTOCOL
Send an HAProxy PROXY protocol v1 header. See \fICURLOPT_HAPROXYPROTOCOL(3)\fP
+.IP CURLOPT_HAPROXY_CLIENT_IP
+Spoof the client IP in an HAProxy PROXY protocol v1 header. See \fICURLOPT_HAPROXY_CLIENT_IP(3)\fP
.IP CURLOPT_SERVICE_NAME
Authentication service name. \fICURLOPT_SERVICE_NAME(3)\fP
.IP CURLOPT_INTERFACE
@@ -390,8 +395,9 @@ Address of the sender. See \fICURLOPT_MAIL_FROM(3)\fP
Address of the recipients. See \fICURLOPT_MAIL_RCPT(3)\fP
.IP CURLOPT_MAIL_AUTH
Authentication address. See \fICURLOPT_MAIL_AUTH(3)\fP
-.IP CURLOPT_MAIL_RCPT_ALLLOWFAILS
-Allow RCPT TO command to fail for some recipients. See \fICURLOPT_MAIL_RCPT_ALLLOWFAILS(3)\fP
+.IP CURLOPT_MAIL_RCPT_ALLOWFAILS
+Allow RCPT TO command to fail for some recipients. See
+\fICURLOPT_MAIL_RCPT_ALLOWFAILS(3)\fP
.SH TFTP OPTIONS
.IP CURLOPT_TFTP_BLKSIZE
TFTP block size. See \fICURLOPT_TFTP_BLKSIZE(3)\fP
@@ -508,7 +514,7 @@ Maximum number of connections in the connection pool. See \fICURLOPT_MAXCONNECTS
.IP CURLOPT_FRESH_CONNECT
Use a new connection. \fICURLOPT_FRESH_CONNECT(3)\fP
.IP CURLOPT_FORBID_REUSE
-Prevent subsequent connections from re-using this. See \fICURLOPT_FORBID_REUSE(3)\fP
+Prevent subsequent connections from reusing this. See \fICURLOPT_FORBID_REUSE(3)\fP
.IP CURLOPT_MAXAGE_CONN
Limit the age (idle time) of connections for reuse. See \fICURLOPT_MAXAGE_CONN(3)\fP
.IP CURLOPT_MAXLIFETIME_CONN
@@ -630,6 +636,8 @@ Path to proxy CA cert bundle. See \fICURLOPT_PROXY_CAPATH(3)\fP
Certificate Revocation List. See \fICURLOPT_CRLFILE(3)\fP
.IP CURLOPT_PROXY_CRLFILE
Proxy Certificate Revocation List. See \fICURLOPT_PROXY_CRLFILE(3)\fP
+.IP CURLOPT_CA_CACHE_TIMEOUT
+Timeout for CA cache. See \fICURLOPT_CA_CACHE_TIMEOUT(3)\fP
.IP CURLOPT_CERTINFO
Extract certificate info. See \fICURLOPT_CERTINFO(3)\fP
.IP CURLOPT_PINNEDPUBLICKEY
@@ -695,17 +703,22 @@ Share object to use. See \fICURLOPT_SHARE(3)\fP
Mode for creating new remote files. See \fICURLOPT_NEW_FILE_PERMS(3)\fP
.IP CURLOPT_NEW_DIRECTORY_PERMS
Mode for creating new remote directories. See \fICURLOPT_NEW_DIRECTORY_PERMS(3)\fP
+.IP CURLOPT_QUICK_EXIT
+To be set by toplevel tools like "curl" to skip lengthy cleanups when they are about to call exit() anyway. See \fICURLOPT_QUICK_EXIT(3)\fP
.SH TELNET OPTIONS
.IP CURLOPT_TELNETOPTIONS
TELNET options. See \fICURLOPT_TELNETOPTIONS(3)\fP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -724,11 +737,14 @@ is invalid, like perhaps out of range.
If you try to set an option that libcurl does not know about, perhaps because
the library is too old to support it or the option was removed in a recent
-version, this function will return \fICURLE_UNKNOWN_OPTION\fP. If support for
-the option was disabled at compile-time, it will return
-\fICURLE_NOT_BUILT_IN\fP.
+version, this function returns \fICURLE_UNKNOWN_OPTION\fP. If support for the
+option was disabled at compile-time, it returns \fICURLE_NOT_BUILT_IN\fP.
.SH "SEE ALSO"
-.BR curl_easy_init "(3), " curl_easy_cleanup "(3), " curl_easy_reset "(3), "
-.BR curl_easy_getinfo "(3), " curl_multi_setopt "(3), "
-.BR curl_easy_option_next "(3), " curl_easy_option_by_name "(3), "
-.BR curl_easy_option_by_id "(3), "
+.BR curl_easy_cleanup (3),
+.BR curl_easy_getinfo (3),
+.BR curl_easy_init (3),
+.BR curl_easy_option_by_id (3),
+.BR curl_easy_option_by_name (3),
+.BR curl_easy_option_next (3),
+.BR curl_easy_reset (3),
+.BR curl_multi_setopt (3)
diff --git a/docs/libcurl/curl_easy_strerror.3 b/docs/libcurl/curl_easy_strerror.3
index 59012aee4..5affd5c61 100644
--- a/docs/libcurl/curl_easy_strerror.3
+++ b/docs/libcurl/curl_easy_strerror.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_easy_strerror 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_easy_strerror 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_easy_strerror - return string describing error code
@@ -39,17 +39,27 @@ Typically applications also appreciate \fICURLOPT_ERRORBUFFER(3)\fP for more
specific error descriptions generated at runtime.
.SH EXAMPLE
.nf
- /* Perform the request, res will get the return code */
- res = curl_easy_perform(curl);
- /* Check for errors */
- if(res != CURLE_OK)
- fprintf(stderr, "curl_easy_perform() failed: %s\\n",
- curl_easy_strerror(res));
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ /* set options */
+ /* Perform the entire transfer */
+ res = curl_easy_perform(curl);
+ /* Check for errors */
+ if(res != CURLE_OK)
+ fprintf(stderr, "curl_easy_perform() failed: %s\\n",
+ curl_easy_strerror(res));
+ }
+}
.fi
.SH AVAILABILITY
This function was added in libcurl 7.12.0
.SH RETURN VALUE
A pointer to a null-terminated string.
.SH "SEE ALSO"
-.BR libcurl-errors "(3), " curl_multi_strerror "(3), "
-.BR curl_share_strerror "(3), " curl_url_strerror "(3)"
+.BR libcurl-errors (3),
+.BR curl_multi_strerror (3),
+.BR curl_share_strerror (3),
+.BR curl_url_strerror (3)
diff --git a/docs/libcurl/curl_easy_unescape.3 b/docs/libcurl/curl_easy_unescape.3
index e3bfea520..1e679fa71 100644
--- a/docs/libcurl/curl_easy_unescape.3
+++ b/docs/libcurl/curl_easy_unescape.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH curl_easy_unescape 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_easy_unescape 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_easy_unescape - URL decodes the given string
@@ -30,42 +30,45 @@ curl_easy_unescape - URL decodes the given string
.nf
#include <curl/curl.h>
-char *curl_easy_unescape(CURL *curl, const char *url,
+char *curl_easy_unescape(CURL *curl, const char *input,
int inlength, int *outlength);
.fi
.SH DESCRIPTION
-This function converts the given URL encoded input string to a "plain string"
-and returns that in an allocated memory area. All input characters that are
-URL encoded (%XX where XX is a two-digit hexadecimal number) are converted to
-their binary versions.
+This function converts the URL encoded string \fBinput\fP to a "plain string"
+and returns that in an allocated memory area. All input characters that are URL
+encoded (%XX where XX is a two-digit hexadecimal number) are converted to their
+binary versions.
If the \fBlength\fP argument is set to 0 (zero), \fIcurl_easy_unescape(3)\fP
-will use strlen() on the input \fIurl\fP string to find out the size.
+uses strlen() on \fBinput\fP to find out the size.
-If \fBoutlength\fP is non-NULL, the function will write the length of the
-returned string in the integer it points to. This allows proper handling even
-for strings containing %00. Since this is a pointer to an \fIint\fP type, it
-can only return a value up to \fIINT_MAX\fP so no longer string can be
-returned in this parameter.
+If \fBoutlength\fP is non-NULL, the function writes the length of the returned
+string in the integer it points to. This allows proper handling even for
+strings containing %00. Since this is a pointer to an \fIint\fP type, it can
+only return a value up to \fIINT_MAX\fP so no longer string can be returned in
+this parameter.
Since 7.82.0, the \fBcurl\fP parameter is ignored. Prior to that there was
-per-handle character conversion support for some very old operating systems
-such as TPF, but it was otherwise ignored.
+per-handle character conversion support for some old operating systems such as
+TPF, but it was otherwise ignored.
You must \fIcurl_free(3)\fP the returned string when you are done with it.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- int decodelen;
- char *decoded = curl_easy_unescape(curl, "%63%75%72%6c", 12, &decodelen);
- if(decoded) {
- /* do not assume printf() works on the decoded data! */
- printf("Decoded: ");
- /* ... */
- curl_free(decoded);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ int decodelen;
+ char *decoded = curl_easy_unescape(curl, "%63%75%72%6c", 12, &decodelen);
+ if(decoded) {
+ /* do not assume printf() works on the decoded data! */
+ printf("Decoded: ");
+ /* ... */
+ curl_free(decoded);
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -73,4 +76,5 @@ Added in 7.15.4 and replaces the old \fIcurl_unescape(3)\fP function.
.SH RETURN VALUE
A pointer to a null-terminated string or NULL if it failed.
.SH "SEE ALSO"
-.BR curl_easy_escape "(3), " curl_free "(3)," RFC 3986
+.BR curl_easy_escape (3),
+.BR curl_free (3)
diff --git a/docs/libcurl/curl_easy_upkeep.3 b/docs/libcurl/curl_easy_upkeep.3
index e08aca6c3..fb5607548 100644
--- a/docs/libcurl/curl_easy_upkeep.3
+++ b/docs/libcurl/curl_easy_upkeep.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH curl_easy_upkeep 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_easy_upkeep 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_easy_upkeep - Perform any connection upkeep checks.
@@ -48,27 +48,30 @@ The connection upkeep interval is set with
\fICURLOPT_UPKEEP_INTERVAL_MS(3)\fP.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- /* Make a connection to an HTTP/2 server. */
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ /* Make a connection to an HTTP/2 server. */
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Set the interval to 30000ms / 30s */
- curl_easy_setopt(curl, CURLOPT_UPKEEP_INTERVAL_MS, 30000L);
+ /* Set the interval to 30000ms / 30s */
+ curl_easy_setopt(curl, CURLOPT_UPKEEP_INTERVAL_MS, 30000L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
- /* Perform more work here. */
+ /* Perform more work here. */
- /* While the connection is being held open, curl_easy_upkeep() can be
- called. If curl_easy_upkeep() is called and the time since the last
- upkeep exceeds the interval, then an HTTP/2 PING is sent. */
- curl_easy_upkeep(curl);
+ /* While the connection is being held open, curl_easy_upkeep() can be
+ called. If curl_easy_upkeep() is called and the time since the last
+ upkeep exceeds the interval, then an HTTP/2 PING is sent. */
+ curl_easy_upkeep(curl);
- /* Perform more work here. */
+ /* Perform more work here. */
- /* always cleanup */
- curl_easy_cleanup(curl);
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
diff --git a/docs/libcurl/curl_escape.3 b/docs/libcurl/curl_escape.3
index f31c7654f..dcf88c6eb 100644
--- a/docs/libcurl/curl_escape.3
+++ b/docs/libcurl/curl_escape.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_escape 3 "October 11, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_escape 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_escape - URL encodes the given string
@@ -29,32 +29,36 @@ curl_escape - URL encodes the given string
.nf
#include <curl/curl.h>
-char *curl_escape(const char *url, int length);
+char *curl_escape(const char *string, int length);
.fi
.SH DESCRIPTION
Obsolete function. Use \fIcurl_easy_escape(3)\fP instead!
-This function will convert the given input string to a URL encoded string and
-return that as a new allocated string. All input characters that are not a-z,
-A-Z or 0-9 will be converted to their "URL escaped" version (\fB%NN\fP where
+This function converts the given input \fBstring\fP to a URL encoded string
+and return that as a new allocated string. All input characters that are not
+a-z, A-Z or 0-9 are converted to their "URL escaped" version (\fB%NN\fP where
\fBNN\fP is a two-digit hexadecimal number).
-If the \fBlength\fP argument is set to 0, \fIcurl_escape(3)\fP will use
-strlen() on the input \fBurl\fP string to find out the size.
+If the \fBlength\fP argument is set to 0, \fIcurl_escape(3)\fP uses strlen()
+on \fBstring\fP to find out the size.
You must \fIcurl_free(3)\fP the returned string when you are done with it.
.SH EXAMPLE
.nf
-char *output = curl_escape("data to convert", 15);
-if(output) {
- printf("Encoded: %s\\n", output);
- curl_free(output);
+int main(void)
+{
+ char *output = curl_escape("data to convert", 15);
+ if(output) {
+ printf("Encoded: %s\\n", output);
+ curl_free(output);
+ }
}
.fi
.SH AVAILABILITY
-Since 7.15.4, \fIcurl_easy_escape(3)\fP should be used. This function will
-be removed in a future release.
+Since 7.15.4, \fIcurl_easy_escape(3)\fP should be used. This function might be
+removed in a future release.
.SH RETURN VALUE
A pointer to a null-terminated string or NULL if it failed.
.SH "SEE ALSO"
-.BR curl_unescape "(3), " curl_free "(3), " RFC 2396
+.BR curl_unescape (3),
+.BR curl_free (3)
diff --git a/docs/libcurl/curl_formadd.3 b/docs/libcurl/curl_formadd.3
index 26bf9d441..4bf636d6a 100644
--- a/docs/libcurl/curl_formadd.3
+++ b/docs/libcurl/curl_formadd.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_formadd 3 "October 03, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_formadd 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_formadd - add a section to a multipart form POST
@@ -45,9 +45,9 @@ allow repeated invokes to find the end of the list faster.
After the \fIlastitem\fP pointer follow the real arguments.
The pointers \fIfirstitem\fP and \fIlastitem\fP should both be pointing to
-NULL in the first call to this function. All list-data will be allocated by
-the function itself. You must call \fIcurl_formfree(3)\fP on the
-\fIfirstitem\fP after the form post has been done to free the resources.
+NULL in the first call to this function. All list-data is allocated by the
+function itself. You must call \fIcurl_formfree(3)\fP on the \fIfirstitem\fP
+after the form post has been done to free the resources.
Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header.
You can disable this header with \fICURLOPT_HTTPHEADER(3)\fP as usual.
@@ -55,8 +55,8 @@ You can disable this header with \fICURLOPT_HTTPHEADER(3)\fP as usual.
First, there are some basics you need to understand about multipart form
posts. Each part consists of at least a NAME and a CONTENTS part. If the part
is made for file upload, there are also a stored CONTENT-TYPE and a FILENAME.
-Below, we will discuss what options you use to set these properties in the
-parts you want to add to your post.
+Below, we discuss what options you use to set these properties in the parts
+you want to add to your post.
The options listed first are for making normal parts. The options from
\fICURLFORM_FILE\fP through \fICURLFORM_BUFFERLENGTH\fP are for file upload
@@ -67,34 +67,33 @@ followed by a string which provides the \fIname\fP of this part. libcurl
copies the string so your application does not need to keep it around after
this function call. If the name is not null-terminated, you must set its
length with \fBCURLFORM_NAMELENGTH\fP. The \fIname\fP is not allowed to
-contain zero-valued bytes. The copied data will be freed by
-\fIcurl_formfree(3)\fP.
+contain zero-valued bytes. The copied data is freed by \fIcurl_formfree(3)\fP.
.IP CURLFORM_PTRNAME
-followed by a string which provides the \fIname\fP of this part. libcurl
-will use the pointer and refer to the data in your application, so you
-must make sure it remains until curl no longer needs it. If the name
-is not null-terminated, you must set its length with \fBCURLFORM_NAMELENGTH\fP.
-The \fIname\fP is not allowed to contain zero-valued bytes.
+followed by a string which provides the \fIname\fP of this part. libcurl uses
+the pointer and refer to the data in your application, so you must make sure
+it remains until curl no longer needs it. If the name is not null-terminated,
+you must set its length with \fBCURLFORM_NAMELENGTH\fP. The \fIname\fP is not
+allowed to contain zero-valued bytes.
.IP CURLFORM_COPYCONTENTS
-followed by a pointer to the contents of this part, the actual data
-to send away. libcurl copies the provided data, so your application does not
-need to keep it around after this function call. If the data is not null
-terminated, or if you would like it to contain zero bytes, you must
-set the length of the name with \fBCURLFORM_CONTENTSLENGTH\fP. The copied
-data will be freed by \fIcurl_formfree(3)\fP.
+followed by a pointer to the contents of this part, the actual data to send
+away. libcurl copies the provided data, so your application does not need to
+keep it around after this function call. If the data is not null terminated,
+or if you would like it to contain zero bytes, you must set the length of the
+name with \fBCURLFORM_CONTENTSLENGTH\fP. The copied data is freed by
+\fIcurl_formfree(3)\fP.
.IP CURLFORM_PTRCONTENTS
followed by a pointer to the contents of this part, the actual data to send
-away. libcurl will use the pointer and refer to the data in your application,
-so you must make sure it remains until curl no longer needs it. If the data
-is not null-terminated, or if you would like it to contain zero bytes, you
-must set its length with \fBCURLFORM_CONTENTSLENGTH\fP.
+away. libcurl uses the pointer and refer to the data in your application, so
+you must make sure it remains until curl no longer needs it. If the data is
+not null-terminated, or if you would like it to contain zero bytes, you must
+set its length with \fBCURLFORM_CONTENTSLENGTH\fP.
.IP CURLFORM_CONTENTLEN
followed by a curl_off_t value giving the length of the contents. Note that
for \fICURLFORM_STREAM\fP contents, this option is mandatory.
-If you pass a 0 (zero) for this option, libcurl will instead do a strlen() on
-the contents to figure out the size. If you really want to send a zero byte
-content then you must make sure strlen() on the data pointer returns zero.
+If you pass a 0 (zero) for this option, libcurl calls strlen() on the contents
+to figure out the size. If you really want to send a zero byte content then
+you must make sure strlen() on the data pointer returns zero.
(Option added in 7.46.0)
.IP CURLFORM_CONTENTSLENGTH
@@ -103,9 +102,9 @@ content then you must make sure strlen() on the data pointer returns zero.
followed by a long giving the length of the contents. Note that for
\fICURLFORM_STREAM\fP contents, this option is mandatory.
-If you pass a 0 (zero) for this option, libcurl will instead do a strlen() on
-the contents to figure out the size. If you really want to send a zero byte
-content then you must make sure strlen() on the data pointer returns zero.
+If you pass a 0 (zero) for this option, libcurl calls strlen() on the contents
+to figure out the size. If you really want to send a zero byte content then
+you must make sure strlen() on the data pointer returns zero.
.IP CURLFORM_FILECONTENT
followed by a filename, causes that file to be read and its contents used
as data in this part. This part does \fInot\fP automatically become a file
@@ -177,82 +176,99 @@ for the curl handle.
See example below.
.SH EXAMPLE
.nf
- struct curl_httppost* post = NULL;
- struct curl_httppost* last = NULL;
- char namebuffer[] = "name buffer";
- long namelength = strlen(namebuffer);
- char buffer[] = "test buffer";
- char htmlbuffer[] = "<HTML>test buffer</HTML>";
- long htmlbufferlength = strlen(htmlbuffer);
- struct curl_forms forms[3];
- char file1[] = "my-face.jpg";
- char file2[] = "your-face.jpg";
- /* add null character into htmlbuffer, to demonstrate that
- transfers of buffers containing null characters actually work
- */
- htmlbuffer[8] = '\\0';
-
- /* Add simple name/content section */
- curl_formadd(&post, &last, CURLFORM_COPYNAME, "name",
- CURLFORM_COPYCONTENTS, "content", CURLFORM_END);
-
- /* Add simple name/content/contenttype section */
- curl_formadd(&post, &last, CURLFORM_COPYNAME, "htmlcode",
- CURLFORM_COPYCONTENTS, "<HTML></HTML>",
- CURLFORM_CONTENTTYPE, "text/html", CURLFORM_END);
-
- /* Add name/ptrcontent section */
- curl_formadd(&post, &last, CURLFORM_COPYNAME, "name_for_ptrcontent",
- CURLFORM_PTRCONTENTS, buffer, CURLFORM_END);
-
- /* Add ptrname/ptrcontent section */
- curl_formadd(&post, &last, CURLFORM_PTRNAME, namebuffer,
- CURLFORM_PTRCONTENTS, buffer, CURLFORM_NAMELENGTH,
- namelength, CURLFORM_END);
-
- /* Add name/ptrcontent/contenttype section */
- curl_formadd(&post, &last, CURLFORM_COPYNAME, "html_code_with_hole",
- CURLFORM_PTRCONTENTS, htmlbuffer,
- CURLFORM_CONTENTSLENGTH, htmlbufferlength,
- CURLFORM_CONTENTTYPE, "text/html", CURLFORM_END);
-
- /* Add simple file section */
- curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture",
- CURLFORM_FILE, "my-face.jpg", CURLFORM_END);
-
- /* Add file/contenttype section */
- curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture",
- CURLFORM_FILE, "my-face.jpg",
- CURLFORM_CONTENTTYPE, "image/jpeg", CURLFORM_END);
-
- /* Add two file section */
- curl_formadd(&post, &last, CURLFORM_COPYNAME, "pictures",
- CURLFORM_FILE, "my-face.jpg",
- CURLFORM_FILE, "your-face.jpg", CURLFORM_END);
-
- /* Add two file section using CURLFORM_ARRAY */
- forms[0].option = CURLFORM_FILE;
- forms[0].value = file1;
- forms[1].option = CURLFORM_FILE;
- forms[1].value = file2;
- forms[2].option = CURLFORM_END;
-
- /* Add a buffer to upload */
- curl_formadd(&post, &last,
- CURLFORM_COPYNAME, "name",
- CURLFORM_BUFFER, "data",
- CURLFORM_BUFFERPTR, record,
- CURLFORM_BUFFERLENGTH, record_length,
- CURLFORM_END);
-
- /* no option needed for the end marker */
- curl_formadd(&post, &last, CURLFORM_COPYNAME, "pictures",
- CURLFORM_ARRAY, forms, CURLFORM_END);
- /* Add the content of a file as a normal post text value */
- curl_formadd(&post, &last, CURLFORM_COPYNAME, "filecontent",
- CURLFORM_FILECONTENT, ".bashrc", CURLFORM_END);
- /* Set the form info */
- curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);
+#include <string.h> /* for strlen */
+
+static const char record[]="data in a buffer";
+
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ struct curl_httppost *post = NULL;
+ struct curl_httppost *last = NULL;
+ char namebuffer[] = "name buffer";
+ long namelength = strlen(namebuffer);
+ char buffer[] = "test buffer";
+ char htmlbuffer[] = "<HTML>test buffer</HTML>";
+ long htmlbufferlength = strlen(htmlbuffer);
+ struct curl_forms forms[3];
+ char file1[] = "my-face.jpg";
+ char file2[] = "your-face.jpg";
+ /* add null character into htmlbuffer, to demonstrate that
+ transfers of buffers containing null characters actually work
+ */
+ htmlbuffer[8] = '\\0';
+
+ /* Add simple name/content section */
+ curl_formadd(&post, &last, CURLFORM_COPYNAME, "name",
+ CURLFORM_COPYCONTENTS, "content", CURLFORM_END);
+
+ /* Add simple name/content/contenttype section */
+ curl_formadd(&post, &last, CURLFORM_COPYNAME, "htmlcode",
+ CURLFORM_COPYCONTENTS, "<HTML></HTML>",
+ CURLFORM_CONTENTTYPE, "text/html", CURLFORM_END);
+
+ /* Add name/ptrcontent section */
+ curl_formadd(&post, &last, CURLFORM_COPYNAME, "name_for_ptrcontent",
+ CURLFORM_PTRCONTENTS, buffer, CURLFORM_END);
+
+ /* Add ptrname/ptrcontent section */
+ curl_formadd(&post, &last, CURLFORM_PTRNAME, namebuffer,
+ CURLFORM_PTRCONTENTS, buffer, CURLFORM_NAMELENGTH,
+ namelength, CURLFORM_END);
+
+ /* Add name/ptrcontent/contenttype section */
+ curl_formadd(&post, &last, CURLFORM_COPYNAME, "html_code_with_hole",
+ CURLFORM_PTRCONTENTS, htmlbuffer,
+ CURLFORM_CONTENTSLENGTH, htmlbufferlength,
+ CURLFORM_CONTENTTYPE, "text/html", CURLFORM_END);
+
+ /* Add simple file section */
+ curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture",
+ CURLFORM_FILE, "my-face.jpg", CURLFORM_END);
+
+ /* Add file/contenttype section */
+ curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture",
+ CURLFORM_FILE, "my-face.jpg",
+ CURLFORM_CONTENTTYPE, "image/jpeg", CURLFORM_END);
+
+ /* Add two file section */
+ curl_formadd(&post, &last, CURLFORM_COPYNAME, "pictures",
+ CURLFORM_FILE, "my-face.jpg",
+ CURLFORM_FILE, "your-face.jpg", CURLFORM_END);
+
+ /* Add two file section using CURLFORM_ARRAY */
+ forms[0].option = CURLFORM_FILE;
+ forms[0].value = file1;
+ forms[1].option = CURLFORM_FILE;
+ forms[1].value = file2;
+ forms[2].option = CURLFORM_END;
+
+ /* Add a buffer to upload */
+ curl_formadd(&post, &last,
+ CURLFORM_COPYNAME, "name",
+ CURLFORM_BUFFER, "data",
+ CURLFORM_BUFFERPTR, record,
+ CURLFORM_BUFFERLENGTH, sizeof(record),
+ CURLFORM_END);
+
+ /* no option needed for the end marker */
+ curl_formadd(&post, &last, CURLFORM_COPYNAME, "pictures",
+ CURLFORM_ARRAY, forms, CURLFORM_END);
+ /* Add the content of a file as a normal post text value */
+ curl_formadd(&post, &last, CURLFORM_COPYNAME, "filecontent",
+ CURLFORM_FILECONTENT, ".bashrc", CURLFORM_END);
+ /* Set the form info */
+ curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);
+
+ curl_easy_perform(curl);
+
+ curl_easy_cleanup(curl);
+
+ curl_formfree(post);
+ }
+}
+.fi
.SH AVAILABILITY
Deprecated in 7.56.0. Before this release, field names were allowed to
contain zero-valued bytes. The pseudo-filename "-" to read stdin is
@@ -265,6 +281,6 @@ double quotes in field and file names are now escaped before transmission.
to a CURL_FORMADD_* constant defined in
.I <curl/curl.h>
.SH "SEE ALSO"
-.BR curl_easy_setopt "(3),"
-.BR curl_formfree "(3),"
-.BR curl_mime_init "(3)"
+.BR curl_easy_setopt (3),
+.BR curl_formfree (3),
+.BR curl_mime_init (3)
diff --git a/docs/libcurl/curl_formfree.3 b/docs/libcurl/curl_formfree.3
index 4ce2e5429..39a7a2a02 100644
--- a/docs/libcurl/curl_formfree.3
+++ b/docs/libcurl/curl_formfree.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_formfree 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_formfree 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_formfree - free a previously build multipart form post chain
@@ -45,27 +45,38 @@ the \fIcurl_formadd(3)\fP invoke(s).
\fBform\fP is the pointer as returned from a previous call to
\fIcurl_formadd(3)\fP and may be NULL.
-Passing in a NULL pointer in \fIform\fP will make this function return
-immediately with no action.
+Passing in a NULL pointer in \fIform\fP makes this function return immediately
+with no action.
.SH EXAMPLE
.nf
- /* Fill in a file upload field */
- curl_formadd(&formpost,
- &lastptr,
- CURLFORM_COPYNAME, "file",
- CURLFORM_FILE, "nice-image.jpg",
- CURLFORM_END);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ struct curl_httppost *formpost;
+ struct curl_httppost *lastptr;
- curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
+ /* Fill in a file upload field */
+ curl_formadd(&formpost,
+ &lastptr,
+ CURLFORM_COPYNAME, "file",
+ CURLFORM_FILE, "nice-image.jpg",
+ CURLFORM_END);
- curl_easy_perform(curl);
+ curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
- /* then cleanup the formpost chain */
- curl_formfree(formpost);
+ curl_easy_perform(curl);
+
+ /* then cleanup the formpost chain */
+ curl_formfree(formpost);
+ }
+}
.fi
.SH AVAILABILITY
Deprecated in 7.56.0.
.SH RETURN VALUE
None
.SH "SEE ALSO"
-.BR curl_formadd "(3), " curl_mime_init "(3), " curl_mime_free "(3)"
+.BR curl_formadd (3),
+.BR curl_mime_init (3),
+.BR curl_mime_free (3)
diff --git a/docs/libcurl/curl_formget.3 b/docs/libcurl/curl_formget.3
index 417512634..e46f697e6 100644
--- a/docs/libcurl/curl_formget.3
+++ b/docs/libcurl/curl_formget.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,53 +21,57 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_formget 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_formget 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_formget - serialize a previously built multipart form POST chain
.SH SYNOPSIS
.nf
-.B #include <curl/curl.h>
+#include <curl/curl.h>
int curl_formget(struct curl_httppost * form, void *userp,
- curl_formget_callback append );
+ curl_formget_callback append);
+.fi
.SH DESCRIPTION
curl_formget() is used to serialize data previously built/appended with
\fIcurl_formadd(3)\fP. Accepts a void pointer as second argument named
-\fIuserp\fP which will be passed as the first argument to the
-curl_formget_callback function.
+\fIuserp\fP which is passed as the first argument to the curl_formget_callback
+function.
.BI "typedef size_t (*curl_formget_callback)(void *" userp, " const char *" buf,
.BI " size_t " len ");"
-The curl_formget_callback will be executed for each part of the HTTP POST
-chain. The character buffer passed to the callback must not be freed. The
-callback should return the buffer length passed to it on success.
+The curl_formget_callback is invoked for each part of the HTTP POST chain. The
+character buffer passed to the callback must not be freed. The callback should
+return the buffer length passed to it on success.
-If the \fBCURLFORM_STREAM\fP option is used in the formpost, it will prevent
+If the \fBCURLFORM_STREAM\fP option is used in the formpost, it prevents
\fIcurl_formget(3)\fP from working until you have performed the actual HTTP
-request as only then will libcurl get the actual read callback to use!
+request. This, because first then does libcurl known which actual read
+callback to use!
.SH EXAMPLE
.nf
- size_t print_httppost_callback(void *arg, const char *buf, size_t len)
- {
- fwrite(buf, len, 1, stdout);
- (*(size_t *) arg) += len;
- return len;
- }
+size_t print_httppost_callback(void *arg, const char *buf, size_t len)
+{
+ fwrite(buf, len, 1, stdout);
+ (*(size_t *) arg) += len;
+ return len;
+}
- size_t print_httppost(struct curl_httppost *post)
- {
- size_t total_size = 0;
- if(curl_formget(post, &total_size, print_httppost_callback)) {
- return (size_t) -1;
- }
- return total_size;
- }
+size_t print_httppost(struct curl_httppost *post)
+{
+ size_t total_size = 0;
+ if(curl_formget(post, &total_size, print_httppost_callback)) {
+ return (size_t) -1;
+ }
+ return total_size;
+}
+.fi
.SH AVAILABILITY
This function was added in libcurl 7.15.5. The form API is deprecated in
libcurl 7.56.0.
.SH RETURN VALUE
0 means everything was OK, non-zero means an error occurred
.SH "SEE ALSO"
-.BR curl_formadd "(3), " curl_mime_init "(3)"
+.BR curl_formadd (3),
+.BR curl_mime_init (3)
diff --git a/docs/libcurl/curl_free.3 b/docs/libcurl/curl_free.3
index 3526c9f0b..d178915b5 100644
--- a/docs/libcurl/curl_free.3
+++ b/docs/libcurl/curl_free.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_free 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_free 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_free - reclaim memory that has been obtained through a libcurl call
@@ -29,26 +29,30 @@ curl_free - reclaim memory that has been obtained through a libcurl call
.nf
#include <curl/curl.h>
-void curl_free(char *ptr);
+void curl_free(void *ptr);
.fi
.SH DESCRIPTION
curl_free reclaims memory that has been obtained through a libcurl call. Use
\fIcurl_free(3)\fP instead of free() to avoid anomalies that can result from
differences in memory management between your application and libcurl.
-Passing in a NULL pointer in \fIptr\fP will make this function return
-immediately with no action.
+Passing in a NULL pointer in \fIptr\fP makes this function return immediately
+with no action.
.SH EXAMPLE
.nf
+int main(void)
+{
char *width = curl_getenv("COLUMNS");
if(width) {
/* it was set! */
curl_free(width);
}
+}
.fi
.SH AVAILABILITY
Always
.SH RETURN VALUE
None
.SH "SEE ALSO"
-.BR curl_easy_unescape "(3), " curl_easy_escape "(3) "
+.BR curl_easy_escape (3),
+.BR curl_easy_unescape (3)
diff --git a/docs/libcurl/curl_getdate.3 b/docs/libcurl/curl_getdate.3
index 46d9df184..66384adeb 100644
--- a/docs/libcurl/curl_getdate.3
+++ b/docs/libcurl/curl_getdate.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_getdate 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_getdate 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_getdate - Convert a date string to number of seconds
@@ -29,7 +29,7 @@ curl_getdate - Convert a date string to number of seconds
.nf
#include <curl/curl.h>
-time_t curl_getdate(char *datestring, time_t *now);
+time_t curl_getdate(const char *datestring, const time_t *now);
.fi
.SH DESCRIPTION
\fIcurl_getdate(3)\fP returns the number of seconds since the Epoch, January
@@ -52,8 +52,8 @@ digits. Examples: 06 Nov 1994, 06-Nov-94 and Nov-94 6.
.TP
.B time of the day items
This string specifies the time on a given day. You must specify it with 6
-digits with two colons: HH:MM:SS. To not include the time in a date string,
-will make the function assume 00:00:00. Example: 18:19:21.
+digits with two colons: HH:MM:SS. If there is no time given in a provided date
+string, 00:00:00 is assumed. Example: 18:19:21.
.TP
.B time zone items
Specifies international time zone. There are a few acronyms supported, but in
@@ -71,35 +71,39 @@ year, MM as the month number and DD as the day of the month, for the specified
calendar date.
.SH EXAMPLE
.nf
- time_t t;
- t = curl_getdate("Sun, 06 Nov 1994 08:49:37 GMT", NULL);
- t = curl_getdate("Sunday, 06-Nov-94 08:49:37 GMT", NULL);
- t = curl_getdate("Sun Nov 6 08:49:37 1994", NULL);
- t = curl_getdate("06 Nov 1994 08:49:37 GMT", NULL);
- t = curl_getdate("06-Nov-94 08:49:37 GMT", NULL);
- t = curl_getdate("Nov 6 08:49:37 1994", NULL);
- t = curl_getdate("06 Nov 1994 08:49:37", NULL);
- t = curl_getdate("06-Nov-94 08:49:37", NULL);
- t = curl_getdate("1994 Nov 6 08:49:37", NULL);
- t = curl_getdate("GMT 08:49:37 06-Nov-94 Sunday", NULL);
- t = curl_getdate("94 6 Nov 08:49:37", NULL);
- t = curl_getdate("1994 Nov 6", NULL);
- t = curl_getdate("06-Nov-94", NULL);
- t = curl_getdate("Sun Nov 6 94", NULL);
- t = curl_getdate("1994.Nov.6", NULL);
- t = curl_getdate("Sun/Nov/6/94/GMT", NULL);
- t = curl_getdate("Sun, 06 Nov 1994 08:49:37 CET", NULL);
- t = curl_getdate("06 Nov 1994 08:49:37 EST", NULL);
- t = curl_getdate("Sun, 12 Sep 2004 15:05:58 -0700", NULL);
- t = curl_getdate("Sat, 11 Sep 2004 21:32:11 +0200", NULL);
- t = curl_getdate("20040912 15:05:58 -0700", NULL);
- t = curl_getdate("20040911 +0200", NULL);
+int main(void)
+{
+ time_t t;
+ t = curl_getdate("Sun, 06 Nov 1994 08:49:37 GMT", NULL);
+ t = curl_getdate("Sunday, 06-Nov-94 08:49:37 GMT", NULL);
+ t = curl_getdate("Sun Nov 6 08:49:37 1994", NULL);
+ t = curl_getdate("06 Nov 1994 08:49:37 GMT", NULL);
+ t = curl_getdate("06-Nov-94 08:49:37 GMT", NULL);
+ t = curl_getdate("Nov 6 08:49:37 1994", NULL);
+ t = curl_getdate("06 Nov 1994 08:49:37", NULL);
+ t = curl_getdate("06-Nov-94 08:49:37", NULL);
+ t = curl_getdate("1994 Nov 6 08:49:37", NULL);
+ t = curl_getdate("GMT 08:49:37 06-Nov-94 Sunday", NULL);
+ t = curl_getdate("94 6 Nov 08:49:37", NULL);
+ t = curl_getdate("1994 Nov 6", NULL);
+ t = curl_getdate("06-Nov-94", NULL);
+ t = curl_getdate("Sun Nov 6 94", NULL);
+ t = curl_getdate("1994.Nov.6", NULL);
+ t = curl_getdate("Sun/Nov/6/94/GMT", NULL);
+ t = curl_getdate("Sun, 06 Nov 1994 08:49:37 CET", NULL);
+ t = curl_getdate("06 Nov 1994 08:49:37 EST", NULL);
+ t = curl_getdate("Sun, 12 Sep 2004 15:05:58 -0700", NULL);
+ t = curl_getdate("Sat, 11 Sep 2004 21:32:11 +0200", NULL);
+ t = curl_getdate("20040912 15:05:58 -0700", NULL);
+ t = curl_getdate("20040911 +0200", NULL);
+}
.fi
.SH STANDARDS
This parser handles date formats specified in RFC 822 (including the update in
RFC 1123) using time zone name or time zone delta and RFC 850 (obsoleted by
-RFC 1036) and ANSI C's \fIasctime()\fP format. These formats are the only ones
-RFC 7231 says HTTP applications may use.
+RFC 1036) and ANSI C's \fIasctime()\fP format.
+
+These formats are the only ones RFC 7231 says HTTP applications may use.
.SH AVAILABILITY
Always
.SH RETURN VALUE
@@ -107,14 +111,16 @@ This function returns -1 when it fails to parse the date string. Otherwise it
returns the number of seconds as described.
On systems with a signed 32 bit time_t: if the year is larger than 2037 or
-less than 1903, this function will return -1.
+less than 1903, this function returns -1.
On systems with an unsigned 32 bit time_t: if the year is larger than 2106 or
-less than 1970, this function will return -1.
+less than 1970, this function returns -1.
On systems with 64 bit time_t: if the year is less than 1583, this function
-will return -1. (The Gregorian calendar was first introduced 1582 so no "real"
+returns -1. (The Gregorian calendar was first introduced 1582 so no "real"
dates in this way of doing dates existed before then.)
.SH "SEE ALSO"
-.BR curl_easy_escape "(3), " curl_easy_unescape "(3), "
-.BR CURLOPT_TIMECONDITION "(3), " CURLOPT_TIMEVALUE "(3) "
+.BR curl_easy_escape (3),
+.BR curl_easy_unescape (3),
+.BR CURLOPT_TIMECONDITION (3),
+.BR CURLOPT_TIMEVALUE (3)
diff --git a/docs/libcurl/curl_getenv.3 b/docs/libcurl/curl_getenv.3
index 30d70e241..f9485431a 100644
--- a/docs/libcurl/curl_getenv.3
+++ b/docs/libcurl/curl_getenv.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_getenv 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_getenv 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_getenv - return value for environment name
@@ -39,11 +39,14 @@ systems libcurl builds on (including win32).
You must \fIcurl_free(3)\fP the returned string when you are done with it.
.SH EXAMPLE
.nf
+int main(void)
+{
char *width = curl_getenv("COLUMNS");
if(width) {
/* it was set! */
curl_free(width);
}
+}
.fi
.SH AVAILABILITY
Always
@@ -52,8 +55,7 @@ A pointer to a null-terminated string or NULL if it failed to find the
specified name.
.SH NOTE
Under unix operating systems, there is no point in returning an allocated
-memory, although other systems will not work properly if this is not done. The
-unix implementation thus has to suffer slightly from the drawbacks of other
-systems.
+memory, although other systems does not work properly if this is not done. The
+unix implementation thus suffers slightly from the drawbacks of other systems.
.SH "SEE ALSO"
-.BR getenv "(3C), "
+.BR getenv (3C)
diff --git a/docs/libcurl/curl_global_cleanup.3 b/docs/libcurl/curl_global_cleanup.3
index efdb38517..53d1da385 100644
--- a/docs/libcurl/curl_global_cleanup.3
+++ b/docs/libcurl/curl_global_cleanup.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_global_cleanup 3 "June 15, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_global_cleanup 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_global_cleanup - global libcurl cleanup
@@ -59,17 +59,20 @@ recommend you do not run libcurl from any module that may be unloaded
dynamically. This behavior may be addressed in the future.
.SH EXAMPLE
.nf
- curl_global_init(CURL_GLOBAL_DEFAULT);
+int main(void)
+{
+ curl_global_init(CURL_GLOBAL_DEFAULT);
- /* use libcurl, then before exiting... */
+ /* use libcurl, then before exiting... */
- curl_global_cleanup();
+ curl_global_cleanup();
+}
.fi
.SH AVAILABILITY
Added in 7.8
.SH RETURN VALUE
None
.SH "SEE ALSO"
-.BR curl_global_init "(3), "
-.BR libcurl "(3), "
-.BR libcurl-thread "(3), "
+.BR curl_global_init (3),
+.BR libcurl (3),
+.BR libcurl-thread (3)
diff --git a/docs/libcurl/curl_global_init.3 b/docs/libcurl/curl_global_init.3
index adce3048c..d60639009 100644
--- a/docs/libcurl/curl_global_init.3
+++ b/docs/libcurl/curl_global_init.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_global_init 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_global_init 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_global_init - Global libcurl initialization
@@ -88,25 +88,28 @@ Initialize the Win32 socket libraries.
The implication here is that if this bit is not set, the initialization of
winsock has to be done by the application or you risk getting undefined
behaviors. This option exists for when the initialization is handled outside
-of libcurl so there's no need for libcurl to do it again.
+of libcurl so there is no need for libcurl to do it again.
.IP CURL_GLOBAL_NOTHING
Initialize nothing extra. This sets no bit.
.IP CURL_GLOBAL_DEFAULT
-A sensible default. It will init both SSL and Win32. Right now, this equals
+A sensible default. It initializes both SSL and Win32. Right now, this equals
the functionality of the \fBCURL_GLOBAL_ALL\fP mask.
.IP CURL_GLOBAL_ACK_EINTR
This bit has no point since 7.69.0 but its behavior is instead the default.
-Before 7.69.0: when this flag is set, curl will acknowledge EINTR condition
-when connecting or when waiting for data. Otherwise, curl waits until full
-timeout elapses. (Added in 7.30.0)
+Before 7.69.0: when this flag is set, curl acknowledges EINTR condition when
+connecting or when waiting for data. Otherwise, curl waits until full timeout
+elapses. (Added in 7.30.0)
.SH EXAMPLE
.nf
- curl_global_init(CURL_GLOBAL_DEFAULT);
+int main(void)
+{
+ curl_global_init(CURL_GLOBAL_DEFAULT);
- /* use libcurl, then before exiting... */
+ /* use libcurl, then before exiting... */
- curl_global_cleanup();
+ curl_global_cleanup();
+}
.fi
.SH AVAILABILITY
Added in 7.8
@@ -114,8 +117,9 @@ Added in 7.8
If this function returns non-zero, something went wrong and you cannot use the
other curl functions.
.SH "SEE ALSO"
-.BR curl_global_init_mem "(3), "
-.BR curl_global_cleanup "(3), "
-.BR curl_global_sslset "(3), "
-.BR curl_easy_init "(3) "
-.BR libcurl "(3) "
+.BR curl_easy_init (3),
+.BR curl_global_cleanup (3),
+.BR curl_global_init_mem (3),
+.BR curl_global_sslset (3),
+.BR curl_global_trace (3),
+.BR libcurl (3)
diff --git a/docs/libcurl/curl_global_init_mem.3 b/docs/libcurl/curl_global_init_mem.3
index 6831cd091..97a8a53e3 100644
--- a/docs/libcurl/curl_global_init_mem.3
+++ b/docs/libcurl/curl_global_init_mem.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_global_init_mem 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_global_init_mem 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_global_init_mem - Global libcurl initialization with memory callbacks
@@ -66,9 +66,18 @@ Manipulating these gives considerable powers to the application to severely
screw things up for libcurl. Take care!
.SH EXAMPLE
.nf
- curl_global_init_mem(CURL_GLOBAL_DEFAULT, curl_malloc_cb,
- curl_free_cb, curl_realloc_cb,
- curl_strdup_cb, curl_calloc_cb);
+extern void *malloc_cb(size_t);
+extern void free_cb(void *);
+extern void *realloc_cb(void *, size_t);
+extern char *strdup_cb(const char *);
+extern void *calloc_cb(size_t, size_t);
+
+int main(void)
+{
+ curl_global_init_mem(CURL_GLOBAL_DEFAULT, malloc_cb,
+ free_cb, realloc_cb,
+ strdup_cb, calloc_cb);
+}
.fi
.SH AVAILABILITY
Added in 7.12.0
@@ -76,5 +85,5 @@ Added in 7.12.0
CURLE_OK (0) means everything was OK, non-zero means an error occurred as
\fI<curl/curl.h>\fP defines - see \fIlibcurl-errors(3)\fP.
.SH "SEE ALSO"
-.BR curl_global_init "(3), "
-.BR curl_global_cleanup "(3), "
+.BR curl_global_init (3),
+.BR curl_global_cleanup (3)
diff --git a/docs/libcurl/curl_global_sslset.3 b/docs/libcurl/curl_global_sslset.3
index 9cb677387..cb20cefe4 100644
--- a/docs/libcurl/curl_global_sslset.3
+++ b/docs/libcurl/curl_global_sslset.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_global_sslset 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_global_sslset 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_global_sslset - Select SSL backend to use with libcurl
@@ -29,30 +29,9 @@ curl_global_sslset - Select SSL backend to use with libcurl
.nf
#include <curl/curl.h>
-typedef struct {
- curl_sslbackend id;
- const char *name;
-} curl_ssl_backend;
-
-typedef enum {
- CURLSSLBACKEND_NONE = 0,
- CURLSSLBACKEND_OPENSSL = 1,
- CURLSSLBACKEND_GNUTLS = 2,
- CURLSSLBACKEND_NSS = 3,
- CURLSSLBACKEND_GSKIT = 5,
- CURLSSLBACKEND_POLARSSL = 6, /* deprecated */
- CURLSSLBACKEND_WOLFSSL = 7,
- CURLSSLBACKEND_SCHANNEL = 8,
- CURLSSLBACKEND_SECURETRANSPORT = 9,
- CURLSSLBACKEND_AXTLS = 10, /* deprecated */
- CURLSSLBACKEND_MBEDTLS = 11,
- CURLSSLBACKEND_MESALINK = 12,
- CURLSSLBACKEND_BEARSSL = 13
-} curl_sslbackend;
-
CURLsslset curl_global_sslset(curl_sslbackend id,
const char *name,
- curl_ssl_backend ***avail);
+ const curl_ssl_backend ***avail);
.fi
.SH DESCRIPTION
This function configures at runtime which SSL backend to use with
@@ -61,16 +40,17 @@ must be called \fBbefore\fP \fIcurl_global_init(3)\fP.
The backend can be identified by the \fIid\fP
(e.g. \fBCURLSSLBACKEND_OPENSSL\fP). The backend can also be specified via the
-\fIname\fP parameter for a case insensitive match (passing -1 as \fIid\fP). If
-both \fIid\fP and \fIname\fP are specified, the \fIname\fP will be ignored.
+\fIname\fP parameter for a case insensitive match (passing
+\fBCURLSSLBACKEND_NONE\fP as \fIid\fP). If both \fIid\fP and \fIname\fP are
+specified, the \fIname\fP is ignored.
-If neither \fIid\fP nor \fPname\fP are specified, the function will fail with
+If neither \fIid\fP nor \fPname\fP are specified, the function fails with
\fBCURLSSLSET_UNKNOWN_BACKEND\fP and set the \fIavail\fP pointer to the
NULL-terminated list of available backends. The available backends are those
that this particular build of libcurl supports.
-Since libcurl 7.60.0, the \fIavail\fP pointer will always be set to the list
-of alternatives if non-NULL.
+Since libcurl 7.60.0, the \fIavail\fP pointer is always set to the list of
+alternatives if non-NULL.
Upon success, the function returns \fBCURLSSLSET_OK\fP.
@@ -80,7 +60,7 @@ NULL-terminated list of available SSL backends. In this case, you may call the
function again to try to select a different backend.
The SSL backend can be set only once. If it has already been set, a subsequent
-attempt to change it will result in a \fBCURLSSLSET_TOO_LATE\fP.
+attempt to change it results in a \fBCURLSSLSET_TOO_LATE\fP getting returned.
This function is thread-safe since libcurl 7.84.0 if
\fIcurl_version_info(3)\fP has the CURL_VERSION_THREADSAFE feature bit set
@@ -89,18 +69,55 @@ This function is thread-safe since libcurl 7.84.0 if
If this is not thread-safe, you must not call this function when any other
thread in the program (i.e. a thread sharing the same memory) is running.
This does not just mean no other thread that is using libcurl.
+.SH OpenSSL
+The name "OpenSSL" is used for all versions of OpenSSL and its associated
+forks/flavors in this function. OpenSSL, BoringSSL, libressl, quictls and
+AmiSSL are all supported by libcurl, but in the eyes of
+\fIcurl_global_sslset(3)\fP they are all just "OpenSSL". They all mostly
+provide the same API.
+
+\fIcurl_version_info(3)\fP can return more specific info about the exact
+OpenSSL flavor and version number is use.
+.SH struct
+.nf
+typedef struct {
+ curl_sslbackend id;
+ const char *name;
+} curl_ssl_backend;
+
+typedef enum {
+ CURLSSLBACKEND_NONE = 0,
+ CURLSSLBACKEND_OPENSSL = 1, /* or one of its forks */
+ CURLSSLBACKEND_GNUTLS = 2,
+ CURLSSLBACKEND_NSS = 3,
+ CURLSSLBACKEND_GSKIT = 5, /* deprecated */
+ CURLSSLBACKEND_POLARSSL = 6, /* deprecated */
+ CURLSSLBACKEND_WOLFSSL = 7,
+ CURLSSLBACKEND_SCHANNEL = 8,
+ CURLSSLBACKEND_SECURETRANSPORT = 9,
+ CURLSSLBACKEND_AXTLS = 10, /* deprecated */
+ CURLSSLBACKEND_MBEDTLS = 11,
+ CURLSSLBACKEND_MESALINK = 12, /* deprecated */
+ CURLSSLBACKEND_BEARSSL = 13,
+ CURLSSLBACKEND_RUSTLS = 14
+} curl_sslbackend;
+.fi
.SH EXAMPLE
.nf
+int main(void)
+{
+ int i;
/* choose a specific backend */
curl_global_sslset(CURLSSLBACKEND_WOLFSSL, NULL, NULL);
/* list the available ones */
const curl_ssl_backend **list;
- curl_global_sslset((curl_sslbackend)-1, NULL, &list);
+ curl_global_sslset(CURLSSLBACKEND_NONE, NULL, &list);
for(i = 0; list[i]; i++)
printf("SSL backend #%d: '%s' (ID: %d)\\n",
i, list[i]->name, list[i]->id);
+}
.fi
.SH AVAILABILITY
This function was added in libcurl 7.56.0. Before this version, there was no
@@ -119,5 +136,5 @@ has already been called, the function returns \fICURLSSLSET_TOO_LATE\fP.
If this libcurl was built completely without SSL support, with no backends at
all, this function returns \fICURLSSLSET_NO_BACKENDS\fP.
.SH "SEE ALSO"
-.BR curl_global_init "(3), "
-.BR libcurl "(3) "
+.BR curl_global_init (3),
+.BR libcurl (3)
diff --git a/docs/libcurl/curl_global_trace.3 b/docs/libcurl/curl_global_trace.3
new file mode 100644
index 000000000..010f8470c
--- /dev/null
+++ b/docs/libcurl/curl_global_trace.3
@@ -0,0 +1,122 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed 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
+.\" *
+.\" **************************************************************************
+.TH curl_global_trace 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
+
+.SH NAME
+curl_global_trace - Global libcurl logging configuration
+.SH SYNOPSIS
+.nf
+#include <curl/curl.h>
+
+CURLcode curl_global_trace(const char *config);
+.fi
+.SH DESCRIPTION
+This function configures the logging behavior, allowing to make some
+parts of curl more verbose or silent than others.
+
+This function may be called during the initialization phase of a program. It
+does not have to be. It can be called several times even, possibly overwriting
+settings of previous calls.
+
+Calling this function after transfers have been started is undefined. On
+some platforms/architectures it might take effect, on others not.
+
+This function is thread-safe since libcurl 8.3.0 if
+\fIcurl_version_info(3)\fP has the CURL_VERSION_THREADSAFE feature bit set
+(most platforms).
+
+If this is not thread-safe, you must not call this function when any other
+thread in the program (i.e. a thread sharing the same memory) is running.
+This does not just mean no other thread that is using libcurl. Because
+\fIcurl_global_init(3)\fP may call functions of other libraries that are
+similarly thread unsafe, it could conflict with any other thread that uses
+these other libraries.
+
+If you are initializing libcurl from a Windows DLL you should not initialize
+it from \fIDllMain\fP or a static initializer because Windows holds the loader
+lock during that time and it could cause a deadlock.
+
+The \fIconfig\fP string is a list of comma-separated component names. Names
+are case-insensitive and unknown names are ignored. The special name "all"
+applies to all components. Names may be prefixed with '+' or '-' to enable
+or disable detailed logging for a component.
+
+The list of component names is not part of curl's public API. Names may be
+added or disappear in future versions of libcurl. Since unknown names are
+silently ignored, outdated log configurations does not cause errors when
+upgrading libcurl. Given that, some names can be expected to be fairly stable
+and are listed below for easy reference.
+
+Note that log configuration applies only to transfers where debug logging
+is enabled. See \fICURLOPT_VERBOSE(3)\fP or \fICURLOPT_DEBUGFUNCTION(3)\fP
+on how to control that.
+
+.SH TRACE COMPONENTS
+.IP tcp
+Tracing of TCP socket handling: connect, reads, writes.
+.IP ssl
+Tracing of SSL/TLS operations, whichever SSL backend is used in your build.
+.IP http/2
+Details about HTTP/2 handling: frames, events, I/O, etc.
+.IP http/3
+Details about HTTP/3 handling: connect, frames, events, I/O etc.
+.IP http-proxy
+Involved when transfers are tunneled through a HTTP proxy. "h1-proxy" or
+"h2-proxy" are also involved, depending on the HTTP version negotiated with
+the proxy.
+
+In order to find out all components involved in a transfer, run it with "all"
+configured. You can then see all names involved in your libcurl version in the
+trace.
+
+.SH EXAMPLE
+.nf
+int main(void)
+{
+ /* log details of HTTP/2 and SSL handling */
+ curl_global_trace("http/2,ssl");
+
+ /* log all details, except SSL handling */
+ curl_global_trace("all,-ssl");
+}
+.fi
+
+Below is a trace sample where "http/2" was configured. The trace output
+of an enabled component appears at the beginning in brackets.
+.nf
+* [HTTP/2] [h2sid=1] cf_send(len=96) submit https://example.com/
+\&...
+* [HTTP/2] [h2sid=1] FRAME[HEADERS]
+* [HTTP/2] [h2sid=1] 249 header bytes
+\&...
+.fi
+
+.SH AVAILABILITY
+Added in 8.3
+.SH RETURN VALUE
+If this function returns non-zero, something went wrong and the configuration
+may not have any effects or may only been applied partially.
+.SH "SEE ALSO"
+.BR curl_global_init (3),
+.BR libcurl (3)
diff --git a/docs/libcurl/curl_mime_addpart.3 b/docs/libcurl/curl_mime_addpart.3
index 2eaf90cee..91f1c9f43 100644
--- a/docs/libcurl/curl_mime_addpart.3
+++ b/docs/libcurl/curl_mime_addpart.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_mime_addpart 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_mime_addpart 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_mime_addpart - append a new empty part to a mime structure
@@ -40,31 +40,37 @@ subsequently be populated using functions from the mime API.
appended.
.SH EXAMPLE
.nf
- curl_mime *mime;
- curl_mimepart *part;
+int main(void)
+{
+ curl_mime *mime;
+ curl_mimepart *part;
- /* create a mime handle */
- mime = curl_mime_init(easy);
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ /* create a mime handle */
+ mime = curl_mime_init(curl);
- /* add a part */
- part = curl_mime_addpart(mime);
+ /* add a part */
+ part = curl_mime_addpart(mime);
- /* continue and set name + data to the part */
- curl_mime_data(part, "This is the field data", CURL_ZERO_TERMINATED);
- curl_mime_name(part, "data");
+ /* continue and set name + data to the part */
+ curl_mime_data(part, "This is the field data", CURL_ZERO_TERMINATED);
+ curl_mime_name(part, "data");
+ }
+}
.fi
.SH AVAILABILITY
As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0.
.SH RETURN VALUE
A mime part structure handle, or NULL upon failure.
.SH "SEE ALSO"
-.BR curl_mime_init "(3),"
-.BR curl_mime_name "(3),"
-.BR curl_mime_data "(3),"
-.BR curl_mime_data_cb "(3),"
-.BR curl_mime_filedata "(3),"
-.BR curl_mime_filename "(3),"
-.BR curl_mime_subparts "(3),"
-.BR curl_mime_type "(3),"
-.BR curl_mime_headers "(3),"
-.BR curl_mime_encoder "(3)"
+.BR curl_mime_data (3),
+.BR curl_mime_data_cb (3),
+.BR curl_mime_encoder (3),
+.BR curl_mime_filedata (3),
+.BR curl_mime_filename (3),
+.BR curl_mime_headers (3),
+.BR curl_mime_init (3),
+.BR curl_mime_name (3),
+.BR curl_mime_subparts (3),
+.BR curl_mime_type (3)
diff --git a/docs/libcurl/curl_mime_data.3 b/docs/libcurl/curl_mime_data.3
index e3a5d3d27..3bf5e2433 100644
--- a/docs/libcurl/curl_mime_data.3
+++ b/docs/libcurl/curl_mime_data.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_mime_data 3 "June 28, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_mime_data 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_mime_data - set a mime part's body data from memory
@@ -53,24 +53,30 @@ Setting large data is memory consuming: one might consider using
\fIcurl_mime_data_cb(3)\fP in such a case.
.SH EXAMPLE
.nf
- curl_mime *mime;
- curl_mimepart *part;
+int main(void)
+{
+ curl_mime *mime;
+ curl_mimepart *part;
- /* create a mime handle */
- mime = curl_mime_init(easy);
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ /* create a mime handle */
+ mime = curl_mime_init(curl);
- /* add a part */
- part = curl_mime_addpart(mime);
+ /* add a part */
+ part = curl_mime_addpart(mime);
- /* add data to the part */
- curl_mime_data(part, "raw contents to send", CURL_ZERO_TERMINATED);
+ /* add data to the part */
+ curl_mime_data(part, "raw contents to send", CURL_ZERO_TERMINATED);
+ }
+}
.fi
.SH AVAILABILITY
As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0.
.SH RETURN VALUE
CURLE_OK or a CURL error code upon failure.
.SH "SEE ALSO"
-.BR curl_mime_addpart "(3),"
-.BR curl_mime_data_cb "(3),"
-.BR curl_mime_name "(3),"
-.BR curl_mime_type "(3)"
+.BR curl_mime_addpart (3),
+.BR curl_mime_data_cb (3),
+.BR curl_mime_name (3),
+.BR curl_mime_type (3)
diff --git a/docs/libcurl/curl_mime_data_cb.3 b/docs/libcurl/curl_mime_data_cb.3
index cc7e51ed6..a8efcd9f0 100644
--- a/docs/libcurl/curl_mime_data_cb.3
+++ b/docs/libcurl/curl_mime_data_cb.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_mime_data_cb 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_mime_data_cb 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_mime_data_cb - set a callback-based data source for a mime part's body
@@ -50,13 +50,13 @@ from a data read callback function.
as shown by the above prototype. It may not be set to NULL.
\fIseekfunc\fP is a pointer to a seek callback function, with a signature as
-shown by the above prototype. This function will be used upon resending data
-(i.e.: after a redirect); this pointer may be set to NULL, in which case a
-resend is not possible.
+shown by the above prototype. This function is used when resending data (i.e.:
+after a redirect); this pointer may be set to NULL, in which case a resend
+might not be not possible.
\fIfreefunc\fP is a pointer to a user resource freeing callback function, with
a signature as shown by the above prototype. If no resource is to be freed, it
-may safely be set to NULL. This function will be called upon mime structure
+may safely be set to NULL. This function is called upon mime structure
freeing.
\fIarg\fP is a user defined argument to callback functions.
@@ -68,13 +68,13 @@ should be filled up with at most \fIsize\fP multiplied with \fInitems\fP number
of bytes by your function.
Your read function must then return the actual number of bytes that it stored
-in that memory area. Returning 0 will signal end-of-file to the library and
-cause it to stop the current transfer.
+in that memory area. Returning 0 signals end-of-file to the library and cause
+it to stop the current transfer.
-If you stop the current transfer by returning 0 "pre-maturely" (i.e. before the
-server expected it, like when you have said you will upload N bytes and you
-upload less than N bytes), you may experience that the server "hangs" waiting
-for the rest of the data that will not come.
+If you stop the current transfer by returning 0 "pre-maturely" (i.e. before
+the server expected it, like when you have said you intend to upload N bytes
+and yet you upload less than N bytes), you may experience that the server
+"hangs" waiting for the rest of the data that does not come.
The read callback may return \fICURL_READFUNC_ABORT\fP to stop the current
operation immediately, resulting in a \fICURLE_ABORTED_BY_CALLBACK\fP error
@@ -96,16 +96,16 @@ done by instead reading from the input or similar.
Care must be taken if the part is bound to a curl easy handle that is later
duplicated: the \fIarg\fP pointer argument is also duplicated, resulting in
-the pointed item to be shared between the original and the copied handle.
-In particular, special attention should be given to the \fIfreefunc\fP
-procedure code since it will be called twice with the same argument.
+the pointed item to be shared between the original and the copied handle. In
+particular, special attention should be given to the \fIfreefunc\fP procedure
+code since it then gets called twice with the same argument.
.SH EXAMPLE
-Sending a huge data string will cause the same amount of memory to be
-allocated: to avoid overhead resources consumption, one might want to use a
-callback source to avoid data duplication. In this case, original data
-must be retained until after the transfer terminates.
+Sending a huge data string causes the same amount of memory to be allocated:
+to avoid overhead resources consumption, one might want to use a callback
+source to avoid data duplication. In this case, original data must be retained
+until after the transfer terminates.
.nf
-
+#include <string.h> /* for memcpy */
char hugedata[512000];
struct ctl {
@@ -147,23 +147,28 @@ int seek_callback(void *arg, curl_off_t offset, int origin)
return CURL_SEEKFUNC_OK;
}
- CURL *easy = curl_easy_init();
- curl_mime *mime = curl_mime_init(easy);
- curl_mimepart *part = curl_mime_addpart(mime);
- struct ctl hugectl;
-
- hugectl.buffer = hugedata;
- hugectl.size = sizeof hugedata;
- hugectl.position = 0;
- curl_mime_data_cb(part, hugectl.size, read_callback, seek_callback, NULL,
- &hugectl);
-
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_mime *mime = curl_mime_init(curl);
+ curl_mimepart *part = curl_mime_addpart(mime);
+ struct ctl hugectl;
+
+ hugectl.buffer = hugedata;
+ hugectl.size = sizeof(hugedata);
+ hugectl.position = 0;
+ curl_mime_data_cb(part, hugectl.size, read_callback, seek_callback, NULL,
+ &hugectl);
+ }
+}
+.fi
.SH AVAILABILITY
As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0.
.SH RETURN VALUE
CURLE_OK or a CURL error code upon failure.
.SH "SEE ALSO"
-.BR curl_mime_addpart "(3),"
-.BR curl_mime_data "(3),"
-.BR curl_mime_name "(3),"
-.BR curl_easy_duphandle "(3)"
+.BR curl_easy_duphandle (3),
+.BR curl_mime_addpart (3),
+.BR curl_mime_data (3),
+.BR curl_mime_name (3)
diff --git a/docs/libcurl/curl_mime_encoder.3 b/docs/libcurl/curl_mime_encoder.3
index fcdfbf19f..86b7455cf 100644
--- a/docs/libcurl/curl_mime_encoder.3
+++ b/docs/libcurl/curl_mime_encoder.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_mime_encoder 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_mime_encoder 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_mime_encoder - set a mime part's encoder and content transfer encoding
@@ -68,33 +68,39 @@ not be used with other types of data.
If the original data is already encoded in such a scheme, a custom
\fIContent-Transfer-Encoding\fP header should be added with
-\fIcurl_mime_headers\fP() instead of setting a part encoder.
+\fIcurl_mime_headers(3)\fP instead of setting a part encoder.
-Encoding should not be applied to multiparts, thus the use of this
-function on a part with content set with \fIcurl_mime_subparts\fP() is
-strongly discouraged.
+Encoding should not be applied to multiparts, thus the use of this function on
+a part with content set with \fIcurl_mime_subparts(3)\fP is strongly
+discouraged.
.SH EXAMPLE
.nf
- curl_mime *mime;
- curl_mimepart *part;
+int main(void)
+{
+ curl_mime *mime;
+ curl_mimepart *part;
- /* create a mime handle */
- mime = curl_mime_init(easy);
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ /* create a mime handle */
+ mime = curl_mime_init(curl);
- /* add a part */
- part = curl_mime_addpart(mime);
+ /* add a part */
+ part = curl_mime_addpart(mime);
- /* send a file */
- curl_mime_filedata(part, "image.png");
+ /* send a file */
+ curl_mime_filedata(part, "image.png");
- /* encode file data in base64 for transfer */
- curl_mime_encoder(part, "base64");
+ /* encode file data in base64 for transfer */
+ curl_mime_encoder(part, "base64");
+ }
+}
.fi
.SH AVAILABILITY
As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0.
.SH RETURN VALUE
CURLE_OK or a CURL error code upon failure.
.SH "SEE ALSO"
-.BR curl_mime_addpart "(3),"
-.BR curl_mime_headers "(3),"
-.BR curl_mime_subparts "(3)"
+.BR curl_mime_addpart (3),
+.BR curl_mime_headers (3),
+.BR curl_mime_subparts (3)
diff --git a/docs/libcurl/curl_mime_filedata.3 b/docs/libcurl/curl_mime_filedata.3
index 9d01cb322..4cb85ac96 100644
--- a/docs/libcurl/curl_mime_filedata.3
+++ b/docs/libcurl/curl_mime_filedata.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_mime_filedata 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_mime_filedata 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_mime_filedata - set a mime part's body data from a file contents
@@ -52,27 +52,33 @@ manner to allow huge files to get transferred without using much memory. It
therefore requires that the file is kept intact during the entire request.
If the file size cannot be determined before actually reading it (such as for
-a device or named pipe), the whole mime structure containing the part
-will be transferred as chunks by HTTP and rejected by IMAP.
+a character device or named pipe), the whole mime structure containing the
+part is transferred using chunks by HTTP but is rejected by IMAP.
Setting a part's contents multiple times is valid: only the value set by the
last call is retained.
.SH EXAMPLE
.nf
- curl_mime *mime;
- curl_mimepart *part;
+int main(void)
+{
+ curl_mime *mime;
+ curl_mimepart *part;
- /* create a mime handle */
- mime = curl_mime_init(easy);
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ /* create a mime handle */
+ mime = curl_mime_init(curl);
- /* add a part */
- part = curl_mime_addpart(mime);
+ /* add a part */
+ part = curl_mime_addpart(mime);
- /* send data from this file */
- curl_mime_filedata(part, "image.png");
+ /* send data from this file */
+ curl_mime_filedata(part, "image.png");
- /* set name */
- curl_mime_name(part, "data");
+ /* set name */
+ curl_mime_name(part, "data");
+ }
+}
.fi
.SH AVAILABILITY
As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0.
@@ -82,7 +88,7 @@ indication that the file is not yet readable: it can be safely ignored at
this time, but the file must be made readable before the pertaining
easy handle is performed.
.SH "SEE ALSO"
-.BR curl_mime_addpart "(3),"
-.BR curl_mime_data "(3),"
-.BR curl_mime_filename "(3),"
-.BR curl_mime_name "(3)"
+.BR curl_mime_addpart (3),
+.BR curl_mime_data (3),
+.BR curl_mime_filename (3),
+.BR curl_mime_name (3)
diff --git a/docs/libcurl/curl_mime_filename.3 b/docs/libcurl/curl_mime_filename.3
index 33416b668..621f3b445 100644
--- a/docs/libcurl/curl_mime_filename.3
+++ b/docs/libcurl/curl_mime_filename.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_mime_filename 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_mime_filename 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_mime_filename - set a mime part's remote file name
@@ -48,29 +48,38 @@ storage may safely be released or reused after call. Setting a part's file
name multiple times is valid: only the value set by the last call is retained.
.SH EXAMPLE
.nf
- curl_mime *mime;
- curl_mimepart *part;
- /* create a mime handle */
- mime = curl_mime_init(easy);
+static char imagebuf[]="imagedata";
- /* add a part */
- part = curl_mime_addpart(mime);
+int main(void)
+{
+ curl_mime *mime;
+ curl_mimepart *part;
- /* send image data from memory */
- curl_mime_data(part, imagebuf, imagebuf_len);
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ /* create a mime handle */
+ mime = curl_mime_init(curl);
- /* set a file name to make it look like a file upload */
- curl_mime_filename(part, "image.png");
+ /* add a part */
+ part = curl_mime_addpart(mime);
- /* set name */
- curl_mime_name(part, "data");
+ /* send image data from memory */
+ curl_mime_data(part, imagebuf, sizeof(imagebuf));
+
+ /* set a file name to make it look like a file upload */
+ curl_mime_filename(part, "image.png");
+
+ /* set name */
+ curl_mime_name(part, "data");
+ }
+}
.fi
.SH AVAILABILITY
As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0.
.SH RETURN VALUE
CURLE_OK or a CURL error code upon failure.
.SH "SEE ALSO"
-.BR curl_mime_addpart "(3),"
-.BR curl_mime_filedata "(3),"
-.BR curl_mime_data "(3)"
+.BR curl_mime_addpart (3),
+.BR curl_mime_data (3),
+.BR curl_mime_filedata (3)
diff --git a/docs/libcurl/curl_mime_free.3 b/docs/libcurl/curl_mime_free.3
index 70a169198..e55d4b637 100644
--- a/docs/libcurl/curl_mime_free.3
+++ b/docs/libcurl/curl_mime_free.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_mime_free 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_mime_free 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_mime_free - free a previously built mime structure
@@ -44,21 +44,28 @@ are by the top structure freeing.
\fBmime\fP is the handle as returned from a previous call to
\fIcurl_mime_init(3)\fP and may be NULL.
-Passing in a NULL pointer in \fImime\fP will make this function return
-immediately with no action.
+Passing in a NULL pointer in \fImime\fP makes this function return immediately
+with no action.
.SH EXAMPLE
.nf
- /* Build the mime message. */
- mime = curl_mime_init(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ /* Build the mime message. */
+ curl_mime *mime = curl_mime_init(curl);
- /* ... */
+ /* send off the transfer */
- /* Free multipart message. */
- curl_mime_free(mime);
+ /* Free multipart message. */
+ curl_mime_free(mime);
+ }
+}
.fi
.SH AVAILABILITY
As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0.
.SH RETURN VALUE
None
.SH "SEE ALSO"
-.BR curl_mime_init "(3)"
+.BR curl_free (3),
+.BR curl_mime_init (3)
diff --git a/docs/libcurl/curl_mime_headers.3 b/docs/libcurl/curl_mime_headers.3
index e7dde698a..c136d50dd 100644
--- a/docs/libcurl/curl_mime_headers.3
+++ b/docs/libcurl/curl_mime_headers.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_mime_headers 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_mime_headers 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_mime_headers - set a mime part's custom headers
@@ -48,22 +48,38 @@ Setting a part's custom headers list multiple times is valid: only the value
set by the last call is retained.
.SH EXAMPLE
.nf
- struct curl_slist *headers = NULL;
+int main(void)
+{
+ struct curl_slist *headers = NULL;
+ CURL *easy = curl_easy_init();
+ curl_mime *mime;
+ curl_mimepart *part;
- headers = curl_slist_append(headers, "Custom-Header: mooo");
+ headers = curl_slist_append(headers, "Custom-Header: mooo");
- /* use these headers, please take ownership */
- curl_mime_headers(part, headers, TRUE);
+ mime = curl_mime_init(easy);
+ part = curl_mime_addpart(mime);
- /* pass on this data */
- curl_mime_data(part, "12345679", CURL_ZERO_TERMINATED);
+ /* use these headers in the part, takes ownership */
+ curl_mime_headers(part, headers, 1);
- /* set name */
- curl_mime_name(part, "numbers");
+ /* pass on this data */
+ curl_mime_data(part, "12345679", CURL_ZERO_TERMINATED);
+
+ /* set name */
+ curl_mime_name(part, "numbers");
+
+ /* Post and send it. */
+ curl_easy_setopt(easy, CURLOPT_MIMEPOST, mime);
+ curl_easy_setopt(easy, CURLOPT_URL, "https://example.com");
+ curl_easy_perform(easy);
+}
.fi
.SH AVAILABILITY
As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0.
.SH RETURN VALUE
CURLE_OK or a CURL error code upon failure.
.SH "SEE ALSO"
-.BR curl_mime_addpart "(3)"
+.BR curl_mime_addpart (3),
+.BR curl_mime_name (3)
+
diff --git a/docs/libcurl/curl_mime_init.3 b/docs/libcurl/curl_mime_init.3
index bfb6dfc24..fc1a39005 100644
--- a/docs/libcurl/curl_mime_init.3
+++ b/docs/libcurl/curl_mime_init.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_mime_init 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_mime_init 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_mime_init - create a mime handle
@@ -32,39 +32,47 @@ curl_mime_init - create a mime handle
curl_mime *curl_mime_init(CURL *easy_handle);
.fi
.SH DESCRIPTION
-\fIcurl_mime_init(3)\fP creates a handle to a new empty mime structure
-intended to be used with \fIeasy_handle\fP. This mime structure can be
-subsequently filled using the mime API, then attached to \fIeasy_handle\fP
-using option \fICURLOPT_MIMEPOST(3)\fP within a \fIcurl_easy_setopt(3)\fP
-call.
+\fIcurl_mime_init(3)\fP creates a handle to a new empty mime structure.
+This mime structure can be subsequently filled using the mime API, then
+attached to some easy handle using option \fICURLOPT_MIMEPOST(3)\fP within
+a \fIcurl_easy_setopt(3)\fP call or added as a multipart in another mime
+handle's part using \fIcurl_mime_subparts(3)\fP.
+
+\fIeasy_handle\fP is used for part separator randomization and error
+reporting. Since 7.87.0, it does not need to be the final target handle.
Using a mime handle is the recommended way to post an HTTP form, format and
send a multi-part email with SMTP or upload such an email to an IMAP server.
.SH EXAMPLE
.nf
- CURL *easy = curl_easy_init();
- curl_mime *mime;
- curl_mimepart *part;
+int main(void)
+{
+ CURL *easy = curl_easy_init();
+ curl_mime *mime;
+ curl_mimepart *part;
- /* Build an HTTP form with a single field named "data", */
- mime = curl_mime_init(easy);
- part = curl_mime_addpart(mime);
- curl_mime_data(part, "This is the field data", CURL_ZERO_TERMINATED);
- curl_mime_name(part, "data");
+ /* Build an HTTP form with a single field named "data", */
+ mime = curl_mime_init(easy);
+ part = curl_mime_addpart(mime);
+ curl_mime_data(part, "This is the field data", CURL_ZERO_TERMINATED);
+ curl_mime_name(part, "data");
- /* Post and send it. */
- curl_easy_setopt(easy, CURLOPT_MIMEPOST, mime);
- curl_easy_setopt(easy, CURLOPT_URL, "https://example.com");
- curl_easy_perform(easy);
+ /* Post and send it. */
+ curl_easy_setopt(easy, CURLOPT_MIMEPOST, mime);
+ curl_easy_setopt(easy, CURLOPT_URL, "https://example.com");
+ curl_easy_perform(easy);
- /* Clean-up. */
- curl_easy_cleanup(easy);
- curl_mime_free(mime);
+ /* Clean-up. */
+ curl_easy_cleanup(easy);
+ curl_mime_free(mime);
+}
+.fi
.SH AVAILABILITY
As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0.
.SH RETURN VALUE
A mime struct handle, or NULL upon failure.
.SH "SEE ALSO"
-.BR curl_mime_addpart "(3),"
-.BR curl_mime_free "(3),"
-.BR CURLOPT_MIMEPOST "(3)"
+.BR curl_mime_addpart (3),
+.BR curl_mime_free (3),
+.BR curl_mime_subparts (3),
+.BR CURLOPT_MIMEPOST (3)
diff --git a/docs/libcurl/curl_mime_name.3 b/docs/libcurl/curl_mime_name.3
index 3bed9891d..fa0c5e8bb 100644
--- a/docs/libcurl/curl_mime_name.3
+++ b/docs/libcurl/curl_mime_name.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_mime_name 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_mime_name 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_mime_name - set a mime part's name
@@ -45,23 +45,29 @@ is valid: only the value set by the last call is retained. It is possible to
reset the name of a part by setting \fIname\fP to NULL.
.SH EXAMPLE
.nf
- curl_mime *mime;
- curl_mimepart *part;
+int main(void)
+{
+ curl_mime *mime;
+ curl_mimepart *part;
- /* create a mime handle */
- mime = curl_mime_init(easy);
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ /* create a mime handle */
+ mime = curl_mime_init(curl);
- /* add a part */
- part = curl_mime_addpart(mime);
+ /* add a part */
+ part = curl_mime_addpart(mime);
- /* give the part a name */
- curl_mime_name(part, "shoe_size");
+ /* give the part a name */
+ curl_mime_name(part, "shoe_size");
+ }
+}
.fi
.SH AVAILABILITY
As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0.
.SH RETURN VALUE
CURLE_OK or a CURL error code upon failure.
.SH "SEE ALSO"
-.BR curl_mime_addpart "(3),"
-.BR curl_mime_data "(3),"
-.BR curl_mime_type "(3)"
+.BR curl_mime_addpart (3),
+.BR curl_mime_data (3),
+.BR curl_mime_type (3)
diff --git a/docs/libcurl/curl_mime_subparts.3 b/docs/libcurl/curl_mime_subparts.3
index a86ddf772..963270def 100644
--- a/docs/libcurl/curl_mime_subparts.3
+++ b/docs/libcurl/curl_mime_subparts.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_mime_subparts 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_mime_subparts 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_mime_subparts - set sub-parts of a multipart mime part
@@ -38,7 +38,7 @@ structure.
\fIpart\fP is a handle to the multipart part.
\fIsubparts\fP is a mime structure handle holding the sub-parts. After
-\fIcurl_mime_subparts\fP succeeds, the mime structure handle belongs to the
+\fIcurl_mime_subparts(3)\fP succeeds, the mime structure handle belongs to the
multipart part and must not be freed explicitly. It may however be updated by
subsequent calls to mime API functions.
@@ -47,30 +47,43 @@ last call is retained. It is possible to unassign previous part's contents by
setting \fIsubparts\fP to NULL.
.SH EXAMPLE
.nf
- /* The inline part is an alternative proposing the html and the text
- versions of the email. */
- alt = curl_mime_init(curl);
- /* HTML message. */
- part = curl_mime_addpart(alt);
- curl_mime_data(part, inline_html, CURL_ZERO_TERMINATED);
- curl_mime_type(part, "text/html");
+static char *inline_html = "<title>example</title>";
+static char *inline_text = "once upon the time";
- /* Text message. */
- part = curl_mime_addpart(alt);
- curl_mime_data(part, inline_text, CURL_ZERO_TERMINATED);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ struct curl_slist *slist;
- /* Create the inline part. */
- part = curl_mime_addpart(mime);
- curl_mime_subparts(part, alt);
- curl_mime_type(part, "multipart/alternative");
- slist = curl_slist_append(NULL, "Content-Disposition: inline");
- curl_mime_headers(part, slist, 1);
+ /* The inline part is an alternative proposing the html and the text
+ versions of the email. */
+ curl_mime *alt = curl_mime_init(curl);
+ curl_mimepart *part;
+
+ /* HTML message. */
+ part = curl_mime_addpart(alt);
+ curl_mime_data(part, inline_html, CURL_ZERO_TERMINATED);
+ curl_mime_type(part, "text/html");
+
+ /* Text message. */
+ part = curl_mime_addpart(alt);
+ curl_mime_data(part, inline_text, CURL_ZERO_TERMINATED);
+
+ /* Create the inline part. */
+ part = curl_mime_addpart(alt);
+ curl_mime_subparts(part, alt);
+ curl_mime_type(part, "multipart/alternative");
+ slist = curl_slist_append(NULL, "Content-Disposition: inline");
+ curl_mime_headers(part, slist, 1);
+ }
+}
.fi
.SH AVAILABILITY
As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0.
.SH RETURN VALUE
CURLE_OK or a CURL error code upon failure.
.SH "SEE ALSO"
-.BR curl_mime_addpart "(3),"
-.BR curl_mime_init "(3)"
+.BR curl_mime_addpart (3),
+.BR curl_mime_init (3)
diff --git a/docs/libcurl/curl_mime_type.3 b/docs/libcurl/curl_mime_type.3
index f759c7470..2539be76f 100644
--- a/docs/libcurl/curl_mime_type.3
+++ b/docs/libcurl/curl_mime_type.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_mime_type 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_mime_type 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_mime_type - set a mime part's content type
@@ -58,29 +58,35 @@ extension, or application/octet-stream by default.
- text/plain in other cases.
.SH EXAMPLE
.nf
- curl_mime *mime;
- curl_mimepart *part;
+int main(void)
+{
+ curl_mime *mime;
+ curl_mimepart *part;
- /* create a mime handle */
- mime = curl_mime_init(easy);
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ /* create a mime handle */
+ mime = curl_mime_init(curl);
- /* add a part */
- part = curl_mime_addpart(mime);
+ /* add a part */
+ part = curl_mime_addpart(mime);
- /* get data from this file */
- curl_mime_filedata(part, "image.png");
+ /* get data from this file */
+ curl_mime_filedata(part, "image.png");
- /* content-type for this part */
- curl_mime_type(part, "image/png");
+ /* content-type for this part */
+ curl_mime_type(part, "image/png");
- /* set name */
- curl_mime_name(part, "image");
+ /* set name */
+ curl_mime_name(part, "image");
+}
+}
.fi
.SH AVAILABILITY
As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0.
.SH RETURN VALUE
CURLE_OK or a CURL error code upon failure.
.SH "SEE ALSO"
-.BR curl_mime_addpart "(3),"
-.BR curl_mime_name "(3),"
-.BR curl_mime_data "(3)"
+.BR curl_mime_addpart (3),
+.BR curl_mime_data (3),
+.BR curl_mime_name (3)
diff --git a/docs/libcurl/curl_mprintf.3 b/docs/libcurl/curl_mprintf.3
index 5fb7997bd..d63c52608 100644
--- a/docs/libcurl/curl_mprintf.3
+++ b/docs/libcurl/curl_mprintf.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_printf 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_printf 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_maprintf, curl_mfprintf, curl_mprintf, curl_msnprintf, curl_msprintf
@@ -137,7 +137,7 @@ overrides a space if both are used.
.SH "Field width"
An optional decimal digit string (with nonzero first digit) specifying a
minimum field width. If the converted value has fewer characters than the
-field width, it will be padded with spaces on the left (or right, if the
+field width, it gets padded with spaces on the left (or right, if the
left-adjustment flag has been given). Instead of a decimal digit string one
may write "*" or "*m$" (for some decimal integer m) to specify that the field
width is given in the next argument, or in the \fIm-th\fP argument,
@@ -238,11 +238,16 @@ by the corresponding argument.
A '%' is written. No argument is converted.
.SH EXAMPLE
.nf
- mprintf("My name is %s\\n", name);
- mprintf("Pi is almost %f\\n", 25/8);
+const char *name = "John";
+
+int main(void)
+{
+ curl_mprintf("My name is %s\\n", name);
+ curl_mprintf("Pi is almost %f\\n", (double)25.0/8);
+}
.fi
.SH AVAILABILITY
-These functions will be removed from the public libcurl API in the future. Do
+These functions might be removed from the public libcurl API in the future. Do
not use them in new programs or projects.
.SH RETURN VALUE
The \fBcurl_maprintf\fP and \fBcurl_mvaprintf\fP functions return a pointer to
diff --git a/docs/libcurl/curl_multi_add_handle.3 b/docs/libcurl/curl_multi_add_handle.3
index 119476e39..18c3c277d 100644
--- a/docs/libcurl/curl_multi_add_handle.3
+++ b/docs/libcurl/curl_multi_add_handle.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_multi_add_handle 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_multi_add_handle 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_multi_add_handle - add an easy handle to a multi session
@@ -32,32 +32,30 @@ curl_multi_add_handle - add an easy handle to a multi session
CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL *easy_handle);
.fi
.SH DESCRIPTION
-Adds a standard easy handle to the multi stack. This function call will make
-this \fImulti_handle\fP control the specified \fIeasy_handle\fP.
+Adds the \fIeasy handle\fP to the \fImulti_handle\fP.
While an easy handle is added to a multi stack, you cannot and you must not
use \fIcurl_easy_perform(3)\fP on that handle. After having removed the easy
handle from the multi stack again, it is perfectly fine to use it with the
easy interface again.
-If the easy handle is not set to use a shared (\fICURLOPT_SHARE(3)\fP) or
-global DNS cache (\fICURLOPT_DNS_USE_GLOBAL_CACHE(3)\fP), it will be made to
-use the DNS cache that is shared between all easy handles within the multi
-handle when \fIcurl_multi_add_handle(3)\fP is called.
+If the easy handle is not set to use a shared (\fICURLOPT_SHARE(3)\fP) cache,
+it is made to use a DNS cache that is shared between all easy handles within
+the multi handle when \fIcurl_multi_add_handle(3)\fP is called.
-When an easy interface is added to a multi handle, it will use a shared
+When an easy interface is added to a multi handle, it is set to use a shared
connection cache owned by the multi handle. Removing and adding new easy
-handles will not affect the pool of connections or the ability to do
-connection re-use.
+handles does not affect the pool of connections or the ability to do
+connection reuse.
-If you have \fICURLMOPT_TIMERFUNCTION(3)\fP set in the multi handle (and you
-really should if you are working event-based with
-\fIcurl_multi_socket_action(3)\fP and friends), that callback will be called
-from within this function to ask for an updated timer so that your main event
-loop will get the activity on this handle to get started.
+If you have \fICURLMOPT_TIMERFUNCTION(3)\fP set in the multi handle (as you
+should if you are working event-based with \fIcurl_multi_socket_action(3)\fP
+and friends), that callback is called from within this function to ask for an
+updated timer so that your main event loop gets the activity on this handle to
+get started.
-The easy handle will remain added to the multi handle until you remove it
-again with \fIcurl_multi_remove_handle(3)\fP - even when a transfer with that
+The easy handle remains added to the multi handle until you remove it again
+with \fIcurl_multi_remove_handle(3)\fP - even when a transfer with that
specific easy handle is completed.
You should remove the easy handle from the multi stack before you terminate
@@ -70,17 +68,27 @@ first the easy handle and then the multi handle:
3 - \fIcurl_multi_cleanup(3)\fP
.SH EXAMPLE
.nf
+int main(void)
+{
/* init a multi stack */
- multi_handle = curl_multi_init();
+ CURLM *multi = curl_multi_init();
+
+ /* create two easy handles */
+ CURL *http_handle = curl_easy_init();
+ CURL *http_handle2 = curl_easy_init();
/* add individual transfers */
- curl_multi_add_handle(multi_handle, http_handle);
- curl_multi_add_handle(multi_handle, http_handle2);
+ curl_multi_add_handle(multi, http_handle);
+ curl_multi_add_handle(multi, http_handle2);
+}
.fi
.SH AVAILABILITY
Added in 7.9.6
.SH RETURN VALUE
CURLMcode type, general libcurl multi interface error code.
.SH "SEE ALSO"
-.BR curl_multi_cleanup "(3)," curl_multi_init "(3), "
-.BR curl_multi_setopt "(3), " curl_multi_socket_action "(3) "
+.BR curl_multi_cleanup (3),
+.BR curl_multi_get_handles (3),
+.BR curl_multi_init (3),
+.BR curl_multi_setopt (3),
+.BR curl_multi_socket_action (3)
diff --git a/docs/libcurl/curl_multi_assign.3 b/docs/libcurl/curl_multi_assign.3
index 945dc956f..c2250cc01 100644
--- a/docs/libcurl/curl_multi_assign.3
+++ b/docs/libcurl/curl_multi_assign.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_multi_assign 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_multi_assign 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_multi_assign \- set data to associate with an internal socket
@@ -37,26 +37,35 @@ This function creates an association in the multi handle between the given
socket and a private pointer of the application. This is designed for
\fIcurl_multi_socket_action(3)\fP uses.
-When set, the \fIsockptr\fP pointer will be passed to all future socket
-callbacks for the specific \fIsockfd\fP socket.
+When set, the \fIsockptr\fP pointer is passed to all future socket callbacks
+for the specific \fIsockfd\fP socket.
-If the given \fIsockfd\fP is not already in use by libcurl, this function will
-return an error.
+If the given \fIsockfd\fP is not already in use by libcurl, this function
+returns an error.
libcurl only keeps one single pointer associated with a socket, so calling
-this function several times for the same socket will make the last set pointer
-get used.
+this function several times for the same socket makes the last set pointer get
+used.
The idea here being that this association (socket to private pointer) is
-something that just about every application that uses this API will need and
-then libcurl can just as well do it since it already has an internal hash
-table lookup for this.
+something that just about every application that uses this API needs and then
+libcurl can just as well do it since it already has the necessary
+functionality.
It is acceptable to call this function from your multi callback functions.
.SH EXAMPLE
.nf
- /* make our struct pointer associated with socket fd */
- mc = curl_multi_assign(multi_handle, fd, ourstructp);
+int main(void)
+{
+ CURLM *multi = curl_multi_init();
+ void *ourstructp; /* pointer to our data */
+ curl_socket_t fd; /* file descriptor to associate our data with */
+
+ /* make our struct pointer associated with socket fd */
+ CURLMcode mc = curl_multi_assign(multi, fd, ourstructp);
+ if(mc)
+ printf("error: %s\\n", curl_multi_strerror(mc));
+}
.fi
.SH AVAILABILITY
Added in 7.15.5
@@ -72,4 +81,5 @@ another socket to wait for, we can use \fIcurl_multi_assign(3)\fP to point out
the particular data so that when we get updates about this same socket again,
we do not have to find the struct associated with this socket by ourselves.
.SH "SEE ALSO"
-.BR curl_multi_setopt "(3), " curl_multi_socket_action "(3) "
+.BR curl_multi_setopt (3),
+.BR curl_multi_socket_action (3)
diff --git a/docs/libcurl/curl_multi_cleanup.3 b/docs/libcurl/curl_multi_cleanup.3
index dd2b01762..512f53dd9 100644
--- a/docs/libcurl/curl_multi_cleanup.3
+++ b/docs/libcurl/curl_multi_cleanup.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_multi_cleanup 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_multi_cleanup 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_multi_cleanup - close down a multi session
@@ -45,14 +45,19 @@ handle is no longer connected to the multi handle
3 - \fIcurl_multi_cleanup(3)\fP should be called when all easy handles are
removed
-Passing in a NULL pointer in \fImulti_handle\fP will make this function return
+Passing in a NULL pointer in \fImulti_handle\fP makes this function return
CURLM_BAD_HANDLE immediately with no other action.
.SH EXAMPLE
.nf
- /* when the multi transfer is done ... */
+int main(void)
+{
+ CURLM *multi = curl_multi_init();
- /* remove all easy handles, then: */
- curl_multi_cleanup(multi_handle);
+ /* when the multi transfer is done ... */
+
+ /* remove all easy handles, then: */
+ curl_multi_cleanup(multi);
+}
.fi
.SH AVAILABILITY
Added in 7.9.6
@@ -60,4 +65,8 @@ Added in 7.9.6
CURLMcode type, general libcurl multi interface error code. On success,
CURLM_OK is returned.
.SH "SEE ALSO"
-.BR curl_multi_init "(3)," curl_easy_cleanup "(3)," curl_easy_init "(3)"
+.BR curl_easy_cleanup (3),
+.BR curl_multi_get_handles (3),
+.BR curl_easy_init (3),
+.BR curl_multi_init (3)
+
diff --git a/docs/libcurl/curl_multi_fdset.3 b/docs/libcurl/curl_multi_fdset.3
index 9ca434581..839fdbcb3 100644
--- a/docs/libcurl/curl_multi_fdset.3
+++ b/docs/libcurl/curl_multi_fdset.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_multi_fdset 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_multi_fdset 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_multi_fdset - extracts file descriptor information from a multi handle
@@ -34,7 +34,7 @@ CURLMcode curl_multi_fdset(CURLM *multi_handle,
fd_set *write_fd_set,
fd_set *exc_fd_set,
int *max_fd);
-.ad
+.fi
.SH DESCRIPTION
This function extracts file descriptor information from a given multi_handle.
libcurl returns its \fIfd_set\fP sets. The application can use these to
@@ -55,13 +55,13 @@ If the \fIexc_fd_set\fP argument is not a null pointer, it points to an object
of type \fBfd_set\fP that on return specifies the file descriptors to be
checked for error conditions pending.
-If no file descriptors are set by libcurl, \fImax_fd\fP will contain -1 when
-this function returns. Otherwise it will contain the highest descriptor number
-libcurl set. When libcurl returns -1 in \fImax_fd\fP, it is because libcurl
-currently does something that is not possible for your application to monitor
-with a socket and unfortunately you can then not know exactly when the current
-action is completed using select(). You then need to wait a while before you
-proceed and call \fIcurl_multi_perform(3)\fP anyway. How long to wait? Unless
+If no file descriptors are set by libcurl, \fImax_fd\fP contain -1 when this
+function returns. Otherwise it contains the highest descriptor number libcurl
+set. When libcurl returns -1 in \fImax_fd\fP, it is because libcurl currently
+does something that is not possible for your application to monitor with a
+socket and unfortunately you can then not know exactly when the current action
+is completed using select(). You then need to wait a while before you proceed
+and call \fIcurl_multi_perform(3)\fP anyway. How long to wait? Unless
\fIcurl_multi_timeout(3)\fP gives you a lower number, we suggest 100
milliseconds or so, but you may want to test it out in your own particular
conditions to find a suitable value.
@@ -74,23 +74,42 @@ want.
If one of the sockets used by libcurl happens to be larger than what can be
set in an \fBfd_set\fP, which on POSIX systems means that the file descriptor
-is larger than \fBFD_SETSIZE\fP, then libcurl will try to not set it. Setting
-a too large file descriptor in an \fBfd_set\fP implies an out of bounds write
-which can cause crashes, or worse. The effect of NOT storing it will possibly
-save you from the crash, but will make your program NOT wait for sockets it
-should wait for...
+is larger than \fBFD_SETSIZE\fP, then libcurl tries to not set it. Setting a
+too large file descriptor in an \fBfd_set\fP implies an out of bounds write
+which can cause crashes, or worse. The effect of NOT storing it might possibly
+save you from the crash, but makes your program NOT wait for sockets it should
+wait for...
.SH EXAMPLE
.nf
- /* get file descriptors from the transfers */
- mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
+int main(void)
+{
+ fd_set fdread;
+ fd_set fdwrite;
+ fd_set fdexcep;
+ int maxfd;
+ int rc;
+ CURLMcode mc;
+ struct timeval timeout = {1, 0};
+
+ CURLM *multi = curl_multi_init();
+
+ do {
+
+ /* call curl_multi_perform() */
+
+ /* get file descriptors from the transfers */
+ mc = curl_multi_fdset(multi, &fdread, &fdwrite, &fdexcep, &maxfd);
+
+ if(mc != CURLM_OK) {
+ fprintf(stderr, "curl_multi_fdset() failed, code %d.\\n", mc);
+ break;
+ }
- if(mc != CURLM_OK) {
- fprintf(stderr, "curl_multi_fdset() failed, code %d.\\n", mc);
- break;
- }
+ /* wait for activity on one of the sockets */
+ rc = select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &timeout);
- /* wait for activity on one of the sockets */
- rc = select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &timeout);
+ } while(!mc);
+}
.fi
.SH AVAILABILITY
Added in 7.9.6
@@ -98,6 +117,9 @@ Added in 7.9.6
\fBCURLMcode\fP type, general libcurl multi interface error code. See
\fIlibcurl-errors(3)\fP
.SH "SEE ALSO"
-.BR curl_multi_cleanup "(3), " curl_multi_init "(3), "
-.BR curl_multi_wait "(3), "
-.BR curl_multi_timeout "(3), " curl_multi_perform "(3), " select "(2) "
+.BR curl_multi_cleanup (3),
+.BR curl_multi_init (3),
+.BR curl_multi_perform (3),
+.BR curl_multi_timeout (3),
+.BR curl_multi_wait (3),
+.BR select (2)
diff --git a/docs/libcurl/curl_multi_get_handles.3 b/docs/libcurl/curl_multi_get_handles.3
new file mode 100644
index 000000000..7dea15d14
--- /dev/null
+++ b/docs/libcurl/curl_multi_get_handles.3
@@ -0,0 +1,83 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed 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
+.\" *
+.\" **************************************************************************
+.TH curl_multi_get_handles 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
+
+.SH NAME
+curl_multi_get_handles - returns all added easy handles
+.SH SYNOPSIS
+.nf
+#include <curl/curl.h>
+
+CURL **curl_multi_get_handles(CURLM *multi_handle);
+.fi
+.SH DESCRIPTION
+Returns an array with pointers to all added easy handles. The end of the list
+is marked with a NULL pointer.
+
+Even if there is not a single easy handle added, this still returns an array
+but with only a single NULL pointer entry.
+
+The returned array contains all the handles that are present at the time of
+the call. As soon as a handle has been removed from or a handle has been added
+to the multi handle after the handle array was returned, the two data points
+are out of sync.
+
+The order of the easy handles within the array is not guaranteed.
+
+The returned array must be freed with a call to \fIcurl_free(3)\fP after use.
+.SH EXAMPLE
+.nf
+int main(void)
+{
+ /* init a multi stack */
+ CURLM *multi = curl_multi_init();
+ CURL *curl = curl_easy_init();
+
+ if(curl) {
+ /* add the transfer */
+ curl_multi_add_handle(multi, curl);
+
+ /* extract all added handles */
+ CURL **list = curl_multi_get_handles(multi);
+
+ if(list) {
+ int i;
+ /* remove all added handles */
+ for(i = 0; list[i]; i++) {
+ curl_multi_remove_handle(multi, list[i]);
+ }
+ curl_free(list);
+ }
+ }
+}
+.fi
+.SH AVAILABILITY
+Added in 8.4.0
+.SH RETURN VALUE
+Returns NULL on failure. Otherwise it returns a pointer to an allocated array.
+.SH "SEE ALSO"
+.BR curl_multi_add_handle (3),
+.BR curl_multi_cleanup (3),
+.BR curl_multi_init (3),
+.BR curl_multi_remove_handle (3)
diff --git a/docs/libcurl/curl_multi_info_read.3 b/docs/libcurl/curl_multi_info_read.3
index 1feee6a62..4cef6e94b 100644
--- a/docs/libcurl/curl_multi_info_read.3
+++ b/docs/libcurl/curl_multi_info_read.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_multi_info_read 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_multi_info_read 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_multi_info_read - read multi stack information
@@ -37,17 +37,17 @@ transfers. Messages may include information such as an error code from the
transfer or just the fact that a transfer is completed. More details on these
should be written down as well.
-Repeated calls to this function will return a new struct each time, until a
-NULL is returned as a signal that there is no more to get at this point. The
-integer pointed to with \fImsgs_in_queue\fP will contain the number of
-remaining messages after this function was called.
+Repeated calls to this function returns a new struct each time, until a NULL
+is returned as a signal that there is no more to get at this point. The
+integer pointed to with \fImsgs_in_queue\fP contains the number of remaining
+messages after this function was called.
When you fetch a message using this function, it is removed from the internal
-queue so calling this function again will not return the same message
-again. It will instead return new messages at each new invoke until the queue
-is emptied.
+queue so calling this function again does not return the same message
+again. It instead returns new messages at each new invoke until the queue is
+emptied.
-\fBWARNING:\fP The data the returned pointer points to will not survive
+\fBWARNING:\fP The data the returned pointer points to does not survive
calling \fIcurl_multi_cleanup(3)\fP, \fIcurl_multi_remove_handle(3)\fP or
\fIcurl_easy_cleanup(3)\fP.
@@ -73,21 +73,28 @@ that just completed.
At this point, there are no other \fBmsg\fP types defined.
.SH EXAMPLE
.nf
-struct CURLMsg *m;
+int main(void)
+{
+ CURLM *multi = curl_multi_init();
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ struct CURLMsg *m;
-/* call curl_multi_perform or curl_multi_socket_action first, then loop
- through and check if there are any transfers that have completed */
+ /* call curl_multi_perform or curl_multi_socket_action first, then loop
+ through and check if there are any transfers that have completed */
-do {
- int msgq = 0;
- m = curl_multi_info_read(multi_handle, &msgq);
- if(m && (m->msg == CURLMSG_DONE)) {
- CURL *e = m->easy_handle;
- transfers--;
- curl_multi_remove_handle(multi_handle, e);
- curl_easy_cleanup(e);
+ do {
+ int msgq = 0;
+ m = curl_multi_info_read(multi, &msgq);
+ if(m && (m->msg == CURLMSG_DONE)) {
+ CURL *e = m->easy_handle;
+ /* m->data.result holds the error code for the transfer */
+ curl_multi_remove_handle(multi, e);
+ curl_easy_cleanup(e);
+ }
+ } while(m);
}
-} while(m);
+}
.fi
.SH AVAILABILITY
Added in 7.9.6
@@ -96,4 +103,6 @@ A pointer to a filled-in struct, or NULL if it failed or ran out of
structs. It also writes the number of messages left in the queue (after this
read) in the integer the second argument points to.
.SH "SEE ALSO"
-.BR curl_multi_cleanup "(3), " curl_multi_init "(3), " curl_multi_perform "(3)"
+.BR curl_multi_cleanup (3),
+.BR curl_multi_init (3),
+.BR curl_multi_perform (3)
diff --git a/docs/libcurl/curl_multi_init.3 b/docs/libcurl/curl_multi_init.3
index a2e4b26a1..87ed6c1e7 100644
--- a/docs/libcurl/curl_multi_init.3
+++ b/docs/libcurl/curl_multi_init.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_multi_init 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_multi_init 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_multi_init - create a multi handle
@@ -38,12 +38,17 @@ places in the documentation. This init call MUST have a corresponding call to
\fIcurl_multi_cleanup(3)\fP when the operation is complete.
.SH EXAMPLE
.nf
-/* init a multi stack */
-multi_handle = curl_multi_init();
+int main(void)
+{
+ /* init a multi stack */
+ CURLM *multi = curl_multi_init();
+ CURL *curl = curl_easy_init();
+ CURL *curl2 = curl_easy_init();
-/* add individual transfers */
-curl_multi_add_handle(multi_handle, http_handle);
-curl_multi_add_handle(multi_handle, http_handle2);
+ /* add individual transfers */
+ curl_multi_add_handle(multi, curl);
+ curl_multi_add_handle(multi, curl2);
+}
.fi
.SH AVAILABILITY
Added in 7.9.6
@@ -51,4 +56,9 @@ Added in 7.9.6
If this function returns NULL, something went wrong and you cannot use the
other curl functions.
.SH "SEE ALSO"
-.BR curl_multi_cleanup "(3)," curl_global_init "(3)," curl_easy_init "(3)"
+.BR curl_multi_cleanup (3),
+.BR curl_multi_add_handle (3),
+.BR curl_multi_get_handles (3),
+.BR curl_global_init (3),
+.BR curl_easy_init (3)
+
diff --git a/docs/libcurl/curl_multi_perform.3 b/docs/libcurl/curl_multi_perform.3
index 2edef0c86..e501d645f 100644
--- a/docs/libcurl/curl_multi_perform.3
+++ b/docs/libcurl/curl_multi_perform.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_multi_perform 3 "August 15, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_multi_perform 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_multi_perform - reads/writes available data from easy handles
@@ -36,13 +36,13 @@ This function performs transfers on all the added handles that need attention
in a non-blocking fashion. The easy handles have previously been added to the
multi handle with \fIcurl_multi_add_handle(3)\fP.
-When an application has found out there's data available for the multi_handle
+When an application has found out there is data available for the multi_handle
or a timeout has elapsed, the application should call this function to
read/write whatever there is to read or write right now etc.
\fIcurl_multi_perform(3)\fP returns as soon as the reads/writes are done. This
function does not require that there actually is any data available for
-reading or that data can be written, it can be called just in case. It will
-store the number of handles that still transfer data in the second argument's
+reading or that data can be written, it can be called just in case. It stores
+the number of handles that still transfer data in the second argument's
integer-pointer.
If the amount of \fIrunning_handles\fP is changed from the previous call (or
@@ -63,21 +63,29 @@ again on the same multi handle after an error has been returned, unless first
removing all the handles and adding new ones.
.SH EXAMPLE
.nf
-int still_running;
-do {
- CURLMcode mc = curl_multi_perform(multi_handle, &still_running);
+int main(void)
+{
+ int still_running;
+ CURL *multi = curl_multi_init();
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_multi_add_handle(multi, curl);
+ do {
+ CURLMcode mc = curl_multi_perform(multi, &still_running);
- if(!mc && still_running)
- /* wait for activity, timeout or "nothing" */
- mc = curl_multi_poll(multi_handle, NULL, 0, 1000, NULL);
+ if(!mc && still_running)
+ /* wait for activity, timeout or "nothing" */
+ mc = curl_multi_poll(multi, NULL, 0, 1000, NULL);
- if(mc) {
- fprintf(stderr, "curl_multi_poll() failed, code %d.\\n", (int)mc);
- break;
- }
+ if(mc) {
+ fprintf(stderr, "curl_multi_poll() failed, code %d.\\n", (int)mc);
+ break;
+ }
-/* if there are still transfers, loop! */
-} while(still_running);
+ /* if there are still transfers, loop! */
+ } while(still_running);
+ }
+}
.fi
.SH AVAILABILITY
Added in 7.9.6
@@ -89,12 +97,15 @@ individual transfers may have occurred even when this function returns
\fICURLM_OK\fP. Use \fIcurl_multi_info_read(3)\fP to figure out how individual
transfers did.
.SH "TYPICAL USAGE"
-Most applications will use \fIcurl_multi_poll(3)\fP to make libcurl wait for
+Most applications use \fIcurl_multi_poll(3)\fP to make libcurl wait for
activity on any of the ongoing transfers. As soon as one or more file
descriptor has activity or the function times out, the application calls
\fIcurl_multi_perform(3)\fP.
.SH "SEE ALSO"
-.BR curl_multi_cleanup "(3), " curl_multi_init "(3), "
-.BR curl_multi_wait "(3), " curl_multi_add_handle "(3), "
-.BR curl_multi_fdset "(3), " curl_multi_info_read "(3), "
-.BR libcurl-errors "(3)"
+.BR curl_multi_add_handle (3),
+.BR curl_multi_cleanup (3),
+.BR curl_multi_fdset (3),
+.BR curl_multi_info_read (3),
+.BR curl_multi_init (3),
+.BR curl_multi_wait (3),
+.BR libcurl-errors (3)
diff --git a/docs/libcurl/curl_multi_poll.3 b/docs/libcurl/curl_multi_poll.3
index 4d59d1f2c..bad6f338e 100644
--- a/docs/libcurl/curl_multi_poll.3
+++ b/docs/libcurl/curl_multi_poll.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_multi_poll 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_multi_poll 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_multi_poll - polls on all easy handles in a multi handle
@@ -34,23 +34,23 @@ CURLMcode curl_multi_poll(CURLM *multi_handle,
unsigned int extra_nfds,
int timeout_ms,
int *numfds);
-.ad
+.fi
.SH DESCRIPTION
\fIcurl_multi_poll(3)\fP polls all file descriptors used by the curl easy
-handles contained in the given multi handle set. It will block until activity
-is detected on at least one of the handles or \fItimeout_ms\fP has passed.
+handles contained in the given multi handle set. It blocks until activity is
+detected on at least one of the handles or \fItimeout_ms\fP has passed.
Alternatively, if the multi handle has a pending internal timeout that has a
-shorter expiry time than \fItimeout_ms\fP, that shorter time will be used
-instead to make sure timeout accuracy is reasonably kept.
+shorter expiry time than \fItimeout_ms\fP, that shorter time is used instead
+to make sure timeout accuracy is reasonably kept.
The calling application may pass additional curl_waitfd structures which are
similar to \fIpoll(2)\fP's \fIpollfd\fP structure to be waited on in the same
call.
-On completion, if \fInumfds\fP is non-NULL, it will be populated with the
-total number of file descriptors on which interesting events occurred. This
-number can include both libcurl internal descriptors as well as descriptors
-provided in \fIextra_fds\fP.
+On completion, if \fInumfds\fP is non-NULL, it gets populated with the total
+number of file descriptors on which interesting events occurred. This number
+can include both libcurl internal descriptors as well as descriptors provided
+in \fIextra_fds\fP.
The \fIcurl_multi_wakeup(3)\fP function can be used from another thread to
wake up this function and return faster. This is one of the details
@@ -58,10 +58,9 @@ that makes this function different than \fIcurl_multi_wait(3)\fP which cannot
be woken up this way.
If no extra file descriptors are provided and libcurl has no file descriptor
-to offer to wait for, this function will instead wait during \fItimeout_ms\fP
-milliseconds (or shorter if an internal timer indicates so). This is the
-other detail that makes this function different than
-\fIcurl_multi_wait(3)\fP.
+to offer to wait for, this function instead waits during \fItimeout_ms\fP
+milliseconds (or shorter if an internal timer indicates so). This is the other
+detail that makes this function different than \fIcurl_multi_wait(3)\fP.
This function is encouraged to be used instead of select(3) when using the
multi interface to allow applications to easier circumvent the common problem
@@ -85,31 +84,35 @@ Bit flag to curl_waitfd.events indicating the socket should poll on write
events such as the socket being clear to write without blocking.
.SH EXAMPLE
.nf
-CURL *easy_handle;
-CURLM *multi_handle;
+int main(void)
+{
+ CURL *easy_handle;
+ CURLM *multi_handle;
+ int still_running = 0;
-/* add the individual easy handle */
-curl_multi_add_handle(multi_handle, easy_handle);
+ /* add the individual easy handle */
+ curl_multi_add_handle(multi_handle, easy_handle);
-do {
- CURLMcode mc;
- int numfds;
+ do {
+ CURLMcode mc;
+ int numfds;
- mc = curl_multi_perform(multi_handle, &still_running);
+ mc = curl_multi_perform(multi_handle, &still_running);
- if(mc == CURLM_OK) {
- /* wait for activity or timeout */
- mc = curl_multi_poll(multi_handle, NULL, 0, 1000, &numfds);
- }
+ if(mc == CURLM_OK) {
+ /* wait for activity or timeout */
+ mc = curl_multi_poll(multi_handle, NULL, 0, 1000, &numfds);
+ }
- if(mc != CURLM_OK) {
- fprintf(stderr, "curl_multi failed, code %d.\\n", mc);
- break;
- }
+ if(mc != CURLM_OK) {
+ fprintf(stderr, "curl_multi failed, code %d.\\n", mc);
+ break;
+ }
-} while(still_running);
+ } while(still_running);
-curl_multi_remove_handle(multi_handle, easy_handle);
+ curl_multi_remove_handle(multi_handle, easy_handle);
+}
.fi
.SH AVAILABILITY
Added in 7.66.0.
@@ -117,5 +120,7 @@ Added in 7.66.0.
CURLMcode type, general libcurl multi interface error code. See
\fIlibcurl-errors(3)\fP
.SH "SEE ALSO"
-.BR curl_multi_fdset "(3), " curl_multi_perform "(3), "
-.BR curl_multi_wait "(3), " curl_multi_wakeup "(3)"
+.BR curl_multi_fdset (3),
+.BR curl_multi_perform (3),
+.BR curl_multi_wait (3),
+.BR curl_multi_wakeup (3)
diff --git a/docs/libcurl/curl_multi_remove_handle.3 b/docs/libcurl/curl_multi_remove_handle.3
index 3a873b995..383d6e65a 100644
--- a/docs/libcurl/curl_multi_remove_handle.3
+++ b/docs/libcurl/curl_multi_remove_handle.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_multi_remove_handle 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_multi_remove_handle 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_multi_remove_handle - remove an easy handle from a multi session
@@ -32,27 +32,40 @@ curl_multi_remove_handle - remove an easy handle from a multi session
CURLMcode curl_multi_remove_handle(CURLM *multi_handle, CURL *easy_handle);
.fi
.SH DESCRIPTION
-Removes a given \fIeasy_handle\fP from the \fImulti_handle\fP. This will make
-the specified easy handle be removed from this multi handle's control.
+Removes a given \fIeasy_handle\fP from the \fImulti_handle\fP. This makes the
+specified easy handle be removed from this multi handle's control.
When the easy handle has been removed from a multi stack, it is again
perfectly legal to invoke \fIcurl_easy_perform(3)\fP on this easy handle.
-Removing an easy handle while being used is perfectly legal and will
-effectively halt the transfer in progress involving that easy handle. All
-other easy handles and transfers will remain unaffected.
+Removing an easy handle while being in use is perfectly legal and effectively
+halts the transfer in progress involving that easy handle. All other easy
+handles and transfers remain unaffected.
It is fine to remove a handle at any time during a transfer, just not from
within any libcurl callback function.
+
+Removing an easy handle from the multi handle before the corresponding
+transfer is complete might cause libcurl to close the connection - if the
+state of it and the internal protocol handler deem it necessary. Otherwise
+libcurl keeps the connection alive in the connection pool associated with the
+multi handle, ready to get reused for a future transfer using this multi
+handle.
.SH EXAMPLE
.nf
-/* when an easy handle has completed, remove it */
-msg = curl_multi_info_read(multi_handle, &queued);
-if(msg) {
- if(msg->msg == CURLMSG_DONE) {
- /* a transfer ended */
- fprintf(stderr, "Transfer completed\\n");
- curl_multi_remove_handle(multi_handle, msg->easy_handle);
+int main(void)
+{
+ CURLM *multi = curl_multi_init();
+ int queued = 0;
+
+ /* when an easy handle has completed, remove it */
+ CURLMsg *msg = curl_multi_info_read(multi, &queued);
+ if(msg) {
+ if(msg->msg == CURLMSG_DONE) {
+ /* a transfer ended */
+ fprintf(stderr, "Transfer completed\\n");
+ curl_multi_remove_handle(multi, msg->easy_handle);
+ }
}
}
.fi
@@ -61,5 +74,6 @@ Added in 7.9.6
.SH RETURN VALUE
CURLMcode type, general libcurl multi interface error code.
.SH "SEE ALSO"
-.BR curl_multi_cleanup "(3)," curl_multi_init "(3), "
-.BR curl_multi_add_handle "(3) "
+.BR curl_multi_add_handle (3),
+.BR curl_multi_cleanup (3),
+.BR curl_multi_init (3)
diff --git a/docs/libcurl/curl_multi_setopt.3 b/docs/libcurl/curl_multi_setopt.3
index d4818550d..2306f8b8e 100644
--- a/docs/libcurl/curl_multi_setopt.3
+++ b/docs/libcurl/curl_multi_setopt.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_multi_setopt 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_multi_setopt 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_multi_setopt \- set options for a curl multi handle
@@ -29,17 +29,17 @@ curl_multi_setopt \- set options for a curl multi handle
.nf
#include <curl/curl.h>
-CURLMcode curl_multi_setopt(CURLM *multi_handle, CURLMoption option, param);
+CURLMcode curl_multi_setopt(CURLM *multi_handle, CURLMoption option, parameter);
.fi
.SH DESCRIPTION
\fIcurl_multi_setopt(3)\fP is used to tell a libcurl multi handle how to
behave. By using the appropriate options to \fIcurl_multi_setopt(3)\fP, you
can change libcurl's behavior when using that multi handle. All options are
-set with the \fIoption\fP followed by the parameter \fIparam\fP. That
-parameter can be a \fBlong\fP, a \fBfunction pointer\fP, an \fBobject
-pointer\fP or a \fBcurl_off_t\fP type, depending on what the specific option
-expects. Read this manual carefully as bad input values may cause libcurl to
-behave badly. You can only set one option in each function call.
+set with the \fIoption\fP followed by the \fIparameter\fP. That parameter can
+be a \fBlong\fP, a \fBfunction pointer\fP, an \fBobject pointer\fP or a
+\fBcurl_off_t\fP type, depending on what the specific option expects. Read
+this manual carefully as bad input values may cause libcurl to behave
+badly. You can only set one option in each function call.
.SH OPTIONS
.IP CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE
@@ -75,10 +75,17 @@ See \fICURLMOPT_TIMERDATA(3)\fP
.IP CURLMOPT_MAX_CONCURRENT_STREAMS
See \fICURLMOPT_MAX_CONCURRENT_STREAMS(3)\fP
.SH EXAMPLE
-.fi
- /* Limit the amount of simultaneous connections curl should allow: */
- curl_multi_setopt(handle, CURLMOPT_MAXCONNECTS, (long)MAX_PARALLEL);
.nf
+
+#define MAX_PARALLEL 45
+
+int main(void)
+{
+ CURLM *multi;
+ /* Limit the amount of simultaneous connections curl should allow: */
+ curl_multi_setopt(multi, CURLMOPT_MAXCONNECTS, (long)MAX_PARALLEL);
+}
+.fi
.SH AVAILABILITY
Added in 7.15.4
.SH RETURN VALUE
@@ -86,5 +93,7 @@ The standard CURLMcode for multi interface error codes. Note that it returns a
CURLM_UNKNOWN_OPTION if you try setting an option that this version of libcurl
does not know of.
.SH "SEE ALSO"
-.BR curl_multi_cleanup "(3), " curl_multi_init "(3), "
-.BR curl_multi_socket "(3), " curl_multi_info_read "(3)"
+.BR curl_multi_cleanup (3),
+.BR curl_multi_info_read (3),
+.BR curl_multi_init (3),
+.BR curl_multi_socket (3)
diff --git a/docs/libcurl/curl_multi_socket.3 b/docs/libcurl/curl_multi_socket.3
index c075e0f37..e511689b8 100644
--- a/docs/libcurl/curl_multi_socket.3
+++ b/docs/libcurl/curl_multi_socket.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_multi_socket 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_multi_socket 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_multi_socket \- reads/writes available data
@@ -38,9 +38,9 @@ CURLMcode curl_multi_socket_all(CURLM *multi_handle,
These functions are deprecated. Do not use. See
\fIcurl_multi_socket_action(3)\fP instead.
-At return, the integer \fBrunning_handles\fP points to will contain the number
-of still running easy handles within the multi handle. When this number
-reaches zero, all transfers are complete/done. Note that when you call
+At return, the integer \fBrunning_handles\fP points to contains the number of
+still running easy handles within the multi handle. When this number reaches
+zero, all transfers are complete/done. Note that when you call
\fIcurl_multi_socket_action(3)\fP on a specific socket and the counter
decreases by one, it DOES NOT necessarily mean that this exact socket/transfer
is the one that completed. Use \fIcurl_multi_info_read(3)\fP to figure out
@@ -54,7 +54,7 @@ update the status with changes since the previous time the callback was
called.
Get the timeout time by setting the \fICURLMOPT_TIMERFUNCTION(3)\fP option
-with \fIcurl_multi_setopt(3)\fP. Your application will then get called with
+with \fIcurl_multi_setopt(3)\fP. Your application then gets called with
information on how long to wait for socket actions at most before doing the
timeout action: call the \fIcurl_multi_socket_action(3)\fP function with the
\fBsockfd\fP argument set to CURL_SOCKET_TIMEOUT. You can also use the
@@ -71,10 +71,16 @@ just a single one by calling \fIcurl_multi_socket_all(3)\fP. Note that there
should not be any reason to use this function.
.SH EXAMPLE
.nf
-/* the event-library gets told when there activity on the socket 'fd',
- which we translate to a call to curl_multi_socket_action() */
-int running;
-rc = curl_multi_socket(multi_handle, fd, &running);
+int main(void)
+{
+ /* the event-library gets told when there activity on the socket 'fd',
+ which we translate to a call to curl_multi_socket_action() */
+ int running;
+ int rc;
+ int fd;
+ CURLM *multi;
+ rc = curl_multi_socket(multi, fd, &running);
+}
.fi
.SH AVAILABILITY
This function was added in libcurl 7.15.4, and is deemed stable since
@@ -88,6 +94,8 @@ CURLMcode type, general libcurl multi interface error code.
The return code is for the whole multi stack. Problems still might have
occurred on individual transfers even when one of these functions return OK.
.SH "SEE ALSO"
-.BR curl_multi_cleanup "(3), " curl_multi_init "(3), "
-.BR curl_multi_fdset "(3), " curl_multi_info_read "(3), "
-.BR "the hiperfifo.c example"
+.BR curl_multi_cleanup (3),
+.BR curl_multi_init (3),
+.BR curl_multi_fdset (3),
+.BR curl_multi_info_read (3),
+.BR the hiperfifo.c example
diff --git a/docs/libcurl/curl_multi_socket_action.3 b/docs/libcurl/curl_multi_socket_action.3
index 600c2cbd9..d81e3ca86 100644
--- a/docs/libcurl/curl_multi_socket_action.3
+++ b/docs/libcurl/curl_multi_socket_action.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_multi_socket_action 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_multi_socket_action 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_multi_socket_action \- reads/writes available data given an action
@@ -42,7 +42,7 @@ can be passed as an events bitmask \fBev_bitmask\fP by first setting
\fBev_bitmask\fP to 0, and then adding using bitwise OR (|) any combination of
events to be chosen from CURL_CSELECT_IN, CURL_CSELECT_OUT or
CURL_CSELECT_ERR. When the events on a socket are unknown, pass 0 instead, and
-libcurl will test the descriptor internally. It is also permissible to pass
+libcurl tests the descriptor internally. It is also permissible to pass
CURL_SOCKET_TIMEOUT to the \fBsockfd\fP parameter in order to initiate the
whole process or when a timeout occurs.
@@ -61,7 +61,7 @@ update the status with changes since the previous time the callback was
called.
Get the timeout time by setting the \fICURLMOPT_TIMERFUNCTION(3)\fP option
-with \fIcurl_multi_setopt(3)\fP. Your application will then get called with
+with \fIcurl_multi_setopt(3)\fP. Your application then gets called with
information on how long to wait for socket actions at most before doing the
timeout action: call the \fIcurl_multi_socket_action(3)\fP function with the
\fBsockfd\fP argument set to CURL_SOCKET_TIMEOUT. You can also use the
@@ -98,11 +98,18 @@ socket(s) that got action. If no activity is detected and the timeout expires,
call \fIcurl_multi_socket_action(3)\fP with \fICURL_SOCKET_TIMEOUT\fP.
.SH EXAMPLE
.nf
-/* the event-library gets told when there activity on the socket 'fd',
- which we translate to a call to curl_multi_socket_action() */
-int running;
-rc = curl_multi_socket_action(multi_handle, fd, EVENT,
- &running);
+int main(void)
+{
+ /* the event-library gets told when there activity on the socket 'fd',
+ which we translate to a call to curl_multi_socket_action() */
+ int running;
+ CURLM *multi; /* the stack we work with */
+ int fd; /* the descriptor that had action */
+ int bitmask; /* what activity that happened */
+ CURLMcode mc = curl_multi_socket_action(multi, fd, bitmask, &running);
+ if(mc)
+ printf("error: %s\\n", curl_multi_strerror(mc));
+}
.fi
.SH AVAILABILITY
This function was added in libcurl 7.15.4, and is deemed stable since 7.16.0.
@@ -110,6 +117,8 @@ This function was added in libcurl 7.15.4, and is deemed stable since 7.16.0.
CURLMcode type, general libcurl multi interface error code. See
\fIlibcurl-errors(3)\fP
.SH "SEE ALSO"
-.BR curl_multi_cleanup "(3), " curl_multi_init "(3), "
-.BR curl_multi_fdset "(3), " curl_multi_info_read "(3), "
-.BR "the hiperfifo.c example"
+.BR curl_multi_cleanup (3),
+.BR curl_multi_fdset (3),
+.BR curl_multi_info_read (3),
+.BR curl_multi_init (3),
+.BR the hiperfifo.c example
diff --git a/docs/libcurl/curl_multi_strerror.3 b/docs/libcurl/curl_multi_strerror.3
index 7a341be38..6f67b4f2d 100644
--- a/docs/libcurl/curl_multi_strerror.3
+++ b/docs/libcurl/curl_multi_strerror.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,29 +21,37 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_multi_strerror 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_multi_strerror 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_multi_strerror - return string describing error code
.SH SYNOPSIS
.nf
-.B #include <curl/curl.h>
-.BI "const char *curl_multi_strerror(CURLMcode " errornum ");"
+#include <curl/curl.h>
+
+const char *curl_multi_strerror(CURLMcode errornum);
+.fi
.SH DESCRIPTION
-The curl_multi_strerror() function returns a string describing the
-\fICURLMcode\fP error code passed in the argument \fIerrornum\fP.
+This function returns a string describing the \fICURLMcode\fP error code
+passed in the argument \fIerrornum\fP.
.SH EXAMPLE
.nf
-int still_running;
+int main(void)
+{
+ int still_running;
+ CURLM *multi = curl_multi_init();
-CURLMcode mc = curl_multi_perform(multi_handle, &still_running);
-if(mc)
- printf("error: %s\\n", curl_multi_strerror(mc));
+ CURLMcode mc = curl_multi_perform(multi, &still_running);
+ if(mc)
+ printf("error: %s\\n", curl_multi_strerror(mc));
+}
.fi
.SH AVAILABILITY
This function was added in libcurl 7.12.0
.SH RETURN VALUE
A pointer to a null-terminated string.
.SH "SEE ALSO"
-.BR libcurl-errors "(3), " curl_easy_strerror "(3), "
-.BR curl_share_strerror "(3), " curl_url_strerror "(3)"
+.BR curl_easy_strerror (3),
+.BR curl_share_strerror (3),
+.BR curl_url_strerror (3),
+.BR libcurl-errors (3)
diff --git a/docs/libcurl/curl_multi_timeout.3 b/docs/libcurl/curl_multi_timeout.3
index be04c38a6..f3a2d94d3 100644
--- a/docs/libcurl/curl_multi_timeout.3
+++ b/docs/libcurl/curl_multi_timeout.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_multi_timeout 3 "July 14, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_multi_timeout 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_multi_timeout \- how long to wait for action before proceeding
@@ -44,7 +44,7 @@ the simpler and older multi interface approach.
The timeout value returned in the long \fBtimeout\fP points to, is in number
of milliseconds at this moment. If 0, it means you should proceed immediately
-without waiting for anything. If it returns -1, there's no timeout at all set.
+without waiting for anything. If it returns -1, there is no timeout at all set.
An application that uses the multi_socket API SHOULD NOT use this function,
but SHOULD instead use the \fICURLMOPT_TIMERFUNCTION(3)\fP option for proper
@@ -52,22 +52,30 @@ and desired behavior.
Note: if libcurl returns a -1 timeout here, it just means that libcurl
currently has no stored timeout value. You must not wait too long (more than a
-few seconds perhaps) before you call curl_multi_perform() again.
+few seconds perhaps) before you call \fIcurl_multi_perform(3)\fP again.
.SH EXAMPLE
.nf
-struct timeval timeout;
-long timeo;
+int main(void)
+{
+ struct timeval timeout;
+ long timeo;
+ fd_set fdread;
+ fd_set fdwrite;
+ fd_set fdexcep;
+ int maxfd;
+ CURLM *multi = curl_multi_init();
-curl_multi_timeout(multi_handle, &timeo);
-if(timeo < 0)
- /* no set timeout, use a default */
- timeo = 980;
+ curl_multi_timeout(multi, &timeo);
+ if(timeo < 0)
+ /* no set timeout, use a default */
+ timeo = 980;
-timeout.tv_sec = timeo / 1000;
-timeout.tv_usec = (timeo % 1000) * 1000;
+ timeout.tv_sec = timeo / 1000;
+ timeout.tv_usec = (timeo % 1000) * 1000;
-/* wait for activities no longer than the set timeout */
-select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
+ /* wait for activities no longer than the set timeout */
+ select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &timeout);
+}
.fi
.SH TYPICAL USAGE
Call \fIcurl_multi_timeout(3)\fP, then wait for action on the sockets. Figure
@@ -80,5 +88,7 @@ This function was added in libcurl 7.15.4.
.SH RETURN VALUE
The standard CURLMcode for multi interface error codes.
.SH "SEE ALSO"
-.BR curl_multi_fdset "(3), " curl_multi_info_read "(3), "
-.BR curl_multi_socket "(3), " curl_multi_setopt "(3) "
+.BR curl_multi_fdset (3),
+.BR curl_multi_info_read (3),
+.BR curl_multi_setopt (3),
+.BR curl_multi_socket (3)
diff --git a/docs/libcurl/curl_multi_wait.3 b/docs/libcurl/curl_multi_wait.3
index d48711a84..15f2ba717 100644
--- a/docs/libcurl/curl_multi_wait.3
+++ b/docs/libcurl/curl_multi_wait.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_multi_wait 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_multi_wait 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_multi_wait - polls on all easy handles in a multi handle
@@ -34,27 +34,27 @@ CURLMcode curl_multi_wait(CURLM *multi_handle,
unsigned int extra_nfds,
int timeout_ms,
int *numfds);
-.ad
+.fi
.SH DESCRIPTION
\fIcurl_multi_wait(3)\fP polls all file descriptors used by the curl easy
-handles contained in the given multi handle set. It will block until activity
-is detected on at least one of the handles or \fItimeout_ms\fP has passed.
+handles contained in the given multi handle set. It blocks until activity is
+detected on at least one of the handles or \fItimeout_ms\fP has passed.
Alternatively, if the multi handle has a pending internal timeout that has a
-shorter expiry time than \fItimeout_ms\fP, that shorter time will be used
+shorter expiry time than \fItimeout_ms\fP, that shorter time is be used
instead to make sure timeout accuracy is reasonably kept.
The calling application may pass additional \fIcurl_waitfd\fP structures which
are similar to \fIpoll(2)\fP's \fIpollfd\fP structure to be waited on in the
same call.
-On completion, if \fInumfds\fP is non-NULL, it will be populated with the
-total number of file descriptors on which interesting events occurred. This
-number can include both libcurl internal descriptors as well as descriptors
-provided in \fIextra_fds\fP.
+On completion, if \fInumfds\fP is non-NULL, it gets populated with the total
+number of file descriptors on which interesting events occurred. This number
+can include both libcurl internal descriptors as well as descriptors provided
+in \fIextra_fds\fP.
If no extra file descriptors are provided and libcurl has no file descriptor
-to offer to wait for, this function will return immediately. (Try
-\fIcurl_multi_poll(3)\fP instead if you rather avoid this behavior.)
+to offer to wait for, this function returns immediately. (Consider using
+\fIcurl_multi_poll(3)\fP to avoid this behavior.)
This function is encouraged to be used instead of select(3) when using the
multi interface to allow applications to easier circumvent the common problem
@@ -78,45 +78,35 @@ Bit flag to \fIcurl_waitfd.events\fP indicating the socket should poll on
write events such as the socket being clear to write without blocking.
.SH EXAMPLE
.nf
-CURL *easy_handle;
-CURLM *multi_handle;
-
-/* add the individual easy handle */
-curl_multi_add_handle(multi_handle, easy_handle);
+int main(void)
+{
+ CURL *easy;
+ CURLM *multi = curl_multi_init();
+ int still_running;
-do {
- CURLMcode mc;
- int numfds;
+ /* add the individual easy handle */
+ curl_multi_add_handle(multi, easy);
- mc = curl_multi_perform(multi_handle, &still_running);
+ do {
+ CURLMcode mc;
+ int numfds;
- if(mc == CURLM_OK ) {
- /* wait for activity, timeout or "nothing" */
- mc = curl_multi_wait(multi_handle, NULL, 0, 1000, &numfds);
- }
+ mc = curl_multi_perform(multi, &still_running);
- if(mc != CURLM_OK) {
- fprintf(stderr, "curl_multi failed, code %d.\\n", mc);
- break;
- }
-
- /* 'numfds' being zero means either a timeout or no file descriptors to
- wait for. Try timeout on first occurrence, then assume no file
- descriptors and no file descriptors to wait for means wait for 100
- milliseconds. */
+ if(mc == CURLM_OK) {
+ /* wait for activity, timeout or "nothing" */
+ mc = curl_multi_wait(multi, NULL, 0, 1000, &numfds);
+ }
- if(!numfds) {
- repeats++; /* count number of repeated zero numfds */
- if(repeats > 1) {
- WAITMS(100); /* sleep 100 milliseconds */
+ if(mc != CURLM_OK) {
+ fprintf(stderr, "curl_multi failed, code %d.\\n", mc);
+ break;
}
- }
- else
- repeats = 0;
-} while(still_running);
+ } while(still_running);
-curl_multi_remove_handle(multi_handle, easy_handle);
+ curl_multi_remove_handle(multi, easy);
+}
.fi
.SH AVAILABILITY
This function was added in libcurl 7.28.0.
@@ -124,4 +114,6 @@ This function was added in libcurl 7.28.0.
CURLMcode type, general libcurl multi interface error code. See
\fIlibcurl-errors(3)\fP
.SH "SEE ALSO"
-.BR curl_multi_fdset "(3), " curl_multi_perform "(3)", curl_multi_poll "(3) ",
+.BR curl_multi_fdset (3),
+.BR curl_multi_perform (3),
+.BR curl_multi_poll (3)
diff --git a/docs/libcurl/curl_multi_wakeup.3 b/docs/libcurl/curl_multi_wakeup.3
index 929710cc3..0c0b1354f 100644
--- a/docs/libcurl/curl_multi_wakeup.3
+++ b/docs/libcurl/curl_multi_wakeup.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_multi_wakeup 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_multi_wakeup 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_multi_wakeup - wakes up a sleeping curl_multi_poll call
@@ -32,59 +32,66 @@ curl_multi_wakeup - wakes up a sleeping curl_multi_poll call
CURLMcode curl_multi_wakeup(CURLM *multi_handle);
.fi
.SH DESCRIPTION
-This function can be called from any thread and it wakes up a
-sleeping \fIcurl_multi_poll(3)\fP call that is currently (or will be)
-waiting for activity or a timeout.
+This function can be called from any thread and it wakes up a sleeping
+\fIcurl_multi_poll(3)\fP call that is currently (or is about to be) waiting
+for activity or a timeout.
-If the function is called when there is no \fIcurl_multi_poll(3)\fP call,
-it will cause the next call to return immediately.
+If the function is called when there is no \fIcurl_multi_poll(3)\fP call, it
+causes the next call to return immediately.
-Calling this function only guarantees to wake up the current (or the next
-if there is no current) \fIcurl_multi_poll(3)\fP call, which means it is
-possible that multiple calls to this function will wake up the same waiting
-operation.
+Calling this function only guarantees to wake up the current (or the next if
+there is no current) \fIcurl_multi_poll(3)\fP call, which means it is possible
+that multiple calls to this function wake up the same waiting operation.
This function has no effect on \fIcurl_multi_wait(3)\fP calls.
.SH EXAMPLE
.nf
-CURL *easy_handle;
-CURLM *multi_handle;
+extern int time_to_die(void);
+extern int set_something_to_signal_thread_1_to_exit(void);
+extern int decide_to_stop_thread1();
-/* add the individual easy handle */
-curl_multi_add_handle(multi_handle, easy_handle);
+int main(void)
+{
+ CURL *easy;
+ CURLM *multi;
+ int still_running;
-/* this is thread 1 */
-do {
- CURLMcode mc;
- int numfds;
+ /* add the individual easy handle */
+ curl_multi_add_handle(multi, easy);
- mc = curl_multi_perform(multi_handle, &still_running);
+ /* this is thread 1 */
+ do {
+ CURLMcode mc;
+ int numfds;
- if(mc == CURLM_OK) {
- /* wait for activity, timeout or wakeup */
- mc = curl_multi_poll(multi_handle, NULL, 0, 10000, &numfds);
- }
+ mc = curl_multi_perform(multi, &still_running);
- if(time_to_die())
- exit(1);
+ if(mc == CURLM_OK) {
+ /* wait for activity, timeout or wakeup */
+ mc = curl_multi_poll(multi, NULL, 0, 10000, &numfds);
+ }
-} while(still_running);
+ if(time_to_die())
+ return 1;
-curl_multi_remove_handle(multi_handle, easy_handle);
+ } while(still_running);
-/* this is thread 2 */
+ curl_multi_remove_handle(multi, easy);
-if(something makes us decide to stop thread 1) {
+ /* this is thread 2 */
- set_something_to_signal_thread_1_to_exit();
+ if(decide_to_stop_thread1()) {
- curl_multi_wakeup(multi_handle);
-}
+ set_something_to_signal_thread_1_to_exit();
+ curl_multi_wakeup(multi);
+ }
+}
.fi
.SH AVAILABILITY
Added in 7.68.0
.SH RETURN VALUE
CURLMcode type, general libcurl multi interface error code.
.SH "SEE ALSO"
-.BR curl_multi_poll "(3), " curl_multi_wait "(3)"
+.BR curl_multi_poll (3),
+.BR curl_multi_wait (3)
diff --git a/docs/libcurl/curl_pushheader_byname.3 b/docs/libcurl/curl_pushheader_byname.3
new file mode 100644
index 000000000..76af69c75
--- /dev/null
+++ b/docs/libcurl/curl_pushheader_byname.3
@@ -0,0 +1,89 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed 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
+.\" *
+.\" **************************************************************************
+.TH curl_pushheader_byname 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
+
+.SH NAME
+curl_pushheader_byname - get a push header by name
+.SH SYNOPSIS
+.nf
+#include <curl/curl.h>
+
+char *curl_pushheader_byname(struct curl_pushheaders *h, const char *name);
+.fi
+.SH DESCRIPTION
+This is a function that is only functional within a
+\fICURLMOPT_PUSHFUNCTION(3)\fP callback. It makes no sense to try to use it
+elsewhere and it has no function then.
+
+It returns the value for the given header field name (or NULL) for the
+incoming server push request. This is a shortcut so that the application does
+not have to loop through all headers to find the one it is interested in. The
+data this function points to is freed when this callback returns. If more than
+one header field use the same name, this returns only the first one.
+
+.SH EXAMPLE
+.nf
+#include <string.h> /* for strncmp */
+
+static int push_cb(CURL *parent,
+ CURL *easy,
+ size_t num_headers,
+ struct curl_pushheaders *headers,
+ void *clientp)
+{
+ char *headp;
+ int *transfers = (int *)clientp;
+ FILE *out;
+ headp = curl_pushheader_byname(headers, ":path");
+ if(headp && !strncmp(headp, "/push-", 6)) {
+ fprintf(stderr, "The PATH is %s\\n", headp);
+
+ /* save the push here */
+ out = fopen("pushed-stream", "wb");
+
+ /* write to this file */
+ curl_easy_setopt(easy, CURLOPT_WRITEDATA, out);
+
+ (*transfers)++; /* one more */
+
+ return CURL_PUSH_OK;
+ }
+ return CURL_PUSH_DENY;
+}
+
+int main(void)
+{
+ int counter;
+ CURLM *multi = curl_multi_init();
+ curl_multi_setopt(multi, CURLMOPT_PUSHFUNCTION, push_cb);
+ curl_multi_setopt(multi, CURLMOPT_PUSHDATA, &counter);
+}
+.fi
+.SH AVAILABILITY
+Added in 7.44.0
+.SH RETURN VALUE
+Returns a pointer to the header field content or NULL.
+.SH "SEE ALSO"
+.BR CURLMOPT_PUSHFUNCTION (3),
+.BR curl_pushheader_bynum (3)
diff --git a/docs/libcurl/curl_pushheader_bynum.3 b/docs/libcurl/curl_pushheader_bynum.3
new file mode 100644
index 000000000..4b0862497
--- /dev/null
+++ b/docs/libcurl/curl_pushheader_bynum.3
@@ -0,0 +1,76 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed 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
+.\" *
+.\" **************************************************************************
+.TH curl_pushheader_bynum 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
+
+.SH NAME
+curl_pushheader_bynum - get a push header by index
+.SH SYNOPSIS
+.nf
+#include <curl/curl.h>
+
+char *curl_pushheader_bynum(struct curl_pushheaders *h, size_t num);
+.fi
+.SH DESCRIPTION
+This is a function that is only functional within a
+\fICURLMOPT_PUSHFUNCTION(3)\fP callback. It makes no sense to try to use it
+elsewhere and it has no function then.
+
+It returns the value for the header field at the given index \fBnum\fP, for
+the incoming server push request or NULL. The data pointed to is freed by
+libcurl when this callback returns. The returned pointer points to a
+"name:value" string that gets freed when this callback returns.
+
+.SH EXAMPLE
+.nf
+/* output all the incoming push request headers */
+static int push_cb(CURL *parent,
+ CURL *easy,
+ size_t num_headers,
+ struct curl_pushheaders *headers,
+ void *clientp)
+{
+ int i = 0;
+ char *field;
+ do {
+ field = curl_pushheader_bynum(headers, i);
+ if(field)
+ fprintf(stderr, "Push header: %s\\n", field);
+ i++;
+ } while(field);
+ return CURL_PUSH_OK; /* permission granted */
+}
+
+int main(void)
+{
+ CURLM *multi = curl_multi_init();
+ curl_multi_setopt(multi, CURLMOPT_PUSHFUNCTION, push_cb);
+}
+.fi
+.SH AVAILABILITY
+Added in 7.44.0
+.SH RETURN VALUE
+Returns a pointer to the header field content or NULL.
+.SH "SEE ALSO"
+.BR CURLMOPT_PUSHFUNCTION (3),
+.BR curl_pushheader_byname (3)
diff --git a/docs/libcurl/curl_share_cleanup.3 b/docs/libcurl/curl_share_cleanup.3
index 9d67aea4a..75deeebf9 100644
--- a/docs/libcurl/curl_share_cleanup.3
+++ b/docs/libcurl/curl_share_cleanup.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_share_cleanup 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_share_cleanup 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_share_cleanup - Clean up a shared object
@@ -35,22 +35,26 @@ CURLSHcode curl_share_cleanup(CURLSH *share_handle);
This function deletes a shared object. The share handle cannot be used anymore
when this function has been called.
-Passing in a NULL pointer in \fIshare_handle\fP will make this function return
+Passing in a NULL pointer in \fIshare_handle\fP makes this function return
immediately with no action.
.SH EXAMPLE
.nf
+int main(void)
+{
CURLSHcode sh;
- share = curl_share_init();
+ CURLSH *share = curl_share_init();
sh = curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_CONNECT);
/* use the share, then ... */
curl_share_cleanup(share);
+}
.fi
.SH AVAILABILITY
Added in 7.10
.SH RETURN VALUE
CURLSHE_OK (zero) means that the option was set properly, non-zero means an
-error occurred as \fI<curl/curl.h>\fP defines. See the \fIlibcurl-errors.3\fP
+error occurred as \fI<curl/curl.h>\fP defines. See the \fIlibcurl-errors(3)\fP
man page for the full list with descriptions. If an error occurs, then the
-share object will not be deleted.
+share object is not deleted.
.SH "SEE ALSO"
-.BR curl_share_init "(3), " curl_share_setopt "(3)"
+.BR curl_share_init (3),
+.BR curl_share_setopt (3)
diff --git a/docs/libcurl/curl_share_init.3 b/docs/libcurl/curl_share_init.3
index 656c81b7b..86c19e1eb 100644
--- a/docs/libcurl/curl_share_init.3
+++ b/docs/libcurl/curl_share_init.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_share_init 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_share_init 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_share_init - Create a shared object
@@ -43,11 +43,14 @@ This \fIshare handle\fP is what you pass to curl using the
specific curl handle use the data in this share.
.SH EXAMPLE
.nf
+int main(void)
+{
CURLSHcode sh;
- share = curl_share_init();
+ CURLSH *share = curl_share_init();
sh = curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_CONNECT);
if(sh)
printf("Error: %s\\n", curl_share_strerror(sh));
+}
.fi
.SH AVAILABILITY
Added in 7.10
@@ -55,4 +58,5 @@ Added in 7.10
If this function returns NULL, something went wrong (out of memory, etc.)
and therefore the share object was not created.
.SH "SEE ALSO"
-.BR curl_share_cleanup "(3), " curl_share_setopt "(3)"
+.BR curl_share_cleanup (3),
+.BR curl_share_setopt (3)
diff --git a/docs/libcurl/curl_share_setopt.3 b/docs/libcurl/curl_share_setopt.3
index 711fcd17a..1497f55fa 100644
--- a/docs/libcurl/curl_share_setopt.3
+++ b/docs/libcurl/curl_share_setopt.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_share_setopt 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_share_setopt 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_share_setopt - Set options for a shared object
@@ -46,17 +46,21 @@ See \fICURLSHOPT_UNSHARE(3)\fP.
See \fICURLSHOPT_USERDATA(3)\fP.
.SH EXAMPLE
.nf
+int main(void)
+{
CURLSHcode sh;
- share = curl_share_init();
+ CURLSH *share = curl_share_init();
sh = curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_CONNECT);
if(sh)
printf("Error: %s\\n", curl_share_strerror(sh));
+}
.fi
.SH AVAILABILITY
Added in 7.10
.SH RETURN VALUE
CURLSHE_OK (zero) means that the option was set properly, non-zero means an
-error occurred as \fI<curl/curl.h>\fP defines. See the \fIlibcurl-errors.3\fP
+error occurred as \fI<curl/curl.h>\fP defines. See the \fIlibcurl-errors(3)\fP
man page for the full list with descriptions.
.SH "SEE ALSO"
-.BR curl_share_cleanup "(3), " curl_share_init "(3)"
+.BR curl_share_cleanup (3),
+.BR curl_share_init (3)
diff --git a/docs/libcurl/curl_share_strerror.3 b/docs/libcurl/curl_share_strerror.3
index 83850b044..76fd4d732 100644
--- a/docs/libcurl/curl_share_strerror.3
+++ b/docs/libcurl/curl_share_strerror.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,29 +21,36 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_share_strerror 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_share_strerror 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_share_strerror - return string describing error code
.SH SYNOPSIS
.nf
-.B #include <curl/curl.h>
-.BI "const char *curl_share_strerror(CURLSHcode " errornum ");"
+#include <curl/curl.h>
+
+const char *curl_share_strerror(CURLSHcode errornum);
+.fi
.SH DESCRIPTION
The \fIcurl_share_strerror(3)\fP function returns a string describing the
\fICURLSHcode\fP error code passed in the argument \fIerrornum\fP.
.SH EXAMPLE
.nf
+int main(void)
+{
CURLSHcode sh;
- share = curl_share_init();
+ CURLSH *share = curl_share_init();
sh = curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_CONNECT);
if(sh)
printf("Error: %s\\n", curl_share_strerror(sh));
+}
.fi
.SH AVAILABILITY
This function was added in libcurl 7.12.0
.SH RETURN VALUE
A pointer to a null-terminated string.
.SH "SEE ALSO"
-.BR libcurl-errors "(3), " curl_multi_strerror "(3), "
-.BR curl_easy_strerror "(3), " curl_url_strerror "(3)"
+.BR curl_easy_strerror (3),
+.BR curl_multi_strerror (3),
+.BR curl_url_strerror (3),
+.BR libcurl-errors (3)
diff --git a/docs/libcurl/curl_slist_append.3 b/docs/libcurl/curl_slist_append.3
index e30019f34..16616d067 100644
--- a/docs/libcurl/curl_slist_append.3
+++ b/docs/libcurl/curl_slist_append.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_slist_append 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_slist_append 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_slist_append - add a string to an slist
@@ -43,29 +43,32 @@ The list should be freed again (after usage) with
\fIcurl_slist_free_all(3)\fP.
.SH EXAMPLE
.nf
-CURL *handle;
-struct curl_slist *slist=NULL;
-struct curl_slist *temp=NULL;
+int main(void)
+{
+ CURL *handle;
+ struct curl_slist *slist = NULL;
+ struct curl_slist *temp = NULL;
-slist = curl_slist_append(slist, "pragma:");
+ slist = curl_slist_append(slist, "pragma:");
-if (slist == NULL)
- return -1;
+ if(!slist)
+ return -1;
-temp = curl_slist_append(slist, "Accept:")
+ temp = curl_slist_append(slist, "Accept:");
-if (temp == NULL) {
- curl_slist_free_all(slist);
- return -1;
-}
+ if(!temp) {
+ curl_slist_free_all(slist);
+ return -1;
+ }
-slist = temp;
+ slist = temp;
-curl_easy_setopt(handle, CURLOPT_HTTPHEADER, slist);
+ curl_easy_setopt(handle, CURLOPT_HTTPHEADER, slist);
-curl_easy_perform(handle);
+ curl_easy_perform(handle);
-curl_slist_free_all(slist); /* free the list again */
+ curl_slist_free_all(slist); /* free the list again */
+}
.fi
.SH AVAILABILITY
Always
@@ -75,4 +78,4 @@ pointer is returned. To avoid overwriting an existing non-empty list on
failure, the new list should be returned to a temporary variable which can
be tested for NULL before updating the original list pointer.
.SH "SEE ALSO"
-.BR curl_slist_free_all "(3), "
+.BR curl_slist_free_all (3)
diff --git a/docs/libcurl/curl_slist_free_all.3 b/docs/libcurl/curl_slist_free_all.3
index f1ac4dc15..c9ae48dae 100644
--- a/docs/libcurl/curl_slist_free_all.3
+++ b/docs/libcurl/curl_slist_free_all.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_slist_free_all 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_slist_free_all 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_slist_free_all - free an entire curl_slist list
@@ -35,27 +35,30 @@ void curl_slist_free_all(struct curl_slist *list);
curl_slist_free_all() removes all traces of a previously built curl_slist
linked list.
-Passing in a NULL pointer in \fIlist\fP will make this function return
-immediately with no action.
+Passing in a NULL pointer in \fIlist\fP makes this function return immediately
+with no action.
.SH EXAMPLE
.nf
-CURL *handle;
-struct curl_slist *slist=NULL;
+int main(void)
+{
+ CURL *handle;
+ struct curl_slist *slist = NULL;
-slist = curl_slist_append(slist, "X-libcurl: coolness");
+ slist = curl_slist_append(slist, "X-libcurl: coolness");
-if (slist == NULL)
- return -1;
+ if(!slist)
+ return -1;
-curl_easy_setopt(handle, CURLOPT_HTTPHEADER, slist);
+ curl_easy_setopt(handle, CURLOPT_HTTPHEADER, slist);
-curl_easy_perform(handle);
+ curl_easy_perform(handle);
-curl_slist_free_all(slist); /* free the list again */
+ curl_slist_free_all(slist); /* free the list again */
+}
.fi
.SH AVAILABILITY
Always
.SH RETURN VALUE
Nothing.
.SH "SEE ALSO"
-.BR curl_slist_append "(3), "
+.BR curl_slist_append (3)
diff --git a/docs/libcurl/curl_strequal.3 b/docs/libcurl/curl_strequal.3
index 78d11252a..d9c4e0d75 100644
--- a/docs/libcurl/curl_strequal.3
+++ b/docs/libcurl/curl_strequal.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_strequal 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_strequal 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_strequal, curl_strnequal - case insensitive string comparisons
@@ -29,8 +29,8 @@ curl_strequal, curl_strnequal - case insensitive string comparisons
.nf
#include <curl/curl.h>
-int curl_strequal(char *str1, char *str2);
-int curl_strnequal(char *str1, char *str2, size_t length);
+int curl_strequal(const char *str1, const char *str2);
+int curl_strnequal(const char *str1, const char *str2, size_t length);
.fi
.SH DESCRIPTION
The
@@ -47,10 +47,14 @@ strings in a truly portable manner. There are no standard portable case
insensitive string comparison functions. These two work on all platforms.
.SH EXAMPLE
.nf
-if(curl_strequal(name, input))
- printf("Name and input matches\\n");
-if(curl_strnequal(name, input, 5))
- printf("Name and input matches in the 5 first bytes\\n");
+int main(int argc, char **argv)
+{
+ const char *name = "compare";
+ if(curl_strequal(name, argv[1]))
+ printf("Name and input matches\\n");
+ if(curl_strnequal(name, argv[1], 5))
+ printf("Name and input matches in the 5 first bytes\\n");
+}
.fi
.SH AVAILABILITY
Always
diff --git a/docs/libcurl/curl_unescape.3 b/docs/libcurl/curl_unescape.3
index 9133b7fac..a30113290 100644
--- a/docs/libcurl/curl_unescape.3
+++ b/docs/libcurl/curl_unescape.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_unescape 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_unescape 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_unescape - URL decodes the given string
@@ -29,38 +29,43 @@ curl_unescape - URL decodes the given string
.nf
#include <curl/curl.h>
-char *curl_unescape( const char *url, int length);
+char *curl_unescape(const char *input, int length);
.fi
.SH DESCRIPTION
Obsolete function. Use \fIcurl_easy_unescape(3)\fP instead!
-This function will convert the given URL encoded input string to a "plain
-string" and return that as a new allocated string. All input characters that
-are URL encoded (%XX where XX is a two-digit hexadecimal number) will be
-converted to their plain text versions.
+This function converts the URL encoded string \fBinput\fP to a "plain string"
+and return that as a new allocated string. All input characters that are URL
+encoded (%XX where XX is a two-digit hexadecimal number) are converted to
+their plain text versions.
-If the 'length' argument is set to 0, \fIcurl_unescape(3)\fP will use strlen()
-on the input \fBurl\fP string to find out the size.
+If the \fBlength\fP argument is set to 0, \fIcurl_unescape(3)\fP calls
+strlen() on \fBinput\fP to find out the size.
You must \fIcurl_free(3)\fP the returned string when you are done with it.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- int decodelen;
- char *decoded = curl_unescape("%63%75%72%6c", 12, &decodelen);
- if(decoded) {
- /* do not assume printf() works on the decoded data! */
- printf("Decoded: ");
- /* ... */
- curl_free(decoded);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ char *decoded = curl_unescape("%63%75%72%6c", 12);
+ if(decoded) {
+ /* do not assume printf() works on the decoded data! */
+ printf("Decoded: ");
+ /* ... */
+ curl_free(decoded);
+ }
}
}
.fi
.SH AVAILABILITY
-Since 7.15.4, \fIcurl_easy_unescape(3)\fP should be used. This function will
+Since 7.15.4, \fIcurl_easy_unescape(3)\fP should be used. This function might
be removed in a future release.
.SH RETURN VALUE
A pointer to a null-terminated string or NULL if it failed.
.SH "SEE ALSO"
-.BR curl_easy_escape "(3)," curl_easy_unescape "(3)," curl_free "(3)," RFC 2396
+.BR curl_easy_escape (3),
+.BR curl_easy_unescape (3),
+.BR curl_free (3),
+.BR RFC 2396
diff --git a/docs/libcurl/curl_url.3 b/docs/libcurl/curl_url.3
index e423233e7..7814e4297 100644
--- a/docs/libcurl/curl_url.3
+++ b/docs/libcurl/curl_url.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_url 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_url 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_url - returns a new URL handle
@@ -32,10 +32,17 @@ curl_url - returns a new URL handle
CURLU *curl_url();
.fi
.SH DESCRIPTION
-This function will allocates and returns a pointer to a fresh \fICURLU\fP
-handle, to be used for further use of the URL API.
+This function allocates a URL object and returns a \fICURLU\fP handle for it,
+to be used as input to all other URL API functions.
+
+This is a handle to a URL object that holds or can hold URL components for a
+single URL. When the object is first created, there is of course no components
+stored. They are then set in the object with the \fIcurl_url_set(3)\fP
+function.
.SH EXAMPLE
.nf
+int main(void)
+{
CURLUcode rc;
CURLU *url = curl_url();
rc = curl_url_set(url, CURLUPART_URL, "https://example.com", 0);
@@ -48,11 +55,16 @@ handle, to be used for further use of the URL API.
}
curl_url_cleanup(url);
}
+}
.fi
.SH AVAILABILITY
Added in 7.62.0
.SH RETURN VALUE
Returns a \fBCURLU *\fP if successful, or NULL if out of memory.
.SH "SEE ALSO"
-.BR curl_url_cleanup "(3), " curl_url_get "(3), " curl_url_set "(3), "
-.BR curl_url_dup "(3), " curl_url_strerror "(3), " CURLOPT_CURLU "(3)"
+.BR curl_url_cleanup (3),
+.BR curl_url_dup (3),
+.BR curl_url_get (3),
+.BR curl_url_set (3),
+.BR curl_url_strerror (3),
+.BR CURLOPT_CURLU (3)
diff --git a/docs/libcurl/curl_url_cleanup.3 b/docs/libcurl/curl_url_cleanup.3
index ab6353439..b6f4ff257 100644
--- a/docs/libcurl/curl_url_cleanup.3
+++ b/docs/libcurl/curl_url_cleanup.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_url_cleanup 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_url_cleanup 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_url_cleanup - free the URL handle
@@ -33,16 +33,25 @@ void curl_url_cleanup(CURLU *handle);
.fi
.SH DESCRIPTION
Frees all the resources associated with the given \fICURLU\fP handle!
+
+Passing in a NULL pointer in \fIhandle\fP makes this function return
+immediately with no action.
.SH EXAMPLE
.nf
+int main(void)
+{
CURLU *url = curl_url();
curl_url_set(url, CURLUPART_URL, "https://example.com", 0);
curl_url_cleanup(url);
+}
.fi
.SH AVAILABILITY
Added in 7.62.0
.SH RETURN VALUE
none
.SH "SEE ALSO"
-.BR curl_url_dup "(3), " curl_url "(3), " curl_url_set "(3), "
-.BR curl_url_get "(3), " CURLOPT_CURLU "(3), "
+.BR curl_url_dup (3),
+.BR curl_url (3),
+.BR curl_url_set (3),
+.BR curl_url_get (3),
+.BR CURLOPT_CURLU (3)
diff --git a/docs/libcurl/curl_url_dup.3 b/docs/libcurl/curl_url_dup.3
index 5fcfa52da..6189bdb46 100644
--- a/docs/libcurl/curl_url_dup.3
+++ b/docs/libcurl/curl_url_dup.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_url_dup 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_url_dup 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_url_dup - duplicate a URL handle
@@ -29,14 +29,16 @@ curl_url_dup - duplicate a URL handle
.nf
#include <curl/curl.h>
-CURLU *curl_url_dup(CURLU *inhandle);
+CURLU *curl_url_dup(const CURLU *inhandle);
.fi
.SH DESCRIPTION
-Duplicates a given \fICURLU\fP \fIinhandle\fP and all its contents and returns
-a pointer to a new \fICURLU\fP handle. The new handle also needs to be freed
-with \fIcurl_url_cleanup(3)\fP.
+Duplicates the URL object the input \fICURLU\fP \fIinhandle\fP identifies and
+returns a pointer to the copy as a new \fICURLU\fP handle. The new handle also
+needs to be freed with \fIcurl_url_cleanup(3)\fP.
.SH EXAMPLE
.nf
+int main(void)
+{
CURLUcode rc;
CURLU *url = curl_url();
CURLU *url2;
@@ -46,11 +48,15 @@ with \fIcurl_url_cleanup(3)\fP.
curl_url_cleanup(url2);
}
curl_url_cleanup(url);
+}
.fi
.SH AVAILABILITY
Added in 7.62.0
.SH RETURN VALUE
Returns a new handle or NULL if out of memory.
.SH "SEE ALSO"
-.BR curl_url_cleanup "(3), " curl_url "(3), " curl_url_set "(3), "
-.BR curl_url_get "(3), " CURLOPT_CURLU "(3), "
+.BR curl_url (3),
+.BR curl_url_cleanup (3),
+.BR curl_url_get (3),
+.BR curl_url_set (3),
+.BR CURLOPT_CURLU (3)
diff --git a/docs/libcurl/curl_url_get.3 b/docs/libcurl/curl_url_get.3
index f3c9c3d53..01c74f232 100644
--- a/docs/libcurl/curl_url_get.3
+++ b/docs/libcurl/curl_url_get.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_url_get 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_url_get 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_url_get - extract a part from a URL
@@ -29,87 +29,125 @@ curl_url_get - extract a part from a URL
.nf
#include <curl/curl.h>
-CURLUcode curl_url_get(CURLU *url,
- CURLUPart what,
- char **part,
- unsigned int flags)
+CURLUcode curl_url_get(const CURLU *url,
+ CURLUPart part,
+ char **content,
+ unsigned int flags);
.fi
.SH DESCRIPTION
-Given the \fIurl\fP handle of an already parsed URL, this function lets the
-user extract individual pieces from it.
+Given a \fIurl\fP handle of a URL object, this function extracts an individual
+piece or the full URL from it.
-The \fIwhat\fP argument should be the particular part to extract (see list
-below) and \fIpart\fP points to a 'char *' to get updated to point to a newly
+The \fIpart\fP argument specifies which part to extract (see list below) and
+\fIcontent\fP points to a 'char *' to get updated to point to a newly
allocated string with the contents.
The \fIflags\fP argument is a bitmask with individual features.
-The returned part pointer must be freed with \fIcurl_free(3)\fP after use.
+The returned content pointer must be freed with \fIcurl_free(3)\fP after use.
.SH FLAGS
The flags argument is zero, one or more bits set in a bitmask.
.IP CURLU_DEFAULT_PORT
-If the handle has no port stored, this option will make \fIcurl_url_get(3)\fP
+If the handle has no port stored, this option makes \fIcurl_url_get(3)\fP
return the default port for the used scheme.
.IP CURLU_DEFAULT_SCHEME
-If the handle has no scheme stored, this option will make
-\fIcurl_url_get(3)\fP return the default scheme instead of error.
+If the handle has no scheme stored, this option makes \fIcurl_url_get(3)\fP
+return the default scheme instead of error.
.IP CURLU_NO_DEFAULT_PORT
Instructs \fIcurl_url_get(3)\fP to not return a port number if it matches the
default port for the scheme.
.IP CURLU_URLDECODE
Asks \fIcurl_url_get(3)\fP to URL decode the contents before returning it. It
-will not attempt to decode the scheme, the port number or the full URL.
-´
-The query component will also get plus-to-space conversion as a bonus when
-this bit is set.
+does not decode the scheme, the port number or the full URL.
-Note that this URL decoding is charset unaware and you will get a zero
-terminated string back with data that could be intended for a particular
-encoding.
+The query component also gets plus-to-space conversion as a bonus when this
+bit is set.
-If there's any byte values lower than 32 in the decoded string, the get
-operation will return an error instead.
+Note that this URL decoding is charset unaware and you get a zero terminated
+string back with data that could be intended for a particular encoding.
+
+If there are byte values lower than 32 in the decoded string, the get
+operation returns an error instead.
.IP CURLU_URLENCODE
-If set, will make \fIcurl_url_get(3)\fP URL encode the host name part when a
-full URL is retrieved. If not set (default), libcurl returns the URL with the
-host name "raw" to support IDN names to appear as-is. IDN host names are
-typically using non-ASCII bytes that otherwise will be percent-encoded.
+If set, \fIcurl_url_get(3)\fP URL encodes the host name part when a full URL
+is retrieved. If not set (default), libcurl returns the URL with the host name
+"raw" to support IDN names to appear as-is. IDN host names are typically using
+non-ASCII bytes that otherwise gets percent-encoded.
-Note that even when not asking for URL encoding, the '%' (byte 37) will be URL
+Note that even when not asking for URL encoding, the '%' (byte 37) is URL
encoded to make sure the host name remains valid.
+.IP CURLU_PUNYCODE
+If set and \fICURLU_URLENCODE\fP is not set, and asked to retrieve the
+\fBCURLUPART_HOST\fP or \fBCURLUPART_URL\fP parts, libcurl returns the host
+name in its punycode version if it contains any non-ASCII octets (and is an
+IDN name).
+
+If libcurl is built without IDN capabilities, using this bit makes
+\fIcurl_url_get(3)\fP return \fICURLUE_LACKS_IDN\fP if the host name contains
+anything outside the ASCII range.
+
+(Added in curl 7.88.0)
+.IP CURLU_PUNY2IDN
+If set and asked to retrieve the \fBCURLUPART_HOST\fP or \fBCURLUPART_URL\fP
+parts, libcurl returns the host name in its IDN (International Domain Name)
+UTF-8 version if it otherwise is a punycode version. If the punycode name
+cannot be converted to IDN correctly, libcurl returns
+\fICURLUE_BAD_HOSTNAME\fP.
+
+If libcurl is built without IDN capabilities, using this bit makes
+\fIcurl_url_get(3)\fP return \fICURLUE_LACKS_IDN\fP if the host name is using
+punycode.
+
+(Added in curl 8.3.0)
.SH PARTS
.IP CURLUPART_URL
-When asked to return the full URL, \fIcurl_url_get(3)\fP will return a
-normalized and possibly cleaned up version of what was previously parsed.
+When asked to return the full URL, \fIcurl_url_get(3)\fP returns a normalized
+and possibly cleaned up version using all available URL parts.
+
+We advise using the \fICURLU_PUNYCODE\fP option to get the URL as "normalized"
+as possible since IDN allows host names to be written in many different ways
+that still end up the same punycode version.
.IP CURLUPART_SCHEME
Scheme cannot be URL decoded on get.
.IP CURLUPART_USER
.IP CURLUPART_PASSWORD
.IP CURLUPART_OPTIONS
+The options field is an optional field that might follow the password in the
+userinfo part. It is only recognized/used when parsing URLs for the following
+schemes: pop3, smtp and imap. The URL API still allows users to set and get
+this field independently of scheme when not parsing full URLs.
.IP CURLUPART_HOST
-The host name. If it is an IPv6 numeric address, the zone id will not be part
-of it but is provided separately in \fICURLUPART_ZONEID\fP. IPv6 numerical
-addresses are returned within brackets ([]).
+The host name. If it is an IPv6 numeric address, the zone id is not part of it
+but is provided separately in \fICURLUPART_ZONEID\fP. IPv6 numerical addresses
+are returned within brackets ([]).
+
+IPv6 names are normalized when set, which should make them as short as
+possible while maintaining correct syntax.
.IP CURLUPART_ZONEID
If the host name is a numeric IPv6 address, this field might also be set.
.IP CURLUPART_PORT
-Port cannot be URL decoded on get.
+A port cannot be URL decoded on get. This number is returned in a string just
+like all other parts. That string is guaranteed to hold a valid port number in
+ASCII using base 10.
.IP CURLUPART_PATH
-\fIpart\fP will be '/' even if no path is supplied in the URL.
+The \fIpart\fP is always at least a slash ('/') even if no path was supplied
+in the URL. A URL path always starts with a slash.
.IP CURLUPART_QUERY
-The initial question mark that denotes the beginning of the query part is
-a delimiter only.
-It is not part of the query contents.
-
+The initial question mark that denotes the beginning of the query part is a
+delimiter only. It is not part of the query contents.
-A not-present query will lead \fIpart\fP to be set to NULL.
-A zero-length query will lead \fIpart\fP to be set to a zero-length string.
+A not-present query returns \fIpart\fP set to NULL.
+A zero-length query returns \fIpart\fP as a zero-length string.
-The query part will also get pluses converted to space when asked to URL
-decode on get with the CURLU_URLDECODE bit.
+The query part gets pluses converted to space when asked to URL decode on get
+with the CURLU_URLDECODE bit.
.IP CURLUPART_FRAGMENT
+The initial hash sign that denotes the beginning of the fragment is a
+delimiter only. It is not part of the fragment contents.
.SH EXAMPLE
.nf
+int main(void)
+{
CURLUcode rc;
CURLU *url = curl_url();
rc = curl_url_set(url, CURLUPART_URL, "https://example.com", 0);
@@ -122,6 +160,7 @@ decode on get with the CURLU_URLDECODE bit.
}
curl_url_cleanup(url);
}
+}
.fi
.SH AVAILABILITY
Added in 7.62.0. CURLUPART_ZONEID was added in 7.65.0.
@@ -132,5 +171,9 @@ descriptions.
If this function returns an error, no URL part is returned.
.SH "SEE ALSO"
-.BR curl_url_cleanup "(3), " curl_url "(3), " curl_url_set "(3), "
-.BR curl_url_dup "(3), " curl_url_strerror "(3), " CURLOPT_CURLU "(3)"
+.BR curl_url (3),
+.BR curl_url_cleanup (3),
+.BR curl_url_dup (3),
+.BR curl_url_set (3),
+.BR curl_url_strerror (3),
+.BR CURLOPT_CURLU (3)
diff --git a/docs/libcurl/curl_url_set.3 b/docs/libcurl/curl_url_set.3
index 19d403729..d863f5253 100644
--- a/docs/libcurl/curl_url_set.3
+++ b/docs/libcurl/curl_url_set.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_url_set 3 "September 30, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_url_set 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_url_set - set a URL part
@@ -32,29 +32,45 @@ curl_url_set - set a URL part
CURLUcode curl_url_set(CURLU *url,
CURLUPart part,
const char *content,
- unsigned int flags)
+ unsigned int flags);
.fi
.SH DESCRIPTION
-Given the \fIurl\fP handle of an already parsed URL, this function lets the
-user set/update individual pieces of it.
+The \fIurl\fP handle to work on, passed in as the first argument, must be a
+handle previously created by \fIcurl_url(3)\fP or \fIcurl_url_dup(3)\fP.
+
+This function sets or updates individual URL components, or parts, held by the
+URL object the handle identifies.
The \fIpart\fP argument should identify the particular URL part (see list
below) to set or change, with \fIcontent\fP pointing to a null-terminated
string with the new contents for that URL part. The contents should be in the
-form and encoding they'd use in a URL: URL encoded.
+form and encoding they would use in a URL: URL encoded.
+
+When setting part in the URL object that was previously already set, it
+replaces the data that was previously stored for that part with the new
+\fIcontent\fP.
-The application does not have to keep \fIcontent\fP around after a successful
-call.
+The caller does not have to keep \fIcontent\fP around after a successful call
+as this function copies the content.
-Setting a part to a NULL pointer will effectively remove that part's contents
-from the \fICURLU\fP handle.
+Setting a part to a NULL pointer removes that part's contents from the
+\fICURLU\fP handle.
By default, this API only accepts URLs using schemes for protocols that are
supported built-in. To make libcurl parse URLs generically even for schemes it
does not know about, the \fBCURLU_NON_SUPPORT_SCHEME\fP flags bit must be
-set. Otherwise, this function returns \fICURLUE_UNSUPPORTED_SCHEME\fP on URL
+set. Otherwise, this function returns \fICURLUE_UNSUPPORTED_SCHEME\fP for URL
schemes it does not recognize.
+This function has an 8 MB maximum length limit for all provided input strings.
+In the real world, excessively long fields in URLs cause problems even if this
+API accepts them.
+
+When setting or updating contents of individual URL parts, this API might
+accept data that would not be otherwise possible to set in the string when it
+gets populated as a result of a full URL parse. Beware. If done so, extracting
+a full URL later on from such components might render an invalid URL.
+
The \fIflags\fP argument is a bitmask with independent features.
.SH PARTS
.IP CURLUPART_URL
@@ -62,33 +78,43 @@ Allows the full URL of the handle to be replaced. If the handle already is
populated with a URL, the new URL can be relative to the previous.
When successfully setting a new URL, relative or absolute, the handle contents
-will be replaced with the information of the newly set URL.
+is replaced with the components of the newly set URL.
Pass a pointer to a null-terminated string to the \fIurl\fP parameter. The
string must point to a correctly formatted "RFC 3986+" URL or be a NULL
pointer.
+
+Unless \fICURLU_NO_AUTHORITY\fP is set, a blank host name is not allowed in
+the URL.
.IP CURLUPART_SCHEME
Scheme cannot be URL decoded on set. libcurl only accepts setting schemes up
to 40 bytes long.
.IP CURLUPART_USER
.IP CURLUPART_PASSWORD
.IP CURLUPART_OPTIONS
+The options field is an optional field that might follow the password in the
+userinfo part. It is only recognized/used when parsing URLs for the following
+schemes: pop3, smtp and imap. This function however allows users to
+independently set this field.
.IP CURLUPART_HOST
-The host name. If it is IDNA the string must then be encoded as your locale
-says or UTF-8 (when WinIDN is used). If it is a bracketed IPv6 numeric address
-it may contain a zone id (or you can use CURLUPART_ZONEID).
+The host name. If it is International Domain Name (IDN) the string must then
+be encoded as your locale says or UTF-8 (when WinIDN is used). If it is a
+bracketed IPv6 numeric address it may contain a zone id (or you can use
+\fICURLUPART_ZONEID\fP).
+
+Unless \fICURLU_NO_AUTHORITY\fP is set, a blank host name is not allowed to set.
.IP CURLUPART_ZONEID
If the host name is a numeric IPv6 address, this field can also be set.
.IP CURLUPART_PORT
-Port cannot be URL encoded on set. The given port number is provided as a
-string and the decimal number must be between 1 and 65535. Anything else will
-return an error.
+The port number cannot be URL encoded on set. The given port number is
+provided as a string and the decimal number in it must be between 0 and
+65535. Anything else returns an error.
.IP CURLUPART_PATH
-If a path is set in the URL without a leading slash, a slash will be inserted
-automatically when this URL is read from the handle.
+If a path is set in the URL without a leading slash, a slash is prepended
+automatically.
.IP CURLUPART_QUERY
-The query part will also get spaces converted to pluses when asked to URL
-encode on set with the \fICURLU_URLENCODE\fP bit.
+The query part gets spaces converted to pluses when asked to URL encode on set
+with the \fICURLU_URLENCODE\fP bit.
If used together with the \fICURLU_APPENDQUERY\fP bit, the provided part is
appended on the end of the existing query.
@@ -100,12 +126,12 @@ The hash sign in the URL is not part of the actual fragment contents.
The flags argument is zero, one or more bits set in a bitmask.
.IP CURLU_APPENDQUERY
Can be used when setting the \fICURLUPART_QUERY\fP component. The provided new
-part will then instead be appended at the end of the existing query - and if
-the previous part did not end with an ampersand (&), an ampersand gets
-inserted before the new appended part.
+part is then appended at the end of the existing query - and if the previous
+part did not end with an ampersand (&), an ampersand gets inserted before the
+new appended part.
When \fICURLU_APPENDQUERY\fP is used together with \fICURLU_URLENCODE\fP, the
-first '=' symbol will not be URL encoded.
+first '=' symbol is not URL encoded.
.IP CURLU_NON_SUPPORT_SCHEME
If set, allows \fIcurl_url_set(3)\fP to set a non-supported scheme.
.IP CURLU_URLENCODE
@@ -113,21 +139,21 @@ When set, \fIcurl_url_set(3)\fP URL encodes the part on entry, except for
scheme, port and URL.
When setting the path component with URL encoding enabled, the slash character
-will be skipped.
+is be skipped.
The query part gets space-to-plus conversion before the URL conversion.
-This URL encoding is charset unaware and will convert the input on a
-byte-by-byte manner.
+This URL encoding is charset unaware and converts the input in a byte-by-byte
+manner.
.IP CURLU_DEFAULT_SCHEME
-If set, will make libcurl allow the URL to be set without a scheme and then
-sets that to the default scheme: HTTPS. Overrides the \fICURLU_GUESS_SCHEME\fP
-option if both are set.
+If set, allows the URL to be set without a scheme and then sets that to the
+default scheme: HTTPS. Overrides the \fICURLU_GUESS_SCHEME\fP option if both
+are set.
.IP CURLU_GUESS_SCHEME
-If set, will make libcurl allow the URL to be set without a scheme and it
-instead "guesses" which scheme that was intended based on the host name. If
-the outermost sub-domain name matches DICT, FTP, IMAP, LDAP, POP3 or SMTP then
-that scheme will be used, otherwise it picks HTTP. Conflicts with the
+If set, allows the URL to be set without a scheme and it instead "guesses"
+which scheme that was intended based on the host name. If the outermost
+subdomain name matches DICT, FTP, IMAP, LDAP, POP3 or SMTP then that scheme
+is used, otherwise it picks HTTP. Conflicts with the
\fICURLU_DEFAULT_SCHEME\fP option which takes precedence if both are set.
.IP CURLU_NO_AUTHORITY
If set, skips authority checks. The RFC allows individual schemes to omit the
@@ -135,30 +161,36 @@ host part (normally the only mandatory part of the authority), but libcurl
cannot know whether this is permitted for custom schemes. Specifying the flag
permits empty authority sections, similar to how file scheme is handled.
.IP CURLU_PATH_AS_IS
-When set for \fBCURLUPART_URL\fP, this makes libcurl skip the normalization of
-the path. That is the procedure where curl otherwise removes sequences of
+When set for \fBCURLUPART_URL\fP, this skips the normalization of the
+path. That is the procedure where libcurl otherwise removes sequences of
dot-slash and dot-dot etc. The same option used for transfers is called
\fICURLOPT_PATH_AS_IS(3)\fP.
.IP CURLU_ALLOW_SPACE
-If set, a the URL parser allows space (ASCII 32) where possible. The URL
-syntax does normally not allow spaces anywhere, but they should be encoded as
-%20 or '+'. When spaces are allowed, they are still not allowed in the scheme.
-When space is used and allowed in a URL, it will be stored as-is unless
-\fICURLU_URLENCODE\fP is also set, which then makes libcurl URL-encode the
-space before stored. This affects how the URL will be constructed when
+If set, the URL parser allows space (ASCII 32) where possible. The URL syntax
+does normally not allow spaces anywhere, but they should be encoded as %20
+or '+'. When spaces are allowed, they are still not allowed in the scheme.
+When space is used and allowed in a URL, it is stored as-is unless
+\fICURLU_URLENCODE\fP is also set, which then makes libcurl URL encode the
+space before stored. This affects how the URL is constructed when
\fIcurl_url_get(3)\fP is subsequently used to extract the full URL or
individual parts. (Added in 7.78.0)
+.IP CURLU_DISALLOW_USER
+If set, the URL parser does not accept embedded credentials for the
+\fBCURLUPART_URL\fP, and instead returns \fBCURLUE_USER_NOT_ALLOWED\fP for
+such URLs.
.SH EXAMPLE
.nf
+int main(void)
+{
CURLUcode rc;
CURLU *url = curl_url();
rc = curl_url_set(url, CURLUPART_URL, "https://example.com", 0);
if(!rc) {
- char *scheme;
/* change it to an FTP URL */
rc = curl_url_set(url, CURLUPART_SCHEME, "ftp", 0);
}
curl_url_cleanup(url);
+}
.fi
.SH AVAILABILITY
Added in 7.62.0. CURLUPART_ZONEID was added in 7.65.0.
@@ -167,11 +199,14 @@ Returns a \fICURLUcode\fP error value, which is CURLUE_OK (0) if everything
went fine. See the \fIlibcurl-errors(3)\fP man page for the full list with
descriptions.
-A URL string passed on to \fIcurl_url_set(3)\fP for the \fBCURLUPART_URL\fP
-part, must be shorter than 8000000 bytes otherwise it returns
-\fBCURLUE_MALFORMED_INPUT\fP (added in 7.65.0).
+The input string passed to \fIcurl_url_set(3)\fP must be shorter than eight
+million bytes. Otherwise this function returns \fBCURLUE_MALFORMED_INPUT\fP.
If this function returns an error, no URL part is set.
.SH "SEE ALSO"
-.BR curl_url_cleanup "(3), " curl_url "(3), " curl_url_get "(3), "
-.BR curl_url_dup "(3), " curl_url_strerror "(3), " CURLOPT_CURLU "(3)"
+.BR curl_url (3),
+.BR curl_url_cleanup (3),
+.BR curl_url_dup (3),
+.BR curl_url_get (3),
+.BR curl_url_strerror (3),
+.BR CURLOPT_CURLU (3)
diff --git a/docs/libcurl/curl_url_strerror.3 b/docs/libcurl/curl_url_strerror.3
index f76f34ade..f6665594e 100644
--- a/docs/libcurl/curl_url_strerror.3
+++ b/docs/libcurl/curl_url_strerror.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,32 +21,39 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_url_strerror 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_url_strerror 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_url_strerror - return string describing error code
.SH SYNOPSIS
.nf
-.B #include <curl/curl.h>
-.BI "const char *curl_url_strerror(CURLUcode " errornum ");"
+#include <curl/curl.h>
+
+const char *curl_url_strerror(CURLUcode errornum);
+.fi
.SH DESCRIPTION
-The curl_url_strerror() function returns a string describing the CURLUcode
-error code passed in the argument \fIerrornum\fP.
+This function returns a string describing the CURLUcode error code passed in
+the argument \fIerrornum\fP.
.SH EXAMPLE
.nf
+int main(void)
+{
CURLUcode rc;
CURLU *url = curl_url();
rc = curl_url_set(url, CURLUPART_URL, "https://example.com", 0);
if(rc)
printf("URL error: %s\\n", curl_url_strerror(rc));
curl_url_cleanup(url);
+}
.fi
-
.SH AVAILABILITY
Added in 7.80.0
.SH RETURN VALUE
A pointer to a null-terminated string.
.SH "SEE ALSO"
-.BR libcurl-errors "(3), " curl_url_get "(3), " curl_url_set "(3), "
-.BR curl_easy_strerror "(3), " curl_multi_strerror "(3), "
-.BR curl_share_strerror "(3)"
+.BR curl_easy_strerror (3),
+.BR curl_multi_strerror (3),
+.BR curl_share_strerror (3),
+.BR curl_url_get (3),
+.BR curl_url_set (3),
+.BR libcurl-errors (3)
diff --git a/docs/libcurl/curl_version.3 b/docs/libcurl/curl_version.3
index b3b3588bf..d446a4e7f 100644
--- a/docs/libcurl/curl_version.3
+++ b/docs/libcurl/curl_version.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH curl_version 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_version 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_version - returns the libcurl version string
@@ -38,7 +38,10 @@ its important components (like OpenSSL version).
We recommend using \fIcurl_version_info(3)\fP instead!
.SH EXAMPLE
.nf
-printf("libcurl version %s\\n", curl_version());
+int main(void)
+{
+ printf("libcurl version %s\\n", curl_version());
+}
.fi
.SH AVAILABILITY
@@ -47,4 +50,4 @@ Always
A pointer to a null-terminated string. The string resides in a statically
allocated buffer and must not be freed by the caller.
.SH "SEE ALSO"
-.BR curl_version_info "(3)"
+.BR curl_version_info (3)
diff --git a/docs/libcurl/curl_version_info.3 b/docs/libcurl/curl_version_info.3
index a8f2f1695..fa35f7a4e 100644
--- a/docs/libcurl/curl_version_info.3
+++ b/docs/libcurl/curl_version_info.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH curl_version_info 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_version_info 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_version_info - returns runtime libcurl version info
@@ -30,16 +30,15 @@ curl_version_info - returns runtime libcurl version info
.nf
#include <curl/curl.h>
-curl_version_info_data *curl_version_info( CURLversion age);
+curl_version_info_data *curl_version_info(CURLversion age);
.fi
.SH DESCRIPTION
Returns a pointer to a filled in static struct with information about various
features in the running version of libcurl. \fIage\fP should be set to the
version of this functionality by the time you write your program. This way,
-libcurl will always return a proper struct that your program understands,
-while programs in the future might get a different
-struct. \fBCURLVERSION_NOW\fP will be the most recent one for the library you
-have installed:
+libcurl always returns a proper struct that your program understands, while
+programs in the future might get a different struct. \fBCURLVERSION_NOW\fP is
+the most recent one for the library you have installed:
.nf
data = curl_version_info(CURLVERSION_NOW);
.fi
@@ -47,6 +46,10 @@ Applications should use this information to judge if things are possible to do
or not, instead of using compile-time checks, as dynamic/DLL libraries can be
changed independent of applications.
+This function can alter the returned static data as long as
+\fIcurl_global_init(3)\fP has not been called. It is therefore not thread-safe
+before libcurl initialization occurs.
+
The curl_version_info_data struct looks like this
.nf
@@ -107,6 +110,9 @@ typedef struct {
/* when 'age' is CURLVERSION_TENTH or higher (>= 7.77.0), the members
below exist */
const char *gsasl_version; /* human readable string. */
+ /* when 'age' is CURLVERSION_ELEVENTH or higher (>= 7.87.0), the members
+ below exist */
+ const char *const *feature_names; /* Feature names. */
} curl_version_info_data;
.fi
@@ -125,98 +131,167 @@ returned as 0x070908.
was built for. As discovered by a configure script or set by the build
environment.
-\fIfeatures\fP can have none, one or more bits set, and the currently defined
-bits are:
+\fIfeatures\fP is a bit mask representing available features. It can
+have none, one or more bits set.
+The use of this field is deprecated: use \fIfeature_names\fP instead.
+The feature names description below lists the associated bits.
+
+\fIfeature_names\fP is a pointer to an array of string pointers, containing the
+names of the features that libcurl supports. The array is terminated by a NULL
+entry. Currently defined names are:
.RS
-.IP CURL_VERSION_ALTSVC
+.IP """alt-svc"""
+\fIfeatures\fP mask bit: CURL_VERSION_ALTSVC
+.br
HTTP Alt-Svc parsing and the associated options (Added in 7.64.1)
-.IP CURL_VERSION_ASYNCHDNS
+.IP """AsynchDNS"""
+\fIfeatures\fP mask bit: CURL_VERSION_ASYNCHDNS
+.br
libcurl was built with support for asynchronous name lookups, which allows
more exact timeouts (even on Windows) and less blocking when using the multi
interface. (added in 7.10.7)
-.IP CURL_VERSION_BROTLI
+.IP """brotli"""
+\fIfeatures\fP mask bit: CURL_VERSION_BROTLI
+.br
supports HTTP Brotli content encoding using libbrotlidec (Added in 7.57.0)
-.IP CURL_VERSION_ZSTD
-supports HTTP zstd content encoding using zstd library (Added in 7.72.0)
-.IP CURL_VERSION_CONV
-libcurl was built with support for character conversions, as provided by the
-CURLOPT_CONV_* callbacks. (Added in 7.15.4)
-.IP CURL_VERSION_CURLDEBUG
-libcurl was built with memory tracking debug capabilities. This is mainly of
-interest for libcurl hackers. (added in 7.19.6)
-.IP CURL_VERSION_DEBUG
+.IP """Debug"""
+\fIfeatures\fP mask bit: CURL_VERSION_DEBUG
+.br
libcurl was built with debug capabilities (added in 7.10.6)
-.IP CURL_VERSION_GSASL
+.IP """gsasl"""
+\fIfeatures\fP mask bit: CURL_VERSION_GSASL
+.br
libcurl was built with libgsasl and thus with some extra SCRAM-SHA
authentication methods. (added in 7.76.0)
-.IP CURL_VERSION_GSSAPI
+.IP """GSS-API"""
+\fIfeatures\fP mask bit: CURL_VERSION_GSSAPI
+.br
libcurl was built with support for GSS-API. This makes libcurl use provided
functions for Kerberos and SPNEGO authentication. It also allows libcurl
to use the current user credentials without the app having to pass them on.
(Added in 7.38.0)
-.IP CURL_VERSION_GSSNEGOTIATE
-supports HTTP GSS-Negotiate (added in 7.10.6)
-.IP CURL_VERSION_HSTS
+.IP """HSTS"""
+\fIfeatures\fP mask bit: CURL_VERSION_HSTS
+.br
libcurl was built with support for HSTS (HTTP Strict Transport Security)
(Added in 7.74.0)
-.IP CURL_VERSION_HTTPS_PROXY
-libcurl was built with support for HTTPS-proxy.
-(Added in 7.52.0)
-.IP CURL_VERSION_HTTP2
+.IP """HTTP2"""
+\fIfeatures\fP mask bit: CURL_VERSION_HTTP2
+.br
libcurl was built with support for HTTP2.
(Added in 7.33.0)
-.IP CURL_VERSION_HTTP3
+.IP """HTTP3"""
+\fIfeatures\fP mask bit: CURL_VERSION_HTTP3
+.br
HTTP/3 and QUIC support are built-in (Added in 7.66.0)
-.IP CURL_VERSION_IDN
+.IP """HTTPS-proxy"""
+\fIfeatures\fP mask bit: CURL_VERSION_HTTPS_PROXY
+.br
+libcurl was built with support for HTTPS-proxy.
+(Added in 7.52.0)
+.IP """IDN"""
+\fIfeatures\fP mask bit: CURL_VERSION_IDN
+.br
libcurl was built with support for IDNA, domain names with international
letters. (Added in 7.12.0)
-.IP CURL_VERSION_IPV6
+.IP """IPv6"""
+\fIfeatures\fP mask bit: CURL_VERSION_IPV6
+.br
supports IPv6
-.IP CURL_VERSION_KERBEROS4
-supports Kerberos V4 (when using FTP). Legacy bit. Deprecated since 7.33.0.
-.IP CURL_VERSION_KERBEROS5
+.IP """Kerberos"""
+\fIfeatures\fP mask bit: CURL_VERSION_KERBEROS5
+.br
supports Kerberos V5 authentication for FTP, IMAP, LDAP, POP3, SMTP and
SOCKSv5 proxy. (Added in 7.40.0)
-.IP CURL_VERSION_LARGEFILE
+.IP """Largefile"""
+\fIfeatures\fP mask bit: CURL_VERSION_LARGEFILE
+.br
libcurl was built with support for large files. (Added in 7.11.1)
-.IP CURL_VERSION_UNICODE
-libcurl was built with Unicode support on Windows. This makes non-ASCII
-characters work in filenames and options passed to libcurl. (Added in 7.72.0)
-.IP CURL_VERSION_LIBZ
+.IP """libz"""
+\fIfeatures\fP mask bit: CURL_VERSION_LIBZ
+.br
supports HTTP deflate using libz (Added in 7.10)
-.IP CURL_VERSION_MULTI_SSL
+.IP """MultiSSL"""
+\fIfeatures\fP mask bit: CURL_VERSION_MULTI_SSL
+.br
libcurl was built with multiple SSL backends. For details, see
\fIcurl_global_sslset(3)\fP.
(Added in 7.56.0)
-.IP CURL_VERSION_NTLM
+.IP """NTLM"""
+\fIfeatures\fP mask bit: CURL_VERSION_NTLM
+.br
supports HTTP NTLM (added in 7.10.6)
-.IP CURL_VERSION_NTLM_WB
+.IP """NTLM_WB"""
+\fIfeatures\fP mask bit: CURL_VERSION_NTLM_WB
+.br
libcurl was built with support for NTLM delegation to a winbind helper.
(Added in 7.22.0)
-.IP CURL_VERSION_PSL
+.IP """PSL"""
+\fIfeatures\fP mask bit: CURL_VERSION_PSL
+.br
libcurl was built with support for Mozilla's Public Suffix List. This makes
libcurl ignore cookies with a domain that is on the list.
(Added in 7.47.0)
-.IP CURL_VERSION_SPNEGO
+.IP """SPNEGO"""
+\fIfeatures\fP mask bit: CURL_VERSION_SPNEGO
+.br
libcurl was built with support for SPNEGO authentication (Simple and Protected
GSS-API Negotiation Mechanism, defined in RFC 2478.) (added in 7.10.8)
-.IP CURL_VERSION_SSL
+.IP """SSL"""
+\fIfeatures\fP mask bit: CURL_VERSION_SSL
+.br
supports SSL (HTTPS/FTPS) (Added in 7.10)
-.IP CURL_VERSION_SSPI
+.IP """SSPI"""
+\fIfeatures\fP mask bit: CURL_VERSION_SSPI
+.br
libcurl was built with support for SSPI. This is only available on Windows and
makes libcurl use Windows-provided functions for Kerberos, NTLM, SPNEGO and
Digest authentication. It also allows libcurl to use the current user
credentials without the app having to pass them on. (Added in 7.13.2)
-.IP CURL_VERSION_THREADSAFE
+.IP """threadsafe"""
+\fIfeatures\fP mask bit: CURL_VERSION_THREADSAFE
+.br
libcurl was built with thread-safety support (Atomic or SRWLOCK) to protect
curl initialization. (Added in 7.84.0) See \fIlibcurl-thread(3)\fP
-.IP CURL_VERSION_TLSAUTH_SRP
+.IP """TLS-SRP"""
+\fIfeatures\fP mask bit: CURL_VERSION_TLSAUTH_SRP
+.br
libcurl was built with support for TLS-SRP (in one or more of the built-in TLS
backends). (Added in 7.21.4)
-.IP CURL_VERSION_UNIX_SOCKETS
+.IP """TrackMemory"""
+\fIfeatures\fP mask bit: CURL_VERSION_CURLDEBUG
+.br
+libcurl was built with memory tracking debug capabilities. This is mainly of
+interest for libcurl hackers. (added in 7.19.6)
+.IP """Unicode"""
+\fIfeatures\fP mask bit: CURL_VERSION_UNICODE
+.br
+libcurl was built with Unicode support on Windows. This makes non-ASCII
+characters work in filenames and options passed to libcurl. (Added in 7.72.0)
+.IP """UnixSockets"""
+\fIfeatures\fP mask bit: CURL_VERSION_UNIX_SOCKETS
+.br
libcurl was built with support for Unix domain sockets.
(Added in 7.40.0)
+.IP """zstd"""
+\fIfeatures\fP mask bit: CURL_VERSION_ZSTD
+.br
+supports HTTP zstd content encoding using zstd library (Added in 7.72.0)
+.IP none
+\fIfeatures\fP mask bit: CURL_VERSION_CONV
+.br
+libcurl was built with support for character conversions, as provided by the
+CURLOPT_CONV_* callbacks. Always 0 since 7.82.0. (Added in 7.15.4)
+.IP none
+\fIfeatures\fP mask bit: CURL_VERSION_GSSNEGOTIATE
+.br
+supports HTTP GSS-Negotiate (added in 7.10.6, deprecated in 7.38.0)
+.IP none
+\fIfeatures\fP mask bit: CURL_VERSION_KERBEROS4
+.br
+supports Kerberos V4 (when using FTP). Legacy bit. Deprecated since 7.33.0.
.RE
+
\fIssl_version\fP is an ASCII string for the TLS library name + version
used. If libcurl has no SSL support, this is NULL. For example "Schannel",
\&"Secure Transport" or "OpenSSL/1.1.0g".
@@ -232,11 +307,14 @@ names are the same as would be used in URLs. The array is terminated by a NULL
entry.
.SH EXAMPLE
.nf
-curl_version_info_data *ver = curl_version_info(CURLVERSION_NOW);
-printf("libcurl version %u.%u.%u\\n",
- (ver->version_num >> 16) & 0xff,
- (ver->version_num >> 8) & 0xff,
- ver->version_num & 0xff,
+int main(void)
+{
+ curl_version_info_data *ver = curl_version_info(CURLVERSION_NOW);
+ printf("libcurl version %u.%u.%u\\n",
+ (ver->version_num >> 16) & 0xff,
+ (ver->version_num >> 8) & 0xff,
+ ver->version_num & 0xff);
+}
.fi
.SH AVAILABILITY
Added in 7.10
diff --git a/docs/libcurl/curl_ws_meta.3 b/docs/libcurl/curl_ws_meta.3
index 451551e2e..e6feb1fca 100644
--- a/docs/libcurl/curl_ws_meta.3
+++ b/docs/libcurl/curl_ws_meta.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,22 +22,15 @@
.\" *
.\" **************************************************************************
.\"
-.TH curl_ws_meta 3 "October 03, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_ws_meta 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_ws_meta - meta data WebSocket information
.SH SYNOPSIS
.nf
-#include <curl/easy.h>
+#include <curl/curl.h>
-struct curl_ws_frame {
- int age; /* zero */
- int flags; /* See the CURLWS_* defines */
- curl_off_t offset; /* the offset of this data into the frame */
- curl_off_t bytesleft; /* number of pending bytes left of the payload */
-};
-
-struct curl_ws_frame *curl_ws_meta(CURL *curl);
+const struct curl_ws_frame *curl_ws_meta(CURL *curl);
.fi
.SH DESCRIPTION
This function call is EXPERIMENTAL.
@@ -54,7 +47,15 @@ what transfer the question is about, but as there is no such pointer provided
to the callback by libcurl itself, applications that want to use
\fIcurl_ws_meta(3)\fP need to pass it on to the callback on its own.
-.SH "struct fields"
+.SH "struct curl_ws_frame"
+.nf
+struct curl_ws_frame {
+ int age;
+ int flags;
+ curl_off_t offset;
+ curl_off_t bytesleft;
+};
+.fi
.IP age
This field specify the age of this struct. It is always zero for now.
.IP flags
@@ -70,12 +71,12 @@ complete.
.SH FLAGS
.IP CURLWS_TEXT
The buffer contains text data. Note that this makes a difference to WebSocket
-but libcurl itself will not make any verification of the content or
+but libcurl itself does not make any verification of the content or
precautions that you actually receive valid UTF-8 content.
.IP CURLWS_BINARY
This is binary data.
.IP CURLWS_CONT
-This is not the final fragment of the message, it implies that there will be
+This is not the final fragment of the message, it implies that there is
another fragment coming as part of the same message.
.IP CURLWS_CLOSE
This transfer is now closed.
@@ -94,27 +95,36 @@ static size_t writecb(unsigned char *buffer,
size_t size, size_t nitems, void *p)
{
struct customdata *c = (struct customdata *)p;
- struct curl_ws_frame *m = curl_ws_meta(c->easy);
+ const struct curl_ws_frame *m = curl_ws_meta(c->easy);
- /* m->flags tells us about the traffic */
+ printf("flags: %x\\n", m->flags);
}
+int main(void)
{
- struct customdata custom;
- custom.easy = easy;
- custom.ptr = NULL;
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writecb);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, &custom);
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ struct customdata custom;
+ custom.easy = curl;
+ custom.ptr = NULL;
+ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writecb);
+ curl_easy_setopt(curl, CURLOPT_WRITEDATA, &custom);
+
+ curl_easy_perform(curl);
+
+ }
}
.fi
.SH AVAILABILITY
Added in 7.86.0.
.SH RETURN VALUE
-This function returns a pointer to a \fIcurl_ws_frame\fP struct with
+This function returns a pointer to a \fIcurl_ws_frame\fP struct with read-only
information that is valid for this specific callback invocation. If it cannot
return this information, or if the function is called in the wrong context, it
returns NULL.
.SH "SEE ALSO"
-.BR curl_easy_setopt "(3), "
-.BR curl_easy_getinfo "(3), "
-.BR curl_ws_send "(3), " curl_ws_recv "(3), "
+.BR curl_easy_setopt (3),
+.BR curl_easy_getinfo (3),
+.BR curl_ws_send (3),
+.BR curl_ws_recv (3),
+.BR libcurl-ws (3)
diff --git a/docs/libcurl/curl_ws_recv.3 b/docs/libcurl/curl_ws_recv.3
index a7152ae9d..ae8be0d90 100644
--- a/docs/libcurl/curl_ws_recv.3
+++ b/docs/libcurl/curl_ws_recv.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,16 +22,16 @@
.\" *
.\" **************************************************************************
.\"
-.TH curl_ws_recv 3 "October 03, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_ws_recv 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_ws_recv - receive WebSocket data
.SH SYNOPSIS
.nf
-#include <curl/easy.h>
+#include <curl/curl.h>
CURLcode curl_ws_recv(CURL *curl, void *buffer, size_t buflen,
- size_t *recv, struct curl_ws_frame **meta);
+ size_t *recv, const struct curl_ws_frame **meta);
.fi
.SH DESCRIPTION
This function call is EXPERIMENTAL.
@@ -44,18 +44,37 @@ If there is more fragment data to deliver than what fits in the provided
\fIbuffer\fP, libcurl returns a full buffer and the application needs to call
this function again to continue draining the buffer.
-The \fImeta\fP pointer gets set to point to a \fIstruct curl_ws_frame\fP that
-contains information about the received data. See the \fIcurl_ws_meta(3)\fP
-for details on that struct.
+The \fImeta\fP pointer gets set to point to a \fIconst struct curl_ws_frame\fP
+that contains information about the received data. See the
+\fIcurl_ws_meta(3)\fP for details on that struct.
.SH EXAMPLE
.nf
-
+int main(void)
+{
+ size_t rlen;
+ const struct curl_ws_frame *meta;
+ char buffer[256];
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res = curl_ws_recv(curl, buffer, sizeof(buffer), &rlen, &meta);
+ if(res)
+ printf("error: %s\\n", curl_easy_strerror(res));
+ }
+}
.fi
.SH AVAILABILITY
Added in 7.86.0.
.SH RETURN VALUE
+Returns \fBCURLE_OK\fP if everything is okay, and a non-zero number for
+errors. Returns \fBCURLE_GOT_NOTHING\fP if the associated connection is
+closed.
+Instead of blocking, the function returns \fBCURLE_AGAIN\fP. The correct
+behavior is then to wait for the socket to signal readability before calling
+this function again.
.SH "SEE ALSO"
-.BR curl_easy_setopt "(3), " curl_easy_perform "(3), "
-.BR curl_easy_getinfo "(3), "
-.BR curl_ws_send "(3) "
+.BR curl_easy_setopt (3),
+.BR curl_easy_perform (3),
+.BR curl_easy_getinfo (3),
+.BR curl_ws_send (3),
+.BR libcurl-ws (3)
diff --git a/docs/libcurl/curl_ws_send.3 b/docs/libcurl/curl_ws_send.3
index 628d358d7..5d674c570 100644
--- a/docs/libcurl/curl_ws_send.3
+++ b/docs/libcurl/curl_ws_send.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,13 +22,13 @@
.\" *
.\" **************************************************************************
.\"
-.TH curl_ws_send 3 "October 07, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH curl_ws_send 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
curl_ws_send - send WebSocket data
.SH SYNOPSIS
.nf
-#include <curl/easy.h>
+#include <curl/curl.h>
CURLcode curl_ws_send(CURL *curl, const void *buffer, size_t buflen,
size_t *sent, curl_off_t fragsize,
@@ -54,38 +54,59 @@ should be set to zero.
If \fBCURLWS_RAW_MODE\fP is enabled in \fICURLOPT_WS_OPTIONS(3)\fP, the
\fBflags\fP argument should be set to 0.
+To send a message consisting of multiple frames, set the \fICURLWS_CONT\fP bit
+in all frames except the final one.
.SH FLAGS
.IP CURLWS_TEXT
The buffer contains text data. Note that this makes a difference to WebSocket
-but libcurl itself will not make any verification of the content or
+but libcurl itself does not make any verification of the content or
precautions that you actually send valid UTF-8 content.
.IP CURLWS_BINARY
This is binary data.
.IP CURLWS_CONT
-This is not the final fragment of the message, which implies that there will
-be another fragment coming as part of the same message where this bit is not
-set.
+This is not the final fragment of the message, which implies that there is
+another fragment coming as part of the same message where this bit is not set.
.IP CURLWS_CLOSE
Close this transfer.
.IP CURLWS_PING
-This as a ping.
+This is a ping.
.IP CURLWS_PONG
-This as a pong.
+This is a pong.
.IP CURLWS_OFFSET
-The provided data is only a partial fragment and there will be more in a
+The provided data is only a partial fragment and there is more coming in a
following call to \fIcurl_ws_send()\fP. When sending only a piece of the
fragment like this, the \fIfragsize\fP must be provided with the total
expected fragment size in the first call and it needs to be zero in subsequent
calls.
.SH EXAMPLE
.nf
+#include <string.h> /* for strlen */
+const char *send_payload = "magic";
+
+int main(void)
+{
+ size_t sent;
+ CURLcode res;
+ CURL *curl = curl_easy_init();
+ curl_easy_setopt(curl, CURLOPT_URL, "wss://example.com/");
+ curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 2L);
+ curl_easy_perform(curl);
+ res = curl_ws_send(curl, send_payload, strlen(send_payload), &sent, 0,
+ CURLWS_PING);
+ curl_easy_cleanup(curl);
+ return (int)res;
+}
.fi
.SH AVAILABILITY
Added in 7.86.0.
.SH RETURN VALUE
-
+\fICURLE_OK\fP (zero) means that the data was sent properly, non-zero means an
+error occurred as \fI<curl/curl.h>\fP defines. See the \fIlibcurl-errors(3)\fP
+man page for the full list with descriptions.
.SH "SEE ALSO"
-.BR curl_easy_setopt "(3), " curl_easy_perform "(3), "
-.BR curl_easy_getinfo "(3), "
-.BR curl_ws_recv "(3) "
+.BR curl_easy_setopt (3),
+.BR curl_easy_perform (3),
+.BR curl_easy_getinfo (3),
+.BR curl_ws_recv (3),
+.BR libcurl-ws (3)
diff --git a/docs/libcurl/libcurl-easy.3 b/docs/libcurl/libcurl-easy.3
index d60f34816..70f9d303c 100644
--- a/docs/libcurl/libcurl-easy.3
+++ b/docs/libcurl/libcurl-easy.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH libcurl 3 "May 17, 2022" "libcurl 7.86.0" "libcurl easy interface"
+.TH libcurl 3 "September 26, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
libcurl-easy \- easy interface overview
@@ -33,13 +33,13 @@ interface functions you use. Use \fIcurl_easy_init(3)\fP to get the handle.
You continue by setting all the options you want in the upcoming transfer, the
most important among them is the URL itself (you cannot transfer anything
without a specified URL as you may have figured out yourself). You might want
-to set some callbacks as well that will be called from the library when data
-is available etc. \fIcurl_easy_setopt(3)\fP is used for all this.
+to set some callbacks as well that are called from the library when data is
+available etc. \fIcurl_easy_setopt(3)\fP is used for all this.
\fICURLOPT_URL(3)\fP is the only option you really must set, as otherwise
there can be no transfer. Another commonly used option is
-\fICURLOPT_VERBOSE(3)\fP that will help you see what libcurl is doing under
-the hood, which is useful when debugging for example. The
+\fICURLOPT_VERBOSE(3)\fP that helps you see what libcurl is doing under the
+hood, which is useful when debugging for example. The
\fIcurl_easy_setopt(3)\fP man page has a full index of the almost 300
available options.
@@ -49,8 +49,8 @@ make a clone of an easy handle (with all its set options) using
\fIcurl_easy_duphandle(3)\fP.
When all is setup, you tell libcurl to perform the transfer using
-\fIcurl_easy_perform(3)\fP. It will then do the entire operation and will not
-return until it is done (successfully or not).
+\fIcurl_easy_perform(3)\fP. It performs the entire transfer operation and does
+not return until it is done (successfully or not).
After the transfer has been made, you can set new options and make another
transfer, or if you are done, cleanup the session by calling
@@ -58,5 +58,9 @@ transfer, or if you are done, cleanup the session by calling
cleanup immediately, but instead run ahead and perform other transfers using
the same easy handle.
.SH "SEE ALSO"
-.BR curl_easy_init "(3)," curl_easy_cleanup "(3)," curl_easy_setopt "(3), "
-.BR libcurl-errors "(3), " libcurl-multi "(3), " libcurl "(3) "
+.BR curl_easy_init (3),
+.BR curl_easy_cleanup (3),
+.BR curl_easy_setopt (3),
+.BR libcurl-errors (3),
+.BR libcurl-multi (3),
+.BR libcurl (3)
diff --git a/docs/libcurl/libcurl-env-dbg.3 b/docs/libcurl/libcurl-env-dbg.3
new file mode 100644
index 000000000..2ecc3d93f
--- /dev/null
+++ b/docs/libcurl/libcurl-env-dbg.3
@@ -0,0 +1,98 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed 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
+.\" *
+.\" **************************************************************************
+.TH libcurl-env-dbg 3 "September 07, 2023" "libcurl 8.5.0" "libcurl"
+
+.SH NAME
+libcurl-env-dbg \- environment variables libcurl DEBUGBUILD understands
+.SH DESCRIPTION
+This is a set of variables only recognized and used if libcurl was built
+"debug enabled", which should never be true for a library used in production.
+These variables are intended for internal use only, subject to change and have
+many effects on the behavior of libcurl. Refer to the source code to determine
+how exactly they are being used.
+.RS
+.IP "CURL_ALTSVC_HTTP"
+Bypass the AltSvc HTTPS protocol restriction if this variable exists.
+.IP "CURL_DBG_SOCK_RBLOCK"
+The percentage of recv() calls that should be answered with a EAGAIN at random.
+For TCP/UNIX sockets.
+.IP "CURL_DBG_SOCK_RMAX"
+The maximum data that shall be received from the network in one recv() call.
+For TCP/UNIX sockets. This is applied to every recv.
+
+Example: \fBCURL_DBG_SOCK_RMAX=400\fP means recv buffer size is limited to a
+maximum of 400 bytes.
+.IP "CURL_DBG_SOCK_WBLOCK"
+The percentage of send() calls that should be answered with a EAGAIN at random.
+For TCP/UNIX sockets.
+.IP "CURL_DBG_SOCK_WPARTIAL"
+The percentage of data that shall be written to the network. For TCP/UNIX
+sockets. This is applied to every send.
+
+Example: \fBCURL_DBG_SOCK_WPARTIAL=80\fP means a send with 1000 bytes would
+only send 800.
+.IP "CURL_DBG_QUIC_WBLOCK"
+The percentage of send() calls that should be answered with EAGAIN at random.
+QUIC only.
+.IP "CURL_DEBUG"
+Trace logging behavior as an alternative to calling \fIcurl_global_trace(3)\fP.
+
+Example: \fBCURL_DEBUG=http/2\fP means trace details about HTTP/2 handling.
+.IP "CURL_DEBUG_SIZE"
+Fake the size returned by CURLINFO_HEADER_SIZE and CURLINFO_REQUEST_SIZE.
+.IP "CURL_GETHOSTNAME"
+Fake the local machine's unqualified hostname for NTLM and SMTP.
+.IP "CURL_HSTS_HTTP"
+Bypass the HSTS HTTPS protocol restriction if this variable exists.
+.IP "CURL_FORCETIME"
+A time of 0 is used for AWS signatures and NTLM if this variable exists.
+.IP "CURL_ENTROPY"
+A fixed faked value to use instead of a proper random number so that functions
+in libcurl that are otherwise getting random outputs can be tested for what
+they generate.
+.IP "CURL_SMALLREQSEND"
+An alternative size of HTTP data to be sent at a time only if smaller than the
+current.
+.IP "CURL_SMALLSENDS"
+An alternative size of socket data to be sent at a time only if smaller than
+the current.
+.IP "CURL_TIME"
+Fake unix timestamp to use for AltSvc, HSTS and CURLINFO variables that are
+time related.
+
+This variable can also be used to fake the data returned by some CURLINFO
+variables that are not time-related (such as CURLINFO_LOCAL_PORT), and in that
+case the value is not a timestamp.
+.IP "CURL_TRACE"
+LDAP tracing is enabled if this variable exists and its value is 1 or greater.
+
+OpenLDAP tracing is separate. Refer to CURL_OPENLDAP_TRACE.
+.IP "CURL_NTLM_WB_FILE"
+Debug-version of the \fIntlm-wb\fP executable.
+.IP "CURL_OPENLDAP_TRACE"
+OpenLDAP tracing is enabled if this variable exists and its value is 1 or
+greater. There's a number of debug levels, refer to \fIopenldap.c\fP comments.
+.RE
+.SH "SEE ALSO"
+.BR libcurl-env (3)
diff --git a/docs/libcurl/libcurl-env.3 b/docs/libcurl/libcurl-env.3
index 4560eb9af..30f2d8e1f 100644
--- a/docs/libcurl/libcurl-env.3
+++ b/docs/libcurl/libcurl-env.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 2018 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,37 +21,41 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH libcurl-env 3 "September 20, 2022" "libcurl 7.86.0" "libcurl environment variables"
+.TH libcurl-env 3 "September 07, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
libcurl-env \- environment variables libcurl understands
.SH DESCRIPTION
-libcurl reads and understands a set of environment variables that if set will
-control and change behaviors. This is the full list of variables to set and
+libcurl reads and understands a set of environment variables that if set
+controls and changes behaviors. This is the full list of variables to set and
description of what they do. Also note that curl, the command line tool,
supports a set of additional environment variables independently of this.
+.RS
.IP "[scheme]_proxy"
-When libcurl is given a URL to use in a transfer, it first extracts the
-"scheme" part from the URL and checks if there is a given proxy set for that
-in its corresponding environment variable. A URL like "https://example.com"
-will hence use the "http_proxy" variable, while a URL like "ftp://example.com"
-will use the "ftp_proxy" variable.
+When libcurl is given a URL to use in a transfer, it first extracts the scheme
+part from the URL and checks if there is a given proxy set for that in its
+corresponding environment variable. A URL like https://example.com makes
+libcurl use the \fBhttp_proxy\fP variable, while a URL like ftp://example.com
+uses the \fBftp_proxy\fP variable.
These proxy variables are also checked for in their uppercase versions, except
-the "http_proxy" one which is only used lowercase. Note also that some systems
-actually have a case insensitive handling of environment variables and then of
-course "HTTP_PROXY" will still work...
+the \fBhttp_proxy\fP one which is only used lowercase. Note also that some
+systems actually have a case insensitive handling of environment variables and
+then of course \fBHTTP_PROXY\fP still works.
+
+An exception exists for the WebSocket \fBws\fP and \fBwss\fP URL schemes,
+where libcurl first checks \fBws_proxy\fP or \fBwss_proxy\fP but if they are
+not set, it will fall back and try the http and https versions instead if set.
.IP ALL_PROXY
This is a setting to set proxy for all URLs, independently of what scheme is
-being used. Note that the scheme specific variables will override this one if
-set.
+being used. Note that the scheme specific variables overrides this one if set.
.IP CURL_SSL_BACKEND
-When libcurl is built to support multiple SSL backends, it will select a
-specific backend at first use. If no selection is done by the program using
-libcurl, this variable's selection will be used. Setting a name that is not a
-built-in alternative will make libcurl stay with the default.
+When libcurl is built to support multiple SSL backends, it selects a specific
+backend at first use. If no selection is done by the program using libcurl,
+this variable's selection is used. Setting a name that is not a built-in
+alternative makes libcurl stay with the default.
-SSL backend names (case-insensitive): BearSSL, GnuTLS, gskit, mbedTLS,
+SSL backend names (case-insensitive): BearSSL, GnuTLS, mbedTLS,
nss, OpenSSL, rustls, Schannel, Secure-Transport, wolfSSL
.IP HOME
When the netrc feature is used (\fICURLOPT_NETRC(3)\fP), this variable is
@@ -72,30 +76,18 @@ should not use a proxy.
User name to use when invoking the \fIntlm-wb\fP tool.
.IP SSLKEYLOGFILE
When set and libcurl runs with a SSL backend that supports this feature,
-libcurl will save SSL secrets into the given file name. Using those SSL
-secrets, other tools (such as Wireshark) can decrypt the SSL communication and
+libcurl saves SSL secrets into the given file name. Using those SSL secrets,
+other tools (such as Wireshark) can decrypt the SSL communication and
analyze/view the traffic.
-.IP SSL_DIR
-When libcurl runs with the NSS backends for TLS features, this variable is
-used to find the directory for NSS PKI database instead of the built-in.
+
+These secrets and this file might be sensitive. Users are advised to take
+precautions so that they are not stolen or otherwise inadvertently revealed.
.IP USER
User name to use when invoking the \fIntlm-wb\fP tool, if \fINTLMUSER\fP and
\fILOGNAME\fP were not set.
+.RE
.SH "Debug Variables"
-There's a set of variables only recognized and used if libcurl was built
-"debug enabled", which should never be true for a library used in production.
-.IP "CURL_GETHOSTNAME"
-Debug-only variable.
-.IP "CURL_FORCETIME"
-Debug-only variable.
-.IP "CURL_ENTROPY"
-Debug-only variable. Used to set a fixed faked value to use instead of a
-proper random number so that functions in libcurl that are otherwise getting
-random outputs can be tested for what they generate.
-.IP "CURL_TRACE"
-Debug-only variable. Used for debugging the lib/ldap implementation.
-.IP "CURL_NTLM_WB_FILE"
-Debug-only variable. Used to set to a debug-version of the \fIntlm-wb\fP
-executable.
-.IP "CURL_OPENLDAP_TRACE"
-Debug-only variable. Used for debugging the OpenLDAP implementation.
+Debug variables are intended for internal use and are documented in
+\fIlibcurl-env-dbg(3)\fP.
+.SH "SEE ALSO"
+.BR libcurl-env-dbg (3)
diff --git a/docs/libcurl/libcurl-errors.3 b/docs/libcurl/libcurl-errors.3
index 500f4a628..c4637557d 100644
--- a/docs/libcurl/libcurl-errors.3
+++ b/docs/libcurl/libcurl-errors.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH libcurl-errors 3 "September 20, 2022" "libcurl 7.86.0" "libcurl errors"
+.TH libcurl-errors 3 "November 28, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
libcurl-errors \- error codes in libcurl
@@ -32,8 +32,8 @@ Why they occur and possibly what you can do to fix the problem are also included
.SH "CURLcode"
Almost all "easy" interface functions return a CURLcode error code. No matter
what, using the \fIcurl_easy_setopt(3)\fP option \fICURLOPT_ERRORBUFFER(3)\fP
-is a good idea as it will give you a human readable error string that may
-offer more details about the cause of the error than just the error code.
+is a good idea as it gives you a human readable error string that may offer
+more details about the cause of the error than just the error code.
\fIcurl_easy_strerror(3)\fP can be called to get an error string from a given
CURLcode number.
@@ -63,7 +63,7 @@ Could not resolve host. The given remote host was not resolved.
.IP "CURLE_COULDNT_CONNECT (7)"
Failed to connect() to host or proxy.
.IP "CURLE_WEIRD_SERVER_REPLY (8)"
-The server sent data libcurl could not parse. This error code was known as as
+The server sent data libcurl could not parse. This error code was known as
\fICURLE_FTP_WEIRD_SERVER_REPLY\fP before 7.51.0.
.IP "CURLE_REMOTE_ACCESS_DENIED (9)"
We were denied access to the resource given in the URL. For FTP, this occurs
@@ -229,7 +229,7 @@ Illegal TFTP operation.
.IP "CURLE_TFTP_UNKNOWNID (72)"
Unknown TFTP transfer ID.
.IP "CURLE_REMOTE_FILE_EXISTS (73)"
-File already exists and will not be overwritten.
+File already exists and is not overwritten.
.IP "CURLE_TFTP_NOSUCHUSER (74)"
This error should never be returned by a properly functioning TFTP server.
.IP "Obsolete error (75-76)"
@@ -253,8 +253,8 @@ Issuer check failed (Added in 7.19.0)
.IP "CURLE_FTP_PRET_FAILED (84)"
The FTP server does not understand the PRET command at all or does not support
the given argument. Be careful when using \fICURLOPT_CUSTOMREQUEST(3)\fP, a
-custom LIST command will be sent with the PRET command before PASV as
-well. (Added in 7.20.0)
+custom LIST command is sent with the PRET command before PASV as well. (Added
+in 7.20.0)
.IP "CURLE_RTSP_CSEQ_ERROR (85)"
Mismatch of RTSP CSeq numbers.
.IP "CURLE_RTSP_SESSION_ERROR (86)"
@@ -264,8 +264,8 @@ Unable to parse FTP file list (during FTP wildcard downloading).
.IP "CURLE_CHUNK_FAILED (88)"
Chunk callback reported error.
.IP "CURLE_NO_CONNECTION_AVAILABLE (89)"
-(For internal use only, will never be returned by libcurl) No connection
-available, the session will be queued. (added in 7.30.0)
+(For internal use only, is never returned by libcurl) No connection available,
+the session is queued. (added in 7.30.0)
.IP "CURLE_SSL_PINNEDPUBKEYNOTMATCH (90)"
Failed to match the pinned key specified with \fICURLOPT_PINNEDPUBLICKEY(3)\fP.
.IP "CURLE_SSL_INVALIDCERTSTATUS (91)"
@@ -289,9 +289,6 @@ the specific problem.
SSL Client Certificate required.
.IP "CURLE_UNRECOVERABLE_POLL (99)"
An internal call to poll() or select() returned error that is not recoverable.
-.IP "CURLE_OBSOLETE*"
-These error codes will never be returned. They were used in an old libcurl
-version and are currently unused.
.SH "CURLMcode"
This is the generic return code used by functions in the libcurl multi
interface. Also consider \fIcurl_multi_strerror(3)\fP.
@@ -301,9 +298,6 @@ This is not really an error. It means you should call
between. Before version 7.20.0 (released on February 9 2010) this could be returned by
\fIcurl_multi_perform(3)\fP, but in later versions this return code is never
used.
-.IP "CURLM_CALL_MULTI_SOCKET (-1)"
-An alias for \fICURLM_CALL_MULTI_PERFORM\fP. Never returned by modern libcurl
-versions.
.IP "CURLM_OK (0)"
Things are fine.
.IP "CURLM_BAD_HANDLE (1)"
@@ -336,8 +330,8 @@ A multi handle callback returned error.
.IP "CURLM_UNRECOVERABLE_POLL (12)"
An internal call to poll() or select() returned error that is not recoverable.
.SH "CURLSHcode"
-The "share" interface will return a \fBCURLSHcode\fP to indicate when an error
-has occurred. Also consider \fIcurl_share_strerror(3)\fP.
+The "share" interface returns a \fBCURLSHcode\fP to indicate when an error has
+occurred. Also consider \fIcurl_share_strerror(3)\fP.
.IP "CURLSHE_OK (0)"
All fine. Proceed as usual.
.IP "CURLSHE_BAD_OPTION (1)"
@@ -353,8 +347,10 @@ Not enough memory was available.
The requested sharing could not be done because the library you use do not have
that particular feature enabled. (Added in 7.23.0)
.SH "CURLUcode"
-The URL interface will return a \fICURLUcode\fP to indicate when an error has
+The URL interface returns a \fICURLUcode\fP to indicate when an error has
occurred. Also consider \fIcurl_url_strerror(3)\fP.
+.IP "CURLUE_OK (0)"
+All fine. Proceed as usual.
.IP "CURLUE_BAD_HANDLE (1)"
An invalid URL handle was passed as argument.
.IP "CURLUE_BAD_PARTPOINTER (2)"
@@ -413,8 +409,32 @@ The scheme part of the URL contained bad or invalid characters.
The URL contained an invalid number of slashes.
.IP "CURLUE_BAD_USER (29)"
The user part of the URL contained bad or invalid characters.
+.IP "CURLUE_LACKS_IDN (30)"
+libcurl lacks IDN support.
+.SH "CURLHcode"
+The header interface returns a \fICURLHcode\fP to indicate when an error has
+occurred.
+.IP "CURLHE_OK (0)"
+All fine. Proceed as usual.
+.IP "CURLHE_BADINDEX (1)"
+There is no header with the requested index.
+.IP "CURLHE_MISSING (2)"
+No such header exists.
+.IP "CURLHE_NOHEADERS (3)"
+No headers at all have been recorded.
+.IP "CURLHE_NOREQUEST (4)"
+There was no such request number.
+.IP "CURLHE_OUT_OF_MEMORY (5)"
+Out of resources
+.IP "CURLHE_BAD_ARGUMENT (6)"
+One or more of the given arguments are bad.
+.IP "CURLHE_NOT_BUILT_IN (7)"
+HTTP support or the header API has been disabled in the build.
.SH "SEE ALSO"
-.BR curl_easy_strerror "(3), " curl_multi_strerror "(3), "
-.BR curl_share_strerror "(3), " curl_url_strerror "(3), "
-.BR CURLOPT_ERRORBUFFER "(3), " CURLOPT_VERBOSE "(3), "
-.BR CURLOPT_DEBUGFUNCTION "(3)"
+.BR curl_easy_strerror (3),
+.BR curl_multi_strerror (3),
+.BR curl_share_strerror (3),
+.BR curl_url_strerror (3),
+.BR CURLOPT_ERRORBUFFER (3),
+.BR CURLOPT_VERBOSE (3),
+.BR CURLOPT_DEBUGFUNCTION (3)
diff --git a/docs/libcurl/libcurl-multi.3 b/docs/libcurl/libcurl-multi.3
index f49eb976f..e7446054d 100644
--- a/docs/libcurl/libcurl-multi.3
+++ b/docs/libcurl/libcurl-multi.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,14 +22,14 @@
.\" *
.\" **************************************************************************
.\"
-.TH libcurl-multi 3 "September 20, 2022" "libcurl 7.86.0" "libcurl multi interface"
+.TH libcurl-multi 3 "September 26, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
libcurl-multi \- how to use the multi interface
.SH DESCRIPTION
This is an overview on how to use the libcurl multi interface in your C
programs. There are specific man pages for each function mentioned in
-here. There's also the \fIlibcurl-tutorial(3)\fP man page for a complete
+here. There is also the \fIlibcurl-tutorial(3)\fP man page for a complete
tutorial to programming with libcurl and the \fIlibcurl-easy(3)\fP man page
for an overview of the libcurl easy interface.
@@ -60,8 +60,8 @@ handle. You create all the easy handles you need, and setup the appropriate
options for each easy handle using \fIcurl_easy_setopt(3)\fP.
There are two flavors of the multi interface, the select() oriented one and
-the event based one we call multi_socket. You will benefit from reading
-through the description of both versions to fully understand how they work and
+the event based one we call multi_socket. You benefit from reading through the
+description of both versions to fully understand how they work and
differentiate. We start out with the select() oriented version.
When an easy handle is setup and ready for transfer, then instead of using
@@ -79,17 +79,17 @@ necessary. You can remove handles at any point during transfers.
Adding the easy handle to the multi handle does not start the transfer.
Remember that one of the main ideas with this interface is to let your
application drive. You drive the transfers by invoking
-\fIcurl_multi_perform(3)\fP. libcurl will then transfer data if there is
-anything available to transfer. it will use the callbacks and everything else
-you have setup in the individual easy handles. it will transfer data on all
-current transfers in the multi stack that are ready to transfer anything. It
-may be all, it may be none. When there's nothing more to do for now, it
-returns back to the calling application.
+\fIcurl_multi_perform(3)\fP. libcurl then transfers data if there is anything
+available to transfer. It uses the callbacks and everything else you have
+setup in the individual easy handles. It transfers data on all current
+transfers in the multi stack that are ready to transfer anything. It may be
+all, it may be none. When there is nothing more to do for now, it returns back
+to the calling application.
Your application extracts info from libcurl about when it would like to get
invoked to transfer data or do other work. The most convenient way is to use
-\fIcurl_multi_poll(3)\fP that will help you wait until the application should
-call libcurl again. The older API to accomplish the same thing is
+\fIcurl_multi_poll(3)\fP that helps you wait until the application should call
+libcurl again. The older API to accomplish the same thing is
\fIcurl_multi_fdset(3)\fP that extracts \fIfd_sets\fP from libcurl to use in
select() or poll() calls in order to get to know when the transfers in the
multi stack might need attention. Both these APIs allow for your program to
@@ -120,13 +120,13 @@ When all transfers in the multi stack are done, close the multi handle with
invoke separate \fIcurl_easy_cleanup(3)\fP calls for every single easy handle
to clean them up properly.
-If you want to re-use an easy handle that was added to the multi handle for
+If you want to reuse an easy handle that was added to the multi handle for
transfer, you must first remove it from the multi stack and then re-add it
again (possibly after having altered some options at your own choice).
.SH "MULTI_SOCKET"
\fIcurl_multi_socket_action(3)\fP function offers a way for applications to
not only avoid being forced to use select(), but it also offers a much more
-high-performance API that will make a significant difference for applications
+high-performance API that makes a significant difference for applications
using large numbers of simultaneous connections.
\fIcurl_multi_socket_action(3)\fP is then used instead of
@@ -136,9 +136,9 @@ When using this API, you add easy handles to the multi handle just as with the
normal multi interface. Then you also set two callbacks with the
\fICURLMOPT_SOCKETFUNCTION(3)\fP and \fICURLMOPT_TIMERFUNCTION(3)\fP options
to \fIcurl_multi_setopt(3)\fP. They are two callback functions that libcurl
-will call with information about what sockets to wait for, and for what
-activity, and what the current timeout time is - if that expires libcurl
-should be notified.
+calls with information about what sockets to wait for, and for what activity,
+and what the current timeout time is - if that expires libcurl should be
+notified.
The multi_socket API is designed to inform your application about which
sockets libcurl is currently using and for what activities (read and/or write)
@@ -162,10 +162,10 @@ losing performance.
When you have added your initial set of handles, you call
\fIcurl_multi_socket_action(3)\fP with CURL_SOCKET_TIMEOUT set in the
-\fIsockfd\fP argument, and you will get callbacks call that sets you up and
-you then continue to call \fIcurl_multi_socket_action(3)\fP accordingly when
-you get activity on the sockets you have been asked to wait on, or if the
-timeout timer expires.
+\fIsockfd\fP argument, and you get callbacks invoked that set you up and you
+then continue to call \fIcurl_multi_socket_action(3)\fP accordingly when you
+get activity on the sockets you have been asked to wait on, or if the timeout
+timer expires.
You can poll \fIcurl_multi_info_read(3)\fP to see if any transfer has
completed, as it then has a message saying so.
@@ -180,4 +180,6 @@ the future, you should be aware of the following current restrictions:
- TELNET transfers
.fi
.SH "SEE ALSO"
-.BR libcurl-errors "(3), " libcurl-easy "(3), " libcurl "(3) "
+.BR libcurl-errors (3),
+.BR libcurl-easy (3),
+.BR libcurl (3)
diff --git a/docs/libcurl/libcurl-security.3 b/docs/libcurl/libcurl-security.3
index e7536cb5d..5e82155ff 100644
--- a/docs/libcurl/libcurl-security.3
+++ b/docs/libcurl/libcurl-security.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH libcurl-security 3 "September 20, 2022" "libcurl 7.86.0" "libcurl security"
+.TH libcurl-security 3 "December 01, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
libcurl-security \- security considerations when using libcurl
@@ -57,8 +57,8 @@ this.
automatically to frequently visited sites. The file contains passwords in
clear text and is a real security risk. In some cases, your .netrc is also
stored in a home directory that is NFS mounted or used on another network
-based file system, so the clear text password will fly through your network
-every time anyone reads that file.
+based file system, so the clear text password flies through your network every
+time anyone reads that file.
For applications that enable .netrc use, a user who manage to set the right
URL might then be possible to pass on passwords.
@@ -69,7 +69,7 @@ plain text anywhere.
Many of the protocols libcurl supports send name and password unencrypted as
clear text (HTTP Basic authentication, FTP, TELNET etc). It is easy for anyone
on your network or a network nearby yours to just fire up a network analyzer
-tool and eavesdrop on your passwords. do not let the fact that HTTP Basic uses
+tool and eavesdrop on your passwords. Do not let the fact that HTTP Basic uses
base64 encoded passwords fool you. They may not look readable at a first
glance, but they are easily "deciphered" by anyone within seconds.
@@ -136,8 +136,8 @@ function in which addresses are sanitized before use.
For all options in libcurl which specify headers, including but not limited to
\fICURLOPT_HTTPHEADER(3)\fP, \fICURLOPT_PROXYHEADER(3)\fP,
\fICURLOPT_COOKIE(3)\fP, \fICURLOPT_USERAGENT(3)\fP, \fICURLOPT_REFERER(3)\fP
-and \fICURLOPT_RANGE(3)\fP, libcurl will send the headers as-is and will not
-apply any special sanitation or normalization to them.
+and \fICURLOPT_RANGE(3)\fP, libcurl sends the headers as-is and does not apply
+any special sanitation or normalization to them.
If you allow untrusted user input into these options without sanitizing CRLF
sequences in them, someone malicious may be able to modify the request in a
@@ -181,18 +181,18 @@ idea because of the many different ways a numerical IPv4 address can be
specified and libcurl accepts: one to four dot-separated fields using one of
or a mix of decimal, octal or hexadecimal encoding.
.SH "IPv6 Addresses"
-libcurl will normally handle IPv6 addresses transparently and just as easily
-as IPv4 addresses. That means that a sanitizing function that filters out
-addresses like 127.0.0.1 is not sufficient--the equivalent IPv6 addresses
-\fB::1\fP, \fB::\fP, \fB0:00::0:1\fP, \fB::127.0.0.1\fP and
-\fB::ffff:7f00:1\fP supplied somehow by an attacker would all bypass a naive
-filter and could allow access to undesired local resources. IPv6 also has
-special address blocks like link-local and site-local that generally should
-not be accessed by a server-side libcurl-using application. A poorly
-configured firewall installed in a data center, organization or server may
-also be configured to limit IPv4 connections but leave IPv6 connections wide
-open. In some cases, setting \fICURLOPT_IPRESOLVE(3)\fP to CURL_IPRESOLVE_V4
-can be used to limit resolved addresses to IPv4 only and bypass these issues.
+libcurl handles IPv6 addresses transparently and just as easily as IPv4
+addresses. That means that a sanitizing function that filters out addresses
+like 127.0.0.1 is not sufficient - the equivalent IPv6 addresses \fB::1\fP,
+\fB::\fP, \fB0:00::0:1\fP, \fB::127.0.0.1\fP and \fB::ffff:7f00:1\fP supplied
+somehow by an attacker would all bypass a naive filter and could allow access
+to undesired local resources. IPv6 also has special address blocks like
+link-local and site-local that generally should not be accessed by a
+server-side libcurl-using application. A poorly configured firewall installed
+in a data center, organization or server may also be configured to limit IPv4
+connections but leave IPv6 connections wide open. In some cases, setting
+\fICURLOPT_IPRESOLVE(3)\fP to CURL_IPRESOLVE_V4 can be used to limit resolved
+addresses to IPv4 only and bypass these issues.
.SH Uploads
When uploading, a redirect can cause a local (or remote) file to be
overwritten. Applications must not allow any unsanitized URL to be passed in
@@ -237,10 +237,10 @@ using the protocol.
By default, libcurl prohibits redirects to file:// URLs.
.SH "Warning: file:// on Windows"
-The Windows operating system will automatically, and without any way for
-applications to disable it, try to establish a connection to another host over
-the network and access it (over SMB or other protocols), if only the correct
-file path is accessed.
+The Windows operating system tries automatically, and without any way for
+applications to disable it, to establish a connection to another host over the
+network and access it (over SMB or other protocols), if only the correct file
+path is accessed.
When first realizing this, the curl team tried to filter out such attempts in
order to protect applications for inadvertent probes of for example internal
@@ -254,13 +254,13 @@ system.
The conclusion we have come to is that this is a weakness or feature in the
Windows operating system itself, that we as an application cannot safely
protect users against. It would just be a whack-a-mole race we do not want to
-participate in. There are too many ways to do it and there's no knob we can
+participate in. There are too many ways to do it and there is no knob we can
use to turn off the practice.
If you use curl or libcurl on Windows (any version), disable the use of the
FILE protocol in curl or be prepared that accesses to a range of "magic paths"
-will potentially make your system try to access other hosts on your
-network. curl cannot protect you against this.
+potentially make your system access other hosts on your network. curl cannot
+protect you against this.
.SH "What if the user can set the URL"
Applications may find it tempting to let users set the URL that it can work
on. That is probably fine, but opens up for mischief and trickery that you as
@@ -312,7 +312,7 @@ given IP+PORT, or with PASV/EPSV that makes the server setup a port to listen
to and tells the client to connect to a given IP+PORT.
Again, unauthenticated means that the connection might be meddled with by a
-man-in-the-middle or that there's a malicious server pretending to be the
+man-in-the-middle or that there is a malicious server pretending to be the
right one.
A malicious FTP server can respond to PASV commands with the IP+PORT of a
@@ -398,19 +398,19 @@ etc), it should be noted that libcurl still might understand proxy environment
variables that allow the user to redirect libcurl operations to use a proxy
controlled by the user.
.SH "File descriptors, fork and NTLM"
-An application that uses libcurl and invokes \fIfork()\fP will get all file
+An application that uses libcurl and invokes \fIfork()\fP gets all file
descriptors duplicated in the child process, including the ones libcurl
created.
libcurl itself uses \fIfork()\fP and \fIexecl()\fP if told to use the
-\fBCURLAUTH_NTLM_WB\fP authentication method which then will invoke the helper
+\fBCURLAUTH_NTLM_WB\fP authentication method which then invokes the helper
command in a child process with file descriptors duplicated. Make sure that
only the trusted and reliable helper program is invoked!
.SH "Secrets in memory"
When applications pass user names, passwords or other sensitive data to
-libcurl to be used for upcoming transfers, those secrets will be kept around
-as-is in memory. In many cases they will be stored in heap for as long as the
-handle itself for which the options are set.
+libcurl to be used for upcoming transfers, those secrets are kept around as-is
+in memory. In many cases they are stored in the heap for as long as the handle
+itself for which the options are set.
If an attacker can access the heap, like maybe by reading swap space or via a
core dump file, such data might be accessible.
@@ -418,6 +418,9 @@ core dump file, such data might be accessible.
Further, when eventually closing a handle and the secrets are no longer
needed, libcurl does not explicitly clear memory before freeing it, so
credentials may be left in freed data.
+.SH "Saving files"
+libcurl cannot protect against attacks where an attacker has write access to
+the same directory where libcurl is directed to save files.
.SH "Report Security Problems"
Should you detect or just suspect a security problem in libcurl or curl,
contact the project curl security team immediately. See
diff --git a/docs/libcurl/libcurl-share.3 b/docs/libcurl/libcurl-share.3
index 2eb618159..a72972d62 100644
--- a/docs/libcurl/libcurl-share.3
+++ b/docs/libcurl/libcurl-share.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH libcurl-share 3 "May 17, 2022" "libcurl 7.86.0" "libcurl share interface"
+.TH libcurl-share 3 "September 27, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
libcurl-share \- how to use the share interface
@@ -38,7 +38,7 @@ The share interface was added to enable sharing of data between curl
.SH "ONE SET OF DATA - MANY TRANSFERS"
You can have multiple easy handles share data between them. Have them update
and use the \fBsame\fP cookie database, DNS cache, TLS session cache and/or
-connection cache! This way, each single transfer will take advantage from data
+connection cache! This way, each single transfer takes advantage from data
updates made by the other transfer(s).
.SH "SHARE OBJECT"
You create a shared object with \fIcurl_share_init(3)\fP. It returns a handle
@@ -59,10 +59,14 @@ handle.
To make an easy handle stop using that particular share, you set
\fICURLOPT_SHARE(3)\fP to NULL for that easy handle. To make a handle stop
-sharing a particular data, you can \fICURLSHOPT_UNSHARE\fP it.
+sharing a particular data, you can \fICURLSHOPT_UNSHARE(3)\fP it.
When you are done using the share, make sure that no easy handle is still using
it, and call \fIcurl_share_cleanup(3)\fP on the handle.
.SH "SEE ALSO"
-.BR curl_share_init "(3), " curl_share_setopt "(3), " curl_share_cleanup "(3)"
-.BR libcurl-errors "(3), " libcurl-easy "(3), " libcurl-multi "(3) "
+.BR curl_share_init (3),
+.BR curl_share_setopt (3),
+.BR curl_share_cleanup (3),
+.BR libcurl-errors (3),
+.BR libcurl-easy (3),
+.BR libcurl-multi (3)
diff --git a/docs/libcurl/libcurl-symbols.3 b/docs/libcurl/libcurl-symbols.3
index 8484b2efd..95b9bf7b5 100644
--- a/docs/libcurl/libcurl-symbols.3
+++ b/docs/libcurl/libcurl-symbols.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH libcurl-symbols 3 "Oct 26, 2022" "libcurl 7.41.0" "libcurl symbols"
+.TH libcurl-symbols 3 "Dec 6, 2023" "libcurl" "libcurl"
.SH NAME
libcurl-symbols \- libcurl symbol version information
.SH "libcurl symbols"
@@ -59,6 +59,8 @@ Introduced in 7.16.3
Introduced in 7.16.3
.IP CURL_CSELECT_OUT
Introduced in 7.16.3
+.IP CURL_DEPRECATED
+Introduced in 7.87.0
.IP CURL_DID_MEMORY_FUNC_TYPEDEFS
Introduced in 7.49.0
.IP CURL_EASY_NONE
@@ -125,6 +127,8 @@ Introduced in 7.49.0
Introduced in 7.47.0
.IP CURL_HTTP_VERSION_3
Introduced in 7.66.0
+.IP CURL_HTTP_VERSION_3ONLY
+Introduced in 7.88.0
.IP CURL_HTTP_VERSION_NONE
Introduced in 7.9.1
.IP CURL_HTTPPOST_BUFFER
@@ -143,6 +147,8 @@ Introduced in 7.46.0
Introduced in 7.46.0
.IP CURL_HTTPPOST_READFILE
Introduced in 7.46.0
+.IP CURL_IGNORE_DEPRECATION
+Introduced in 7.87.0
.IP CURL_IPRESOLVE_V4
Introduced in 7.10.8
.IP CURL_IPRESOLVE_V6
@@ -163,6 +169,8 @@ Introduced in 7.10.3
Introduced in 7.10.3
.IP CURL_LOCK_DATA_DNS
Introduced in 7.10.3
+.IP CURL_LOCK_DATA_HSTS
+Introduced in 7.88.0
.IP CURL_LOCK_DATA_NONE
Introduced in 7.10.3
.IP CURL_LOCK_DATA_PSL
@@ -397,6 +405,8 @@ Introduced in 7.28.0
Introduced in 7.28.0
.IP CURL_WIN32
Introduced in 7.69.0
+.IP CURL_WRITEFUNC_ERROR
+Introduced in 7.87.0
.IP CURL_WRITEFUNC_PAUSE
Introduced in 7.18.0
.IP CURL_ZERO_TERMINATED
@@ -440,16 +450,22 @@ Introduced in 7.22.0
Introduced in 7.21.3
.IP CURLCLOSEPOLICY_CALLBACK
Introduced in 7.7
+Deprecated since 7.16.1
.IP CURLCLOSEPOLICY_LEAST_RECENTLY_USED
Introduced in 7.7
+Deprecated since 7.16.1
.IP CURLCLOSEPOLICY_LEAST_TRAFFIC
Introduced in 7.7
+Deprecated since 7.16.1
.IP CURLCLOSEPOLICY_NONE
Introduced in 7.7
+Deprecated since 7.16.1
.IP CURLCLOSEPOLICY_OLDEST
Introduced in 7.7
+Deprecated since 7.16.1
.IP CURLCLOSEPOLICY_SLOWEST
Introduced in 7.7
+Deprecated since 7.16.1
.IP CURLE_ABORTED_BY_CALLBACK
Introduced in 7.1
.IP CURLE_AGAIN
@@ -916,6 +932,8 @@ Introduced in 7.84.0
Introduced in 7.19.1
.IP CURLINFO_CONDITION_UNMET
Introduced in 7.19.4
+.IP CURLINFO_CONN_ID
+Introduced in 8.2.0
.IP CURLINFO_CONNECT_TIME
Introduced in 7.4.1
.IP CURLINFO_CONNECT_TIME_T
@@ -1090,6 +1108,8 @@ Introduced in 7.4.1
Introduced in 7.61.0
.IP CURLINFO_TYPEMASK
Introduced in 7.4.1
+.IP CURLINFO_XFER_ID
+Introduced in 8.2.0
.IP CURLIOCMD_NOP
Introduced in 7.12.3
.IP CURLIOCMD_RESTARTREAD
@@ -1224,6 +1244,8 @@ Introduced in 7.4.2
Introduced in 7.77.0
.IP CURLOPT_CAPATH
Introduced in 7.9.8
+.IP CURLOPT_CA_CACHE_TIMEOUT
+Introduced in 7.87.0
.IP CURLOPT_CERTINFO
Introduced in 7.19.1
.IP CURLOPT_CHUNK_BGN_FUNCTION
@@ -1384,6 +1406,8 @@ Introduced in 7.22.0
Introduced in 7.59.0
.IP CURLOPT_HAPROXYPROTOCOL
Introduced in 7.60.0
+.IP CURLOPT_HAPROXY_CLIENT_IP
+Introduced in 8.2.0
.IP CURLOPT_HEADER
Introduced in 7.1
.IP CURLOPT_HEADERDATA
@@ -1481,6 +1505,11 @@ Introduced in 7.20.0
Introduced in 7.20.0
.IP CURLOPT_MAIL_RCPT_ALLLOWFAILS
Introduced in 7.69.0
+Deprecated since 8.2.0
+.IP CURLOPT_MAIL_RCPT_ALLOWFAILS
+Introduced in 8.2.0
+.IP CURLOPT_QUICK_EXIT
+Introduced in 7.87.0
.IP CURLOPT_MAX_RECV_SPEED_LARGE
Introduced in 7.15.5
.IP CURLOPT_MAX_SEND_SPEED_LARGE
@@ -1903,6 +1932,8 @@ Introduced in 7.32.0
Introduced in 7.32.0
.IP CURLOPT_XOAUTH2_BEARER
Introduced in 7.33.0
+.IP CURLOPTDEPRECATED
+Introduced in 7.87.0
.IP CURLOPTTYPE_BLOB
Introduced in 7.71.0
.IP CURLOPTTYPE_CBPOINT
@@ -2027,6 +2058,8 @@ Introduced in 7.10
Introduced in 7.19.4
.IP CURLPROXY_HTTPS
Introduced in 7.52.0
+.IP CURLPROXY_HTTPS2
+Introduced in 8.1.0
.IP CURLPROXY_SOCKS4
Introduced in 7.10
.IP CURLPROXY_SOCKS4A
@@ -2149,6 +2182,8 @@ Introduced in 7.16.1
Introduced in 7.16.1
.IP CURLSSH_AUTH_PUBLICKEY
Introduced in 7.16.1
+.IP CURLSSLBACKEND_AWSLC
+Introduced in 8.1.0
.IP CURLSSLBACKEND_AXTLS
Introduced in 7.38.0
Deprecated since 7.61.0
@@ -2236,6 +2271,10 @@ Introduced in 7.62.0
Introduced in 7.62.0
.IP CURLU_PATH_AS_IS
Introduced in 7.62.0
+.IP CURLU_PUNY2IDN
+Introduced in 8.3.0
+.IP CURLU_PUNYCODE
+Introduced in 7.88.0
.IP CURLU_URLDECODE
Introduced in 7.62.0
.IP CURLU_URLENCODE
@@ -2268,6 +2307,8 @@ Introduced in 7.81.0
Introduced in 7.81.0
.IP CURLUE_BAD_USER
Introduced in 7.81.0
+.IP CURLUE_LACKS_IDN
+Introduced in 7.88.0
.IP CURLUE_MALFORMED_INPUT
Introduced in 7.62.0
.IP CURLUE_NO_FRAGMENT
@@ -2332,6 +2373,8 @@ Introduced in 7.17.0
Introduced in 7.17.0
.IP CURLVERSION_EIGHTH
Introduced in 7.72.0
+.IP CURLVERSION_ELEVENTH
+Introduced in 7.87.0
.IP CURLVERSION_FIFTH
Introduced in 7.57.0
.IP CURLVERSION_FIRST
diff --git a/docs/libcurl/libcurl-thread.3 b/docs/libcurl/libcurl-thread.3
index 559d3288f..9cbdc164d 100644
--- a/docs/libcurl/libcurl-thread.3
+++ b/docs/libcurl/libcurl-thread.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 2015 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH libcurl-thread 3 "September 20, 2022" "libcurl 7.86.0" "libcurl thread safety"
+.TH libcurl-thread 3 "October 30, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
libcurl-thread \- libcurl thread safety
@@ -31,70 +31,51 @@ libcurl is thread safe but has no internal thread synchronization. You may have
to provide your own locking should you meet any of the thread safety exceptions
below.
-\fBHandles.\fP You must \fBnever\fP share the same handle in multiple threads.
-You can pass the handles around among threads, but you must never use a single
-handle from more than one thread at any given time.
-
-\fBShared objects.\fP You can share certain data between multiple handles by
-using the share interface but you must provide your own locking and set
+.SH "Handles"
+You must \fBnever\fP share the same handle in multiple threads. You can pass
+the handles around among threads, but you must never use a single handle from
+more than one thread at any given time.
+.SH "Shared objects"
+You can share certain data between multiple handles by using the share
+interface but you must provide your own locking and set
\fIcurl_share_setopt(3)\fP CURLSHOPT_LOCKFUNC and CURLSHOPT_UNLOCKFUNC.
-.SH TLS
-If you are accessing HTTPS or FTPS URLs in a multi-threaded manner, you are
-then of course using the underlying SSL library multi-threaded and those libs
-might have their own requirements on this issue. You may need to provide one
-or two functions to allow it to function properly:
-.IP OpenSSL
-OpenSSL 1.1.0+ "can be safely used in multi-threaded applications provided that
-support for the underlying OS threading API is built-in." In that case the
-engine is used by libcurl in a way that is fully thread-safe.
-
-https://www.openssl.org/docs/man1.1.0/man3/CRYPTO_THREAD_run_once.html#DESCRIPTION
-
-OpenSSL <= 1.0.2 the user must set callbacks.
-
-https://www.openssl.org/docs/man1.0.2/man3/CRYPTO_set_locking_callback.html#DESCRIPTION
-https://curl.se/libcurl/c/opensslthreadlock.html
-
-.IP GnuTLS
-https://gnutls.org/manual/html_node/Thread-safety.html
-.IP NSS
-thread-safe already without anything required.
-.IP Secure-Transport
-The engine is used by libcurl in a way that is fully thread-safe.
-.IP Schannel
-The engine is used by libcurl in a way that is fully thread-safe.
-.IP wolfSSL
-The engine is used by libcurl in a way that is fully thread-safe.
-.IP BoringSSL
-The engine is used by libcurl in a way that is fully thread-safe.
-.SH "Other areas of caution"
-.IP Signals
+Note that some items are specifically documented as not thread-safe in the
+share API (the connection pool and HSTS cache for example).
+.SH TLS
+All current TLS libraries libcurl supports are thread-safe. OpenSSL 1.1.0+ can
+be safely used in multi-threaded applications provided that support for the
+underlying OS threading API is built-in. For older versions of OpenSSL, the
+user must set mutex callbacks.
+.SH "Signals"
Signals are used for timing out name resolves (during DNS lookup) - when built
-without using either the c-ares or threaded resolver backends. When using
-multiple threads you should set the \fICURLOPT_NOSIGNAL(3)\fP option to 1L for
-all handles. Everything will or might work fine except that timeouts are not
-honored during the DNS lookup - which you can work around by building libcurl
-with c-ares or threaded-resolver support. c-ares is a library that provides
-asynchronous name resolves. On some platforms, libcurl simply will not
+without using either the c-ares or threaded resolver backends. On systems that
+have a signal concept.
+
+When using multiple threads you should set the \fICURLOPT_NOSIGNAL(3)\fP
+option to 1L for all handles. Everything works fine except that timeouts
+cannot be honored during DNS lookups - which you can work around by building
+libcurl with c-ares or threaded-resolver support. c-ares is a library that
+provides asynchronous name resolves. On some platforms, libcurl simply cannot
function properly multi-threaded unless the \fICURLOPT_NOSIGNAL(3)\fP option
is set.
When \fICURLOPT_NOSIGNAL(3)\fP is set to 1L, your application needs to deal
with the risk of a SIGPIPE (that at least the OpenSSL backend can
-trigger). Note that setting \fICURLOPT_NOSIGNAL(3)\fP to 0L will not work in a
-threaded situation as there will be race where libcurl risks restoring the
-former signal handler while another thread should still ignore it.
-.IP "Name resolving"
-\fBgethostby* functions and other system calls.\fP These functions, provided
-by your operating system, must be thread safe. It is important that libcurl
-can find and use thread safe versions of these and other system calls, as
-otherwise it cannot function fully thread safe. Some operating systems are
-known to have faulty thread implementations. We have previously received
-problem reports on *BSD (at least in the past, they may be working fine these
-days). Some operating systems that are known to have solid and working thread
-support are Linux, Solaris and Windows.
-.IP "curl_global_* functions"
+trigger). Note that setting \fICURLOPT_NOSIGNAL(3)\fP to 0L does not work in a
+threaded situation as there is a race condition where libcurl risks restoring
+the former signal handler while another thread should still ignore it.
+.SH "Name resolving"
+The \fBgethostbyname\fP or \fBgetaddrinfo\fP and other name resolving system
+calls used by libcurl are provided by your operating system and must be thread
+safe. It is important that libcurl can find and use thread safe versions of
+these and other system calls, as otherwise it cannot function fully thread
+safe. Some operating systems are known to have faulty thread
+implementations. We have previously received problem reports on *BSD (at least
+in the past, they may be working fine these days). Some operating systems that
+are known to have solid and working thread support are Linux, Solaris and
+Windows.
+.SH "curl_global_* functions"
These functions are thread-safe since libcurl 7.84.0 if
\fIcurl_version_info(3)\fP has the \fBCURL_VERSION_THREADSAFE\fP feature bit
set (most platforms).
@@ -106,9 +87,11 @@ initialize the library and its dependents, rather than rely on the "lazy"
fail-safe initialization that takes place the first time
\fIcurl_easy_init(3)\fP is called. For an in-depth explanation refer to
\fIlibcurl(3)\fP section \fBGLOBAL CONSTANTS\fP.
-.IP "Memory functions"
+.SH "Memory functions"
These functions, provided either by your operating system or your own
replacements, must be thread safe. You can use \fIcurl_global_init_mem(3)\fP
to set your own replacement memory functions.
-.IP "Non-safe functions"
+.SH "Non-safe functions"
\fICURLOPT_DNS_USE_GLOBAL_CACHE(3)\fP is not thread-safe.
+
+\fIcurl_version_info(3)\fP is not thread-safe before libcurl initialization.
diff --git a/docs/libcurl/libcurl-tutorial.3 b/docs/libcurl/libcurl-tutorial.3
index 40f6ae606..a81da0070 100644
--- a/docs/libcurl/libcurl-tutorial.3
+++ b/docs/libcurl/libcurl-tutorial.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,30 +22,29 @@
.\" *
.\" **************************************************************************
.\"
-.TH libcurl-tutorial 3 "September 20, 2022" "libcurl 7.86.0" "libcurl programming"
+.TH libcurl-tutorial 3 "September 27, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
libcurl-tutorial \- libcurl programming tutorial
.SH "Objective"
This document attempts to describe the general principles and some basic
-approaches to consider when programming with libcurl. The text will focus
-mainly on the C interface but might apply fairly well on other interfaces as
-well as they usually follow the C one pretty closely.
+approaches to consider when programming with libcurl. The text focuses on the
+C interface but should apply fairly well on other language bindings as well as
+they usually follow the C API pretty closely.
-This document will refer to 'the user' as the person writing the source code
-that uses libcurl. That would probably be you or someone in your position.
-What will be generally referred to as 'the program' will be the collected
-source code that you write that is using libcurl for transfers. The program
-is outside libcurl and libcurl is outside of the program.
+This document refers to 'the user' as the person writing the source code that
+uses libcurl. That would probably be you or someone in your position. What is
+generally referred to as 'the program' is the collected source code that you
+write that is using libcurl for transfers. The program is outside libcurl and
+libcurl is outside of the program.
To get more details on all options and functions described herein, please
refer to their respective man pages.
.SH "Building"
-There are many different ways to build C programs. This chapter will assume a
-Unix style build process. If you use a different build system, you can still
-read this to get general information that may apply to your environment as
-well.
+There are many different ways to build C programs. This chapter assumes a Unix
+style build process. If you use a different build system, you can still read
+this to get general information that may apply to your environment as well.
.IP "Compiling the Program"
Your compiler needs to know where the libcurl headers are located. Therefore
you must set your compiler's include path to point to the directory where you
@@ -67,15 +66,15 @@ tool comes to the rescue:
libcurl can be built and customized in many ways. One of the things that
varies from different libraries and builds is the support for SSL-based
transfers, like HTTPS and FTPS. If a supported SSL library was detected
-properly at build-time, libcurl will be built with SSL support. To figure out
-if an installed libcurl has been built with SSL support enabled, use
-\&'curl-config' like this:
+properly at build-time, libcurl is built with SSL support. To figure out if an
+installed libcurl has been built with SSL support enabled, use \&'curl-config'
+like this:
.nf
$ curl-config --feature
.fi
-And if SSL is supported, the keyword \fISSL\fP will be written to stdout,
-possibly together with a few other features that could be either on or off on
-for different libcurls.
+And if SSL is supported, the keyword \fISSL\fP is written to stdout, possibly
+together with a other features that could be either on or off on for different
+libcurls.
See also the "Features libcurl Provides" further down.
.IP "autoconf macro"
@@ -100,20 +99,20 @@ use the library. Once for your program's entire life time. This is done using
curl_global_init()
.fi
and it takes one parameter which is a bit pattern that tells libcurl what to
-initialize. Using \fICURL_GLOBAL_ALL\fP will make it initialize all known
-internal sub modules, and might be a good default option. The current two bits
-that are specified are:
+initialize. Using \fICURL_GLOBAL_ALL\fP makes it initialize all known internal
+sub modules, and might be a good default option. The current two bits that are
+specified are:
.RS
.IP "CURL_GLOBAL_WIN32"
-which only does anything on Windows machines. When used on
-a Windows machine, it will make libcurl initialize the win32 socket
-stuff. Without having that initialized properly, your program cannot use
-sockets properly. You should only do this once for each application, so if
-your program already does this or of another library in use does it, you
-should not tell libcurl to do this as well.
+which only does anything on Windows machines. When used on a Windows machine,
+it makes libcurl initialize the win32 socket stuff. Without having that
+initialized properly, your program cannot use sockets properly. You should
+only do this once for each application, so if your program already does this
+or of another library in use does it, you should not tell libcurl to do this
+as well.
.IP CURL_GLOBAL_SSL
which only does anything on libcurls compiled and built SSL-enabled. On these
-systems, this will make libcurl initialize the SSL library properly for this
+systems, this makes libcurl initialize the SSL library properly for this
application. This only needs to be done once for each application so if your
program or another library already does this, this bit should not be needed.
.RE
@@ -125,8 +124,8 @@ function itself with a guessed bit pattern. Please note that depending solely
on this is not considered nice nor good.
When the program no longer uses libcurl, it should call
-\fIcurl_global_cleanup(3)\fP, which is the opposite of the init call. It will
-then do the reversed operations to cleanup the resources the
+\fIcurl_global_cleanup(3)\fP, which is the opposite of the init call. It
+performs the reversed operations to cleanup the resources the
\fIcurl_global_init(3)\fP call initialized.
Repeated calls to \fIcurl_global_init(3)\fP and \fIcurl_global_cleanup(3)\fP
@@ -165,9 +164,9 @@ transfer or series of transfers.
You set properties and options for this handle using
\fIcurl_easy_setopt(3)\fP. They control how the subsequent transfer or
-transfers will be made. Options remain set in the handle until set again to
-something different. They are sticky. Multiple requests using the same handle
-will use the same options.
+transfers using this handle are made. Options remain set in the handle until
+set again to something different. They are sticky. Multiple requests using the
+same handle use the same options.
If you at any point would like to blank all previously set options for a
single easy handle, you can call \fIcurl_easy_reset(3)\fP and you can also
@@ -205,70 +204,70 @@ by setting another property:
curl_easy_setopt(handle, CURLOPT_WRITEDATA, &internal_struct);
.fi
Using that property, you can easily pass local data between your application
-and the function that gets invoked by libcurl. libcurl itself will not touch the
-data you pass with \fICURLOPT_WRITEDATA(3)\fP.
+and the function that gets invoked by libcurl. libcurl itself does not touch
+the data you pass with \fICURLOPT_WRITEDATA(3)\fP.
-libcurl offers its own default internal callback that will take care of the
-data if you do not set the callback with \fICURLOPT_WRITEFUNCTION(3)\fP. It
-will then simply output the received data to stdout. You can have the default
-callback write the data to a different file handle by passing a 'FILE *' to a
-file opened for writing with the \fICURLOPT_WRITEDATA(3)\fP option.
+libcurl offers its own default internal callback that takes care of the data
+if you do not set the callback with \fICURLOPT_WRITEFUNCTION(3)\fP. It simply
+outputs the received data to stdout. You can have the default callback write
+the data to a different file handle by passing a 'FILE *' to a file opened for
+writing with the \fICURLOPT_WRITEDATA(3)\fP option.
-Now, we need to take a step back and have a deep breath. Here's one of those
+Now, we need to take a step back and take a deep breath. Here is one of those
rare platform-dependent nitpicks. Did you spot it? On some platforms[2],
-libcurl will not be able to operate on files opened by the program. Thus, if you
-use the default callback and pass in an open file with
-\fICURLOPT_WRITEDATA(3)\fP, it will crash. You should therefore avoid this to
-make your program run fine virtually everywhere.
+libcurl is not able to operate on file handles opened by the
+program. Therefore, if you use the default callback and pass in an open file
+handle with \fICURLOPT_WRITEDATA(3)\fP, libcurl crashes. You should avoid this
+to make your program run fine virtually everywhere.
(\fICURLOPT_WRITEDATA(3)\fP was formerly known as \fICURLOPT_FILE\fP. Both
names still work and do the same thing).
If you are using libcurl as a win32 DLL, you MUST use the
-\fICURLOPT_WRITEFUNCTION(3)\fP if you set \fICURLOPT_WRITEDATA(3)\fP - or you
-will experience crashes.
+\fICURLOPT_WRITEFUNCTION(3)\fP if you set \fICURLOPT_WRITEDATA(3)\fP - or
+experience crashes.
-There are of course many more options you can set, and we will get back to a few
-of them later. Let's instead continue to the actual transfer:
+There are of course many more options you can set, and we get back to a few of
+them later. Let's instead continue to the actual transfer:
.nf
success = curl_easy_perform(handle);
.fi
-\fIcurl_easy_perform(3)\fP will connect to the remote site, do the necessary
-commands and receive the transfer. Whenever it receives data, it calls the
+\fIcurl_easy_perform(3)\fP connects to the remote site, does the necessary
+commands and performs the transfer. Whenever it receives data, it calls the
callback function we previously set. The function may get one byte at a time,
or it may get many kilobytes at once. libcurl delivers as much as possible as
often as possible. Your callback function should return the number of bytes it
\&"took care of". If that is not the same amount of bytes that was passed to
-it, libcurl will abort the operation and return with an error code.
+it, libcurl aborts the operation and returns with an error code.
When the transfer is complete, the function returns a return code that informs
you if it succeeded in its mission or not. If a return code is not enough for
you, you can use the \fICURLOPT_ERRORBUFFER(3)\fP to point libcurl to a buffer
-of yours where it will store a human readable error message as well.
+of yours where it stores a human readable error message as well.
If you then want to transfer another file, the handle is ready to be used
-again. Mind you, it is even preferred that you re-use an existing handle if
-you intend to make another transfer. libcurl will then attempt to re-use the
+again. It is even preferred and encouraged that you reuse an existing handle
+if you intend to make another transfer. libcurl then attempts to reuse a
previous connection.
For some protocols, downloading a file can involve a complicated process of
logging in, setting the transfer mode, changing the current directory and
finally transferring the file data. libcurl takes care of all that
-complication for you. Given simply the URL to a file, libcurl will take care
-of all the details needed to get the file moved from one machine to another.
+complication for you. Given simply the URL to a file, libcurl takes care of
+all the details needed to get the file moved from one machine to another.
.SH "Multi-threading Issues"
libcurl is thread safe but there are a few exceptions. Refer to
\fIlibcurl-thread(3)\fP for more information.
.SH "When It does not Work"
-There will always be times when the transfer fails for some reason. You might
-have set the wrong libcurl option or misunderstood what the libcurl option
-actually does, or the remote server might return non-standard replies that
-confuse the library which then confuses your program.
+There are times when the transfer fails for some reason. You might have set
+the wrong libcurl option or misunderstood what the libcurl option actually
+does, or the remote server might return non-standard replies that confuse the
+library which then confuses your program.
-There's one golden rule when these things occur: set the
-\fICURLOPT_VERBOSE(3)\fP option to 1. it will cause the library to spew out the
+There is one golden rule when these things occur: set the
+\fICURLOPT_VERBOSE(3)\fP option to 1. it causes the library to spew out the
entire protocol details it sends, some internal info and some received
protocol data as well (especially when using FTP). If you are using HTTP,
adding the headers in the received output to study is also a clever way to get
@@ -294,14 +293,14 @@ libcurl tries to keep a protocol independent approach to most transfers, thus
uploading to a remote FTP site is similar to uploading data to an HTTP server
with a PUT request.
-Of course, first you either create an easy handle or you re-use one existing
+Of course, first you either create an easy handle or you reuse one existing
one. Then you set the URL to operate on just like before. This is the remote
-URL, that we now will upload.
+URL, that we now upload.
Since we write an application, we most likely want libcurl to get the upload
-data by asking us for it. To make it do that, we set the read callback and
-the custom pointer libcurl will pass to our read callback. The read callback
-should have a prototype similar to:
+data by asking us for it. To make it do that, we set the read callback and the
+custom pointer libcurl passes to our read callback. The read callback should
+have a prototype similar to:
.nf
size_t function(char *bufptr, size_t size, size_t nitems, void *userp);
.fi
@@ -319,7 +318,7 @@ Tell libcurl that we want to upload:
.nf
curl_easy_setopt(handle, CURLOPT_UPLOAD, 1L);
.fi
-A few protocols will not behave properly when uploads are done without any prior
+A few protocols do not behave properly when uploads are done without any prior
knowledge of the expected file size. So, set the upload file size using the
\fICURLOPT_INFILESIZE_LARGE(3)\fP for all known file sizes like this[1]:
@@ -328,12 +327,12 @@ knowledge of the expected file size. So, set the upload file size using the
curl_easy_setopt(handle, CURLOPT_INFILESIZE_LARGE, file_size);
.fi
-When you call \fIcurl_easy_perform(3)\fP this time, it will perform all the
-necessary operations and when it has invoked the upload it will call your
-supplied callback to get the data to upload. The program should return as much
-data as possible in every invoke, as that is likely to make the upload perform
-as fast as possible. The callback should return the number of bytes it wrote
-in the buffer. Returning 0 will signal the end of the upload.
+When you call \fIcurl_easy_perform(3)\fP this time, it performs all the
+necessary operations and when it has invoked the upload it calls your supplied
+callback to get the data to upload. The program should return as much data as
+possible in every invoke, as that is likely to make the upload perform as fast
+as possible. The callback should return the number of bytes it wrote in the
+buffer. Returning 0 signals the end of the upload.
.SH "Passwords"
Many protocols use or even require that user name and password are provided
@@ -341,8 +340,8 @@ to be able to download or upload the data of your choice. libcurl offers
several ways to specify them.
Most protocols support that you specify the name and password in the URL
-itself. libcurl will detect this and use them accordingly. This is written
-like this:
+itself. libcurl detects this and use them accordingly. This is written like
+this:
.nf
protocol://user:password@example.com/path/
.fi
@@ -363,7 +362,7 @@ similar to the \fICURLOPT_USERPWD(3)\fP option like this:
.nf
curl_easy_setopt(handle, CURLOPT_PROXYUSERPWD, "myname:thesecret");
.fi
-There's a long time Unix "standard" way of storing FTP user names and
+There is a long time Unix "standard" way of storing FTP user names and
passwords, namely in the $HOME/.netrc file (on Windows, libcurl also checks
the \fI%USERPROFILE% environment\fP variable if \fI%HOME%\fP is unset, and
tries "_netrc" as name). The file should be made private so that only the user
@@ -394,12 +393,12 @@ To pass the known private key password to libcurl:
curl_easy_setopt(handle, CURLOPT_KEYPASSWD, "keypassword");
.fi
.SH "HTTP Authentication"
-The previous chapter showed how to set user name and password for getting
-URLs that require authentication. When using the HTTP protocol, there are
-many different ways a client can provide those credentials to the server and
-you can control which way libcurl will (attempt to) use them. The default HTTP
-authentication method is called 'Basic', which is sending the name and
-password in clear-text in the HTTP request, base64-encoded. This is insecure.
+The previous chapter showed how to set user name and password for getting URLs
+that require authentication. When using the HTTP protocol, there are many
+different ways a client can provide those credentials to the server and you
+can control which way libcurl uses them. The default HTTP authentication
+method is called 'Basic', which is sending the name and password in clear-text
+in the HTTP request, base64-encoded. This is insecure.
At the time of this writing, libcurl can be built to use: Basic, Digest, NTLM,
Negotiate (SPNEGO). You can tell libcurl which one to use
@@ -422,13 +421,13 @@ must first ask the server what it supports:
For convenience, you can use the \fICURLAUTH_ANY\fP define (instead of a list
with specific types) which allows libcurl to use whatever method it wants.
-When asking for multiple types, libcurl will pick the available one it
-considers "best" in its own internal order of preference.
+When asking for multiple types, libcurl picks the available one it considers
+"best" in its own internal order of preference.
.SH "HTTP POSTing"
We get many questions regarding how to issue HTTP POSTs with libcurl the
-proper way. This chapter will thus include examples using both different
-versions of HTTP POST that libcurl supports.
+proper way. This chapter thus includes examples using both different versions
+of HTTP POST that libcurl supports.
The first version is the simple POST, the most common version, that most HTML
pages using the <form> tag uses. We provide a pointer to the data and tell
@@ -474,18 +473,18 @@ that list to libcurl.
While the simple examples above cover the majority of all cases where HTTP
POST operations are required, they do not do multi-part formposts. Multi-part
formposts were introduced as a better way to post (possibly large) binary data
-and were first documented in the RFC1867 (updated in RFC2388). they are called
-multi-part because they are built by a chain of parts, each part being a single
-unit of data. Each part has its own name and contents. You can in fact create
-and post a multi-part formpost with the regular libcurl POST support described
-above, but that would require that you build a formpost yourself and provide
-to libcurl. To make that easier, libcurl provides a MIME API consisting in
-several functions: using those, you can create and fill a multi-part form.
-Function \fIcurl_mime_init(3)\fP creates a multi-part body; you can then
-append new parts to a multi-part body using \fIcurl_mime_addpart(3)\fP.
-There are three possible data sources for a part: memory using
-\fIcurl_mime_data(3)\fP, file using \fIcurl_mime_filedata(3)\fP and
-user-defined data read callback using \fIcurl_mime_data_cb(3)\fP.
+and were first documented in the RFC 1867 (updated in RFC 2388). they are
+called multi-part because they are built by a chain of parts, each part being
+a single unit of data. Each part has its own name and contents. You can in
+fact create and post a multi-part formpost with the regular libcurl POST
+support described above, but that would require that you build a formpost
+yourself and provide to libcurl. To make that easier, libcurl provides a MIME
+API consisting in several functions: using those, you can create and fill a
+multi-part form. Function \fIcurl_mime_init(3)\fP creates a multi-part body;
+you can then append new parts to a multi-part body using
+\fIcurl_mime_addpart(3)\fP. There are three possible data sources for a part:
+memory using \fIcurl_mime_data(3)\fP, file using \fIcurl_mime_filedata(3)\fP
+and user-defined data read callback using \fIcurl_mime_data_cb(3)\fP.
\fIcurl_mime_name(3)\fP sets a part's (i.e.: form field) name, while
\fIcurl_mime_filename(3)\fP fills in the remote file name. With
\fIcurl_mime_type(3)\fP, you can tell the MIME type of a part,
@@ -567,8 +566,8 @@ that describe the individual content-type, size etc. To enable your
application to handicraft this formpost even more, libcurl allows you to
supply your own set of custom headers to such an individual form part. You can
of course supply headers to as many parts as you like, but this little example
-will show how you set headers to one specific part when you add that to the
-post handle:
+shows how you set headers to one specific part when you add that to the post
+handle:
.nf
struct curl_slist *headers=NULL;
@@ -594,8 +593,8 @@ request. You force an easy handle to go back to GET by using the
.nf
curl_easy_setopt(handle, CURLOPT_HTTPGET, 1L);
.fi
-Just setting \fICURLOPT_POSTFIELDS(3)\fP to "" or NULL will *not* stop libcurl
-from doing a POST. It will just make it POST without any data to send!
+Just setting \fICURLOPT_POSTFIELDS(3)\fP to "" or NULL does *not* stop libcurl
+from doing a POST. It just makes it POST without any data to send!
.SH "Converting from deprecated form API to MIME API"
Four rules have to be respected in building the multi-part:
@@ -626,7 +625,7 @@ becomes:
curl_mime_headers(part, headers, FALSE);
.fi
-Setting the last \fIcurl_mime_headers\fP argument to TRUE would have caused
+Setting the last \fIcurl_mime_headers(3)\fP argument to TRUE would have caused
the headers to be automatically released upon destroyed the multi-part, thus
saving a clean-up call to \fIcurl_slist_free_all(3)\fP.
@@ -643,10 +642,10 @@ becomes:
curl_mime_data_cb(part, (curl_off_t) -1, fread, fseek, NULL, stdin);
.fi
-\fIcurl_mime_name\fP always copies the field name. The special file name "-"
-is not supported by \fIcurl_mime_file\fP: to read an open file, use
-a callback source using fread(). The transfer will be chunked since the data
-size is unknown.
+\fIcurl_mime_name(3)\fP always copies the field name. The special file name
+"-" is not supported by \fIcurl_mime_filename(3)\fP: to read an open file, use
+a callback source using fread(). The transfer is be chunk-encoded since the
+data size is unknown.
.nf
curl_formadd(&post, &last,
@@ -688,7 +687,7 @@ becomes:
curl_mime_type(part, "application/zip");
.fi
-\fICURLOPT_READFUNCTION\fP callback is not used: it is replace by directly
+\fICURLOPT_READFUNCTION(3)\fP callback is not used: it is replace by directly
setting the part source data from the callback read function.
.nf
@@ -707,7 +706,7 @@ becomes:
curl_mime_filename(part, "memfile.bin");
.fi
-\fIcurl_mime_data\fP always copies the initial data: data buffer is thus
+\fIcurl_mime_data(3)\fP always copies the initial data: data buffer is thus
free for immediate reuse.
.nf
@@ -724,8 +723,9 @@ becomes:
curl_mime_filename(part, NULL);
.fi
-Use of \fIcurl_mime_filedata\fP sets the remote file name as a side effect: it
-is therefore necessary to clear it for \fICURLFORM_FILECONTENT\fP emulation.
+Use of \fIcurl_mime_filedata(3)\fP sets the remote file name as a side effect:
+it is therefore necessary to clear it for \fICURLFORM_FILECONTENT\fP
+emulation.
.SH "Showing Progress"
@@ -736,10 +736,10 @@ terminal.
Switch on the progress meter by, oddly enough, setting
\fICURLOPT_NOPROGRESS(3)\fP to zero. This option is set to 1 by default.
-For most applications however, the built-in progress meter is useless and
-what instead is interesting is the ability to specify a progress
-callback. The function pointer you pass to libcurl will then be called on
-irregular intervals with information about the current transfer.
+For most applications however, the built-in progress meter is useless and what
+instead is interesting is the ability to specify a progress callback. The
+function pointer you pass to libcurl is then called on irregular intervals
+with information about the current transfer.
Set the progress callback by using \fICURLOPT_PROGRESSFUNCTION(3)\fP. And pass
a pointer to a function that matches this prototype:
@@ -752,13 +752,13 @@ a pointer to a function that matches this prototype:
double ulnow);
.fi
-If any of the input arguments is unknown, a 0 will be passed. The first
-argument, the 'clientp' is the pointer you pass to libcurl with
-\fICURLOPT_PROGRESSDATA(3)\fP. libcurl will not touch it.
+If any of the input arguments is unknown, a 0 is provided. The first argument,
+the 'clientp' is the pointer you pass to libcurl with
+\fICURLOPT_PROGRESSDATA(3)\fP. libcurl does not touch it.
.SH "libcurl with C++"
-There's basically only one thing to keep in mind when using C++ instead of C
+There is basically only one thing to keep in mind when using C++ instead of C
when interfacing libcurl:
The callbacks CANNOT be non-static class member functions
@@ -787,7 +787,7 @@ the proxy for documents, the proxy does the actual request and then it returns
them.
libcurl supports SOCKS and HTTP proxies. When a given URL is wanted, libcurl
-will ask the proxy for it instead of trying to connect to the actual host
+asks the proxy for it instead of trying to connect to the actual remote host
identified in the URL.
If you are using a SOCKS proxy, you may find that libcurl does not quite support
@@ -795,11 +795,11 @@ all operations through it.
For HTTP proxies: the fact that the proxy is an HTTP proxy puts certain
restrictions on what can actually happen. A requested URL that might not be a
-HTTP URL will be still be passed to the HTTP proxy to deliver back to
-libcurl. This happens transparently, and an application may not need to
-know. I say "may", because at times it is important to understand that all
-operations over an HTTP proxy use the HTTP protocol. For example, you cannot
-invoke your own custom FTP commands or even proper FTP directory listings.
+HTTP URL is passed to the HTTP proxy to deliver back to libcurl. This happens
+transparently, and an application may not need to know. I say "may", because
+at times it is important to understand that all operations over an HTTP proxy
+use the HTTP protocol. For example, you cannot invoke your own custom FTP
+commands or even proper FTP directory listings.
.IP "Proxy Options"
@@ -817,7 +817,7 @@ If you want to, you can specify the host name only in the
\fICURLOPT_PROXYPORT(3)\fP.
Tell libcurl what kind of proxy it is with \fICURLOPT_PROXYTYPE(3)\fP (if not,
-it will default to assume an HTTP proxy):
+it defaults to assuming an HTTP proxy):
.nf
curl_easy_setopt(handle, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
.fi
@@ -836,8 +836,7 @@ The proxy environment variable contents should be in the format
\&"[protocol://][user:password@]machine[:port]". Where the protocol:// part
specifies which type of proxy it is, and the optional port number specifies on
which port the proxy operates. If not specified, the internal default port
-number will be used and that is most likely not the one you would like it to
-be.
+number is used and that is most likely not the one you would like it to be.
There are two special environment variables. 'all_proxy' is what sets proxy
for any URL in case the protocol specific variable was not set, and
@@ -887,10 +886,10 @@ Tell libcurl to use proxy tunneling like this:
.nf
curl_easy_setopt(handle, CURLOPT_HTTPPROXYTUNNEL, 1L);
.fi
-In fact, there might even be times when you want to do plain HTTP
-operations using a tunnel like this, as it then enables you to operate on
-the remote server instead of asking the proxy to do so. libcurl will not
-stand in the way for such innovative actions either!
+In fact, there might even be times when you want to do plain HTTP operations
+using a tunnel like this, as it then enables you to operate on the remote
+server instead of asking the proxy to do so. libcurl does not stand in the way
+for such innovative actions either!
.IP "Proxy Auto-Config"
@@ -921,14 +920,14 @@ Mozilla JavaScript engine in the past.
Re-cycling the same easy handle several times when doing multiple requests is
the way to go.
-After each single \fIcurl_easy_perform(3)\fP operation, libcurl will keep the
+After each single \fIcurl_easy_perform(3)\fP operation, libcurl keeps the
connection alive and open. A subsequent request using the same easy handle to
the same host might just be able to use the already open connection! This
reduces network impact a lot.
Even if the connection is dropped, all connections involving SSL to the same
-host again, will benefit from libcurl's session ID cache that drastically
-reduces re-connection time.
+host again, benefit from libcurl's session ID cache that drastically reduces
+re-connection time.
FTP connections that are kept alive save a lot of time, as the command-
response round-trips are skipped, and also you do not risk getting blocked
@@ -941,23 +940,22 @@ looked up name a lot faster.
Other interesting details that improve performance for subsequent requests
may also be added in the future.
-Each easy handle will attempt to keep the last few connections alive for a
-while in case they are to be used again. You can set the size of this "cache"
-with the \fICURLOPT_MAXCONNECTS(3)\fP option. Default is 5. There is rarely
-any point in changing this value, and if you think of changing this it is
-often just a matter of thinking again.
+Each easy handle attempts to keep the last few connections alive for a while
+in case they are to be used again. You can set the size of this "cache" with
+the \fICURLOPT_MAXCONNECTS(3)\fP option. Default is 5. There is rarely any
+point in changing this value, and if you think of changing this it is often
+just a matter of thinking again.
-To force your upcoming request to not use an already existing connection (it
-will even close one first if there happens to be one alive to the same host
-you are about to operate on), you can do that by setting
-\fICURLOPT_FRESH_CONNECT(3)\fP to 1. In a similar spirit, you can also forbid
-the upcoming request to be "lying" around and possibly get re-used after the
-request by setting \fICURLOPT_FORBID_REUSE(3)\fP to 1.
+To force your upcoming request to not use an already existing connection, you
+can do that by setting \fICURLOPT_FRESH_CONNECT(3)\fP to 1. In a similar
+spirit, you can also forbid the upcoming request to be "lying" around and
+possibly get reused after the request by setting
+\fICURLOPT_FORBID_REUSE(3)\fP to 1.
.SH "HTTP Headers Used by libcurl"
-When you use libcurl to do HTTP requests, it will pass along a series of headers
-automatically. It might be good for you to know and understand these. You
-can replace or remove them by using the \fICURLOPT_HTTPHEADER(3)\fP option.
+When you use libcurl to do HTTP requests, it passes along a series of headers
+automatically. It might be good for you to know and understand these. You can
+replace or remove them by using the \fICURLOPT_HTTPHEADER(3)\fP option.
.IP "Host"
This header is required by HTTP 1.1 and even many 1.0 servers and should be
@@ -970,7 +968,7 @@ anything but default.
.IP "Expect"
When doing POST requests, libcurl sets this header to \&"100-continue" to ask
the server for an "OK" message before it proceeds with sending the data part
-of the post. If the posted data amount is deemed "small", libcurl will not use
+of the post. If the posted data amount is deemed "small", libcurl does not use
this header.
.SH "Customizing Operations"
@@ -1025,9 +1023,10 @@ replace them by simply setting them too:
.fi
.IP "Delete Headers"
-If you replace an existing header with one with no contents, you will prevent
-the header from being sent. For instance, if you want to completely prevent the
-\&"Accept:" header from being sent, you can disable it with code similar to this:
+If you replace an existing header with one with no contents, you prevent the
+header from being sent. For instance, if you want to completely prevent the
+\&"Accept:" header from being sent, you can disable it with code similar to
+this:
headers = curl_slist_append(headers, "Accept:");
@@ -1038,7 +1037,7 @@ when doing so.
.IP "Enforcing chunked transfer-encoding"
By making sure a request uses the custom header "Transfer-Encoding: chunked"
-when doing a non-GET HTTP operation, libcurl will switch over to "chunked"
+when doing a non-GET HTTP operation, libcurl switches over to "chunked"
upload, even though the size of the data to upload might be known. By default,
libcurl usually switches over to chunked upload automatically if the upload
data size is unknown.
@@ -1058,12 +1057,12 @@ Not all protocols are HTTP-like, and thus the above may not help you when
you want to make, for example, your FTP transfers to behave differently.
Sending custom commands to an FTP server means that you need to send the
-commands exactly as the FTP server expects them (RFC959 is a good guide here),
-and you can only use commands that work on the control-connection alone. All
-kinds of commands that require data interchange and thus need a
+commands exactly as the FTP server expects them (RFC 959 is a good guide
+here), and you can only use commands that work on the control-connection
+alone. All kinds of commands that require data interchange and thus need a
data-connection must be left to libcurl's own judgment. Also be aware that
-libcurl will do its best to change directory to the target directory before
-doing any transfer, so if you change directory (with CWD or similar) you might
+libcurl does its best to change directory to the target directory before doing
+any transfer, so if you change directory (with CWD or similar) you might
confuse libcurl and then it might not attempt to transfer the file in the
correct remote directory.
@@ -1085,24 +1084,24 @@ _after_ the data transfer took place the option to \fIcurl_easy_setopt(3)\fP
would instead be called \fICURLOPT_POSTQUOTE(3)\fP and used the exact same
way.
-The custom FTP command will be issued to the server in the same order they are
+The custom FTP commands are issued to the server in the same order they are
added to the list, and if a command gets an error code returned back from the
-server, no more commands will be issued and libcurl will bail out with an
-error code (CURLE_QUOTE_ERROR). Note that if you use \fICURLOPT_QUOTE(3)\fP to
-send commands before a transfer, no transfer will actually take place when a
-quote command has failed.
+server, no more commands are issued and libcurl bails out with an error code
+(CURLE_QUOTE_ERROR). Note that if you use \fICURLOPT_QUOTE(3)\fP to send
+commands before a transfer, no transfer actually takes place when a quote
+command has failed.
-If you set the \fICURLOPT_HEADER(3)\fP to 1, you will tell libcurl to get
+If you set the \fICURLOPT_HEADER(3)\fP to 1, you tell libcurl to get
information about the target file and output "headers" about it. The headers
-will be in "HTTP-style", looking like they do in HTTP.
+are in "HTTP-style", looking like they do in HTTP.
The option to enable headers or to run custom FTP commands may be useful to
combine with \fICURLOPT_NOBODY(3)\fP. If this option is set, no actual file
-content transfer will be performed.
+content transfer is performed.
.IP "FTP Custom CUSTOMREQUEST"
If you do want to list the contents of an FTP directory using your own defined
-FTP command, \fICURLOPT_CUSTOMREQUEST(3)\fP will do just that. "NLST" is the
+FTP command, \fICURLOPT_CUSTOMREQUEST(3)\fP does just that. "NLST" is the
default one for listing directories but you are free to pass in your idea of a
good alternative.
@@ -1134,34 +1133,34 @@ figure out which cookies to use. Set the header file to read cookies from with
\fICURLOPT_COOKIEFILE(3)\fP.
The \fICURLOPT_COOKIEFILE(3)\fP option also automatically enables the cookie
-parser in libcurl. Until the cookie parser is enabled, libcurl will not parse
-or understand incoming cookies and they will just be ignored. However, when
-the parser is enabled the cookies will be understood and the cookies will be
-kept in memory and used properly in subsequent requests when the same handle
-is used. Many times this is enough, and you may not have to save the cookies
-to disk at all. Note that the file you specify to \fICURLOPT_COOKIEFILE(3)\fP
-does not have to exist to enable the parser, so a common way to just enable the
-parser and not read any cookies is to use the name of a file you know does not
-exist.
-
-If you would rather use existing cookies that you have previously received with
-your Netscape or Mozilla browsers, you can make libcurl use that cookie file
-as input. The \fICURLOPT_COOKIEFILE(3)\fP is used for that too, as libcurl
-will automatically find out what kind of file it is and act accordingly.
+parser in libcurl. Until the cookie parser is enabled, libcurl does not parse
+or understand incoming cookies and they are just be ignored. However, when the
+parser is enabled the cookies are understood and the cookies are kept in
+memory and used properly in subsequent requests when the same handle is
+used. Many times this is enough, and you may not have to save the cookies to
+disk at all. Note that the file you specify to \fICURLOPT_COOKIEFILE(3)\fP
+does not have to exist to enable the parser, so a common way to just enable
+the parser and not read any cookies is to use the name of a file you know does
+not exist.
+
+If you would rather use existing cookies that you have previously received
+with your Netscape or Mozilla browsers, you can make libcurl use that cookie
+file as input. The \fICURLOPT_COOKIEFILE(3)\fP is used for that too, as
+libcurl automatically finds out what kind of file it is and acts accordingly.
Perhaps the most advanced cookie operation libcurl offers, is saving the
entire internal cookie state back into a Netscape/Mozilla formatted cookie
file. We call that the cookie-jar. When you set a file name with
-\fICURLOPT_COOKIEJAR(3)\fP, that file name will be created and all received
-cookies will be stored in it when \fIcurl_easy_cleanup(3)\fP is called. This
-enables cookies to get passed on properly between multiple handles without any
+\fICURLOPT_COOKIEJAR(3)\fP, that file name is created and all received cookies
+get stored in it when \fIcurl_easy_cleanup(3)\fP is called. This enables
+cookies to get passed on properly between multiple handles without any
information getting lost.
.SH "FTP Peculiarities We Need"
FTP transfers use a second TCP/IP connection for the data transfer. This is
-usually a fact you can forget and ignore but at times this fact will come
-back to haunt you. libcurl offers several different ways to customize how the
+usually a fact you can forget and ignore but at times this detail comes back
+to haunt you. libcurl offers several different ways to customize how the
second connection is being made.
libcurl can either connect to the server a second time or tell the server to
@@ -1175,19 +1174,18 @@ and does not exist nor work on all FTP servers.)
You can prevent libcurl from first trying the EPSV command by setting
\fICURLOPT_FTP_USE_EPSV(3)\fP to zero.
-In some cases, you will prefer to have the server connect back to you for the
-second connection. This might be when the server is perhaps behind a firewall
-or something and only allows connections on a single port. libcurl then
-informs the remote server which IP address and port number to connect to.
-This is made with the \fICURLOPT_FTPPORT(3)\fP option. If you set it to "-",
-libcurl will use your system's "default IP address". If you want to use a
-particular IP, you can set the full IP address, a host name to resolve to an
-IP address or even a local network interface name that libcurl will get the IP
-address from.
+In some cases, you want to have the server connect back to you for the second
+connection. This might be when the server is perhaps behind a firewall or
+something and only allows connections on a single port. libcurl then informs
+the remote server which IP address and port number to connect to. This is
+made with the \fICURLOPT_FTPPORT(3)\fP option. If you set it to "-", libcurl
+uses your system's "default IP address". If you want to use a particular IP,
+you can set the full IP address, a host name to resolve to an IP address or
+even a local network interface name that libcurl gets the IP address from.
-When doing the "PORT" approach, libcurl will attempt to use the EPRT and the
-LPRT before trying PORT, as they work with more protocols. You can disable
-this behavior by setting \fICURLOPT_FTP_USE_EPRT(3)\fP to zero.
+When doing the "PORT" approach, libcurl attempts to use the EPRT and the LPRT
+before trying PORT, as they work with more protocols. You can disable this
+behavior by setting \fICURLOPT_FTP_USE_EPRT(3)\fP to zero.
.SH "MIME API revisited for SMTP and IMAP"
In addition to support HTTP multi-part form fields, the MIME API can be used
@@ -1322,8 +1320,8 @@ When you have added the handles you have for the moment (you can still add new
ones at any time), you start the transfers by calling
\fIcurl_multi_perform(3)\fP.
-\fIcurl_multi_perform(3)\fP is asynchronous. It will only perform what can be
-done now and then return control to your program. It is designed to never
+\fIcurl_multi_perform(3)\fP is asynchronous. It only performs what can be done
+now and then return control to your program. It is designed to never
block. You need to keep calling the function until all transfers are
completed.
@@ -1334,7 +1332,7 @@ sockets/handles. You figure out what to select() for by using
\fIcurl_multi_fdset(3)\fP, that fills in a set of \fIfd_set\fP variables for
you with the particular file descriptors libcurl uses for the moment.
-When you then call select(), it will return when one of the file handles signal
+When you then call select(), it returns when one of the file handles signal
action and you then call \fIcurl_multi_perform(3)\fP to allow libcurl to do
what it wants to do. Take note that libcurl does also feature some time-out
code so we advise you to never use long timeouts on select() before you call
@@ -1350,8 +1348,8 @@ can use \fIcurl_multi_remove_handle(3)\fP to remove individual easy
handles. Remember that easy handles should be \fIcurl_easy_cleanup(3)\fPed.
When a transfer within the multi stack has finished, the counter of running
-transfers (as filled in by \fIcurl_multi_perform(3)\fP) will decrease. When
-the number reaches zero, all transfers are done.
+transfers (as filled in by \fIcurl_multi_perform(3)\fP) decreases. When the
+number reaches zero, all transfers are done.
\fIcurl_multi_info_read(3)\fP can be used to get information about completed
transfers. It then returns the CURLcode for each easy transfer, to allow you
@@ -1365,13 +1363,13 @@ to figure out success on each individual transfer.
You can share some data between easy handles when the easy interface is used,
and some data is share automatically when you use the multi interface.
-When you add easy handles to a multi handle, these easy handles will
-automatically share a lot of the data that otherwise would be kept on a
-per-easy handle basis when the easy interface is used.
+When you add easy handles to a multi handle, these easy handles automatically
+share a lot of the data that otherwise would be kept on a per-easy handle
+basis when the easy interface is used.
The DNS cache is shared between handles within a multi handle, making
subsequent name resolving faster, and the connection pool that is kept to
-better allow persistent connections and connection re-use is also shared. If
+better allow persistent connections and connection reuse is also shared. If
you are using the easy interface, you can still share these between specific
easy handles by using the share interface, see \fIlibcurl-share(3)\fP.
@@ -1395,4 +1393,7 @@ installs the library, header files, man pages etc.
This behavior was different in versions before 7.17.0, where strings had to
remain valid past the end of the \fIcurl_easy_setopt(3)\fP call.
.SH "SEE ALSO"
-.BR libcurl-errors "(3), " libcurl-multi "(3), " libcurl-easy "(3) "
+.BR libcurl-easy (3),
+.BR libcurl-errors (3),
+.BR libcurl-multi (3),
+.BR libcurl-url (3)
diff --git a/docs/libcurl/libcurl-url.3 b/docs/libcurl/libcurl-url.3
index e60d71ffd..b74cd31af 100644
--- a/docs/libcurl/libcurl-url.3
+++ b/docs/libcurl/libcurl-url.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH libcurl 3 "September 20, 2022" "libcurl 7.86.0" "libcurl URL interface"
+.TH libcurl 3 "September 26, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
libcurl-url \- URL interface overview
@@ -46,8 +46,8 @@ When you need a copy of a handle, just duplicate it with \fIcurl_url_dup(3)\fP:
.fi
.SH PARSING
By setting a URL to the handle with \fIcurl_url_set(3)\fP, the URL is parsed
-and stored in the handle. If the URL is not syntactically correct it will
-return an error instead.
+and stored in the handle. If the URL is not syntactically correct it returns
+an error instead.
.nf
rc = curl_url_set(h, CURLUPART_URL,
"https://example.com:449/foo/bar?name=moo", 0);
@@ -57,8 +57,8 @@ The zero in the fourth argument is a bitmask for changing specific features.
If successful, this stores the URL in its individual parts within the handle.
.SH REDIRECT
-When a handle already contains info about a URL, setting a relative URL will
-make it "redirect" to adapt to it.
+When a handle already contains info about a URL, setting a relative URL makes
+it "redirect" to that.
.nf
rc = curl_url_set(h, CURLUPART_URL, "../test?another", 0);
.fi
@@ -76,14 +76,15 @@ When a URL has been parsed or parts have been set, you can extract those
pieces from the handle at any time.
.nf
+ rc = curl_url_get(h, CURLUPART_FRAGMENT, &fragment, 0);
rc = curl_url_get(h, CURLUPART_HOST, &host, 0);
- rc = curl_url_get(h, CURLUPART_SCHEME, &scheme, 0);
- rc = curl_url_get(h, CURLUPART_USER, &user, 0);
rc = curl_url_get(h, CURLUPART_PASSWORD, &password, 0);
- rc = curl_url_get(h, CURLUPART_PORT, &port, 0);
rc = curl_url_get(h, CURLUPART_PATH, &path, 0);
+ rc = curl_url_get(h, CURLUPART_PORT, &port, 0);
rc = curl_url_get(h, CURLUPART_QUERY, &query, 0);
- rc = curl_url_get(h, CURLUPART_FRAGMENT, &fragment, 0);
+ rc = curl_url_get(h, CURLUPART_SCHEME, &scheme, 0);
+ rc = curl_url_get(h, CURLUPART_USER, &user, 0);
+ rc = curl_url_get(h, CURLUPART_ZONEID, &zoneid, 0);
.fi
Extracted parts are not URL decoded unless the user also asks for it with the
@@ -96,14 +97,15 @@ A user set individual URL parts, either after having parsed a full URL or
instead of parsing such.
.nf
+ rc = curl_url_set(urlp, CURLUPART_FRAGMENT, "anchor", 0);
rc = curl_url_set(urlp, CURLUPART_HOST, "www.example.com", 0);
- rc = curl_url_set(urlp, CURLUPART_SCHEME, "https", 0);
- rc = curl_url_set(urlp, CURLUPART_USER, "john", 0);
rc = curl_url_set(urlp, CURLUPART_PASSWORD, "doe", 0);
- rc = curl_url_set(urlp, CURLUPART_PORT, "443", 0);
rc = curl_url_set(urlp, CURLUPART_PATH, "/index.html", 0);
+ rc = curl_url_set(urlp, CURLUPART_PORT, "443", 0);
rc = curl_url_set(urlp, CURLUPART_QUERY, "name=john", 0);
- rc = curl_url_set(urlp, CURLUPART_FRAGMENT, "anchor", 0);
+ rc = curl_url_set(urlp, CURLUPART_SCHEME, "https", 0);
+ rc = curl_url_set(urlp, CURLUPART_USER, "john", 0);
+ rc = curl_url_set(urlp, CURLUPART_ZONEID, "eth0", 0);
.fi
Set parts are not URL encoded unless the user asks for it with the
@@ -119,13 +121,12 @@ application can then add the string "hat=1" to the query part like this:
rc = curl_url_set(urlp, CURLUPART_QUERY, "hat=1", CURLU_APPENDQUERY);
.fi
-It will even notice the lack of an ampersand (&) separator so it will inject
-one too, and the handle's full URL will then equal
-"https://example.com/?shoes=2&hat=1".
+It notices the lack of an ampersand (&) separator and injects one, and the
+handle's full URL then equals "https://example.com/?shoes=2&hat=1".
The appended string can of course also get URL encoded on add, and if asked to
-URL encode, the encoding process will skip the '=' character. For example,
-append "candy=N&N" to what we already have, and URL encode it to deal with the
+URL encode, the encoding process skips the '=' character. For example, append
+"candy=N&N" to what we already have, and URL encode it to deal with the
ampersand in the data:
.nf
rc = curl_url_set(urlp, CURLUPART_QUERY, "candy=N&N",
@@ -138,7 +139,14 @@ Now the URL looks like
.fi
.SH AVAILABILITY
The URL API was introduced in libcurl 7.62.0.
+
+A URL with a literal IPv6 address can be parsed even when IPv6 support is not
+enabled.
.SH "SEE ALSO"
-.BR curl_url "(3), " curl_url_cleanup "(3), " curl_url_get "(3), "
-.BR curl_url_dup "(3), " curl_url_set "(3), " curl_url_strerror "(3), "
-.BR CURLOPT_URL "(3)"
+.BR curl_url (3),
+.BR curl_url_cleanup (3),
+.BR curl_url_dup (3),
+.BR curl_url_get (3),
+.BR curl_url_set (3),
+.BR curl_url_strerror (3),
+.BR CURLOPT_URL (3)
diff --git a/docs/libcurl/libcurl-ws.3 b/docs/libcurl/libcurl-ws.3
new file mode 100644
index 000000000..c2dc64dfd
--- /dev/null
+++ b/docs/libcurl/libcurl-ws.3
@@ -0,0 +1,119 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed 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
+.\" *
+.\" **************************************************************************
+.TH libcurl 3 "September 26, 2023" "libcurl 8.5.0" "libcurl"
+
+.SH NAME
+libcurl-ws \- WebSocket interface overview
+.SH DESCRIPTION
+The WebSocket interface provides functions for receiving and sending WebSocket
+data.
+.SH INCLUDE
+You still only include <curl/curl.h> in your code.
+.SH SETUP
+WebSocket is also often known as \fIWebSockets\fP, in plural. It is done by
+upgrading a regular HTTP(S) GET request to a WebSocket connection.
+
+WebSocket is a TCP-like message-based communication protocol done over HTTP,
+specified in RFC 6455.
+
+To initiate a WebSocket session with libcurl, setup an easy handle to use a
+URL with a "WS://" or "WSS://" scheme. "WS" is for cleartext communication
+over HTTP and "WSS" is for doing WebSocket securely over HTTPS.
+
+A WebSocket request is done as an HTTP/1 GET request with an "Upgrade
+WebSocket" request header field. When the upgrade is accepted by the server,
+it responds with a 101 Switching and then the client can speak WebSocket with
+the server. The communication can happen in both directions at the same time.
+.SH MESSAGES
+WebSocket communication is message based. That means that both ends send and
+receive entire messages, not streams like TCP. A WebSocket message is sent
+over the wire in one or more frames. Each frame in a message can have a size
+up to 2^63 bytes.
+
+libcurl delivers WebSocket data as frame fragments. It might send a whole
+frame, but it might also deliver them in pieces depending on size and network
+patterns. It makes sure to provide the API user about the exact specifics
+about the fragment: type, offset, size and how much data there is pending to
+arrive for the same frame.
+
+A message has an unknown size until the last frame header for the message has
+been received since only frames have set sizes.
+.SH "Raw mode"
+libcurl can be told to speak WebSocket in "raw mode" by setting the
+\fBCURLWS_RAW_MODE\fP bit to the \fICURLOPT_WS_OPTIONS(3)\fP option.
+
+Raw WebSocket means that libcurl passes on the data from the network without
+parsing it leaving that entirely to the application. This mode assumes that
+the user of this knows WebSocket and can parse and figure out the data all by
+itself.
+
+This mode is intended for applications that already have a WebSocket
+parser/engine that want to switch over to use libcurl for enabling WebSocket,
+but keep parts of the existing software architecture.
+.SH PING
+WebSocket is designed to allow long-lived sessions and in order to keep the
+connections alive, both ends can send PING messages for the other end to
+respond with a PONG.
+
+libcurl automatically responds to server PING messages with a PONG. It does
+not send any PING messages automatically.
+.SH MODELS
+Because of the many different ways WebSocket can be used, which is much more
+flexible than limited to plain downloads or uploads, libcurl offers two
+different API models to use it:
+
+1. Using a write callback with \fICURLOPT_WRITEFUNCTION(3)\fP much like other
+downloads for when the traffic is download oriented.
+
+2. Using \fICURLOPT_CONNECT_ONLY(3)\fP and use the WebSocket recv/send
+functions.
+.SH "Callback model"
+When a write callback is set and a WebSocket transfer is performed, the
+callback is called to deliver all WebSocket data that arrives.
+
+The callback can then call \fIcurl_ws_meta(3)\fP to learn about the details of
+the incoming data fragment.
+.SH "CONNECT_ONLY model"
+By setting \fICURLOPT_CONNECT_ONLY(3)\fP to \fB2L\fP, the transfer only
+establishes and setups the WebSocket communication and then returns control
+back to the application.
+
+Once such a setup has been successfully performed, the application can proceed
+and use \fIcurl_ws_recv(3)\fP and \fIcurl_ws_send(3)\fP freely to exchange
+WebSocket messages with the server.
+.SH AVAILABILITY
+The WebSocket API was introduced as experimental in 7.86.0 and is still
+experimental today.
+
+It is only built-in if explicitly opted in at build time. We discourage use of
+the WebSocket API in production because of its experimental state. We might
+change API, ABI and behavior before this "goes live".
+.SH "SEE ALSO"
+.BR curl_easy_init (3),
+.BR curl_ws_meta (3),
+.BR curl_ws_recv (3),
+.BR curl_ws_send (3),
+.BR CURLOPT_CONNECT_ONLY (3),
+.BR CURLOPT_WRITEFUNCTION (3),
+.BR CURLOPT_WS_OPTIONS (3)
diff --git a/docs/libcurl/libcurl.3 b/docs/libcurl/libcurl.3
index a10ce0306..0929557b3 100644
--- a/docs/libcurl/libcurl.3
+++ b/docs/libcurl/libcurl.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH libcurl 3 "September 20, 2022" "libcurl 7.86.0" "libcurl overview"
+.TH libcurl 3 "October 14, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
libcurl \- client-side URL transfers
@@ -29,25 +29,16 @@ libcurl \- client-side URL transfers
This is a short overview on how to use libcurl in your C programs. There are
specific man pages for each function mentioned in here. See
\fIlibcurl-easy(3)\fP, \fIlibcurl-multi(3)\fP, \fIlibcurl-share(3)\fP,
-\fIlibcurl-url(3)\fP and \fIlibcurl-tutorial(3)\fP for in-depth understanding
-on how to program with libcurl.
+\fIlibcurl-url(3)\fP, \fIlibcurl-ws(3)\fP and \fIlibcurl-tutorial(3)\fP for
+in-depth understanding on how to program with libcurl.
There are many bindings available that bring libcurl access to your favorite
language. Look elsewhere for documentation on those.
-
-libcurl has a global constant environment that you must set up and maintain
-while using libcurl. This essentially means you call \fIcurl_global_init(3)\fP
-at the start of your program and \fIcurl_global_cleanup(3)\fP at the end. See
-\fBGLOBAL CONSTANTS\fP below for details.
-
-If libcurl was compiled with support for multiple SSL backends, the function
-\fIcurl_global_sslset(3)\fP can be called before \fIcurl_global_init(3)\fP
-to select the active SSL backend.
-
+.SH TRANSFERS
To transfer files, you create an "easy handle" using \fIcurl_easy_init(3)\fP
for a single individual transfer (in either direction). You then set your
desired set of options in that handle with \fIcurl_easy_setopt(3)\fP. Options
-you set with \fIcurl_easy_setopt(3)\fP stick. They will be used on every
+you set with \fIcurl_easy_setopt(3)\fP stick. They are then used for every
repeated use of this handle until you either change the option, or you reset
them all with \fIcurl_easy_reset(3)\fP.
@@ -66,32 +57,33 @@ similar. The multi interface allows you to select() on libcurl action, and
even to easily download multiple files simultaneously using a single
thread. See further details in the \fIlibcurl-multi(3)\fP man page.
-You can have multiple easy handles share certain data, even if they are used
-in different threads. This magic is setup using the share interface, as
-described in the \fIlibcurl-share(3)\fP man page.
-
-There is also a series of other helpful functions to use, including these:
+.SH "SUPPORT INTERFACES"
+There is also a series of other helpful functions and interface families to
+use, including these:
.RS
.IP curl_version_info()
-gets detailed libcurl (and other used libraries) version info
+gets detailed libcurl (and other used libraries) version info. See
+\fIcurl_version_info(3)\fP
.IP curl_getdate()
-converts a date string to time_t
+converts a date string to time_t. See \fIcurl_getdate(3)\fP
.IP curl_easy_getinfo()
-get information about a performed transfer
-.IP curl_formadd()
-helps building an HTTP form POST
-.IP curl_formfree()
-free a list built with \fIcurl_formadd(3)\fP
+get information about a performed transfer. See \fIcurl_easy_getinfo(3)\fP
+.IP curl_mime_addpart()
+helps building an HTTP form POST. See \fIcurl_mime_addpart(3)\fP
.IP curl_slist_append()
-builds a linked list
-.IP curl_slist_free_all()
-frees a whole curl_slist
-.IP curl_url_set()
-parses a URL
+builds a linked list. See \fIcurl_slist_append(3)\fP
+.IP "Sharing data between transfers"
+You can have multiple easy handles share certain data, even if they are used
+in different threads. This magic is setup using the share interface, as
+described in the \fIlibcurl-share(3)\fP man page.
+.IP "URL Parsing"
+URL parsing and manipulations. See \fIlibcurl-url(3)\fP
+.IP "WebSocket communication"
+See \fIlibcurl-ws(3)\fP
.RE
.SH "LINKING WITH LIBCURL"
-On unix-like machines, there's a tool named curl-config that gets installed
+On unix-like machines, there is a tool named curl-config that gets installed
with the rest of the curl stuff when 'make install' is performed.
curl-config is added to make it easier for applications to link with libcurl
@@ -123,24 +115,24 @@ libcurl is thread safe but there are a few exceptions. Refer to
\fIlibcurl-thread(3)\fP for more information.
.SH "PERSISTENT CONNECTIONS"
-Persistent connections means that libcurl can re-use the same connection for
+Persistent connections means that libcurl can reuse the same connection for
several transfers, if the conditions are right.
-libcurl will \fBalways\fP attempt to use persistent connections. Whenever you
-use \fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP etc, libcurl
-will attempt to use an existing connection to do the transfer, and if none
-exists it will open a new one that will be subject for re-use on a possible
-following call to \fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP.
+libcurl always attempts to use persistent connections. Whenever you use
+\fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP etc, libcurl
+attempts to use an existing connection to do the transfer, and if none exists
+it opens a new one that is subject for reuse on a possible following call to
+\fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP.
To allow libcurl to take full advantage of persistent connections, you should
do as many of your file transfers as possible using the same handle.
If you use the easy interface, and you call \fIcurl_easy_cleanup(3)\fP, all
-the possibly open connections held by libcurl will be closed and forgotten.
+the possibly open connections held by libcurl are closed and forgotten.
When you have created a multi handle and are using the multi interface, the
connection pool is instead kept in the multi handle so closing and creating
-new easy handles to do transfers will not affect them. Instead all added easy
+new easy handles to do transfers do not affect them. Instead all added easy
handles can take advantage of the single shared pool.
.SH "GLOBAL CONSTANTS"
There are a variety of constants that libcurl uses, mainly through its
@@ -155,6 +147,10 @@ that library that describes the SSL protocol.
allocate resources (e.g. the memory for the GNU TLS tree mentioned above), so
the companion function \fIcurl_global_cleanup(3)\fP releases them.
+If libcurl was compiled with support for multiple SSL backends, the function
+\fIcurl_global_sslset(3)\fP can be called before \fIcurl_global_init(3)\fP
+to select the active SSL backend.
+
The global constant functions are thread-safe since libcurl 7.84.0 if
\fIcurl_version_info(3)\fP has the CURL_VERSION_THREADSAFE feature bit set
(most platforms). Read \fIlibcurl-thread(3)\fP for thread safety guidelines.
@@ -192,10 +188,9 @@ A module like this must have global constant functions of its own, just like
\fIcurl_global_init(3)\fP and \fIcurl_global_cleanup(3)\fP. The module thus
has control at the beginning and end of the program and has a place to call
the libcurl functions. If multiple modules in the program use libcurl, they
-all will separately call the libcurl functions, and that is OK because only
-the first \fIcurl_global_init(3)\fP and the last \fIcurl_global_cleanup(3)\fP
-in a program change anything. (libcurl uses a reference count in static
-memory).
+all separately call the libcurl functions, and that is OK because only the
+first \fIcurl_global_init(3)\fP and the last \fIcurl_global_cleanup(3)\fP in a
+program change anything. (libcurl uses a reference count in static memory).
In a C++ module, it is common to deal with the global constant situation by
defining a special class that represents the global constant environment of
diff --git a/docs/libcurl/libcurl.m4 b/docs/libcurl/libcurl.m4
index 0908a028e..e4a518b5c 100644
--- a/docs/libcurl/libcurl.m4
+++ b/docs/libcurl/libcurl.m4
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2006 - 2022, David Shaw <dshaw@jabberwocky.com>
+# Copyright (C) David Shaw <dshaw@jabberwocky.com>
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -51,12 +51,11 @@
# Users may override the detected values by doing something like:
# LIBCURL="-lcurl" LIBCURL_CPPFLAGS="-I/usr/myinclude" ./configure
#
-# For the sake of sanity, this macro assumes that any libcurl that is
-# found is after version 7.7.2, the first version that included the
-# curl-config script. Note that it is very important for people
-# packaging binary versions of libcurl to include this script!
-# Without curl-config, we can only guess what protocols are available,
-# or use curl_version_info to figure it out at runtime.
+# For the sake of sanity, this macro assumes that any libcurl that is found is
+# after version 7.7.2, the first version that included the curl-config script.
+# Note that it is important for people packaging binary versions of libcurl to
+# include this script! Without curl-config, we can only guess what protocols
+# are available, or use curl_version_info to figure it out at runtime.
AC_DEFUN([LIBCURL_CHECK_CONFIG],
[
@@ -157,7 +156,7 @@ AC_DEFUN([LIBCURL_CHECK_CONFIG],
if test $_libcurl_try_link = yes ; then
- # we didn't find curl-config, so let's see if the user-supplied
+ # we did not find curl-config, so let's see if the user-supplied
# link line (or failing that, "-lcurl") is enough.
LIBCURL=${LIBCURL-"$_libcurl_ldflags -lcurl"}
@@ -171,7 +170,7 @@ AC_DEFUN([LIBCURL_CHECK_CONFIG],
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <curl/curl.h>]],[[
/* Try and use a few common options to force a failure if we are
- missing symbols or can't link. */
+ missing symbols or cannot link. */
int x;
curl_easy_setopt(NULL,CURLOPT_URL,NULL);
x=CURL_ERROR_SIZE;
@@ -199,9 +198,10 @@ if (x) {;}
_libcurl_save_libs=$LIBS
LIBS="$LIBS $LIBCURL"
- AC_CHECK_FUNC(curl_free,,
- AC_DEFINE(curl_free,free,
- [Define curl_free() as free() if our version of curl lacks curl_free.]))
+ AC_CHECK_DECL([curl_free],[],
+ [AC_DEFINE([curl_free],[free],
+ [Define curl_free() as free() if our version of curl lacks curl_free.])],
+ [[#include <curl/curl.h>]])
CPPFLAGS=$_libcurl_save_cppflags
LIBS=$_libcurl_save_libs
@@ -220,14 +220,14 @@ if (x) {;}
if test "x$_libcurl_protocols" = "x" ; then
- # We don't have --protocols, so just assume that all
+ # We do not have --protocols, so just assume that all
# protocols are available
_libcurl_protocols="HTTP FTP FILE TELNET LDAP DICT TFTP"
if test x$libcurl_feature_SSL = xyes ; then
_libcurl_protocols="$_libcurl_protocols HTTPS"
- # FTPS wasn't standards-compliant until version
+ # FTPS was not standards-compliant until version
# 7.11.0 (0x070b00 == 461568)
if test $_libcurl_version -ge 461568; then
_libcurl_protocols="$_libcurl_protocols FTPS"
@@ -271,4 +271,4 @@ if (x) {;}
fi
unset _libcurl_with
-])dnl
+])
diff --git a/docs/libcurl/mksymbolsmanpage.pl b/docs/libcurl/mksymbolsmanpage.pl
index 8d1ddd044..3bc686949 100755
--- a/docs/libcurl/mksymbolsmanpage.pl
+++ b/docs/libcurl/mksymbolsmanpage.pl
@@ -6,7 +6,7 @@
# * | (__| |_| | _ <| |___
# * \___|\___/|_| \_\_____|
# *
-# * Copyright (C) 2015 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
# *
# * This software is licensed as described in the file COPYING, which
# * you should have received as part of this distribution. The terms
@@ -26,8 +26,14 @@
my $version="7.41.0";
use POSIX qw(strftime);
-my $date = strftime "%b %e, %Y", localtime;
-my $year = strftime "%Y", localtime;
+my @ts;
+if (defined($ENV{SOURCE_DATE_EPOCH})) {
+ @ts = localtime($ENV{SOURCE_DATE_EPOCH});
+} else {
+ @ts = localtime;
+}
+my $date = strftime "%b %e, %Y", @ts;
+my $year = strftime "%Y", @ts;
print <<HEADER
.\\" **************************************************************************
@@ -37,7 +43,7 @@ print <<HEADER
.\\" * | (__| |_| | _ <| |___
.\\" * \\___|\\___/|_| \\_\\_____|
.\\" *
-.\\" * Copyright (C) 1998 - $year, Daniel Stenberg, <daniel\@haxx.se>, et al.
+.\\" * Copyright (C) Daniel Stenberg, <daniel\@haxx.se>, et al.
.\\" *
.\\" * This software is licensed as described in the file COPYING, which
.\\" * you should have received as part of this distribution. The terms
@@ -53,7 +59,7 @@ print <<HEADER
.\\" * SPDX-License-Identifier: curl
.\\" *
.\\" **************************************************************************
-.TH libcurl-symbols 3 "$date" "libcurl $version" "libcurl symbols"
+.TH libcurl-symbols 3 "$date" "libcurl" "libcurl"
.SH NAME
libcurl-symbols \\- libcurl symbol version information
.SH "libcurl symbols"
diff --git a/docs/libcurl/opts/CMakeLists.txt b/docs/libcurl/opts/CMakeLists.txt
index 10d8c5f85..152a08a35 100644
--- a/docs/libcurl/opts/CMakeLists.txt
+++ b/docs/libcurl/opts/CMakeLists.txt
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2009 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/docs/libcurl/opts/CURLINFO_ACTIVESOCKET.3 b/docs/libcurl/opts/CURLINFO_ACTIVESOCKET.3
index 502a7f804..ae947d08c 100644
--- a/docs/libcurl/opts/CURLINFO_ACTIVESOCKET.3
+++ b/docs/libcurl/opts/CURLINFO_ACTIVESOCKET.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_ACTIVESOCKET 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_ACTIVESOCKET 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
CURLINFO_ACTIVESOCKET \- get the active socket
@@ -49,21 +49,25 @@ is complete, and is typically used in combination with
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_socket_t sockfd;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_socket_t sockfd;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Do not do the transfer - only connect to host */
- curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);
- res = curl_easy_perform(curl);
+ /* Do not do the transfer - only connect to host */
+ curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);
+ res = curl_easy_perform(curl);
- /* Extract the socket from the curl handle */
- res = curl_easy_getinfo(curl, CURLINFO_ACTIVESOCKET, &sockfd);
+ /* Extract the socket from the curl handle */
+ res = curl_easy_getinfo(curl, CURLINFO_ACTIVESOCKET, &sockfd);
- if(res != CURLE_OK) {
- printf("Error: %s\\n", curl_easy_strerror(res));
- return 1;
+ if(res != CURLE_OK) {
+ printf("Error: %s\\n", curl_easy_strerror(res));
+ return 1;
+ }
}
}
.fi
@@ -72,5 +76,7 @@ Added in 7.45.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLINFO_LASTSOCKET "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_LASTSOCKET (3),
+.BR CURLOPT_CONNECT_ONLY (3)
diff --git a/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.3 b/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.3
index 09139343c..b4f9911a2 100644
--- a/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.3
+++ b/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_APPCONNECT_TIME 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_APPCONNECT_TIME 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
CURLINFO_APPCONNECT_TIME \- get the time until the SSL/SSH handshake is completed
@@ -47,19 +47,23 @@ See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
All
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- double connect;
- curl_easy_setopt(curl, CURLOPT_URL, url);
- res = curl_easy_perform(curl);
- if(CURLE_OK == res) {
- res = curl_easy_getinfo(curl, CURLINFO_APPCONNECT_TIME, &connect);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ double connect;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ res = curl_easy_perform(curl);
if(CURLE_OK == res) {
- printf("Time: %.1f", connect);
+ res = curl_easy_getinfo(curl, CURLINFO_APPCONNECT_TIME, &connect);
+ if(CURLE_OK == res) {
+ printf("Time: %.1f", connect);
+ }
}
+ /* always cleanup */
+ curl_easy_cleanup(curl);
}
- /* always cleanup */
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -67,4 +71,6 @@ Added in 7.19.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), " CURLINFO_APPCONNECT_TIME_T "(3)"
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_APPCONNECT_TIME_T (3)
diff --git a/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME_T.3 b/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME_T.3
index 7824028f1..0d87e44ce 100644
--- a/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME_T.3
+++ b/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME_T.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 2022 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,10 +22,10 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_APPCONNECT_TIME_T 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_APPCONNECT_TIME_T 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
-CURLINFO_APPCONNECT_TIME_T \- get the time until the SSL/SSH handshake is completed
+CURLINFO_APPCONNECT_TIME_T \- time until the SSL/SSH handshake completed
.SH SYNOPSIS
.nf
#include <curl/curl.h>
@@ -48,20 +48,24 @@ See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
All
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- curl_off_t connect;
- curl_easy_setopt(curl, CURLOPT_URL, url);
- res = curl_easy_perform(curl);
- if(CURLE_OK == res) {
- res = curl_easy_getinfo(curl, CURLINFO_APPCONNECT_TIME_T, &connect);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_off_t connect;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ res = curl_easy_perform(curl);
if(CURLE_OK == res) {
- printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", connect / 1000000,
- (long)(connect % 1000000));
+ res = curl_easy_getinfo(curl, CURLINFO_APPCONNECT_TIME_T, &connect);
+ if(CURLE_OK == res) {
+ printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", connect / 1000000,
+ (long)(connect % 1000000));
+ }
}
+ /* always cleanup */
+ curl_easy_cleanup(curl);
}
- /* always cleanup */
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -69,4 +73,6 @@ Added in 7.61.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), " CURLINFO_APPCONNECT_TIME "(3)"
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_APPCONNECT_TIME (3)
diff --git a/docs/libcurl/opts/CURLINFO_CAINFO.3 b/docs/libcurl/opts/CURLINFO_CAINFO.3
index 3c66df020..cd5a3eadb 100644
--- a/docs/libcurl/opts/CURLINFO_CAINFO.3
+++ b/docs/libcurl/opts/CURLINFO_CAINFO.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_CAINFO 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_CAINFO 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
CURLINFO_CAINFO \- get the default built-in CA certificate path
@@ -43,20 +43,22 @@ currently set to be used does not support \fICURLOPT_CAINFO(3)\fP.
This is a path identifying a single file containing CA certificates.
-The \fBpath\fP pointer will be NULL if there is no default path.
+The \fBpath\fP pointer is set to NULL if there is no default path.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- char *cainfo = NULL;
- curl_easy_getinfo(curl, CURLINFO_CAINFO, &cainfo);
- if(cainfo)
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ char *cainfo = NULL;
+ curl_easy_getinfo(curl, CURLINFO_CAINFO, &cainfo);
+ if(cainfo) {
printf("default ca info path: %s\\n", cainfo);
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -64,5 +66,6 @@ Added in 7.84.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLINFO_CAPATH "(3), "
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_CAPATH (3)
diff --git a/docs/libcurl/opts/CURLINFO_CAPATH.3 b/docs/libcurl/opts/CURLINFO_CAPATH.3
index 093f8dbe5..c3d216745 100644
--- a/docs/libcurl/opts/CURLINFO_CAPATH.3
+++ b/docs/libcurl/opts/CURLINFO_CAPATH.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_CAPATH 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_CAPATH 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
CURLINFO_CAPATH \- get the default built-in CA path string
@@ -43,20 +43,22 @@ currently set to be used does not support \fICURLOPT_CAPATH(3)\fP.
This is a path identifying a directory.
-The \fBpath\fP pointer will be NULL if there is no default path.
+The \fBpath\fP pointer is set to NULL if there is no default path.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- char *capath = NULL;
- curl_easy_getinfo(curl, CURLINFO_CAPATH, &capath);
- if(capath)
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ char *capath = NULL;
+ curl_easy_getinfo(curl, CURLINFO_CAPATH, &capath);
+ if(capath) {
printf("default ca path: %s\\n", capath);
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -64,5 +66,6 @@ Added in 7.84.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLINFO_CAINFO "(3), "
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_CAINFO (3)
diff --git a/docs/libcurl/opts/CURLINFO_CERTINFO.3 b/docs/libcurl/opts/CURLINFO_CERTINFO.3
index 7ebc3e542..918faaa91 100644
--- a/docs/libcurl/opts/CURLINFO_CERTINFO.3
+++ b/docs/libcurl/opts/CURLINFO_CERTINFO.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_CERTINFO 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_CERTINFO 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
CURLINFO_CERTINFO \- get the TLS certificate chain
@@ -34,54 +34,73 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CERTINFO,
struct curl_certinfo **chainp);
.fi
.SH DESCRIPTION
-Pass a pointer to a \fIstruct curl_certinfo *\fP and you will get it set to
-point to a struct that holds a number of linked lists with info about the
-certificate chain, assuming you had \fICURLOPT_CERTINFO(3)\fP enabled when the
-request was made. The struct reports how many certs it found and then you can
-extract info for each of those certs by following the linked lists. The info
-chain is provided in a series of data in the format "name:content" where the
-content is for the specific named data. See also the \fIcertinfo.c\fP example.
+Pass a pointer to a \fIstruct curl_certinfo *\fP and it is set to point to a
+struct that holds info about the server's certificate chain, assuming you had
+\fICURLOPT_CERTINFO(3)\fP enabled when the request was made.
+
+.nf
+struct curl_certinfo {
+ int num_of_certs;
+ struct curl_slist **certinfo;
+};
+.fi
+
+The \fIcertinfo\fP struct member is an array of linked lists of certificate
+information. The \fInum_of_certs\fP struct member is the number of
+certificates which is the number of elements in the array. Each certificate's
+list has items with textual information in the format "name:content" such as
+\&"Subject:Foo", "Issuer:Bar", etc. The items in each list varies depending on
+the SSL backend and the certificate.
.SH PROTOCOLS
All TLS-based
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://www.example.com/");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://www.example.com/");
- /* connect to any HTTPS site, trusted or not */
- curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
- curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
+ /* connect to any HTTPS site, trusted or not */
+ curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
+ curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
- curl_easy_setopt(curl, CURLOPT_CERTINFO, 1L);
+ curl_easy_setopt(curl, CURLOPT_CERTINFO, 1L);
- res = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- if (!res) {
- struct curl_certinfo *ci;
- res = curl_easy_getinfo(curl, CURLINFO_CERTINFO, &ci);
+ if(!res) {
+ int i;
+ struct curl_certinfo *ci;
+ res = curl_easy_getinfo(curl, CURLINFO_CERTINFO, &ci);
- if (!res) {
- printf("%d certs!\\n", ci->num_of_certs);
+ if(!res) {
+ printf("%d certs!\\n", ci->num_of_certs);
- for(i = 0; i < ci->num_of_certs; i++) {
- struct curl_slist *slist;
+ for(i = 0; i < ci->num_of_certs; i++) {
+ struct curl_slist *slist;
- for(slist = ci->certinfo[i]; slist; slist = slist->next)
- printf("%s\\n", slist->data);
+ for(slist = ci->certinfo[i]; slist; slist = slist->next)
+ printf("%s\\n", slist->data);
+ }
}
}
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
+
+See also the \fIcertinfo.c\fP example.
.SH AVAILABILITY
-This option is only working in libcurl built with OpenSSL, NSS, Schannel, GSKit
-or Secure Transport support. Schannel support added in 7.50.0. Secure Transport
-support added in 7.79.0.
+This option is only working in libcurl built with OpenSSL, GnuTLS, Schannel or
+Secure Transport. GnuTLS support added in 7.42.0. Schannel support added in
+7.50.0. Secure Transport support added in 7.79.0.
Added in 7.19.1
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_CAPATH (3)
diff --git a/docs/libcurl/opts/CURLINFO_CONDITION_UNMET.3 b/docs/libcurl/opts/CURLINFO_CONDITION_UNMET.3
index 57016d097..155e56dff 100644
--- a/docs/libcurl/opts/CURLINFO_CONDITION_UNMET.3
+++ b/docs/libcurl/opts/CURLINFO_CONDITION_UNMET.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_CONDITION_UNMET 3 "October 22, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_CONDITION_UNMET 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
CURLINFO_CONDITION_UNMET \- get info on unmet time conditional or 304 HTTP response.
@@ -37,34 +37,39 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONDITION_UNMET,
Pass a pointer to a long to receive the number 1 if the condition provided in
the previous request did not match (see \fICURLOPT_TIMECONDITION(3)\fP). Alas,
if this returns a 1 you know that the reason you did not get data in return is
-because it did not fulfill the condition. The long this argument points to will
-get a zero stored if the condition instead was met. This can also return 1 if
+because it did not fulfill the condition. The long this argument points to
+gets a zero stored if the condition instead was met. This can also return 1 if
the server responded with a 304 HTTP status code, for example after sending a
custom "If-Match-*" header.
.SH PROTOCOLS
HTTP and some
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
- /* January 1, 2020 is 1577833200 */
- curl_easy_setopt(curl, CURLOPT_TIMEVALUE, 1577833200L);
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* If-Modified-Since the above time stamp */
- curl_easy_setopt(curl, CURLOPT_TIMECONDITION,
- (long)CURL_TIMECOND_IFMODSINCE);
+ /* January 1, 2020 is 1577833200 */
+ curl_easy_setopt(curl, CURLOPT_TIMEVALUE, 1577833200L);
- /* Perform the request */
- res = curl_easy_perform(curl);
+ /* If-Modified-Since the above time stamp */
+ curl_easy_setopt(curl, CURLOPT_TIMECONDITION,
+ (long)CURL_TIMECOND_IFMODSINCE);
+
+ /* Perform the request */
+ res = curl_easy_perform(curl);
- if(!res) {
- /* check the time condition */
- long unmet;
- res = curl_easy_getinfo(curl, CURLINFO_CONDITION_UNMET, &unmet);
if(!res) {
- printf("The time condition was %sfulfilled\\n", unmet?"NOT":"");
+ /* check the time condition */
+ long unmet;
+ res = curl_easy_getinfo(curl, CURLINFO_CONDITION_UNMET, &unmet);
+ if(!res) {
+ printf("The time condition was %sfulfilled\\n", unmet?"NOT":"");
+ }
}
}
}
@@ -74,4 +79,7 @@ Added in 7.19.4
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLOPT_TIMECONDITION (3),
+.BR CURLOPT_TIMEVALUE (3)
diff --git a/docs/libcurl/opts/CURLINFO_CONNECT_TIME.3 b/docs/libcurl/opts/CURLINFO_CONNECT_TIME.3
index 585d5769f..56c6d61c9 100644
--- a/docs/libcurl/opts/CURLINFO_CONNECT_TIME.3
+++ b/docs/libcurl/opts/CURLINFO_CONNECT_TIME.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_CONNECT_TIME 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_CONNECT_TIME 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
CURLINFO_CONNECT_TIME \- get the time until connect
@@ -43,19 +43,23 @@ See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
All
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- double connect;
- curl_easy_setopt(curl, CURLOPT_URL, url);
- res = curl_easy_perform(curl);
- if(CURLE_OK == res) {
- res = curl_easy_getinfo(curl, CURLINFO_CONNECT_TIME, &connect);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ double connect;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
if(CURLE_OK == res) {
- printf("Time: %.1f", connect);
+ res = curl_easy_getinfo(curl, CURLINFO_CONNECT_TIME, &connect);
+ if(CURLE_OK == res) {
+ printf("Time: %.1f", connect);
+ }
}
+ /* always cleanup */
+ curl_easy_cleanup(curl);
}
- /* always cleanup */
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -63,4 +67,6 @@ Added in 7.4.1
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), " CURLINFO_CONNECT_TIME_T "(3)"
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_CONNECT_TIME_T (3)
diff --git a/docs/libcurl/opts/CURLINFO_CONNECT_TIME_T.3 b/docs/libcurl/opts/CURLINFO_CONNECT_TIME_T.3
index 8adbb2729..ca0a7e1c6 100644
--- a/docs/libcurl/opts/CURLINFO_CONNECT_TIME_T.3
+++ b/docs/libcurl/opts/CURLINFO_CONNECT_TIME_T.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 2022 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_CONNECT_TIME_T 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_CONNECT_TIME_T 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
CURLINFO_CONNECT_TIME_T \- get the time until connect
@@ -44,20 +44,24 @@ See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
All
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- curl_off_t connect;
- curl_easy_setopt(curl, CURLOPT_URL, url);
- res = curl_easy_perform(curl);
- if(CURLE_OK == res) {
- res = curl_easy_getinfo(curl, CURLINFO_CONNECT_TIME_T, &connect);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_off_t connect;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
if(CURLE_OK == res) {
- printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", connect / 1000000,
- (long)(connect % 1000000));
+ res = curl_easy_getinfo(curl, CURLINFO_CONNECT_TIME_T, &connect);
+ if(CURLE_OK == res) {
+ printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", connect / 1000000,
+ (long)(connect % 1000000));
+ }
}
+ /* always cleanup */
+ curl_easy_cleanup(curl);
}
- /* always cleanup */
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -65,4 +69,7 @@ Added in 7.61.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), " CURLINFO_CONNECT_TIME "(3)"
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_CONNECT_TIME (3),
+.BR CURLOPT_CONNECTTIMEOUT (3)
diff --git a/docs/libcurl/opts/CURLINFO_CONN_ID.3 b/docs/libcurl/opts/CURLINFO_CONN_ID.3
new file mode 100644
index 000000000..3fe3ce7b8
--- /dev/null
+++ b/docs/libcurl/opts/CURLINFO_CONN_ID.3
@@ -0,0 +1,76 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed 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
+.\" *
+.\" **************************************************************************
+.\"
+.TH CURLINFO_CONN_ID 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
+
+.SH NAME
+CURLINFO_CONN_ID \- get the ID of the last connection used by the handle
+.SH SYNOPSIS
+.nf
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONN_ID,
+ curl_off_t *conn_id);
+.fi
+.SH DESCRIPTION
+Pass a pointer to a \fIcurl_off_t\fP to receive the connection identifier last
+used by the handle. Stores -1 if there was no connection used.
+
+The connection id is unique among all connections using the same
+connection cache. This is implicitly the case for all connections in the
+same multi handle.
+
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+.nf
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+
+ /* Perform the request */
+ res = curl_easy_perform(curl);
+
+ if(!res) {
+ curl_off_t conn_id;
+ res = curl_easy_getinfo(curl, CURLINFO_CONN_ID, &conn_id);
+ if(!res) {
+ printf("Connection used: %" CURL_FORMAT_CURL_OFF_T "\\n", conn_id);
+ }
+ }
+ }
+}
+.fi
+.SH AVAILABILITY
+Added in 8.2.0
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_XFER_ID (3)
diff --git a/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.3 b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.3
index 478e14dc1..5bfac2ba2 100644
--- a/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.3
+++ b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_CONTENT_LENGTH_DOWNLOAD 3 "October 12, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_CONTENT_LENGTH_DOWNLOAD 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
CURLINFO_CONTENT_LENGTH_DOWNLOAD \- get content-length of download
@@ -44,19 +44,23 @@ sensible variable type.
HTTP(S)
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Perform the request */
- res = curl_easy_perform(curl);
+ /* Perform the request */
+ res = curl_easy_perform(curl);
- if(!res) {
- /* check the size */
- double cl;
- res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &cl);
if(!res) {
- printf("Size: %.0f\\n", cl);
+ /* check the size */
+ double cl;
+ res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &cl);
+ if(!res) {
+ printf("Size: %.0f\\n", cl);
+ }
}
}
}
@@ -66,5 +70,6 @@ Added in 7.6.1. Deprecated since 7.55.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLINFO_CONTENT_LENGTH_UPLOAD "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_CONTENT_LENGTH_UPLOAD (3)
diff --git a/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.3 b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.3
index 1365d4841..eccd767ee 100644
--- a/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.3
+++ b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_CONTENT_LENGTH_DOWNLOAD_T 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_CONTENT_LENGTH_DOWNLOAD_T 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
CURLINFO_CONTENT_LENGTH_DOWNLOAD_T \- get content-length of download
@@ -41,19 +41,23 @@ the size is not known.
HTTP(S)
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Perform the request */
- res = curl_easy_perform(curl);
+ /* Perform the request */
+ res = curl_easy_perform(curl);
- if(!res) {
- /* check the size */
- curl_off_t cl;
- res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, &cl);
if(!res) {
- printf("Download size: %" CURL_FORMAT_CURL_OFF_T "\\n", cl);
+ /* check the size */
+ curl_off_t cl;
+ res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, &cl);
+ if(!res) {
+ printf("Download size: %" CURL_FORMAT_CURL_OFF_T "\\n", cl);
+ }
}
}
}
@@ -63,5 +67,6 @@ Added in 7.55.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLINFO_CONTENT_LENGTH_UPLOAD_T "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_CONTENT_LENGTH_UPLOAD_T (3)
diff --git a/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.3 b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.3
index 45830bfd4..01ac5f383 100644
--- a/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.3
+++ b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_CONTENT_LENGTH_UPLOAD 3 "October 12, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_CONTENT_LENGTH_UPLOAD 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
CURLINFO_CONTENT_LENGTH_UPLOAD \- get the specified size of the upload
@@ -43,19 +43,23 @@ more sensible variable type.
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Perform the upload */
- res = curl_easy_perform(curl);
+ /* Perform the upload */
+ res = curl_easy_perform(curl);
- if(!res) {
- /* check the size */
- double cl;
- res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_UPLOAD, &cl);
if(!res) {
- printf("Size: %.0f\\n", cl);
+ /* check the size */
+ double cl;
+ res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_UPLOAD, &cl);
+ if(!res) {
+ printf("Size: %.0f\\n", cl);
+ }
}
}
}
@@ -65,5 +69,6 @@ Added in 7.6.1. Deprecated since 7.55.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLINFO_CONTENT_LENGTH_DOWNLOAD_T "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_CONTENT_LENGTH_DOWNLOAD_T (3)
diff --git a/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD_T.3 b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD_T.3
index 77004dde7..1630ecaaa 100644
--- a/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD_T.3
+++ b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD_T.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_CONTENT_LENGTH_UPLOAD_T 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_CONTENT_LENGTH_UPLOAD_T 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
CURLINFO_CONTENT_LENGTH_UPLOAD_T \- get the specified size of the upload
@@ -40,19 +40,23 @@ upload. Stores -1 if the size is not known.
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Perform the upload */
- res = curl_easy_perform(curl);
+ /* Perform the upload */
+ res = curl_easy_perform(curl);
- if(!res) {
- /* check the size */
- curl_off_t cl;
- res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_UPLOAD_T, &cl);
if(!res) {
- printf("Upload size: %" CURL_FORMAT_CURL_OFF_T "\\n", cl);
+ /* check the size */
+ curl_off_t cl;
+ res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_UPLOAD_T, &cl);
+ if(!res) {
+ printf("Upload size: %" CURL_FORMAT_CURL_OFF_T "\\n", cl);
+ }
}
}
}
@@ -62,5 +66,6 @@ Added in 7.55.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLINFO_CONTENT_LENGTH_DOWNLOAD_T "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_CONTENT_LENGTH_DOWNLOAD_T (3)
diff --git a/docs/libcurl/opts/CURLINFO_CONTENT_TYPE.3 b/docs/libcurl/opts/CURLINFO_CONTENT_TYPE.3
index 9cdb3a5db..027db1e86 100644
--- a/docs/libcurl/opts/CURLINFO_CONTENT_TYPE.3
+++ b/docs/libcurl/opts/CURLINFO_CONTENT_TYPE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_CONTENT_TYPE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_CONTENT_TYPE 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
.SH NAME
CURLINFO_CONTENT_TYPE \- get Content-Type
@@ -38,28 +38,35 @@ object. This is the value read from the Content-Type: field. If you get NULL,
it means that the server did not send a valid Content-Type header or that the
protocol used does not support this.
-The \fBct\fP pointer will be NULL or pointing to private memory you MUST NOT
-free it - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the
+The \fBct\fP pointer is set to NULL or pointing to private memory. You MUST
+NOT free it - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the
corresponding CURL handle.
+
+The modern way to get this header from a response is to instead use the
+\fIcurl_easy_header(3)\fP function.
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- res = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- if(!res) {
- /* extract the content-type */
- char *ct = NULL;
- res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct);
- if(!res && ct) {
- printf("Content-Type: %s\\n", ct);
+ if(!res) {
+ /* extract the content-type */
+ char *ct = NULL;
+ res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct);
+ if(!res && ct) {
+ printf("Content-Type: %s\\n", ct);
+ }
}
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -67,5 +74,7 @@ Added in 7.9.4
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLOPT_HEADERFUNCTION "(3), " curl_easy_header "(3) "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_header (3),
+.BR curl_easy_setopt (3),
+.BR CURLOPT_HEADERFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLINFO_COOKIELIST.3 b/docs/libcurl/opts/CURLINFO_COOKIELIST.3
index 5e27c74ce..83c6bb88e 100644
--- a/docs/libcurl/opts/CURLINFO_COOKIELIST.3
+++ b/docs/libcurl/opts/CURLINFO_COOKIELIST.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_COOKIELIST 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_COOKIELIST 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_COOKIELIST \- get all known cookies
@@ -38,7 +38,7 @@ Pass a pointer to a 'struct curl_slist *' to receive a linked-list of all
cookies curl knows (expired ones, too). do not forget to call
\fIcurl_slist_free_all(3)\fP on the list after it has been used. If there are
no cookies (cookies for the handle have not been enabled or simply none have
-been received) 'struct curl_slist *' will be set to point to NULL.
+been received) the 'struct curl_slist *' is made a NULL pointer.
Since 7.43.0 cookies that were imported in the Set-Cookie format without a
domain name are not exported by this option.
@@ -46,31 +46,35 @@ domain name are not exported by this option.
HTTP(S)
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* enable the cookie engine */
- curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "");
+ /* enable the cookie engine */
+ curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "");
- res = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- if(!res) {
- /* extract all known cookies */
- struct curl_slist *cookies = NULL;
- res = curl_easy_getinfo(curl, CURLINFO_COOKIELIST, &cookies);
- if(!res && cookies) {
- /* a linked list of cookies in cookie file format */
- struct curl_slist *each = cookies;
- while(each) {
- printf("%s\\n", each->data);
- each = each->next;
+ if(!res) {
+ /* extract all known cookies */
+ struct curl_slist *cookies = NULL;
+ res = curl_easy_getinfo(curl, CURLINFO_COOKIELIST, &cookies);
+ if(!res && cookies) {
+ /* a linked list of cookies in cookie file format */
+ struct curl_slist *each = cookies;
+ while(each) {
+ printf("%s\\n", each->data);
+ each = each->next;
+ }
+ /* we must free these cookies when we are done */
+ curl_slist_free_all(cookies);
}
- /* we must free these cookies when we are done */
- curl_slist_free_all(cookies);
}
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -78,5 +82,6 @@ Added in 7.14.1
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLOPT_COOKIELIST "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLOPT_COOKIELIST (3)
diff --git a/docs/libcurl/opts/CURLINFO_EFFECTIVE_METHOD.3 b/docs/libcurl/opts/CURLINFO_EFFECTIVE_METHOD.3
index 2adeced17..e480b9e4f 100644
--- a/docs/libcurl/opts/CURLINFO_EFFECTIVE_METHOD.3
+++ b/docs/libcurl/opts/CURLINFO_EFFECTIVE_METHOD.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_EFFECTIVE_METHOD 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_EFFECTIVE_METHOD 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_EFFECTIVE_METHOD \- get the last used HTTP method
@@ -40,27 +40,30 @@ method.
In cases when you have asked libcurl to follow redirects, the method may not be
the same method the first request would use.
-The \fBmethodp\fP pointer will be NULL or pointing to private memory you MUST
-NOT free - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the
+The \fBmethodp\fP pointer is NULL or points to private memory. You MUST NOT
+free - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the
corresponding CURL handle.
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "data");
- curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
- res = curl_easy_perform(curl);
- if(res == CURLE_OK) {
- char *method = NULL;
- curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_METHOD, &method);
- if(method)
- printf("Redirected to method: %s\\n", method);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "data");
+ curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
+ res = curl_easy_perform(curl);
+ if(res == CURLE_OK) {
+ char *method = NULL;
+ curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_METHOD, &method);
+ if(method)
+ printf("Redirected to method: %s\\n", method);
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -68,4 +71,7 @@ Added in 7.72.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLOPT_CUSTOMREQUEST (3),
+.BR CURLOPT_FOLLOWLOCATION (3)
diff --git a/docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.3 b/docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.3
index a2d99c20a..3b5dc1c6d 100644
--- a/docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.3
+++ b/docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_EFFECTIVE_URL 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_EFFECTIVE_URL 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_EFFECTIVE_URL \- get the last used URL
@@ -38,26 +38,29 @@ Pass in a pointer to a char pointer and get the last used effective URL.
In cases when you have asked libcurl to follow redirects, it may not be the same
value you set with \fICURLOPT_URL(3)\fP.
-The \fBurlp\fP pointer will be NULL or pointing to private memory you MUST NOT
-free - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the
-corresponding CURL handle.
+The \fBurlp\fP pointer is NULL or points to private memory. You MUST NOT free
+- it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the corresponding
+CURL handle.
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
- res = curl_easy_perform(curl);
- if(res == CURLE_OK) {
- char *url = NULL;
- curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &url);
- if(url)
- printf("Redirect to: %s\\n", url);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
+ res = curl_easy_perform(curl);
+ if(res == CURLE_OK) {
+ char *url = NULL;
+ curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &url);
+ if(url)
+ printf("Redirect to: %s\\n", url);
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -65,4 +68,6 @@ Added in 7.4
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLOPT_FOLLOWLOCATION (3)
diff --git a/docs/libcurl/opts/CURLINFO_FILETIME.3 b/docs/libcurl/opts/CURLINFO_FILETIME.3
index 151c447a8..6730e3ee8 100644
--- a/docs/libcurl/opts/CURLINFO_FILETIME.3
+++ b/docs/libcurl/opts/CURLINFO_FILETIME.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_FILETIME 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_FILETIME 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_FILETIME \- get the remote time of the retrieved document
@@ -41,29 +41,34 @@ etc) and the time of the document is unknown.
You must tell libcurl to collect this information before the transfer is made,
by using the \fICURLOPT_FILETIME(3)\fP option to \fIcurl_easy_setopt(3)\fP or
-you will unconditionally get a -1 back.
+you this unconditionally gets a -1 back.
Consider using \fICURLINFO_FILETIME_T(3)\fP to be able to extract dates beyond
-the year 2038 on systems using 32 bit longs.
+the year 2038 on systems using 32 bit longs (Windows).
.SH PROTOCOLS
HTTP(S), FTP(S), SFTP
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, url);
- /* Ask for filetime */
- curl_easy_setopt(curl, CURLOPT_FILETIME, 1L);
- res = curl_easy_perform(curl);
- if(CURLE_OK == res) {
- res = curl_easy_getinfo(curl, CURLINFO_FILETIME, &filetime);
- if((CURLE_OK == res) && (filetime >= 0)) {
- time_t file_time = (time_t)filetime;
- printf("filetime %s: %s", filename, ctime(&file_time));
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ /* Ask for filetime */
+ curl_easy_setopt(curl, CURLOPT_FILETIME, 1L);
+ res = curl_easy_perform(curl);
+ if(CURLE_OK == res) {
+ long filetime = 0;
+ res = curl_easy_getinfo(curl, CURLINFO_FILETIME, &filetime);
+ if((CURLE_OK == res) && (filetime >= 0)) {
+ time_t file_time = (time_t)filetime;
+ printf("filetime: %s", ctime(&file_time));
+ }
}
+ /* always cleanup */
+ curl_easy_cleanup(curl);
}
- /* always cleanup */
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -71,4 +76,6 @@ Added in 7.5
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLOPT_FILETIME (3)
diff --git a/docs/libcurl/opts/CURLINFO_FILETIME_T.3 b/docs/libcurl/opts/CURLINFO_FILETIME_T.3
index f967a2e0d..9f08b2211 100644
--- a/docs/libcurl/opts/CURLINFO_FILETIME_T.3
+++ b/docs/libcurl/opts/CURLINFO_FILETIME_T.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_FILETIME 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_FILETIME 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_FILETIME_T \- get the remote time of the retrieved document
@@ -42,7 +42,7 @@ document time etc) and the time of the document is unknown.
You must ask libcurl to collect this information before the transfer is made,
by using the \fICURLOPT_FILETIME(3)\fP option to \fIcurl_easy_setopt(3)\fP or
-you will unconditionally get a -1 back.
+you unconditionally get a -1 back.
This option is an alternative to \fICURLINFO_FILETIME(3)\fP to allow systems
with 32 bit long variables to extract dates outside of the 32bit timestamp
@@ -51,22 +51,26 @@ range.
HTTP(S), FTP(S), SFTP
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, url);
- /* Ask for filetime */
- curl_easy_setopt(curl, CURLOPT_FILETIME, 1L);
- res = curl_easy_perform(curl);
- if(CURLE_OK == res) {
- curl_off_t filetime;
- res = curl_easy_getinfo(curl, CURLINFO_FILETIME_T, &filetime);
- if((CURLE_OK == res) && (filetime >= 0)) {
- time_t file_time = (time_t)filetime;
- printf("filetime %s: %s", filename, ctime(&file_time));
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ /* Ask for filetime */
+ curl_easy_setopt(curl, CURLOPT_FILETIME, 1L);
+ res = curl_easy_perform(curl);
+ if(CURLE_OK == res) {
+ curl_off_t filetime;
+ res = curl_easy_getinfo(curl, CURLINFO_FILETIME_T, &filetime);
+ if((CURLE_OK == res) && (filetime >= 0)) {
+ time_t file_time = (time_t)filetime;
+ printf("filetime: %s", ctime(&file_time));
+ }
}
+ /* always cleanup */
+ curl_easy_cleanup(curl);
}
- /* always cleanup */
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -74,4 +78,6 @@ Added in 7.59.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLOPT_FILETIME (3)
diff --git a/docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.3 b/docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.3
index f00890c54..8172ef05d 100644
--- a/docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.3
+++ b/docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_FTP_ENTRY_PATH 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_FTP_ENTRY_PATH 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_FTP_ENTRY_PATH \- get entry path in FTP server
@@ -38,28 +38,32 @@ path of the entry path. That is the initial path libcurl ended up in when
logging on to the remote FTP server. This stores a NULL as pointer if
something is wrong.
-The \fBpath\fP pointer will be NULL or pointing to private memory you MUST NOT
-free - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the
-corresponding CURL handle.
+The \fBpath\fP pointer is NULL or points to private memory. You MUST NOT free
+- it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the corresponding
+CURL handle.
.SH PROTOCOLS
FTP(S) and SFTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com");
- res = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- if(!res) {
- /* extract the entry path */
- char *ep = NULL;
- res = curl_easy_getinfo(curl, CURLINFO_FTP_ENTRY_PATH, &ep);
- if(!res && ep) {
- printf("Entry path was: %s\\n", ep);
+ if(!res) {
+ /* extract the entry path */
+ char *ep = NULL;
+ res = curl_easy_getinfo(curl, CURLINFO_FTP_ENTRY_PATH, &ep);
+ if(!res && ep) {
+ printf("Entry path was: %s\\n", ep);
+ }
}
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -67,4 +71,5 @@ Added in 7.15.4. Works for SFTP since 7.21.4
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3)
diff --git a/docs/libcurl/opts/CURLINFO_HEADER_SIZE.3 b/docs/libcurl/opts/CURLINFO_HEADER_SIZE.3
index 33cb344ed..75a5994a8 100644
--- a/docs/libcurl/opts/CURLINFO_HEADER_SIZE.3
+++ b/docs/libcurl/opts/CURLINFO_HEADER_SIZE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_HEADER_SIZE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_HEADER_SIZE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_HEADER_SIZE \- get size of retrieved headers
@@ -42,18 +42,21 @@ The total includes the size of any received headers suppressed by
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- res = curl_easy_perform(curl);
- if(res == CURLE_OK) {
- long size;
- res = curl_easy_getinfo(curl, CURLINFO_HEADER_SIZE, &size);
- if(!res)
- printf("Header size: %ld bytes\\n", size);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
+ if(res == CURLE_OK) {
+ long size;
+ res = curl_easy_getinfo(curl, CURLINFO_HEADER_SIZE, &size);
+ if(!res)
+ printf("Header size: %ld bytes\\n", size);
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -61,6 +64,7 @@ Added in 7.4.1
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLINFO_REQUEST_SIZE "(3), "
-.BR CURLINFO_SIZE_DOWNLOAD "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_REQUEST_SIZE (3),
+.BR CURLINFO_SIZE_DOWNLOAD (3)
diff --git a/docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.3 b/docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.3
index b568df026..4e00765c4 100644
--- a/docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.3
+++ b/docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_HTTPAUTH_AVAIL 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_HTTPAUTH_AVAIL 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_HTTPAUTH_AVAIL \- get available HTTP authentication methods
@@ -41,35 +41,42 @@ bits is explained in the \fICURLOPT_HTTPAUTH(3)\fP option for
HTTP(S)
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- res = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- if(!res) {
- /* extract the available authentication types */
- long auth;
- res = curl_easy_getinfo(curl, CURLINFO_HTTPAUTH_AVAIL, &auth);
if(!res) {
- if(!auth)
- printf("No auth available, perhaps no 401?\\n");
- else {
- printf("%s%s%s%s\\n",
- auth & CURLAUTH_BASIC ? "Basic ":"",
- auth & CURLAUTH_DIGEST ? "Digest ":"",
- auth & CURLAUTH_NEGOTIATE ? "Negotiate ":"",
- auth % CURLAUTH_NTLM ? "NTLM ":"");
+ /* extract the available authentication types */
+ long auth;
+ res = curl_easy_getinfo(curl, CURLINFO_HTTPAUTH_AVAIL, &auth);
+ if(!res) {
+ if(!auth)
+ printf("No auth available, perhaps no 401?\\n");
+ else {
+ printf("%s%s%s%s\\n",
+ auth & CURLAUTH_BASIC ? "Basic ":"",
+ auth & CURLAUTH_DIGEST ? "Digest ":"",
+ auth & CURLAUTH_NEGOTIATE ? "Negotiate ":"",
+ auth % CURLAUTH_NTLM ? "NTLM ":"");
+ }
}
}
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
-Added RFC2617 in 7.10.8
-Added RFC7616 in 7.57.0
+Added RFC 2617 in 7.10.8
+Added RFC 7616 in 7.57.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_PROXYAUTH_AVAIL (3),
+.BR CURLOPT_HTTPAUTH (3)
diff --git a/docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.3 b/docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.3
index cc1385fc7..a358ca0c8 100644
--- a/docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.3
+++ b/docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_HTTP_CONNECTCODE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_HTTP_CONNECTCODE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_HTTP_CONNECTCODE \- get the CONNECT response code
@@ -34,27 +34,30 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTP_CONNECTCODE, long *p);
.fi
.SH DESCRIPTION
Pass a pointer to a long to receive the last received HTTP proxy response code
-to a CONNECT request. The returned value will be zero if no such response code
-was available.
+to a CONNECT request. The returned value is zero if no such response code was
+available.
.SH PROTOCOLS
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* typically CONNECT is used to do HTTPS over HTTP proxies */
- curl_easy_setopt(curl, CURLOPT_PROXY, "http://127.0.0.1");
- res = curl_easy_perform(curl);
- if(res == CURLE_OK) {
- long code;
- res = curl_easy_getinfo(curl, CURLINFO_HTTP_CONNECTCODE, &code);
- if(!res && code)
- printf("The CONNECT response code: %03ld\\n", code);
+ /* typically CONNECT is used to do HTTPS over HTTP proxies */
+ curl_easy_setopt(curl, CURLOPT_PROXY, "http://127.0.0.1");
+ res = curl_easy_perform(curl);
+ if(res == CURLE_OK) {
+ long code;
+ res = curl_easy_getinfo(curl, CURLINFO_HTTP_CONNECTCODE, &code);
+ if(!res && code)
+ printf("The CONNECT response code: %03ld\\n", code);
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -62,5 +65,6 @@ Added in 7.10.7
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLINFO_RESPONSE_CODE "(3), "
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_RESPONSE_CODE (3)
diff --git a/docs/libcurl/opts/CURLINFO_HTTP_VERSION.3 b/docs/libcurl/opts/CURLINFO_HTTP_VERSION.3
index 61be2a53b..46b1dc4c0 100644
--- a/docs/libcurl/opts/CURLINFO_HTTP_VERSION.3
+++ b/docs/libcurl/opts/CURLINFO_HTTP_VERSION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_HTTP_VERSION 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_HTTP_VERSION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_HTTP_VERSION \- get the http version used in the connection
@@ -34,23 +34,26 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTP_VERSION, long *p);
.fi
.SH DESCRIPTION
Pass a pointer to a long to receive the version used in the last http
-connection. The returned value will be CURL_HTTP_VERSION_1_0,
-CURL_HTTP_VERSION_1_1, CURL_HTTP_VERSION_2_0, CURL_HTTP_VERSION_3 or 0 if the
-version cannot be determined.
+connection done using this handle. The returned value is
+CURL_HTTP_VERSION_1_0, CURL_HTTP_VERSION_1_1, CURL_HTTP_VERSION_2_0,
+CURL_HTTP_VERSION_3 or 0 if the version cannot be determined.
.SH PROTOCOLS
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- res = curl_easy_perform(curl);
- if(res == CURLE_OK) {
- long http_version;
- curl_easy_getinfo(curl, CURLINFO_HTTP_VERSION, &http_version);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
+ if(res == CURLE_OK) {
+ long http_version;
+ curl_easy_getinfo(curl, CURLINFO_HTTP_VERSION, &http_version);
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -58,5 +61,6 @@ Added in 7.50.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLINFO_RESPONSE_CODE "(3), "
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_RESPONSE_CODE (3)
diff --git a/docs/libcurl/opts/CURLINFO_LASTSOCKET.3 b/docs/libcurl/opts/CURLINFO_LASTSOCKET.3
index e4c8e3b20..5ad3eb59d 100644
--- a/docs/libcurl/opts/CURLINFO_LASTSOCKET.3
+++ b/docs/libcurl/opts/CURLINFO_LASTSOCKET.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_LASTSOCKET 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_LASTSOCKET 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_LASTSOCKET \- get the last socket used
@@ -37,8 +37,8 @@ Deprecated since 7.45.0. Use \fICURLINFO_ACTIVESOCKET(3)\fP instead.
Pass a pointer to a long to receive the last socket used by this curl
session. If the socket is no longer valid, -1 is returned. When you finish
-working with the socket, you must call curl_easy_cleanup() as usual and let
-libcurl close the socket and cleanup other resources associated with the
+working with the socket, you must call \fIcurl_easy_cleanup(3)\fP as usual and
+let libcurl close the socket and cleanup other resources associated with the
handle. This is typically used in combination with
\fICURLOPT_CONNECT_ONLY(3)\fP.
@@ -49,21 +49,25 @@ type is 64 bits large while its 'long' is 32 bits. Use the
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- long sockfd; /* does not work on win64! */
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ long sockfd; /* does not work on win64! */
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Do not do the transfer - only connect to host */
- curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);
- res = curl_easy_perform(curl);
+ /* Do not do the transfer - only connect to host */
+ curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);
+ res = curl_easy_perform(curl);
- /* Extract the socket from the curl handle */
- res = curl_easy_getinfo(curl, CURLINFO_LASTSOCKET, &sockfd);
+ /* Extract the socket from the curl handle */
+ res = curl_easy_getinfo(curl, CURLINFO_LASTSOCKET, &sockfd);
- if(res != CURLE_OK) {
- printf("Error: %s\\n", curl_easy_strerror(res));
- return 1;
+ if(res != CURLE_OK) {
+ printf("Error: %s\\n", curl_easy_strerror(res));
+ return 1;
+ }
}
}
.fi
@@ -72,5 +76,7 @@ Added in 7.15.2
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLINFO_ACTIVESOCKET "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_ACTIVESOCKET (3),
+.BR CURLOPT_CONNECT_ONLY (3)
diff --git a/docs/libcurl/opts/CURLINFO_LOCAL_IP.3 b/docs/libcurl/opts/CURLINFO_LOCAL_IP.3
index 7b2cb4cc6..9394164a9 100644
--- a/docs/libcurl/opts/CURLINFO_LOCAL_IP.3
+++ b/docs/libcurl/opts/CURLINFO_LOCAL_IP.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_LOCAL_IP 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_LOCAL_IP 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_LOCAL_IP \- get local IP address of last connection
@@ -36,23 +36,25 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LOCAL_IP, char **ip);
Pass a pointer to a char pointer to receive the pointer to a null-terminated
string holding the IP address of the local end of most recent connection done
with this \fBcurl\fP handle. This string may be IPv6 when that is
-enabled. Note that you get a pointer to a memory area that will be re-used at
-next request so you need to copy the string if you want to keep the
-information.
+enabled. Note that you get a pointer to a memory area that is reused at next
+request so you need to copy the string if you want to keep the information.
-The \fBip\fP pointer will be NULL or pointing to private memory you MUST NOT
-free - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the
-corresponding CURL handle.
+The \fBip\fP pointer is NULL or points to private memory. You MUST NOT free -
+it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the corresponding
+CURL handle.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
+int main(void)
{
char *ip;
+ CURLcode res;
+ CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Perform the request, res will get the return code */
+ /* Perform the transfer */
res = curl_easy_perform(curl);
/* Check for errors */
if((res == CURLE_OK) &&
@@ -69,5 +71,7 @@ Added in 7.21.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLINFO_PRIMARY_IP "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_PRIMARY_IP (3),
+.BR CURLINFO_LOCAL_PORT (3)
diff --git a/docs/libcurl/opts/CURLINFO_LOCAL_PORT.3 b/docs/libcurl/opts/CURLINFO_LOCAL_PORT.3
index 2de757c88..6a44c3118 100644
--- a/docs/libcurl/opts/CURLINFO_LOCAL_PORT.3
+++ b/docs/libcurl/opts/CURLINFO_LOCAL_PORT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_LOCAL_PORT 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_LOCAL_PORT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_LOCAL_PORT \- get the latest local port number
@@ -39,6 +39,7 @@ connection done with this \fBcurl\fP handle.
All
.SH EXAMPLE
.nf
+int main(void)
{
CURL *curl;
CURLcode res;
@@ -66,5 +67,7 @@ Added in 7.21.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLINFO_PRIMARY_PORT "(3), " CURLINFO_LOCAL_IP "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_LOCAL_IP (3),
+.BR CURLINFO_PRIMARY_PORT (3)
diff --git a/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.3 b/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.3
index b250373a9..ac7435dc0 100644
--- a/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.3
+++ b/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_NAMELOOKUP_TIME 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_NAMELOOKUP_TIME 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_NAMELOOKUP_TIME \- get the name lookup time
@@ -44,19 +44,23 @@ See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
All
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- double namelookup;
- curl_easy_setopt(curl, CURLOPT_URL, url);
- res = curl_easy_perform(curl);
- if(CURLE_OK == res) {
- res = curl_easy_getinfo(curl, CURLINFO_NAMELOOKUP_TIME, &namelookup);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ double namelookup;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ res = curl_easy_perform(curl);
if(CURLE_OK == res) {
- printf("Time: %.1f", namelookup);
+ res = curl_easy_getinfo(curl, CURLINFO_NAMELOOKUP_TIME, &namelookup);
+ if(CURLE_OK == res) {
+ printf("Time: %.1f", namelookup);
+ }
}
+ /* always cleanup */
+ curl_easy_cleanup(curl);
}
- /* always cleanup */
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -64,4 +68,6 @@ Added in 7.4.1
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), " CURLINFO_NAMELOOKUP_TIME_T "(3)"
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_NAMELOOKUP_TIME_T (3)
diff --git a/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME_T.3 b/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME_T.3
index 9a278a538..feff674b3 100644
--- a/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME_T.3
+++ b/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME_T.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 2022 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_NAMELOOKUP_TIME_T 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_NAMELOOKUP_TIME_T 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_NAMELOOKUP_TIME_T \- get the name lookup time in microseconds
@@ -44,20 +44,24 @@ See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
All
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- curl_off_t namelookup;
- curl_easy_setopt(curl, CURLOPT_URL, url);
- res = curl_easy_perform(curl);
- if(CURLE_OK == res) {
- res = curl_easy_getinfo(curl, CURLINFO_NAMELOOKUP_TIME_T, &namelookup);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_off_t namelookup;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
if(CURLE_OK == res) {
- printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", namelookup / 1000000,
- (long)(namelookup % 1000000));
+ res = curl_easy_getinfo(curl, CURLINFO_NAMELOOKUP_TIME_T, &namelookup);
+ if(CURLE_OK == res) {
+ printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", namelookup / 1000000,
+ (long)(namelookup % 1000000));
+ }
}
+ /* always cleanup */
+ curl_easy_cleanup(curl);
}
- /* always cleanup */
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -65,4 +69,6 @@ Added in 7.61.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), " CURLINFO_NAMELOOKUP_TIME "(3)"
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_NAMELOOKUP_TIME (3)
diff --git a/docs/libcurl/opts/CURLINFO_NUM_CONNECTS.3 b/docs/libcurl/opts/CURLINFO_NUM_CONNECTS.3
index 57f39769c..a26bf4fbe 100644
--- a/docs/libcurl/opts/CURLINFO_NUM_CONNECTS.3
+++ b/docs/libcurl/opts/CURLINFO_NUM_CONNECTS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_NUM_CONNECTS 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_NUM_CONNECTS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_NUM_CONNECTS \- get number of created connections
@@ -43,19 +43,22 @@ to make persistent connections to save time.
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
- res = curl_easy_perform(curl);
- if(res == CURLE_OK) {
- long connects;
- res = curl_easy_getinfo(curl, CURLINFO_NUM_CONNECTS, &connects);
- if(res)
- printf("It needed %d connects\\n", connects);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
+ res = curl_easy_perform(curl);
+ if(res == CURLE_OK) {
+ long connects;
+ res = curl_easy_getinfo(curl, CURLINFO_NUM_CONNECTS, &connects);
+ if(res)
+ printf("It needed %ld connects\\n", connects);
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -63,4 +66,5 @@ Added in 7.12.3
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3)
diff --git a/docs/libcurl/opts/CURLINFO_OS_ERRNO.3 b/docs/libcurl/opts/CURLINFO_OS_ERRNO.3
index cb37d6156..eac33e908 100644
--- a/docs/libcurl/opts/CURLINFO_OS_ERRNO.3
+++ b/docs/libcurl/opts/CURLINFO_OS_ERRNO.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_OS_ERRNO 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_OS_ERRNO 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_OS_ERRNO \- get errno number from last connect failure
@@ -40,19 +40,22 @@ operation. The number is OS and system specific.
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- res = curl_easy_perform(curl);
- if(res != CURLE_OK) {
- long error;
- res = curl_easy_getinfo(curl, CURLINFO_OS_ERRNO, &error);
- if(res && error) {
- printf("Errno: %ld\\n", error);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
+ if(res != CURLE_OK) {
+ long error;
+ res = curl_easy_getinfo(curl, CURLINFO_OS_ERRNO, &error);
+ if(res && error) {
+ printf("Errno: %ld\\n", error);
+ }
}
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -60,4 +63,5 @@ Added in 7.12.2
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3)
diff --git a/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.3 b/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.3
index ef611e803..c8f5cef40 100644
--- a/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.3
+++ b/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_PRETRANSFER_TIME 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_PRETRANSFER_TIME 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_PRETRANSFER_TIME \- get the time until the file transfer start
@@ -39,7 +39,7 @@ start until the file transfer is just about to begin.
This time-stamp includes all pre-transfer commands and negotiations that are
specific to the particular protocol(s) involved. It includes the sending of
-the protocol- specific protocol instructions that triggers a transfer.
+the protocol-specific instructions that trigger a transfer.
When a redirect is followed, the time from each request is added together.
@@ -48,19 +48,23 @@ See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
All
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- double pretransfer;
- curl_easy_setopt(curl, CURLOPT_URL, url);
- res = curl_easy_perform(curl);
- if(CURLE_OK == res) {
- res = curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME, &pretransfer);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ double pretransfer;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
if(CURLE_OK == res) {
- printf("Time: %.1f", pretransfer);
+ res = curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME, &pretransfer);
+ if(CURLE_OK == res) {
+ printf("Time: %.1f", pretransfer);
+ }
}
+ /* always cleanup */
+ curl_easy_cleanup(curl);
}
- /* always cleanup */
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -68,4 +72,7 @@ Added in 7.4.1
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), " CURLINFO_PRETRANSFER_TIME_T "(3)"
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_CONNECT_TIME_T (3),
+.BR CURLINFO_PRETRANSFER_TIME_T (3)
diff --git a/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME_T.3 b/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME_T.3
index fb78d8581..65dbe603b 100644
--- a/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME_T.3
+++ b/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME_T.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 2022 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_PRETRANSFER_TIME_T 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_PRETRANSFER_TIME_T 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_PRETRANSFER_TIME_T \- get the time until the file transfer start
@@ -34,12 +34,12 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRETRANSFER_TIME_T,
curl_off_t *timep);
.fi
.SH DESCRIPTION
-Pass a pointer to a curl_off_t to receive the time, in microseconds,
-it took from the
-start until the file transfer is just about to begin. This includes all
-pre-transfer commands and negotiations that are specific to the particular
-protocol(s) involved. It does \fInot\fP involve the sending of the protocol-
-specific request that triggers a transfer.
+Pass a pointer to a curl_off_t to receive the time, in microseconds, it took
+from the start until the file transfer is just about to begin.
+
+This time-stamp includes all pre-transfer commands and negotiations that are
+specific to the particular protocol(s) involved. It includes the sending of
+the protocol-specific instructions that trigger a transfer.
When a redirect is followed, the time from each request is added together.
@@ -48,20 +48,25 @@ See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
All
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- curl_off_t pretransfer;
- curl_easy_setopt(curl, CURLOPT_URL, url);
- res = curl_easy_perform(curl);
- if(CURLE_OK == res) {
- res = curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME_T, &pretransfer);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_off_t pretransfer;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ res = curl_easy_perform(curl);
if(CURLE_OK == res) {
- printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", pretransfer / 1000000,
- (long)(pretransfer % 1000000));
+ res = curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME_T, &pretransfer);
+ if(CURLE_OK == res) {
+ printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld\\n",
+ pretransfer / 1000000,
+ (long)(pretransfer % 1000000));
+ }
}
+ /* always cleanup */
+ curl_easy_cleanup(curl);
}
- /* always cleanup */
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -69,4 +74,7 @@ Added in 7.61.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), " CURLINFO_PRETRANSFER_TIME "(3)"
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_CONNECT_TIME (3),
+.BR CURLINFO_PRETRANSFER_TIME_T (3)
diff --git a/docs/libcurl/opts/CURLINFO_PRIMARY_IP.3 b/docs/libcurl/opts/CURLINFO_PRIMARY_IP.3
index f172c9d0e..ceb24c119 100644
--- a/docs/libcurl/opts/CURLINFO_PRIMARY_IP.3
+++ b/docs/libcurl/opts/CURLINFO_PRIMARY_IP.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_PRIMARY_IP 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_PRIMARY_IP 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_PRIMARY_IP \- get IP address of last connection
@@ -36,22 +36,25 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIMARY_IP, char **ip);
Pass a pointer to a char pointer to receive the pointer to a null-terminated
string holding the IP address of the most recent connection done with this
\fBcurl\fP handle. This string may be IPv6 when that is enabled. Note that you
-get a pointer to a memory area that will be re-used at next request so you
-need to copy the string if you want to keep the information.
+get a pointer to a memory area that is reused at next request so you need to
+copy the string if you want to keep the information.
-The \fBip\fP pointer will be NULL or pointing to private memory you MUST NOT
-free - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the
-corresponding CURL handle.
+The \fBip\fP pointer is NULL or points to private memory. You MUST NOT free -
+it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the corresponding
+CURL handle.
.SH PROTOCOLS
All network based ones
.SH EXAMPLE
.nf
+int main(void)
{
char *ip;
+ CURLcode res;
+ CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Perform the request, res will get the return code */
+ /* Perform the transfer */
res = curl_easy_perform(curl);
/* Check for errors */
if((res == CURLE_OK) &&
@@ -68,5 +71,8 @@ Added in 7.19.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLINFO_PRIMARY_PORT "(3), " CURLINFO_LOCAL_IP "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_LOCAL_IP (3),
+.BR CURLINFO_LOCAL_PORT (3),
+.BR CURLINFO_PRIMARY_PORT (3)
diff --git a/docs/libcurl/opts/CURLINFO_PRIMARY_PORT.3 b/docs/libcurl/opts/CURLINFO_PRIMARY_PORT.3
index f1ae29fd9..4e75ba119 100644
--- a/docs/libcurl/opts/CURLINFO_PRIMARY_PORT.3
+++ b/docs/libcurl/opts/CURLINFO_PRIMARY_PORT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_PRIMARY_PORT 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_PRIMARY_PORT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_PRIMARY_PORT \- get the latest destination port number
@@ -44,18 +44,21 @@ accessed URL.
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- res = curl_easy_perform(curl);
- if(res == CURLE_OK) {
- long port;
- res = curl_easy_getinfo(curl, CURLINFO_PRIMARY_PORT, &port);
- if(!res)
- printf("Connected to remote port: %ld\\n", port);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
+ if(res == CURLE_OK) {
+ long port;
+ res = curl_easy_getinfo(curl, CURLINFO_PRIMARY_PORT, &port);
+ if(!res)
+ printf("Connected to remote port: %ld\\n", port);
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -63,4 +66,7 @@ Added in 7.21.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_LOCAL_PORT (3),
+.BR CURLINFO_PRIMARY_IP (3)
diff --git a/docs/libcurl/opts/CURLINFO_PRIVATE.3 b/docs/libcurl/opts/CURLINFO_PRIVATE.3
index 0e8a51db6..660315639 100644
--- a/docs/libcurl/opts/CURLINFO_PRIVATE.3
+++ b/docs/libcurl/opts/CURLINFO_PRIVATE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_PRIVATE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_PRIVATE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_PRIVATE \- get the private pointer
@@ -41,19 +41,26 @@ pointer, although effectively being a 'void *'.
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- void *pointer = 0x2345454;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ void *pointer = (void *)0x2345454;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- /* set the private pointer */
- curl_easy_setopt(curl, CURLOPT_PRIVATE, pointer);
- ret = curl_easy_perform(curl);
+ /* set the private pointer */
+ curl_easy_setopt(curl, CURLOPT_PRIVATE, pointer);
+ res = curl_easy_perform(curl);
- /* extract the private pointer again */
- ret = curl_easy_getinfo(curl, CURLINFO_PRIVATE, &pointer);
+ /* extract the private pointer again */
+ res = curl_easy_getinfo(curl, CURLINFO_PRIVATE, &pointer);
- curl_easy_cleanup(curl);
+ if(res)
+ printf("error: %s\\n", curl_easy_strerror(res));
+
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -61,5 +68,6 @@ Added in 7.10.3
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLOPT_PRIVATE "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLOPT_PRIVATE (3)
diff --git a/docs/libcurl/opts/CURLINFO_PROTOCOL.3 b/docs/libcurl/opts/CURLINFO_PROTOCOL.3
index ece0b087f..17a86c94f 100644
--- a/docs/libcurl/opts/CURLINFO_PROTOCOL.3
+++ b/docs/libcurl/opts/CURLINFO_PROTOCOL.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_PROTOCOL 3 "October 12, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_PROTOCOL 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_PROTOCOL \- get the protocol used in the connection
@@ -38,7 +38,7 @@ This option is deprecated. We strongly recommend using
possible protocols!
Pass a pointer to a long to receive the version used in the last http
-connection. The returned value will be exactly one of the CURLPROTO_* values:
+connection. The returned value is set to one of the CURLPROTO_* values:
.nf
CURLPROTO_DICT, CURLPROTO_FILE, CURLPROTO_FTP, CURLPROTO_FTPS,
@@ -52,16 +52,19 @@ CURLPROTO_SMTPS, CURLPROTO_TELNET, CURLPROTO_TFTP, CURLPROTO_MQTT
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- res = curl_easy_perform(curl);
- if(res == CURLE_OK) {
- long protocol;
- curl_easy_getinfo(curl, CURLINFO_PROTOCOL, &protocol);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
+ if(res == CURLE_OK) {
+ long protocol;
+ curl_easy_getinfo(curl, CURLINFO_PROTOCOL, &protocol);
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -69,5 +72,6 @@ Added in 7.52.0. Deprecated since 7.85.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLINFO_RESPONSE_CODE "(3), "
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_RESPONSE_CODE (3)
diff --git a/docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.3 b/docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.3
index 13f126990..b5dda003f 100644
--- a/docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.3
+++ b/docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_PROXYAUTH_AVAIL 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_PROXYAUTH_AVAIL 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_PROXYAUTH_AVAIL \- get available HTTP proxy authentication methods
@@ -42,36 +42,42 @@ bits is explained in the \fICURLOPT_PROXYAUTH(3)\fP option for
HTTP(S)
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_PROXY, "http://127.0.0.1:80");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "http://127.0.0.1:80");
- res = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- if(!res) {
- /* extract the available proxy authentication types */
- long auth;
- res = curl_easy_getinfo(curl, CURLINFO_PROXYAUTH_AVAIL, &auth);
if(!res) {
- if(!auth)
- printf("No proxy auth available, perhaps no 407?\\n");
- else {
- printf("%s%s%s%s\\n",
- auth & CURLAUTH_BASIC ? "Basic ":"",
- auth & CURLAUTH_DIGEST ? "Digest ":"",
- auth & CURLAUTH_NEGOTIATE ? "Negotiate ":"",
- auth % CURLAUTH_NTLM ? "NTLM ":"");
+ /* extract the available proxy authentication types */
+ long auth;
+ res = curl_easy_getinfo(curl, CURLINFO_PROXYAUTH_AVAIL, &auth);
+ if(!res) {
+ if(!auth)
+ printf("No proxy auth available, perhaps no 407?\\n");
+ else {
+ printf("%s%s%s%s\\n",
+ auth & CURLAUTH_BASIC ? "Basic ":"",
+ auth & CURLAUTH_DIGEST ? "Digest ":"",
+ auth & CURLAUTH_NEGOTIATE ? "Negotiate ":"",
+ auth % CURLAUTH_NTLM ? "NTLM ":"");
+ }
}
}
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
-Added RFC2617 in 7.10.8
-Added RFC7616 in 7.57.0
+Added RFC 2617 in 7.10.8
+Added RFC 7616 in 7.57.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_HTTPAUTH_AVAIL (3)
diff --git a/docs/libcurl/opts/CURLINFO_PROXY_ERROR.3 b/docs/libcurl/opts/CURLINFO_PROXY_ERROR.3
index fd1354907..25f98c55c 100644
--- a/docs/libcurl/opts/CURLINFO_PROXY_ERROR.3
+++ b/docs/libcurl/opts/CURLINFO_PROXY_ERROR.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_PROXY_ERROR 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_PROXY_ERROR 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_PROXY_ERROR \- get the detailed (SOCKS) proxy error
@@ -72,29 +72,31 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROXY_ERROR, long *detail);
.fi
.SH DESCRIPTION
Pass a pointer to a long to receive a detailed error code when the most recent
-transfer returned a \fBCURLE_PROXY\fP error. That error code will match the
+transfer returned a \fBCURLE_PROXY\fP error. That error code matches the
\fBCURLproxycode\fP set.
-The error code will be zero (\fBCURLPX_OK\fP) if no response code was
-available.
+The error code is zero (\fBCURLPX_OK\fP) if no response code was available.
.SH PROTOCOLS
All that can be done over SOCKS
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_PROXY, "socks5://127.0.0.1");
- res = curl_easy_perform(curl);
- if(res == CURLE_PROXY) {
- long proxycode;
- res = curl_easy_getinfo(curl, CURLINFO_PROXY_ERROR, &proxycode);
- if(!res && proxycode)
- printf("The detailed proxy error: %ld\\n", proxycode);
+ curl_easy_setopt(curl, CURLOPT_PROXY, "socks5://127.0.0.1");
+ res = curl_easy_perform(curl);
+ if(res == CURLE_PROXY) {
+ long proxycode;
+ res = curl_easy_getinfo(curl, CURLINFO_PROXY_ERROR, &proxycode);
+ if(!res && proxycode)
+ printf("The detailed proxy error: %ld\\n", proxycode);
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -102,5 +104,7 @@ Added in 7.73.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLINFO_RESPONSE_CODE "(3), " libcurl-errors "(3), "
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_RESPONSE_CODE (3),
+.BR libcurl-errors (3)
diff --git a/docs/libcurl/opts/CURLINFO_PROXY_SSL_VERIFYRESULT.3 b/docs/libcurl/opts/CURLINFO_PROXY_SSL_VERIFYRESULT.3
index a8c049a85..d9cebfc7b 100644
--- a/docs/libcurl/opts/CURLINFO_PROXY_SSL_VERIFYRESULT.3
+++ b/docs/libcurl/opts/CURLINFO_PROXY_SSL_VERIFYRESULT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_PROXY_SSL_VERIFYRESULT 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_PROXY_SSL_VERIFYRESULT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_PROXY_SSL_VERIFYRESULT \- get the result of the proxy certificate verification
@@ -41,17 +41,22 @@ option. This is only used for HTTPS proxies.
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- long verifyresult;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy:443");
- res = curl_easy_perform(curl);
- curl_easy_getinfo(curl, CURLINFO_PROXY_SSL_VERIFYRESULT, &verifyresult);
- printf("The peer verification said %s\\n", verifyresult?
- "fine":"BAAAD");
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ long verifyresult;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy:443");
+ res = curl_easy_perform(curl);
+ if(res)
+ printf("error: %s\\n", curl_easy_strerror(res));
+ curl_easy_getinfo(curl, CURLINFO_PROXY_SSL_VERIFYRESULT, &verifyresult);
+ printf("The peer verification said %s\\n", verifyresult?
+ "fine" : "bad");
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -59,5 +64,6 @@ Added in 7.52.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLINFO_SSL_VERIFYRESULT "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_SSL_VERIFYRESULT (3)
diff --git a/docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.3 b/docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.3
index d8ac0c496..20a50ac5b 100644
--- a/docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.3
+++ b/docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_REDIRECT_COUNT 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_REDIRECT_COUNT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_REDIRECT_COUNT \- get the number of redirects
@@ -40,17 +40,20 @@ actually followed.
HTTP(S)
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
- res = curl_easy_perform(curl);
- if(res == CURLE_OK) {
- long redirects;
- curl_easy_getinfo(curl, CURLINFO_REDIRECT_COUNT, &redirects);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
+ res = curl_easy_perform(curl);
+ if(res == CURLE_OK) {
+ long redirects;
+ curl_easy_getinfo(curl, CURLINFO_REDIRECT_COUNT, &redirects);
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -58,4 +61,7 @@ Added in 7.9.7
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_REDIRECT_URL (3),
+.BR CURLOPT_FOLLOWLOCATION (3)
diff --git a/docs/libcurl/opts/CURLINFO_REDIRECT_TIME.3 b/docs/libcurl/opts/CURLINFO_REDIRECT_TIME.3
index 09b5aad0b..1443516b7 100644
--- a/docs/libcurl/opts/CURLINFO_REDIRECT_TIME.3
+++ b/docs/libcurl/opts/CURLINFO_REDIRECT_TIME.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_REDIRECT_TIME 3 "September 22, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_REDIRECT_TIME 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_REDIRECT_TIME \- get the time for all redirection steps
@@ -44,19 +44,23 @@ See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
All
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- double redirect;
- curl_easy_setopt(curl, CURLOPT_URL, url);
- res = curl_easy_perform(curl);
- if(CURLE_OK == res) {
- res = curl_easy_getinfo(curl, CURLINFO_REDIRECT_TIME, &redirect);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ double redirect;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
if(CURLE_OK == res) {
- printf("Time: %.1f", redirect);
+ res = curl_easy_getinfo(curl, CURLINFO_REDIRECT_TIME, &redirect);
+ if(CURLE_OK == res) {
+ printf("Time: %.1f", redirect);
+ }
}
+ /* always cleanup */
+ curl_easy_cleanup(curl);
}
- /* always cleanup */
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -64,4 +68,8 @@ Added in 7.9.7
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), " CURLINFO_REDIRECT_TIME_T "(3)"
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_REDIRECT_COUNT (3),
+.BR CURLINFO_REDIRECT_TIME_T (3),
+.BR CURLINFO_REDIRECT_URL (3)
diff --git a/docs/libcurl/opts/CURLINFO_REDIRECT_TIME_T.3 b/docs/libcurl/opts/CURLINFO_REDIRECT_TIME_T.3
index b628bfedd..cd5d2deff 100644
--- a/docs/libcurl/opts/CURLINFO_REDIRECT_TIME_T.3
+++ b/docs/libcurl/opts/CURLINFO_REDIRECT_TIME_T.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 2022 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_REDIRECT_TIME_T 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_REDIRECT_TIME_T 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_REDIRECT_TIME_T \- get the time for all redirection steps
@@ -34,31 +34,35 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_TIME_T,
curl_off_t *timep);
.fi
.SH DESCRIPTION
-Pass a pointer to a curl_off_t to receive the total time, in microseconds,
-it took for
-all redirection steps include name lookup, connect, pretransfer and transfer
-before final transaction was started. \fICURLINFO_REDIRECT_TIME_T\fP contains
-the complete execution time for multiple redirections.
+Pass a pointer to a curl_off_t to receive the total time, in microseconds, it
+took for all redirection steps include name lookup, connect, pretransfer and
+transfer before final transaction was started.
+\fICURLINFO_REDIRECT_TIME_T(3)\fP holds the complete execution time for
+multiple redirections.
See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- curl_off_t redirect;
- curl_easy_setopt(curl, CURLOPT_URL, url);
- res = curl_easy_perform(curl);
- if(CURLE_OK == res) {
- res = curl_easy_getinfo(curl, CURLINFO_REDIRECT_TIME_T, &redirect);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_off_t redirect;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
if(CURLE_OK == res) {
- printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", redirect / 1000000,
- (long)(redirect % 1000000));
+ res = curl_easy_getinfo(curl, CURLINFO_REDIRECT_TIME_T, &redirect);
+ if(CURLE_OK == res) {
+ printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", redirect / 1000000,
+ (long)(redirect % 1000000));
+ }
}
+ /* always cleanup */
+ curl_easy_cleanup(curl);
}
- /* always cleanup */
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -66,4 +70,8 @@ Added in 7.61.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), " CURLINFO_REDIRECT_TIME "(3)"
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_REDIRECT_COUNT (3),
+.BR CURLINFO_REDIRECT_TIME (3),
+.BR CURLINFO_REDIRECT_URL (3)
diff --git a/docs/libcurl/opts/CURLINFO_REDIRECT_URL.3 b/docs/libcurl/opts/CURLINFO_REDIRECT_URL.3
index 0311e4960..4e335892a 100644
--- a/docs/libcurl/opts/CURLINFO_REDIRECT_URL.3
+++ b/docs/libcurl/opts/CURLINFO_REDIRECT_URL.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_REDIRECT_URL 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_REDIRECT_URL 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_REDIRECT_URL \- get the URL a redirect would go to
@@ -45,18 +45,21 @@ redirect to happen (since 7.54.1).
HTTP(S)
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- res = curl_easy_perform(curl);
- if(res == CURLE_OK) {
- char *url = NULL;
- curl_easy_getinfo(curl, CURLINFO_REDIRECT_URL, &url);
- if(url)
- printf("Redirect to: %s\\n", url);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
+ if(res == CURLE_OK) {
+ char *url = NULL;
+ curl_easy_getinfo(curl, CURLINFO_REDIRECT_URL, &url);
+ if(url)
+ printf("Redirect to: %s\\n", url);
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -64,4 +67,8 @@ Added in 7.18.2
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_REDIRECT_COUNT (3),
+.BR CURLINFO_REDIRECT_TIME_T (3),
+.BR CURLOPT_FOLLOWLOCATION (3)
diff --git a/docs/libcurl/opts/CURLINFO_REFERER.3 b/docs/libcurl/opts/CURLINFO_REFERER.3
index d8ab0a483..dbcb48858 100644
--- a/docs/libcurl/opts/CURLINFO_REFERER.3
+++ b/docs/libcurl/opts/CURLINFO_REFERER.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_REFERER 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_REFERER 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_REFERER \- get the referrer header
@@ -35,26 +35,29 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REFERER, char **hdrp);
.SH DESCRIPTION
Pass in a pointer to a char pointer and get the referrer header.
-The \fBhdrp\fP pointer will be NULL or pointing to private memory you MUST NOT
-free - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the
-corresponding CURL handle.
+The \fBhdrp\fP pointer is NULL or points to private memory you MUST NOT free -
+it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the corresponding
+CURL handle.
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_REFERER, "https://example.org/referrer");
- res = curl_easy_perform(curl);
- if(res == CURLE_OK) {
- char *hdr = NULL;
- curl_easy_getinfo(curl, CURLINFO_REFERER, &hdr);
- if(hdr)
- printf("Referrer header: %s\\n", hdr);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_setopt(curl, CURLOPT_REFERER, "https://example.org/referrer");
+ res = curl_easy_perform(curl);
+ if(res == CURLE_OK) {
+ char *hdr = NULL;
+ curl_easy_getinfo(curl, CURLINFO_REFERER, &hdr);
+ if(hdr)
+ printf("Referrer header: %s\\n", hdr);
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -62,5 +65,7 @@ Added in 7.76.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLOPT_REFERER "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_header (3),
+.BR curl_easy_setopt (3),
+.BR CURLOPT_REFERER (3)
diff --git a/docs/libcurl/opts/CURLINFO_REQUEST_SIZE.3 b/docs/libcurl/opts/CURLINFO_REQUEST_SIZE.3
index 67387f4d6..1f0917e11 100644
--- a/docs/libcurl/opts/CURLINFO_REQUEST_SIZE.3
+++ b/docs/libcurl/opts/CURLINFO_REQUEST_SIZE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_REQUEST_SIZE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_REQUEST_SIZE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_REQUEST_SIZE \- get size of sent request
@@ -40,18 +40,21 @@ than one request if \fICURLOPT_FOLLOWLOCATION(3)\fP is enabled.
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- res = curl_easy_perform(curl);
- if(res == CURLE_OK) {
- long req;
- res = curl_easy_getinfo(curl, CURLINFO_REQUEST_SIZE, &req);
- if(!res)
- printf("Request size: %ld bytes\\n", req);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
+ if(res == CURLE_OK) {
+ long req;
+ res = curl_easy_getinfo(curl, CURLINFO_REQUEST_SIZE, &req);
+ if(!res)
+ printf("Request size: %ld bytes\\n", req);
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -59,6 +62,7 @@ Added in 7.4.1
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLINFO_HEADER_SIZE "(3), "
-.BR CURLINFO_SIZE_DOWNLOAD "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_HEADER_SIZE (3),
+.BR CURLINFO_SIZE_DOWNLOAD_T (3)
diff --git a/docs/libcurl/opts/CURLINFO_RESPONSE_CODE.3 b/docs/libcurl/opts/CURLINFO_RESPONSE_CODE.3
index 7254d96c4..4b5cc8d7a 100644
--- a/docs/libcurl/opts/CURLINFO_RESPONSE_CODE.3
+++ b/docs/libcurl/opts/CURLINFO_RESPONSE_CODE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_RESPONSE_CODE 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_RESPONSE_CODE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_RESPONSE_CODE \- get the last response code
@@ -33,26 +33,30 @@ CURLINFO_RESPONSE_CODE \- get the last response code
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RESPONSE_CODE, long *codep);
.fi
.SH DESCRIPTION
-Pass a pointer to a long to receive the last received HTTP, FTP, SMTP or
-LDAP (OpenLDAP only) response code. This option was previously known as
-CURLINFO_HTTP_CODE in libcurl 7.10.7 and earlier.
-The stored value will be zero if no server response code has been received.
-Note that a proxy's CONNECT response should
-be read with \fICURLINFO_HTTP_CONNECTCODE(3)\fP and not this.
+Pass a pointer to a long to receive the last received HTTP, FTP, SMTP or LDAP
+(OpenLDAP only) response code. This option was previously known as
+CURLINFO_HTTP_CODE in libcurl 7.10.7 and earlier. The stored value is zero if
+no server response code has been received.
+
+Note that a proxy's CONNECT response should be read with
+\fICURLINFO_HTTP_CONNECTCODE(3)\fP and not this.
.SH PROTOCOLS
HTTP, FTP, SMTP and LDAP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- res = curl_easy_perform(curl);
- if(res == CURLE_OK) {
- long response_code;
- curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
+ if(res == CURLE_OK) {
+ long response_code;
+ curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -61,5 +65,6 @@ Support for SMTP responses added in 7.25.0, for OpenLDAP in 7.81.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLINFO_HTTP_CONNECTCODE "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_HTTP_CONNECTCODE (3)
diff --git a/docs/libcurl/opts/CURLINFO_RETRY_AFTER.3 b/docs/libcurl/opts/CURLINFO_RETRY_AFTER.3
index 1de0f884b..b6abe65a0 100644
--- a/docs/libcurl/opts/CURLINFO_RETRY_AFTER.3
+++ b/docs/libcurl/opts/CURLINFO_RETRY_AFTER.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_RETRY_AFTER 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_RETRY_AFTER 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_RETRY_AFTER \- returns the Retry-After retry delay
@@ -39,7 +39,7 @@ HTTP server suggests the client should wait until the next request is
issued. The information from the "Retry-After:" header.
While the HTTP header might contain a fixed date string, the
-\fICURLINFO_RETRY_AFTER(3)\fP will always return number of seconds to wait -
+\fICURLINFO_RETRY_AFTER(3)\fP always returns the number of seconds to wait -
or zero if there was no header or the header could not be parsed.
.SH DEFAULT
Returns zero delay if there was no header.
@@ -47,18 +47,21 @@ Returns zero delay if there was no header.
HTTP(S)
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- res = curl_easy_perform(curl);
- if(res == CURLE_OK) {
- curl_off_t wait = 0;
- curl_easy_getinfo(curl, CURLINFO_RETRY_AFTER, &wait);
- if(wait)
- printf("Wait for %" CURL_FORMAT_CURL_OFF_T " seconds\\n", wait);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
+ if(res == CURLE_OK) {
+ curl_off_t wait = 0;
+ curl_easy_getinfo(curl, CURLINFO_RETRY_AFTER, &wait);
+ if(wait)
+ printf("Wait for %" CURL_FORMAT_CURL_OFF_T " seconds\\n", wait);
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -66,4 +69,6 @@ Added in 7.66.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_STDERR "(3), " CURLOPT_HEADERFUNCTION "(3), "
+.BR curl_easy_header (3),
+.BR CURLOPT_HEADERFUNCTION (3),
+.BR CURLOPT_STDERR (3)
diff --git a/docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.3 b/docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.3
index 7494d2ff2..ca655dc09 100644
--- a/docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.3
+++ b/docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_RTSP_CLIENT_CSEQ 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_RTSP_CLIENT_CSEQ 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_RTSP_CLIENT_CSEQ \- get the next RTSP client CSeq
@@ -34,22 +34,25 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_CLIENT_CSEQ,
long *cseq);
.fi
.SH DESCRIPTION
-Pass a pointer to a long to receive the next CSeq that will be used by the
-application.
+Pass a pointer to a long to receive the next CSeq that is expected to be used
+by the application.
.SH PROTOCOLS
RTSP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "rtsp://rtsp.example.com");
- res = curl_easy_perform(curl);
- if(res == CURLE_OK) {
- long cseq;
- curl_easy_getinfo(curl, CURLINFO_RTSP_CLIENT_CSEQ, &cseq);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "rtsp://rtsp.example.com");
+ res = curl_easy_perform(curl);
+ if(res == CURLE_OK) {
+ long cseq;
+ curl_easy_getinfo(curl, CURLINFO_RTSP_CLIENT_CSEQ, &cseq);
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -57,4 +60,7 @@ Added in 7.20.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_RTSP_CSEQ_RECV (3),
+.BR CURLINFO_RTSP_SERVER_CSEQ (3)
diff --git a/docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.3 b/docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.3
index ccda2badc..763094849 100644
--- a/docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.3
+++ b/docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_RTSP_CSEQ_RECV 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_RTSP_CSEQ_RECV 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_RTSP_CSEQ_RECV \- get the recently received CSeq
@@ -41,16 +41,19 @@ value.
RTSP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "rtsp://rtsp.example.com");
- res = curl_easy_perform(curl);
- if(res == CURLE_OK) {
- long cseq;
- curl_easy_getinfo(curl, CURLINFO_RTSP_CSEQ_RECV, &cseq);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "rtsp://rtsp.example.com");
+ res = curl_easy_perform(curl);
+ if(res == CURLE_OK) {
+ long cseq;
+ curl_easy_getinfo(curl, CURLINFO_RTSP_CSEQ_RECV, &cseq);
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -58,4 +61,6 @@ Added in 7.20.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_RTSP_SERVER_CSEQ (3)
diff --git a/docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.3 b/docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.3
index 754524a13..48358cd43 100644
--- a/docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.3
+++ b/docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_RTSP_SERVER_CSEQ 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_RTSP_SERVER_CSEQ 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_RTSP_SERVER_CSEQ \- get the next RTSP server CSeq
@@ -34,8 +34,8 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_SERVER_CSEQ,
long *cseq);
.fi
.SH DESCRIPTION
-Pass a pointer to a long to receive the next CSeq that will be expected by the
-application.
+Pass a pointer to a long to receive the next CSeq that is expected to be used
+by the application.
Listening for server initiated requests is not implemented!
@@ -45,16 +45,19 @@ retrieve this info before closing the active connection.
RTSP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "rtsp://rtsp.example.com");
- res = curl_easy_perform(curl);
- if(res == CURLE_OK) {
- long cseq;
- curl_easy_getinfo(curl, CURLINFO_RTSP_SERVER_CSEQ, &cseq);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "rtsp://rtsp.example.com");
+ res = curl_easy_perform(curl);
+ if(res == CURLE_OK) {
+ long cseq;
+ curl_easy_getinfo(curl, CURLINFO_RTSP_SERVER_CSEQ, &cseq);
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -62,4 +65,6 @@ Added in 7.20.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_RTSP_CSEQ_RECV (3)
diff --git a/docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.3 b/docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.3
index f5a233459..aab65eca9 100644
--- a/docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.3
+++ b/docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_RTSP_SESSION_ID 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_RTSP_SESSION_ID 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_RTSP_SESSION_ID \- get RTSP session ID
@@ -39,23 +39,26 @@ most recent RTSP Session ID.
Applications wishing to resume an RTSP session on another connection should
retrieve this info before closing the active connection.
-The \fBid\fP pointer will be NULL or pointing to private memory you MUST NOT
-free - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the
-corresponding CURL handle.
+The \fBid\fP pointer is NULL or points to private memory. You MUST NOT free -
+it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the corresponding
+CURL handle.
.SH PROTOCOLS
RTSP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "rtsp://rtsp.example.com");
- res = curl_easy_perform(curl);
- if(res == CURLE_OK) {
- char *id;
- curl_easy_getinfo(curl, CURLINFO_RTSP_SESSION_ID, &id);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "rtsp://rtsp.example.com");
+ res = curl_easy_perform(curl);
+ if(res == CURLE_OK) {
+ char *id;
+ curl_easy_getinfo(curl, CURLINFO_RTSP_SESSION_ID, &id);
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -63,4 +66,6 @@ Added in 7.20.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_RTSP_CSEQ_RECV (3)
diff --git a/docs/libcurl/opts/CURLINFO_SCHEME.3 b/docs/libcurl/opts/CURLINFO_SCHEME.3
index 7b9db05ec..7f3d0d6fd 100644
--- a/docs/libcurl/opts/CURLINFO_SCHEME.3
+++ b/docs/libcurl/opts/CURLINFO_SCHEME.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_SCHEME 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_SCHEME 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_SCHEME \- get the URL scheme (sometimes called protocol) used in the connection
@@ -37,25 +37,28 @@ Pass a pointer to a char pointer to receive the pointer to a null-terminated
string holding the URL scheme used for the most recent connection done with
this CURL \fBhandle\fP.
-The \fBscheme\fP pointer will be NULL or pointing to private memory you MUST
-NOT free - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the
+The \fBscheme\fP pointer is NULL or points to private memory. You MUST NOT
+free - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the
corresponding CURL handle.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- res = curl_easy_perform(curl);
- if(res == CURLE_OK) {
- char *scheme = NULL;
- curl_easy_getinfo(curl, CURLINFO_SCHEME, &scheme);
- if(scheme)
- printf("scheme: %s\\n", scheme); /* scheme: HTTP */
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
+ if(res == CURLE_OK) {
+ char *scheme = NULL;
+ curl_easy_getinfo(curl, CURLINFO_SCHEME, &scheme);
+ if(scheme)
+ printf("scheme: %s\\n", scheme); /* scheme: HTTP */
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -63,5 +66,8 @@ Added in 7.52.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLINFO_RESPONSE_CODE "(3), "
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_EFFECTIVE_URL (3),
+.BR CURLINFO_PROTOCOL (3),
+.BR CURLINFO_RESPONSE_CODE (3)
diff --git a/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.3 b/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.3
index b978b13bc..1a84297c1 100644
--- a/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.3
+++ b/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_SIZE_DOWNLOAD 3 "October 12, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_SIZE_DOWNLOAD 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_SIZE_DOWNLOAD \- get the number of downloaded bytes
@@ -34,10 +34,10 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_DOWNLOAD, double *dlp);
.fi
.SH DESCRIPTION
Pass a pointer to a double to receive the total amount of bytes that were
-downloaded. The amount is only for the latest transfer and will be reset
-again for each new transfer. This counts actual payload data, what's also
-commonly called body. All meta and header data are excluded and will not be
-counted in this number.
+downloaded. The amount is only for the latest transfer and gets reset again
+for each new transfer. This counts actual payload data, what's also commonly
+called body. All meta and header data is excluded and not included in this
+number.
\fICURLINFO_SIZE_DOWNLOAD_T(3)\fP is a newer replacement that returns a more
sensible variable type.
@@ -45,19 +45,23 @@ sensible variable type.
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Perform the request */
- res = curl_easy_perform(curl);
+ /* Perform the request */
+ res = curl_easy_perform(curl);
- if(!res) {
- /* check the size */
- double dl;
- res = curl_easy_getinfo(curl, CURLINFO_SIZE_DOWNLOAD, &dl);
if(!res) {
- printf("Downloaded %.0f bytes\\n", cl);
+ /* check the size */
+ double dl;
+ res = curl_easy_getinfo(curl, CURLINFO_SIZE_DOWNLOAD, &dl);
+ if(!res) {
+ printf("Downloaded %.0f bytes\\n", dl);
+ }
}
}
}
@@ -67,6 +71,8 @@ Added in 7.4.1. Deprecated since 7.55.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLINFO_SIZE_DOWNLOAD_T "(3), "
-.BR CURLINFO_SIZE_UPLOAD_T "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_SIZE_DOWNLOAD_T (3),
+.BR CURLINFO_SIZE_UPLOAD_T (3),
+.BR CURLOPT_MAXFILESIZE (3)
diff --git a/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD_T.3 b/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD_T.3
index 19807218e..ac4e7db5e 100644
--- a/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD_T.3
+++ b/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD_T.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_SIZE_DOWNLOAD_T 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_SIZE_DOWNLOAD_T 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_SIZE_DOWNLOAD_T \- get the number of downloaded bytes
@@ -35,27 +35,30 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_DOWNLOAD_T,
.fi
.SH DESCRIPTION
Pass a pointer to a \fIcurl_off_t\fP to receive the total amount of bytes that
-were downloaded. The amount is only for the latest transfer and will be reset
+were downloaded. The amount is only for the latest transfer and gets reset
again for each new transfer. This counts actual payload data, what's also
-commonly called body. All meta and header data are excluded and will not be
-counted in this number.
+commonly called body. All meta and header data is excluded from this amount.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Perform the request */
- res = curl_easy_perform(curl);
+ /* Perform the request */
+ res = curl_easy_perform(curl);
- if(!res) {
- /* check the size */
- curl_off_t dl;
- res = curl_easy_getinfo(curl, CURLINFO_SIZE_DOWNLOAD_T, &dl);
if(!res) {
- printf("Downloaded %" CURL_FORMAT_CURL_OFF_T " bytes\\n", dl);
+ /* check the size */
+ curl_off_t dl;
+ res = curl_easy_getinfo(curl, CURLINFO_SIZE_DOWNLOAD_T, &dl);
+ if(!res) {
+ printf("Downloaded %" CURL_FORMAT_CURL_OFF_T " bytes\\n", dl);
+ }
}
}
}
@@ -65,6 +68,8 @@ Added in 7.55.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLINFO_SIZE_DOWNLOAD "(3), "
-.BR CURLINFO_SIZE_UPLOAD_T "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_SIZE_DOWNLOAD (3),
+.BR CURLINFO_SIZE_UPLOAD_T (3),
+.BR CURLOPT_MAXFILESIZE (3)
diff --git a/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.3 b/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.3
index 920273e1f..d73c25c53 100644
--- a/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.3
+++ b/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_SIZE_UPLOAD 3 "October 12, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_SIZE_UPLOAD 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_SIZE_UPLOAD \- get the number of uploaded bytes
@@ -43,18 +43,22 @@ sensible variable type.
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Perform the request */
- res = curl_easy_perform(curl);
+ /* Perform the request */
+ res = curl_easy_perform(curl);
- if(!res) {
- double ul;
- res = curl_easy_getinfo(curl, CURLINFO_SIZE_UPLOAD, &ul);
if(!res) {
- printf("Uploaded %.0f bytes\\n", ul);
+ double ul;
+ res = curl_easy_getinfo(curl, CURLINFO_SIZE_UPLOAD, &ul);
+ if(!res) {
+ printf("Uploaded %.0f bytes\\n", ul);
+ }
}
}
}
@@ -64,5 +68,7 @@ Added in 7.4.1. Deprecated since 7.55.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLINFO_SIZE_DOWNLOAD_T "(3), " CURLINFO_SIZE_UPLOAD_T "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_SIZE_DOWNLOAD_T (3),
+.BR CURLINFO_SIZE_UPLOAD_T (3)
diff --git a/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD_T.3 b/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD_T.3
index 1a3f1c26f..01173b7fe 100644
--- a/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD_T.3
+++ b/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD_T.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_SIZE_UPLOAD_T 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_SIZE_UPLOAD_T 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_SIZE_UPLOAD_T \- get the number of uploaded bytes
@@ -40,18 +40,22 @@ were uploaded.
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Perform the request */
- res = curl_easy_perform(curl);
+ /* Perform the request */
+ res = curl_easy_perform(curl);
- if(!res) {
- curl_off_t ul;
- res = curl_easy_getinfo(curl, CURLINFO_SIZE_UPLOAD_T, &ul);
if(!res) {
- printf("Uploaded %" CURL_FORMAT_CURL_OFF_T " bytes\\n", ul);
+ curl_off_t ul;
+ res = curl_easy_getinfo(curl, CURLINFO_SIZE_UPLOAD_T, &ul);
+ if(!res) {
+ printf("Uploaded %" CURL_FORMAT_CURL_OFF_T " bytes\\n", ul);
+ }
}
}
}
@@ -61,5 +65,8 @@ Added in 7.55.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLINFO_SIZE_DOWNLOAD_T "(3), " CURLINFO_SIZE_UPLOAD "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_SIZE_DOWNLOAD_T (3),
+.BR CURLINFO_SIZE_UPLOAD (3)
+
diff --git a/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.3 b/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.3
index ef4b14d36..74a45d900 100644
--- a/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.3
+++ b/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_SPEED_DOWNLOAD 3 "October 12, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_SPEED_DOWNLOAD 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_SPEED_DOWNLOAD \- get download speed
@@ -42,18 +42,22 @@ sensible variable type.
.SH PROTOCOLS
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Perform the request */
- res = curl_easy_perform(curl);
+ /* Perform the request */
+ res = curl_easy_perform(curl);
- if(!res) {
- double speed;
- res = curl_easy_getinfo(curl, CURLINFO_SPEED_DOWNLOAD, &speed);
if(!res) {
- printf("Download speed %.0f bytes/sec\\n", speed);
+ double speed;
+ res = curl_easy_getinfo(curl, CURLINFO_SPEED_DOWNLOAD, &speed);
+ if(!res) {
+ printf("Download speed %.0f bytes/sec\\n", speed);
+ }
}
}
}
@@ -63,6 +67,7 @@ Added in 7.4.1. Deprecated since 7.55.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLINFO_SPEED_UPLOAD "(3), "
-.BR CURLINFO_SIZE_UPLOAD_T "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_SIZE_UPLOAD_T (3),
+.BR CURLINFO_SPEED_UPLOAD (3)
diff --git a/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD_T.3 b/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD_T.3
index 1050c7ccf..741df2fda 100644
--- a/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD_T.3
+++ b/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD_T.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_SPEED_DOWNLOAD_T 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_SPEED_DOWNLOAD_T 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_SPEED_DOWNLOAD_T \- get download speed
@@ -39,18 +39,23 @@ that curl measured for the complete download. Measured in bytes/second.
.SH PROTOCOLS
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Perform the request */
- res = curl_easy_perform(curl);
+ /* Perform the request */
+ res = curl_easy_perform(curl);
- if(!res) {
- curl_off_t speed;
- res = curl_easy_getinfo(curl, CURLINFO_SPEED_DOWNLOAD_T, &speed);
if(!res) {
- printf("Download speed %" CURL_FORMAT_CURL_OFF_T " bytes/sec\\n", speed);
+ curl_off_t speed;
+ res = curl_easy_getinfo(curl, CURLINFO_SPEED_DOWNLOAD_T, &speed);
+ if(!res) {
+ printf("Download speed %" CURL_FORMAT_CURL_OFF_T " bytes/sec\\n",
+ speed);
+ }
}
}
}
@@ -60,6 +65,8 @@ Added in 7.55.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLINFO_SPEED_UPLOAD "(3), "
-.BR CURLINFO_SIZE_UPLOAD_T "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_SIZE_UPLOAD_T (3),
+.BR CURLINFO_SPEED_UPLOAD_T (3)
+
diff --git a/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.3 b/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.3
index 3ff75c87e..eb3145ef6 100644
--- a/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.3
+++ b/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_SPEED_UPLOAD 3 "October 12, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_SPEED_UPLOAD 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_SPEED_UPLOAD \- get upload speed
@@ -41,18 +41,22 @@ sensible variable type.
.SH PROTOCOLS
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Perform the request */
- res = curl_easy_perform(curl);
+ /* Perform the request */
+ res = curl_easy_perform(curl);
- if(!res) {
- double speed;
- res = curl_easy_getinfo(curl, CURLINFO_SPEED_UPLOAD, &speed);
if(!res) {
- printf("Upload speed %.0f bytes/sec\\n", speed);
+ double speed;
+ res = curl_easy_getinfo(curl, CURLINFO_SPEED_UPLOAD, &speed);
+ if(!res) {
+ printf("Upload speed %.0f bytes/sec\\n", speed);
+ }
}
}
}
@@ -62,5 +66,6 @@ Added in 7.4.1. Deprecated since 7.55.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLINFO_SPEED_DOWNLOAD "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_SPEED_DOWNLOAD_T (3)
diff --git a/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD_T.3 b/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD_T.3
index 501d52e9e..a47e8c435 100644
--- a/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD_T.3
+++ b/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD_T.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_SPEED_UPLOAD_T 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_SPEED_UPLOAD_T 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_SPEED_UPLOAD_T \- get upload speed
@@ -39,18 +39,22 @@ curl measured for the complete upload. Measured in bytes/second.
.SH PROTOCOLS
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Perform the request */
- res = curl_easy_perform(curl);
+ /* Perform the request */
+ res = curl_easy_perform(curl);
- if(!res) {
- curl_off_t speed;
- res = curl_easy_getinfo(curl, CURLINFO_SPEED_UPLOAD_T, &speed);
if(!res) {
- printf("Upload speed %" CURL_FORMAT_CURL_OFF_T " bytes/sec\\n", speed);
+ curl_off_t speed;
+ res = curl_easy_getinfo(curl, CURLINFO_SPEED_UPLOAD_T, &speed);
+ if(!res) {
+ printf("Upload speed %" CURL_FORMAT_CURL_OFF_T " bytes/sec\\n", speed);
+ }
}
}
}
@@ -60,5 +64,6 @@ Added in 7.55.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLINFO_SPEED_DOWNLOAD_T "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_SPEED_DOWNLOAD_T (3)
diff --git a/docs/libcurl/opts/CURLINFO_SSL_ENGINES.3 b/docs/libcurl/opts/CURLINFO_SSL_ENGINES.3
index 78cfa70cd..b0020fcc4 100644
--- a/docs/libcurl/opts/CURLINFO_SSL_ENGINES.3
+++ b/docs/libcurl/opts/CURLINFO_SSL_ENGINES.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_SSL_ENGINES 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_SSL_ENGINES 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_SSL_ENGINES \- get an slist of OpenSSL crypto-engines
@@ -38,23 +38,26 @@ Pass the address of a 'struct curl_slist *' to receive a linked-list of
OpenSSL crypto-engines supported. Note that engines are normally implemented
in separate dynamic libraries. Hence not all the returned engines may be
available at runtime. \fBNOTE:\fP you must call \fIcurl_slist_free_all(3)\fP
-on the list pointer once you are done with it, as libcurl will not free the
+on the list pointer once you are done with it, as libcurl does not free this
data for you.
.SH PROTOCOLS
All TLS based ones.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- struct curl_slist *engines;
- res = curl_easy_getinfo(curl, CURLINFO_SSL_ENGINES, &engines);
- if((res == CURLE_OK) && engines) {
- /* we have a list, free it when done using it */
- curl_slist_free_all(engines);
- }
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ struct curl_slist *engines;
+ res = curl_easy_getinfo(curl, CURLINFO_SSL_ENGINES, &engines);
+ if((res == CURLE_OK) && engines) {
+ /* we have a list, free it when done using it */
+ curl_slist_free_all(engines);
+ }
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -62,4 +65,6 @@ Added in 7.12.3. Available in OpenSSL builds with "engine" support.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLOPT_SSLENGINE (3)
diff --git a/docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.3 b/docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.3
index 2ab2e2fb7..944a1d18e 100644
--- a/docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.3
+++ b/docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_SSL_VERIFYRESULT 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_SSL_VERIFYRESULT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_SSL_VERIFYRESULT \- get the result of the certificate verification
@@ -43,21 +43,28 @@ option).
All using TLS
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- long verifyresult;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- res = curl_easy_perform(curl);
- curl_easy_getinfo(curl, CURLINFO_SSL_VERIFYRESULT, &verifyresult);
- printf("The peer verification said %s\\n", verifyresult?
- "BAAAD":"fine");
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ long verifyresult;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
+ if(res)
+ printf("error: %s\\n", curl_easy_strerror(res));
+ curl_easy_getinfo(curl, CURLINFO_SSL_VERIFYRESULT, &verifyresult);
+ printf("The peer verification said %s\\n", verifyresult?
+ "BAAAD":"fine");
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
-Added in 7.5. Only set by the OpenSSL/libressl/boringssl, NSS and GnuTLS backends.
+Added in 7.5. Only set by the OpenSSL/libressl/boringssl and GnuTLS backends.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_PROXY_SSL_VERIFYRESULT (3)
diff --git a/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.3 b/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.3
index 6456103ed..32860832d 100644
--- a/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.3
+++ b/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_STARTTRANSFER_TIME 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_STARTTRANSFER_TIME 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_STARTTRANSFER_TIME \- get the time until the first byte is received
@@ -46,19 +46,23 @@ See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
All
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- double start;
- curl_easy_setopt(curl, CURLOPT_URL, url);
- res = curl_easy_perform(curl);
- if(CURLE_OK == res) {
- res = curl_easy_getinfo(curl, CURLINFO_STARTTRANSFER_TIME, &start);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ double start;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
if(CURLE_OK == res) {
- printf("Time: %.1f", start);
+ res = curl_easy_getinfo(curl, CURLINFO_STARTTRANSFER_TIME, &start);
+ if(CURLE_OK == res) {
+ printf("Time: %.1f", start);
+ }
}
+ /* always cleanup */
+ curl_easy_cleanup(curl);
}
- /* always cleanup */
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -66,4 +70,7 @@ Added in 7.9.2
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), " CURLINFO_STARTTRANSFER_TIME_T "(3)"
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_STARTTRANSFER_TIME_T (3),
+.BR CURLOPT_TIMEOUT (3)
diff --git a/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME_T.3 b/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME_T.3
index 748a67177..9820f00ab 100644
--- a/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME_T.3
+++ b/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME_T.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 2022 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_STARTTRANSFER_TIME_T 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_STARTTRANSFER_TIME_T 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_STARTTRANSFER_TIME_T \- get the time until the first byte is received
@@ -47,20 +47,24 @@ See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
All
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- curl_off_t start;
- curl_easy_setopt(curl, CURLOPT_URL, url);
- res = curl_easy_perform(curl);
- if(CURLE_OK == res) {
- res = curl_easy_getinfo(curl, CURLINFO_STARTTRANSFER_TIME_T, &start);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_off_t start;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
if(CURLE_OK == res) {
- printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", start / 1000000,
- (long)(start % 1000000));
+ res = curl_easy_getinfo(curl, CURLINFO_STARTTRANSFER_TIME_T, &start);
+ if(CURLE_OK == res) {
+ printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", start / 1000000,
+ (long)(start % 1000000));
+ }
}
+ /* always cleanup */
+ curl_easy_cleanup(curl);
}
- /* always cleanup */
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -68,4 +72,7 @@ Added in 7.61.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), " CURLINFO_STARTTRANSFER_TIME "(3)"
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_STARTTRANSFER_TIME (3),
+.BR CURLOPT_TIMEOUT (3)
diff --git a/docs/libcurl/opts/CURLINFO_TLS_SESSION.3 b/docs/libcurl/opts/CURLINFO_TLS_SESSION.3
index 8de551a87..57bb6da4b 100644
--- a/docs/libcurl/opts/CURLINFO_TLS_SESSION.3
+++ b/docs/libcurl/opts/CURLINFO_TLS_SESSION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_TLS_SESSION 3 "October 12, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_TLS_SESSION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_TLS_SESSION \- get TLS session info
@@ -53,21 +53,27 @@ that document for more information.
All TLS-based
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- struct curl_tlssessioninfo *tls;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- res = curl_easy_perform(curl);
- curl_easy_getinfo(curl, CURLINFO_TLS_SESSION, &tls);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ struct curl_tlssessioninfo *tls;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
+ if(res)
+ printf("error: %s\\n", curl_easy_strerror(res));
+ curl_easy_getinfo(curl, CURLINFO_TLS_SESSION, &tls);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
-Added in 7.34.0. Deprecated since 7.48.0 and supported OpenSSL, GnuTLS,
-NSS and gskit only up until this version was released.
+Added in 7.34.0. Deprecated since 7.48.0 and supported OpenSSL, GnuTLS, and
+NSS only up until this version was released.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLINFO_TLS_SSL_PTR "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_TLS_SSL_PTR (3)
diff --git a/docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.3 b/docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.3
index c90b30829..4d7bc6b4d 100644
--- a/docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.3
+++ b/docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_TLS_SSL_PTR 3 "September 22, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_TLS_SSL_PTR 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_TLS_SESSION, CURLINFO_TLS_SSL_PTR \- get TLS session info
@@ -39,9 +39,9 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TLS_SSL_PTR,
CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TLS_SESSION,
struct curl_tlssessioninfo **session);
.SH DESCRIPTION
-Pass a pointer to a \fIstruct curl_tlssessioninfo *\fP. The pointer will be
-initialized to refer to a \fIstruct curl_tlssessioninfo *\fP that will contain
-an enum indicating the SSL library used for the handshake and a pointer to the
+Pass a pointer to a \fIstruct curl_tlssessioninfo *\fP. The pointer is
+initialized to refer to a \fIstruct curl_tlssessioninfo *\fP that contains an
+enum indicating the SSL library used for the handshake and a pointer to the
respective internal TLS session structure of this underlying SSL library.
This option may be useful for example to extract certificate information in a
@@ -58,18 +58,15 @@ struct curl_tlssessioninfo {
The \fIbackend\fP struct member is one of the defines in the CURLSSLBACKEND_*
series: CURLSSLBACKEND_NONE (when built without TLS support),
CURLSSLBACKEND_WOLFSSL, CURLSSLBACKEND_SECURETRANSPORT, CURLSSLBACKEND_GNUTLS,
-CURLSSLBACKEND_GSKIT, CURLSSLBACKEND_MBEDTLS, CURLSSLBACKEND_NSS,
-CURLSSLBACKEND_OPENSSL, CURLSSLBACKEND_SCHANNEL or
-CURLSSLBACKEND_MESALINK. (Note that the OpenSSL forks are all reported as just
-OpenSSL here.)
+CURLSSLBACKEND_MBEDTLS, CURLSSLBACKEND_NSS, CURLSSLBACKEND_OPENSSL,
+CURLSSLBACKEND_SCHANNEL or CURLSSLBACKEND_MESALINK. (Note that the OpenSSL
+forks are all reported as just OpenSSL here.)
-The \fIinternals\fP struct member will point to a TLS library specific pointer
-for the active ("in use") SSL connection, with the following underlying types:
+The \fIinternals\fP struct member points to a TLS library specific pointer for
+the active ("in use") SSL connection, with the following underlying types:
.RS
.IP GnuTLS
\fBgnutls_session_t\fP
-.IP gskit
-\fBgsk_handle\fP
.IP NSS
\fBPRFileDesc *\fP
.IP OpenSSL
@@ -92,7 +89,8 @@ as well:
If the \fIinternals\fP pointer is NULL then either the SSL backend is not
supported, an SSL session has not yet been established or the connection is no
-longer associated with the easy handle (e.g. curl_easy_perform has returned).
+longer associated with the easy handle (e.g. \fIcurl_easy_perform(3)\fP has
+returned).
.SH LIMITATIONS
This option has some limitations that could make it unsafe when it comes to
the manual verification of certificates.
@@ -105,9 +103,9 @@ retrieve a second in-use SSL session associated with an easy handle.
This option has not been thoroughly tested with clear text protocols that can
be upgraded/downgraded to/from SSL: FTP, SMTP, POP3, IMAP when used with
-\fICURLOPT_USE_SSL(3)\fP. Though you will be able to retrieve the SSL pointer,
-it's possible that before you can do that data (including auth) may have
-already been sent over a connection after it was upgraded.
+\fICURLOPT_USE_SSL(3)\fP. Though you can to retrieve the SSL pointer, it's
+possible that before you can do that, data (including auth) may have already
+been sent over a connection after it was upgraded.
Renegotiation. If unsafe renegotiation or renegotiation in a way that the
certificate is allowed to change is allowed by your SSL library this may occur
@@ -115,11 +113,9 @@ and the certificate may change, and data may continue to be sent or received
after renegotiation but before you are able to get the (possibly) changed SSL
pointer, with the (possibly) changed certificate information.
-If you are using OpenSSL or wolfSSL then \fICURLOPT_SSL_CTX_FUNCTION(3)\fP can
-be used to set a certificate verification callback. That is safer than using
-this option to poll for certificate changes and does not suffer from any of
-the problems above. There is currently no way in libcurl to set a verification
-callback for the other SSL backends.
+Instead of using this option to poll for certificate changes use
+\fICURLOPT_SSL_CTX_FUNCTION(3)\fP to set a verification callback, if supported.
+That is safer and does not suffer from any of the problems above.
How are you using this option? Are you affected by any of these limitations?
Please let us know by making a comment at
@@ -138,13 +134,13 @@ static size_t wf(void *ptr, size_t size, size_t nmemb, void *stream)
CURLcode res = curl_easy_getinfo(curl, CURLINFO_TLS_SSL_PTR, &info);
if(info && !res) {
if(CURLSSLBACKEND_OPENSSL == info->backend) {
- printf("OpenSSL ver. %s\\n", SSL_get_version((SSL*)info->internals));
+ printf("OpenSSL ver. %s\\n", SSL_get_version((SSL*)info->internals));
}
}
return size * nmemb;
}
-int main(int argc, char** argv)
+int main(int argc, char **argv)
{
CURLcode res;
curl = curl_easy_init();
@@ -165,5 +161,6 @@ This option is exactly the same as that option except in the case of OpenSSL.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
-.BR CURLINFO_TLS_SESSION "(3), "
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_TLS_SESSION (3)
diff --git a/docs/libcurl/opts/CURLINFO_TOTAL_TIME.3 b/docs/libcurl/opts/CURLINFO_TOTAL_TIME.3
index 3ba12bc82..5ab034fd2 100644
--- a/docs/libcurl/opts/CURLINFO_TOTAL_TIME.3
+++ b/docs/libcurl/opts/CURLINFO_TOTAL_TIME.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_TOTAL_TIME 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_TOTAL_TIME 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_TOTAL_TIME \- get total time of previous transfer
@@ -44,19 +44,23 @@ See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
All
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- double total;
- curl_easy_setopt(curl, CURLOPT_URL, url);
- res = curl_easy_perform(curl);
- if(CURLE_OK == res) {
- res = curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME, &total);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ double total;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ res = curl_easy_perform(curl);
if(CURLE_OK == res) {
- printf("Time: %.1f", total);
+ res = curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME, &total);
+ if(CURLE_OK == res) {
+ printf("Time: %.1f", total);
+ }
}
+ /* always cleanup */
+ curl_easy_cleanup(curl);
}
- /* always cleanup */
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -64,4 +68,7 @@ Added in 7.4.1
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), " CURLINFO_TOTAL_TIME_T "(3)"
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_TOTAL_TIME_T (3),
+.BR CURLOPT_TIMEOUT (3)
diff --git a/docs/libcurl/opts/CURLINFO_TOTAL_TIME_T.3 b/docs/libcurl/opts/CURLINFO_TOTAL_TIME_T.3
index 0bf34cdb9..97944b221 100644
--- a/docs/libcurl/opts/CURLINFO_TOTAL_TIME_T.3
+++ b/docs/libcurl/opts/CURLINFO_TOTAL_TIME_T.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 2022 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLINFO_TOTAL_TIME_T 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_getinfo options"
+.TH CURLINFO_TOTAL_TIME_T 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLINFO_TOTAL_TIME_T \- get total time of previous transfer in microseconds
@@ -45,20 +45,24 @@ See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
All
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- curl_off_t total;
- curl_easy_setopt(curl, CURLOPT_URL, url);
- res = curl_easy_perform(curl);
- if(CURLE_OK == res) {
- res = curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME_T, &total);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_off_t total;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ res = curl_easy_perform(curl);
if(CURLE_OK == res) {
- printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", total / 1000000,
- (long)(total % 1000000));
+ res = curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME_T, &total);
+ if(CURLE_OK == res) {
+ printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", total / 1000000,
+ (long)(total % 1000000));
+ }
}
+ /* always cleanup */
+ curl_easy_cleanup(curl);
}
- /* always cleanup */
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -66,4 +70,7 @@ Added in 7.61.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), " CURLINFO_TOTAL_TIME "(3)"
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_TOTAL_TIME (3),
+.BR CURLOPT_TIMEOUT (3)
diff --git a/docs/libcurl/opts/CURLINFO_XFER_ID.3 b/docs/libcurl/opts/CURLINFO_XFER_ID.3
new file mode 100644
index 000000000..afbb09944
--- /dev/null
+++ b/docs/libcurl/opts/CURLINFO_XFER_ID.3
@@ -0,0 +1,76 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed 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
+.\" *
+.\" **************************************************************************
+.\"
+.TH CURLINFO_XFER_ID 3 "December 04, 2023" "libcurl 8.5.0" "libcurl"
+
+.SH NAME
+CURLINFO_XFER_ID \- get the ID of a transfer
+.SH SYNOPSIS
+.nf
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_XFER_ID,
+ curl_off_t *xfer_id);
+.fi
+.SH DESCRIPTION
+Pass a pointer to a \fIcurl_off_t\fP to receive the identifier of the
+current/last transfer done with the handle. Stores -1 if no transfer
+has been started yet for the handle.
+
+The transfer id is unique among all transfers performed using the same
+connection cache. This is implicitly the case for all transfers in the
+same multi handle.
+
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+.nf
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+
+ /* Perform the request */
+ res = curl_easy_perform(curl);
+
+ if(!res) {
+ curl_off_t xfer_id;
+ res = curl_easy_getinfo(curl, CURLINFO_XFER_ID, &xfer_id);
+ if(!res) {
+ printf("Transfer ID: %" CURL_FORMAT_CURL_OFF_T "\\n", xfer_id);
+ }
+ }
+ }
+}
+.fi
+.SH AVAILABILITY
+Added in 8.2.0
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo (3),
+.BR curl_easy_setopt (3),
+.BR CURLINFO_CONN_ID (3)
diff --git a/docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3 b/docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3
index 8bc018784..782dc29ff 100644
--- a/docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3
+++ b/docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE 3 "September 20, 2022" "libcurl 7.86.0" "curl_multi_setopt options"
+.TH CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE \- chunk length threshold for pipelining
@@ -39,22 +39,26 @@ No function since pipelining was removed in 7.62.0.
Pass a long with a \fBsize\fP in bytes. If a transfer in a pipeline is
currently processing a chunked (Transfer-encoding: chunked) request with a
current chunk length larger than \fICURLMOPT_CHUNK_LENGTH_PENALTY_SIZE(3)\fP,
-that pipeline will not be considered for additional requests, even if it is
-shorter than \fICURLMOPT_MAX_PIPELINE_LENGTH(3)\fP.
+that pipeline is not considered for additional requests, even if it is shorter
+than \fICURLMOPT_MAX_PIPELINE_LENGTH(3)\fP.
.SH DEFAULT
The default value is 0, which means that the penalization is inactive.
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
-CURLM *m = curl_multi_init();
-long maxchunk = 10000;
-curl_multi_setopt(m, CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, maxchunk);
+int main(void)
+{
+ CURLM *m = curl_multi_init();
+ long maxchunk = 10000;
+ curl_multi_setopt(m, CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, maxchunk);
+}
.fi
.SH AVAILABILITY
Added in 7.30.0
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLMOPT_PIPELINING "(3), " CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE "(3), "
-.BR CURLMOPT_MAX_PIPELINE_LENGTH "(3), "
+.BR CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE (3),
+.BR CURLMOPT_MAX_PIPELINE_LENGTH (3),
+.BR CURLMOPT_PIPELINING (3)
diff --git a/docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3 b/docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3
index 5071d13de..8539b90b7 100644
--- a/docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3
+++ b/docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE 3 "September 20, 2022" "libcurl 7.86.0" "curl_multi_setopt options"
+.TH CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE \- size threshold for pipelining penalty
@@ -38,8 +38,8 @@ No function since pipelining was removed in 7.62.0.
Pass a long with a \fBsize\fP in bytes. If a transfer in a pipeline is
currently processing a request with a Content-Length larger than this
-\fICURLMOPT_CONTENT_LENGTH_PENALTY_SIZE(3)\fP, that pipeline will then not be
-considered for additional requests, even if it is shorter than
+\fICURLMOPT_CONTENT_LENGTH_PENALTY_SIZE(3)\fP, that pipeline is not considered
+for additional requests, even if it is shorter than
\fICURLMOPT_MAX_PIPELINE_LENGTH(3)\fP.
.SH DEFAULT
The default value is 0, which means that the size penalization is inactive.
@@ -47,13 +47,17 @@ The default value is 0, which means that the size penalization is inactive.
HTTP(S)
.SH EXAMPLE
.nf
-CURLM *m = curl_multi_init();
-long maxlength = 10000;
-curl_multi_setopt(m, CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, maxlength);
+int main(void)
+{
+ CURLM *m = curl_multi_init();
+ long maxlength = 10000;
+ curl_multi_setopt(m, CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, maxlength);
+}
.fi
.SH AVAILABILITY
Added in 7.30.0
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLMOPT_PIPELINING "(3), " CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE "(3), "
+.BR CURLMOPT_PIPELINING (3),
+.BR CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE (3)
diff --git a/docs/libcurl/opts/CURLMOPT_MAXCONNECTS.3 b/docs/libcurl/opts/CURLMOPT_MAXCONNECTS.3
index fae7b4650..3023bf4a9 100644
--- a/docs/libcurl/opts/CURLMOPT_MAXCONNECTS.3
+++ b/docs/libcurl/opts/CURLMOPT_MAXCONNECTS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLMOPT_MAXCONNECTS 3 "May 17, 2022" "libcurl 7.86.0" "curl_multi_setopt options"
+.TH CURLMOPT_MAXCONNECTS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLMOPT_MAXCONNECTS \- size of connection cache
@@ -33,10 +33,10 @@ CURLMOPT_MAXCONNECTS \- size of connection cache
CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAXCONNECTS, long max);
.fi
.SH DESCRIPTION
-Pass a long indicating the \fBmax\fP. The set number will be used as the
-maximum amount of simultaneously open connections that libcurl may keep in its
-connection cache after completed use. By default libcurl will enlarge the size
-for each added easy handle to make it fit 4 times the number of added easy
+Pass a long indicating the \fBmax\fP. The set number is used as the maximum
+amount of simultaneously open connections that libcurl may keep in its
+connection cache after completed use. By default libcurl enlarges the size for
+each added easy handle to make it fit 4 times the number of added easy
handles.
By setting this option, you can prevent the cache size from growing beyond the
@@ -57,14 +57,17 @@ See DESCRIPTION
All
.SH EXAMPLE
.nf
-CURLM *m = curl_multi_init();
-/* only keep 10 connections in the cache */
-curl_multi_setopt(m, CURLMOPT_MAXCONNECTS, 10L);
+int main(void)
+{
+ CURLM *m = curl_multi_init();
+ /* only keep 10 connections in the cache */
+ curl_multi_setopt(m, CURLMOPT_MAXCONNECTS, 10L);
+}
.fi
.SH AVAILABILITY
Added in 7.16.3
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLMOPT_MAX_HOST_CONNECTIONS "(3), "
-.BR CURLOPT_MAXCONNECTS "(3), "
+.BR CURLMOPT_MAX_HOST_CONNECTIONS (3),
+.BR CURLOPT_MAXCONNECTS (3)
diff --git a/docs/libcurl/opts/CURLMOPT_MAX_CONCURRENT_STREAMS.3 b/docs/libcurl/opts/CURLMOPT_MAX_CONCURRENT_STREAMS.3
index c3f3f2187..1b3067d6d 100644
--- a/docs/libcurl/opts/CURLMOPT_MAX_CONCURRENT_STREAMS.3
+++ b/docs/libcurl/opts/CURLMOPT_MAX_CONCURRENT_STREAMS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLMOPT_MAX_CONCURRENT_STREAMS 3 "September 20, 2022" "libcurl 7.86.0" "curl_multi_setopt options"
+.TH CURLMOPT_MAX_CONCURRENT_STREAMS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLMOPT_MAX_CONCURRENT_STREAMS \- max concurrent streams for http2
@@ -34,9 +34,9 @@ CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_CONCURRENT_STREAMS,
long max);
.fi
.SH DESCRIPTION
-Pass a long indicating the \fBmax\fP. The set number will be used as the
-maximum number of concurrent streams for a connections that libcurl should
-support on connections done using HTTP/2.
+Pass a long indicating the \fBmax\fP. The set number is used as the maximum
+number of concurrent streams libcurl should support on connections done using
+HTTP/2 or HTTP/3.
Valid values range from 1 to 2147483647 (2^31 - 1) and defaults to 100. The
value passed here would be honored based on other system resources properties.
@@ -46,13 +46,17 @@ value passed here would be honored based on other system resources properties.
All
.SH EXAMPLE
.nf
+int main(void)
+{
CURLM *m = curl_multi_init();
/* max concurrent streams 200 */
curl_multi_setopt(m, CURLMOPT_MAX_CONCURRENT_STREAMS, 200L);
+}
.fi
.SH AVAILABILITY
Added in 7.67.0
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_MAXCONNECTS "(3), " CURLMOPT_MAXCONNECTS "(3), "
+.BR CURLMOPT_MAXCONNECTS (3),
+.BR CURLOPT_MAXCONNECTS (3)
diff --git a/docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.3 b/docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.3
index 312c962ec..dd03e2cc4 100644
--- a/docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.3
+++ b/docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLMOPT_MAX_HOST_CONNECTIONS 3 "May 17, 2022" "libcurl 7.86.0" "curl_multi_setopt options"
+.TH CURLMOPT_MAX_HOST_CONNECTIONS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLMOPT_MAX_HOST_CONNECTIONS \- max number of connections to a single host
@@ -34,28 +34,22 @@ CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_HOST_CONNECTIONS,
long max);
.fi
.SH DESCRIPTION
-Pass a long to indicate \fBmax\fP. The set number will be used as the maximum
+Pass a long to indicate \fBmax\fP. The set number is used as the maximum
amount of simultaneously open connections to a single host (a host being the
same as a host name + port number pair). For each new session to a host,
-libcurl will open a new connection up to the limit set by
-\fICURLMOPT_MAX_HOST_CONNECTIONS(3)\fP. When the limit is reached, the
-sessions will be pending until a connection becomes available. If
-\fICURLMOPT_PIPELINING(3)\fP is enabled, libcurl will try to pipeline if the
-host is capable of it.
+libcurl might open a new connection up to the limit set by
+\fICURLMOPT_MAX_HOST_CONNECTIONS(3)\fP. When the limit is reached, new
+sessions are kept pending until a connection becomes available.
-The default \fBmax\fP value is 0, unlimited. However, for backwards
-compatibility, setting it to 0 when \fICURLMOPT_PIPELINING(3)\fP is 1 will not
-be treated as unlimited. Instead it will open only 1 connection and try to
-pipeline on it.
-
-This set limit is also used for proxy connections, and then the proxy is
-considered to be the host for which this limit counts.
+The default \fBmax\fP value is 0, unlimited. This set limit is also used for
+proxy connections, and then the proxy is considered to be the host for which
+this limit counts.
When more transfers are added to the multi handle than what can be performed
-due to the set limit, they will be queued up waiting for their chance. When
-that happens, the \fICURLOPT_TIMEOUT_MS(3)\fP timeout will be counted
-inclusive of the waiting time, meaning that if you set a too narrow timeout in
-such a case the transfer might never even start before it times out.
+due to the set limit, they are queued up waiting for their chance. When that
+happens, the \fICURLOPT_TIMEOUT_MS(3)\fP timeout is inclusive of the waiting
+time, meaning that if you set a too narrow timeout in such a case the transfer
+might never even start before it times out.
Even in the queued up situation, the \fICURLOPT_CONNECTTIMEOUT_MS(3)\fP
timeout is however treated as a per-connect timeout.
@@ -65,13 +59,17 @@ timeout is however treated as a per-connect timeout.
HTTP(S)
.SH EXAMPLE
.nf
-CURLM *m = curl_multi_init();
-/* do no more than 2 connections per host */
-curl_multi_setopt(m, CURLMOPT_MAX_HOST_CONNECTIONS, 2L);
+int main(void)
+{
+ CURLM *m = curl_multi_init();
+ /* do no more than 2 connections per host */
+ curl_multi_setopt(m, CURLMOPT_MAX_HOST_CONNECTIONS, 2L);
+}
.fi
.SH AVAILABILITY
Added in 7.30.0
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLMOPT_MAXCONNECTS "(3), " CURLMOPT_MAX_TOTAL_CONNECTIONS "(3), "
+.BR CURLMOPT_MAXCONNECTS (3),
+.BR CURLMOPT_MAX_TOTAL_CONNECTIONS (3)
diff --git a/docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.3 b/docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.3
index 47c84767f..323ccf747 100644
--- a/docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.3
+++ b/docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLMOPT_MAX_PIPELINE_LENGTH 3 "September 20, 2022" "libcurl 7.86.0" "curl_multi_setopt options"
+.TH CURLMOPT_MAX_PIPELINE_LENGTH 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLMOPT_MAX_PIPELINE_LENGTH \- maximum number of requests in a pipeline
@@ -36,11 +36,11 @@ CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_PIPELINE_LENGTH,
.SH DESCRIPTION
No function since pipelining was removed in 7.62.0.
-Pass a long. The set \fBmax\fP number will be used as the maximum amount of
+Pass a long. The set \fBmax\fP number is used as the maximum amount of
outstanding requests in an HTTP/1.1 pipeline. This option is only used for
HTTP/1.1 pipelining, not for HTTP/2 multiplexing.
-When this limit is reached, libcurl will use another connection to the same
+When this limit is reached, libcurl creates another connection to the same
host (see \fICURLMOPT_MAX_HOST_CONNECTIONS(3)\fP), or queue the request until
one of the pipelines to the host is ready to accept a request. Thus, the
total number of requests in-flight is \fICURLMOPT_MAX_HOST_CONNECTIONS(3)\fP *
@@ -51,13 +51,17 @@ total number of requests in-flight is \fICURLMOPT_MAX_HOST_CONNECTIONS(3)\fP *
HTTP(S)
.SH EXAMPLE
.nf
-CURLM *m = curl_multi_init();
-/* set a more conservative pipe length */
-curl_multi_setopt(m, CURLMOPT_MAX_PIPELINE_LENGTH, 3L);
+int main(void)
+{
+ CURLM *m = curl_multi_init();
+ /* set a more conservative pipe length */
+ curl_multi_setopt(m, CURLMOPT_MAX_PIPELINE_LENGTH, 3L);
+}
.fi
.SH AVAILABILITY
Added in 7.30.0
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLMOPT_PIPELINING "(3), " CURLMOPT_MAX_HOST_CONNECTIONS "(3), "
+.BR CURLMOPT_PIPELINING (3),
+.BR CURLMOPT_MAX_HOST_CONNECTIONS (3)
diff --git a/docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.3 b/docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.3
index af8f61c07..52756a88f 100644
--- a/docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.3
+++ b/docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLMOPT_MAX_TOTAL_CONNECTIONS 3 "May 17, 2022" "libcurl 7.86.0" "curl_multi_setopt options"
+.TH CURLMOPT_MAX_TOTAL_CONNECTIONS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLMOPT_MAX_TOTAL_CONNECTIONS \- max simultaneously open connections
@@ -34,19 +34,19 @@ CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_TOTAL_CONNECTIONS,
long amount);
.fi
.SH DESCRIPTION
-Pass a long for the \fBamount\fP. The set number will be used as the maximum
-number of simultaneously open connections in total using this multi
-handle. For each new session, libcurl will open a new connection up to the
-limit set by \fICURLMOPT_MAX_TOTAL_CONNECTIONS(3)\fP. When the limit is
-reached, the sessions will be pending until there are available
-connections. If \fICURLMOPT_PIPELINING(3)\fP is enabled, libcurl will try to
-use multiplexing if the host is capable of it.
+Pass a long for the \fBamount\fP. The set number is used as the maximum number
+of simultaneously open connections in total using this multi handle. For each
+new session, libcurl might open a new connection up to the limit set by
+\fICURLMOPT_MAX_TOTAL_CONNECTIONS(3)\fP. When the limit is reached, new
+sessions are held pending until there are available connections. If
+\fICURLMOPT_PIPELINING(3)\fP is enabled, libcurl can try multiplexing if the
+host is capable of it.
When more transfers are added to the multi handle than what can be performed
-due to the set limit, they will be queued up waiting for their chance. When
-that happens, the \fICURLOPT_TIMEOUT_MS(3)\fP timeout will be counted
-inclusive of the waiting time, meaning that if you set a too narrow timeout in
-such a case the transfer might never even start before it times out.
+due to the set limit, they get queued up waiting for their chance. When that
+happens, the \fICURLOPT_TIMEOUT_MS(3)\fP timeout is counted inclusive of the
+waiting time, meaning that if you set a too narrow timeout in such a case the
+transfer might never even start before it times out.
Even in the queued up situation, the \fICURLOPT_CONNECTTIMEOUT_MS(3)\fP
timeout is however treated as a per-connect timeout.
@@ -57,13 +57,17 @@ controlled by the number of easy handles added.
All
.SH EXAMPLE
.nf
-CURLM *m = curl_multi_init();
-/* never do more than 15 connections */
-curl_multi_setopt(m, CURLMOPT_MAX_TOTAL_CONNECTIONS, 15L);
+int main(void)
+{
+ CURLM *m = curl_multi_init();
+ /* never do more than 15 connections */
+ curl_multi_setopt(m, CURLMOPT_MAX_TOTAL_CONNECTIONS, 15L);
+}
.fi
.SH AVAILABILITY
Added in 7.30.0
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLMOPT_MAXCONNECTS "(3), " CURLMOPT_MAX_HOST_CONNECTIONS "(3), "
+.BR CURLMOPT_MAXCONNECTS (3),
+.BR CURLMOPT_MAX_HOST_CONNECTIONS (3)
diff --git a/docs/libcurl/opts/CURLMOPT_PIPELINING.3 b/docs/libcurl/opts/CURLMOPT_PIPELINING.3
index 372175bfe..556cb2754 100644
--- a/docs/libcurl/opts/CURLMOPT_PIPELINING.3
+++ b/docs/libcurl/opts/CURLMOPT_PIPELINING.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLMOPT_PIPELINING 3 "October 19, 2022" "libcurl 7.86.0" "curl_multi_setopt options"
+.TH CURLMOPT_PIPELINING 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLMOPT_PIPELINING \- enable HTTP pipelining and multiplexing
@@ -33,40 +33,19 @@ CURLMOPT_PIPELINING \- enable HTTP pipelining and multiplexing
CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING, long bitmask);
.fi
.SH DESCRIPTION
-Pass in the \fBbitmask\fP parameter to instruct libcurl to enable HTTP
-pipelining and/or HTTP/2 multiplexing for this multi handle.
+Pass in the correct value in the \fBbitmask\fP parameter to instruct libcurl
+to enable multiplexing for this multi handle.
-When enabled, libcurl will attempt to use those protocol features when doing
-parallel requests to the same hosts.
+With multiplexing enabled, libcurl attempts to do multiple transfers over the
+same connection when doing parallel transfers to the same hosts.
-For pipelining, this means that if you add a second request that can use an
-already existing connection, the second request will be \&"piped" on the same
-connection rather than being executed in parallel.
-
-For multiplexing, this means that follow-up requests can re-use an existing
-connection and send the new request multiplexed over that at the same time as
-other transfers are already using that single connection.
-
-There are several other related options that are interesting to tweak and
-adjust to alter how libcurl spreads out requests on different connections or
-not etc.
-
-Before 7.43.0, this option was set to 1 and 0 to enable and disable HTTP/1.1
-pipelining.
-
-Starting in 7.43.0, \fBbitmask\fP's second bit also has a meaning, and you can
-ask for pipelining and multiplexing independently of each other by toggling
-the correct bits.
.IP CURLPIPE_NOTHING (0)
-Default, which means doing no attempts at pipelining or multiplexing.
+Default, which means doing no attempts at multiplexing.
.IP CURLPIPE_HTTP1 (1)
-If this bit is set, libcurl will try to pipeline HTTP/1.1 requests on
-connections that are already established and in use to hosts.
-
This bit is deprecated and has no effect since version 7.62.0.
.IP CURLPIPE_MULTIPLEX (2)
-If this bit is set, libcurl will try to multiplex the new transfer over an
-existing connection if possible. This requires HTTP/2.
+If this bit is set, libcurl tries to multiplex the new transfer over an
+existing connection if possible. This requires HTTP/2 or HTTP/3.
.SH DEFAULT
Since 7.62.0, \fBCURLPIPE_MULTIPLEX\fP is enabled by default.
@@ -75,9 +54,12 @@ Before that, default was \fBCURLPIPE_NOTHING\fP.
HTTP(S)
.SH EXAMPLE
.nf
-CURLM *m = curl_multi_init();
-/* try HTTP/2 multiplexing */
-curl_multi_setopt(m, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX);
+int main(void)
+{
+ CURLM *m = curl_multi_init();
+ /* try HTTP/2 multiplexing */
+ curl_multi_setopt(m, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX);
+}
.fi
.SH AVAILABILITY
Added in 7.16.0. Multiplex support bit added in 7.43.0. HTTP/1 Pipelining
@@ -85,9 +67,9 @@ support was disabled in 7.62.0.
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLMOPT_MAX_PIPELINE_LENGTH "(3), "
-.BR CURLMOPT_PIPELINING_SITE_BL "(3), "
-.BR CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE "(3), "
-.BR CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE "(3), "
-.BR CURLMOPT_MAXCONNECTS "(3), "
-.BR CURLMOPT_MAX_HOST_CONNECTIONS "(3), "
+.BR CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE (3),
+.BR CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE (3),
+.BR CURLMOPT_MAX_HOST_CONNECTIONS (3),
+.BR CURLMOPT_MAX_PIPELINE_LENGTH (3),
+.BR CURLMOPT_MAXCONNECTS (3),
+.BR CURLMOPT_PIPELINING_SITE_BL (3)
diff --git a/docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.3 b/docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.3
index ce954b772..4b6d1dcf4 100644
--- a/docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.3
+++ b/docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLMOPT_PIPELINING_SERVER_BL 3 "May 17, 2022" "libcurl 7.86.0" "curl_multi_setopt options"
+.TH CURLMOPT_PIPELINING_SERVER_BL 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLMOPT_PIPELINING_SERVER_BL \- pipelining server block list
@@ -51,18 +51,22 @@ The default value is NULL, which means that there is no block list.
.SH PROTOCOLS
.SH EXAMPLE
.nf
- char *server_block_list[] =
- {
- "Microsoft-IIS/6.0",
- "nginx/0.8.54",
- NULL
- };
-
+static char *server_block_list[] =
+{
+ "Microsoft-IIS/6.0",
+ "nginx/0.8.54",
+ NULL
+};
+int main(void)
+{
+ CURLM *m = curl_multi_init();
curl_multi_setopt(m, CURLMOPT_PIPELINING_SERVER_BL, server_block_list);
+}
.fi
.SH AVAILABILITY
Added in 7.30.0
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLMOPT_PIPELINING "(3), " CURLMOPT_PIPELINING_SITE_BL "(3), "
+.BR CURLMOPT_PIPELINING (3),
+.BR CURLMOPT_PIPELINING_SITE_BL (3)
diff --git a/docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.3 b/docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.3
index d9e495d37..e34ff715f 100644
--- a/docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.3
+++ b/docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLMOPT_PIPELINING_SITE_BL 3 "May 17, 2022" "libcurl 7.86.0" "curl_multi_setopt options"
+.TH CURLMOPT_PIPELINING_SITE_BL 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLMOPT_PIPELINING_SITE_BL \- pipelining host block list
@@ -47,18 +47,23 @@ The default value is NULL, which means that there is no block list.
HTTP(S)
.SH EXAMPLE
.nf
- char *site_block_list[] =
- {
- "www.haxx.se",
- "www.example.com:1234",
- NULL
- };
+static char *site_block_list[] =
+{
+ "www.haxx.se",
+ "www.example.com:1234",
+ NULL
+};
+int main(void)
+{
+ CURLM *m = curl_multi_init();
curl_multi_setopt(m, CURLMOPT_PIPELINING_SITE_BL, site_block_list);
+}
.fi
.SH AVAILABILITY
Added in 7.30.0
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLMOPT_PIPELINING "(3), " CURLMOPT_PIPELINING_SERVER_BL "(3), "
+.BR CURLMOPT_PIPELINING (3),
+.BR CURLMOPT_PIPELINING_SERVER_BL (3)
diff --git a/docs/libcurl/opts/CURLMOPT_PUSHDATA.3 b/docs/libcurl/opts/CURLMOPT_PUSHDATA.3
index b23113508..451033f99 100644
--- a/docs/libcurl/opts/CURLMOPT_PUSHDATA.3
+++ b/docs/libcurl/opts/CURLMOPT_PUSHDATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLMOPT_PUSHDATA 3 "May 17, 2022" "libcurl 7.86.0" "curl_multi_setopt options"
+.TH CURLMOPT_PUSHDATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLMOPT_PUSHDATA \- pointer to pass to push callback
@@ -33,24 +33,26 @@ CURLMOPT_PUSHDATA \- pointer to pass to push callback
CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PUSHDATA, void *pointer);
.fi
.SH DESCRIPTION
-Set \fIpointer\fP to pass as the last argument to the
-\fICURLMOPT_PUSHFUNCTION(3)\fP callback. The pointer will not be touched or
-used by libcurl itself, only passed on to the callback function.
+Set a \fIpointer\fP to pass as the last argument to the
+\fICURLMOPT_PUSHFUNCTION(3)\fP callback. The pointer is not touched or used by
+libcurl itself, only passed on to the callback function.
.SH DEFAULT
NULL
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
+#include <string.h>
+
/* only allow pushes for file names starting with "push-" */
int push_callback(CURL *parent,
CURL *easy,
size_t num_headers,
struct curl_pushheaders *headers,
- void *userp)
+ void *clientp)
{
char *headp;
- int *transfers = (int *)userp;
+ int *transfers = (int *)clientp;
FILE *out;
headp = curl_pushheader_byname(headers, ":path");
if(headp && !strncmp(headp, "/push-", 6)) {
@@ -69,14 +71,20 @@ int push_callback(CURL *parent,
return CURL_PUSH_DENY;
}
-curl_multi_setopt(multi, CURLMOPT_PUSHFUNCTION, push_callback);
-curl_multi_setopt(multi, CURLMOPT_PUSHDATA, &counter);
+int main(void)
+{
+ int counter;
+ CURLM *multi = curl_multi_init();
+ curl_multi_setopt(multi, CURLMOPT_PUSHFUNCTION, push_callback);
+ curl_multi_setopt(multi, CURLMOPT_PUSHDATA, &counter);
+}
.fi
.SH AVAILABILITY
Added in 7.44.0
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLMOPT_PUSHFUNCTION "(3), " CURLMOPT_PIPELINING "(3), "
-.BR CURLOPT_PIPEWAIT "(3), "
+.BR CURLMOPT_PIPELINING (3),
+.BR CURLMOPT_PUSHFUNCTION (3),
+.BR CURLOPT_PIPEWAIT (3),
.BR RFC 7540
diff --git a/docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.3 b/docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.3
index 05c3082a9..247b9499c 100644
--- a/docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.3
+++ b/docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLMOPT_PUSHFUNCTION 3 "September 20, 2022" "libcurl 7.86.0" "curl_multi_setopt options"
+.TH CURLMOPT_PUSHFUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLMOPT_PUSHFUNCTION \- callback that approves or denies server pushes
@@ -30,14 +30,11 @@ CURLMOPT_PUSHFUNCTION \- callback that approves or denies server pushes
.nf
#include <curl/curl.h>
-char *curl_pushheader_bynum(struct curl_pushheaders *h, size_t num);
-char *curl_pushheader_byname(struct curl_pushheaders *h, const char *name);
-
int curl_push_callback(CURL *parent,
CURL *easy,
size_t num_headers,
struct curl_pushheaders *headers,
- void *userp);
+ void *clientp);
CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PUSHFUNCTION,
curl_push_callback func);
@@ -45,7 +42,7 @@ CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PUSHFUNCTION,
.SH DESCRIPTION
This callback gets called when a new HTTP/2 stream is being pushed by the
server (using the PUSH_PROMISE frame). If no push callback is set, all offered
-pushes will be denied automatically.
+pushes are denied automatically.
.SH CALLBACK DESCRIPTION
The callback gets its arguments like this:
@@ -61,36 +58,31 @@ be accessed
\fIheaders\fP is a handle used to access push headers using the accessor
functions described below. This only accesses and provides the PUSH_PROMISE
-headers, the normal response headers will be provided in the header callback
-as usual.
+headers, the normal response headers are provided in the header callback as
+usual.
-\fIuserp\fP is the pointer set with \fICURLMOPT_PUSHDATA(3)\fP
+\fIclientp\fP is the pointer set with \fICURLMOPT_PUSHDATA(3)\fP
-If the callback returns CURL_PUSH_OK, the 'easy' handle will be added to the
+If the callback returns CURL_PUSH_OK, the new easy handle is added to the
multi handle, the callback must not do that by itself.
The callback can access PUSH_PROMISE headers with two accessor
functions. These functions can only be used from within this callback and they
-can only access the PUSH_PROMISE headers. The normal response headers will be
-passed to the header callback for pushed streams just as for normal streams.
-.IP curl_pushheader_bynum
-Returns the header at index \fInum\fP (or NULL). The returned pointer points
-to a "name:value" string that will be freed when this callback returns.
-.IP curl_pushheader_byname
-Returns the value for the given header name (or NULL). This is a shortcut so
-that the application does not have to loop through all headers to find the one
-it is interested in. The data pointed will be freed when this callback
-returns. If more than one header field use the same name, this returns only
-the first one.
+can only access the PUSH_PROMISE headers: \fIcurl_pushheader_byname(3)\fP and
+\fIcurl_pushheader_bynum(3)\fP. The normal response headers are passed to the
+header callback for pushed streams just as for normal streams.
+
+The header fields can also be accessed with \fIcurl_easy_header(3)\fP,
+introduced in later libcurl versions.
.SH CALLBACK RETURN VALUE
.IP "CURL_PUSH_OK (0)"
The application has accepted the stream and it can now start receiving data,
the ownership of the CURL handle has been taken over by the application.
.IP "CURL_PUSH_DENY (1)"
-The callback denies the stream and no data for this will reach the
-application, the easy handle will be destroyed by libcurl.
+The callback denies the stream and no data reaches the application, the easy
+handle is destroyed by libcurl.
.IP "CURL_PUSH_ERROROUT (2)"
-Returning this will reject the pushed stream and return an error back on the
+Returning this code rejects the pushed stream and returns an error back on the
parent stream making it get closed with an error. (Added in 7.72.0)
.IP *
All other return codes are reserved for future use.
@@ -100,15 +92,17 @@ NULL, no callback
HTTP(S) (HTTP/2 only)
.SH EXAMPLE
.nf
+#include <string.h>
+
/* only allow pushes for file names starting with "push-" */
int push_callback(CURL *parent,
CURL *easy,
size_t num_headers,
struct curl_pushheaders *headers,
- void *userp)
+ void *clientp)
{
char *headp;
- int *transfers = (int *)userp;
+ int *transfers = (int *)clientp;
FILE *out;
headp = curl_pushheader_byname(headers, ":path");
if(headp && !strncmp(headp, "/push-", 6)) {
@@ -127,13 +121,20 @@ int push_callback(CURL *parent,
return CURL_PUSH_DENY;
}
-curl_multi_setopt(multi, CURLMOPT_PUSHFUNCTION, push_callback);
-curl_multi_setopt(multi, CURLMOPT_PUSHDATA, &counter);
+int main(void)
+{
+ int counter;
+ CURLM *multi = curl_multi_init();
+ curl_multi_setopt(multi, CURLMOPT_PUSHFUNCTION, push_callback);
+ curl_multi_setopt(multi, CURLMOPT_PUSHDATA, &counter);
+}
.fi
.SH AVAILABILITY
Added in 7.44.0
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLMOPT_PUSHDATA "(3), " CURLMOPT_PIPELINING "(3), " CURLOPT_PIPEWAIT "(3), "
+.BR CURLMOPT_PUSHDATA (3),
+.BR CURLMOPT_PIPELINING (3),
+.BR CURLOPT_PIPEWAIT (3),
.BR RFC 7540
diff --git a/docs/libcurl/opts/CURLMOPT_SOCKETDATA.3 b/docs/libcurl/opts/CURLMOPT_SOCKETDATA.3
index 8fd86db35..687df5105 100644
--- a/docs/libcurl/opts/CURLMOPT_SOCKETDATA.3
+++ b/docs/libcurl/opts/CURLMOPT_SOCKETDATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLMOPT_SOCKETDATA 3 "May 17, 2022" "libcurl 7.86.0" "curl_multi_setopt options"
+.TH CURLMOPT_SOCKETDATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLMOPT_SOCKETDATA \- custom pointer passed to the socket callback
@@ -35,36 +35,40 @@ CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_SOCKETDATA, void *pointer);
A data \fIpointer\fP to pass to the socket callback set with the
\fICURLMOPT_SOCKETFUNCTION(3)\fP option.
-This pointer will not be touched by libcurl but will only be passed in to the
-socket callbacks's \fBuserp\fP argument.
+This pointer is not touched by libcurl but is only passed in as the socket
+callbacks's \fBclientp\fP argument.
.SH DEFAULT
NULL
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
+struct priv {
+ void *ours;
+};
+
static int sock_cb(CURL *e, curl_socket_t s, int what, void *cbp, void *sockp)
{
- GlobalInfo *g = (GlobalInfo*) cbp;
- SockInfo *fdp = (SockInfo*) sockp;
+ struct priv *p = sockp;
+ printf("my ptr: %p\\n", p->ours);
if(what == CURL_POLL_REMOVE) {
- remsock(fdp);
+ /* remove the socket from our collection */
+ }
+ if(what & CURL_POLL_IN) {
+ /* wait for read on this socket */
}
- else {
- if(!fdp) {
- addsock(s, e, what, g);
- }
- else {
- setsock(fdp, s, e, what, g);
- }
+ if(what & CURL_POLL_OUT) {
+ /* wait for write on this socket */
}
+
return 0;
}
-main()
+int main(void)
{
- GlobalInfo setup;
+ struct priv setup;
+ CURLM *multi = curl_multi_init();
/* ... use socket callback and custom pointer */
curl_multi_setopt(multi, CURLMOPT_SOCKETFUNCTION, sock_cb);
curl_multi_setopt(multi, CURLMOPT_SOCKETDATA, &setup);
@@ -75,5 +79,6 @@ Added in 7.15.4
.SH RETURN VALUE
Returns CURLM_OK.
.SH "SEE ALSO"
-.BR CURLMOPT_SOCKETFUNCTION "(3), " curl_multi_socket_action "(3), "
-.BR CURLMOPT_TIMERFUNCTION "(3) "
+.BR curl_multi_socket_action (3),
+.BR CURLMOPT_SOCKETFUNCTION (3),
+.BR CURLMOPT_TIMERFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.3 b/docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.3
index d64d86a02..12c46f9ee 100644
--- a/docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.3
+++ b/docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLMOPT_SOCKETFUNCTION 3 "May 17, 2022" "libcurl 7.86.0" "curl_multi_setopt options"
+.TH CURLMOPT_SOCKETFUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLMOPT_SOCKETFUNCTION \- callback informed about what to wait for
@@ -33,7 +33,7 @@ CURLMOPT_SOCKETFUNCTION \- callback informed about what to wait for
int socket_callback(CURL *easy, /* easy handle */
curl_socket_t s, /* socket */
int what, /* describes the socket */
- void *userp, /* private callback pointer */
+ void *clientp, /* private callback pointer */
void *socketp); /* private socket pointer */
CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_SOCKETFUNCTION, socket_callback);
@@ -41,12 +41,16 @@ CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_SOCKETFUNCTION, socket_callb
Pass a pointer to your callback function, which should match the prototype
shown above.
-When the \fIcurl_multi_socket_action(3)\fP function is called, it informs the
-application about updates in the socket (file descriptor) status by doing
-none, one, or multiple calls to the \fBsocket_callback\fP. The callback
-function gets status updates with changes since the previous time the callback
-was called. If the given callback pointer is set to NULL, no callback will be
-called.
+When the \fIcurl_multi_socket_action(3)\fP function is called, it uses this
+callback to inform the application about updates in the socket (file
+descriptor) status by doing none, one, or multiple calls to the
+\fBsocket_callback\fP. The callback function gets status updates with changes
+since the previous time the callback was called. If the given callback pointer
+is set to NULL, no callback is called.
+
+libcurl then expects the application to monitor the sockets for the specific
+activities and tell libcurl again when something happens on one of them. Tell
+libcurl by calling \fIcurl_multi_socket_action(3)\fP.
.SH "CALLBACK ARGUMENTS"
\fIeasy\fP identifies the specific transfer for which this update is related.
@@ -58,11 +62,11 @@ for a socket that is already monitored.
The socket callback should return 0 on success, and -1 on error. If this
callback returns error, \fBall\fP transfers currently in progress in this
-multi handle will be aborted and fail.
+multi handle are aborted and made to fail.
-\fBuserp\fP is set with \fICURLMOPT_SOCKETDATA(3)\fP.
+\fBclientp\fP is set with \fICURLMOPT_SOCKETDATA(3)\fP.
-\fBsocketp\fP is set with \fIcurl_multi_assign(3)\fP or will be NULL.
+\fBsocketp\fP is set with \fIcurl_multi_assign(3)\fP or NULL.
The \fBwhat\fP parameter informs the callback on the status of the given
socket. It can hold one of these values:
@@ -74,35 +78,40 @@ Wait for outgoing data. For the socket to become writable.
Wait for incoming and outgoing data. For the socket to become readable or
writable.
.IP CURL_POLL_REMOVE
-The specified socket/file descriptor is no longer used by libcurl.
+The specified socket/file descriptor is no longer used by libcurl for any
+active transfer. It might soon be added again.
.SH DEFAULT
NULL (no callback)
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
+struct priv {
+ void *ours;
+};
+
static int sock_cb(CURL *e, curl_socket_t s, int what, void *cbp, void *sockp)
{
- GlobalInfo *g = (GlobalInfo*) cbp;
- SockInfo *fdp = (SockInfo*) sockp;
+ struct priv *p = sockp;
+ printf("our ptr: %p\\n", p->ours);
if(what == CURL_POLL_REMOVE) {
- remsock(fdp);
+ /* remove the socket from our collection */
}
- else {
- if(!fdp) {
- addsock(s, e, what, g);
- }
- else {
- setsock(fdp, s, e, what, g);
- }
+ if(what & CURL_POLL_IN) {
+ /* wait for read on this socket */
}
+ if(what & CURL_POLL_OUT) {
+ /* wait for write on this socket */
+ }
+
return 0;
}
-main()
+int main(void)
{
- GlobalInfo setup;
+ struct priv setup;
+ CURLM *multi = curl_multi_init();
/* ... use socket callback and custom pointer */
curl_multi_setopt(multi, CURLMOPT_SOCKETFUNCTION, sock_cb);
curl_multi_setopt(multi, CURLMOPT_SOCKETDATA, &setup);
@@ -113,5 +122,6 @@ Added in 7.15.4
.SH RETURN VALUE
Returns CURLM_OK.
.SH "SEE ALSO"
-.BR CURLMOPT_SOCKETDATA "(3), " curl_multi_socket_action "(3), "
-.BR CURLMOPT_TIMERFUNCTION "(3) "
+.BR curl_multi_socket_action (3),
+.BR CURLMOPT_SOCKETDATA (3),
+.BR CURLMOPT_TIMERFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLMOPT_TIMERDATA.3 b/docs/libcurl/opts/CURLMOPT_TIMERDATA.3
index 9349a162f..c339f9135 100644
--- a/docs/libcurl/opts/CURLMOPT_TIMERDATA.3
+++ b/docs/libcurl/opts/CURLMOPT_TIMERDATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLMOPT_TIMERDATA 3 "May 17, 2022" "libcurl 7.86.0" "curl_multi_setopt options"
+.TH CURLMOPT_TIMERDATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLMOPT_TIMERDATA \- custom pointer to pass to timer callback
@@ -35,51 +35,43 @@ CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_TIMERDATA, void *pointer);
A data \fBpointer\fP to pass to the timer callback set with the
\fICURLMOPT_TIMERFUNCTION(3)\fP option.
-This pointer will not be touched by libcurl but will only be passed in to the
-timer callbacks's \fBuserp\fP argument.
+This pointer is not touched by libcurl but is only be passed in to the timer
+callbacks's \fBclientp\fP argument.
.SH DEFAULT
NULL
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
-static gboolean timeout_cb(gpointer user_data)
-{
- int running;
- if(user_data) {
- g_free(user_data);
- curl_multi_setopt(curl_handle, CURLMOPT_TIMERDATA, NULL);
- }
- curl_multi_socket_action(multi, CURL_SOCKET_TIMEOUT, 0, &running);
- return G_SOURCE_REMOVE;
-}
+struct priv {
+ void *custom;
+};
-static int timerfunc(CURLM *multi, long timeout_ms, void *userp)
+static int timerfunc(CURLM *multi, long timeout_ms, void *clientp)
{
- guint *id = userp;
-
- if(id)
- g_source_remove(*id);
+ struct priv *mydata = clientp;
+ printf("our ptr: %p\\n", mydata->custom);
- /* -1 means we should just delete our timer. */
- if(timeout_ms == -1) {
- g_free(id);
- id = NULL;
- }
- else {
- if(!id)
- id = g_new(guint, 1);
- *id = g_timeout_add(timeout_ms, timeout_cb, id);
- }
- current_timer = id;
- return 0;
+ if(timeout_ms) {
+ /* this is the new single timeout to wait for */
+ }
+ else {
+ /* delete the timeout, nothing to wait for now */
+ }
}
-curl_multi_setopt(multi, CURLMOPT_TIMERFUNCTION, timerfunc);
+int main(void)
+{
+ struct priv mydata;
+ CURLM *multi = curl_multi_init();
+ curl_multi_setopt(multi, CURLMOPT_TIMERFUNCTION, timerfunc);
+ curl_multi_setopt(multi, CURLMOPT_TIMERDATA, &mydata);
+}
.fi
.SH AVAILABILITY
Added in 7.16.0
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLMOPT_TIMERFUNCTION "(3), " CURLMOPT_SOCKETFUNCTION "(3), "
+.BR CURLMOPT_TIMERFUNCTION (3),
+.BR CURLMOPT_SOCKETFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.3 b/docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.3
index 4215da01a..4e6cec130 100644
--- a/docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.3
+++ b/docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLMOPT_TIMERFUNCTION 3 "May 17, 2022" "libcurl 7.86.0" "curl_multi_setopt options"
+.TH CURLMOPT_TIMERFUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLMOPT_TIMERFUNCTION \- callback to receive timeout values
@@ -32,7 +32,7 @@ CURLMOPT_TIMERFUNCTION \- callback to receive timeout values
int timer_callback(CURLM *multi, /* multi handle */
long timeout_ms, /* timeout in number of ms */
- void *userp); /* private callback pointer */
+ void *clientp); /* private callback pointer */
CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_TIMERFUNCTION, timer_callback);
.SH DESCRIPTION
@@ -50,14 +50,13 @@ fires, call either \fIcurl_multi_socket_action(3)\fP or
A \fBtimeout_ms\fP value of -1 passed to this callback means you should delete
the timer. All other values are valid expire times in number of milliseconds.
-The \fBtimer_callback\fP will only be called when the timeout expire time is
-changed.
+The \fBtimer_callback\fP is called when the timeout expire time is changed.
-The \fBuserp\fP pointer is set with \fICURLMOPT_TIMERDATA(3)\fP.
+The \fBclientp\fP pointer is set with \fICURLMOPT_TIMERDATA(3)\fP.
The timer callback should return 0 on success, and -1 on error. If this
callback returns error, \fBall\fP transfers currently in progress in this
-multi handle will be aborted and fail.
+multi handle are aborted and made to fail.
This callback can be used instead of, or in addition to,
\fIcurl_multi_timeout(3)\fP.
@@ -72,43 +71,35 @@ NULL
All
.SH EXAMPLE
.nf
-static gboolean timeout_cb(gpointer user_data)
-{
- int running;
- if(user_data) {
- g_free(user_data);
- curl_multi_setopt(curl_handle, CURLMOPT_TIMERDATA, NULL);
- }
- curl_multi_socket_action(multi, CURL_SOCKET_TIMEOUT, 0, &running);
- return G_SOURCE_REMOVE;
-}
+struct priv {
+ void *custom;
+};
-static int timerfunc(CURLM *multi, long timeout_ms, void *userp)
+static int timerfunc(CURLM *multi, long timeout_ms, void *clientp)
{
- guint *id = userp;
-
- if(id)
- g_source_remove(*id);
+ struct priv *mydata = clientp;
+ printf("our ptr: %p\\n", mydata->custom);
- /* -1 means we should just delete our timer. */
- if(timeout_ms == -1) {
- g_free(id);
- id = NULL;
- }
- else {
- if(!id)
- id = g_new(guint, 1);
- *id = g_timeout_add(timeout_ms, timeout_cb, id);
- }
- current_timer = id;
- return 0;
+ if(timeout_ms) {
+ /* this is the new single timeout to wait for */
+ }
+ else {
+ /* delete the timeout, nothing to wait for now */
+ }
}
-curl_multi_setopt(multi, CURLMOPT_TIMERFUNCTION, timerfunc);
+int main(void)
+{
+ struct priv mydata;
+ CURLM *multi = curl_multi_init();
+ curl_multi_setopt(multi, CURLMOPT_TIMERFUNCTION, timerfunc);
+ curl_multi_setopt(multi, CURLMOPT_TIMERDATA, &mydata);
+}
.fi
.SH AVAILABILITY
Added in 7.16.0
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLMOPT_TIMERDATA "(3), " CURLMOPT_SOCKETFUNCTION "(3), "
+.BR CURLMOPT_TIMERDATA (3),
+.BR CURLMOPT_SOCKETFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_ABSTRACT_UNIX_SOCKET.3 b/docs/libcurl/opts/CURLOPT_ABSTRACT_UNIX_SOCKET.3
index 5df935169..d66353a5e 100644
--- a/docs/libcurl/opts/CURLOPT_ABSTRACT_UNIX_SOCKET.3
+++ b/docs/libcurl/opts/CURLOPT_ABSTRACT_UNIX_SOCKET.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_ABSTRACT_UNIX_SOCKET 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_ABSTRACT_UNIX_SOCKET 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_ABSTRACT_UNIX_SOCKET \- abstract Unix domain socket
@@ -36,13 +36,13 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ABSTRACT_UNIX_SOCKET,
.SH DESCRIPTION
Enables the use of an abstract Unix domain socket instead of establishing a
TCP connection to a host. The parameter should be a char * to a
-null-terminated string holding the path of the socket. The path will be set to
-\fIpath\fP prefixed by a NULL byte (this is the convention for abstract
+null-terminated string holding the path of the socket. The path is set to
+\fIpath\fP prefixed by a NULL byte. This is the convention for abstract
sockets, however it should be stressed that the path passed to this function
-should not contain a leading NULL).
+should not contain a leading NULL byte.
-On non-supporting platforms, the abstract address will be interpreted as an
-empty string and fail gracefully, generating a runtime error.
+On non-supporting platforms, the abstract address is interpreted as an empty
+string and fails gracefully, generating a runtime error.
This option shares the same semantics as \fICURLOPT_UNIX_SOCKET_PATH(3)\fP in
which documentation more details can be found. Internally, these two options
@@ -53,13 +53,22 @@ Default is NULL.
All
.SH EXAMPLE
.nf
- curl_easy_setopt(curl_handle, CURLOPT_ABSTRACT_UNIX_SOCKET, "/tmp/foo.sock");
- curl_easy_setopt(curl_handle, CURLOPT_URL, "http://localhost/");
-.fi
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_ABSTRACT_UNIX_SOCKET, "/tmp/foo.sock");
+ curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/");
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
+}
+.fi
.SH AVAILABILITY
Added in 7.53.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_UNIX_SOCKET_PATH "(3), " unix "(7), "
+.BR CURLOPT_UNIX_SOCKET_PATH (3),
+.BR unix (7)
diff --git a/docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.3 b/docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.3
index 1382bc1d6..264c70c73 100644
--- a/docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.3
+++ b/docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_ACCEPTTIMEOUT_MS 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_ACCEPTTIMEOUT_MS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_ACCEPTTIMEOUT_MS \- timeout waiting for FTP server to connect back
@@ -41,14 +41,17 @@ server to connect back to libcurl when an active FTP connection is used.
FTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/path/file");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/path/file");
- /* wait no more than 5 seconds for FTP server responses */
- curl_easy_setopt(curl, CURLOPT_ACCEPTTIMEOUT_MS, 5000L);
+ /* wait no more than 5 seconds for FTP server responses */
+ curl_easy_setopt(curl, CURLOPT_ACCEPTTIMEOUT_MS, 5000L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -56,4 +59,6 @@ Added in 7.24.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_STDERR "(3), " CURLOPT_DEBUGFUNCTION "(3), "
+.BR CURLOPT_CONNECTTIMEOUT_MS (3),
+.BR CURLOPT_DEBUGFUNCTION (3),
+.BR CURLOPT_STDERR (3)
diff --git a/docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.3 b/docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.3
index 09f0cc20d..94ef434ad 100644
--- a/docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.3
+++ b/docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_ACCEPT_ENCODING 3 "September 28, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_ACCEPT_ENCODING 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_ACCEPT_ENCODING \- automatic decompression of HTTP downloads
@@ -59,8 +59,8 @@ makes libcurl not send an Accept-Encoding: header and not decompress received
contents automatically.
You can also opt to just include the Accept-Encoding: header in your request
-with \fICURLOPT_HTTPHEADER(3)\fP but then there will be no automatic
-decompressing when receiving data.
+with \fICURLOPT_HTTPHEADER(3)\fP but then there is no automatic decompressing
+when receiving data.
This is a request, not an order; the server may or may not do it. This option
must be set (to any non-NULL value) or else any unsolicited encoding done by
@@ -83,15 +83,18 @@ NULL
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* enable all supported built-in compressions */
- curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, "");
+ /* enable all supported built-in compressions */
+ curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, "");
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -105,5 +108,6 @@ responses.
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_TRANSFER_ENCODING "(3), " CURLOPT_HTTPHEADER "(3), "
-.BR CURLOPT_HTTP_CONTENT_DECODING "(3), "
+.BR CURLOPT_HTTP_CONTENT_DECODING (3),
+.BR CURLOPT_HTTPHEADER (3),
+.BR CURLOPT_TRANSFER_ENCODING (3)
diff --git a/docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.3 b/docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.3
index 6b4d5ca62..7d2f2d7df 100644
--- a/docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.3
+++ b/docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_ADDRESS_SCOPE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_ADDRESS_SCOPE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_ADDRESS_SCOPE \- scope id for IPv6 addresses
@@ -40,15 +40,20 @@ Pass a long specifying the scope id value to use when connecting to IPv6 address
All, when using IPv6
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- long my_scope_id;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- my_scope_id = if_nametoindex("eth0");
- curl_easy_setopt(curl, CURLOPT_ADDRESS_SCOPE, my_scope_id);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+#include <net/if.h> /* for if_nametoindex() */
+
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ long my_scope_id;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ my_scope_id = if_nametoindex("eth0");
+ curl_easy_setopt(curl, CURLOPT_ADDRESS_SCOPE, my_scope_id);
+ ret = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -57,4 +62,5 @@ Added in 7.19.0
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
Returns CURLE_BAD_FUNCTION_ARGUMENT if set to a negative value.
.SH "SEE ALSO"
-.BR CURLOPT_STDERR "(3), " CURLOPT_DEBUGFUNCTION "(3), "
+.BR CURLOPT_DEBUGFUNCTION (3),
+.BR CURLOPT_STDERR (3)
diff --git a/docs/libcurl/opts/CURLOPT_ALTSVC.3 b/docs/libcurl/opts/CURLOPT_ALTSVC.3
index e560fe7e7..3eba950b3 100644
--- a/docs/libcurl/opts/CURLOPT_ALTSVC.3
+++ b/docs/libcurl/opts/CURLOPT_ALTSVC.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_ALTSVC 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_ALTSVC 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_ALTSVC \- alt-svc cache file name
@@ -35,7 +35,7 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ALTSVC, char *filename);
.SH DESCRIPTION
Pass in a pointer to a \fIfilename\fP to instruct libcurl to use that file as
the Alt-Svc cache to read existing cache contents from and possibly also write
-it back to a after a transfer, unless \fBCURLALTSVC_READONLYFILE\fP is set in
+it back to after a transfer, unless \fBCURLALTSVC_READONLYFILE\fP is set in
\fICURLOPT_ALTSVC_CTRL(3)\fP.
Specify a blank file name ("") to make libcurl not load from a file at all.
@@ -45,11 +45,14 @@ NULL. The alt-svc cache is not read nor written to file.
HTTPS
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_ALTSVC_CTRL, CURLALTSVC_H1);
- curl_easy_setopt(curl, CURLOPT_ALTSVC, "altsvc-cache.txt");
- curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_ALTSVC_CTRL, CURLALTSVC_H1);
+ curl_easy_setopt(curl, CURLOPT_ALTSVC, "altsvc-cache.txt");
+ curl_easy_perform(curl);
+ }
}
.fi
.SH "FILE FORMAT"
@@ -86,5 +89,7 @@ Added in 7.64.1
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_ALTSVC_CTRL "(3), " CURLOPT_CONNECT_TO "(3), " CURLOPT_RESOLVE "(3), "
-.BR CURLOPT_COOKIEFILE "(3), "
+.BR CURLOPT_ALTSVC_CTRL (3),
+.BR CURLOPT_CONNECT_TO (3),
+.BR CURLOPT_COOKIEFILE (3),
+.BR CURLOPT_RESOLVE (3)
diff --git a/docs/libcurl/opts/CURLOPT_ALTSVC_CTRL.3 b/docs/libcurl/opts/CURLOPT_ALTSVC_CTRL.3
index ce88f91ea..7c670786f 100644
--- a/docs/libcurl/opts/CURLOPT_ALTSVC_CTRL.3
+++ b/docs/libcurl/opts/CURLOPT_ALTSVC_CTRL.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_ALTSVC_CTRL 3 "October 22, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_ALTSVC_CTRL 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_ALTSVC_CTRL \- control alt-svc behavior
@@ -42,29 +42,27 @@ Populate the long \fIbitmask\fP with the correct set of features to instruct
libcurl how to handle Alt-Svc for the transfers using this handle.
libcurl only accepts Alt-Svc headers over a secure transport, meaning
-HTTPS. It will also only complete a request to an alternative origin if that
+HTTPS. It also only completes a request to an alternative origin if that
origin is properly hosted over HTTPS. These requirements are there to make
sure both the source and the destination are legitimate.
Alternative services are only used when setting up new connections. If there
-exists an existing connection to the host in the connection pool, then that
-will be preferred.
+exists an existing connection to the host in the connection pool, then that is
+preferred.
-Setting any bit will enable the alt-svc engine.
+Setting any bit enables the alt-svc engine.
.IP "CURLALTSVC_READONLYFILE"
Do not write the alt-svc cache back to the file specified with
\fICURLOPT_ALTSVC(3)\fP even if it gets updated. By default a file specified
-with that option will be read and written to as deemed necessary.
+with that option is read and written to as deemed necessary.
.IP "CURLALTSVC_H1"
Accept alternative services offered over HTTP/1.1.
.IP "CURLALTSVC_H2"
-Accept alternative services offered over HTTP/2. This will only be used if
-libcurl was also built to actually support HTTP/2, otherwise this bit will be
-ignored.
+Accept alternative services offered over HTTP/2. This is only used if libcurl
+was also built to actually support HTTP/2, otherwise this bit is ignored.
.IP "CURLALTSVC_H3"
-Accept alternative services offered over HTTP/3. This will only be used if
-libcurl was also built to actually support HTTP/3, otherwise this bit will be
-ignored.
+Accept alternative services offered over HTTP/3. This is only used if libcurl
+was also built to actually support HTTP/3, otherwise this bit is ignored.
.SH DEFAULT
Alt-Svc handling is disabled by default. If \fICURLOPT_ALTSVC(3)\fP is set,
\fICURLOPT_ALTSVC_CTRL(3)\fP has a default value corresponding to
@@ -74,11 +72,14 @@ only set if libcurl was built with support for those versions.
HTTPS
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_ALTSVC_CTRL, (long)CURLALTSVC_H1);
- curl_easy_setopt(curl, CURLOPT_ALTSVC, "altsvc-cache.txt");
- curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_ALTSVC_CTRL, (long)CURLALTSVC_H1);
+ curl_easy_setopt(curl, CURLOPT_ALTSVC, "altsvc-cache.txt");
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -86,4 +87,6 @@ Added in 7.64.1
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_ALTSVC "(3), " CURLOPT_CONNECT_TO "(3), " CURLOPT_RESOLVE "(3), "
+.BR CURLOPT_ALTSVC (3),
+.BR CURLOPT_CONNECT_TO (3),
+.BR CURLOPT_RESOLVE (3)
diff --git a/docs/libcurl/opts/CURLOPT_APPEND.3 b/docs/libcurl/opts/CURLOPT_APPEND.3
index 3724f1620..2787bb405 100644
--- a/docs/libcurl/opts/CURLOPT_APPEND.3
+++ b/docs/libcurl/opts/CURLOPT_APPEND.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_APPEND 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_APPEND 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_APPEND \- append to the remote file
@@ -41,14 +41,17 @@ instead of overwrite it. This is only useful when uploading to an FTP site.
FTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/dir/to/newfile");
- curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
- curl_easy_setopt(curl, CURLOPT_APPEND, 1L);
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/dir/to/newfile");
+ curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
+ curl_easy_setopt(curl, CURLOPT_APPEND, 1L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -56,5 +59,6 @@ This option was known as CURLOPT_FTPAPPEND up to 7.16.4
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_DIRLISTONLY "(3), " CURLOPT_RESUME_FROM "(3), "
-.BR CURLOPT_UPLOAD "(3), "
+.BR CURLOPT_DIRLISTONLY (3),
+.BR CURLOPT_RESUME_FROM (3),
+.BR CURLOPT_UPLOAD (3)
diff --git a/docs/libcurl/opts/CURLOPT_AUTOREFERER.3 b/docs/libcurl/opts/CURLOPT_AUTOREFERER.3
index 91c0f5530..21a1102a5 100644
--- a/docs/libcurl/opts/CURLOPT_AUTOREFERER.3
+++ b/docs/libcurl/opts/CURLOPT_AUTOREFERER.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_AUTOREFERER 3 "October 18, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_AUTOREFERER 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_AUTOREFERER \- automatically update the referer header
@@ -33,9 +33,9 @@ CURLOPT_AUTOREFERER \- automatically update the referer header
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_AUTOREFERER, long autorefer);
.fi
.SH DESCRIPTION
-Pass a long parameter set to 1 to enable this. When enabled, libcurl will
-automatically set the Referer: header field in HTTP requests to the full URL
-where it follows a Location: redirect.
+Pass a long parameter set to 1 to enable this. When enabled, libcurl
+automatically sets the Referer: header field in HTTP requests to the full URL
+when it follows a Location: redirect to a new destination.
The automatic referer is set to the full previous URL even when redirects are
done cross-origin or following redirects to insecure protocols. This is
@@ -46,19 +46,23 @@ considered a minor privacy leak by some.
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- /* follow redirects */
- curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
+ /* follow redirects */
+ curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
- /* set Referer: automatically when following redirects */
- curl_easy_setopt(curl, CURLOPT_AUTOREFERER, 1L);
+ /* set Referer: automatically when following redirects */
+ curl_easy_setopt(curl, CURLOPT_AUTOREFERER, 1L);
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -66,4 +70,7 @@ Along with HTTP
.SH RETURN VALUE
Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_REFERER "(3), " CURLOPT_FOLLOWLOCATION "(3), "
+.BR CURLINFO_EFFECTIVE_URL (3),
+.BR CURLINFO_REDIRECT_URL (3),
+.BR CURLOPT_FOLLOWLOCATION (3),
+.BR CURLOPT_REFERER (3)
diff --git a/docs/libcurl/opts/CURLOPT_AWS_SIGV4.3 b/docs/libcurl/opts/CURLOPT_AWS_SIGV4.3
index 7d8cac3f4..a6eb00934 100644
--- a/docs/libcurl/opts/CURLOPT_AWS_SIGV4.3
+++ b/docs/libcurl/opts/CURLOPT_AWS_SIGV4.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_AWS_SIGV4 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_AWS_SIGV4 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_AWS_SIGV4 \- V4 signature
@@ -53,13 +53,13 @@ NOTE: This call set \fICURLOPT_HTTPAUTH(3)\fP to CURLAUTH_AWS_SIGV4.
Calling \fICURLOPT_HTTPAUTH(3)\fP with CURLAUTH_AWS_SIGV4 is the same
as calling this with \fB"aws:amz"\fP in parameter.
.PP
-Example with "Test:Try", when curl will do the algorithm, it will generate
-\fB"TEST-HMAC-SHA256"\Ä‘P for "Algorithm", \fB"x-try-date"\fP and
+Example with "Test:Try", when curl uses the algorithm, it generates
+\fB"TEST-HMAC-SHA256"\fP for "Algorithm", \fB"x-try-date"\fP and
\fB"X-Try-Date"\fP for "date", \fB"test4_request"\fP for "request type",
\fB"SignedHeaders=content-type;host;x-try-date"\fP for "signed headers"
.PP
-If you use just "test", instead of "test:try",
-test will be use for every strings generated
+If you use just "test", instead of "test:try", test is used for every
+generated string.
.SH DEFAULT
By default, the value of this parameter is NULL.
Calling \fICURLOPT_HTTPAUTH(3)\fP with CURLAUTH_AWS_SIGV4 is the same
@@ -68,24 +68,23 @@ as calling this with \fB"aws:amz"\fP in parameter.
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
+int main(void)
+{
+ CURL *curl = curl_easy_init();
-struct curl_slist *list = NULL;
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL,
+ "https://service.region.example.com/uri");
+ curl_easy_setopt(curl, CURLOPT_AWS_SIGV4, "provider1:provider2");
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL,
- "https://service.region.example.com/uri");
- curl_easy_setopt(c, CURLOPT_AWS_SIGV4, "provider1:provider2");
+ /* service and region can also be set in CURLOPT_AWS_SIGV4 */
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/uri");
+ curl_easy_setopt(curl, CURLOPT_AWS_SIGV4,
+ "provider1:provider2:region:service");
- /* service and region also could be set in CURLOPT_AWS_SIGV4 */
- /*
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/uri");
- curl_easy_setopt(c, CURLOPT_AWS_SIGV4,
- "provider1:provider2:region:service");
- */
-
- curl_easy_setopt(c, CURLOPT_USERPWD, "MY_ACCESS_KEY:MY_SECRET_KEY");
- curl_easy_perform(curl);
+ curl_easy_setopt(curl, CURLOPT_USERPWD, "MY_ACCESS_KEY:MY_SECRET_KEY");
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -96,5 +95,18 @@ Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
This option overrides the other auth types you might have set in
\fICURLOPT_HTTPAUTH(3)\fP which should be highlighted as this makes this auth
method special. This method cannot be combined with other auth types.
+.PP
+A sha256 checksum of the request payload is used as input to the signature
+calculation. For POST requests, this is a checksum of the provided
+\fICURLOPT_POSTFIELDS(3)\fP. Otherwise, it's the checksum of an empty buffer.
+For requests like PUT, you can provide your own checksum in an HTTP header named
+\fBx-provider2-content-sha256\fP.
+.PP
+For \fBaws:s3\fP, a \fBx-amz-content-sha256\fP header is added to every request
+if not already present. For s3 requests with unknown payload, this header takes
+the special value "UNSIGNED-PAYLOAD".
.SH "SEE ALSO"
-.BR CURLOPT_HEADEROPT "(3), " CURLOPT_HTTPHEADER "(3), "
+.BR CURLOPT_HEADEROPT (3),
+.BR CURLOPT_HTTPAUTH (3),
+.BR CURLOPT_HTTPHEADER (3),
+.BR CURLOPT_PROXYAUTH (3)
diff --git a/docs/libcurl/opts/CURLOPT_BUFFERSIZE.3 b/docs/libcurl/opts/CURLOPT_BUFFERSIZE.3
index 3606cb1fb..52bec62e9 100644
--- a/docs/libcurl/opts/CURLOPT_BUFFERSIZE.3
+++ b/docs/libcurl/opts/CURLOPT_BUFFERSIZE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_BUFFERSIZE 3 "August 23, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_BUFFERSIZE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_BUFFERSIZE \- receive buffer size
@@ -36,33 +36,39 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_BUFFERSIZE, long size);
Pass a long specifying your preferred \fIsize\fP (in bytes) for the receive
buffer in libcurl. The main point of this would be that the write callback
gets called more often and with smaller chunks. Secondly, for some protocols,
-there's a benefit of having a larger buffer for performance.
+there is a benefit of having a larger buffer for performance.
This is just treated as a request, not an order. You cannot be guaranteed to
actually get the given size.
This buffer size is by default \fICURL_MAX_WRITE_SIZE\fP (16kB). The maximum
-buffer size allowed to be set is \fICURL_MAX_READ_SIZE\fP (512kB). The minimum
+buffer size allowed to be set is \fICURL_MAX_READ_SIZE\fP (10MB). The minimum
buffer size allowed to be set is 1024.
DO NOT set this option on a handle that is currently used for an active
transfer as that may lead to unintended consequences.
+
+The maximum size was 512kB until 7.88.0.
.SH DEFAULT
CURL_MAX_WRITE_SIZE (16kB)
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/foo.bin");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/foo.bin");
- /* ask libcurl to allocate a larger receive buffer */
- curl_easy_setopt(curl, CURLOPT_BUFFERSIZE, 120000L);
+ /* ask libcurl to allocate a larger receive buffer */
+ curl_easy_setopt(curl, CURLOPT_BUFFERSIZE, 120000L);
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -70,5 +76,8 @@ Added in 7.10. Growing the buffer was added in 7.53.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_MAX_RECV_SPEED_LARGE "(3), " CURLOPT_WRITEFUNCTION "(3), "
-.BR CURLOPT_UPLOAD_BUFFERSIZE "(3), "
+.BR CURLOPT_MAX_RECV_SPEED_LARGE (3),
+.BR CURLOPT_MAXFILESIZE (3),
+.BR CURLOPT_UPLOAD_BUFFERSIZE (3),
+.BR CURLOPT_WRITEFUNCTION (3)
+
diff --git a/docs/libcurl/opts/CURLOPT_CAINFO.3 b/docs/libcurl/opts/CURLOPT_CAINFO.3
index 5ec7d5757..bc18baf7e 100644
--- a/docs/libcurl/opts/CURLOPT_CAINFO.3
+++ b/docs/libcurl/opts/CURLOPT_CAINFO.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_CAINFO 3 "September 22, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_CAINFO 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_CAINFO \- path to Certificate Authority (CA) bundle
@@ -43,21 +43,13 @@ accessible file.
This option is by default set to the system path where libcurl's CA
certificate bundle is assumed to be stored, as established at build time.
-If curl is built against the NSS SSL library, the NSS PEM PKCS#11 module
-(libnsspem.so) needs to be available for this option to work properly.
-Starting with curl-7.55.0, if both \fICURLOPT_CAINFO(3)\fP and
-\fICURLOPT_CAPATH(3)\fP are unset, NSS-linked libcurl tries to load
-libnssckbi.so, which contains a more comprehensive set of trust information
-than supported by nss-pem, because libnssckbi.so also includes information
-about distrusted certificates.
-
(iOS and macOS) When curl uses Secure Transport this option is supported. If
-the option is not set, then curl will use the certificates in the system and
-user Keychain to verify the peer.
+the option is not set, then curl uses the certificates in the system and user
+Keychain to verify the peer.
(Schannel) This option is supported for Schannel in Windows 7 or later but we
recommend not using it until Windows 8 since it works better starting then.
-If the option is not set, then curl will use the certificates in the Windows'
+If the option is not set, then curl uses the certificates in the Windows'
store of root certificates (the default for Schannel).
The application does not have to keep the string around after setting this
@@ -71,12 +63,15 @@ Schannel, this option is not set by default.
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_CAINFO, "/etc/certs/cabundle.pem");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_CAINFO, "/etc/certs/cabundle.pem");
+ curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -87,6 +82,9 @@ For the SSL engines that do not support certificate files the
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_CAINFO_BLOB "(3), " CURLOPT_CAPATH "(3), "
-.BR CURLOPT_SSL_VERIFYPEER "(3), " CURLOPT_SSL_VERIFYHOST "(3), "
-.BR CURLINFO_CAINFO "(3), "
+.BR CURLINFO_CAINFO (3),
+.BR CURLOPT_CA_CACHE_TIMEOUT (3),
+.BR CURLOPT_CAINFO_BLOB (3),
+.BR CURLOPT_CAPATH (3),
+.BR CURLOPT_SSL_VERIFYHOST (3),
+.BR CURLOPT_SSL_VERIFYPEER (3)
diff --git a/docs/libcurl/opts/CURLOPT_CAINFO_BLOB.3 b/docs/libcurl/opts/CURLOPT_CAINFO_BLOB.3
index 3b5974374..8288d5bb5 100644
--- a/docs/libcurl/opts/CURLOPT_CAINFO_BLOB.3
+++ b/docs/libcurl/opts/CURLOPT_CAINFO_BLOB.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_CAINFO_BLOB 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_CAINFO_BLOB 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_CAINFO_BLOB \- Certificate Authority (CA) bundle in PEM format
@@ -38,6 +38,10 @@ Pass a pointer to a curl_blob structure, which contains information (pointer
and size) about a memory block with binary data of PEM encoded content holding
one or more certificates to verify the HTTPS server with.
+If the blob is initialized with the flags member of struct curl_blob set to
+CURL_BLOB_COPY, the application does not have to keep the buffer around after
+setting this.
+
If \fICURLOPT_SSL_VERIFYPEER(3)\fP is zero and you avoid verifying the
server's certificate, \fICURLOPT_CAINFO_BLOB(3)\fP is not needed.
@@ -48,27 +52,35 @@ NULL
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
-char *strpem; /* strpem must point to a PEM string */
-CURL *curl = curl_easy_init();
-if(curl) {
- struct curl_blob blob;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- blob.data = strpem;
- blob.len = strlen(strpem);
- blob.flags = CURL_BLOB_COPY;
- curl_easy_setopt(curl, CURLOPT_CAINFO_BLOB, &blob);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+#include <string.h>
+
+int main(void)
+{
+ char *strpem; /* strpem must point to a PEM string */
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ struct curl_blob blob;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ blob.data = strpem;
+ blob.len = strlen(strpem);
+ blob.flags = CURL_BLOB_COPY;
+ curl_easy_setopt(curl, CURLOPT_CAINFO_BLOB, &blob);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
Added in 7.77.0.
This option is supported by the BearSSL (since 7.79.0), mbedTLS (since 7.81.0),
-rustls (since 7.82.0), OpenSSL, Secure Transport and Schannel backends.
+rustls (since 7.82.0), wolfSSL (since 8.2.0), OpenSSL, Secure Transport and Schannel backends.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_CAINFO "(3), " CURLOPT_CAPATH "(3), "
-.BR CURLOPT_SSL_VERIFYPEER "(3), " CURLOPT_SSL_VERIFYHOST "(3), "
+.BR CURLOPT_CAINFO (3),
+.BR CURLOPT_CAPATH (3),
+.BR CURLOPT_SSL_VERIFYPEER (3),
+.BR CURLOPT_SSL_VERIFYHOST (3)
diff --git a/docs/libcurl/opts/CURLOPT_CAPATH.3 b/docs/libcurl/opts/CURLOPT_CAPATH.3
index 518696ae9..5bb78e239 100644
--- a/docs/libcurl/opts/CURLOPT_CAPATH.3
+++ b/docs/libcurl/opts/CURLOPT_CAPATH.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_CAPATH 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_CAPATH 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_CAPATH \- directory holding CA certificates
@@ -52,17 +52,21 @@ A default path detected at build time.
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_CAPATH, "/etc/cert-dir");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_CAPATH, "/etc/cert-dir");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
This option is supported by the OpenSSL, GnuTLS and mbedTLS (since 7.56.0)
-backends. The NSS backend provides the option only for backward compatibility.
+backends.
.SH RETURN VALUE
CURLE_OK if supported; or an error such as:
@@ -72,6 +76,7 @@ CURLE_UNKNOWN_OPTION
CURLE_OUT_OF_MEMORY
.SH "SEE ALSO"
-.BR CURLOPT_CAINFO "(3), "
-.BR CURLOPT_STDERR "(3), " CURLOPT_DEBUGFUNCTION "(3), "
-.BR CURLINFO_CAPATH "(3), "
+.BR CURLINFO_CAPATH (3),
+.BR CURLOPT_CAINFO (3),
+.BR CURLOPT_DEBUGFUNCTION (3),
+.BR CURLOPT_STDERR (3)
diff --git a/docs/libcurl/opts/CURLOPT_CA_CACHE_TIMEOUT.3 b/docs/libcurl/opts/CURLOPT_CA_CACHE_TIMEOUT.3
new file mode 100644
index 000000000..fb854dc6f
--- /dev/null
+++ b/docs/libcurl/opts/CURLOPT_CA_CACHE_TIMEOUT.3
@@ -0,0 +1,85 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed 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
+.\" *
+.\" **************************************************************************
+.\"
+.TH CURLOPT_CA_CACHE_TIMEOUT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
+
+.SH NAME
+CURLOPT_CA_CACHE_TIMEOUT \- life-time for cached certificate stores
+.SH SYNOPSIS
+.nf
+#include <curl/curl.h>
+
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CA_CACHE_TIMEOUT, long age);
+.fi
+.SH DESCRIPTION
+Pass a long, this sets the timeout in seconds. This tells libcurl the maximum
+time any cached certificate store it has in memory may be kept and reused for
+new connections. Once the timeout has expired, a subsequent fetch requiring a
+certificate has to reload it.
+
+Building a certificate store from a \fICURLOPT_CAINFO(3)\fP file is a slow
+operation so curl may cache the generated certificate store internally to speed
+up future connections.
+
+Set to zero to completely disable caching, or set to -1 to retain the cached
+store remain forever. By default, libcurl caches this info for 24 hours.
+.SH DEFAULT
+86400 (24 hours)
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+.nf
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+
+ /* only reuse certificate stores for a short time */
+ curl_easy_setopt(curl, CURLOPT_CA_CACHE_TIMEOUT, 60L);
+
+ res = curl_easy_perform(curl);
+
+ /* in this second request, the cache is not used if more than
+ sixty seconds passed since the previous connection */
+ res = curl_easy_perform(curl);
+
+ curl_easy_cleanup(curl);
+ }
+}
+.fi
+.SH AVAILABILITY
+This option was added in curl 7.87.0.
+
+This option is supported by OpenSSL and its forks (since 7.87.0) and Schannel
+(since 8.5.0).
+.SH RETURN VALUE
+Returns CURLE_OK
+.SH "SEE ALSO"
+.BR CURLOPT_CAINFO (3),
+.BR CURLOPT_CAINFO_BLOB (3),
+.BR CURLOPT_CAPATH (3),
+.BR CURLOPT_SSL_VERIFYPEER (3),
+.BR CURLOPT_SSL_VERIFYHOST (3)
diff --git a/docs/libcurl/opts/CURLOPT_CERTINFO.3 b/docs/libcurl/opts/CURLOPT_CERTINFO.3
index a633d51a8..fd8a7acd1 100644
--- a/docs/libcurl/opts/CURLOPT_CERTINFO.3
+++ b/docs/libcurl/opts/CURLOPT_CERTINFO.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_CERTINFO 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_CERTINFO 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_CERTINFO \- request SSL certificate information
@@ -34,7 +34,7 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CERTINFO, long certinfo);
.fi
.SH DESCRIPTION
Pass a long set to 1 to enable libcurl's certificate chain info gatherer. With
-this enabled, libcurl will extract lots of information and data about the
+this enabled, libcurl extracts lots of information and data about the
certificates in the certificate chain used in the SSL connection. This data
may then be retrieved after a transfer using \fIcurl_easy_getinfo(3)\fP and
its option \fICURLINFO_CERTINFO(3)\fP.
@@ -44,41 +44,50 @@ its option \fICURLINFO_CERTINFO(3)\fP.
All TLS-based
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://www.example.com/");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://www.example.com/");
- /* connect to any HTTPS site, trusted or not */
- curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
- curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
+ /* connect to any HTTPS site, trusted or not */
+ curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
+ curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
- curl_easy_setopt(curl, CURLOPT_CERTINFO, 1L);
+ curl_easy_setopt(curl, CURLOPT_CERTINFO, 1L);
- res = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- if (!res) {
- struct curl_certinfo *ci;
- res = curl_easy_getinfo(curl, CURLINFO_CERTINFO, &ci);
+ if(!res) {
+ struct curl_certinfo *ci;
+ res = curl_easy_getinfo(curl, CURLINFO_CERTINFO, &ci);
- if (!res) {
- printf("%d certs!\\n", ci->num_of_certs);
+ if(!res) {
+ int i;
+ printf("%d certs!\\n", ci->num_of_certs);
- for(i = 0; i < ci->num_of_certs; i++) {
- struct curl_slist *slist;
+ for(i = 0; i < ci->num_of_certs; i++) {
+ struct curl_slist *slist;
- for(slist = ci->certinfo[i]; slist; slist = slist->next)
- printf("%s\\n", slist->data);
+ for(slist = ci->certinfo[i]; slist; slist = slist->next)
+ printf("%s\\n", slist->data);
+ }
}
}
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
-This option is supported by the OpenSSL, GnuTLS, Schannel, NSS, GSKit and
-Secure Transport backends. Schannel support added in 7.50.0. Secure Transport
-support added in 7.79.0.
+This option is supported by the OpenSSL, GnuTLS, Schannel and Secure
+Transport backends. Schannel support added in 7.50.0. Secure Transport support
+added in 7.79.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_CAINFO "(3), " CURLOPT_SSL_VERIFYPEER "(3), "
+.BR CURLINFO_CAINFO (3),
+.BR CURLINFO_CAPATH (3),
+.BR CURLINFO_CERTINFO (3),
+.BR CURLOPT_CAINFO (3),
+.BR CURLOPT_SSL_VERIFYPEER (3)
diff --git a/docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.3 b/docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.3
index acec10a26..2b4a10f5f 100644
--- a/docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_CHUNK_BGN_FUNCTION 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_CHUNK_BGN_FUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_CHUNK_BGN_FUNCTION \- callback before a transfer with FTP wildcard match
@@ -69,8 +69,8 @@ shown above.
This callback function gets called by libcurl before a part of the stream is
going to be transferred (if the transfer supports chunks).
-The \fItransfer_info\fP pointer will point to a \fBcurl_fileinfo\fP struct
-with details about the file that is about to get transferred.
+The \fItransfer_info\fP pointer points to a \fBcurl_fileinfo\fP struct with
+details about the file that is about to get transferred.
This callback makes sense only when using the \fICURLOPT_WILDCARDMATCH(3)\fP
option for now.
@@ -91,10 +91,17 @@ NULL
FTP
.SH EXAMPLE
.nf
+#include <stdio.h>
+
+struct callback_data {
+ FILE *output;
+};
+
static long file_is_coming(struct curl_fileinfo *finfo,
- struct callback_data *data,
+ void *ptr,
int remains)
{
+ struct callback_data *data = ptr;
printf("%3d %40s %10luB ", remains, finfo->filename,
(unsigned long)finfo->size);
@@ -131,6 +138,8 @@ int main()
/* data for callback */
struct callback_data callback_info;
+ CURL *curl = curl_easy_init();
+
/* callback is called before download of concrete file started */
curl_easy_setopt(curl, CURLOPT_CHUNK_BGN_FUNCTION, file_is_coming);
curl_easy_setopt(curl, CURLOPT_CHUNK_DATA, &callback_info);
@@ -141,4 +150,5 @@ This was added in 7.21.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_CHUNK_END_FUNCTION "(3), " CURLOPT_WILDCARDMATCH "(3), "
+.BR CURLOPT_CHUNK_END_FUNCTION (3),
+.BR CURLOPT_WILDCARDMATCH (3)
diff --git a/docs/libcurl/opts/CURLOPT_CHUNK_DATA.3 b/docs/libcurl/opts/CURLOPT_CHUNK_DATA.3
index e30da8ef6..b9ca3ee5f 100644
--- a/docs/libcurl/opts/CURLOPT_CHUNK_DATA.3
+++ b/docs/libcurl/opts/CURLOPT_CHUNK_DATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_CHUNK_DATA 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_CHUNK_DATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_CHUNK_DATA \- pointer passed to the FTP chunk callbacks
@@ -33,7 +33,7 @@ CURLOPT_CHUNK_DATA \- pointer passed to the FTP chunk callbacks
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CHUNK_DATA, void *pointer);
.fi
.SH DESCRIPTION
-Pass a \fIpointer\fP that will be untouched by libcurl and passed as the ptr
+Pass a \fIpointer\fP that is untouched by libcurl and passed as the ptr
argument to the \fICURLOPT_CHUNK_BGN_FUNCTION(3)\fP and
\fICURLOPT_CHUNK_END_FUNCTION(3)\fP.
.SH DEFAULT
@@ -42,10 +42,17 @@ NULL
FTP
.SH EXAMPLE
.nf
+#include <stdio.h>
+
+struct callback_data {
+ FILE *output;
+};
+
static long file_is_coming(struct curl_fileinfo *finfo,
- struct callback_data *data,
+ void *ptr,
int remains)
{
+ struct callback_data *data = ptr;
printf("%3d %40s %10luB ", remains, finfo->filename,
(unsigned long)finfo->size);
@@ -82,6 +89,8 @@ int main()
/* data for callback */
struct callback_data callback_info;
+ CURL *curl = curl_easy_init();
+
/* callback is called before download of concrete file started */
curl_easy_setopt(curl, CURLOPT_CHUNK_BGN_FUNCTION, file_is_coming);
curl_easy_setopt(curl, CURLOPT_CHUNK_DATA, &callback_info);
@@ -92,4 +101,5 @@ Added in 7.21.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_CHUNK_BGN_FUNCTION "(3), " CURLOPT_WILDCARDMATCH "(3), "
+.BR CURLOPT_CHUNK_BGN_FUNCTION (3),
+.BR CURLOPT_WILDCARDMATCH (3)
diff --git a/docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.3 b/docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.3
index 4660d2283..81298e3b7 100644
--- a/docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_CHUNK_END_FUNCTION 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_CHUNK_END_FUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_CHUNK_END_FUNCTION \- callback after a transfer with FTP wildcard match
@@ -49,6 +49,12 @@ NULL
FTP
.SH EXAMPLE
.nf
+#include <stdio.h>
+
+struct callback_data {
+ FILE *output;
+};
+
static long file_is_downloaded(struct callback_data *data)
{
if(data->output) {
@@ -62,6 +68,9 @@ int main()
{
/* data for callback */
struct callback_data callback_info;
+
+ CURL *curl = curl_easy_init();
+
curl_easy_setopt(curl, CURLOPT_CHUNK_END_FUNCTION, file_is_downloaded);
curl_easy_setopt(curl, CURLOPT_CHUNK_DATA, &callback_info);
}
@@ -71,4 +80,5 @@ Added in 7.21.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_WILDCARDMATCH "(3), " CURLOPT_CHUNK_BGN_FUNCTION "(3), "
+.BR CURLOPT_CHUNK_BGN_FUNCTION (3),
+.BR CURLOPT_WILDCARDMATCH (3)
diff --git a/docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.3 b/docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.3
index eaca56873..c48aa2e12 100644
--- a/docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.3
+++ b/docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_CLOSESOCKETDATA 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_CLOSESOCKETDATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_CLOSESOCKETDATA \- pointer passed to the socket close callback
@@ -34,7 +34,7 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CLOSESOCKETDATA,
void *pointer);
.fi
.SH DESCRIPTION
-Pass a \fIpointer\fP that will be untouched by libcurl and passed as the first
+Pass a \fIpointer\fP that remains untouched by libcurl and passed as the first
argument in the closesocket callback set with
\fICURLOPT_CLOSESOCKETFUNCTION(3)\fP.
.SH DEFAULT
@@ -43,19 +43,36 @@ The default value of this parameter is NULL.
All except file:
.SH EXAMPLE
.nf
+struct priv {
+ void *custom;
+};
+
static int closesocket(void *clientp, curl_socket_t item)
{
+ struct priv *my = clientp;
+ printf("our ptr: %p\\n", my->custom);
+
printf("libcurl wants to close %d now\\n", (int)item);
return 0;
}
-/* call this function to close sockets */
-curl_easy_setopt(curl, CURLOPT_CLOSESOCKETFUNCTION, closesocket);
-curl_easy_setopt(curl, CURLOPT_CLOSESOCKETDATA, &sockfd);
+int main(void)
+{
+ struct priv myown;
+ CURL *curl = curl_easy_init();
+
+ /* call this function to close sockets */
+ curl_easy_setopt(curl, CURLOPT_CLOSESOCKETFUNCTION, closesocket);
+ curl_easy_setopt(curl, CURLOPT_CLOSESOCKETDATA, &myown);
+
+ curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+}
.fi
.SH AVAILABILITY
Added in 7.21.7
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_CLOSESOCKETFUNCTION "(3), " CURLOPT_OPENSOCKETFUNCTION "(3), "
+.BR CURLOPT_CLOSESOCKETFUNCTION (3),
+.BR CURLOPT_OPENSOCKETFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.3 b/docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.3
index b227463e0..64b47e0a5 100644
--- a/docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_CLOSESOCKETFUNCTION 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_CLOSESOCKETFUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_CLOSESOCKETFUNCTION \- callback to socket close replacement
@@ -54,19 +54,36 @@ By default libcurl uses the standard socket close function.
All
.SH EXAMPLE
.nf
+struct priv {
+ void *custom;
+};
+
static int closesocket(void *clientp, curl_socket_t item)
{
+ struct priv *my = clientp;
+ printf("our ptr: %p\\n", my->custom);
+
printf("libcurl wants to close %d now\\n", (int)item);
return 0;
}
-/* call this function to close sockets */
-curl_easy_setopt(curl, CURLOPT_CLOSESOCKETFUNCTION, closesocket);
-curl_easy_setopt(curl, CURLOPT_CLOSESOCKETDATA, &sockfd);
+int main(void)
+{
+ struct priv myown;
+ CURL *curl = curl_easy_init();
+
+ /* call this function to close sockets */
+ curl_easy_setopt(curl, CURLOPT_CLOSESOCKETFUNCTION, closesocket);
+ curl_easy_setopt(curl, CURLOPT_CLOSESOCKETDATA, &myown);
+
+ curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+}
.fi
.SH AVAILABILITY
Added in 7.21.7
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_CLOSESOCKETDATA "(3), " CURLOPT_OPENSOCKETFUNCTION "(3), "
+.BR CURLOPT_CLOSESOCKETDATA (3),
+.BR CURLOPT_OPENSOCKETFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.3 b/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.3
index 9d0caba1f..e4525ca30 100644
--- a/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.3
+++ b/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_CONNECTTIMEOUT 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_CONNECTTIMEOUT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_CONNECTTIMEOUT \- timeout for the connect phase
@@ -34,30 +34,50 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECTTIMEOUT, long timeout);
.fi
.SH DESCRIPTION
Pass a long. It should contain the maximum time in seconds that you allow the
-connection phase to the server to take. This only limits the connection
-phase, it has no impact once it has connected. Set to zero to switch to the
-default built-in connection timeout - 300 seconds. See also the
+connection phase to the server to take. This timeout only limits the
+connection phase, it has no impact once it has connected. Set to zero to
+switch to the default built-in connection timeout - 300 seconds. See also the
\fICURLOPT_TIMEOUT(3)\fP option.
-In unix-like systems, this might cause signals to be used unless
-\fICURLOPT_NOSIGNAL(3)\fP is set.
+\fICURLOPT_CONNECTTIMEOUT_MS(3)\fP is the same function but set in milliseconds.
If both \fICURLOPT_CONNECTTIMEOUT(3)\fP and \fICURLOPT_CONNECTTIMEOUT_MS(3)\fP
-are set, the value set last will be used.
+are set, the value set last is used.
+
+The "connection phase" is considered complete when the requested TCP, TLS or
+QUIC handshakes are done.
+
+The connection timeout set with \fICURLOPT_CONNECTTIMEOUT(3)\fP is included in
+the general all-covering \fICURLOPT_TIMEOUT(3)\fP.
+
+With \fICURLOPT_CONNECTTIMEOUT(3)\fP set to 3 and \fICURLOPT_TIMEOUT(3)\fP set
+to 5, the operation can never last longer than 5 seconds, and the connection
+phase cannot last longer than 3 seconds.
+
+With \fICURLOPT_CONNECTTIMEOUT(3)\fP set to 4 and \fICURLOPT_TIMEOUT(3)\fP set
+to 2, the operation can never last longer than 2 seconds. Including the
+connection phase.
+
+This option may cause libcurl to use the SIGALRM signal to timeout system
+calls on builds not using asynch DNS. In unix-like systems, this might cause
+signals to be used unless \fICURLOPT_NOSIGNAL(3)\fP is set.
.SH DEFAULT
300
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* complete connection within 10 seconds */
- curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10L);
+ /* complete connection within 10 seconds */
+ curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -66,5 +86,7 @@ Always
Returns CURLE_OK. Returns CURLE_BAD_FUNCTION_ARGUMENT if set to a negative
value or a value that when converted to milliseconds is too large.
.SH "SEE ALSO"
-.BR CURLOPT_CONNECTTIMEOUT_MS "(3), "
-.BR CURLOPT_TIMEOUT "(3), " CURLOPT_LOW_SPEED_LIMIT "(3), "
+.BR CURLOPT_CONNECTTIMEOUT_MS (3),
+.BR CURLOPT_LOW_SPEED_LIMIT (3),
+.BR CURLOPT_MAX_RECV_SPEED_LARGE (3),
+.BR CURLOPT_TIMEOUT (3)
diff --git a/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.3 b/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.3
index 59ccfd68d..13ce65581 100644
--- a/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.3
+++ b/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_CONNECTTIMEOUT_MS 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_CONNECTTIMEOUT_MS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_CONNECTTIMEOUT_MS \- timeout for the connect phase
@@ -35,30 +35,26 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECTTIMEOUT_MS,
.fi
.SH DESCRIPTION
Pass a long. It should contain the maximum time in milliseconds that you allow
-the connection phase to the server to take. This only limits the connection
-phase, it has no impact once it has connected. Set to zero to switch to the
-default built-in connection timeout - 300 seconds. See also the
-\fICURLOPT_TIMEOUT_MS(3)\fP option.
+the connection phase to the server to take.
-In unix-like systems, this might cause signals to be used unless
-\fICURLOPT_NOSIGNAL(3)\fP is set.
-
-If both \fICURLOPT_CONNECTTIMEOUT(3)\fP and \fICURLOPT_CONNECTTIMEOUT_MS(3)\fP
-are set, the value set last will be used.
+See \fICURLOPT_CONNECTTIMEOUT(3)\fP for details.
.SH DEFAULT
300000
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* complete connection within 10000 milliseconds */
- curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, 10000L);
+ /* complete connection within 10000 milliseconds */
+ curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, 10000L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -66,5 +62,6 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_CONNECTTIMEOUT "(3), "
-.BR CURLOPT_TIMEOUT "(3), " CURLOPT_LOW_SPEED_LIMIT "(3), "
+.BR CURLOPT_CONNECTTIMEOUT (3),
+.BR CURLOPT_LOW_SPEED_LIMIT (3),
+.BR CURLOPT_TIMEOUT (3)
diff --git a/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.3 b/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.3
index 9bbc0f9a8..45aa662d4 100644
--- a/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.3
+++ b/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_CONNECT_ONLY 3 "September 12, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_CONNECT_ONLY 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_CONNECT_ONLY \- stop when connected to target server
@@ -43,12 +43,12 @@ useful when used with the \fICURLINFO_ACTIVESOCKET(3)\fP option to
the application can obtain the most recently used socket for special data
transfers.
-Since 7.86.0, this option can be set to '2' and if HTTP or WebSocket are
-used, libcurl will do the request and read all response headers before handing
+Since 7.86.0, this option can be set to '2' and if HTTP or WebSocket are used,
+libcurl performs the request and reads all response headers before handing
over control to the application.
-Transfers marked connect only will not reuse any existing connections and
-connections marked connect only will not be allowed to get reused.
+Transfers marked connect only do not reuse any existing connections and
+connections marked connect only are not allowed to get reused.
If the connect only transfer is done using the multi interface, the particular
easy handle must remain added to the multi handle for as long as the
@@ -61,14 +61,17 @@ application wants to use it. Once it has been removed with
HTTP, SMTP, POP3 and IMAP. For WS and WSS starting in 7.86.0.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);
- ret = curl_easy_perform(curl);
- if(ret == CURLE_OK) {
- /* only connected! */
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);
+ ret = curl_easy_perform(curl);
+ if(ret == CURLE_OK) {
+ /* only connected! */
+ }
}
}
.fi
@@ -77,5 +80,7 @@ Added in 7.15.2
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_VERBOSE "(3), " CURLOPT_HTTPPROXYTUNNEL "(3), "
-.BR curl_easy_recv "(3), " curl_easy_send "(3) "
+.BR curl_easy_recv (3),
+.BR curl_easy_send (3),
+.BR CURLOPT_HTTPPROXYTUNNEL (3),
+.BR CURLOPT_VERBOSE (3)
diff --git a/docs/libcurl/opts/CURLOPT_CONNECT_TO.3 b/docs/libcurl/opts/CURLOPT_CONNECT_TO.3
index 8fd699cdb..1bb75f50f 100644
--- a/docs/libcurl/opts/CURLOPT_CONNECT_TO.3
+++ b/docs/libcurl/opts/CURLOPT_CONNECT_TO.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_CONNECT_TO 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_CONNECT_TO 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_CONNECT_TO \- connect to a specific host and port instead of the URL's host and port
@@ -51,10 +51,10 @@ Dotted numerical IP addresses are supported for HOST and CONNECT-TO-HOST.
A numerical IPv6 address must be written within [brackets].
Any of the four values may be empty. When the HOST or PORT is empty, the host
-or port will always match (the request's host or port is ignored).
-When CONNECT-TO-HOST or CONNECT-TO-PORT is empty, the "connect to" feature
-will be disabled for the host or port, and the request's host or port will be
-used to establish the network connection.
+or port always match (the request's host or port is ignored). When
+CONNECT-TO-HOST or CONNECT-TO-PORT is empty, the "connect to" feature is
+disabled for the host or port, and the request's host or port are used to
+establish the network connection.
This option is suitable to direct the request at a specific server, e.g. at a
specific cluster node in a cluster of servers.
@@ -78,8 +78,8 @@ port, the HTTP proxy is automatically switched to tunnel mode for this
specific request. This is necessary because it is not possible to connect to a
specific host or port in normal (non-tunnel) mode.
-When this option is passed to \fIcurl_easy_setopt(3)\fP, libcurl will not copy
-the entire list so you \fBmust\fP keep it around until you no longer use this
+When this option is passed to \fIcurl_easy_setopt(3)\fP, libcurl does not copy
+the list so you \fBmust\fP keep it around until you no longer use this
\fIhandle\fP for a transfer before you call \fIcurl_slist_free_all(3)\fP on
the list.
@@ -89,26 +89,32 @@ NULL
All
.SH EXAMPLE
.nf
-CURL *curl;
-struct curl_slist *connect_to = NULL;
-connect_to = curl_slist_append(NULL, "example.com::server1.example.com:");
+int main(void)
+{
+ CURL *curl;
+ struct curl_slist *connect_to = NULL;
+ connect_to = curl_slist_append(NULL, "example.com::server1.example.com:");
-curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_CONNECT_TO, connect_to);
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_CONNECT_TO, connect_to);
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
- /* always cleanup */
- curl_easy_cleanup(curl);
-}
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
-curl_slist_free_all(connect_to);
+ curl_slist_free_all(connect_to);
+}
.fi
.SH AVAILABILITY
Added in 7.49.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_URL "(3), " CURLOPT_RESOLVE "(3), " CURLOPT_FOLLOWLOCATION "(3), " CURLOPT_HTTPPROXYTUNNEL "(3), "
+.BR CURLOPT_FOLLOWLOCATION (3),
+.BR CURLOPT_HTTPPROXYTUNNEL (3),
+.BR CURLOPT_RESOLVE (3),
+.BR CURLOPT_URL (3)
diff --git a/docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.3 b/docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.3
index 970877381..a1df2861d 100644
--- a/docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_CONV_FROM_NETWORK_FUNCTION 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_CONV_FROM_NETWORK_FUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_CONV_FROM_NETWORK_FUNCTION \- convert data from network to host encoding
@@ -38,7 +38,7 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONV_FROM_NETWORK_FUNCTION,
Pass a pointer to your callback function, which should match the prototype
shown above.
-Applies to non-ASCII platforms. \fIcurl_version_info(3)\fP will return the
+Applies to non-ASCII platforms. \fIcurl_version_info(3)\fP returns the
\fBCURL_VERSION_CONV\fP feature bit set if this option is provided.
The data to be converted is in a buffer pointed to by the \fIptr\fP parameter.
@@ -48,29 +48,28 @@ parameter. \fICURLE_OK\fP must be returned upon successful conversion. A
CURLcode return value defined by curl.h, such as \fICURLE_CONV_FAILED\fP,
should be returned if an error was encountered.
-\fBCURLOPT_CONV_FROM_NETWORK_FUNCTION\fP converts to host encoding from the
+\fICURLOPT_CONV_FROM_NETWORK_FUNCTION(3)\fP converts to host encoding from the
network encoding. It is used when commands or ASCII data are received over
the network.
If you set a callback pointer to NULL, or do not set it at all, the built-in
-libcurl iconv functions will be used. If HAVE_ICONV was not defined when
-libcurl was built, and no callback has been established, conversion will
-return the \fBCURLE_CONV_REQD\fP error code.
+libcurl iconv functions are used. If HAVE_ICONV was not defined when libcurl
+was built, and no callback has been established, the conversion returns the
+\fBCURLE_CONV_REQD\fP error code.
If \fBHAVE_ICONV\fP is defined, \fBCURL_ICONV_CODESET_OF_HOST\fP must also be
defined. For example:
\&#define CURL_ICONV_CODESET_OF_HOST "IBM-1047"
-The iconv code in libcurl will default the network and UTF8 codeset names as
+The iconv code in libcurl defaults the network and UTF8 codeset names as
follows:
\&#define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1"
\&#define CURL_ICONV_CODESET_FOR_UTF8 "UTF-8"
-You will need to override these definitions if they are different on your
-system.
+You need to override these definitions if they are different on your system.
.SH DEFAULT
NULL
.SH PROTOCOLS
@@ -79,12 +78,12 @@ FTP, SMTP, IMAP, POP3
.nf
static CURLcode my_conv_from_ascii_to_ebcdic(char *buffer, size_t length)
{
- char *tempptrin, *tempptrout;
- size_t bytes = length;
- int rc;
- tempptrin = tempptrout = buffer;
- rc = platform_a2e(&tempptrin, &bytes, &tempptrout, &bytes);
- if(rc == PLATFORM_CONV_OK) {
+ int rc = 0;
+
+ /* in-place convert 'buffer' from ASCII to EBCDIC */
+
+ if(rc == 0) {
+ /* success */
return CURLE_OK;
}
else {
@@ -92,16 +91,22 @@ static CURLcode my_conv_from_ascii_to_ebcdic(char *buffer, size_t length)
}
}
-/* use platform-specific functions for codeset conversions */
-curl_easy_setopt(curl, CURLOPT_CONV_FROM_NETWORK_FUNCTION,
- my_conv_from_ascii_to_ebcdic);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+
+ /* use platform-specific functions for codeset conversions */
+ curl_easy_setopt(curl, CURLOPT_CONV_FROM_NETWORK_FUNCTION,
+ my_conv_from_ascii_to_ebcdic);
+}
.fi
.SH AVAILABILITY
-Not available since 7.82.0
+Not available and deprecated since 7.82.0.
Available only if \fBCURL_DOES_CONVERSIONS\fP was defined when libcurl was
built.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_CONV_TO_NETWORK_FUNCTION "(3), " CURLOPT_CONV_FROM_UTF8_FUNCTION "(3), "
+.BR CURLOPT_CONV_FROM_UTF8_FUNCTION (3),
+.BR CURLOPT_CONV_TO_NETWORK_FUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.3 b/docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.3
index 74e78d5c1..ecc2546d9 100644
--- a/docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_CONV_FROM_UTF8_FUNCTION 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_CONV_FROM_UTF8_FUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_CONV_FROM_UTF8_FUNCTION \- convert data from UTF8 to host encoding
@@ -38,7 +38,7 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONV_FROM_UTF8_FUNCTION,
Pass a pointer to your callback function, which should match the prototype
shown above.
-Applies to non-ASCII platforms. \fIcurl_version_info(3)\fP will return the
+Applies to non-ASCII platforms. \fIcurl_version_info(3)\fP returns the
CURL_VERSION_CONV feature bit set if this option is provided.
The data to be converted is in a buffer pointed to by the \fIptr\fP parameter.
@@ -48,28 +48,27 @@ parameter. \fICURLE_OK\fP must be returned upon successful conversion. A
CURLcode return value defined by curl.h, such as \fICURLE_CONV_FAILED\fP,
should be returned if an error was encountered.
-\fBCURLOPT_CONV_FROM_UTF8_FUNCTION\fP converts to host encoding from UTF8
+\fICURLOPT_CONV_FROM_UTF8_FUNCTION(3)\fP converts to host encoding from UTF8
encoding. It is required only for SSL processing.
If you set a callback pointer to NULL, or do not set it at all, the built-in
-libcurl iconv functions will be used. If HAVE_ICONV was not defined when
-libcurl was built, and no callback has been established, conversion will
-return the CURLE_CONV_REQD error code.
+libcurl iconv functions are used. If HAVE_ICONV was not defined when libcurl
+was built, and no callback has been established, the conversion returns the
+CURLE_CONV_REQD error code.
If HAVE_ICONV is defined, CURL_ICONV_CODESET_OF_HOST must also be defined.
For example:
\&#define CURL_ICONV_CODESET_OF_HOST "IBM-1047"
-The iconv code in libcurl will default the network and UTF8 codeset names as
+The iconv code in libcurl defaults the network and UTF8 codeset names as
follows:
\&#define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1"
\&#define CURL_ICONV_CODESET_FOR_UTF8 "UTF-8"
-You will need to override these definitions if they are different on your
-system.
+You need to override these definitions if they are different on your system.
.SH DEFAULT
NULL
.SH PROTOCOLS
@@ -78,12 +77,10 @@ TLS-based protocols.
.nf
static CURLcode my_conv_from_utf8_to_ebcdic(char *buffer, size_t length)
{
- char *tempptrin, *tempptrout;
- size_t bytes = length;
- int rc;
- tempptrin = tempptrout = buffer;
- rc = platform_u2e(&tempptrin, &bytes, &tempptrout, &bytes);
- if(rc == PLATFORM_CONV_OK) {
+ int rc = 0;
+ /* in-place convert 'buffer' from UTF-8 to EBCDIC */
+ if(rc == 0) {
+ /* success */
return CURLE_OK;
}
else {
@@ -91,15 +88,20 @@ static CURLcode my_conv_from_utf8_to_ebcdic(char *buffer, size_t length)
}
}
-curl_easy_setopt(curl, CURLOPT_CONV_FROM_UTF8_FUNCTION,
- my_conv_from_utf8_to_ebcdic);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ curl_easy_setopt(curl, CURLOPT_CONV_FROM_UTF8_FUNCTION,
+ my_conv_from_utf8_to_ebcdic);
+}
.fi
.SH AVAILABILITY
-Not available since 7.82.0
+Not available and deprecated since 7.82.0.
Available only if \fBCURL_DOES_CONVERSIONS\fP was defined when libcurl was
built.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_CONV_TO_NETWORK_FUNCTION "(3), " CURLOPT_CONV_FROM_NETWORK_FUNCTION "(3), "
+.BR CURLOPT_CONV_FROM_NETWORK_FUNCTION (3),
+.BR CURLOPT_CONV_TO_NETWORK_FUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.3 b/docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.3
index d5b2d8edc..8d7bf9d64 100644
--- a/docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_CONV_TO_NETWORK_FUNCTION 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_CONV_TO_NETWORK_FUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_CONV_TO_NETWORK_FUNCTION \- convert data to network from host encoding
@@ -38,7 +38,7 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONV_TO_NETWORK_FUNCTION,
Pass a pointer to your callback function, which should match the prototype
shown above.
-Applies to non-ASCII platforms. \fIcurl_version_info(3)\fP will return the
+Applies to non-ASCII platforms. \fIcurl_version_info(3)\fP returns the
CURL_VERSION_CONV feature bit set if this option is provided.
The data to be converted is in a buffer pointed to by the \fIptr\fP parameter.
@@ -48,29 +48,28 @@ parameter. \fICURLE_OK\fP must be returned upon successful conversion. A
CURLcode return value defined by curl.h, such as \fICURLE_CONV_FAILED\fP,
should be returned if an error was encountered.
-\fBCURLOPT_CONV_TO_NETWORK_FUNCTION\fP converts from host encoding to the
-network encoding. It is used when commands or ASCII data are sent over the
+\fICURLOPT_CONV_TO_NETWORK_FUNCTION(3)\fP converts from host encoding to the
+network encoding. It is used when commands or ASCII data are sent over the
network.
If you set a callback pointer to NULL, or do not set it at all, the built-in
-libcurl iconv functions will be used. If HAVE_ICONV was not defined when
-libcurl was built, and no callback has been established, conversion will
-return the CURLE_CONV_REQD error code.
+libcurl iconv functions are used. If HAVE_ICONV was not defined when libcurl
+was built, and no callback has been established, the conversion returns the
+CURLE_CONV_REQD error code.
If HAVE_ICONV is defined, CURL_ICONV_CODESET_OF_HOST must also be defined.
For example:
\&#define CURL_ICONV_CODESET_OF_HOST "IBM-1047"
-The iconv code in libcurl will default the network and UTF8 codeset names as
+The iconv code in libcurl defaults the network and UTF8 codeset names as
follows:
\&#define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1"
\&#define CURL_ICONV_CODESET_FOR_UTF8 "UTF-8"
-You will need to override these definitions if they are different on your
-system.
+You need to override these definitions if they are different on your system.
.SH DEFAULT
NULL
.SH PROTOCOLS
@@ -79,12 +78,10 @@ FTP, SMTP, IMAP, POP3
.nf
static CURLcode my_conv_from_ebcdic_to_ascii(char *buffer, size_t length)
{
- char *tempptrin, *tempptrout;
- size_t bytes = length;
- int rc;
- tempptrin = tempptrout = buffer;
- rc = platform_e2a(&tempptrin, &bytes, &tempptrout, &bytes);
- if(rc == PLATFORM_CONV_OK) {
+ int rc = 0;
+ /* in-place convert 'buffer' from EBCDIC to ASCII */
+ if(rc == 0) {
+ /* success */
return CURLE_OK;
}
else {
@@ -92,15 +89,21 @@ static CURLcode my_conv_from_ebcdic_to_ascii(char *buffer, size_t length)
}
}
-curl_easy_setopt(curl, CURLOPT_CONV_TO_NETWORK_FUNCTION,
- my_conv_from_ebcdic_to_ascii);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+
+ curl_easy_setopt(curl, CURLOPT_CONV_TO_NETWORK_FUNCTION,
+ my_conv_from_ebcdic_to_ascii);
+}
.fi
.SH AVAILABILITY
-Not available since 7.82.0
+Not available and deprecated since 7.82.0.
Available only if \fBCURL_DOES_CONVERSIONS\fP was defined when libcurl was
built.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_CONV_FROM_NETWORK_FUNCTION "(3), " CURLOPT_CONV_FROM_UTF8_FUNCTION "(3), "
+.BR CURLOPT_CONV_FROM_NETWORK_FUNCTION (3),
+.BR CURLOPT_CONV_FROM_UTF8_FUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_COOKIE.3 b/docs/libcurl/opts/CURLOPT_COOKIE.3
index 6ec3c63a4..8e5573d9b 100644
--- a/docs/libcurl/opts/CURLOPT_COOKIE.3
+++ b/docs/libcurl/opts/CURLOPT_COOKIE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_COOKIE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_COOKIE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_COOKIE \- HTTP Cookie header
@@ -33,31 +33,31 @@ CURLOPT_COOKIE \- HTTP Cookie header
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIE, char *cookie);
.fi
.SH DESCRIPTION
-Pass a pointer to a null-terminated string as parameter. It will be used to
-set a cookie in the HTTP request. The format of the string should be
+Pass a pointer to a null-terminated string as parameter. It is used to set one
+or more cookies in the HTTP request. The format of the string should be
NAME=CONTENTS, where NAME is the cookie name and CONTENTS is what the cookie
should contain.
-If you need to set multiple cookies, set them all using a single option
-concatenated like this: "name1=content1; name2=content2;" etc.
+To set multiple cookies, set them all using a single option concatenated like
+this: "name1=content1; name2=content2;" etc.
This option sets the cookie header explicitly in the outgoing request(s). If
multiple requests are done due to authentication, followed redirections or
-similar, they will all get this cookie passed on.
+similar, they all get this cookie passed on.
The cookies set by this option are separate from the internal cookie storage
-held by the cookie engine and will not be modified by it. If you enable the
-cookie engine and either you have imported a cookie of the same name (e.g. 'foo')
-or the server has set one, it will have no effect on the cookies you set here.
-A request to the server will send both the 'foo' held by the cookie engine and
-the 'foo' held by this option. To set a cookie that is instead held by the
-cookie engine and can be modified by the server use
+held by the cookie engine and they are not be modified by it. If you enable
+the cookie engine and either you have imported a cookie of the same name
+(e.g. 'foo') or the server has set one, it has no effect on the cookies you
+set here. A request to the server sends both the 'foo' held by the cookie
+engine and the 'foo' held by this option. To set a cookie that is instead held
+by the cookie engine and can be modified by the server use
\fICURLOPT_COOKIELIST(3)\fP.
-Using this option multiple times will only make the latest string override the
+Using this option multiple times makes the last set string override the
previous ones.
-This option will not enable the cookie engine. Use \fICURLOPT_COOKIEFILE(3)\fP
+This option does not enable the cookie engine. Use \fICURLOPT_COOKIEFILE(3)\fP
or \fICURLOPT_COOKIEJAR(3)\fP to enable parsing and sending cookies
automatically.
@@ -69,13 +69,16 @@ NULL, no cookies
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_COOKIE, "tool=curl; fun=yes;");
+ curl_easy_setopt(curl, CURLOPT_COOKIE, "tool=curl; fun=yes;");
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -84,5 +87,8 @@ If HTTP is enabled
Returns CURLE_OK if HTTP is enabled, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_COOKIEFILE "(3), " CURLOPT_COOKIEJAR "(3), " CURLOPT_COOKIELIST "(3), "
-.BR CURLOPT_HTTPHEADER "(3), "
+.BR CURLINFO_COOKIELIST (3),
+.BR CURLOPT_COOKIEFILE (3),
+.BR CURLOPT_COOKIEJAR (3),
+.BR CURLOPT_COOKIELIST (3),
+.BR CURLOPT_HTTPHEADER (3)
diff --git a/docs/libcurl/opts/CURLOPT_COOKIEFILE.3 b/docs/libcurl/opts/CURLOPT_COOKIEFILE.3
index 412a8a810..18a13e3f0 100644
--- a/docs/libcurl/opts/CURLOPT_COOKIEFILE.3
+++ b/docs/libcurl/opts/CURLOPT_COOKIEFILE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_COOKIEFILE 3 "October 06, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_COOKIEFILE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_COOKIEFILE \- file name to read cookies from
@@ -43,28 +43,29 @@ subsequent requests with this handle.
By passing the empty string ("") to this option, you enable the cookie engine
without reading any initial cookies. If you tell libcurl the file name is "-"
-(just a single minus sign), libcurl will instead read from stdin.
+(just a single minus sign), libcurl instead reads from stdin.
This option only \fBreads\fP cookies. To make libcurl write cookies to file,
see \fICURLOPT_COOKIEJAR(3)\fP.
-If you use the Set-Cookie file format and do not specify a domain then the
-cookie is not sent since the domain will never match. To address this, set a
-domain in Set-Cookie line (doing that will include sub-domains) or preferably:
-use the Netscape format.
+If you read cookies from a plain HTTP headers file and it does not specify a
+domain in the Set-Cookie line, then the cookie is not sent since the cookie
+domain cannot match the target URL's. To address this, set a domain in
+Set-Cookie line (doing that includes subdomains) or preferably: use the
+Netscape format.
-If you use this option multiple times, you just add more files to read.
-Subsequent files will add more cookies.
+If you use this option multiple times, you add more files to read cookies
+from.
The application does not have to keep the string around after setting this
option.
-Setting this option to NULL will (since 7.77.0) explicitly disable the cookie
-engine and clear the list of files to read cookies from.
+Setting this option to NULL (since 7.77.0) explicitly disables the cookie
+engine and clears the list of files to read cookies from.
.SH SECURITY
This document previously mentioned how specifying a non-existing file can also
-enable the cookie engine. While true, we strongly advice against using that
-method as it is too hard to be sure what files will stay that way in the long
+enable the cookie engine. While true, we strongly advise against using that
+method as it is too hard to be sure that files that stay that way in the long
run.
.SH DEFAULT
NULL
@@ -72,16 +73,20 @@ NULL
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- /* get cookies from an existing file */
- curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookies.txt");
+ /* get cookies from an existing file */
+ curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookies.txt");
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH "Cookie file format"
@@ -92,4 +97,6 @@ As long as HTTP is supported
.SH RETURN VALUE
Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_COOKIE "(3), " CURLOPT_COOKIEJAR "(3), "
+.BR CURLOPT_COOKIE (3),
+.BR CURLOPT_COOKIEJAR (3),
+.BR CURLOPT_COOKIESESSION (3)
diff --git a/docs/libcurl/opts/CURLOPT_COOKIEJAR.3 b/docs/libcurl/opts/CURLOPT_COOKIEJAR.3
index eaa223093..01315fda8 100644
--- a/docs/libcurl/opts/CURLOPT_COOKIEJAR.3
+++ b/docs/libcurl/opts/CURLOPT_COOKIEJAR.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_COOKIEJAR 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_COOKIEJAR 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_COOKIEJAR \- file name to store cookies to
@@ -33,24 +33,25 @@ CURLOPT_COOKIEJAR \- file name to store cookies to
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIEJAR, char *filename);
.fi
.SH DESCRIPTION
-Pass a \fIfilename\fP as char *, null-terminated. This will make libcurl write
+Pass a \fIfilename\fP as a char *, null-terminated. This makes libcurl write
all internally known cookies to the specified file when
-\fIcurl_easy_cleanup(3)\fP is called. If no cookies are known, no file will be
-created. Specify "-" as filename to instead have the cookies written to
-stdout. Using this option also enables cookies for this session, so if you for
-example follow a location it will make matching cookies get sent accordingly.
+\fIcurl_easy_cleanup(3)\fP is called. If no cookies are kept in memory at that
+time, no file is created. Specify "-" as filename to instead have the cookies
+written to stdout. Using this option also enables cookies for this session, so
+if you for example follow a redirect it makes matching cookies get sent
+accordingly.
-Note that libcurl does not read any cookies from the cookie jar. If you want to
-read cookies from a file, use \fICURLOPT_COOKIEFILE(3)\fP.
+Note that libcurl does not read any cookies from the cookie jar specified with
+this option. To read cookies from a file, use \fICURLOPT_COOKIEFILE(3)\fP.
If the cookie jar file cannot be created or written to (when the
-\fIcurl_easy_cleanup(3)\fP is called), libcurl will not and cannot report an
+\fIcurl_easy_cleanup(3)\fP is called), libcurl does not and cannot report an
error for this. Using \fICURLOPT_VERBOSE(3)\fP or
-\fICURLOPT_DEBUGFUNCTION(3)\fP will get a warning to display, but that is the
-only visible feedback you get about this possibly lethal situation.
+\fICURLOPT_DEBUGFUNCTION(3)\fP displays a warning, but that is the only
+visible feedback you get about this possibly lethal situation.
-Since 7.43.0 cookies that were imported in the Set-Cookie format without a
-domain name are not exported by this option.
+Cookies are imported in the Set-Cookie format without a domain name are not
+exported by this option.
The application does not have to keep the string around after setting this
option.
@@ -60,17 +61,21 @@ NULL
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- /* export cookies to this file when closing the handle */
- curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "/tmp/cookies.txt");
+ /* export cookies to this file when closing the handle */
+ curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "/tmp/cookies.txt");
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- /* close the handle, write the cookies! */
- curl_easy_cleanup(curl);
+ /* close the handle, write the cookies! */
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -79,5 +84,6 @@ Along with HTTP
Returns CURLE_OK if HTTP is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_COOKIEFILE "(3), " CURLOPT_COOKIE "(3), "
-.BR CURLOPT_COOKIELIST "(3), "
+.BR CURLOPT_COOKIE (3),
+.BR CURLOPT_COOKIEFILE (3),
+.BR CURLOPT_COOKIELIST (3)
diff --git a/docs/libcurl/opts/CURLOPT_COOKIELIST.3 b/docs/libcurl/opts/CURLOPT_COOKIELIST.3
index e162170c8..131be9301 100644
--- a/docs/libcurl/opts/CURLOPT_COOKIELIST.3
+++ b/docs/libcurl/opts/CURLOPT_COOKIELIST.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_COOKIELIST 3 "October 04, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_COOKIELIST 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_COOKIELIST \- add to or manipulate cookies held in memory
@@ -36,17 +36,20 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIELIST,
Pass a char * to a \fIcookie\fP string.
Such a cookie can be either a single line in Netscape / Mozilla format or just
-regular HTTP-style header (Set-Cookie: ...) format. This will also enable the
-cookie engine. This adds that single cookie to the internal cookie store.
-
-Exercise caution if you are using this option and multiple transfers may occur.
-If you use the Set-Cookie format and do not specify a domain then the cookie is
-sent for any domain (even after redirects are followed) and cannot be modified
-by a server-set cookie. If a server sets a cookie of the same name (or maybe
-you have imported one) then both will be sent on a future transfer to that
-server, likely not what you intended. To address these issues set a domain in
-Set-Cookie (doing that will include sub-domains) or use the Netscape format as
-shown in EXAMPLE.
+regular HTTP-style header (Set-Cookie: ...) format. This option also enables
+the cookie engine. This adds that single cookie to the internal cookie store.
+
+We strongly advice against loading cookies from a HTTP header file, as that is
+an inferior data exchange format.
+
+Exercise caution if you are using this option and multiple transfers may
+occur. If you use the Set-Cookie format and the string does not specify a
+domain, then the cookie is sent for any domain (even after redirects are
+followed) and cannot be modified by a server-set cookie. If a server sets a
+cookie of the same name (or maybe you have imported one) then both are sent on
+future transfers to that server, likely not what you intended. To address
+these issues set a domain in Set-Cookie (doing that includes subdomains) or
+much better: use the Netscape file format.
Additionally, there are commands available that perform actions if you pass in
these exact strings:
@@ -68,44 +71,45 @@ NULL
HTTP
.SH EXAMPLE
.nf
-/* This example shows an inline import of a cookie in Netscape format.
-You can set the cookie as HttpOnly to prevent XSS attacks by prepending
-#HttpOnly_ to the hostname. That may be useful if the cookie will later
-be imported by a browser.
-*/
+/* an inline import of a cookie in Netscape format. */
#define SEP "\\t" /* Tab separates the fields */
-char *my_cookie =
- "example.com" /* Hostname */
- SEP "FALSE" /* Include subdomains */
- SEP "/" /* Path */
- SEP "FALSE" /* Secure */
- SEP "0" /* Expiry in epoch time format. 0 == Session */
- SEP "foo" /* Name */
- SEP "bar"; /* Value */
-
-/* my_cookie is imported immediately via CURLOPT_COOKIELIST.
-*/
-curl_easy_setopt(curl, CURLOPT_COOKIELIST, my_cookie);
-
-/* The list of cookies in cookies.txt will not be imported until right
-before a transfer is performed. Cookies in the list that have the same
-hostname, path and name as in my_cookie are skipped. That is because
-libcurl has already imported my_cookie and it's considered a "live"
-cookie. A live cookie will not be replaced by one read from a file.
-*/
-curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookies.txt"); /* import */
-
-/* Cookies are exported after curl_easy_cleanup is called. The server
-may have added, deleted or modified cookies by then. The cookies that
-were skipped on import are not exported.
-*/
-curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookies.txt"); /* export */
-
-curl_easy_perform(curl); /* cookies imported from cookies.txt */
-
-curl_easy_cleanup(curl); /* cookies exported to cookies.txt */
+int main(void)
+{
+ char *my_cookie =
+ "example.com" /* Hostname */
+ SEP "FALSE" /* Include subdomains */
+ SEP "/" /* Path */
+ SEP "FALSE" /* Secure */
+ SEP "0" /* Expiry in epoch time format. 0 == Session */
+ SEP "foo" /* Name */
+ SEP "bar"; /* Value */
+
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ /* my_cookie is imported immediately via CURLOPT_COOKIELIST. */
+ curl_easy_setopt(curl, CURLOPT_COOKIELIST, my_cookie);
+
+ /* The list of cookies in cookies.txt are not be imported until right
+ before a transfer is performed. Cookies in the list that have the same
+ hostname, path and name as in my_cookie are skipped. That is because
+ libcurl has already imported my_cookie and it's considered a "live"
+ cookie. A live cookie is not replaced by one read from a file.
+ */
+ curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookies.txt"); /* import */
+
+ /* Cookies are exported after curl_easy_cleanup is called. The server
+ may have added, deleted or modified cookies by then. The cookies that
+ were skipped on import are not exported.
+ */
+ curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookies.txt"); /* export */
+
+ curl_easy_perform(curl); /* cookies imported from cookies.txt */
+
+ curl_easy_cleanup(curl); /* cookies exported to cookies.txt */
+ }
+}
.fi
.SH "Cookie file format"
The cookie file format and general cookie concepts in curl are described
@@ -122,5 +126,7 @@ online here: https://curl.se/docs/http-cookies.html
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_COOKIEFILE "(3), " CURLOPT_COOKIEJAR "(3), " CURLOPT_COOKIE "(3), "
-.BR CURLINFO_COOKIELIST "(3), "
+.BR CURLINFO_COOKIELIST (3),
+.BR CURLOPT_COOKIE (3),
+.BR CURLOPT_COOKIEFILE (3),
+.BR CURLOPT_COOKIEJAR (3)
diff --git a/docs/libcurl/opts/CURLOPT_COOKIESESSION.3 b/docs/libcurl/opts/CURLOPT_COOKIESESSION.3
index bb2a2f09c..766a79484 100644
--- a/docs/libcurl/opts/CURLOPT_COOKIESESSION.3
+++ b/docs/libcurl/opts/CURLOPT_COOKIESESSION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_COOKIESESSION 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_COOKIESESSION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_COOKIESESSION \- start a new cookie session
@@ -33,34 +33,39 @@ CURLOPT_COOKIESESSION \- start a new cookie session
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIESESSION, long init);
.fi
.SH DESCRIPTION
-Pass a long set to 1 to mark this as a new cookie "session". It will force
-libcurl to ignore all cookies it is about to load that are "session cookies"
-from the previous session. By default, libcurl always stores and loads all
-cookies, independent if they are session cookies or not. Session cookies are
-cookies without expiry date and they are meant to be alive and existing for
-this "session" only.
+Pass a long set to 1 to mark this as a new cookie "session". It forces libcurl
+to ignore all cookies it is about to load that are "session cookies" from the
+previous session. By default, libcurl always loads all cookies, independent if
+they are session cookies or not. Session cookies are cookies without expiry
+date and they are meant to be alive and existing for this "session" only.
A "session" is usually defined in browser land for as long as you have your
-browser up, more or less.
+browser up, more or less. libcurl needs the application to use this option to
+tell it when a new session starts, otherwise it assumes everything is still in
+the same session.
.SH DEFAULT
0
.SH PROTOCOLS
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- /* new "session", do not load session cookies */
- curl_easy_setopt(curl, CURLOPT_COOKIESESSION, 1L);
+ /* new "session", do not load session cookies */
+ curl_easy_setopt(curl, CURLOPT_COOKIESESSION, 1L);
- /* get the (non session) cookies from this file */
- curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookies.txt");
+ /* get the (non session) cookies from this file */
+ curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookies.txt");
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -68,4 +73,6 @@ Along with HTTP
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_COOKIEFILE "(3), " CURLOPT_COOKIE "(3), "
+.BR CURLOPT_COOKIE (3),
+.BR CURLOPT_COOKIEFILE (3),
+.BR CURLOPT_COOKIEJAR (3)
diff --git a/docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.3 b/docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.3
index 473591b63..a31694ca8 100644
--- a/docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.3
+++ b/docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_COPYPOSTFIELDS 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_COPYPOSTFIELDS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_COPYPOSTFIELDS \- have libcurl copy data to POST
@@ -52,18 +52,21 @@ NULL
HTTP(S)
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- char local_buffer[1024]="data to send";
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ char local_buffer[1024]="data to send";
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* size of the data to copy from the buffer and send in the request */
- curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 12L);
+ /* size of the data to copy from the buffer and send in the request */
+ curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 12L);
- /* send data from the local stack */
- curl_easy_setopt(curl, CURLOPT_COPYPOSTFIELDS, local_buffer);
+ /* send data from the local stack */
+ curl_easy_setopt(curl, CURLOPT_COPYPOSTFIELDS, local_buffer);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -72,4 +75,7 @@ Added in 7.17.1
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_POSTFIELDS "(3), " CURLOPT_POSTFIELDSIZE "(3), "
+.BR CURLOPT_MIMEPOST (3),
+.BR CURLOPT_POSTFIELDS (3),
+.BR CURLOPT_POSTFIELDSIZE (3),
+.BR CURLOPT_UPLOAD (3)
diff --git a/docs/libcurl/opts/CURLOPT_CRLF.3 b/docs/libcurl/opts/CURLOPT_CRLF.3
index a1b921f08..499744fb9 100644
--- a/docs/libcurl/opts/CURLOPT_CRLF.3
+++ b/docs/libcurl/opts/CURLOPT_CRLF.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_CRLF 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_CRLF 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_CRLF \- CRLF conversion
@@ -44,13 +44,16 @@ This is a legacy option of questionable use.
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/");
- curl_easy_setopt(curl, CURLOPT_CRLF, 1L);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/");
+ curl_easy_setopt(curl, CURLOPT_CRLF, 1L);
+ ret = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -58,4 +61,5 @@ SMTP since 7.40.0, other protocols since they were introduced
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_CONV_FROM_NETWORK_FUNCTION "(3), " CURLOPT_CONV_TO_NETWORK_FUNCTION "(3), "
+.BR CURLOPT_CONV_FROM_NETWORK_FUNCTION (3),
+.BR CURLOPT_CONV_TO_NETWORK_FUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_CRLFILE.3 b/docs/libcurl/opts/CURLOPT_CRLFILE.3
index a986e86d9..4457601b3 100644
--- a/docs/libcurl/opts/CURLOPT_CRLFILE.3
+++ b/docs/libcurl/opts/CURLOPT_CRLFILE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_CRLFILE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_CRLFILE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_CRLFILE \- Certificate Revocation List file
@@ -37,13 +37,13 @@ Pass a char * to a null-terminated string naming a \fIfile\fP with the
concatenation of CRL (in PEM format) to use in the certificate validation that
occurs during the SSL exchange.
-When curl is built to use NSS or GnuTLS, there is no way to influence the use
-of CRL passed to help in the verification process.
+When curl is built to use GnuTLS, there is no way to influence the use of CRL
+passed to help in the verification process.
When libcurl is built with OpenSSL support, X509_V_FLAG_CRL_CHECK and
X509_V_FLAG_CRL_CHECK_ALL are both set, requiring CRL check against all the
elements of the certificate chain if a CRL file is passed. Also note that
-\fICURLOPT_CRLFILE(3)\fP will imply \fBCURLSSLOPT_NO_PARTIALCHAIN\fP (see
+\fICURLOPT_CRLFILE(3)\fP implies \fBCURLSSLOPT_NO_PARTIALCHAIN\fP (see
\fICURLOPT_SSL_OPTIONS(3)\fP) since curl 7.71.0 due to an OpenSSL bug.
This option makes sense only when used in combination with the
@@ -62,12 +62,16 @@ NULL
All TLS-based protocols
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_CRLFILE, "/etc/certs/crl.pem");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_CRLFILE, "/etc/certs/crl.pem");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -76,5 +80,6 @@ Added in 7.19.0
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_SSL_VERIFYPEER "(3), " CURLOPT_SSL_VERIFYHOST "(3), "
-.BR CURLOPT_PROXY_CRLFILE "(3), "
+.BR CURLOPT_PROXY_CRLFILE (3),
+.BR CURLOPT_SSL_VERIFYHOST (3),
+.BR CURLOPT_SSL_VERIFYPEER (3)
diff --git a/docs/libcurl/opts/CURLOPT_CURLU.3 b/docs/libcurl/opts/CURLOPT_CURLU.3
index fc8a9cd21..de69c6ab1 100644
--- a/docs/libcurl/opts/CURLOPT_CURLU.3
+++ b/docs/libcurl/opts/CURLOPT_CURLU.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_CURLU 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_CURLU 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_CURLU \- URL in URL handle format
@@ -30,39 +30,42 @@ CURLOPT_CURLU \- URL in URL handle format
.nf
#include <curl/curl.h>
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CURLU, void *pointer);
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CURLU, CURLU *pointer);
.fi
.SH DESCRIPTION
-Pass in a pointer to the \fIURL\fP to work with. The parameter should be a
-\fICURLU *\fP. Setting \fICURLOPT_CURLU(3)\fP will explicitly override
+Pass in a pointer to the \fIURL\fP handle to work with. The parameter should
+be a \fICURLU *\fP. Setting \fICURLOPT_CURLU(3)\fP explicitly overrides
\fICURLOPT_URL(3)\fP.
\fICURLOPT_URL(3)\fP or \fICURLOPT_CURLU(3)\fP \fBmust\fP be set before a
transfer is started.
-libcurl will use this handle and its contents read-only and will not change
-its contents. An application can update the contents of the URL handle after a
-transfer is done and if the same handle is then used in a subsequent request
-the updated contents will then be used.
+libcurl uses this handle and its contents read-only and does not change its
+contents. An application can update the contents of the URL handle after a
+transfer is done and if the same handle is used in a subsequent request the
+updated contents is used.
.SH DEFAULT
The default value of this parameter is NULL.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
-CURL *handle = curl_easy_init();
-CURLU *urlp = curl_url();
-int res = 0;
-if(curl) {
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ CURLU *urlp = curl_url();
+ if(curl) {
+ CURLcode res;
+ CURLUcode ret;
+ ret = curl_url_set(urlp, CURLUPART_URL, "https://example.com", 0);
- res = curl_url_set(urlp, CURLUPART_URL, "https://example.com", 0);
+ curl_easy_setopt(curl, CURLOPT_CURLU, urlp);
- curl_easy_setopt(handle, CURLOPT_CURLU, urlp);
+ res = curl_easy_perform(curl);
- ret = curl_easy_perform(handle);
-
- curl_url_cleanup(urlp);
- curl_easy_cleanup(handle);
+ curl_url_cleanup(urlp);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -70,6 +73,10 @@ Added in 7.63.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_URL "(3), "
-.BR curl_url "(3), " curl_url_get "(3), " curl_url_set "(3), "
-.BR curl_url_dup "(3), " curl_url_cleanup "(3), " curl_url_strerror "(3)"
+.BR curl_url (3),
+.BR curl_url_cleanup (3),
+.BR curl_url_dup (3),
+.BR curl_url_get (3),
+.BR curl_url_set (3),
+.BR curl_url_strerror (3),
+.BR CURLOPT_URL (3)
diff --git a/docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.3 b/docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.3
index 2bc320411..7d142fa17 100644
--- a/docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.3
+++ b/docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_CUSTOMREQUEST 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_CUSTOMREQUEST 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_CUSTOMREQUEST \- custom request method
@@ -30,15 +30,18 @@ CURLOPT_CUSTOMREQUEST \- custom request method
.nf
#include <curl/curl.h>
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CUSTOMREQUEST, char *request);
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CUSTOMREQUEST, char *method);
.fi
.SH DESCRIPTION
Pass a pointer to a null-terminated string as parameter.
-When you change the request method by setting \fICURLOPT_CUSTOMREQUEST(3)\fP
-to something, you do not actually change how libcurl behaves or acts in regards
-to the particular request method, it will only change the actual string sent
-in the request.
+When you change the request \fImethod\fP by setting
+\fICURLOPT_CUSTOMREQUEST(3)\fP to something, you do not actually change how
+libcurl behaves or acts in regards to the particular request method, it only
+changes the actual string sent in the request.
+
+libcurl passes on the verbatim string in its request without any filter or
+other safe guards. That includes white space and control characters.
Restore to the internal default by setting this to NULL.
@@ -50,14 +53,14 @@ particularly useful, for example, for performing an HTTP DELETE request.
For example:
When you tell libcurl to do a HEAD request, but then specify a GET though a
-custom request libcurl will still act as if it sent a HEAD. To switch to a
-proper HEAD use \fICURLOPT_NOBODY(3)\fP, to switch to a proper POST use
+custom request libcurl still acts as if it sent a HEAD. To switch to a proper
+HEAD use \fICURLOPT_NOBODY(3)\fP, to switch to a proper POST use
\fICURLOPT_POST(3)\fP or \fICURLOPT_POSTFIELDS(3)\fP and to switch to a proper
GET use \fICURLOPT_HTTPGET(3)\fP.
Many people have wrongly used this option to replace the entire request with
their own, including multiple headers and POST contents. While that might work
-in many cases, it will cause libcurl to send invalid requests and it could
+in many cases, it might cause libcurl to send invalid requests and it could
possibly confuse the remote server badly. Use \fICURLOPT_POST(3)\fP and
\fICURLOPT_POSTFIELDS(3)\fP to set POST data. Use \fICURLOPT_HTTPHEADER(3)\fP
to replace or extend the set of headers sent by libcurl. Use
@@ -72,9 +75,9 @@ Instead of LIST and RETR when issuing POP3 based requests.
For example:
-When you tell libcurl to use a custom request it will behave like a LIST or
-RETR command was sent where it expects data to be returned by the server. As
-such \fICURLOPT_NOBODY(3)\fP should be used when specifying commands such as
+When you tell libcurl to use a custom request it behaves like a LIST or RETR
+command was sent where it expects data to be returned by the server. As such
+\fICURLOPT_NOBODY(3)\fP should be used when specifying commands such as
\fBDELE\fP and \fBNOOP\fP for example.
.IP SMTP
Instead of a \fBHELP\fP or \fBVRFY\fP when issuing SMTP based requests.
@@ -94,16 +97,20 @@ NULL
HTTP, FTP, IMAP, POP3 and SMTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- /* DELETE the given path */
- curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
+ /* DELETE the given path */
+ curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -112,5 +119,7 @@ IMAP is supported since 7.30.0, POP3 since 7.26.0 and SMTP since 7.34.0.
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_HTTPHEADER "(3), " CURLOPT_NOBODY "(3), "
-.BR CURLOPT_REQUEST_TARGET "(3), "
+.BR CURLINFO_EFFECTIVE_METHOD (3),
+.BR CURLOPT_HTTPHEADER (3),
+.BR CURLOPT_NOBODY (3),
+.BR CURLOPT_REQUEST_TARGET (3)
diff --git a/docs/libcurl/opts/CURLOPT_DEBUGDATA.3 b/docs/libcurl/opts/CURLOPT_DEBUGDATA.3
index 895f240bd..f0c3f26d7 100644
--- a/docs/libcurl/opts/CURLOPT_DEBUGDATA.3
+++ b/docs/libcurl/opts/CURLOPT_DEBUGDATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_DEBUGDATA 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_DEBUGDATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_DEBUGDATA \- pointer passed to the debug callback
@@ -42,6 +42,20 @@ NULL
All
.SH EXAMPLE
.nf
+struct data {
+ void *custom;
+};
+
+static int my_trace(CURL *handle, curl_infotype type,
+ char *data, size_t size,
+ void *clientp)
+{
+ struct data *mine = clientp;
+ printf("our ptr: %p\\n", mine->custom);
+
+ /* output debug info */
+}
+
int main(void)
{
CURL *curl;
@@ -71,4 +85,5 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_STDERR "(3), " CURLOPT_DEBUGFUNCTION "(3), "
+.BR CURLOPT_DEBUGFUNCTION (3),
+.BR CURLOPT_STDERR (3)
diff --git a/docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.3 b/docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.3
index 6ed52cf1d..57604b8f1 100644
--- a/docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_DEBUGFUNCTION 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_DEBUGFUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_DEBUGFUNCTION \- debug callback
@@ -45,7 +45,7 @@ int debug_callback(CURL *handle,
curl_infotype type,
char *data,
size_t size,
- void *userptr);
+ void *clientp);
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DEBUGFUNCTION,
debug_callback);
@@ -56,13 +56,14 @@ shown above.
\fICURLOPT_DEBUGFUNCTION(3)\fP replaces the standard debug function used when
\fICURLOPT_VERBOSE(3)\fP is in effect. This callback receives debug
information, as specified in the \fItype\fP argument. This function must
-return 0. The \fIdata\fP pointed to by the char * passed to this function WILL
-NOT be null-terminated, but will be exactly of the \fIsize\fP as told by the
+return 0. The \fIdata\fP pointed to by the char * passed to this function is
+not null-terminated, but is exactly of the \fIsize\fP as told by the
\fIsize\fP argument.
-The \fIuserptr\fP argument is the pointer set with \fICURLOPT_DEBUGDATA(3)\fP.
+The \fIclientp\fP argument is the pointer set with \fICURLOPT_DEBUGDATA(3)\fP.
Available \fBcurl_infotype\fP values:
+.RS
.IP CURLINFO_TEXT
The data is informational text.
.IP CURLINFO_HEADER_IN
@@ -70,13 +71,23 @@ The data is header (or header-like) data received from the peer.
.IP CURLINFO_HEADER_OUT
The data is header (or header-like) data sent to the peer.
.IP CURLINFO_DATA_IN
-The data is protocol data received from the peer.
+The data is the unprocessed protocol data received from the peer. Even if the
+data is encoded or compressed, it is not not provided decoded nor decompressed
+to this callback. If you need the data in decoded and decompressed form, use
+\fICURLOPT_WRITEFUNCTION(3)\fP.
.IP CURLINFO_DATA_OUT
The data is protocol data sent to the peer.
.IP CURLINFO_SSL_DATA_OUT
The data is SSL/TLS (binary) data sent to the peer.
.IP CURLINFO_SSL_DATA_IN
The data is SSL/TLS (binary) data received from the peer.
+.RE
+
+WARNING: This callback may be called with the curl \fIhandle\fP set to an
+internal handle. (Added in 8.4.0)
+
+If you need to distinguish your curl \fIhandle\fP from internal handles then
+set \fICURLOPT_PRIVATE(3)\fP on your handle.
.SH DEFAULT
NULL
.SH PROTOCOLS
@@ -89,25 +100,25 @@ void dump(const char *text,
{
size_t i;
size_t c;
- unsigned int width=0x10;
+ unsigned int width = 0x10;
fprintf(stream, "%s, %10.10ld bytes (0x%8.8lx)\\n",
text, (long)size, (long)size);
- for(i=0; i<size; i+= width) {
+ for(i = 0; i < size; i += width) {
fprintf(stream, "%4.4lx: ", (long)i);
/* show hex to the left */
for(c = 0; c < width; c++) {
- if(i+c < size)
- fprintf(stream, "%02x ", ptr[i+c]);
+ if(i + c < size)
+ fprintf(stream, "%02x ", ptr[i + c]);
else
fputs(" ", stream);
}
/* show data on the right */
- for(c = 0; (c < width) && (i+c < size); c++) {
- char x = (ptr[i+c] >= 0x20 && ptr[i+c] < 0x80) ? ptr[i+c] : '.';
+ for(c = 0; (c < width) && (i + c < size); c++) {
+ char x = (ptr[i + c] >= 0x20 && ptr[i + c] < 0x80) ? ptr[i + c] : '.';
fputc(x, stream);
}
@@ -118,15 +129,16 @@ void dump(const char *text,
static
int my_trace(CURL *handle, curl_infotype type,
char *data, size_t size,
- void *userp)
+ void *clientp)
{
const char *text;
(void)handle; /* prevent compiler warning */
- (void)userp;
+ (void)clientp;
- switch (type) {
+ switch(type) {
case CURLINFO_TEXT:
- fprintf(stderr, "== Info: %s", data);
+ fputs("== Info: ", stderr);
+ fwrite(data, size, 1, stderr);
default: /* in case a new one is introduced to shock us */
return 0;
@@ -187,4 +199,8 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_VERBOSE "(3), " CURLOPT_DEBUGDATA "(3), "
+.BR curl_global_trace (3),
+.BR CURLINFO_CONN_ID (3),
+.BR CURLINFO_XFER_ID (3),
+.BR CURLOPT_DEBUGDATA (3),
+.BR CURLOPT_VERBOSE (3)
diff --git a/docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.3 b/docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.3
index 5027a0192..2ba86375a 100644
--- a/docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.3
+++ b/docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_DEFAULT_PROTOCOL 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_DEFAULT_PROTOCOL 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_DEFAULT_PROTOCOL \- default protocol to use if the URL is missing a
@@ -46,7 +46,7 @@ pop3s, rtsp, scp, sftp, smb, smbs, smtp, smtps, telnet, tftp
An unknown or unsupported protocol causes error
\fICURLE_UNSUPPORTED_PROTOCOL\fP when libcurl parses a URL without a
scheme. Parsing happens when \fIcurl_easy_perform(3)\fP or
-\fIcurl_multi_perform(3)\fP is called. The protocols supported by libcurl will
+\fIcurl_multi_perform(3)\fP is called. The protocol set supported by libcurl
vary depending on how it was built. Use \fIcurl_version_info(3)\fP if you need
a list of protocol names supported by the build of libcurl that you are using.
@@ -63,16 +63,19 @@ NULL (make a guess based on the host)
All
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- /* set a URL without a scheme */
- curl_easy_setopt(curl, CURLOPT_URL, "example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ /* set a URL without a scheme */
+ curl_easy_setopt(curl, CURLOPT_URL, "example.com");
- /* set the default protocol (scheme) for schemeless URLs */
- curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
+ /* set the default protocol (scheme) for schemeless URLs */
+ curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -84,4 +87,6 @@ CURLE_OUT_OF_MEMORY if there was insufficient heap space.
CURLE_UNKNOWN_OPTION if the option is not supported.
.SH "SEE ALSO"
-.BR CURLOPT_URL "(3), "
+.BR CURLINFO_PROTOCOL (3),
+.BR CURLINFO_SCHEME (3),
+.BR CURLOPT_URL (3)
diff --git a/docs/libcurl/opts/CURLOPT_DIRLISTONLY.3 b/docs/libcurl/opts/CURLOPT_DIRLISTONLY.3
index 55355fc07..93f1c49a7 100644
--- a/docs/libcurl/opts/CURLOPT_DIRLISTONLY.3
+++ b/docs/libcurl/opts/CURLOPT_DIRLISTONLY.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_DIRLISTONLY 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_DIRLISTONLY 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_DIRLISTONLY \- ask for names only in a directory listing
@@ -49,24 +49,28 @@ include subdirectories and symbolic links.
Setting this option to 1 also implies a directory listing even if the URL
does not end with a slash, which otherwise is necessary.
-Do NOT use this option if you also use \fICURLOPT_WILDCARDMATCH(3)\fP as it
-will effectively break that feature then.
+Do not use this option if you also use \fICURLOPT_WILDCARDMATCH(3)\fP as it
+effectively breaks that feature.
.SH DEFAULT
0, disabled
.SH PROTOCOLS
FTP, SFTP and POP3
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/dir/");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/dir/");
- /* list only */
- curl_easy_setopt(curl, CURLOPT_DIRLISTONLY, 1L);
+ /* list only */
+ curl_easy_setopt(curl, CURLOPT_DIRLISTONLY, 1L);
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -75,4 +79,5 @@ since 7.21.5.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_CUSTOMREQUEST "(3), "
+.BR CURLOPT_CUSTOMREQUEST (3),
+.BR CURLOPT_WILDCARDMATCH (3)
diff --git a/docs/libcurl/opts/CURLOPT_DISALLOW_USERNAME_IN_URL.3 b/docs/libcurl/opts/CURLOPT_DISALLOW_USERNAME_IN_URL.3
index a0e8453e9..a3951d23a 100644
--- a/docs/libcurl/opts/CURLOPT_DISALLOW_USERNAME_IN_URL.3
+++ b/docs/libcurl/opts/CURLOPT_DISALLOW_USERNAME_IN_URL.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_DISALLOW_USERNAME_IN_URL 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_DISALLOW_USERNAME_IN_URL 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_DISALLOW_USERNAME_IN_URL \- disallow specifying username in the URL
@@ -36,19 +36,25 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DISALLOW_USERNAME_IN_URL,
.SH DESCRIPTION
A long parameter set to 1 tells the library to not allow URLs that include a
username.
+
+This is the equivalent to the \fICURLU_DISALLOW_USER\fP flag for the
+\fIcurl_url_set(3)\fP function.
.SH DEFAULT
0 (disabled) - user names are allowed by default.
.SH PROTOCOLS
Several
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_DISALLOW_USERNAME_IN_URL, 1L);
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_setopt(curl, CURLOPT_DISALLOW_USERNAME_IN_URL, 1L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -56,7 +62,10 @@ Added in 7.61.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
-curl_easy_perform() will return CURLE_LOGIN_DENIED if this option is enabled
-and a URL containing a username is specified.
+\fIcurl_easy_perform(3)\fP returns CURLE_LOGIN_DENIED if this option is
+enabled and a URL containing a username is specified.
.SH "SEE ALSO"
-.BR libcurl-security "(3), ", CURLOPT_PROTOCOLS "(3)"
+.BR curl_url_set (3),
+.BR CURLOPT_PROTOCOLS (3),
+.BR CURLOPT_URL (3),
+.BR libcurl-security (3)
diff --git a/docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.3 b/docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.3
index ecc909830..7ddbaefe1 100644
--- a/docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.3
+++ b/docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_DNS_CACHE_TIMEOUT 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_DNS_CACHE_TIMEOUT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_DNS_CACHE_TIMEOUT \- life-time for DNS cache entries
@@ -33,10 +33,15 @@ CURLOPT_DNS_CACHE_TIMEOUT \- life-time for DNS cache entries
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_CACHE_TIMEOUT, long age);
.fi
.SH DESCRIPTION
-Pass a long, this sets the timeout in seconds. Name resolves will be kept in
-memory and used for this number of seconds. Set to zero to completely disable
-caching, or set to -1 to make the cached entries remain forever. By default,
-libcurl caches this info for 60 seconds.
+Pass a long, this sets the timeout in seconds. Name resolve results are kept
+in memory and used for this number of seconds. Set to zero to completely
+disable caching, or set to -1 to make the cached entries remain forever. By
+default, libcurl caches this info for 60 seconds.
+
+We recommend users not to tamper with this option unless strictly necessary.
+If you do, be careful of using large values that can make the cache size grow
+significantly if many different host names are used within that timeout
+period.
The name resolve functions of various libc implementations do not re-read name
server information unless explicitly told so (for example, by calling
@@ -44,29 +49,36 @@ server information unless explicitly told so (for example, by calling
if DHCP has updated the server info, and this may look like a DNS cache issue
to the casual libcurl-app user.
-Note that DNS entries have a "TTL" property but libcurl does not use that. This
-DNS cache timeout is entirely speculative that a name will resolve to the same
-address for a certain small amount of time into the future.
+DNS entries have a "TTL" property but libcurl does not use that. This DNS
+cache timeout is entirely speculative that a name resolves to the same address
+for a small amount of time into the future.
+
+Since version 8.1.0, libcurl prunes entries from the DNS cache if it exceeds
+30,000 entries no matter which timeout value is used.
.SH DEFAULT
60
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- /* only reuse addresses for a short time */
- curl_easy_setopt(curl, CURLOPT_DNS_CACHE_TIMEOUT, 2L);
+ /* only reuse addresses for a short time */
+ curl_easy_setopt(curl, CURLOPT_DNS_CACHE_TIMEOUT, 2L);
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- /* in this second request, the cache will not be used if more than
- two seconds have passed since the previous name resolve */
- ret = curl_easy_perform(curl);
+ /* in this second request, the cache is not be used if more than
+ two seconds have passed since the previous name resolve */
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -74,5 +86,8 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_DNS_USE_GLOBAL_CACHE "(3), " CURLOPT_DNS_SERVERS "(3), "
-.BR CURLOPT_RESOLVE "(3), "
+.BR CURLOPT_CONNECTTIMEOUT_MS (3),
+.BR CURLOPT_DNS_SERVERS (3),
+.BR CURLOPT_DNS_USE_GLOBAL_CACHE (3),
+.BR CURLOPT_MAXAGE_CONN (3),
+.BR CURLOPT_RESOLVE (3)
diff --git a/docs/libcurl/opts/CURLOPT_DNS_INTERFACE.3 b/docs/libcurl/opts/CURLOPT_DNS_INTERFACE.3
index 96a81e69c..fbbf7a18c 100644
--- a/docs/libcurl/opts/CURLOPT_DNS_INTERFACE.3
+++ b/docs/libcurl/opts/CURLOPT_DNS_INTERFACE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_DNS_INTERFACE 3 "September 05, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_DNS_INTERFACE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_DNS_INTERFACE \- interface to speak DNS over
@@ -46,12 +46,16 @@ NULL
All protocols except file:// - protocols that resolve host names.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- curl_easy_setopt(curl, CURLOPT_DNS_INTERFACE, "eth0");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+ curl_easy_setopt(curl, CURLOPT_DNS_INTERFACE, "eth0");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -62,4 +66,7 @@ such one.
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not,
or CURLE_NOT_BUILT_IN if support was disabled at compile-time.
.SH "SEE ALSO"
-.BR CURLOPT_DNS_SERVERS "(3), " CURLOPT_DNS_LOCAL_IP4 "(3), "
+.BR CURLOPT_DNS_LOCAL_IP4 (3),
+.BR CURLOPT_DNS_LOCAL_IP6 (3),
+.BR CURLOPT_DNS_SERVERS (3),
+.BR CURLOPT_INTERFACE (3)
diff --git a/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.3 b/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.3
index 3180c8e05..99afbdd7c 100644
--- a/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.3
+++ b/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_DNS_LOCAL_IP4 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_DNS_LOCAL_IP4 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_DNS_LOCAL_IP4 \- IPv4 address to bind DNS resolves to
@@ -46,12 +46,16 @@ NULL
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- curl_easy_setopt(curl, CURLOPT_DNS_LOCAL_IP4, "192.168.0.14");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+ curl_easy_setopt(curl, CURLOPT_DNS_LOCAL_IP4, "192.168.0.14");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -64,4 +68,6 @@ Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not,
CURLE_NOT_BUILT_IN if support was disabled at compile-time, or
CURLE_BAD_FUNCTION_ARGUMENT when given a bad address.
.SH "SEE ALSO"
-.BR CURLOPT_DNS_INTERFACE "(3), " CURLOPT_DNS_LOCAL_IP6 "(3), "
+.BR CURLOPT_DNS_INTERFACE (3),
+.BR CURLOPT_DNS_LOCAL_IP6 (3),
+.BR CURLOPT_DNS_SERVERS (3)
diff --git a/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.3 b/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.3
index a03a0849c..94e83484b 100644
--- a/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.3
+++ b/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_DNS_LOCAL_IP6 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_DNS_LOCAL_IP6 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_DNS_LOCAL_IP6 \- IPv6 address to bind DNS resolves to
@@ -46,12 +46,16 @@ NULL
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- curl_easy_setopt(curl, CURLOPT_DNS_LOCAL_IP6, "fe80::a9ff:fe46:b619");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+ curl_easy_setopt(curl, CURLOPT_DNS_LOCAL_IP6, "fe80::a9ff:fe46:b619");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -64,4 +68,6 @@ Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not,
CURLE_NOT_BUILT_IN if support was disabled at compile-time, or
CURLE_BAD_FUNCTION_ARGUMENT when given a bad address.
.SH "SEE ALSO"
-.BR CURLOPT_DNS_INTERFACE "(3), " CURLOPT_DNS_LOCAL_IP4 "(3), "
+.BR CURLOPT_DNS_INTERFACE (3),
+.BR CURLOPT_DNS_LOCAL_IP4 (3),
+.BR CURLOPT_DNS_SERVERS (3)
diff --git a/docs/libcurl/opts/CURLOPT_DNS_SERVERS.3 b/docs/libcurl/opts/CURLOPT_DNS_SERVERS.3
index 7a95c76f9..1b117b7a3 100644
--- a/docs/libcurl/opts/CURLOPT_DNS_SERVERS.3
+++ b/docs/libcurl/opts/CURLOPT_DNS_SERVERS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_DNS_SERVERS 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_DNS_SERVERS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_DNS_SERVERS \- DNS servers to use
@@ -50,12 +50,17 @@ NULL - use system default
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- curl_easy_setopt(curl, CURLOPT_DNS_SERVERS, "192.168.1.100:53,192.168.1.101");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+ curl_easy_setopt(curl, CURLOPT_DNS_SERVERS,
+ "192.168.1.100:53,192.168.1.101");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -69,4 +74,6 @@ CURLE_NOT_BUILT_IN if support was disabled at compile-time,
CURLE_BAD_FUNCTION_ARGUMENT when given an invalid server list, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_DNS_LOCAL_IP4 "(3), " CURLOPT_DNS_CACHE_TIMEOUT "(3), "
+.BR CURLOPT_DNS_CACHE_TIMEOUT (3),
+.BR CURLOPT_DNS_LOCAL_IP4 (3),
+.BR CURLOPT_DNS_LOCAL_IP6 (3)
diff --git a/docs/libcurl/opts/CURLOPT_DNS_SHUFFLE_ADDRESSES.3 b/docs/libcurl/opts/CURLOPT_DNS_SHUFFLE_ADDRESSES.3
index 605f49b9d..f7f755bf1 100644
--- a/docs/libcurl/opts/CURLOPT_DNS_SHUFFLE_ADDRESSES.3
+++ b/docs/libcurl/opts/CURLOPT_DNS_SHUFFLE_ADDRESSES.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_DNS_SHUFFLE_ADDRESSES 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_DNS_SHUFFLE_ADDRESSES 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_DNS_SHUFFLE_ADDRESSES \- shuffle IP addresses for hostname
@@ -33,18 +33,20 @@ CURLOPT_DNS_SHUFFLE_ADDRESSES \- shuffle IP addresses for hostname
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_SHUFFLE_ADDRESSES, long onoff);
.fi
.SH DESCRIPTION
-When a name is resolved and more than one IP address is returned, shuffle the
-order of all returned addresses so that they will be used in a random order.
-This is similar to the ordering behavior of gethostbyname which is no longer
-used on most platforms.
+Pass a long set to 1 to enable this option.
-Addresses will not be reshuffled if a name resolution is completed using the
-DNS cache. \fICURLOPT_DNS_CACHE_TIMEOUT(3)\fP can be used together with this
+When a name is resolved and more than one IP address is returned, this
+function shuffles the order of all returned addresses so that they are used in
+a random order. This is similar to the ordering behavior of the legacy
+gethostbyname function which is no longer used on most platforms.
+
+Addresses are not reshuffled if name resolution is completed using the DNS
+cache. \fICURLOPT_DNS_CACHE_TIMEOUT(3)\fP can be used together with this
option to reduce DNS cache timeout or disable caching entirely if frequent
reshuffling is needed.
-Since the addresses returned will be reordered randomly, their order will not
-be in accordance with RFC 3484 or any other deterministic order that may be
+Since the addresses returned are randomly reordered, the order is not in
+accordance with RFC 3484 or any other deterministic order that may be
generated by the system's name resolution implementation. This may have
performance impacts and may cause IPv4 to be used before IPv6 or vice versa.
.SH DEFAULT
@@ -53,15 +55,18 @@ performance impacts and may cause IPv4 to be used before IPv6 or vice versa.
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_DNS_SHUFFLE_ADDRESSES, 1L);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_setopt(curl, CURLOPT_DNS_SHUFFLE_ADDRESSES, 1L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
- /* always cleanup */
- curl_easy_cleanup(curl);
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -69,4 +74,5 @@ Added in 7.60.0
.SH RETURN VALUE
CURLE_OK or an error such as CURLE_UNKNOWN_OPTION.
.SH "SEE ALSO"
-.BR CURLOPT_DNS_CACHE_TIMEOUT "(3), " CURLOPT_IPRESOLVE "(3), "
+.BR CURLOPT_DNS_CACHE_TIMEOUT (3),
+.BR CURLOPT_IPRESOLVE (3)
diff --git a/docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.3 b/docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.3
index 5ddf1e5d8..65593e15d 100644
--- a/docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.3
+++ b/docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_DNS_USE_GLOBAL_CACHE 3 "October 12, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_DNS_USE_GLOBAL_CACHE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_DNS_USE_GLOBAL_CACHE \- global DNS cache
@@ -37,31 +37,35 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_USE_GLOBAL_CACHE,
Has no function since 7.62.0. Do not use!
Pass a long. If the \fIenable\fP value is 1, it tells curl to use a global DNS
-cache that will survive between easy handle creations and deletions. This is
-not thread-safe and this will use a global variable.
+cache that survives between easy handle creations and deletions. This is not
+thread-safe and this uses a global variable.
-\fBWARNING:\fP this option is considered obsolete. Stop using it. Switch over
-to using the share interface instead! See \fICURLOPT_SHARE(3)\fP and
-\fIcurl_share_init(3)\fP.
+See \fICURLOPT_SHARE(3)\fP and \fIcurl_share_init(3)\fP for the correct way to
+share DNS cache between transfers.
.SH DEFAULT
0
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- /* switch off the use of a global, thread unsafe, cache */
- curl_easy_setopt(curl, CURLOPT_DNS_USE_GLOBAL_CACHE, 0L);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ /* switch off the use of a global, thread unsafe, cache */
+ curl_easy_setopt(curl, CURLOPT_DNS_USE_GLOBAL_CACHE, 0L);
+ ret = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
+
.fi
.SH AVAILABILITY
Deprecated since 7.11.1. Function removed in 7.62.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_SHARE "(3), " CURLOPT_DNS_CACHE_TIMEOUT "(3), "
+.BR CURLOPT_DNS_CACHE_TIMEOUT (3),
+.BR CURLOPT_SHARE (3)
diff --git a/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYHOST.3 b/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYHOST.3
index c9e1da42a..1dd5a5b0b 100644
--- a/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYHOST.3
+++ b/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYHOST.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_DOH_SSL_VERIFYHOST 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_DOH_SSL_VERIFYHOST 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_DOH_SSL_VERIFYHOST \- verify the host name in the DoH SSL certificate
@@ -56,26 +56,27 @@ When the \fIverify\fP value is set to 0L, the connection succeeds regardless of
the names used in the certificate. Use that ability with caution!
See also \fICURLOPT_DOH_SSL_VERIFYPEER(3)\fP to verify the digital signature
-of the DoH server certificate. If libcurl is built against NSS and
-\fICURLOPT_DOH_SSL_VERIFYPEER(3)\fP is zero,
-\fICURLOPT_DOH_SSL_VERIFYHOST(3)\fP is also set to zero and cannot be
-overridden.
+of the DoH server certificate.
.SH DEFAULT
2
.SH PROTOCOLS
DoH
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_DOH_URL, "https://cloudflare-dns.com/dns-query");
+ curl_easy_setopt(curl, CURLOPT_DOH_URL,
+ "https://cloudflare-dns.com/dns-query");
- /* Disable host name verification of the DoH server */
- curl_easy_setopt(curl, CURLOPT_DOH_SSL_VERIFYHOST, 0L);
+ /* Disable host name verification of the DoH server */
+ curl_easy_setopt(curl, CURLOPT_DOH_SSL_VERIFYHOST, 0L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -85,8 +86,8 @@ If built TLS enabled.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_DOH_SSL_VERIFYPEER "(3), "
-.BR CURLOPT_SSL_VERIFYHOST "(3), "
-.BR CURLOPT_SSL_VERIFYPEER "(3), "
-.BR CURLOPT_PROXY_SSL_VERIFYPEER "(3), "
-.BR CURLOPT_PROXY_SSL_VERIFYHOST "(3), "
+.BR CURLOPT_DOH_SSL_VERIFYPEER (3),
+.BR CURLOPT_PROXY_SSL_VERIFYHOST (3),
+.BR CURLOPT_PROXY_SSL_VERIFYPEER (3),
+.BR CURLOPT_SSL_VERIFYHOST (3),
+.BR CURLOPT_SSL_VERIFYPEER (3)
diff --git a/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYPEER.3 b/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYPEER.3
index 949c48680..89f7dd979 100644
--- a/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYPEER.3
+++ b/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYPEER.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_DOH_SSL_VERIFYPEER 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_DOH_SSL_VERIFYPEER 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_DOH_SSL_VERIFYPEER \- verify the DoH SSL certificate
@@ -74,16 +74,20 @@ the correct end-point.
DoH
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_DOH_URL, "https://cloudflare-dns.com/dns-query");
+ curl_easy_setopt(curl, CURLOPT_DOH_URL,
+ "https://cloudflare-dns.com/dns-query");
- /* Disable certificate verification of the DoH server */
- curl_easy_setopt(curl, CURLOPT_DOH_SSL_VERIFYPEER, 0L);
+ /* Disable certificate verification of the DoH server */
+ curl_easy_setopt(curl, CURLOPT_DOH_SSL_VERIFYPEER, 0L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -93,10 +97,10 @@ If built TLS enabled.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_DOH_SSL_VERIFYHOST "(3), "
-.BR CURLOPT_SSL_VERIFYHOST "(3), "
-.BR CURLOPT_SSL_VERIFYPEER "(3), "
-.BR CURLOPT_PROXY_SSL_VERIFYPEER "(3), "
-.BR CURLOPT_PROXY_SSL_VERIFYHOST "(3), "
-.BR CURLOPT_CAINFO "(3), "
-.BR CURLOPT_CAPATH "(3), "
+.BR CURLOPT_CAINFO (3),
+.BR CURLOPT_CAPATH (3),
+.BR CURLOPT_DOH_SSL_VERIFYHOST (3),
+.BR CURLOPT_PROXY_SSL_VERIFYHOST (3),
+.BR CURLOPT_PROXY_SSL_VERIFYPEER (3),
+.BR CURLOPT_SSL_VERIFYHOST (3),
+.BR CURLOPT_SSL_VERIFYPEER (3)
diff --git a/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYSTATUS.3 b/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYSTATUS.3
index bb8bebcfb..67d00ffd0 100644
--- a/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYSTATUS.3
+++ b/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYSTATUS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_DOH_SSL_VERIFYSTATUS 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_DOH_SSL_VERIFYSTATUS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_DOH_SSL_VERIFYSTATUS \- verify the DoH SSL certificate's status
@@ -43,33 +43,37 @@ extension (aka. OCSP stapling).
This option is the DoH equivalent of \fICURLOPT_SSL_VERIFYSTATUS(3)\fP and
only affects requests to the DoH server.
-Note that if this option is enabled but the server does not support the TLS
-extension, the verification will fail.
+If this option is enabled and the server does not support the TLS extension,
+the verification fails.
.SH DEFAULT
0
.SH PROTOCOLS
DoH
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_DOH_URL, "https://cloudflare-dns.com/dns-query");
+ curl_easy_setopt(curl, CURLOPT_DOH_URL,
+ "https://cloudflare-dns.com/dns-query");
- /* Ask for OCSP stapling when verifying the DoH server */
- curl_easy_setopt(curl, CURLOPT_DOH_SSL_VERIFYSTATUS, 1L);
+ /* Ask for OCSP stapling when verifying the DoH server */
+ curl_easy_setopt(curl, CURLOPT_DOH_SSL_VERIFYSTATUS, 1L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
-Added in 7.76.0. This option is currently only supported by the OpenSSL, GnuTLS
-and NSS TLS backends.
+Added in 7.76.0. This option is currently only supported by the OpenSSL, and
+GnuTLS TLS backends.
.SH RETURN VALUE
Returns CURLE_OK if OCSP stapling is supported by the SSL backend, otherwise
returns CURLE_NOT_BUILT_IN.
.SH "SEE ALSO"
-.BR CURLOPT_DOH_SSL_VERIFYHOST "(3), "
-.BR CURLOPT_DOH_SSL_VERIFYPEER "(3), "
-.BR CURLOPT_SSL_VERIFYSTATUS "(3), "
+.BR CURLOPT_DOH_SSL_VERIFYHOST (3),
+.BR CURLOPT_DOH_SSL_VERIFYPEER (3),
+.BR CURLOPT_SSL_VERIFYSTATUS (3)
diff --git a/docs/libcurl/opts/CURLOPT_DOH_URL.3 b/docs/libcurl/opts/CURLOPT_DOH_URL.3
index 43cfd49aa..a0f9465ca 100644
--- a/docs/libcurl/opts/CURLOPT_DOH_URL.3
+++ b/docs/libcurl/opts/CURLOPT_DOH_URL.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 2022 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_DOH_URL 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_DOH_URL 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_DOH_URL \- provide the DNS-over-HTTPS URL
@@ -38,15 +38,15 @@ resolving. The parameter should be a char * to a null-terminated string which
must be URL-encoded in the following format: "https://host:port/path". It MUST
specify an HTTPS URL.
-libcurl does not validate the syntax or use this variable until the transfer is
-issued. Even if you set a crazy value here, \fIcurl_easy_setopt(3)\fP will
-still return \fICURLE_OK\fP.
+libcurl does not validate the syntax or use this variable until the transfer
+is issued. Even if you set a crazy value here, \fIcurl_easy_setopt(3)\fP still
+returns \fICURLE_OK\fP.
curl sends POST requests to the given DNS-over-HTTPS URL.
To find the DoH server itself, which might be specified using a name, libcurl
-will use the default name lookup function. You can bootstrap that by providing
-the address for the DoH server with \fICURLOPT_RESOLVE(3)\fP.
+uses the default name lookup function. You can bootstrap that by providing the
+address for the DoH server with \fICURLOPT_RESOLVE(3)\fP.
Disable DoH use again by setting this option to NULL.
.SH "INHERIT OPTIONS"
@@ -65,17 +65,20 @@ mechanism. This includes name resolves done for \fICURLOPT_INTERFACE(3)\fP,
\fICURLOPT_FTPPORT(3)\fP, a proxy type set to \fBCURLPROXY_SOCKS4\fP or
\fBCURLPROXY_SOCKS5\fP and probably some more.
.SH DEFAULT
-NULL - there is no default DoH URL. If this option is not set, libcurl will use
+NULL - there is no default DoH URL. If this option is not set, libcurl uses
the default name resolver.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_DOH_URL, "https://dns.example.com");
- curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_setopt(curl, CURLOPT_DOH_URL, "https://dns.example.com");
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -84,8 +87,10 @@ Added in 7.62.0
Returns CURLE_OK on success or CURLE_OUT_OF_MEMORY if there was insufficient
heap space.
-Note that \fIcurl_easy_setopt(3)\fP will not immediately parse the given
-string so when given a bad DoH URL, libcurl might not detect the problem until
-it later tries to resolve a name with it.
+Note that \fIcurl_easy_setopt(3)\fP does immediately parse the given string so
+when given a bad DoH URL, libcurl might not detect the problem until it later
+tries to resolve a name with it.
.SH "SEE ALSO"
-.BR CURLOPT_VERBOSE "(3), " CURLOPT_RESOLVE "(3), "
+.BR CURLOPT_DNS_CACHE_TIMEOUT (3),
+.BR CURLOPT_RESOLVE (3),
+.BR CURLOPT_VERBOSE (3)
diff --git a/docs/libcurl/opts/CURLOPT_EGDSOCKET.3 b/docs/libcurl/opts/CURLOPT_EGDSOCKET.3
index 39b72f0e3..cca7fe635 100644
--- a/docs/libcurl/opts/CURLOPT_EGDSOCKET.3
+++ b/docs/libcurl/opts/CURLOPT_EGDSOCKET.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_EGDSOCKET 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_EGDSOCKET 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_EGDSOCKET \- EGD socket path
@@ -36,7 +36,7 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_EGDSOCKET, char *path);
Deprecated option. It serves no purpose anymore.
Pass a char * to the null-terminated path name to the Entropy Gathering Daemon
-socket. It will be used to seed the random engine for TLS.
+socket. It is used to seed the random engine for TLS.
The application does not have to keep the string around after setting this
option.
@@ -46,21 +46,25 @@ NULL
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_EGDSOCKET, "/var/egd.socket");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_EGDSOCKET, "/var/egd.socket");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
-If built with TLS enabled. Only the OpenSSL backend will use this, and only
-with OpenSSL versions before 1.1.0.
+If built with TLS enabled. Only the OpenSSL backend uses this, and only with
+OpenSSL versions before 1.1.0.
This option was deprecated in 7.84.0.
.SH RETURN VALUE
Returns CURLE_OK if TLS is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_RANDOM_FILE "(3), "
+.BR CURLOPT_RANDOM_FILE (3)
diff --git a/docs/libcurl/opts/CURLOPT_ERRORBUFFER.3 b/docs/libcurl/opts/CURLOPT_ERRORBUFFER.3
index 0153300d5..9655001ff 100644
--- a/docs/libcurl/opts/CURLOPT_ERRORBUFFER.3
+++ b/docs/libcurl/opts/CURLOPT_ERRORBUFFER.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_ERRORBUFFER 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_ERRORBUFFER 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_ERRORBUFFER \- error buffer for error messages
@@ -33,20 +33,20 @@ CURLOPT_ERRORBUFFER \- error buffer for error messages
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ERRORBUFFER, char *buf);
.fi
.SH DESCRIPTION
-Pass a char * to a buffer that libcurl \fBmay\fP store human readable error
+Pass a char * to a buffer that libcurl may use to store human readable error
messages on failures or problems. This may be more helpful than just the
return code from \fIcurl_easy_perform(3)\fP and related functions. The buffer
-\fBmust be at least CURL_ERROR_SIZE bytes big\fP.
+must be at least \fBCURL_ERROR_SIZE\fP bytes big.
You must keep the associated buffer available until libcurl no longer needs
-it. Failing to do so will cause odd behavior or even crashes. libcurl will
+it. Failing to do so might cause odd behavior or even crashes. libcurl might
need it until you call \fIcurl_easy_cleanup(3)\fP or you set the same option
again to use a different pointer.
Do not rely on the contents of the buffer unless an error code was returned.
-Since 7.60.0 libcurl will initialize the contents of the error buffer to an
-empty string before performing the transfer. For earlier versions if an error
-code was returned but there was no error detail then the buffer is untouched.
+Since 7.60.0 libcurl initializes the contents of the error buffer to an empty
+string before performing the transfer. For earlier versions if an error code
+was returned but there was no error detail then the buffer was untouched.
Consider \fICURLOPT_VERBOSE(3)\fP and \fICURLOPT_DEBUGFUNCTION(3)\fP to better
debug and trace why errors happen.
@@ -56,34 +56,38 @@ NULL
All
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- CURLcode res;
- char errbuf[CURL_ERROR_SIZE];
+#include <string.h> /* for strlen() */
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ char errbuf[CURL_ERROR_SIZE];
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* provide a buffer to store errors in */
- curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf);
+ /* provide a buffer to store errors in */
+ curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf);
- /* set the error buffer as empty before performing a request */
- errbuf[0] = 0;
+ /* set the error buffer as empty before performing a request */
+ errbuf[0] = 0;
- /* perform the request */
- res = curl_easy_perform(curl);
+ /* perform the request */
+ res = curl_easy_perform(curl);
- /* if the request did not complete correctly, show the error
- information. if no detailed error information was written to errbuf
- show the more generic information from curl_easy_strerror instead.
- */
- if(res != CURLE_OK) {
- size_t len = strlen(errbuf);
- fprintf(stderr, "\\nlibcurl: (%d) ", res);
- if(len)
- fprintf(stderr, "%s%s", errbuf,
- ((errbuf[len - 1] != '\\n') ? "\\n" : ""));
- else
- fprintf(stderr, "%s\\n", curl_easy_strerror(res));
+ /* if the request did not complete correctly, show the error
+ information. if no detailed error information was written to errbuf
+ show the more generic information from curl_easy_strerror instead.
+ */
+ if(res != CURLE_OK) {
+ size_t len = strlen(errbuf);
+ fprintf(stderr, "\\nlibcurl: (%d) ", res);
+ if(len)
+ fprintf(stderr, "%s%s", errbuf,
+ ((errbuf[len - 1] != '\\n') ? "\\n" : ""));
+ else
+ fprintf(stderr, "%s\\n", curl_easy_strerror(res));
+ }
}
}
.fi
@@ -92,6 +96,9 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_DEBUGFUNCTION "(3), " CURLOPT_VERBOSE "(3), "
-.BR curl_easy_strerror "(3), " curl_multi_strerror "(3), "
-.BR curl_share_strerror "(3), " curl_url_strerror "(3)"
+.BR curl_easy_strerror (3),
+.BR curl_multi_strerror (3),
+.BR curl_share_strerror (3),
+.BR curl_url_strerror (3),
+.BR CURLOPT_DEBUGFUNCTION (3),
+.BR CURLOPT_VERBOSE (3)
diff --git a/docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.3 b/docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.3
index 30aa3e71d..7db232894 100644
--- a/docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.3
+++ b/docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_EXPECT_100_TIMEOUT_MS 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_EXPECT_100_TIMEOUT_MS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_EXPECT_100_TIMEOUT_MS \- timeout for Expect: 100-continue response
@@ -44,14 +44,17 @@ sent anyway.
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* wait 3 seconds for 100-continue */
- curl_easy_setopt(curl, CURLOPT_EXPECT_100_TIMEOUT_MS, 3000L);
+ /* wait 3 seconds for 100-continue */
+ curl_easy_setopt(curl, CURLOPT_EXPECT_100_TIMEOUT_MS, 3000L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -59,4 +62,5 @@ Added in 7.36.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_POST "(3), " CURLOPT_HTTPPOST "(3), "
+.BR CURLOPT_HTTPPOST (3),
+.BR CURLOPT_POST (3)
diff --git a/docs/libcurl/opts/CURLOPT_FAILONERROR.3 b/docs/libcurl/opts/CURLOPT_FAILONERROR.3
index 197fb85cc..525a92b2a 100644
--- a/docs/libcurl/opts/CURLOPT_FAILONERROR.3
+++ b/docs/libcurl/opts/CURLOPT_FAILONERROR.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_FAILONERROR 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_FAILONERROR 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_FAILONERROR \- request failure on HTTP response >= 400
@@ -38,29 +38,32 @@ code returned is equal to or larger than 400. The default action would be to
return the page normally, ignoring that code.
This method is not fail-safe and there are occasions where non-successful
-response codes will slip through, especially when authentication is involved
+response codes slip through, especially when authentication is involved
(response codes 401 and 407).
You might get some amounts of headers transferred before this situation is
detected, like when a "100-continue" is received as a response to a POST/PUT
and a 401 or 407 is received immediately afterwards.
-When this option is used and an error is detected, it will cause the
-connection to get closed and \fICURLE_HTTP_RETURNED_ERROR\fP is returned.
+When this option is used and an error is detected, it causes the connection to
+get closed and \fICURLE_HTTP_RETURNED_ERROR\fP is returned.
.SH DEFAULT
0, do not fail on error
.SH PROTOCOLS
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1L);
- ret = curl_easy_perform(curl);
- if(ret == CURLE_HTTP_RETURNED_ERROR) {
- /* an HTTP response error problem */
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1L);
+ ret = curl_easy_perform(curl);
+ if(ret == CURLE_HTTP_RETURNED_ERROR) {
+ /* an HTTP response error problem */
+ }
}
}
.fi
@@ -69,4 +72,6 @@ Along with HTTP.
.SH RETURN VALUE
Returns CURLE_OK if HTTP is enabled, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_HTTP200ALIASES "(3), " CURLOPT_KEEP_SENDING_ON_ERROR "(3), "
+.BR CURLINFO_RESPONSE_CODE (3),
+.BR CURLOPT_HTTP200ALIASES (3),
+.BR CURLOPT_KEEP_SENDING_ON_ERROR (3)
diff --git a/docs/libcurl/opts/CURLOPT_FILETIME.3 b/docs/libcurl/opts/CURLOPT_FILETIME.3
index f01d06309..d54950db9 100644
--- a/docs/libcurl/opts/CURLOPT_FILETIME.3
+++ b/docs/libcurl/opts/CURLOPT_FILETIME.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_FILETIME 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_FILETIME 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_FILETIME \- get the modification time of the remote resource
@@ -33,32 +33,37 @@ CURLOPT_FILETIME \- get the modification time of the remote resource
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FILETIME, long gettime);
.fi
.SH DESCRIPTION
-Pass a long. If it is 1, libcurl will attempt to get the modification time of
-the remote document in this operation. This requires that the remote server
-sends the time or replies to a time querying command. The
-\fIcurl_easy_getinfo(3)\fP function with the \fICURLINFO_FILETIME(3)\fP
-argument can be used after a transfer to extract the received time (if any).
+Pass a long. If it is 1, libcurl attempts to get the modification time of the
+remote document in this operation. This requires that the remote server sends
+the time or replies to a time querying command. The \fIcurl_easy_getinfo(3)\fP
+function with the \fICURLINFO_FILETIME(3)\fP argument can be used after a
+transfer to extract the received time (if any).
.SH DEFAULT
0
.SH PROTOCOLS
HTTP(S), FTP(S), SFTP, FILE, SMB(S)
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, url);
- /* Ask for filetime */
- curl_easy_setopt(curl, CURLOPT_FILETIME, 1L);
- res = curl_easy_perform(curl);
- if(CURLE_OK == res) {
- res = curl_easy_getinfo(curl, CURLINFO_FILETIME, &filetime);
- if((CURLE_OK == res) && (filetime >= 0)) {
- time_t file_time = (time_t)filetime;
- printf("filetime %s: %s", filename, ctime(&file_time));
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/path.html");
+ /* Ask for filetime */
+ curl_easy_setopt(curl, CURLOPT_FILETIME, 1L);
+ res = curl_easy_perform(curl);
+ if(CURLE_OK == res) {
+ long filetime;
+ res = curl_easy_getinfo(curl, CURLINFO_FILETIME, &filetime);
+ if((CURLE_OK == res) && (filetime >= 0)) {
+ time_t file_time = (time_t)filetime;
+ printf("filetime: %s", ctime(&file_time));
+ }
}
+ /* always cleanup */
+ curl_easy_cleanup(curl);
}
- /* always cleanup */
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -66,4 +71,5 @@ Always, for SFTP since 7.49.0
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR curl_easy_getinfo "(3), "
+.BR curl_easy_getinfo (3),
+.BR CURLINFO_FILETIME (3)
diff --git a/docs/libcurl/opts/CURLOPT_FNMATCH_DATA.3 b/docs/libcurl/opts/CURLOPT_FNMATCH_DATA.3
index 75a42d6c7..eb19f670a 100644
--- a/docs/libcurl/opts/CURLOPT_FNMATCH_DATA.3
+++ b/docs/libcurl/opts/CURLOPT_FNMATCH_DATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_FNMATCH_DATA 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_FNMATCH_DATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_FNMATCH_DATA \- pointer passed to the fnmatch callback
@@ -33,30 +33,44 @@ CURLOPT_FNMATCH_DATA \- pointer passed to the fnmatch callback
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FNMATCH_DATA,
void *pointer);
.SH DESCRIPTION
-Pass a pointer that will be untouched by libcurl and passed as the ptr
-argument to the \fICURLOPT_FNMATCH_FUNCTION(3)\fP.
+Pass a pointer that is untouched by libcurl and passed as the ptr argument to
+the \fICURLOPT_FNMATCH_FUNCTION(3)\fP.
.SH DEFAULT
NULL
.SH PROTOCOLS
FTP
.SH EXAMPLE
.nf
+extern int string_match(const char *s1, const char *s2);
+
+struct local_stuff {
+ void *custom;
+};
+
static int my_fnmatch(void *clientp,
const char *pattern, const char *string)
{
- struct local_stuff *data = (struct local_stuff *)clientp;
+ struct local_stuff *my = clientp;
+ printf("my ptr: %p\\n", my->custom);
+
if(string_match(pattern, string))
return CURL_FNMATCHFUNC_MATCH;
else
return CURL_FNMATCHFUNC_NOMATCH;
}
+int main(void)
{
struct local_stuff local_data;
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://ftp.example.com/file*");
- curl_easy_setopt(curl, CURLOPT_WILDCARDMATCH, 1L);
- curl_easy_setopt(curl, CURLOPT_FNMATCH_FUNCTION, my_fnmatch);
- curl_easy_setopt(curl, CURLOPT_FNMATCH_DATA, &local_data);
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://ftp.example.com/file*");
+ curl_easy_setopt(curl, CURLOPT_WILDCARDMATCH, 1L);
+ curl_easy_setopt(curl, CURLOPT_FNMATCH_FUNCTION, my_fnmatch);
+ curl_easy_setopt(curl, CURLOPT_FNMATCH_DATA, &local_data);
+
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -64,4 +78,5 @@ Added in 7.21.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_FNMATCH_FUNCTION "(3), " CURLOPT_WILDCARDMATCH "(3), "
+.BR CURLOPT_FNMATCH_FUNCTION (3),
+.BR CURLOPT_WILDCARDMATCH (3)
diff --git a/docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.3 b/docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.3
index 53cbf56ec..b8f209d5b 100644
--- a/docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_FNMATCH_FUNCTION 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_FNMATCH_FUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_FNMATCH_FUNCTION \- wildcard match callback
@@ -51,22 +51,33 @@ NULL == an internal function for wildcard matching.
FTP
.SH EXAMPLE
.nf
+extern int string_match(const char *s1, const char *s2);
+
+struct local_stuff {
+ void *custom;
+};
static int my_fnmatch(void *clientp,
const char *pattern, const char *string)
{
- struct local_stuff *data = (struct local_stuff *)clientp;
+ struct local_stuff *data = clientp;
+ printf("my pointer: %p\\n", data->custom);
if(string_match(pattern, string))
return CURL_FNMATCHFUNC_MATCH;
else
return CURL_FNMATCHFUNC_NOMATCH;
}
+int main(void)
{
struct local_stuff local_data;
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://ftp.example.com/file*");
- curl_easy_setopt(curl, CURLOPT_WILDCARDMATCH, 1L);
- curl_easy_setopt(curl, CURLOPT_FNMATCH_FUNCTION, my_fnmatch);
- curl_easy_setopt(curl, CURLOPT_FNMATCH_DATA, &local_data);
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://ftp.example.com/file*");
+ curl_easy_setopt(curl, CURLOPT_WILDCARDMATCH, 1L);
+ curl_easy_setopt(curl, CURLOPT_FNMATCH_FUNCTION, my_fnmatch);
+ curl_easy_setopt(curl, CURLOPT_FNMATCH_DATA, &local_data);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -74,4 +85,6 @@ Added in 7.21.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_FNMATCH_DATA "(3), " CURLOPT_DEBUGFUNCTION "(3), "
+.BR CURLOPT_DEBUGFUNCTION (3),
+.BR CURLOPT_FNMATCH_DATA (3),
+.BR CURLOPT_WILDCARDMATCH (3)
diff --git a/docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.3 b/docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.3
index 2e24d714f..bb14f8e4b 100644
--- a/docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.3
+++ b/docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_FOLLOWLOCATION 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_FOLLOWLOCATION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_FOLLOWLOCATION \- follow HTTP 3xx redirects
@@ -34,46 +34,52 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FOLLOWLOCATION, long enable);
.fi
.SH DESCRIPTION
A long parameter set to 1 tells the library to follow any Location: header
-that the server sends as part of an HTTP header in a 3xx response. The
-Location: header can specify a relative or an absolute URL to follow.
+redirects that a HTTP server sends in a 30x response. The Location: header can
+specify a relative or an absolute URL to follow.
-libcurl will issue another request for the new URL and follow new Location:
-headers all the way until no more such headers are returned.
-\fICURLOPT_MAXREDIRS(3)\fP can be used to limit the number of redirects
-libcurl will follow.
+libcurl issues another request for the new URL and follows subsequent new
+Location: redirects all the way until no more such headers are returned or the
+maximum limit is reached. \fICURLOPT_MAXREDIRS(3)\fP is used to limit the
+number of redirects libcurl follows.
-libcurl limits what protocols it automatically follows to. The accepted
-protocols are set with \fICURLOPT_REDIR_PROTOCOLS(3)\fP. By default libcurl
-will allow HTTP, HTTPS, FTP and FTPS on redirect (7.65.2). Older versions of
-libcurl allowed all protocols on redirect except those disabled for security
-reasons: Since 7.19.4 FILE and SCP are disabled, and since 7.40.0 SMB and SMBS
-are also disabled.
+libcurl restricts what protocols it automatically follow redirects to. The
+accepted target protocols are set with \fICURLOPT_REDIR_PROTOCOLS(3)\fP. By
+default libcurl allows HTTP, HTTPS, FTP and FTPS on redirects.
-When following a Location:, the 3xx response code that redirected it also
-dictates which request method it will use in the subsequent request: For 301,
-302 and 303 responses libcurl will switch method from POST to GET unless
-\fICURLOPT_POSTREDIR(3)\fP instructs libcurl otherwise. All other 3xx codes
-will make libcurl send the same method again.
+When following a redirect, the specific 30x response code also dictates which
+request method libcurl uses in the subsequent request: For 301, 302 and 303
+responses libcurl switches method from POST to GET unless
+\fICURLOPT_POSTREDIR(3)\fP instructs libcurl otherwise. All other redirect
+response codes make libcurl use the same method again.
For users who think the existing location following is too naive, too simple
or just lacks features, it is easy to instead implement your own redirect
follow logic with the use of \fIcurl_easy_getinfo(3)\fP's
\fICURLINFO_REDIRECT_URL(3)\fP option instead of using
\fICURLOPT_FOLLOWLOCATION(3)\fP.
+.SH NOTE
+Since libcurl changes method or not based on the specific HTTP response code,
+setting \fICURLOPT_CUSTOMREQUEST(3)\fP while following redirects may change
+what libcurl would otherwise do and if not that carefully may even make it
+misbehave since \fICURLOPT_CUSTOMREQUEST(3)\fP overrides the method libcurl
+would otherwise select internally.
.SH DEFAULT
0, disabled
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* example.com is redirected, so we tell libcurl to follow redirection */
- curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
+ /* example.com is redirected, so we tell libcurl to follow redirection */
+ curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -81,6 +87,8 @@ Along with HTTP
.SH RETURN VALUE
Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_REDIR_PROTOCOLS "(3), " CURLOPT_PROTOCOLS "(3), "
-.BR CURLOPT_POSTREDIR "(3), "
-.BR CURLINFO_REDIRECT_URL "(3), " CURLINFO_REDIRECT_COUNT "(3), "
+.BR CURLINFO_REDIRECT_COUNT (3),
+.BR CURLINFO_REDIRECT_URL (3),
+.BR CURLOPT_POSTREDIR (3),
+.BR CURLOPT_PROTOCOLS (3),
+.BR CURLOPT_REDIR_PROTOCOLS (3)
diff --git a/docs/libcurl/opts/CURLOPT_FORBID_REUSE.3 b/docs/libcurl/opts/CURLOPT_FORBID_REUSE.3
index 4fb344b6b..294f7e6f7 100644
--- a/docs/libcurl/opts/CURLOPT_FORBID_REUSE.3
+++ b/docs/libcurl/opts/CURLOPT_FORBID_REUSE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_FORBID_REUSE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_FORBID_REUSE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_FORBID_REUSE \- make connection get closed at once after use
@@ -36,10 +36,10 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FORBID_REUSE, long close);
Pass a long. Set \fIclose\fP to 1 to make libcurl explicitly close the
connection when done with the transfer. Normally, libcurl keeps all
connections alive when done with one transfer in case a succeeding one follows
-that can re-use them. This option should be used with caution and only if you
+that can reuse them. This option should be used with caution and only if you
understand what it does as it can seriously impact performance.
-Set to 0 to have libcurl keep the connection open for possible later re-use
+Set to 0 to have libcurl keep the connection open for possible later reuse
(default behavior).
.SH DEFAULT
0
@@ -47,13 +47,19 @@ Set to 0 to have libcurl keep the connection open for possible later re-use
Most
.SH EXAMPLE
.nf
+int main(void)
{
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_FORBID_REUSE, 1L);
- curl_easy_perform(curl);
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_FORBID_REUSE, 1L);
+ curl_easy_perform(curl);
- /* this second transfer may not reuse the same connection */
- curl_easy_perform(curl);
+ /* this second transfer may not reuse the same connection */
+ curl_easy_perform(curl);
+
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -61,5 +67,6 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_FRESH_CONNECT "(3), " CURLOPT_MAXCONNECTS "(3), "
-.BR CURLOPT_MAXLIFETIME_CONN "(3), "
+.BR CURLOPT_FRESH_CONNECT (3),
+.BR CURLOPT_MAXCONNECTS (3),
+.BR CURLOPT_MAXLIFETIME_CONN (3)
diff --git a/docs/libcurl/opts/CURLOPT_FRESH_CONNECT.3 b/docs/libcurl/opts/CURLOPT_FRESH_CONNECT.3
index d203844c6..60185fcee 100644
--- a/docs/libcurl/opts/CURLOPT_FRESH_CONNECT.3
+++ b/docs/libcurl/opts/CURLOPT_FRESH_CONNECT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_FRESH_CONNECT 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_FRESH_CONNECT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_FRESH_CONNECT \- force a new connection to be used
@@ -34,14 +34,14 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FRESH_CONNECT, long fresh);
.fi
.SH DESCRIPTION
Pass a long. Set to 1 to make the next transfer use a new (fresh) connection
-by force instead of trying to re-use an existing one. This option should be
-used with caution and only if you understand what it does as it may seriously
-impact performance.
+by force instead of trying to reuse an existing one. This option should be
+used with caution and only if you understand what it does as it may impact
+performance negatively.
Related functionality is \fICURLOPT_FORBID_REUSE(3)\fP which makes sure the
-connection is closed after use so that it will not be re-used.
+connection is closed after use so that it cannot be reused.
-Set \fIfresh\fP to 0 to have libcurl attempt re-using an existing connection
+Set \fIfresh\fP to 0 to have libcurl attempt reusing an existing connection
(default behavior).
.SH DEFAULT
0
@@ -49,11 +49,16 @@ Set \fIfresh\fP to 0 to have libcurl attempt re-using an existing connection
Most
.SH EXAMPLE
.nf
+int main(void)
{
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_FRESH_CONNECT, 1L);
- /* this transfer must use a new connection, not reuse an existing */
- curl_easy_perform(curl);
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_FRESH_CONNECT, 1L);
+ /* this transfer must use a new connection, not reuse an existing */
+ curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -61,4 +66,6 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_FORBID_REUSE "(3), "
+.BR CURLOPT_FORBID_REUSE (3),
+.BR CURLOPT_MAXAGE_CONN (3),
+.BR CURLOPT_MAXLIFETIME_CONN (3)
diff --git a/docs/libcurl/opts/CURLOPT_FTPPORT.3 b/docs/libcurl/opts/CURLOPT_FTPPORT.3
index 250e22056..bd9696db8 100644
--- a/docs/libcurl/opts/CURLOPT_FTPPORT.3
+++ b/docs/libcurl/opts/CURLOPT_FTPPORT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_FTPPORT 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_FTPPORT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_FTPPORT \- make FTP transfer active
@@ -34,22 +34,22 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTPPORT, char *spec);
.fi
.SH DESCRIPTION
Pass a pointer to a null-terminated string as parameter. It specifies that the
-FTP transfer will be made actively and the given string will be used to get
-the IP address to use for the FTP PORT instruction.
+FTP transfer should be made actively and the given string is used to get the
+IP address to use for the FTP PORT instruction.
-The PORT instruction tells the remote server to connect to our specified IP
-address. The string may be a plain IP address, a host name, a network
-interface name (under Unix) or just a '-' symbol to let the library use your
-system's default IP address. Default FTP operations are passive, and thus
-will not use PORT.
+The PORT instruction tells the remote server to do a TCP connect to our
+specified IP address. The string may be a plain IP address, a host name, a
+network interface name (under Unix) or just a '-' symbol to let the library
+use your system's default IP address. Default FTP operations are passive, and
+does not use the PORT command.
The address can be followed by a ':' to specify a port, optionally followed by
-a '-' to specify a port range. If the port specified is 0, the operating
-system will pick a free port. If a range is provided and all ports in the
-range are not available, libcurl will report CURLE_FTP_PORT_FAILED for the
-handle. Invalid port/range settings are ignored. IPv6 addresses followed by
-a port or port range have to be in brackets. IPv6 addresses without
-port/range specifier can be in brackets.
+a '-' to specify a port range. If the port specified is 0, the operating
+system picks a free port. If a range is provided and all ports in the range
+are not available, libcurl reports CURLE_FTP_PORT_FAILED for the
+handle. Invalid port/range settings are ignored. IPv6 addresses followed by a
+port or port range have to be in brackets. IPv6 addresses without port/range
+specifier can be in brackets.
Examples with specified ports:
@@ -60,6 +60,14 @@ Examples with specified ports:
[::1]:1234-4567
.fi
+We strongly advise against specifying the address with a name, as it causes
+libcurl to do a blocking name resolve call to retrieve the IP address. That
+name resolve operation does \fBnot\fP use DNS-over-HTTPS even if
+\fICURLOPT_DOH_URL(3)\fP is set.
+
+Using anything else than "-" for this option should typically only be done if
+you have special knowledge and confirmation that it works.
+
You disable PORT again and go back to using the passive version by setting
this option to NULL.
@@ -71,12 +79,17 @@ NULL
FTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/old-server/file.txt");
- curl_easy_setopt(curl, CURLOPT_FTPPORT, "-");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL,
+ "ftp://example.com/old-server/file.txt");
+ curl_easy_setopt(curl, CURLOPT_FTPPORT, "-");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -85,4 +98,5 @@ Port range support was added in 7.19.5
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_FTP_USE_EPRT "(3), " CURLOPT_FTP_USE_EPSV "(3), "
+.BR CURLOPT_FTP_USE_EPRT (3),
+.BR CURLOPT_FTP_USE_EPSV (3)
diff --git a/docs/libcurl/opts/CURLOPT_FTPSSLAUTH.3 b/docs/libcurl/opts/CURLOPT_FTPSSLAUTH.3
index e1c1fe365..654c96f15 100644
--- a/docs/libcurl/opts/CURLOPT_FTPSSLAUTH.3
+++ b/docs/libcurl/opts/CURLOPT_FTPSSLAUTH.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_FTPSSLAUTH 3 "October 22, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_FTPSSLAUTH 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_FTPSSLAUTH \- order in which to attempt TLS vs SSL
@@ -50,14 +50,18 @@ CURLFTPAUTH_DEFAULT
FTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/file.txt");
- curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_TRY);
- /* funny server, ask for SSL before TLS */
- curl_easy_setopt(curl, CURLOPT_FTPSSLAUTH, (long)CURLFTPAUTH_SSL);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/file.txt");
+ curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_TRY);
+ /* funny server, ask for SSL before TLS */
+ curl_easy_setopt(curl, CURLOPT_FTPSSLAUTH, (long)CURLFTPAUTH_SSL);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -65,4 +69,5 @@ Added in 7.12.2
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_USE_SSL "(3), " CURLOPT_FTP_SSL_CCC "(3), "
+.BR CURLOPT_USE_SSL (3),
+.BR CURLOPT_FTP_SSL_CCC (3)
diff --git a/docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.3 b/docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.3
index b0bf6d8ca..8cab108e8 100644
--- a/docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.3
+++ b/docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_FTP_ACCOUNT 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_FTP_ACCOUNT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_FTP_ACCOUNT \- account info for FTP
@@ -45,15 +45,19 @@ NULL
FTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/foo.bin");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/foo.bin");
- curl_easy_setopt(curl, CURLOPT_FTP_ACCOUNT, "human-resources");
+ curl_easy_setopt(curl, CURLOPT_FTP_ACCOUNT, "human-resources");
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -62,4 +66,5 @@ Added in 7.13.0
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_USERNAME "(3), " CURLOPT_PASSWORD "(3), "
+.BR CURLOPT_PASSWORD (3),
+.BR CURLOPT_USERNAME (3)
diff --git a/docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.3 b/docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.3
index 7b17bdf47..b305b42f8 100644
--- a/docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.3
+++ b/docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2014, 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_FTP_ALTERNATIVE_TO_USER 3 "July 04, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_FTP_ALTERNATIVE_TO_USER 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_FTP_ALTERNATIVE_TO_USER \- command to use instead of USER with FTP
@@ -33,11 +33,10 @@ CURLOPT_FTP_ALTERNATIVE_TO_USER \- command to use instead of USER with FTP
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_ALTERNATIVE_TO_USER,
char *cmd);
.SH DESCRIPTION
-Pass a char * as parameter, pointing to a string which will be used to
-authenticate if the usual FTP "USER user" and "PASS password" negotiation
-fails. This is currently only known to be required when connecting to
-Tumbleweed's Secure Transport FTPS server using client certificates for
-authentication.
+Pass a char * as parameter, pointing to a string which is used to authenticate
+if the usual FTP "USER user" and "PASS password" negotiation fails. This is
+currently only known to be required when connecting to Tumbleweed's Secure
+Transport FTPS server using client certificates for authentication.
The application does not have to keep the string around after setting this
option.
@@ -47,15 +46,17 @@ NULL
FTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/foo.bin");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/foo.bin");
+ curl_easy_setopt(curl, CURLOPT_FTP_ALTERNATIVE_TO_USER, "two users");
+ res = curl_easy_perform(curl);
- curl_easy_setopt(curl, CURLOPT_FTP_ALTERNATIVE_TO_USER, "two users");
-
- ret = curl_easy_perform(curl);
-
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -64,4 +65,7 @@ Added in 7.15.5
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_FTP_SKIP_PASV_IP "(3), " CURLOPT_SERVER_RESPONSE_TIMEOUT "(3), "
+.BR CURLOPT_FTP_ACCOUNT (3),
+.BR CURLOPT_FTP_SKIP_PASV_IP (3),
+.BR CURLOPT_SERVER_RESPONSE_TIMEOUT (3),
+.BR CURLOPT_USERNAME (3)
diff --git a/docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.3 b/docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.3
index d3957e816..dd82174dc 100644
--- a/docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.3
+++ b/docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2014, 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_FTP_CREATE_MISSING_DIRS 3 "October 22, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_FTP_CREATE_MISSING_DIRS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_FTP_CREATE_MISSING_DIRS \- create missing directories for FTP and SFTP
@@ -40,16 +40,16 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_CREATE_MISSING_DIRS,
long create);
.SH DESCRIPTION
Pass a long telling libcurl to \fIcreate\fP the dir. If the value is
-\fICURLFTP_CREATE_DIR\fP (1), libcurl will attempt to create any remote
-directory that it fails to "move" into.
+\fICURLFTP_CREATE_DIR\fP (1), libcurl may create any remote directory that it
+fails to "move" into.
For FTP requests, that means a CWD command fails. CWD being the command that
changes working directory.
-For SFTP requests, libcurl will attempt to create the remote directory if it
-cannot obtain a handle to the target-location. The creation will fail if a file
-of the same name as the directory to create already exists or lack of
-permissions prevents creation.
+For SFTP requests, libcurl may create the remote directory if it cannot obtain
+a handle to the target-location. The creation fails if a file of the same name
+as the directory to create already exists or lack of permissions prevents
+creation.
Setting \fIcreate\fP to \fICURLFTP_CREATE_DIR_RETRY\fP (2), tells libcurl to
retry the CWD command again if the subsequent \fBMKD\fP command fails. This is
@@ -63,15 +63,20 @@ CURLFTP_CREATE_DIR_NONE (0)
FTP and SFTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/non-existing/new.txt");
- curl_easy_setopt(curl, CURLOPT_FTP_CREATE_MISSING_DIRS,
- (long)CURLFTP_CREATE_DIR_RETRY);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL,
+ "ftp://example.com/non-existing/new.txt");
+ curl_easy_setopt(curl, CURLOPT_FTP_CREATE_MISSING_DIRS,
+ (long)CURLFTP_CREATE_DIR_RETRY);
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -81,4 +86,5 @@ Added in 7.10.7. SFTP support added in 7.16.3. The retry option was added in
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if the
create value is not.
.SH "SEE ALSO"
-.BR CURLOPT_FTP_FILEMETHOD "(3), " CURLOPT_FTP_USE_EPSV "(3), "
+.BR CURLOPT_FTP_FILEMETHOD (3),
+.BR CURLOPT_FTP_USE_EPSV (3)
diff --git a/docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.3 b/docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.3
index 15d6dcbb7..0c3f6658f 100644
--- a/docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.3
+++ b/docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_FTP_FILEMETHOD 3 "October 22, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_FTP_FILEMETHOD 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_FTP_FILEMETHOD \- select directory traversing method for FTP
@@ -42,11 +42,12 @@ what the standards say should work.
The argument should be one of the following alternatives:
.IP CURLFTPMETHOD_MULTICWD
libcurl does a single CWD operation for each path part in the given URL. For
-deep hierarchies this means many commands. This is how RFC1738 says it should
+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 CURLFTPMETHOD_NOCWD
-libcurl does no CWD at all. libcurl will do SIZE, RETR, STOR etc and give a
-full path to the server for all these commands. This is the fastest behavior.
+libcurl makes no CWD at all. libcurl does SIZE, RETR, STOR etc and gives a
+full path to the server for all these commands. This is the fastest behavior
+since it skips having to change directories.
.IP CURLFTPMETHOD_SINGLECWD
libcurl does one CWD with the full target directory and then operates on the
file \&"normally" (like in the multicwd case). This is somewhat more standards
@@ -57,15 +58,19 @@ CURLFTPMETHOD_MULTICWD
FTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/1/2/3/4/new.txt");
- curl_easy_setopt(curl, CURLOPT_FTP_FILEMETHOD,
- (long)CURLFTPMETHOD_SINGLECWD);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/1/2/3/4/new.txt");
+ curl_easy_setopt(curl, CURLOPT_FTP_FILEMETHOD,
+ (long)CURLFTPMETHOD_SINGLECWD);
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -73,4 +78,5 @@ Added in 7.15.1
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_DIRLISTONLY "(3), " CURLOPT_FTP_SKIP_PASV_IP "(3), "
+.BR CURLOPT_DIRLISTONLY (3),
+.BR CURLOPT_FTP_SKIP_PASV_IP (3)
diff --git a/docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.3 b/docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.3
index 4e97f7466..4f1061b65 100644
--- a/docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.3
+++ b/docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_FTP_SKIP_PASV_IP 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_FTP_SKIP_PASV_IP 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_FTP_SKIP_PASV_IP \- ignore the IP address in the PASV response
@@ -35,13 +35,13 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_SKIP_PASV_IP, long skip);
.SH DESCRIPTION
Pass a long. If \fIskip\fP is set to 1, it instructs libcurl to not use the IP
address the server suggests in its 227-response to libcurl's PASV command when
-libcurl connects the data connection. Instead libcurl will re-use the same IP
-address it already uses for the control connection. But it will use the port
+libcurl connects the data connection. Instead libcurl reuses the same IP
+address it already uses for the control connection. It still uses the port
number from the 227-response.
-This option thus allows libcurl to work around broken server installations
-that due to NATs, firewalls or incompetence report the wrong IP address
-back. Setting the option also reduces the risk for various sorts of client
+This option allows libcurl to work around broken server installations or funny
+network setups that due to NATs, firewalls or incompetence report the wrong IP
+address. Setting this option also reduces the risk for various sorts of client
abuse by malicious servers.
This option has no effect if PORT, EPRT or EPSV is used instead of PASV.
@@ -51,15 +51,19 @@ This option has no effect if PORT, EPRT or EPSV is used instead of PASV.
FTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/file.txt");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/file.txt");
- /* please ignore the IP in the PASV response */
- curl_easy_setopt(curl, CURLOPT_FTP_SKIP_PASV_IP, 1L);
- ret = curl_easy_perform(curl);
+ /* please ignore the IP in the PASV response */
+ curl_easy_setopt(curl, CURLOPT_FTP_SKIP_PASV_IP, 1L);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -67,4 +71,5 @@ Added in 7.14.2
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_FTPPORT "(3), " CURLOPT_FTP_USE_EPRT "(3), "
+.BR CURLOPT_FTPPORT (3),
+.BR CURLOPT_FTP_USE_EPRT (3)
diff --git a/docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.3 b/docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.3
index ac86b8ea4..fb2eb2e76 100644
--- a/docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.3
+++ b/docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_FTP_SSL_CCC 3 "October 22, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_FTP_SSL_CCC 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_FTP_SSL_CCC \- switch off SSL again with FTP after auth
@@ -36,7 +36,7 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_SSL_CCC,
.SH DESCRIPTION
If enabled, this option makes libcurl use CCC (Clear Command Channel). It
shuts down the SSL/TLS layer after authenticating. The rest of the control
-channel communication will be unencrypted. This allows NAT routers to follow
+channel communication remains unencrypted. This allows NAT routers to follow
the FTP transaction. Pass a long using one of the values below
.IP CURLFTPSSL_CCC_NONE
do not attempt to use CCC.
@@ -51,14 +51,18 @@ CURLFTPSSL_CCC_NONE
FTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/file.txt");
- curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_CONTROL);
- /* go back to clear-text FTP after authenticating */
- curl_easy_setopt(curl, CURLOPT_FTP_SSL_CCC, (long)CURLFTPSSL_CCC_ACTIVE);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/file.txt");
+ curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_CONTROL);
+ /* go back to clear-text FTP after authenticating */
+ curl_easy_setopt(curl, CURLOPT_FTP_SSL_CCC, (long)CURLFTPSSL_CCC_ACTIVE);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -66,4 +70,6 @@ Added in 7.16.1
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_USE_SSL "(3), " CURLOPT_FTPSSLAUTH "(3), "
+.BR CURLOPT_FTPSSLAUTH (3),
+.BR CURLOPT_PROTOCOLS_STR (3),
+.BR CURLOPT_USE_SSL (3)
diff --git a/docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.3 b/docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.3
index 1daa363c6..e3707c842 100644
--- a/docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.3
+++ b/docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_FTP_USE_EPRT 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_FTP_USE_EPRT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_FTP_USE_EPRT \- use EPRT for FTP
@@ -35,29 +35,39 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_USE_EPRT, long enabled);
.SH DESCRIPTION
Pass a long. If the value is 1, it tells curl to use the EPRT command when
doing active FTP downloads (which is enabled by
-\fICURLOPT_FTPPORT(3)\fP). Using EPRT means that it will first attempt to use
-EPRT before using PORT, but if you pass zero to this option, it will not try
-using EPRT, only plain PORT.
+\fICURLOPT_FTPPORT(3)\fP). Using EPRT means that libcurl first attempts to use
+EPRT before using PORT, but if you pass zero to this option, it avoids using
+EPRT, only plain PORT.
-If the server is an IPv6 host, this option will have no effect as EPRT is
-necessary then.
+The EPRT command is a slightly newer addition to the FTP protocol than PORT
+and is the preferred command to use since it enables IPv6 to be used. Very old
+FTP servers might not support it, which is why libcurl has a fallback
+mechanism. Sometimes that fallback is not enough and then this option might
+come handy.
+
+If the server is an IPv6 host, this option has no effect as EPRT is necessary
+then.
.SH DEFAULT
.SH PROTOCOLS
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/file.txt");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/file.txt");
- /* contact us back, aka "active" FTP */
- curl_easy_setopt(curl, CURLOPT_FTPPORT, "-");
+ /* contact us back, aka "active" FTP */
+ curl_easy_setopt(curl, CURLOPT_FTPPORT, "-");
- /* FTP the way the neanderthals did it */
- curl_easy_setopt(curl, CURLOPT_FTP_USE_EPRT, 0L);
+ /* FTP the way the neanderthals did it */
+ curl_easy_setopt(curl, CURLOPT_FTP_USE_EPRT, 0L);
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -65,4 +75,5 @@ Added in 7.10.5
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_FTP_USE_EPSV "(3), " CURLOPT_FTPPORT "(3), "
+.BR CURLOPT_FTP_USE_EPSV (3),
+.BR CURLOPT_FTPPORT (3)
diff --git a/docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.3 b/docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.3
index 4344e5f2f..8c255938b 100644
--- a/docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.3
+++ b/docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_FTP_USE_EPSV 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_FTP_USE_EPSV 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_FTP_USE_EPSV \- use EPSV for FTP
@@ -35,26 +35,37 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_USE_EPSV, long epsv);
.SH DESCRIPTION
Pass \fIepsv\fP as a long. If the value is 1, it tells curl to use the EPSV
command when doing passive FTP downloads (which it does by default). Using
-EPSV means that it will first attempt to use EPSV before using PASV, but if
-you pass zero to this option, it will not try using EPSV, only plain PASV.
+EPSV means that libcurl first attempts to use the EPSV command before using
+PASV. If you pass zero to this option, it does not use EPSV, only plain PASV.
-If the server is an IPv6 host, this option will have no effect as of 7.12.3.
+The EPSV command is a slightly newer addition to the FTP protocol than PASV
+and is the preferred command to use since it enables IPv6 to be used. Very old
+FTP servers might not support it, which is why libcurl has a fallback
+mechanism. Sometimes that fallback is not enough and then this option might
+come handy.
+
+If the server is an IPv6 host, this option has no effect.
.SH DEFAULT
1
.SH PROTOCOLS
FTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/old-server/file.txt");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL,
+ "ftp://example.com/old-server/file.txt");
- /* let's shut off this modern feature */
- curl_easy_setopt(curl, CURLOPT_FTP_USE_EPSV, 0L);
+ /* let's shut off this modern feature */
+ curl_easy_setopt(curl, CURLOPT_FTP_USE_EPSV, 0L);
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -62,4 +73,5 @@ Along with FTP
.SH RETURN VALUE
Returns CURLE_OK if FTP is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_FTP_USE_EPRT "(3), " CURLOPT_FTPPORT "(3), "
+.BR CURLOPT_FTP_USE_EPRT (3),
+.BR CURLOPT_FTPPORT (3)
diff --git a/docs/libcurl/opts/CURLOPT_FTP_USE_PRET.3 b/docs/libcurl/opts/CURLOPT_FTP_USE_PRET.3
index d7accb02d..b54ea08cb 100644
--- a/docs/libcurl/opts/CURLOPT_FTP_USE_PRET.3
+++ b/docs/libcurl/opts/CURLOPT_FTP_USE_PRET.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_FTP_USE_PRET 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_FTP_USE_PRET 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_FTP_USE_PRET \- use PRET for FTP
@@ -43,16 +43,21 @@ no effect when using the active FTP transfers mode.
FTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/old-server/file.txt");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL,
+ "ftp://example.com/old-server/file.txt");
- /* a drftpd server, do it! */
- curl_easy_setopt(curl, CURLOPT_FTP_USE_PRET, 1L);
+ /* a drftpd server, do it! */
+ curl_easy_setopt(curl, CURLOPT_FTP_USE_PRET, 1L);
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -60,4 +65,5 @@ Added in 7.20.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_FTP_USE_EPRT "(3), " CURLOPT_FTP_USE_EPSV "(3), "
+.BR CURLOPT_FTP_USE_EPRT (3),
+.BR CURLOPT_FTP_USE_EPSV (3)
diff --git a/docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.3 b/docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.3
index 08c5e6f3d..8f6495463 100644
--- a/docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.3
+++ b/docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_GSSAPI_DELEGATION 3 "October 22, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_GSSAPI_DELEGATION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_GSSAPI_DELEGATION \- allowed GSS-API delegation
@@ -46,14 +46,17 @@ CURLGSSAPI_DELEGATION_NONE
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- /* delegate if okayed by policy */
- curl_easy_setopt(curl, CURLOPT_GSSAPI_DELEGATION,
- (long)CURLGSSAPI_DELEGATION_POLICY_FLAG);
- ret = curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ /* delegate if okayed by policy */
+ curl_easy_setopt(curl, CURLOPT_GSSAPI_DELEGATION,
+ (long)CURLGSSAPI_DELEGATION_POLICY_FLAG);
+ ret = curl_easy_perform(curl);
+ }
}
.fi
@@ -62,4 +65,5 @@ Added in 7.22.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_HTTPAUTH "(3), " CURLOPT_PROXYAUTH "(3), "
+.BR CURLOPT_HTTPAUTH (3),
+.BR CURLOPT_PROXYAUTH (3)
diff --git a/docs/libcurl/opts/CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3 b/docs/libcurl/opts/CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3
index d66050d63..056ba8545 100644
--- a/docs/libcurl/opts/CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3
+++ b/docs/libcurl/opts/CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS \- head start for IPv6 for happy eyeballs
@@ -50,15 +50,18 @@ CURL_HET_DEFAULT (currently defined as 200L)
All except FILE
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS, 300L);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_setopt(curl, CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS, 300L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
- /* always cleanup */
- curl_easy_cleanup(curl);
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
diff --git a/docs/libcurl/opts/CURLOPT_HAPROXYPROTOCOL.3 b/docs/libcurl/opts/CURLOPT_HAPROXYPROTOCOL.3
index 121046892..90a5dfe24 100644
--- a/docs/libcurl/opts/CURLOPT_HAPROXYPROTOCOL.3
+++ b/docs/libcurl/opts/CURLOPT_HAPROXYPROTOCOL.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_HAPROXYPROTOCOL 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_HAPROXYPROTOCOL 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_HAPROXYPROTOCOL \- send HAProxy PROXY protocol v1 header
@@ -48,12 +48,15 @@ Most applications do not need this option.
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_HAPROXYPROTOCOL, 1L);
- ret = curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_HAPROXYPROTOCOL, 1L);
+ ret = curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
diff --git a/docs/libcurl/opts/CURLOPT_HAPROXY_CLIENT_IP.3 b/docs/libcurl/opts/CURLOPT_HAPROXY_CLIENT_IP.3
new file mode 100644
index 000000000..9d12158d1
--- /dev/null
+++ b/docs/libcurl/opts/CURLOPT_HAPROXY_CLIENT_IP.3
@@ -0,0 +1,66 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed 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
+.\" *
+.\" **************************************************************************
+.\"
+.TH CURLOPT_HAPROXY_CLIENT_IP 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
+
+.SH NAME
+CURLOPT_HAPROXY_CLIENT_IP \- set HAProxy PROXY protocol client IP
+.SH SYNOPSIS
+.nf
+#include <curl/curl.h>
+
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HAPROXY_CLIENT_IP,
+ char *client_ip);
+.fi
+.SH DESCRIPTION
+When this parameter is set to a valid IPv4 or IPv6 numerical address, the
+library sends this address as client address in the HAProxy PROXY protocol v1
+header at beginning of the connection.
+
+This option is an alternative to \fICURLOPT_HAPROXYPROTOCOL(3)\fP as that one
+cannot use a specified address.
+.SH DEFAULT
+NULL, no HAProxy header is sent
+.SH PROTOCOLS
+HTTP, HAProxy PROTOCOL
+.SH EXAMPLE
+.nf
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_HAPROXY_CLIENT_IP, "1.1.1.1");
+ ret = curl_easy_perform(curl);
+ }
+}
+.fi
+.SH AVAILABILITY
+Along with HTTP. Added in 8.2.0.
+.SH RETURN VALUE
+Returns CURLE_OK if HTTP is enabled, and CURLE_UNKNOWN_OPTION if not.
+.SH SEE ALSO
+.BR CURLOPT_PROXY "(3), "
+.BR CURLOPT_HAPROXYPROTOCOL "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_HEADER.3 b/docs/libcurl/opts/CURLOPT_HEADER.3
index 4212c1dcb..d3e22b12f 100644
--- a/docs/libcurl/opts/CURLOPT_HEADER.3
+++ b/docs/libcurl/opts/CURLOPT_HEADER.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_HEADER 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_HEADER 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_HEADER \- pass headers to the data stream
@@ -58,13 +58,16 @@ custom HTTP headers!
Most
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_HEADER, 1L);
+ curl_easy_setopt(curl, CURLOPT_HEADER, 1L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -72,5 +75,5 @@ Provided in all libcurl versions.
.SH RETURN VALUE
Returns CURLE_OK.
.SH "SEE ALSO"
-.BR CURLOPT_HEADERFUNCTION "(3), "
-.BR CURLOPT_HTTPHEADER "(3), "
+.BR CURLOPT_HEADERFUNCTION (3),
+.BR CURLOPT_HTTPHEADER (3)
diff --git a/docs/libcurl/opts/CURLOPT_HEADERDATA.3 b/docs/libcurl/opts/CURLOPT_HEADERDATA.3
index 9ffa84c3c..7ff7188fd 100644
--- a/docs/libcurl/opts/CURLOPT_HEADERDATA.3
+++ b/docs/libcurl/opts/CURLOPT_HEADERDATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_HEADERDATA 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_HEADERDATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_HEADERDATA \- pointer to pass to header callback
@@ -37,10 +37,14 @@ Pass a \fIpointer\fP to be used to write the header part of the received data
to.
If \fICURLOPT_WRITEFUNCTION(3)\fP or \fICURLOPT_HEADERFUNCTION(3)\fP is used,
-\fIpointer\fP will be passed in to the respective callback.
+\fIpointer\fP is passed in to the respective callback.
If neither of those options are set, \fIpointer\fP must be a valid FILE * and
-it will be used by a plain fwrite() to write headers to.
+it is used by a plain fwrite() to write headers to.
+
+If you are using libcurl as a win32 DLL, you \fBMUST\fP use a
+\fICURLOPT_WRITEFUNCTION(3)\fP or \fICURLOPT_HEADERFUNCTION(3)\fP if you set
+this option or you might experience crashes.
.SH DEFAULT
NULL
.SH PROTOCOLS
@@ -55,24 +59,27 @@ struct my_info {
static size_t header_callback(char *buffer, size_t size,
size_t nitems, void *userdata)
{
- struct my_info *i = (struct my_info *)userdata;
-
+ struct my_info *i = userdata;
+ printf("shoe size: %d\\n", i->shoesize);
/* now this callback can access the my_info struct */
return nitems * size;
}
-CURL *curl = curl_easy_init();
-if(curl) {
- struct my_info my = { 10, "the cookies are in the cupboard" };
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ struct my_info my = { 10, "the cookies are in the cupboard" };
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, header_callback);
+ curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, header_callback);
- /* pass in custom data to the callback */
- curl_easy_setopt(curl, CURLOPT_HEADERDATA, &my);
+ /* pass in custom data to the callback */
+ curl_easy_setopt(curl, CURLOPT_HEADERDATA, &my);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -80,4 +87,6 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_HEADERFUNCTION "(3), " CURLOPT_WRITEFUNCTION "(3), "
+.BR curl_easy_header (3),
+.BR CURLOPT_HEADERFUNCTION (3),
+.BR CURLOPT_WRITEFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_HEADERFUNCTION.3 b/docs/libcurl/opts/CURLOPT_HEADERFUNCTION.3
index 989d7825b..546f682aa 100644
--- a/docs/libcurl/opts/CURLOPT_HEADERFUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_HEADERFUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_HEADERFUNCTION 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_HEADERFUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_HEADERFUNCTION \- callback that receives header data
@@ -42,36 +42,38 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADERFUNCTION,
Pass a pointer to your callback function, which should match the prototype
shown above.
-This function gets called by libcurl as soon as it has received header
-data. The header callback will be called once for each header and only
+This callback function gets invoked by libcurl as soon as it has received
+header data. The header callback is called once for each header and only
complete header lines are passed on to the callback. Parsing headers is easy
to do using this callback. \fIbuffer\fP points to the delivered data, and the
-size of that data is \fInitems\fP; \fIsize\fP is always 1. Do not assume that
-the header line is null-terminated!
+size of that data is \fInitems\fP; \fIsize\fP is always 1. The provide header
+line is not null-terminated!
The pointer named \fIuserdata\fP is the one you set with the
\fICURLOPT_HEADERDATA(3)\fP option.
-This callback function must return the number of bytes actually taken care of.
-If that amount differs from the amount passed in to your function, it will signal
-an error to the library. This will cause the transfer to get aborted and the
-libcurl function in progress will return \fICURLE_WRITE_ERROR\fP.
+Your callback should return the number of bytes actually taken care of. If
+that amount differs from the amount passed to your callback function, it
+signals an error condition to the library. This causes the transfer to get
+aborted and the libcurl function used returns \fICURLE_WRITE_ERROR\fP.
+
+You can also abort the transfer by returning CURL_WRITEFUNC_ERROR. (7.87.0)
A complete HTTP header that is passed to this function can be up to
\fICURL_MAX_HTTP_HEADER\fP (100K) bytes and includes the final line terminator.
If this option is not set, or if it is set to NULL, but
\fICURLOPT_HEADERDATA(3)\fP is set to anything but NULL, the function used to
-accept response data will be used instead. That is, it will be the function
-specified with \fICURLOPT_WRITEFUNCTION(3)\fP, or if it is not specified or
-NULL - the default, stream-writing function.
+accept response data is used instead. That is the function specified with
+\fICURLOPT_WRITEFUNCTION(3)\fP, or if it is not specified or NULL - the
+default, stream-writing function.
-It's important to note that the callback will be invoked for the headers of
-all responses received after initiating a request and not just the final
+It's important to note that the callback is invoked for the headers of all
+responses received after initiating a request and not just the final
response. This includes all responses which occur during authentication
negotiation. If you need to operate on only the headers from the final
-response, you will need to collect headers in the callback yourself and use
-HTTP status lines, for example, to delimit response boundaries.
+response, you need to collect headers in the callback yourself and use HTTP
+status lines, for example, to delimit response boundaries.
For an HTTP transfer, the status line and the blank line preceding the response
body are both included as headers and passed to this function.
@@ -84,13 +86,16 @@ response-body. 2) it comes after the final header line (CR LF) 3) a Trailer:
header among the regular response-headers mention what header(s) to expect in
the trailer.
-For non-HTTP protocols like FTP, POP3, IMAP and SMTP this function will get
-called with the server responses to the commands that libcurl sends.
+For non-HTTP protocols like FTP, POP3, IMAP and SMTP this function gets called
+with the server responses to the commands that libcurl sends.
+
+A more convenient way to get HTTP headers might be to use
+\fIcurl_easy_header(3)\fP.
.SH LIMITATIONS
libcurl does not unfold HTTP "folded headers" (deprecated since RFC 7230). A
folded header is a header that continues on a subsequent line and starts with
-a whitespace. Such folds will be passed to the header callback as a separate
-one, although strictly it is just a continuation of the previous line.
+a whitespace. Such folds are passed to the header callback as separate ones,
+although strictly they are just continuations of the previous lines.
.SH DEFAULT
Nothing.
.SH PROTOCOLS
@@ -106,13 +111,16 @@ static size_t header_callback(char *buffer, size_t size,
return nitems * size;
}
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, header_callback);
+ curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, header_callback);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -120,5 +128,6 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR curl_easy_header "(3), "
-.BR CURLOPT_HEADERDATA "(3), " CURLOPT_WRITEFUNCTION "(3), "
+.BR curl_easy_header (3),
+.BR CURLOPT_HEADERDATA (3),
+.BR CURLOPT_WRITEFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_HEADEROPT.3 b/docs/libcurl/opts/CURLOPT_HEADEROPT.3
index 4d68a1d33..1a436cad1 100644
--- a/docs/libcurl/opts/CURLOPT_HEADEROPT.3
+++ b/docs/libcurl/opts/CURLOPT_HEADEROPT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_HEADEROPT 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_HEADEROPT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_HEADEROPT \- send HTTP headers to both proxy and host or separately
@@ -37,40 +37,42 @@ Pass a long that is a bitmask of options of how to deal with headers. The two
mutually exclusive options are:
\fBCURLHEADER_UNIFIED\fP - the headers specified in
-\fICURLOPT_HTTPHEADER(3)\fP will be used in requests both to servers and
-proxies. With this option enabled, \fICURLOPT_PROXYHEADER(3)\fP will not have
+\fICURLOPT_HTTPHEADER(3)\fP are used in requests both to servers and
+proxies. With this option enabled, \fICURLOPT_PROXYHEADER(3)\fP does not have
any effect.
\fBCURLHEADER_SEPARATE\fP - makes \fICURLOPT_HTTPHEADER(3)\fP headers only get
sent to a server and not to a proxy. Proxy headers must be set with
\fICURLOPT_PROXYHEADER(3)\fP to get used. Note that if a non-CONNECT request
-is sent to a proxy, libcurl will send both server headers and proxy
-headers. When doing CONNECT, libcurl will send \fICURLOPT_PROXYHEADER(3)\fP
-headers only to the proxy and then \fICURLOPT_HTTPHEADER(3)\fP headers only to
-the server.
+is sent to a proxy, libcurl sends both server headers and proxy headers. When
+doing CONNECT, libcurl sends \fICURLOPT_PROXYHEADER(3)\fP headers only to the
+proxy and then \fICURLOPT_HTTPHEADER(3)\fP headers only to the server.
.SH DEFAULT
CURLHEADER_SEPARATE (changed in 7.42.1, used CURLHEADER_UNIFIED before then)
.SH PROTOCOLS
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- struct curl_slist *list;
- list = curl_slist_append(NULL, "Shoesize: 10");
- list = curl_slist_append(list, "Accept:");
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_PROXY, "http://localhost:8080");
- curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ struct curl_slist *list;
+ list = curl_slist_append(NULL, "Shoesize: 10");
+ list = curl_slist_append(list, "Accept:");
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "http://localhost:8080");
+ curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
- /* HTTPS over a proxy makes a separate CONNECT to the proxy, so tell
- libcurl to not send the custom headers to the proxy. Keep them
- separate! */
- curl_easy_setopt(curl, CURLOPT_HEADEROPT, CURLHEADER_SEPARATE);
- ret = curl_easy_perform(curl);
- curl_slist_free_all(list);
- curl_easy_cleanup(curl);
+ /* HTTPS over a proxy makes a separate CONNECT to the proxy, so tell
+ libcurl to not send the custom headers to the proxy. Keep them
+ separate! */
+ curl_easy_setopt(curl, CURLOPT_HEADEROPT, CURLHEADER_SEPARATE);
+ ret = curl_easy_perform(curl);
+ curl_slist_free_all(list);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -78,4 +80,5 @@ Added in 7.37.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_HTTPHEADER "(3), " CURLOPT_PROXYHEADER "(3), "
+.BR CURLOPT_HTTPHEADER (3),
+.BR CURLOPT_PROXYHEADER (3)
diff --git a/docs/libcurl/opts/CURLOPT_HSTS.3 b/docs/libcurl/opts/CURLOPT_HSTS.3
index 49b5340f3..4708a3cde 100644
--- a/docs/libcurl/opts/CURLOPT_HSTS.3
+++ b/docs/libcurl/opts/CURLOPT_HSTS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 2022 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_HSTS 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_HSTS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_HSTS \- HSTS cache file name
@@ -35,15 +35,15 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HSTS, char *filename);
.SH DESCRIPTION
Make the \fIfilename\fP point to a file name to load an existing HSTS cache
from, and to store the cache in when the easy handle is closed. Setting a file
-name with this option will also enable HSTS for this handle (the equivalent of
+name with this option also enables HSTS for this handle (the equivalent of
setting \fICURLHSTS_ENABLE\fP with \fICURLOPT_HSTS_CTRL(3)\fP).
If the given file does not exist or contains no HSTS entries at startup, the
-HSTS cache will simply start empty. Setting the file name to NULL or "" will
-only enable HSTS without reading from or writing to any file.
+HSTS cache simply starts empty. Setting the file name to NULL or "" only
+enables HSTS without reading from or writing to any file.
-If this option is set multiple times, libcurl will load cache entries from
-each given file but will only store the last used name for later writing.
+If this option is set multiple times, libcurl loads cache entries from each
+given file but only stores the last used name for later writing.
.SH "FILE FORMAT"
The HSTS cache is saved to and loaded from a text file with one entry per
physical line. Each line in the file has the following format:
@@ -65,10 +65,13 @@ NULL, no file name
HTTPS and HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_HSTS, "/home/user/.hsts-cache");
- curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_HSTS, "/home/user/.hsts-cache");
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -76,4 +79,6 @@ Added in 7.74.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_HSTS_CTRL "(3), " CURLOPT_ALTSVC "(3), " CURLOPT_RESOLVE "(3), "
+.BR CURLOPT_ALTSVC (3),
+.BR CURLOPT_HSTS_CTRL (3),
+.BR CURLOPT_RESOLVE (3)
diff --git a/docs/libcurl/opts/CURLOPT_HSTSREADDATA.3 b/docs/libcurl/opts/CURLOPT_HSTSREADDATA.3
index 507f6f63c..71c339321 100644
--- a/docs/libcurl/opts/CURLOPT_HSTSREADDATA.3
+++ b/docs/libcurl/opts/CURLOPT_HSTSREADDATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_HSTSREADDATA 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_HSTSREADDATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_HSTSREADDATA \- pointer passed to the HSTS read callback
@@ -34,8 +34,8 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HSTSREADDATA, void *pointer);
.fi
.SH DESCRIPTION
Data \fIpointer\fP to pass to the HSTS read function. If you use the
-\fICURLOPT_HSTSREADFUNCTION(3)\fP option, this is the pointer you will get as
-input in the 3rd argument to the callback.
+\fICURLOPT_HSTSREADFUNCTION(3)\fP option, this is the pointer you get as input
+in the 3rd argument to the callback.
This option does not enable HSTS, you need to use \fICURLOPT_HSTS_CTRL(3)\fP to
do that.
@@ -45,22 +45,31 @@ NULL
This feature is only used for HTTP(S) transfer.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-struct MyData this;
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+struct MyData {
+ void *custom;
+};
- /* pass pointer that gets passed in to the
- CURLOPT_HSTSREADFUNCTION callback */
- curl_easy_setopt(curl, CURLOPT_HSTSREADDATA, &this);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ struct MyData this;
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
- curl_easy_perform(curl);
+ /* pass pointer that gets passed in to the
+ CURLOPT_HSTSREADFUNCTION callback */
+ curl_easy_setopt(curl, CURLOPT_HSTSREADDATA, &this);
+
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
Added in 7.74.0
.SH RETURN VALUE
-This will return CURLE_OK.
+This returns CURLE_OK.
.SH "SEE ALSO"
-.BR CURLOPT_HSTSREADFUNCTION "(3), " CURLOPT_HSTSWRITEDATA "(3), "
-.BR CURLOPT_HSTSWRITEFUNCTION "(3), "
+.BR CURLOPT_HSTS (3),
+.BR CURLOPT_HSTSREADFUNCTION (3),
+.BR CURLOPT_HSTSWRITEDATA (3),
+.BR CURLOPT_HSTSWRITEFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_HSTSREADFUNCTION.3 b/docs/libcurl/opts/CURLOPT_HSTSREADFUNCTION.3
index c6c7590d7..6a406fffb 100644
--- a/docs/libcurl/opts/CURLOPT_HSTSREADFUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_HSTSREADFUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_HSTSREADFUNCTION 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_HSTSREADFUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_HSTSREADFUNCTION \- read callback for HSTS hosts
@@ -37,7 +37,7 @@ struct curl_hstsentry {
char expire[18]; /* YYYYMMDD HH:MM:SS [null-terminated] */
};
-CURLSTScode hstsread(CURL *easy, struct curl_hstsentry *sts, void *userp);
+CURLSTScode hstsread(CURL *easy, struct curl_hstsentry *sts, void *clientp);
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HSTSREADFUNCTION, hstsread);
.fi
@@ -47,8 +47,8 @@ Pass a pointer to your callback function, as the prototype shows above.
This callback function gets called by libcurl repeatedly when it populates the
in-memory HSTS cache.
-Set the \fIuserp\fP argument with the \fICURLOPT_HSTSREADDATA(3)\fP option or
-it will be NULL.
+Set the \fIclientp\fP argument with the \fICURLOPT_HSTSREADDATA(3)\fP option
+or it is NULL.
When this callback is invoked, the \fIsts\fP pointer points to a populated
struct: Copy the host name to \fIname\fP (no longer than \fInamelen\fP
@@ -59,8 +59,8 @@ FALSE. Set \fIexpire\fP to a date stamp or a zero length string for *forever*
The callback should return \fICURLSTS_OK\fP if it returns a name and is
prepared to be called again (for another host) or \fICURLSTS_DONE\fP if it has
no entry to return. It can also return \fICURLSTS_FAIL\fP to signal
-error. Returning \fICURLSTS_FAIL\fP will stop the transfer from being
-performed and make \fICURLE_ABORTED_BY_CALLBACK\fP get returned.
+error. Returning \fICURLSTS_FAIL\fP stops the transfer from being performed
+and make \fICURLE_ABORTED_BY_CALLBACK\fP get returned.
This option does not enable HSTS, you need to use \fICURLOPT_HSTS_CTRL(3)\fP to
do that.
@@ -70,21 +70,40 @@ NULL - no callback.
This feature is only used for HTTP(S) transfer.
.SH EXAMPLE
.nf
+struct priv {
+ void *custom;
+};
+
+static CURLSTScode hsts_cb(CURL *easy, struct curl_hstsentry *sts,
+ void *clientp)
{
- /* set HSTS read callback */
- curl_easy_setopt(curl, CURLOPT_HSTSREADFUNCTION, hstsread);
+ /* populate the struct as documented */
+ return CURLSTS_OK;
+}
- /* pass in suitable argument to the callback */
- curl_easy_setopt(curl, CURLOPT_HSTSREADDATA, &hstspreload[0]);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ struct priv my_stuff;
+ CURLcode res;
- result = curl_easy_perform(curl);
+ /* set HSTS read callback */
+ curl_easy_setopt(curl, CURLOPT_HSTSREADFUNCTION, hsts_cb);
+
+ /* pass in suitable argument to the callback */
+ curl_easy_setopt(curl, CURLOPT_HSTSREADDATA, &my_stuff);
+
+ res = curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
Added in 7.74.0
.SH RETURN VALUE
-This will return CURLE_OK.
+This returns CURLE_OK.
.SH "SEE ALSO"
-.BR CURLOPT_HSTSREADDATA "(3), " CURLOPT_HSTSWRITEFUNCTION "(3), "
-.BR CURLOPT_HSTS "(3), " CURLOPT_HSTS_CTRL "(3), "
-
+.BR CURLOPT_HSTS (3),
+.BR CURLOPT_HSTS_CTRL (3),
+.BR CURLOPT_HSTSREADDATA (3),
+.BR CURLOPT_HSTSWRITEFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_HSTSWRITEDATA.3 b/docs/libcurl/opts/CURLOPT_HSTSWRITEDATA.3
index 89d41c3b7..1a5226c62 100644
--- a/docs/libcurl/opts/CURLOPT_HSTSWRITEDATA.3
+++ b/docs/libcurl/opts/CURLOPT_HSTSWRITEDATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_HSTSWRITEDATA 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_HSTSWRITEDATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_HSTSWRITEDATA \- pointer passed to the HSTS write callback
@@ -34,7 +34,7 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HSTSWRITEDATA, void *pointer);
.fi
.SH DESCRIPTION
Data \fIpointer\fP to pass to the HSTS write function. If you use the
-\fICURLOPT_HSTSWRITEFUNCTION(3)\fP option, this is the pointer you will get as
+\fICURLOPT_HSTSWRITEFUNCTION(3)\fP option, this is the pointer you get as
input in the fourth argument to the callback.
This option does not enable HSTS, you need to use \fICURLOPT_HSTS_CTRL(3)\fP to
@@ -45,22 +45,31 @@ NULL
This feature is only used for HTTP(S) transfer.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-struct MyData this;
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+struct MyData {
+ void *custom;
+};
- /* pass pointer that gets passed in to the
- CURLOPT_HSTSWRITEFUNCTION callback */
- curl_easy_setopt(curl, CURLOPT_HSTSWRITEDATA, &this);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ struct MyData this;
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
- curl_easy_perform(curl);
+ /* pass pointer that gets passed in to the
+ CURLOPT_HSTSWRITEFUNCTION callback */
+ curl_easy_setopt(curl, CURLOPT_HSTSWRITEDATA, &this);
+
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
Added in 7.74.0
.SH RETURN VALUE
-This will return CURLE_OK.
+This returns CURLE_OK.
.SH "SEE ALSO"
-.BR CURLOPT_HSTSWRITEFUNCTION "(3), " CURLOPT_HSTSREADDATA "(3), "
-.BR CURLOPT_HSTSREADFUNCTION "(3), "
+.BR CURLOPT_HSTS (3),
+.BR CURLOPT_HSTSREADDATA (3),
+.BR CURLOPT_HSTSREADFUNCTION (3),
+.BR CURLOPT_HSTSWRITEFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_HSTSWRITEFUNCTION.3 b/docs/libcurl/opts/CURLOPT_HSTSWRITEFUNCTION.3
index 1e438597c..5817eba5a 100644
--- a/docs/libcurl/opts/CURLOPT_HSTSWRITEFUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_HSTSWRITEFUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_HSTSWRITEFUNCTION 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_HSTSWRITEFUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_HSTSWRITEFUNCTION \- write callback for HSTS hosts
@@ -43,7 +43,7 @@ struct curl_index {
};
CURLSTScode hstswrite(CURL *easy, struct curl_hstsentry *sts,
- struct curl_index *count, void *userp);
+ struct curl_index *count, void *clientp);
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HSTSWRITEFUNCTION, hstswrite);
.fi
@@ -54,9 +54,8 @@ This callback function gets called by libcurl repeatedly to allow the
application to store the in-memory HSTS cache when libcurl is about to discard
it.
-Set the \fIuserp\fP argument with the \fICURLOPT_HSTSWRITEDATA(3)\fP option or
-it will be NULL.
-
+Set the \fIclientp\fP argument with the \fICURLOPT_HSTSWRITEDATA(3)\fP option
+or it is NULL.
When the callback is invoked, the \fIsts\fP pointer points to a populated
struct: Read the host name to 'name' (it is \fInamelen\fP bytes long and null
terminated. The \fIincludeSubDomains\fP field is non-zero if the entry matches
@@ -64,7 +63,7 @@ subdomains. The \fIexpire\fP string is a date stamp null-terminated string
using the syntax YYYYMMDD HH:MM:SS.
The callback should return \fICURLSTS_OK\fP if it succeeded and is prepared to
-be called again (for another host) or \fICURLSTS_DONE\fP if there's nothing
+be called again (for another host) or \fICURLSTS_DONE\fP if there is nothing
more to do. It can also return \fICURLSTS_FAIL\fP to signal error.
This option does not enable HSTS, you need to use \fICURLOPT_HSTS_CTRL(3)\fP to
@@ -75,20 +74,40 @@ NULL - no callback.
This feature is only used for HTTP(S) transfer.
.SH EXAMPLE
.nf
+struct priv {
+ void *custom;
+};
+
+static CURLSTScode hswr_cb(CURL *easy, struct curl_hstsentry *sts,
+ struct curl_index *count, void *clientp)
{
- /* set HSTS read callback */
- curl_easy_setopt(curl, CURLOPT_HSTSWRITEFUNCTION, hstswrite);
+ /* save the passed in HSTS data somewhere */
+ return CURLSTS_OK;
+}
+
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ struct priv my_stuff;
+ CURLcode res;
+
+ /* set HSTS read callback */
+ curl_easy_setopt(curl, CURLOPT_HSTSWRITEFUNCTION, hswr_cb);
- /* pass in suitable argument to the callback */
- curl_easy_setopt(curl, CURLOPT_HSTSWRITEDATA, &hstspreload[0]);
+ /* pass in suitable argument to the callback */
+ curl_easy_setopt(curl, CURLOPT_HSTSWRITEDATA, &my_stuff);
- result = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
Added in 7.74.0
.SH RETURN VALUE
-This will return CURLE_OK.
+This returns CURLE_OK.
.SH "SEE ALSO"
-.BR CURLOPT_HSTSWRITEDATA "(3), " CURLOPT_HSTSWRITEFUNCTION "(3), "
-.BR CURLOPT_HSTS "(3), " CURLOPT_HSTS_CTRL "(3), "
+.BR CURLOPT_HSTS (3),
+.BR CURLOPT_HSTS_CTRL (3),
+.BR CURLOPT_HSTSWRITEDATA (3),
+.BR CURLOPT_HSTSWRITEFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_HSTS_CTRL.3 b/docs/libcurl/opts/CURLOPT_HSTS_CTRL.3
index 3bf4e4be9..b65e15d76 100644
--- a/docs/libcurl/opts/CURLOPT_HSTS_CTRL.3
+++ b/docs/libcurl/opts/CURLOPT_HSTS_CTRL.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 2022, 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_HSTS_CTRL 3 "October 22, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_HSTS_CTRL 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_HSTS_CTRL \- control HSTS behavior
@@ -38,9 +38,9 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HSTS_CTRL, long bitmask);
.SH DESCRIPTION
HSTS (HTTP Strict Transport Security) means that an HTTPS server can instruct
the client to not contact it again over clear-text HTTP for a certain period
-into the future. libcurl will then automatically redirect HTTP attempts to
-such hosts to instead use HTTPS. This is done by libcurl retaining this
-knowledge in an in-memory cache.
+into the future. libcurl then automatically redirects HTTP attempts to such
+hosts to instead use HTTPS. This is done by libcurl retaining this knowledge
+in an in-memory cache.
Populate the long \fIbitmask\fP with the correct set of features to instruct
libcurl how to handle HSTS for the transfers using this handle.
@@ -56,10 +56,13 @@ to the file when closing the handle.
HTTPS and HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_HSTS_CTRL, (long)CURLHSTS_ENABLE);
- curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_HSTS_CTRL, (long)CURLHSTS_ENABLE);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -67,5 +70,7 @@ Added in 7.74.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_HSTS "(3), " CURLOPT_CONNECT_TO "(3), " CURLOPT_RESOLVE "(3), "
-.BR CURLOPT_ALTSVC "(3), "
+.BR CURLOPT_ALTSVC (3),
+.BR CURLOPT_CONNECT_TO (3),
+.BR CURLOPT_HSTS (3),
+.BR CURLOPT_RESOLVE (3)
diff --git a/docs/libcurl/opts/CURLOPT_HTTP09_ALLOWED.3 b/docs/libcurl/opts/CURLOPT_HTTP09_ALLOWED.3
index 924c3535b..37147315d 100644
--- a/docs/libcurl/opts/CURLOPT_HTTP09_ALLOWED.3
+++ b/docs/libcurl/opts/CURLOPT_HTTP09_ALLOWED.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_HTTP09_ALLOWED 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_HTTP09_ALLOWED 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_HTTP09_ALLOWED \- allow HTTP/0.9 response
@@ -47,12 +47,15 @@ responses.
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_HTTP09_ALLOWED, 1L);
- ret = curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_HTTP09_ALLOWED, 1L);
+ ret = curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -60,4 +63,5 @@ Option added in 7.64.0, present along with HTTP.
.SH RETURN VALUE
Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_SSLVERSION "(3), " CURLOPT_HTTP_VERSION "(3), "
+.BR CURLOPT_HTTP_VERSION (3),
+.BR CURLOPT_SSLVERSION (3)
diff --git a/docs/libcurl/opts/CURLOPT_HTTP200ALIASES.3 b/docs/libcurl/opts/CURLOPT_HTTP200ALIASES.3
index ea95976c6..9cf438089 100644
--- a/docs/libcurl/opts/CURLOPT_HTTP200ALIASES.3
+++ b/docs/libcurl/opts/CURLOPT_HTTP200ALIASES.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_HTTP200ALIASES 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_HTTP200ALIASES 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_HTTP200ALIASES \- alternative matches for HTTP 200 OK
@@ -36,10 +36,9 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP200ALIASES,
Pass a pointer to a linked list of \fIaliases\fP to be treated as valid HTTP
200 responses. Some servers respond with a custom header response line. For
example, SHOUTcast servers respond with "ICY 200 OK". Also some old Icecast
-1.3.x servers will respond like that for certain user agent headers or in
-absence of such. By including this string in your list of aliases, the
-response will be treated as a valid HTTP header line such as "HTTP/1.0 200
-OK".
+1.3.x servers respond like that for certain user agent headers or in absence
+of such. By including this string in your list of aliases, the response gets
+treated as a valid HTTP header line such as "HTTP/1.0 200 OK".
The linked list should be a fully valid list of struct curl_slist structs, and
be properly filled in. Use \fIcurl_slist_append(3)\fP to create the list and
@@ -53,17 +52,20 @@ NULL
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- struct curl_slist *list;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ struct curl_slist *list;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- list = curl_slist_append(NULL, "ICY 200 OK");
- list = curl_slist_append(list, "WEIRDO 99 FINE");
+ list = curl_slist_append(NULL, "ICY 200 OK");
+ list = curl_slist_append(list, "WEIRDO 99 FINE");
- curl_easy_setopt(curl, CURLOPT_HTTP200ALIASES, list);
- curl_easy_perform(curl);
- curl_slist_free_all(list); /* free the list again */
+ curl_easy_setopt(curl, CURLOPT_HTTP200ALIASES, list);
+ curl_easy_perform(curl);
+ curl_slist_free_all(list); /* free the list again */
+ }
}
.fi
.SH AVAILABILITY
@@ -71,4 +73,5 @@ Added in 7.10.3
.SH RETURN VALUE
Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_HTTP_VERSION "(3), "
+.BR CURLOPT_HTTP09_ALLOWED (3),
+.BR CURLOPT_HTTP_VERSION (3)
diff --git a/docs/libcurl/opts/CURLOPT_HTTPAUTH.3 b/docs/libcurl/opts/CURLOPT_HTTPAUTH.3
index c9670b2a4..b4884ba80 100644
--- a/docs/libcurl/opts/CURLOPT_HTTPAUTH.3
+++ b/docs/libcurl/opts/CURLOPT_HTTPAUTH.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_HTTPAUTH 3 "October 22, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_HTTPAUTH 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_HTTPAUTH \- HTTP server authentication methods to try
@@ -35,9 +35,9 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPAUTH, long bitmask);
Pass a long as parameter, which is set to a bitmask, to tell libcurl which
authentication method(s) you want it to use speaking to the remote server.
-The available bits are listed below. If more than one bit is set, libcurl will
-first query the site to see which authentication methods it supports and then
-pick the best one you allow it to use. For some methods, this will induce an
+The available bits are listed below. If more than one bit is set, libcurl
+first queries the host to see which authentication methods it supports and
+then picks the best one you allow it to use. For some methods, this induces an
extra network round-trip. Set the actual name and password with the
\fICURLOPT_USERPWD(3)\fP option or with the \fICURLOPT_USERNAME(3)\fP and the
\fICURLOPT_PASSWORD(3)\fP options.
@@ -50,14 +50,14 @@ that is in wide-spread use and supported virtually everywhere. This sends
the user name and password over the network in plain text, easily captured by
others.
.IP CURLAUTH_DIGEST
-HTTP Digest authentication. Digest authentication is defined in RFC2617 and
+HTTP Digest authentication. Digest authentication is defined in RFC 2617 and
is a more secure way to do authentication over public networks than the
regular old-fashioned Basic method.
.IP CURLAUTH_DIGEST_IE
HTTP Digest authentication with an IE flavor. Digest authentication is
-defined in RFC2617 and is a more secure way to do authentication over public
+defined in RFC 2617 and is a more secure way to do authentication over public
networks than the regular old-fashioned Basic method. The IE flavor is simply
-that libcurl will use a special "quirk" that IE is known to have used before
+that libcurl uses a special "quirk" that IE is known to have used before
version 7 and that some servers require the client to use.
.IP CURLAUTH_BEARER
HTTP Bearer token authentication, used primarily in OAuth 2.0 protocol.
@@ -74,16 +74,16 @@ HTTP NTLM authentication. A proprietary protocol invented and used by
Microsoft. It uses a challenge-response and hash concept similar to Digest, to
prevent the password from being eavesdropped.
-You need to build libcurl with either OpenSSL, GnuTLS or NSS support for this
+You need to build libcurl with either OpenSSL or GnuTLS support for this
option to work, or build libcurl on Windows with SSPI support.
.IP CURLAUTH_NTLM_WB
NTLM delegating to winbind helper. Authentication is performed by a separate
binary application that is executed when needed. The name of the application
is specified at compile time but is typically \fB/usr/bin/ntlm_auth\fP.
-Note that libcurl will fork when necessary to run the winbind application and
-kill it when complete, calling \fBwaitpid()\fP to await its exit when done. On
-POSIX operating systems, killing the process will cause a SIGCHLD signal to be
+Note that libcurl forks when necessary to run the winbind application and kill
+it when complete, calling \fBwaitpid()\fP to await its exit when done. On
+POSIX operating systems, killing the process causes a SIGCHLD signal to be
raised (regardless of whether \fICURLOPT_NOSIGNAL(3)\fP is set), which must be
handled intelligently by the application. In particular, the application must
not unconditionally call wait() in its SIGCHLD signal handler to avoid being
@@ -91,12 +91,11 @@ subject to a race condition. This behavior is subject to change in future
versions of libcurl.
.IP CURLAUTH_ANY
This is a convenience macro that sets all bits and thus makes libcurl pick any
-it finds suitable. libcurl will automatically select the one it finds most
-secure.
+it finds suitable. libcurl automatically selects the one it finds most secure.
.IP CURLAUTH_ANYSAFE
This is a convenience macro that sets all bits except Basic and thus makes
-libcurl pick any it finds suitable. libcurl will automatically select the one
-it finds most secure.
+libcurl pick any it finds suitable. libcurl automatically selects the one it
+finds most secure.
.IP CURLAUTH_ONLY
This is a meta symbol. OR this value together with a single specific auth
value to force libcurl to probe for unrestricted auth and if not, only that
@@ -110,14 +109,17 @@ CURLAUTH_BASIC
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- /* allow whatever auth the server speaks */
- curl_easy_setopt(curl, CURLOPT_HTTPAUTH, (long)CURLAUTH_ANY);
- curl_easy_setopt(curl, CURLOPT_USERPWD, "james:bond");
- ret = curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ /* allow whatever auth the server speaks */
+ curl_easy_setopt(curl, CURLOPT_HTTPAUTH, (long)CURLAUTH_ANY);
+ curl_easy_setopt(curl, CURLOPT_USERPWD, "james:bond");
+ ret = curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -137,4 +139,6 @@ Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_NOT_BUILT_IN if the bitmask specified no supported authentication
methods.
.SH "SEE ALSO"
-.BR CURLOPT_PROXYAUTH "(3), " CURLOPT_USERPWD "(3), "
+.BR CURLOPT_PASSWORD (3),
+.BR CURLOPT_PROXYAUTH (3),
+.BR CURLOPT_USERNAME (3)
diff --git a/docs/libcurl/opts/CURLOPT_HTTPGET.3 b/docs/libcurl/opts/CURLOPT_HTTPGET.3
index 6aee9de68..503057b34 100644
--- a/docs/libcurl/opts/CURLOPT_HTTPGET.3
+++ b/docs/libcurl/opts/CURLOPT_HTTPGET.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_HTTPGET 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_HTTPGET 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_HTTPGET \- ask for an HTTP GET request
@@ -37,7 +37,7 @@ Pass a long. If \fIuseget\fP is 1, this forces the HTTP request to get back to
using GET. Usable if a POST, HEAD, PUT, etc has been used previously using the
same curl \fIhandle\fP.
-When setting \fICURLOPT_HTTPGET(3)\fP to 1, it will automatically set
+When setting \fICURLOPT_HTTPGET(3)\fP to 1, libcurl automatically sets
\fICURLOPT_NOBODY(3)\fP to 0 and \fICURLOPT_UPLOAD(3)\fP to 0.
Setting this option to zero has no effect. Applications need to explicitly
@@ -49,15 +49,18 @@ reset a handle to default method, consider \fIcurl_easy_reset(3)\fP.
HTTP(S)
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* use a GET to fetch this */
- curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
+ /* use a GET to fetch this */
+ curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -65,5 +68,7 @@ Along with HTTP
.SH RETURN VALUE
Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_NOBODY "(3), " CURLOPT_UPLOAD "(3), " CURLOPT_POST "(3), "
-.BR curl_easy_reset "(3) "
+.BR curl_easy_reset (3),
+.BR CURLOPT_NOBODY (3),
+.BR CURLOPT_POST (3),
+.BR CURLOPT_UPLOAD (3)
diff --git a/docs/libcurl/opts/CURLOPT_HTTPHEADER.3 b/docs/libcurl/opts/CURLOPT_HTTPHEADER.3
index a7e4913de..d60b9dd71 100644
--- a/docs/libcurl/opts/CURLOPT_HTTPHEADER.3
+++ b/docs/libcurl/opts/CURLOPT_HTTPHEADER.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_HTTPHEADER 3 "September 28, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_HTTPHEADER 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_HTTPHEADER \- set of HTTP headers
@@ -47,24 +47,26 @@ The linked list should be a fully valid list of \fBstruct curl_slist\fP
structs properly filled in. Use \fIcurl_slist_append(3)\fP to create the list
and \fIcurl_slist_free_all(3)\fP to clean up an entire list. If you add a
header that is otherwise generated and used by libcurl internally, your added
-one will be used instead. If you add a header with no content as in 'Accept:'
-(no data on the right side of the colon), the internally used header will get
-disabled. With this option you can add new headers, replace internal headers
-and remove internal headers. To add a header with no content (nothing to the
-right side of the colon), use the form 'name;' (note the ending semicolon).
+header is used instead. If you add a header with no content as in 'Accept:'
+(no data on the right side of the colon), the internally used header is
+disabled/removed. With this option you can add new headers, replace internal
+headers and remove internal headers. To add a header with no content (nothing
+to the right side of the colon), use the form 'name;' (note the ending
+semicolon).
The headers included in the linked list \fBmust not\fP be CRLF-terminated,
-because libcurl adds CRLF after each header item. Failure to comply with this
-will result in strange bugs because the server will most likely ignore part of
-the headers you specified.
+because libcurl adds CRLF after each header item itself. Failure to comply
+with this might result in strange behavior. libcurl passes on the verbatim
+strings you give it, without any filter or other safe guards. That includes
+white space and control characters.
The first line in an HTTP request (containing the method, usually a GET or
POST) is not a header and cannot be replaced using this option. Only the lines
following the request-line are headers. Adding this method line in this list
-of headers will only cause your request to send an invalid header. Use
+of headers only causes your request to send an invalid header. Use
\fICURLOPT_CUSTOMREQUEST(3)\fP to change the method.
-When this option is passed to \fIcurl_easy_setopt(3)\fP, libcurl will not copy
+When this option is passed to \fIcurl_easy_setopt(3)\fP, libcurl does not copy
the entire list so you \fBmust\fP keep it around until you no longer use this
\fIhandle\fP for a transfer before you call \fIcurl_slist_free_all(3)\fP on
the list.
@@ -75,16 +77,16 @@ The most commonly replaced HTTP headers have "shortcuts" in the options
\fICURLOPT_COOKIE(3)\fP, \fICURLOPT_USERAGENT(3)\fP and
\fICURLOPT_REFERER(3)\fP. We recommend using those.
-There's an alternative option that sets or replaces headers only for requests
+There is an alternative option that sets or replaces headers only for requests
that are sent with CONNECT to a proxy: \fICURLOPT_PROXYHEADER(3)\fP. Use
\fICURLOPT_HEADEROPT(3)\fP to control the behavior.
.SH SPECIFIC HTTP HEADERS
-Setting some specific headers will cause libcurl to act differently.
+Setting some specific headers causes libcurl to act differently.
.IP "Host:"
-The specified host name will be used for cookie matching if the cookie engine
-is also enabled for this transfer. If the request is done over HTTP/2 or
-HTTP/3, the custom host name will instead be used in the ":authority" header
-field and Host: will not be sent at all over the wire.
+The specified host name is used for cookie matching if the cookie engine is
+also enabled for this transfer. If the request is done over HTTP/2 or HTTP/3,
+the custom host name is instead used in the ":authority" header field and
+Host: is not sent at all over the wire.
.IP "Transfer-Encoding: chunked"
Tells libcurl the upload is to be done using this chunked encoding instead of
providing the Content-Length: field in the request.
@@ -101,7 +103,7 @@ MIME mail is only composed of alternative representations of the same data
(i.e.: HTML and plain text), this header must be set to "multipart/alternative".
In all cases the value must be of the form "multipart/*" to respect the
document structure and may not include the "boundary=" parameter.
-.P
+
Other specific headers that do not have a libcurl default value but are
strongly desired by mail delivery and user agents should also be included.
These are "From:", "To:", "Date:" and "Subject:" among others and their
@@ -116,40 +118,43 @@ the headers. They may be private or otherwise sensitive to leak.
Use \fICURLOPT_HEADEROPT(3)\fP to make the headers only get sent to where you
intend them to get sent.
-Custom headers are sent in all requests done by the easy handles, which
-implies that if you tell libcurl to follow redirects
-(\fICURLOPT_FOLLOWLOCATION(3)\fP), the same set of custom headers will be sent
-in the subsequent request. Redirects can of course go to other hosts and thus
-those servers will get all the contents of your custom headers too.
+Custom headers are sent in all requests done by the easy handle, which implies
+that if you tell libcurl to follow redirects
+(\fICURLOPT_FOLLOWLOCATION(3)\fP), the same set of custom headers is sent in
+the subsequent request. Redirects can of course go to other hosts and thus
+those servers get all the contents of your custom headers too.
-Starting in 7.58.0, libcurl will specifically prevent "Authorization:" headers
+Starting in 7.58.0, libcurl specifically prevents "Authorization:" headers
from being sent to other hosts than the first used one, unless specifically
permitted with the \fICURLOPT_UNRESTRICTED_AUTH(3)\fP option.
-Starting in 7.64.0, libcurl will specifically prevent "Cookie:" headers
-from being sent to other hosts than the first used one, unless specifically
-permitted with the \fICURLOPT_UNRESTRICTED_AUTH(3)\fP option.
+Starting in 7.64.0, libcurl specifically prevents "Cookie:" headers from being
+sent to other hosts than the first used one, unless specifically permitted
+with the \fICURLOPT_UNRESTRICTED_AUTH(3)\fP option.
.SH DEFAULT
NULL
.SH PROTOCOLS
HTTP, IMAP and SMTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
+int main(void)
+{
+ CURL *curl = curl_easy_init();
-struct curl_slist *list = NULL;
+ struct curl_slist *list = NULL;
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- list = curl_slist_append(list, "Shoesize: 10");
- list = curl_slist_append(list, "Accept:");
+ list = curl_slist_append(list, "Shoesize: 10");
+ list = curl_slist_append(list, "Accept:");
- curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
+ curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
- curl_slist_free_all(list); /* free the list */
+ curl_slist_free_all(list); /* free the list */
+ }
}
.fi
@@ -158,6 +163,9 @@ As long as HTTP is enabled. Use in MIME mail added in 7.56.0.
.SH RETURN VALUE
Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_CUSTOMREQUEST "(3), " CURLOPT_HEADEROPT "(3), "
-.BR CURLOPT_PROXYHEADER "(3), " CURLOPT_HEADER "(3), "
-.BR CURLOPT_MIMEPOST "(3), " curl_mime_init "(3)"
+.BR curl_mime_init (3),
+.BR CURLOPT_CUSTOMREQUEST (3),
+.BR CURLOPT_HEADER (3),
+.BR CURLOPT_HEADEROPT (3),
+.BR CURLOPT_MIMEPOST (3),
+.BR CURLOPT_PROXYHEADER (3)
diff --git a/docs/libcurl/opts/CURLOPT_HTTPPOST.3 b/docs/libcurl/opts/CURLOPT_HTTPPOST.3
index edd47709d..e55a023a2 100644
--- a/docs/libcurl/opts/CURLOPT_HTTPPOST.3
+++ b/docs/libcurl/opts/CURLOPT_HTTPPOST.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_HTTPPOST 3 "October 03, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_HTTPPOST 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_HTTPPOST \- multipart formpost content
@@ -45,7 +45,7 @@ transfer is alive and is using it.
Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header.
You can disable this header with \fICURLOPT_HTTPHEADER(3)\fP.
-When setting \fICURLOPT_HTTPPOST(3)\fP, it will automatically set
+When setting \fICURLOPT_HTTPPOST(3)\fP, libcurl automatically sets
\fICURLOPT_NOBODY(3)\fP to 0.
.SH DEFAULT
NULL
@@ -53,32 +53,50 @@ NULL
HTTP
.SH EXAMPLE
.nf
-/* Fill in the file upload field. This makes libcurl load data from
- the given file name when curl_easy_perform() is called. */
-curl_formadd(&formpost,
- &lastptr,
- CURLFORM_COPYNAME, "sendfile",
- CURLFORM_FILE, "postit2.c",
- CURLFORM_END);
+int main(void)
+{
+ struct curl_httppost *formpost;
+ struct curl_httppost *lastptr;
-/* Fill in the filename field */
-curl_formadd(&formpost,
- &lastptr,
- CURLFORM_COPYNAME, "filename",
- CURLFORM_COPYCONTENTS, "postit2.c",
- CURLFORM_END);
+ /* Fill in the file upload field. This makes libcurl load data from
+ the given file name when curl_easy_perform() is called. */
+ curl_formadd(&formpost,
+ &lastptr,
+ CURLFORM_COPYNAME, "sendfile",
+ CURLFORM_FILE, "postit2.c",
+ CURLFORM_END);
-/* Fill in the submit field too, even if this is rarely needed */
-curl_formadd(&formpost,
- &lastptr,
- CURLFORM_COPYNAME, "submit",
- CURLFORM_COPYCONTENTS, "send",
- CURLFORM_END);
+ /* Fill in the filename field */
+ curl_formadd(&formpost,
+ &lastptr,
+ CURLFORM_COPYNAME, "filename",
+ CURLFORM_COPYCONTENTS, "postit2.c",
+ CURLFORM_END);
+
+ /* Fill in the submit field too, even if this is rarely needed */
+ curl_formadd(&formpost,
+ &lastptr,
+ CURLFORM_COPYNAME, "submit",
+ CURLFORM_COPYCONTENTS, "send",
+ CURLFORM_END);
+
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
+ curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
+ curl_formfree(formpost);
+}
.fi
.SH AVAILABILITY
As long as HTTP is enabled. Deprecated in 7.56.0.
.SH RETURN VALUE
Returns CURLE_OK if HTTP is enabled, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_POSTFIELDS "(3), " CURLOPT_POST "(3), " CURLOPT_MIMEPOST "(3),"
-.BR curl_formadd "(3), " curl_formfree "(3), " curl_mime_init "(3)"
+.BR curl_formadd (3),
+.BR curl_formfree (3),
+.BR curl_mime_init (3),
+.BR CURLOPT_MIMEPOST (3),
+.BR CURLOPT_POST (3),
+.BR CURLOPT_POSTFIELDS (3)
diff --git a/docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.3 b/docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.3
index 276a9ff4c..7f953107f 100644
--- a/docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.3
+++ b/docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_HTTPPROXYTUNNEL 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_HTTPPROXYTUNNEL 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_HTTPPROXYTUNNEL \- tunnel through HTTP proxy
@@ -48,7 +48,7 @@ To suppress proxy CONNECT response headers from user callbacks use
HTTP proxies can generally only speak HTTP (for obvious reasons), which makes
libcurl convert non-HTTP requests to HTTP when using an HTTP proxy without
this tunnel option set. For example, asking for an FTP URL and specifying an
-HTTP proxy will make libcurl send an FTP URL in an HTTP GET request to the
+HTTP proxy makes libcurl send an FTP URL in an HTTP GET request to the
proxy. By instead tunneling through the proxy, you avoid that conversion (that
rarely works through the proxy anyway).
.SH DEFAULT
@@ -57,12 +57,15 @@ rarely works through the proxy anyway).
All network protocols
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/file.txt");
- curl_easy_setopt(curl, CURLOPT_PROXY, "http://127.0.0.1:80");
- curl_easy_setopt(curl, CURLOPT_HTTPPROXYTUNNEL, 1L);
- curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/file.txt");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "http://127.0.0.1:80");
+ curl_easy_setopt(curl, CURLOPT_HTTPPROXYTUNNEL, 1L);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -70,4 +73,6 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_PROXY "(3), " CURLOPT_PROXYTYPE "(3), " CURLOPT_PROXYPORT "(3), "
+.BR CURLOPT_PROXY (3),
+.BR CURLOPT_PROXYTYPE (3),
+.BR CURLOPT_PROXYPORT (3)
diff --git a/docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.3 b/docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.3
index 5953348cd..8668a397a 100644
--- a/docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.3
+++ b/docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_HTTP_CONTENT_DECODING 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_HTTP_CONTENT_DECODING 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_HTTP_CONTENT_DECODING \- HTTP content decoding control
@@ -34,7 +34,7 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP_CONTENT_DECODING,
long enabled);
.SH DESCRIPTION
Pass a long to tell libcurl how to act on content decoding. If set to zero,
-content decoding will be disabled. If set to 1 it is enabled. Libcurl has no
+content decoding is disabled. If set to 1 it is enabled. Libcurl has no
default content decoding but requires you to use
\fICURLOPT_ACCEPT_ENCODING(3)\fP for that.
.SH DEFAULT
@@ -43,12 +43,15 @@ default content decoding but requires you to use
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_HTTP_CONTENT_DECODING, 0L);
- ret = curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_HTTP_CONTENT_DECODING, 0L);
+ ret = curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -56,5 +59,6 @@ Added in 7.16.2
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_STDERR "(3), " CURLOPT_DEBUGFUNCTION "(3), "
-.BR CURLOPT_ACCEPT_ENCODING "(3) "
+.BR CURLOPT_ACCEPT_ENCODING (3),
+.BR CURLOPT_DEBUGFUNCTION (3),
+.BR CURLOPT_STDERR (3)
diff --git a/docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.3 b/docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.3
index 4e85af24a..dfc1a3357 100644
--- a/docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.3
+++ b/docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_HTTP_TRANSFER_DECODING 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_HTTP_TRANSFER_DECODING 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_HTTP_TRANSFER_DECODING \- HTTP transfer decoding control
@@ -34,27 +34,30 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP_TRANSFER_DECODING,
long enabled);
.SH DESCRIPTION
Pass a long to tell libcurl how to act on transfer decoding. If set to zero,
-transfer decoding will be disabled, if set to 1 it is enabled
-(default). libcurl does chunked transfer decoding by default unless this
-option is set to zero.
+transfer decoding is disabled, if set to 1 it is enabled (default). libcurl
+does chunked transfer decoding by default unless this option is set to zero.
.SH DEFAULT
1
.SH PROTOCOLS
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_HTTP_TRANSFER_DECODING, 0L);
- ret = curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_HTTP_TRANSFER_DECODING, 0L);
+ ret = curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
-Added in 7.16.2 Does not work with the hyper backend (it will always have
-transfer decoding enabled).
+Added in 7.16.2 Does not work with the hyper backend (it always has transfer
+decoding enabled).
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_HTTP_CONTENT_DECODING "(3), " CURLOPT_ACCEPT_ENCODING "(3), "
+.BR CURLOPT_HTTP_CONTENT_DECODING (3),
+.BR CURLOPT_ACCEPT_ENCODING (3)
diff --git a/docs/libcurl/opts/CURLOPT_HTTP_VERSION.3 b/docs/libcurl/opts/CURLOPT_HTTP_VERSION.3
index 1890bd4f3..3cd2ed5bf 100644
--- a/docs/libcurl/opts/CURLOPT_HTTP_VERSION.3
+++ b/docs/libcurl/opts/CURLOPT_HTTP_VERSION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_HTTP_VERSION 3 "October 22, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_HTTP_VERSION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_HTTP_VERSION \- HTTP protocol version to use
@@ -36,19 +36,19 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP_VERSION, long version);
Pass \fIversion\fP a long, set to one of the values described below. They ask
libcurl to use the specific HTTP versions.
-Note that the HTTP version is just a request. libcurl will still prioritize to
-re-use an existing connection so it might then re-use a connection using a
-HTTP version you have not asked for.
+Note that the HTTP version is just a request. libcurl still prioritizes to
+reuse existing connections so it might then reuse a connection using a HTTP
+version you have not asked for.
.IP CURL_HTTP_VERSION_NONE
-We do not care about what version the library uses. libcurl will use whatever
-it thinks fit.
+We do not care about what version the library uses. libcurl uses whatever it
+thinks fit.
.IP CURL_HTTP_VERSION_1_0
Enforce HTTP 1.0 requests.
.IP CURL_HTTP_VERSION_1_1
Enforce HTTP 1.1 requests.
.IP CURL_HTTP_VERSION_2_0
-Attempt HTTP 2 requests. libcurl will fall back to HTTP 1.1 if HTTP 2 cannot be
+Attempt HTTP 2 requests. libcurl falls back to HTTP 1.1 if HTTP 2 cannot be
negotiated with the server. (Added in 7.33.0)
When libcurl uses HTTP/2 over HTTPS, it does not itself insist on TLS 1.2 or
@@ -58,22 +58,21 @@ version requirement with \fICURLOPT_SSLVERSION(3)\fP.
The alias \fICURL_HTTP_VERSION_2\fP was added in 7.43.0 to better reflect the
actual protocol name.
.IP CURL_HTTP_VERSION_2TLS
-Attempt HTTP 2 over TLS (HTTPS) only. libcurl will fall back to HTTP 1.1 if
-HTTP 2 cannot be negotiated with the HTTPS server. For clear text HTTP servers,
-libcurl will use 1.1. (Added in 7.47.0)
+Attempt HTTP 2 over TLS (HTTPS) only. libcurl falls back to HTTP 1.1 if HTTP 2
+cannot be negotiated with the HTTPS server. For clear text HTTP servers,
+libcurl uses 1.1. (Added in 7.47.0)
.IP CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE
Issue non-TLS HTTP requests using HTTP/2 without HTTP/1.1 Upgrade. It requires
prior knowledge that the server supports HTTP/2 straight away. HTTPS requests
-will still do HTTP/2 the standard way with negotiated protocol version in the
-TLS handshake. (Added in 7.49.0)
+still do HTTP/2 the standard way with negotiated protocol version in the TLS
+handshake. (Added in 7.49.0)
.IP CURL_HTTP_VERSION_3
-(Added in 7.66.0) Setting this value will make libcurl attempt to use HTTP/3
-directly to server given in the URL. Note that this cannot gracefully
-downgrade to earlier HTTP version if the server does not support HTTP/3.
-
-For more reliably upgrading to HTTP/3, set the preferred version to something
-lower and let the server announce its HTTP/3 support via Alt-Svc:. See
-\fICURLOPT_ALTSVC(3)\fP.
+(Added in 7.66.0) This option makes libcurl attempt to use HTTP/3 to the host
+given in the URL, with fallback to earlier HTTP versions if needed.
+.IP CURL_HTTP_VERSION_3ONLY
+(Added in 7.88.0) Setting this makes libcurl attempt to use HTTP/3 directly to
+server given in the URL and does not downgrade to earlier HTTP version if the
+server does not support HTTP/3.
.SH DEFAULT
Since curl 7.62.0: CURL_HTTP_VERSION_2TLS
@@ -82,15 +81,18 @@ Before that: CURL_HTTP_VERSION_1_1
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_HTTP_VERSION,
- (long)CURL_HTTP_VERSION_2TLS);
- ret = curl_easy_perform(curl);
- if(ret == CURLE_HTTP_RETURNED_ERROR) {
- /* an HTTP response error problem */
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_HTTP_VERSION,
+ (long)CURL_HTTP_VERSION_2TLS);
+ ret = curl_easy_perform(curl);
+ if(ret == CURLE_HTTP_RETURNED_ERROR) {
+ /* an HTTP response error problem */
+ }
}
}
.fi
@@ -99,5 +101,7 @@ Along with HTTP
.SH RETURN VALUE
Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_SSLVERSION "(3), " CURLOPT_HTTP200ALIASES "(3), "
-.BR CURLOPT_HTTP09_ALLOWED "(3), " CURLOPT_ALTSVC "(3) "
+.BR CURLOPT_ALTSVC (3),
+.BR CURLOPT_HTTP09_ALLOWED (3),
+.BR CURLOPT_HTTP200ALIASES (3),
+.BR CURLOPT_SSLVERSION (3)
diff --git a/docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.3 b/docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.3
index c5776789d..262e0da07 100644
--- a/docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.3
+++ b/docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_IGNORE_CONTENT_LENGTH 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_IGNORE_CONTENT_LENGTH 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_IGNORE_CONTENT_LENGTH \- ignore content length
@@ -36,13 +36,13 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_IGNORE_CONTENT_LENGTH,
If \fIignore\fP is set to 1L, ignore the Content-Length header in the HTTP
response and ignore asking for or relying on it for FTP transfers.
-This is useful for HTTP with Apache 1.x (and similar servers) which will
-report incorrect content length for files over 2 gigabytes. If this option is
-used, curl will not be able to accurately report progress, and will simply
-stop the download when the server ends the connection.
+This is useful for doing HTTP transfers with ancient web servers which report
+incorrect content length for files over 2 gigabytes. If this option is used,
+curl cannot accurately report progress, and it instead stops the download when
+the server ends the connection.
It is also useful with FTP when for example the file is growing while the
-transfer is in progress which otherwise will unconditionally cause libcurl to
+transfer is in progress which otherwise unconditionally causes libcurl to
report error.
Only use this option if strictly necessary.
@@ -52,14 +52,17 @@ Only use this option if strictly necessary.
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* we know the server is silly, ignore content-length */
- curl_easy_setopt(curl, CURLOPT_IGNORE_CONTENT_LENGTH, 1L);
+ /* we know the server is silly, ignore content-length */
+ curl_easy_setopt(curl, CURLOPT_IGNORE_CONTENT_LENGTH, 1L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -68,4 +71,5 @@ for HTTP when libcurl is built to use the hyper backend.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_HTTP_VERSION "(3), " CURLOPT_MAXFILESIZE_LARGE "(3), "
+.BR CURLOPT_HTTP_VERSION (3),
+.BR CURLOPT_MAXFILESIZE_LARGE (3)
diff --git a/docs/libcurl/opts/CURLOPT_INFILESIZE.3 b/docs/libcurl/opts/CURLOPT_INFILESIZE.3
index 286737a54..f9ae02566 100644
--- a/docs/libcurl/opts/CURLOPT_INFILESIZE.3
+++ b/docs/libcurl/opts/CURLOPT_INFILESIZE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_INFILESIZE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_INFILESIZE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_INFILESIZE \- size of the input file to send off
@@ -43,29 +43,39 @@ mandatory.
To unset this value again, set it to -1.
+Using \fICURLOPT_UPLOAD(3)\fP to a HTTP/1.1 server and this value set to -1,
+makes libcurl do a chunked transfer-encoded upload.
+
When sending emails using SMTP, this command can be used to specify the
optional SIZE parameter for the MAIL FROM command.
-This option does not limit how much data libcurl will actually send, as that
-is controlled entirely by what the read callback returns, but telling one
-value and sending a different amount may lead to errors.
+This option does not limit how much data libcurl actually sends, as that is
+controlled entirely by what the read callback returns, but telling one value
+and sending a different amount may lead to errors.
.SH DEFAULT
Unset
.SH PROTOCOLS
Many
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- long uploadsize = FILE_SIZE;
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/destination.tar.gz");
+#define FILE_SIZE 12345L
+
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ long uploadsize = FILE_SIZE;
+
+ curl_easy_setopt(curl, CURLOPT_URL,
+ "ftp://example.com/destination.tar.gz");
- curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
+ curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
- curl_easy_setopt(curl, CURLOPT_INFILESIZE, uploadsize);
+ curl_easy_setopt(curl, CURLOPT_INFILESIZE, uploadsize);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -73,4 +83,6 @@ SMTP support added in 7.23.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_INFILESIZE_LARGE "(3), " CURLOPT_UPLOAD "(3), "
+.BR CURLINFO_CONTENT_LENGTH_UPLOAD_T (3),
+.BR CURLOPT_INFILESIZE_LARGE (3),
+.BR CURLOPT_UPLOAD (3)
diff --git a/docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.3 b/docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.3
index 820760f3c..1f65fce2d 100644
--- a/docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.3
+++ b/docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_INFILESIZE_LARGE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_INFILESIZE_LARGE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_INFILESIZE_LARGE \- size of the input file to send off
@@ -45,26 +45,32 @@ To unset this value again, set it to -1.
When sending emails using SMTP, this command can be used to specify the
optional SIZE parameter for the MAIL FROM command.
-This option does not limit how much data libcurl will actually send, as that
-is controlled entirely by what the read callback returns, but telling one
-value and sending a different amount may lead to errors.
+This option does not limit how much data libcurl actually sends, as that is
+controlled entirely by what the read callback returns, but telling one value
+and sending a different amount may lead to errors.
.SH DEFAULT
Unset
.SH PROTOCOLS
Many
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_off_t uploadsize = FILE_SIZE;
+#define FILE_SIZE 123456
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/destination.tar.gz");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_off_t uploadsize = FILE_SIZE;
- curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
+ curl_easy_setopt(curl, CURLOPT_URL,
+ "ftp://example.com/destination.tar.gz");
- curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, uploadsize);
+ curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
- curl_easy_perform(curl);
+ curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, uploadsize);
+
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -72,4 +78,6 @@ SMTP support added in 7.23.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_INFILESIZE "(3), " CURLOPT_UPLOAD "(3), "
+.BR CURLINFO_CONTENT_LENGTH_UPLOAD_T (3),
+.BR CURLOPT_INFILESIZE (3),
+.BR CURLOPT_UPLOAD (3)
diff --git a/docs/libcurl/opts/CURLOPT_INTERFACE.3 b/docs/libcurl/opts/CURLOPT_INTERFACE.3
index 220e139f3..c9e91495e 100644
--- a/docs/libcurl/opts/CURLOPT_INTERFACE.3
+++ b/docs/libcurl/opts/CURLOPT_INTERFACE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_INTERFACE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_INTERFACE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_INTERFACE \- source interface for outgoing traffic
@@ -37,18 +37,22 @@ Pass a char * as parameter. This sets the \fIinterface\fP name to use as
outgoing network interface. The name can be an interface name, an IP address,
or a host name.
-If the parameter starts with "if!" then it is treated as only as interface
-name and no attempt will ever be named to do treat it as an IP address or to
-do name resolution on it. If the parameter starts with \&"host!" it is
-treated as either an IP address or a hostname. Hostnames are resolved
-synchronously. Using the if! format is highly recommended when using the
-multi interfaces to avoid allowing the code to block. If "if!" is specified
-but the parameter does not match an existing interface, CURLE_INTERFACE_FAILED
-is returned from the libcurl function used to perform the transfer.
+If the parameter starts with "if!" then it is treated only as an interface
+name. If the parameter starts with \&"host!" it is treated as either an IP
+address or a hostname.
+
+If "if!" is specified but the parameter does not match an existing interface,
+\fICURLE_INTERFACE_FAILED\fP is returned from the libcurl function used to
+perform the transfer.
libcurl does not support using network interface names for this option on
Windows.
+We strongly advise against specifying the interface with a hostname, as it
+causes libcurl to do a blocking name resolve call to retrieve the IP
+address. That name resolve operation does \fBnot\fP use DNS-over-HTTPS even if
+\fICURLOPT_DOH_URL(3)\fP is set.
+
The application does not have to keep the string around after setting this
option.
.SH DEFAULT
@@ -57,15 +61,19 @@ NULL, use whatever the TCP stack finds suitable
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- curl_easy_setopt(curl, CURLOPT_INTERFACE, "eth0");
+ curl_easy_setopt(curl, CURLOPT_INTERFACE, "eth0");
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -74,4 +82,5 @@ The "if!" and "host!" syntax was added in 7.24.0.
Returns CURLE_OK on success or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_SOCKOPTFUNCTION "(3), " CURLOPT_TCP_NODELAY "(3), "
+.BR CURLOPT_SOCKOPTFUNCTION (3),
+.BR CURLOPT_TCP_NODELAY (3)
diff --git a/docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.3 b/docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.3
index 2735da22c..0a5538c2e 100644
--- a/docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.3
+++ b/docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_INTERLEAVEDATA 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_INTERLEAVEDATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_INTERLEAVEDATA \- pointer passed to RTSP interleave callback
@@ -33,7 +33,7 @@ CURLOPT_INTERLEAVEDATA \- pointer passed to RTSP interleave callback
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INTERLEAVEDATA, void *pointer);
.fi
.SH DESCRIPTION
-This is the userdata \fIpointer\fP that will be passed to
+This is the userdata \fIpointer\fP that is passed to
\fICURLOPT_INTERLEAVEFUNCTION(3)\fP when interleaved RTP data is received. If
the interleave function callback is not set, this pointer is not used
anywhere.
@@ -43,16 +43,27 @@ NULL
RTSP
.SH EXAMPLE
.nf
-static size_t rtp_write(void *ptr, size_t size, size_t nmemb, void *user)
+struct local {
+ void *custom;
+};
+static size_t rtp_write(void *ptr, size_t size, size_t nmemb, void *userp)
{
- struct local *l = (struct local *)user;
+ struct local *l = userp;
+ printf("my pointer: %p\\n", l->custom);
/* take care of the packet in 'ptr', then return... */
return size * nmemb;
}
+
+int main(void)
{
struct local rtp_data;
- curl_easy_setopt(curl, CURLOPT_INTERLEAVEFUNCTION, rtp_write);
- curl_easy_setopt(curl, CURLOPT_INTERLEAVEDATA, &rtp_data);
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_INTERLEAVEFUNCTION, rtp_write);
+ curl_easy_setopt(curl, CURLOPT_INTERLEAVEDATA, &rtp_data);
+
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -60,4 +71,5 @@ Added in 7.20.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_INTERLEAVEFUNCTION "(3), " CURLOPT_RTSP_REQUEST "(3), "
+.BR CURLOPT_INTERLEAVEFUNCTION (3),
+.BR CURLOPT_RTSP_REQUEST (3)
diff --git a/docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.3 b/docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.3
index 9f7e4597b..5264c9a1c 100644
--- a/docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_INTERLEAVEFUNCTION 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_INTERLEAVEFUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_INTERLEAVEFUNCTION \- callback for RTSP interleaved data
@@ -45,9 +45,8 @@ contains exactly one upper-layer protocol unit (e.g. one RTP packet). Curl
writes the interleaved header as well as the included data for each call. The
first byte is always an ASCII dollar sign. The dollar sign is followed by a
one byte channel identifier and then a 2 byte integer length in network byte
-order. See \fIRFC2326 Section 10.12\fP for more information on how RTP
-interleaving behaves. If unset or set to NULL, curl will use the default write
-function.
+order. See RFC 2326 Section 10.12 for more information on how RTP interleaving
+behaves. If unset or set to NULL, curl uses the default write function.
Interleaved RTP poses some challenges for the client application. Since the
stream data is sharing the RTSP control connection, it is critical to service
@@ -55,11 +54,18 @@ the RTP in a timely fashion. If the RTP data is not handled quickly,
subsequent response processing may become unreasonably delayed and the
connection may close. The application may use \fICURL_RTSPREQ_RECEIVE\fP to
service RTP data when no requests are desired. If the application makes a
-request, (e.g. \fICURL_RTSPREQ_PAUSE\fP) then the response handler will
-process any pending RTP data before marking the request as finished.
+request, (e.g. \fICURL_RTSPREQ_PAUSE\fP) then the response handler processes
+any pending RTP data before marking the request as finished.
The \fICURLOPT_INTERLEAVEDATA(3)\fP is passed in the \fIuserdata\fP argument in
the callback.
+
+Your callback should return the number of bytes actually taken care of. If
+that amount differs from the amount passed to your callback function, it
+signals an error condition to the library. This causes the transfer to abort
+and the libcurl function used returns \fICURLE_WRITE_ERROR\fP.
+
+You can also abort the transfer by returning CURL_WRITEFUNC_ERROR. (7.87.0)
.SH DEFAULT
NULL, the interleave data is then passed to the regular write function:
\fICURLOPT_WRITEFUNCTION(3)\fP.
@@ -67,16 +73,26 @@ NULL, the interleave data is then passed to the regular write function:
RTSP
.SH EXAMPLE
.nf
-static size_t rtp_write(void *ptr, size_t size, size_t nmemb, void *user)
+struct local {
+ void *custom;
+};
+
+static size_t rtp_write(void *ptr, size_t size, size_t nmemb, void *userp)
{
- struct local *l = (struct local *)user;
+ struct local *l = userp;
+ printf("our ptr: %p\\n", l->custom);
/* take care of the packet in 'ptr', then return... */
return size * nmemb;
}
+
+int main(void)
{
struct local rtp_data;
- curl_easy_setopt(curl, CURLOPT_INTERLEAVEFUNCTION, rtp_write);
- curl_easy_setopt(curl, CURLOPT_INTERLEAVEDATA, &rtp_data);
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_INTERLEAVEFUNCTION, rtp_write);
+ curl_easy_setopt(curl, CURLOPT_INTERLEAVEDATA, &rtp_data);
+ }
}
.fi
.SH AVAILABILITY
@@ -84,4 +100,5 @@ Added in 7.20.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_INTERLEAVEDATA "(3), " CURLOPT_RTSP_REQUEST "(3), "
+.BR CURLOPT_INTERLEAVEDATA (3),
+.BR CURLOPT_RTSP_REQUEST (3)
diff --git a/docs/libcurl/opts/CURLOPT_IOCTLDATA.3 b/docs/libcurl/opts/CURLOPT_IOCTLDATA.3
index ee30d42bc..3f5a975bd 100644
--- a/docs/libcurl/opts/CURLOPT_IOCTLDATA.3
+++ b/docs/libcurl/opts/CURLOPT_IOCTLDATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_IOCTLDATA 3 "October 12, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_IOCTLDATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_IOCTLDATA \- pointer passed to I/O callback
@@ -33,7 +33,7 @@ CURLOPT_IOCTLDATA \- pointer passed to I/O callback
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_IOCTLDATA, void *pointer);
.fi
.SH DESCRIPTION
-Pass the \fIpointer\fP that will be untouched by libcurl and passed as the 3rd
+Pass the \fIpointer\fP that is untouched by libcurl and passed as the 3rd
argument in the ioctl callback set with \fICURLOPT_IOCTLFUNCTION(3)\fP.
.SH DEFAULT
By default, the value of this parameter is NULL.
@@ -41,20 +41,29 @@ By default, the value of this parameter is NULL.
Used with HTTP
.SH EXAMPLE
.nf
+#include <unistd.h> /* for lseek */
+
+struct data {
+ int fd; /* our file descriptor */
+};
+
static curlioerr ioctl_callback(CURL *handle, int cmd, void *clientp)
{
struct data *io = (struct data *)clientp;
if(cmd == CURLIOCMD_RESTARTREAD) {
- lseek(fd, 0, SEEK_SET);
- current_offset = 0;
+ lseek(io->fd, 0, SEEK_SET);
return CURLIOE_OK;
}
return CURLIOE_UNKNOWNCMD;
}
+int main(void)
{
struct data ioctl_data;
- curl_easy_setopt(curl, CURLOPT_IOCTLFUNCTION, ioctl_callback);
- curl_easy_setopt(curl, CURLOPT_IOCTLDATA, &ioctl_data);
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_IOCTLFUNCTION, ioctl_callback);
+ curl_easy_setopt(curl, CURLOPT_IOCTLDATA, &ioctl_data);
+ }
}
.fi
.SH AVAILABILITY
@@ -62,4 +71,5 @@ Added in 7.12.3. Deprecated since 7.18.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_IOCTLFUNCTION "(3), " CURLOPT_SEEKFUNCTION "(3), "
+.BR CURLOPT_IOCTLFUNCTION (3),
+.BR CURLOPT_SEEKFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.3 b/docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.3
index e2b81d8ae..7e432a13a 100644
--- a/docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_IOCTLFUNCTION 3 "October 12, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_IOCTLFUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_IOCTLFUNCTION \- callback for I/O operations
@@ -64,27 +64,36 @@ The \fIclientp\fP argument to the callback is set with the
This option is deprecated! Do not use it. Use \fICURLOPT_SEEKFUNCTION(3)\fP
instead to provide seeking! If \fICURLOPT_SEEKFUNCTION(3)\fP is set, this
-parameter will be ignored when seeking.
+parameter is ignored when seeking.
.SH DEFAULT
By default, this parameter is set to NULL. Not used.
.SH PROTOCOLS
Used with HTTP
.SH EXAMPLE
.nf
+#include <unistd.h> /* for lseek */
+
+struct data {
+ int fd; /* our file descriptor */
+};
+
static curlioerr ioctl_callback(CURL *handle, int cmd, void *clientp)
{
struct data *io = (struct data *)clientp;
if(cmd == CURLIOCMD_RESTARTREAD) {
- lseek(fd, 0, SEEK_SET);
- current_offset = 0;
+ lseek(io->fd, 0, SEEK_SET);
return CURLIOE_OK;
}
return CURLIOE_UNKNOWNCMD;
}
+int main(void)
{
struct data ioctl_data;
- curl_easy_setopt(curl, CURLOPT_IOCTLFUNCTION, ioctl_callback);
- curl_easy_setopt(curl, CURLOPT_IOCTLDATA, &ioctl_data);
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_IOCTLFUNCTION, ioctl_callback);
+ curl_easy_setopt(curl, CURLOPT_IOCTLDATA, &ioctl_data);
+ }
}
.fi
.SH AVAILABILITY
@@ -92,4 +101,5 @@ Added in 7.12.3. Deprecated since 7.18.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_IOCTLDATA "(3), " CURLOPT_SEEKFUNCTION "(3), "
+.BR CURLOPT_IOCTLDATA (3),
+.BR CURLOPT_SEEKFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_IPRESOLVE.3 b/docs/libcurl/opts/CURLOPT_IPRESOLVE.3
index 65481fd58..5a6b89a68 100644
--- a/docs/libcurl/opts/CURLOPT_IPRESOLVE.3
+++ b/docs/libcurl/opts/CURLOPT_IPRESOLVE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_IPRESOLVE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_IPRESOLVE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_IPRESOLVE \- IP protocol version to use
@@ -35,8 +35,13 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_IPRESOLVE, long resolve);
.SH DESCRIPTION
Allows an application to select what kind of IP addresses to use when
establishing a connection or choosing one from the connection pool. This is
-interesting when using host names that resolve addresses using more than
-one version of IP. The allowed values are:
+interesting when using host names that resolve to more than one IP family.
+
+If the URL provided for a transfer contains a numerical IP version as a host
+name, this option does not override or prohibit libcurl from using that IP
+version.
+
+Available values for this option are:
.IP CURL_IPRESOLVE_WHATEVER
Default, can use addresses of all IP versions that your system allows.
.IP CURL_IPRESOLVE_V4
@@ -49,22 +54,27 @@ CURL_IPRESOLVE_WHATEVER
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- /* of all addresses example.com resolves to, only IPv6 ones are used */
- curl_easy_setopt(curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V6);
+ /* of all addresses example.com resolves to, only IPv6 ones are used */
+ curl_easy_setopt(curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V6);
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
-
.SH AVAILABILITY
Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_HTTP_VERSION "(3), " CURLOPT_SSLVERSION "(3), "
+.BR CURLOPT_HTTP_VERSION (3),
+.BR CURLOPT_RESOLVE (3),
+.BR CURLOPT_SSLVERSION (3)
diff --git a/docs/libcurl/opts/CURLOPT_ISSUERCERT.3 b/docs/libcurl/opts/CURLOPT_ISSUERCERT.3
index 39bd70e64..4614db18d 100644
--- a/docs/libcurl/opts/CURLOPT_ISSUERCERT.3
+++ b/docs/libcurl/opts/CURLOPT_ISSUERCERT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_ISSUERCERT 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_ISSUERCERT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_ISSUERCERT \- issuer SSL certificate filename
@@ -57,12 +57,16 @@ NULL
All TLS-based protocols
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_ISSUERCERT, "/etc/certs/cacert.pem");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_ISSUERCERT, "/etc/certs/cacert.pem");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -71,4 +75,6 @@ If built TLS enabled
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_CRLFILE "(3), " CURLOPT_SSL_VERIFYPEER "(3), "
+.BR CURLOPT_CRLFILE (3),
+.BR CURLOPT_SSL_VERIFYHOST (3),
+.BR CURLOPT_SSL_VERIFYPEER (3)
diff --git a/docs/libcurl/opts/CURLOPT_ISSUERCERT_BLOB.3 b/docs/libcurl/opts/CURLOPT_ISSUERCERT_BLOB.3
index 388af2e3f..90a06ea4a 100644
--- a/docs/libcurl/opts/CURLOPT_ISSUERCERT_BLOB.3
+++ b/docs/libcurl/opts/CURLOPT_ISSUERCERT_BLOB.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_ISSUERCERT_BLOB 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_ISSUERCERT_BLOB 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_ISSUERCERT_BLOB \- issuer SSL certificate from memory blob
@@ -63,16 +63,24 @@ NULL
All TLS-based protocols
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- struct curl_blob blob;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- blob.data = certificateData;
- blob.len = filesize;
- blob.flags = CURL_BLOB_COPY;
- curl_easy_setopt(curl, CURLOPT_ISSUERCERT_BLOB, &blob);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+
+extern char *certificateData;
+extern size_t filesize;
+
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ struct curl_blob blob;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ blob.data = certificateData;
+ blob.len = filesize;
+ blob.flags = CURL_BLOB_COPY;
+ curl_easy_setopt(curl, CURLOPT_ISSUERCERT_BLOB, &blob);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -81,5 +89,7 @@ Added in 7.71.0. This option is supported by the OpenSSL backends.
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_ISSUERCERT "(3),"
-.BR CURLOPT_CRLFILE "(3), " CURLOPT_SSL_VERIFYPEER "(3), "
+.BR CURLOPT_ISSUERCERT (3),
+.BR CURLOPT_CRLFILE (3),
+.BR CURLOPT_SSL_VERIFYHOST (3),
+.BR CURLOPT_SSL_VERIFYPEER (3)
diff --git a/docs/libcurl/opts/CURLOPT_KEEP_SENDING_ON_ERROR.3 b/docs/libcurl/opts/CURLOPT_KEEP_SENDING_ON_ERROR.3
index f2b8b2c1e..9ae716d5d 100644
--- a/docs/libcurl/opts/CURLOPT_KEEP_SENDING_ON_ERROR.3
+++ b/docs/libcurl/opts/CURLOPT_KEEP_SENDING_ON_ERROR.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_KEEP_SENDING_ON_ERROR 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_KEEP_SENDING_ON_ERROR 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_KEEP_SENDING_ON_ERROR \- keep sending on early HTTP response >= 300
@@ -49,13 +49,16 @@ Most applications do not need this option.
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "sending data");
- curl_easy_setopt(curl, CURLOPT_KEEP_SENDING_ON_ERROR, 1L);
- ret = curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "sending data");
+ curl_easy_setopt(curl, CURLOPT_KEEP_SENDING_ON_ERROR, 1L);
+ ret = curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -63,4 +66,6 @@ Along with HTTP. Added in 7.51.0.
.SH RETURN VALUE
Returns CURLE_OK if HTTP is enabled, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_FAILONERROR "(3), " CURLOPT_HTTPHEADER "(3), "
+.BR CURLINFO_RESPONSE_CODE (3),
+.BR CURLOPT_FAILONERROR (3),
+.BR CURLOPT_HTTPHEADER (3)
diff --git a/docs/libcurl/opts/CURLOPT_KEYPASSWD.3 b/docs/libcurl/opts/CURLOPT_KEYPASSWD.3
index 18616a98f..33b460c84 100644
--- a/docs/libcurl/opts/CURLOPT_KEYPASSWD.3
+++ b/docs/libcurl/opts/CURLOPT_KEYPASSWD.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_KEYPASSWD 3 "October 11, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_KEYPASSWD 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_KEYPASSWD \- passphrase to private key
@@ -33,8 +33,8 @@ CURLOPT_KEYPASSWD \- passphrase to private key
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_KEYPASSWD, char *pwd);
.fi
.SH DESCRIPTION
-Pass a pointer to a null-terminated string as parameter. It will be used as
-the password required to use the \fICURLOPT_SSLKEY(3)\fP or
+Pass a pointer to a null-terminated string as parameter. It is used as the
+password required to use the \fICURLOPT_SSLKEY(3)\fP or
\fICURLOPT_SSH_PRIVATE_KEYFILE(3)\fP private key. You never need a pass
phrase to load a certificate but you need one to load your private key.
@@ -46,14 +46,18 @@ NULL
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- curl_easy_setopt(curl, CURLOPT_SSLCERT, "client.pem");
- curl_easy_setopt(curl, CURLOPT_SSLKEY, "key.pem");
- curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "superman");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+ curl_easy_setopt(curl, CURLOPT_SSLCERT, "client.pem");
+ curl_easy_setopt(curl, CURLOPT_SSLKEY, "key.pem");
+ curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "superman");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -63,4 +67,5 @@ CURLOPT_SSLCERTPASSWD up to 7.9.2.
Returns CURLE_OK if TLS enabled, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_SSLKEY "(3), " CURLOPT_SSH_PRIVATE_KEYFILE "(3), "
+.BR CURLOPT_SSH_PRIVATE_KEYFILE (3),
+.BR CURLOPT_SSLKEY (3)
diff --git a/docs/libcurl/opts/CURLOPT_KRBLEVEL.3 b/docs/libcurl/opts/CURLOPT_KRBLEVEL.3
index 15551984d..463345d92 100644
--- a/docs/libcurl/opts/CURLOPT_KRBLEVEL.3
+++ b/docs/libcurl/opts/CURLOPT_KRBLEVEL.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_KRBLEVEL 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_KRBLEVEL 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_KRBLEVEL \- FTP kerberos security level
@@ -35,9 +35,9 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_KRBLEVEL, char *level);
.SH DESCRIPTION
Pass a char * as parameter. Set the kerberos security level for FTP; this also
enables kerberos awareness. This is a string that should match one of the
-following: \&'clear', \&'safe', \&'confidential' or \&'private'. If the
-string is set but does not match one of these, 'private' will be used. Set the
-string to NULL to disable kerberos support for FTP.
+following: \&'clear', \&'safe', \&'confidential' or \&'private'. If the string
+is set but does not match one of these, 'private' is used. Set the string to
+NULL to disable kerberos support for FTP.
The application does not have to keep the string around after setting this
option.
@@ -47,12 +47,16 @@ NULL
FTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/foo.bin");
- curl_easy_setopt(curl, CURLOPT_KRBLEVEL, "private");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/foo.bin");
+ curl_easy_setopt(curl, CURLOPT_KRBLEVEL, "private");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -61,4 +65,5 @@ This option was known as CURLOPT_KRB4LEVEL up to 7.16.3
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_KRBLEVEL "(3), " CURLOPT_USE_SSL "(3), "
+.BR CURLOPT_KRBLEVEL (3),
+.BR CURLOPT_USE_SSL (3)
diff --git a/docs/libcurl/opts/CURLOPT_LOCALPORT.3 b/docs/libcurl/opts/CURLOPT_LOCALPORT.3
index ce7ad04a3..b05a2aa0d 100644
--- a/docs/libcurl/opts/CURLOPT_LOCALPORT.3
+++ b/docs/libcurl/opts/CURLOPT_LOCALPORT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_LOCALPORT 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_LOCALPORT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_LOCALPORT \- local port number to use for socket
@@ -43,14 +43,18 @@ this option is set. Valid port numbers are 1 - 65535.
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- curl_easy_setopt(curl, CURLOPT_LOCALPORT, 49152L);
- /* and try 20 more ports following that */
- curl_easy_setopt(curl, CURLOPT_LOCALPORTRANGE, 20L);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+ curl_easy_setopt(curl, CURLOPT_LOCALPORT, 49152L);
+ /* and try 20 more ports following that */
+ curl_easy_setopt(curl, CURLOPT_LOCALPORTRANGE, 20L);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -58,4 +62,6 @@ Added in 7.15.2
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_LOCALPORTRANGE "(3), " CURLOPT_INTERFACE "(3), "
+.BR CURLINFO_LOCAL_PORT (3),
+.BR CURLOPT_INTERFACE (3),
+.BR CURLOPT_LOCALPORTRANGE (3)
diff --git a/docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.3 b/docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.3
index cc105ebe6..ae35f175b 100644
--- a/docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.3
+++ b/docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_LOCALPORTRANGE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_LOCALPORTRANGE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_LOCALPORTRANGE \- number of additional local ports to try
@@ -34,12 +34,12 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOCALPORTRANGE,
long range);
.fi
.SH DESCRIPTION
-Pass a long. The \fIrange\fP argument is the number of attempts libcurl will
-make to find a working local port number. It starts with the given
+Pass a long. The \fIrange\fP argument is the number of attempts libcurl makes
+to find a working local port number. It starts with the given
\fICURLOPT_LOCALPORT(3)\fP and adds one to the number for each retry. Setting
-this option to 1 or below will make libcurl do only one try for the exact port
-number. Port numbers by nature are scarce resources that will be busy at times
-so setting this value to something too low might cause unnecessary connection
+this option to 1 or below makes libcurl only do one try for the exact port
+number. Port numbers by nature are scarce resources that are busy at times so
+setting this value to something too low might cause unnecessary connection
setup failures.
.SH DEFAULT
1
@@ -47,14 +47,18 @@ setup failures.
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- curl_easy_setopt(curl, CURLOPT_LOCALPORT, 49152L);
- /* and try 20 more ports following that */
- curl_easy_setopt(curl, CURLOPT_LOCALPORTRANGE, 20L);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+ curl_easy_setopt(curl, CURLOPT_LOCALPORT, 49152L);
+ /* and try 20 more ports following that */
+ curl_easy_setopt(curl, CURLOPT_LOCALPORTRANGE, 20L);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -62,4 +66,5 @@ Added in 7.15.2
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_LOCALPORT "(3), " CURLOPT_INTERFACE "(3), "
+.BR CURLOPT_INTERFACE (3),
+.BR CURLOPT_LOCALPORT (3)
diff --git a/docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.3 b/docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.3
index f7e1bb221..fde1ac689 100644
--- a/docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.3
+++ b/docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_LOGIN_OPTIONS 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_LOGIN_OPTIONS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_LOGIN_OPTIONS \- login options
@@ -36,7 +36,7 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOGIN_OPTIONS, char *options);
Pass a char * as parameter, which should be pointing to the null-terminated
\fIoptions\fP string to use for the transfer.
-For more information about the login options please see RFC2384, RFC5092 and
+For more information about the login options please see RFC 2384, RFC 5092 and
the IETF draft \fBdraft-earhart-url-smtp-00.txt\fP.
\fICURLOPT_LOGIN_OPTIONS(3)\fP can be used to set protocol specific login
@@ -44,6 +44,12 @@ options, such as the preferred authentication mechanism via "AUTH=NTLM" or
"AUTH=*", and should be used in conjunction with the \fICURLOPT_USERNAME(3)\fP
option.
+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 in plain text. This does not work if the IMAP server
+disables the plain LOGIN (e.g. to prevent password snooping).
+
The application does not have to keep the string around after setting this
option.
.SH DEFAULT
@@ -52,12 +58,16 @@ NULL
Only IMAP, LDAP, POP3 and SMTP support login options.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "smtp://example.com/");
- curl_easy_setopt(curl, CURLOPT_LOGIN_OPTIONS, "AUTH=*");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "smtp://example.com/");
+ curl_easy_setopt(curl, CURLOPT_LOGIN_OPTIONS, "AUTH=*");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -66,4 +76,5 @@ Added in 7.34.0. Support for OpenLDAP added in 7.82.0.
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_USERNAME "(3), " CURLOPT_PASSWORD "(3), "
+.BR CURLOPT_PASSWORD (3),
+.BR CURLOPT_USERNAME (3)
diff --git a/docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.3 b/docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.3
index fb81dae0b..fd46574af 100644
--- a/docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.3
+++ b/docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_LOW_SPEED_LIMIT 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_LOW_SPEED_LIMIT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_LOW_SPEED_LIMIT \- low speed limit in bytes per second
@@ -44,18 +44,22 @@ slow and abort.
All
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, url);
- /* abort if slower than 30 bytes/sec during 60 seconds */
- curl_easy_setopt(curl, CURLOPT_LOW_SPEED_TIME, 60L);
- curl_easy_setopt(curl, CURLOPT_LOW_SPEED_LIMIT, 30L);
- res = curl_easy_perform(curl);
- if(CURLE_OPERATION_TIMEDOUT == res) {
- printf("Timeout!\\n");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ /* abort if slower than 30 bytes/sec during 60 seconds */
+ curl_easy_setopt(curl, CURLOPT_LOW_SPEED_TIME, 60L);
+ curl_easy_setopt(curl, CURLOPT_LOW_SPEED_LIMIT, 30L);
+ res = curl_easy_perform(curl);
+ if(CURLE_OPERATION_TIMEDOUT == res) {
+ printf("Timeout!\\n");
+ }
+ /* always cleanup */
+ curl_easy_cleanup(curl);
}
- /* always cleanup */
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -63,4 +67,7 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_LOW_SPEED_TIME "(3), " CURLOPT_TIMEOUT "(3), "
+.BR CURLOPT_LOW_SPEED_TIME (3),
+.BR CURLOPT_MAX_RECV_SPEED_LARGE (3),
+.BR CURLOPT_MAX_SEND_SPEED_LARGE (3),
+.BR CURLOPT_TIMEOUT (3)
diff --git a/docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.3 b/docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.3
index 566373994..d05011590 100644
--- a/docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.3
+++ b/docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_LOW_SPEED_TIME 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_LOW_SPEED_TIME 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_LOW_SPEED_TIME \- low speed limit time period
@@ -43,18 +43,22 @@ library to consider it too slow and abort.
All
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, url);
- /* abort if slower than 30 bytes/sec during 60 seconds */
- curl_easy_setopt(curl, CURLOPT_LOW_SPEED_TIME, 60L);
- curl_easy_setopt(curl, CURLOPT_LOW_SPEED_LIMIT, 30L);
- res = curl_easy_perform(curl);
- if(CURLE_OPERATION_TIMEDOUT == res) {
- printf("Timeout!\\n");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ /* abort if slower than 30 bytes/sec during 60 seconds */
+ curl_easy_setopt(curl, CURLOPT_LOW_SPEED_TIME, 60L);
+ curl_easy_setopt(curl, CURLOPT_LOW_SPEED_LIMIT, 30L);
+ res = curl_easy_perform(curl);
+ if(CURLE_OPERATION_TIMEDOUT == res) {
+ printf("Timeout!\\n");
+ }
+ /* always cleanup */
+ curl_easy_cleanup(curl);
}
- /* always cleanup */
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
@@ -62,4 +66,5 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_LOW_SPEED_LIMIT "(3), " CURLOPT_TIMEOUT "(3), "
+.BR CURLOPT_LOW_SPEED_LIMIT (3),
+.BR CURLOPT_TIMEOUT (3)
diff --git a/docs/libcurl/opts/CURLOPT_MAIL_AUTH.3 b/docs/libcurl/opts/CURLOPT_MAIL_AUTH.3
index 1bf2296ab..e1f6eaba6 100644
--- a/docs/libcurl/opts/CURLOPT_MAIL_AUTH.3
+++ b/docs/libcurl/opts/CURLOPT_MAIL_AUTH.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_MAIL_AUTH 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_MAIL_AUTH 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_MAIL_AUTH \- SMTP authentication address
@@ -33,7 +33,7 @@ CURLOPT_MAIL_AUTH \- SMTP authentication address
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAIL_AUTH, char *auth);
.fi
.SH DESCRIPTION
-Pass a pointer to a null-terminated string as parameter. This will be used to
+Pass a pointer to a null-terminated string as parameter. This is used to
specify the authentication address (identity) of a submitted message that is
being relayed to another server.
@@ -46,8 +46,8 @@ be used for this parameter.
Unlike \fICURLOPT_MAIL_FROM(3)\fP and \fICURLOPT_MAIL_RCPT(3)\fP, the address
should not be specified within a pair of angled brackets (<>). However, if an
-empty string is used then a pair of brackets will be sent by libcurl as
-required by RFC2554.
+empty string is used then a pair of brackets are sent by libcurl as required
+by RFC 2554.
The application does not have to keep the string around after setting this
option.
@@ -57,12 +57,16 @@ NULL
SMTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "smtp://example.com/");
- curl_easy_setopt(curl, CURLOPT_MAIL_AUTH, "<secret@cave>");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "smtp://example.com/");
+ curl_easy_setopt(curl, CURLOPT_MAIL_AUTH, "<secret@cave>");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -71,4 +75,5 @@ Added in 7.25.0
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_MAIL_FROM "(3), " CURLOPT_MAIL_RCPT "(3), "
+.BR CURLOPT_MAIL_FROM (3),
+.BR CURLOPT_MAIL_RCPT (3)
diff --git a/docs/libcurl/opts/CURLOPT_MAIL_FROM.3 b/docs/libcurl/opts/CURLOPT_MAIL_FROM.3
index 7d0250efa..944cd322a 100644
--- a/docs/libcurl/opts/CURLOPT_MAIL_FROM.3
+++ b/docs/libcurl/opts/CURLOPT_MAIL_FROM.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_MAIL_FROM 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_MAIL_FROM 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_MAIL_FROM \- SMTP sender address
@@ -37,10 +37,10 @@ Pass a pointer to a null-terminated string as parameter. This should be used
to specify the sender's email address when sending SMTP mail with libcurl.
An originator email address should be specified with angled brackets (<>)
-around it, which if not specified will be added automatically.
+around it, which if not specified are added automatically.
-If this parameter is not specified then an empty address will be sent to the
-mail server which may cause the email to be rejected.
+If this parameter is not specified then an empty address is sent to the SMTP
+server which might cause the email to be rejected.
The application does not have to keep the string around after setting this
option.
@@ -50,12 +50,16 @@ blank
SMTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "smtp://example.com/");
- curl_easy_setopt(curl, CURLOPT_MAIL_FROM, "president@example.com");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "smtp://example.com/");
+ curl_easy_setopt(curl, CURLOPT_MAIL_FROM, "president@example.com");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -64,4 +68,5 @@ Added in 7.20.0
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_MAIL_RCPT "(3), " CURLOPT_MAIL_AUTH "(3), "
+.BR CURLOPT_MAIL_AUTH (3),
+.BR CURLOPT_MAIL_RCPT (3)
diff --git a/docs/libcurl/opts/CURLOPT_MAIL_RCPT.3 b/docs/libcurl/opts/CURLOPT_MAIL_RCPT.3
index c14ef6c39..595c22166 100644
--- a/docs/libcurl/opts/CURLOPT_MAIL_RCPT.3
+++ b/docs/libcurl/opts/CURLOPT_MAIL_RCPT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_MAIL_RCPT 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_MAIL_RCPT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_MAIL_RCPT \- list of SMTP mail recipients
@@ -41,12 +41,12 @@ to clean up an entire list.
When performing a mail transfer, each recipient should be specified within a
pair of angled brackets (<>), however, should you not use an angled bracket as
-the first character libcurl will assume you provided a single email address
-and enclose that address within brackets for you.
+the first character libcurl assumes you provided a single email address and
+encloses that address within brackets for you.
When performing an address verification (\fBVRFY\fP command), each recipient
should be specified as the user name or user name and domain (as per Section
-3.5 of RFC5321).
+3.5 of RFC 5321).
When performing a mailing list expand (\fBEXPN\fP command), each recipient
should be specified using the mailing list name, such as "Friends" or
@@ -57,16 +57,20 @@ NULL
SMTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- struct curl_slist *list;
- list = curl_slist_append(NULL, "root@localhost");
- list = curl_slist_append(list, "person@example.com");
- curl_easy_setopt(curl, CURLOPT_URL, "smtp://example.com/");
- curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, list);
- ret = curl_easy_perform(curl);
- curl_slist_free_all(list);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ struct curl_slist *list;
+ list = curl_slist_append(NULL, "root@localhost");
+ list = curl_slist_append(list, "person@example.com");
+ curl_easy_setopt(curl, CURLOPT_URL, "smtp://example.com/");
+ curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, list);
+ res = curl_easy_perform(curl);
+ curl_slist_free_all(list);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -74,4 +78,5 @@ Added in 7.20.0. The \fBVRFY\fP and \fBEXPN\fP logic was added in 7.34.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_MAIL_FROM "(3), " CURLOPT_MAIL_AUTH "(3), "
+.BR CURLOPT_MAIL_AUTH (3),
+.BR CURLOPT_MAIL_FROM (3)
diff --git a/docs/libcurl/opts/CURLOPT_MAIL_RCPT_ALLLOWFAILS.3 b/docs/libcurl/opts/CURLOPT_MAIL_RCPT_ALLOWFAILS.3
index ec501fe52..f508fdf99 100644
--- a/docs/libcurl/opts/CURLOPT_MAIL_RCPT_ALLLOWFAILS.3
+++ b/docs/libcurl/opts/CURLOPT_MAIL_RCPT_ALLOWFAILS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,54 +22,62 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_MAIL_RCPT_ALLLOWFAILS 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_MAIL_RCPT_ALLOWFAILS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
-CURLOPT_MAIL_RCPT_ALLLOWFAILS \- allow RCPT TO command to fail for some recipients
+CURLOPT_MAIL_RCPT_ALLOWFAILS \- allow RCPT TO command to fail for some recipients
.SH SYNOPSIS
.nf
#include <curl/curl.h>
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAIL_RCPT_ALLLOWFAILS,
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAIL_RCPT_ALLOWFAILS,
long allow);
.SH DESCRIPTION
If \fIallow\fP is set to 1L, allow RCPT TO command to fail for some recipients.
-When sending data to multiple recipients, by default curl will abort SMTP
-conversation if at least one of the recipients causes RCPT TO command to
+When sending data to multiple recipients, by default curl aborts the SMTP
+conversation if either one of the recipients causes the RCPT TO command to
return an error.
-The default behavior can be changed by setting \fIignore\fP to 1L which will
-make curl ignore errors and proceed with the remaining valid recipients.
+The default behavior can be changed by setting \fIallow\fP to 1L which makes
+libcurl ignore errors for individual recipients and proceed with the remaining
+accepted recipients.
If all recipients trigger RCPT TO failures and this flag is specified, curl
-will still abort the SMTP conversation and return the error received from to
-the last RCPT TO command.
+aborts the SMTP conversation and returns the error received from to the last
+RCPT TO command.
.SH DEFAULT
0
.SH PROTOCOLS
SMTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- struct curl_slist *list;
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ struct curl_slist *list;
+ CURLcode res;
- /* Adding one valid and one invalid email address */
- list = curl_slist_append(NULL, "person@example.com");
- list = curl_slist_append(list, "invalidemailaddress");
+ /* Adding one valid and one invalid email address */
+ list = curl_slist_append(NULL, "person@example.com");
+ list = curl_slist_append(list, "invalidemailaddress");
- curl_easy_setopt(curl, CURLOPT_URL, "smtp://example.com/");
- curl_easy_setopt(curl, CURLOPT_MAIL_RCPT_ALLLOWFAILS, 1L);
+ curl_easy_setopt(curl, CURLOPT_URL, "smtp://example.com/");
+ curl_easy_setopt(curl, CURLOPT_MAIL_RCPT_ALLOWFAILS, 1L);
- ret = curl_easy_perform(curl);
- curl_slist_free_all(list);
- curl_easy_cleanup(curl);
+ res = curl_easy_perform(curl);
+ curl_slist_free_all(list);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
+This option was called CURLOPT_MAIL_RCPT_ALLLOWFAILS before 8.2.0
+
Added in 7.69.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_MAIL_FROM "(3), " CURLOPT_MAIL_RCPT "(3), "
+.BR CURLOPT_MAIL_FROM (3),
+.BR CURLOPT_MAIL_RCPT (3)
diff --git a/docs/libcurl/opts/CURLOPT_MAXAGE_CONN.3 b/docs/libcurl/opts/CURLOPT_MAXAGE_CONN.3
index cb612e06a..1c79ccedf 100644
--- a/docs/libcurl/opts/CURLOPT_MAXAGE_CONN.3
+++ b/docs/libcurl/opts/CURLOPT_MAXAGE_CONN.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 2022 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_MAXAGE_CONN 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_MAXAGE_CONN 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_MAXAGE_CONN \- max idle time allowed for reusing a connection
@@ -34,30 +34,33 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXAGE_CONN, long age);
.fi
.SH DESCRIPTION
Pass a long as parameter containing \fIage\fP - the maximum time in seconds
-that you allow an existing connection to have been idle to be considered for
+allowed for an existing connection to have been idle to be considered for
reuse for this request.
-The "connection cache" that holds previously used connections. When a new
-request is to be done, it will consider any connection that matches for
-reuse. The \fICURLOPT_MAXAGE_CONN(3)\fP limit prevents libcurl from trying too
-old connections for reuse, since old connections have a high risk of not
-working and thus trying them is a performance loss and sometimes service loss
-due to the difficulties to figure out the situation. If a connection is found
-in the cache that is older than this set \fIage\fP, it will instead be closed.
+The "connection cache" holds previously used connections. When a new request
+is to be done, libcurl considers any connection that matches for reuse. The
+\fICURLOPT_MAXAGE_CONN(3)\fP limit prevents libcurl from trying too old
+connections for reuse, since old connections have a higher risk of not working
+and thus trying them is a performance loss and sometimes service loss due to
+the difficulties to figure out the situation. If a connection is found in the
+cache that is older than this set \fIage\fP, it is closed instead.
.SH DEFAULT
Default maximum age is set to 118 seconds.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* only allow 30 seconds idle time */
- curl_easy_setopt(curl, CURLOPT_MAXAGE_CONN, 30L);
+ /* only allow 30 seconds idle time */
+ curl_easy_setopt(curl, CURLOPT_MAXAGE_CONN, 30L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -65,5 +68,7 @@ Added in 7.65.0
.SH RETURN VALUE
Returns CURLE_OK.
.SH "SEE ALSO"
-.BR CURLOPT_TIMEOUT "(3), " CURLOPT_FORBID_REUSE "(3), "
-.BR CURLOPT_FRESH_CONNECT "(3), " CURLOPT_MAXLIFETIME_CONN "(3), "
+.BR CURLOPT_FORBID_REUSE (3),
+.BR CURLOPT_FRESH_CONNECT (3),
+.BR CURLOPT_MAXLIFETIME_CONN (3),
+.BR CURLOPT_TIMEOUT (3)
diff --git a/docs/libcurl/opts/CURLOPT_MAXCONNECTS.3 b/docs/libcurl/opts/CURLOPT_MAXCONNECTS.3
index 084a7c1e8..62b06f3d1 100644
--- a/docs/libcurl/opts/CURLOPT_MAXCONNECTS.3
+++ b/docs/libcurl/opts/CURLOPT_MAXCONNECTS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_MAXCONNECTS 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_MAXCONNECTS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_MAXCONNECTS \- maximum connection cache size
@@ -33,12 +33,11 @@ CURLOPT_MAXCONNECTS \- maximum connection cache size
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXCONNECTS, long amount);
.fi
.SH DESCRIPTION
-Pass a long. The set \fIamount\fP will be the maximum number of simultaneously
-open persistent connections that libcurl may cache in the pool associated with
-this handle. The default is 5, and there is not much point in changing this
-value unless you are perfectly aware of how this works and changes libcurl's
-behavior. This concerns connections using any of the protocols that support
-persistent connections.
+Pass a long. The set \fIamount\fP is the maximum number of simultaneously open
+persistent connections that libcurl may cache in the pool associated with this
+handle. The default is 5, and there is not much point in changing this value
+unless you are perfectly aware of how this works. This concerns connections
+using any of the protocols that support persistent connections.
When reaching the maximum limit, curl closes the oldest one in the cache to
prevent increasing the number of open connections.
@@ -56,13 +55,16 @@ acknowledged, and you must instead use \fIcurl_multi_setopt(3)\fP and the
Most
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- /* limit the connection cache for this handle to no more than 3 */
- curl_easy_setopt(curl, CURLOPT_MAXCONNECTS, 3L);
- ret = curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ /* limit the connection cache for this handle to no more than 3 */
+ curl_easy_setopt(curl, CURLOPT_MAXCONNECTS, 3L);
+ ret = curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -70,4 +72,7 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLMOPT_MAXCONNECTS "(3), " CURLOPT_MAXREDIRS "(3), "
+.BR CURLMOPT_MAX_HOST_CONNECTIONS (3),
+.BR CURLMOPT_MAX_TOTAL_CONNECTIONS (3),
+.BR CURLMOPT_MAXCONNECTS (3),
+.BR CURLOPT_MAXREDIRS (3)
diff --git a/docs/libcurl/opts/CURLOPT_MAXFILESIZE.3 b/docs/libcurl/opts/CURLOPT_MAXFILESIZE.3
index 20342f842..d1cae955e 100644
--- a/docs/libcurl/opts/CURLOPT_MAXFILESIZE.3
+++ b/docs/libcurl/opts/CURLOPT_MAXFILESIZE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_MAXFILESIZE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_MAXFILESIZE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_MAXFILESIZE \- maximum file size allowed to download
@@ -33,29 +33,34 @@ CURLOPT_MAXFILESIZE \- maximum file size allowed to download
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXFILESIZE, long size);
.fi
.SH DESCRIPTION
-Pass a long as parameter. This allows you to specify the maximum \fIsize\fP
-(in bytes) of a file to download. If the file requested is found larger than
-this value, the transfer will not start and \fICURLE_FILESIZE_EXCEEDED\fP will
-be returned.
+Pass a long as parameter. This specifies the maximum accepted \fIsize\fP (in
+bytes) of a file to download. If the file requested is found larger than this
+value, the transfer is aborted and \fICURLE_FILESIZE_EXCEEDED\fP is returned.
-The file size is not always known prior to download, and for such files this
-option has no effect even if the file transfer ends up being larger than this
-given limit.
+The file size is not always known prior to the download start, and for such
+transfers this option has no effect - even if the file transfer eventually
+ends up being larger than this given limit.
If you want a limit above 2GB, use \fICURLOPT_MAXFILESIZE_LARGE(3)\fP.
+
+Since 8.4.0, this option also stops ongoing transfers if they reach this
+threshold.
.SH DEFAULT
None
.SH PROTOCOLS
FTP, HTTP and MQTT
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- /* refuse to download if larger than 1000 bytes! */
- curl_easy_setopt(curl, CURLOPT_MAXFILESIZE, 1000L);
- ret = curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ /* refuse to download if larger than 1000 bytes! */
+ curl_easy_setopt(curl, CURLOPT_MAXFILESIZE, 1000L);
+ ret = curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -63,4 +68,5 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_MAXFILESIZE_LARGE "(3), " CURLOPT_MAX_RECV_SPEED_LARGE "(3), "
+.BR CURLOPT_MAX_RECV_SPEED_LARGE (3),
+.BR CURLOPT_MAXFILESIZE_LARGE (3)
diff --git a/docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.3 b/docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.3
index 0510794f7..87f2cf6cb 100644
--- a/docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.3
+++ b/docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_MAXFILESIZE_LARGE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_MAXFILESIZE_LARGE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_MAXFILESIZE_LARGE \- maximum file size allowed to download
@@ -33,28 +33,34 @@ CURLOPT_MAXFILESIZE_LARGE \- maximum file size allowed to download
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXFILESIZE_LARGE,
curl_off_t size);
.SH DESCRIPTION
-Pass a curl_off_t as parameter. This allows you to specify the maximum
-\fIsize\fP (in bytes) of a file to download. If the file requested is found
-larger than this value, the transfer will not start and
-\fICURLE_FILESIZE_EXCEEDED\fP will be returned.
+Pass a curl_off_t as parameter. This specifies the maximum accepted \fIsize\fP
+(in bytes) of a file to download. If the file requested is found larger than
+this value, the transfer is aborted and \fICURLE_FILESIZE_EXCEEDED\fP is
+returned.
-The file size is not always known prior to download, and for such files this
-option has no effect even if the file transfer ends up being larger than this
-given limit.
+The file size is not always known prior to the download start, and for such
+transfers this option has no effect - even if the file transfer eventually
+ends up being larger than this given limit.
+
+Since 8.4.0, this option also stops ongoing transfers if they reach this
+threshold.
.SH DEFAULT
None
.SH PROTOCOLS
FTP, HTTP and MQTT
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_off_t ridiculous = 1 << 48;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- /* refuse to download if larger than ridiculous */
- curl_easy_setopt(curl, CURLOPT_MAXFILESIZE_LARGE, ridiculous);
- ret = curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_off_t ridiculous = (curl_off_t)1 << 48;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ /* refuse to download if larger than ridiculous */
+ curl_easy_setopt(curl, CURLOPT_MAXFILESIZE_LARGE, ridiculous);
+ ret = curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -62,4 +68,5 @@ Added in 7.11.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_MAXFILESIZE "(3), " CURLOPT_MAX_RECV_SPEED_LARGE "(3), "
+.BR CURLOPT_MAX_RECV_SPEED_LARGE (3),
+.BR CURLOPT_MAXFILESIZE (3)
diff --git a/docs/libcurl/opts/CURLOPT_MAXLIFETIME_CONN.3 b/docs/libcurl/opts/CURLOPT_MAXLIFETIME_CONN.3
index bfe6829f8..f16140b1d 100644
--- a/docs/libcurl/opts/CURLOPT_MAXLIFETIME_CONN.3
+++ b/docs/libcurl/opts/CURLOPT_MAXLIFETIME_CONN.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_MAXLIFETIME_CONN 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_MAXLIFETIME_CONN 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_MAXLIFETIME_CONN \- max lifetime (since creation) allowed for reusing a connection
@@ -39,12 +39,11 @@ seconds, since the creation of the connection, that you allow an existing
connection to have to be considered for reuse for this request.
libcurl features a connection cache that holds previously used connections.
-When a new request is to be done, it will consider any connection that matches
-for reuse. The \fICURLOPT_MAXLIFETIME_CONN(3)\fP limit prevents libcurl from
-trying too old connections for reuse. This can be used for client-side load
-balancing. If a connection is found in the cache that is older than this set
-\fImaxlifetime\fP, it will instead be closed once any in-progress transfers
-complete.
+When a new request is to be done, libcurl considers any connection that
+matches for reuse. The \fICURLOPT_MAXLIFETIME_CONN(3)\fP limit prevents
+libcurl from trying too old connections for reuse. This can be used for
+client-side load balancing. If a connection is found in the cache that is
+older than this set \fImaxlifetime\fP, it is instead marked for closure.
If set to 0, this behavior is disabled: all connections are eligible for reuse.
.SH DEFAULT
@@ -53,14 +52,17 @@ Default \fImaxlifetime\fP is 0 seconds (i.e., disabled).
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* only allow each connection to be reused for 30 seconds */
- curl_easy_setopt(curl, CURLOPT_MAXLIFETIME_CONN, 30L);
+ /* only allow each connection to be reused for 30 seconds */
+ curl_easy_setopt(curl, CURLOPT_MAXLIFETIME_CONN, 30L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -68,5 +70,7 @@ Added in 7.80.0
.SH RETURN VALUE
Returns CURLE_OK.
.SH "SEE ALSO"
-.BR CURLOPT_TIMEOUT "(3), " CURLOPT_FORBID_REUSE "(3), "
-.BR CURLOPT_FRESH_CONNECT "(3), " CURLOPT_MAXAGE_CONN "(3), "
+.BR CURLOPT_FORBID_REUSE (3),
+.BR CURLOPT_FRESH_CONNECT (3),
+.BR CURLOPT_MAXAGE_CONN (3),
+.BR CURLOPT_TIMEOUT (3)
diff --git a/docs/libcurl/opts/CURLOPT_MAXREDIRS.3 b/docs/libcurl/opts/CURLOPT_MAXREDIRS.3
index 7b5b71737..1527d8a19 100644
--- a/docs/libcurl/opts/CURLOPT_MAXREDIRS.3
+++ b/docs/libcurl/opts/CURLOPT_MAXREDIRS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_MAXREDIRS 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_MAXREDIRS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_MAXREDIRS \- maximum number of redirects allowed
@@ -33,32 +33,36 @@ CURLOPT_MAXREDIRS \- maximum number of redirects allowed
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXREDIRS, long amount);
.fi
.SH DESCRIPTION
-Pass a long. The set number will be the redirection limit \fIamount\fP. If
-that many redirections have been followed, the next redirect will cause an
-error (\fICURLE_TOO_MANY_REDIRECTS\fP). This option only makes sense if the
+Pass a long. The set number is the redirection limit \fIamount\fP. If that
+many redirections have been followed, the next redirect triggers the error
+(\fICURLE_TOO_MANY_REDIRECTS\fP). This option only makes sense if the
\fICURLOPT_FOLLOWLOCATION(3)\fP is used at the same time.
-Setting the limit to 0 will make libcurl refuse any redirect.
+Setting the limit to 0 makes libcurl refuse any redirect.
-Set it to -1 for an infinite number of redirects.
+Set it to -1 for an infinite number of redirects. This allows your application
+to get stuck in never-ending redirect loops.
.SH DEFAULT
--1, unlimited
+30 (since 8.3.0), it was previously unlimited.
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- /* enable redirect following */
- curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
+ /* enable redirect following */
+ curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
- /* allow three redirects */
- curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 3L);
+ /* allow three redirects */
+ curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 3L);
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -66,4 +70,6 @@ Along with HTTP
.SH RETURN VALUE
Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_FOLLOWLOCATION "(3), "
+.BR CURLINFO_REDIRECT_COUNT (3),
+.BR CURLINFO_REDIRECT_URL (3),
+.BR CURLOPT_FOLLOWLOCATION (3)
diff --git a/docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.3 b/docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.3
index 5007136a0..5dd18c2af 100644
--- a/docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.3
+++ b/docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_MAX_RECV_SPEED_LARGE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_MAX_RECV_SPEED_LARGE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_MAX_RECV_SPEED_LARGE \- rate limit data download speed
@@ -33,9 +33,9 @@ CURLOPT_MAX_RECV_SPEED_LARGE \- rate limit data download speed
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAX_RECV_SPEED_LARGE,
curl_off_t maxspeed);
.SH DESCRIPTION
-Pass a curl_off_t as parameter. If a download exceeds this \fImaxspeed\fP
-(counted in bytes per second) the transfer will pause to keep the speed less
-than or equal to the parameter value. Defaults to unlimited speed.
+Pass a curl_off_t as parameter. If a download exceeds this \fImaxspeed\fP
+(counted in bytes per second) the transfer pauses to keep the average speed
+less than or equal to the parameter value. Defaults to unlimited speed.
This is not an exact science. libcurl attempts to keep the average speed below
the given threshold over a period time.
@@ -50,13 +50,16 @@ This option does not affect transfer speeds done with FILE:// URLs.
All but file://
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- /* cap the download speed to 31415 bytes/sec */
- curl_easy_setopt(curl, CURLOPT_MAX_RECV_SPEED_LARGE, (curl_off_t)31415);
- ret = curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ /* cap the download speed to 31415 bytes/sec */
+ curl_easy_setopt(curl, CURLOPT_MAX_RECV_SPEED_LARGE, (curl_off_t)31415);
+ ret = curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -64,4 +67,6 @@ Added in 7.15.5
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_MAX_SEND_SPEED_LARGE "(3), " CURLOPT_LOW_SPEED_LIMIT "(3), "
+.BR CURLOPT_LOW_SPEED_LIMIT (3),
+.BR CURLOPT_MAX_SEND_SPEED_LARGE (3),
+.BR CURLOPT_TIMEOUT (3)
diff --git a/docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.3 b/docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.3
index e2e705c32..c3fdb46aa 100644
--- a/docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.3
+++ b/docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_MAX_SEND_SPEED_LARGE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_MAX_SEND_SPEED_LARGE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_MAX_SEND_SPEED_LARGE \- rate limit data upload speed
@@ -33,9 +33,9 @@ CURLOPT_MAX_SEND_SPEED_LARGE \- rate limit data upload speed
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAX_SEND_SPEED_LARGE,
curl_off_t maxspeed);
.SH DESCRIPTION
-Pass a curl_off_t as parameter with the \fImaxspeed\fP. If an upload exceeds
-this speed (counted in bytes per second) the transfer will pause to keep the
-speed less than or equal to the parameter value. Defaults to unlimited
+Pass a curl_off_t as parameter with the \fImaxspeed\fP. If an upload exceeds
+this speed (counted in bytes per second) the transfer pauses to keep the
+average speed less than or equal to the parameter value. Defaults to unlimited
speed.
This is not an exact science. libcurl attempts to keep the average speed below
@@ -52,14 +52,17 @@ This option does not affect transfer speeds done with FILE:// URLs.
All except file://
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- /* cap the upload speed to 1000 bytes/sec */
- curl_easy_setopt(curl, CURLOPT_MAX_SEND_SPEED_LARGE, (curl_off_t)1000);
- /* (set some upload options as well!) */
- ret = curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ /* cap the upload speed to 1000 bytes/sec */
+ curl_easy_setopt(curl, CURLOPT_MAX_SEND_SPEED_LARGE, (curl_off_t)1000);
+ /* (set some upload options as well!) */
+ ret = curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -67,4 +70,5 @@ Added in 7.15.5
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_MAX_RECV_SPEED_LARGE "(3), " CURLOPT_LOW_SPEED_LIMIT "(3), "
+.BR CURLOPT_LOW_SPEED_LIMIT (3),
+.BR CURLOPT_MAX_RECV_SPEED_LARGE (3)
diff --git a/docs/libcurl/opts/CURLOPT_MIMEPOST.3 b/docs/libcurl/opts/CURLOPT_MIMEPOST.3
index cbc115a10..34f13049f 100644
--- a/docs/libcurl/opts/CURLOPT_MIMEPOST.3
+++ b/docs/libcurl/opts/CURLOPT_MIMEPOST.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_MIMEPOST 3 "October 12, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_MIMEPOST 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_MIMEPOST \- send data from mime structure
@@ -41,31 +41,45 @@ SMTP and IMAP protocols to provide the email data to send/upload.
This option is the preferred way of posting an HTTP form, replacing and
extending the \fICURLOPT_HTTPPOST(3)\fP option.
+
+When setting \fICURLOPT_MIMEPOST(3)\fP to NULL, libcurl resets the request
+type for HTTP to the default to disable the POST. Typically that would mean it
+is reset to GET. Instead you should set a desired request method explicitly.
.SH PROTOCOLS
HTTP, SMTP, IMAP.
.SH EXAMPLE
.nf
- curl_mime *multipart = curl_mime_init(handle);
- curl_mimepart *part = curl_mime_addpart(multipart);
- curl_mime_name(part, "name");
- curl_mime_data(part, "daniel", CURL_ZERO_TERMINATED);
- part = curl_mime_addpart(multipart);
- curl_mime_name(part, "project");
- curl_mime_data(part, "curl", CURL_ZERO_TERMINATED);
- part = curl_mime_addpart(multipart);
- curl_mime_name(part, "logotype-image");
- curl_mime_filedata(part, "curl.png");
-
- /* Set the form info */
- curl_easy_setopt(handle, CURLOPT_MIMEPOST, multipart);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_mime *multipart = curl_mime_init(curl);
+ if(multipart) {
+ curl_mimepart *part = curl_mime_addpart(multipart);
+ curl_mime_name(part, "name");
+ curl_mime_data(part, "daniel", CURL_ZERO_TERMINATED);
+ part = curl_mime_addpart(multipart);
+ curl_mime_name(part, "project");
+ curl_mime_data(part, "curl", CURL_ZERO_TERMINATED);
+ part = curl_mime_addpart(multipart);
+ curl_mime_name(part, "logotype-image");
+ curl_mime_filedata(part, "curl.png");
- curl_easy_perform(handle); /* post away! */
+ /* Set the form info */
+ curl_easy_setopt(curl, CURLOPT_MIMEPOST, multipart);
- curl_mime_free(multipart); /* free the post data */
+ curl_easy_perform(curl); /* post away! */
+ curl_mime_free(multipart); /* free the post data */
+ }
+ }
+}
.fi
.SH AVAILABILITY
Added in 7.56.0
.SH RETURN VALUE
-This will return CURLE_OK.
+This returns CURLE_OK.
.SH "SEE ALSO"
-.BR curl_mime_init "(3)"
+.BR curl_mime_init (3),
+.BR CURLOPT_HTTPPOST (3),
+.BR CURLOPT_POSTFIELDS (3),
+.BR CURLOPT_PUT (3)
diff --git a/docs/libcurl/opts/CURLOPT_MIME_OPTIONS.3 b/docs/libcurl/opts/CURLOPT_MIME_OPTIONS.3
index a753dfa9e..f3c47c4d9 100644
--- a/docs/libcurl/opts/CURLOPT_MIME_OPTIONS.3
+++ b/docs/libcurl/opts/CURLOPT_MIME_OPTIONS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_MIME_OPTIONS 3 "September 02, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_MIME_OPTIONS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_MIME_OPTIONS \- set MIME option flags
@@ -61,29 +61,32 @@ When the containing multipart form is sent, this is normally transmitted as
HTTP, IMAP, SMTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-curl_mime *form = NULL;
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ curl_mime *form = NULL;
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_MIME_OPTIONS, CURLMIMEOPT_FORMESCAPE);
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_setopt(curl, CURLOPT_MIME_OPTIONS, CURLMIMEOPT_FORMESCAPE);
- form = curl_mime_init(curl);
- if(form) {
- curl_mimepart *part = curl_mime_addpart(form);
+ form = curl_mime_init(curl);
+ if(form) {
+ curl_mimepart *part = curl_mime_addpart(form);
- if(part) {
- curl_mime_filedata(part, "strange\\\\file\\\\name");
- curl_mime_name(part, "strange\\"field\\"name");
- curl_easy_setopt(curl, CURLOPT_MIMEPOST, form);
+ if(part) {
+ curl_mime_filedata(part, "strange\\\\file\\\\name");
+ curl_mime_name(part, "strange\\"field\\"name");
+ curl_easy_setopt(curl, CURLOPT_MIMEPOST, form);
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
- }
- curl_easy_cleanup(curl);
- curl_mime_free(mime);
+ curl_easy_cleanup(curl);
+ curl_mime_free(form);
+ }
}
.fi
.SH AVAILABILITY
@@ -91,4 +94,5 @@ Option added in 7.81.0.
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_MIMEPOST "(3), " CURLOPT_HTTPPOST "(3)"
+.BR CURLOPT_HTTPPOST (3),
+.BR CURLOPT_MIMEPOST (3)
diff --git a/docs/libcurl/opts/CURLOPT_NETRC.3 b/docs/libcurl/opts/CURLOPT_NETRC.3
index 97f436d8a..61a48e39c 100644
--- a/docs/libcurl/opts/CURLOPT_NETRC.3
+++ b/docs/libcurl/opts/CURLOPT_NETRC.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_NETRC 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_NETRC 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_NETRC \- enable use of .netrc
@@ -37,8 +37,8 @@ This parameter controls the preference \fIlevel\fP of libcurl between using
user names and passwords from your \fI~/.netrc\fP file, relative to user names
and passwords in the URL supplied with \fICURLOPT_URL(3)\fP.
-On Windows, libcurl will use the file as \fI%HOME%/_netrc\fP. If \fI%HOME%\fP
-is not set on Windows, libcurl falls back to \fI%USERPROFILE%\fP.
+On Windows, libcurl uses the file as \fI%HOME%/_netrc\fP. If \fI%HOME%\fP is
+not set on Windows, libcurl falls back to \fI%USERPROFILE%\fP.
You can also tell libcurl a different file name to use with
\fICURLOPT_NETRC_FILE(3)\fP.
@@ -55,17 +55,17 @@ standard Unix ftp client does). It should only be readable by user.
\fIlevel\fP is a long that should be set to one of the values described below.
.IP "CURL_NETRC_IGNORED (0)"
-The library will ignore the \fI.netrc\fP file. This is the default.
+libcurl ignores the \fI.netrc\fP file. This is the default.
.IP "CURL_NETRC_OPTIONAL (1)"
The use of the \fI.netrc\fP file is optional, and information in the URL is to
-be preferred. The file will be scanned for the host and user name (to find
-the password only) or for the host only, to find the first user name and
-password after that \fImachine\fP, which ever information is not specified.
+be preferred. The file is scanned for the host and user name (to find the
+password only) or for the host only, to find the first user name and password
+after that \fImachine\fP, which ever information is not specified.
.IP "CURL_NETRC_REQUIRED (2)"
The use of the \fI.netrc\fP file is required, and any credential information
-present in the URL is ignored. The file will be scanned for the host and user
-name (to find the password only) or for the host only, to find the first user
-name and password after that \fImachine\fP, which ever information is not
+present in the URL is ignored. The file is scanned for the host and user name
+(to find the password only) or for the host only, to find the first user name
+and password after that \fImachine\fP, which ever information is not
specified.
.SH FILE FORMAT
The \fB.netrc\fP file format is simple: you specify lines with a machine name
@@ -92,26 +92,29 @@ add a line similar to this in the end:
.IP "login <name>"
The user name string for the remote machine.
.IP "password <secret>"
-Supply a password. If this token is present, curl will supply the specified
+Supply a password. If this token is present, curl supplies the specified
string if the remote server requires a password as part of the login process.
Note that if this token is present in the .netrc file you really should make
sure the file is not readable by anyone besides the user.
.IP "macdef <name>"
Define a macro. This feature is not supported by libcurl. In order for the
-rest of the .netrc to still work fine, libcurl will properly skip every
-definition done with "macdef" that it finds.
+rest of the .netrc to still work fine, libcurl properly skips every definition
+done with "macdef" that it finds.
.SH DEFAULT
CURL_NETRC_IGNORED
.SH PROTOCOLS
Most
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/");
- curl_easy_setopt(curl, CURLOPT_NETRC, CURL_NETRC_OPTIONAL);
- ret = curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/");
+ curl_easy_setopt(curl, CURLOPT_NETRC, CURL_NETRC_OPTIONAL);
+ ret = curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -119,4 +122,6 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_USERPWD "(3), " CURLOPT_USERNAME "(3), " CURLOPT_NETRC_FILE "(3), "
+.BR CURLOPT_USERPWD (3),
+.BR CURLOPT_USERNAME (3),
+.BR CURLOPT_NETRC_FILE (3)
diff --git a/docs/libcurl/opts/CURLOPT_NETRC_FILE.3 b/docs/libcurl/opts/CURLOPT_NETRC_FILE.3
index f4a5d99a9..02759c822 100644
--- a/docs/libcurl/opts/CURLOPT_NETRC_FILE.3
+++ b/docs/libcurl/opts/CURLOPT_NETRC_FILE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_NETRC_FILE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_NETRC_FILE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_NETRC_FILE \- file name to read .netrc info from
@@ -36,8 +36,7 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NETRC_FILE, char *file);
Pass a char * as parameter, pointing to a null-terminated string containing
the full path name to the \fIfile\fP you want libcurl to use as .netrc
file. If this option is omitted, and \fICURLOPT_NETRC(3)\fP is set, libcurl
-will attempt to find a .netrc file in the current user's home
-directory.
+checks for a .netrc file in the current user's home directory.
The application does not have to keep the string around after setting this
option.
@@ -47,13 +46,16 @@ NULL
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/");
- curl_easy_setopt(curl, CURLOPT_NETRC, CURL_NETRC_OPTIONAL);
- curl_easy_setopt(curl, CURLOPT_NETRC_FILE, "/tmp/magic-netrc");
- ret = curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/");
+ curl_easy_setopt(curl, CURLOPT_NETRC, CURL_NETRC_OPTIONAL);
+ curl_easy_setopt(curl, CURLOPT_NETRC_FILE, "/tmp/magic-netrc");
+ ret = curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -62,4 +64,6 @@ Added in 7.10.9
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_NETRC "(3), " CURLOPT_USERNAME "(3), "
+.BR CURLOPT_NETRC (3),
+.BR CURLOPT_PASSWORD (3),
+.BR CURLOPT_USERNAME (3)
diff --git a/docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.3 b/docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.3
index d684a4a39..7a9435ca6 100644
--- a/docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.3
+++ b/docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_NEW_DIRECTORY_PERMS 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_NEW_DIRECTORY_PERMS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_NEW_DIRECTORY_PERMS \- permissions for remotely created directories
@@ -33,8 +33,8 @@ CURLOPT_NEW_DIRECTORY_PERMS \- permissions for remotely created directories
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NEW_DIRECTORY_PERMS,
long mode);
.SH DESCRIPTION
-Pass a long as a parameter, containing the value of the permissions that will
-be assigned to newly created directories on the remote server. The default value is
+Pass a long as a parameter, containing the value of the permissions that is
+set on newly created directories on the remote server. The default value is
\fI0755\fP, but any valid value can be used. The only protocols that can use
this are \fIsftp://\fP, \fIscp://\fP, and \fIfile://\fP.
.SH DEFAULT
@@ -43,13 +43,17 @@ this are \fIsftp://\fP, \fIscp://\fP, and \fIfile://\fP.
SFTP, SCP and FILE
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_easy_setopt(curl, CURLOPT_URL, "sftp://upload.example.com/newdir/file.zip");
- curl_easy_setopt(curl, CURLOPT_FTP_CREATE_MISSING_DIRS, 1L);
- curl_easy_setopt(curl, CURLOPT_NEW_DIRECTORY_PERMS, 0644L);
- ret = curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL,
+ "sftp://upload.example.com/newdir/file.zip");
+ curl_easy_setopt(curl, CURLOPT_FTP_CREATE_MISSING_DIRS, 1L);
+ curl_easy_setopt(curl, CURLOPT_NEW_DIRECTORY_PERMS, 0644L);
+ ret = curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -57,4 +61,6 @@ Added in 7.16.4
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_NEW_FILE_PERMS "(3), " CURLOPT_UPLOAD "(3), "
+.BR CURLOPT_FTP_CREATE_MISSING_DIRS (3),
+.BR CURLOPT_NEW_FILE_PERMS (3),
+.BR CURLOPT_UPLOAD (3)
diff --git a/docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.3 b/docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.3
index 2fde58ce3..14e15263c 100644
--- a/docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.3
+++ b/docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_NEW_FILE_PERMS 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_NEW_FILE_PERMS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_NEW_FILE_PERMS \- permissions for remotely created files
@@ -33,8 +33,8 @@ CURLOPT_NEW_FILE_PERMS \- permissions for remotely created files
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NEW_FILE_PERMS,
long mode);
.SH DESCRIPTION
-Pass a long as a parameter, containing the value of the permissions that will
-be assigned to newly created files on the remote server. The default value is
+Pass a long as a parameter, containing the value of the permissions that are
+set on newly created files on the remote server. The default value is
\fI0644\fP, but any valid value can be used. The only protocols that can use
this are \fIsftp://\fP, \fIscp://\fP, and \fIfile://\fP.
.SH DEFAULT
@@ -43,12 +43,15 @@ this are \fIsftp://\fP, \fIscp://\fP, and \fIfile://\fP.
SFTP, SCP and FILE
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_easy_setopt(curl, CURLOPT_URL, "sftp://upload.example.com/file.txt");
- curl_easy_setopt(curl, CURLOPT_NEW_FILE_PERMS, 0664L);
- ret = curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL, "sftp://upload.example.com/file.txt");
+ curl_easy_setopt(curl, CURLOPT_NEW_FILE_PERMS, 0664L);
+ ret = curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -56,4 +59,5 @@ Added in 7.16.4
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_NEW_DIRECTORY_PERMS "(3), " CURLOPT_UPLOAD "(3), "
+.BR CURLOPT_NEW_DIRECTORY_PERMS (3),
+.BR CURLOPT_UPLOAD (3)
diff --git a/docs/libcurl/opts/CURLOPT_NOBODY.3 b/docs/libcurl/opts/CURLOPT_NOBODY.3
index 304bf4c54..32e21ac0d 100644
--- a/docs/libcurl/opts/CURLOPT_NOBODY.3
+++ b/docs/libcurl/opts/CURLOPT_NOBODY.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_NOBODY 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_NOBODY 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_NOBODY \- do the download request without getting the body
@@ -39,31 +39,34 @@ libcurl do a HEAD request. For most other protocols it means just not asking
to transfer the body data.
For HTTP operations when \fICURLOPT_NOBODY(3)\fP has been set, disabling this
-option (with 0) will make it a GET again - only if the method is still set to
-be HEAD. The proper way to get back to a GET request is to set
+option (with 0) makes it a GET again - only if the method is still set to be
+HEAD. The proper way to get back to a GET request is to set
\fICURLOPT_HTTPGET(3)\fP and for other methods, use the POST or UPLOAD
options.
Enabling \fICURLOPT_NOBODY(3)\fP means asking for a download without a body.
-If you do a transfer with HTTP that involves a method other than HEAD, you
-will get a body (unless the resource and server sends a zero byte body for the
-specific URL you request).
+If you do a transfer with HTTP that involves a method other than HEAD, you get
+a body (unless the resource and server sends a zero byte body for the specific
+URL you request).
.SH DEFAULT
0, the body is transferred
.SH PROTOCOLS
Most
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* get us the resource without a body - use HEAD! */
- curl_easy_setopt(curl, CURLOPT_NOBODY, 1L);
+ /* get us the resource without a body - use HEAD! */
+ curl_easy_setopt(curl, CURLOPT_NOBODY, 1L);
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -71,5 +74,8 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_HTTPGET "(3), " CURLOPT_POSTFIELDS "(3), " CURLOPT_UPLOAD "(3), "
-.BR CURLOPT_REQUEST_TARGET "(3), " CURLOPT_MIMEPOST "(3), "
+.BR CURLOPT_HTTPGET (3),
+.BR CURLOPT_MIMEPOST (3),
+.BR CURLOPT_POSTFIELDS (3),
+.BR CURLOPT_REQUEST_TARGET (3),
+.BR CURLOPT_UPLOAD (3)
diff --git a/docs/libcurl/opts/CURLOPT_NOPROGRESS.3 b/docs/libcurl/opts/CURLOPT_NOPROGRESS.3
index 72a9b9cb3..1569458e4 100644
--- a/docs/libcurl/opts/CURLOPT_NOPROGRESS.3
+++ b/docs/libcurl/opts/CURLOPT_NOPROGRESS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_NOPROGRESS 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_NOPROGRESS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_NOPROGRESS \- switch off the progress meter
@@ -34,7 +34,7 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOPROGRESS, long onoff);
.fi
.SH DESCRIPTION
If \fIonoff\fP is to 1, it tells the library to shut off the progress meter
-completely for requests done with this \fIhandle\fP. It will also prevent the
+completely for requests done with this \fIhandle\fP. It also prevents the
\fICURLOPT_XFERINFOFUNCTION(3)\fP or \fICURLOPT_PROGRESSFUNCTION(3)\fP from
getting called.
.SH DEFAULT
@@ -43,15 +43,18 @@ getting called.
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* enable progress meter */
- curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
+ /* enable progress meter */
+ curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -59,6 +62,7 @@ Always
.SH RETURN VALUE
Returns CURLE_OK.
.SH "SEE ALSO"
-.BR CURLOPT_XFERINFOFUNCTION "(3), "
-.BR CURLOPT_PROGRESSFUNCTION "(3), "
-.BR CURLOPT_VERBOSE "(3), "
+.BR CURLOPT_DEBUGFUNCTION (3),
+.BR CURLOPT_PROGRESSFUNCTION (3),
+.BR CURLOPT_VERBOSE (3),
+.BR CURLOPT_XFERINFOFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_NOPROXY.3 b/docs/libcurl/opts/CURLOPT_NOPROXY.3
index 149eaaceb..d887e073a 100644
--- a/docs/libcurl/opts/CURLOPT_NOPROXY.3
+++ b/docs/libcurl/opts/CURLOPT_NOPROXY.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_NOPROXY 3 "October 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_NOPROXY 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_NOPROXY \- disable proxy use for specific hosts
@@ -41,40 +41,44 @@ list is matched as either a domain which contains the hostname, or the
hostname itself. For example, "ample.com" would match ample.com, ample.com:80,
and www.ample.com, but not www.example.com or ample.com.org.
-If the name in the \fInoproxy\fP list has a leading period, it is a domain
-match against the provided host name. This way ".example.com" will switch off
-proxy use for both "www.example.com" as well as for "foo.example.com".
-
-Setting the \fInoproxy\fP string to "" (an empty string) will explicitly
-enable the proxy for all host names, even if there is an environment variable
-set for it.
+Setting the \fInoproxy\fP string to "" (an empty string) explicitly enables
+the proxy for all host names, even if there is an environment variable set for
+it.
Enter IPv6 numerical addresses in the list of host names without enclosing
brackets:
"example.com,::1,localhost"
+Since 7.86.0, IP addresses specified to this option can be provided using CIDR
+notation: 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".
+
The application does not have to keep the string around after setting this
option.
.SH "Environment variables"
-If there's an environment variable called \fBno_proxy\fP (or \fBNO_PROXY\fP),
-it will be used if the \fICURLOPT_NOPROXY(3)\fP option is not set. It works
-exactly the same way.
+If there is an environment variable called \fBno_proxy\fP (or \fBNO_PROXY\fP),
+it is used if the \fICURLOPT_NOPROXY(3)\fP option is not set. It works exactly
+the same way.
.SH DEFAULT
NULL
.SH PROTOCOLS
Most
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- /* accept various URLs */
- curl_easy_setopt(curl, CURLOPT_URL, input);
- /* use this proxy */
- curl_easy_setopt(curl, CURLOPT_PROXY, "http://proxy:80");
- /* ... but make sure this host name is not proxied */
- curl_easy_setopt(curl, CURLOPT_NOPROXY, "www.example.com");
- curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ /* accept various URLs */
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ /* use this proxy */
+ curl_easy_setopt(curl, CURLOPT_PROXY, "http://proxy:80");
+ /* ... but make sure this host name is not proxied */
+ curl_easy_setopt(curl, CURLOPT_NOPROXY, "www.example.com");
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -83,4 +87,6 @@ Added in 7.19.4
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY "(3), " CURLOPT_PROXYAUTH "(3), "
+.BR CURLOPT_PROXY (3),
+.BR CURLOPT_PROXYAUTH (3),
+.BR CURLOPT_PROXYTYPE (3)
diff --git a/docs/libcurl/opts/CURLOPT_NOSIGNAL.3 b/docs/libcurl/opts/CURLOPT_NOSIGNAL.3
index 7a389ad6c..89407a04b 100644
--- a/docs/libcurl/opts/CURLOPT_NOSIGNAL.3
+++ b/docs/libcurl/opts/CURLOPT_NOSIGNAL.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_NOSIGNAL 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_NOSIGNAL 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_NOSIGNAL \- skip all signal handling
@@ -33,16 +33,16 @@ CURLOPT_NOSIGNAL \- skip all signal handling
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOSIGNAL, long onoff);
.fi
.SH DESCRIPTION
-If \fIonoff\fP is 1, libcurl will not use any functions that install signal
-handlers or any functions that cause signals to be sent to the process. This
-option is here to allow multi-threaded unix applications to still set/use all
-timeout options etc, without risking getting signals.
+If \fIonoff\fP is 1, libcurl uses no functions that install signal handlers or
+any functions that cause signals to be sent to the process. This option is
+here to allow multi-threaded unix applications to still set/use all timeout
+options etc, without risking getting signals.
If this option is set and libcurl has been built with the standard name
-resolver, timeouts will not occur while the name resolve takes place.
-Consider building libcurl with the c-ares or threaded resolver backends to
-enable asynchronous DNS lookups, to enable timeouts for name resolves without
-the use of signals.
+resolver, timeouts cannot occur while the name resolve takes place. Consider
+building libcurl with the c-ares or threaded resolver backends to enable
+asynchronous DNS lookups, to enable timeouts for name resolves without the use
+of signals.
Setting \fICURLOPT_NOSIGNAL(3)\fP to 1 makes libcurl NOT ask the system to
ignore SIGPIPE signals, which otherwise are sent by the system when trying to
@@ -58,15 +58,19 @@ raised.
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);
+ curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
diff --git a/docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.3 b/docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.3
index edfbe90c4..354f1657f 100644
--- a/docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.3
+++ b/docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_OPENSOCKETDATA 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_OPENSOCKETDATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_OPENSOCKETDATA \- pointer passed to open socket callback
@@ -33,7 +33,7 @@ CURLOPT_OPENSOCKETDATA \- pointer passed to open socket callback
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_OPENSOCKETDATA, void *pointer);
.fi
.SH DESCRIPTION
-Pass a \fIpointer\fP that will be untouched by libcurl and passed as the first
+Pass a \fIpointer\fP that is untouched by libcurl and passed as the first
argument in the open socket callback set with
\fICURLOPT_OPENSOCKETFUNCTION(3)\fP.
.SH DEFAULT
@@ -62,21 +62,27 @@ static int sockopt_callback(void *clientp, curl_socket_t curlfd,
return CURL_SOCKOPT_ALREADY_CONNECTED;
}
-curl = curl_easy_init();
-if(curl) {
- /* libcurl will internally think that you connect to the host
- * and port that you specify in the URL option. */
- curl_easy_setopt(curl, CURLOPT_URL, "http://99.99.99.99:9999");
- /* call this function to get a socket */
- curl_easy_setopt(curl, CURLOPT_OPENSOCKETFUNCTION, opensocket);
- curl_easy_setopt(curl, CURLOPT_OPENSOCKETDATA, &sockfd);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ extern int sockfd; /* the already connected one */
+
+ /* libcurl thinks that you connect to the host
+ * and port that you specify in the URL option. */
+ curl_easy_setopt(curl, CURLOPT_URL, "http://99.99.99.99:9999");
+ /* call this function to get a socket */
+ curl_easy_setopt(curl, CURLOPT_OPENSOCKETFUNCTION, opensocket);
+ curl_easy_setopt(curl, CURLOPT_OPENSOCKETDATA, &sockfd);
- /* call this function to set options for the socket */
- curl_easy_setopt(curl, CURLOPT_SOCKOPTFUNCTION, sockopt_callback);
+ /* call this function to set options for the socket */
+ curl_easy_setopt(curl, CURLOPT_SOCKOPTFUNCTION, sockopt_callback);
- res = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -84,4 +90,6 @@ Added in 7.17.1
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_OPENSOCKETFUNCTION "(3), " CURLOPT_SOCKOPTFUNCTION "(3), "
+.BR CURLOPT_CLOSESOCKETFUNCTION (3),
+.BR CURLOPT_OPENSOCKETFUNCTION (3),
+.BR CURLOPT_SOCKOPTFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.3 b/docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.3
index cc7b86101..b6f7aeab5 100644
--- a/docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_OPENSOCKETFUNCTION 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_OPENSOCKETFUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_OPENSOCKETFUNCTION \- callback for opening socket
@@ -65,8 +65,8 @@ is allowed to modify the address or refuse to connect completely. The callback
function should return the newly created socket or \fICURL_SOCKET_BAD\fP in
case no connection could be established or another error was detected. Any
additional \fIsetsockopt(2)\fP calls can of course be done on the socket at
-the user's discretion. A \fICURL_SOCKET_BAD\fP return value from the callback
-function will signal an unrecoverable error to libcurl and it will return
+the user's discretion. A \fICURL_SOCKET_BAD\fP return value from the callback
+function signals an unrecoverable error to libcurl and it returns
\fICURLE_COULDNT_CONNECT\fP from the function that triggered this callback.
This return code can be used for IP address block listing.
@@ -102,21 +102,26 @@ static int sockopt_callback(void *clientp, curl_socket_t curlfd,
return CURL_SOCKOPT_ALREADY_CONNECTED;
}
-curl = curl_easy_init();
-if(curl) {
- /* libcurl will internally think that you connect to the host
- * and port that you specify in the URL option. */
- curl_easy_setopt(curl, CURLOPT_URL, "http://99.99.99.99:9999");
- /* call this function to get a socket */
- curl_easy_setopt(curl, CURLOPT_OPENSOCKETFUNCTION, opensocket);
- curl_easy_setopt(curl, CURLOPT_OPENSOCKETDATA, &sockfd);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ extern int sockfd; /* the already connected one */
+ /* libcurl thinks that you connect to the host
+ * and port that you specify in the URL option. */
+ curl_easy_setopt(curl, CURLOPT_URL, "http://99.99.99.99:9999");
+ /* call this function to get a socket */
+ curl_easy_setopt(curl, CURLOPT_OPENSOCKETFUNCTION, opensocket);
+ curl_easy_setopt(curl, CURLOPT_OPENSOCKETDATA, &sockfd);
- /* call this function to set options for the socket */
- curl_easy_setopt(curl, CURLOPT_SOCKOPTFUNCTION, sockopt_callback);
+ /* call this function to set options for the socket */
+ curl_easy_setopt(curl, CURLOPT_SOCKOPTFUNCTION, sockopt_callback);
- res = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -124,5 +129,7 @@ Added in 7.17.1.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_OPENSOCKETDATA "(3), " CURLOPT_SOCKOPTFUNCTION "(3), "
-.BR CURLOPT_CLOSESOCKETFUNCTION "(3), "
+.BR CURLOPT_CLOSESOCKETFUNCTION (3),
+.BR CURLOPT_OPENSOCKETFUNCTION (3),
+.BR CURLOPT_SOCKOPTFUNCTION (3)
+
diff --git a/docs/libcurl/opts/CURLOPT_PASSWORD.3 b/docs/libcurl/opts/CURLOPT_PASSWORD.3
index 73ba6b508..9b3e381b5 100644
--- a/docs/libcurl/opts/CURLOPT_PASSWORD.3
+++ b/docs/libcurl/opts/CURLOPT_PASSWORD.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PASSWORD 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PASSWORD 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PASSWORD \- password to use in authentication
@@ -47,15 +47,19 @@ blank
Most
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- curl_easy_setopt(curl, CURLOPT_PASSWORD, "qwerty");
+ curl_easy_setopt(curl, CURLOPT_PASSWORD, "qwerty");
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -64,5 +68,7 @@ Added in 7.19.1
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_USERPWD "(3), " CURLOPT_USERNAME "(3), "
-.BR CURLOPT_HTTPAUTH "(3), " CURLOPT_PROXYAUTH "(3)"
+.BR CURLOPT_HTTPAUTH (3),
+.BR CURLOPT_PROXYAUTH (3),
+.BR CURLOPT_USERNAME (3),
+.BR CURLOPT_USERPWD (3)
diff --git a/docs/libcurl/opts/CURLOPT_PATH_AS_IS.3 b/docs/libcurl/opts/CURLOPT_PATH_AS_IS.3
index 5063d46cd..f7ec0eebd 100644
--- a/docs/libcurl/opts/CURLOPT_PATH_AS_IS.3
+++ b/docs/libcurl/opts/CURLOPT_PATH_AS_IS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PATH_AS_IS 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PATH_AS_IS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PATH_AS_IS \- do not handle dot dot sequences
@@ -44,20 +44,27 @@ Some server implementations are known to (erroneously) require the dot dot
sequences to remain in the path and some clients want to pass these on in
order to try out server implementations.
-By default libcurl will merge such sequences before using the path.
+By default libcurl normalizes such sequences before using the path.
+
+The corresponding flag for the \fIcurl_url_set(3)\fP function is called
+\fBCURLU_PATH_AS_IS\fP.
.SH DEFAULT
0
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/../../etc/password");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL,
+ "https://example.com/../../etc/password");
- curl_easy_setopt(curl, CURLOPT_PATH_AS_IS, 1L);
+ curl_easy_setopt(curl, CURLOPT_PATH_AS_IS, 1L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -65,5 +72,9 @@ Added in 7.42.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_STDERR "(3), " CURLOPT_DEBUGFUNCTION "(3), "
-.BR CURLOPT_URL "(3), "
+.BR curl_url_set (3),
+.BR CURLOPT_STDERR (3),
+.BR CURLOPT_DEBUGFUNCTION (3),
+.BR CURLOPT_URL (3)
+
+
diff --git a/docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.3 b/docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.3
index afeeabf0d..ff9bfc27d 100644
--- a/docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.3
+++ b/docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PINNEDPUBLICKEY 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PINNEDPUBLICKEY 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PINNEDPUBLICKEY \- pinned public key
@@ -41,8 +41,11 @@ The string can also be any number of base64 encoded sha256 hashes preceded by
When negotiating a TLS or SSL connection, the server sends a certificate
indicating its identity. A public key is extracted from this certificate and
-if it does not exactly match the public key provided to this option, curl will
-abort the connection before sending or receiving any data.
+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 \fICURLOPT_SSL_VERIFYPEER(3)\fP. If you
+turn off that option then the peer is still verified by public key.
On mismatch, \fICURLE_SSL_PINNEDPUBKEYNOTMATCH\fP is returned.
@@ -54,16 +57,22 @@ NULL
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_PINNEDPUBLICKEY, "/etc/publickey.der");
- /* OR
- curl_easy_setopt(curl, CURLOPT_PINNEDPUBLICKEY, "sha256//YhKJKSzoTt2b5FP18fvpHo7fJYqQCjAa3HWY3tvRMwE=;sha256//t62CeU2tQiqkexU74Gxa2eg7fRbEgoChTociMee9wno=");
- */
-
- /* Perform the request */
- curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_setopt(curl, CURLOPT_PINNEDPUBLICKEY, "/etc/publickey.der");
+ /* OR
+ curl_easy_setopt(curl, CURLOPT_PINNEDPUBLICKEY,
+ "sha256//YhKJKSzoTt2b5FP18fvpHo7fJYqQCjAa3HWY3"
+ "tvRMwE=;sha256//t62CeU2tQiqkexU74Gxa2eg7fRbEg"
+ "oChTociMee9wno=");
+ */
+
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH PUBLIC KEY EXTRACTION
@@ -103,9 +112,7 @@ PEM/DER support:
7.39.0: OpenSSL, GnuTLS
- 7.39.0-7.48.0,7.58.1+: GSKit
-
- 7.43.0: NSS and wolfSSL
+ 7.43.0: wolfSSL
7.47.0: mbedTLS
@@ -115,20 +122,20 @@ PEM/DER support:
sha256 support:
- 7.44.0: OpenSSL, GnuTLS, NSS and wolfSSL
+ 7.44.0: OpenSSL, GnuTLS and wolfSSL
7.47.0: mbedTLS
7.54.1: Secure Transport on macOS 10.7+/iOS 10+
- 7.58.1: Schannel Windows XP SP3+
+ 7.58.1: Schannel
Other SSL backends not supported.
.SH RETURN VALUE
Returns CURLE_OK if TLS enabled, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_SSL_VERIFYPEER "(3), "
-.BR CURLOPT_SSL_VERIFYHOST "(3), "
-.BR CURLOPT_CAINFO "(3), "
-.BR CURLOPT_CAPATH "(3), "
+.BR CURLOPT_CAINFO (3),
+.BR CURLOPT_CAPATH (3),
+.BR CURLOPT_SSL_VERIFYHOST (3),
+.BR CURLOPT_SSL_VERIFYPEER (3)
diff --git a/docs/libcurl/opts/CURLOPT_PIPEWAIT.3 b/docs/libcurl/opts/CURLOPT_PIPEWAIT.3
index 2f05d4dfb..48f5ae821 100644
--- a/docs/libcurl/opts/CURLOPT_PIPEWAIT.3
+++ b/docs/libcurl/opts/CURLOPT_PIPEWAIT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,10 +22,10 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PIPEWAIT 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PIPEWAIT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
-CURLOPT_PIPEWAIT \- wait for pipelining/multiplexing
+CURLOPT_PIPEWAIT \- wait for multiplexing
.SH SYNOPSIS
.nf
#include <curl/curl.h>
@@ -34,22 +34,21 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PIPEWAIT, long wait);
.fi
.SH DESCRIPTION
Set \fIwait\fP to 1L to tell libcurl to prefer to wait for a connection to
-confirm or deny that it can do pipelining or multiplexing before continuing.
+confirm or deny that it can do multiplexing before continuing.
-When about to perform a new transfer that allows pipelining or multiplexing,
-libcurl will check for existing connections to re-use and pipeline on. If no
-such connection exists it will immediately continue and create a fresh new
-connection to use.
+When about to perform a new transfer that allows multiplexing, libcurl checks
+for existing connections to use. If no such connection exists it immediately
+continues and creates a fresh new connection to use.
By setting this option to 1 - and having \fICURLMOPT_PIPELINING(3)\fP enabled
-for the multi handle this transfer is associated with - libcurl will instead
-wait for the connection to reveal if it is possible to pipeline/multiplex on
-before it continues. This enables libcurl to much better keep the number of
-connections to a minimum when using pipelining or multiplexing protocols.
+for the multi handle this transfer is associated with - libcurl instead waits
+for the connection to reveal if it is possible to multiplex on before it
+continues. This enables libcurl to much better keep the number of connections
+to a minimum when using multiplexing protocols.
-The effect thus becomes that with this option set, libcurl prefers to wait and
-re-use an existing connection for pipelining rather than the opposite: prefer
-to open a new connection rather than waiting.
+With this option set, libcurl prefers to wait and reuse an existing connection
+for multiplexing rather than the opposite: prefer to open a new connection
+rather than waiting.
The waiting time is as long as it takes for the connection to get up and for
libcurl to get the necessary response back that informs it about its protocol
@@ -60,12 +59,15 @@ and support level.
HTTP(S)
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_PIPEWAIT, 1L);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_PIPEWAIT, 1L);
- /* now add this easy handle to the multi handle */
+ /* now add this easy handle to the multi handle */
+ }
}
.fi
.SH AVAILABILITY
@@ -73,5 +75,7 @@ Added in 7.43.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_FORBID_REUSE "(3), " CURLOPT_FRESH_CONNECT "(3), "
-.BR CURLMOPT_PIPELINING "(3), " CURLMOPT_MAX_HOST_CONNECTIONS "(3), "
+.BR CURLMOPT_MAX_HOST_CONNECTIONS (3),
+.BR CURLMOPT_PIPELINING (3),
+.BR CURLOPT_FORBID_REUSE (3),
+.BR CURLOPT_FRESH_CONNECT (3)
diff --git a/docs/libcurl/opts/CURLOPT_PORT.3 b/docs/libcurl/opts/CURLOPT_PORT.3
index e149cb2a3..40769cca9 100644
--- a/docs/libcurl/opts/CURLOPT_PORT.3
+++ b/docs/libcurl/opts/CURLOPT_PORT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PORT 3 "July 04, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PORT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PORT \- remote port number to connect to
@@ -44,7 +44,7 @@ Usually, you just let the URL decide which port to use but this allows the
application to override that.
While this option accepts a 'long', a port number is an unsigned 16 bit number
-and therefore using a port number lower than zero or over 65535 will cause a
+and therefore using a port number lower than zero or over 65535 causes a
\fBCURLE_BAD_FUNCTION_ARGUMENT\fP error.
.SH DEFAULT
By default this is 0 which makes it not used. This also makes port number zero
@@ -53,12 +53,16 @@ impossible to set with this API.
Used for all protocols that speak to a port number.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- curl_easy_setopt(curl, CURLOPT_PORT, 8080L);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+ curl_easy_setopt(curl, CURLOPT_PORT, 8080L);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -66,4 +70,6 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_STDERR "(3), " CURLOPT_DEBUGFUNCTION "(3), "
+.BR CURLINFO_PRIMARY_PORT (3),
+.BR CURLOPT_STDERR (3),
+.BR CURLOPT_URL (3)
diff --git a/docs/libcurl/opts/CURLOPT_POST.3 b/docs/libcurl/opts/CURLOPT_POST.3
index bbd211874..3f02615a6 100644
--- a/docs/libcurl/opts/CURLOPT_POST.3
+++ b/docs/libcurl/opts/CURLOPT_POST.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_POST 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_POST 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_POST \- make an HTTP POST
@@ -33,9 +33,9 @@ CURLOPT_POST \- make an HTTP POST
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POST, long post);
.fi
.SH DESCRIPTION
-A parameter set to 1 tells libcurl to do a regular HTTP post. This will also
-make the library use a "Content-Type: application/x-www-form-urlencoded"
-header. (This is by far the most commonly used POST method).
+A parameter set to 1 tells libcurl to do a regular HTTP post. This also makes
+libcurl use a "Content-Type: application/x-www-form-urlencoded" header. This
+is the most commonly used POST method.
Use one of \fICURLOPT_POSTFIELDS(3)\fP or \fICURLOPT_COPYPOSTFIELDS(3)\fP
options to specify what data to post and \fICURLOPT_POSTFIELDSIZE(3)\fP or
@@ -60,31 +60,39 @@ If you use POST to an HTTP 1.1 server, you can send data without knowing the
size before starting the POST if you use chunked encoding. You enable this by
adding a header like "Transfer-Encoding: chunked" with
\fICURLOPT_HTTPHEADER(3)\fP. With HTTP 1.0 or without chunked transfer, you
-must specify the size in the request. (Since 7.66.0, libcurl will
-automatically use chunked encoding for POSTs if the size is unknown.)
+must specify the size in the request. (Since 7.66.0, libcurl automatically
+uses chunked encoding for POSTs if the size is unknown.)
-When setting \fICURLOPT_POST(3)\fP to 1, libcurl will automatically set
+When setting \fICURLOPT_POST(3)\fP to 1, libcurl automatically sets
\fICURLOPT_NOBODY(3)\fP and \fICURLOPT_HTTPGET(3)\fP to 0.
If you issue a POST request and then want to make a HEAD or GET using the same
-re-used handle, you must explicitly set the new request type using
+reused handle, you must explicitly set the new request type using
\fICURLOPT_NOBODY(3)\fP or \fICURLOPT_HTTPGET(3)\fP or similar.
+
+When setting \fICURLOPT_POST(3)\fP to 0, libcurl resets the request type to
+the default to disable the POST. Typically that would mean it's reset to GET.
+Instead you should set a new request type explicitly as described above.
.SH DEFAULT
0, disabled
.SH PROTOCOLS
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- curl_easy_setopt(curl, CURLOPT_POST, 1L);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+ curl_easy_setopt(curl, CURLOPT_POST, 1L);
- /* set up the read callback with CURLOPT_READFUNCTION */
+ /* set up the read callback with CURLOPT_READFUNCTION */
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -92,4 +100,6 @@ Along with HTTP
.SH RETURN VALUE
Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_POSTFIELDS "(3), " CURLOPT_HTTPPOST "(3), "
+.BR CURLOPT_HTTPPOST (3),
+.BR CURLOPT_POSTFIELDS (3),
+.BR CURLOPT_PUT (3)
diff --git a/docs/libcurl/opts/CURLOPT_POSTFIELDS.3 b/docs/libcurl/opts/CURLOPT_POSTFIELDS.3
index 6fa7b5917..403b4c4cf 100644
--- a/docs/libcurl/opts/CURLOPT_POSTFIELDS.3
+++ b/docs/libcurl/opts/CURLOPT_POSTFIELDS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_POSTFIELDS 3 "October 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_POSTFIELDS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_POSTFIELDS \- data to POST to server
@@ -33,19 +33,19 @@ CURLOPT_POSTFIELDS \- data to POST to server
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTFIELDS, char *postdata);
.fi
.SH DESCRIPTION
-Pass a char * as parameter, pointing to the full data to send in an HTTP POST
-operation. You must make sure that the data is formatted the way you want the
-server to receive it. libcurl will not convert or encode it for you in any
-way. For example, the web server may assume that this data is URL encoded.
+Pass a char * as parameter, pointing to the data buffer to use in an HTTP POST
+operation. The data must be formatted and encoded the way you want the server
+to receive it. libcurl does not convert or encode it in any way. For example,
+the web server may assume that this data is URL encoded.
The data pointed to is NOT copied by the library: as a consequence, it must be
preserved by the calling application until the associated transfer finishes.
-This behavior can be changed (so libcurl does copy the data) by setting the
-\fICURLOPT_COPYPOSTFIELDS(3)\fP option.
+This behavior can be changed (so libcurl does copy the data) by instead using
+the \fICURLOPT_COPYPOSTFIELDS(3)\fP option.
This POST is a normal \fBapplication/x-www-form-urlencoded\fP kind (and
-libcurl will set that Content-Type by default when this option is used), which
-is commonly used by HTML forms. Change Content-Type with
+libcurl sets that Content-Type by default when this option is used), which is
+commonly used by HTML forms. Change Content-Type with
\fICURLOPT_HTTPHEADER(3)\fP.
You can use \fIcurl_easy_escape(3)\fP to URL encode your data, if
@@ -54,19 +54,19 @@ necessary. It returns a pointer to an encoded string that can be passed as
Using \fICURLOPT_POSTFIELDS(3)\fP implies setting \fICURLOPT_POST(3)\fP to 1.
-If \fICURLOPT_POSTFIELDS(3)\fP is explicitly set to NULL then libcurl will get
-the POST data from the read callback. If you want to send a zero-byte POST set
-\fICURLOPT_POSTFIELDS(3)\fP to an empty string, or set \fICURLOPT_POST(3)\fP to
-1 and \fICURLOPT_POSTFIELDSIZE(3)\fP to 0.
+If \fICURLOPT_POSTFIELDS(3)\fP is explicitly set to NULL then libcurl gets the
+POST data from the read callback. If you want to send a zero-byte POST set
+\fICURLOPT_POSTFIELDS(3)\fP to an empty string, or set \fICURLOPT_POST(3)\fP
+to 1 and \fICURLOPT_POSTFIELDSIZE(3)\fP to 0.
-libcurl will use assume this option points to a null-terminated string unless
-you also set \fICURLOPT_POSTFIELDSIZE(3)\fP to specify the length of the
-provided data, which then is strictly required if you want to send off null
-bytes included in the data.
+libcurl assumes this option points to a null-terminated string unless you also
+set \fICURLOPT_POSTFIELDSIZE(3)\fP to specify the length of the provided data,
+which then is strictly required if you want to send off null bytes included in
+the data.
Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header,
-and libcurl will add that header automatically if the POST is either known to
-be larger than 1MB or if the expected size is unknown. You can disable this
+and libcurl adds that header automatically if the POST is either known to be
+larger than 1MB or if the expected size is unknown. You can disable this
header with \fICURLOPT_HTTPHEADER(3)\fP as usual.
To make \fBmultipart/formdata\fP posts, check out the
@@ -77,19 +77,42 @@ NULL
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- const char *data = "data to send";
+/* send an application/x-www-form-urlencoded POST */
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ const char *data = "data to send";
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* size of the POST data */
- curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 12L);
+ /* size of the POST data if strlen() is not good enough */
+ curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 12L);
- /* pass in a pointer to the data - libcurl will not copy */
- curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
+ /* pass in a pointer to the data - libcurl does not copy */
+ curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
+
+ /* send an application/json POST */
+ curl = curl_easy_init();
+ if(curl) {
+ const char *json = "{\"name\": \"daniel\"}";
+ struct curl_slist *slist1 = NULL;
+ slist1 = curl_slist_append(slist1, "Content-Type: application/json");
+ slist1 = curl_slist_append(slist1, "Accept: application/json");
+
+ /* set custom headers */
+ curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist1);
+
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+
+ /* pass in a pointer to the data - libcurl does not copy */
+ curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json);
+
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -97,5 +120,8 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_POSTFIELDSIZE "(3), " CURLOPT_READFUNCTION "(3), "
-.BR CURLOPT_MIMEPOST "(3), " CURLOPT_UPLOAD "(3), "
+.BR CURLOPT_COPYPOSTFIELDS (3),
+.BR CURLOPT_MIMEPOST (3),
+.BR CURLOPT_POSTFIELDSIZE (3),
+.BR CURLOPT_READFUNCTION (3),
+.BR CURLOPT_UPLOAD (3)
diff --git a/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.3 b/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.3
index 6c5a72842..15819a147 100644
--- a/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.3
+++ b/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_POSTFIELDSIZE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_POSTFIELDSIZE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_POSTFIELDSIZE \- size of POST data pointed to
@@ -33,10 +33,11 @@ CURLOPT_POSTFIELDSIZE \- size of POST data pointed to
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTFIELDSIZE, long size);
.fi
.SH DESCRIPTION
-If you want to post data to the server without having libcurl do a strlen() to
-measure the data size, this option must be used. When this option is used you
-can post fully binary data, which otherwise is likely to fail. If this size is
-set to -1, the library will use strlen() to get the size.
+If you want to post static data to the server without having libcurl do a
+strlen() to measure the data size, this option must be used. When this option
+is used you can post fully binary data, which otherwise is likely to fail. If
+this size is set to -1, libcurl uses strlen() to get the size or relies on the
+\fICURLOPT_READFUNCTION(3)\fP (if used) to signal the end of data.
If you post more than 2GB, use \fICURLOPT_POSTFIELDSIZE_LARGE(3)\fP.
.SH DEFAULT
@@ -45,18 +46,23 @@ If you post more than 2GB, use \fICURLOPT_POSTFIELDSIZE_LARGE(3)\fP.
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- const char *data = "data to send";
+#include <string.h> /* for strlen */
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ const char *data = "data to send";
- /* size of the POST data */
- curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long) strlen(data));
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
+ /* size of the POST data */
+ curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long) strlen(data));
- curl_easy_perform(curl);
+ curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
+
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -64,4 +70,5 @@ Along with HTTP
.SH RETURN VALUE
Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_POSTFIELDS "(3), " CURLOPT_POSTFIELDSIZE_LARGE "(3), "
+.BR CURLOPT_POSTFIELDS (3),
+.BR CURLOPT_POSTFIELDSIZE_LARGE (3)
diff --git a/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.3 b/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.3
index 8f972525c..d929ffbde 100644
--- a/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.3
+++ b/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_POSTFIELDSIZE_LARGE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_POSTFIELDSIZE_LARGE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_POSTFIELDSIZE_LARGE \- size of POST data pointed to
@@ -33,29 +33,35 @@ CURLOPT_POSTFIELDSIZE_LARGE \- size of POST data pointed to
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTFIELDSIZE_LARGE,
curl_off_t size);
.SH DESCRIPTION
-If you want to post data to the server without having libcurl do a strlen() to
-measure the data size, this option must be used. When this option is used you
-can post fully binary data, which otherwise is likely to fail. If this size is
-set to -1, the library will use strlen() to get the size.
+If you want to post static data to the server without having libcurl do a
+strlen() to measure the data size, this option must be used. When this option
+is used you can post fully binary data, which otherwise is likely to fail. If
+this size is set to -1, libcurl uses strlen() to get the size or relies on the
+\fICURLOPT_READFUNCTION(3)\fP (if used) to signal the end of data.
.SH DEFAULT
-1
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- const char *data = large_chunk;
- curl_off_t length_of_data; /* set somehow */
+extern char *large_chunk; /* pointer to somewhere */
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ const char *data = large_chunk;
+ curl_off_t length_of_data; /* set somehow */
- /* size of the POST data */
- curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE, length_of_data);
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
+ /* size of the POST data */
+ curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE, length_of_data);
- curl_easy_perform(curl);
+ curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
+
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -63,5 +69,6 @@ Along with HTTP
.SH RETURN VALUE
Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_POSTFIELDS "(3), " CURLOPT_COPYPOSTFIELDS "(3), "
-.BR CURLOPT_POSTFIELDSIZE "(3), "
+.BR CURLOPT_COPYPOSTFIELDS (3),
+.BR CURLOPT_POSTFIELDS (3),
+.BR CURLOPT_POSTFIELDSIZE (3)
diff --git a/docs/libcurl/opts/CURLOPT_POSTQUOTE.3 b/docs/libcurl/opts/CURLOPT_POSTQUOTE.3
index c1cc1082f..1e80f74d8 100644
--- a/docs/libcurl/opts/CURLOPT_POSTQUOTE.3
+++ b/docs/libcurl/opts/CURLOPT_POSTQUOTE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_POSTQUOTE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_POSTQUOTE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_POSTQUOTE \- (S)FTP commands to run after the transfer
@@ -35,8 +35,8 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTQUOTE,
.fi
.SH DESCRIPTION
Pass a pointer to a linked list of FTP or SFTP commands to pass to the server
-after your FTP transfer request. The commands will only be run if no error
-occurred. The linked list should be a fully valid list of struct curl_slist
+after your FTP transfer request. The commands are only issues if no error
+occur. The linked list should be a fully valid list of struct curl_slist
structs properly filled in as described for \fICURLOPT_QUOTE(3)\fP.
Disable this operation again by setting a NULL to this option.
@@ -46,20 +46,24 @@ NULL
SFTP and FTP
.SH EXAMPLE
.nf
-struct curl_slist *cmdlist = NULL;
-cmdlist = curl_slist_append(cmdlist, "RNFR source-name");
-cmdlist = curl_slist_append(cmdlist, "RNTO new-name");
+int main(void)
+{
+ struct curl_slist *cmdlist = NULL;
+ cmdlist = curl_slist_append(cmdlist, "RNFR source-name");
+ cmdlist = curl_slist_append(cmdlist, "RNTO new-name");
-curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/foo.bin");
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/foo.bin");
- /* pass in the FTP commands to run after the transfer */
- curl_easy_setopt(curl, CURLOPT_POSTQUOTE, cmdlist);
+ /* pass in the FTP commands to run after the transfer */
+ curl_easy_setopt(curl, CURLOPT_POSTQUOTE, cmdlist);
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -67,4 +71,5 @@ If support for the protocols are built-in.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_QUOTE "(3), " CURLOPT_PREQUOTE "(3), "
+.BR CURLOPT_PREQUOTE (3),
+.BR CURLOPT_QUOTE (3)
diff --git a/docs/libcurl/opts/CURLOPT_POSTREDIR.3 b/docs/libcurl/opts/CURLOPT_POSTREDIR.3
index 0e1fb8a56..24a93106f 100644
--- a/docs/libcurl/opts/CURLOPT_POSTREDIR.3
+++ b/docs/libcurl/opts/CURLOPT_POSTREDIR.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_POSTREDIR 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_POSTREDIR 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_POSTREDIR \- how to act on an HTTP POST redirect
@@ -53,18 +53,21 @@ when setting \fICURLOPT_FOLLOWLOCATION(3)\fP.
HTTP(S)
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* a silly POST example */
- curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "data=true");
+ /* a silly POST example */
+ curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "data=true");
- /* example.com is redirected, so we tell libcurl to send POST on 301, 302 and
- 303 HTTP response codes */
- curl_easy_setopt(curl, CURLOPT_POSTREDIR, CURL_REDIR_POST_ALL);
+ /* example.com is redirected, so we tell libcurl to send POST on 301,
+ 302 and 303 HTTP response codes */
+ curl_easy_setopt(curl, CURLOPT_POSTREDIR, CURL_REDIR_POST_ALL);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -73,4 +76,8 @@ only supported the 301 then. CURL_REDIR_POST_303 was added in 7.26.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_FOLLOWLOCATION "(3), " CURLOPT_POSTFIELDS "(3), "
+.BR CURLINFO_EFFECTIVE_METHOD (3),
+.BR CURLINFO_REDIRECT_COUNT (3),
+.BR CURLOPT_FOLLOWLOCATION (3),
+.BR CURLOPT_MAXREDIRS (3),
+.BR CURLOPT_POSTFIELDS (3)
diff --git a/docs/libcurl/opts/CURLOPT_PREQUOTE.3 b/docs/libcurl/opts/CURLOPT_PREQUOTE.3
index 2f59d6ee9..8e8961d5d 100644
--- a/docs/libcurl/opts/CURLOPT_PREQUOTE.3
+++ b/docs/libcurl/opts/CURLOPT_PREQUOTE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PREQUOTE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PREQUOTE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PREQUOTE \- commands to run before an FTP transfer
@@ -51,19 +51,23 @@ NULL
FTP
.SH EXAMPLE
.nf
-struct curl_slist *cmdlist = NULL;
-cmdlist = curl_slist_append(cmdlist, "SYST");
+int main(void)
+{
+ struct curl_slist *cmdlist = NULL;
+ cmdlist = curl_slist_append(cmdlist, "SYST");
-curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/foo.bin");
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/foo.bin");
- /* pass in the FTP commands to run */
- curl_easy_setopt(curl, CURLOPT_PREQUOTE, cmdlist);
+ /* pass in the FTP commands to run */
+ curl_easy_setopt(curl, CURLOPT_PREQUOTE, cmdlist);
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -71,4 +75,5 @@ Along with the protocol support
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_QUOTE "(3), " CURLOPT_POSTQUOTE "(3), "
+.BR CURLOPT_POSTQUOTE (3),
+.BR CURLOPT_QUOTE (3)
diff --git a/docs/libcurl/opts/CURLOPT_PREREQDATA.3 b/docs/libcurl/opts/CURLOPT_PREREQDATA.3
index 0a5d75402..93d311a0d 100644
--- a/docs/libcurl/opts/CURLOPT_PREREQDATA.3
+++ b/docs/libcurl/opts/CURLOPT_PREREQDATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 2022, Max Dymond, <max.dymond@microsoft.com>, et al.
+.\" * Copyright (C) Max Dymond, <max.dymond@microsoft.com>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PREREQDATA 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PREREQDATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PREREQDATA \- pointer passed to the pre-request callback
@@ -33,29 +33,37 @@ CURLOPT_PREREQDATA \- pointer passed to the pre-request callback
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PREREQDATA, void *pointer);
.fi
.SH DESCRIPTION
-Pass a \fIpointer\fP that will be untouched by libcurl and passed as the first
-argument in the pre-request callback set with
-\fICURLOPT_PREREQFUNCTION(3)\fP.
+Pass a \fIpointer\fP that is untouched by libcurl and passed as the first
+argument in the pre-request callback set with \fICURLOPT_PREREQFUNCTION(3)\fP.
.SH DEFAULT
NULL
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
+struct priv {
+ void *custom;
+};
+
static int prereq_callback(void *clientp,
char *conn_primary_ip,
char *conn_local_ip,
int conn_primary_port,
int conn_local_port)
{
- printf("Connection made to %s:%s\\n", conn_primary_ip, conn_primary_port);
+ printf("Connection made to %s:%d\\n", conn_primary_ip, conn_primary_port);
return CURL_PREREQFUNC_OK;
}
+int main(void)
{
- struct data prereq_data;
- curl_easy_setopt(CURL *handle, CURLOPT_PREREQFUNCTION, prereq_callback);
- curl_easy_setopt(CURL *handle, CURLOPT_PREREQDATA, &prereq_data);
+ struct priv prereq_data;
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_PREREQFUNCTION, prereq_callback);
+ curl_easy_setopt(curl, CURLOPT_PREREQDATA, &prereq_data);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -63,4 +71,6 @@ Added in 7.80.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_PREREQFUNCTION "(3) "
+.BR CURLINFO_PRIMARY_IP (3),
+.BR CURLINFO_PRIMARY_PORT (3),
+.BR CURLOPT_PREREQFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_PREREQFUNCTION.3 b/docs/libcurl/opts/CURLOPT_PREREQFUNCTION.3
index 05cda91b5..02a97092e 100644
--- a/docs/libcurl/opts/CURLOPT_PREREQFUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_PREREQFUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 2022 - 2022, Max Dymond, <max.dymond@microsoft.com>, et al.
+.\" * Copyright (C) Max Dymond, <max.dymond@microsoft.com>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PREREQFUNCTION 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PREREQFUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PREREQFUNCTION \- user callback called when a connection has been
@@ -82,20 +82,29 @@ By default, this is NULL and unused.
ALL
.SH EXAMPLE
.nf
+struct priv {
+ void *custom;
+};
+
static int prereq_callback(void *clientp,
char *conn_primary_ip,
char *conn_local_ip,
int conn_primary_port,
int conn_local_port)
{
- printf("Connection made to %s:%s\\n", conn_primary_ip, conn_primary_port);
+ printf("Connection made to %s:%d\\n", conn_primary_ip, conn_primary_port);
return CURL_PREREQFUNC_OK;
}
+int main(void)
{
- struct data prereq_data;
- curl_easy_setopt(CURL *handle, CURLOPT_PREREQFUNCTION, prereq_callback);
- curl_easy_setopt(CURL *handle, CURLOPT_PREREQDATA, &prereq_data);
+ struct priv prereq_data;
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_PREREQFUNCTION, prereq_callback);
+ curl_easy_setopt(curl, CURLOPT_PREREQDATA, &prereq_data);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -103,4 +112,6 @@ Added in 7.80.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_PREREQDATA "(3) "
+.BR CURLINFO_PRIMARY_IP (3),
+.BR CURLINFO_PRIMARY_PORT (3),
+.BR CURLOPT_PREREQDATA (3)
diff --git a/docs/libcurl/opts/CURLOPT_PRE_PROXY.3 b/docs/libcurl/opts/CURLOPT_PRE_PROXY.3
index e893e20e6..01da152eb 100644
--- a/docs/libcurl/opts/CURLOPT_PRE_PROXY.3
+++ b/docs/libcurl/opts/CURLOPT_PRE_PROXY.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PRE_PROXY 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PRE_PROXY 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PRE_PROXY \- pre-proxy host to use
@@ -40,12 +40,12 @@ numerical IP address. A numerical IPv6 address must be written within
To specify port number in this string, append :[port] to the end of the host
name. The proxy's port number may optionally be specified with the separate
-option \fICURLOPT_PROXYPORT(3)\fP. If not specified, libcurl will default to
-using port 1080 for proxies.
+option \fICURLOPT_PROXYPORT(3)\fP. If not specified, libcurl defaults to using
+port 1080 for proxies.
A pre proxy is a SOCKS proxy that curl connects to before it connects to the
-HTTP(S) proxy specified in the \fICURLOPT_PROXY\fP option. The pre proxy can
-only be a SOCKS proxy.
+HTTP(S) proxy specified in the \fICURLOPT_PROXY(3)\fP option. The pre proxy
+can only be a SOCKS proxy.
The pre proxy string should be prefixed with [scheme]:// to specify which kind
of socks is used. Use socks4://, socks4a://, socks5:// or socks5h:// (the last
@@ -53,26 +53,29 @@ one to enable socks5 and asking the proxy to do the resolving, also known as
\fICURLPROXY_SOCKS5_HOSTNAME\fP type) to request the specific SOCKS version to
be used. Otherwise SOCKS4 is used as default.
-Setting the pre proxy string to "" (an empty string) will explicitly disable
-the use of a pre proxy.
+Setting the pre proxy string to "" (an empty string) explicitly disables the
+use of a pre proxy.
The application does not have to keep the string around after setting this
option.
.SH DEFAULT
Default is NULL, meaning no pre proxy is used.
-When you set a host name to use, do not assume that there's any particular
+When you set a host name to use, do not assume that there is any particular
single port number used widely for proxies. Specify it!
.SH PROTOCOLS
All except file://. Note that some protocols do not work well over proxy.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/file.txt");
- curl_easy_setopt(curl, CURLOPT_PRE_PROXY, "socks4://socks-proxy:1080");
- curl_easy_setopt(curl, CURLOPT_PROXY, "http://proxy:80");
- curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/file.txt");
+ curl_easy_setopt(curl, CURLOPT_PRE_PROXY, "socks4://socks-proxy:1080");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "http://proxy:80");
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -81,4 +84,5 @@ Added in 7.52.0
Returns CURLE_OK if proxies are supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY "(3), " CURLOPT_HTTPPROXYTUNNEL "(3), "
+.BR CURLOPT_PROXY (3),
+.BR CURLOPT_HTTPPROXYTUNNEL (3)
diff --git a/docs/libcurl/opts/CURLOPT_PRIVATE.3 b/docs/libcurl/opts/CURLOPT_PRIVATE.3
index 9b8d2c3ac..ec005b684 100644
--- a/docs/libcurl/opts/CURLOPT_PRIVATE.3
+++ b/docs/libcurl/opts/CURLOPT_PRIVATE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PRIVATE 3 "September 22, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PRIVATE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PRIVATE \- store a private pointer
@@ -43,19 +43,26 @@ NULL
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-struct private secrets;
-if(curl) {
- struct private *extracted;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+struct private {
+ void *custom;
+};
- /* store a pointer to our private struct */
- curl_easy_setopt(curl, CURLOPT_PRIVATE, &secrets);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ struct private secrets;
+ if(curl) {
+ struct private *extracted;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_perform(curl);
+ /* store a pointer to our private struct */
+ curl_easy_setopt(curl, CURLOPT_PRIVATE, &secrets);
- /* we can extract the private pointer again too */
- curl_easy_getinfo(curl, CURLINFO_PRIVATE, &extracted);
+ curl_easy_perform(curl);
+
+ /* we can extract the private pointer again too */
+ curl_easy_getinfo(curl, CURLINFO_PRIVATE, &extracted);
+ }
}
.fi
.SH AVAILABILITY
@@ -63,4 +70,6 @@ Added in 7.10.3
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_VERBOSE "(3), " CURLOPT_STDERR "(3), "
+.BR CURLINFO_PRIVATE (3),
+.BR CURLOPT_STDERR (3),
+.BR CURLOPT_VERBOSE (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROGRESSDATA.3 b/docs/libcurl/opts/CURLOPT_PROGRESSDATA.3
index e0c4269d8..1c27cb4da 100644
--- a/docs/libcurl/opts/CURLOPT_PROGRESSDATA.3
+++ b/docs/libcurl/opts/CURLOPT_PROGRESSDATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROGRESSDATA 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROGRESSDATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROGRESSDATA \- pointer passed to the progress callback
@@ -33,7 +33,7 @@ CURLOPT_PROGRESSDATA \- pointer passed to the progress callback
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROGRESSDATA, void *pointer);
.fi
.SH DESCRIPTION
-Pass a \fIpointer\fP that will be untouched by libcurl and passed as the first
+Pass a \fIpointer\fP that is untouched by libcurl and passed as the first
argument in the progress callback set with \fICURLOPT_PROGRESSFUNCTION(3)\fP.
.SH DEFAULT
The default value of this parameter is NULL.
@@ -41,34 +41,43 @@ The default value of this parameter is NULL.
All
.SH EXAMPLE
.nf
- struct progress {
- char *private;
- size_t size;
- };
+struct progress {
+ char *private;
+ size_t size;
+};
- static size_t progress_callback(void *clientp,
- double dltotal,
- double dlnow,
- double ultotal,
- double ulnow)
- {
- struct memory *progress = (struct progress *)userp;
+static size_t progress_callback(void *clientp,
+ double dltotal,
+ double dlnow,
+ double ultotal,
+ double ulnow)
+{
+ struct progress *memory = clientp;
+ printf("private: %p\\n", memory->private);
- /* use the values */
+ /* use the values */
- return 0; /* all is good */
- }
+ return 0; /* all is good */
+}
- struct progress data;
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ struct progress data;
- /* pass struct to callback */
- curl_easy_setopt(curl_handle, CURLOPT_PROGRESSDATA, &data);
+ /* pass struct to callback */
+ curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, &data);
+ curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_callback);
- curl_easy_setopt(curl_handle, CURLOPT_PROGRESSFUNCTION, progress_callback);
+ curl_easy_perform(curl);
+ }
+}
.fi
.SH AVAILABILITY
Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_PROGRESSFUNCTION "(3), " CURLOPT_XFERINFOFUNCTION "(3), "
+.BR CURLOPT_PROGRESSFUNCTION (3),
+.BR CURLOPT_XFERINFOFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.3 b/docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.3
index 2224f5362..f54994330 100644
--- a/docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROGRESSFUNCTION 3 "October 12, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROGRESSFUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROGRESSFUNCTION \- progress meter callback
@@ -47,34 +47,34 @@ This option is deprecated and we encourage users to use the
newer \fICURLOPT_XFERINFOFUNCTION(3)\fP instead, if you can.
This function gets called by libcurl instead of its internal equivalent with a
-frequent interval. While data is being transferred it will be called
-frequently, and during slow periods like when nothing is being transferred it
-can slow down to about one call per second.
+frequent interval. While data is being transferred it is invoked frequently,
+and during slow periods like when nothing is being transferred it can slow
+down to about one call per second.
\fIclientp\fP is the pointer set with \fICURLOPT_PROGRESSDATA(3)\fP, it is not
used by libcurl but is only passed along from the application to the callback.
-The callback gets told how much data libcurl will transfer and has
+The callback gets told how much data libcurl is about to transfer and has
transferred, in number of bytes. \fIdltotal\fP is the total number of bytes
libcurl expects to download in this transfer. \fIdlnow\fP is the number of
bytes downloaded so far. \fIultotal\fP is the total number of bytes libcurl
expects to upload in this transfer. \fIulnow\fP is the number of bytes
uploaded so far.
-Unknown/unused argument values passed to the callback will be set to zero
-(like if you only download data, the upload size will remain 0). Many times
-the callback will be called one or more times first, before it knows the data
-sizes so a program must be made to handle that.
+Unknown/unused argument values passed to the callback are be set to zero (like
+if you only download data, the upload size remains 0). Many times the callback
+is called one or more times first, before it knows the data sizes so a program
+must be made to handle that.
-If your callback function returns CURL_PROGRESSFUNC_CONTINUE it will cause
-libcurl to continue executing the default progress function.
+If your callback function returns CURL_PROGRESSFUNC_CONTINUE it causes libcurl
+to continue executing the default progress function.
-Returning any other non-zero value from this callback will cause libcurl to
-abort the transfer and return \fICURLE_ABORTED_BY_CALLBACK\fP.
+Returning any other non-zero value from this callback makes libcurl abort the
+transfer and return \fICURLE_ABORTED_BY_CALLBACK\fP.
-If you transfer data with the multi interface, this function will not be
-called during periods of idleness unless you call the appropriate libcurl
-function that performs transfers.
+If you transfer data with the multi interface, this function is not called
+during periods of idleness unless you call the appropriate libcurl function
+that performs transfers.
\fICURLOPT_NOPROGRESS(3)\fP must be set to 0 to make this function actually
get called.
@@ -85,34 +85,44 @@ users.
All
.SH EXAMPLE
.nf
- struct progress {
- char *private;
- size_t size;
- };
-
- static size_t progress_callback(void *clientp,
- double dltotal,
- double dlnow,
- double ultotal,
- double ulnow)
- {
- struct progress *memory = (struct progress *)clientp;
-
- /* use the values */
-
- return 0; /* all is good */
- }
-
- struct progress data;
-
- /* pass struct to callback */
- curl_easy_setopt(curl_handle, CURLOPT_PROGRESSDATA, &data);
-
- curl_easy_setopt(curl_handle, CURLOPT_PROGRESSFUNCTION, progress_callback);
+struct progress {
+ char *private;
+ size_t size;
+};
+
+static size_t progress_callback(void *clientp,
+ double dltotal,
+ double dlnow,
+ double ultotal,
+ double ulnow)
+{
+ struct progress *memory = clientp;
+ printf("private: %p\\n", memory->private);
+
+ /* use the values */
+
+ return 0; /* all is good */
+}
+
+int main(void)
+{
+ struct progress data;
+
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ /* pass struct to callback */
+ curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, &data);
+ curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_callback);
+
+ curl_easy_perform(curl);
+ }
+}
.fi
.SH AVAILABILITY
-Deprecated in 7.32.0.
+Deprecated since 7.32.0.
.SH RETURN VALUE
Returns CURLE_OK.
.SH "SEE ALSO"
-.BR CURLOPT_VERBOSE "(3), " CURLOPT_NOPROGRESS "(3), "
+.BR CURLOPT_VERBOSE (3),
+.BR CURLOPT_NOPROGRESS (3),
+.BR CURLOPT_XFERINFOFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROTOCOLS.3 b/docs/libcurl/opts/CURLOPT_PROTOCOLS.3
index 0b0681aa1..3cc435222 100644
--- a/docs/libcurl/opts/CURLOPT_PROTOCOLS.3
+++ b/docs/libcurl/opts/CURLOPT_PROTOCOLS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROTOCOLS 3 "October 12, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROTOCOLS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROTOCOLS \- allowed protocols
@@ -40,8 +40,8 @@ available protocols!
Pass a long that holds a bitmask of CURLPROTO_* defines. If used, this bitmask
limits what protocols libcurl may use in the transfer. This allows you to have
a libcurl built to support a wide range of protocols but still limit specific
-transfers to only be allowed to use a subset of them. By default libcurl will
-accept all protocols it supports (\fICURLPROTO_ALL\fP). See also
+transfers to only be allowed to use a subset of them. By default libcurl
+accepts all protocols it supports (\fICURLPROTO_ALL\fP). See also
\fICURLOPT_REDIR_PROTOCOLS(3)\fP.
These are the available protocol defines:
@@ -81,17 +81,20 @@ All protocols built-in.
All
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- /* pass in the URL from an external source */
- curl_easy_setopt(curl, CURLOPT_URL, argv[1]);
+int main(int argc, char **argv)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ /* pass in the URL from an external source */
+ curl_easy_setopt(curl, CURLOPT_URL, argv[1]);
- /* only allow HTTP, TFTP and SFTP */
- curl_easy_setopt(curl, CURLOPT_PROTOCOLS,
- CURLPROTO_HTTP | CURLPROTO_TFTP | CURLPROTO_SFTP);
+ /* only allow HTTP, TFTP and SFTP */
+ curl_easy_setopt(curl, CURLOPT_PROTOCOLS,
+ CURLPROTO_HTTP | CURLPROTO_TFTP | CURLPROTO_SFTP);
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -99,4 +102,6 @@ Added in 7.19.4. Deprecated since 7.85.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_REDIR_PROTOCOLS "(3), " CURLOPT_URL "(3), "
+.BR CURLOPT_DEFAULT_PROTOCOL (3),
+.BR CURLOPT_REDIR_PROTOCOLS (3),
+.BR CURLOPT_URL (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROTOCOLS_STR.3 b/docs/libcurl/opts/CURLOPT_PROTOCOLS_STR.3
index dfa036838..b61c18265 100644
--- a/docs/libcurl/opts/CURLOPT_PROTOCOLS_STR.3
+++ b/docs/libcurl/opts/CURLOPT_PROTOCOLS_STR.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROTOCOLS_STR 3 "September 13, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROTOCOLS_STR 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROTOCOLS_STR \- allowed protocols
@@ -62,16 +62,19 @@ All protocols built-in
All
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- /* pass in the URL from an external source */
- curl_easy_setopt(curl, CURLOPT_URL, argv[1]);
+int main(int argc, char **argv)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ /* pass in the URL from an external source */
+ curl_easy_setopt(curl, CURLOPT_URL, argv[1]);
- /* only allow HTTP, TFTP and SFTP */
- curl_easy_setopt(curl, CURLOPT_PROTOCOLS_STR, "http,tftp,sftp");
+ /* only allow HTTP, TFTP and SFTP */
+ curl_easy_setopt(curl, CURLOPT_PROTOCOLS_STR, "http,tftp,sftp");
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -81,5 +84,8 @@ Returns CURLE_UNKNOWN_OPTION if the option is not implemented,
CURLE_UNSUPPORTED_PROTOCOL if a listed protocol is not supported or disabled,
CURLE_BAD_FUNCTION_ARGUMENT if no protocol is listed else CURLE_OK.
.SH "SEE ALSO"
-.BR CURLOPT_REDIR_PROTOCOLS_STR "(3), " CURLOPT_URL "(3), "
-.BR curl_version_info "(3), " CURLINFO_SCHEME "(3), "
+.BR curl_version_info (3),
+.BR CURLINFO_SCHEME (3),
+.BR CURLOPT_DEFAULT_PROTOCOL (3),
+.BR CURLOPT_REDIR_PROTOCOLS_STR (3),
+.BR CURLOPT_URL (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXY.3 b/docs/libcurl/opts/CURLOPT_PROXY.3
index 99c310e75..bbb89fff8 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY \- proxy to use
@@ -33,14 +33,15 @@ CURLOPT_PROXY \- proxy to use
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY, char *proxy);
.fi
.SH DESCRIPTION
-Set the \fIproxy\fP to use for the upcoming request. The parameter should be a
-char * to a null-terminated string holding the host name or dotted numerical
-IP address. A numerical IPv6 address must be written within [brackets].
+Set the \fIproxy\fP to use for transfers with this easy handle. The parameter
+should be a char * to a null-terminated string holding the host name or dotted
+numerical IP address. A numerical IPv6 address must be written within
+[brackets].
To specify port number in this string, append :[port] to the end of the host
-name. The proxy's port number may optionally be specified with the separate
-option \fICURLOPT_PROXYPORT(3)\fP. If not specified, libcurl will default to
-using port 1080 for proxies.
+name. The proxy's port number may optionally (but discouraged) be specified
+with the separate option \fICURLOPT_PROXYPORT(3)\fP. If not specified, libcurl
+defaults to using port 1080 for proxies.
The proxy string may be prefixed with [scheme]:// to specify which kind of
proxy is used.
@@ -49,7 +50,12 @@ proxy is used.
.IP http://
HTTP Proxy. Default when no scheme or proxy type is specified.
.IP https://
-HTTPS Proxy. (Added in 7.52.0 for OpenSSL, GnuTLS and NSS)
+HTTPS Proxy. (Added in 7.52.0 for OpenSSL and GnuTLS Since 7.87.0, it
+also works for BearSSL, mbedTLS, rustls, Schannel, Secure Transport and
+wolfSSL.)
+
+This uses HTTP/1 by default. Setting \fICURLOPT_PROXYTYPE(3)\fP to
+\fBCURLPROXY_HTTPS2\fP allows libcurl to negotiate using HTTP/2 with proxy.
.IP socks4://
SOCKS4 Proxy.
.IP socks4a://
@@ -63,15 +69,15 @@ SOCKS5 Proxy. Proxy resolves URL hostname.
Without a scheme prefix, \fICURLOPT_PROXYTYPE(3)\fP can be used to specify
which kind of proxy the string identifies.
-When you tell the library to use an HTTP proxy, libcurl will transparently
-convert operations to HTTP even if you specify an FTP URL etc. This may have
-an impact on what other features of the library you can use, such as
+When you tell the library to use an HTTP proxy, libcurl transparently converts
+operations to HTTP even if you specify an FTP URL etc. This may have an impact
+on what other features of the library you can use, such as
\fICURLOPT_QUOTE(3)\fP and similar FTP specifics that do not work unless you
tunnel through the HTTP proxy. Such tunneling is activated with
\fICURLOPT_HTTPPROXYTUNNEL(3)\fP.
-Setting the proxy string to "" (an empty string) will explicitly disable the
-use of a proxy, even if there is an environment variable set for it.
+Setting the proxy string to "" (an empty string) explicitly disables the use
+of a proxy, even if there is an environment variable set for it.
A proxy host string can also include protocol scheme (http://) and embedded
user + password.
@@ -81,9 +87,12 @@ localhost for the host part. e.g. socks5h://localhost/path/to/socket.sock
The application does not have to keep the string around after setting this
option.
+
+When a proxy is used, the active FTP mode as set with \fICUROPT_FTPPORT(3)\fP,
+cannot be used.
.SH "Environment variables"
libcurl respects the proxy environment variables named \fBhttp_proxy\fP,
-\fBftp_proxy\fP, \fBsftp_proxy\fP etc. If set, libcurl will use the specified
+\fBftp_proxy\fP, \fBsftp_proxy\fP etc. If set, libcurl uses the specified
proxy for that URL scheme. So for a "FTP://" URL, the \fBftp_proxy\fP is
considered. \fBall_proxy\fP is used if no protocol specific proxy was set.
@@ -95,17 +104,20 @@ environment variables.
.SH DEFAULT
Default is NULL, meaning no proxy is used.
-When you set a host name to use, do not assume that there's any particular
+When you set a host name to use, do not assume that there is any particular
single port number used widely for proxies. Specify it!
.SH PROTOCOLS
All except file://. Note that some protocols do not work well over proxy.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/file.txt");
- curl_easy_setopt(curl, CURLOPT_PROXY, "http://proxy:80");
- curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/file.txt");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "http://proxy:80");
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -120,5 +132,7 @@ error.
Returns CURLE_OK if proxies are supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_PROXYPORT "(3), " CURLOPT_HTTPPROXYTUNNEL "(3), "
-.BR CURLOPT_PROXYTYPE "(3)"
+.BR CURLOPT_HTTPPROXYTUNNEL (3),
+.BR CURLOPT_PRE_PROXY (3),
+.BR CURLOPT_PROXYPORT (3),
+.BR CURLOPT_PROXYTYPE (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXYAUTH.3 b/docs/libcurl/opts/CURLOPT_PROXYAUTH.3
index c3d4046d0..bc51e4dd4 100644
--- a/docs/libcurl/opts/CURLOPT_PROXYAUTH.3
+++ b/docs/libcurl/opts/CURLOPT_PROXYAUTH.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXYAUTH 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXYAUTH 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXYAUTH \- HTTP proxy authentication methods
@@ -35,11 +35,11 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYAUTH, long bitmask);
.SH DESCRIPTION
Pass a long as parameter, which is set to a bitmask, to tell libcurl which
HTTP authentication method(s) you want it to use for your proxy
-authentication. If more than one bit is set, libcurl will first query the
-site to see what authentication methods it supports and then pick the best one
-you allow it to use. For some methods, this will induce an extra network
-round-trip. Set the actual name and password with the
-\fICURLOPT_PROXYUSERPWD(3)\fP option.
+authentication. If more than one bit is set, libcurl first queries the site to
+see what authentication methods it supports and then it picks the best one you
+allow it to use. For some methods, this induces an extra network round-trip.
+Set the actual name and password with the \fICURLOPT_PROXYUSERPWD(3)\fP
+option.
The bitmask can be constructed by the bits listed and described in the
\fICURLOPT_HTTPAUTH(3)\fP man page.
@@ -49,18 +49,21 @@ CURLAUTH_BASIC
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- /* use this proxy */
- curl_easy_setopt(curl, CURLOPT_PROXY, "http://local.example.com:1080");
- /* allow whatever auth the proxy speaks */
- curl_easy_setopt(curl, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
- /* set the proxy credentials */
- curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, "james:007");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ /* use this proxy */
+ curl_easy_setopt(curl, CURLOPT_PROXY, "http://local.example.com:1080");
+ /* allow whatever auth the proxy speaks */
+ curl_easy_setopt(curl, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
+ /* set the proxy credentials */
+ curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, "james:007");
+ ret = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -70,5 +73,8 @@ Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_NOT_BUILT_IN if the bitmask specified no supported authentication
methods.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY "(3), " CURLOPT_PROXYTYPE "(3), "
-.BR CURLOPT_PROXYUSERPWD "(3), " CURLOPT_PROXYPORT "(3), "
+.BR CURLOPT_HTTPAUTH (3),
+.BR CURLOPT_PROXY (3),
+.BR CURLOPT_PROXYPORT (3),
+.BR CURLOPT_PROXYTYPE (3),
+.BR CURLOPT_PROXYUSERPWD (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXYHEADER.3 b/docs/libcurl/opts/CURLOPT_PROXYHEADER.3
index 92dedb801..3ed5fa75e 100644
--- a/docs/libcurl/opts/CURLOPT_PROXYHEADER.3
+++ b/docs/libcurl/opts/CURLOPT_PROXYHEADER.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXYHEADER 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXYHEADER 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXYHEADER \- set of HTTP headers to pass to proxy
@@ -38,12 +38,12 @@ sent to a proxy. The rules for this list is identical to the
\fICURLOPT_HTTPHEADER(3)\fP option's.
The headers set with this option is only ever used in requests sent to a proxy
-- when there's also a request sent to a host.
+- when there is also a request sent to a host.
The first line in a request (containing the method, usually a GET or POST) is
NOT a header and cannot be replaced using this option. Only the lines
following the request-line are headers. Adding this method line in this list
-of headers will only cause your request to send an invalid header.
+of headers causes your request to send an invalid header.
Pass a NULL to this to reset back to no custom headers.
.SH DEFAULT
@@ -52,22 +52,25 @@ NULL
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
+int main(void)
+{
+ CURL *curl = curl_easy_init();
-struct curl_slist *list;
+ struct curl_slist *list;
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_PROXY, "http://proxy.example.com:80");
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "http://proxy.example.com:80");
- list = curl_slist_append(NULL, "Shoesize: 10");
- list = curl_slist_append(list, "Accept:");
+ list = curl_slist_append(NULL, "Shoesize: 10");
+ list = curl_slist_append(list, "Accept:");
- curl_easy_setopt(curl, CURLOPT_PROXYHEADER, list);
+ curl_easy_setopt(curl, CURLOPT_PROXYHEADER, list);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
- curl_slist_free_all(list); /* free the list again */
+ curl_slist_free_all(list); /* free the list again */
+ }
}
.fi
.SH AVAILABILITY
@@ -75,4 +78,5 @@ Added in 7.37.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_HEADEROPT "(3), " CURLOPT_HTTPHEADER "(3), "
+.BR CURLOPT_HEADEROPT (3),
+.BR CURLOPT_HTTPHEADER (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXYPASSWORD.3 b/docs/libcurl/opts/CURLOPT_PROXYPASSWORD.3
index 8d4465f16..d54857274 100644
--- a/docs/libcurl/opts/CURLOPT_PROXYPASSWORD.3
+++ b/docs/libcurl/opts/CURLOPT_PROXYPASSWORD.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXYPASSWORD 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXYPASSWORD 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXYPASSWORD \- password to use with proxy authentication
@@ -47,14 +47,18 @@ blank
Most
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- curl_easy_setopt(curl, CURLOPT_PROXY, "http://localhost:8080");
- curl_easy_setopt(curl, CURLOPT_PROXYUSERNAME, "mrsmith");
- curl_easy_setopt(curl, CURLOPT_PROXYPASSWORD, "qwerty");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "http://localhost:8080");
+ curl_easy_setopt(curl, CURLOPT_PROXYUSERNAME, "mrsmith");
+ curl_easy_setopt(curl, CURLOPT_PROXYPASSWORD, "qwerty");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -63,5 +67,7 @@ Added in 7.19.1
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_PASSWORD "(3), " CURLOPT_PROXYUSERNAME "(3), "
-.BR CURLOPT_HTTPAUTH "(3), " CURLOPT_PROXYAUTH "(3)"
+.BR CURLOPT_HTTPAUTH (3),
+.BR CURLOPT_PASSWORD (3),
+.BR CURLOPT_PROXYAUTH (3),
+.BR CURLOPT_PROXYUSERNAME (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXYPORT.3 b/docs/libcurl/opts/CURLOPT_PROXYPORT.3
index fb02bfe1c..8a8c58c12 100644
--- a/docs/libcurl/opts/CURLOPT_PROXYPORT.3
+++ b/docs/libcurl/opts/CURLOPT_PROXYPORT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXYPORT 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXYPORT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXYPORT \- port number the proxy listens on
@@ -33,6 +33,8 @@ CURLOPT_PROXYPORT \- port number the proxy listens on
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYPORT, long port);
.fi
.SH DESCRIPTION
+We discourage use of this option.
+
Pass a long with this option to set the proxy port to connect to unless it is
specified in the proxy string \fICURLOPT_PROXY(3)\fP or uses 443 for https
proxies and 1080 for all others as default.
@@ -45,13 +47,17 @@ than 65535.
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- curl_easy_setopt(curl, CURLOPT_PROXY, "localhost");
- curl_easy_setopt(curl, CURLOPT_PROXYPORT, 8080L);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "localhost");
+ curl_easy_setopt(curl, CURLOPT_PROXYPORT, 8080L);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -59,4 +65,7 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_PROXY "(3), " CURLOPT_PROXYTYPE "(3), "
+.BR CURLINFO_PRIMARY_PORT (3),
+.BR CURLOPT_PORT (3),
+.BR CURLOPT_PROXY (3),
+.BR CURLOPT_PROXYTYPE (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXYTYPE.3 b/docs/libcurl/opts/CURLOPT_PROXYTYPE.3
index 88263e1cf..c0c025790 100644
--- a/docs/libcurl/opts/CURLOPT_PROXYTYPE.3
+++ b/docs/libcurl/opts/CURLOPT_PROXYTYPE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXYTYPE 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXYTYPE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXYTYPE \- proxy protocol type
@@ -39,7 +39,11 @@ Pass one of the values below to set the type of the proxy.
.IP CURLPROXY_HTTP
HTTP Proxy. Default.
.IP CURLPROXY_HTTPS
-HTTPS Proxy. (Added in 7.52.0 for OpenSSL, GnuTLS and NSS)
+HTTPS Proxy using HTTP/1. (Added in 7.52.0 for OpenSSL and GnuTLS. Since
+7.87.0, it also works for BearSSL, mbedTLS, rustls, Schannel, Secure Transport
+and wolfSSL.)
+.IP CURLPROXY_HTTPS2
+HTTPS Proxy and attempt to speak HTTP/2 over it. (Added in 8.1.0)
.IP CURLPROXY_HTTP_1_0
HTTP 1.0 Proxy. This is similar to CURLPROXY_HTTP except it uses HTTP/1.0 for
any CONNECT tunneling. It does not change the HTTP version of the actual HTTP
@@ -62,15 +66,18 @@ CURLPROXY_HTTP
Most
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_PROXY, "local.example.com:1080");
- /* set the proxy type */
- curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "local.example.com:1080");
+ /* set the proxy type */
+ curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
+ ret = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -78,4 +85,5 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_PROXY "(3), " CURLOPT_PROXYPORT "(3), "
+.BR CURLOPT_PROXY (3),
+.BR CURLOPT_PROXYPORT (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXYUSERNAME.3 b/docs/libcurl/opts/CURLOPT_PROXYUSERNAME.3
index 0912f623a..b0cdde0ad 100644
--- a/docs/libcurl/opts/CURLOPT_PROXYUSERNAME.3
+++ b/docs/libcurl/opts/CURLOPT_PROXYUSERNAME.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXYUSERNAME 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXYUSERNAME 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXYUSERNAME \- user name to use for proxy authentication
@@ -49,14 +49,18 @@ blank
Most
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- curl_easy_setopt(curl, CURLOPT_PROXY, "http://localhost:8080");
- curl_easy_setopt(curl, CURLOPT_PROXYUSERNAME, "mrsmith");
- curl_easy_setopt(curl, CURLOPT_PROXYPASSWORD, "qwerty");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "http://localhost:8080");
+ curl_easy_setopt(curl, CURLOPT_PROXYUSERNAME, "mrsmith");
+ curl_easy_setopt(curl, CURLOPT_PROXYPASSWORD, "qwerty");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -65,5 +69,7 @@ Added in 7.19.1
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_PROXYPASSWORD "(3), " CURLOPT_USERNAME "(3), "
-.BR CURLOPT_HTTPAUTH "(3), " CURLOPT_PROXYAUTH "(3)"
+.BR CURLOPT_PROXYPASSWORD (3),
+.BR CURLOPT_USERNAME (3),
+.BR CURLOPT_HTTPAUTH (3),
+.BR CURLOPT_PROXYAUTH (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXYUSERPWD.3 b/docs/libcurl/opts/CURLOPT_PROXYUSERPWD.3
index 9ae8c075a..5bd1e1b73 100644
--- a/docs/libcurl/opts/CURLOPT_PROXYUSERPWD.3
+++ b/docs/libcurl/opts/CURLOPT_PROXYUSERPWD.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXYUSERPWD 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXYUSERPWD 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXYUSERPWD \- user name and password to use for proxy authentication
@@ -34,8 +34,8 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYUSERPWD, char *userpwd);
.fi
.SH DESCRIPTION
Pass a char * as parameter, which should be [user name]:[password] to use for
-the connection to the HTTP proxy. Both the name and the password will be URL
-decoded before use, so to include for example a colon in the user name you
+the connection to the HTTP proxy. Both the name and the password are URL
+decoded before used, so to include for example a colon in the user name you
should encode it as %3A. (This is different to how \fICURLOPT_USERPWD(3)\fP is
used - beware.)
@@ -49,13 +49,17 @@ This is NULL by default.
Used with all protocols that can use a proxy
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- curl_easy_setopt(curl, CURLOPT_PROXY, "http://localhost:8080");
- curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, "clark%20kent:superman");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "http://localhost:8080");
+ curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, "clark%20kent:superman");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -64,4 +68,7 @@ Always
Returns CURLE_OK if proxies are supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY "(3), " CURLOPT_PROXYTYPE "(3), "
+.BR CURLOPT_PROXY (3),
+.BR CURLOPT_PROXYPASSWORD (3),
+.BR CURLOPT_PROXYTYPE (3),
+.BR CURLOPT_PROXYUSERNAME (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_CAINFO.3 b/docs/libcurl/opts/CURLOPT_PROXY_CAINFO.3
index d0f7925c1..65fd48bce 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_CAINFO.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_CAINFO.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_CAINFO 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_CAINFO 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_CAINFO \- path to proxy Certificate Authority (CA) bundle
@@ -45,14 +45,11 @@ accessible file.
This option is by default set to the system path where libcurl's CA
certificate bundle is assumed to be stored, as established at build time.
-If curl is built against the NSS SSL library, the NSS PEM PKCS#11 module
-(libnsspem.so) needs to be available for this option to work properly.
-
(iOS and macOS only) If curl is built against Secure Transport, then this
option is supported for backward compatibility with other SSL engines, but it
-should not be set. If the option is not set, then curl will use the
-certificates in the system and user Keychain to verify the peer, which is the
-preferred method of verifying the peer's certificate chain.
+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.
The application does not have to keep the string around after setting this
option.
@@ -64,14 +61,18 @@ Built-in system specific
Used with HTTPS proxy
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- /* using an HTTPS proxy */
- curl_easy_setopt(curl, CURLOPT_PROXY, "https://localhost:443");
- curl_easy_setopt(curl, CURLOPT_PROXY_CAINFO, "/etc/certs/cabundle.pem");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ /* using an HTTPS proxy */
+ curl_easy_setopt(curl, CURLOPT_PROXY, "https://localhost:443");
+ curl_easy_setopt(curl, CURLOPT_PROXY_CAINFO, "/etc/certs/cabundle.pem");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -84,8 +85,12 @@ https://curl.se/docs/ssl-compared.html
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY_CAINFO_BLOB "(3), " CURLOPT_PROXY_CAPATH "(3), "
-.BR CURLOPT_PROXY_SSL_VERIFYPEER "(3), " CURLOPT_PROXY_SSL_VERIFYHOST "(3), "
-.BR CURLOPT_CAINFO "(3), " CURLOPT_CAINFO_BLOB "(3), "
-.BR CURLOPT_CAPATH "(3), "
-.BR CURLOPT_SSL_VERIFYPEER "(3), " CURLOPT_SSL_VERIFYHOST "(3), "
+.BR CURLOPT_CAINFO (3),
+.BR CURLOPT_CAINFO_BLOB (3),
+.BR CURLOPT_CAPATH (3),
+.BR CURLOPT_PROXY_CAINFO_BLOB (3),
+.BR CURLOPT_PROXY_CAPATH (3),
+.BR CURLOPT_PROXY_SSL_VERIFYHOST (3),
+.BR CURLOPT_PROXY_SSL_VERIFYPEER (3),
+.BR CURLOPT_SSL_VERIFYHOST (3),
+.BR CURLOPT_SSL_VERIFYPEER (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_CAINFO_BLOB.3 b/docs/libcurl/opts/CURLOPT_PROXY_CAINFO_BLOB.3
index 1a9d29f3f..c3af5e1c0 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_CAINFO_BLOB.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_CAINFO_BLOB.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_CAINFO_BLOB 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_CAINFO_BLOB 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_CAINFO_BLOB \- proxy Certificate Authority (CA) bundle in PEM format
@@ -40,6 +40,10 @@ Pass a pointer to a curl_blob structure, which contains information (pointer
and size) about a memory block with binary data of PEM encoded content holding
one or more certificates to verify the HTTPS proxy with.
+If the blob is initialized with the flags member of struct curl_blob set to
+CURL_BLOB_COPY, the application does not have to keep the buffer around after
+setting this.
+
If \fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP is zero and you avoid verifying the
server's certificate, \fICURLOPT_PROXY_CAINFO_BLOB(3)\fP is not needed.
@@ -50,19 +54,25 @@ NULL
Used with HTTPS proxy
.SH EXAMPLE
.nf
-char *strpem; /* strpem must point to a PEM string */
-CURL *curl = curl_easy_init();
-if(curl) {
- struct curl_blob blob;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- /* using an HTTPS proxy */
- curl_easy_setopt(curl, CURLOPT_PROXY, "https://localhost:443");
- blob.data = strpem;
- blob.len = strlen(strpem);
- blob.flags = CURL_BLOB_COPY;
- curl_easy_setopt(curl, CURLOPT_PROXY_CAINFO_BLOB, &blob);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+#include <string.h> /* for strlen */
+
+extern char *strpem; /* strpem must point to a PEM string */
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ struct curl_blob blob;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ /* using an HTTPS proxy */
+ curl_easy_setopt(curl, CURLOPT_PROXY, "https://localhost:443");
+ blob.data = strpem;
+ blob.len = strlen(strpem);
+ blob.flags = CURL_BLOB_COPY;
+ curl_easy_setopt(curl, CURLOPT_PROXY_CAINFO_BLOB, &blob);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -74,8 +84,12 @@ Transport and Schannel backends.
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY_CAINFO "(3), " CURLOPT_PROXY_CAPATH "(3), "
-.BR CURLOPT_PROXY_SSL_VERIFYPEER "(3), " CURLOPT_PROXY_SSL_VERIFYHOST "(3), "
-.BR CURLOPT_CAINFO "(3), " CURLOPT_CAINFO_BLOB "(3), "
-.BR CURLOPT_CAPATH "(3), "
-.BR CURLOPT_SSL_VERIFYPEER "(3), " CURLOPT_SSL_VERIFYHOST "(3), "
+.BR CURLOPT_CAINFO (3),
+.BR CURLOPT_CAINFO_BLOB (3),
+.BR CURLOPT_CAPATH (3),
+.BR CURLOPT_PROXY_CAINFO (3),
+.BR CURLOPT_PROXY_CAPATH (3),
+.BR CURLOPT_PROXY_SSL_VERIFYHOST (3),
+.BR CURLOPT_PROXY_SSL_VERIFYPEER (3),
+.BR CURLOPT_SSL_VERIFYHOST (3),
+.BR CURLOPT_SSL_VERIFYPEER (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_CAPATH.3 b/docs/libcurl/opts/CURLOPT_PROXY_CAPATH.3
index 8dd19ce5a..8ddf69c56 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_CAPATH.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_CAPATH.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_CAPATH 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_CAPATH 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_CAPATH \- directory holding HTTPS proxy CA certificates
@@ -49,21 +49,25 @@ NULL
Everything used over an HTTPS proxy
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- /* using an HTTPS proxy */
- curl_easy_setopt(curl, CURLOPT_PROXY, "https://localhost:443");
- curl_easy_setopt(curl, CURLOPT_PROXY_CAPATH, "/etc/cert-dir");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ /* using an HTTPS proxy */
+ curl_easy_setopt(curl, CURLOPT_PROXY, "https://localhost:443");
+ curl_easy_setopt(curl, CURLOPT_PROXY_CAPATH, "/etc/cert-dir");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
Added in 7.52.0
This option is supported by the OpenSSL, GnuTLS, and mbedTLS (since 7.56.0)
-backends. The NSS backend provides the option only for backward compatibility.
+backends.
.SH RETURN VALUE
CURLE_OK if supported; or an error such as:
@@ -73,6 +77,8 @@ CURLE_UNKNOWN_OPTION
CURLE_OUT_OF_MEMORY
.SH "SEE ALSO"
-.BR CURLOPT_PROXY_CAINFO "(3), "
-.BR CURLOPT_CAINFO "(3), " CURLOPT_PROXY_SSL_VERIFYHOST "(3), "
-.BR CURLOPT_STDERR "(3), " CURLOPT_DEBUGFUNCTION "(3), "
+.BR CURLOPT_CAINFO (3),
+.BR CURLOPT_DEBUGFUNCTION (3),
+.BR CURLOPT_PROXY_CAINFO (3),
+.BR CURLOPT_PROXY_SSL_VERIFYHOST (3),
+.BR CURLOPT_STDERR (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_CRLFILE.3 b/docs/libcurl/opts/CURLOPT_PROXY_CRLFILE.3
index a30dfd237..0c0bdc226 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_CRLFILE.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_CRLFILE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_CRLFILE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_CRLFILE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_CRLFILE \- HTTPS proxy Certificate Revocation List file
@@ -39,11 +39,11 @@ Pass a char * to a null-terminated string naming a \fIfile\fP with the
concatenation of CRL (in PEM format) to use in the certificate validation that
occurs during the SSL exchange.
-When curl is built to use NSS or GnuTLS, there is no way to influence the use
-of CRL passed to help in the verification process. When libcurl is built with
-OpenSSL support, X509_V_FLAG_CRL_CHECK and X509_V_FLAG_CRL_CHECK_ALL are both
-set, requiring CRL check against all the elements of the certificate chain if
-a CRL file is passed.
+When curl is built to use GnuTLS, there is no way to influence the use of CRL
+passed to help in the verification process. When libcurl is built with OpenSSL
+support, X509_V_FLAG_CRL_CHECK and X509_V_FLAG_CRL_CHECK_ALL are both set,
+requiring CRL check against all the elements of the certificate chain if a CRL
+file is passed.
This option makes sense only when used in combination with the
\fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP option.
@@ -61,13 +61,17 @@ NULL
Used with HTTPS proxy.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_PROXY, "https://localhost:80");
- curl_easy_setopt(curl, CURLOPT_PROXY_CRLFILE, "/etc/certs/crl.pem");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "https://localhost:80");
+ curl_easy_setopt(curl, CURLOPT_PROXY_CRLFILE, "/etc/certs/crl.pem");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -76,5 +80,7 @@ Added in 7.52.0
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY_SSL_VERIFYPEER "(3), " CURLOPT_PROXY_SSL_VERIFYHOST "(3), "
-.BR CURLOPT_SSL_VERIFYPEER "(3), " CURLOPT_SSL_VERIFYHOST "(3), "
+.BR CURLOPT_PROXY_SSL_VERIFYHOST (3),
+.BR CURLOPT_PROXY_SSL_VERIFYPEER (3),
+.BR CURLOPT_SSL_VERIFYHOST (3),
+.BR CURLOPT_SSL_VERIFYPEER (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_ISSUERCERT.3 b/docs/libcurl/opts/CURLOPT_PROXY_ISSUERCERT.3
index 892a80af4..c4fb6f561 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_ISSUERCERT.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_ISSUERCERT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_ISSUERCERT 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_ISSUERCERT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_ISSUERCERT \- proxy issuer SSL certificate filename
@@ -58,14 +58,18 @@ NULL
All TLS-based protocols
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- /* using an HTTPS proxy */
- curl_easy_setopt(curl, CURLOPT_PROXY, "https://localhost:443");
- curl_easy_setopt(curl, CURLOPT_PROXY_ISSUERCERT, "/etc/certs/cacert.pem");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ /* using an HTTPS proxy */
+ curl_easy_setopt(curl, CURLOPT_PROXY, "https://localhost:443");
+ curl_easy_setopt(curl, CURLOPT_PROXY_ISSUERCERT, "/etc/certs/cacert.pem");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -74,5 +78,8 @@ Added in 7.71.0. This option is supported by the OpenSSL backends.
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY_SSL_VERIFYPEER "(3), " CURLOPT_PROXY_SSL_VERIFYHOST "(3), "
-.BR CURLOPT_SSL_VERIFYPEER "(3), " CURLOPT_SSL_VERIFYHOST "(3), "
+.BR CURLOPT_ISSUERCERT (3),
+.BR CURLOPT_PROXY_SSL_VERIFYHOST (3),
+.BR CURLOPT_PROXY_SSL_VERIFYPEER (3),
+.BR CURLOPT_SSL_VERIFYHOST (3),
+.BR CURLOPT_SSL_VERIFYPEER (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_ISSUERCERT_BLOB.3 b/docs/libcurl/opts/CURLOPT_PROXY_ISSUERCERT_BLOB.3
index 21f696b2b..225976672 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_ISSUERCERT_BLOB.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_ISSUERCERT_BLOB.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_ISSUERCERT_BLOB 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_ISSUERCERT_BLOB 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_ISSUERCERT_BLOB \- proxy issuer SSL certificate from memory blob
@@ -64,18 +64,26 @@ NULL
All TLS-based protocols
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- struct curl_blob blob;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- /* using an HTTPS proxy */
- curl_easy_setopt(curl, CURLOPT_PROXY, "https://localhost:443");
- blob.data = certificateData;
- blob.len = filesize;
- blob.flags = CURL_BLOB_COPY;
- curl_easy_setopt(curl, CURLOPT_PROXY_ISSUERCERT_BLOB, &blob);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+
+extern char *certificateData; /* point to the data */
+size_t filesize; /* size of the data */
+
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ struct curl_blob blob;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ /* using an HTTPS proxy */
+ curl_easy_setopt(curl, CURLOPT_PROXY, "https://localhost:443");
+ blob.data = certificateData;
+ blob.len = filesize;
+ blob.flags = CURL_BLOB_COPY;
+ curl_easy_setopt(curl, CURLOPT_PROXY_ISSUERCERT_BLOB, &blob);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -84,5 +92,8 @@ Added in 7.71.0. This option is supported by the OpenSSL backends.
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY_SSL_VERIFYPEER "(3), " CURLOPT_PROXY_SSL_VERIFYHOST "(3), "
-.BR CURLOPT_SSL_VERIFYPEER "(3), " CURLOPT_SSL_VERIFYHOST "(3), "
+.BR CURLOPT_ISSUERCERT_BLOB (3),
+.BR CURLOPT_PROXY_SSL_VERIFYHOST (3),
+.BR CURLOPT_PROXY_SSL_VERIFYPEER (3),
+.BR CURLOPT_SSL_VERIFYHOST (3),
+.BR CURLOPT_SSL_VERIFYPEER (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_KEYPASSWD.3 b/docs/libcurl/opts/CURLOPT_PROXY_KEYPASSWD.3
index 77fe1ce08..12165d6aa 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_KEYPASSWD.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_KEYPASSWD.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_KEYPASSWD 3 "October 11, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_KEYPASSWD 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_KEYPASSWD \- passphrase for the proxy private key
@@ -35,10 +35,10 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_KEYPASSWD, char *pwd);
.SH DESCRIPTION
This option is for connecting to an HTTPS proxy, not an HTTPS server.
-Pass a pointer to a null-terminated string as parameter. It will be used as
-the password required to use the \fICURLOPT_PROXY_SSLKEY(3)\fP private key.
-You never need a pass phrase to load a certificate but you need one to load
-your private key.
+Pass a pointer to a null-terminated string as parameter. It is used as the
+password required to use the \fICURLOPT_PROXY_SSLKEY(3)\fP private key. You
+never need a pass phrase to load a certificate but you need one to load your
+private key.
The application does not have to keep the string around after setting this
option.
@@ -48,13 +48,17 @@ NULL
Used with HTTPS proxy
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy:443");
- curl_easy_setopt(curl, CURLOPT_PROXY_KEYPASSWD, "superman");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy:443");
+ curl_easy_setopt(curl, CURLOPT_PROXY_KEYPASSWD, "superman");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -63,5 +67,7 @@ Added in 7.52.0
Returns CURLE_OK if TLS enabled, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY_SSLKEY "(3), " CURLOPT_SSH_PRIVATE_KEYFILE "(3), "
-.BR CURLOPT_SSLKEY "(3), "
+.BR CURLOPT_KEYPASSWD (3),
+.BR CURLOPT_PROXY_SSLKEY (3),
+.BR CURLOPT_SSH_PRIVATE_KEYFILE (3),
+.BR CURLOPT_SSLKEY (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_PINNEDPUBLICKEY.3 b/docs/libcurl/opts/CURLOPT_PROXY_PINNEDPUBLICKEY.3
index 4386db03d..bc0edd8c0 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_PINNEDPUBLICKEY.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_PINNEDPUBLICKEY.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_PINNEDPUBLICKEY 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_PINNEDPUBLICKEY 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_PINNEDPUBLICKEY \- pinned public key for https proxy
@@ -40,8 +40,8 @@ The string can also be any number of base64 encoded sha256 hashes preceded by
When negotiating a TLS or SSL connection, the https proxy sends a certificate
indicating its identity. A public key is extracted from this certificate and
-if it does not exactly match the public key provided to this option, curl will
-abort the connection before sending or receiving any data.
+if it does not exactly match the public key provided to this option, libcurl
+aborts the connection before sending or receiving any data.
On mismatch, \fICURLE_SSL_PINNEDPUBKEYNOTMATCH\fP is returned.
@@ -53,15 +53,20 @@ NULL
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy:443");
- curl_easy_setopt(curl, CURLOPT_PROXY_PINNEDPUBLICKEY,
- "sha256//YhKJKSzoTt2b5FP18fvpHo7fJYqQCjAa3HWY3tvRMwE=;sha256//t62CeU2tQiqkexU74Gxa2eg7fRbEgoChTociMee9wno=");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy:443");
+ curl_easy_setopt(curl, CURLOPT_PROXY_PINNEDPUBLICKEY,
+ "sha256//YhKJKSzoTt2b5FP18fvpHo7fJYqQCjA"
+ "a3HWY3tvRMwE=;sha256//t62CeU2tQiqkexU74"
+ "Gxa2eg7fRbEgoChTociMee9wno=");
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH PUBLIC KEY EXTRACTION
@@ -99,18 +104,20 @@ footer:
.SH AVAILABILITY
PEM/DER support:
- 7.52.0: GSKit, GnuTLS, NSS, OpenSSL, mbedTLS, wolfSSL
+ 7.52.0: GnuTLS, OpenSSL, mbedTLS, wolfSSL
sha256 support:
- 7.52.0: GnuTLS, NSS, OpenSSL, mbedTLS, wolfSSL
+ 7.52.0: GnuTLS, OpenSSL, mbedTLS, wolfSSL
Other SSL backends not supported.
.SH RETURN VALUE
Returns CURLE_OK if TLS enabled, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY_SSL_VERIFYPEER "(3), "
-.BR CURLOPT_PROXY_SSL_VERIFYHOST "(3), "
-.BR CURLOPT_PROXY_CAINFO "(3), "
-.BR CURLOPT_PROXY_CAPATH "(3), "
+.BR CURLOPT_PINNEDPUBLICKEY (3),
+.BR CURLOPT_PROXY_CAINFO (3),
+.BR CURLOPT_PROXY_CAPATH (3),
+.BR CURLOPT_PROXY_SSL_VERIFYHOST (3),
+.BR CURLOPT_PROXY_SSL_VERIFYPEER (3)
+
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.3 b/docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.3
index 132bce6b2..719fab3fb 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_SERVICE_NAME 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_SERVICE_NAME 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_SERVICE_NAME \- proxy authentication service name
@@ -46,12 +46,15 @@ See above
All network protocols
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_PROXY_SERVICE_NAME, "custom");
- ret = curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_PROXY_SERVICE_NAME, "custom");
+ ret = curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -60,4 +63,6 @@ Added in 7.43.0 for HTTP proxies, 7.49.0 for SOCKS5 proxies.
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY "(3), " CURLOPT_PROXYTYPE "(3), "
+.BR CURLOPT_PROXY (3),
+.BR CURLOPT_PROXYTYPE (3),
+.BR CURLOPT_SERVICE_NAME (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSLCERT.3 b/docs/libcurl/opts/CURLOPT_PROXY_SSLCERT.3
index b883295a5..24b0c60a5 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_SSLCERT.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_SSLCERT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_SSLCERT 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_SSLCERT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_SSLCERT \- HTTPS proxy client certificate
@@ -40,10 +40,10 @@ the file name of your client certificate used to connect to the HTTPS proxy.
The default format is "P12" on Secure Transport and "PEM" on other engines,
and can be changed with \fICURLOPT_PROXY_SSLCERTTYPE(3)\fP.
-With NSS or Secure Transport, this can also be the nickname of the certificate
-you wish to authenticate with as it is named in the security database. If you
-want to use a file from the current directory, please precede it with "./"
-prefix, in order to avoid confusion with a nickname.
+With Secure Transport, this can also be the nickname of the certificate you
+wish to authenticate with as it is named in the security database. If you want
+to use a file from the current directory, please precede it with "./" prefix,
+in order to avoid confusion with a nickname.
When using a client certificate, you most likely also need to provide a
private key with \fICURLOPT_PROXY_SSLKEY(3)\fP.
@@ -56,15 +56,19 @@ NULL
Used with HTTPS proxy
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy");
- curl_easy_setopt(curl, CURLOPT_PROXY_SSLCERT, "client.pem");
- curl_easy_setopt(curl, CURLOPT_PROXY_SSLKEY, "key.pem");
- curl_easy_setopt(curl, CURLOPT_PROXY_KEYPASSWD, "s3cret");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy");
+ curl_easy_setopt(curl, CURLOPT_PROXY_SSLCERT, "client.pem");
+ curl_easy_setopt(curl, CURLOPT_PROXY_SSLKEY, "key.pem");
+ curl_easy_setopt(curl, CURLOPT_PROXY_KEYPASSWD, "s3cret");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -73,5 +77,6 @@ Added in 7.52.0
Returns CURLE_OK if TLS enabled, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY_SSLCERTTYPE "(3), " CURLOPT_PROXY_SSLKEY "(3), "
-.BR CURLOPT_SSLCERT "(3), "
+.BR CURLOPT_PROXY_SSLCERTTYPE (3),
+.BR CURLOPT_PROXY_SSLKEY (3),
+.BR CURLOPT_SSLCERT (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSLCERTTYPE.3 b/docs/libcurl/opts/CURLOPT_PROXY_SSLCERTTYPE.3
index bf9249cf9..e3782d4ed 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_SSLCERTTYPE.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_SSLCERTTYPE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_SSLCERTTYPE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_SSLCERTTYPE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_SSLCERTTYPE \- type of the proxy client SSL certificate
@@ -49,16 +49,20 @@ option.
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy");
- curl_easy_setopt(curl, CURLOPT_PROXY_SSLCERT, "client.pem");
- curl_easy_setopt(curl, CURLOPT_PROXY_SSLCERTTYPE, "PEM");
- curl_easy_setopt(curl, CURLOPT_PROXY_SSLKEY, "key.pem");
- curl_easy_setopt(curl, CURLOPT_PROXY_KEYPASSWD, "s3cret");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy");
+ curl_easy_setopt(curl, CURLOPT_PROXY_SSLCERT, "client.pem");
+ curl_easy_setopt(curl, CURLOPT_PROXY_SSLCERTTYPE, "PEM");
+ curl_easy_setopt(curl, CURLOPT_PROXY_SSLKEY, "key.pem");
+ curl_easy_setopt(curl, CURLOPT_PROXY_KEYPASSWD, "s3cret");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -69,5 +73,6 @@ If built TLS enabled.
Returns CURLE_OK if TLS is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY_SSLCERT "(3), " CURLOPT_PROXY_SSLKEY "(3), "
-.BR CURLOPT_SSLCERTTYPE "(3), "
+.BR CURLOPT_PROXY_SSLCERT (3),
+.BR CURLOPT_PROXY_SSLKEY (3),
+.BR CURLOPT_SSLCERTTYPE (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSLCERT_BLOB.3 b/docs/libcurl/opts/CURLOPT_PROXY_SSLCERT_BLOB.3
index eb4453fd5..2d0ee971c 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_SSLCERT_BLOB.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_SSLCERT_BLOB.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_SSLCERT_BLOB 3 "September 06, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_SSLCERT_BLOB 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_SSLCERT_BLOB \- SSL proxy client certificate from memory blob
@@ -52,19 +52,27 @@ NULL
Used with HTTPS proxy
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- struct curl_blob blob;
- blob.data = certificateData;
- blob.len = filesize;
- blob.flags = CURL_BLOB_COPY;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy");
- curl_easy_setopt(curl, CURLOPT_PROXY_SSLKEY, "key.pem");
- curl_easy_setopt(curl, CURLOPT_PROXY_KEYPASSWD, "s3cret");
- curl_easy_setopt(curl, CURLOPT_PROXY_SSLCERT_BLOB, &blob);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+
+extern char *certificateData; /* point to data */
+extern size_t filesize; /* size of the data */
+
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ struct curl_blob blob;
+ blob.data = certificateData;
+ blob.len = filesize;
+ blob.flags = CURL_BLOB_COPY;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy");
+ curl_easy_setopt(curl, CURLOPT_PROXY_SSLKEY, "key.pem");
+ curl_easy_setopt(curl, CURLOPT_PROXY_KEYPASSWD, "s3cret");
+ curl_easy_setopt(curl, CURLOPT_PROXY_SSLCERT_BLOB, &blob);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -74,5 +82,7 @@ Schannel backends.
Returns CURLE_OK if TLS enabled, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY_SSLCERTTYPE "(3), " CURLOPT_PROXY_SSLKEY "(3), "
-.BR CURLOPT_PROXY_SSLCERT "(3), "
+.BR CURLOPT_PROXY_SSLCERT (3),
+.BR CURLOPT_PROXY_SSLCERTTYPE (3),
+.BR CURLOPT_PROXY_SSLKEY (3),
+.BR CURLOPT_SSLCERT_BLOB (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSLKEY.3 b/docs/libcurl/opts/CURLOPT_PROXY_SSLKEY.3
index 10716cddd..a912a7b47 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_SSLKEY.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_SSLKEY.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_SSLKEY 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_SSLKEY 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_SSLKEY \- private key file for HTTPS proxy client cert
@@ -50,15 +50,19 @@ NULL
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy");
- curl_easy_setopt(curl, CURLOPT_PROXY_SSLCERT, "client.pem");
- curl_easy_setopt(curl, CURLOPT_PROXY_SSLKEY, "key.pem");
- curl_easy_setopt(curl, CURLOPT_PROXY_KEYPASSWD, "s3cret");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy");
+ curl_easy_setopt(curl, CURLOPT_PROXY_SSLCERT, "client.pem");
+ curl_easy_setopt(curl, CURLOPT_PROXY_SSLKEY, "key.pem");
+ curl_easy_setopt(curl, CURLOPT_PROXY_KEYPASSWD, "s3cret");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -69,5 +73,9 @@ If built TLS enabled.
Returns CURLE_OK if TLS is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY_SSLKEYTYPE "(3), " CURLOPT_PROXY_SSLCERT "(3), "
-.BR CURLOPT_SSLKEYTYPE "(3), " CURLOPT_SSLCERT "(3), "
+.BR CURLOPT_PROXY_SSLCERT (3),
+.BR CURLOPT_PROXY_SSLKEYTYPE (3),
+.BR CURLOPT_SSLCERT (3),
+.BR CURLOPT_SSLKEY (3),
+.BR CURLOPT_SSLKEYTYPE (3)
+
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSLKEYTYPE.3 b/docs/libcurl/opts/CURLOPT_PROXY_SSLKEYTYPE.3
index 24bac05cd..12845d33f 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_SSLKEYTYPE.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_SSLKEYTYPE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_SSLKEYTYPE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_SSLKEYTYPE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_SSLKEYTYPE \- type of the proxy private key file
@@ -44,16 +44,20 @@ option.
Used with HTTPS proxy
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy");
- curl_easy_setopt(curl, CURLOPT_PROXY_SSLCERT, "client.pem");
- curl_easy_setopt(curl, CURLOPT_PROXY_SSLKEY, "key.pem");
- curl_easy_setopt(curl, CURLOPT_PROXY_SSLKEYTYPE, "PEM");
- curl_easy_setopt(curl, CURLOPT_PROXY_KEYPASSWD, "s3cret");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy");
+ curl_easy_setopt(curl, CURLOPT_PROXY_SSLCERT, "client.pem");
+ curl_easy_setopt(curl, CURLOPT_PROXY_SSLKEY, "key.pem");
+ curl_easy_setopt(curl, CURLOPT_PROXY_SSLKEYTYPE, "PEM");
+ curl_easy_setopt(curl, CURLOPT_PROXY_KEYPASSWD, "s3cret");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -62,5 +66,6 @@ Added in 7.52.0
Returns CURLE_OK if TLS is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY_SSLKEY "(3), " CURLOPT_PROXY_SSLCERT "(3), "
-.BR CURLOPT_SSLKEYTYPE "(3), "
+.BR CURLOPT_PROXY_SSLCERT (3),
+.BR CURLOPT_PROXY_SSLKEY (3),
+.BR CURLOPT_SSLKEYTYPE (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSLKEY_BLOB.3 b/docs/libcurl/opts/CURLOPT_PROXY_SSLKEY_BLOB.3
index 18e4cb9ca..5ad428a48 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_SSLKEY_BLOB.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_SSLKEY_BLOB.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_SSLKEY_BLOB 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_SSLKEY_BLOB 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_SSLKEY_BLOB \- private key for proxy cert from memory blob
@@ -48,23 +48,34 @@ NULL
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- struct curl_blob blob;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy");
- blob.data = certificateData;
- blob.len = filesize;
- blob.flags = CURL_BLOB_COPY;
- curl_easy_setopt(curl, CURLOPT_PROXY_SSLCERT_BLOB, &blob);
- curl_easy_setopt(curl, CURLOPT_PROXY_SSLCERTTYPE, "PEM");
- blob.data = privateKeyData;
- blob.len = privateKeySize;
- curl_easy_setopt(curl, CURLOPT_PROXY_SSLKEY_BLOB, &blob);
- curl_easy_setopt(curl, CURLOPT_PROXY_KEYPASSWD, "s3cret");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+extern char *certificateData; /* point to data */
+extern size_t filesize; /* size of data */
+
+extern char *privateKeyData; /* point to data */
+extern size_t privateKeySize; /* size */
+
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ struct curl_blob blob;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy");
+ blob.data = certificateData;
+ blob.len = filesize;
+ blob.flags = CURL_BLOB_COPY;
+ curl_easy_setopt(curl, CURLOPT_PROXY_SSLCERT_BLOB, &blob);
+ curl_easy_setopt(curl, CURLOPT_PROXY_SSLCERTTYPE, "PEM");
+
+ blob.data = privateKeyData;
+ blob.len = privateKeySize;
+ curl_easy_setopt(curl, CURLOPT_PROXY_SSLKEY_BLOB, &blob);
+ curl_easy_setopt(curl, CURLOPT_PROXY_KEYPASSWD, "s3cret");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -73,4 +84,6 @@ Added in 7.71.0. This option is supported by the OpenSSL backends.
Returns CURLE_OK if TLS enabled, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_SSLKEYTYPE "(3), " CURLOPT_SSLKEY "(3), "
+.BR CURLOPT_SSLKEY (3),
+.BR CURLOPT_SSLKEY_BLOB (3),
+.BR CURLOPT_SSLKEYTYPE (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSLVERSION.3 b/docs/libcurl/opts/CURLOPT_PROXY_SSLVERSION.3
index 08688ffc8..aaaaf8294 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_SSLVERSION.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_SSLVERSION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_SSLVERSION 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_SSLVERSION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_SSLVERSION \- preferred HTTPS proxy TLS version
@@ -40,7 +40,7 @@ when connecting to an HTTPS proxy.
Use one of the available defines for this purpose. The available options are:
.RS
.IP CURL_SSLVERSION_DEFAULT
-The default action. This will attempt to figure out the remote SSL protocol
+The default action. This attempts to figure out the remote SSL protocol
version.
.IP CURL_SSLVERSION_TLSv1
TLSv1.x
@@ -86,15 +86,18 @@ CURL_SSLVERSION_DEFAULT
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* ask libcurl to use TLS version 1.0 or later */
- curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
+ /* ask libcurl to use TLS version 1.0 or later */
+ curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -102,5 +105,7 @@ Added in 7.52.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_USE_SSL "(3), " CURLOPT_HTTP_VERSION "(3), "
-.BR CURLOPT_IPRESOLVE "(3) " CURLOPT_SSLVERSION "(3), "
+.BR CURLOPT_HTTP_VERSION (3),
+.BR CURLOPT_IPRESOLVE (3),
+.BR CURLOPT_SSLVERSION (3),
+.BR CURLOPT_USE_SSL (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSL_CIPHER_LIST.3 b/docs/libcurl/opts/CURLOPT_PROXY_SSL_CIPHER_LIST.3
index 7da9b0870..e0e78e815 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_SSL_CIPHER_LIST.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_SSL_CIPHER_LIST.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_SSL_CIPHER_LIST 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_SSL_CIPHER_LIST 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_SSL_CIPHER_LIST \- ciphers to use for HTTPS proxy
@@ -44,11 +44,6 @@ For OpenSSL and GnuTLS valid examples of cipher lists include \fBRC4-SHA\fP,
\fBSHA1+DES\fP, \fBTLSv1\fP and \fBDEFAULT\fP. The default list is normally
set when you compile OpenSSL.
-For NSS, valid examples of cipher lists include \fBrsa_rc4_128_md5\fP,
-\fBrsa_aes_128_sha\fP, etc. With NSS you do not add/remove ciphers. If one uses
-this option then all known ciphers are disabled and only those passed in are
-enabled.
-
For WolfSSL, valid examples of cipher lists include \fBECDHE-RSA-RC4-SHA\fP,
\fBAES256-SHA:AES256-SHA256\fP, etc.
@@ -59,7 +54,7 @@ etc.
With BearSSL you do not add/remove ciphers. If one uses this option then all
known ciphers are disabled and only those passed in are enabled.
-you will find more details about cipher lists on this URL:
+Find more details about cipher lists on this URL:
https://curl.se/docs/ssl-ciphers.html
@@ -71,13 +66,17 @@ NULL, use internal default
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_PROXY, "https://localhost");
- curl_easy_setopt(curl, CURLOPT_PROXY_SSL_CIPHER_LIST, "TLSv1");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "https://localhost");
+ curl_easy_setopt(curl, CURLOPT_PROXY_SSL_CIPHER_LIST, "TLSv1");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -88,6 +87,8 @@ If built TLS enabled.
Returns CURLE_OK if TLS is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY_TLS13_CIPHERS "(3), " CURLOPT_PROXY_SSLVERSION "(3), "
-.BR CURLOPT_SSL_CIPHER_LIST "(3), " CURLOPT_TLS13_CIPHERS "(3), "
-.BR CURLOPT_SSLVERSION "(3), "
+.BR CURLOPT_PROXY_SSLVERSION (3),
+.BR CURLOPT_PROXY_TLS13_CIPHERS (3),
+.BR CURLOPT_SSL_CIPHER_LIST (3),
+.BR CURLOPT_SSLVERSION (3),
+.BR CURLOPT_TLS13_CIPHERS (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSL_OPTIONS.3 b/docs/libcurl/opts/CURLOPT_PROXY_SSL_OPTIONS.3
index 315bbffa3..33df0877c 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_SSL_OPTIONS.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_SSL_OPTIONS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_SSL_OPTIONS 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_SSL_OPTIONS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_SSL_OPTIONS \- HTTPS proxy SSL behavior options
@@ -40,10 +40,10 @@ behaviors. Available bits:
Tells libcurl to not attempt to use any workarounds for a security flaw in the
SSL3 and TLS1.0 protocols. If this option is not used or this bit is set to 0,
the SSL layer libcurl uses may use a work-around for this flaw although it
-might cause interoperability problems with some (older) SSL
-implementations. WARNING: avoiding this work-around lessens the security, and
-by setting this option to 1 you ask for exactly that. This option is only
-supported for Secure Transport, NSS and OpenSSL.
+might cause interoperability problems with some (older) SSL implementations.
+WARNING: avoiding this work-around lessens the security, and by setting this
+option to 1 you ask for exactly that. This option is only supported for
+Secure Transport and OpenSSL.
.IP CURLSSLOPT_NO_REVOKE
Tells libcurl to disable certificate revocation checks for those SSL backends
where such behavior is present. This option is only supported for Schannel
@@ -52,7 +52,7 @@ Untrusted Publishers block list which it seems cannot be bypassed. (Added in
7.44.0)
.IP CURLSSLOPT_NO_PARTIALCHAIN
Tells libcurl to not accept "partial" certificate chains, which it otherwise
-does by default. This option is only supported for OpenSSL and will fail the
+does by default. This option is only supported for OpenSSL and fails the
certificate verification if the chain ends with an intermediate certificate
and not with a root cert. (Added in 7.68.0)
.IP CURLSSLOPT_REVOKE_BEST_EFFORT
@@ -61,6 +61,15 @@ offline distribution points for those SSL backends where such behavior is
present. This option is only supported for Schannel (the native Windows SSL
library). If combined with \fICURLSSLOPT_NO_REVOKE\fP, the latter takes
precedence. (Added in 7.70.0)
+.IP CURLSSLOPT_NATIVE_CA
+Tell libcurl to use the operating system's native CA store for certificate
+verification. If you set this option and also set a CA certificate file or
+directory then during verification those certificates are searched in addition
+to the native CA store.
+
+Works with wolfSSL on Windows, Linux (Debian, Ubuntu, Gentoo, Fedora, RHEL),
+macOS, Android and iOS (added in 8.3.0), with GnuTLS (added in 8.5.0) or on
+Windows when built to use OpenSSL (Added in 7.71.0).
.IP CURLSSLOPT_AUTO_CLIENT_CERT
Tell libcurl to automatically locate and use a client certificate for
authentication, when requested by the server. This option is only supported
@@ -75,15 +84,19 @@ could be a privacy violation and unexpected.
All TLS-based protocols
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy");
- /* weaken TLS only for use with silly proxies */
- curl_easy_setopt(curl, CURLOPT_PROXY_SSL_OPTIONS, CURLSSLOPT_ALLOW_BEAST |
- CURLSSLOPT_NO_REVOKE);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy");
+ /* weaken TLS only for use with silly proxies */
+ curl_easy_setopt(curl, CURLOPT_PROXY_SSL_OPTIONS, CURLSSLOPT_ALLOW_BEAST |
+ CURLSSLOPT_NO_REVOKE);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -91,5 +104,7 @@ Added in 7.52.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY_SSLVERSION "(3), " CURLOPT_PROXY_SSL_CIPHER_LIST "(3), "
-.BR CURLOPT_SSLVERSION "(3), " CURLOPT_SSL_CIPHER_LIST "(3), "
+.BR CURLOPT_PROXY_SSL_CIPHER_LIST (3),
+.BR CURLOPT_PROXY_SSLVERSION (3),
+.BR CURLOPT_SSL_CIPHER_LIST (3),
+.BR CURLOPT_SSLVERSION (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYHOST.3 b/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYHOST.3
index 69860449d..5ce3711c9 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYHOST.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYHOST.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_SSL_VERIFYHOST 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_SSL_VERIFYHOST 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_SSL_VERIFYHOST \- verify the proxy certificate's name against host
@@ -53,8 +53,8 @@ If \fIverify\fP value is set to 1:
In 7.28.0 and earlier: treated as a debug option of some sorts, not supported
anymore due to frequently leading to programmer mistakes.
-From 7.28.1 to 7.65.3: setting it to 1 made curl_easy_setopt() return an error
-and leaving the flag untouched.
+From 7.28.1 to 7.65.3: setting it to 1 made \fIcurl_easy_setopt(3)\fP return
+an error and leaving the flag untouched.
From 7.66.0: treats 1 and 2 the same.
@@ -62,24 +62,24 @@ When the \fIverify\fP value is 0L, the connection succeeds regardless of the
names used in the certificate. Use that ability with caution!
See also \fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP to verify the digital signature
-of the proxy certificate. If libcurl is built against NSS and
-\fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP is zero,
-\fICURLOPT_PROXY_SSL_VERIFYHOST(3)\fP is also set to zero and cannot be
-overridden.
+of the proxy certificate.
.SH DEFAULT
2
.SH PROTOCOLS
All protocols when used over an HTTPS proxy.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Set the default value: strict name check please */
- curl_easy_setopt(curl, CURLOPT_PROXY_SSL_VERIFYHOST, 2L);
+ /* Set the default value: strict name check please */
+ curl_easy_setopt(curl, CURLOPT_PROXY_SSL_VERIFYHOST, 2L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -91,5 +91,7 @@ Returns CURLE_OK if TLS is supported, and CURLE_UNKNOWN_OPTION if not.
If 1 is set as argument, \fICURLE_BAD_FUNCTION_ARGUMENT\fP is returned.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY_SSL_VERIFYPEER "(3), " CURLOPT_PROXY_CAINFO "(3), "
-.BR CURLOPT_SSL_VERIFYPEER "(3), " CURLOPT_CAINFO "(3), "
+.BR CURLOPT_CAINFO (3),
+.BR CURLOPT_PROXY_CAINFO (3),
+.BR CURLOPT_PROXY_SSL_VERIFYPEER (3),
+.BR CURLOPT_SSL_VERIFYPEER (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYPEER.3 b/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYPEER.3
index 06a4b02ca..b74e7de7b 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYPEER.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYPEER.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_SSL_VERIFYPEER 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_SSL_VERIFYPEER 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_SSL_VERIFYPEER \- verify the proxy's SSL certificate
@@ -36,7 +36,7 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_VERIFYPEER,
.SH DESCRIPTION
Pass a long as parameter set to 1L to enable or 0L to disable.
-This option tells curl to verifies the authenticity of the HTTPS proxy's
+This option tells curl to verify the authenticity of the HTTPS proxy's
certificate. A value of 1 means curl verifies; 0 (zero) means it does not.
This is the proxy version of \fICURLOPT_SSL_VERIFYPEER(3)\fP that is used for
@@ -73,14 +73,17 @@ the correct end-point.
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Set the default value: strict certificate check please */
- curl_easy_setopt(curl, CURLOPT_PROXY_SSL_VERIFYPEER, 1L);
+ /* Set the default value: strict certificate check please */
+ curl_easy_setopt(curl, CURLOPT_PROXY_SSL_VERIFYPEER, 1L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -90,6 +93,6 @@ If built TLS enabled.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY_SSL_VERIFYHOST "(3), "
-.BR CURLOPT_SSL_VERIFYPEER "(3), "
-.BR CURLOPT_SSL_VERIFYHOST "(3), "
+.BR CURLOPT_PROXY_SSL_VERIFYHOST (3),
+.BR CURLOPT_SSL_VERIFYPEER (3),
+.BR CURLOPT_SSL_VERIFYHOST (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_TLS13_CIPHERS.3 b/docs/libcurl/opts/CURLOPT_PROXY_TLS13_CIPHERS.3
index d39e1b5f1..22b7137ef 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_TLS13_CIPHERS.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_TLS13_CIPHERS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_TLS13_CIPHERS 3 "September 22, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_TLS13_CIPHERS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_TLS13_CIPHERS \- ciphers suites for proxy TLS 1.3
@@ -39,7 +39,7 @@ suites to use for the TLS 1.3 connection to a proxy. The list must be
syntactically correct, it consists of one or more cipher suite strings
separated by colons.
-you will find more details about cipher lists on this URL:
+Find more details about cipher lists on this URL:
https://curl.se/docs/ssl-ciphers.html
@@ -55,13 +55,17 @@ NULL, use internal default
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_PROXY_TLS13_CIPHERS,
- "TLS_CHACHA20_POLY1305_SHA256");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_PROXY_TLS13_CIPHERS,
+ "TLS_CHACHA20_POLY1305_SHA256");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -70,6 +74,9 @@ Available when built with OpenSSL >= 1.1.1.
.SH RETURN VALUE
Returns CURLE_OK if supported, CURLE_NOT_BUILT_IN otherwise.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY_SSL_CIPHER_LIST "(3), " CURLOPT_PROXY_SSLVERSION "(3), "
-.BR CURLOPT_SSL_CIPHER_LIST "(3), " CURLOPT_TLS13_CIPHERS "(3), "
-.BR CURLOPT_SSLVERSION "(3), "
+.BR CURLOPT_PROXY_SSL_CIPHER_LIST (3),
+.BR CURLOPT_PROXY_SSLVERSION (3),
+.BR CURLOPT_SSL_CIPHER_LIST (3),
+.BR CURLOPT_SSLVERSION (3),
+.BR CURLOPT_TLS13_CIPHERS (3)
+
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_PASSWORD.3 b/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_PASSWORD.3
index 12e91fecb..27fdf1c09 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_PASSWORD.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_PASSWORD.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_TLSAUTH_PASSWORD 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_TLSAUTH_PASSWORD 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_TLSAUTH_PASSWORD \- password to use for proxy TLS authentication
@@ -47,15 +47,19 @@ NULL
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy");
- curl_easy_setopt(curl, CURLOPT_PROXY_TLSAUTH_TYPE, "SRP");
- curl_easy_setopt(curl, CURLOPT_PROXY_TLSAUTH_USERNAME, "user");
- curl_easy_setopt(curl, CURLOPT_PROXY_TLSAUTH_PASSWORD, "secret");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy");
+ curl_easy_setopt(curl, CURLOPT_PROXY_TLSAUTH_TYPE, "SRP");
+ curl_easy_setopt(curl, CURLOPT_PROXY_TLSAUTH_USERNAME, "user");
+ curl_easy_setopt(curl, CURLOPT_PROXY_TLSAUTH_PASSWORD, "secret");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -64,5 +68,7 @@ Added in 7.52.0, with the OpenSSL and GnuTLS backends only
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY_TLSAUTH_TYPE "(3), " CURLOPT_PROXY_TLSAUTH_USERNAME "(3), "
-.BR CURLOPT_TLSAUTH_TYPE "(3), " CURLOPT_TLSAUTH_USERNAME "(3), "
+.BR CURLOPT_PROXY_TLSAUTH_TYPE (3),
+.BR CURLOPT_PROXY_TLSAUTH_USERNAME (3),
+.BR CURLOPT_TLSAUTH_TYPE (3),
+.BR CURLOPT_TLSAUTH_USERNAME (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_TYPE.3 b/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_TYPE.3
index ca67a8ebf..c0a4f2812 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_TYPE.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_TYPE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_TLSAUTH_TYPE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_TLSAUTH_TYPE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_TLSAUTH_TYPE \- HTTPS proxy TLS authentication methods
@@ -40,7 +40,7 @@ method is "SRP".
.IP SRP
TLS-SRP authentication. Secure Remote Password authentication for TLS is
-defined in RFC5054 and provides mutual authentication if both sides have a
+defined in RFC 5054 and provides mutual authentication if both sides have a
shared secret. To use TLS-SRP, you must also set the
\fICURLOPT_PROXY_TLSAUTH_USERNAME(3)\fP and
\fICURLOPT_PROXY_TLSAUTH_PASSWORD(3)\fP options.
@@ -53,15 +53,19 @@ blank
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy");
- curl_easy_setopt(curl, CURLOPT_PROXY_TLSAUTH_TYPE, "SRP");
- curl_easy_setopt(curl, CURLOPT_PROXY_TLSAUTH_USERNAME, "user");
- curl_easy_setopt(curl, CURLOPT_PROXY_TLSAUTH_PASSWORD, "secret");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy");
+ curl_easy_setopt(curl, CURLOPT_PROXY_TLSAUTH_TYPE, "SRP");
+ curl_easy_setopt(curl, CURLOPT_PROXY_TLSAUTH_USERNAME, "user");
+ curl_easy_setopt(curl, CURLOPT_PROXY_TLSAUTH_PASSWORD, "secret");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -72,5 +76,7 @@ to work.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY_TLSAUTH_USERNAME "(3), " CURLOPT_PROXY_TLSAUTH_PASSWORD "(3), "
-.BR CURLOPT_TLSAUTH_USERNAME "(3), " CURLOPT_TLSAUTH_PASSWORD "(3), "
+.BR CURLOPT_PROXY_TLSAUTH_PASSWORD (3),
+.BR CURLOPT_PROXY_TLSAUTH_USERNAME (3),
+.BR CURLOPT_TLSAUTH_PASSWORD (3),
+.BR CURLOPT_TLSAUTH_USERNAME (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_USERNAME.3 b/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_USERNAME.3
index 931c3b279..536b7c6e3 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_USERNAME.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_USERNAME.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_TLSAUTH_USERNAME 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_TLSAUTH_USERNAME 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_TLSAUTH_USERNAME \- user name to use for proxy TLS authentication
@@ -47,15 +47,19 @@ NULL
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy");
- curl_easy_setopt(curl, CURLOPT_PROXY_TLSAUTH_TYPE, "SRP");
- curl_easy_setopt(curl, CURLOPT_PROXY_TLSAUTH_USERNAME, "user");
- curl_easy_setopt(curl, CURLOPT_PROXY_TLSAUTH_PASSWORD, "secret");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy");
+ curl_easy_setopt(curl, CURLOPT_PROXY_TLSAUTH_TYPE, "SRP");
+ curl_easy_setopt(curl, CURLOPT_PROXY_TLSAUTH_USERNAME, "user");
+ curl_easy_setopt(curl, CURLOPT_PROXY_TLSAUTH_PASSWORD, "secret");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -64,5 +68,7 @@ Added in 7.52.0, with the OpenSSL and GnuTLS backends only.
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY_TLSAUTH_TYPE "(3), " CURLOPT_PROXY_TLSAUTH_PASSWORD "(3), "
-.BR CURLOPT_TLSAUTH_TYPE "(3), " CURLOPT_TLSAUTH_PASSWORD "(3), "
+.BR CURLOPT_PROXY_TLSAUTH_PASSWORD (3),
+.BR CURLOPT_PROXY_TLSAUTH_TYPE (3),
+.BR CURLOPT_TLSAUTH_PASSWORD (3),
+.BR CURLOPT_TLSAUTH_TYPE (3)
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.3 b/docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.3
index 3d92debf4..0c21d5d4d 100644
--- a/docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.3
+++ b/docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PROXY_TRANSFER_MODE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PROXY_TRANSFER_MODE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PROXY_TRANSFER_MODE \- append FTP transfer mode to URL for proxy
@@ -45,14 +45,19 @@ doing FTP via a proxy. Beware that not all proxies support this feature.
FTP over proxy
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/old-server/file.txt");
- curl_easy_setopt(curl, CURLOPT_PROXY, "http://localhost:80");
- curl_easy_setopt(curl, CURLOPT_PROXY_TRANSFER_MODE, 1L);
- curl_easy_setopt(curl, CURLOPT_TRANSFERTEXT, 1L);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL,
+ "ftp://example.com/old-server/file.txt");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "http://localhost:80");
+ curl_easy_setopt(curl, CURLOPT_PROXY_TRANSFER_MODE, 1L);
+ curl_easy_setopt(curl, CURLOPT_TRANSFERTEXT, 1L);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -61,4 +66,7 @@ Added in 7.18.0
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if the
enabled value is not supported.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY "(3), " CURLOPT_HTTPPROXYTUNNEL "(3), "
+.BR CURLOPT_CRLF (3),
+.BR CURLOPT_TRANSFERTEXT (3),
+.BR CURLOPT_HTTPPROXYTUNNEL (3),
+.BR CURLOPT_PROXY (3)
diff --git a/docs/libcurl/opts/CURLOPT_PUT.3 b/docs/libcurl/opts/CURLOPT_PUT.3
index 5091f9fbb..b203f3d6a 100644
--- a/docs/libcurl/opts/CURLOPT_PUT.3
+++ b/docs/libcurl/opts/CURLOPT_PUT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_PUT 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_PUT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_PUT \- make an HTTP PUT request
@@ -45,25 +45,41 @@ This option is \fBdeprecated\fP since version 7.12.1. Use
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- /* we want to use our own read function */
- curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
+static size_t read_cb(char *ptr, size_t size, size_t nmemb, void *userdata)
+{
+ FILE *src = userdata;
+ /* copy as much data as possible into the 'ptr' buffer, but no more than
+ 'size' * 'nmemb' bytes! */
+ size_t retcode = fread(ptr, size, nmemb, src);
- /* enable PUT */
- curl_easy_setopt(curl, CURLOPT_PUT, 1L);
+ return retcode;
+}
+
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ FILE *src = fopen("local-file", "r");
+ curl_off_t fsize; /* set this to the size of the input file */
+
+ /* we want to use our own read function */
+ curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_cb);
+
+ /* enable PUT */
+ curl_easy_setopt(curl, CURLOPT_PUT, 1L);
- /* specify target */
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/dir/to/newfile");
+ /* specify target */
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/dir/to/newfile");
- /* now specify which pointer to pass to our callback */
- curl_easy_setopt(curl, CURLOPT_READDATA, hd_src);
+ /* now specify which pointer to pass to our callback */
+ curl_easy_setopt(curl, CURLOPT_READDATA, src);
- /* Set the size of the file to upload */
- curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t)fsize);
+ /* Set the size of the file to upload */
+ curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t)fsize);
- /* Now run off and do what you have been told! */
- curl_easy_perform(curl);
+ /* Now run off and do what you have been told! */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -71,4 +87,7 @@ Deprecated since 7.12.1. Do not use.
.SH RETURN VALUE
Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_UPLOAD "(3), " CURLOPT_HTTPGET "(3), "
+.BR CURLOPT_HTTPGET (3),
+.BR CURLOPT_MIMEPOST (3),
+.BR CURLOPT_POSTFIELDS (3),
+.BR CURLOPT_UPLOAD (3)
diff --git a/docs/libcurl/opts/CURLOPT_QUICK_EXIT.3 b/docs/libcurl/opts/CURLOPT_QUICK_EXIT.3
new file mode 100644
index 000000000..37942e46f
--- /dev/null
+++ b/docs/libcurl/opts/CURLOPT_QUICK_EXIT.3
@@ -0,0 +1,64 @@
+.\" **************************************************************************
+.\" * _ _ ____ _
+.\" * Project ___| | | | _ \| |
+.\" * / __| | | | |_) | |
+.\" * | (__| |_| | _ <| |___
+.\" * \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" *
+.\" * This software is licensed 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
+.\" *
+.\" **************************************************************************
+.\"
+.TH CURLOPT_QUICK_EXIT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
+
+.SH NAME
+CURLOPT_QUICK_EXIT \- allow to exit quickly
+.SH SYNOPSIS
+.nf
+#include <curl/curl.h>
+
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_QUICK_EXIT,
+ long value);
+.SH DESCRIPTION
+Pass a long as a parameter, 1L meaning that when recovering from a timeout,
+libcurl should skip lengthy cleanups that are intended to avoid all kinds of
+leaks (threads etc.), as the caller program is about to call exit() anyway.
+This allows for a swift termination after a DNS timeout for example, by
+canceling and/or forgetting about a resolver thread, at the expense of a
+possible (though short-lived) leak of associated resources.
+.SH DEFAULT
+0
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+.nf
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_QUICK_EXIT, 1L);
+ ret = curl_easy_perform(curl);
+ }
+}
+.fi
+.SH AVAILABILITY
+Added in 7.87.0
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR CURLOPT_FAILONERROR (3),
+.BR CURLOPT_RESOLVE (3)
diff --git a/docs/libcurl/opts/CURLOPT_QUOTE.3 b/docs/libcurl/opts/CURLOPT_QUOTE.3
index 58708221f..47702efa2 100644
--- a/docs/libcurl/opts/CURLOPT_QUOTE.3
+++ b/docs/libcurl/opts/CURLOPT_QUOTE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_QUOTE 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_QUOTE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_QUOTE \- (S)FTP commands to run before transfer
@@ -35,24 +35,24 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_QUOTE,
.fi
.SH DESCRIPTION
Pass a pointer to a linked list of FTP or SFTP commands to pass to the server
-prior to your request. This will be done before any other commands are issued
-(even before the CWD command for FTP). The linked list should be a fully valid
-list of 'struct curl_slist' structs properly filled in with text strings. Use
+prior to your request. This is done before any other commands are issued (even
+before the CWD command for FTP). The linked list should be a fully valid list
+of 'struct curl_slist' structs properly filled in with text strings. Use
\fIcurl_slist_append(3)\fP to append strings (commands) to the list, and clear
the entire list afterwards with \fIcurl_slist_free_all(3)\fP.
Disable this operation again by setting a NULL to this option.
When speaking to an FTP server, prefix the command with an asterisk (*) to
-make libcurl continue even if the command fails as by default libcurl will
-stop at first failure.
+make libcurl continue even if the command fails as by default libcurl stops at
+first failure.
-The set of valid FTP commands depends on the server (see RFC959 for a list of
+The set of valid FTP commands depends on the server (see RFC 959 for a list of
mandatory commands).
libcurl does not inspect, parse or "understand" the commands passed to the
server using this option. If you change connection state, working directory or
-similar using quote commands, libcurl will not know about it.
+similar using quote commands, libcurl does not know about it.
The valid SFTP commands are:
.RS
@@ -103,20 +103,24 @@ NULL
SFTP and FTP
.SH EXAMPLE
.nf
-struct curl_slist *cmdlist = NULL;
-cmdlist = curl_slist_append(cmdlist, "RNFR source-name");
-cmdlist = curl_slist_append(cmdlist, "RNTO new-name");
+int main(void)
+{
+ struct curl_slist *cmdlist = NULL;
+ cmdlist = curl_slist_append(cmdlist, "RNFR source-name");
+ cmdlist = curl_slist_append(cmdlist, "RNTO new-name");
-curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/foo.bin");
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/foo.bin");
- /* pass in the FTP commands to run before the transfer */
- curl_easy_setopt(curl, CURLOPT_QUOTE, cmdlist);
+ /* pass in the FTP commands to run before the transfer */
+ curl_easy_setopt(curl, CURLOPT_QUOTE, cmdlist);
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -124,4 +128,7 @@ SFTP support added in 7.16.3. *-prefix for SFTP added in 7.24.0
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_POSTQUOTE "(3), " CURLOPT_PREQUOTE "(3), "
+.BR CURLOPT_CUSTOMREQUEST (3),
+.BR CURLOPT_DIRLISTONLY (3),
+.BR CURLOPT_POSTQUOTE (3),
+.BR CURLOPT_PREQUOTE (3)
diff --git a/docs/libcurl/opts/CURLOPT_RANDOM_FILE.3 b/docs/libcurl/opts/CURLOPT_RANDOM_FILE.3
index 80efdeedb..257d52351 100644
--- a/docs/libcurl/opts/CURLOPT_RANDOM_FILE.3
+++ b/docs/libcurl/opts/CURLOPT_RANDOM_FILE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_RANDOM_FILE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_RANDOM_FILE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_RANDOM_FILE \- file to read random data from
@@ -46,21 +46,25 @@ NULL, not used
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_RANDOM_FILE, "junk.txt");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_RANDOM_FILE, "junk.txt");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
-If built with TLS enabled. Only the OpenSSL backend will use this, and only
-with OpenSSL versions before 1.1.0.
+If built with TLS enabled. Only the OpenSSL backend uses this, and only with
+OpenSSL versions before 1.1.0.
This option was deprecated in 7.84.0.
.SH RETURN VALUE
Returns CURLE_OK on success or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_EGDSOCKET "(3), "
+.BR CURLOPT_EGDSOCKET (3)
diff --git a/docs/libcurl/opts/CURLOPT_RANGE.3 b/docs/libcurl/opts/CURLOPT_RANGE.3
index d2c828ff1..234c06c2d 100644
--- a/docs/libcurl/opts/CURLOPT_RANGE.3
+++ b/docs/libcurl/opts/CURLOPT_RANGE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_RANGE 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_RANGE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_RANGE \- byte range to request
@@ -38,13 +38,13 @@ to retrieve. It should be in the format "X-Y", where either X or Y may be left
out and X and Y are byte indexes.
HTTP transfers also support several intervals, separated with commas as in
-\fI"X-Y,N-M"\fP. Using this kind of multiple intervals will cause the HTTP
-server to send the response document in pieces (using standard MIME separation
+\fI"X-Y,N-M"\fP. Using this kind of multiple intervals causes the HTTP server
+to send the response document in pieces (using standard MIME separation
techniques). Unfortunately, the HTTP standard (RFC 7233 section 3.1) allows
servers to ignore range requests so even when you set \fICURLOPT_RANGE(3)\fP
for a request, you may end up getting the full response sent back.
-For RTSP, the formatting of a range should follow RFC2326 Section 12.29. For
+For RTSP, the formatting of a range should follow RFC 2326 Section 12.29. For
RTSP, byte ranges are \fBnot\fP permitted. Instead, ranges should be given in
\fBnpt\fP, \fButc\fP, or \fBsmpte\fP formats.
@@ -61,15 +61,18 @@ NULL
HTTP, FTP, FILE, RTSP and SFTP.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* get the first 200 bytes */
- curl_easy_setopt(curl, CURLOPT_RANGE, "0-199");
+ /* get the first 200 bytes */
+ curl_easy_setopt(curl, CURLOPT_RANGE, "0-199");
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -78,4 +81,7 @@ FILE since 7.18.0, RTSP since 7.20.0
Returns CURLE_OK on success or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_RESUME_FROM "(3), "
+.BR CURLOPT_LOW_SPEED_LIMIT (3),
+.BR CURLOPT_MAX_RECV_SPEED_LARGE (3),
+.BR CURLOPT_MAXFILESIZE_LARGE (3),
+.BR CURLOPT_RESUME_FROM (3)
diff --git a/docs/libcurl/opts/CURLOPT_READDATA.3 b/docs/libcurl/opts/CURLOPT_READDATA.3
index 449b24347..b92ff3b7c 100644
--- a/docs/libcurl/opts/CURLOPT_READDATA.3
+++ b/docs/libcurl/opts/CURLOPT_READDATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_READDATA 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_READDATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_READDATA \- pointer passed to the read callback
@@ -34,37 +34,47 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_READDATA, void *pointer);
.fi
.SH DESCRIPTION
Data \fIpointer\fP to pass to the file read function. If you use the
-\fICURLOPT_READFUNCTION(3)\fP option, this is the pointer you will get as
-input in the fourth argument to the callback.
+\fICURLOPT_READFUNCTION(3)\fP option, this is the pointer you get as input in
+the fourth argument to the callback.
If you do not specify a read callback but instead rely on the default internal
read function, this data must be a valid readable FILE * (cast to 'void *').
-If you are using libcurl as a win32 DLL, you \fBMUST\fP use a
-\fICURLOPT_READFUNCTION(3)\fP if you set this option or you will experience
-crashes.
+If you are using libcurl as a DLL on Windows, you must use the
+\fICURLOPT_READFUNCTION(3)\fP callback if you set this option, otherwise you
+might experience crashes.
.SH DEFAULT
By default, this is a FILE * to stdin.
.SH PROTOCOLS
This is used for all protocols when sending data.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-struct MyData this;
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+struct MyData {
+ void *custom;
+};
- /* pass pointer that gets passed in to the
- CURLOPT_READFUNCTION callback */
- curl_easy_setopt(curl, CURLOPT_READDATA, &this);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ struct MyData this;
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_perform(curl);
+ /* pass pointer that gets passed in to the
+ CURLOPT_READFUNCTION callback */
+ curl_easy_setopt(curl, CURLOPT_READDATA, &this);
+
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
This option was once known by the older name CURLOPT_INFILE, the name
\fICURLOPT_READDATA(3)\fP was introduced in 7.9.7.
.SH RETURN VALUE
-This will return CURLE_OK.
+This returns CURLE_OK.
.SH "SEE ALSO"
-.BR CURLOPT_READFUNCTION "(3), " CURLOPT_WRITEDATA "(3), "
+.BR CURLOPT_HEADERDATA (3),
+.BR CURLOPT_READFUNCTION (3),
+.BR CURLOPT_WRITEDATA (3),
+.BR CURLOPT_WRITEFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_READFUNCTION.3 b/docs/libcurl/opts/CURLOPT_READFUNCTION.3
index 4f2daae78..9f995b29f 100644
--- a/docs/libcurl/opts/CURLOPT_READFUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_READFUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_READFUNCTION 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_READFUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_READFUNCTION \- read callback for data uploads
@@ -41,18 +41,18 @@ This callback function gets called by libcurl as soon as it needs to read data
in order to send it to the peer - like if you ask it to upload or post data to
the server. The data area pointed at by the pointer \fIbuffer\fP should be
filled up with at most \fIsize\fP multiplied with \fInitems\fP number of bytes
-by your function.
+by your function. \fIsize\fP is always 1.
Set the \fIuserdata\fP argument with the \fICURLOPT_READDATA(3)\fP option.
-Your function must return the actual number of bytes that it stored in the data
-area pointed at by the pointer \fIbuffer\fP. Returning 0 will signal
-end-of-file to the library and cause it to stop the current transfer.
+Your function must return the actual number of bytes that it stored in the
+data area pointed at by the pointer \fIbuffer\fP. Returning 0 signals
+end-of-file to the library and causes it to stop the current transfer.
If you stop the current transfer by returning 0 "pre-maturely" (i.e before the
-server expected it, like when you have said you will upload N bytes and you
+server expected it, like when you have said you would upload N bytes and you
upload less than N bytes), you may experience that the server "hangs" waiting
-for the rest of the data that will not come.
+for the rest of the data that is not sent.
The read callback may return \fICURL_READFUNC_ABORT\fP to stop the current
operation immediately, resulting in a \fICURLE_ABORTED_BY_CALLBACK\fP error
@@ -62,12 +62,12 @@ The callback can return \fICURL_READFUNC_PAUSE\fP to cause reading from this
connection to pause. See \fIcurl_easy_pause(3)\fP for further details.
\fBBugs\fP: when doing TFTP uploads, you must return the exact amount of data
-that the callback wants, or it will be considered the final packet by the
-server end and the transfer will end there.
+that the callback wants, or it is considered the final packet by the server
+end and the transfer ends there.
If you set this callback pointer to NULL, or do not set it at all, the default
-internal read function will be used. It is doing an fread() on the FILE *
-userdata set with \fICURLOPT_READDATA(3)\fP.
+internal read function is used. It is doing an fread() on the FILE * userdata
+set with \fICURLOPT_READDATA(3)\fP.
You can set the total size of the data you are sending by using
\fICURLOPT_INFILESIZE_LARGE(3)\fP or \fICURLOPT_POSTFIELDSIZE_LARGE(3)\fP,
@@ -95,26 +95,32 @@ size_t read_callback(char *ptr, size_t size, size_t nmemb, void *userdata)
return retcode;
}
-void setup(char *uploadthis)
+int main(int argc, char **argv)
{
- FILE *file = fopen(uploadthis, "rb");
+ FILE *file = fopen(argv[1], "rb");
CURLcode result;
- /* set callback to use */
- curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ /* set callback to use */
+ curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
- /* pass in suitable argument to callback */
- curl_easy_setopt(curl, CURLOPT_READDATA, (void *)file);
+ /* pass in suitable argument to callback */
+ curl_easy_setopt(curl, CURLOPT_READDATA, (void *)file);
- result = curl_easy_perform(curl);
+ result = curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
CURL_READFUNC_PAUSE return code was added in 7.18.0 and CURL_READFUNC_ABORT
was added in 7.12.1.
.SH RETURN VALUE
-This will return CURLE_OK.
+This returns CURLE_OK.
.SH "SEE ALSO"
-.BR CURLOPT_READDATA "(3), " CURLOPT_WRITEFUNCTION "(3), "
-.BR CURLOPT_SEEKFUNCTION "(3), " CURLOPT_UPLOAD "(3), " CURLOPT_POST "(3), "
-.BR CURLOPT_UPLOAD_BUFFERSIZE "(3), "
+.BR CURLOPT_POST (3),
+.BR CURLOPT_READDATA (3),
+.BR CURLOPT_SEEKFUNCTION (3),
+.BR CURLOPT_UPLOAD (3),
+.BR CURLOPT_UPLOAD_BUFFERSIZE (3),
+.BR CURLOPT_WRITEFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.3 b/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.3
index f2329328d..4d1230c73 100644
--- a/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.3
+++ b/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_REDIR_PROTOCOLS 3 "October 12, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_REDIR_PROTOCOLS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_REDIR_PROTOCOLS \- protocols allowed to redirect to
@@ -46,11 +46,9 @@ redirections.
Protocols denied by \fICURLOPT_PROTOCOLS(3)\fP are not overridden by this
option.
-By default libcurl will allow HTTP, HTTPS, FTP and FTPS on redirect (7.65.2).
-Older versions of libcurl allowed all protocols on redirect except several
-disabled for security reasons: Since 7.19.4 FILE and SCP are disabled, and
-since 7.40.0 SMB and SMBS are also disabled. \fICURLPROTO_ALL\fP enables all
-protocols on redirect, including those disabled for security.
+By default libcurl allows HTTP, HTTPS, FTP and FTPS on redirect (7.65.2).
+\fICURLPROTO_ALL\fP enables all protocols on redirect, including those
+otherwise disabled for security.
These are the available protocol defines:
.nf
@@ -92,17 +90,20 @@ SMB and SMBS.
All
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- /* pass in the URL from an external source */
- curl_easy_setopt(curl, CURLOPT_URL, argv[1]);
+int main(int argc, char **argv)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ /* pass in the URL from an external source */
+ curl_easy_setopt(curl, CURLOPT_URL, argv[1]);
- /* only allow redirects to HTTP and HTTPS URLs */
- curl_easy_setopt(curl, CURLOPT_REDIR_PROTOCOLS,
- CURLPROTO_HTTP | CURLPROTO_HTTPS);
+ /* only allow redirects to HTTP and HTTPS URLs */
+ curl_easy_setopt(curl, CURLOPT_REDIR_PROTOCOLS,
+ CURLPROTO_HTTP | CURLPROTO_HTTPS);
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -111,4 +112,7 @@ since 7.85.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_PROTOCOLS "(3), "
+.BR CURLINFO_SCHEME (3),
+.BR CURLOPT_DEFAULT_PROTOCOL (3),
+.BR CURLOPT_PROTOCOLS (3),
+.BR CURLOPT_REDIR_PROTOCOLS_STR (3)
diff --git a/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS_STR.3 b/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS_STR.3
index 395b1952e..749840032 100644
--- a/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS_STR.3
+++ b/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS_STR.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_REDIR_PROTOCOLS_STR 3 "September 13, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_REDIR_PROTOCOLS_STR 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_REDIR_PROTOCOLS_STR \- protocols allowed to redirect to
@@ -44,10 +44,8 @@ redirections.
Protocols denied by \fICURLOPT_PROTOCOLS_STR(3)\fP are not overridden by this
option.
-By default libcurl will allow HTTP, HTTPS, FTP and FTPS on redirects (since
-7.65.2). Older versions of libcurl allowed all protocols on redirect except
-several disabled for security reasons: Since 7.19.4 FILE and SCP are disabled,
-and since 7.40.0 SMB and SMBS are also disabled.
+By default libcurl allows HTTP, HTTPS, FTP and FTPS on redirects (since
+7.65.2).
These are the available protocols:
@@ -70,16 +68,19 @@ SMB and SMBS.
All
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- /* pass in the URL from an external source */
- curl_easy_setopt(curl, CURLOPT_URL, argv[1]);
+int main(int argc, char **argv)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ /* pass in the URL from an external source */
+ curl_easy_setopt(curl, CURLOPT_URL, argv[1]);
- /* only allow redirects to HTTP and HTTPS URLs */
- curl_easy_setopt(curl, CURLOPT_REDIR_PROTOCOLS_STR, "http,https");
+ /* only allow redirects to HTTP and HTTPS URLs */
+ curl_easy_setopt(curl, CURLOPT_REDIR_PROTOCOLS_STR, "http,https");
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -89,4 +90,8 @@ Returns CURLE_UNKNOWN_OPTION if the option is not implemented,
CURLE_UNSUPPORTED_PROTOCOL if a listed protocol is not supported or disabled,
CURLE_BAD_FUNCTION_ARGUMENT if no protocol is listed else CURLE_OK.
.SH "SEE ALSO"
-.BR CURLOPT_PROTOCOLS_STR "(3), "
+.BR CURLOPT_PROTOCOLS_STR (3),
+.BR CURLINFO_SCHEME (3),
+.BR CURLOPT_DEFAULT_PROTOCOL (3),
+.BR CURLOPT_PROTOCOLS (3),
+.BR CURLOPT_REDIR_PROTOCOLS (3)
diff --git a/docs/libcurl/opts/CURLOPT_REFERER.3 b/docs/libcurl/opts/CURLOPT_REFERER.3
index b0650c6b6..94ef00a4c 100644
--- a/docs/libcurl/opts/CURLOPT_REFERER.3
+++ b/docs/libcurl/opts/CURLOPT_REFERER.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_REFERER 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_REFERER 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_REFERER \- the HTTP referer header
@@ -33,10 +33,9 @@ CURLOPT_REFERER \- the HTTP referer header
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_REFERER, char *where);
.fi
.SH DESCRIPTION
-Pass a pointer to a null-terminated string as parameter. It will be used to
-set the Referer: header in the http request sent to the remote server. This
-can be used to fool servers or scripts. You can also set any custom header
-with \fICURLOPT_HTTPHEADER(3)\fP.
+Pass a pointer to a null-terminated string as parameter. It is used to set the
+Referer: header field in the HTTP request sent to the remote server. You can
+set any custom header with \fICURLOPT_HTTPHEADER(3)\fP.
The application does not have to keep the string around after setting this
option.
@@ -46,14 +45,17 @@ NULL
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* tell it where we found the link to this place */
- curl_easy_setopt(curl, CURLOPT_REFERER, "https://example.com/aboutme.html");
+ /* tell it where we found the link to this place */
+ curl_easy_setopt(curl, CURLOPT_REFERER, "https://example.org/me.html");
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -62,5 +64,7 @@ If built with HTTP support
Returns CURLE_OK if HTTP support is enabled, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_USERAGENT "(3), " CURLOPT_HTTPHEADER "(3), "
-.BR CURLINFO_REFERER "(3), "
+.BR CURLINFO_REDIRECT_URL (3),
+.BR CURLINFO_REFERER (3),
+.BR CURLOPT_HTTPHEADER (3),
+.BR CURLOPT_USERAGENT (3)
diff --git a/docs/libcurl/opts/CURLOPT_REQUEST_TARGET.3 b/docs/libcurl/opts/CURLOPT_REQUEST_TARGET.3
index 169df478e..e32cfc4c6 100644
--- a/docs/libcurl/opts/CURLOPT_REQUEST_TARGET.3
+++ b/docs/libcurl/opts/CURLOPT_REQUEST_TARGET.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_REQUEST_TARGET 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_REQUEST_TARGET 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_REQUEST_TARGET \- alternative target for this request
@@ -35,22 +35,28 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_REQUEST_TARGET, string);
.SH DESCRIPTION
Pass a char * to string which libcurl uses in the upcoming request instead of
the path as extracted from the URL.
+
+libcurl passes on the verbatim string in its request without any filter or
+other safe guards. That includes white space and control characters.
.SH DEFAULT
NULL
.SH PROTOCOLS
HTTP
.SH EXAMPLE
.nf
-curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/*");
- curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "OPTIONS");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/*");
+ curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "OPTIONS");
- /* issue an OPTIONS * request (no leading slash) */
- curl_easy_setopt(curl, CURLOPT_REQUEST_TARGET, "*");
+ /* issue an OPTIONS * request (no leading slash) */
+ curl_easy_setopt(curl, CURLOPT_REQUEST_TARGET, "*");
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -58,4 +64,7 @@ Added in 7.55.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_CUSTOMREQUEST "(3), " CURLOPT_HTTPGET "(3), "
+.BR CURLOPT_CUSTOMREQUEST (3),
+.BR CURLOPT_HTTPGET (3),
+.BR CURLOPT_PATH_AS_IS (3),
+.BR CURLOPT_URL (3)
diff --git a/docs/libcurl/opts/CURLOPT_RESOLVE.3 b/docs/libcurl/opts/CURLOPT_RESOLVE.3
index f0da50657..5ac037691 100644
--- a/docs/libcurl/opts/CURLOPT_RESOLVE.3
+++ b/docs/libcurl/opts/CURLOPT_RESOLVE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_RESOLVE 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_RESOLVE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_RESOLVE \- provide custom host name to IP address resolves
@@ -45,24 +45,24 @@ Each resolve rule to add should be written using the format
[+]HOST:PORT:ADDRESS[,ADDRESS]
.fi
-\&... where HOST is the name libcurl will try to resolve, PORT is the port
-number of the service where libcurl wants to connect to the HOST and ADDRESS
-is one or more numerical IP addresses. If you specify multiple IP addresses
-they need to be separated by comma. If libcurl is built to support IPv6, each
-of the ADDRESS entries can of course be either IPv4 or IPv6 style addressing.
+HOST is the name libcurl wants to resolve, PORT is the port number of the
+service where libcurl wants to connect to the HOST and ADDRESS is one or more
+numerical IP addresses. If you specify multiple IP addresses they need to be
+separated by comma. If libcurl is built to support IPv6, each of the ADDRESS
+entries can of course be either IPv4 or IPv6 style addressing.
-This option effectively pre-populates the DNS cache with entries for the
-host+port pair so redirects and everything that operations against the
-HOST+PORT will instead use your provided ADDRESS.
+This option effectively populates the DNS cache with entries for the host+port
+pair so redirects and everything that operations against the HOST+PORT instead
+use your provided ADDRESS.
The optional leading "+" specifies that the new entry should time-out. Entries
-added without the leading plus character will never time-out whereas entries
-added with "+HOST:..." will time-out just like ordinary DNS cache entries.
+added without the leading plus character never times out whereas entries added
+with "+HOST:..." times out just like ordinary DNS cache entries.
If the DNS cache already has an entry for the given host+port pair, the new
-entry will override the former one.
+entry overrides the former one.
-An ADDRESS provided by this option will only be used if not restricted by the
+An ADDRESS provided by this option is only used if not restricted by the
setting of \fICURLOPT_IPRESOLVE(3)\fP to a different IP version.
To remove names from the DNS cache again, to stop providing these fake
@@ -80,22 +80,25 @@ NULL
All
.SH EXAMPLE
.nf
-CURL *curl;
-struct curl_slist *host = NULL;
-host = curl_slist_append(NULL, "example.com:443:127.0.0.1");
+int main(void)
+{
+ CURL *curl;
+ struct curl_slist *host = NULL;
+ host = curl_slist_append(NULL, "example.com:443:127.0.0.1");
-curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_RESOLVE, host);
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_RESOLVE, host);
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
- /* always cleanup */
- curl_easy_cleanup(curl);
-}
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
-curl_slist_free_all(host);
+ curl_slist_free_all(host);
+}
.fi
.SH AVAILABILITY
Added in 7.21.3. Removal support added in 7.42.0.
@@ -109,5 +112,6 @@ Support for adding non-permanent entries by using the "+" prefix was added in
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_IPRESOLVE "(3), " CURLOPT_DNS_CACHE_TIMEOUT "(3), "
-.BR CURLOPT_CONNECT_TO "(3), "
+.BR CURLOPT_CONNECT_TO (3),
+.BR CURLOPT_DNS_CACHE_TIMEOUT (3),
+.BR CURLOPT_IPRESOLVE (3)
diff --git a/docs/libcurl/opts/CURLOPT_RESOLVER_START_DATA.3 b/docs/libcurl/opts/CURLOPT_RESOLVER_START_DATA.3
index 8fbb7d12f..691085bab 100644
--- a/docs/libcurl/opts/CURLOPT_RESOLVER_START_DATA.3
+++ b/docs/libcurl/opts/CURLOPT_RESOLVER_START_DATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_RESOLVER_START_DATA 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_RESOLVER_START_DATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_RESOLVER_START_DATA \- pointer passed to the resolver start callback
@@ -34,7 +34,7 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RESOLVER_START_DATA,
void *pointer);
.fi
.SH DESCRIPTION
-Pass a \fIpointer\fP that will be untouched by libcurl and passed as the third
+Pass a \fIpointer\fP is be untouched by libcurl and passed as the third
argument in the resolver start callback set with
\fICURLOPT_RESOLVER_START_FUNCTION(3)\fP.
.SH DEFAULT
@@ -52,13 +52,16 @@ static int resolver_start_cb(void *resolver_state, void *reserved,
return 0;
}
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_RESOLVER_START_FUNCTION, resolver_start_cb);
- curl_easy_setopt(curl, CURLOPT_RESOLVER_START_DATA, curl);
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_RESOLVER_START_FUNCTION, resolver_start_cb);
+ curl_easy_setopt(curl, CURLOPT_RESOLVER_START_DATA, curl);
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -66,4 +69,5 @@ Added in 7.59.0
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_RESOLVER_START_FUNCTION "(3) "
+.BR CURLOPT_PREREQFUNCTION (3),
+.BR CURLOPT_RESOLVER_START_FUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_RESOLVER_START_FUNCTION.3 b/docs/libcurl/opts/CURLOPT_RESOLVER_START_FUNCTION.3
index 7159a0be2..2b700eb49 100644
--- a/docs/libcurl/opts/CURLOPT_RESOLVER_START_FUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_RESOLVER_START_FUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_RESOLVER_START_FUNCTION 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_RESOLVER_START_FUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_RESOLVER_START_FUNCTION \- callback called before a new name resolve is started
@@ -52,16 +52,16 @@ socket callback options.
\fIuserdata\fP is the user pointer set with the
\fICURLOPT_RESOLVER_START_DATA(3)\fP option.
-The callback must return 0 on success. Returning a non-zero value will cause
-the resolve to fail.
+The callback must return 0 on success. Returning a non-zero value causes the
+resolve to fail.
.SH DEFAULT
NULL (No callback)
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
-static int resolver_start_cb(void *resolver_state, void *reserved,
- void *userdata)
+static int start_cb(void *resolver_state, void *reserved,
+ void *userdata)
{
(void)reserved;
printf("Received resolver_state=%p userdata=%p\\n",
@@ -69,13 +69,16 @@ static int resolver_start_cb(void *resolver_state, void *reserved,
return 0;
}
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_RESOLVER_START_FUNCTION, resolver_start_cb);
- curl_easy_setopt(curl, CURLOPT_RESOLVER_START_DATA, curl);
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_RESOLVER_START_FUNCTION, start_cb);
+ curl_easy_setopt(curl, CURLOPT_RESOLVER_START_DATA, curl);
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -83,4 +86,5 @@ Added in 7.59.0
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_RESOLVER_START_DATA "(3) "
+.BR CURLOPT_PREREQFUNCTION (3),
+.BR CURLOPT_RESOLVER_START_DATA (3)
diff --git a/docs/libcurl/opts/CURLOPT_RESUME_FROM.3 b/docs/libcurl/opts/CURLOPT_RESUME_FROM.3
index 4b848f2fb..a562d0f5f 100644
--- a/docs/libcurl/opts/CURLOPT_RESUME_FROM.3
+++ b/docs/libcurl/opts/CURLOPT_RESUME_FROM.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_RESUME_FROM 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_RESUME_FROM 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_RESUME_FROM \- offset to resume transfer from
@@ -40,7 +40,7 @@ option to -1 to make the transfer start from the end of the target file
(useful to continue an interrupted upload).
When doing uploads with FTP, the resume position is where in the local/source
-file libcurl should try to resume the upload from and it will then append the
+file libcurl should try to resume the upload from and it then appends the
source file to the remote target file.
If you need to resume a transfer beyond the 2GB limit, use
@@ -51,21 +51,26 @@ If you need to resume a transfer beyond the 2GB limit, use
HTTP, FTP, SFTP, FILE
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ long size_of_file;
- /* resume upload at byte index 200 */
- curl_easy_setopt(curl, CURLOPT_RESUME_FROM, 200L);
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com");
- /* ask for upload */
- curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
+ /* resume upload at byte index 200 */
+ curl_easy_setopt(curl, CURLOPT_RESUME_FROM, 200L);
- /* set total data amount to expect */
- curl_easy_setopt(curl, CURLOPT_INFILESIZE, size_of_file);
+ /* ask for upload */
+ curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
- /* Perform the request */
- curl_easy_perform(curl);
+ /* set total data amount to expect */
+ curl_easy_setopt(curl, CURLOPT_INFILESIZE, size_of_file);
+
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -73,5 +78,6 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_RESUME_FROM_LARGE "(3), " CURLOPT_RANGE "(3), "
-.BR CURLOPT_INFILESIZE "(3), "
+.BR CURLOPT_RESUME_FROM_LARGE (3),
+.BR CURLOPT_RANGE (3),
+.BR CURLOPT_INFILESIZE (3)
diff --git a/docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.3 b/docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.3
index 9414ce7a3..37844520e 100644
--- a/docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.3
+++ b/docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_RESUME_FROM_LARGE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_RESUME_FROM_LARGE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_RESUME_FROM_LARGE \- offset to resume transfer from
@@ -40,32 +40,35 @@ option to -1 to make the transfer start from the end of the target file
(useful to continue an interrupted upload).
When doing uploads with FTP, the resume position is where in the local/source
-file libcurl should try to resume the upload from and it will then append the
-source file to the remote target file.
+file libcurl should try to resume the upload from and it appends the source
+file to the remote target file.
.SH DEFAULT
0, not used
.SH PROTOCOLS
HTTP, FTP, SFTP, FILE
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_off_t resume_position = GET_IT_SOMEHOW;
- curl_off_t file_size = GET_IT_SOMEHOW_AS_WELL;
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_off_t resume_position; /* get it somehow */
+ curl_off_t file_size; /* get it somehow as well */
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com");
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com");
- /* resuming upload at this position, possibly beyond 2GB */
- curl_easy_setopt(curl, CURLOPT_RESUME_FROM_LARGE, resume_position);
+ /* resuming upload at this position, possibly beyond 2GB */
+ curl_easy_setopt(curl, CURLOPT_RESUME_FROM_LARGE, resume_position);
- /* ask for upload */
- curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
+ /* ask for upload */
+ curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
- /* set total data amount to expect */
- curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, file_size);
+ /* set total data amount to expect */
+ curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, file_size);
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -73,5 +76,6 @@ Added in 7.11.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_RESUME_FROM "(3), " CURLOPT_RANGE "(3), "
-.BR CURLOPT_INFILESIZE_LARGE "(3), "
+.BR CURLOPT_INFILESIZE_LARGE (3),
+.BR CURLOPT_RANGE (3),
+.BR CURLOPT_RESUME_FROM (3)
diff --git a/docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.3 b/docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.3
index f099d9da9..5b9e63a43 100644
--- a/docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.3
+++ b/docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_RTSP_CLIENT_CSEQ 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_RTSP_CLIENT_CSEQ 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_RTSP_CLIENT_CSEQ \- RTSP client CSEQ number
@@ -33,21 +33,25 @@ CURLOPT_RTSP_CLIENT_CSEQ \- RTSP client CSEQ number
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_CLIENT_CSEQ, long cseq);
.fi
.SH DESCRIPTION
-Pass a long to set the CSEQ number to issue for the next RTSP
-request. Useful if the application is resuming a previously broken
-connection. The CSEQ will increment from this new number henceforth.
+Pass a long to set the CSEQ number to issue for the next RTSP request. Useful
+if the application is resuming a previously broken connection. The CSEQ
+increments from this new number henceforth.
.SH DEFAULT
0
.SH PROTOCOLS
RTSP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "rtsp://example.com/");
- curl_easy_setopt(curl, CURLOPT_RTSP_CLIENT_CSEQ, 1234L);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "rtsp://example.com/");
+ curl_easy_setopt(curl, CURLOPT_RTSP_CLIENT_CSEQ, 1234L);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -55,4 +59,7 @@ Added in 7.20.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_RTSP_SERVER_CSEQ "(3), " CURLOPT_RTSP_REQUEST "(3), "
+.BR CURLINFO_RTSP_CLIENT_CSEQ (3),
+.BR CURLINFO_RTSP_SERVER_CSEQ (3),
+.BR CURLOPT_RTSP_REQUEST (3),
+.BR CURLOPT_RTSP_SERVER_CSEQ (3)
diff --git a/docs/libcurl/opts/CURLOPT_RTSP_REQUEST.3 b/docs/libcurl/opts/CURLOPT_RTSP_REQUEST.3
index 28323fc7d..92e93dc0d 100644
--- a/docs/libcurl/opts/CURLOPT_RTSP_REQUEST.3
+++ b/docs/libcurl/opts/CURLOPT_RTSP_REQUEST.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_RTSP_REQUEST 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_RTSP_REQUEST 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_RTSP_REQUEST \- RTSP request
@@ -43,9 +43,9 @@ for this method.
.IP CURL_RTSPREQ_DESCRIBE
Used to get the low level description of a stream. The application should note
what formats it understands in the \fI'Accept:'\fP header. Unless set
-manually, libcurl will automatically fill in \fI'Accept: application/sdp'\fP.
-Time-condition headers will be added to Describe requests if the
-\fICURLOPT_TIMECONDITION(3)\fP option is active. \fB(The session ID is not
+manually, libcurl automatically adds in \fI'Accept: application/sdp'\fP.
+Time-condition headers are added to Describe requests if the
+\fICURLOPT_TIMECONDITION(3)\fP option is used. \fB(The session ID is not
needed for this method)\fP
.IP CURL_RTSPREQ_ANNOUNCE
When sent by a client, this method changes the description of the session. For
@@ -57,9 +57,9 @@ session. ANNOUNCE acts like an HTTP PUT or POST just like
Setup is used to initialize the transport layer for the session. The
application must set the desired Transport options for a session by using the
\fICURLOPT_RTSP_TRANSPORT(3)\fP option prior to calling setup. If no session
-ID is currently set with \fICURLOPT_RTSP_SESSION_ID(3)\fP, libcurl will
-extract and use the session ID in the response to this request. The session ID
-is not needed for this method.
+ID is currently set with \fICURLOPT_RTSP_SESSION_ID(3)\fP, libcurl extracts
+and uses the session ID in the response to this request. The session ID is not
+needed for this method.
.IP CURL_RTSPREQ_PLAY
Send a Play command to the server. Use the \fICURLOPT_RANGE(3)\fP option to
modify the playback time (e.g. \fInpt=10-15\fP).
@@ -72,41 +72,46 @@ This command terminates an RTSP session. Simply closing a connection does not
terminate the RTSP session since it is valid to control an RTSP session over
different connections.
.IP CURL_RTSPREQ_GET_PARAMETER
-Retrieve a parameter from the server. By default, libcurl will automatically
-include a \fIContent-Type: text/parameters\fP header on all non-empty requests
-unless a custom one is set. GET_PARAMETER acts just like an HTTP PUT or POST
-(see \fICURL_RTSPREQ_SET_PARAMETER\fP).
-Applications wishing to send a heartbeat message (e.g. in the presence of a
-server-specified timeout) should send use an empty GET_PARAMETER request.
+Retrieve a parameter from the server. By default, libcurl adds a
+\fIContent-Type: text/parameters\fP header on all non-empty requests unless a
+custom one is set. GET_PARAMETER acts just like an HTTP PUT or POST (see
+\fICURL_RTSPREQ_SET_PARAMETER\fP). Applications wishing to send a heartbeat
+message (e.g. in the presence of a server-specified timeout) should send use
+an empty GET_PARAMETER request.
.IP CURL_RTSPREQ_SET_PARAMETER
-Set a parameter on the server. By default, libcurl will automatically include
-a \fIContent-Type: text/parameters\fP header unless a custom one is set. The
-interaction with SET_PARAMETER is much like an HTTP PUT or POST. An application
-may either use \fICURLOPT_UPLOAD(3)\fP with \fICURLOPT_READDATA(3)\fP like a
-HTTP PUT, or it may use \fICURLOPT_POSTFIELDS(3)\fP like an HTTP POST. No
-chunked transfers are allowed, so the application must set the
-\fICURLOPT_INFILESIZE(3)\fP in the former and \fICURLOPT_POSTFIELDSIZE(3)\fP
-in the latter. Also, there is no use of multi-part POSTs within RTSP.
+Set a parameter on the server. By default, libcurl uses a
+\fIContent-Type: text/parameters\fP header unless a custom one is set.
+The interaction with SET_PARAMETER is much like an HTTP PUT or POST. An
+application may either use \fICURLOPT_UPLOAD(3)\fP with
+\fICURLOPT_READDATA(3)\fP like a HTTP PUT, or it may use
+\fICURLOPT_POSTFIELDS(3)\fP like an HTTP POST. No chunked transfers are
+allowed, so the application must set the \fICURLOPT_INFILESIZE(3)\fP in the
+former and \fICURLOPT_POSTFIELDSIZE(3)\fP in the latter. Also, there is no use
+of multi-part POSTs within RTSP.
.IP CURL_RTSPREQ_RECORD
Used to tell the server to record a session. Use the \fICURLOPT_RANGE(3)\fP
option to modify the record time.
.IP CURL_RTSPREQ_RECEIVE
This is a special request because it does not send any data to the server. The
application may call this function in order to receive interleaved RTP
-data. It will return after processing one read buffer of data in order to give
-the application a chance to run.
+data. It returns after processing one read buffer of data in order to give the
+application a chance to run.
.SH DEFAULT
.SH PROTOCOLS
RTSP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "rtsp://example.com/");
- /* ask for options! */
- curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_OPTIONS);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "rtsp://example.com/");
+ /* ask for options! */
+ curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_OPTIONS);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -114,4 +119,5 @@ Added in 7.20.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_RTSP_SESSION_ID "(3), " CURLOPT_RTSP_STREAM_URI "(3), "
+.BR CURLOPT_RTSP_SESSION_ID (3),
+.BR CURLOPT_RTSP_STREAM_URI (3)
diff --git a/docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.3 b/docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.3
index ad087a6a6..8de5b925d 100644
--- a/docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.3
+++ b/docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_RTSP_SERVER_CSEQ 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_RTSP_SERVER_CSEQ 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_RTSP_SERVER_CSEQ \- RTSP server CSEQ number
@@ -42,12 +42,16 @@ unimplemented.
RTSP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "rtsp://example.com/");
- curl_easy_setopt(curl, CURLOPT_RTSP_SERVER_CSEQ, 1234L);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "rtsp://example.com/");
+ curl_easy_setopt(curl, CURLOPT_RTSP_SERVER_CSEQ, 1234L);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -55,4 +59,6 @@ Added in 7.20.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_RTSP_CLIENT_CSEQ "(3), " CURLOPT_RTSP_STREAM_URI "(3), "
+.BR CURLINFO_RTSP_SERVER_CSEQ (3),
+.BR CURLOPT_RTSP_CLIENT_CSEQ (3),
+.BR CURLOPT_RTSP_STREAM_URI (3)
diff --git a/docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.3 b/docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.3
index be831dc82..88142013d 100644
--- a/docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.3
+++ b/docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_RTSP_SESSION_ID 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_RTSP_SESSION_ID 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_RTSP_SESSION_ID \- RTSP session ID
@@ -35,10 +35,9 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_SESSION_ID, char *id);
.SH DESCRIPTION
Pass a char * as a parameter to set the value of the current RTSP Session ID
for the handle. Useful for resuming an in-progress session. Once this value is
-set to any non-NULL value, libcurl will return \fICURLE_RTSP_SESSION_ERROR\fP
-if ID received from the server does not match. If unset (or set to NULL),
-libcurl will automatically set the ID the first time the server sets it in a
-response.
+set to any non-NULL value, libcurl returns \fICURLE_RTSP_SESSION_ERROR\fP if
+ID received from the server does not match. If unset (or set to NULL), libcurl
+automatically sets the ID the first time the server sets it in a response.
The application does not have to keep the string around after setting this
option.
@@ -48,13 +47,17 @@ NULL
RTSP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- char *prev_id; /* saved from before somehow */
- curl_easy_setopt(curl, CURLOPT_URL, "rtsp://example.com/");
- curl_easy_setopt(curl, CURLOPT_RTSP_SESSION_ID, prev_id);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ char *prev_id; /* saved from before somehow */
+ curl_easy_setopt(curl, CURLOPT_URL, "rtsp://example.com/");
+ curl_easy_setopt(curl, CURLOPT_RTSP_SESSION_ID, prev_id);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -63,4 +66,5 @@ Added in 7.20.0
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_RTSP_REQUEST "(3), " CURLOPT_RTSP_STREAM_URI "(3), "
+.BR CURLOPT_RTSP_REQUEST (3),
+.BR CURLOPT_RTSP_STREAM_URI (3)
diff --git a/docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.3 b/docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.3
index 6831fc003..cff2eaa96 100644
--- a/docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.3
+++ b/docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_RTSP_STREAM_URI 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_RTSP_STREAM_URI 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_RTSP_STREAM_URI \- RTSP stream URI
@@ -36,13 +36,13 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_STREAM_URI, char *URI);
Set the stream \fIURI\fP to operate on by passing a char * . For example, a
single session may be controlling \fIrtsp://foo/twister/audio\fP and
\fIrtsp://foo/twister/video\fP and the application can switch to the
-appropriate stream using this option. If unset, libcurl will default to
-operating on generic server options by passing '*' in the place of the RTSP
-Stream URI. This option is distinct from \fICURLOPT_URL(3)\fP. When working
-with RTSP, the \fICURLOPT_RTSP_STREAM_URI(3)\fP indicates what URL to send to
-the server in the request header while the \fICURLOPT_URL(3)\fP indicates
-where to make the connection to. (e.g. the \fICURLOPT_URL(3)\fP for the above
-examples might be set to \fIrtsp://foo/twister\fP
+appropriate stream using this option. If unset, libcurl defaults to operating
+on generic server options by passing '*' in the place of the RTSP Stream
+URI. This option is distinct from \fICURLOPT_URL(3)\fP. When working with
+RTSP, the \fICURLOPT_RTSP_STREAM_URI(3)\fP indicates what URL to send to the
+server in the request header while the \fICURLOPT_URL(3)\fP indicates where to
+make the connection to. (e.g. the \fICURLOPT_URL(3)\fP for the above examples
+might be set to \fIrtsp://foo/twister\fP
The application does not have to keep the string around after setting this
option.
@@ -52,14 +52,17 @@ option.
RTSP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- char *prev_id; /* saved from before somehow */
- curl_easy_setopt(curl, CURLOPT_URL, "rtsp://example.com/");
- curl_easy_setopt(curl, CURLOPT_RTSP_STREAM_URI,
- "rtsp://foo.example.com/twister/video");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "rtsp://example.com/");
+ curl_easy_setopt(curl, CURLOPT_RTSP_STREAM_URI,
+ "rtsp://foo.example.com/twister/video");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -68,4 +71,5 @@ Added in 7.20.0
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_RTSP_REQUEST "(3), " CURLOPT_RTSP_TRANSPORT "(3), "
+.BR CURLOPT_RTSP_REQUEST (3),
+.BR CURLOPT_RTSP_TRANSPORT (3)
diff --git a/docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.3 b/docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.3
index 30eb86ebe..5b05db2ff 100644
--- a/docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.3
+++ b/docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_RTSP_TRANSPORT 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_RTSP_TRANSPORT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_RTSP_TRANSPORT \- RTSP Transport: header
@@ -46,14 +46,18 @@ NULL
RTSP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "rtsp://example.com/");
- curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_SETUP);
- curl_easy_setopt(curl, CURLOPT_RTSP_TRANSPORT,
- "RTP/AVP;unicast;client_port=4588-4589");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "rtsp://example.com/");
+ curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_SETUP);
+ curl_easy_setopt(curl, CURLOPT_RTSP_TRANSPORT,
+ "RTP/AVP;unicast;client_port=4588-4589");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -62,4 +66,5 @@ Added in 7.20.0
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_RTSP_REQUEST "(3), " CURLOPT_RTSP_SESSION_ID "(3), "
+.BR CURLOPT_RTSP_REQUEST (3),
+.BR CURLOPT_RTSP_SESSION_ID (3)
diff --git a/docs/libcurl/opts/CURLOPT_SASL_AUTHZID.3 b/docs/libcurl/opts/CURLOPT_SASL_AUTHZID.3
index 57bcc6486..7c0ffeb2d 100644
--- a/docs/libcurl/opts/CURLOPT_SASL_AUTHZID.3
+++ b/docs/libcurl/opts/CURLOPT_SASL_AUTHZID.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SASL_AUTHZID 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SASL_AUTHZID 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SASL_AUTHZID \- authorization identity (identity to act as)
@@ -38,9 +38,9 @@ authorization identity (\fIauthzid\fP) for the transfer. Only applicable to
the PLAIN SASL authentication mechanism where it is optional.
When not specified only the authentication identity (\fIauthcid\fP) as
-specified by the username will be sent to the server, along with the
-password. The server will derive a \fIauthzid\fP from the \fIauthcid\fP when
-not provided, which it will then uses internally.
+specified by the username is sent to the server, along with the password. The
+server derives a \fIauthzid\fP from the \fIauthcid\fP when not provided, which
+it then uses internally.
When the \fIauthzid\fP is specified, the use of which is server dependent, it
can be used to access another user's inbox, that the user has been granted
@@ -51,14 +51,18 @@ blank
IMAP, LDAP, POP3 and SMTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "imap://example.com/");
- curl_easy_setopt(curl, CURLOPT_USERNAME, "Kurt");
- curl_easy_setopt(curl, CURLOPT_PASSWORD, "xipj3plmq");
- curl_easy_setopt(curl, CURLOPT_SASL_AUTHZID, "Ursel");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "imap://example.com/");
+ curl_easy_setopt(curl, CURLOPT_USERNAME, "Kurt");
+ curl_easy_setopt(curl, CURLOPT_PASSWORD, "xipj3plmq");
+ curl_easy_setopt(curl, CURLOPT_SASL_AUTHZID, "Ursel");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -66,4 +70,6 @@ Added in 7.66.0. Support for OpenLDAP added in 7.82.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_USERNAME "(3), " CURLOPT_PASSWORD "(3), ".BR CURLOPT_USERPWD "(3)"
+.BR CURLOPT_PASSWORD (3),
+.BR CURLOPT_USERNAME (3),
+.BR CURLOPT_USERPWD (3)
diff --git a/docs/libcurl/opts/CURLOPT_SASL_IR.3 b/docs/libcurl/opts/CURLOPT_SASL_IR.3
index 7ab2d9778..23be6f288 100644
--- a/docs/libcurl/opts/CURLOPT_SASL_IR.3
+++ b/docs/libcurl/opts/CURLOPT_SASL_IR.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SASL_IR 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SASL_IR 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SASL_IR \- send initial response in first packet
@@ -33,10 +33,10 @@ CURLOPT_SASL_IR \- send initial response in first packet
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SASL_IR, long enable);
.fi
.SH DESCRIPTION
-Pass a long. If the value is 1, curl will send the initial response to the
-server in the first authentication packet in order to reduce the number of
-ping pong requests. Only applicable to the following supporting SASL
-authentication mechanisms:
+Pass a long. If the value is 1, curl sends the initial response to the server
+in the first authentication packet in order to reduce the number of ping pong
+requests. Only applicable to the following supporting SASL authentication
+mechanisms:
* Login
* Plain
@@ -53,12 +53,16 @@ SASL-IR CAPABILITY.
IMAP, POP3 and SMTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "smtp://example.com/");
- curl_easy_setopt(curl, CURLOPT_SASL_IR, 1L);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "smtp://example.com/");
+ curl_easy_setopt(curl, CURLOPT_SASL_IR, 1L);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -66,4 +70,6 @@ Added in 7.31.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_MAIL_AUTH "(3), " CURLOPT_MAIL_FROM "(3), "
+.BR CURLOPT_MAIL_AUTH (3),
+.BR CURLOPT_MAIL_FROM (3),
+.BR CURLOPT_SASL_AUTHZID (3)
diff --git a/docs/libcurl/opts/CURLOPT_SEEKDATA.3 b/docs/libcurl/opts/CURLOPT_SEEKDATA.3
index ddcca1617..863fc0289 100644
--- a/docs/libcurl/opts/CURLOPT_SEEKDATA.3
+++ b/docs/libcurl/opts/CURLOPT_SEEKDATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SEEKDATA 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SEEKDATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SEEKDATA \- pointer passed to the seek callback
@@ -34,29 +34,41 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SEEKDATA, void *pointer);
.fi
.SH DESCRIPTION
Data \fIpointer\fP to pass to the seek callback function. If you use the
-\fICURLOPT_SEEKFUNCTION(3)\fP option, this is the pointer you will get as
-input.
+\fICURLOPT_SEEKFUNCTION(3)\fP option, this is the pointer you get as input.
.SH DEFAULT
If you do not set this, NULL is passed to the callback.
.SH PROTOCOLS
HTTP, FTP, SFTP
.SH EXAMPLE
.nf
-static int seek_cb(void *userp, curl_off_t offset, int origin)
+#include <unistd.h> /* for lseek() */
+
+struct data {
+ int our_fd;
+};
+
+static int seek_cb(void *clientp, curl_off_t offset, int origin)
{
- struct data *d = (struct data *)userp;
+ struct data *d = (struct data *)clientp;
lseek(d->our_fd, offset, origin);
return CURL_SEEKFUNC_OK;
}
+int main(void)
{
struct data seek_data;
- curl_easy_setopt(CURL *handle, CURLOPT_SEEKFUNCTION, seek_cb);
- curl_easy_setopt(CURL *handle, CURLOPT_SEEKDATA, &seek_data);
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_SEEKFUNCTION, seek_cb);
+ curl_easy_setopt(curl, CURLOPT_SEEKDATA, &seek_data);
+ }
}
.fi
.SH AVAILABILITY
Added in 7.18.0
.SH RETURN VALUE
.SH "SEE ALSO"
-.BR CURLOPT_STDERR "(3), " CURLOPT_DEBUGFUNCTION "(3), "
+.BR CURLOPT_DEBUGFUNCTION (3),
+.BR CURLOPT_IOCTLFUNCTION (3),
+.BR CURLOPT_SEEKFUNCTION (3),
+.BR CURLOPT_STDERR (3)
diff --git a/docs/libcurl/opts/CURLOPT_SEEKFUNCTION.3 b/docs/libcurl/opts/CURLOPT_SEEKFUNCTION.3
index fd6c6206b..c3fd8bb06 100644
--- a/docs/libcurl/opts/CURLOPT_SEEKFUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_SEEKFUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SEEKFUNCTION 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SEEKFUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SEEKFUNCTION \- user callback for seeking in input stream
@@ -36,7 +36,7 @@ CURLOPT_SEEKFUNCTION \- user callback for seeking in input stream
#define CURL_SEEKFUNC_CANTSEEK 2 /* tell libcurl seeking cannot be done, so
libcurl might try other means instead */
-int seek_callback(void *userp, curl_off_t offset, int origin);
+int seek_callback(void *clientp, curl_off_t offset, int origin);
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SEEKFUNCTION, seek_callback);
.SH DESCRIPTION
@@ -54,7 +54,7 @@ connection. The function shall work like fseek(3) or lseek(3) and it gets
SEEK_SET, SEEK_CUR or SEEK_END as argument for \fIorigin\fP, although libcurl
currently only passes SEEK_SET.
-\fIuserp\fP is the pointer you set with \fICURLOPT_SEEKDATA(3)\fP.
+\fIclientp\fP is the pointer you set with \fICURLOPT_SEEKDATA(3)\fP.
The callback function must return \fICURL_SEEKFUNC_OK\fP on success,
\fICURL_SEEKFUNC_FAIL\fP to cause the upload operation to fail or
@@ -71,17 +71,26 @@ By default, this is NULL and unused.
HTTP, FTP, SFTP
.SH EXAMPLE
.nf
-static int seek_cb(void *userp, curl_off_t offset, int origin)
+#include <unistd.h> /* for lseek */
+
+struct data {
+ int our_fd;
+};
+static int seek_cb(void *clientp, curl_off_t offset, int origin)
{
- struct data *d = (struct data *)userp;
- lseek(our_fd, offset, origin);
+ struct data *d = (struct data *)clientp;
+ lseek(d->our_fd, offset, origin);
return CURL_SEEKFUNC_OK;
}
+int main(void)
{
struct data seek_data;
- curl_easy_setopt(CURL *handle, CURLOPT_SEEKFUNCTION, seek_cb);
- curl_easy_setopt(CURL *handle, CURLOPT_SEEKDATA, &seek_data);
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_SEEKFUNCTION, seek_cb);
+ curl_easy_setopt(curl, CURLOPT_SEEKDATA, &seek_data);
+ }
}
.fi
.SH AVAILABILITY
@@ -89,4 +98,7 @@ Added in 7.18.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_SEEKDATA "(3), " CURLOPT_IOCTLFUNCTION "(3), "
+.BR CURLOPT_DEBUGFUNCTION (3),
+.BR CURLOPT_IOCTLFUNCTION (3),
+.BR CURLOPT_SEEKDATA (3),
+.BR CURLOPT_STDERR (3)
diff --git a/docs/libcurl/opts/CURLOPT_SERVER_RESPONSE_TIMEOUT.3 b/docs/libcurl/opts/CURLOPT_SERVER_RESPONSE_TIMEOUT.3
index 08e59c5cf..411adf83b 100644
--- a/docs/libcurl/opts/CURLOPT_SERVER_RESPONSE_TIMEOUT.3
+++ b/docs/libcurl/opts/CURLOPT_SERVER_RESPONSE_TIMEOUT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SERVER_RESPONSE_TIMEOUT 3 "July 04, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SERVER_RESPONSE_TIMEOUT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SERVER_RESPONSE_TIMEOUT \- time allowed to wait for server response
@@ -42,29 +42,37 @@ recommended that if used in conjunction with \fICURLOPT_TIMEOUT(3)\fP, you set
\fICURLOPT_SERVER_RESPONSE_TIMEOUT(3)\fP to a value smaller than
\fICURLOPT_TIMEOUT(3)\fP.
-This option was formerly known as \fBCURLOPT_FTP_RESPONSE_TIMEOUT\fP.
+This option was formerly known as CURLOPT_FTP_RESPONSE_TIMEOUT.
.SH DEFAULT
None
.SH PROTOCOLS
-FTP, IMAP, POP3 and SMTP
+FTP, IMAP, POP3, SMTP, and SSH
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/slow.txt");
- /* wait no more than 23 seconds */
- curl_easy_setopt(curl, CURLOPT_SERVER_RESPONSE_TIMEOUT, 23L);
- ret = curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/slow.txt");
+ /* wait no more than 23 seconds */
+ curl_easy_setopt(curl, CURLOPT_SERVER_RESPONSE_TIMEOUT, 23L);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
Added in 7.10.8. Used under this name since 7.20.0
+
+Support for SSH is predicated on a new enough (1.11.0) version of libssh2
+being available when compiling libcurl.
.SH RETURN VALUE
Returns CURLE_OK if supported, and CURLE_UNKNOWN_OPTION if not. Returns
CURLE_BAD_FUNCTION_ARGUMENT if set to a negative value or a value that when
converted to milliseconds is too large.
.SH "SEE ALSO"
-.BR CURLOPT_TIMEOUT "(3), " CURLOPT_CONNECTTIMEOUT "(3), "
-.BR CURLOPT_LOW_SPEED_LIMIT "(3), "
+.BR CURLOPT_CONNECTTIMEOUT (3),
+.BR CURLOPT_LOW_SPEED_LIMIT (3),
+.BR CURLOPT_TIMEOUT (3)
diff --git a/docs/libcurl/opts/CURLOPT_SERVICE_NAME.3 b/docs/libcurl/opts/CURLOPT_SERVICE_NAME.3
index 28481e4e4..5028929bf 100644
--- a/docs/libcurl/opts/CURLOPT_SERVICE_NAME.3
+++ b/docs/libcurl/opts/CURLOPT_SERVICE_NAME.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SERVICE_NAME 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SERVICE_NAME 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SERVICE_NAME \- authentication service name
@@ -46,12 +46,15 @@ See above
HTTP, FTP, IMAP, LDAP, POP3 and SMTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- CURLcode ret;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_SERVICE_NAME, "custom");
- ret = curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode ret;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_SERVICE_NAME, "custom");
+ ret = curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -61,4 +64,6 @@ Added in 7.43.0 for HTTP, 7.49.0 for FTP, IMAP, POP3 and SMTP,
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY "(3), " CURLOPT_PROXYTYPE "(3), "
+.BR CURLOPT_PROXY (3),
+.BR CURLOPT_PROXY_SERVICE_NAME (3),
+.BR CURLOPT_PROXYTYPE (3)
diff --git a/docs/libcurl/opts/CURLOPT_SHARE.3 b/docs/libcurl/opts/CURLOPT_SHARE.3
index 6519a5c89..799171bda 100644
--- a/docs/libcurl/opts/CURLOPT_SHARE.3
+++ b/docs/libcurl/opts/CURLOPT_SHARE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SHARE 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SHARE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SHARE \- share handle to use
@@ -35,19 +35,19 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SHARE, CURLSH *share);
.SH DESCRIPTION
Pass a \fIshare\fP handle as a parameter. The share handle must have been
created by a previous call to \fIcurl_share_init(3)\fP. Setting this option,
-will make this curl handle use the data from the shared handle instead of
-keeping the data to itself. This enables several curl handles to share
-data. If the curl handles are used simultaneously in multiple threads, you
-\fBMUST\fP use the locking methods in the share handle. See
-\fIcurl_share_setopt(3)\fP for details.
+makes this curl handle use the data from the shared handle instead of keeping
+the data to itself. This enables several curl handles to share data. If the
+curl handles are used simultaneously in multiple threads, you \fBMUST\fP use
+the locking methods in the share handle. See \fIcurl_share_setopt(3)\fP for
+details.
-If you add a share that is set to share cookies, your easy handle will use
-that cookie cache and get the cookie engine enabled. If you stop sharing an
-object that was using cookies (or change to another object that does not share
-cookies), the easy handle will get its cookie engine disabled.
+If you add a share that is set to share cookies, your easy handle uses that
+cookie cache and get the cookie engine enabled. If you stop sharing an object
+that was using cookies (or change to another object that does not share
+cookies), the easy handle gets its cookie engine disabled.
-Data that the share object is not set to share will be dealt with the usual
-way, as if no share was used.
+Data that the share object is not set to share is dealt with the usual way, as
+if no share was used.
Set this option to NULL again to stop using that share object.
.SH DEFAULT
@@ -56,26 +56,30 @@ NULL
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-CURL *curl2 = curl_easy_init(); /* a second handle */
-if(curl) {
- CURLSH *shobject = curl_share_init();
- curl_share_setopt(shobject, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ CURL *curl2 = curl_easy_init(); /* a second handle */
+ if(curl) {
+ CURLcode res;
+ CURLSH *shobject = curl_share_init();
+ curl_share_setopt(shobject, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "");
- curl_easy_setopt(curl, CURLOPT_SHARE, shobject);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "");
+ curl_easy_setopt(curl, CURLOPT_SHARE, shobject);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
- /* the second handle shares cookies from the first */
- curl_easy_setopt(curl2, CURLOPT_URL, "https://example.com/second");
- curl_easy_setopt(curl2, CURLOPT_COOKIEFILE, "");
- curl_easy_setopt(curl2, CURLOPT_SHARE, shobject);
- ret = curl_easy_perform(curl2);
- curl_easy_cleanup(curl2);
+ /* the second handle shares cookies from the first */
+ curl_easy_setopt(curl2, CURLOPT_URL, "https://example.com/second");
+ curl_easy_setopt(curl2, CURLOPT_COOKIEFILE, "");
+ curl_easy_setopt(curl2, CURLOPT_SHARE, shobject);
+ res = curl_easy_perform(curl2);
+ curl_easy_cleanup(curl2);
- curl_share_cleanup(shobject);
+ curl_share_cleanup(shobject);
+ }
}
.fi
.SH AVAILABILITY
@@ -83,4 +87,5 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_COOKIE "(3), "
+.BR CURLOPT_COOKIE (3),
+.BR CURLSHOPT_SHARE (3)
diff --git a/docs/libcurl/opts/CURLOPT_SOCKOPTDATA.3 b/docs/libcurl/opts/CURLOPT_SOCKOPTDATA.3
index 16bfbcbfc..e25f4691e 100644
--- a/docs/libcurl/opts/CURLOPT_SOCKOPTDATA.3
+++ b/docs/libcurl/opts/CURLOPT_SOCKOPTDATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SOCKOPTDATA 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SOCKOPTDATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SOCKOPTDATA \- pointer to pass to sockopt callback
@@ -33,7 +33,7 @@ CURLOPT_SOCKOPTDATA \- pointer to pass to sockopt callback
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKOPTDATA, void *pointer);
.fi
.SH DESCRIPTION
-Pass a \fIpointer\fP that will be untouched by libcurl and passed as the first
+Pass a \fIpointer\fP that is untouched by libcurl and passed as the first
argument in the sockopt callback set with \fICURLOPT_SOCKOPTFUNCTION(3)\fP.
.SH DEFAULT
The default value of this parameter is NULL.
@@ -45,23 +45,28 @@ static int sockopt_callback(void *clientp, curl_socket_t curlfd,
curlsocktype purpose)
{
int val = *(int *)clientp;
- setsockopt(curldfd, SOL_SOCKET, SO_RCVBUF, (const char *)&val, sizeof(val));
+ setsockopt((int)curlfd, SOL_SOCKET, SO_RCVBUF,
+ (const char *)&val, sizeof(val));
return CURL_SOCKOPT_OK;
}
-curl = curl_easy_init();
-if(curl) {
- int recvbuffersize = 256 * 1024;
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ int recvbuffersize = 256 * 1024;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- /* call this function to set options for the socket */
- curl_easy_setopt(curl, CURLOPT_SOCKOPTFUNCTION, sockopt_callback);
- curl_easy_setopt(curl, CURLOPT_SOCKOPTDATA, &recvbuffersize);
+ /* call this function to set options for the socket */
+ curl_easy_setopt(curl, CURLOPT_SOCKOPTFUNCTION, sockopt_callback);
+ curl_easy_setopt(curl, CURLOPT_SOCKOPTDATA, &recvbuffersize);
- res = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -69,4 +74,5 @@ Added in 7.16.0
.SH RETURN VALUE
Returns \fICURLE_OK\fP if the option is supported, and \fICURLE_UNKNOWN_OPTION\fP if not.
.SH "SEE ALSO"
-.BR CURLOPT_SOCKOPTFUNCTION "(3), " CURLOPT_OPENSOCKETFUNCTION "(3), "
+.BR CURLOPT_OPENSOCKETFUNCTION (3),
+.BR CURLOPT_SOCKOPTFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.3 b/docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.3
index 078361317..083e44e18 100644
--- a/docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SOCKOPTFUNCTION 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SOCKOPTFUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SOCKOPTFUNCTION \- callback for setting socket options
@@ -68,12 +68,11 @@ The \fIclientp\fP pointer contains whatever user-defined value set using the
Return \fICURL_SOCKOPT_OK\fP from the callback on success. Return
\fICURL_SOCKOPT_ERROR\fP from the callback function to signal an unrecoverable
-error to the library and it will close the socket and return
-\fICURLE_COULDNT_CONNECT\fP.
-Alternatively, the callback function can return
+error to the library and it closes the socket and returns
+\fICURLE_COULDNT_CONNECT\fP. Alternatively, the callback function can return
\fICURL_SOCKOPT_ALREADY_CONNECTED\fP, to tell libcurl that the socket is
-already connected and then libcurl will not attempt to connect it. This allows
-an application to pass in an already connected socket with
+already connected and then libcurl does no attempt to connect. This allows an
+application to pass in an already connected socket with
\fICURLOPT_OPENSOCKETFUNCTION(3)\fP and then have this function make libcurl
not attempt to connect (again).
.SH DEFAULT
@@ -102,21 +101,27 @@ static int sockopt_callback(void *clientp, curl_socket_t curlfd,
return CURL_SOCKOPT_ALREADY_CONNECTED;
}
-curl = curl_easy_init();
-if(curl) {
- /* libcurl will internally think that you connect to the host
- * and port that you specify in the URL option. */
- curl_easy_setopt(curl, CURLOPT_URL, "http://99.99.99.99:9999");
- /* call this function to get a socket */
- curl_easy_setopt(curl, CURLOPT_OPENSOCKETFUNCTION, opensocket);
- curl_easy_setopt(curl, CURLOPT_OPENSOCKETDATA, &sockfd);
-
- /* call this function to set options for the socket */
- curl_easy_setopt(curl, CURLOPT_SOCKOPTFUNCTION, sockopt_callback);
-
- res = curl_easy_perform(curl);
-
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ int sockfd; /* our custom file descriptor */
+ /* libcurl thinks that you connect to the host
+ * and port that you specify in the URL option. */
+ curl_easy_setopt(curl, CURLOPT_URL, "http://99.99.99.99:9999");
+ /* call this function to get a socket */
+ curl_easy_setopt(curl, CURLOPT_OPENSOCKETFUNCTION, opensocket);
+ curl_easy_setopt(curl, CURLOPT_OPENSOCKETDATA, &sockfd);
+
+ /* call this function to set options for the socket */
+ curl_easy_setopt(curl, CURLOPT_SOCKOPTFUNCTION, sockopt_callback);
+
+ res = curl_easy_perform(curl);
+
+ curl_easy_cleanup(curl);
+ }
+}
.fi
.SH AVAILABILITY
Added in 7.16.0. The \fICURL_SOCKOPT_ALREADY_CONNECTED\fP return code was
@@ -124,4 +129,6 @@ added in 7.21.5.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_SOCKOPTDATA "(3), " CURLOPT_OPENSOCKETFUNCTION "(3), "
+.BR CURLOPT_OPENSOCKETFUNCTION (3),
+.BR CURLOPT_SEEKFUNCTION (3),
+.BR CURLOPT_SOCKOPTDATA (3)
diff --git a/docs/libcurl/opts/CURLOPT_SOCKS5_AUTH.3 b/docs/libcurl/opts/CURLOPT_SOCKS5_AUTH.3
index 3c1c7e7c0..afd74c881 100644
--- a/docs/libcurl/opts/CURLOPT_SOCKS5_AUTH.3
+++ b/docs/libcurl/opts/CURLOPT_SOCKS5_AUTH.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SOCKS5_AUTH 3 "October 22, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SOCKS5_AUTH 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SOCKS5_AUTH \- methods for SOCKS5 proxy authentication
@@ -45,18 +45,21 @@ CURLAUTH_BASIC|CURLAUTH_GSSAPI
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* request to use a SOCKS5 proxy */
- curl_easy_setopt(curl, CURLOPT_PROXY, "socks5://user:pass@myproxy.com");
+ /* request to use a SOCKS5 proxy */
+ curl_easy_setopt(curl, CURLOPT_PROXY, "socks5://user:pass@myproxy.com");
- /* enable username/password authentication only */
- curl_easy_setopt(curl, CURLOPT_SOCKS5_AUTH, (long)CURLAUTH_BASIC);
+ /* enable username/password authentication only */
+ curl_easy_setopt(curl, CURLOPT_SOCKS5_AUTH, (long)CURLAUTH_BASIC);
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -65,4 +68,5 @@ Added in 7.55.0
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_NOT_BUILT_IN if the bitmask contains unsupported flags.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY "(3), " CURLOPT_PROXYTYPE "(3)"
+.BR CURLOPT_PROXY (3),
+.BR CURLOPT_PROXYTYPE (3)
diff --git a/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.3 b/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.3
index 7b36fa806..2b530a0e5 100644
--- a/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.3
+++ b/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SOCKS5_GSSAPI_NEC 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SOCKS5_GSSAPI_NEC 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SOCKS5_GSSAPI_NEC \- SOCKS proxy GSSAPI negotiation protection
@@ -34,7 +34,7 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKS5_GSSAPI_NEC, long nec);
.fi
.SH DESCRIPTION
Pass a long set to 1 to enable or 0 to disable. As part of the GSSAPI
-negotiation a protection mode is negotiated. The RFC1961 says in section
+negotiation a protection mode is negotiated. The RFC 1961 says in section
4.3/4.4 it should be protected, but the NEC reference implementation does not.
If enabled, this option allows the unprotected exchange of the protection mode
negotiation.
@@ -44,13 +44,17 @@ negotiation.
Most
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_PROXY, "socks5://proxy");
- curl_easy_setopt(curl, CURLOPT_SOCKS5_GSSAPI_NEC, 1L);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "socks5://proxy");
+ curl_easy_setopt(curl, CURLOPT_SOCKS5_GSSAPI_NEC, 1L);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -58,4 +62,7 @@ Added in 7.19.4
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_SOCKS5_GSSAPI_SERVICE "(3), " CURLOPT_PROXY "(3), "
+.BR CURLOPT_SOCKS5_GSSAPI_SERVICE (3),
+.BR CURLOPT_PROXY (3)
+
+
diff --git a/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.3 b/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.3
index ff751f747..a0b4092b8 100644
--- a/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.3
+++ b/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SOCKS5_GSSAPI_SERVICE 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SOCKS5_GSSAPI_SERVICE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SOCKS5_GSSAPI_SERVICE \- SOCKS5 proxy authentication service name
@@ -48,13 +48,17 @@ See above
All network protocols
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_PROXY, "socks5://proxy");
- curl_easy_setopt(curl, CURLOPT_SOCKS5_GSSAPI_SERVICE, "rcmd-special");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_PROXY, "socks5://proxy");
+ curl_easy_setopt(curl, CURLOPT_SOCKS5_GSSAPI_SERVICE, "rcmd-special");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -63,4 +67,5 @@ Added in 7.19.4, deprecated in 7.49.0
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_PROXY "(3), " CURLOPT_PROXYTYPE "(3), "
+.BR CURLOPT_PROXY (3),
+.BR CURLOPT_PROXYTYPE (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.3 b/docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.3
index 4484e6112..47a69b3bc 100644
--- a/docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.3
+++ b/docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSH_AUTH_TYPES 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSH_AUTH_TYPES 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSH_AUTH_TYPES \- auth types for SFTP and SCP
@@ -47,13 +47,17 @@ CURLSSH_AUTH_ANY (all available)
SFTP and SCP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/file");
- curl_easy_setopt(curl, CURLOPT_SSH_AUTH_TYPES,
- CURLSSH_AUTH_PUBLICKEY | CURLSSH_AUTH_KEYBOARD);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/file");
+ curl_easy_setopt(curl, CURLOPT_SSH_AUTH_TYPES,
+ CURLSSH_AUTH_PUBLICKEY | CURLSSH_AUTH_KEYBOARD);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -61,4 +65,6 @@ CURLSSH_AUTH_HOST was added in 7.16.1, CURLSSH_AUTH_AGENT was added in 7.28.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 "(3), " CURLOPT_SSH_PUBLIC_KEYFILE "(3), "
+.BR CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 (3),
+.BR CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 (3),
+.BR CURLOPT_SSH_PUBLIC_KEYFILE (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSH_COMPRESSION.3 b/docs/libcurl/opts/CURLOPT_SSH_COMPRESSION.3
index 713f8b68f..601932c4e 100644
--- a/docs/libcurl/opts/CURLOPT_SSH_COMPRESSION.3
+++ b/docs/libcurl/opts/CURLOPT_SSH_COMPRESSION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSH_COMPRESSION 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSH_COMPRESSION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSH_COMPRESSION \- enable SSH compression
@@ -43,15 +43,18 @@ may or may not do it.
All SSH based protocols: SCP, SFTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com");
- /* enable built-in compression */
- curl_easy_setopt(curl, CURLOPT_SSH_COMPRESSION, 1L);
+ /* enable built-in compression */
+ curl_easy_setopt(curl, CURLOPT_SSH_COMPRESSION, 1L);
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -60,4 +63,5 @@ Added in 7.56.0
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_ACCEPT_ENCODING "(3), " CURLOPT_TRANSFER_ENCODING "(3), "
+.BR CURLOPT_ACCEPT_ENCODING (3),
+.BR CURLOPT_TRANSFER_ENCODING (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSH_HOSTKEYDATA.3 b/docs/libcurl/opts/CURLOPT_SSH_HOSTKEYDATA.3
index aeecef846..7c21aba70 100644
--- a/docs/libcurl/opts/CURLOPT_SSH_HOSTKEYDATA.3
+++ b/docs/libcurl/opts/CURLOPT_SSH_HOSTKEYDATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSH_KEYDATA 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSH_KEYDATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSH_HOSTKEYDATA \- pointer to pass to the SSH host key callback
@@ -33,29 +33,39 @@ CURLOPT_SSH_HOSTKEYDATA \- pointer to pass to the SSH host key callback
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_HOSTKEYDATA, void *pointer);
.fi
.SH DESCRIPTION
-Pass a void * as parameter. This \fIpointer\fP will be passed along verbatim
-to the callback set with \fICURLOPT_SSH_HOSTKEYFUNCTION(3)\fP.
+Pass a void * as parameter. This \fIpointer\fP is passed along untouched to
+the callback set with \fICURLOPT_SSH_HOSTKEYFUNCTION(3)\fP.
.SH DEFAULT
NULL
.SH PROTOCOLS
SCP and SFTP
.SH EXAMPLE
.nf
-int hostkeycb(void *clientp, /* passed with CURLOPT_SSH_HOSTKEYDATA */
- int keytype, /* CURLKHTYPE */
- const char * key, /* host key to check */
- size_t keylen); /* length of the key */
+struct mine {
+ void *custom;
+};
+
+static int hostkeycb(void *clientp, /* CURLOPT_SSH_HOSTKEYDATA */
+ int keytype, /* CURLKHTYPE */
+ const char *key, /* host key to check */
+ size_t keylen) /* length of the key */
{
/* 'clientp' points to the callback_data struct */
/* investigate the situation and return the correct value */
return CURLKHMATCH_OK;
}
+
+int main(void)
{
- curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/thisfile.txt");
- curl_easy_setopt(curl, CURLOPT_SSH_HOSTKEYFUNCTION, hostkeycb);
- curl_easy_setopt(curl, CURLOPT_SSH_HOSTKEYDATA, &callback_data);
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ struct mine callback_data;
+ curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/thisfile.txt");
+ curl_easy_setopt(curl, CURLOPT_SSH_HOSTKEYFUNCTION, hostkeycb);
+ curl_easy_setopt(curl, CURLOPT_SSH_HOSTKEYDATA, &callback_data);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -63,4 +73,4 @@ Added in 7.84.0, works only with libssh2 backend.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_SSH_HOSTKEYFUNCTION "(3), "
+.BR CURLOPT_SSH_HOSTKEYFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSH_HOSTKEYFUNCTION.3 b/docs/libcurl/opts/CURLOPT_SSH_HOSTKEYFUNCTION.3
index 9b996e709..47fad3ce4 100644
--- a/docs/libcurl/opts/CURLOPT_SSH_HOSTKEYFUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_SSH_HOSTKEYFUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSH_HOSTKEYFUNCTION 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSH_HOSTKEYFUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSH_HOSTKEYFUNCTION \- callback to check host key
@@ -62,21 +62,30 @@ NULL
SCP and SFTP
.SH EXAMPLE
.nf
+struct mine {
+ void *custom;
+};
+
int hostkeycb(void *clientp, /* passed with CURLOPT_SSH_HOSTKEYDATA */
int keytype, /* CURLKHTYPE */
- const char * key, /* host key to check */
- size_t keylen); /* length of the key */
+ const char *key, /* host key to check */
+ size_t keylen) /* length of the key */
{
/* 'clientp' points to the callback_data struct */
/* investigate the situation and return the correct value */
return CURLKHMATCH_OK;
}
+int main(void)
{
- curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/thisfile.txt");
- curl_easy_setopt(curl, CURLOPT_SSH_HOSTKEYFUNCTION, hostkeycb);
- curl_easy_setopt(curl, CURLOPT_SSH_HOSTKEYDATA, &callback_data);
+ struct mine callback_data;
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/thisfile.txt");
+ curl_easy_setopt(curl, CURLOPT_SSH_HOSTKEYFUNCTION, hostkeycb);
+ curl_easy_setopt(curl, CURLOPT_SSH_HOSTKEYDATA, &callback_data);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -84,5 +93,5 @@ Added in 7.84.0 , work only with libssh2 backend.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_SSH_HOSTKEYDATA "(3), "
-.BR CURLOPT_SSH_KNOWNHOSTS "(3), "
+.BR CURLOPT_SSH_HOSTKEYDATA (3),
+.BR CURLOPT_SSH_KNOWNHOSTS (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3 b/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3
index 7a0fd541e..a417af300 100644
--- a/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3
+++ b/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 \- MD5 checksum of SSH server public key
@@ -35,7 +35,10 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_HOST_PUBLIC_KEY_MD5,
.SH DESCRIPTION
Pass a char * pointing to a string containing 32 hexadecimal digits. The
string should be the 128 bit MD5 checksum of the remote host's public key, and
-libcurl will reject the connection to the host unless the MD5 checksum match.
+libcurl aborts the connection to the host unless the MD5 checksum match.
+
+MD5 is a weak algorithm. We strongly recommend using
+\fICURLOPT_SSH_HOST_PUBLIC_KEY_SHA256(3)\fP instead.
The application does not have to keep the string around after setting this
option.
@@ -45,13 +48,17 @@ NULL
SCP and SFTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/file");
- curl_easy_setopt(curl, CURLOPT_SSH_HOST_PUBLIC_KEY_MD5,
- "afe17cd62a0f3b61f1ab9cb22ba269a7");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/file");
+ curl_easy_setopt(curl, CURLOPT_SSH_HOST_PUBLIC_KEY_MD5,
+ "afe17cd62a0f3b61f1ab9cb22ba269a7");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -60,5 +67,7 @@ Added in 7.17.1
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_SSH_PUBLIC_KEYFILE "(3), " CURLOPT_SSH_AUTH_TYPES "(3), "
-.BR CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 "(3), "
+.BR CURLOPT_SSH_AUTH_TYPES (3),
+.BR CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 (3),
+.BR CURLOPT_SSH_PUBLIC_KEYFILE (3),
+.BR CURLOPT_SSH_KNOWNHOSTS (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256.3 b/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256.3
index 62b45b854..e2c45b2e0 100644
--- a/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256.3
+++ b/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 \- SHA256 hash of SSH server public key
@@ -33,10 +33,9 @@ CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 \- SHA256 hash of SSH server public key
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256,
char *sha256);
.SH DESCRIPTION
-Pass a char * pointing to a string containing a Base64-encoded SHA256
-hash of the remote host's public key.
-The transfer will fail if the given hash does not match the hash the
-remote host provides.
+Pass a char * pointing to a string containing a Base64-encoded SHA256 hash of
+the remote host's public key. The transfer fails if the given hash does not
+match the hash the remote host provides.
.SH DEFAULT
NULL
@@ -44,13 +43,17 @@ NULL
SCP and SFTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/file");
- curl_easy_setopt(curl, CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256,
- "NDVkMTQxMGQ1ODdmMjQ3MjczYjAyOTY5MmRkMjVmNDQ=");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/file");
+ curl_easy_setopt(curl, CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256,
+ "NDVkMTQxMGQ1ODdmMjQ3MjczYjAyOTY5MmRkMjVmNDQ=");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -60,4 +63,6 @@ Requires the libssh2 backend.
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_SSH_PUBLIC_KEYFILE "(3), " CURLOPT_SSH_AUTH_TYPES "(3), "
+.BR CURLOPT_SSH_AUTH_TYPES (3),
+.BR CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 (3),
+.BR CURLOPT_SSH_PUBLIC_KEYFILE (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSH_KEYDATA.3 b/docs/libcurl/opts/CURLOPT_SSH_KEYDATA.3
index 591850226..6aba1ab40 100644
--- a/docs/libcurl/opts/CURLOPT_SSH_KEYDATA.3
+++ b/docs/libcurl/opts/CURLOPT_SSH_KEYDATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSH_KEYDATA 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSH_KEYDATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSH_KEYDATA \- pointer passed to the SSH key callback
@@ -33,31 +33,40 @@ CURLOPT_SSH_KEYDATA \- pointer passed to the SSH key callback
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_KEYDATA, void *pointer);
.fi
.SH DESCRIPTION
-Pass a void * as parameter. This \fIpointer\fP will be passed along verbatim
-to the callback set with \fICURLOPT_SSH_KEYFUNCTION(3)\fP.
+Pass a void * as parameter. This \fIpointer\fP is passed along verbatim to the
+callback set with \fICURLOPT_SSH_KEYFUNCTION(3)\fP.
.SH DEFAULT
NULL
.SH PROTOCOLS
SFTP and SCP
.SH EXAMPLE
.nf
+struct mine {
+ void *custom;
+};
static int keycb(CURL *easy,
const struct curl_khkey *knownkey,
const struct curl_khkey *foundkey,
- enum curl_khmatch,
+ enum curl_khmatch match,
void *clientp)
{
/* 'clientp' points to the callback_data struct */
/* investigate the situation and return the correct value */
return CURLKHSTAT_FINE_ADD_TO_FILE;
}
+
+int main(void)
{
- curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/thisfile.txt");
- curl_easy_setopt(curl, CURLOPT_SSH_KEYFUNCTION, keycb);
- curl_easy_setopt(curl, CURLOPT_SSH_KEYDATA, &callback_data);
- curl_easy_setopt(curl, CURLOPT_SSH_KNOWNHOSTS, "/home/user/known_hosts");
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ struct mine callback_data;
+ curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/thisfile.txt");
+ curl_easy_setopt(curl, CURLOPT_SSH_KEYFUNCTION, keycb);
+ curl_easy_setopt(curl, CURLOPT_SSH_KEYDATA, &callback_data);
+ curl_easy_setopt(curl, CURLOPT_SSH_KNOWNHOSTS, "/home/user/known_hosts");
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -65,4 +74,5 @@ Added in 7.19.6
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_SSH_KEYDATA "(3), " CURLOPT_SSH_KNOWNHOSTS "(3), "
+.BR CURLOPT_SSH_KEYDATA (3),
+.BR CURLOPT_SSH_KNOWNHOSTS (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.3 b/docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.3
index ca2801686..bb99d5a1b 100644
--- a/docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSH_KEYFUNCTION 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSH_KEYFUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSH_KEYFUNCTION \- callback for known host matching logic
@@ -36,7 +36,7 @@ enum curl_khstat {
CURLKHSTAT_REJECT, /* reject the connection, return an error */
CURLKHSTAT_DEFER, /* do not accept it, but we cannot answer right
now. Causes a CURLE_PEER_FAILED_VERIFICATION error but
- the connection will be left intact */
+ the connection is left intact */
CURLKHSTAT_FINE_REPLACE
};
@@ -57,7 +57,7 @@ struct curl_khkey {
int ssh_keycallback(CURL *easy,
const struct curl_khkey *knownkey,
const struct curl_khkey *foundkey,
- enum curl_khmatch,
+ enum curl_khmatch match,
void *clientp);
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_KEYFUNCTION,
@@ -67,8 +67,8 @@ Pass a pointer to your callback function, which should match the prototype
shown above.
It gets called when the known_host matching has been done, to allow the
-application to act and decide for libcurl how to proceed. The callback will
-only be called if \fICURLOPT_SSH_KNOWNHOSTS(3)\fP is also set.
+application to act and decide for libcurl how to proceed. The callback is only
+called if \fICURLOPT_SSH_KNOWNHOSTS(3)\fP is also set.
This callback function gets passed the CURL handle, the key from the
known_hosts file \fIknownkey\fP, the key from the remote site \fIfoundkey\fP,
@@ -76,25 +76,25 @@ info from libcurl on the matching status and a custom pointer (set with
\fICURLOPT_SSH_KEYDATA(3)\fP). It MUST return one of the following return
codes to tell libcurl how to act:
.IP CURLKHSTAT_FINE_REPLACE
-The new host+key is accepted and libcurl will replace the old host+key into
-the known_hosts file before continuing with the connection. This will also
-add the new host+key combo to the known_host pool kept in memory if it was not
-already present there. The adding of data to the file is done by completely
-replacing the file with a new copy, so the permissions of the file must allow
+The new host+key is accepted and libcurl replaces the old host+key into the
+known_hosts file before continuing with the connection. This also adds the new
+host+key combo to the known_host pool kept in memory if it was not already
+present there. The adding of data to the file is done by completely replacing
+the file with a new copy, so the permissions of the file must allow
this. (Added in 7.73.0)
.IP CURLKHSTAT_FINE_ADD_TO_FILE
-The host+key is accepted and libcurl will append it to the known_hosts file
-before continuing with the connection. This will also add the host+key combo
-to the known_host pool kept in memory if it was not already present there. The
-adding of data to the file is done by completely replacing the file with a new
-copy, so the permissions of the file must allow this.
+The host+key is accepted and libcurl appends it to the known_hosts file before
+continuing with the connection. This also adds the host+key combo to the
+known_host pool kept in memory if it was not already present there. The adding
+of data to the file is done by completely replacing the file with a new copy,
+so the permissions of the file must allow this.
.IP CURLKHSTAT_FINE
-The host+key is accepted libcurl will continue with the connection. This will
-also add the host+key combo to the known_host pool kept in memory if it was not
-already present there.
+The host+key is accepted libcurl continues with the connection. This also adds
+the host+key combo to the known_host pool kept in memory if it was not already
+present there.
.IP CURLKHSTAT_REJECT
-The host+key is rejected. libcurl will deny the connection to continue and it
-will be closed.
+The host+key is rejected. libcurl denies the connection to continue and it is
+closed.
.IP CURLKHSTAT_DEFER
The host+key is rejected, but the SSH connection is asked to be kept alive.
This feature could be used when the app wants to somehow return back and act
@@ -106,23 +106,33 @@ NULL
SFTP and SCP
.SH EXAMPLE
.nf
+struct mine {
+ void *custom;
+};
+
static int keycb(CURL *easy,
const struct curl_khkey *knownkey,
const struct curl_khkey *foundkey,
- enum curl_khmatch,
+ enum curl_khmatch match,
void *clientp)
{
/* 'clientp' points to the callback_data struct */
/* investigate the situation and return the correct value */
return CURLKHSTAT_FINE_ADD_TO_FILE;
}
+
+int main(void)
{
- curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/thisfile.txt");
- curl_easy_setopt(curl, CURLOPT_SSH_KEYFUNCTION, keycb);
- curl_easy_setopt(curl, CURLOPT_SSH_KEYDATA, &callback_data);
- curl_easy_setopt(curl, CURLOPT_SSH_KNOWNHOSTS, "/home/user/known_hosts");
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ struct mine callback_data;
+ curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/thisfile.txt");
+ curl_easy_setopt(curl, CURLOPT_SSH_KEYFUNCTION, keycb);
+ curl_easy_setopt(curl, CURLOPT_SSH_KEYDATA, &callback_data);
+ curl_easy_setopt(curl, CURLOPT_SSH_KNOWNHOSTS, "/home/user/known_hosts");
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+}
}
.fi
.SH AVAILABILITY
@@ -130,4 +140,5 @@ Added in 7.19.6
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_SSH_KEYDATA "(3), " CURLOPT_SSH_KNOWNHOSTS "(3), "
+.BR CURLOPT_SSH_KEYDATA (3),
+.BR CURLOPT_SSH_KNOWNHOSTS (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.3 b/docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.3
index 3df7f95c0..6875384f3 100644
--- a/docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.3
+++ b/docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSH_KNOWNHOSTS 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSH_KNOWNHOSTS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSH_KNOWNHOSTS \- file name holding the SSH known hosts
@@ -35,8 +35,8 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_KNOWNHOSTS, char *fname);
.SH DESCRIPTION
Pass a pointer to a null-terminated string holding the file name of the
known_host file to use. The known_hosts file should use the OpenSSH file
-format as supported by libssh2. If this file is specified, libcurl will only
-accept connections with hosts that are known and present in that file, with a
+format as supported by libssh2. If this file is specified, libcurl only
+accepts connections with hosts that are known and present in that file, with a
matching public key. Use \fICURLOPT_SSH_KEYFUNCTION(3)\fP to alter the default
behavior on host and key matches and mismatches.
@@ -48,13 +48,17 @@ NULL
SFTP and SCP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/file");
- curl_easy_setopt(curl, CURLOPT_SSH_KNOWNHOSTS,
- "/home/clarkkent/.ssh/known_hosts");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/file");
+ curl_easy_setopt(curl, CURLOPT_SSH_KNOWNHOSTS,
+ "/home/clarkkent/.ssh/known_hosts");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -63,4 +67,5 @@ Added in 7.19.6
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_SSH_AUTH_TYPES "(3), " CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 "(3), "
+.BR CURLOPT_SSH_AUTH_TYPES (3),
+.BR CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.3 b/docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.3
index e13a83a11..78d60fc66 100644
--- a/docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.3
+++ b/docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSH_PRIVATE_KEYFILE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSH_PRIVATE_KEYFILE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSH_PRIVATE_KEYFILE \- private key file for SSH auth
@@ -34,8 +34,9 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_PRIVATE_KEYFILE,
char *filename);
.SH DESCRIPTION
Pass a char * pointing to a \fIfilename\fP for your private key. If not used,
-libcurl defaults to \fB$HOME/.ssh/id_dsa\fP if the HOME environment variable
-is set, and just "id_dsa" in the current directory if HOME is not set.
+libcurl defaults to \fB$HOME/.ssh/id_rsa\fP or \fB$HOME/.ssh/id_dsa\fP if the
+HOME environment variable is set, and just \fB"id_rsa"\fP or \fB"id_dsa"\fP in
+the current directory if HOME is not set.
If the file is password-protected, set the password with
\fICURLOPT_KEYPASSWD(3)\fP.
@@ -48,14 +49,18 @@ As explained above
SFTP and SCP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/file");
- curl_easy_setopt(curl, CURLOPT_SSH_PRIVATE_KEYFILE,
- "/home/clarkkent/.ssh/id_rsa");
- curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "password");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/file");
+ curl_easy_setopt(curl, CURLOPT_SSH_PRIVATE_KEYFILE,
+ "/home/clarkkent/.ssh/id_rsa");
+ curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "password");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -64,4 +69,5 @@ Added in 7.16.1
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_SSH_PUBLIC_KEYFILE "(3), " CURLOPT_SSH_AUTH_TYPES "(3), "
+.BR CURLOPT_SSH_PUBLIC_KEYFILE (3),
+.BR CURLOPT_SSH_AUTH_TYPES (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.3 b/docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.3
index c77b2ac81..6b8adf6b2 100644
--- a/docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.3
+++ b/docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSH_PUBLIC_KEYFILE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSH_PUBLIC_KEYFILE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSH_PUBLIC_KEYFILE \- public key file for SSH auth
@@ -38,9 +38,9 @@ libcurl defaults to \fB$HOME/.ssh/id_dsa.pub\fP if the HOME environment
variable is set, and just "id_dsa.pub" in the current directory if HOME is not
set.
-If NULL (or an empty string) is passed, libcurl will pass no public key to
-libssh2, which then tries to compute it from the private key. This is known
-to work with libssh2 1.4.0+ linked against OpenSSL.
+If NULL (or an empty string) is passed, libcurl passes no public key to
+libssh2, which then computes it from the private key. This is known to work
+with libssh2 1.4.0+ linked against OpenSSL.
The application does not have to keep the string around after setting this
option.
@@ -50,13 +50,17 @@ NULL
SFTP and SCP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/file");
- curl_easy_setopt(curl, CURLOPT_SSH_PUBLIC_KEYFILE,
- "/home/clarkkent/.ssh/id_rsa.pub");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/file");
+ curl_easy_setopt(curl, CURLOPT_SSH_PUBLIC_KEYFILE,
+ "/home/clarkkent/.ssh/id_rsa.pub");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -65,4 +69,5 @@ The "" trick was added in 7.26.0
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_SSH_PRIVATE_KEYFILE "(3), " CURLOPT_SSH_AUTH_TYPES "(3), "
+.BR CURLOPT_SSH_PRIVATE_KEYFILE (3),
+.BR CURLOPT_SSH_AUTH_TYPES (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSLCERT.3 b/docs/libcurl/opts/CURLOPT_SSLCERT.3
index 1ee436575..d95e5acb1 100644
--- a/docs/libcurl/opts/CURLOPT_SSLCERT.3
+++ b/docs/libcurl/opts/CURLOPT_SSLCERT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSLCERT 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSLCERT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSLCERT \- SSL client certificate
@@ -38,10 +38,10 @@ the file name of your client certificate. The default format is "P12" on
Secure Transport and "PEM" on other engines, and can be changed with
\fICURLOPT_SSLCERTTYPE(3)\fP.
-With NSS or Secure Transport, this can also be the nickname of the certificate
-you wish to authenticate with as it is named in the security database. If you
-want to use a file from the current directory, please precede it with "./"
-prefix, in order to avoid confusion with a nickname.
+With Secure Transport, this can also be the nickname of the certificate you
+wish to authenticate with as it is named in the security database. If you want
+to use a file from the current directory, please precede it with "./" prefix,
+in order to avoid confusion with a nickname.
(Schannel only) Client certificates can be specified by a path expression to a
certificate store. (You can import \fIPFX\fP to a store first). You can use
@@ -66,14 +66,18 @@ NULL
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_SSLCERT, "client.pem");
- curl_easy_setopt(curl, CURLOPT_SSLKEY, "key.pem");
- curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "s3cret");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_SSLCERT, "client.pem");
+ curl_easy_setopt(curl, CURLOPT_SSLKEY, "key.pem");
+ curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "s3cret");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -82,4 +86,6 @@ If built TLS enabled.
Returns CURLE_OK if TLS enabled, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_SSLCERTTYPE "(3), " CURLOPT_SSLKEY "(3), "
+.BR CURLOPT_SSLCERTTYPE (3),
+.BR CURLOPT_SSLKEY (3),
+.BR CURLOPT_KEYPASSWD (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSLCERTTYPE.3 b/docs/libcurl/opts/CURLOPT_SSLCERTTYPE.3
index c045b0e50..bf6bf0da4 100644
--- a/docs/libcurl/opts/CURLOPT_SSLCERTTYPE.3
+++ b/docs/libcurl/opts/CURLOPT_SSLCERTTYPE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSLCERTTYPE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSLCERTTYPE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSLCERTTYPE \- type of client SSL certificate
@@ -49,15 +49,19 @@ option.
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_SSLCERT, "client.pem");
- curl_easy_setopt(curl, CURLOPT_SSLCERTTYPE, "PEM");
- curl_easy_setopt(curl, CURLOPT_SSLKEY, "key.pem");
- curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "s3cret");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_SSLCERT, "client.pem");
+ curl_easy_setopt(curl, CURLOPT_SSLCERTTYPE, "PEM");
+ curl_easy_setopt(curl, CURLOPT_SSLKEY, "key.pem");
+ curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "s3cret");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -66,4 +70,5 @@ If built TLS enabled. Added in 7.9.3
Returns CURLE_OK if TLS is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_SSLCERT "(3), " CURLOPT_SSLKEY "(3), "
+.BR CURLOPT_SSLCERT (3),
+.BR CURLOPT_SSLKEY (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSLCERT_BLOB.3 b/docs/libcurl/opts/CURLOPT_SSLCERT_BLOB.3
index f6b064ebf..575677d60 100644
--- a/docs/libcurl/opts/CURLOPT_SSLCERT_BLOB.3
+++ b/docs/libcurl/opts/CURLOPT_SSLCERT_BLOB.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSLCERT_BLOB 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSLCERT_BLOB 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSLCERT_BLOB \- SSL client certificate from memory blob
@@ -52,18 +52,26 @@ NULL
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- struct curl_blob stblob;
- stblob.data = certificateData;
- stblob.len = filesize;
- stblob.flags = CURL_BLOB_COPY;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_SSLCERT_BLOB, &stblob);
- curl_easy_setopt(curl, CURLOPT_SSLCERTTYPE, "P12");
- curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "s3cret");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+
+extern char *certificateData; /* point to data */
+extern size_t filesize; /* size of data */
+
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ struct curl_blob stblob;
+ stblob.data = certificateData;
+ stblob.len = filesize;
+ stblob.flags = CURL_BLOB_COPY;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_SSLCERT_BLOB, &stblob);
+ curl_easy_setopt(curl, CURLOPT_SSLCERTTYPE, "P12");
+ curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "s3cret");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -73,4 +81,6 @@ Schannel and mbedTLS (since 7.78.0) backends.
Returns CURLE_OK if TLS enabled, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_SSLCERTTYPE "(3), " CURLOPT_SSLKEY "(3), "
+.BR CURLOPT_SSLCERTTYPE (3),
+.BR CURLOPT_SSLKEY (3),
+.BR CURLOPT_KEYPASSWD (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSLENGINE.3 b/docs/libcurl/opts/CURLOPT_SSLENGINE.3
index 69bb6154d..94290eedd 100644
--- a/docs/libcurl/opts/CURLOPT_SSLENGINE.3
+++ b/docs/libcurl/opts/CURLOPT_SSLENGINE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSLENGINE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSLENGINE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSLENGINE \- SSL engine identifier
@@ -33,8 +33,8 @@ CURLOPT_SSLENGINE \- SSL engine identifier
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLENGINE, char *id);
.fi
.SH DESCRIPTION
-Pass a pointer to a null-terminated string as parameter. It will be used as
-the identifier for the crypto engine you want to use for your private key.
+Pass a pointer to a null-terminated string as parameter. It is used as the
+identifier for the crypto engine you want to use for your private key.
The application does not have to keep the string around after setting this
option.
@@ -44,12 +44,16 @@ NULL
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_SSLENGINE, "dynamic");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_SSLENGINE, "dynamic");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -68,4 +72,6 @@ CURLE_UNKNOWN_OPTION - Option not recognized.
CURLE_OUT_OF_MEMORY - Insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_SSLENGINE_DEFAULT "(3), " CURLOPT_SSLKEY "(3), "
+.BR CURLINFO_SSL_ENGINES (3),
+.BR CURLOPT_SSLENGINE_DEFAULT (3),
+.BR CURLOPT_SSLKEY (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.3 b/docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.3
index 9dc2d5f50..22fa8cf8f 100644
--- a/docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.3
+++ b/docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSLENGINE_DEFAULT 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSLENGINE_DEFAULT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSLENGINE_DEFAULT \- make SSL engine default
@@ -43,13 +43,17 @@ None
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_SSLENGINE, "dynamic");
- curl_easy_setopt(curl, CURLOPT_SSLENGINE_DEFAULT, 1L);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_SSLENGINE, "dynamic");
+ curl_easy_setopt(curl, CURLOPT_SSLENGINE_DEFAULT, 1L);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -65,4 +69,5 @@ CURLE_UNKNOWN_OPTION - Option not recognized.
CURLE_OUT_OF_MEMORY - Insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_SSLENGINE "(3), " CURLOPT_SSLCERT "(3), "
+.BR CURLOPT_SSLENGINE (3),
+.BR CURLOPT_SSLCERT (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSLKEY.3 b/docs/libcurl/opts/CURLOPT_SSLKEY.3
index 0eb972f8c..fbcda4000 100644
--- a/docs/libcurl/opts/CURLOPT_SSLKEY.3
+++ b/docs/libcurl/opts/CURLOPT_SSLKEY.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSLKEY 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSLKEY 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSLKEY \- private key file for TLS and SSL client cert
@@ -49,14 +49,18 @@ NULL
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_SSLCERT, "client.pem");
- curl_easy_setopt(curl, CURLOPT_SSLKEY, "key.pem");
- curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "s3cret");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_SSLCERT, "client.pem");
+ curl_easy_setopt(curl, CURLOPT_SSLKEY, "key.pem");
+ curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "s3cret");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -65,4 +69,6 @@ If built TLS enabled.
Returns CURLE_OK if TLS is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_SSLKEYTYPE "(3), " CURLOPT_SSLCERT "(3), "
+.BR CURLOPT_SSLCERT (3),
+.BR CURLOPT_SSLKEY_BLOB (3),
+.BR CURLOPT_SSLKEYTYPE (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSLKEYTYPE.3 b/docs/libcurl/opts/CURLOPT_SSLKEYTYPE.3
index e43a23b57..0e071aab1 100644
--- a/docs/libcurl/opts/CURLOPT_SSLKEYTYPE.3
+++ b/docs/libcurl/opts/CURLOPT_SSLKEYTYPE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSLKEYTYPE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSLKEYTYPE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSLKEYTYPE \- type of the private key file
@@ -49,15 +49,19 @@ option.
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_SSLCERT, "client.pem");
- curl_easy_setopt(curl, CURLOPT_SSLKEY, "key.pem");
- curl_easy_setopt(curl, CURLOPT_SSLKEYTYPE, "PEM");
- curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "s3cret");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_SSLCERT, "client.pem");
+ curl_easy_setopt(curl, CURLOPT_SSLKEY, "key.pem");
+ curl_easy_setopt(curl, CURLOPT_SSLKEYTYPE, "PEM");
+ curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "s3cret");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -66,4 +70,6 @@ If built TLS enabled.
Returns CURLE_OK if TLS is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_SSLKEY "(3), " CURLOPT_SSLCERT "(3), "
+.BR CURLOPT_SSLCERT (3),
+.BR CURLOPT_SSLKEY (3),
+.BR CURLOPT_PROXY_SSLKEYTYPE (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSLKEY_BLOB.3 b/docs/libcurl/opts/CURLOPT_SSLKEY_BLOB.3
index f76ba596b..a64549f9c 100644
--- a/docs/libcurl/opts/CURLOPT_SSLKEY_BLOB.3
+++ b/docs/libcurl/opts/CURLOPT_SSLKEY_BLOB.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSLKEY_BLOB 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSLKEY_BLOB 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSLKEY_BLOB \- private key for client cert from memory blob
@@ -50,23 +50,34 @@ NULL
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- struct curl_blob blob;
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- blob.data = certificateData;
- blob.len = filesize;
- blob.flags = CURL_BLOB_COPY;
- curl_easy_setopt(curl, CURLOPT_SSLCERT_BLOB, &blob);
- curl_easy_setopt(curl, CURLOPT_SSLCERTTYPE, "PEM");
- blob.data = privateKeyData;
- blob.len = privateKeySize;
- curl_easy_setopt(curl, CURLOPT_SSLKEY_BLOB, &blob);
- curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "s3cret");
- curl_easy_setopt(curl, CURLOPT_SSLKEYTYPE, "PEM");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+extern char *certificateData; /* point to cert */
+extern size_t filesize; /* size of cert */
+
+extern char *privateKeyData; /* point to key */
+extern size_t privateKeySize; /* size of key */
+
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ struct curl_blob blob;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ blob.data = certificateData;
+ blob.len = filesize;
+ blob.flags = CURL_BLOB_COPY;
+ curl_easy_setopt(curl, CURLOPT_SSLCERT_BLOB, &blob);
+ curl_easy_setopt(curl, CURLOPT_SSLCERTTYPE, "PEM");
+
+ blob.data = privateKeyData;
+ blob.len = privateKeySize;
+ curl_easy_setopt(curl, CURLOPT_SSLKEY_BLOB, &blob);
+ curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "s3cret");
+ curl_easy_setopt(curl, CURLOPT_SSLKEYTYPE, "PEM");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -75,4 +86,5 @@ Added in 7.71.0. This option is supported by the OpenSSL backends.
Returns CURLE_OK if TLS enabled, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_SSLKEYTYPE "(3), " CURLOPT_SSLKEY "(3), "
+.BR CURLOPT_SSLKEYTYPE (3),
+.BR CURLOPT_SSLKEY (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSLVERSION.3 b/docs/libcurl/opts/CURLOPT_SSLVERSION.3
index e7cdd017f..4d8eb38d6 100644
--- a/docs/libcurl/opts/CURLOPT_SSLVERSION.3
+++ b/docs/libcurl/opts/CURLOPT_SSLVERSION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSLVERSION 3 "October 22, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSLVERSION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSLVERSION \- preferred TLS/SSL version
@@ -68,9 +68,9 @@ The MAX macros are not supported for WolfSSL.
.RS
.IP CURL_SSLVERSION_MAX_DEFAULT
The flag defines the maximum supported TLS version by libcurl, or the default
-value from the SSL library is used. libcurl will use a sensible default
-maximum, which was TLS v1.2 up to before 7.61.0 and is TLS v1.3 since then -
-assuming the TLS library support it. (Added in 7.54.0)
+value from the SSL library is used. libcurl uses a sensible default maximum,
+which was TLS v1.2 up to before 7.61.0 and is TLS v1.3 since then - assuming
+the TLS library support it. (Added in 7.54.0)
.IP CURL_SSLVERSION_MAX_TLSv1_0
The flag defines maximum supported TLS version as TLS v1.0.
(Added in 7.54.0)
@@ -95,15 +95,18 @@ CURL_SSLVERSION_DEFAULT
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* ask libcurl to use TLS version 1.0 or later */
- curl_easy_setopt(curl, CURLOPT_SSLVERSION, (long)CURL_SSLVERSION_TLSv1);
+ /* ask libcurl to use TLS version 1.0 or later */
+ curl_easy_setopt(curl, CURLOPT_SSLVERSION, (long)CURL_SSLVERSION_TLSv1);
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -116,5 +119,7 @@ SSLv3 is disabled by default since 7.39.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_USE_SSL "(3), " CURLOPT_HTTP_VERSION "(3), "
-.BR CURLOPT_PROXY_SSLVERSION "(3), " CURLOPT_IPRESOLVE "(3) "
+.BR CURLOPT_HTTP_VERSION (3),
+.BR CURLOPT_IPRESOLVE (3),
+.BR CURLOPT_PROXY_SSLVERSION (3),
+.BR CURLOPT_USE_SSL (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.3 b/docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.3
index 28e72c602..e1cb2a142 100644
--- a/docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.3
+++ b/docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSL_CIPHER_LIST 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSL_CIPHER_LIST 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSL_CIPHER_LIST \- ciphers to use for TLS
@@ -43,11 +43,6 @@ For OpenSSL and GnuTLS valid examples of cipher lists include \fBRC4-SHA\fP,
\fBSHA1+DES\fP, \fBTLSv1\fP and \fBDEFAULT\fP. The default list is normally
set when you compile OpenSSL.
-For NSS, valid examples of cipher lists include \fBrsa_rc4_128_md5\fP,
-\fBrsa_aes_128_sha\fP, etc. With NSS you do not add/remove ciphers. If one uses
-this option then all known ciphers are disabled and only those passed in are
-enabled.
-
For WolfSSL, valid examples of cipher lists include \fBECDHE-RSA-RC4-SHA\fP,
\fBAES256-SHA:AES256-SHA256\fP, etc.
@@ -58,7 +53,10 @@ etc.
With BearSSL you do not add/remove ciphers. If one uses this option then all
known ciphers are disabled and only those passed in are enabled.
-you will find more details about cipher lists on this URL:
+For Schannel, you can use this option to set algorithms but not specific cipher
+suites. Refer to the ciphers lists document for algorithms.
+
+Find more details about cipher lists on this URL:
https://curl.se/docs/ssl-ciphers.html
@@ -70,12 +68,16 @@ NULL, use internal default
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_SSL_CIPHER_LIST, "TLSv1");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_SSL_CIPHER_LIST, "TLSv1");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -86,6 +88,8 @@ If built TLS enabled.
Returns CURLE_OK if TLS is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_TLS13_CIPHERS "(3), " CURLOPT_SSLVERSION "(3), "
-.BR CURLOPT_PROXY_SSL_CIPHER_LIST "(3), " CURLOPT_PROXY_TLS13_CIPHERS "(3), "
-.BR CURLOPT_USE_SSL "(3), "
+.BR CURLOPT_TLS13_CIPHERS (3),
+.BR CURLOPT_SSLVERSION (3),
+.BR CURLOPT_PROXY_SSL_CIPHER_LIST (3),
+.BR CURLOPT_PROXY_TLS13_CIPHERS (3),
+.BR CURLOPT_USE_SSL (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.3 b/docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.3
index 65b82f5ac..6db06cb4f 100644
--- a/docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.3
+++ b/docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSL_CTX_DATA 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSL_CTX_DATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSL_CTX_DATA \- pointer passed to SSL context callback
@@ -34,7 +34,7 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_CTX_DATA, void *pointer);
.fi
.SH DESCRIPTION
Data \fIpointer\fP to pass to the ssl context callback set by the option
-\fICURLOPT_SSL_CTX_FUNCTION(3)\fP, this is the pointer you will get as third
+\fICURLOPT_SSL_CTX_FUNCTION(3)\fP, this is the pointer you get as third
parameter.
.SH DEFAULT
NULL
@@ -60,7 +60,7 @@ static CURLcode sslctx_function(CURL *curl, void *sslctx, void *parm)
* X509 structure that SSL can use
*/
PEM_read_bio_X509(bio, &cert, 0, NULL);
- if(cert == NULL)
+ if(!cert)
printf("PEM_read_bio_X509 failed...\\n");
/* get a pointer to the X509 certificate store (which may be empty) */
@@ -80,7 +80,7 @@ static CURLcode sslctx_function(CURL *curl, void *sslctx, void *parm)
int main(void)
{
- CURL * ch;
+ CURL *ch;
CURLcode rv;
char *mypem = /* example CA cert PEM - shortened */
"-----BEGIN CERTIFICATE-----\\n"
@@ -100,10 +100,6 @@ int main(void)
curl_easy_setopt(ch, CURLOPT_SSL_VERIFYPEER, 1L);
curl_easy_setopt(ch, CURLOPT_URL, "https://www.example.com/");
- /* Retrieve page using cacerts' certificate -> will succeed
- * load the certificate by installing a function doing the necessary
- * "modifications" to the SSL CONTEXT just before link init
- */
curl_easy_setopt(ch, CURLOPT_SSL_CTX_FUNCTION, *sslctx_function);
curl_easy_setopt(ch, CURLOPT_SSL_CTX_DATA, mypem);
rv = curl_easy_perform(ch);
@@ -127,4 +123,5 @@ CURLE_NOT_BUILT_IN - Not supported by the SSL backend
CURLE_UNKNOWN_OPTION
.SH "SEE ALSO"
-.BR CURLOPT_SSL_CTX_FUNCTION "(3), " CURLOPT_SSLVERSION "(3), "
+.BR CURLOPT_SSL_CTX_FUNCTION (3),
+.BR CURLOPT_SSLVERSION (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.3 b/docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.3
index 959d178cf..f3bd94490 100644
--- a/docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSL_CTX_FUNCTION 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSL_CTX_FUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSL_CTX_FUNCTION \- SSL context callback for OpenSSL, wolfSSL or mbedTLS
@@ -30,7 +30,7 @@ CURLOPT_SSL_CTX_FUNCTION \- SSL context callback for OpenSSL, wolfSSL or mbedTLS
.nf
#include <curl/curl.h>
-CURLcode ssl_ctx_callback(CURL *curl, void *ssl_ctx, void *userptr);
+CURLcode ssl_ctx_callback(CURL *curl, void *ssl_ctx, void *clientp);
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_CTX_FUNCTION,
ssl_ctx_callback);
@@ -50,18 +50,21 @@ library's \fISSL_CTX\fP for OpenSSL or wolfSSL, a pointer to
\fImbedtls_ssl_config\fP for mbedTLS or a pointer to
\fIbr_ssl_client_context\fP for BearSSL. If an error is returned from the
callback no attempt to establish a connection is made and the perform
-operation will return the callback's error code. Set the \fIuserptr\fP
-argument with the \fICURLOPT_SSL_CTX_DATA(3)\fP option.
+operation returns the callback's error code. Set the \fIclientp\fP argument
+with the \fICURLOPT_SSL_CTX_DATA(3)\fP option.
-This function will get called on all new connections made to a server, during
-the SSL negotiation. The \fIssl_ctx\fP will point to a newly initialized object
-each time, but note the pointer may be the same as from a prior call.
+This function gets called on all new connections made to a server, during the
+SSL negotiation. The \fIssl_ctx\fP points to a newly initialized object each
+time, but note the pointer may be the same as from a prior call.
To use this properly, a non-trivial amount of knowledge of your SSL library is
necessary. For example, you can use this function to call library-specific
callbacks to add additional validation code for certificates, and even to
change the actual URI of an HTTPS request.
+For OpenSSL, asynchronous certificate verification via
+\fISSL_set_retry_verify\fP is supported. (Added in 8.3.0)
+
WARNING: The \fICURLOPT_SSL_CTX_FUNCTION(3)\fP callback allows the application
to reach in and modify SSL details in the connection without libcurl itself
knowing anything about it, which then subsequently can lead to libcurl
@@ -69,8 +72,8 @@ unknowingly reusing SSL connections with different properties. To remedy this
you may set \fICURLOPT_FORBID_REUSE(3)\fP from the callback function.
WARNING: If you are using DNS-over-HTTPS (DoH) via \fICURLOPT_DOH_URL(3)\fP
-then this callback will also be called for those transfers and the curl handle
-is set to an internal handle. \fBThis behavior is subject to change.\fP We
+then this callback is also called for those transfers and the curl handle is
+set to an internal handle. \fBThis behavior is subject to change.\fP We
recommend before performing your transfer set \fICURLOPT_PRIVATE(3)\fP on your
curl handle so you can identify it in the context callback. If you have a
reason to modify DoH SSL context please let us know on the curl-library
@@ -99,7 +102,7 @@ static CURLcode sslctx_function(CURL *curl, void *sslctx, void *parm)
* X509 structure that SSL can use
*/
PEM_read_bio_X509(bio, &cert, 0, NULL);
- if(cert == NULL)
+ if(!cert)
printf("PEM_read_bio_X509 failed...\\n");
/* get a pointer to the X509 certificate store (which may be empty) */
@@ -119,7 +122,7 @@ static CURLcode sslctx_function(CURL *curl, void *sslctx, void *parm)
int main(void)
{
- CURL * ch;
+ CURL *ch;
CURLcode rv;
char *mypem = /* example CA cert PEM - shortened */
"-----BEGIN CERTIFICATE-----\\n"
@@ -139,10 +142,6 @@ int main(void)
curl_easy_setopt(ch, CURLOPT_SSL_VERIFYPEER, 1L);
curl_easy_setopt(ch, CURLOPT_URL, "https://www.example.com/");
- /* Retrieve page using cacerts' certificate -> will succeed
- * load the certificate by installing a function doing the necessary
- * "modifications" to the SSL CONTEXT just before link init
- */
curl_easy_setopt(ch, CURLOPT_SSL_CTX_FUNCTION, *sslctx_function);
curl_easy_setopt(ch, CURLOPT_SSL_CTX_DATA, mypem);
rv = curl_easy_perform(ch);
@@ -166,4 +165,5 @@ CURLE_NOT_BUILT_IN - Not supported by the SSL backend
CURLE_UNKNOWN_OPTION
.SH "SEE ALSO"
-.BR CURLOPT_SSL_CTX_DATA "(3), " CURLOPT_SSL_VERIFYPEER "(3), "
+.BR CURLOPT_SSL_CTX_DATA (3),
+.BR CURLOPT_SSL_VERIFYPEER (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSL_EC_CURVES.3 b/docs/libcurl/opts/CURLOPT_SSL_EC_CURVES.3
index 04bdf8ad4..c64b9821b 100644
--- a/docs/libcurl/opts/CURLOPT_SSL_EC_CURVES.3
+++ b/docs/libcurl/opts/CURLOPT_SSL_EC_CURVES.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSL_EC_CURVES 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSL_EC_CURVES 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSL_EC_CURVES \- key exchange curves
@@ -42,12 +42,16 @@ the SSL backend libcurl is built to use supports it).
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_SSL_EC_CURVES, "X25519:P-521");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_SSL_EC_CURVES, "X25519:P-521");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -55,5 +59,7 @@ Added in 7.73.0. Supported by the OpenSSL backend.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_SSL_OPTIONS "(3), " CURLOPT_SSL_CIPHER_LIST "(3), "
-.BR CURLOPT_TLS13_CIPHERS "(3), "
+.BR CURLOPT_SSL_OPTIONS (3),
+.BR CURLOPT_SSL_CIPHER_LIST (3),
+.BR CURLOPT_TLS13_CIPHERS (3)
+
diff --git a/docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.3 b/docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.3
index 06e51b498..ea4f442d6 100644
--- a/docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.3
+++ b/docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSL_ENABLE_ALPN 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSL_ENABLE_ALPN 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSL_ENABLE_ALPN \- Application Layer Protocol Negotiation
@@ -42,12 +42,16 @@ is built to use supports it), which can be used to negotiate http2.
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_SSL_ENABLE_ALPN, 0L);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_SSL_ENABLE_ALPN, 0L);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -55,4 +59,5 @@ Added in 7.36.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_SSL_ENABLE_NPN "(3), " CURLOPT_SSL_OPTIONS "(3), "
+.BR CURLOPT_SSL_ENABLE_NPN (3),
+.BR CURLOPT_SSL_OPTIONS (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.3 b/docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.3
index 1824c11c5..b750c69cc 100644
--- a/docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.3
+++ b/docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSL_ENABLE_NPN 3 "September 01, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSL_ENABLE_NPN 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSL_ENABLE_NPN \- use NPN
@@ -44,12 +44,16 @@ is built to use supports it), which can be used to negotiate http2.
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_SSL_ENABLE_NPN, 1L);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_SSL_ENABLE_NPN, 1L);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -57,4 +61,5 @@ Added in 7.36.0. Deprecated in 7.86.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_SSL_ENABLE_ALPN "(3), " CURLOPT_SSL_OPTIONS "(3), "
+.BR CURLOPT_SSL_ENABLE_ALPN (3),
+.BR CURLOPT_SSL_OPTIONS (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSL_FALSESTART.3 b/docs/libcurl/opts/CURLOPT_SSL_FALSESTART.3
index f05cb8eb5..20b1fedf6 100644
--- a/docs/libcurl/opts/CURLOPT_SSL_FALSESTART.3
+++ b/docs/libcurl/opts/CURLOPT_SSL_FALSESTART.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSL_FALSESTART 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSL_FALSESTART 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSL_FALSESTART \- TLS false start
@@ -36,25 +36,28 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_FALSESTART, long enable);
Pass a long as parameter set to 1L to enable or 0 to disable.
This option determines whether libcurl should use false start during the TLS
-handshake. False start is a mode where a TLS client will start sending
-application data before verifying the server's Finished message, thus saving a
-round trip when performing a full handshake.
+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.
.SH DEFAULT
0
.SH PROTOCOLS
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_SSL_FALSESTART, 1L);
- curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_setopt(curl, CURLOPT_SSL_FALSESTART, 1L);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
-Added in 7.42.0. This option is currently only supported by the NSS and
-Secure Transport (on iOS 7.0 or later, or OS X 10.9 or later) TLS backends.
+Added in 7.42.0. This option is currently only supported by the Secure
+Transport (on iOS 7.0 or later, or OS X 10.9 or later) TLS backend.
.SH RETURN VALUE
Returns CURLE_OK if false start is supported by the SSL backend, otherwise
returns CURLE_NOT_BUILT_IN.
diff --git a/docs/libcurl/opts/CURLOPT_SSL_OPTIONS.3 b/docs/libcurl/opts/CURLOPT_SSL_OPTIONS.3
index 288ecec87..0c58c9ffa 100644
--- a/docs/libcurl/opts/CURLOPT_SSL_OPTIONS.3
+++ b/docs/libcurl/opts/CURLOPT_SSL_OPTIONS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSL_OPTIONS 3 "October 22, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSL_OPTIONS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSL_OPTIONS \- SSL behavior options
@@ -39,10 +39,10 @@ behaviors. Available bits:
Tells libcurl to not attempt to use any workarounds for a security flaw in the
SSL3 and TLS1.0 protocols. If this option is not used or this bit is set to 0,
the SSL layer libcurl uses may use a work-around for this flaw although it
-might cause interoperability problems with some (older) SSL
-implementations. WARNING: avoiding this work-around lessens the security, and
-by setting this option to 1 you ask for exactly that. This option is only
-supported for Secure Transport, NSS and OpenSSL.
+might cause interoperability problems with some (older) SSL implementations.
+WARNING: avoiding this work-around lessens the security, and by setting this
+option to 1 you ask for exactly that. This option is only supported for
+Secure Transport and OpenSSL.
.IP CURLSSLOPT_NO_REVOKE
Tells libcurl to disable certificate revocation checks for those SSL backends
where such behavior is present. This option is only supported for Schannel
@@ -51,7 +51,7 @@ Untrusted Publishers block list which it seems cannot be bypassed. (Added in
7.44.0)
.IP CURLSSLOPT_NO_PARTIALCHAIN
Tells libcurl to not accept "partial" certificate chains, which it otherwise
-does by default. This option is only supported for OpenSSL and will fail the
+does by default. This option is only supported for OpenSSL and fails the
certificate verification if the chain ends with an intermediate certificate
and not with a root cert. (Added in 7.68.0)
.IP CURLSSLOPT_REVOKE_BEST_EFFORT
@@ -62,9 +62,13 @@ library). If combined with \fICURLSSLOPT_NO_REVOKE\fP, the latter takes
precedence. (Added in 7.70.0)
.IP CURLSSLOPT_NATIVE_CA
Tell libcurl to use the operating system's native CA store for certificate
-verification. Works only on Windows when built to use OpenSSL. This option is
-experimental and behavior is subject to change.
-(Added in 7.71.0)
+verification. If you set this option and also set a CA certificate file or
+directory then during verification those certificates are searched in addition
+to the native CA store.
+
+Works with wolfSSL on Windows, Linux (Debian, Ubuntu, Gentoo, Fedora, RHEL),
+macOS, Android and iOS (added in 8.3.0), with GnuTLS (added in 8.5.0) or on
+Windows when built to use OpenSSL (Added in 7.71.0).
.IP CURLSSLOPT_AUTO_CLIENT_CERT
Tell libcurl to automatically locate and use a client certificate for
authentication, when requested by the server. This option is only supported
@@ -79,14 +83,18 @@ could be a privacy violation and unexpected.
All TLS-based protocols
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- /* weaken TLS only for use with silly servers */
- curl_easy_setopt(curl, CURLOPT_SSL_OPTIONS, (long)CURLSSLOPT_ALLOW_BEAST |
- CURLSSLOPT_NO_REVOKE);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ /* weaken TLS only for use with silly servers */
+ curl_easy_setopt(curl, CURLOPT_SSL_OPTIONS, (long)CURLSSLOPT_ALLOW_BEAST |
+ CURLSSLOPT_NO_REVOKE);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -94,4 +102,6 @@ Added in 7.25.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_SSLVERSION "(3), " CURLOPT_SSL_CIPHER_LIST "(3), "
+.BR CURLOPT_PROXY_SSL_OPTIONS (3),
+.BR CURLOPT_SSL_CIPHER_LIST (3),
+.BR CURLOPT_SSLVERSION (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.3 b/docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.3
index f58e565ed..69e25359e 100644
--- a/docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.3
+++ b/docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSL_SESSIONID_CACHE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSL_SESSIONID_CACHE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSL_SESSIONID_CACHE \- use the SSL session-ID cache
@@ -44,13 +44,17 @@ wild that may require you to disable this in order for you to succeed.
All TLS-based
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- /* switch off session-id use! */
- curl_easy_setopt(curl, CURLOPT_SSL_SESSIONID_CACHE, 0L);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ /* switch off session-id use! */
+ curl_easy_setopt(curl, CURLOPT_SSL_SESSIONID_CACHE, 0L);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -58,4 +62,7 @@ Added in 7.16.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_DNS_CACHE_TIMEOUT "(3), " CURLOPT_SSLVERSION "(3), "
+.BR CURLOPT_DNS_CACHE_TIMEOUT (3),
+.BR CURLOPT_MAXAGE_CONN (3),
+.BR CURLOPT_MAXLIFETIME_CONN (3),
+.BR CURLOPT_SSLVERSION (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.3 b/docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.3
index 6514de7a1..866adb54f 100644
--- a/docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.3
+++ b/docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSL_VERIFYHOST 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSL_VERIFYHOST 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSL_VERIFYHOST \- verify the certificate's name against host
@@ -55,8 +55,8 @@ If \fIverify\fP value is set to 1:
In 7.28.0 and earlier: treated as a debug option of some sorts, not supported
anymore due to frequently leading to programmer mistakes.
-From 7.28.1 to 7.65.3: setting it to 1 made curl_easy_setopt() return an error
-and leaving the flag untouched.
+From 7.28.1 to 7.65.3: setting it to 1 made \fIcurl_easy_setopt(3)\fP return
+an error and leaving the flag untouched.
From 7.66.0: treats 1 and 2 the same.
@@ -68,29 +68,40 @@ The default value for this option is 2.
This option controls checking the server's certificate's claimed identity.
The server could be lying. To control lying, see
\fICURLOPT_SSL_VERIFYPEER(3)\fP.
+
+WARNING: disabling verification of the certificate allows bad guys to
+man-in-the-middle the communication without you knowing it. Disabling
+verification makes the communication insecure. Just having encryption on a
+transfer is not enough as you cannot be sure that you are communicating with
+the correct end-point.
+
+When libcurl uses secure protocols it trusts responses and allows for example
+HSTS and Alt-Svc information to be stored and used subsequently. Disabling
+certificate verification can make libcurl trust and use such information from
+malicious servers.
.SH LIMITATIONS
Secure Transport: If \fIverify\fP value is 0, then SNI is also disabled. SNI is
a TLS extension that sends the hostname to the server. The server may use that
information to do such things as sending back a specific certificate for the
hostname, or forwarding the request to a specific origin server. Some hostnames
may be inaccessible if SNI is not sent.
-
-NSS: If \fICURLOPT_SSL_VERIFYPEER(3)\fP is zero,
-\fICURLOPT_SSL_VERIFYHOST(3)\fP is also set to zero and cannot be overridden.
.SH DEFAULT
2
.SH PROTOCOLS
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Set the default value: strict name check please */
- curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2L);
+ /* Set the default value: strict name check please */
+ curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -100,4 +111,6 @@ Returns CURLE_OK if TLS is supported, and CURLE_UNKNOWN_OPTION if not.
If 1 is set as argument, \fICURLE_BAD_FUNCTION_ARGUMENT\fP is returned.
.SH "SEE ALSO"
-.BR CURLOPT_SSL_VERIFYPEER "(3), " CURLOPT_CAINFO "(3), "
+.BR CURLOPT_CAINFO (3),
+.BR CURLOPT_PINNEDPUBLICKEY (3),
+.BR CURLOPT_SSL_VERIFYPEER (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.3 b/docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.3
index e86a1ed8e..1c325e362 100644
--- a/docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.3
+++ b/docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSL_VERIFYPEER 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSL_VERIFYPEER 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSL_VERIFYPEER \- verify the peer's SSL certificate
@@ -39,17 +39,19 @@ This option determines whether curl verifies the authenticity of the peer's
certificate. A value of 1 means curl verifies; 0 (zero) means it does not.
When negotiating a TLS or SSL connection, the server sends a certificate
-indicating its identity. Curl verifies whether the certificate is authentic,
+indicating its identity. Curl verifies whether the certificate is authentic,
i.e. that you can trust that the server is who the certificate says it is.
This trust is based on a chain of digital signatures, rooted in certification
-authority (CA) certificates you supply. curl uses a default bundle of CA
+authority (CA) certificates you supply. curl uses a default bundle of CA
certificates (the path for that is determined at build time) and you can
specify alternate certificates with the \fICURLOPT_CAINFO(3)\fP option or the
\fICURLOPT_CAPATH(3)\fP option.
When \fICURLOPT_SSL_VERIFYPEER(3)\fP is enabled, and the verification fails to
-prove that the certificate is authentic, the connection fails. When the
-option is zero, the peer certificate verification succeeds regardless.
+prove that the certificate is signed by a CA, the connection fails.
+
+When this option is disabled (set to zero), the CA certificates are not loaded
+and the peer certificate verification is simply skipped.
Authenticating the certificate is not enough to be sure about the server. You
typically also want to ensure that the server is the server you mean to be
@@ -63,28 +65,27 @@ verification makes the communication insecure. Just having encryption on a
transfer is not enough as you cannot be sure that you are communicating with
the correct end-point.
-NOTE: even when this option is disabled, depending on the used TLS backend,
-curl may still load the certificate file specified in
-\fICURLOPT_CAINFO(3)\fP. curl default settings in some distributions might use
-quite a large file as a default setting for \fICURLOPT_CAINFO(3)\fP, so
-loading the file can be quite expensive, especially when dealing with many
-connections. Thus, in some situations, you might want to disable verification
-fully to save resources by setting \fICURLOPT_CAINFO(3)\fP to NULL - but
-please also consider the warning above!
+When libcurl uses secure protocols it trusts responses and allows for example
+HSTS and Alt-Svc information to be stored and used subsequently. Disabling
+certificate verification can make libcurl trust and use such information from
+malicious servers.
.SH DEFAULT
-By default, curl assumes a value of 1.
+1 - enabled
.SH PROTOCOLS
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Set the default value: strict certificate check please */
- curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);
+ /* Set the default value: strict certificate check please */
+ curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -92,7 +93,9 @@ If built TLS enabled.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_SSL_VERIFYHOST "(3), "
-.BR CURLOPT_PROXY_SSL_VERIFYPEER "(3), "
-.BR CURLOPT_PROXY_SSL_VERIFYHOST "(3), "
-.BR CURLOPT_CAINFO "(3), "
+.BR CURLOPT_SSL_VERIFYHOST (3),
+.BR CURLOPT_PROXY_SSL_VERIFYPEER (3),
+.BR CURLOPT_PROXY_SSL_VERIFYHOST (3),
+.BR CURLOPT_CAINFO (3),
+.BR CURLINFO_CAINFO (3),
+.BR CURLINFO_CAPATH (3)
diff --git a/docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.3 b/docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.3
index ebbd4c781..72e1a1ce1 100644
--- a/docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.3
+++ b/docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SSL_VERIFYSTATUS 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SSL_VERIFYSTATUS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SSL_VERIFYSTATUS \- verify the certificate's status
@@ -39,29 +39,33 @@ This option determines whether libcurl verifies the status of the server cert
using the "Certificate Status Request" TLS extension (aka. OCSP stapling).
Note that if this option is enabled but the server does not support the TLS
-extension, the verification will fail.
+extension, the verification fails.
.SH DEFAULT
0
.SH PROTOCOLS
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- /* ask for OCSP stapling! */
- curl_easy_setopt(curl, CURLOPT_SSL_VERIFYSTATUS, 1L);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ /* ask for OCSP stapling! */
+ curl_easy_setopt(curl, CURLOPT_SSL_VERIFYSTATUS, 1L);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
-Added in 7.41.0. This option is currently only supported by the OpenSSL, GnuTLS
-and NSS TLS backends.
+Added in 7.41.0. This option is currently only supported by the OpenSSL and
+GnuTLS TLS backends.
.SH RETURN VALUE
Returns CURLE_OK if OCSP stapling is supported by the SSL backend, otherwise
returns CURLE_NOT_BUILT_IN.
.SH "SEE ALSO"
-.BR CURLOPT_SSL_VERIFYHOST "(3), "
-.BR CURLOPT_SSL_VERIFYPEER "(3), "
-.BR CURLOPT_CAINFO "(3), "
+.BR CURLOPT_SSL_VERIFYHOST (3),
+.BR CURLOPT_SSL_VERIFYPEER (3),
+.BR CURLOPT_CAINFO (3)
diff --git a/docs/libcurl/opts/CURLOPT_STDERR.3 b/docs/libcurl/opts/CURLOPT_STDERR.3
index 0a8ed81f4..c85488b33 100644
--- a/docs/libcurl/opts/CURLOPT_STDERR.3
+++ b/docs/libcurl/opts/CURLOPT_STDERR.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_STDERR 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_STDERR 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_STDERR \- redirect stderr to another stream
@@ -37,8 +37,8 @@ Pass a FILE * as parameter. Tell libcurl to use this \fIstream\fP instead of
stderr when showing the progress meter and displaying \fICURLOPT_VERBOSE(3)\fP
data.
-If you are using libcurl as a win32 DLL, this option will cause an exception
-and crash in the library since it cannot access a FILE * passed on from the
+If you are using libcurl as a Windows DLL, this option causes an exception and
+a crash in the library since it cannot access a FILE * passed on from the
application. A work-around is to instead use \fICURLOPT_DEBUGFUNCTION(3)\fP.
.SH DEFAULT
stderr
@@ -46,13 +46,16 @@ stderr
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-FILE *filep = fopen("dump", "wb");
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_STDERR, filep);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ FILE *filep = fopen("dump", "wb");
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_setopt(curl, CURLOPT_STDERR, filep);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -60,5 +63,7 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_VERBOSE "(3), " CURLOPT_NOPROGRESS "(3), "
-.BR CURLOPT_DEBUGFUNCTION "(3) "
+.BR CURLOPT_VERBOSE (3),
+.BR CURLOPT_NOPROGRESS (3),
+.BR CURLOPT_DEBUGFUNCTION (3)
+
diff --git a/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.3 b/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.3
index 3785b8b62..00f102dfb 100644
--- a/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.3
+++ b/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_STREAM_DEPENDS 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_STREAM_DEPENDS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_STREAM_DEPENDS \- stream this transfer depends on
@@ -44,9 +44,9 @@ resources to the identified stream rather than to the dependent stream."
This option can be set during transfer.
-\fIdephandle\fP must not be the same as \fIhandle\fP, that will cause this
-function to return an error. It must be another easy handle, and it also needs
-to be a handle of a transfer that will be sent over the same HTTP/2 connection
+\fIdephandle\fP must not be the same as \fIhandle\fP, that makes this function
+return an error. It must be another easy handle, and it also needs to be a
+handle of a transfer that is about to be sent over the same HTTP/2 connection
for this option to have an actual effect.
.SH DEFAULT
NULL
@@ -54,16 +54,19 @@ NULL
HTTP/2
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-CURL *curl2 = curl_easy_init(); /* a second handle */
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/one");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ CURL *curl2 = curl_easy_init(); /* a second handle */
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/one");
- /* the second depends on the first */
- curl_easy_setopt(curl2, CURLOPT_URL, "https://example.com/two");
- curl_easy_setopt(curl2, CURLOPT_STREAM_DEPENDS, curl);
+ /* the second depends on the first */
+ curl_easy_setopt(curl2, CURLOPT_URL, "https://example.com/two");
+ curl_easy_setopt(curl2, CURLOPT_STREAM_DEPENDS, curl);
- /* then add both to a multi handle and transfer them! */
+ /* then add both to a multi handle and transfer them! */
+ }
}
.fi
.SH AVAILABILITY
@@ -71,4 +74,7 @@ Added in 7.46.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_STREAM_WEIGHT "(3), " CURLOPT_STREAM_DEPENDS_E "(3), "
+.BR CURLMOPT_PIPELINING (3),
+.BR CURLOPT_HTTP_VERSION (3),
+.BR CURLOPT_STREAM_DEPENDS_E (3),
+.BR CURLOPT_STREAM_WEIGHT (3)
diff --git a/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.3 b/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.3
index 9c10268f8..c5f4817b3 100644
--- a/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.3
+++ b/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_STREAM_DEPENDS_E 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_STREAM_DEPENDS_E 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_STREAM_DEPENDS_E \- stream this transfer depends on exclusively
@@ -47,9 +47,9 @@ reprioritized stream.
This option can be set during transfer.
-\fIdephandle\fP must not be the same as \fIhandle\fP, that will cause this
-function to return an error. It must be another easy handle, and it also needs
-to be a handle of a transfer that will be sent over the same HTTP/2 connection
+\fIdephandle\fP must not be the same as \fIhandle\fP, that makes this function
+return an error. It must be another easy handle, and it also needs to be a
+handle of a transfer that is about to be sent over the same HTTP/2 connection
for this option to have an actual effect.
.SH DEFAULT
NULL
@@ -57,16 +57,19 @@ NULL
HTTP/2
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-CURL *curl2 = curl_easy_init(); /* a second handle */
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/one");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ CURL *curl2 = curl_easy_init(); /* a second handle */
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/one");
- /* the second depends on the first */
- curl_easy_setopt(curl2, CURLOPT_URL, "https://example.com/two");
- curl_easy_setopt(curl2, CURLOPT_STREAM_DEPENDS_E, curl);
+ /* the second depends on the first */
+ curl_easy_setopt(curl2, CURLOPT_URL, "https://example.com/two");
+ curl_easy_setopt(curl2, CURLOPT_STREAM_DEPENDS_E, curl);
- /* then add both to a multi handle and transfer them! */
+ /* then add both to a multi handle and transfer them! */
+ }
}
.fi
.SH AVAILABILITY
@@ -74,4 +77,8 @@ Added in 7.46.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_STREAM_WEIGHT "(3), " CURLOPT_STREAM_DEPENDS "(3), "
+.BR CURLMOPT_PIPELINING (3),
+.BR CURLOPT_HTTP_VERSION (3),
+.BR CURLOPT_STREAM_DEPENDS (3),
+.BR CURLOPT_STREAM_WEIGHT (3)
+
diff --git a/docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.3 b/docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.3
index 1c4b08dc4..77e4ef588 100644
--- a/docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.3
+++ b/docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_STREAM_WEIGHT 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_STREAM_WEIGHT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_STREAM_WEIGHT \- numerical stream weight
@@ -40,35 +40,37 @@ stream used by the easy \fIhandle\fP. Setting and using weights only makes
sense and is only usable when doing multiple streams over the same
connections, which thus implies that you use \fICURLMOPT_PIPELINING(3)\fP.
-This option can be set during transfer and will then cause the updated weight
-info get sent to the server the next time an HTTP/2 frame is sent to the
-server.
+This option can be set during transfer and causes the updated weight info get
+sent to the server the next time an HTTP/2 frame is sent to the server.
See section 5.3 of RFC 7540 for protocol details.
Streams with the same parent should be allocated resources proportionally
based on their weight. So if you have two streams going, stream A with weight
-16 and stream B with weight 32, stream B will get two thirds (32/48) of the
+16 and stream B with weight 32, stream B gets two thirds (32/48) of the
available bandwidth (assuming the server can send off the data equally for
both streams).
.SH DEFAULT
-If nothing is set, the HTTP/2 protocol itself will use its own default which
-is 16.
+If nothing is set, the HTTP/2 protocol itself uses its own default which is
+16.
.SH PROTOCOLS
HTTP/2
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-CURL *curl2 = curl_easy_init(); /* a second handle */
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/one");
- curl_easy_setopt(curl, CURLOPT_STREAM_WEIGHT, 10L);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ CURL *curl2 = curl_easy_init(); /* a second handle */
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/one");
+ curl_easy_setopt(curl, CURLOPT_STREAM_WEIGHT, 10L);
- /* the second has twice the weight */
- curl_easy_setopt(curl2, CURLOPT_URL, "https://example.com/two");
- curl_easy_setopt(curl2, CURLOPT_STREAM_WEIGHT, 20L);
+ /* the second has twice the weight */
+ curl_easy_setopt(curl2, CURLOPT_URL, "https://example.com/two");
+ curl_easy_setopt(curl2, CURLOPT_STREAM_WEIGHT, 20L);
- /* then add both to a multi handle and transfer them! */
+ /* then add both to a multi handle and transfer them! */
+ }
}
.fi
.SH AVAILABILITY
@@ -76,5 +78,7 @@ Added in 7.46.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_STREAM_DEPENDS "(3), " CURLOPT_STREAM_DEPENDS_E "(3), "
-.BR CURLOPT_PIPEWAIT "(3), " CURLMOPT_PIPELINING "(3), "
+.BR CURLMOPT_PIPELINING (3),
+.BR CURLOPT_PIPEWAIT (3),
+.BR CURLOPT_STREAM_DEPENDS (3),
+.BR CURLOPT_STREAM_DEPENDS_E (3)
diff --git a/docs/libcurl/opts/CURLOPT_SUPPRESS_CONNECT_HEADERS.3 b/docs/libcurl/opts/CURLOPT_SUPPRESS_CONNECT_HEADERS.3
index eba54bc37..75d74539b 100644
--- a/docs/libcurl/opts/CURLOPT_SUPPRESS_CONNECT_HEADERS.3
+++ b/docs/libcurl/opts/CURLOPT_SUPPRESS_CONNECT_HEADERS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_SUPPRESS_CONNECT_HEADERS 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_SUPPRESS_CONNECT_HEADERS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_SUPPRESS_CONNECT_HEADERS \- suppress proxy CONNECT response headers from user callbacks
@@ -74,19 +74,22 @@ Content-Type: application/json
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_HEADER, 1L);
- curl_easy_setopt(curl, CURLOPT_PROXY, "http://foo:3128");
- curl_easy_setopt(curl, CURLOPT_HTTPPROXYTUNNEL, 1L);
- curl_easy_setopt(curl, CURLOPT_SUPPRESS_CONNECT_HEADERS, 1L);
+ curl_easy_setopt(curl, CURLOPT_HEADER, 1L);
+ curl_easy_setopt(curl, CURLOPT_PROXY, "http://foo:3128");
+ curl_easy_setopt(curl, CURLOPT_HTTPPROXYTUNNEL, 1L);
+ curl_easy_setopt(curl, CURLOPT_SUPPRESS_CONNECT_HEADERS, 1L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
- /* always cleanup */
- curl_easy_cleanup(curl);
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -94,5 +97,6 @@ Added in 7.54.0
.SH RETURN VALUE
CURLE_OK or an error such as CURLE_UNKNOWN_OPTION.
.SH "SEE ALSO"
-.BR CURLOPT_HEADER "(3), " CURLOPT_PROXY "(3), "
-.BR CURLOPT_HTTPPROXYTUNNEL "(3), "
+.BR CURLOPT_HEADER (3),
+.BR CURLOPT_PROXY (3),
+.BR CURLOPT_HTTPPROXYTUNNEL (3)
diff --git a/docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.3 b/docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.3
index d635f8872..3d68cfbe9 100644
--- a/docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.3
+++ b/docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_TCP_FASTOPEN 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_TCP_FASTOPEN 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_TCP_FASTOPEN \- TCP Fast Open
@@ -35,20 +35,26 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_FASTOPEN, long enable);
.SH DESCRIPTION
Pass a long as parameter set to 1L to enable or 0 to disable.
-TCP Fast Open (RFC7413) is a mechanism that allows data to be carried in the
+TCP Fast Open (RFC 7413) is a mechanism that allows data to be carried in the
SYN and SYN-ACK packets and consumed by the receiving end during the initial
connection handshake, saving up to one full round-trip time (RTT).
+
+Beware: the TLS session cache does not work when TCP Fast Open is enabled. TCP
+Fast Open is also known to be problematic on or across certain networks.
.SH DEFAULT
0
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_TCP_FASTOPEN, 1L);
- curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_setopt(curl, CURLOPT_TCP_FASTOPEN, 1L);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
diff --git a/docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.3 b/docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.3
index f4e6c29e3..14fbb6486 100644
--- a/docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.3
+++ b/docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_TCP_KEEPALIVE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_TCP_KEEPALIVE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_TCP_KEEPALIVE \- TCP keep-alive probing
@@ -33,7 +33,7 @@ CURLOPT_TCP_KEEPALIVE \- TCP keep-alive probing
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_KEEPALIVE, long probe);
.fi
.SH DESCRIPTION
-Pass a long. If set to 1, TCP keepalive probes will be sent. The delay and
+Pass a long. If set to 1, TCP keepalive probes are used. The delay and
frequency of these probes can be controlled by the
\fICURLOPT_TCP_KEEPIDLE(3)\fP and \fICURLOPT_TCP_KEEPINTVL(3)\fP options,
provided the operating system supports them. Set to 0 (default behavior) to
@@ -44,20 +44,23 @@ disable keepalive probes
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* enable TCP keep-alive for this transfer */
- curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);
+ /* enable TCP keep-alive for this transfer */
+ curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);
- /* keep-alive idle time to 120 seconds */
- curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 120L);
+ /* keep-alive idle time to 120 seconds */
+ curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 120L);
- /* interval time between keep-alive probes: 60 seconds */
- curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L);
+ /* interval time between keep-alive probes: 60 seconds */
+ curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -65,4 +68,7 @@ Added in 7.25.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_TCP_KEEPIDLE "(3), " CURLOPT_TCP_KEEPINTVL "(3), "
+.BR CURLOPT_TCP_KEEPIDLE (3),
+.BR CURLOPT_TCP_KEEPINTVL (3),
+.BR CURLOPT_LOW_SPEED_LIMIT (3),
+.BR CURLOPT_MAX_RECV_SPEED_LARGE (3)
diff --git a/docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.3 b/docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.3
index 348ee269d..a0c4f650b 100644
--- a/docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.3
+++ b/docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_TCP_KEEPIDLE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_TCP_KEEPIDLE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_TCP_KEEPIDLE \- TCP keep-alive idle time wait
@@ -33,32 +33,35 @@ CURLOPT_TCP_KEEPIDLE \- TCP keep-alive idle time wait
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_KEEPIDLE, long delay);
.fi
.SH DESCRIPTION
-Pass a long. Sets the \fIdelay\fP, in seconds, that the operating system will
-wait while the connection is idle before sending keepalive probes. Not all
-operating systems support this option.
+Pass a long. Sets the \fIdelay\fP, in seconds, to wait while the connection is
+idle before sending keepalive probes. Not all operating systems support this
+option.
-The maximum value this accepts is 2147483648. Any larger value will be capped
-to this amount.
+The maximum value this accepts is 2147483648. Any larger value is capped to
+this amount.
.SH DEFAULT
60
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* enable TCP keep-alive for this transfer */
- curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);
+ /* enable TCP keep-alive for this transfer */
+ curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);
- /* set keep-alive idle time to 120 seconds */
- curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 120L);
+ /* set keep-alive idle time to 120 seconds */
+ curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 120L);
- /* interval time between keep-alive probes: 60 seconds */
- curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L);
+ /* interval time between keep-alive probes: 60 seconds */
+ curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -66,4 +69,5 @@ Added in 7.25.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_TCP_KEEPALIVE "(3), " CURLOPT_TCP_KEEPINTVL "(3), "
+.BR CURLOPT_TCP_KEEPALIVE (3),
+.BR CURLOPT_TCP_KEEPINTVL (3)
diff --git a/docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.3 b/docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.3
index b3923412e..e5f8b5702 100644
--- a/docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.3
+++ b/docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_TCP_KEEPINTVL 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_TCP_KEEPINTVL 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_TCP_KEEPINTVL \- TCP keep-alive interval
@@ -33,32 +33,34 @@ CURLOPT_TCP_KEEPINTVL \- TCP keep-alive interval
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_KEEPINTVL, long interval);
.fi
.SH DESCRIPTION
-Pass a long. Sets the interval, in seconds, that the operating system will
-wait between sending keepalive probes. Not all operating systems support this
-option. (Added in 7.25.0)
+Pass a long. Sets the interval, in seconds, to wait between sending keepalive
+probes. Not all operating systems support this option. (Added in 7.25.0)
-The maximum value this accepts is 2147483648. Any larger value will be capped
-to this amount.
+The maximum value this accepts is 2147483648. Any larger value is capped to
+this amount.
.SH DEFAULT
60
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* enable TCP keep-alive for this transfer */
- curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);
+ /* enable TCP keep-alive for this transfer */
+ curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);
- /* set keep-alive idle time to 120 seconds */
- curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 120L);
+ /* set keep-alive idle time to 120 seconds */
+ curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 120L);
- /* interval time between keep-alive probes: 60 seconds */
- curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L);
+ /* interval time between keep-alive probes: 60 seconds */
+ curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -66,4 +68,5 @@ Always
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_TCP_KEEPALIVE "(3), " CURLOPT_TCP_KEEPIDLE "(3), "
+.BR CURLOPT_TCP_KEEPALIVE (3),
+.BR CURLOPT_TCP_KEEPIDLE (3)
diff --git a/docs/libcurl/opts/CURLOPT_TCP_NODELAY.3 b/docs/libcurl/opts/CURLOPT_TCP_NODELAY.3
index cea6fe603..ba03f0c1f 100644
--- a/docs/libcurl/opts/CURLOPT_TCP_NODELAY.3
+++ b/docs/libcurl/opts/CURLOPT_TCP_NODELAY.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_TCP_NODELAY 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_TCP_NODELAY 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_TCP_NODELAY \- the TCP_NODELAY option
@@ -34,13 +34,13 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_NODELAY, long nodelay);
.fi
.SH DESCRIPTION
Pass a long specifying whether the \fITCP_NODELAY\fP option is to be set or
-cleared (1L = set, 0 = clear). The option is set by default. This will have no
+cleared (1L = set, 0 = clear). The option is set by default. This has no
effect after the connection has been established.
-Setting this option to 1L will disable TCP's Nagle algorithm on this
-connection. The purpose of this algorithm is to try to minimize the number of
-small packets on the network (where "small packets" means TCP segments less
-than the Maximum Segment Size for the network).
+Setting this option to 1L disables TCP's Nagle algorithm on connections
+created using this handle. The purpose of this algorithm is to try to minimize
+the number of small packets on the network (where "small packets" means TCP
+segments less than the Maximum Segment Size for the network).
Maximizing the amount of data sent per TCP segment is good because it
amortizes the overhead of the send. However, in some cases small segments may
@@ -53,12 +53,15 @@ overdone.
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* leave Nagle enabled */
- curl_easy_setopt(curl, CURLOPT_TCP_NODELAY, 0);
- curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ /* leave Nagle enabled */
+ curl_easy_setopt(curl, CURLOPT_TCP_NODELAY, 0);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -66,4 +69,6 @@ Always. The default was changed to 1 from 0 in 7.50.2.
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_SOCKOPTFUNCTION "(3), " CURLOPT_TCP_KEEPALIVE "(3), "
+.BR CURLOPT_BUFFERSIZE (3),
+.BR CURLOPT_SOCKOPTFUNCTION (3),
+.BR CURLOPT_TCP_KEEPALIVE (3)
diff --git a/docs/libcurl/opts/CURLOPT_TELNETOPTIONS.3 b/docs/libcurl/opts/CURLOPT_TELNETOPTIONS.3
index 5c2e497eb..308ddcd77 100644
--- a/docs/libcurl/opts/CURLOPT_TELNETOPTIONS.3
+++ b/docs/libcurl/opts/CURLOPT_TELNETOPTIONS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_TELNETOPTIONS 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_TELNETOPTIONS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_TELNETOPTIONS \- set of telnet options
@@ -44,16 +44,20 @@ NULL
TELNET
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- struct curl_slist *options;
- options = curl_slist_append(NULL, "TTTYPE=vt100");
- options = curl_slist_append(options, "USER=foobar");
- curl_easy_setopt(curl, CURLOPT_URL, "telnet://example.com/");
- curl_easy_setopt(curl, CURLOPT_TELNETOPTIONS, options);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
- curl_slist_free_all(options);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ struct curl_slist *options;
+ options = curl_slist_append(NULL, "TTTYPE=vt100");
+ options = curl_slist_append(options, "USER=foobar");
+ curl_easy_setopt(curl, CURLOPT_URL, "telnet://example.com/");
+ curl_easy_setopt(curl, CURLOPT_TELNETOPTIONS, options);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ curl_slist_free_all(options);
+ }
}
.fi
.SH AVAILABILITY
@@ -61,4 +65,5 @@ Along with TELNET
.SH RETURN VALUE
Returns CURLE_OK if TELNET is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_HTTPHEADER "(3), " CURLOPT_QUOTE "(3), "
+.BR CURLOPT_HTTPHEADER (3),
+.BR CURLOPT_QUOTE (3)
diff --git a/docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.3 b/docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.3
index 0bc67b280..f4e66a575 100644
--- a/docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.3
+++ b/docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_TFTP_BLKSIZE 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_TFTP_BLKSIZE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_TFTP_BLKSIZE \- TFTP block size
@@ -34,24 +34,28 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TFTP_BLKSIZE, long blocksize);
.fi
.SH DESCRIPTION
Specify \fIblocksize\fP to use for TFTP data transmission. Valid range as per
-RFC2348 is 8-65464 bytes. The default of 512 bytes will be used if this option
-is not specified. The specified block size will only be used pending support
-by the remote server. If the server does not return an option acknowledgment
-or returns an option acknowledgment with no block size, the default of 512
-bytes will be used.
+RFC 2348 is 8-65464 bytes. The default of 512 bytes is used if this option is
+not specified. The specified block size is only used if supported by the
+remote server. If the server does not return an option acknowledgment or
+returns an option acknowledgment with no block size, the default of 512 bytes
+is used.
.SH DEFAULT
512
.SH PROTOCOLS
TFTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "tftp://example.com/bootimage");
- /* try using larger blocks */
- curl_easy_setopt(curl, CURLOPT_TFTP_BLKSIZE, 2048L);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "tftp://example.com/bootimage");
+ /* try using larger blocks */
+ curl_easy_setopt(curl, CURLOPT_TFTP_BLKSIZE, 2048L);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -59,4 +63,5 @@ Added in 7.19.4
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_MAXFILESIZE "(3), "
+.BR CURLOPT_MAXFILESIZE (3)
+
diff --git a/docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.3 b/docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.3
index 1a7ac9d60..868a4ec03 100644
--- a/docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.3
+++ b/docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_TFTP_NO_OPTIONS 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_TFTP_NO_OPTIONS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_TFTP_NO_OPTIONS \- send no TFTP options requests
@@ -33,8 +33,8 @@ CURLOPT_TFTP_NO_OPTIONS \- send no TFTP options requests
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TFTP_NO_OPTIONS, long onoff);
.fi
.SH DESCRIPTION
-Set \fIonoff\fP to 1L to exclude all TFTP options defined in RFC2347, RFC2348
-and RFC2349 from read and write requests.
+Set \fIonoff\fP to 1L to exclude all TFTP options defined in RFC 2347,
+RFC 2348 and RFC 2349 from read and write requests.
This option improves interoperability with legacy servers that do not
acknowledge or properly implement TFTP options. When this option is used
@@ -50,24 +50,27 @@ size_t write_callback(char *ptr, size_t size, size_t nmemb, void *fp)
return fwrite(ptr, size, nmemb, (FILE *)fp);
}
-CURL *curl = curl_easy_init();
-if(curl) {
- FILE *fp = fopen("foo.bin", "wb");
- if(fp) {
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)fp);
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ FILE *fp = fopen("foo.bin", "wb");
+ if(fp) {
+ curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)fp);
+ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
- curl_easy_setopt(curl, CURLOPT_URL, "tftp://example.com/foo.bin");
+ curl_easy_setopt(curl, CURLOPT_URL, "tftp://example.com/foo.bin");
- /* do not send TFTP options requests */
- curl_easy_setopt(curl, CURLOPT_TFTP_NO_OPTIONS, 1L);
+ /* do not send TFTP options requests */
+ curl_easy_setopt(curl, CURLOPT_TFTP_NO_OPTIONS, 1L);
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
- fclose(fp);
+ fclose(fp);
+ }
+ curl_easy_cleanup(curl);
}
- curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
diff --git a/docs/libcurl/opts/CURLOPT_TIMECONDITION.3 b/docs/libcurl/opts/CURLOPT_TIMECONDITION.3
index 4735fecb8..509bb492e 100644
--- a/docs/libcurl/opts/CURLOPT_TIMECONDITION.3
+++ b/docs/libcurl/opts/CURLOPT_TIMECONDITION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_TIMECONDITION 3 "October 22, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_TIMECONDITION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_TIMECONDITION \- select condition for a time request
@@ -38,29 +38,32 @@ value is treated. You can set this parameter to \fICURL_TIMECOND_IFMODSINCE\fP
or \fICURL_TIMECOND_IFUNMODSINCE\fP.
The last modification time of a file is not always known and in such instances
-this feature will have no effect even if the given time condition would not
-have been met. \fIcurl_easy_getinfo(3)\fP with the
-\fICURLINFO_CONDITION_UNMET\fP option can be used after a transfer to learn if
-a zero-byte successful "transfer" was due to this condition not matching.
+this feature has no effect even if the given time condition would not have
+been met. \fIcurl_easy_getinfo(3)\fP with the \fICURLINFO_CONDITION_UNMET\fP
+option can be used after a transfer to learn if a zero-byte successful
+"transfer" was due to this condition not matching.
.SH DEFAULT
CURL_TIMECOND_NONE (0)
.SH PROTOCOLS
HTTP, FTP, RTSP, and FILE
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* January 1, 2020 is 1577833200 */
- curl_easy_setopt(curl, CURLOPT_TIMEVALUE, 1577833200L);
+ /* January 1, 2020 is 1577833200 */
+ curl_easy_setopt(curl, CURLOPT_TIMEVALUE, 1577833200L);
- /* If-Modified-Since the above time stamp */
- curl_easy_setopt(curl, CURLOPT_TIMECONDITION,
- (long)CURL_TIMECOND_IFMODSINCE);
+ /* If-Modified-Since the above time stamp */
+ curl_easy_setopt(curl, CURLOPT_TIMECONDITION,
+ (long)CURL_TIMECOND_IFMODSINCE);
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -68,4 +71,5 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_TIMEVALUE "(3), "
+.BR CURLOPT_TIMEVALUE (3),
+.BR CURLINFO_FILETIME (3)
diff --git a/docs/libcurl/opts/CURLOPT_TIMEOUT.3 b/docs/libcurl/opts/CURLOPT_TIMEOUT.3
index 3a81adc08..4ac186291 100644
--- a/docs/libcurl/opts/CURLOPT_TIMEOUT.3
+++ b/docs/libcurl/opts/CURLOPT_TIMEOUT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_TIMEOUT 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_TIMEOUT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_TIMEOUT \- maximum time the transfer is allowed to complete
@@ -34,37 +34,51 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEOUT, long timeout);
.fi
.SH DESCRIPTION
Pass a long as parameter containing \fItimeout\fP - the maximum time in
-seconds that you allow the libcurl transfer operation to take. Normally, name
-lookups can take a considerable time and limiting operations risk aborting
-perfectly normal operations. This option may cause libcurl to use the SIGALRM
-signal to timeout system calls.
+seconds that you allow the entire transfer operation to take. The whole thing,
+from start to end. Normally, name lookups can take a considerable time and
+limiting operations risk aborting perfectly normal operations.
-In unix-like systems, this might cause signals to be used unless
-\fICURLOPT_NOSIGNAL(3)\fP is set.
+\fICURLOPT_TIMEOUT_MS(3)\fP is the same function but set in milliseconds.
If both \fICURLOPT_TIMEOUT(3)\fP and \fICURLOPT_TIMEOUT_MS(3)\fP are set, the
-value set last will be used.
+value set last is used.
Since this option puts a hard limit on how long time a request is allowed to
-take, it has limited use in dynamic use cases with varying transfer times. That
-is especially apparent when using the multi interface, which may queue the
-transfer, and that time is included. You are advised to explore
+take, it has limited use in dynamic use cases with varying transfer
+times. That is especially apparent when using the multi interface, which may
+queue the transfer, and that time is included. You are advised to explore
\fICURLOPT_LOW_SPEED_LIMIT(3)\fP, \fICURLOPT_LOW_SPEED_TIME(3)\fP or using
\fICURLOPT_PROGRESSFUNCTION(3)\fP to implement your own timeout logic.
+
+The connection timeout set with \fICURLOPT_CONNECTTIMEOUT(3)\fP is included in
+this general all-covering timeout.
+
+With \fICURLOPT_CONNECTTIMEOUT(3)\fP set to 3 and \fICURLOPT_TIMEOUT(3)\fP set
+to 5, the operation can never last longer than 5 seconds.
+
+With \fICURLOPT_CONNECTTIMEOUT(3)\fP set to 4 and \fICURLOPT_TIMEOUT(3)\fP set
+to 2, the operation can never last longer than 2 seconds.
+
+This option may cause libcurl to use the SIGALRM signal to timeout system
+calls on builds not using asynch DNS. In unix-like systems, this might cause
+signals to be used unless \fICURLOPT_NOSIGNAL(3)\fP is set.
.SH DEFAULT
Default timeout is 0 (zero) which means it never times out during transfer.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* complete within 20 seconds */
- curl_easy_setopt(curl, CURLOPT_TIMEOUT, 20L);
+ /* complete within 20 seconds */
+ curl_easy_setopt(curl, CURLOPT_TIMEOUT, 20L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -73,5 +87,7 @@ Always
Returns CURLE_OK. Returns CURLE_BAD_FUNCTION_ARGUMENT if set to a negative
value or a value that when converted to milliseconds is too large.
.SH "SEE ALSO"
-.BR CURLOPT_TIMEOUT_MS "(3), "
-.BR CURLOPT_CONNECTTIMEOUT "(3), " CURLOPT_LOW_SPEED_LIMIT "(3), "
+.BR CURLOPT_CONNECTTIMEOUT (3),
+.BR CURLOPT_LOW_SPEED_LIMIT (3),
+.BR CURLOPT_TCP_KEEPALIVE (3),
+.BR CURLOPT_TIMEOUT_MS (3)
diff --git a/docs/libcurl/opts/CURLOPT_TIMEOUT_MS.3 b/docs/libcurl/opts/CURLOPT_TIMEOUT_MS.3
index d2f28e63b..d345bfb06 100644
--- a/docs/libcurl/opts/CURLOPT_TIMEOUT_MS.3
+++ b/docs/libcurl/opts/CURLOPT_TIMEOUT_MS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_TIMEOUT_MS 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_TIMEOUT_MS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_TIMEOUT_MS \- maximum time the transfer is allowed to complete
@@ -34,40 +34,26 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEOUT_MS, long timeout);
.fi
.SH DESCRIPTION
Pass a long as parameter containing \fItimeout\fP - the maximum time in
-milliseconds that you allow the libcurl transfer operation to take. Normally,
-name lookups can take a considerable time and limiting operations to less than
-a few minutes risk aborting perfectly normal operations. This option may cause
-libcurl to use the SIGALRM signal to timeout system calls.
+milliseconds that you allow the libcurl transfer operation to take.
-If libcurl is built to use the standard system name resolver, that portion of
-the transfer will still use full-second resolution for timeouts with a minimum
-timeout allowed of one second.
-
-In unix-like systems, this might cause signals to be used unless
-\fICURLOPT_NOSIGNAL(3)\fP is set.
-
-If both \fICURLOPT_TIMEOUT(3)\fP and \fICURLOPT_TIMEOUT_MS(3)\fP are set, the
-value set last will be used.
-
-Since this puts a hard limit for how long time a request is allowed to take,
-it has limited use in dynamic use cases with varying transfer times. You are
-then advised to explore \fICURLOPT_LOW_SPEED_LIMIT(3)\fP,
-\fICURLOPT_LOW_SPEED_TIME(3)\fP or using \fICURLOPT_PROGRESSFUNCTION(3)\fP to
-implement your own timeout logic.
+See \fICURLOPT_TIMEOUT(3)\fP for details.
.SH DEFAULT
Default timeout is 0 (zero) which means it never times out during transfer.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* complete within 20000 milliseconds */
- curl_easy_setopt(curl, CURLOPT_TIMEOUT_MS, 20000L);
+ /* complete within 20000 milliseconds */
+ curl_easy_setopt(curl, CURLOPT_TIMEOUT_MS, 20000L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -75,5 +61,7 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_TIMEOUT "(3), "
-.BR CURLOPT_CONNECTTIMEOUT "(3), " CURLOPT_LOW_SPEED_LIMIT "(3), "
+.BR CURLOPT_CONNECTTIMEOUT (3),
+.BR CURLOPT_LOW_SPEED_LIMIT (3),
+.BR CURLOPT_TCP_KEEPALIVE (3),
+.BR CURLOPT_TIMEOUT (3)
diff --git a/docs/libcurl/opts/CURLOPT_TIMEVALUE.3 b/docs/libcurl/opts/CURLOPT_TIMEVALUE.3
index fba5ceff2..7db54ed82 100644
--- a/docs/libcurl/opts/CURLOPT_TIMEVALUE.3
+++ b/docs/libcurl/opts/CURLOPT_TIMEVALUE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_TIMEVALUE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_TIMEVALUE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_TIMEVALUE \- time value for conditional
@@ -34,29 +34,33 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEVALUE, long val);
.fi
.SH DESCRIPTION
Pass a long \fIval\fP as parameter. This should be the time counted as seconds
-since 1 Jan 1970, and the time will be used in a condition as specified with
+since 1 Jan 1970, and the time is used in a condition as specified with
\fICURLOPT_TIMECONDITION(3)\fP.
-On systems with 32 bit 'long' variables, this option cannot set dates beyond
-the year 2038. Consider \fICURLOPT_TIMEVALUE_LARGE(3)\fP instead.
+On systems with 32 bit 'long' variables (such as Windows), this option cannot
+set dates beyond the year 2038. Consider \fICURLOPT_TIMEVALUE_LARGE(3)\fP
+instead.
.SH DEFAULT
0
.SH PROTOCOLS
HTTP, FTP, RTSP, and FILE
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* January 1, 2020 is 1577833200 */
- curl_easy_setopt(curl, CURLOPT_TIMEVALUE, 1577833200L);
+ /* January 1, 2020 is 1577833200 */
+ curl_easy_setopt(curl, CURLOPT_TIMEVALUE, 1577833200L);
- /* If-Modified-Since the above time stamp */
- curl_easy_setopt(curl, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE);
+ /* If-Modified-Since the above time stamp */
+ curl_easy_setopt(curl, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE);
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -64,4 +68,5 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_TIMECONDITION "(3), "
+.BR CURLOPT_TIMECONDITION (3),
+.BR CURLOPT_TIMEVALUE_LARGE (3)
diff --git a/docs/libcurl/opts/CURLOPT_TIMEVALUE_LARGE.3 b/docs/libcurl/opts/CURLOPT_TIMEVALUE_LARGE.3
index 2cd6915f5..4ba3ba535 100644
--- a/docs/libcurl/opts/CURLOPT_TIMEVALUE_LARGE.3
+++ b/docs/libcurl/opts/CURLOPT_TIMEVALUE_LARGE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_TIMEVALUE_LARGE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_TIMEVALUE_LARGE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_TIMEVALUE_LARGE \- time value for conditional
@@ -35,8 +35,8 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEVALUE_LARGE,
.fi
.SH DESCRIPTION
Pass a curl_off_t \fIval\fP as parameter. This should be the time counted as
-seconds since 1 Jan 1970, and the time will be used in a condition as
-specified with \fICURLOPT_TIMECONDITION(3)\fP.
+seconds since 1 Jan 1970, and the time is used in a condition as specified
+with \fICURLOPT_TIMECONDITION(3)\fP.
The difference between this option and \fICURLOPT_TIMEVALUE(3)\fP is the type
of the argument. On systems where 'long' is only 32 bit wide, this option has
@@ -47,18 +47,21 @@ to be used to set dates beyond the year 2038.
HTTP, FTP, RTSP, and FILE
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* January 1, 2020 is 1577833200 */
- curl_easy_setopt(curl, CURLOPT_TIMEVALUE_LARGE, (curl_off_t)1577833200);
+ /* January 1, 2020 is 1577833200 */
+ curl_easy_setopt(curl, CURLOPT_TIMEVALUE_LARGE, (curl_off_t)1577833200);
- /* If-Modified-Since the above time stamp */
- curl_easy_setopt(curl, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE);
+ /* If-Modified-Since the above time stamp */
+ curl_easy_setopt(curl, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE);
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -66,5 +69,6 @@ Added in 7.59.0.
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_TIMECONDITION "(3), "
-.BR CURLOPT_TIMEVALUE_LARGE "(3), "
+.BR CURLOPT_TIMECONDITION (3),
+.BR CURLOPT_TIMEVALUE (3),
+.BR CURLINFO_FILETIME (3)
diff --git a/docs/libcurl/opts/CURLOPT_TLS13_CIPHERS.3 b/docs/libcurl/opts/CURLOPT_TLS13_CIPHERS.3
index 66477f7db..caab09121 100644
--- a/docs/libcurl/opts/CURLOPT_TLS13_CIPHERS.3
+++ b/docs/libcurl/opts/CURLOPT_TLS13_CIPHERS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_TLS13_CIPHERS 3 "September 22, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_TLS13_CIPHERS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_TLS13_CIPHERS \- ciphers suites to use for TLS 1.3
@@ -37,12 +37,12 @@ Pass a char *, pointing to a null-terminated string holding the list of cipher
suites to use for the TLS 1.3 connection. The list must be syntactically
correct, it consists of one or more cipher suite strings separated by colons.
-you will find more details about cipher lists on this URL:
+Find more details about cipher lists 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 or Schannel. If you are using a different SSL backend you can try
+later, or Schannel. If you are using a different SSL backend you can try
setting TLS 1.3 cipher suites by using the \fICURLOPT_SSL_CIPHER_LIST(3)\fP
option.
@@ -54,13 +54,17 @@ NULL, use internal default
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_TLS13_CIPHERS,
- "TLS_CHACHA20_POLY1305_SHA256");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_TLS13_CIPHERS,
+ "TLS_CHACHA20_POLY1305_SHA256");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -70,6 +74,9 @@ Added in 7.85.0 for Schannel.
.SH RETURN VALUE
Returns CURLE_OK if supported, CURLE_NOT_BUILT_IN otherwise.
.SH "SEE ALSO"
-.BR CURLOPT_SSL_CIPHER_LIST "(3), " CURLOPT_SSLVERSION "(3), "
-.BR CURLOPT_PROXY_SSL_CIPHER_LIST "(3), " CURLOPT_PROXY_TLS13_CIPHERS "(3), "
-.BR CURLOPT_PROXY_SSLVERSION "(3), " CURLOPT_USE_SSL "(3), "
+.BR CURLOPT_PROXY_SSL_CIPHER_LIST (3),
+.BR CURLOPT_PROXY_SSLVERSION (3),
+.BR CURLOPT_PROXY_TLS13_CIPHERS (3),
+.BR CURLOPT_SSL_CIPHER_LIST (3),
+.BR CURLOPT_SSLVERSION (3),
+.BR CURLOPT_USE_SSL (3)
diff --git a/docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.3 b/docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.3
index b0c1552fe..a64d1ae7a 100644
--- a/docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.3
+++ b/docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_TLSAUTH_PASSWORD 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_TLSAUTH_PASSWORD 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_TLSAUTH_PASSWORD \- password to use for TLS authentication
@@ -48,14 +48,18 @@ NULL
All TLS-based protocols
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_TLSAUTH_TYPE, "SRP");
- curl_easy_setopt(curl, CURLOPT_TLSAUTH_USERNAME, "user");
- curl_easy_setopt(curl, CURLOPT_TLSAUTH_PASSWORD, "secret");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_TLSAUTH_TYPE, "SRP");
+ curl_easy_setopt(curl, CURLOPT_TLSAUTH_USERNAME, "user");
+ curl_easy_setopt(curl, CURLOPT_TLSAUTH_PASSWORD, "secret");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -64,4 +68,6 @@ Added in 7.21.4, with the OpenSSL and GnuTLS backends only
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_TLSAUTH_TYPE "(3), " CURLOPT_TLSAUTH_USERNAME "(3), "
+.BR CURLOPT_PROXY_TLSAUTH_PASSWORD (3),
+.BR CURLOPT_TLSAUTH_TYPE (3),
+.BR CURLOPT_TLSAUTH_USERNAME (3)
diff --git a/docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.3 b/docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.3
index d043d6609..1f8e520cf 100644
--- a/docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.3
+++ b/docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_TLSAUTH_TYPE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_TLSAUTH_TYPE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_TLSAUTH_TYPE \- TLS authentication methods
@@ -38,7 +38,7 @@ the method of the TLS authentication. Supported method is "SRP".
.IP SRP
TLS-SRP authentication. Secure Remote Password authentication for TLS is
-defined in RFC5054 and provides mutual authentication if both sides have a
+defined in RFC 5054 and provides mutual authentication if both sides have a
shared secret. To use TLS-SRP, you must also set the
\fICURLOPT_TLSAUTH_USERNAME(3)\fP and \fICURLOPT_TLSAUTH_PASSWORD(3)\fP
options.
@@ -53,14 +53,18 @@ blank
All TLS-based protocols
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_TLSAUTH_TYPE, "SRP");
- curl_easy_setopt(curl, CURLOPT_TLSAUTH_USERNAME, "user");
- curl_easy_setopt(curl, CURLOPT_TLSAUTH_PASSWORD, "secret");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_TLSAUTH_TYPE, "SRP");
+ curl_easy_setopt(curl, CURLOPT_TLSAUTH_USERNAME, "user");
+ curl_easy_setopt(curl, CURLOPT_TLSAUTH_PASSWORD, "secret");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -69,4 +73,5 @@ to work. Added in 7.21.4
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_TLSAUTH_USERNAME "(3), " CURLOPT_TLSAUTH_PASSWORD "(3), "
+.BR CURLOPT_TLSAUTH_USERNAME (3),
+.BR CURLOPT_TLSAUTH_PASSWORD (3)
diff --git a/docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.3 b/docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.3
index 6fdc33bbb..7e800f03f 100644
--- a/docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.3
+++ b/docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_TLSAUTH_USERNAME 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_TLSAUTH_USERNAME 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_TLSAUTH_USERNAME \- user name to use for TLS authentication
@@ -48,14 +48,18 @@ NULL
All TLS-based protocols
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
- curl_easy_setopt(curl, CURLOPT_TLSAUTH_TYPE, "SRP");
- curl_easy_setopt(curl, CURLOPT_TLSAUTH_USERNAME, "user");
- curl_easy_setopt(curl, CURLOPT_TLSAUTH_PASSWORD, "secret");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
+ curl_easy_setopt(curl, CURLOPT_TLSAUTH_TYPE, "SRP");
+ curl_easy_setopt(curl, CURLOPT_TLSAUTH_USERNAME, "user");
+ curl_easy_setopt(curl, CURLOPT_TLSAUTH_PASSWORD, "secret");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -64,4 +68,5 @@ Added in 7.21.4, with the OpenSSL and GnuTLS backends only
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_TLSAUTH_TYPE "(3), " CURLOPT_TLSAUTH_PASSWORD "(3), "
+.BR CURLOPT_TLSAUTH_TYPE (3),
+.BR CURLOPT_TLSAUTH_PASSWORD (3)
diff --git a/docs/libcurl/opts/CURLOPT_TRAILERDATA.3 b/docs/libcurl/opts/CURLOPT_TRAILERDATA.3
index b12bba7e9..1fb97fee2 100644
--- a/docs/libcurl/opts/CURLOPT_TRAILERDATA.3
+++ b/docs/libcurl/opts/CURLOPT_TRAILERDATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_TRAILERDATA 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_TRAILERDATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_TRAILERDATA \- pointer passed to trailing headers callback
@@ -40,11 +40,18 @@ NULL
HTTP
.SH EXAMPLE
.nf
-/* Assuming we have a CURL handle in the hndl variable. */
+struct MyData {
+ void *custom;
+};
-struct MyData data;
-
-curl_easy_setopt(hndl, CURLOPT_TRAILERDATA, &data);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ struct MyData data;
+ curl_easy_setopt(curl, CURLOPT_TRAILERDATA, &data);
+ }
+}
.fi
A more complete example can be found in examples/http_trailers.html
@@ -53,4 +60,5 @@ This option was added in curl 7.64.0 and is present if HTTP support is enabled
.SH RETURN VALUE
Returns CURLE_OK.
.SH "SEE ALSO"
-.BR CURLOPT_TRAILERFUNCTION "(3), "
+.BR CURLOPT_TRAILERFUNCTION (3),
+.BR CURLOPT_WRITEFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_TRAILERFUNCTION.3 b/docs/libcurl/opts/CURLOPT_TRAILERFUNCTION.3
index caa5880b5..04a8a05e6 100644
--- a/docs/libcurl/opts/CURLOPT_TRAILERFUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_TRAILERFUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_TRAILERFUNCTION 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_TRAILERFUNCTION 3 "September 26, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_TRAILERFUNCTION \- callback for sending trailing headers
@@ -38,23 +38,23 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TRAILERFUNCTION,
.SH DESCRIPTION
Pass a pointer to a callback function.
-This callback function will be called once right before sending the final
-CR LF in an HTTP chunked transfer to fill a list of trailing headers to be
-sent before finishing the HTTP transfer.
+This callback function is called once right before sending the final CR LF in
+an HTTP chunked transfer to fill a list of trailing headers to be sent before
+finishing the HTTP transfer.
You can set the userdata argument with the \fICURLOPT_TRAILERDATA(3)\fP
option.
The trailing headers included in the linked list must not be CRLF-terminated,
-because libcurl will add the appropriate line termination characters after
-each header item.
+because libcurl adds the appropriate line termination characters after each
+header item.
If you use curl_slist_append to add trailing headers to the curl_slist then
-libcurl will duplicate the strings, and will free the curl_slist and the
-duplicates once the trailers have been sent.
+libcurl duplicates the strings, and frees the curl_slist and the duplicates
+once the trailers have been sent.
-If one of the trailing header fields is not formatted correctly it will be
-ignored and an info message will be emitted.
+If one of the trailing header fields is not formatted correctly it is ignored
+and an info message is emitted.
The return value can either be \fBCURL_TRAILERFUNC_OK\fP or
\fBCURL_TRAILERFUNC_ABORT\fP which would respectively instruct libcurl to
@@ -71,7 +71,7 @@ HTTP
static int trailer_cb(struct curl_slist **tr, void *data)
{
- /* libcurl will free the list */
+ /* libcurl frees the list */
*tr = curl_slist_append(*tr, "My-super-awesome-trailer: trailer-stuff");
return CURL_TRAILERFUNC_OK;
}
@@ -83,7 +83,7 @@ if(curl) {
/* Now set it as a put */
curl_easy_setopt(curl, CURLOPT_PUT, 1L);
- /* Assuming we have a function that will return the data to be pushed
+ /* Assuming we have a function that returns the data to be pushed
Let that function be read_cb */
curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_cb);
@@ -94,7 +94,7 @@ if(curl) {
/* Set the trailers filling callback */
curl_easy_setopt(curl, CURLOPT_TRAILERFUNCTION, trailer_cb);
- /* Perform the request, res will get the return code */
+ /* Perform the transfer */
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
@@ -106,4 +106,6 @@ This option was added in curl 7.64.0 and is present if HTTP support is enabled
.SH RETURN VALUE
Returns CURLE_OK.
.SH "SEE ALSO"
-.BR CURLOPT_TRAILERDATA "(3), "
+.BR CURLOPT_TRAILERDATA (3),
+.BR CURLOPT_WRITEFUNCTION (3)
+
diff --git a/docs/libcurl/opts/CURLOPT_TRANSFERTEXT.3 b/docs/libcurl/opts/CURLOPT_TRANSFERTEXT.3
index 344e28baf..591b39304 100644
--- a/docs/libcurl/opts/CURLOPT_TRANSFERTEXT.3
+++ b/docs/libcurl/opts/CURLOPT_TRANSFERTEXT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_TRANSFERTEXT 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_TRANSFERTEXT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_TRANSFERTEXT \- request a text based transfer for FTP
@@ -48,12 +48,16 @@ simply sets the mode to ASCII and performs a standard transfer.
FTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/textfile");
- curl_easy_setopt(curl, CURLOPT_TRANSFERTEXT, 1L);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/textfile");
+ curl_easy_setopt(curl, CURLOPT_TRANSFERTEXT, 1L);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -61,4 +65,5 @@ Along with FTP
.SH RETURN VALUE
Returns CURLE_OK if FTP is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_CRLF "(3), "
+.BR CURLOPT_CRLF (3)
+
diff --git a/docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.3 b/docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.3
index a8c2e9b70..4a60bd3de 100644
--- a/docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.3
+++ b/docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_TRANSFER_ENCODING 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_TRANSFER_ENCODING 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_TRANSFER_ENCODING \- ask for HTTP Transfer Encoding
@@ -38,8 +38,8 @@ Pass a long set to 1L to \fIenable\fP or 0 to disable.
Adds a request for compressed Transfer Encoding in the outgoing HTTP
request. If the server supports this and so desires, it can respond with the
-HTTP response sent using a compressed Transfer-Encoding that will be
-automatically uncompressed by libcurl on reception.
+HTTP response sent using a compressed Transfer-Encoding that is automatically
+uncompressed by libcurl on reception.
Transfer-Encoding differs slightly from the Content-Encoding you ask for with
\fICURLOPT_ACCEPT_ENCODING(3)\fP in that a Transfer-Encoding is strictly meant
@@ -52,11 +52,14 @@ by both HTTP clients and HTTP servers.
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_TRANSFER_ENCODING, 1L);
- curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_setopt(curl, CURLOPT_TRANSFER_ENCODING, 1L);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -64,4 +67,5 @@ Added in 7.21.6
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_ACCEPT_ENCODING "(3), " CURLOPT_HTTP_TRANSFER_DECODING "(3), "
+.BR CURLOPT_ACCEPT_ENCODING (3),
+.BR CURLOPT_HTTP_TRANSFER_DECODING (3)
diff --git a/docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.3 b/docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.3
index 5d70f72db..6af59d22b 100644
--- a/docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.3
+++ b/docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_UNIX_SOCKET_PATH 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_UNIX_SOCKET_PATH 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_UNIX_SOCKET_PATH \- Unix domain socket
@@ -33,14 +33,13 @@ CURLOPT_UNIX_SOCKET_PATH \- Unix domain socket
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UNIX_SOCKET_PATH, char *path);
.fi
.SH DESCRIPTION
-Enables the use of Unix domain sockets as connection endpoint and sets the path
-to \fIpath\fP. If \fIpath\fP is NULL, then Unix domain sockets are disabled. An
-empty string will result in an error at some point, it will not disable use of
-Unix domain sockets.
+Enables the use of Unix domain sockets as connection endpoint and sets the
+path to \fIpath\fP. If \fIpath\fP is NULL, then Unix domain sockets are
+disabled.
-When enabled, curl will connect to the Unix domain socket instead of
-establishing a TCP connection to a host. Since no TCP connection is created,
-curl does not need to resolve the DNS hostname in the URL.
+When enabled, curl connects to the Unix domain socket instead of establishing
+a TCP connection to the host. Since no network connection is created, curl
+does not resolve the DNS hostname in the URL.
The maximum path length on Cygwin, Linux and Solaris is 107. On other platforms
it might be even less.
@@ -58,16 +57,21 @@ Default is NULL, meaning that no Unix domain sockets are used.
All protocols except for FILE and FTP are supported in theory. HTTP, IMAP,
POP3 and SMTP should in particular work (including their SSL/TLS variants).
.SH EXAMPLE
-Given that you have an HTTP server running listening on /tmp/httpd.sock, you
-can request an HTTP resource with:
-
.nf
- curl_easy_setopt(curl_handle, CURLOPT_UNIX_SOCKET_PATH, "/tmp/httpd.sock");
- curl_easy_setopt(curl_handle, CURLOPT_URL, "http://localhost/");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_UNIX_SOCKET_PATH, "/tmp/httpd.sock");
+ curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/");
+
+ curl_easy_perform(curl);
+ }
+}
.fi
If you are on Linux and somehow have a need for paths larger than 107 bytes,
-you could use the proc filesystem to bypass the limitation:
+you can use the proc filesystem to bypass the limitation:
.nf
int dirfd = open(long_directory_path_to_socket, O_DIRECTORY | O_RDONLY);
@@ -81,5 +85,6 @@ Added in 7.40.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_ABSTRACT_UNIX_SOCKET "(3), "
-.BR CURLOPT_OPENSOCKETFUNCTION "(3), " unix "(7), "
+.BR CURLOPT_ABSTRACT_UNIX_SOCKET (3),
+.BR CURLOPT_OPENSOCKETFUNCTION (3),
+.BR unix (7)
diff --git a/docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.3 b/docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.3
index ced223464..75ea315fe 100644
--- a/docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.3
+++ b/docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_UNRESTRICTED_AUTH 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_UNRESTRICTED_AUTH 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_UNRESTRICTED_AUTH \- send credentials to other hosts too
@@ -38,31 +38,35 @@ authentication (user+password) credentials when following locations, even when
hostname changed. This option is meaningful only when setting
\fICURLOPT_FOLLOWLOCATION(3)\fP.
-Further, when this option is not used or set to \fB0L\fP, libcurl will not
-send custom set nor internally generated Authentication: headers on requests
-done to other hosts than the one used for the initial URL.
+Further, when this option is not used or set to \fB0L\fP, libcurl does not
+send custom nor internally generated Authentication: headers on requests done
+to other hosts than the one used for the initial URL.
-By default, libcurl will only send credentials and Authentication headers to
-the initial host name as given in the original URL, to avoid leaking username
-+ password to other sites.
+By default, libcurl only sends credentials and Authentication headers to the
+initial host name as given in the original URL, to avoid leaking username +
+password to other sites.
This option should be used with caution: when curl follows redirects it
blindly fetches the next URL as instructed by the server. Setting
-\fICURLOPT_UNRESTRICTED_AUTH(3)\fP to 1L will therefore also make curl trust
-the server and send possibly sensitive credentials to a host the server points
-out.
+\fICURLOPT_UNRESTRICTED_AUTH(3)\fP to 1L therefore also makes curl trust the
+server and sends possibly sensitive credentials to any host the server points
+out. And then maybe again and again as the following hosts can keep
+redirecting to new hosts.
.SH DEFAULT
0
.SH PROTOCOLS
HTTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
- curl_easy_setopt(curl, CURLOPT_UNRESTRICTED_AUTH, 1L);
- curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+ curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
+ curl_easy_setopt(curl, CURLOPT_UNRESTRICTED_AUTH, 1L);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -70,4 +74,8 @@ Along with HTTP
.SH RETURN VALUE
Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_FOLLOWLOCATION "(3), " CURLOPT_USERPWD "(3), "
+.BR CURLOPT_FOLLOWLOCATION (3),
+.BR CURLOPT_USERPWD (3),
+.BR CURLOPT_MAXREDIRS (3),
+.BR CURLOPT_REDIR_PROTOCOLS_STR (3),
+.BR CURLINFO_REDIRECT_COUNT (3)
diff --git a/docs/libcurl/opts/CURLOPT_UPKEEP_INTERVAL_MS.3 b/docs/libcurl/opts/CURLOPT_UPKEEP_INTERVAL_MS.3
index 5e6c6fab3..dd1e3cf47 100644
--- a/docs/libcurl/opts/CURLOPT_UPKEEP_INTERVAL_MS.3
+++ b/docs/libcurl/opts/CURLOPT_UPKEEP_INTERVAL_MS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_UPKEEP_INTERVAL_MS 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_UPKEEP_INTERVAL_MS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_UPKEEP_INTERVAL_MS \- connection upkeep interval
@@ -52,27 +52,30 @@ CURL_UPKEEP_INTERVAL_DEFAULT (currently defined as 60000L, which is 60 seconds)
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- /* Make a connection to an HTTP/2 server. */
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ /* Make a connection to an HTTP/2 server. */
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* Set the interval to 30000ms / 30s */
- curl_easy_setopt(curl, CURLOPT_UPKEEP_INTERVAL_MS, 30000L);
+ /* Set the interval to 30000ms / 30s */
+ curl_easy_setopt(curl, CURLOPT_UPKEEP_INTERVAL_MS, 30000L);
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
- /* Perform more work here. */
+ /* Perform more work here. */
- /* While the connection is being held open, curl_easy_upkeep() can be
- called. If curl_easy_upkeep() is called and the time since the last
- upkeep exceeds the interval, then an HTTP/2 PING is sent. */
- curl_easy_upkeep(curl);
+ /* While the connection is being held open, curl_easy_upkeep() can be
+ called. If curl_easy_upkeep() is called and the time since the last
+ upkeep exceeds the interval, then an HTTP/2 PING is sent. */
+ curl_easy_upkeep(curl);
- /* Perform more work here. */
+ /* Perform more work here. */
- /* always cleanup */
- curl_easy_cleanup(curl);
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -81,4 +84,3 @@ Added in 7.62.0
Returns CURLE_OK
.SH SEE ALSO
.BR CURLOPT_TCP_KEEPALIVE "(3), "
-
diff --git a/docs/libcurl/opts/CURLOPT_UPLOAD.3 b/docs/libcurl/opts/CURLOPT_UPLOAD.3
index 5c78f1f2c..c5704d6d6 100644
--- a/docs/libcurl/opts/CURLOPT_UPLOAD.3
+++ b/docs/libcurl/opts/CURLOPT_UPLOAD.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_UPLOAD 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_UPLOAD 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_UPLOAD \- data upload
@@ -43,35 +43,51 @@ Using PUT with HTTP 1.1 implies the use of a "Expect: 100-continue" header.
You can disable this header with \fICURLOPT_HTTPHEADER(3)\fP as usual.
If you use PUT to an HTTP 1.1 server, you can upload data without knowing the
-size before starting the transfer if you use chunked encoding. You enable this
-by adding a header like "Transfer-Encoding: chunked" with
-\fICURLOPT_HTTPHEADER(3)\fP. With HTTP 1.0 or without chunked transfer, you
-must specify the size.
+size before starting the transfer. The library enables this by adding a header
+"Transfer-Encoding: chunked". With HTTP 1.0 or if you prefer not to use chunked
+transfer, you must specify the size of the data with
+\fICURLOPT_INFILESIZE(3)\fP or \fICURLOPT_INFILESIZE_LARGE(3)\fP.
.SH DEFAULT
0, default is download
.SH PROTOCOLS
Most
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- /* we want to use our own read function */
- curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
+static size_t read_cb(char *ptr, size_t size, size_t nmemb, void *userdata)
+{
+ FILE *src = userdata;
+ /* copy as much data as possible into the 'ptr' buffer, but no more than
+ 'size' * 'nmemb' bytes! */
+ size_t retcode = fread(ptr, size, nmemb, src);
- /* enable uploading */
- curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
+ return retcode;
+}
+
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ FILE *src = fopen("local-file", "r");
+ curl_off_t fsize; /* set this to the size of the input file */
+
+ /* we want to use our own read function */
+ curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_cb);
+
+ /* enable uploading */
+ curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
- /* specify target */
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/dir/to/newfile");
+ /* specify target */
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/dir/to/newfile");
- /* now specify which pointer to pass to our callback */
- curl_easy_setopt(curl, CURLOPT_READDATA, hd_src);
+ /* now specify which pointer to pass to our callback */
+ curl_easy_setopt(curl, CURLOPT_READDATA, src);
- /* Set the size of the file to upload */
- curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t)fsize);
+ /* Set the size of the file to upload */
+ curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t)fsize);
- /* Now run off and do what you have been told! */
- curl_easy_perform(curl);
+ /* Now run off and do what you have been told! */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -79,5 +95,6 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_PUT "(3), " CURLOPT_READFUNCTION "(3), "
-.BR CURLOPT_INFILESIZE_LARGE "(3), "
+.BR CURLOPT_PUT (3),
+.BR CURLOPT_READFUNCTION (3),
+.BR CURLOPT_INFILESIZE_LARGE (3)
diff --git a/docs/libcurl/opts/CURLOPT_UPLOAD_BUFFERSIZE.3 b/docs/libcurl/opts/CURLOPT_UPLOAD_BUFFERSIZE.3
index ca5f1fbc0..3e5079bab 100644
--- a/docs/libcurl/opts/CURLOPT_UPLOAD_BUFFERSIZE.3
+++ b/docs/libcurl/opts/CURLOPT_UPLOAD_BUFFERSIZE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_UPLOAD_BUFFERSIZE 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_UPLOAD_BUFFERSIZE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_UPLOAD_BUFFERSIZE \- upload buffer size
@@ -36,7 +36,7 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UPLOAD_BUFFERSIZE, long size);
Pass a long specifying your preferred \fIsize\fP (in bytes) for the upload
buffer in libcurl. It makes libcurl uses a larger buffer that gets passed to
the next layer in the stack to get sent off. In some setups and for some
-protocols, there's a huge performance benefit of having a larger upload
+protocols, there is a huge performance benefit of having a larger upload
buffer.
This is just treated as a request, not an order. You cannot be guaranteed to
@@ -46,8 +46,8 @@ The upload buffer size is by default 64 kilobytes. The maximum buffer size
allowed to be set is 2 megabytes. The minimum buffer size allowed to be set is
16 kilobytes.
-Since curl 7.61.1 the upload buffer is allocated on-demand - so if the handle
-is not used for upload, this buffer will not be allocated at all.
+The upload buffer is allocated on-demand - so if the handle is not used for
+upload, this buffer is not allocated at all.
DO NOT set this option on a handle that is currently used for an active
transfer as that may lead to unintended consequences.
@@ -57,16 +57,20 @@ transfer as that may lead to unintended consequences.
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/foo.bin");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/foo.bin");
- /* ask libcurl to allocate a larger upload buffer */
- curl_easy_setopt(curl, CURLOPT_UPLOAD_BUFFERSIZE, 120000L);
+ /* ask libcurl to allocate a larger upload buffer */
+ curl_easy_setopt(curl, CURLOPT_UPLOAD_BUFFERSIZE, 120000L);
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -74,4 +78,6 @@ Added in 7.62.0.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_BUFFERSIZE "(3), " CURLOPT_READFUNCTION "(3), "
+.BR CURLOPT_BUFFERSIZE (3),
+.BR CURLOPT_READFUNCTION (3),
+.BR CURLOPT_TCP_NODELAY (3)
diff --git a/docs/libcurl/opts/CURLOPT_URL.3 b/docs/libcurl/opts/CURLOPT_URL.3
index 948401031..7bb6b355c 100644
--- a/docs/libcurl/opts/CURLOPT_URL.3
+++ b/docs/libcurl/opts/CURLOPT_URL.3
@@ -1,3 +1,4 @@
+
.\" **************************************************************************
.\" * _ _ ____ _
.\" * Project ___| | | | _ \| |
@@ -5,7 +6,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +23,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_URL 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_URL 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_URL \- URL for this transfer
@@ -39,38 +40,40 @@ format:
scheme://host:port/path
-For a greater explanation of the format please see RFC3986.
+For a greater explanation of the format please see RFC 3986.
-libcurl does not validate the syntax or use this variable until the transfer is
-issued. Even if you set a crazy value here, \fIcurl_easy_setopt(3)\fP will
+libcurl does not validate the syntax or use the URL until the transfer is
+started. Even if you set a crazy value here, \fIcurl_easy_setopt(3)\fP might
still return \fICURLE_OK\fP.
If the given URL is missing a scheme name (such as "http://" or "ftp://" etc)
-then libcurl will make a guess based on the host. If the outermost sub-domain
-name matches DICT, FTP, IMAP, LDAP, POP3 or SMTP then that protocol will be
-used, otherwise HTTP will be used. Since 7.45.0 guessing can be disabled by
-setting a default protocol, see \fICURLOPT_DEFAULT_PROTOCOL(3)\fP for details.
-
-Should the protocol, either that specified by the scheme or deduced by libcurl
-from the host name, not be supported by libcurl then
-\fICURLE_UNSUPPORTED_PROTOCOL\fP will be returned from either the
+then libcurl guesses based on the host. If the outermost subdomain name
+matches DICT, FTP, IMAP, LDAP, POP3 or SMTP then that protocol gets used,
+otherwise HTTP is used. Since 7.45.0 guessing can be disabled by setting a
+default protocol, see \fICURLOPT_DEFAULT_PROTOCOL(3)\fP for details.
+
+Should the protocol, either as specified by the URL scheme or deduced by
+libcurl from the host name, not be supported by libcurl then
+\fICURLE_UNSUPPORTED_PROTOCOL\fP is returned from either the
\fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP functions when you
call them. Use \fIcurl_version_info(3)\fP for detailed information of which
protocols are supported by the build of libcurl you are using.
-\fICURLOPT_PROTOCOLS(3)\fP can be used to limit what protocols libcurl will
+\fICURLOPT_PROTOCOLS_STR(3)\fP can be used to limit what protocols libcurl may
use for this transfer, independent of what libcurl has been compiled to
support. That may be useful if you accept the URL from an external source and
want to limit the accessibility.
-The \fICURLOPT_URL(3)\fP string will be ignored if \fICURLOPT_CURLU(3)\fP is
-set.
+The \fICURLOPT_URL(3)\fP string is ignored if \fICURLOPT_CURLU(3)\fP is set.
-\fICURLOPT_URL(3)\fP or \fICURLOPT_CURLU(3)\fP \fBmust\fP be set before a
+Either \fICURLOPT_URL(3)\fP or \fICURLOPT_CURLU(3)\fP must be set before a
transfer is started.
The application does not have to keep the string around after setting this
option.
+
+The parser used for handling the URL set with \fICURLOPT_URL(3)\fP is the same
+that \fIcurl_url_set(3)\fP uses.
.SH ENCODING
The string pointed to in the \fICURLOPT_URL(3)\fP argument is generally
expected to be a sequence of characters using an ASCII compatible encoding.
@@ -88,8 +91,8 @@ performed.
Applications may at times find it convenient to allow users to specify URLs
for various purposes and that string would then end up fed to this option.
-Getting a URL from an external untrusted party will bring reasons for several
-security concerns:
+Getting a URL from an external untrusted party brings several security
+concerns:
If you have an application that runs as or in a server application, getting an
unfiltered URL can easily trick your application to access a local resource
@@ -111,11 +114,14 @@ User provided URLs can also be made to point to sites that redirect further on
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
-
- curl_easy_perform(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -124,11 +130,16 @@ POP3 and SMTP were added in 7.31.0
Returns CURLE_OK on success or CURLE_OUT_OF_MEMORY if there was insufficient
heap space.
-Note that \fIcurl_easy_setopt(3)\fP will not actually parse the given string so
-given a bad URL, it will not be detected until \fIcurl_easy_perform(3)\fP or
-similar is called.
+Note that \fIcurl_easy_setopt(3)\fP does not parse the given string so given a
+bad URL, it is not detected until \fIcurl_easy_perform(3)\fP or similar is
+called.
.SH "SEE ALSO"
-.BR CURLOPT_VERBOSE "(3), " CURLOPT_PROTOCOLS "(3), "
-.BR CURLOPT_FORBID_REUSE "(3), " CURLOPT_FRESH_CONNECT "(3), "
-.BR curl_easy_perform "(3), "
-.BR CURLINFO_REDIRECT_URL "(3), " CURLOPT_PATH_AS_IS "(3), " CURLOPT_CURLU "(3), "
+.BR curl_easy_perform (3),
+.BR curl_url_get (3),
+.BR curl_url_set (3),
+.BR CURLINFO_REDIRECT_URL (3),
+.BR CURLOPT_CURLU (3),
+.BR CURLOPT_FORBID_REUSE (3),
+.BR CURLOPT_FRESH_CONNECT (3),
+.BR CURLOPT_PATH_AS_IS (3),
+.BR CURLOPT_PROTOCOLS (3)
diff --git a/docs/libcurl/opts/CURLOPT_USERAGENT.3 b/docs/libcurl/opts/CURLOPT_USERAGENT.3
index 6b31eea8c..d98b768d6 100644
--- a/docs/libcurl/opts/CURLOPT_USERAGENT.3
+++ b/docs/libcurl/opts/CURLOPT_USERAGENT.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_USERAGENT 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_USERAGENT 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_USERAGENT \- HTTP user-agent header
@@ -33,10 +33,9 @@ CURLOPT_USERAGENT \- HTTP user-agent header
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_USERAGENT, char *ua);
.fi
.SH DESCRIPTION
-Pass a pointer to a null-terminated string as parameter. It will be used to
-set the User-Agent: header in the HTTP request sent to the remote server. This
-can be used to fool servers or scripts. You can also set any custom header
-with \fICURLOPT_HTTPHEADER(3)\fP.
+Pass a pointer to a null-terminated string as parameter. It is used to set the
+User-Agent: header field in the HTTP request sent to the remote server. You
+can also set any custom header with \fICURLOPT_HTTPHEADER(3)\fP.
The application does not have to keep the string around after setting this
option.
@@ -46,13 +45,16 @@ NULL, no User-Agent: header is used by default.
HTTP, HTTPS
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- curl_easy_setopt(curl, CURLOPT_USERAGENT, "Dark Secret Ninja/1.0");
+ curl_easy_setopt(curl, CURLOPT_USERAGENT, "Dark Secret Ninja/1.0");
- curl_easy_perform(curl);
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -61,4 +63,8 @@ As long as HTTP is supported
Returns CURLE_OK if HTTP is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_REFERER "(3), " CURLOPT_HTTPHEADER "(3), "
+.BR CURLOPT_CUSTOMREQUEST (3),
+.BR CURLOPT_HTTPHEADER (3),
+.BR CURLOPT_REFERER (3),
+.BR CURLOPT_REQUEST_TARGET (3)
+
diff --git a/docs/libcurl/opts/CURLOPT_USERNAME.3 b/docs/libcurl/opts/CURLOPT_USERNAME.3
index fa59bc9d0..1ce86f547 100644
--- a/docs/libcurl/opts/CURLOPT_USERNAME.3
+++ b/docs/libcurl/opts/CURLOPT_USERNAME.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_USERNAME 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_USERNAME 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_USERNAME \- user name to use in authentication
@@ -67,15 +67,19 @@ blank
Most
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- curl_easy_setopt(curl, CURLOPT_USERNAME, "clark");
+ curl_easy_setopt(curl, CURLOPT_USERNAME, "clark");
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -84,5 +88,7 @@ Added in 7.19.1
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_USERPWD "(3), " CURLOPT_PASSWORD "(3), "
-.BR CURLOPT_HTTPAUTH "(3), " CURLOPT_PROXYAUTH "(3)"
+.BR CURLOPT_USERPWD (3),
+.BR CURLOPT_PASSWORD (3),
+.BR CURLOPT_HTTPAUTH (3),
+.BR CURLOPT_PROXYAUTH (3)
diff --git a/docs/libcurl/opts/CURLOPT_USERPWD.3 b/docs/libcurl/opts/CURLOPT_USERPWD.3
index 8f6ad6ba2..d8383b87f 100644
--- a/docs/libcurl/opts/CURLOPT_USERPWD.3
+++ b/docs/libcurl/opts/CURLOPT_USERPWD.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_USERPWD 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_USERPWD 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_USERPWD \- user name and password to use in authentication
@@ -53,17 +53,17 @@ Some HTTP servers (on Windows) support inclusion of the domain for Basic
authentication as well.
When using HTTP and \fICURLOPT_FOLLOWLOCATION(3)\fP, libcurl might perform
-several requests to possibly different hosts. libcurl will only send this user
-and password information to hosts using the initial host name (unless
-\fICURLOPT_UNRESTRICTED_AUTH(3)\fP is set), so if libcurl follows locations to
-other hosts it will not send the user and password to those. This is enforced
+several requests to possibly different hosts. libcurl only sends this user and
+password information to hosts using the initial host name (unless
+\fICURLOPT_UNRESTRICTED_AUTH(3)\fP is set), so if libcurl follows redirects to
+other hosts, it does not send the user and password to those. This is enforced
to prevent accidental information leakage.
Use \fICURLOPT_HTTPAUTH(3)\fP to specify the authentication method for HTTP
based connections or \fICURLOPT_LOGIN_OPTIONS(3)\fP to control IMAP, POP3 and
SMTP options.
-The user and password strings are not URL decoded, so there's no way to send
+The user and password strings are not URL decoded, so there is no way to send
in a user name containing a colon using this option. Use
\fICURLOPT_USERNAME(3)\fP for that, or include it in the URL.
@@ -75,15 +75,19 @@ NULL
Most
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
- curl_easy_setopt(curl, CURLOPT_USERPWD, "clark:kent");
+ curl_easy_setopt(curl, CURLOPT_USERPWD, "clark:kent");
- ret = curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -92,5 +96,6 @@ Always
Returns CURLE_OK on success or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_USERNAME "(3), " CURLOPT_PASSWORD "(3), "
-.BR CURLOPT_PROXYUSERPWD "(3), "
+.BR CURLOPT_USERNAME (3),
+.BR CURLOPT_PASSWORD (3),
+.BR CURLOPT_PROXYUSERPWD (3)
diff --git a/docs/libcurl/opts/CURLOPT_USE_SSL.3 b/docs/libcurl/opts/CURLOPT_USE_SSL.3
index 652d57464..b438ff7c9 100644
--- a/docs/libcurl/opts/CURLOPT_USE_SSL.3
+++ b/docs/libcurl/opts/CURLOPT_USE_SSL.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_USE_SSL 3 "October 22, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_USE_SSL 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_USE_SSL \- request using SSL / TLS for the transfer
@@ -55,15 +55,18 @@ CURLUSESSL_NONE
FTP, SMTP, POP3, IMAP, LDAP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/dir/file.ext");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/dir/file.ext");
- /* require use of SSL for this, or fail */
- curl_easy_setopt(curl, CURLOPT_USE_SSL, (long)CURLUSESSL_ALL);
+ /* require use of SSL for this, or fail */
+ curl_easy_setopt(curl, CURLOPT_USE_SSL, (long)CURLUSESSL_ALL);
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -73,5 +76,6 @@ Handled by LDAP since 7.81.0. Fully supported by the OpenLDAP backend only.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_SSLVERSION "(3), " CURLOPT_PROXY_SSLVERSION "(3), "
-.BR CURLOPT_SSL_OPTIONS "(3), "
+.BR CURLOPT_SSLVERSION (3),
+.BR CURLOPT_PROXY_SSLVERSION (3),
+.BR CURLOPT_SSL_OPTIONS (3)
diff --git a/docs/libcurl/opts/CURLOPT_VERBOSE.3 b/docs/libcurl/opts/CURLOPT_VERBOSE.3
index 4a2248422..fb8ba1081 100644
--- a/docs/libcurl/opts/CURLOPT_VERBOSE.3
+++ b/docs/libcurl/opts/CURLOPT_VERBOSE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_VERBOSE 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_VERBOSE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_VERBOSE \- verbose mode
@@ -36,10 +36,10 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_VERBOSE, long onoff);
Set the \fIonoff\fP parameter to 1 to make the library display a lot of
verbose information about its operations on this \fIhandle\fP. Useful for
libcurl and/or protocol debugging and understanding. The verbose information
-will be sent to stderr, or the stream set with \fICURLOPT_STDERR(3)\fP.
+is sent to stderr, or the stream set with \fICURLOPT_STDERR(3)\fP.
-You hardly ever want this set in production use, you will almost always want
-this when you debug/report problems.
+You hardly ever want this enabled in production use, you almost always want
+this used when you debug/report problems.
To also get all the protocol data sent and received, consider using the
\fICURLOPT_DEBUGFUNCTION(3)\fP.
@@ -49,15 +49,18 @@ To also get all the protocol data sent and received, consider using the
All
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- /* ask libcurl to show us the verbose output */
- curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+ /* ask libcurl to show us the verbose output */
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
- /* Perform the request */
- curl_easy_perform(curl);
+ /* Perform the request */
+ curl_easy_perform(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -65,5 +68,7 @@ Always
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_STDERR "(3), " CURLOPT_DEBUGFUNCTION "(3), "
-.BR CURLOPT_ERRORBUFFER "(3), "
+.BR CURLOPT_STDERR (3),
+.BR CURLOPT_DEBUGFUNCTION (3),
+.BR CURLOPT_ERRORBUFFER (3),
+.BR curl_global_trace (3)
diff --git a/docs/libcurl/opts/CURLOPT_WILDCARDMATCH.3 b/docs/libcurl/opts/CURLOPT_WILDCARDMATCH.3
index f007c82ec..74d8a0b6d 100644
--- a/docs/libcurl/opts/CURLOPT_WILDCARDMATCH.3
+++ b/docs/libcurl/opts/CURLOPT_WILDCARDMATCH.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_WILDCARDMATCH 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_WILDCARDMATCH 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_WILDCARDMATCH \- directory wildcard transfers
@@ -87,23 +87,33 @@ Using the rules above, a file name pattern can be constructed:
This feature is only supported for FTP download.
.SH EXAMPLE
.nf
-/* initialization of easy handle */
-handle = curl_easy_init();
-/* turn on wildcard matching */
-curl_easy_setopt(handle, CURLOPT_WILDCARDMATCH, 1L);
+extern long begin_cb(struct curl_fileinfo *, void *, int);
+extern long end_cb(void *ptr);
-/* callback is called before download of concrete file started */
-curl_easy_setopt(handle, CURLOPT_CHUNK_BGN_FUNCTION, file_is_coming);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ /* turn on wildcard matching */
+ curl_easy_setopt(curl, CURLOPT_WILDCARDMATCH, 1L);
-/* callback is called after data from the file have been transferred */
-curl_easy_setopt(handle, CURLOPT_CHUNK_END_FUNCTION, file_is_downloaded);
+ /* callback is called before download of concrete file started */
+ curl_easy_setopt(curl, CURLOPT_CHUNK_BGN_FUNCTION, begin_cb);
-/* See more on https://curl.se/libcurl/c/ftp-wildcard.html */
+ /* callback is called after data from the file have been transferred */
+ curl_easy_setopt(curl, CURLOPT_CHUNK_END_FUNCTION, end_cb);
+
+ /* See more on https://curl.se/libcurl/c/ftp-wildcard.html */
+ }
+}
.fi
.SH AVAILABILITY
Added in 7.21.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR CURLOPT_FNMATCH_FUNCTION "(3), " CURLOPT_URL "(3), "
+.BR CURLOPT_CHUNK_BGN_FUNCTION (3),
+.BR CURLOPT_CHUNK_END_FUNCTION (3),
+.BR CURLOPT_FNMATCH_FUNCTION (3),
+.BR CURLOPT_URL (3)
diff --git a/docs/libcurl/opts/CURLOPT_WRITEDATA.3 b/docs/libcurl/opts/CURLOPT_WRITEDATA.3
index 6db7207df..cd1c33f2f 100644
--- a/docs/libcurl/opts/CURLOPT_WRITEDATA.3
+++ b/docs/libcurl/opts/CURLOPT_WRITEDATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_WRITEDATA 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_WRITEDATA 3 "September 27, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_WRITEDATA \- pointer passed to the write callback
@@ -34,16 +34,16 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_WRITEDATA, void *pointer);
.fi
.SH DESCRIPTION
A data \fIpointer\fP to pass to the write callback. If you use the
-\fICURLOPT_WRITEFUNCTION(3)\fP option, this is the pointer you will get in
-that callback's fourth and last argument. If you do not use a write callback,
-you must make \fIpointer\fP a 'FILE *' (cast to 'void *') as libcurl will pass
-this to \fIfwrite(3)\fP when writing data.
+\fICURLOPT_WRITEFUNCTION(3)\fP option, this is the pointer you get in that
+callback's fourth and last argument. If you do not use a write callback, you
+must make \fIpointer\fP a 'FILE *' (cast to 'void *') as libcurl passes this
+to \fIfwrite(3)\fP when writing data.
-The internal \fICURLOPT_WRITEFUNCTION(3)\fP will write the data to the FILE *
+The internal \fICURLOPT_WRITEFUNCTION(3)\fP writes the data to the FILE *
given with this option, or to stdout if this option has not been set.
-If you are using libcurl as a win32 DLL, you \fBMUST\fP use a
-\fICURLOPT_WRITEFUNCTION(3)\fP if you set this option or you will experience
+If you are using libcurl as a Windows DLL, you \fBMUST\fP use a
+\fICURLOPT_WRITEFUNCTION(3)\fP if you set this option or you might experience
crashes.
.SH DEFAULT
By default, this is a FILE * to stdout.
@@ -57,9 +57,10 @@ data in. Like in the getinmemory example:
https://curl.se/libcurl/c/getinmemory.html
.SH AVAILABILITY
Available in all libcurl versions. This option was formerly known as
-\fICURLOPT_FILE\fP, the name \fICURLOPT_WRITEDATA(3)\fP was introduced in
-7.9.7.
+CURLOPT_FILE, the name \fICURLOPT_WRITEDATA(3)\fP was added in 7.9.7.
.SH RETURN VALUE
-This will return CURLE_OK.
+This returns CURLE_OK.
.SH "SEE ALSO"
-.BR CURLOPT_WRITEFUNCTION "(3), " CURLOPT_READDATA "(3), "
+.BR CURLOPT_WRITEFUNCTION (3),
+.BR CURLOPT_HEADERDATA (3),
+.BR CURLOPT_READDATA (3)
diff --git a/docs/libcurl/opts/CURLOPT_WRITEFUNCTION.3 b/docs/libcurl/opts/CURLOPT_WRITEFUNCTION.3
index ef3dac4c2..13553df8e 100644
--- a/docs/libcurl/opts/CURLOPT_WRITEFUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_WRITEFUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_WRITEFUNCTION 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_WRITEFUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_WRITEFUNCTION \- callback for writing received data
@@ -43,9 +43,9 @@ many times and each invoke delivers another chunk of data. \fIptr\fP points to
the delivered data, and the size of that data is \fInmemb\fP; \fIsize\fP is
always 1.
-The callback function will be passed as much data as possible in all invokes,
-but you must not make any assumptions. It may be one byte, it may be
-thousands. The maximum amount of body data that will be passed to the write
+The callback function is passed as much data as possible in all invokes, but
+you must not make any assumptions. It may be one byte, it may be
+thousands. The maximum amount of body data that is be passed to the write
callback is defined in the curl.h header file: \fICURL_MAX_WRITE_SIZE\fP (the
usual default is 16K). If \fICURLOPT_HEADER(3)\fP is enabled, which makes
header data get passed to the write callback, you can get up to
@@ -55,64 +55,85 @@ means 100K.
This function may be called with zero bytes data if the transferred file is
empty.
-The data passed to this function will not be null-terminated!
+The data passed to this function is not null-terminated!
Set the \fIuserdata\fP argument with the \fICURLOPT_WRITEDATA(3)\fP option.
Your callback should return the number of bytes actually taken care of. If
-that amount differs from the amount passed to your callback function, it will
-signal an error condition to the library. This will cause the transfer to get
-aborted and the libcurl function used will return \fICURLE_WRITE_ERROR\fP.
+that amount differs from the amount passed to your callback function, it
+signals an error condition to the library. This causes the transfer to get
+aborted and the libcurl function used returns \fICURLE_WRITE_ERROR\fP.
-If your callback function returns CURL_WRITEFUNC_PAUSE it will cause this
-transfer to become paused. See \fIcurl_easy_pause(3)\fP for further details.
+You can also abort the transfer by returning CURL_WRITEFUNC_ERROR (added in
+7.87.0), which makes \fICURLE_WRITE_ERROR\fP get returned.
+
+If the callback function returns CURL_WRITEFUNC_PAUSE it pauses this
+transfer. See \fIcurl_easy_pause(3)\fP for further details.
Set this option to NULL to get the internal default function used instead of
-your callback. The internal default function will write the data to the FILE *
+your callback. The internal default function writes the data to the FILE *
given with \fICURLOPT_WRITEDATA(3)\fP.
This option does not enable HSTS, you need to use \fICURLOPT_HSTS_CTRL(3)\fP to
do that.
.SH DEFAULT
-libcurl will use 'fwrite' as a callback by default.
+libcurl uses 'fwrite' as a callback by default.
.SH PROTOCOLS
For all protocols
.SH EXAMPLE
.nf
- struct memory {
- char *response;
- size_t size;
- };
-
- static size_t cb(void *data, size_t size, size_t nmemb, void *userp)
- {
- size_t realsize = size * nmemb;
- struct memory *mem = (struct memory *)userp;
-
- char *ptr = realloc(mem->response, mem->size + realsize + 1);
- if(ptr == NULL)
- return 0; /* out of memory! */
-
- mem->response = ptr;
- memcpy(&(mem->response[mem->size]), data, realsize);
- mem->size += realsize;
- mem->response[mem->size] = 0;
-
- return realsize;
- }
-
- struct memory chunk = {0};
-
- /* send all data to this function */
- curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, cb);
-
- /* we pass our 'chunk' struct to the callback function */
- curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);
+#include <stdlib.h> /* for realloc */
+#include <string.h> /* for memcpy */
+
+struct memory {
+ char *response;
+ size_t size;
+};
+
+static size_t cb(void *data, size_t size, size_t nmemb, void *clientp)
+{
+ size_t realsize = size * nmemb;
+ struct memory *mem = (struct memory *)clientp;
+
+ char *ptr = realloc(mem->response, mem->size + realsize + 1);
+ if(!ptr)
+ return 0; /* out of memory! */
+
+ mem->response = ptr;
+ memcpy(&(mem->response[mem->size]), data, realsize);
+ mem->size += realsize;
+ mem->response[mem->size] = 0;
+
+ return realsize;
+}
+
+int main(void)
+{
+ struct memory chunk = {0};
+ CURLcode res;
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ /* send all data to this function */
+ curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, cb);
+
+ /* we pass our 'chunk' struct to the callback function */
+ curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
+
+ /* send a request */
+ res = curl_easy_perform(curl);
+
+ /* remember to free the buffer */
+ free(chunk.response);
+
+ curl_easy_cleanup(curl);
+ }
+}
.fi
.SH AVAILABILITY
Support for the CURL_WRITEFUNC_PAUSE return code was added in version 7.18.0.
.SH RETURN VALUE
-This will return CURLE_OK.
+This returns CURLE_OK.
.SH "SEE ALSO"
-.BR CURLOPT_WRITEDATA "(3), " CURLOPT_READFUNCTION "(3), "
-.BR CURLOPT_HEADERFUNCTION "(3), "
+.BR CURLOPT_WRITEDATA (3),
+.BR CURLOPT_READFUNCTION (3),
+.BR CURLOPT_HEADERFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_WS_OPTIONS.3 b/docs/libcurl/opts/CURLOPT_WS_OPTIONS.3
index c11e90164..8dc4a436b 100644
--- a/docs/libcurl/opts/CURLOPT_WS_OPTIONS.3
+++ b/docs/libcurl/opts/CURLOPT_WS_OPTIONS.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_WS_OPTIONS 3 "October 22, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_WS_OPTIONS 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_WS_OPTIONS \- WebSocket behavior options
@@ -53,18 +53,24 @@ application.
WebSocket
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "ws://example.com/");
- /* tell curl we deal with all the WebSocket magic ourselves */
- curl_easy_setopt(curl, CURLOPT_WS_OPTIONS, (long)CURLWS_RAW_MODE);
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "ws://example.com/");
+ /* tell curl we deal with all the WebSocket magic ourselves */
+ curl_easy_setopt(curl, CURLOPT_WS_OPTIONS, (long)CURLWS_RAW_MODE);
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
-Added in 7.85.0
+Added in 7.86.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
-.BR curl_ws_recv "(3), " curl_ws_send "(3), "
+.BR curl_ws_recv (3),
+.BR curl_ws_send (3),
+.BR CURLOPT_CONNECT_ONLY (3)
diff --git a/docs/libcurl/opts/CURLOPT_XFERINFODATA.3 b/docs/libcurl/opts/CURLOPT_XFERINFODATA.3
index 657d4cdf7..556116270 100644
--- a/docs/libcurl/opts/CURLOPT_XFERINFODATA.3
+++ b/docs/libcurl/opts/CURLOPT_XFERINFODATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_XFERINFODATA 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_XFERINFODATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_XFERINFODATA \- pointer passed to the progress callback
@@ -33,7 +33,7 @@ CURLOPT_XFERINFODATA \- pointer passed to the progress callback
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_XFERINFODATA, void *pointer);
.fi
.SH DESCRIPTION
-Pass a \fIpointer\fP that will be untouched by libcurl and passed as the first
+Pass a \fIpointer\fP that is untouched by libcurl and passed as the first
argument in the progress callback set with \fICURLOPT_XFERINFOFUNCTION(3)\fP.
This is an alias for \fICURLOPT_PROGRESSDATA(3)\fP.
@@ -43,34 +43,41 @@ The default value of this parameter is NULL.
All
.SH EXAMPLE
.nf
- struct progress {
- char *private;
- size_t size;
- };
+struct progress {
+ char *private;
+ size_t size;
+};
- static size_t progress_callback(void *clientp,
- curl_off_t dltotal,
- curl_off_t dlnow,
- curl_off_t ultotal,
- curl_off_t ulnow)
- {
- struct memory *progress = (struct progress *)userp;
+static size_t progress_cb(void *clientp,
+ curl_off_t dltotal,
+ curl_off_t dlnow,
+ curl_off_t ultotal,
+ curl_off_t ulnow)
+{
+ struct progress *memory = clientp;
+ printf("private ptr: %p\\n", memory->private);
+ /* use the values */
- /* use the values */
+ return 0; /* all is good */
+}
- return 0; /* all is good */
- }
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ struct progress data;
- struct progress data;
-
- /* pass struct to callback */
- curl_easy_setopt(curl_handle, CURLOPT_XFERINFODATA, &data);
-
- curl_easy_setopt(curl_handle, CURLOPT_XFERINFOFUNCTION, progress_callback);
+ /* pass struct to callback */
+ curl_easy_setopt(curl, CURLOPT_XFERINFODATA, &data);
+ curl_easy_setopt(curl, CURLOPT_XFERINFOFUNCTION, progress_cb);
+ }
+}
.fi
.SH AVAILABILITY
Added in 7.32.0
.SH RETURN VALUE
Returns CURLE_OK
.SH "SEE ALSO"
-.BR CURLOPT_XFERINFOFUNCTION "(3), " CURLOPT_VERBOSE "(3), "
+.BR CURLOPT_NOPROGRESS (3),
+.BR CURLOPT_VERBOSE (3),
+.BR CURLOPT_XFERINFOFUNCTION (3)
diff --git a/docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.3 b/docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.3
index ebbd31587..2b9f2e8f2 100644
--- a/docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.3
+++ b/docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_XFERINFOFUNCTION 3 "May 17, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_XFERINFOFUNCTION 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_XFERINFOFUNCTION \- progress meter callback
@@ -44,34 +44,34 @@ Pass a pointer to your callback function, which should match the prototype
shown above.
This function gets called by libcurl instead of its internal equivalent with a
-frequent interval. While data is being transferred it will be called
-frequently, and during slow periods like when nothing is being transferred it
-can slow down to about one call per second.
+frequent interval. While data is being transferred it gets called frequently,
+and during slow periods like when nothing is being transferred it can slow
+down to about one call per second.
\fIclientp\fP is the pointer set with \fICURLOPT_XFERINFODATA(3)\fP, it is not
used by libcurl but is only passed along from the application to the callback.
-The callback gets told how much data libcurl will transfer and has
-transferred, in number of bytes. \fIdltotal\fP is the total number of bytes
-libcurl expects to download in this transfer. \fIdlnow\fP is the number of
-bytes downloaded so far. \fIultotal\fP is the total number of bytes libcurl
+The callback gets told how much data libcurl is about to transfer and has
+already transferred, in number of bytes. \fIdltotal\fP is the total number of
+bytes libcurl expects to download in this transfer. \fIdlnow\fP is the number
+of bytes downloaded so far. \fIultotal\fP is the total number of bytes libcurl
expects to upload in this transfer. \fIulnow\fP is the number of bytes
uploaded so far.
-Unknown/unused argument values passed to the callback will be set to zero
-(like if you only download data, the upload size will remain 0). Many times
-the callback will be called one or more times first, before it knows the data
-sizes so a program must be made to handle that.
+Unknown/unused argument values passed to the callback are set to zero (like if
+you only download data, the upload size remains 0). Many times the callback is
+called one or more times first, before it knows the data sizes so a program
+must be made to handle that.
-If your callback function returns CURL_PROGRESSFUNC_CONTINUE it will cause
-libcurl to continue executing the default progress function.
+If your callback function returns CURL_PROGRESSFUNC_CONTINUE it makes libcurl
+to continue executing the default progress function.
-Returning any other non-zero value from this callback will cause libcurl to
-abort the transfer and return \fICURLE_ABORTED_BY_CALLBACK\fP.
+Returning any other non-zero value from this callback makes libcurl abort the
+transfer and return \fICURLE_ABORTED_BY_CALLBACK\fP.
-If you transfer data with the multi interface, this function will not be
-called during periods of idleness unless you call the appropriate libcurl
-function that performs transfers.
+If you transfer data with the multi interface, this function is not called
+during periods of idleness unless you call the appropriate libcurl function
+that performs transfers.
\fICURLOPT_NOPROGRESS(3)\fP must be set to 0 to make this function actually
get called.
@@ -82,34 +82,42 @@ users.
All
.SH EXAMPLE
.nf
- struct progress {
- char *private;
- size_t size;
- };
-
- static size_t progress_callback(void *clientp,
- curl_off_t dltotal,
- curl_off_t dlnow,
- curl_off_t ultotal,
- curl_off_t ulnow)
- {
- struct progress *memory = (struct progress *)clientp;
-
- /* use the values */
-
- return 0; /* all is good */
- }
-
- struct progress data;
-
- /* pass struct to callback */
- curl_easy_setopt(curl_handle, CURLOPT_XFERINFODATA, &data);
-
- curl_easy_setopt(curl_handle, CURLOPT_XFERINFOFUNCTION, progress_callback);
+struct progress {
+ char *private;
+ size_t size;
+};
+
+static size_t progress_callback(void *clientp,
+ curl_off_t dltotal,
+ curl_off_t dlnow,
+ curl_off_t ultotal,
+ curl_off_t ulnow)
+{
+ struct progress *memory = clientp;
+ printf("my ptr: %p\\n", memory->private);
+
+ /* use the values */
+
+ return 0; /* all is good */
+}
+
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ struct progress data;
+
+ /* pass struct to callback */
+ curl_easy_setopt(curl, CURLOPT_XFERINFODATA, &data);
+
+ curl_easy_setopt(curl, CURLOPT_XFERINFOFUNCTION, progress_callback);
+ }
+}
.fi
.SH AVAILABILITY
Added in 7.32.0. This callback replaces \fICURLOPT_PROGRESSFUNCTION(3)\fP
.SH RETURN VALUE
Returns CURLE_OK.
.SH "SEE ALSO"
-.BR CURLOPT_XFERINFODATA "(3), " CURLOPT_NOPROGRESS "(3), "
+.BR CURLOPT_NOPROGRESS (3),
+.BR CURLOPT_XFERINFODATA (3)
diff --git a/docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.3 b/docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.3
index 5d88858ae..2ff94ef87 100644
--- a/docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.3
+++ b/docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH CURLOPT_XOAUTH2_BEARER 3 "September 20, 2022" "libcurl 7.86.0" "curl_easy_setopt options"
+.TH CURLOPT_XOAUTH2_BEARER 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLOPT_XOAUTH2_BEARER \- OAuth 2.0 access token
@@ -48,12 +48,16 @@ NULL
HTTP, IMAP, LDAP, POP3 and SMTP
.SH EXAMPLE
.nf
-CURL *curl = curl_easy_init();
-if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, "pop3://example.com/");
- curl_easy_setopt(curl, CURLOPT_XOAUTH2_BEARER, "1ab9cb22ba269a7");
- ret = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
+int main(void)
+{
+ CURL *curl = curl_easy_init();
+ if(curl) {
+ CURLcode res;
+ curl_easy_setopt(curl, CURLOPT_URL, "pop3://example.com/");
+ curl_easy_setopt(curl, CURLOPT_XOAUTH2_BEARER, "1ab9cb22ba269a7");
+ res = curl_easy_perform(curl);
+ curl_easy_cleanup(curl);
+ }
}
.fi
.SH AVAILABILITY
@@ -62,4 +66,6 @@ Added in 7.33.0. Support for OpenLDAP added in 7.82.0.
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
.SH "SEE ALSO"
-.BR CURLOPT_MAIL_AUTH "(3), " CURLOPT_USERNAME "(3), "
+.BR CURLOPT_MAIL_AUTH (3),
+.BR CURLOPT_USERNAME (3)
+
diff --git a/docs/libcurl/opts/CURLSHOPT_LOCKFUNC.3 b/docs/libcurl/opts/CURLSHOPT_LOCKFUNC.3
index 042679db0..7a92490e2 100644
--- a/docs/libcurl/opts/CURLSHOPT_LOCKFUNC.3
+++ b/docs/libcurl/opts/CURLSHOPT_LOCKFUNC.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH CURLSHOPT_LOCKFUNC 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH CURLSHOPT_LOCKFUNC 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLSHOPT_LOCKFUNC - mutex lock callback
@@ -30,13 +30,13 @@ CURLSHOPT_LOCKFUNC - mutex lock callback
#include <curl/curl.h>
void lockcb(CURL *handle, curl_lock_data data, curl_lock_access access,
- void *userptr);
+ void *clientp);
CURLSHcode curl_share_setopt(CURLSH *share, CURLSHOPT_LOCKFUNC, lockcb);
.fi
.SH DESCRIPTION
Set a mutex lock callback for the share object, to allow it to get used by
-multiple threads concurrently. There's a corresponding
+multiple threads concurrently. There is a corresponding
\fICURLSHOPT_UNLOCKFUNC(3)\fP callback called when the mutex is again released.
The \fIlockcb\fP argument must be a pointer to a function matching the
@@ -50,17 +50,23 @@ sure that the callback uses a different lock for each kind of data.
\fIaccess\fP defines what access type libcurl wants, shared or single.
-\fIuserptr\fP is the private pointer you set with \fICURLSHOPT_USERDATA\fP.
+\fIclientp\fP is the private pointer you set with \fICURLSHOPT_USERDATA(3)\fP.
This pointer is not used by libcurl itself.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
+extern void mutex_lock(CURL *handle, curl_lock_data data,
+ curl_lock_access access, void *clientp);
+
+int main(void)
+{
CURLSHcode sh;
- share = curl_share_init();
+ CURLSH *share = curl_share_init();
sh = curl_share_setopt(share, CURLSHOPT_LOCKFUNC, mutex_lock);
if(sh)
printf("Error: %s\\n", curl_share_strerror(sh));
+}
.fi
.SH AVAILABILITY
Added in 7.10
@@ -69,5 +75,7 @@ CURLSHE_OK (zero) means that the option was set properly, non-zero means an
error occurred. See \fIlibcurl-errors(3)\fP for the full list with
descriptions.
.SH "SEE ALSO"
-.BR CURLSHOPT_UNLOCKFUNC "(3), "
-.BR curl_share_setopt "(3), " curl_share_cleanup "(3), " curl_share_init "(3)"
+.BR curl_share_cleanup (3),
+.BR curl_share_init (3),
+.BR curl_share_setopt (3),
+.BR CURLSHOPT_UNLOCKFUNC (3)
diff --git a/docs/libcurl/opts/CURLSHOPT_SHARE.3 b/docs/libcurl/opts/CURLSHOPT_SHARE.3
index b30cc0fa4..57dfcccb0 100644
--- a/docs/libcurl/opts/CURLSHOPT_SHARE.3
+++ b/docs/libcurl/opts/CURLSHOPT_SHARE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH CURLSHOPT_SHARE 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH CURLSHOPT_SHARE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLSHOPT_SHARE - add data to share
@@ -39,26 +39,24 @@ The given \fItype\fP must be be one of the values described below. You can set
the share object share multiple types of data. Unset a type again by setting
\fICURLSHOPT_UNSHARE(3)\fP.
.IP CURL_LOCK_DATA_COOKIE
-Cookie data will be shared across the easy handles using this shared object.
-Note that this does not activate an easy handle's cookie handling. You can do
-that separately by using \fICURLOPT_COOKIEFILE(3)\fP for example.
+Cookie data is shared across the easy handles using this shared object. Note
+that this does not activate an easy handle's cookie handling. You can do that
+separately by using \fICURLOPT_COOKIEFILE(3)\fP for example.
.IP CURL_LOCK_DATA_DNS
-Cached DNS hosts will be shared across the easy handles using this shared
+Cached DNS hosts are shared across the easy handles using this shared
object. Note that when you use the multi interface, all easy handles added to
-the same multi handle will share DNS cache by default without using this
-option.
+the same multi handle share DNS cache by default without using this option.
.IP CURL_LOCK_DATA_SSL_SESSION
-SSL session IDs will be shared across the easy handles using this shared
-object. This will reduce the time spent in the SSL handshake when reconnecting
-to the same server. Note SSL session IDs are reused within the same easy
-handle by default. Note this symbol was added in 7.10.3 but was not
-implemented until 7.23.0.
+SSL session IDs are shared across the easy handles using this shared
+object. This reduces the time spent in the SSL handshake when reconnecting to
+the same server. Note SSL session IDs are reused within the same easy handle
+by default. Note this symbol was added in 7.10.3 but was not implemented until
+7.23.0.
.IP CURL_LOCK_DATA_CONNECT
Put the connection cache in the share object and make all easy handles using
this share object share the connection cache.
-Note that due to a known bug, it is not safe to share connections this way
-between multiple concurrent threads.
+It is not supported to share connections between multiple concurrent threads.
Connections that are used for HTTP/1.1 Pipelining or HTTP/2 multiplexing only
get additional transfers added to them if the existing connection is held by
@@ -69,7 +67,7 @@ Support for \fBCURL_LOCK_DATA_CONNECT\fP was added in 7.57.0, but the symbol
existed before this.
Note that when you use the multi interface, all easy handles added to the same
-multi handle will share connection cache by default without using this option.
+multi handle shares connection cache by default without using this option.
.IP CURL_LOCK_DATA_PSL
The Public Suffix List stored in the share object is made available to all
easy handle bound to the later. Since the Public Suffix List is periodically
@@ -78,16 +76,25 @@ refreshed, this avoids updates in too many different contexts.
Added in 7.61.0.
Note that when you use the multi interface, all easy handles added to the same
-multi handle will share PSL cache by default without using this option.
+multi handle shares PSL cache by default without using this option.
+.IP CURL_LOCK_DATA_HSTS
+The in-memory HSTS cache.
+
+It is not supported to share the HSTS between multiple concurrent threads.
+
+Added in 7.88.0
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
+int main(void)
+{
CURLSHcode sh;
- share = curl_share_init();
+ CURLSH *share = curl_share_init();
sh = curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
if(sh)
printf("Error: %s\\n", curl_share_strerror(sh));
+}
.fi
.SH AVAILABILITY
Added in 7.10
@@ -96,5 +103,7 @@ CURLSHE_OK (zero) means that the option was set properly, non-zero means an
error occurred. See \fIlibcurl-errors(3)\fP for the full list with
descriptions.
.SH "SEE ALSO"
-.BR CURLSHOPT_UNSHARE "(3), "
-.BR curl_share_setopt "(3), " curl_share_cleanup "(3), " curl_share_init "(3)"
+.BR curl_share_cleanup (3),
+.BR curl_share_init (3),
+.BR curl_share_setopt (3),
+.BR CURLSHOPT_UNSHARE (3)
diff --git a/docs/libcurl/opts/CURLSHOPT_UNLOCKFUNC.3 b/docs/libcurl/opts/CURLSHOPT_UNLOCKFUNC.3
index 5433896c0..b21e624d7 100644
--- a/docs/libcurl/opts/CURLSHOPT_UNLOCKFUNC.3
+++ b/docs/libcurl/opts/CURLSHOPT_UNLOCKFUNC.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH CURLSHOPT_UNLOCKFUNC 3 "September 28, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH CURLSHOPT_UNLOCKFUNC 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLSHOPT_UNLOCKFUNC - mutex unlock callback
@@ -29,12 +29,12 @@ CURLSHOPT_UNLOCKFUNC - mutex unlock callback
.nf
#include <curl/curl.h>
-void unlockcb(CURL *handle, curl_lock_data data, void *userptr);
+void unlockcb(CURL *handle, curl_lock_data data, void *clientp);
CURLSHcode curl_share_setopt(CURLSH *share, CURLSHOPT_UNLOCKFUNC, unlockcb);
.fi
.SH DESCRIPTION
-Set a mutex unlock callback for the share object. There's a corresponding
+Set a mutex unlock callback for the share object. There is a corresponding
\fICURLSHOPT_LOCKFUNC(3)\fP callback called when the mutex is first locked.
The \fIunlockcb\fP argument must be a pointer to a function matching the
@@ -46,17 +46,22 @@ is released.
The \fIdata\fP argument tells what kind of data libcurl wants to unlock. Make
sure that the callback uses a different lock for each kind of data.
-\fIuserptr\fP is the private pointer you set with \fICURLSHOPT_USERDATA\fP.
+\fIclientp\fP is the private pointer you set with \fICURLSHOPT_USERDATA(3)\fP.
This pointer is not used by libcurl itself.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
+extern void mutex_unlock(CURL *, curl_lock_data, void *);
+
+int main(void)
+{
CURLSHcode sh;
- share = curl_share_init();
+ CURLSH *share = curl_share_init();
sh = curl_share_setopt(share, CURLSHOPT_UNLOCKFUNC, mutex_unlock);
if(sh)
printf("Error: %s\\n", curl_share_strerror(sh));
+}
.fi
.SH AVAILABILITY
Added in 7.10
@@ -65,5 +70,7 @@ CURLSHE_OK (zero) means that the option was set properly, non-zero means an
error occurred. See \fIlibcurl-errors(3)\fP for the full list with
descriptions.
.SH "SEE ALSO"
-.BR CURLSHOPT_LOCKFUNC "(3), "
-.BR curl_share_setopt "(3), " curl_share_cleanup "(3), " curl_share_init "(3)"
+.BR curl_share_cleanup (3),
+.BR curl_share_init (3),
+.BR curl_share_setopt (3),
+.BR CURLSHOPT_LOCKFUNC (3)
diff --git a/docs/libcurl/opts/CURLSHOPT_UNSHARE.3 b/docs/libcurl/opts/CURLSHOPT_UNSHARE.3
index 3fab208c9..f3d4de26a 100644
--- a/docs/libcurl/opts/CURLSHOPT_UNSHARE.3
+++ b/docs/libcurl/opts/CURLSHOPT_UNSHARE.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH CURLSHOPT_UNSHARE 3 "May 17, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH CURLSHOPT_UNSHARE 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLSHOPT_UNSHARE - remove data to share
@@ -40,14 +40,14 @@ below. You can set \fICURLSHOPT_UNSHARE(3)\fP multiple times with different
data arguments to remove multiple types from the shared object. Add data to
share again with \fICURLSHOPT_SHARE(3)\fP.
.IP CURL_LOCK_DATA_COOKIE
-Cookie data will no longer be shared across the easy handles using this shared
+Cookie data is no longer shared across the easy handles using this shared
object.
.IP CURL_LOCK_DATA_DNS
-Cached DNS hosts will be no longer be shared across the easy handles using
-this shared object.
-.IP CURL_LOCK_DATA_SSL_SESSION
-SSL session IDs will no longer be shared across the easy handles using this
+Cached DNS hosts are no longer shared across the easy handles using this
shared object.
+.IP CURL_LOCK_DATA_SSL_SESSION
+SSL session IDs are no longer shared across the easy handles using this shared
+object.
.IP CURL_LOCK_DATA_CONNECT
The connection cache is no longer shared.
.IP CURL_LOCK_DATA_PSL
@@ -56,11 +56,14 @@ The Public Suffix List is no longer shared.
All
.SH EXAMPLE
.nf
+int main(void)
+{
CURLSHcode sh;
- share = curl_share_init();
+ CURLSH *share = curl_share_init();
sh = curl_share_setopt(share, CURLSHOPT_UNSHARE, CURL_LOCK_DATA_COOKIE);
if(sh)
printf("Error: %s\\n", curl_share_strerror(sh));
+}
.fi
.SH AVAILABILITY
Added in 7.10
@@ -69,5 +72,7 @@ CURLSHE_OK (zero) means that the option was set properly, non-zero means an
error occurred. See \fIlibcurl-errors(3)\fP for the full list with
descriptions.
.SH "SEE ALSO"
-.BR CURLSHOPT_SHARE "(3), "
-.BR curl_share_setopt "(3), " curl_share_cleanup "(3), " curl_share_init "(3)"
+.BR curl_share_cleanup (3),
+.BR curl_share_init (3),
+.BR curl_share_setopt (3),
+.BR CURLSHOPT_SHARE (3)
diff --git a/docs/libcurl/opts/CURLSHOPT_USERDATA.3 b/docs/libcurl/opts/CURLSHOPT_USERDATA.3
index 244f91a98..89597730c 100644
--- a/docs/libcurl/opts/CURLSHOPT_USERDATA.3
+++ b/docs/libcurl/opts/CURLSHOPT_USERDATA.3
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -21,7 +21,7 @@
.\" * SPDX-License-Identifier: curl
.\" *
.\" **************************************************************************
-.TH CURLSHOPT_USERDATA 3 "September 20, 2022" "libcurl 7.86.0" "libcurl Manual"
+.TH CURLSHOPT_USERDATA 3 "December 04, 2023" "ibcurl 8.5.0" libcurl
.SH NAME
CURLSHOPT_USERDATA - pointer passed to the lock and unlock mutex callbacks
@@ -29,22 +29,29 @@ CURLSHOPT_USERDATA - pointer passed to the lock and unlock mutex callbacks
.nf
#include <curl/curl.h>
-CURLSHcode curl_share_setopt(CURLSH *share, CURLSHOPT_USERDATA, void *ptr);
+CURLSHcode curl_share_setopt(CURLSH *share, CURLSHOPT_USERDATA, void *clientp);
.fi
.SH DESCRIPTION
-The \fIptr\fP parameter is held verbatim by libcurl and is passed on as the
-\fIuserptr\fP argument to the callbacks set with \fICURLSHOPT_LOCKFUNC(3)\fP
-and \fICURLSHOPT_UNLOCKFUNC(3)\fP.
+The \fIclientp\fP parameter is held verbatim by libcurl and is passed on as
+the \fIclientp\fP argument to the callbacks set with
+\fICURLSHOPT_LOCKFUNC(3)\fP and \fICURLSHOPT_UNLOCKFUNC(3)\fP.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
+struct secrets {
+ void *custom;
+};
+
+int main(void)
+{
CURLSHcode sh;
struct secrets private_stuff;
- share = curl_share_init();
+ CURLSH *share = curl_share_init();
sh = curl_share_setopt(share, CURLSHOPT_USERDATA, &private_stuff);
if(sh)
printf("Error: %s\\n", curl_share_strerror(sh));
+}
.fi
.SH AVAILABILITY
Added in 7.10
@@ -53,5 +60,7 @@ CURLSHE_OK (zero) means that the option was set properly, non-zero means an
error occurred. See \fIlibcurl-errors(3)\fP for the full list with
descriptions.
.SH "SEE ALSO"
-.BR CURLSHOPT_LOCKFUNC "(3), "
-.BR curl_share_setopt "(3), " curl_share_cleanup "(3), " curl_share_init "(3)"
+.BR curl_share_cleanup (3),
+.BR curl_share_init (3),
+.BR curl_share_setopt (3),
+.BR CURLSHOPT_LOCKFUNC (3)
diff --git a/docs/libcurl/opts/Makefile.am b/docs/libcurl/opts/Makefile.am
index e952cd973..250937fd1 100644
--- a/docs/libcurl/opts/Makefile.am
+++ b/docs/libcurl/opts/Makefile.am
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -54,7 +54,7 @@ pdf: $(PDFPAGES)
echo "converted $< to $@")
mancheck:
- @cd $(top_srcdir)/docs/libcurl/opts && ls `awk -F, '!/OBSOLETE/ && /^ CINIT/ { a=substr($$1, 9); print "CURLOPT_" a ".3"}' $(top_srcdir)/include/curl/curl.h`
+ @(cd $(top_srcdir)/docs/libcurl/opts && ls `awk -F, '!/OBSOLETE/ && /^ CINIT/ { a=substr($$1, 9); print "CURLOPT_" a ".3"}' $(top_srcdir)/include/curl/curl.h`)
rm -f in_temp
@(for a in $(man_MANS); do echo $$a >>in_temp; done)
sort in_temp > in_makefile
diff --git a/docs/libcurl/opts/Makefile.in b/docs/libcurl/opts/Makefile.in
index 18e336b65..af2926d1e 100644
--- a/docs/libcurl/opts/Makefile.in
+++ b/docs/libcurl/opts/Makefile.in
@@ -21,7 +21,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -45,7 +45,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -144,7 +144,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.m4 \
$(top_srcdir)/m4/curl-confopts.m4 \
$(top_srcdir)/m4/curl-functions.m4 \
$(top_srcdir)/m4/curl-gnutls.m4 \
- $(top_srcdir)/m4/curl-mbedtls.m4 $(top_srcdir)/m4/curl-nss.m4 \
+ $(top_srcdir)/m4/curl-mbedtls.m4 \
$(top_srcdir)/m4/curl-openssl.m4 \
$(top_srcdir)/m4/curl-override.m4 \
$(top_srcdir)/m4/curl-reentrant.m4 \
@@ -228,6 +228,8 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APACHECTL = @APACHECTL@
+APXS = @APXS@
AR = @AR@
AR_FLAGS = @AR_FLAGS@
AS = @AS@
@@ -236,6 +238,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@
+CADDY = @CADDY@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -297,6 +300,8 @@ HAVE_LIBZ = @HAVE_LIBZ@
HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
HAVE_PROTO_BSDSOCKET_H = @HAVE_PROTO_BSDSOCKET_H@
HAVE_ZSTD = @HAVE_ZSTD@
+HTTPD = @HTTPD@
+HTTPD_NGHTTPX = @HTTPD_NGHTTPX@
IDN_ENABLED = @IDN_ENABLED@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -324,7 +329,6 @@ MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
NROFF = @NROFF@
-NSS_LIBS = @NSS_LIBS@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
@@ -355,6 +359,7 @@ SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@
SUPPORT_FEATURES = @SUPPORT_FEATURES@
SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_NGHTTPX = @TEST_NGHTTPX@
USE_ARES = @USE_ARES@
USE_BEARSSL = @USE_BEARSSL@
USE_GNUTLS = @USE_GNUTLS@
@@ -368,9 +373,8 @@ USE_NGHTTP2 = @USE_NGHTTP2@
USE_NGHTTP3 = @USE_NGHTTP3@
USE_NGTCP2 = @USE_NGTCP2@
USE_NGTCP2_CRYPTO_GNUTLS = @USE_NGTCP2_CRYPTO_GNUTLS@
-USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@
+USE_NGTCP2_CRYPTO_QUICTLS = @USE_NGTCP2_CRYPTO_QUICTLS@
USE_NGTCP2_CRYPTO_WOLFSSL = @USE_NGTCP2_CRYPTO_WOLFSSL@
-USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_RUSTLS = @USE_RUSTLS@
@@ -452,6 +456,7 @@ man_MANS = \
CURLINFO_CONDITION_UNMET.3 \
CURLINFO_CONNECT_TIME.3 \
CURLINFO_CONNECT_TIME_T.3 \
+ CURLINFO_CONN_ID.3 \
CURLINFO_CONTENT_LENGTH_DOWNLOAD.3 \
CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.3 \
CURLINFO_CONTENT_LENGTH_UPLOAD.3 \
@@ -512,6 +517,7 @@ man_MANS = \
CURLINFO_TLS_SSL_PTR.3 \
CURLINFO_TOTAL_TIME.3 \
CURLINFO_TOTAL_TIME_T.3 \
+ CURLINFO_XFER_ID.3 \
CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3 \
CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3 \
CURLMOPT_MAX_CONCURRENT_STREAMS.3 \
@@ -541,6 +547,7 @@ man_MANS = \
CURLOPT_CAINFO.3 \
CURLOPT_CAINFO_BLOB.3 \
CURLOPT_CAPATH.3 \
+ CURLOPT_CA_CACHE_TIMEOUT.3 \
CURLOPT_CERTINFO.3 \
CURLOPT_CHUNK_BGN_FUNCTION.3 \
CURLOPT_CHUNK_DATA.3 \
@@ -604,6 +611,7 @@ man_MANS = \
CURLOPT_GSSAPI_DELEGATION.3 \
CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3 \
CURLOPT_HAPROXYPROTOCOL.3 \
+ CURLOPT_HAPROXY_CLIENT_IP.3 \
CURLOPT_HEADER.3 \
CURLOPT_HEADERDATA.3 \
CURLOPT_HEADERFUNCTION.3 \
@@ -646,7 +654,7 @@ man_MANS = \
CURLOPT_MAIL_AUTH.3 \
CURLOPT_MAIL_FROM.3 \
CURLOPT_MAIL_RCPT.3 \
- CURLOPT_MAIL_RCPT_ALLLOWFAILS.3 \
+ CURLOPT_MAIL_RCPT_ALLOWFAILS.3 \
CURLOPT_MAX_RECV_SPEED_LARGE.3 \
CURLOPT_MAX_SEND_SPEED_LARGE.3 \
CURLOPT_MAXAGE_CONN.3 \
@@ -721,6 +729,7 @@ man_MANS = \
CURLOPT_PROXYUSERNAME.3 \
CURLOPT_PROXYUSERPWD.3 \
CURLOPT_PUT.3 \
+ CURLOPT_QUICK_EXIT.3 \
CURLOPT_QUOTE.3 \
CURLOPT_RANDOM_FILE.3 \
CURLOPT_RANGE.3 \
@@ -755,6 +764,8 @@ man_MANS = \
CURLOPT_SOCKS5_GSSAPI_SERVICE.3 \
CURLOPT_SSH_AUTH_TYPES.3 \
CURLOPT_SSH_COMPRESSION.3 \
+ CURLOPT_SSH_HOSTKEYDATA.3 \
+ CURLOPT_SSH_HOSTKEYFUNCTION.3 \
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3 \
CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256.3 \
CURLOPT_SSH_KEYDATA.3 \
@@ -765,7 +776,7 @@ man_MANS = \
CURLOPT_SSL_CIPHER_LIST.3 \
CURLOPT_SSL_CTX_DATA.3 \
CURLOPT_SSL_CTX_FUNCTION.3 \
- CURLOPT_SSL_EC_CURVES.3 \
+ CURLOPT_SSL_EC_CURVES.3 \
CURLOPT_SSL_ENABLE_ALPN.3 \
CURLOPT_SSL_ENABLE_NPN.3 \
CURLOPT_SSL_FALSESTART.3 \
@@ -1097,7 +1108,7 @@ pdf: $(PDFPAGES)
echo "converted $< to $@")
mancheck:
- @cd $(top_srcdir)/docs/libcurl/opts && ls `awk -F, '!/OBSOLETE/ && /^ CINIT/ { a=substr($$1, 9); print "CURLOPT_" a ".3"}' $(top_srcdir)/include/curl/curl.h`
+ @(cd $(top_srcdir)/docs/libcurl/opts && ls `awk -F, '!/OBSOLETE/ && /^ CINIT/ { a=substr($$1, 9); print "CURLOPT_" a ".3"}' $(top_srcdir)/include/curl/curl.h`)
rm -f in_temp
@(for a in $(man_MANS); do echo $$a >>in_temp; done)
sort in_temp > in_makefile
diff --git a/docs/libcurl/opts/Makefile.inc b/docs/libcurl/opts/Makefile.inc
index a139d0676..9fe780677 100644
--- a/docs/libcurl/opts/Makefile.inc
+++ b/docs/libcurl/opts/Makefile.inc
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -33,6 +33,7 @@ man_MANS = \
CURLINFO_CONDITION_UNMET.3 \
CURLINFO_CONNECT_TIME.3 \
CURLINFO_CONNECT_TIME_T.3 \
+ CURLINFO_CONN_ID.3 \
CURLINFO_CONTENT_LENGTH_DOWNLOAD.3 \
CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.3 \
CURLINFO_CONTENT_LENGTH_UPLOAD.3 \
@@ -93,6 +94,7 @@ man_MANS = \
CURLINFO_TLS_SSL_PTR.3 \
CURLINFO_TOTAL_TIME.3 \
CURLINFO_TOTAL_TIME_T.3 \
+ CURLINFO_XFER_ID.3 \
CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3 \
CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3 \
CURLMOPT_MAX_CONCURRENT_STREAMS.3 \
@@ -122,6 +124,7 @@ man_MANS = \
CURLOPT_CAINFO.3 \
CURLOPT_CAINFO_BLOB.3 \
CURLOPT_CAPATH.3 \
+ CURLOPT_CA_CACHE_TIMEOUT.3 \
CURLOPT_CERTINFO.3 \
CURLOPT_CHUNK_BGN_FUNCTION.3 \
CURLOPT_CHUNK_DATA.3 \
@@ -185,6 +188,7 @@ man_MANS = \
CURLOPT_GSSAPI_DELEGATION.3 \
CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3 \
CURLOPT_HAPROXYPROTOCOL.3 \
+ CURLOPT_HAPROXY_CLIENT_IP.3 \
CURLOPT_HEADER.3 \
CURLOPT_HEADERDATA.3 \
CURLOPT_HEADERFUNCTION.3 \
@@ -227,7 +231,7 @@ man_MANS = \
CURLOPT_MAIL_AUTH.3 \
CURLOPT_MAIL_FROM.3 \
CURLOPT_MAIL_RCPT.3 \
- CURLOPT_MAIL_RCPT_ALLLOWFAILS.3 \
+ CURLOPT_MAIL_RCPT_ALLOWFAILS.3 \
CURLOPT_MAX_RECV_SPEED_LARGE.3 \
CURLOPT_MAX_SEND_SPEED_LARGE.3 \
CURLOPT_MAXAGE_CONN.3 \
@@ -302,6 +306,7 @@ man_MANS = \
CURLOPT_PROXYUSERNAME.3 \
CURLOPT_PROXYUSERPWD.3 \
CURLOPT_PUT.3 \
+ CURLOPT_QUICK_EXIT.3 \
CURLOPT_QUOTE.3 \
CURLOPT_RANDOM_FILE.3 \
CURLOPT_RANGE.3 \
@@ -336,6 +341,8 @@ man_MANS = \
CURLOPT_SOCKS5_GSSAPI_SERVICE.3 \
CURLOPT_SSH_AUTH_TYPES.3 \
CURLOPT_SSH_COMPRESSION.3 \
+ CURLOPT_SSH_HOSTKEYDATA.3 \
+ CURLOPT_SSH_HOSTKEYFUNCTION.3 \
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3 \
CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256.3 \
CURLOPT_SSH_KEYDATA.3 \
@@ -346,7 +353,7 @@ man_MANS = \
CURLOPT_SSL_CIPHER_LIST.3 \
CURLOPT_SSL_CTX_DATA.3 \
CURLOPT_SSL_CTX_FUNCTION.3 \
- CURLOPT_SSL_EC_CURVES.3 \
+ CURLOPT_SSL_EC_CURVES.3 \
CURLOPT_SSL_ENABLE_ALPN.3 \
CURLOPT_SSL_ENABLE_NPN.3 \
CURLOPT_SSL_FALSESTART.3 \
diff --git a/docs/libcurl/symbols-in-versions b/docs/libcurl/symbols-in-versions
index d809940d7..dc0e0629f 100644
--- a/docs/libcurl/symbols-in-versions
+++ b/docs/libcurl/symbols-in-versions
@@ -23,6 +23,7 @@ CURL_CHUNK_END_FUNC_OK 7.21.0
CURL_CSELECT_ERR 7.16.3
CURL_CSELECT_IN 7.16.3
CURL_CSELECT_OUT 7.16.3
+CURL_DEPRECATED 7.87.0
CURL_DID_MEMORY_FUNC_TYPEDEFS 7.49.0
CURL_EASY_NONE 7.14.0 - 7.15.4
CURL_EASY_TIMEOUT 7.14.0 - 7.15.4
@@ -52,6 +53,7 @@ CURL_HTTP_VERSION_2_0 7.33.0
CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE 7.49.0
CURL_HTTP_VERSION_2TLS 7.47.0
CURL_HTTP_VERSION_3 7.66.0
+CURL_HTTP_VERSION_3ONLY 7.88.0
CURL_HTTP_VERSION_NONE 7.9.1
CURL_HTTPPOST_BUFFER 7.46.0
CURL_HTTPPOST_CALLBACK 7.46.0
@@ -61,6 +63,7 @@ CURL_HTTPPOST_PTRBUFFER 7.46.0
CURL_HTTPPOST_PTRCONTENTS 7.46.0
CURL_HTTPPOST_PTRNAME 7.46.0
CURL_HTTPPOST_READFILE 7.46.0
+CURL_IGNORE_DEPRECATION 7.87.0
CURL_IPRESOLVE_V4 7.10.8
CURL_IPRESOLVE_V6 7.10.8
CURL_IPRESOLVE_WHATEVER 7.10.8
@@ -71,6 +74,7 @@ CURL_LOCK_ACCESS_SINGLE 7.10.3
CURL_LOCK_DATA_CONNECT 7.10.3
CURL_LOCK_DATA_COOKIE 7.10.3
CURL_LOCK_DATA_DNS 7.10.3
+CURL_LOCK_DATA_HSTS 7.88.0
CURL_LOCK_DATA_NONE 7.10.3
CURL_LOCK_DATA_PSL 7.61.0
CURL_LOCK_DATA_SHARE 7.10.4
@@ -186,7 +190,8 @@ CURL_VERSION_ZSTD 7.72.0
CURL_WAIT_POLLIN 7.28.0
CURL_WAIT_POLLOUT 7.28.0
CURL_WAIT_POLLPRI 7.28.0
-CURL_WIN32 7.69.0
+CURL_WIN32 7.69.0 - 8.5.0
+CURL_WRITEFUNC_ERROR 7.87.0
CURL_WRITEFUNC_PAUSE 7.18.0
CURL_ZERO_TERMINATED 7.56.0
CURLALTSVC_H1 7.64.1
@@ -207,12 +212,12 @@ CURLAUTH_NONE 7.10.6
CURLAUTH_NTLM 7.10.6
CURLAUTH_NTLM_WB 7.22.0
CURLAUTH_ONLY 7.21.3
-CURLCLOSEPOLICY_CALLBACK 7.7
-CURLCLOSEPOLICY_LEAST_RECENTLY_USED 7.7
-CURLCLOSEPOLICY_LEAST_TRAFFIC 7.7
-CURLCLOSEPOLICY_NONE 7.7
-CURLCLOSEPOLICY_OLDEST 7.7
-CURLCLOSEPOLICY_SLOWEST 7.7
+CURLCLOSEPOLICY_CALLBACK 7.7 7.16.1
+CURLCLOSEPOLICY_LEAST_RECENTLY_USED 7.7 7.16.1
+CURLCLOSEPOLICY_LEAST_TRAFFIC 7.7 7.16.1
+CURLCLOSEPOLICY_NONE 7.7 7.16.1
+CURLCLOSEPOLICY_OLDEST 7.7 7.16.1
+CURLCLOSEPOLICY_SLOWEST 7.7 7.16.1
CURLE_ABORTED_BY_CALLBACK 7.1
CURLE_AGAIN 7.18.2
CURLE_ALREADY_COMPLETE 7.7.2 7.8
@@ -416,6 +421,7 @@ CURLINFO_CAINFO 7.84.0
CURLINFO_CAPATH 7.84.0
CURLINFO_CERTINFO 7.19.1
CURLINFO_CONDITION_UNMET 7.19.4
+CURLINFO_CONN_ID 8.2.0
CURLINFO_CONNECT_TIME 7.4.1
CURLINFO_CONNECT_TIME_T 7.61.0
CURLINFO_CONTENT_LENGTH_DOWNLOAD 7.6.1 7.55.0
@@ -498,6 +504,7 @@ CURLINFO_TLS_SSL_PTR 7.48.0
CURLINFO_TOTAL_TIME 7.4.1
CURLINFO_TOTAL_TIME_T 7.61.0
CURLINFO_TYPEMASK 7.4.1
+CURLINFO_XFER_ID 8.2.0
CURLIOCMD_NOP 7.12.3
CURLIOCMD_RESTARTREAD 7.12.3
CURLIOE_FAILRESTART 7.12.3
@@ -565,6 +572,7 @@ CURLOPT_BUFFERSIZE 7.10
CURLOPT_CAINFO 7.4.2
CURLOPT_CAINFO_BLOB 7.77.0
CURLOPT_CAPATH 7.9.8
+CURLOPT_CA_CACHE_TIMEOUT 7.87.0
CURLOPT_CERTINFO 7.19.1
CURLOPT_CHUNK_BGN_FUNCTION 7.21.0
CURLOPT_CHUNK_DATA 7.21.0
@@ -637,6 +645,7 @@ CURLOPT_FTPSSLAUTH 7.12.2
CURLOPT_GSSAPI_DELEGATION 7.22.0
CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS 7.59.0
CURLOPT_HAPROXYPROTOCOL 7.60.0
+CURLOPT_HAPROXY_CLIENT_IP 8.2.0
CURLOPT_HEADER 7.1
CURLOPT_HEADERDATA 7.10
CURLOPT_HEADERFUNCTION 7.7.2
@@ -682,7 +691,9 @@ CURLOPT_LOW_SPEED_TIME 7.1
CURLOPT_MAIL_AUTH 7.25.0
CURLOPT_MAIL_FROM 7.20.0
CURLOPT_MAIL_RCPT 7.20.0
-CURLOPT_MAIL_RCPT_ALLLOWFAILS 7.69.0
+CURLOPT_MAIL_RCPT_ALLLOWFAILS 7.69.0 8.2.0
+CURLOPT_MAIL_RCPT_ALLOWFAILS 8.2.0
+CURLOPT_QUICK_EXIT 7.87.0
CURLOPT_MAX_RECV_SPEED_LARGE 7.15.5
CURLOPT_MAX_SEND_SPEED_LARGE 7.15.5
CURLOPT_MAXAGE_CONN 7.65.0
@@ -808,8 +819,8 @@ CURLOPT_SSH_AUTH_TYPES 7.16.1
CURLOPT_SSH_COMPRESSION 7.56.0
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 7.17.1
CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 7.80.0
-CURLOPT_SSH_HOSTKEYDATA 7.84.0
-CURLOPT_SSH_HOSTKEYFUNCTION 7.84.0
+CURLOPT_SSH_HOSTKEYDATA 7.84.0
+CURLOPT_SSH_HOSTKEYFUNCTION 7.84.0
CURLOPT_SSH_KEYDATA 7.19.6
CURLOPT_SSH_KEYFUNCTION 7.19.6
CURLOPT_SSH_KNOWNHOSTS 7.19.6
@@ -866,7 +877,7 @@ CURLOPT_TRANSFER_ENCODING 7.21.6
CURLOPT_TRANSFERTEXT 7.1.1
CURLOPT_UNIX_SOCKET_PATH 7.40.0
CURLOPT_UNRESTRICTED_AUTH 7.10.4
-CURLOPT_UPKEEP_INTERVAL_MS 7.62.0
+CURLOPT_UPKEEP_INTERVAL_MS 7.62.0
CURLOPT_UPLOAD 7.1
CURLOPT_UPLOAD_BUFFERSIZE 7.62.0
CURLOPT_URL 7.1
@@ -884,6 +895,7 @@ CURLOPT_WS_OPTIONS 7.86.0
CURLOPT_XFERINFODATA 7.32.0
CURLOPT_XFERINFOFUNCTION 7.32.0
CURLOPT_XOAUTH2_BEARER 7.33.0
+CURLOPTDEPRECATED 7.87.0
CURLOPTTYPE_BLOB 7.71.0
CURLOPTTYPE_CBPOINT 7.73.0
CURLOPTTYPE_FUNCTIONPOINT 7.1
@@ -946,6 +958,7 @@ CURLPROTO_TFTP 7.19.4
CURLPROXY_HTTP 7.10
CURLPROXY_HTTP_1_0 7.19.4
CURLPROXY_HTTPS 7.52.0
+CURLPROXY_HTTPS2 8.1.0
CURLPROXY_SOCKS4 7.10
CURLPROXY_SOCKS4A 7.18.0
CURLPROXY_SOCKS5 7.10
@@ -1007,6 +1020,7 @@ CURLSSH_AUTH_KEYBOARD 7.16.1
CURLSSH_AUTH_NONE 7.16.1
CURLSSH_AUTH_PASSWORD 7.16.1
CURLSSH_AUTH_PUBLICKEY 7.16.1
+CURLSSLBACKEND_AWSLC 8.1.0
CURLSSLBACKEND_AXTLS 7.38.0 7.61.0
CURLSSLBACKEND_BEARSSL 7.68.0
CURLSSLBACKEND_BORINGSSL 7.49.0
@@ -1049,6 +1063,8 @@ CURLU_NO_AUTHORITY 7.67.0
CURLU_NO_DEFAULT_PORT 7.62.0
CURLU_NON_SUPPORT_SCHEME 7.62.0
CURLU_PATH_AS_IS 7.62.0
+CURLU_PUNY2IDN 8.3.0
+CURLU_PUNYCODE 7.88.0
CURLU_URLDECODE 7.62.0
CURLU_URLENCODE 7.62.0
CURLUE_BAD_FILE_URL 7.81.0
@@ -1065,6 +1081,7 @@ CURLUE_BAD_QUERY 7.81.0
CURLUE_BAD_SCHEME 7.81.0
CURLUE_BAD_SLASHES 7.81.0
CURLUE_BAD_USER 7.81.0
+CURLUE_LACKS_IDN 7.88.0
CURLUE_MALFORMED_INPUT 7.62.0
CURLUE_NO_FRAGMENT 7.62.0
CURLUE_NO_HOST 7.62.0
@@ -1097,6 +1114,7 @@ CURLUSESSL_CONTROL 7.17.0
CURLUSESSL_NONE 7.17.0
CURLUSESSL_TRY 7.17.0
CURLVERSION_EIGHTH 7.72.0
+CURLVERSION_ELEVENTH 7.87.0
CURLVERSION_FIFTH 7.57.0
CURLVERSION_FIRST 7.10
CURLVERSION_FOURTH 7.16.1
diff --git a/docs/libcurl/symbols.pl b/docs/libcurl/symbols.pl
index 8087d0f57..1105ae66b 100755
--- a/docs/libcurl/symbols.pl
+++ b/docs/libcurl/symbols.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2011 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -23,10 +23,10 @@
#
###########################################################################
#
-# Experience has shown that the symbols-in-versions file is very useful to
-# applications that want to build with a wide range of libcurl versions.
-# It is however easy to get it wrong and the source gets a bit messy with all
-# the fixed numerical comparisons.
+# Experience has shown that the symbols-in-versions file is useful to
+# applications that want to build with a wide range of libcurl versions. It
+# is however easy to get it wrong and the source gets a bit messy with all the
+# fixed numerical comparisons.
#
# The point of this script is to provide an easy-to-use macro for libcurl-
# using applications to do preprocessor checks for specific libcurl defines,
diff --git a/docs/mk-ca-bundle.1 b/docs/mk-ca-bundle.1
index 98b5ae1c4..e6db0504c 100644
--- a/docs/mk-ca-bundle.1
+++ b/docs/mk-ca-bundle.1
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 2008 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH mk-ca-bundle 1 "24 Oct 2016" "version 1.27" "mk-ca-bundle manual"
+.TH mk-ca-bundle 1 "24 Oct 2016" mk-ca-bundle mk-ca-bundle
.SH NAME
mk-ca-bundle \- convert Mozilla's certificate bundle to PEM format
.SH SYNOPSIS
diff --git a/docs/options-in-versions b/docs/options-in-versions
index a6c75cfd0..090580943 100644
--- a/docs/options-in-versions
+++ b/docs/options-in-versions
@@ -16,6 +16,7 @@
--append (-a) 4.8
--aws-sigv4 7.75.0
--basic 7.10.6
+--ca-native 8.2.0
--cacert 7.5
--capath 7.9.8
--cert (-E) 5.0
@@ -81,6 +82,7 @@
--globoff (-g) 7.6
--happy-eyeballs-timeout-ms 7.59.0
--haproxy-protocol 7.60.0
+--haproxy-clientip 8.2.0
--head (-I) 4.0
--header (-H) 5.0
--help (-h) 4.0
@@ -93,7 +95,9 @@
--http2 7.33.0
--http2-prior-knowledge 7.49.0
--http3 7.66.0
+--http3-only 7.88.0
--ignore-content-length 7.14.1
+--ipfs-gateway 8.4.0
--include (-i) 4.8
--insecure (-k) 7.10
--interface 7.3
@@ -156,6 +160,7 @@
--proxy (-x) 4.0
--proxy-anyauth 7.13.2
--proxy-basic 7.12.0
+--proxy-ca-native 8.2.0
--proxy-cacert 7.52.0
--proxy-capath 7.52.0
--proxy-cert 7.52.0
@@ -164,6 +169,7 @@
--proxy-crlfile 7.52.0
--proxy-digest 7.12.0
--proxy-header 7.37.0
+--proxy-http2 8.1.0
--proxy-insecure 7.52.0
--proxy-key 7.52.0
--proxy-key-type 7.52.0
@@ -247,13 +253,17 @@
--tr-encoding 7.21.6
--trace 7.9.7
--trace-ascii 7.9.7
+--trace-config 8.3.0
+--trace-ids 8.2.0
--trace-time 7.14.0
--unix-socket 7.40.0
--upload-file (-T) 4.0
--url 7.5
+--url-query 7.87.0
--use-ascii (-B) 5.0
--user (-u) 4.0
--user-agent (-A) 4.5.1
+--variable 8.3.0
--verbose (-v) 4.0
--version (-V) 4.0
--write-out (-w) 6.5
diff --git a/include/Makefile.am b/include/Makefile.am
index 32d7b339d..d65bfeaa0 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/include/Makefile.in b/include/Makefile.in
index 6fddc702f..b96d63a33 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -95,7 +95,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.m4 \
$(top_srcdir)/m4/curl-confopts.m4 \
$(top_srcdir)/m4/curl-functions.m4 \
$(top_srcdir)/m4/curl-gnutls.m4 \
- $(top_srcdir)/m4/curl-mbedtls.m4 $(top_srcdir)/m4/curl-nss.m4 \
+ $(top_srcdir)/m4/curl-mbedtls.m4 \
$(top_srcdir)/m4/curl-openssl.m4 \
$(top_srcdir)/m4/curl-override.m4 \
$(top_srcdir)/m4/curl-reentrant.m4 \
@@ -207,6 +207,8 @@ am__relativize = \
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APACHECTL = @APACHECTL@
+APXS = @APXS@
AR = @AR@
AR_FLAGS = @AR_FLAGS@
AS = @AS@
@@ -215,6 +217,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@
+CADDY = @CADDY@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -276,6 +279,8 @@ HAVE_LIBZ = @HAVE_LIBZ@
HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
HAVE_PROTO_BSDSOCKET_H = @HAVE_PROTO_BSDSOCKET_H@
HAVE_ZSTD = @HAVE_ZSTD@
+HTTPD = @HTTPD@
+HTTPD_NGHTTPX = @HTTPD_NGHTTPX@
IDN_ENABLED = @IDN_ENABLED@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -303,7 +308,6 @@ MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
NROFF = @NROFF@
-NSS_LIBS = @NSS_LIBS@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
@@ -334,6 +338,7 @@ SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@
SUPPORT_FEATURES = @SUPPORT_FEATURES@
SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_NGHTTPX = @TEST_NGHTTPX@
USE_ARES = @USE_ARES@
USE_BEARSSL = @USE_BEARSSL@
USE_GNUTLS = @USE_GNUTLS@
@@ -347,9 +352,8 @@ USE_NGHTTP2 = @USE_NGHTTP2@
USE_NGHTTP3 = @USE_NGHTTP3@
USE_NGTCP2 = @USE_NGTCP2@
USE_NGTCP2_CRYPTO_GNUTLS = @USE_NGTCP2_CRYPTO_GNUTLS@
-USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@
+USE_NGTCP2_CRYPTO_QUICTLS = @USE_NGTCP2_CRYPTO_QUICTLS@
USE_NGTCP2_CRYPTO_WOLFSSL = @USE_NGTCP2_CRYPTO_WOLFSSL@
-USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_RUSTLS = @USE_RUSTLS@
@@ -428,7 +432,7 @@ top_srcdir = @top_srcdir@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/include/README.md b/include/README.md
index 8fdbe0e0e..c96593263 100644
--- a/include/README.md
+++ b/include/README.md
@@ -1,5 +1,5 @@
<!--
-Copyright (C) 2000 - 2022 Daniel Stenberg, <daniel@haxx.se>, et al.
+Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
-->
diff --git a/include/curl/Makefile.am b/include/curl/Makefile.am
index 29f470c09..a655aff1c 100644
--- a/include/curl/Makefile.am
+++ b/include/curl/Makefile.am
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/include/curl/Makefile.in b/include/curl/Makefile.in
index 89675ba1c..548da3461 100644
--- a/include/curl/Makefile.in
+++ b/include/curl/Makefile.in
@@ -95,7 +95,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.m4 \
$(top_srcdir)/m4/curl-confopts.m4 \
$(top_srcdir)/m4/curl-functions.m4 \
$(top_srcdir)/m4/curl-gnutls.m4 \
- $(top_srcdir)/m4/curl-mbedtls.m4 $(top_srcdir)/m4/curl-nss.m4 \
+ $(top_srcdir)/m4/curl-mbedtls.m4 \
$(top_srcdir)/m4/curl-openssl.m4 \
$(top_srcdir)/m4/curl-override.m4 \
$(top_srcdir)/m4/curl-reentrant.m4 \
@@ -194,6 +194,8 @@ pkgincludedir = $(includedir)/curl
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APACHECTL = @APACHECTL@
+APXS = @APXS@
AR = @AR@
AR_FLAGS = @AR_FLAGS@
AS = @AS@
@@ -202,6 +204,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@
+CADDY = @CADDY@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -263,6 +266,8 @@ HAVE_LIBZ = @HAVE_LIBZ@
HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
HAVE_PROTO_BSDSOCKET_H = @HAVE_PROTO_BSDSOCKET_H@
HAVE_ZSTD = @HAVE_ZSTD@
+HTTPD = @HTTPD@
+HTTPD_NGHTTPX = @HTTPD_NGHTTPX@
IDN_ENABLED = @IDN_ENABLED@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -290,7 +295,6 @@ MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
NROFF = @NROFF@
-NSS_LIBS = @NSS_LIBS@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
@@ -321,6 +325,7 @@ SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@
SUPPORT_FEATURES = @SUPPORT_FEATURES@
SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_NGHTTPX = @TEST_NGHTTPX@
USE_ARES = @USE_ARES@
USE_BEARSSL = @USE_BEARSSL@
USE_GNUTLS = @USE_GNUTLS@
@@ -334,9 +339,8 @@ USE_NGHTTP2 = @USE_NGHTTP2@
USE_NGHTTP3 = @USE_NGHTTP3@
USE_NGTCP2 = @USE_NGTCP2@
USE_NGTCP2_CRYPTO_GNUTLS = @USE_NGTCP2_CRYPTO_GNUTLS@
-USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@
+USE_NGTCP2_CRYPTO_QUICTLS = @USE_NGTCP2_CRYPTO_QUICTLS@
USE_NGTCP2_CRYPTO_WOLFSSL = @USE_NGTCP2_CRYPTO_WOLFSSL@
-USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_RUSTLS = @USE_RUSTLS@
@@ -415,7 +419,7 @@ top_srcdir = @top_srcdir@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/include/curl/curl.h b/include/curl/curl.h
index e28dd0b5a..cc24c0506 100644
--- a/include/curl/curl.h
+++ b/include/curl/curl.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -33,31 +33,39 @@
#define CURL_STRICTER
#endif
+/* Compile-time deprecation macros. */
+#if defined(__GNUC__) && \
+ ((__GNUC__ > 12) || ((__GNUC__ == 12) && (__GNUC_MINOR__ >= 1 ))) && \
+ !defined(__INTEL_COMPILER) && \
+ !defined(CURL_DISABLE_DEPRECATION) && !defined(BUILDING_LIBCURL)
+#define CURL_DEPRECATED(version, message) \
+ __attribute__((deprecated("since " # version ". " message)))
+#define CURL_IGNORE_DEPRECATION(statements) \
+ _Pragma("GCC diagnostic push") \
+ _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \
+ statements \
+ _Pragma("GCC diagnostic pop")
+#else
+#define CURL_DEPRECATED(version, message)
+#define CURL_IGNORE_DEPRECATION(statements) statements
+#endif
+
#include "curlver.h" /* libcurl version defines */
#include "system.h" /* determine things run-time */
-/*
- * Define CURL_WIN32 when build target is Win32 API
- */
-
-#if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) && \
- !defined(__SYMBIAN32__)
-#define CURL_WIN32
-#endif
-
#include <stdio.h>
#include <limits.h>
-#if (defined(__FreeBSD__) && (__FreeBSD__ >= 2)) || defined(__MidnightBSD__)
+#if defined(__FreeBSD__) || defined(__MidnightBSD__)
/* Needed for __FreeBSD_version or __MidnightBSD_version symbol definition */
-#include <osreldate.h>
+#include <sys/param.h>
#endif
/* The include stuff here below is mainly for time_t! */
#include <sys/types.h>
#include <time.h>
-#if defined(CURL_WIN32) && !defined(_WIN32_WCE) && !defined(__CYGWIN__)
+#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__CYGWIN__)
#if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H) || \
defined(__LWIP_OPT_H__) || defined(LWIP_HDR_OPT_H))
/* The check above prevents the winsock2 inclusion if winsock.h already was
@@ -71,20 +79,20 @@
libc5-based Linux systems. Only include it on systems that are known to
require it! */
#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \
- defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \
+ defined(__minix) || defined(__INTEGRITY) || \
defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \
defined(__CYGWIN__) || defined(AMIGA) || defined(__NuttX__) || \
(defined(__FreeBSD_version) && (__FreeBSD_version < 800000)) || \
(defined(__MidnightBSD_version) && (__MidnightBSD_version < 100000)) || \
- defined(__sun__)
+ defined(__sun__) || defined(__serenity__) || defined(__vxworks__)
#include <sys/select.h>
#endif
-#if !defined(CURL_WIN32) && !defined(_WIN32_WCE)
+#if !defined(_WIN32) && !defined(_WIN32_WCE)
#include <sys/socket.h>
#endif
-#if !defined(CURL_WIN32)
+#if !defined(_WIN32)
#include <sys/time.h>
#endif
@@ -111,7 +119,7 @@ typedef void CURLSH;
#ifdef CURL_STATICLIB
# define CURL_EXTERN
-#elif defined(CURL_WIN32) || defined(__SYMBIAN32__) || \
+#elif defined(_WIN32) || \
(__has_declspec_attribute(dllexport) && \
__has_declspec_attribute(dllimport))
# if defined(BUILDING_LIBCURL)
@@ -127,7 +135,7 @@ typedef void CURLSH;
#ifndef curl_socket_typedef
/* socket typedef */
-#if defined(CURL_WIN32) && !defined(__LWIP_OPT_H__) && !defined(LWIP_HDR_OPT_H)
+#if defined(_WIN32) && !defined(__LWIP_OPT_H__) && !defined(LWIP_HDR_OPT_H)
typedef SOCKET curl_socket_t;
#define CURL_SOCKET_BAD INVALID_SOCKET
#else
@@ -142,23 +150,24 @@ typedef enum {
CURLSSLBACKEND_NONE = 0,
CURLSSLBACKEND_OPENSSL = 1,
CURLSSLBACKEND_GNUTLS = 2,
- CURLSSLBACKEND_NSS = 3,
+ CURLSSLBACKEND_NSS CURL_DEPRECATED(8.3.0, "") = 3,
CURLSSLBACKEND_OBSOLETE4 = 4, /* Was QSOSSL. */
- CURLSSLBACKEND_GSKIT = 5,
- CURLSSLBACKEND_POLARSSL = 6,
+ CURLSSLBACKEND_GSKIT CURL_DEPRECATED(8.3.0, "") = 5,
+ CURLSSLBACKEND_POLARSSL CURL_DEPRECATED(7.69.0, "") = 6,
CURLSSLBACKEND_WOLFSSL = 7,
CURLSSLBACKEND_SCHANNEL = 8,
CURLSSLBACKEND_SECURETRANSPORT = 9,
- CURLSSLBACKEND_AXTLS = 10, /* never used since 7.63.0 */
+ CURLSSLBACKEND_AXTLS CURL_DEPRECATED(7.61.0, "") = 10,
CURLSSLBACKEND_MBEDTLS = 11,
- CURLSSLBACKEND_MESALINK = 12,
+ CURLSSLBACKEND_MESALINK CURL_DEPRECATED(7.82.0, "") = 12,
CURLSSLBACKEND_BEARSSL = 13,
CURLSSLBACKEND_RUSTLS = 14
} curl_sslbackend;
/* aliases for library clones and renames */
-#define CURLSSLBACKEND_LIBRESSL CURLSSLBACKEND_OPENSSL
+#define CURLSSLBACKEND_AWSLC CURLSSLBACKEND_OPENSSL
#define CURLSSLBACKEND_BORINGSSL CURLSSLBACKEND_OPENSSL
+#define CURLSSLBACKEND_LIBRESSL CURLSSLBACKEND_OPENSSL
/* deprecated names: */
#define CURLSSLBACKEND_CYASSL CURLSSLBACKEND_WOLFSSL
@@ -232,7 +241,7 @@ typedef int (*curl_xferinfo_callback)(void *clientp,
#ifndef CURL_MAX_READ_SIZE
/* The maximum receive buffer size configurable via CURLOPT_BUFFERSIZE. */
-#define CURL_MAX_READ_SIZE 524288
+#define CURL_MAX_READ_SIZE (10*1024*1024)
#endif
#ifndef CURL_MAX_WRITE_SIZE
@@ -256,6 +265,10 @@ typedef int (*curl_xferinfo_callback)(void *clientp,
will signal libcurl to pause receiving on the current transfer. */
#define CURL_WRITEFUNC_PAUSE 0x10000001
+/* This is a magic return code for the write callback that, when returned,
+ will signal an error from the callback. */
+#define CURL_WRITEFUNC_ERROR 0xFFFFFFFF
+
typedef size_t (*curl_write_callback)(char *buffer,
size_t size,
size_t nitems,
@@ -310,7 +323,8 @@ struct curl_fileinfo {
unsigned int flags;
- /* used internally */
+ /* These are libcurl private struct fields. Previously used by libcurl, so
+ they must never be interfered with. */
char *b_data;
size_t b_size;
size_t b_used;
@@ -368,7 +382,7 @@ typedef int (*curl_seek_callback)(void *instream,
#define CURL_READFUNC_PAUSE 0x10000001
/* Return code for when the trailing headers' callback has terminated
- without any errors*/
+ without any errors */
#define CURL_TRAILERFUNC_OK 0
/* Return code for when was an error in the trailing header's list and we
want to abort the request */
@@ -450,7 +464,7 @@ typedef void *(*curl_calloc_callback)(size_t nmemb, size_t size);
#define CURL_DID_MEMORY_FUNC_TYPEDEFS
#endif
-/* the kind of data that is passed to information_callback*/
+/* the kind of data that is passed to information_callback */
typedef enum {
CURLINFO_TEXT = 0,
CURLINFO_HEADER_IN, /* 1 */
@@ -623,10 +637,10 @@ typedef enum {
#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all
the obsolete stuff removed! */
-/* Previously obsolete error code re-used in 7.38.0 */
+/* Previously obsolete error code reused in 7.38.0 */
#define CURLE_OBSOLETE16 CURLE_HTTP2
-/* Previously obsolete error codes re-used in 7.24.0 */
+/* Previously obsolete error codes reused in 7.24.0 */
#define CURLE_OBSOLETE10 CURLE_FTP_ACCEPT_FAILED
#define CURLE_OBSOLETE12 CURLE_FTP_ACCEPT_TIMEOUT
@@ -698,7 +712,7 @@ typedef enum {
#define CURLOPT_WRITEINFO CURLOPT_OBSOLETE40
#define CURLOPT_CLOSEPOLICY CURLOPT_OBSOLETE72
-#endif /*!CURL_NO_OLDIES*/
+#endif /* !CURL_NO_OLDIES */
/*
* Proxy error codes. Returned in CURLINFO_PROXY_ERROR if CURLE_PROXY was
@@ -757,7 +771,8 @@ typedef enum {
CONNECT HTTP/1.1 */
CURLPROXY_HTTP_1_0 = 1, /* added in 7.19.4, force to use CONNECT
HTTP/1.0 */
- CURLPROXY_HTTPS = 2, /* added in 7.52.0 */
+ CURLPROXY_HTTPS = 2, /* HTTPS but stick to HTTP/1 added in 7.52.0 */
+ CURLPROXY_HTTPS2 = 3, /* HTTPS and attempt HTTP/2 added in 8.2.0 */
CURLPROXY_SOCKS4 = 4, /* support added in 7.15.2, enum existed already
in 7.10 */
CURLPROXY_SOCKS5 = 5, /* added in 7.10 */
@@ -843,7 +858,7 @@ enum curl_khstat {
CURLKHSTAT_DEFER, /* do not accept it, but we can't answer right now.
Causes a CURLE_PEER_FAILED_VERIFICATION error but the
connection will be left intact etc */
- CURLKHSTAT_FINE_REPLACE, /* accept and replace the wrong key*/
+ CURLKHSTAT_FINE_REPLACE, /* accept and replace the wrong key */
CURLKHSTAT_LAST /* not for use, only a marker for last-in-list */
};
@@ -864,13 +879,13 @@ typedef int
/* CURLOPT_SSH_KEYDATA */
typedef int
- (*curl_sshhostkeycallback) (void *clientp,/* custom pointer passed*/
+ (*curl_sshhostkeycallback) (void *clientp,/* custom pointer passed */
/* with CURLOPT_SSH_HOSTKEYDATA */
int keytype, /* CURLKHTYPE */
- const char *key, /*hostkey to check*/
- size_t keylen); /*length of the key*/
- /*return CURLE_OK to accept*/
- /*or something else to refuse*/
+ const char *key, /* hostkey to check */
+ size_t keylen); /* length of the key */
+ /* return CURLE_OK to accept */
+ /* or something else to refuse */
/* parameter for the CURLOPT_USE_SSL option */
@@ -932,7 +947,7 @@ typedef enum {
#define CURLFTPSSL_ALL CURLUSESSL_ALL
#define CURLFTPSSL_LAST CURLUSESSL_LAST
#define curl_ftpssl curl_usessl
-#endif /*!CURL_NO_OLDIES*/
+#endif /* !CURL_NO_OLDIES */
/* parameter for the CURLOPT_FTP_SSL_CCC option */
typedef enum {
@@ -1058,6 +1073,7 @@ typedef CURLSTScode (*curl_hstswrite_callback)(CURL *easy,
#define CURLOPT(na,t,nu) na = t + nu
+#define CURLOPTDEPRECATED(na,t,nu,v,m) na CURL_DEPRECATED(v,m) = t + nu
/* CURLOPT aliases that make no run-time difference */
@@ -1119,7 +1135,7 @@ typedef enum {
/* Time-out the read operation after this amount of seconds */
CURLOPT(CURLOPT_TIMEOUT, CURLOPTTYPE_LONG, 13),
- /* If the CURLOPT_INFILE is used, this can be used to inform libcurl about
+ /* If CURLOPT_READDATA is used, this can be used to inform libcurl about
* how large the file being sent really is. That allows better error
* checking and better verifies that the upload was successful. -1 means
* unknown size.
@@ -1171,7 +1187,8 @@ typedef enum {
CURLOPT(CURLOPT_HTTPHEADER, CURLOPTTYPE_SLISTPOINT, 23),
/* This points to a linked list of post entries, struct curl_httppost */
- CURLOPT(CURLOPT_HTTPPOST, CURLOPTTYPE_OBJECTPOINT, 24),
+ CURLOPTDEPRECATED(CURLOPT_HTTPPOST, CURLOPTTYPE_OBJECTPOINT, 24,
+ 7.56.0, "Use CURLOPT_MIMEPOST"),
/* name of the file keeping your private SSL-certificate */
CURLOPT(CURLOPT_SSLCERT, CURLOPTTYPE_STRINGPOINT, 25),
@@ -1261,7 +1278,8 @@ typedef enum {
CURLOPT(CURLOPT_TRANSFERTEXT, CURLOPTTYPE_LONG, 53),
/* HTTP PUT */
- CURLOPT(CURLOPT_PUT, CURLOPTTYPE_LONG, 54),
+ CURLOPTDEPRECATED(CURLOPT_PUT, CURLOPTTYPE_LONG, 54,
+ 7.12.1, "Use CURLOPT_UPLOAD"),
/* 55 = OBSOLETE */
@@ -1269,7 +1287,8 @@ typedef enum {
* Function that will be called instead of the internal progress display
* function. This function should be defined as the curl_progress_callback
* prototype defines. */
- CURLOPT(CURLOPT_PROGRESSFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 56),
+ CURLOPTDEPRECATED(CURLOPT_PROGRESSFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 56,
+ 7.32.0, "Use CURLOPT_XFERINFOFUNCTION"),
/* Data passed to the CURLOPT_PROGRESSFUNCTION and CURLOPT_XFERINFOFUNCTION
callbacks */
@@ -1286,7 +1305,7 @@ typedef enum {
/* size of the POST input data, if strlen() is not good to use */
CURLOPT(CURLOPT_POSTFIELDSIZE, CURLOPTTYPE_LONG, 60),
- /* tunnel non-http operations through a HTTP proxy */
+ /* tunnel non-http operations through an HTTP proxy */
CURLOPT(CURLOPT_HTTPPROXYTUNNEL, CURLOPTTYPE_LONG, 61),
/* Set the interface string to use as outgoing network interface */
@@ -1330,17 +1349,19 @@ typedef enum {
operation slower and is less friendly for the network. */
CURLOPT(CURLOPT_FRESH_CONNECT, CURLOPTTYPE_LONG, 74),
- /* Set to explicitly forbid the upcoming transfer's connection to be re-used
+ /* Set to explicitly forbid the upcoming transfer's connection to be reused
when done. Do not use this unless you're absolutely sure of this, as it
makes the operation slower and is less friendly for the network. */
CURLOPT(CURLOPT_FORBID_REUSE, CURLOPTTYPE_LONG, 75),
/* Set to a file name that contains random data for libcurl to use to
seed the random engine when doing SSL connects. */
- CURLOPT(CURLOPT_RANDOM_FILE, CURLOPTTYPE_STRINGPOINT, 76),
+ CURLOPTDEPRECATED(CURLOPT_RANDOM_FILE, CURLOPTTYPE_STRINGPOINT, 76,
+ 7.84.0, "Serves no purpose anymore"),
/* Set to the Entropy Gathering Daemon socket pathname */
- CURLOPT(CURLOPT_EGDSOCKET, CURLOPTTYPE_STRINGPOINT, 77),
+ CURLOPTDEPRECATED(CURLOPT_EGDSOCKET, CURLOPTTYPE_STRINGPOINT, 77,
+ 7.84.0, "Serves no purpose anymore"),
/* Time-out connect operations after this amount of seconds, if connects are
OK within this time, then fine... This only aborts the connect phase. */
@@ -1395,7 +1416,8 @@ typedef enum {
/* Non-zero value means to use the global dns cache */
/* DEPRECATED, do not use! */
- CURLOPT(CURLOPT_DNS_USE_GLOBAL_CACHE, CURLOPTTYPE_LONG, 91),
+ CURLOPTDEPRECATED(CURLOPT_DNS_USE_GLOBAL_CACHE, CURLOPTTYPE_LONG, 91,
+ 7.11.1, "Use CURLOPT_SHARE"),
/* DNS cache timeout */
CURLOPT(CURLOPT_DNS_CACHE_TIMEOUT, CURLOPTTYPE_LONG, 92),
@@ -1550,8 +1572,10 @@ typedef enum {
*/
CURLOPT(CURLOPT_FTPSSLAUTH, CURLOPTTYPE_VALUES, 129),
- CURLOPT(CURLOPT_IOCTLFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 130),
- CURLOPT(CURLOPT_IOCTLDATA, CURLOPTTYPE_CBPOINT, 131),
+ CURLOPTDEPRECATED(CURLOPT_IOCTLFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 130,
+ 7.18.0, "Use CURLOPT_SEEKFUNCTION"),
+ CURLOPTDEPRECATED(CURLOPT_IOCTLDATA, CURLOPTTYPE_CBPOINT, 131,
+ 7.18.0, "Use CURLOPT_SEEKDATA"),
/* 132 OBSOLETE. Gone in 7.16.0 */
/* 133 OBSOLETE. Gone in 7.16.0 */
@@ -1590,16 +1614,22 @@ typedef enum {
/* Function that will be called to convert from the
network encoding (instead of using the iconv calls in libcurl) */
- CURLOPT(CURLOPT_CONV_FROM_NETWORK_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 142),
+ CURLOPTDEPRECATED(CURLOPT_CONV_FROM_NETWORK_FUNCTION,
+ CURLOPTTYPE_FUNCTIONPOINT, 142,
+ 7.82.0, "Serves no purpose anymore"),
/* Function that will be called to convert to the
network encoding (instead of using the iconv calls in libcurl) */
- CURLOPT(CURLOPT_CONV_TO_NETWORK_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 143),
+ CURLOPTDEPRECATED(CURLOPT_CONV_TO_NETWORK_FUNCTION,
+ CURLOPTTYPE_FUNCTIONPOINT, 143,
+ 7.82.0, "Serves no purpose anymore"),
/* Function that will be called to convert from UTF8
(instead of using the iconv calls in libcurl)
Note that this is used only for SSL certificate processing */
- CURLOPT(CURLOPT_CONV_FROM_UTF8_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 144),
+ CURLOPTDEPRECATED(CURLOPT_CONV_FROM_UTF8_FUNCTION,
+ CURLOPTTYPE_FUNCTIONPOINT, 144,
+ 7.82.0, "Serves no purpose anymore"),
/* if the connection proceeds too quickly then need to slow it down */
/* limit-rate: maximum number of bytes per second to send or receive */
@@ -1613,7 +1643,7 @@ typedef enum {
CURLOPT(CURLOPT_SOCKOPTFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 148),
CURLOPT(CURLOPT_SOCKOPTDATA, CURLOPTTYPE_CBPOINT, 149),
- /* set to 0 to disable session ID re-use for this transfer, default is
+ /* set to 0 to disable session ID reuse for this transfer, default is
enabled (== 1) */
CURLOPT(CURLOPT_SSL_SESSIONID_CACHE, CURLOPTTYPE_LONG, 150),
@@ -1700,7 +1730,9 @@ typedef enum {
/* Socks Service */
/* DEPRECATED, do not use! */
- CURLOPT(CURLOPT_SOCKS5_GSSAPI_SERVICE, CURLOPTTYPE_STRINGPOINT, 179),
+ CURLOPTDEPRECATED(CURLOPT_SOCKS5_GSSAPI_SERVICE,
+ CURLOPTTYPE_STRINGPOINT, 179,
+ 7.49.0, "Use CURLOPT_PROXY_SERVICE_NAME"),
/* Socks Service */
CURLOPT(CURLOPT_SOCKS5_GSSAPI_NEC, CURLOPTTYPE_LONG, 180),
@@ -1709,12 +1741,14 @@ typedef enum {
transfer, which thus helps the app which takes URLs from users or other
external inputs and want to restrict what protocol(s) to deal
with. Defaults to CURLPROTO_ALL. */
- CURLOPT(CURLOPT_PROTOCOLS, CURLOPTTYPE_LONG, 181),
+ CURLOPTDEPRECATED(CURLOPT_PROTOCOLS, CURLOPTTYPE_LONG, 181,
+ 7.85.0, "Use CURLOPT_PROTOCOLS_STR"),
/* set the bitmask for the protocols that libcurl is allowed to follow to,
as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs
to be set in both bitmasks to be allowed to get redirected to. */
- CURLOPT(CURLOPT_REDIR_PROTOCOLS, CURLOPTTYPE_LONG, 182),
+ CURLOPTDEPRECATED(CURLOPT_REDIR_PROTOCOLS, CURLOPTTYPE_LONG, 182,
+ 7.85.0, "Use CURLOPT_REDIR_PROTOCOLS_STR"),
/* set the SSH knownhost file name to use */
CURLOPT(CURLOPT_SSH_KNOWNHOSTS, CURLOPTTYPE_STRINGPOINT, 183),
@@ -1859,12 +1893,13 @@ typedef enum {
CURLOPT(CURLOPT_LOGIN_OPTIONS, CURLOPTTYPE_STRINGPOINT, 224),
/* Enable/disable TLS NPN extension (http2 over ssl might fail without) */
- CURLOPT(CURLOPT_SSL_ENABLE_NPN, CURLOPTTYPE_LONG, 225),
+ CURLOPTDEPRECATED(CURLOPT_SSL_ENABLE_NPN, CURLOPTTYPE_LONG, 225,
+ 7.86.0, "Has no function"),
/* Enable/disable TLS ALPN extension (http2 over ssl might fail without) */
CURLOPT(CURLOPT_SSL_ENABLE_ALPN, CURLOPTTYPE_LONG, 226),
- /* Time to wait for a response to a HTTP request containing an
+ /* Time to wait for a response to an HTTP request containing an
* Expect: 100-continue header before sending the data anyway. */
CURLOPT(CURLOPT_EXPECT_100_TIMEOUT_MS, CURLOPTTYPE_LONG, 227),
@@ -2069,7 +2104,7 @@ typedef enum {
CURLOPT(CURLOPT_SASL_AUTHZID, CURLOPTTYPE_STRINGPOINT, 289),
/* allow RCPT TO command to fail for some recipients */
- CURLOPT(CURLOPT_MAIL_RCPT_ALLLOWFAILS, CURLOPTTYPE_LONG, 290),
+ CURLOPT(CURLOPT_MAIL_RCPT_ALLOWFAILS, CURLOPTTYPE_LONG, 290),
/* the private SSL-certificate as a "blob" */
CURLOPT(CURLOPT_SSLCERT_BLOB, CURLOPTTYPE_BLOB, 291),
@@ -2157,6 +2192,15 @@ typedef enum {
/* websockets options */
CURLOPT(CURLOPT_WS_OPTIONS, CURLOPTTYPE_LONG, 320),
+ /* CA cache timeout */
+ CURLOPT(CURLOPT_CA_CACHE_TIMEOUT, CURLOPTTYPE_LONG, 321),
+
+ /* Can leak things, gonna exit() soon */
+ CURLOPT(CURLOPT_QUICK_EXIT, CURLOPTTYPE_LONG, 322),
+
+ /* set a specific client IP for HAProxy PROXY protocol header? */
+ CURLOPT(CURLOPT_HAPROXY_CLIENT_IP, CURLOPTTYPE_STRINGPOINT, 323),
+
CURLOPT_LASTENTRY /* the last unused */
} CURLoption;
@@ -2185,6 +2229,9 @@ typedef enum {
/* */
#define CURLOPT_FTP_RESPONSE_TIMEOUT CURLOPT_SERVER_RESPONSE_TIMEOUT
+/* Added in 8.2.0 */
+#define CURLOPT_MAIL_RCPT_ALLLOWFAILS CURLOPT_MAIL_RCPT_ALLOWFAILS
+
#else
/* This is set if CURL_NO_OLDIES is defined at compile-time */
#undef CURLOPT_DNS_USE_GLOBAL_CACHE /* soon obsolete */
@@ -2213,8 +2260,13 @@ enum {
CURL_HTTP_VERSION_2TLS, /* use version 2 for HTTPS, version 1.1 for HTTP */
CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE, /* please use HTTP 2 without HTTP/1.1
Upgrade */
- CURL_HTTP_VERSION_3 = 30, /* Makes use of explicit HTTP/3 without fallback.
- Use CURLOPT_ALTSVC to enable HTTP/3 upgrade */
+ CURL_HTTP_VERSION_3 = 30, /* Use HTTP/3, fallback to HTTP/2 or HTTP/1 if
+ needed. For HTTPS only. For HTTP, this option
+ makes libcurl return error. */
+ CURL_HTTP_VERSION_3ONLY = 31, /* Use HTTP/3 without fallback. For HTTPS
+ only. For HTTP, this makes libcurl
+ return error. */
+
CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */
};
@@ -2444,30 +2496,32 @@ CURL_EXTERN CURLcode curl_mime_headers(curl_mimepart *part,
int take_ownership);
typedef enum {
- CURLFORM_NOTHING, /********* the first one is unused ************/
- CURLFORM_COPYNAME,
- CURLFORM_PTRNAME,
- CURLFORM_NAMELENGTH,
- CURLFORM_COPYCONTENTS,
- CURLFORM_PTRCONTENTS,
- CURLFORM_CONTENTSLENGTH,
- CURLFORM_FILECONTENT,
- CURLFORM_ARRAY,
+ /********* the first one is unused ************/
+ CURLFORM_NOTHING CURL_DEPRECATED(7.56.0, ""),
+ CURLFORM_COPYNAME CURL_DEPRECATED(7.56.0, "Use curl_mime_name()"),
+ CURLFORM_PTRNAME CURL_DEPRECATED(7.56.0, "Use curl_mime_name()"),
+ CURLFORM_NAMELENGTH CURL_DEPRECATED(7.56.0, ""),
+ CURLFORM_COPYCONTENTS CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"),
+ CURLFORM_PTRCONTENTS CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"),
+ CURLFORM_CONTENTSLENGTH CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"),
+ CURLFORM_FILECONTENT CURL_DEPRECATED(7.56.0, "Use curl_mime_data_cb()"),
+ CURLFORM_ARRAY CURL_DEPRECATED(7.56.0, ""),
CURLFORM_OBSOLETE,
- CURLFORM_FILE,
+ CURLFORM_FILE CURL_DEPRECATED(7.56.0, "Use curl_mime_filedata()"),
- CURLFORM_BUFFER,
- CURLFORM_BUFFERPTR,
- CURLFORM_BUFFERLENGTH,
+ CURLFORM_BUFFER CURL_DEPRECATED(7.56.0, "Use curl_mime_filename()"),
+ CURLFORM_BUFFERPTR CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"),
+ CURLFORM_BUFFERLENGTH CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"),
- CURLFORM_CONTENTTYPE,
- CURLFORM_CONTENTHEADER,
- CURLFORM_FILENAME,
+ CURLFORM_CONTENTTYPE CURL_DEPRECATED(7.56.0, "Use curl_mime_type()"),
+ CURLFORM_CONTENTHEADER CURL_DEPRECATED(7.56.0, "Use curl_mime_headers()"),
+ CURLFORM_FILENAME CURL_DEPRECATED(7.56.0, "Use curl_mime_filename()"),
CURLFORM_END,
CURLFORM_OBSOLETE2,
- CURLFORM_STREAM,
- CURLFORM_CONTENTLEN, /* added in 7.46.0, provide a curl_off_t length */
+ CURLFORM_STREAM CURL_DEPRECATED(7.56.0, "Use curl_mime_data_cb()"),
+ CURLFORM_CONTENTLEN /* added in 7.46.0, provide a curl_off_t length */
+ CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"),
CURLFORM_LASTENTRY /* the last unused */
} CURLformoption;
@@ -2495,15 +2549,16 @@ struct curl_forms {
*
***************************************************************************/
typedef enum {
- CURL_FORMADD_OK, /* first, no error */
+ CURL_FORMADD_OK CURL_DEPRECATED(7.56.0, ""), /* 1st, no error */
- CURL_FORMADD_MEMORY,
- CURL_FORMADD_OPTION_TWICE,
- CURL_FORMADD_NULL,
- CURL_FORMADD_UNKNOWN_OPTION,
- CURL_FORMADD_INCOMPLETE,
- CURL_FORMADD_ILLEGAL_ARRAY,
- CURL_FORMADD_DISABLED, /* libcurl was built with this disabled */
+ CURL_FORMADD_MEMORY CURL_DEPRECATED(7.56.0, ""),
+ CURL_FORMADD_OPTION_TWICE CURL_DEPRECATED(7.56.0, ""),
+ CURL_FORMADD_NULL CURL_DEPRECATED(7.56.0, ""),
+ CURL_FORMADD_UNKNOWN_OPTION CURL_DEPRECATED(7.56.0, ""),
+ CURL_FORMADD_INCOMPLETE CURL_DEPRECATED(7.56.0, ""),
+ CURL_FORMADD_ILLEGAL_ARRAY CURL_DEPRECATED(7.56.0, ""),
+ /* libcurl was built with form api disabled */
+ CURL_FORMADD_DISABLED CURL_DEPRECATED(7.56.0, ""),
CURL_FORMADD_LAST /* last */
} CURLFORMcode;
@@ -2517,9 +2572,10 @@ typedef enum {
* adds one part that together construct a full post. Then use
* CURLOPT_HTTPPOST to send it off to libcurl.
*/
-CURL_EXTERN CURLFORMcode curl_formadd(struct curl_httppost **httppost,
- struct curl_httppost **last_post,
- ...);
+CURL_EXTERN CURLFORMcode CURL_DEPRECATED(7.56.0, "Use curl_mime_init()")
+curl_formadd(struct curl_httppost **httppost,
+ struct curl_httppost **last_post,
+ ...);
/*
* callback function for curl_formget()
@@ -2542,8 +2598,9 @@ typedef size_t (*curl_formget_callback)(void *arg, const char *buf,
* the curl_formget_callback function.
* Returns 0 on success.
*/
-CURL_EXTERN int curl_formget(struct curl_httppost *form, void *arg,
- curl_formget_callback append);
+CURL_EXTERN int CURL_DEPRECATED(7.56.0, "")
+curl_formget(struct curl_httppost *form, void *arg,
+ curl_formget_callback append);
/*
* NAME curl_formfree()
*
@@ -2551,7 +2608,8 @@ CURL_EXTERN int curl_formget(struct curl_httppost *form, void *arg,
*
* Free a multipart formpost previously built with curl_formadd().
*/
-CURL_EXTERN void curl_formfree(struct curl_httppost *form);
+CURL_EXTERN void CURL_DEPRECATED(7.56.0, "Use curl_mime_free()")
+curl_formfree(struct curl_httppost *form);
/*
* NAME curl_getenv()
@@ -2664,6 +2722,20 @@ CURL_EXTERN CURLcode curl_global_init_mem(long flags,
*/
CURL_EXTERN void curl_global_cleanup(void);
+/*
+ * NAME curl_global_trace()
+ *
+ * DESCRIPTION
+ *
+ * curl_global_trace() can be invoked at application start to
+ * configure which components in curl should participate in tracing.
+
+ * This function is thread-safe if CURL_VERSION_THREADSAFE is set in the
+ * curl_version_info_data.features flag (fetch by curl_version_info()).
+
+ */
+CURL_EXTERN CURLcode curl_global_trace(const char *config);
+
/* linked-list structure for the CURLOPT_QUOTE option (and other) */
struct curl_slist {
char *data;
@@ -2720,8 +2792,8 @@ CURL_EXTERN CURLsslset curl_global_sslset(curl_sslbackend id, const char *name,
* Appends a string to a linked list. If no list exists, it will be created
* first. Returns the new list, after appending.
*/
-CURL_EXTERN struct curl_slist *curl_slist_append(struct curl_slist *,
- const char *);
+CURL_EXTERN struct curl_slist *curl_slist_append(struct curl_slist *list,
+ const char *data);
/*
* NAME curl_slist_free_all()
@@ -2730,7 +2802,7 @@ CURL_EXTERN struct curl_slist *curl_slist_append(struct curl_slist *,
*
* free a previously built curl_slist.
*/
-CURL_EXTERN void curl_slist_free_all(struct curl_slist *);
+CURL_EXTERN void curl_slist_free_all(struct curl_slist *list);
/*
* NAME curl_getdate()
@@ -2743,13 +2815,14 @@ CURL_EXTERN void curl_slist_free_all(struct curl_slist *);
*/
CURL_EXTERN time_t curl_getdate(const char *p, const time_t *unused);
-/* info about the certificate chain, only for OpenSSL, GnuTLS, Schannel, NSS
- and GSKit builds. Asked for with CURLOPT_CERTINFO / CURLINFO_CERTINFO */
+/* info about the certificate chain, for SSL backends that support it. Asked
+ for with CURLOPT_CERTINFO / CURLINFO_CERTINFO */
struct curl_certinfo {
int num_of_certs; /* number of certificates with information */
struct curl_slist **certinfo; /* for each index in this array, there's a
- linked list with textual information in the
- format "name: value" */
+ linked list with textual information for a
+ certificate in the format "name:content".
+ eg "Subject:foo", "Issuer:bar", etc. */
};
/* Information about the SSL library used and the respective internal SSL
@@ -2778,22 +2851,35 @@ typedef enum {
CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE + 4,
CURLINFO_CONNECT_TIME = CURLINFO_DOUBLE + 5,
CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6,
- CURLINFO_SIZE_UPLOAD = CURLINFO_DOUBLE + 7,
+ CURLINFO_SIZE_UPLOAD CURL_DEPRECATED(7.55.0, "Use CURLINFO_SIZE_UPLOAD_T")
+ = CURLINFO_DOUBLE + 7,
CURLINFO_SIZE_UPLOAD_T = CURLINFO_OFF_T + 7,
- CURLINFO_SIZE_DOWNLOAD = CURLINFO_DOUBLE + 8,
+ CURLINFO_SIZE_DOWNLOAD
+ CURL_DEPRECATED(7.55.0, "Use CURLINFO_SIZE_DOWNLOAD_T")
+ = CURLINFO_DOUBLE + 8,
CURLINFO_SIZE_DOWNLOAD_T = CURLINFO_OFF_T + 8,
- CURLINFO_SPEED_DOWNLOAD = CURLINFO_DOUBLE + 9,
+ CURLINFO_SPEED_DOWNLOAD
+ CURL_DEPRECATED(7.55.0, "Use CURLINFO_SPEED_DOWNLOAD_T")
+ = CURLINFO_DOUBLE + 9,
CURLINFO_SPEED_DOWNLOAD_T = CURLINFO_OFF_T + 9,
- CURLINFO_SPEED_UPLOAD = CURLINFO_DOUBLE + 10,
+ CURLINFO_SPEED_UPLOAD
+ CURL_DEPRECATED(7.55.0, "Use CURLINFO_SPEED_UPLOAD_T")
+ = CURLINFO_DOUBLE + 10,
CURLINFO_SPEED_UPLOAD_T = CURLINFO_OFF_T + 10,
CURLINFO_HEADER_SIZE = CURLINFO_LONG + 11,
CURLINFO_REQUEST_SIZE = CURLINFO_LONG + 12,
CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG + 13,
CURLINFO_FILETIME = CURLINFO_LONG + 14,
CURLINFO_FILETIME_T = CURLINFO_OFF_T + 14,
- CURLINFO_CONTENT_LENGTH_DOWNLOAD = CURLINFO_DOUBLE + 15,
+ CURLINFO_CONTENT_LENGTH_DOWNLOAD
+ CURL_DEPRECATED(7.55.0,
+ "Use CURLINFO_CONTENT_LENGTH_DOWNLOAD_T")
+ = CURLINFO_DOUBLE + 15,
CURLINFO_CONTENT_LENGTH_DOWNLOAD_T = CURLINFO_OFF_T + 15,
- CURLINFO_CONTENT_LENGTH_UPLOAD = CURLINFO_DOUBLE + 16,
+ CURLINFO_CONTENT_LENGTH_UPLOAD
+ CURL_DEPRECATED(7.55.0,
+ "Use CURLINFO_CONTENT_LENGTH_UPLOAD_T")
+ = CURLINFO_DOUBLE + 16,
CURLINFO_CONTENT_LENGTH_UPLOAD_T = CURLINFO_OFF_T + 16,
CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17,
CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18,
@@ -2807,7 +2893,8 @@ typedef enum {
CURLINFO_NUM_CONNECTS = CURLINFO_LONG + 26,
CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27,
CURLINFO_COOKIELIST = CURLINFO_SLIST + 28,
- CURLINFO_LASTSOCKET = CURLINFO_LONG + 29,
+ CURLINFO_LASTSOCKET CURL_DEPRECATED(7.45.0, "Use CURLINFO_ACTIVESOCKET")
+ = CURLINFO_LONG + 29,
CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30,
CURLINFO_REDIRECT_URL = CURLINFO_STRING + 31,
CURLINFO_PRIMARY_IP = CURLINFO_STRING + 32,
@@ -2821,12 +2908,14 @@ typedef enum {
CURLINFO_PRIMARY_PORT = CURLINFO_LONG + 40,
CURLINFO_LOCAL_IP = CURLINFO_STRING + 41,
CURLINFO_LOCAL_PORT = CURLINFO_LONG + 42,
- CURLINFO_TLS_SESSION = CURLINFO_PTR + 43,
+ CURLINFO_TLS_SESSION CURL_DEPRECATED(7.48.0, "Use CURLINFO_TLS_SSL_PTR")
+ = CURLINFO_PTR + 43,
CURLINFO_ACTIVESOCKET = CURLINFO_SOCKET + 44,
CURLINFO_TLS_SSL_PTR = CURLINFO_PTR + 45,
CURLINFO_HTTP_VERSION = CURLINFO_LONG + 46,
CURLINFO_PROXY_SSL_VERIFYRESULT = CURLINFO_LONG + 47,
- CURLINFO_PROTOCOL = CURLINFO_LONG + 48,
+ CURLINFO_PROTOCOL CURL_DEPRECATED(7.85.0, "Use CURLINFO_SCHEME")
+ = CURLINFO_LONG + 48,
CURLINFO_SCHEME = CURLINFO_STRING + 49,
CURLINFO_TOTAL_TIME_T = CURLINFO_OFF_T + 50,
CURLINFO_NAMELOOKUP_TIME_T = CURLINFO_OFF_T + 51,
@@ -2841,7 +2930,9 @@ typedef enum {
CURLINFO_REFERER = CURLINFO_STRING + 60,
CURLINFO_CAINFO = CURLINFO_STRING + 61,
CURLINFO_CAPATH = CURLINFO_STRING + 62,
- CURLINFO_LASTONE = 62
+ CURLINFO_XFER_ID = CURLINFO_OFF_T + 63,
+ CURLINFO_CONN_ID = CURLINFO_OFF_T + 64,
+ CURLINFO_LASTONE = 64
} CURLINFO;
/* CURLINFO_RESPONSE_CODE is the new name for the option previously known as
@@ -2885,6 +2976,7 @@ typedef enum {
CURL_LOCK_DATA_SSL_SESSION,
CURL_LOCK_DATA_CONNECT,
CURL_LOCK_DATA_PSL,
+ CURL_LOCK_DATA_HSTS,
CURL_LOCK_DATA_LAST
} curl_lock_data;
@@ -2927,8 +3019,9 @@ typedef enum {
} CURLSHoption;
CURL_EXTERN CURLSH *curl_share_init(void);
-CURL_EXTERN CURLSHcode curl_share_setopt(CURLSH *, CURLSHoption option, ...);
-CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *);
+CURL_EXTERN CURLSHcode curl_share_setopt(CURLSH *share, CURLSHoption option,
+ ...);
+CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *share);
/****************************************************************************
* Structures for querying information about the curl library at runtime.
@@ -2945,6 +3038,7 @@ typedef enum {
CURLVERSION_EIGHTH,
CURLVERSION_NINTH,
CURLVERSION_TENTH,
+ CURLVERSION_ELEVENTH,
CURLVERSION_LAST /* never actually use this */
} CURLversion;
@@ -2953,7 +3047,7 @@ typedef enum {
meant to be a built-in version number for what kind of struct the caller
expects. If the struct ever changes, we redefine the NOW to another enum
from above. */
-#define CURLVERSION_NOW CURLVERSION_TENTH
+#define CURLVERSION_NOW CURLVERSION_ELEVENTH
struct curl_version_info_data {
CURLversion age; /* age of the returned struct */
@@ -3009,6 +3103,10 @@ struct curl_version_info_data {
/* These fields were added in CURLVERSION_TENTH */
const char *gsasl_version; /* human readable string. */
+
+ /* These fields were added in CURLVERSION_ELEVENTH */
+ /* feature_names is terminated by an entry with a NULL feature name */
+ const char * const *feature_names;
};
typedef struct curl_version_info_data curl_version_info_data;
@@ -3102,7 +3200,7 @@ CURL_EXTERN CURLcode curl_easy_pause(CURL *handle, int bitmask);
#define CURLPAUSE_CONT (CURLPAUSE_RECV_CONT|CURLPAUSE_SEND_CONT)
#ifdef __cplusplus
-}
+} /* end of extern "C" */
#endif
/* unfortunately, the easy.h and multi.h include files need options and info
@@ -3113,6 +3211,7 @@ CURL_EXTERN CURLcode curl_easy_pause(CURL *handle, int bitmask);
#include "options.h"
#include "header.h"
#include "websockets.h"
+#include "mprintf.h"
/* the typechecker doesn't work in C++ (yet) */
#if defined(__GNUC__) && defined(__GNUC_MINOR__) && \
@@ -3129,6 +3228,6 @@ CURL_EXTERN CURLcode curl_easy_pause(CURL *handle, int bitmask);
#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param)
#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param)
#endif /* __STDC__ >= 1 */
-#endif /* gcc >= 4.3 && !__cplusplus */
+#endif /* gcc >= 4.3 && !__cplusplus && !CURL_DISABLE_TYPECHECK */
#endif /* CURLINC_CURL_H */
diff --git a/include/curl/curlver.h b/include/curl/curlver.h
index 2e7124e6e..73b37e8ff 100644
--- a/include/curl/curlver.h
+++ b/include/curl/curlver.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -28,16 +28,16 @@
a script at release-time. This was made its own header file in 7.11.2 */
/* This is the global package copyright */
-#define LIBCURL_COPYRIGHT "1996 - 2022 Daniel Stenberg, <daniel@haxx.se>."
+#define LIBCURL_COPYRIGHT "Daniel Stenberg, <daniel@haxx.se>."
/* This is the version number of the libcurl package from which this header
file origins: */
-#define LIBCURL_VERSION "7.86.0"
+#define LIBCURL_VERSION "8.5.0"
/* The numeric version number is also available "in parts" by using these
defines: */
-#define LIBCURL_VERSION_MAJOR 7
-#define LIBCURL_VERSION_MINOR 86
+#define LIBCURL_VERSION_MAJOR 8
+#define LIBCURL_VERSION_MINOR 5
#define LIBCURL_VERSION_PATCH 0
/* This is the numeric version of the libcurl version number, meant for easier
@@ -59,7 +59,7 @@
CURL_VERSION_BITS() macro since curl's own configure script greps for it
and needs it to contain the full number.
*/
-#define LIBCURL_VERSION_NUM 0x075600
+#define LIBCURL_VERSION_NUM 0x080500
/*
* This is the date and time when the full source package was created. The
@@ -70,7 +70,7 @@
*
* "2007-11-23"
*/
-#define LIBCURL_TIMESTAMP "2022-10-26"
+#define LIBCURL_TIMESTAMP "2023-12-06"
#define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|(z))
#define CURL_AT_LEAST_VERSION(x,y,z) \
diff --git a/include/curl/easy.h b/include/curl/easy.h
index 9c7e63ada..1285101c5 100644
--- a/include/curl/easy.h
+++ b/include/curl/easy.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -48,13 +48,13 @@ CURL_EXTERN void curl_easy_cleanup(CURL *curl);
*
* DESCRIPTION
*
- * Request internal information from the curl session with this function. The
- * third argument MUST be a pointer to a long, a pointer to a char * or a
- * pointer to a double (as the documentation describes elsewhere). The data
- * pointed to will be filled in accordingly and can be relied upon only if the
- * function returns CURLE_OK. This function is intended to get used *AFTER* a
- * performed transfer, all results from this function are undefined until the
- * transfer is completed.
+ * Request internal information from the curl session with this function.
+ * The third argument MUST be pointing to the specific type of the used option
+ * which is documented in each man page of the option. The data pointed to
+ * will be filled in accordingly and can be relied upon only if the function
+ * returns CURLE_OK. This function is intended to get used *AFTER* a performed
+ * transfer, all results from this function are undefined until the transfer
+ * is completed.
*/
CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...);
@@ -119,7 +119,7 @@ CURL_EXTERN CURLcode curl_easy_send(CURL *curl, const void *buffer,
CURL_EXTERN CURLcode curl_easy_upkeep(CURL *curl);
#ifdef __cplusplus
-}
+} /* end of extern "C" */
#endif
#endif
diff --git a/include/curl/header.h b/include/curl/header.h
index 1598c6f11..8df11e1e4 100644
--- a/include/curl/header.h
+++ b/include/curl/header.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2018 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/include/curl/mprintf.h b/include/curl/mprintf.h
index cb948dcd9..dc5664bc5 100644
--- a/include/curl/mprintf.h
+++ b/include/curl/mprintf.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -32,21 +32,39 @@
extern "C" {
#endif
-CURL_EXTERN int curl_mprintf(const char *format, ...);
-CURL_EXTERN int curl_mfprintf(FILE *fd, const char *format, ...);
-CURL_EXTERN int curl_msprintf(char *buffer, const char *format, ...);
+#if (defined(__GNUC__) || defined(__clang__)) && \
+ defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
+ !defined(__MINGW32__) && !defined(CURL_NO_FMT_CHECKS)
+#define CURL_TEMP_PRINTF(a,b) __attribute__ ((format(printf, a, b)))
+#else
+#define CURL_TEMP_PRINTF(a,b)
+#endif
+
+CURL_EXTERN int curl_mprintf(const char *format, ...) CURL_TEMP_PRINTF(1, 2);
+CURL_EXTERN int curl_mfprintf(FILE *fd, const char *format, ...)
+ CURL_TEMP_PRINTF(2, 3);
+CURL_EXTERN int curl_msprintf(char *buffer, const char *format, ...)
+ CURL_TEMP_PRINTF(2, 3);
CURL_EXTERN int curl_msnprintf(char *buffer, size_t maxlength,
- const char *format, ...);
-CURL_EXTERN int curl_mvprintf(const char *format, va_list args);
-CURL_EXTERN int curl_mvfprintf(FILE *fd, const char *format, va_list args);
-CURL_EXTERN int curl_mvsprintf(char *buffer, const char *format, va_list args);
+ const char *format, ...) CURL_TEMP_PRINTF(3, 4);
+CURL_EXTERN int curl_mvprintf(const char *format, va_list args)
+ CURL_TEMP_PRINTF(1, 0);
+CURL_EXTERN int curl_mvfprintf(FILE *fd, const char *format, va_list args)
+ CURL_TEMP_PRINTF(2, 0);
+CURL_EXTERN int curl_mvsprintf(char *buffer, const char *format, va_list args)
+ CURL_TEMP_PRINTF(2, 0);
CURL_EXTERN int curl_mvsnprintf(char *buffer, size_t maxlength,
- const char *format, va_list args);
-CURL_EXTERN char *curl_maprintf(const char *format, ...);
-CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args);
+ const char *format, va_list args)
+ CURL_TEMP_PRINTF(3, 0);
+CURL_EXTERN char *curl_maprintf(const char *format, ...)
+ CURL_TEMP_PRINTF(1, 2);
+CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args)
+ CURL_TEMP_PRINTF(1, 0);
+
+#undef CURL_TEMP_PRINTF
#ifdef __cplusplus
-}
+} /* end of extern "C" */
#endif
#endif /* CURLINC_MPRINTF_H */
diff --git a/include/curl/multi.h b/include/curl/multi.h
index 2f3ec37a7..e79b48ff3 100644
--- a/include/curl/multi.h
+++ b/include/curl/multi.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -118,7 +118,7 @@ typedef struct CURLMsg CURLMsg;
struct curl_waitfd {
curl_socket_t fd;
short events;
- short revents; /* not supported yet */
+ short revents;
};
/*
@@ -318,16 +318,16 @@ typedef int (*curl_multi_timer_callback)(CURLM *multi, /* multi handle */
void *userp); /* private callback
pointer */
-CURL_EXTERN CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t s,
- int *running_handles);
+CURL_EXTERN CURLMcode CURL_DEPRECATED(7.19.5, "Use curl_multi_socket_action()")
+curl_multi_socket(CURLM *multi_handle, curl_socket_t s, int *running_handles);
CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle,
curl_socket_t s,
int ev_bitmask,
int *running_handles);
-CURL_EXTERN CURLMcode curl_multi_socket_all(CURLM *multi_handle,
- int *running_handles);
+CURL_EXTERN CURLMcode CURL_DEPRECATED(7.19.5, "Use curl_multi_socket_action()")
+curl_multi_socket_all(CURLM *multi_handle, int *running_handles);
#ifndef CURL_ALLOW_OLD_MULTI_SOCKET
/* This macro below was added in 7.16.3 to push users who recompile to use
@@ -426,6 +426,17 @@ CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle,
CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle,
curl_socket_t sockfd, void *sockp);
+/*
+ * Name: curl_multi_get_handles()
+ *
+ * Desc: Returns an allocated array holding all handles currently added to
+ * the multi handle. Marks the final entry with a NULL pointer. If
+ * there is no easy handle added to the multi handle, this function
+ * returns an array with the first entry as a NULL pointer.
+ *
+ * Returns: NULL on failure, otherwise a CURL **array pointer
+ */
+CURL_EXTERN CURL **curl_multi_get_handles(CURLM *multi_handle);
/*
* Name: curl_push_callback
diff --git a/include/curl/options.h b/include/curl/options.h
index a792687cf..1ed76a95c 100644
--- a/include/curl/options.h
+++ b/include/curl/options.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2018 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/include/curl/stdcheaders.h b/include/curl/stdcheaders.h
index 82e1b5fef..7451aa305 100644
--- a/include/curl/stdcheaders.h
+++ b/include/curl/stdcheaders.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/include/curl/system.h b/include/curl/system.h
index 8d56b8a4a..f2554b4a9 100644
--- a/include/curl/system.h
+++ b/include/curl/system.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -141,36 +141,33 @@
# define CURL_TYPEOF_CURL_SOCKLEN_T int
# endif
-#elif defined(__SYMBIAN32__)
-# if defined(__EABI__) /* Treat all ARM compilers equally */
+#elif defined(macintosh)
+# include <ConditionalMacros.h>
+# if TYPE_LONGLONG
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
-# elif defined(__CW32__)
-# pragma longlong on
-# define CURL_TYPEOF_CURL_OFF_T long long
-# define CURL_FORMAT_CURL_OFF_T "lld"
-# define CURL_FORMAT_CURL_OFF_TU "llu"
-# define CURL_SUFFIX_CURL_OFF_T LL
-# define CURL_SUFFIX_CURL_OFF_TU ULL
-# elif defined(__VC32__)
-# define CURL_TYPEOF_CURL_OFF_T __int64
-# define CURL_FORMAT_CURL_OFF_T "lld"
-# define CURL_FORMAT_CURL_OFF_TU "llu"
-# define CURL_SUFFIX_CURL_OFF_T LL
-# define CURL_SUFFIX_CURL_OFF_TU ULL
+# else
+# define CURL_TYPEOF_CURL_OFF_T long
+# define CURL_FORMAT_CURL_OFF_T "ld"
+# define CURL_FORMAT_CURL_OFF_TU "lu"
+# define CURL_SUFFIX_CURL_OFF_T L
+# define CURL_SUFFIX_CURL_OFF_TU UL
# endif
# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int
-#elif defined(__MWERKS__)
+#elif defined(__TANDEM)
+# if ! defined(__LP64)
+ /* Required for 32-bit NonStop builds only. */
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# define CURL_TYPEOF_CURL_SOCKLEN_T int
+# endif
#elif defined(_WIN32_WCE)
# define CURL_TYPEOF_CURL_OFF_T __int64
@@ -181,9 +178,10 @@
# define CURL_TYPEOF_CURL_SOCKLEN_T int
#elif defined(__MINGW32__)
+# include <inttypes.h>
# define CURL_TYPEOF_CURL_OFF_T long long
-# define CURL_FORMAT_CURL_OFF_T "I64d"
-# define CURL_FORMAT_CURL_OFF_TU "I64u"
+# define CURL_FORMAT_CURL_OFF_T PRId64
+# define CURL_FORMAT_CURL_OFF_TU PRIu64
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
@@ -207,45 +205,38 @@
# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int
#elif defined(__OS400__)
-# if defined(__ILEC400__)
+# define CURL_TYPEOF_CURL_OFF_T long long
+# define CURL_FORMAT_CURL_OFF_T "lld"
+# define CURL_FORMAT_CURL_OFF_TU "llu"
+# define CURL_SUFFIX_CURL_OFF_T LL
+# define CURL_SUFFIX_CURL_OFF_TU ULL
+# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
+# define CURL_PULL_SYS_TYPES_H 1
+# define CURL_PULL_SYS_SOCKET_H 1
+
+#elif defined(__MVS__)
+# if defined(_LONG_LONG)
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
-# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
-# define CURL_PULL_SYS_TYPES_H 1
-# define CURL_PULL_SYS_SOCKET_H 1
-# endif
-
-#elif defined(__MVS__)
-# if defined(__IBMC__) || defined(__IBMCPP__)
-# if defined(_ILP32)
-# elif defined(_LP64)
-# endif
-# if defined(_LONG_LONG)
-# define CURL_TYPEOF_CURL_OFF_T long long
-# define CURL_FORMAT_CURL_OFF_T "lld"
-# define CURL_FORMAT_CURL_OFF_TU "llu"
-# define CURL_SUFFIX_CURL_OFF_T LL
-# define CURL_SUFFIX_CURL_OFF_TU ULL
-# elif defined(_LP64)
-# define CURL_TYPEOF_CURL_OFF_T long
-# define CURL_FORMAT_CURL_OFF_T "ld"
-# define CURL_FORMAT_CURL_OFF_TU "lu"
-# define CURL_SUFFIX_CURL_OFF_T L
-# define CURL_SUFFIX_CURL_OFF_TU UL
-# else
-# define CURL_TYPEOF_CURL_OFF_T long
-# define CURL_FORMAT_CURL_OFF_T "ld"
-# define CURL_FORMAT_CURL_OFF_TU "lu"
-# define CURL_SUFFIX_CURL_OFF_T L
-# define CURL_SUFFIX_CURL_OFF_TU UL
-# endif
-# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
-# define CURL_PULL_SYS_TYPES_H 1
-# define CURL_PULL_SYS_SOCKET_H 1
+# elif defined(_LP64)
+# define CURL_TYPEOF_CURL_OFF_T long
+# define CURL_FORMAT_CURL_OFF_T "ld"
+# define CURL_FORMAT_CURL_OFF_TU "lu"
+# define CURL_SUFFIX_CURL_OFF_T L
+# define CURL_SUFFIX_CURL_OFF_TU UL
+# else
+# define CURL_TYPEOF_CURL_OFF_T long
+# define CURL_FORMAT_CURL_OFF_T "ld"
+# define CURL_FORMAT_CURL_OFF_TU "lu"
+# define CURL_SUFFIX_CURL_OFF_T L
+# define CURL_SUFFIX_CURL_OFF_TU UL
# endif
+# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
+# define CURL_PULL_SYS_TYPES_H 1
+# define CURL_PULL_SYS_SOCKET_H 1
#elif defined(__370__)
# if defined(__IBMC__) || defined(__IBMCPP__)
@@ -334,12 +325,37 @@
# define CURL_PULL_SYS_TYPES_H 1
# define CURL_PULL_SYS_SOCKET_H 1
+#elif defined(__hpux) /* HP aCC compiler */
+# if !defined(_LP64)
+# define CURL_TYPEOF_CURL_OFF_T long long
+# define CURL_FORMAT_CURL_OFF_T "lld"
+# define CURL_FORMAT_CURL_OFF_TU "llu"
+# define CURL_SUFFIX_CURL_OFF_T LL
+# define CURL_SUFFIX_CURL_OFF_TU ULL
+# else
+# define CURL_TYPEOF_CURL_OFF_T long
+# define CURL_FORMAT_CURL_OFF_T "ld"
+# define CURL_FORMAT_CURL_OFF_TU "lu"
+# define CURL_SUFFIX_CURL_OFF_T L
+# define CURL_SUFFIX_CURL_OFF_TU UL
+# endif
+# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
+# define CURL_PULL_SYS_TYPES_H 1
+# define CURL_PULL_SYS_SOCKET_H 1
+
/* ===================================== */
/* KEEP MSVC THE PENULTIMATE ENTRY */
/* ===================================== */
#elif defined(_MSC_VER)
-# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64)
+# if (_MSC_VER >= 1800)
+# include <inttypes.h>
+# define CURL_TYPEOF_CURL_OFF_T __int64
+# define CURL_FORMAT_CURL_OFF_T PRId64
+# define CURL_FORMAT_CURL_OFF_TU PRIu64
+# define CURL_SUFFIX_CURL_OFF_T i64
+# define CURL_SUFFIX_CURL_OFF_TU ui64
+# elif (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64)
# define CURL_TYPEOF_CURL_OFF_T __int64
# define CURL_FORMAT_CURL_OFF_T "I64d"
# define CURL_FORMAT_CURL_OFF_TU "I64u"
diff --git a/include/curl/typecheck-gcc.h b/include/curl/typecheck-gcc.h
index 2dabcb416..b880f3dc6 100644
--- a/include/curl/typecheck-gcc.h
+++ b/include/curl/typecheck-gcc.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -42,107 +42,111 @@
*/
#define curl_easy_setopt(handle, option, value) \
__extension__({ \
- __typeof__(option) _curl_opt = option; \
+ CURLoption _curl_opt = (option); \
if(__builtin_constant_p(_curl_opt)) { \
- if(curlcheck_long_option(_curl_opt)) \
- if(!curlcheck_long(value)) \
- _curl_easy_setopt_err_long(); \
- if(curlcheck_off_t_option(_curl_opt)) \
- if(!curlcheck_off_t(value)) \
- _curl_easy_setopt_err_curl_off_t(); \
- if(curlcheck_string_option(_curl_opt)) \
- if(!curlcheck_string(value)) \
- _curl_easy_setopt_err_string(); \
- if(curlcheck_write_cb_option(_curl_opt)) \
- if(!curlcheck_write_cb(value)) \
- _curl_easy_setopt_err_write_callback(); \
- if((_curl_opt) == CURLOPT_RESOLVER_START_FUNCTION) \
- if(!curlcheck_resolver_start_callback(value)) \
- _curl_easy_setopt_err_resolver_start_callback(); \
- if((_curl_opt) == CURLOPT_READFUNCTION) \
- if(!curlcheck_read_cb(value)) \
- _curl_easy_setopt_err_read_cb(); \
- if((_curl_opt) == CURLOPT_IOCTLFUNCTION) \
- if(!curlcheck_ioctl_cb(value)) \
- _curl_easy_setopt_err_ioctl_cb(); \
- if((_curl_opt) == CURLOPT_SOCKOPTFUNCTION) \
- if(!curlcheck_sockopt_cb(value)) \
- _curl_easy_setopt_err_sockopt_cb(); \
- if((_curl_opt) == CURLOPT_OPENSOCKETFUNCTION) \
- if(!curlcheck_opensocket_cb(value)) \
- _curl_easy_setopt_err_opensocket_cb(); \
- if((_curl_opt) == CURLOPT_PROGRESSFUNCTION) \
- if(!curlcheck_progress_cb(value)) \
- _curl_easy_setopt_err_progress_cb(); \
- if((_curl_opt) == CURLOPT_DEBUGFUNCTION) \
- if(!curlcheck_debug_cb(value)) \
- _curl_easy_setopt_err_debug_cb(); \
- if((_curl_opt) == CURLOPT_SSL_CTX_FUNCTION) \
- if(!curlcheck_ssl_ctx_cb(value)) \
- _curl_easy_setopt_err_ssl_ctx_cb(); \
- if(curlcheck_conv_cb_option(_curl_opt)) \
- if(!curlcheck_conv_cb(value)) \
- _curl_easy_setopt_err_conv_cb(); \
- if((_curl_opt) == CURLOPT_SEEKFUNCTION) \
- if(!curlcheck_seek_cb(value)) \
- _curl_easy_setopt_err_seek_cb(); \
- if(curlcheck_cb_data_option(_curl_opt)) \
- if(!curlcheck_cb_data(value)) \
- _curl_easy_setopt_err_cb_data(); \
- if((_curl_opt) == CURLOPT_ERRORBUFFER) \
- if(!curlcheck_error_buffer(value)) \
- _curl_easy_setopt_err_error_buffer(); \
- if((_curl_opt) == CURLOPT_STDERR) \
- if(!curlcheck_FILE(value)) \
- _curl_easy_setopt_err_FILE(); \
- if(curlcheck_postfields_option(_curl_opt)) \
- if(!curlcheck_postfields(value)) \
- _curl_easy_setopt_err_postfields(); \
- if((_curl_opt) == CURLOPT_HTTPPOST) \
- if(!curlcheck_arr((value), struct curl_httppost)) \
- _curl_easy_setopt_err_curl_httpost(); \
- if((_curl_opt) == CURLOPT_MIMEPOST) \
- if(!curlcheck_ptr((value), curl_mime)) \
- _curl_easy_setopt_err_curl_mimepost(); \
- if(curlcheck_slist_option(_curl_opt)) \
- if(!curlcheck_arr((value), struct curl_slist)) \
- _curl_easy_setopt_err_curl_slist(); \
- if((_curl_opt) == CURLOPT_SHARE) \
- if(!curlcheck_ptr((value), CURLSH)) \
- _curl_easy_setopt_err_CURLSH(); \
+ CURL_IGNORE_DEPRECATION( \
+ if(curlcheck_long_option(_curl_opt)) \
+ if(!curlcheck_long(value)) \
+ _curl_easy_setopt_err_long(); \
+ if(curlcheck_off_t_option(_curl_opt)) \
+ if(!curlcheck_off_t(value)) \
+ _curl_easy_setopt_err_curl_off_t(); \
+ if(curlcheck_string_option(_curl_opt)) \
+ if(!curlcheck_string(value)) \
+ _curl_easy_setopt_err_string(); \
+ if(curlcheck_write_cb_option(_curl_opt)) \
+ if(!curlcheck_write_cb(value)) \
+ _curl_easy_setopt_err_write_callback(); \
+ if((_curl_opt) == CURLOPT_RESOLVER_START_FUNCTION) \
+ if(!curlcheck_resolver_start_callback(value)) \
+ _curl_easy_setopt_err_resolver_start_callback(); \
+ if((_curl_opt) == CURLOPT_READFUNCTION) \
+ if(!curlcheck_read_cb(value)) \
+ _curl_easy_setopt_err_read_cb(); \
+ if((_curl_opt) == CURLOPT_IOCTLFUNCTION) \
+ if(!curlcheck_ioctl_cb(value)) \
+ _curl_easy_setopt_err_ioctl_cb(); \
+ if((_curl_opt) == CURLOPT_SOCKOPTFUNCTION) \
+ if(!curlcheck_sockopt_cb(value)) \
+ _curl_easy_setopt_err_sockopt_cb(); \
+ if((_curl_opt) == CURLOPT_OPENSOCKETFUNCTION) \
+ if(!curlcheck_opensocket_cb(value)) \
+ _curl_easy_setopt_err_opensocket_cb(); \
+ if((_curl_opt) == CURLOPT_PROGRESSFUNCTION) \
+ if(!curlcheck_progress_cb(value)) \
+ _curl_easy_setopt_err_progress_cb(); \
+ if((_curl_opt) == CURLOPT_DEBUGFUNCTION) \
+ if(!curlcheck_debug_cb(value)) \
+ _curl_easy_setopt_err_debug_cb(); \
+ if((_curl_opt) == CURLOPT_SSL_CTX_FUNCTION) \
+ if(!curlcheck_ssl_ctx_cb(value)) \
+ _curl_easy_setopt_err_ssl_ctx_cb(); \
+ if(curlcheck_conv_cb_option(_curl_opt)) \
+ if(!curlcheck_conv_cb(value)) \
+ _curl_easy_setopt_err_conv_cb(); \
+ if((_curl_opt) == CURLOPT_SEEKFUNCTION) \
+ if(!curlcheck_seek_cb(value)) \
+ _curl_easy_setopt_err_seek_cb(); \
+ if(curlcheck_cb_data_option(_curl_opt)) \
+ if(!curlcheck_cb_data(value)) \
+ _curl_easy_setopt_err_cb_data(); \
+ if((_curl_opt) == CURLOPT_ERRORBUFFER) \
+ if(!curlcheck_error_buffer(value)) \
+ _curl_easy_setopt_err_error_buffer(); \
+ if((_curl_opt) == CURLOPT_STDERR) \
+ if(!curlcheck_FILE(value)) \
+ _curl_easy_setopt_err_FILE(); \
+ if(curlcheck_postfields_option(_curl_opt)) \
+ if(!curlcheck_postfields(value)) \
+ _curl_easy_setopt_err_postfields(); \
+ if((_curl_opt) == CURLOPT_HTTPPOST) \
+ if(!curlcheck_arr((value), struct curl_httppost)) \
+ _curl_easy_setopt_err_curl_httpost(); \
+ if((_curl_opt) == CURLOPT_MIMEPOST) \
+ if(!curlcheck_ptr((value), curl_mime)) \
+ _curl_easy_setopt_err_curl_mimepost(); \
+ if(curlcheck_slist_option(_curl_opt)) \
+ if(!curlcheck_arr((value), struct curl_slist)) \
+ _curl_easy_setopt_err_curl_slist(); \
+ if((_curl_opt) == CURLOPT_SHARE) \
+ if(!curlcheck_ptr((value), CURLSH)) \
+ _curl_easy_setopt_err_CURLSH(); \
+ ) \
} \
curl_easy_setopt(handle, _curl_opt, value); \
})
/* wraps curl_easy_getinfo() with typechecking */
#define curl_easy_getinfo(handle, info, arg) \
- __extension__({ \
- __typeof__(info) _curl_info = info; \
+ __extension__({ \
+ CURLINFO _curl_info = (info); \
if(__builtin_constant_p(_curl_info)) { \
- if(curlcheck_string_info(_curl_info)) \
- if(!curlcheck_arr((arg), char *)) \
- _curl_easy_getinfo_err_string(); \
- if(curlcheck_long_info(_curl_info)) \
- if(!curlcheck_arr((arg), long)) \
- _curl_easy_getinfo_err_long(); \
- if(curlcheck_double_info(_curl_info)) \
- if(!curlcheck_arr((arg), double)) \
- _curl_easy_getinfo_err_double(); \
- if(curlcheck_slist_info(_curl_info)) \
- if(!curlcheck_arr((arg), struct curl_slist *)) \
- _curl_easy_getinfo_err_curl_slist(); \
- if(curlcheck_tlssessioninfo_info(_curl_info)) \
- if(!curlcheck_arr((arg), struct curl_tlssessioninfo *)) \
- _curl_easy_getinfo_err_curl_tlssesssioninfo(); \
- if(curlcheck_certinfo_info(_curl_info)) \
- if(!curlcheck_arr((arg), struct curl_certinfo *)) \
- _curl_easy_getinfo_err_curl_certinfo(); \
- if(curlcheck_socket_info(_curl_info)) \
- if(!curlcheck_arr((arg), curl_socket_t)) \
- _curl_easy_getinfo_err_curl_socket(); \
- if(curlcheck_off_t_info(_curl_info)) \
- if(!curlcheck_arr((arg), curl_off_t)) \
- _curl_easy_getinfo_err_curl_off_t(); \
+ CURL_IGNORE_DEPRECATION( \
+ if(curlcheck_string_info(_curl_info)) \
+ if(!curlcheck_arr((arg), char *)) \
+ _curl_easy_getinfo_err_string(); \
+ if(curlcheck_long_info(_curl_info)) \
+ if(!curlcheck_arr((arg), long)) \
+ _curl_easy_getinfo_err_long(); \
+ if(curlcheck_double_info(_curl_info)) \
+ if(!curlcheck_arr((arg), double)) \
+ _curl_easy_getinfo_err_double(); \
+ if(curlcheck_slist_info(_curl_info)) \
+ if(!curlcheck_arr((arg), struct curl_slist *)) \
+ _curl_easy_getinfo_err_curl_slist(); \
+ if(curlcheck_tlssessioninfo_info(_curl_info)) \
+ if(!curlcheck_arr((arg), struct curl_tlssessioninfo *)) \
+ _curl_easy_getinfo_err_curl_tlssesssioninfo(); \
+ if(curlcheck_certinfo_info(_curl_info)) \
+ if(!curlcheck_arr((arg), struct curl_certinfo *)) \
+ _curl_easy_getinfo_err_curl_certinfo(); \
+ if(curlcheck_socket_info(_curl_info)) \
+ if(!curlcheck_arr((arg), curl_socket_t)) \
+ _curl_easy_getinfo_err_curl_socket(); \
+ if(curlcheck_off_t_info(_curl_info)) \
+ if(!curlcheck_arr((arg), curl_off_t)) \
+ _curl_easy_getinfo_err_curl_off_t(); \
+ ) \
} \
curl_easy_getinfo(handle, _curl_info, arg); \
})
@@ -276,6 +280,7 @@ CURLWARNING(_curl_easy_getinfo_err_curl_off_t,
(option) == CURLOPT_FTP_ALTERNATIVE_TO_USER || \
(option) == CURLOPT_FTPPORT || \
(option) == CURLOPT_HSTS || \
+ (option) == CURLOPT_HAPROXY_CLIENT_IP || \
(option) == CURLOPT_INTERFACE || \
(option) == CURLOPT_ISSUERCERT || \
(option) == CURLOPT_KEYPASSWD || \
@@ -436,7 +441,7 @@ CURLWARNING(_curl_easy_getinfo_err_curl_off_t,
(CURLINFO_OFF_T < (info))
-/* typecheck helpers -- check whether given expression has requested type*/
+/* typecheck helpers -- check whether given expression has requested type */
/* For pointers, you can use the curlcheck_ptr/curlcheck_arr macros,
* otherwise define a new macro. Search for __builtin_types_compatible_p
diff --git a/include/curl/urlapi.h b/include/curl/urlapi.h
index e15c213cc..88cdeb3bc 100644
--- a/include/curl/urlapi.h
+++ b/include/curl/urlapi.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2018 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -62,6 +62,7 @@ typedef enum {
CURLUE_BAD_SCHEME, /* 27 */
CURLUE_BAD_SLASHES, /* 28 */
CURLUE_BAD_USER, /* 29 */
+ CURLUE_LACKS_IDN, /* 30 */
CURLUE_LAST
} CURLUcode;
@@ -95,6 +96,8 @@ typedef enum {
#define CURLU_NO_AUTHORITY (1<<10) /* Allow empty authority when the
scheme is unknown. */
#define CURLU_ALLOW_SPACE (1<<11) /* Allow spaces in the URL */
+#define CURLU_PUNYCODE (1<<12) /* get the host name in punycode */
+#define CURLU_PUNY2IDN (1<<13) /* punycode => IDN conversion */
typedef struct Curl_URL CURLU;
@@ -115,14 +118,14 @@ CURL_EXTERN void curl_url_cleanup(CURLU *handle);
* curl_url_dup() duplicates a CURLU handle and returns a new copy. The new
* handle must also be freed with curl_url_cleanup().
*/
-CURL_EXTERN CURLU *curl_url_dup(CURLU *in);
+CURL_EXTERN CURLU *curl_url_dup(const CURLU *in);
/*
* curl_url_get() extracts a specific part of the URL from a CURLU
* handle. Returns error code. The returned pointer MUST be freed with
* curl_free() afterwards.
*/
-CURL_EXTERN CURLUcode curl_url_get(CURLU *handle, CURLUPart what,
+CURL_EXTERN CURLUcode curl_url_get(const CURLU *handle, CURLUPart what,
char **part, unsigned int flags);
/*
diff --git a/include/curl/websockets.h b/include/curl/websockets.h
index 4d57f91e5..6ef6a2bc9 100644
--- a/include/curl/websockets.h
+++ b/include/curl/websockets.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -33,6 +33,7 @@ struct curl_ws_frame {
int flags; /* See the CURLWS_* defines */
curl_off_t offset; /* the offset of this data into the frame */
curl_off_t bytesleft; /* number of pending bytes left of the payload */
+ size_t len; /* size of the current data chunk */
};
/* flag bits */
@@ -53,13 +54,13 @@ struct curl_ws_frame {
*/
CURL_EXTERN CURLcode curl_ws_recv(CURL *curl, void *buffer, size_t buflen,
size_t *recv,
- struct curl_ws_frame **metap);
+ const struct curl_ws_frame **metap);
-/* sendflags for curl_ws_send() */
+/* flags for curl_ws_send() */
#define CURLWS_PONG (1<<6)
/*
- * NAME curl_easy_send()
+ * NAME curl_ws_send()
*
* DESCRIPTION
*
@@ -68,13 +69,13 @@ CURL_EXTERN CURLcode curl_ws_recv(CURL *curl, void *buffer, size_t buflen,
*/
CURL_EXTERN CURLcode curl_ws_send(CURL *curl, const void *buffer,
size_t buflen, size_t *sent,
- curl_off_t framesize,
- unsigned int sendflags);
+ curl_off_t fragsize,
+ unsigned int flags);
/* bits for the CURLOPT_WS_OPTIONS bitmask: */
#define CURLWS_RAW_MODE (1<<0)
-CURL_EXTERN struct curl_ws_frame *curl_ws_meta(CURL *curl);
+CURL_EXTERN const struct curl_ws_frame *curl_ws_meta(CURL *curl);
#ifdef __cplusplus
}
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index 8cea346c3..51d52578e 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -25,14 +25,6 @@ set(LIB_NAME libcurl)
set(LIBCURL_OUTPUT_NAME libcurl CACHE STRING "Basename of the curl library")
add_definitions(-DBUILDING_LIBCURL)
-if(BUILD_SHARED_LIBS)
- set(CURL_STATICLIB NO)
-else()
- set(CURL_STATICLIB YES)
-endif()
-
-# Use:
-# * CURL_STATICLIB
configure_file(curl_config.h.cmake
${CMAKE_CURRENT_BINARY_DIR}/curl_config.h)
@@ -43,33 +35,6 @@ list(APPEND HHEADERS
${CMAKE_CURRENT_BINARY_DIR}/curl_config.h
)
-if(WIN32 AND NOT CURL_STATICLIB)
- list(APPEND CSOURCES libcurl.rc)
-endif()
-
-# SET(CSOURCES
-# # memdebug.c -not used
-# # nwlib.c - Not used
-# # strtok.c - specify later
-# # strtoofft.c - specify later
-# )
-
-# #OPTION(CURL_MALLOC_DEBUG "Debug mallocs in Curl" OFF)
-# MARK_AS_ADVANCED(CURL_MALLOC_DEBUG)
-# IF(CURL_MALLOC_DEBUG)
-# SET(CSOURCES ${CSOURCES}
-# memdebug.c
-# )
-# ENDIF(CURL_MALLOC_DEBUG)
-
-# # only build compat strtoofft if we need to
-# IF(NOT HAVE_STRTOLL AND NOT HAVE__STRTOI64)
-# SET(CSOURCES ${CSOURCES}
-# strtoofft.c
-# )
-# ENDIF(NOT HAVE_STRTOLL AND NOT HAVE__STRTOI64)
-
-
# The rest of the build
include_directories(${CMAKE_CURRENT_BINARY_DIR}/../include)
@@ -82,65 +47,193 @@ if(USE_ARES)
include_directories(${CARES_INCLUDE_DIR})
endif()
-add_library(
- ${LIB_NAME}
- ${HHEADERS} ${CSOURCES}
+if(BUILD_TESTING)
+ add_library(
+ curlu # special libcurlu library just for unittests
+ STATIC
+ EXCLUDE_FROM_ALL
+ ${HHEADERS} ${CSOURCES}
)
+ target_compile_definitions(curlu PUBLIC UNITTESTS CURL_STATICLIB)
+endif()
-add_library(
- ${PROJECT_NAME}::${LIB_NAME}
- ALIAS ${LIB_NAME}
- )
+if(ENABLE_CURLDEBUG)
+ # We must compile these sources separately to avoid memdebug.h redefinitions
+ # applying to them.
+ set_source_files_properties(memdebug.c curl_multibyte.c PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON)
+endif()
-if(NOT BUILD_SHARED_LIBS)
- set_target_properties(${LIB_NAME} PROPERTIES INTERFACE_COMPILE_DEFINITIONS CURL_STATICLIB)
+if(BUILD_TESTING)
+ target_link_libraries(curlu PRIVATE ${CURL_LIBS})
endif()
-target_link_libraries(${LIB_NAME} PRIVATE ${CURL_LIBS})
+transform_makefile_inc("Makefile.soname" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.soname.cmake")
+include(${CMAKE_CURRENT_BINARY_DIR}/Makefile.soname.cmake)
-set_target_properties(${LIB_NAME} PROPERTIES
- COMPILE_DEFINITIONS BUILDING_LIBCURL
- OUTPUT_NAME ${LIBCURL_OUTPUT_NAME}
- )
+if(CMAKE_SYSTEM_NAME STREQUAL "AIX" OR
+ CMAKE_SYSTEM_NAME STREQUAL "Linux" OR
+ CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR
+ CMAKE_SYSTEM_NAME STREQUAL "SunOS" OR
+ CMAKE_SYSTEM_NAME STREQUAL "GNU/kFreeBSD" OR
+
+ # FreeBSD comes with the a.out and elf flavours
+ # but a.out was supported up to version 3.x and
+ # elf from 3.x. I cannot imagine someone running
+ # CMake on those ancient systems
+ CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" OR
+
+ CMAKE_SYSTEM_NAME STREQUAL "Haiku")
-if(HIDES_CURL_PRIVATE_SYMBOLS)
- set_property(TARGET ${LIB_NAME} APPEND PROPERTY COMPILE_DEFINITIONS "CURL_HIDDEN_SYMBOLS")
- set_property(TARGET ${LIB_NAME} APPEND PROPERTY COMPILE_FLAGS ${CURL_CFLAG_SYMBOLS_HIDE})
+ math(EXPR CMAKESONAME "${VERSIONCHANGE} - ${VERSIONDEL}")
+ set(CMAKEVERSION "${CMAKESONAME}.${VERSIONDEL}.${VERSIONADD}")
+else()
+ unset(CMAKESONAME)
endif()
-# Remove the "lib" prefix since the library is already named "libcurl".
-set_target_properties(${LIB_NAME} PROPERTIES PREFIX "")
-set_target_properties(${LIB_NAME} PROPERTIES IMPORT_PREFIX "")
+## Library definition
-if(CURL_HAS_LTO)
- set_target_properties(${LIB_NAME} PROPERTIES
- INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE
- INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE)
+# Add "_imp" as a suffix before the extension to avoid conflicting with
+# the statically linked "libcurl.lib" (typically with MSVC)
+if(WIN32 AND
+ NOT IMPORT_LIB_SUFFIX AND
+ CMAKE_STATIC_LIBRARY_SUFFIX STREQUAL CMAKE_IMPORT_LIBRARY_SUFFIX)
+ set(IMPORT_LIB_SUFFIX "_imp")
+endif()
+
+# Whether to do a single compilation pass for libcurl sources and reuse these
+# objects to generate both static and shared target.
+if(NOT DEFINED SHARE_LIB_OBJECT)
+ # Enable it by default on platforms where PIC is the default for both shared
+ # and static and there is a way to tell the linker which libcurl symbols it
+ # should export (vs. marking these symbols exportable at compile-time).
+ if(WIN32)
+ set(SHARE_LIB_OBJECT ON)
+ else()
+ # On other platforms, make it an option disabled by default
+ set(SHARE_LIB_OBJECT OFF)
+ endif()
endif()
if(WIN32)
- if(BUILD_SHARED_LIBS)
- if(MSVC)
- # Add "_imp" as a suffix before the extension to avoid conflicting with
- # the statically linked "libcurl.lib"
- set_target_properties(${LIB_NAME} PROPERTIES IMPORT_SUFFIX "_imp.lib")
+ # Define CURL_STATICLIB always, to disable __declspec(dllexport) for exported
+ # libcurl symbols. We handle exports via libcurl.def instead. Except with
+ # symbol hiding disabled or debug mode enabled, when we export _all_ symbols
+ # from libcurl DLL, without using libcurl.def.
+ add_definitions("-DCURL_STATICLIB")
+endif()
+
+if(SHARE_LIB_OBJECT)
+ set(LIB_OBJECT "libcurl_object")
+ add_library(${LIB_OBJECT} OBJECT ${HHEADERS} ${CSOURCES})
+ target_link_libraries(${LIB_OBJECT} PRIVATE ${CURL_LIBS})
+ set_target_properties(${LIB_OBJECT} PROPERTIES
+ POSITION_INDEPENDENT_CODE ON)
+ if(HIDES_CURL_PRIVATE_SYMBOLS)
+ set_property(TARGET ${LIB_OBJECT} APPEND PROPERTY COMPILE_FLAGS "${CURL_CFLAG_SYMBOLS_HIDE}")
+ set_property(TARGET ${LIB_OBJECT} APPEND PROPERTY COMPILE_DEFINITIONS "CURL_HIDDEN_SYMBOLS")
+ endif()
+ if(CURL_HAS_LTO)
+ set_target_properties(${LIB_OBJECT} PROPERTIES
+ INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE
+ INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE)
+ endif()
+
+ target_include_directories(${LIB_OBJECT} INTERFACE
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+ $<BUILD_INTERFACE:${CURL_SOURCE_DIR}/include>)
+
+ set(LIB_SOURCE $<TARGET_OBJECTS:${LIB_OBJECT}>)
+else()
+ set(LIB_SOURCE ${HHEADERS} ${CSOURCES})
+endif()
+
+# we want it to be called libcurl on all platforms
+if(BUILD_STATIC_LIBS)
+ list(APPEND libcurl_export ${LIB_STATIC})
+ add_library(${LIB_STATIC} STATIC ${LIB_SOURCE})
+ add_library(${PROJECT_NAME}::${LIB_STATIC} ALIAS ${LIB_STATIC})
+ target_link_libraries(${LIB_STATIC} PRIVATE ${CURL_LIBS})
+ # Remove the "lib" prefix since the library is already named "libcurl".
+ set_target_properties(${LIB_STATIC} PROPERTIES
+ PREFIX "" OUTPUT_NAME "${LIBCURL_OUTPUT_NAME}"
+ SUFFIX "${STATIC_LIB_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ INTERFACE_COMPILE_DEFINITIONS "CURL_STATICLIB")
+ if(HIDES_CURL_PRIVATE_SYMBOLS)
+ set_property(TARGET ${LIB_STATIC} APPEND PROPERTY COMPILE_FLAGS "${CURL_CFLAG_SYMBOLS_HIDE}")
+ set_property(TARGET ${LIB_STATIC} APPEND PROPERTY COMPILE_DEFINITIONS "CURL_HIDDEN_SYMBOLS")
+ endif()
+ if(CURL_HAS_LTO)
+ set_target_properties(${LIB_STATIC} PROPERTIES
+ INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE
+ INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE)
+ endif()
+ if(CMAKEVERSION AND CMAKESONAME)
+ set_target_properties(${LIB_STATIC} PROPERTIES
+ VERSION ${CMAKEVERSION} SOVERSION ${CMAKESONAME})
+ endif()
+
+ target_include_directories(${LIB_STATIC} INTERFACE
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+ $<BUILD_INTERFACE:${CURL_SOURCE_DIR}/include>)
+endif()
+
+if(BUILD_SHARED_LIBS)
+ list(APPEND libcurl_export ${LIB_SHARED})
+ add_library(${LIB_SHARED} SHARED ${LIB_SOURCE})
+ add_library(${PROJECT_NAME}::${LIB_SHARED} ALIAS ${LIB_SHARED})
+ if(WIN32)
+ set_property(TARGET ${LIB_SHARED} APPEND PROPERTY SOURCES libcurl.rc)
+ if(HIDES_CURL_PRIVATE_SYMBOLS)
+ set_property(TARGET ${LIB_SHARED} APPEND PROPERTY SOURCES "${CURL_SOURCE_DIR}/libcurl.def")
endif()
endif()
+ target_link_libraries(${LIB_SHARED} PRIVATE ${CURL_LIBS})
+ # Remove the "lib" prefix since the library is already named "libcurl".
+ set_target_properties(${LIB_SHARED} PROPERTIES
+ PREFIX "" OUTPUT_NAME "${LIBCURL_OUTPUT_NAME}"
+ IMPORT_PREFIX "" IMPORT_SUFFIX "${IMPORT_LIB_SUFFIX}${CMAKE_IMPORT_LIBRARY_SUFFIX}"
+ POSITION_INDEPENDENT_CODE ON)
+ if(HIDES_CURL_PRIVATE_SYMBOLS)
+ set_property(TARGET ${LIB_SHARED} APPEND PROPERTY COMPILE_FLAGS "${CURL_CFLAG_SYMBOLS_HIDE}")
+ set_property(TARGET ${LIB_SHARED} APPEND PROPERTY COMPILE_DEFINITIONS "CURL_HIDDEN_SYMBOLS")
+ endif()
+ if(CURL_HAS_LTO)
+ set_target_properties(${LIB_SHARED} PROPERTIES
+ INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE
+ INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE)
+ endif()
+ if(CMAKEVERSION AND CMAKESONAME)
+ set_target_properties(${LIB_SHARED} PROPERTIES
+ VERSION ${CMAKEVERSION} SOVERSION ${CMAKESONAME})
+ endif()
+
+ target_include_directories(${LIB_SHARED} INTERFACE
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+ $<BUILD_INTERFACE:${CURL_SOURCE_DIR}/include>)
endif()
-target_include_directories(${LIB_NAME} INTERFACE
- $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
- $<BUILD_INTERFACE:${CURL_SOURCE_DIR}/include>)
+add_library(${LIB_NAME} ALIAS ${LIB_SELECTED})
+add_library(${PROJECT_NAME}::${LIB_NAME} ALIAS ${LIB_SELECTED})
if(CURL_ENABLE_EXPORT_TARGET)
- install(TARGETS ${LIB_NAME}
- EXPORT ${TARGETS_EXPORT_NAME}
- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
- )
+ if(BUILD_STATIC_LIBS)
+ install(TARGETS ${LIB_STATIC}
+ EXPORT ${TARGETS_EXPORT_NAME}
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ )
+ endif()
+ if(BUILD_SHARED_LIBS)
+ install(TARGETS ${LIB_SHARED}
+ EXPORT ${TARGETS_EXPORT_NAME}
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ )
+ endif()
- export(TARGETS ${LIB_NAME}
+ export(TARGETS ${libcurl_export}
FILE ${PROJECT_BINARY_DIR}/libcurl-target.cmake
NAMESPACE ${PROJECT_NAME}::
)
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 5d2df8bff..1237c8e99 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -25,10 +25,11 @@ AUTOMAKE_OPTIONS = foreign nostdinc
CMAKE_DIST = CMakeLists.txt curl_config.h.cmake
-EXTRA_DIST = Makefile.m32 config-win32.h config-win32ce.h config-plan9.h \
- config-riscos.h config-mac.h curl_config.h.in makefile.dj config-dos.h \
- libcurl.plist libcurl.rc config-amigaos.h makefile.amiga config-win32ce.h \
- config-os400.h setup-os400.h $(CMAKE_DIST) setup-win32.h .checksrc
+EXTRA_DIST = Makefile.mk config-win32.h config-win32ce.h config-plan9.h \
+ config-riscos.h config-mac.h curl_config.h.in config-dos.h \
+ libcurl.plist libcurl.rc config-amigaos.h config-win32ce.h \
+ config-os400.h setup-os400.h $(CMAKE_DIST) setup-win32.h .checksrc \
+ Makefile.soname
lib_LTLIBRARIES = libcurl.la
@@ -57,19 +58,7 @@ AM_CPPFLAGS = -I$(top_srcdir)/include \
# Prevent LIBS from being used for all link targets
LIBS = $(BLANK_AT_MAKETIME)
-VERSIONINFO=-version-info 12:0:8
-# This flag accepts an argument of the form current[:revision[:age]]. So,
-# passing -version-info 3:12:1 sets current to 3, revision to 12, and age to
-# 1.
-#
-# Here's the simplified rule guide on how to change -version-info:
-# (current version is C:R:A)
-#
-# 1. if there are only source changes, use C:R+1:A
-# 2. if interfaces were added use C+1:0:A+1
-# 3. if interfaces were removed, then use C+1:0:0
-#
-# For the full guide on libcurl ABI rules, see docs/libcurl/ABI
+include Makefile.soname
AM_CPPFLAGS += -DBUILDING_LIBCURL
AM_LDFLAGS =
@@ -109,7 +98,7 @@ endif
if USE_CPPFLAG_CURL_STATICLIB
libcurl_la_CPPFLAGS_EXTRA += -DCURL_STATICLIB
else
-if OS_WINDOWS
+if HAVE_WINDRES
libcurl_la_SOURCES += $(LIB_RCFILES)
$(LIB_RCFILES): $(top_srcdir)/include/curl/curlver.h
endif
@@ -121,7 +110,7 @@ libcurl_la_CFLAGS_EXTRA += $(CFLAG_CURL_SYMBOL_HIDING)
endif
libcurl_la_CPPFLAGS = $(AM_CPPFLAGS) $(libcurl_la_CPPFLAGS_EXTRA)
-libcurl_la_LDFLAGS = $(AM_LDFLAGS) $(libcurl_la_LDFLAGS_EXTRA) $(LDFLAGS) $(LIBCURL_LIBS)
+libcurl_la_LDFLAGS = $(AM_LDFLAGS) $(libcurl_la_LDFLAGS_EXTRA) $(CURL_LDFLAGS_LIB) $(LIBCURL_LIBS)
libcurl_la_CFLAGS = $(AM_CFLAGS) $(libcurl_la_CFLAGS_EXTRA)
libcurlu_la_CPPFLAGS = $(AM_CPPFLAGS) -DCURL_STATICLIB -DUNITTESTS
@@ -154,8 +143,7 @@ tidy:
optiontable:
perl optiontable.pl < $(top_srcdir)/include/curl/curl.h > easyoptions.c
-if OS_WINDOWS
-# Warning is "normal": libtool: error: ignoring unknown tag RC
+if HAVE_WINDRES
.rc.lo:
$(LIBTOOL) --tag=RC --mode=compile $(RC) -I$(top_srcdir)/include $(RCFLAGS) -i $< -o $@
endif
diff --git a/lib/Makefile.in b/lib/Makefile.in
index 5742ca1cb..0f121319c 100644
--- a/lib/Makefile.in
+++ b/lib/Makefile.in
@@ -21,7 +21,31 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed 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
+#
+###########################################################################
+
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -119,7 +143,7 @@ host_triplet = @host@
# if symbol-hiding is enabled, hide them!
@CURL_LT_SHLIB_USE_VERSIONED_SYMBOLS_FALSE@@DOING_CURL_SYMBOL_HIDING_TRUE@am__append_5 = -export-symbols-regex '^curl_.*'
@USE_CPPFLAG_CURL_STATICLIB_TRUE@am__append_6 = -DCURL_STATICLIB
-@OS_WINDOWS_TRUE@@USE_CPPFLAG_CURL_STATICLIB_FALSE@am__append_7 = $(LIB_RCFILES)
+@HAVE_WINDRES_TRUE@@USE_CPPFLAG_CURL_STATICLIB_FALSE@am__append_7 = $(LIB_RCFILES)
@DOING_CURL_SYMBOL_HIDING_TRUE@am__append_8 = -DCURL_HIDDEN_SYMBOLS
@DOING_CURL_SYMBOL_HIDING_TRUE@am__append_9 = $(CFLAG_CURL_SYMBOL_HIDING)
subdir = lib
@@ -130,7 +154,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.m4 \
$(top_srcdir)/m4/curl-confopts.m4 \
$(top_srcdir)/m4/curl-functions.m4 \
$(top_srcdir)/m4/curl-gnutls.m4 \
- $(top_srcdir)/m4/curl-mbedtls.m4 $(top_srcdir)/m4/curl-nss.m4 \
+ $(top_srcdir)/m4/curl-mbedtls.m4 \
$(top_srcdir)/m4/curl-openssl.m4 \
$(top_srcdir)/m4/curl-override.m4 \
$(top_srcdir)/m4/curl-reentrant.m4 \
@@ -188,72 +212,79 @@ am__installdirs = "$(DESTDIR)$(libdir)"
LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
libcurl_la_LIBADD =
am__libcurl_la_SOURCES_DIST = altsvc.c amigaos.c asyn-ares.c \
- asyn-thread.c base64.c bufref.c c-hyper.c conncache.c \
- connect.c content_encoding.c cookie.c curl_addrinfo.c \
- curl_des.c curl_endian.c curl_fnmatch.c curl_get_line.c \
- curl_gethostname.c curl_gssapi.c curl_memrchr.c \
- curl_multibyte.c curl_ntlm_core.c curl_ntlm_wb.c curl_path.c \
- curl_range.c curl_rtmp.c curl_sasl.c curl_sspi.c \
- curl_threads.c dict.c doh.c dynbuf.c easy.c easygetopt.c \
- easyoptions.c escape.c file.c fileinfo.c fopen.c formdata.c \
- ftp.c ftplistparser.c getenv.c getinfo.c gopher.c h2h3.c \
- hash.c headers.c hmac.c hostasyn.c hostip.c hostip4.c \
- hostip6.c hostsyn.c hsts.c http.c http2.c http_chunks.c \
- http_digest.c http_negotiate.c http_ntlm.c http_proxy.c \
- http_aws_sigv4.c idn_win32.c if2ip.c imap.c inet_ntop.c \
- inet_pton.c krb5.c ldap.c llist.c md4.c md5.c memdebug.c \
- mime.c mprintf.c mqtt.c multi.c netrc.c nonblock.c noproxy.c \
- openldap.c parsedate.c pingpong.c pop3.c progress.c psl.c \
- rand.c rename.c rtsp.c select.c sendf.c setopt.c sha256.c \
- share.c slist.c smb.c smtp.c socketpair.c socks.c \
- socks_gssapi.c socks_sspi.c speedcheck.c splay.c strcase.c \
- strdup.c strerror.c strtok.c strtoofft.c system_win32.c \
- telnet.c tftp.c timediff.c timeval.c transfer.c url.c urlapi.c \
- version.c version_win32.c warnless.c wildcard.c ws.c \
+ asyn-thread.c base64.c bufq.c bufref.c c-hyper.c cf-h1-proxy.c \
+ cf-h2-proxy.c cf-haproxy.c cf-https-connect.c cf-socket.c \
+ cfilters.c conncache.c connect.c content_encoding.c cookie.c \
+ curl_addrinfo.c curl_des.c curl_endian.c curl_fnmatch.c \
+ curl_get_line.c curl_gethostname.c curl_gssapi.c \
+ curl_memrchr.c curl_multibyte.c curl_ntlm_core.c \
+ curl_ntlm_wb.c curl_path.c curl_range.c curl_rtmp.c \
+ curl_sasl.c curl_sspi.c curl_threads.c curl_trc.c dict.c doh.c \
+ dynbuf.c dynhds.c easy.c easygetopt.c easyoptions.c escape.c \
+ file.c fileinfo.c fopen.c formdata.c ftp.c ftplistparser.c \
+ getenv.c getinfo.c gopher.c hash.c headers.c hmac.c hostasyn.c \
+ hostip.c hostip4.c hostip6.c hostsyn.c hsts.c http.c http1.c \
+ http2.c http_aws_sigv4.c http_chunks.c http_digest.c \
+ http_negotiate.c http_ntlm.c http_proxy.c idn.c if2ip.c imap.c \
+ inet_ntop.c inet_pton.c krb5.c ldap.c llist.c macos.c md4.c \
+ md5.c memdebug.c mime.c mprintf.c mqtt.c multi.c netrc.c \
+ nonblock.c noproxy.c openldap.c parsedate.c pingpong.c pop3.c \
+ progress.c psl.c rand.c rename.c rtsp.c select.c sendf.c \
+ setopt.c sha256.c share.c slist.c smb.c smtp.c socketpair.c \
+ socks.c socks_gssapi.c socks_sspi.c speedcheck.c splay.c \
+ strcase.c strdup.c strerror.c strtok.c strtoofft.c \
+ system_win32.c telnet.c tftp.c timediff.c timeval.c transfer.c \
+ url.c urlapi.c version.c version_win32.c warnless.c ws.c \
vauth/cleartext.c vauth/cram.c vauth/digest.c \
vauth/digest_sspi.c vauth/gsasl.c vauth/krb5_gssapi.c \
vauth/krb5_sspi.c vauth/ntlm.c vauth/ntlm_sspi.c \
vauth/oauth2.c vauth/spnego_gssapi.c vauth/spnego_sspi.c \
- vauth/vauth.c vtls/bearssl.c vtls/gskit.c vtls/gtls.c \
- vtls/hostcheck.c vtls/keylog.c vtls/mbedtls.c \
- vtls/mbedtls_threadlock.c vtls/nss.c vtls/openssl.c \
- vtls/rustls.c vtls/schannel.c vtls/schannel_verify.c \
- vtls/sectransp.c vtls/vtls.c vtls/wolfssl.c vtls/x509asn1.c \
- vquic/msh3.c vquic/ngtcp2.c vquic/quiche.c vquic/vquic.c \
+ vauth/vauth.c vtls/bearssl.c vtls/gtls.c vtls/hostcheck.c \
+ vtls/keylog.c vtls/mbedtls.c vtls/mbedtls_threadlock.c \
+ vtls/openssl.c vtls/rustls.c vtls/schannel.c \
+ vtls/schannel_verify.c vtls/sectransp.c vtls/vtls.c \
+ vtls/wolfssl.c vtls/x509asn1.c vquic/curl_msh3.c \
+ vquic/curl_ngtcp2.c vquic/curl_quiche.c vquic/vquic.c \
vssh/libssh.c vssh/libssh2.c vssh/wolfssh.c altsvc.h amigaos.h \
- arpa_telnet.h asyn.h bufref.h c-hyper.h conncache.h connect.h \
- content_encoding.h cookie.h curl_addrinfo.h curl_base64.h \
- curl_ctype.h curl_des.h curl_endian.h curl_fnmatch.h \
- curl_get_line.h curl_gethostname.h curl_gssapi.h curl_hmac.h \
- curl_krb5.h curl_ldap.h curl_md4.h curl_md5.h curl_memory.h \
- curl_memrchr.h curl_multibyte.h curl_ntlm_core.h \
- curl_ntlm_wb.h curl_path.h curl_printf.h curl_range.h \
- curl_rtmp.h curl_sasl.h curl_setup.h curl_setup_once.h \
- curl_sha256.h curl_sspi.h curl_threads.h curlx.h dict.h doh.h \
- dynbuf.h easy_lock.h easyif.h easyoptions.h escape.h file.h \
- fileinfo.h fopen.h formdata.h functypes.h ftp.h \
- ftplistparser.h getinfo.h gopher.h h2h3.h hash.h headers.h \
- hostip.h hsts.h http.h http2.h http_chunks.h http_digest.h \
- http_negotiate.h http_ntlm.h http_proxy.h http_aws_sigv4.h \
- if2ip.h imap.h inet_ntop.h inet_pton.h llist.h memdebug.h \
- mime.h mqtt.h multihandle.h multiif.h netrc.h nonblock.h \
- noproxy.h parsedate.h pingpong.h pop3.h progress.h psl.h \
- quic.h rand.h rename.h rtsp.h select.h sendf.h setopt.h \
+ arpa_telnet.h asyn.h bufq.h bufref.h c-hyper.h cf-h1-proxy.h \
+ cf-h2-proxy.h cf-haproxy.h cf-https-connect.h cf-socket.h \
+ cfilters.h conncache.h connect.h content_encoding.h cookie.h \
+ curl_addrinfo.h curl_base64.h curl_ctype.h curl_des.h \
+ curl_endian.h curl_fnmatch.h curl_get_line.h \
+ curl_gethostname.h curl_gssapi.h curl_hmac.h curl_krb5.h \
+ curl_ldap.h curl_md4.h curl_md5.h curl_memory.h curl_memrchr.h \
+ curl_multibyte.h curl_ntlm_core.h curl_ntlm_wb.h curl_path.h \
+ curl_printf.h curl_range.h curl_rtmp.h curl_sasl.h \
+ curl_setup.h curl_setup_once.h curl_sha256.h curl_sspi.h \
+ curl_threads.h curl_trc.h curlx.h dict.h doh.h dynbuf.h \
+ dynhds.h easy_lock.h easyif.h easyoptions.h escape.h file.h \
+ fileinfo.h fopen.h formdata.h ftp.h ftplistparser.h \
+ functypes.h getinfo.h gopher.h hash.h headers.h hostip.h \
+ hsts.h http.h http1.h http2.h http_aws_sigv4.h http_chunks.h \
+ http_digest.h http_negotiate.h http_ntlm.h http_proxy.h idn.h \
+ if2ip.h imap.h inet_ntop.h inet_pton.h llist.h macos.h \
+ memdebug.h mime.h mqtt.h multihandle.h multiif.h netrc.h \
+ nonblock.h noproxy.h parsedate.h pingpong.h pop3.h progress.h \
+ psl.h rand.h rename.h rtsp.h select.h sendf.h setopt.h \
setup-vms.h share.h sigpipe.h slist.h smb.h smtp.h sockaddr.h \
socketpair.h socks.h speedcheck.h splay.h strcase.h strdup.h \
strerror.h strtok.h strtoofft.h system_win32.h telnet.h tftp.h \
timediff.h timeval.h transfer.h url.h urlapi-int.h urldata.h \
- version_win32.h warnless.h wildcard.h ws.h vauth/digest.h \
- vauth/ntlm.h vauth/vauth.h vtls/bearssl.h vtls/gskit.h \
- vtls/gtls.h vtls/hostcheck.h vtls/keylog.h vtls/mbedtls.h \
- vtls/mbedtls_threadlock.h vtls/nssg.h vtls/openssl.h \
- vtls/rustls.h vtls/schannel.h vtls/sectransp.h vtls/vtls.h \
- vtls/wolfssl.h vtls/x509asn1.h vquic/msh3.h vquic/ngtcp2.h \
- vquic/quiche.h vquic/vquic.h vssh/ssh.h libcurl.rc
+ version_win32.h warnless.h ws.h vauth/digest.h vauth/ntlm.h \
+ vauth/vauth.h vtls/bearssl.h vtls/gtls.h vtls/hostcheck.h \
+ vtls/keylog.h vtls/mbedtls.h vtls/mbedtls_threadlock.h \
+ vtls/openssl.h vtls/rustls.h vtls/schannel.h \
+ vtls/schannel_int.h vtls/sectransp.h vtls/vtls.h \
+ vtls/vtls_int.h vtls/wolfssl.h vtls/x509asn1.h \
+ vquic/curl_msh3.h vquic/curl_ngtcp2.h vquic/curl_quiche.h \
+ vquic/vquic.h vquic/vquic_int.h vssh/ssh.h libcurl.rc
am__objects_1 = libcurl_la-altsvc.lo libcurl_la-amigaos.lo \
libcurl_la-asyn-ares.lo libcurl_la-asyn-thread.lo \
- libcurl_la-base64.lo libcurl_la-bufref.lo \
- libcurl_la-c-hyper.lo libcurl_la-conncache.lo \
+ libcurl_la-base64.lo libcurl_la-bufq.lo libcurl_la-bufref.lo \
+ libcurl_la-c-hyper.lo libcurl_la-cf-h1-proxy.lo \
+ libcurl_la-cf-h2-proxy.lo libcurl_la-cf-haproxy.lo \
+ libcurl_la-cf-https-connect.lo libcurl_la-cf-socket.lo \
+ libcurl_la-cfilters.lo libcurl_la-conncache.lo \
libcurl_la-connect.lo libcurl_la-content_encoding.lo \
libcurl_la-cookie.lo libcurl_la-curl_addrinfo.lo \
libcurl_la-curl_des.lo libcurl_la-curl_endian.lo \
@@ -264,24 +295,25 @@ am__objects_1 = libcurl_la-altsvc.lo libcurl_la-amigaos.lo \
libcurl_la-curl_path.lo libcurl_la-curl_range.lo \
libcurl_la-curl_rtmp.lo libcurl_la-curl_sasl.lo \
libcurl_la-curl_sspi.lo libcurl_la-curl_threads.lo \
- libcurl_la-dict.lo libcurl_la-doh.lo libcurl_la-dynbuf.lo \
- libcurl_la-easy.lo libcurl_la-easygetopt.lo \
- libcurl_la-easyoptions.lo libcurl_la-escape.lo \
- libcurl_la-file.lo libcurl_la-fileinfo.lo libcurl_la-fopen.lo \
- libcurl_la-formdata.lo libcurl_la-ftp.lo \
+ libcurl_la-curl_trc.lo libcurl_la-dict.lo libcurl_la-doh.lo \
+ libcurl_la-dynbuf.lo libcurl_la-dynhds.lo libcurl_la-easy.lo \
+ libcurl_la-easygetopt.lo libcurl_la-easyoptions.lo \
+ libcurl_la-escape.lo libcurl_la-file.lo libcurl_la-fileinfo.lo \
+ libcurl_la-fopen.lo libcurl_la-formdata.lo libcurl_la-ftp.lo \
libcurl_la-ftplistparser.lo libcurl_la-getenv.lo \
- libcurl_la-getinfo.lo libcurl_la-gopher.lo libcurl_la-h2h3.lo \
- libcurl_la-hash.lo libcurl_la-headers.lo libcurl_la-hmac.lo \
+ libcurl_la-getinfo.lo libcurl_la-gopher.lo libcurl_la-hash.lo \
+ libcurl_la-headers.lo libcurl_la-hmac.lo \
libcurl_la-hostasyn.lo libcurl_la-hostip.lo \
libcurl_la-hostip4.lo libcurl_la-hostip6.lo \
libcurl_la-hostsyn.lo libcurl_la-hsts.lo libcurl_la-http.lo \
- libcurl_la-http2.lo libcurl_la-http_chunks.lo \
+ libcurl_la-http1.lo libcurl_la-http2.lo \
+ libcurl_la-http_aws_sigv4.lo libcurl_la-http_chunks.lo \
libcurl_la-http_digest.lo libcurl_la-http_negotiate.lo \
libcurl_la-http_ntlm.lo libcurl_la-http_proxy.lo \
- libcurl_la-http_aws_sigv4.lo libcurl_la-idn_win32.lo \
- libcurl_la-if2ip.lo libcurl_la-imap.lo libcurl_la-inet_ntop.lo \
- libcurl_la-inet_pton.lo libcurl_la-krb5.lo libcurl_la-ldap.lo \
- libcurl_la-llist.lo libcurl_la-md4.lo libcurl_la-md5.lo \
+ libcurl_la-idn.lo libcurl_la-if2ip.lo libcurl_la-imap.lo \
+ libcurl_la-inet_ntop.lo libcurl_la-inet_pton.lo \
+ libcurl_la-krb5.lo libcurl_la-ldap.lo libcurl_la-llist.lo \
+ libcurl_la-macos.lo libcurl_la-md4.lo libcurl_la-md5.lo \
libcurl_la-memdebug.lo libcurl_la-mime.lo \
libcurl_la-mprintf.lo libcurl_la-mqtt.lo libcurl_la-multi.lo \
libcurl_la-netrc.lo libcurl_la-nonblock.lo \
@@ -301,7 +333,7 @@ am__objects_1 = libcurl_la-altsvc.lo libcurl_la-amigaos.lo \
libcurl_la-timeval.lo libcurl_la-transfer.lo libcurl_la-url.lo \
libcurl_la-urlapi.lo libcurl_la-version.lo \
libcurl_la-version_win32.lo libcurl_la-warnless.lo \
- libcurl_la-wildcard.lo libcurl_la-ws.lo
+ libcurl_la-ws.lo
am__dirstamp = $(am__leading_dot)dirstamp
am__objects_2 = vauth/libcurl_la-cleartext.lo vauth/libcurl_la-cram.lo \
vauth/libcurl_la-digest.lo vauth/libcurl_la-digest_sspi.lo \
@@ -310,16 +342,17 @@ am__objects_2 = vauth/libcurl_la-cleartext.lo vauth/libcurl_la-cram.lo \
vauth/libcurl_la-ntlm_sspi.lo vauth/libcurl_la-oauth2.lo \
vauth/libcurl_la-spnego_gssapi.lo \
vauth/libcurl_la-spnego_sspi.lo vauth/libcurl_la-vauth.lo
-am__objects_3 = vtls/libcurl_la-bearssl.lo vtls/libcurl_la-gskit.lo \
- vtls/libcurl_la-gtls.lo vtls/libcurl_la-hostcheck.lo \
- vtls/libcurl_la-keylog.lo vtls/libcurl_la-mbedtls.lo \
- vtls/libcurl_la-mbedtls_threadlock.lo vtls/libcurl_la-nss.lo \
+am__objects_3 = vtls/libcurl_la-bearssl.lo vtls/libcurl_la-gtls.lo \
+ vtls/libcurl_la-hostcheck.lo vtls/libcurl_la-keylog.lo \
+ vtls/libcurl_la-mbedtls.lo \
+ vtls/libcurl_la-mbedtls_threadlock.lo \
vtls/libcurl_la-openssl.lo vtls/libcurl_la-rustls.lo \
vtls/libcurl_la-schannel.lo vtls/libcurl_la-schannel_verify.lo \
vtls/libcurl_la-sectransp.lo vtls/libcurl_la-vtls.lo \
vtls/libcurl_la-wolfssl.lo vtls/libcurl_la-x509asn1.lo
-am__objects_4 = vquic/libcurl_la-msh3.lo vquic/libcurl_la-ngtcp2.lo \
- vquic/libcurl_la-quiche.lo vquic/libcurl_la-vquic.lo
+am__objects_4 = vquic/libcurl_la-curl_msh3.lo \
+ vquic/libcurl_la-curl_ngtcp2.lo \
+ vquic/libcurl_la-curl_quiche.lo vquic/libcurl_la-vquic.lo
am__objects_5 = vssh/libcurl_la-libssh.lo vssh/libcurl_la-libssh2.lo \
vssh/libcurl_la-wolfssh.lo
am__objects_6 = $(am__objects_1) $(am__objects_2) $(am__objects_3) \
@@ -328,7 +361,7 @@ am__objects_7 =
am__objects_8 = $(am__objects_7) $(am__objects_7) $(am__objects_7) \
$(am__objects_7) $(am__objects_7)
am__objects_9 = libcurl.lo
-@OS_WINDOWS_TRUE@@USE_CPPFLAG_CURL_STATICLIB_FALSE@am__objects_10 = $(am__objects_9)
+@HAVE_WINDRES_TRUE@@USE_CPPFLAG_CURL_STATICLIB_FALSE@am__objects_10 = $(am__objects_9)
am_libcurl_la_OBJECTS = $(am__objects_6) $(am__objects_8) \
$(am__objects_10)
libcurl_la_OBJECTS = $(am_libcurl_la_OBJECTS)
@@ -342,39 +375,44 @@ libcurl_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
libcurlu_la_LIBADD =
am__objects_11 = libcurlu_la-altsvc.lo libcurlu_la-amigaos.lo \
libcurlu_la-asyn-ares.lo libcurlu_la-asyn-thread.lo \
- libcurlu_la-base64.lo libcurlu_la-bufref.lo \
- libcurlu_la-c-hyper.lo libcurlu_la-conncache.lo \
- libcurlu_la-connect.lo libcurlu_la-content_encoding.lo \
- libcurlu_la-cookie.lo libcurlu_la-curl_addrinfo.lo \
- libcurlu_la-curl_des.lo libcurlu_la-curl_endian.lo \
- libcurlu_la-curl_fnmatch.lo libcurlu_la-curl_get_line.lo \
- libcurlu_la-curl_gethostname.lo libcurlu_la-curl_gssapi.lo \
- libcurlu_la-curl_memrchr.lo libcurlu_la-curl_multibyte.lo \
- libcurlu_la-curl_ntlm_core.lo libcurlu_la-curl_ntlm_wb.lo \
- libcurlu_la-curl_path.lo libcurlu_la-curl_range.lo \
- libcurlu_la-curl_rtmp.lo libcurlu_la-curl_sasl.lo \
- libcurlu_la-curl_sspi.lo libcurlu_la-curl_threads.lo \
+ libcurlu_la-base64.lo libcurlu_la-bufq.lo \
+ libcurlu_la-bufref.lo libcurlu_la-c-hyper.lo \
+ libcurlu_la-cf-h1-proxy.lo libcurlu_la-cf-h2-proxy.lo \
+ libcurlu_la-cf-haproxy.lo libcurlu_la-cf-https-connect.lo \
+ libcurlu_la-cf-socket.lo libcurlu_la-cfilters.lo \
+ libcurlu_la-conncache.lo libcurlu_la-connect.lo \
+ libcurlu_la-content_encoding.lo libcurlu_la-cookie.lo \
+ libcurlu_la-curl_addrinfo.lo libcurlu_la-curl_des.lo \
+ libcurlu_la-curl_endian.lo libcurlu_la-curl_fnmatch.lo \
+ libcurlu_la-curl_get_line.lo libcurlu_la-curl_gethostname.lo \
+ libcurlu_la-curl_gssapi.lo libcurlu_la-curl_memrchr.lo \
+ libcurlu_la-curl_multibyte.lo libcurlu_la-curl_ntlm_core.lo \
+ libcurlu_la-curl_ntlm_wb.lo libcurlu_la-curl_path.lo \
+ libcurlu_la-curl_range.lo libcurlu_la-curl_rtmp.lo \
+ libcurlu_la-curl_sasl.lo libcurlu_la-curl_sspi.lo \
+ libcurlu_la-curl_threads.lo libcurlu_la-curl_trc.lo \
libcurlu_la-dict.lo libcurlu_la-doh.lo libcurlu_la-dynbuf.lo \
- libcurlu_la-easy.lo libcurlu_la-easygetopt.lo \
- libcurlu_la-easyoptions.lo libcurlu_la-escape.lo \
- libcurlu_la-file.lo libcurlu_la-fileinfo.lo \
- libcurlu_la-fopen.lo libcurlu_la-formdata.lo \
- libcurlu_la-ftp.lo libcurlu_la-ftplistparser.lo \
- libcurlu_la-getenv.lo libcurlu_la-getinfo.lo \
- libcurlu_la-gopher.lo libcurlu_la-h2h3.lo libcurlu_la-hash.lo \
- libcurlu_la-headers.lo libcurlu_la-hmac.lo \
+ libcurlu_la-dynhds.lo libcurlu_la-easy.lo \
+ libcurlu_la-easygetopt.lo libcurlu_la-easyoptions.lo \
+ libcurlu_la-escape.lo libcurlu_la-file.lo \
+ libcurlu_la-fileinfo.lo libcurlu_la-fopen.lo \
+ libcurlu_la-formdata.lo libcurlu_la-ftp.lo \
+ libcurlu_la-ftplistparser.lo libcurlu_la-getenv.lo \
+ libcurlu_la-getinfo.lo libcurlu_la-gopher.lo \
+ libcurlu_la-hash.lo libcurlu_la-headers.lo libcurlu_la-hmac.lo \
libcurlu_la-hostasyn.lo libcurlu_la-hostip.lo \
libcurlu_la-hostip4.lo libcurlu_la-hostip6.lo \
libcurlu_la-hostsyn.lo libcurlu_la-hsts.lo libcurlu_la-http.lo \
- libcurlu_la-http2.lo libcurlu_la-http_chunks.lo \
+ libcurlu_la-http1.lo libcurlu_la-http2.lo \
+ libcurlu_la-http_aws_sigv4.lo libcurlu_la-http_chunks.lo \
libcurlu_la-http_digest.lo libcurlu_la-http_negotiate.lo \
libcurlu_la-http_ntlm.lo libcurlu_la-http_proxy.lo \
- libcurlu_la-http_aws_sigv4.lo libcurlu_la-idn_win32.lo \
- libcurlu_la-if2ip.lo libcurlu_la-imap.lo \
+ libcurlu_la-idn.lo libcurlu_la-if2ip.lo libcurlu_la-imap.lo \
libcurlu_la-inet_ntop.lo libcurlu_la-inet_pton.lo \
libcurlu_la-krb5.lo libcurlu_la-ldap.lo libcurlu_la-llist.lo \
- libcurlu_la-md4.lo libcurlu_la-md5.lo libcurlu_la-memdebug.lo \
- libcurlu_la-mime.lo libcurlu_la-mprintf.lo libcurlu_la-mqtt.lo \
+ libcurlu_la-macos.lo libcurlu_la-md4.lo libcurlu_la-md5.lo \
+ libcurlu_la-memdebug.lo libcurlu_la-mime.lo \
+ libcurlu_la-mprintf.lo libcurlu_la-mqtt.lo \
libcurlu_la-multi.lo libcurlu_la-netrc.lo \
libcurlu_la-nonblock.lo libcurlu_la-noproxy.lo \
libcurlu_la-openldap.lo libcurlu_la-parsedate.lo \
@@ -395,8 +433,7 @@ am__objects_11 = libcurlu_la-altsvc.lo libcurlu_la-amigaos.lo \
libcurlu_la-timeval.lo libcurlu_la-transfer.lo \
libcurlu_la-url.lo libcurlu_la-urlapi.lo \
libcurlu_la-version.lo libcurlu_la-version_win32.lo \
- libcurlu_la-warnless.lo libcurlu_la-wildcard.lo \
- libcurlu_la-ws.lo
+ libcurlu_la-warnless.lo libcurlu_la-ws.lo
am__objects_12 = vauth/libcurlu_la-cleartext.lo \
vauth/libcurlu_la-cram.lo vauth/libcurlu_la-digest.lo \
vauth/libcurlu_la-digest_sspi.lo vauth/libcurlu_la-gsasl.lo \
@@ -405,17 +442,18 @@ am__objects_12 = vauth/libcurlu_la-cleartext.lo \
vauth/libcurlu_la-ntlm_sspi.lo vauth/libcurlu_la-oauth2.lo \
vauth/libcurlu_la-spnego_gssapi.lo \
vauth/libcurlu_la-spnego_sspi.lo vauth/libcurlu_la-vauth.lo
-am__objects_13 = vtls/libcurlu_la-bearssl.lo vtls/libcurlu_la-gskit.lo \
- vtls/libcurlu_la-gtls.lo vtls/libcurlu_la-hostcheck.lo \
- vtls/libcurlu_la-keylog.lo vtls/libcurlu_la-mbedtls.lo \
- vtls/libcurlu_la-mbedtls_threadlock.lo vtls/libcurlu_la-nss.lo \
+am__objects_13 = vtls/libcurlu_la-bearssl.lo vtls/libcurlu_la-gtls.lo \
+ vtls/libcurlu_la-hostcheck.lo vtls/libcurlu_la-keylog.lo \
+ vtls/libcurlu_la-mbedtls.lo \
+ vtls/libcurlu_la-mbedtls_threadlock.lo \
vtls/libcurlu_la-openssl.lo vtls/libcurlu_la-rustls.lo \
vtls/libcurlu_la-schannel.lo \
vtls/libcurlu_la-schannel_verify.lo \
vtls/libcurlu_la-sectransp.lo vtls/libcurlu_la-vtls.lo \
vtls/libcurlu_la-wolfssl.lo vtls/libcurlu_la-x509asn1.lo
-am__objects_14 = vquic/libcurlu_la-msh3.lo vquic/libcurlu_la-ngtcp2.lo \
- vquic/libcurlu_la-quiche.lo vquic/libcurlu_la-vquic.lo
+am__objects_14 = vquic/libcurlu_la-curl_msh3.lo \
+ vquic/libcurlu_la-curl_ngtcp2.lo \
+ vquic/libcurlu_la-curl_quiche.lo vquic/libcurlu_la-vquic.lo
am__objects_15 = vssh/libcurlu_la-libssh.lo \
vssh/libcurlu_la-libssh2.lo vssh/libcurlu_la-wolfssh.lo
am__objects_16 = $(am__objects_11) $(am__objects_12) $(am__objects_13) \
@@ -446,8 +484,15 @@ am__depfiles_remade = ./$(DEPDIR)/libcurl_la-altsvc.Plo \
./$(DEPDIR)/libcurl_la-asyn-ares.Plo \
./$(DEPDIR)/libcurl_la-asyn-thread.Plo \
./$(DEPDIR)/libcurl_la-base64.Plo \
+ ./$(DEPDIR)/libcurl_la-bufq.Plo \
./$(DEPDIR)/libcurl_la-bufref.Plo \
./$(DEPDIR)/libcurl_la-c-hyper.Plo \
+ ./$(DEPDIR)/libcurl_la-cf-h1-proxy.Plo \
+ ./$(DEPDIR)/libcurl_la-cf-h2-proxy.Plo \
+ ./$(DEPDIR)/libcurl_la-cf-haproxy.Plo \
+ ./$(DEPDIR)/libcurl_la-cf-https-connect.Plo \
+ ./$(DEPDIR)/libcurl_la-cf-socket.Plo \
+ ./$(DEPDIR)/libcurl_la-cfilters.Plo \
./$(DEPDIR)/libcurl_la-conncache.Plo \
./$(DEPDIR)/libcurl_la-connect.Plo \
./$(DEPDIR)/libcurl_la-content_encoding.Plo \
@@ -469,8 +514,10 @@ am__depfiles_remade = ./$(DEPDIR)/libcurl_la-altsvc.Plo \
./$(DEPDIR)/libcurl_la-curl_sasl.Plo \
./$(DEPDIR)/libcurl_la-curl_sspi.Plo \
./$(DEPDIR)/libcurl_la-curl_threads.Plo \
+ ./$(DEPDIR)/libcurl_la-curl_trc.Plo \
./$(DEPDIR)/libcurl_la-dict.Plo ./$(DEPDIR)/libcurl_la-doh.Plo \
./$(DEPDIR)/libcurl_la-dynbuf.Plo \
+ ./$(DEPDIR)/libcurl_la-dynhds.Plo \
./$(DEPDIR)/libcurl_la-easy.Plo \
./$(DEPDIR)/libcurl_la-easygetopt.Plo \
./$(DEPDIR)/libcurl_la-easyoptions.Plo \
@@ -484,7 +531,6 @@ am__depfiles_remade = ./$(DEPDIR)/libcurl_la-altsvc.Plo \
./$(DEPDIR)/libcurl_la-getenv.Plo \
./$(DEPDIR)/libcurl_la-getinfo.Plo \
./$(DEPDIR)/libcurl_la-gopher.Plo \
- ./$(DEPDIR)/libcurl_la-h2h3.Plo \
./$(DEPDIR)/libcurl_la-hash.Plo \
./$(DEPDIR)/libcurl_la-headers.Plo \
./$(DEPDIR)/libcurl_la-hmac.Plo \
@@ -495,6 +541,7 @@ am__depfiles_remade = ./$(DEPDIR)/libcurl_la-altsvc.Plo \
./$(DEPDIR)/libcurl_la-hostsyn.Plo \
./$(DEPDIR)/libcurl_la-hsts.Plo \
./$(DEPDIR)/libcurl_la-http.Plo \
+ ./$(DEPDIR)/libcurl_la-http1.Plo \
./$(DEPDIR)/libcurl_la-http2.Plo \
./$(DEPDIR)/libcurl_la-http_aws_sigv4.Plo \
./$(DEPDIR)/libcurl_la-http_chunks.Plo \
@@ -502,7 +549,7 @@ am__depfiles_remade = ./$(DEPDIR)/libcurl_la-altsvc.Plo \
./$(DEPDIR)/libcurl_la-http_negotiate.Plo \
./$(DEPDIR)/libcurl_la-http_ntlm.Plo \
./$(DEPDIR)/libcurl_la-http_proxy.Plo \
- ./$(DEPDIR)/libcurl_la-idn_win32.Plo \
+ ./$(DEPDIR)/libcurl_la-idn.Plo \
./$(DEPDIR)/libcurl_la-if2ip.Plo \
./$(DEPDIR)/libcurl_la-imap.Plo \
./$(DEPDIR)/libcurl_la-inet_ntop.Plo \
@@ -510,6 +557,7 @@ am__depfiles_remade = ./$(DEPDIR)/libcurl_la-altsvc.Plo \
./$(DEPDIR)/libcurl_la-krb5.Plo \
./$(DEPDIR)/libcurl_la-ldap.Plo \
./$(DEPDIR)/libcurl_la-llist.Plo \
+ ./$(DEPDIR)/libcurl_la-macos.Plo \
./$(DEPDIR)/libcurl_la-md4.Plo ./$(DEPDIR)/libcurl_la-md5.Plo \
./$(DEPDIR)/libcurl_la-memdebug.Plo \
./$(DEPDIR)/libcurl_la-mime.Plo \
@@ -556,15 +604,21 @@ am__depfiles_remade = ./$(DEPDIR)/libcurl_la-altsvc.Plo \
./$(DEPDIR)/libcurl_la-version.Plo \
./$(DEPDIR)/libcurl_la-version_win32.Plo \
./$(DEPDIR)/libcurl_la-warnless.Plo \
- ./$(DEPDIR)/libcurl_la-wildcard.Plo \
./$(DEPDIR)/libcurl_la-ws.Plo \
./$(DEPDIR)/libcurlu_la-altsvc.Plo \
./$(DEPDIR)/libcurlu_la-amigaos.Plo \
./$(DEPDIR)/libcurlu_la-asyn-ares.Plo \
./$(DEPDIR)/libcurlu_la-asyn-thread.Plo \
./$(DEPDIR)/libcurlu_la-base64.Plo \
+ ./$(DEPDIR)/libcurlu_la-bufq.Plo \
./$(DEPDIR)/libcurlu_la-bufref.Plo \
./$(DEPDIR)/libcurlu_la-c-hyper.Plo \
+ ./$(DEPDIR)/libcurlu_la-cf-h1-proxy.Plo \
+ ./$(DEPDIR)/libcurlu_la-cf-h2-proxy.Plo \
+ ./$(DEPDIR)/libcurlu_la-cf-haproxy.Plo \
+ ./$(DEPDIR)/libcurlu_la-cf-https-connect.Plo \
+ ./$(DEPDIR)/libcurlu_la-cf-socket.Plo \
+ ./$(DEPDIR)/libcurlu_la-cfilters.Plo \
./$(DEPDIR)/libcurlu_la-conncache.Plo \
./$(DEPDIR)/libcurlu_la-connect.Plo \
./$(DEPDIR)/libcurlu_la-content_encoding.Plo \
@@ -586,9 +640,11 @@ am__depfiles_remade = ./$(DEPDIR)/libcurl_la-altsvc.Plo \
./$(DEPDIR)/libcurlu_la-curl_sasl.Plo \
./$(DEPDIR)/libcurlu_la-curl_sspi.Plo \
./$(DEPDIR)/libcurlu_la-curl_threads.Plo \
+ ./$(DEPDIR)/libcurlu_la-curl_trc.Plo \
./$(DEPDIR)/libcurlu_la-dict.Plo \
./$(DEPDIR)/libcurlu_la-doh.Plo \
./$(DEPDIR)/libcurlu_la-dynbuf.Plo \
+ ./$(DEPDIR)/libcurlu_la-dynhds.Plo \
./$(DEPDIR)/libcurlu_la-easy.Plo \
./$(DEPDIR)/libcurlu_la-easygetopt.Plo \
./$(DEPDIR)/libcurlu_la-easyoptions.Plo \
@@ -602,7 +658,6 @@ am__depfiles_remade = ./$(DEPDIR)/libcurl_la-altsvc.Plo \
./$(DEPDIR)/libcurlu_la-getenv.Plo \
./$(DEPDIR)/libcurlu_la-getinfo.Plo \
./$(DEPDIR)/libcurlu_la-gopher.Plo \
- ./$(DEPDIR)/libcurlu_la-h2h3.Plo \
./$(DEPDIR)/libcurlu_la-hash.Plo \
./$(DEPDIR)/libcurlu_la-headers.Plo \
./$(DEPDIR)/libcurlu_la-hmac.Plo \
@@ -613,6 +668,7 @@ am__depfiles_remade = ./$(DEPDIR)/libcurl_la-altsvc.Plo \
./$(DEPDIR)/libcurlu_la-hostsyn.Plo \
./$(DEPDIR)/libcurlu_la-hsts.Plo \
./$(DEPDIR)/libcurlu_la-http.Plo \
+ ./$(DEPDIR)/libcurlu_la-http1.Plo \
./$(DEPDIR)/libcurlu_la-http2.Plo \
./$(DEPDIR)/libcurlu_la-http_aws_sigv4.Plo \
./$(DEPDIR)/libcurlu_la-http_chunks.Plo \
@@ -620,7 +676,7 @@ am__depfiles_remade = ./$(DEPDIR)/libcurl_la-altsvc.Plo \
./$(DEPDIR)/libcurlu_la-http_negotiate.Plo \
./$(DEPDIR)/libcurlu_la-http_ntlm.Plo \
./$(DEPDIR)/libcurlu_la-http_proxy.Plo \
- ./$(DEPDIR)/libcurlu_la-idn_win32.Plo \
+ ./$(DEPDIR)/libcurlu_la-idn.Plo \
./$(DEPDIR)/libcurlu_la-if2ip.Plo \
./$(DEPDIR)/libcurlu_la-imap.Plo \
./$(DEPDIR)/libcurlu_la-inet_ntop.Plo \
@@ -628,6 +684,7 @@ am__depfiles_remade = ./$(DEPDIR)/libcurl_la-altsvc.Plo \
./$(DEPDIR)/libcurlu_la-krb5.Plo \
./$(DEPDIR)/libcurlu_la-ldap.Plo \
./$(DEPDIR)/libcurlu_la-llist.Plo \
+ ./$(DEPDIR)/libcurlu_la-macos.Plo \
./$(DEPDIR)/libcurlu_la-md4.Plo \
./$(DEPDIR)/libcurlu_la-md5.Plo \
./$(DEPDIR)/libcurlu_la-memdebug.Plo \
@@ -677,7 +734,6 @@ am__depfiles_remade = ./$(DEPDIR)/libcurl_la-altsvc.Plo \
./$(DEPDIR)/libcurlu_la-version.Plo \
./$(DEPDIR)/libcurlu_la-version_win32.Plo \
./$(DEPDIR)/libcurlu_la-warnless.Plo \
- ./$(DEPDIR)/libcurlu_la-wildcard.Plo \
./$(DEPDIR)/libcurlu_la-ws.Plo \
vauth/$(DEPDIR)/libcurl_la-cleartext.Plo \
vauth/$(DEPDIR)/libcurl_la-cram.Plo \
@@ -705,13 +761,13 @@ am__depfiles_remade = ./$(DEPDIR)/libcurl_la-altsvc.Plo \
vauth/$(DEPDIR)/libcurlu_la-spnego_gssapi.Plo \
vauth/$(DEPDIR)/libcurlu_la-spnego_sspi.Plo \
vauth/$(DEPDIR)/libcurlu_la-vauth.Plo \
- vquic/$(DEPDIR)/libcurl_la-msh3.Plo \
- vquic/$(DEPDIR)/libcurl_la-ngtcp2.Plo \
- vquic/$(DEPDIR)/libcurl_la-quiche.Plo \
+ vquic/$(DEPDIR)/libcurl_la-curl_msh3.Plo \
+ vquic/$(DEPDIR)/libcurl_la-curl_ngtcp2.Plo \
+ vquic/$(DEPDIR)/libcurl_la-curl_quiche.Plo \
vquic/$(DEPDIR)/libcurl_la-vquic.Plo \
- vquic/$(DEPDIR)/libcurlu_la-msh3.Plo \
- vquic/$(DEPDIR)/libcurlu_la-ngtcp2.Plo \
- vquic/$(DEPDIR)/libcurlu_la-quiche.Plo \
+ vquic/$(DEPDIR)/libcurlu_la-curl_msh3.Plo \
+ vquic/$(DEPDIR)/libcurlu_la-curl_ngtcp2.Plo \
+ vquic/$(DEPDIR)/libcurlu_la-curl_quiche.Plo \
vquic/$(DEPDIR)/libcurlu_la-vquic.Plo \
vssh/$(DEPDIR)/libcurl_la-libssh.Plo \
vssh/$(DEPDIR)/libcurl_la-libssh2.Plo \
@@ -720,13 +776,11 @@ am__depfiles_remade = ./$(DEPDIR)/libcurl_la-altsvc.Plo \
vssh/$(DEPDIR)/libcurlu_la-libssh2.Plo \
vssh/$(DEPDIR)/libcurlu_la-wolfssh.Plo \
vtls/$(DEPDIR)/libcurl_la-bearssl.Plo \
- vtls/$(DEPDIR)/libcurl_la-gskit.Plo \
vtls/$(DEPDIR)/libcurl_la-gtls.Plo \
vtls/$(DEPDIR)/libcurl_la-hostcheck.Plo \
vtls/$(DEPDIR)/libcurl_la-keylog.Plo \
vtls/$(DEPDIR)/libcurl_la-mbedtls.Plo \
vtls/$(DEPDIR)/libcurl_la-mbedtls_threadlock.Plo \
- vtls/$(DEPDIR)/libcurl_la-nss.Plo \
vtls/$(DEPDIR)/libcurl_la-openssl.Plo \
vtls/$(DEPDIR)/libcurl_la-rustls.Plo \
vtls/$(DEPDIR)/libcurl_la-schannel.Plo \
@@ -736,13 +790,11 @@ am__depfiles_remade = ./$(DEPDIR)/libcurl_la-altsvc.Plo \
vtls/$(DEPDIR)/libcurl_la-wolfssl.Plo \
vtls/$(DEPDIR)/libcurl_la-x509asn1.Plo \
vtls/$(DEPDIR)/libcurlu_la-bearssl.Plo \
- vtls/$(DEPDIR)/libcurlu_la-gskit.Plo \
vtls/$(DEPDIR)/libcurlu_la-gtls.Plo \
vtls/$(DEPDIR)/libcurlu_la-hostcheck.Plo \
vtls/$(DEPDIR)/libcurlu_la-keylog.Plo \
vtls/$(DEPDIR)/libcurlu_la-mbedtls.Plo \
vtls/$(DEPDIR)/libcurlu_la-mbedtls_threadlock.Plo \
- vtls/$(DEPDIR)/libcurlu_la-nss.Plo \
vtls/$(DEPDIR)/libcurlu_la-openssl.Plo \
vtls/$(DEPDIR)/libcurlu_la-rustls.Plo \
vtls/$(DEPDIR)/libcurlu_la-schannel.Plo \
@@ -796,12 +848,15 @@ am__define_uniq_tagged_files = \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.inc \
- $(srcdir)/curl_config.h.in $(srcdir)/libcurl.plist.in \
- $(srcdir)/libcurl.vers.in $(top_srcdir)/depcomp
+ $(srcdir)/Makefile.soname $(srcdir)/curl_config.h.in \
+ $(srcdir)/libcurl.plist.in $(srcdir)/libcurl.vers.in \
+ $(top_srcdir)/depcomp
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APACHECTL = @APACHECTL@
+APXS = @APXS@
AR = @AR@
AR_FLAGS = @AR_FLAGS@
AS = @AS@
@@ -810,6 +865,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@
+CADDY = @CADDY@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
@@ -873,6 +929,8 @@ HAVE_LIBZ = @HAVE_LIBZ@
HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
HAVE_PROTO_BSDSOCKET_H = @HAVE_PROTO_BSDSOCKET_H@
HAVE_ZSTD = @HAVE_ZSTD@
+HTTPD = @HTTPD@
+HTTPD_NGHTTPX = @HTTPD_NGHTTPX@
IDN_ENABLED = @IDN_ENABLED@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -902,7 +960,6 @@ MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
NROFF = @NROFF@
-NSS_LIBS = @NSS_LIBS@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
@@ -933,6 +990,7 @@ SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@
SUPPORT_FEATURES = @SUPPORT_FEATURES@
SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_NGHTTPX = @TEST_NGHTTPX@
USE_ARES = @USE_ARES@
USE_BEARSSL = @USE_BEARSSL@
USE_GNUTLS = @USE_GNUTLS@
@@ -946,9 +1004,8 @@ USE_NGHTTP2 = @USE_NGHTTP2@
USE_NGHTTP3 = @USE_NGHTTP3@
USE_NGTCP2 = @USE_NGTCP2@
USE_NGTCP2_CRYPTO_GNUTLS = @USE_NGTCP2_CRYPTO_GNUTLS@
-USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@
+USE_NGTCP2_CRYPTO_QUICTLS = @USE_NGTCP2_CRYPTO_QUICTLS@
USE_NGTCP2_CRYPTO_WOLFSSL = @USE_NGTCP2_CRYPTO_WOLFSSL@
-USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_RUSTLS = @USE_RUSTLS@
@@ -1027,7 +1084,7 @@ top_srcdir = @top_srcdir@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -1045,10 +1102,11 @@ top_srcdir = @top_srcdir@
###########################################################################
AUTOMAKE_OPTIONS = foreign nostdinc
CMAKE_DIST = CMakeLists.txt curl_config.h.cmake
-EXTRA_DIST = Makefile.m32 config-win32.h config-win32ce.h config-plan9.h \
- config-riscos.h config-mac.h curl_config.h.in makefile.dj config-dos.h \
- libcurl.plist libcurl.rc config-amigaos.h makefile.amiga config-win32ce.h \
- config-os400.h setup-os400.h $(CMAKE_DIST) setup-win32.h .checksrc
+EXTRA_DIST = Makefile.mk config-win32.h config-win32ce.h config-plan9.h \
+ config-riscos.h config-mac.h curl_config.h.in config-dos.h \
+ libcurl.plist libcurl.rc config-amigaos.h config-win32ce.h \
+ config-os400.h setup-os400.h $(CMAKE_DIST) setup-win32.h .checksrc \
+ Makefile.soname
lib_LTLIBRARIES = libcurl.la
@BUILD_UNITTESTS_FALSE@noinst_LTLIBRARIES =
@@ -1062,21 +1120,14 @@ lib_LTLIBRARIES = libcurl.la
# $(top_srcdir)/include is for libcurl's external include files
# $(top_builddir)/lib is for libcurl's generated lib/curl_config.h file
# $(top_srcdir)/lib for libcurl's lib/curl_setup.h and other "private" files
-# This flag accepts an argument of the form current[:revision[:age]]. So,
-# passing -version-info 3:12:1 sets current to 3, revision to 12, and age to
-# 1.
-#
-# Here's the simplified rule guide on how to change -version-info:
-# (current version is C:R:A)
-#
-# 1. if there are only source changes, use C:R+1:A
-# 2. if interfaces were added use C+1:0:A+1
-# 3. if interfaces were removed, then use C+1:0:0
-#
-# For the full guide on libcurl ABI rules, see docs/libcurl/ABI
AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/lib \
-I$(top_srcdir)/lib -DBUILDING_LIBCURL
-VERSIONINFO = -version-info 12:0:8
+VERSIONCHANGE = 12
+VERSIONADD = 0
+VERSIONDEL = 8
+
+# libtool version:
+VERSIONINFO = -version-info $(VERSIONCHANGE):$(VERSIONADD):$(VERSIONDEL)
AM_LDFLAGS =
AM_CFLAGS =
LIB_VAUTH_CFILES = \
@@ -1101,13 +1152,11 @@ LIB_VAUTH_HFILES = \
LIB_VTLS_CFILES = \
vtls/bearssl.c \
- vtls/gskit.c \
vtls/gtls.c \
vtls/hostcheck.c \
vtls/keylog.c \
vtls/mbedtls.c \
vtls/mbedtls_threadlock.c \
- vtls/nss.c \
vtls/openssl.c \
vtls/rustls.c \
vtls/schannel.c \
@@ -1119,32 +1168,33 @@ LIB_VTLS_CFILES = \
LIB_VTLS_HFILES = \
vtls/bearssl.h \
- vtls/gskit.h \
vtls/gtls.h \
vtls/hostcheck.h \
vtls/keylog.h \
vtls/mbedtls.h \
vtls/mbedtls_threadlock.h \
- vtls/nssg.h \
vtls/openssl.h \
vtls/rustls.h \
vtls/schannel.h \
+ vtls/schannel_int.h \
vtls/sectransp.h \
vtls/vtls.h \
+ vtls/vtls_int.h \
vtls/wolfssl.h \
vtls/x509asn1.h
LIB_VQUIC_CFILES = \
- vquic/msh3.c \
- vquic/ngtcp2.c \
- vquic/quiche.c \
+ vquic/curl_msh3.c \
+ vquic/curl_ngtcp2.c \
+ vquic/curl_quiche.c \
vquic/vquic.c
LIB_VQUIC_HFILES = \
- vquic/msh3.h \
- vquic/ngtcp2.h \
- vquic/quiche.h \
- vquic/vquic.h
+ vquic/curl_msh3.h \
+ vquic/curl_ngtcp2.h \
+ vquic/curl_quiche.h \
+ vquic/vquic.h \
+ vquic/vquic_int.h
LIB_VSSH_CFILES = \
vssh/libssh.c \
@@ -1160,8 +1210,15 @@ LIB_CFILES = \
asyn-ares.c \
asyn-thread.c \
base64.c \
+ bufq.c \
bufref.c \
c-hyper.c \
+ cf-h1-proxy.c \
+ cf-h2-proxy.c \
+ cf-haproxy.c \
+ cf-https-connect.c \
+ cf-socket.c \
+ cfilters.c \
conncache.c \
connect.c \
content_encoding.c \
@@ -1183,9 +1240,11 @@ LIB_CFILES = \
curl_sasl.c \
curl_sspi.c \
curl_threads.c \
+ curl_trc.c \
dict.c \
doh.c \
dynbuf.c \
+ dynhds.c \
easy.c \
easygetopt.c \
easyoptions.c \
@@ -1199,7 +1258,6 @@ LIB_CFILES = \
getenv.c \
getinfo.c \
gopher.c \
- h2h3.c \
hash.c \
headers.c \
hmac.c \
@@ -1210,14 +1268,15 @@ LIB_CFILES = \
hostsyn.c \
hsts.c \
http.c \
+ http1.c \
http2.c \
+ http_aws_sigv4.c \
http_chunks.c \
http_digest.c \
http_negotiate.c \
http_ntlm.c \
http_proxy.c \
- http_aws_sigv4.c \
- idn_win32.c \
+ idn.c \
if2ip.c \
imap.c \
inet_ntop.c \
@@ -1225,6 +1284,7 @@ LIB_CFILES = \
krb5.c \
ldap.c \
llist.c \
+ macos.c \
md4.c \
md5.c \
memdebug.c \
@@ -1274,7 +1334,6 @@ LIB_CFILES = \
version.c \
version_win32.c \
warnless.c \
- wildcard.c \
ws.c
LIB_HFILES = \
@@ -1282,8 +1341,15 @@ LIB_HFILES = \
amigaos.h \
arpa_telnet.h \
asyn.h \
+ bufq.h \
bufref.h \
c-hyper.h \
+ cf-h1-proxy.h \
+ cf-h2-proxy.h \
+ cf-haproxy.h \
+ cf-https-connect.h \
+ cf-socket.h \
+ cfilters.h \
conncache.h \
connect.h \
content_encoding.h \
@@ -1317,10 +1383,12 @@ LIB_HFILES = \
curl_sha256.h \
curl_sspi.h \
curl_threads.h \
+ curl_trc.h \
curlx.h \
dict.h \
doh.h \
dynbuf.h \
+ dynhds.h \
easy_lock.h \
easyif.h \
easyoptions.h \
@@ -1329,29 +1397,31 @@ LIB_HFILES = \
fileinfo.h \
fopen.h \
formdata.h \
- functypes.h \
ftp.h \
ftplistparser.h \
+ functypes.h \
getinfo.h \
gopher.h \
- h2h3.h \
hash.h \
headers.h \
hostip.h \
hsts.h \
http.h \
+ http1.h \
http2.h \
+ http_aws_sigv4.h \
http_chunks.h \
http_digest.h \
http_negotiate.h \
http_ntlm.h \
http_proxy.h \
- http_aws_sigv4.h \
+ idn.h \
if2ip.h \
imap.h \
inet_ntop.h \
inet_pton.h \
llist.h \
+ macos.h \
memdebug.h \
mime.h \
mqtt.h \
@@ -1365,7 +1435,6 @@ LIB_HFILES = \
pop3.h \
progress.h \
psl.h \
- quic.h \
rand.h \
rename.h \
rtsp.h \
@@ -1399,7 +1468,6 @@ LIB_HFILES = \
urldata.h \
version_win32.h \
warnless.h \
- wildcard.h \
ws.h
LIB_RCFILES = libcurl.rc
@@ -1418,7 +1486,7 @@ libcurl_la_LDFLAGS_EXTRA = $(am__append_1) $(am__append_2) \
$(am__append_3) $(am__append_4) $(am__append_5)
libcurl_la_CFLAGS_EXTRA = $(am__append_9)
libcurl_la_CPPFLAGS = $(AM_CPPFLAGS) $(libcurl_la_CPPFLAGS_EXTRA)
-libcurl_la_LDFLAGS = $(AM_LDFLAGS) $(libcurl_la_LDFLAGS_EXTRA) $(LDFLAGS) $(LIBCURL_LIBS)
+libcurl_la_LDFLAGS = $(AM_LDFLAGS) $(libcurl_la_LDFLAGS_EXTRA) $(CURL_LDFLAGS_LIB) $(LIBCURL_LIBS)
libcurl_la_CFLAGS = $(AM_CFLAGS) $(libcurl_la_CFLAGS_EXTRA)
libcurlu_la_CPPFLAGS = $(AM_CPPFLAGS) -DCURL_STATICLIB -DUNITTESTS
libcurlu_la_LDFLAGS = $(AM_LDFLAGS) -static $(LIBCURL_LIBS)
@@ -1436,7 +1504,7 @@ all: curl_config.h
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj .rc
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Makefile.inc $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Makefile.soname $(srcdir)/Makefile.inc $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -1456,7 +1524,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
-$(srcdir)/Makefile.inc $(am__empty):
+$(srcdir)/Makefile.soname $(srcdir)/Makefile.inc $(am__empty):
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -1571,8 +1639,6 @@ vtls/$(DEPDIR)/$(am__dirstamp):
@: > vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurl_la-bearssl.lo: vtls/$(am__dirstamp) \
vtls/$(DEPDIR)/$(am__dirstamp)
-vtls/libcurl_la-gskit.lo: vtls/$(am__dirstamp) \
- vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurl_la-gtls.lo: vtls/$(am__dirstamp) \
vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurl_la-hostcheck.lo: vtls/$(am__dirstamp) \
@@ -1583,8 +1649,6 @@ vtls/libcurl_la-mbedtls.lo: vtls/$(am__dirstamp) \
vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurl_la-mbedtls_threadlock.lo: vtls/$(am__dirstamp) \
vtls/$(DEPDIR)/$(am__dirstamp)
-vtls/libcurl_la-nss.lo: vtls/$(am__dirstamp) \
- vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurl_la-openssl.lo: vtls/$(am__dirstamp) \
vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurl_la-rustls.lo: vtls/$(am__dirstamp) \
@@ -1607,11 +1671,11 @@ vquic/$(am__dirstamp):
vquic/$(DEPDIR)/$(am__dirstamp):
@$(MKDIR_P) vquic/$(DEPDIR)
@: > vquic/$(DEPDIR)/$(am__dirstamp)
-vquic/libcurl_la-msh3.lo: vquic/$(am__dirstamp) \
+vquic/libcurl_la-curl_msh3.lo: vquic/$(am__dirstamp) \
vquic/$(DEPDIR)/$(am__dirstamp)
-vquic/libcurl_la-ngtcp2.lo: vquic/$(am__dirstamp) \
+vquic/libcurl_la-curl_ngtcp2.lo: vquic/$(am__dirstamp) \
vquic/$(DEPDIR)/$(am__dirstamp)
-vquic/libcurl_la-quiche.lo: vquic/$(am__dirstamp) \
+vquic/libcurl_la-curl_quiche.lo: vquic/$(am__dirstamp) \
vquic/$(DEPDIR)/$(am__dirstamp)
vquic/libcurl_la-vquic.lo: vquic/$(am__dirstamp) \
vquic/$(DEPDIR)/$(am__dirstamp)
@@ -1658,8 +1722,6 @@ vauth/libcurlu_la-vauth.lo: vauth/$(am__dirstamp) \
vauth/$(DEPDIR)/$(am__dirstamp)
vtls/libcurlu_la-bearssl.lo: vtls/$(am__dirstamp) \
vtls/$(DEPDIR)/$(am__dirstamp)
-vtls/libcurlu_la-gskit.lo: vtls/$(am__dirstamp) \
- vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurlu_la-gtls.lo: vtls/$(am__dirstamp) \
vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurlu_la-hostcheck.lo: vtls/$(am__dirstamp) \
@@ -1670,8 +1732,6 @@ vtls/libcurlu_la-mbedtls.lo: vtls/$(am__dirstamp) \
vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurlu_la-mbedtls_threadlock.lo: vtls/$(am__dirstamp) \
vtls/$(DEPDIR)/$(am__dirstamp)
-vtls/libcurlu_la-nss.lo: vtls/$(am__dirstamp) \
- vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurlu_la-openssl.lo: vtls/$(am__dirstamp) \
vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurlu_la-rustls.lo: vtls/$(am__dirstamp) \
@@ -1688,11 +1748,11 @@ vtls/libcurlu_la-wolfssl.lo: vtls/$(am__dirstamp) \
vtls/$(DEPDIR)/$(am__dirstamp)
vtls/libcurlu_la-x509asn1.lo: vtls/$(am__dirstamp) \
vtls/$(DEPDIR)/$(am__dirstamp)
-vquic/libcurlu_la-msh3.lo: vquic/$(am__dirstamp) \
+vquic/libcurlu_la-curl_msh3.lo: vquic/$(am__dirstamp) \
vquic/$(DEPDIR)/$(am__dirstamp)
-vquic/libcurlu_la-ngtcp2.lo: vquic/$(am__dirstamp) \
+vquic/libcurlu_la-curl_ngtcp2.lo: vquic/$(am__dirstamp) \
vquic/$(DEPDIR)/$(am__dirstamp)
-vquic/libcurlu_la-quiche.lo: vquic/$(am__dirstamp) \
+vquic/libcurlu_la-curl_quiche.lo: vquic/$(am__dirstamp) \
vquic/$(DEPDIR)/$(am__dirstamp)
vquic/libcurlu_la-vquic.lo: vquic/$(am__dirstamp) \
vquic/$(DEPDIR)/$(am__dirstamp)
@@ -1725,8 +1785,15 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-asyn-ares.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-asyn-thread.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-base64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-bufq.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-bufref.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-c-hyper.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-cf-h1-proxy.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-cf-h2-proxy.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-cf-haproxy.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-cf-https-connect.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-cf-socket.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-cfilters.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-conncache.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-connect.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-content_encoding.Plo@am__quote@ # am--include-marker
@@ -1748,9 +1815,11 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_sasl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_sspi.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_threads.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_trc.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-dict.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-doh.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-dynbuf.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-dynhds.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-easy.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-easygetopt.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-easyoptions.Plo@am__quote@ # am--include-marker
@@ -1764,7 +1833,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-getenv.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-getinfo.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-gopher.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-h2h3.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-hash.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-headers.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-hmac.Plo@am__quote@ # am--include-marker
@@ -1775,6 +1843,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-hostsyn.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-hsts.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-http.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-http1.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-http2.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-http_aws_sigv4.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-http_chunks.Plo@am__quote@ # am--include-marker
@@ -1782,7 +1851,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-http_negotiate.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-http_ntlm.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-http_proxy.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-idn_win32.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-idn.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-if2ip.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-imap.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-inet_ntop.Plo@am__quote@ # am--include-marker
@@ -1790,6 +1859,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-krb5.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-ldap.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-llist.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-macos.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-md4.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-md5.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-memdebug.Plo@am__quote@ # am--include-marker
@@ -1839,15 +1909,21 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-version.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-version_win32.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-warnless.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-wildcard.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-ws.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-altsvc.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-amigaos.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-asyn-ares.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-asyn-thread.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-base64.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-bufq.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-bufref.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-c-hyper.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-cf-h1-proxy.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-cf-h2-proxy.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-cf-haproxy.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-cf-https-connect.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-cf-socket.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-cfilters.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-conncache.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-connect.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-content_encoding.Plo@am__quote@ # am--include-marker
@@ -1869,9 +1945,11 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_sasl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_sspi.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_threads.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_trc.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-dict.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-doh.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-dynbuf.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-dynhds.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-easy.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-easygetopt.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-easyoptions.Plo@am__quote@ # am--include-marker
@@ -1885,7 +1963,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-getenv.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-getinfo.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-gopher.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-h2h3.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-hash.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-headers.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-hmac.Plo@am__quote@ # am--include-marker
@@ -1896,6 +1973,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-hostsyn.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-hsts.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-http.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-http1.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-http2.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-http_aws_sigv4.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-http_chunks.Plo@am__quote@ # am--include-marker
@@ -1903,7 +1981,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-http_negotiate.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-http_ntlm.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-http_proxy.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-idn_win32.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-idn.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-if2ip.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-imap.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-inet_ntop.Plo@am__quote@ # am--include-marker
@@ -1911,6 +1989,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-krb5.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-ldap.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-llist.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-macos.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-md4.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-md5.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-memdebug.Plo@am__quote@ # am--include-marker
@@ -1960,7 +2039,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-version.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-version_win32.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-warnless.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-wildcard.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-ws.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vauth/$(DEPDIR)/libcurl_la-cleartext.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vauth/$(DEPDIR)/libcurl_la-cram.Plo@am__quote@ # am--include-marker
@@ -1988,13 +2066,13 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@vauth/$(DEPDIR)/libcurlu_la-spnego_gssapi.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vauth/$(DEPDIR)/libcurlu_la-spnego_sspi.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vauth/$(DEPDIR)/libcurlu_la-vauth.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurl_la-msh3.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurl_la-ngtcp2.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurl_la-quiche.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurl_la-curl_msh3.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurl_la-curl_ngtcp2.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurl_la-curl_quiche.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurl_la-vquic.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurlu_la-msh3.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurlu_la-ngtcp2.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurlu_la-quiche.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurlu_la-curl_msh3.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurlu_la-curl_ngtcp2.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurlu_la-curl_quiche.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vquic/$(DEPDIR)/libcurlu_la-vquic.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vssh/$(DEPDIR)/libcurl_la-libssh.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vssh/$(DEPDIR)/libcurl_la-libssh2.Plo@am__quote@ # am--include-marker
@@ -2003,13 +2081,11 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@vssh/$(DEPDIR)/libcurlu_la-libssh2.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vssh/$(DEPDIR)/libcurlu_la-wolfssh.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-bearssl.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-gskit.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-gtls.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-hostcheck.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-keylog.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-mbedtls.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-mbedtls_threadlock.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-nss.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-openssl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-rustls.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-schannel.Plo@am__quote@ # am--include-marker
@@ -2019,13 +2095,11 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-wolfssl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-x509asn1.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-bearssl.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-gskit.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-gtls.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-hostcheck.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-keylog.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-mbedtls.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-mbedtls_threadlock.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-nss.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-openssl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-rustls.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-schannel.Plo@am__quote@ # am--include-marker
@@ -2100,6 +2174,13 @@ libcurl_la-base64.lo: base64.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-base64.lo `test -f 'base64.c' || echo '$(srcdir)/'`base64.c
+libcurl_la-bufq.lo: bufq.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-bufq.lo -MD -MP -MF $(DEPDIR)/libcurl_la-bufq.Tpo -c -o libcurl_la-bufq.lo `test -f 'bufq.c' || echo '$(srcdir)/'`bufq.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-bufq.Tpo $(DEPDIR)/libcurl_la-bufq.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bufq.c' object='libcurl_la-bufq.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-bufq.lo `test -f 'bufq.c' || echo '$(srcdir)/'`bufq.c
+
libcurl_la-bufref.lo: bufref.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-bufref.lo -MD -MP -MF $(DEPDIR)/libcurl_la-bufref.Tpo -c -o libcurl_la-bufref.lo `test -f 'bufref.c' || echo '$(srcdir)/'`bufref.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-bufref.Tpo $(DEPDIR)/libcurl_la-bufref.Plo
@@ -2114,6 +2195,48 @@ libcurl_la-c-hyper.lo: c-hyper.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-c-hyper.lo `test -f 'c-hyper.c' || echo '$(srcdir)/'`c-hyper.c
+libcurl_la-cf-h1-proxy.lo: cf-h1-proxy.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-cf-h1-proxy.lo -MD -MP -MF $(DEPDIR)/libcurl_la-cf-h1-proxy.Tpo -c -o libcurl_la-cf-h1-proxy.lo `test -f 'cf-h1-proxy.c' || echo '$(srcdir)/'`cf-h1-proxy.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-cf-h1-proxy.Tpo $(DEPDIR)/libcurl_la-cf-h1-proxy.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cf-h1-proxy.c' object='libcurl_la-cf-h1-proxy.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-cf-h1-proxy.lo `test -f 'cf-h1-proxy.c' || echo '$(srcdir)/'`cf-h1-proxy.c
+
+libcurl_la-cf-h2-proxy.lo: cf-h2-proxy.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-cf-h2-proxy.lo -MD -MP -MF $(DEPDIR)/libcurl_la-cf-h2-proxy.Tpo -c -o libcurl_la-cf-h2-proxy.lo `test -f 'cf-h2-proxy.c' || echo '$(srcdir)/'`cf-h2-proxy.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-cf-h2-proxy.Tpo $(DEPDIR)/libcurl_la-cf-h2-proxy.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cf-h2-proxy.c' object='libcurl_la-cf-h2-proxy.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-cf-h2-proxy.lo `test -f 'cf-h2-proxy.c' || echo '$(srcdir)/'`cf-h2-proxy.c
+
+libcurl_la-cf-haproxy.lo: cf-haproxy.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-cf-haproxy.lo -MD -MP -MF $(DEPDIR)/libcurl_la-cf-haproxy.Tpo -c -o libcurl_la-cf-haproxy.lo `test -f 'cf-haproxy.c' || echo '$(srcdir)/'`cf-haproxy.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-cf-haproxy.Tpo $(DEPDIR)/libcurl_la-cf-haproxy.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cf-haproxy.c' object='libcurl_la-cf-haproxy.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-cf-haproxy.lo `test -f 'cf-haproxy.c' || echo '$(srcdir)/'`cf-haproxy.c
+
+libcurl_la-cf-https-connect.lo: cf-https-connect.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-cf-https-connect.lo -MD -MP -MF $(DEPDIR)/libcurl_la-cf-https-connect.Tpo -c -o libcurl_la-cf-https-connect.lo `test -f 'cf-https-connect.c' || echo '$(srcdir)/'`cf-https-connect.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-cf-https-connect.Tpo $(DEPDIR)/libcurl_la-cf-https-connect.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cf-https-connect.c' object='libcurl_la-cf-https-connect.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-cf-https-connect.lo `test -f 'cf-https-connect.c' || echo '$(srcdir)/'`cf-https-connect.c
+
+libcurl_la-cf-socket.lo: cf-socket.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-cf-socket.lo -MD -MP -MF $(DEPDIR)/libcurl_la-cf-socket.Tpo -c -o libcurl_la-cf-socket.lo `test -f 'cf-socket.c' || echo '$(srcdir)/'`cf-socket.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-cf-socket.Tpo $(DEPDIR)/libcurl_la-cf-socket.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cf-socket.c' object='libcurl_la-cf-socket.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-cf-socket.lo `test -f 'cf-socket.c' || echo '$(srcdir)/'`cf-socket.c
+
+libcurl_la-cfilters.lo: cfilters.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-cfilters.lo -MD -MP -MF $(DEPDIR)/libcurl_la-cfilters.Tpo -c -o libcurl_la-cfilters.lo `test -f 'cfilters.c' || echo '$(srcdir)/'`cfilters.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-cfilters.Tpo $(DEPDIR)/libcurl_la-cfilters.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cfilters.c' object='libcurl_la-cfilters.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-cfilters.lo `test -f 'cfilters.c' || echo '$(srcdir)/'`cfilters.c
+
libcurl_la-conncache.lo: conncache.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-conncache.lo -MD -MP -MF $(DEPDIR)/libcurl_la-conncache.Tpo -c -o libcurl_la-conncache.lo `test -f 'conncache.c' || echo '$(srcdir)/'`conncache.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-conncache.Tpo $(DEPDIR)/libcurl_la-conncache.Plo
@@ -2261,6 +2384,13 @@ libcurl_la-curl_threads.lo: curl_threads.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-curl_threads.lo `test -f 'curl_threads.c' || echo '$(srcdir)/'`curl_threads.c
+libcurl_la-curl_trc.lo: curl_trc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-curl_trc.lo -MD -MP -MF $(DEPDIR)/libcurl_la-curl_trc.Tpo -c -o libcurl_la-curl_trc.lo `test -f 'curl_trc.c' || echo '$(srcdir)/'`curl_trc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-curl_trc.Tpo $(DEPDIR)/libcurl_la-curl_trc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='curl_trc.c' object='libcurl_la-curl_trc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-curl_trc.lo `test -f 'curl_trc.c' || echo '$(srcdir)/'`curl_trc.c
+
libcurl_la-dict.lo: dict.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-dict.lo -MD -MP -MF $(DEPDIR)/libcurl_la-dict.Tpo -c -o libcurl_la-dict.lo `test -f 'dict.c' || echo '$(srcdir)/'`dict.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-dict.Tpo $(DEPDIR)/libcurl_la-dict.Plo
@@ -2282,6 +2412,13 @@ libcurl_la-dynbuf.lo: dynbuf.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-dynbuf.lo `test -f 'dynbuf.c' || echo '$(srcdir)/'`dynbuf.c
+libcurl_la-dynhds.lo: dynhds.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-dynhds.lo -MD -MP -MF $(DEPDIR)/libcurl_la-dynhds.Tpo -c -o libcurl_la-dynhds.lo `test -f 'dynhds.c' || echo '$(srcdir)/'`dynhds.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-dynhds.Tpo $(DEPDIR)/libcurl_la-dynhds.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dynhds.c' object='libcurl_la-dynhds.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-dynhds.lo `test -f 'dynhds.c' || echo '$(srcdir)/'`dynhds.c
+
libcurl_la-easy.lo: easy.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-easy.lo -MD -MP -MF $(DEPDIR)/libcurl_la-easy.Tpo -c -o libcurl_la-easy.lo `test -f 'easy.c' || echo '$(srcdir)/'`easy.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-easy.Tpo $(DEPDIR)/libcurl_la-easy.Plo
@@ -2373,13 +2510,6 @@ libcurl_la-gopher.lo: gopher.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-gopher.lo `test -f 'gopher.c' || echo '$(srcdir)/'`gopher.c
-libcurl_la-h2h3.lo: h2h3.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-h2h3.lo -MD -MP -MF $(DEPDIR)/libcurl_la-h2h3.Tpo -c -o libcurl_la-h2h3.lo `test -f 'h2h3.c' || echo '$(srcdir)/'`h2h3.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-h2h3.Tpo $(DEPDIR)/libcurl_la-h2h3.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='h2h3.c' object='libcurl_la-h2h3.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-h2h3.lo `test -f 'h2h3.c' || echo '$(srcdir)/'`h2h3.c
-
libcurl_la-hash.lo: hash.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-hash.lo -MD -MP -MF $(DEPDIR)/libcurl_la-hash.Tpo -c -o libcurl_la-hash.lo `test -f 'hash.c' || echo '$(srcdir)/'`hash.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-hash.Tpo $(DEPDIR)/libcurl_la-hash.Plo
@@ -2450,6 +2580,13 @@ libcurl_la-http.lo: http.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-http.lo `test -f 'http.c' || echo '$(srcdir)/'`http.c
+libcurl_la-http1.lo: http1.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-http1.lo -MD -MP -MF $(DEPDIR)/libcurl_la-http1.Tpo -c -o libcurl_la-http1.lo `test -f 'http1.c' || echo '$(srcdir)/'`http1.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-http1.Tpo $(DEPDIR)/libcurl_la-http1.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='http1.c' object='libcurl_la-http1.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-http1.lo `test -f 'http1.c' || echo '$(srcdir)/'`http1.c
+
libcurl_la-http2.lo: http2.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-http2.lo -MD -MP -MF $(DEPDIR)/libcurl_la-http2.Tpo -c -o libcurl_la-http2.lo `test -f 'http2.c' || echo '$(srcdir)/'`http2.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-http2.Tpo $(DEPDIR)/libcurl_la-http2.Plo
@@ -2457,6 +2594,13 @@ libcurl_la-http2.lo: http2.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-http2.lo `test -f 'http2.c' || echo '$(srcdir)/'`http2.c
+libcurl_la-http_aws_sigv4.lo: http_aws_sigv4.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-http_aws_sigv4.lo -MD -MP -MF $(DEPDIR)/libcurl_la-http_aws_sigv4.Tpo -c -o libcurl_la-http_aws_sigv4.lo `test -f 'http_aws_sigv4.c' || echo '$(srcdir)/'`http_aws_sigv4.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-http_aws_sigv4.Tpo $(DEPDIR)/libcurl_la-http_aws_sigv4.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='http_aws_sigv4.c' object='libcurl_la-http_aws_sigv4.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-http_aws_sigv4.lo `test -f 'http_aws_sigv4.c' || echo '$(srcdir)/'`http_aws_sigv4.c
+
libcurl_la-http_chunks.lo: http_chunks.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-http_chunks.lo -MD -MP -MF $(DEPDIR)/libcurl_la-http_chunks.Tpo -c -o libcurl_la-http_chunks.lo `test -f 'http_chunks.c' || echo '$(srcdir)/'`http_chunks.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-http_chunks.Tpo $(DEPDIR)/libcurl_la-http_chunks.Plo
@@ -2492,19 +2636,12 @@ libcurl_la-http_proxy.lo: http_proxy.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-http_proxy.lo `test -f 'http_proxy.c' || echo '$(srcdir)/'`http_proxy.c
-libcurl_la-http_aws_sigv4.lo: http_aws_sigv4.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-http_aws_sigv4.lo -MD -MP -MF $(DEPDIR)/libcurl_la-http_aws_sigv4.Tpo -c -o libcurl_la-http_aws_sigv4.lo `test -f 'http_aws_sigv4.c' || echo '$(srcdir)/'`http_aws_sigv4.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-http_aws_sigv4.Tpo $(DEPDIR)/libcurl_la-http_aws_sigv4.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='http_aws_sigv4.c' object='libcurl_la-http_aws_sigv4.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-http_aws_sigv4.lo `test -f 'http_aws_sigv4.c' || echo '$(srcdir)/'`http_aws_sigv4.c
-
-libcurl_la-idn_win32.lo: idn_win32.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-idn_win32.lo -MD -MP -MF $(DEPDIR)/libcurl_la-idn_win32.Tpo -c -o libcurl_la-idn_win32.lo `test -f 'idn_win32.c' || echo '$(srcdir)/'`idn_win32.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-idn_win32.Tpo $(DEPDIR)/libcurl_la-idn_win32.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='idn_win32.c' object='libcurl_la-idn_win32.lo' libtool=yes @AMDEPBACKSLASH@
+libcurl_la-idn.lo: idn.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-idn.lo -MD -MP -MF $(DEPDIR)/libcurl_la-idn.Tpo -c -o libcurl_la-idn.lo `test -f 'idn.c' || echo '$(srcdir)/'`idn.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-idn.Tpo $(DEPDIR)/libcurl_la-idn.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='idn.c' object='libcurl_la-idn.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-idn_win32.lo `test -f 'idn_win32.c' || echo '$(srcdir)/'`idn_win32.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-idn.lo `test -f 'idn.c' || echo '$(srcdir)/'`idn.c
libcurl_la-if2ip.lo: if2ip.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-if2ip.lo -MD -MP -MF $(DEPDIR)/libcurl_la-if2ip.Tpo -c -o libcurl_la-if2ip.lo `test -f 'if2ip.c' || echo '$(srcdir)/'`if2ip.c
@@ -2555,6 +2692,13 @@ libcurl_la-llist.lo: llist.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-llist.lo `test -f 'llist.c' || echo '$(srcdir)/'`llist.c
+libcurl_la-macos.lo: macos.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-macos.lo -MD -MP -MF $(DEPDIR)/libcurl_la-macos.Tpo -c -o libcurl_la-macos.lo `test -f 'macos.c' || echo '$(srcdir)/'`macos.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-macos.Tpo $(DEPDIR)/libcurl_la-macos.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='macos.c' object='libcurl_la-macos.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-macos.lo `test -f 'macos.c' || echo '$(srcdir)/'`macos.c
+
libcurl_la-md4.lo: md4.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-md4.lo -MD -MP -MF $(DEPDIR)/libcurl_la-md4.Tpo -c -o libcurl_la-md4.lo `test -f 'md4.c' || echo '$(srcdir)/'`md4.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-md4.Tpo $(DEPDIR)/libcurl_la-md4.Plo
@@ -2898,13 +3042,6 @@ libcurl_la-warnless.lo: warnless.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-warnless.lo `test -f 'warnless.c' || echo '$(srcdir)/'`warnless.c
-libcurl_la-wildcard.lo: wildcard.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-wildcard.lo -MD -MP -MF $(DEPDIR)/libcurl_la-wildcard.Tpo -c -o libcurl_la-wildcard.lo `test -f 'wildcard.c' || echo '$(srcdir)/'`wildcard.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-wildcard.Tpo $(DEPDIR)/libcurl_la-wildcard.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wildcard.c' object='libcurl_la-wildcard.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-wildcard.lo `test -f 'wildcard.c' || echo '$(srcdir)/'`wildcard.c
-
libcurl_la-ws.lo: ws.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-ws.lo -MD -MP -MF $(DEPDIR)/libcurl_la-ws.Tpo -c -o libcurl_la-ws.lo `test -f 'ws.c' || echo '$(srcdir)/'`ws.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-ws.Tpo $(DEPDIR)/libcurl_la-ws.Plo
@@ -3010,13 +3147,6 @@ vtls/libcurl_la-bearssl.lo: vtls/bearssl.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurl_la-bearssl.lo `test -f 'vtls/bearssl.c' || echo '$(srcdir)/'`vtls/bearssl.c
-vtls/libcurl_la-gskit.lo: vtls/gskit.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vtls/libcurl_la-gskit.lo -MD -MP -MF vtls/$(DEPDIR)/libcurl_la-gskit.Tpo -c -o vtls/libcurl_la-gskit.lo `test -f 'vtls/gskit.c' || echo '$(srcdir)/'`vtls/gskit.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurl_la-gskit.Tpo vtls/$(DEPDIR)/libcurl_la-gskit.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vtls/gskit.c' object='vtls/libcurl_la-gskit.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurl_la-gskit.lo `test -f 'vtls/gskit.c' || echo '$(srcdir)/'`vtls/gskit.c
-
vtls/libcurl_la-gtls.lo: vtls/gtls.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vtls/libcurl_la-gtls.lo -MD -MP -MF vtls/$(DEPDIR)/libcurl_la-gtls.Tpo -c -o vtls/libcurl_la-gtls.lo `test -f 'vtls/gtls.c' || echo '$(srcdir)/'`vtls/gtls.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurl_la-gtls.Tpo vtls/$(DEPDIR)/libcurl_la-gtls.Plo
@@ -3052,13 +3182,6 @@ vtls/libcurl_la-mbedtls_threadlock.lo: vtls/mbedtls_threadlock.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurl_la-mbedtls_threadlock.lo `test -f 'vtls/mbedtls_threadlock.c' || echo '$(srcdir)/'`vtls/mbedtls_threadlock.c
-vtls/libcurl_la-nss.lo: vtls/nss.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vtls/libcurl_la-nss.lo -MD -MP -MF vtls/$(DEPDIR)/libcurl_la-nss.Tpo -c -o vtls/libcurl_la-nss.lo `test -f 'vtls/nss.c' || echo '$(srcdir)/'`vtls/nss.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurl_la-nss.Tpo vtls/$(DEPDIR)/libcurl_la-nss.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vtls/nss.c' object='vtls/libcurl_la-nss.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurl_la-nss.lo `test -f 'vtls/nss.c' || echo '$(srcdir)/'`vtls/nss.c
-
vtls/libcurl_la-openssl.lo: vtls/openssl.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vtls/libcurl_la-openssl.lo -MD -MP -MF vtls/$(DEPDIR)/libcurl_la-openssl.Tpo -c -o vtls/libcurl_la-openssl.lo `test -f 'vtls/openssl.c' || echo '$(srcdir)/'`vtls/openssl.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurl_la-openssl.Tpo vtls/$(DEPDIR)/libcurl_la-openssl.Plo
@@ -3115,26 +3238,26 @@ vtls/libcurl_la-x509asn1.lo: vtls/x509asn1.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurl_la-x509asn1.lo `test -f 'vtls/x509asn1.c' || echo '$(srcdir)/'`vtls/x509asn1.c
-vquic/libcurl_la-msh3.lo: vquic/msh3.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vquic/libcurl_la-msh3.lo -MD -MP -MF vquic/$(DEPDIR)/libcurl_la-msh3.Tpo -c -o vquic/libcurl_la-msh3.lo `test -f 'vquic/msh3.c' || echo '$(srcdir)/'`vquic/msh3.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vquic/$(DEPDIR)/libcurl_la-msh3.Tpo vquic/$(DEPDIR)/libcurl_la-msh3.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vquic/msh3.c' object='vquic/libcurl_la-msh3.lo' libtool=yes @AMDEPBACKSLASH@
+vquic/libcurl_la-curl_msh3.lo: vquic/curl_msh3.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vquic/libcurl_la-curl_msh3.lo -MD -MP -MF vquic/$(DEPDIR)/libcurl_la-curl_msh3.Tpo -c -o vquic/libcurl_la-curl_msh3.lo `test -f 'vquic/curl_msh3.c' || echo '$(srcdir)/'`vquic/curl_msh3.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vquic/$(DEPDIR)/libcurl_la-curl_msh3.Tpo vquic/$(DEPDIR)/libcurl_la-curl_msh3.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vquic/curl_msh3.c' object='vquic/libcurl_la-curl_msh3.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vquic/libcurl_la-msh3.lo `test -f 'vquic/msh3.c' || echo '$(srcdir)/'`vquic/msh3.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vquic/libcurl_la-curl_msh3.lo `test -f 'vquic/curl_msh3.c' || echo '$(srcdir)/'`vquic/curl_msh3.c
-vquic/libcurl_la-ngtcp2.lo: vquic/ngtcp2.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vquic/libcurl_la-ngtcp2.lo -MD -MP -MF vquic/$(DEPDIR)/libcurl_la-ngtcp2.Tpo -c -o vquic/libcurl_la-ngtcp2.lo `test -f 'vquic/ngtcp2.c' || echo '$(srcdir)/'`vquic/ngtcp2.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vquic/$(DEPDIR)/libcurl_la-ngtcp2.Tpo vquic/$(DEPDIR)/libcurl_la-ngtcp2.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vquic/ngtcp2.c' object='vquic/libcurl_la-ngtcp2.lo' libtool=yes @AMDEPBACKSLASH@
+vquic/libcurl_la-curl_ngtcp2.lo: vquic/curl_ngtcp2.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vquic/libcurl_la-curl_ngtcp2.lo -MD -MP -MF vquic/$(DEPDIR)/libcurl_la-curl_ngtcp2.Tpo -c -o vquic/libcurl_la-curl_ngtcp2.lo `test -f 'vquic/curl_ngtcp2.c' || echo '$(srcdir)/'`vquic/curl_ngtcp2.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vquic/$(DEPDIR)/libcurl_la-curl_ngtcp2.Tpo vquic/$(DEPDIR)/libcurl_la-curl_ngtcp2.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vquic/curl_ngtcp2.c' object='vquic/libcurl_la-curl_ngtcp2.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vquic/libcurl_la-ngtcp2.lo `test -f 'vquic/ngtcp2.c' || echo '$(srcdir)/'`vquic/ngtcp2.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vquic/libcurl_la-curl_ngtcp2.lo `test -f 'vquic/curl_ngtcp2.c' || echo '$(srcdir)/'`vquic/curl_ngtcp2.c
-vquic/libcurl_la-quiche.lo: vquic/quiche.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vquic/libcurl_la-quiche.lo -MD -MP -MF vquic/$(DEPDIR)/libcurl_la-quiche.Tpo -c -o vquic/libcurl_la-quiche.lo `test -f 'vquic/quiche.c' || echo '$(srcdir)/'`vquic/quiche.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vquic/$(DEPDIR)/libcurl_la-quiche.Tpo vquic/$(DEPDIR)/libcurl_la-quiche.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vquic/quiche.c' object='vquic/libcurl_la-quiche.lo' libtool=yes @AMDEPBACKSLASH@
+vquic/libcurl_la-curl_quiche.lo: vquic/curl_quiche.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vquic/libcurl_la-curl_quiche.lo -MD -MP -MF vquic/$(DEPDIR)/libcurl_la-curl_quiche.Tpo -c -o vquic/libcurl_la-curl_quiche.lo `test -f 'vquic/curl_quiche.c' || echo '$(srcdir)/'`vquic/curl_quiche.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vquic/$(DEPDIR)/libcurl_la-curl_quiche.Tpo vquic/$(DEPDIR)/libcurl_la-curl_quiche.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vquic/curl_quiche.c' object='vquic/libcurl_la-curl_quiche.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vquic/libcurl_la-quiche.lo `test -f 'vquic/quiche.c' || echo '$(srcdir)/'`vquic/quiche.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vquic/libcurl_la-curl_quiche.lo `test -f 'vquic/curl_quiche.c' || echo '$(srcdir)/'`vquic/curl_quiche.c
vquic/libcurl_la-vquic.lo: vquic/vquic.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vquic/libcurl_la-vquic.lo -MD -MP -MF vquic/$(DEPDIR)/libcurl_la-vquic.Tpo -c -o vquic/libcurl_la-vquic.lo `test -f 'vquic/vquic.c' || echo '$(srcdir)/'`vquic/vquic.c
@@ -3199,6 +3322,13 @@ libcurlu_la-base64.lo: base64.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-base64.lo `test -f 'base64.c' || echo '$(srcdir)/'`base64.c
+libcurlu_la-bufq.lo: bufq.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-bufq.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-bufq.Tpo -c -o libcurlu_la-bufq.lo `test -f 'bufq.c' || echo '$(srcdir)/'`bufq.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-bufq.Tpo $(DEPDIR)/libcurlu_la-bufq.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bufq.c' object='libcurlu_la-bufq.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-bufq.lo `test -f 'bufq.c' || echo '$(srcdir)/'`bufq.c
+
libcurlu_la-bufref.lo: bufref.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-bufref.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-bufref.Tpo -c -o libcurlu_la-bufref.lo `test -f 'bufref.c' || echo '$(srcdir)/'`bufref.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-bufref.Tpo $(DEPDIR)/libcurlu_la-bufref.Plo
@@ -3213,6 +3343,48 @@ libcurlu_la-c-hyper.lo: c-hyper.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-c-hyper.lo `test -f 'c-hyper.c' || echo '$(srcdir)/'`c-hyper.c
+libcurlu_la-cf-h1-proxy.lo: cf-h1-proxy.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-cf-h1-proxy.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-cf-h1-proxy.Tpo -c -o libcurlu_la-cf-h1-proxy.lo `test -f 'cf-h1-proxy.c' || echo '$(srcdir)/'`cf-h1-proxy.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-cf-h1-proxy.Tpo $(DEPDIR)/libcurlu_la-cf-h1-proxy.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cf-h1-proxy.c' object='libcurlu_la-cf-h1-proxy.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-cf-h1-proxy.lo `test -f 'cf-h1-proxy.c' || echo '$(srcdir)/'`cf-h1-proxy.c
+
+libcurlu_la-cf-h2-proxy.lo: cf-h2-proxy.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-cf-h2-proxy.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-cf-h2-proxy.Tpo -c -o libcurlu_la-cf-h2-proxy.lo `test -f 'cf-h2-proxy.c' || echo '$(srcdir)/'`cf-h2-proxy.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-cf-h2-proxy.Tpo $(DEPDIR)/libcurlu_la-cf-h2-proxy.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cf-h2-proxy.c' object='libcurlu_la-cf-h2-proxy.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-cf-h2-proxy.lo `test -f 'cf-h2-proxy.c' || echo '$(srcdir)/'`cf-h2-proxy.c
+
+libcurlu_la-cf-haproxy.lo: cf-haproxy.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-cf-haproxy.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-cf-haproxy.Tpo -c -o libcurlu_la-cf-haproxy.lo `test -f 'cf-haproxy.c' || echo '$(srcdir)/'`cf-haproxy.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-cf-haproxy.Tpo $(DEPDIR)/libcurlu_la-cf-haproxy.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cf-haproxy.c' object='libcurlu_la-cf-haproxy.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-cf-haproxy.lo `test -f 'cf-haproxy.c' || echo '$(srcdir)/'`cf-haproxy.c
+
+libcurlu_la-cf-https-connect.lo: cf-https-connect.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-cf-https-connect.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-cf-https-connect.Tpo -c -o libcurlu_la-cf-https-connect.lo `test -f 'cf-https-connect.c' || echo '$(srcdir)/'`cf-https-connect.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-cf-https-connect.Tpo $(DEPDIR)/libcurlu_la-cf-https-connect.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cf-https-connect.c' object='libcurlu_la-cf-https-connect.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-cf-https-connect.lo `test -f 'cf-https-connect.c' || echo '$(srcdir)/'`cf-https-connect.c
+
+libcurlu_la-cf-socket.lo: cf-socket.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-cf-socket.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-cf-socket.Tpo -c -o libcurlu_la-cf-socket.lo `test -f 'cf-socket.c' || echo '$(srcdir)/'`cf-socket.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-cf-socket.Tpo $(DEPDIR)/libcurlu_la-cf-socket.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cf-socket.c' object='libcurlu_la-cf-socket.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-cf-socket.lo `test -f 'cf-socket.c' || echo '$(srcdir)/'`cf-socket.c
+
+libcurlu_la-cfilters.lo: cfilters.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-cfilters.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-cfilters.Tpo -c -o libcurlu_la-cfilters.lo `test -f 'cfilters.c' || echo '$(srcdir)/'`cfilters.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-cfilters.Tpo $(DEPDIR)/libcurlu_la-cfilters.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cfilters.c' object='libcurlu_la-cfilters.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-cfilters.lo `test -f 'cfilters.c' || echo '$(srcdir)/'`cfilters.c
+
libcurlu_la-conncache.lo: conncache.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-conncache.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-conncache.Tpo -c -o libcurlu_la-conncache.lo `test -f 'conncache.c' || echo '$(srcdir)/'`conncache.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-conncache.Tpo $(DEPDIR)/libcurlu_la-conncache.Plo
@@ -3360,6 +3532,13 @@ libcurlu_la-curl_threads.lo: curl_threads.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-curl_threads.lo `test -f 'curl_threads.c' || echo '$(srcdir)/'`curl_threads.c
+libcurlu_la-curl_trc.lo: curl_trc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-curl_trc.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-curl_trc.Tpo -c -o libcurlu_la-curl_trc.lo `test -f 'curl_trc.c' || echo '$(srcdir)/'`curl_trc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-curl_trc.Tpo $(DEPDIR)/libcurlu_la-curl_trc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='curl_trc.c' object='libcurlu_la-curl_trc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-curl_trc.lo `test -f 'curl_trc.c' || echo '$(srcdir)/'`curl_trc.c
+
libcurlu_la-dict.lo: dict.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-dict.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-dict.Tpo -c -o libcurlu_la-dict.lo `test -f 'dict.c' || echo '$(srcdir)/'`dict.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-dict.Tpo $(DEPDIR)/libcurlu_la-dict.Plo
@@ -3381,6 +3560,13 @@ libcurlu_la-dynbuf.lo: dynbuf.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-dynbuf.lo `test -f 'dynbuf.c' || echo '$(srcdir)/'`dynbuf.c
+libcurlu_la-dynhds.lo: dynhds.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-dynhds.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-dynhds.Tpo -c -o libcurlu_la-dynhds.lo `test -f 'dynhds.c' || echo '$(srcdir)/'`dynhds.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-dynhds.Tpo $(DEPDIR)/libcurlu_la-dynhds.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dynhds.c' object='libcurlu_la-dynhds.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-dynhds.lo `test -f 'dynhds.c' || echo '$(srcdir)/'`dynhds.c
+
libcurlu_la-easy.lo: easy.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-easy.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-easy.Tpo -c -o libcurlu_la-easy.lo `test -f 'easy.c' || echo '$(srcdir)/'`easy.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-easy.Tpo $(DEPDIR)/libcurlu_la-easy.Plo
@@ -3472,13 +3658,6 @@ libcurlu_la-gopher.lo: gopher.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-gopher.lo `test -f 'gopher.c' || echo '$(srcdir)/'`gopher.c
-libcurlu_la-h2h3.lo: h2h3.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-h2h3.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-h2h3.Tpo -c -o libcurlu_la-h2h3.lo `test -f 'h2h3.c' || echo '$(srcdir)/'`h2h3.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-h2h3.Tpo $(DEPDIR)/libcurlu_la-h2h3.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='h2h3.c' object='libcurlu_la-h2h3.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-h2h3.lo `test -f 'h2h3.c' || echo '$(srcdir)/'`h2h3.c
-
libcurlu_la-hash.lo: hash.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-hash.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-hash.Tpo -c -o libcurlu_la-hash.lo `test -f 'hash.c' || echo '$(srcdir)/'`hash.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-hash.Tpo $(DEPDIR)/libcurlu_la-hash.Plo
@@ -3549,6 +3728,13 @@ libcurlu_la-http.lo: http.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-http.lo `test -f 'http.c' || echo '$(srcdir)/'`http.c
+libcurlu_la-http1.lo: http1.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-http1.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-http1.Tpo -c -o libcurlu_la-http1.lo `test -f 'http1.c' || echo '$(srcdir)/'`http1.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-http1.Tpo $(DEPDIR)/libcurlu_la-http1.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='http1.c' object='libcurlu_la-http1.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-http1.lo `test -f 'http1.c' || echo '$(srcdir)/'`http1.c
+
libcurlu_la-http2.lo: http2.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-http2.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-http2.Tpo -c -o libcurlu_la-http2.lo `test -f 'http2.c' || echo '$(srcdir)/'`http2.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-http2.Tpo $(DEPDIR)/libcurlu_la-http2.Plo
@@ -3556,6 +3742,13 @@ libcurlu_la-http2.lo: http2.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-http2.lo `test -f 'http2.c' || echo '$(srcdir)/'`http2.c
+libcurlu_la-http_aws_sigv4.lo: http_aws_sigv4.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-http_aws_sigv4.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-http_aws_sigv4.Tpo -c -o libcurlu_la-http_aws_sigv4.lo `test -f 'http_aws_sigv4.c' || echo '$(srcdir)/'`http_aws_sigv4.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-http_aws_sigv4.Tpo $(DEPDIR)/libcurlu_la-http_aws_sigv4.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='http_aws_sigv4.c' object='libcurlu_la-http_aws_sigv4.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-http_aws_sigv4.lo `test -f 'http_aws_sigv4.c' || echo '$(srcdir)/'`http_aws_sigv4.c
+
libcurlu_la-http_chunks.lo: http_chunks.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-http_chunks.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-http_chunks.Tpo -c -o libcurlu_la-http_chunks.lo `test -f 'http_chunks.c' || echo '$(srcdir)/'`http_chunks.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-http_chunks.Tpo $(DEPDIR)/libcurlu_la-http_chunks.Plo
@@ -3591,19 +3784,12 @@ libcurlu_la-http_proxy.lo: http_proxy.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-http_proxy.lo `test -f 'http_proxy.c' || echo '$(srcdir)/'`http_proxy.c
-libcurlu_la-http_aws_sigv4.lo: http_aws_sigv4.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-http_aws_sigv4.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-http_aws_sigv4.Tpo -c -o libcurlu_la-http_aws_sigv4.lo `test -f 'http_aws_sigv4.c' || echo '$(srcdir)/'`http_aws_sigv4.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-http_aws_sigv4.Tpo $(DEPDIR)/libcurlu_la-http_aws_sigv4.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='http_aws_sigv4.c' object='libcurlu_la-http_aws_sigv4.lo' libtool=yes @AMDEPBACKSLASH@
+libcurlu_la-idn.lo: idn.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-idn.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-idn.Tpo -c -o libcurlu_la-idn.lo `test -f 'idn.c' || echo '$(srcdir)/'`idn.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-idn.Tpo $(DEPDIR)/libcurlu_la-idn.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='idn.c' object='libcurlu_la-idn.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-http_aws_sigv4.lo `test -f 'http_aws_sigv4.c' || echo '$(srcdir)/'`http_aws_sigv4.c
-
-libcurlu_la-idn_win32.lo: idn_win32.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-idn_win32.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-idn_win32.Tpo -c -o libcurlu_la-idn_win32.lo `test -f 'idn_win32.c' || echo '$(srcdir)/'`idn_win32.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-idn_win32.Tpo $(DEPDIR)/libcurlu_la-idn_win32.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='idn_win32.c' object='libcurlu_la-idn_win32.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-idn_win32.lo `test -f 'idn_win32.c' || echo '$(srcdir)/'`idn_win32.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-idn.lo `test -f 'idn.c' || echo '$(srcdir)/'`idn.c
libcurlu_la-if2ip.lo: if2ip.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-if2ip.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-if2ip.Tpo -c -o libcurlu_la-if2ip.lo `test -f 'if2ip.c' || echo '$(srcdir)/'`if2ip.c
@@ -3654,6 +3840,13 @@ libcurlu_la-llist.lo: llist.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-llist.lo `test -f 'llist.c' || echo '$(srcdir)/'`llist.c
+libcurlu_la-macos.lo: macos.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-macos.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-macos.Tpo -c -o libcurlu_la-macos.lo `test -f 'macos.c' || echo '$(srcdir)/'`macos.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-macos.Tpo $(DEPDIR)/libcurlu_la-macos.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='macos.c' object='libcurlu_la-macos.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-macos.lo `test -f 'macos.c' || echo '$(srcdir)/'`macos.c
+
libcurlu_la-md4.lo: md4.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-md4.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-md4.Tpo -c -o libcurlu_la-md4.lo `test -f 'md4.c' || echo '$(srcdir)/'`md4.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-md4.Tpo $(DEPDIR)/libcurlu_la-md4.Plo
@@ -3997,13 +4190,6 @@ libcurlu_la-warnless.lo: warnless.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-warnless.lo `test -f 'warnless.c' || echo '$(srcdir)/'`warnless.c
-libcurlu_la-wildcard.lo: wildcard.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-wildcard.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-wildcard.Tpo -c -o libcurlu_la-wildcard.lo `test -f 'wildcard.c' || echo '$(srcdir)/'`wildcard.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-wildcard.Tpo $(DEPDIR)/libcurlu_la-wildcard.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wildcard.c' object='libcurlu_la-wildcard.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-wildcard.lo `test -f 'wildcard.c' || echo '$(srcdir)/'`wildcard.c
-
libcurlu_la-ws.lo: ws.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-ws.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-ws.Tpo -c -o libcurlu_la-ws.lo `test -f 'ws.c' || echo '$(srcdir)/'`ws.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-ws.Tpo $(DEPDIR)/libcurlu_la-ws.Plo
@@ -4109,13 +4295,6 @@ vtls/libcurlu_la-bearssl.lo: vtls/bearssl.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurlu_la-bearssl.lo `test -f 'vtls/bearssl.c' || echo '$(srcdir)/'`vtls/bearssl.c
-vtls/libcurlu_la-gskit.lo: vtls/gskit.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vtls/libcurlu_la-gskit.lo -MD -MP -MF vtls/$(DEPDIR)/libcurlu_la-gskit.Tpo -c -o vtls/libcurlu_la-gskit.lo `test -f 'vtls/gskit.c' || echo '$(srcdir)/'`vtls/gskit.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurlu_la-gskit.Tpo vtls/$(DEPDIR)/libcurlu_la-gskit.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vtls/gskit.c' object='vtls/libcurlu_la-gskit.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurlu_la-gskit.lo `test -f 'vtls/gskit.c' || echo '$(srcdir)/'`vtls/gskit.c
-
vtls/libcurlu_la-gtls.lo: vtls/gtls.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vtls/libcurlu_la-gtls.lo -MD -MP -MF vtls/$(DEPDIR)/libcurlu_la-gtls.Tpo -c -o vtls/libcurlu_la-gtls.lo `test -f 'vtls/gtls.c' || echo '$(srcdir)/'`vtls/gtls.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurlu_la-gtls.Tpo vtls/$(DEPDIR)/libcurlu_la-gtls.Plo
@@ -4151,13 +4330,6 @@ vtls/libcurlu_la-mbedtls_threadlock.lo: vtls/mbedtls_threadlock.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurlu_la-mbedtls_threadlock.lo `test -f 'vtls/mbedtls_threadlock.c' || echo '$(srcdir)/'`vtls/mbedtls_threadlock.c
-vtls/libcurlu_la-nss.lo: vtls/nss.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vtls/libcurlu_la-nss.lo -MD -MP -MF vtls/$(DEPDIR)/libcurlu_la-nss.Tpo -c -o vtls/libcurlu_la-nss.lo `test -f 'vtls/nss.c' || echo '$(srcdir)/'`vtls/nss.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurlu_la-nss.Tpo vtls/$(DEPDIR)/libcurlu_la-nss.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vtls/nss.c' object='vtls/libcurlu_la-nss.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurlu_la-nss.lo `test -f 'vtls/nss.c' || echo '$(srcdir)/'`vtls/nss.c
-
vtls/libcurlu_la-openssl.lo: vtls/openssl.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vtls/libcurlu_la-openssl.lo -MD -MP -MF vtls/$(DEPDIR)/libcurlu_la-openssl.Tpo -c -o vtls/libcurlu_la-openssl.lo `test -f 'vtls/openssl.c' || echo '$(srcdir)/'`vtls/openssl.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurlu_la-openssl.Tpo vtls/$(DEPDIR)/libcurlu_la-openssl.Plo
@@ -4214,26 +4386,26 @@ vtls/libcurlu_la-x509asn1.lo: vtls/x509asn1.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurlu_la-x509asn1.lo `test -f 'vtls/x509asn1.c' || echo '$(srcdir)/'`vtls/x509asn1.c
-vquic/libcurlu_la-msh3.lo: vquic/msh3.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vquic/libcurlu_la-msh3.lo -MD -MP -MF vquic/$(DEPDIR)/libcurlu_la-msh3.Tpo -c -o vquic/libcurlu_la-msh3.lo `test -f 'vquic/msh3.c' || echo '$(srcdir)/'`vquic/msh3.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vquic/$(DEPDIR)/libcurlu_la-msh3.Tpo vquic/$(DEPDIR)/libcurlu_la-msh3.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vquic/msh3.c' object='vquic/libcurlu_la-msh3.lo' libtool=yes @AMDEPBACKSLASH@
+vquic/libcurlu_la-curl_msh3.lo: vquic/curl_msh3.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vquic/libcurlu_la-curl_msh3.lo -MD -MP -MF vquic/$(DEPDIR)/libcurlu_la-curl_msh3.Tpo -c -o vquic/libcurlu_la-curl_msh3.lo `test -f 'vquic/curl_msh3.c' || echo '$(srcdir)/'`vquic/curl_msh3.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vquic/$(DEPDIR)/libcurlu_la-curl_msh3.Tpo vquic/$(DEPDIR)/libcurlu_la-curl_msh3.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vquic/curl_msh3.c' object='vquic/libcurlu_la-curl_msh3.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vquic/libcurlu_la-msh3.lo `test -f 'vquic/msh3.c' || echo '$(srcdir)/'`vquic/msh3.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vquic/libcurlu_la-curl_msh3.lo `test -f 'vquic/curl_msh3.c' || echo '$(srcdir)/'`vquic/curl_msh3.c
-vquic/libcurlu_la-ngtcp2.lo: vquic/ngtcp2.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vquic/libcurlu_la-ngtcp2.lo -MD -MP -MF vquic/$(DEPDIR)/libcurlu_la-ngtcp2.Tpo -c -o vquic/libcurlu_la-ngtcp2.lo `test -f 'vquic/ngtcp2.c' || echo '$(srcdir)/'`vquic/ngtcp2.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vquic/$(DEPDIR)/libcurlu_la-ngtcp2.Tpo vquic/$(DEPDIR)/libcurlu_la-ngtcp2.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vquic/ngtcp2.c' object='vquic/libcurlu_la-ngtcp2.lo' libtool=yes @AMDEPBACKSLASH@
+vquic/libcurlu_la-curl_ngtcp2.lo: vquic/curl_ngtcp2.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vquic/libcurlu_la-curl_ngtcp2.lo -MD -MP -MF vquic/$(DEPDIR)/libcurlu_la-curl_ngtcp2.Tpo -c -o vquic/libcurlu_la-curl_ngtcp2.lo `test -f 'vquic/curl_ngtcp2.c' || echo '$(srcdir)/'`vquic/curl_ngtcp2.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vquic/$(DEPDIR)/libcurlu_la-curl_ngtcp2.Tpo vquic/$(DEPDIR)/libcurlu_la-curl_ngtcp2.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vquic/curl_ngtcp2.c' object='vquic/libcurlu_la-curl_ngtcp2.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vquic/libcurlu_la-ngtcp2.lo `test -f 'vquic/ngtcp2.c' || echo '$(srcdir)/'`vquic/ngtcp2.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vquic/libcurlu_la-curl_ngtcp2.lo `test -f 'vquic/curl_ngtcp2.c' || echo '$(srcdir)/'`vquic/curl_ngtcp2.c
-vquic/libcurlu_la-quiche.lo: vquic/quiche.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vquic/libcurlu_la-quiche.lo -MD -MP -MF vquic/$(DEPDIR)/libcurlu_la-quiche.Tpo -c -o vquic/libcurlu_la-quiche.lo `test -f 'vquic/quiche.c' || echo '$(srcdir)/'`vquic/quiche.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vquic/$(DEPDIR)/libcurlu_la-quiche.Tpo vquic/$(DEPDIR)/libcurlu_la-quiche.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vquic/quiche.c' object='vquic/libcurlu_la-quiche.lo' libtool=yes @AMDEPBACKSLASH@
+vquic/libcurlu_la-curl_quiche.lo: vquic/curl_quiche.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vquic/libcurlu_la-curl_quiche.lo -MD -MP -MF vquic/$(DEPDIR)/libcurlu_la-curl_quiche.Tpo -c -o vquic/libcurlu_la-curl_quiche.lo `test -f 'vquic/curl_quiche.c' || echo '$(srcdir)/'`vquic/curl_quiche.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vquic/$(DEPDIR)/libcurlu_la-curl_quiche.Tpo vquic/$(DEPDIR)/libcurlu_la-curl_quiche.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vquic/curl_quiche.c' object='vquic/libcurlu_la-curl_quiche.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vquic/libcurlu_la-quiche.lo `test -f 'vquic/quiche.c' || echo '$(srcdir)/'`vquic/quiche.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vquic/libcurlu_la-curl_quiche.lo `test -f 'vquic/curl_quiche.c' || echo '$(srcdir)/'`vquic/curl_quiche.c
vquic/libcurlu_la-vquic.lo: vquic/vquic.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vquic/libcurlu_la-vquic.lo -MD -MP -MF vquic/$(DEPDIR)/libcurlu_la-vquic.Tpo -c -o vquic/libcurlu_la-vquic.lo `test -f 'vquic/vquic.c' || echo '$(srcdir)/'`vquic/vquic.c
@@ -4414,8 +4586,15 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/libcurl_la-asyn-ares.Plo
-rm -f ./$(DEPDIR)/libcurl_la-asyn-thread.Plo
-rm -f ./$(DEPDIR)/libcurl_la-base64.Plo
+ -rm -f ./$(DEPDIR)/libcurl_la-bufq.Plo
-rm -f ./$(DEPDIR)/libcurl_la-bufref.Plo
-rm -f ./$(DEPDIR)/libcurl_la-c-hyper.Plo
+ -rm -f ./$(DEPDIR)/libcurl_la-cf-h1-proxy.Plo
+ -rm -f ./$(DEPDIR)/libcurl_la-cf-h2-proxy.Plo
+ -rm -f ./$(DEPDIR)/libcurl_la-cf-haproxy.Plo
+ -rm -f ./$(DEPDIR)/libcurl_la-cf-https-connect.Plo
+ -rm -f ./$(DEPDIR)/libcurl_la-cf-socket.Plo
+ -rm -f ./$(DEPDIR)/libcurl_la-cfilters.Plo
-rm -f ./$(DEPDIR)/libcurl_la-conncache.Plo
-rm -f ./$(DEPDIR)/libcurl_la-connect.Plo
-rm -f ./$(DEPDIR)/libcurl_la-content_encoding.Plo
@@ -4437,9 +4616,11 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/libcurl_la-curl_sasl.Plo
-rm -f ./$(DEPDIR)/libcurl_la-curl_sspi.Plo
-rm -f ./$(DEPDIR)/libcurl_la-curl_threads.Plo
+ -rm -f ./$(DEPDIR)/libcurl_la-curl_trc.Plo
-rm -f ./$(DEPDIR)/libcurl_la-dict.Plo
-rm -f ./$(DEPDIR)/libcurl_la-doh.Plo
-rm -f ./$(DEPDIR)/libcurl_la-dynbuf.Plo
+ -rm -f ./$(DEPDIR)/libcurl_la-dynhds.Plo
-rm -f ./$(DEPDIR)/libcurl_la-easy.Plo
-rm -f ./$(DEPDIR)/libcurl_la-easygetopt.Plo
-rm -f ./$(DEPDIR)/libcurl_la-easyoptions.Plo
@@ -4453,7 +4634,6 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/libcurl_la-getenv.Plo
-rm -f ./$(DEPDIR)/libcurl_la-getinfo.Plo
-rm -f ./$(DEPDIR)/libcurl_la-gopher.Plo
- -rm -f ./$(DEPDIR)/libcurl_la-h2h3.Plo
-rm -f ./$(DEPDIR)/libcurl_la-hash.Plo
-rm -f ./$(DEPDIR)/libcurl_la-headers.Plo
-rm -f ./$(DEPDIR)/libcurl_la-hmac.Plo
@@ -4464,6 +4644,7 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/libcurl_la-hostsyn.Plo
-rm -f ./$(DEPDIR)/libcurl_la-hsts.Plo
-rm -f ./$(DEPDIR)/libcurl_la-http.Plo
+ -rm -f ./$(DEPDIR)/libcurl_la-http1.Plo
-rm -f ./$(DEPDIR)/libcurl_la-http2.Plo
-rm -f ./$(DEPDIR)/libcurl_la-http_aws_sigv4.Plo
-rm -f ./$(DEPDIR)/libcurl_la-http_chunks.Plo
@@ -4471,7 +4652,7 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/libcurl_la-http_negotiate.Plo
-rm -f ./$(DEPDIR)/libcurl_la-http_ntlm.Plo
-rm -f ./$(DEPDIR)/libcurl_la-http_proxy.Plo
- -rm -f ./$(DEPDIR)/libcurl_la-idn_win32.Plo
+ -rm -f ./$(DEPDIR)/libcurl_la-idn.Plo
-rm -f ./$(DEPDIR)/libcurl_la-if2ip.Plo
-rm -f ./$(DEPDIR)/libcurl_la-imap.Plo
-rm -f ./$(DEPDIR)/libcurl_la-inet_ntop.Plo
@@ -4479,6 +4660,7 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/libcurl_la-krb5.Plo
-rm -f ./$(DEPDIR)/libcurl_la-ldap.Plo
-rm -f ./$(DEPDIR)/libcurl_la-llist.Plo
+ -rm -f ./$(DEPDIR)/libcurl_la-macos.Plo
-rm -f ./$(DEPDIR)/libcurl_la-md4.Plo
-rm -f ./$(DEPDIR)/libcurl_la-md5.Plo
-rm -f ./$(DEPDIR)/libcurl_la-memdebug.Plo
@@ -4528,15 +4710,21 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/libcurl_la-version.Plo
-rm -f ./$(DEPDIR)/libcurl_la-version_win32.Plo
-rm -f ./$(DEPDIR)/libcurl_la-warnless.Plo
- -rm -f ./$(DEPDIR)/libcurl_la-wildcard.Plo
-rm -f ./$(DEPDIR)/libcurl_la-ws.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-altsvc.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-amigaos.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-asyn-ares.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-asyn-thread.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-base64.Plo
+ -rm -f ./$(DEPDIR)/libcurlu_la-bufq.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-bufref.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-c-hyper.Plo
+ -rm -f ./$(DEPDIR)/libcurlu_la-cf-h1-proxy.Plo
+ -rm -f ./$(DEPDIR)/libcurlu_la-cf-h2-proxy.Plo
+ -rm -f ./$(DEPDIR)/libcurlu_la-cf-haproxy.Plo
+ -rm -f ./$(DEPDIR)/libcurlu_la-cf-https-connect.Plo
+ -rm -f ./$(DEPDIR)/libcurlu_la-cf-socket.Plo
+ -rm -f ./$(DEPDIR)/libcurlu_la-cfilters.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-conncache.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-connect.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-content_encoding.Plo
@@ -4558,9 +4746,11 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/libcurlu_la-curl_sasl.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-curl_sspi.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-curl_threads.Plo
+ -rm -f ./$(DEPDIR)/libcurlu_la-curl_trc.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-dict.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-doh.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-dynbuf.Plo
+ -rm -f ./$(DEPDIR)/libcurlu_la-dynhds.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-easy.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-easygetopt.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-easyoptions.Plo
@@ -4574,7 +4764,6 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/libcurlu_la-getenv.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-getinfo.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-gopher.Plo
- -rm -f ./$(DEPDIR)/libcurlu_la-h2h3.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-hash.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-headers.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-hmac.Plo
@@ -4585,6 +4774,7 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/libcurlu_la-hostsyn.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-hsts.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-http.Plo
+ -rm -f ./$(DEPDIR)/libcurlu_la-http1.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-http2.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-http_aws_sigv4.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-http_chunks.Plo
@@ -4592,7 +4782,7 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/libcurlu_la-http_negotiate.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-http_ntlm.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-http_proxy.Plo
- -rm -f ./$(DEPDIR)/libcurlu_la-idn_win32.Plo
+ -rm -f ./$(DEPDIR)/libcurlu_la-idn.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-if2ip.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-imap.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-inet_ntop.Plo
@@ -4600,6 +4790,7 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/libcurlu_la-krb5.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-ldap.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-llist.Plo
+ -rm -f ./$(DEPDIR)/libcurlu_la-macos.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-md4.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-md5.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-memdebug.Plo
@@ -4649,7 +4840,6 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/libcurlu_la-version.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-version_win32.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-warnless.Plo
- -rm -f ./$(DEPDIR)/libcurlu_la-wildcard.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-ws.Plo
-rm -f vauth/$(DEPDIR)/libcurl_la-cleartext.Plo
-rm -f vauth/$(DEPDIR)/libcurl_la-cram.Plo
@@ -4677,13 +4867,13 @@ distclean: distclean-am
-rm -f vauth/$(DEPDIR)/libcurlu_la-spnego_gssapi.Plo
-rm -f vauth/$(DEPDIR)/libcurlu_la-spnego_sspi.Plo
-rm -f vauth/$(DEPDIR)/libcurlu_la-vauth.Plo
- -rm -f vquic/$(DEPDIR)/libcurl_la-msh3.Plo
- -rm -f vquic/$(DEPDIR)/libcurl_la-ngtcp2.Plo
- -rm -f vquic/$(DEPDIR)/libcurl_la-quiche.Plo
+ -rm -f vquic/$(DEPDIR)/libcurl_la-curl_msh3.Plo
+ -rm -f vquic/$(DEPDIR)/libcurl_la-curl_ngtcp2.Plo
+ -rm -f vquic/$(DEPDIR)/libcurl_la-curl_quiche.Plo
-rm -f vquic/$(DEPDIR)/libcurl_la-vquic.Plo
- -rm -f vquic/$(DEPDIR)/libcurlu_la-msh3.Plo
- -rm -f vquic/$(DEPDIR)/libcurlu_la-ngtcp2.Plo
- -rm -f vquic/$(DEPDIR)/libcurlu_la-quiche.Plo
+ -rm -f vquic/$(DEPDIR)/libcurlu_la-curl_msh3.Plo
+ -rm -f vquic/$(DEPDIR)/libcurlu_la-curl_ngtcp2.Plo
+ -rm -f vquic/$(DEPDIR)/libcurlu_la-curl_quiche.Plo
-rm -f vquic/$(DEPDIR)/libcurlu_la-vquic.Plo
-rm -f vssh/$(DEPDIR)/libcurl_la-libssh.Plo
-rm -f vssh/$(DEPDIR)/libcurl_la-libssh2.Plo
@@ -4692,13 +4882,11 @@ distclean: distclean-am
-rm -f vssh/$(DEPDIR)/libcurlu_la-libssh2.Plo
-rm -f vssh/$(DEPDIR)/libcurlu_la-wolfssh.Plo
-rm -f vtls/$(DEPDIR)/libcurl_la-bearssl.Plo
- -rm -f vtls/$(DEPDIR)/libcurl_la-gskit.Plo
-rm -f vtls/$(DEPDIR)/libcurl_la-gtls.Plo
-rm -f vtls/$(DEPDIR)/libcurl_la-hostcheck.Plo
-rm -f vtls/$(DEPDIR)/libcurl_la-keylog.Plo
-rm -f vtls/$(DEPDIR)/libcurl_la-mbedtls.Plo
-rm -f vtls/$(DEPDIR)/libcurl_la-mbedtls_threadlock.Plo
- -rm -f vtls/$(DEPDIR)/libcurl_la-nss.Plo
-rm -f vtls/$(DEPDIR)/libcurl_la-openssl.Plo
-rm -f vtls/$(DEPDIR)/libcurl_la-rustls.Plo
-rm -f vtls/$(DEPDIR)/libcurl_la-schannel.Plo
@@ -4708,13 +4896,11 @@ distclean: distclean-am
-rm -f vtls/$(DEPDIR)/libcurl_la-wolfssl.Plo
-rm -f vtls/$(DEPDIR)/libcurl_la-x509asn1.Plo
-rm -f vtls/$(DEPDIR)/libcurlu_la-bearssl.Plo
- -rm -f vtls/$(DEPDIR)/libcurlu_la-gskit.Plo
-rm -f vtls/$(DEPDIR)/libcurlu_la-gtls.Plo
-rm -f vtls/$(DEPDIR)/libcurlu_la-hostcheck.Plo
-rm -f vtls/$(DEPDIR)/libcurlu_la-keylog.Plo
-rm -f vtls/$(DEPDIR)/libcurlu_la-mbedtls.Plo
-rm -f vtls/$(DEPDIR)/libcurlu_la-mbedtls_threadlock.Plo
- -rm -f vtls/$(DEPDIR)/libcurlu_la-nss.Plo
-rm -f vtls/$(DEPDIR)/libcurlu_la-openssl.Plo
-rm -f vtls/$(DEPDIR)/libcurlu_la-rustls.Plo
-rm -f vtls/$(DEPDIR)/libcurlu_la-schannel.Plo
@@ -4773,8 +4959,15 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/libcurl_la-asyn-ares.Plo
-rm -f ./$(DEPDIR)/libcurl_la-asyn-thread.Plo
-rm -f ./$(DEPDIR)/libcurl_la-base64.Plo
+ -rm -f ./$(DEPDIR)/libcurl_la-bufq.Plo
-rm -f ./$(DEPDIR)/libcurl_la-bufref.Plo
-rm -f ./$(DEPDIR)/libcurl_la-c-hyper.Plo
+ -rm -f ./$(DEPDIR)/libcurl_la-cf-h1-proxy.Plo
+ -rm -f ./$(DEPDIR)/libcurl_la-cf-h2-proxy.Plo
+ -rm -f ./$(DEPDIR)/libcurl_la-cf-haproxy.Plo
+ -rm -f ./$(DEPDIR)/libcurl_la-cf-https-connect.Plo
+ -rm -f ./$(DEPDIR)/libcurl_la-cf-socket.Plo
+ -rm -f ./$(DEPDIR)/libcurl_la-cfilters.Plo
-rm -f ./$(DEPDIR)/libcurl_la-conncache.Plo
-rm -f ./$(DEPDIR)/libcurl_la-connect.Plo
-rm -f ./$(DEPDIR)/libcurl_la-content_encoding.Plo
@@ -4796,9 +4989,11 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/libcurl_la-curl_sasl.Plo
-rm -f ./$(DEPDIR)/libcurl_la-curl_sspi.Plo
-rm -f ./$(DEPDIR)/libcurl_la-curl_threads.Plo
+ -rm -f ./$(DEPDIR)/libcurl_la-curl_trc.Plo
-rm -f ./$(DEPDIR)/libcurl_la-dict.Plo
-rm -f ./$(DEPDIR)/libcurl_la-doh.Plo
-rm -f ./$(DEPDIR)/libcurl_la-dynbuf.Plo
+ -rm -f ./$(DEPDIR)/libcurl_la-dynhds.Plo
-rm -f ./$(DEPDIR)/libcurl_la-easy.Plo
-rm -f ./$(DEPDIR)/libcurl_la-easygetopt.Plo
-rm -f ./$(DEPDIR)/libcurl_la-easyoptions.Plo
@@ -4812,7 +5007,6 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/libcurl_la-getenv.Plo
-rm -f ./$(DEPDIR)/libcurl_la-getinfo.Plo
-rm -f ./$(DEPDIR)/libcurl_la-gopher.Plo
- -rm -f ./$(DEPDIR)/libcurl_la-h2h3.Plo
-rm -f ./$(DEPDIR)/libcurl_la-hash.Plo
-rm -f ./$(DEPDIR)/libcurl_la-headers.Plo
-rm -f ./$(DEPDIR)/libcurl_la-hmac.Plo
@@ -4823,6 +5017,7 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/libcurl_la-hostsyn.Plo
-rm -f ./$(DEPDIR)/libcurl_la-hsts.Plo
-rm -f ./$(DEPDIR)/libcurl_la-http.Plo
+ -rm -f ./$(DEPDIR)/libcurl_la-http1.Plo
-rm -f ./$(DEPDIR)/libcurl_la-http2.Plo
-rm -f ./$(DEPDIR)/libcurl_la-http_aws_sigv4.Plo
-rm -f ./$(DEPDIR)/libcurl_la-http_chunks.Plo
@@ -4830,7 +5025,7 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/libcurl_la-http_negotiate.Plo
-rm -f ./$(DEPDIR)/libcurl_la-http_ntlm.Plo
-rm -f ./$(DEPDIR)/libcurl_la-http_proxy.Plo
- -rm -f ./$(DEPDIR)/libcurl_la-idn_win32.Plo
+ -rm -f ./$(DEPDIR)/libcurl_la-idn.Plo
-rm -f ./$(DEPDIR)/libcurl_la-if2ip.Plo
-rm -f ./$(DEPDIR)/libcurl_la-imap.Plo
-rm -f ./$(DEPDIR)/libcurl_la-inet_ntop.Plo
@@ -4838,6 +5033,7 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/libcurl_la-krb5.Plo
-rm -f ./$(DEPDIR)/libcurl_la-ldap.Plo
-rm -f ./$(DEPDIR)/libcurl_la-llist.Plo
+ -rm -f ./$(DEPDIR)/libcurl_la-macos.Plo
-rm -f ./$(DEPDIR)/libcurl_la-md4.Plo
-rm -f ./$(DEPDIR)/libcurl_la-md5.Plo
-rm -f ./$(DEPDIR)/libcurl_la-memdebug.Plo
@@ -4887,15 +5083,21 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/libcurl_la-version.Plo
-rm -f ./$(DEPDIR)/libcurl_la-version_win32.Plo
-rm -f ./$(DEPDIR)/libcurl_la-warnless.Plo
- -rm -f ./$(DEPDIR)/libcurl_la-wildcard.Plo
-rm -f ./$(DEPDIR)/libcurl_la-ws.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-altsvc.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-amigaos.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-asyn-ares.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-asyn-thread.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-base64.Plo
+ -rm -f ./$(DEPDIR)/libcurlu_la-bufq.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-bufref.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-c-hyper.Plo
+ -rm -f ./$(DEPDIR)/libcurlu_la-cf-h1-proxy.Plo
+ -rm -f ./$(DEPDIR)/libcurlu_la-cf-h2-proxy.Plo
+ -rm -f ./$(DEPDIR)/libcurlu_la-cf-haproxy.Plo
+ -rm -f ./$(DEPDIR)/libcurlu_la-cf-https-connect.Plo
+ -rm -f ./$(DEPDIR)/libcurlu_la-cf-socket.Plo
+ -rm -f ./$(DEPDIR)/libcurlu_la-cfilters.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-conncache.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-connect.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-content_encoding.Plo
@@ -4917,9 +5119,11 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/libcurlu_la-curl_sasl.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-curl_sspi.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-curl_threads.Plo
+ -rm -f ./$(DEPDIR)/libcurlu_la-curl_trc.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-dict.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-doh.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-dynbuf.Plo
+ -rm -f ./$(DEPDIR)/libcurlu_la-dynhds.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-easy.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-easygetopt.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-easyoptions.Plo
@@ -4933,7 +5137,6 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/libcurlu_la-getenv.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-getinfo.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-gopher.Plo
- -rm -f ./$(DEPDIR)/libcurlu_la-h2h3.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-hash.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-headers.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-hmac.Plo
@@ -4944,6 +5147,7 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/libcurlu_la-hostsyn.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-hsts.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-http.Plo
+ -rm -f ./$(DEPDIR)/libcurlu_la-http1.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-http2.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-http_aws_sigv4.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-http_chunks.Plo
@@ -4951,7 +5155,7 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/libcurlu_la-http_negotiate.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-http_ntlm.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-http_proxy.Plo
- -rm -f ./$(DEPDIR)/libcurlu_la-idn_win32.Plo
+ -rm -f ./$(DEPDIR)/libcurlu_la-idn.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-if2ip.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-imap.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-inet_ntop.Plo
@@ -4959,6 +5163,7 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/libcurlu_la-krb5.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-ldap.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-llist.Plo
+ -rm -f ./$(DEPDIR)/libcurlu_la-macos.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-md4.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-md5.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-memdebug.Plo
@@ -5008,7 +5213,6 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/libcurlu_la-version.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-version_win32.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-warnless.Plo
- -rm -f ./$(DEPDIR)/libcurlu_la-wildcard.Plo
-rm -f ./$(DEPDIR)/libcurlu_la-ws.Plo
-rm -f vauth/$(DEPDIR)/libcurl_la-cleartext.Plo
-rm -f vauth/$(DEPDIR)/libcurl_la-cram.Plo
@@ -5036,13 +5240,13 @@ maintainer-clean: maintainer-clean-am
-rm -f vauth/$(DEPDIR)/libcurlu_la-spnego_gssapi.Plo
-rm -f vauth/$(DEPDIR)/libcurlu_la-spnego_sspi.Plo
-rm -f vauth/$(DEPDIR)/libcurlu_la-vauth.Plo
- -rm -f vquic/$(DEPDIR)/libcurl_la-msh3.Plo
- -rm -f vquic/$(DEPDIR)/libcurl_la-ngtcp2.Plo
- -rm -f vquic/$(DEPDIR)/libcurl_la-quiche.Plo
+ -rm -f vquic/$(DEPDIR)/libcurl_la-curl_msh3.Plo
+ -rm -f vquic/$(DEPDIR)/libcurl_la-curl_ngtcp2.Plo
+ -rm -f vquic/$(DEPDIR)/libcurl_la-curl_quiche.Plo
-rm -f vquic/$(DEPDIR)/libcurl_la-vquic.Plo
- -rm -f vquic/$(DEPDIR)/libcurlu_la-msh3.Plo
- -rm -f vquic/$(DEPDIR)/libcurlu_la-ngtcp2.Plo
- -rm -f vquic/$(DEPDIR)/libcurlu_la-quiche.Plo
+ -rm -f vquic/$(DEPDIR)/libcurlu_la-curl_msh3.Plo
+ -rm -f vquic/$(DEPDIR)/libcurlu_la-curl_ngtcp2.Plo
+ -rm -f vquic/$(DEPDIR)/libcurlu_la-curl_quiche.Plo
-rm -f vquic/$(DEPDIR)/libcurlu_la-vquic.Plo
-rm -f vssh/$(DEPDIR)/libcurl_la-libssh.Plo
-rm -f vssh/$(DEPDIR)/libcurl_la-libssh2.Plo
@@ -5051,13 +5255,11 @@ maintainer-clean: maintainer-clean-am
-rm -f vssh/$(DEPDIR)/libcurlu_la-libssh2.Plo
-rm -f vssh/$(DEPDIR)/libcurlu_la-wolfssh.Plo
-rm -f vtls/$(DEPDIR)/libcurl_la-bearssl.Plo
- -rm -f vtls/$(DEPDIR)/libcurl_la-gskit.Plo
-rm -f vtls/$(DEPDIR)/libcurl_la-gtls.Plo
-rm -f vtls/$(DEPDIR)/libcurl_la-hostcheck.Plo
-rm -f vtls/$(DEPDIR)/libcurl_la-keylog.Plo
-rm -f vtls/$(DEPDIR)/libcurl_la-mbedtls.Plo
-rm -f vtls/$(DEPDIR)/libcurl_la-mbedtls_threadlock.Plo
- -rm -f vtls/$(DEPDIR)/libcurl_la-nss.Plo
-rm -f vtls/$(DEPDIR)/libcurl_la-openssl.Plo
-rm -f vtls/$(DEPDIR)/libcurl_la-rustls.Plo
-rm -f vtls/$(DEPDIR)/libcurl_la-schannel.Plo
@@ -5067,13 +5269,11 @@ maintainer-clean: maintainer-clean-am
-rm -f vtls/$(DEPDIR)/libcurl_la-wolfssl.Plo
-rm -f vtls/$(DEPDIR)/libcurl_la-x509asn1.Plo
-rm -f vtls/$(DEPDIR)/libcurlu_la-bearssl.Plo
- -rm -f vtls/$(DEPDIR)/libcurlu_la-gskit.Plo
-rm -f vtls/$(DEPDIR)/libcurlu_la-gtls.Plo
-rm -f vtls/$(DEPDIR)/libcurlu_la-hostcheck.Plo
-rm -f vtls/$(DEPDIR)/libcurlu_la-keylog.Plo
-rm -f vtls/$(DEPDIR)/libcurlu_la-mbedtls.Plo
-rm -f vtls/$(DEPDIR)/libcurlu_la-mbedtls_threadlock.Plo
- -rm -f vtls/$(DEPDIR)/libcurlu_la-nss.Plo
-rm -f vtls/$(DEPDIR)/libcurlu_la-openssl.Plo
-rm -f vtls/$(DEPDIR)/libcurlu_la-rustls.Plo
-rm -f vtls/$(DEPDIR)/libcurlu_la-schannel.Plo
@@ -5120,7 +5320,19 @@ uninstall-am: uninstall-libLTLIBRARIES
.PRECIOUS: Makefile
-@OS_WINDOWS_TRUE@@USE_CPPFLAG_CURL_STATICLIB_FALSE@$(LIB_RCFILES): $(top_srcdir)/include/curl/curlver.h
+# This flag accepts an argument of the form current[:revision[:age]]. So,
+# passing -version-info 3:12:1 sets current to 3, revision to 12, and age to
+# 1.
+#
+# Here's the simplified rule guide on how to change -version-info:
+# (current version is C:R:A)
+#
+# 1. if there are only source changes, use C:R+1:A
+# 2. if interfaces were added use C+1:0:A+1
+# 3. if interfaces were removed, then use C+1:0:0
+#
+# For the full guide on libcurl ABI rules, see docs/libcurl/ABI
+@HAVE_WINDRES_TRUE@@USE_CPPFLAG_CURL_STATICLIB_FALSE@$(LIB_RCFILES): $(top_srcdir)/include/curl/curlver.h
checksrc:
$(CHECKSRC)(@PERL@ $(top_srcdir)/scripts/checksrc.pl -D$(srcdir) \
@@ -5136,9 +5348,8 @@ tidy:
optiontable:
perl optiontable.pl < $(top_srcdir)/include/curl/curl.h > easyoptions.c
-# Warning is "normal": libtool: error: ignoring unknown tag RC
-@OS_WINDOWS_TRUE@.rc.lo:
-@OS_WINDOWS_TRUE@ $(LIBTOOL) --tag=RC --mode=compile $(RC) -I$(top_srcdir)/include $(RCFLAGS) -i $< -o $@
+@HAVE_WINDRES_TRUE@.rc.lo:
+@HAVE_WINDRES_TRUE@ $(LIBTOOL) --tag=RC --mode=compile $(RC) -I$(top_srcdir)/include $(RCFLAGS) -i $< -o $@
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/lib/Makefile.inc b/lib/Makefile.inc
index b2d2e9e52..e568ef953 100644
--- a/lib/Makefile.inc
+++ b/lib/Makefile.inc
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -44,13 +44,11 @@ LIB_VAUTH_HFILES = \
LIB_VTLS_CFILES = \
vtls/bearssl.c \
- vtls/gskit.c \
vtls/gtls.c \
vtls/hostcheck.c \
vtls/keylog.c \
vtls/mbedtls.c \
vtls/mbedtls_threadlock.c \
- vtls/nss.c \
vtls/openssl.c \
vtls/rustls.c \
vtls/schannel.c \
@@ -62,32 +60,33 @@ LIB_VTLS_CFILES = \
LIB_VTLS_HFILES = \
vtls/bearssl.h \
- vtls/gskit.h \
vtls/gtls.h \
vtls/hostcheck.h \
vtls/keylog.h \
vtls/mbedtls.h \
vtls/mbedtls_threadlock.h \
- vtls/nssg.h \
vtls/openssl.h \
vtls/rustls.h \
vtls/schannel.h \
+ vtls/schannel_int.h \
vtls/sectransp.h \
vtls/vtls.h \
+ vtls/vtls_int.h \
vtls/wolfssl.h \
vtls/x509asn1.h
LIB_VQUIC_CFILES = \
- vquic/msh3.c \
- vquic/ngtcp2.c \
- vquic/quiche.c \
+ vquic/curl_msh3.c \
+ vquic/curl_ngtcp2.c \
+ vquic/curl_quiche.c \
vquic/vquic.c
LIB_VQUIC_HFILES = \
- vquic/msh3.h \
- vquic/ngtcp2.h \
- vquic/quiche.h \
- vquic/vquic.h
+ vquic/curl_msh3.h \
+ vquic/curl_ngtcp2.h \
+ vquic/curl_quiche.h \
+ vquic/vquic.h \
+ vquic/vquic_int.h
LIB_VSSH_CFILES = \
vssh/libssh.c \
@@ -103,8 +102,15 @@ LIB_CFILES = \
asyn-ares.c \
asyn-thread.c \
base64.c \
+ bufq.c \
bufref.c \
c-hyper.c \
+ cf-h1-proxy.c \
+ cf-h2-proxy.c \
+ cf-haproxy.c \
+ cf-https-connect.c \
+ cf-socket.c \
+ cfilters.c \
conncache.c \
connect.c \
content_encoding.c \
@@ -126,9 +132,11 @@ LIB_CFILES = \
curl_sasl.c \
curl_sspi.c \
curl_threads.c \
+ curl_trc.c \
dict.c \
doh.c \
dynbuf.c \
+ dynhds.c \
easy.c \
easygetopt.c \
easyoptions.c \
@@ -142,7 +150,6 @@ LIB_CFILES = \
getenv.c \
getinfo.c \
gopher.c \
- h2h3.c \
hash.c \
headers.c \
hmac.c \
@@ -153,14 +160,15 @@ LIB_CFILES = \
hostsyn.c \
hsts.c \
http.c \
+ http1.c \
http2.c \
+ http_aws_sigv4.c \
http_chunks.c \
http_digest.c \
http_negotiate.c \
http_ntlm.c \
http_proxy.c \
- http_aws_sigv4.c \
- idn_win32.c \
+ idn.c \
if2ip.c \
imap.c \
inet_ntop.c \
@@ -168,6 +176,7 @@ LIB_CFILES = \
krb5.c \
ldap.c \
llist.c \
+ macos.c \
md4.c \
md5.c \
memdebug.c \
@@ -217,7 +226,6 @@ LIB_CFILES = \
version.c \
version_win32.c \
warnless.c \
- wildcard.c \
ws.c
LIB_HFILES = \
@@ -225,8 +233,15 @@ LIB_HFILES = \
amigaos.h \
arpa_telnet.h \
asyn.h \
+ bufq.h \
bufref.h \
c-hyper.h \
+ cf-h1-proxy.h \
+ cf-h2-proxy.h \
+ cf-haproxy.h \
+ cf-https-connect.h \
+ cf-socket.h \
+ cfilters.h \
conncache.h \
connect.h \
content_encoding.h \
@@ -260,10 +275,12 @@ LIB_HFILES = \
curl_sha256.h \
curl_sspi.h \
curl_threads.h \
+ curl_trc.h \
curlx.h \
dict.h \
doh.h \
dynbuf.h \
+ dynhds.h \
easy_lock.h \
easyif.h \
easyoptions.h \
@@ -272,29 +289,31 @@ LIB_HFILES = \
fileinfo.h \
fopen.h \
formdata.h \
- functypes.h \
ftp.h \
ftplistparser.h \
+ functypes.h \
getinfo.h \
gopher.h \
- h2h3.h \
hash.h \
headers.h \
hostip.h \
hsts.h \
http.h \
+ http1.h \
http2.h \
+ http_aws_sigv4.h \
http_chunks.h \
http_digest.h \
http_negotiate.h \
http_ntlm.h \
http_proxy.h \
- http_aws_sigv4.h \
+ idn.h \
if2ip.h \
imap.h \
inet_ntop.h \
inet_pton.h \
llist.h \
+ macos.h \
memdebug.h \
mime.h \
mqtt.h \
@@ -308,7 +327,6 @@ LIB_HFILES = \
pop3.h \
progress.h \
psl.h \
- quic.h \
rand.h \
rename.h \
rtsp.h \
@@ -342,7 +360,6 @@ LIB_HFILES = \
urldata.h \
version_win32.h \
warnless.h \
- wildcard.h \
ws.h
LIB_RCFILES = libcurl.rc
diff --git a/lib/Makefile.m32 b/lib/Makefile.mk
index b8b56f8c9..1513cafef 100644
--- a/lib/Makefile.m32
+++ b/lib/Makefile.mk
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1999 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -22,89 +22,104 @@
#
#***************************************************************************
-# Makefile for building curl parts with MinGW and optional features.
+# Makefile to build curl parts with GCC-like toolchains and optional features.
#
-# Usage: mingw32-make -f Makefile.m32 CFG=-feature1[-feature2][-feature3][...]
-# Example: mingw32-make -f Makefile.m32 CFG=-zlib-ssl-sspi-winidn
+# Usage: [mingw32-]make -f Makefile.mk CFG=-feat1[-feat2][-feat3][...]
+# Example: [mingw32-]make -f Makefile.mk CFG=-zlib-ssl-libssh2-ipv6
#
-# Set component roots via envvar <feature>_PATH. Also available for
-# customization: CC, RC, AR, CPPFLAGS, LDFLAGS, LIBS, CFLAGS, RCFLAGS,
-# ARCH[=custom], CROSSPREFIX, CURL_LDFLAGS_BIN, CURL_LDFLAGS_LIB, CURL_DLL_SUFFIX,
-# and more for individual components (see below).
+# Look for ' ?=' to find all accepted customization variables.
+
+# This script is reused by 'src' and 'docs/examples' Makefile.mk scripts.
-# This script is reused by 'src' and 'docs/examples' Makefile.m32 scripts.
-# Skip lib-specific parts when called through them.
ifndef PROOT
-PROOT := ..
+ PROOT := ..
+ LOCAL := 1
+endif
-CPPFLAGS += -DBUILDING_LIBCURL
+### Common
-### Sources and targets
+CFLAGS ?=
+CPPFLAGS ?=
+RCFLAGS ?=
+LDFLAGS ?=
+CURL_LDFLAGS_BIN ?=
+CURL_LDFLAGS_LIB ?=
+LIBS ?=
-# Provides CSOURCES, HHEADERS, LIB_RCFILES
-include Makefile.inc
+CROSSPREFIX ?=
-libcurl_dll_LIBRARY := libcurl$(CURL_DLL_SUFFIX).dll
-libcurl_dll_a_LIBRARY := libcurl.dll.a
-libcurl_a_LIBRARY := libcurl.a
-
-TARGETS := $(libcurl_a_LIBRARY) $(libcurl_dll_LIBRARY)
-
-libcurl_a_OBJECTS := $(patsubst %.c,%.o,$(notdir $(strip $(CSOURCES))))
-libcurl_a_DEPENDENCIES := $(strip $(CSOURCES) $(HHEADERS))
-libcurl_dll_OBJECTS := $(libcurl_a_OBJECTS)
-libcurl_dll_OBJECTS += $(patsubst %.rc,%.res,$(strip $(LIB_RCFILES)))
-vpath %.c vauth vquic vssh vtls
-
-TOCLEAN := $(libcurl_dll_OBJECTS)
-TOVCLEAN := $(libcurl_dll_LIBRARY:.dll=.def) $(libcurl_dll_a_LIBRARY)
-
-### Local rules
+ifeq ($(CC),cc)
+ CC := gcc
+endif
+CC := $(CROSSPREFIX)$(CC)
+AR := $(CROSSPREFIX)$(AR)
+RC ?= $(CROSSPREFIX)windres
-# Keep this at the top to act as the default target.
-all: $(TARGETS)
+# For compatibility
+ARCH ?=
+ifeq ($(ARCH),w64)
+ TRIPLET := x86_64-w64-mingw32
+ CFLAGS += -m64
+ LDFLAGS += -m64
+ RCFLAGS += --target=pe-x86-64
+else ifdef ARCH
+ TRIPLET := i686-w64-mingw32
+ CFLAGS += -m32
+ LDFLAGS += -m32
+ RCFLAGS += --target=pe-i386
+else
+ TRIPLET ?= $(shell $(CC) -dumpmachine)
+endif
-$(libcurl_a_LIBRARY): $(libcurl_a_OBJECTS) $(libcurl_a_DEPENDENCIES)
- @$(call DEL, $@)
- $(AR) rcs $@ $(libcurl_a_OBJECTS)
+BIN_EXT := .exe
-$(libcurl_dll_LIBRARY): $(libcurl_dll_OBJECTS)
- $(CC) $(LDFLAGS) -shared $(CURL_LDFLAGS_LIB) -o $@ $(libcurl_dll_OBJECTS) $(LIBS) \
- -Wl,--output-def,$(@:.dll=.def),--out-implib,$(libcurl_dll_a_LIBRARY)
+ifneq ($(findstring -w,$(TRIPLET)),)
+ WIN32 := 1
+else ifneq ($(findstring msdos,$(TRIPLET)),)
+ # Cross-tools: https://github.com/andrewwutw/build-djgpp
+ MSDOS := 1
+else ifneq ($(findstring amigaos,$(TRIPLET)),)
+ # Cross-tools: https://github.com/bebbo/amiga-gcc
+ AMIGA := 1
endif
CPPFLAGS += -I. -I$(PROOT)/include
RCFLAGS += -I$(PROOT)/include
-CC := $(CROSSPREFIX)$(CC)
-AR := $(CROSSPREFIX)$(AR)
-RC ?= $(CROSSPREFIX)windres
+ifndef WIN32
+ DYN :=
+endif
-ifneq ($(ARCH),custom)
- # Set environment var ARCH to your architecture to override auto-detection.
- ifndef ARCH
- ifneq ($(findstring x86_64,$(shell $(CC) -dumpmachine)),)
- ARCH := w64
- else
- ARCH := w32
- endif
- endif
- ifeq ($(ARCH),w64)
- CFLAGS += -m64
- LDFLAGS += -m64
- RCFLAGS += --target=pe-x86-64
- else
- CFLAGS += -m32
- LDFLAGS += -m32
- RCFLAGS += --target=pe-i386
- endif
+ifdef AMIGA
+ BIN_EXT :=
+endif
+
+### Deprecated settings. For compatibility.
+
+ifdef WATT_ROOT
+ WATT_PATH := $(realpath $(WATT_ROOT))
endif
### Optional features
-ifneq ($(findstring -unicode,$(CFG)),)
- CPPFLAGS += -DUNICODE -D_UNICODE
- CURL_LDFLAGS_BIN += -municode
+ifneq ($(findstring -debug,$(CFG)),)
+ CFLAGS += -g
+ CPPFLAGS += -DDEBUGBUILD
+else
+ CPPFLAGS += -DNDEBUG
+endif
+ifneq ($(findstring -trackmem,$(CFG)),)
+ CPPFLAGS += -DCURLDEBUG
+endif
+ifneq ($(findstring -map,$(CFG)),)
+ MAP := 1
+endif
+
+ifdef WIN32
+ ifneq ($(findstring -unicode,$(CFG)),)
+ CPPFLAGS += -DUNICODE -D_UNICODE
+ CURL_LDFLAGS_BIN += -municode
+ endif
endif
# CPPFLAGS below are only necessary when building libcurl via 'lib' (see
@@ -130,7 +145,10 @@ ifneq ($(findstring -rtmp,$(CFG)),)
CPPFLAGS += -DUSE_LIBRTMP
CPPFLAGS += -I"$(LIBRTMP_PATH)"
_LDFLAGS += -L"$(LIBRTMP_PATH)/librtmp"
- _LIBS += -lrtmp -lwinmm
+ _LIBS += -lrtmp
+ ifdef WIN32
+ _LIBS += -lwinmm
+ endif
ZLIB := 1
endif
@@ -139,7 +157,9 @@ ifneq ($(findstring -ssh2,$(CFG)),)
CPPFLAGS += -DUSE_LIBSSH2
CPPFLAGS += -I"$(LIBSSH2_PATH)/include"
_LDFLAGS += -L"$(LIBSSH2_PATH)/lib"
- _LDFLAGS += -L"$(LIBSSH2_PATH)/win32"
+ ifdef WIN32
+ _LDFLAGS += -L"$(LIBSSH2_PATH)/win32"
+ endif
_LIBS += -lssh2
else ifneq ($(findstring -libssh,$(CFG)),)
LIBSSH_PATH ?= $(PROOT)/../libssh
@@ -166,13 +186,6 @@ ifneq ($(findstring -ssl,$(CFG)),)
OPENSSL_LIBS ?= -lssl -lcrypto
_LIBS += $(OPENSSL_LIBS)
- ifneq ($(wildcard $(OPENSSL_INCLUDE)/openssl/aead.h),)
- OPENSSL := boringssl
- else
- # including libressl
- OPENSSL := openssl
- endif
-
ifneq ($(findstring -srp,$(CFG)),)
ifneq ($(wildcard $(OPENSSL_INCLUDE)/openssl/srp.h),)
# OpenSSL 1.0.1 and later.
@@ -180,18 +193,18 @@ ifneq ($(findstring -ssl,$(CFG)),)
endif
endif
SSLLIBS += 1
-else ifneq ($(findstring -wolfssl,$(CFG)),)
- WOLFSSL_PATH ?= $(PROOT)/../zlib
+endif
+ifneq ($(findstring -wolfssl,$(CFG)),)
+ WOLFSSL_PATH ?= $(PROOT)/../wolfssl
CPPFLAGS += -DUSE_WOLFSSL
CPPFLAGS += -DSIZEOF_LONG_LONG=8
CPPFLAGS += -I"$(WOLFSSL_PATH)/include"
_LDFLAGS += -L"$(WOLFSSL_PATH)/lib"
_LIBS += -lwolfssl
- OPENSSL := wolfssl
SSLLIBS += 1
endif
ifneq ($(findstring -mbedtls,$(CFG)),)
- MBEDTLS_PATH ?= $(PROOT)/../zlib
+ MBEDTLS_PATH ?= $(PROOT)/../mbedtls
CPPFLAGS += -DUSE_MBEDTLS
CPPFLAGS += -I"$(MBEDTLS_PATH)/include"
_LDFLAGS += -L"$(MBEDTLS_PATH)/lib"
@@ -222,9 +235,20 @@ ifeq ($(findstring -nghttp3,$(CFG))$(findstring -ngtcp2,$(CFG)),-nghttp3-ngtcp2)
CPPFLAGS += -DUSE_NGTCP2
CPPFLAGS += -I"$(NGTCP2_PATH)/include"
_LDFLAGS += -L"$(NGTCP2_PATH)/lib"
- ifneq ($(OPENSSL),)
- NGTCP2_LIBS ?= -lngtcp2_crypto_$(OPENSSL)
+
+ NGTCP2_LIBS ?=
+ ifeq ($(NGTCP2_LIBS),)
+ ifneq ($(findstring -ssl,$(CFG)),)
+ ifneq ($(wildcard $(OPENSSL_INCLUDE)/openssl/aead.h),)
+ NGTCP2_LIBS := -lngtcp2_crypto_boringssl
+ else # including libressl
+ NGTCP2_LIBS := -lngtcp2_crypto_quictls
+ endif
+ else ifneq ($(findstring -wolfssl,$(CFG)),)
+ NGTCP2_LIBS := -lngtcp2_crypto_wolfssl
+ endif
endif
+
_LIBS += -lngtcp2 $(NGTCP2_LIBS)
endif
@@ -232,9 +256,11 @@ ifneq ($(findstring -zlib,$(CFG))$(ZLIB),)
ZLIB_PATH ?= $(PROOT)/../zlib
# These CPPFLAGS are also required when compiling the curl tool via 'src'.
CPPFLAGS += -DHAVE_LIBZ
- CPPFLAGS += -I"$(ZLIB_PATH)"
- _LDFLAGS += -L"$(ZLIB_PATH)"
- _LIBS += -lz
+ CPPFLAGS += -I"$(ZLIB_PATH)/include"
+ _LDFLAGS += -L"$(ZLIB_PATH)/lib"
+ ZLIB_LIBS ?= -lz
+ _LIBS += $(ZLIB_LIBS)
+ ZLIB := 1
endif
ifneq ($(findstring -zstd,$(CFG)),)
ZSTD_PATH ?= $(PROOT)/../zstd
@@ -276,26 +302,33 @@ ifneq ($(findstring -psl,$(CFG)),)
endif
else ifneq ($(findstring -winidn,$(CFG)),)
CPPFLAGS += -DUSE_WIN32_IDN
- CPPFLAGS += -DWANT_IDN_PROTOTYPES
_LIBS += -lnormaliz
endif
ifneq ($(findstring -sspi,$(CFG)),)
- CPPFLAGS += -DUSE_WINDOWS_SSPI
+ ifdef WIN32
+ CPPFLAGS += -DUSE_WINDOWS_SSPI
+ endif
endif
ifneq ($(findstring -ipv6,$(CFG)),)
CPPFLAGS += -DENABLE_IPV6
endif
-ifneq ($(findstring -ldaps,$(CFG)),)
- CPPFLAGS += -DHAVE_LDAP_SSL
+
+ifneq ($(findstring -watt,$(CFG))$(MSDOS),)
+ WATT_PATH ?= $(PROOT)/../watt
+ CPPFLAGS += -I"$(WATT_PATH)/inc"
+ _LDFLAGS += -L"$(WATT_PATH)/lib"
+ _LIBS += -lwatt
endif
-ifeq ($(findstring -lldap,$(LIBS)),)
- _LIBS += -lwldap32
+ifdef WIN32
+ ifeq ($(findstring -lldap,$(LIBS)),)
+ _LIBS += -lwldap32
+ endif
+ _LIBS += -lws2_32 -lcrypt32 -lbcrypt
endif
-_LIBS += -lws2_32 -lcrypt32 -lbcrypt
-ifneq ($(findstring 11,$(subst $() ,,$(SSLLIBS))),)
+ifneq ($(findstring 11,$(subst $(subst ,, ),,$(SSLLIBS))),)
CPPFLAGS += -DCURL_WITH_MULTI_SSL
endif
@@ -304,26 +337,93 @@ ifndef DYN
LIBS += $(_LIBS)
endif
-### Global rules
+### Common rules
+
+OBJ_DIR := $(TRIPLET)
ifneq ($(findstring /sh,$(SHELL)),)
-DEL = rm -f $1
-COPY = -cp -afv $1 $2
+DEL = rm -f $1
+COPY = -cp -afv $1 $2
+MKDIR = mkdir -p $1
+RMDIR = rm -fr $1
+WHICH = $(SHELL) -c "command -v $1"
else
-DEL = -del 2>NUL /q /f $(subst /,\,$1)
-COPY = -copy 2>NUL /y $(subst /,\,$1) $(subst /,\,$2)
+DEL = -del 2>NUL /q /f $(subst /,\,$1)
+COPY = -copy 2>NUL /y $(subst /,\,$1) $(subst /,\,$2)
+MKDIR = -md 2>NUL $(subst /,\,$1)
+RMDIR = -rd 2>NUL /q /s $(subst /,\,$1)
+WHICH = where $1
endif
all: $(TARGETS)
-%.o: %.c
- $(CC) -W -Wall $(CFLAGS) $(CPPFLAGS) -c $<
+$(OBJ_DIR):
+ -$(call MKDIR, $(OBJ_DIR))
-%.res: %.rc
+$(OBJ_DIR)/%.o: %.c
+ $(CC) -W -Wall $(CFLAGS) $(CPPFLAGS) -c $< -o $@
+
+$(OBJ_DIR)/%.res: %.rc
$(RC) -O coff $(RCFLAGS) -i $< -o $@
clean:
@$(call DEL, $(TOCLEAN))
+ @$(RMDIR) $(OBJ_DIR)
distclean vclean: clean
@$(call DEL, $(TARGETS) $(TOVCLEAN))
+
+### Local
+
+ifdef LOCAL
+
+CPPFLAGS += -DBUILDING_LIBCURL
+ifdef WIN32
+CPPFLAGS += -DCURL_STATICLIB
+endif
+
+### Sources and targets
+
+# Provides CSOURCES, HHEADERS, LIB_RCFILES
+include Makefile.inc
+
+vpath %.c vauth vquic vssh vtls
+
+libcurl_a_LIBRARY := libcurl.a
+ifdef WIN32
+CURL_DLL_SUFFIX ?=
+libcurl_dll_LIBRARY := libcurl$(CURL_DLL_SUFFIX).dll
+libcurl_dll_a_LIBRARY := libcurl.dll.a
+ifeq ($(findstring -trackmem,$(CFG)),)
+CURL_LDFLAGS_LIB += $(PROOT)/libcurl.def
+endif
+ifdef MAP
+libcurl_map_LIBRARY := libcurl$(CURL_DLL_SUFFIX).map
+CURL_LDFLAGS_LIB += -Wl,-Map,$(libcurl_map_LIBRARY)
+endif
+endif
+
+TARGETS := $(libcurl_a_LIBRARY) $(libcurl_dll_LIBRARY)
+
+libcurl_a_OBJECTS := $(patsubst %.c,$(OBJ_DIR)/%.o,$(notdir $(strip $(CSOURCES))))
+libcurl_a_DEPENDENCIES := $(strip $(CSOURCES) $(HHEADERS))
+ifdef WIN32
+libcurl_dll_OBJECTS := $(libcurl_a_OBJECTS)
+libcurl_dll_OBJECTS += $(patsubst %.rc,$(OBJ_DIR)/%.res,$(strip $(LIB_RCFILES)))
+endif
+
+TOCLEAN := $(libcurl_dll_OBJECTS)
+TOVCLEAN := $(libcurl_dll_LIBRARY:.dll=.def) $(libcurl_dll_a_LIBRARY) $(libcurl_map_LIBRARY)
+
+### Rules
+
+$(libcurl_a_LIBRARY): $(libcurl_a_OBJECTS) $(libcurl_a_DEPENDENCIES)
+ @$(call DEL, $@)
+ $(AR) rcs $@ $(libcurl_a_OBJECTS)
+
+$(libcurl_dll_LIBRARY): $(libcurl_dll_OBJECTS)
+ $(CC) $(LDFLAGS) -shared $(CURL_LDFLAGS_LIB) -o $@ $(libcurl_dll_OBJECTS) $(LIBS) \
+ -Wl,--output-def,$(@:.dll=.def),--out-implib,$(libcurl_dll_a_LIBRARY)
+
+all: $(OBJ_DIR) $(TARGETS)
+endif
diff --git a/docs/examples/makefile.dj b/lib/Makefile.soname
index 9f0de6690..02e003a8a 100644
--- a/docs/examples/makefile.dj
+++ b/lib/Makefile.soname
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -22,36 +22,21 @@
#
###########################################################################
-TOPDIR = ../..
+VERSIONCHANGE=12
+VERSIONADD=0
+VERSIONDEL=8
-include $(TOPDIR)/packages/DOS/common.dj
-
-CFLAGS += -DFALSE=0 -DTRUE=1
-
-LIBS = $(TOPDIR)/lib/libcurl.a
-
-ifeq ($(USE_SSL),1)
- LIBS += $(OPENSSL_ROOT)/lib/libssl.a $(OPENSSL_ROOT)/lib/libcrypt.a
-endif
-
-ifeq ($(USE_IDNA),1)
- LIBS += $(LIBIDN_ROOT)/lib/dj_obj/libidn.a -liconv
-endif
-
-LIBS += $(WATT32_ROOT)/lib/libwatt.a $(ZLIB_ROOT)/libz.a
-
-include Makefile.inc
-
-PROGRAMS = $(patsubst %,%.exe,$(check_PROGRAMS))
-
-all: $(PROGRAMS)
- @echo Welcome to libcurl example program
-
-%.exe: %.c
- $(CC) $(CFLAGS) -o $@ $^ $(LIBS)
- @echo
-
-clean vclean realclean:
- - rm -f $(PROGRAMS) depend.dj
-
--include depend.dj
+# libtool version:
+VERSIONINFO=-version-info $(VERSIONCHANGE):$(VERSIONADD):$(VERSIONDEL)
+# This flag accepts an argument of the form current[:revision[:age]]. So,
+# passing -version-info 3:12:1 sets current to 3, revision to 12, and age to
+# 1.
+#
+# Here's the simplified rule guide on how to change -version-info:
+# (current version is C:R:A)
+#
+# 1. if there are only source changes, use C:R+1:A
+# 2. if interfaces were added use C+1:0:A+1
+# 3. if interfaces were removed, then use C+1:0:0
+#
+# For the full guide on libcurl ABI rules, see docs/libcurl/ABI
diff --git a/lib/altsvc.c b/lib/altsvc.c
index 7bca84015..35450d6b1 100644
--- a/lib/altsvc.c
+++ b/lib/altsvc.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2019 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -38,6 +38,8 @@
#include "warnless.h"
#include "fopen.h"
#include "rename.h"
+#include "strdup.h"
+#include "inet_pton.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
@@ -95,19 +97,37 @@ static struct altsvc *altsvc_createid(const char *srchost,
unsigned int srcport,
unsigned int dstport)
{
- struct altsvc *as = calloc(sizeof(struct altsvc), 1);
+ struct altsvc *as = calloc(1, sizeof(struct altsvc));
size_t hlen;
+ size_t dlen;
if(!as)
return NULL;
hlen = strlen(srchost);
+ dlen = strlen(dsthost);
DEBUGASSERT(hlen);
- as->src.host = strdup(srchost);
+ DEBUGASSERT(dlen);
+ if(!hlen || !dlen)
+ /* bad input */
+ return NULL;
+ if((hlen > 2) && srchost[0] == '[') {
+ /* IPv6 address, strip off brackets */
+ srchost++;
+ hlen -= 2;
+ }
+ else if(srchost[hlen - 1] == '.')
+ /* strip off trailing dot */
+ hlen--;
+ if((dlen > 2) && dsthost[0] == '[') {
+ /* IPv6 address, strip off brackets */
+ dsthost++;
+ dlen -= 2;
+ }
+
+ as->src.host = Curl_strndup(srchost, hlen);
if(!as->src.host)
goto error;
- if(hlen && (srchost[hlen - 1] == '.'))
- /* strip off trailing any dot */
- as->src.host[--hlen] = 0;
- as->dst.host = strdup(dsthost);
+
+ as->dst.host = Curl_strndup(dsthost, dlen);
if(!as->dst.host)
goto error;
@@ -117,7 +137,7 @@ static struct altsvc *altsvc_createid(const char *srchost,
as->dst.port = curlx_ultous(dstport);
return as;
- error:
+error:
altsvc_free(as);
return NULL;
}
@@ -217,7 +237,7 @@ static CURLcode altsvc_load(struct altsvcinfo *asi, const char *file)
}
return result;
- fail:
+fail:
Curl_safefree(asi->filename);
free(line);
fclose(fp);
@@ -231,18 +251,40 @@ static CURLcode altsvc_load(struct altsvcinfo *asi, const char *file)
static CURLcode altsvc_out(struct altsvc *as, FILE *fp)
{
struct tm stamp;
+ const char *dst6_pre = "";
+ const char *dst6_post = "";
+ const char *src6_pre = "";
+ const char *src6_post = "";
CURLcode result = Curl_gmtime(as->expires, &stamp);
if(result)
return result;
-
+#ifdef ENABLE_IPV6
+ else {
+ char ipv6_unused[16];
+ if(1 == Curl_inet_pton(AF_INET6, as->dst.host, ipv6_unused)) {
+ dst6_pre = "[";
+ dst6_post = "]";
+ }
+ if(1 == Curl_inet_pton(AF_INET6, as->src.host, ipv6_unused)) {
+ src6_pre = "[";
+ src6_post = "]";
+ }
+ }
+#endif
fprintf(fp,
- "%s %s %u "
- "%s %s %u "
+ "%s %s%s%s %u "
+ "%s %s%s%s %u "
"\"%d%02d%02d "
"%02d:%02d:%02d\" "
"%u %d\n",
- Curl_alpnid2str(as->src.alpnid), as->src.host, as->src.port,
- Curl_alpnid2str(as->dst.alpnid), as->dst.host, as->dst.port,
+ Curl_alpnid2str(as->src.alpnid),
+ src6_pre, as->src.host, src6_post,
+ as->src.port,
+
+ Curl_alpnid2str(as->dst.alpnid),
+ dst6_pre, as->dst.host, dst6_post,
+ as->dst.port,
+
stamp.tm_year + 1900, stamp.tm_mon + 1, stamp.tm_mday,
stamp.tm_hour, stamp.tm_min, stamp.tm_sec,
as->persist, as->prio);
@@ -257,7 +299,7 @@ static CURLcode altsvc_out(struct altsvc *as, FILE *fp)
*/
struct altsvcinfo *Curl_altsvc_init(void)
{
- struct altsvcinfo *asi = calloc(sizeof(struct altsvcinfo), 1);
+ struct altsvcinfo *asi = calloc(1, sizeof(struct altsvcinfo));
if(!asi)
return NULL;
Curl_llist_init(&asi->list, NULL);
@@ -424,7 +466,7 @@ static void altsvc_flush(struct altsvcinfo *asi, enum alpnid srcalpnid,
#ifdef DEBUGBUILD
/* to play well with debug builds, we can *set* a fixed time this will
return */
-static time_t debugtime(void *unused)
+static time_t altsvc_debugtime(void *unused)
{
char *timestr = getenv("CURL_TIME");
(void)unused;
@@ -434,7 +476,8 @@ static time_t debugtime(void *unused)
}
return time(NULL);
}
-#define time(x) debugtime(x)
+#undef time
+#define time(x) altsvc_debugtime(x)
#endif
#define ISNEWLINE(x) (((x) == '\n') || (x) == '\r')
@@ -499,9 +542,21 @@ CURLcode Curl_altsvc_parse(struct Curl_easy *data,
if(*p != ':') {
/* host name starts here */
const char *hostp = p;
- while(*p && (ISALNUM(*p) || (*p == '.') || (*p == '-')))
- p++;
- len = p - hostp;
+ if(*p == '[') {
+ /* pass all valid IPv6 letters - does not handle zone id */
+ len = strspn(++p, "0123456789abcdefABCDEF:.");
+ if(p[len] != ']')
+ /* invalid host syntax, bail out */
+ break;
+ /* we store the IPv6 numerical address *with* brackets */
+ len += 2;
+ p = &p[len-1];
+ }
+ else {
+ while(*p && (ISALNUM(*p) || (*p == '.') || (*p == '-')))
+ p++;
+ len = p - hostp;
+ }
if(!len || (len >= MAX_ALTSVC_HOSTLEN)) {
infof(data, "Excessive alt-svc host name, ignoring.");
valid = FALSE;
@@ -517,15 +572,21 @@ CURLcode Curl_altsvc_parse(struct Curl_easy *data,
dsthost = srchost;
}
if(*p == ':') {
- /* a port number */
- unsigned long port = strtoul(++p, &end_ptr, 10);
- if(port > USHRT_MAX || end_ptr == p || *end_ptr != '\"') {
+ unsigned long port = 0;
+ p++;
+ if(ISDIGIT(*p))
+ /* a port number */
+ port = strtoul(p, &end_ptr, 10);
+ else
+ end_ptr = (char *)p; /* not left uninitialized */
+ if(!port || port > USHRT_MAX || end_ptr == p || *end_ptr != '\"') {
infof(data, "Unknown alt-svc port number, ignoring.");
valid = FALSE;
}
- else
+ else {
dstport = curlx_ultous(port);
- p = end_ptr;
+ p = end_ptr;
+ }
}
if(*p++ != '\"')
break;
diff --git a/lib/altsvc.h b/lib/altsvc.h
index 2751d272a..7fea1434a 100644
--- a/lib/altsvc.h
+++ b/lib/altsvc.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2019 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/amigaos.c b/lib/amigaos.c
index e8c2fc02e..139309b11 100644
--- a/lib/amigaos.c
+++ b/lib/amigaos.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -178,6 +178,7 @@ struct Curl_addrinfo *Curl_ipv4_resolve_r(const char *hostname,
#endif /* CURLRES_AMIGA */
#ifdef USE_AMISSL
+#include <signal.h>
int Curl_amiga_select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *errorfds, struct timeval *timeout)
{
diff --git a/lib/amigaos.h b/lib/amigaos.h
index 9abfb59ea..c99d963ec 100644
--- a/lib/amigaos.h
+++ b/lib/amigaos.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -39,4 +39,3 @@ void Curl_amiga_cleanup(void);
#endif
#endif /* HEADER_CURL_AMIGAOS_H */
-
diff --git a/lib/arpa_telnet.h b/lib/arpa_telnet.h
index 523f7f51e..228b4466e 100644
--- a/lib/arpa_telnet.h
+++ b/lib/arpa_telnet.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -56,12 +56,14 @@ static const char * const telnetoptions[]=
"TERM SPEED", "LFLOW", "LINEMODE", "XDISPLOC",
"OLD-ENVIRON", "AUTHENTICATION", "ENCRYPT", "NEW-ENVIRON"
};
+#define CURL_TELOPT(x) telnetoptions[x]
+#else
+#define CURL_TELOPT(x) ""
#endif
#define CURL_TELOPT_MAXIMUM CURL_TELOPT_NEW_ENVIRON
#define CURL_TELOPT_OK(x) ((x) <= CURL_TELOPT_MAXIMUM)
-#define CURL_TELOPT(x) telnetoptions[x]
#define CURL_NTELOPTS 40
@@ -103,7 +105,12 @@ static const char * const telnetcmds[]=
#define CURL_TELCMD_OK(x) ( ((unsigned int)(x) >= CURL_TELCMD_MINIMUM) && \
((unsigned int)(x) <= CURL_TELCMD_MAXIMUM) )
+
+#ifndef CURL_DISABLE_VERBOSE_STRINGS
#define CURL_TELCMD(x) telnetcmds[(x)-CURL_TELCMD_MINIMUM]
+#else
+#define CURL_TELCMD(x) ""
+#endif
#endif /* CURL_DISABLE_TELNET */
diff --git a/lib/asyn-ares.c b/lib/asyn-ares.c
index 33edba139..437c9337f 100644
--- a/lib/asyn-ares.c
+++ b/lib/asyn-ares.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -47,15 +47,6 @@
#include <inet.h>
#endif
-#ifdef HAVE_PROCESS_H
-#include <process.h>
-#endif
-
-#if (defined(NETWARE) && defined(__NOVELL_LIBC__))
-#undef in_addr_t
-#define in_addr_t unsigned long
-#endif
-
#include "urldata.h"
#include "sendf.h"
#include "hostip.h"
@@ -69,13 +60,13 @@
#include "progress.h"
#include "timediff.h"
-# if defined(CURL_STATICLIB) && !defined(CARES_STATICLIB) && \
- defined(WIN32)
-# define CARES_STATICLIB
-# endif
-# include <ares.h>
-# include <ares_version.h> /* really old c-ares didn't include this by
- itself */
+#if defined(CURL_STATICLIB) && !defined(CARES_STATICLIB) && \
+ defined(_WIN32)
+# define CARES_STATICLIB
+#endif
+#include <ares.h>
+#include <ares_version.h> /* really old c-ares didn't include this by
+ itself */
#if ARES_VERSION >= 0x010500
/* c-ares 1.5.0 or later, the callback proto is modified */
@@ -119,7 +110,7 @@ struct thread_data {
};
/* How long we are willing to wait for additional parallel responses after
- obtaining a "definitive" one.
+ obtaining a "definitive" one. For old c-ares without getaddrinfo.
This is intended to equal the c-ares default timeout. cURL always uses that
default value. Unfortunately, c-ares doesn't expose its default timeout in
@@ -129,6 +120,8 @@ struct thread_data {
*/
#define HAPPY_EYEBALLS_DNS_TIMEOUT 5000
+#define CARES_TIMEOUT_PER_ATTEMPT 2000
+
/*
* Curl_resolver_global_init() - the generic low-level asynchronous name
* resolve API. Called from curl_global_init() to initialize global resolver
@@ -182,6 +175,9 @@ CURLcode Curl_resolver_init(struct Curl_easy *easy, void **resolver)
int optmask = ARES_OPT_SOCK_STATE_CB;
options.sock_state_cb = sock_state_cb;
options.sock_state_cb_data = easy;
+ options.timeout = CARES_TIMEOUT_PER_ATTEMPT;
+ optmask |= ARES_OPT_TIMEOUTMS;
+
status = ares_init_options((ares_channel*)resolver, &options, optmask);
if(status != ARES_SUCCESS) {
if(status == ARES_ENOMEM)
@@ -232,9 +228,9 @@ static void destroy_async_data(struct Curl_async *async);
void Curl_resolver_cancel(struct Curl_easy *data)
{
DEBUGASSERT(data);
- if(data->state.async.resolver)
- ares_cancel((ares_channel)data->state.async.resolver);
- destroy_async_data(&data->state.async);
+ if(data->conn->resolve_async.resolver)
+ ares_cancel((ares_channel)data->conn->resolve_async.resolver);
+ destroy_async_data(&data->conn->resolve_async);
}
/*
@@ -282,14 +278,14 @@ int Curl_resolver_getsock(struct Curl_easy *data,
struct timeval timebuf;
struct timeval *timeout;
long milli;
- int max = ares_getsock((ares_channel)data->state.async.resolver,
+ int max = ares_getsock((ares_channel)data->conn->resolve_async.resolver,
(ares_socket_t *)socks, MAX_SOCKSPEREASYHANDLE);
maxtime.tv_sec = CURL_TIMEOUT_RESOLVE;
maxtime.tv_usec = 0;
- timeout = ares_timeout((ares_channel)data->state.async.resolver, &maxtime,
- &timebuf);
+ timeout = ares_timeout((ares_channel)data->conn->resolve_async.resolver,
+ &maxtime, &timebuf);
milli = (long)curlx_tvtoms(timeout);
if(milli == 0)
milli += 10;
@@ -317,8 +313,8 @@ static int waitperform(struct Curl_easy *data, timediff_t timeout_ms)
int i;
int num = 0;
- bitmask = ares_getsock((ares_channel)data->state.async.resolver, socks,
- ARES_GETSOCK_MAXNUM);
+ bitmask = ares_getsock((ares_channel)data->conn->resolve_async.resolver,
+ socks, ARES_GETSOCK_MAXNUM);
for(i = 0; i < ARES_GETSOCK_MAXNUM; i++) {
pfd[i].events = 0;
@@ -348,12 +344,12 @@ static int waitperform(struct Curl_easy *data, timediff_t timeout_ms)
if(!nfds)
/* Call ares_process() unconditionally here, even if we simply timed out
above, as otherwise the ares name resolve won't timeout! */
- ares_process_fd((ares_channel)data->state.async.resolver, ARES_SOCKET_BAD,
- ARES_SOCKET_BAD);
+ ares_process_fd((ares_channel)data->conn->resolve_async.resolver,
+ ARES_SOCKET_BAD, ARES_SOCKET_BAD);
else {
/* move through the descriptors and ask for processing on them */
for(i = 0; i < num; i++)
- ares_process_fd((ares_channel)data->state.async.resolver,
+ ares_process_fd((ares_channel)data->conn->resolve_async.resolver,
(pfd[i].revents & (POLLRDNORM|POLLIN))?
pfd[i].fd:ARES_SOCKET_BAD,
(pfd[i].revents & (POLLWRNORM|POLLOUT))?
@@ -372,7 +368,7 @@ static int waitperform(struct Curl_easy *data, timediff_t timeout_ms)
CURLcode Curl_resolver_is_resolved(struct Curl_easy *data,
struct Curl_dns_entry **dns)
{
- struct thread_data *res = data->state.async.tdata;
+ struct thread_data *res = data->conn->resolve_async.tdata;
CURLcode result = CURLE_OK;
DEBUGASSERT(dns);
@@ -401,7 +397,7 @@ CURLcode Curl_resolver_is_resolved(struct Curl_easy *data,
ARES_ECANCELLED synchronously for all pending responses. This will
leave us with res->num_pending == 0, which is perfect for the next
block. */
- ares_cancel((ares_channel)data->state.async.resolver);
+ ares_cancel((ares_channel)data->conn->resolve_async.resolver);
DEBUGASSERT(res->num_pending == 0);
}
#endif
@@ -412,12 +408,12 @@ CURLcode Curl_resolver_is_resolved(struct Curl_easy *data,
them */
res->temp_ai = NULL;
- if(!data->state.async.dns)
+ if(!data->conn->resolve_async.dns)
result = Curl_resolver_error(data);
else
- *dns = data->state.async.dns;
+ *dns = data->conn->resolve_async.dns;
- destroy_async_data(&data->state.async);
+ destroy_async_data(&data->conn->resolve_async);
}
return result;
@@ -468,7 +464,8 @@ CURLcode Curl_resolver_wait_resolv(struct Curl_easy *data,
store.tv_sec = itimeout/1000;
store.tv_usec = (itimeout%1000)*1000;
- tvp = ares_timeout((ares_channel)data->state.async.resolver, &store, &tv);
+ tvp = ares_timeout((ares_channel)data->conn->resolve_async.resolver,
+ &store, &tv);
/* use the timeout period ares returned to us above if less than one
second is left, otherwise just use 1000ms to make sure the progress
@@ -482,7 +479,7 @@ CURLcode Curl_resolver_wait_resolv(struct Curl_easy *data,
return CURLE_UNRECOVERABLE_POLL;
result = Curl_resolver_is_resolved(data, entry);
- if(result || data->state.async.done)
+ if(result || data->conn->resolve_async.done)
break;
if(Curl_pgrsUpdate(data))
@@ -503,12 +500,12 @@ CURLcode Curl_resolver_wait_resolv(struct Curl_easy *data,
}
if(result)
/* failure, so we cancel the ares operation */
- ares_cancel((ares_channel)data->state.async.resolver);
+ ares_cancel((ares_channel)data->conn->resolve_async.resolver);
/* Operation complete, if the lookup was successful we now have the entry
in the cache. */
if(entry)
- *entry = data->state.async.dns;
+ *entry = data->conn->resolve_async.dns;
if(result)
/* close the connection, since we can't return failure here without
@@ -575,12 +572,13 @@ static void query_completed_cb(void *arg, /* (struct connectdata *) */
be valid so only defer it when we know the 'status' says its fine! */
return;
- res = data->state.async.tdata;
+ res = data->conn->resolve_async.tdata;
if(res) {
res->num_pending--;
if(CURL_ASYNC_SUCCESS == status) {
- struct Curl_addrinfo *ai = Curl_he2ai(hostent, data->state.async.port);
+ struct Curl_addrinfo *ai = Curl_he2ai(hostent,
+ data->conn->resolve_async.port);
if(ai) {
compound_results(res, ai);
}
@@ -731,14 +729,16 @@ static void addrinfo_cb(void *arg, int status, int timeouts,
struct ares_addrinfo *result)
{
struct Curl_easy *data = (struct Curl_easy *)arg;
- struct thread_data *res = data->state.async.tdata;
- (void)timeouts;
- if(ARES_SUCCESS == status) {
- res->temp_ai = ares2addr(result->nodes);
- res->last_status = CURL_ASYNC_SUCCESS;
- ares_freeaddrinfo(result);
+ if(data->conn) {
+ struct thread_data *res = data->conn->resolve_async.tdata;
+ (void)timeouts;
+ if(ARES_SUCCESS == status) {
+ res->temp_ai = ares2addr(result->nodes);
+ res->last_status = CURL_ASYNC_SUCCESS;
+ ares_freeaddrinfo(result);
+ }
+ res->num_pending--;
}
- res->num_pending--;
}
#endif
@@ -759,15 +759,15 @@ struct Curl_addrinfo *Curl_resolver_getaddrinfo(struct Curl_easy *data,
size_t namelen = strlen(hostname);
*waitp = 0; /* default to synchronous response */
- res = calloc(sizeof(struct thread_data) + namelen, 1);
+ res = calloc(1, sizeof(struct thread_data) + namelen);
if(res) {
strcpy(res->hostname, hostname);
- data->state.async.hostname = res->hostname;
- data->state.async.port = port;
- data->state.async.done = FALSE; /* not done */
- data->state.async.status = 0; /* clear */
- data->state.async.dns = NULL; /* clear */
- data->state.async.tdata = res;
+ data->conn->resolve_async.hostname = res->hostname;
+ data->conn->resolve_async.port = port;
+ data->conn->resolve_async.done = FALSE; /* not done */
+ data->conn->resolve_async.status = 0; /* clear */
+ data->conn->resolve_async.dns = NULL; /* clear */
+ data->conn->resolve_async.tdata = res;
/* initial status - failed */
res->last_status = ARES_ENOTFOUND;
@@ -779,9 +779,14 @@ struct Curl_addrinfo *Curl_resolver_getaddrinfo(struct Curl_easy *data,
int pf = PF_INET;
memset(&hints, 0, sizeof(hints));
#ifdef CURLRES_IPV6
- if((data->conn->ip_version != CURL_IPRESOLVE_V4) && Curl_ipv6works(data))
+ if((data->conn->ip_version != CURL_IPRESOLVE_V4) &&
+ Curl_ipv6works(data)) {
/* The stack seems to be IPv6-enabled */
- pf = PF_UNSPEC;
+ if(data->conn->ip_version == CURL_IPRESOLVE_V6)
+ pf = PF_INET6;
+ else
+ pf = PF_UNSPEC;
+ }
#endif /* CURLRES_IPV6 */
hints.ai_family = pf;
hints.ai_socktype = (data->conn->transport == TRNSPRT_TCP)?
@@ -792,8 +797,8 @@ struct Curl_addrinfo *Curl_resolver_getaddrinfo(struct Curl_easy *data,
hints.ai_flags = ARES_AI_NUMERICSERV;
msnprintf(service, sizeof(service), "%d", port);
res->num_pending = 1;
- ares_getaddrinfo((ares_channel)data->state.async.resolver, hostname,
- service, &hints, addrinfo_cb, data);
+ ares_getaddrinfo((ares_channel)data->conn->resolve_async.resolver,
+ hostname, service, &hints, addrinfo_cb, data);
}
#else
@@ -803,10 +808,10 @@ struct Curl_addrinfo *Curl_resolver_getaddrinfo(struct Curl_easy *data,
res->num_pending = 2;
/* areschannel is already setup in the Curl_open() function */
- ares_gethostbyname((ares_channel)data->state.async.resolver, hostname,
- PF_INET, query_completed_cb, data);
- ares_gethostbyname((ares_channel)data->state.async.resolver, hostname,
- PF_INET6, query_completed_cb, data);
+ ares_gethostbyname((ares_channel)data->conn->resolve_async.resolver,
+ hostname, PF_INET, query_completed_cb, data);
+ ares_gethostbyname((ares_channel)data->conn->resolve_async.resolver,
+ hostname, PF_INET6, query_completed_cb, data);
}
else
#endif
@@ -814,7 +819,7 @@ struct Curl_addrinfo *Curl_resolver_getaddrinfo(struct Curl_easy *data,
res->num_pending = 1;
/* areschannel is already setup in the Curl_open() function */
- ares_gethostbyname((ares_channel)data->state.async.resolver,
+ ares_gethostbyname((ares_channel)data->conn->resolve_async.resolver,
hostname, PF_INET,
query_completed_cb, data);
}
@@ -828,6 +833,7 @@ CURLcode Curl_set_dns_servers(struct Curl_easy *data,
char *servers)
{
CURLcode result = CURLE_NOT_BUILT_IN;
+ ares_channel channel, lchannel = NULL;
int ares_result;
/* If server is NULL or empty, this would purge all DNS servers
@@ -840,11 +846,23 @@ CURLcode Curl_set_dns_servers(struct Curl_easy *data,
return CURLE_OK;
#ifdef HAVE_CARES_SERVERS_CSV
+ if(data->conn)
+ channel = data->conn->resolve_async.resolver;
+ else {
+ /* we are called by setopt on a data without a connection (yet). In that
+ * case we set the value on a local instance for checking.
+ * The configured data options are set when the connection for this
+ * transfer is created. */
+ result = Curl_resolver_init(data, (void **)&lchannel);
+ if(result)
+ goto out;
+ channel = lchannel;
+ }
+
#ifdef HAVE_CARES_PORTS_CSV
- ares_result = ares_set_servers_ports_csv(data->state.async.resolver,
- servers);
+ ares_result = ares_set_servers_ports_csv(channel, servers);
#else
- ares_result = ares_set_servers_csv(data->state.async.resolver, servers);
+ ares_result = ares_set_servers_csv(channel, servers);
#endif
switch(ares_result) {
case ARES_SUCCESS:
@@ -860,6 +878,9 @@ CURLcode Curl_set_dns_servers(struct Curl_easy *data,
result = CURLE_BAD_FUNCTION_ARGUMENT;
break;
}
+out:
+ if(lchannel)
+ Curl_resolver_cleanup(lchannel);
#else /* too old c-ares version! */
(void)data;
(void)(ares_result);
@@ -871,11 +892,14 @@ CURLcode Curl_set_dns_interface(struct Curl_easy *data,
const char *interf)
{
#ifdef HAVE_CARES_LOCAL_DEV
- if(!interf)
- interf = "";
-
- ares_set_local_dev((ares_channel)data->state.async.resolver, interf);
+ if(data->conn) {
+ /* not a setopt test run, set the value */
+ if(!interf)
+ interf = "";
+ ares_set_local_dev((ares_channel)data->conn->resolve_async.resolver,
+ interf);
+ }
return CURLE_OK;
#else /* c-ares version too old! */
(void)data;
@@ -899,8 +923,11 @@ CURLcode Curl_set_dns_local_ip4(struct Curl_easy *data,
}
}
- ares_set_local_ip4((ares_channel)data->state.async.resolver,
- ntohl(a4.s_addr));
+ if(data->conn) {
+ /* not a setopt test run, set the value */
+ ares_set_local_ip4((ares_channel)data->conn->resolve_async.resolver,
+ ntohl(a4.s_addr));
+ }
return CURLE_OK;
#else /* c-ares version too old! */
@@ -926,7 +953,10 @@ CURLcode Curl_set_dns_local_ip6(struct Curl_easy *data,
}
}
- ares_set_local_ip6((ares_channel)data->state.async.resolver, a6);
+ if(data->conn) {
+ /* not a setopt test run, set the value */
+ ares_set_local_ip6((ares_channel)data->conn->resolve_async.resolver, a6);
+ }
return CURLE_OK;
#else /* c-ares version too old! */
diff --git a/lib/asyn-thread.c b/lib/asyn-thread.c
index 8b375eb5e..63414b617 100644
--- a/lib/asyn-thread.c
+++ b/lib/asyn-thread.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -44,19 +44,8 @@
#include <inet.h>
#endif
-#if defined(USE_THREADS_POSIX)
-# ifdef HAVE_PTHREAD_H
-# include <pthread.h>
-# endif
-#elif defined(USE_THREADS_WIN32)
-# ifdef HAVE_PROCESS_H
-# include <process.h>
-# endif
-#endif
-
-#if (defined(NETWARE) && defined(__NOVELL_LIBC__))
-#undef in_addr_t
-#define in_addr_t unsigned long
+#if defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)
+# include <pthread.h>
#endif
#ifdef HAVE_GETADDRINFO
@@ -75,7 +64,6 @@
#include "inet_ntop.h"
#include "curl_threads.h"
#include "connect.h"
-#include "socketpair.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
@@ -148,7 +136,7 @@ static void destroy_async_data(struct Curl_async *);
*/
void Curl_resolver_cancel(struct Curl_easy *data)
{
- destroy_async_data(&data->state.async);
+ destroy_async_data(&data->conn->resolve_async);
}
/* This function is used to init a threaded resolve */
@@ -185,7 +173,7 @@ struct thread_data {
static struct thread_sync_data *conn_thread_sync_data(struct Curl_easy *data)
{
- return &(data->state.async.tdata->tsd);
+ return &(data->conn->resolve_async.tdata->tsd);
}
/* Destroy resolver thread synchronization data */
@@ -208,7 +196,7 @@ void destroy_thread_sync_data(struct thread_sync_data *tsd)
* the other end (for reading) is always closed in the parent thread.
*/
if(tsd->sock_pair[1] != CURL_SOCKET_BAD) {
- sclose(tsd->sock_pair[1]);
+ wakeup_close(tsd->sock_pair[1]);
}
#endif
memset(tsd, 0, sizeof(*tsd));
@@ -245,8 +233,8 @@ int init_thread_sync_data(struct thread_data *td,
Curl_mutex_init(tsd->mtx);
#ifndef CURL_DISABLE_SOCKETPAIR
- /* create socket pair, avoid AF_LOCAL since it doesn't build on Solaris */
- if(Curl_socketpair(AF_UNIX, SOCK_STREAM, 0, &tsd->sock_pair[0]) < 0) {
+ /* create socket pair or pipe */
+ if(wakeup_create(&tsd->sock_pair[0]) < 0) {
tsd->sock_pair[0] = CURL_SOCKET_BAD;
tsd->sock_pair[1] = CURL_SOCKET_BAD;
goto err_exit;
@@ -263,10 +251,10 @@ int init_thread_sync_data(struct thread_data *td,
return 1;
- err_exit:
+err_exit:
#ifndef CURL_DISABLE_SOCKETPAIR
if(tsd->sock_pair[0] != CURL_SOCKET_BAD) {
- sclose(tsd->sock_pair[0]);
+ wakeup_close(tsd->sock_pair[0]);
tsd->sock_pair[0] = CURL_SOCKET_BAD;
}
#endif
@@ -332,7 +320,7 @@ static unsigned int CURL_STDCALL getaddrinfo_thread(void *arg)
if(tsd->sock_pair[1] != CURL_SOCKET_BAD) {
/* DNS has been resolved, signal client task */
buf[0] = 1;
- if(swrite(tsd->sock_pair[1], buf, sizeof(buf)) < 0) {
+ if(wakeup_write(tsd->sock_pair[1], buf, sizeof(buf)) < 0) {
/* update sock_erro to errno */
tsd->sock_error = SOCKERRNO;
}
@@ -440,9 +428,9 @@ static bool init_resolve_thread(struct Curl_easy *data,
{
struct thread_data *td = calloc(1, sizeof(struct thread_data));
int err = ENOMEM;
- struct Curl_async *asp = &data->state.async;
+ struct Curl_async *asp = &data->conn->resolve_async;
- data->state.async.tdata = td;
+ data->conn->resolve_async.tdata = td;
if(!td)
goto errno_exit;
@@ -481,10 +469,10 @@ static bool init_resolve_thread(struct Curl_easy *data,
return TRUE;
- err_exit:
+err_exit:
destroy_async_data(asp);
- errno_exit:
+errno_exit:
errno = err;
return FALSE;
}
@@ -500,7 +488,7 @@ static CURLcode thread_wait_resolv(struct Curl_easy *data,
CURLcode result = CURLE_OK;
DEBUGASSERT(data);
- td = data->state.async.tdata;
+ td = data->conn->resolve_async.tdata;
DEBUGASSERT(td);
DEBUGASSERT(td->thread_hnd != curl_thread_t_null);
@@ -512,18 +500,18 @@ static CURLcode thread_wait_resolv(struct Curl_easy *data,
else
DEBUGASSERT(0);
- data->state.async.done = TRUE;
+ data->conn->resolve_async.done = TRUE;
if(entry)
- *entry = data->state.async.dns;
+ *entry = data->conn->resolve_async.dns;
- if(!data->state.async.dns && report)
+ if(!data->conn->resolve_async.dns && report)
/* a name was not resolved, report error */
result = Curl_resolver_error(data);
- destroy_async_data(&data->state.async);
+ destroy_async_data(&data->conn->resolve_async);
- if(!data->state.async.dns && report)
+ if(!data->conn->resolve_async.dns && report)
connclose(data->conn, "asynch resolve failed");
return result;
@@ -536,12 +524,13 @@ static CURLcode thread_wait_resolv(struct Curl_easy *data,
*/
void Curl_resolver_kill(struct Curl_easy *data)
{
- struct thread_data *td = data->state.async.tdata;
+ struct thread_data *td = data->conn->resolve_async.tdata;
/* If we're still resolving, we must wait for the threads to fully clean up,
unfortunately. Otherwise, we can simply cancel to clean up any resolver
data. */
- if(td && td->thread_hnd != curl_thread_t_null)
+ if(td && td->thread_hnd != curl_thread_t_null
+ && (data->set.quick_exit != 1L))
(void)thread_wait_resolv(data, NULL, FALSE);
else
Curl_resolver_cancel(data);
@@ -574,7 +563,7 @@ CURLcode Curl_resolver_wait_resolv(struct Curl_easy *data,
CURLcode Curl_resolver_is_resolved(struct Curl_easy *data,
struct Curl_dns_entry **entry)
{
- struct thread_data *td = data->state.async.tdata;
+ struct thread_data *td = data->conn->resolve_async.tdata;
int done = 0;
DEBUGASSERT(entry);
@@ -592,13 +581,13 @@ CURLcode Curl_resolver_is_resolved(struct Curl_easy *data,
if(done) {
getaddrinfo_complete(data);
- if(!data->state.async.dns) {
+ if(!data->conn->resolve_async.dns) {
CURLcode result = Curl_resolver_error(data);
- destroy_async_data(&data->state.async);
+ destroy_async_data(&data->conn->resolve_async);
return result;
}
- destroy_async_data(&data->state.async);
- *entry = data->state.async.dns;
+ destroy_async_data(&data->conn->resolve_async);
+ *entry = data->conn->resolve_async.dns;
}
else {
/* poll for name lookup done with exponential backoff up to 250ms */
@@ -630,9 +619,9 @@ int Curl_resolver_getsock(struct Curl_easy *data, curl_socket_t *socks)
int ret_val = 0;
timediff_t milli;
timediff_t ms;
- struct resdata *reslv = (struct resdata *)data->state.async.resolver;
+ struct resdata *reslv = (struct resdata *)data->conn->resolve_async.resolver;
#ifndef CURL_DISABLE_SOCKETPAIR
- struct thread_data *td = data->state.async.tdata;
+ struct thread_data *td = data->conn->resolve_async.tdata;
#else
(void)socks;
#endif
@@ -673,7 +662,7 @@ struct Curl_addrinfo *Curl_resolver_getaddrinfo(struct Curl_easy *data,
int port,
int *waitp)
{
- struct resdata *reslv = (struct resdata *)data->state.async.resolver;
+ struct resdata *reslv = (struct resdata *)data->conn->resolve_async.resolver;
*waitp = 0; /* default to synchronous response */
@@ -702,14 +691,18 @@ struct Curl_addrinfo *Curl_resolver_getaddrinfo(struct Curl_easy *data,
{
struct addrinfo hints;
int pf = PF_INET;
- struct resdata *reslv = (struct resdata *)data->state.async.resolver;
+ struct resdata *reslv = (struct resdata *)data->conn->resolve_async.resolver;
*waitp = 0; /* default to synchronous response */
#ifdef CURLRES_IPV6
- if((data->conn->ip_version != CURL_IPRESOLVE_V4) && Curl_ipv6works(data))
+ if((data->conn->ip_version != CURL_IPRESOLVE_V4) && Curl_ipv6works(data)) {
/* The stack seems to be IPv6-enabled */
- pf = PF_UNSPEC;
+ if(data->conn->ip_version == CURL_IPRESOLVE_V6)
+ pf = PF_INET6;
+ else
+ pf = PF_UNSPEC;
+ }
#endif /* CURLRES_IPV6 */
memset(&hints, 0, sizeof(hints));
diff --git a/lib/asyn.h b/lib/asyn.h
index 1aab21aaa..7e207c4f5 100644
--- a/lib/asyn.h
+++ b/lib/asyn.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/base64.c b/lib/base64.c
index 52654c2bc..919eb6235 100644
--- a/lib/base64.c
+++ b/lib/base64.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -31,20 +31,21 @@
!defined(CURL_DISABLE_SMTP) || \
!defined(CURL_DISABLE_POP3) || \
!defined(CURL_DISABLE_IMAP) || \
- !defined(CURL_DISABLE_DOH) || defined(USE_SSL)
-
-#include "urldata.h" /* for the Curl_easy definition */
+ !defined(CURL_DISABLE_DIGEST_AUTH) || \
+ !defined(CURL_DISABLE_DOH) || defined(USE_SSL) || defined(BUILDING_CURL)
+#include "curl/curl.h"
#include "warnless.h"
#include "curl_base64.h"
-/* The last 3 #include files should be in this order */
-#include "curl_printf.h"
+/* The last 2 #include files should be in this order */
+#ifdef BUILDING_LIBCURL
#include "curl_memory.h"
+#endif
#include "memdebug.h"
/* ---- Base64 Encoding/Decoding Table --- */
/* Padding character string starts at offset 64. */
-static const char base64[]=
+static const char base64encdec[]=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
/* The Base 64 encoding with a URL and filename safe alphabet, RFC 4648
@@ -52,39 +53,12 @@ static const char base64[]=
static const char base64url[]=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
-static size_t decodeQuantum(unsigned char *dest, const char *src)
-{
- size_t padding = 0;
- const char *s;
- unsigned long i, x = 0;
-
- for(i = 0, s = src; i < 4; i++, s++) {
- if(*s == '=') {
- x <<= 6;
- padding++;
- }
- else {
- const char *p = strchr(base64, *s);
- if(p)
- x = (x << 6) + curlx_uztoul(p - base64);
- else
- return 0;
- }
- }
-
- if(padding < 1)
- dest[2] = curlx_ultouc(x & 0xFFUL);
-
- x >>= 8;
- if(padding < 2)
- dest[1] = curlx_ultouc(x & 0xFFUL);
-
- x >>= 8;
- dest[0] = curlx_ultouc(x & 0xFFUL);
-
- return 3 - padding;
-}
-
+static const unsigned char decodetable[] =
+{ 62, 255, 255, 255, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, 255,
+ 255, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255, 255, 26, 27, 28,
+ 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51 };
/*
* Curl_base64_decode()
*
@@ -106,10 +80,11 @@ CURLcode Curl_base64_decode(const char *src,
size_t padding = 0;
size_t i;
size_t numQuantums;
+ size_t fullQuantums;
size_t rawlen = 0;
- const char *padptr;
unsigned char *pos;
unsigned char *newstr;
+ unsigned char lookup[256];
*outptr = NULL;
*outlen = 0;
@@ -119,21 +94,18 @@ CURLcode Curl_base64_decode(const char *src,
if(!srclen || srclen % 4)
return CURLE_BAD_CONTENT_ENCODING;
- /* Find the position of any = padding characters */
- padptr = strchr(src, '=');
- if(padptr) {
+ /* srclen is at least 4 here */
+ while(src[srclen - 1 - padding] == '=') {
+ /* count padding characters */
padding++;
/* A maximum of two = padding characters is allowed */
- if(padptr[1] == '=')
- padding++;
-
- /* Check the = padding characters weren't part way through the input */
- if(padptr + padding != src + srclen)
+ if(padding > 2)
return CURLE_BAD_CONTENT_ENCODING;
}
/* Calculate the number of quantums */
numQuantums = srclen / 4;
+ fullQuantums = numQuantums - (padding ? 1 : 0);
/* Calculate the size of the decoded string */
rawlen = (numQuantums * 3) - padding;
@@ -145,17 +117,59 @@ CURLcode Curl_base64_decode(const char *src,
pos = newstr;
- /* Decode the quantums */
- for(i = 0; i < numQuantums; i++) {
- size_t result = decodeQuantum(pos, src);
- if(!result) {
- free(newstr);
-
- return CURLE_BAD_CONTENT_ENCODING;
+ memset(lookup, 0xff, sizeof(lookup));
+ memcpy(&lookup['+'], decodetable, sizeof(decodetable));
+ /* replaces
+ {
+ unsigned char c;
+ const unsigned char *p = (const unsigned char *)base64encdec;
+ for(c = 0; *p; c++, p++)
+ lookup[*p] = c;
+ }
+ */
+
+ /* Decode the complete quantums first */
+ for(i = 0; i < fullQuantums; i++) {
+ unsigned char val;
+ unsigned int x = 0;
+ int j;
+
+ for(j = 0; j < 4; j++) {
+ val = lookup[(unsigned char)*src++];
+ if(val == 0xff) /* bad symbol */
+ goto bad;
+ x = (x << 6) | val;
}
-
- pos += result;
- src += 4;
+ pos[2] = x & 0xff;
+ pos[1] = (x >> 8) & 0xff;
+ pos[0] = (x >> 16) & 0xff;
+ pos += 3;
+ }
+ if(padding) {
+ /* this means either 8 or 16 bits output */
+ unsigned char val;
+ unsigned int x = 0;
+ int j;
+ size_t padc = 0;
+ for(j = 0; j < 4; j++) {
+ if(*src == '=') {
+ x <<= 6;
+ src++;
+ if(++padc > padding)
+ /* this is a badly placed '=' symbol! */
+ goto bad;
+ }
+ else {
+ val = lookup[(unsigned char)*src++];
+ if(val == 0xff) /* bad symbol */
+ goto bad;
+ x = (x << 6) | val;
+ }
+ }
+ if(padding == 1)
+ pos[1] = (x >> 8) & 0xff;
+ pos[0] = (x >> 16) & 0xff;
+ pos += 3 - padding;
}
/* Zero terminate */
@@ -166,81 +180,60 @@ CURLcode Curl_base64_decode(const char *src,
*outlen = rawlen;
return CURLE_OK;
+bad:
+ free(newstr);
+ return CURLE_BAD_CONTENT_ENCODING;
}
static CURLcode base64_encode(const char *table64,
const char *inputbuff, size_t insize,
char **outptr, size_t *outlen)
{
- unsigned char ibuf[3];
- unsigned char obuf[4];
- int i;
- int inputparts;
char *output;
char *base64data;
- const char *indata = inputbuff;
+ const unsigned char *in = (unsigned char *)inputbuff;
const char *padstr = &table64[64]; /* Point to padding string. */
*outptr = NULL;
*outlen = 0;
if(!insize)
- insize = strlen(indata);
+ insize = strlen(inputbuff);
#if SIZEOF_SIZE_T == 4
if(insize > UINT_MAX/4)
return CURLE_OUT_OF_MEMORY;
#endif
- base64data = output = malloc(insize * 4 / 3 + 4);
+ base64data = output = malloc((insize + 2) / 3 * 4 + 1);
if(!output)
return CURLE_OUT_OF_MEMORY;
- while(insize > 0) {
- for(i = inputparts = 0; i < 3; i++) {
- if(insize > 0) {
- inputparts++;
- ibuf[i] = (unsigned char) *indata;
- indata++;
- insize--;
+ while(insize >= 3) {
+ *output++ = table64[ in[0] >> 2 ];
+ *output++ = table64[ ((in[0] & 0x03) << 4) | (in[1] >> 4) ];
+ *output++ = table64[ ((in[1] & 0x0F) << 2) | ((in[2] & 0xC0) >> 6) ];
+ *output++ = table64[ in[2] & 0x3F ];
+ insize -= 3;
+ in += 3;
+ }
+ if(insize) {
+ /* this is only one or two bytes now */
+ *output++ = table64[ in[0] >> 2 ];
+ if(insize == 1) {
+ *output++ = table64[ ((in[0] & 0x03) << 4) ];
+ if(*padstr) {
+ *output++ = *padstr;
+ *output++ = *padstr;
}
- else
- ibuf[i] = 0;
}
-
- obuf[0] = (unsigned char) ((ibuf[0] & 0xFC) >> 2);
- obuf[1] = (unsigned char) (((ibuf[0] & 0x03) << 4) | \
- ((ibuf[1] & 0xF0) >> 4));
- obuf[2] = (unsigned char) (((ibuf[1] & 0x0F) << 2) | \
- ((ibuf[2] & 0xC0) >> 6));
- obuf[3] = (unsigned char) (ibuf[2] & 0x3F);
-
- switch(inputparts) {
- case 1: /* only one byte read */
- i = msnprintf(output, 5, "%c%c%s%s",
- table64[obuf[0]],
- table64[obuf[1]],
- padstr,
- padstr);
- break;
-
- case 2: /* two bytes read */
- i = msnprintf(output, 5, "%c%c%c%s",
- table64[obuf[0]],
- table64[obuf[1]],
- table64[obuf[2]],
- padstr);
- break;
-
- default:
- i = msnprintf(output, 5, "%c%c%c%c",
- table64[obuf[0]],
- table64[obuf[1]],
- table64[obuf[2]],
- table64[obuf[3]]);
- break;
+ else {
+ /* insize == 2 */
+ *output++ = table64[ ((in[0] & 0x03) << 4) | ((in[1] & 0xF0) >> 4) ];
+ *output++ = table64[ ((in[1] & 0x0F) << 2) ];
+ if(*padstr)
+ *output++ = *padstr;
}
- output += i;
}
/* Zero terminate */
@@ -273,7 +266,7 @@ static CURLcode base64_encode(const char *table64,
CURLcode Curl_base64_encode(const char *inputbuff, size_t insize,
char **outptr, size_t *outlen)
{
- return base64_encode(base64, inputbuff, insize, outptr, outlen);
+ return base64_encode(base64encdec, inputbuff, insize, outptr, outlen);
}
/*
diff --git a/lib/bufq.c b/lib/bufq.c
new file mode 100644
index 000000000..d03906d16
--- /dev/null
+++ b/lib/bufq.c
@@ -0,0 +1,656 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+#include "bufq.h"
+
+/* The last 3 #include files should be in this order */
+#include "curl_printf.h"
+#include "curl_memory.h"
+#include "memdebug.h"
+
+static bool chunk_is_empty(const struct buf_chunk *chunk)
+{
+ return chunk->r_offset >= chunk->w_offset;
+}
+
+static bool chunk_is_full(const struct buf_chunk *chunk)
+{
+ return chunk->w_offset >= chunk->dlen;
+}
+
+static size_t chunk_len(const struct buf_chunk *chunk)
+{
+ return chunk->w_offset - chunk->r_offset;
+}
+
+static size_t chunk_space(const struct buf_chunk *chunk)
+{
+ return chunk->dlen - chunk->w_offset;
+}
+
+static void chunk_reset(struct buf_chunk *chunk)
+{
+ chunk->next = NULL;
+ chunk->r_offset = chunk->w_offset = 0;
+}
+
+static size_t chunk_append(struct buf_chunk *chunk,
+ const unsigned char *buf, size_t len)
+{
+ unsigned char *p = &chunk->x.data[chunk->w_offset];
+ size_t n = chunk->dlen - chunk->w_offset;
+ DEBUGASSERT(chunk->dlen >= chunk->w_offset);
+ if(n) {
+ n = CURLMIN(n, len);
+ memcpy(p, buf, n);
+ chunk->w_offset += n;
+ }
+ return n;
+}
+
+static size_t chunk_read(struct buf_chunk *chunk,
+ unsigned char *buf, size_t len)
+{
+ unsigned char *p = &chunk->x.data[chunk->r_offset];
+ size_t n = chunk->w_offset - chunk->r_offset;
+ DEBUGASSERT(chunk->w_offset >= chunk->r_offset);
+ if(!n) {
+ return 0;
+ }
+ else if(n <= len) {
+ memcpy(buf, p, n);
+ chunk->r_offset = chunk->w_offset = 0;
+ return n;
+ }
+ else {
+ memcpy(buf, p, len);
+ chunk->r_offset += len;
+ return len;
+ }
+}
+
+static ssize_t chunk_slurpn(struct buf_chunk *chunk, size_t max_len,
+ Curl_bufq_reader *reader,
+ void *reader_ctx, CURLcode *err)
+{
+ unsigned char *p = &chunk->x.data[chunk->w_offset];
+ size_t n = chunk->dlen - chunk->w_offset; /* free amount */
+ ssize_t nread;
+
+ DEBUGASSERT(chunk->dlen >= chunk->w_offset);
+ if(!n) {
+ *err = CURLE_AGAIN;
+ return -1;
+ }
+ if(max_len && n > max_len)
+ n = max_len;
+ nread = reader(reader_ctx, p, n, err);
+ if(nread > 0) {
+ DEBUGASSERT((size_t)nread <= n);
+ chunk->w_offset += nread;
+ }
+ return nread;
+}
+
+static void chunk_peek(const struct buf_chunk *chunk,
+ const unsigned char **pbuf, size_t *plen)
+{
+ DEBUGASSERT(chunk->w_offset >= chunk->r_offset);
+ *pbuf = &chunk->x.data[chunk->r_offset];
+ *plen = chunk->w_offset - chunk->r_offset;
+}
+
+static void chunk_peek_at(const struct buf_chunk *chunk, size_t offset,
+ const unsigned char **pbuf, size_t *plen)
+{
+ offset += chunk->r_offset;
+ DEBUGASSERT(chunk->w_offset >= offset);
+ *pbuf = &chunk->x.data[offset];
+ *plen = chunk->w_offset - offset;
+}
+
+static size_t chunk_skip(struct buf_chunk *chunk, size_t amount)
+{
+ size_t n = chunk->w_offset - chunk->r_offset;
+ DEBUGASSERT(chunk->w_offset >= chunk->r_offset);
+ if(n) {
+ n = CURLMIN(n, amount);
+ chunk->r_offset += n;
+ if(chunk->r_offset == chunk->w_offset)
+ chunk->r_offset = chunk->w_offset = 0;
+ }
+ return n;
+}
+
+static void chunk_list_free(struct buf_chunk **anchor)
+{
+ struct buf_chunk *chunk;
+ while(*anchor) {
+ chunk = *anchor;
+ *anchor = chunk->next;
+ free(chunk);
+ }
+}
+
+
+
+void Curl_bufcp_init(struct bufc_pool *pool,
+ size_t chunk_size, size_t spare_max)
+{
+ DEBUGASSERT(chunk_size > 0);
+ DEBUGASSERT(spare_max > 0);
+ memset(pool, 0, sizeof(*pool));
+ pool->chunk_size = chunk_size;
+ pool->spare_max = spare_max;
+}
+
+static CURLcode bufcp_take(struct bufc_pool *pool,
+ struct buf_chunk **pchunk)
+{
+ struct buf_chunk *chunk = NULL;
+
+ if(pool->spare) {
+ chunk = pool->spare;
+ pool->spare = chunk->next;
+ --pool->spare_count;
+ chunk_reset(chunk);
+ *pchunk = chunk;
+ return CURLE_OK;
+ }
+
+ chunk = calloc(1, sizeof(*chunk) + pool->chunk_size);
+ if(!chunk) {
+ *pchunk = NULL;
+ return CURLE_OUT_OF_MEMORY;
+ }
+ chunk->dlen = pool->chunk_size;
+ *pchunk = chunk;
+ return CURLE_OK;
+}
+
+static void bufcp_put(struct bufc_pool *pool,
+ struct buf_chunk *chunk)
+{
+ if(pool->spare_count >= pool->spare_max) {
+ free(chunk);
+ }
+ else {
+ chunk_reset(chunk);
+ chunk->next = pool->spare;
+ pool->spare = chunk;
+ ++pool->spare_count;
+ }
+}
+
+void Curl_bufcp_free(struct bufc_pool *pool)
+{
+ chunk_list_free(&pool->spare);
+ pool->spare_count = 0;
+}
+
+static void bufq_init(struct bufq *q, struct bufc_pool *pool,
+ size_t chunk_size, size_t max_chunks, int opts)
+{
+ DEBUGASSERT(chunk_size > 0);
+ DEBUGASSERT(max_chunks > 0);
+ memset(q, 0, sizeof(*q));
+ q->chunk_size = chunk_size;
+ q->max_chunks = max_chunks;
+ q->pool = pool;
+ q->opts = opts;
+}
+
+void Curl_bufq_init2(struct bufq *q, size_t chunk_size, size_t max_chunks,
+ int opts)
+{
+ bufq_init(q, NULL, chunk_size, max_chunks, opts);
+}
+
+void Curl_bufq_init(struct bufq *q, size_t chunk_size, size_t max_chunks)
+{
+ bufq_init(q, NULL, chunk_size, max_chunks, BUFQ_OPT_NONE);
+}
+
+void Curl_bufq_initp(struct bufq *q, struct bufc_pool *pool,
+ size_t max_chunks, int opts)
+{
+ bufq_init(q, pool, pool->chunk_size, max_chunks, opts);
+}
+
+void Curl_bufq_free(struct bufq *q)
+{
+ chunk_list_free(&q->head);
+ chunk_list_free(&q->spare);
+ q->tail = NULL;
+ q->chunk_count = 0;
+}
+
+void Curl_bufq_reset(struct bufq *q)
+{
+ struct buf_chunk *chunk;
+ while(q->head) {
+ chunk = q->head;
+ q->head = chunk->next;
+ chunk->next = q->spare;
+ q->spare = chunk;
+ }
+ q->tail = NULL;
+}
+
+size_t Curl_bufq_len(const struct bufq *q)
+{
+ const struct buf_chunk *chunk = q->head;
+ size_t len = 0;
+ while(chunk) {
+ len += chunk_len(chunk);
+ chunk = chunk->next;
+ }
+ return len;
+}
+
+size_t Curl_bufq_space(const struct bufq *q)
+{
+ size_t space = 0;
+ if(q->tail)
+ space += chunk_space(q->tail);
+ if(q->spare) {
+ struct buf_chunk *chunk = q->spare;
+ while(chunk) {
+ space += chunk->dlen;
+ chunk = chunk->next;
+ }
+ }
+ if(q->chunk_count < q->max_chunks) {
+ space += (q->max_chunks - q->chunk_count) * q->chunk_size;
+ }
+ return space;
+}
+
+bool Curl_bufq_is_empty(const struct bufq *q)
+{
+ return !q->head || chunk_is_empty(q->head);
+}
+
+bool Curl_bufq_is_full(const struct bufq *q)
+{
+ if(!q->tail || q->spare)
+ return FALSE;
+ if(q->chunk_count < q->max_chunks)
+ return FALSE;
+ if(q->chunk_count > q->max_chunks)
+ return TRUE;
+ /* we have no spares and cannot make more, is the tail full? */
+ return chunk_is_full(q->tail);
+}
+
+static struct buf_chunk *get_spare(struct bufq *q)
+{
+ struct buf_chunk *chunk = NULL;
+
+ if(q->spare) {
+ chunk = q->spare;
+ q->spare = chunk->next;
+ chunk_reset(chunk);
+ return chunk;
+ }
+
+ if(q->chunk_count >= q->max_chunks && (!(q->opts & BUFQ_OPT_SOFT_LIMIT)))
+ return NULL;
+
+ if(q->pool) {
+ if(bufcp_take(q->pool, &chunk))
+ return NULL;
+ ++q->chunk_count;
+ return chunk;
+ }
+ else {
+ chunk = calloc(1, sizeof(*chunk) + q->chunk_size);
+ if(!chunk)
+ return NULL;
+ chunk->dlen = q->chunk_size;
+ ++q->chunk_count;
+ return chunk;
+ }
+}
+
+static void prune_head(struct bufq *q)
+{
+ struct buf_chunk *chunk;
+
+ while(q->head && chunk_is_empty(q->head)) {
+ chunk = q->head;
+ q->head = chunk->next;
+ if(q->tail == chunk)
+ q->tail = q->head;
+ if(q->pool) {
+ bufcp_put(q->pool, chunk);
+ --q->chunk_count;
+ }
+ else if((q->chunk_count > q->max_chunks) ||
+ (q->opts & BUFQ_OPT_NO_SPARES)) {
+ /* SOFT_LIMIT allowed us more than max. free spares until
+ * we are at max again. Or free them if we are configured
+ * to not use spares. */
+ free(chunk);
+ --q->chunk_count;
+ }
+ else {
+ chunk->next = q->spare;
+ q->spare = chunk;
+ }
+ }
+}
+
+static struct buf_chunk *get_non_full_tail(struct bufq *q)
+{
+ struct buf_chunk *chunk;
+
+ if(q->tail && !chunk_is_full(q->tail))
+ return q->tail;
+ chunk = get_spare(q);
+ if(chunk) {
+ /* new tail, and possibly new head */
+ if(q->tail) {
+ q->tail->next = chunk;
+ q->tail = chunk;
+ }
+ else {
+ DEBUGASSERT(!q->head);
+ q->head = q->tail = chunk;
+ }
+ }
+ return chunk;
+}
+
+ssize_t Curl_bufq_write(struct bufq *q,
+ const unsigned char *buf, size_t len,
+ CURLcode *err)
+{
+ struct buf_chunk *tail;
+ ssize_t nwritten = 0;
+ size_t n;
+
+ DEBUGASSERT(q->max_chunks > 0);
+ while(len) {
+ tail = get_non_full_tail(q);
+ if(!tail) {
+ if(q->chunk_count < q->max_chunks) {
+ *err = CURLE_OUT_OF_MEMORY;
+ return -1;
+ }
+ break;
+ }
+ n = chunk_append(tail, buf, len);
+ if(!n)
+ break;
+ nwritten += n;
+ buf += n;
+ len -= n;
+ }
+ if(nwritten == 0 && len) {
+ *err = CURLE_AGAIN;
+ return -1;
+ }
+ *err = CURLE_OK;
+ return nwritten;
+}
+
+ssize_t Curl_bufq_read(struct bufq *q, unsigned char *buf, size_t len,
+ CURLcode *err)
+{
+ ssize_t nread = 0;
+ size_t n;
+
+ *err = CURLE_OK;
+ while(len && q->head) {
+ n = chunk_read(q->head, buf, len);
+ if(n) {
+ nread += n;
+ buf += n;
+ len -= n;
+ }
+ prune_head(q);
+ }
+ if(nread == 0) {
+ *err = CURLE_AGAIN;
+ return -1;
+ }
+ return nread;
+}
+
+bool Curl_bufq_peek(struct bufq *q,
+ const unsigned char **pbuf, size_t *plen)
+{
+ if(q->head && chunk_is_empty(q->head)) {
+ prune_head(q);
+ }
+ if(q->head && !chunk_is_empty(q->head)) {
+ chunk_peek(q->head, pbuf, plen);
+ return TRUE;
+ }
+ *pbuf = NULL;
+ *plen = 0;
+ return FALSE;
+}
+
+bool Curl_bufq_peek_at(struct bufq *q, size_t offset,
+ const unsigned char **pbuf, size_t *plen)
+{
+ struct buf_chunk *c = q->head;
+ size_t clen;
+
+ while(c) {
+ clen = chunk_len(c);
+ if(!clen)
+ break;
+ if(offset >= clen) {
+ offset -= clen;
+ c = c->next;
+ continue;
+ }
+ chunk_peek_at(c, offset, pbuf, plen);
+ return TRUE;
+ }
+ *pbuf = NULL;
+ *plen = 0;
+ return FALSE;
+}
+
+void Curl_bufq_skip(struct bufq *q, size_t amount)
+{
+ size_t n;
+
+ while(amount && q->head) {
+ n = chunk_skip(q->head, amount);
+ amount -= n;
+ prune_head(q);
+ }
+}
+
+ssize_t Curl_bufq_pass(struct bufq *q, Curl_bufq_writer *writer,
+ void *writer_ctx, CURLcode *err)
+{
+ const unsigned char *buf;
+ size_t blen;
+ ssize_t nwritten = 0;
+
+ while(Curl_bufq_peek(q, &buf, &blen)) {
+ ssize_t chunk_written;
+
+ chunk_written = writer(writer_ctx, buf, blen, err);
+ if(chunk_written < 0) {
+ if(!nwritten || *err != CURLE_AGAIN) {
+ /* blocked on first write or real error, fail */
+ nwritten = -1;
+ }
+ break;
+ }
+ if(!chunk_written) {
+ if(!nwritten) {
+ /* treat as blocked */
+ *err = CURLE_AGAIN;
+ nwritten = -1;
+ }
+ break;
+ }
+ Curl_bufq_skip(q, (size_t)chunk_written);
+ nwritten += chunk_written;
+ }
+ return nwritten;
+}
+
+ssize_t Curl_bufq_write_pass(struct bufq *q,
+ const unsigned char *buf, size_t len,
+ Curl_bufq_writer *writer, void *writer_ctx,
+ CURLcode *err)
+{
+ ssize_t nwritten = 0, n;
+
+ *err = CURLE_OK;
+ while(len) {
+ if(Curl_bufq_is_full(q)) {
+ /* try to make room in case we are full */
+ n = Curl_bufq_pass(q, writer, writer_ctx, err);
+ if(n < 0) {
+ if(*err != CURLE_AGAIN) {
+ /* real error, fail */
+ return -1;
+ }
+ /* would block, bufq is full, give up */
+ break;
+ }
+ }
+
+ /* Add whatever is remaining now to bufq */
+ n = Curl_bufq_write(q, buf, len, err);
+ if(n < 0) {
+ if(*err != CURLE_AGAIN) {
+ /* real error, fail */
+ return -1;
+ }
+ /* no room in bufq */
+ break;
+ }
+ /* edge case of writer returning 0 (and len is >0)
+ * break or we might enter an infinite loop here */
+ if(n == 0)
+ break;
+
+ /* Maybe only part of `data` has been added, continue to loop */
+ buf += (size_t)n;
+ len -= (size_t)n;
+ nwritten += (size_t)n;
+ }
+
+ if(!nwritten && len) {
+ *err = CURLE_AGAIN;
+ return -1;
+ }
+ *err = CURLE_OK;
+ return nwritten;
+}
+
+ssize_t Curl_bufq_sipn(struct bufq *q, size_t max_len,
+ Curl_bufq_reader *reader, void *reader_ctx,
+ CURLcode *err)
+{
+ struct buf_chunk *tail = NULL;
+ ssize_t nread;
+
+ *err = CURLE_AGAIN;
+ tail = get_non_full_tail(q);
+ if(!tail) {
+ if(q->chunk_count < q->max_chunks) {
+ *err = CURLE_OUT_OF_MEMORY;
+ return -1;
+ }
+ /* full, blocked */
+ *err = CURLE_AGAIN;
+ return -1;
+ }
+
+ nread = chunk_slurpn(tail, max_len, reader, reader_ctx, err);
+ if(nread < 0) {
+ return -1;
+ }
+ else if(nread == 0) {
+ /* eof */
+ *err = CURLE_OK;
+ }
+ return nread;
+}
+
+/**
+ * Read up to `max_len` bytes and append it to the end of the buffer queue.
+ * if `max_len` is 0, no limit is imposed and the call behaves exactly
+ * the same as `Curl_bufq_slurp()`.
+ * Returns the total amount of buf read (may be 0) or -1 on other
+ * reader errors.
+ * Note that even in case of a -1 chunks may have been read and
+ * the buffer queue will have different length than before.
+ */
+static ssize_t bufq_slurpn(struct bufq *q, size_t max_len,
+ Curl_bufq_reader *reader, void *reader_ctx,
+ CURLcode *err)
+{
+ ssize_t nread = 0, n;
+
+ *err = CURLE_AGAIN;
+ while(1) {
+
+ n = Curl_bufq_sipn(q, max_len, reader, reader_ctx, err);
+ if(n < 0) {
+ if(!nread || *err != CURLE_AGAIN) {
+ /* blocked on first read or real error, fail */
+ nread = -1;
+ }
+ else
+ *err = CURLE_OK;
+ break;
+ }
+ else if(n == 0) {
+ /* eof */
+ *err = CURLE_OK;
+ break;
+ }
+ nread += (size_t)n;
+ if(max_len) {
+ DEBUGASSERT((size_t)n <= max_len);
+ max_len -= (size_t)n;
+ if(!max_len)
+ break;
+ }
+ /* give up slurping when we get less bytes than we asked for */
+ if(q->tail && !chunk_is_full(q->tail))
+ break;
+ }
+ return nread;
+}
+
+ssize_t Curl_bufq_slurp(struct bufq *q, Curl_bufq_reader *reader,
+ void *reader_ctx, CURLcode *err)
+{
+ return bufq_slurpn(q, 0, reader, reader_ctx, err);
+}
diff --git a/lib/bufq.h b/lib/bufq.h
new file mode 100644
index 000000000..089d61bfe
--- /dev/null
+++ b/lib/bufq.h
@@ -0,0 +1,265 @@
+#ifndef HEADER_CURL_BUFQ_H
+#define HEADER_CURL_BUFQ_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+
+#include <curl/curl.h>
+
+/**
+ * A chunk of bytes for reading and writing.
+ * The size is fixed a creation with read and write offset
+ * for where unread content is.
+ */
+struct buf_chunk {
+ struct buf_chunk *next; /* to keep it in a list */
+ size_t dlen; /* the amount of allocated x.data[] */
+ size_t r_offset; /* first unread bytes */
+ size_t w_offset; /* one after last written byte */
+ union {
+ unsigned char data[1]; /* the buffer for `dlen` bytes */
+ void *dummy; /* alignment */
+ } x;
+};
+
+/**
+ * A pool for providing/keeping a number of chunks of the same size
+ *
+ * The same pool can be shared by many `bufq` instances. However, a pool
+ * is not thread safe. All bufqs using it are supposed to operate in the
+ * same thread.
+ */
+struct bufc_pool {
+ struct buf_chunk *spare; /* list of available spare chunks */
+ size_t chunk_size; /* the size of chunks in this pool */
+ size_t spare_count; /* current number of spare chunks in list */
+ size_t spare_max; /* max number of spares to keep */
+};
+
+void Curl_bufcp_init(struct bufc_pool *pool,
+ size_t chunk_size, size_t spare_max);
+
+void Curl_bufcp_free(struct bufc_pool *pool);
+
+/**
+ * A queue of byte chunks for reading and writing.
+ * Reading is done from `head`, writing is done to `tail`.
+ *
+ * `bufq`s can be empty or full or neither. Its `len` is the number
+ * of bytes that can be read. For an empty bufq, `len` will be 0.
+ *
+ * By default, a bufq can hold up to `max_chunks * chunk_size` number
+ * of bytes. When `max_chunks` are used (in the `head` list) and the
+ * `tail` chunk is full, the bufq will report that it is full.
+ *
+ * On a full bufq, `len` may be less than the maximum number of bytes,
+ * e.g. when the head chunk is partially read. `len` may also become
+ * larger than the max when option `BUFQ_OPT_SOFT_LIMIT` is used.
+ *
+ * By default, writing to a full bufq will return (-1, CURLE_AGAIN). Same
+ * as reading from an empty bufq.
+ * With `BUFQ_OPT_SOFT_LIMIT` set, a bufq will allow writing becond this
+ * limit and use more than `max_chunks`. However it will report that it
+ * is full nevertheless. This is provided for situation where writes
+ * preferably never fail (except for memory exhaustion).
+ *
+ * By default and without a pool, a bufq will keep chunks that read
+ * read empty in its `spare` list. Option `BUFQ_OPT_NO_SPARES` will
+ * disable that and free chunks once they become empty.
+ *
+ * When providing a pool to a bufq, all chunk creation and spare handling
+ * will be delegated to that pool.
+ */
+struct bufq {
+ struct buf_chunk *head; /* chunk with bytes to read from */
+ struct buf_chunk *tail; /* chunk to write to */
+ struct buf_chunk *spare; /* list of free chunks, unless `pool` */
+ struct bufc_pool *pool; /* optional pool for free chunks */
+ size_t chunk_count; /* current number of chunks in `head+spare` */
+ size_t max_chunks; /* max `head` chunks to use */
+ size_t chunk_size; /* size of chunks to manage */
+ int opts; /* options for handling queue, see below */
+};
+
+/**
+ * Default behaviour: chunk limit is "hard", meaning attempts to write
+ * more bytes than can be hold in `max_chunks` is refused and will return
+ * -1, CURLE_AGAIN. */
+#define BUFQ_OPT_NONE (0)
+/**
+ * Make `max_chunks` a "soft" limit. A bufq will report that it is "full"
+ * when `max_chunks` are used, but allows writing beyond this limit.
+ */
+#define BUFQ_OPT_SOFT_LIMIT (1 << 0)
+/**
+ * Do not keep spare chunks.
+ */
+#define BUFQ_OPT_NO_SPARES (1 << 1)
+
+/**
+ * Initialize a buffer queue that can hold up to `max_chunks` buffers
+ * each of size `chunk_size`. The bufq will not allow writing of
+ * more bytes than can be held in `max_chunks`.
+ */
+void Curl_bufq_init(struct bufq *q, size_t chunk_size, size_t max_chunks);
+
+/**
+ * Initialize a buffer queue that can hold up to `max_chunks` buffers
+ * each of size `chunk_size` with the given options. See `BUFQ_OPT_*`.
+ */
+void Curl_bufq_init2(struct bufq *q, size_t chunk_size,
+ size_t max_chunks, int opts);
+
+void Curl_bufq_initp(struct bufq *q, struct bufc_pool *pool,
+ size_t max_chunks, int opts);
+
+/**
+ * Reset the buffer queue to be empty. Will keep any allocated buffer
+ * chunks around.
+ */
+void Curl_bufq_reset(struct bufq *q);
+
+/**
+ * Free all resources held by the buffer queue.
+ */
+void Curl_bufq_free(struct bufq *q);
+
+/**
+ * Return the total amount of data in the queue.
+ */
+size_t Curl_bufq_len(const struct bufq *q);
+
+/**
+ * Return the total amount of free space in the queue.
+ * The returned length is the number of bytes that can
+ * be expected to be written successfully to the bufq,
+ * providing no memory allocations fail.
+ */
+size_t Curl_bufq_space(const struct bufq *q);
+
+/**
+ * Returns TRUE iff there is no data in the buffer queue.
+ */
+bool Curl_bufq_is_empty(const struct bufq *q);
+
+/**
+ * Returns TRUE iff there is no space left in the buffer queue.
+ */
+bool Curl_bufq_is_full(const struct bufq *q);
+
+/**
+ * Write buf to the end of the buffer queue. The buf is copied
+ * and the amount of copied bytes is returned.
+ * A return code of -1 indicates an error, setting `err` to the
+ * cause. An err of CURLE_AGAIN is returned if the buffer queue is full.
+ */
+ssize_t Curl_bufq_write(struct bufq *q,
+ const unsigned char *buf, size_t len,
+ CURLcode *err);
+
+/**
+ * Read buf from the start of the buffer queue. The buf is copied
+ * and the amount of copied bytes is returned.
+ * A return code of -1 indicates an error, setting `err` to the
+ * cause. An err of CURLE_AGAIN is returned if the buffer queue is empty.
+ */
+ssize_t Curl_bufq_read(struct bufq *q, unsigned char *buf, size_t len,
+ CURLcode *err);
+
+/**
+ * Peek at the head chunk in the buffer queue. Returns a pointer to
+ * the chunk buf (at the current offset) and its length. Does not
+ * modify the buffer queue.
+ * Returns TRUE iff bytes are available. Sets `pbuf` to NULL and `plen`
+ * to 0 when no bytes are available.
+ * Repeated calls return the same information until the buffer queue
+ * is modified, see `Curl_bufq_skip()``
+ */
+bool Curl_bufq_peek(struct bufq *q,
+ const unsigned char **pbuf, size_t *plen);
+
+bool Curl_bufq_peek_at(struct bufq *q, size_t offset,
+ const unsigned char **pbuf, size_t *plen);
+
+/**
+ * Tell the buffer queue to discard `amount` buf bytes at the head
+ * of the queue. Skipping more buf than is currently buffered will
+ * just empty the queue.
+ */
+void Curl_bufq_skip(struct bufq *q, size_t amount);
+
+typedef ssize_t Curl_bufq_writer(void *writer_ctx,
+ const unsigned char *buf, size_t len,
+ CURLcode *err);
+/**
+ * Passes the chunks in the buffer queue to the writer and returns
+ * the amount of buf written. A writer may return -1 and CURLE_AGAIN
+ * to indicate blocking at which point the queue will stop and return
+ * the amount of buf passed so far.
+ * -1 is returned on any other errors reported by the writer.
+ * Note that in case of a -1 chunks may have been written and
+ * the buffer queue will have different length than before.
+ */
+ssize_t Curl_bufq_pass(struct bufq *q, Curl_bufq_writer *writer,
+ void *writer_ctx, CURLcode *err);
+
+typedef ssize_t Curl_bufq_reader(void *reader_ctx,
+ unsigned char *buf, size_t len,
+ CURLcode *err);
+
+/**
+ * Read date and append it to the end of the buffer queue until the
+ * reader returns blocking or the queue is full. A reader returns
+ * -1 and CURLE_AGAIN to indicate blocking.
+ * Returns the total amount of buf read (may be 0) or -1 on other
+ * reader errors.
+ * Note that in case of a -1 chunks may have been read and
+ * the buffer queue will have different length than before.
+ */
+ssize_t Curl_bufq_slurp(struct bufq *q, Curl_bufq_reader *reader,
+ void *reader_ctx, CURLcode *err);
+
+/**
+ * Read *once* up to `max_len` bytes and append it to the buffer.
+ * if `max_len` is 0, no limit is imposed besides the chunk space.
+ * Returns the total amount of buf read (may be 0) or -1 on other
+ * reader errors.
+ */
+ssize_t Curl_bufq_sipn(struct bufq *q, size_t max_len,
+ Curl_bufq_reader *reader, void *reader_ctx,
+ CURLcode *err);
+
+/**
+ * Write buf to the end of the buffer queue.
+ * Will write bufq content or passed `buf` directly using the `writer`
+ * callback when it sees fit. 'buf' might get passed directly
+ * on or is placed into the buffer, depending on `len` and current
+ * amount buffered, chunk size, etc.
+ */
+ssize_t Curl_bufq_write_pass(struct bufq *q,
+ const unsigned char *buf, size_t len,
+ Curl_bufq_writer *writer, void *writer_ctx,
+ CURLcode *err);
+
+#endif /* HEADER_CURL_BUFQ_H */
diff --git a/lib/bufref.c b/lib/bufref.c
index 91b037431..ce686b6f3 100644
--- a/lib/bufref.c
+++ b/lib/bufref.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2021 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/bufref.h b/lib/bufref.h
index 96b818b53..dd424f18f 100644
--- a/lib/bufref.h
+++ b/lib/bufref.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2021 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/c-hyper.c b/lib/c-hyper.c
index 86abcdb0f..787d6bbdb 100644
--- a/lib/c-hyper.c
+++ b/lib/c-hyper.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -22,6 +22,10 @@
*
***************************************************************************/
+/* Curl's integration with Hyper. This replaces certain functions in http.c,
+ * based on configuration #defines. This implementation supports HTTP/1.1 but
+ * not HTTP/2.
+ */
#include "curl_setup.h"
#if !defined(CURL_DISABLE_HTTP) && defined(USE_HYPER)
@@ -61,6 +65,11 @@
#include "curl_memory.h"
#include "memdebug.h"
+typedef enum {
+ USERDATA_NOT_SET = 0, /* for tasks with no userdata set; must be zero */
+ USERDATA_RESP_BODY
+} userdata_t;
+
size_t Curl_hyper_recv(void *userp, hyper_context *ctx,
uint8_t *buf, size_t buflen)
{
@@ -71,9 +80,11 @@ size_t Curl_hyper_recv(void *userp, hyper_context *ctx,
DEBUGASSERT(conn);
(void)ctx;
+ DEBUGF(infof(data, "Curl_hyper_recv(%zu)", buflen));
result = Curl_read(data, conn->sockfd, (char *)buf, buflen, &nread);
if(result == CURLE_AGAIN) {
/* would block, register interest */
+ DEBUGF(infof(data, "Curl_hyper_recv(%zu) -> EAGAIN", buflen));
if(data->hyp.read_waker)
hyper_waker_free(data->hyp.read_waker);
data->hyp.read_waker = hyper_context_waker(ctx);
@@ -87,6 +98,7 @@ size_t Curl_hyper_recv(void *userp, hyper_context *ctx,
failf(data, "Curl_read failed");
return HYPER_IO_ERROR;
}
+ DEBUGF(infof(data, "Curl_hyper_recv(%zu) -> %zd", buflen, nread));
return (size_t)nread;
}
@@ -98,8 +110,12 @@ size_t Curl_hyper_send(void *userp, hyper_context *ctx,
CURLcode result;
ssize_t nwrote;
+ DEBUGF(infof(data, "Curl_hyper_send(%zu)", buflen));
result = Curl_write(data, conn->sockfd, (void *)buf, buflen, &nwrote);
+ if(!result && !nwrote)
+ result = CURLE_AGAIN;
if(result == CURLE_AGAIN) {
+ DEBUGF(infof(data, "Curl_hyper_send(%zu) -> EAGAIN", buflen));
/* would block, register interest */
if(data->hyp.write_waker)
hyper_waker_free(data->hyp.write_waker);
@@ -114,6 +130,7 @@ size_t Curl_hyper_send(void *userp, hyper_context *ctx,
failf(data, "Curl_write failed");
return HYPER_IO_ERROR;
}
+ DEBUGF(infof(data, "Curl_hyper_send(%zu) -> %zd", buflen, nwrote));
return (size_t)nwrote;
}
@@ -159,19 +176,22 @@ static int hyper_each_header(void *userdata,
Curl_debug(data, CURLINFO_HEADER_IN, headp, len);
- if(!data->state.hconnect || !data->set.suppress_connect_headers) {
- writetype = CLIENTWRITE_HEADER;
- if(data->set.include_header)
- writetype |= CLIENTWRITE_BODY;
- result = Curl_client_write(data, writetype, headp, len);
- if(result) {
- data->state.hresult = CURLE_ABORTED_BY_CALLBACK;
- return HYPER_ITER_BREAK;
- }
+ writetype = CLIENTWRITE_HEADER;
+ if(data->state.hconnect)
+ writetype |= CLIENTWRITE_CONNECT;
+ if(data->req.httpcode/100 == 1)
+ writetype |= CLIENTWRITE_1XX;
+ result = Curl_client_write(data, writetype, headp, len);
+ if(result) {
+ data->state.hresult = CURLE_ABORTED_BY_CALLBACK;
+ return HYPER_ITER_BREAK;
}
- data->info.header_size += (long)len;
- data->req.headerbytecount += (long)len;
+ result = Curl_bump_headersize(data, len, FALSE);
+ if(result) {
+ data->state.hresult = result;
+ return HYPER_ITER_BREAK;
+ }
return HYPER_ITER_CONTINUE;
}
@@ -183,7 +203,7 @@ static int hyper_body_chunk(void *userdata, const hyper_buf *chunk)
struct SingleRequest *k = &data->req;
CURLcode result = CURLE_OK;
- if(0 == k->bodywrites++) {
+ if(0 == k->bodywrites) {
bool done = FALSE;
#if defined(USE_NTLM)
struct connectdata *conn = data->conn;
@@ -223,29 +243,18 @@ static int hyper_body_chunk(void *userdata, const hyper_buf *chunk)
return HYPER_ITER_BREAK;
}
}
- if(k->ignorebody)
- return HYPER_ITER_CONTINUE;
- if(0 == len)
- return HYPER_ITER_CONTINUE;
- Curl_debug(data, CURLINFO_DATA_IN, buf, len);
- if(!data->set.http_ce_skip && k->writer_stack)
- /* content-encoded data */
- result = Curl_unencode_write(data, k->writer_stack, buf, len);
- else
- result = Curl_client_write(data, CLIENTWRITE_BODY, buf, len);
+ result = Curl_client_write(data, CLIENTWRITE_BODY, buf, len);
if(result) {
data->state.hresult = result;
return HYPER_ITER_BREAK;
}
- data->req.bytecount += len;
- Curl_pgrsSetDownloadCounter(data, data->req.bytecount);
return HYPER_ITER_CONTINUE;
}
/*
- * Hyper does not consider the status line, the first line in a HTTP/1
+ * Hyper does not consider the status line, the first line in an HTTP/1
* response, to be a header. The libcurl API does. This function sends the
* status line in the header callback. */
static CURLcode status_line(struct Curl_easy *data,
@@ -260,23 +269,25 @@ static CURLcode status_line(struct Curl_easy *data,
int writetype;
vstr = http_version == HYPER_HTTP_VERSION_1_1 ? "1.1" :
(http_version == HYPER_HTTP_VERSION_2 ? "2" : "1.0");
- conn->httpversion =
- http_version == HYPER_HTTP_VERSION_1_1 ? 11 :
- (http_version == HYPER_HTTP_VERSION_2 ? 20 : 10);
- if(http_version == HYPER_HTTP_VERSION_1_0)
- data->state.httpwant = CURL_HTTP_VERSION_1_0;
-
- if(data->state.hconnect)
- /* CONNECT */
- data->info.httpproxycode = http_status;
/* We need to set 'httpcodeq' for functions that check the response code in
a single place. */
data->req.httpcode = http_status;
- result = Curl_http_statusline(data, conn);
- if(result)
- return result;
+ if(data->state.hconnect)
+ /* CONNECT */
+ data->info.httpproxycode = http_status;
+ else {
+ conn->httpversion =
+ http_version == HYPER_HTTP_VERSION_1_1 ? 11 :
+ (http_version == HYPER_HTTP_VERSION_2 ? 20 : 10);
+ if(http_version == HYPER_HTTP_VERSION_1_0)
+ data->state.httpwant = CURL_HTTP_VERSION_1_0;
+
+ result = Curl_http_statusline(data, conn);
+ if(result)
+ return result;
+ }
Curl_dyn_reset(&data->state.headerb);
@@ -290,19 +301,16 @@ static CURLcode status_line(struct Curl_easy *data,
Curl_debug(data, CURLINFO_HEADER_IN, Curl_dyn_ptr(&data->state.headerb),
len);
- if(!data->state.hconnect || !data->set.suppress_connect_headers) {
- writetype = CLIENTWRITE_HEADER|CLIENTWRITE_STATUS;
- if(data->set.include_header)
- writetype |= CLIENTWRITE_BODY;
- result = Curl_client_write(data, writetype,
- Curl_dyn_ptr(&data->state.headerb), len);
- if(result)
- return result;
- }
- data->info.header_size += (long)len;
- data->req.headerbytecount += (long)len;
- data->req.httpcode = http_status;
- return CURLE_OK;
+ writetype = CLIENTWRITE_HEADER|CLIENTWRITE_STATUS;
+ if(data->state.hconnect)
+ writetype |= CLIENTWRITE_CONNECT;
+ result = Curl_client_write(data, writetype,
+ Curl_dyn_ptr(&data->state.headerb), len);
+ if(result)
+ return result;
+
+ result = Curl_bump_headersize(data, len, FALSE);
+ return result;
}
/*
@@ -335,7 +343,6 @@ CURLcode Curl_hyper_stream(struct Curl_easy *data,
struct hyptransfer *h = &data->hyp;
hyper_task *task;
hyper_task *foreach;
- hyper_error *hypererr = NULL;
const uint8_t *reasonp;
size_t reason_len;
CURLcode result = CURLE_OK;
@@ -378,19 +385,9 @@ CURLcode Curl_hyper_stream(struct Curl_easy *data,
break;
}
t = hyper_task_type(task);
- switch(t) {
- case HYPER_TASK_ERROR:
- hypererr = hyper_task_value(task);
- break;
- case HYPER_TASK_RESPONSE:
- resp = hyper_task_value(task);
- break;
- default:
- break;
- }
- hyper_task_free(task);
-
if(t == HYPER_TASK_ERROR) {
+ hyper_error *hypererr = hyper_task_value(task);
+ hyper_task_free(task);
if(data->state.hresult) {
/* override Hyper's view, might not even be an error */
result = data->state.hresult;
@@ -401,35 +398,55 @@ CURLcode Curl_hyper_stream(struct Curl_easy *data,
size_t errlen = hyper_error_print(hypererr, errbuf, sizeof(errbuf));
hyper_code code = hyper_error_code(hypererr);
failf(data, "Hyper: [%d] %.*s", (int)code, (int)errlen, errbuf);
- if(code == HYPERE_ABORTED_BY_CALLBACK)
+ switch(code) {
+ case HYPERE_ABORTED_BY_CALLBACK:
result = CURLE_OK;
- else if((code == HYPERE_UNEXPECTED_EOF) && !data->req.bytecount)
- result = CURLE_GOT_NOTHING;
- else if(code == HYPERE_INVALID_PEER_MESSAGE)
+ break;
+ case HYPERE_UNEXPECTED_EOF:
+ if(!data->req.bytecount)
+ result = CURLE_GOT_NOTHING;
+ else
+ result = CURLE_RECV_ERROR;
+ break;
+ case HYPERE_INVALID_PEER_MESSAGE:
+ /* bump headerbytecount to avoid the count remaining at zero and
+ appearing to not having read anything from the peer at all */
+ data->req.headerbytecount++;
result = CURLE_UNSUPPORTED_PROTOCOL; /* maybe */
- else
+ break;
+ default:
result = CURLE_RECV_ERROR;
+ break;
+ }
}
*done = TRUE;
hyper_error_free(hypererr);
break;
}
- else if(h->endtask == task) {
- /* end of transfer */
- *done = TRUE;
- infof(data, "hyperstream is done");
- if(!k->bodywrites) {
- /* hyper doesn't always call the body write callback */
- bool stilldone;
- result = Curl_http_firstwrite(data, data->conn, &stilldone);
+ else if(t == HYPER_TASK_EMPTY) {
+ void *userdata = hyper_task_userdata(task);
+ hyper_task_free(task);
+ if((userdata_t)userdata == USERDATA_RESP_BODY) {
+ /* end of transfer */
+ *done = TRUE;
+ infof(data, "hyperstream is done");
+ if(!k->bodywrites) {
+ /* hyper doesn't always call the body write callback */
+ bool stilldone;
+ result = Curl_http_firstwrite(data, data->conn, &stilldone);
+ }
+ break;
+ }
+ else {
+ /* A background task for hyper; ignore */
+ continue;
}
- break;
- }
- else if(t != HYPER_TASK_RESPONSE) {
- *didwhat = KEEP_RECV;
- break;
}
- /* HYPER_TASK_RESPONSE */
+
+ DEBUGASSERT(HYPER_TASK_RESPONSE);
+
+ resp = hyper_task_value(task);
+ hyper_task_free(task);
*didwhat = KEEP_RECV;
if(!resp) {
@@ -478,7 +495,7 @@ CURLcode Curl_hyper_stream(struct Curl_easy *data,
if(k->upgr101 == UPGR101_WS) {
if(http_status == 101) {
/* verify the response */
- result = Curl_ws_accept(data);
+ result = Curl_ws_accept(data, NULL, 0);
if(result)
return result;
}
@@ -509,13 +526,12 @@ CURLcode Curl_hyper_stream(struct Curl_easy *data,
result = CURLE_OUT_OF_MEMORY;
break;
}
- DEBUGASSERT(hyper_task_type(foreach) == HYPER_TASK_EMPTY);
+ hyper_task_set_userdata(foreach, (void *)USERDATA_RESP_BODY);
if(HYPERE_OK != hyper_executor_push(h->exec, foreach)) {
failf(data, "Couldn't hyper_executor_push the body-foreach");
result = CURLE_OUT_OF_MEMORY;
break;
}
- h->endtask = foreach;
hyper_response_free(resp);
resp = NULL;
@@ -527,11 +543,9 @@ CURLcode Curl_hyper_stream(struct Curl_easy *data,
static CURLcode debug_request(struct Curl_easy *data,
const char *method,
- const char *path,
- bool h2)
+ const char *path)
{
- char *req = aprintf("%s %s HTTP/%s\r\n", method, path,
- h2?"2":"1.1");
+ char *req = aprintf("%s %s HTTP/1.1\r\n", method, path);
if(!req)
return CURLE_OUT_OF_MEMORY;
Curl_debug(data, CURLINFO_HEADER_OUT, req, strlen(req));
@@ -613,7 +627,6 @@ CURLcode Curl_hyper_header(struct Curl_easy *data, hyper_headers *headers,
static CURLcode request_target(struct Curl_easy *data,
struct connectdata *conn,
const char *method,
- bool h2,
hyper_request *req)
{
CURLcode result;
@@ -625,26 +638,13 @@ static CURLcode request_target(struct Curl_easy *data,
if(result)
return result;
- if(h2 && hyper_request_set_uri_parts(req,
- /* scheme */
- (uint8_t *)data->state.up.scheme,
- strlen(data->state.up.scheme),
- /* authority */
- (uint8_t *)conn->host.name,
- strlen(conn->host.name),
- /* path_and_query */
- (uint8_t *)Curl_dyn_uptr(&r),
- Curl_dyn_len(&r))) {
- failf(data, "error setting uri parts to hyper");
- result = CURLE_OUT_OF_MEMORY;
- }
- else if(!h2 && hyper_request_set_uri(req, (uint8_t *)Curl_dyn_uptr(&r),
+ if(hyper_request_set_uri(req, (uint8_t *)Curl_dyn_uptr(&r),
Curl_dyn_len(&r))) {
failf(data, "error setting uri to hyper");
result = CURLE_OUT_OF_MEMORY;
}
else
- result = debug_request(data, method, Curl_dyn_ptr(&r), h2);
+ result = debug_request(data, method, Curl_dyn_ptr(&r));
Curl_dyn_free(&r);
@@ -679,7 +679,7 @@ static int uploadpostfields(void *userdata, hyper_context *ctx,
return HYPER_POLL_ERROR;
}
/* increasing the writebytecount here is a little premature but we
- don't know exactly when the body is sent*/
+ don't know exactly when the body is sent */
data->req.writebytecount += (size_t)data->req.p.http->postsize;
Curl_pgrsSetUploadCounter(data, data->req.writebytecount);
data->req.upload_done = TRUE;
@@ -692,6 +692,7 @@ static int uploadstreamed(void *userdata, hyper_context *ctx,
{
size_t fillcount;
struct Curl_easy *data = (struct Curl_easy *)userdata;
+ struct connectdata *conn = (struct connectdata *)data->conn;
CURLcode result;
(void)ctx;
@@ -706,7 +707,15 @@ static int uploadstreamed(void *userdata, hyper_context *ctx,
return HYPER_POLL_PENDING;
}
- result = Curl_fillreadbuffer(data, data->set.upload_buffer_size, &fillcount);
+ if(data->req.upload_chunky && conn->bits.authneg) {
+ fillcount = 0;
+ data->req.upload_chunky = FALSE;
+ result = CURLE_OK;
+ }
+ else {
+ result = Curl_fillreadbuffer(data, data->set.upload_buffer_size,
+ &fillcount);
+ }
if(result) {
data->state.hresult = result;
return HYPER_POLL_ERROR;
@@ -732,15 +741,15 @@ static int uploadstreamed(void *userdata, hyper_context *ctx,
return HYPER_POLL_ERROR;
}
/* increasing the writebytecount here is a little premature but we
- don't know exactly when the body is sent*/
+ don't know exactly when the body is sent */
data->req.writebytecount += fillcount;
- Curl_pgrsSetUploadCounter(data, fillcount);
+ Curl_pgrsSetUploadCounter(data, data->req.writebytecount);
}
return HYPER_POLL_READY;
}
/*
- * bodysend() sets up headers in the outgoing request for a HTTP transfer that
+ * bodysend() sets up headers in the outgoing request for an HTTP transfer that
* sends a body
*/
@@ -771,15 +780,16 @@ static CURLcode bodysend(struct Curl_easy *data,
hyper_body_set_data_func(body, uploadpostfields);
else {
result = Curl_get_upload_buffer(data);
- if(result)
+ if(result) {
+ hyper_body_free(body);
return result;
+ }
/* init the "upload from here" pointer */
data->req.upload_fromhere = data->state.ulbuf;
hyper_body_set_data_func(body, uploadstreamed);
}
if(HYPERE_OK != hyper_request_set_body(hyperreq, body)) {
/* fail */
- hyper_body_free(body);
result = CURLE_OUT_OF_MEMORY;
}
}
@@ -845,7 +855,7 @@ static void http1xx_cb(void *arg, struct hyper_response *resp)
}
/*
- * Curl_http() gets called from the generic multi_do() function when a HTTP
+ * Curl_http() gets called from the generic multi_do() function when an HTTP
* request is to be performed. This creates and sends a properly constructed
* HTTP request.
*/
@@ -865,7 +875,6 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done)
const char *p_accept; /* Accept: string */
const char *method;
Curl_HttpReq httpreq;
- bool h2 = FALSE;
const char *te = NULL; /* transfer-encoding */
hyper_code rc;
@@ -873,6 +882,7 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done)
may be parts of the request that is not yet sent, since we can deal with
the rest of the request in the PERFORM phase. */
*done = TRUE;
+ Curl_client_cleanup(data);
infof(data, "Time for the Hyper dance");
memset(h, 0, sizeof(struct hyptransfer));
@@ -883,6 +893,8 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done)
Curl_http_method(data, conn, &method, &httpreq);
+ DEBUGASSERT(data->req.bytecount == 0);
+
/* setup the authentication headers */
{
char *pq = NULL;
@@ -938,8 +950,9 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done)
goto error;
}
if(conn->alpn == CURL_HTTP_VERSION_2) {
- hyper_clientconn_options_http2(options, 1);
- h2 = TRUE;
+ failf(data, "ALPN protocol h2 not supported with Hyper");
+ result = CURLE_UNSUPPORTED_PROTOCOL;
+ goto error;
}
hyper_clientconn_options_set_preserve_header_case(options, 1);
hyper_clientconn_options_set_preserve_header_order(options, 1);
@@ -990,7 +1003,7 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done)
}
}
else {
- if(!h2 && !data->state.disableexpect) {
+ if(!data->state.disableexpect) {
data->state.expect100header = TRUE;
}
}
@@ -1001,7 +1014,7 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done)
goto error;
}
- result = request_target(data, conn, method, h2, req);
+ result = request_target(data, conn, method, req);
if(result)
goto error;
@@ -1022,19 +1035,10 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done)
if(result)
goto error;
- if(!h2) {
- if(data->state.aptr.host) {
- result = Curl_hyper_header(data, headers, data->state.aptr.host);
- if(result)
- goto error;
- }
- }
- else {
- /* For HTTP/2, we show the Host: header as if we sent it, to make it look
- like for HTTP/1 but it isn't actually sent since :authority is then
- used. */
- Curl_debug(data, CURLINFO_HEADER_OUT, data->state.aptr.host,
- strlen(data->state.aptr.host));
+ if(data->state.aptr.host) {
+ result = Curl_hyper_header(data, headers, data->state.aptr.host);
+ if(result)
+ goto error;
}
if(data->state.aptr.proxyuserpwd) {
@@ -1112,6 +1116,16 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done)
goto error;
}
+#ifdef HAVE_LIBZ
+ /* we only consider transfer-encoding magic if libz support is built-in */
+ result = Curl_transferencode(data);
+ if(result)
+ goto error;
+ result = Curl_hyper_header(data, headers, data->state.aptr.te);
+ if(result)
+ goto error;
+#endif
+
if(!Curl_checkheaders(data, STRCONST("Accept-Encoding")) &&
data->set.str[STRING_ENCODING]) {
Curl_safefree(data->state.aptr.accept_encoding);
@@ -1128,16 +1142,6 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done)
else
Curl_safefree(data->state.aptr.accept_encoding);
-#ifdef HAVE_LIBZ
- /* we only consider transfer-encoding magic if libz support is built-in */
- result = Curl_transferencode(data);
- if(result)
- goto error;
- result = Curl_hyper_header(data, headers, data->state.aptr.te);
- if(result)
- goto error;
-#endif
-
result = cookies(data, conn, headers);
if(result)
goto error;
@@ -1159,21 +1163,29 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done)
Curl_debug(data, CURLINFO_HEADER_OUT, (char *)"\r\n", 2);
- data->req.upload_chunky = FALSE;
+ if(data->req.upload_chunky && conn->bits.authneg) {
+ data->req.upload_chunky = TRUE;
+ }
+ else {
+ data->req.upload_chunky = FALSE;
+ }
sendtask = hyper_clientconn_send(client, req);
if(!sendtask) {
failf(data, "hyper_clientconn_send");
result = CURLE_OUT_OF_MEMORY;
goto error;
}
+ req = NULL;
if(HYPERE_OK != hyper_executor_push(h->exec, sendtask)) {
failf(data, "Couldn't hyper_executor_push the send");
result = CURLE_OUT_OF_MEMORY;
goto error;
}
+ sendtask = NULL; /* ownership passed on */
hyper_clientconn_free(client);
+ client = NULL;
if((httpreq == HTTPREQ_GET) || (httpreq == HTTPREQ_HEAD)) {
/* HTTP GET/HEAD download */
@@ -1186,12 +1198,12 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done)
the full request has been sent. */
data->req.start100 = Curl_now();
- /* clear userpwd and proxyuserpwd to avoid re-using old credentials
- * from re-used connections */
+ /* clear userpwd and proxyuserpwd to avoid reusing old credentials
+ * from reused connections */
Curl_safefree(data->state.aptr.userpwd);
Curl_safefree(data->state.aptr.proxyuserpwd);
return CURLE_OK;
- error:
+error:
DEBUGASSERT(result);
if(io)
hyper_io_free(io);
@@ -1202,6 +1214,12 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done)
if(handshake)
hyper_task_free(handshake);
+ if(client)
+ hyper_clientconn_free(client);
+
+ if(req)
+ hyper_request_free(req);
+
return result;
}
diff --git a/lib/c-hyper.h b/lib/c-hyper.h
index 70507ad2a..0c7de90b7 100644
--- a/lib/c-hyper.h
+++ b/lib/c-hyper.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -34,7 +34,6 @@ struct hyptransfer {
hyper_waker *write_waker;
hyper_waker *read_waker;
const hyper_executor *exec;
- hyper_task *endtask;
hyper_waker *exp100_waker;
hyper_waker *send_body_waker;
};
diff --git a/lib/cf-h1-proxy.c b/lib/cf-h1-proxy.c
new file mode 100644
index 000000000..2e23b0b9f
--- /dev/null
+++ b/lib/cf-h1-proxy.c
@@ -0,0 +1,1114 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+
+#if !defined(CURL_DISABLE_PROXY) && !defined(CURL_DISABLE_HTTP)
+
+#include <curl/curl.h>
+#ifdef USE_HYPER
+#include <hyper.h>
+#endif
+#include "urldata.h"
+#include "dynbuf.h"
+#include "sendf.h"
+#include "http.h"
+#include "http1.h"
+#include "http_proxy.h"
+#include "url.h"
+#include "select.h"
+#include "progress.h"
+#include "cfilters.h"
+#include "cf-h1-proxy.h"
+#include "connect.h"
+#include "curl_trc.h"
+#include "curlx.h"
+#include "vtls/vtls.h"
+#include "transfer.h"
+#include "multiif.h"
+
+/* The last 3 #include files should be in this order */
+#include "curl_printf.h"
+#include "curl_memory.h"
+#include "memdebug.h"
+
+
+typedef enum {
+ H1_TUNNEL_INIT, /* init/default/no tunnel state */
+ H1_TUNNEL_CONNECT, /* CONNECT request is being send */
+ H1_TUNNEL_RECEIVE, /* CONNECT answer is being received */
+ H1_TUNNEL_RESPONSE, /* CONNECT response received completely */
+ H1_TUNNEL_ESTABLISHED,
+ H1_TUNNEL_FAILED
+} h1_tunnel_state;
+
+/* struct for HTTP CONNECT tunneling */
+struct h1_tunnel_state {
+ struct HTTP CONNECT;
+ struct dynbuf rcvbuf;
+ struct dynbuf request_data;
+ size_t nsent;
+ size_t headerlines;
+ enum keeponval {
+ KEEPON_DONE,
+ KEEPON_CONNECT,
+ KEEPON_IGNORE
+ } keepon;
+ curl_off_t cl; /* size of content to read and ignore */
+ h1_tunnel_state tunnel_state;
+ BIT(chunked_encoding);
+ BIT(close_connection);
+};
+
+
+static bool tunnel_is_established(struct h1_tunnel_state *ts)
+{
+ return ts && (ts->tunnel_state == H1_TUNNEL_ESTABLISHED);
+}
+
+static bool tunnel_is_failed(struct h1_tunnel_state *ts)
+{
+ return ts && (ts->tunnel_state == H1_TUNNEL_FAILED);
+}
+
+static CURLcode tunnel_reinit(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct h1_tunnel_state *ts)
+{
+ (void)data;
+ (void)cf;
+ DEBUGASSERT(ts);
+ Curl_dyn_reset(&ts->rcvbuf);
+ Curl_dyn_reset(&ts->request_data);
+ ts->tunnel_state = H1_TUNNEL_INIT;
+ ts->keepon = KEEPON_CONNECT;
+ ts->cl = 0;
+ ts->close_connection = FALSE;
+ return CURLE_OK;
+}
+
+static CURLcode tunnel_init(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct h1_tunnel_state **pts)
+{
+ struct h1_tunnel_state *ts;
+ CURLcode result;
+
+ if(cf->conn->handler->flags & PROTOPT_NOTCPPROXY) {
+ failf(data, "%s cannot be done over CONNECT", cf->conn->handler->scheme);
+ return CURLE_UNSUPPORTED_PROTOCOL;
+ }
+
+ /* we might need the upload buffer for streaming a partial request */
+ result = Curl_get_upload_buffer(data);
+ if(result)
+ return result;
+
+ ts = calloc(1, sizeof(*ts));
+ if(!ts)
+ return CURLE_OUT_OF_MEMORY;
+
+ infof(data, "allocate connect buffer");
+
+ Curl_dyn_init(&ts->rcvbuf, DYN_PROXY_CONNECT_HEADERS);
+ Curl_dyn_init(&ts->request_data, DYN_HTTP_REQUEST);
+
+ *pts = ts;
+ connkeep(cf->conn, "HTTP proxy CONNECT");
+ return tunnel_reinit(cf, data, ts);
+}
+
+static void h1_tunnel_go_state(struct Curl_cfilter *cf,
+ struct h1_tunnel_state *ts,
+ h1_tunnel_state new_state,
+ struct Curl_easy *data)
+{
+ if(ts->tunnel_state == new_state)
+ return;
+ /* leaving this one */
+ switch(ts->tunnel_state) {
+ case H1_TUNNEL_CONNECT:
+ data->req.ignorebody = FALSE;
+ break;
+ default:
+ break;
+ }
+ /* entering this one */
+ switch(new_state) {
+ case H1_TUNNEL_INIT:
+ CURL_TRC_CF(data, cf, "new tunnel state 'init'");
+ tunnel_reinit(cf, data, ts);
+ break;
+
+ case H1_TUNNEL_CONNECT:
+ CURL_TRC_CF(data, cf, "new tunnel state 'connect'");
+ ts->tunnel_state = H1_TUNNEL_CONNECT;
+ ts->keepon = KEEPON_CONNECT;
+ Curl_dyn_reset(&ts->rcvbuf);
+ break;
+
+ case H1_TUNNEL_RECEIVE:
+ CURL_TRC_CF(data, cf, "new tunnel state 'receive'");
+ ts->tunnel_state = H1_TUNNEL_RECEIVE;
+ break;
+
+ case H1_TUNNEL_RESPONSE:
+ CURL_TRC_CF(data, cf, "new tunnel state 'response'");
+ ts->tunnel_state = H1_TUNNEL_RESPONSE;
+ break;
+
+ case H1_TUNNEL_ESTABLISHED:
+ CURL_TRC_CF(data, cf, "new tunnel state 'established'");
+ infof(data, "CONNECT phase completed");
+ data->state.authproxy.done = TRUE;
+ data->state.authproxy.multipass = FALSE;
+ /* FALLTHROUGH */
+ case H1_TUNNEL_FAILED:
+ if(new_state == H1_TUNNEL_FAILED)
+ CURL_TRC_CF(data, cf, "new tunnel state 'failed'");
+ ts->tunnel_state = new_state;
+ Curl_dyn_reset(&ts->rcvbuf);
+ Curl_dyn_reset(&ts->request_data);
+ /* restore the protocol pointer */
+ data->info.httpcode = 0; /* clear it as it might've been used for the
+ proxy */
+ /* If a proxy-authorization header was used for the proxy, then we should
+ make sure that it isn't accidentally used for the document request
+ after we've connected. So let's free and clear it here. */
+ Curl_safefree(data->state.aptr.proxyuserpwd);
+#ifdef USE_HYPER
+ data->state.hconnect = FALSE;
+#endif
+ break;
+ }
+}
+
+static void tunnel_free(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct h1_tunnel_state *ts = cf->ctx;
+ if(ts) {
+ h1_tunnel_go_state(cf, ts, H1_TUNNEL_FAILED, data);
+ Curl_dyn_free(&ts->rcvbuf);
+ Curl_dyn_free(&ts->request_data);
+ free(ts);
+ cf->ctx = NULL;
+ }
+}
+
+#ifndef USE_HYPER
+static CURLcode start_CONNECT(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct h1_tunnel_state *ts)
+{
+ struct httpreq *req = NULL;
+ int http_minor;
+ CURLcode result;
+
+ /* This only happens if we've looped here due to authentication
+ reasons, and we don't really use the newly cloned URL here
+ then. Just free() it. */
+ Curl_safefree(data->req.newurl);
+
+ result = Curl_http_proxy_create_CONNECT(&req, cf, data, 1);
+ if(result)
+ goto out;
+
+ infof(data, "Establish HTTP proxy tunnel to %s", req->authority);
+
+ Curl_dyn_reset(&ts->request_data);
+ ts->nsent = 0;
+ ts->headerlines = 0;
+ http_minor = (cf->conn->http_proxy.proxytype == CURLPROXY_HTTP_1_0) ? 0 : 1;
+
+ result = Curl_h1_req_write_head(req, http_minor, &ts->request_data);
+
+out:
+ if(result)
+ failf(data, "Failed sending CONNECT to proxy");
+ if(req)
+ Curl_http_req_free(req);
+ return result;
+}
+
+static CURLcode send_CONNECT(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct h1_tunnel_state *ts,
+ bool *done)
+{
+ char *buf = Curl_dyn_ptr(&ts->request_data);
+ size_t request_len = Curl_dyn_len(&ts->request_data);
+ size_t blen = request_len;
+ CURLcode result = CURLE_OK;
+ ssize_t nwritten;
+
+ if(blen <= ts->nsent)
+ goto out; /* we are done */
+
+ blen -= ts->nsent;
+ buf += ts->nsent;
+
+ nwritten = cf->next->cft->do_send(cf->next, data, buf, blen, &result);
+ if(nwritten < 0) {
+ if(result == CURLE_AGAIN) {
+ result = CURLE_OK;
+ }
+ goto out;
+ }
+
+ DEBUGASSERT(blen >= (size_t)nwritten);
+ ts->nsent += (size_t)nwritten;
+ Curl_debug(data, CURLINFO_HEADER_OUT, buf, (size_t)nwritten);
+
+out:
+ if(result)
+ failf(data, "Failed sending CONNECT to proxy");
+ *done = (!result && (ts->nsent >= request_len));
+ return result;
+}
+
+static CURLcode on_resp_header(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct h1_tunnel_state *ts,
+ const char *header)
+{
+ CURLcode result = CURLE_OK;
+ struct SingleRequest *k = &data->req;
+ (void)cf;
+
+ if((checkprefix("WWW-Authenticate:", header) &&
+ (401 == k->httpcode)) ||
+ (checkprefix("Proxy-authenticate:", header) &&
+ (407 == k->httpcode))) {
+
+ bool proxy = (k->httpcode == 407) ? TRUE : FALSE;
+ char *auth = Curl_copy_header_value(header);
+ if(!auth)
+ return CURLE_OUT_OF_MEMORY;
+
+ CURL_TRC_CF(data, cf, "CONNECT: fwd auth header '%s'", header);
+ result = Curl_http_input_auth(data, proxy, auth);
+
+ free(auth);
+
+ if(result)
+ return result;
+ }
+ else if(checkprefix("Content-Length:", header)) {
+ if(k->httpcode/100 == 2) {
+ /* A client MUST ignore any Content-Length or Transfer-Encoding
+ header fields received in a successful response to CONNECT.
+ "Successful" described as: 2xx (Successful). RFC 7231 4.3.6 */
+ infof(data, "Ignoring Content-Length in CONNECT %03d response",
+ k->httpcode);
+ }
+ else {
+ (void)curlx_strtoofft(header + strlen("Content-Length:"),
+ NULL, 10, &ts->cl);
+ }
+ }
+ else if(Curl_compareheader(header,
+ STRCONST("Connection:"), STRCONST("close")))
+ ts->close_connection = TRUE;
+ else if(checkprefix("Transfer-Encoding:", header)) {
+ if(k->httpcode/100 == 2) {
+ /* A client MUST ignore any Content-Length or Transfer-Encoding
+ header fields received in a successful response to CONNECT.
+ "Successful" described as: 2xx (Successful). RFC 7231 4.3.6 */
+ infof(data, "Ignoring Transfer-Encoding in "
+ "CONNECT %03d response", k->httpcode);
+ }
+ else if(Curl_compareheader(header,
+ STRCONST("Transfer-Encoding:"),
+ STRCONST("chunked"))) {
+ infof(data, "CONNECT responded chunked");
+ ts->chunked_encoding = TRUE;
+ /* init our chunky engine */
+ Curl_httpchunk_init(data);
+ }
+ }
+ else if(Curl_compareheader(header,
+ STRCONST("Proxy-Connection:"),
+ STRCONST("close")))
+ ts->close_connection = TRUE;
+ else if(!strncmp(header, "HTTP/1.", 7) &&
+ ((header[7] == '0') || (header[7] == '1')) &&
+ (header[8] == ' ') &&
+ ISDIGIT(header[9]) && ISDIGIT(header[10]) && ISDIGIT(header[11]) &&
+ !ISDIGIT(header[12])) {
+ /* store the HTTP code from the proxy */
+ data->info.httpproxycode = k->httpcode = (header[9] - '0') * 100 +
+ (header[10] - '0') * 10 + (header[11] - '0');
+ }
+ return result;
+}
+
+static CURLcode recv_CONNECT_resp(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct h1_tunnel_state *ts,
+ bool *done)
+{
+ CURLcode result = CURLE_OK;
+ struct SingleRequest *k = &data->req;
+ curl_socket_t tunnelsocket = Curl_conn_cf_get_socket(cf, data);
+ char *linep;
+ size_t perline;
+ int error, writetype;
+
+#define SELECT_OK 0
+#define SELECT_ERROR 1
+
+ error = SELECT_OK;
+ *done = FALSE;
+
+ if(!Curl_conn_data_pending(data, cf->sockindex))
+ return CURLE_OK;
+
+ while(ts->keepon) {
+ ssize_t nread;
+ char byte;
+
+ /* Read one byte at a time to avoid a race condition. Wait at most one
+ second before looping to ensure continuous pgrsUpdates. */
+ result = Curl_read(data, tunnelsocket, &byte, 1, &nread);
+ if(result == CURLE_AGAIN)
+ /* socket buffer drained, return */
+ return CURLE_OK;
+
+ if(Curl_pgrsUpdate(data))
+ return CURLE_ABORTED_BY_CALLBACK;
+
+ if(result) {
+ ts->keepon = KEEPON_DONE;
+ break;
+ }
+
+ if(nread <= 0) {
+ if(data->set.proxyauth && data->state.authproxy.avail &&
+ data->state.aptr.proxyuserpwd) {
+ /* proxy auth was requested and there was proxy auth available,
+ then deem this as "mere" proxy disconnect */
+ ts->close_connection = TRUE;
+ infof(data, "Proxy CONNECT connection closed");
+ }
+ else {
+ error = SELECT_ERROR;
+ failf(data, "Proxy CONNECT aborted");
+ }
+ ts->keepon = KEEPON_DONE;
+ break;
+ }
+
+ if(ts->keepon == KEEPON_IGNORE) {
+ /* This means we are currently ignoring a response-body */
+
+ if(ts->cl) {
+ /* A Content-Length based body: simply count down the counter
+ and make sure to break out of the loop when we're done! */
+ ts->cl--;
+ if(ts->cl <= 0) {
+ ts->keepon = KEEPON_DONE;
+ break;
+ }
+ }
+ else {
+ /* chunked-encoded body, so we need to do the chunked dance
+ properly to know when the end of the body is reached */
+ CHUNKcode r;
+ CURLcode extra;
+ size_t consumed = 0;
+
+ /* now parse the chunked piece of data so that we can
+ properly tell when the stream ends */
+ r = Curl_httpchunk_read(data, &byte, 1, &consumed, &extra);
+ if(r == CHUNKE_STOP) {
+ /* we're done reading chunks! */
+ infof(data, "chunk reading DONE");
+ ts->keepon = KEEPON_DONE;
+ }
+ }
+ continue;
+ }
+
+ if(Curl_dyn_addn(&ts->rcvbuf, &byte, 1)) {
+ failf(data, "CONNECT response too large");
+ return CURLE_RECV_ERROR;
+ }
+
+ /* if this is not the end of a header line then continue */
+ if(byte != 0x0a)
+ continue;
+
+ ts->headerlines++;
+ linep = Curl_dyn_ptr(&ts->rcvbuf);
+ perline = Curl_dyn_len(&ts->rcvbuf); /* amount of bytes in this line */
+
+ /* output debug if that is requested */
+ Curl_debug(data, CURLINFO_HEADER_IN, linep, perline);
+
+ /* send the header to the callback */
+ writetype = CLIENTWRITE_HEADER | CLIENTWRITE_CONNECT |
+ (ts->headerlines == 1 ? CLIENTWRITE_STATUS : 0);
+ result = Curl_client_write(data, writetype, linep, perline);
+ if(result)
+ return result;
+
+ result = Curl_bump_headersize(data, perline, TRUE);
+ if(result)
+ return result;
+
+ /* Newlines are CRLF, so the CR is ignored as the line isn't
+ really terminated until the LF comes. Treat a following CR
+ as end-of-headers as well.*/
+
+ if(('\r' == linep[0]) ||
+ ('\n' == linep[0])) {
+ /* end of response-headers from the proxy */
+
+ if((407 == k->httpcode) && !data->state.authproblem) {
+ /* If we get a 407 response code with content length
+ when we have no auth problem, we must ignore the
+ whole response-body */
+ ts->keepon = KEEPON_IGNORE;
+
+ if(ts->cl) {
+ infof(data, "Ignore %" CURL_FORMAT_CURL_OFF_T
+ " bytes of response-body", ts->cl);
+ }
+ else if(ts->chunked_encoding) {
+ CHUNKcode r;
+ CURLcode extra;
+ size_t consumed = 0;
+
+ infof(data, "Ignore chunked response-body");
+
+ /* We set ignorebody true here since the chunked decoder
+ function will acknowledge that. Pay attention so that this is
+ cleared again when this function returns! */
+ k->ignorebody = TRUE;
+
+ if(linep[1] == '\n')
+ /* this can only be a LF if the letter at index 0 was a CR */
+ linep++;
+
+ /* now parse the chunked piece of data so that we can properly
+ tell when the stream ends */
+ r = Curl_httpchunk_read(data, linep + 1, 1, &consumed, &extra);
+ if(r == CHUNKE_STOP) {
+ /* we're done reading chunks! */
+ infof(data, "chunk reading DONE");
+ ts->keepon = KEEPON_DONE;
+ }
+ }
+ else {
+ /* without content-length or chunked encoding, we
+ can't keep the connection alive since the close is
+ the end signal so we bail out at once instead */
+ CURL_TRC_CF(data, cf, "CONNECT: no content-length or chunked");
+ ts->keepon = KEEPON_DONE;
+ }
+ }
+ else {
+ ts->keepon = KEEPON_DONE;
+ }
+
+ DEBUGASSERT(ts->keepon == KEEPON_IGNORE
+ || ts->keepon == KEEPON_DONE);
+ continue;
+ }
+
+ result = on_resp_header(cf, data, ts, linep);
+ if(result)
+ return result;
+
+ Curl_dyn_reset(&ts->rcvbuf);
+ } /* while there's buffer left and loop is requested */
+
+ if(error)
+ result = CURLE_RECV_ERROR;
+ *done = (ts->keepon == KEEPON_DONE);
+ if(!result && *done && data->info.httpproxycode/100 != 2) {
+ /* Deal with the possibly already received authenticate
+ headers. 'newurl' is set to a new URL if we must loop. */
+ result = Curl_http_auth_act(data);
+ }
+ return result;
+}
+
+#else /* USE_HYPER */
+
+static CURLcode CONNECT_host(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ char **pauthority,
+ char **phost_header)
+{
+ const char *hostname;
+ int port;
+ bool ipv6_ip;
+ CURLcode result;
+ char *authority; /* for CONNECT, the destination host + port */
+ char *host_header = NULL; /* Host: authority */
+
+ result = Curl_http_proxy_get_destination(cf, &hostname, &port, &ipv6_ip);
+ if(result)
+ return result;
+
+ authority = aprintf("%s%s%s:%d", ipv6_ip?"[":"", hostname, ipv6_ip?"]":"",
+ port);
+ if(!authority)
+ return CURLE_OUT_OF_MEMORY;
+
+ /* If user is not overriding the Host header later */
+ if(!Curl_checkProxyheaders(data, cf->conn, STRCONST("Host"))) {
+ host_header = aprintf("Host: %s\r\n", authority);
+ if(!host_header) {
+ free(authority);
+ return CURLE_OUT_OF_MEMORY;
+ }
+ }
+ *pauthority = authority;
+ *phost_header = host_header;
+ return CURLE_OK;
+}
+
+/* The Hyper version of CONNECT */
+static CURLcode start_CONNECT(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct h1_tunnel_state *ts)
+{
+ struct connectdata *conn = cf->conn;
+ struct hyptransfer *h = &data->hyp;
+ curl_socket_t tunnelsocket = Curl_conn_cf_get_socket(cf, data);
+ hyper_io *io = NULL;
+ hyper_request *req = NULL;
+ hyper_headers *headers = NULL;
+ hyper_clientconn_options *options = NULL;
+ hyper_task *handshake = NULL;
+ hyper_task *task = NULL; /* for the handshake */
+ hyper_clientconn *client = NULL;
+ hyper_task *sendtask = NULL; /* for the send */
+ char *authority = NULL; /* for CONNECT */
+ char *host_header = NULL; /* Host: */
+ CURLcode result = CURLE_OUT_OF_MEMORY;
+ (void)ts;
+
+ io = hyper_io_new();
+ if(!io) {
+ failf(data, "Couldn't create hyper IO");
+ result = CURLE_OUT_OF_MEMORY;
+ goto error;
+ }
+ /* tell Hyper how to read/write network data */
+ hyper_io_set_userdata(io, data);
+ hyper_io_set_read(io, Curl_hyper_recv);
+ hyper_io_set_write(io, Curl_hyper_send);
+ conn->sockfd = tunnelsocket;
+
+ data->state.hconnect = TRUE;
+
+ /* create an executor to poll futures */
+ if(!h->exec) {
+ h->exec = hyper_executor_new();
+ if(!h->exec) {
+ failf(data, "Couldn't create hyper executor");
+ result = CURLE_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+
+ options = hyper_clientconn_options_new();
+ if(!options) {
+ failf(data, "Couldn't create hyper client options");
+ result = CURLE_OUT_OF_MEMORY;
+ goto error;
+ }
+ hyper_clientconn_options_set_preserve_header_case(options, 1);
+ hyper_clientconn_options_set_preserve_header_order(options, 1);
+
+ hyper_clientconn_options_exec(options, h->exec);
+
+ /* "Both the `io` and the `options` are consumed in this function
+ call" */
+ handshake = hyper_clientconn_handshake(io, options);
+ if(!handshake) {
+ failf(data, "Couldn't create hyper client handshake");
+ result = CURLE_OUT_OF_MEMORY;
+ goto error;
+ }
+ io = NULL;
+ options = NULL;
+
+ if(HYPERE_OK != hyper_executor_push(h->exec, handshake)) {
+ failf(data, "Couldn't hyper_executor_push the handshake");
+ result = CURLE_OUT_OF_MEMORY;
+ goto error;
+ }
+ handshake = NULL; /* ownership passed on */
+
+ task = hyper_executor_poll(h->exec);
+ if(!task) {
+ failf(data, "Couldn't hyper_executor_poll the handshake");
+ result = CURLE_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ client = hyper_task_value(task);
+ hyper_task_free(task);
+
+ req = hyper_request_new();
+ if(!req) {
+ failf(data, "Couldn't hyper_request_new");
+ result = CURLE_OUT_OF_MEMORY;
+ goto error;
+ }
+ if(hyper_request_set_method(req, (uint8_t *)"CONNECT",
+ strlen("CONNECT"))) {
+ failf(data, "error setting method");
+ result = CURLE_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ /* This only happens if we've looped here due to authentication
+ reasons, and we don't really use the newly cloned URL here
+ then. Just free() it. */
+ Curl_safefree(data->req.newurl);
+
+ result = CONNECT_host(cf, data, &authority, &host_header);
+ if(result)
+ goto error;
+
+ infof(data, "Establish HTTP proxy tunnel to %s", authority);
+
+ if(hyper_request_set_uri(req, (uint8_t *)authority,
+ strlen(authority))) {
+ failf(data, "error setting path");
+ result = CURLE_OUT_OF_MEMORY;
+ goto error;
+ }
+ if(data->set.verbose) {
+ char *se = aprintf("CONNECT %s HTTP/1.1\r\n", authority);
+ if(!se) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto error;
+ }
+ Curl_debug(data, CURLINFO_HEADER_OUT, se, strlen(se));
+ free(se);
+ }
+ /* Setup the proxy-authorization header, if any */
+ result = Curl_http_output_auth(data, conn, "CONNECT", HTTPREQ_GET,
+ authority, TRUE);
+ if(result)
+ goto error;
+ Curl_safefree(authority);
+
+ /* default is 1.1 */
+ if((conn->http_proxy.proxytype == CURLPROXY_HTTP_1_0) &&
+ (HYPERE_OK != hyper_request_set_version(req,
+ HYPER_HTTP_VERSION_1_0))) {
+ failf(data, "error setting HTTP version");
+ result = CURLE_OUT_OF_MEMORY;
+ goto error;
+ }
+
+ headers = hyper_request_headers(req);
+ if(!headers) {
+ failf(data, "hyper_request_headers");
+ result = CURLE_OUT_OF_MEMORY;
+ goto error;
+ }
+ if(host_header) {
+ result = Curl_hyper_header(data, headers, host_header);
+ if(result)
+ goto error;
+ Curl_safefree(host_header);
+ }
+
+ if(data->state.aptr.proxyuserpwd) {
+ result = Curl_hyper_header(data, headers,
+ data->state.aptr.proxyuserpwd);
+ if(result)
+ goto error;
+ }
+
+ if(!Curl_checkProxyheaders(data, conn, STRCONST("User-Agent")) &&
+ data->set.str[STRING_USERAGENT]) {
+ struct dynbuf ua;
+ Curl_dyn_init(&ua, DYN_HTTP_REQUEST);
+ result = Curl_dyn_addf(&ua, "User-Agent: %s\r\n",
+ data->set.str[STRING_USERAGENT]);
+ if(result)
+ goto error;
+ result = Curl_hyper_header(data, headers, Curl_dyn_ptr(&ua));
+ if(result)
+ goto error;
+ Curl_dyn_free(&ua);
+ }
+
+ if(!Curl_checkProxyheaders(data, conn, STRCONST("Proxy-Connection"))) {
+ result = Curl_hyper_header(data, headers,
+ "Proxy-Connection: Keep-Alive");
+ if(result)
+ goto error;
+ }
+
+ result = Curl_add_custom_headers(data, TRUE, headers);
+ if(result)
+ goto error;
+
+ sendtask = hyper_clientconn_send(client, req);
+ if(!sendtask) {
+ failf(data, "hyper_clientconn_send");
+ result = CURLE_OUT_OF_MEMORY;
+ goto error;
+ }
+ req = NULL;
+
+ if(HYPERE_OK != hyper_executor_push(h->exec, sendtask)) {
+ failf(data, "Couldn't hyper_executor_push the send");
+ result = CURLE_OUT_OF_MEMORY;
+ goto error;
+ }
+ sendtask = NULL; /* ownership passed on */
+
+ hyper_clientconn_free(client);
+ client = NULL;
+
+error:
+ free(host_header);
+ free(authority);
+ if(io)
+ hyper_io_free(io);
+ if(options)
+ hyper_clientconn_options_free(options);
+ if(handshake)
+ hyper_task_free(handshake);
+ if(client)
+ hyper_clientconn_free(client);
+ if(req)
+ hyper_request_free(req);
+
+ return result;
+}
+
+static CURLcode send_CONNECT(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct h1_tunnel_state *ts,
+ bool *done)
+{
+ struct hyptransfer *h = &data->hyp;
+ struct connectdata *conn = cf->conn;
+ hyper_task *task = NULL;
+ hyper_error *hypererr = NULL;
+ CURLcode result = CURLE_OK;
+
+ (void)ts;
+ (void)conn;
+ do {
+ task = hyper_executor_poll(h->exec);
+ if(task) {
+ bool error = hyper_task_type(task) == HYPER_TASK_ERROR;
+ if(error)
+ hypererr = hyper_task_value(task);
+ hyper_task_free(task);
+ if(error) {
+ /* this could probably use a better error code? */
+ result = CURLE_OUT_OF_MEMORY;
+ goto error;
+ }
+ }
+ } while(task);
+error:
+ *done = (result == CURLE_OK);
+ if(hypererr) {
+ uint8_t errbuf[256];
+ size_t errlen = hyper_error_print(hypererr, errbuf, sizeof(errbuf));
+ failf(data, "Hyper: %.*s", (int)errlen, errbuf);
+ hyper_error_free(hypererr);
+ }
+ return result;
+}
+
+static CURLcode recv_CONNECT_resp(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct h1_tunnel_state *ts,
+ bool *done)
+{
+ struct hyptransfer *h = &data->hyp;
+ CURLcode result;
+ int didwhat;
+
+ (void)ts;
+ *done = FALSE;
+ result = Curl_hyper_stream(data, cf->conn, &didwhat, done,
+ CURL_CSELECT_IN | CURL_CSELECT_OUT);
+ if(result || !*done)
+ return result;
+ if(h->exec) {
+ hyper_executor_free(h->exec);
+ h->exec = NULL;
+ }
+ if(h->read_waker) {
+ hyper_waker_free(h->read_waker);
+ h->read_waker = NULL;
+ }
+ if(h->write_waker) {
+ hyper_waker_free(h->write_waker);
+ h->write_waker = NULL;
+ }
+ return result;
+}
+
+#endif /* USE_HYPER */
+
+static CURLcode H1_CONNECT(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct h1_tunnel_state *ts)
+{
+ struct connectdata *conn = cf->conn;
+ CURLcode result;
+ bool done;
+
+ if(tunnel_is_established(ts))
+ return CURLE_OK;
+ if(tunnel_is_failed(ts))
+ return CURLE_RECV_ERROR; /* Need a cfilter close and new bootstrap */
+
+ do {
+ timediff_t check;
+
+ check = Curl_timeleft(data, NULL, TRUE);
+ if(check <= 0) {
+ failf(data, "Proxy CONNECT aborted due to timeout");
+ result = CURLE_OPERATION_TIMEDOUT;
+ goto out;
+ }
+
+ switch(ts->tunnel_state) {
+ case H1_TUNNEL_INIT:
+ /* Prepare the CONNECT request and make a first attempt to send. */
+ CURL_TRC_CF(data, cf, "CONNECT start");
+ result = start_CONNECT(cf, data, ts);
+ if(result)
+ goto out;
+ h1_tunnel_go_state(cf, ts, H1_TUNNEL_CONNECT, data);
+ /* FALLTHROUGH */
+
+ case H1_TUNNEL_CONNECT:
+ /* see that the request is completely sent */
+ CURL_TRC_CF(data, cf, "CONNECT send");
+ result = send_CONNECT(cf, data, ts, &done);
+ if(result || !done)
+ goto out;
+ h1_tunnel_go_state(cf, ts, H1_TUNNEL_RECEIVE, data);
+ /* FALLTHROUGH */
+
+ case H1_TUNNEL_RECEIVE:
+ /* read what is there */
+ CURL_TRC_CF(data, cf, "CONNECT receive");
+ result = recv_CONNECT_resp(cf, data, ts, &done);
+ if(Curl_pgrsUpdate(data)) {
+ result = CURLE_ABORTED_BY_CALLBACK;
+ goto out;
+ }
+ /* error or not complete yet. return for more multi-multi */
+ if(result || !done)
+ goto out;
+ /* got it */
+ h1_tunnel_go_state(cf, ts, H1_TUNNEL_RESPONSE, data);
+ /* FALLTHROUGH */
+
+ case H1_TUNNEL_RESPONSE:
+ CURL_TRC_CF(data, cf, "CONNECT response");
+ if(data->req.newurl) {
+ /* not the "final" response, we need to do a follow up request.
+ * If the other side indicated a connection close, or if someone
+ * else told us to close this connection, do so now.
+ */
+ if(ts->close_connection || conn->bits.close) {
+ /* Close this filter and the sub-chain, re-connect the
+ * sub-chain and continue. Closing this filter will
+ * reset our tunnel state. To avoid recursion, we return
+ * and expect to be called again.
+ */
+ CURL_TRC_CF(data, cf, "CONNECT need to close+open");
+ infof(data, "Connect me again please");
+ Curl_conn_cf_close(cf, data);
+ connkeep(conn, "HTTP proxy CONNECT");
+ result = Curl_conn_cf_connect(cf->next, data, FALSE, &done);
+ goto out;
+ }
+ else {
+ /* staying on this connection, reset state */
+ h1_tunnel_go_state(cf, ts, H1_TUNNEL_INIT, data);
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ } while(data->req.newurl);
+
+ DEBUGASSERT(ts->tunnel_state == H1_TUNNEL_RESPONSE);
+ if(data->info.httpproxycode/100 != 2) {
+ /* a non-2xx response and we have no next url to try. */
+ Curl_safefree(data->req.newurl);
+ /* failure, close this connection to avoid reuse */
+ streamclose(conn, "proxy CONNECT failure");
+ h1_tunnel_go_state(cf, ts, H1_TUNNEL_FAILED, data);
+ failf(data, "CONNECT tunnel failed, response %d", data->req.httpcode);
+ return CURLE_RECV_ERROR;
+ }
+ /* 2xx response, SUCCESS! */
+ h1_tunnel_go_state(cf, ts, H1_TUNNEL_ESTABLISHED, data);
+ infof(data, "CONNECT tunnel established, response %d",
+ data->info.httpproxycode);
+ result = CURLE_OK;
+
+out:
+ if(result)
+ h1_tunnel_go_state(cf, ts, H1_TUNNEL_FAILED, data);
+ return result;
+}
+
+static CURLcode cf_h1_proxy_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool blocking, bool *done)
+{
+ CURLcode result;
+ struct h1_tunnel_state *ts = cf->ctx;
+
+ if(cf->connected) {
+ *done = TRUE;
+ return CURLE_OK;
+ }
+
+ CURL_TRC_CF(data, cf, "connect");
+ result = cf->next->cft->do_connect(cf->next, data, blocking, done);
+ if(result || !*done)
+ return result;
+
+ *done = FALSE;
+ if(!ts) {
+ result = tunnel_init(cf, data, &ts);
+ if(result)
+ return result;
+ cf->ctx = ts;
+ }
+
+ /* TODO: can we do blocking? */
+ /* We want "seamless" operations through HTTP proxy tunnel */
+
+ result = H1_CONNECT(cf, data, ts);
+ if(result)
+ goto out;
+ Curl_safefree(data->state.aptr.proxyuserpwd);
+
+out:
+ *done = (result == CURLE_OK) && tunnel_is_established(cf->ctx);
+ if(*done) {
+ cf->connected = TRUE;
+ tunnel_free(cf, data);
+ }
+ return result;
+}
+
+static void cf_h1_proxy_adjust_pollset(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct easy_pollset *ps)
+{
+ struct h1_tunnel_state *ts = cf->ctx;
+
+ if(!cf->connected) {
+ /* If we are not connected, but the filter "below" is
+ * and not waiting on something, we are tunneling. */
+ curl_socket_t sock = Curl_conn_cf_get_socket(cf, data);
+ if(ts) {
+ /* when we've sent a CONNECT to a proxy, we should rather either
+ wait for the socket to become readable to be able to get the
+ response headers or if we're still sending the request, wait
+ for write. */
+ if(ts->CONNECT.sending == HTTPSEND_REQUEST)
+ Curl_pollset_set_out_only(data, ps, sock);
+ else
+ Curl_pollset_set_in_only(data, ps, sock);
+ }
+ else
+ Curl_pollset_set_out_only(data, ps, sock);
+ }
+}
+
+static void cf_h1_proxy_destroy(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ CURL_TRC_CF(data, cf, "destroy");
+ tunnel_free(cf, data);
+}
+
+static void cf_h1_proxy_close(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ CURL_TRC_CF(data, cf, "close");
+ cf->connected = FALSE;
+ if(cf->ctx) {
+ h1_tunnel_go_state(cf, cf->ctx, H1_TUNNEL_INIT, data);
+ }
+ if(cf->next)
+ cf->next->cft->do_close(cf->next, data);
+}
+
+
+struct Curl_cftype Curl_cft_h1_proxy = {
+ "H1-PROXY",
+ CF_TYPE_IP_CONNECT,
+ 0,
+ cf_h1_proxy_destroy,
+ cf_h1_proxy_connect,
+ cf_h1_proxy_close,
+ Curl_cf_http_proxy_get_host,
+ cf_h1_proxy_adjust_pollset,
+ Curl_cf_def_data_pending,
+ Curl_cf_def_send,
+ Curl_cf_def_recv,
+ Curl_cf_def_cntrl,
+ Curl_cf_def_conn_is_alive,
+ Curl_cf_def_conn_keep_alive,
+ Curl_cf_def_query,
+};
+
+CURLcode Curl_cf_h1_proxy_insert_after(struct Curl_cfilter *cf_at,
+ struct Curl_easy *data)
+{
+ struct Curl_cfilter *cf;
+ CURLcode result;
+
+ (void)data;
+ result = Curl_cf_create(&cf, &Curl_cft_h1_proxy, NULL);
+ if(!result)
+ Curl_conn_cf_insert_after(cf_at, cf);
+ return result;
+}
+
+#endif /* !CURL_DISABLE_PROXY && ! CURL_DISABLE_HTTP */
diff --git a/src/tool_panykey.c b/lib/cf-h1-proxy.h
index 81feaba7e..ac5bed0b2 100644
--- a/src/tool_panykey.c
+++ b/lib/cf-h1-proxy.h
@@ -1,3 +1,5 @@
+#ifndef HEADER_CURL_H1_PROXY_H
+#define HEADER_CURL_H1_PROXY_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
@@ -5,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -21,27 +23,17 @@
* SPDX-License-Identifier: curl
*
***************************************************************************/
-#include "tool_setup.h"
-#if defined(NETWARE)
+#include "curl_setup.h"
-#ifdef NETWARE
-# ifdef __NOVELL_LIBC__
-# include <screen.h>
-# else
-# include <nwconio.h>
-# endif
-#endif
+#if !defined(CURL_DISABLE_PROXY) && !defined(CURL_DISABLE_HTTP)
-#include "tool_panykey.h"
+CURLcode Curl_cf_h1_proxy_insert_after(struct Curl_cfilter *cf,
+ struct Curl_easy *data);
-#include "memdebug.h" /* keep this as LAST include */
+extern struct Curl_cftype Curl_cft_h1_proxy;
-void tool_pressanykey(void)
-{
-#if defined(NETWARE)
- pressanykey();
-#endif
-}
-#endif /* NETWARE */
+#endif /* !CURL_DISABLE_PROXY && !CURL_DISABLE_HTTP */
+
+#endif /* HEADER_CURL_H1_PROXY_H */
diff --git a/lib/cf-h2-proxy.c b/lib/cf-h2-proxy.c
new file mode 100644
index 000000000..147acdc86
--- /dev/null
+++ b/lib/cf-h2-proxy.c
@@ -0,0 +1,1567 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+
+#if defined(USE_NGHTTP2) && !defined(CURL_DISABLE_PROXY)
+
+#include <nghttp2/nghttp2.h>
+#include "urldata.h"
+#include "cfilters.h"
+#include "connect.h"
+#include "curl_trc.h"
+#include "bufq.h"
+#include "dynbuf.h"
+#include "dynhds.h"
+#include "http1.h"
+#include "http2.h"
+#include "http_proxy.h"
+#include "multiif.h"
+#include "cf-h2-proxy.h"
+
+/* The last 3 #include files should be in this order */
+#include "curl_printf.h"
+#include "curl_memory.h"
+#include "memdebug.h"
+
+#define PROXY_H2_CHUNK_SIZE (16*1024)
+
+#define PROXY_HTTP2_HUGE_WINDOW_SIZE (100 * 1024 * 1024)
+#define H2_TUNNEL_WINDOW_SIZE (10 * 1024 * 1024)
+
+#define PROXY_H2_NW_RECV_CHUNKS (H2_TUNNEL_WINDOW_SIZE / PROXY_H2_CHUNK_SIZE)
+#define PROXY_H2_NW_SEND_CHUNKS 1
+
+#define H2_TUNNEL_RECV_CHUNKS (H2_TUNNEL_WINDOW_SIZE / PROXY_H2_CHUNK_SIZE)
+#define H2_TUNNEL_SEND_CHUNKS ((128 * 1024) / PROXY_H2_CHUNK_SIZE)
+
+
+typedef enum {
+ H2_TUNNEL_INIT, /* init/default/no tunnel state */
+ H2_TUNNEL_CONNECT, /* CONNECT request is being send */
+ H2_TUNNEL_RESPONSE, /* CONNECT response received completely */
+ H2_TUNNEL_ESTABLISHED,
+ H2_TUNNEL_FAILED
+} h2_tunnel_state;
+
+struct tunnel_stream {
+ struct http_resp *resp;
+ struct bufq recvbuf;
+ struct bufq sendbuf;
+ char *authority;
+ int32_t stream_id;
+ uint32_t error;
+ size_t upload_blocked_len;
+ h2_tunnel_state state;
+ BIT(has_final_response);
+ BIT(closed);
+ BIT(reset);
+};
+
+static CURLcode tunnel_stream_init(struct Curl_cfilter *cf,
+ struct tunnel_stream *ts)
+{
+ const char *hostname;
+ int port;
+ bool ipv6_ip;
+ CURLcode result;
+
+ ts->state = H2_TUNNEL_INIT;
+ ts->stream_id = -1;
+ Curl_bufq_init2(&ts->recvbuf, PROXY_H2_CHUNK_SIZE, H2_TUNNEL_RECV_CHUNKS,
+ BUFQ_OPT_SOFT_LIMIT);
+ Curl_bufq_init(&ts->sendbuf, PROXY_H2_CHUNK_SIZE, H2_TUNNEL_SEND_CHUNKS);
+
+ result = Curl_http_proxy_get_destination(cf, &hostname, &port, &ipv6_ip);
+ if(result)
+ return result;
+
+ ts->authority = /* host:port with IPv6 support */
+ aprintf("%s%s%s:%d", ipv6_ip?"[":"", hostname, ipv6_ip?"]":"", port);
+ if(!ts->authority)
+ return CURLE_OUT_OF_MEMORY;
+
+ return CURLE_OK;
+}
+
+static void tunnel_stream_clear(struct tunnel_stream *ts)
+{
+ Curl_http_resp_free(ts->resp);
+ Curl_bufq_free(&ts->recvbuf);
+ Curl_bufq_free(&ts->sendbuf);
+ Curl_safefree(ts->authority);
+ memset(ts, 0, sizeof(*ts));
+ ts->state = H2_TUNNEL_INIT;
+}
+
+static void h2_tunnel_go_state(struct Curl_cfilter *cf,
+ struct tunnel_stream *ts,
+ h2_tunnel_state new_state,
+ struct Curl_easy *data)
+{
+ (void)cf;
+
+ if(ts->state == new_state)
+ return;
+ /* leaving this one */
+ switch(ts->state) {
+ case H2_TUNNEL_CONNECT:
+ data->req.ignorebody = FALSE;
+ break;
+ default:
+ break;
+ }
+ /* entering this one */
+ switch(new_state) {
+ case H2_TUNNEL_INIT:
+ CURL_TRC_CF(data, cf, "[%d] new tunnel state 'init'", ts->stream_id);
+ tunnel_stream_clear(ts);
+ break;
+
+ case H2_TUNNEL_CONNECT:
+ CURL_TRC_CF(data, cf, "[%d] new tunnel state 'connect'", ts->stream_id);
+ ts->state = H2_TUNNEL_CONNECT;
+ break;
+
+ case H2_TUNNEL_RESPONSE:
+ CURL_TRC_CF(data, cf, "[%d] new tunnel state 'response'", ts->stream_id);
+ ts->state = H2_TUNNEL_RESPONSE;
+ break;
+
+ case H2_TUNNEL_ESTABLISHED:
+ CURL_TRC_CF(data, cf, "[%d] new tunnel state 'established'",
+ ts->stream_id);
+ infof(data, "CONNECT phase completed");
+ data->state.authproxy.done = TRUE;
+ data->state.authproxy.multipass = FALSE;
+ /* FALLTHROUGH */
+ case H2_TUNNEL_FAILED:
+ if(new_state == H2_TUNNEL_FAILED)
+ CURL_TRC_CF(data, cf, "[%d] new tunnel state 'failed'", ts->stream_id);
+ ts->state = new_state;
+ /* If a proxy-authorization header was used for the proxy, then we should
+ make sure that it isn't accidentally used for the document request
+ after we've connected. So let's free and clear it here. */
+ Curl_safefree(data->state.aptr.proxyuserpwd);
+ break;
+ }
+}
+
+struct cf_h2_proxy_ctx {
+ nghttp2_session *h2;
+ /* The easy handle used in the current filter call, cleared at return */
+ struct cf_call_data call_data;
+
+ struct bufq inbufq; /* network receive buffer */
+ struct bufq outbufq; /* network send buffer */
+
+ struct tunnel_stream tunnel; /* our tunnel CONNECT stream */
+ int32_t goaway_error;
+ int32_t last_stream_id;
+ BIT(conn_closed);
+ BIT(goaway);
+ BIT(nw_out_blocked);
+};
+
+/* How to access `call_data` from a cf_h2 filter */
+#undef CF_CTX_CALL_DATA
+#define CF_CTX_CALL_DATA(cf) \
+ ((struct cf_h2_proxy_ctx *)(cf)->ctx)->call_data
+
+static void cf_h2_proxy_ctx_clear(struct cf_h2_proxy_ctx *ctx)
+{
+ struct cf_call_data save = ctx->call_data;
+
+ if(ctx->h2) {
+ nghttp2_session_del(ctx->h2);
+ }
+ Curl_bufq_free(&ctx->inbufq);
+ Curl_bufq_free(&ctx->outbufq);
+ tunnel_stream_clear(&ctx->tunnel);
+ memset(ctx, 0, sizeof(*ctx));
+ ctx->call_data = save;
+}
+
+static void cf_h2_proxy_ctx_free(struct cf_h2_proxy_ctx *ctx)
+{
+ if(ctx) {
+ cf_h2_proxy_ctx_clear(ctx);
+ free(ctx);
+ }
+}
+
+static void drain_tunnel(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct tunnel_stream *tunnel)
+{
+ unsigned char bits;
+
+ (void)cf;
+ bits = CURL_CSELECT_IN;
+ if(!tunnel->closed && !tunnel->reset && tunnel->upload_blocked_len)
+ bits |= CURL_CSELECT_OUT;
+ if(data->state.dselect_bits != bits) {
+ CURL_TRC_CF(data, cf, "[%d] DRAIN dselect_bits=%x",
+ tunnel->stream_id, bits);
+ data->state.dselect_bits = bits;
+ Curl_expire(data, 0, EXPIRE_RUN_NOW);
+ }
+}
+
+static ssize_t proxy_nw_in_reader(void *reader_ctx,
+ unsigned char *buf, size_t buflen,
+ CURLcode *err)
+{
+ struct Curl_cfilter *cf = reader_ctx;
+ ssize_t nread;
+
+ if(cf) {
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+ nread = Curl_conn_cf_recv(cf->next, data, (char *)buf, buflen, err);
+ CURL_TRC_CF(data, cf, "[0] nw_in_reader(len=%zu) -> %zd, %d",
+ buflen, nread, *err);
+ }
+ else {
+ nread = 0;
+ }
+ return nread;
+}
+
+static ssize_t proxy_h2_nw_out_writer(void *writer_ctx,
+ const unsigned char *buf, size_t buflen,
+ CURLcode *err)
+{
+ struct Curl_cfilter *cf = writer_ctx;
+ ssize_t nwritten;
+
+ if(cf) {
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+ nwritten = Curl_conn_cf_send(cf->next, data, (const char *)buf, buflen,
+ err);
+ CURL_TRC_CF(data, cf, "[0] nw_out_writer(len=%zu) -> %zd, %d",
+ buflen, nwritten, *err);
+ }
+ else {
+ nwritten = 0;
+ }
+ return nwritten;
+}
+
+static int proxy_h2_client_new(struct Curl_cfilter *cf,
+ nghttp2_session_callbacks *cbs)
+{
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+ nghttp2_option *o;
+
+ int rc = nghttp2_option_new(&o);
+ if(rc)
+ return rc;
+ /* We handle window updates ourself to enforce buffer limits */
+ nghttp2_option_set_no_auto_window_update(o, 1);
+#if NGHTTP2_VERSION_NUM >= 0x013200
+ /* with 1.50.0 */
+ /* turn off RFC 9113 leading and trailing white spaces validation against
+ HTTP field value. */
+ nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation(o, 1);
+#endif
+ rc = nghttp2_session_client_new2(&ctx->h2, cbs, cf, o);
+ nghttp2_option_del(o);
+ return rc;
+}
+
+static ssize_t on_session_send(nghttp2_session *h2,
+ const uint8_t *buf, size_t blen,
+ int flags, void *userp);
+static int proxy_h2_on_frame_recv(nghttp2_session *session,
+ const nghttp2_frame *frame,
+ void *userp);
+#ifndef CURL_DISABLE_VERBOSE_STRINGS
+static int proxy_h2_on_frame_send(nghttp2_session *session,
+ const nghttp2_frame *frame,
+ void *userp);
+#endif
+static int proxy_h2_on_stream_close(nghttp2_session *session,
+ int32_t stream_id,
+ uint32_t error_code, void *userp);
+static int proxy_h2_on_header(nghttp2_session *session,
+ const nghttp2_frame *frame,
+ const uint8_t *name, size_t namelen,
+ const uint8_t *value, size_t valuelen,
+ uint8_t flags,
+ void *userp);
+static int tunnel_recv_callback(nghttp2_session *session, uint8_t flags,
+ int32_t stream_id,
+ const uint8_t *mem, size_t len, void *userp);
+
+/*
+ * Initialize the cfilter context
+ */
+static CURLcode cf_h2_proxy_ctx_init(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+ CURLcode result = CURLE_OUT_OF_MEMORY;
+ nghttp2_session_callbacks *cbs = NULL;
+ int rc;
+
+ DEBUGASSERT(!ctx->h2);
+ memset(&ctx->tunnel, 0, sizeof(ctx->tunnel));
+
+ Curl_bufq_init(&ctx->inbufq, PROXY_H2_CHUNK_SIZE, PROXY_H2_NW_RECV_CHUNKS);
+ Curl_bufq_init(&ctx->outbufq, PROXY_H2_CHUNK_SIZE, PROXY_H2_NW_SEND_CHUNKS);
+
+ if(tunnel_stream_init(cf, &ctx->tunnel))
+ goto out;
+
+ rc = nghttp2_session_callbacks_new(&cbs);
+ if(rc) {
+ failf(data, "Couldn't initialize nghttp2 callbacks");
+ goto out;
+ }
+
+ nghttp2_session_callbacks_set_send_callback(cbs, on_session_send);
+ nghttp2_session_callbacks_set_on_frame_recv_callback(
+ cbs, proxy_h2_on_frame_recv);
+#ifndef CURL_DISABLE_VERBOSE_STRINGS
+ nghttp2_session_callbacks_set_on_frame_send_callback(cbs,
+ proxy_h2_on_frame_send);
+#endif
+ nghttp2_session_callbacks_set_on_data_chunk_recv_callback(
+ cbs, tunnel_recv_callback);
+ nghttp2_session_callbacks_set_on_stream_close_callback(
+ cbs, proxy_h2_on_stream_close);
+ nghttp2_session_callbacks_set_on_header_callback(cbs, proxy_h2_on_header);
+
+ /* The nghttp2 session is not yet setup, do it */
+ rc = proxy_h2_client_new(cf, cbs);
+ if(rc) {
+ failf(data, "Couldn't initialize nghttp2");
+ goto out;
+ }
+
+ {
+ nghttp2_settings_entry iv[3];
+
+ iv[0].settings_id = NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS;
+ iv[0].value = Curl_multi_max_concurrent_streams(data->multi);
+ iv[1].settings_id = NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE;
+ iv[1].value = H2_TUNNEL_WINDOW_SIZE;
+ iv[2].settings_id = NGHTTP2_SETTINGS_ENABLE_PUSH;
+ iv[2].value = 0;
+ rc = nghttp2_submit_settings(ctx->h2, NGHTTP2_FLAG_NONE, iv, 3);
+ if(rc) {
+ failf(data, "nghttp2_submit_settings() failed: %s(%d)",
+ nghttp2_strerror(rc), rc);
+ result = CURLE_HTTP2;
+ goto out;
+ }
+ }
+
+ rc = nghttp2_session_set_local_window_size(ctx->h2, NGHTTP2_FLAG_NONE, 0,
+ PROXY_HTTP2_HUGE_WINDOW_SIZE);
+ if(rc) {
+ failf(data, "nghttp2_session_set_local_window_size() failed: %s(%d)",
+ nghttp2_strerror(rc), rc);
+ result = CURLE_HTTP2;
+ goto out;
+ }
+
+
+ /* all set, traffic will be send on connect */
+ result = CURLE_OK;
+
+out:
+ if(cbs)
+ nghttp2_session_callbacks_del(cbs);
+ CURL_TRC_CF(data, cf, "[0] init proxy ctx -> %d", result);
+ return result;
+}
+
+static int proxy_h2_should_close_session(struct cf_h2_proxy_ctx *ctx)
+{
+ return !nghttp2_session_want_read(ctx->h2) &&
+ !nghttp2_session_want_write(ctx->h2);
+}
+
+static CURLcode proxy_h2_nw_out_flush(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+ ssize_t nwritten;
+ CURLcode result;
+
+ (void)data;
+ if(Curl_bufq_is_empty(&ctx->outbufq))
+ return CURLE_OK;
+
+ nwritten = Curl_bufq_pass(&ctx->outbufq, proxy_h2_nw_out_writer, cf,
+ &result);
+ if(nwritten < 0) {
+ if(result == CURLE_AGAIN) {
+ CURL_TRC_CF(data, cf, "[0] flush nw send buffer(%zu) -> EAGAIN",
+ Curl_bufq_len(&ctx->outbufq));
+ ctx->nw_out_blocked = 1;
+ }
+ return result;
+ }
+ CURL_TRC_CF(data, cf, "[0] nw send buffer flushed");
+ return Curl_bufq_is_empty(&ctx->outbufq)? CURLE_OK: CURLE_AGAIN;
+}
+
+/*
+ * Processes pending input left in network input buffer.
+ * This function returns 0 if it succeeds, or -1 and error code will
+ * be assigned to *err.
+ */
+static int proxy_h2_process_pending_input(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ CURLcode *err)
+{
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+ const unsigned char *buf;
+ size_t blen;
+ ssize_t rv;
+
+ while(Curl_bufq_peek(&ctx->inbufq, &buf, &blen)) {
+
+ rv = nghttp2_session_mem_recv(ctx->h2, (const uint8_t *)buf, blen);
+ CURL_TRC_CF(data, cf, "[0] %zu bytes to nghttp2 -> %zd", blen, rv);
+ if(rv < 0) {
+ failf(data,
+ "process_pending_input: nghttp2_session_mem_recv() returned "
+ "%zd:%s", rv, nghttp2_strerror((int)rv));
+ *err = CURLE_RECV_ERROR;
+ return -1;
+ }
+ Curl_bufq_skip(&ctx->inbufq, (size_t)rv);
+ if(Curl_bufq_is_empty(&ctx->inbufq)) {
+ CURL_TRC_CF(data, cf, "[0] all data in connection buffer processed");
+ break;
+ }
+ else {
+ CURL_TRC_CF(data, cf, "[0] process_pending_input: %zu bytes left "
+ "in connection buffer", Curl_bufq_len(&ctx->inbufq));
+ }
+ }
+
+ return 0;
+}
+
+static CURLcode proxy_h2_progress_ingress(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+ CURLcode result = CURLE_OK;
+ ssize_t nread;
+
+ /* Process network input buffer fist */
+ if(!Curl_bufq_is_empty(&ctx->inbufq)) {
+ CURL_TRC_CF(data, cf, "[0] process %zu bytes in connection buffer",
+ Curl_bufq_len(&ctx->inbufq));
+ if(proxy_h2_process_pending_input(cf, data, &result) < 0)
+ return result;
+ }
+
+ /* Receive data from the "lower" filters, e.g. network until
+ * it is time to stop or we have enough data for this stream */
+ while(!ctx->conn_closed && /* not closed the connection */
+ !ctx->tunnel.closed && /* nor the tunnel */
+ Curl_bufq_is_empty(&ctx->inbufq) && /* and we consumed our input */
+ !Curl_bufq_is_full(&ctx->tunnel.recvbuf)) {
+
+ nread = Curl_bufq_slurp(&ctx->inbufq, proxy_nw_in_reader, cf, &result);
+ CURL_TRC_CF(data, cf, "[0] read %zu bytes nw data -> %zd, %d",
+ Curl_bufq_len(&ctx->inbufq), nread, result);
+ if(nread < 0) {
+ if(result != CURLE_AGAIN) {
+ failf(data, "Failed receiving HTTP2 data");
+ return result;
+ }
+ break;
+ }
+ else if(nread == 0) {
+ ctx->conn_closed = TRUE;
+ break;
+ }
+
+ if(proxy_h2_process_pending_input(cf, data, &result))
+ return result;
+ }
+
+ if(ctx->conn_closed && Curl_bufq_is_empty(&ctx->inbufq)) {
+ connclose(cf->conn, "GOAWAY received");
+ }
+
+ return CURLE_OK;
+}
+
+static CURLcode proxy_h2_progress_egress(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+ int rv = 0;
+
+ ctx->nw_out_blocked = 0;
+ while(!rv && !ctx->nw_out_blocked && nghttp2_session_want_write(ctx->h2))
+ rv = nghttp2_session_send(ctx->h2);
+
+ if(nghttp2_is_fatal(rv)) {
+ CURL_TRC_CF(data, cf, "[0] nghttp2_session_send error (%s)%d",
+ nghttp2_strerror(rv), rv);
+ return CURLE_SEND_ERROR;
+ }
+ return proxy_h2_nw_out_flush(cf, data);
+}
+
+static ssize_t on_session_send(nghttp2_session *h2,
+ const uint8_t *buf, size_t blen, int flags,
+ void *userp)
+{
+ struct Curl_cfilter *cf = userp;
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+ ssize_t nwritten;
+ CURLcode result = CURLE_OK;
+
+ (void)h2;
+ (void)flags;
+ DEBUGASSERT(data);
+
+ nwritten = Curl_bufq_write_pass(&ctx->outbufq, buf, blen,
+ proxy_h2_nw_out_writer, cf, &result);
+ if(nwritten < 0) {
+ if(result == CURLE_AGAIN) {
+ return NGHTTP2_ERR_WOULDBLOCK;
+ }
+ failf(data, "Failed sending HTTP2 data");
+ return NGHTTP2_ERR_CALLBACK_FAILURE;
+ }
+
+ if(!nwritten)
+ return NGHTTP2_ERR_WOULDBLOCK;
+
+ return nwritten;
+}
+
+#ifndef CURL_DISABLE_VERBOSE_STRINGS
+static int proxy_h2_fr_print(const nghttp2_frame *frame,
+ char *buffer, size_t blen)
+{
+ switch(frame->hd.type) {
+ case NGHTTP2_DATA: {
+ return msnprintf(buffer, blen,
+ "FRAME[DATA, len=%d, eos=%d, padlen=%d]",
+ (int)frame->hd.length,
+ !!(frame->hd.flags & NGHTTP2_FLAG_END_STREAM),
+ (int)frame->data.padlen);
+ }
+ case NGHTTP2_HEADERS: {
+ return msnprintf(buffer, blen,
+ "FRAME[HEADERS, len=%d, hend=%d, eos=%d]",
+ (int)frame->hd.length,
+ !!(frame->hd.flags & NGHTTP2_FLAG_END_HEADERS),
+ !!(frame->hd.flags & NGHTTP2_FLAG_END_STREAM));
+ }
+ case NGHTTP2_PRIORITY: {
+ return msnprintf(buffer, blen,
+ "FRAME[PRIORITY, len=%d, flags=%d]",
+ (int)frame->hd.length, frame->hd.flags);
+ }
+ case NGHTTP2_RST_STREAM: {
+ return msnprintf(buffer, blen,
+ "FRAME[RST_STREAM, len=%d, flags=%d, error=%u]",
+ (int)frame->hd.length, frame->hd.flags,
+ frame->rst_stream.error_code);
+ }
+ case NGHTTP2_SETTINGS: {
+ if(frame->hd.flags & NGHTTP2_FLAG_ACK) {
+ return msnprintf(buffer, blen, "FRAME[SETTINGS, ack=1]");
+ }
+ return msnprintf(buffer, blen,
+ "FRAME[SETTINGS, len=%d]", (int)frame->hd.length);
+ }
+ case NGHTTP2_PUSH_PROMISE: {
+ return msnprintf(buffer, blen,
+ "FRAME[PUSH_PROMISE, len=%d, hend=%d]",
+ (int)frame->hd.length,
+ !!(frame->hd.flags & NGHTTP2_FLAG_END_HEADERS));
+ }
+ case NGHTTP2_PING: {
+ return msnprintf(buffer, blen,
+ "FRAME[PING, len=%d, ack=%d]",
+ (int)frame->hd.length,
+ frame->hd.flags&NGHTTP2_FLAG_ACK);
+ }
+ case NGHTTP2_GOAWAY: {
+ char scratch[128];
+ size_t s_len = sizeof(scratch)/sizeof(scratch[0]);
+ size_t len = (frame->goaway.opaque_data_len < s_len)?
+ frame->goaway.opaque_data_len : s_len-1;
+ if(len)
+ memcpy(scratch, frame->goaway.opaque_data, len);
+ scratch[len] = '\0';
+ return msnprintf(buffer, blen, "FRAME[GOAWAY, error=%d, reason='%s', "
+ "last_stream=%d]", frame->goaway.error_code,
+ scratch, frame->goaway.last_stream_id);
+ }
+ case NGHTTP2_WINDOW_UPDATE: {
+ return msnprintf(buffer, blen,
+ "FRAME[WINDOW_UPDATE, incr=%d]",
+ frame->window_update.window_size_increment);
+ }
+ default:
+ return msnprintf(buffer, blen, "FRAME[%d, len=%d, flags=%d]",
+ frame->hd.type, (int)frame->hd.length,
+ frame->hd.flags);
+ }
+}
+
+static int proxy_h2_on_frame_send(nghttp2_session *session,
+ const nghttp2_frame *frame,
+ void *userp)
+{
+ struct Curl_cfilter *cf = userp;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+
+ (void)session;
+ DEBUGASSERT(data);
+ if(data && Curl_trc_cf_is_verbose(cf, data)) {
+ char buffer[256];
+ int len;
+ len = proxy_h2_fr_print(frame, buffer, sizeof(buffer)-1);
+ buffer[len] = 0;
+ CURL_TRC_CF(data, cf, "[%d] -> %s", frame->hd.stream_id, buffer);
+ }
+ return 0;
+}
+#endif /* !CURL_DISABLE_VERBOSE_STRINGS */
+
+static int proxy_h2_on_frame_recv(nghttp2_session *session,
+ const nghttp2_frame *frame,
+ void *userp)
+{
+ struct Curl_cfilter *cf = userp;
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+ int32_t stream_id = frame->hd.stream_id;
+
+ (void)session;
+ DEBUGASSERT(data);
+#ifndef CURL_DISABLE_VERBOSE_STRINGS
+ if(Curl_trc_cf_is_verbose(cf, data)) {
+ char buffer[256];
+ int len;
+ len = proxy_h2_fr_print(frame, buffer, sizeof(buffer)-1);
+ buffer[len] = 0;
+ CURL_TRC_CF(data, cf, "[%d] <- %s",frame->hd.stream_id, buffer);
+ }
+#endif /* !CURL_DISABLE_VERBOSE_STRINGS */
+
+ if(!stream_id) {
+ /* stream ID zero is for connection-oriented stuff */
+ DEBUGASSERT(data);
+ switch(frame->hd.type) {
+ case NGHTTP2_SETTINGS:
+ /* Since the initial stream window is 64K, a request might be on HOLD,
+ * due to exhaustion. The (initial) SETTINGS may announce a much larger
+ * window and *assume* that we treat this like a WINDOW_UPDATE. Some
+ * servers send an explicit WINDOW_UPDATE, but not all seem to do that.
+ * To be safe, we UNHOLD a stream in order not to stall. */
+ if(CURL_WANT_SEND(data)) {
+ drain_tunnel(cf, data, &ctx->tunnel);
+ }
+ break;
+ case NGHTTP2_GOAWAY:
+ ctx->goaway = TRUE;
+ break;
+ default:
+ break;
+ }
+ return 0;
+ }
+
+ if(stream_id != ctx->tunnel.stream_id) {
+ CURL_TRC_CF(data, cf, "[%d] rcvd FRAME not for tunnel", stream_id);
+ return NGHTTP2_ERR_CALLBACK_FAILURE;
+ }
+
+ switch(frame->hd.type) {
+ case NGHTTP2_HEADERS:
+ /* nghttp2 guarantees that :status is received, and we store it to
+ stream->status_code. Fuzzing has proven this can still be reached
+ without status code having been set. */
+ if(!ctx->tunnel.resp)
+ return NGHTTP2_ERR_CALLBACK_FAILURE;
+ /* Only final status code signals the end of header */
+ CURL_TRC_CF(data, cf, "[%d] got http status: %d",
+ stream_id, ctx->tunnel.resp->status);
+ if(!ctx->tunnel.has_final_response) {
+ if(ctx->tunnel.resp->status / 100 != 1) {
+ ctx->tunnel.has_final_response = TRUE;
+ }
+ }
+ break;
+ case NGHTTP2_WINDOW_UPDATE:
+ if(CURL_WANT_SEND(data)) {
+ drain_tunnel(cf, data, &ctx->tunnel);
+ }
+ break;
+ default:
+ break;
+ }
+ return 0;
+}
+
+static int proxy_h2_on_header(nghttp2_session *session,
+ const nghttp2_frame *frame,
+ const uint8_t *name, size_t namelen,
+ const uint8_t *value, size_t valuelen,
+ uint8_t flags,
+ void *userp)
+{
+ struct Curl_cfilter *cf = userp;
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+ int32_t stream_id = frame->hd.stream_id;
+ CURLcode result;
+
+ (void)flags;
+ (void)data;
+ (void)session;
+ DEBUGASSERT(stream_id); /* should never be a zero stream ID here */
+ if(stream_id != ctx->tunnel.stream_id) {
+ CURL_TRC_CF(data, cf, "[%d] header for non-tunnel stream: "
+ "%.*s: %.*s", stream_id,
+ (int)namelen, name, (int)valuelen, value);
+ return NGHTTP2_ERR_CALLBACK_FAILURE;
+ }
+
+ if(frame->hd.type == NGHTTP2_PUSH_PROMISE)
+ return NGHTTP2_ERR_CALLBACK_FAILURE;
+
+ if(ctx->tunnel.has_final_response) {
+ /* we do not do anything with trailers for tunnel streams */
+ return 0;
+ }
+
+ if(namelen == sizeof(HTTP_PSEUDO_STATUS) - 1 &&
+ memcmp(HTTP_PSEUDO_STATUS, name, namelen) == 0) {
+ int http_status;
+ struct http_resp *resp;
+
+ /* status: always comes first, we might get more than one response,
+ * link the previous ones for keepers */
+ result = Curl_http_decode_status(&http_status,
+ (const char *)value, valuelen);
+ if(result)
+ return NGHTTP2_ERR_CALLBACK_FAILURE;
+ result = Curl_http_resp_make(&resp, http_status, NULL);
+ if(result)
+ return NGHTTP2_ERR_CALLBACK_FAILURE;
+ resp->prev = ctx->tunnel.resp;
+ ctx->tunnel.resp = resp;
+ CURL_TRC_CF(data, cf, "[%d] status: HTTP/2 %03d",
+ stream_id, ctx->tunnel.resp->status);
+ return 0;
+ }
+
+ if(!ctx->tunnel.resp)
+ return NGHTTP2_ERR_CALLBACK_FAILURE;
+
+ result = Curl_dynhds_add(&ctx->tunnel.resp->headers,
+ (const char *)name, namelen,
+ (const char *)value, valuelen);
+ if(result)
+ return NGHTTP2_ERR_CALLBACK_FAILURE;
+
+ CURL_TRC_CF(data, cf, "[%d] header: %.*s: %.*s",
+ stream_id, (int)namelen, name, (int)valuelen, value);
+
+ return 0; /* 0 is successful */
+}
+
+static ssize_t tunnel_send_callback(nghttp2_session *session,
+ int32_t stream_id,
+ uint8_t *buf, size_t length,
+ uint32_t *data_flags,
+ nghttp2_data_source *source,
+ void *userp)
+{
+ struct Curl_cfilter *cf = userp;
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+ struct tunnel_stream *ts;
+ CURLcode result;
+ ssize_t nread;
+
+ (void)source;
+ (void)data;
+ (void)ctx;
+
+ if(!stream_id)
+ return NGHTTP2_ERR_INVALID_ARGUMENT;
+
+ ts = nghttp2_session_get_stream_user_data(session, stream_id);
+ if(!ts)
+ return NGHTTP2_ERR_CALLBACK_FAILURE;
+ DEBUGASSERT(ts == &ctx->tunnel);
+
+ nread = Curl_bufq_read(&ts->sendbuf, buf, length, &result);
+ if(nread < 0) {
+ if(result != CURLE_AGAIN)
+ return NGHTTP2_ERR_CALLBACK_FAILURE;
+ return NGHTTP2_ERR_DEFERRED;
+ }
+ if(ts->closed && Curl_bufq_is_empty(&ts->sendbuf))
+ *data_flags = NGHTTP2_DATA_FLAG_EOF;
+
+ CURL_TRC_CF(data, cf, "[%d] tunnel_send_callback -> %zd",
+ ts->stream_id, nread);
+ return nread;
+}
+
+static int tunnel_recv_callback(nghttp2_session *session, uint8_t flags,
+ int32_t stream_id,
+ const uint8_t *mem, size_t len, void *userp)
+{
+ struct Curl_cfilter *cf = userp;
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+ ssize_t nwritten;
+ CURLcode result;
+
+ (void)flags;
+ (void)session;
+ DEBUGASSERT(stream_id); /* should never be a zero stream ID here */
+
+ if(stream_id != ctx->tunnel.stream_id)
+ return NGHTTP2_ERR_CALLBACK_FAILURE;
+
+ nwritten = Curl_bufq_write(&ctx->tunnel.recvbuf, mem, len, &result);
+ if(nwritten < 0) {
+ if(result != CURLE_AGAIN)
+ return NGHTTP2_ERR_CALLBACK_FAILURE;
+ nwritten = 0;
+ }
+ DEBUGASSERT((size_t)nwritten == len);
+ return 0;
+}
+
+static int proxy_h2_on_stream_close(nghttp2_session *session,
+ int32_t stream_id,
+ uint32_t error_code, void *userp)
+{
+ struct Curl_cfilter *cf = userp;
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+
+ (void)session;
+ (void)data;
+
+ if(stream_id != ctx->tunnel.stream_id)
+ return 0;
+
+ CURL_TRC_CF(data, cf, "[%d] proxy_h2_on_stream_close, %s (err %d)",
+ stream_id, nghttp2_http2_strerror(error_code), error_code);
+ ctx->tunnel.closed = TRUE;
+ ctx->tunnel.error = error_code;
+
+ return 0;
+}
+
+static CURLcode proxy_h2_submit(int32_t *pstream_id,
+ struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ nghttp2_session *h2,
+ struct httpreq *req,
+ const nghttp2_priority_spec *pri_spec,
+ void *stream_user_data,
+ nghttp2_data_source_read_callback read_callback,
+ void *read_ctx)
+{
+ struct dynhds h2_headers;
+ nghttp2_nv *nva = NULL;
+ int32_t stream_id = -1;
+ size_t nheader;
+ CURLcode result;
+
+ (void)cf;
+ Curl_dynhds_init(&h2_headers, 0, DYN_HTTP_REQUEST);
+ result = Curl_http_req_to_h2(&h2_headers, req, data);
+ if(result)
+ goto out;
+
+ nva = Curl_dynhds_to_nva(&h2_headers, &nheader);
+ if(!nva) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
+ }
+
+ if(read_callback) {
+ nghttp2_data_provider data_prd;
+
+ data_prd.read_callback = read_callback;
+ data_prd.source.ptr = read_ctx;
+ stream_id = nghttp2_submit_request(h2, pri_spec, nva, nheader,
+ &data_prd, stream_user_data);
+ }
+ else {
+ stream_id = nghttp2_submit_request(h2, pri_spec, nva, nheader,
+ NULL, stream_user_data);
+ }
+
+ if(stream_id < 0) {
+ failf(data, "nghttp2_session_upgrade2() failed: %s(%d)",
+ nghttp2_strerror(stream_id), stream_id);
+ result = CURLE_SEND_ERROR;
+ goto out;
+ }
+ result = CURLE_OK;
+
+out:
+ free(nva);
+ Curl_dynhds_free(&h2_headers);
+ *pstream_id = stream_id;
+ return result;
+}
+
+static CURLcode submit_CONNECT(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct tunnel_stream *ts)
+{
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+ CURLcode result;
+ struct httpreq *req = NULL;
+
+ result = Curl_http_proxy_create_CONNECT(&req, cf, data, 2);
+ if(result)
+ goto out;
+
+ infof(data, "Establish HTTP/2 proxy tunnel to %s", req->authority);
+
+ result = proxy_h2_submit(&ts->stream_id, cf, data, ctx->h2, req,
+ NULL, ts, tunnel_send_callback, cf);
+ if(result) {
+ CURL_TRC_CF(data, cf, "[%d] send, nghttp2_submit_request error: %s",
+ ts->stream_id, nghttp2_strerror(ts->stream_id));
+ }
+
+out:
+ if(req)
+ Curl_http_req_free(req);
+ if(result)
+ failf(data, "Failed sending CONNECT to proxy");
+ return result;
+}
+
+static CURLcode inspect_response(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct tunnel_stream *ts)
+{
+ CURLcode result = CURLE_OK;
+ struct dynhds_entry *auth_reply = NULL;
+ (void)cf;
+
+ DEBUGASSERT(ts->resp);
+ if(ts->resp->status/100 == 2) {
+ infof(data, "CONNECT tunnel established, response %d", ts->resp->status);
+ h2_tunnel_go_state(cf, ts, H2_TUNNEL_ESTABLISHED, data);
+ return CURLE_OK;
+ }
+
+ if(ts->resp->status == 401) {
+ auth_reply = Curl_dynhds_cget(&ts->resp->headers, "WWW-Authenticate");
+ }
+ else if(ts->resp->status == 407) {
+ auth_reply = Curl_dynhds_cget(&ts->resp->headers, "Proxy-Authenticate");
+ }
+
+ if(auth_reply) {
+ CURL_TRC_CF(data, cf, "[0] CONNECT: fwd auth header '%s'",
+ auth_reply->value);
+ result = Curl_http_input_auth(data, ts->resp->status == 407,
+ auth_reply->value);
+ if(result)
+ return result;
+ if(data->req.newurl) {
+ /* Indicator that we should try again */
+ Curl_safefree(data->req.newurl);
+ h2_tunnel_go_state(cf, ts, H2_TUNNEL_INIT, data);
+ return CURLE_OK;
+ }
+ }
+
+ /* Seems to have failed */
+ return CURLE_RECV_ERROR;
+}
+
+static CURLcode H2_CONNECT(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct tunnel_stream *ts)
+{
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+ CURLcode result = CURLE_OK;
+
+ DEBUGASSERT(ts);
+ DEBUGASSERT(ts->authority);
+ do {
+ switch(ts->state) {
+ case H2_TUNNEL_INIT:
+ /* Prepare the CONNECT request and make a first attempt to send. */
+ CURL_TRC_CF(data, cf, "[0] CONNECT start for %s", ts->authority);
+ result = submit_CONNECT(cf, data, ts);
+ if(result)
+ goto out;
+ h2_tunnel_go_state(cf, ts, H2_TUNNEL_CONNECT, data);
+ /* FALLTHROUGH */
+
+ case H2_TUNNEL_CONNECT:
+ /* see that the request is completely sent */
+ result = proxy_h2_progress_ingress(cf, data);
+ if(!result)
+ result = proxy_h2_progress_egress(cf, data);
+ if(result && result != CURLE_AGAIN) {
+ h2_tunnel_go_state(cf, ts, H2_TUNNEL_FAILED, data);
+ break;
+ }
+
+ if(ts->has_final_response) {
+ h2_tunnel_go_state(cf, ts, H2_TUNNEL_RESPONSE, data);
+ }
+ else {
+ result = CURLE_OK;
+ goto out;
+ }
+ /* FALLTHROUGH */
+
+ case H2_TUNNEL_RESPONSE:
+ DEBUGASSERT(ts->has_final_response);
+ result = inspect_response(cf, data, ts);
+ if(result)
+ goto out;
+ break;
+
+ case H2_TUNNEL_ESTABLISHED:
+ return CURLE_OK;
+
+ case H2_TUNNEL_FAILED:
+ return CURLE_RECV_ERROR;
+
+ default:
+ break;
+ }
+
+ } while(ts->state == H2_TUNNEL_INIT);
+
+out:
+ if(result || ctx->tunnel.closed)
+ h2_tunnel_go_state(cf, ts, H2_TUNNEL_FAILED, data);
+ return result;
+}
+
+static CURLcode cf_h2_proxy_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool blocking, bool *done)
+{
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+ CURLcode result = CURLE_OK;
+ struct cf_call_data save;
+ timediff_t check;
+ struct tunnel_stream *ts = &ctx->tunnel;
+
+ if(cf->connected) {
+ *done = TRUE;
+ return CURLE_OK;
+ }
+
+ /* Connect the lower filters first */
+ if(!cf->next->connected) {
+ result = Curl_conn_cf_connect(cf->next, data, blocking, done);
+ if(result || !*done)
+ return result;
+ }
+
+ *done = FALSE;
+
+ CF_DATA_SAVE(save, cf, data);
+ if(!ctx->h2) {
+ result = cf_h2_proxy_ctx_init(cf, data);
+ if(result)
+ goto out;
+ }
+ DEBUGASSERT(ts->authority);
+
+ check = Curl_timeleft(data, NULL, TRUE);
+ if(check <= 0) {
+ failf(data, "Proxy CONNECT aborted due to timeout");
+ result = CURLE_OPERATION_TIMEDOUT;
+ goto out;
+ }
+
+ /* for the secondary socket (FTP), use the "connect to host"
+ * but ignore the "connect to port" (use the secondary port)
+ */
+ result = H2_CONNECT(cf, data, ts);
+
+out:
+ *done = (result == CURLE_OK) && (ts->state == H2_TUNNEL_ESTABLISHED);
+ cf->connected = *done;
+ CF_DATA_RESTORE(cf, save);
+ return result;
+}
+
+static void cf_h2_proxy_close(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+
+ if(ctx) {
+ struct cf_call_data save;
+
+ CF_DATA_SAVE(save, cf, data);
+ cf_h2_proxy_ctx_clear(ctx);
+ CF_DATA_RESTORE(cf, save);
+ }
+ if(cf->next)
+ cf->next->cft->do_close(cf->next, data);
+}
+
+static void cf_h2_proxy_destroy(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+
+ (void)data;
+ if(ctx) {
+ cf_h2_proxy_ctx_free(ctx);
+ cf->ctx = NULL;
+ }
+}
+
+static bool cf_h2_proxy_data_pending(struct Curl_cfilter *cf,
+ const struct Curl_easy *data)
+{
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+ if((ctx && !Curl_bufq_is_empty(&ctx->inbufq)) ||
+ (ctx && ctx->tunnel.state == H2_TUNNEL_ESTABLISHED &&
+ !Curl_bufq_is_empty(&ctx->tunnel.recvbuf)))
+ return TRUE;
+ return cf->next? cf->next->cft->has_data_pending(cf->next, data) : FALSE;
+}
+
+static void cf_h2_proxy_adjust_pollset(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct easy_pollset *ps)
+{
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+ curl_socket_t sock = Curl_conn_cf_get_socket(cf, data);
+ bool want_recv, want_send;
+
+ Curl_pollset_check(data, ps, sock, &want_recv, &want_send);
+ if(ctx->h2 && (want_recv || want_send)) {
+ struct cf_call_data save;
+ bool c_exhaust, s_exhaust;
+
+ CF_DATA_SAVE(save, cf, data);
+ c_exhaust = !nghttp2_session_get_remote_window_size(ctx->h2);
+ s_exhaust = ctx->tunnel.stream_id >= 0 &&
+ !nghttp2_session_get_stream_remote_window_size(
+ ctx->h2, ctx->tunnel.stream_id);
+ want_recv = (want_recv || c_exhaust || s_exhaust);
+ want_send = (!s_exhaust && want_send) ||
+ (!c_exhaust && nghttp2_session_want_write(ctx->h2));
+
+ Curl_pollset_set(data, ps, sock, want_recv, want_send);
+ CF_DATA_RESTORE(cf, save);
+ }
+}
+
+static ssize_t h2_handle_tunnel_close(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ CURLcode *err)
+{
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+ ssize_t rv = 0;
+
+ if(ctx->tunnel.error == NGHTTP2_REFUSED_STREAM) {
+ CURL_TRC_CF(data, cf, "[%d] REFUSED_STREAM, try again on a new "
+ "connection", ctx->tunnel.stream_id);
+ connclose(cf->conn, "REFUSED_STREAM"); /* don't use this anymore */
+ *err = CURLE_RECV_ERROR; /* trigger Curl_retry_request() later */
+ return -1;
+ }
+ else if(ctx->tunnel.error != NGHTTP2_NO_ERROR) {
+ failf(data, "HTTP/2 stream %u was not closed cleanly: %s (err %u)",
+ ctx->tunnel.stream_id, nghttp2_http2_strerror(ctx->tunnel.error),
+ ctx->tunnel.error);
+ *err = CURLE_HTTP2_STREAM;
+ return -1;
+ }
+ else if(ctx->tunnel.reset) {
+ failf(data, "HTTP/2 stream %u was reset", ctx->tunnel.stream_id);
+ *err = CURLE_RECV_ERROR;
+ return -1;
+ }
+
+ *err = CURLE_OK;
+ rv = 0;
+ CURL_TRC_CF(data, cf, "[%d] handle_tunnel_close -> %zd, %d",
+ ctx->tunnel.stream_id, rv, *err);
+ return rv;
+}
+
+static ssize_t tunnel_recv(struct Curl_cfilter *cf, struct Curl_easy *data,
+ char *buf, size_t len, CURLcode *err)
+{
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+ ssize_t nread = -1;
+
+ *err = CURLE_AGAIN;
+ if(!Curl_bufq_is_empty(&ctx->tunnel.recvbuf)) {
+ nread = Curl_bufq_read(&ctx->tunnel.recvbuf,
+ (unsigned char *)buf, len, err);
+ if(nread < 0)
+ goto out;
+ DEBUGASSERT(nread > 0);
+ }
+
+ if(nread < 0) {
+ if(ctx->tunnel.closed) {
+ nread = h2_handle_tunnel_close(cf, data, err);
+ }
+ else if(ctx->tunnel.reset ||
+ (ctx->conn_closed && Curl_bufq_is_empty(&ctx->inbufq)) ||
+ (ctx->goaway && ctx->last_stream_id < ctx->tunnel.stream_id)) {
+ *err = CURLE_RECV_ERROR;
+ nread = -1;
+ }
+ }
+ else if(nread == 0) {
+ *err = CURLE_AGAIN;
+ nread = -1;
+ }
+
+out:
+ CURL_TRC_CF(data, cf, "[%d] tunnel_recv(len=%zu) -> %zd, %d",
+ ctx->tunnel.stream_id, len, nread, *err);
+ return nread;
+}
+
+static ssize_t cf_h2_proxy_recv(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ char *buf, size_t len, CURLcode *err)
+{
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+ ssize_t nread = -1;
+ struct cf_call_data save;
+ CURLcode result;
+
+ if(ctx->tunnel.state != H2_TUNNEL_ESTABLISHED) {
+ *err = CURLE_RECV_ERROR;
+ return -1;
+ }
+ CF_DATA_SAVE(save, cf, data);
+
+ if(Curl_bufq_is_empty(&ctx->tunnel.recvbuf)) {
+ *err = proxy_h2_progress_ingress(cf, data);
+ if(*err)
+ goto out;
+ }
+
+ nread = tunnel_recv(cf, data, buf, len, err);
+
+ if(nread > 0) {
+ CURL_TRC_CF(data, cf, "[%d] increase window by %zd",
+ ctx->tunnel.stream_id, nread);
+ nghttp2_session_consume(ctx->h2, ctx->tunnel.stream_id, (size_t)nread);
+ }
+
+ result = proxy_h2_progress_egress(cf, data);
+ if(result == CURLE_AGAIN) {
+ /* pending data to send, need to be called again. Ideally, we'd
+ * monitor the socket for POLLOUT, but we might not be in SENDING
+ * transfer state any longer and are unable to make this happen.
+ */
+ CURL_TRC_CF(data, cf, "[%d] egress blocked, DRAIN",
+ ctx->tunnel.stream_id);
+ drain_tunnel(cf, data, &ctx->tunnel);
+ }
+ else if(result) {
+ *err = result;
+ nread = -1;
+ }
+
+out:
+ if(!Curl_bufq_is_empty(&ctx->tunnel.recvbuf) &&
+ (nread >= 0 || *err == CURLE_AGAIN)) {
+ /* data pending and no fatal error to report. Need to trigger
+ * draining to avoid stalling when no socket events happen. */
+ drain_tunnel(cf, data, &ctx->tunnel);
+ }
+ CURL_TRC_CF(data, cf, "[%d] cf_recv(len=%zu) -> %zd %d",
+ ctx->tunnel.stream_id, len, nread, *err);
+ CF_DATA_RESTORE(cf, save);
+ return nread;
+}
+
+static ssize_t cf_h2_proxy_send(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ const void *buf, size_t len, CURLcode *err)
+{
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+ struct cf_call_data save;
+ int rv;
+ ssize_t nwritten;
+ CURLcode result;
+ int blocked = 0;
+
+ if(ctx->tunnel.state != H2_TUNNEL_ESTABLISHED) {
+ *err = CURLE_SEND_ERROR;
+ return -1;
+ }
+ CF_DATA_SAVE(save, cf, data);
+
+ if(ctx->tunnel.closed) {
+ nwritten = -1;
+ *err = CURLE_SEND_ERROR;
+ goto out;
+ }
+ else if(ctx->tunnel.upload_blocked_len) {
+ /* the data in `buf` has already been submitted or added to the
+ * buffers, but have been EAGAINed on the last invocation. */
+ DEBUGASSERT(len >= ctx->tunnel.upload_blocked_len);
+ if(len < ctx->tunnel.upload_blocked_len) {
+ /* Did we get called again with a smaller `len`? This should not
+ * happen. We are not prepared to handle that. */
+ failf(data, "HTTP/2 proxy, send again with decreased length");
+ *err = CURLE_HTTP2;
+ nwritten = -1;
+ goto out;
+ }
+ nwritten = (ssize_t)ctx->tunnel.upload_blocked_len;
+ ctx->tunnel.upload_blocked_len = 0;
+ *err = CURLE_OK;
+ }
+ else {
+ nwritten = Curl_bufq_write(&ctx->tunnel.sendbuf, buf, len, err);
+ if(nwritten < 0) {
+ if(*err != CURLE_AGAIN)
+ goto out;
+ nwritten = 0;
+ }
+ }
+
+ if(!Curl_bufq_is_empty(&ctx->tunnel.sendbuf)) {
+ /* req body data is buffered, resume the potentially suspended stream */
+ rv = nghttp2_session_resume_data(ctx->h2, ctx->tunnel.stream_id);
+ if(nghttp2_is_fatal(rv)) {
+ *err = CURLE_SEND_ERROR;
+ nwritten = -1;
+ goto out;
+ }
+ }
+
+ result = proxy_h2_progress_ingress(cf, data);
+ if(result) {
+ *err = result;
+ nwritten = -1;
+ goto out;
+ }
+
+ /* Call the nghttp2 send loop and flush to write ALL buffered data,
+ * headers and/or request body completely out to the network */
+ result = proxy_h2_progress_egress(cf, data);
+ if(result == CURLE_AGAIN) {
+ blocked = 1;
+ }
+ else if(result) {
+ *err = result;
+ nwritten = -1;
+ goto out;
+ }
+ else if(!Curl_bufq_is_empty(&ctx->tunnel.sendbuf)) {
+ /* although we wrote everything that nghttp2 wants to send now,
+ * there is data left in our stream send buffer unwritten. This may
+ * be due to the stream's HTTP/2 flow window being exhausted. */
+ blocked = 1;
+ }
+
+ if(blocked) {
+ /* Unable to send all data, due to connection blocked or H2 window
+ * exhaustion. Data is left in our stream buffer, or nghttp2's internal
+ * frame buffer or our network out buffer. */
+ size_t rwin = nghttp2_session_get_stream_remote_window_size(
+ ctx->h2, ctx->tunnel.stream_id);
+ if(rwin == 0) {
+ /* H2 flow window exhaustion.
+ * FIXME: there is no way to HOLD all transfers that use this
+ * proxy connection AND to UNHOLD all of them again when the
+ * window increases.
+ * We *could* iterate over all data on this conn maybe? */
+ CURL_TRC_CF(data, cf, "[%d] remote flow "
+ "window is exhausted", ctx->tunnel.stream_id);
+ }
+
+ /* Whatever the cause, we need to return CURL_EAGAIN for this call.
+ * We have unwritten state that needs us being invoked again and EAGAIN
+ * is the only way to ensure that. */
+ ctx->tunnel.upload_blocked_len = nwritten;
+ CURL_TRC_CF(data, cf, "[%d] cf_send(len=%zu) BLOCK: win %u/%zu "
+ "blocked_len=%zu",
+ ctx->tunnel.stream_id, len,
+ nghttp2_session_get_remote_window_size(ctx->h2), rwin,
+ nwritten);
+ drain_tunnel(cf, data, &ctx->tunnel);
+ *err = CURLE_AGAIN;
+ nwritten = -1;
+ goto out;
+ }
+ else if(proxy_h2_should_close_session(ctx)) {
+ /* nghttp2 thinks this session is done. If the stream has not been
+ * closed, this is an error state for out transfer */
+ if(ctx->tunnel.closed) {
+ *err = CURLE_SEND_ERROR;
+ nwritten = -1;
+ }
+ else {
+ CURL_TRC_CF(data, cf, "[0] send: nothing to do in this session");
+ *err = CURLE_HTTP2;
+ nwritten = -1;
+ }
+ }
+
+out:
+ if(!Curl_bufq_is_empty(&ctx->tunnel.recvbuf) &&
+ (nwritten >= 0 || *err == CURLE_AGAIN)) {
+ /* data pending and no fatal error to report. Need to trigger
+ * draining to avoid stalling when no socket events happen. */
+ drain_tunnel(cf, data, &ctx->tunnel);
+ }
+ CURL_TRC_CF(data, cf, "[%d] cf_send(len=%zu) -> %zd, %d, "
+ "h2 windows %d-%d (stream-conn), buffers %zu-%zu (stream-conn)",
+ ctx->tunnel.stream_id, len, nwritten, *err,
+ nghttp2_session_get_stream_remote_window_size(
+ ctx->h2, ctx->tunnel.stream_id),
+ nghttp2_session_get_remote_window_size(ctx->h2),
+ Curl_bufq_len(&ctx->tunnel.sendbuf),
+ Curl_bufq_len(&ctx->outbufq));
+ CF_DATA_RESTORE(cf, save);
+ return nwritten;
+}
+
+static bool proxy_h2_connisalive(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool *input_pending)
+{
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+ bool alive = TRUE;
+
+ *input_pending = FALSE;
+ if(!cf->next || !cf->next->cft->is_alive(cf->next, data, input_pending))
+ return FALSE;
+
+ if(*input_pending) {
+ /* This happens before we've sent off a request and the connection is
+ not in use by any other transfer, there shouldn't be any data here,
+ only "protocol frames" */
+ CURLcode result;
+ ssize_t nread = -1;
+
+ *input_pending = FALSE;
+ nread = Curl_bufq_slurp(&ctx->inbufq, proxy_nw_in_reader, cf, &result);
+ if(nread != -1) {
+ if(proxy_h2_process_pending_input(cf, data, &result) < 0)
+ /* immediate error, considered dead */
+ alive = FALSE;
+ else {
+ alive = !proxy_h2_should_close_session(ctx);
+ }
+ }
+ else if(result != CURLE_AGAIN) {
+ /* the read failed so let's say this is dead anyway */
+ alive = FALSE;
+ }
+ }
+
+ return alive;
+}
+
+static bool cf_h2_proxy_is_alive(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool *input_pending)
+{
+ struct cf_h2_proxy_ctx *ctx = cf->ctx;
+ CURLcode result;
+ struct cf_call_data save;
+
+ CF_DATA_SAVE(save, cf, data);
+ result = (ctx && ctx->h2 && proxy_h2_connisalive(cf, data, input_pending));
+ CURL_TRC_CF(data, cf, "[0] conn alive -> %d, input_pending=%d",
+ result, *input_pending);
+ CF_DATA_RESTORE(cf, save);
+ return result;
+}
+
+struct Curl_cftype Curl_cft_h2_proxy = {
+ "H2-PROXY",
+ CF_TYPE_IP_CONNECT,
+ CURL_LOG_LVL_NONE,
+ cf_h2_proxy_destroy,
+ cf_h2_proxy_connect,
+ cf_h2_proxy_close,
+ Curl_cf_http_proxy_get_host,
+ cf_h2_proxy_adjust_pollset,
+ cf_h2_proxy_data_pending,
+ cf_h2_proxy_send,
+ cf_h2_proxy_recv,
+ Curl_cf_def_cntrl,
+ cf_h2_proxy_is_alive,
+ Curl_cf_def_conn_keep_alive,
+ Curl_cf_def_query,
+};
+
+CURLcode Curl_cf_h2_proxy_insert_after(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct Curl_cfilter *cf_h2_proxy = NULL;
+ struct cf_h2_proxy_ctx *ctx;
+ CURLcode result = CURLE_OUT_OF_MEMORY;
+
+ (void)data;
+ ctx = calloc(1, sizeof(*ctx));
+ if(!ctx)
+ goto out;
+
+ result = Curl_cf_create(&cf_h2_proxy, &Curl_cft_h2_proxy, ctx);
+ if(result)
+ goto out;
+
+ Curl_conn_cf_insert_after(cf, cf_h2_proxy);
+ result = CURLE_OK;
+
+out:
+ if(result)
+ cf_h2_proxy_ctx_free(ctx);
+ return result;
+}
+
+#endif /* defined(USE_NGHTTP2) && !defined(CURL_DISABLE_PROXY) */
diff --git a/lib/cf-h2-proxy.h b/lib/cf-h2-proxy.h
new file mode 100644
index 000000000..c01bf6213
--- /dev/null
+++ b/lib/cf-h2-proxy.h
@@ -0,0 +1,39 @@
+#ifndef HEADER_CURL_H2_PROXY_H
+#define HEADER_CURL_H2_PROXY_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+
+#if defined(USE_NGHTTP2) && !defined(CURL_DISABLE_PROXY)
+
+CURLcode Curl_cf_h2_proxy_insert_after(struct Curl_cfilter *cf,
+ struct Curl_easy *data);
+
+extern struct Curl_cftype Curl_cft_h2_proxy;
+
+
+#endif /* defined(USE_NGHTTP2) && !defined(CURL_DISABLE_PROXY) */
+
+#endif /* HEADER_CURL_H2_PROXY_H */
diff --git a/lib/cf-haproxy.c b/lib/cf-haproxy.c
new file mode 100644
index 000000000..1ca43937b
--- /dev/null
+++ b/lib/cf-haproxy.c
@@ -0,0 +1,245 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+
+#if !defined(CURL_DISABLE_PROXY)
+
+#include <curl/curl.h>
+#include "urldata.h"
+#include "cfilters.h"
+#include "cf-haproxy.h"
+#include "curl_trc.h"
+#include "multiif.h"
+
+/* The last 3 #include files should be in this order */
+#include "curl_printf.h"
+#include "curl_memory.h"
+#include "memdebug.h"
+
+
+typedef enum {
+ HAPROXY_INIT, /* init/default/no tunnel state */
+ HAPROXY_SEND, /* data_out being sent */
+ HAPROXY_DONE /* all work done */
+} haproxy_state;
+
+struct cf_haproxy_ctx {
+ int state;
+ struct dynbuf data_out;
+};
+
+static void cf_haproxy_ctx_reset(struct cf_haproxy_ctx *ctx)
+{
+ DEBUGASSERT(ctx);
+ ctx->state = HAPROXY_INIT;
+ Curl_dyn_reset(&ctx->data_out);
+}
+
+static void cf_haproxy_ctx_free(struct cf_haproxy_ctx *ctx)
+{
+ if(ctx) {
+ Curl_dyn_free(&ctx->data_out);
+ free(ctx);
+ }
+}
+
+static CURLcode cf_haproxy_date_out_set(struct Curl_cfilter*cf,
+ struct Curl_easy *data)
+{
+ struct cf_haproxy_ctx *ctx = cf->ctx;
+ CURLcode result;
+ const char *tcp_version;
+ const char *client_ip;
+
+ DEBUGASSERT(ctx);
+ DEBUGASSERT(ctx->state == HAPROXY_INIT);
+#ifdef USE_UNIX_SOCKETS
+ if(cf->conn->unix_domain_socket)
+ /* the buffer is large enough to hold this! */
+ result = Curl_dyn_addn(&ctx->data_out, STRCONST("PROXY UNKNOWN\r\n"));
+ else {
+#endif /* USE_UNIX_SOCKETS */
+ /* Emit the correct prefix for IPv6 */
+ tcp_version = cf->conn->bits.ipv6 ? "TCP6" : "TCP4";
+ if(data->set.str[STRING_HAPROXY_CLIENT_IP])
+ client_ip = data->set.str[STRING_HAPROXY_CLIENT_IP];
+ else
+ client_ip = data->info.conn_local_ip;
+
+ result = Curl_dyn_addf(&ctx->data_out, "PROXY %s %s %s %i %i\r\n",
+ tcp_version,
+ client_ip,
+ data->info.conn_primary_ip,
+ data->info.conn_local_port,
+ data->info.conn_primary_port);
+
+#ifdef USE_UNIX_SOCKETS
+ }
+#endif /* USE_UNIX_SOCKETS */
+ return result;
+}
+
+static CURLcode cf_haproxy_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool blocking, bool *done)
+{
+ struct cf_haproxy_ctx *ctx = cf->ctx;
+ CURLcode result;
+ size_t len;
+
+ DEBUGASSERT(ctx);
+ if(cf->connected) {
+ *done = TRUE;
+ return CURLE_OK;
+ }
+
+ result = cf->next->cft->do_connect(cf->next, data, blocking, done);
+ if(result || !*done)
+ return result;
+
+ switch(ctx->state) {
+ case HAPROXY_INIT:
+ result = cf_haproxy_date_out_set(cf, data);
+ if(result)
+ goto out;
+ ctx->state = HAPROXY_SEND;
+ /* FALLTHROUGH */
+ case HAPROXY_SEND:
+ len = Curl_dyn_len(&ctx->data_out);
+ if(len > 0) {
+ ssize_t written = Curl_conn_send(data, cf->sockindex,
+ Curl_dyn_ptr(&ctx->data_out),
+ len, &result);
+ if(written < 0)
+ goto out;
+ Curl_dyn_tail(&ctx->data_out, len - (size_t)written);
+ if(Curl_dyn_len(&ctx->data_out) > 0) {
+ result = CURLE_OK;
+ goto out;
+ }
+ }
+ ctx->state = HAPROXY_DONE;
+ /* FALLTHROUGH */
+ default:
+ Curl_dyn_free(&ctx->data_out);
+ break;
+ }
+
+out:
+ *done = (!result) && (ctx->state == HAPROXY_DONE);
+ cf->connected = *done;
+ return result;
+}
+
+static void cf_haproxy_destroy(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ (void)data;
+ CURL_TRC_CF(data, cf, "destroy");
+ cf_haproxy_ctx_free(cf->ctx);
+}
+
+static void cf_haproxy_close(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ CURL_TRC_CF(data, cf, "close");
+ cf->connected = FALSE;
+ cf_haproxy_ctx_reset(cf->ctx);
+ if(cf->next)
+ cf->next->cft->do_close(cf->next, data);
+}
+
+static void cf_haproxy_adjust_pollset(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct easy_pollset *ps)
+{
+ if(cf->next->connected && !cf->connected) {
+ /* If we are not connected, but the filter "below" is
+ * and not waiting on something, we are sending. */
+ Curl_pollset_set_out_only(data, ps, Curl_conn_cf_get_socket(cf, data));
+ }
+}
+
+struct Curl_cftype Curl_cft_haproxy = {
+ "HAPROXY",
+ 0,
+ 0,
+ cf_haproxy_destroy,
+ cf_haproxy_connect,
+ cf_haproxy_close,
+ Curl_cf_def_get_host,
+ cf_haproxy_adjust_pollset,
+ Curl_cf_def_data_pending,
+ Curl_cf_def_send,
+ Curl_cf_def_recv,
+ Curl_cf_def_cntrl,
+ Curl_cf_def_conn_is_alive,
+ Curl_cf_def_conn_keep_alive,
+ Curl_cf_def_query,
+};
+
+static CURLcode cf_haproxy_create(struct Curl_cfilter **pcf,
+ struct Curl_easy *data)
+{
+ struct Curl_cfilter *cf = NULL;
+ struct cf_haproxy_ctx *ctx;
+ CURLcode result;
+
+ (void)data;
+ ctx = calloc(1, sizeof(*ctx));
+ if(!ctx) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
+ }
+ ctx->state = HAPROXY_INIT;
+ Curl_dyn_init(&ctx->data_out, DYN_HAXPROXY);
+
+ result = Curl_cf_create(&cf, &Curl_cft_haproxy, ctx);
+ if(result)
+ goto out;
+ ctx = NULL;
+
+out:
+ cf_haproxy_ctx_free(ctx);
+ *pcf = result? NULL : cf;
+ return result;
+}
+
+CURLcode Curl_cf_haproxy_insert_after(struct Curl_cfilter *cf_at,
+ struct Curl_easy *data)
+{
+ struct Curl_cfilter *cf;
+ CURLcode result;
+
+ result = cf_haproxy_create(&cf, data);
+ if(result)
+ goto out;
+ Curl_conn_cf_insert_after(cf_at, cf);
+
+out:
+ return result;
+}
+
+#endif /* !CURL_DISABLE_PROXY */
diff --git a/lib/vtls/nssg.h b/lib/cf-haproxy.h
index 454a38f1f..d02c323e7 100644
--- a/lib/vtls/nssg.h
+++ b/lib/cf-haproxy.h
@@ -1,5 +1,5 @@
-#ifndef HEADER_CURL_NSSG_H
-#define HEADER_CURL_NSSG_H
+#ifndef HEADER_CURL_CF_HAPROXY_H
+#define HEADER_CURL_CF_HAPROXY_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,19 +23,17 @@
* SPDX-License-Identifier: curl
*
***************************************************************************/
+
#include "curl_setup.h"
+#include "urldata.h"
-#ifdef USE_NSS
-/*
- * This header should only be needed to get included by vtls.c and nss.c
- */
+#if !defined(CURL_DISABLE_PROXY)
-#include "urldata.h"
+CURLcode Curl_cf_haproxy_insert_after(struct Curl_cfilter *cf_at,
+ struct Curl_easy *data);
-/* initialize NSS library if not already */
-CURLcode Curl_nss_force_init(struct Curl_easy *data);
+extern struct Curl_cftype Curl_cft_haproxy;
-extern const struct Curl_ssl Curl_ssl_nss;
+#endif /* !CURL_DISABLE_PROXY */
-#endif /* USE_NSS */
-#endif /* HEADER_CURL_NSSG_H */
+#endif /* HEADER_CURL_CF_HAPROXY_H */
diff --git a/lib/cf-https-connect.c b/lib/cf-https-connect.c
new file mode 100644
index 000000000..b4f33c8e0
--- /dev/null
+++ b/lib/cf-https-connect.c
@@ -0,0 +1,531 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+
+#if !defined(CURL_DISABLE_HTTP) && !defined(USE_HYPER)
+
+#include "urldata.h"
+#include <curl/curl.h>
+#include "curl_trc.h"
+#include "cfilters.h"
+#include "connect.h"
+#include "multiif.h"
+#include "cf-https-connect.h"
+#include "http2.h"
+#include "vquic/vquic.h"
+
+/* The last 3 #include files should be in this order */
+#include "curl_printf.h"
+#include "curl_memory.h"
+#include "memdebug.h"
+
+
+typedef enum {
+ CF_HC_INIT,
+ CF_HC_CONNECT,
+ CF_HC_SUCCESS,
+ CF_HC_FAILURE
+} cf_hc_state;
+
+struct cf_hc_baller {
+ const char *name;
+ struct Curl_cfilter *cf;
+ CURLcode result;
+ struct curltime started;
+ int reply_ms;
+ bool enabled;
+};
+
+static void cf_hc_baller_reset(struct cf_hc_baller *b,
+ struct Curl_easy *data)
+{
+ if(b->cf) {
+ Curl_conn_cf_close(b->cf, data);
+ Curl_conn_cf_discard_chain(&b->cf, data);
+ b->cf = NULL;
+ }
+ b->result = CURLE_OK;
+ b->reply_ms = -1;
+}
+
+static bool cf_hc_baller_is_active(struct cf_hc_baller *b)
+{
+ return b->enabled && b->cf && !b->result;
+}
+
+static bool cf_hc_baller_has_started(struct cf_hc_baller *b)
+{
+ return !!b->cf;
+}
+
+static int cf_hc_baller_reply_ms(struct cf_hc_baller *b,
+ struct Curl_easy *data)
+{
+ if(b->reply_ms < 0)
+ b->cf->cft->query(b->cf, data, CF_QUERY_CONNECT_REPLY_MS,
+ &b->reply_ms, NULL);
+ return b->reply_ms;
+}
+
+static bool cf_hc_baller_data_pending(struct cf_hc_baller *b,
+ const struct Curl_easy *data)
+{
+ return b->cf && !b->result && b->cf->cft->has_data_pending(b->cf, data);
+}
+
+struct cf_hc_ctx {
+ cf_hc_state state;
+ const struct Curl_dns_entry *remotehost;
+ struct curltime started; /* when connect started */
+ CURLcode result; /* overall result */
+ struct cf_hc_baller h3_baller;
+ struct cf_hc_baller h21_baller;
+ int soft_eyeballs_timeout_ms;
+ int hard_eyeballs_timeout_ms;
+};
+
+static void cf_hc_baller_init(struct cf_hc_baller *b,
+ struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ const char *name,
+ int transport)
+{
+ struct cf_hc_ctx *ctx = cf->ctx;
+ struct Curl_cfilter *save = cf->next;
+
+ b->name = name;
+ cf->next = NULL;
+ b->started = Curl_now();
+ b->result = Curl_cf_setup_insert_after(cf, data, ctx->remotehost,
+ transport, CURL_CF_SSL_ENABLE);
+ b->cf = cf->next;
+ cf->next = save;
+}
+
+static CURLcode cf_hc_baller_connect(struct cf_hc_baller *b,
+ struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool *done)
+{
+ struct Curl_cfilter *save = cf->next;
+
+ cf->next = b->cf;
+ b->result = Curl_conn_cf_connect(cf->next, data, FALSE, done);
+ b->cf = cf->next; /* it might mutate */
+ cf->next = save;
+ return b->result;
+}
+
+static void cf_hc_reset(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct cf_hc_ctx *ctx = cf->ctx;
+
+ if(ctx) {
+ cf_hc_baller_reset(&ctx->h3_baller, data);
+ cf_hc_baller_reset(&ctx->h21_baller, data);
+ ctx->state = CF_HC_INIT;
+ ctx->result = CURLE_OK;
+ ctx->hard_eyeballs_timeout_ms = data->set.happy_eyeballs_timeout;
+ ctx->soft_eyeballs_timeout_ms = data->set.happy_eyeballs_timeout / 2;
+ }
+}
+
+static CURLcode baller_connected(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct cf_hc_baller *winner)
+{
+ struct cf_hc_ctx *ctx = cf->ctx;
+ CURLcode result = CURLE_OK;
+
+ DEBUGASSERT(winner->cf);
+ if(winner != &ctx->h3_baller)
+ cf_hc_baller_reset(&ctx->h3_baller, data);
+ if(winner != &ctx->h21_baller)
+ cf_hc_baller_reset(&ctx->h21_baller, data);
+
+ CURL_TRC_CF(data, cf, "connect+handshake %s: %dms, 1st data: %dms",
+ winner->name, (int)Curl_timediff(Curl_now(), winner->started),
+ cf_hc_baller_reply_ms(winner, data));
+ cf->next = winner->cf;
+ winner->cf = NULL;
+
+ switch(cf->conn->alpn) {
+ case CURL_HTTP_VERSION_3:
+ infof(data, "using HTTP/3");
+ break;
+ case CURL_HTTP_VERSION_2:
+#ifdef USE_NGHTTP2
+ /* Using nghttp2, we add the filter "below" us, so when the conn
+ * closes, we tear it down for a fresh reconnect */
+ result = Curl_http2_switch_at(cf, data);
+ if(result) {
+ ctx->state = CF_HC_FAILURE;
+ ctx->result = result;
+ return result;
+ }
+#endif
+ infof(data, "using HTTP/2");
+ break;
+ default:
+ infof(data, "using HTTP/1.x");
+ break;
+ }
+ ctx->state = CF_HC_SUCCESS;
+ cf->connected = TRUE;
+ Curl_conn_cf_cntrl(cf->next, data, TRUE,
+ CF_CTRL_CONN_INFO_UPDATE, 0, NULL);
+ return result;
+}
+
+
+static bool time_to_start_h21(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct curltime now)
+{
+ struct cf_hc_ctx *ctx = cf->ctx;
+ timediff_t elapsed_ms;
+
+ if(!ctx->h21_baller.enabled || cf_hc_baller_has_started(&ctx->h21_baller))
+ return FALSE;
+
+ if(!ctx->h3_baller.enabled || !cf_hc_baller_is_active(&ctx->h3_baller))
+ return TRUE;
+
+ elapsed_ms = Curl_timediff(now, ctx->started);
+ if(elapsed_ms >= ctx->hard_eyeballs_timeout_ms) {
+ CURL_TRC_CF(data, cf, "hard timeout of %dms reached, starting h21",
+ ctx->hard_eyeballs_timeout_ms);
+ return TRUE;
+ }
+
+ if(elapsed_ms >= ctx->soft_eyeballs_timeout_ms) {
+ if(cf_hc_baller_reply_ms(&ctx->h3_baller, data) < 0) {
+ CURL_TRC_CF(data, cf, "soft timeout of %dms reached, h3 has not "
+ "seen any data, starting h21",
+ ctx->soft_eyeballs_timeout_ms);
+ return TRUE;
+ }
+ /* set the effective hard timeout again */
+ Curl_expire(data, ctx->hard_eyeballs_timeout_ms - elapsed_ms,
+ EXPIRE_ALPN_EYEBALLS);
+ }
+ return FALSE;
+}
+
+static CURLcode cf_hc_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool blocking, bool *done)
+{
+ struct cf_hc_ctx *ctx = cf->ctx;
+ struct curltime now;
+ CURLcode result = CURLE_OK;
+
+ (void)blocking;
+ if(cf->connected) {
+ *done = TRUE;
+ return CURLE_OK;
+ }
+
+ *done = FALSE;
+ now = Curl_now();
+ switch(ctx->state) {
+ case CF_HC_INIT:
+ DEBUGASSERT(!ctx->h3_baller.cf);
+ DEBUGASSERT(!ctx->h21_baller.cf);
+ DEBUGASSERT(!cf->next);
+ CURL_TRC_CF(data, cf, "connect, init");
+ ctx->started = now;
+ if(ctx->h3_baller.enabled) {
+ cf_hc_baller_init(&ctx->h3_baller, cf, data, "h3", TRNSPRT_QUIC);
+ if(ctx->h21_baller.enabled)
+ Curl_expire(data, ctx->soft_eyeballs_timeout_ms, EXPIRE_ALPN_EYEBALLS);
+ }
+ else if(ctx->h21_baller.enabled)
+ cf_hc_baller_init(&ctx->h21_baller, cf, data, "h21",
+ cf->conn->transport);
+ ctx->state = CF_HC_CONNECT;
+ /* FALLTHROUGH */
+
+ case CF_HC_CONNECT:
+ if(cf_hc_baller_is_active(&ctx->h3_baller)) {
+ result = cf_hc_baller_connect(&ctx->h3_baller, cf, data, done);
+ if(!result && *done) {
+ result = baller_connected(cf, data, &ctx->h3_baller);
+ goto out;
+ }
+ }
+
+ if(time_to_start_h21(cf, data, now)) {
+ cf_hc_baller_init(&ctx->h21_baller, cf, data, "h21",
+ cf->conn->transport);
+ }
+
+ if(cf_hc_baller_is_active(&ctx->h21_baller)) {
+ CURL_TRC_CF(data, cf, "connect, check h21");
+ result = cf_hc_baller_connect(&ctx->h21_baller, cf, data, done);
+ if(!result && *done) {
+ result = baller_connected(cf, data, &ctx->h21_baller);
+ goto out;
+ }
+ }
+
+ if((!ctx->h3_baller.enabled || ctx->h3_baller.result) &&
+ (!ctx->h21_baller.enabled || ctx->h21_baller.result)) {
+ /* both failed or disabled. we give up */
+ CURL_TRC_CF(data, cf, "connect, all failed");
+ result = ctx->result = ctx->h3_baller.enabled?
+ ctx->h3_baller.result : ctx->h21_baller.result;
+ ctx->state = CF_HC_FAILURE;
+ goto out;
+ }
+ result = CURLE_OK;
+ *done = FALSE;
+ break;
+
+ case CF_HC_FAILURE:
+ result = ctx->result;
+ cf->connected = FALSE;
+ *done = FALSE;
+ break;
+
+ case CF_HC_SUCCESS:
+ result = CURLE_OK;
+ cf->connected = TRUE;
+ *done = TRUE;
+ break;
+ }
+
+out:
+ CURL_TRC_CF(data, cf, "connect -> %d, done=%d", result, *done);
+ return result;
+}
+
+static void cf_hc_adjust_pollset(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct easy_pollset *ps)
+{
+ if(!cf->connected) {
+ struct cf_hc_ctx *ctx = cf->ctx;
+ struct cf_hc_baller *ballers[2];
+ size_t i;
+
+ ballers[0] = &ctx->h3_baller;
+ ballers[1] = &ctx->h21_baller;
+ for(i = 0; i < sizeof(ballers)/sizeof(ballers[0]); i++) {
+ struct cf_hc_baller *b = ballers[i];
+ if(!cf_hc_baller_is_active(b))
+ continue;
+ Curl_conn_cf_adjust_pollset(b->cf, data, ps);
+ }
+ CURL_TRC_CF(data, cf, "adjust_pollset -> %d socks", ps->num);
+ }
+}
+
+static bool cf_hc_data_pending(struct Curl_cfilter *cf,
+ const struct Curl_easy *data)
+{
+ struct cf_hc_ctx *ctx = cf->ctx;
+
+ if(cf->connected)
+ return cf->next->cft->has_data_pending(cf->next, data);
+
+ CURL_TRC_CF((struct Curl_easy *)data, cf, "data_pending");
+ return cf_hc_baller_data_pending(&ctx->h3_baller, data)
+ || cf_hc_baller_data_pending(&ctx->h21_baller, data);
+}
+
+static struct curltime cf_get_max_baller_time(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int query)
+{
+ struct cf_hc_ctx *ctx = cf->ctx;
+ struct Curl_cfilter *cfb;
+ struct curltime t, tmax;
+
+ memset(&tmax, 0, sizeof(tmax));
+ memset(&t, 0, sizeof(t));
+ cfb = ctx->h21_baller.enabled? ctx->h21_baller.cf : NULL;
+ if(cfb && !cfb->cft->query(cfb, data, query, NULL, &t)) {
+ if((t.tv_sec || t.tv_usec) && Curl_timediff_us(t, tmax) > 0)
+ tmax = t;
+ }
+ memset(&t, 0, sizeof(t));
+ cfb = ctx->h3_baller.enabled? ctx->h3_baller.cf : NULL;
+ if(cfb && !cfb->cft->query(cfb, data, query, NULL, &t)) {
+ if((t.tv_sec || t.tv_usec) && Curl_timediff_us(t, tmax) > 0)
+ tmax = t;
+ }
+ return tmax;
+}
+
+static CURLcode cf_hc_query(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int query, int *pres1, void *pres2)
+{
+ if(!cf->connected) {
+ switch(query) {
+ case CF_QUERY_TIMER_CONNECT: {
+ struct curltime *when = pres2;
+ *when = cf_get_max_baller_time(cf, data, CF_QUERY_TIMER_CONNECT);
+ return CURLE_OK;
+ }
+ case CF_QUERY_TIMER_APPCONNECT: {
+ struct curltime *when = pres2;
+ *when = cf_get_max_baller_time(cf, data, CF_QUERY_TIMER_APPCONNECT);
+ return CURLE_OK;
+ }
+ default:
+ break;
+ }
+ }
+ return cf->next?
+ cf->next->cft->query(cf->next, data, query, pres1, pres2) :
+ CURLE_UNKNOWN_OPTION;
+}
+
+static void cf_hc_close(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ CURL_TRC_CF(data, cf, "close");
+ cf_hc_reset(cf, data);
+ cf->connected = FALSE;
+
+ if(cf->next) {
+ cf->next->cft->do_close(cf->next, data);
+ Curl_conn_cf_discard_chain(&cf->next, data);
+ }
+}
+
+static void cf_hc_destroy(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct cf_hc_ctx *ctx = cf->ctx;
+
+ (void)data;
+ CURL_TRC_CF(data, cf, "destroy");
+ cf_hc_reset(cf, data);
+ Curl_safefree(ctx);
+}
+
+struct Curl_cftype Curl_cft_http_connect = {
+ "HTTPS-CONNECT",
+ 0,
+ CURL_LOG_LVL_NONE,
+ cf_hc_destroy,
+ cf_hc_connect,
+ cf_hc_close,
+ Curl_cf_def_get_host,
+ cf_hc_adjust_pollset,
+ cf_hc_data_pending,
+ Curl_cf_def_send,
+ Curl_cf_def_recv,
+ Curl_cf_def_cntrl,
+ Curl_cf_def_conn_is_alive,
+ Curl_cf_def_conn_keep_alive,
+ cf_hc_query,
+};
+
+static CURLcode cf_hc_create(struct Curl_cfilter **pcf,
+ struct Curl_easy *data,
+ const struct Curl_dns_entry *remotehost,
+ bool try_h3, bool try_h21)
+{
+ struct Curl_cfilter *cf = NULL;
+ struct cf_hc_ctx *ctx;
+ CURLcode result = CURLE_OK;
+
+ (void)data;
+ ctx = calloc(1, sizeof(*ctx));
+ if(!ctx) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
+ }
+ ctx->remotehost = remotehost;
+ ctx->h3_baller.enabled = try_h3;
+ ctx->h21_baller.enabled = try_h21;
+
+ result = Curl_cf_create(&cf, &Curl_cft_http_connect, ctx);
+ if(result)
+ goto out;
+ ctx = NULL;
+ cf_hc_reset(cf, data);
+
+out:
+ *pcf = result? NULL : cf;
+ free(ctx);
+ return result;
+}
+
+static CURLcode cf_http_connect_add(struct Curl_easy *data,
+ struct connectdata *conn,
+ int sockindex,
+ const struct Curl_dns_entry *remotehost,
+ bool try_h3, bool try_h21)
+{
+ struct Curl_cfilter *cf;
+ CURLcode result = CURLE_OK;
+
+ DEBUGASSERT(data);
+ result = cf_hc_create(&cf, data, remotehost, try_h3, try_h21);
+ if(result)
+ goto out;
+ Curl_conn_cf_add(data, conn, sockindex, cf);
+out:
+ return result;
+}
+
+CURLcode Curl_cf_https_setup(struct Curl_easy *data,
+ struct connectdata *conn,
+ int sockindex,
+ const struct Curl_dns_entry *remotehost)
+{
+ bool try_h3 = FALSE, try_h21 = TRUE; /* defaults, for now */
+ CURLcode result = CURLE_OK;
+
+ (void)sockindex;
+ (void)remotehost;
+
+ if(!conn->bits.tls_enable_alpn)
+ goto out;
+
+ if(data->state.httpwant == CURL_HTTP_VERSION_3ONLY) {
+ result = Curl_conn_may_http3(data, conn);
+ if(result) /* can't do it */
+ goto out;
+ try_h3 = TRUE;
+ try_h21 = FALSE;
+ }
+ else if(data->state.httpwant >= CURL_HTTP_VERSION_3) {
+ /* We assume that silently not even trying H3 is ok here */
+ /* TODO: should we fail instead? */
+ try_h3 = (Curl_conn_may_http3(data, conn) == CURLE_OK);
+ try_h21 = TRUE;
+ }
+
+ result = cf_http_connect_add(data, conn, sockindex, remotehost,
+ try_h3, try_h21);
+out:
+ return result;
+}
+
+#endif /* !defined(CURL_DISABLE_HTTP) && !defined(USE_HYPER) */
diff --git a/lib/cf-https-connect.h b/lib/cf-https-connect.h
new file mode 100644
index 000000000..6a3952731
--- /dev/null
+++ b/lib/cf-https-connect.h
@@ -0,0 +1,58 @@
+#ifndef HEADER_CURL_CF_HTTP_H
+#define HEADER_CURL_CF_HTTP_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+
+#if !defined(CURL_DISABLE_HTTP) && !defined(USE_HYPER)
+
+struct Curl_cfilter;
+struct Curl_easy;
+struct connectdata;
+struct Curl_cftype;
+struct Curl_dns_entry;
+
+extern struct Curl_cftype Curl_cft_http_connect;
+
+CURLcode Curl_cf_http_connect_add(struct Curl_easy *data,
+ struct connectdata *conn,
+ int sockindex,
+ const struct Curl_dns_entry *remotehost,
+ bool try_h3, bool try_h21);
+
+CURLcode
+Curl_cf_http_connect_insert_after(struct Curl_cfilter *cf_at,
+ struct Curl_easy *data,
+ const struct Curl_dns_entry *remotehost,
+ bool try_h3, bool try_h21);
+
+
+CURLcode Curl_cf_https_setup(struct Curl_easy *data,
+ struct connectdata *conn,
+ int sockindex,
+ const struct Curl_dns_entry *remotehost);
+
+
+#endif /* !defined(CURL_DISABLE_HTTP) && !defined(USE_HYPER) */
+#endif /* HEADER_CURL_CF_HTTP_H */
diff --git a/lib/cf-socket.c b/lib/cf-socket.c
new file mode 100644
index 000000000..e42b4a87b
--- /dev/null
+++ b/lib/cf-socket.c
@@ -0,0 +1,1996 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h> /* <netinet/tcp.h> may need it */
+#endif
+#ifdef HAVE_SYS_UN_H
+#include <sys/un.h> /* for sockaddr_un */
+#endif
+#ifdef HAVE_LINUX_TCP_H
+#include <linux/tcp.h>
+#elif defined(HAVE_NETINET_TCP_H)
+#include <netinet/tcp.h>
+#endif
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+
+#ifdef __VMS
+#include <in.h>
+#include <inet.h>
+#endif
+
+#include "urldata.h"
+#include "bufq.h"
+#include "sendf.h"
+#include "if2ip.h"
+#include "strerror.h"
+#include "cfilters.h"
+#include "cf-socket.h"
+#include "connect.h"
+#include "select.h"
+#include "url.h" /* for Curl_safefree() */
+#include "multiif.h"
+#include "sockaddr.h" /* required for Curl_sockaddr_storage */
+#include "inet_ntop.h"
+#include "inet_pton.h"
+#include "progress.h"
+#include "warnless.h"
+#include "conncache.h"
+#include "multihandle.h"
+#include "rand.h"
+#include "share.h"
+#include "version_win32.h"
+
+/* The last 3 #include files should be in this order */
+#include "curl_printf.h"
+#include "curl_memory.h"
+#include "memdebug.h"
+
+
+#if defined(ENABLE_IPV6) && defined(IPV6_V6ONLY) && defined(_WIN32)
+/* It makes support for IPv4-mapped IPv6 addresses.
+ * Linux kernel, NetBSD, FreeBSD and Darwin: default is off;
+ * Windows Vista and later: default is on;
+ * DragonFly BSD: acts like off, and dummy setting;
+ * OpenBSD and earlier Windows: unsupported.
+ * Linux: controlled by /proc/sys/net/ipv6/bindv6only.
+ */
+static void set_ipv6_v6only(curl_socket_t sockfd, int on)
+{
+ (void)setsockopt(sockfd, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&on, sizeof(on));
+}
+#else
+#define set_ipv6_v6only(x,y)
+#endif
+
+static void tcpnodelay(struct Curl_easy *data, curl_socket_t sockfd)
+{
+#if defined(TCP_NODELAY)
+ curl_socklen_t onoff = (curl_socklen_t) 1;
+ int level = IPPROTO_TCP;
+ char buffer[STRERROR_LEN];
+
+ if(setsockopt(sockfd, level, TCP_NODELAY, (void *)&onoff,
+ sizeof(onoff)) < 0)
+ infof(data, "Could not set TCP_NODELAY: %s",
+ Curl_strerror(SOCKERRNO, buffer, sizeof(buffer)));
+#else
+ (void)data;
+ (void)sockfd;
+#endif
+}
+
+#ifdef SO_NOSIGPIPE
+/* The preferred method on Mac OS X (10.2 and later) to prevent SIGPIPEs when
+ sending data to a dead peer (instead of relying on the 4th argument to send
+ being MSG_NOSIGNAL). Possibly also existing and in use on other BSD
+ systems? */
+static void nosigpipe(struct Curl_easy *data,
+ curl_socket_t sockfd)
+{
+ int onoff = 1;
+ (void)data;
+ if(setsockopt(sockfd, SOL_SOCKET, SO_NOSIGPIPE, (void *)&onoff,
+ sizeof(onoff)) < 0) {
+#if !defined(CURL_DISABLE_VERBOSE_STRINGS)
+ char buffer[STRERROR_LEN];
+ infof(data, "Could not set SO_NOSIGPIPE: %s",
+ Curl_strerror(SOCKERRNO, buffer, sizeof(buffer)));
+#endif
+ }
+}
+#else
+#define nosigpipe(x,y) Curl_nop_stmt
+#endif
+
+#if defined(__DragonFly__) || defined(HAVE_WINSOCK2_H)
+/* DragonFlyBSD and Windows use millisecond units */
+#define KEEPALIVE_FACTOR(x) (x *= 1000)
+#else
+#define KEEPALIVE_FACTOR(x)
+#endif
+
+#if defined(HAVE_WINSOCK2_H) && !defined(SIO_KEEPALIVE_VALS)
+#define SIO_KEEPALIVE_VALS _WSAIOW(IOC_VENDOR,4)
+
+struct tcp_keepalive {
+ u_long onoff;
+ u_long keepalivetime;
+ u_long keepaliveinterval;
+};
+#endif
+
+static void
+tcpkeepalive(struct Curl_easy *data,
+ curl_socket_t sockfd)
+{
+ int optval = data->set.tcp_keepalive?1:0;
+
+ /* only set IDLE and INTVL if setting KEEPALIVE is successful */
+ if(setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE,
+ (void *)&optval, sizeof(optval)) < 0) {
+ infof(data, "Failed to set SO_KEEPALIVE on fd %d", sockfd);
+ }
+ else {
+#if defined(SIO_KEEPALIVE_VALS)
+ struct tcp_keepalive vals;
+ DWORD dummy;
+ vals.onoff = 1;
+ optval = curlx_sltosi(data->set.tcp_keepidle);
+ KEEPALIVE_FACTOR(optval);
+ vals.keepalivetime = optval;
+ optval = curlx_sltosi(data->set.tcp_keepintvl);
+ KEEPALIVE_FACTOR(optval);
+ vals.keepaliveinterval = optval;
+ if(WSAIoctl(sockfd, SIO_KEEPALIVE_VALS, (LPVOID) &vals, sizeof(vals),
+ NULL, 0, &dummy, NULL, NULL) != 0) {
+ infof(data, "Failed to set SIO_KEEPALIVE_VALS on fd %d: %d",
+ (int)sockfd, WSAGetLastError());
+ }
+#else
+#ifdef TCP_KEEPIDLE
+ optval = curlx_sltosi(data->set.tcp_keepidle);
+ KEEPALIVE_FACTOR(optval);
+ if(setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPIDLE,
+ (void *)&optval, sizeof(optval)) < 0) {
+ infof(data, "Failed to set TCP_KEEPIDLE on fd %d", sockfd);
+ }
+#elif defined(TCP_KEEPALIVE)
+ /* Mac OS X style */
+ optval = curlx_sltosi(data->set.tcp_keepidle);
+ KEEPALIVE_FACTOR(optval);
+ if(setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPALIVE,
+ (void *)&optval, sizeof(optval)) < 0) {
+ infof(data, "Failed to set TCP_KEEPALIVE on fd %d", sockfd);
+ }
+#endif
+#ifdef TCP_KEEPINTVL
+ optval = curlx_sltosi(data->set.tcp_keepintvl);
+ KEEPALIVE_FACTOR(optval);
+ if(setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPINTVL,
+ (void *)&optval, sizeof(optval)) < 0) {
+ infof(data, "Failed to set TCP_KEEPINTVL on fd %d", sockfd);
+ }
+#endif
+#endif
+ }
+}
+
+/**
+ * Assign the address `ai` to the Curl_sockaddr_ex `dest` and
+ * set the transport used.
+ */
+void Curl_sock_assign_addr(struct Curl_sockaddr_ex *dest,
+ const struct Curl_addrinfo *ai,
+ int transport)
+{
+ /*
+ * The Curl_sockaddr_ex structure is basically libcurl's external API
+ * curl_sockaddr structure with enough space available to directly hold
+ * any protocol-specific address structures. The variable declared here
+ * will be used to pass / receive data to/from the fopensocket callback
+ * if this has been set, before that, it is initialized from parameters.
+ */
+ dest->family = ai->ai_family;
+ switch(transport) {
+ case TRNSPRT_TCP:
+ dest->socktype = SOCK_STREAM;
+ dest->protocol = IPPROTO_TCP;
+ break;
+ case TRNSPRT_UNIX:
+ dest->socktype = SOCK_STREAM;
+ dest->protocol = IPPROTO_IP;
+ break;
+ default: /* UDP and QUIC */
+ dest->socktype = SOCK_DGRAM;
+ dest->protocol = IPPROTO_UDP;
+ break;
+ }
+ dest->addrlen = ai->ai_addrlen;
+
+ if(dest->addrlen > sizeof(struct Curl_sockaddr_storage))
+ dest->addrlen = sizeof(struct Curl_sockaddr_storage);
+ memcpy(&dest->sa_addr, ai->ai_addr, dest->addrlen);
+}
+
+static CURLcode socket_open(struct Curl_easy *data,
+ struct Curl_sockaddr_ex *addr,
+ curl_socket_t *sockfd)
+{
+ DEBUGASSERT(data);
+ DEBUGASSERT(data->conn);
+ if(data->set.fopensocket) {
+ /*
+ * If the opensocket callback is set, all the destination address
+ * information is passed to the callback. Depending on this information the
+ * callback may opt to abort the connection, this is indicated returning
+ * CURL_SOCKET_BAD; otherwise it will return a not-connected socket. When
+ * the callback returns a valid socket the destination address information
+ * might have been changed and this 'new' address will actually be used
+ * here to connect.
+ */
+ Curl_set_in_callback(data, true);
+ *sockfd = data->set.fopensocket(data->set.opensocket_client,
+ CURLSOCKTYPE_IPCXN,
+ (struct curl_sockaddr *)addr);
+ Curl_set_in_callback(data, false);
+ }
+ else {
+ /* opensocket callback not set, so simply create the socket now */
+ *sockfd = socket(addr->family, addr->socktype, addr->protocol);
+ }
+
+ if(*sockfd == CURL_SOCKET_BAD)
+ /* no socket, no connection */
+ return CURLE_COULDNT_CONNECT;
+
+#if defined(ENABLE_IPV6) && defined(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID)
+ if(data->conn->scope_id && (addr->family == AF_INET6)) {
+ struct sockaddr_in6 * const sa6 = (void *)&addr->sa_addr;
+ sa6->sin6_scope_id = data->conn->scope_id;
+ }
+#endif
+ return CURLE_OK;
+}
+
+/*
+ * Create a socket based on info from 'conn' and 'ai'.
+ *
+ * 'addr' should be a pointer to the correct struct to get data back, or NULL.
+ * 'sockfd' must be a pointer to a socket descriptor.
+ *
+ * If the open socket callback is set, used that!
+ *
+ */
+CURLcode Curl_socket_open(struct Curl_easy *data,
+ const struct Curl_addrinfo *ai,
+ struct Curl_sockaddr_ex *addr,
+ int transport,
+ curl_socket_t *sockfd)
+{
+ struct Curl_sockaddr_ex dummy;
+
+ if(!addr)
+ /* if the caller doesn't want info back, use a local temp copy */
+ addr = &dummy;
+
+ Curl_sock_assign_addr(addr, ai, transport);
+ return socket_open(data, addr, sockfd);
+}
+
+static int socket_close(struct Curl_easy *data, struct connectdata *conn,
+ int use_callback, curl_socket_t sock)
+{
+ if(use_callback && conn && conn->fclosesocket) {
+ int rc;
+ Curl_multi_closed(data, sock);
+ Curl_set_in_callback(data, true);
+ rc = conn->fclosesocket(conn->closesocket_client, sock);
+ Curl_set_in_callback(data, false);
+ return rc;
+ }
+
+ if(conn)
+ /* tell the multi-socket code about this */
+ Curl_multi_closed(data, sock);
+
+ sclose(sock);
+
+ return 0;
+}
+
+/*
+ * Close a socket.
+ *
+ * 'conn' can be NULL, beware!
+ */
+int Curl_socket_close(struct Curl_easy *data, struct connectdata *conn,
+ curl_socket_t sock)
+{
+ return socket_close(data, conn, FALSE, sock);
+}
+
+#ifdef USE_WINSOCK
+/* When you run a program that uses the Windows Sockets API, you may
+ experience slow performance when you copy data to a TCP server.
+
+ https://support.microsoft.com/kb/823764
+
+ Work-around: Make the Socket Send Buffer Size Larger Than the Program Send
+ Buffer Size
+
+ The problem described in this knowledge-base is applied only to pre-Vista
+ Windows. Following function trying to detect OS version and skips
+ SO_SNDBUF adjustment for Windows Vista and above.
+*/
+#define DETECT_OS_NONE 0
+#define DETECT_OS_PREVISTA 1
+#define DETECT_OS_VISTA_OR_LATER 2
+
+void Curl_sndbufset(curl_socket_t sockfd)
+{
+ int val = CURL_MAX_WRITE_SIZE + 32;
+ int curval = 0;
+ int curlen = sizeof(curval);
+
+ static int detectOsState = DETECT_OS_NONE;
+
+ if(detectOsState == DETECT_OS_NONE) {
+ if(curlx_verify_windows_version(6, 0, 0, PLATFORM_WINNT,
+ VERSION_GREATER_THAN_EQUAL))
+ detectOsState = DETECT_OS_VISTA_OR_LATER;
+ else
+ detectOsState = DETECT_OS_PREVISTA;
+ }
+
+ if(detectOsState == DETECT_OS_VISTA_OR_LATER)
+ return;
+
+ if(getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, (char *)&curval, &curlen) == 0)
+ if(curval > val)
+ return;
+
+ setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, (const char *)&val, sizeof(val));
+}
+#endif
+
+#ifndef CURL_DISABLE_BINDLOCAL
+static CURLcode bindlocal(struct Curl_easy *data, struct connectdata *conn,
+ curl_socket_t sockfd, int af, unsigned int scope)
+{
+ struct Curl_sockaddr_storage sa;
+ struct sockaddr *sock = (struct sockaddr *)&sa; /* bind to this address */
+ curl_socklen_t sizeof_sa = 0; /* size of the data sock points to */
+ struct sockaddr_in *si4 = (struct sockaddr_in *)&sa;
+#ifdef ENABLE_IPV6
+ struct sockaddr_in6 *si6 = (struct sockaddr_in6 *)&sa;
+#endif
+
+ struct Curl_dns_entry *h = NULL;
+ unsigned short port = data->set.localport; /* use this port number, 0 for
+ "random" */
+ /* how many port numbers to try to bind to, increasing one at a time */
+ int portnum = data->set.localportrange;
+ const char *dev = data->set.str[STRING_DEVICE];
+ int error;
+#ifdef IP_BIND_ADDRESS_NO_PORT
+ int on = 1;
+#endif
+#ifndef ENABLE_IPV6
+ (void)scope;
+#endif
+
+ /*************************************************************
+ * Select device to bind socket to
+ *************************************************************/
+ if(!dev && !port)
+ /* no local kind of binding was requested */
+ return CURLE_OK;
+
+ memset(&sa, 0, sizeof(struct Curl_sockaddr_storage));
+
+ if(dev && (strlen(dev)<255) ) {
+ char myhost[256] = "";
+ int done = 0; /* -1 for error, 1 for address found */
+ bool is_interface = FALSE;
+ bool is_host = FALSE;
+ static const char *if_prefix = "if!";
+ static const char *host_prefix = "host!";
+
+ if(strncmp(if_prefix, dev, strlen(if_prefix)) == 0) {
+ dev += strlen(if_prefix);
+ is_interface = TRUE;
+ }
+ else if(strncmp(host_prefix, dev, strlen(host_prefix)) == 0) {
+ dev += strlen(host_prefix);
+ is_host = TRUE;
+ }
+
+ /* interface */
+ if(!is_host) {
+#ifdef SO_BINDTODEVICE
+ /*
+ * This binds the local socket to a particular interface. This will
+ * force even requests to other local interfaces to go out the external
+ * interface. Only bind to the interface when specified as interface,
+ * not just as a hostname or ip address.
+ *
+ * The interface might be a VRF, eg: vrf-blue, which means it cannot be
+ * converted to an IP address and would fail Curl_if2ip. Simply try to
+ * use it straight away.
+ */
+ if(setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE,
+ dev, (curl_socklen_t)strlen(dev) + 1) == 0) {
+ /* This is often "errno 1, error: Operation not permitted" if you're
+ * not running as root or another suitable privileged user. If it
+ * succeeds it means the parameter was a valid interface and not an IP
+ * address. Return immediately.
+ */
+ infof(data, "socket successfully bound to interface '%s'", dev);
+ return CURLE_OK;
+ }
+#endif
+
+ switch(Curl_if2ip(af,
+#ifdef ENABLE_IPV6
+ scope, conn->scope_id,
+#endif
+ dev, myhost, sizeof(myhost))) {
+ case IF2IP_NOT_FOUND:
+ if(is_interface) {
+ /* Do not fall back to treating it as a host name */
+ failf(data, "Couldn't bind to interface '%s'", dev);
+ return CURLE_INTERFACE_FAILED;
+ }
+ break;
+ case IF2IP_AF_NOT_SUPPORTED:
+ /* Signal the caller to try another address family if available */
+ return CURLE_UNSUPPORTED_PROTOCOL;
+ case IF2IP_FOUND:
+ is_interface = TRUE;
+ /*
+ * We now have the numerical IP address in the 'myhost' buffer
+ */
+ infof(data, "Local Interface %s is ip %s using address family %i",
+ dev, myhost, af);
+ done = 1;
+ break;
+ }
+ }
+ if(!is_interface) {
+ /*
+ * This was not an interface, resolve the name as a host name
+ * or IP number
+ *
+ * Temporarily force name resolution to use only the address type
+ * of the connection. The resolve functions should really be changed
+ * to take a type parameter instead.
+ */
+ unsigned char ipver = conn->ip_version;
+ int rc;
+
+ if(af == AF_INET)
+ conn->ip_version = CURL_IPRESOLVE_V4;
+#ifdef ENABLE_IPV6
+ else if(af == AF_INET6)
+ conn->ip_version = CURL_IPRESOLVE_V6;
+#endif
+
+ rc = Curl_resolv(data, dev, 80, FALSE, &h);
+ if(rc == CURLRESOLV_PENDING)
+ (void)Curl_resolver_wait_resolv(data, &h);
+ conn->ip_version = ipver;
+
+ if(h) {
+ /* convert the resolved address, sizeof myhost >= INET_ADDRSTRLEN */
+ Curl_printable_address(h->addr, myhost, sizeof(myhost));
+ infof(data, "Name '%s' family %i resolved to '%s' family %i",
+ dev, af, myhost, h->addr->ai_family);
+ Curl_resolv_unlock(data, h);
+ if(af != h->addr->ai_family) {
+ /* bad IP version combo, signal the caller to try another address
+ family if available */
+ return CURLE_UNSUPPORTED_PROTOCOL;
+ }
+ done = 1;
+ }
+ else {
+ /*
+ * provided dev was no interface (or interfaces are not supported
+ * e.g. solaris) no ip address and no domain we fail here
+ */
+ done = -1;
+ }
+ }
+
+ if(done > 0) {
+#ifdef ENABLE_IPV6
+ /* IPv6 address */
+ if(af == AF_INET6) {
+#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
+ char *scope_ptr = strchr(myhost, '%');
+ if(scope_ptr)
+ *(scope_ptr++) = '\0';
+#endif
+ if(Curl_inet_pton(AF_INET6, myhost, &si6->sin6_addr) > 0) {
+ si6->sin6_family = AF_INET6;
+ si6->sin6_port = htons(port);
+#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
+ if(scope_ptr) {
+ /* The "myhost" string either comes from Curl_if2ip or from
+ Curl_printable_address. The latter returns only numeric scope
+ IDs and the former returns none at all. So the scope ID, if
+ present, is known to be numeric */
+ unsigned long scope_id = strtoul(scope_ptr, NULL, 10);
+ if(scope_id > UINT_MAX)
+ return CURLE_UNSUPPORTED_PROTOCOL;
+
+ si6->sin6_scope_id = (unsigned int)scope_id;
+ }
+#endif
+ }
+ sizeof_sa = sizeof(struct sockaddr_in6);
+ }
+ else
+#endif
+ /* IPv4 address */
+ if((af == AF_INET) &&
+ (Curl_inet_pton(AF_INET, myhost, &si4->sin_addr) > 0)) {
+ si4->sin_family = AF_INET;
+ si4->sin_port = htons(port);
+ sizeof_sa = sizeof(struct sockaddr_in);
+ }
+ }
+
+ if(done < 1) {
+ /* errorbuf is set false so failf will overwrite any message already in
+ the error buffer, so the user receives this error message instead of a
+ generic resolve error. */
+ data->state.errorbuf = FALSE;
+ failf(data, "Couldn't bind to '%s'", dev);
+ return CURLE_INTERFACE_FAILED;
+ }
+ }
+ else {
+ /* no device was given, prepare sa to match af's needs */
+#ifdef ENABLE_IPV6
+ if(af == AF_INET6) {
+ si6->sin6_family = AF_INET6;
+ si6->sin6_port = htons(port);
+ sizeof_sa = sizeof(struct sockaddr_in6);
+ }
+ else
+#endif
+ if(af == AF_INET) {
+ si4->sin_family = AF_INET;
+ si4->sin_port = htons(port);
+ sizeof_sa = sizeof(struct sockaddr_in);
+ }
+ }
+#ifdef IP_BIND_ADDRESS_NO_PORT
+ (void)setsockopt(sockfd, SOL_IP, IP_BIND_ADDRESS_NO_PORT, &on, sizeof(on));
+#endif
+ for(;;) {
+ if(bind(sockfd, sock, sizeof_sa) >= 0) {
+ /* we succeeded to bind */
+ struct Curl_sockaddr_storage add;
+ curl_socklen_t size = sizeof(add);
+ memset(&add, 0, sizeof(struct Curl_sockaddr_storage));
+ if(getsockname(sockfd, (struct sockaddr *) &add, &size) < 0) {
+ char buffer[STRERROR_LEN];
+ data->state.os_errno = error = SOCKERRNO;
+ failf(data, "getsockname() failed with errno %d: %s",
+ error, Curl_strerror(error, buffer, sizeof(buffer)));
+ return CURLE_INTERFACE_FAILED;
+ }
+ infof(data, "Local port: %hu", port);
+ conn->bits.bound = TRUE;
+ return CURLE_OK;
+ }
+
+ if(--portnum > 0) {
+ port++; /* try next port */
+ if(port == 0)
+ break;
+ infof(data, "Bind to local port %d failed, trying next", port - 1);
+ /* We reuse/clobber the port variable here below */
+ if(sock->sa_family == AF_INET)
+ si4->sin_port = ntohs(port);
+#ifdef ENABLE_IPV6
+ else
+ si6->sin6_port = ntohs(port);
+#endif
+ }
+ else
+ break;
+ }
+ {
+ char buffer[STRERROR_LEN];
+ data->state.os_errno = error = SOCKERRNO;
+ failf(data, "bind failed with errno %d: %s",
+ error, Curl_strerror(error, buffer, sizeof(buffer)));
+ }
+
+ return CURLE_INTERFACE_FAILED;
+}
+#endif
+
+/*
+ * verifyconnect() returns TRUE if the connect really has happened.
+ */
+static bool verifyconnect(curl_socket_t sockfd, int *error)
+{
+ bool rc = TRUE;
+#ifdef SO_ERROR
+ int err = 0;
+ curl_socklen_t errSize = sizeof(err);
+
+#ifdef _WIN32
+ /*
+ * In October 2003 we effectively nullified this function on Windows due to
+ * problems with it using all CPU in multi-threaded cases.
+ *
+ * In May 2004, we bring it back to offer more info back on connect failures.
+ * Gisle Vanem could reproduce the former problems with this function, but
+ * could avoid them by adding this SleepEx() call below:
+ *
+ * "I don't have Rational Quantify, but the hint from his post was
+ * ntdll::NtRemoveIoCompletion(). So I'd assume the SleepEx (or maybe
+ * just Sleep(0) would be enough?) would release whatever
+ * mutex/critical-section the ntdll call is waiting on.
+ *
+ * Someone got to verify this on Win-NT 4.0, 2000."
+ */
+
+#ifdef _WIN32_WCE
+ Sleep(0);
+#else
+ SleepEx(0, FALSE);
+#endif
+
+#endif
+
+ if(0 != getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (void *)&err, &errSize))
+ err = SOCKERRNO;
+#ifdef _WIN32_WCE
+ /* Old WinCE versions don't support SO_ERROR */
+ if(WSAENOPROTOOPT == err) {
+ SET_SOCKERRNO(0);
+ err = 0;
+ }
+#endif
+#if defined(EBADIOCTL) && defined(__minix)
+ /* Minix 3.1.x doesn't support getsockopt on UDP sockets */
+ if(EBADIOCTL == err) {
+ SET_SOCKERRNO(0);
+ err = 0;
+ }
+#endif
+ if((0 == err) || (EISCONN == err))
+ /* we are connected, awesome! */
+ rc = TRUE;
+ else
+ /* This wasn't a successful connect */
+ rc = FALSE;
+ if(error)
+ *error = err;
+#else
+ (void)sockfd;
+ if(error)
+ *error = SOCKERRNO;
+#endif
+ return rc;
+}
+
+/**
+ * Determine the curl code for a socket connect() == -1 with errno.
+ */
+static CURLcode socket_connect_result(struct Curl_easy *data,
+ const char *ipaddress, int error)
+{
+ switch(error) {
+ case EINPROGRESS:
+ case EWOULDBLOCK:
+#if defined(EAGAIN)
+#if (EAGAIN) != (EWOULDBLOCK)
+ /* On some platforms EAGAIN and EWOULDBLOCK are the
+ * same value, and on others they are different, hence
+ * the odd #if
+ */
+ case EAGAIN:
+#endif
+#endif
+ return CURLE_OK;
+
+ default:
+ /* unknown error, fallthrough and try another address! */
+#ifdef CURL_DISABLE_VERBOSE_STRINGS
+ (void)ipaddress;
+#else
+ {
+ char buffer[STRERROR_LEN];
+ infof(data, "Immediate connect fail for %s: %s",
+ ipaddress, Curl_strerror(error, buffer, sizeof(buffer)));
+ }
+#endif
+ data->state.os_errno = error;
+ /* connect failed */
+ return CURLE_COULDNT_CONNECT;
+ }
+}
+
+/* We have a recv buffer to enhance reads with len < NW_SMALL_READS.
+ * This happens often on TLS connections where the TLS implementation
+ * tries to read the head of a TLS record, determine the length of the
+ * full record and then make a subsequent read for that.
+ * On large reads, we will not fill the buffer to avoid the double copy. */
+#define NW_RECV_CHUNK_SIZE (64 * 1024)
+#define NW_RECV_CHUNKS 1
+#define NW_SMALL_READS (1024)
+
+struct cf_socket_ctx {
+ int transport;
+ struct Curl_sockaddr_ex addr; /* address to connect to */
+ curl_socket_t sock; /* current attempt socket */
+ struct bufq recvbuf; /* used when `buffer_recv` is set */
+ char r_ip[MAX_IPADR_LEN]; /* remote IP as string */
+ int r_port; /* remote port number */
+ char l_ip[MAX_IPADR_LEN]; /* local IP as string */
+ int l_port; /* local port number */
+ struct curltime started_at; /* when socket was created */
+ struct curltime connected_at; /* when socket connected/got first byte */
+ struct curltime first_byte_at; /* when first byte was recvd */
+ int error; /* errno of last failure or 0 */
+#ifdef DEBUGBUILD
+ int wblock_percent; /* percent of writes doing EAGAIN */
+ int wpartial_percent; /* percent of bytes written in send */
+ int rblock_percent; /* percent of reads doing EAGAIN */
+ size_t recv_max; /* max enforced read size */
+#endif
+ BIT(got_first_byte); /* if first byte was received */
+ BIT(accepted); /* socket was accepted, not connected */
+ BIT(active);
+ BIT(buffer_recv);
+};
+
+static void cf_socket_ctx_init(struct cf_socket_ctx *ctx,
+ const struct Curl_addrinfo *ai,
+ int transport)
+{
+ memset(ctx, 0, sizeof(*ctx));
+ ctx->sock = CURL_SOCKET_BAD;
+ ctx->transport = transport;
+ Curl_sock_assign_addr(&ctx->addr, ai, transport);
+ Curl_bufq_init(&ctx->recvbuf, NW_RECV_CHUNK_SIZE, NW_RECV_CHUNKS);
+#ifdef DEBUGBUILD
+ {
+ char *p = getenv("CURL_DBG_SOCK_WBLOCK");
+ if(p) {
+ long l = strtol(p, NULL, 10);
+ if(l >= 0 && l <= 100)
+ ctx->wblock_percent = (int)l;
+ }
+ p = getenv("CURL_DBG_SOCK_WPARTIAL");
+ if(p) {
+ long l = strtol(p, NULL, 10);
+ if(l >= 0 && l <= 100)
+ ctx->wpartial_percent = (int)l;
+ }
+ p = getenv("CURL_DBG_SOCK_RBLOCK");
+ if(p) {
+ long l = strtol(p, NULL, 10);
+ if(l >= 0 && l <= 100)
+ ctx->rblock_percent = (int)l;
+ }
+ p = getenv("CURL_DBG_SOCK_RMAX");
+ if(p) {
+ long l = strtol(p, NULL, 10);
+ if(l >= 0)
+ ctx->recv_max = (size_t)l;
+ }
+ }
+#endif
+}
+
+struct reader_ctx {
+ struct Curl_cfilter *cf;
+ struct Curl_easy *data;
+};
+
+static ssize_t nw_in_read(void *reader_ctx,
+ unsigned char *buf, size_t len,
+ CURLcode *err)
+{
+ struct reader_ctx *rctx = reader_ctx;
+ struct cf_socket_ctx *ctx = rctx->cf->ctx;
+ ssize_t nread;
+
+ *err = CURLE_OK;
+ nread = sread(ctx->sock, buf, len);
+
+ if(-1 == nread) {
+ int sockerr = SOCKERRNO;
+
+ if(
+#ifdef WSAEWOULDBLOCK
+ /* This is how Windows does it */
+ (WSAEWOULDBLOCK == sockerr)
+#else
+ /* errno may be EWOULDBLOCK or on some systems EAGAIN when it returned
+ due to its inability to send off data without blocking. We therefore
+ treat both error codes the same here */
+ (EWOULDBLOCK == sockerr) || (EAGAIN == sockerr) || (EINTR == sockerr)
+#endif
+ ) {
+ /* this is just a case of EWOULDBLOCK */
+ *err = CURLE_AGAIN;
+ nread = -1;
+ }
+ else {
+ char buffer[STRERROR_LEN];
+
+ failf(rctx->data, "Recv failure: %s",
+ Curl_strerror(sockerr, buffer, sizeof(buffer)));
+ rctx->data->state.os_errno = sockerr;
+ *err = CURLE_RECV_ERROR;
+ nread = -1;
+ }
+ }
+ CURL_TRC_CF(rctx->data, rctx->cf, "nw_in_read(len=%zu) -> %d, err=%d",
+ len, (int)nread, *err);
+ return nread;
+}
+
+static void cf_socket_close(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct cf_socket_ctx *ctx = cf->ctx;
+
+ if(ctx && CURL_SOCKET_BAD != ctx->sock) {
+ CURL_TRC_CF(data, cf, "cf_socket_close(%" CURL_FORMAT_SOCKET_T
+ ")", ctx->sock);
+ if(ctx->sock == cf->conn->sock[cf->sockindex])
+ cf->conn->sock[cf->sockindex] = CURL_SOCKET_BAD;
+ socket_close(data, cf->conn, !ctx->accepted, ctx->sock);
+ ctx->sock = CURL_SOCKET_BAD;
+ if(ctx->active && cf->sockindex == FIRSTSOCKET)
+ cf->conn->remote_addr = NULL;
+ Curl_bufq_reset(&ctx->recvbuf);
+ ctx->active = FALSE;
+ ctx->buffer_recv = FALSE;
+ memset(&ctx->started_at, 0, sizeof(ctx->started_at));
+ memset(&ctx->connected_at, 0, sizeof(ctx->connected_at));
+ }
+
+ cf->connected = FALSE;
+}
+
+static void cf_socket_destroy(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct cf_socket_ctx *ctx = cf->ctx;
+
+ cf_socket_close(cf, data);
+ CURL_TRC_CF(data, cf, "destroy");
+ Curl_bufq_free(&ctx->recvbuf);
+ free(ctx);
+ cf->ctx = NULL;
+}
+
+static CURLcode set_local_ip(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_socket_ctx *ctx = cf->ctx;
+
+#ifdef HAVE_GETSOCKNAME
+ if(!(data->conn->handler->protocol & CURLPROTO_TFTP)) {
+ /* TFTP does not connect, so it cannot get the IP like this */
+
+ char buffer[STRERROR_LEN];
+ struct Curl_sockaddr_storage ssloc;
+ curl_socklen_t slen = sizeof(struct Curl_sockaddr_storage);
+
+ memset(&ssloc, 0, sizeof(ssloc));
+ if(getsockname(ctx->sock, (struct sockaddr*) &ssloc, &slen)) {
+ int error = SOCKERRNO;
+ failf(data, "getsockname() failed with errno %d: %s",
+ error, Curl_strerror(error, buffer, sizeof(buffer)));
+ return CURLE_FAILED_INIT;
+ }
+ if(!Curl_addr2string((struct sockaddr*)&ssloc, slen,
+ ctx->l_ip, &ctx->l_port)) {
+ failf(data, "ssloc inet_ntop() failed with errno %d: %s",
+ errno, Curl_strerror(errno, buffer, sizeof(buffer)));
+ return CURLE_FAILED_INIT;
+ }
+ }
+#else
+ (void)data;
+ ctx->l_ip[0] = 0;
+ ctx->l_port = -1;
+#endif
+ return CURLE_OK;
+}
+
+static CURLcode set_remote_ip(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_socket_ctx *ctx = cf->ctx;
+
+ /* store remote address and port used in this connection attempt */
+ if(!Curl_addr2string(&ctx->addr.sa_addr, ctx->addr.addrlen,
+ ctx->r_ip, &ctx->r_port)) {
+ char buffer[STRERROR_LEN];
+
+ ctx->error = errno;
+ /* malformed address or bug in inet_ntop, try next address */
+ failf(data, "sa_addr inet_ntop() failed with errno %d: %s",
+ errno, Curl_strerror(errno, buffer, sizeof(buffer)));
+ return CURLE_FAILED_INIT;
+ }
+ return CURLE_OK;
+}
+
+static CURLcode cf_socket_open(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_socket_ctx *ctx = cf->ctx;
+ int error = 0;
+ bool isconnected = FALSE;
+ CURLcode result = CURLE_COULDNT_CONNECT;
+ bool is_tcp;
+
+ (void)data;
+ DEBUGASSERT(ctx->sock == CURL_SOCKET_BAD);
+ ctx->started_at = Curl_now();
+ result = socket_open(data, &ctx->addr, &ctx->sock);
+ if(result)
+ goto out;
+
+ result = set_remote_ip(cf, data);
+ if(result)
+ goto out;
+
+#ifndef CURL_DISABLE_VERBOSE_STRINGS
+ {
+ const char *ipmsg;
+#ifdef ENABLE_IPV6
+ if(ctx->addr.family == AF_INET6) {
+ set_ipv6_v6only(ctx->sock, 0);
+ ipmsg = " Trying [%s]:%d...";
+ }
+ else
+#endif
+ ipmsg = " Trying %s:%d...";
+ infof(data, ipmsg, ctx->r_ip, ctx->r_port);
+ }
+#endif
+
+#ifdef ENABLE_IPV6
+ is_tcp = (ctx->addr.family == AF_INET
+ || ctx->addr.family == AF_INET6) &&
+ ctx->addr.socktype == SOCK_STREAM;
+#else
+ is_tcp = (ctx->addr.family == AF_INET) &&
+ ctx->addr.socktype == SOCK_STREAM;
+#endif
+ if(is_tcp && data->set.tcp_nodelay)
+ tcpnodelay(data, ctx->sock);
+
+ nosigpipe(data, ctx->sock);
+
+ Curl_sndbufset(ctx->sock);
+
+ if(is_tcp && data->set.tcp_keepalive)
+ tcpkeepalive(data, ctx->sock);
+
+ if(data->set.fsockopt) {
+ /* activate callback for setting socket options */
+ Curl_set_in_callback(data, true);
+ error = data->set.fsockopt(data->set.sockopt_client,
+ ctx->sock,
+ CURLSOCKTYPE_IPCXN);
+ Curl_set_in_callback(data, false);
+
+ if(error == CURL_SOCKOPT_ALREADY_CONNECTED)
+ isconnected = TRUE;
+ else if(error) {
+ result = CURLE_ABORTED_BY_CALLBACK;
+ goto out;
+ }
+ }
+
+#ifndef CURL_DISABLE_BINDLOCAL
+ /* possibly bind the local end to an IP, interface or port */
+ if(ctx->addr.family == AF_INET
+#ifdef ENABLE_IPV6
+ || ctx->addr.family == AF_INET6
+#endif
+ ) {
+ result = bindlocal(data, cf->conn, ctx->sock, ctx->addr.family,
+ Curl_ipv6_scope(&ctx->addr.sa_addr));
+ if(result) {
+ if(result == CURLE_UNSUPPORTED_PROTOCOL) {
+ /* The address family is not supported on this interface.
+ We can continue trying addresses */
+ result = CURLE_COULDNT_CONNECT;
+ }
+ goto out;
+ }
+ }
+#endif
+
+ /* set socket non-blocking */
+ (void)curlx_nonblock(ctx->sock, TRUE);
+
+out:
+ if(result) {
+ if(ctx->sock != CURL_SOCKET_BAD) {
+ socket_close(data, cf->conn, TRUE, ctx->sock);
+ ctx->sock = CURL_SOCKET_BAD;
+ }
+ }
+ else if(isconnected) {
+ set_local_ip(cf, data);
+ ctx->connected_at = Curl_now();
+ cf->connected = TRUE;
+ }
+ CURL_TRC_CF(data, cf, "cf_socket_open() -> %d, fd=%" CURL_FORMAT_SOCKET_T,
+ result, ctx->sock);
+ return result;
+}
+
+static int do_connect(struct Curl_cfilter *cf, struct Curl_easy *data,
+ bool is_tcp_fastopen)
+{
+ struct cf_socket_ctx *ctx = cf->ctx;
+#ifdef TCP_FASTOPEN_CONNECT
+ int optval = 1;
+#endif
+ int rc = -1;
+
+ (void)data;
+ if(is_tcp_fastopen) {
+#if defined(CONNECT_DATA_IDEMPOTENT) /* Darwin */
+# if defined(HAVE_BUILTIN_AVAILABLE)
+ /* while connectx function is available since macOS 10.11 / iOS 9,
+ it did not have the interface declared correctly until
+ Xcode 9 / macOS SDK 10.13 */
+ if(__builtin_available(macOS 10.11, iOS 9.0, tvOS 9.0, watchOS 2.0, *)) {
+ sa_endpoints_t endpoints;
+ endpoints.sae_srcif = 0;
+ endpoints.sae_srcaddr = NULL;
+ endpoints.sae_srcaddrlen = 0;
+ endpoints.sae_dstaddr = &ctx->addr.sa_addr;
+ endpoints.sae_dstaddrlen = ctx->addr.addrlen;
+
+ rc = connectx(ctx->sock, &endpoints, SAE_ASSOCID_ANY,
+ CONNECT_RESUME_ON_READ_WRITE | CONNECT_DATA_IDEMPOTENT,
+ NULL, 0, NULL, NULL);
+ }
+ else {
+ rc = connect(ctx->sock, &ctx->addr.sa_addr, ctx->addr.addrlen);
+ }
+# else
+ rc = connect(ctx->sock, &ctx->addr.sa_addr, ctx->addr.addrlen);
+# endif /* HAVE_BUILTIN_AVAILABLE */
+#elif defined(TCP_FASTOPEN_CONNECT) /* Linux >= 4.11 */
+ if(setsockopt(ctx->sock, IPPROTO_TCP, TCP_FASTOPEN_CONNECT,
+ (void *)&optval, sizeof(optval)) < 0)
+ infof(data, "Failed to enable TCP Fast Open on fd %"
+ CURL_FORMAT_SOCKET_T, ctx->sock);
+
+ rc = connect(ctx->sock, &ctx->addr.sa_addr, ctx->addr.addrlen);
+#elif defined(MSG_FASTOPEN) /* old Linux */
+ if(cf->conn->given->flags & PROTOPT_SSL)
+ rc = connect(ctx->sock, &ctx->addr.sa_addr, ctx->addr.addrlen);
+ else
+ rc = 0; /* Do nothing */
+#endif
+ }
+ else {
+ rc = connect(ctx->sock, &ctx->addr.sa_addr, ctx->addr.addrlen);
+ }
+ return rc;
+}
+
+static CURLcode cf_tcp_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool blocking, bool *done)
+{
+ struct cf_socket_ctx *ctx = cf->ctx;
+ CURLcode result = CURLE_COULDNT_CONNECT;
+ int rc = 0;
+
+ (void)data;
+ if(cf->connected) {
+ *done = TRUE;
+ return CURLE_OK;
+ }
+
+ /* TODO: need to support blocking connect? */
+ if(blocking)
+ return CURLE_UNSUPPORTED_PROTOCOL;
+
+ *done = FALSE; /* a very negative world view is best */
+ if(ctx->sock == CURL_SOCKET_BAD) {
+ int error;
+
+ result = cf_socket_open(cf, data);
+ if(result)
+ goto out;
+
+ if(cf->connected) {
+ *done = TRUE;
+ return CURLE_OK;
+ }
+
+ /* Connect TCP socket */
+ rc = do_connect(cf, data, cf->conn->bits.tcp_fastopen);
+ error = SOCKERRNO;
+ set_local_ip(cf, data);
+ CURL_TRC_CF(data, cf, "local address %s port %d...",
+ ctx->l_ip, ctx->l_port);
+ if(-1 == rc) {
+ result = socket_connect_result(data, ctx->r_ip, error);
+ goto out;
+ }
+ }
+
+#ifdef mpeix
+ /* Call this function once now, and ignore the results. We do this to
+ "clear" the error state on the socket so that we can later read it
+ reliably. This is reported necessary on the MPE/iX operating
+ system. */
+ (void)verifyconnect(ctx->sock, NULL);
+#endif
+ /* check socket for connect */
+ rc = SOCKET_WRITABLE(ctx->sock, 0);
+
+ if(rc == 0) { /* no connection yet */
+ CURL_TRC_CF(data, cf, "not connected yet");
+ return CURLE_OK;
+ }
+ else if(rc == CURL_CSELECT_OUT || cf->conn->bits.tcp_fastopen) {
+ if(verifyconnect(ctx->sock, &ctx->error)) {
+ /* we are connected with TCP, awesome! */
+ ctx->connected_at = Curl_now();
+ set_local_ip(cf, data);
+ *done = TRUE;
+ cf->connected = TRUE;
+ CURL_TRC_CF(data, cf, "connected");
+ return CURLE_OK;
+ }
+ }
+ else if(rc & CURL_CSELECT_ERR) {
+ (void)verifyconnect(ctx->sock, &ctx->error);
+ result = CURLE_COULDNT_CONNECT;
+ }
+
+out:
+ if(result) {
+ if(ctx->error) {
+ set_local_ip(cf, data);
+ data->state.os_errno = ctx->error;
+ SET_SOCKERRNO(ctx->error);
+#ifndef CURL_DISABLE_VERBOSE_STRINGS
+ {
+ char buffer[STRERROR_LEN];
+ infof(data, "connect to %s port %u from %s port %d failed: %s",
+ ctx->r_ip, ctx->r_port, ctx->l_ip, ctx->l_port,
+ Curl_strerror(ctx->error, buffer, sizeof(buffer)));
+ }
+#endif
+ }
+ if(ctx->sock != CURL_SOCKET_BAD) {
+ socket_close(data, cf->conn, TRUE, ctx->sock);
+ ctx->sock = CURL_SOCKET_BAD;
+ }
+ *done = FALSE;
+ }
+ return result;
+}
+
+static void cf_socket_get_host(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ const char **phost,
+ const char **pdisplay_host,
+ int *pport)
+{
+ (void)data;
+ *phost = cf->conn->host.name;
+ *pdisplay_host = cf->conn->host.dispname;
+ *pport = cf->conn->port;
+}
+
+static void cf_socket_adjust_pollset(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct easy_pollset *ps)
+{
+ struct cf_socket_ctx *ctx = cf->ctx;
+
+ if(ctx->sock != CURL_SOCKET_BAD) {
+ if(!cf->connected)
+ Curl_pollset_set_out_only(data, ps, ctx->sock);
+ else
+ Curl_pollset_add_in(data, ps, ctx->sock);
+ CURL_TRC_CF(data, cf, "adjust_pollset -> %d socks", ps->num);
+ }
+}
+
+static bool cf_socket_data_pending(struct Curl_cfilter *cf,
+ const struct Curl_easy *data)
+{
+ struct cf_socket_ctx *ctx = cf->ctx;
+ int readable;
+
+ (void)data;
+ if(!Curl_bufq_is_empty(&ctx->recvbuf))
+ return TRUE;
+
+ readable = SOCKET_READABLE(ctx->sock, 0);
+ return (readable > 0 && (readable & CURL_CSELECT_IN));
+}
+
+static ssize_t cf_socket_send(struct Curl_cfilter *cf, struct Curl_easy *data,
+ const void *buf, size_t len, CURLcode *err)
+{
+ struct cf_socket_ctx *ctx = cf->ctx;
+ curl_socket_t fdsave;
+ ssize_t nwritten;
+ size_t orig_len = len;
+
+ *err = CURLE_OK;
+ fdsave = cf->conn->sock[cf->sockindex];
+ cf->conn->sock[cf->sockindex] = ctx->sock;
+
+#ifdef DEBUGBUILD
+ /* simulate network blocking/partial writes */
+ if(ctx->wblock_percent > 0) {
+ unsigned char c;
+ Curl_rand(data, &c, 1);
+ if(c >= ((100-ctx->wblock_percent)*256/100)) {
+ CURL_TRC_CF(data, cf, "send(len=%zu) SIMULATE EWOULDBLOCK", orig_len);
+ *err = CURLE_AGAIN;
+ nwritten = -1;
+ cf->conn->sock[cf->sockindex] = fdsave;
+ return nwritten;
+ }
+ }
+ if(cf->cft != &Curl_cft_udp && ctx->wpartial_percent > 0 && len > 8) {
+ len = len * ctx->wpartial_percent / 100;
+ if(!len)
+ len = 1;
+ CURL_TRC_CF(data, cf, "send(len=%zu) SIMULATE partial write of %zu bytes",
+ orig_len, len);
+ }
+#endif
+
+#if defined(MSG_FASTOPEN) && !defined(TCP_FASTOPEN_CONNECT) /* Linux */
+ if(cf->conn->bits.tcp_fastopen) {
+ nwritten = sendto(ctx->sock, buf, len, MSG_FASTOPEN,
+ &cf->conn->remote_addr->sa_addr,
+ cf->conn->remote_addr->addrlen);
+ cf->conn->bits.tcp_fastopen = FALSE;
+ }
+ else
+#endif
+ nwritten = swrite(ctx->sock, buf, len);
+
+ if(-1 == nwritten) {
+ int sockerr = SOCKERRNO;
+
+ if(
+#ifdef WSAEWOULDBLOCK
+ /* This is how Windows does it */
+ (WSAEWOULDBLOCK == sockerr)
+#else
+ /* errno may be EWOULDBLOCK or on some systems EAGAIN when it returned
+ due to its inability to send off data without blocking. We therefore
+ treat both error codes the same here */
+ (EWOULDBLOCK == sockerr) || (EAGAIN == sockerr) || (EINTR == sockerr) ||
+ (EINPROGRESS == sockerr)
+#endif
+ ) {
+ /* this is just a case of EWOULDBLOCK */
+ *err = CURLE_AGAIN;
+ }
+ else {
+ char buffer[STRERROR_LEN];
+ failf(data, "Send failure: %s",
+ Curl_strerror(sockerr, buffer, sizeof(buffer)));
+ data->state.os_errno = sockerr;
+ *err = CURLE_SEND_ERROR;
+ }
+ }
+
+ CURL_TRC_CF(data, cf, "send(len=%zu) -> %d, err=%d",
+ orig_len, (int)nwritten, *err);
+ cf->conn->sock[cf->sockindex] = fdsave;
+ return nwritten;
+}
+
+static ssize_t cf_socket_recv(struct Curl_cfilter *cf, struct Curl_easy *data,
+ char *buf, size_t len, CURLcode *err)
+{
+ struct cf_socket_ctx *ctx = cf->ctx;
+ curl_socket_t fdsave;
+ ssize_t nread;
+
+ *err = CURLE_OK;
+
+ fdsave = cf->conn->sock[cf->sockindex];
+ cf->conn->sock[cf->sockindex] = ctx->sock;
+
+#ifdef DEBUGBUILD
+ /* simulate network blocking/partial reads */
+ if(cf->cft != &Curl_cft_udp && ctx->rblock_percent > 0) {
+ unsigned char c;
+ Curl_rand(data, &c, 1);
+ if(c >= ((100-ctx->rblock_percent)*256/100)) {
+ CURL_TRC_CF(data, cf, "recv(len=%zu) SIMULATE EWOULDBLOCK", len);
+ *err = CURLE_AGAIN;
+ nread = -1;
+ cf->conn->sock[cf->sockindex] = fdsave;
+ return nread;
+ }
+ }
+ if(cf->cft != &Curl_cft_udp && ctx->recv_max && ctx->recv_max < len) {
+ size_t orig_len = len;
+ len = ctx->recv_max;
+ CURL_TRC_CF(data, cf, "recv(len=%zu) SIMULATE max read of %zu bytes",
+ orig_len, len);
+ }
+#endif
+
+ if(ctx->buffer_recv && !Curl_bufq_is_empty(&ctx->recvbuf)) {
+ CURL_TRC_CF(data, cf, "recv from buffer");
+ nread = Curl_bufq_read(&ctx->recvbuf, (unsigned char *)buf, len, err);
+ }
+ else {
+ struct reader_ctx rctx;
+
+ rctx.cf = cf;
+ rctx.data = data;
+
+ /* "small" reads may trigger filling our buffer, "large" reads
+ * are probably not worth the additional copy */
+ if(ctx->buffer_recv && len < NW_SMALL_READS) {
+ ssize_t nwritten;
+ nwritten = Curl_bufq_slurp(&ctx->recvbuf, nw_in_read, &rctx, err);
+ if(nwritten < 0 && !Curl_bufq_is_empty(&ctx->recvbuf)) {
+ /* we have a partial read with an error. need to deliver
+ * what we got, return the error later. */
+ CURL_TRC_CF(data, cf, "partial read: empty buffer first");
+ nread = Curl_bufq_read(&ctx->recvbuf, (unsigned char *)buf, len, err);
+ }
+ else if(nwritten < 0) {
+ nread = -1;
+ goto out;
+ }
+ else if(nwritten == 0) {
+ /* eof */
+ *err = CURLE_OK;
+ nread = 0;
+ }
+ else {
+ CURL_TRC_CF(data, cf, "buffered %zd additional bytes", nwritten);
+ nread = Curl_bufq_read(&ctx->recvbuf, (unsigned char *)buf, len, err);
+ }
+ }
+ else {
+ nread = nw_in_read(&rctx, (unsigned char *)buf, len, err);
+ }
+ }
+
+out:
+ CURL_TRC_CF(data, cf, "recv(len=%zu) -> %d, err=%d", len, (int)nread,
+ *err);
+ if(nread > 0 && !ctx->got_first_byte) {
+ ctx->first_byte_at = Curl_now();
+ ctx->got_first_byte = TRUE;
+ }
+ cf->conn->sock[cf->sockindex] = fdsave;
+ return nread;
+}
+
+static void conn_set_primary_ip(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+#ifdef HAVE_GETPEERNAME
+ struct cf_socket_ctx *ctx = cf->ctx;
+ if(!(data->conn->handler->protocol & CURLPROTO_TFTP)) {
+ /* TFTP does not connect the endpoint: getpeername() failed with errno
+ 107: Transport endpoint is not connected */
+
+ char buffer[STRERROR_LEN];
+ struct Curl_sockaddr_storage ssrem;
+ curl_socklen_t plen;
+ int port;
+
+ plen = sizeof(ssrem);
+ memset(&ssrem, 0, plen);
+ if(getpeername(ctx->sock, (struct sockaddr*) &ssrem, &plen)) {
+ int error = SOCKERRNO;
+ failf(data, "getpeername() failed with errno %d: %s",
+ error, Curl_strerror(error, buffer, sizeof(buffer)));
+ return;
+ }
+ if(!Curl_addr2string((struct sockaddr*)&ssrem, plen,
+ cf->conn->primary_ip, &port)) {
+ failf(data, "ssrem inet_ntop() failed with errno %d: %s",
+ errno, Curl_strerror(errno, buffer, sizeof(buffer)));
+ return;
+ }
+ }
+#else
+ cf->conn->primary_ip[0] = 0;
+ (void)data;
+#endif
+}
+
+static void cf_socket_active(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct cf_socket_ctx *ctx = cf->ctx;
+
+ /* use this socket from now on */
+ cf->conn->sock[cf->sockindex] = ctx->sock;
+ /* the first socket info gets set at conn and data */
+ if(cf->sockindex == FIRSTSOCKET) {
+ cf->conn->remote_addr = &ctx->addr;
+ #ifdef ENABLE_IPV6
+ cf->conn->bits.ipv6 = (ctx->addr.family == AF_INET6)? TRUE : FALSE;
+ #endif
+ conn_set_primary_ip(cf, data);
+ set_local_ip(cf, data);
+ Curl_persistconninfo(data, cf->conn, ctx->l_ip, ctx->l_port);
+ /* buffering is currently disabled by default because we have stalls
+ * in parallel transfers where not all buffered data is consumed and no
+ * socket events happen.
+ */
+ ctx->buffer_recv = FALSE;
+ }
+ ctx->active = TRUE;
+}
+
+static CURLcode cf_socket_cntrl(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int event, int arg1, void *arg2)
+{
+ struct cf_socket_ctx *ctx = cf->ctx;
+
+ (void)arg1;
+ (void)arg2;
+ switch(event) {
+ case CF_CTRL_CONN_INFO_UPDATE:
+ cf_socket_active(cf, data);
+ break;
+ case CF_CTRL_DATA_SETUP:
+ Curl_persistconninfo(data, cf->conn, ctx->l_ip, ctx->l_port);
+ break;
+ case CF_CTRL_FORGET_SOCKET:
+ ctx->sock = CURL_SOCKET_BAD;
+ break;
+ }
+ return CURLE_OK;
+}
+
+static bool cf_socket_conn_is_alive(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool *input_pending)
+{
+ struct cf_socket_ctx *ctx = cf->ctx;
+ struct pollfd pfd[1];
+ int r;
+
+ *input_pending = FALSE;
+ (void)data;
+ if(!ctx || ctx->sock == CURL_SOCKET_BAD)
+ return FALSE;
+
+ /* Check with 0 timeout if there are any events pending on the socket */
+ pfd[0].fd = ctx->sock;
+ pfd[0].events = POLLRDNORM|POLLIN|POLLRDBAND|POLLPRI;
+ pfd[0].revents = 0;
+
+ r = Curl_poll(pfd, 1, 0);
+ if(r < 0) {
+ CURL_TRC_CF(data, cf, "is_alive: poll error, assume dead");
+ return FALSE;
+ }
+ else if(r == 0) {
+ CURL_TRC_CF(data, cf, "is_alive: poll timeout, assume alive");
+ return TRUE;
+ }
+ else if(pfd[0].revents & (POLLERR|POLLHUP|POLLPRI|POLLNVAL)) {
+ CURL_TRC_CF(data, cf, "is_alive: err/hup/etc events, assume dead");
+ return FALSE;
+ }
+
+ CURL_TRC_CF(data, cf, "is_alive: valid events, looks alive");
+ *input_pending = TRUE;
+ return TRUE;
+}
+
+static CURLcode cf_socket_query(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int query, int *pres1, void *pres2)
+{
+ struct cf_socket_ctx *ctx = cf->ctx;
+
+ switch(query) {
+ case CF_QUERY_SOCKET:
+ DEBUGASSERT(pres2);
+ *((curl_socket_t *)pres2) = ctx->sock;
+ return CURLE_OK;
+ case CF_QUERY_CONNECT_REPLY_MS:
+ if(ctx->got_first_byte) {
+ timediff_t ms = Curl_timediff(ctx->first_byte_at, ctx->started_at);
+ *pres1 = (ms < INT_MAX)? (int)ms : INT_MAX;
+ }
+ else
+ *pres1 = -1;
+ return CURLE_OK;
+ case CF_QUERY_TIMER_CONNECT: {
+ struct curltime *when = pres2;
+ switch(ctx->transport) {
+ case TRNSPRT_UDP:
+ case TRNSPRT_QUIC:
+ /* Since UDP connected sockets work different from TCP, we use the
+ * time of the first byte from the peer as the "connect" time. */
+ if(ctx->got_first_byte) {
+ *when = ctx->first_byte_at;
+ break;
+ }
+ /* FALLTHROUGH */
+ default:
+ *when = ctx->connected_at;
+ break;
+ }
+ return CURLE_OK;
+ }
+ default:
+ break;
+ }
+ return cf->next?
+ cf->next->cft->query(cf->next, data, query, pres1, pres2) :
+ CURLE_UNKNOWN_OPTION;
+}
+
+struct Curl_cftype Curl_cft_tcp = {
+ "TCP",
+ CF_TYPE_IP_CONNECT,
+ CURL_LOG_LVL_NONE,
+ cf_socket_destroy,
+ cf_tcp_connect,
+ cf_socket_close,
+ cf_socket_get_host,
+ cf_socket_adjust_pollset,
+ cf_socket_data_pending,
+ cf_socket_send,
+ cf_socket_recv,
+ cf_socket_cntrl,
+ cf_socket_conn_is_alive,
+ Curl_cf_def_conn_keep_alive,
+ cf_socket_query,
+};
+
+CURLcode Curl_cf_tcp_create(struct Curl_cfilter **pcf,
+ struct Curl_easy *data,
+ struct connectdata *conn,
+ const struct Curl_addrinfo *ai,
+ int transport)
+{
+ struct cf_socket_ctx *ctx = NULL;
+ struct Curl_cfilter *cf = NULL;
+ CURLcode result;
+
+ (void)data;
+ (void)conn;
+ DEBUGASSERT(transport == TRNSPRT_TCP);
+ ctx = calloc(1, sizeof(*ctx));
+ if(!ctx) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
+ }
+ cf_socket_ctx_init(ctx, ai, transport);
+
+ result = Curl_cf_create(&cf, &Curl_cft_tcp, ctx);
+
+out:
+ *pcf = (!result)? cf : NULL;
+ if(result) {
+ Curl_safefree(cf);
+ Curl_safefree(ctx);
+ }
+
+ return result;
+}
+
+static CURLcode cf_udp_setup_quic(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_socket_ctx *ctx = cf->ctx;
+ int rc;
+
+ /* QUIC needs a connected socket, nonblocking */
+ DEBUGASSERT(ctx->sock != CURL_SOCKET_BAD);
+
+ rc = connect(ctx->sock, &ctx->addr.sa_addr, ctx->addr.addrlen);
+ if(-1 == rc) {
+ return socket_connect_result(data, ctx->r_ip, SOCKERRNO);
+ }
+ set_local_ip(cf, data);
+ CURL_TRC_CF(data, cf, "%s socket %" CURL_FORMAT_SOCKET_T
+ " connected: [%s:%d] -> [%s:%d]",
+ (ctx->transport == TRNSPRT_QUIC)? "QUIC" : "UDP",
+ ctx->sock, ctx->l_ip, ctx->l_port, ctx->r_ip, ctx->r_port);
+
+ (void)curlx_nonblock(ctx->sock, TRUE);
+ switch(ctx->addr.family) {
+#if defined(__linux__) && defined(IP_MTU_DISCOVER)
+ case AF_INET: {
+ int val = IP_PMTUDISC_DO;
+ (void)setsockopt(ctx->sock, IPPROTO_IP, IP_MTU_DISCOVER, &val,
+ sizeof(val));
+ break;
+ }
+#endif
+#if defined(__linux__) && defined(IPV6_MTU_DISCOVER)
+ case AF_INET6: {
+ int val = IPV6_PMTUDISC_DO;
+ (void)setsockopt(ctx->sock, IPPROTO_IPV6, IPV6_MTU_DISCOVER, &val,
+ sizeof(val));
+ break;
+ }
+#endif
+ }
+ return CURLE_OK;
+}
+
+static CURLcode cf_udp_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool blocking, bool *done)
+{
+ struct cf_socket_ctx *ctx = cf->ctx;
+ CURLcode result = CURLE_COULDNT_CONNECT;
+
+ (void)blocking;
+ if(cf->connected) {
+ *done = TRUE;
+ return CURLE_OK;
+ }
+ *done = FALSE;
+ if(ctx->sock == CURL_SOCKET_BAD) {
+ result = cf_socket_open(cf, data);
+ if(result) {
+ CURL_TRC_CF(data, cf, "cf_udp_connect(), open failed -> %d", result);
+ goto out;
+ }
+
+ if(ctx->transport == TRNSPRT_QUIC) {
+ result = cf_udp_setup_quic(cf, data);
+ if(result)
+ goto out;
+ CURL_TRC_CF(data, cf, "cf_udp_connect(), opened socket=%"
+ CURL_FORMAT_SOCKET_T " (%s:%d)",
+ ctx->sock, ctx->l_ip, ctx->l_port);
+ }
+ else {
+ CURL_TRC_CF(data, cf, "cf_udp_connect(), opened socket=%"
+ CURL_FORMAT_SOCKET_T " (unconnected)", ctx->sock);
+ }
+ *done = TRUE;
+ cf->connected = TRUE;
+ }
+out:
+ return result;
+}
+
+struct Curl_cftype Curl_cft_udp = {
+ "UDP",
+ CF_TYPE_IP_CONNECT,
+ CURL_LOG_LVL_NONE,
+ cf_socket_destroy,
+ cf_udp_connect,
+ cf_socket_close,
+ cf_socket_get_host,
+ cf_socket_adjust_pollset,
+ cf_socket_data_pending,
+ cf_socket_send,
+ cf_socket_recv,
+ cf_socket_cntrl,
+ cf_socket_conn_is_alive,
+ Curl_cf_def_conn_keep_alive,
+ cf_socket_query,
+};
+
+CURLcode Curl_cf_udp_create(struct Curl_cfilter **pcf,
+ struct Curl_easy *data,
+ struct connectdata *conn,
+ const struct Curl_addrinfo *ai,
+ int transport)
+{
+ struct cf_socket_ctx *ctx = NULL;
+ struct Curl_cfilter *cf = NULL;
+ CURLcode result;
+
+ (void)data;
+ (void)conn;
+ DEBUGASSERT(transport == TRNSPRT_UDP || transport == TRNSPRT_QUIC);
+ ctx = calloc(1, sizeof(*ctx));
+ if(!ctx) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
+ }
+ cf_socket_ctx_init(ctx, ai, transport);
+
+ result = Curl_cf_create(&cf, &Curl_cft_udp, ctx);
+
+out:
+ *pcf = (!result)? cf : NULL;
+ if(result) {
+ Curl_safefree(cf);
+ Curl_safefree(ctx);
+ }
+
+ return result;
+}
+
+/* this is the TCP filter which can also handle this case */
+struct Curl_cftype Curl_cft_unix = {
+ "UNIX",
+ CF_TYPE_IP_CONNECT,
+ CURL_LOG_LVL_NONE,
+ cf_socket_destroy,
+ cf_tcp_connect,
+ cf_socket_close,
+ cf_socket_get_host,
+ cf_socket_adjust_pollset,
+ cf_socket_data_pending,
+ cf_socket_send,
+ cf_socket_recv,
+ cf_socket_cntrl,
+ cf_socket_conn_is_alive,
+ Curl_cf_def_conn_keep_alive,
+ cf_socket_query,
+};
+
+CURLcode Curl_cf_unix_create(struct Curl_cfilter **pcf,
+ struct Curl_easy *data,
+ struct connectdata *conn,
+ const struct Curl_addrinfo *ai,
+ int transport)
+{
+ struct cf_socket_ctx *ctx = NULL;
+ struct Curl_cfilter *cf = NULL;
+ CURLcode result;
+
+ (void)data;
+ (void)conn;
+ DEBUGASSERT(transport == TRNSPRT_UNIX);
+ ctx = calloc(1, sizeof(*ctx));
+ if(!ctx) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
+ }
+ cf_socket_ctx_init(ctx, ai, transport);
+
+ result = Curl_cf_create(&cf, &Curl_cft_unix, ctx);
+
+out:
+ *pcf = (!result)? cf : NULL;
+ if(result) {
+ Curl_safefree(cf);
+ Curl_safefree(ctx);
+ }
+
+ return result;
+}
+
+static CURLcode cf_tcp_accept_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool blocking, bool *done)
+{
+ /* we start accepted, if we ever close, we cannot go on */
+ (void)data;
+ (void)blocking;
+ if(cf->connected) {
+ *done = TRUE;
+ return CURLE_OK;
+ }
+ return CURLE_FAILED_INIT;
+}
+
+struct Curl_cftype Curl_cft_tcp_accept = {
+ "TCP-ACCEPT",
+ CF_TYPE_IP_CONNECT,
+ CURL_LOG_LVL_NONE,
+ cf_socket_destroy,
+ cf_tcp_accept_connect,
+ cf_socket_close,
+ cf_socket_get_host, /* TODO: not accurate */
+ cf_socket_adjust_pollset,
+ cf_socket_data_pending,
+ cf_socket_send,
+ cf_socket_recv,
+ cf_socket_cntrl,
+ cf_socket_conn_is_alive,
+ Curl_cf_def_conn_keep_alive,
+ cf_socket_query,
+};
+
+CURLcode Curl_conn_tcp_listen_set(struct Curl_easy *data,
+ struct connectdata *conn,
+ int sockindex, curl_socket_t *s)
+{
+ CURLcode result;
+ struct Curl_cfilter *cf = NULL;
+ struct cf_socket_ctx *ctx = NULL;
+
+ /* replace any existing */
+ Curl_conn_cf_discard_all(data, conn, sockindex);
+ DEBUGASSERT(conn->sock[sockindex] == CURL_SOCKET_BAD);
+
+ ctx = calloc(1, sizeof(*ctx));
+ if(!ctx) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
+ }
+ ctx->transport = conn->transport;
+ ctx->sock = *s;
+ ctx->accepted = FALSE;
+ result = Curl_cf_create(&cf, &Curl_cft_tcp_accept, ctx);
+ if(result)
+ goto out;
+ Curl_conn_cf_add(data, conn, sockindex, cf);
+
+ conn->sock[sockindex] = ctx->sock;
+ set_local_ip(cf, data);
+ ctx->active = TRUE;
+ ctx->connected_at = Curl_now();
+ cf->connected = TRUE;
+ CURL_TRC_CF(data, cf, "Curl_conn_tcp_listen_set(%"
+ CURL_FORMAT_SOCKET_T ")", ctx->sock);
+
+out:
+ if(result) {
+ Curl_safefree(cf);
+ Curl_safefree(ctx);
+ }
+ return result;
+}
+
+static void set_accepted_remote_ip(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_socket_ctx *ctx = cf->ctx;
+#ifdef HAVE_GETPEERNAME
+ char buffer[STRERROR_LEN];
+ struct Curl_sockaddr_storage ssrem;
+ curl_socklen_t plen;
+
+ ctx->r_ip[0] = 0;
+ ctx->r_port = 0;
+ plen = sizeof(ssrem);
+ memset(&ssrem, 0, plen);
+ if(getpeername(ctx->sock, (struct sockaddr*) &ssrem, &plen)) {
+ int error = SOCKERRNO;
+ failf(data, "getpeername() failed with errno %d: %s",
+ error, Curl_strerror(error, buffer, sizeof(buffer)));
+ return;
+ }
+ if(!Curl_addr2string((struct sockaddr*)&ssrem, plen,
+ ctx->r_ip, &ctx->r_port)) {
+ failf(data, "ssrem inet_ntop() failed with errno %d: %s",
+ errno, Curl_strerror(errno, buffer, sizeof(buffer)));
+ return;
+ }
+#else
+ ctx->r_ip[0] = 0;
+ ctx->r_port = 0;
+ (void)data;
+#endif
+}
+
+CURLcode Curl_conn_tcp_accepted_set(struct Curl_easy *data,
+ struct connectdata *conn,
+ int sockindex, curl_socket_t *s)
+{
+ struct Curl_cfilter *cf = NULL;
+ struct cf_socket_ctx *ctx = NULL;
+
+ cf = conn->cfilter[sockindex];
+ if(!cf || cf->cft != &Curl_cft_tcp_accept)
+ return CURLE_FAILED_INIT;
+
+ ctx = cf->ctx;
+ /* discard the listen socket */
+ socket_close(data, conn, TRUE, ctx->sock);
+ ctx->sock = *s;
+ conn->sock[sockindex] = ctx->sock;
+ set_accepted_remote_ip(cf, data);
+ set_local_ip(cf, data);
+ ctx->active = TRUE;
+ ctx->accepted = TRUE;
+ ctx->connected_at = Curl_now();
+ cf->connected = TRUE;
+ CURL_TRC_CF(data, cf, "accepted_set(sock=%" CURL_FORMAT_SOCKET_T
+ ", remote=%s port=%d)",
+ ctx->sock, ctx->r_ip, ctx->r_port);
+
+ return CURLE_OK;
+}
+
+/**
+ * Return TRUE iff `cf` is a socket filter.
+ */
+static bool cf_is_socket(struct Curl_cfilter *cf)
+{
+ return cf && (cf->cft == &Curl_cft_tcp ||
+ cf->cft == &Curl_cft_udp ||
+ cf->cft == &Curl_cft_unix ||
+ cf->cft == &Curl_cft_tcp_accept);
+}
+
+CURLcode Curl_cf_socket_peek(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ curl_socket_t *psock,
+ const struct Curl_sockaddr_ex **paddr,
+ const char **pr_ip_str, int *pr_port,
+ const char **pl_ip_str, int *pl_port)
+{
+ if(cf_is_socket(cf) && cf->ctx) {
+ struct cf_socket_ctx *ctx = cf->ctx;
+
+ if(psock)
+ *psock = ctx->sock;
+ if(paddr)
+ *paddr = &ctx->addr;
+ if(pr_ip_str)
+ *pr_ip_str = ctx->r_ip;
+ if(pr_port)
+ *pr_port = ctx->r_port;
+ if(pl_port ||pl_ip_str) {
+ set_local_ip(cf, data);
+ if(pl_ip_str)
+ *pl_ip_str = ctx->l_ip;
+ if(pl_port)
+ *pl_port = ctx->l_port;
+ }
+ return CURLE_OK;
+ }
+ return CURLE_FAILED_INIT;
+}
diff --git a/lib/cf-socket.h b/lib/cf-socket.h
new file mode 100644
index 000000000..1d40df737
--- /dev/null
+++ b/lib/cf-socket.h
@@ -0,0 +1,191 @@
+#ifndef HEADER_CURL_CF_SOCKET_H
+#define HEADER_CURL_CF_SOCKET_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+
+#include "nonblock.h" /* for curlx_nonblock(), formerly Curl_nonblock() */
+#include "sockaddr.h"
+
+struct Curl_addrinfo;
+struct Curl_cfilter;
+struct Curl_easy;
+struct connectdata;
+struct Curl_sockaddr_ex;
+
+#ifndef SIZEOF_CURL_SOCKET_T
+/* configure and cmake check and set the define */
+# ifdef _WIN64
+# define SIZEOF_CURL_SOCKET_T 8
+# else
+/* default guess */
+# define SIZEOF_CURL_SOCKET_T 4
+# endif
+#endif
+
+#if SIZEOF_CURL_SOCKET_T < 8
+# define CURL_FORMAT_SOCKET_T "d"
+#else
+# define CURL_FORMAT_SOCKET_T "qd"
+#endif
+
+
+/*
+ * The Curl_sockaddr_ex structure is basically libcurl's external API
+ * curl_sockaddr structure with enough space available to directly hold any
+ * protocol-specific address structures. The variable declared here will be
+ * used to pass / receive data to/from the fopensocket callback if this has
+ * been set, before that, it is initialized from parameters.
+ */
+struct Curl_sockaddr_ex {
+ int family;
+ int socktype;
+ int protocol;
+ unsigned int addrlen;
+ union {
+ struct sockaddr addr;
+ struct Curl_sockaddr_storage buff;
+ } _sa_ex_u;
+};
+#define sa_addr _sa_ex_u.addr
+
+
+/*
+ * Create a socket based on info from 'conn' and 'ai'.
+ *
+ * Fill in 'addr' and 'sockfd' accordingly if OK is returned. If the open
+ * socket callback is set, used that!
+ *
+ */
+CURLcode Curl_socket_open(struct Curl_easy *data,
+ const struct Curl_addrinfo *ai,
+ struct Curl_sockaddr_ex *addr,
+ int transport,
+ curl_socket_t *sockfd);
+
+int Curl_socket_close(struct Curl_easy *data, struct connectdata *conn,
+ curl_socket_t sock);
+
+#ifdef USE_WINSOCK
+/* When you run a program that uses the Windows Sockets API, you may
+ experience slow performance when you copy data to a TCP server.
+
+ https://support.microsoft.com/kb/823764
+
+ Work-around: Make the Socket Send Buffer Size Larger Than the Program Send
+ Buffer Size
+
+*/
+void Curl_sndbufset(curl_socket_t sockfd);
+#else
+#define Curl_sndbufset(y) Curl_nop_stmt
+#endif
+
+/**
+ * Assign the address `ai` to the Curl_sockaddr_ex `dest` and
+ * set the transport used.
+ */
+void Curl_sock_assign_addr(struct Curl_sockaddr_ex *dest,
+ const struct Curl_addrinfo *ai,
+ int transport);
+
+/**
+ * Creates a cfilter that opens a TCP socket to the given address
+ * when calling its `connect` implementation.
+ * The filter will not touch any connection/data flags and can be
+ * used in happy eyeballing. Once selected for use, its `_active()`
+ * method needs to be called.
+ */
+CURLcode Curl_cf_tcp_create(struct Curl_cfilter **pcf,
+ struct Curl_easy *data,
+ struct connectdata *conn,
+ const struct Curl_addrinfo *ai,
+ int transport);
+
+/**
+ * Creates a cfilter that opens a UDP socket to the given address
+ * when calling its `connect` implementation.
+ * The filter will not touch any connection/data flags and can be
+ * used in happy eyeballing. Once selected for use, its `_active()`
+ * method needs to be called.
+ */
+CURLcode Curl_cf_udp_create(struct Curl_cfilter **pcf,
+ struct Curl_easy *data,
+ struct connectdata *conn,
+ const struct Curl_addrinfo *ai,
+ int transport);
+
+/**
+ * Creates a cfilter that opens a UNIX socket to the given address
+ * when calling its `connect` implementation.
+ * The filter will not touch any connection/data flags and can be
+ * used in happy eyeballing. Once selected for use, its `_active()`
+ * method needs to be called.
+ */
+CURLcode Curl_cf_unix_create(struct Curl_cfilter **pcf,
+ struct Curl_easy *data,
+ struct connectdata *conn,
+ const struct Curl_addrinfo *ai,
+ int transport);
+
+/**
+ * Creates a cfilter that keeps a listening socket.
+ */
+CURLcode Curl_conn_tcp_listen_set(struct Curl_easy *data,
+ struct connectdata *conn,
+ int sockindex,
+ curl_socket_t *s);
+
+/**
+ * Replace the listen socket with the accept()ed one.
+ */
+CURLcode Curl_conn_tcp_accepted_set(struct Curl_easy *data,
+ struct connectdata *conn,
+ int sockindex,
+ curl_socket_t *s);
+
+/**
+ * Peek at the socket and remote ip/port the socket filter is using.
+ * The filter owns all returned values.
+ * @param psock pointer to hold socket descriptor or NULL
+ * @param paddr pointer to hold addr reference or NULL
+ * @param pr_ip_str pointer to hold remote addr as string or NULL
+ * @param pr_port pointer to hold remote port number or NULL
+ * @param pl_ip_str pointer to hold local addr as string or NULL
+ * @param pl_port pointer to hold local port number or NULL
+ * Returns error if the filter is of invalid type.
+ */
+CURLcode Curl_cf_socket_peek(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ curl_socket_t *psock,
+ const struct Curl_sockaddr_ex **paddr,
+ const char **pr_ip_str, int *pr_port,
+ const char **pl_ip_str, int *pl_port);
+
+extern struct Curl_cftype Curl_cft_tcp;
+extern struct Curl_cftype Curl_cft_udp;
+extern struct Curl_cftype Curl_cft_unix;
+extern struct Curl_cftype Curl_cft_tcp_accept;
+
+#endif /* HEADER_CURL_CF_SOCKET_H */
diff --git a/lib/cfilters.c b/lib/cfilters.c
new file mode 100644
index 000000000..e78ecd71d
--- /dev/null
+++ b/lib/cfilters.c
@@ -0,0 +1,802 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+
+#include "urldata.h"
+#include "strerror.h"
+#include "cfilters.h"
+#include "connect.h"
+#include "url.h" /* for Curl_safefree() */
+#include "sendf.h"
+#include "sockaddr.h" /* required for Curl_sockaddr_storage */
+#include "multiif.h"
+#include "progress.h"
+#include "select.h"
+#include "warnless.h"
+
+/* The last 3 #include files should be in this order */
+#include "curl_printf.h"
+#include "curl_memory.h"
+#include "memdebug.h"
+
+#ifndef ARRAYSIZE
+#define ARRAYSIZE(A) (sizeof(A)/sizeof((A)[0]))
+#endif
+
+#ifdef DEBUGBUILD
+/* used by unit2600.c */
+void Curl_cf_def_close(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ cf->connected = FALSE;
+ if(cf->next)
+ cf->next->cft->do_close(cf->next, data);
+}
+#endif
+
+static void conn_report_connect_stats(struct Curl_easy *data,
+ struct connectdata *conn);
+
+void Curl_cf_def_get_host(struct Curl_cfilter *cf, struct Curl_easy *data,
+ const char **phost, const char **pdisplay_host,
+ int *pport)
+{
+ if(cf->next)
+ cf->next->cft->get_host(cf->next, data, phost, pdisplay_host, pport);
+ else {
+ *phost = cf->conn->host.name;
+ *pdisplay_host = cf->conn->host.dispname;
+ *pport = cf->conn->port;
+ }
+}
+
+void Curl_cf_def_adjust_pollset(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct easy_pollset *ps)
+{
+ /* NOP */
+ (void)cf;
+ (void)data;
+ (void)ps;
+}
+
+bool Curl_cf_def_data_pending(struct Curl_cfilter *cf,
+ const struct Curl_easy *data)
+{
+ return cf->next?
+ cf->next->cft->has_data_pending(cf->next, data) : FALSE;
+}
+
+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?
+ cf->next->cft->do_send(cf->next, data, buf, len, err) :
+ CURLE_RECV_ERROR;
+}
+
+ssize_t Curl_cf_def_recv(struct Curl_cfilter *cf, struct Curl_easy *data,
+ char *buf, size_t len, CURLcode *err)
+{
+ return cf->next?
+ cf->next->cft->do_recv(cf->next, data, buf, len, err) :
+ CURLE_SEND_ERROR;
+}
+
+bool Curl_cf_def_conn_is_alive(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool *input_pending)
+{
+ return cf->next?
+ cf->next->cft->is_alive(cf->next, data, input_pending) :
+ FALSE; /* pessimistic in absence of data */
+}
+
+CURLcode Curl_cf_def_conn_keep_alive(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ return cf->next?
+ cf->next->cft->keep_alive(cf->next, data) :
+ CURLE_OK;
+}
+
+CURLcode Curl_cf_def_query(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int query, int *pres1, void *pres2)
+{
+ return cf->next?
+ cf->next->cft->query(cf->next, data, query, pres1, pres2) :
+ CURLE_UNKNOWN_OPTION;
+}
+
+void Curl_conn_cf_discard_chain(struct Curl_cfilter **pcf,
+ struct Curl_easy *data)
+{
+ struct Curl_cfilter *cfn, *cf = *pcf;
+
+ if(cf) {
+ *pcf = NULL;
+ while(cf) {
+ cfn = cf->next;
+ /* prevent destroying filter to mess with its sub-chain, since
+ * we have the reference now and will call destroy on it.
+ */
+ cf->next = NULL;
+ cf->cft->destroy(cf, data);
+ free(cf);
+ cf = cfn;
+ }
+ }
+}
+
+void Curl_conn_cf_discard_all(struct Curl_easy *data,
+ struct connectdata *conn, int index)
+{
+ Curl_conn_cf_discard_chain(&conn->cfilter[index], data);
+}
+
+void Curl_conn_close(struct Curl_easy *data, int index)
+{
+ struct Curl_cfilter *cf;
+
+ DEBUGASSERT(data->conn);
+ /* it is valid to call that without filters being present */
+ cf = data->conn->cfilter[index];
+ if(cf) {
+ cf->cft->do_close(cf, data);
+ }
+}
+
+ssize_t Curl_conn_recv(struct Curl_easy *data, int num, char *buf,
+ size_t len, CURLcode *code)
+{
+ struct Curl_cfilter *cf;
+
+ DEBUGASSERT(data);
+ DEBUGASSERT(data->conn);
+ cf = data->conn->cfilter[num];
+ while(cf && !cf->connected) {
+ cf = cf->next;
+ }
+ if(cf) {
+ return cf->cft->do_recv(cf, data, buf, len, code);
+ }
+ failf(data, "recv: no filter connected");
+ *code = CURLE_FAILED_INIT;
+ return -1;
+}
+
+ssize_t Curl_conn_send(struct Curl_easy *data, int num,
+ const void *mem, size_t len, CURLcode *code)
+{
+ struct Curl_cfilter *cf;
+
+ DEBUGASSERT(data);
+ DEBUGASSERT(data->conn);
+ cf = data->conn->cfilter[num];
+ while(cf && !cf->connected) {
+ cf = cf->next;
+ }
+ if(cf) {
+ return cf->cft->do_send(cf, data, mem, len, code);
+ }
+ failf(data, "send: no filter connected");
+ DEBUGASSERT(0);
+ *code = CURLE_FAILED_INIT;
+ return -1;
+}
+
+CURLcode Curl_cf_create(struct Curl_cfilter **pcf,
+ const struct Curl_cftype *cft,
+ void *ctx)
+{
+ struct Curl_cfilter *cf;
+ CURLcode result = CURLE_OUT_OF_MEMORY;
+
+ DEBUGASSERT(cft);
+ cf = calloc(1, sizeof(*cf));
+ if(!cf)
+ goto out;
+
+ cf->cft = cft;
+ cf->ctx = ctx;
+ result = CURLE_OK;
+out:
+ *pcf = cf;
+ return result;
+}
+
+void Curl_conn_cf_add(struct Curl_easy *data,
+ struct connectdata *conn,
+ int index,
+ struct Curl_cfilter *cf)
+{
+ (void)data;
+ DEBUGASSERT(conn);
+ DEBUGASSERT(!cf->conn);
+ DEBUGASSERT(!cf->next);
+
+ cf->next = conn->cfilter[index];
+ cf->conn = conn;
+ cf->sockindex = index;
+ conn->cfilter[index] = cf;
+ CURL_TRC_CF(data, cf, "added");
+}
+
+void Curl_conn_cf_insert_after(struct Curl_cfilter *cf_at,
+ struct Curl_cfilter *cf_new)
+{
+ struct Curl_cfilter *tail, **pnext;
+
+ DEBUGASSERT(cf_at);
+ DEBUGASSERT(cf_new);
+ DEBUGASSERT(!cf_new->conn);
+
+ tail = cf_at->next;
+ cf_at->next = cf_new;
+ do {
+ cf_new->conn = cf_at->conn;
+ cf_new->sockindex = cf_at->sockindex;
+ pnext = &cf_new->next;
+ cf_new = cf_new->next;
+ } while(cf_new);
+ *pnext = tail;
+}
+
+bool Curl_conn_cf_discard_sub(struct Curl_cfilter *cf,
+ struct Curl_cfilter *discard,
+ struct Curl_easy *data,
+ bool destroy_always)
+{
+ struct Curl_cfilter **pprev = &cf->next;
+ bool found = FALSE;
+
+ /* remove from sub-chain and destroy */
+ DEBUGASSERT(cf);
+ while(*pprev) {
+ if(*pprev == cf) {
+ *pprev = discard->next;
+ discard->next = NULL;
+ found = TRUE;
+ break;
+ }
+ pprev = &((*pprev)->next);
+ }
+ if(found || destroy_always) {
+ discard->next = NULL;
+ discard->cft->destroy(discard, data);
+ free(discard);
+ }
+ return found;
+}
+
+CURLcode Curl_conn_cf_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool blocking, bool *done)
+{
+ if(cf)
+ return cf->cft->do_connect(cf, data, blocking, done);
+ return CURLE_FAILED_INIT;
+}
+
+void Curl_conn_cf_close(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ if(cf)
+ cf->cft->do_close(cf, data);
+}
+
+ssize_t Curl_conn_cf_send(struct Curl_cfilter *cf, struct Curl_easy *data,
+ const void *buf, size_t len, CURLcode *err)
+{
+ if(cf)
+ return cf->cft->do_send(cf, data, buf, len, err);
+ *err = CURLE_SEND_ERROR;
+ return -1;
+}
+
+ssize_t Curl_conn_cf_recv(struct Curl_cfilter *cf, struct Curl_easy *data,
+ char *buf, size_t len, CURLcode *err)
+{
+ if(cf)
+ return cf->cft->do_recv(cf, data, buf, len, err);
+ *err = CURLE_RECV_ERROR;
+ return -1;
+}
+
+CURLcode Curl_conn_connect(struct Curl_easy *data,
+ int sockindex,
+ bool blocking,
+ bool *done)
+{
+ struct Curl_cfilter *cf;
+ CURLcode result = CURLE_OK;
+
+ DEBUGASSERT(data);
+ DEBUGASSERT(data->conn);
+
+ cf = data->conn->cfilter[sockindex];
+ DEBUGASSERT(cf);
+ if(!cf)
+ return CURLE_FAILED_INIT;
+
+ *done = cf->connected;
+ if(!*done) {
+ result = cf->cft->do_connect(cf, data, blocking, done);
+ if(!result && *done) {
+ Curl_conn_ev_update_info(data, data->conn);
+ conn_report_connect_stats(data, data->conn);
+ data->conn->keepalive = Curl_now();
+ }
+ else if(result) {
+ conn_report_connect_stats(data, data->conn);
+ }
+ }
+
+ return result;
+}
+
+bool Curl_conn_is_connected(struct connectdata *conn, int sockindex)
+{
+ struct Curl_cfilter *cf;
+
+ cf = conn->cfilter[sockindex];
+ return cf && cf->connected;
+}
+
+bool Curl_conn_is_ip_connected(struct Curl_easy *data, int sockindex)
+{
+ struct Curl_cfilter *cf;
+
+ cf = data->conn->cfilter[sockindex];
+ while(cf) {
+ if(cf->connected)
+ return TRUE;
+ if(cf->cft->flags & CF_TYPE_IP_CONNECT)
+ return FALSE;
+ cf = cf->next;
+ }
+ return FALSE;
+}
+
+bool Curl_conn_cf_is_ssl(struct Curl_cfilter *cf)
+{
+ for(; cf; cf = cf->next) {
+ if(cf->cft->flags & CF_TYPE_SSL)
+ return TRUE;
+ if(cf->cft->flags & CF_TYPE_IP_CONNECT)
+ return FALSE;
+ }
+ return FALSE;
+}
+
+bool Curl_conn_is_ssl(struct connectdata *conn, int sockindex)
+{
+ return conn? Curl_conn_cf_is_ssl(conn->cfilter[sockindex]) : FALSE;
+}
+
+bool Curl_conn_is_multiplex(struct connectdata *conn, int sockindex)
+{
+ struct Curl_cfilter *cf = conn? conn->cfilter[sockindex] : NULL;
+
+ for(; cf; cf = cf->next) {
+ if(cf->cft->flags & CF_TYPE_MULTIPLEX)
+ return TRUE;
+ if(cf->cft->flags & CF_TYPE_IP_CONNECT
+ || cf->cft->flags & CF_TYPE_SSL)
+ return FALSE;
+ }
+ return FALSE;
+}
+
+bool Curl_conn_data_pending(struct Curl_easy *data, int sockindex)
+{
+ struct Curl_cfilter *cf;
+
+ (void)data;
+ DEBUGASSERT(data);
+ DEBUGASSERT(data->conn);
+
+ cf = data->conn->cfilter[sockindex];
+ while(cf && !cf->connected) {
+ cf = cf->next;
+ }
+ if(cf) {
+ return cf->cft->has_data_pending(cf, data);
+ }
+ return FALSE;
+}
+
+void Curl_conn_cf_adjust_pollset(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct easy_pollset *ps)
+{
+ /* Get the lowest not-connected filter, if there are any */
+ while(cf && !cf->connected && cf->next && !cf->next->connected)
+ cf = cf->next;
+ /* From there on, give all filters a chance to adjust the pollset.
+ * Lower filters are called later, so they may override */
+ while(cf) {
+ cf->cft->adjust_pollset(cf, data, ps);
+ cf = cf->next;
+ }
+}
+
+void Curl_conn_adjust_pollset(struct Curl_easy *data,
+ struct easy_pollset *ps)
+{
+ int i;
+
+ DEBUGASSERT(data);
+ DEBUGASSERT(data->conn);
+ for(i = 0; i < 2; ++i) {
+ Curl_conn_cf_adjust_pollset(data->conn->cfilter[i], data, ps);
+ }
+}
+
+void Curl_conn_get_host(struct Curl_easy *data, int sockindex,
+ const char **phost, const char **pdisplay_host,
+ int *pport)
+{
+ struct Curl_cfilter *cf;
+
+ DEBUGASSERT(data->conn);
+ cf = data->conn->cfilter[sockindex];
+ if(cf) {
+ cf->cft->get_host(cf, data, phost, pdisplay_host, pport);
+ }
+ else {
+ /* Some filter ask during shutdown for this, mainly for debugging
+ * purposes. We hand out the defaults, however this is not always
+ * accurate, as the connection might be tunneled, etc. But all that
+ * state is already gone here. */
+ *phost = data->conn->host.name;
+ *pdisplay_host = data->conn->host.dispname;
+ *pport = data->conn->remote_port;
+ }
+}
+
+CURLcode Curl_cf_def_cntrl(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int event, int arg1, void *arg2)
+{
+ (void)cf;
+ (void)data;
+ (void)event;
+ (void)arg1;
+ (void)arg2;
+ return CURLE_OK;
+}
+
+CURLcode Curl_conn_cf_cntrl(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool ignore_result,
+ int event, int arg1, void *arg2)
+{
+ CURLcode result = CURLE_OK;
+
+ for(; cf; cf = cf->next) {
+ if(Curl_cf_def_cntrl == cf->cft->cntrl)
+ continue;
+ result = cf->cft->cntrl(cf, data, event, arg1, arg2);
+ if(!ignore_result && result)
+ break;
+ }
+ return result;
+}
+
+curl_socket_t Curl_conn_cf_get_socket(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ curl_socket_t sock;
+ if(cf && !cf->cft->query(cf, data, CF_QUERY_SOCKET, NULL, &sock))
+ return sock;
+ return CURL_SOCKET_BAD;
+}
+
+curl_socket_t Curl_conn_get_socket(struct Curl_easy *data, int sockindex)
+{
+ struct Curl_cfilter *cf;
+
+ cf = data->conn? data->conn->cfilter[sockindex] : NULL;
+ /* if the top filter has not connected, ask it (and its sub-filters)
+ * for the socket. Otherwise conn->sock[sockindex] should have it.
+ */
+ if(cf && !cf->connected)
+ return Curl_conn_cf_get_socket(cf, data);
+ return data->conn? data->conn->sock[sockindex] : CURL_SOCKET_BAD;
+}
+
+void Curl_conn_forget_socket(struct Curl_easy *data, int sockindex)
+{
+ if(data->conn) {
+ struct Curl_cfilter *cf = data->conn->cfilter[sockindex];
+ if(cf)
+ (void)Curl_conn_cf_cntrl(cf, data, TRUE,
+ CF_CTRL_FORGET_SOCKET, 0, NULL);
+ fake_sclose(data->conn->sock[sockindex]);
+ data->conn->sock[sockindex] = CURL_SOCKET_BAD;
+ }
+}
+
+static CURLcode cf_cntrl_all(struct connectdata *conn,
+ struct Curl_easy *data,
+ bool ignore_result,
+ int event, int arg1, void *arg2)
+{
+ CURLcode result = CURLE_OK;
+ size_t i;
+
+ for(i = 0; i < ARRAYSIZE(conn->cfilter); ++i) {
+ result = Curl_conn_cf_cntrl(conn->cfilter[i], data, ignore_result,
+ event, arg1, arg2);
+ if(!ignore_result && result)
+ break;
+ }
+ return result;
+}
+
+void Curl_conn_ev_data_attach(struct connectdata *conn,
+ struct Curl_easy *data)
+{
+ cf_cntrl_all(conn, data, TRUE, CF_CTRL_DATA_ATTACH, 0, NULL);
+}
+
+void Curl_conn_ev_data_detach(struct connectdata *conn,
+ struct Curl_easy *data)
+{
+ cf_cntrl_all(conn, data, TRUE, CF_CTRL_DATA_DETACH, 0, NULL);
+}
+
+CURLcode Curl_conn_ev_data_setup(struct Curl_easy *data)
+{
+ return cf_cntrl_all(data->conn, data, FALSE,
+ CF_CTRL_DATA_SETUP, 0, NULL);
+}
+
+CURLcode Curl_conn_ev_data_idle(struct Curl_easy *data)
+{
+ return cf_cntrl_all(data->conn, data, FALSE,
+ CF_CTRL_DATA_IDLE, 0, NULL);
+}
+
+/**
+ * Notify connection filters that the transfer represented by `data`
+ * is donw with sending data (e.g. has uploaded everything).
+ */
+void Curl_conn_ev_data_done_send(struct Curl_easy *data)
+{
+ cf_cntrl_all(data->conn, data, TRUE, CF_CTRL_DATA_DONE_SEND, 0, NULL);
+}
+
+/**
+ * Notify connection filters that the transfer represented by `data`
+ * is finished - eventually premature, e.g. before being complete.
+ */
+void Curl_conn_ev_data_done(struct Curl_easy *data, bool premature)
+{
+ cf_cntrl_all(data->conn, data, TRUE, CF_CTRL_DATA_DONE, premature, NULL);
+}
+
+CURLcode Curl_conn_ev_data_pause(struct Curl_easy *data, bool do_pause)
+{
+ return cf_cntrl_all(data->conn, data, FALSE,
+ CF_CTRL_DATA_PAUSE, do_pause, NULL);
+}
+
+void Curl_conn_ev_update_info(struct Curl_easy *data,
+ struct connectdata *conn)
+{
+ cf_cntrl_all(conn, data, TRUE, CF_CTRL_CONN_INFO_UPDATE, 0, NULL);
+}
+
+/**
+ * Update connection statistics
+ */
+static void conn_report_connect_stats(struct Curl_easy *data,
+ struct connectdata *conn)
+{
+ struct Curl_cfilter *cf = conn->cfilter[FIRSTSOCKET];
+ if(cf) {
+ struct curltime connected;
+ struct curltime appconnected;
+
+ memset(&connected, 0, sizeof(connected));
+ cf->cft->query(cf, data, CF_QUERY_TIMER_CONNECT, NULL, &connected);
+ if(connected.tv_sec || connected.tv_usec)
+ Curl_pgrsTimeWas(data, TIMER_CONNECT, connected);
+
+ memset(&appconnected, 0, sizeof(appconnected));
+ cf->cft->query(cf, data, CF_QUERY_TIMER_APPCONNECT, NULL, &appconnected);
+ if(appconnected.tv_sec || appconnected.tv_usec)
+ Curl_pgrsTimeWas(data, TIMER_APPCONNECT, appconnected);
+ }
+}
+
+bool Curl_conn_is_alive(struct Curl_easy *data, struct connectdata *conn,
+ bool *input_pending)
+{
+ struct Curl_cfilter *cf = conn->cfilter[FIRSTSOCKET];
+ return cf && !cf->conn->bits.close &&
+ cf->cft->is_alive(cf, data, input_pending);
+}
+
+CURLcode Curl_conn_keep_alive(struct Curl_easy *data,
+ struct connectdata *conn,
+ int sockindex)
+{
+ struct Curl_cfilter *cf = conn->cfilter[sockindex];
+ return cf? cf->cft->keep_alive(cf, data) : CURLE_OK;
+}
+
+size_t Curl_conn_get_max_concurrent(struct Curl_easy *data,
+ struct connectdata *conn,
+ int sockindex)
+{
+ CURLcode result;
+ int n = 0;
+
+ struct Curl_cfilter *cf = conn->cfilter[sockindex];
+ result = cf? cf->cft->query(cf, data, CF_QUERY_MAX_CONCURRENT,
+ &n, NULL) : CURLE_UNKNOWN_OPTION;
+ return (result || n <= 0)? 1 : (size_t)n;
+}
+
+
+void Curl_pollset_reset(struct Curl_easy *data,
+ struct easy_pollset *ps)
+{
+ size_t i;
+ (void)data;
+ memset(ps, 0, sizeof(*ps));
+ for(i = 0; i< MAX_SOCKSPEREASYHANDLE; i++)
+ ps->sockets[i] = CURL_SOCKET_BAD;
+}
+
+/**
+ *
+ */
+void Curl_pollset_change(struct Curl_easy *data,
+ struct easy_pollset *ps, curl_socket_t sock,
+ int add_flags, int remove_flags)
+{
+ unsigned int i;
+
+ (void)data;
+ DEBUGASSERT(VALID_SOCK(sock));
+ if(!VALID_SOCK(sock))
+ return;
+
+ DEBUGASSERT(add_flags <= (CURL_POLL_IN|CURL_POLL_OUT));
+ DEBUGASSERT(remove_flags <= (CURL_POLL_IN|CURL_POLL_OUT));
+ DEBUGASSERT((add_flags&remove_flags) == 0); /* no overlap */
+ for(i = 0; i < ps->num; ++i) {
+ if(ps->sockets[i] == sock) {
+ ps->actions[i] &= (unsigned char)(~remove_flags);
+ ps->actions[i] |= (unsigned char)add_flags;
+ /* all gone? remove socket */
+ if(!ps->actions[i]) {
+ if((i + 1) < ps->num) {
+ memmove(&ps->sockets[i], &ps->sockets[i + 1],
+ (ps->num - (i + 1)) * sizeof(ps->sockets[0]));
+ memmove(&ps->actions[i], &ps->actions[i + 1],
+ (ps->num - (i + 1)) * sizeof(ps->actions[0]));
+ }
+ --ps->num;
+ }
+ return;
+ }
+ }
+ /* not present */
+ if(add_flags) {
+ /* Having more SOCKETS per easy handle than what is defined
+ * is a programming error. This indicates that we need
+ * to raise this limit, making easy_pollset larger.
+ * Since we use this in tight loops, we do not want to make
+ * the pollset dynamic unnecessarily.
+ * The current maximum in practise is HTTP/3 eyeballing where
+ * we have up to 4 sockets involved in connection setup.
+ */
+ DEBUGASSERT(i < MAX_SOCKSPEREASYHANDLE);
+ if(i < MAX_SOCKSPEREASYHANDLE) {
+ ps->sockets[i] = sock;
+ ps->actions[i] = (unsigned char)add_flags;
+ ps->num = i + 1;
+ }
+ }
+}
+
+void Curl_pollset_set(struct Curl_easy *data,
+ struct easy_pollset *ps, curl_socket_t sock,
+ bool do_in, bool do_out)
+{
+ Curl_pollset_change(data, ps, sock,
+ (do_in?CURL_POLL_IN:0)|(do_out?CURL_POLL_OUT:0),
+ (!do_in?CURL_POLL_IN:0)|(!do_out?CURL_POLL_OUT:0));
+}
+
+static void ps_add(struct Curl_easy *data, struct easy_pollset *ps,
+ int bitmap, curl_socket_t *socks)
+{
+ if(bitmap) {
+ int i;
+ for(i = 0; i < MAX_SOCKSPEREASYHANDLE; ++i) {
+ if(!(bitmap & GETSOCK_MASK_RW(i)) || !VALID_SOCK((socks[i]))) {
+ break;
+ }
+ if(bitmap & GETSOCK_READSOCK(i)) {
+ if(bitmap & GETSOCK_WRITESOCK(i))
+ Curl_pollset_add_inout(data, ps, socks[i]);
+ else
+ /* is READ, since we checked MASK_RW above */
+ Curl_pollset_add_in(data, ps, socks[i]);
+ }
+ else
+ Curl_pollset_add_out(data, ps, socks[i]);
+ }
+ }
+}
+
+void Curl_pollset_add_socks(struct Curl_easy *data,
+ struct easy_pollset *ps,
+ int (*get_socks_cb)(struct Curl_easy *data,
+ struct connectdata *conn,
+ curl_socket_t *socks))
+{
+ curl_socket_t socks[MAX_SOCKSPEREASYHANDLE];
+ int bitmap;
+
+ DEBUGASSERT(data->conn);
+ bitmap = get_socks_cb(data, data->conn, socks);
+ ps_add(data, ps, bitmap, socks);
+}
+
+void Curl_pollset_add_socks2(struct Curl_easy *data,
+ struct easy_pollset *ps,
+ int (*get_socks_cb)(struct Curl_easy *data,
+ curl_socket_t *socks))
+{
+ curl_socket_t socks[MAX_SOCKSPEREASYHANDLE];
+ int bitmap;
+
+ bitmap = get_socks_cb(data, socks);
+ ps_add(data, ps, bitmap, socks);
+}
+
+void Curl_pollset_check(struct Curl_easy *data,
+ struct easy_pollset *ps, curl_socket_t sock,
+ bool *pwant_read, bool *pwant_write)
+{
+ unsigned int i;
+
+ (void)data;
+ DEBUGASSERT(VALID_SOCK(sock));
+ for(i = 0; i < ps->num; ++i) {
+ if(ps->sockets[i] == sock) {
+ *pwant_read = !!(ps->actions[i] & CURL_POLL_IN);
+ *pwant_write = !!(ps->actions[i] & CURL_POLL_OUT);
+ return;
+ }
+ }
+ *pwant_read = *pwant_write = FALSE;
+}
diff --git a/lib/cfilters.h b/lib/cfilters.h
new file mode 100644
index 000000000..09a3f162a
--- /dev/null
+++ b/lib/cfilters.h
@@ -0,0 +1,616 @@
+#ifndef HEADER_CURL_CFILTERS_H
+#define HEADER_CURL_CFILTERS_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ ***************************************************************************/
+
+
+struct Curl_cfilter;
+struct Curl_easy;
+struct Curl_dns_entry;
+struct connectdata;
+
+/* Callback to destroy resources held by this filter instance.
+ * Implementations MUST NOT chain calls to cf->next.
+ */
+typedef void Curl_cft_destroy_this(struct Curl_cfilter *cf,
+ struct Curl_easy *data);
+
+typedef void Curl_cft_close(struct Curl_cfilter *cf,
+ struct Curl_easy *data);
+
+typedef CURLcode Curl_cft_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool blocking, bool *done);
+
+/* Return the hostname and port the connection goes to.
+ * This may change with the connection state of filters when tunneling
+ * is involved.
+ * @param cf the filter to ask
+ * @param data the easy handle currently active
+ * @param phost on return, points to the relevant, real hostname.
+ * this is owned by the connection.
+ * @param pdisplay_host on return, points to the printable hostname.
+ * this is owned by the connection.
+ * @param pport on return, contains the port number
+ */
+typedef void Curl_cft_get_host(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ const char **phost,
+ const char **pdisplay_host,
+ int *pport);
+
+struct easy_pollset;
+
+/* Passing in an easy_pollset for monitoring of sockets, let
+ * filters add or remove sockets actions (CURL_POLL_OUT, CURL_POLL_IN).
+ * This may add a socket or, in case no actions remain, remove
+ * a socket from the set.
+ *
+ * Filter implementations need to call filters "below" *after* they have
+ * made their adjustments. This allows lower filters to override "upper"
+ * actions. If a "lower" filter is unable to write, it needs to be able
+ * to disallow POLL_OUT.
+ *
+ * A filter without own restrictions/preferences should not modify
+ * the pollset. Filters, whose filter "below" is not connected, should
+ * also do no adjustments.
+ *
+ * Examples: a TLS handshake, while ongoing, might remove POLL_IN
+ * when it needs to write, or vice versa. A HTTP/2 filter might remove
+ * POLL_OUT when a stream window is exhausted and a WINDOW_UPDATE needs
+ * to be received first and add instead POLL_IN.
+ *
+ * @param cf the filter to ask
+ * @param data the easy handle the pollset is about
+ * @param ps the pollset (inout) for the easy handle
+ */
+typedef void Curl_cft_adjust_pollset(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct easy_pollset *ps);
+
+typedef bool Curl_cft_data_pending(struct Curl_cfilter *cf,
+ const struct Curl_easy *data);
+
+typedef ssize_t Curl_cft_send(struct Curl_cfilter *cf,
+ struct Curl_easy *data, /* transfer */
+ const void *buf, /* data to write */
+ size_t len, /* amount to write */
+ CURLcode *err); /* error to return */
+
+typedef ssize_t Curl_cft_recv(struct Curl_cfilter *cf,
+ struct Curl_easy *data, /* transfer */
+ char *buf, /* store data here */
+ size_t len, /* amount to read */
+ CURLcode *err); /* error to return */
+
+typedef bool Curl_cft_conn_is_alive(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool *input_pending);
+
+typedef CURLcode Curl_cft_conn_keep_alive(struct Curl_cfilter *cf,
+ struct Curl_easy *data);
+
+/**
+ * Events/controls for connection filters, their arguments and
+ * return code handling. Filter callbacks are invoked "top down".
+ * Return code handling:
+ * "first fail" meaning that the first filter returning != CURLE_OK, will
+ * abort further event distribution and determine the result.
+ * "ignored" meaning return values are ignored and the event is distributed
+ * to all filters in the chain. Overall result is always CURLE_OK.
+ */
+/* data event arg1 arg2 return */
+#define CF_CTRL_DATA_ATTACH 1 /* 0 NULL ignored */
+#define CF_CTRL_DATA_DETACH 2 /* 0 NULL ignored */
+#define CF_CTRL_DATA_SETUP 4 /* 0 NULL first fail */
+#define CF_CTRL_DATA_IDLE 5 /* 0 NULL first fail */
+#define CF_CTRL_DATA_PAUSE 6 /* on/off NULL first fail */
+#define CF_CTRL_DATA_DONE 7 /* premature NULL ignored */
+#define CF_CTRL_DATA_DONE_SEND 8 /* 0 NULL ignored */
+/* update conn info at connection and data */
+#define CF_CTRL_CONN_INFO_UPDATE (256+0) /* 0 NULL ignored */
+#define CF_CTRL_FORGET_SOCKET (256+1) /* 0 NULL ignored */
+
+/**
+ * Handle event/control for the filter.
+ * Implementations MUST NOT chain calls to cf->next.
+ */
+typedef CURLcode Curl_cft_cntrl(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int event, int arg1, void *arg2);
+
+
+/**
+ * Queries to ask via a `Curl_cft_query *query` method on a cfilter chain.
+ * - MAX_CONCURRENT: the maximum number of parallel transfers the filter
+ * chain expects to handle at the same time.
+ * default: 1 if no filter overrides.
+ * - CONNECT_REPLY_MS: milliseconds until the first indication of a server
+ * response was received on a connect. For TCP, this
+ * reflects the time until the socket connected. On UDP
+ * this gives the time the first bytes from the server
+ * were received.
+ * -1 if not determined yet.
+ * - CF_QUERY_SOCKET: the socket used by the filter chain
+ */
+/* query res1 res2 */
+#define CF_QUERY_MAX_CONCURRENT 1 /* number - */
+#define CF_QUERY_CONNECT_REPLY_MS 2 /* number - */
+#define CF_QUERY_SOCKET 3 /* - curl_socket_t */
+#define CF_QUERY_TIMER_CONNECT 4 /* - struct curltime */
+#define CF_QUERY_TIMER_APPCONNECT 5 /* - struct curltime */
+
+/**
+ * Query the cfilter for properties. Filters ignorant of a query will
+ * pass it "down" the filter chain.
+ */
+typedef CURLcode Curl_cft_query(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int query, int *pres1, void *pres2);
+
+/**
+ * Type flags for connection filters. A filter can have none, one or
+ * many of those. Use to evaluate state/capabilities of a filter chain.
+ *
+ * CF_TYPE_IP_CONNECT: provides an IP connection or sth equivalent, like
+ * a CONNECT tunnel, a UNIX domain socket, a QUIC
+ * connection, etc.
+ * CF_TYPE_SSL: provide SSL/TLS
+ * CF_TYPE_MULTIPLEX: provides multiplexing of easy handles
+ */
+#define CF_TYPE_IP_CONNECT (1 << 0)
+#define CF_TYPE_SSL (1 << 1)
+#define CF_TYPE_MULTIPLEX (1 << 2)
+
+/* A connection filter type, e.g. specific implementation. */
+struct Curl_cftype {
+ const char *name; /* name of the filter type */
+ int flags; /* flags of filter type */
+ int log_level; /* log level for such filters */
+ Curl_cft_destroy_this *destroy; /* destroy resources of this cf */
+ Curl_cft_connect *do_connect; /* establish connection */
+ Curl_cft_close *do_close; /* close conn */
+ Curl_cft_get_host *get_host; /* host filter talks to */
+ Curl_cft_adjust_pollset *adjust_pollset; /* adjust transfer poll set */
+ Curl_cft_data_pending *has_data_pending;/* conn has data pending */
+ Curl_cft_send *do_send; /* send data */
+ Curl_cft_recv *do_recv; /* receive data */
+ Curl_cft_cntrl *cntrl; /* events/control */
+ Curl_cft_conn_is_alive *is_alive; /* FALSE if conn is dead, Jim! */
+ Curl_cft_conn_keep_alive *keep_alive; /* try to keep it alive */
+ Curl_cft_query *query; /* query filter chain */
+};
+
+/* A connection filter instance, e.g. registered at a connection */
+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; /* the index the filter is installed at */
+ BIT(connected); /* != 0 iff this filter is connected */
+};
+
+/* Default implementations for the type functions, implementing nop. */
+void Curl_cf_def_destroy_this(struct Curl_cfilter *cf,
+ struct Curl_easy *data);
+
+/* Default implementations for the type functions, implementing pass-through
+ * the filter chain. */
+void Curl_cf_def_get_host(struct Curl_cfilter *cf, struct Curl_easy *data,
+ const char **phost, const char **pdisplay_host,
+ int *pport);
+void Curl_cf_def_adjust_pollset(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct easy_pollset *ps);
+bool Curl_cf_def_data_pending(struct Curl_cfilter *cf,
+ const struct Curl_easy *data);
+ssize_t Curl_cf_def_send(struct Curl_cfilter *cf, struct Curl_easy *data,
+ const void *buf, size_t len, CURLcode *err);
+ssize_t Curl_cf_def_recv(struct Curl_cfilter *cf, struct Curl_easy *data,
+ char *buf, size_t len, CURLcode *err);
+CURLcode Curl_cf_def_cntrl(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int event, int arg1, void *arg2);
+bool Curl_cf_def_conn_is_alive(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool *input_pending);
+CURLcode Curl_cf_def_conn_keep_alive(struct Curl_cfilter *cf,
+ struct Curl_easy *data);
+CURLcode Curl_cf_def_query(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int query, int *pres1, void *pres2);
+
+/**
+ * Create a new filter instance, unattached to the filter chain.
+ * Use Curl_conn_cf_add() to add it to the chain.
+ * @param pcf on success holds the created instance
+ * @param cft the filter type
+ * @param ctx the type specific context to use
+ */
+CURLcode Curl_cf_create(struct Curl_cfilter **pcf,
+ const struct Curl_cftype *cft,
+ void *ctx);
+
+/**
+ * Add a filter instance to the `sockindex` filter chain at connection
+ * `conn`. The filter must not already be attached. It is inserted at
+ * the start of the chain (top).
+ */
+void Curl_conn_cf_add(struct Curl_easy *data,
+ struct connectdata *conn,
+ int sockindex,
+ struct Curl_cfilter *cf);
+
+/**
+ * Insert a filter (chain) after `cf_at`.
+ * `cf_new` must not already be attached.
+ */
+void Curl_conn_cf_insert_after(struct Curl_cfilter *cf_at,
+ struct Curl_cfilter *cf_new);
+
+/**
+ * Discard, e.g. remove and destroy `discard` iff
+ * it still is in the filter chain below `cf`. If `discard`
+ * is no longer found beneath `cf` return FALSE.
+ * if `destroy_always` is TRUE, will call `discard`s destroy
+ * function and free it even if not found in the subchain.
+ */
+bool Curl_conn_cf_discard_sub(struct Curl_cfilter *cf,
+ struct Curl_cfilter *discard,
+ struct Curl_easy *data,
+ bool destroy_always);
+
+/**
+ * Discard all cfilters starting with `*pcf` and clearing it afterwards.
+ */
+void Curl_conn_cf_discard_chain(struct Curl_cfilter **pcf,
+ struct Curl_easy *data);
+
+/**
+ * Remove and destroy all filters at chain `sockindex` on connection `conn`.
+ */
+void Curl_conn_cf_discard_all(struct Curl_easy *data,
+ struct connectdata *conn,
+ int sockindex);
+
+
+CURLcode Curl_conn_cf_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool blocking, bool *done);
+void Curl_conn_cf_close(struct Curl_cfilter *cf, struct Curl_easy *data);
+ssize_t Curl_conn_cf_send(struct Curl_cfilter *cf, struct Curl_easy *data,
+ const void *buf, size_t len, CURLcode *err);
+ssize_t Curl_conn_cf_recv(struct Curl_cfilter *cf, struct Curl_easy *data,
+ char *buf, size_t len, CURLcode *err);
+CURLcode Curl_conn_cf_cntrl(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool ignore_result,
+ int event, int arg1, void *arg2);
+
+/**
+ * Determine if the connection filter chain is using SSL to the remote host
+ * (or will be once connected).
+ */
+bool Curl_conn_cf_is_ssl(struct Curl_cfilter *cf);
+
+/**
+ * Get the socket used by the filter chain starting at `cf`.
+ * Returns CURL_SOCKET_BAD if not available.
+ */
+curl_socket_t Curl_conn_cf_get_socket(struct Curl_cfilter *cf,
+ struct Curl_easy *data);
+
+
+#define CURL_CF_SSL_DEFAULT -1
+#define CURL_CF_SSL_DISABLE 0
+#define CURL_CF_SSL_ENABLE 1
+
+/**
+ * Bring the filter chain at `sockindex` for connection `data->conn` into
+ * connected state. Which will set `*done` to TRUE.
+ * This can be called on an already connected chain with no side effects.
+ * When not `blocking`, calls may return without error and `*done != TRUE`,
+ * while the individual filters negotiated the connection.
+ */
+CURLcode Curl_conn_connect(struct Curl_easy *data, int sockindex,
+ bool blocking, bool *done);
+
+/**
+ * Check if the filter chain at `sockindex` for connection `conn` is
+ * completely connected.
+ */
+bool Curl_conn_is_connected(struct connectdata *conn, int sockindex);
+
+/**
+ * Determine if we have reached the remote host on IP level, e.g.
+ * have a TCP connection. This turns TRUE before a possible SSL
+ * handshake has been started/done.
+ */
+bool Curl_conn_is_ip_connected(struct Curl_easy *data, int sockindex);
+
+/**
+ * Determine if the connection is using SSL to the remote host
+ * (or will be once connected). This will return FALSE, if SSL
+ * is only used in proxying and not for the tunnel itself.
+ */
+bool Curl_conn_is_ssl(struct connectdata *conn, int sockindex);
+
+/**
+ * Connection provides multiplexing of easy handles at `socketindex`.
+ */
+bool Curl_conn_is_multiplex(struct connectdata *conn, int sockindex);
+
+/**
+ * Close the filter chain at `sockindex` for connection `data->conn`.
+ * Filters remain in place and may be connected again afterwards.
+ */
+void Curl_conn_close(struct Curl_easy *data, int sockindex);
+
+/**
+ * Return if data is pending in some connection filter at chain
+ * `sockindex` for connection `data->conn`.
+ */
+bool Curl_conn_data_pending(struct Curl_easy *data,
+ int sockindex);
+
+/**
+ * Return the socket used on data's connection for the index.
+ * Returns CURL_SOCKET_BAD if not available.
+ */
+curl_socket_t Curl_conn_get_socket(struct Curl_easy *data, int sockindex);
+
+/**
+ * Tell filters to forget about the socket at sockindex.
+ */
+void Curl_conn_forget_socket(struct Curl_easy *data, int sockindex);
+
+/**
+ * Adjust the pollset for the filter chain startgin at `cf`.
+ */
+void Curl_conn_cf_adjust_pollset(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct easy_pollset *ps);
+
+/**
+ * Adjust pollset from filters installed at transfer's connection.
+ */
+void Curl_conn_adjust_pollset(struct Curl_easy *data,
+ struct easy_pollset *ps);
+
+/**
+ * Receive data through the filter chain at `sockindex` for connection
+ * `data->conn`. Copy at most `len` bytes into `buf`. Return the
+ * actuel number of bytes copied or a negative value on error.
+ * The error code is placed into `*code`.
+ */
+ssize_t Curl_conn_recv(struct Curl_easy *data, int sockindex, char *buf,
+ size_t len, CURLcode *code);
+
+/**
+ * Send `len` bytes of data from `buf` through the filter chain `sockindex`
+ * at connection `data->conn`. Return the actual number of bytes written
+ * or a negative value on error.
+ * The error code is placed into `*code`.
+ */
+ssize_t Curl_conn_send(struct Curl_easy *data, int sockindex,
+ const void *buf, size_t len, CURLcode *code);
+
+/**
+ * The easy handle `data` is being attached to `conn`. This does
+ * not mean that data will actually do a transfer. Attachment is
+ * also used for temporary actions on the connection.
+ */
+void Curl_conn_ev_data_attach(struct connectdata *conn,
+ struct Curl_easy *data);
+
+/**
+ * The easy handle `data` is being detached (no longer served)
+ * by connection `conn`. All filters are informed to release any resources
+ * related to `data`.
+ * Note: there may be several `data` attached to a connection at the same
+ * time.
+ */
+void Curl_conn_ev_data_detach(struct connectdata *conn,
+ struct Curl_easy *data);
+
+/**
+ * Notify connection filters that they need to setup data for
+ * a transfer.
+ */
+CURLcode Curl_conn_ev_data_setup(struct Curl_easy *data);
+
+/**
+ * Notify connection filters that now would be a good time to
+ * perform any idle, e.g. time related, actions.
+ */
+CURLcode Curl_conn_ev_data_idle(struct Curl_easy *data);
+
+/**
+ * Notify connection filters that the transfer represented by `data`
+ * is donw with sending data (e.g. has uploaded everything).
+ */
+void Curl_conn_ev_data_done_send(struct Curl_easy *data);
+
+/**
+ * Notify connection filters that the transfer represented by `data`
+ * is finished - eventually premature, e.g. before being complete.
+ */
+void Curl_conn_ev_data_done(struct Curl_easy *data, bool premature);
+
+/**
+ * Notify connection filters that the transfer of data is paused/unpaused.
+ */
+CURLcode Curl_conn_ev_data_pause(struct Curl_easy *data, bool do_pause);
+
+/**
+ * Inform connection filters to update their info in `conn`.
+ */
+void Curl_conn_ev_update_info(struct Curl_easy *data,
+ struct connectdata *conn);
+
+/**
+ * Check if FIRSTSOCKET's cfilter chain deems connection alive.
+ */
+bool Curl_conn_is_alive(struct Curl_easy *data, struct connectdata *conn,
+ bool *input_pending);
+
+/**
+ * Try to upkeep the connection filters at sockindex.
+ */
+CURLcode Curl_conn_keep_alive(struct Curl_easy *data,
+ struct connectdata *conn,
+ int sockindex);
+
+void Curl_cf_def_close(struct Curl_cfilter *cf, struct Curl_easy *data);
+void Curl_conn_get_host(struct Curl_easy *data, int sockindex,
+ const char **phost, const char **pdisplay_host,
+ int *pport);
+
+/**
+ * Get the maximum number of parallel transfers the connection
+ * expects to be able to handle at `sockindex`.
+ */
+size_t Curl_conn_get_max_concurrent(struct Curl_easy *data,
+ struct connectdata *conn,
+ int sockindex);
+
+
+void Curl_pollset_reset(struct Curl_easy *data,
+ struct easy_pollset *ps);
+
+/* Change the poll flags (CURL_POLL_IN/CURL_POLL_OUT) to the poll set for
+ * socket `sock`. If the socket is not already part of the poll set, it
+ * will be added.
+ * If the socket is present and all poll flags are cleared, it will be removed.
+ */
+void Curl_pollset_change(struct Curl_easy *data,
+ struct easy_pollset *ps, curl_socket_t sock,
+ int add_flags, int remove_flags);
+
+void Curl_pollset_set(struct Curl_easy *data,
+ struct easy_pollset *ps, curl_socket_t sock,
+ bool do_in, bool do_out);
+
+#define Curl_pollset_add_in(data, ps, sock) \
+ Curl_pollset_change((data), (ps), (sock), CURL_POLL_IN, 0)
+#define Curl_pollset_add_out(data, ps, sock) \
+ Curl_pollset_change((data), (ps), (sock), CURL_POLL_OUT, 0)
+#define Curl_pollset_add_inout(data, ps, sock) \
+ Curl_pollset_change((data), (ps), (sock), \
+ CURL_POLL_IN|CURL_POLL_OUT, 0)
+#define Curl_pollset_set_in_only(data, ps, sock) \
+ Curl_pollset_change((data), (ps), (sock), \
+ CURL_POLL_IN, CURL_POLL_OUT)
+#define Curl_pollset_set_out_only(data, ps, sock) \
+ Curl_pollset_change((data), (ps), (sock), \
+ CURL_POLL_OUT, CURL_POLL_IN)
+
+void Curl_pollset_add_socks(struct Curl_easy *data,
+ struct easy_pollset *ps,
+ int (*get_socks_cb)(struct Curl_easy *data,
+ struct connectdata *conn,
+ curl_socket_t *socks));
+void Curl_pollset_add_socks2(struct Curl_easy *data,
+ struct easy_pollset *ps,
+ int (*get_socks_cb)(struct Curl_easy *data,
+ curl_socket_t *socks));
+
+/**
+ * Check if the pollset, as is, wants to read and/or write regarding
+ * the given socket.
+ */
+void Curl_pollset_check(struct Curl_easy *data,
+ struct easy_pollset *ps, curl_socket_t sock,
+ bool *pwant_read, bool *pwant_write);
+
+/**
+ * Types and macros used to keep the current easy handle in filter calls,
+ * allowing for nested invocations. See #10336.
+ *
+ * `cf_call_data` is intended to be a member of the cfilter's `ctx` type.
+ * A filter defines the macro `CF_CTX_CALL_DATA` to give access to that.
+ *
+ * With all values 0, the default, this indicates that there is no cfilter
+ * call with `data` ongoing.
+ * Macro `CF_DATA_SAVE` preserves the current `cf_call_data` in a local
+ * variable and sets the `data` given, incrementing the `depth` counter.
+ *
+ * Macro `CF_DATA_RESTORE` restores the old values from the local variable,
+ * while checking that `depth` values are as expected (debug build), catching
+ * cases where a "lower" RESTORE was not called.
+ *
+ * Finally, macro `CF_DATA_CURRENT` gives the easy handle of the current
+ * invocation.
+ */
+struct cf_call_data {
+ struct Curl_easy *data;
+#ifdef DEBUGBUILD
+ int depth;
+#endif
+};
+
+/**
+ * define to access the `struct cf_call_data for a cfilter. Normally
+ * a member in the cfilter's `ctx`.
+ *
+ * #define CF_CTX_CALL_DATA(cf) -> struct cf_call_data instance
+*/
+
+#ifdef DEBUGBUILD
+
+#define CF_DATA_SAVE(save, cf, data) \
+ do { \
+ (save) = CF_CTX_CALL_DATA(cf); \
+ DEBUGASSERT((save).data == NULL || (save).depth > 0); \
+ CF_CTX_CALL_DATA(cf).depth++; \
+ CF_CTX_CALL_DATA(cf).data = (struct Curl_easy *)data; \
+ } while(0)
+
+#define CF_DATA_RESTORE(cf, save) \
+ do { \
+ DEBUGASSERT(CF_CTX_CALL_DATA(cf).depth == (save).depth + 1); \
+ DEBUGASSERT((save).data == NULL || (save).depth > 0); \
+ CF_CTX_CALL_DATA(cf) = (save); \
+ } while(0)
+
+#else /* DEBUGBUILD */
+
+#define CF_DATA_SAVE(save, cf, data) \
+ do { \
+ (save) = CF_CTX_CALL_DATA(cf); \
+ CF_CTX_CALL_DATA(cf).data = (struct Curl_easy *)data; \
+ } while(0)
+
+#define CF_DATA_RESTORE(cf, save) \
+ do { \
+ CF_CTX_CALL_DATA(cf) = (save); \
+ } while(0)
+
+#endif /* !DEBUGBUILD */
+
+#define CF_DATA_CURRENT(cf) \
+ ((cf)? (CF_CTX_CALL_DATA(cf).data) : NULL)
+
+#endif /* HEADER_CURL_CFILTERS_H */
diff --git a/lib/config-amigaos.h b/lib/config-amigaos.h
index b7356c762..d168b446b 100644
--- a/lib/config-amigaos.h
+++ b/lib/config-amigaos.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -32,8 +32,6 @@
#define HAVE_ARPA_INET_H 1
#define HAVE_CLOSESOCKET_CAMEL 1
-#define HAVE_ERRNO_H 1
-#define HAVE_INTTYPES_H 1
#define HAVE_IOCTLSOCKET_CAMEL 1
#define HAVE_IOCTLSOCKET_CAMEL_FIONBIO 1
#define HAVE_LONGLONG 1
@@ -41,17 +39,13 @@
#define HAVE_NETINET_IN_H 1
#define HAVE_NET_IF_H 1
#define HAVE_PWD_H 1
-#define HAVE_RAND_EGD 1
#define HAVE_SELECT 1
-#define HAVE_SETJMP_H 1
#define HAVE_SIGNAL 1
-#define HAVE_SIGNAL_H 1
#define HAVE_SOCKET 1
#define HAVE_STRCASECMP 1
#define HAVE_STRDUP 1
#define HAVE_STRICMP 1
#define HAVE_STRINGS_H 1
-#define HAVE_STRING_H 1
#define HAVE_STRUCT_TIMEVAL 1
#define HAVE_SYS_PARAM_H 1
#define HAVE_SYS_SOCKET_H 1
@@ -59,7 +53,6 @@
#define HAVE_SYS_STAT_H 1
#define HAVE_SYS_TIME_H 1
#define HAVE_SYS_TYPES_H 1
-#define HAVE_TIME_H 1
#define HAVE_UNISTD_H 1
#define HAVE_UTIME 1
#define HAVE_UTIME_H 1
@@ -78,7 +71,9 @@
#define USE_MANUAL 1
#define CURL_DISABLE_LDAP 1
+#ifndef OS
#define OS "AmigaOS"
+#endif
#define PACKAGE "curl"
#define PACKAGE_BUGREPORT "a suitable mailing list: https://curl.se/mail/"
@@ -86,9 +81,16 @@
#define PACKAGE_STRING "curl -"
#define PACKAGE_TARNAME "curl"
#define PACKAGE_VERSION "-"
+
+#if defined(USE_AMISSL)
+#define CURL_CA_PATH "AmiSSL:Certs"
+#elif defined(__MORPHOS__)
+#define CURL_CA_BUNDLE "MOSSYS:Data/SSL/curl-ca-bundle.crt"
+#else
#define CURL_CA_BUNDLE "s:curl-ca-bundle.crt"
+#endif
+
#define STDC_HEADERS 1
-#define TIME_WITH_SYS_TIME 1
#define in_addr_t int
diff --git a/lib/config-dos.h b/lib/config-dos.h
index 8e3c940d9..c6fbba796 100644
--- a/lib/config-dos.h
+++ b/lib/config-dos.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -29,6 +29,7 @@
/* lib/config-dos.h - Hand crafted config file for DOS */
/* ================================================================ */
+#ifndef OS
#if defined(DJGPP)
#define OS "MSDOS/djgpp"
#elif defined(__HIGHC__)
@@ -36,12 +37,13 @@
#else
#define OS "MSDOS/?"
#endif
+#endif
#define PACKAGE "curl"
+#define USE_MANUAL 1
+
#define HAVE_ARPA_INET_H 1
-#define HAVE_ASSERT_H 1
-#define HAVE_ERRNO_H 1
#define HAVE_FCNTL_H 1
#define HAVE_FREEADDRINFO 1
#define HAVE_GETADDRINFO 1
@@ -56,11 +58,9 @@
#define HAVE_NETINET_IN_H 1
#define HAVE_NETINET_TCP_H 1
#define HAVE_NET_IF_H 1
-#define HAVE_PROCESS_H 1
#define HAVE_RECV 1
#define HAVE_SELECT 1
#define HAVE_SEND 1
-#define HAVE_SETJMP_H 1
#define HAVE_SETLOCALE 1
#define HAVE_SETMODE 1
#define HAVE_SIGNAL 1
@@ -73,7 +73,6 @@
#define HAVE_SYS_SOCKET_H 1
#define HAVE_SYS_STAT_H 1
#define HAVE_SYS_TYPES_H 1
-#define HAVE_TIME_H 1
#define HAVE_UNISTD_H 1
#define NEED_MALLOC_H 1
@@ -81,9 +80,8 @@
#define SIZEOF_INT 4
#define SIZEOF_LONG 4
#define SIZEOF_SIZE_T 4
-#define SIZEOF_CURL_OFF_T 4
+#define SIZEOF_CURL_OFF_T 8
#define STDC_HEADERS 1
-#define TIME_WITH_SYS_TIME 1
/* Qualifiers for send() and recv() */
@@ -105,10 +103,6 @@
/* CURLDEBUG definition enables memory tracking */
/* #define CURLDEBUG */
-#ifdef USE_ZLIB /* Deprecated. Use HAVE_LIBZ instead. */
- #define HAVE_LIBZ 1
-#endif
-
/* to disable LDAP */
#define CURL_DISABLE_LDAP 1
@@ -128,7 +122,6 @@
#define HAVE_SIGSETJMP 1
#define HAVE_SYS_TIME_H 1
#define HAVE_TERMIOS_H 1
- #define HAVE_VARIADIC_MACROS_GCC 1
#elif defined(__HIGHC__)
#define HAVE_SYS_TIME_H 1
diff --git a/lib/config-mac.h b/lib/config-mac.h
index ed07019e6..c29888f8f 100644
--- a/lib/config-mac.h
+++ b/lib/config-mac.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -30,15 +30,20 @@
/* On Mac OS X you must run configure to generate curl_config.h file */
/* =================================================================== */
+#ifndef OS
#define OS "mac"
+#endif
+
+#include <ConditionalMacros.h>
+#if TYPE_LONGLONG
+#define HAVE_LONGLONG 1
+#endif
/* Define if you want the built-in manual */
#define USE_MANUAL 1
-#define HAVE_ERRNO_H 1
#define HAVE_NETINET_IN_H 1
#define HAVE_SYS_SOCKET_H 1
-#define HAVE_SYS_SELECT_H 1
#define HAVE_NETDB_H 1
#define HAVE_ARPA_INET_H 1
#define HAVE_UNISTD_H 1
@@ -47,14 +52,10 @@
#define HAVE_GETTIMEOFDAY 1
#define HAVE_FCNTL_H 1
#define HAVE_SYS_STAT_H 1
-#define HAVE_STDLIB_H 1
-#define HAVE_TIME_H 1
#define HAVE_UTIME_H 1
#define HAVE_SYS_TIME_H 1
#define HAVE_SYS_UTIME_H 1
-
-#define TIME_WITH_SYS_TIME 1
-
+#define HAVE_SYS_IOCTL_H 1
#define HAVE_ALARM 1
#define HAVE_FTRUNCATE 1
#define HAVE_UTIME 1
@@ -63,7 +64,6 @@
#define HAVE_STRUCT_TIMEVAL 1
#define HAVE_SIGACTION 1
-#define HAVE_SIGNAL_H 1
#ifdef MACOS_SSL_SUPPORT
# define USE_OPENSSL 1
@@ -71,12 +71,16 @@
#define CURL_DISABLE_LDAP 1
-#define HAVE_RAND_EGD 1
-
#define HAVE_IOCTL_FIONBIO 1
#define SIZEOF_INT 4
+#define SIZEOF_LONG 4
#define SIZEOF_SIZE_T 4
+#ifdef HAVE_LONGLONG
+#define SIZEOF_CURL_OFF_T 8
+#else
+#define SIZEOF_CURL_OFF_T 4
+#endif
#define HAVE_RECV 1
#define RECV_TYPE_ARG1 int
@@ -89,7 +93,7 @@
#define SEND_TYPE_ARG1 int
#define SEND_QUAL_ARG2 const
#define SEND_TYPE_ARG2 void *
-#define SEND_TYPE_ARG3 size_T
+#define SEND_TYPE_ARG3 size_t
#define SEND_TYPE_ARG4 int
#define SEND_TYPE_RETV ssize_t
diff --git a/lib/config-os400.h b/lib/config-os400.h
index 2eef1a0c1..357a36458 100644
--- a/lib/config-os400.h
+++ b/lib/config-os400.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -36,7 +36,9 @@
#undef VERSION
/* Define cpu-machine-OS */
+#ifndef OS
#define OS "OS/400"
+#endif
/* OS400 supports a 3-argument ASCII version of gethostbyaddr_r(), but its
* prototype is incompatible with the "standard" one (1st argument is not
@@ -66,9 +68,6 @@
/* Define this as a suitable file to read random data from */
#undef RANDOM_FILE
-/* Define this to your Entropy Gathering Daemon socket pathname */
-#undef EGD_SOCKET
-
/* Define to 1 if you have the alarm function. */
#define HAVE_ALARM 1
@@ -78,9 +77,6 @@
/* Define if you have the `closesocket' function. */
#undef HAVE_CLOSESOCKET
-/* Define if you have the <errno.h> header file. */
-#define HAVE_ERRNO_H
-
/* Define if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H
@@ -108,9 +104,6 @@
/* Define if you have the `timeval' struct. */
#define HAVE_STRUCT_TIMEVAL
-/* Define if you have the <inttypes.h> header file. */
-#define HAVE_INTTYPES_H
-
/* Define if you have the <io.h> header file. */
#undef HAVE_IO_H
@@ -144,9 +137,6 @@
/* Define if you have the <pwd.h> header file. */
#define HAVE_PWD_H
-/* Define if you have the `RAND_egd' function. */
-#undef HAVE_RAND_EGD
-
/* Define if you have the `select' function. */
#define HAVE_SELECT
@@ -156,21 +146,9 @@
/* Define if you have the `signal' function. */
#undef HAVE_SIGNAL
-/* Define if you have the <signal.h> header file. */
-#define HAVE_SIGNAL_H
-
/* Define if you have the `socket' function. */
#define HAVE_SOCKET
-/* Define if you have the <ssl.h> header file. */
-#undef HAVE_SSL_H
-
-/* Define if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H
-
/* The following define is needed on OS400 to enable strcmpi(), stricmp() and
strdup(). */
@@ -191,9 +169,6 @@
/* Define if you have the <strings.h> header file. */
#define HAVE_STRINGS_H
-/* Define if you have the <string.h> header file. */
-#define HAVE_STRING_H
-
/* Define if you have the <stropts.h> header file. */
#undef HAVE_STROPTS_H
@@ -236,9 +211,6 @@
/* Define if you have the <termio.h> header file. */
#undef HAVE_TERMIO_H
-/* Define if you have the <time.h> header file. */
-#define HAVE_TIME_H
-
/* Define if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H
@@ -269,9 +241,6 @@
/* Define if you have the ANSI C header files. */
#define STDC_HEADERS
-/* Define if you can safely include both <sys/time.h> and <time.h>. */
-#define TIME_WITH_SYS_TIME
-
/* Define to enable HTTP3 support (experimental, requires NGTCP2, QUICHE or
MSH3) */
#undef ENABLE_QUIC
@@ -348,9 +317,6 @@
/* Define to the function return type for send. */
#define SEND_TYPE_RETV int
-/* Define to use the GSKit package. */
-#define USE_GSKIT
-
/* Define to use the OS/400 crypto library. */
#define USE_OS400CRYPTO
diff --git a/lib/config-plan9.h b/lib/config-plan9.h
index 49a719c1a..aa9623f92 100644
--- a/lib/config-plan9.h
+++ b/lib/config-plan9.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -32,7 +32,9 @@
#define CURL_DISABLE_LDAP 1
#define NEED_REENTRANT 1
+#ifndef OS
#define OS "plan9"
+#endif
#define PACKAGE "curl"
#define PACKAGE_NAME "curl"
#define PACKAGE_BUGREPORT "a suitable mailing list: https://curl.se/mail/"
@@ -74,10 +76,8 @@
#define HAVE_ALARM 1
#define HAVE_ARPA_INET_H 1
-#define HAVE_ASSERT_H 1
#define HAVE_BASENAME 1
#define HAVE_BOOL_T 1
-#define HAVE_ERRNO_H 1
#define HAVE_FCNTL 1
#define HAVE_FCNTL_H 1
#define HAVE_FREEADDRINFO 1
@@ -91,7 +91,6 @@
#define HAVE_GMTIME_R 1
#define HAVE_INET_NTOP 1
#define HAVE_INET_PTON 1
-#define HAVE_INTTYPES_H 1
#define HAVE_LIBGEN_H 1
#define HAVE_LIBZ 1
#define HAVE_LOCALE_H 1
@@ -108,22 +107,17 @@
#define HAVE_POLL_FINE 1
#define HAVE_POLL_H 1
#define HAVE_PTHREAD_H 1
-#define HAVE_SETJMP_H 1
#define HAVE_SETLOCALE 1
#define HAVE_SIGACTION 1
#define HAVE_SIGNAL 1
-#define HAVE_SIGNAL_H 1
#define HAVE_SIGSETJMP 1
#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
#define HAVE_SOCKET 1
#define HAVE_SSL_GET_SHUTDOWN 1
#define HAVE_STDBOOL_H 1
-#define HAVE_STDINT_H 1
-#define HAVE_STDLIB_H 1
#define HAVE_STRCASECMP 1
#define HAVE_STRDUP 1
-#define HAVE_STRING_H 1
#define HAVE_STRTOK_R 1
#define HAVE_STRTOLL 1
#define HAVE_STRUCT_TIMEVAL 1
@@ -136,15 +130,12 @@
#define HAVE_SYS_TYPES_H 1
#define HAVE_SYS_UN_H 1
#define HAVE_TERMIOS_H 1
-#define HAVE_TIME_H 1
#define HAVE_UNISTD_H 1
#define HAVE_UTIME 1
#define HAVE_UTIME_H 1
#define HAVE_POSIX_STRERROR_R 1
#define HAVE_STRERROR_R 1
-
-#define TIME_WITH_SYS_TIME 1
#define USE_MANUAL 1
#define __attribute__(x)
diff --git a/lib/config-riscos.h b/lib/config-riscos.h
index d6c81f3eb..f3a8e6832 100644
--- a/lib/config-riscos.h
+++ b/lib/config-riscos.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -35,7 +35,9 @@
#undef VERSION
/* Define cpu-machine-OS */
+#ifndef OS
#define OS "ARM-RISC OS"
+#endif
/* Define if you want the built-in manual */
#define USE_MANUAL
@@ -64,9 +66,6 @@
/* Define this as a suitable file to read random data from */
#undef RANDOM_FILE
-/* Define this to your Entropy Gathering Daemon socket pathname */
-#undef EGD_SOCKET
-
/* Define if you want to enable IPv6 support */
#undef ENABLE_IPV6
@@ -79,9 +78,6 @@
/* Define if you have the `closesocket' function. */
#undef HAVE_CLOSESOCKET
-/* Define if you have the <errno.h> header file. */
-#define HAVE_ERRNO_H
-
/* Define if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H
@@ -112,9 +108,6 @@
/* Define if you have the `timeval' struct. */
#define HAVE_STRUCT_TIMEVAL
-/* Define if you have the <inttypes.h> header file. */
-#define HAVE_INTTYPES_H
-
/* Define if you have the <io.h> header file. */
#undef HAVE_IO_H
@@ -136,9 +129,6 @@
/* Define if you have the <pwd.h> header file. */
#undef HAVE_PWD_H
-/* Define if you have the `RAND_egd' function. */
-#undef HAVE_RAND_EGD
-
/* Define if you have the `select' function. */
#define HAVE_SELECT
@@ -148,21 +138,9 @@
/* Define if you have the `signal' function. */
#define HAVE_SIGNAL
-/* Define if you have the <signal.h> header file. */
-#define HAVE_SIGNAL_H
-
/* Define if you have the `socket' function. */
#define HAVE_SOCKET
-/* Define if you have the <ssl.h> header file. */
-#undef HAVE_SSL_H
-
-/* Define if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H
-
/* Define if you have the `strcasecmp' function. */
#undef HAVE_STRCASECMP
@@ -178,9 +156,6 @@
/* Define if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
-/* Define if you have the <string.h> header file. */
-#define HAVE_STRING_H
-
/* Define if you have the `strtok_r' function. */
#undef HAVE_STRTOK_R
@@ -214,9 +189,6 @@
/* Define if you have the <termio.h> header file. */
#undef HAVE_TERMIO_H
-/* Define if you have the <time.h> header file. */
-#undef HAVE_TIME_H
-
/* Define if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H
@@ -235,9 +207,6 @@
/* Define if you have the ANSI C header files. */
#undef STDC_HEADERS
-/* Define if you can safely include both <sys/time.h> and <time.h>. */
-#undef TIME_WITH_SYS_TIME
-
/* Version number of package */
#undef VERSION
diff --git a/lib/config-win32.h b/lib/config-win32.h
index 00e8663d2..7b8a289bc 100644
--- a/lib/config-win32.h
+++ b/lib/config-win32.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -35,20 +35,9 @@
/* Define if you have the <arpa/inet.h> header file. */
/* #define HAVE_ARPA_INET_H 1 */
-/* Define if you have the <assert.h> header file. */
-#define HAVE_ASSERT_H 1
-
-/* Define if you have the <errno.h> header file. */
-#define HAVE_ERRNO_H 1
-
/* Define if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1
-/* Define to 1 if you have the <inttypes.h> header file. */
-#if defined(_MSC_VER) && (_MSC_VER >= 1800)
-#define HAVE_INTTYPES_H 1
-#endif
-
/* Define if you have the <io.h> header file. */
#define HAVE_IO_H 1
@@ -56,9 +45,7 @@
#define HAVE_LOCALE_H 1
/* Define if you need <malloc.h> header even with <stdlib.h> header file. */
-#if !defined(__SALFORDC__) && !defined(__POCC__)
#define NEED_MALLOC_H 1
-#endif
/* Define if you have the <netdb.h> header file. */
/* #define HAVE_NETDB_H 1 */
@@ -66,28 +53,15 @@
/* Define if you have the <netinet/in.h> header file. */
/* #define HAVE_NETINET_IN_H 1 */
-/* Define if you have the <process.h> header file. */
-#ifndef __SALFORDC__
-#define HAVE_PROCESS_H 1
-#endif
-
-/* Define if you have the <signal.h> header file. */
-#define HAVE_SIGNAL_H 1
-
-/* Define if you have the <ssl.h> header file. */
-/* #define HAVE_SSL_H 1 */
-
/* Define to 1 if you have the <stdbool.h> header file. */
-#if (defined(_MSC_VER) && (_MSC_VER >= 1800)) || \
- defined(__MINGW64_VERSION_MAJOR)
+#if (defined(_MSC_VER) && (_MSC_VER >= 1800)) || defined(__MINGW32__)
#define HAVE_STDBOOL_H 1
#endif
-/* Define if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
/* Define if you have the <sys/param.h> header file. */
-/* #define HAVE_SYS_PARAM_H 1 */
+#if defined(__MINGW32__)
+#define HAVE_SYS_PARAM_H 1
+#endif
/* Define if you have the <sys/select.h> header file. */
/* #define HAVE_SYS_SELECT_H 1 */
@@ -102,15 +76,15 @@
#define HAVE_SYS_STAT_H 1
/* Define if you have the <sys/time.h> header file. */
-/* #define HAVE_SYS_TIME_H 1 */
+#if defined(__MINGW32__)
+#define HAVE_SYS_TIME_H 1
+#endif
/* Define if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1
/* Define if you have the <sys/utime.h> header file. */
-#ifndef __BORLANDC__
#define HAVE_SYS_UTIME_H 1
-#endif
/* Define if you have the <termio.h> header file. */
/* #define HAVE_TERMIO_H 1 */
@@ -118,11 +92,8 @@
/* Define if you have the <termios.h> header file. */
/* #define HAVE_TERMIOS_H 1 */
-/* Define if you have the <time.h> header file. */
-#define HAVE_TIME_H 1
-
/* Define if you have the <unistd.h> header file. */
-#if defined(__MINGW32__) || defined(__LCC__) || defined(__POCC__)
+#if defined(__MINGW32__)
#define HAVE_UNISTD_H 1
#endif
@@ -130,23 +101,13 @@
#define HAVE_WINDOWS_H 1
/* Define if you have the <winsock2.h> header file. */
-#ifndef __SALFORDC__
#define HAVE_WINSOCK2_H 1
-#endif
/* Define if you have the <ws2tcpip.h> header file. */
-#ifndef __SALFORDC__
#define HAVE_WS2TCPIP_H 1
-#endif
-
-/* Define to 1 if you have the <setjmp.h> header file. */
-#define HAVE_SETJMP_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
/* Define to 1 if you have the <libgen.h> header file. */
-#if defined(__MINGW64_VERSION_MAJOR)
+#if defined(__MINGW32__)
#define HAVE_LIBGEN_H 1
#endif
@@ -157,12 +118,8 @@
/* Define if you have the ANSI C header files. */
#define STDC_HEADERS 1
-/* Define if you can safely include both <sys/time.h> and <time.h>. */
-/* #define TIME_WITH_SYS_TIME 1 */
-
/* Define to 1 if bool is an available type. */
-#if (defined(_MSC_VER) && (_MSC_VER >= 1800)) || \
- defined(__MINGW64_VERSION_MAJOR)
+#if (defined(_MSC_VER) && (_MSC_VER >= 1800)) || defined(__MINGW32__)
#define HAVE_BOOL_T 1
#endif
@@ -174,7 +131,7 @@
#define HAVE_CLOSESOCKET 1
/* Define if you have the ftruncate function. */
-#if defined(__MINGW64_VERSION_MAJOR)
+#if defined(__MINGW32__)
#define HAVE_FTRUNCATE 1
#endif
@@ -188,7 +145,9 @@
#define HAVE_GETHOSTNAME 1
/* Define if you have the gettimeofday function. */
-/* #define HAVE_GETTIMEOFDAY 1 */
+#if defined(__MINGW32__)
+#define HAVE_GETTIMEOFDAY 1
+#endif
/* Define if you have the ioctlsocket function. */
#define HAVE_IOCTLSOCKET 1
@@ -209,7 +168,7 @@
#define HAVE_SOCKET 1
/* Define if you have the strcasecmp function. */
-#ifdef __MINGW32__
+#if defined(__MINGW32__)
#define HAVE_STRCASECMP 1
#endif
@@ -220,15 +179,12 @@
#define HAVE_STRICMP 1
/* Define if you have the strtoll function. */
-#if defined(__MINGW32__) || defined(__POCC__) || \
- (defined(_MSC_VER) && (_MSC_VER >= 1800))
+#if (defined(_MSC_VER) && (_MSC_VER >= 1800)) || defined(__MINGW32__)
#define HAVE_STRTOLL 1
#endif
/* Define if you have the utime function. */
-#ifndef __BORLANDC__
#define HAVE_UTIME 1
-#endif
/* Define if you have the recv function. */
#define HAVE_RECV 1
@@ -270,7 +226,7 @@
#define SEND_TYPE_RETV int
/* Define to 1 if you have the snprintf function. */
-#if defined(_MSC_VER) && (_MSC_VER >= 1900)
+#if (defined(_MSC_VER) && (_MSC_VER >= 1900)) || defined(__MINGW32__)
#define HAVE_SNPRINTF 1
#endif
@@ -282,12 +238,12 @@
#endif
/* Define to 1 if you have the `basename' function. */
-#if defined(__MINGW64_VERSION_MAJOR)
+#if defined(__MINGW32__)
#define HAVE_BASENAME 1
#endif
/* Define to 1 if you have the strtok_r function. */
-#if defined(__MINGW64_VERSION_MAJOR)
+#if defined(__MINGW32__)
#define HAVE_STRTOK_R 1
#endif
@@ -303,7 +259,7 @@
/* Define if ssize_t is not an available 'typedefed' type. */
#ifndef _SSIZE_T_DEFINED
-# if defined(__POCC__) || defined(__MINGW32__)
+# if defined(__MINGW32__)
# elif defined(_WIN64)
# define _SSIZE_T_DEFINED
# define ssize_t __int64
@@ -336,11 +292,6 @@
/* Define to the size of `curl_off_t', as computed by sizeof. */
#define SIZEOF_CURL_OFF_T 8
-/* Define to the size of `off_t', as computed by sizeof. */
-#ifndef SIZEOF_OFF_T
-#define SIZEOF_OFF_T 8
-#endif
-
/* ---------------------------------------------------------------- */
/* BSD-style lwIP TCP/IP stack SPECIFIC */
/* ---------------------------------------------------------------- */
@@ -352,15 +303,12 @@
# undef USE_WINSOCK
# undef HAVE_WINSOCK2_H
# undef HAVE_WS2TCPIP_H
-# undef HAVE_ERRNO_H
# undef HAVE_GETHOSTNAME
# undef LWIP_POSIX_SOCKETS_IO_NAMES
# undef RECV_TYPE_ARG1
# undef RECV_TYPE_ARG3
# undef SEND_TYPE_ARG1
# undef SEND_TYPE_ARG3
-# define HAVE_FREEADDRINFO
-# define HAVE_GETADDRINFO
# define HAVE_GETHOSTBYNAME_R
# define HAVE_GETHOSTBYNAME_R_6
# define LWIP_POSIX_SOCKETS_IO_NAMES 0
@@ -381,13 +329,11 @@
#undef USE_WINSOCK
#undef HAVE_WINSOCK2_H
#undef HAVE_WS2TCPIP_H
- #define HAVE_GETADDRINFO
#define HAVE_SYS_IOCTL_H
#define HAVE_SYS_SOCKET_H
#define HAVE_NETINET_IN_H
#define HAVE_NETDB_H
#define HAVE_ARPA_INET_H
- #define HAVE_FREEADDRINFO
#define SOCKET int
#endif
@@ -405,15 +351,8 @@
/* Windows should not have HAVE_GMTIME_R defined */
/* #undef HAVE_GMTIME_R */
-/* Define if the compiler supports C99 variadic macro style. */
-#if defined(_MSC_VER) && (_MSC_VER >= 1400)
-#define HAVE_VARIADIC_MACROS_C99 1
-#endif
-
/* Define if the compiler supports the 'long long' data type. */
-#if defined(__MINGW32__) || \
- (defined(_MSC_VER) && (_MSC_VER >= 1310)) || \
- (defined(__BORLANDC__) && (__BORLANDC__ >= 0x561))
+#if (defined(_MSC_VER) && (_MSC_VER >= 1310)) || defined(__MINGW32__)
#define HAVE_LONGLONG 1
#endif
@@ -423,11 +362,9 @@
#define _CRT_NONSTDC_NO_DEPRECATE 1
#endif
-/* mingw-w64, mingw using >= MSVCR80, and visual studio >= 2005 (MSVCR80)
+/* mingw-w64 and visual studio >= 2005 (MSVCR80)
all default to 64-bit time_t unless _USE_32BIT_TIME_T is defined */
-#if defined(__MINGW64_VERSION_MAJOR) || \
- (defined(__MINGW32__) && (__MSVCRT_VERSION__ >= 0x0800)) || \
- (defined(_MSC_VER) && (_MSC_VER >= 1400))
+#if (defined(_MSC_VER) && (_MSC_VER >= 1400)) || defined(__MINGW32__)
# ifndef _USE_32BIT_TIME_T
# define SIZEOF_TIME_T 8
# else
@@ -497,53 +434,17 @@ Vista
# endif
#endif
-/* When no build target is specified Pelles C 5.00 and later default build
- target is Windows Vista. We override default target to be Windows 2000. */
-#if defined(__POCC__) && (__POCC__ >= 500)
-# ifndef _WIN32_WINNT
-# define _WIN32_WINNT 0x0500
-# endif
-# ifndef WINVER
-# define WINVER 0x0500
-# endif
-#endif
-
-/* Availability of freeaddrinfo, getaddrinfo, and if_nametoindex
- functions is quite convoluted, compiler dependent and even build target
- dependent. */
-#if defined(HAVE_WS2TCPIP_H)
-# if defined(__POCC__)
-# define HAVE_FREEADDRINFO 1
-# define HAVE_GETADDRINFO 1
-# define HAVE_GETADDRINFO_THREADSAFE 1
-# elif defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0501)
-# define HAVE_FREEADDRINFO 1
-# define HAVE_GETADDRINFO 1
-# define HAVE_GETADDRINFO_THREADSAFE 1
-# elif defined(_MSC_VER) && (_MSC_VER >= 1200)
-# define HAVE_FREEADDRINFO 1
-# define HAVE_GETADDRINFO 1
-# define HAVE_GETADDRINFO_THREADSAFE 1
-# endif
-#endif
-
-#if defined(__POCC__)
-# ifndef _MSC_VER
-# error Microsoft extensions /Ze compiler option is required
-# endif
-# ifndef __POCC__OLDNAMES
-# error Compatibility names /Go compiler option is required
-# endif
-#endif
+/* Windows XP is required for freeaddrinfo, getaddrinfo */
+#define HAVE_FREEADDRINFO 1
+#define HAVE_GETADDRINFO 1
+#define HAVE_GETADDRINFO_THREADSAFE 1
/* ---------------------------------------------------------------- */
/* STRUCT RELATED */
/* ---------------------------------------------------------------- */
/* Define if you have struct sockaddr_storage. */
-#if !defined(__SALFORDC__) && !defined(__BORLANDC__)
#define HAVE_STRUCT_SOCKADDR_STORAGE 1
-#endif
/* Define if you have struct timeval. */
#define HAVE_STRUCT_TIMEVAL 1
@@ -567,21 +468,29 @@ Vista
# define USE_WIN32_LARGE_FILES
#endif
-#if defined(__POCC__)
-# undef USE_WIN32_LARGE_FILES
-#endif
-
#if !defined(USE_WIN32_LARGE_FILES) && !defined(USE_WIN32_SMALL_FILES)
# define USE_WIN32_SMALL_FILES
#endif
/* Number of bits in a file offset, on hosts where this is settable. */
-#if defined(USE_WIN32_LARGE_FILES) && defined(__MINGW64_VERSION_MAJOR)
+#if defined(USE_WIN32_LARGE_FILES) && defined(__MINGW32__)
# ifndef _FILE_OFFSET_BITS
# define _FILE_OFFSET_BITS 64
# endif
#endif
+#ifdef USE_WIN32_LARGE_FILES
+#define HAVE__FSEEKI64
+#endif
+
+/* Define to the size of `off_t', as computed by sizeof. */
+#if defined(__MINGW32__) && \
+ defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
+# define SIZEOF_OFF_T 8
+#else
+# define SIZEOF_OFF_T 4
+#endif
+
/* ---------------------------------------------------------------- */
/* DNS RESOLVER SPECIALTY */
/* ---------------------------------------------------------------- */
@@ -620,10 +529,6 @@ Vista
#define USE_WIN32_LDAP 1
#endif
-#if defined(__POCC__) && defined(USE_WIN32_LDAP)
-# define CURL_DISABLE_LDAP 1
-#endif
-
/* Define to use the Windows crypto library. */
#if !defined(CURL_WINDOWS_APP)
#define USE_WIN32_CRYPTO
@@ -637,7 +542,7 @@ Vista
/* ---------------------------------------------------------------- */
/* Define cpu-machine-OS */
-#if !defined(OS)
+#ifndef OS
#if defined(_M_IX86) || defined(__i386__) /* x86 (MSVC or gcc) */
#define OS "i386-pc-win32"
#elif defined(_M_X64) || defined(__x86_64__) /* x86_64 (MSVC >=2005 or gcc) */
@@ -659,7 +564,7 @@ Vista
/* If you want to build curl with the built-in manual */
#define USE_MANUAL 1
-#if defined(__POCC__) || defined(USE_IPV6)
+#if defined(USE_IPV6)
# define ENABLE_IPV6 1
#endif
diff --git a/lib/config-win32ce.h b/lib/config-win32ce.h
index 308bfe9e0..e0db57fd0 100644
--- a/lib/config-win32ce.h
+++ b/lib/config-win32ce.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -35,12 +35,6 @@
/* Define if you have the <arpa/inet.h> header file. */
/* #define HAVE_ARPA_INET_H 1 */
-/* Define if you have the <assert.h> header file. */
-/* #define HAVE_ASSERT_H 1 */
-
-/* Define if you have the <errno.h> header file. */
-/* #define HAVE_ERRNO_H 1 */
-
/* Define if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1
@@ -56,18 +50,6 @@
/* Define if you have the <netinet/in.h> header file. */
/* #define HAVE_NETINET_IN_H 1 */
-/* Define if you have the <signal.h> header file. */
-#define HAVE_SIGNAL_H 1
-
-/* Define if you have the <ssl.h> header file. */
-/* #define HAVE_SSL_H 1 */
-
-/* Define if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define if you have the <process.h> header file. */
-/* #define HAVE_PROCESS_H 1 */
-
/* Define if you have the <sys/param.h> header file. */
/* #define HAVE_SYS_PARAM_H 1 */
@@ -98,11 +80,8 @@
/* Define if you have the <termios.h> header file. */
/* #define HAVE_TERMIOS_H 1 */
-/* Define if you have the <time.h> header file. */
-#define HAVE_TIME_H 1
-
/* Define if you have the <unistd.h> header file. */
-#if defined(__MINGW32__) || defined(__LCC__)
+#if defined(__MINGW32__)
#define HAVE_UNISTD_H 1
#endif
@@ -122,9 +101,6 @@
/* Define if you have the ANSI C header files. */
#define STDC_HEADERS 1
-/* Define if you can safely include both <sys/time.h> and <time.h>. */
-/* #define TIME_WITH_SYS_TIME 1 */
-
/* ---------------------------------------------------------------- */
/* FUNCTIONS */
/* ---------------------------------------------------------------- */
@@ -214,8 +190,7 @@
#define in_addr_t unsigned long
/* Define ssize_t if it is not an available 'typedefed' type */
-#if defined(__POCC__)
-#elif defined(_WIN64)
+#if defined(_WIN64)
#define ssize_t __int64
#else
#define ssize_t int
@@ -305,8 +280,9 @@
/* ---------------------------------------------------------------- */
/* Define cpu-machine-OS */
-#undef OS
+#ifndef OS
#define OS "i386-pc-win32ce"
+#endif
/* Name of package */
#define PACKAGE "curl"
diff --git a/lib/conncache.c b/lib/conncache.c
index a557ac6dc..66f18ecb8 100644
--- a/lib/conncache.c
+++ b/lib/conncache.c
@@ -5,8 +5,8 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2012 - 2016, Linus Nielsen Feltzing, <linus@haxx.se>
- * Copyright (C) 2012 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Linus Nielsen Feltzing, <linus@haxx.se>
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -45,13 +45,6 @@
#define HASHKEY_SIZE 128
-static void conn_llist_dtor(void *user, void *element)
-{
- struct connectdata *conn = element;
- (void)user;
- conn->bundle = NULL;
-}
-
static CURLcode bundle_create(struct connectbundle **bundlep)
{
DEBUGASSERT(*bundlep == NULL);
@@ -62,17 +55,12 @@ static CURLcode bundle_create(struct connectbundle **bundlep)
(*bundlep)->num_connections = 0;
(*bundlep)->multiuse = BUNDLE_UNKNOWN;
- Curl_llist_init(&(*bundlep)->conn_list, (Curl_llist_dtor) conn_llist_dtor);
+ Curl_llist_init(&(*bundlep)->conn_list, NULL);
return CURLE_OK;
}
static void bundle_destroy(struct connectbundle *bundle)
{
- if(!bundle)
- return;
-
- Curl_llist_destroy(&bundle->conn_list, NULL);
-
free(bundle);
}
@@ -119,6 +107,7 @@ int Curl_conncache_init(struct conncache *connc, int size)
connc->closure_handle = curl_easy_init();
if(!connc->closure_handle)
return 1; /* bad */
+ connc->closure_handle->state.internal = true;
Curl_hash_init(&connc->hash, size, Curl_hash_str,
Curl_str_key_compare, free_bundle_hash_entry);
@@ -254,11 +243,11 @@ CURLcode Curl_conncache_add_conn(struct Curl_easy *data)
conn->connection_id = connc->next_connection_id++;
connc->num_conn++;
- DEBUGF(infof(data, "Added connection %ld. "
+ DEBUGF(infof(data, "Added connection %" CURL_FORMAT_CURL_OFF_T ". "
"The cache now contains %zu members",
conn->connection_id, connc->num_conn));
- unlock:
+unlock:
CONNCACHE_UNLOCK(data);
return result;
@@ -390,21 +379,26 @@ conncache_find_first_connection(struct conncache *connc)
bool Curl_conncache_return_conn(struct Curl_easy *data,
struct connectdata *conn)
{
- /* data->multi->maxconnects can be negative, deal with it. */
- size_t maxconnects =
- (data->multi->maxconnects < 0) ? data->multi->num_easy * 4:
- data->multi->maxconnects;
+ unsigned int maxconnects = !data->multi->maxconnects ?
+ data->multi->num_easy * 4: data->multi->maxconnects;
struct connectdata *conn_candidate = NULL;
conn->lastused = Curl_now(); /* it was used up until now */
- if(maxconnects > 0 &&
- Curl_conncache_size(data) > maxconnects) {
+ if(maxconnects && Curl_conncache_size(data) > maxconnects) {
infof(data, "Connection cache is full, closing the oldest one");
conn_candidate = Curl_conncache_extract_oldest(data);
if(conn_candidate) {
- /* the winner gets the honour of being disconnected */
- Curl_disconnect(data, conn_candidate, /* dead_connection */ FALSE);
+ /* Use the closure handle for this disconnect so that anything that
+ happens during the disconnect is not stored and associated with the
+ 'data' handle which already just finished a transfer and it is
+ important that details from this (unrelated) disconnect does not
+ taint meta-data in the data handle. */
+ struct conncache *connc = data->state.conn_cache;
+ connc->closure_handle->state.buffer = data->state.buffer;
+ connc->closure_handle->set.buffer_size = data->set.buffer_size;
+ Curl_disconnect(connc->closure_handle, conn_candidate,
+ /* dead_connection */ FALSE);
}
}
diff --git a/lib/conncache.h b/lib/conncache.h
index 94664bc35..c60f8449e 100644
--- a/lib/conncache.h
+++ b/lib/conncache.h
@@ -7,8 +7,8 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2015 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- * Copyright (C) 2012 - 2014, Linus Nielsen Feltzing, <linus@haxx.se>
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Linus Nielsen Feltzing, <linus@haxx.se>
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -39,7 +39,8 @@ struct connectdata;
struct conncache {
struct Curl_hash hash;
size_t num_conn;
- long next_connection_id;
+ curl_off_t next_connection_id;
+ curl_off_t next_easy_id;
struct curltime last_cleanup;
/* handle used for closing cached connections */
struct Curl_easy *closure_handle;
diff --git a/lib/connect.c b/lib/connect.c
index ac007c61b..ec5ab71d4 100644
--- a/lib/connect.c
+++ b/lib/connect.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -48,13 +48,6 @@
#include <arpa/inet.h>
#endif
-#if (defined(HAVE_IOCTL_FIONBIO) && defined(NETWARE))
-#include <sys/filio.h>
-#endif
-#ifdef NETWARE
-#undef in_addr_t
-#define in_addr_t unsigned long
-#endif
#ifdef __VMS
#include <in.h>
#include <inet.h>
@@ -64,21 +57,26 @@
#include "sendf.h"
#include "if2ip.h"
#include "strerror.h"
+#include "cfilters.h"
#include "connect.h"
+#include "cf-haproxy.h"
+#include "cf-https-connect.h"
+#include "cf-socket.h"
#include "select.h"
#include "url.h" /* for Curl_safefree() */
#include "multiif.h"
#include "sockaddr.h" /* required for Curl_sockaddr_storage */
#include "inet_ntop.h"
#include "inet_pton.h"
-#include "vtls/vtls.h" /* for Curl_ssl_check_cxn() */
+#include "vtls/vtls.h" /* for vtsl cfilters */
#include "progress.h"
#include "warnless.h"
#include "conncache.h"
#include "multihandle.h"
#include "share.h"
#include "version_win32.h"
-#include "quic.h"
+#include "vquic/vquic.h" /* for quic cfilters */
+#include "http_proxy.h"
#include "socks.h"
/* The last 3 #include files should be in this order */
@@ -86,86 +84,9 @@
#include "curl_memory.h"
#include "memdebug.h"
-static bool verifyconnect(curl_socket_t sockfd, int *error);
-
-#if defined(__DragonFly__) || defined(HAVE_WINSOCK2_H)
-/* DragonFlyBSD and Windows use millisecond units */
-#define KEEPALIVE_FACTOR(x) (x *= 1000)
-#else
-#define KEEPALIVE_FACTOR(x)
-#endif
-
-#if defined(HAVE_WINSOCK2_H) && !defined(SIO_KEEPALIVE_VALS)
-#define SIO_KEEPALIVE_VALS _WSAIOW(IOC_VENDOR,4)
-
-struct tcp_keepalive {
- u_long onoff;
- u_long keepalivetime;
- u_long keepaliveinterval;
-};
-#endif
-
-static void
-tcpkeepalive(struct Curl_easy *data,
- curl_socket_t sockfd)
-{
- int optval = data->set.tcp_keepalive?1:0;
-
- /* only set IDLE and INTVL if setting KEEPALIVE is successful */
- if(setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE,
- (void *)&optval, sizeof(optval)) < 0) {
- infof(data, "Failed to set SO_KEEPALIVE on fd %d", sockfd);
- }
- else {
-#if defined(SIO_KEEPALIVE_VALS)
- struct tcp_keepalive vals;
- DWORD dummy;
- vals.onoff = 1;
- optval = curlx_sltosi(data->set.tcp_keepidle);
- KEEPALIVE_FACTOR(optval);
- vals.keepalivetime = optval;
- optval = curlx_sltosi(data->set.tcp_keepintvl);
- KEEPALIVE_FACTOR(optval);
- vals.keepaliveinterval = optval;
- if(WSAIoctl(sockfd, SIO_KEEPALIVE_VALS, (LPVOID) &vals, sizeof(vals),
- NULL, 0, &dummy, NULL, NULL) != 0) {
- infof(data, "Failed to set SIO_KEEPALIVE_VALS on fd %d: %d",
- (int)sockfd, WSAGetLastError());
- }
-#else
-#ifdef TCP_KEEPIDLE
- optval = curlx_sltosi(data->set.tcp_keepidle);
- KEEPALIVE_FACTOR(optval);
- if(setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPIDLE,
- (void *)&optval, sizeof(optval)) < 0) {
- infof(data, "Failed to set TCP_KEEPIDLE on fd %d", sockfd);
- }
-#elif defined(TCP_KEEPALIVE)
- /* Mac OS X style */
- optval = curlx_sltosi(data->set.tcp_keepidle);
- KEEPALIVE_FACTOR(optval);
- if(setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPALIVE,
- (void *)&optval, sizeof(optval)) < 0) {
- infof(data, "Failed to set TCP_KEEPALIVE on fd %d", sockfd);
- }
-#endif
-#ifdef TCP_KEEPINTVL
- optval = curlx_sltosi(data->set.tcp_keepintvl);
- KEEPALIVE_FACTOR(optval);
- if(setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPINTVL,
- (void *)&optval, sizeof(optval)) < 0) {
- infof(data, "Failed to set TCP_KEEPINTVL on fd %d", sockfd);
- }
-#endif
+#ifndef ARRAYSIZE
+#define ARRAYSIZE(A) (sizeof(A)/sizeof((A)[0]))
#endif
- }
-}
-
-static CURLcode
-singleipconnect(struct Curl_easy *data,
- struct connectdata *conn,
- const struct Curl_addrinfo *ai, /* start connecting to this */
- int tempindex); /* 0 or 1 among the temp ones */
/*
* Curl_timeleft() returns the amount of milliseconds left allowed for the
@@ -237,383 +158,6 @@ timediff_t Curl_timeleft(struct Curl_easy *data,
return timeout_ms;
}
-static CURLcode bindlocal(struct Curl_easy *data,
- curl_socket_t sockfd, int af, unsigned int scope)
-{
- struct connectdata *conn = data->conn;
- struct Curl_sockaddr_storage sa;
- struct sockaddr *sock = (struct sockaddr *)&sa; /* bind to this address */
- curl_socklen_t sizeof_sa = 0; /* size of the data sock points to */
- struct sockaddr_in *si4 = (struct sockaddr_in *)&sa;
-#ifdef ENABLE_IPV6
- struct sockaddr_in6 *si6 = (struct sockaddr_in6 *)&sa;
-#endif
-
- struct Curl_dns_entry *h = NULL;
- unsigned short port = data->set.localport; /* use this port number, 0 for
- "random" */
- /* how many port numbers to try to bind to, increasing one at a time */
- int portnum = data->set.localportrange;
- const char *dev = data->set.str[STRING_DEVICE];
- int error;
-#ifdef IP_BIND_ADDRESS_NO_PORT
- int on = 1;
-#endif
-#ifndef ENABLE_IPV6
- (void)scope;
-#endif
-
- /*************************************************************
- * Select device to bind socket to
- *************************************************************/
- if(!dev && !port)
- /* no local kind of binding was requested */
- return CURLE_OK;
-
- memset(&sa, 0, sizeof(struct Curl_sockaddr_storage));
-
- if(dev && (strlen(dev)<255) ) {
- char myhost[256] = "";
- int done = 0; /* -1 for error, 1 for address found */
- bool is_interface = FALSE;
- bool is_host = FALSE;
- static const char *if_prefix = "if!";
- static const char *host_prefix = "host!";
-
- if(strncmp(if_prefix, dev, strlen(if_prefix)) == 0) {
- dev += strlen(if_prefix);
- is_interface = TRUE;
- }
- else if(strncmp(host_prefix, dev, strlen(host_prefix)) == 0) {
- dev += strlen(host_prefix);
- is_host = TRUE;
- }
-
- /* interface */
- if(!is_host) {
-#ifdef SO_BINDTODEVICE
- /* I am not sure any other OSs than Linux that provide this feature,
- * and at the least I cannot test. --Ben
- *
- * This feature allows one to tightly bind the local socket to a
- * particular interface. This will force even requests to other
- * local interfaces to go out the external interface.
- *
- *
- * Only bind to the interface when specified as interface, not just
- * as a hostname or ip address.
- *
- * interface might be a VRF, eg: vrf-blue, which means it cannot be
- * converted to an IP address and would fail Curl_if2ip. Simply try
- * to use it straight away.
- */
- if(setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE,
- dev, (curl_socklen_t)strlen(dev) + 1) == 0) {
- /* This is typically "errno 1, error: Operation not permitted" if
- * you're not running as root or another suitable privileged
- * user.
- * If it succeeds it means the parameter was a valid interface and
- * not an IP address. Return immediately.
- */
- return CURLE_OK;
- }
-#endif
-
- switch(Curl_if2ip(af,
-#ifdef ENABLE_IPV6
- scope, conn->scope_id,
-#endif
- dev, myhost, sizeof(myhost))) {
- case IF2IP_NOT_FOUND:
- if(is_interface) {
- /* Do not fall back to treating it as a host name */
- failf(data, "Couldn't bind to interface '%s'", dev);
- return CURLE_INTERFACE_FAILED;
- }
- break;
- case IF2IP_AF_NOT_SUPPORTED:
- /* Signal the caller to try another address family if available */
- return CURLE_UNSUPPORTED_PROTOCOL;
- case IF2IP_FOUND:
- is_interface = TRUE;
- /*
- * We now have the numerical IP address in the 'myhost' buffer
- */
- infof(data, "Local Interface %s is ip %s using address family %i",
- dev, myhost, af);
- done = 1;
- break;
- }
- }
- if(!is_interface) {
- /*
- * This was not an interface, resolve the name as a host name
- * or IP number
- *
- * Temporarily force name resolution to use only the address type
- * of the connection. The resolve functions should really be changed
- * to take a type parameter instead.
- */
- unsigned char ipver = conn->ip_version;
- int rc;
-
- if(af == AF_INET)
- conn->ip_version = CURL_IPRESOLVE_V4;
-#ifdef ENABLE_IPV6
- else if(af == AF_INET6)
- conn->ip_version = CURL_IPRESOLVE_V6;
-#endif
-
- rc = Curl_resolv(data, dev, 0, FALSE, &h);
- if(rc == CURLRESOLV_PENDING)
- (void)Curl_resolver_wait_resolv(data, &h);
- conn->ip_version = ipver;
-
- if(h) {
- /* convert the resolved address, sizeof myhost >= INET_ADDRSTRLEN */
- Curl_printable_address(h->addr, myhost, sizeof(myhost));
- infof(data, "Name '%s' family %i resolved to '%s' family %i",
- dev, af, myhost, h->addr->ai_family);
- Curl_resolv_unlock(data, h);
- if(af != h->addr->ai_family) {
- /* bad IP version combo, signal the caller to try another address
- family if available */
- return CURLE_UNSUPPORTED_PROTOCOL;
- }
- done = 1;
- }
- else {
- /*
- * provided dev was no interface (or interfaces are not supported
- * e.g. solaris) no ip address and no domain we fail here
- */
- done = -1;
- }
- }
-
- if(done > 0) {
-#ifdef ENABLE_IPV6
- /* IPv6 address */
- if(af == AF_INET6) {
-#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
- char *scope_ptr = strchr(myhost, '%');
- if(scope_ptr)
- *(scope_ptr++) = 0;
-#endif
- if(Curl_inet_pton(AF_INET6, myhost, &si6->sin6_addr) > 0) {
- si6->sin6_family = AF_INET6;
- si6->sin6_port = htons(port);
-#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
- if(scope_ptr)
- /* The "myhost" string either comes from Curl_if2ip or from
- Curl_printable_address. The latter returns only numeric scope
- IDs and the former returns none at all. So the scope ID, if
- present, is known to be numeric */
- si6->sin6_scope_id = atoi(scope_ptr);
-#endif
- }
- sizeof_sa = sizeof(struct sockaddr_in6);
- }
- else
-#endif
- /* IPv4 address */
- if((af == AF_INET) &&
- (Curl_inet_pton(AF_INET, myhost, &si4->sin_addr) > 0)) {
- si4->sin_family = AF_INET;
- si4->sin_port = htons(port);
- sizeof_sa = sizeof(struct sockaddr_in);
- }
- }
-
- if(done < 1) {
- /* errorbuf is set false so failf will overwrite any message already in
- the error buffer, so the user receives this error message instead of a
- generic resolve error. */
- data->state.errorbuf = FALSE;
- failf(data, "Couldn't bind to '%s'", dev);
- return CURLE_INTERFACE_FAILED;
- }
- }
- else {
- /* no device was given, prepare sa to match af's needs */
-#ifdef ENABLE_IPV6
- if(af == AF_INET6) {
- si6->sin6_family = AF_INET6;
- si6->sin6_port = htons(port);
- sizeof_sa = sizeof(struct sockaddr_in6);
- }
- else
-#endif
- if(af == AF_INET) {
- si4->sin_family = AF_INET;
- si4->sin_port = htons(port);
- sizeof_sa = sizeof(struct sockaddr_in);
- }
- }
-#ifdef IP_BIND_ADDRESS_NO_PORT
- (void)setsockopt(sockfd, SOL_IP, IP_BIND_ADDRESS_NO_PORT, &on, sizeof(on));
-#endif
- for(;;) {
- if(bind(sockfd, sock, sizeof_sa) >= 0) {
- /* we succeeded to bind */
- struct Curl_sockaddr_storage add;
- curl_socklen_t size = sizeof(add);
- memset(&add, 0, sizeof(struct Curl_sockaddr_storage));
- if(getsockname(sockfd, (struct sockaddr *) &add, &size) < 0) {
- char buffer[STRERROR_LEN];
- data->state.os_errno = error = SOCKERRNO;
- failf(data, "getsockname() failed with errno %d: %s",
- error, Curl_strerror(error, buffer, sizeof(buffer)));
- return CURLE_INTERFACE_FAILED;
- }
- infof(data, "Local port: %hu", port);
- conn->bits.bound = TRUE;
- return CURLE_OK;
- }
-
- if(--portnum > 0) {
- port++; /* try next port */
- if(port == 0)
- break;
- infof(data, "Bind to local port %hu failed, trying next", port - 1);
- /* We re-use/clobber the port variable here below */
- if(sock->sa_family == AF_INET)
- si4->sin_port = ntohs(port);
-#ifdef ENABLE_IPV6
- else
- si6->sin6_port = ntohs(port);
-#endif
- }
- else
- break;
- }
- {
- char buffer[STRERROR_LEN];
- data->state.os_errno = error = SOCKERRNO;
- failf(data, "bind failed with errno %d: %s",
- error, Curl_strerror(error, buffer, sizeof(buffer)));
- }
-
- return CURLE_INTERFACE_FAILED;
-}
-
-/*
- * verifyconnect() returns TRUE if the connect really has happened.
- */
-static bool verifyconnect(curl_socket_t sockfd, int *error)
-{
- bool rc = TRUE;
-#ifdef SO_ERROR
- int err = 0;
- curl_socklen_t errSize = sizeof(err);
-
-#ifdef WIN32
- /*
- * In October 2003 we effectively nullified this function on Windows due to
- * problems with it using all CPU in multi-threaded cases.
- *
- * In May 2004, we bring it back to offer more info back on connect failures.
- * Gisle Vanem could reproduce the former problems with this function, but
- * could avoid them by adding this SleepEx() call below:
- *
- * "I don't have Rational Quantify, but the hint from his post was
- * ntdll::NtRemoveIoCompletion(). So I'd assume the SleepEx (or maybe
- * just Sleep(0) would be enough?) would release whatever
- * mutex/critical-section the ntdll call is waiting on.
- *
- * Someone got to verify this on Win-NT 4.0, 2000."
- */
-
-#ifdef _WIN32_WCE
- Sleep(0);
-#else
- SleepEx(0, FALSE);
-#endif
-
-#endif
-
- if(0 != getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (void *)&err, &errSize))
- err = SOCKERRNO;
-#ifdef _WIN32_WCE
- /* Old WinCE versions don't support SO_ERROR */
- if(WSAENOPROTOOPT == err) {
- SET_SOCKERRNO(0);
- err = 0;
- }
-#endif
-#if defined(EBADIOCTL) && defined(__minix)
- /* Minix 3.1.x doesn't support getsockopt on UDP sockets */
- if(EBADIOCTL == err) {
- SET_SOCKERRNO(0);
- err = 0;
- }
-#endif
- if((0 == err) || (EISCONN == err))
- /* we are connected, awesome! */
- rc = TRUE;
- else
- /* This wasn't a successful connect */
- rc = FALSE;
- if(error)
- *error = err;
-#else
- (void)sockfd;
- if(error)
- *error = SOCKERRNO;
-#endif
- return rc;
-}
-
-/* update tempaddr[tempindex] (to the next entry), makes sure to stick
- to the correct family */
-static struct Curl_addrinfo *ainext(struct connectdata *conn,
- int tempindex,
- bool next) /* use next entry? */
-{
- struct Curl_addrinfo *ai = conn->tempaddr[tempindex];
- if(ai && next)
- ai = ai->ai_next;
- while(ai && (ai->ai_family != conn->tempfamily[tempindex]))
- ai = ai->ai_next;
- conn->tempaddr[tempindex] = ai;
- return ai;
-}
-
-/* Used within the multi interface. Try next IP address, returns error if no
- more address exists or error */
-static CURLcode trynextip(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex,
- int tempindex)
-{
- CURLcode result = CURLE_COULDNT_CONNECT;
-
- /* First clean up after the failed socket.
- Don't close it yet to ensure that the next IP's socket gets a different
- file descriptor, which can prevent bugs when the curl_multi_socket_action
- interface is used with certain select() replacements such as kqueue. */
- curl_socket_t fd_to_close = conn->tempsock[tempindex];
- conn->tempsock[tempindex] = CURL_SOCKET_BAD;
-
- if(sockindex == FIRSTSOCKET) {
- struct Curl_addrinfo *ai = conn->tempaddr[tempindex];
-
- while(ai) {
- result = singleipconnect(data, conn, ai, tempindex);
- if(result == CURLE_COULDNT_CONNECT) {
- ai = ainext(conn, tempindex, TRUE);
- continue;
- }
- break;
- }
- }
-
- if(fd_to_close != CURL_SOCKET_BAD)
- Curl_closesocket(data, conn, fd_to_close);
-
- return result;
-}
-
/* Copies connection info into the transfer handle to make it available when
the transfer handle is no longer associated with the connection. */
void Curl_persistconninfo(struct Curl_easy *data, struct connectdata *conn,
@@ -632,6 +176,28 @@ void Curl_persistconninfo(struct Curl_easy *data, struct connectdata *conn,
data->info.conn_local_port = local_port;
}
+static const struct Curl_addrinfo *
+addr_first_match(const struct Curl_addrinfo *addr, int family)
+{
+ while(addr) {
+ if(addr->ai_family == family)
+ return addr;
+ addr = addr->ai_next;
+ }
+ return NULL;
+}
+
+static const struct Curl_addrinfo *
+addr_next_match(const struct Curl_addrinfo *addr, int family)
+{
+ while(addr && addr->ai_next) {
+ addr = addr->ai_next;
+ if(addr->ai_family == family)
+ return addr;
+ }
+ return NULL;
+}
+
/* retrieves ip address and port from a sockaddr structure.
note it calls Curl_inet_ntop which sets errno on fail, not SOCKERRNO. */
bool Curl_addr2string(struct sockaddr *sa, curl_socklen_t salen,
@@ -689,708 +255,517 @@ bool Curl_addr2string(struct sockaddr *sa, curl_socklen_t salen,
return FALSE;
}
-/* retrieves the start/end point information of a socket of an established
- connection */
-void Curl_conninfo_remote(struct Curl_easy *data,
- struct connectdata *conn, curl_socket_t sockfd)
-{
-#ifdef HAVE_GETPEERNAME
- char buffer[STRERROR_LEN];
- struct Curl_sockaddr_storage ssrem;
- curl_socklen_t plen;
- int port;
- plen = sizeof(struct Curl_sockaddr_storage);
- memset(&ssrem, 0, sizeof(ssrem));
- if(getpeername(sockfd, (struct sockaddr*) &ssrem, &plen)) {
- int error = SOCKERRNO;
- failf(data, "getpeername() failed with errno %d: %s",
- error, Curl_strerror(error, buffer, sizeof(buffer)));
- return;
- }
- if(!Curl_addr2string((struct sockaddr*)&ssrem, plen,
- conn->primary_ip, &port)) {
- failf(data, "ssrem inet_ntop() failed with errno %d: %s",
- errno, Curl_strerror(errno, buffer, sizeof(buffer)));
- return;
- }
-#else
- (void)data;
- (void)conn;
- (void)sockfd;
-#endif
-}
+struct connfind {
+ curl_off_t id_tofind;
+ struct connectdata *found;
+};
-/* retrieves the start/end point information of a socket of an established
- connection */
-void Curl_conninfo_local(struct Curl_easy *data, curl_socket_t sockfd,
- char *local_ip, int *local_port)
+static int conn_is_conn(struct Curl_easy *data,
+ struct connectdata *conn, void *param)
{
-#ifdef HAVE_GETSOCKNAME
- char buffer[STRERROR_LEN];
- struct Curl_sockaddr_storage ssloc;
- curl_socklen_t slen;
- slen = sizeof(struct Curl_sockaddr_storage);
- memset(&ssloc, 0, sizeof(ssloc));
- if(getsockname(sockfd, (struct sockaddr*) &ssloc, &slen)) {
- int error = SOCKERRNO;
- failf(data, "getsockname() failed with errno %d: %s",
- error, Curl_strerror(error, buffer, sizeof(buffer)));
- return;
- }
- if(!Curl_addr2string((struct sockaddr*)&ssloc, slen,
- local_ip, local_port)) {
- failf(data, "ssloc inet_ntop() failed with errno %d: %s",
- errno, Curl_strerror(errno, buffer, sizeof(buffer)));
- return;
- }
-#else
+ struct connfind *f = (struct connfind *)param;
(void)data;
- (void)sockfd;
- (void)local_ip;
- (void)local_port;
-#endif
+ if(conn->connection_id == f->id_tofind) {
+ f->found = conn;
+ return 1;
+ }
+ return 0;
}
-/* retrieves the start/end point information of a socket of an established
- connection */
-void Curl_updateconninfo(struct Curl_easy *data, struct connectdata *conn,
- curl_socket_t sockfd)
+/*
+ * Used to extract socket and connectdata struct for the most recent
+ * transfer on the given Curl_easy.
+ *
+ * The returned socket will be CURL_SOCKET_BAD in case of failure!
+ */
+curl_socket_t Curl_getconnectinfo(struct Curl_easy *data,
+ struct connectdata **connp)
{
- /* 'local_ip' and 'local_port' get filled with local's numerical
- ip address and port number whenever an outgoing connection is
- **established** from the primary socket to a remote address. */
- char local_ip[MAX_IPADR_LEN] = "";
- int local_port = -1;
-
- if(!conn->bits.reuse &&
- (conn->transport != TRNSPRT_TCP || !conn->bits.tcp_fastopen))
- Curl_conninfo_remote(data, conn, sockfd);
- Curl_conninfo_local(data, sockfd, local_ip, &local_port);
-
- /* persist connection info in session handle */
- Curl_persistconninfo(data, conn, local_ip, local_port);
-}
-
-/* After a TCP connection to the proxy has been verified, this function does
- the next magic steps. If 'done' isn't set TRUE, it is not done yet and
- must be called again.
-
- Note: this function's sub-functions call failf()
+ DEBUGASSERT(data);
-*/
-static CURLcode connect_SOCKS(struct Curl_easy *data, int sockindex,
- bool *done)
-{
- CURLcode result = CURLE_OK;
-#ifndef CURL_DISABLE_PROXY
- CURLproxycode pxresult = CURLPX_OK;
- struct connectdata *conn = data->conn;
- if(conn->bits.socksproxy) {
- /* for the secondary socket (FTP), use the "connect to host"
- * but ignore the "connect to port" (use the secondary port)
- */
- const char * const host =
- conn->bits.httpproxy ?
- conn->http_proxy.host.name :
- conn->bits.conn_to_host ?
- conn->conn_to_host.name :
- sockindex == SECONDARYSOCKET ?
- conn->secondaryhostname : conn->host.name;
- const int port =
- conn->bits.httpproxy ? (int)conn->http_proxy.port :
- sockindex == SECONDARYSOCKET ? conn->secondary_port :
- conn->bits.conn_to_port ? conn->conn_to_port :
- conn->remote_port;
- switch(conn->socks_proxy.proxytype) {
- case CURLPROXY_SOCKS5:
- case CURLPROXY_SOCKS5_HOSTNAME:
- pxresult = Curl_SOCKS5(conn->socks_proxy.user, conn->socks_proxy.passwd,
- host, port, sockindex, data, done);
- break;
+ /* this works for an easy handle:
+ * - that has been used for curl_easy_perform()
+ * - that is associated with a multi handle, and whose connection
+ * was detached with CURLOPT_CONNECT_ONLY
+ */
+ if((data->state.lastconnect_id != -1) && (data->multi_easy || data->multi)) {
+ struct connectdata *c;
+ struct connfind find;
+ find.id_tofind = data->state.lastconnect_id;
+ find.found = NULL;
- case CURLPROXY_SOCKS4:
- case CURLPROXY_SOCKS4A:
- pxresult = Curl_SOCKS4(conn->socks_proxy.user, host, port, sockindex,
- data, done);
- break;
+ Curl_conncache_foreach(data,
+ data->share && (data->share->specifier
+ & (1<< CURL_LOCK_DATA_CONNECT))?
+ &data->share->conn_cache:
+ data->multi_easy?
+ &data->multi_easy->conn_cache:
+ &data->multi->conn_cache, &find, conn_is_conn);
- default:
- failf(data, "unknown proxytype option given");
- result = CURLE_COULDNT_CONNECT;
- } /* switch proxytype */
- if(pxresult) {
- result = CURLE_PROXY;
- data->info.pxcode = pxresult;
+ if(!find.found) {
+ data->state.lastconnect_id = -1;
+ return CURL_SOCKET_BAD;
}
- }
- else
-#else
- (void)data;
- (void)sockindex;
-#endif /* CURL_DISABLE_PROXY */
- *done = TRUE; /* no SOCKS proxy, so consider us connected */
- return result;
+ c = find.found;
+ if(connp)
+ /* only store this if the caller cares for it */
+ *connp = c;
+ return c->sock[FIRSTSOCKET];
+ }
+ return CURL_SOCKET_BAD;
}
/*
- * post_SOCKS() is called after a successful connect to the peer, which
- * *could* be a SOCKS proxy
+ * Curl_conncontrol() marks streams or connection for closure.
*/
-static void post_SOCKS(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex,
- bool *connected)
+void Curl_conncontrol(struct connectdata *conn,
+ int ctrl /* see defines in header */
+#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
+ , const char *reason
+#endif
+ )
{
- conn->bits.tcpconnect[sockindex] = TRUE;
-
- *connected = TRUE;
- if(sockindex == FIRSTSOCKET)
- Curl_pgrsTime(data, TIMER_CONNECT); /* connect done */
- Curl_updateconninfo(data, conn, conn->sock[sockindex]);
- Curl_verboseconnect(data, conn);
- data->info.numconnects++; /* to track the number of connections made */
+ /* close if a connection, or a stream that isn't multiplexed. */
+ /* This function will be called both before and after this connection is
+ associated with a transfer. */
+ bool closeit, is_multiplex;
+ DEBUGASSERT(conn);
+#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
+ (void)reason; /* useful for debugging */
+#endif
+ is_multiplex = Curl_conn_is_multiplex(conn, FIRSTSOCKET);
+ closeit = (ctrl == CONNCTRL_CONNECTION) ||
+ ((ctrl == CONNCTRL_STREAM) && !is_multiplex);
+ if((ctrl == CONNCTRL_STREAM) && is_multiplex)
+ ; /* stream signal on multiplex conn never affects close state */
+ else if((bit)closeit != conn->bits.close) {
+ conn->bits.close = closeit; /* the only place in the source code that
+ should assign this bit */
+ }
}
-/*
- * Curl_is_connected() checks if the socket has connected.
+/**
+ * job walking the matching addr infos, creating a sub-cfilter with the
+ * provided method `cf_create` and running setup/connect on it.
*/
+struct eyeballer {
+ const char *name;
+ const struct Curl_addrinfo *first; /* complete address list, not owned */
+ const struct Curl_addrinfo *addr; /* List of addresses to try, not owned */
+ int ai_family; /* matching address family only */
+ cf_ip_connect_create *cf_create; /* for creating cf */
+ struct Curl_cfilter *cf; /* current sub-cfilter connecting */
+ struct eyeballer *primary; /* eyeballer this one is backup for */
+ timediff_t delay_ms; /* delay until start */
+ struct curltime started; /* start of current attempt */
+ timediff_t timeoutms; /* timeout for current attempt */
+ expire_id timeout_id; /* ID for Curl_expire() */
+ CURLcode result;
+ int error;
+ BIT(rewinded); /* if we rewinded the addr list */
+ BIT(has_started); /* attempts have started */
+ BIT(is_done); /* out of addresses/time */
+ BIT(connected); /* cf has connected */
+ BIT(inconclusive); /* connect was not a hard failure, we
+ * might talk to a restarting server */
+};
-CURLcode Curl_is_connected(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex,
- bool *connected)
-{
- CURLcode result = CURLE_OK;
- timediff_t allow;
- int error = 0;
- struct curltime now;
- int rc = 0;
- unsigned int i;
-
- DEBUGASSERT(sockindex >= FIRSTSOCKET && sockindex <= SECONDARYSOCKET);
-
- *connected = FALSE; /* a very negative world view is best */
-
- if(conn->bits.tcpconnect[sockindex]) {
- /* we are connected already! */
- *connected = TRUE;
- return CURLE_OK;
- }
-
- now = Curl_now();
-
- if(SOCKS_STATE(conn->cnnct.state)) {
- /* still doing SOCKS */
- result = connect_SOCKS(data, sockindex, connected);
- if(!result && *connected)
- post_SOCKS(data, conn, sockindex, connected);
- return result;
- }
- for(i = 0; i<2; i++) {
- const int other = i ^ 1;
- if(conn->tempsock[i] == CURL_SOCKET_BAD)
- continue;
- error = 0;
-#ifdef ENABLE_QUIC
- if(conn->transport == TRNSPRT_QUIC) {
- result = Curl_quic_is_connected(data, conn, i, connected);
- if(!result && *connected) {
- /* use this socket from now on */
- conn->sock[sockindex] = conn->tempsock[i];
- conn->ip_addr = conn->tempaddr[i];
- conn->tempsock[i] = CURL_SOCKET_BAD;
- post_SOCKS(data, conn, sockindex, connected);
- connkeep(conn, "HTTP/3 default");
- if(conn->tempsock[other] != CURL_SOCKET_BAD)
- Curl_quic_disconnect(data, conn, other);
- return CURLE_OK;
- }
- /* When a QUIC connect attempt fails, the better error explanation is in
- 'result' and not in errno */
- if(result) {
- conn->tempsock[i] = CURL_SOCKET_BAD;
- error = SOCKERRNO;
- }
- }
- else
-#endif
- {
-#ifdef mpeix
- /* Call this function once now, and ignore the results. We do this to
- "clear" the error state on the socket so that we can later read it
- reliably. This is reported necessary on the MPE/iX operating
- system. */
- (void)verifyconnect(conn->tempsock[i], NULL);
-#endif
+typedef enum {
+ SCFST_INIT,
+ SCFST_WAITING,
+ SCFST_DONE
+} cf_connect_state;
+
+struct cf_he_ctx {
+ int transport;
+ cf_ip_connect_create *cf_create;
+ const struct Curl_dns_entry *remotehost;
+ cf_connect_state state;
+ struct eyeballer *baller[2];
+ struct eyeballer *winner;
+ struct curltime started;
+};
- /* check socket for connect */
- rc = SOCKET_WRITABLE(conn->tempsock[i], 0);
- }
+/* when there are more than one IP address left to use, this macro returns how
+ much of the given timeout to spend on *this* attempt */
+#define TIMEOUT_LARGE 600
+#define USETIME(ms) ((ms > TIMEOUT_LARGE) ? (ms / 2) : ms)
+
+static CURLcode eyeballer_new(struct eyeballer **pballer,
+ cf_ip_connect_create *cf_create,
+ const struct Curl_addrinfo *addr,
+ int ai_family,
+ struct eyeballer *primary,
+ timediff_t delay_ms,
+ timediff_t timeout_ms,
+ expire_id timeout_id)
+{
+ struct eyeballer *baller;
- if(rc == 0) { /* no connection yet */
- if(Curl_timediff(now, conn->connecttime) >=
- conn->timeoutms_per_addr[i]) {
- infof(data, "After %" CURL_FORMAT_TIMEDIFF_T
- "ms connect time, move on!", conn->timeoutms_per_addr[i]);
- error = ETIMEDOUT;
- }
+ *pballer = NULL;
+ baller = calloc(1, sizeof(*baller) + 1000);
+ if(!baller)
+ return CURLE_OUT_OF_MEMORY;
- /* should we try another protocol family? */
- if(i == 0 && !conn->bits.parallel_connect &&
- (Curl_timediff(now, conn->connecttime) >=
- data->set.happy_eyeballs_timeout)) {
- conn->bits.parallel_connect = TRUE; /* starting now */
- trynextip(data, conn, sockindex, 1);
- }
- }
- else if(rc == CURL_CSELECT_OUT || conn->bits.tcp_fastopen) {
- if(verifyconnect(conn->tempsock[i], &error)) {
- /* we are connected with TCP, awesome! */
-
- /* use this socket from now on */
- conn->sock[sockindex] = conn->tempsock[i];
- conn->ip_addr = conn->tempaddr[i];
- conn->tempsock[i] = CURL_SOCKET_BAD;
+ baller->name = ((ai_family == AF_INET)? "ipv4" : (
#ifdef ENABLE_IPV6
- conn->bits.ipv6 = (conn->ip_addr->ai_family == AF_INET6)?TRUE:FALSE;
-#endif
-
- /* close the other socket, if open */
- if(conn->tempsock[other] != CURL_SOCKET_BAD) {
- Curl_closesocket(data, conn, conn->tempsock[other]);
- conn->tempsock[other] = CURL_SOCKET_BAD;
- }
-
- /* see if we need to kick off any SOCKS proxy magic once we
- connected */
- result = connect_SOCKS(data, sockindex, connected);
- if(result || !*connected)
- return result;
-
- post_SOCKS(data, conn, sockindex, connected);
-
- return CURLE_OK;
- }
- }
- else if(rc & CURL_CSELECT_ERR) {
- (void)verifyconnect(conn->tempsock[i], &error);
- }
-
- /*
- * The connection failed here, we should attempt to connect to the "next
- * address" for the given host. But first remember the latest error.
- */
- if(error) {
- data->state.os_errno = error;
- SET_SOCKERRNO(error);
- if(conn->tempaddr[i]) {
- CURLcode status;
-#ifndef CURL_DISABLE_VERBOSE_STRINGS
- char ipaddress[MAX_IPADR_LEN];
- char buffer[STRERROR_LEN];
- Curl_printable_address(conn->tempaddr[i], ipaddress,
- sizeof(ipaddress));
-#ifdef ENABLE_QUIC
- if(conn->transport == TRNSPRT_QUIC) {
- infof(data, "connect to %s port %u failed: %s",
- ipaddress, conn->port, curl_easy_strerror(result));
- }
- else
-#endif
- infof(data, "connect to %s port %u failed: %s",
- ipaddress, conn->port,
- Curl_strerror(error, buffer, sizeof(buffer)));
-#endif
-
- allow = Curl_timeleft(data, &now, TRUE);
- conn->timeoutms_per_addr[i] = conn->tempaddr[i]->ai_next == NULL ?
- allow : allow / 2;
- ainext(conn, i, TRUE);
- status = trynextip(data, conn, sockindex, i);
- if((status != CURLE_COULDNT_CONNECT) ||
- conn->tempsock[other] == CURL_SOCKET_BAD) {
- /* the last attempt failed and no other sockets remain open */
- if(!result)
- result = status;
- }
- }
- }
- }
-
- /*
- * Now that we've checked whether we are connected, check whether we've
- * already timed out.
- *
- * First figure out how long time we have left to connect */
-
- allow = Curl_timeleft(data, &now, TRUE);
-
- if(allow < 0) {
- /* time-out, bail out, go home */
- failf(data, "Connection timeout after %ld ms",
- Curl_timediff(now, data->progress.t_startsingle));
- return CURLE_OPERATION_TIMEDOUT;
- }
-
- if(result &&
- (conn->tempsock[0] == CURL_SOCKET_BAD) &&
- (conn->tempsock[1] == CURL_SOCKET_BAD)) {
- /* no more addresses to try */
- const char *hostname;
- CURLcode failreason = result;
-
- /* if the first address family runs out of addresses to try before the
- happy eyeball timeout, go ahead and try the next family now */
- result = trynextip(data, conn, sockindex, 1);
- if(!result)
- return result;
-
- result = failreason;
-
-#ifndef CURL_DISABLE_PROXY
- if(conn->bits.socksproxy)
- hostname = conn->socks_proxy.host.name;
- else if(conn->bits.httpproxy)
- hostname = conn->http_proxy.host.name;
- else
-#endif
- if(conn->bits.conn_to_host)
- hostname = conn->conn_to_host.name;
- else
- hostname = conn->host.name;
-
- failf(data, "Failed to connect to %s port %u after "
- "%" CURL_FORMAT_TIMEDIFF_T " ms: %s",
- hostname, conn->port,
- Curl_timediff(now, data->progress.t_startsingle),
- curl_easy_strerror(result));
-
- Curl_quic_disconnect(data, conn, 0);
- Curl_quic_disconnect(data, conn, 1);
-
-#ifdef WSAETIMEDOUT
- if(WSAETIMEDOUT == data->state.os_errno)
- result = CURLE_OPERATION_TIMEDOUT;
-#elif defined(ETIMEDOUT)
- if(ETIMEDOUT == data->state.os_errno)
- result = CURLE_OPERATION_TIMEDOUT;
-#endif
- }
- else
- result = CURLE_OK; /* still trying */
-
- return result;
+ (ai_family == AF_INET6)? "ipv6" :
+#endif
+ "ip"));
+ baller->cf_create = cf_create;
+ baller->first = baller->addr = addr;
+ baller->ai_family = ai_family;
+ baller->primary = primary;
+ baller->delay_ms = delay_ms;
+ baller->timeoutms = addr_next_match(baller->addr, baller->ai_family)?
+ USETIME(timeout_ms) : timeout_ms;
+ baller->timeout_id = timeout_id;
+ baller->result = CURLE_COULDNT_CONNECT;
+
+ *pballer = baller;
+ return CURLE_OK;
}
-static void tcpnodelay(struct Curl_easy *data, curl_socket_t sockfd)
+static void baller_close(struct eyeballer *baller,
+ struct Curl_easy *data)
{
-#if defined(TCP_NODELAY)
- curl_socklen_t onoff = (curl_socklen_t) 1;
- int level = IPPROTO_TCP;
-#if !defined(CURL_DISABLE_VERBOSE_STRINGS)
- char buffer[STRERROR_LEN];
-#else
- (void) data;
-#endif
-
- if(setsockopt(sockfd, level, TCP_NODELAY, (void *)&onoff,
- sizeof(onoff)) < 0)
- infof(data, "Could not set TCP_NODELAY: %s",
- Curl_strerror(SOCKERRNO, buffer, sizeof(buffer)));
-#else
- (void)data;
- (void)sockfd;
-#endif
+ if(baller && baller->cf) {
+ Curl_conn_cf_discard_chain(&baller->cf, data);
+ }
}
-#ifdef SO_NOSIGPIPE
-/* The preferred method on Mac OS X (10.2 and later) to prevent SIGPIPEs when
- sending data to a dead peer (instead of relying on the 4th argument to send
- being MSG_NOSIGNAL). Possibly also existing and in use on other BSD
- systems? */
-static void nosigpipe(struct Curl_easy *data,
- curl_socket_t sockfd)
+static void baller_free(struct eyeballer *baller,
+ struct Curl_easy *data)
{
- int onoff = 1;
- if(setsockopt(sockfd, SOL_SOCKET, SO_NOSIGPIPE, (void *)&onoff,
- sizeof(onoff)) < 0) {
-#if !defined(CURL_DISABLE_VERBOSE_STRINGS)
- char buffer[STRERROR_LEN];
- infof(data, "Could not set SO_NOSIGPIPE: %s",
- Curl_strerror(SOCKERRNO, buffer, sizeof(buffer)));
-#endif
+ if(baller) {
+ baller_close(baller, data);
+ free(baller);
}
}
-#else
-#define nosigpipe(x,y) Curl_nop_stmt
-#endif
-
-#ifdef USE_WINSOCK
-/* When you run a program that uses the Windows Sockets API, you may
- experience slow performance when you copy data to a TCP server.
- https://support.microsoft.com/kb/823764
-
- Work-around: Make the Socket Send Buffer Size Larger Than the Program Send
- Buffer Size
-
- The problem described in this knowledge-base is applied only to pre-Vista
- Windows. Following function trying to detect OS version and skips
- SO_SNDBUF adjustment for Windows Vista and above.
-*/
-#define DETECT_OS_NONE 0
-#define DETECT_OS_PREVISTA 1
-#define DETECT_OS_VISTA_OR_LATER 2
-
-void Curl_sndbufset(curl_socket_t sockfd)
+static void baller_rewind(struct eyeballer *baller)
{
- int val = CURL_MAX_WRITE_SIZE + 32;
- int curval = 0;
- int curlen = sizeof(curval);
-
- static int detectOsState = DETECT_OS_NONE;
-
- if(detectOsState == DETECT_OS_NONE) {
- if(curlx_verify_windows_version(6, 0, 0, PLATFORM_WINNT,
- VERSION_GREATER_THAN_EQUAL))
- detectOsState = DETECT_OS_VISTA_OR_LATER;
- else
- detectOsState = DETECT_OS_PREVISTA;
- }
-
- if(detectOsState == DETECT_OS_VISTA_OR_LATER)
- return;
-
- if(getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, (char *)&curval, &curlen) == 0)
- if(curval > val)
- return;
+ baller->rewinded = TRUE;
+ baller->addr = baller->first;
+ baller->inconclusive = FALSE;
+}
- setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, (const char *)&val, sizeof(val));
+static void baller_next_addr(struct eyeballer *baller)
+{
+ baller->addr = addr_next_match(baller->addr, baller->ai_family);
}
-#endif
/*
- * singleipconnect()
+ * Initiate a connect attempt walk.
*
* Note that even on connect fail it returns CURLE_OK, but with 'sock' set to
* CURL_SOCKET_BAD. Other errors will however return proper errors.
- *
- * singleipconnect() connects to the given IP only, and it may return without
- * having connected.
*/
-static CURLcode singleipconnect(struct Curl_easy *data,
- struct connectdata *conn,
- const struct Curl_addrinfo *ai,
- int tempindex)
+static void baller_initiate(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct eyeballer *baller)
{
- struct Curl_sockaddr_ex addr;
- int rc = -1;
- int error = 0;
- bool isconnected = FALSE;
- curl_socket_t sockfd;
+ struct cf_he_ctx *ctx = cf->ctx;
+ struct Curl_cfilter *cf_prev = baller->cf;
+ struct Curl_cfilter *wcf;
CURLcode result;
- char ipaddress[MAX_IPADR_LEN];
- int port;
- bool is_tcp;
-#ifdef TCP_FASTOPEN_CONNECT
- int optval = 1;
-#endif
- const char *ipmsg;
- char buffer[STRERROR_LEN];
- curl_socket_t *sockp = &conn->tempsock[tempindex];
- *sockp = CURL_SOCKET_BAD;
- result = Curl_socket(data, ai, &addr, &sockfd);
+
+ /* Don't close a previous cfilter yet to ensure that the next IP's
+ socket gets a different file descriptor, which can prevent bugs when
+ the curl_multi_socket_action interface is used with certain select()
+ replacements such as kqueue. */
+ result = baller->cf_create(&baller->cf, data, cf->conn, baller->addr,
+ ctx->transport);
if(result)
- return result;
+ goto out;
- /* store remote address and port used in this connection attempt */
- if(!Curl_addr2string((struct sockaddr*)&addr.sa_addr, addr.addrlen,
- ipaddress, &port)) {
- /* malformed address or bug in inet_ntop, try next address */
- failf(data, "sa_addr inet_ntop() failed with errno %d: %s",
- errno, Curl_strerror(errno, buffer, sizeof(buffer)));
- Curl_closesocket(data, conn, sockfd);
- return CURLE_OK;
+ /* the new filter might have sub-filters */
+ for(wcf = baller->cf; wcf; wcf = wcf->next) {
+ wcf->conn = cf->conn;
+ wcf->sockindex = cf->sockindex;
}
-#ifdef ENABLE_IPV6
- if(addr.family == AF_INET6)
- ipmsg = " Trying [%s]:%d...";
- else
-#endif
- ipmsg = " Trying %s:%d...";
- infof(data, ipmsg, ipaddress, port);
-#ifdef ENABLE_IPV6
- is_tcp = (addr.family == AF_INET || addr.family == AF_INET6) &&
- addr.socktype == SOCK_STREAM;
-#else
- is_tcp = (addr.family == AF_INET) && addr.socktype == SOCK_STREAM;
-#endif
- if(is_tcp && data->set.tcp_nodelay)
- tcpnodelay(data, sockfd);
-
- nosigpipe(data, sockfd);
+ if(addr_next_match(baller->addr, baller->ai_family)) {
+ Curl_expire(data, baller->timeoutms, baller->timeout_id);
+ }
- Curl_sndbufset(sockfd);
+out:
+ if(result) {
+ CURL_TRC_CF(data, cf, "%s failed", baller->name);
+ baller_close(baller, data);
+ }
+ if(cf_prev)
+ Curl_conn_cf_discard_chain(&cf_prev, data);
+ baller->result = result;
+}
- if(is_tcp && data->set.tcp_keepalive)
- tcpkeepalive(data, sockfd);
+/**
+ * Start a connection attempt on the current baller address.
+ * Will return CURLE_OK on the first address where a socket
+ * could be created and the non-blocking connect started.
+ * Returns error when all remaining addresses have been tried.
+ */
+static CURLcode baller_start(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct eyeballer *baller,
+ timediff_t timeoutms)
+{
+ baller->error = 0;
+ baller->connected = FALSE;
+ baller->has_started = TRUE;
+
+ while(baller->addr) {
+ baller->started = Curl_now();
+ baller->timeoutms = addr_next_match(baller->addr, baller->ai_family) ?
+ USETIME(timeoutms) : timeoutms;
+ baller_initiate(cf, data, baller);
+ if(!baller->result)
+ break;
+ baller_next_addr(baller);
+ }
+ if(!baller->addr) {
+ baller->is_done = TRUE;
+ }
+ return baller->result;
+}
- if(data->set.fsockopt) {
- /* activate callback for setting socket options */
- Curl_set_in_callback(data, true);
- error = data->set.fsockopt(data->set.sockopt_client,
- sockfd,
- CURLSOCKTYPE_IPCXN);
- Curl_set_in_callback(data, false);
- if(error == CURL_SOCKOPT_ALREADY_CONNECTED)
- isconnected = TRUE;
- else if(error) {
- Curl_closesocket(data, conn, sockfd); /* close the socket and bail out */
- return CURLE_ABORTED_BY_CALLBACK;
- }
+/* Used within the multi interface. Try next IP address, returns error if no
+ more address exists or error */
+static CURLcode baller_start_next(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct eyeballer *baller,
+ timediff_t timeoutms)
+{
+ if(cf->sockindex == FIRSTSOCKET) {
+ baller_next_addr(baller);
+ /* If we get inconclusive answers from the server(s), we make
+ * a second iteration over the address list */
+ if(!baller->addr && baller->inconclusive && !baller->rewinded)
+ baller_rewind(baller);
+ baller_start(cf, data, baller, timeoutms);
+ }
+ else {
+ baller->error = 0;
+ baller->connected = FALSE;
+ baller->has_started = TRUE;
+ baller->is_done = TRUE;
+ baller->result = CURLE_COULDNT_CONNECT;
}
+ return baller->result;
+}
- /* possibly bind the local end to an IP, interface or port */
- if(addr.family == AF_INET
-#ifdef ENABLE_IPV6
- || addr.family == AF_INET6
+static CURLcode baller_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct eyeballer *baller,
+ struct curltime *now,
+ bool *connected)
+{
+ (void)cf;
+ *connected = baller->connected;
+ if(!baller->result && !*connected) {
+ /* evaluate again */
+ baller->result = Curl_conn_cf_connect(baller->cf, data, 0, connected);
+
+ if(!baller->result) {
+ if(*connected) {
+ baller->connected = TRUE;
+ baller->is_done = TRUE;
+ }
+ else if(Curl_timediff(*now, baller->started) >= baller->timeoutms) {
+ infof(data, "%s connect timeout after %" CURL_FORMAT_TIMEDIFF_T
+ "ms, move on!", baller->name, baller->timeoutms);
+#if defined(ETIMEDOUT)
+ baller->error = ETIMEDOUT;
#endif
- ) {
- result = bindlocal(data, sockfd, addr.family,
- Curl_ipv6_scope((struct sockaddr*)&addr.sa_addr));
- if(result) {
- Curl_closesocket(data, conn, sockfd); /* close socket and bail out */
- if(result == CURLE_UNSUPPORTED_PROTOCOL) {
- /* The address family is not supported on this interface.
- We can continue trying addresses */
- return CURLE_COULDNT_CONNECT;
+ baller->result = CURLE_OPERATION_TIMEDOUT;
}
- return result;
}
+ else if(baller->result == CURLE_WEIRD_SERVER_REPLY)
+ baller->inconclusive = TRUE;
}
+ return baller->result;
+}
- /* set socket non-blocking */
- (void)curlx_nonblock(sockfd, TRUE);
+/*
+ * is_connected() checks if the socket has connected.
+ */
+static CURLcode is_connected(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool *connected)
+{
+ struct cf_he_ctx *ctx = cf->ctx;
+ struct connectdata *conn = cf->conn;
+ CURLcode result;
+ struct curltime now;
+ size_t i;
+ int ongoing, not_started;
+ const char *hostname;
+
+ /* Check if any of the conn->tempsock we use for establishing connections
+ * succeeded and, if so, close any ongoing other ones.
+ * Transfer the successful conn->tempsock to conn->sock[sockindex]
+ * and set conn->tempsock to CURL_SOCKET_BAD.
+ * If transport is QUIC, we need to shutdown the ongoing 'other'
+ * cot ballers in a QUIC appropriate way. */
+evaluate:
+ *connected = FALSE; /* a very negative world view is best */
+ now = Curl_now();
+ ongoing = not_started = 0;
+ for(i = 0; i < ARRAYSIZE(ctx->baller); i++) {
+ struct eyeballer *baller = ctx->baller[i];
- conn->connecttime = Curl_now();
- if(conn->num_addr > 1) {
- Curl_expire(data, conn->timeoutms_per_addr[0], EXPIRE_DNS_PER_NAME);
- Curl_expire(data, conn->timeoutms_per_addr[1], EXPIRE_DNS_PER_NAME2);
- }
+ if(!baller || baller->is_done)
+ continue;
- /* Connect TCP and QUIC sockets */
- if(!isconnected && (conn->transport != TRNSPRT_UDP)) {
- if(conn->bits.tcp_fastopen) {
-#if defined(CONNECT_DATA_IDEMPOTENT) /* Darwin */
-# if defined(HAVE_BUILTIN_AVAILABLE)
- /* while connectx function is available since macOS 10.11 / iOS 9,
- it did not have the interface declared correctly until
- Xcode 9 / macOS SDK 10.13 */
- if(__builtin_available(macOS 10.11, iOS 9.0, tvOS 9.0, watchOS 2.0, *)) {
- sa_endpoints_t endpoints;
- endpoints.sae_srcif = 0;
- endpoints.sae_srcaddr = NULL;
- endpoints.sae_srcaddrlen = 0;
- endpoints.sae_dstaddr = &addr.sa_addr;
- endpoints.sae_dstaddrlen = addr.addrlen;
-
- rc = connectx(sockfd, &endpoints, SAE_ASSOCID_ANY,
- CONNECT_RESUME_ON_READ_WRITE | CONNECT_DATA_IDEMPOTENT,
- NULL, 0, NULL, NULL);
+ if(!baller->has_started) {
+ ++not_started;
+ continue;
+ }
+ baller->result = baller_connect(cf, data, baller, &now, connected);
+ CURL_TRC_CF(data, cf, "%s connect -> %d, connected=%d",
+ baller->name, baller->result, *connected);
+
+ if(!baller->result) {
+ if(*connected) {
+ /* connected, declare the winner */
+ ctx->winner = baller;
+ ctx->baller[i] = NULL;
+ break;
}
- else {
- rc = connect(sockfd, &addr.sa_addr, addr.addrlen);
+ else { /* still waiting */
+ ++ongoing;
}
-# else
- rc = connect(sockfd, &addr.sa_addr, addr.addrlen);
-# endif /* HAVE_BUILTIN_AVAILABLE */
-#elif defined(TCP_FASTOPEN_CONNECT) /* Linux >= 4.11 */
- if(setsockopt(sockfd, IPPROTO_TCP, TCP_FASTOPEN_CONNECT,
- (void *)&optval, sizeof(optval)) < 0)
- infof(data, "Failed to enable TCP Fast Open on fd %d", sockfd);
-
- rc = connect(sockfd, &addr.sa_addr, addr.addrlen);
-#elif defined(MSG_FASTOPEN) /* old Linux */
- if(conn->given->flags & PROTOPT_SSL)
- rc = connect(sockfd, &addr.sa_addr, addr.addrlen);
- else
- rc = 0; /* Do nothing */
-#endif
}
- else {
- rc = connect(sockfd, &addr.sa_addr, addr.addrlen);
+ else if(!baller->is_done) {
+ /* The baller failed to connect, start its next attempt */
+ if(baller->error) {
+ data->state.os_errno = baller->error;
+ SET_SOCKERRNO(baller->error);
+ }
+ baller_start_next(cf, data, baller, Curl_timeleft(data, &now, TRUE));
+ if(baller->is_done) {
+ CURL_TRC_CF(data, cf, "%s done", baller->name);
+ }
+ else {
+ /* next attempt was started */
+ CURL_TRC_CF(data, cf, "%s trying next", baller->name);
+ ++ongoing;
+ Curl_expire(data, 0, EXPIRE_RUN_NOW);
+ }
}
+ }
- if(-1 == rc)
- error = SOCKERRNO;
-#ifdef ENABLE_QUIC
- else if(conn->transport == TRNSPRT_QUIC) {
- /* pass in 'sockfd' separately since it hasn't been put into the
- tempsock array at this point */
- result = Curl_quic_connect(data, conn, sockfd, tempindex,
- &addr.sa_addr, addr.addrlen);
- if(result)
- error = SOCKERRNO;
+ if(ctx->winner) {
+ *connected = TRUE;
+ return CURLE_OK;
+ }
+
+ /* Nothing connected, check the time before we might
+ * start new ballers or return ok. */
+ if((ongoing || not_started) && Curl_timeleft(data, &now, TRUE) < 0) {
+ failf(data, "Connection timeout after %" CURL_FORMAT_CURL_OFF_T " ms",
+ Curl_timediff(now, data->progress.t_startsingle));
+ return CURLE_OPERATION_TIMEDOUT;
+ }
+
+ /* Check if we have any waiting ballers to start now. */
+ if(not_started > 0) {
+ int added = 0;
+
+ for(i = 0; i < ARRAYSIZE(ctx->baller); i++) {
+ struct eyeballer *baller = ctx->baller[i];
+
+ if(!baller || baller->has_started)
+ continue;
+ /* We start its primary baller has failed to connect or if
+ * its start delay_ms have expired */
+ if((baller->primary && baller->primary->is_done) ||
+ Curl_timediff(now, ctx->started) >= baller->delay_ms) {
+ baller_start(cf, data, baller, Curl_timeleft(data, &now, TRUE));
+ if(baller->is_done) {
+ CURL_TRC_CF(data, cf, "%s done", baller->name);
+ }
+ else {
+ CURL_TRC_CF(data, cf, "%s starting (timeout=%"
+ CURL_FORMAT_TIMEDIFF_T "ms)",
+ baller->name, baller->timeoutms);
+ ++ongoing;
+ ++added;
+ }
+ }
}
-#endif
+ if(added > 0)
+ goto evaluate;
}
- else {
- *sockp = sockfd;
+
+ if(ongoing > 0) {
+ /* We are still trying, return for more waiting */
+ *connected = FALSE;
return CURLE_OK;
}
- if(-1 == rc) {
- switch(error) {
- case EINPROGRESS:
- case EWOULDBLOCK:
-#if defined(EAGAIN)
-#if (EAGAIN) != (EWOULDBLOCK)
- /* On some platforms EAGAIN and EWOULDBLOCK are the
- * same value, and on others they are different, hence
- * the odd #if
- */
- case EAGAIN:
-#endif
-#endif
- result = CURLE_OK;
+ /* all ballers have failed to connect. */
+ CURL_TRC_CF(data, cf, "all eyeballers failed");
+ result = CURLE_COULDNT_CONNECT;
+ for(i = 0; i < ARRAYSIZE(ctx->baller); i++) {
+ struct eyeballer *baller = ctx->baller[i];
+ if(!baller)
+ continue;
+ CURL_TRC_CF(data, cf, "%s assess started=%d, result=%d",
+ baller->name, baller->has_started, baller->result);
+ if(baller->has_started && baller->result) {
+ result = baller->result;
break;
-
- default:
- /* unknown error, fallthrough and try another address! */
- infof(data, "Immediate connect fail for %s: %s",
- ipaddress, Curl_strerror(error, buffer, sizeof(buffer)));
- data->state.os_errno = error;
-
- /* connect failed */
- Curl_closesocket(data, conn, sockfd);
- result = CURLE_COULDNT_CONNECT;
}
}
- if(!result)
- *sockp = sockfd;
+#ifndef CURL_DISABLE_PROXY
+ if(conn->bits.socksproxy)
+ hostname = conn->socks_proxy.host.name;
+ else if(conn->bits.httpproxy)
+ hostname = conn->http_proxy.host.name;
+ else
+#endif
+ if(conn->bits.conn_to_host)
+ hostname = conn->conn_to_host.name;
+ else
+ hostname = conn->host.name;
+
+ failf(data, "Failed to connect to %s port %u after "
+ "%" CURL_FORMAT_TIMEDIFF_T " ms: %s",
+ hostname, conn->port,
+ Curl_timediff(now, data->progress.t_startsingle),
+ curl_easy_strerror(result));
+
+#ifdef WSAETIMEDOUT
+ if(WSAETIMEDOUT == data->state.os_errno)
+ result = CURLE_OPERATION_TIMEDOUT;
+#elif defined(ETIMEDOUT)
+ if(ETIMEDOUT == data->state.os_errno)
+ result = CURLE_OPERATION_TIMEDOUT;
+#endif
return result;
}
/*
- * TCP connect to the given host with timeout, proxy or remote doesn't matter.
- * There might be more than one IP address to try out. Fill in the passed
- * pointer with the connected socket.
+ * Connect to the given host with timeout, proxy or remote doesn't matter.
+ * There might be more than one IP address to try out.
*/
-
-CURLcode Curl_connecthost(struct Curl_easy *data,
- struct connectdata *conn, /* context */
- const struct Curl_dns_entry *remotehost)
+static CURLcode start_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ const struct Curl_dns_entry *remotehost)
{
+ struct cf_he_ctx *ctx = cf->ctx;
+ struct connectdata *conn = cf->conn;
CURLcode result = CURLE_COULDNT_CONNECT;
- int i;
+ int ai_family0, ai_family1;
timediff_t timeout_ms = Curl_timeleft(data, NULL, TRUE);
+ const struct Curl_addrinfo *addr0, *addr1;
if(timeout_ms < 0) {
/* a precaution, no need to continue if time already is up */
@@ -1398,332 +773,683 @@ CURLcode Curl_connecthost(struct Curl_easy *data,
return CURLE_OPERATION_TIMEDOUT;
}
- conn->num_addr = Curl_num_addresses(remotehost->addr);
- conn->tempaddr[0] = conn->tempaddr[1] = remotehost->addr;
- conn->tempsock[0] = conn->tempsock[1] = CURL_SOCKET_BAD;
-
- /* Max time for the next connection attempt */
- conn->timeoutms_per_addr[0] =
- conn->tempaddr[0]->ai_next == NULL ? timeout_ms : timeout_ms / 2;
- conn->timeoutms_per_addr[1] =
- conn->tempaddr[1]->ai_next == NULL ? timeout_ms : timeout_ms / 2;
+ ctx->started = Curl_now();
+ /* remotehost->addr is the list of addresses from the resolver, each
+ * with an address family. The list has at least one entry, possibly
+ * many more.
+ * We try at most 2 at a time, until we either get a connection or
+ * run out of addresses to try. Since likelihood of success is tied
+ * to the address family (e.g. IPV6 might not work at all ), we want
+ * the 2 connect attempt ballers to try different families, if possible.
+ *
+ */
if(conn->ip_version == CURL_IPRESOLVE_WHATEVER) {
/* any IP version is allowed */
- conn->tempfamily[0] = conn->tempaddr[0]?
- conn->tempaddr[0]->ai_family:0;
+ ai_family0 = remotehost->addr?
+ remotehost->addr->ai_family : 0;
#ifdef ENABLE_IPV6
- conn->tempfamily[1] = conn->tempfamily[0] == AF_INET6 ?
+ ai_family1 = ai_family0 == AF_INET6 ?
AF_INET : AF_INET6;
#else
- conn->tempfamily[1] = AF_UNSPEC;
+ ai_family1 = AF_UNSPEC;
#endif
}
else {
/* only one IP version is allowed */
- conn->tempfamily[0] = (conn->ip_version == CURL_IPRESOLVE_V4) ?
+ ai_family0 = (conn->ip_version == CURL_IPRESOLVE_V4) ?
AF_INET :
#ifdef ENABLE_IPV6
AF_INET6;
#else
AF_UNSPEC;
#endif
- conn->tempfamily[1] = AF_UNSPEC;
-
- ainext(conn, 0, FALSE); /* find first address of the right type */
+ ai_family1 = AF_UNSPEC;
}
- ainext(conn, 1, FALSE); /* assigns conn->tempaddr[1] accordingly */
-
- DEBUGF(infof(data, "family0 == %s, family1 == %s",
- conn->tempfamily[0] == AF_INET ? "v4" : "v6",
- conn->tempfamily[1] == AF_INET ? "v4" : "v6"));
+ /* Get the first address in the list that matches the family,
+ * this might give NULL, if we do not have any matches. */
+ addr0 = addr_first_match(remotehost->addr, ai_family0);
+ addr1 = addr_first_match(remotehost->addr, ai_family1);
+ if(!addr0 && addr1) {
+ /* switch around, so a single baller always uses addr0 */
+ addr0 = addr1;
+ ai_family0 = ai_family1;
+ addr1 = NULL;
+ }
- /* get through the list in family order in case of quick failures */
- for(i = 0; (i < 2) && result; i++) {
- while(conn->tempaddr[i]) {
- result = singleipconnect(data, conn, conn->tempaddr[i], i);
- if(!result)
- break;
- ainext(conn, i, TRUE);
- }
+ /* We found no address that matches our criteria, we cannot connect */
+ if(!addr0) {
+ return CURLE_COULDNT_CONNECT;
}
+
+ memset(ctx->baller, 0, sizeof(ctx->baller));
+ result = eyeballer_new(&ctx->baller[0], ctx->cf_create, addr0, ai_family0,
+ NULL, 0, /* no primary/delay, start now */
+ timeout_ms, EXPIRE_DNS_PER_NAME);
if(result)
return result;
-
- Curl_expire(data, data->set.happy_eyeballs_timeout,
- EXPIRE_HAPPY_EYEBALLS);
+ CURL_TRC_CF(data, cf, "created %s (timeout %"
+ CURL_FORMAT_TIMEDIFF_T "ms)",
+ ctx->baller[0]->name, ctx->baller[0]->timeoutms);
+ if(addr1) {
+ /* second one gets a delayed start */
+ result = eyeballer_new(&ctx->baller[1], ctx->cf_create, addr1, ai_family1,
+ ctx->baller[0], /* wait on that to fail */
+ /* or start this delayed */
+ data->set.happy_eyeballs_timeout,
+ timeout_ms, EXPIRE_DNS_PER_NAME2);
+ if(result)
+ return result;
+ CURL_TRC_CF(data, cf, "created %s (timeout %"
+ CURL_FORMAT_TIMEDIFF_T "ms)",
+ ctx->baller[1]->name, ctx->baller[1]->timeoutms);
+ Curl_expire(data, data->set.happy_eyeballs_timeout,
+ EXPIRE_HAPPY_EYEBALLS);
+ }
return CURLE_OK;
}
-struct connfind {
- long id_tofind;
- struct connectdata *found;
-};
+static void cf_he_ctx_clear(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct cf_he_ctx *ctx = cf->ctx;
+ size_t i;
-static int conn_is_conn(struct Curl_easy *data,
- struct connectdata *conn, void *param)
+ DEBUGASSERT(ctx);
+ DEBUGASSERT(data);
+ for(i = 0; i < ARRAYSIZE(ctx->baller); i++) {
+ baller_free(ctx->baller[i], data);
+ ctx->baller[i] = NULL;
+ }
+ baller_free(ctx->winner, data);
+ ctx->winner = NULL;
+}
+
+static void cf_he_adjust_pollset(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct easy_pollset *ps)
{
- struct connfind *f = (struct connfind *)param;
- (void)data;
- if(conn->connection_id == f->id_tofind) {
- f->found = conn;
- return 1;
+ struct cf_he_ctx *ctx = cf->ctx;
+ size_t i;
+
+ if(!cf->connected) {
+ for(i = 0; i < ARRAYSIZE(ctx->baller); i++) {
+ struct eyeballer *baller = ctx->baller[i];
+ if(!baller || !baller->cf)
+ continue;
+ Curl_conn_cf_adjust_pollset(baller->cf, data, ps);
+ }
+ CURL_TRC_CF(data, cf, "adjust_pollset -> %d socks", ps->num);
}
- return 0;
}
-/*
- * Used to extract socket and connectdata struct for the most recent
- * transfer on the given Curl_easy.
- *
- * The returned socket will be CURL_SOCKET_BAD in case of failure!
- */
-curl_socket_t Curl_getconnectinfo(struct Curl_easy *data,
- struct connectdata **connp)
+static CURLcode cf_he_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool blocking, bool *done)
{
- DEBUGASSERT(data);
+ struct cf_he_ctx *ctx = cf->ctx;
+ CURLcode result = CURLE_OK;
- /* this works for an easy handle:
- * - that has been used for curl_easy_perform()
- * - that is associated with a multi handle, and whose connection
- * was detached with CURLOPT_CONNECT_ONLY
- */
- if((data->state.lastconnect_id != -1) && (data->multi_easy || data->multi)) {
- struct connectdata *c;
- struct connfind find;
- find.id_tofind = data->state.lastconnect_id;
- find.found = NULL;
+ if(cf->connected) {
+ *done = TRUE;
+ return CURLE_OK;
+ }
- Curl_conncache_foreach(data,
- data->share && (data->share->specifier
- & (1<< CURL_LOCK_DATA_CONNECT))?
- &data->share->conn_cache:
- data->multi_easy?
- &data->multi_easy->conn_cache:
- &data->multi->conn_cache, &find, conn_is_conn);
+ (void)blocking; /* TODO: do we want to support this? */
+ DEBUGASSERT(ctx);
+ *done = FALSE;
- if(!find.found) {
- data->state.lastconnect_id = -1;
- return CURL_SOCKET_BAD;
- }
+ switch(ctx->state) {
+ case SCFST_INIT:
+ DEBUGASSERT(CURL_SOCKET_BAD == Curl_conn_cf_get_socket(cf, data));
+ DEBUGASSERT(!cf->connected);
+ result = start_connect(cf, data, ctx->remotehost);
+ if(result)
+ return result;
+ ctx->state = SCFST_WAITING;
+ /* FALLTHROUGH */
+ case SCFST_WAITING:
+ result = is_connected(cf, data, done);
+ if(!result && *done) {
+ DEBUGASSERT(ctx->winner);
+ DEBUGASSERT(ctx->winner->cf);
+ DEBUGASSERT(ctx->winner->cf->connected);
+ /* we have a winner. Install and activate it.
+ * close/free all others. */
+ ctx->state = SCFST_DONE;
+ cf->connected = TRUE;
+ cf->next = ctx->winner->cf;
+ ctx->winner->cf = NULL;
+ cf_he_ctx_clear(cf, data);
+ Curl_conn_cf_cntrl(cf->next, data, TRUE,
+ CF_CTRL_CONN_INFO_UPDATE, 0, NULL);
+
+ if(cf->conn->handler->protocol & PROTO_FAMILY_SSH)
+ Curl_pgrsTime(data, TIMER_APPCONNECT); /* we're connected already */
+ Curl_verboseconnect(data, cf->conn);
+ data->info.numconnects++; /* to track the # of connections made */
+ }
+ break;
+ case SCFST_DONE:
+ *done = TRUE;
+ break;
+ }
+ return result;
+}
- c = find.found;
- if(connp)
- /* only store this if the caller cares for it */
- *connp = c;
- return c->sock[FIRSTSOCKET];
+static void cf_he_close(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_he_ctx *ctx = cf->ctx;
+
+ CURL_TRC_CF(data, cf, "close");
+ cf_he_ctx_clear(cf, data);
+ cf->connected = FALSE;
+ ctx->state = SCFST_INIT;
+
+ if(cf->next) {
+ cf->next->cft->do_close(cf->next, data);
+ Curl_conn_cf_discard_chain(&cf->next, data);
}
- return CURL_SOCKET_BAD;
}
-/*
- * Check if a connection seems to be alive.
- */
-bool Curl_connalive(struct connectdata *conn)
+static bool cf_he_data_pending(struct Curl_cfilter *cf,
+ const struct Curl_easy *data)
{
- /* First determine if ssl */
- if(conn->ssl[FIRSTSOCKET].use) {
- /* use the SSL context */
- if(!Curl_ssl_check_cxn(conn))
- return false; /* FIN received */
+ struct cf_he_ctx *ctx = cf->ctx;
+ size_t i;
+
+ if(cf->connected)
+ return cf->next->cft->has_data_pending(cf->next, data);
+
+ for(i = 0; i < ARRAYSIZE(ctx->baller); i++) {
+ struct eyeballer *baller = ctx->baller[i];
+ if(!baller || !baller->cf)
+ continue;
+ if(baller->cf->cft->has_data_pending(baller->cf, data))
+ return TRUE;
}
-/* Minix 3.1 doesn't support any flags on recv; just assume socket is OK */
-#ifdef MSG_PEEK
- else if(conn->sock[FIRSTSOCKET] == CURL_SOCKET_BAD)
- return false;
- else {
- /* use the socket */
- char buf;
- if(recv((RECV_TYPE_ARG1)conn->sock[FIRSTSOCKET], (RECV_TYPE_ARG2)&buf,
- (RECV_TYPE_ARG3)1, (RECV_TYPE_ARG4)MSG_PEEK) == 0) {
- return false; /* FIN received */
+ return FALSE;
+}
+
+static struct curltime get_max_baller_time(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int query)
+{
+ struct cf_he_ctx *ctx = cf->ctx;
+ struct curltime t, tmax;
+ size_t i;
+
+ memset(&tmax, 0, sizeof(tmax));
+ for(i = 0; i < ARRAYSIZE(ctx->baller); i++) {
+ struct eyeballer *baller = ctx->baller[i];
+
+ memset(&t, 0, sizeof(t));
+ if(baller && baller->cf &&
+ !baller->cf->cft->query(baller->cf, data, query, NULL, &t)) {
+ if((t.tv_sec || t.tv_usec) && Curl_timediff_us(t, tmax) > 0)
+ tmax = t;
}
}
-#endif
- return true;
+ return tmax;
}
-/*
- * Close a socket.
- *
- * 'conn' can be NULL, beware!
- */
-int Curl_closesocket(struct Curl_easy *data, struct connectdata *conn,
- curl_socket_t sock)
+static CURLcode cf_he_query(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int query, int *pres1, void *pres2)
{
- if(conn && conn->fclosesocket) {
- if((sock == conn->sock[SECONDARYSOCKET]) && conn->bits.sock_accepted)
- /* if this socket matches the second socket, and that was created with
- accept, then we MUST NOT call the callback but clear the accepted
- status */
- conn->bits.sock_accepted = FALSE;
- else {
- int rc;
- Curl_multi_closed(data, sock);
- Curl_set_in_callback(data, true);
- rc = conn->fclosesocket(conn->closesocket_client, sock);
- Curl_set_in_callback(data, false);
- return rc;
+ struct cf_he_ctx *ctx = cf->ctx;
+
+ if(!cf->connected) {
+ switch(query) {
+ case CF_QUERY_CONNECT_REPLY_MS: {
+ int reply_ms = -1;
+ size_t i;
+
+ for(i = 0; i < ARRAYSIZE(ctx->baller); i++) {
+ struct eyeballer *baller = ctx->baller[i];
+ int breply_ms;
+
+ if(baller && baller->cf &&
+ !baller->cf->cft->query(baller->cf, data, query,
+ &breply_ms, NULL)) {
+ if(breply_ms >= 0 && (reply_ms < 0 || breply_ms < reply_ms))
+ reply_ms = breply_ms;
+ }
+ }
+ *pres1 = reply_ms;
+ CURL_TRC_CF(data, cf, "query connect reply: %dms", *pres1);
+ return CURLE_OK;
+ }
+ case CF_QUERY_TIMER_CONNECT: {
+ struct curltime *when = pres2;
+ *when = get_max_baller_time(cf, data, CF_QUERY_TIMER_CONNECT);
+ return CURLE_OK;
+ }
+ case CF_QUERY_TIMER_APPCONNECT: {
+ struct curltime *when = pres2;
+ *when = get_max_baller_time(cf, data, CF_QUERY_TIMER_APPCONNECT);
+ return CURLE_OK;
+ }
+ default:
+ break;
}
}
- if(conn)
- /* tell the multi-socket code about this */
- Curl_multi_closed(data, sock);
+ return cf->next?
+ cf->next->cft->query(cf->next, data, query, pres1, pres2) :
+ CURLE_UNKNOWN_OPTION;
+}
- sclose(sock);
+static void cf_he_destroy(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct cf_he_ctx *ctx = cf->ctx;
- return 0;
+ CURL_TRC_CF(data, cf, "destroy");
+ if(ctx) {
+ cf_he_ctx_clear(cf, data);
+ }
+ /* release any resources held in state */
+ Curl_safefree(ctx);
}
-/*
- * Create a socket based on info from 'conn' and 'ai'.
- *
- * 'addr' should be a pointer to the correct struct to get data back, or NULL.
- * 'sockfd' must be a pointer to a socket descriptor.
- *
- * If the open socket callback is set, used that!
- *
+struct Curl_cftype Curl_cft_happy_eyeballs = {
+ "HAPPY-EYEBALLS",
+ 0,
+ CURL_LOG_LVL_NONE,
+ cf_he_destroy,
+ cf_he_connect,
+ cf_he_close,
+ Curl_cf_def_get_host,
+ cf_he_adjust_pollset,
+ cf_he_data_pending,
+ Curl_cf_def_send,
+ Curl_cf_def_recv,
+ Curl_cf_def_cntrl,
+ Curl_cf_def_conn_is_alive,
+ Curl_cf_def_conn_keep_alive,
+ cf_he_query,
+};
+
+/**
+ * Create a happy eyeball connection filter that uses the, once resolved,
+ * address information to connect on ip families based on connection
+ * configuration.
+ * @param pcf output, the created cfilter
+ * @param data easy handle used in creation
+ * @param conn connection the filter is created for
+ * @param cf_create method to create the sub-filters performing the
+ * actual connects.
*/
-CURLcode Curl_socket(struct Curl_easy *data,
- const struct Curl_addrinfo *ai,
- struct Curl_sockaddr_ex *addr,
- curl_socket_t *sockfd)
+static CURLcode
+cf_happy_eyeballs_create(struct Curl_cfilter **pcf,
+ struct Curl_easy *data,
+ struct connectdata *conn,
+ cf_ip_connect_create *cf_create,
+ const struct Curl_dns_entry *remotehost,
+ int transport)
{
- struct connectdata *conn = data->conn;
- struct Curl_sockaddr_ex dummy;
-
- if(!addr)
- /* if the caller doesn't want info back, use a local temp copy */
- addr = &dummy;
-
- /*
- * The Curl_sockaddr_ex structure is basically libcurl's external API
- * curl_sockaddr structure with enough space available to directly hold
- * any protocol-specific address structures. The variable declared here
- * will be used to pass / receive data to/from the fopensocket callback
- * if this has been set, before that, it is initialized from parameters.
- */
+ struct cf_he_ctx *ctx = NULL;
+ CURLcode result;
- addr->family = ai->ai_family;
- switch(conn->transport) {
- case TRNSPRT_TCP:
- addr->socktype = SOCK_STREAM;
- addr->protocol = IPPROTO_TCP;
- break;
- case TRNSPRT_UNIX:
- addr->socktype = SOCK_STREAM;
- addr->protocol = IPPROTO_IP;
- break;
- default: /* UDP and QUIC */
- addr->socktype = SOCK_DGRAM;
- addr->protocol = IPPROTO_UDP;
- break;
+ (void)data;
+ (void)conn;
+ *pcf = NULL;
+ ctx = calloc(1, sizeof(*ctx));
+ if(!ctx) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
}
- addr->addrlen = ai->ai_addrlen;
-
- if(addr->addrlen > sizeof(struct Curl_sockaddr_storage))
- addr->addrlen = sizeof(struct Curl_sockaddr_storage);
- memcpy(&addr->sa_addr, ai->ai_addr, addr->addrlen);
-
- if(data->set.fopensocket) {
- /*
- * If the opensocket callback is set, all the destination address
- * information is passed to the callback. Depending on this information the
- * callback may opt to abort the connection, this is indicated returning
- * CURL_SOCKET_BAD; otherwise it will return a not-connected socket. When
- * the callback returns a valid socket the destination address information
- * might have been changed and this 'new' address will actually be used
- * here to connect.
- */
- Curl_set_in_callback(data, true);
- *sockfd = data->set.fopensocket(data->set.opensocket_client,
- CURLSOCKTYPE_IPCXN,
- (struct curl_sockaddr *)addr);
- Curl_set_in_callback(data, false);
+ ctx->transport = transport;
+ ctx->cf_create = cf_create;
+ ctx->remotehost = remotehost;
+
+ result = Curl_cf_create(pcf, &Curl_cft_happy_eyeballs, ctx);
+
+out:
+ if(result) {
+ Curl_safefree(*pcf);
+ Curl_safefree(ctx);
}
- else
- /* opensocket callback not set, so simply create the socket now */
- *sockfd = socket(addr->family, addr->socktype, addr->protocol);
+ return result;
+}
- if(*sockfd == CURL_SOCKET_BAD)
- /* no socket, no connection */
- return CURLE_COULDNT_CONNECT;
+struct transport_provider {
+ int transport;
+ cf_ip_connect_create *cf_create;
+};
- if(conn->transport == TRNSPRT_QUIC) {
- /* QUIC sockets need to be nonblocking */
- (void)curlx_nonblock(*sockfd, TRUE);
- switch(addr->family) {
-#if defined(__linux__) && defined(IP_MTU_DISCOVER)
- case AF_INET: {
- int val = IP_PMTUDISC_DO;
- (void)setsockopt(*sockfd, IPPROTO_IP, IP_MTU_DISCOVER, &val,
- sizeof(val));
- break;
- }
+static
+#ifndef DEBUGBUILD
+const
#endif
-#if defined(__linux__) && defined(IPV6_MTU_DISCOVER)
- case AF_INET6: {
- int val = IPV6_PMTUDISC_DO;
- (void)setsockopt(*sockfd, IPPROTO_IPV6, IPV6_MTU_DISCOVER, &val,
- sizeof(val));
- break;
- }
+struct transport_provider transport_providers[] = {
+ { TRNSPRT_TCP, Curl_cf_tcp_create },
+#ifdef ENABLE_QUIC
+ { TRNSPRT_QUIC, Curl_cf_quic_create },
+#endif
+#ifndef CURL_DISABLE_TFTP
+ { TRNSPRT_UDP, Curl_cf_udp_create },
+#endif
+#ifdef USE_UNIX_SOCKETS
+ { TRNSPRT_UNIX, Curl_cf_unix_create },
#endif
+};
+
+static cf_ip_connect_create *get_cf_create(int transport)
+{
+ size_t i;
+ for(i = 0; i < ARRAYSIZE(transport_providers); ++i) {
+ if(transport == transport_providers[i].transport)
+ return transport_providers[i].cf_create;
+ }
+ return NULL;
+}
+
+static CURLcode cf_he_insert_after(struct Curl_cfilter *cf_at,
+ struct Curl_easy *data,
+ const struct Curl_dns_entry *remotehost,
+ int transport)
+{
+ cf_ip_connect_create *cf_create;
+ struct Curl_cfilter *cf;
+ CURLcode result;
+
+ /* Need to be first */
+ DEBUGASSERT(cf_at);
+ cf_create = get_cf_create(transport);
+ if(!cf_create) {
+ CURL_TRC_CF(data, cf_at, "unsupported transport type %d", transport);
+ return CURLE_UNSUPPORTED_PROTOCOL;
+ }
+ result = cf_happy_eyeballs_create(&cf, data, cf_at->conn,
+ cf_create, remotehost,
+ transport);
+ if(result)
+ return result;
+
+ Curl_conn_cf_insert_after(cf_at, cf);
+ return CURLE_OK;
+}
+
+typedef enum {
+ CF_SETUP_INIT,
+ CF_SETUP_CNNCT_EYEBALLS,
+ CF_SETUP_CNNCT_SOCKS,
+ CF_SETUP_CNNCT_HTTP_PROXY,
+ CF_SETUP_CNNCT_HAPROXY,
+ CF_SETUP_CNNCT_SSL,
+ CF_SETUP_DONE
+} cf_setup_state;
+
+struct cf_setup_ctx {
+ cf_setup_state state;
+ const struct Curl_dns_entry *remotehost;
+ int ssl_mode;
+ int transport;
+};
+
+static CURLcode cf_setup_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool blocking, bool *done)
+{
+ struct cf_setup_ctx *ctx = cf->ctx;
+ CURLcode result = CURLE_OK;
+
+ if(cf->connected) {
+ *done = TRUE;
+ return CURLE_OK;
+ }
+
+ /* connect current sub-chain */
+connect_sub_chain:
+ if(cf->next && !cf->next->connected) {
+ result = Curl_conn_cf_connect(cf->next, data, blocking, done);
+ if(result || !*done)
+ return result;
+ }
+
+ if(ctx->state < CF_SETUP_CNNCT_EYEBALLS) {
+ result = cf_he_insert_after(cf, data, ctx->remotehost, ctx->transport);
+ if(result)
+ return result;
+ ctx->state = CF_SETUP_CNNCT_EYEBALLS;
+ if(!cf->next || !cf->next->connected)
+ goto connect_sub_chain;
+ }
+
+ /* sub-chain connected, do we need to add more? */
+#ifndef CURL_DISABLE_PROXY
+ if(ctx->state < CF_SETUP_CNNCT_SOCKS && cf->conn->bits.socksproxy) {
+ result = Curl_cf_socks_proxy_insert_after(cf, data);
+ if(result)
+ return result;
+ ctx->state = CF_SETUP_CNNCT_SOCKS;
+ if(!cf->next || !cf->next->connected)
+ goto connect_sub_chain;
+ }
+
+ if(ctx->state < CF_SETUP_CNNCT_HTTP_PROXY && cf->conn->bits.httpproxy) {
+#ifdef USE_SSL
+ if(IS_HTTPS_PROXY(cf->conn->http_proxy.proxytype)
+ && !Curl_conn_is_ssl(cf->conn, cf->sockindex)) {
+ result = Curl_cf_ssl_proxy_insert_after(cf, data);
+ if(result)
+ return result;
+ }
+#endif /* USE_SSL */
+
+#if !defined(CURL_DISABLE_HTTP)
+ if(cf->conn->bits.tunnel_proxy) {
+ result = Curl_cf_http_proxy_insert_after(cf, data);
+ if(result)
+ return result;
}
+#endif /* !CURL_DISABLE_HTTP */
+ ctx->state = CF_SETUP_CNNCT_HTTP_PROXY;
+ if(!cf->next || !cf->next->connected)
+ goto connect_sub_chain;
+ }
+#endif /* !CURL_DISABLE_PROXY */
+
+ if(ctx->state < CF_SETUP_CNNCT_HAPROXY) {
+#if !defined(CURL_DISABLE_PROXY)
+ if(data->set.haproxyprotocol) {
+ if(Curl_conn_is_ssl(cf->conn, cf->sockindex)) {
+ failf(data, "haproxy protocol not support with SSL "
+ "encryption in place (QUIC?)");
+ return CURLE_UNSUPPORTED_PROTOCOL;
+ }
+ result = Curl_cf_haproxy_insert_after(cf, data);
+ if(result)
+ return result;
+ }
+#endif /* !CURL_DISABLE_PROXY */
+ ctx->state = CF_SETUP_CNNCT_HAPROXY;
+ if(!cf->next || !cf->next->connected)
+ goto connect_sub_chain;
}
-#if defined(ENABLE_IPV6) && defined(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID)
- if(conn->scope_id && (addr->family == AF_INET6)) {
- struct sockaddr_in6 * const sa6 = (void *)&addr->sa_addr;
- sa6->sin6_scope_id = conn->scope_id;
+ if(ctx->state < CF_SETUP_CNNCT_SSL) {
+#ifdef USE_SSL
+ if((ctx->ssl_mode == CURL_CF_SSL_ENABLE
+ || (ctx->ssl_mode != CURL_CF_SSL_DISABLE
+ && cf->conn->handler->flags & PROTOPT_SSL)) /* we want SSL */
+ && !Curl_conn_is_ssl(cf->conn, cf->sockindex)) { /* it is missing */
+ result = Curl_cf_ssl_insert_after(cf, data);
+ if(result)
+ return result;
+ }
+#endif /* USE_SSL */
+ ctx->state = CF_SETUP_CNNCT_SSL;
+ if(!cf->next || !cf->next->connected)
+ goto connect_sub_chain;
}
-#endif
+ ctx->state = CF_SETUP_DONE;
+ cf->connected = TRUE;
+ *done = TRUE;
return CURLE_OK;
}
-/*
- * Curl_conncontrol() marks streams or connection for closure.
- */
-void Curl_conncontrol(struct connectdata *conn,
- int ctrl /* see defines in header */
-#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
- , const char *reason
-#endif
- )
+static void cf_setup_close(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
- /* close if a connection, or a stream that isn't multiplexed. */
- /* This function will be called both before and after this connection is
- associated with a transfer. */
- bool closeit;
- DEBUGASSERT(conn);
-#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
- (void)reason; /* useful for debugging */
-#endif
- closeit = (ctrl == CONNCTRL_CONNECTION) ||
- ((ctrl == CONNCTRL_STREAM) && !(conn->handler->flags & PROTOPT_STREAM));
- if((ctrl == CONNCTRL_STREAM) &&
- (conn->handler->flags & PROTOPT_STREAM))
- ;
- else if((bit)closeit != conn->bits.close) {
- conn->bits.close = closeit; /* the only place in the source code that
- should assign this bit */
+ struct cf_setup_ctx *ctx = cf->ctx;
+
+ CURL_TRC_CF(data, cf, "close");
+ cf->connected = FALSE;
+ ctx->state = CF_SETUP_INIT;
+
+ if(cf->next) {
+ cf->next->cft->do_close(cf->next, data);
+ Curl_conn_cf_discard_chain(&cf->next, data);
}
}
-/* Data received can be cached at various levels, so check them all here. */
-bool Curl_conn_data_pending(struct connectdata *conn, int sockindex)
+static void cf_setup_destroy(struct Curl_cfilter *cf, struct Curl_easy *data)
{
- int readable;
- DEBUGASSERT(conn);
+ struct cf_setup_ctx *ctx = cf->ctx;
+
+ (void)data;
+ CURL_TRC_CF(data, cf, "destroy");
+ Curl_safefree(ctx);
+}
+
+
+struct Curl_cftype Curl_cft_setup = {
+ "SETUP",
+ 0,
+ CURL_LOG_LVL_NONE,
+ cf_setup_destroy,
+ cf_setup_connect,
+ cf_setup_close,
+ Curl_cf_def_get_host,
+ Curl_cf_def_adjust_pollset,
+ Curl_cf_def_data_pending,
+ Curl_cf_def_send,
+ Curl_cf_def_recv,
+ Curl_cf_def_cntrl,
+ Curl_cf_def_conn_is_alive,
+ Curl_cf_def_conn_keep_alive,
+ Curl_cf_def_query,
+};
+
+static CURLcode cf_setup_create(struct Curl_cfilter **pcf,
+ struct Curl_easy *data,
+ const struct Curl_dns_entry *remotehost,
+ int transport,
+ int ssl_mode)
+{
+ struct Curl_cfilter *cf = NULL;
+ struct cf_setup_ctx *ctx;
+ CURLcode result = CURLE_OK;
- if(Curl_ssl_data_pending(conn, sockindex) ||
- Curl_recv_has_postponed_data(conn, sockindex))
- return true;
+ (void)data;
+ ctx = calloc(1, sizeof(*ctx));
+ if(!ctx) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
+ }
+ ctx->state = CF_SETUP_INIT;
+ ctx->remotehost = remotehost;
+ ctx->ssl_mode = ssl_mode;
+ ctx->transport = transport;
+
+ result = Curl_cf_create(&cf, &Curl_cft_setup, ctx);
+ if(result)
+ goto out;
+ ctx = NULL;
+
+out:
+ *pcf = result? NULL : cf;
+ free(ctx);
+ return result;
+}
- readable = SOCKET_READABLE(conn->sock[sockindex], 0);
- return (readable > 0 && (readable & CURL_CSELECT_IN));
+static CURLcode cf_setup_add(struct Curl_easy *data,
+ struct connectdata *conn,
+ int sockindex,
+ const struct Curl_dns_entry *remotehost,
+ int transport,
+ int ssl_mode)
+{
+ struct Curl_cfilter *cf;
+ CURLcode result = CURLE_OK;
+
+ DEBUGASSERT(data);
+ result = cf_setup_create(&cf, data, remotehost, transport, ssl_mode);
+ if(result)
+ goto out;
+ Curl_conn_cf_add(data, conn, sockindex, cf);
+out:
+ return result;
+}
+
+#ifdef DEBUGBUILD
+/* used by unit2600.c */
+void Curl_debug_set_transport_provider(int transport,
+ cf_ip_connect_create *cf_create)
+{
+ size_t i;
+ for(i = 0; i < ARRAYSIZE(transport_providers); ++i) {
+ if(transport == transport_providers[i].transport) {
+ transport_providers[i].cf_create = cf_create;
+ return;
+ }
+ }
+}
+#endif /* DEBUGBUILD */
+
+CURLcode Curl_cf_setup_insert_after(struct Curl_cfilter *cf_at,
+ struct Curl_easy *data,
+ const struct Curl_dns_entry *remotehost,
+ int transport,
+ int ssl_mode)
+{
+ struct Curl_cfilter *cf;
+ CURLcode result;
+
+ DEBUGASSERT(data);
+ result = cf_setup_create(&cf, data, remotehost, transport, ssl_mode);
+ if(result)
+ goto out;
+ Curl_conn_cf_insert_after(cf_at, cf);
+out:
+ return result;
+}
+
+CURLcode Curl_conn_setup(struct Curl_easy *data,
+ struct connectdata *conn,
+ int sockindex,
+ const struct Curl_dns_entry *remotehost,
+ int ssl_mode)
+{
+ CURLcode result = CURLE_OK;
+
+ DEBUGASSERT(data);
+ DEBUGASSERT(conn->handler);
+
+#if !defined(CURL_DISABLE_HTTP) && !defined(USE_HYPER)
+ if(!conn->cfilter[sockindex] &&
+ conn->handler->protocol == CURLPROTO_HTTPS) {
+ DEBUGASSERT(ssl_mode != CURL_CF_SSL_DISABLE);
+ result = Curl_cf_https_setup(data, conn, sockindex, remotehost);
+ if(result)
+ goto out;
+ }
+#endif /* !defined(CURL_DISABLE_HTTP) && !defined(USE_HYPER) */
+
+ /* Still no cfilter set, apply default. */
+ if(!conn->cfilter[sockindex]) {
+ result = cf_setup_add(data, conn, sockindex, remotehost,
+ conn->transport, ssl_mode);
+ if(result)
+ goto out;
+ }
+
+ DEBUGASSERT(conn->cfilter[sockindex]);
+out:
+ return result;
}
diff --git a/lib/connect.h b/lib/connect.h
index 582ff0813..58264bdba 100644
--- a/lib/connect.h
+++ b/lib/connect.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -29,14 +29,7 @@
#include "sockaddr.h"
#include "timeval.h"
-CURLcode Curl_is_connected(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex,
- bool *connected);
-
-CURLcode Curl_connecthost(struct Curl_easy *data,
- struct connectdata *conn,
- const struct Curl_dns_entry *host);
+struct Curl_dns_entry;
/* generic function that returns how much time there's left to run, according
to the timeouts set */
@@ -58,67 +51,8 @@ curl_socket_t Curl_getconnectinfo(struct Curl_easy *data,
bool Curl_addr2string(struct sockaddr *sa, curl_socklen_t salen,
char *addr, int *port);
-/*
- * Check if a connection seems to be alive.
- */
-bool Curl_connalive(struct connectdata *conn);
-
-#ifdef USE_WINSOCK
-/* When you run a program that uses the Windows Sockets API, you may
- experience slow performance when you copy data to a TCP server.
-
- https://support.microsoft.com/kb/823764
-
- Work-around: Make the Socket Send Buffer Size Larger Than the Program Send
- Buffer Size
-
-*/
-void Curl_sndbufset(curl_socket_t sockfd);
-#else
-#define Curl_sndbufset(y) Curl_nop_stmt
-#endif
-
-void Curl_updateconninfo(struct Curl_easy *data, struct connectdata *conn,
- curl_socket_t sockfd);
-void Curl_conninfo_remote(struct Curl_easy *data, struct connectdata *conn,
- curl_socket_t sockfd);
-void Curl_conninfo_local(struct Curl_easy *data, curl_socket_t sockfd,
- char *local_ip, int *local_port);
void Curl_persistconninfo(struct Curl_easy *data, struct connectdata *conn,
char *local_ip, int local_port);
-int Curl_closesocket(struct Curl_easy *data, struct connectdata *conn,
- curl_socket_t sock);
-
-/*
- * The Curl_sockaddr_ex structure is basically libcurl's external API
- * curl_sockaddr structure with enough space available to directly hold any
- * protocol-specific address structures. The variable declared here will be
- * used to pass / receive data to/from the fopensocket callback if this has
- * been set, before that, it is initialized from parameters.
- */
-struct Curl_sockaddr_ex {
- int family;
- int socktype;
- int protocol;
- unsigned int addrlen;
- union {
- struct sockaddr addr;
- struct Curl_sockaddr_storage buff;
- } _sa_ex_u;
-};
-#define sa_addr _sa_ex_u.addr
-
-/*
- * Create a socket based on info from 'conn' and 'ai'.
- *
- * Fill in 'addr' and 'sockfd' accordingly if OK is returned. If the open
- * socket callback is set, used that!
- *
- */
-CURLcode Curl_socket(struct Curl_easy *data,
- const struct Curl_addrinfo *ai,
- struct Curl_sockaddr_ex *addr,
- curl_socket_t *sockfd);
/*
* Curl_conncontrol() marks the end of a connection/stream. The 'closeit'
@@ -153,6 +87,46 @@ void Curl_conncontrol(struct connectdata *conn,
#define connkeep(x,y) Curl_conncontrol(x, CONNCTRL_KEEP)
#endif
-bool Curl_conn_data_pending(struct connectdata *conn, int sockindex);
+/**
+ * Create a cfilter for making an "ip" connection to the
+ * given address, using parameters from `conn`. The "ip" connection
+ * can be a TCP socket, a UDP socket or even a QUIC connection.
+ *
+ * It MUST use only the supplied `ai` for its connection attempt.
+ *
+ * Such a filter may be used in "happy eyeball" scenarios, and its
+ * `connect` implementation needs to support non-blocking. Once connected,
+ * it MAY be installed in the connection filter chain to serve transfers.
+ */
+typedef CURLcode cf_ip_connect_create(struct Curl_cfilter **pcf,
+ struct Curl_easy *data,
+ struct connectdata *conn,
+ const struct Curl_addrinfo *ai,
+ int transport);
+
+CURLcode Curl_cf_setup_insert_after(struct Curl_cfilter *cf_at,
+ struct Curl_easy *data,
+ const struct Curl_dns_entry *remotehost,
+ int transport,
+ int ssl_mode);
+
+/**
+ * Setup the cfilters at `sockindex` in connection `conn`.
+ * If no filter chain is installed yet, inspects the configuration
+ * in `data` and `conn? to install a suitable filter chain.
+ */
+CURLcode Curl_conn_setup(struct Curl_easy *data,
+ struct connectdata *conn,
+ int sockindex,
+ const struct Curl_dns_entry *remotehost,
+ int ssl_mode);
+
+extern struct Curl_cftype Curl_cft_happy_eyeballs;
+extern struct Curl_cftype Curl_cft_setup;
+
+#ifdef DEBUGBUILD
+void Curl_debug_set_transport_provider(int transport,
+ cf_ip_connect_create *cf_create);
+#endif
#endif /* HEADER_CURL_CONNECT_H */
diff --git a/lib/content_encoding.c b/lib/content_encoding.c
index bfc13e254..4167d4d68 100644
--- a/lib/content_encoding.c
+++ b/lib/content_encoding.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -33,7 +33,15 @@
#endif
#ifdef HAVE_BROTLI
+#if defined(__GNUC__)
+/* Ignore -Wvla warnings in brotli headers */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+#endif
#include <brotli/decode.h>
+#if defined(__GNUC__)
+#pragma GCC diagnostic pop
+#endif
#endif
#ifdef HAVE_ZSTD
@@ -45,6 +53,9 @@
#include "content_encoding.h"
#include "strdup.h"
#include "strcase.h"
+
+/* The last 3 #include files should be in this order */
+#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"
@@ -52,6 +63,9 @@
#ifndef CURL_DISABLE_HTTP
+/* allow no more than 5 "chained" compression steps */
+#define MAX_ENCODE_STACK 5
+
#define DSIZ CURL_MAX_WRITE_SIZE /* buffer size for decompressed data */
@@ -84,7 +98,7 @@ typedef enum {
/* Deflate and gzip writer. */
struct zlib_writer {
- struct contenc_writer super;
+ struct Curl_cwriter super;
zlibInitState zlib_init; /* zlib init state */
uInt trailerlen; /* Remaining trailer byte count. */
z_stream z; /* State structure for zlib. */
@@ -160,7 +174,7 @@ static CURLcode process_trailer(struct Curl_easy *data,
}
static CURLcode inflate_stream(struct Curl_easy *data,
- struct contenc_writer *writer,
+ struct Curl_cwriter *writer, int type,
zlibInitState started)
{
struct zlib_writer *zp = (struct zlib_writer *) writer;
@@ -185,7 +199,7 @@ static CURLcode inflate_stream(struct Curl_easy *data,
return exit_zlib(data, z, &zp->zlib_init, CURLE_OUT_OF_MEMORY);
/* because the buffer size is fixed, iteratively decompress and transfer to
- the client via downstream_write function. */
+ the client via next_write function. */
while(!done) {
int status; /* zlib status */
done = TRUE;
@@ -206,7 +220,7 @@ static CURLcode inflate_stream(struct Curl_easy *data,
if(z->avail_out != DSIZ) {
if(status == Z_OK || status == Z_STREAM_END) {
zp->zlib_init = started; /* Data started. */
- result = Curl_unencode_write(data, writer->downstream, decomp,
+ result = Curl_cwriter_write(data, writer->next, type, decomp,
DSIZ - z->avail_out);
if(result) {
exit_zlib(data, z, &zp->zlib_init, result);
@@ -263,15 +277,12 @@ static CURLcode inflate_stream(struct Curl_easy *data,
/* Deflate handler. */
-static CURLcode deflate_init_writer(struct Curl_easy *data,
- struct contenc_writer *writer)
+static CURLcode deflate_do_init(struct Curl_easy *data,
+ struct Curl_cwriter *writer)
{
struct zlib_writer *zp = (struct zlib_writer *) writer;
z_stream *z = &zp->z; /* zlib state structure */
- if(!writer->downstream)
- return CURLE_WRITE_ERROR;
-
/* Initialize zlib */
z->zalloc = (alloc_func) zalloc_cb;
z->zfree = (free_func) zfree_cb;
@@ -282,13 +293,16 @@ static CURLcode deflate_init_writer(struct Curl_easy *data,
return CURLE_OK;
}
-static CURLcode deflate_unencode_write(struct Curl_easy *data,
- struct contenc_writer *writer,
+static CURLcode deflate_do_write(struct Curl_easy *data,
+ struct Curl_cwriter *writer, int type,
const char *buf, size_t nbytes)
{
struct zlib_writer *zp = (struct zlib_writer *) writer;
z_stream *z = &zp->z; /* zlib state structure */
+ if(!(type & CLIENTWRITE_BODY))
+ return Curl_cwriter_write(data, writer->next, type, buf, nbytes);
+
/* Set the compressed input when this function is called */
z->next_in = (Bytef *) buf;
z->avail_in = (uInt) nbytes;
@@ -297,11 +311,11 @@ static CURLcode deflate_unencode_write(struct Curl_easy *data,
return process_trailer(data, zp);
/* Now uncompress the data */
- return inflate_stream(data, writer, ZLIB_INFLATING);
+ return inflate_stream(data, writer, type, ZLIB_INFLATING);
}
-static void deflate_close_writer(struct Curl_easy *data,
- struct contenc_writer *writer)
+static void deflate_do_close(struct Curl_easy *data,
+ struct Curl_cwriter *writer)
{
struct zlib_writer *zp = (struct zlib_writer *) writer;
z_stream *z = &zp->z; /* zlib state structure */
@@ -309,26 +323,23 @@ static void deflate_close_writer(struct Curl_easy *data,
exit_zlib(data, z, &zp->zlib_init, CURLE_OK);
}
-static const struct content_encoding deflate_encoding = {
+static const struct Curl_cwtype deflate_encoding = {
"deflate",
NULL,
- deflate_init_writer,
- deflate_unencode_write,
- deflate_close_writer,
+ deflate_do_init,
+ deflate_do_write,
+ deflate_do_close,
sizeof(struct zlib_writer)
};
/* Gzip handler. */
-static CURLcode gzip_init_writer(struct Curl_easy *data,
- struct contenc_writer *writer)
+static CURLcode gzip_do_init(struct Curl_easy *data,
+ struct Curl_cwriter *writer)
{
struct zlib_writer *zp = (struct zlib_writer *) writer;
z_stream *z = &zp->z; /* zlib state structure */
- if(!writer->downstream)
- return CURLE_WRITE_ERROR;
-
/* Initialize zlib */
z->zalloc = (alloc_func) zalloc_cb;
z->zfree = (free_func) zfree_cb;
@@ -436,19 +447,22 @@ static enum {
}
#endif
-static CURLcode gzip_unencode_write(struct Curl_easy *data,
- struct contenc_writer *writer,
+static CURLcode gzip_do_write(struct Curl_easy *data,
+ struct Curl_cwriter *writer, int type,
const char *buf, size_t nbytes)
{
struct zlib_writer *zp = (struct zlib_writer *) writer;
z_stream *z = &zp->z; /* zlib state structure */
+ if(!(type & CLIENTWRITE_BODY))
+ return Curl_cwriter_write(data, writer->next, type, buf, nbytes);
+
if(zp->zlib_init == ZLIB_INIT_GZIP) {
/* Let zlib handle the gzip decompression entirely */
z->next_in = (Bytef *) buf;
z->avail_in = (uInt) nbytes;
/* Now uncompress the data */
- return inflate_stream(data, writer, ZLIB_INIT_GZIP);
+ return inflate_stream(data, writer, type, ZLIB_INIT_GZIP);
}
#ifndef OLD_ZLIB_SUPPORT
@@ -560,12 +574,12 @@ static CURLcode gzip_unencode_write(struct Curl_easy *data,
}
/* We've parsed the header, now uncompress the data */
- return inflate_stream(data, writer, ZLIB_GZIP_INFLATING);
+ return inflate_stream(data, writer, type, ZLIB_GZIP_INFLATING);
#endif
}
-static void gzip_close_writer(struct Curl_easy *data,
- struct contenc_writer *writer)
+static void gzip_do_close(struct Curl_easy *data,
+ struct Curl_cwriter *writer)
{
struct zlib_writer *zp = (struct zlib_writer *) writer;
z_stream *z = &zp->z; /* zlib state structure */
@@ -573,12 +587,12 @@ static void gzip_close_writer(struct Curl_easy *data,
exit_zlib(data, z, &zp->zlib_init, CURLE_OK);
}
-static const struct content_encoding gzip_encoding = {
+static const struct Curl_cwtype gzip_encoding = {
"gzip",
"x-gzip",
- gzip_init_writer,
- gzip_unencode_write,
- gzip_close_writer,
+ gzip_do_init,
+ gzip_do_write,
+ gzip_do_close,
sizeof(struct zlib_writer)
};
@@ -588,7 +602,7 @@ static const struct content_encoding gzip_encoding = {
#ifdef HAVE_BROTLI
/* Brotli writer. */
struct brotli_writer {
- struct contenc_writer super;
+ struct Curl_cwriter super;
BrotliDecoderState *br; /* State structure for brotli. */
};
@@ -630,21 +644,18 @@ static CURLcode brotli_map_error(BrotliDecoderErrorCode be)
return CURLE_WRITE_ERROR;
}
-static CURLcode brotli_init_writer(struct Curl_easy *data,
- struct contenc_writer *writer)
+static CURLcode brotli_do_init(struct Curl_easy *data,
+ struct Curl_cwriter *writer)
{
struct brotli_writer *bp = (struct brotli_writer *) writer;
(void) data;
- if(!writer->downstream)
- return CURLE_WRITE_ERROR;
-
bp->br = BrotliDecoderCreateInstance(NULL, NULL, NULL);
return bp->br? CURLE_OK: CURLE_OUT_OF_MEMORY;
}
-static CURLcode brotli_unencode_write(struct Curl_easy *data,
- struct contenc_writer *writer,
+static CURLcode brotli_do_write(struct Curl_easy *data,
+ struct Curl_cwriter *writer, int type,
const char *buf, size_t nbytes)
{
struct brotli_writer *bp = (struct brotli_writer *) writer;
@@ -655,6 +666,9 @@ static CURLcode brotli_unencode_write(struct Curl_easy *data,
CURLcode result = CURLE_OK;
BrotliDecoderResult r = BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT;
+ if(!(type & CLIENTWRITE_BODY))
+ return Curl_cwriter_write(data, writer->next, type, buf, nbytes);
+
if(!bp->br)
return CURLE_WRITE_ERROR; /* Stream already ended. */
@@ -668,7 +682,7 @@ static CURLcode brotli_unencode_write(struct Curl_easy *data,
dstleft = DSIZ;
r = BrotliDecoderDecompressStream(bp->br,
&nbytes, &src, &dstleft, &dst, NULL);
- result = Curl_unencode_write(data, writer->downstream,
+ result = Curl_cwriter_write(data, writer->next, type,
decomp, DSIZ - dstleft);
if(result)
break;
@@ -691,8 +705,8 @@ static CURLcode brotli_unencode_write(struct Curl_easy *data,
return result;
}
-static void brotli_close_writer(struct Curl_easy *data,
- struct contenc_writer *writer)
+static void brotli_do_close(struct Curl_easy *data,
+ struct Curl_cwriter *writer)
{
struct brotli_writer *bp = (struct brotli_writer *) writer;
@@ -704,12 +718,12 @@ static void brotli_close_writer(struct Curl_easy *data,
}
}
-static const struct content_encoding brotli_encoding = {
+static const struct Curl_cwtype brotli_encoding = {
"br",
NULL,
- brotli_init_writer,
- brotli_unencode_write,
- brotli_close_writer,
+ brotli_do_init,
+ brotli_do_write,
+ brotli_do_close,
sizeof(struct brotli_writer)
};
#endif
@@ -718,28 +732,25 @@ static const struct content_encoding brotli_encoding = {
#ifdef HAVE_ZSTD
/* Zstd writer. */
struct zstd_writer {
- struct contenc_writer super;
+ struct Curl_cwriter super;
ZSTD_DStream *zds; /* State structure for zstd. */
void *decomp;
};
-static CURLcode zstd_init_writer(struct Curl_easy *data,
- struct contenc_writer *writer)
+static CURLcode zstd_do_init(struct Curl_easy *data,
+ struct Curl_cwriter *writer)
{
struct zstd_writer *zp = (struct zstd_writer *) writer;
(void)data;
- if(!writer->downstream)
- return CURLE_WRITE_ERROR;
-
zp->zds = ZSTD_createDStream();
zp->decomp = NULL;
return zp->zds ? CURLE_OK : CURLE_OUT_OF_MEMORY;
}
-static CURLcode zstd_unencode_write(struct Curl_easy *data,
- struct contenc_writer *writer,
+static CURLcode zstd_do_write(struct Curl_easy *data,
+ struct Curl_cwriter *writer, int type,
const char *buf, size_t nbytes)
{
CURLcode result = CURLE_OK;
@@ -748,6 +759,9 @@ static CURLcode zstd_unencode_write(struct Curl_easy *data,
ZSTD_outBuffer out;
size_t errorCode;
+ if(!(type & CLIENTWRITE_BODY))
+ return Curl_cwriter_write(data, writer->next, type, buf, nbytes);
+
if(!zp->decomp) {
zp->decomp = malloc(DSIZ);
if(!zp->decomp)
@@ -767,7 +781,7 @@ static CURLcode zstd_unencode_write(struct Curl_easy *data,
return CURLE_BAD_CONTENT_ENCODING;
}
if(out.pos > 0) {
- result = Curl_unencode_write(data, writer->downstream,
+ result = Curl_cwriter_write(data, writer->next, type,
zp->decomp, out.pos);
if(result)
break;
@@ -779,8 +793,8 @@ static CURLcode zstd_unencode_write(struct Curl_easy *data,
return result;
}
-static void zstd_close_writer(struct Curl_easy *data,
- struct contenc_writer *writer)
+static void zstd_do_close(struct Curl_easy *data,
+ struct Curl_cwriter *writer)
{
struct zstd_writer *zp = (struct zstd_writer *) writer;
@@ -796,51 +810,30 @@ static void zstd_close_writer(struct Curl_easy *data,
}
}
-static const struct content_encoding zstd_encoding = {
+static const struct Curl_cwtype zstd_encoding = {
"zstd",
NULL,
- zstd_init_writer,
- zstd_unencode_write,
- zstd_close_writer,
+ zstd_do_init,
+ zstd_do_write,
+ zstd_do_close,
sizeof(struct zstd_writer)
};
#endif
/* Identity handler. */
-static CURLcode identity_init_writer(struct Curl_easy *data,
- struct contenc_writer *writer)
-{
- (void) data;
- return writer->downstream? CURLE_OK: CURLE_WRITE_ERROR;
-}
-
-static CURLcode identity_unencode_write(struct Curl_easy *data,
- struct contenc_writer *writer,
- const char *buf, size_t nbytes)
-{
- return Curl_unencode_write(data, writer->downstream, buf, nbytes);
-}
-
-static void identity_close_writer(struct Curl_easy *data,
- struct contenc_writer *writer)
-{
- (void) data;
- (void) writer;
-}
-
-static const struct content_encoding identity_encoding = {
+static const struct Curl_cwtype identity_encoding = {
"identity",
"none",
- identity_init_writer,
- identity_unencode_write,
- identity_close_writer,
- sizeof(struct contenc_writer)
+ Curl_cwriter_def_init,
+ Curl_cwriter_def_write,
+ Curl_cwriter_def_close,
+ sizeof(struct Curl_cwriter)
};
/* supported content encodings table. */
-static const struct content_encoding * const encodings[] = {
+static const struct Curl_cwtype * const encodings[] = {
&identity_encoding,
#ifdef HAVE_LIBZ
&deflate_encoding,
@@ -856,13 +849,17 @@ static const struct content_encoding * const encodings[] = {
};
-/* Return a list of comma-separated names of supported encodings. */
-char *Curl_all_content_encodings(void)
+/* Provide a list of comma-separated names of supported encodings.
+*/
+void Curl_all_content_encodings(char *buf, size_t blen)
{
size_t len = 0;
- const struct content_encoding * const *cep;
- const struct content_encoding *ce;
- char *ace;
+ const struct Curl_cwtype * const *cep;
+ const struct Curl_cwtype *ce;
+
+ DEBUGASSERT(buf);
+ DEBUGASSERT(blen);
+ buf[0] = 0;
for(cep = encodings; *cep; cep++) {
ce = *cep;
@@ -870,12 +867,12 @@ char *Curl_all_content_encodings(void)
len += strlen(ce->name) + 2;
}
- if(!len)
- return strdup(CONTENT_ENCODING_DEFAULT);
-
- ace = malloc(len);
- if(ace) {
- char *p = ace;
+ if(!len) {
+ if(blen >= sizeof(CONTENT_ENCODING_DEFAULT))
+ strcpy(buf, CONTENT_ENCODING_DEFAULT);
+ }
+ else if(blen > len) {
+ char *p = buf;
for(cep = encodings; *cep; cep++) {
ce = *cep;
if(!strcasecompare(ce->name, CONTENT_ENCODING_DEFAULT)) {
@@ -887,148 +884,60 @@ char *Curl_all_content_encodings(void)
}
p[-2] = '\0';
}
-
- return ace;
-}
-
-
-/* Real client writer: no downstream. */
-static CURLcode client_init_writer(struct Curl_easy *data,
- struct contenc_writer *writer)
-{
- (void) data;
- return writer->downstream? CURLE_WRITE_ERROR: CURLE_OK;
-}
-
-static CURLcode client_unencode_write(struct Curl_easy *data,
- struct contenc_writer *writer,
- const char *buf, size_t nbytes)
-{
- struct SingleRequest *k = &data->req;
-
- (void) writer;
-
- if(!nbytes || k->ignorebody)
- return CURLE_OK;
-
- return Curl_client_write(data, CLIENTWRITE_BODY, (char *) buf, nbytes);
-}
-
-static void client_close_writer(struct Curl_easy *data,
- struct contenc_writer *writer)
-{
- (void) data;
- (void) writer;
}
-static const struct content_encoding client_encoding = {
- NULL,
- NULL,
- client_init_writer,
- client_unencode_write,
- client_close_writer,
- sizeof(struct contenc_writer)
-};
-
-
/* Deferred error dummy writer. */
-static CURLcode error_init_writer(struct Curl_easy *data,
- struct contenc_writer *writer)
+static CURLcode error_do_init(struct Curl_easy *data,
+ struct Curl_cwriter *writer)
{
- (void) data;
- return writer->downstream? CURLE_OK: CURLE_WRITE_ERROR;
+ (void)data;
+ (void)writer;
+ return CURLE_OK;
}
-static CURLcode error_unencode_write(struct Curl_easy *data,
- struct contenc_writer *writer,
+static CURLcode error_do_write(struct Curl_easy *data,
+ struct Curl_cwriter *writer, int type,
const char *buf, size_t nbytes)
{
- char *all = Curl_all_content_encodings();
+ char all[256];
+ (void)Curl_all_content_encodings(all, sizeof(all));
(void) writer;
(void) buf;
(void) nbytes;
- if(!all)
- return CURLE_OUT_OF_MEMORY;
+ if(!(type & CLIENTWRITE_BODY))
+ return Curl_cwriter_write(data, writer->next, type, buf, nbytes);
+
failf(data, "Unrecognized content encoding type. "
"libcurl understands %s content encodings.", all);
- free(all);
return CURLE_BAD_CONTENT_ENCODING;
}
-static void error_close_writer(struct Curl_easy *data,
- struct contenc_writer *writer)
+static void error_do_close(struct Curl_easy *data,
+ struct Curl_cwriter *writer)
{
(void) data;
(void) writer;
}
-static const struct content_encoding error_encoding = {
+static const struct Curl_cwtype error_writer = {
+ "ce-error",
NULL,
- NULL,
- error_init_writer,
- error_unencode_write,
- error_close_writer,
- sizeof(struct contenc_writer)
+ error_do_init,
+ error_do_write,
+ error_do_close,
+ sizeof(struct Curl_cwriter)
};
-/* Create an unencoding writer stage using the given handler. */
-static struct contenc_writer *
-new_unencoding_writer(struct Curl_easy *data,
- const struct content_encoding *handler,
- struct contenc_writer *downstream)
-{
- struct contenc_writer *writer;
-
- DEBUGASSERT(handler->writersize >= sizeof(struct contenc_writer));
- writer = (struct contenc_writer *) calloc(1, handler->writersize);
-
- if(writer) {
- writer->handler = handler;
- writer->downstream = downstream;
- if(handler->init_writer(data, writer)) {
- free(writer);
- writer = NULL;
- }
- }
-
- return writer;
-}
-
-/* Write data using an unencoding writer stack. "nbytes" is not
- allowed to be 0. */
-CURLcode Curl_unencode_write(struct Curl_easy *data,
- struct contenc_writer *writer,
- const char *buf, size_t nbytes)
-{
- if(!nbytes)
- return CURLE_OK;
- return writer->handler->unencode_write(data, writer, buf, nbytes);
-}
-
-/* Close and clean-up the connection's writer stack. */
-void Curl_unencode_cleanup(struct Curl_easy *data)
-{
- struct SingleRequest *k = &data->req;
- struct contenc_writer *writer = k->writer_stack;
-
- while(writer) {
- k->writer_stack = writer->downstream;
- writer->handler->close_writer(data, writer);
- free(writer);
- writer = k->writer_stack;
- }
-}
-
/* Find the content encoding by name. */
-static const struct content_encoding *find_encoding(const char *name,
+static const struct Curl_cwtype *find_encoding(const char *name,
size_t len)
{
- const struct content_encoding * const *cep;
+ const struct Curl_cwtype * const *cep;
for(cep = encodings; *cep; cep++) {
- const struct content_encoding *ce = *cep;
+ const struct Curl_cwtype *ce = *cep;
if((strncasecompare(name, ce->name, len) && !ce->name[len]) ||
(ce->alias && strncasecompare(name, ce->alias, len) && !ce->alias[len]))
return ce;
@@ -1036,16 +945,15 @@ static const struct content_encoding *find_encoding(const char *name,
return NULL;
}
-/* allow no more than 5 "chained" compression steps */
-#define MAX_ENCODE_STACK 5
-
/* Set-up the unencoding stack from the Content-Encoding header value.
* See RFC 7231 section 3.1.2.2. */
CURLcode Curl_build_unencoding_stack(struct Curl_easy *data,
- const char *enclist, int maybechunked)
+ const char *enclist, int is_transfer)
{
struct SingleRequest *k = &data->req;
- int counter = 0;
+ Curl_cwriter_phase phase = is_transfer?
+ CURL_CW_TRANSFER_DECODE:CURL_CW_CONTENT_DECODE;
+ CURLcode result;
do {
const char *name;
@@ -1062,34 +970,39 @@ CURLcode Curl_build_unencoding_stack(struct Curl_easy *data,
namelen = enclist - name + 1;
/* Special case: chunked encoding is handled at the reader level. */
- if(maybechunked && namelen == 7 && strncasecompare(name, "chunked", 7)) {
+ if(is_transfer && namelen == 7 && strncasecompare(name, "chunked", 7)) {
k->chunk = TRUE; /* chunks coming our way. */
Curl_httpchunk_init(data); /* init our chunky engine. */
}
else if(namelen) {
- const struct content_encoding *encoding = find_encoding(name, namelen);
- struct contenc_writer *writer;
+ const struct Curl_cwtype *cwt;
+ struct Curl_cwriter *writer;
- if(!k->writer_stack) {
- k->writer_stack = new_unencoding_writer(data, &client_encoding, NULL);
+ if((is_transfer && !data->set.http_transfer_encoding) ||
+ (!is_transfer && data->set.http_ce_skip)) {
+ /* not requested, ignore */
+ return CURLE_OK;
+ }
- if(!k->writer_stack)
- return CURLE_OUT_OF_MEMORY;
+ if(Curl_cwriter_count(data, phase) + 1 >= MAX_ENCODE_STACK) {
+ failf(data, "Reject response due to more than %u content encodings",
+ MAX_ENCODE_STACK);
+ return CURLE_BAD_CONTENT_ENCODING;
}
- if(!encoding)
- encoding = &error_encoding; /* Defer error at stack use. */
+ cwt = find_encoding(name, namelen);
+ if(!cwt)
+ cwt = &error_writer; /* Defer error at use. */
- if(++counter >= MAX_ENCODE_STACK) {
- failf(data, "Reject response due to %u content encodings",
- counter);
- return CURLE_BAD_CONTENT_ENCODING;
+ result = Curl_cwriter_create(&writer, data, cwt, phase);
+ if(result)
+ return result;
+
+ result = Curl_cwriter_add(data, writer);
+ if(result) {
+ Curl_cwriter_free(data, writer);
+ return result;
}
- /* Stack the unencoding stage. */
- writer = new_unencoding_writer(data, encoding, k->writer_stack);
- if(!writer)
- return CURLE_OUT_OF_MEMORY;
- k->writer_stack = writer;
}
} while(*enclist);
@@ -1099,33 +1012,23 @@ CURLcode Curl_build_unencoding_stack(struct Curl_easy *data,
#else
/* Stubs for builds without HTTP. */
CURLcode Curl_build_unencoding_stack(struct Curl_easy *data,
- const char *enclist, int maybechunked)
+ const char *enclist, int is_transfer)
{
(void) data;
(void) enclist;
- (void) maybechunked;
+ (void) is_transfer;
return CURLE_NOT_BUILT_IN;
}
-CURLcode Curl_unencode_write(struct Curl_easy *data,
- struct contenc_writer *writer,
- const char *buf, size_t nbytes)
+void Curl_all_content_encodings(char *buf, size_t blen)
{
- (void) data;
- (void) writer;
- (void) buf;
- (void) nbytes;
- return CURLE_NOT_BUILT_IN;
-}
-
-void Curl_unencode_cleanup(struct Curl_easy *data)
-{
- (void) data;
+ DEBUGASSERT(buf);
+ DEBUGASSERT(blen);
+ if(blen < sizeof(CONTENT_ENCODING_DEFAULT))
+ buf[0] = 0;
+ else
+ strcpy(buf, CONTENT_ENCODING_DEFAULT);
}
-char *Curl_all_content_encodings(void)
-{
- return strdup(CONTENT_ENCODING_DEFAULT); /* Satisfy caller. */
-}
#endif /* CURL_DISABLE_HTTP */
diff --git a/lib/content_encoding.h b/lib/content_encoding.h
index 3c278cf72..1addf230b 100644
--- a/lib/content_encoding.h
+++ b/lib/content_encoding.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -25,32 +25,10 @@
***************************************************************************/
#include "curl_setup.h"
-struct contenc_writer {
- const struct content_encoding *handler; /* Encoding handler. */
- struct contenc_writer *downstream; /* Downstream writer. */
-};
-
-/* Content encoding writer. */
-struct content_encoding {
- const char *name; /* Encoding name. */
- const char *alias; /* Encoding name alias. */
- CURLcode (*init_writer)(struct Curl_easy *data,
- struct contenc_writer *writer);
- CURLcode (*unencode_write)(struct Curl_easy *data,
- struct contenc_writer *writer,
- const char *buf, size_t nbytes);
- void (*close_writer)(struct Curl_easy *data,
- struct contenc_writer *writer);
- size_t writersize;
-};
+struct Curl_cwriter;
+void Curl_all_content_encodings(char *buf, size_t blen);
CURLcode Curl_build_unencoding_stack(struct Curl_easy *data,
- const char *enclist, int maybechunked);
-CURLcode Curl_unencode_write(struct Curl_easy *data,
- struct contenc_writer *writer,
- const char *buf, size_t nbytes);
-void Curl_unencode_cleanup(struct Curl_easy *data);
-char *Curl_all_content_encodings(void);
-
+ const char *enclist, int is_transfer);
#endif /* HEADER_CURL_CONTENT_ENCODING_H */
diff --git a/lib/cookie.c b/lib/cookie.c
index 8eaedeeb7..9095cea3e 100644
--- a/lib/cookie.c
+++ b/lib/cookie.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -101,36 +101,37 @@ Example set of cookies:
#include "parsedate.h"
#include "rename.h"
#include "fopen.h"
+#include "strdup.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"
-static void strstore(char **str, const char *newstr);
+static void strstore(char **str, const char *newstr, size_t len);
static void freecookie(struct Cookie *co)
{
- free(co->expirestr);
free(co->domain);
free(co->path);
free(co->spath);
free(co->name);
free(co->value);
- free(co->maxage);
- free(co->version);
free(co);
}
-static bool tailmatch(const char *cooke_domain, const char *hostname)
+static bool cookie_tailmatch(const char *cookie_domain,
+ size_t cookie_domain_len,
+ const char *hostname)
{
- size_t cookie_domain_len = strlen(cooke_domain);
size_t hostname_len = strlen(hostname);
if(hostname_len < cookie_domain_len)
return FALSE;
- if(!strcasecompare(cooke_domain, hostname + hostname_len-cookie_domain_len))
+ if(!strncasecompare(cookie_domain,
+ hostname + hostname_len-cookie_domain_len,
+ cookie_domain_len))
return FALSE;
/*
@@ -176,7 +177,7 @@ static bool pathmatch(const char *cookie_path, const char *request_uri)
/* #-fragments are already cut off! */
if(0 == strlen(uri_path) || uri_path[0] != '/') {
- strstore(&uri_path, "/");
+ strstore(&uri_path, "/", 1);
if(!uri_path)
return FALSE;
}
@@ -300,18 +301,17 @@ static char *sanitize_cookie_path(const char *cookie_path)
/* some stupid site sends path attribute with '"'. */
len = strlen(new_path);
if(new_path[0] == '\"') {
- memmove((void *)new_path, (const void *)(new_path + 1), len);
+ memmove(new_path, new_path + 1, len);
len--;
}
if(len && (new_path[len - 1] == '\"')) {
- new_path[len - 1] = 0x0;
- len--;
+ new_path[--len] = 0x0;
}
/* RFC6265 5.2.4 The Path Attribute */
if(new_path[0] != '/') {
/* Let cookie-path be the default-path. */
- strstore(&new_path, "/");
+ strstore(&new_path, "/", 1);
return new_path;
}
@@ -334,10 +334,9 @@ void Curl_cookie_loadfiles(struct Curl_easy *data)
if(list) {
Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
while(list) {
- struct CookieInfo *newcookies = Curl_cookie_init(data,
- list->data,
- data->cookies,
- data->set.cookiesession);
+ struct CookieInfo *newcookies =
+ Curl_cookie_init(data, list->data, data->cookies,
+ data->set.cookiesession);
if(!newcookies)
/*
* Failure may be due to OOM or a bad cookie; both are ignored
@@ -348,8 +347,6 @@ void Curl_cookie_loadfiles(struct Curl_easy *data)
data->cookies = newcookies;
list = list->next;
}
- curl_slist_free_all(data->state.cookielist); /* clean up list */
- data->state.cookielist = NULL; /* don't do this again! */
Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
}
}
@@ -363,10 +360,12 @@ void Curl_cookie_loadfiles(struct Curl_easy *data)
* parsing in a last-wins scenario. The caller is responsible for checking
* for OOM errors.
*/
-static void strstore(char **str, const char *newstr)
+static void strstore(char **str, const char *newstr, size_t len)
{
+ DEBUGASSERT(newstr);
+ DEBUGASSERT(str);
free(*str);
- *str = strdup(newstr);
+ *str = Curl_strndup(newstr, len);
}
/*
@@ -428,15 +427,19 @@ static void remove_expired(struct CookieInfo *cookies)
}
/* Make sure domain contains a dot or is localhost. */
-static bool bad_domain(const char *domain)
+static bool bad_domain(const char *domain, size_t len)
{
- if(strcasecompare(domain, "localhost"))
+ if((len == 9) && strncasecompare(domain, "localhost", 9))
return FALSE;
else {
/* there must be a dot present, but that dot must not be a trailing dot */
- char *dot = strchr(domain, '.');
- if(dot)
- return dot[1] ? FALSE : TRUE;
+ char *dot = memchr(domain, '.', len);
+ if(dot) {
+ size_t i = dot - domain;
+ if((len - i) > 1)
+ /* the dot is not the last byte */
+ return FALSE;
+ }
}
return TRUE;
}
@@ -476,15 +479,10 @@ static int invalid_octets(const char *p)
*/
struct Cookie *
Curl_cookie_add(struct Curl_easy *data,
- /*
- * The 'data' pointer here may be NULL at times, and thus
- * must only be used very carefully for things that can deal
- * with data being NULL. Such as infof() and similar
- */
struct CookieInfo *c,
bool httpheader, /* TRUE if HTTP header-style line */
bool noexpire, /* if TRUE, skip remove_expired() */
- char *lineptr, /* first character of the line */
+ const char *lineptr, /* first character of the line */
const char *domain, /* default domain */
const char *path, /* full path used when this cookie is set,
used to get default path for the cookie
@@ -501,10 +499,7 @@ Curl_cookie_add(struct Curl_easy *data,
bool badcookie = FALSE; /* cookies are good by default. mmmmm yummy */
size_t myhash;
-#ifdef CURL_DISABLE_VERBOSE_STRINGS
- (void)data;
-#endif
-
+ DEBUGASSERT(data);
DEBUGASSERT(MAX_SET_COOKIE_AMOUNT <= 255); /* counter is an unsigned char */
if(data->req.setcookies >= MAX_SET_COOKIE_AMOUNT)
return NULL;
@@ -515,11 +510,8 @@ Curl_cookie_add(struct Curl_easy *data,
return NULL; /* bail out if we're this low on memory */
if(httpheader) {
- /* This line was read off a HTTP-header */
- char name[MAX_NAME];
- char what[MAX_NAME];
+ /* This line was read off an HTTP-header */
const char *ptr;
- const char *semiptr;
size_t linelength = strlen(lineptr);
if(linelength > MAX_COOKIE_LINE) {
@@ -528,73 +520,66 @@ Curl_cookie_add(struct Curl_easy *data,
return NULL;
}
- semiptr = strchr(lineptr, ';'); /* first, find a semicolon */
-
- while(*lineptr && ISBLANK(*lineptr))
- lineptr++;
-
ptr = lineptr;
do {
- /* we have a <what>=<this> pair or a stand-alone word here */
- name[0] = what[0] = 0; /* init the buffers */
- if(1 <= sscanf(ptr, "%" MAX_NAME_TXT "[^;\t\r\n=] =%"
- MAX_NAME_TXT "[^;\r\n]",
- name, what)) {
- /*
- * Use strstore() below to properly deal with received cookie
- * headers that have the same string property set more than once,
- * and then we use the last one.
- */
- const char *whatptr;
+ size_t vlen;
+ size_t nlen;
+
+ while(*ptr && ISBLANK(*ptr))
+ ptr++;
+
+ /* we have a <name>=<value> pair or a stand-alone word here */
+ nlen = strcspn(ptr, ";\t\r\n=");
+ if(nlen) {
bool done = FALSE;
- bool sep;
- size_t len = strlen(what);
- size_t nlen = strlen(name);
- const char *endofn = &ptr[ nlen ];
+ bool sep = FALSE;
+ const char *namep = ptr;
+ const char *valuep;
+
+ ptr += nlen;
+
+ /* trim trailing spaces and tabs after name */
+ while(nlen && ISBLANK(namep[nlen - 1]))
+ nlen--;
+
+ if(*ptr == '=') {
+ vlen = strcspn(++ptr, ";\r\n");
+ valuep = ptr;
+ sep = TRUE;
+ ptr = &valuep[vlen];
+
+ /* Strip off trailing whitespace from the value */
+ while(vlen && ISBLANK(valuep[vlen-1]))
+ vlen--;
+
+ /* Skip leading whitespace from the value */
+ while(vlen && ISBLANK(*valuep)) {
+ valuep++;
+ vlen--;
+ }
+
+ /* Reject cookies with a TAB inside the value */
+ if(memchr(valuep, '\t', vlen)) {
+ freecookie(co);
+ infof(data, "cookie contains TAB, dropping");
+ return NULL;
+ }
+ }
+ else {
+ valuep = NULL;
+ vlen = 0;
+ }
/*
* Check for too long individual name or contents, or too long
* combination of name + contents. Chrome and Firefox support 4095 or
* 4096 bytes combo
*/
- if(nlen >= (MAX_NAME-1) || len >= (MAX_NAME-1) ||
- ((nlen + len) > MAX_NAME)) {
+ if(nlen >= (MAX_NAME-1) || vlen >= (MAX_NAME-1) ||
+ ((nlen + vlen) > MAX_NAME)) {
freecookie(co);
infof(data, "oversized cookie dropped, name/val %zu + %zu bytes",
- nlen, len);
- return NULL;
- }
-
- /* name ends with a '=' ? */
- sep = (*endofn == '=')?TRUE:FALSE;
-
- if(nlen) {
- endofn--; /* move to the last character */
- if(ISBLANK(*endofn)) {
- /* skip trailing spaces in name */
- while(*endofn && ISBLANK(*endofn) && nlen) {
- endofn--;
- nlen--;
- }
- name[nlen] = 0; /* new end of name */
- }
- }
-
- /* Strip off trailing whitespace from the 'what' */
- while(len && ISBLANK(what[len-1])) {
- what[len-1] = 0;
- len--;
- }
-
- /* Skip leading whitespace from the 'what' */
- whatptr = what;
- while(*whatptr && ISBLANK(*whatptr))
- whatptr++;
-
- /* Reject cookies with a TAB inside the content */
- if(strchr(whatptr, '\t')) {
- freecookie(co);
- infof(data, "cookie contains TAB, dropping");
+ nlen, vlen);
return NULL;
}
@@ -604,13 +589,19 @@ Curl_cookie_add(struct Curl_easy *data,
* "the rest". Prefixes must start with '__' and end with a '-', so
* only test for names where that can possibly be true.
*/
- if(nlen > 3 && name[0] == '_' && name[1] == '_') {
- if(!strncmp("__Secure-", name, 9))
+ if(nlen >= 7 && namep[0] == '_' && namep[1] == '_') {
+ if(strncasecompare("__Secure-", namep, 9))
co->prefix |= COOKIE_PREFIX__SECURE;
- else if(!strncmp("__Host-", name, 7))
+ else if(strncasecompare("__Host-", namep, 7))
co->prefix |= COOKIE_PREFIX__HOST;
}
+ /*
+ * Use strstore() below to properly deal with received cookie
+ * headers that have the same string property set more than once,
+ * and then we use the last one.
+ */
+
if(!co->name) {
/* The very first name/value pair is the actual cookie name */
if(!sep) {
@@ -618,20 +609,20 @@ Curl_cookie_add(struct Curl_easy *data,
badcookie = TRUE;
break;
}
- co->name = strdup(name);
- co->value = strdup(whatptr);
+ strstore(&co->name, namep, nlen);
+ strstore(&co->value, valuep, vlen);
done = TRUE;
if(!co->name || !co->value) {
badcookie = TRUE;
break;
}
- if(invalid_octets(whatptr) || invalid_octets(name)) {
+ if(invalid_octets(co->value) || invalid_octets(co->name)) {
infof(data, "invalid octets in name/value, cookie dropped");
badcookie = TRUE;
break;
}
}
- else if(!len) {
+ else if(!vlen) {
/*
* this was a "<name>=" with no content, and we must allow
* 'secure' and 'httponly' specified this weirdly
@@ -642,7 +633,7 @@ Curl_cookie_add(struct Curl_easy *data,
* using a secure protocol, or when the cookie is being set by
* reading from file
*/
- if(strcasecompare("secure", name)) {
+ if((nlen == 6) && strncasecompare("secure", namep, 6)) {
if(secure || !c->running) {
co->secure = TRUE;
}
@@ -651,7 +642,7 @@ Curl_cookie_add(struct Curl_easy *data,
break;
}
}
- else if(strcasecompare("httponly", name))
+ else if((nlen == 8) && strncasecompare("httponly", namep, 8))
co->httponly = TRUE;
else if(sep)
/* there was a '=' so we're not done parsing this field */
@@ -659,8 +650,8 @@ Curl_cookie_add(struct Curl_easy *data,
}
if(done)
;
- else if(strcasecompare("path", name)) {
- strstore(&co->path, whatptr);
+ else if((nlen == 4) && strncasecompare("path", namep, 4)) {
+ strstore(&co->path, valuep, vlen);
if(!co->path) {
badcookie = TRUE; /* out of memory bad */
break;
@@ -672,7 +663,8 @@ Curl_cookie_add(struct Curl_easy *data,
break;
}
}
- else if(strcasecompare("domain", name) && whatptr[0]) {
+ else if((nlen == 6) &&
+ strncasecompare("domain", namep, 6) && vlen) {
bool is_ip;
/*
@@ -680,8 +672,10 @@ Curl_cookie_add(struct Curl_easy *data,
* the given domain is not valid and thus cannot be set.
*/
- if('.' == whatptr[0])
- whatptr++; /* ignore preceding dot */
+ if('.' == valuep[0]) {
+ valuep++; /* ignore preceding dot */
+ vlen--;
+ }
#ifndef USE_LIBPSL
/*
@@ -689,16 +683,17 @@ Curl_cookie_add(struct Curl_easy *data,
* TLD or otherwise "protected" suffix. To reduce risk, we require a
* dot OR the exact host name being "localhost".
*/
- if(bad_domain(whatptr))
+ if(bad_domain(valuep, vlen))
domain = ":";
#endif
- is_ip = Curl_host_is_ipnum(domain ? domain : whatptr);
+ is_ip = Curl_host_is_ipnum(domain ? domain : valuep);
if(!domain
- || (is_ip && !strcmp(whatptr, domain))
- || (!is_ip && tailmatch(whatptr, domain))) {
- strstore(&co->domain, whatptr);
+ || (is_ip && !strncmp(valuep, domain, vlen) &&
+ (vlen == strlen(domain)))
+ || (!is_ip && cookie_tailmatch(valuep, vlen, domain))) {
+ strstore(&co->domain, valuep, vlen);
if(!co->domain) {
badcookie = TRUE;
break;
@@ -714,17 +709,13 @@ Curl_cookie_add(struct Curl_easy *data,
*/
badcookie = TRUE;
infof(data, "skipped cookie with bad tailmatch domain: %s",
- whatptr);
+ valuep);
}
}
- else if(strcasecompare("version", name)) {
- strstore(&co->version, whatptr);
- if(!co->version) {
- badcookie = TRUE;
- break;
- }
+ else if((nlen == 7) && strncasecompare("version", namep, 7)) {
+ /* just ignore */
}
- else if(strcasecompare("max-age", name)) {
+ else if((nlen == 7) && strncasecompare("max-age", namep, 7)) {
/*
* Defined in RFC2109:
*
@@ -734,17 +725,55 @@ Curl_cookie_add(struct Curl_easy *data,
* client should discard the cookie. A value of zero means the
* cookie should be discarded immediately.
*/
- strstore(&co->maxage, whatptr);
- if(!co->maxage) {
- badcookie = TRUE;
+ CURLofft offt;
+ const char *maxage = valuep;
+ offt = curlx_strtoofft((*maxage == '\"')?
+ &maxage[1]:&maxage[0], NULL, 10,
+ &co->expires);
+ switch(offt) {
+ case CURL_OFFT_FLOW:
+ /* overflow, used max value */
+ co->expires = CURL_OFF_T_MAX;
+ break;
+ case CURL_OFFT_INVAL:
+ /* negative or otherwise bad, expire */
+ co->expires = 1;
+ break;
+ case CURL_OFFT_OK:
+ if(!co->expires)
+ /* already expired */
+ co->expires = 1;
+ else if(CURL_OFF_T_MAX - now < co->expires)
+ /* would overflow */
+ co->expires = CURL_OFF_T_MAX;
+ else
+ co->expires += now;
break;
}
}
- else if(strcasecompare("expires", name)) {
- strstore(&co->expirestr, whatptr);
- if(!co->expirestr) {
- badcookie = TRUE;
- break;
+ else if((nlen == 7) && strncasecompare("expires", namep, 7)) {
+ char date[128];
+ if(!co->expires && (vlen < sizeof(date))) {
+ /* copy the date so that it can be null terminated */
+ memcpy(date, valuep, vlen);
+ date[vlen] = 0;
+ /*
+ * Let max-age have priority.
+ *
+ * If the date cannot get parsed for whatever reason, the cookie
+ * will be treated as a session cookie
+ */
+ co->expires = Curl_getdate_capped(date);
+
+ /*
+ * Session cookies have expires set to 0 so if we get that back
+ * from the date parser let's add a second to make it a
+ * non-session cookie
+ */
+ if(co->expires == 0)
+ co->expires = 1;
+ else if(co->expires < 0)
+ co->expires = 0;
}
}
@@ -756,60 +785,13 @@ Curl_cookie_add(struct Curl_easy *data,
/* this is an "illegal" <what>=<this> pair */
}
- if(!semiptr || !*semiptr) {
- /* we already know there are no more cookies */
- semiptr = NULL;
- continue;
- }
-
- ptr = semiptr + 1;
while(*ptr && ISBLANK(*ptr))
ptr++;
- semiptr = strchr(ptr, ';'); /* now, find the next semicolon */
-
- if(!semiptr && *ptr)
- /*
- * There are no more semicolons, but there's a final name=value pair
- * coming up
- */
- semiptr = strchr(ptr, '\0');
- } while(semiptr);
-
- if(co->maxage) {
- CURLofft offt;
- offt = curlx_strtoofft((*co->maxage == '\"')?
- &co->maxage[1]:&co->maxage[0], NULL, 10,
- &co->expires);
- if(offt == CURL_OFFT_FLOW)
- /* overflow, used max value */
- co->expires = CURL_OFF_T_MAX;
- else if(!offt) {
- if(!co->expires)
- /* already expired */
- co->expires = 1;
- else if(CURL_OFF_T_MAX - now < co->expires)
- /* would overflow */
- co->expires = CURL_OFF_T_MAX;
- else
- co->expires += now;
- }
- }
- else if(co->expirestr) {
- /*
- * Note that if the date couldn't get parsed for whatever reason, the
- * cookie will be treated as a session cookie
- */
- co->expires = Curl_getdate_capped(co->expirestr);
-
- /*
- * Session cookies have expires set to 0 so if we get that back from the
- * date parser let's add a second to make it a non-session cookie
- */
- if(co->expires == 0)
- co->expires = 1;
- else if(co->expires < 0)
- co->expires = 0;
- }
+ if(*ptr == ';')
+ ptr++;
+ else
+ break;
+ } while(1);
if(!badcookie && !co->domain) {
if(domain) {
@@ -864,7 +846,7 @@ Curl_cookie_add(struct Curl_easy *data,
}
else {
/*
- * This line is NOT a HTTP header style line, we do offer support for
+ * This line is NOT an HTTP header style line, we do offer support for
* reading the odd netscape cookies-file format here
*/
char *ptr;
@@ -898,7 +880,7 @@ Curl_cookie_add(struct Curl_easy *data,
if(ptr)
*ptr = 0; /* clear it */
- firstptr = strtok_r(lineptr, "\t", &tok_buf); /* tokenize it on the TAB */
+ firstptr = strtok_r((char *)lineptr, "\t", &tok_buf); /* tokenize on TAB */
/*
* Now loop through the fields and init the struct we already have
@@ -1045,15 +1027,23 @@ Curl_cookie_add(struct Curl_easy *data,
* dereference it.
*/
if(data && (domain && co->domain && !Curl_host_is_ipnum(co->domain))) {
- const psl_ctx_t *psl = Curl_psl_use(data);
- int acceptable;
-
- if(psl) {
- acceptable = psl_is_cookie_domain_acceptable(psl, domain, co->domain);
- Curl_psl_release(data);
+ bool acceptable = FALSE;
+ char lcase[256];
+ char lcookie[256];
+ size_t dlen = strlen(domain);
+ size_t clen = strlen(co->domain);
+ if((dlen < sizeof(lcase)) && (clen < sizeof(lcookie))) {
+ const psl_ctx_t *psl = Curl_psl_use(data);
+ if(psl) {
+ /* the PSL check requires lowercase domain name and pattern */
+ Curl_strntolower(lcase, domain, dlen + 1);
+ Curl_strntolower(lcookie, co->domain, clen + 1);
+ acceptable = psl_is_cookie_domain_acceptable(psl, lcase, lcookie);
+ Curl_psl_release(data);
+ }
+ else
+ acceptable = !bad_domain(domain, strlen(domain));
}
- else
- acceptable = !bad_domain(domain);
if(!acceptable) {
infof(data, "cookie '%s' dropped, domain '%s' must not "
@@ -1124,17 +1114,11 @@ Curl_cookie_add(struct Curl_easy *data,
if(replace_old) {
/* the domains were identical */
- if(clist->spath && co->spath) {
- if(strcasecompare(clist->spath, co->spath))
- replace_old = TRUE;
- else
- replace_old = FALSE;
- }
- else if(!clist->spath && !co->spath)
- replace_old = TRUE;
- else
+ if(clist->spath && co->spath &&
+ !strcasecompare(clist->spath, co->spath))
+ replace_old = FALSE;
+ else if(!clist->spath != !co->spath)
replace_old = FALSE;
-
}
if(replace_old && !co->livecookie && clist->livecookie) {
@@ -1169,9 +1153,6 @@ Curl_cookie_add(struct Curl_easy *data,
free(clist->domain);
free(clist->path);
free(clist->spath);
- free(clist->expirestr);
- free(clist->version);
- free(clist->maxage);
*clist = *co; /* then store all the new data */
@@ -1215,7 +1196,8 @@ Curl_cookie_add(struct Curl_easy *data,
*
* If 'newsession' is TRUE, discard all "session cookies" on read from file.
*
- * Note that 'data' might be called as NULL pointer.
+ * Note that 'data' might be called as NULL pointer. If data is NULL, 'file'
+ * will be ignored.
*
* Returns NULL on out of memory. Invalid cookies are ignored.
*/
@@ -1225,18 +1207,14 @@ struct CookieInfo *Curl_cookie_init(struct Curl_easy *data,
bool newsession)
{
struct CookieInfo *c;
- FILE *fp = NULL;
- bool fromfile = TRUE;
char *line = NULL;
+ FILE *handle = NULL;
if(!inc) {
/* we didn't get a struct, create one */
c = calloc(1, sizeof(struct CookieInfo));
if(!c)
return NULL; /* failed to get memory */
- c->filename = strdup(file?file:"none"); /* copy the name just in case */
- if(!c->filename)
- goto fail; /* failed to get memory */
/*
* Initialize the next_expiration time to signal that we don't have enough
* information yet.
@@ -1247,61 +1225,55 @@ struct CookieInfo *Curl_cookie_init(struct Curl_easy *data,
/* we got an already existing one, use that */
c = inc;
}
- c->running = FALSE; /* this is not running, this is init */
-
- if(file && !strcmp(file, "-")) {
- fp = stdin;
- fromfile = FALSE;
- }
- else if(!file || !*file) {
- /* points to an empty string or NULL */
- fp = NULL;
- }
- else {
- fp = fopen(file, FOPEN_READTEXT);
- if(!fp)
- infof(data, "WARNING: failed to open cookie file \"%s\"", file);
- }
-
c->newsession = newsession; /* new session? */
- if(fp) {
- char *lineptr;
- bool headerline;
-
- line = malloc(MAX_COOKIE_LINE);
- if(!line)
- goto fail;
- while(Curl_get_line(line, MAX_COOKIE_LINE, fp)) {
- if(checkprefix("Set-Cookie:", line)) {
- /* This is a cookie line, get it! */
- lineptr = &line[11];
- headerline = TRUE;
- }
+ if(data) {
+ FILE *fp = NULL;
+ if(file) {
+ if(!strcmp(file, "-"))
+ fp = stdin;
else {
- lineptr = line;
- headerline = FALSE;
+ fp = fopen(file, "rb");
+ if(!fp)
+ infof(data, "WARNING: failed to open cookie file \"%s\"", file);
+ else
+ handle = fp;
}
- while(*lineptr && ISBLANK(*lineptr))
- lineptr++;
-
- Curl_cookie_add(data, c, headerline, TRUE, lineptr, NULL, NULL, TRUE);
}
- free(line); /* free the line buffer */
- /*
- * Remove expired cookies from the hash. We must make sure to run this
- * after reading the file, and not on every cookie.
- */
- remove_expired(c);
+ c->running = FALSE; /* this is not running, this is init */
+ if(fp) {
+
+ line = malloc(MAX_COOKIE_LINE);
+ if(!line)
+ goto fail;
+ while(Curl_get_line(line, MAX_COOKIE_LINE, fp)) {
+ char *lineptr = line;
+ bool headerline = FALSE;
+ if(checkprefix("Set-Cookie:", line)) {
+ /* This is a cookie line, get it! */
+ lineptr = &line[11];
+ headerline = TRUE;
+ while(*lineptr && ISBLANK(*lineptr))
+ lineptr++;
+ }
- if(fromfile && fp)
- fclose(fp);
- }
+ Curl_cookie_add(data, c, headerline, TRUE, lineptr, NULL, NULL, TRUE);
+ }
+ free(line); /* free the line buffer */
- c->running = TRUE; /* now, we're running */
- if(data)
+ /*
+ * Remove expired cookies from the hash. We must make sure to run this
+ * after reading the file, and not on every cookie.
+ */
+ remove_expired(c);
+
+ if(handle)
+ fclose(handle);
+ }
data->state.cookie_engine = TRUE;
+ }
+ c->running = TRUE; /* now, we're running */
return c;
@@ -1313,8 +1285,8 @@ fail:
*/
if(!inc)
Curl_cookie_cleanup(c);
- if(fromfile && fp)
- fclose(fp);
+ if(handle)
+ fclose(handle);
return NULL; /* out of memory */
}
@@ -1381,16 +1353,13 @@ static int cookie_sort_ct(const void *p1, const void *p2)
static struct Cookie *dup_cookie(struct Cookie *src)
{
- struct Cookie *d = calloc(sizeof(struct Cookie), 1);
+ struct Cookie *d = calloc(1, sizeof(struct Cookie));
if(d) {
- CLONE(expirestr);
CLONE(domain);
CLONE(path);
CLONE(spath);
CLONE(name);
CLONE(value);
- CLONE(maxage);
- CLONE(version);
d->expires = src->expires;
d->tailmatch = src->tailmatch;
d->secure = src->secure;
@@ -1400,7 +1369,7 @@ static struct Cookie *dup_cookie(struct Cookie *src)
}
return d;
- fail:
+fail:
freecookie(d);
return NULL;
}
@@ -1443,7 +1412,8 @@ struct Cookie *Curl_cookie_getlist(struct Curl_easy *data,
/* now check if the domain is correct */
if(!co->domain ||
- (co->tailmatch && !is_ip && tailmatch(co->domain, host)) ||
+ (co->tailmatch && !is_ip &&
+ cookie_tailmatch(co->domain, strlen(co->domain), host)) ||
((!co->tailmatch || is_ip) && strcasecompare(host, co->domain)) ) {
/*
* the right part of the host matches the domain stuff in the
@@ -1606,7 +1576,6 @@ void Curl_cookie_cleanup(struct CookieInfo *c)
{
if(c) {
unsigned int i;
- free(c->filename);
for(i = 0; i < COOKIE_HASH_SIZE; i++)
Curl_cookie_freelist(c->cookies[i]);
free(c); /* free the base struct as well */
@@ -1733,7 +1702,7 @@ static CURLcode cookie_output(struct Curl_easy *data,
}
/*
- * If we reach here we have successfully written a cookie file so theree is
+ * If we reach here we have successfully written a cookie file so there is
* no need to inspect the error, any error case should have jumped into the
* error block below.
*/
@@ -1794,13 +1763,6 @@ void Curl_flush_cookies(struct Curl_easy *data, bool cleanup)
CURLcode res;
if(data->set.str[STRING_COOKIEJAR]) {
- if(data->state.cookielist) {
- /* If there is a list of cookie files to read, do it first so that
- we have all the told files read before we write the new jar.
- Curl_cookie_loadfiles() LOCKS and UNLOCKS the share itself! */
- Curl_cookie_loadfiles(data);
- }
-
Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
/* if we have a destination file for all the cookies to get dumped to */
@@ -1810,12 +1772,6 @@ void Curl_flush_cookies(struct Curl_easy *data, bool cleanup)
data->set.str[STRING_COOKIEJAR], curl_easy_strerror(res));
}
else {
- if(cleanup && data->state.cookielist) {
- /* since nothing is written, we can just free the list of cookie file
- names */
- curl_slist_free_all(data->state.cookielist); /* clean up list */
- data->state.cookielist = NULL;
- }
Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
}
diff --git a/lib/cookie.h b/lib/cookie.h
index abc0a2e8a..012dd892c 100644
--- a/lib/cookie.h
+++ b/lib/cookie.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -35,12 +35,6 @@ struct Cookie {
char *spath; /* sanitized cookie path */
char *domain; /* domain = <this> */
curl_off_t expires; /* expires = <this> */
- char *expirestr; /* the plain text version */
-
- /* RFC 2109 keywords. Version=1 means 2109-compliant cookie sending */
- char *version; /* Version = <value> */
- char *maxage; /* Max-Age = <value> */
-
bool tailmatch; /* whether we do tail-matching of the domain name */
bool secure; /* whether the 'secure' keyword was used */
bool livecookie; /* updated from a server, not a stored file */
@@ -56,37 +50,45 @@ struct Cookie {
#define COOKIE_PREFIX__SECURE (1<<0)
#define COOKIE_PREFIX__HOST (1<<1)
-#define COOKIE_HASH_SIZE 256
+#define COOKIE_HASH_SIZE 63
struct CookieInfo {
/* linked list of cookies we know of */
struct Cookie *cookies[COOKIE_HASH_SIZE];
-
- char *filename; /* file we read from/write to */
- long numcookies; /* number of cookies in the "jar" */
+ curl_off_t next_expiration; /* the next time at which expiration happens */
+ int numcookies; /* number of cookies in the "jar" */
+ int lastct; /* last creation-time used in the jar */
bool running; /* state info, for cookie adding information */
bool newsession; /* new session, discard session cookies on load */
- int lastct; /* last creation-time used in the jar */
- curl_off_t next_expiration; /* the next time at which expiration happens */
};
-/* This is the maximum line length we accept for a cookie line. RFC 2109
- section 6.3 says:
+/* The maximum sizes we accept for cookies. RFC 6265 section 6.1 says
+ "general-use user agents SHOULD provide each of the following minimum
+ capabilities":
- "at least 4096 bytes per cookie (as measured by the size of the characters
- that comprise the cookie non-terminal in the syntax description of the
- Set-Cookie header)"
+ - At least 4096 bytes per cookie (as measured by the sum of the length of
+ the cookie's name, value, and attributes).
+ In the 6265bis draft document section 5.4 it is phrased even stronger: "If
+ the sum of the lengths of the name string and the value string is more than
+ 4096 octets, abort these steps and ignore the set-cookie-string entirely."
+*/
- We allow max 5000 bytes cookie header. Max 4095 bytes length per cookie
- name and value. Name + value may not exceed 4096 bytes.
+/** Limits for INCOMING cookies **/
-*/
+/* The longest we allow a line to be when reading a cookie from a HTTP header
+ or from a cookie jar */
#define MAX_COOKIE_LINE 5000
/* Maximum length of an incoming cookie name or content we deal with. Longer
cookies are ignored. */
#define MAX_NAME 4096
-#define MAX_NAME_TXT "4095"
+
+/* Maximum number of Set-Cookie: lines accepted in a single response. If more
+ such header lines are received, they are ignored. This value must be less
+ than 256 since an unsigned char is used to count. */
+#define MAX_SET_COOKIE_AMOUNT 50
+
+/** Limits for OUTGOING cookies **/
/* Maximum size for an outgoing cookie line libcurl will use in an http
request. This is the default maximum length used in some versions of Apache
@@ -98,11 +100,6 @@ struct CookieInfo {
keep the maximum HTTP request within the maximum allowed size. */
#define MAX_COOKIE_SEND_AMOUNT 150
-/* Maximum number of Set-Cookie: lines accepted in a single response. If more
- such header lines are received, they are ignored. This value must be less
- than 256 since an unsigned char is used to count. */
-#define MAX_SET_COOKIE_AMOUNT 50
-
struct Curl_easy;
/*
* Add a cookie to the internal list of cookies. The domain and path arguments
@@ -111,7 +108,7 @@ struct Curl_easy;
struct Cookie *Curl_cookie_add(struct Curl_easy *data,
struct CookieInfo *c, bool header,
- bool noexpiry, char *lineptr,
+ bool noexpiry, const char *lineptr,
const char *domain, const char *path,
bool secure);
diff --git a/lib/curl_addrinfo.c b/lib/curl_addrinfo.c
index 72e778b34..f9211d3f5 100644
--- a/lib/curl_addrinfo.c
+++ b/lib/curl_addrinfo.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -47,11 +47,6 @@
# include <inet.h>
#endif
-#if defined(NETWARE) && defined(__NOVELL_LIBC__)
-# undef in_addr_t
-# define in_addr_t unsigned long
-#endif
-
#include <stddef.h>
#include "curl_addrinfo.h"
@@ -279,7 +274,7 @@ Curl_he2ai(const struct hostent *he, int port)
for(i = 0; (curr = he->h_addr_list[i]) != NULL; i++) {
size_t ss_size;
- size_t namelen = strlen(he->h_name) + 1; /* include null-terminatior */
+ size_t namelen = strlen(he->h_name) + 1; /* include null-terminator */
#ifdef ENABLE_IPV6
if(he->h_addrtype == AF_INET6)
ss_size = sizeof(struct sockaddr_in6);
diff --git a/lib/curl_addrinfo.h b/lib/curl_addrinfo.h
index b778121a7..c757c49c5 100644
--- a/lib/curl_addrinfo.h
+++ b/lib/curl_addrinfo.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/curl_base64.h b/lib/curl_base64.h
index 85368a163..7f7cd1d98 100644
--- a/lib/curl_base64.h
+++ b/lib/curl_base64.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,11 +24,18 @@
*
***************************************************************************/
+#ifndef BUILDING_LIBCURL
+/* this renames functions so that the tool code can use the same code
+ without getting symbol collisions */
+#define Curl_base64_encode(a,b,c,d) curlx_base64_encode(a,b,c,d)
+#define Curl_base64url_encode(a,b,c,d) curlx_base64url_encode(a,b,c,d)
+#define Curl_base64_decode(a,b,c) curlx_base64_decode(a,b,c)
+#endif
+
CURLcode Curl_base64_encode(const char *inputbuff, size_t insize,
char **outptr, size_t *outlen);
CURLcode Curl_base64url_encode(const char *inputbuff, size_t insize,
char **outptr, size_t *outlen);
CURLcode Curl_base64_decode(const char *src,
unsigned char **outptr, size_t *outlen);
-
#endif /* HEADER_CURL_BASE64_H */
diff --git a/lib/curl_config.h.cmake b/lib/curl_config.h.cmake
index 3ba14923c..339358ea3 100644
--- a/lib/curl_config.h.cmake
+++ b/lib/curl_config.h.cmake
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -32,14 +32,32 @@
/* Location of default ca path */
#cmakedefine CURL_CA_PATH "${CURL_CA_PATH}"
+/* Default SSL backend */
+#cmakedefine CURL_DEFAULT_SSL_BACKEND "${CURL_DEFAULT_SSL_BACKEND}"
+
/* disables alt-svc */
#cmakedefine CURL_DISABLE_ALTSVC 1
/* disables cookies support */
#cmakedefine CURL_DISABLE_COOKIES 1
-/* disables cryptographic authentication */
-#cmakedefine CURL_DISABLE_CRYPTO_AUTH 1
+/* disables Basic authentication */
+#cmakedefine CURL_DISABLE_BASIC_AUTH 1
+
+/* disables Bearer authentication */
+#cmakedefine CURL_DISABLE_BEARER_AUTH 1
+
+/* disables Digest authentication */
+#cmakedefine CURL_DISABLE_DIGEST_AUTH 1
+
+/* disables Kerberos authentication */
+#cmakedefine CURL_DISABLE_KERBEROS_AUTH 1
+
+/* disables negotiate authentication */
+#cmakedefine CURL_DISABLE_NEGOTIATE_AUTH 1
+
+/* disables AWS-SIG4 */
+#cmakedefine CURL_DISABLE_AWS 1
/* disables DICT */
#cmakedefine CURL_DISABLE_DICT 1
@@ -50,12 +68,21 @@
/* disables FILE */
#cmakedefine CURL_DISABLE_FILE 1
+/* disables form api */
+#cmakedefine CURL_DISABLE_FORM_API 1
+
/* disables FTP */
#cmakedefine CURL_DISABLE_FTP 1
+/* disables curl_easy_options API for existing options to curl_easy_setopt */
+#cmakedefine CURL_DISABLE_GETOPTIONS 1
+
/* disables GOPHER */
#cmakedefine CURL_DISABLE_GOPHER 1
+/* disables headers-api support */
+#cmakedefine CURL_DISABLE_HEADERS_API 1
+
/* disables HSTS support */
#cmakedefine CURL_DISABLE_HSTS 1
@@ -77,6 +104,9 @@
/* disables MIME support */
#cmakedefine CURL_DISABLE_MIME 1
+/* disables local binding support */
+#cmakedefine CURL_DISABLE_BINDLOCAL 1
+
/* disables MQTT */
#cmakedefine CURL_DISABLE_MQTT 1
@@ -132,32 +162,23 @@
/* Use Windows LDAP implementation */
#cmakedefine USE_WIN32_LDAP 1
-/* when not building a shared library */
-#cmakedefine CURL_STATICLIB 1
-
-/* your Entropy Gathering Daemon socket pathname */
-#cmakedefine EGD_SOCKET ${EGD_SOCKET}
-
/* Define if you want to enable IPv6 support */
#cmakedefine ENABLE_IPV6 1
/* Define to 1 if you have the alarm function. */
#cmakedefine HAVE_ALARM 1
+/* Define to 1 if you have the arc4random function. */
+#cmakedefine HAVE_ARC4RANDOM 1
+
/* Define to 1 if you have the <arpa/inet.h> header file. */
#cmakedefine HAVE_ARPA_INET_H 1
-/* Define to 1 if you have the <arpa/tftp.h> header file. */
-#cmakedefine HAVE_ARPA_TFTP_H 1
-
-/* Define to 1 if you have the <assert.h> header file. */
-#cmakedefine HAVE_ASSERT_H 1
-
/* Define to 1 if you have _Atomic support. */
#cmakedefine HAVE_ATOMIC 1
-/* Define to 1 if you have the `fchmod' function. */
-#cmakedefine HAVE_FCHMOD 1
+/* Define to 1 if you have the `fnmatch' function. */
+#cmakedefine HAVE_FNMATCH 1
/* Define to 1 if you have the `basename' function. */
#cmakedefine HAVE_BASENAME 1
@@ -171,12 +192,13 @@
/* Define to 1 if you have the clock_gettime function and monotonic timer. */
#cmakedefine HAVE_CLOCK_GETTIME_MONOTONIC 1
+/* Define to 1 if you have the clock_gettime function and raw monotonic timer.
+ */
+#cmakedefine HAVE_CLOCK_GETTIME_MONOTONIC_RAW 1
+
/* Define to 1 if you have the `closesocket' function. */
#cmakedefine HAVE_CLOSESOCKET 1
-/* Define to 1 if you have the <errno.h> header file. */
-#cmakedefine HAVE_ERRNO_H 1
-
/* Define to 1 if you have the fcntl function. */
#cmakedefine HAVE_FCNTL 1
@@ -189,6 +211,15 @@
/* Define to 1 if you have the freeaddrinfo function. */
#cmakedefine HAVE_FREEADDRINFO 1
+/* Define to 1 if you have the fseeko function. */
+#cmakedefine HAVE_FSEEKO 1
+
+/* Define to 1 if you have the fseeko declaration. */
+#cmakedefine HAVE_DECL_FSEEKO 1
+
+/* Define to 1 if you have the _fseeki64 function. */
+#cmakedefine HAVE__FSEEKI64 1
+
/* Define to 1 if you have the ftruncate function. */
#cmakedefine HAVE_FTRUNCATE 1
@@ -225,9 +256,6 @@
/* Define to 1 if you have the `getpass_r' function. */
#cmakedefine HAVE_GETPASS_R 1
-/* Define to 1 if you have the `getppid' function. */
-#cmakedefine HAVE_GETPPID 1
-
/* Define to 1 if you have the `getpeername' function. */
#cmakedefine HAVE_GETPEERNAME 1
@@ -294,9 +322,6 @@
/* Define to 1 if symbol `ADDRESS_FAMILY' exists */
#cmakedefine HAVE_ADDRESS_FAMILY 1
-/* Define to 1 if you have the <inttypes.h> header file. */
-#cmakedefine HAVE_INTTYPES_H 1
-
/* Define to 1 if you have the ioctlsocket function. */
#cmakedefine HAVE_IOCTLSOCKET 1
@@ -364,6 +389,9 @@
/* Define to 1 if the compiler supports the 'long long' data type. */
#cmakedefine HAVE_LONGLONG 1
+/* Define to 1 if you have the 'suseconds_t' data type. */
+#cmakedefine HAVE_SUSECONDS_T 1
+
/* Define to 1 if you have the MSG_NOSIGNAL flag. */
#cmakedefine HAVE_MSG_NOSIGNAL 1
@@ -376,6 +404,9 @@
/* Define to 1 if you have the <netinet/tcp.h> header file. */
#cmakedefine HAVE_NETINET_TCP_H 1
+/* Define to 1 if you have the <netinet/udp.h> header file. */
+#cmakedefine HAVE_NETINET_UDP_H 1
+
/* Define to 1 if you have the <linux/tcp.h> header file. */
#cmakedefine HAVE_LINUX_TCP_H 1
@@ -403,8 +434,8 @@
/* Define to 1 if you have the <pwd.h> header file. */
#cmakedefine HAVE_PWD_H 1
-/* Define to 1 if you have the `RAND_egd' function. */
-#cmakedefine HAVE_RAND_EGD 1
+/* Define to 1 if OpenSSL has the `SSL_set0_wbio` function. */
+#cmakedefine HAVE_SSL_SET0_WBIO 1
/* Define to 1 if you have the recv function. */
#cmakedefine HAVE_RECV 1
@@ -412,9 +443,15 @@
/* Define to 1 if you have the select function. */
#cmakedefine HAVE_SELECT 1
+/* Define to 1 if you have the sched_yield function. */
+#cmakedefine HAVE_SCHED_YIELD 1
+
/* Define to 1 if you have the send function. */
#cmakedefine HAVE_SEND 1
+/* Define to 1 if you have the sendmsg function. */
+#cmakedefine HAVE_SENDMSG 1
+
/* Define to 1 if you have the 'fsetxattr' function. */
#cmakedefine HAVE_FSETXATTR 1
@@ -424,9 +461,6 @@
/* fsetxattr() takes 6 args */
#cmakedefine HAVE_FSETXATTR_6 1
-/* Define to 1 if you have the <setjmp.h> header file. */
-#cmakedefine HAVE_SETJMP_H 1
-
/* Define to 1 if you have the `setlocale' function. */
#cmakedefine HAVE_SETLOCALE 1
@@ -448,12 +482,12 @@
/* Define to 1 if you have the signal function. */
#cmakedefine HAVE_SIGNAL 1
-/* Define to 1 if you have the <signal.h> header file. */
-#cmakedefine HAVE_SIGNAL_H 1
-
/* Define to 1 if you have the sigsetjmp function or macro. */
#cmakedefine HAVE_SIGSETJMP 1
+/* Define to 1 if you have the `snprintf' function. */
+#cmakedefine HAVE_SNPRINTF 1
+
/* Define to 1 if struct sockaddr_in6 has the sin6_scope_id member */
#cmakedefine HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
@@ -463,21 +497,12 @@
/* Define to 1 if you have the socketpair function. */
#cmakedefine HAVE_SOCKETPAIR 1
-/* Define to 1 if you have the <ssl.h> header file. */
-#cmakedefine HAVE_SSL_H 1
-
/* Define to 1 if you have the <stdatomic.h> header file. */
#cmakedefine HAVE_STDATOMIC_H 1
/* Define to 1 if you have the <stdbool.h> header file. */
#cmakedefine HAVE_STDBOOL_H 1
-/* Define to 1 if you have the <stdint.h> header file. */
-#cmakedefine HAVE_STDINT_H 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#cmakedefine HAVE_STDLIB_H 1
-
/* Define to 1 if you have the strcasecmp function. */
#cmakedefine HAVE_STRCASECMP 1
@@ -496,9 +521,6 @@
/* Define to 1 if you have the <strings.h> header file. */
#cmakedefine HAVE_STRINGS_H 1
-/* Define to 1 if you have the <string.h> header file. */
-#cmakedefine HAVE_STRING_H 1
-
/* Define to 1 if you have the <stropts.h> header file. */
#cmakedefine HAVE_STROPTS_H 1
@@ -508,6 +530,9 @@
/* Define to 1 if you have the strtoll function. */
#cmakedefine HAVE_STRTOLL 1
+/* Define to 1 if you have the memrchr function. */
+#cmakedefine HAVE_MEMRCHR 1
+
/* if struct sockaddr_storage is defined */
#cmakedefine HAVE_STRUCT_SOCKADDR_STORAGE 1
@@ -517,6 +542,9 @@
/* Define to 1 if you have the <sys/filio.h> header file. */
#cmakedefine HAVE_SYS_FILIO_H 1
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#cmakedefine HAVE_SYS_WAIT_H 1
+
/* Define to 1 if you have the <sys/ioctl.h> header file. */
#cmakedefine HAVE_SYS_IOCTL_H 1
@@ -559,9 +587,6 @@
/* Define to 1 if you have the <termio.h> header file. */
#cmakedefine HAVE_TERMIO_H 1
-/* Define to 1 if you have the <time.h> header file. */
-#cmakedefine HAVE_TIME_H 1
-
/* Define to 1 if you have the <unistd.h> header file. */
#cmakedefine HAVE_UNISTD_H 1
@@ -574,18 +599,9 @@
/* Define to 1 if you have the <utime.h> header file. */
#cmakedefine HAVE_UTIME_H 1
-/* Define to 1 if compiler supports C99 variadic macro style. */
-#cmakedefine HAVE_VARIADIC_MACROS_C99 1
-
-/* Define to 1 if compiler supports old gcc variadic macro style. */
-#cmakedefine HAVE_VARIADIC_MACROS_GCC 1
-
/* Define to 1 if you have the windows.h header file. */
#cmakedefine HAVE_WINDOWS_H 1
-/* Define to 1 if you have the winldap.h header file. */
-#cmakedefine HAVE_WINLDAP_H 1
-
/* Define to 1 if you have the winsock2.h header file. */
#cmakedefine HAVE_WINSOCK2_H 1
@@ -595,9 +611,6 @@
/* Define to 1 if you have the ws2tcpip.h header file. */
#cmakedefine HAVE_WS2TCPIP_H 1
-/* Define if you have the <process.h> header file. */
-#cmakedefine HAVE_PROCESS_H 1
-
/* Define to 1 if you need the lber.h header file even with ldap.h */
#cmakedefine NEED_LBER_H 1
@@ -646,12 +659,18 @@ ${SIZEOF_INT_CODE}
/* The size of `long', as computed by sizeof. */
${SIZEOF_LONG_CODE}
+/* The size of `long long', as computed by sizeof. */
+${SIZEOF_LONG_LONG_CODE}
+
/* The size of `off_t', as computed by sizeof. */
${SIZEOF_OFF_T_CODE}
/* The size of `curl_off_t', as computed by sizeof. */
${SIZEOF_CURL_OFF_T_CODE}
+/* The size of `curl_socket_t', as computed by sizeof. */
+${SIZEOF_CURL_SOCKET_T_CODE}
+
/* The size of `size_t', as computed by sizeof. */
${SIZEOF_SIZE_T_CODE}
@@ -661,9 +680,6 @@ ${SIZEOF_TIME_T_CODE}
/* Define to 1 if you have the ANSI C header files. */
#cmakedefine STDC_HEADERS 1
-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#cmakedefine TIME_WITH_SYS_TIME 1
-
/* Define if you want to enable c-ares support */
#cmakedefine USE_ARES 1
@@ -700,12 +716,6 @@ ${SIZEOF_TIME_T_CODE}
/* If you want to build curl with the built-in manual */
#cmakedefine USE_MANUAL 1
-/* if NSS is enabled */
-#cmakedefine USE_NSS 1
-
-/* if you have the PK11_CreateManagedGenericObject function */
-#cmakedefine HAVE_PK11_CREATEMANAGEDGENERICOBJECT 1
-
/* if you want to use OpenLDAP code instead of legacy ldap implementation */
#cmakedefine USE_OPENLDAP 1
@@ -735,7 +745,7 @@ ${SIZEOF_TIME_T_CODE}
#cmakedefine USE_MSH3 1
/* if Unix domain sockets are enabled */
-#cmakedefine USE_UNIX_SOCKETS
+#cmakedefine USE_UNIX_SOCKETS 1
/* Define to 1 if you are building a Windows target with large file support. */
#cmakedefine USE_WIN32_LARGE_FILES 1
@@ -790,8 +800,14 @@ ${SIZEOF_TIME_T_CODE}
/* to enable Windows IDN */
#cmakedefine USE_WIN32_IDN 1
-/* to make the compiler know the prototypes of Windows IDN APIs */
-#cmakedefine WANT_IDN_PROTOTYPES 1
-
/* Define to 1 to enable websocket support. */
#cmakedefine USE_WEBSOCKETS 1
+
+/* Define to 1 if OpenSSL has the SSL_CTX_set_srp_username function. */
+#cmakedefine HAVE_OPENSSL_SRP 1
+
+/* Define to 1 if GnuTLS has the gnutls_srp_verifier function. */
+#cmakedefine HAVE_GNUTLS_SRP 1
+
+/* Define to 1 to enable TLS-SRP support. */
+#cmakedefine USE_TLS_SRP 1
diff --git a/lib/curl_config.h.in b/lib/curl_config.h.in
index 06e1dd252..9d8efb31e 100644
--- a/lib/curl_config.h.in
+++ b/lib/curl_config.h.in
@@ -18,21 +18,36 @@
/* disable alt-svc */
#undef CURL_DISABLE_ALTSVC
+/* to disable AWS sig support */
+#undef CURL_DISABLE_AWS
+
+/* to disable basic authentication */
+#undef CURL_DISABLE_BASIC_AUTH
+
+/* to disable bearer authentication */
+#undef CURL_DISABLE_BEARER_AUTH
+
+/* disable local binding support */
+#undef CURL_DISABLE_BINDLOCAL
+
/* to disable cookies support */
#undef CURL_DISABLE_COOKIES
-/* to disable cryptographic authentication */
-#undef CURL_DISABLE_CRYPTO_AUTH
-
/* to disable DICT */
#undef CURL_DISABLE_DICT
+/* to disable digest authentication */
+#undef CURL_DISABLE_DIGEST_AUTH
+
/* disable DoH */
#undef CURL_DISABLE_DOH
/* to disable FILE */
#undef CURL_DISABLE_FILE
+/* disable form API */
+#undef CURL_DISABLE_FORM_API
+
/* to disable FTP */
#undef CURL_DISABLE_FTP
@@ -57,6 +72,9 @@
/* to disable IMAP */
#undef CURL_DISABLE_IMAP
+/* to disable kerberos authentication */
+#undef CURL_DISABLE_KERBEROS_AUTH
+
/* to disable LDAP */
#undef CURL_DISABLE_LDAP
@@ -72,6 +90,9 @@
/* to disable MQTT */
#undef CURL_DISABLE_MQTT
+/* to disable negotiate authentication */
+#undef CURL_DISABLE_NEGOTIATE_AUTH
+
/* disable netrc parsing */
#undef CURL_DISABLE_NETRC
@@ -129,9 +150,6 @@
/* enable debug build options */
#undef DEBUGBUILD
-/* your Entropy Gathering Daemon socket pathname */
-#undef EGD_SOCKET
-
/* Define if you want to enable IPv6 support */
#undef ENABLE_IPV6
@@ -141,15 +159,12 @@
/* Define to 1 if you have the alarm function. */
#undef HAVE_ALARM
+/* Define to 1 if you have the `arc4random' function. */
+#undef HAVE_ARC4RANDOM
+
/* Define to 1 if you have the <arpa/inet.h> header file. */
#undef HAVE_ARPA_INET_H
-/* Define to 1 if you have the <arpa/tftp.h> header file. */
-#undef HAVE_ARPA_TFTP_H
-
-/* Define to 1 if you have the <assert.h> header file. */
-#undef HAVE_ASSERT_H
-
/* Define to 1 if you have _Atomic support. */
#undef HAVE_ATOMIC
@@ -159,9 +174,6 @@
/* Define to 1 if bool is an available type. */
#undef HAVE_BOOL_T
-/* Define to 1 if using BoringSSL. */
-#undef HAVE_BORINGSSL
-
/* if BROTLI is in use */
#undef HAVE_BROTLI
@@ -174,18 +186,22 @@
/* Define to 1 if you have the clock_gettime function and monotonic timer. */
#undef HAVE_CLOCK_GETTIME_MONOTONIC
+/* Define to 1 if you have the clock_gettime function and raw monotonic timer.
+ */
+#undef HAVE_CLOCK_GETTIME_MONOTONIC_RAW
+
/* Define to 1 if you have the closesocket function. */
#undef HAVE_CLOSESOCKET
/* Define to 1 if you have the CloseSocket camel case function. */
#undef HAVE_CLOSESOCKET_CAMEL
-/* Define to 1 if you have the connect function. */
-#undef HAVE_CONNECT
-
/* Define to 1 if you have the <crypto.h> header file. */
#undef HAVE_CRYPTO_H
+/* Define to 1 if you have the fseeko declaration */
+#undef HAVE_DECL_FSEEKO
+
/* Define to 1 if you have the declaration of `getpwuid_r', and to 0 if you
don't. */
#undef HAVE_DECL_GETPWUID_R
@@ -196,15 +212,9 @@
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
-/* Define to 1 if you have the <errno.h> header file. */
-#undef HAVE_ERRNO_H
-
/* Define to 1 if you have the <err.h> header file. */
#undef HAVE_ERR_H
-/* Define to 1 if you have the `fchmod' function. */
-#undef HAVE_FCHMOD
-
/* Define to 1 if you have the fcntl function. */
#undef HAVE_FCNTL
@@ -220,6 +230,9 @@
/* Define to 1 if you have the freeaddrinfo function. */
#undef HAVE_FREEADDRINFO
+/* Define to 1 if you have the `fseeko' function. */
+#undef HAVE_FSEEKO
+
/* Define to 1 if you have the fsetxattr function. */
#undef HAVE_FSETXATTR
@@ -337,6 +350,9 @@
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
+/* Define to 1 if you have the ioctl function. */
+#undef HAVE_IOCTL
+
/* Define to 1 if you have the ioctlsocket function. */
#undef HAVE_IOCTLSOCKET
@@ -350,6 +366,12 @@
/* Define to 1 if you have a working ioctlsocket FIONBIO function. */
#undef HAVE_IOCTLSOCKET_FIONBIO
+/* Define to 1 if you have a working ioctl FIONBIO function. */
+#undef HAVE_IOCTL_FIONBIO
+
+/* Define to 1 if you have a working ioctl SIOCGIFADDR function. */
+#undef HAVE_IOCTL_SIOCGIFADDR
+
/* Define to 1 if you have the <io.h> header file. */
#undef HAVE_IO_H
@@ -359,6 +381,9 @@
/* Define to 1 if you have the ldap.h header file. */
#undef HAVE_LDAP_H
+/* Define to 1 if you have the `ldap_init_fd' function. */
+#undef HAVE_LDAP_INIT_FD
+
/* Use LDAPS implementation */
#undef HAVE_LDAP_SSL
@@ -487,9 +512,6 @@
/* Define to 1 if you have the `pipe' function. */
#undef HAVE_PIPE
-/* if you have the PK11_CreateManagedGenericObject function */
-#undef HAVE_PK11_CREATEMANAGEDGENERICOBJECT
-
/* If you have a fine poll */
#undef HAVE_POLL_FINE
@@ -514,9 +536,6 @@
/* Define to 1 if you have the <quiche.h> header file. */
#undef HAVE_QUICHE_H
-/* Define to 1 if you have the `RAND_egd' function. */
-#undef HAVE_RAND_EGD
-
/* Define to 1 if you have the recv function. */
#undef HAVE_RECV
@@ -556,9 +575,6 @@
/* Define to 1 if you have the signal function. */
#undef HAVE_SIGNAL
-/* Define to 1 if you have the <signal.h> header file. */
-#undef HAVE_SIGNAL_H
-
/* Define to 1 if you have the sigsetjmp function or macro. */
#undef HAVE_SIGSETJMP
@@ -583,6 +599,9 @@
/* Define to 1 if you have the <ssl.h> header file. */
#undef HAVE_SSL_H
+/* Define to 1 if you have the `SSL_set0_wbio' function. */
+#undef HAVE_SSL_SET0_WBIO
+
/* Define to 1 if you have the <stdatomic.h> header file. */
#undef HAVE_STDATOMIC_H
@@ -619,6 +638,9 @@
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
+/* Define to 1 if you have the <stropts.h> header file. */
+#undef HAVE_STROPTS_H
+
/* Define to 1 if you have the strtok_r function. */
#undef HAVE_STRTOK_R
@@ -667,9 +689,6 @@
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
-/* Define to 1 if you have the <sys/uio.h> header file. */
-#undef HAVE_SYS_UIO_H
-
/* Define to 1 if you have the <sys/un.h> header file. */
#undef HAVE_SYS_UN_H
@@ -703,21 +722,9 @@
/* Define to 1 if you have the <utime.h> header file. */
#undef HAVE_UTIME_H
-/* Define to 1 if compiler supports C99 variadic macro style. */
-#undef HAVE_VARIADIC_MACROS_C99
-
-/* Define to 1 if compiler supports old gcc variadic macro style. */
-#undef HAVE_VARIADIC_MACROS_GCC
-
-/* Define to 1 if you have the wincrypt.h header file. */
-#undef HAVE_WINCRYPT_H
-
/* Define to 1 if you have the windows.h header file. */
#undef HAVE_WINDOWS_H
-/* Define to 1 if you have the winldap.h header file. */
-#undef HAVE_WINLDAP_H
-
/* Define to 1 if you have the winsock2.h header file. */
#undef HAVE_WINSOCK2_H
@@ -727,6 +734,9 @@
/* if you have wolfSSL_DES_ecb_encrypt */
#undef HAVE_WOLFSSL_DES_ECB_ENCRYPT
+/* if you have wolfSSL_BIO_set_shutdown */
+#undef HAVE_WOLFSSL_FULL_BIO
+
/* Define to 1 if you have the `wolfSSL_get_peer_certificate' function. */
#undef HAVE_WOLFSSL_GET_PEER_CERTIFICATE
@@ -748,6 +758,9 @@
/* Define to 1 if you have the <zstd.h> header file. */
#undef HAVE_ZSTD_H
+/* Define to 1 if you have the `_fseeki64' function. */
+#undef HAVE__FSEEKI64
+
/* Define to the sub-directory where libtool stores uninstalled libraries. */
#undef LT_OBJDIR
@@ -796,6 +809,9 @@
/* Size of curl_off_t in number of bytes */
#undef SIZEOF_CURL_OFF_T
+/* Size of curl_socket_t in number of bytes */
+#undef SIZEOF_CURL_SOCKET_T
+
/* Size of int in number of bytes */
#undef SIZEOF_INT
@@ -873,15 +889,12 @@
/* if ngtcp2_crypto_gnutls is in use */
#undef USE_NGTCP2_CRYPTO_GNUTLS
-/* if ngtcp2_crypto_openssl is in use */
-#undef USE_NGTCP2_CRYPTO_OPENSSL
+/* if ngtcp2_crypto_quictls is in use */
+#undef USE_NGTCP2_CRYPTO_QUICTLS
/* if ngtcp2_crypto_wolfssl is in use */
#undef USE_NGTCP2_CRYPTO_WOLFSSL
-/* if NSS is enabled */
-#undef USE_NSS
-
/* Use OpenLDAP-specific code */
#undef USE_OPENLDAP
@@ -945,9 +958,6 @@
/* Version number of package */
#undef VERSION
-/* Define to 1 to provide own prototypes. */
-#undef WANT_IDN_PROTOTYPES
-
/* Define to 1 if OS is AIX. */
#ifndef _ALL_SOURCE
# undef _ALL_SOURCE
diff --git a/lib/curl_ctype.h b/lib/curl_ctype.h
index dc6b8cab8..7f0d0cc29 100644
--- a/lib/curl_ctype.h
+++ b/lib/curl_ctype.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -27,7 +27,7 @@
#define ISLOWHEXALHA(x) (((x) >= 'a') && ((x) <= 'f'))
#define ISUPHEXALHA(x) (((x) >= 'A') && ((x) <= 'F'))
-#define ISLOWCNTRL(x) ((x) >= 0 && ((x) <= 0x1f))
+#define ISLOWCNTRL(x) ((unsigned char)(x) <= 0x1f)
#define IS7F(x) ((x) == 0x7f)
#define ISLOWPRINT(x) (((x) >= 9) && ((x) <= 0x0d))
@@ -43,5 +43,9 @@
#define ISDIGIT(x) (((x) >= '0') && ((x) <= '9'))
#define ISBLANK(x) (((x) == ' ') || ((x) == '\t'))
#define ISSPACE(x) (ISBLANK(x) || (((x) >= 0xa) && ((x) <= 0x0d)))
+#define ISURLPUNTCS(x) (((x) == '-') || ((x) == '.') || ((x) == '_') || \
+ ((x) == '~'))
+#define ISUNRESERVED(x) (ISALNUM(x) || ISURLPUNTCS(x))
+
#endif /* HEADER_CURL_CTYPE_H */
diff --git a/lib/curl_des.c b/lib/curl_des.c
index a2bf648c2..b77763f26 100644
--- a/lib/curl_des.c
+++ b/lib/curl_des.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2015 - 2022, Steve Holme, <steve_holme@hotmail.com>.
+ * Copyright (C) Steve Holme, <steve_holme@hotmail.com>.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,12 +24,11 @@
#include "curl_setup.h"
-#if defined(USE_CURL_NTLM_CORE) && !defined(USE_WOLFSSL) && \
- (defined(USE_GNUTLS) || \
- defined(USE_NSS) || \
- defined(USE_SECTRANSP) || \
- defined(USE_OS400CRYPTO) || \
- defined(USE_WIN32_CRYPTO))
+#if defined(USE_CURL_NTLM_CORE) && !defined(USE_WOLFSSL) && \
+ (defined(USE_GNUTLS) || \
+ defined(USE_SECTRANSP) || \
+ defined(USE_OS400CRYPTO) || \
+ defined(USE_WIN32_CRYPTO))
#include "curl_des.h"
diff --git a/lib/curl_des.h b/lib/curl_des.h
index c1c167471..66525ab43 100644
--- a/lib/curl_des.h
+++ b/lib/curl_des.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2015 - 2022, Steve Holme, <steve_holme@hotmail.com>.
+ * Copyright (C) Steve Holme, <steve_holme@hotmail.com>.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -26,12 +26,11 @@
#include "curl_setup.h"
-#if defined(USE_CURL_NTLM_CORE) && !defined(USE_WOLFSSL) && \
- (defined(USE_GNUTLS) || \
- defined(USE_NSS) || \
- defined(USE_SECTRANSP) || \
- defined(USE_OS400CRYPTO) || \
- defined(USE_WIN32_CRYPTO))
+#if defined(USE_CURL_NTLM_CORE) && !defined(USE_WOLFSSL) && \
+ (defined(USE_GNUTLS) || \
+ defined(USE_SECTRANSP) || \
+ defined(USE_OS400CRYPTO) || \
+ defined(USE_WIN32_CRYPTO))
/* Applies odd parity to the given byte array */
void Curl_des_set_odd_parity(unsigned char *bytes, size_t length);
diff --git a/lib/curl_endian.c b/lib/curl_endian.c
index 3cc7734f3..11c662a4c 100644
--- a/lib/curl_endian.c
+++ b/lib/curl_endian.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/curl_endian.h b/lib/curl_endian.h
index 758d55f2c..fa283214b 100644
--- a/lib/curl_endian.h
+++ b/lib/curl_endian.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -33,13 +33,4 @@ unsigned int Curl_read32_le(const unsigned char *buf);
/* Converts a 16-bit integer from big endian */
unsigned short Curl_read16_be(const unsigned char *buf);
-#if (SIZEOF_CURL_OFF_T > 4)
-/* Converts a 64-bit integer to little endian */
-#if defined(HAVE_LONGLONG)
-void Curl_write64_le(const long long value, unsigned char *buffer);
-#else
-void Curl_write64_le(const __int64 value, unsigned char *buffer);
-#endif
-#endif
-
#endif /* HEADER_CURL_ENDIAN_H */
diff --git a/lib/curl_fnmatch.c b/lib/curl_fnmatch.c
index 0dd1eb5ef..5f9ca4f1b 100644
--- a/lib/curl_fnmatch.c
+++ b/lib/curl_fnmatch.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -76,9 +76,9 @@ static int parsekeyword(unsigned char **pattern, unsigned char *charset)
parsekey_state state = CURLFNM_PKW_INIT;
#define KEYLEN 10
char keyword[KEYLEN] = { 0 };
- int found = FALSE;
int i;
unsigned char *p = *pattern;
+ bool found = FALSE;
for(i = 0; !found; i++) {
char c = *p++;
if(i >= KEYLEN)
@@ -368,14 +368,13 @@ int Curl_fnmatch(void *ptr, const char *pattern, const char *string)
*/
int Curl_fnmatch(void *ptr, const char *pattern, const char *string)
{
- int rc;
(void)ptr; /* the argument is specified by the curl_fnmatch_callback
prototype, but not used by Curl_fnmatch() */
if(!pattern || !string) {
return CURL_FNMATCH_FAIL;
}
- rc = fnmatch(pattern, string, 0);
- switch(rc) {
+
+ switch(fnmatch(pattern, string, 0)) {
case 0:
return CURL_FNMATCH_MATCH;
case FNM_NOMATCH:
diff --git a/lib/curl_fnmatch.h b/lib/curl_fnmatch.h
index 8324be533..595646ff0 100644
--- a/lib/curl_fnmatch.h
+++ b/lib/curl_fnmatch.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/curl_get_line.c b/lib/curl_get_line.c
index 22e3705f4..686abe751 100644
--- a/lib/curl_get_line.c
+++ b/lib/curl_get_line.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -41,17 +41,41 @@ char *Curl_get_line(char *buf, int len, FILE *input)
bool partial = FALSE;
while(1) {
char *b = fgets(buf, len, input);
+
if(b) {
size_t rlen = strlen(b);
- if(rlen && (b[rlen-1] == '\n')) {
+
+ if(!rlen)
+ break;
+
+ if(b[rlen-1] == '\n') {
+ /* b is \n terminated */
if(partial) {
partial = FALSE;
continue;
}
return b;
}
- /* read a partial, discard the next piece that ends with newline */
- partial = TRUE;
+ else if(feof(input)) {
+ if(partial)
+ /* Line is already too large to return, ignore rest */
+ break;
+
+ if(rlen + 1 < (size_t) len) {
+ /* b is EOF terminated, insert missing \n */
+ b[rlen] = '\n';
+ b[rlen + 1] = '\0';
+ return b;
+ }
+ else
+ /* Maximum buffersize reached + EOF
+ * This line is impossible to add a \n to so we'll ignore it
+ */
+ break;
+ }
+ else
+ /* Maximum buffersize reached */
+ partial = TRUE;
}
else
break;
diff --git a/lib/curl_get_line.h b/lib/curl_get_line.h
index b2a534d00..0ff32c5c2 100644
--- a/lib/curl_get_line.h
+++ b/lib/curl_get_line.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/curl_gethostname.c b/lib/curl_gethostname.c
index 4747e938d..706b2e689 100644
--- a/lib/curl_gethostname.c
+++ b/lib/curl_gethostname.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/curl_gethostname.h b/lib/curl_gethostname.h
index b7360969a..9281d9c24 100644
--- a/lib/curl_gethostname.h
+++ b/lib/curl_gethostname.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/curl_gssapi.c b/lib/curl_gssapi.c
index 01ab48ec3..c6fe1256b 100644
--- a/lib/curl_gssapi.c
+++ b/lib/curl_gssapi.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2011 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -34,10 +34,16 @@
#include "curl_memory.h"
#include "memdebug.h"
-gss_OID_desc Curl_spnego_mech_oid = {
+#if defined(__GNUC__)
+#define CURL_ALIGN8 __attribute__ ((aligned(8)))
+#else
+#define CURL_ALIGN8
+#endif
+
+gss_OID_desc Curl_spnego_mech_oid CURL_ALIGN8 = {
6, (char *)"\x2b\x06\x01\x05\x05\x02"
};
-gss_OID_desc Curl_krb5_mech_oid = {
+gss_OID_desc Curl_krb5_mech_oid CURL_ALIGN8 = {
9, (char *)"\x2a\x86\x48\x86\xf7\x12\x01\x02\x02"
};
diff --git a/lib/curl_gssapi.h b/lib/curl_gssapi.h
index b4ed482aa..7b9a534ea 100644
--- a/lib/curl_gssapi.h
+++ b/lib/curl_gssapi.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2011 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/curl_hmac.h b/lib/curl_hmac.h
index 36c0bd62e..7a5387a94 100644
--- a/lib/curl_hmac.h
+++ b/lib/curl_hmac.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,7 +24,9 @@
*
***************************************************************************/
-#ifndef CURL_DISABLE_CRYPTO_AUTH
+#if (defined(USE_CURL_NTLM_CORE) && !defined(USE_WINDOWS_SSPI)) \
+ || !defined(CURL_DISABLE_AWS) || !defined(CURL_DISABLE_DIGEST_AUTH) \
+ || defined(USE_LIBSSH2)
#include <curl/curl.h>
diff --git a/lib/curl_krb5.h b/lib/curl_krb5.h
index ccd6f10e3..ccf6b96a8 100644
--- a/lib/curl_krb5.h
+++ b/lib/curl_krb5.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/curl_ldap.h b/lib/curl_ldap.h
index ba3ede426..8a1d807ed 100644
--- a/lib/curl_ldap.h
+++ b/lib/curl_ldap.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/curl_md4.h b/lib/curl_md4.h
index 8049355cf..4706e4957 100644
--- a/lib/curl_md4.h
+++ b/lib/curl_md4.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -25,14 +25,15 @@
***************************************************************************/
#include "curl_setup.h"
+#include <curl/curl.h>
-#if !defined(CURL_DISABLE_CRYPTO_AUTH)
+#if defined(USE_CURL_NTLM_CORE)
#define MD4_DIGEST_LENGTH 16
-void Curl_md4it(unsigned char *output, const unsigned char *input,
- const size_t len);
+CURLcode Curl_md4it(unsigned char *output, const unsigned char *input,
+ const size_t len);
-#endif /* !defined(CURL_DISABLE_CRYPTO_AUTH) */
+#endif /* defined(USE_CURL_NTLM_CORE) */
#endif /* HEADER_CURL_MD4_H */
diff --git a/lib/curl_md5.h b/lib/curl_md5.h
index 789329654..61671c306 100644
--- a/lib/curl_md5.h
+++ b/lib/curl_md5.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,7 +24,9 @@
*
***************************************************************************/
-#ifndef CURL_DISABLE_CRYPTO_AUTH
+#if (defined(USE_CURL_NTLM_CORE) && !defined(USE_WINDOWS_SSPI)) \
+ || !defined(CURL_DISABLE_DIGEST_AUTH)
+
#include "curl_hmac.h"
#define MD5_DIGEST_LEN 16
diff --git a/lib/curl_memory.h b/lib/curl_memory.h
index 092fc9f75..714ad71c9 100644
--- a/lib/curl_memory.h
+++ b/lib/curl_memory.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -52,38 +52,67 @@
* mentioned above will compile without any indication, but it will
* trigger weird memory related issues at runtime.
*
- * OTOH some source files from 'lib' subdirectory may additionally be
- * used directly as source code when using some curlx_ functions by
- * third party programs that don't even use libcurl at all. When using
- * these source files in this way it is necessary these are compiled
- * with CURLX_NO_MEMORY_CALLBACKS defined, in order to ensure that no
- * attempt of calling libcurl's memory callbacks is done from code
- * which can not use this machinery.
- *
- * Notice that libcurl's 'memory tracking' system works chaining into
- * the memory callback machinery. This implies that when compiling
- * 'lib' source files with CURLX_NO_MEMORY_CALLBACKS defined this file
- * disengages usage of libcurl's 'memory tracking' system, defining
- * MEMDEBUG_NODEFINES and overriding CURLDEBUG purpose.
- *
- * CURLX_NO_MEMORY_CALLBACKS takes precedence over CURLDEBUG. This is
- * done in order to allow building a 'memory tracking' enabled libcurl
- * and at the same time allow building programs which do not use it.
- *
- * Programs and libraries in 'tests' subdirectories have specific
- * purposes and needs, and as such each one will use whatever fits
- * best, depending additionally whether it links with libcurl or not.
- *
- * Caveat emptor. Proper curlx_* separation is a work in progress
- * the same as CURLX_NO_MEMORY_CALLBACKS usage, some adjustments may
- * still be required. IOW don't use them yet, there are sharp edges.
*/
#ifdef HEADER_CURL_MEMDEBUG_H
-#error "Header memdebug.h shall not be included before curl_memory.h"
+/* cleanup after memdebug.h */
+
+#ifdef MEMDEBUG_NODEFINES
+#ifdef CURLDEBUG
+
+#undef strdup
+#undef malloc
+#undef calloc
+#undef realloc
+#undef free
+#undef send
+#undef recv
+
+#ifdef _WIN32
+# ifdef UNICODE
+# undef wcsdup
+# undef _wcsdup
+# undef _tcsdup
+# else
+# undef _tcsdup
+# endif
+#endif
+
+#undef socket
+#undef accept
+#ifdef HAVE_SOCKETPAIR
+#undef socketpair
+#endif
+
+#ifdef HAVE_GETADDRINFO
+#if defined(getaddrinfo) && defined(__osf__)
+#undef ogetaddrinfo
+#else
+#undef getaddrinfo
#endif
+#endif /* HAVE_GETADDRINFO */
+
+#ifdef HAVE_FREEADDRINFO
+#undef freeaddrinfo
+#endif /* HAVE_FREEADDRINFO */
+
+/* sclose is probably already defined, redefine it! */
+#undef sclose
+#undef fopen
+#undef fdopen
+#undef fclose
+
+#endif /* MEMDEBUG_NODEFINES */
+#endif /* CURLDEBUG */
-#ifndef CURLX_NO_MEMORY_CALLBACKS
+#undef HEADER_CURL_MEMDEBUG_H
+#endif /* HEADER_CURL_MEMDEBUG_H */
+
+/*
+** Following section applies even when CURLDEBUG is not defined.
+*/
+
+#undef fake_sclose
#ifndef CURL_DID_MEMORY_FUNC_TYPEDEFS /* only if not already done */
/*
@@ -105,7 +134,7 @@ extern curl_free_callback Curl_cfree;
extern curl_realloc_callback Curl_crealloc;
extern curl_strdup_callback Curl_cstrdup;
extern curl_calloc_callback Curl_ccalloc;
-#if defined(WIN32) && defined(UNICODE)
+#if defined(_WIN32) && defined(UNICODE)
extern curl_wcsdup_callback Curl_cwcsdup;
#endif
@@ -131,7 +160,7 @@ extern curl_wcsdup_callback Curl_cwcsdup;
#undef free
#define free(ptr) Curl_cfree(ptr)
-#ifdef WIN32
+#ifdef _WIN32
# ifdef UNICODE
# undef wcsdup
# define wcsdup(ptr) Curl_cwcsdup(ptr)
@@ -146,13 +175,4 @@ extern curl_wcsdup_callback Curl_cwcsdup;
#endif
#endif /* CURLDEBUG */
-
-#else /* CURLX_NO_MEMORY_CALLBACKS */
-
-#ifndef MEMDEBUG_NODEFINES
-#define MEMDEBUG_NODEFINES
-#endif
-
-#endif /* CURLX_NO_MEMORY_CALLBACKS */
-
#endif /* HEADER_CURL_MEMORY_H */
diff --git a/lib/curl_memrchr.c b/lib/curl_memrchr.c
index c329a6176..3f3dc6de1 100644
--- a/lib/curl_memrchr.c
+++ b/lib/curl_memrchr.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/curl_memrchr.h b/lib/curl_memrchr.h
index e7654e1d9..45bb38c68 100644
--- a/lib/curl_memrchr.h
+++ b/lib/curl_memrchr.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -28,9 +28,7 @@
#ifdef HAVE_MEMRCHR
-#ifdef HAVE_STRING_H
-# include <string.h>
-#endif
+#include <string.h>
#ifdef HAVE_STRINGS_H
# include <strings.h>
#endif
diff --git a/lib/curl_multibyte.c b/lib/curl_multibyte.c
index 309dccbfe..ff2109856 100644
--- a/lib/curl_multibyte.c
+++ b/lib/curl_multibyte.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -32,7 +32,7 @@
#include "curl_setup.h"
-#if defined(WIN32)
+#if defined(_WIN32)
#include "curl_multibyte.h"
@@ -84,7 +84,7 @@ char *curlx_convert_wchar_to_UTF8(const wchar_t *str_w)
return str_utf8;
}
-#endif /* WIN32 */
+#endif /* _WIN32 */
#if defined(USE_WIN32_LARGE_FILES) || defined(USE_WIN32_SMALL_FILES)
diff --git a/lib/curl_multibyte.h b/lib/curl_multibyte.h
index 929714873..8b9ac719e 100644
--- a/lib/curl_multibyte.h
+++ b/lib/curl_multibyte.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -25,7 +25,7 @@
***************************************************************************/
#include "curl_setup.h"
-#if defined(WIN32)
+#if defined(_WIN32)
/*
* MultiByte conversions using Windows kernel32 library.
@@ -33,7 +33,7 @@
wchar_t *curlx_convert_UTF8_to_wchar(const char *str_utf8);
char *curlx_convert_wchar_to_UTF8(const wchar_t *str_w);
-#endif /* WIN32 */
+#endif /* _WIN32 */
/*
* Macros curlx_convert_UTF8_to_tchar(), curlx_convert_tchar_to_UTF8()
@@ -54,7 +54,7 @@ char *curlx_convert_wchar_to_UTF8(const wchar_t *str_w);
* ensure that the curl memdebug override macros do not replace them.
*/
-#if defined(UNICODE) && defined(WIN32)
+#if defined(UNICODE) && defined(_WIN32)
#define curlx_convert_UTF8_to_tchar(ptr) curlx_convert_UTF8_to_wchar((ptr))
#define curlx_convert_tchar_to_UTF8(ptr) curlx_convert_wchar_to_UTF8((ptr))
@@ -78,7 +78,7 @@ typedef union {
const unsigned char *const_tbyte_ptr;
} xcharp_u;
-#endif /* UNICODE && WIN32 */
+#endif /* UNICODE && _WIN32 */
#define curlx_unicodefree(ptr) \
do { \
diff --git a/lib/curl_ntlm_core.c b/lib/curl_ntlm_core.c
index 38e193c18..6f6d75c03 100644
--- a/lib/curl_ntlm_core.c
+++ b/lib/curl_ntlm_core.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -36,17 +36,18 @@
/* Please keep the SSL backend-specific #if branches in this order:
1. USE_OPENSSL
- 2. USE_GNUTLS
- 3. USE_NSS
- 4. USE_MBEDTLS
- 5. USE_SECTRANSP
- 6. USE_OS400CRYPTO
- 7. USE_WIN32_CRYPTO
+ 2. USE_WOLFSSL
+ 3. USE_GNUTLS
+ 4. -
+ 5. USE_MBEDTLS
+ 6. USE_SECTRANSP
+ 7. USE_OS400CRYPTO
+ 8. USE_WIN32_CRYPTO
This ensures that:
- the same SSL branch gets activated throughout this source
file even if multiple backends are enabled at the same time.
- - OpenSSL and NSS have higher priority than Windows Crypt, due
+ - OpenSSL has higher priority than Windows Crypt, due
to issues with the latter supporting NTLM2Session responses
in NTLM type-3 messages.
*/
@@ -82,6 +83,10 @@
# define DES_ecb_encrypt des_ecb_encrypt
# define DESKEY(x) x
# define DESKEYARG(x) x
+# elif defined(OPENSSL_IS_AWSLC)
+# define DES_set_key_unchecked (void)DES_set_key
+# define DESKEYARG(x) *x
+# define DESKEY(x) &x
# else
# define DESKEYARG(x) *x
# define DESKEY(x) &x
@@ -91,12 +96,6 @@
# include <nettle/des.h>
-#elif defined(USE_NSS)
-
-# include <nss.h>
-# include <pk11pub.h>
-# include <hasht.h>
-
#elif defined(USE_MBEDTLS)
# include <mbedtls/des.h>
@@ -112,6 +111,7 @@
# include <wincrypt.h>
#else
# error "Can't compile NTLM support without a crypto library with DES."
+# define CURL_NTLM_NOT_SUPPORTED
#endif
#include "urldata.h"
@@ -131,6 +131,7 @@
#define NTLMv2_BLOB_SIGNATURE "\x01\x01\x00\x00"
#define NTLMv2_BLOB_LEN (44 -16 + ntlm->target_info_len + 4)
+#if !defined(CURL_NTLM_NOT_SUPPORTED)
/*
* Turns a 56-bit key into being 64-bit wide.
*/
@@ -145,6 +146,7 @@ static void extend_key_56_to_64(const unsigned char *key_56, char *key)
key[6] = (unsigned char)(((key_56[5] << 2) & 0xFF) | (key_56[6] >> 6));
key[7] = (unsigned char) ((key_56[6] << 1) & 0xFF);
}
+#endif
#if defined(USE_OPENSSL_DES) || defined(USE_WOLFSSL)
/*
@@ -183,70 +185,6 @@ static void setup_des_key(const unsigned char *key_56,
des_set_key(des, (const uint8_t *) key);
}
-#elif defined(USE_NSS)
-
-/*
- * Expands a 56 bit key KEY_56 to 64 bit and encrypts 64 bit of data, using
- * the expanded key. The caller is responsible for giving 64 bit of valid
- * data is IN and (at least) 64 bit large buffer as OUT.
- */
-static bool encrypt_des(const unsigned char *in, unsigned char *out,
- const unsigned char *key_56)
-{
- const CK_MECHANISM_TYPE mech = CKM_DES_ECB; /* DES cipher in ECB mode */
- char key[8]; /* expanded 64 bit key */
- SECItem key_item;
- PK11SymKey *symkey = NULL;
- SECItem *param = NULL;
- PK11Context *ctx = NULL;
- int out_len; /* not used, required by NSS */
- bool rv = FALSE;
-
- /* use internal slot for DES encryption (requires NSS to be initialized) */
- PK11SlotInfo *slot = PK11_GetInternalKeySlot();
- if(!slot)
- return FALSE;
-
- /* Expand the 56-bit key to 64-bits */
- extend_key_56_to_64(key_56, key);
-
- /* Set the key parity to odd */
- Curl_des_set_odd_parity((unsigned char *) key, sizeof(key));
-
- /* Import the key */
- key_item.data = (unsigned char *)key;
- key_item.len = sizeof(key);
- symkey = PK11_ImportSymKey(slot, mech, PK11_OriginUnwrap, CKA_ENCRYPT,
- &key_item, NULL);
- if(!symkey)
- goto fail;
-
- /* Create the DES encryption context */
- param = PK11_ParamFromIV(mech, /* no IV in ECB mode */ NULL);
- if(!param)
- goto fail;
- ctx = PK11_CreateContextBySymKey(mech, CKA_ENCRYPT, symkey, param);
- if(!ctx)
- goto fail;
-
- /* Perform the encryption */
- if(SECSuccess == PK11_CipherOp(ctx, out, &out_len, /* outbuflen */ 8,
- (unsigned char *)in, /* inbuflen */ 8)
- && SECSuccess == PK11_Finalize(ctx))
- rv = /* all OK */ TRUE;
-
-fail:
- /* cleanup */
- if(ctx)
- PK11_DestroyContext(ctx, PR_TRUE);
- if(symkey)
- PK11_FreeSymKey(symkey);
- if(param)
- SECITEM_FreeItem(param, PR_TRUE);
- PK11_FreeSlot(slot);
- return rv;
-}
-
#elif defined(USE_MBEDTLS)
static bool encrypt_des(const unsigned char *in, unsigned char *out,
@@ -397,11 +335,15 @@ void Curl_ntlm_core_lm_resp(const unsigned char *keys,
des_encrypt(&des, 8, results + 8, plaintext);
setup_des_key(keys + 14, &des);
des_encrypt(&des, 8, results + 16, plaintext);
-#elif defined(USE_NSS) || defined(USE_MBEDTLS) || defined(USE_SECTRANSP) \
+#elif defined(USE_MBEDTLS) || defined(USE_SECTRANSP) \
|| defined(USE_OS400CRYPTO) || defined(USE_WIN32_CRYPTO)
encrypt_des(plaintext, results, keys);
encrypt_des(plaintext, results + 8, keys + 7);
encrypt_des(plaintext, results + 16, keys + 14);
+#else
+ (void)keys;
+ (void)plaintext;
+ (void)results;
#endif
}
@@ -412,9 +354,11 @@ CURLcode Curl_ntlm_core_mk_lm_hash(const char *password,
unsigned char *lmbuffer /* 21 bytes */)
{
unsigned char pw[14];
+#if !defined(CURL_NTLM_NOT_SUPPORTED)
static const unsigned char magic[] = {
0x4B, 0x47, 0x53, 0x21, 0x40, 0x23, 0x24, 0x25 /* i.e. KGS!@#$% */
};
+#endif
size_t len = CURLMIN(strlen(password), 14);
Curl_strntoupper((char *)pw, password, len);
@@ -439,7 +383,7 @@ CURLcode Curl_ntlm_core_mk_lm_hash(const char *password,
des_encrypt(&des, 8, lmbuffer, magic);
setup_des_key(pw + 7, &des);
des_encrypt(&des, 8, lmbuffer + 8, magic);
-#elif defined(USE_NSS) || defined(USE_MBEDTLS) || defined(USE_SECTRANSP) \
+#elif defined(USE_MBEDTLS) || defined(USE_SECTRANSP) \
|| defined(USE_OS400CRYPTO) || defined(USE_WIN32_CRYPTO)
encrypt_des(magic, lmbuffer, pw);
encrypt_des(magic, lmbuffer + 8, pw + 7);
@@ -484,6 +428,7 @@ CURLcode Curl_ntlm_core_mk_nt_hash(const char *password,
{
size_t len = strlen(password);
unsigned char *pw;
+ CURLcode result;
if(len > SIZE_T_MAX/2) /* avoid integer overflow */
return CURLE_OUT_OF_MEMORY;
pw = len ? malloc(len * 2) : (unsigned char *)strdup("");
@@ -493,12 +438,13 @@ CURLcode Curl_ntlm_core_mk_nt_hash(const char *password,
ascii_to_unicode_le(pw, password, len);
/* Create NT hashed password. */
- Curl_md4it(ntbuffer, pw, 2 * len);
- memset(ntbuffer + 16, 0, 21 - 16);
+ result = Curl_md4it(ntbuffer, pw, 2 * len);
+ if(!result)
+ memset(ntbuffer + 16, 0, 21 - 16);
free(pw);
- return CURLE_OK;
+ return result;
}
#if !defined(USE_WINDOWS_SSPI)
@@ -658,7 +604,8 @@ CURLcode Curl_ntlm_core_mk_ntlmv2_resp(unsigned char *ntlmv2hash,
LONGQUARTET(tw.dwLowDateTime), LONGQUARTET(tw.dwHighDateTime));
memcpy(ptr + 32, challenge_client, 8);
- memcpy(ptr + 44, ntlm->target_info, ntlm->target_info_len);
+ if(ntlm->target_info_len)
+ memcpy(ptr + 44, ntlm->target_info, ntlm->target_info_len);
/* Concatenate the Type 2 challenge with the BLOB and do HMAC MD5 */
memcpy(ptr + 8, &ntlm->nonce[0], 8);
diff --git a/lib/curl_ntlm_core.h b/lib/curl_ntlm_core.h
index 60444c9dc..0c62ee052 100644
--- a/lib/curl_ntlm_core.h
+++ b/lib/curl_ntlm_core.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -28,20 +28,11 @@
#if defined(USE_CURL_NTLM_CORE)
-/* If NSS is the first available SSL backend (see order in curl_ntlm_core.c)
- then it must be initialized to be used by NTLM. */
-#if !defined(USE_OPENSSL) && \
- !defined(USE_WOLFSSL) && \
- !defined(USE_GNUTLS) && \
- defined(USE_NSS)
-#define NTLM_NEEDS_NSS_INIT
-#endif
-
-#ifdef USE_WOLFSSL
+#if defined(USE_OPENSSL)
+# include <openssl/ssl.h>
+#elif defined(USE_WOLFSSL)
# include <wolfssl/options.h>
# include <wolfssl/openssl/ssl.h>
-#elif defined(USE_OPENSSL)
-# include <openssl/ssl.h>
#endif
/* Helpers to generate function byte arguments in little endian order */
diff --git a/lib/curl_ntlm_wb.c b/lib/curl_ntlm_wb.c
index 33dcf0ce2..b087a37a3 100644
--- a/lib/curl_ntlm_wb.c
+++ b/lib/curl_ntlm_wb.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -39,9 +39,7 @@
#ifdef HAVE_SYS_WAIT_H
#include <sys/wait.h>
#endif
-#ifdef HAVE_SIGNAL_H
#include <signal.h>
-#endif
#ifdef HAVE_PWD_H
#include <pwd.h>
#endif
@@ -70,7 +68,9 @@
/* Portable 'sclose_nolog' used only in child process instead of 'sclose'
to avoid fooling the socket leak detector */
-#if defined(HAVE_CLOSESOCKET)
+#ifdef HAVE_PIPE
+# define sclose_nolog(x) close((x))
+#elif defined(HAVE_CLOSESOCKET)
# define sclose_nolog(x) closesocket((x))
#elif defined(HAVE_CLOSESOCKET_CAMEL)
# define sclose_nolog(x) CloseSocket((x))
@@ -191,7 +191,7 @@ static CURLcode ntlm_wb_init(struct Curl_easy *data, struct ntlmdata *ntlm,
goto done;
}
- if(Curl_socketpair(AF_UNIX, SOCK_STREAM, 0, sockfds)) {
+ if(wakeup_create(sockfds)) {
failf(data, "Could not open socket pair. errno %d: %s",
errno, Curl_strerror(errno, buffer, sizeof(buffer)));
goto done;
@@ -199,8 +199,8 @@ static CURLcode ntlm_wb_init(struct Curl_easy *data, struct ntlmdata *ntlm,
child_pid = fork();
if(child_pid == -1) {
- sclose(sockfds[0]);
- sclose(sockfds[1]);
+ wakeup_close(sockfds[0]);
+ wakeup_close(sockfds[1]);
failf(data, "Could not fork. errno %d: %s",
errno, Curl_strerror(errno, buffer, sizeof(buffer)));
goto done;
@@ -270,7 +270,7 @@ static CURLcode ntlm_wb_response(struct Curl_easy *data, struct ntlmdata *ntlm,
Curl_dyn_init(&b, MAX_NTLM_WB_RESPONSE);
while(len_in > 0) {
- ssize_t written = swrite(ntlm->ntlm_auth_hlpr_socket, input, len_in);
+ ssize_t written = wakeup_write(ntlm->ntlm_auth_hlpr_socket, input, len_in);
if(written == -1) {
/* Interrupted by a signal, retry it */
if(errno == EINTR)
@@ -284,7 +284,7 @@ static CURLcode ntlm_wb_response(struct Curl_easy *data, struct ntlmdata *ntlm,
/* Read one line */
while(1) {
ssize_t size =
- sread(ntlm->ntlm_auth_hlpr_socket, buf, data->set.buffer_size);
+ wakeup_read(ntlm->ntlm_auth_hlpr_socket, buf, data->set.buffer_size);
if(size == -1) {
if(errno == EINTR)
continue;
@@ -385,7 +385,7 @@ CURLcode Curl_output_ntlm_wb(struct Curl_easy *data, struct connectdata *conn,
bool proxy)
{
/* point to the address of the pointer that holds the string to send to the
- server, which is for a plain host or for a HTTP proxy */
+ server, which is for a plain host or for an HTTP proxy */
char **allocuserpwd;
/* point to the name and password for this */
const char *userp;
diff --git a/lib/curl_ntlm_wb.h b/lib/curl_ntlm_wb.h
index 1f04db8c3..37704c0fe 100644
--- a/lib/curl_ntlm_wb.h
+++ b/lib/curl_ntlm_wb.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/curl_path.c b/lib/curl_path.c
index b55e83047..856423db9 100644
--- a/lib/curl_path.c
+++ b/lib/curl_path.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -32,66 +32,68 @@
#include "escape.h"
#include "memdebug.h"
+#define MAX_SSHPATH_LEN 100000 /* arbitrary */
+
/* figure out the path to work with in this particular request */
CURLcode Curl_getworkingpath(struct Curl_easy *data,
char *homedir, /* when SFTP is used */
char **path) /* returns the allocated
real path to work with */
{
- char *real_path = NULL;
char *working_path;
size_t working_path_len;
+ struct dynbuf npath;
CURLcode result =
Curl_urldecode(data->state.up.path, 0, &working_path,
&working_path_len, REJECT_ZERO);
if(result)
return result;
+ /* new path to switch to in case we need to */
+ Curl_dyn_init(&npath, MAX_SSHPATH_LEN);
+
/* Check for /~/, indicating relative to the user's home directory */
- if(data->conn->handler->protocol & CURLPROTO_SCP) {
- real_path = malloc(working_path_len + 1);
- if(!real_path) {
+ if((data->conn->handler->protocol & CURLPROTO_SCP) &&
+ (working_path_len > 3) && (!memcmp(working_path, "/~/", 3))) {
+ /* It is referenced to the home directory, so strip the leading '/~/' */
+ if(Curl_dyn_addn(&npath, &working_path[3], working_path_len - 3)) {
free(working_path);
return CURLE_OUT_OF_MEMORY;
}
- if((working_path_len > 3) && (!memcmp(working_path, "/~/", 3)))
- /* It is referenced to the home directory, so strip the leading '/~/' */
- memcpy(real_path, working_path + 3, working_path_len - 2);
- else
- memcpy(real_path, working_path, 1 + working_path_len);
}
- else if(data->conn->handler->protocol & CURLPROTO_SFTP) {
- if((working_path_len > 1) && (working_path[1] == '~')) {
- size_t homelen = strlen(homedir);
- real_path = malloc(homelen + working_path_len + 1);
- if(!real_path) {
- free(working_path);
- return CURLE_OUT_OF_MEMORY;
- }
- /* It is referenced to the home directory, so strip the
- leading '/' */
- memcpy(real_path, homedir, homelen);
- real_path[homelen] = '/';
- real_path[homelen + 1] = '\0';
- if(working_path_len > 3) {
- memcpy(real_path + homelen + 1, working_path + 3,
- 1 + working_path_len -3);
- }
+ else if((data->conn->handler->protocol & CURLPROTO_SFTP) &&
+ (!strcmp("/~", working_path) ||
+ ((working_path_len > 2) && !memcmp(working_path, "/~/", 3)))) {
+ if(Curl_dyn_add(&npath, homedir)) {
+ free(working_path);
+ return CURLE_OUT_OF_MEMORY;
}
- else {
- real_path = malloc(working_path_len + 1);
- if(!real_path) {
+ if(working_path_len > 2) {
+ size_t len;
+ const char *p;
+ int copyfrom = 3;
+ /* Copy a separating '/' if homedir does not end with one */
+ len = Curl_dyn_len(&npath);
+ p = Curl_dyn_ptr(&npath);
+ if(len && (p[len-1] != '/'))
+ copyfrom = 2;
+
+ if(Curl_dyn_addn(&npath,
+ &working_path[copyfrom], working_path_len - copyfrom)) {
free(working_path);
return CURLE_OUT_OF_MEMORY;
}
- memcpy(real_path, working_path, 1 + working_path_len);
}
}
- free(working_path);
+ if(Curl_dyn_len(&npath)) {
+ free(working_path);
- /* store the pointer for the caller to receive */
- *path = real_path;
+ /* store the pointer for the caller to receive */
+ *path = Curl_dyn_ptr(&npath);
+ }
+ else
+ *path = working_path;
return CURLE_OK;
}
@@ -148,15 +150,12 @@ CURLcode Curl_get_pathname(const char **cpp, char **path, char *homedir)
break;
}
if(cp[i] == '\0') { /* End of string */
- /*error("Unterminated quote");*/
goto fail;
}
if(cp[i] == '\\') { /* Escaped characters */
i++;
if(cp[i] != '\'' && cp[i] != '\"' &&
cp[i] != '\\') {
- /*error("Bad escaped character '\\%c'",
- cp[i]);*/
goto fail;
}
}
@@ -164,7 +163,6 @@ CURLcode Curl_get_pathname(const char **cpp, char **path, char *homedir)
}
if(j == 0) {
- /*error("Empty quotes");*/
goto fail;
}
*cpp = cp + i + strspn(cp + i, WHITESPACE);
@@ -193,7 +191,7 @@ CURLcode Curl_get_pathname(const char **cpp, char **path, char *homedir)
}
return CURLE_OK;
- fail:
+fail:
Curl_safefree(*path);
return CURLE_QUOTE_ERROR;
}
diff --git a/lib/curl_path.h b/lib/curl_path.h
index 98e56eaad..cbe51c221 100644
--- a/lib/curl_path.h
+++ b/lib/curl_path.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -28,7 +28,7 @@
#include <curl/curl.h>
#include "urldata.h"
-#ifdef WIN32
+#ifdef _WIN32
# undef PATH_MAX
# define PATH_MAX MAX_PATH
# ifndef R_OK
diff --git a/lib/curl_printf.h b/lib/curl_printf.h
index 3823828cd..46ef344f7 100644
--- a/lib/curl_printf.h
+++ b/lib/curl_printf.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -37,6 +37,7 @@
# undef vprintf
# undef vfprintf
# undef vsnprintf
+# undef mvsnprintf
# undef aprintf
# undef vaprintf
# define printf curl_mprintf
diff --git a/lib/curl_range.c b/lib/curl_range.c
index dd92d05b3..d499953c9 100644
--- a/lib/curl_range.c
+++ b/lib/curl_range.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -44,12 +44,12 @@ CURLcode Curl_range(struct Curl_easy *data)
if(data->state.use_range && data->state.range) {
CURLofft from_t;
CURLofft to_t;
- from_t = curlx_strtoofft(data->state.range, &ptr, 0, &from);
+ from_t = curlx_strtoofft(data->state.range, &ptr, 10, &from);
if(from_t == CURL_OFFT_FLOW)
return CURLE_RANGE_ERROR;
while(*ptr && (ISBLANK(*ptr) || (*ptr == '-')))
ptr++;
- to_t = curlx_strtoofft(ptr, &ptr2, 0, &to);
+ to_t = curlx_strtoofft(ptr, &ptr2, 10, &to);
if(to_t == CURL_OFFT_FLOW)
return CURLE_RANGE_ERROR;
if((to_t == CURL_OFFT_INVAL) && !from_t) {
diff --git a/lib/curl_range.h b/lib/curl_range.h
index 33570abc2..77679e2b9 100644
--- a/lib/curl_range.h
+++ b/lib/curl_range.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/curl_rtmp.c b/lib/curl_rtmp.c
index b0c371041..f7cf54e88 100644
--- a/lib/curl_rtmp.c
+++ b/lib/curl_rtmp.c
@@ -5,8 +5,8 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2012 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- * Copyright (C) 2012, Howard Chu, <hyc@highlandsun.com>
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Howard Chu, <hyc@highlandsun.com>
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -39,7 +39,7 @@
/* The last #include file should be: */
#include "memdebug.h"
-#if defined(WIN32) && !defined(USE_LWIPSOCK)
+#if defined(_WIN32) && !defined(USE_LWIPSOCK)
#define setsockopt(a,b,c,d,e) (setsockopt)(a,b,c,(const char *)d,(int)e)
#define SET_RCVTIMEO(tv,s) int tv = s*1000
#elif defined(LWIP_SO_SNDRCVTIMEO_NONSTANDARD)
@@ -85,7 +85,7 @@ const struct Curl_handler Curl_handler_rtmp = {
PORT_RTMP, /* defport */
CURLPROTO_RTMP, /* protocol */
CURLPROTO_RTMP, /* family */
- PROTOPT_NONE /* flags*/
+ PROTOPT_NONE /* flags */
};
const struct Curl_handler Curl_handler_rtmpt = {
@@ -108,7 +108,7 @@ const struct Curl_handler Curl_handler_rtmpt = {
PORT_RTMPT, /* defport */
CURLPROTO_RTMPT, /* protocol */
CURLPROTO_RTMPT, /* family */
- PROTOPT_NONE /* flags*/
+ PROTOPT_NONE /* flags */
};
const struct Curl_handler Curl_handler_rtmpe = {
@@ -131,7 +131,7 @@ const struct Curl_handler Curl_handler_rtmpe = {
PORT_RTMP, /* defport */
CURLPROTO_RTMPE, /* protocol */
CURLPROTO_RTMPE, /* family */
- PROTOPT_NONE /* flags*/
+ PROTOPT_NONE /* flags */
};
const struct Curl_handler Curl_handler_rtmpte = {
@@ -154,7 +154,7 @@ const struct Curl_handler Curl_handler_rtmpte = {
PORT_RTMPT, /* defport */
CURLPROTO_RTMPTE, /* protocol */
CURLPROTO_RTMPTE, /* family */
- PROTOPT_NONE /* flags*/
+ PROTOPT_NONE /* flags */
};
const struct Curl_handler Curl_handler_rtmps = {
@@ -177,7 +177,7 @@ const struct Curl_handler Curl_handler_rtmps = {
PORT_RTMPS, /* defport */
CURLPROTO_RTMPS, /* protocol */
CURLPROTO_RTMP, /* family */
- PROTOPT_NONE /* flags*/
+ PROTOPT_NONE /* flags */
};
const struct Curl_handler Curl_handler_rtmpts = {
@@ -200,7 +200,7 @@ const struct Curl_handler Curl_handler_rtmpts = {
PORT_RTMPS, /* defport */
CURLPROTO_RTMPTS, /* protocol */
CURLPROTO_RTMPT, /* family */
- PROTOPT_NONE /* flags*/
+ PROTOPT_NONE /* flags */
};
static CURLcode rtmp_setup_connection(struct Curl_easy *data,
@@ -231,7 +231,7 @@ static CURLcode rtmp_connect(struct Curl_easy *data, bool *done)
/* We have to know if it's a write before we send the
* connect request packet
*/
- if(data->set.upload)
+ if(data->state.upload)
r->Link.protocol |= RTMP_FEATURE_WRITE;
/* For plain streams, use the buffer toggle trick to keep data flowing */
@@ -263,7 +263,7 @@ static CURLcode rtmp_do(struct Curl_easy *data, bool *done)
if(!RTMP_ConnectStream(r, 0))
return CURLE_FAILED_INIT;
- if(data->set.upload) {
+ if(data->state.upload) {
Curl_pgrsSetUploadSize(data, data->state.infilesize);
Curl_setup_transfer(data, -1, -1, FALSE, FIRSTSOCKET);
}
diff --git a/lib/curl_rtmp.h b/lib/curl_rtmp.h
index f856085dc..9b93ee060 100644
--- a/lib/curl_rtmp.h
+++ b/lib/curl_rtmp.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2010 - 2022, Howard Chu, <hyc@highlandsun.com>
+ * Copyright (C) Howard Chu, <hyc@highlandsun.com>
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/curl_sasl.c b/lib/curl_sasl.c
index 9684ee476..78ad298f2 100644
--- a/lib/curl_sasl.c
+++ b/lib/curl_sasl.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2012 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -36,7 +36,8 @@
#include "curl_setup.h"
#if !defined(CURL_DISABLE_IMAP) || !defined(CURL_DISABLE_SMTP) || \
- !defined(CURL_DISABLE_POP3)
+ !defined(CURL_DISABLE_POP3) || \
+ (!defined(CURL_DISABLE_LDAP) && defined(USE_OPENLDAP))
#include <curl/curl.h>
#include "urldata.h"
@@ -44,6 +45,7 @@
#include "curl_base64.h"
#include "curl_md5.h"
#include "vauth/vauth.h"
+#include "cfilters.h"
#include "vtls/vtls.h"
#include "curl_hmac.h"
#include "curl_sasl.h"
@@ -219,12 +221,12 @@ void Curl_sasl_init(struct SASL *sasl, struct Curl_easy *data,
}
/*
- * state()
+ * sasl_state()
*
* This is the ONLY way to change SASL state!
*/
-static void state(struct SASL *sasl, struct Curl_easy *data,
- saslstate newstate)
+static void sasl_state(struct SASL *sasl, struct Curl_easy *data,
+ saslstate newstate)
{
#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
/* for debug purposes */
@@ -260,6 +262,8 @@ static void state(struct SASL *sasl, struct Curl_easy *data,
sasl->state = newstate;
}
+#if defined(USE_NTLM) || defined(USE_GSASL) || defined(USE_KERBEROS5) || \
+ !defined(CURL_DISABLE_DIGEST_AUTH)
/* Get the SASL server message and convert it to binary. */
static CURLcode get_server_message(struct SASL *sasl, struct Curl_easy *data,
struct bufref *out)
@@ -282,6 +286,7 @@ static CURLcode get_server_message(struct SASL *sasl, struct Curl_easy *data,
}
return result;
}
+#endif
/* Encode the outgoing SASL message. */
static CURLcode build_message(struct SASL *sasl, struct bufref *msg)
@@ -340,8 +345,8 @@ CURLcode Curl_sasl_start(struct SASL *sasl, struct Curl_easy *data,
struct bufref resp;
saslstate state1 = SASL_STOP;
saslstate state2 = SASL_FINAL;
- const char * const hostname = SSL_HOST_NAME();
- const long int port = SSL_HOST_PORT();
+ const char *hostname, *disp_hostname;
+ int port;
#if defined(USE_KERBEROS5) || defined(USE_NTLM)
const char *service = data->set.str[STRING_SERVICE_NAME] ?
data->set.str[STRING_SERVICE_NAME] :
@@ -350,6 +355,7 @@ CURLcode Curl_sasl_start(struct SASL *sasl, struct Curl_easy *data,
const char *oauth_bearer = data->set.str[STRING_BEARER];
struct bufref nullmsg;
+ Curl_conn_get_host(data, FIRSTSOCKET, &hostname, &disp_hostname, &port);
Curl_bufref_init(&nullmsg);
Curl_bufref_init(&resp);
sasl->force_ir = force_ir; /* Latch for future use */
@@ -417,7 +423,7 @@ CURLcode Curl_sasl_start(struct SASL *sasl, struct Curl_easy *data,
}
else
#endif
-#ifndef CURL_DISABLE_CRYPTO_AUTH
+#ifndef CURL_DISABLE_DIGEST_AUTH
if((enabledmechs & SASL_MECH_DIGEST_MD5) &&
Curl_auth_is_digest_supported()) {
mech = SASL_MECH_STRING_DIGEST_MD5;
@@ -505,7 +511,7 @@ CURLcode Curl_sasl_start(struct SASL *sasl, struct Curl_easy *data,
if(!result) {
*progress = SASL_INPROGRESS;
- state(sasl, data, Curl_bufref_ptr(&resp) ? state2 : state1);
+ sasl_state(sasl, data, Curl_bufref_ptr(&resp) ? state2 : state1);
}
}
@@ -525,10 +531,10 @@ CURLcode Curl_sasl_continue(struct SASL *sasl, struct Curl_easy *data,
struct connectdata *conn = data->conn;
saslstate newstate = SASL_FINAL;
struct bufref resp;
- const char * const hostname = SSL_HOST_NAME();
- const long int port = SSL_HOST_PORT();
-#if !defined(CURL_DISABLE_CRYPTO_AUTH) || defined(USE_KERBEROS5) || \
- defined(USE_NTLM)
+ const char *hostname, *disp_hostname;
+ int port;
+#if defined(USE_KERBEROS5) || defined(USE_NTLM) \
+ || !defined(CURL_DISABLE_DIGEST_AUTH)
const char *service = data->set.str[STRING_SERVICE_NAME] ?
data->set.str[STRING_SERVICE_NAME] :
sasl->params->service;
@@ -536,6 +542,7 @@ CURLcode Curl_sasl_continue(struct SASL *sasl, struct Curl_easy *data,
const char *oauth_bearer = data->set.str[STRING_BEARER];
struct bufref serverdata;
+ Curl_conn_get_host(data, FIRSTSOCKET, &hostname, &disp_hostname, &port);
Curl_bufref_init(&serverdata);
Curl_bufref_init(&resp);
*progress = SASL_INPROGRESS;
@@ -544,14 +551,14 @@ CURLcode Curl_sasl_continue(struct SASL *sasl, struct Curl_easy *data,
if(code != sasl->params->finalcode)
result = CURLE_LOGIN_DENIED;
*progress = SASL_DONE;
- state(sasl, data, SASL_STOP);
+ sasl_state(sasl, data, SASL_STOP);
return result;
}
if(sasl->state != SASL_CANCEL && sasl->state != SASL_OAUTH2_RESP &&
code != sasl->params->contcode) {
*progress = SASL_DONE;
- state(sasl, data, SASL_STOP);
+ sasl_state(sasl, data, SASL_STOP);
return CURLE_LOGIN_DENIED;
}
@@ -573,7 +580,6 @@ CURLcode Curl_sasl_continue(struct SASL *sasl, struct Curl_easy *data,
case SASL_EXTERNAL:
result = Curl_auth_create_external_message(conn->user, &resp);
break;
-#ifndef CURL_DISABLE_CRYPTO_AUTH
#ifdef USE_GSASL
case SASL_GSASL:
result = get_server_message(sasl, data, &serverdata);
@@ -583,6 +589,7 @@ CURLcode Curl_sasl_continue(struct SASL *sasl, struct Curl_easy *data,
newstate = SASL_GSASL;
break;
#endif
+#ifndef CURL_DISABLE_DIGEST_AUTH
case SASL_CRAMMD5:
result = get_server_message(sasl, data, &serverdata);
if(!result)
@@ -694,7 +701,7 @@ CURLcode Curl_sasl_continue(struct SASL *sasl, struct Curl_easy *data,
if(code == sasl->params->finalcode) {
/* Final response was received so we are done */
*progress = SASL_DONE;
- state(sasl, data, SASL_STOP);
+ sasl_state(sasl, data, SASL_STOP);
return result;
}
else if(code == sasl->params->contcode) {
@@ -704,7 +711,7 @@ CURLcode Curl_sasl_continue(struct SASL *sasl, struct Curl_easy *data,
}
else {
*progress = SASL_DONE;
- state(sasl, data, SASL_STOP);
+ sasl_state(sasl, data, SASL_STOP);
return CURLE_LOGIN_DENIED;
}
@@ -741,7 +748,7 @@ CURLcode Curl_sasl_continue(struct SASL *sasl, struct Curl_easy *data,
Curl_bufref_free(&resp);
- state(sasl, data, newstate);
+ sasl_state(sasl, data, newstate);
return result;
}
diff --git a/lib/curl_sasl.h b/lib/curl_sasl.h
index c709d56a6..e94e6431a 100644
--- a/lib/curl_sasl.h
+++ b/lib/curl_sasl.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2012 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -125,9 +125,9 @@ struct SASL {
unsigned short authmechs; /* Accepted authentication mechanisms */
unsigned short prefmech; /* Preferred authentication mechanism */
unsigned short authused; /* Auth mechanism used for the connection */
- bool resetprefs; /* For URL auth option parsing. */
- bool mutual_auth; /* Mutual authentication enabled (GSSAPI only) */
- bool force_ir; /* Protocol always supports initial response */
+ BIT(resetprefs); /* For URL auth option parsing. */
+ BIT(mutual_auth); /* Mutual authentication enabled (GSSAPI only) */
+ BIT(force_ir); /* Protocol always supports initial response */
};
/* This is used to test whether the line starts with the given mechanism */
diff --git a/lib/curl_setup.h b/lib/curl_setup.h
index ac27b130c..a08784140 100644
--- a/lib/curl_setup.h
+++ b/lib/curl_setup.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -28,7 +28,7 @@
#define CURL_NO_OLDIES
#endif
-/* define mingw version macros, eg __MINGW{32,64}_{MINOR,MAJOR}_VERSION */
+/* Set default _WIN32_WINNT */
#ifdef __MINGW32__
#include <_mingw.h>
#endif
@@ -41,15 +41,7 @@
#pragma warning(disable:4127)
#endif
-/*
- * Define WIN32 when build target is Win32 API
- */
-
-#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
-#define WIN32
-#endif
-
-#ifdef WIN32
+#ifdef _WIN32
/*
* Don't include unneeded stuff in Windows headers to avoid compiler
* warnings and macro clashes.
@@ -87,12 +79,12 @@
#ifdef _WIN32_WCE
# include "config-win32ce.h"
#else
-# ifdef WIN32
+# ifdef _WIN32
# include "config-win32.h"
# endif
#endif
-#if defined(macintosh) && defined(__MRC__)
+#ifdef macintosh
# include "config-mac.h"
#endif
@@ -112,6 +104,10 @@
# include "config-plan9.h"
#endif
+#ifdef MSDOS
+# include "config-dos.h"
+#endif
+
#endif /* HAVE_CONFIG_H */
/* ================================================================ */
@@ -215,6 +211,23 @@
# define CURL_DISABLE_RTSP
#endif
+/*
+ * When HTTP is disabled, disable HTTP-only features
+ */
+
+#if defined(CURL_DISABLE_HTTP)
+# define CURL_DISABLE_ALTSVC 1
+# define CURL_DISABLE_COOKIES 1
+# define CURL_DISABLE_BASIC_AUTH 1
+# define CURL_DISABLE_BEARER_AUTH 1
+# define CURL_DISABLE_AWS 1
+# define CURL_DISABLE_DOH 1
+# define CURL_DISABLE_FORM_API 1
+# define CURL_DISABLE_HEADERS_API 1
+# define CURL_DISABLE_HSTS 1
+# define CURL_DISABLE_HTTP_AUTH 1
+#endif
+
/* ================================================================ */
/* No system header file shall be included in this file before this */
/* point. */
@@ -254,8 +267,9 @@
#if defined(__APPLE__) && !defined(USE_ARES)
#include <TargetConditionals.h>
#define USE_RESOLVE_ON_IPS 1
-# if defined(TARGET_OS_OSX) && TARGET_OS_OSX
-# define CURL_OSX_CALL_COPYPROXIES 1
+# if TARGET_OS_MAC && !(defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) && \
+ defined(ENABLE_IPV6)
+# define CURL_MACOS_CALL_COPYPROXIES 1
# endif
#endif
@@ -294,6 +308,7 @@
# if defined(HAVE_PROTO_BSDSOCKET_H) && \
(!defined(__amigaos4__) || defined(USE_AMISSL))
/* use bsdsocket.library directly, instead of libc networking functions */
+# define _SYS_MBUF_H /* m_len define clashes with curl */
# include <proto/bsdsocket.h>
# ifdef __amigaos4__
int Curl_amiga_select(int nfds, fd_set *readfds, fd_set *writefds,
@@ -318,9 +333,7 @@
#endif
#include <stdio.h>
-#ifdef HAVE_ASSERT_H
#include <assert.h>
-#endif
#ifdef __TANDEM /* for ns*-tandem-nsk systems */
# if ! defined __LP64
@@ -332,23 +345,6 @@
#include <curl/stdcheaders.h>
#endif
-#ifdef __POCC__
-# include <sys/types.h>
-# include <unistd.h>
-# define sys_nerr EILSEQ
-#endif
-
-/*
- * Salford-C kludge section (mostly borrowed from wxWidgets).
- */
-#ifdef __SALFORDC__
- #pragma suppress 353 /* Possible nested comments */
- #pragma suppress 593 /* Define not used */
- #pragma suppress 61 /* enum has no name */
- #pragma suppress 106 /* unnamed, unused parameter */
- #include <clib.h>
-#endif
-
/*
* Large file (>2Gb) support using WIN32 functions.
*/
@@ -439,8 +435,8 @@
# endif
#endif
-#if (SIZEOF_CURL_OFF_T == 4)
-# define CURL_OFF_T_MAX CURL_OFF_T_C(0x7FFFFFFF)
+#if (SIZEOF_CURL_OFF_T < 8)
+#error "too small curl_off_t"
#else
/* assume SIZEOF_CURL_OFF_T == 8 */
# define CURL_OFF_T_MAX CURL_OFF_T_C(0x7FFFFFFFFFFFFFFF)
@@ -501,11 +497,11 @@
5. set dir/file naming defines
*/
-#ifdef WIN32
+#ifdef _WIN32
# define DIR_CHAR "\\"
-#else /* WIN32 */
+#else /* _WIN32 */
# ifdef MSDOS /* Watt-32 */
@@ -530,27 +526,7 @@
# define DIR_CHAR "/"
-# ifndef fileno /* sunos 4 have this as a macro! */
- int fileno(FILE *stream);
-# endif
-
-#endif /* WIN32 */
-
-/*
- * msvc 6.0 requires PSDK in order to have INET6_ADDRSTRLEN
- * defined in ws2tcpip.h as well as to provide IPv6 support.
- * Does not apply if lwIP is used.
- */
-
-#if defined(_MSC_VER) && !defined(__POCC__) && !defined(USE_LWIPSOCK)
-# if !defined(HAVE_WS2TCPIP_H) || \
- ((_MSC_VER < 1300) && !defined(INET6_ADDRSTRLEN))
-# undef HAVE_GETADDRINFO_THREADSAFE
-# undef HAVE_FREEADDRINFO
-# undef HAVE_GETADDRINFO
-# undef ENABLE_IPV6
-# endif
-#endif
+#endif /* _WIN32 */
/* ---------------------------------------------------------------- */
/* resolver specialty compile-time defines */
@@ -558,20 +534,11 @@
/* ---------------------------------------------------------------- */
/*
- * lcc-win32 doesn't have _beginthreadex(), lacks threads support.
- */
-
-#if defined(__LCC__) && defined(WIN32)
-# undef USE_THREADS_POSIX
-# undef USE_THREADS_WIN32
-#endif
-
-/*
* MSVC threads support requires a multi-threaded runtime library.
* _beginthreadex() is not available in single-threaded ones.
*/
-#if defined(_MSC_VER) && !defined(__POCC__) && !defined(_MT)
+#if defined(_MSC_VER) && !defined(_MT)
# undef USE_THREADS_POSIX
# undef USE_THREADS_WIN32
#endif
@@ -582,6 +549,9 @@
#if defined(ENABLE_IPV6) && defined(HAVE_GETADDRINFO)
# define CURLRES_IPV6
+#elif defined(ENABLE_IPV6) && (defined(_WIN32) || defined(__CYGWIN__))
+/* assume on Windows that IPv6 without getaddrinfo is a broken build */
+# error "Unexpected build: IPv6 is enabled but getaddrinfo was not found."
#else
# define CURLRES_IPV4
#endif
@@ -601,35 +571,6 @@
/* ---------------------------------------------------------------- */
-/*
- * msvc 6.0 does not have struct sockaddr_storage and
- * does not define IPPROTO_ESP in winsock2.h. But both
- * are available if PSDK is properly installed.
- */
-
-#if defined(_MSC_VER) && !defined(__POCC__)
-# if !defined(HAVE_WINSOCK2_H) || ((_MSC_VER < 1300) && !defined(IPPROTO_ESP))
-# undef HAVE_STRUCT_SOCKADDR_STORAGE
-# endif
-#endif
-
-/*
- * Intentionally fail to build when using msvc 6.0 without PSDK installed.
- * The brave of heart can circumvent this, defining ALLOW_MSVC6_WITHOUT_PSDK
- * in lib/config-win32.h although absolutely discouraged and unsupported.
- */
-
-#if defined(_MSC_VER) && !defined(__POCC__)
-# if !defined(HAVE_WINDOWS_H) || ((_MSC_VER < 1300) && !defined(_FILETIME_))
-# if !defined(ALLOW_MSVC6_WITHOUT_PSDK)
-# error MSVC 6.0 requires "February 2003 Platform SDK" a.k.a. \
- "Windows Server 2003 PSDK"
-# else
-# define CURL_DISABLE_LDAP 1
-# endif
-# endif
-#endif
-
#if defined(HAVE_LIBIDN2) && defined(HAVE_IDN2_H) && !defined(USE_WIN32_IDN)
/* The lib and header are present */
#define USE_LIBIDN2
@@ -641,32 +582,30 @@
#define LIBIDN_REQUIRED_VERSION "0.4.1"
-#if defined(USE_GNUTLS) || defined(USE_OPENSSL) || defined(USE_NSS) || \
- defined(USE_MBEDTLS) || \
- defined(USE_WOLFSSL) || defined(USE_SCHANNEL) || \
- defined(USE_SECTRANSP) || defined(USE_GSKIT) || \
- defined(USE_BEARSSL) || defined(USE_RUSTLS)
+#if defined(USE_GNUTLS) || defined(USE_OPENSSL) || defined(USE_MBEDTLS) || \
+ defined(USE_WOLFSSL) || defined(USE_SCHANNEL) || defined(USE_SECTRANSP) || \
+ defined(USE_BEARSSL) || defined(USE_RUSTLS)
#define USE_SSL /* SSL support has been enabled */
#endif
/* Single point where USE_SPNEGO definition might be defined */
-#if !defined(CURL_DISABLE_CRYPTO_AUTH) && \
+#if !defined(CURL_DISABLE_NEGOTIATE_AUTH) && \
(defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI))
#define USE_SPNEGO
#endif
/* Single point where USE_KERBEROS5 definition might be defined */
-#if !defined(CURL_DISABLE_CRYPTO_AUTH) && \
+#if !defined(CURL_DISABLE_KERBEROS_AUTH) && \
(defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI))
#define USE_KERBEROS5
#endif
/* Single point where USE_NTLM definition might be defined */
-#if !defined(CURL_DISABLE_CRYPTO_AUTH) && !defined(CURL_DISABLE_NTLM)
-# if defined(USE_OPENSSL) || defined(USE_MBEDTLS) || \
- defined(USE_GNUTLS) || defined(USE_NSS) || defined(USE_SECTRANSP) || \
- defined(USE_OS400CRYPTO) || defined(USE_WIN32_CRYPTO) || \
- (defined(USE_WOLFSSL) && defined(HAVE_WOLFSSL_DES_ECB_ENCRYPT))
+#if !defined(CURL_DISABLE_NTLM)
+# if defined(USE_OPENSSL) || defined(USE_MBEDTLS) || \
+ defined(USE_GNUTLS) || defined(USE_SECTRANSP) || \
+ defined(USE_OS400CRYPTO) || defined(USE_WIN32_CRYPTO) || \
+ (defined(USE_WOLFSSL) && defined(HAVE_WOLFSSL_DES_ECB_ENCRYPT))
# define USE_CURL_NTLM_CORE
# endif
# if defined(USE_CURL_NTLM_CORE) || defined(USE_WINDOWS_SSPI)
@@ -693,10 +632,22 @@
# define UNUSED_PARAM __attribute__((__unused__))
# define WARN_UNUSED_RESULT __attribute__((warn_unused_result))
#else
-# define UNUSED_PARAM /*NOTHING*/
+# define UNUSED_PARAM /* NOTHING */
# define WARN_UNUSED_RESULT
#endif
+/* noreturn attribute */
+
+#if !defined(CURL_NORETURN)
+#if (defined(__GNUC__) && (__GNUC__ >= 3)) || defined(__clang__)
+# define CURL_NORETURN __attribute__((__noreturn__))
+#elif defined(_MSC_VER) && (_MSC_VER >= 1200)
+# define CURL_NORETURN __declspec(noreturn)
+#else
+# define CURL_NORETURN
+#endif
+#endif
+
/*
* Include macros and defines that should only be processed once.
*/
@@ -755,7 +706,7 @@
/* In Windows the default file mode is text but an application can override it.
Therefore we specify it explicitly. https://github.com/curl/curl/pull/258
*/
-#if defined(WIN32) || defined(MSDOS)
+#if defined(_WIN32) || defined(MSDOS)
#define FOPEN_READTEXT "rt"
#define FOPEN_WRITETEXT "wt"
#define FOPEN_APPENDTEXT "at"
@@ -775,21 +726,6 @@ endings either CRLF or LF so 't' is appropriate.
#define FOPEN_APPENDTEXT "a"
#endif
-/* WinSock destroys recv() buffer when send() failed.
- * Enabled automatically for Windows and for Cygwin as Cygwin sockets are
- * wrappers for WinSock sockets. https://github.com/curl/curl/issues/657
- * Define DONT_USE_RECV_BEFORE_SEND_WORKAROUND to force disable workaround.
- */
-#if !defined(DONT_USE_RECV_BEFORE_SEND_WORKAROUND)
-# if defined(WIN32) || defined(__CYGWIN__)
-# define USE_RECV_BEFORE_SEND_WORKAROUND
-# endif
-#else /* DONT_USE_RECV_BEFORE_SEND_WORKAROUND */
-# ifdef USE_RECV_BEFORE_SEND_WORKAROUND
-# undef USE_RECV_BEFORE_SEND_WORKAROUND
-# endif
-#endif /* DONT_USE_RECV_BEFORE_SEND_WORKAROUND */
-
/* for systems that don't detect this in configure */
#ifndef CURL_SA_FAMILY_T
# if defined(HAVE_SA_FAMILY_T)
@@ -825,19 +761,25 @@ int getpwuid_r(uid_t uid, struct passwd *pwd, char *buf,
#define UNITTEST static
#endif
-#if defined(USE_NGHTTP2) || defined(USE_HYPER)
+/* Hyper supports HTTP2 also, but Curl's integration with Hyper does not */
+#if defined(USE_NGHTTP2)
#define USE_HTTP2
#endif
-#if defined(USE_NGTCP2) || defined(USE_QUICHE) || defined(USE_MSH3)
+#if (defined(USE_NGTCP2) && defined(USE_NGHTTP3)) || \
+ defined(USE_QUICHE) || defined(USE_MSH3)
#define ENABLE_QUIC
#define USE_HTTP3
#endif
-#if defined(USE_UNIX_SOCKETS) && defined(WIN32)
-# if defined(__MINGW32__) && !defined(LUP_SECURE)
- typedef u_short ADDRESS_FAMILY; /* Classic mingw, 11y+ old mingw-w64 */
-# endif
+/* Certain Windows implementations are not aligned with what curl expects,
+ so always use the local one on this platform. E.g. the mingw-w64
+ implementation can return wrong results for non-ASCII inputs. */
+#if defined(HAVE_BASENAME) && defined(_WIN32)
+#undef HAVE_BASENAME
+#endif
+
+#if defined(USE_UNIX_SOCKETS) && defined(_WIN32)
# if !defined(UNIX_PATH_MAX)
/* Replicating logic present in afunix.h
(distributed with newer Windows 10 SDK versions only) */
@@ -851,4 +793,10 @@ int getpwuid_r(uid_t uid, struct passwd *pwd, char *buf,
# endif
#endif
+/* OpenSSLv3 marks DES, MD5 and ENGINE functions deprecated but we have no
+ replacements (yet) so tell the compiler to not warn for them. */
+#ifdef USE_OPENSSL
+#define OPENSSL_SUPPRESS_DEPRECATED
+#endif
+
#endif /* HEADER_CURL_SETUP_H */
diff --git a/lib/curl_setup_once.h b/lib/curl_setup_once.h
index f09b00f9f..bf0ee663d 100644
--- a/lib/curl_setup_once.h
+++ b/lib/curl_setup_once.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -34,10 +34,7 @@
#include <string.h>
#include <stdarg.h>
#include <time.h>
-
-#ifdef HAVE_ERRNO_H
#include <errno.h>
-#endif
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -59,7 +56,7 @@
#include <sys/time.h>
#endif
-#ifdef WIN32
+#ifdef _WIN32
#include <io.h>
#include <fcntl.h>
#endif
@@ -72,6 +69,16 @@
#include <unistd.h>
#endif
+#ifdef USE_WOLFSSL
+#include <stdint.h>
+#endif
+
+#ifdef USE_SCHANNEL
+/* Must set this before <schannel.h> is included directly or indirectly by
+ another Windows header. */
+# define SCHANNEL_USE_BLACKLISTS 1
+#endif
+
#ifdef __hpux
# if !defined(_XOPEN_SOURCE_EXTENDED) || defined(_KERNEL)
# ifdef _APP32_64BIT_OFF_T
@@ -287,7 +294,7 @@ typedef unsigned int bit;
*/
#undef DEBUGASSERT
-#if defined(DEBUGBUILD) && defined(HAVE_ASSERT_H)
+#if defined(DEBUGBUILD)
#define DEBUGASSERT(x) assert(x)
#else
#define DEBUGASSERT(x) do { } while(0)
diff --git a/lib/curl_sha256.h b/lib/curl_sha256.h
index 754c761fb..d99f958f9 100644
--- a/lib/curl_sha256.h
+++ b/lib/curl_sha256.h
@@ -7,8 +7,8 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2017, Florin Petriuc, <petriuc.florin@gmail.com>
- * Copyright (C) 2018 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Florin Petriuc, <petriuc.florin@gmail.com>
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -25,7 +25,9 @@
*
***************************************************************************/
-#ifndef CURL_DISABLE_CRYPTO_AUTH
+#if !defined(CURL_DISABLE_AWS) || !defined(CURL_DISABLE_DIGEST_AUTH) \
+ || defined(USE_LIBSSH2)
+
#include <curl/curl.h>
#include "curl_hmac.h"
@@ -33,7 +35,7 @@ extern const struct HMAC_params Curl_HMAC_SHA256[1];
#ifdef USE_WOLFSSL
/* SHA256_DIGEST_LENGTH is an enum value in wolfSSL. Need to import it from
- * sha.h*/
+ * sha.h */
#include <wolfssl/options.h>
#include <wolfssl/openssl/sha.h>
#else
diff --git a/lib/curl_sspi.c b/lib/curl_sspi.c
index 33108c48e..eb21e7e2b 100644
--- a/lib/curl_sspi.c
+++ b/lib/curl_sspi.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/curl_sspi.h b/lib/curl_sspi.h
index ad111309c..b26c39156 100644
--- a/lib/curl_sspi.h
+++ b/lib/curl_sspi.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -70,227 +70,6 @@ extern PSecurityFunctionTable s_pSecFn;
#define ISC_REQ_USE_HTTP_STYLE 0x01000000
#endif
-#ifndef ISC_RET_REPLAY_DETECT
-#define ISC_RET_REPLAY_DETECT 0x00000004
-#endif
-
-#ifndef ISC_RET_SEQUENCE_DETECT
-#define ISC_RET_SEQUENCE_DETECT 0x00000008
-#endif
-
-#ifndef ISC_RET_CONFIDENTIALITY
-#define ISC_RET_CONFIDENTIALITY 0x00000010
-#endif
-
-#ifndef ISC_RET_ALLOCATED_MEMORY
-#define ISC_RET_ALLOCATED_MEMORY 0x00000100
-#endif
-
-#ifndef ISC_RET_STREAM
-#define ISC_RET_STREAM 0x00008000
-#endif
-
-#ifndef SEC_E_INSUFFICIENT_MEMORY
-# define SEC_E_INSUFFICIENT_MEMORY ((HRESULT)0x80090300L)
-#endif
-#ifndef SEC_E_INVALID_HANDLE
-# define SEC_E_INVALID_HANDLE ((HRESULT)0x80090301L)
-#endif
-#ifndef SEC_E_UNSUPPORTED_FUNCTION
-# define SEC_E_UNSUPPORTED_FUNCTION ((HRESULT)0x80090302L)
-#endif
-#ifndef SEC_E_TARGET_UNKNOWN
-# define SEC_E_TARGET_UNKNOWN ((HRESULT)0x80090303L)
-#endif
-#ifndef SEC_E_INTERNAL_ERROR
-# define SEC_E_INTERNAL_ERROR ((HRESULT)0x80090304L)
-#endif
-#ifndef SEC_E_SECPKG_NOT_FOUND
-# define SEC_E_SECPKG_NOT_FOUND ((HRESULT)0x80090305L)
-#endif
-#ifndef SEC_E_NOT_OWNER
-# define SEC_E_NOT_OWNER ((HRESULT)0x80090306L)
-#endif
-#ifndef SEC_E_CANNOT_INSTALL
-# define SEC_E_CANNOT_INSTALL ((HRESULT)0x80090307L)
-#endif
-#ifndef SEC_E_INVALID_TOKEN
-# define SEC_E_INVALID_TOKEN ((HRESULT)0x80090308L)
-#endif
-#ifndef SEC_E_CANNOT_PACK
-# define SEC_E_CANNOT_PACK ((HRESULT)0x80090309L)
-#endif
-#ifndef SEC_E_QOP_NOT_SUPPORTED
-# define SEC_E_QOP_NOT_SUPPORTED ((HRESULT)0x8009030AL)
-#endif
-#ifndef SEC_E_NO_IMPERSONATION
-# define SEC_E_NO_IMPERSONATION ((HRESULT)0x8009030BL)
-#endif
-#ifndef SEC_E_LOGON_DENIED
-# define SEC_E_LOGON_DENIED ((HRESULT)0x8009030CL)
-#endif
-#ifndef SEC_E_UNKNOWN_CREDENTIALS
-# define SEC_E_UNKNOWN_CREDENTIALS ((HRESULT)0x8009030DL)
-#endif
-#ifndef SEC_E_NO_CREDENTIALS
-# define SEC_E_NO_CREDENTIALS ((HRESULT)0x8009030EL)
-#endif
-#ifndef SEC_E_MESSAGE_ALTERED
-# define SEC_E_MESSAGE_ALTERED ((HRESULT)0x8009030FL)
-#endif
-#ifndef SEC_E_OUT_OF_SEQUENCE
-# define SEC_E_OUT_OF_SEQUENCE ((HRESULT)0x80090310L)
-#endif
-#ifndef SEC_E_NO_AUTHENTICATING_AUTHORITY
-# define SEC_E_NO_AUTHENTICATING_AUTHORITY ((HRESULT)0x80090311L)
-#endif
-#ifndef SEC_E_BAD_PKGID
-# define SEC_E_BAD_PKGID ((HRESULT)0x80090316L)
-#endif
-#ifndef SEC_E_CONTEXT_EXPIRED
-# define SEC_E_CONTEXT_EXPIRED ((HRESULT)0x80090317L)
-#endif
-#ifndef SEC_E_INCOMPLETE_MESSAGE
-# define SEC_E_INCOMPLETE_MESSAGE ((HRESULT)0x80090318L)
-#endif
-#ifndef SEC_E_INCOMPLETE_CREDENTIALS
-# define SEC_E_INCOMPLETE_CREDENTIALS ((HRESULT)0x80090320L)
-#endif
-#ifndef SEC_E_BUFFER_TOO_SMALL
-# define SEC_E_BUFFER_TOO_SMALL ((HRESULT)0x80090321L)
-#endif
-#ifndef SEC_E_WRONG_PRINCIPAL
-# define SEC_E_WRONG_PRINCIPAL ((HRESULT)0x80090322L)
-#endif
-#ifndef SEC_E_TIME_SKEW
-# define SEC_E_TIME_SKEW ((HRESULT)0x80090324L)
-#endif
-#ifndef SEC_E_UNTRUSTED_ROOT
-# define SEC_E_UNTRUSTED_ROOT ((HRESULT)0x80090325L)
-#endif
-#ifndef SEC_E_ILLEGAL_MESSAGE
-# define SEC_E_ILLEGAL_MESSAGE ((HRESULT)0x80090326L)
-#endif
-#ifndef SEC_E_CERT_UNKNOWN
-# define SEC_E_CERT_UNKNOWN ((HRESULT)0x80090327L)
-#endif
-#ifndef SEC_E_CERT_EXPIRED
-# define SEC_E_CERT_EXPIRED ((HRESULT)0x80090328L)
-#endif
-#ifndef SEC_E_ENCRYPT_FAILURE
-# define SEC_E_ENCRYPT_FAILURE ((HRESULT)0x80090329L)
-#endif
-#ifndef SEC_E_DECRYPT_FAILURE
-# define SEC_E_DECRYPT_FAILURE ((HRESULT)0x80090330L)
-#endif
-#ifndef SEC_E_ALGORITHM_MISMATCH
-# define SEC_E_ALGORITHM_MISMATCH ((HRESULT)0x80090331L)
-#endif
-#ifndef SEC_E_SECURITY_QOS_FAILED
-# define SEC_E_SECURITY_QOS_FAILED ((HRESULT)0x80090332L)
-#endif
-#ifndef SEC_E_UNFINISHED_CONTEXT_DELETED
-# define SEC_E_UNFINISHED_CONTEXT_DELETED ((HRESULT)0x80090333L)
-#endif
-#ifndef SEC_E_NO_TGT_REPLY
-# define SEC_E_NO_TGT_REPLY ((HRESULT)0x80090334L)
-#endif
-#ifndef SEC_E_NO_IP_ADDRESSES
-# define SEC_E_NO_IP_ADDRESSES ((HRESULT)0x80090335L)
-#endif
-#ifndef SEC_E_WRONG_CREDENTIAL_HANDLE
-# define SEC_E_WRONG_CREDENTIAL_HANDLE ((HRESULT)0x80090336L)
-#endif
-#ifndef SEC_E_CRYPTO_SYSTEM_INVALID
-# define SEC_E_CRYPTO_SYSTEM_INVALID ((HRESULT)0x80090337L)
-#endif
-#ifndef SEC_E_MAX_REFERRALS_EXCEEDED
-# define SEC_E_MAX_REFERRALS_EXCEEDED ((HRESULT)0x80090338L)
-#endif
-#ifndef SEC_E_MUST_BE_KDC
-# define SEC_E_MUST_BE_KDC ((HRESULT)0x80090339L)
-#endif
-#ifndef SEC_E_STRONG_CRYPTO_NOT_SUPPORTED
-# define SEC_E_STRONG_CRYPTO_NOT_SUPPORTED ((HRESULT)0x8009033AL)
-#endif
-#ifndef SEC_E_TOO_MANY_PRINCIPALS
-# define SEC_E_TOO_MANY_PRINCIPALS ((HRESULT)0x8009033BL)
-#endif
-#ifndef SEC_E_NO_PA_DATA
-# define SEC_E_NO_PA_DATA ((HRESULT)0x8009033CL)
-#endif
-#ifndef SEC_E_PKINIT_NAME_MISMATCH
-# define SEC_E_PKINIT_NAME_MISMATCH ((HRESULT)0x8009033DL)
-#endif
-#ifndef SEC_E_SMARTCARD_LOGON_REQUIRED
-# define SEC_E_SMARTCARD_LOGON_REQUIRED ((HRESULT)0x8009033EL)
-#endif
-#ifndef SEC_E_SHUTDOWN_IN_PROGRESS
-# define SEC_E_SHUTDOWN_IN_PROGRESS ((HRESULT)0x8009033FL)
-#endif
-#ifndef SEC_E_KDC_INVALID_REQUEST
-# define SEC_E_KDC_INVALID_REQUEST ((HRESULT)0x80090340L)
-#endif
-#ifndef SEC_E_KDC_UNABLE_TO_REFER
-# define SEC_E_KDC_UNABLE_TO_REFER ((HRESULT)0x80090341L)
-#endif
-#ifndef SEC_E_KDC_UNKNOWN_ETYPE
-# define SEC_E_KDC_UNKNOWN_ETYPE ((HRESULT)0x80090342L)
-#endif
-#ifndef SEC_E_UNSUPPORTED_PREAUTH
-# define SEC_E_UNSUPPORTED_PREAUTH ((HRESULT)0x80090343L)
-#endif
-#ifndef SEC_E_DELEGATION_REQUIRED
-# define SEC_E_DELEGATION_REQUIRED ((HRESULT)0x80090345L)
-#endif
-#ifndef SEC_E_BAD_BINDINGS
-# define SEC_E_BAD_BINDINGS ((HRESULT)0x80090346L)
-#endif
-#ifndef SEC_E_MULTIPLE_ACCOUNTS
-# define SEC_E_MULTIPLE_ACCOUNTS ((HRESULT)0x80090347L)
-#endif
-#ifndef SEC_E_NO_KERB_KEY
-# define SEC_E_NO_KERB_KEY ((HRESULT)0x80090348L)
-#endif
-#ifndef SEC_E_CERT_WRONG_USAGE
-# define SEC_E_CERT_WRONG_USAGE ((HRESULT)0x80090349L)
-#endif
-#ifndef SEC_E_DOWNGRADE_DETECTED
-# define SEC_E_DOWNGRADE_DETECTED ((HRESULT)0x80090350L)
-#endif
-#ifndef SEC_E_SMARTCARD_CERT_REVOKED
-# define SEC_E_SMARTCARD_CERT_REVOKED ((HRESULT)0x80090351L)
-#endif
-#ifndef SEC_E_ISSUING_CA_UNTRUSTED
-# define SEC_E_ISSUING_CA_UNTRUSTED ((HRESULT)0x80090352L)
-#endif
-#ifndef SEC_E_REVOCATION_OFFLINE_C
-# define SEC_E_REVOCATION_OFFLINE_C ((HRESULT)0x80090353L)
-#endif
-#ifndef SEC_E_PKINIT_CLIENT_FAILURE
-# define SEC_E_PKINIT_CLIENT_FAILURE ((HRESULT)0x80090354L)
-#endif
-#ifndef SEC_E_SMARTCARD_CERT_EXPIRED
-# define SEC_E_SMARTCARD_CERT_EXPIRED ((HRESULT)0x80090355L)
-#endif
-#ifndef SEC_E_NO_S4U_PROT_SUPPORT
-# define SEC_E_NO_S4U_PROT_SUPPORT ((HRESULT)0x80090356L)
-#endif
-#ifndef SEC_E_CROSSREALM_DELEGATION_FAILURE
-# define SEC_E_CROSSREALM_DELEGATION_FAILURE ((HRESULT)0x80090357L)
-#endif
-#ifndef SEC_E_REVOCATION_OFFLINE_KDC
-# define SEC_E_REVOCATION_OFFLINE_KDC ((HRESULT)0x80090358L)
-#endif
-#ifndef SEC_E_ISSUING_CA_UNTRUSTED_KDC
-# define SEC_E_ISSUING_CA_UNTRUSTED_KDC ((HRESULT)0x80090359L)
-#endif
-#ifndef SEC_E_KDC_CERT_EXPIRED
-# define SEC_E_KDC_CERT_EXPIRED ((HRESULT)0x8009035AL)
-#endif
-#ifndef SEC_E_KDC_CERT_REVOKED
-# define SEC_E_KDC_CERT_REVOKED ((HRESULT)0x8009035BL)
-#endif
#ifndef SEC_E_INVALID_PARAMETER
# define SEC_E_INVALID_PARAMETER ((HRESULT)0x8009035DL)
#endif
@@ -301,30 +80,6 @@ extern PSecurityFunctionTable s_pSecFn;
# define SEC_E_POLICY_NLTM_ONLY ((HRESULT)0x8009035FL)
#endif
-#ifndef SEC_I_CONTINUE_NEEDED
-# define SEC_I_CONTINUE_NEEDED ((HRESULT)0x00090312L)
-#endif
-#ifndef SEC_I_COMPLETE_NEEDED
-# define SEC_I_COMPLETE_NEEDED ((HRESULT)0x00090313L)
-#endif
-#ifndef SEC_I_COMPLETE_AND_CONTINUE
-# define SEC_I_COMPLETE_AND_CONTINUE ((HRESULT)0x00090314L)
-#endif
-#ifndef SEC_I_LOCAL_LOGON
-# define SEC_I_LOCAL_LOGON ((HRESULT)0x00090315L)
-#endif
-#ifndef SEC_I_CONTEXT_EXPIRED
-# define SEC_I_CONTEXT_EXPIRED ((HRESULT)0x00090317L)
-#endif
-#ifndef SEC_I_INCOMPLETE_CREDENTIALS
-# define SEC_I_INCOMPLETE_CREDENTIALS ((HRESULT)0x00090320L)
-#endif
-#ifndef SEC_I_RENEGOTIATE
-# define SEC_I_RENEGOTIATE ((HRESULT)0x00090321L)
-#endif
-#ifndef SEC_I_NO_LSA_CONTEXT
-# define SEC_I_NO_LSA_CONTEXT ((HRESULT)0x00090323L)
-#endif
#ifndef SEC_I_SIGNATURE_NEEDED
# define SEC_I_SIGNATURE_NEEDED ((HRESULT)0x0009035CL)
#endif
@@ -333,6 +88,22 @@ extern PSecurityFunctionTable s_pSecFn;
# define CRYPT_E_REVOKED ((HRESULT)0x80092010L)
#endif
+#ifndef CRYPT_E_NO_REVOCATION_DLL
+# define CRYPT_E_NO_REVOCATION_DLL ((HRESULT)0x80092011L)
+#endif
+
+#ifndef CRYPT_E_NO_REVOCATION_CHECK
+# define CRYPT_E_NO_REVOCATION_CHECK ((HRESULT)0x80092012L)
+#endif
+
+#ifndef CRYPT_E_REVOCATION_OFFLINE
+# define CRYPT_E_REVOCATION_OFFLINE ((HRESULT)0x80092013L)
+#endif
+
+#ifndef CRYPT_E_NOT_IN_REVOCATION_DATABASE
+# define CRYPT_E_NOT_IN_REVOCATION_DATABASE ((HRESULT)0x80092014L)
+#endif
+
#ifdef UNICODE
# define SECFLAG_WINNT_AUTH_IDENTITY \
(unsigned long)SEC_WINNT_AUTH_IDENTITY_UNICODE
diff --git a/lib/curl_threads.c b/lib/curl_threads.c
index eb8e13608..222d9364f 100644
--- a/lib/curl_threads.c
+++ b/lib/curl_threads.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -31,9 +31,7 @@
# include <pthread.h>
# endif
#elif defined(USE_THREADS_WIN32)
-# ifdef HAVE_PROCESS_H
-# include <process.h>
-# endif
+# include <process.h>
#endif
#include "curl_threads.h"
@@ -108,8 +106,6 @@ curl_thread_t Curl_thread_create(unsigned int (CURL_STDCALL *func) (void *),
{
#ifdef _WIN32_WCE
typedef HANDLE curl_win_thread_handle_t;
-#elif defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)
- typedef unsigned long curl_win_thread_handle_t;
#else
typedef uintptr_t curl_win_thread_handle_t;
#endif
diff --git a/lib/curl_threads.h b/lib/curl_threads.h
index 63392f671..27a478d4c 100644
--- a/lib/curl_threads.h
+++ b/lib/curl_threads.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -40,8 +40,7 @@
# define curl_thread_t HANDLE
# define curl_thread_t_null (HANDLE)0
# if !defined(_WIN32_WINNT) || !defined(_WIN32_WINNT_VISTA) || \
- (_WIN32_WINNT < _WIN32_WINNT_VISTA) || \
- (defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR))
+ (_WIN32_WINNT < _WIN32_WINNT_VISTA)
# define Curl_mutex_init(m) InitializeCriticalSection(m)
# else
# define Curl_mutex_init(m) InitializeCriticalSectionEx(m, 0, 1)
diff --git a/lib/curl_trc.c b/lib/curl_trc.c
new file mode 100644
index 000000000..0ebe40b8f
--- /dev/null
+++ b/lib/curl_trc.c
@@ -0,0 +1,241 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+
+#include <curl/curl.h>
+
+#include "curl_trc.h"
+#include "urldata.h"
+#include "easyif.h"
+#include "cfilters.h"
+#include "timeval.h"
+#include "multiif.h"
+#include "strcase.h"
+
+#include "cf-socket.h"
+#include "connect.h"
+#include "http2.h"
+#include "http_proxy.h"
+#include "cf-h1-proxy.h"
+#include "cf-h2-proxy.h"
+#include "cf-haproxy.h"
+#include "cf-https-connect.h"
+#include "socks.h"
+#include "strtok.h"
+#include "vtls/vtls.h"
+#include "vquic/vquic.h"
+
+/* The last 3 #include files should be in this order */
+#include "curl_printf.h"
+#include "curl_memory.h"
+#include "memdebug.h"
+
+
+void Curl_debug(struct Curl_easy *data, curl_infotype type,
+ char *ptr, size_t size)
+{
+ if(data->set.verbose) {
+ static const char s_infotype[CURLINFO_END][3] = {
+ "* ", "< ", "> ", "{ ", "} ", "{ ", "} " };
+ if(data->set.fdebug) {
+ bool inCallback = Curl_is_in_callback(data);
+ Curl_set_in_callback(data, true);
+ (void)(*data->set.fdebug)(data, type, ptr, size, data->set.debugdata);
+ Curl_set_in_callback(data, inCallback);
+ }
+ else {
+ switch(type) {
+ case CURLINFO_TEXT:
+ case CURLINFO_HEADER_OUT:
+ case CURLINFO_HEADER_IN:
+ fwrite(s_infotype[type], 2, 1, data->set.err);
+ fwrite(ptr, size, 1, data->set.err);
+ break;
+ default: /* nada */
+ break;
+ }
+ }
+ }
+}
+
+
+/* Curl_failf() is for messages stating why we failed.
+ * The message SHALL NOT include any LF or CR.
+ */
+void Curl_failf(struct Curl_easy *data, const char *fmt, ...)
+{
+ DEBUGASSERT(!strchr(fmt, '\n'));
+ if(data->set.verbose || data->set.errorbuffer) {
+ va_list ap;
+ int len;
+ char error[CURL_ERROR_SIZE + 2];
+ va_start(ap, fmt);
+ len = mvsnprintf(error, CURL_ERROR_SIZE, fmt, ap);
+
+ if(data->set.errorbuffer && !data->state.errorbuf) {
+ strcpy(data->set.errorbuffer, error);
+ data->state.errorbuf = TRUE; /* wrote error string */
+ }
+ error[len++] = '\n';
+ error[len] = '\0';
+ Curl_debug(data, CURLINFO_TEXT, error, len);
+ va_end(ap);
+ }
+}
+
+#if !defined(CURL_DISABLE_VERBOSE_STRINGS)
+
+/* Curl_infof() is for info message along the way */
+#define MAXINFO 2048
+
+void Curl_infof(struct Curl_easy *data, const char *fmt, ...)
+{
+ DEBUGASSERT(!strchr(fmt, '\n'));
+ if(data && data->set.verbose) {
+ va_list ap;
+ int len;
+ char buffer[MAXINFO + 2];
+ va_start(ap, fmt);
+ len = mvsnprintf(buffer, MAXINFO, fmt, ap);
+ va_end(ap);
+ buffer[len++] = '\n';
+ buffer[len] = '\0';
+ Curl_debug(data, CURLINFO_TEXT, buffer, len);
+ }
+}
+
+void Curl_trc_cf_infof(struct Curl_easy *data, struct Curl_cfilter *cf,
+ const char *fmt, ...)
+{
+ DEBUGASSERT(cf);
+ if(Curl_trc_cf_is_verbose(cf, data)) {
+ va_list ap;
+ int len;
+ char buffer[MAXINFO + 2];
+ len = msnprintf(buffer, MAXINFO, "[%s] ", cf->cft->name);
+ va_start(ap, fmt);
+ len += mvsnprintf(buffer + len, MAXINFO - len, fmt, ap);
+ va_end(ap);
+ buffer[len++] = '\n';
+ buffer[len] = '\0';
+ Curl_debug(data, CURLINFO_TEXT, buffer, len);
+ }
+}
+
+
+static struct Curl_cftype *cf_types[] = {
+ &Curl_cft_tcp,
+ &Curl_cft_udp,
+ &Curl_cft_unix,
+ &Curl_cft_tcp_accept,
+ &Curl_cft_happy_eyeballs,
+ &Curl_cft_setup,
+#ifdef USE_NGHTTP2
+ &Curl_cft_nghttp2,
+#endif
+#ifdef USE_SSL
+ &Curl_cft_ssl,
+ &Curl_cft_ssl_proxy,
+#endif
+#if !defined(CURL_DISABLE_PROXY)
+#if !defined(CURL_DISABLE_HTTP)
+ &Curl_cft_h1_proxy,
+#ifdef USE_NGHTTP2
+ &Curl_cft_h2_proxy,
+#endif
+ &Curl_cft_http_proxy,
+#endif /* !CURL_DISABLE_HTTP */
+ &Curl_cft_haproxy,
+ &Curl_cft_socks_proxy,
+#endif /* !CURL_DISABLE_PROXY */
+#ifdef ENABLE_QUIC
+ &Curl_cft_http3,
+#endif
+#if !defined(CURL_DISABLE_HTTP) && !defined(USE_HYPER)
+ &Curl_cft_http_connect,
+#endif
+ NULL,
+};
+
+CURLcode Curl_trc_opt(const char *config)
+{
+ char *token, *tok_buf, *tmp;
+ size_t i;
+ int lvl;
+
+ tmp = strdup(config);
+ if(!tmp)
+ return CURLE_OUT_OF_MEMORY;
+
+ token = strtok_r(tmp, ", ", &tok_buf);
+ while(token) {
+ switch(*token) {
+ case '-':
+ lvl = CURL_LOG_LVL_NONE;
+ ++token;
+ break;
+ case '+':
+ lvl = CURL_LOG_LVL_INFO;
+ ++token;
+ break;
+ default:
+ lvl = CURL_LOG_LVL_INFO;
+ break;
+ }
+ for(i = 0; cf_types[i]; ++i) {
+ if(strcasecompare(token, "all")) {
+ cf_types[i]->log_level = lvl;
+ }
+ else if(strcasecompare(token, cf_types[i]->name)) {
+ cf_types[i]->log_level = lvl;
+ break;
+ }
+ }
+ token = strtok_r(NULL, ", ", &tok_buf);
+ }
+ free(tmp);
+ return CURLE_OK;
+}
+
+CURLcode Curl_trc_init(void)
+{
+#ifdef DEBUGBUILD
+ /* WIP: we use the auto-init from an env var only in DEBUG builds for
+ * convenience. */
+ const char *config = getenv("CURL_DEBUG");
+ if(config) {
+ return Curl_trc_opt(config);
+ }
+#endif /* DEBUGBUILD */
+ return CURLE_OK;
+}
+#else /* defined(CURL_DISABLE_VERBOSE_STRINGS) */
+
+CURLcode Curl_trc_init(void)
+{
+ return CURLE_OK;
+}
+
+#endif /* !defined(CURL_DISABLE_VERBOSE_STRINGS) */
diff --git a/lib/curl_trc.h b/lib/curl_trc.h
new file mode 100644
index 000000000..ade9108ac
--- /dev/null
+++ b/lib/curl_trc.h
@@ -0,0 +1,146 @@
+#ifndef HEADER_CURL_TRC_H
+#define HEADER_CURL_TRC_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ ***************************************************************************/
+
+struct Curl_easy;
+struct Curl_cfilter;
+
+/**
+ * Init logging, return != 0 on failure.
+ */
+CURLcode Curl_trc_init(void);
+
+/**
+ * Configure tracing. May be called several times during global
+ * initialization. Later calls may not take effect.
+ *
+ * Configuration format supported:
+ * - comma-separated list of component names to enable logging on.
+ * E.g. 'http/2,ssl'. Unknown names are ignored. Names are compared
+ * case-insensitive.
+ * - component 'all' applies to all known log components
+ * - prefixing a component with '+' or '-' will en-/disable logging for
+ * that component
+ * Example: 'all,-ssl' would enable logging for all components but the
+ * SSL filters.
+ *
+ * @param config configuration string
+ */
+CURLcode Curl_trc_opt(const char *config);
+
+/* the function used to output verbose information */
+void Curl_debug(struct Curl_easy *data, curl_infotype type,
+ char *ptr, size_t size);
+
+/**
+ * Output a failure message on registered callbacks for transfer.
+ */
+void Curl_failf(struct Curl_easy *data,
+#if defined(__GNUC__) && !defined(printf) && \
+ defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
+ !defined(__MINGW32__)
+ const char *fmt, ...)
+ __attribute__((format(printf, 2, 3)));
+#else
+ const char *fmt, ...);
+#endif
+
+#define failf Curl_failf
+
+#define CURL_LOG_LVL_NONE 0
+#define CURL_LOG_LVL_INFO 1
+
+
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#define CURL_HAVE_C99
+#endif
+
+#ifdef CURL_HAVE_C99
+#define infof(data, ...) \
+ do { if(Curl_trc_is_verbose(data)) \
+ Curl_infof(data, __VA_ARGS__); } while(0)
+#define CURL_TRC_CF(data, cf, ...) \
+ do { if(Curl_trc_cf_is_verbose(cf, data)) \
+ Curl_trc_cf_infof(data, cf, __VA_ARGS__); } while(0)
+
+#else
+#define infof Curl_infof
+#define CURL_TRC_CF Curl_trc_cf_infof
+#endif
+
+#ifndef CURL_DISABLE_VERBOSE_STRINGS
+/* informational messages enabled */
+
+#define Curl_trc_is_verbose(data) ((data) && (data)->set.verbose)
+#define Curl_trc_cf_is_verbose(cf, data) \
+ ((data) && (data)->set.verbose && \
+ (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO)
+
+/**
+ * Output an informational message when transfer's verbose logging is enabled.
+ */
+void Curl_infof(struct Curl_easy *data,
+#if defined(__GNUC__) && !defined(printf) && defined(CURL_HAVE_C99) && \
+ !defined(__MINGW32__)
+ const char *fmt, ...)
+ __attribute__((format(printf, 2, 3)));
+#else
+ const char *fmt, ...);
+#endif
+
+/**
+ * Output an informational message when both transfer's verbose logging
+ * and connection filters verbose logging are enabled.
+ */
+void Curl_trc_cf_infof(struct Curl_easy *data, struct Curl_cfilter *cf,
+#if defined(__GNUC__) && !defined(printf) && defined(CURL_HAVE_C99) && \
+ !defined(__MINGW32__)
+ const char *fmt, ...)
+ __attribute__((format(printf, 3, 4)));
+#else
+ const char *fmt, ...);
+#endif
+
+#else /* defined(CURL_DISABLE_VERBOSE_STRINGS) */
+/* All informational messages are not compiled in for size savings */
+
+#define Curl_trc_is_verbose(d) ((void)(d), FALSE)
+#define Curl_trc_cf_is_verbose(x,y) ((void)(x), (void)(y), FALSE)
+
+static void Curl_infof(struct Curl_easy *data, const char *fmt, ...)
+{
+ (void)data; (void)fmt;
+}
+
+static void Curl_trc_cf_infof(struct Curl_easy *data,
+ struct Curl_cfilter *cf,
+ const char *fmt, ...)
+{
+ (void)data; (void)cf; (void)fmt;
+}
+
+#endif /* !defined(CURL_DISABLE_VERBOSE_STRINGS) */
+
+#endif /* HEADER_CURL_TRC_H */
diff --git a/lib/curlx.h b/lib/curlx.h
index 1796afa00..7a753d682 100644
--- a/lib/curlx.h
+++ b/lib/curlx.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/dict.c b/lib/dict.c
index 6f7678f5c..3172b3829 100644
--- a/lib/dict.c
+++ b/lib/dict.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -98,37 +98,27 @@ const struct Curl_handler Curl_handler_dict = {
PROTOPT_NONE | PROTOPT_NOURLQUERY /* flags */
};
-static char *unescape_word(const char *inputbuff)
+#define DYN_DICT_WORD 10000
+static char *unescape_word(const char *input)
{
- char *newp = NULL;
- char *dictp;
- size_t len;
-
- CURLcode result = Curl_urldecode(inputbuff, 0, &newp, &len,
- REJECT_NADA);
- if(!newp || result)
- return NULL;
-
- dictp = malloc(len*2 + 1); /* add one for terminating zero */
- if(dictp) {
- char *ptr;
- char ch;
- int olen = 0;
- /* According to RFC2229 section 2.2, these letters need to be escaped with
- \[letter] */
- for(ptr = newp;
- (ch = *ptr) != 0;
- ptr++) {
- if((ch <= 32) || (ch == 127) ||
- (ch == '\'') || (ch == '\"') || (ch == '\\')) {
- dictp[olen++] = '\\';
- }
- dictp[olen++] = ch;
- }
- dictp[olen] = 0;
+ struct dynbuf out;
+ const char *ptr;
+ CURLcode result = CURLE_OK;
+ Curl_dyn_init(&out, DYN_DICT_WORD);
+
+ /* According to RFC2229 section 2.2, these letters need to be escaped with
+ \[letter] */
+ for(ptr = input; *ptr; ptr++) {
+ char ch = *ptr;
+ if((ch <= 32) || (ch == 127) ||
+ (ch == '\'') || (ch == '\"') || (ch == '\\'))
+ result = Curl_dyn_addn(&out, "\\", 1);
+ if(!result)
+ result = Curl_dyn_addn(&out, ptr, 1);
+ if(result)
+ return NULL;
}
- free(newp);
- return dictp;
+ return Curl_dyn_ptr(&out);
}
/* sendf() sends formatted data to the server */
@@ -178,20 +168,25 @@ static CURLcode sendf(curl_socket_t sockfd, struct Curl_easy *data,
static CURLcode dict_do(struct Curl_easy *data, bool *done)
{
char *word;
- char *eword;
+ char *eword = NULL;
char *ppath;
char *database = NULL;
char *strategy = NULL;
char *nthdef = NULL; /* This is not part of the protocol, but required
by RFC 2229 */
- CURLcode result = CURLE_OK;
+ CURLcode result;
struct connectdata *conn = data->conn;
curl_socket_t sockfd = conn->sock[FIRSTSOCKET];
- char *path = data->state.up.path;
+ char *path;
*done = TRUE; /* unconditionally */
+ /* url-decode path before further evaluation */
+ result = Curl_urldecode(data->state.up.path, 0, &path, NULL, REJECT_CTRL);
+ if(result)
+ return result;
+
if(strncasecompare(path, DICT_MATCH, sizeof(DICT_MATCH)-1) ||
strncasecompare(path, DICT_MATCH2, sizeof(DICT_MATCH2)-1) ||
strncasecompare(path, DICT_MATCH3, sizeof(DICT_MATCH3)-1)) {
@@ -225,8 +220,10 @@ static CURLcode dict_do(struct Curl_easy *data, bool *done)
}
eword = unescape_word(word);
- if(!eword)
- return CURLE_OUT_OF_MEMORY;
+ if(!eword) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto error;
+ }
result = sendf(sockfd, data,
"CLIENT " LIBCURL_NAME " " LIBCURL_VERSION "\r\n"
@@ -239,11 +236,9 @@ static CURLcode dict_do(struct Curl_easy *data, bool *done)
strategy,
eword);
- free(eword);
-
if(result) {
failf(data, "Failed sending DICT request");
- return result;
+ goto error;
}
Curl_setup_transfer(data, FIRSTSOCKET, -1, FALSE, -1); /* no upload */
}
@@ -273,8 +268,10 @@ static CURLcode dict_do(struct Curl_easy *data, bool *done)
}
eword = unescape_word(word);
- if(!eword)
- return CURLE_OUT_OF_MEMORY;
+ if(!eword) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto error;
+ }
result = sendf(sockfd, data,
"CLIENT " LIBCURL_NAME " " LIBCURL_VERSION "\r\n"
@@ -285,11 +282,9 @@ static CURLcode dict_do(struct Curl_easy *data, bool *done)
database,
eword);
- free(eword);
-
if(result) {
failf(data, "Failed sending DICT request");
- return result;
+ goto error;
}
Curl_setup_transfer(data, FIRSTSOCKET, -1, FALSE, -1);
}
@@ -310,13 +305,16 @@ static CURLcode dict_do(struct Curl_easy *data, bool *done)
"QUIT\r\n", ppath);
if(result) {
failf(data, "Failed sending DICT request");
- return result;
+ goto error;
}
Curl_setup_transfer(data, FIRSTSOCKET, -1, FALSE, -1);
}
}
- return CURLE_OK;
+error:
+ free(eword);
+ free(path);
+ return result;
}
-#endif /*CURL_DISABLE_DICT*/
+#endif /* CURL_DISABLE_DICT */
diff --git a/lib/dict.h b/lib/dict.h
index b283a0dfc..ba9a92719 100644
--- a/lib/dict.h
+++ b/lib/dict.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/doh.c b/lib/doh.c
index 3b1d5d60e..1d928e92c 100644
--- a/lib/doh.c
+++ b/lib/doh.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2018 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -242,6 +242,7 @@ static CURLcode dohprobe(struct Curl_easy *data,
/* pass in the struct pointer via a local variable to please coverity and
the gcc typecheck helpers */
struct dynbuf *resp = &p->serverdoh;
+ doh->state.internal = true;
ERROR_CHECK_SETOPT(CURLOPT_URL, url);
ERROR_CHECK_SETOPT(CURLOPT_DEFAULT_PROTOCOL, "https");
ERROR_CHECK_SETOPT(CURLOPT_WRITEFUNCTION, doh_write_cb);
@@ -251,6 +252,7 @@ static CURLcode dohprobe(struct Curl_easy *data,
ERROR_CHECK_SETOPT(CURLOPT_HTTPHEADER, headers);
#ifdef USE_HTTP2
ERROR_CHECK_SETOPT(CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2TLS);
+ ERROR_CHECK_SETOPT(CURLOPT_PIPEWAIT, 1L);
#endif
#ifndef CURLDEBUG
/* enforce HTTPS if not debug */
@@ -307,6 +309,10 @@ static CURLcode dohprobe(struct Curl_easy *data,
ERROR_CHECK_SETOPT(CURLOPT_SSL_CTX_FUNCTION, data->set.ssl.fsslctx);
if(data->set.ssl.fsslctxp)
ERROR_CHECK_SETOPT(CURLOPT_SSL_CTX_DATA, data->set.ssl.fsslctxp);
+ if(data->set.fdebug)
+ ERROR_CHECK_SETOPT(CURLOPT_DEBUGFUNCTION, data->set.fdebug);
+ if(data->set.debugdata)
+ ERROR_CHECK_SETOPT(CURLOPT_DEBUGDATA, data->set.debugdata);
if(data->set.str[STRING_SSL_EC_CURVES]) {
ERROR_CHECK_SETOPT(CURLOPT_SSL_EC_CURVES,
data->set.str[STRING_SSL_EC_CURVES]);
@@ -334,9 +340,10 @@ static CURLcode dohprobe(struct Curl_easy *data,
doh->set.dohfor = data; /* identify for which transfer this is done */
p->easy = doh;
- /* DoH private_data must be null because the user must have a way to
- distinguish their transfer's handle from DoH handles in user
- callbacks (ie SSL CTX callback). */
+ /* DoH handles must not inherit private_data. The handles may be passed to
+ the user via callbacks and the user will be able to identify them as
+ internal handles because private data is not set. The user can then set
+ private_data via CURLOPT_PRIVATE if they so choose. */
DEBUGASSERT(!doh->set.private_data);
if(curl_multi_add_handle(multi, doh))
@@ -347,7 +354,7 @@ static CURLcode dohprobe(struct Curl_easy *data,
free(nurl);
return CURLE_OK;
- error:
+error:
free(nurl);
Curl_close(&doh);
return result;
@@ -367,7 +374,7 @@ struct Curl_addrinfo *Curl_doh(struct Curl_easy *data,
int slot;
struct dohdata *dohp;
struct connectdata *conn = data->conn;
- *waitp = TRUE; /* this never returns synchronously */
+ *waitp = FALSE;
(void)hostname;
(void)port;
@@ -375,7 +382,7 @@ struct Curl_addrinfo *Curl_doh(struct Curl_easy *data,
DEBUGASSERT(conn);
/* start clean, consider allocating this struct on demand */
- dohp = data->req.doh = calloc(sizeof(struct dohdata), 1);
+ dohp = data->req.doh = calloc(1, sizeof(struct dohdata));
if(!dohp)
return NULL;
@@ -396,6 +403,7 @@ struct Curl_addrinfo *Curl_doh(struct Curl_easy *data,
goto error;
dohp->pending++;
+#ifdef ENABLE_IPV6
if((conn->ip_version != CURL_IPRESOLVE_V4) && Curl_ipv6works(data)) {
/* create IPv6 DoH request */
result = dohprobe(data, &dohp->probe[DOH_PROBE_SLOT_IPADDR_V6],
@@ -405,12 +413,15 @@ struct Curl_addrinfo *Curl_doh(struct Curl_easy *data,
goto error;
dohp->pending++;
}
+#endif
+ *waitp = TRUE; /* this never returns synchronously */
return NULL;
- error:
+error:
curl_slist_free_all(dohp->headers);
data->req.doh->headers = NULL;
for(slot = 0; slot < DOH_PROBE_SLOTS; slot++) {
+ (void)curl_multi_remove_handle(data->multi, dohp->probe[slot].easy);
Curl_close(&dohp->probe[slot].easy);
}
Curl_safefree(data->req.doh);
@@ -780,8 +791,8 @@ static void showdoh(struct Curl_easy *data,
* must be an associated call later to Curl_freeaddrinfo().
*/
-static struct Curl_addrinfo *
-doh2ai(const struct dohentry *de, const char *hostname, int port)
+static CURLcode doh2ai(const struct dohentry *de, const char *hostname,
+ int port, struct Curl_addrinfo **aip)
{
struct Curl_addrinfo *ai;
struct Curl_addrinfo *prevai = NULL;
@@ -794,9 +805,10 @@ doh2ai(const struct dohentry *de, const char *hostname, int port)
int i;
size_t hostlen = strlen(hostname) + 1; /* include null-terminator */
- if(!de)
- /* no input == no output! */
- return NULL;
+ DEBUGASSERT(de);
+
+ if(!de->numaddr)
+ return CURLE_COULDNT_RESOLVE_HOST;
for(i = 0; i < de->numaddr; i++) {
size_t ss_size;
@@ -869,8 +881,9 @@ doh2ai(const struct dohentry *de, const char *hostname, int port)
Curl_freeaddrinfo(firstai);
firstai = NULL;
}
+ *aip = firstai;
- return firstai;
+ return result;
}
#ifndef CURL_DISABLE_VERBOSE_STRINGS
@@ -891,6 +904,7 @@ UNITTEST void de_cleanup(struct dohentry *d)
CURLcode Curl_doh_is_resolved(struct Curl_easy *data,
struct Curl_dns_entry **dnsp)
{
+ struct connectdata *conn = data->conn;
CURLcode result;
struct dohdata *dohp = data->req.doh;
*dnsp = NULL; /* defaults to no response */
@@ -899,7 +913,7 @@ CURLcode Curl_doh_is_resolved(struct Curl_easy *data,
if(!dohp->probe[DOH_PROBE_SLOT_IPADDR_V4].easy &&
!dohp->probe[DOH_PROBE_SLOT_IPADDR_V6].easy) {
- failf(data, "Could not DoH-resolve: %s", data->state.async.hostname);
+ failf(data, "Could not DoH-resolve: %s", conn->resolve_async.hostname);
return CONN_IS_PROXIED(data->conn)?CURLE_COULDNT_RESOLVE_PROXY:
CURLE_COULDNT_RESOLVE_HOST;
}
@@ -925,10 +939,12 @@ CURLcode Curl_doh_is_resolved(struct Curl_easy *data,
p->dnstype,
&de);
Curl_dyn_free(&p->serverdoh);
+#ifndef CURL_DISABLE_VERBOSE_STRINGS
if(rc[slot]) {
infof(data, "DoH: %s type %s for %s", doh_strerror(rc[slot]),
type2name(p->dnstype), dohp->host);
}
+#endif
} /* next slot */
result = CURLE_COULDNT_RESOLVE_HOST; /* until we know better */
@@ -940,17 +956,17 @@ CURLcode Curl_doh_is_resolved(struct Curl_easy *data,
infof(data, "DoH Host name: %s", dohp->host);
showdoh(data, &de);
- ai = doh2ai(&de, dohp->host, dohp->port);
- if(!ai) {
+ result = doh2ai(&de, dohp->host, dohp->port, &ai);
+ if(result) {
de_cleanup(&de);
- return CURLE_OUT_OF_MEMORY;
+ return result;
}
if(data->share)
Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
/* we got a response, store it in the cache */
- dns = Curl_cache_addr(data, ai, dohp->host, dohp->port);
+ dns = Curl_cache_addr(data, ai, dohp->host, 0, dohp->port);
if(data->share)
Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
@@ -960,7 +976,7 @@ CURLcode Curl_doh_is_resolved(struct Curl_easy *data,
Curl_freeaddrinfo(ai);
}
else {
- data->state.async.dns = dns;
+ conn->resolve_async.dns = dns;
*dnsp = dns;
result = CURLE_OK; /* address resolution OK */
}
diff --git a/lib/doh.h b/lib/doh.h
index 678e807fe..7d7b694f3 100644
--- a/lib/doh.h
+++ b/lib/doh.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2018 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/dynbuf.c b/lib/dynbuf.c
index 0b1cf9afd..2973d8da2 100644
--- a/lib/dynbuf.c
+++ b/lib/dynbuf.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2020 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -76,6 +76,8 @@ static CURLcode dyn_nappend(struct dynbuf *s,
DEBUGASSERT(s->toobig);
DEBUGASSERT(indx < s->toobig);
DEBUGASSERT(!s->leng || s->bufr);
+ DEBUGASSERT(a <= s->toobig);
+ DEBUGASSERT(!len || mem);
if(fit > s->toobig) {
Curl_dyn_free(s);
@@ -84,7 +86,9 @@ static CURLcode dyn_nappend(struct dynbuf *s,
else if(!a) {
DEBUGASSERT(!indx);
/* first invoke */
- if(fit < MIN_FIRST_ALLOC)
+ if(MIN_FIRST_ALLOC > s->toobig)
+ a = s->toobig;
+ else if(fit < MIN_FIRST_ALLOC)
a = MIN_FIRST_ALLOC;
else
a = fit;
@@ -92,6 +96,9 @@ static CURLcode dyn_nappend(struct dynbuf *s,
else {
while(a < fit)
a *= 2;
+ if(a > s->toobig)
+ /* no point in allocating a larger buffer than this is allowed to use */
+ a = s->toobig;
}
if(a != s->allc) {
@@ -99,8 +106,7 @@ static CURLcode dyn_nappend(struct dynbuf *s,
include that as well when it uses this code */
void *p = realloc(s->bufr, a);
if(!p) {
- Curl_safefree(s->bufr);
- s->leng = s->allc = 0;
+ Curl_dyn_free(s);
return CURLE_OUT_OF_MEMORY;
}
s->bufr = p;
@@ -169,10 +175,12 @@ CURLcode Curl_dyn_addn(struct dynbuf *s, const void *mem, size_t len)
*/
CURLcode Curl_dyn_add(struct dynbuf *s, const char *str)
{
- size_t n = strlen(str);
+ size_t n;
+ DEBUGASSERT(str);
DEBUGASSERT(s);
DEBUGASSERT(s->init == DYNINIT);
DEBUGASSERT(!s->leng || s->bufr);
+ n = strlen(str);
return dyn_nappend(s, (unsigned char *)str, n);
}
@@ -186,6 +194,7 @@ CURLcode Curl_dyn_vaddf(struct dynbuf *s, const char *fmt, va_list ap)
DEBUGASSERT(s);
DEBUGASSERT(s->init == DYNINIT);
DEBUGASSERT(!s->leng || s->bufr);
+ DEBUGASSERT(fmt);
rc = Curl_dyn_vprintf(s, fmt, ap);
if(!rc)
diff --git a/lib/dynbuf.h b/lib/dynbuf.h
index 04a728c77..31a913019 100644
--- a/lib/dynbuf.h
+++ b/lib/dynbuf.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2020 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -81,8 +81,6 @@ int Curl_dyn_vprintf(struct dynbuf *dyn, const char *format, va_list ap_save);
#define DYN_PAUSE_BUFFER (64 * 1024 * 1024)
#define DYN_HAXPROXY 2048
#define DYN_HTTP_REQUEST (1024*1024)
-#define DYN_H2_HEADERS (128*1024)
-#define DYN_H2_TRAILERS (128*1024)
#define DYN_APRINTF 8000000
#define DYN_RTSP_REQ_HEADER (64*1024)
#define DYN_TRAILERS (64*1024)
@@ -91,4 +89,5 @@ int Curl_dyn_vprintf(struct dynbuf *dyn, const char *format, va_list ap_save);
#define DYN_H1_TRAILER 4096
#define DYN_PINGPPONG_CMD (64*1024)
#define DYN_IMAP_CMD (64*1024)
+#define DYN_MQTT_RECV (64*1024)
#endif
diff --git a/lib/dynhds.c b/lib/dynhds.c
new file mode 100644
index 000000000..d7548959b
--- /dev/null
+++ b/lib/dynhds.c
@@ -0,0 +1,396 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+#include "dynhds.h"
+#include "strcase.h"
+
+/* The last 3 #include files should be in this order */
+#ifdef USE_NGHTTP2
+#include <stdint.h>
+#include <nghttp2/nghttp2.h>
+#endif /* USE_NGHTTP2 */
+#include "curl_printf.h"
+#include "curl_memory.h"
+#include "memdebug.h"
+
+
+static struct dynhds_entry *
+entry_new(const char *name, size_t namelen,
+ const char *value, size_t valuelen, int opts)
+{
+ struct dynhds_entry *e;
+ char *p;
+
+ DEBUGASSERT(name);
+ DEBUGASSERT(value);
+ e = calloc(1, sizeof(*e) + namelen + valuelen + 2);
+ if(!e)
+ return NULL;
+ e->name = p = ((char *)e) + sizeof(*e);
+ memcpy(p, name, namelen);
+ e->namelen = namelen;
+ e->value = p += namelen + 1; /* leave a \0 at the end of name */
+ memcpy(p, value, valuelen);
+ e->valuelen = valuelen;
+ if(opts & DYNHDS_OPT_LOWERCASE)
+ Curl_strntolower(e->name, e->name, e->namelen);
+ return e;
+}
+
+static struct dynhds_entry *
+entry_append(struct dynhds_entry *e,
+ const char *value, size_t valuelen)
+{
+ struct dynhds_entry *e2;
+ size_t valuelen2 = e->valuelen + 1 + valuelen;
+ char *p;
+
+ DEBUGASSERT(value);
+ e2 = calloc(1, sizeof(*e) + e->namelen + valuelen2 + 2);
+ if(!e2)
+ return NULL;
+ e2->name = p = ((char *)e2) + sizeof(*e2);
+ memcpy(p, e->name, e->namelen);
+ e2->namelen = e->namelen;
+ e2->value = p += e->namelen + 1; /* leave a \0 at the end of name */
+ memcpy(p, e->value, e->valuelen);
+ p += e->valuelen;
+ p[0] = ' ';
+ memcpy(p + 1, value, valuelen);
+ e2->valuelen = valuelen2;
+ return e2;
+}
+
+static void entry_free(struct dynhds_entry *e)
+{
+ free(e);
+}
+
+void Curl_dynhds_init(struct dynhds *dynhds, size_t max_entries,
+ size_t max_strs_size)
+{
+ DEBUGASSERT(dynhds);
+ DEBUGASSERT(max_strs_size);
+ dynhds->hds = NULL;
+ dynhds->hds_len = dynhds->hds_allc = dynhds->strs_len = 0;
+ dynhds->max_entries = max_entries;
+ dynhds->max_strs_size = max_strs_size;
+ dynhds->opts = 0;
+}
+
+void Curl_dynhds_free(struct dynhds *dynhds)
+{
+ DEBUGASSERT(dynhds);
+ if(dynhds->hds && dynhds->hds_len) {
+ size_t i;
+ DEBUGASSERT(dynhds->hds);
+ for(i = 0; i < dynhds->hds_len; ++i) {
+ entry_free(dynhds->hds[i]);
+ }
+ }
+ Curl_safefree(dynhds->hds);
+ dynhds->hds_len = dynhds->hds_allc = dynhds->strs_len = 0;
+}
+
+void Curl_dynhds_reset(struct dynhds *dynhds)
+{
+ DEBUGASSERT(dynhds);
+ if(dynhds->hds_len) {
+ size_t i;
+ DEBUGASSERT(dynhds->hds);
+ for(i = 0; i < dynhds->hds_len; ++i) {
+ entry_free(dynhds->hds[i]);
+ dynhds->hds[i] = NULL;
+ }
+ }
+ dynhds->hds_len = dynhds->strs_len = 0;
+}
+
+size_t Curl_dynhds_count(struct dynhds *dynhds)
+{
+ return dynhds->hds_len;
+}
+
+void Curl_dynhds_set_opts(struct dynhds *dynhds, int opts)
+{
+ dynhds->opts = opts;
+}
+
+struct dynhds_entry *Curl_dynhds_getn(struct dynhds *dynhds, size_t n)
+{
+ DEBUGASSERT(dynhds);
+ return (n < dynhds->hds_len)? dynhds->hds[n] : NULL;
+}
+
+struct dynhds_entry *Curl_dynhds_get(struct dynhds *dynhds, const char *name,
+ size_t namelen)
+{
+ size_t i;
+ for(i = 0; i < dynhds->hds_len; ++i) {
+ if(dynhds->hds[i]->namelen == namelen &&
+ strncasecompare(dynhds->hds[i]->name, name, namelen)) {
+ return dynhds->hds[i];
+ }
+ }
+ return NULL;
+}
+
+struct dynhds_entry *Curl_dynhds_cget(struct dynhds *dynhds, const char *name)
+{
+ return Curl_dynhds_get(dynhds, name, strlen(name));
+}
+
+CURLcode Curl_dynhds_add(struct dynhds *dynhds,
+ const char *name, size_t namelen,
+ const char *value, size_t valuelen)
+{
+ struct dynhds_entry *entry = NULL;
+ CURLcode result = CURLE_OUT_OF_MEMORY;
+
+ DEBUGASSERT(dynhds);
+ if(dynhds->max_entries && dynhds->hds_len >= dynhds->max_entries)
+ return CURLE_OUT_OF_MEMORY;
+ if(dynhds->strs_len + namelen + valuelen > dynhds->max_strs_size)
+ return CURLE_OUT_OF_MEMORY;
+
+entry = entry_new(name, namelen, value, valuelen, dynhds->opts);
+ if(!entry)
+ goto out;
+
+ if(dynhds->hds_len + 1 >= dynhds->hds_allc) {
+ size_t nallc = dynhds->hds_len + 16;
+ struct dynhds_entry **nhds;
+
+ if(dynhds->max_entries && nallc > dynhds->max_entries)
+ nallc = dynhds->max_entries;
+
+ nhds = calloc(nallc, sizeof(struct dynhds_entry *));
+ if(!nhds)
+ goto out;
+ if(dynhds->hds) {
+ memcpy(nhds, dynhds->hds,
+ dynhds->hds_len * sizeof(struct dynhds_entry *));
+ Curl_safefree(dynhds->hds);
+ }
+ dynhds->hds = nhds;
+ dynhds->hds_allc = nallc;
+ }
+ dynhds->hds[dynhds->hds_len++] = entry;
+ entry = NULL;
+ dynhds->strs_len += namelen + valuelen;
+ result = CURLE_OK;
+
+out:
+ if(entry)
+ entry_free(entry);
+ return result;
+}
+
+CURLcode Curl_dynhds_cadd(struct dynhds *dynhds,
+ const char *name, const char *value)
+{
+ return Curl_dynhds_add(dynhds, name, strlen(name), value, strlen(value));
+}
+
+CURLcode Curl_dynhds_h1_add_line(struct dynhds *dynhds,
+ const char *line, size_t line_len)
+{
+ const char *p;
+ const char *name;
+ size_t namelen;
+ const char *value;
+ size_t valuelen, i;
+
+ if(!line || !line_len)
+ return CURLE_OK;
+
+ if((line[0] == ' ') || (line[0] == '\t')) {
+ struct dynhds_entry *e, *e2;
+ /* header continuation, yikes! */
+ if(!dynhds->hds_len)
+ return CURLE_BAD_FUNCTION_ARGUMENT;
+
+ while(line_len && ISBLANK(line[0])) {
+ ++line;
+ --line_len;
+ }
+ if(!line_len)
+ return CURLE_BAD_FUNCTION_ARGUMENT;
+ e = dynhds->hds[dynhds->hds_len-1];
+ e2 = entry_append(e, line, line_len);
+ if(!e2)
+ return CURLE_OUT_OF_MEMORY;
+ dynhds->hds[dynhds->hds_len-1] = e2;
+ entry_free(e);
+ return CURLE_OK;
+ }
+ else {
+ p = memchr(line, ':', line_len);
+ if(!p)
+ return CURLE_BAD_FUNCTION_ARGUMENT;
+ name = line;
+ namelen = p - line;
+ p++; /* move past the colon */
+ for(i = namelen + 1; i < line_len; ++i, ++p) {
+ if(!ISBLANK(*p))
+ break;
+ }
+ value = p;
+ valuelen = line_len - i;
+
+ p = memchr(value, '\r', valuelen);
+ if(!p)
+ p = memchr(value, '\n', valuelen);
+ if(p)
+ valuelen = (size_t)(p - value);
+
+ return Curl_dynhds_add(dynhds, name, namelen, value, valuelen);
+ }
+}
+
+CURLcode Curl_dynhds_h1_cadd_line(struct dynhds *dynhds, const char *line)
+{
+ return Curl_dynhds_h1_add_line(dynhds, line, line? strlen(line) : 0);
+}
+
+#ifdef DEBUGBUILD
+/* used by unit2602.c */
+
+bool Curl_dynhds_contains(struct dynhds *dynhds,
+ const char *name, size_t namelen)
+{
+ return !!Curl_dynhds_get(dynhds, name, namelen);
+}
+
+bool Curl_dynhds_ccontains(struct dynhds *dynhds, const char *name)
+{
+ return Curl_dynhds_contains(dynhds, name, strlen(name));
+}
+
+size_t Curl_dynhds_count_name(struct dynhds *dynhds,
+ const char *name, size_t namelen)
+{
+ size_t n = 0;
+ if(dynhds->hds_len) {
+ size_t i;
+ for(i = 0; i < dynhds->hds_len; ++i) {
+ if((namelen == dynhds->hds[i]->namelen) &&
+ strncasecompare(name, dynhds->hds[i]->name, namelen))
+ ++n;
+ }
+ }
+ return n;
+}
+
+size_t Curl_dynhds_ccount_name(struct dynhds *dynhds, const char *name)
+{
+ return Curl_dynhds_count_name(dynhds, name, strlen(name));
+}
+
+CURLcode Curl_dynhds_set(struct dynhds *dynhds,
+ const char *name, size_t namelen,
+ const char *value, size_t valuelen)
+{
+ Curl_dynhds_remove(dynhds, name, namelen);
+ return Curl_dynhds_add(dynhds, name, namelen, value, valuelen);
+}
+
+size_t Curl_dynhds_remove(struct dynhds *dynhds,
+ const char *name, size_t namelen)
+{
+ size_t n = 0;
+ if(dynhds->hds_len) {
+ size_t i, len;
+ for(i = 0; i < dynhds->hds_len; ++i) {
+ if((namelen == dynhds->hds[i]->namelen) &&
+ strncasecompare(name, dynhds->hds[i]->name, namelen)) {
+ ++n;
+ --dynhds->hds_len;
+ dynhds->strs_len -= (dynhds->hds[i]->namelen +
+ dynhds->hds[i]->valuelen);
+ entry_free(dynhds->hds[i]);
+ len = dynhds->hds_len - i; /* remaining entries */
+ if(len) {
+ memmove(&dynhds->hds[i], &dynhds->hds[i + 1],
+ len * sizeof(dynhds->hds[i]));
+ }
+ --i; /* do this index again */
+ }
+ }
+ }
+ return n;
+}
+
+size_t Curl_dynhds_cremove(struct dynhds *dynhds, const char *name)
+{
+ return Curl_dynhds_remove(dynhds, name, strlen(name));
+}
+
+#endif
+
+CURLcode Curl_dynhds_h1_dprint(struct dynhds *dynhds, struct dynbuf *dbuf)
+{
+ CURLcode result = CURLE_OK;
+ size_t i;
+
+ if(!dynhds->hds_len)
+ return result;
+
+ for(i = 0; i < dynhds->hds_len; ++i) {
+ result = Curl_dyn_addf(dbuf, "%.*s: %.*s\r\n",
+ (int)dynhds->hds[i]->namelen, dynhds->hds[i]->name,
+ (int)dynhds->hds[i]->valuelen, dynhds->hds[i]->value);
+ if(result)
+ break;
+ }
+
+ return result;
+}
+
+#ifdef USE_NGHTTP2
+
+nghttp2_nv *Curl_dynhds_to_nva(struct dynhds *dynhds, size_t *pcount)
+{
+ nghttp2_nv *nva = calloc(1, sizeof(nghttp2_nv) * dynhds->hds_len);
+ size_t i;
+
+ *pcount = 0;
+ if(!nva)
+ return NULL;
+
+ for(i = 0; i < dynhds->hds_len; ++i) {
+ struct dynhds_entry *e = dynhds->hds[i];
+ DEBUGASSERT(e);
+ nva[i].name = (unsigned char *)e->name;
+ nva[i].namelen = e->namelen;
+ nva[i].value = (unsigned char *)e->value;
+ nva[i].valuelen = e->valuelen;
+ nva[i].flags = NGHTTP2_NV_FLAG_NONE;
+ }
+ *pcount = dynhds->hds_len;
+ return nva;
+}
+
+#endif /* USE_NGHTTP2 */
diff --git a/lib/dynhds.h b/lib/dynhds.h
new file mode 100644
index 000000000..3b536000a
--- /dev/null
+++ b/lib/dynhds.h
@@ -0,0 +1,183 @@
+#ifndef HEADER_CURL_DYNHDS_H
+#define HEADER_CURL_DYNHDS_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+
+#include <curl/curl.h>
+#include "dynbuf.h"
+
+struct dynbuf;
+
+/**
+ * A single header entry.
+ * `name` and `value` are non-NULL and always NUL terminated.
+ */
+struct dynhds_entry {
+ char *name;
+ char *value;
+ size_t namelen;
+ size_t valuelen;
+};
+
+struct dynhds {
+ struct dynhds_entry **hds;
+ size_t hds_len; /* number of entries in hds */
+ size_t hds_allc; /* size of hds allocation */
+ size_t max_entries; /* size limit number of entries */
+ size_t strs_len; /* length of all strings */
+ size_t max_strs_size; /* max length of all strings */
+ int opts;
+};
+
+#define DYNHDS_OPT_NONE (0)
+#define DYNHDS_OPT_LOWERCASE (1 << 0)
+
+/**
+ * Init for use on first time or after a reset.
+ * Allow `max_entries` headers to be added, 0 for unlimited.
+ * Allow size of all name and values added to not exceed `max_strs_size``
+ */
+void Curl_dynhds_init(struct dynhds *dynhds, size_t max_entries,
+ size_t max_strs_size);
+/**
+ * Frees all data held in `dynhds`, but not the struct itself.
+ */
+void Curl_dynhds_free(struct dynhds *dynhds);
+
+/**
+ * Reset `dyndns` to the initial init state. May keep allocations
+ * around.
+ */
+void Curl_dynhds_reset(struct dynhds *dynhds);
+
+/**
+ * Return the number of header entries.
+ */
+size_t Curl_dynhds_count(struct dynhds *dynhds);
+
+/**
+ * Set the options to use, replacing any existing ones.
+ * This will not have an effect on already existing headers.
+ */
+void Curl_dynhds_set_opts(struct dynhds *dynhds, int opts);
+
+/**
+ * Return the n-th header entry or NULL if it does not exist.
+ */
+struct dynhds_entry *Curl_dynhds_getn(struct dynhds *dynhds, size_t n);
+
+/**
+ * Return the 1st header entry of the name or NULL if none exists.
+ */
+struct dynhds_entry *Curl_dynhds_get(struct dynhds *dynhds,
+ const char *name, size_t namelen);
+struct dynhds_entry *Curl_dynhds_cget(struct dynhds *dynhds, const char *name);
+
+/**
+ * Return TRUE iff one or more headers with the given name exist.
+ */
+bool Curl_dynhds_contains(struct dynhds *dynhds,
+ const char *name, size_t namelen);
+bool Curl_dynhds_ccontains(struct dynhds *dynhds, const char *name);
+
+/**
+ * Return how often the given name appears in `dynhds`.
+ * Names are case-insensitive.
+ */
+size_t Curl_dynhds_count_name(struct dynhds *dynhds,
+ const char *name, size_t namelen);
+
+/**
+ * Return how often the given 0-terminated name appears in `dynhds`.
+ * Names are case-insensitive.
+ */
+size_t Curl_dynhds_ccount_name(struct dynhds *dynhds, const char *name);
+
+/**
+ * Add a header, name + value, to `dynhds` at the end. Does *not*
+ * check for duplicate names.
+ */
+CURLcode Curl_dynhds_add(struct dynhds *dynhds,
+ const char *name, size_t namelen,
+ const char *value, size_t valuelen);
+
+/**
+ * Add a header, c-string name + value, to `dynhds` at the end.
+ */
+CURLcode Curl_dynhds_cadd(struct dynhds *dynhds,
+ const char *name, const char *value);
+
+/**
+ * Remove all entries with the given name.
+ * Returns number of entries removed.
+ */
+size_t Curl_dynhds_remove(struct dynhds *dynhds,
+ const char *name, size_t namelen);
+size_t Curl_dynhds_cremove(struct dynhds *dynhds, const char *name);
+
+
+/**
+ * Set the give header name and value, replacing any entries with
+ * the same name. The header is added at the end of all (remaining)
+ * entries.
+ */
+CURLcode Curl_dynhds_set(struct dynhds *dynhds,
+ const char *name, size_t namelen,
+ const char *value, size_t valuelen);
+
+CURLcode Curl_dynhds_cset(struct dynhds *dynhds,
+ const char *name, const char *value);
+
+/**
+ * Add a single header from a HTTP/1.1 formatted line at the end. Line
+ * may contain a delimiting \r\n or just \n. Any characters after
+ * that will be ignored.
+ */
+CURLcode Curl_dynhds_h1_cadd_line(struct dynhds *dynhds, const char *line);
+
+/**
+ * Add a single header from a HTTP/1.1 formatted line at the end. Line
+ * may contain a delimiting \r\n or just \n. Any characters after
+ * that will be ignored.
+ */
+CURLcode Curl_dynhds_h1_add_line(struct dynhds *dynhds,
+ const char *line, size_t line_len);
+
+/**
+ * Add the headers to the given `dynbuf` in HTTP/1.1 format with
+ * cr+lf line endings. Will NOT output a last empty line.
+ */
+CURLcode Curl_dynhds_h1_dprint(struct dynhds *dynhds, struct dynbuf *dbuf);
+
+#ifdef USE_NGHTTP2
+
+#include <stdint.h>
+#include <nghttp2/nghttp2.h>
+
+nghttp2_nv *Curl_dynhds_to_nva(struct dynhds *dynhds, size_t *pcount);
+
+#endif /* USE_NGHTTP2 */
+
+#endif /* HEADER_CURL_DYNHDS_H */
diff --git a/lib/easy.c b/lib/easy.c
index b8ac1ef8a..322d1a41b 100644
--- a/lib/easy.c
+++ b/lib/easy.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,14 +24,6 @@
#include "curl_setup.h"
-/*
- * See comment in curl_memory.h for the explanation of this sanity check.
- */
-
-#ifdef CURLX_NO_MEMORY_CALLBACKS
-#error "libcurl shall not ever be built with CURLX_NO_MEMORY_CALLBACKS defined"
-#endif
-
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
@@ -65,13 +57,14 @@
#include "easyif.h"
#include "multiif.h"
#include "select.h"
+#include "cfilters.h"
#include "sendf.h" /* for failf function prototype */
#include "connect.h" /* for Curl_getconnectinfo */
#include "slist.h"
#include "mime.h"
#include "amigaos.h"
+#include "macos.h"
#include "warnless.h"
-#include "multiif.h"
#include "sigpipe.h"
#include "vssh/ssh.h"
#include "setopt.h"
@@ -91,7 +84,7 @@
/* true globals -- for curl_global_init() and curl_global_cleanup() */
static unsigned int initialized;
-static long init_flags;
+static long easy_init_flags;
#ifdef GLOBAL_INIT_IS_THREADSAFE
@@ -114,12 +107,12 @@ static curl_simple_lock s_lock = CURL_SIMPLE_LOCK_INIT;
#if defined(_WIN32_WCE)
#define system_strdup _strdup
#elif !defined(HAVE_STRDUP)
-#define system_strdup curlx_strdup
+#define system_strdup Curl_strdup
#else
#define system_strdup strdup
#endif
-#if defined(_MSC_VER) && defined(_DLL) && !defined(__POCC__)
+#if defined(_MSC_VER) && defined(_DLL)
# pragma warning(disable:4232) /* MSVC extension, dllimport identity */
#endif
@@ -132,11 +125,11 @@ curl_free_callback Curl_cfree = (curl_free_callback)free;
curl_realloc_callback Curl_crealloc = (curl_realloc_callback)realloc;
curl_strdup_callback Curl_cstrdup = (curl_strdup_callback)system_strdup;
curl_calloc_callback Curl_ccalloc = (curl_calloc_callback)calloc;
-#if defined(WIN32) && defined(UNICODE)
+#if defined(_WIN32) && defined(UNICODE)
curl_wcsdup_callback Curl_cwcsdup = Curl_wcsdup;
#endif
-#if defined(_MSC_VER) && defined(_DLL) && !defined(__POCC__)
+#if defined(_MSC_VER) && defined(_DLL)
# pragma warning(default:4232) /* MSVC extension, dllimport identity */
#endif
@@ -160,49 +153,47 @@ static CURLcode global_init(long flags, bool memoryfuncs)
Curl_crealloc = (curl_realloc_callback)realloc;
Curl_cstrdup = (curl_strdup_callback)system_strdup;
Curl_ccalloc = (curl_calloc_callback)calloc;
-#if defined(WIN32) && defined(UNICODE)
+#if defined(_WIN32) && defined(UNICODE)
Curl_cwcsdup = (curl_wcsdup_callback)_wcsdup;
#endif
}
+ if(Curl_trc_init()) {
+ DEBUGF(fprintf(stderr, "Error: Curl_trc_init failed\n"));
+ goto fail;
+ }
+
if(!Curl_ssl_init()) {
DEBUGF(fprintf(stderr, "Error: Curl_ssl_init failed\n"));
goto fail;
}
-#ifdef WIN32
if(Curl_win32_init(flags)) {
DEBUGF(fprintf(stderr, "Error: win32_init failed\n"));
goto fail;
}
-#endif
-#ifdef __AMIGA__
if(Curl_amiga_init()) {
DEBUGF(fprintf(stderr, "Error: Curl_amiga_init failed\n"));
goto fail;
}
-#endif
+
+ if(Curl_macos_init()) {
+ DEBUGF(fprintf(stderr, "Error: Curl_macos_init failed\n"));
+ goto fail;
+ }
if(Curl_resolver_global_init()) {
DEBUGF(fprintf(stderr, "Error: resolver_global_init failed\n"));
goto fail;
}
-#if defined(USE_SSH)
if(Curl_ssh_init()) {
+ DEBUGF(fprintf(stderr, "Error: Curl_ssh_init failed\n"));
goto fail;
}
-#endif
-
-#ifdef USE_WOLFSSH
- if(WS_SUCCESS != wolfSSH_Init()) {
- DEBUGF(fprintf(stderr, "Error: wolfSSH_Init failed\n"));
- return CURLE_FAILED_INIT;
- }
-#endif
- init_flags = flags;
+ easy_init_flags = flags;
#ifdef DEBUGBUILD
if(getenv("CURL_GLOBAL_INIT"))
@@ -212,7 +203,7 @@ static CURLcode global_init(long flags, bool memoryfuncs)
return CURLE_OK;
- fail:
+fail:
initialized--; /* undo the increase */
return CURLE_FAILED_INIT;
}
@@ -277,7 +268,7 @@ CURLcode curl_global_init_mem(long flags, curl_malloc_callback m,
/**
* curl_global_cleanup() globally cleanups curl, uses the value of
- * "init_flags" to determine what needs to be cleaned up and what doesn't.
+ * "easy_init_flags" to determine what needs to be cleaned up and what doesn't.
*/
void curl_global_cleanup(void)
{
@@ -296,24 +287,41 @@ void curl_global_cleanup(void)
Curl_ssl_cleanup();
Curl_resolver_global_cleanup();
-#ifdef WIN32
- Curl_win32_cleanup(init_flags);
+#ifdef _WIN32
+ Curl_win32_cleanup(easy_init_flags);
#endif
Curl_amiga_cleanup();
Curl_ssh_cleanup();
-#ifdef USE_WOLFSSH
- (void)wolfSSH_Cleanup();
-#endif
#ifdef DEBUGBUILD
free(leakpointer);
#endif
- init_flags = 0;
+ easy_init_flags = 0;
+
+ global_init_unlock();
+}
+
+/**
+ * curl_global_trace() globally initializes curl logging.
+ */
+CURLcode curl_global_trace(const char *config)
+{
+#ifndef CURL_DISABLE_VERBOSE_STRINGS
+ CURLcode result;
+ global_init_lock();
+
+ result = Curl_trc_opt(config);
global_init_unlock();
+
+ return result;
+#else
+ (void)config;
+ return CURLE_OK;
+#endif
}
/*
@@ -696,7 +704,7 @@ static CURLcode easy_transfer(struct Curl_multi *multi)
*
* REALITY: it can't just create and destroy the multi handle that easily. It
* needs to keep it around since if this easy handle is used again by this
- * function, the same multi handle must be re-used so that the same pools and
+ * function, the same multi handle must be reused so that the same pools and
* caches can be used.
*
* DEBUG: if 'events' is set TRUE, this function will use a replacement engine
@@ -736,7 +744,7 @@ static CURLcode easy_perform(struct Curl_easy *data, bool events)
return CURLE_RECURSIVE_API_CALL;
/* Copy the MAXCONNECTS option to the multi handle */
- curl_multi_setopt(multi, CURLMOPT_MAXCONNECTS, data->set.maxconnects);
+ curl_multi_setopt(multi, CURLMOPT_MAXCONNECTS, (long)data->set.maxconnects);
mcode = curl_multi_add_handle(multi, data);
if(mcode) {
@@ -790,14 +798,12 @@ CURLcode curl_easy_perform_ev(struct Curl_easy *data)
*/
void curl_easy_cleanup(struct Curl_easy *data)
{
- SIGPIPE_VARIABLE(pipe_st);
-
- if(!data)
- return;
-
- sigpipe_ignore(data, &pipe_st);
- Curl_close(&data);
- sigpipe_restore(&pipe_st);
+ if(GOOD_EASY_HANDLE(data)) {
+ SIGPIPE_VARIABLE(pipe_st);
+ sigpipe_ignore(data, &pipe_st);
+ Curl_close(&data);
+ sigpipe_restore(&pipe_st);
+ }
}
/*
@@ -829,10 +835,12 @@ static CURLcode dupset(struct Curl_easy *dst, struct Curl_easy *src)
/* Copy src->set into dst->set first, then deal with the strings
afterwards */
dst->set = src->set;
- Curl_mime_initpart(&dst->set.mimepost, dst);
+ Curl_mime_initpart(&dst->set.mimepost);
- /* clear all string pointers first */
+ /* clear all dest string and blob pointers first, in case we error out
+ mid-function */
memset(dst->set.str, 0, STRING_LAST * sizeof(char *));
+ memset(dst->set.blobs, 0, BLOB_LAST * sizeof(struct curl_blob *));
/* duplicate all strings */
for(i = (enum dupstring)0; i< STRING_LASTZEROTERMINATED; i++) {
@@ -841,8 +849,6 @@ static CURLcode dupset(struct Curl_easy *dst, struct Curl_easy *src)
return result;
}
- /* clear all blob pointers first */
- memset(dst->set.blobs, 0, BLOB_LAST * sizeof(struct curl_blob *));
/* duplicate all blobs */
for(j = (enum dupblob)0; j < BLOB_LAST; j++) {
result = Curl_setblobopt(&dst->set.blobs[j], src->set.blobs[j]);
@@ -852,10 +858,13 @@ static CURLcode dupset(struct Curl_easy *dst, struct Curl_easy *src)
/* duplicate memory areas pointed to */
i = STRING_COPYPOSTFIELDS;
- if(src->set.postfieldsize && src->set.str[i]) {
- /* postfieldsize is curl_off_t, Curl_memdup() takes a size_t ... */
- dst->set.str[i] = Curl_memdup(src->set.str[i],
- curlx_sotouz(src->set.postfieldsize));
+ if(src->set.str[i]) {
+ if(src->set.postfieldsize == -1)
+ dst->set.str[i] = strdup(src->set.str[i]);
+ else
+ /* postfieldsize is curl_off_t, Curl_memdup() takes a size_t ... */
+ dst->set.str[i] = Curl_memdup(src->set.str[i],
+ curlx_sotouz(src->set.postfieldsize));
if(!dst->set.str[i])
return CURLE_OUT_OF_MEMORY;
/* point to the new copy */
@@ -863,7 +872,7 @@ static CURLcode dupset(struct Curl_easy *dst, struct Curl_easy *src)
}
/* Duplicate mime data. */
- result = Curl_mime_duppart(&dst->set.mimepost, &src->set.mimepost);
+ result = Curl_mime_duppart(dst, &dst->set.mimepost, &src->set.mimepost);
if(src->set.resolve)
dst->state.resolve = dst->set.resolve;
@@ -898,26 +907,25 @@ struct Curl_easy *curl_easy_duphandle(struct Curl_easy *data)
/* the connection cache is setup on demand */
outcurl->state.conn_cache = NULL;
outcurl->state.lastconnect_id = -1;
+ outcurl->state.recent_conn_id = -1;
+ outcurl->id = -1;
outcurl->progress.flags = data->progress.flags;
outcurl->progress.callback = data->progress.callback;
#ifndef CURL_DISABLE_COOKIES
- if(data->cookies) {
+ outcurl->state.cookielist = NULL;
+ if(data->cookies && data->state.cookie_engine) {
/* If cookies are enabled in the parent handle, we enable them
in the clone as well! */
- outcurl->cookies = Curl_cookie_init(data,
- data->cookies->filename,
- outcurl->cookies,
+ outcurl->cookies = Curl_cookie_init(outcurl, NULL, outcurl->cookies,
data->set.cookiesession);
if(!outcurl->cookies)
goto fail;
}
- /* duplicate all values in 'change' */
if(data->state.cookielist) {
- outcurl->state.cookielist =
- Curl_slist_duplicate(data->state.cookielist);
+ outcurl->state.cookielist = Curl_slist_duplicate(data->state.cookielist);
if(!outcurl->state.cookielist)
goto fail;
}
@@ -964,33 +972,6 @@ struct Curl_easy *curl_easy_duphandle(struct Curl_easy *data)
(void)Curl_hsts_loadcb(outcurl, outcurl->hsts);
}
#endif
- /* Clone the resolver handle, if present, for the new handle */
- if(Curl_resolver_duphandle(outcurl,
- &outcurl->state.async.resolver,
- data->state.async.resolver))
- goto fail;
-
-#ifdef USE_ARES
- {
- CURLcode rc;
-
- rc = Curl_set_dns_servers(outcurl, data->set.str[STRING_DNS_SERVERS]);
- if(rc && rc != CURLE_NOT_BUILT_IN)
- goto fail;
-
- rc = Curl_set_dns_interface(outcurl, data->set.str[STRING_DNS_INTERFACE]);
- if(rc && rc != CURLE_NOT_BUILT_IN)
- goto fail;
-
- rc = Curl_set_dns_local_ip4(outcurl, data->set.str[STRING_DNS_LOCAL_IP4]);
- if(rc && rc != CURLE_NOT_BUILT_IN)
- goto fail;
-
- rc = Curl_set_dns_local_ip6(outcurl, data->set.str[STRING_DNS_LOCAL_IP6]);
- if(rc && rc != CURLE_NOT_BUILT_IN)
- goto fail;
- }
-#endif /* USE_ARES */
Curl_initinfo(outcurl);
@@ -1000,17 +981,14 @@ struct Curl_easy *curl_easy_duphandle(struct Curl_easy *data)
return outcurl;
- fail:
+fail:
if(outcurl) {
#ifndef CURL_DISABLE_COOKIES
- curl_slist_free_all(outcurl->state.cookielist);
- outcurl->state.cookielist = NULL;
+ free(outcurl->cookies);
#endif
- Curl_safefree(outcurl->state.buffer);
+ free(outcurl->state.buffer);
Curl_dyn_free(&outcurl->state.headerb);
- Curl_safefree(outcurl->state.url);
- Curl_safefree(outcurl->state.referer);
Curl_altsvc_cleanup(&outcurl->asi);
Curl_hsts_cleanup(&outcurl->hsts);
Curl_freeset(outcurl);
@@ -1047,7 +1025,7 @@ void curl_easy_reset(struct Curl_easy *data)
memset(&data->state.authhost, 0, sizeof(struct auth));
memset(&data->state.authproxy, 0, sizeof(struct auth));
-#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_CRYPTO_AUTH)
+#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_DIGEST_AUTH)
Curl_http_auth_cleanup_digest(data);
#endif
}
@@ -1071,11 +1049,14 @@ CURLcode curl_easy_pause(struct Curl_easy *data, int action)
CURLcode result = CURLE_OK;
int oldstate;
int newstate;
+ bool recursive = FALSE;
if(!GOOD_EASY_HANDLE(data) || !data->conn)
/* crazy input, don't continue */
return CURLE_BAD_FUNCTION_ARGUMENT;
+ if(Curl_is_in_callback(data))
+ recursive = TRUE;
k = &data->req;
oldstate = k->keepon & (KEEP_RECV_PAUSE| KEEP_SEND_PAUSE);
@@ -1102,35 +1083,10 @@ CURLcode curl_easy_pause(struct Curl_easy *data, int action)
k->keepon = newstate;
if(!(newstate & KEEP_RECV_PAUSE)) {
- Curl_http2_stream_pause(data, FALSE);
-
- if(data->state.tempcount) {
- /* there are buffers for sending that can be delivered as the receive
- pausing is lifted! */
- unsigned int i;
- unsigned int count = data->state.tempcount;
- struct tempbuf writebuf[3]; /* there can only be three */
-
- /* copy the structs to allow for immediate re-pausing */
- for(i = 0; i < data->state.tempcount; i++) {
- writebuf[i] = data->state.tempwrite[i];
- Curl_dyn_init(&data->state.tempwrite[i].b, DYN_PAUSE_BUFFER);
- }
- data->state.tempcount = 0;
-
- for(i = 0; i < count; i++) {
- /* even if one function returns error, this loops through and frees
- all buffers */
- if(!result)
- result = Curl_client_write(data, writebuf[i].type,
- Curl_dyn_ptr(&writebuf[i].b),
- Curl_dyn_len(&writebuf[i].b));
- Curl_dyn_free(&writebuf[i].b);
- }
-
- if(result)
- return result;
- }
+ Curl_conn_ev_data_pause(data, FALSE);
+ result = Curl_client_unpause(data);
+ if(result)
+ return result;
}
#ifdef USE_HYPER
@@ -1167,6 +1123,11 @@ CURLcode curl_easy_pause(struct Curl_easy *data, int action)
corresponding socket callback, if used */
result = Curl_updatesocket(data);
+ if(recursive)
+ /* this might have called a callback recursively which might have set this
+ to false again on exit */
+ Curl_set_in_callback(data, TRUE);
+
return result;
}
@@ -1225,9 +1186,28 @@ CURLcode curl_easy_recv(struct Curl_easy *data, void *buffer, size_t buflen,
return result;
*n = (size_t)n1;
+ return CURLE_OK;
+}
+
+#ifdef USE_WEBSOCKETS
+CURLcode Curl_connect_only_attach(struct Curl_easy *data)
+{
+ curl_socket_t sfd;
+ CURLcode result;
+ struct connectdata *c = NULL;
+
+ result = easy_connection(data, &sfd, &c);
+ if(result)
+ return result;
+
+ if(!data->conn)
+ /* on first invoke, the transfer has been detached from the connection and
+ needs to be reattached */
+ Curl_attach_connection(data, c);
return CURLE_OK;
}
+#endif /* USE_WEBSOCKETS */
/*
* Sends data over the connected socket.
@@ -1295,29 +1275,34 @@ static int conn_upkeep(struct Curl_easy *data,
struct connectdata *conn,
void *param)
{
- /* Param is unused. */
- (void)param;
+ struct curltime *now = param;
- if(conn->handler->connection_check) {
- /* briefly attach the connection to this transfer for the purpose of
- checking it */
- Curl_attach_connection(data, conn);
+ if(Curl_timediff(*now, conn->keepalive) <= data->set.upkeep_interval_ms)
+ return 0;
+ /* briefly attach for action */
+ Curl_attach_connection(data, conn);
+ if(conn->handler->connection_check) {
/* Do a protocol-specific keepalive check on the connection. */
conn->handler->connection_check(data, conn, CONNCHECK_KEEPALIVE);
- /* detach the connection again */
- Curl_detach_connection(data);
}
+ else {
+ /* Do the generic action on the FIRSTSOCKE filter chain */
+ Curl_conn_keep_alive(data, conn, FIRSTSOCKET);
+ }
+ Curl_detach_connection(data);
+ conn->keepalive = *now;
return 0; /* continue iteration */
}
static CURLcode upkeep(struct conncache *conn_cache, void *data)
{
+ struct curltime now = Curl_now();
/* Loop over every connection and make connection alive. */
Curl_conncache_foreach(data,
conn_cache,
- data,
+ &now,
conn_upkeep);
return CURLE_OK;
}
diff --git a/lib/easy_lock.h b/lib/easy_lock.h
index d96e56b8d..4f6764d42 100644
--- a/lib/easy_lock.h
+++ b/lib/easy_lock.h
@@ -1,3 +1,5 @@
+#ifndef HEADER_CURL_EASY_LOCK_H
+#define HEADER_CURL_EASY_LOCK_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
@@ -5,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -29,13 +31,6 @@
#if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x600
#ifdef __MINGW32__
-#ifndef __MINGW64_VERSION_MAJOR
-#if (__MINGW32_MAJOR_VERSION < 5) || \
- (__MINGW32_MAJOR_VERSION == 5 && __MINGW32_MINOR_VERSION == 0)
-/* mingw >= 5.0.1 defines SRWLOCK, and slightly different from MS define */
-typedef PVOID SRWLOCK, *PSRWLOCK;
-#endif
-#endif
#ifndef SRWLOCK_INIT
#define SRWLOCK_INIT NULL
#endif
@@ -98,8 +93,19 @@ static inline void curl_simple_lock_unlock(curl_simple_lock *lock)
atomic_store_explicit(lock, false, memory_order_release);
}
+#elif defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)
+
+#include <pthread.h>
+
+#define curl_simple_lock pthread_mutex_t
+#define CURL_SIMPLE_LOCK_INIT PTHREAD_MUTEX_INITIALIZER
+#define curl_simple_lock_lock(m) pthread_mutex_lock(m)
+#define curl_simple_lock_unlock(m) pthread_mutex_unlock(m)
+
#else
#undef GLOBAL_INIT_IS_THREADSAFE
#endif
+
+#endif /* HEADER_CURL_EASY_LOCK_H */
diff --git a/lib/easygetopt.c b/lib/easygetopt.c
index a639bb375..2b8a521cd 100644
--- a/lib/easygetopt.c
+++ b/lib/easygetopt.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* ___|___/|_| ______|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/easyif.h b/lib/easyif.h
index 205382cd0..644895296 100644
--- a/lib/easyif.h
+++ b/lib/easyif.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -30,6 +30,10 @@
CURLcode Curl_senddata(struct Curl_easy *data, const void *buffer,
size_t buflen, ssize_t *n);
+#ifdef USE_WEBSOCKETS
+CURLcode Curl_connect_only_attach(struct Curl_easy *data);
+#endif
+
#ifdef CURLDEBUG
CURL_EXTERN CURLcode curl_easy_perform_ev(struct Curl_easy *easy);
#endif
diff --git a/lib/easyoptions.c b/lib/easyoptions.c
index e59b63af7..e69c658b0 100644
--- a/lib/easyoptions.c
+++ b/lib/easyoptions.c
@@ -1,11 +1,11 @@
/***************************************************************************
* _ _ ____ _
- * Project ___| | | | _ | |
+ * Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
- * ___|___/|_| ______|
+ * \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -42,6 +42,7 @@ struct curl_easyoption Curl_easyopts[] = {
{"CAINFO", CURLOPT_CAINFO, CURLOT_STRING, 0},
{"CAINFO_BLOB", CURLOPT_CAINFO_BLOB, CURLOT_BLOB, 0},
{"CAPATH", CURLOPT_CAPATH, CURLOT_STRING, 0},
+ {"CA_CACHE_TIMEOUT", CURLOPT_CA_CACHE_TIMEOUT, CURLOT_LONG, 0},
{"CERTINFO", CURLOPT_CERTINFO, CURLOT_LONG, 0},
{"CHUNK_BGN_FUNCTION", CURLOPT_CHUNK_BGN_FUNCTION, CURLOT_FUNCTION, 0},
{"CHUNK_DATA", CURLOPT_CHUNK_DATA, CURLOT_CBPTR, 0},
@@ -119,6 +120,7 @@ struct curl_easyoption Curl_easyopts[] = {
{"HAPPY_EYEBALLS_TIMEOUT_MS", CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS,
CURLOT_LONG, 0},
{"HAPROXYPROTOCOL", CURLOPT_HAPROXYPROTOCOL, CURLOT_LONG, 0},
+ {"HAPROXY_CLIENT_IP", CURLOPT_HAPROXY_CLIENT_IP, CURLOT_STRING, 0},
{"HEADER", CURLOPT_HEADER, CURLOT_LONG, 0},
{"HEADERDATA", CURLOPT_HEADERDATA, CURLOT_CBPTR, 0},
{"HEADERFUNCTION", CURLOPT_HEADERFUNCTION, CURLOT_FUNCTION, 0},
@@ -163,7 +165,9 @@ struct curl_easyoption Curl_easyopts[] = {
{"MAIL_AUTH", CURLOPT_MAIL_AUTH, CURLOT_STRING, 0},
{"MAIL_FROM", CURLOPT_MAIL_FROM, CURLOT_STRING, 0},
{"MAIL_RCPT", CURLOPT_MAIL_RCPT, CURLOT_SLIST, 0},
- {"MAIL_RCPT_ALLLOWFAILS", CURLOPT_MAIL_RCPT_ALLLOWFAILS, CURLOT_LONG, 0},
+ {"MAIL_RCPT_ALLLOWFAILS", CURLOPT_MAIL_RCPT_ALLOWFAILS,
+ CURLOT_LONG, CURLOT_FLAG_ALIAS},
+ {"MAIL_RCPT_ALLOWFAILS", CURLOPT_MAIL_RCPT_ALLOWFAILS, CURLOT_LONG, 0},
{"MAXAGE_CONN", CURLOPT_MAXAGE_CONN, CURLOT_LONG, 0},
{"MAXCONNECTS", CURLOPT_MAXCONNECTS, CURLOT_LONG, 0},
{"MAXFILESIZE", CURLOPT_MAXFILESIZE, CURLOT_LONG, 0},
@@ -241,6 +245,7 @@ struct curl_easyoption Curl_easyopts[] = {
CURLOT_STRING, 0},
{"PROXY_TRANSFER_MODE", CURLOPT_PROXY_TRANSFER_MODE, CURLOT_LONG, 0},
{"PUT", CURLOPT_PUT, CURLOT_LONG, 0},
+ {"QUICK_EXIT", CURLOPT_QUICK_EXIT, CURLOT_LONG, 0},
{"QUOTE", CURLOPT_QUOTE, CURLOT_SLIST, 0},
{"RANDOM_FILE", CURLOPT_RANDOM_FILE, CURLOT_STRING, 0},
{"RANGE", CURLOPT_RANGE, CURLOT_STRING, 0},
@@ -368,6 +373,6 @@ struct curl_easyoption Curl_easyopts[] = {
*/
int Curl_easyopts_check(void)
{
- return ((CURLOPT_LASTENTRY%10000) != (320 + 1));
+ return ((CURLOPT_LASTENTRY%10000) != (323 + 1));
}
#endif
diff --git a/lib/easyoptions.h b/lib/easyoptions.h
index 33f816d6b..24b4cd93e 100644
--- a/lib/easyoptions.h
+++ b/lib/easyoptions.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/escape.c b/lib/escape.c
index da7e5524f..5af00c351 100644
--- a/lib/escape.c
+++ b/lib/escape.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -38,33 +38,6 @@
#include "curl_memory.h"
#include "memdebug.h"
-/* Portable character check (remember EBCDIC). Do not use isalnum() because
- its behavior is altered by the current locale.
- See https://datatracker.ietf.org/doc/html/rfc3986#section-2.3
-*/
-bool Curl_isunreserved(unsigned char in)
-{
- switch(in) {
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- case 'a': case 'b': case 'c': case 'd': case 'e':
- case 'f': case 'g': case 'h': case 'i': case 'j':
- case 'k': case 'l': case 'm': case 'n': case 'o':
- case 'p': case 'q': case 'r': case 's': case 't':
- case 'u': case 'v': case 'w': case 'x': case 'y': case 'z':
- case 'A': case 'B': case 'C': case 'D': case 'E':
- case 'F': case 'G': case 'H': case 'I': case 'J':
- case 'K': case 'L': case 'M': case 'N': case 'O':
- case 'P': case 'Q': case 'R': case 'S': case 'T':
- case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z':
- case '-': case '.': case '_': case '~':
- return TRUE;
- default:
- break;
- }
- return FALSE;
-}
-
/* for ABI-compatibility with previous versions */
char *curl_escape(const char *string, int inlength)
{
@@ -97,24 +70,37 @@ char *curl_easy_escape(struct Curl_easy *data, const char *string,
return strdup("");
while(length--) {
- unsigned char in = *string; /* we need to treat the characters unsigned */
+ unsigned char in = *string++; /* treat the characters unsigned */
- if(Curl_isunreserved(in)) {
+ if(ISUNRESERVED(in)) {
/* append this */
if(Curl_dyn_addn(&d, &in, 1))
return NULL;
}
else {
/* encode it */
- if(Curl_dyn_addf(&d, "%%%02X", in))
+ const char hex[] = "0123456789ABCDEF";
+ char out[3]={'%'};
+ out[1] = hex[in>>4];
+ out[2] = hex[in & 0xf];
+ if(Curl_dyn_addn(&d, out, 3))
return NULL;
}
- string++;
}
return Curl_dyn_ptr(&d);
}
+static const unsigned char hextable[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, /* 0x30 - 0x3f */
+ 0, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 - 0x4f */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x50 - 0x5f */
+ 0, 10, 11, 12, 13, 14, 15 /* 0x60 - 0x66 */
+};
+
+/* the input is a single hex digit */
+#define onehex2dec(x) hextable[x - '0']
+
/*
* Curl_urldecode() URL decodes the given string.
*
@@ -137,54 +123,47 @@ CURLcode Curl_urldecode(const char *string, size_t length,
{
size_t alloc;
char *ns;
- size_t strindex = 0;
- unsigned long hex;
DEBUGASSERT(string);
DEBUGASSERT(ctrl >= REJECT_NADA); /* crash on TRUE/FALSE */
- alloc = (length?length:strlen(string)) + 1;
- ns = malloc(alloc);
+ alloc = (length?length:strlen(string));
+ ns = malloc(alloc + 1);
if(!ns)
return CURLE_OUT_OF_MEMORY;
- while(--alloc > 0) {
+ /* store output string */
+ *ostring = ns;
+
+ while(alloc) {
unsigned char in = *string;
if(('%' == in) && (alloc > 2) &&
ISXDIGIT(string[1]) && ISXDIGIT(string[2])) {
/* this is two hexadecimal digits following a '%' */
- char hexstr[3];
- char *ptr;
- hexstr[0] = string[1];
- hexstr[1] = string[2];
- hexstr[2] = 0;
+ in = (unsigned char)(onehex2dec(string[1]) << 4) | onehex2dec(string[2]);
- hex = strtoul(hexstr, &ptr, 16);
-
- in = curlx_ultouc(hex); /* this long is never bigger than 255 anyway */
-
- string += 2;
- alloc -= 2;
+ string += 3;
+ alloc -= 3;
+ }
+ else {
+ string++;
+ alloc--;
}
if(((ctrl == REJECT_CTRL) && (in < 0x20)) ||
((ctrl == REJECT_ZERO) && (in == 0))) {
- free(ns);
+ Curl_safefree(*ostring);
return CURLE_URL_MALFORMAT;
}
- ns[strindex++] = in;
- string++;
+ *ns++ = in;
}
- ns[strindex] = 0; /* terminate it */
+ *ns = 0; /* terminate it */
if(olen)
/* store output size */
- *olen = strindex;
-
- /* store output string */
- *ostring = ns;
+ *olen = ns - *ostring;
return CURLE_OK;
}
@@ -202,7 +181,7 @@ char *curl_easy_unescape(struct Curl_easy *data, const char *string,
char *str = NULL;
(void)data;
if(length >= 0) {
- size_t inputlen = length;
+ size_t inputlen = (size_t)length;
size_t outputlen;
CURLcode res = Curl_urldecode(string, inputlen, &str, &outputlen,
REJECT_NADA);
@@ -227,3 +206,29 @@ void curl_free(void *p)
{
free(p);
}
+
+/*
+ * Curl_hexencode()
+ *
+ * Converts binary input to lowercase hex-encoded ASCII output.
+ * Null-terminated.
+ */
+void Curl_hexencode(const unsigned char *src, size_t len, /* input length */
+ unsigned char *out, size_t olen) /* output buffer size */
+{
+ const char *hex = "0123456789abcdef";
+ DEBUGASSERT(src && len && (olen >= 3));
+ if(src && len && (olen >= 3)) {
+ while(len-- && (olen >= 3)) {
+ /* clang-tidy warns on this line without this comment: */
+ /* NOLINTNEXTLINE(clang-analyzer-core.UndefinedBinaryOperatorResult) */
+ *out++ = hex[(*src & 0xF0)>>4];
+ *out++ = hex[*src & 0x0F];
+ ++src;
+ olen -= 2;
+ }
+ *out = 0;
+ }
+ else if(olen)
+ *out = 0;
+}
diff --git a/lib/escape.h b/lib/escape.h
index 61d4611bf..690e41787 100644
--- a/lib/escape.h
+++ b/lib/escape.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -26,7 +26,7 @@
/* Escape and unescape URL encoding in strings. The functions return a new
* allocated string or NULL if an error occurred. */
-bool Curl_isunreserved(unsigned char in);
+#include "curl_ctype.h"
enum urlreject {
REJECT_NADA = 2,
@@ -38,4 +38,7 @@ CURLcode Curl_urldecode(const char *string, size_t length,
char **ostring, size_t *olen,
enum urlreject ctrl);
+void Curl_hexencode(const unsigned char *src, size_t len, /* input length */
+ unsigned char *out, size_t olen); /* output buffer size */
+
#endif /* HEADER_CURL_ESCAPE_H */
diff --git a/lib/file.c b/lib/file.c
index d82d57b46..c98507137 100644
--- a/lib/file.c
+++ b/lib/file.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -69,7 +69,7 @@
#include "curl_memory.h"
#include "memdebug.h"
-#if defined(WIN32) || defined(MSDOS) || defined(__EMX__)
+#if defined(_WIN32) || defined(MSDOS) || defined(__EMX__)
#define DOS_FILESYSTEM 1
#elif defined(__amigaos4__)
#define AMIGA_FILESYSTEM 1
@@ -150,9 +150,19 @@ static CURLcode file_connect(struct Curl_easy *data, bool *done)
char *actual_path;
#endif
size_t real_path_len;
+ CURLcode result;
+
+ if(file->path) {
+ /* already connected.
+ * the handler->connect_it() is normally only called once, but
+ * FILE does a special check on setting up the connection which
+ * calls this explicitly. */
+ *done = TRUE;
+ return CURLE_OK;
+ }
- CURLcode result = Curl_urldecode(data->state.up.path, 0, &real_path,
- &real_path_len, REJECT_ZERO);
+ result = Curl_urldecode(data->state.up.path, 0, &real_path,
+ &real_path_len, REJECT_ZERO);
if(result)
return result;
@@ -226,10 +236,11 @@ static CURLcode file_connect(struct Curl_easy *data, bool *done)
file->path = real_path;
#endif
#endif
+ Curl_safefree(file->freepath);
file->freepath = real_path; /* free this when done */
file->fd = fd;
- if(!data->set.upload && (fd == -1)) {
+ if(!data->state.upload && (fd == -1)) {
failf(data, "Couldn't open file %s", data->state.up.path);
file_done(data, CURLE_FILE_COULDNT_READ_FILE, FALSE);
return CURLE_FILE_COULDNT_READ_FILE;
@@ -329,7 +340,7 @@ static CURLcode file_upload(struct Curl_easy *data)
while(!result) {
size_t nread;
- size_t nwrite;
+ ssize_t nwrite;
size_t readcount;
result = Curl_fillreadbuffer(data, data->set.buffer_size, &readcount);
if(result)
@@ -340,7 +351,7 @@ static CURLcode file_upload(struct Curl_easy *data)
nread = readcount;
- /*skip bytes before resume point*/
+ /* skip bytes before resume point */
if(data->state.resume_from) {
if((curl_off_t)nread <= data->state.resume_from) {
data->state.resume_from -= nread;
@@ -358,7 +369,7 @@ static CURLcode file_upload(struct Curl_easy *data)
/* write the data to the target */
nwrite = write(fd, buf2, nread);
- if(nwrite != nread) {
+ if((size_t)nwrite != nread) {
result = CURLE_SEND_ERROR;
break;
}
@@ -403,7 +414,6 @@ static CURLcode file_do(struct Curl_easy *data, bool *done)
bool size_known;
bool fstated = FALSE;
char *buf = data->state.buffer;
- curl_off_t bytecount = 0;
int fd;
struct FILEPROTO *file;
@@ -411,7 +421,7 @@ static CURLcode file_do(struct Curl_easy *data, bool *done)
Curl_pgrsStartNow(data);
- if(data->set.upload)
+ if(data->state.upload)
return file_upload(data);
file = data->req.p.file;
@@ -471,13 +481,13 @@ static CURLcode file_do(struct Curl_easy *data, bool *done)
tm->tm_hour,
tm->tm_min,
tm->tm_sec,
- data->set.opt_no_body ? "": "\r\n");
+ data->req.no_body ? "": "\r\n");
result = Curl_client_write(data, CLIENTWRITE_HEADER, header, headerlen);
if(result)
return result;
/* set the file size to make it available post transfer */
Curl_pgrsSetDownloadSize(data, expected_size);
- if(data->set.opt_no_body)
+ if(data->req.no_body)
return result;
}
@@ -552,7 +562,6 @@ static CURLcode file_do(struct Curl_easy *data, bool *done)
if(nread <= 0 || (size_known && (expected_size == 0)))
break;
- bytecount += nread;
if(size_known)
expected_size -= nread;
@@ -560,8 +569,6 @@ static CURLcode file_do(struct Curl_easy *data, bool *done)
if(result)
return result;
- Curl_pgrsSetDownloadCounter(data, bytecount);
-
if(Curl_pgrsUpdate(data))
result = CURLE_ABORTED_BY_CALLBACK;
else
diff --git a/lib/file.h b/lib/file.h
index 826d45380..456552559 100644
--- a/lib/file.h
+++ b/lib/file.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/fileinfo.c b/lib/fileinfo.c
index 7bbf24bde..2be3b3239 100644
--- a/lib/fileinfo.c
+++ b/lib/fileinfo.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2010 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -40,7 +40,7 @@ void Curl_fileinfo_cleanup(struct fileinfo *finfo)
if(!finfo)
return;
- Curl_safefree(finfo->info.b_data);
+ Curl_dyn_free(&finfo->buf);
free(finfo);
}
#endif
diff --git a/lib/fileinfo.h b/lib/fileinfo.h
index 5bad718cc..ce009da06 100644
--- a/lib/fileinfo.h
+++ b/lib/fileinfo.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2010 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -26,10 +26,12 @@
#include <curl/curl.h>
#include "llist.h"
+#include "dynbuf.h"
struct fileinfo {
struct curl_fileinfo info;
struct Curl_llist_element list;
+ struct dynbuf buf;
};
struct fileinfo *Curl_fileinfo_alloc(void);
diff --git a/lib/fopen.c b/lib/fopen.c
index ad3691ba9..851279fe1 100644
--- a/lib/fopen.c
+++ b/lib/fopen.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -40,6 +40,51 @@
#include "memdebug.h"
/*
+ The dirslash() function breaks a null-terminated pathname string into
+ directory and filename components then returns the directory component up
+ to, *AND INCLUDING*, a final '/'. If there is no directory in the path,
+ this instead returns a "" string.
+
+ This function returns a pointer to malloc'ed memory.
+
+ The input path to this function is expected to have a file name part.
+*/
+
+#ifdef _WIN32
+#define PATHSEP "\\"
+#define IS_SEP(x) (((x) == '/') || ((x) == '\\'))
+#elif defined(MSDOS) || defined(__EMX__) || defined(OS2)
+#define PATHSEP "\\"
+#define IS_SEP(x) ((x) == '\\')
+#else
+#define PATHSEP "/"
+#define IS_SEP(x) ((x) == '/')
+#endif
+
+static char *dirslash(const char *path)
+{
+ size_t n;
+ struct dynbuf out;
+ DEBUGASSERT(path);
+ Curl_dyn_init(&out, CURL_MAX_INPUT_LENGTH);
+ n = strlen(path);
+ if(n) {
+ /* find the rightmost path separator, if any */
+ while(n && !IS_SEP(path[n-1]))
+ --n;
+ /* skip over all the path separators, if any */
+ while(n && IS_SEP(path[n-1]))
+ --n;
+ }
+ if(Curl_dyn_addn(&out, path, n))
+ return NULL;
+ /* if there was a directory, append a single trailing slash */
+ if(n && Curl_dyn_addn(&out, PATHSEP, 1))
+ return NULL;
+ return Curl_dyn_ptr(&out);
+}
+
+/*
* Curl_fopen() opens a file for writing with a temp name, to be renamed
* to the final name when completed. If there is an existing file using this
* name at the time of the open, this function will clone the mode from that
@@ -50,47 +95,44 @@ CURLcode Curl_fopen(struct Curl_easy *data, const char *filename,
FILE **fh, char **tempname)
{
CURLcode result = CURLE_WRITE_ERROR;
- unsigned char randsuffix[9];
+ unsigned char randbuf[41];
char *tempstore = NULL;
struct_stat sb;
int fd = -1;
+ char *dir = NULL;
*tempname = NULL;
- if(stat(filename, &sb) == -1 || !S_ISREG(sb.st_mode)) {
- /* a non-regular file, fallback to direct fopen() */
- *fh = fopen(filename, FOPEN_WRITETEXT);
- if(*fh)
- return CURLE_OK;
+ *fh = fopen(filename, FOPEN_WRITETEXT);
+ if(!*fh)
goto fail;
+ if(fstat(fileno(*fh), &sb) == -1 || !S_ISREG(sb.st_mode)) {
+ return CURLE_OK;
}
+ fclose(*fh);
+ *fh = NULL;
- result = Curl_rand_hex(data, randsuffix, sizeof(randsuffix));
+ result = Curl_rand_alnum(data, randbuf, sizeof(randbuf));
if(result)
goto fail;
- tempstore = aprintf("%s.%s.tmp", filename, randsuffix);
+ dir = dirslash(filename);
+ if(dir) {
+ /* The temp file name should not end up too long for the target file
+ system */
+ tempstore = aprintf("%s%s.tmp", dir, randbuf);
+ free(dir);
+ }
+
if(!tempstore) {
result = CURLE_OUT_OF_MEMORY;
goto fail;
}
result = CURLE_WRITE_ERROR;
- fd = open(tempstore, O_WRONLY | O_CREAT | O_EXCL, 0600);
+ fd = open(tempstore, O_WRONLY | O_CREAT | O_EXCL, 0600|sb.st_mode);
if(fd == -1)
goto fail;
-#ifdef HAVE_FCHMOD
- {
- struct_stat nsb;
- if((fstat(fd, &nsb) != -1) &&
- (nsb.st_uid == sb.st_uid) && (nsb.st_gid == sb.st_gid)) {
- /* if the user and group are the same, clone the original mode */
- if(fchmod(fd, sb.st_mode) == -1)
- goto fail;
- }
- }
-#endif
-
*fh = fdopen(fd, FOPEN_WRITETEXT);
if(!*fh)
goto fail;
@@ -105,8 +147,6 @@ fail:
}
free(tempstore);
-
- *tempname = NULL;
return result;
}
diff --git a/lib/fopen.h b/lib/fopen.h
index 289e55f2a..e3a919d07 100644
--- a/lib/fopen.h
+++ b/lib/fopen.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/formdata.c b/lib/formdata.c
index 46542b432..05dc9b53d 100644
--- a/lib/formdata.c
+++ b/lib/formdata.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -27,7 +27,7 @@
#include <curl/curl.h>
#include "formdata.h"
-#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_MIME)
+#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_FORM_API)
#if defined(HAVE_LIBGEN_H) && defined(HAVE_BASENAME)
#include <libgen.h>
@@ -59,7 +59,7 @@
*
* AddHttpPost()
*
- * Adds a HttpPost structure to the list, if parent_post is given becomes
+ * Adds an HttpPost structure to the list, if parent_post is given becomes
* a subpost of parent_post instead of a direct list element.
*
* Returns newly allocated HttpPost on success and NULL if malloc failed.
@@ -135,15 +135,13 @@ static struct FormInfo *AddFormInfo(char *value,
{
struct FormInfo *form_info;
form_info = calloc(1, sizeof(struct FormInfo));
- if(form_info) {
- if(value)
- form_info->value = value;
- if(contenttype)
- form_info->contenttype = contenttype;
- form_info->flags = HTTPPOST_FILENAME;
- }
- else
+ if(!form_info)
return NULL;
+ if(value)
+ form_info->value = value;
+ if(contenttype)
+ form_info->contenttype = contenttype;
+ form_info->flags = HTTPPOST_FILENAME;
if(parent_form_info) {
/* now, point our 'more' to the original 'more' */
@@ -199,7 +197,7 @@ static struct FormInfo *AddFormInfo(char *value,
* CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed
* CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used
* CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or error)
- * CURL_FORMADD_MEMORY if a HttpPost struct cannot be allocated
+ * CURL_FORMADD_MEMORY if an HttpPost struct cannot be allocated
* CURL_FORMADD_MEMORY if some allocation for string copying failed.
* CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array
*
@@ -605,9 +603,9 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost,
app passed in a bad combo, so we better check for that first. */
if(form->name) {
/* copy name (without strdup; possibly not null-terminated) */
- form->name = Curl_memdup(form->name, form->namelength?
- form->namelength:
- strlen(form->name) + 1);
+ form->name = Curl_strndup(form->name, form->namelength?
+ form->namelength:
+ strlen(form->name));
}
if(!form->name) {
return_value = CURL_FORMADD_MEMORY;
@@ -717,10 +715,10 @@ int curl_formget(struct curl_httppost *form, void *arg,
CURLcode result;
curl_mimepart toppart;
- Curl_mime_initpart(&toppart, NULL); /* default form is empty */
+ Curl_mime_initpart(&toppart); /* default form is empty */
result = Curl_getformdata(NULL, &toppart, form, NULL);
if(!result)
- result = Curl_mime_prepare_headers(&toppart, "multipart/form-data",
+ result = Curl_mime_prepare_headers(NULL, &toppart, "multipart/form-data",
NULL, MIMESTRATEGY_FORM);
while(!result) {
@@ -791,6 +789,20 @@ static CURLcode setname(curl_mimepart *part, const char *name, size_t len)
return res;
}
+/* wrap call to fseeko so it matches the calling convention of callback */
+static int fseeko_wrapper(void *stream, curl_off_t offset, int whence)
+{
+#if defined(HAVE_FSEEKO) && defined(HAVE_DECL_FSEEKO)
+ return fseeko(stream, (off_t)offset, whence);
+#elif defined(HAVE__FSEEKI64)
+ return _fseeki64(stream, (__int64)offset, whence);
+#else
+ if(offset > LONG_MAX)
+ return -1;
+ return fseek(stream, (long)offset, whence);
+#endif
+}
+
/*
* Curl_getformdata() converts a linked list of "meta data" into a mime
* structure. The input list is in 'post', while the output is stored in
@@ -876,8 +888,7 @@ CURLcode Curl_getformdata(struct Curl_easy *data,
compatibility: use of "-" pseudo file name should be avoided. */
result = curl_mime_data_cb(part, (curl_off_t) -1,
(curl_read_callback) fread,
- CURLX_FUNCTION_CAST(curl_seek_callback,
- fseek),
+ fseeko_wrapper,
NULL, (void *) stdin);
}
else
@@ -943,7 +954,7 @@ int curl_formget(struct curl_httppost *form, void *arg,
void curl_formfree(struct curl_httppost *form)
{
(void)form;
- /* does nothing HTTP is disabled */
+ /* Nothing to do. */
}
#endif /* if disabled */
diff --git a/lib/formdata.h b/lib/formdata.h
index c6c6397cd..af466249f 100644
--- a/lib/formdata.h
+++ b/lib/formdata.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -26,7 +26,7 @@
#include "curl_setup.h"
-#ifndef CURL_DISABLE_MIME
+#ifndef CURL_DISABLE_FORM_API
/* used by FormAdd for temporary storage */
struct FormInfo {
@@ -53,10 +53,7 @@ CURLcode Curl_getformdata(struct Curl_easy *data,
curl_mimepart *,
struct curl_httppost *post,
curl_read_callback fread_func);
-#else
-/* disabled */
-#define Curl_getformdata(a,b,c,d) CURLE_NOT_BUILT_IN
-#endif
+#endif /* CURL_DISABLE_FORM_API */
#endif /* HEADER_CURL_FORMDATA_H */
diff --git a/lib/ftp.c b/lib/ftp.c
index f1a25b23d..a8dcedf53 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -32,9 +32,6 @@
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
-#ifdef HAVE_UTSNAME_H
-#include <sys/utsname.h>
-#endif
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
@@ -43,11 +40,6 @@
#include <inet.h>
#endif
-#if (defined(NETWARE) && defined(__NOVELL_LIBC__))
-#undef in_addr_t
-#define in_addr_t unsigned long
-#endif
-
#include <curl/curl.h>
#include "urldata.h"
#include "sendf.h"
@@ -65,6 +57,8 @@
#include "strtoofft.h"
#include "strcase.h"
#include "vtls/vtls.h"
+#include "cfilters.h"
+#include "cf-socket.h"
#include "connect.h"
#include "strerror.h"
#include "inet_ntop.h"
@@ -74,7 +68,6 @@
#include "sockaddr.h" /* required for Curl_sockaddr_storage */
#include "multiif.h"
#include "url.h"
-#include "strcase.h"
#include "speedcheck.h"
#include "warnless.h"
#include "http_proxy.h"
@@ -97,14 +90,14 @@
/* Local API functions */
#ifndef DEBUGBUILD
-static void _state(struct Curl_easy *data,
- ftpstate newstate);
-#define state(x,y) _state(x,y)
+static void _ftp_state(struct Curl_easy *data,
+ ftpstate newstate);
+#define ftp_state(x,y) _ftp_state(x,y)
#else
-static void _state(struct Curl_easy *data,
- ftpstate newstate,
- int lineno);
-#define state(x,y) _state(x,y,__LINE__)
+static void _ftp_state(struct Curl_easy *data,
+ ftpstate newstate,
+ int lineno);
+#define ftp_state(x,y) _ftp_state(x,y,__LINE__)
#endif
static CURLcode ftp_sendquote(struct Curl_easy *data,
@@ -219,14 +212,8 @@ const struct Curl_handler Curl_handler_ftps = {
static void close_secondarysocket(struct Curl_easy *data,
struct connectdata *conn)
{
- if(CURL_SOCKET_BAD != conn->sock[SECONDARYSOCKET]) {
- Curl_closesocket(data, conn, conn->sock[SECONDARYSOCKET]);
- conn->sock[SECONDARYSOCKET] = CURL_SOCKET_BAD;
- }
- conn->bits.tcpconnect[SECONDARYSOCKET] = FALSE;
-#ifndef CURL_DISABLE_PROXY
- conn->bits.proxy_ssl_connected[SECONDARYSOCKET] = FALSE;
-#endif
+ Curl_conn_close(data, SECONDARYSOCKET);
+ Curl_conn_cf_discard_all(data, conn, SECONDARYSOCKET);
}
/*
@@ -278,13 +265,13 @@ static CURLcode AcceptServerConnect(struct Curl_easy *data)
struct sockaddr_in add;
#endif
curl_socklen_t size = (curl_socklen_t) sizeof(add);
+ CURLcode result;
if(0 == getsockname(sock, (struct sockaddr *) &add, &size)) {
size = sizeof(add);
s = accept(sock, (struct sockaddr *) &add, &size);
}
- Curl_closesocket(data, conn, sock); /* close the first socket */
if(CURL_SOCKET_BAD == s) {
failf(data, "Error accept()ing server connect");
@@ -295,9 +282,11 @@ static CURLcode AcceptServerConnect(struct Curl_easy *data)
not needing DO_MORE anymore */
conn->bits.do_more = FALSE;
- conn->sock[SECONDARYSOCKET] = s;
(void)curlx_nonblock(s, TRUE); /* enable non-blocking */
- conn->bits.sock_accepted = TRUE;
+ /* Replace any filter on SECONDARY with one listening on this socket */
+ result = Curl_conn_tcp_accepted_set(data, conn, SECONDARYSOCKET, &s);
+ if(result)
+ return result;
if(data->set.fsockopt) {
int error = 0;
@@ -441,15 +430,18 @@ static CURLcode InitiateTransfer(struct Curl_easy *data)
{
CURLcode result = CURLE_OK;
struct connectdata *conn = data->conn;
+ bool connected;
- if(conn->bits.ftp_use_data_ssl) {
- /* since we only have a plaintext TCP connection here, we must now
- * do the TLS stuff */
- infof(data, "Doing the SSL/TLS handshake on the data stream");
- result = Curl_ssl_connect(data, conn, SECONDARYSOCKET);
+ DEBUGF(infof(data, "ftp InitiateTransfer()"));
+ if(conn->bits.ftp_use_data_ssl && data->set.ftp_use_port &&
+ !Curl_conn_is_ssl(conn, SECONDARYSOCKET)) {
+ result = Curl_ssl_cfilter_add(data, conn, SECONDARYSOCKET);
if(result)
return result;
}
+ result = Curl_conn_connect(data, SECONDARYSOCKET, TRUE, &connected);
+ if(result || !connected)
+ return result;
if(conn->proto.ftpc.state_saved == FTP_STOR) {
/* When we know we're uploading a specified file, we can get the file
@@ -468,7 +460,7 @@ static CURLcode InitiateTransfer(struct Curl_easy *data)
}
conn->proto.ftpc.pp.pending_resp = TRUE; /* expect server response */
- state(data, FTP_STOP);
+ ftp_state(data, FTP_STOP);
return CURLE_OK;
}
@@ -497,22 +489,23 @@ static CURLcode AllowServerConnect(struct Curl_easy *data, bool *connected)
if(timeout_ms < 0) {
/* if a timeout was already reached, bail out */
failf(data, "Accept timeout occurred while waiting server connect");
- return CURLE_FTP_ACCEPT_TIMEOUT;
+ result = CURLE_FTP_ACCEPT_TIMEOUT;
+ goto out;
}
/* see if the connection request is already here */
result = ReceivedServerConnect(data, connected);
if(result)
- return result;
+ goto out;
if(*connected) {
result = AcceptServerConnect(data);
if(result)
- return result;
+ goto out;
result = InitiateTransfer(data);
if(result)
- return result;
+ goto out;
}
else {
/* Add timeout to multi handle and break out of the loop */
@@ -521,6 +514,8 @@ static CURLcode AllowServerConnect(struct Curl_easy *data, bool *connected)
EXPIRE_FTP_ACCEPT);
}
+out:
+ DEBUGF(infof(data, "ftp AllowServerConnect() -> %d", result));
return result;
}
@@ -593,7 +588,7 @@ static CURLcode ftp_readresp(struct Curl_easy *data,
* generically is a good idea.
*/
infof(data, "We got a 421 - timeout");
- state(data, FTP_STOP);
+ ftp_state(data, FTP_STOP);
return CURLE_OPERATION_TIMEDOUT;
}
@@ -672,7 +667,7 @@ CURLcode Curl_GetFTPResponse(struct Curl_easy *data,
* wait for more data anyway.
*/
}
- else if(!Curl_conn_data_pending(conn, FIRSTSOCKET)) {
+ else if(!Curl_conn_data_pending(data, FIRSTSOCKET)) {
switch(SOCKET_READABLE(sockfd, interval_ms)) {
case -1: /* select() error, stop reading */
failf(data, "FTP response aborted due to select/poll error: %d",
@@ -752,10 +747,10 @@ static const char * const ftp_state_names[]={
#endif
/* This is the ONLY way to change FTP state! */
-static void _state(struct Curl_easy *data,
- ftpstate newstate
+static void _ftp_state(struct Curl_easy *data,
+ ftpstate newstate
#ifdef DEBUGBUILD
- , int lineno
+ , int lineno
#endif
)
{
@@ -786,7 +781,7 @@ static CURLcode ftp_state_user(struct Curl_easy *data,
if(!result) {
struct ftp_conn *ftpc = &conn->proto.ftpc;
ftpc->ftp_trying_alternative = FALSE;
- state(data, FTP_USER);
+ ftp_state(data, FTP_USER);
}
return result;
}
@@ -796,7 +791,7 @@ static CURLcode ftp_state_pwd(struct Curl_easy *data,
{
CURLcode result = Curl_pp_sendf(data, &conn->proto.ftpc.pp, "%s", "PWD");
if(!result)
- state(data, FTP_PWD);
+ ftp_state(data, FTP_PWD);
return result;
}
@@ -821,31 +816,18 @@ static int ftp_domore_getsock(struct Curl_easy *data,
* handle ordinary commands.
*/
- if(SOCKS_STATE(conn->cnnct.state))
- return Curl_SOCKS_getsock(conn, socks, SECONDARYSOCKET);
+ DEBUGF(infof(data, "ftp_domore_getsock()"));
+ if(conn->cfilter[SECONDARYSOCKET]
+ && !Curl_conn_is_connected(conn, SECONDARYSOCKET))
+ return 0;
if(FTP_STOP == ftpc->state) {
int bits = GETSOCK_READSOCK(0);
- bool any = FALSE;
/* if stopped and still in this state, then we're also waiting for a
connect on the secondary connection */
socks[0] = conn->sock[FIRSTSOCKET];
-
- if(!data->set.ftp_use_port) {
- int s;
- int i;
- /* PORT is used to tell the server to connect to us, and during that we
- don't do happy eyeballs, but we do if we connect to the server */
- for(s = 1, i = 0; i<2; i++) {
- if(conn->tempsock[i] != CURL_SOCKET_BAD) {
- socks[s] = conn->tempsock[i];
- bits |= GETSOCK_WRITESOCK(s++);
- any = TRUE;
- }
- }
- }
- if(!any) {
+ if(conn->sock[SECONDARYSOCKET] != CURL_SOCKET_BAD) {
socks[1] = conn->sock[SECONDARYSOCKET];
bits |= GETSOCK_WRITESOCK(1) | GETSOCK_READSOCK(1);
}
@@ -880,14 +862,14 @@ static CURLcode ftp_state_cwd(struct Curl_easy *data,
if(conn->bits.reuse && ftpc->entrypath &&
/* no need to go to entrypath when we have an absolute path */
!(ftpc->dirdepth && ftpc->dirs[0][0] == '/')) {
- /* This is a re-used connection. Since we change directory to where the
+ /* This is a reused connection. Since we change directory to where the
transfer is taking place, we must first get back to the original dir
where we ended up after login: */
ftpc->cwdcount = 0; /* we count this as the first path, then we add one
for all upcoming ones in the ftp->dirs[] array */
result = Curl_pp_sendf(data, &ftpc->pp, "CWD %s", ftpc->entrypath);
if(!result)
- state(data, FTP_CWD);
+ ftp_state(data, FTP_CWD);
}
else {
if(ftpc->dirdepth) {
@@ -897,7 +879,7 @@ static CURLcode ftp_state_cwd(struct Curl_easy *data,
result = Curl_pp_sendf(data, &ftpc->pp, "CWD %s",
ftpc->dirs[ftpc->cwdcount -1]);
if(!result)
- state(data, FTP_CWD);
+ ftp_state(data, FTP_CWD);
}
else {
/* No CWD necessary */
@@ -917,7 +899,7 @@ typedef enum {
static CURLcode ftp_state_use_port(struct Curl_easy *data,
ftpport fcmd) /* start with this */
{
- CURLcode result = CURLE_OK;
+ CURLcode result = CURLE_FTP_PORT_FAILED;
struct connectdata *conn = data->conn;
struct ftp_conn *ftpc = &conn->proto.ftpc;
curl_socket_t portsock = CURL_SOCKET_BAD;
@@ -965,9 +947,11 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data,
char *port_start = NULL;
char *port_sep = NULL;
- addr = calloc(addrlen + 1, 1);
- if(!addr)
- return CURLE_OUT_OF_MEMORY;
+ addr = calloc(1, addrlen + 1);
+ if(!addr) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
+ }
#ifdef ENABLE_IPV6
if(*string_ftpport == '[') {
@@ -988,7 +972,7 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data,
if(ip_end) {
/* either ipv6 or (ipv4|domain|interface):port(-range) */
#ifdef ENABLE_IPV6
- if(Curl_inet_pton(AF_INET6, string_ftpport, sa6) == 1) {
+ if(Curl_inet_pton(AF_INET6, string_ftpport, &sa6->sin6_addr) == 1) {
/* ipv6 */
port_min = port_max = 0;
strcpy(addr, string_ftpport);
@@ -1027,12 +1011,11 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data,
if(port_min > port_max)
port_min = port_max = 0;
-
if(*addr != '\0') {
/* attempt to get the address of the given interface name */
- switch(Curl_if2ip(conn->ip_addr->ai_family,
+ switch(Curl_if2ip(conn->remote_addr->family,
#ifdef ENABLE_IPV6
- Curl_ipv6_scope(conn->ip_addr->ai_addr),
+ Curl_ipv6_scope(&conn->remote_addr->sa_addr),
conn->scope_id,
#endif
addr, hbuf, sizeof(hbuf))) {
@@ -1041,7 +1024,7 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data,
host = addr;
break;
case IF2IP_AF_NOT_SUPPORTED:
- return CURLE_FTP_PORT_FAILED;
+ goto out;
case IF2IP_FOUND:
host = hbuf; /* use the hbuf for host name */
}
@@ -1059,8 +1042,7 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data,
if(getsockname(conn->sock[FIRSTSOCKET], sa, &sslen)) {
failf(data, "getsockname() failed: %s",
Curl_strerror(SOCKERRNO, buffer, sizeof(buffer)));
- free(addr);
- return CURLE_FTP_PORT_FAILED;
+ goto out;
}
switch(sa->sa_family) {
#ifdef ENABLE_IPV6
@@ -1072,8 +1054,9 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data,
r = Curl_inet_ntop(sa->sa_family, &sa4->sin_addr, hbuf, sizeof(hbuf));
break;
}
- if(!r)
- return CURLE_FTP_PORT_FAILED;
+ if(!r) {
+ goto out;
+ }
host = hbuf; /* use this host name */
possibly_non_local = FALSE; /* we know it is local now */
}
@@ -1093,20 +1076,15 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data,
if(!res) {
failf(data, "failed to resolve the address provided to PORT: %s", host);
- free(addr);
- return CURLE_FTP_PORT_FAILED;
+ goto out;
}
- free(addr);
host = NULL;
/* step 2, create a socket for the requested address */
-
- portsock = CURL_SOCKET_BAD;
error = 0;
for(ai = res; ai; ai = ai->ai_next) {
- result = Curl_socket(data, ai, NULL, &portsock);
- if(result) {
+ if(Curl_socket_open(data, ai, NULL, conn->transport, &portsock)) {
error = SOCKERRNO;
continue;
}
@@ -1115,8 +1093,9 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data,
if(!ai) {
failf(data, "socket failure: %s",
Curl_strerror(error, buffer, sizeof(buffer)));
- return CURLE_FTP_PORT_FAILED;
+ goto out;
}
+ DEBUGF(infof(data, "ftp_state_use_port(), opened socket"));
/* step 3, bind to a suitable local address */
@@ -1145,8 +1124,7 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data,
if(getsockname(conn->sock[FIRSTSOCKET], sa, &sslen)) {
failf(data, "getsockname() failed: %s",
Curl_strerror(SOCKERRNO, buffer, sizeof(buffer)));
- Curl_closesocket(data, conn, portsock);
- return CURLE_FTP_PORT_FAILED;
+ goto out;
}
port = port_min;
possibly_non_local = FALSE; /* don't try this again */
@@ -1155,8 +1133,7 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data,
if(error != EADDRINUSE && error != EACCES) {
failf(data, "bind(port=%hu) failed: %s", port,
Curl_strerror(error, buffer, sizeof(buffer)));
- Curl_closesocket(data, conn, portsock);
- return CURLE_FTP_PORT_FAILED;
+ goto out;
}
}
else
@@ -1165,31 +1142,30 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data,
port++;
}
- /* maybe all ports were in use already*/
+ /* maybe all ports were in use already */
if(port > port_max) {
failf(data, "bind() failed, we ran out of ports");
- Curl_closesocket(data, conn, portsock);
- return CURLE_FTP_PORT_FAILED;
+ goto out;
}
/* get the name again after the bind() so that we can extract the
port number it uses now */
sslen = sizeof(ss);
- if(getsockname(portsock, (struct sockaddr *)sa, &sslen)) {
+ if(getsockname(portsock, sa, &sslen)) {
failf(data, "getsockname() failed: %s",
Curl_strerror(SOCKERRNO, buffer, sizeof(buffer)));
- Curl_closesocket(data, conn, portsock);
- return CURLE_FTP_PORT_FAILED;
+ goto out;
}
+ DEBUGF(infof(data, "ftp_state_use_port(), socket bound to port %d", port));
/* step 4, listen on the socket */
if(listen(portsock, 1)) {
failf(data, "socket failure: %s",
Curl_strerror(SOCKERRNO, buffer, sizeof(buffer)));
- Curl_closesocket(data, conn, portsock);
- return CURLE_FTP_PORT_FAILED;
+ goto out;
}
+ DEBUGF(infof(data, "ftp_state_use_port(), listening on %d", port));
/* step 5, send the proper FTP command */
@@ -1242,12 +1218,7 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data,
if(result) {
failf(data, "Failure sending EPRT command: %s",
curl_easy_strerror(result));
- Curl_closesocket(data, conn, portsock);
- /* don't retry using PORT */
- ftpc->count1 = PORT;
- /* bail out */
- state(data, FTP_STOP);
- return result;
+ goto out;
}
break;
}
@@ -1273,10 +1244,7 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data,
if(result) {
failf(data, "Failure sending PORT command: %s",
curl_easy_strerror(result));
- Curl_closesocket(data, conn, portsock);
- /* bail out */
- state(data, FTP_STOP);
- return result;
+ goto out;
}
break;
}
@@ -1285,23 +1253,20 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data,
/* store which command was sent */
ftpc->count1 = fcmd;
- close_secondarysocket(data, conn);
-
- /* we set the secondary socket variable to this for now, it is only so that
- the cleanup function will close it in case we fail before the true
- secondary stuff is made */
- conn->sock[SECONDARYSOCKET] = portsock;
-
- /* this tcpconnect assignment below is a hackish work-around to make the
- multi interface with active FTP work - as it will not wait for a
- (passive) connect in Curl_is_connected().
-
- The *proper* fix is to make sure that the active connection from the
- server is done in a non-blocking way. Currently, it is still BLOCKING.
- */
- conn->bits.tcpconnect[SECONDARYSOCKET] = TRUE;
+ /* Replace any filter on SECONDARY with one listening on this socket */
+ result = Curl_conn_tcp_listen_set(data, conn, SECONDARYSOCKET, &portsock);
+ if(result)
+ goto out;
+ portsock = CURL_SOCKET_BAD; /* now held in filter */
+ ftp_state(data, FTP_PORT);
- state(data, FTP_PORT);
+out:
+ if(result) {
+ ftp_state(data, FTP_STOP);
+ }
+ if(portsock != CURL_SOCKET_BAD)
+ Curl_socket_close(data, conn, portsock);
+ free(addr);
return result;
}
@@ -1339,7 +1304,7 @@ static CURLcode ftp_state_use_pasv(struct Curl_easy *data,
result = Curl_pp_sendf(data, &ftpc->pp, "%s", mode[modeoff]);
if(!result) {
ftpc->count1 = modeoff;
- state(data, FTP_PASV);
+ ftp_state(data, FTP_PASV);
infof(data, "Connect data stream passively");
}
return result;
@@ -1362,7 +1327,7 @@ static CURLcode ftp_state_prepare_transfer(struct Curl_easy *data)
/* doesn't transfer any data */
/* still possibly do PRE QUOTE jobs */
- state(data, FTP_RETR_PREQUOTE);
+ ftp_state(data, FTP_RETR_PREQUOTE);
result = ftp_state_quote(data, TRUE, FTP_RETR_PREQUOTE);
}
else if(data->set.ftp_use_port) {
@@ -1380,14 +1345,14 @@ static CURLcode ftp_state_prepare_transfer(struct Curl_easy *data)
data->set.str[STRING_CUSTOMREQUEST]?
data->set.str[STRING_CUSTOMREQUEST]:
(data->state.list_only?"NLST":"LIST"));
- else if(data->set.upload)
+ else if(data->state.upload)
result = Curl_pp_sendf(data, &ftpc->pp, "PRET STOR %s",
conn->proto.ftpc.file);
else
result = Curl_pp_sendf(data, &ftpc->pp, "PRET RETR %s",
conn->proto.ftpc.file);
if(!result)
- state(data, FTP_PRET);
+ ftp_state(data, FTP_PRET);
}
else
result = ftp_state_use_pasv(data, conn);
@@ -1409,7 +1374,7 @@ static CURLcode ftp_state_rest(struct Curl_easy *data,
whether it supports range */
result = Curl_pp_sendf(data, &ftpc->pp, "REST %d", 0);
if(!result)
- state(data, FTP_REST);
+ ftp_state(data, FTP_REST);
}
else
result = ftp_state_prepare_transfer(data);
@@ -1430,7 +1395,7 @@ static CURLcode ftp_state_size(struct Curl_easy *data,
/* we know ftpc->file is a valid pointer to a file name */
result = Curl_pp_sendf(data, &ftpc->pp, "SIZE %s", ftpc->file);
if(!result)
- state(data, FTP_SIZE);
+ ftp_state(data, FTP_SIZE);
}
else
result = ftp_state_rest(data, conn);
@@ -1498,7 +1463,7 @@ static CURLcode ftp_state_list(struct Curl_easy *data)
free(cmd);
if(!result)
- state(data, FTP_LIST);
+ ftp_state(data, FTP_LIST);
return result;
}
@@ -1525,7 +1490,7 @@ static CURLcode ftp_state_type(struct Curl_easy *data)
/* If we have selected NOBODY and HEADER, it means that we only want file
information. Which in FTP can't be much more than the file size and
date. */
- if(data->set.opt_no_body && ftpc->file &&
+ if(data->req.no_body && ftpc->file &&
ftp_need_type(conn, data->state.prefer_ascii)) {
/* The SIZE command is _not_ RFC 959 specified, and therefore many servers
may not support it! It is however the only way we have to get a file's
@@ -1562,7 +1527,7 @@ static CURLcode ftp_state_mdtm(struct Curl_easy *data)
result = Curl_pp_sendf(data, &ftpc->pp, "MDTM %s", ftpc->file);
if(!result)
- state(data, FTP_MDTM);
+ ftp_state(data, FTP_MDTM);
}
else
result = ftp_state_type(data);
@@ -1601,7 +1566,7 @@ static CURLcode ftp_state_ul_setup(struct Curl_easy *data,
/* Got no given size to start from, figure it out */
result = Curl_pp_sendf(data, &ftpc->pp, "SIZE %s", ftpc->file);
if(!result)
- state(data, FTP_STOR_SIZE);
+ ftp_state(data, FTP_STOR_SIZE);
return result;
}
@@ -1656,7 +1621,7 @@ static CURLcode ftp_state_ul_setup(struct Curl_easy *data,
* ftp_done() because we didn't transfer anything! */
ftp->transfer = PPTRANSFER_NONE;
- state(data, FTP_STOP);
+ ftp_state(data, FTP_STOP);
return CURLE_OK;
}
}
@@ -1666,7 +1631,7 @@ static CURLcode ftp_state_ul_setup(struct Curl_easy *data,
result = Curl_pp_sendf(data, &ftpc->pp, append?"APPE %s":"STOR %s",
ftpc->file);
if(!result)
- state(data, FTP_STOR);
+ ftp_state(data, FTP_STOR);
return result;
}
@@ -1727,7 +1692,7 @@ static CURLcode ftp_state_quote(struct Curl_easy *data,
result = Curl_pp_sendf(data, &ftpc->pp, "%s", cmd);
if(result)
return result;
- state(data, instate);
+ ftp_state(data, instate);
quote = TRUE;
}
}
@@ -1741,7 +1706,7 @@ static CURLcode ftp_state_quote(struct Curl_easy *data,
break;
case FTP_RETR_PREQUOTE:
if(ftp->transfer != PPTRANSFER_BODY)
- state(data, FTP_STOP);
+ ftp_state(data, FTP_STOP);
else {
if(ftpc->known_filesize != -1) {
Curl_pgrsSetDownloadSize(data, ftpc->known_filesize);
@@ -1763,12 +1728,12 @@ static CURLcode ftp_state_quote(struct Curl_easy *data,
*/
result = Curl_pp_sendf(data, &ftpc->pp, "RETR %s", ftpc->file);
if(!result)
- state(data, FTP_RETR);
+ ftp_state(data, FTP_RETR);
}
else {
result = Curl_pp_sendf(data, &ftpc->pp, "SIZE %s", ftpc->file);
if(!result)
- state(data, FTP_RETR_SIZE);
+ ftp_state(data, FTP_RETR_SIZE);
}
}
}
@@ -1804,13 +1769,15 @@ static CURLcode ftp_epsv_disable(struct Curl_easy *data,
infof(data, "Failed EPSV attempt. Disabling EPSV");
/* disable it for next transfer */
conn->bits.ftp_use_epsv = FALSE;
+ Curl_conn_close(data, SECONDARYSOCKET);
+ Curl_conn_cf_discard_all(data, conn, SECONDARYSOCKET);
data->state.errorbuf = FALSE; /* allow error message to get
rewritten */
result = Curl_pp_sendf(data, &conn->proto.ftpc.pp, "%s", "PASV");
if(!result) {
conn->proto.ftpc.count1++;
/* remain in/go to the FTP_PASV state */
- state(data, FTP_PASV);
+ ftp_state(data, FTP_PASV);
}
return result;
}
@@ -1829,6 +1796,29 @@ static char *control_address(struct connectdata *conn)
return conn->primary_ip;
}
+static bool match_pasv_6nums(const char *p,
+ unsigned int *array) /* 6 numbers */
+{
+ int i;
+ for(i = 0; i < 6; i++) {
+ unsigned long num;
+ char *endp;
+ if(i) {
+ if(*p != ',')
+ return FALSE;
+ p++;
+ }
+ if(!ISDIGIT(*p))
+ return FALSE;
+ num = strtoul(p, &endp, 10);
+ if(num > 255)
+ return FALSE;
+ array[i] = (unsigned int)num;
+ p = endp;
+ }
+ return TRUE;
+}
+
static CURLcode ftp_state_pasv_resp(struct Curl_easy *data,
int ftpcode)
{
@@ -1848,27 +1838,18 @@ static CURLcode ftp_state_pasv_resp(struct Curl_easy *data,
/* positive EPSV response */
char *ptr = strchr(str, '(');
if(ptr) {
- unsigned int num;
- char separator[4];
+ char sep;
ptr++;
- if(5 == sscanf(ptr, "%c%c%c%u%c",
- &separator[0],
- &separator[1],
- &separator[2],
- &num,
- &separator[3])) {
- const char sep1 = separator[0];
- int i;
-
- /* The four separators should be identical, or else this is an oddly
- formatted reply and we bail out immediately. */
- for(i = 1; i<4; i++) {
- if(separator[i] != sep1) {
- ptr = NULL; /* set to NULL to signal error */
- break;
- }
- }
- if(num > 0xffff) {
+ /* |||12345| */
+ sep = ptr[0];
+ /* the ISDIGIT() check here is because strtoul() accepts leading minus
+ etc */
+ if((ptr[1] == sep) && (ptr[2] == sep) && ISDIGIT(ptr[3])) {
+ char *endp;
+ unsigned long num = strtoul(&ptr[3], &endp, 10);
+ if(*endp != sep)
+ ptr = NULL;
+ else if(num > 0xffff) {
failf(data, "Illegal port number in EPSV reply");
return CURLE_FTP_WEIRD_PASV_REPLY;
}
@@ -1890,8 +1871,7 @@ static CURLcode ftp_state_pasv_resp(struct Curl_easy *data,
else if((ftpc->count1 == 1) &&
(ftpcode == 227)) {
/* positive PASV response */
- unsigned int ip[4] = {0, 0, 0, 0};
- unsigned int port[2] = {0, 0};
+ unsigned int ip[6];
/*
* Scan for a sequence of six comma-separated numbers and use them as
@@ -1903,15 +1883,12 @@ static CURLcode ftp_state_pasv_resp(struct Curl_easy *data,
* "227 Entering passive mode. 127,0,0,1,4,51"
*/
while(*str) {
- if(6 == sscanf(str, "%u,%u,%u,%u,%u,%u",
- &ip[0], &ip[1], &ip[2], &ip[3],
- &port[0], &port[1]))
+ if(match_pasv_6nums(str, ip))
break;
str++;
}
- if(!*str || (ip[0] > 255) || (ip[1] > 255) || (ip[2] > 255) ||
- (ip[3] > 255) || (port[0] > 255) || (port[1] > 255) ) {
+ if(!*str) {
failf(data, "Couldn't interpret the 227-response");
return CURLE_FTP_WEIRD_227_FORMAT;
}
@@ -1920,7 +1897,7 @@ static CURLcode ftp_state_pasv_resp(struct Curl_easy *data,
if(data->set.ftp_skip_ip) {
/* told to ignore the remotely given IP but instead use the host we used
for the control connection */
- infof(data, "Skip %u.%u.%u.%u for data connection, re-use %s instead",
+ infof(data, "Skip %u.%u.%u.%u for data connection, reuse %s instead",
ip[0], ip[1], ip[2], ip[3],
conn->host.name);
ftpc->newhost = strdup(control_address(conn));
@@ -1931,7 +1908,7 @@ static CURLcode ftp_state_pasv_resp(struct Curl_easy *data,
if(!ftpc->newhost)
return CURLE_OUT_OF_MEMORY;
- ftpc->newport = (unsigned short)(((port[0]<<8) + port[1]) & 0xffff);
+ ftpc->newport = (unsigned short)(((ip[4]<<8) + ip[5]) & 0xffff);
}
else if(ftpc->count1 == 0) {
/* EPSV failed, move on to PASV */
@@ -1951,7 +1928,7 @@ static CURLcode ftp_state_pasv_resp(struct Curl_easy *data,
*/
const char * const host_name = conn->bits.socksproxy ?
conn->socks_proxy.host.name : conn->http_proxy.host.name;
- rc = Curl_resolv(data, host_name, (int)conn->port, FALSE, &addr);
+ rc = Curl_resolv(data, host_name, conn->port, FALSE, &addr);
if(rc == CURLRESOLV_PENDING)
/* BLOCKING, ignores the return code but 'addr' will be NULL in
case of failure */
@@ -1973,7 +1950,7 @@ static CURLcode ftp_state_pasv_resp(struct Curl_easy *data,
/* postponed address resolution in case of tcp fastopen */
if(conn->bits.tcp_fastopen && !conn->bits.reuse && !ftpc->newhost[0]) {
- Curl_conninfo_remote(data, conn, conn->sock[FIRSTSOCKET]);
+ Curl_conn_ev_update_info(data, conn);
Curl_safefree(ftpc->newhost);
ftpc->newhost = strdup(control_address(conn));
if(!ftpc->newhost)
@@ -1993,8 +1970,9 @@ static CURLcode ftp_state_pasv_resp(struct Curl_easy *data,
}
}
- conn->bits.tcpconnect[SECONDARYSOCKET] = FALSE;
- result = Curl_connecthost(data, conn, addr);
+ result = Curl_conn_setup(data, conn, SECONDARYSOCKET, addr,
+ conn->bits.ftp_use_data_ssl?
+ CURL_CF_SSL_ENABLE : CURL_CF_SSL_DISABLE);
if(result) {
Curl_resolv_unlock(data, addr); /* we're done using this address */
@@ -2024,7 +2002,7 @@ static CURLcode ftp_state_pasv_resp(struct Curl_easy *data,
return CURLE_OUT_OF_MEMORY;
conn->bits.do_more = TRUE;
- state(data, FTP_STOP); /* this phase is completed */
+ ftp_state(data, FTP_STOP); /* this phase is completed */
return result;
}
@@ -2058,13 +2036,62 @@ static CURLcode ftp_state_port_resp(struct Curl_easy *data,
}
else {
infof(data, "Connect data stream actively");
- state(data, FTP_STOP); /* end of DO phase */
+ ftp_state(data, FTP_STOP); /* end of DO phase */
result = ftp_dophase_done(data, FALSE);
}
return result;
}
+static int twodigit(const char *p)
+{
+ return (p[0]-'0') * 10 + (p[1]-'0');
+}
+
+static bool ftp_213_date(const char *p, int *year, int *month, int *day,
+ int *hour, int *minute, int *second)
+{
+ size_t len = strlen(p);
+ if(len < 14)
+ return FALSE;
+ *year = twodigit(&p[0]) * 100 + twodigit(&p[2]);
+ *month = twodigit(&p[4]);
+ *day = twodigit(&p[6]);
+ *hour = twodigit(&p[8]);
+ *minute = twodigit(&p[10]);
+ *second = twodigit(&p[12]);
+
+ if((*month > 12) || (*day > 31) || (*hour > 23) || (*minute > 59) ||
+ (*second > 60))
+ return FALSE;
+ return TRUE;
+}
+
+static CURLcode client_write_header(struct Curl_easy *data,
+ char *buf, size_t blen)
+{
+ /* Some replies from an FTP server are written to the client
+ * as CLIENTWRITE_HEADER, formatted as if they came from a
+ * HTTP conversation.
+ * In all protocols, CLIENTWRITE_HEADER data is only passed to
+ * the body write callback when data->set.include_header is set
+ * via CURLOPT_HEADER.
+ * For historic reasons, FTP never played this game and expects
+ * all its HEADERs to do that always. Set that flag during the
+ * call to Curl_client_write() so it does the right thing.
+ *
+ * Notice that we cannot enable this flag for FTP in general,
+ * as an FTP transfer might involve a HTTP proxy connection and
+ * headers from CONNECT should not automatically be part of the
+ * output. */
+ CURLcode result;
+ int save = data->set.include_header;
+ data->set.include_header = TRUE;
+ result = Curl_client_write(data, CLIENTWRITE_HEADER, buf, blen);
+ data->set.include_header = save? TRUE:FALSE;
+ return result;
+}
+
static CURLcode ftp_state_mdtm_resp(struct Curl_easy *data,
int ftpcode)
{
@@ -2079,8 +2106,8 @@ static CURLcode ftp_state_mdtm_resp(struct Curl_easy *data,
/* we got a time. Format should be: "YYYYMMDDHHMMSS[.sss]" where the
last .sss part is optional and means fractions of a second */
int year, month, day, hour, minute, second;
- if(6 == sscanf(&data->state.buffer[4], "%04d%02d%02d%02d%02d%02d",
- &year, &month, &day, &hour, &minute, &second)) {
+ if(ftp_213_date(&data->state.buffer[4],
+ &year, &month, &day, &hour, &minute, &second)) {
/* we have a time, reformat it */
char timebuf[24];
msnprintf(timebuf, sizeof(timebuf),
@@ -2092,9 +2119,9 @@ static CURLcode ftp_state_mdtm_resp(struct Curl_easy *data,
#ifdef CURL_FTP_HTTPSTYLE_HEAD
/* If we asked for a time of the file and we actually got one as well,
- we "emulate" a HTTP-style header in our output. */
+ we "emulate" an HTTP-style header in our output. */
- if(data->set.opt_no_body &&
+ if(data->req.no_body &&
ftpc->file &&
data->set.get_filetime &&
(data->info.filetime >= 0) ) {
@@ -2118,8 +2145,7 @@ static CURLcode ftp_state_mdtm_resp(struct Curl_easy *data,
tm->tm_hour,
tm->tm_min,
tm->tm_sec);
- result = Curl_client_write(data, CLIENTWRITE_BOTH, headerbuf,
- headerbuflen);
+ result = client_write_header(data, headerbuf, headerbuflen);
if(result)
return result;
} /* end of a ridiculous amount of conditionals */
@@ -2146,7 +2172,7 @@ static CURLcode ftp_state_mdtm_resp(struct Curl_easy *data,
infof(data, "The requested document is not new enough");
ftp->transfer = PPTRANSFER_NONE; /* mark to not transfer data */
data->info.timecond = TRUE;
- state(data, FTP_STOP);
+ ftp_state(data, FTP_STOP);
return CURLE_OK;
}
break;
@@ -2155,7 +2181,7 @@ static CURLcode ftp_state_mdtm_resp(struct Curl_easy *data,
infof(data, "The requested document is not old enough");
ftp->transfer = PPTRANSFER_NONE; /* mark to not transfer data */
data->info.timecond = TRUE;
- state(data, FTP_STOP);
+ ftp_state(data, FTP_STOP);
return CURLE_OK;
}
break;
@@ -2210,6 +2236,7 @@ static CURLcode ftp_state_retr(struct Curl_easy *data,
struct connectdata *conn = data->conn;
struct ftp_conn *ftpc = &conn->proto.ftpc;
+ DEBUGF(infof(data, "ftp_state_retr()"));
if(data->set.max_filesize && (filesize > data->set.max_filesize)) {
failf(data, "Maximum file size exceeded");
return CURLE_FILESIZE_EXCEEDED;
@@ -2262,7 +2289,7 @@ static CURLcode ftp_state_retr(struct Curl_easy *data,
/* Set ->transfer so that we won't get any error in ftp_done()
* because we didn't transfer the any file */
ftp->transfer = PPTRANSFER_NONE;
- state(data, FTP_STOP);
+ ftp_state(data, FTP_STOP);
return CURLE_OK;
}
@@ -2273,13 +2300,13 @@ static CURLcode ftp_state_retr(struct Curl_easy *data,
result = Curl_pp_sendf(data, &ftpc->pp, "REST %" CURL_FORMAT_CURL_OFF_T,
data->state.resume_from);
if(!result)
- state(data, FTP_RETR_REST);
+ ftp_state(data, FTP_RETR_REST);
}
else {
/* no resume */
result = Curl_pp_sendf(data, &ftpc->pp, "RETR %s", ftpc->file);
if(!result)
- state(data, FTP_RETR);
+ ftp_state(data, FTP_RETR);
}
return result;
@@ -2310,7 +2337,7 @@ static CURLcode ftp_state_size_resp(struct Curl_easy *data,
else
fdigit = start;
/* ignores parsing errors, which will make the size remain unknown */
- (void)curlx_strtoofft(fdigit, NULL, 0, &filesize);
+ (void)curlx_strtoofft(fdigit, NULL, 10, &filesize);
}
else if(ftpcode == 550) { /* "No such file or directory" */
@@ -2328,7 +2355,7 @@ static CURLcode ftp_state_size_resp(struct Curl_easy *data,
char clbuf[128];
int clbuflen = msnprintf(clbuf, sizeof(clbuf),
"Content-Length: %" CURL_FORMAT_CURL_OFF_T "\r\n", filesize);
- result = Curl_client_write(data, CLIENTWRITE_BOTH, clbuf, clbuflen);
+ result = client_write_header(data, clbuf, clbuflen);
if(result)
return result;
}
@@ -2362,8 +2389,7 @@ static CURLcode ftp_state_rest_resp(struct Curl_easy *data,
#ifdef CURL_FTP_HTTPSTYLE_HEAD
if(ftpcode == 350) {
char buffer[24]= { "Accept-ranges: bytes\r\n" };
- result = Curl_client_write(data, CLIENTWRITE_BOTH, buffer,
- strlen(buffer));
+ result = client_write_header(data, buffer, strlen(buffer));
if(result)
return result;
}
@@ -2379,7 +2405,7 @@ static CURLcode ftp_state_rest_resp(struct Curl_easy *data,
else {
result = Curl_pp_sendf(data, &ftpc->pp, "RETR %s", ftpc->file);
if(!result)
- state(data, FTP_RETR);
+ ftp_state(data, FTP_RETR);
}
break;
}
@@ -2395,7 +2421,7 @@ static CURLcode ftp_state_stor_resp(struct Curl_easy *data,
if(ftpcode >= 400) {
failf(data, "Failed FTP upload: %0d", ftpcode);
- state(data, FTP_STOP);
+ ftp_state(data, FTP_STOP);
/* oops, we never close the sockets! */
return CURLE_UPLOAD_FAILED;
}
@@ -2406,7 +2432,7 @@ static CURLcode ftp_state_stor_resp(struct Curl_easy *data,
if(data->set.ftp_use_port) {
bool connected;
- state(data, FTP_STOP); /* no longer in STOR state */
+ ftp_state(data, FTP_STOP); /* no longer in STOR state */
result = AllowServerConnect(data, &connected);
if(result)
@@ -2465,6 +2491,7 @@ static CURLcode ftp_state_get_resp(struct Curl_easy *data,
if((instate != FTP_LIST) &&
!data->state.prefer_ascii &&
+ !data->set.ignorecl &&
(ftp->downloadsize < 1)) {
/*
* It seems directory listings either don't show the size or very
@@ -2495,7 +2522,7 @@ static CURLcode ftp_state_get_resp(struct Curl_easy *data,
if(bytes) {
++bytes;
/* get the number! */
- (void)curlx_strtoofft(bytes, NULL, 0, &size);
+ (void)curlx_strtoofft(bytes, NULL, 10, &size);
}
}
}
@@ -2528,7 +2555,7 @@ static CURLcode ftp_state_get_resp(struct Curl_easy *data,
if(!connected) {
struct ftp_conn *ftpc = &conn->proto.ftpc;
infof(data, "Data conn was not available immediately");
- state(data, FTP_STOP);
+ ftp_state(data, FTP_STOP);
ftpc->wait_data_conn = TRUE;
}
}
@@ -2539,7 +2566,7 @@ static CURLcode ftp_state_get_resp(struct Curl_easy *data,
if((instate == FTP_LIST) && (ftpcode == 450)) {
/* simply no matching files in the dir listing */
ftp->transfer = PPTRANSFER_NONE; /* don't download anything */
- state(data, FTP_STOP); /* this phase is over */
+ ftp_state(data, FTP_STOP); /* this phase is over */
}
else {
failf(data, "RETR response: %03d", ftpcode);
@@ -2575,7 +2602,7 @@ static CURLcode ftp_state_loggedin(struct Curl_easy *data)
*/
result = Curl_pp_sendf(data, &conn->proto.ftpc.pp, "PBSZ %d", 0);
if(!result)
- state(data, FTP_PBSZ);
+ ftp_state(data, FTP_PBSZ);
}
else {
result = ftp_state_pwd(data, conn);
@@ -2585,13 +2612,11 @@ static CURLcode ftp_state_loggedin(struct Curl_easy *data)
/* for USER and PASS responses */
static CURLcode ftp_state_user_resp(struct Curl_easy *data,
- int ftpcode,
- ftpstate instate)
+ int ftpcode)
{
CURLcode result = CURLE_OK;
struct connectdata *conn = data->conn;
struct ftp_conn *ftpc = &conn->proto.ftpc;
- (void)instate; /* no use for this yet */
/* some need password anyway, and others just return 2xx ignored */
if((ftpcode == 331) && (ftpc->state == FTP_USER)) {
@@ -2600,7 +2625,7 @@ static CURLcode ftp_state_user_resp(struct Curl_easy *data,
result = Curl_pp_sendf(data, &ftpc->pp, "PASS %s",
conn->passwd?conn->passwd:"");
if(!result)
- state(data, FTP_PASS);
+ ftp_state(data, FTP_PASS);
}
else if(ftpcode/100 == 2) {
/* 230 User ... logged in.
@@ -2612,7 +2637,7 @@ static CURLcode ftp_state_user_resp(struct Curl_easy *data,
result = Curl_pp_sendf(data, &ftpc->pp, "ACCT %s",
data->set.str[STRING_FTP_ACCOUNT]);
if(!result)
- state(data, FTP_ACCT);
+ ftp_state(data, FTP_ACCT);
}
else {
failf(data, "ACCT requested but none available");
@@ -2633,7 +2658,7 @@ static CURLcode ftp_state_user_resp(struct Curl_easy *data,
data->set.str[STRING_FTP_ALTERNATIVE_TO_USER]);
if(!result) {
ftpc->ftp_trying_alternative = TRUE;
- state(data, FTP_USER);
+ ftp_state(data, FTP_USER);
}
}
else {
@@ -2668,7 +2693,7 @@ static CURLcode ftp_statemachine(struct Curl_easy *data,
int ftpcode;
struct ftp_conn *ftpc = &conn->proto.ftpc;
struct pingpong *pp = &ftpc->pp;
- static const char ftpauth[][4] = { "SSL", "TLS" };
+ static const char * const ftpauth[] = { "SSL", "TLS" };
size_t nread = 0;
if(pp->sendleft)
@@ -2686,7 +2711,7 @@ static CURLcode ftp_statemachine(struct Curl_easy *data,
/* 230 User logged in - already! Take as 220 if TLS required. */
if(data->set.use_ssl <= CURLUSESSL_TRY ||
conn->bits.ftp_use_control_ssl)
- return ftp_state_user_resp(data, ftpcode, ftpc->state);
+ return ftp_state_user_resp(data, ftpcode);
}
else if(ftpcode != 220) {
failf(data, "Got a %03d ftp-server response when 220 was expected",
@@ -2736,7 +2761,7 @@ static CURLcode ftp_statemachine(struct Curl_easy *data,
result = Curl_pp_sendf(data, &ftpc->pp, "AUTH %s",
ftpauth[ftpc->count1]);
if(!result)
- state(data, FTP_AUTH);
+ ftp_state(data, FTP_AUTH);
}
else
result = ftp_state_user(data, conn);
@@ -2756,8 +2781,16 @@ static CURLcode ftp_statemachine(struct Curl_easy *data,
*/
if((ftpcode == 234) || (ftpcode == 334)) {
- /* Curl_ssl_connect is BLOCKING */
- result = Curl_ssl_connect(data, conn, FIRSTSOCKET);
+ /* this was BLOCKING, keep it so for now */
+ bool done;
+ if(!Curl_conn_is_ssl(conn, FIRSTSOCKET)) {
+ result = Curl_ssl_cfilter_add(data, conn, FIRSTSOCKET);
+ if(result) {
+ /* we failed and bail out */
+ return CURLE_USE_SSL_FAILED;
+ }
+ }
+ result = Curl_conn_connect(data, FIRSTSOCKET, TRUE, &done);
if(!result) {
conn->bits.ftp_use_data_ssl = FALSE; /* clear-text data */
conn->bits.ftp_use_control_ssl = TRUE; /* SSL on control */
@@ -2783,7 +2816,7 @@ static CURLcode ftp_statemachine(struct Curl_easy *data,
case FTP_USER:
case FTP_PASS:
- result = ftp_state_user_resp(data, ftpcode, ftpc->state);
+ result = ftp_state_user_resp(data, ftpcode);
break;
case FTP_ACCT:
@@ -2795,7 +2828,7 @@ static CURLcode ftp_statemachine(struct Curl_easy *data,
Curl_pp_sendf(data, &ftpc->pp, "PROT %c",
data->set.use_ssl == CURLUSESSL_CONTROL ? 'C' : 'P');
if(!result)
- state(data, FTP_PROT);
+ ftp_state(data, FTP_PROT);
break;
case FTP_PROT:
@@ -2814,7 +2847,7 @@ static CURLcode ftp_statemachine(struct Curl_easy *data,
*/
result = Curl_pp_sendf(data, &ftpc->pp, "%s", "CCC");
if(!result)
- state(data, FTP_CCC);
+ ftp_state(data, FTP_CCC);
}
else
result = ftp_state_pwd(data, conn);
@@ -2823,7 +2856,7 @@ static CURLcode ftp_statemachine(struct Curl_easy *data,
case FTP_CCC:
if(ftpcode < 500) {
/* First shut down the SSL layer (note: this call will block) */
- result = Curl_ssl_shutdown(data, conn, FIRSTSOCKET);
+ result = Curl_ssl_cfilter_remove(data, FIRSTSOCKET);
if(result)
failf(data, "Failed to clear the command channel (CCC)");
@@ -2906,7 +2939,7 @@ static CURLcode ftp_statemachine(struct Curl_easy *data,
infof(data, "Entry path is '%s'", ftpc->entrypath);
/* also save it where getinfo can access it: */
data->state.most_recent_ftp_entrypath = ftpc->entrypath;
- state(data, FTP_SYST);
+ ftp_state(data, FTP_SYST);
break;
}
@@ -2922,7 +2955,7 @@ static CURLcode ftp_statemachine(struct Curl_easy *data,
infof(data, "Failed to figure out path");
}
}
- state(data, FTP_STOP); /* we are done with the CONNECT phase! */
+ ftp_state(data, FTP_STOP); /* we are done with the CONNECT phase! */
DEBUGF(infof(data, "protocol connect phase DONE"));
break;
@@ -2957,7 +2990,7 @@ static CURLcode ftp_statemachine(struct Curl_easy *data,
/* remember target server OS */
Curl_safefree(ftpc->server_os);
ftpc->server_os = os;
- state(data, FTP_NAMEFMT);
+ ftp_state(data, FTP_NAMEFMT);
break;
}
/* Nothing special for the target server. */
@@ -2969,7 +3002,7 @@ static CURLcode ftp_statemachine(struct Curl_easy *data,
/* Cannot identify server OS. Continue anyway and cross fingers. */
}
- state(data, FTP_STOP); /* we are done with the CONNECT phase! */
+ ftp_state(data, FTP_STOP); /* we are done with the CONNECT phase! */
DEBUGF(infof(data, "protocol connect phase DONE"));
break;
@@ -2980,7 +3013,7 @@ static CURLcode ftp_statemachine(struct Curl_easy *data,
break;
}
- state(data, FTP_STOP); /* we are done with the CONNECT phase! */
+ ftp_state(data, FTP_STOP); /* we are done with the CONNECT phase! */
DEBUGF(infof(data, "protocol connect phase DONE"));
break;
@@ -3013,7 +3046,7 @@ static CURLcode ftp_statemachine(struct Curl_easy *data,
result = Curl_pp_sendf(data, &ftpc->pp, "MKD %s",
ftpc->dirs[ftpc->cwdcount - 1]);
if(!result)
- state(data, FTP_MKD);
+ ftp_state(data, FTP_MKD);
}
else {
/* return failure */
@@ -3042,7 +3075,7 @@ static CURLcode ftp_statemachine(struct Curl_easy *data,
result = CURLE_REMOTE_ACCESS_DENIED;
}
else {
- state(data, FTP_CWD);
+ ftp_state(data, FTP_CWD);
/* send CWD */
result = Curl_pp_sendf(data, &ftpc->pp, "CWD %s",
ftpc->dirs[ftpc->cwdcount - 1]);
@@ -3101,7 +3134,7 @@ static CURLcode ftp_statemachine(struct Curl_easy *data,
/* fallthrough, just stop! */
default:
/* internal error */
- state(data, FTP_STOP);
+ ftp_state(data, FTP_STOP);
break;
}
} /* if(ftpcode) */
@@ -3167,7 +3200,7 @@ static CURLcode ftp_connect(struct Curl_easy *data,
if(conn->handler->flags & PROTOPT_SSL) {
/* BLOCKING */
- result = Curl_ssl_connect(data, conn, FIRSTSOCKET);
+ result = Curl_conn_connect(data, FIRSTSOCKET, TRUE, done);
if(result)
return result;
conn->bits.ftp_use_control_ssl = TRUE;
@@ -3178,7 +3211,7 @@ static CURLcode ftp_connect(struct Curl_easy *data,
/* When we connect, we start in the state where we await the 220
response */
- state(data, FTP_WAIT220);
+ ftp_state(data, FTP_WAIT220);
result = ftp_multi_statemach(data, done);
@@ -3246,7 +3279,7 @@ static CURLcode ftp_done(struct Curl_easy *data, CURLcode status,
if(data->state.wildcardmatch) {
if(data->set.chunk_end && ftpc->file) {
Curl_set_in_callback(data, true);
- data->set.chunk_end(data->wildcard.customptr);
+ data->set.chunk_end(data->set.wildcardptr);
Curl_set_in_callback(data, false);
}
ftpc->known_filesize = -1;
@@ -3310,14 +3343,6 @@ static CURLcode ftp_done(struct Curl_easy *data, CURLcode status,
}
}
- if(conn->ssl[SECONDARYSOCKET].use) {
- /* The secondary socket is using SSL so we must close down that part
- first before we close the socket for real */
- Curl_ssl_close(data, conn, SECONDARYSOCKET);
-
- /* Note that we keep "use" set to TRUE since that (next) connection is
- still requested to use SSL */
- }
close_secondarysocket(data, conn);
}
@@ -3379,7 +3404,7 @@ static CURLcode ftp_done(struct Curl_easy *data, CURLcode status,
/* the response code from the transfer showed an error already so no
use checking further */
;
- else if(data->set.upload) {
+ else if(data->state.upload) {
if((-1 != data->state.infilesize) &&
(data->state.infilesize != data->req.writebytecount) &&
!data->set.crlf &&
@@ -3455,7 +3480,7 @@ CURLcode ftp_sendquote(struct Curl_easy *data,
/* if a command starts with an asterisk, which a legal FTP command never
can, the command will be allowed to fail without it causing any
aborts or cancels etc. It will cause libcurl to act as if the command
- is successful, whatever the server reponds. */
+ is successful, whatever the server responds. */
if(cmd[0] == '*') {
cmd++;
@@ -3511,13 +3536,13 @@ static CURLcode ftp_nb_type(struct Curl_easy *data,
char want = (char)(ascii?'A':'I');
if(ftpc->transfertype == want) {
- state(data, newstate);
+ ftp_state(data, newstate);
return ftp_state_type_resp(data, 200, newstate);
}
result = Curl_pp_sendf(data, &ftpc->pp, "TYPE %c", want);
if(!result) {
- state(data, newstate);
+ ftp_state(data, newstate);
/* keep track of our current transfer type */
ftpc->transfertype = want;
@@ -3571,23 +3596,15 @@ static CURLcode ftp_do_more(struct Curl_easy *data, int *completep)
* complete */
struct FTP *ftp = NULL;
- /* if the second connection isn't done yet, wait for it */
- if(!conn->bits.tcpconnect[SECONDARYSOCKET]) {
- if(Curl_connect_ongoing(conn)) {
- /* As we're in TUNNEL_CONNECT state now, we know the proxy name and port
- aren't used so we blank their arguments. */
- result = Curl_proxyCONNECT(data, SECONDARYSOCKET, NULL, 0);
-
- return result;
- }
-
- result = Curl_is_connected(data, conn, SECONDARYSOCKET, &connected);
-
- /* Ready to do more? */
- if(connected) {
- DEBUGF(infof(data, "DO-MORE connected phase starts"));
- }
- else {
+ /* if the second connection isn't done yet, wait for it to have
+ * connected to the remote host. When using proxy tunneling, this
+ * means the tunnel needs to have been establish. However, we
+ * can not expect the remote host to talk to us in any way yet.
+ * So, when using ftps: the SSL handshake will not start until we
+ * tell the remote server that we are there. */
+ if(conn->cfilter[SECONDARYSOCKET]) {
+ result = Curl_conn_connect(data, SECONDARYSOCKET, FALSE, &connected);
+ if(result || !Curl_conn_is_ip_connected(data, SECONDARYSOCKET)) {
if(result && (ftpc->count1 == 0)) {
*completep = -1; /* go back to DOING please */
/* this is a EPSV connect failing, try PASV instead */
@@ -3597,19 +3614,6 @@ static CURLcode ftp_do_more(struct Curl_easy *data, int *completep)
}
}
-#ifndef CURL_DISABLE_PROXY
- result = Curl_proxy_connect(data, SECONDARYSOCKET);
- if(result)
- return result;
-
- if(CONNECT_SECONDARYSOCKET_PROXY_SSL())
- return result;
-
- if(conn->bits.tunnel_proxy && conn->bits.httpproxy &&
- Curl_connect_ongoing(conn))
- return result;
-#endif
-
/* Curl_proxy_connect might have moved the protocol state */
ftp = data->req.p.ftp;
@@ -3635,7 +3639,7 @@ static CURLcode ftp_do_more(struct Curl_easy *data, int *completep)
/* a transfer is about to take place, or if not a file name was given
so we'll do a SIZE on it later and then we need the right TYPE first */
- if(ftpc->wait_data_conn == TRUE) {
+ if(ftpc->wait_data_conn) {
bool serv_conned;
result = ReceivedServerConnect(data, &serv_conned);
@@ -3656,20 +3660,14 @@ static CURLcode ftp_do_more(struct Curl_easy *data, int *completep)
connected back to us */
}
}
- else if(data->set.upload) {
+ else if(data->state.upload) {
result = ftp_nb_type(data, conn, data->state.prefer_ascii,
FTP_STOR_TYPE);
if(result)
return result;
result = ftp_multi_statemach(data, &complete);
- if(ftpc->wait_data_conn)
- /* if we reach the end of the FTP state machine here, *complete will be
- TRUE but so is ftpc->wait_data_conn, which says we need to wait for
- the data connection and therefore we're not actually complete */
- *completep = 0;
- else
- *completep = (int)complete;
+ *completep = (int)complete;
}
else {
/* download */
@@ -3739,11 +3737,10 @@ CURLcode ftp_perform(struct Curl_easy *data,
{
/* this is FTP and no proxy */
CURLcode result = CURLE_OK;
- struct connectdata *conn = data->conn;
DEBUGF(infof(data, "DO phase starts"));
- if(data->set.opt_no_body) {
+ if(data->req.no_body) {
/* requested no body means no transfer... */
struct FTP *ftp = data->req.p.ftp;
ftp->transfer = PPTRANSFER_INFO;
@@ -3759,7 +3756,7 @@ CURLcode ftp_perform(struct Curl_easy *data,
/* run the state-machine */
result = ftp_multi_statemach(data, dophase_done);
- *connected = conn->bits.tcpconnect[SECONDARYSOCKET];
+ *connected = Curl_conn_is_connected(data->conn, SECONDARYSOCKET);
infof(data, "ftp_perform ends with SECONDARY: %d", *connected);
@@ -3782,7 +3779,7 @@ static CURLcode init_wc_data(struct Curl_easy *data)
char *last_slash;
struct FTP *ftp = data->req.p.ftp;
char *path = ftp->path;
- struct WildcardData *wildcard = &(data->wildcard);
+ struct WildcardData *wildcard = data->wildcard;
CURLcode result = CURLE_OK;
struct ftp_wc *ftpwc = NULL;
@@ -3830,7 +3827,7 @@ static CURLcode init_wc_data(struct Curl_easy *data)
goto fail;
}
- wildcard->protdata = ftpwc; /* put it to the WildcardData tmp pointer */
+ wildcard->ftpwc = ftpwc; /* put it to the WildcardData tmp pointer */
wildcard->dtor = wc_data_dtor;
/* wildcard does not support NOCWD option (assert it?) */
@@ -3861,20 +3858,20 @@ static CURLcode init_wc_data(struct Curl_easy *data)
infof(data, "Wildcard - Parsing started");
return CURLE_OK;
- fail:
+fail:
if(ftpwc) {
Curl_ftp_parselist_data_free(&ftpwc->parser);
free(ftpwc);
}
Curl_safefree(wildcard->pattern);
wildcard->dtor = ZERO_NULL;
- wildcard->protdata = NULL;
+ wildcard->ftpwc = NULL;
return result;
}
static CURLcode wc_statemach(struct Curl_easy *data)
{
- struct WildcardData * const wildcard = &(data->wildcard);
+ struct WildcardData * const wildcard = data->wildcard;
struct connectdata *conn = data->conn;
CURLcode result = CURLE_OK;
@@ -3891,7 +3888,7 @@ static CURLcode wc_statemach(struct Curl_easy *data)
case CURLWC_MATCHING: {
/* In this state is LIST response successfully parsed, so lets restore
previous WRITEFUNCTION callback and WRITEDATA pointer */
- struct ftp_wc *ftpwc = wildcard->protdata;
+ struct ftp_wc *ftpwc = wildcard->ftpwc;
data->set.fwrite_func = ftpwc->backup.write_function;
data->set.out = ftpwc->backup.file_descriptor;
ftpwc->backup.write_function = ZERO_NULL;
@@ -3930,7 +3927,7 @@ static CURLcode wc_statemach(struct Curl_easy *data)
long userresponse;
Curl_set_in_callback(data, true);
userresponse = data->set.chunk_bgn(
- finfo, wildcard->customptr, (int)wildcard->filelist.size);
+ finfo, data->set.wildcardptr, (int)wildcard->filelist.size);
Curl_set_in_callback(data, false);
switch(userresponse) {
case CURL_CHUNK_BGN_FUNC_SKIP:
@@ -3970,7 +3967,7 @@ static CURLcode wc_statemach(struct Curl_easy *data)
case CURLWC_SKIP: {
if(data->set.chunk_end) {
Curl_set_in_callback(data, true);
- data->set.chunk_end(data->wildcard.customptr);
+ data->set.chunk_end(data->set.wildcardptr);
Curl_set_in_callback(data, false);
}
Curl_llist_remove(&wildcard->filelist, wildcard->filelist.head, NULL);
@@ -3980,7 +3977,7 @@ static CURLcode wc_statemach(struct Curl_easy *data)
}
case CURLWC_CLEAN: {
- struct ftp_wc *ftpwc = wildcard->protdata;
+ struct ftp_wc *ftpwc = wildcard->ftpwc;
result = CURLE_OK;
if(ftpwc)
result = Curl_ftp_parselist_geterror(ftpwc->parser);
@@ -3992,8 +3989,10 @@ static CURLcode wc_statemach(struct Curl_easy *data)
case CURLWC_DONE:
case CURLWC_ERROR:
case CURLWC_CLEAR:
- if(wildcard->dtor)
- wildcard->dtor(wildcard->protdata);
+ if(wildcard->dtor) {
+ wildcard->dtor(wildcard->ftpwc);
+ wildcard->ftpwc = NULL;
+ }
return result;
}
}
@@ -4020,8 +4019,8 @@ static CURLcode ftp_do(struct Curl_easy *data, bool *done)
if(data->state.wildcardmatch) {
result = wc_statemach(data);
- if(data->wildcard.state == CURLWC_SKIP ||
- data->wildcard.state == CURLWC_DONE) {
+ if(data->wildcard->state == CURLWC_SKIP ||
+ data->wildcard->state == CURLWC_DONE) {
/* do not call ftp_regular_transfer */
return CURLE_OK;
}
@@ -4060,11 +4059,11 @@ static CURLcode ftp_quit(struct Curl_easy *data, struct connectdata *conn)
curl_easy_strerror(result));
conn->proto.ftpc.ctl_valid = FALSE; /* mark control connection as bad */
connclose(conn, "QUIT command failed"); /* mark for connection closure */
- state(data, FTP_STOP);
+ ftp_state(data, FTP_STOP);
return result;
}
- state(data, FTP_QUIT);
+ ftp_state(data, FTP_QUIT);
result = ftp_block_statemach(data, conn);
}
@@ -4107,6 +4106,8 @@ static CURLcode ftp_disconnect(struct Curl_easy *data,
}
freedirs(ftpc);
+ Curl_safefree(ftpc->account);
+ Curl_safefree(ftpc->alternative_to_user);
Curl_safefree(ftpc->prevpath);
Curl_safefree(ftpc->server_os);
Curl_pp_disconnect(pp);
@@ -4153,7 +4154,7 @@ CURLcode ftp_parse_url_path(struct Curl_easy *data)
case FTPFILE_NOCWD: /* fastest, but less standard-compliant */
if((pathLen > 0) && (rawPath[pathLen - 1] != '/'))
- fileName = rawPath; /* this is a full file path */
+ fileName = rawPath; /* this is a full file path */
/*
else: ftpc->file is not used anywhere other than for operations on
a file. In other words, never for directory operations.
@@ -4168,7 +4169,7 @@ CURLcode ftp_parse_url_path(struct Curl_easy *data)
/* get path before last slash, except for / */
size_t dirlen = slashPos - rawPath;
if(dirlen == 0)
- dirlen++;
+ dirlen = 1;
ftpc->dirs = calloc(1, sizeof(ftpc->dirs[0]));
if(!ftpc->dirs) {
@@ -4195,13 +4196,14 @@ CURLcode ftp_parse_url_path(struct Curl_easy *data)
/* current position: begin of next path component */
const char *curPos = rawPath;
- int dirAlloc = 0; /* number of entries allocated for the 'dirs' array */
+ /* number of entries allocated for the 'dirs' array */
+ size_t dirAlloc = 0;
const char *str = rawPath;
for(; *str != 0; ++str)
- if (*str == '/')
+ if(*str == '/')
++dirAlloc;
- if(dirAlloc > 0) {
+ if(dirAlloc) {
ftpc->dirs = calloc(dirAlloc, sizeof(ftpc->dirs[0]));
if(!ftpc->dirs) {
free(rawPath);
@@ -4231,7 +4233,7 @@ CURLcode ftp_parse_url_path(struct Curl_easy *data)
curPos = slashPos + 1;
}
}
- DEBUGASSERT(ftpc->dirdepth <= dirAlloc);
+ DEBUGASSERT((size_t)ftpc->dirdepth <= dirAlloc);
fileName = curPos; /* the rest is the file name (or empty) */
}
break;
@@ -4243,7 +4245,7 @@ CURLcode ftp_parse_url_path(struct Curl_easy *data)
ftpc->file = NULL; /* instead of point to a zero byte,
we make it a NULL pointer */
- if(data->set.upload && !ftpc->file && (ftp->transfer == PPTRANSFER_BODY)) {
+ if(data->state.upload && !ftpc->file && (ftp->transfer == PPTRANSFER_BODY)) {
/* We need a file name when uploading. Return error! */
failf(data, "Uploading to a URL without a file name");
free(rawPath);
@@ -4374,11 +4376,32 @@ static CURLcode ftp_setup_connection(struct Curl_easy *data,
{
char *type;
struct FTP *ftp;
+ CURLcode result = CURLE_OK;
+ struct ftp_conn *ftpc = &conn->proto.ftpc;
- data->req.p.ftp = ftp = calloc(sizeof(struct FTP), 1);
+ ftp = calloc(1, sizeof(struct FTP));
if(!ftp)
return CURLE_OUT_OF_MEMORY;
+ /* clone connection related data that is FTP specific */
+ if(data->set.str[STRING_FTP_ACCOUNT]) {
+ ftpc->account = strdup(data->set.str[STRING_FTP_ACCOUNT]);
+ if(!ftpc->account) {
+ free(ftp);
+ return CURLE_OUT_OF_MEMORY;
+ }
+ }
+ if(data->set.str[STRING_FTP_ALTERNATIVE_TO_USER]) {
+ ftpc->alternative_to_user =
+ strdup(data->set.str[STRING_FTP_ALTERNATIVE_TO_USER]);
+ if(!ftpc->alternative_to_user) {
+ Curl_safefree(ftpc->account);
+ free(ftp);
+ return CURLE_OUT_OF_MEMORY;
+ }
+ }
+ data->req.p.ftp = ftp;
+
ftp->path = &data->state.up.path[1]; /* don't include the initial slash */
/* FTP URLs support an extension like ";type=<typecode>" that
@@ -4413,9 +4436,11 @@ static CURLcode ftp_setup_connection(struct Curl_easy *data,
/* get some initial data into the ftp struct */
ftp->transfer = PPTRANSFER_BODY;
ftp->downloadsize = 0;
- conn->proto.ftpc.known_filesize = -1; /* unknown size for now */
+ ftpc->known_filesize = -1; /* unknown size for now */
+ ftpc->use_ssl = data->set.use_ssl;
+ ftpc->ccc = data->set.ftp_ccc;
- return CURLE_OK;
+ return result;
}
#endif /* CURL_DISABLE_FTP */
diff --git a/lib/ftp.h b/lib/ftp.h
index 7f6f4328d..977fc883b 100644
--- a/lib/ftp.h
+++ b/lib/ftp.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -42,7 +42,7 @@ CURLcode Curl_GetFTPResponse(struct Curl_easy *data, ssize_t *nread,
/****************************************************************************
* FTP unique setup
***************************************************************************/
-typedef enum {
+enum {
FTP_STOP, /* do nothing state, stops the state machine */
FTP_WAIT220, /* waiting for the initial 220 response immediately after
a connect */
@@ -80,7 +80,8 @@ typedef enum {
FTP_STOR, /* generic state for STOR and APPE */
FTP_QUIT,
FTP_LAST /* never used */
-} ftpstate;
+};
+typedef unsigned char ftpstate; /* use the enum values */
struct ftp_parselist_data; /* defined later in ftplistparser.c */
@@ -119,41 +120,46 @@ struct FTP {
struct */
struct ftp_conn {
struct pingpong pp;
+ char *account;
+ char *alternative_to_user;
char *entrypath; /* the PWD reply when we logged on */
char *file; /* url-decoded file name (or path) */
char **dirs; /* realloc()ed array for path components */
- int dirdepth; /* number of entries used in the 'dirs' array */
- bool dont_check; /* Set to TRUE to prevent the final (post-transfer)
- file size and 226/250 status check. It should still
- read the line, just ignore the result. */
- bool ctl_valid; /* Tells Curl_ftp_quit() whether or not to do anything. If
- the connection has timed out or been closed, this
- should be FALSE when it gets to Curl_ftp_quit() */
- bool cwddone; /* if it has been determined that the proper CWD combo
- already has been done */
- int cwdcount; /* number of CWD commands issued */
- bool cwdfail; /* set TRUE if a CWD command fails, as then we must prevent
- caching the current directory */
- bool wait_data_conn; /* this is set TRUE if data connection is waited */
- /* newhost is the (allocated) IP addr or host name to connect the data
- connection to */
- unsigned short newport;
char *newhost;
char *prevpath; /* url-decoded conn->path from the previous transfer */
char transfertype; /* set by ftp_transfertype for use by Curl_client_write()a
and others (A/I or zero) */
- int count1; /* general purpose counter for the state machine */
- int count2; /* general purpose counter for the state machine */
- int count3; /* general purpose counter for the state machine */
- ftpstate state; /* always use ftp.c:state() to change state! */
- ftpstate state_saved; /* transfer type saved to be reloaded after
- data connection is established */
curl_off_t retr_size_saved; /* Size of retrieved file saved */
char *server_os; /* The target server operating system. */
curl_off_t known_filesize; /* file size is different from -1, if wildcard
LIST parsing was done and wc_statemach set
it */
+ int dirdepth; /* number of entries used in the 'dirs' array */
+ int cwdcount; /* number of CWD commands issued */
+ int count1; /* general purpose counter for the state machine */
+ int count2; /* general purpose counter for the state machine */
+ int count3; /* general purpose counter for the state machine */
+ /* newhost is the (allocated) IP addr or host name to connect the data
+ connection to */
+ unsigned short newport;
+ ftpstate state; /* always use ftp.c:state() to change state! */
+ ftpstate state_saved; /* transfer type saved to be reloaded after data
+ connection is established */
+ unsigned char use_ssl; /* if AUTH TLS is to be attempted etc, for FTP or
+ IMAP or POP3 or others! (type: curl_usessl)*/
+ unsigned char ccc; /* ccc level for this connection */
BIT(ftp_trying_alternative);
+ BIT(dont_check); /* Set to TRUE to prevent the final (post-transfer)
+ file size and 226/250 status check. It should still
+ read the line, just ignore the result. */
+ BIT(ctl_valid); /* Tells Curl_ftp_quit() whether or not to do anything. If
+ the connection has timed out or been closed, this
+ should be FALSE when it gets to Curl_ftp_quit() */
+ BIT(cwddone); /* if it has been determined that the proper CWD combo
+ already has been done */
+ BIT(cwdfail); /* set TRUE if a CWD command fails, as then we must prevent
+ caching the current directory */
+ BIT(wait_data_conn); /* this is set TRUE if data connection is waited */
};
#define DEFAULT_ACCEPT_TIMEOUT 60000 /* milliseconds == one minute */
diff --git a/lib/ftplistparser.c b/lib/ftplistparser.c
index 40f5f3f18..82f1ea00d 100644
--- a/lib/ftplistparser.c
+++ b/lib/ftplistparser.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -55,9 +55,6 @@
/* The last #include file should be: */
#include "memdebug.h"
-/* allocs buffer which will contain one line of LIST command response */
-#define FTP_BUFFER_ALLOCSIZE 160
-
typedef enum {
PL_UNIX_TOTALSIZE = 0,
PL_UNIX_FILETYPE,
@@ -181,6 +178,43 @@ struct ftp_parselist_data {
} offsets;
};
+static void fileinfo_dtor(void *user, void *element)
+{
+ (void)user;
+ Curl_fileinfo_cleanup(element);
+}
+
+CURLcode Curl_wildcard_init(struct WildcardData *wc)
+{
+ Curl_llist_init(&wc->filelist, fileinfo_dtor);
+ wc->state = CURLWC_INIT;
+
+ return CURLE_OK;
+}
+
+void Curl_wildcard_dtor(struct WildcardData **wcp)
+{
+ struct WildcardData *wc = *wcp;
+ if(!wc)
+ return;
+
+ if(wc->dtor) {
+ wc->dtor(wc->ftpwc);
+ wc->dtor = ZERO_NULL;
+ wc->ftpwc = NULL;
+ }
+ DEBUGASSERT(wc->ftpwc == NULL);
+
+ Curl_llist_destroy(&wc->filelist, NULL);
+ free(wc->path);
+ wc->path = NULL;
+ free(wc->pattern);
+ wc->pattern = NULL;
+ wc->state = CURLWC_INIT;
+ free(wc);
+ *wcp = NULL;
+}
+
struct ftp_parselist_data *Curl_ftp_parselist_data_alloc(void)
{
return calloc(1, sizeof(struct ftp_parselist_data));
@@ -205,9 +239,9 @@ CURLcode Curl_ftp_parselist_geterror(struct ftp_parselist_data *pl_data)
#define FTP_LP_MALFORMATED_PERM 0x01000000
-static int ftp_pl_get_permission(const char *str)
+static unsigned int ftp_pl_get_permission(const char *str)
{
- int permissions = 0;
+ unsigned int permissions = 0;
/* USER */
if(str[0] == 'r')
permissions |= 1 << 8;
@@ -274,15 +308,15 @@ static CURLcode ftp_pl_insert_finfo(struct Curl_easy *data,
struct fileinfo *infop)
{
curl_fnmatch_callback compare;
- struct WildcardData *wc = &data->wildcard;
- struct ftp_wc *ftpwc = wc->protdata;
+ struct WildcardData *wc = data->wildcard;
+ struct ftp_wc *ftpwc = wc->ftpwc;
struct Curl_llist *llist = &wc->filelist;
struct ftp_parselist_data *parser = ftpwc->parser;
bool add = TRUE;
struct curl_fileinfo *finfo = &infop->info;
- /* move finfo pointers to b_data */
- char *str = finfo->b_data;
+ /* set the finfo pointers */
+ char *str = Curl_dyn_ptr(&infop->buf);
finfo->filename = str + parser->offsets.filename;
finfo->strings.group = parser->offsets.group ?
str + parser->offsets.group : NULL;
@@ -325,16 +359,16 @@ static CURLcode ftp_pl_insert_finfo(struct Curl_easy *data,
return CURLE_OK;
}
+#define MAX_FTPLIST_BUFFER 10000 /* arbitrarily set */
+
size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
void *connptr)
{
size_t bufflen = size*nmemb;
struct Curl_easy *data = (struct Curl_easy *)connptr;
- struct ftp_wc *ftpwc = data->wildcard.protdata;
+ struct ftp_wc *ftpwc = data->wildcard->ftpwc;
struct ftp_parselist_data *parser = ftpwc->parser;
- struct fileinfo *infop;
- struct curl_fileinfo *finfo;
- unsigned long i = 0;
+ size_t i = 0;
CURLcode result;
size_t retsize = bufflen;
@@ -342,7 +376,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
/* scenario:
* 1. call => OK..
* 2. call => OUT_OF_MEMORY (or other error)
- * 3. (last) call => is skipped RIGHT HERE and the error is hadled later
+ * 3. (last) call => is skipped RIGHT HERE and the error is handled later
* in wc_statemach()
*/
goto fail;
@@ -350,48 +384,35 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
if(parser->os_type == OS_TYPE_UNKNOWN && bufflen > 0) {
/* considering info about FILE response format */
- parser->os_type = (buffer[0] >= '0' && buffer[0] <= '9') ?
- OS_TYPE_WIN_NT : OS_TYPE_UNIX;
+ parser->os_type = ISDIGIT(buffer[0]) ? OS_TYPE_WIN_NT : OS_TYPE_UNIX;
}
while(i < bufflen) { /* FSM */
-
+ char *mem;
+ size_t len; /* number of bytes of data in the dynbuf */
char c = buffer[i];
+ struct fileinfo *infop;
+ struct curl_fileinfo *finfo;
if(!parser->file_data) { /* tmp file data is not allocated yet */
parser->file_data = Curl_fileinfo_alloc();
if(!parser->file_data) {
parser->error = CURLE_OUT_OF_MEMORY;
goto fail;
}
- parser->file_data->info.b_data = malloc(FTP_BUFFER_ALLOCSIZE);
- if(!parser->file_data->info.b_data) {
- parser->error = CURLE_OUT_OF_MEMORY;
- goto fail;
- }
- parser->file_data->info.b_size = FTP_BUFFER_ALLOCSIZE;
parser->item_offset = 0;
parser->item_length = 0;
+ Curl_dyn_init(&parser->file_data->buf, MAX_FTPLIST_BUFFER);
}
infop = parser->file_data;
finfo = &infop->info;
- finfo->b_data[finfo->b_used++] = c;
-
- if(finfo->b_used >= finfo->b_size - 1) {
- /* if it is important, extend buffer space for file data */
- char *tmp = realloc(finfo->b_data,
- finfo->b_size + FTP_BUFFER_ALLOCSIZE);
- if(tmp) {
- finfo->b_size += FTP_BUFFER_ALLOCSIZE;
- finfo->b_data = tmp;
- }
- else {
- Curl_fileinfo_cleanup(parser->file_data);
- parser->file_data = NULL;
- parser->error = CURLE_OUT_OF_MEMORY;
- goto fail;
- }
+
+ if(Curl_dyn_addn(&infop->buf, &c, 1)) {
+ parser->error = CURLE_OUT_OF_MEMORY;
+ goto fail;
}
+ len = Curl_dyn_len(&infop->buf);
+ mem = Curl_dyn_ptr(&infop->buf);
switch(parser->os_type) {
case OS_TYPE_UNIX:
@@ -406,7 +427,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
else {
parser->state.UNIX.main = PL_UNIX_FILETYPE;
/* start FSM again not considering size of directory */
- finfo->b_used = 0;
+ Curl_dyn_reset(&infop->buf);
continue;
}
break;
@@ -414,12 +435,12 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
parser->item_length++;
if(c == '\r') {
parser->item_length--;
- finfo->b_used--;
+ Curl_dyn_setlen(&infop->buf, --len);
}
else if(c == '\n') {
- finfo->b_data[parser->item_length - 1] = 0;
- if(strncmp("total ", finfo->b_data, 6) == 0) {
- char *endptr = finfo->b_data + 6;
+ mem[parser->item_length - 1] = 0;
+ if(!strncmp("total ", mem, 6)) {
+ char *endptr = mem + 6;
/* here we can deal with directory size, pass the leading
whitespace and then the digits */
while(ISBLANK(*endptr))
@@ -431,7 +452,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
goto fail;
}
parser->state.UNIX.main = PL_UNIX_FILETYPE;
- finfo->b_used = 0;
+ Curl_dyn_reset(&infop->buf);
}
else {
parser->error = CURLE_FTP_BAD_FILE_LIST;
@@ -489,8 +510,8 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
parser->error = CURLE_FTP_BAD_FILE_LIST;
goto fail;
}
- finfo->b_data[10] = 0; /* terminate permissions */
- perm = ftp_pl_get_permission(finfo->b_data + parser->item_offset);
+ mem[10] = 0; /* terminate permissions */
+ perm = ftp_pl_get_permission(mem + parser->item_offset);
if(perm & FTP_LP_MALFORMATED_PERM) {
parser->error = CURLE_FTP_BAD_FILE_LIST;
goto fail;
@@ -508,8 +529,8 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
switch(parser->state.UNIX.sub.hlinks) {
case PL_UNIX_HLINKS_PRESPACE:
if(c != ' ') {
- if(c >= '0' && c <= '9') {
- parser->item_offset = finfo->b_used - 1;
+ if(ISDIGIT(c)) {
+ parser->item_offset = len - 1;
parser->item_length = 1;
parser->state.UNIX.sub.hlinks = PL_UNIX_HLINKS_NUMBER;
}
@@ -524,8 +545,8 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
if(c == ' ') {
char *p;
long int hlinks;
- finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
- hlinks = strtol(finfo->b_data + parser->item_offset, &p, 10);
+ mem[parser->item_offset + parser->item_length - 1] = 0;
+ hlinks = strtol(mem + parser->item_offset, &p, 10);
if(p[0] == '\0' && hlinks != LONG_MAX && hlinks != LONG_MIN) {
parser->file_data->info.flags |= CURLFINFOFLAG_KNOWN_HLINKCOUNT;
parser->file_data->info.hardlinks = hlinks;
@@ -535,7 +556,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
parser->state.UNIX.main = PL_UNIX_USER;
parser->state.UNIX.sub.user = PL_UNIX_USER_PRESPACE;
}
- else if(c < '0' || c > '9') {
+ else if(!ISDIGIT(c)) {
parser->error = CURLE_FTP_BAD_FILE_LIST;
goto fail;
}
@@ -546,7 +567,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
switch(parser->state.UNIX.sub.user) {
case PL_UNIX_USER_PRESPACE:
if(c != ' ') {
- parser->item_offset = finfo->b_used - 1;
+ parser->item_offset = len - 1;
parser->item_length = 1;
parser->state.UNIX.sub.user = PL_UNIX_USER_PARSING;
}
@@ -554,7 +575,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
case PL_UNIX_USER_PARSING:
parser->item_length++;
if(c == ' ') {
- finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
+ mem[parser->item_offset + parser->item_length - 1] = 0;
parser->offsets.user = parser->item_offset;
parser->state.UNIX.main = PL_UNIX_GROUP;
parser->state.UNIX.sub.group = PL_UNIX_GROUP_PRESPACE;
@@ -568,7 +589,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
switch(parser->state.UNIX.sub.group) {
case PL_UNIX_GROUP_PRESPACE:
if(c != ' ') {
- parser->item_offset = finfo->b_used - 1;
+ parser->item_offset = len - 1;
parser->item_length = 1;
parser->state.UNIX.sub.group = PL_UNIX_GROUP_NAME;
}
@@ -576,7 +597,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
case PL_UNIX_GROUP_NAME:
parser->item_length++;
if(c == ' ') {
- finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
+ mem[parser->item_offset + parser->item_length - 1] = 0;
parser->offsets.group = parser->item_offset;
parser->state.UNIX.main = PL_UNIX_SIZE;
parser->state.UNIX.sub.size = PL_UNIX_SIZE_PRESPACE;
@@ -590,8 +611,8 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
switch(parser->state.UNIX.sub.size) {
case PL_UNIX_SIZE_PRESPACE:
if(c != ' ') {
- if(c >= '0' && c <= '9') {
- parser->item_offset = finfo->b_used - 1;
+ if(ISDIGIT(c)) {
+ parser->item_offset = len - 1;
parser->item_length = 1;
parser->state.UNIX.sub.size = PL_UNIX_SIZE_NUMBER;
}
@@ -606,8 +627,8 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
if(c == ' ') {
char *p;
curl_off_t fsize;
- finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
- if(!curlx_strtoofft(finfo->b_data + parser->item_offset,
+ mem[parser->item_offset + parser->item_length - 1] = 0;
+ if(!curlx_strtoofft(mem + parser->item_offset,
&p, 10, &fsize)) {
if(p[0] == '\0' && fsize != CURL_OFF_T_MAX &&
fsize != CURL_OFF_T_MIN) {
@@ -632,7 +653,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
case PL_UNIX_TIME_PREPART1:
if(c != ' ') {
if(ISALNUM(c)) {
- parser->item_offset = finfo->b_used -1;
+ parser->item_offset = len -1;
parser->item_length = 1;
parser->state.UNIX.sub.time = PL_UNIX_TIME_PART1;
}
@@ -689,10 +710,10 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
case PL_UNIX_TIME_PART3:
parser->item_length++;
if(c == ' ') {
- finfo->b_data[parser->item_offset + parser->item_length -1] = 0;
+ mem[parser->item_offset + parser->item_length -1] = 0;
parser->offsets.time = parser->item_offset;
/*
- if(ftp_pl_gettime(parser, finfo->b_data + parser->item_offset)) {
+ if(ftp_pl_gettime(parser, finfo->mem + parser->item_offset)) {
parser->file_data->flags |= CURLFINFOFLAG_KNOWN_TIME;
}
*/
@@ -716,7 +737,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
switch(parser->state.UNIX.sub.filename) {
case PL_UNIX_FILENAME_PRESPACE:
if(c != ' ') {
- parser->item_offset = finfo->b_used - 1;
+ parser->item_offset = len - 1;
parser->item_length = 1;
parser->state.UNIX.sub.filename = PL_UNIX_FILENAME_NAME;
}
@@ -727,7 +748,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
parser->state.UNIX.sub.filename = PL_UNIX_FILENAME_WINDOWSEOL;
}
else if(c == '\n') {
- finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
+ mem[parser->item_offset + parser->item_length - 1] = 0;
parser->offsets.filename = parser->item_offset;
parser->state.UNIX.main = PL_UNIX_FILETYPE;
result = ftp_pl_insert_finfo(data, infop);
@@ -739,7 +760,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
break;
case PL_UNIX_FILENAME_WINDOWSEOL:
if(c == '\n') {
- finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
+ mem[parser->item_offset + parser->item_length - 1] = 0;
parser->offsets.filename = parser->item_offset;
parser->state.UNIX.main = PL_UNIX_FILETYPE;
result = ftp_pl_insert_finfo(data, infop);
@@ -759,7 +780,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
switch(parser->state.UNIX.sub.symlink) {
case PL_UNIX_SYMLINK_PRESPACE:
if(c != ' ') {
- parser->item_offset = finfo->b_used - 1;
+ parser->item_offset = len - 1;
parser->item_length = 1;
parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_NAME;
}
@@ -805,7 +826,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
if(c == ' ') {
parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_PRETARGET4;
/* now place where is symlink following */
- finfo->b_data[parser->item_offset + parser->item_length - 4] = 0;
+ mem[parser->item_offset + parser->item_length - 4] = 0;
parser->offsets.filename = parser->item_offset;
parser->item_length = 0;
parser->item_offset = 0;
@@ -821,7 +842,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
case PL_UNIX_SYMLINK_PRETARGET4:
if(c != '\r' && c != '\n') {
parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_TARGET;
- parser->item_offset = finfo->b_used - 1;
+ parser->item_offset = len - 1;
parser->item_length = 1;
}
else {
@@ -835,7 +856,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_WINDOWSEOL;
}
else if(c == '\n') {
- finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
+ mem[parser->item_offset + parser->item_length - 1] = 0;
parser->offsets.symlink_target = parser->item_offset;
result = ftp_pl_insert_finfo(data, infop);
if(result) {
@@ -847,7 +868,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
break;
case PL_UNIX_SYMLINK_WINDOWSEOL:
if(c == '\n') {
- finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
+ mem[parser->item_offset + parser->item_length - 1] = 0;
parser->offsets.symlink_target = parser->item_offset;
result = ftp_pl_insert_finfo(data, infop);
if(result) {
@@ -901,7 +922,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
case PL_WINNT_TIME_TIME:
if(c == ' ') {
parser->offsets.time = parser->item_offset;
- finfo->b_data[parser->item_offset + parser->item_length -1] = 0;
+ mem[parser->item_offset + parser->item_length -1] = 0;
parser->state.NT.main = PL_WINNT_DIRORSIZE;
parser->state.NT.sub.dirorsize = PL_WINNT_DIRORSIZE_PRESPACE;
parser->item_length = 0;
@@ -917,7 +938,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
switch(parser->state.NT.sub.dirorsize) {
case PL_WINNT_DIRORSIZE_PRESPACE:
if(c != ' ') {
- parser->item_offset = finfo->b_used - 1;
+ parser->item_offset = len - 1;
parser->item_length = 1;
parser->state.NT.sub.dirorsize = PL_WINNT_DIRORSIZE_CONTENT;
}
@@ -925,14 +946,14 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
case PL_WINNT_DIRORSIZE_CONTENT:
parser->item_length ++;
if(c == ' ') {
- finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
- if(strcmp("<DIR>", finfo->b_data + parser->item_offset) == 0) {
+ mem[parser->item_offset + parser->item_length - 1] = 0;
+ if(strcmp("<DIR>", mem + parser->item_offset) == 0) {
finfo->filetype = CURLFILETYPE_DIRECTORY;
finfo->size = 0;
}
else {
char *endptr;
- if(curlx_strtoofft(finfo->b_data +
+ if(curlx_strtoofft(mem +
parser->item_offset,
&endptr, 10, &finfo->size)) {
parser->error = CURLE_FTP_BAD_FILE_LIST;
@@ -954,7 +975,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
switch(parser->state.NT.sub.filename) {
case PL_WINNT_FILENAME_PRESPACE:
if(c != ' ') {
- parser->item_offset = finfo->b_used -1;
+ parser->item_offset = len -1;
parser->item_length = 1;
parser->state.NT.sub.filename = PL_WINNT_FILENAME_CONTENT;
}
@@ -963,11 +984,11 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
parser->item_length++;
if(c == '\r') {
parser->state.NT.sub.filename = PL_WINNT_FILENAME_WINEOL;
- finfo->b_data[finfo->b_used - 1] = 0;
+ mem[len - 1] = 0;
}
else if(c == '\n') {
parser->offsets.filename = parser->item_offset;
- finfo->b_data[finfo->b_used - 1] = 0;
+ mem[len - 1] = 0;
result = ftp_pl_insert_finfo(data, infop);
if(result) {
parser->error = result;
diff --git a/lib/ftplistparser.h b/lib/ftplistparser.h
index 0a8054341..5ba1f6a97 100644
--- a/lib/ftplistparser.h
+++ b/lib/ftplistparser.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -39,5 +39,39 @@ struct ftp_parselist_data *Curl_ftp_parselist_data_alloc(void);
void Curl_ftp_parselist_data_free(struct ftp_parselist_data **pl_data);
+/* list of wildcard process states */
+typedef enum {
+ CURLWC_CLEAR = 0,
+ CURLWC_INIT = 1,
+ CURLWC_MATCHING, /* library is trying to get list of addresses for
+ downloading */
+ CURLWC_DOWNLOADING,
+ CURLWC_CLEAN, /* deallocate resources and reset settings */
+ CURLWC_SKIP, /* skip over concrete file */
+ CURLWC_ERROR, /* error cases */
+ CURLWC_DONE /* if is wildcard->state == CURLWC_DONE wildcard loop
+ will end */
+} wildcard_states;
+
+typedef void (*wildcard_dtor)(void *ptr);
+
+/* struct keeping information about wildcard download process */
+struct WildcardData {
+ char *path; /* path to the directory, where we trying wildcard-match */
+ char *pattern; /* wildcard pattern */
+ struct Curl_llist filelist; /* llist with struct Curl_fileinfo */
+ struct ftp_wc *ftpwc; /* pointer to FTP wildcard data */
+ wildcard_dtor dtor;
+ unsigned char state; /* wildcard_states */
+};
+
+CURLcode Curl_wildcard_init(struct WildcardData *wc);
+void Curl_wildcard_dtor(struct WildcardData **wcp);
+
+struct Curl_easy;
+
+#else
+/* FTP is disabled */
+#define Curl_wildcard_dtor(x)
#endif /* CURL_DISABLE_FTP */
#endif /* HEADER_CURL_FTPLISTPARSER_H */
diff --git a/lib/functypes.h b/lib/functypes.h
index 8891b1d5d..ea66d3281 100644
--- a/lib/functypes.h
+++ b/lib/functypes.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -38,7 +38,7 @@
2. For systems with config-*.h files, define them there.
*/
-#ifdef WIN32
+#ifdef _WIN32
/* int recv(SOCKET, char *, int, int) */
#define RECV_TYPE_ARG1 SOCKET
#define RECV_TYPE_ARG2 char *
diff --git a/lib/getenv.c b/lib/getenv.c
index 5f00fd13a..48ee97228 100644
--- a/lib/getenv.c
+++ b/lib/getenv.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -31,10 +31,11 @@
static char *GetEnv(const char *variable)
{
-#if defined(_WIN32_WCE) || defined(CURL_WINDOWS_APP)
+#if defined(_WIN32_WCE) || defined(CURL_WINDOWS_APP) || \
+ defined(__ORBIS__) || defined(__PROSPERO__) /* PlayStation 4 and 5 */
(void)variable;
return NULL;
-#elif defined(WIN32)
+#elif defined(_WIN32)
/* This uses Windows API instead of C runtime getenv() to get the environment
variable since some changes aren't always visible to the latter. #4774 */
char *buf = NULL;
diff --git a/lib/getinfo.c b/lib/getinfo.c
index c3556b310..f1574e097 100644
--- a/lib/getinfo.c
+++ b/lib/getinfo.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -415,6 +415,13 @@ static CURLcode getinfo_offt(struct Curl_easy *data, CURLINFO info,
case CURLINFO_RETRY_AFTER:
*param_offt = data->info.retry_after;
break;
+ case CURLINFO_XFER_ID:
+ *param_offt = data->id;
+ break;
+ case CURLINFO_CONN_ID:
+ *param_offt = data->conn?
+ data->conn->connection_id : data->state.recent_conn_id;
+ break;
default:
return CURLE_UNKNOWN_OPTION;
}
@@ -533,13 +540,7 @@ static CURLcode getinfo_slist(struct Curl_easy *data, CURLINFO info,
#ifdef USE_SSL
if(conn && tsi->backend != CURLSSLBACKEND_NONE) {
- unsigned int i;
- for(i = 0; i < (sizeof(conn->ssl) / sizeof(conn->ssl[0])); ++i) {
- if(conn->ssl[i].use) {
- tsi->internals = Curl_ssl->get_internals(&conn->ssl[i], info);
- break;
- }
- }
+ tsi->internals = Curl_ssl_get_internals(data, FIRSTSOCKET, info, 0);
}
#endif
}
diff --git a/lib/getinfo.h b/lib/getinfo.h
index 1b5e8c20f..56bb440b4 100644
--- a/lib/getinfo.h
+++ b/lib/getinfo.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/gopher.c b/lib/gopher.c
index 01f4bdef0..61e41b7e4 100644
--- a/lib/gopher.c
+++ b/lib/gopher.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -30,6 +30,7 @@
#include <curl/curl.h>
#include "transfer.h"
#include "sendf.h"
+#include "cfilters.h"
#include "connect.h"
#include "progress.h"
#include "gopher.h"
@@ -117,7 +118,9 @@ static CURLcode gopher_connect(struct Curl_easy *data, bool *done)
static CURLcode gopher_connecting(struct Curl_easy *data, bool *done)
{
struct connectdata *conn = data->conn;
- CURLcode result = Curl_ssl_connect(data, conn, FIRSTSOCKET);
+ CURLcode result;
+
+ result = Curl_conn_connect(data, FIRSTSOCKET, TRUE, done);
if(result)
connclose(conn, "Failed TLS connection");
*done = TRUE;
@@ -182,7 +185,7 @@ static CURLcode gopher_do(struct Curl_easy *data, bool *done)
if(strlen(sel) < 1)
break;
- result = Curl_write(data, sockfd, sel, k, &amount);
+ result = Curl_nwrite(data, FIRSTSOCKET, sel, k, &amount);
if(!result) { /* Which may not have written it all! */
result = Curl_client_write(data, CLIENTWRITE_HEADER, sel, amount);
if(result)
@@ -224,7 +227,7 @@ static CURLcode gopher_do(struct Curl_easy *data, bool *done)
free(sel_org);
if(!result)
- result = Curl_write(data, sockfd, "\r\n", 2, &amount);
+ result = Curl_nwrite(data, FIRSTSOCKET, "\r\n", 2, &amount);
if(result) {
failf(data, "Failed sending Gopher request");
return result;
@@ -236,4 +239,4 @@ static CURLcode gopher_do(struct Curl_easy *data, bool *done)
Curl_setup_transfer(data, FIRSTSOCKET, -1, FALSE, -1);
return CURLE_OK;
}
-#endif /*CURL_DISABLE_GOPHER*/
+#endif /* CURL_DISABLE_GOPHER */
diff --git a/lib/gopher.h b/lib/gopher.h
index 4ea269d2b..9e3365b71 100644
--- a/lib/gopher.h
+++ b/lib/gopher.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/h2h3.c b/lib/h2h3.c
deleted file mode 100644
index 50254ad0f..000000000
--- a/lib/h2h3.c
+++ /dev/null
@@ -1,309 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed 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 "curl_setup.h"
-#include "urldata.h"
-#include "h2h3.h"
-#include "transfer.h"
-#include "sendf.h"
-#include "strcase.h"
-
-/* The last 3 #include files should be in this order */
-#include "curl_printf.h"
-#include "curl_memory.h"
-#include "memdebug.h"
-
-/*
- * Curl_pseudo_headers() creates the array with pseudo headers to be
- * used in a HTTP/2 or HTTP/3 request.
- */
-
-#if defined(USE_NGHTTP2) || defined(ENABLE_QUIC)
-
-/* Index where :authority header field will appear in request header
- field list. */
-#define AUTHORITY_DST_IDX 3
-
-/* USHRT_MAX is 65535 == 0xffff */
-#define HEADER_OVERFLOW(x) \
- (x.namelen > 0xffff || x.valuelen > 0xffff - x.namelen)
-
-/*
- * Check header memory for the token "trailers".
- * Parse the tokens as separated by comma and surrounded by whitespace.
- * Returns TRUE if found or FALSE if not.
- */
-static bool contains_trailers(const char *p, size_t len)
-{
- const char *end = p + len;
- for(;;) {
- for(; p != end && (*p == ' ' || *p == '\t'); ++p)
- ;
- if(p == end || (size_t)(end - p) < sizeof("trailers") - 1)
- return FALSE;
- if(strncasecompare("trailers", p, sizeof("trailers") - 1)) {
- p += sizeof("trailers") - 1;
- for(; p != end && (*p == ' ' || *p == '\t'); ++p)
- ;
- if(p == end || *p == ',')
- return TRUE;
- }
- /* skip to next token */
- for(; p != end && *p != ','; ++p)
- ;
- if(p == end)
- return FALSE;
- ++p;
- }
-}
-
-typedef enum {
- /* Send header to server */
- HEADERINST_FORWARD,
- /* Don't send header to server */
- HEADERINST_IGNORE,
- /* Discard header, and replace it with "te: trailers" */
- HEADERINST_TE_TRAILERS
-} header_instruction;
-
-/* Decides how to treat given header field. */
-static header_instruction inspect_header(const char *name, size_t namelen,
- const char *value, size_t valuelen) {
- switch(namelen) {
- case 2:
- if(!strncasecompare("te", name, namelen))
- return HEADERINST_FORWARD;
-
- return contains_trailers(value, valuelen) ?
- HEADERINST_TE_TRAILERS : HEADERINST_IGNORE;
- case 7:
- return strncasecompare("upgrade", name, namelen) ?
- HEADERINST_IGNORE : HEADERINST_FORWARD;
- case 10:
- return (strncasecompare("connection", name, namelen) ||
- strncasecompare("keep-alive", name, namelen)) ?
- HEADERINST_IGNORE : HEADERINST_FORWARD;
- case 16:
- return strncasecompare("proxy-connection", name, namelen) ?
- HEADERINST_IGNORE : HEADERINST_FORWARD;
- case 17:
- return strncasecompare("transfer-encoding", name, namelen) ?
- HEADERINST_IGNORE : HEADERINST_FORWARD;
- default:
- return HEADERINST_FORWARD;
- }
-}
-
-CURLcode Curl_pseudo_headers(struct Curl_easy *data,
- const char *mem, /* the request */
- const size_t len /* size of request */,
- struct h2h3req **hp)
-{
- struct connectdata *conn = data->conn;
- size_t nheader = 0;
- size_t i;
- size_t authority_idx;
- char *hdbuf = (char *)mem;
- char *end, *line_end;
- struct h2h3pseudo *nva = NULL;
- struct h2h3req *hreq = NULL;
- char *vptr;
-
- /* Calculate number of headers contained in [mem, mem + len). Assumes a
- correctly generated HTTP header field block. */
- for(i = 1; i < len; ++i) {
- if(hdbuf[i] == '\n' && hdbuf[i - 1] == '\r') {
- ++nheader;
- ++i;
- }
- }
- if(nheader < 2) {
- goto fail;
- }
- /* We counted additional 2 \r\n in the first and last line. We need 3
- new headers: :method, :path and :scheme. Therefore we need one
- more space. */
- nheader += 1;
- hreq = malloc(sizeof(struct h2h3req) +
- sizeof(struct h2h3pseudo) * (nheader - 1));
- if(!hreq) {
- goto fail;
- }
-
- nva = &hreq->header[0];
-
- /* Extract :method, :path from request line
- We do line endings with CRLF so checking for CR is enough */
- line_end = memchr(hdbuf, '\r', len);
- if(!line_end) {
- goto fail;
- }
-
- /* Method does not contain spaces */
- end = memchr(hdbuf, ' ', line_end - hdbuf);
- if(!end || end == hdbuf)
- goto fail;
- nva[0].name = H2H3_PSEUDO_METHOD;
- nva[0].namelen = sizeof(H2H3_PSEUDO_METHOD) - 1;
- nva[0].value = hdbuf;
- nva[0].valuelen = (size_t)(end - hdbuf);
-
- hdbuf = end + 1;
-
- /* Path may contain spaces so scan backwards */
- end = NULL;
- for(i = (size_t)(line_end - hdbuf); i; --i) {
- if(hdbuf[i - 1] == ' ') {
- end = &hdbuf[i - 1];
- break;
- }
- }
- if(!end || end == hdbuf)
- goto fail;
- nva[1].name = H2H3_PSEUDO_PATH;
- nva[1].namelen = sizeof(H2H3_PSEUDO_PATH) - 1;
- nva[1].value = hdbuf;
- nva[1].valuelen = (end - hdbuf);
-
- nva[2].name = H2H3_PSEUDO_SCHEME;
- nva[2].namelen = sizeof(H2H3_PSEUDO_SCHEME) - 1;
- vptr = Curl_checkheaders(data, STRCONST(H2H3_PSEUDO_SCHEME));
- if(vptr) {
- vptr += sizeof(H2H3_PSEUDO_SCHEME);
- while(*vptr && ISBLANK(*vptr))
- vptr++;
- nva[2].value = vptr;
- infof(data, "set pseudo header %s to %s", H2H3_PSEUDO_SCHEME, vptr);
- }
- else {
- if(conn->handler->flags & PROTOPT_SSL)
- nva[2].value = "https";
- else
- nva[2].value = "http";
- }
- nva[2].valuelen = strlen((char *)nva[2].value);
-
- authority_idx = 0;
- i = 3;
- while(i < nheader) {
- size_t hlen;
-
- hdbuf = line_end + 2;
-
- /* check for next CR, but only within the piece of data left in the given
- buffer */
- line_end = memchr(hdbuf, '\r', len - (hdbuf - (char *)mem));
- if(!line_end || (line_end == hdbuf))
- goto fail;
-
- /* header continuation lines are not supported */
- if(*hdbuf == ' ' || *hdbuf == '\t')
- goto fail;
-
- for(end = hdbuf; end < line_end && *end != ':'; ++end)
- ;
- if(end == hdbuf || end == line_end)
- goto fail;
- hlen = end - hdbuf;
-
- if(hlen == 4 && strncasecompare("host", hdbuf, 4)) {
- authority_idx = i;
- nva[i].name = H2H3_PSEUDO_AUTHORITY;
- nva[i].namelen = sizeof(H2H3_PSEUDO_AUTHORITY) - 1;
- }
- else {
- nva[i].namelen = (size_t)(end - hdbuf);
- /* Lower case the header name for HTTP/3 */
- Curl_strntolower((char *)hdbuf, hdbuf, nva[i].namelen);
- nva[i].name = hdbuf;
- }
- hdbuf = end + 1;
- while(*hdbuf == ' ' || *hdbuf == '\t')
- ++hdbuf;
- end = line_end;
-
- switch(inspect_header((const char *)nva[i].name, nva[i].namelen, hdbuf,
- end - hdbuf)) {
- case HEADERINST_IGNORE:
- /* skip header fields prohibited by HTTP/2 specification. */
- --nheader;
- continue;
- case HEADERINST_TE_TRAILERS:
- nva[i].value = "trailers";
- nva[i].valuelen = sizeof("trailers") - 1;
- break;
- default:
- nva[i].value = hdbuf;
- nva[i].valuelen = (end - hdbuf);
- }
-
- ++i;
- }
-
- /* :authority must come before non-pseudo header fields */
- if(authority_idx && authority_idx != AUTHORITY_DST_IDX) {
- struct h2h3pseudo authority = nva[authority_idx];
- for(i = authority_idx; i > AUTHORITY_DST_IDX; --i) {
- nva[i] = nva[i - 1];
- }
- nva[i] = authority;
- }
-
- /* Warn stream may be rejected if cumulative length of headers is too
- large. */
-#define MAX_ACC 60000 /* <64KB to account for some overhead */
- {
- size_t acc = 0;
-
- for(i = 0; i < nheader; ++i) {
- acc += nva[i].namelen + nva[i].valuelen;
-
- infof(data, "h2h3 [%.*s: %.*s]",
- (int)nva[i].namelen, nva[i].name,
- (int)nva[i].valuelen, nva[i].value);
- }
-
- if(acc > MAX_ACC) {
- infof(data, "http_request: Warning: The cumulative length of all "
- "headers exceeds %d bytes and that could cause the "
- "stream to be rejected.", MAX_ACC);
- }
- }
-
- hreq->entries = nheader;
- *hp = hreq;
-
- return CURLE_OK;
-
- fail:
- free(hreq);
- return CURLE_OUT_OF_MEMORY;
-}
-
-void Curl_pseudo_free(struct h2h3req *hp)
-{
- free(hp);
-}
-
-#endif /* USE_NGHTTP2 or HTTP/3 enabled */
diff --git a/lib/h2h3.h b/lib/h2h3.h
deleted file mode 100644
index 84caec5d5..000000000
--- a/lib/h2h3.h
+++ /dev/null
@@ -1,61 +0,0 @@
-#ifndef HEADER_CURL_H2H3_H
-#define HEADER_CURL_H2H3_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed 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 "curl_setup.h"
-
-#define H2H3_PSEUDO_METHOD ":method"
-#define H2H3_PSEUDO_SCHEME ":scheme"
-#define H2H3_PSEUDO_AUTHORITY ":authority"
-#define H2H3_PSEUDO_PATH ":path"
-#define H2H3_PSEUDO_STATUS ":status"
-
-struct h2h3pseudo {
- const char *name;
- size_t namelen;
- const char *value;
- size_t valuelen;
-};
-
-struct h2h3req {
- size_t entries;
- struct h2h3pseudo header[1]; /* the array is allocated to contain entries */
-};
-
-/*
- * Curl_pseudo_headers() creates the array with pseudo headers to be
- * used in a HTTP/2 or HTTP/3 request. Returns an allocated struct.
- * Free it with Curl_pseudo_free().
- */
-CURLcode Curl_pseudo_headers(struct Curl_easy *data,
- const char *request,
- const size_t len,
- struct h2h3req **hp);
-
-/*
- * Curl_pseudo_free() frees a h2h3req struct.
- */
-void Curl_pseudo_free(struct h2h3req *hp);
-
-#endif /* HEADER_CURL_H2H3_H */
diff --git a/lib/hash.c b/lib/hash.c
index b6a2a33c7..30f28e235 100644
--- a/lib/hash.c
+++ b/lib/hash.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -330,7 +330,6 @@ Curl_hash_next_element(struct Curl_hash_iterator *iter)
struct Curl_hash_element *he = iter->current_element->ptr;
return he;
}
- iter->current_element = NULL;
return NULL;
}
diff --git a/lib/hash.h b/lib/hash.h
index 5b59bf111..9cfffc25b 100644
--- a/lib/hash.h
+++ b/lib/hash.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/headers.c b/lib/headers.c
index 978c918f4..3ff4d5eb0 100644
--- a/lib/headers.c
+++ b/lib/headers.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -38,14 +38,13 @@
/* Generate the curl_header struct for the user. This function MUST assign all
struct fields in the output struct. */
-static void copy_header_external(struct Curl_easy *data,
- struct Curl_header_store *hs,
+static void copy_header_external(struct Curl_header_store *hs,
size_t index,
size_t amount,
struct Curl_llist_element *e,
- struct curl_header **hout)
+ struct curl_header *hout)
{
- struct curl_header *h = *hout = &data->state.headerout;
+ struct curl_header *h = hout;
h->name = hs->name;
h->value = hs->value;
h->amount = amount;
@@ -118,7 +117,9 @@ CURLHcode curl_easy_header(CURL *easy,
return CURLHE_MISSING;
}
/* this is the name we want */
- copy_header_external(data, hs, nameindex, amount, e_pick, hout);
+ copy_header_external(hs, nameindex, amount, e_pick,
+ &data->state.headerout[0]);
+ *hout = &data->state.headerout[0];
return CURLHE_OK;
}
@@ -132,7 +133,6 @@ struct curl_header *curl_easy_nextheader(CURL *easy,
struct Curl_llist_element *pick;
struct Curl_llist_element *e;
struct Curl_header_store *hs;
- struct curl_header *hout;
size_t amount = 0;
size_t index = 0;
@@ -179,8 +179,9 @@ struct curl_header *curl_easy_nextheader(CURL *easy,
index = amount - 1;
}
- copy_header_external(data, hs, index, amount, pick, &hout);
- return hout;
+ copy_header_external(hs, index, amount, pick,
+ &data->state.headerout[1]);
+ return &data->state.headerout[1];
}
static CURLcode namevalue(char *header, size_t hlen, unsigned int type,
@@ -299,9 +300,16 @@ CURLcode Curl_headers_push(struct Curl_easy *data, const char *header,
if(data->state.prevhead)
/* line folding, append value to the previous header's value */
return unfold_value(data, header, hlen);
- else
- /* can't unfold without a previous header */
- return CURLE_BAD_FUNCTION_ARGUMENT;
+ else {
+ /* Can't unfold without a previous header. Instead of erroring, just
+ pass the leading blanks. */
+ while(hlen && ISBLANK(*header)) {
+ header++;
+ hlen--;
+ }
+ if(!hlen)
+ return CURLE_WEIRD_SERVER_REPLY;
+ }
}
hs = calloc(1, sizeof(*hs) + hlen);
@@ -324,7 +332,7 @@ CURLcode Curl_headers_push(struct Curl_easy *data, const char *header,
hs, &hs->node);
data->state.prevhead = hs;
return CURLE_OK;
- fail:
+fail:
free(hs);
return result;
}
@@ -335,6 +343,7 @@ CURLcode Curl_headers_push(struct Curl_easy *data, const char *header,
static void headers_init(struct Curl_easy *data)
{
Curl_llist_init(&data->state.httphdrs, NULL);
+ data->state.prevhead = NULL;
}
/*
diff --git a/lib/headers.h b/lib/headers.h
index 96332dbd0..a5229ea22 100644
--- a/lib/headers.h
+++ b/lib/headers.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/hmac.c b/lib/hmac.c
index dfb0db575..4019b67f8 100644
--- a/lib/hmac.c
+++ b/lib/hmac.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -26,7 +26,8 @@
#include "curl_setup.h"
-#ifndef CURL_DISABLE_CRYPTO_AUTH
+#if (defined(USE_CURL_NTLM_CORE) && !defined(USE_WINDOWS_SSPI)) \
+ || !defined(CURL_DISABLE_AWS) || !defined(CURL_DISABLE_DIGEST_AUTH)
#include <curl/curl.h>
@@ -169,4 +170,4 @@ CURLcode Curl_hmacit(const struct HMAC_params *hashparams,
return CURLE_OK;
}
-#endif /* CURL_DISABLE_CRYPTO_AUTH */
+#endif /* Using NTLM (without SSPI) or AWS */
diff --git a/lib/hostasyn.c b/lib/hostasyn.c
index 0bfbe2ef8..faf01c5f4 100644
--- a/lib/hostasyn.c
+++ b/lib/hostasyn.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -43,10 +43,6 @@
#include <inet.h>
#endif
-#ifdef HAVE_PROCESS_H
-#include <process.h>
-#endif
-
#include "urldata.h"
#include "sendf.h"
#include "hostip.h"
@@ -71,10 +67,11 @@ CURLcode Curl_addrinfo_callback(struct Curl_easy *data,
int status,
struct Curl_addrinfo *ai)
{
+ struct connectdata *conn = data->conn;
struct Curl_dns_entry *dns = NULL;
CURLcode result = CURLE_OK;
- data->state.async.status = status;
+ conn->resolve_async.status = status;
if(CURL_ASYNC_SUCCESS == status) {
if(ai) {
@@ -82,8 +79,8 @@ CURLcode Curl_addrinfo_callback(struct Curl_easy *data,
Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
dns = Curl_cache_addr(data, ai,
- data->state.async.hostname,
- data->state.async.port);
+ conn->resolve_async.hostname, 0,
+ conn->resolve_async.port);
if(data->share)
Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
@@ -98,12 +95,12 @@ CURLcode Curl_addrinfo_callback(struct Curl_easy *data,
}
}
- data->state.async.dns = dns;
+ conn->resolve_async.dns = dns;
/* Set async.done TRUE last in this function since it may be used multi-
threaded and once this is TRUE the other thread may read fields from the
async struct */
- data->state.async.done = TRUE;
+ conn->resolve_async.done = TRUE;
/* IPv4: The input hostent struct will be freed by ares when we return from
this function */
diff --git a/lib/hostip.c b/lib/hostip.c
index 941ecacf4..e7c318af7 100644
--- a/lib/hostip.c
+++ b/lib/hostip.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -41,16 +41,8 @@
#include <inet.h>
#endif
-#ifdef HAVE_SETJMP_H
#include <setjmp.h>
-#endif
-#ifdef HAVE_SIGNAL_H
#include <signal.h>
-#endif
-
-#ifdef HAVE_PROCESS_H
-#include <process.h>
-#endif
#include "urldata.h"
#include "sendf.h"
@@ -65,23 +57,25 @@
#include "doh.h"
#include "warnless.h"
#include "strcase.h"
+#include "easy_lock.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"
-#if defined(ENABLE_IPV6) && defined(CURL_OSX_CALL_COPYPROXIES)
-#include <SystemConfiguration/SCDynamicStoreCopySpecific.h>
-#endif
-
-#if defined(CURLRES_SYNCH) && \
- defined(HAVE_ALARM) && defined(SIGALRM) && defined(HAVE_SIGSETJMP)
+#if defined(CURLRES_SYNCH) && \
+ defined(HAVE_ALARM) && \
+ defined(SIGALRM) && \
+ defined(HAVE_SIGSETJMP) && \
+ defined(GLOBAL_INIT_IS_THREADSAFE)
/* alarm-based timeouts can only be used with all the dependencies satisfied */
#define USE_ALARM_TIMEOUT
#endif
#define MAX_HOSTCACHE_LEN (255 + 7) /* max FQDN + colon + port number + zero */
+#define MAX_DNS_CACHE_SIZE 29999
+
/*
* hostip.c explained
* ==================
@@ -123,18 +117,12 @@
static void freednsentry(void *freethis);
-/*
- * Return # of addresses in a Curl_addrinfo struct
- */
-int Curl_num_addresses(const struct Curl_addrinfo *addr)
-{
- int i = 0;
- while(addr) {
- addr = addr->ai_next;
- i++;
- }
- return i;
-}
+#ifndef CURL_DISABLE_VERBOSE_STRINGS
+static void show_resolve_info(struct Curl_easy *data,
+ struct Curl_dns_entry *dns);
+#else
+#define show_resolve_info(x,y) Curl_nop_stmt
+#endif
/*
* Curl_printable_address() stores a printable version of the 1st address
@@ -171,23 +159,31 @@ void Curl_printable_address(const struct Curl_addrinfo *ai, char *buf,
/*
* Create a hostcache id string for the provided host + port, to be used by
- * the DNS caching. Without alloc.
+ * the DNS caching. Without alloc. Return length of the id string.
*/
-static void
-create_hostcache_id(const char *name, int port, char *ptr, size_t buflen)
+static size_t
+create_hostcache_id(const char *name,
+ size_t nlen, /* 0 or actual name length */
+ int port, char *ptr, size_t buflen)
{
- size_t len = strlen(name);
+ size_t len = nlen ? nlen : strlen(name);
+ size_t olen = 0;
+ DEBUGASSERT(buflen >= MAX_HOSTCACHE_LEN);
if(len > (buflen - 7))
len = buflen - 7;
/* store and lower case the name */
- while(len--)
+ while(len--) {
*ptr++ = Curl_raw_tolower(*name++);
- msnprintf(ptr, 7, ":%u", port);
+ olen++;
+ }
+ olen += msnprintf(ptr, 7, ":%u", port);
+ return olen;
}
struct hostcache_prune_data {
- long cache_timeout;
time_t now;
+ time_t oldest; /* oldest time in cache not pruned. */
+ int cache_timeout;
};
/*
@@ -200,28 +196,40 @@ struct hostcache_prune_data {
static int
hostcache_timestamp_remove(void *datap, void *hc)
{
- struct hostcache_prune_data *data =
+ struct hostcache_prune_data *prune =
(struct hostcache_prune_data *) datap;
struct Curl_dns_entry *c = (struct Curl_dns_entry *) hc;
- return (0 != c->timestamp)
- && (data->now - c->timestamp >= data->cache_timeout);
+ if(c->timestamp) {
+ /* age in seconds */
+ time_t age = prune->now - c->timestamp;
+ if(age >= prune->cache_timeout)
+ return TRUE;
+ if(age > prune->oldest)
+ prune->oldest = age;
+ }
+ return FALSE;
}
/*
* Prune the DNS cache. This assumes that a lock has already been taken.
+ * Returns the 'age' of the oldest still kept entry.
*/
-static void
-hostcache_prune(struct Curl_hash *hostcache, long cache_timeout, time_t now)
+static time_t
+hostcache_prune(struct Curl_hash *hostcache, int cache_timeout,
+ time_t now)
{
struct hostcache_prune_data user;
user.cache_timeout = cache_timeout;
user.now = now;
+ user.oldest = 0;
Curl_hash_clean_with_criterium(hostcache,
(void *) &user,
hostcache_timestamp_remove);
+
+ return user.oldest;
}
/*
@@ -231,10 +239,11 @@ hostcache_prune(struct Curl_hash *hostcache, long cache_timeout, time_t now)
void Curl_hostcache_prune(struct Curl_easy *data)
{
time_t now;
+ /* the timeout may be set -1 (forever) */
+ int timeout = data->set.dns_cache_timeout;
- if((data->set.dns_cache_timeout == -1) || !data->dns.hostcache)
- /* cache forever means never prune, and NULL hostcache means
- we can't do it */
+ if(!data->dns.hostcache)
+ /* NULL hostcache means we can't do it */
return;
if(data->share)
@@ -242,20 +251,29 @@ void Curl_hostcache_prune(struct Curl_easy *data)
time(&now);
- /* Remove outdated and unused entries from the hostcache */
- hostcache_prune(data->dns.hostcache,
- data->set.dns_cache_timeout,
- now);
+ do {
+ /* Remove outdated and unused entries from the hostcache */
+ time_t oldest = hostcache_prune(data->dns.hostcache, timeout, now);
+
+ if(oldest < INT_MAX)
+ timeout = (int)oldest; /* we know it fits */
+ else
+ timeout = INT_MAX - 1;
+
+ /* if the cache size is still too big, use the oldest age as new
+ prune limit */
+ } while(timeout && (data->dns.hostcache->size > MAX_DNS_CACHE_SIZE));
if(data->share)
Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
}
-#ifdef HAVE_SIGSETJMP
+#ifdef USE_ALARM_TIMEOUT
/* Beware this is a global and unique instance. This is used to store the
return address that we can jump back to from inside a signal handler. This
is not thread-safe stuff. */
-sigjmp_buf curl_jmpenv;
+static sigjmp_buf curl_jmpenv;
+static curl_simple_lock curl_jmpenv_lock;
#endif
/* lookup address, returns entry if found and not stale */
@@ -264,20 +282,18 @@ static struct Curl_dns_entry *fetch_addr(struct Curl_easy *data,
int port)
{
struct Curl_dns_entry *dns = NULL;
- size_t entry_len;
char entry_id[MAX_HOSTCACHE_LEN];
/* Create an entry id, based upon the hostname and port */
- create_hostcache_id(hostname, port, entry_id, sizeof(entry_id));
- entry_len = strlen(entry_id);
+ size_t entry_len = create_hostcache_id(hostname, 0, port,
+ entry_id, sizeof(entry_id));
/* See if its already in our dns cache */
dns = Curl_hash_pick(data->dns.hostcache, entry_id, entry_len + 1);
/* No entry found in cache, check if we might have a wildcard entry */
if(!dns && data->state.wildcard_resolve) {
- create_hostcache_id("*", port, entry_id, sizeof(entry_id));
- entry_len = strlen(entry_id);
+ entry_len = create_hostcache_id("*", 1, port, entry_id, sizeof(entry_id));
/* See if it's already in our dns cache */
dns = Curl_hash_pick(data->dns.hostcache, entry_id, entry_len + 1);
@@ -289,6 +305,7 @@ static struct Curl_dns_entry *fetch_addr(struct Curl_easy *data,
time(&user.now);
user.cache_timeout = data->set.dns_cache_timeout;
+ user.oldest = 0;
if(hostcache_timestamp_remove(&user, dns)) {
infof(data, "Hostname in DNS cache was stale, zapped");
@@ -361,6 +378,19 @@ Curl_fetch_addr(struct Curl_easy *data,
}
#ifndef CURL_DISABLE_SHUFFLE_DNS
+/*
+ * Return # of addresses in a Curl_addrinfo struct
+ */
+static int num_addresses(const struct Curl_addrinfo *addr)
+{
+ int i = 0;
+ while(addr) {
+ addr = addr->ai_next;
+ i++;
+ }
+ return i;
+}
+
UNITTEST CURLcode Curl_shuffle_addr(struct Curl_easy *data,
struct Curl_addrinfo **addr);
/*
@@ -379,7 +409,7 @@ UNITTEST CURLcode Curl_shuffle_addr(struct Curl_easy *data,
struct Curl_addrinfo **addr)
{
CURLcode result = CURLE_OK;
- const int num_addrs = Curl_num_addresses(*addr);
+ const int num_addrs = num_addresses(*addr);
if(num_addrs > 1) {
struct Curl_addrinfo **nodes;
@@ -442,6 +472,7 @@ struct Curl_dns_entry *
Curl_cache_addr(struct Curl_easy *data,
struct Curl_addrinfo *addr,
const char *hostname,
+ size_t hostlen, /* length or zero */
int port)
{
char entry_id[MAX_HOSTCACHE_LEN];
@@ -457,22 +488,27 @@ Curl_cache_addr(struct Curl_easy *data,
return NULL;
}
#endif
+ if(!hostlen)
+ hostlen = strlen(hostname);
/* Create a new cache entry */
- dns = calloc(1, sizeof(struct Curl_dns_entry));
+ dns = calloc(1, sizeof(struct Curl_dns_entry) + hostlen);
if(!dns) {
return NULL;
}
/* Create an entry id, based upon the hostname and port */
- create_hostcache_id(hostname, port, entry_id, sizeof(entry_id));
- entry_len = strlen(entry_id);
+ entry_len = create_hostcache_id(hostname, hostlen, port,
+ entry_id, sizeof(entry_id));
dns->inuse = 1; /* the cache has the first reference */
dns->addr = addr; /* this is the address(es) */
time(&dns->timestamp);
if(dns->timestamp == 0)
dns->timestamp = 1; /* zero indicates permanent CURLOPT_RESOLVE entry */
+ dns->hostport = port;
+ if(hostlen)
+ memcpy(dns->hostname, hostname, hostlen);
/* Store the resolved data in our DNS cache. */
dns2 = Curl_hash_add(data->dns.hostcache, entry_id, entry_len + 1,
@@ -497,7 +533,7 @@ static struct Curl_addrinfo *get_localhost6(int port, const char *name)
struct sockaddr_in6 sa6;
unsigned char ipv6[16];
unsigned short port16 = (unsigned short)(port & 0xffff);
- ca = calloc(sizeof(struct Curl_addrinfo) + ss_size + hostlen + 1, 1);
+ ca = calloc(1, sizeof(struct Curl_addrinfo) + ss_size + hostlen + 1);
if(!ca)
return NULL;
@@ -529,6 +565,7 @@ static struct Curl_addrinfo *get_localhost6(int port, const char *name)
static struct Curl_addrinfo *get_localhost(int port, const char *name)
{
struct Curl_addrinfo *ca;
+ struct Curl_addrinfo *ca6;
const size_t ss_size = sizeof(struct sockaddr_in);
const size_t hostlen = strlen(name);
struct sockaddr_in sa;
@@ -543,7 +580,7 @@ static struct Curl_addrinfo *get_localhost(int port, const char *name)
return NULL;
memcpy(&sa.sin_addr, &ipv4, sizeof(ipv4));
- ca = calloc(sizeof(struct Curl_addrinfo) + ss_size + hostlen + 1, 1);
+ ca = calloc(1, sizeof(struct Curl_addrinfo) + ss_size + hostlen + 1);
if(!ca)
return NULL;
ca->ai_flags = 0;
@@ -555,8 +592,12 @@ static struct Curl_addrinfo *get_localhost(int port, const char *name)
memcpy(ca->ai_addr, &sa, ss_size);
ca->ai_canonname = (char *)ca->ai_addr + ss_size;
strcpy(ca->ai_canonname, name);
- ca->ai_next = get_localhost6(port, name);
- return ca;
+
+ ca6 = get_localhost6(port, name);
+ if(!ca6)
+ return ca;
+ ca6->ai_next = ca;
+ return ca6;
}
#ifdef ENABLE_IPV6
@@ -568,7 +609,7 @@ bool Curl_ipv6works(struct Curl_easy *data)
if(data) {
/* the nature of most system is that IPv6 status doesn't come and go
during a program's lifetime so we only probe the first time and then we
- have the info kept for fast re-use */
+ have the info kept for fast reuse */
DEBUGASSERT(data);
DEBUGASSERT(data->multi);
if(data->multi->ipv6_up == IPV6_UNKNOWN) {
@@ -650,6 +691,14 @@ enum resolve_t Curl_resolv(struct Curl_easy *data,
CURLcode result;
enum resolve_t rc = CURLRESOLV_ERROR; /* default to failure */
struct connectdata *conn = data->conn;
+ /* We should intentionally error and not resolve .onion TLDs */
+ size_t hostname_len = strlen(hostname);
+ if(hostname_len >= 7 &&
+ (curl_strequal(&hostname[hostname_len - 6], ".onion") ||
+ curl_strequal(&hostname[hostname_len - 7], ".onion."))) {
+ failf(data, "Not resolving .onion address (RFC 7686)");
+ return CURLRESOLV_ERROR;
+ }
*entry = NULL;
#ifndef CURL_DISABLE_DOH
conn->bits.doh = FALSE; /* default is not */
@@ -692,7 +741,7 @@ enum resolve_t Curl_resolv(struct Curl_easy *data,
Curl_set_in_callback(data, true);
st = data->set.resolver_start(
#ifdef USE_CURL_ASYNC
- data->state.async.resolver,
+ conn->resolve_async.resolver,
#else
NULL,
#endif
@@ -703,23 +752,6 @@ enum resolve_t Curl_resolv(struct Curl_easy *data,
return CURLRESOLV_ERROR;
}
-#if defined(ENABLE_IPV6) && defined(CURL_OSX_CALL_COPYPROXIES)
- {
- /*
- * The automagic conversion from IPv4 literals to IPv6 literals only
- * works if the SCDynamicStoreCopyProxies system function gets called
- * first. As Curl currently doesn't support system-wide HTTP proxies, we
- * therefore don't use any value this function might return.
- *
- * This function is only available on a macOS and is not needed for
- * IPv4-only builds, hence the conditions above.
- */
- CFDictionaryRef dict = SCDynamicStoreCopyProxies(NULL);
- if(dict)
- CFRelease(dict);
- }
-#endif
-
#ifndef USE_RESOLVE_ON_IPS
/* First check if this is an IPv4 address string */
if(Curl_inet_pton(AF_INET, hostname, &in) > 0)
@@ -795,7 +827,7 @@ enum resolve_t Curl_resolv(struct Curl_easy *data,
Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
/* we got a response, store it in the cache */
- dns = Curl_cache_addr(data, addr, hostname, port);
+ dns = Curl_cache_addr(data, addr, hostname, 0, port);
if(data->share)
Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
@@ -803,8 +835,10 @@ enum resolve_t Curl_resolv(struct Curl_easy *data,
if(!dns)
/* returned failure, bail out nicely */
Curl_freeaddrinfo(addr);
- else
+ else {
rc = CURLRESOLV_RESOLVED;
+ show_resolve_info(data, dns);
+ }
}
}
@@ -819,10 +853,9 @@ enum resolve_t Curl_resolv(struct Curl_easy *data,
* execution. This effectively causes the remainder of the application to run
* within a signal handler which is nonportable and could lead to problems.
*/
-static
+CURL_NORETURN static
void alarmfunc(int sig)
{
- /* this is for "-ansi -Wall -pedantic" to stop complaining! (rabe) */
(void)sig;
siglongjmp(curl_jmpenv, 1);
}
@@ -902,6 +935,8 @@ enum resolve_t Curl_resolv_timeout(struct Curl_easy *data,
This should be the last thing we do before calling Curl_resolv(),
as otherwise we'd have to worry about variables that get modified
before we invoke Curl_resolv() (and thus use "volatile"). */
+ curl_simple_lock_lock(&curl_jmpenv_lock);
+
if(sigsetjmp(curl_jmpenv, 1)) {
/* this is coming from a siglongjmp() after an alarm signal */
failf(data, "name lookup timed out");
@@ -970,6 +1005,8 @@ clean_up:
#endif
#endif /* HAVE_SIGACTION */
+ curl_simple_lock_unlock(&curl_jmpenv_lock);
+
/* switch back the alarm() to either zero or to what it was before minus
the time we spent until now! */
if(prev_alarm) {
@@ -1063,8 +1100,7 @@ void Curl_hostcache_clean(struct Curl_easy *data,
CURLcode Curl_loadhostpairs(struct Curl_easy *data)
{
struct curl_slist *hostp;
- char hostname[256];
- int port = 0;
+ char *host_end;
/* Default is no wildcard found */
data->state.wildcard_resolve = false;
@@ -1074,18 +1110,25 @@ CURLcode Curl_loadhostpairs(struct Curl_easy *data)
if(!hostp->data)
continue;
if(hostp->data[0] == '-') {
+ unsigned long num = 0;
size_t entry_len;
-
- if(2 != sscanf(hostp->data + 1, "%255[^:]:%d", hostname, &port)) {
- infof(data, "Couldn't parse CURLOPT_RESOLVE removal entry '%s'",
+ size_t hlen = 0;
+ host_end = strchr(&hostp->data[1], ':');
+
+ if(host_end) {
+ hlen = host_end - &hostp->data[1];
+ num = strtoul(++host_end, NULL, 10);
+ if(!hlen || (num > 0xffff))
+ host_end = NULL;
+ }
+ if(!host_end) {
+ infof(data, "Bad syntax CURLOPT_RESOLVE removal entry '%s'",
hostp->data);
continue;
}
-
/* Create an entry id, based upon the hostname and port */
- create_hostcache_id(hostname, port, entry_id, sizeof(entry_id));
- entry_len = strlen(entry_id);
-
+ entry_len = create_hostcache_id(&hostp->data[1], hlen, (int)num,
+ entry_id, sizeof(entry_id));
if(data->share)
Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
@@ -1106,25 +1149,22 @@ CURLcode Curl_loadhostpairs(struct Curl_easy *data)
char *addr_begin;
char *addr_end;
char *port_ptr;
+ int port = 0;
char *end_ptr;
bool permanent = TRUE;
- char *host_begin;
- char *host_end;
unsigned long tmp_port;
bool error = true;
+ char *host_begin = hostp->data;
+ size_t hlen = 0;
- host_begin = hostp->data;
if(host_begin[0] == '+') {
host_begin++;
permanent = FALSE;
}
host_end = strchr(host_begin, ':');
- if(!host_end ||
- ((host_end - host_begin) >= (ptrdiff_t)sizeof(hostname)))
+ if(!host_end)
goto err;
-
- memcpy(hostname, host_begin, host_end - host_begin);
- hostname[host_end - host_begin] = '\0';
+ hlen = host_end - host_begin;
port_ptr = host_end + 1;
tmp_port = strtoul(port_ptr, &end_ptr, 10);
@@ -1191,7 +1231,7 @@ CURLcode Curl_loadhostpairs(struct Curl_easy *data)
goto err;
error = false;
- err:
+err:
if(error) {
failf(data, "Couldn't parse CURLOPT_RESOLVE entry '%s'",
hostp->data);
@@ -1200,8 +1240,8 @@ CURLcode Curl_loadhostpairs(struct Curl_easy *data)
}
/* Create an entry id, based upon the hostname and port */
- create_hostcache_id(hostname, port, entry_id, sizeof(entry_id));
- entry_len = strlen(entry_id);
+ entry_len = create_hostcache_id(host_begin, hlen, port,
+ entry_id, sizeof(entry_id));
if(data->share)
Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
@@ -1210,8 +1250,8 @@ CURLcode Curl_loadhostpairs(struct Curl_easy *data)
dns = Curl_hash_pick(data->dns.hostcache, entry_id, entry_len + 1);
if(dns) {
- infof(data, "RESOLVE %s:%d is - old addresses discarded",
- hostname, port);
+ infof(data, "RESOLVE %.*s:%d - old addresses discarded",
+ (int)hlen, host_begin, port);
/* delete old entry, there are two reasons for this
1. old entry may have different addresses.
2. even if entry with correct addresses is already in the cache,
@@ -1227,7 +1267,7 @@ CURLcode Curl_loadhostpairs(struct Curl_easy *data)
}
/* put this new host in the cache */
- dns = Curl_cache_addr(data, head, hostname, port);
+ dns = Curl_cache_addr(data, head, host_begin, hlen, port);
if(dns) {
if(permanent)
dns->timestamp = 0; /* mark as permanent */
@@ -1243,13 +1283,15 @@ CURLcode Curl_loadhostpairs(struct Curl_easy *data)
Curl_freeaddrinfo(head);
return CURLE_OUT_OF_MEMORY;
}
- infof(data, "Added %s:%d:%s to DNS cache%s",
- hostname, port, addresses, permanent ? "" : " (non-permanent)");
+#ifndef CURL_DISABLE_VERBOSE_STRINGS
+ infof(data, "Added %.*s:%d:%s to DNS cache%s",
+ (int)hlen, host_begin, port, addresses,
+ permanent ? "" : " (non-permanent)");
+#endif
/* Wildcard hostname */
- if(hostname[0] == '*' && hostname[1] == '\0') {
- infof(data, "RESOLVE %s:%d is wildcard, enabling wildcard checks",
- hostname, port);
+ if((hlen == 1) && (host_begin[0] == '*')) {
+ infof(data, "RESOLVE *:%d using wildcard", port);
data->state.wildcard_resolve = true;
}
}
@@ -1259,18 +1301,89 @@ CURLcode Curl_loadhostpairs(struct Curl_easy *data)
return CURLE_OK;
}
+#ifndef CURL_DISABLE_VERBOSE_STRINGS
+static void show_resolve_info(struct Curl_easy *data,
+ struct Curl_dns_entry *dns)
+{
+ struct Curl_addrinfo *a;
+ CURLcode result = CURLE_OK;
+#ifdef CURLRES_IPV6
+ struct dynbuf out[2];
+#else
+ struct dynbuf out[1];
+#endif
+ DEBUGASSERT(data);
+ DEBUGASSERT(dns);
+
+ if(!data->set.verbose ||
+ /* ignore no name or numerical IP addresses */
+ !dns->hostname[0] || Curl_host_is_ipnum(dns->hostname))
+ return;
+
+ a = dns->addr;
+
+ infof(data, "Host %s:%d was resolved.",
+ (dns->hostname[0] ? dns->hostname : "(none)"), dns->hostport);
+
+ Curl_dyn_init(&out[0], 1024);
+#ifdef CURLRES_IPV6
+ Curl_dyn_init(&out[1], 1024);
+#endif
+
+ while(a) {
+ if(
+#ifdef CURLRES_IPV6
+ a->ai_family == PF_INET6 ||
+#endif
+ a->ai_family == PF_INET) {
+ char buf[MAX_IPADR_LEN];
+ struct dynbuf *d = &out[(a->ai_family != PF_INET)];
+ Curl_printable_address(a, buf, sizeof(buf));
+ if(Curl_dyn_len(d))
+ result = Curl_dyn_addn(d, ", ", 2);
+ if(!result)
+ result = Curl_dyn_add(d, buf);
+ if(result) {
+ infof(data, "too many IP, can't show");
+ goto fail;
+ }
+ }
+ a = a->ai_next;
+ }
+
+#ifdef CURLRES_IPV6
+ infof(data, "IPv6: %s",
+ (Curl_dyn_len(&out[1]) ? Curl_dyn_ptr(&out[1]) : "(none)"));
+#endif
+ infof(data, "IPv4: %s",
+ (Curl_dyn_len(&out[0]) ? Curl_dyn_ptr(&out[0]) : "(none)"));
+
+fail:
+ Curl_dyn_free(&out[0]);
+#ifdef CURLRES_IPV6
+ Curl_dyn_free(&out[1]);
+#endif
+}
+#endif
+
CURLcode Curl_resolv_check(struct Curl_easy *data,
struct Curl_dns_entry **dns)
{
+ CURLcode result;
#if defined(CURL_DISABLE_DOH) && !defined(CURLRES_ASYNCH)
(void)data;
(void)dns;
#endif
#ifndef CURL_DISABLE_DOH
- if(data->conn->bits.doh)
- return Curl_doh_is_resolved(data, dns);
+ if(data->conn->bits.doh) {
+ result = Curl_doh_is_resolved(data, dns);
+ }
+ else
#endif
- return Curl_resolver_is_resolved(data, dns);
+ result = Curl_resolver_is_resolved(data, dns);
+ if(*dns)
+ show_resolve_info(data, *dns);
+ return result;
}
int Curl_resolv_getsock(struct Curl_easy *data,
@@ -1302,9 +1415,9 @@ CURLcode Curl_once_resolved(struct Curl_easy *data, bool *protocol_done)
struct connectdata *conn = data->conn;
#ifdef USE_CURL_ASYNC
- if(data->state.async.dns) {
- conn->dns_entry = data->state.async.dns;
- data->state.async.dns = NULL;
+ if(conn->resolve_async.dns) {
+ conn->dns_entry = conn->resolve_async.dns;
+ conn->resolve_async.dns = NULL;
}
#endif
@@ -1326,11 +1439,11 @@ CURLcode Curl_once_resolved(struct Curl_easy *data, bool *protocol_done)
#ifdef USE_CURL_ASYNC
CURLcode Curl_resolver_error(struct Curl_easy *data)
{
+ struct connectdata *conn = data->conn;
const char *host_or_proxy;
CURLcode result;
#ifndef CURL_DISABLE_PROXY
- struct connectdata *conn = data->conn;
if(conn->bits.httpproxy) {
host_or_proxy = "proxy";
result = CURLE_COULDNT_RESOLVE_PROXY;
@@ -1343,7 +1456,7 @@ CURLcode Curl_resolver_error(struct Curl_easy *data)
}
failf(data, "Could not resolve %s: %s", host_or_proxy,
- data->state.async.hostname);
+ conn->resolve_async.hostname);
return result;
}
diff --git a/lib/hostip.h b/lib/hostip.h
index 9d3170737..fb53a5776 100644
--- a/lib/hostip.h
+++ b/lib/hostip.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -30,14 +30,7 @@
#include "timeval.h" /* for timediff_t */
#include "asyn.h"
-#ifdef HAVE_SETJMP_H
#include <setjmp.h>
-#endif
-
-#ifdef NETWARE
-#undef in_addr_t
-#define in_addr_t unsigned long
-#endif
/* Allocate enough memory to hold the full name information structs and
* everything. OSF1 is known to require at least 8872 bytes. The buffer
@@ -71,6 +64,10 @@ struct Curl_dns_entry {
time_t timestamp;
/* use-counter, use Curl_resolv_unlock to release reference */
long inuse;
+ /* hostname port number that resolved to addr. */
+ int hostport;
+ /* hostname that resolved to addr. may be NULL (unix domain sockets). */
+ char hostname[1];
};
bool Curl_host_is_ipnum(const char *hostname);
@@ -137,9 +134,6 @@ void Curl_init_dnscache(struct Curl_hash *hash, int hashsize);
/* prune old entries from the DNS cache */
void Curl_hostcache_prune(struct Curl_easy *data);
-/* Return # of addresses in a Curl_addrinfo struct */
-int Curl_num_addresses(const struct Curl_addrinfo *addr);
-
/* IPv4 threadsafe resolve function used for synch and asynch builds */
struct Curl_addrinfo *Curl_ipv4_resolve_r(const char *hostname, int port);
@@ -183,7 +177,7 @@ Curl_fetch_addr(struct Curl_easy *data,
*/
struct Curl_dns_entry *
Curl_cache_addr(struct Curl_easy *data, struct Curl_addrinfo *addr,
- const char *hostname, int port);
+ const char *hostname, size_t hostlen, int port);
#ifndef INADDR_NONE
#define CURL_INADDR_NONE (in_addr_t) ~0
@@ -191,15 +185,6 @@ Curl_cache_addr(struct Curl_easy *data, struct Curl_addrinfo *addr,
#define CURL_INADDR_NONE INADDR_NONE
#endif
-#ifdef HAVE_SIGSETJMP
-/* Forward-declaration of variable defined in hostip.c. Beware this
- * is a global and unique instance. This is used to store the return
- * address that we can jump back to from inside a signal handler.
- * This is not thread-safe stuff.
- */
-extern sigjmp_buf curl_jmpenv;
-#endif
-
/*
* Function provided by the resolver backend to set DNS servers to use.
*/
diff --git a/lib/hostip4.c b/lib/hostip4.c
index 1dd54e879..9140180ff 100644
--- a/lib/hostip4.c
+++ b/lib/hostip4.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -43,10 +43,6 @@
#include <inet.h>
#endif
-#ifdef HAVE_PROCESS_H
-#include <process.h>
-#endif
-
#include "urldata.h"
#include "sendf.h"
#include "hostip.h"
@@ -125,14 +121,15 @@ struct Curl_addrinfo *Curl_getaddrinfo(struct Curl_easy *data,
struct Curl_addrinfo *Curl_ipv4_resolve_r(const char *hostname,
int port)
{
-#if !defined(HAVE_GETADDRINFO_THREADSAFE) && defined(HAVE_GETHOSTBYNAME_R_3)
+#if !(defined(HAVE_GETADDRINFO) && defined(HAVE_GETADDRINFO_THREADSAFE)) && \
+ defined(HAVE_GETHOSTBYNAME_R_3)
int res;
#endif
struct Curl_addrinfo *ai = NULL;
struct hostent *h = NULL;
struct hostent *buf = NULL;
-#if defined(HAVE_GETADDRINFO_THREADSAFE)
+#if defined(HAVE_GETADDRINFO) && defined(HAVE_GETADDRINFO_THREADSAFE)
struct addrinfo hints;
char sbuf[12];
char *sbufptr = NULL;
@@ -280,14 +277,16 @@ struct Curl_addrinfo *Curl_ipv4_resolve_r(const char *hostname,
h = NULL; /* set return code to NULL */
free(buf);
}
-#else /* HAVE_GETADDRINFO_THREADSAFE || HAVE_GETHOSTBYNAME_R */
+#else /* (HAVE_GETADDRINFO && HAVE_GETADDRINFO_THREADSAFE) ||
+ HAVE_GETHOSTBYNAME_R */
/*
* Here is code for platforms that don't have a thread safe
* getaddrinfo() nor gethostbyname_r() function or for which
* gethostbyname() is the preferred one.
*/
h = gethostbyname((void *)hostname);
-#endif /* HAVE_GETADDRINFO_THREADSAFE || HAVE_GETHOSTBYNAME_R */
+#endif /* (HAVE_GETADDRINFO && HAVE_GETADDRINFO_THREADSAFE) ||
+ HAVE_GETHOSTBYNAME_R */
if(h) {
ai = Curl_he2ai(h, port);
diff --git a/lib/hostip6.c b/lib/hostip6.c
index c62c254c7..18969a7a7 100644
--- a/lib/hostip6.c
+++ b/lib/hostip6.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -43,10 +43,6 @@
#include <inet.h>
#endif
-#ifdef HAVE_PROCESS_H
-#include <process.h>
-#endif
-
#include "urldata.h"
#include "sendf.h"
#include "hostip.h"
@@ -75,8 +71,7 @@ bool Curl_ipvalid(struct Curl_easy *data, struct connectdata *conn)
#if defined(CURLRES_SYNCH)
#ifdef DEBUG_ADDRINFO
-static void dump_addrinfo(struct connectdata *conn,
- const struct Curl_addrinfo *ai)
+static void dump_addrinfo(const struct Curl_addrinfo *ai)
{
printf("dump_addrinfo:\n");
for(; ai; ai = ai->ai_next) {
@@ -88,7 +83,7 @@ static void dump_addrinfo(struct connectdata *conn,
}
}
#else
-#define dump_addrinfo(x,y) Curl_nop_stmt
+#define dump_addrinfo(x) Curl_nop_stmt
#endif
/*
@@ -153,7 +148,7 @@ struct Curl_addrinfo *Curl_getaddrinfo(struct Curl_easy *data,
Curl_addrinfo_set_port(res, port);
}
- dump_addrinfo(conn, res);
+ dump_addrinfo(res);
return res;
}
diff --git a/lib/hostsyn.c b/lib/hostsyn.c
index ee54363bf..ca8b0758c 100644
--- a/lib/hostsyn.c
+++ b/lib/hostsyn.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -43,10 +43,6 @@
#include <inet.h>
#endif
-#ifdef HAVE_PROCESS_H
-#include <process.h>
-#endif
-
#include "urldata.h"
#include "sendf.h"
#include "hostip.h"
diff --git a/lib/hsts.c b/lib/hsts.c
index e3b686ebf..9314be294 100644
--- a/lib/hsts.c
+++ b/lib/hsts.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2020 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -39,7 +39,8 @@
#include "parsedate.h"
#include "fopen.h"
#include "rename.h"
-#include "strtoofft.h"
+#include "share.h"
+#include "strdup.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
@@ -57,7 +58,7 @@
/* to play well with debug builds, we can *set* a fixed time this will
return */
time_t deltatime; /* allow for "adjustments" for unit test purposes */
-static time_t debugtime(void *unused)
+static time_t hsts_debugtime(void *unused)
{
char *timestr = getenv("CURL_TIME");
(void)unused;
@@ -70,12 +71,13 @@ static time_t debugtime(void *unused)
}
return time(NULL);
}
-#define time(x) debugtime(x)
+#undef time
+#define time(x) hsts_debugtime(x)
#endif
struct hsts *Curl_hsts_init(void)
{
- struct hsts *h = calloc(sizeof(struct hsts), 1);
+ struct hsts *h = calloc(1, sizeof(struct hsts));
if(h) {
Curl_llist_init(&h->list, NULL);
}
@@ -107,7 +109,7 @@ void Curl_hsts_cleanup(struct hsts **hp)
static struct stsentry *hsts_entry(void)
{
- return calloc(sizeof(struct stsentry), 1);
+ return calloc(1, sizeof(struct stsentry));
}
static CURLcode hsts_create(struct hsts *h,
@@ -115,23 +117,30 @@ static CURLcode hsts_create(struct hsts *h,
bool subdomains,
curl_off_t expires)
{
- struct stsentry *sts = hsts_entry();
+ struct stsentry *sts;
char *duphost;
size_t hlen;
+ DEBUGASSERT(h);
+ DEBUGASSERT(hostname);
+
+ hlen = strlen(hostname);
+ if(hlen && (hostname[hlen - 1] == '.'))
+ /* strip off any trailing dot */
+ --hlen;
+ if(!hlen)
+ /* no host name left */
+ return CURLE_BAD_FUNCTION_ARGUMENT;
+
+ sts = hsts_entry();
if(!sts)
return CURLE_OUT_OF_MEMORY;
- duphost = strdup(hostname);
+ duphost = Curl_strndup(hostname, hlen);
if(!duphost) {
free(sts);
return CURLE_OUT_OF_MEMORY;
}
- hlen = strlen(duphost);
- if(duphost[hlen - 1] == '.')
- /* strip off trailing any dot */
- duphost[--hlen] = 0;
-
sts->host = duphost;
sts->expires = expires;
sts->includeSubDomains = subdomains;
@@ -158,7 +167,7 @@ CURLcode Curl_hsts_parse(struct hsts *h, const char *hostname,
do {
while(*p && ISBLANK(*p))
p++;
- if(Curl_strncasecompare("max-age=", p, 8)) {
+ if(strncasecompare("max-age=", p, 8)) {
bool quoted = FALSE;
CURLofft offt;
char *endp;
@@ -187,7 +196,7 @@ CURLcode Curl_hsts_parse(struct hsts *h, const char *hostname,
}
gotma = TRUE;
}
- else if(Curl_strncasecompare("includesubdomains", p, 17)) {
+ else if(strncasecompare("includesubdomains", p, 17)) {
if(gotinc)
return CURLE_BAD_FUNCTION_ARGUMENT;
subdomains = TRUE;
@@ -204,7 +213,7 @@ CURLcode Curl_hsts_parse(struct hsts *h, const char *hostname,
p++;
if(*p == ';')
p++;
- } while (*p);
+ } while(*p);
if(!gotma)
/* max-age is mandatory */
@@ -278,11 +287,11 @@ struct stsentry *Curl_hsts(struct hsts *h, const char *hostname,
if(ntail < hlen) {
size_t offs = hlen - ntail;
if((hostname[offs-1] == '.') &&
- Curl_strncasecompare(&hostname[offs], sts->host, ntail))
+ strncasecompare(&hostname[offs], sts->host, ntail))
return sts;
}
}
- if(Curl_strcasecompare(hostname, sts->host))
+ if(strcasecompare(hostname, sts->host))
return sts;
}
}
@@ -390,7 +399,7 @@ CURLcode Curl_hsts_save(struct Curl_easy *data, struct hsts *h,
unlink(tempstore);
}
free(tempstore);
- skipsave:
+skipsave:
if(data->set.hsts_write) {
/* if there's a write callback */
struct curl_index i; /* count */
@@ -426,14 +435,23 @@ static CURLcode hsts_add(struct hsts *h, char *line)
if(2 == rc) {
time_t expires = strcmp(date, UNLIMITED) ? Curl_getdate_capped(date) :
TIME_T_MAX;
- CURLcode result;
+ CURLcode result = CURLE_OK;
char *p = host;
bool subdomain = FALSE;
+ struct stsentry *e;
if(p[0] == '.') {
p++;
subdomain = TRUE;
}
- result = hsts_create(h, p, subdomain, expires);
+ /* only add it if not already present */
+ e = Curl_hsts(h, p, subdomain);
+ if(!e)
+ result = hsts_create(h, p, subdomain, expires);
+ else {
+ /* the same host name, use the largest expire time */
+ if(expires > e->expires)
+ e->expires = expires;
+ }
if(result)
return result;
}
@@ -525,7 +543,7 @@ static CURLcode hsts_load(struct hsts *h, const char *file)
}
return result;
- fail:
+fail:
Curl_safefree(h->filename);
fclose(fp);
return CURLE_OUT_OF_MEMORY;
@@ -552,4 +570,18 @@ CURLcode Curl_hsts_loadcb(struct Curl_easy *data, struct hsts *h)
return CURLE_OK;
}
+void Curl_hsts_loadfiles(struct Curl_easy *data)
+{
+ struct curl_slist *l = data->state.hstslist;
+ if(l) {
+ Curl_share_lock(data, CURL_LOCK_DATA_HSTS, CURL_LOCK_ACCESS_SINGLE);
+
+ while(l) {
+ (void)Curl_hsts_loadfile(data, data->hsts, l->data);
+ l = l->next;
+ }
+ Curl_share_unlock(data, CURL_LOCK_DATA_HSTS);
+ }
+}
+
#endif /* CURL_DISABLE_HTTP || CURL_DISABLE_HSTS */
diff --git a/lib/hsts.h b/lib/hsts.h
index 0e36a7756..d3431a5d7 100644
--- a/lib/hsts.h
+++ b/lib/hsts.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2020 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -59,9 +59,11 @@ CURLcode Curl_hsts_loadfile(struct Curl_easy *data,
struct hsts *h, const char *file);
CURLcode Curl_hsts_loadcb(struct Curl_easy *data,
struct hsts *h);
+void Curl_hsts_loadfiles(struct Curl_easy *data);
#else
#define Curl_hsts_cleanup(x)
#define Curl_hsts_loadcb(x,y) CURLE_OK
#define Curl_hsts_save(x,y,z)
+#define Curl_hsts_loadfiles(x)
#endif /* CURL_DISABLE_HTTP || CURL_DISABLE_HSTS */
#endif /* HEADER_CURL_HSTS_H */
diff --git a/lib/http.c b/lib/http.c
index f57859e8b..be6d442e8 100644
--- a/lib/http.c
+++ b/lib/http.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -62,6 +62,7 @@
#include "cookie.h"
#include "vauth/vauth.h"
#include "vtls/vtls.h"
+#include "vquic/vquic.h"
#include "http_digest.h"
#include "http_ntlm.h"
#include "curl_ntlm_wb.h"
@@ -70,6 +71,7 @@
#include "url.h"
#include "share.h"
#include "hostip.h"
+#include "dynhds.h"
#include "http.h"
#include "select.h"
#include "parsedate.h" /* for the week day and month names */
@@ -80,12 +82,14 @@
#include "http_proxy.h"
#include "warnless.h"
#include "http2.h"
+#include "cfilters.h"
#include "connect.h"
#include "strdup.h"
#include "altsvc.h"
#include "hsts.h"
#include "ws.h"
#include "c-hyper.h"
+#include "curl_ctype.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
@@ -101,18 +105,6 @@ static int http_getsock_do(struct Curl_easy *data,
curl_socket_t *socks);
static bool http_should_fail(struct Curl_easy *data);
-#ifndef CURL_DISABLE_PROXY
-static CURLcode add_haproxy_protocol_header(struct Curl_easy *data);
-#endif
-
-#ifdef USE_SSL
-static CURLcode https_connecting(struct Curl_easy *data, bool *done);
-static int https_getsock(struct Curl_easy *data,
- struct connectdata *conn,
- curl_socket_t *socks);
-#else
-#define https_connecting(x,y) CURLE_COULDNT_CONNECT
-#endif
static CURLcode http_setup_conn(struct Curl_easy *data,
struct connectdata *conn);
#ifdef USE_WEBSOCKETS
@@ -161,7 +153,7 @@ const struct Curl_handler Curl_handler_ws = {
http_getsock_do, /* doing_getsock */
ZERO_NULL, /* domore_getsock */
ZERO_NULL, /* perform_getsock */
- ZERO_NULL, /* disconnect */
+ Curl_ws_disconnect, /* disconnect */
ZERO_NULL, /* readwrite */
ZERO_NULL, /* connection_check */
ZERO_NULL, /* attach connection */
@@ -184,9 +176,9 @@ const struct Curl_handler Curl_handler_https = {
Curl_http_done, /* done */
ZERO_NULL, /* do_more */
Curl_http_connect, /* connect_it */
- https_connecting, /* connecting */
+ NULL, /* connecting */
ZERO_NULL, /* doing */
- https_getsock, /* proto_getsock */
+ NULL, /* proto_getsock */
http_getsock_do, /* doing_getsock */
ZERO_NULL, /* domore_getsock */
ZERO_NULL, /* perform_getsock */
@@ -209,13 +201,13 @@ const struct Curl_handler Curl_handler_wss = {
Curl_http_done, /* done */
ZERO_NULL, /* do_more */
Curl_http_connect, /* connect_it */
- https_connecting, /* connecting */
+ NULL, /* connecting */
ZERO_NULL, /* doing */
- https_getsock, /* proto_getsock */
+ NULL, /* proto_getsock */
http_getsock_do, /* doing_getsock */
ZERO_NULL, /* domore_getsock */
ZERO_NULL, /* perform_getsock */
- ZERO_NULL, /* disconnect */
+ Curl_ws_disconnect, /* disconnect */
ZERO_NULL, /* readwrite */
ZERO_NULL, /* connection_check */
ZERO_NULL, /* attach connection */
@@ -241,25 +233,15 @@ static CURLcode http_setup_conn(struct Curl_easy *data,
if(!http)
return CURLE_OUT_OF_MEMORY;
- Curl_mime_initpart(&http->form, data);
data->req.p.http = http;
+ connkeep(conn, "HTTP default");
- if(data->state.httpwant == CURL_HTTP_VERSION_3) {
- if(conn->handler->flags & PROTOPT_SSL)
- /* Only go HTTP/3 directly on HTTPS URLs. It needs a UDP socket and does
- the QUIC dance. */
- conn->transport = TRNSPRT_QUIC;
- else {
- failf(data, "HTTP/3 requested for non-HTTPS URL");
- return CURLE_URL_MALFORMAT;
- }
- }
- else {
- if(!CONN_INUSE(conn))
- /* if not already multi-using, setup connection details */
- Curl_http2_setup_conn(conn);
- Curl_http2_setup_req(data);
+ if(data->state.httpwant == CURL_HTTP_VERSION_3ONLY) {
+ CURLcode result = Curl_conn_may_http3(data, conn);
+ if(result)
+ return result;
}
+
return CURLE_OK;
}
@@ -359,6 +341,8 @@ char *Curl_copy_header_value(const char *header)
}
#ifndef CURL_DISABLE_HTTP_AUTH
+
+#ifndef CURL_DISABLE_BASIC_AUTH
/*
* http_output_basic() sets up an Authorization: header (or the proxy version)
* for HTTP Basic authentication.
@@ -415,11 +399,14 @@ static CURLcode http_output_basic(struct Curl_easy *data, bool proxy)
goto fail;
}
- fail:
+fail:
free(out);
return result;
}
+#endif
+
+#ifndef CURL_DISABLE_BEARER_AUTH
/*
* http_output_bearer() sets up an Authorization: header
* for HTTP Bearer authentication.
@@ -441,12 +428,14 @@ static CURLcode http_output_bearer(struct Curl_easy *data)
goto fail;
}
- fail:
+fail:
return result;
}
#endif
+#endif
+
/* pickoneauth() selects the most favourable authentication method from the
* ones available and the ones we want.
*
@@ -463,18 +452,26 @@ static bool pickoneauth(struct auth *pick, unsigned long mask)
of preference in case of the existence of multiple accepted types. */
if(avail & CURLAUTH_NEGOTIATE)
pick->picked = CURLAUTH_NEGOTIATE;
+#ifndef CURL_DISABLE_BEARER_AUTH
else if(avail & CURLAUTH_BEARER)
pick->picked = CURLAUTH_BEARER;
+#endif
+#ifndef CURL_DISABLE_DIGEST_AUTH
else if(avail & CURLAUTH_DIGEST)
pick->picked = CURLAUTH_DIGEST;
+#endif
else if(avail & CURLAUTH_NTLM)
pick->picked = CURLAUTH_NTLM;
else if(avail & CURLAUTH_NTLM_WB)
pick->picked = CURLAUTH_NTLM_WB;
+#ifndef CURL_DISABLE_BASIC_AUTH
else if(avail & CURLAUTH_BASIC)
pick->picked = CURLAUTH_BASIC;
+#endif
+#ifndef CURL_DISABLE_AWS
else if(avail & CURLAUTH_AWS_SIGV4)
pick->picked = CURLAUTH_AWS_SIGV4;
+#endif
else {
pick->picked = CURLAUTH_PICKNONE; /* we select to use nothing */
picked = FALSE;
@@ -555,7 +552,7 @@ static CURLcode http_perhapsrewind(struct Curl_easy *data,
}
}
- conn->bits.rewindaftersend = FALSE; /* default */
+ data->state.rewindbeforesend = FALSE; /* default */
if((expectsend == -1) || (expectsend > bytessent)) {
#if defined(USE_NTLM)
@@ -572,8 +569,8 @@ static CURLcode http_perhapsrewind(struct Curl_easy *data,
/* rewind data when completely done sending! */
if(!conn->bits.authneg && (conn->writesockfd != CURL_SOCKET_BAD)) {
- conn->bits.rewindaftersend = TRUE;
- infof(data, "Rewind stream after send");
+ data->state.rewindbeforesend = TRUE;
+ infof(data, "Rewind stream before next send");
}
return CURLE_OK;
@@ -600,8 +597,8 @@ static CURLcode http_perhapsrewind(struct Curl_easy *data,
/* rewind data when completely done sending! */
if(!conn->bits.authneg && (conn->writesockfd != CURL_SOCKET_BAD)) {
- conn->bits.rewindaftersend = TRUE;
- infof(data, "Rewind stream after send");
+ data->state.rewindbeforesend = TRUE;
+ infof(data, "Rewind stream before next send");
}
return CURLE_OK;
@@ -625,9 +622,11 @@ static CURLcode http_perhapsrewind(struct Curl_easy *data,
closure so we can safely do the rewind right now */
}
- if(bytessent)
- /* we rewind now at once since if we already sent something */
- return Curl_readrewind(data);
+ if(bytessent) {
+ /* mark for rewind since if we already sent something */
+ data->state.rewindbeforesend = TRUE;
+ infof(data, "Please rewind output before next send");
+ }
return CURLE_OK;
}
@@ -650,7 +649,7 @@ CURLcode Curl_http_auth_act(struct Curl_easy *data)
if(!data->set.str[STRING_BEARER])
authmask &= (unsigned long)~CURLAUTH_BEARER;
- if(100 <= data->req.httpcode && 199 >= data->req.httpcode)
+ if(100 <= data->req.httpcode && data->req.httpcode <= 199)
/* this is a transient response code, ignore */
return CURLE_OK;
@@ -684,7 +683,7 @@ CURLcode Curl_http_auth_act(struct Curl_easy *data)
if(pickhost || pickproxy) {
if((data->state.httpreq != HTTPREQ_GET) &&
(data->state.httpreq != HTTPREQ_HEAD) &&
- !conn->bits.rewindaftersend) {
+ !data->state.rewindbeforesend) {
result = http_perhapsrewind(data, conn);
if(result)
return result;
@@ -738,11 +737,11 @@ output_auth_headers(struct Curl_easy *data,
CURLcode result = CURLE_OK;
(void)conn;
-#ifdef CURL_DISABLE_CRYPTO_AUTH
+#ifdef CURL_DISABLE_DIGEST_AUTH
(void)request;
(void)path;
#endif
-#ifndef CURL_DISABLE_CRYPTO_AUTH
+#ifndef CURL_DISABLE_AWS
if(authstatus->picked == CURLAUTH_AWS_SIGV4) {
auth = "AWS_SIGV4";
result = Curl_output_aws_sigv4(data, proxy);
@@ -778,7 +777,7 @@ output_auth_headers(struct Curl_easy *data,
}
else
#endif
-#ifndef CURL_DISABLE_CRYPTO_AUTH
+#ifndef CURL_DISABLE_DIGEST_AUTH
if(authstatus->picked == CURLAUTH_DIGEST) {
auth = "Digest";
result = Curl_output_digest(data,
@@ -790,6 +789,7 @@ output_auth_headers(struct Curl_easy *data,
}
else
#endif
+#ifndef CURL_DISABLE_BASIC_AUTH
if(authstatus->picked == CURLAUTH_BASIC) {
/* Basic */
if(
@@ -809,6 +809,8 @@ output_auth_headers(struct Curl_easy *data,
functions work that way */
authstatus->done = TRUE;
}
+#endif
+#ifndef CURL_DISABLE_BEARER_AUTH
if(authstatus->picked == CURLAUTH_BEARER) {
/* Bearer */
if((!proxy && data->set.str[STRING_BEARER] &&
@@ -823,6 +825,7 @@ output_auth_headers(struct Curl_easy *data,
functions work that way */
authstatus->done = TRUE;
}
+#endif
if(auth) {
#ifndef CURL_DISABLE_PROXY
@@ -833,6 +836,7 @@ output_auth_headers(struct Curl_easy *data,
(data->state.aptr.user ?
data->state.aptr.user : ""));
#else
+ (void)proxy;
infof(data, "Server auth using %s with user '%s'",
auth, data->state.aptr.user ?
data->state.aptr.user : "");
@@ -842,7 +846,7 @@ output_auth_headers(struct Curl_easy *data,
else
authstatus->multipass = FALSE;
- return CURLE_OK;
+ return result;
}
/**
@@ -881,7 +885,12 @@ Curl_http_output_auth(struct Curl_easy *data,
#ifndef CURL_DISABLE_PROXY
(conn->bits.httpproxy && conn->bits.proxy_user_passwd) ||
#endif
- data->state.aptr.user || data->set.str[STRING_BEARER])
+ data->state.aptr.user ||
+#ifdef USE_SPNEGO
+ authhost->want & CURLAUTH_NEGOTIATE ||
+ authproxy->want & CURLAUTH_NEGOTIATE ||
+#endif
+ data->set.str[STRING_BEARER])
/* continue please */;
else {
authhost->done = TRUE;
@@ -962,17 +971,21 @@ Curl_http_output_auth(struct Curl_easy *data,
}
#endif
-/*
- * Curl_http_input_auth() deals with Proxy-Authenticate: and WWW-Authenticate:
- * headers. They are dealt with both in the transfer.c main loop and in the
- * proxy CONNECT loop.
- */
-
+#if defined(USE_SPNEGO) || defined(USE_NTLM) || \
+ !defined(CURL_DISABLE_DIGEST_AUTH) || \
+ !defined(CURL_DISABLE_BASIC_AUTH) || \
+ !defined(CURL_DISABLE_BEARER_AUTH)
static int is_valid_auth_separator(char ch)
{
return ch == '\0' || ch == ',' || ISSPACE(ch);
}
+#endif
+/*
+ * Curl_http_input_auth() deals with Proxy-Authenticate: and WWW-Authenticate:
+ * headers. They are dealt with both in the transfer.c main loop and in the
+ * proxy CONNECT loop.
+ */
CURLcode Curl_http_input_auth(struct Curl_easy *data, bool proxy,
const char *auth) /* the first non-space */
{
@@ -984,11 +997,15 @@ CURLcode Curl_http_input_auth(struct Curl_easy *data, bool proxy,
curlnegotiate *negstate = proxy ? &conn->proxy_negotiate_state :
&conn->http_negotiate_state;
#endif
+#if defined(USE_SPNEGO) || \
+ defined(USE_NTLM) || \
+ !defined(CURL_DISABLE_DIGEST_AUTH) || \
+ !defined(CURL_DISABLE_BASIC_AUTH) || \
+ !defined(CURL_DISABLE_BEARER_AUTH)
+
unsigned long *availp;
struct auth *authp;
- (void) conn; /* In case conditionals make it unused. */
-
if(proxy) {
availp = &data->info.proxyauthavail;
authp = &data->state.authproxy;
@@ -997,6 +1014,11 @@ CURLcode Curl_http_input_auth(struct Curl_easy *data, bool proxy,
availp = &data->info.httpauthavail;
authp = &data->state.authhost;
}
+#else
+ (void) proxy;
+#endif
+
+ (void) conn; /* In case conditionals make it unused. */
/*
* Here we check if we want the specific single authentication (using ==) and
@@ -1025,7 +1047,7 @@ CURLcode Curl_http_input_auth(struct Curl_easy *data, bool proxy,
if(authp->picked == CURLAUTH_NEGOTIATE) {
CURLcode result = Curl_input_negotiate(data, conn, proxy, auth);
if(!result) {
- DEBUGASSERT(!data->req.newurl);
+ free(data->req.newurl);
data->req.newurl = strdup(data->state.url);
if(!data->req.newurl)
return CURLE_OUT_OF_MEMORY;
@@ -1079,7 +1101,7 @@ CURLcode Curl_http_input_auth(struct Curl_easy *data, bool proxy,
}
else
#endif
-#ifndef CURL_DISABLE_CRYPTO_AUTH
+#ifndef CURL_DISABLE_DIGEST_AUTH
if(checkprefix("Digest", auth) && is_valid_auth_separator(auth[6])) {
if((authp->avail & CURLAUTH_DIGEST) != 0)
infof(data, "Ignoring duplicate digest auth header.");
@@ -1102,6 +1124,7 @@ CURLcode Curl_http_input_auth(struct Curl_easy *data, bool proxy,
}
else
#endif
+#ifndef CURL_DISABLE_BASIC_AUTH
if(checkprefix("Basic", auth) &&
is_valid_auth_separator(auth[5])) {
*availp |= CURLAUTH_BASIC;
@@ -1116,6 +1139,8 @@ CURLcode Curl_http_input_auth(struct Curl_easy *data, bool proxy,
}
}
else
+#endif
+#ifndef CURL_DISABLE_BEARER_AUTH
if(checkprefix("Bearer", auth) &&
is_valid_auth_separator(auth[6])) {
*availp |= CURLAUTH_BEARER;
@@ -1128,6 +1153,16 @@ CURLcode Curl_http_input_auth(struct Curl_easy *data, bool proxy,
data->state.authproblem = TRUE;
}
}
+#else
+ {
+ /*
+ * Empty block to terminate the if-else chain correctly.
+ *
+ * A semicolon would yield the same result here, but can cause a
+ * compiler warning when -Wextra is enabled.
+ */
+ }
+#endif
/* there may be multiple methods on one line, so keep reading */
while(*auth && *auth != ',') /* read up to the next comma */
@@ -1145,8 +1180,6 @@ CURLcode Curl_http_input_auth(struct Curl_easy *data, bool proxy,
* http_should_fail() determines whether an HTTP response has gotten us
* into an error state or not.
*
- * @param conn all information about the current connection
- *
* @retval FALSE communications should continue
*
* @retval TRUE communications should not continue
@@ -1233,15 +1266,15 @@ static size_t readmoredata(char *buffer,
size_t nitems,
void *userp)
{
- struct Curl_easy *data = (struct Curl_easy *)userp;
- struct HTTP *http = data->req.p.http;
+ struct HTTP *http = (struct HTTP *)userp;
+ struct Curl_easy *data = http->backup.data;
size_t fullsize = size * nitems;
if(!http->postsize)
/* nothing to return */
return 0;
- /* make sure that a HTTP request is never sent away chunked! */
+ /* make sure that an HTTP request is never sent away chunked! */
data->req.forbidchunk = (http->sending == HTTPSEND_REQUEST)?TRUE:FALSE;
if(data->set.max_send_speed &&
@@ -1286,26 +1319,23 @@ static size_t readmoredata(char *buffer,
*/
CURLcode Curl_buffer_send(struct dynbuf *in,
struct Curl_easy *data,
+ struct HTTP *http,
/* add the number of sent bytes to this
counter */
curl_off_t *bytes_written,
/* how much of the buffer contains body data */
curl_off_t included_body_bytes,
- int socketindex)
+ int sockindex)
{
ssize_t amount;
CURLcode result;
char *ptr;
size_t size;
struct connectdata *conn = data->conn;
- struct HTTP *http = data->req.p.http;
size_t sendsize;
- curl_socket_t sockfd;
size_t headersize;
- DEBUGASSERT(socketindex <= SECONDARYSOCKET);
-
- sockfd = conn->sock[socketindex];
+ DEBUGASSERT(sockindex <= SECONDARYSOCKET && sockindex >= 0);
/* The looping below is required since we use non-blocking sockets, but due
to the circumstances we will just loop and try again and again etc */
@@ -1320,10 +1350,10 @@ CURLcode Curl_buffer_send(struct dynbuf *in,
if((conn->handler->flags & PROTOPT_SSL
#ifndef CURL_DISABLE_PROXY
- || conn->http_proxy.proxytype == CURLPROXY_HTTPS
+ || IS_HTTPS_PROXY(conn->http_proxy.proxytype)
#endif
)
- && conn->httpversion != 20) {
+ && conn->httpversion < 20) {
/* Make sure this doesn't send more body bytes than what the max send
speed says. The request bytes do not count to the max speed.
*/
@@ -1387,9 +1417,25 @@ CURLcode Curl_buffer_send(struct dynbuf *in,
else
sendsize = size;
}
+
+ /* We currently cannot send more that this for http here:
+ * - if sending blocks, it return 0 as amount
+ * - we then whisk aside the `in` into the `http` struct
+ * and install our own `data->state.fread_func` that
+ * on subsequent calls reads `in` empty.
+ * - when the whisked away `in` is empty, the `fread_func`
+ * is restored to its original state.
+ * The problem is that `fread_func` can only return
+ * `upload_buffer_size` lengths. If the send we do here
+ * is larger and blocks, we do re-sending with smaller
+ * amounts of data and connection filters do not like
+ * that.
+ */
+ if(http && (sendsize > (size_t)data->set.upload_buffer_size))
+ sendsize = (size_t)data->set.upload_buffer_size;
}
- result = Curl_write(data, sockfd, ptr, sendsize, &amount);
+ result = Curl_nwrite(data, sockindex, ptr, sendsize, &amount);
if(!result) {
/*
@@ -1433,10 +1479,11 @@ CURLcode Curl_buffer_send(struct dynbuf *in,
http->backup.fread_in = data->state.in;
http->backup.postdata = http->postdata;
http->backup.postsize = http->postsize;
+ http->backup.data = data;
/* set the new pointers for the request-sending */
data->state.fread_func = (curl_read_callback)readmoredata;
- data->state.in = (void *)data;
+ data->state.in = (void *)http;
http->postdata = ptr;
http->postsize = (curl_off_t)size;
@@ -1445,7 +1492,6 @@ CURLcode Curl_buffer_send(struct dynbuf *in,
http->send_buffer = *in; /* copy the whole struct */
http->sending = HTTPSEND_REQUEST;
-
return CURLE_OK;
}
http->sending = HTTPSEND_BODY;
@@ -1539,48 +1585,13 @@ Curl_compareheader(const char *headerline, /* line to check */
*/
CURLcode Curl_http_connect(struct Curl_easy *data, bool *done)
{
- CURLcode result;
struct connectdata *conn = data->conn;
/* We default to persistent connections. We set this already in this connect
- function to make the re-use checks properly be able to check this bit. */
+ function to make the reuse checks properly be able to check this bit. */
connkeep(conn, "HTTP default");
-#ifndef CURL_DISABLE_PROXY
- /* the CONNECT procedure might not have been completed */
- result = Curl_proxy_connect(data, FIRSTSOCKET);
- if(result)
- return result;
-
- if(conn->bits.proxy_connect_closed)
- /* this is not an error, just part of the connection negotiation */
- return CURLE_OK;
-
- if(CONNECT_FIRSTSOCKET_PROXY_SSL())
- return CURLE_OK; /* wait for HTTPS proxy SSL initialization to complete */
-
- if(Curl_connect_ongoing(conn))
- /* nothing else to do except wait right now - we're not done here. */
- return CURLE_OK;
-
- if(data->set.haproxyprotocol) {
- /* add HAProxy PROXY protocol header */
- result = add_haproxy_protocol_header(data);
- if(result)
- return result;
- }
-#endif
-
- if(conn->given->flags & PROTOPT_SSL) {
- /* perform SSL initialization */
- result = https_connecting(data, done);
- if(result)
- return result;
- }
- else
- *done = TRUE;
-
- return CURLE_OK;
+ return Curl_conn_connect(data, FIRSTSOCKET, FALSE, done);
}
/* this returns the socket to wait for in the DO and DOING state for the multi
@@ -1591,80 +1602,11 @@ static int http_getsock_do(struct Curl_easy *data,
curl_socket_t *socks)
{
/* write mode */
- (void)data;
- socks[0] = conn->sock[FIRSTSOCKET];
+ (void)conn;
+ socks[0] = Curl_conn_get_socket(data, FIRSTSOCKET);
return GETSOCK_WRITESOCK(0);
}
-#ifndef CURL_DISABLE_PROXY
-static CURLcode add_haproxy_protocol_header(struct Curl_easy *data)
-{
- struct dynbuf req;
- CURLcode result;
- const char *tcp_version;
- DEBUGASSERT(data->conn);
- Curl_dyn_init(&req, DYN_HAXPROXY);
-
-#ifdef USE_UNIX_SOCKETS
- if(data->conn->unix_domain_socket)
- /* the buffer is large enough to hold this! */
- result = Curl_dyn_addn(&req, STRCONST("PROXY UNKNOWN\r\n"));
- else {
-#endif
- /* Emit the correct prefix for IPv6 */
- tcp_version = data->conn->bits.ipv6 ? "TCP6" : "TCP4";
-
- result = Curl_dyn_addf(&req, "PROXY %s %s %s %i %i\r\n",
- tcp_version,
- data->info.conn_local_ip,
- data->info.conn_primary_ip,
- data->info.conn_local_port,
- data->info.conn_primary_port);
-
-#ifdef USE_UNIX_SOCKETS
- }
-#endif
-
- if(!result)
- result = Curl_buffer_send(&req, data, &data->info.request_size,
- 0, FIRSTSOCKET);
- return result;
-}
-#endif
-
-#ifdef USE_SSL
-static CURLcode https_connecting(struct Curl_easy *data, bool *done)
-{
- CURLcode result;
- struct connectdata *conn = data->conn;
- DEBUGASSERT((data) && (data->conn->handler->flags & PROTOPT_SSL));
-
-#ifdef ENABLE_QUIC
- if(conn->transport == TRNSPRT_QUIC) {
- *done = TRUE;
- return CURLE_OK;
- }
-#endif
-
- /* perform SSL initialization for this socket */
- result = Curl_ssl_connect_nonblocking(data, conn, FALSE, FIRSTSOCKET, done);
- if(result)
- connclose(conn, "Failed HTTPS connection");
-
- return result;
-}
-
-static int https_getsock(struct Curl_easy *data,
- struct connectdata *conn,
- curl_socket_t *socks)
-{
- (void)data;
- if(conn->handler->flags & PROTOPT_SSL)
- return Curl_ssl->getsock(conn, socks);
- return GETSOCK_BLANK;
-}
-#endif /* USE_SSL */
-
/*
* Curl_http_done() gets called after a single HTTP request has been
* performed.
@@ -1681,8 +1623,6 @@ CURLcode Curl_http_done(struct Curl_easy *data,
data->state.authhost.multipass = FALSE;
data->state.authproxy.multipass = FALSE;
- Curl_unencode_cleanup(data);
-
/* set the proper values (possibly modified on POST) */
conn->seek_func = data->set.seek_func; /* restore */
conn->seek_client = data->set.seek_client; /* restore */
@@ -1691,9 +1631,6 @@ CURLcode Curl_http_done(struct Curl_easy *data,
return CURLE_OK;
Curl_dyn_free(&http->send_buffer);
- Curl_http2_done(data, premature);
- Curl_quic_done(data, premature);
- Curl_mime_cleanpart(&http->form);
Curl_dyn_reset(&data->state.headerb);
Curl_hyper_done(data);
Curl_ws_done(data);
@@ -1745,17 +1682,10 @@ bool Curl_use_http_1_1plus(const struct Curl_easy *data,
static const char *get_http_string(const struct Curl_easy *data,
const struct connectdata *conn)
{
-#ifdef ENABLE_QUIC
- if((data->state.httpwant == CURL_HTTP_VERSION_3) ||
- (conn->httpversion == 30))
+ if(Curl_conn_is_http3(data, conn, FIRSTSOCKET))
return "3";
-#endif
-
-#ifdef USE_NGHTTP2
- if(conn->proto.httpc.h2)
+ if(Curl_conn_is_http2(data, conn, FIRSTSOCKET))
return "2";
-#endif
-
if(Curl_use_http_1_1plus(data, conn))
return "1.1";
@@ -1769,8 +1699,6 @@ static CURLcode expect100(struct Curl_easy *data,
struct dynbuf *req)
{
CURLcode result = CURLE_OK;
- data->state.expect100header = FALSE; /* default to false unless it is set
- to TRUE below */
if(!data->state.disableexpect && Curl_use_http_1_1plus(data, conn) &&
(conn->httpversion < 20)) {
/* if not doing HTTP 1.0 or version 2, or disabled explicitly, we add an
@@ -1842,6 +1770,157 @@ CURLcode Curl_http_compile_trailers(struct curl_slist *trailers,
return result;
}
+static bool hd_name_eq(const char *n1, size_t n1len,
+ const char *n2, size_t n2len)
+{
+ if(n1len == n2len) {
+ return strncasecompare(n1, n2, n1len);
+ }
+ return FALSE;
+}
+
+CURLcode Curl_dynhds_add_custom(struct Curl_easy *data,
+ bool is_connect,
+ struct dynhds *hds)
+{
+ struct connectdata *conn = data->conn;
+ char *ptr;
+ struct curl_slist *h[2];
+ struct curl_slist *headers;
+ int numlists = 1; /* by default */
+ int i;
+
+#ifndef CURL_DISABLE_PROXY
+ enum proxy_use proxy;
+
+ if(is_connect)
+ proxy = HEADER_CONNECT;
+ else
+ proxy = conn->bits.httpproxy && !conn->bits.tunnel_proxy?
+ HEADER_PROXY:HEADER_SERVER;
+
+ switch(proxy) {
+ case HEADER_SERVER:
+ h[0] = data->set.headers;
+ break;
+ case HEADER_PROXY:
+ h[0] = data->set.headers;
+ if(data->set.sep_headers) {
+ h[1] = data->set.proxyheaders;
+ numlists++;
+ }
+ break;
+ case HEADER_CONNECT:
+ if(data->set.sep_headers)
+ h[0] = data->set.proxyheaders;
+ else
+ h[0] = data->set.headers;
+ break;
+ }
+#else
+ (void)is_connect;
+ h[0] = data->set.headers;
+#endif
+
+ /* loop through one or two lists */
+ for(i = 0; i < numlists; i++) {
+ for(headers = h[i]; headers; headers = headers->next) {
+ const char *name, *value;
+ size_t namelen, valuelen;
+
+ /* There are 2 quirks in place for custom headers:
+ * 1. setting only 'name:' to suppress a header from being sent
+ * 2. setting only 'name;' to send an empty (illegal) header
+ */
+ ptr = strchr(headers->data, ':');
+ if(ptr) {
+ name = headers->data;
+ namelen = ptr - headers->data;
+ ptr++; /* pass the colon */
+ while(*ptr && ISSPACE(*ptr))
+ ptr++;
+ if(*ptr) {
+ value = ptr;
+ valuelen = strlen(value);
+ }
+ else {
+ /* quirk #1, suppress this header */
+ continue;
+ }
+ }
+ else {
+ ptr = strchr(headers->data, ';');
+
+ if(!ptr) {
+ /* neither : nor ; in provided header value. We seem
+ * to ignore this silently */
+ continue;
+ }
+
+ name = headers->data;
+ namelen = ptr - headers->data;
+ ptr++; /* pass the semicolon */
+ while(*ptr && ISSPACE(*ptr))
+ ptr++;
+ if(!*ptr) {
+ /* quirk #2, send an empty header */
+ value = "";
+ valuelen = 0;
+ }
+ else {
+ /* this may be used for something else in the future,
+ * ignore this for now */
+ continue;
+ }
+ }
+
+ DEBUGASSERT(name && value);
+ if(data->state.aptr.host &&
+ /* a Host: header was sent already, don't pass on any custom Host:
+ header as that will produce *two* in the same request! */
+ hd_name_eq(name, namelen, STRCONST("Host:")))
+ ;
+ else if(data->state.httpreq == HTTPREQ_POST_FORM &&
+ /* this header (extended by formdata.c) is sent later */
+ hd_name_eq(name, namelen, STRCONST("Content-Type:")))
+ ;
+ else if(data->state.httpreq == HTTPREQ_POST_MIME &&
+ /* this header is sent later */
+ hd_name_eq(name, namelen, STRCONST("Content-Type:")))
+ ;
+ else if(conn->bits.authneg &&
+ /* while doing auth neg, don't allow the custom length since
+ we will force length zero then */
+ hd_name_eq(name, namelen, STRCONST("Content-Length:")))
+ ;
+ else if(data->state.aptr.te &&
+ /* when asking for Transfer-Encoding, don't pass on a custom
+ Connection: */
+ hd_name_eq(name, namelen, STRCONST("Connection:")))
+ ;
+ else if((conn->httpversion >= 20) &&
+ hd_name_eq(name, namelen, STRCONST("Transfer-Encoding:")))
+ /* HTTP/2 doesn't support chunked requests */
+ ;
+ else if((hd_name_eq(name, namelen, STRCONST("Authorization:")) ||
+ hd_name_eq(name, namelen, STRCONST("Cookie:"))) &&
+ /* be careful of sending this potentially sensitive header to
+ other hosts */
+ !Curl_auth_allowed_to_host(data))
+ ;
+ else {
+ CURLcode result;
+
+ result = Curl_dynhds_add(hds, name, namelen, value, valuelen);
+ if(result)
+ return result;
+ }
+ }
+ }
+
+ return CURLE_OK;
+}
+
CURLcode Curl_add_custom_headers(struct Curl_easy *data,
bool is_connect,
#ifndef USE_HYPER
@@ -2089,14 +2168,14 @@ void Curl_http_method(struct Curl_easy *data, struct connectdata *conn,
Curl_HttpReq httpreq = (Curl_HttpReq)data->state.httpreq;
const char *request;
if((conn->handler->protocol&(PROTO_FAMILY_HTTP|CURLPROTO_FTP)) &&
- data->set.upload)
+ data->state.upload)
httpreq = HTTPREQ_PUT;
/* Now set the 'request' pointer to the proper request string */
if(data->set.str[STRING_CUSTOMREQUEST])
request = data->set.str[STRING_CUSTOMREQUEST];
else {
- if(data->set.opt_no_body)
+ if(data->req.no_body)
request = "HEAD";
else {
DEBUGASSERT((httpreq >= HTTPREQ_GET) && (httpreq <= HTTPREQ_HEAD));
@@ -2140,8 +2219,9 @@ CURLcode Curl_http_useragent(struct Curl_easy *data)
CURLcode Curl_http_host(struct Curl_easy *data, struct connectdata *conn)
{
const char *ptr;
+ struct dynamically_allocated_data *aptr = &data->state.aptr;
if(!data->state.this_is_a_follow) {
- /* Free to avoid leaking memory on multiple requests*/
+ /* Free to avoid leaking memory on multiple requests */
free(data->state.first_host);
data->state.first_host = strdup(conn->host.name);
@@ -2151,7 +2231,7 @@ CURLcode Curl_http_host(struct Curl_easy *data, struct connectdata *conn)
data->state.first_remote_port = conn->remote_port;
data->state.first_remote_protocol = conn->handler->protocol;
}
- Curl_safefree(data->state.aptr.host);
+ Curl_safefree(aptr->host);
ptr = Curl_checkheaders(data, STRCONST("Host"));
if(ptr && (!data->state.this_is_a_follow ||
@@ -2186,19 +2266,16 @@ CURLcode Curl_http_host(struct Curl_easy *data, struct connectdata *conn)
if(colon)
*colon = 0; /* The host must not include an embedded port number */
}
- Curl_safefree(data->state.aptr.cookiehost);
- data->state.aptr.cookiehost = cookiehost;
+ Curl_safefree(aptr->cookiehost);
+ aptr->cookiehost = cookiehost;
}
#endif
if(strcmp("Host:", ptr)) {
- data->state.aptr.host = aprintf("Host:%s\r\n", &ptr[5]);
- if(!data->state.aptr.host)
+ aptr->host = aprintf("Host:%s\r\n", &ptr[5]);
+ if(!aptr->host)
return CURLE_OUT_OF_MEMORY;
}
- else
- /* when clearing the header */
- data->state.aptr.host = NULL;
}
else {
/* When building Host: headers, we must put the host name within
@@ -2211,18 +2288,14 @@ CURLcode Curl_http_host(struct Curl_easy *data, struct connectdata *conn)
(conn->remote_port == PORT_HTTP)) )
/* if(HTTPS on port 443) OR (HTTP on port 80) then don't include
the port number in the host string */
- data->state.aptr.host = aprintf("Host: %s%s%s\r\n",
- conn->bits.ipv6_ip?"[":"",
- host,
- conn->bits.ipv6_ip?"]":"");
+ aptr->host = aprintf("Host: %s%s%s\r\n", conn->bits.ipv6_ip?"[":"",
+ host, conn->bits.ipv6_ip?"]":"");
else
- data->state.aptr.host = aprintf("Host: %s%s%s:%d\r\n",
- conn->bits.ipv6_ip?"[":"",
- host,
- conn->bits.ipv6_ip?"]":"",
- conn->remote_port);
+ aptr->host = aprintf("Host: %s%s%s:%d\r\n", conn->bits.ipv6_ip?"[":"",
+ host, conn->bits.ipv6_ip?"]":"",
+ conn->remote_port);
- if(!data->state.aptr.host)
+ if(!aptr->host)
/* without Host: we can't make a nice request */
return CURLE_OUT_OF_MEMORY;
}
@@ -2353,45 +2426,55 @@ CURLcode Curl_http_body(struct Curl_easy *data, struct connectdata *conn,
switch(httpreq) {
case HTTPREQ_POST_MIME:
- http->sendit = &data->set.mimepost;
+ data->state.mimepost = &data->set.mimepost;
break;
+#ifndef CURL_DISABLE_FORM_API
case HTTPREQ_POST_FORM:
- /* Convert the form structure into a mime structure. */
- Curl_mime_cleanpart(&http->form);
- result = Curl_getformdata(data, &http->form, data->set.httppost,
- data->state.fread_func);
- if(result)
- return result;
- http->sendit = &http->form;
+ /* Convert the form structure into a mime structure, then keep
+ the conversion */
+ if(!data->state.formp) {
+ data->state.formp = calloc(1, sizeof(curl_mimepart));
+ if(!data->state.formp)
+ return CURLE_OUT_OF_MEMORY;
+ Curl_mime_cleanpart(data->state.formp);
+ result = Curl_getformdata(data, data->state.formp, data->set.httppost,
+ data->state.fread_func);
+ if(result) {
+ Curl_safefree(data->state.formp);
+ return result;
+ }
+ data->state.mimepost = data->state.formp;
+ }
break;
+#endif
default:
- http->sendit = NULL;
+ data->state.mimepost = NULL;
}
#ifndef CURL_DISABLE_MIME
- if(http->sendit) {
+ if(data->state.mimepost) {
const char *cthdr = Curl_checkheaders(data, STRCONST("Content-Type"));
/* Read and seek body only. */
- http->sendit->flags |= MIME_BODY_ONLY;
+ data->state.mimepost->flags |= MIME_BODY_ONLY;
/* Prepare the mime structure headers & set content type. */
if(cthdr)
for(cthdr += 13; *cthdr == ' '; cthdr++)
;
- else if(http->sendit->kind == MIMEKIND_MULTIPART)
+ else if(data->state.mimepost->kind == MIMEKIND_MULTIPART)
cthdr = "multipart/form-data";
- curl_mime_headers(http->sendit, data->set.headers, 0);
- result = Curl_mime_prepare_headers(http->sendit, cthdr,
+ curl_mime_headers(data->state.mimepost, data->set.headers, 0);
+ result = Curl_mime_prepare_headers(data, data->state.mimepost, cthdr,
NULL, MIMESTRATEGY_FORM);
- curl_mime_headers(http->sendit, NULL, 0);
+ curl_mime_headers(data->state.mimepost, NULL, 0);
if(!result)
- result = Curl_mime_rewind(http->sendit);
+ result = Curl_mime_rewind(data->state.mimepost);
if(result)
return result;
- http->postsize = Curl_mime_size(http->sendit);
+ http->postsize = Curl_mime_size(data->state.mimepost);
}
#endif
@@ -2406,7 +2489,7 @@ CURLcode Curl_http_body(struct Curl_easy *data, struct connectdata *conn,
if((conn->handler->protocol & PROTO_FAMILY_HTTP) &&
(((httpreq == HTTPREQ_POST_MIME || httpreq == HTTPREQ_POST_FORM) &&
http->postsize < 0) ||
- ((data->set.upload || httpreq == HTTPREQ_POST) &&
+ ((data->state.upload || httpreq == HTTPREQ_POST) &&
data->state.infilesize == -1))) {
if(conn->bits.authneg)
/* don't enable chunked during auth neg */
@@ -2432,6 +2515,29 @@ CURLcode Curl_http_body(struct Curl_easy *data, struct connectdata *conn,
return result;
}
+static CURLcode addexpect(struct Curl_easy *data, struct connectdata *conn,
+ struct dynbuf *r)
+{
+ data->state.expect100header = FALSE;
+ /* Avoid Expect: 100-continue if Upgrade: is used */
+ if(data->req.upgr101 == UPGR101_INIT) {
+ struct HTTP *http = data->req.p.http;
+ /* For really small puts we don't use Expect: headers at all, and for
+ the somewhat bigger ones we allow the app to disable it. Just make
+ sure that the expect100header is always set to the preferred value
+ here. */
+ char *ptr = Curl_checkheaders(data, STRCONST("Expect"));
+ if(ptr) {
+ data->state.expect100header =
+ Curl_compareheader(ptr, STRCONST("Expect:"),
+ STRCONST("100-continue"));
+ }
+ else if(http->postsize > EXPECT_100_THRESHOLD || http->postsize < 0)
+ return expect100(data, conn, r);
+ }
+ return CURLE_OK;
+}
+
CURLcode Curl_http_bodysend(struct Curl_easy *data, struct connectdata *conn,
struct dynbuf *r, Curl_HttpReq httpreq)
{
@@ -2440,18 +2546,12 @@ CURLcode Curl_http_bodysend(struct Curl_easy *data, struct connectdata *conn,
curl_off_t included_body = 0;
#else
/* from this point down, this function should not be used */
-#define Curl_buffer_send(a,b,c,d,e) CURLE_OK
+#define Curl_buffer_send(a,b,c,d,e,f) CURLE_OK
#endif
CURLcode result = CURLE_OK;
struct HTTP *http = data->req.p.http;
- const char *ptr;
-
- /* If 'authdone' is FALSE, we must not set the write socket index to the
- Curl_transfer() call below, as we're not ready to actually upload any
- data yet. */
switch(httpreq) {
-
case HTTPREQ_PUT: /* Let's PUT the data to the server! */
if(conn->bits.authneg)
@@ -2469,11 +2569,9 @@ CURLcode Curl_http_bodysend(struct Curl_easy *data, struct connectdata *conn,
return result;
}
- if(http->postsize) {
- result = expect100(data, conn, r);
- if(result)
- return result;
- }
+ result = addexpect(data, conn, r);
+ if(result)
+ return result;
/* end of headers */
result = Curl_dyn_addn(r, STRCONST("\r\n"));
@@ -2484,7 +2582,8 @@ CURLcode Curl_http_bodysend(struct Curl_easy *data, struct connectdata *conn,
Curl_pgrsSetUploadSize(data, http->postsize);
/* this sends the buffer and frees all the buffer resources */
- result = Curl_buffer_send(r, data, &data->info.request_size, 0,
+ result = Curl_buffer_send(r, data, data->req.p.http,
+ &data->info.request_size, 0,
FIRSTSOCKET);
if(result)
failf(data, "Failed sending PUT request");
@@ -2505,7 +2604,8 @@ CURLcode Curl_http_bodysend(struct Curl_easy *data, struct connectdata *conn,
if(result)
return result;
- result = Curl_buffer_send(r, data, &data->info.request_size, 0,
+ result = Curl_buffer_send(r, data, data->req.p.http,
+ &data->info.request_size, 0,
FIRSTSOCKET);
if(result)
failf(data, "Failed sending POST request");
@@ -2521,8 +2621,7 @@ CURLcode Curl_http_bodysend(struct Curl_easy *data, struct connectdata *conn,
we don't upload data chunked, as RFC2616 forbids us to set both
kinds of headers (Transfer-Encoding: chunked and Content-Length) */
if(http->postsize != -1 && !data->req.upload_chunky &&
- (conn->bits.authneg ||
- !Curl_checkheaders(data, STRCONST("Content-Length")))) {
+ (!Curl_checkheaders(data, STRCONST("Content-Length")))) {
/* we allow replacing this header if not during auth negotiation,
although it isn't very wise to actually set your own */
result = Curl_dyn_addf(r,
@@ -2537,7 +2636,7 @@ CURLcode Curl_http_bodysend(struct Curl_easy *data, struct connectdata *conn,
{
struct curl_slist *hdr;
- for(hdr = http->sendit->curlheaders; hdr; hdr = hdr->next) {
+ for(hdr = data->state.mimepost->curlheaders; hdr; hdr = hdr->next) {
result = Curl_dyn_addf(r, "%s\r\n", hdr->data);
if(result)
return result;
@@ -2545,22 +2644,9 @@ CURLcode Curl_http_bodysend(struct Curl_easy *data, struct connectdata *conn,
}
#endif
- /* For really small posts we don't use Expect: headers at all, and for
- the somewhat bigger ones we allow the app to disable it. Just make
- sure that the expect100header is always set to the preferred value
- here. */
- ptr = Curl_checkheaders(data, STRCONST("Expect"));
- if(ptr) {
- data->state.expect100header =
- Curl_compareheader(ptr, STRCONST("Expect:"), STRCONST("100-continue"));
- }
- else if(http->postsize > EXPECT_100_THRESHOLD || http->postsize < 0) {
- result = expect100(data, conn, r);
- if(result)
- return result;
- }
- else
- data->state.expect100header = FALSE;
+ result = addexpect(data, conn, r);
+ if(result)
+ return result;
/* make the request end in a true CRLF */
result = Curl_dyn_addn(r, STRCONST("\r\n"));
@@ -2572,11 +2658,12 @@ CURLcode Curl_http_bodysend(struct Curl_easy *data, struct connectdata *conn,
/* Read from mime structure. */
data->state.fread_func = (curl_read_callback) Curl_mime_read;
- data->state.in = (void *) http->sendit;
+ data->state.in = (void *) data->state.mimepost;
http->sending = HTTPSEND_BODY;
/* this sends the buffer and frees all the buffer resources */
- result = Curl_buffer_send(r, data, &data->info.request_size, 0,
+ result = Curl_buffer_send(r, data, data->req.p.http,
+ &data->info.request_size, 0,
FIRSTSOCKET);
if(result)
failf(data, "Failed sending POST request");
@@ -2619,31 +2706,14 @@ CURLcode Curl_http_bodysend(struct Curl_easy *data, struct connectdata *conn,
return result;
}
- /* For really small posts we don't use Expect: headers at all, and for
- the somewhat bigger ones we allow the app to disable it. Just make
- sure that the expect100header is always set to the preferred value
- here. */
- ptr = Curl_checkheaders(data, STRCONST("Expect"));
- if(ptr) {
- data->state.expect100header =
- Curl_compareheader(ptr, STRCONST("Expect:"), STRCONST("100-continue"));
- }
- else if(http->postsize > EXPECT_100_THRESHOLD || http->postsize < 0) {
- result = expect100(data, conn, r);
- if(result)
- return result;
- }
- else
- data->state.expect100header = FALSE;
+ result = addexpect(data, conn, r);
+ if(result)
+ return result;
#ifndef USE_HYPER
/* With Hyper the body is always passed on separately */
if(data->set.postfields) {
-
- /* In HTTP2, we send request body in DATA frame regardless of
- its size. */
- if(conn->httpversion != 20 &&
- !data->state.expect100header &&
+ if(!data->state.expect100header &&
(http->postsize < MAX_INITIAL_POST_SIZE)) {
/* if we don't use expect: 100 AND
postsize is less than MAX_INITIAL_POST_SIZE
@@ -2659,7 +2729,7 @@ CURLcode Curl_http_bodysend(struct Curl_easy *data, struct connectdata *conn,
if(!data->req.upload_chunky) {
/* We're not sending it 'chunked', append it to the request
- already now to reduce the number if send() calls */
+ already now to reduce the number of send() calls */
result = Curl_dyn_addn(r, data->set.postfields,
(size_t)http->postsize);
included_body = http->postsize;
@@ -2693,11 +2763,10 @@ CURLcode Curl_http_bodysend(struct Curl_easy *data, struct connectdata *conn,
else {
/* A huge POST coming up, do data separate from the request */
http->postdata = data->set.postfields;
-
http->sending = HTTPSEND_BODY;
-
+ http->backup.data = data;
data->state.fread_func = (curl_read_callback)readmoredata;
- data->state.in = (void *)data;
+ data->state.in = (void *)http;
/* set the upload size to the progress meter */
Curl_pgrsSetUploadSize(data, http->postsize);
@@ -2736,7 +2805,8 @@ CURLcode Curl_http_bodysend(struct Curl_easy *data, struct connectdata *conn,
}
}
/* issue the request */
- result = Curl_buffer_send(r, data, &data->info.request_size, included_body,
+ result = Curl_buffer_send(r, data, data->req.p.http,
+ &data->info.request_size, included_body,
FIRSTSOCKET);
if(result)
@@ -2752,7 +2822,8 @@ CURLcode Curl_http_bodysend(struct Curl_easy *data, struct connectdata *conn,
return result;
/* issue the request */
- result = Curl_buffer_send(r, data, &data->info.request_size, 0,
+ result = Curl_buffer_send(r, data, data->req.p.http,
+ &data->info.request_size, 0,
FIRSTSOCKET);
if(result)
failf(data, "Failed sending HTTP request");
@@ -2795,7 +2866,7 @@ CURLcode Curl_http_cookies(struct Curl_easy *data,
conn->handler->protocol&(CURLPROTO_HTTPS|CURLPROTO_WSS) ||
strcasecompare("localhost", host) ||
!strcmp(host, "127.0.0.1") ||
- !strcmp(host, "[::1]") ? TRUE : FALSE;
+ !strcmp(host, "::1") ? TRUE : FALSE;
Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
co = Curl_cookie_getlist(data, data->cookies, host, data->state.up.path,
secure_context);
@@ -2803,16 +2874,18 @@ CURLcode Curl_http_cookies(struct Curl_easy *data,
}
if(co) {
struct Cookie *store = co;
+ size_t clen = 8; /* hold the size of the generated Cookie: header */
/* now loop through all cookies that matched */
while(co) {
if(co->value) {
- if(0 == count) {
+ size_t add;
+ if(!count) {
result = Curl_dyn_addn(r, STRCONST("Cookie: "));
if(result)
break;
}
- if((Curl_dyn_len(r) + strlen(co->name) + strlen(co->value) + 1) >=
- MAX_COOKIE_HEADER_LEN) {
+ add = strlen(co->name) + strlen(co->value) + 1;
+ if(clen + add >= MAX_COOKIE_HEADER_LEN) {
infof(data, "Restricted outgoing cookies due to header size, "
"'%s' not sent", co->name);
linecap = TRUE;
@@ -2822,6 +2895,7 @@ CURLcode Curl_http_cookies(struct Curl_easy *data,
co->name, co->value);
if(result)
break;
+ clen += add + (count ? 2 : 0);
count++;
}
co = co->next; /* next cookie please */
@@ -2925,8 +2999,8 @@ CURLcode Curl_http_resume(struct Curl_easy *data,
data->state.resume_from = 0;
}
- if(data->state.resume_from && !data->state.this_is_a_follow) {
- /* do we still game? */
+ if(data->state.resume_from && !data->state.followlocation) {
+ /* only act on the first request */
/* Now, let's read off the proper amount of bytes from the
input. */
@@ -2996,7 +3070,7 @@ CURLcode Curl_http_firstwrite(struct Curl_easy *data,
*done = TRUE;
return CURLE_OK;
}
- /* We have a new url to load, but since we want to be able to re-use this
+ /* We have a new url to load, but since we want to be able to reuse this
connection properly, we read the full response in "ignore more" */
k->ignorebody = TRUE;
infof(data, "Ignoring the response-body");
@@ -3027,16 +3101,16 @@ CURLcode Curl_http_firstwrite(struct Curl_easy *data,
if(data->set.timecondition && !data->state.range) {
/* A time condition has been set AND no ranges have been requested. This
seems to be what chapter 13.3.4 of RFC 2616 defines to be the correct
- action for a HTTP/1.1 client */
+ action for an HTTP/1.1 client */
if(!Curl_meets_timecondition(data, k->timeofdoc)) {
*done = TRUE;
- /* We're simulating a http 304 from server so we return
+ /* We're simulating an HTTP 304 from server so we return
what should have been returned from the server */
data->info.httpcode = 304;
- infof(data, "Simulate a HTTP 304 response");
+ infof(data, "Simulate an HTTP 304 response");
/* we abort the transfer before it is completed == we ruin the
- re-use ability. Close the connection */
+ reuse ability. Close the connection */
streamclose(conn, "Simulated 304 handling");
return CURLE_OK;
}
@@ -3080,7 +3154,7 @@ CURLcode Curl_transferencode(struct Curl_easy *data)
#ifndef USE_HYPER
/*
- * Curl_http() gets called from the generic multi_do() function when a HTTP
+ * Curl_http() gets called from the generic multi_do() function when an HTTP
* request is to be performed. This creates and sends a properly constructed
* HTTP request.
*/
@@ -3102,50 +3176,37 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done)
the rest of the request in the PERFORM phase. */
*done = TRUE;
- if(conn->transport != TRNSPRT_QUIC) {
- if(conn->httpversion < 20) { /* unless the connection is re-used and
- already http2 */
- switch(conn->alpn) {
- case CURL_HTTP_VERSION_2:
- conn->httpversion = 20; /* we know we're on HTTP/2 now */
-
- result = Curl_http2_switched(data, NULL, 0);
- if(result)
- return result;
- break;
- case CURL_HTTP_VERSION_1_1:
- /* continue with HTTP/1.1 when explicitly requested */
- break;
- default:
- /* Check if user wants to use HTTP/2 with clear TCP*/
-#ifdef USE_NGHTTP2
- if(data->state.httpwant == CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE) {
+ switch(conn->alpn) {
+ case CURL_HTTP_VERSION_3:
+ DEBUGASSERT(Curl_conn_is_http3(data, conn, FIRSTSOCKET));
+ break;
+ case CURL_HTTP_VERSION_2:
#ifndef CURL_DISABLE_PROXY
- if(conn->bits.httpproxy && !conn->bits.tunnel_proxy) {
- /* We don't support HTTP/2 proxies yet. Also it's debatable
- whether or not this setting should apply to HTTP/2 proxies. */
- infof(data, "Ignoring HTTP/2 prior knowledge due to proxy");
- break;
- }
-#endif
- DEBUGF(infof(data, "HTTP/2 over clean TCP"));
- conn->httpversion = 20;
-
- result = Curl_http2_switched(data, NULL, 0);
- if(result)
- return result;
- }
-#endif
- break;
- }
+ if(!Curl_conn_is_http2(data, conn, FIRSTSOCKET) &&
+ conn->bits.proxy && !conn->bits.tunnel_proxy
+ ) {
+ result = Curl_http2_switch(data, conn, FIRSTSOCKET);
+ if(result)
+ return result;
}
- else {
- /* prepare for a http2 request */
- result = Curl_http2_setup(data, conn);
+ else
+#endif
+ DEBUGASSERT(Curl_conn_is_http2(data, conn, FIRSTSOCKET));
+ break;
+ case CURL_HTTP_VERSION_1_1:
+ /* continue with HTTP/1.x when explicitly requested */
+ break;
+ default:
+ /* Check if user wants to use HTTP/2 with clear TCP */
+ if(Curl_http2_may_switch(data, conn, FIRSTSOCKET)) {
+ DEBUGF(infof(data, "HTTP/2 over clean TCP"));
+ result = Curl_http2_switch(data, conn, FIRSTSOCKET);
if(result)
return result;
}
+ break;
}
+
http = data->req.p.http;
DEBUGASSERT(http);
@@ -3293,8 +3354,8 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done)
altused ? altused : ""
);
- /* clear userpwd and proxyuserpwd to avoid re-using old credentials
- * from re-used connections */
+ /* clear userpwd and proxyuserpwd to avoid reusing old credentials
+ * from reused connections */
Curl_safefree(data->state.aptr.userpwd);
Curl_safefree(data->state.aptr.proxyuserpwd);
free(altused);
@@ -3305,7 +3366,7 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done)
}
if(!(conn->handler->flags&PROTOPT_SSL) &&
- conn->httpversion != 20 &&
+ conn->httpversion < 20 &&
(data->state.httpwant == CURL_HTTP_VERSION_2)) {
/* append HTTP2 upgrade magic stuff to the HTTP request if it isn't done
over SSL */
@@ -3317,8 +3378,10 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done)
}
result = Curl_http_cookies(data, conn, &req);
+#ifdef USE_WEBSOCKETS
if(!result && conn->handler->protocol&(CURLPROTO_WS|CURLPROTO_WSS))
result = Curl_ws_request(data, &req);
+#endif
if(!result)
result = Curl_add_timecondition(data, &req);
if(!result)
@@ -3363,7 +3426,10 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done)
}
}
- if((conn->httpversion == 20) && data->req.upload_chunky)
+ if(data->req.upload_done)
+ Curl_conn_ev_data_done_send(data);
+
+ if((conn->httpversion >= 20) && data->req.upload_chunky)
/* upload_chunky was set above to set up the request in a chunky fashion,
but is disabled here again to avoid that the chunked encoded version is
actually used when sending the request body over h2 */
@@ -3497,7 +3563,7 @@ CURLcode Curl_http_header(struct Curl_easy *data, struct connectdata *conn,
STRCONST("Proxy-Connection:"),
STRCONST("keep-alive"))) {
/*
- * When a HTTP/1.0 reply comes when using a proxy, the
+ * When an HTTP/1.0 reply comes when using a proxy, the
* 'Proxy-Connection: keep-alive' line tells us the
* connection will be kept alive for our pleasure.
* Default action for 1.0 is to close.
@@ -3511,7 +3577,7 @@ CURLcode Curl_http_header(struct Curl_easy *data, struct connectdata *conn,
STRCONST("Proxy-Connection:"),
STRCONST("close"))) {
/*
- * We get a HTTP/1.1 response from a proxy and it says it'll
+ * We get an HTTP/1.1 response from a proxy and it says it'll
* close down after this transfer.
*/
connclose(conn, "Proxy-Connection: asked to close after done");
@@ -3523,7 +3589,7 @@ CURLcode Curl_http_header(struct Curl_easy *data, struct connectdata *conn,
STRCONST("Connection:"),
STRCONST("keep-alive"))) {
/*
- * A HTTP/1.0 reply with the 'Connection: keep-alive' line
+ * An HTTP/1.0 reply with the 'Connection: keep-alive' line
* tells us the connection will be kept alive for our
* pleasure. Default action for 1.0 is to close.
*
@@ -3558,7 +3624,7 @@ CURLcode Curl_http_header(struct Curl_easy *data, struct connectdata *conn,
TRUE);
if(result)
return result;
- if(!k->chunk) {
+ if(!k->chunk && data->set.http_transfer_encoding) {
/* if this isn't chunked, only close can signal the end of this transfer
as Content-Length is said not to be trusted for transfer-encoding! */
connclose(conn, "HTTP/1.1 transfer-encoding without chunks");
@@ -3620,7 +3686,7 @@ CURLcode Curl_http_header(struct Curl_easy *data, struct connectdata *conn,
k->content_range = TRUE;
}
}
- else
+ else if(k->httpcode < 300)
data->state.resume_from = 0; /* get everything */
}
#if !defined(CURL_DISABLE_COOKIES)
@@ -3634,7 +3700,7 @@ CURLcode Curl_http_header(struct Curl_easy *data, struct connectdata *conn,
conn->handler->protocol&(CURLPROTO_HTTPS|CURLPROTO_WSS) ||
strcasecompare("localhost", host) ||
!strcmp(host, "127.0.0.1") ||
- !strcmp(host, "[::1]") ? TRUE : FALSE;
+ !strcmp(host, "::1") ? TRUE : FALSE;
Curl_share_lock(data, CURL_LOCK_DATA_COOKIE,
CURL_LOCK_ACCESS_SINGLE);
@@ -3708,6 +3774,9 @@ CURLcode Curl_http_header(struct Curl_easy *data, struct connectdata *conn,
result = http_perhapsrewind(data, conn);
if(result)
return result;
+
+ /* mark the next request as a followed location: */
+ data->state.this_is_a_follow = TRUE;
}
}
}
@@ -3724,7 +3793,7 @@ CURLcode Curl_http_header(struct Curl_easy *data, struct connectdata *conn,
#endif
)) {
CURLcode check =
- Curl_hsts_parse(data->hsts, data->state.up.hostname,
+ Curl_hsts_parse(data->hsts, conn->host.name,
headp + strlen("Strict-Transport-Security:"));
if(check)
infof(data, "Illegal STS header skipped");
@@ -3747,11 +3816,12 @@ CURLcode Curl_http_header(struct Curl_easy *data, struct connectdata *conn,
#endif
)) {
/* the ALPN of the current request */
- enum alpnid id = (conn->httpversion == 20) ? ALPN_h2 : ALPN_h1;
+ enum alpnid id = (conn->httpversion == 30)? ALPN_h3 :
+ (conn->httpversion == 20) ? ALPN_h2 : ALPN_h1;
result = Curl_altsvc_parse(data, data->asi,
headp + strlen("Alt-Svc:"),
id, conn->host.name,
- curlx_uitous(conn->remote_port));
+ curlx_uitous((unsigned int)conn->remote_port));
if(result)
return result;
}
@@ -3894,40 +3964,63 @@ static CURLcode verify_header(struct Curl_easy *data)
return CURLE_OK;
}
+CURLcode Curl_bump_headersize(struct Curl_easy *data,
+ size_t delta,
+ bool connect_only)
+{
+ size_t bad = 0;
+ unsigned int max = MAX_HTTP_RESP_HEADER_SIZE;
+ if(delta < MAX_HTTP_RESP_HEADER_SIZE) {
+ data->info.header_size += (unsigned int)delta;
+ data->req.allheadercount += (unsigned int)delta;
+ if(!connect_only)
+ data->req.headerbytecount += (unsigned int)delta;
+ if(data->req.allheadercount > max)
+ bad = data->req.allheadercount;
+ else if(data->info.header_size > (max * 20)) {
+ bad = data->info.header_size;
+ max *= 20;
+ }
+ }
+ else
+ bad = data->req.allheadercount + delta;
+ if(bad) {
+ failf(data, "Too large response headers: %zu > %u", bad, max);
+ return CURLE_RECV_ERROR;
+ }
+ return CURLE_OK;
+}
+
+
/*
* Read any HTTP header lines from the server and pass them to the client app.
*/
CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
struct connectdata *conn,
- ssize_t *nread,
- bool *stop_reading)
+ const char *buf, size_t blen,
+ size_t *pconsumed)
{
CURLcode result;
struct SingleRequest *k = &data->req;
- ssize_t onread = *nread;
- char *ostr = k->str;
char *headp;
- char *str_start;
char *end_ptr;
/* header line within buffer loop */
+ *pconsumed = 0;
do {
- size_t rest_length;
- size_t full_length;
+ size_t line_length;
int writetype;
- /* str_start is start of line within buf */
- str_start = k->str;
-
/* data is in network encoding so use 0x0a instead of '\n' */
- end_ptr = memchr(str_start, 0x0a, *nread);
+ end_ptr = memchr(buf, 0x0a, blen);
if(!end_ptr) {
/* Not a complete header line within buffer, append the data to
the end of the headerbuff. */
- result = Curl_dyn_addn(&data->state.headerb, str_start, *nread);
+ result = Curl_dyn_addn(&data->state.headerb, buf, blen);
if(result)
return result;
+ *pconsumed += blen;
if(!k->headerline) {
/* check if this looks like a protocol header */
@@ -3939,31 +4032,28 @@ CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
if(st == STATUS_BAD) {
/* this is not the beginning of a protocol first header line */
k->header = FALSE;
- k->badheader = HEADER_ALLBAD;
+ k->badheader = TRUE;
streamclose(conn, "bad HTTP: No end-of-message indicator");
if(!data->set.http09_allowed) {
failf(data, "Received HTTP/0.9 when not allowed");
return CURLE_UNSUPPORTED_PROTOCOL;
}
- break;
+ goto out;
}
}
-
- break; /* read more and try again */
+ goto out; /* read more and try again */
}
/* decrease the size of the remaining (supposed) header line */
- rest_length = (end_ptr - k->str) + 1;
- *nread -= (ssize_t)rest_length;
-
- k->str = end_ptr + 1; /* move past new line */
-
- full_length = k->str - str_start;
-
- result = Curl_dyn_addn(&data->state.headerb, str_start, full_length);
+ line_length = (end_ptr - buf) + 1;
+ result = Curl_dyn_addn(&data->state.headerb, buf, line_length);
if(result)
return result;
+ blen -= line_length;
+ buf += line_length;
+ *pconsumed += line_length;
+
/****
* We now have a FULL header line in 'headerb'.
*****/
@@ -3981,14 +4071,12 @@ CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
return CURLE_UNSUPPORTED_PROTOCOL;
}
k->header = FALSE;
- if(*nread)
+ if(blen)
/* since there's more, this is a partial bad header */
- k->badheader = HEADER_PARTHEADER;
+ k->badheader = TRUE;
else {
/* this was all we read so it's all a bad header */
- k->badheader = HEADER_ALLBAD;
- *nread = onread;
- k->str = ostr;
+ k->badheader = TRUE;
return CURLE_OK;
}
break;
@@ -4012,7 +4100,7 @@ CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
switch(k->httpcode) {
case 100:
/*
- * We have made a HTTP PUT or POST and this is 1.1-lingo
+ * We have made an HTTP PUT or POST and this is 1.1-lingo
* that tells us that the server is OK with this and ready
* to receive the data.
* However, we'll get more headers now so we must get
@@ -4032,6 +4120,7 @@ CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
/* Switching Protocols */
if(k->upgr101 == UPGR101_H2) {
/* Switching to HTTP/2 */
+ DEBUGASSERT(conn->httpversion < 20);
infof(data, "Received 101, Switching to HTTP/2");
k->upgr101 = UPGR101_RECEIVED;
@@ -4041,21 +4130,23 @@ CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
/* switch to http2 now. The bytes after response headers
are also processed here, otherwise they are lost. */
- result = Curl_http2_switched(data, k->str, *nread);
+ result = Curl_http2_upgrade(data, conn, FIRSTSOCKET, buf, blen);
if(result)
return result;
- *nread = 0;
+ *pconsumed += blen;
+ blen = 0;
}
#ifdef USE_WEBSOCKETS
else if(k->upgr101 == UPGR101_WS) {
/* verify the response */
- result = Curl_ws_accept(data);
+ result = Curl_ws_accept(data, buf, blen);
if(result)
return result;
k->header = FALSE; /* no more header to parse! */
if(data->set.connect_only) {
k->keepon &= ~KEEP_RECV; /* read no more content */
- *nread = 0;
+ *pconsumed += blen;
+ blen = 0;
}
}
#endif
@@ -4073,6 +4164,11 @@ CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
}
}
else {
+ if(k->upgr101 == UPGR101_H2) {
+ /* A requested upgrade was denied, poke the multi handle to possibly
+ allow a pending pipewait to continue */
+ Curl_multi_connchanged(data->multi);
+ }
k->header = FALSE; /* no more header to parse! */
if((k->size == -1) && !k->chunk && !conn->bits.close &&
@@ -4130,7 +4226,6 @@ CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
/* now, only output this if the header AND body are requested:
*/
writetype = CLIENTWRITE_HEADER |
- (data->set.include_header ? CLIENTWRITE_BODY : 0) |
((k->httpcode/100 == 1) ? CLIENTWRITE_1XX : 0);
headerlen = Curl_dyn_len(&data->state.headerb);
@@ -4140,8 +4235,9 @@ CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
if(result)
return result;
- data->info.header_size += (long)headerlen;
- data->req.headerbytecount += (long)headerlen;
+ result = Curl_bump_headersize(data, headerlen, FALSE);
+ if(result)
+ return result;
/*
* When all the headers have been parsed, see if we should give
@@ -4176,7 +4272,7 @@ CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
if(k->httpcode >= 300) {
if((!conn->bits.authneg) && !conn->bits.close &&
- !conn->bits.rewindaftersend) {
+ !data->state.rewindbeforesend) {
/*
* General treatment of errors when about to send data. Including :
* "417 Expectation Failed", while waiting for 100-continue.
@@ -4186,7 +4282,7 @@ CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
* something else should've considered the big picture and we
* avoid this check.
*
- * rewindaftersend indicates that something has told libcurl to
+ * rewindbeforesend indicates that something has told libcurl to
* continue sending even if it gets discarded
*/
@@ -4204,7 +4300,18 @@ CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
if((k->httpcode == 417) && data->state.expect100header) {
/* 417 Expectation Failed - try again without the Expect
header */
- infof(data, "Got 417 while waiting for a 100");
+ if(!k->writebytecount &&
+ k->exp100 == EXP100_AWAITING_CONTINUE) {
+ infof(data, "Got HTTP failure 417 while waiting for a 100");
+ }
+ else {
+ infof(data, "Got HTTP failure 417 while sending data");
+ streamclose(conn,
+ "Stop sending data before everything sent");
+ result = http_perhapsrewind(data, conn);
+ if(result)
+ return result;
+ }
data->state.disableexpect = TRUE;
DEBUGASSERT(!data->req.newurl);
data->req.newurl = strdup(data->state.url);
@@ -4235,9 +4342,9 @@ CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
}
}
- if(conn->bits.rewindaftersend) {
- /* We rewind after a complete send, so thus we continue
- sending now */
+ if(data->state.rewindbeforesend &&
+ (conn->writesockfd != CURL_SOCKET_BAD)) {
+ /* We rewind before next send, continue sending now */
infof(data, "Keep sending data to get tossed away");
k->keepon |= KEEP_SEND;
}
@@ -4250,8 +4357,8 @@ CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
* If we requested a "no body", this is a good time to get
* out and return home.
*/
- if(data->set.opt_no_body)
- *stop_reading = TRUE;
+ if(data->req.no_body)
+ k->download_done = TRUE;
#ifndef CURL_DISABLE_RTSP
else if((conn->handler->protocol & CURLPROTO_RTSP) &&
(data->set.rtspreq == RTSPREQ_DESCRIBE) &&
@@ -4260,7 +4367,7 @@ CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
absent, a length 0 must be assumed. It will prevent libcurl from
hanging on DESCRIBE request that got refused for whatever
reason */
- *stop_reading = TRUE;
+ k->download_done = TRUE;
#endif
/* If max download size is *zero* (nothing) we already have
@@ -4269,20 +4376,14 @@ CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
stream. In order to do this, we keep reading until we
close the stream. */
if(0 == k->maxdownload
-#if defined(USE_NGHTTP2)
- && !((conn->handler->protocol & PROTO_FAMILY_HTTP) &&
- conn->httpversion == 20)
-#endif
- )
- *stop_reading = TRUE;
-
- if(*stop_reading) {
- /* we make sure that this socket isn't read more now */
- k->keepon &= ~KEEP_RECV;
- }
-
- Curl_debug(data, CURLINFO_HEADER_IN, str_start, headerlen);
- break; /* exit header line loop */
+ && !Curl_conn_is_http2(data, conn, FIRSTSOCKET)
+ && !Curl_conn_is_http3(data, conn, FIRSTSOCKET))
+ k->download_done = TRUE;
+
+ Curl_debug(data, CURLINFO_HEADER_IN,
+ Curl_dyn_ptr(&data->state.headerb),
+ Curl_dyn_len(&data->state.headerb));
+ goto out; /* exit header line loop */
}
/* We continue reading headers, reset the line-based header */
@@ -4298,11 +4399,7 @@ CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
if(!k->headerline++) {
/* This is the first header, it MUST be the error code line
or else we consider this to be the body right away! */
- int httpversion_major;
- int rtspversion_major;
- int nc = 0;
-#define HEADER1 headp /* no conversion needed, just use headp */
-
+ bool fine_statusline = FALSE;
if(conn->handler->protocol & PROTO_FAMILY_HTTP) {
/*
* https://datatracker.ietf.org/doc/html/rfc7230#section-3.1.2
@@ -4311,39 +4408,60 @@ CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
* says. We allow any three-digit number here, but we cannot make
* guarantees on future behaviors since it isn't within the protocol.
*/
- char separator;
- char twoorthree[2];
int httpversion = 0;
- char digit4 = 0;
- nc = sscanf(HEADER1,
- " HTTP/%1d.%1d%c%3d%c",
- &httpversion_major,
- &httpversion,
- &separator,
- &k->httpcode,
- &digit4);
-
- if(nc == 1 && httpversion_major >= 2 &&
- 2 == sscanf(HEADER1, " HTTP/%1[23] %d", twoorthree, &k->httpcode)) {
- conn->httpversion = 0;
- nc = 4;
- separator = ' ';
- }
-
- /* There can only be a 4th response code digit stored in 'digit4' if
- all the other fields were parsed and stored first, so nc is 5 when
- digit4 a digit.
-
- The sscanf() line above will also allow zero-prefixed and negative
- numbers, so we check for that too here.
- */
- else if(ISDIGIT(digit4) || (nc >= 4 && k->httpcode < 100)) {
- failf(data, "Unsupported response code in HTTP response");
- return CURLE_UNSUPPORTED_PROTOCOL;
+ char *p = headp;
+
+ while(*p && ISBLANK(*p))
+ p++;
+ if(!strncmp(p, "HTTP/", 5)) {
+ p += 5;
+ switch(*p) {
+ case '1':
+ p++;
+ if((p[0] == '.') && (p[1] == '0' || p[1] == '1')) {
+ if(ISBLANK(p[2])) {
+ httpversion = 10 + (p[1] - '0');
+ p += 3;
+ if(ISDIGIT(p[0]) && ISDIGIT(p[1]) && ISDIGIT(p[2])) {
+ k->httpcode = (p[0] - '0') * 100 + (p[1] - '0') * 10 +
+ (p[2] - '0');
+ p += 3;
+ if(ISSPACE(*p))
+ fine_statusline = TRUE;
+ }
+ }
+ }
+ if(!fine_statusline) {
+ failf(data, "Unsupported HTTP/1 subversion in response");
+ return CURLE_UNSUPPORTED_PROTOCOL;
+ }
+ break;
+ case '2':
+ case '3':
+ if(!ISBLANK(p[1]))
+ break;
+ httpversion = (*p - '0') * 10;
+ p += 2;
+ if(ISDIGIT(p[0]) && ISDIGIT(p[1]) && ISDIGIT(p[2])) {
+ k->httpcode = (p[0] - '0') * 100 + (p[1] - '0') * 10 +
+ (p[2] - '0');
+ p += 3;
+ if(!ISSPACE(*p))
+ break;
+ fine_statusline = TRUE;
+ }
+ break;
+ default: /* unsupported */
+ failf(data, "Unsupported HTTP version in response");
+ return CURLE_UNSUPPORTED_PROTOCOL;
+ }
}
- if((nc >= 4) && (' ' == separator)) {
- httpversion += 10 * httpversion_major;
+ if(fine_statusline) {
+ if(k->httpcode < 100) {
+ failf(data, "Unsupported response code in HTTP response");
+ return CURLE_UNSUPPORTED_PROTOCOL;
+ }
switch(httpversion) {
case 10:
case 11:
@@ -4368,54 +4486,52 @@ CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
}
if(conn->httpversion < 20) {
conn->bundle->multiuse = BUNDLE_NO_MULTIUSE;
- infof(data, "Mark bundle as not supporting multiuse");
}
}
- else if(!nc) {
- /* this is the real world, not a Nirvana
- NCSA 1.5.x returns this crap when asked for HTTP/1.1
- */
- nc = sscanf(HEADER1, " HTTP %3d", &k->httpcode);
- conn->httpversion = 10;
-
+ else {
/* If user has set option HTTP200ALIASES,
compare header line against list of aliases
*/
- if(!nc) {
- statusline check =
- checkhttpprefix(data,
- Curl_dyn_ptr(&data->state.headerb),
- Curl_dyn_len(&data->state.headerb));
- if(check == STATUS_DONE) {
- nc = 1;
- k->httpcode = 200;
- conn->httpversion = 10;
- }
+ statusline check =
+ checkhttpprefix(data,
+ Curl_dyn_ptr(&data->state.headerb),
+ Curl_dyn_len(&data->state.headerb));
+ if(check == STATUS_DONE) {
+ fine_statusline = TRUE;
+ k->httpcode = 200;
+ conn->httpversion = 10;
}
}
- else {
- failf(data, "Unsupported HTTP version in response");
- return CURLE_UNSUPPORTED_PROTOCOL;
- }
}
else if(conn->handler->protocol & CURLPROTO_RTSP) {
- char separator;
- int rtspversion;
- nc = sscanf(HEADER1,
- " RTSP/%1d.%1d%c%3d",
- &rtspversion_major,
- &rtspversion,
- &separator,
- &k->httpcode);
- if((nc == 4) && (' ' == separator)) {
- conn->httpversion = 11; /* For us, RTSP acts like HTTP 1.1 */
- }
- else {
- nc = 0;
+ char *p = headp;
+ while(*p && ISBLANK(*p))
+ p++;
+ if(!strncmp(p, "RTSP/", 5)) {
+ p += 5;
+ if(ISDIGIT(*p)) {
+ p++;
+ if((p[0] == '.') && ISDIGIT(p[1])) {
+ if(ISBLANK(p[2])) {
+ p += 3;
+ if(ISDIGIT(p[0]) && ISDIGIT(p[1]) && ISDIGIT(p[2])) {
+ k->httpcode = (p[0] - '0') * 100 + (p[1] - '0') * 10 +
+ (p[2] - '0');
+ p += 3;
+ if(ISSPACE(*p)) {
+ fine_statusline = TRUE;
+ conn->httpversion = 11; /* RTSP acts like HTTP 1.1 */
+ }
+ }
+ }
+ }
+ }
+ if(!fine_statusline)
+ return CURLE_WEIRD_SERVER_REPLY;
}
}
- if(nc) {
+ if(fine_statusline) {
result = Curl_http_statusline(data, conn);
if(result)
return result;
@@ -4438,8 +4554,6 @@ CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
/*
* End of header-checks. Write them to the client.
*/
- if(data->set.include_header)
- writetype |= CLIENTWRITE_BODY;
if(k->httpcode/100 == 1)
writetype |= CLIENTWRITE_1XX;
@@ -4451,18 +4565,390 @@ CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
if(result)
return result;
- data->info.header_size += Curl_dyn_len(&data->state.headerb);
- data->req.headerbytecount += Curl_dyn_len(&data->state.headerb);
+ result = Curl_bump_headersize(data, Curl_dyn_len(&data->state.headerb),
+ FALSE);
+ if(result)
+ return result;
Curl_dyn_reset(&data->state.headerb);
}
- while(*k->str); /* header line within buffer */
+ while(blen);
/* We might have reached the end of the header part here, but
there might be a non-header part left in the end of the read
buffer. */
-
+out:
return CURLE_OK;
}
+
+/* Decode HTTP status code string. */
+CURLcode Curl_http_decode_status(int *pstatus, const char *s, size_t len)
+{
+ CURLcode result = CURLE_BAD_FUNCTION_ARGUMENT;
+ int status = 0;
+ int i;
+
+ if(len != 3)
+ goto out;
+
+ for(i = 0; i < 3; ++i) {
+ char c = s[i];
+
+ if(c < '0' || c > '9')
+ goto out;
+
+ status *= 10;
+ status += c - '0';
+ }
+ result = CURLE_OK;
+out:
+ *pstatus = result? -1 : status;
+ return result;
+}
+
+CURLcode Curl_http_req_make(struct httpreq **preq,
+ const char *method, size_t m_len,
+ const char *scheme, size_t s_len,
+ const char *authority, size_t a_len,
+ const char *path, size_t p_len)
+{
+ struct httpreq *req;
+ CURLcode result = CURLE_OUT_OF_MEMORY;
+
+ DEBUGASSERT(method);
+ if(m_len + 1 >= sizeof(req->method))
+ return CURLE_BAD_FUNCTION_ARGUMENT;
+
+ req = calloc(1, sizeof(*req));
+ if(!req)
+ goto out;
+ memcpy(req->method, method, m_len);
+ if(scheme) {
+ req->scheme = Curl_strndup(scheme, s_len);
+ if(!req->scheme)
+ goto out;
+ }
+ if(authority) {
+ req->authority = Curl_strndup(authority, a_len);
+ if(!req->authority)
+ goto out;
+ }
+ if(path) {
+ req->path = Curl_strndup(path, p_len);
+ if(!req->path)
+ goto out;
+ }
+ Curl_dynhds_init(&req->headers, 0, DYN_HTTP_REQUEST);
+ Curl_dynhds_init(&req->trailers, 0, DYN_HTTP_REQUEST);
+ result = CURLE_OK;
+
+out:
+ if(result && req)
+ Curl_http_req_free(req);
+ *preq = result? NULL : req;
+ return result;
+}
+
+static CURLcode req_assign_url_authority(struct httpreq *req, CURLU *url)
+{
+ char *user, *pass, *host, *port;
+ struct dynbuf buf;
+ CURLUcode uc;
+ CURLcode result = CURLE_URL_MALFORMAT;
+
+ user = pass = host = port = NULL;
+ Curl_dyn_init(&buf, DYN_HTTP_REQUEST);
+
+ uc = curl_url_get(url, CURLUPART_HOST, &host, 0);
+ if(uc && uc != CURLUE_NO_HOST)
+ goto out;
+ if(!host) {
+ req->authority = NULL;
+ result = CURLE_OK;
+ goto out;
+ }
+
+ uc = curl_url_get(url, CURLUPART_PORT, &port, CURLU_NO_DEFAULT_PORT);
+ if(uc && uc != CURLUE_NO_PORT)
+ goto out;
+ uc = curl_url_get(url, CURLUPART_USER, &user, 0);
+ if(uc && uc != CURLUE_NO_USER)
+ goto out;
+ if(user) {
+ uc = curl_url_get(url, CURLUPART_PASSWORD, &pass, 0);
+ if(uc && uc != CURLUE_NO_PASSWORD)
+ goto out;
+ }
+
+ if(user) {
+ result = Curl_dyn_add(&buf, user);
+ if(result)
+ goto out;
+ if(pass) {
+ result = Curl_dyn_addf(&buf, ":%s", pass);
+ if(result)
+ goto out;
+ }
+ result = Curl_dyn_add(&buf, "@");
+ if(result)
+ goto out;
+ }
+ result = Curl_dyn_add(&buf, host);
+ if(result)
+ goto out;
+ if(port) {
+ result = Curl_dyn_addf(&buf, ":%s", port);
+ if(result)
+ goto out;
+ }
+ req->authority = strdup(Curl_dyn_ptr(&buf));
+ if(!req->authority)
+ goto out;
+ result = CURLE_OK;
+
+out:
+ free(user);
+ free(pass);
+ free(host);
+ free(port);
+ Curl_dyn_free(&buf);
+ return result;
+}
+
+static CURLcode req_assign_url_path(struct httpreq *req, CURLU *url)
+{
+ char *path, *query;
+ struct dynbuf buf;
+ CURLUcode uc;
+ CURLcode result = CURLE_URL_MALFORMAT;
+
+ path = query = NULL;
+ Curl_dyn_init(&buf, DYN_HTTP_REQUEST);
+
+ uc = curl_url_get(url, CURLUPART_PATH, &path, CURLU_PATH_AS_IS);
+ if(uc)
+ goto out;
+ uc = curl_url_get(url, CURLUPART_QUERY, &query, 0);
+ if(uc && uc != CURLUE_NO_QUERY)
+ goto out;
+
+ if(!path && !query) {
+ req->path = NULL;
+ }
+ else if(path && !query) {
+ req->path = path;
+ path = NULL;
+ }
+ else {
+ if(path) {
+ result = Curl_dyn_add(&buf, path);
+ if(result)
+ goto out;
+ }
+ if(query) {
+ result = Curl_dyn_addf(&buf, "?%s", query);
+ if(result)
+ goto out;
+ }
+ req->path = strdup(Curl_dyn_ptr(&buf));
+ if(!req->path)
+ goto out;
+ }
+ result = CURLE_OK;
+
+out:
+ free(path);
+ free(query);
+ Curl_dyn_free(&buf);
+ return result;
+}
+
+CURLcode Curl_http_req_make2(struct httpreq **preq,
+ const char *method, size_t m_len,
+ CURLU *url, const char *scheme_default)
+{
+ struct httpreq *req;
+ CURLcode result = CURLE_OUT_OF_MEMORY;
+ CURLUcode uc;
+
+ DEBUGASSERT(method);
+ if(m_len + 1 >= sizeof(req->method))
+ return CURLE_BAD_FUNCTION_ARGUMENT;
+
+ req = calloc(1, sizeof(*req));
+ if(!req)
+ goto out;
+ memcpy(req->method, method, m_len);
+
+ uc = curl_url_get(url, CURLUPART_SCHEME, &req->scheme, 0);
+ if(uc && uc != CURLUE_NO_SCHEME)
+ goto out;
+ if(!req->scheme && scheme_default) {
+ req->scheme = strdup(scheme_default);
+ if(!req->scheme)
+ goto out;
+ }
+
+ result = req_assign_url_authority(req, url);
+ if(result)
+ goto out;
+ result = req_assign_url_path(req, url);
+ if(result)
+ goto out;
+
+ Curl_dynhds_init(&req->headers, 0, DYN_HTTP_REQUEST);
+ Curl_dynhds_init(&req->trailers, 0, DYN_HTTP_REQUEST);
+ result = CURLE_OK;
+
+out:
+ if(result && req)
+ Curl_http_req_free(req);
+ *preq = result? NULL : req;
+ return result;
+}
+
+void Curl_http_req_free(struct httpreq *req)
+{
+ if(req) {
+ free(req->scheme);
+ free(req->authority);
+ free(req->path);
+ Curl_dynhds_free(&req->headers);
+ Curl_dynhds_free(&req->trailers);
+ free(req);
+ }
+}
+
+struct name_const {
+ const char *name;
+ size_t namelen;
+};
+
+static struct name_const H2_NON_FIELD[] = {
+ { STRCONST("Host") },
+ { STRCONST("Upgrade") },
+ { STRCONST("Connection") },
+ { STRCONST("Keep-Alive") },
+ { STRCONST("Proxy-Connection") },
+ { STRCONST("Transfer-Encoding") },
+};
+
+static bool h2_non_field(const char *name, size_t namelen)
+{
+ size_t i;
+ for(i = 0; i < sizeof(H2_NON_FIELD)/sizeof(H2_NON_FIELD[0]); ++i) {
+ if(namelen < H2_NON_FIELD[i].namelen)
+ return FALSE;
+ if(namelen == H2_NON_FIELD[i].namelen &&
+ strcasecompare(H2_NON_FIELD[i].name, name))
+ return TRUE;
+ }
+ return FALSE;
+}
+
+CURLcode Curl_http_req_to_h2(struct dynhds *h2_headers,
+ struct httpreq *req, struct Curl_easy *data)
+{
+ const char *scheme = NULL, *authority = NULL;
+ struct dynhds_entry *e;
+ size_t i;
+ CURLcode result;
+
+ DEBUGASSERT(req);
+ DEBUGASSERT(h2_headers);
+
+ if(req->scheme) {
+ scheme = req->scheme;
+ }
+ else if(strcmp("CONNECT", req->method)) {
+ scheme = Curl_checkheaders(data, STRCONST(HTTP_PSEUDO_SCHEME));
+ if(scheme) {
+ scheme += sizeof(HTTP_PSEUDO_SCHEME);
+ while(*scheme && ISBLANK(*scheme))
+ scheme++;
+ infof(data, "set pseudo header %s to %s", HTTP_PSEUDO_SCHEME, scheme);
+ }
+ else {
+ scheme = (data->conn && data->conn->handler->flags & PROTOPT_SSL)?
+ "https" : "http";
+ }
+ }
+
+ if(req->authority) {
+ authority = req->authority;
+ }
+ else {
+ e = Curl_dynhds_get(&req->headers, STRCONST("Host"));
+ if(e)
+ authority = e->value;
+ }
+
+ Curl_dynhds_reset(h2_headers);
+ Curl_dynhds_set_opts(h2_headers, DYNHDS_OPT_LOWERCASE);
+ result = Curl_dynhds_add(h2_headers, STRCONST(HTTP_PSEUDO_METHOD),
+ req->method, strlen(req->method));
+ if(!result && scheme) {
+ result = Curl_dynhds_add(h2_headers, STRCONST(HTTP_PSEUDO_SCHEME),
+ scheme, strlen(scheme));
+ }
+ if(!result && authority) {
+ result = Curl_dynhds_add(h2_headers, STRCONST(HTTP_PSEUDO_AUTHORITY),
+ authority, strlen(authority));
+ }
+ if(!result && req->path) {
+ result = Curl_dynhds_add(h2_headers, STRCONST(HTTP_PSEUDO_PATH),
+ req->path, strlen(req->path));
+ }
+ for(i = 0; !result && i < Curl_dynhds_count(&req->headers); ++i) {
+ e = Curl_dynhds_getn(&req->headers, i);
+ if(!h2_non_field(e->name, e->namelen)) {
+ result = Curl_dynhds_add(h2_headers, e->name, e->namelen,
+ e->value, e->valuelen);
+ }
+ }
+
+ return result;
+}
+
+CURLcode Curl_http_resp_make(struct http_resp **presp,
+ int status,
+ const char *description)
+{
+ struct http_resp *resp;
+ CURLcode result = CURLE_OUT_OF_MEMORY;
+
+ resp = calloc(1, sizeof(*resp));
+ if(!resp)
+ goto out;
+
+ resp->status = status;
+ if(description) {
+ resp->description = strdup(description);
+ if(!resp->description)
+ goto out;
+ }
+ Curl_dynhds_init(&resp->headers, 0, DYN_HTTP_REQUEST);
+ Curl_dynhds_init(&resp->trailers, 0, DYN_HTTP_REQUEST);
+ result = CURLE_OK;
+
+out:
+ if(result && resp)
+ Curl_http_resp_free(resp);
+ *presp = result? NULL : resp;
+ return result;
+}
+
+void Curl_http_resp_free(struct http_resp *resp)
+{
+ if(resp) {
+ free(resp->description);
+ Curl_dynhds_free(&resp->headers);
+ Curl_dynhds_free(&resp->trailers);
+ if(resp->prev)
+ Curl_http_resp_free(resp->prev);
+ free(resp);
+ }
+}
+
#endif /* CURL_DISABLE_HTTP */
diff --git a/lib/http.h b/lib/http.h
index f7cbb3424..56b091301 100644
--- a/lib/http.h
+++ b/lib/http.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,6 +24,13 @@
*
***************************************************************************/
#include "curl_setup.h"
+
+#if defined(USE_MSH3) && !defined(_WIN32)
+#include <pthread.h>
+#endif
+
+#include "bufq.h"
+#include "dynhds.h"
#include "ws.h"
typedef enum {
@@ -37,11 +44,7 @@ typedef enum {
#ifndef CURL_DISABLE_HTTP
-#ifdef USE_NGHTTP2
-#include <nghttp2/nghttp2.h>
-#endif
-
-#if defined(_WIN32) && defined(ENABLE_QUIC)
+#if defined(ENABLE_QUIC)
#include <stdint.h>
#endif
@@ -59,6 +62,11 @@ extern const struct Curl_handler Curl_handler_wss;
#endif
#endif /* websockets */
+struct dynhds;
+
+CURLcode Curl_bump_headersize(struct Curl_easy *data,
+ size_t delta,
+ bool connect_only);
/* Header specific functions */
bool Curl_compareheader(const char *headerline, /* line to check */
@@ -73,8 +81,10 @@ char *Curl_checkProxyheaders(struct Curl_easy *data,
const struct connectdata *conn,
const char *thisheader,
const size_t thislen);
+struct HTTP; /* see below */
CURLcode Curl_buffer_send(struct dynbuf *in,
struct Curl_easy *data,
+ struct HTTP *http,
curl_off_t *bytes_written,
curl_off_t included_body_bytes,
int socketindex);
@@ -94,6 +104,10 @@ CURLcode Curl_add_custom_headers(struct Curl_easy *data,
void *headers
#endif
);
+CURLcode Curl_dynhds_add_custom(struct Curl_easy *data,
+ bool is_connect,
+ struct dynhds *hds);
+
CURLcode Curl_http_compile_trailers(struct curl_slist *trailers,
struct dynbuf *buf,
struct Curl_easy *handle);
@@ -173,53 +187,25 @@ CURLcode Curl_http_auth_act(struct Curl_easy *data);
#define EXPECT_100_THRESHOLD (1024*1024)
#endif
-#endif /* CURL_DISABLE_HTTP */
-
-#ifdef USE_NGHTTP3
-struct h3out; /* see ngtcp2 */
-#endif
+/* MAX_HTTP_RESP_HEADER_SIZE is the maximum size of all response headers
+ combined that libcurl allows for a single HTTP response, any HTTP
+ version. This count includes CONNECT response headers. */
+#define MAX_HTTP_RESP_HEADER_SIZE (300*1024)
-#ifdef USE_MSH3
-#ifdef _WIN32
-#define msh3_lock CRITICAL_SECTION
-#define msh3_lock_initialize(lock) InitializeCriticalSection(lock)
-#define msh3_lock_uninitialize(lock) DeleteCriticalSection(lock)
-#define msh3_lock_acquire(lock) EnterCriticalSection(lock)
-#define msh3_lock_release(lock) LeaveCriticalSection(lock)
-#else /* !_WIN32 */
-#include <pthread.h>
-#define msh3_lock pthread_mutex_t
-#define msh3_lock_initialize(lock) { \
- pthread_mutexattr_t attr; \
- pthread_mutexattr_init(&attr); \
- pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); \
- pthread_mutex_init(lock, &attr); \
- pthread_mutexattr_destroy(&attr); \
-}
-#define msh3_lock_uninitialize(lock) pthread_mutex_destroy(lock)
-#define msh3_lock_acquire(lock) pthread_mutex_lock(lock)
-#define msh3_lock_release(lock) pthread_mutex_unlock(lock)
-#endif /* _WIN32 */
-#endif /* USE_MSH3 */
+#endif /* CURL_DISABLE_HTTP */
/****************************************************************************
* HTTP unique setup
***************************************************************************/
struct HTTP {
- curl_mimepart *sendit;
curl_off_t postsize; /* off_t to handle large file sizes */
const char *postdata;
-
- const char *p_pragma; /* Pragma: string */
-
- /* For FORM posting */
- curl_mimepart form;
-
struct back {
curl_read_callback fread_func; /* backup storage for fread pointer */
void *fread_in; /* backup storage for fread_in pointer */
const char *postdata;
curl_off_t postsize;
+ struct Curl_easy *data;
} backup;
enum {
@@ -228,133 +214,21 @@ struct HTTP {
HTTPSEND_BODY /* sending body */
} sending;
-#ifdef USE_WEBSOCKETS
- struct websocket ws;
-#endif
-
#ifndef CURL_DISABLE_HTTP
+ void *h2_ctx; /* HTTP/2 implementation context */
+ void *h3_ctx; /* HTTP/3 implementation context */
struct dynbuf send_buffer; /* used if the request couldn't be sent in one
chunk, points to an allocated send_buffer
struct */
#endif
-#ifdef USE_NGHTTP2
- /*********** for HTTP/2 we store stream-local data here *************/
- int32_t stream_id; /* stream we are interested in */
-
- /* We store non-final and final response headers here, per-stream */
- struct dynbuf header_recvbuf;
- size_t nread_header_recvbuf; /* number of bytes in header_recvbuf fed into
- upper layer */
- struct dynbuf trailer_recvbuf;
- const uint8_t *pausedata; /* pointer to data received in on_data_chunk */
- size_t pauselen; /* the number of bytes left in data */
- bool close_handled; /* TRUE if stream closure is handled by libcurl */
-
- char **push_headers; /* allocated array */
- size_t push_headers_used; /* number of entries filled in */
- size_t push_headers_alloc; /* number of entries allocated */
- uint32_t error; /* HTTP/2 stream error code */
-#endif
-#if defined(USE_NGHTTP2) || defined(USE_NGHTTP3)
- bool bodystarted;
- int status_code; /* HTTP status code */
- bool closed; /* TRUE on HTTP2 stream close */
- char *mem; /* points to a buffer in memory to store received data */
- size_t len; /* size of the buffer 'mem' points to */
- size_t memlen; /* size of data copied to mem */
-#endif
-#if defined(USE_NGHTTP2) || defined(ENABLE_QUIC)
- /* fields used by both HTTP/2 and HTTP/3 */
- const uint8_t *upload_mem; /* points to a buffer to read from */
- size_t upload_len; /* size of the buffer 'upload_mem' points to */
- curl_off_t upload_left; /* number of bytes left to upload */
-#endif
-
-#ifdef ENABLE_QUIC
-#ifndef USE_MSH3
- /*********** for HTTP/3 we store stream-local data here *************/
- int64_t stream3_id; /* stream we are interested in */
- uint64_t error3; /* HTTP/3 stream error code */
- bool firstheader; /* FALSE until headers arrive */
- bool firstbody; /* FALSE until body arrives */
- bool h3req; /* FALSE until request is issued */
-#endif
- bool upload_done;
-#endif
-#ifdef USE_NGHTTP3
- size_t unacked_window;
- struct h3out *h3out; /* per-stream buffers for upload */
- struct dynbuf overflow; /* excess data received during a single Curl_read */
-#endif
-#ifdef USE_MSH3
- struct MSH3_REQUEST *req;
- msh3_lock recv_lock;
- /* Receive Buffer (Headers and Data) */
- uint8_t* recv_buf;
- size_t recv_buf_alloc;
- /* Receive Headers */
- size_t recv_header_len;
- bool recv_header_complete;
- /* Receive Data */
- size_t recv_data_len;
- bool recv_data_complete;
- /* General Receive Error */
- CURLcode recv_error;
-#endif
-};
-
-#ifdef USE_NGHTTP2
-/* h2 settings for this connection */
-struct h2settings {
- uint32_t max_concurrent_streams;
- bool enable_push;
-};
-#endif
-
-struct http_conn {
-#ifdef USE_NGHTTP2
-#define H2_BINSETTINGS_LEN 80
- uint8_t binsettings[H2_BINSETTINGS_LEN];
- size_t binlen; /* length of the binsettings data */
-
- /* We associate the connnectdata struct with the connection, but we need to
- make sure we can identify the current "driving" transfer. This is a
- work-around for the lack of nghttp2_session_set_user_data() in older
- nghttp2 versions that we want to support. (Added in 1.31.0) */
- struct Curl_easy *trnsfr;
-
- nghttp2_session *h2;
- Curl_send *send_underlying; /* underlying send Curl_send callback */
- Curl_recv *recv_underlying; /* underlying recv Curl_recv callback */
- char *inbuf; /* buffer to receive data from underlying socket */
- size_t inbuflen; /* number of bytes filled in inbuf */
- size_t nread_inbuf; /* number of bytes read from in inbuf */
- /* We need separate buffer for transmission and reception because we
- may call nghttp2_session_send() after the
- nghttp2_session_mem_recv() but mem buffer is still not full. In
- this case, we wrongly sends the content of mem buffer if we share
- them for both cases. */
- int32_t pause_stream_id; /* stream ID which paused
- nghttp2_session_mem_recv */
- size_t drain_total; /* sum of all stream's UrlState.drain */
-
- /* this is a hash of all individual streams (Curl_easy structs) */
- struct h2settings settings;
-
- /* list of settings that will be sent */
- nghttp2_settings_entry local_settings[3];
- size_t local_settings_num;
-#else
- int unused; /* prevent a compiler warning */
-#endif
};
CURLcode Curl_http_size(struct Curl_easy *data);
CURLcode Curl_http_readwrite_headers(struct Curl_easy *data,
struct connectdata *conn,
- ssize_t *nread,
- bool *stop_reading);
+ const char *buf, size_t blen,
+ size_t *pconsumed);
/**
* Curl_http_output_auth() setups the authentication headers for the
@@ -381,4 +255,79 @@ Curl_http_output_auth(struct Curl_easy *data,
bool proxytunnel); /* TRUE if this is the request setting
up the proxy tunnel */
+/* Decode HTTP status code string. */
+CURLcode Curl_http_decode_status(int *pstatus, const char *s, size_t len);
+
+
+/**
+ * All about a core HTTP request, excluding body and trailers
+ */
+struct httpreq {
+ char method[24];
+ char *scheme;
+ char *authority;
+ char *path;
+ struct dynhds headers;
+ struct dynhds trailers;
+};
+
+/**
+ * Create a HTTP request struct.
+ */
+CURLcode Curl_http_req_make(struct httpreq **preq,
+ const char *method, size_t m_len,
+ const char *scheme, size_t s_len,
+ const char *authority, size_t a_len,
+ const char *path, size_t p_len);
+
+CURLcode Curl_http_req_make2(struct httpreq **preq,
+ const char *method, size_t m_len,
+ CURLU *url, const char *scheme_default);
+
+void Curl_http_req_free(struct httpreq *req);
+
+#define HTTP_PSEUDO_METHOD ":method"
+#define HTTP_PSEUDO_SCHEME ":scheme"
+#define HTTP_PSEUDO_AUTHORITY ":authority"
+#define HTTP_PSEUDO_PATH ":path"
+#define HTTP_PSEUDO_STATUS ":status"
+
+/**
+ * Create the list of HTTP/2 headers which represent the request,
+ * using HTTP/2 pseudo headers preceding the `req->headers`.
+ *
+ * Applies the following transformations:
+ * - if `authority` is set, any "Host" header is removed.
+ * - if `authority` is unset and a "Host" header is present, use
+ * that as `authority` and remove "Host"
+ * - removes and Connection header fields as defined in rfc9113 ch. 8.2.2
+ * - lower-cases the header field names
+ *
+ * @param h2_headers will contain the HTTP/2 headers on success
+ * @param req the request to transform
+ * @param data the handle to lookup defaults like ' :scheme' from
+ */
+CURLcode Curl_http_req_to_h2(struct dynhds *h2_headers,
+ struct httpreq *req, struct Curl_easy *data);
+
+/**
+ * All about a core HTTP response, excluding body and trailers
+ */
+struct http_resp {
+ int status;
+ char *description;
+ struct dynhds headers;
+ struct dynhds trailers;
+ struct http_resp *prev;
+};
+
+/**
+ * Create a HTTP response struct.
+ */
+CURLcode Curl_http_resp_make(struct http_resp **presp,
+ int status,
+ const char *description);
+
+void Curl_http_resp_free(struct http_resp *resp);
+
#endif /* HEADER_CURL_HTTP_H */
diff --git a/lib/http1.c b/lib/http1.c
new file mode 100644
index 000000000..182234ca9
--- /dev/null
+++ b/lib/http1.c
@@ -0,0 +1,346 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+
+#ifndef CURL_DISABLE_HTTP
+
+#include "urldata.h"
+#include <curl/curl.h>
+#include "http.h"
+#include "http1.h"
+#include "urlapi-int.h"
+
+/* The last 3 #include files should be in this order */
+#include "curl_printf.h"
+#include "curl_memory.h"
+#include "memdebug.h"
+
+
+#define H1_MAX_URL_LEN (8*1024)
+
+void Curl_h1_req_parse_init(struct h1_req_parser *parser, size_t max_line_len)
+{
+ memset(parser, 0, sizeof(*parser));
+ parser->max_line_len = max_line_len;
+ Curl_dyn_init(&parser->scratch, max_line_len);
+}
+
+void Curl_h1_req_parse_free(struct h1_req_parser *parser)
+{
+ if(parser) {
+ Curl_http_req_free(parser->req);
+ Curl_dyn_free(&parser->scratch);
+ parser->req = NULL;
+ parser->done = FALSE;
+ }
+}
+
+static CURLcode trim_line(struct h1_req_parser *parser, int options)
+{
+ DEBUGASSERT(parser->line);
+ if(parser->line_len) {
+ if(parser->line[parser->line_len - 1] == '\n')
+ --parser->line_len;
+ if(parser->line_len) {
+ if(parser->line[parser->line_len - 1] == '\r')
+ --parser->line_len;
+ else if(options & H1_PARSE_OPT_STRICT)
+ return CURLE_URL_MALFORMAT;
+ }
+ else if(options & H1_PARSE_OPT_STRICT)
+ return CURLE_URL_MALFORMAT;
+ }
+ else if(options & H1_PARSE_OPT_STRICT)
+ return CURLE_URL_MALFORMAT;
+
+ if(parser->line_len > parser->max_line_len) {
+ return CURLE_URL_MALFORMAT;
+ }
+ return CURLE_OK;
+}
+
+static ssize_t detect_line(struct h1_req_parser *parser,
+ const char *buf, const size_t buflen,
+ CURLcode *err)
+{
+ const char *line_end;
+
+ DEBUGASSERT(!parser->line);
+ line_end = memchr(buf, '\n', buflen);
+ if(!line_end) {
+ *err = CURLE_AGAIN;
+ return -1;
+ }
+ parser->line = buf;
+ parser->line_len = line_end - buf + 1;
+ *err = CURLE_OK;
+ return (ssize_t)parser->line_len;
+}
+
+static ssize_t next_line(struct h1_req_parser *parser,
+ const char *buf, const size_t buflen, int options,
+ CURLcode *err)
+{
+ ssize_t nread = 0;
+
+ if(parser->line) {
+ parser->line = NULL;
+ parser->line_len = 0;
+ Curl_dyn_reset(&parser->scratch);
+ }
+
+ nread = detect_line(parser, buf, buflen, err);
+ if(nread >= 0) {
+ if(Curl_dyn_len(&parser->scratch)) {
+ /* append detected line to scratch to have the complete line */
+ *err = Curl_dyn_addn(&parser->scratch, parser->line, parser->line_len);
+ if(*err)
+ return -1;
+ parser->line = Curl_dyn_ptr(&parser->scratch);
+ parser->line_len = Curl_dyn_len(&parser->scratch);
+ }
+ *err = trim_line(parser, options);
+ if(*err)
+ return -1;
+ }
+ else if(*err == CURLE_AGAIN) {
+ /* no line end in `buf`, add it to our scratch */
+ *err = Curl_dyn_addn(&parser->scratch, (const unsigned char *)buf, buflen);
+ nread = (*err)? -1 : (ssize_t)buflen;
+ }
+ return nread;
+}
+
+static CURLcode start_req(struct h1_req_parser *parser,
+ const char *scheme_default, int options)
+{
+ const char *p, *m, *target, *hv, *scheme, *authority, *path;
+ size_t m_len, target_len, hv_len, scheme_len, authority_len, path_len;
+ size_t i;
+ CURLU *url = NULL;
+ CURLcode result = CURLE_URL_MALFORMAT; /* Use this as default fail */
+
+ DEBUGASSERT(!parser->req);
+ /* line must match: "METHOD TARGET HTTP_VERSION" */
+ p = memchr(parser->line, ' ', parser->line_len);
+ if(!p || p == parser->line)
+ goto out;
+
+ m = parser->line;
+ m_len = p - parser->line;
+ target = p + 1;
+ target_len = hv_len = 0;
+ hv = NULL;
+
+ /* URL may contain spaces so scan backwards */
+ for(i = parser->line_len; i > m_len; --i) {
+ if(parser->line[i] == ' ') {
+ hv = &parser->line[i + 1];
+ hv_len = parser->line_len - i;
+ target_len = (hv - target) - 1;
+ break;
+ }
+ }
+ /* no SPACE found or empty TARGET or empty HTTP_VERSION */
+ if(!target_len || !hv_len)
+ goto out;
+
+ /* TODO: we do not check HTTP_VERSION for conformity, should
+ + do that when STRICT option is supplied. */
+ (void)hv;
+
+ /* The TARGET can be (rfc 9112, ch. 3.2):
+ * origin-form: path + optional query
+ * absolute-form: absolute URI
+ * authority-form: host+port for CONNECT
+ * asterisk-form: '*' for OPTIONS
+ *
+ * from TARGET, we derive `scheme` `authority` `path`
+ * origin-form -- -- TARGET
+ * absolute-form URL* URL* URL*
+ * authority-form -- TARGET --
+ * asterisk-form -- -- TARGET
+ */
+ scheme = authority = path = NULL;
+ scheme_len = authority_len = path_len = 0;
+
+ if(target_len == 1 && target[0] == '*') {
+ /* asterisk-form */
+ path = target;
+ path_len = target_len;
+ }
+ else if(!strncmp("CONNECT", m, m_len)) {
+ /* authority-form */
+ authority = target;
+ authority_len = target_len;
+ }
+ else if(target[0] == '/') {
+ /* origin-form */
+ path = target;
+ path_len = target_len;
+ }
+ else {
+ /* origin-form OR absolute-form */
+ CURLUcode uc;
+ char tmp[H1_MAX_URL_LEN];
+
+ /* default, unless we see an absolute URL */
+ path = target;
+ path_len = target_len;
+
+ /* URL parser wants 0-termination */
+ if(target_len >= sizeof(tmp))
+ goto out;
+ memcpy(tmp, target, target_len);
+ tmp[target_len] = '\0';
+ /* See if treating TARGET as an absolute URL makes sense */
+ if(Curl_is_absolute_url(tmp, NULL, 0, FALSE)) {
+ int url_options;
+
+ url = curl_url();
+ if(!url) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
+ }
+ url_options = (CURLU_NON_SUPPORT_SCHEME|
+ CURLU_PATH_AS_IS|
+ CURLU_NO_DEFAULT_PORT);
+ if(!(options & H1_PARSE_OPT_STRICT))
+ url_options |= CURLU_ALLOW_SPACE;
+ uc = curl_url_set(url, CURLUPART_URL, tmp, url_options);
+ if(uc) {
+ goto out;
+ }
+ }
+
+ if(!url && (options & H1_PARSE_OPT_STRICT)) {
+ /* we should have an absolute URL or have seen `/` earlier */
+ goto out;
+ }
+ }
+
+ if(url) {
+ result = Curl_http_req_make2(&parser->req, m, m_len, url, scheme_default);
+ }
+ else {
+ if(!scheme && scheme_default) {
+ scheme = scheme_default;
+ scheme_len = strlen(scheme_default);
+ }
+ result = Curl_http_req_make(&parser->req, m, m_len, scheme, scheme_len,
+ authority, authority_len, path, path_len);
+ }
+
+out:
+ curl_url_cleanup(url);
+ return result;
+}
+
+ssize_t Curl_h1_req_parse_read(struct h1_req_parser *parser,
+ const char *buf, size_t buflen,
+ const char *scheme_default, int options,
+ CURLcode *err)
+{
+ ssize_t nread = 0, n;
+
+ *err = CURLE_OK;
+ while(!parser->done) {
+ n = next_line(parser, buf, buflen, options, err);
+ if(n < 0) {
+ if(*err != CURLE_AGAIN) {
+ nread = -1;
+ }
+ *err = CURLE_OK;
+ goto out;
+ }
+
+ /* Consume this line */
+ nread += (size_t)n;
+ buf += (size_t)n;
+ buflen -= (size_t)n;
+
+ if(!parser->line) {
+ /* consumed bytes, but line not complete */
+ if(!buflen)
+ goto out;
+ }
+ else if(!parser->req) {
+ *err = start_req(parser, scheme_default, options);
+ if(*err) {
+ nread = -1;
+ goto out;
+ }
+ }
+ else if(parser->line_len == 0) {
+ /* last, empty line, we are finished */
+ if(!parser->req) {
+ *err = CURLE_URL_MALFORMAT;
+ nread = -1;
+ goto out;
+ }
+ parser->done = TRUE;
+ Curl_dyn_reset(&parser->scratch);
+ /* last chance adjustments */
+ }
+ else {
+ *err = Curl_dynhds_h1_add_line(&parser->req->headers,
+ parser->line, parser->line_len);
+ if(*err) {
+ nread = -1;
+ goto out;
+ }
+ }
+ }
+
+out:
+ return nread;
+}
+
+CURLcode Curl_h1_req_write_head(struct httpreq *req, int http_minor,
+ struct dynbuf *dbuf)
+{
+ CURLcode result;
+
+ result = Curl_dyn_addf(dbuf, "%s %s%s%s%s HTTP/1.%d\r\n",
+ req->method,
+ req->scheme? req->scheme : "",
+ req->scheme? "://" : "",
+ req->authority? req->authority : "",
+ req->path? req->path : "",
+ http_minor);
+ if(result)
+ goto out;
+
+ result = Curl_dynhds_h1_dprint(&req->headers, dbuf);
+ if(result)
+ goto out;
+
+ result = Curl_dyn_addn(dbuf, STRCONST("\r\n"));
+
+out:
+ return result;
+}
+
+#endif /* !CURL_DISABLE_HTTP */
diff --git a/lib/http1.h b/lib/http1.h
new file mode 100644
index 000000000..2de302f1f
--- /dev/null
+++ b/lib/http1.h
@@ -0,0 +1,63 @@
+#ifndef HEADER_CURL_HTTP1_H
+#define HEADER_CURL_HTTP1_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+
+#ifndef CURL_DISABLE_HTTP
+#include "bufq.h"
+#include "http.h"
+
+#define H1_PARSE_OPT_NONE (0)
+#define H1_PARSE_OPT_STRICT (1 << 0)
+
+#define H1_PARSE_DEFAULT_MAX_LINE_LEN DYN_HTTP_REQUEST
+
+struct h1_req_parser {
+ struct httpreq *req;
+ struct dynbuf scratch;
+ size_t scratch_skip;
+ const char *line;
+ size_t max_line_len;
+ size_t line_len;
+ bool done;
+};
+
+void Curl_h1_req_parse_init(struct h1_req_parser *parser, size_t max_line_len);
+void Curl_h1_req_parse_free(struct h1_req_parser *parser);
+
+ssize_t Curl_h1_req_parse_read(struct h1_req_parser *parser,
+ const char *buf, size_t buflen,
+ const char *scheme_default, int options,
+ CURLcode *err);
+
+CURLcode Curl_h1_req_dprint(const struct httpreq *req,
+ struct dynbuf *dbuf);
+
+CURLcode Curl_h1_req_write_head(struct httpreq *req, int http_minor,
+ struct dynbuf *dbuf);
+
+#endif /* !CURL_DISABLE_HTTP */
+#endif /* HEADER_CURL_HTTP1_H */
diff --git a/lib/http2.c b/lib/http2.c
index b7409b027..973848484 100644
--- a/lib/http2.c
+++ b/lib/http2.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -25,8 +25,11 @@
#include "curl_setup.h"
#ifdef USE_NGHTTP2
+#include <stdint.h>
#include <nghttp2/nghttp2.h>
#include "urldata.h"
+#include "bufq.h"
+#include "http1.h"
#include "http2.h"
#include "http.h"
#include "sendf.h"
@@ -35,20 +38,20 @@
#include "strcase.h"
#include "multiif.h"
#include "url.h"
+#include "urlapi-int.h"
+#include "cfilters.h"
#include "connect.h"
+#include "rand.h"
#include "strtoofft.h"
#include "strdup.h"
#include "transfer.h"
#include "dynbuf.h"
-#include "h2h3.h"
#include "headers.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"
-#define H2_BUFSIZE 32768
-
#if (NGHTTP2_VERSION_NUM < 0x010c00)
#error too old nghttp2 version, upgrade!
#endif
@@ -61,304 +64,586 @@
#define NGHTTP2_HAS_SET_LOCAL_WINDOW_SIZE 1
#endif
-#define HTTP2_HUGE_WINDOW_SIZE (32 * 1024 * 1024) /* 32 MB */
-#ifdef DEBUG_HTTP2
-#define H2BUGF(x) x
-#else
-#define H2BUGF(x) do { } while(0)
-#endif
+/* buffer dimensioning:
+ * use 16K as chunk size, as that fits H2 DATA frames well */
+#define H2_CHUNK_SIZE (16 * 1024)
+/* this is how much we want "in flight" for a stream */
+#define H2_STREAM_WINDOW_SIZE (10 * 1024 * 1024)
+/* on receiving from TLS, we prep for holding a full stream window */
+#define H2_NW_RECV_CHUNKS (H2_STREAM_WINDOW_SIZE / H2_CHUNK_SIZE)
+/* on send into TLS, we just want to accumulate small frames */
+#define H2_NW_SEND_CHUNKS 1
+/* stream recv/send chunks are a result of window / chunk sizes */
+#define H2_STREAM_RECV_CHUNKS (H2_STREAM_WINDOW_SIZE / H2_CHUNK_SIZE)
+/* keep smaller stream upload buffer (default h2 window size) to have
+ * our progress bars and "upload done" reporting closer to reality */
+#define H2_STREAM_SEND_CHUNKS ((64 * 1024) / H2_CHUNK_SIZE)
+/* spare chunks we keep for a full window */
+#define H2_STREAM_POOL_SPARES (H2_STREAM_WINDOW_SIZE / H2_CHUNK_SIZE)
+
+/* We need to accommodate the max number of streams with their window
+ * sizes on the overall connection. Streams might become PAUSED which
+ * will block their received QUOTA in the connection window. And if we
+ * run out of space, the server is blocked from sending us any data.
+ * See #10988 for an issue with this. */
+#define HTTP2_HUGE_WINDOW_SIZE (100 * H2_STREAM_WINDOW_SIZE)
+
+#define H2_SETTINGS_IV_LEN 3
+#define H2_BINSETTINGS_LEN 80
+
+static int populate_settings(nghttp2_settings_entry *iv,
+ struct Curl_easy *data)
+{
+ iv[0].settings_id = NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS;
+ iv[0].value = Curl_multi_max_concurrent_streams(data->multi);
-static ssize_t http2_recv(struct Curl_easy *data, int sockindex,
- char *mem, size_t len, CURLcode *err);
-static bool http2_connisdead(struct Curl_easy *data,
- struct connectdata *conn);
-static int h2_session_send(struct Curl_easy *data,
- nghttp2_session *h2);
-static int h2_process_pending_input(struct Curl_easy *data,
- struct http_conn *httpc,
- CURLcode *err);
+ iv[1].settings_id = NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE;
+ iv[1].value = H2_STREAM_WINDOW_SIZE;
-/*
- * Curl_http2_init_state() is called when the easy handle is created and
- * allows for HTTP/2 specific init of state.
- */
-void Curl_http2_init_state(struct UrlState *state)
-{
- state->stream_weight = NGHTTP2_DEFAULT_WEIGHT;
-}
+ iv[2].settings_id = NGHTTP2_SETTINGS_ENABLE_PUSH;
+ iv[2].value = data->multi->push_cb != NULL;
-/*
- * Curl_http2_init_userset() is called when the easy handle is created and
- * allows for HTTP/2 specific user-set fields.
- */
-void Curl_http2_init_userset(struct UserDefined *set)
-{
- set->stream_weight = NGHTTP2_DEFAULT_WEIGHT;
+ return 3;
}
-static int http2_getsock(struct Curl_easy *data,
- struct connectdata *conn,
- curl_socket_t *sock)
+static ssize_t populate_binsettings(uint8_t *binsettings,
+ struct Curl_easy *data)
{
- const struct http_conn *c = &conn->proto.httpc;
- struct SingleRequest *k = &data->req;
- int bitmap = GETSOCK_BLANK;
- struct HTTP *stream = data->req.p.http;
+ nghttp2_settings_entry iv[H2_SETTINGS_IV_LEN];
+ int ivlen;
- sock[0] = conn->sock[FIRSTSOCKET];
+ ivlen = populate_settings(iv, data);
+ /* this returns number of bytes it wrote or a negative number on error. */
+ return nghttp2_pack_settings_payload(binsettings, H2_BINSETTINGS_LEN,
+ iv, ivlen);
+}
- if(!(k->keepon & KEEP_RECV_PAUSE))
- /* Unless paused - in a HTTP/2 connection we can basically always get a
- frame so we should always be ready for one */
- bitmap |= GETSOCK_READSOCK(FIRSTSOCKET);
+struct cf_h2_ctx {
+ nghttp2_session *h2;
+ uint32_t max_concurrent_streams;
+ /* The easy handle used in the current filter call, cleared at return */
+ struct cf_call_data call_data;
+
+ struct bufq inbufq; /* network input */
+ struct bufq outbufq; /* network output */
+ struct bufc_pool stream_bufcp; /* spares for stream buffers */
+
+ size_t drain_total; /* sum of all stream's UrlState drain */
+ int32_t goaway_error;
+ int32_t last_stream_id;
+ BIT(conn_closed);
+ BIT(goaway);
+ BIT(enable_push);
+ BIT(nw_out_blocked);
+};
+
+/* How to access `call_data` from a cf_h2 filter */
+#undef CF_CTX_CALL_DATA
+#define CF_CTX_CALL_DATA(cf) \
+ ((struct cf_h2_ctx *)(cf)->ctx)->call_data
- /* we're (still uploading OR the HTTP/2 layer wants to send data) AND
- there's a window to send data in */
- if((((k->keepon & (KEEP_SEND|KEEP_SEND_PAUSE)) == KEEP_SEND) ||
- nghttp2_session_want_write(c->h2)) &&
- (nghttp2_session_get_remote_window_size(c->h2) &&
- nghttp2_session_get_stream_remote_window_size(c->h2,
- stream->stream_id)))
- bitmap |= GETSOCK_WRITESOCK(FIRSTSOCKET);
+static void cf_h2_ctx_clear(struct cf_h2_ctx *ctx)
+{
+ struct cf_call_data save = ctx->call_data;
- return bitmap;
+ if(ctx->h2) {
+ nghttp2_session_del(ctx->h2);
+ }
+ Curl_bufq_free(&ctx->inbufq);
+ Curl_bufq_free(&ctx->outbufq);
+ Curl_bufcp_free(&ctx->stream_bufcp);
+ memset(ctx, 0, sizeof(*ctx));
+ ctx->call_data = save;
}
-/*
- * http2_stream_free() free HTTP2 stream related data
- */
-static void http2_stream_free(struct HTTP *http)
+static void cf_h2_ctx_free(struct cf_h2_ctx *ctx)
{
- if(http) {
- Curl_dyn_free(&http->header_recvbuf);
- for(; http->push_headers_used > 0; --http->push_headers_used) {
- free(http->push_headers[http->push_headers_used - 1]);
- }
- free(http->push_headers);
- http->push_headers = NULL;
+ if(ctx) {
+ cf_h2_ctx_clear(ctx);
+ free(ctx);
}
}
-/*
- * Disconnects *a* connection used for HTTP/2. It might be an old one from the
- * connection cache and not the "main" one. Don't touch the easy handle!
+static CURLcode h2_progress_egress(struct Curl_cfilter *cf,
+ struct Curl_easy *data);
+
+/**
+ * All about the H3 internals of a stream
*/
+struct stream_ctx {
+ /*********** for HTTP/2 we store stream-local data here *************/
+ int32_t id; /* HTTP/2 protocol identifier for stream */
+ struct bufq recvbuf; /* response buffer */
+ struct bufq sendbuf; /* request buffer */
+ struct h1_req_parser h1; /* parsing the request */
+ struct dynhds resp_trailers; /* response trailer fields */
+ size_t resp_hds_len; /* amount of response header bytes in recvbuf */
+ size_t upload_blocked_len;
+ curl_off_t upload_left; /* number of request bytes left to upload */
+
+ char **push_headers; /* allocated array */
+ size_t push_headers_used; /* number of entries filled in */
+ size_t push_headers_alloc; /* number of entries allocated */
+
+ int status_code; /* HTTP response status code */
+ uint32_t error; /* stream error code */
+ uint32_t local_window_size; /* the local recv window size */
+ bool resp_hds_complete; /* we have a complete, final response */
+ bool closed; /* TRUE on stream close */
+ bool reset; /* TRUE on stream reset */
+ bool close_handled; /* TRUE if stream closure is handled by libcurl */
+ bool bodystarted;
+ bool send_closed; /* transfer is done sending, we might have still
+ buffered data in stream->sendbuf to upload. */
+};
+
+#define H2_STREAM_CTX(d) ((struct stream_ctx *)(((d) && (d)->req.p.http)? \
+ ((struct HTTP *)(d)->req.p.http)->h2_ctx \
+ : NULL))
+#define H2_STREAM_LCTX(d) ((struct HTTP *)(d)->req.p.http)->h2_ctx
+#define H2_STREAM_ID(d) (H2_STREAM_CTX(d)? \
+ H2_STREAM_CTX(d)->id : -2)
-static CURLcode http2_disconnect(struct Curl_easy *data,
- struct connectdata *conn,
- bool dead_connection)
+/*
+ * Mark this transfer to get "drained".
+ */
+static void drain_stream(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct stream_ctx *stream)
{
- struct http_conn *c = &conn->proto.httpc;
- (void)dead_connection;
-#ifndef DEBUG_HTTP2
- (void)data;
-#endif
+ unsigned char bits;
+
+ (void)cf;
+ bits = CURL_CSELECT_IN;
+ if(!stream->send_closed &&
+ (stream->upload_left || stream->upload_blocked_len))
+ bits |= CURL_CSELECT_OUT;
+ if(data->state.dselect_bits != bits) {
+ CURL_TRC_CF(data, cf, "[%d] DRAIN dselect_bits=%x",
+ stream->id, bits);
+ data->state.dselect_bits = bits;
+ Curl_expire(data, 0, EXPIRE_RUN_NOW);
+ }
+}
- H2BUGF(infof(data, "HTTP/2 DISCONNECT starts now"));
+static CURLcode http2_data_setup(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct stream_ctx **pstream)
+{
+ struct cf_h2_ctx *ctx = cf->ctx;
+ struct stream_ctx *stream;
- nghttp2_session_del(c->h2);
- Curl_safefree(c->inbuf);
+ (void)cf;
+ DEBUGASSERT(data);
+ if(!data->req.p.http) {
+ failf(data, "initialization failure, transfer not http initialized");
+ return CURLE_FAILED_INIT;
+ }
+ stream = H2_STREAM_CTX(data);
+ if(stream) {
+ *pstream = stream;
+ return CURLE_OK;
+ }
- H2BUGF(infof(data, "HTTP/2 DISCONNECT done"));
+ stream = calloc(1, sizeof(*stream));
+ if(!stream)
+ return CURLE_OUT_OF_MEMORY;
+
+ stream->id = -1;
+ Curl_bufq_initp(&stream->sendbuf, &ctx->stream_bufcp,
+ H2_STREAM_SEND_CHUNKS, BUFQ_OPT_NONE);
+ Curl_bufq_initp(&stream->recvbuf, &ctx->stream_bufcp,
+ H2_STREAM_RECV_CHUNKS, BUFQ_OPT_SOFT_LIMIT);
+ Curl_h1_req_parse_init(&stream->h1, H1_PARSE_DEFAULT_MAX_LINE_LEN);
+ Curl_dynhds_init(&stream->resp_trailers, 0, DYN_HTTP_REQUEST);
+ stream->resp_hds_len = 0;
+ stream->bodystarted = FALSE;
+ stream->status_code = -1;
+ stream->closed = FALSE;
+ stream->close_handled = FALSE;
+ stream->error = NGHTTP2_NO_ERROR;
+ stream->local_window_size = H2_STREAM_WINDOW_SIZE;
+ stream->upload_left = 0;
+ H2_STREAM_LCTX(data) = stream;
+ *pstream = stream;
return CURLE_OK;
}
-/*
- * The server may send us data at any point (e.g. PING frames). Therefore,
- * we cannot assume that an HTTP/2 socket is dead just because it is readable.
- *
- * Instead, if it is readable, run Curl_connalive() to peek at the socket
- * and distinguish between closed and data.
- */
-static bool http2_connisdead(struct Curl_easy *data, struct connectdata *conn)
+static void http2_data_done(struct Curl_cfilter *cf,
+ struct Curl_easy *data, bool premature)
{
- int sval;
- bool dead = TRUE;
+ struct cf_h2_ctx *ctx = cf->ctx;
+ struct stream_ctx *stream = H2_STREAM_CTX(data);
- if(conn->bits.close)
- return TRUE;
+ DEBUGASSERT(ctx);
+ (void)premature;
+ if(!stream)
+ return;
+
+ if(ctx->h2) {
+ if(!stream->closed && stream->id > 0) {
+ /* RST_STREAM */
+ CURL_TRC_CF(data, cf, "[%d] premature DATA_DONE, RST stream",
+ stream->id);
+ if(!nghttp2_submit_rst_stream(ctx->h2, NGHTTP2_FLAG_NONE,
+ stream->id, NGHTTP2_STREAM_CLOSED))
+ (void)nghttp2_session_send(ctx->h2);
+ }
+ if(!Curl_bufq_is_empty(&stream->recvbuf)) {
+ /* Anything in the recvbuf is still being counted
+ * in stream and connection window flow control. Need
+ * to free that space or the connection window might get
+ * exhausted eventually. */
+ nghttp2_session_consume(ctx->h2, stream->id,
+ Curl_bufq_len(&stream->recvbuf));
+ /* give WINDOW_UPATE a chance to be sent, but ignore any error */
+ (void)h2_progress_egress(cf, data);
+ }
- sval = SOCKET_READABLE(conn->sock[FIRSTSOCKET], 0);
- if(sval == 0) {
- /* timeout */
- dead = FALSE;
- }
- else if(sval & CURL_CSELECT_ERR) {
- /* socket is in an error state */
- dead = TRUE;
- }
- else if(sval & CURL_CSELECT_IN) {
- /* readable with no error. could still be closed */
- dead = !Curl_connalive(conn);
- if(!dead) {
- /* This happens before we've sent off a request and the connection is
- not in use by any other transfer, there shouldn't be any data here,
- only "protocol frames" */
- CURLcode result;
- struct http_conn *httpc = &conn->proto.httpc;
- ssize_t nread = -1;
- if(httpc->recv_underlying)
- /* if called "too early", this pointer isn't setup yet! */
- nread = ((Curl_recv *)httpc->recv_underlying)(
- data, FIRSTSOCKET, httpc->inbuf, H2_BUFSIZE, &result);
- if(nread != -1) {
- H2BUGF(infof(data,
- "%d bytes stray data read before trying h2 connection",
- (int)nread));
- httpc->nread_inbuf = 0;
- httpc->inbuflen = nread;
- if(h2_process_pending_input(data, httpc, &result) < 0)
- /* immediate error, considered dead */
- dead = TRUE;
+ /* -1 means unassigned and 0 means cleared */
+ if(nghttp2_session_get_stream_user_data(ctx->h2, stream->id)) {
+ int rv = nghttp2_session_set_stream_user_data(ctx->h2,
+ stream->id, 0);
+ if(rv) {
+ infof(data, "http/2: failed to clear user_data for stream %u",
+ stream->id);
+ DEBUGASSERT(0);
}
- else
- /* the read failed so let's say this is dead anyway */
- dead = TRUE;
}
}
- return dead;
+ Curl_bufq_free(&stream->sendbuf);
+ Curl_bufq_free(&stream->recvbuf);
+ Curl_h1_req_parse_free(&stream->h1);
+ Curl_dynhds_free(&stream->resp_trailers);
+ if(stream->push_headers) {
+ /* if they weren't used and then freed before */
+ for(; stream->push_headers_used > 0; --stream->push_headers_used) {
+ free(stream->push_headers[stream->push_headers_used - 1]);
+ }
+ free(stream->push_headers);
+ stream->push_headers = NULL;
+ }
+
+ free(stream);
+ H2_STREAM_LCTX(data) = NULL;
}
-/*
- * Set the transfer that is currently using this HTTP/2 connection.
- */
-static void set_transfer(struct http_conn *c,
- struct Curl_easy *data)
+static int h2_client_new(struct Curl_cfilter *cf,
+ nghttp2_session_callbacks *cbs)
{
- c->trnsfr = data;
+ struct cf_h2_ctx *ctx = cf->ctx;
+ nghttp2_option *o;
+
+ int rc = nghttp2_option_new(&o);
+ if(rc)
+ return rc;
+ /* We handle window updates ourself to enforce buffer limits */
+ nghttp2_option_set_no_auto_window_update(o, 1);
+#if NGHTTP2_VERSION_NUM >= 0x013200
+ /* with 1.50.0 */
+ /* turn off RFC 9113 leading and trailing white spaces validation against
+ HTTP field value. */
+ nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation(o, 1);
+#endif
+ rc = nghttp2_session_client_new2(&ctx->h2, cbs, cf, o);
+ nghttp2_option_del(o);
+ return rc;
}
-/*
- * Get the transfer that is currently using this HTTP/2 connection.
- */
-static struct Curl_easy *get_transfer(struct http_conn *c)
+static ssize_t nw_in_reader(void *reader_ctx,
+ unsigned char *buf, size_t buflen,
+ CURLcode *err)
{
- DEBUGASSERT(c && c->trnsfr);
- return c->trnsfr;
+ struct Curl_cfilter *cf = reader_ctx;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+
+ return Curl_conn_cf_recv(cf->next, data, (char *)buf, buflen, err);
}
-static unsigned int http2_conncheck(struct Curl_easy *data,
- struct connectdata *conn,
- unsigned int checks_to_perform)
+static ssize_t nw_out_writer(void *writer_ctx,
+ const unsigned char *buf, size_t buflen,
+ CURLcode *err)
{
- unsigned int ret_val = CONNRESULT_NONE;
- struct http_conn *c = &conn->proto.httpc;
+ struct Curl_cfilter *cf = writer_ctx;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+
+ if(data) {
+ ssize_t nwritten = Curl_conn_cf_send(cf->next, data,
+ (const char *)buf, buflen, err);
+ if(nwritten > 0)
+ CURL_TRC_CF(data, cf, "[0] egress: wrote %zd bytes", nwritten);
+ return nwritten;
+ }
+ return 0;
+}
+
+static ssize_t send_callback(nghttp2_session *h2,
+ const uint8_t *mem, size_t length, int flags,
+ void *userp);
+static int on_frame_recv(nghttp2_session *session, const nghttp2_frame *frame,
+ void *userp);
+#ifndef CURL_DISABLE_VERBOSE_STRINGS
+static int on_frame_send(nghttp2_session *session, const nghttp2_frame *frame,
+ void *userp);
+#endif
+static int on_data_chunk_recv(nghttp2_session *session, uint8_t flags,
+ int32_t stream_id,
+ const uint8_t *mem, size_t len, void *userp);
+static int on_stream_close(nghttp2_session *session, int32_t stream_id,
+ uint32_t error_code, void *userp);
+static int on_begin_headers(nghttp2_session *session,
+ const nghttp2_frame *frame, void *userp);
+static int on_header(nghttp2_session *session, const nghttp2_frame *frame,
+ const uint8_t *name, size_t namelen,
+ const uint8_t *value, size_t valuelen,
+ uint8_t flags,
+ void *userp);
+static int error_callback(nghttp2_session *session, const char *msg,
+ size_t len, void *userp);
+
+/*
+ * Initialize the cfilter context
+ */
+static CURLcode cf_h2_ctx_init(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool via_h1_upgrade)
+{
+ struct cf_h2_ctx *ctx = cf->ctx;
+ struct stream_ctx *stream;
+ CURLcode result = CURLE_OUT_OF_MEMORY;
int rc;
- bool send_frames = false;
+ nghttp2_session_callbacks *cbs = NULL;
+
+ DEBUGASSERT(!ctx->h2);
+ Curl_bufcp_init(&ctx->stream_bufcp, H2_CHUNK_SIZE, H2_STREAM_POOL_SPARES);
+ Curl_bufq_initp(&ctx->inbufq, &ctx->stream_bufcp, H2_NW_RECV_CHUNKS, 0);
+ Curl_bufq_initp(&ctx->outbufq, &ctx->stream_bufcp, H2_NW_SEND_CHUNKS, 0);
+ ctx->last_stream_id = 2147483647;
- if(checks_to_perform & CONNCHECK_ISDEAD) {
- if(http2_connisdead(data, conn))
- ret_val |= CONNRESULT_DEAD;
+ rc = nghttp2_session_callbacks_new(&cbs);
+ if(rc) {
+ failf(data, "Couldn't initialize nghttp2 callbacks");
+ goto out;
}
- if(checks_to_perform & CONNCHECK_KEEPALIVE) {
- struct curltime now = Curl_now();
- timediff_t elapsed = Curl_timediff(now, conn->keepalive);
+ nghttp2_session_callbacks_set_send_callback(cbs, send_callback);
+ nghttp2_session_callbacks_set_on_frame_recv_callback(cbs, on_frame_recv);
+#ifndef CURL_DISABLE_VERBOSE_STRINGS
+ nghttp2_session_callbacks_set_on_frame_send_callback(cbs, on_frame_send);
+#endif
+ nghttp2_session_callbacks_set_on_data_chunk_recv_callback(
+ cbs, on_data_chunk_recv);
+ nghttp2_session_callbacks_set_on_stream_close_callback(cbs, on_stream_close);
+ nghttp2_session_callbacks_set_on_begin_headers_callback(
+ cbs, on_begin_headers);
+ nghttp2_session_callbacks_set_on_header_callback(cbs, on_header);
+ nghttp2_session_callbacks_set_error_callback(cbs, error_callback);
+
+ /* The nghttp2 session is not yet setup, do it */
+ rc = h2_client_new(cf, cbs);
+ if(rc) {
+ failf(data, "Couldn't initialize nghttp2");
+ goto out;
+ }
+ ctx->max_concurrent_streams = DEFAULT_MAX_CONCURRENT_STREAMS;
+
+ if(via_h1_upgrade) {
+ /* HTTP/1.1 Upgrade issued. H2 Settings have already been submitted
+ * in the H1 request and we upgrade from there. This stream
+ * is opened implicitly as #1. */
+ uint8_t binsettings[H2_BINSETTINGS_LEN];
+ ssize_t binlen; /* length of the binsettings data */
+
+ binlen = populate_binsettings(binsettings, data);
+ if(binlen <= 0) {
+ failf(data, "nghttp2 unexpectedly failed on pack_settings_payload");
+ result = CURLE_FAILED_INIT;
+ goto out;
+ }
- if(elapsed > data->set.upkeep_interval_ms) {
- /* Perform an HTTP/2 PING */
- rc = nghttp2_submit_ping(c->h2, 0, ZERO_NULL);
- if(!rc) {
- /* Successfully added a PING frame to the session. Need to flag this
- so the frame is sent. */
- send_frames = true;
- }
- else {
- failf(data, "nghttp2_submit_ping() failed: %s(%d)",
- nghttp2_strerror(rc), rc);
- }
+ result = http2_data_setup(cf, data, &stream);
+ if(result)
+ goto out;
+ DEBUGASSERT(stream);
+ stream->id = 1;
+ /* queue SETTINGS frame (again) */
+ rc = nghttp2_session_upgrade2(ctx->h2, binsettings, binlen,
+ data->state.httpreq == HTTPREQ_HEAD,
+ NULL);
+ if(rc) {
+ failf(data, "nghttp2_session_upgrade2() failed: %s(%d)",
+ nghttp2_strerror(rc), rc);
+ result = CURLE_HTTP2;
+ goto out;
+ }
- conn->keepalive = now;
+ rc = nghttp2_session_set_stream_user_data(ctx->h2, stream->id,
+ data);
+ if(rc) {
+ infof(data, "http/2: failed to set user_data for stream %u",
+ stream->id);
+ DEBUGASSERT(0);
}
+ CURL_TRC_CF(data, cf, "created session via Upgrade");
}
+ else {
+ nghttp2_settings_entry iv[H2_SETTINGS_IV_LEN];
+ int ivlen;
- if(send_frames) {
- set_transfer(c, data); /* set the transfer */
- rc = nghttp2_session_send(c->h2);
- if(rc)
- failf(data, "nghttp2_session_send() failed: %s(%d)",
+ ivlen = populate_settings(iv, data);
+ rc = nghttp2_submit_settings(ctx->h2, NGHTTP2_FLAG_NONE,
+ iv, ivlen);
+ if(rc) {
+ failf(data, "nghttp2_submit_settings() failed: %s(%d)",
nghttp2_strerror(rc), rc);
+ result = CURLE_HTTP2;
+ goto out;
+ }
}
- return ret_val;
+ rc = nghttp2_session_set_local_window_size(ctx->h2, NGHTTP2_FLAG_NONE, 0,
+ HTTP2_HUGE_WINDOW_SIZE);
+ if(rc) {
+ failf(data, "nghttp2_session_set_local_window_size() failed: %s(%d)",
+ nghttp2_strerror(rc), rc);
+ result = CURLE_HTTP2;
+ goto out;
+ }
+
+ /* all set, traffic will be send on connect */
+ result = CURLE_OK;
+ CURL_TRC_CF(data, cf, "[0] created h2 session%s",
+ via_h1_upgrade? " (via h1 upgrade)" : "");
+
+out:
+ if(cbs)
+ nghttp2_session_callbacks_del(cbs);
+ return result;
}
-/* called from http_setup_conn */
-void Curl_http2_setup_req(struct Curl_easy *data)
+/*
+ * Returns nonzero if current HTTP/2 session should be closed.
+ */
+static int should_close_session(struct cf_h2_ctx *ctx)
{
- struct HTTP *http = data->req.p.http;
- http->bodystarted = FALSE;
- http->status_code = -1;
- http->pausedata = NULL;
- http->pauselen = 0;
- http->closed = FALSE;
- http->close_handled = FALSE;
- http->mem = NULL;
- http->len = 0;
- http->memlen = 0;
- http->error = NGHTTP2_NO_ERROR;
+ return ctx->drain_total == 0 && !nghttp2_session_want_read(ctx->h2) &&
+ !nghttp2_session_want_write(ctx->h2);
}
-/* called from http_setup_conn */
-void Curl_http2_setup_conn(struct connectdata *conn)
+/*
+ * Processes pending input left in network input buffer.
+ * This function returns 0 if it succeeds, or -1 and error code will
+ * be assigned to *err.
+ */
+static int h2_process_pending_input(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ CURLcode *err)
{
- conn->proto.httpc.settings.max_concurrent_streams =
- DEFAULT_MAX_CONCURRENT_STREAMS;
+ struct cf_h2_ctx *ctx = cf->ctx;
+ const unsigned char *buf;
+ size_t blen;
+ ssize_t rv;
+
+ while(Curl_bufq_peek(&ctx->inbufq, &buf, &blen)) {
+
+ rv = nghttp2_session_mem_recv(ctx->h2, (const uint8_t *)buf, blen);
+ if(rv < 0) {
+ failf(data,
+ "process_pending_input: nghttp2_session_mem_recv() returned "
+ "%zd:%s", rv, nghttp2_strerror((int)rv));
+ *err = CURLE_RECV_ERROR;
+ return -1;
+ }
+ Curl_bufq_skip(&ctx->inbufq, (size_t)rv);
+ if(Curl_bufq_is_empty(&ctx->inbufq)) {
+ break;
+ }
+ else {
+ CURL_TRC_CF(data, cf, "process_pending_input: %zu bytes left "
+ "in connection buffer", Curl_bufq_len(&ctx->inbufq));
+ }
+ }
+
+ if(nghttp2_session_check_request_allowed(ctx->h2) == 0) {
+ /* No more requests are allowed in the current session, so
+ the connection may not be reused. This is set when a
+ GOAWAY frame has been received or when the limit of stream
+ identifiers has been reached. */
+ connclose(cf->conn, "http/2: No new requests allowed");
+ }
+
+ return 0;
}
/*
- * HTTP2 handler interface. This isn't added to the general list of protocols
- * but will be used at run-time when the protocol is dynamically switched from
- * HTTP to HTTP2.
+ * The server may send us data at any point (e.g. PING frames). Therefore,
+ * we cannot assume that an HTTP/2 socket is dead just because it is readable.
+ *
+ * Check the lower filters first and, if successful, peek at the socket
+ * and distinguish between closed and data.
*/
-static const struct Curl_handler Curl_handler_http2 = {
- "HTTP", /* scheme */
- ZERO_NULL, /* setup_connection */
- Curl_http, /* do_it */
- Curl_http_done, /* done */
- ZERO_NULL, /* do_more */
- ZERO_NULL, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- http2_getsock, /* proto_getsock */
- http2_getsock, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- http2_getsock, /* perform_getsock */
- http2_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- http2_conncheck, /* connection_check */
- ZERO_NULL, /* attach connection */
- PORT_HTTP, /* defport */
- CURLPROTO_HTTP, /* protocol */
- CURLPROTO_HTTP, /* family */
- PROTOPT_STREAM /* flags */
-};
+static bool http2_connisalive(struct Curl_cfilter *cf, struct Curl_easy *data,
+ bool *input_pending)
+{
+ struct cf_h2_ctx *ctx = cf->ctx;
+ bool alive = TRUE;
+
+ *input_pending = FALSE;
+ if(!cf->next || !cf->next->cft->is_alive(cf->next, data, input_pending))
+ return FALSE;
+
+ if(*input_pending) {
+ /* This happens before we've sent off a request and the connection is
+ not in use by any other transfer, there shouldn't be any data here,
+ only "protocol frames" */
+ CURLcode result;
+ ssize_t nread = -1;
+
+ *input_pending = FALSE;
+ nread = Curl_bufq_slurp(&ctx->inbufq, nw_in_reader, cf, &result);
+ if(nread != -1) {
+ CURL_TRC_CF(data, cf, "%zd bytes stray data read before trying "
+ "h2 connection", nread);
+ if(h2_process_pending_input(cf, data, &result) < 0)
+ /* immediate error, considered dead */
+ alive = FALSE;
+ else {
+ alive = !should_close_session(ctx);
+ }
+ }
+ else if(result != CURLE_AGAIN) {
+ /* the read failed so let's say this is dead anyway */
+ alive = FALSE;
+ }
+ }
-static const struct Curl_handler Curl_handler_http2_ssl = {
- "HTTPS", /* scheme */
- ZERO_NULL, /* setup_connection */
- Curl_http, /* do_it */
- Curl_http_done, /* done */
- ZERO_NULL, /* do_more */
- ZERO_NULL, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- http2_getsock, /* proto_getsock */
- http2_getsock, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- http2_getsock, /* perform_getsock */
- http2_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- http2_conncheck, /* connection_check */
- ZERO_NULL, /* attach connection */
- PORT_HTTP, /* defport */
- CURLPROTO_HTTPS, /* protocol */
- CURLPROTO_HTTP, /* family */
- PROTOPT_SSL | PROTOPT_STREAM /* flags */
-};
+ return alive;
+}
+
+static CURLcode http2_send_ping(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_h2_ctx *ctx = cf->ctx;
+ int rc;
+
+ rc = nghttp2_submit_ping(ctx->h2, 0, ZERO_NULL);
+ if(rc) {
+ failf(data, "nghttp2_submit_ping() failed: %s(%d)",
+ nghttp2_strerror(rc), rc);
+ return CURLE_HTTP2;
+ }
+
+ rc = nghttp2_session_send(ctx->h2);
+ if(rc) {
+ failf(data, "nghttp2_session_send() failed: %s(%d)",
+ nghttp2_strerror(rc), rc);
+ return CURLE_SEND_ERROR;
+ }
+ return CURLE_OK;
+}
/*
* Store nghttp2 version info in this buffer.
@@ -369,44 +654,64 @@ void Curl_http2_ver(char *p, size_t len)
(void)msnprintf(p, len, "nghttp2/%s", h2->version_str);
}
+static CURLcode nw_out_flush(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_h2_ctx *ctx = cf->ctx;
+ ssize_t nwritten;
+ CURLcode result;
+
+ (void)data;
+ if(Curl_bufq_is_empty(&ctx->outbufq))
+ return CURLE_OK;
+
+ nwritten = Curl_bufq_pass(&ctx->outbufq, nw_out_writer, cf, &result);
+ if(nwritten < 0) {
+ if(result == CURLE_AGAIN) {
+ CURL_TRC_CF(data, cf, "flush nw send buffer(%zu) -> EAGAIN",
+ Curl_bufq_len(&ctx->outbufq));
+ ctx->nw_out_blocked = 1;
+ }
+ return result;
+ }
+ return Curl_bufq_is_empty(&ctx->outbufq)? CURLE_OK: CURLE_AGAIN;
+}
+
/*
* The implementation of nghttp2_send_callback type. Here we write |data| with
* size |length| to the network and return the number of bytes actually
* written. See the documentation of nghttp2_send_callback for the details.
*/
static ssize_t send_callback(nghttp2_session *h2,
- const uint8_t *mem, size_t length, int flags,
+ const uint8_t *buf, size_t blen, int flags,
void *userp)
{
- struct connectdata *conn = (struct connectdata *)userp;
- struct http_conn *c = &conn->proto.httpc;
- struct Curl_easy *data = get_transfer(c);
- ssize_t written;
+ struct Curl_cfilter *cf = userp;
+ struct cf_h2_ctx *ctx = cf->ctx;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+ ssize_t nwritten;
CURLcode result = CURLE_OK;
(void)h2;
(void)flags;
+ DEBUGASSERT(data);
- if(!c->send_underlying)
- /* called before setup properly! */
- return NGHTTP2_ERR_CALLBACK_FAILURE;
-
- written = ((Curl_send*)c->send_underlying)(data, FIRSTSOCKET,
- mem, length, &result);
-
- if(result == CURLE_AGAIN) {
- return NGHTTP2_ERR_WOULDBLOCK;
- }
-
- if(written == -1) {
+ nwritten = Curl_bufq_write_pass(&ctx->outbufq, buf, blen,
+ nw_out_writer, cf, &result);
+ if(nwritten < 0) {
+ if(result == CURLE_AGAIN) {
+ ctx->nw_out_blocked = 1;
+ return NGHTTP2_ERR_WOULDBLOCK;
+ }
failf(data, "Failed sending HTTP2 data");
return NGHTTP2_ERR_CALLBACK_FAILURE;
}
- if(!written)
+ if(!nwritten) {
+ ctx->nw_out_blocked = 1;
return NGHTTP2_ERR_WOULDBLOCK;
-
- return written;
+ }
+ return nwritten;
}
@@ -427,8 +732,8 @@ char *curl_pushheader_bynum(struct curl_pushheaders *h, size_t num)
if(!h || !GOOD_EASY_HANDLE(h->data))
return NULL;
else {
- struct HTTP *stream = h->data->req.p.http;
- if(num < stream->push_headers_used)
+ struct stream_ctx *stream = H2_STREAM_CTX(h->data);
+ if(stream && num < stream->push_headers_used)
return stream->push_headers[num];
}
return NULL;
@@ -439,6 +744,9 @@ char *curl_pushheader_bynum(struct curl_pushheaders *h, size_t num)
*/
char *curl_pushheader_byname(struct curl_pushheaders *h, const char *header)
{
+ struct stream_ctx *stream;
+ size_t len;
+ size_t i;
/* Verify that we got a good easy handle in the push header struct,
mostly to detect rubbish input fast(er). Also empty header name
is just a rubbish too. We have to allow ":" at the beginning of
@@ -448,45 +756,25 @@ char *curl_pushheader_byname(struct curl_pushheaders *h, const char *header)
if(!h || !GOOD_EASY_HANDLE(h->data) || !header || !header[0] ||
!strcmp(header, ":") || strchr(header + 1, ':'))
return NULL;
- else {
- struct HTTP *stream = h->data->req.p.http;
- size_t len = strlen(header);
- size_t i;
- for(i = 0; i<stream->push_headers_used; i++) {
- if(!strncmp(header, stream->push_headers[i], len)) {
- /* sub-match, make sure that it is followed by a colon */
- if(stream->push_headers[i][len] != ':')
- continue;
- return &stream->push_headers[i][len + 1];
- }
+
+ stream = H2_STREAM_CTX(h->data);
+ if(!stream)
+ return NULL;
+
+ len = strlen(header);
+ for(i = 0; i<stream->push_headers_used; i++) {
+ if(!strncmp(header, stream->push_headers[i], len)) {
+ /* sub-match, make sure that it is followed by a colon */
+ if(stream->push_headers[i][len] != ':')
+ continue;
+ return &stream->push_headers[i][len + 1];
}
}
return NULL;
}
-/*
- * This specific transfer on this connection has been "drained".
- */
-static void drained_transfer(struct Curl_easy *data,
- struct http_conn *httpc)
-{
- DEBUGASSERT(httpc->drain_total >= data->state.drain);
- httpc->drain_total -= data->state.drain;
- data->state.drain = 0;
-}
-
-/*
- * Mark this transfer to get "drained".
- */
-static void drain_this(struct Curl_easy *data,
- struct http_conn *httpc)
-{
- data->state.drain++;
- httpc->drain_total++;
- DEBUGASSERT(httpc->drain_total >= data->state.drain);
-}
-
-static struct Curl_easy *duphandle(struct Curl_easy *data)
+static struct Curl_easy *h2_duphandle(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
struct Curl_easy *second = curl_easy_duphandle(data);
if(second) {
@@ -496,10 +784,11 @@ static struct Curl_easy *duphandle(struct Curl_easy *data)
(void)Curl_close(&second);
}
else {
+ struct stream_ctx *second_stream;
+
second->req.p.http = http;
- Curl_dyn_init(&http->header_recvbuf, DYN_H2_HEADERS);
- Curl_http2_setup_req(second);
- second->state.stream_weight = data->state.stream_weight;
+ http2_data_setup(cf, second, &second_stream);
+ second->state.priority.weight = data->state.priority.weight;
}
}
return second;
@@ -517,7 +806,7 @@ static int set_transfer_url(struct Curl_easy *data,
if(!u)
return 5;
- v = curl_pushheader_byname(hp, H2H3_PSEUDO_SCHEME);
+ v = curl_pushheader_byname(hp, HTTP_PSEUDO_SCHEME);
if(v) {
uc = curl_url_set(u, CURLUPART_SCHEME, v, 0);
if(uc) {
@@ -526,16 +815,16 @@ static int set_transfer_url(struct Curl_easy *data,
}
}
- v = curl_pushheader_byname(hp, H2H3_PSEUDO_AUTHORITY);
+ v = curl_pushheader_byname(hp, HTTP_PSEUDO_AUTHORITY);
if(v) {
- uc = curl_url_set(u, CURLUPART_HOST, v, 0);
+ uc = Curl_url_set_authority(u, v, CURLU_DISALLOW_USER);
if(uc) {
rc = 2;
goto fail;
}
}
- v = curl_pushheader_byname(hp, H2H3_PSEUDO_PATH);
+ v = curl_pushheader_byname(hp, HTTP_PSEUDO_PATH);
if(v) {
uc = curl_url_set(u, CURLUPART_PATH, v, 0);
if(uc) {
@@ -547,7 +836,7 @@ static int set_transfer_url(struct Curl_easy *data,
uc = curl_url_get(u, CURLUPART_URL, &url, 0);
if(uc)
rc = 4;
- fail:
+fail:
curl_url_cleanup(u);
if(rc)
return rc;
@@ -559,22 +848,34 @@ static int set_transfer_url(struct Curl_easy *data,
return 0;
}
-static int push_promise(struct Curl_easy *data,
- struct connectdata *conn,
+static void discard_newhandle(struct Curl_cfilter *cf,
+ struct Curl_easy *newhandle)
+{
+ if(!newhandle->req.p.http) {
+ http2_data_done(cf, newhandle, TRUE);
+ newhandle->req.p.http = NULL;
+ }
+ (void)Curl_close(&newhandle);
+}
+
+static int push_promise(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
const nghttp2_push_promise *frame)
{
+ struct cf_h2_ctx *ctx = cf->ctx;
int rv; /* one of the CURL_PUSH_* defines */
- H2BUGF(infof(data, "PUSH_PROMISE received, stream %u",
- frame->promised_stream_id));
+
+ CURL_TRC_CF(data, cf, "[%d] PUSH_PROMISE received",
+ frame->promised_stream_id);
if(data->multi->push_cb) {
- struct HTTP *stream;
- struct HTTP *newstream;
+ struct stream_ctx *stream;
+ struct stream_ctx *newstream;
struct curl_pushheaders heads;
CURLMcode rc;
- struct http_conn *httpc;
+ CURLcode result;
size_t i;
/* clone the parent */
- struct Curl_easy *newhandle = duphandle(data);
+ struct Curl_easy *newhandle = h2_duphandle(cf, data);
if(!newhandle) {
infof(data, "failed to duplicate handle");
rv = CURL_PUSH_DENY; /* FAIL HARD */
@@ -584,23 +885,32 @@ static int push_promise(struct Curl_easy *data,
heads.data = data;
heads.frame = frame;
/* ask the application */
- H2BUGF(infof(data, "Got PUSH_PROMISE, ask application"));
+ CURL_TRC_CF(data, cf, "Got PUSH_PROMISE, ask application");
- stream = data->req.p.http;
+ stream = H2_STREAM_CTX(data);
if(!stream) {
failf(data, "Internal NULL stream");
- (void)Curl_close(&newhandle);
+ discard_newhandle(cf, newhandle);
rv = CURL_PUSH_DENY;
goto fail;
}
rv = set_transfer_url(newhandle, &heads);
if(rv) {
- (void)Curl_close(&newhandle);
+ discard_newhandle(cf, newhandle);
rv = CURL_PUSH_DENY;
goto fail;
}
+ result = http2_data_setup(cf, newhandle, &newstream);
+ if(result) {
+ failf(data, "error setting up stream: %d", result);
+ discard_newhandle(cf, newhandle);
+ rv = CURL_PUSH_DENY;
+ goto fail;
+ }
+ DEBUGASSERT(stream);
+
Curl_set_in_callback(data, true);
rv = data->multi->push_cb(data, newhandle,
stream->push_headers_used, &heads,
@@ -617,128 +927,110 @@ static int push_promise(struct Curl_easy *data,
if(rv) {
DEBUGASSERT((rv > CURL_PUSH_OK) && (rv <= CURL_PUSH_ERROROUT));
/* denied, kill off the new handle again */
- http2_stream_free(newhandle->req.p.http);
- newhandle->req.p.http = NULL;
- (void)Curl_close(&newhandle);
+ discard_newhandle(cf, newhandle);
goto fail;
}
- newstream = newhandle->req.p.http;
- newstream->stream_id = frame->promised_stream_id;
+ newstream->id = frame->promised_stream_id;
newhandle->req.maxdownload = -1;
newhandle->req.size = -1;
/* approved, add to the multi handle and immediately switch to PERFORM
state with the given connection !*/
- rc = Curl_multi_add_perform(data->multi, newhandle, conn);
+ rc = Curl_multi_add_perform(data->multi, newhandle, cf->conn);
if(rc) {
infof(data, "failed to add handle to multi");
- http2_stream_free(newhandle->req.p.http);
- newhandle->req.p.http = NULL;
- Curl_close(&newhandle);
+ discard_newhandle(cf, newhandle);
rv = CURL_PUSH_DENY;
goto fail;
}
- httpc = &conn->proto.httpc;
- rv = nghttp2_session_set_stream_user_data(httpc->h2,
- frame->promised_stream_id,
+ rv = nghttp2_session_set_stream_user_data(ctx->h2,
+ newstream->id,
newhandle);
if(rv) {
infof(data, "failed to set user_data for stream %u",
- frame->promised_stream_id);
+ newstream->id);
DEBUGASSERT(0);
rv = CURL_PUSH_DENY;
goto fail;
}
- Curl_dyn_init(&newstream->header_recvbuf, DYN_H2_HEADERS);
- Curl_dyn_init(&newstream->trailer_recvbuf, DYN_H2_TRAILERS);
}
else {
- H2BUGF(infof(data, "Got PUSH_PROMISE, ignore it"));
+ CURL_TRC_CF(data, cf, "Got PUSH_PROMISE, ignore it");
rv = CURL_PUSH_DENY;
}
- fail:
+fail:
return rv;
}
-/*
- * multi_connchanged() is called to tell that there is a connection in
- * this multi handle that has changed state (multiplexing become possible, the
- * number of allowed streams changed or similar), and a subsequent use of this
- * multi handle should move CONNECT_PEND handles back to CONNECT to have them
- * retry.
- */
-static void multi_connchanged(struct Curl_multi *multi)
+static CURLcode recvbuf_write_hds(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ const char *buf, size_t blen)
{
- multi->recheckstate = TRUE;
+ struct stream_ctx *stream = H2_STREAM_CTX(data);
+ ssize_t nwritten;
+ CURLcode result;
+
+ (void)cf;
+ nwritten = Curl_bufq_write(&stream->recvbuf,
+ (const unsigned char *)buf, blen, &result);
+ if(nwritten < 0)
+ return result;
+ stream->resp_hds_len += (size_t)nwritten;
+ DEBUGASSERT((size_t)nwritten == blen);
+ return CURLE_OK;
}
-static int on_frame_recv(nghttp2_session *session, const nghttp2_frame *frame,
- void *userp)
+static CURLcode on_stream_frame(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ const nghttp2_frame *frame)
{
- struct connectdata *conn = (struct connectdata *)userp;
- struct http_conn *httpc = &conn->proto.httpc;
- struct Curl_easy *data_s = NULL;
- struct HTTP *stream = NULL;
- struct Curl_easy *data = get_transfer(httpc);
- int rv;
- size_t left, ncopy;
+ struct cf_h2_ctx *ctx = cf->ctx;
+ struct stream_ctx *stream = H2_STREAM_CTX(data);
int32_t stream_id = frame->hd.stream_id;
CURLcode result;
+ size_t rbuflen;
+ int rv;
- if(!stream_id) {
- /* stream ID zero is for connection-oriented stuff */
- if(frame->hd.type == NGHTTP2_SETTINGS) {
- uint32_t max_conn = httpc->settings.max_concurrent_streams;
- H2BUGF(infof(data, "Got SETTINGS"));
- httpc->settings.max_concurrent_streams =
- nghttp2_session_get_remote_settings(
- session, NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS);
- httpc->settings.enable_push =
- nghttp2_session_get_remote_settings(
- session, NGHTTP2_SETTINGS_ENABLE_PUSH);
- H2BUGF(infof(data, "MAX_CONCURRENT_STREAMS == %d",
- httpc->settings.max_concurrent_streams));
- H2BUGF(infof(data, "ENABLE_PUSH == %s",
- httpc->settings.enable_push?"TRUE":"false"));
- if(max_conn != httpc->settings.max_concurrent_streams) {
- /* only signal change if the value actually changed */
- infof(data,
- "Connection state changed (MAX_CONCURRENT_STREAMS == %u)!",
- httpc->settings.max_concurrent_streams);
- multi_connchanged(data->multi);
- }
- }
- return 0;
- }
- data_s = nghttp2_session_get_stream_user_data(session, stream_id);
- if(!data_s) {
- H2BUGF(infof(data,
- "No Curl_easy associated with stream: %u",
- stream_id));
- return 0;
- }
-
- stream = data_s->req.p.http;
if(!stream) {
- H2BUGF(infof(data_s, "No proto pointer for stream: %u",
- stream_id));
- return NGHTTP2_ERR_CALLBACK_FAILURE;
+ CURL_TRC_CF(data, cf, "[%d] No stream_ctx set", stream_id);
+ return CURLE_FAILED_INIT;
}
- H2BUGF(infof(data_s, "on_frame_recv() header %x stream %u",
- frame->hd.type, stream_id));
-
switch(frame->hd.type) {
case NGHTTP2_DATA:
- /* If body started on this stream, then receiving DATA is illegal. */
+ rbuflen = Curl_bufq_len(&stream->recvbuf);
+ CURL_TRC_CF(data, cf, "[%d] DATA, buffered=%zu, window=%d/%d",
+ stream_id, rbuflen,
+ nghttp2_session_get_stream_effective_recv_data_length(
+ ctx->h2, stream->id),
+ nghttp2_session_get_stream_effective_local_window_size(
+ ctx->h2, stream->id));
+ /* If !body started on this stream, then receiving DATA is illegal. */
if(!stream->bodystarted) {
- rv = nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE,
+ rv = nghttp2_submit_rst_stream(ctx->h2, NGHTTP2_FLAG_NONE,
stream_id, NGHTTP2_PROTOCOL_ERROR);
if(nghttp2_is_fatal(rv)) {
- return NGHTTP2_ERR_CALLBACK_FAILURE;
+ return CURLE_RECV_ERROR;
+ }
+ }
+ if(frame->hd.flags & NGHTTP2_FLAG_END_STREAM) {
+ drain_stream(cf, data, stream);
+ }
+ else if(rbuflen > stream->local_window_size) {
+ int32_t wsize = nghttp2_session_get_stream_local_window_size(
+ ctx->h2, stream->id);
+ if(wsize > 0 && (uint32_t)wsize != stream->local_window_size) {
+ /* H2 flow control is not absolute, as the server might not have the
+ * same view, yet. When we receive more than we want, we enforce
+ * the local window size again to make nghttp2 send WINDOW_UPATEs
+ * accordingly. */
+ nghttp2_session_set_local_window_size(ctx->h2,
+ NGHTTP2_FLAG_NONE,
+ stream->id,
+ stream->local_window_size);
}
}
break;
@@ -753,7 +1045,7 @@ static int on_frame_recv(nghttp2_session *session, const nghttp2_frame *frame,
stream->status_code. Fuzzing has proven this can still be reached
without status code having been set. */
if(stream->status_code == -1)
- return NGHTTP2_ERR_CALLBACK_FAILURE;
+ return CURLE_RECV_ERROR;
/* Only final status code signals the end of header */
if(stream->status_code / 100 != 1) {
@@ -761,69 +1053,232 @@ static int on_frame_recv(nghttp2_session *session, const nghttp2_frame *frame,
stream->status_code = -1;
}
- result = Curl_dyn_addn(&stream->header_recvbuf, STRCONST("\r\n"));
+ result = recvbuf_write_hds(cf, data, STRCONST("\r\n"));
if(result)
- return NGHTTP2_ERR_CALLBACK_FAILURE;
-
- left = Curl_dyn_len(&stream->header_recvbuf) -
- stream->nread_header_recvbuf;
- ncopy = CURLMIN(stream->len, left);
+ return result;
- memcpy(&stream->mem[stream->memlen],
- Curl_dyn_ptr(&stream->header_recvbuf) +
- stream->nread_header_recvbuf,
- ncopy);
- stream->nread_header_recvbuf += ncopy;
-
- DEBUGASSERT(stream->mem);
- H2BUGF(infof(data_s, "Store %zu bytes headers from stream %u at %p",
- ncopy, stream_id, stream->mem));
-
- stream->len -= ncopy;
- stream->memlen += ncopy;
-
- drain_this(data_s, httpc);
- /* if we receive data for another handle, wake that up */
- if(get_transfer(httpc) != data_s)
- Curl_expire(data_s, 0, EXPIRE_RUN_NOW);
+ if(stream->status_code / 100 != 1) {
+ stream->resp_hds_complete = TRUE;
+ }
+ drain_stream(cf, data, stream);
break;
case NGHTTP2_PUSH_PROMISE:
- rv = push_promise(data_s, conn, &frame->push_promise);
+ rv = push_promise(cf, data, &frame->push_promise);
if(rv) { /* deny! */
- int h2;
DEBUGASSERT((rv > CURL_PUSH_OK) && (rv <= CURL_PUSH_ERROROUT));
- h2 = nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE,
+ rv = nghttp2_submit_rst_stream(ctx->h2, NGHTTP2_FLAG_NONE,
frame->push_promise.promised_stream_id,
NGHTTP2_CANCEL);
- if(nghttp2_is_fatal(h2))
- return NGHTTP2_ERR_CALLBACK_FAILURE;
+ if(nghttp2_is_fatal(rv))
+ return CURLE_SEND_ERROR;
else if(rv == CURL_PUSH_ERROROUT) {
- DEBUGF(infof(data_s, "Fail the parent stream (too)"));
- return NGHTTP2_ERR_CALLBACK_FAILURE;
+ CURL_TRC_CF(data, cf, "[%d] fail in PUSH_PROMISE received",
+ stream_id);
+ return CURLE_RECV_ERROR;
}
}
break;
+ case NGHTTP2_RST_STREAM:
+ stream->closed = TRUE;
+ if(frame->rst_stream.error_code) {
+ stream->reset = TRUE;
+ }
+ stream->send_closed = TRUE;
+ drain_stream(cf, data, stream);
+ break;
+ case NGHTTP2_WINDOW_UPDATE:
+ if(CURL_WANT_SEND(data)) {
+ drain_stream(cf, data, stream);
+ }
+ break;
default:
- H2BUGF(infof(data_s, "Got frame type %x for stream %u",
- frame->hd.type, stream_id));
break;
}
+ return CURLE_OK;
+}
+
+#ifndef CURL_DISABLE_VERBOSE_STRINGS
+static int fr_print(const nghttp2_frame *frame, char *buffer, size_t blen)
+{
+ switch(frame->hd.type) {
+ case NGHTTP2_DATA: {
+ return msnprintf(buffer, blen,
+ "FRAME[DATA, len=%d, eos=%d, padlen=%d]",
+ (int)frame->hd.length,
+ !!(frame->hd.flags & NGHTTP2_FLAG_END_STREAM),
+ (int)frame->data.padlen);
+ }
+ case NGHTTP2_HEADERS: {
+ return msnprintf(buffer, blen,
+ "FRAME[HEADERS, len=%d, hend=%d, eos=%d]",
+ (int)frame->hd.length,
+ !!(frame->hd.flags & NGHTTP2_FLAG_END_HEADERS),
+ !!(frame->hd.flags & NGHTTP2_FLAG_END_STREAM));
+ }
+ case NGHTTP2_PRIORITY: {
+ return msnprintf(buffer, blen,
+ "FRAME[PRIORITY, len=%d, flags=%d]",
+ (int)frame->hd.length, frame->hd.flags);
+ }
+ case NGHTTP2_RST_STREAM: {
+ return msnprintf(buffer, blen,
+ "FRAME[RST_STREAM, len=%d, flags=%d, error=%u]",
+ (int)frame->hd.length, frame->hd.flags,
+ frame->rst_stream.error_code);
+ }
+ case NGHTTP2_SETTINGS: {
+ if(frame->hd.flags & NGHTTP2_FLAG_ACK) {
+ return msnprintf(buffer, blen, "FRAME[SETTINGS, ack=1]");
+ }
+ return msnprintf(buffer, blen,
+ "FRAME[SETTINGS, len=%d]", (int)frame->hd.length);
+ }
+ case NGHTTP2_PUSH_PROMISE: {
+ return msnprintf(buffer, blen,
+ "FRAME[PUSH_PROMISE, len=%d, hend=%d]",
+ (int)frame->hd.length,
+ !!(frame->hd.flags & NGHTTP2_FLAG_END_HEADERS));
+ }
+ case NGHTTP2_PING: {
+ return msnprintf(buffer, blen,
+ "FRAME[PING, len=%d, ack=%d]",
+ (int)frame->hd.length,
+ frame->hd.flags&NGHTTP2_FLAG_ACK);
+ }
+ case NGHTTP2_GOAWAY: {
+ char scratch[128];
+ size_t s_len = sizeof(scratch)/sizeof(scratch[0]);
+ size_t len = (frame->goaway.opaque_data_len < s_len)?
+ frame->goaway.opaque_data_len : s_len-1;
+ if(len)
+ memcpy(scratch, frame->goaway.opaque_data, len);
+ scratch[len] = '\0';
+ return msnprintf(buffer, blen, "FRAME[GOAWAY, error=%d, reason='%s', "
+ "last_stream=%d]", frame->goaway.error_code,
+ scratch, frame->goaway.last_stream_id);
+ }
+ case NGHTTP2_WINDOW_UPDATE: {
+ return msnprintf(buffer, blen,
+ "FRAME[WINDOW_UPDATE, incr=%d]",
+ frame->window_update.window_size_increment);
+ }
+ default:
+ return msnprintf(buffer, blen, "FRAME[%d, len=%d, flags=%d]",
+ frame->hd.type, (int)frame->hd.length,
+ frame->hd.flags);
+ }
+}
+
+static int on_frame_send(nghttp2_session *session, const nghttp2_frame *frame,
+ void *userp)
+{
+ struct Curl_cfilter *cf = userp;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+
+ (void)session;
+ DEBUGASSERT(data);
+ if(data && Curl_trc_cf_is_verbose(cf, data)) {
+ char buffer[256];
+ int len;
+ len = fr_print(frame, buffer, sizeof(buffer)-1);
+ buffer[len] = 0;
+ CURL_TRC_CF(data, cf, "[%d] -> %s", frame->hd.stream_id, buffer);
+ }
return 0;
}
+#endif /* !CURL_DISABLE_VERBOSE_STRINGS */
+
+static int on_frame_recv(nghttp2_session *session, const nghttp2_frame *frame,
+ void *userp)
+{
+ struct Curl_cfilter *cf = userp;
+ struct cf_h2_ctx *ctx = cf->ctx;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf), *data_s;
+ int32_t stream_id = frame->hd.stream_id;
+
+ DEBUGASSERT(data);
+#ifndef CURL_DISABLE_VERBOSE_STRINGS
+ if(Curl_trc_cf_is_verbose(cf, data)) {
+ char buffer[256];
+ int len;
+ len = fr_print(frame, buffer, sizeof(buffer)-1);
+ buffer[len] = 0;
+ CURL_TRC_CF(data, cf, "[%d] <- %s",frame->hd.stream_id, buffer);
+ }
+#endif /* !CURL_DISABLE_VERBOSE_STRINGS */
+
+ if(!stream_id) {
+ /* stream ID zero is for connection-oriented stuff */
+ DEBUGASSERT(data);
+ switch(frame->hd.type) {
+ case NGHTTP2_SETTINGS: {
+ if(!(frame->hd.flags & NGHTTP2_FLAG_ACK)) {
+ uint32_t max_conn = ctx->max_concurrent_streams;
+ ctx->max_concurrent_streams = nghttp2_session_get_remote_settings(
+ session, NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS);
+ ctx->enable_push = nghttp2_session_get_remote_settings(
+ session, NGHTTP2_SETTINGS_ENABLE_PUSH) != 0;
+ CURL_TRC_CF(data, cf, "[0] MAX_CONCURRENT_STREAMS: %d",
+ ctx->max_concurrent_streams);
+ CURL_TRC_CF(data, cf, "[0] ENABLE_PUSH: %s",
+ ctx->enable_push ? "TRUE" : "false");
+ if(data && max_conn != ctx->max_concurrent_streams) {
+ /* only signal change if the value actually changed */
+ CURL_TRC_CF(data, cf, "[0] notify MAX_CONCURRENT_STREAMS: %u",
+ ctx->max_concurrent_streams);
+ Curl_multi_connchanged(data->multi);
+ }
+ /* Since the initial stream window is 64K, a request might be on HOLD,
+ * due to exhaustion. The (initial) SETTINGS may announce a much larger
+ * window and *assume* that we treat this like a WINDOW_UPDATE. Some
+ * servers send an explicit WINDOW_UPDATE, but not all seem to do that.
+ * To be safe, we UNHOLD a stream in order not to stall. */
+ if(CURL_WANT_SEND(data)) {
+ struct stream_ctx *stream = H2_STREAM_CTX(data);
+ if(stream)
+ drain_stream(cf, data, stream);
+ }
+ }
+ break;
+ }
+ case NGHTTP2_GOAWAY:
+ ctx->goaway = TRUE;
+ ctx->goaway_error = frame->goaway.error_code;
+ ctx->last_stream_id = frame->goaway.last_stream_id;
+ if(data) {
+ infof(data, "received GOAWAY, error=%d, last_stream=%u",
+ ctx->goaway_error, ctx->last_stream_id);
+ Curl_multi_connchanged(data->multi);
+ }
+ break;
+ default:
+ break;
+ }
+ return 0;
+ }
+
+ data_s = nghttp2_session_get_stream_user_data(session, stream_id);
+ if(!data_s) {
+ CURL_TRC_CF(data, cf, "[%d] No Curl_easy associated", stream_id);
+ return 0;
+ }
+
+ return on_stream_frame(cf, data_s, frame)? NGHTTP2_ERR_CALLBACK_FAILURE : 0;
+}
static int on_data_chunk_recv(nghttp2_session *session, uint8_t flags,
int32_t stream_id,
const uint8_t *mem, size_t len, void *userp)
{
- struct HTTP *stream;
+ struct Curl_cfilter *cf = userp;
+ struct stream_ctx *stream;
struct Curl_easy *data_s;
- size_t nread;
- struct connectdata *conn = (struct connectdata *)userp;
- struct http_conn *httpc = &conn->proto.httpc;
- (void)session;
+ ssize_t nwritten;
+ CURLcode result;
(void)flags;
DEBUGASSERT(stream_id); /* should never be a zero stream ID here */
+ DEBUGASSERT(CF_DATA_CURRENT(cf));
/* get the stream from the hash based on Stream ID */
data_s = nghttp2_session_get_stream_user_data(session, stream_id);
@@ -831,100 +1286,70 @@ static int on_data_chunk_recv(nghttp2_session *session, uint8_t flags,
/* Receiving a Stream ID not in the hash should not happen - unless
we have aborted a transfer artificially and there were more data
in the pipeline. Silently ignore. */
- H2BUGF(fprintf(stderr, "Data for stream %u but it doesn't exist\n",
- stream_id));
+ CURL_TRC_CF(CF_DATA_CURRENT(cf), cf, "[%d] Data for unknown",
+ stream_id);
+ /* consumed explicitly as no one will read it */
+ nghttp2_session_consume(session, stream_id, len);
return 0;
}
- stream = data_s->req.p.http;
+ stream = H2_STREAM_CTX(data_s);
if(!stream)
return NGHTTP2_ERR_CALLBACK_FAILURE;
- nread = CURLMIN(stream->len, len);
- memcpy(&stream->mem[stream->memlen], mem, nread);
-
- stream->len -= nread;
- stream->memlen += nread;
-
- drain_this(data_s, &conn->proto.httpc);
-
- /* if we receive data for another handle, wake that up */
- if(get_transfer(httpc) != data_s)
- Curl_expire(data_s, 0, EXPIRE_RUN_NOW);
-
- H2BUGF(infof(data_s, "%zu data received for stream %u "
- "(%zu left in buffer %p, total %zu)",
- nread, stream_id,
- stream->len, stream->mem,
- stream->memlen));
-
- if(nread < len) {
- stream->pausedata = mem + nread;
- stream->pauselen = len - nread;
- H2BUGF(infof(data_s, "NGHTTP2_ERR_PAUSE - %zu bytes out of buffer"
- ", stream %u",
- len - nread, stream_id));
- data_s->conn->proto.httpc.pause_stream_id = stream_id;
+ nwritten = Curl_bufq_write(&stream->recvbuf, mem, len, &result);
+ if(nwritten < 0) {
+ if(result != CURLE_AGAIN)
+ return NGHTTP2_ERR_CALLBACK_FAILURE;
- return NGHTTP2_ERR_PAUSE;
+ nwritten = 0;
}
- /* pause execution of nghttp2 if we received data for another handle
- in order to process them first. */
- if(get_transfer(httpc) != data_s) {
- data_s->conn->proto.httpc.pause_stream_id = stream_id;
-
- return NGHTTP2_ERR_PAUSE;
- }
+ /* if we receive data for another handle, wake that up */
+ drain_stream(cf, data_s, stream);
+ DEBUGASSERT((size_t)nwritten == len);
return 0;
}
static int on_stream_close(nghttp2_session *session, int32_t stream_id,
uint32_t error_code, void *userp)
{
+ struct Curl_cfilter *cf = userp;
struct Curl_easy *data_s;
- struct HTTP *stream;
- struct connectdata *conn = (struct connectdata *)userp;
+ struct stream_ctx *stream;
int rv;
(void)session;
- (void)stream_id;
- if(stream_id) {
- struct http_conn *httpc;
- /* get the stream from the hash based on Stream ID, stream ID zero is for
- connection-oriented stuff */
- data_s = nghttp2_session_get_stream_user_data(session, stream_id);
- if(!data_s) {
- /* We could get stream ID not in the hash. For example, if we
- decided to reject stream (e.g., PUSH_PROMISE). */
- return 0;
- }
- H2BUGF(infof(data_s, "on_stream_close(), %s (err %d), stream %u",
- nghttp2_http2_strerror(error_code), error_code, stream_id));
- stream = data_s->req.p.http;
- if(!stream)
- return NGHTTP2_ERR_CALLBACK_FAILURE;
+ /* get the stream from the hash based on Stream ID, stream ID zero is for
+ connection-oriented stuff */
+ data_s = stream_id?
+ nghttp2_session_get_stream_user_data(session, stream_id) : NULL;
+ if(!data_s) {
+ return 0;
+ }
+ stream = H2_STREAM_CTX(data_s);
+ if(!stream)
+ return NGHTTP2_ERR_CALLBACK_FAILURE;
- stream->closed = TRUE;
- httpc = &conn->proto.httpc;
- drain_this(data_s, httpc);
- Curl_expire(data_s, 0, EXPIRE_RUN_NOW);
- stream->error = error_code;
+ stream->closed = TRUE;
+ stream->error = error_code;
+ if(stream->error)
+ stream->reset = TRUE;
- /* remove the entry from the hash as the stream is now gone */
- rv = nghttp2_session_set_stream_user_data(session, stream_id, 0);
- if(rv) {
- infof(data_s, "http/2: failed to clear user_data for stream %u",
- stream_id);
- DEBUGASSERT(0);
- }
- if(stream_id == httpc->pause_stream_id) {
- H2BUGF(infof(data_s, "Stopped the pause stream"));
- httpc->pause_stream_id = 0;
- }
- H2BUGF(infof(data_s, "Removed stream %u hash", stream_id));
- stream->stream_id = 0; /* cleared */
+ if(stream->error)
+ CURL_TRC_CF(data_s, cf, "[%d] RESET: %s (err %d)",
+ stream_id, nghttp2_http2_strerror(error_code), error_code);
+ else
+ CURL_TRC_CF(data_s, cf, "[%d] CLOSED", stream_id);
+ drain_stream(cf, data_s, stream);
+
+ /* remove `data_s` from the nghttp2 stream */
+ rv = nghttp2_session_set_stream_user_data(session, stream_id, 0);
+ if(rv) {
+ infof(data_s, "http/2: failed to clear user_data for stream %u",
+ stream_id);
+ DEBUGASSERT(0);
}
return 0;
}
@@ -932,22 +1357,21 @@ static int on_stream_close(nghttp2_session *session, int32_t stream_id,
static int on_begin_headers(nghttp2_session *session,
const nghttp2_frame *frame, void *userp)
{
- struct HTTP *stream;
+ struct Curl_cfilter *cf = userp;
+ struct stream_ctx *stream;
struct Curl_easy *data_s = NULL;
- (void)userp;
+ (void)cf;
data_s = nghttp2_session_get_stream_user_data(session, frame->hd.stream_id);
if(!data_s) {
return 0;
}
- H2BUGF(infof(data_s, "on_begin_headers() was called"));
-
if(frame->hd.type != NGHTTP2_HEADERS) {
return 0;
}
- stream = data_s->req.p.http;
+ stream = H2_STREAM_CTX(data_s);
if(!stream || !stream->bodystarted) {
return 0;
}
@@ -955,33 +1379,6 @@ static int on_begin_headers(nghttp2_session *session,
return 0;
}
-/* Decode HTTP status code. Returns -1 if no valid status code was
- decoded. */
-static int decode_status_code(const uint8_t *value, size_t len)
-{
- int i;
- int res;
-
- if(len != 3) {
- return -1;
- }
-
- res = 0;
-
- for(i = 0; i < 3; ++i) {
- char c = value[i];
-
- if(c < '0' || c > '9') {
- return -1;
- }
-
- res *= 10;
- res += c - '0';
- }
-
- return res;
-}
-
/* frame->hd.type is either NGHTTP2_HEADERS or NGHTTP2_PUSH_PROMISE */
static int on_header(nghttp2_session *session, const nghttp2_frame *frame,
const uint8_t *name, size_t namelen,
@@ -989,11 +1386,10 @@ static int on_header(nghttp2_session *session, const nghttp2_frame *frame,
uint8_t flags,
void *userp)
{
- struct HTTP *stream;
+ struct Curl_cfilter *cf = userp;
+ struct stream_ctx *stream;
struct Curl_easy *data_s;
int32_t stream_id = frame->hd.stream_id;
- struct connectdata *conn = (struct connectdata *)userp;
- struct http_conn *httpc = &conn->proto.httpc;
CURLcode result;
(void)flags;
@@ -1006,7 +1402,7 @@ static int on_header(nghttp2_session *session, const nghttp2_frame *frame,
internal error more than anything else! */
return NGHTTP2_ERR_CALLBACK_FAILURE;
- stream = data_s->req.p.http;
+ stream = H2_STREAM_CTX(data_s);
if(!stream) {
failf(data_s, "Internal NULL stream");
return NGHTTP2_ERR_CALLBACK_FAILURE;
@@ -1017,16 +1413,17 @@ static int on_header(nghttp2_session *session, const nghttp2_frame *frame,
if(frame->hd.type == NGHTTP2_PUSH_PROMISE) {
char *h;
- if(!strcmp(H2H3_PSEUDO_AUTHORITY, (const char *)name)) {
+ if(!strcmp(HTTP_PSEUDO_AUTHORITY, (const char *)name)) {
/* pseudo headers are lower case */
int rc = 0;
- char *check = aprintf("%s:%d", conn->host.name, conn->remote_port);
+ char *check = aprintf("%s:%d", cf->conn->host.name,
+ cf->conn->remote_port);
if(!check)
/* no memory */
return NGHTTP2_ERR_CALLBACK_FAILURE;
- if(!Curl_strcasecompare(check, (const char *)value) &&
- ((conn->remote_port != conn->given->defport) ||
- !Curl_strcasecompare(conn->host.name, (const char *)value))) {
+ if(!strcasecompare(check, (const char *)value) &&
+ ((cf->conn->remote_port != cf->conn->given->defport) ||
+ !strcasecompare(cf->conn->host.name, (const char *)value))) {
/* This is push is not for the same authority that was asked for in
* the URL. RFC 7540 section 8.2 says: "A client MUST treat a
* PUSH_PROMISE for which the server is not authoritative as a stream
@@ -1075,87 +1472,89 @@ static int on_header(nghttp2_session *session, const nghttp2_frame *frame,
if(stream->bodystarted) {
/* This is a trailer */
- H2BUGF(infof(data_s, "h2 trailer: %.*s: %.*s", namelen, name, valuelen,
- value));
- result = Curl_dyn_addf(&stream->trailer_recvbuf,
- "%.*s: %.*s\r\n", namelen, name,
- valuelen, value);
+ CURL_TRC_CF(data_s, cf, "[%d] trailer: %.*s: %.*s",
+ stream->id, (int)namelen, name, (int)valuelen, value);
+ result = Curl_dynhds_add(&stream->resp_trailers,
+ (const char *)name, namelen,
+ (const char *)value, valuelen);
if(result)
return NGHTTP2_ERR_CALLBACK_FAILURE;
return 0;
}
- if(namelen == sizeof(H2H3_PSEUDO_STATUS) - 1 &&
- memcmp(H2H3_PSEUDO_STATUS, name, namelen) == 0) {
- /* nghttp2 guarantees :status is received first and only once, and
- value is 3 digits status code, and decode_status_code always
- succeeds. */
+ if(namelen == sizeof(HTTP_PSEUDO_STATUS) - 1 &&
+ memcmp(HTTP_PSEUDO_STATUS, name, namelen) == 0) {
+ /* nghttp2 guarantees :status is received first and only once. */
char buffer[32];
- stream->status_code = decode_status_code(value, valuelen);
- DEBUGASSERT(stream->status_code != -1);
- msnprintf(buffer, sizeof(buffer), H2H3_PSEUDO_STATUS ":%u\r",
+ result = Curl_http_decode_status(&stream->status_code,
+ (const char *)value, valuelen);
+ if(result)
+ return NGHTTP2_ERR_CALLBACK_FAILURE;
+ msnprintf(buffer, sizeof(buffer), HTTP_PSEUDO_STATUS ":%u\r",
stream->status_code);
result = Curl_headers_push(data_s, buffer, CURLH_PSEUDO);
if(result)
return NGHTTP2_ERR_CALLBACK_FAILURE;
- result = Curl_dyn_addn(&stream->header_recvbuf, STRCONST("HTTP/2 "));
+ result = recvbuf_write_hds(cf, data_s, STRCONST("HTTP/2 "));
if(result)
return NGHTTP2_ERR_CALLBACK_FAILURE;
- result = Curl_dyn_addn(&stream->header_recvbuf, value, valuelen);
+ result = recvbuf_write_hds(cf, data_s, (const char *)value, valuelen);
if(result)
return NGHTTP2_ERR_CALLBACK_FAILURE;
/* the space character after the status code is mandatory */
- result = Curl_dyn_addn(&stream->header_recvbuf, STRCONST(" \r\n"));
+ result = recvbuf_write_hds(cf, data_s, STRCONST(" \r\n"));
if(result)
return NGHTTP2_ERR_CALLBACK_FAILURE;
/* if we receive data for another handle, wake that up */
- if(get_transfer(httpc) != data_s)
+ if(CF_DATA_CURRENT(cf) != data_s)
Curl_expire(data_s, 0, EXPIRE_RUN_NOW);
- H2BUGF(infof(data_s, "h2 status: HTTP/2 %03d (easy %p)",
- stream->status_code, data_s));
+ CURL_TRC_CF(data_s, cf, "[%d] status: HTTP/2 %03d",
+ stream->id, stream->status_code);
return 0;
}
/* nghttp2 guarantees that namelen > 0, and :status was already
received, and this is not pseudo-header field . */
- /* convert to a HTTP1-style header */
- result = Curl_dyn_addn(&stream->header_recvbuf, name, namelen);
+ /* convert to an HTTP1-style header */
+ result = recvbuf_write_hds(cf, data_s, (const char *)name, namelen);
if(result)
return NGHTTP2_ERR_CALLBACK_FAILURE;
- result = Curl_dyn_addn(&stream->header_recvbuf, STRCONST(": "));
+ result = recvbuf_write_hds(cf, data_s, STRCONST(": "));
if(result)
return NGHTTP2_ERR_CALLBACK_FAILURE;
- result = Curl_dyn_addn(&stream->header_recvbuf, value, valuelen);
+ result = recvbuf_write_hds(cf, data_s, (const char *)value, valuelen);
if(result)
return NGHTTP2_ERR_CALLBACK_FAILURE;
- result = Curl_dyn_addn(&stream->header_recvbuf, STRCONST("\r\n"));
+ result = recvbuf_write_hds(cf, data_s, STRCONST("\r\n"));
if(result)
return NGHTTP2_ERR_CALLBACK_FAILURE;
/* if we receive data for another handle, wake that up */
- if(get_transfer(httpc) != data_s)
+ if(CF_DATA_CURRENT(cf) != data_s)
Curl_expire(data_s, 0, EXPIRE_RUN_NOW);
- H2BUGF(infof(data_s, "h2 header: %.*s: %.*s", namelen, name, valuelen,
- value));
+ CURL_TRC_CF(data_s, cf, "[%d] header: %.*s: %.*s",
+ stream->id, (int)namelen, name, (int)valuelen, value);
return 0; /* 0 is successful */
}
-static ssize_t data_source_read_callback(nghttp2_session *session,
- int32_t stream_id,
- uint8_t *buf, size_t length,
- uint32_t *data_flags,
- nghttp2_data_source *source,
- void *userp)
+static ssize_t req_body_read_callback(nghttp2_session *session,
+ int32_t stream_id,
+ uint8_t *buf, size_t length,
+ uint32_t *data_flags,
+ nghttp2_data_source *source,
+ void *userp)
{
+ struct Curl_cfilter *cf = userp;
struct Curl_easy *data_s;
- struct HTTP *stream = NULL;
- size_t nread;
+ struct stream_ctx *stream = NULL;
+ CURLcode result;
+ ssize_t nread;
(void)source;
- (void)userp;
+ (void)cf;
if(stream_id) {
/* get the stream from the hash based on Stream ID, stream ID zero is for
connection-oriented stuff */
@@ -1165,31 +1564,32 @@ static ssize_t data_source_read_callback(nghttp2_session *session,
internal error more than anything else! */
return NGHTTP2_ERR_CALLBACK_FAILURE;
- stream = data_s->req.p.http;
+ stream = H2_STREAM_CTX(data_s);
if(!stream)
return NGHTTP2_ERR_CALLBACK_FAILURE;
}
else
return NGHTTP2_ERR_INVALID_ARGUMENT;
- nread = CURLMIN(stream->upload_len, length);
- if(nread > 0) {
- memcpy(buf, stream->upload_mem, nread);
- stream->upload_mem += nread;
- stream->upload_len -= nread;
- if(data_s->state.infilesize != -1)
- stream->upload_left -= nread;
+ nread = Curl_bufq_read(&stream->sendbuf, buf, length, &result);
+ if(nread < 0) {
+ if(result != CURLE_AGAIN)
+ return NGHTTP2_ERR_CALLBACK_FAILURE;
+ nread = 0;
}
+ if(nread > 0 && stream->upload_left != -1)
+ stream->upload_left -= nread;
+
+ CURL_TRC_CF(data_s, cf, "[%d] req_body_read(len=%zu) left=%"
+ CURL_FORMAT_CURL_OFF_T " -> %zd, %d",
+ stream_id, length, stream->upload_left, nread, result);
+
if(stream->upload_left == 0)
*data_flags = NGHTTP2_DATA_FLAG_EOF;
else if(nread == 0)
return NGHTTP2_ERR_DEFERRED;
- H2BUGF(infof(data_s, "data_source_read_callback: "
- "returns %zu bytes stream %u",
- nread, stream_id));
-
return nread;
}
@@ -1199,184 +1599,33 @@ static int error_callback(nghttp2_session *session,
size_t len,
void *userp)
{
+ struct Curl_cfilter *cf = userp;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
(void)session;
- (void)msg;
- (void)len;
- (void)userp;
+ failf(data, "%.*s", (int)len, msg);
return 0;
}
#endif
-static void populate_settings(struct Curl_easy *data,
- struct http_conn *httpc)
-{
- nghttp2_settings_entry *iv = httpc->local_settings;
-
- iv[0].settings_id = NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS;
- iv[0].value = Curl_multi_max_concurrent_streams(data->multi);
-
- iv[1].settings_id = NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE;
- iv[1].value = HTTP2_HUGE_WINDOW_SIZE;
-
- iv[2].settings_id = NGHTTP2_SETTINGS_ENABLE_PUSH;
- iv[2].value = data->multi->push_cb != NULL;
-
- httpc->local_settings_num = 3;
-}
-
-void Curl_http2_done(struct Curl_easy *data, bool premature)
-{
- struct HTTP *http = data->req.p.http;
- struct http_conn *httpc = &data->conn->proto.httpc;
-
- /* there might be allocated resources done before this got the 'h2' pointer
- setup */
- Curl_dyn_free(&http->header_recvbuf);
- Curl_dyn_free(&http->trailer_recvbuf);
- if(http->push_headers) {
- /* if they weren't used and then freed before */
- for(; http->push_headers_used > 0; --http->push_headers_used) {
- free(http->push_headers[http->push_headers_used - 1]);
- }
- free(http->push_headers);
- http->push_headers = NULL;
- }
-
- if(!(data->conn->handler->protocol&PROTO_FAMILY_HTTP) ||
- !httpc->h2) /* not HTTP/2 ? */
- return;
-
- /* do this before the reset handling, as that might clear ->stream_id */
- if(http->stream_id == httpc->pause_stream_id) {
- H2BUGF(infof(data, "DONE the pause stream (%u)", http->stream_id));
- httpc->pause_stream_id = 0;
- }
- if(premature || (!http->closed && http->stream_id)) {
- /* RST_STREAM */
- set_transfer(httpc, data); /* set the transfer */
- H2BUGF(infof(data, "RST stream %u", http->stream_id));
- if(!nghttp2_submit_rst_stream(httpc->h2, NGHTTP2_FLAG_NONE,
- http->stream_id, NGHTTP2_STREAM_CLOSED))
- (void)nghttp2_session_send(httpc->h2);
- }
-
- if(data->state.drain)
- drained_transfer(data, httpc);
-
- /* -1 means unassigned and 0 means cleared */
- if(http->stream_id > 0) {
- int rv = nghttp2_session_set_stream_user_data(httpc->h2,
- http->stream_id, 0);
- if(rv) {
- infof(data, "http/2: failed to clear user_data for stream %u",
- http->stream_id);
- DEBUGASSERT(0);
- }
- set_transfer(httpc, NULL);
- http->stream_id = 0;
- }
-}
-
-static int client_new(struct connectdata *conn,
- nghttp2_session_callbacks *callbacks)
-{
-#if NGHTTP2_VERSION_NUM < 0x013200
- /* before 1.50.0 */
- return nghttp2_session_client_new(&conn->proto.httpc.h2, callbacks, conn);
-#else
- nghttp2_option *o;
- int rc = nghttp2_option_new(&o);
- if(rc)
- return rc;
- /* turn off RFC 9113 leading and trailing white spaces validation against
- HTTP field value. */
- nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation(o, 1);
- rc = nghttp2_session_client_new2(&conn->proto.httpc.h2, callbacks, conn,
- o);
- nghttp2_option_del(o);
- return rc;
-#endif
-}
-
/*
- * Initialize nghttp2 for a Curl connection
- */
-static CURLcode http2_init(struct Curl_easy *data, struct connectdata *conn)
-{
- if(!conn->proto.httpc.h2) {
- int rc;
- nghttp2_session_callbacks *callbacks;
-
- conn->proto.httpc.inbuf = malloc(H2_BUFSIZE);
- if(!conn->proto.httpc.inbuf)
- return CURLE_OUT_OF_MEMORY;
-
- rc = nghttp2_session_callbacks_new(&callbacks);
-
- if(rc) {
- failf(data, "Couldn't initialize nghttp2 callbacks");
- return CURLE_OUT_OF_MEMORY; /* most likely at least */
- }
-
- /* nghttp2_send_callback */
- nghttp2_session_callbacks_set_send_callback(callbacks, send_callback);
- /* nghttp2_on_frame_recv_callback */
- nghttp2_session_callbacks_set_on_frame_recv_callback
- (callbacks, on_frame_recv);
- /* nghttp2_on_data_chunk_recv_callback */
- nghttp2_session_callbacks_set_on_data_chunk_recv_callback
- (callbacks, on_data_chunk_recv);
- /* nghttp2_on_stream_close_callback */
- nghttp2_session_callbacks_set_on_stream_close_callback
- (callbacks, on_stream_close);
- /* nghttp2_on_begin_headers_callback */
- nghttp2_session_callbacks_set_on_begin_headers_callback
- (callbacks, on_begin_headers);
- /* nghttp2_on_header_callback */
- nghttp2_session_callbacks_set_on_header_callback(callbacks, on_header);
-
- nghttp2_session_callbacks_set_error_callback(callbacks, error_callback);
-
- /* The nghttp2 session is not yet setup, do it */
- rc = client_new(conn, callbacks);
-
- nghttp2_session_callbacks_del(callbacks);
-
- if(rc) {
- failf(data, "Couldn't initialize nghttp2");
- return CURLE_OUT_OF_MEMORY; /* most likely at least */
- }
- }
- return CURLE_OK;
-}
-
-/*
- * Append headers to ask for a HTTP1.1 to HTTP2 upgrade.
+ * Append headers to ask for an HTTP1.1 to HTTP2 upgrade.
*/
CURLcode Curl_http2_request_upgrade(struct dynbuf *req,
struct Curl_easy *data)
{
CURLcode result;
- ssize_t binlen;
char *base64;
size_t blen;
- struct connectdata *conn = data->conn;
struct SingleRequest *k = &data->req;
- uint8_t *binsettings = conn->proto.httpc.binsettings;
- struct http_conn *httpc = &conn->proto.httpc;
+ uint8_t binsettings[H2_BINSETTINGS_LEN];
+ ssize_t binlen; /* length of the binsettings data */
- populate_settings(data, httpc);
-
- /* this returns number of bytes it wrote */
- binlen = nghttp2_pack_settings_payload(binsettings, H2_BINSETTINGS_LEN,
- httpc->local_settings,
- httpc->local_settings_num);
+ binlen = populate_binsettings(binsettings, data);
if(binlen <= 0) {
failf(data, "nghttp2 unexpectedly failed on pack_settings_payload");
Curl_dyn_free(req);
return CURLE_FAILED_INIT;
}
- conn->proto.httpc.binlen = binlen;
result = Curl_base64url_encode((const char *)binsettings, binlen,
&base64, &blen);
@@ -1397,208 +1646,119 @@ CURLcode Curl_http2_request_upgrade(struct dynbuf *req,
return result;
}
-/*
- * Returns nonzero if current HTTP/2 session should be closed.
- */
-static int should_close_session(struct http_conn *httpc)
-{
- return httpc->drain_total == 0 && !nghttp2_session_want_read(httpc->h2) &&
- !nghttp2_session_want_write(httpc->h2);
-}
-
-/*
- * h2_process_pending_input() processes pending input left in
- * httpc->inbuf. Then, call h2_session_send() to send pending data.
- * This function returns 0 if it succeeds, or -1 and error code will
- * be assigned to *err.
- */
-static int h2_process_pending_input(struct Curl_easy *data,
- struct http_conn *httpc,
- CURLcode *err)
-{
- ssize_t nread;
- char *inbuf;
- ssize_t rv;
-
- nread = httpc->inbuflen - httpc->nread_inbuf;
- inbuf = httpc->inbuf + httpc->nread_inbuf;
-
- set_transfer(httpc, data); /* set the transfer */
- rv = nghttp2_session_mem_recv(httpc->h2, (const uint8_t *)inbuf, nread);
- if(rv < 0) {
- failf(data,
- "h2_process_pending_input: nghttp2_session_mem_recv() returned "
- "%zd:%s", rv, nghttp2_strerror((int)rv));
- *err = CURLE_RECV_ERROR;
- return -1;
- }
-
- if(nread == rv) {
- H2BUGF(infof(data,
- "h2_process_pending_input: All data in connection buffer "
- "processed"));
- httpc->inbuflen = 0;
- httpc->nread_inbuf = 0;
- }
- else {
- httpc->nread_inbuf += rv;
- H2BUGF(infof(data,
- "h2_process_pending_input: %zu bytes left in connection "
- "buffer",
- httpc->inbuflen - httpc->nread_inbuf));
- }
-
- rv = h2_session_send(data, httpc->h2);
- if(rv) {
- *err = CURLE_SEND_ERROR;
- return -1;
- }
-
- if(nghttp2_session_check_request_allowed(httpc->h2) == 0) {
- /* No more requests are allowed in the current session, so
- the connection may not be reused. This is set when a
- GOAWAY frame has been received or when the limit of stream
- identifiers has been reached. */
- connclose(data->conn, "http/2: No new requests allowed");
- }
-
- if(should_close_session(httpc)) {
- struct HTTP *stream = data->req.p.http;
- H2BUGF(infof(data,
- "h2_process_pending_input: nothing to do in this session"));
- if(stream->error)
- *err = CURLE_HTTP2;
- else {
- /* not an error per se, but should still close the connection */
- connclose(data->conn, "GOAWAY received");
- *err = CURLE_OK;
- }
- return -1;
- }
- return 0;
-}
-
-/*
- * Called from transfer.c:done_sending when we stop uploading.
- */
-CURLcode Curl_http2_done_sending(struct Curl_easy *data,
- struct connectdata *conn)
+static CURLcode http2_data_done_send(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
+ struct cf_h2_ctx *ctx = cf->ctx;
CURLcode result = CURLE_OK;
+ struct stream_ctx *stream = H2_STREAM_CTX(data);
- if((conn->handler == &Curl_handler_http2_ssl) ||
- (conn->handler == &Curl_handler_http2)) {
- /* make sure this is only attempted for HTTP/2 transfers */
- struct HTTP *stream = data->req.p.http;
- struct http_conn *httpc = &conn->proto.httpc;
- nghttp2_session *h2 = httpc->h2;
+ if(!ctx || !ctx->h2 || !stream)
+ goto out;
+ CURL_TRC_CF(data, cf, "[%d] data done send", stream->id);
+ if(!stream->send_closed) {
+ stream->send_closed = TRUE;
if(stream->upload_left) {
- /* If the stream still thinks there's data left to upload. */
-
- stream->upload_left = 0; /* DONE! */
-
+ /* we now know that everything that is buffered is all there is. */
+ stream->upload_left = Curl_bufq_len(&stream->sendbuf);
/* resume sending here to trigger the callback to get called again so
that it can signal EOF to nghttp2 */
- (void)nghttp2_session_resume_data(h2, stream->stream_id);
- (void)h2_process_pending_input(data, httpc, &result);
- }
-
- /* If nghttp2 still has pending frames unsent */
- if(nghttp2_session_want_write(h2)) {
- struct SingleRequest *k = &data->req;
- int rv;
-
- H2BUGF(infof(data, "HTTP/2 still wants to send data (easy %p)", data));
-
- /* and attempt to send the pending frames */
- rv = h2_session_send(data, h2);
- if(rv)
- result = CURLE_SEND_ERROR;
-
- if(nghttp2_session_want_write(h2)) {
- /* re-set KEEP_SEND to make sure we are called again */
- k->keepon |= KEEP_SEND;
- }
+ (void)nghttp2_session_resume_data(ctx->h2, stream->id);
+ drain_stream(cf, data, stream);
}
}
+
+out:
return result;
}
-static ssize_t http2_handle_stream_close(struct connectdata *conn,
+static ssize_t http2_handle_stream_close(struct Curl_cfilter *cf,
struct Curl_easy *data,
- struct HTTP *stream, CURLcode *err)
+ struct stream_ctx *stream,
+ CURLcode *err)
{
- struct http_conn *httpc = &conn->proto.httpc;
+ ssize_t rv = 0;
- if(httpc->pause_stream_id == stream->stream_id) {
- httpc->pause_stream_id = 0;
- }
-
- drained_transfer(data, httpc);
-
- if(httpc->pause_stream_id == 0) {
- if(h2_process_pending_input(data, httpc, err) != 0) {
- return -1;
- }
- }
-
- DEBUGASSERT(data->state.drain == 0);
-
- /* Reset to FALSE to prevent infinite loop in readwrite_data function. */
- stream->closed = FALSE;
if(stream->error == NGHTTP2_REFUSED_STREAM) {
- H2BUGF(infof(data, "REFUSED_STREAM (%u), try again on a new connection",
- stream->stream_id));
- connclose(conn, "REFUSED_STREAM"); /* don't use this anymore */
+ CURL_TRC_CF(data, cf, "[%d] REFUSED_STREAM, try again on a new "
+ "connection", stream->id);
+ connclose(cf->conn, "REFUSED_STREAM"); /* don't use this anymore */
data->state.refused_stream = TRUE;
*err = CURLE_RECV_ERROR; /* trigger Curl_retry_request() later */
return -1;
}
else if(stream->error != NGHTTP2_NO_ERROR) {
failf(data, "HTTP/2 stream %u was not closed cleanly: %s (err %u)",
- stream->stream_id, nghttp2_http2_strerror(stream->error),
+ stream->id, nghttp2_http2_strerror(stream->error),
stream->error);
*err = CURLE_HTTP2_STREAM;
return -1;
}
+ else if(stream->reset) {
+ failf(data, "HTTP/2 stream %u was reset", stream->id);
+ *err = stream->bodystarted? CURLE_PARTIAL_FILE : CURLE_RECV_ERROR;
+ return -1;
+ }
if(!stream->bodystarted) {
failf(data, "HTTP/2 stream %u was closed cleanly, but before getting "
" all response header fields, treated as error",
- stream->stream_id);
+ stream->id);
*err = CURLE_HTTP2_STREAM;
return -1;
}
- if(Curl_dyn_len(&stream->trailer_recvbuf)) {
- char *trailp = Curl_dyn_ptr(&stream->trailer_recvbuf);
- char *lf;
+ if(Curl_dynhds_count(&stream->resp_trailers)) {
+ struct dynhds_entry *e;
+ struct dynbuf dbuf;
+ size_t i;
- do {
- size_t len = 0;
- CURLcode result;
- /* each trailer line ends with a newline */
- lf = strchr(trailp, '\n');
- if(!lf)
+ *err = CURLE_OK;
+ Curl_dyn_init(&dbuf, DYN_TRAILERS);
+ for(i = 0; i < Curl_dynhds_count(&stream->resp_trailers); ++i) {
+ e = Curl_dynhds_getn(&stream->resp_trailers, i);
+ if(!e)
break;
- len = lf + 1 - trailp;
-
- Curl_debug(data, CURLINFO_HEADER_IN, trailp, len);
- /* pass the trailers one by one to the callback */
- result = Curl_client_write(data, CLIENTWRITE_HEADER, trailp, len);
- if(result) {
- *err = result;
- return -1;
- }
- trailp = ++lf;
- } while(lf);
+ Curl_dyn_reset(&dbuf);
+ *err = Curl_dyn_addf(&dbuf, "%.*s: %.*s\x0d\x0a",
+ (int)e->namelen, e->name,
+ (int)e->valuelen, e->value);
+ if(*err)
+ break;
+ Curl_debug(data, CURLINFO_HEADER_IN, Curl_dyn_ptr(&dbuf),
+ Curl_dyn_len(&dbuf));
+ *err = Curl_client_write(data, CLIENTWRITE_HEADER|CLIENTWRITE_TRAILER,
+ Curl_dyn_ptr(&dbuf), Curl_dyn_len(&dbuf));
+ if(*err)
+ break;
+ }
+ Curl_dyn_free(&dbuf);
+ if(*err)
+ goto out;
}
stream->close_handled = TRUE;
+ *err = CURLE_OK;
+ rv = 0;
- H2BUGF(infof(data, "http2_recv returns 0, http2_handle_stream_close"));
- return 0;
+out:
+ CURL_TRC_CF(data, cf, "handle_stream_close -> %zd, %d", rv, *err);
+ return rv;
+}
+
+static int sweight_wanted(const struct Curl_easy *data)
+{
+ /* 0 weight is not set by user and we take the nghttp2 default one */
+ return data->set.priority.weight?
+ data->set.priority.weight : NGHTTP2_DEFAULT_WEIGHT;
+}
+
+static int sweight_in_effect(const struct Curl_easy *data)
+{
+ /* 0 weight is not set by user and we take the nghttp2 default one */
+ return data->state.priority.weight?
+ data->state.priority.weight : NGHTTP2_DEFAULT_WEIGHT;
}
/*
@@ -1610,367 +1770,295 @@ static ssize_t http2_handle_stream_close(struct connectdata *conn,
static void h2_pri_spec(struct Curl_easy *data,
nghttp2_priority_spec *pri_spec)
{
- struct HTTP *depstream = (data->set.stream_depends_on?
- data->set.stream_depends_on->req.p.http:NULL);
- int32_t depstream_id = depstream? depstream->stream_id:0;
- nghttp2_priority_spec_init(pri_spec, depstream_id, data->set.stream_weight,
- data->set.stream_depends_e);
- data->state.stream_weight = data->set.stream_weight;
- data->state.stream_depends_e = data->set.stream_depends_e;
- data->state.stream_depends_on = data->set.stream_depends_on;
+ struct Curl_data_priority *prio = &data->set.priority;
+ struct stream_ctx *depstream = H2_STREAM_CTX(prio->parent);
+ int32_t depstream_id = depstream? depstream->id:0;
+ nghttp2_priority_spec_init(pri_spec, depstream_id,
+ sweight_wanted(data),
+ data->set.priority.exclusive);
+ data->state.priority = *prio;
}
/*
- * h2_session_send() checks if there's been an update in the priority /
+ * Check if there's been an update in the priority /
* dependency settings and if so it submits a PRIORITY frame with the updated
* info.
+ * Flush any out data pending in the network buffer.
*/
-static int h2_session_send(struct Curl_easy *data,
- nghttp2_session *h2)
-{
- struct HTTP *stream = data->req.p.http;
- struct http_conn *httpc = &data->conn->proto.httpc;
- set_transfer(httpc, data);
- if((data->set.stream_weight != data->state.stream_weight) ||
- (data->set.stream_depends_e != data->state.stream_depends_e) ||
- (data->set.stream_depends_on != data->state.stream_depends_on) ) {
+static CURLcode h2_progress_egress(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_h2_ctx *ctx = cf->ctx;
+ struct stream_ctx *stream = H2_STREAM_CTX(data);
+ int rv = 0;
+
+ if(stream && stream->id > 0 &&
+ ((sweight_wanted(data) != sweight_in_effect(data)) ||
+ (data->set.priority.exclusive != data->state.priority.exclusive) ||
+ (data->set.priority.parent != data->state.priority.parent)) ) {
/* send new weight and/or dependency */
nghttp2_priority_spec pri_spec;
- int rv;
h2_pri_spec(data, &pri_spec);
-
- H2BUGF(infof(data, "Queuing PRIORITY on stream %u (easy %p)",
- stream->stream_id, data));
- DEBUGASSERT(stream->stream_id != -1);
- rv = nghttp2_submit_priority(h2, NGHTTP2_FLAG_NONE, stream->stream_id,
- &pri_spec);
+ CURL_TRC_CF(data, cf, "[%d] Queuing PRIORITY", stream->id);
+ DEBUGASSERT(stream->id != -1);
+ rv = nghttp2_submit_priority(ctx->h2, NGHTTP2_FLAG_NONE,
+ stream->id, &pri_spec);
if(rv)
- return rv;
+ goto out;
}
- return nghttp2_session_send(h2);
+ ctx->nw_out_blocked = 0;
+ while(!rv && !ctx->nw_out_blocked && nghttp2_session_want_write(ctx->h2))
+ rv = nghttp2_session_send(ctx->h2);
+
+out:
+ if(nghttp2_is_fatal(rv)) {
+ CURL_TRC_CF(data, cf, "nghttp2_session_send error (%s)%d",
+ nghttp2_strerror(rv), rv);
+ return CURLE_SEND_ERROR;
+ }
+ return nw_out_flush(cf, data);
}
-static ssize_t http2_recv(struct Curl_easy *data, int sockindex,
- char *mem, size_t len, CURLcode *err)
+static ssize_t stream_recv(struct Curl_cfilter *cf, struct Curl_easy *data,
+ struct stream_ctx *stream,
+ char *buf, size_t len, CURLcode *err)
{
- ssize_t nread;
- struct connectdata *conn = data->conn;
- struct http_conn *httpc = &conn->proto.httpc;
- struct HTTP *stream = data->req.p.http;
-
- (void)sockindex; /* we always do HTTP2 on sockindex 0 */
+ struct cf_h2_ctx *ctx = cf->ctx;
+ ssize_t nread = -1;
- if(should_close_session(httpc)) {
- H2BUGF(infof(data,
- "http2_recv: nothing to do in this session"));
- if(conn->bits.close) {
- /* already marked for closure, return OK and we're done */
- *err = CURLE_OK;
- return 0;
+ *err = CURLE_AGAIN;
+ if(!Curl_bufq_is_empty(&stream->recvbuf)) {
+ nread = Curl_bufq_read(&stream->recvbuf,
+ (unsigned char *)buf, len, err);
+ if(nread < 0)
+ goto out;
+ DEBUGASSERT(nread > 0);
+ }
+
+ if(nread < 0) {
+ if(stream->closed) {
+ CURL_TRC_CF(data, cf, "[%d] returning CLOSE", stream->id);
+ nread = http2_handle_stream_close(cf, data, stream, err);
}
- *err = CURLE_HTTP2;
- return -1;
+ else if(stream->reset ||
+ (ctx->conn_closed && Curl_bufq_is_empty(&ctx->inbufq)) ||
+ (ctx->goaway && ctx->last_stream_id < stream->id)) {
+ CURL_TRC_CF(data, cf, "[%d] returning ERR", stream->id);
+ *err = stream->bodystarted? CURLE_PARTIAL_FILE : CURLE_RECV_ERROR;
+ nread = -1;
+ }
+ }
+ else if(nread == 0) {
+ *err = CURLE_AGAIN;
+ nread = -1;
}
- /* Nullify here because we call nghttp2_session_send() and they
- might refer to the old buffer. */
- stream->upload_mem = NULL;
- stream->upload_len = 0;
-
- /*
- * At this point 'stream' is just in the Curl_easy the connection
- * identifies as its owner at this time.
- */
-
- if(stream->bodystarted &&
- stream->nread_header_recvbuf < Curl_dyn_len(&stream->header_recvbuf)) {
- /* If there is header data pending for this stream to return, do that */
- size_t left =
- Curl_dyn_len(&stream->header_recvbuf) - stream->nread_header_recvbuf;
- size_t ncopy = CURLMIN(len, left);
- memcpy(mem, Curl_dyn_ptr(&stream->header_recvbuf) +
- stream->nread_header_recvbuf, ncopy);
- stream->nread_header_recvbuf += ncopy;
-
- H2BUGF(infof(data, "http2_recv: Got %d bytes from header_recvbuf",
- (int)ncopy));
- return ncopy;
- }
-
- H2BUGF(infof(data, "http2_recv: easy %p (stream %u) win %u/%u",
- data, stream->stream_id,
- nghttp2_session_get_local_window_size(httpc->h2),
- nghttp2_session_get_stream_local_window_size(httpc->h2,
- stream->stream_id)
- ));
-
- if((data->state.drain) && stream->memlen) {
- H2BUGF(infof(data, "http2_recv: DRAIN %zu bytes stream %u (%p => %p)",
- stream->memlen, stream->stream_id,
- stream->mem, mem));
- if(mem != stream->mem) {
- /* if we didn't get the same buffer this time, we must move the data to
- the beginning */
- memmove(mem, stream->mem, stream->memlen);
- stream->len = len - stream->memlen;
- stream->mem = mem;
- }
- if(httpc->pause_stream_id == stream->stream_id && !stream->pausedata) {
- /* We have paused nghttp2, but we have no pause data (see
- on_data_chunk_recv). */
- httpc->pause_stream_id = 0;
- if(h2_process_pending_input(data, httpc, err) != 0) {
- return -1;
+out:
+ if(nread < 0 && *err != CURLE_AGAIN)
+ CURL_TRC_CF(data, cf, "[%d] stream_recv(len=%zu) -> %zd, %d",
+ stream->id, len, nread, *err);
+ return nread;
+}
+
+static CURLcode h2_progress_ingress(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_h2_ctx *ctx = cf->ctx;
+ struct stream_ctx *stream;
+ CURLcode result = CURLE_OK;
+ ssize_t nread;
+
+ /* Process network input buffer fist */
+ if(!Curl_bufq_is_empty(&ctx->inbufq)) {
+ CURL_TRC_CF(data, cf, "Process %zu bytes in connection buffer",
+ Curl_bufq_len(&ctx->inbufq));
+ if(h2_process_pending_input(cf, data, &result) < 0)
+ return result;
+ }
+
+ /* Receive data from the "lower" filters, e.g. network until
+ * it is time to stop due to connection close or us not processing
+ * all network input */
+ while(!ctx->conn_closed && Curl_bufq_is_empty(&ctx->inbufq)) {
+ stream = H2_STREAM_CTX(data);
+ if(stream && (stream->closed || Curl_bufq_is_full(&stream->recvbuf))) {
+ /* We would like to abort here and stop processing, so that
+ * the transfer loop can handle the data/close here. However,
+ * this may leave data in underlying buffers that will not
+ * be consumed. */
+ if(!cf->next || !cf->next->cft->has_data_pending(cf->next, data))
+ break;
+ }
+
+ nread = Curl_bufq_slurp(&ctx->inbufq, nw_in_reader, cf, &result);
+ if(nread < 0) {
+ if(result != CURLE_AGAIN) {
+ failf(data, "Failed receiving HTTP2 data: %d(%s)", result,
+ curl_easy_strerror(result));
+ return result;
}
+ break;
+ }
+ else if(nread == 0) {
+ CURL_TRC_CF(data, cf, "[0] ingress: connection closed");
+ ctx->conn_closed = TRUE;
+ break;
}
+ else {
+ CURL_TRC_CF(data, cf, "[0] ingress: read %zd bytes",
+ nread);
+ }
+
+ if(h2_process_pending_input(cf, data, &result))
+ return result;
}
- else if(stream->pausedata) {
- DEBUGASSERT(httpc->pause_stream_id == stream->stream_id);
- nread = CURLMIN(len, stream->pauselen);
- memcpy(mem, stream->pausedata, nread);
- stream->pausedata += nread;
- stream->pauselen -= nread;
+ if(ctx->conn_closed && Curl_bufq_is_empty(&ctx->inbufq)) {
+ connclose(cf->conn, "GOAWAY received");
+ }
- if(stream->pauselen == 0) {
- H2BUGF(infof(data, "Unpaused by stream %u", stream->stream_id));
- DEBUGASSERT(httpc->pause_stream_id == stream->stream_id);
- httpc->pause_stream_id = 0;
+ return CURLE_OK;
+}
- stream->pausedata = NULL;
- stream->pauselen = 0;
+static ssize_t cf_h2_recv(struct Curl_cfilter *cf, struct Curl_easy *data,
+ char *buf, size_t len, CURLcode *err)
+{
+ struct cf_h2_ctx *ctx = cf->ctx;
+ struct stream_ctx *stream = H2_STREAM_CTX(data);
+ ssize_t nread = -1;
+ CURLcode result;
+ struct cf_call_data save;
- /* When NGHTTP2_ERR_PAUSE is returned from
- data_source_read_callback, we might not process DATA frame
- fully. Calling nghttp2_session_mem_recv() again will
- continue to process DATA frame, but if there is no incoming
- frames, then we have to call it again with 0-length data.
- Without this, on_stream_close callback will not be called,
- and stream could be hanged. */
- if(h2_process_pending_input(data, httpc, err) != 0) {
- return -1;
- }
- }
- H2BUGF(infof(data, "http2_recv: returns unpaused %zd bytes on stream %u",
- nread, stream->stream_id));
- return nread;
- }
- else if(httpc->pause_stream_id) {
- /* If a stream paused nghttp2_session_mem_recv previously, and has
- not processed all data, it still refers to the buffer in
- nghttp2_session. If we call nghttp2_session_mem_recv(), we may
- overwrite that buffer. To avoid that situation, just return
- here with CURLE_AGAIN. This could be busy loop since data in
- socket is not read. But it seems that usually streams are
- notified with its drain property, and socket is read again
- quickly. */
- if(stream->closed)
- /* closed overrides paused */
- return 0;
- H2BUGF(infof(data, "stream %u is paused, pause id: %u",
- stream->stream_id, httpc->pause_stream_id));
- *err = CURLE_AGAIN;
+ if(!stream) {
+ /* Abnormal call sequence: either this transfer has never opened a stream
+ * (unlikely) or the transfer has been done, cleaned up its resources, but
+ * a read() is called anyway. It is not clear what the calling sequence
+ * is for such a case. */
+ failf(data, "[%zd-%zd], http/2 recv on a transfer never opened "
+ "or already cleared", (ssize_t)data->id,
+ (ssize_t)cf->conn->connection_id);
+ *err = CURLE_HTTP2;
return -1;
}
- else {
- /* remember where to store incoming data for this stream and how big the
- buffer is */
- stream->mem = mem;
- stream->len = len;
- stream->memlen = 0;
-
- if(httpc->inbuflen == 0) {
- nread = ((Curl_recv *)httpc->recv_underlying)(
- data, FIRSTSOCKET, httpc->inbuf, H2_BUFSIZE, err);
-
- if(nread == -1) {
- if(*err != CURLE_AGAIN)
- failf(data, "Failed receiving HTTP2 data");
- else if(stream->closed)
- /* received when the stream was already closed! */
- return http2_handle_stream_close(conn, data, stream, err);
-
- return -1;
- }
- if(nread == 0) {
- if(!stream->closed) {
- /* This will happen when the server or proxy server is SIGKILLed
- during data transfer. We should emit an error since our data
- received may be incomplete. */
- failf(data, "HTTP/2 stream %u was not closed cleanly before"
- " end of the underlying stream",
- stream->stream_id);
- *err = CURLE_HTTP2_STREAM;
- return -1;
- }
+ CF_DATA_SAVE(save, cf, data);
- H2BUGF(infof(data, "end of stream"));
- *err = CURLE_OK;
- return 0;
- }
+ nread = stream_recv(cf, data, stream, buf, len, err);
+ if(nread < 0 && *err != CURLE_AGAIN)
+ goto out;
- H2BUGF(infof(data, "nread=%zd", nread));
+ if(nread < 0) {
+ *err = h2_progress_ingress(cf, data);
+ if(*err)
+ goto out;
- httpc->inbuflen = nread;
+ nread = stream_recv(cf, data, stream, buf, len, err);
+ }
- DEBUGASSERT(httpc->nread_inbuf == 0);
+ if(nread > 0) {
+ size_t data_consumed = (size_t)nread;
+ /* Now that we transferred this to the upper layer, we report
+ * the actual amount of DATA consumed to the H2 session, so
+ * that it adjusts stream flow control */
+ if(stream->resp_hds_len >= data_consumed) {
+ stream->resp_hds_len -= data_consumed; /* no DATA */
}
else {
- nread = httpc->inbuflen - httpc->nread_inbuf;
- (void)nread; /* silence warning, used in debug */
- H2BUGF(infof(data, "Use data left in connection buffer, nread=%zd",
- nread));
+ if(stream->resp_hds_len) {
+ data_consumed -= stream->resp_hds_len;
+ stream->resp_hds_len = 0;
+ }
+ if(data_consumed) {
+ nghttp2_session_consume(ctx->h2, stream->id, data_consumed);
+ }
}
- if(h2_process_pending_input(data, httpc, err))
- return -1;
- }
- if(stream->memlen) {
- ssize_t retlen = stream->memlen;
- H2BUGF(infof(data, "http2_recv: returns %zd for stream %u",
- retlen, stream->stream_id));
- stream->memlen = 0;
-
- if(httpc->pause_stream_id == stream->stream_id) {
- /* data for this stream is returned now, but this stream caused a pause
- already so we need it called again asap */
- H2BUGF(infof(data, "Data returned for PAUSED stream %u",
- stream->stream_id));
- }
- else if(!stream->closed) {
- drained_transfer(data, httpc);
+ if(stream->closed) {
+ CURL_TRC_CF(data, cf, "[%d] DRAIN closed stream", stream->id);
+ drain_stream(cf, data, stream);
}
- else
- /* this stream is closed, trigger a another read ASAP to detect that */
- Curl_expire(data, 0, EXPIRE_RUN_NOW);
+ }
- return retlen;
+out:
+ result = h2_progress_egress(cf, data);
+ if(result == CURLE_AGAIN) {
+ /* pending data to send, need to be called again. Ideally, we'd
+ * monitor the socket for POLLOUT, but we might not be in SENDING
+ * transfer state any longer and are unable to make this happen.
+ */
+ drain_stream(cf, data, stream);
}
- if(stream->closed)
- return http2_handle_stream_close(conn, data, stream, err);
- *err = CURLE_AGAIN;
- H2BUGF(infof(data, "http2_recv returns AGAIN for stream %u",
- stream->stream_id));
- return -1;
+ else if(result) {
+ *err = result;
+ nread = -1;
+ }
+ CURL_TRC_CF(data, cf, "[%d] cf_recv(len=%zu) -> %zd %d, "
+ "buffered=%zu, window=%d/%d, connection %d/%d",
+ stream->id, len, nread, *err,
+ Curl_bufq_len(&stream->recvbuf),
+ nghttp2_session_get_stream_effective_recv_data_length(
+ ctx->h2, stream->id),
+ nghttp2_session_get_stream_effective_local_window_size(
+ ctx->h2, stream->id),
+ nghttp2_session_get_local_window_size(ctx->h2),
+ HTTP2_HUGE_WINDOW_SIZE);
+
+ CF_DATA_RESTORE(cf, save);
+ return nread;
}
-static ssize_t http2_send(struct Curl_easy *data, int sockindex,
- const void *mem, size_t len, CURLcode *err)
+static ssize_t h2_submit(struct stream_ctx **pstream,
+ struct Curl_cfilter *cf, struct Curl_easy *data,
+ const void *buf, size_t len, CURLcode *err)
{
- /*
- * Currently, we send request in this function, but this function is also
- * used to send request body. It would be nice to add dedicated function for
- * request.
- */
- int rv;
- struct connectdata *conn = data->conn;
- struct http_conn *httpc = &conn->proto.httpc;
- struct HTTP *stream = data->req.p.http;
+ struct cf_h2_ctx *ctx = cf->ctx;
+ struct stream_ctx *stream = NULL;
+ struct dynhds h2_headers;
nghttp2_nv *nva = NULL;
- size_t nheader;
+ const void *body = NULL;
+ size_t nheader, bodylen, i;
nghttp2_data_provider data_prd;
int32_t stream_id;
- nghttp2_session *h2 = httpc->h2;
nghttp2_priority_spec pri_spec;
- CURLcode result;
- struct h2h3req *hreq;
-
- (void)sockindex;
-
- H2BUGF(infof(data, "http2_send len=%zu", len));
-
- if(stream->stream_id != -1) {
- if(stream->close_handled) {
- infof(data, "stream %u closed", stream->stream_id);
- *err = CURLE_HTTP2_STREAM;
- return -1;
- }
- else if(stream->closed) {
- return http2_handle_stream_close(conn, data, stream, err);
- }
- /* If stream_id != -1, we have dispatched request HEADERS, and now
- are going to send or sending request body in DATA frame */
- stream->upload_mem = mem;
- stream->upload_len = len;
- rv = nghttp2_session_resume_data(h2, stream->stream_id);
- if(nghttp2_is_fatal(rv)) {
- *err = CURLE_SEND_ERROR;
- return -1;
- }
- rv = h2_session_send(data, h2);
- if(nghttp2_is_fatal(rv)) {
- *err = CURLE_SEND_ERROR;
- return -1;
- }
- len -= stream->upload_len;
+ ssize_t nwritten;
- /* Nullify here because we call nghttp2_session_send() and they
- might refer to the old buffer. */
- stream->upload_mem = NULL;
- stream->upload_len = 0;
+ Curl_dynhds_init(&h2_headers, 0, DYN_HTTP_REQUEST);
- if(should_close_session(httpc)) {
- H2BUGF(infof(data, "http2_send: nothing to do in this session"));
- *err = CURLE_HTTP2;
- return -1;
- }
-
- if(stream->upload_left) {
- /* we are sure that we have more data to send here. Calling the
- following API will make nghttp2_session_want_write() return
- nonzero if remote window allows it, which then libcurl checks
- socket is writable or not. See http2_perform_getsock(). */
- nghttp2_session_resume_data(h2, stream->stream_id);
- }
-
-#ifdef DEBUG_HTTP2
- if(!len) {
- infof(data, "http2_send: easy %p (stream %u) win %u/%u",
- data, stream->stream_id,
- nghttp2_session_get_remote_window_size(httpc->h2),
- nghttp2_session_get_stream_remote_window_size(httpc->h2,
- stream->stream_id)
- );
+ *err = http2_data_setup(cf, data, &stream);
+ if(*err) {
+ nwritten = -1;
+ goto out;
+ }
- }
- infof(data, "http2_send returns %zu for stream %u", len,
- stream->stream_id);
-#endif
- return len;
+ nwritten = Curl_h1_req_parse_read(&stream->h1, buf, len, NULL, 0, err);
+ if(nwritten < 0)
+ goto out;
+ if(!stream->h1.done) {
+ /* need more data */
+ goto out;
}
+ DEBUGASSERT(stream->h1.req);
- result = Curl_pseudo_headers(data, mem, len, &hreq);
- if(result) {
- *err = result;
- return -1;
+ *err = Curl_http_req_to_h2(&h2_headers, stream->h1.req, data);
+ if(*err) {
+ nwritten = -1;
+ goto out;
}
- nheader = hreq->entries;
+ /* no longer needed */
+ Curl_h1_req_parse_free(&stream->h1);
- nva = malloc(sizeof(nghttp2_nv) * nheader);
+ nva = Curl_dynhds_to_nva(&h2_headers, &nheader);
if(!nva) {
- Curl_pseudo_free(hreq);
*err = CURLE_OUT_OF_MEMORY;
- return -1;
- }
- else {
- unsigned int i;
- for(i = 0; i < nheader; i++) {
- nva[i].name = (unsigned char *)hreq->header[i].name;
- nva[i].namelen = hreq->header[i].namelen;
- nva[i].value = (unsigned char *)hreq->header[i].value;
- nva[i].valuelen = hreq->header[i].valuelen;
- nva[i].flags = NGHTTP2_NV_FLAG_NONE;
- }
- Curl_pseudo_free(hreq);
+ nwritten = -1;
+ goto out;
}
h2_pri_spec(data, &pri_spec);
-
- H2BUGF(infof(data, "http2_send request allowed %d (easy handle %p)",
- nghttp2_session_check_request_allowed(h2), (void *)data));
+ if(!nghttp2_session_check_request_allowed(ctx->h2))
+ CURL_TRC_CF(data, cf, "send request NOT allowed (via nghttp2)");
switch(data->state.httpreq) {
case HTTPREQ_POST:
@@ -1981,220 +2069,367 @@ static ssize_t http2_send(struct Curl_easy *data, int sockindex,
stream->upload_left = data->state.infilesize;
else
/* data sending without specifying the data amount up front */
- stream->upload_left = -1; /* unknown, but not zero */
+ stream->upload_left = -1; /* unknown */
- data_prd.read_callback = data_source_read_callback;
+ data_prd.read_callback = req_body_read_callback;
data_prd.source.ptr = NULL;
- stream_id = nghttp2_submit_request(h2, &pri_spec, nva, nheader,
+ stream_id = nghttp2_submit_request(ctx->h2, &pri_spec, nva, nheader,
&data_prd, data);
break;
default:
- stream_id = nghttp2_submit_request(h2, &pri_spec, nva, nheader,
+ stream->upload_left = 0; /* no request body */
+ stream_id = nghttp2_submit_request(ctx->h2, &pri_spec, nva, nheader,
NULL, data);
}
- Curl_safefree(nva);
-
if(stream_id < 0) {
- H2BUGF(infof(data,
- "http2_send() nghttp2_submit_request error (%s)%u",
- nghttp2_strerror(stream_id), stream_id));
+ CURL_TRC_CF(data, cf, "send: nghttp2_submit_request error (%s)%u",
+ nghttp2_strerror(stream_id), stream_id);
*err = CURLE_SEND_ERROR;
- return -1;
+ nwritten = -1;
+ goto out;
}
- infof(data, "Using Stream ID: %u (easy handle %p)",
- stream_id, (void *)data);
- stream->stream_id = stream_id;
+#define MAX_ACC 60000 /* <64KB to account for some overhead */
+ if(Curl_trc_is_verbose(data)) {
+ size_t acc = 0;
- rv = h2_session_send(data, h2);
- if(rv) {
- H2BUGF(infof(data,
- "http2_send() nghttp2_session_send error (%s)%d",
- nghttp2_strerror(rv), rv));
+ infof(data, "[HTTP/2] [%d] OPENED stream for %s",
+ stream_id, data->state.url);
+ for(i = 0; i < nheader; ++i) {
+ acc += nva[i].namelen + nva[i].valuelen;
- *err = CURLE_SEND_ERROR;
- return -1;
+ infof(data, "[HTTP/2] [%d] [%.*s: %.*s]", stream_id,
+ (int)nva[i].namelen, nva[i].name,
+ (int)nva[i].valuelen, nva[i].value);
+ }
+
+ if(acc > MAX_ACC) {
+ infof(data, "[HTTP/2] Warning: The cumulative length of all "
+ "headers exceeds %d bytes and that could cause the "
+ "stream to be rejected.", MAX_ACC);
+ }
}
- if(should_close_session(httpc)) {
- H2BUGF(infof(data, "http2_send: nothing to do in this session"));
- *err = CURLE_HTTP2;
- return -1;
+ stream->id = stream_id;
+ stream->local_window_size = H2_STREAM_WINDOW_SIZE;
+ if(data->set.max_recv_speed) {
+ /* We are asked to only receive `max_recv_speed` bytes per second.
+ * Let's limit our stream window size around that, otherwise the server
+ * will send in large bursts only. We make the window 50% larger to
+ * allow for data in flight and avoid stalling. */
+ curl_off_t n = (((data->set.max_recv_speed - 1) / H2_CHUNK_SIZE) + 1);
+ n += CURLMAX((n/2), 1);
+ if(n < (H2_STREAM_WINDOW_SIZE / H2_CHUNK_SIZE) &&
+ n < (UINT_MAX / H2_CHUNK_SIZE)) {
+ stream->local_window_size = (uint32_t)n * H2_CHUNK_SIZE;
+ }
}
- /* If whole HEADERS frame was sent off to the underlying socket, the nghttp2
- library calls data_source_read_callback. But only it found that no data
- available, so it deferred the DATA transmission. Which means that
- nghttp2_session_want_write() returns 0 on http2_perform_getsock(), which
- results that no writable socket check is performed. To workaround this,
- we issue nghttp2_session_resume_data() here to bring back DATA
- transmission from deferred state. */
- nghttp2_session_resume_data(h2, stream->stream_id);
+ body = (const char *)buf + nwritten;
+ bodylen = len - nwritten;
+
+ if(bodylen) {
+ /* We have request body to send in DATA frame */
+ ssize_t n = Curl_bufq_write(&stream->sendbuf, body, bodylen, err);
+ if(n < 0) {
+ *err = CURLE_SEND_ERROR;
+ nwritten = -1;
+ goto out;
+ }
+ nwritten += n;
+ }
- return len;
+out:
+ CURL_TRC_CF(data, cf, "[%d] submit -> %zd, %d",
+ stream? stream->id : -1, nwritten, *err);
+ Curl_safefree(nva);
+ *pstream = stream;
+ Curl_dynhds_free(&h2_headers);
+ return nwritten;
}
-CURLcode Curl_http2_setup(struct Curl_easy *data,
- struct connectdata *conn)
+static ssize_t cf_h2_send(struct Curl_cfilter *cf, struct Curl_easy *data,
+ const void *buf, size_t len, CURLcode *err)
{
+ struct cf_h2_ctx *ctx = cf->ctx;
+ struct stream_ctx *stream = H2_STREAM_CTX(data);
+ struct cf_call_data save;
+ int rv;
+ ssize_t nwritten;
CURLcode result;
- struct http_conn *httpc = &conn->proto.httpc;
- struct HTTP *stream = data->req.p.http;
-
- DEBUGASSERT(data->state.buffer);
-
- stream->stream_id = -1;
-
- Curl_dyn_init(&stream->header_recvbuf, DYN_H2_HEADERS);
- Curl_dyn_init(&stream->trailer_recvbuf, DYN_H2_TRAILERS);
-
- stream->upload_left = 0;
- stream->upload_mem = NULL;
- stream->upload_len = 0;
- stream->mem = data->state.buffer;
- stream->len = data->set.buffer_size;
-
- multi_connchanged(data->multi);
- /* below this point only connection related inits are done, which only needs
- to be done once per connection */
-
- if((conn->handler == &Curl_handler_http2_ssl) ||
- (conn->handler == &Curl_handler_http2))
- return CURLE_OK; /* already done */
-
- if(conn->handler->flags & PROTOPT_SSL)
- conn->handler = &Curl_handler_http2_ssl;
- else
- conn->handler = &Curl_handler_http2;
+ int blocked = 0, was_blocked = 0;
+
+ CF_DATA_SAVE(save, cf, data);
+
+ if(stream && stream->id != -1) {
+ if(stream->upload_blocked_len) {
+ /* the data in `buf` has already been submitted or added to the
+ * buffers, but have been EAGAINed on the last invocation. */
+ /* TODO: this assertion triggers in OSSFuzz runs and it is not
+ * clear why. Disable for now to let OSSFuzz continue its tests. */
+ DEBUGASSERT(len >= stream->upload_blocked_len);
+ if(len < stream->upload_blocked_len) {
+ /* Did we get called again with a smaller `len`? This should not
+ * happen. We are not prepared to handle that. */
+ failf(data, "HTTP/2 send again with decreased length (%zd vs %zd)",
+ len, stream->upload_blocked_len);
+ *err = CURLE_HTTP2;
+ nwritten = -1;
+ goto out;
+ }
+ nwritten = (ssize_t)stream->upload_blocked_len;
+ stream->upload_blocked_len = 0;
+ was_blocked = 1;
+ }
+ else if(stream->closed) {
+ if(stream->resp_hds_complete) {
+ /* Server decided to close the stream after having sent us a findl
+ * response. This is valid if it is not interested in the request
+ * body. This happens on 30x or 40x responses.
+ * We silently discard the data sent, since this is not a transport
+ * error situation. */
+ CURL_TRC_CF(data, cf, "[%d] discarding data"
+ "on closed stream with response", stream->id);
+ *err = CURLE_OK;
+ nwritten = (ssize_t)len;
+ goto out;
+ }
+ infof(data, "stream %u closed", stream->id);
+ *err = CURLE_SEND_ERROR;
+ nwritten = -1;
+ goto out;
+ }
+ else {
+ /* If stream_id != -1, we have dispatched request HEADERS and
+ * optionally request body, and now are going to send or sending
+ * more request body in DATA frame */
+ nwritten = Curl_bufq_write(&stream->sendbuf, buf, len, err);
+ if(nwritten < 0 && *err != CURLE_AGAIN)
+ goto out;
+ }
- result = http2_init(data, conn);
- if(result) {
- Curl_dyn_free(&stream->header_recvbuf);
- return result;
+ if(!Curl_bufq_is_empty(&stream->sendbuf)) {
+ /* req body data is buffered, resume the potentially suspended stream */
+ rv = nghttp2_session_resume_data(ctx->h2, stream->id);
+ if(nghttp2_is_fatal(rv)) {
+ *err = CURLE_SEND_ERROR;
+ nwritten = -1;
+ goto out;
+ }
+ }
+ }
+ else {
+ nwritten = h2_submit(&stream, cf, data, buf, len, err);
+ if(nwritten < 0) {
+ goto out;
+ }
+ DEBUGASSERT(stream);
}
- infof(data, "Using HTTP2, server supports multiplexing");
-
- conn->bits.multiplex = TRUE; /* at least potentially multiplexed */
- conn->httpversion = 20;
- conn->bundle->multiuse = BUNDLE_MULTIPLEX;
-
- httpc->inbuflen = 0;
- httpc->nread_inbuf = 0;
-
- httpc->pause_stream_id = 0;
- httpc->drain_total = 0;
+ /* Call the nghttp2 send loop and flush to write ALL buffered data,
+ * headers and/or request body completely out to the network */
+ result = h2_progress_egress(cf, data);
+ /* if the stream has been closed in egress handling (nghttp2 does that
+ * when it does not like the headers, for example */
+ if(stream && stream->closed && !was_blocked) {
+ infof(data, "stream %u closed", stream->id);
+ *err = CURLE_SEND_ERROR;
+ nwritten = -1;
+ goto out;
+ }
+ else if(result == CURLE_AGAIN) {
+ blocked = 1;
+ }
+ else if(result) {
+ *err = result;
+ nwritten = -1;
+ goto out;
+ }
+ else if(stream && !Curl_bufq_is_empty(&stream->sendbuf)) {
+ /* although we wrote everything that nghttp2 wants to send now,
+ * there is data left in our stream send buffer unwritten. This may
+ * be due to the stream's HTTP/2 flow window being exhausted. */
+ blocked = 1;
+ }
+
+ if(stream && blocked && nwritten > 0) {
+ /* Unable to send all data, due to connection blocked or H2 window
+ * exhaustion. Data is left in our stream buffer, or nghttp2's internal
+ * frame buffer or our network out buffer. */
+ size_t rwin = nghttp2_session_get_stream_remote_window_size(ctx->h2,
+ stream->id);
+ /* Whatever the cause, we need to return CURL_EAGAIN for this call.
+ * We have unwritten state that needs us being invoked again and EAGAIN
+ * is the only way to ensure that. */
+ stream->upload_blocked_len = nwritten;
+ CURL_TRC_CF(data, cf, "[%d] cf_send(len=%zu) BLOCK: win %u/%zu "
+ "blocked_len=%zu",
+ stream->id, len,
+ nghttp2_session_get_remote_window_size(ctx->h2), rwin,
+ nwritten);
+ *err = CURLE_AGAIN;
+ nwritten = -1;
+ goto out;
+ }
+ else if(should_close_session(ctx)) {
+ /* nghttp2 thinks this session is done. If the stream has not been
+ * closed, this is an error state for out transfer */
+ if(stream->closed) {
+ nwritten = http2_handle_stream_close(cf, data, stream, err);
+ }
+ else {
+ CURL_TRC_CF(data, cf, "send: nothing to do in this session");
+ *err = CURLE_HTTP2;
+ nwritten = -1;
+ }
+ }
- return CURLE_OK;
+out:
+ if(stream) {
+ CURL_TRC_CF(data, cf, "[%d] cf_send(len=%zu) -> %zd, %d, "
+ "upload_left=%" CURL_FORMAT_CURL_OFF_T ", "
+ "h2 windows %d-%d (stream-conn), "
+ "buffers %zu-%zu (stream-conn)",
+ stream->id, len, nwritten, *err,
+ stream->upload_left,
+ nghttp2_session_get_stream_remote_window_size(
+ ctx->h2, stream->id),
+ nghttp2_session_get_remote_window_size(ctx->h2),
+ Curl_bufq_len(&stream->sendbuf),
+ Curl_bufq_len(&ctx->outbufq));
+ }
+ else {
+ CURL_TRC_CF(data, cf, "cf_send(len=%zu) -> %zd, %d, "
+ "connection-window=%d, nw_send_buffer(%zu)",
+ len, nwritten, *err,
+ nghttp2_session_get_remote_window_size(ctx->h2),
+ Curl_bufq_len(&ctx->outbufq));
+ }
+ CF_DATA_RESTORE(cf, save);
+ return nwritten;
}
-CURLcode Curl_http2_switched(struct Curl_easy *data,
- const char *mem, size_t nread)
+static void cf_h2_adjust_pollset(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct easy_pollset *ps)
{
- CURLcode result;
- struct connectdata *conn = data->conn;
- struct http_conn *httpc = &conn->proto.httpc;
- int rv;
- struct HTTP *stream = data->req.p.http;
-
- result = Curl_http2_setup(data, conn);
- if(result)
- return result;
-
- httpc->recv_underlying = conn->recv[FIRSTSOCKET];
- httpc->send_underlying = conn->send[FIRSTSOCKET];
- conn->recv[FIRSTSOCKET] = http2_recv;
- conn->send[FIRSTSOCKET] = http2_send;
+ struct cf_h2_ctx *ctx = cf->ctx;
+ bool want_recv = CURL_WANT_RECV(data);
+ bool want_send = CURL_WANT_SEND(data);
+
+ if(ctx->h2 && (want_recv || want_send)) {
+ struct stream_ctx *stream = H2_STREAM_CTX(data);
+ curl_socket_t sock = Curl_conn_cf_get_socket(cf, data);
+ struct cf_call_data save;
+ bool c_exhaust, s_exhaust;
+
+ CF_DATA_SAVE(save, cf, data);
+ c_exhaust = !nghttp2_session_get_remote_window_size(ctx->h2);
+ s_exhaust = stream && stream->id >= 0 &&
+ !nghttp2_session_get_stream_remote_window_size(ctx->h2,
+ stream->id);
+ want_recv = (want_recv || c_exhaust || s_exhaust);
+ want_send = (!s_exhaust && want_send) ||
+ (!c_exhaust && nghttp2_session_want_write(ctx->h2));
+
+ Curl_pollset_set(data, ps, sock, want_recv, want_send);
+ CF_DATA_RESTORE(cf, save);
+ }
+}
- if(data->req.upgr101 == UPGR101_RECEIVED) {
- /* stream 1 is opened implicitly on upgrade */
- stream->stream_id = 1;
- /* queue SETTINGS frame (again) */
- rv = nghttp2_session_upgrade2(httpc->h2, httpc->binsettings, httpc->binlen,
- data->state.httpreq == HTTPREQ_HEAD, NULL);
- if(rv) {
- failf(data, "nghttp2_session_upgrade2() failed: %s(%d)",
- nghttp2_strerror(rv), rv);
- return CURLE_HTTP2;
- }
+static CURLcode cf_h2_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool blocking, bool *done)
+{
+ struct cf_h2_ctx *ctx = cf->ctx;
+ CURLcode result = CURLE_OK;
+ struct cf_call_data save;
- rv = nghttp2_session_set_stream_user_data(httpc->h2,
- stream->stream_id,
- data);
- if(rv) {
- infof(data, "http/2: failed to set user_data for stream %u",
- stream->stream_id);
- DEBUGASSERT(0);
- }
+ if(cf->connected) {
+ *done = TRUE;
+ return CURLE_OK;
}
- else {
- populate_settings(data, httpc);
- /* stream ID is unknown at this point */
- stream->stream_id = -1;
- rv = nghttp2_submit_settings(httpc->h2, NGHTTP2_FLAG_NONE,
- httpc->local_settings,
- httpc->local_settings_num);
- if(rv) {
- failf(data, "nghttp2_submit_settings() failed: %s(%d)",
- nghttp2_strerror(rv), rv);
- return CURLE_HTTP2;
- }
+ /* Connect the lower filters first */
+ if(!cf->next->connected) {
+ result = Curl_conn_cf_connect(cf->next, data, blocking, done);
+ if(result || !*done)
+ return result;
}
- rv = nghttp2_session_set_local_window_size(httpc->h2, NGHTTP2_FLAG_NONE, 0,
- HTTP2_HUGE_WINDOW_SIZE);
- if(rv) {
- failf(data, "nghttp2_session_set_local_window_size() failed: %s(%d)",
- nghttp2_strerror(rv), rv);
- return CURLE_HTTP2;
- }
+ *done = FALSE;
- /* we are going to copy mem to httpc->inbuf. This is required since
- mem is part of buffer pointed by stream->mem, and callbacks
- called by nghttp2_session_mem_recv() will write stream specific
- data into stream->mem, overwriting data already there. */
- if(H2_BUFSIZE < nread) {
- failf(data, "connection buffer size is too small to store data following "
- "HTTP Upgrade response header: buflen=%d, datalen=%zu",
- H2_BUFSIZE, nread);
- return CURLE_HTTP2;
+ CF_DATA_SAVE(save, cf, data);
+ if(!ctx->h2) {
+ result = cf_h2_ctx_init(cf, data, FALSE);
+ if(result)
+ goto out;
}
- infof(data, "Copying HTTP/2 data in stream buffer to connection buffer"
- " after upgrade: len=%zu",
- nread);
+ result = h2_progress_ingress(cf, data);
+ if(result)
+ goto out;
+
+ /* Send out our SETTINGS and ACKs and such. If that blocks, we
+ * have it buffered and can count this filter as being connected */
+ result = h2_progress_egress(cf, data);
+ if(result == CURLE_AGAIN)
+ result = CURLE_OK;
+ else if(result)
+ goto out;
+
+ *done = TRUE;
+ cf->connected = TRUE;
+ result = CURLE_OK;
+
+out:
+ CURL_TRC_CF(data, cf, "cf_connect() -> %d, %d, ", result, *done);
+ CF_DATA_RESTORE(cf, save);
+ return result;
+}
- if(nread)
- memcpy(httpc->inbuf, mem, nread);
+static void cf_h2_close(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct cf_h2_ctx *ctx = cf->ctx;
- httpc->inbuflen = nread;
+ if(ctx) {
+ struct cf_call_data save;
- DEBUGASSERT(httpc->nread_inbuf == 0);
+ CF_DATA_SAVE(save, cf, data);
+ cf_h2_ctx_clear(ctx);
+ CF_DATA_RESTORE(cf, save);
+ }
+ if(cf->next)
+ cf->next->cft->do_close(cf->next, data);
+}
- if(-1 == h2_process_pending_input(data, httpc, &result))
- return CURLE_HTTP2;
+static void cf_h2_destroy(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct cf_h2_ctx *ctx = cf->ctx;
- return CURLE_OK;
+ (void)data;
+ if(ctx) {
+ cf_h2_ctx_free(ctx);
+ cf->ctx = NULL;
+ }
}
-CURLcode Curl_http2_stream_pause(struct Curl_easy *data, bool pause)
+static CURLcode http2_data_pause(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool pause)
{
- DEBUGASSERT(data);
- DEBUGASSERT(data->conn);
- /* if it isn't HTTP/2, we're done */
- if(!(data->conn->handler->protocol & PROTO_FAMILY_HTTP) ||
- !data->conn->proto.httpc.h2)
- return CURLE_OK;
#ifdef NGHTTP2_HAS_SET_LOCAL_WINDOW_SIZE
- else {
- struct HTTP *stream = data->req.p.http;
- struct http_conn *httpc = &data->conn->proto.httpc;
- uint32_t window = !pause * HTTP2_HUGE_WINDOW_SIZE;
- int rv = nghttp2_session_set_local_window_size(httpc->h2,
+ struct cf_h2_ctx *ctx = cf->ctx;
+ struct stream_ctx *stream = H2_STREAM_CTX(data);
+
+ DEBUGASSERT(data);
+ if(ctx && ctx->h2 && stream) {
+ uint32_t window = pause? 0 : stream->local_window_size;
+
+ int rv = nghttp2_session_set_local_window_size(ctx->h2,
NGHTTP2_FLAG_NONE,
- stream->stream_id,
+ stream->id,
window);
if(rv) {
failf(data, "nghttp2_session_set_local_window_size() failed: %s(%d)",
@@ -2202,22 +2437,32 @@ CURLcode Curl_http2_stream_pause(struct Curl_easy *data, bool pause)
return CURLE_HTTP2;
}
- /* make sure the window update gets sent */
- rv = h2_session_send(data, httpc->h2);
- if(rv)
- return CURLE_SEND_ERROR;
+ if(!pause)
+ drain_stream(cf, data, stream);
+ /* attempt to send the window update */
+ (void)h2_progress_egress(cf, data);
+
+ if(!pause) {
+ /* Unpausing a h2 transfer, requires it to be run again. The server
+ * may send new DATA on us increasing the flow window, and it may
+ * not. We may have already buffered and exhausted the new window
+ * by operating on things in flight during the handling of other
+ * transfers. */
+ drain_stream(cf, data, stream);
+ Curl_expire(data, 0, EXPIRE_RUN_NOW);
+ }
DEBUGF(infof(data, "Set HTTP/2 window size to %u for stream %u",
- window, stream->stream_id));
+ window, stream->id));
#ifdef DEBUGBUILD
{
/* read out the stream local window again */
uint32_t window2 =
- nghttp2_session_get_stream_local_window_size(httpc->h2,
- stream->stream_id);
+ nghttp2_session_get_stream_local_window_size(ctx->h2,
+ stream->id);
DEBUGF(infof(data, "HTTP/2 window size is now %u for stream %u",
- window2, stream->stream_id));
+ window2, stream->id));
}
#endif
}
@@ -2225,94 +2470,341 @@ CURLcode Curl_http2_stream_pause(struct Curl_easy *data, bool pause)
return CURLE_OK;
}
-CURLcode Curl_http2_add_child(struct Curl_easy *parent,
- struct Curl_easy *child,
- bool exclusive)
+static CURLcode cf_h2_cntrl(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int event, int arg1, void *arg2)
{
- if(parent) {
- struct Curl_http2_dep **tail;
- struct Curl_http2_dep *dep = calloc(1, sizeof(struct Curl_http2_dep));
- if(!dep)
- return CURLE_OUT_OF_MEMORY;
- dep->data = child;
+ CURLcode result = CURLE_OK;
+ struct cf_call_data save;
- if(parent->set.stream_dependents && exclusive) {
- struct Curl_http2_dep *node = parent->set.stream_dependents;
- while(node) {
- node->data->set.stream_depends_on = child;
- node = node->next;
- }
+ (void)arg2;
- tail = &child->set.stream_dependents;
- while(*tail)
- tail = &(*tail)->next;
+ CF_DATA_SAVE(save, cf, data);
+ switch(event) {
+ case CF_CTRL_DATA_SETUP:
+ break;
+ case CF_CTRL_DATA_PAUSE:
+ result = http2_data_pause(cf, data, (arg1 != 0));
+ break;
+ case CF_CTRL_DATA_DONE_SEND:
+ result = http2_data_done_send(cf, data);
+ break;
+ case CF_CTRL_DATA_DETACH:
+ http2_data_done(cf, data, TRUE);
+ break;
+ case CF_CTRL_DATA_DONE:
+ http2_data_done(cf, data, arg1 != 0);
+ break;
+ default:
+ break;
+ }
+ CF_DATA_RESTORE(cf, save);
+ return result;
+}
- DEBUGASSERT(!*tail);
- *tail = parent->set.stream_dependents;
- parent->set.stream_dependents = 0;
- }
+static bool cf_h2_data_pending(struct Curl_cfilter *cf,
+ const struct Curl_easy *data)
+{
+ struct cf_h2_ctx *ctx = cf->ctx;
+ struct stream_ctx *stream = H2_STREAM_CTX(data);
- tail = &parent->set.stream_dependents;
- while(*tail) {
- (*tail)->data->set.stream_depends_e = FALSE;
- tail = &(*tail)->next;
- }
+ if(ctx && (!Curl_bufq_is_empty(&ctx->inbufq)
+ || (stream && !Curl_bufq_is_empty(&stream->sendbuf))
+ || (stream && !Curl_bufq_is_empty(&stream->recvbuf))))
+ return TRUE;
+ return cf->next? cf->next->cft->has_data_pending(cf->next, data) : FALSE;
+}
+
+static bool cf_h2_is_alive(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool *input_pending)
+{
+ struct cf_h2_ctx *ctx = cf->ctx;
+ CURLcode result;
+ struct cf_call_data save;
+
+ CF_DATA_SAVE(save, cf, data);
+ result = (ctx && ctx->h2 && http2_connisalive(cf, data, input_pending));
+ CURL_TRC_CF(data, cf, "conn alive -> %d, input_pending=%d",
+ result, *input_pending);
+ CF_DATA_RESTORE(cf, save);
+ return result;
+}
- DEBUGASSERT(!*tail);
- *tail = dep;
+static CURLcode cf_h2_keep_alive(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ CURLcode result;
+ struct cf_call_data save;
+
+ CF_DATA_SAVE(save, cf, data);
+ result = http2_send_ping(cf, data);
+ CF_DATA_RESTORE(cf, save);
+ return result;
+}
+
+static CURLcode cf_h2_query(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int query, int *pres1, void *pres2)
+{
+ struct cf_h2_ctx *ctx = cf->ctx;
+ struct cf_call_data save;
+ size_t effective_max;
+
+ switch(query) {
+ case CF_QUERY_MAX_CONCURRENT:
+ DEBUGASSERT(pres1);
+
+ CF_DATA_SAVE(save, cf, data);
+ if(nghttp2_session_check_request_allowed(ctx->h2) == 0) {
+ /* the limit is what we have in use right now */
+ effective_max = CONN_INUSE(cf->conn);
+ }
+ else {
+ effective_max = ctx->max_concurrent_streams;
+ }
+ *pres1 = (effective_max > INT_MAX)? INT_MAX : (int)effective_max;
+ CF_DATA_RESTORE(cf, save);
+ return CURLE_OK;
+ default:
+ break;
}
+ return cf->next?
+ cf->next->cft->query(cf->next, data, query, pres1, pres2) :
+ CURLE_UNKNOWN_OPTION;
+}
- child->set.stream_depends_on = parent;
- child->set.stream_depends_e = exclusive;
- return CURLE_OK;
+struct Curl_cftype Curl_cft_nghttp2 = {
+ "HTTP/2",
+ CF_TYPE_MULTIPLEX,
+ CURL_LOG_LVL_NONE,
+ cf_h2_destroy,
+ cf_h2_connect,
+ cf_h2_close,
+ Curl_cf_def_get_host,
+ cf_h2_adjust_pollset,
+ cf_h2_data_pending,
+ cf_h2_send,
+ cf_h2_recv,
+ cf_h2_cntrl,
+ cf_h2_is_alive,
+ cf_h2_keep_alive,
+ cf_h2_query,
+};
+
+static CURLcode http2_cfilter_add(struct Curl_cfilter **pcf,
+ struct Curl_easy *data,
+ struct connectdata *conn,
+ int sockindex)
+{
+ struct Curl_cfilter *cf = NULL;
+ struct cf_h2_ctx *ctx;
+ CURLcode result = CURLE_OUT_OF_MEMORY;
+
+ DEBUGASSERT(data->conn);
+ ctx = calloc(1, sizeof(*ctx));
+ if(!ctx)
+ goto out;
+
+ result = Curl_cf_create(&cf, &Curl_cft_nghttp2, ctx);
+ if(result)
+ goto out;
+
+ Curl_conn_cf_add(data, conn, sockindex, cf);
+ result = CURLE_OK;
+
+out:
+ if(result)
+ cf_h2_ctx_free(ctx);
+ *pcf = result? NULL : cf;
+ return result;
}
-void Curl_http2_remove_child(struct Curl_easy *parent, struct Curl_easy *child)
+static CURLcode http2_cfilter_insert_after(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
- struct Curl_http2_dep *last = 0;
- struct Curl_http2_dep *data = parent->set.stream_dependents;
- DEBUGASSERT(child->set.stream_depends_on == parent);
+ struct Curl_cfilter *cf_h2 = NULL;
+ struct cf_h2_ctx *ctx;
+ CURLcode result = CURLE_OUT_OF_MEMORY;
+
+ (void)data;
+ ctx = calloc(1, sizeof(*ctx));
+ if(!ctx)
+ goto out;
+
+ result = Curl_cf_create(&cf_h2, &Curl_cft_nghttp2, ctx);
+ if(result)
+ goto out;
+
+ Curl_conn_cf_insert_after(cf, cf_h2);
+ result = CURLE_OK;
+
+out:
+ if(result)
+ cf_h2_ctx_free(ctx);
+ return result;
+}
- while(data && data->data != child) {
- last = data;
- data = data->next;
+static bool Curl_cf_is_http2(struct Curl_cfilter *cf,
+ const struct Curl_easy *data)
+{
+ (void)data;
+ for(; cf; cf = cf->next) {
+ if(cf->cft == &Curl_cft_nghttp2)
+ return TRUE;
+ if(cf->cft->flags & CF_TYPE_IP_CONNECT)
+ return FALSE;
}
+ return FALSE;
+}
- DEBUGASSERT(data);
+bool Curl_conn_is_http2(const struct Curl_easy *data,
+ const struct connectdata *conn,
+ int sockindex)
+{
+ return conn? Curl_cf_is_http2(conn->cfilter[sockindex], data) : FALSE;
+}
- if(data) {
- if(last) {
- last->next = data->next;
- }
- else {
- parent->set.stream_dependents = data->next;
+bool Curl_http2_may_switch(struct Curl_easy *data,
+ struct connectdata *conn,
+ int sockindex)
+{
+ (void)sockindex;
+ if(!Curl_conn_is_http2(data, conn, sockindex) &&
+ data->state.httpwant == CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE) {
+#ifndef CURL_DISABLE_PROXY
+ if(conn->bits.httpproxy && !conn->bits.tunnel_proxy) {
+ /* We don't support HTTP/2 proxies yet. Also it's debatable
+ whether or not this setting should apply to HTTP/2 proxies. */
+ infof(data, "Ignoring HTTP/2 prior knowledge due to proxy");
+ return FALSE;
}
- free(data);
+#endif
+ return TRUE;
+ }
+ return FALSE;
+}
+
+CURLcode Curl_http2_switch(struct Curl_easy *data,
+ struct connectdata *conn, int sockindex)
+{
+ struct Curl_cfilter *cf;
+ CURLcode result;
+
+ DEBUGASSERT(!Curl_conn_is_http2(data, conn, sockindex));
+ DEBUGF(infof(data, "switching to HTTP/2"));
+
+ result = http2_cfilter_add(&cf, data, conn, sockindex);
+ if(result)
+ return result;
+
+ result = cf_h2_ctx_init(cf, data, FALSE);
+ if(result)
+ return result;
+
+ conn->httpversion = 20; /* we know we're on HTTP/2 now */
+ conn->bits.multiplex = TRUE; /* at least potentially multiplexed */
+ conn->bundle->multiuse = BUNDLE_MULTIPLEX;
+ Curl_multi_connchanged(data->multi);
+
+ if(cf->next) {
+ bool done;
+ return Curl_conn_cf_connect(cf, data, FALSE, &done);
}
+ return CURLE_OK;
+}
+
+CURLcode Curl_http2_switch_at(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct Curl_cfilter *cf_h2;
+ CURLcode result;
+
+ DEBUGASSERT(!Curl_cf_is_http2(cf, data));
+
+ result = http2_cfilter_insert_after(cf, data);
+ if(result)
+ return result;
+
+ cf_h2 = cf->next;
+ result = cf_h2_ctx_init(cf_h2, data, FALSE);
+ if(result)
+ return result;
- child->set.stream_depends_on = 0;
- child->set.stream_depends_e = FALSE;
+ cf->conn->httpversion = 20; /* we know we're on HTTP/2 now */
+ cf->conn->bits.multiplex = TRUE; /* at least potentially multiplexed */
+ cf->conn->bundle->multiuse = BUNDLE_MULTIPLEX;
+ Curl_multi_connchanged(data->multi);
+
+ if(cf_h2->next) {
+ bool done;
+ return Curl_conn_cf_connect(cf_h2, data, FALSE, &done);
+ }
+ return CURLE_OK;
}
-void Curl_http2_cleanup_dependencies(struct Curl_easy *data)
+CURLcode Curl_http2_upgrade(struct Curl_easy *data,
+ struct connectdata *conn, int sockindex,
+ const char *mem, size_t nread)
{
- while(data->set.stream_dependents) {
- struct Curl_easy *tmp = data->set.stream_dependents->data;
- Curl_http2_remove_child(data, tmp);
- if(data->set.stream_depends_on)
- Curl_http2_add_child(data->set.stream_depends_on, tmp, FALSE);
+ struct Curl_cfilter *cf;
+ struct cf_h2_ctx *ctx;
+ CURLcode result;
+
+ DEBUGASSERT(!Curl_conn_is_http2(data, conn, sockindex));
+ DEBUGF(infof(data, "upgrading to HTTP/2"));
+ DEBUGASSERT(data->req.upgr101 == UPGR101_RECEIVED);
+
+ result = http2_cfilter_add(&cf, data, conn, sockindex);
+ if(result)
+ return result;
+
+ DEBUGASSERT(cf->cft == &Curl_cft_nghttp2);
+ ctx = cf->ctx;
+
+ result = cf_h2_ctx_init(cf, data, TRUE);
+ if(result)
+ return result;
+
+ if(nread > 0) {
+ /* Remaining data from the protocol switch reply is already using
+ * the switched protocol, ie. HTTP/2. We add that to the network
+ * inbufq. */
+ ssize_t copied;
+
+ copied = Curl_bufq_write(&ctx->inbufq,
+ (const unsigned char *)mem, nread, &result);
+ if(copied < 0) {
+ failf(data, "error on copying HTTP Upgrade response: %d", result);
+ return CURLE_RECV_ERROR;
+ }
+ if((size_t)copied < nread) {
+ failf(data, "connection buffer size could not take all data "
+ "from HTTP Upgrade response header: copied=%zd, datalen=%zu",
+ copied, nread);
+ return CURLE_HTTP2;
+ }
+ infof(data, "Copied HTTP/2 data in stream buffer to connection buffer"
+ " after upgrade: len=%zu", nread);
}
- if(data->set.stream_depends_on)
- Curl_http2_remove_child(data->set.stream_depends_on, data);
+ conn->httpversion = 20; /* we know we're on HTTP/2 now */
+ conn->bits.multiplex = TRUE; /* at least potentially multiplexed */
+ conn->bundle->multiuse = BUNDLE_MULTIPLEX;
+ Curl_multi_connchanged(data->multi);
+
+ if(cf->next) {
+ bool done;
+ return Curl_conn_cf_connect(cf, data, FALSE, &done);
+ }
+ return CURLE_OK;
}
-/* Only call this function for a transfer that already got a HTTP/2
+/* Only call this function for a transfer that already got an HTTP/2
CURLE_HTTP2_STREAM error! */
bool Curl_h2_http_1_1_error(struct Curl_easy *data)
{
- struct HTTP *stream = data->req.p.http;
- return (stream->error == NGHTTP2_HTTP_1_1_REQUIRED);
+ struct stream_ctx *stream = H2_STREAM_CTX(data);
+ return (stream && stream->error == NGHTTP2_HTTP_1_1_REQUIRED);
}
#else /* !USE_NGHTTP2 */
diff --git a/lib/http2.h b/lib/http2.h
index f0390596c..80e183480 100644
--- a/lib/http2.h
+++ b/lib/http2.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -38,46 +38,39 @@
*/
void Curl_http2_ver(char *p, size_t len);
-const char *Curl_http2_strerror(uint32_t err);
-
-CURLcode Curl_http2_init(struct connectdata *conn);
-void Curl_http2_init_state(struct UrlState *state);
-void Curl_http2_init_userset(struct UserDefined *set);
CURLcode Curl_http2_request_upgrade(struct dynbuf *req,
struct Curl_easy *data);
-CURLcode Curl_http2_setup(struct Curl_easy *data, struct connectdata *conn);
-CURLcode Curl_http2_switched(struct Curl_easy *data,
- const char *ptr, size_t nread);
-/* called from http_setup_conn */
-void Curl_http2_setup_conn(struct connectdata *conn);
-void Curl_http2_setup_req(struct Curl_easy *data);
-void Curl_http2_done(struct Curl_easy *data, bool premature);
-CURLcode Curl_http2_done_sending(struct Curl_easy *data,
- struct connectdata *conn);
-CURLcode Curl_http2_add_child(struct Curl_easy *parent,
- struct Curl_easy *child,
- bool exclusive);
-void Curl_http2_remove_child(struct Curl_easy *parent,
- struct Curl_easy *child);
-void Curl_http2_cleanup_dependencies(struct Curl_easy *data);
-CURLcode Curl_http2_stream_pause(struct Curl_easy *data, bool pause);
/* returns true if the HTTP/2 stream error was HTTP_1_1_REQUIRED */
bool Curl_h2_http_1_1_error(struct Curl_easy *data);
+
+bool Curl_conn_is_http2(const struct Curl_easy *data,
+ const struct connectdata *conn,
+ int sockindex);
+bool Curl_http2_may_switch(struct Curl_easy *data,
+ struct connectdata *conn,
+ int sockindex);
+
+CURLcode Curl_http2_switch(struct Curl_easy *data,
+ struct connectdata *conn, int sockindex);
+
+CURLcode Curl_http2_switch_at(struct Curl_cfilter *cf, struct Curl_easy *data);
+
+CURLcode Curl_http2_upgrade(struct Curl_easy *data,
+ struct connectdata *conn, int sockindex,
+ const char *ptr, size_t nread);
+
+extern struct Curl_cftype Curl_cft_nghttp2;
+
#else /* USE_NGHTTP2 */
+
+#define Curl_cf_is_http2(a,b) FALSE
+#define Curl_conn_is_http2(a,b,c) FALSE
+#define Curl_http2_may_switch(a,b,c) FALSE
+
#define Curl_http2_request_upgrade(x,y) CURLE_UNSUPPORTED_PROTOCOL
-#define Curl_http2_setup(x,y) CURLE_UNSUPPORTED_PROTOCOL
-#define Curl_http2_switched(x,y,z) CURLE_UNSUPPORTED_PROTOCOL
-#define Curl_http2_setup_conn(x) Curl_nop_stmt
-#define Curl_http2_setup_req(x)
-#define Curl_http2_init_state(x)
-#define Curl_http2_init_userset(x)
-#define Curl_http2_done(x,y)
-#define Curl_http2_done_sending(x,y)
-#define Curl_http2_add_child(x, y, z)
-#define Curl_http2_remove_child(x, y)
-#define Curl_http2_cleanup_dependencies(x)
-#define Curl_http2_stream_pause(x, y)
+#define Curl_http2_switch(a,b,c) CURLE_UNSUPPORTED_PROTOCOL
+#define Curl_http2_upgrade(a,b,c,d,e) CURLE_UNSUPPORTED_PROTOCOL
#define Curl_h2_http_1_1_error(x) 0
#endif
diff --git a/lib/http_aws_sigv4.c b/lib/http_aws_sigv4.c
index 440eb385f..b673055f3 100644
--- a/lib/http_aws_sigv4.c
+++ b/lib/http_aws_sigv4.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,7 +24,7 @@
#include "curl_setup.h"
-#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_CRYPTO_AUTH)
+#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_AWS)
#include "urldata.h"
#include "strcase.h"
@@ -32,10 +32,9 @@
#include "http_aws_sigv4.h"
#include "curl_sha256.h"
#include "transfer.h"
-
-#include "strcase.h"
#include "parsedate.h"
#include "sendf.h"
+#include "escape.h"
#include <time.h>
@@ -46,28 +45,27 @@
#include "slist.h"
-#define HMAC_SHA256(k, kl, d, dl, o) \
- do { \
- ret = Curl_hmacit(Curl_HMAC_SHA256, \
- (unsigned char *)k, \
- (unsigned int)kl, \
- (unsigned char *)d, \
- (unsigned int)dl, o); \
- if(ret) { \
- goto fail; \
- } \
+#define HMAC_SHA256(k, kl, d, dl, o) \
+ do { \
+ result = Curl_hmacit(Curl_HMAC_SHA256, \
+ (unsigned char *)k, \
+ kl, \
+ (unsigned char *)d, \
+ dl, o); \
+ if(result) { \
+ goto fail; \
+ } \
} while(0)
#define TIMESTAMP_SIZE 17
-static void sha256_to_hex(char *dst, unsigned char *sha, size_t dst_l)
-{
- int i;
+/* hex-encoded with trailing null */
+#define SHA256_HEX_LENGTH (2 * SHA256_DIGEST_LENGTH + 1)
- DEBUGASSERT(dst_l >= 65);
- for(i = 0; i < 32; ++i) {
- msnprintf(dst + (i * 2), dst_l - (i * 2), "%02x", sha[i]);
- }
+static void sha256_to_hex(char *dst, unsigned char *sha)
+{
+ Curl_hexencode(sha, SHA256_DIGEST_LENGTH,
+ (unsigned char *)dst, SHA256_HEX_LENGTH);
}
static char *find_date_hdr(struct Curl_easy *data, const char *sig_hdr)
@@ -118,7 +116,7 @@ static void trim_headers(struct curl_slist *head)
}
}
-/* maximum lenth for the aws sivg4 parts */
+/* maximum length for the aws sivg4 parts */
#define MAX_SIGV4_LEN 64
#define MAX_SIGV4_LEN_TXT "64"
@@ -137,6 +135,7 @@ static CURLcode make_headers(struct Curl_easy *data,
char *timestamp,
char *provider1,
char **date_header,
+ char *content_sha256_header,
struct dynbuf *canonical_headers,
struct dynbuf *signed_headers)
{
@@ -191,13 +190,51 @@ static CURLcode make_headers(struct Curl_easy *data,
}
- for(l = data->set.headers; l; l = l->next) {
- tmp_head = curl_slist_append(head, l->data);
+ if(*content_sha256_header) {
+ tmp_head = curl_slist_append(head, content_sha256_header);
if(!tmp_head)
goto fail;
head = tmp_head;
}
+ /* copy user headers to our header list. the logic is based on how http.c
+ handles user headers.
+
+ user headers in format 'name:' with no value are used to signal that an
+ internal header of that name should be removed. those user headers are not
+ added to this list.
+
+ user headers in format 'name;' with no value are used to signal that a
+ header of that name with no value should be sent. those user headers are
+ added to this list but in the format that they will be sent, ie the
+ semi-colon is changed to a colon for format 'name:'.
+
+ user headers with a value of whitespace only, or without a colon or
+ semi-colon, are not added to this list.
+ */
+ for(l = data->set.headers; l; l = l->next) {
+ char *dupdata, *ptr;
+ char *sep = strchr(l->data, ':');
+ if(!sep)
+ sep = strchr(l->data, ';');
+ if(!sep || (*sep == ':' && !*(sep + 1)))
+ continue;
+ for(ptr = sep + 1; ISSPACE(*ptr); ++ptr)
+ ;
+ if(!*ptr && ptr != sep + 1) /* a value of whitespace only */
+ continue;
+ dupdata = strdup(l->data);
+ if(!dupdata)
+ goto fail;
+ dupdata[sep - l->data] = ':';
+ tmp_head = Curl_slist_append_nodup(head, dupdata);
+ if(!tmp_head) {
+ free(dupdata);
+ goto fail;
+ }
+ head = tmp_head;
+ }
+
trim_headers(head);
*date_header = find_date_hdr(data, date_hdr_key);
@@ -206,23 +243,22 @@ static CURLcode make_headers(struct Curl_easy *data,
if(!tmp_head)
goto fail;
head = tmp_head;
- *date_header = curl_maprintf("%s: %s", date_hdr_key, timestamp);
+ *date_header = curl_maprintf("%s: %s\r\n", date_hdr_key, timestamp);
}
else {
char *value;
- *date_header = strdup(*date_header);
- if(!*date_header)
- goto fail;
-
value = strchr(*date_header, ':');
- if(!value)
+ if(!value) {
+ *date_header = NULL;
goto fail;
+ }
++value;
while(ISBLANK(*value))
++value;
strncpy(timestamp, value, TIMESTAMP_SIZE - 1);
timestamp[TIMESTAMP_SIZE - 1] = 0;
+ *date_header = NULL;
}
/* alpha-sort in a case sensitive manner */
@@ -268,9 +304,220 @@ fail:
return ret;
}
-CURLcode Curl_output_aws_sigv4(struct Curl_easy *data, bool proxy)
+#define CONTENT_SHA256_KEY_LEN (MAX_SIGV4_LEN + sizeof("X--Content-Sha256"))
+/* add 2 for ": " between header name and value */
+#define CONTENT_SHA256_HDR_LEN (CONTENT_SHA256_KEY_LEN + 2 + \
+ SHA256_HEX_LENGTH)
+
+/* try to parse a payload hash from the content-sha256 header */
+static char *parse_content_sha_hdr(struct Curl_easy *data,
+ const char *provider1,
+ size_t *value_len)
+{
+ char key[CONTENT_SHA256_KEY_LEN];
+ size_t key_len;
+ char *value;
+ size_t len;
+
+ key_len = msnprintf(key, sizeof(key), "x-%s-content-sha256", provider1);
+
+ value = Curl_checkheaders(data, key, key_len);
+ if(!value)
+ return NULL;
+
+ value = strchr(value, ':');
+ if(!value)
+ return NULL;
+ ++value;
+
+ while(*value && ISBLANK(*value))
+ ++value;
+
+ len = strlen(value);
+ while(len > 0 && ISBLANK(value[len-1]))
+ --len;
+
+ *value_len = len;
+ return value;
+}
+
+static CURLcode calc_payload_hash(struct Curl_easy *data,
+ unsigned char *sha_hash, char *sha_hex)
{
+ const char *post_data = data->set.postfields;
+ size_t post_data_len = 0;
+ CURLcode result;
+
+ if(post_data) {
+ if(data->set.postfieldsize < 0)
+ post_data_len = strlen(post_data);
+ else
+ post_data_len = (size_t)data->set.postfieldsize;
+ }
+ result = Curl_sha256it(sha_hash, (const unsigned char *) post_data,
+ post_data_len);
+ if(!result)
+ sha256_to_hex(sha_hex, sha_hash);
+ return result;
+}
+
+#define S3_UNSIGNED_PAYLOAD "UNSIGNED-PAYLOAD"
+
+static CURLcode calc_s3_payload_hash(struct Curl_easy *data,
+ Curl_HttpReq httpreq, char *provider1,
+ unsigned char *sha_hash,
+ char *sha_hex, char *header)
+{
+ bool empty_method = (httpreq == HTTPREQ_GET || httpreq == HTTPREQ_HEAD);
+ /* The request method or filesize indicate no request payload */
+ bool empty_payload = (empty_method || data->set.filesize == 0);
+ /* The POST payload is in memory */
+ bool post_payload = (httpreq == HTTPREQ_POST && data->set.postfields);
CURLcode ret = CURLE_OUT_OF_MEMORY;
+
+ if(empty_payload || post_payload) {
+ /* Calculate a real hash when we know the request payload */
+ ret = calc_payload_hash(data, sha_hash, sha_hex);
+ if(ret)
+ goto fail;
+ }
+ else {
+ /* Fall back to s3's UNSIGNED-PAYLOAD */
+ size_t len = sizeof(S3_UNSIGNED_PAYLOAD) - 1;
+ DEBUGASSERT(len < SHA256_HEX_LENGTH); /* 16 < 65 */
+ memcpy(sha_hex, S3_UNSIGNED_PAYLOAD, len);
+ sha_hex[len] = 0;
+ }
+
+ /* format the required content-sha256 header */
+ msnprintf(header, CONTENT_SHA256_HDR_LEN,
+ "x-%s-content-sha256: %s", provider1, sha_hex);
+
+ ret = CURLE_OK;
+fail:
+ return ret;
+}
+
+struct pair {
+ const char *p;
+ size_t len;
+};
+
+static int compare_func(const void *a, const void *b)
+{
+ const struct pair *aa = a;
+ const struct pair *bb = b;
+ /* If one element is empty, the other is always sorted higher */
+ if(aa->len == 0)
+ return -1;
+ if(bb->len == 0)
+ return 1;
+ return strncmp(aa->p, bb->p, aa->len < bb->len ? aa->len : bb->len);
+}
+
+#define MAX_QUERYPAIRS 64
+
+static CURLcode canon_query(struct Curl_easy *data,
+ const char *query, struct dynbuf *dq)
+{
+ CURLcode result = CURLE_OK;
+ int entry = 0;
+ int i;
+ const char *p = query;
+ struct pair array[MAX_QUERYPAIRS];
+ struct pair *ap = &array[0];
+ if(!query)
+ return result;
+
+ /* sort the name=value pairs first */
+ do {
+ char *amp;
+ entry++;
+ ap->p = p;
+ amp = strchr(p, '&');
+ if(amp)
+ ap->len = amp - p; /* excluding the ampersand */
+ else {
+ ap->len = strlen(p);
+ break;
+ }
+ ap++;
+ p = amp + 1;
+ } while(entry < MAX_QUERYPAIRS);
+ if(entry == MAX_QUERYPAIRS) {
+ /* too many query pairs for us */
+ failf(data, "aws-sigv4: too many query pairs in URL");
+ return CURLE_URL_MALFORMAT;
+ }
+
+ qsort(&array[0], entry, sizeof(struct pair), compare_func);
+
+ ap = &array[0];
+ for(i = 0; !result && (i < entry); i++, ap++) {
+ size_t len;
+ const char *q = ap->p;
+ bool found_equals = false;
+ if(!ap->len)
+ continue;
+ for(len = ap->len; len && !result; q++, len--) {
+ if(ISALNUM(*q))
+ result = Curl_dyn_addn(dq, q, 1);
+ else {
+ switch(*q) {
+ case '-':
+ case '.':
+ case '_':
+ case '~':
+ /* allowed as-is */
+ result = Curl_dyn_addn(dq, q, 1);
+ break;
+ case '=':
+ /* allowed as-is */
+ result = Curl_dyn_addn(dq, q, 1);
+ found_equals = true;
+ break;
+ case '%':
+ /* uppercase the following if hexadecimal */
+ if(ISXDIGIT(q[1]) && ISXDIGIT(q[2])) {
+ char tmp[3]="%";
+ tmp[1] = Curl_raw_toupper(q[1]);
+ tmp[2] = Curl_raw_toupper(q[2]);
+ result = Curl_dyn_addn(dq, tmp, 3);
+ q += 2;
+ len -= 2;
+ }
+ else
+ /* '%' without a following two-digit hex, encode it */
+ result = Curl_dyn_addn(dq, "%25", 3);
+ break;
+ default: {
+ /* URL encode */
+ const char hex[] = "0123456789ABCDEF";
+ char out[3]={'%'};
+ out[1] = hex[((unsigned char)*q)>>4];
+ out[2] = hex[*q & 0xf];
+ result = Curl_dyn_addn(dq, out, 3);
+ break;
+ }
+ }
+ }
+ }
+ if(!result && !found_equals) {
+ /* queries without value still need an equals */
+ result = Curl_dyn_addn(dq, "=", 1);
+ }
+ if(!result && i < entry - 1) {
+ /* insert ampersands between query pairs */
+ result = Curl_dyn_addn(dq, "&", 1);
+ }
+ }
+ return result;
+}
+
+
+CURLcode Curl_output_aws_sigv4(struct Curl_easy *data, bool proxy)
+{
+ CURLcode result = CURLE_OUT_OF_MEMORY;
struct connectdata *conn = data->conn;
size_t len;
const char *arg;
@@ -278,6 +525,7 @@ CURLcode Curl_output_aws_sigv4(struct Curl_easy *data, bool proxy)
char provider1[MAX_SIGV4_LEN + 1]="";
char region[MAX_SIGV4_LEN + 1]="";
char service[MAX_SIGV4_LEN + 1]="";
+ bool sign_as_s3 = false;
const char *hostname = conn->host.name;
time_t clock;
struct tm tm;
@@ -285,19 +533,23 @@ CURLcode Curl_output_aws_sigv4(struct Curl_easy *data, bool proxy)
char date[9];
struct dynbuf canonical_headers;
struct dynbuf signed_headers;
+ struct dynbuf canonical_query;
char *date_header = NULL;
- const char *post_data = data->set.postfields;
- size_t post_data_len = 0;
- unsigned char sha_hash[32];
- char sha_hex[65];
+ Curl_HttpReq httpreq;
+ const char *method = NULL;
+ char *payload_hash = NULL;
+ size_t payload_hash_len = 0;
+ unsigned char sha_hash[SHA256_DIGEST_LENGTH];
+ char sha_hex[SHA256_HEX_LENGTH];
+ char content_sha256_hdr[CONTENT_SHA256_HDR_LEN + 2] = ""; /* add \r\n */
char *canonical_request = NULL;
char *request_type = NULL;
char *credential_scope = NULL;
char *str_to_sign = NULL;
const char *user = data->state.aptr.user ? data->state.aptr.user : "";
char *secret = NULL;
- unsigned char sign0[32] = {0};
- unsigned char sign1[32] = {0};
+ unsigned char sign0[SHA256_DIGEST_LENGTH] = {0};
+ unsigned char sign1[SHA256_DIGEST_LENGTH] = {0};
char *auth_headers = NULL;
DEBUGASSERT(!proxy);
@@ -308,8 +560,9 @@ CURLcode Curl_output_aws_sigv4(struct Curl_easy *data, bool proxy)
return CURLE_OK;
}
- /* we init thoses buffers here, so goto fail will free initialized dynbuf */
+ /* we init those buffers here, so goto fail will free initialized dynbuf */
Curl_dyn_init(&canonical_headers, CURL_MAX_HTTP_HEADER);
+ Curl_dyn_init(&canonical_query, CURL_MAX_HTTP_HEADER);
Curl_dyn_init(&signed_headers, CURL_MAX_HTTP_HEADER);
/*
@@ -325,15 +578,15 @@ CURLcode Curl_output_aws_sigv4(struct Curl_easy *data, bool proxy)
/* provider1[:provider2[:region[:service]]]
No string can be longer than N bytes of non-whitespace
- */
+ */
(void)sscanf(arg, "%" MAX_SIGV4_LEN_TXT "[^:]"
":%" MAX_SIGV4_LEN_TXT "[^:]"
":%" MAX_SIGV4_LEN_TXT "[^:]"
":%" MAX_SIGV4_LEN_TXT "s",
provider0, provider1, region, service);
if(!provider0[0]) {
- failf(data, "first provider can't be empty");
- ret = CURLE_BAD_FUNCTION_ARGUMENT;
+ failf(data, "first aws-sigv4 provider can't be empty");
+ result = CURLE_BAD_FUNCTION_ARGUMENT;
goto fail;
}
else if(!provider1[0])
@@ -342,38 +595,64 @@ CURLcode Curl_output_aws_sigv4(struct Curl_easy *data, bool proxy)
if(!service[0]) {
char *hostdot = strchr(hostname, '.');
if(!hostdot) {
- failf(data, "service missing in parameters and hostname");
- ret = CURLE_URL_MALFORMAT;
+ failf(data, "aws-sigv4: service missing in parameters and hostname");
+ result = CURLE_URL_MALFORMAT;
goto fail;
}
len = hostdot - hostname;
if(len > MAX_SIGV4_LEN) {
- failf(data, "service too long in hostname");
- ret = CURLE_URL_MALFORMAT;
+ failf(data, "aws-sigv4: service too long in hostname");
+ result = CURLE_URL_MALFORMAT;
goto fail;
}
strncpy(service, hostname, len);
service[len] = '\0';
+ infof(data, "aws_sigv4: picked service %s from host", service);
+
if(!region[0]) {
const char *reg = hostdot + 1;
const char *hostreg = strchr(reg, '.');
if(!hostreg) {
- failf(data, "region missing in parameters and hostname");
- ret = CURLE_URL_MALFORMAT;
+ failf(data, "aws-sigv4: region missing in parameters and hostname");
+ result = CURLE_URL_MALFORMAT;
goto fail;
}
len = hostreg - reg;
if(len > MAX_SIGV4_LEN) {
- failf(data, "region too long in hostname");
- ret = CURLE_URL_MALFORMAT;
+ failf(data, "aws-sigv4: region too long in hostname");
+ result = CURLE_URL_MALFORMAT;
goto fail;
}
strncpy(region, reg, len);
region[len] = '\0';
+ infof(data, "aws_sigv4: picked region %s from host", region);
}
}
+ Curl_http_method(data, conn, &method, &httpreq);
+
+ /* AWS S3 requires a x-amz-content-sha256 header, and supports special
+ * values like UNSIGNED-PAYLOAD */
+ sign_as_s3 = (strcasecompare(provider0, "aws") &&
+ strcasecompare(service, "s3"));
+
+ payload_hash = parse_content_sha_hdr(data, provider1, &payload_hash_len);
+
+ if(!payload_hash) {
+ if(sign_as_s3)
+ result = calc_s3_payload_hash(data, httpreq, provider1, sha_hash,
+ sha_hex, content_sha256_hdr);
+ else
+ result = calc_payload_hash(data, sha_hash, sha_hex);
+ if(result)
+ goto fail;
+
+ payload_hash = sha_hex;
+ /* may be shorter than SHA256_HEX_LENGTH, like S3_UNSIGNED_PAYLOAD */
+ payload_hash_len = strlen(sha_hex);
+ }
+
#ifdef DEBUGBUILD
{
char *force_timestamp = getenv("CURL_FORCETIME");
@@ -385,58 +664,54 @@ CURLcode Curl_output_aws_sigv4(struct Curl_easy *data, bool proxy)
#else
time(&clock);
#endif
- ret = Curl_gmtime(clock, &tm);
- if(ret) {
+ result = Curl_gmtime(clock, &tm);
+ if(result) {
goto fail;
}
if(!strftime(timestamp, sizeof(timestamp), "%Y%m%dT%H%M%SZ", &tm)) {
- ret = CURLE_OUT_OF_MEMORY;
+ result = CURLE_OUT_OF_MEMORY;
goto fail;
}
- ret = make_headers(data, hostname, timestamp, provider1,
- &date_header, &canonical_headers, &signed_headers);
- if(ret)
+ result = make_headers(data, hostname, timestamp, provider1,
+ &date_header, content_sha256_hdr,
+ &canonical_headers, &signed_headers);
+ if(result)
goto fail;
- ret = CURLE_OUT_OF_MEMORY;
+
+ if(*content_sha256_hdr) {
+ /* make_headers() needed this without the \r\n for canonicalization */
+ size_t hdrlen = strlen(content_sha256_hdr);
+ DEBUGASSERT(hdrlen + 3 < sizeof(content_sha256_hdr));
+ memcpy(content_sha256_hdr + hdrlen, "\r\n", 3);
+ }
memcpy(date, timestamp, sizeof(date));
date[sizeof(date) - 1] = 0;
- if(post_data) {
- if(data->set.postfieldsize < 0)
- post_data_len = strlen(post_data);
- else
- post_data_len = (size_t)data->set.postfieldsize;
- }
- if(Curl_sha256it(sha_hash, (const unsigned char *) post_data,
- post_data_len))
+ result = canon_query(data, data->state.up.query, &canonical_query);
+ if(result)
+ goto fail;
+ result = CURLE_OUT_OF_MEMORY;
+
+ canonical_request =
+ curl_maprintf("%s\n" /* HTTPRequestMethod */
+ "%s\n" /* CanonicalURI */
+ "%s\n" /* CanonicalQueryString */
+ "%s\n" /* CanonicalHeaders */
+ "%s\n" /* SignedHeaders */
+ "%.*s", /* HashedRequestPayload in hex */
+ method,
+ data->state.up.path,
+ Curl_dyn_ptr(&canonical_query) ?
+ Curl_dyn_ptr(&canonical_query) : "",
+ Curl_dyn_ptr(&canonical_headers),
+ Curl_dyn_ptr(&signed_headers),
+ (int)payload_hash_len, payload_hash);
+ if(!canonical_request)
goto fail;
- sha256_to_hex(sha_hex, sha_hash, sizeof(sha_hex));
-
- {
- Curl_HttpReq httpreq;
- const char *method;
-
- Curl_http_method(data, conn, &method, &httpreq);
-
- canonical_request =
- curl_maprintf("%s\n" /* HTTPRequestMethod */
- "%s\n" /* CanonicalURI */
- "%s\n" /* CanonicalQueryString */
- "%s\n" /* CanonicalHeaders */
- "%s\n" /* SignedHeaders */
- "%s", /* HashedRequestPayload in hex */
- method,
- data->state.up.path,
- data->state.up.query ? data->state.up.query : "",
- Curl_dyn_ptr(&canonical_headers),
- Curl_dyn_ptr(&signed_headers),
- sha_hex);
- if(!canonical_request)
- goto fail;
- }
+ DEBUGF(infof(data, "Canonical request: %s", canonical_request));
/* provider 0 lowercase */
Curl_strntolower(provider0, provider0, strlen(provider0));
@@ -453,14 +728,14 @@ CURLcode Curl_output_aws_sigv4(struct Curl_easy *data, bool proxy)
strlen(canonical_request)))
goto fail;
- sha256_to_hex(sha_hex, sha_hash, sizeof(sha_hex));
+ sha256_to_hex(sha_hex, sha_hash);
/* provider 0 uppercase */
Curl_strntoupper(provider0, provider0, strlen(provider0));
/*
* Google allows using RSA key instead of HMAC, so this code might change
- * in the future. For now we ony support HMAC.
+ * in the future. For now we only support HMAC.
*/
str_to_sign = curl_maprintf("%s4-HMAC-SHA256\n" /* Algorithm */
"%s\n" /* RequestDateTime */
@@ -487,20 +762,27 @@ CURLcode Curl_output_aws_sigv4(struct Curl_easy *data, bool proxy)
HMAC_SHA256(sign0, sizeof(sign0), request_type, strlen(request_type), sign1);
HMAC_SHA256(sign1, sizeof(sign1), str_to_sign, strlen(str_to_sign), sign0);
- sha256_to_hex(sha_hex, sign0, sizeof(sha_hex));
+ sha256_to_hex(sha_hex, sign0);
/* provider 0 uppercase */
auth_headers = curl_maprintf("Authorization: %s4-HMAC-SHA256 "
"Credential=%s/%s, "
"SignedHeaders=%s, "
"Signature=%s\r\n"
- "%s\r\n",
+ /*
+ * date_header is added here, only if it wasn't
+ * user-specified (using CURLOPT_HTTPHEADER).
+ * date_header includes \r\n
+ */
+ "%s"
+ "%s", /* optional sha256 header includes \r\n */
provider0,
user,
credential_scope,
Curl_dyn_ptr(&signed_headers),
sha_hex,
- date_header);
+ date_header ? date_header : "",
+ content_sha256_hdr);
if(!auth_headers) {
goto fail;
}
@@ -508,9 +790,10 @@ CURLcode Curl_output_aws_sigv4(struct Curl_easy *data, bool proxy)
Curl_safefree(data->state.aptr.userpwd);
data->state.aptr.userpwd = auth_headers;
data->state.authhost.done = TRUE;
- ret = CURLE_OK;
+ result = CURLE_OK;
fail:
+ Curl_dyn_free(&canonical_query);
Curl_dyn_free(&canonical_headers);
Curl_dyn_free(&signed_headers);
free(canonical_request);
@@ -519,7 +802,7 @@ fail:
free(str_to_sign);
free(secret);
free(date_header);
- return ret;
+ return result;
}
-#endif /* !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_CRYPTO_AUTH) */
+#endif /* !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_AWS) */
diff --git a/lib/http_aws_sigv4.h b/lib/http_aws_sigv4.h
index 85755e937..57cc5706e 100644
--- a/lib/http_aws_sigv4.h
+++ b/lib/http_aws_sigv4.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/http_chunks.c b/lib/http_chunks.c
index 0b836851a..acdb10863 100644
--- a/lib/http_chunks.c
+++ b/lib/http_chunks.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -75,8 +75,6 @@
*/
-#define isxdigit_ascii(x) Curl_isxdigit(x)
-
void Curl_httpchunk_init(struct Curl_easy *data)
{
struct connectdata *conn = data->conn;
@@ -98,9 +96,9 @@ void Curl_httpchunk_init(struct Curl_easy *data)
* For example, 0x0d and 0x0a are used instead of '\r' and '\n'.
*/
CHUNKcode Curl_httpchunk_read(struct Curl_easy *data,
- char *datap,
- ssize_t datalen,
- ssize_t *wrote,
+ char *buf,
+ size_t blen,
+ size_t *pconsumed,
CURLcode *extrap)
{
CURLcode result = CURLE_OK;
@@ -108,28 +106,27 @@ CHUNKcode Curl_httpchunk_read(struct Curl_easy *data,
struct Curl_chunker *ch = &conn->chunk;
struct SingleRequest *k = &data->req;
size_t piece;
- curl_off_t length = (curl_off_t)datalen;
- *wrote = 0; /* nothing's written yet */
+ *pconsumed = 0; /* nothing's written yet */
/* the original data is written to the client, but we go on with the
- chunk read process, to properly calculate the content length*/
+ chunk read process, to properly calculate the content length */
if(data->set.http_te_skip && !k->ignorebody) {
- result = Curl_client_write(data, CLIENTWRITE_BODY, datap, datalen);
+ result = Curl_client_write(data, CLIENTWRITE_BODY, buf, blen);
if(result) {
*extrap = result;
return CHUNKE_PASSTHRU_ERROR;
}
}
- while(length) {
+ while(blen) {
switch(ch->state) {
case CHUNK_HEX:
- if(ISXDIGIT(*datap)) {
+ if(ISXDIGIT(*buf)) {
if(ch->hexindex < CHUNK_MAXNUM_LEN) {
- ch->hexbuffer[ch->hexindex] = *datap;
- datap++;
- length--;
+ ch->hexbuffer[ch->hexindex] = *buf;
+ buf++;
+ blen--;
ch->hexindex++;
}
else {
@@ -143,7 +140,7 @@ CHUNKcode Curl_httpchunk_read(struct Curl_easy *data,
a hexadecimal digit. */
return CHUNKE_ILLEGAL_HEX;
- /* length and datap are unmodified */
+ /* blen and buf are unmodified */
ch->hexbuffer[ch->hexindex] = 0;
if(curlx_strtoofft(ch->hexbuffer, &endptr, 16, &ch->datasize))
@@ -154,7 +151,7 @@ CHUNKcode Curl_httpchunk_read(struct Curl_easy *data,
case CHUNK_LF:
/* waiting for the LF after a chunk size */
- if(*datap == 0x0a) {
+ if(*buf == 0x0a) {
/* we're now expecting data to come, unless size was zero! */
if(0 == ch->datasize) {
ch->state = CHUNK_TRAILER; /* now check for trailers */
@@ -163,22 +160,21 @@ CHUNKcode Curl_httpchunk_read(struct Curl_easy *data,
ch->state = CHUNK_DATA;
}
- datap++;
- length--;
+ buf++;
+ blen--;
break;
case CHUNK_DATA:
- /* We expect 'datasize' of data. We have 'length' right now, it can be
+ /* We expect 'datasize' of data. We have 'blen' right now, it can be
more or less than 'datasize'. Get the smallest piece.
*/
- piece = curlx_sotouz((ch->datasize >= length)?length:ch->datasize);
+ piece = blen;
+ if(ch->datasize < (curl_off_t)blen)
+ piece = curlx_sotouz(ch->datasize);
/* Write the data portion available */
if(!data->set.http_te_skip && !k->ignorebody) {
- if(!data->set.http_ce_skip && k->writer_stack)
- result = Curl_unencode_write(data, k->writer_stack, datap, piece);
- else
- result = Curl_client_write(data, CLIENTWRITE_BODY, datap, piece);
+ result = Curl_client_write(data, CLIENTWRITE_BODY, buf, piece);
if(result) {
*extrap = result;
@@ -186,10 +182,10 @@ CHUNKcode Curl_httpchunk_read(struct Curl_easy *data,
}
}
- *wrote += piece;
+ *pconsumed += piece;
ch->datasize -= piece; /* decrease amount left to expect */
- datap += piece; /* move read pointer forward */
- length -= piece; /* decrease space left in this round */
+ buf += piece; /* move read pointer forward */
+ blen -= piece; /* decrease space left in this round */
if(0 == ch->datasize)
/* end of data this round, we now expect a trailing CRLF */
@@ -197,18 +193,18 @@ CHUNKcode Curl_httpchunk_read(struct Curl_easy *data,
break;
case CHUNK_POSTLF:
- if(*datap == 0x0a) {
+ if(*buf == 0x0a) {
/* The last one before we go back to hex state and start all over. */
Curl_httpchunk_init(data); /* sets state back to CHUNK_HEX */
}
- else if(*datap != 0x0d)
+ else if(*buf != 0x0d)
return CHUNKE_BAD_CHUNK;
- datap++;
- length--;
+ buf++;
+ blen--;
break;
case CHUNK_TRAILER:
- if((*datap == 0x0d) || (*datap == 0x0a)) {
+ if((*buf == 0x0d) || (*buf == 0x0a)) {
char *tr = Curl_dyn_ptr(&conn->trailer);
/* this is the end of a trailer, but if the trailer was zero bytes
there was no trailer and we move on */
@@ -232,7 +228,7 @@ CHUNKcode Curl_httpchunk_read(struct Curl_easy *data,
}
Curl_dyn_reset(&conn->trailer);
ch->state = CHUNK_TRAILER_CR;
- if(*datap == 0x0a)
+ if(*buf == 0x0a)
/* already on the LF */
break;
}
@@ -243,19 +239,19 @@ CHUNKcode Curl_httpchunk_read(struct Curl_easy *data,
}
}
else {
- result = Curl_dyn_addn(&conn->trailer, datap, 1);
+ result = Curl_dyn_addn(&conn->trailer, buf, 1);
if(result)
return CHUNKE_OUT_OF_MEMORY;
}
- datap++;
- length--;
+ buf++;
+ blen--;
break;
case CHUNK_TRAILER_CR:
- if(*datap == 0x0a) {
+ if(*buf == 0x0a) {
ch->state = CHUNK_TRAILER_POSTCR;
- datap++;
- length--;
+ buf++;
+ blen--;
}
else
return CHUNKE_BAD_CHUNK;
@@ -264,27 +260,27 @@ CHUNKcode Curl_httpchunk_read(struct Curl_easy *data,
case CHUNK_TRAILER_POSTCR:
/* We enter this state when a CR should arrive so we expect to
have to first pass a CR before we wait for LF */
- if((*datap != 0x0d) && (*datap != 0x0a)) {
+ if((*buf != 0x0d) && (*buf != 0x0a)) {
/* not a CR then it must be another header in the trailer */
ch->state = CHUNK_TRAILER;
break;
}
- if(*datap == 0x0d) {
+ if(*buf == 0x0d) {
/* skip if CR */
- datap++;
- length--;
+ buf++;
+ blen--;
}
/* now wait for the final LF */
ch->state = CHUNK_STOP;
break;
case CHUNK_STOP:
- if(*datap == 0x0a) {
- length--;
+ if(*buf == 0x0a) {
+ blen--;
/* Record the length of any data left in the end of the buffer
even if there's no more chunks to read */
- ch->datasize = curlx_sotouz(length);
+ ch->datasize = blen;
return CHUNKE_STOP; /* return stop */
}
diff --git a/lib/http_chunks.h b/lib/http_chunks.h
index 2cf5507c2..0a36f379b 100644
--- a/lib/http_chunks.h
+++ b/lib/http_chunks.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -93,8 +93,8 @@ struct Curl_chunker {
/* The following functions are defined in http_chunks.c */
void Curl_httpchunk_init(struct Curl_easy *data);
-CHUNKcode Curl_httpchunk_read(struct Curl_easy *data, char *datap,
- ssize_t length, ssize_t *wrote,
+CHUNKcode Curl_httpchunk_read(struct Curl_easy *data, char *buf,
+ size_t blen, size_t *pconsumed,
CURLcode *passthru);
#endif /* HEADER_CURL_HTTP_CHUNKS_H */
diff --git a/lib/http_digest.c b/lib/http_digest.c
index a71c6b7cf..2db3125a8 100644
--- a/lib/http_digest.c
+++ b/lib/http_digest.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,7 +24,7 @@
#include "curl_setup.h"
-#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_CRYPTO_AUTH)
+#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_DIGEST_AUTH)
#include "urldata.h"
#include "strcase.h"
@@ -81,7 +81,7 @@ CURLcode Curl_output_digest(struct Curl_easy *data,
bool have_chlg;
/* Point to the address of the pointer that holds the string to send to the
- server, which is for a plain host or for a HTTP proxy */
+ server, which is for a plain host or for an HTTP proxy */
char **allocuserpwd;
/* Point to the name and password for this */
diff --git a/lib/http_digest.h b/lib/http_digest.h
index eea90b743..5f797310f 100644
--- a/lib/http_digest.h
+++ b/lib/http_digest.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -25,7 +25,7 @@
***************************************************************************/
#include "curl_setup.h"
-#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_CRYPTO_AUTH)
+#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_DIGEST_AUTH)
/* this is for digest header input */
CURLcode Curl_input_digest(struct Curl_easy *data,
@@ -39,6 +39,6 @@ CURLcode Curl_output_digest(struct Curl_easy *data,
void Curl_http_auth_cleanup_digest(struct Curl_easy *data);
-#endif /* !CURL_DISABLE_HTTP && !CURL_DISABLE_CRYPTO_AUTH */
+#endif /* !CURL_DISABLE_HTTP && !CURL_DISABLE_DIGEST_AUTH */
#endif /* HEADER_CURL_HTTP_DIGEST_H */
diff --git a/lib/http_negotiate.c b/lib/http_negotiate.c
index 5909f85b0..153e3d4ab 100644
--- a/lib/http_negotiate.c
+++ b/lib/http_negotiate.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/http_negotiate.h b/lib/http_negotiate.h
index 6e2096c69..76d835613 100644
--- a/lib/http_negotiate.h
+++ b/lib/http_negotiate.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/http_ntlm.c b/lib/http_ntlm.c
index 5a6a97790..b845ddf37 100644
--- a/lib/http_ntlm.c
+++ b/lib/http_ntlm.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -134,7 +134,7 @@ CURLcode Curl_output_ntlm(struct Curl_easy *data, bool proxy)
struct bufref ntlmmsg;
/* point to the address of the pointer that holds the string to send to the
- server, which is for a plain host or for a HTTP proxy */
+ server, which is for a plain host or for an HTTP proxy */
char **allocuserpwd;
/* point to the username, password, service and host */
diff --git a/lib/http_ntlm.h b/lib/http_ntlm.h
index cec63b82c..f37572bae 100644
--- a/lib/http_ntlm.h
+++ b/lib/http_ntlm.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/http_proxy.c b/lib/http_proxy.c
index cc20b3a80..8e1832581 100644
--- a/lib/http_proxy.c
+++ b/lib/http_proxy.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -26,7 +26,7 @@
#include "http_proxy.h"
-#if !defined(CURL_DISABLE_PROXY) && !defined(CURL_DISABLE_HTTP)
+#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_PROXY)
#include <curl/curl.h>
#ifdef USE_HYPER
@@ -37,6 +37,9 @@
#include "url.h"
#include "select.h"
#include "progress.h"
+#include "cfilters.h"
+#include "cf-h1-proxy.h"
+#include "cf-h2-proxy.h"
#include "connect.h"
#include "curlx.h"
#include "vtls/vtls.h"
@@ -48,1030 +51,286 @@
#include "curl_memory.h"
#include "memdebug.h"
-/*
- * Perform SSL initialization for HTTPS proxy. Sets
- * proxy_ssl_connected connection bit when complete. Can be
- * called multiple times.
- */
-static CURLcode https_proxy_connect(struct Curl_easy *data, int sockindex)
-{
-#ifdef USE_SSL
- struct connectdata *conn = data->conn;
- CURLcode result = CURLE_OK;
- DEBUGASSERT(conn->http_proxy.proxytype == CURLPROXY_HTTPS);
- if(!conn->bits.proxy_ssl_connected[sockindex]) {
- /* perform SSL initialization for this socket */
- result =
- Curl_ssl_connect_nonblocking(data, conn, TRUE, sockindex,
- &conn->bits.proxy_ssl_connected[sockindex]);
- if(result)
- /* a failed connection is marked for closure to prevent (bad) re-use or
- similar */
- connclose(conn, "TLS handshake failed");
- }
- return result;
-#else
- (void) data;
- (void) sockindex;
- return CURLE_NOT_BUILT_IN;
-#endif
-}
-CURLcode Curl_proxy_connect(struct Curl_easy *data, int sockindex)
+CURLcode Curl_http_proxy_get_destination(struct Curl_cfilter *cf,
+ const char **phostname,
+ int *pport, bool *pipv6_ip)
{
- struct connectdata *conn = data->conn;
- if(conn->http_proxy.proxytype == CURLPROXY_HTTPS) {
- const CURLcode result = https_proxy_connect(data, sockindex);
- if(result)
- return result;
- if(!conn->bits.proxy_ssl_connected[sockindex])
- return result; /* wait for HTTPS proxy SSL initialization to complete */
- }
-
- if(conn->bits.tunnel_proxy && conn->bits.httpproxy) {
-#ifndef CURL_DISABLE_PROXY
- /* for [protocol] tunneled through HTTP proxy */
- const char *hostname;
- int remote_port;
- CURLcode result;
-
- /* We want "seamless" operations through HTTP proxy tunnel */
-
- /* for the secondary socket (FTP), use the "connect to host"
- * but ignore the "connect to port" (use the secondary port)
- */
-
- if(conn->bits.conn_to_host)
- hostname = conn->conn_to_host.name;
- else if(sockindex == SECONDARYSOCKET)
- hostname = conn->secondaryhostname;
- else
- hostname = conn->host.name;
-
- if(sockindex == SECONDARYSOCKET)
- remote_port = conn->secondary_port;
- else if(conn->bits.conn_to_port)
- remote_port = conn->conn_to_port;
- else
- remote_port = conn->remote_port;
+ DEBUGASSERT(cf);
+ DEBUGASSERT(cf->conn);
+
+ if(cf->conn->bits.conn_to_host)
+ *phostname = cf->conn->conn_to_host.name;
+ else if(cf->sockindex == SECONDARYSOCKET)
+ *phostname = cf->conn->secondaryhostname;
+ else
+ *phostname = cf->conn->host.name;
+
+ if(cf->sockindex == SECONDARYSOCKET)
+ *pport = cf->conn->secondary_port;
+ else if(cf->conn->bits.conn_to_port)
+ *pport = cf->conn->conn_to_port;
+ else
+ *pport = cf->conn->remote_port;
+
+ if(*phostname != cf->conn->host.name)
+ *pipv6_ip = (strchr(*phostname, ':') != NULL);
+ else
+ *pipv6_ip = cf->conn->bits.ipv6_ip;
- result = Curl_proxyCONNECT(data, sockindex, hostname, remote_port);
- if(CURLE_OK != result)
- return result;
- Curl_safefree(data->state.aptr.proxyuserpwd);
-#else
- return CURLE_NOT_BUILT_IN;
-#endif
- }
- /* no HTTP tunnel proxy, just return */
return CURLE_OK;
}
-bool Curl_connect_complete(struct connectdata *conn)
-{
- return !conn->connect_state ||
- (conn->connect_state->tunnel_state >= TUNNEL_COMPLETE);
-}
-
-bool Curl_connect_ongoing(struct connectdata *conn)
-{
- return conn->connect_state &&
- (conn->connect_state->tunnel_state <= TUNNEL_COMPLETE);
-}
-
-/* when we've sent a CONNECT to a proxy, we should rather either wait for the
- socket to become readable to be able to get the response headers or if
- we're still sending the request, wait for write. */
-int Curl_connect_getsock(struct connectdata *conn)
+CURLcode Curl_http_proxy_create_CONNECT(struct httpreq **preq,
+ struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int http_version_major)
{
- struct HTTP *http;
- DEBUGASSERT(conn);
- DEBUGASSERT(conn->connect_state);
- http = &conn->connect_state->http_proxy;
-
- if(http->sending == HTTPSEND_REQUEST)
- return GETSOCK_WRITESOCK(0);
+ const char *hostname = NULL;
+ char *authority = NULL;
+ int port;
+ bool ipv6_ip;
+ CURLcode result;
+ struct httpreq *req = NULL;
- return GETSOCK_READSOCK(0);
-}
+ result = Curl_http_proxy_get_destination(cf, &hostname, &port, &ipv6_ip);
+ if(result)
+ goto out;
-static CURLcode connect_init(struct Curl_easy *data, bool reinit)
-{
- struct http_connect_state *s;
- struct connectdata *conn = data->conn;
- if(conn->handler->flags & PROTOPT_NOTCPPROXY) {
- failf(data, "%s cannot be done over CONNECT", conn->handler->scheme);
- return CURLE_UNSUPPORTED_PROTOCOL;
+ authority = aprintf("%s%s%s:%d", ipv6_ip?"[":"", hostname,
+ ipv6_ip?"]":"", port);
+ if(!authority) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
}
- if(!reinit) {
- CURLcode result;
- DEBUGASSERT(!conn->connect_state);
- /* we might need the upload buffer for streaming a partial request */
- result = Curl_get_upload_buffer(data);
+
+ result = Curl_http_req_make(&req, "CONNECT", sizeof("CONNECT")-1,
+ NULL, 0, authority, strlen(authority),
+ NULL, 0);
+ if(result)
+ goto out;
+
+ /* Setup the proxy-authorization header, if any */
+ result = Curl_http_output_auth(data, cf->conn, req->method, HTTPREQ_GET,
+ req->authority, TRUE);
+ if(result)
+ goto out;
+
+ /* If user is not overriding Host: header, we add for HTTP/1.x */
+ if(http_version_major == 1 &&
+ !Curl_checkProxyheaders(data, cf->conn, STRCONST("Host"))) {
+ result = Curl_dynhds_cadd(&req->headers, "Host", authority);
if(result)
- return result;
+ goto out;
+ }
- s = calloc(1, sizeof(struct http_connect_state));
- if(!s)
- return CURLE_OUT_OF_MEMORY;
- infof(data, "allocate connect buffer");
- conn->connect_state = s;
- Curl_dyn_init(&s->rcvbuf, DYN_PROXY_CONNECT_HEADERS);
+ if(data->state.aptr.proxyuserpwd) {
+ result = Curl_dynhds_h1_cadd_line(&req->headers,
+ data->state.aptr.proxyuserpwd);
+ if(result)
+ goto out;
+ }
- /* Curl_proxyCONNECT is based on a pointer to a struct HTTP at the
- * member conn->proto.http; we want [protocol] through HTTP and we have
- * to change the member temporarily for connecting to the HTTP
- * proxy. After Curl_proxyCONNECT we have to set back the member to the
- * original pointer
- *
- * This function might be called several times in the multi interface case
- * if the proxy's CONNECT response is not instant.
- */
- s->prot_save = data->req.p.http;
- data->req.p.http = &s->http_proxy;
- connkeep(conn, "HTTP proxy CONNECT");
+ if(!Curl_checkProxyheaders(data, cf->conn, STRCONST("User-Agent"))
+ && data->set.str[STRING_USERAGENT]) {
+ result = Curl_dynhds_cadd(&req->headers, "User-Agent",
+ data->set.str[STRING_USERAGENT]);
+ if(result)
+ goto out;
}
- else {
- DEBUGASSERT(conn->connect_state);
- s = conn->connect_state;
- Curl_dyn_reset(&s->rcvbuf);
+
+ if(http_version_major == 1 &&
+ !Curl_checkProxyheaders(data, cf->conn, STRCONST("Proxy-Connection"))) {
+ result = Curl_dynhds_cadd(&req->headers, "Proxy-Connection", "Keep-Alive");
+ if(result)
+ goto out;
}
- s->tunnel_state = TUNNEL_INIT;
- s->keepon = KEEPON_CONNECT;
- s->cl = 0;
- s->close_connection = FALSE;
- return CURLE_OK;
-}
-void Curl_connect_done(struct Curl_easy *data)
-{
- struct connectdata *conn = data->conn;
- struct http_connect_state *s = conn->connect_state;
- if(s && (s->tunnel_state != TUNNEL_EXIT)) {
- s->tunnel_state = TUNNEL_EXIT;
- Curl_dyn_free(&s->rcvbuf);
- Curl_dyn_free(&s->req);
+ result = Curl_dynhds_add_custom(data, TRUE, &req->headers);
- /* restore the protocol pointer */
- data->req.p.http = s->prot_save;
- data->info.httpcode = 0; /* clear it as it might've been used for the
- proxy */
- data->req.ignorebody = FALSE;
-#ifdef USE_HYPER
- data->state.hconnect = FALSE;
-#endif
- infof(data, "CONNECT phase completed");
+out:
+ if(result && req) {
+ Curl_http_req_free(req);
+ req = NULL;
}
+ free(authority);
+ *preq = req;
+ return result;
}
-static CURLcode CONNECT_host(struct Curl_easy *data,
- struct connectdata *conn,
- const char *hostname,
- int remote_port,
- char **connecthostp,
- char **hostp)
-{
- char *hostheader; /* for CONNECT */
- char *host = NULL; /* Host: */
- bool ipv6_ip = conn->bits.ipv6_ip;
-
- /* the hostname may be different */
- if(hostname != conn->host.name)
- ipv6_ip = (strchr(hostname, ':') != NULL);
- hostheader = /* host:port with IPv6 support */
- aprintf("%s%s%s:%d", ipv6_ip?"[":"", hostname, ipv6_ip?"]":"",
- remote_port);
- if(!hostheader)
- return CURLE_OUT_OF_MEMORY;
- if(!Curl_checkProxyheaders(data, conn, STRCONST("Host"))) {
- host = aprintf("Host: %s\r\n", hostheader);
- if(!host) {
- free(hostheader);
- return CURLE_OUT_OF_MEMORY;
- }
- }
- *connecthostp = hostheader;
- *hostp = host;
- return CURLE_OK;
-}
+struct cf_proxy_ctx {
+ /* the protocol specific sub-filter we install during connect */
+ struct Curl_cfilter *cf_protocol;
+};
-#ifndef USE_HYPER
-static CURLcode CONNECT(struct Curl_easy *data,
- int sockindex,
- const char *hostname,
- int remote_port)
+static CURLcode http_proxy_cf_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool blocking, bool *done)
{
- int subversion = 0;
- struct SingleRequest *k = &data->req;
+ struct cf_proxy_ctx *ctx = cf->ctx;
CURLcode result;
- struct connectdata *conn = data->conn;
- curl_socket_t tunnelsocket = conn->sock[sockindex];
- struct http_connect_state *s = conn->connect_state;
- struct HTTP *http = data->req.p.http;
- char *linep;
- size_t perline;
-
-#define SELECT_OK 0
-#define SELECT_ERROR 1
-
- if(Curl_connect_complete(conn))
- return CURLE_OK; /* CONNECT is already completed */
-
- conn->bits.proxy_connect_closed = FALSE;
-
- do {
- timediff_t check;
- if(TUNNEL_INIT == s->tunnel_state) {
- /* BEGIN CONNECT PHASE */
- struct dynbuf *req = &s->req;
- char *hostheader = NULL;
- char *host = NULL;
-
- infof(data, "Establish HTTP proxy tunnel to %s:%d",
- hostname, remote_port);
-
- /* This only happens if we've looped here due to authentication
- reasons, and we don't really use the newly cloned URL here
- then. Just free() it. */
- Curl_safefree(data->req.newurl);
-
- /* initialize send-buffer */
- Curl_dyn_init(req, DYN_HTTP_REQUEST);
-
- result = CONNECT_host(data, conn,
- hostname, remote_port, &hostheader, &host);
- if(result)
- return result;
-
- /* Setup the proxy-authorization header, if any */
- result = Curl_http_output_auth(data, conn, "CONNECT", HTTPREQ_GET,
- hostheader, TRUE);
-
- if(!result) {
- const char *httpv =
- (conn->http_proxy.proxytype == CURLPROXY_HTTP_1_0) ? "1.0" : "1.1";
-
- result =
- Curl_dyn_addf(req,
- "CONNECT %s HTTP/%s\r\n"
- "%s" /* Host: */
- "%s", /* Proxy-Authorization */
- hostheader,
- httpv,
- host?host:"",
- data->state.aptr.proxyuserpwd?
- data->state.aptr.proxyuserpwd:"");
-
- if(!result && !Curl_checkProxyheaders(data,
- conn, STRCONST("User-Agent")) &&
- data->set.str[STRING_USERAGENT])
- result = Curl_dyn_addf(req, "User-Agent: %s\r\n",
- data->set.str[STRING_USERAGENT]);
-
- if(!result && !Curl_checkProxyheaders(data, conn,
- STRCONST("Proxy-Connection")))
- result = Curl_dyn_addn(req,
- STRCONST("Proxy-Connection: Keep-Alive\r\n"));
-
- if(!result)
- result = Curl_add_custom_headers(data, TRUE, req);
-
- if(!result)
- /* CRLF terminate the request */
- result = Curl_dyn_addn(req, STRCONST("\r\n"));
-
- if(!result) {
- /* Send the connect request to the proxy */
- result = Curl_buffer_send(req, data, &data->info.request_size, 0,
- sockindex);
- s->headerlines = 0;
- }
- if(result)
- failf(data, "Failed sending CONNECT to proxy");
- }
- free(host);
- free(hostheader);
- if(result)
- return result;
-
- s->tunnel_state = TUNNEL_CONNECT;
- } /* END CONNECT PHASE */
-
- check = Curl_timeleft(data, NULL, TRUE);
- if(check <= 0) {
- failf(data, "Proxy CONNECT aborted due to timeout");
- return CURLE_OPERATION_TIMEDOUT;
- }
-
- if(!Curl_conn_data_pending(conn, sockindex) && !http->sending)
- /* return so we'll be called again polling-style */
- return CURLE_OK;
-
- /* at this point, the tunnel_connecting phase is over. */
-
- if(http->sending == HTTPSEND_REQUEST) {
- if(!s->nsend) {
- size_t fillcount;
- k->upload_fromhere = data->state.ulbuf;
- result = Curl_fillreadbuffer(data, data->set.upload_buffer_size,
- &fillcount);
- if(result)
- return result;
- s->nsend = fillcount;
- }
- if(s->nsend) {
- ssize_t bytes_written;
- /* write to socket (send away data) */
- result = Curl_write(data,
- conn->writesockfd, /* socket to send to */
- k->upload_fromhere, /* buffer pointer */
- s->nsend, /* buffer size */
- &bytes_written); /* actually sent */
-
- if(!result)
- /* send to debug callback! */
- Curl_debug(data, CURLINFO_HEADER_OUT,
- k->upload_fromhere, bytes_written);
-
- s->nsend -= bytes_written;
- k->upload_fromhere += bytes_written;
- return result;
- }
- http->sending = HTTPSEND_NADA;
- /* if nothing left to send, continue */
- }
- { /* READING RESPONSE PHASE */
- int error = SELECT_OK;
-
- while(s->keepon) {
- ssize_t gotbytes;
- char byte;
-
- /* Read one byte at a time to avoid a race condition. Wait at most one
- second before looping to ensure continuous pgrsUpdates. */
- result = Curl_read(data, tunnelsocket, &byte, 1, &gotbytes);
- if(result == CURLE_AGAIN)
- /* socket buffer drained, return */
- return CURLE_OK;
-
- if(Curl_pgrsUpdate(data))
- return CURLE_ABORTED_BY_CALLBACK;
-
- if(result) {
- s->keepon = KEEPON_DONE;
- break;
- }
- else if(gotbytes <= 0) {
- if(data->set.proxyauth && data->state.authproxy.avail &&
- data->state.aptr.proxyuserpwd) {
- /* proxy auth was requested and there was proxy auth available,
- then deem this as "mere" proxy disconnect */
- conn->bits.proxy_connect_closed = TRUE;
- infof(data, "Proxy CONNECT connection closed");
- }
- else {
- error = SELECT_ERROR;
- failf(data, "Proxy CONNECT aborted");
- }
- s->keepon = KEEPON_DONE;
- break;
- }
-
- if(s->keepon == KEEPON_IGNORE) {
- /* This means we are currently ignoring a response-body */
-
- if(s->cl) {
- /* A Content-Length based body: simply count down the counter
- and make sure to break out of the loop when we're done! */
- s->cl--;
- if(s->cl <= 0) {
- s->keepon = KEEPON_DONE;
- s->tunnel_state = TUNNEL_COMPLETE;
- break;
- }
- }
- else {
- /* chunked-encoded body, so we need to do the chunked dance
- properly to know when the end of the body is reached */
- CHUNKcode r;
- CURLcode extra;
- ssize_t tookcareof = 0;
-
- /* now parse the chunked piece of data so that we can
- properly tell when the stream ends */
- r = Curl_httpchunk_read(data, &byte, 1, &tookcareof, &extra);
- if(r == CHUNKE_STOP) {
- /* we're done reading chunks! */
- infof(data, "chunk reading DONE");
- s->keepon = KEEPON_DONE;
- /* we did the full CONNECT treatment, go COMPLETE */
- s->tunnel_state = TUNNEL_COMPLETE;
- }
- }
- continue;
- }
-
- if(Curl_dyn_addn(&s->rcvbuf, &byte, 1)) {
- failf(data, "CONNECT response too large");
- return CURLE_RECV_ERROR;
- }
-
- /* if this is not the end of a header line then continue */
- if(byte != 0x0a)
- continue;
-
- s->headerlines++;
- linep = Curl_dyn_ptr(&s->rcvbuf);
- perline = Curl_dyn_len(&s->rcvbuf); /* amount of bytes in this line */
-
- /* output debug if that is requested */
- Curl_debug(data, CURLINFO_HEADER_IN, linep, perline);
-
- if(!data->set.suppress_connect_headers) {
- /* send the header to the callback */
- int writetype = CLIENTWRITE_HEADER | CLIENTWRITE_CONNECT |
- (data->set.include_header ? CLIENTWRITE_BODY : 0) |
- (s->headerlines == 1 ? CLIENTWRITE_STATUS : 0);
-
- result = Curl_client_write(data, writetype, linep, perline);
- if(result)
- return result;
- }
-
- data->info.header_size += (long)perline;
-
- /* Newlines are CRLF, so the CR is ignored as the line isn't
- really terminated until the LF comes. Treat a following CR
- as end-of-headers as well.*/
-
- if(('\r' == linep[0]) ||
- ('\n' == linep[0])) {
- /* end of response-headers from the proxy */
-
- if((407 == k->httpcode) && !data->state.authproblem) {
- /* If we get a 407 response code with content length
- when we have no auth problem, we must ignore the
- whole response-body */
- s->keepon = KEEPON_IGNORE;
-
- if(s->cl) {
- infof(data, "Ignore %" CURL_FORMAT_CURL_OFF_T
- " bytes of response-body", s->cl);
- }
- else if(s->chunked_encoding) {
- CHUNKcode r;
- CURLcode extra;
-
- infof(data, "Ignore chunked response-body");
-
- /* We set ignorebody true here since the chunked decoder
- function will acknowledge that. Pay attention so that this is
- cleared again when this function returns! */
- k->ignorebody = TRUE;
-
- if(linep[1] == '\n')
- /* this can only be a LF if the letter at index 0 was a CR */
- linep++;
-
- /* now parse the chunked piece of data so that we can properly
- tell when the stream ends */
- r = Curl_httpchunk_read(data, linep + 1, 1, &gotbytes,
- &extra);
- if(r == CHUNKE_STOP) {
- /* we're done reading chunks! */
- infof(data, "chunk reading DONE");
- s->keepon = KEEPON_DONE;
- /* we did the full CONNECT treatment, go to COMPLETE */
- s->tunnel_state = TUNNEL_COMPLETE;
- }
- }
- else {
- /* without content-length or chunked encoding, we
- can't keep the connection alive since the close is
- the end signal so we bail out at once instead */
- s->keepon = KEEPON_DONE;
- }
- }
- else
- s->keepon = KEEPON_DONE;
-
- if(s->keepon == KEEPON_DONE && !s->cl)
- /* we did the full CONNECT treatment, go to COMPLETE */
- s->tunnel_state = TUNNEL_COMPLETE;
-
- DEBUGASSERT(s->keepon == KEEPON_IGNORE || s->keepon == KEEPON_DONE);
- continue;
- }
-
- if((checkprefix("WWW-Authenticate:", linep) &&
- (401 == k->httpcode)) ||
- (checkprefix("Proxy-authenticate:", linep) &&
- (407 == k->httpcode))) {
-
- bool proxy = (k->httpcode == 407) ? TRUE : FALSE;
- char *auth = Curl_copy_header_value(linep);
- if(!auth)
- return CURLE_OUT_OF_MEMORY;
-
- result = Curl_http_input_auth(data, proxy, auth);
-
- free(auth);
-
- if(result)
- return result;
- }
- else if(checkprefix("Content-Length:", linep)) {
- if(k->httpcode/100 == 2) {
- /* A client MUST ignore any Content-Length or Transfer-Encoding
- header fields received in a successful response to CONNECT.
- "Successful" described as: 2xx (Successful). RFC 7231 4.3.6 */
- infof(data, "Ignoring Content-Length in CONNECT %03d response",
- k->httpcode);
- }
- else {
- (void)curlx_strtoofft(linep +
- strlen("Content-Length:"), NULL, 10, &s->cl);
- }
- }
- else if(Curl_compareheader(linep,
- STRCONST("Connection:"), STRCONST("close")))
- s->close_connection = TRUE;
- else if(checkprefix("Transfer-Encoding:", linep)) {
- if(k->httpcode/100 == 2) {
- /* A client MUST ignore any Content-Length or Transfer-Encoding
- header fields received in a successful response to CONNECT.
- "Successful" described as: 2xx (Successful). RFC 7231 4.3.6 */
- infof(data, "Ignoring Transfer-Encoding in "
- "CONNECT %03d response", k->httpcode);
- }
- else if(Curl_compareheader(linep,
- STRCONST("Transfer-Encoding:"),
- STRCONST("chunked"))) {
- infof(data, "CONNECT responded chunked");
- s->chunked_encoding = TRUE;
- /* init our chunky engine */
- Curl_httpchunk_init(data);
- }
- }
- else if(Curl_compareheader(linep,
- STRCONST("Proxy-Connection:"),
- STRCONST("close")))
- s->close_connection = TRUE;
- else if(2 == sscanf(linep, "HTTP/1.%d %d",
- &subversion,
- &k->httpcode)) {
- /* store the HTTP code from the proxy */
- data->info.httpproxycode = k->httpcode;
- }
-
- Curl_dyn_reset(&s->rcvbuf);
- } /* while there's buffer left and loop is requested */
-
- if(Curl_pgrsUpdate(data))
- return CURLE_ABORTED_BY_CALLBACK;
-
- if(error)
- return CURLE_RECV_ERROR;
-
- if(data->info.httpproxycode/100 != 2) {
- /* Deal with the possibly already received authenticate
- headers. 'newurl' is set to a new URL if we must loop. */
- result = Curl_http_auth_act(data);
- if(result)
- return result;
-
- if(conn->bits.close)
- /* the connection has been marked for closure, most likely in the
- Curl_http_auth_act() function and thus we can kill it at once
- below */
- s->close_connection = TRUE;
- }
-
- if(s->close_connection && data->req.newurl) {
- /* Connection closed by server. Don't use it anymore */
- Curl_closesocket(data, conn, conn->sock[sockindex]);
- conn->sock[sockindex] = CURL_SOCKET_BAD;
- break;
- }
- } /* END READING RESPONSE PHASE */
-
- /* If we are supposed to continue and request a new URL, which basically
- * means the HTTP authentication is still going on so if the tunnel
- * is complete we start over in INIT state */
- if(data->req.newurl && (TUNNEL_COMPLETE == s->tunnel_state)) {
- connect_init(data, TRUE); /* reinit */
- }
-
- } while(data->req.newurl);
- if(data->info.httpproxycode/100 != 2) {
- if(s->close_connection && data->req.newurl) {
- conn->bits.proxy_connect_closed = TRUE;
- infof(data, "Connect me again please");
- Curl_connect_done(data);
- }
- else {
- free(data->req.newurl);
- data->req.newurl = NULL;
- /* failure, close this connection to avoid re-use */
- streamclose(conn, "proxy CONNECT failure");
- }
-
- /* to back to init state */
- s->tunnel_state = TUNNEL_INIT;
-
- if(conn->bits.proxy_connect_closed)
- /* this is not an error, just part of the connection negotiation */
- return CURLE_OK;
- Curl_dyn_free(&s->rcvbuf);
- failf(data, "Received HTTP code %d from proxy after CONNECT",
- data->req.httpcode);
- return CURLE_RECV_ERROR;
+ if(cf->connected) {
+ *done = TRUE;
+ return CURLE_OK;
}
- s->tunnel_state = TUNNEL_COMPLETE;
-
- /* If a proxy-authorization header was used for the proxy, then we should
- make sure that it isn't accidentally used for the document request
- after we've connected. So let's free and clear it here. */
- Curl_safefree(data->state.aptr.proxyuserpwd);
- data->state.aptr.proxyuserpwd = NULL;
-
- data->state.authproxy.done = TRUE;
- data->state.authproxy.multipass = FALSE;
-
- infof(data, "Proxy replied %d to CONNECT request",
- data->info.httpproxycode);
- data->req.ignorebody = FALSE; /* put it (back) to non-ignore state */
- conn->bits.rewindaftersend = FALSE; /* make sure this isn't set for the
- document request */
- Curl_dyn_free(&s->rcvbuf);
- return CURLE_OK;
-}
-#else
-/* The Hyper version of CONNECT */
-static CURLcode CONNECT(struct Curl_easy *data,
- int sockindex,
- const char *hostname,
- int remote_port)
-{
- struct connectdata *conn = data->conn;
- struct hyptransfer *h = &data->hyp;
- curl_socket_t tunnelsocket = conn->sock[sockindex];
- struct http_connect_state *s = conn->connect_state;
- CURLcode result = CURLE_OUT_OF_MEMORY;
- hyper_io *io = NULL;
- hyper_request *req = NULL;
- hyper_headers *headers = NULL;
- hyper_clientconn_options *options = NULL;
- hyper_task *handshake = NULL;
- hyper_task *task = NULL; /* for the handshake */
- hyper_task *sendtask = NULL; /* for the send */
- hyper_clientconn *client = NULL;
- hyper_error *hypererr = NULL;
- char *hostheader = NULL; /* for CONNECT */
- char *host = NULL; /* Host: */
-
- if(Curl_connect_complete(conn))
- return CURLE_OK; /* CONNECT is already completed */
-
- conn->bits.proxy_connect_closed = FALSE;
-
- do {
- switch(s->tunnel_state) {
- case TUNNEL_INIT:
- /* BEGIN CONNECT PHASE */
- io = hyper_io_new();
- if(!io) {
- failf(data, "Couldn't create hyper IO");
- result = CURLE_OUT_OF_MEMORY;
- goto error;
- }
- /* tell Hyper how to read/write network data */
- hyper_io_set_userdata(io, data);
- hyper_io_set_read(io, Curl_hyper_recv);
- hyper_io_set_write(io, Curl_hyper_send);
- conn->sockfd = tunnelsocket;
-
- data->state.hconnect = TRUE;
-
- /* create an executor to poll futures */
- if(!h->exec) {
- h->exec = hyper_executor_new();
- if(!h->exec) {
- failf(data, "Couldn't create hyper executor");
- result = CURLE_OUT_OF_MEMORY;
- goto error;
- }
- }
-
- options = hyper_clientconn_options_new();
- hyper_clientconn_options_set_preserve_header_case(options, 1);
- hyper_clientconn_options_set_preserve_header_order(options, 1);
-
- if(!options) {
- failf(data, "Couldn't create hyper client options");
- result = CURLE_OUT_OF_MEMORY;
- goto error;
- }
-
- hyper_clientconn_options_exec(options, h->exec);
-
- /* "Both the `io` and the `options` are consumed in this function
- call" */
- handshake = hyper_clientconn_handshake(io, options);
- if(!handshake) {
- failf(data, "Couldn't create hyper client handshake");
- result = CURLE_OUT_OF_MEMORY;
- goto error;
- }
- io = NULL;
- options = NULL;
-
- if(HYPERE_OK != hyper_executor_push(h->exec, handshake)) {
- failf(data, "Couldn't hyper_executor_push the handshake");
- result = CURLE_OUT_OF_MEMORY;
- goto error;
- }
- handshake = NULL; /* ownership passed on */
-
- task = hyper_executor_poll(h->exec);
- if(!task) {
- failf(data, "Couldn't hyper_executor_poll the handshake");
- result = CURLE_OUT_OF_MEMORY;
- goto error;
- }
-
- client = hyper_task_value(task);
- hyper_task_free(task);
- req = hyper_request_new();
- if(!req) {
- failf(data, "Couldn't hyper_request_new");
- result = CURLE_OUT_OF_MEMORY;
- goto error;
- }
- if(hyper_request_set_method(req, (uint8_t *)"CONNECT",
- strlen("CONNECT"))) {
- failf(data, "error setting method");
- result = CURLE_OUT_OF_MEMORY;
- goto error;
- }
-
- infof(data, "Establish HTTP proxy tunnel to %s:%d",
- hostname, remote_port);
-
- /* This only happens if we've looped here due to authentication
- reasons, and we don't really use the newly cloned URL here
- then. Just free() it. */
- Curl_safefree(data->req.newurl);
-
- result = CONNECT_host(data, conn, hostname, remote_port,
- &hostheader, &host);
- if(result)
- goto error;
-
- if(hyper_request_set_uri(req, (uint8_t *)hostheader,
- strlen(hostheader))) {
- failf(data, "error setting path");
- result = CURLE_OUT_OF_MEMORY;
- goto error;
- }
- if(data->set.verbose) {
- char *se = aprintf("CONNECT %s HTTP/1.1\r\n", hostheader);
- if(!se) {
- result = CURLE_OUT_OF_MEMORY;
- goto error;
- }
- Curl_debug(data, CURLINFO_HEADER_OUT, se, strlen(se));
- free(se);
- }
- /* Setup the proxy-authorization header, if any */
- result = Curl_http_output_auth(data, conn, "CONNECT", HTTPREQ_GET,
- hostheader, TRUE);
+ CURL_TRC_CF(data, cf, "connect");
+connect_sub:
+ result = cf->next->cft->do_connect(cf->next, data, blocking, done);
+ if(result || !*done)
+ return result;
+
+ *done = FALSE;
+ if(!ctx->cf_protocol) {
+ struct Curl_cfilter *cf_protocol = NULL;
+ int alpn = Curl_conn_cf_is_ssl(cf->next)?
+ cf->conn->proxy_alpn : CURL_HTTP_VERSION_1_1;
+
+ /* First time call after the subchain connected */
+ switch(alpn) {
+ case CURL_HTTP_VERSION_NONE:
+ case CURL_HTTP_VERSION_1_0:
+ case CURL_HTTP_VERSION_1_1:
+ CURL_TRC_CF(data, cf, "installing subfilter for HTTP/1.1");
+ infof(data, "CONNECT tunnel: HTTP/1.%d negotiated",
+ (alpn == CURL_HTTP_VERSION_1_0)? 0 : 1);
+ result = Curl_cf_h1_proxy_insert_after(cf, data);
if(result)
- goto error;
- Curl_safefree(hostheader);
-
- /* default is 1.1 */
- if((conn->http_proxy.proxytype == CURLPROXY_HTTP_1_0) &&
- (HYPERE_OK != hyper_request_set_version(req,
- HYPER_HTTP_VERSION_1_0))) {
- failf(data, "error setting HTTP version");
- result = CURLE_OUT_OF_MEMORY;
- goto error;
- }
-
- headers = hyper_request_headers(req);
- if(!headers) {
- failf(data, "hyper_request_headers");
- result = CURLE_OUT_OF_MEMORY;
- goto error;
- }
- if(host) {
- result = Curl_hyper_header(data, headers, host);
- if(result)
- goto error;
- Curl_safefree(host);
- }
-
- if(data->state.aptr.proxyuserpwd) {
- result = Curl_hyper_header(data, headers,
- data->state.aptr.proxyuserpwd);
- if(result)
- goto error;
- }
-
- if(!Curl_checkProxyheaders(data, conn, STRCONST("User-Agent")) &&
- data->set.str[STRING_USERAGENT]) {
- struct dynbuf ua;
- Curl_dyn_init(&ua, DYN_HTTP_REQUEST);
- result = Curl_dyn_addf(&ua, "User-Agent: %s\r\n",
- data->set.str[STRING_USERAGENT]);
- if(result)
- goto error;
- result = Curl_hyper_header(data, headers, Curl_dyn_ptr(&ua));
- if(result)
- goto error;
- Curl_dyn_free(&ua);
- }
-
- if(!Curl_checkProxyheaders(data, conn, STRCONST("Proxy-Connection"))) {
- result = Curl_hyper_header(data, headers,
- "Proxy-Connection: Keep-Alive");
- if(result)
- goto error;
- }
-
- result = Curl_add_custom_headers(data, TRUE, headers);
- if(result)
- goto error;
-
- sendtask = hyper_clientconn_send(client, req);
- if(!sendtask) {
- failf(data, "hyper_clientconn_send");
- result = CURLE_OUT_OF_MEMORY;
- goto error;
- }
-
- if(HYPERE_OK != hyper_executor_push(h->exec, sendtask)) {
- failf(data, "Couldn't hyper_executor_push the send");
- result = CURLE_OUT_OF_MEMORY;
- goto error;
- }
-
- hyper_clientconn_free(client);
-
- do {
- task = hyper_executor_poll(h->exec);
- if(task) {
- bool error = hyper_task_type(task) == HYPER_TASK_ERROR;
- if(error)
- hypererr = hyper_task_value(task);
- hyper_task_free(task);
- if(error) {
- /* this could probably use a better error code? */
- result = CURLE_OUT_OF_MEMORY;
- goto error;
- }
- }
- } while(task);
- s->tunnel_state = TUNNEL_CONNECT;
- /* FALLTHROUGH */
- case TUNNEL_CONNECT: {
- int didwhat;
- bool done = FALSE;
- result = Curl_hyper_stream(data, conn, &didwhat, &done,
- CURL_CSELECT_IN | CURL_CSELECT_OUT);
- if(result)
- goto error;
- if(!done)
- break;
- s->tunnel_state = TUNNEL_COMPLETE;
- if(h->exec) {
- hyper_executor_free(h->exec);
- h->exec = NULL;
- }
- if(h->read_waker) {
- hyper_waker_free(h->read_waker);
- h->read_waker = NULL;
- }
- if(h->write_waker) {
- hyper_waker_free(h->write_waker);
- h->write_waker = NULL;
- }
- }
- break;
-
- default:
+ goto out;
+ cf_protocol = cf->next;
break;
- }
-
- if(conn->bits.close && data->req.newurl) {
- /* Connection closed by server. Don't use it anymore */
- Curl_closesocket(data, conn, conn->sock[sockindex]);
- conn->sock[sockindex] = CURL_SOCKET_BAD;
+#ifdef USE_NGHTTP2
+ case CURL_HTTP_VERSION_2:
+ CURL_TRC_CF(data, cf, "installing subfilter for HTTP/2");
+ infof(data, "CONNECT tunnel: HTTP/2 negotiated");
+ result = Curl_cf_h2_proxy_insert_after(cf, data);
+ if(result)
+ goto out;
+ cf_protocol = cf->next;
break;
+#endif
+ default:
+ infof(data, "CONNECT tunnel: unsupported ALPN(%d) negotiated", alpn);
+ result = CURLE_COULDNT_CONNECT;
+ goto out;
}
- /* If we are supposed to continue and request a new URL, which basically
- * means the HTTP authentication is still going on so if the tunnel
- * is complete we start over in INIT state */
- if(data->req.newurl && (TUNNEL_COMPLETE == s->tunnel_state)) {
- infof(data, "CONNECT request done, loop to make another");
- connect_init(data, TRUE); /* reinit */
- }
- } while(data->req.newurl);
-
- result = CURLE_OK;
- if(s->tunnel_state == TUNNEL_COMPLETE) {
- if(data->info.httpproxycode/100 != 2) {
- if(conn->bits.close && data->req.newurl) {
- conn->bits.proxy_connect_closed = TRUE;
- infof(data, "Connect me again please");
- Curl_connect_done(data);
- }
- else {
- free(data->req.newurl);
- data->req.newurl = NULL;
- /* failure, close this connection to avoid re-use */
- streamclose(conn, "proxy CONNECT failure");
- Curl_closesocket(data, conn, conn->sock[sockindex]);
- conn->sock[sockindex] = CURL_SOCKET_BAD;
- }
-
- /* to back to init state */
- s->tunnel_state = TUNNEL_INIT;
-
- if(!conn->bits.proxy_connect_closed) {
- failf(data, "Received HTTP code %d from proxy after CONNECT",
- data->req.httpcode);
- result = CURLE_RECV_ERROR;
- }
- }
+ ctx->cf_protocol = cf_protocol;
+ /* after we installed the filter "below" us, we call connect
+ * on out sub-chain again.
+ */
+ goto connect_sub;
+ }
+ else {
+ /* subchain connected and we had already installed the protocol filter.
+ * This means the protocol tunnel is established, we are done.
+ */
+ DEBUGASSERT(ctx->cf_protocol);
+ result = CURLE_OK;
}
- error:
- free(host);
- free(hostheader);
- if(io)
- hyper_io_free(io);
-
- if(options)
- hyper_clientconn_options_free(options);
-
- if(handshake)
- hyper_task_free(handshake);
- if(hypererr) {
- uint8_t errbuf[256];
- size_t errlen = hyper_error_print(hypererr, errbuf, sizeof(errbuf));
- failf(data, "Hyper: %.*s", (int)errlen, errbuf);
- hyper_error_free(hypererr);
+out:
+ if(!result) {
+ cf->connected = TRUE;
+ *done = TRUE;
}
return result;
}
-#endif
-void Curl_connect_free(struct Curl_easy *data)
+void Curl_cf_http_proxy_get_host(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ const char **phost,
+ const char **pdisplay_host,
+ int *pport)
{
- struct connectdata *conn = data->conn;
- struct http_connect_state *s = conn->connect_state;
- if(s) {
- free(s);
- conn->connect_state = NULL;
+ (void)data;
+ if(!cf->connected) {
+ *phost = cf->conn->http_proxy.host.name;
+ *pdisplay_host = cf->conn->http_proxy.host.dispname;
+ *pport = (int)cf->conn->http_proxy.port;
+ }
+ else {
+ cf->next->cft->get_host(cf->next, data, phost, pdisplay_host, pport);
}
}
-/*
- * Curl_proxyCONNECT() requires that we're connected to a HTTP proxy. This
- * function will issue the necessary commands to get a seamless tunnel through
- * this proxy. After that, the socket can be used just as a normal socket.
- */
-
-CURLcode Curl_proxyCONNECT(struct Curl_easy *data,
- int sockindex,
- const char *hostname,
- int remote_port)
+static void http_proxy_cf_destroy(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
- CURLcode result;
- struct connectdata *conn = data->conn;
- if(!conn->connect_state) {
- result = connect_init(data, FALSE);
- if(result)
- return result;
- }
- result = CONNECT(data, sockindex, hostname, remote_port);
+ struct cf_proxy_ctx *ctx = cf->ctx;
- if(result || Curl_connect_complete(conn))
- Curl_connect_done(data);
+ (void)data;
+ CURL_TRC_CF(data, cf, "destroy");
+ free(ctx);
+}
- return result;
+static void http_proxy_cf_close(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_proxy_ctx *ctx = cf->ctx;
+
+ CURL_TRC_CF(data, cf, "close");
+ cf->connected = FALSE;
+ if(ctx->cf_protocol) {
+ struct Curl_cfilter *f;
+ /* if someone already removed it, we assume he also
+ * took care of destroying it. */
+ for(f = cf->next; f; f = f->next) {
+ if(f == ctx->cf_protocol) {
+ /* still in our sub-chain */
+ Curl_conn_cf_discard_sub(cf, ctx->cf_protocol, data, FALSE);
+ break;
+ }
+ }
+ ctx->cf_protocol = NULL;
+ }
+ if(cf->next)
+ cf->next->cft->do_close(cf->next, data);
}
-#else
-void Curl_connect_free(struct Curl_easy *data)
+
+struct Curl_cftype Curl_cft_http_proxy = {
+ "HTTP-PROXY",
+ CF_TYPE_IP_CONNECT,
+ 0,
+ http_proxy_cf_destroy,
+ http_proxy_cf_connect,
+ http_proxy_cf_close,
+ Curl_cf_http_proxy_get_host,
+ Curl_cf_def_adjust_pollset,
+ Curl_cf_def_data_pending,
+ Curl_cf_def_send,
+ Curl_cf_def_recv,
+ Curl_cf_def_cntrl,
+ Curl_cf_def_conn_is_alive,
+ Curl_cf_def_conn_keep_alive,
+ Curl_cf_def_query,
+};
+
+CURLcode Curl_cf_http_proxy_insert_after(struct Curl_cfilter *cf_at,
+ struct Curl_easy *data)
{
+ struct Curl_cfilter *cf;
+ struct cf_proxy_ctx *ctx = NULL;
+ CURLcode result;
+
(void)data;
+ ctx = calloc(1, sizeof(*ctx));
+ if(!ctx) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
+ }
+ result = Curl_cf_create(&cf, &Curl_cft_http_proxy, ctx);
+ if(result)
+ goto out;
+ ctx = NULL;
+ Curl_conn_cf_insert_after(cf_at, cf);
+
+out:
+ free(ctx);
+ return result;
}
-#endif /* CURL_DISABLE_PROXY */
+#endif /* ! CURL_DISABLE_HTTP && !CURL_DISABLE_PROXY */
diff --git a/lib/http_proxy.h b/lib/http_proxy.h
index 1e650ee57..2b5f7ae70 100644
--- a/lib/http_proxy.h
+++ b/lib/http_proxy.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -25,57 +25,37 @@
***************************************************************************/
#include "curl_setup.h"
-#include "urldata.h"
#if !defined(CURL_DISABLE_PROXY) && !defined(CURL_DISABLE_HTTP)
-/* ftp can use this as well */
-CURLcode Curl_proxyCONNECT(struct Curl_easy *data,
- int tunnelsocket,
- const char *hostname, int remote_port);
+
+#include "urldata.h"
+
+CURLcode Curl_http_proxy_get_destination(struct Curl_cfilter *cf,
+ const char **phostname,
+ int *pport, bool *pipv6_ip);
+
+CURLcode Curl_http_proxy_create_CONNECT(struct httpreq **preq,
+ struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int http_version_major);
/* Default proxy timeout in milliseconds */
#define PROXY_TIMEOUT (3600*1000)
-CURLcode Curl_proxy_connect(struct Curl_easy *data, int sockindex);
+void Curl_cf_http_proxy_get_host(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ const char **phost,
+ const char **pdisplay_host,
+ int *pport);
-bool Curl_connect_complete(struct connectdata *conn);
-bool Curl_connect_ongoing(struct connectdata *conn);
-int Curl_connect_getsock(struct connectdata *conn);
-void Curl_connect_done(struct Curl_easy *data);
+CURLcode Curl_cf_http_proxy_insert_after(struct Curl_cfilter *cf_at,
+ struct Curl_easy *data);
-#else
-#define Curl_proxyCONNECT(x,y,z,w) CURLE_NOT_BUILT_IN
-#define Curl_proxy_connect(x,y) CURLE_OK
-#define Curl_connect_complete(x) CURLE_OK
-#define Curl_connect_ongoing(x) FALSE
-#define Curl_connect_getsock(x) 0
-#define Curl_connect_done(x)
-#endif
+extern struct Curl_cftype Curl_cft_http_proxy;
-void Curl_connect_free(struct Curl_easy *data);
+#endif /* !CURL_DISABLE_PROXY && !CURL_DISABLE_HTTP */
-/* struct for HTTP CONNECT state data */
-struct http_connect_state {
- struct HTTP http_proxy;
- struct HTTP *prot_save;
- struct dynbuf rcvbuf;
- struct dynbuf req;
- size_t nsend;
- size_t headerlines;
- enum keeponval {
- KEEPON_DONE,
- KEEPON_CONNECT,
- KEEPON_IGNORE
- } keepon;
- curl_off_t cl; /* size of content to read and ignore */
- enum {
- TUNNEL_INIT, /* init/default/no tunnel state */
- TUNNEL_CONNECT, /* CONNECT has been sent off */
- TUNNEL_COMPLETE, /* CONNECT response received completely */
- TUNNEL_EXIT
- } tunnel_state;
- BIT(chunked_encoding);
- BIT(close_connection);
-};
+#define IS_HTTPS_PROXY(t) (((t) == CURLPROXY_HTTPS) || \
+ ((t) == CURLPROXY_HTTPS2))
#endif /* HEADER_CURL_HTTP_PROXY_H */
diff --git a/lib/idn.c b/lib/idn.c
new file mode 100644
index 000000000..81a177f8c
--- /dev/null
+++ b/lib/idn.c
@@ -0,0 +1,287 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ ***************************************************************************/
+
+ /*
+ * IDN conversions
+ */
+
+#include "curl_setup.h"
+#include "urldata.h"
+#include "idn.h"
+#include "sendf.h"
+#include "curl_multibyte.h"
+#include "warnless.h"
+
+#ifdef USE_LIBIDN2
+#include <idn2.h>
+
+#if defined(_WIN32) && defined(UNICODE)
+#define IDN2_LOOKUP(name, host, flags) \
+ idn2_lookup_u8((const uint8_t *)name, (uint8_t **)host, flags)
+#else
+#define IDN2_LOOKUP(name, host, flags) \
+ idn2_lookup_ul((const char *)name, (char **)host, flags)
+#endif
+#endif /* USE_LIBIDN2 */
+
+/* The last 3 #include files should be in this order */
+#include "curl_printf.h"
+#include "curl_memory.h"
+#include "memdebug.h"
+
+#ifdef USE_WIN32_IDN
+/* using Windows kernel32 and normaliz libraries. */
+
+#if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x600
+WINBASEAPI int WINAPI IdnToAscii(DWORD dwFlags,
+ const WCHAR *lpUnicodeCharStr,
+ int cchUnicodeChar,
+ WCHAR *lpASCIICharStr,
+ int cchASCIIChar);
+WINBASEAPI int WINAPI IdnToUnicode(DWORD dwFlags,
+ const WCHAR *lpASCIICharStr,
+ int cchASCIIChar,
+ WCHAR *lpUnicodeCharStr,
+ int cchUnicodeChar);
+#endif
+
+#define IDN_MAX_LENGTH 255
+
+static CURLcode win32_idn_to_ascii(const char *in, char **out)
+{
+ wchar_t *in_w = curlx_convert_UTF8_to_wchar(in);
+ *out = NULL;
+ if(in_w) {
+ wchar_t punycode[IDN_MAX_LENGTH];
+ int chars = IdnToAscii(0, in_w, (int)(wcslen(in_w) + 1), punycode,
+ IDN_MAX_LENGTH);
+ curlx_unicodefree(in_w);
+ if(chars) {
+ char *mstr = curlx_convert_wchar_to_UTF8(punycode);
+ if(mstr) {
+ *out = strdup(mstr);
+ curlx_unicodefree(mstr);
+ if(!*out)
+ return CURLE_OUT_OF_MEMORY;
+ }
+ else
+ return CURLE_OUT_OF_MEMORY;
+ }
+ else
+ return CURLE_URL_MALFORMAT;
+ }
+ else
+ return CURLE_URL_MALFORMAT;
+
+ return CURLE_OK;
+}
+
+static CURLcode win32_ascii_to_idn(const char *in, char **output)
+{
+ char *out = NULL;
+
+ wchar_t *in_w = curlx_convert_UTF8_to_wchar(in);
+ if(in_w) {
+ WCHAR idn[IDN_MAX_LENGTH]; /* stores a UTF-16 string */
+ int chars = IdnToUnicode(0, in_w, (int)(wcslen(in_w) + 1), idn,
+ IDN_MAX_LENGTH);
+ if(chars) {
+ /* 'chars' is "the number of characters retrieved" */
+ char *mstr = curlx_convert_wchar_to_UTF8(idn);
+ if(mstr) {
+ out = strdup(mstr);
+ curlx_unicodefree(mstr);
+ if(!out)
+ return CURLE_OUT_OF_MEMORY;
+ }
+ }
+ else
+ return CURLE_URL_MALFORMAT;
+ }
+ else
+ return CURLE_URL_MALFORMAT;
+ *output = out;
+ return CURLE_OK;
+}
+
+#endif /* USE_WIN32_IDN */
+
+/*
+ * Helpers for IDNA conversions.
+ */
+bool Curl_is_ASCII_name(const char *hostname)
+{
+ /* get an UNSIGNED local version of the pointer */
+ const unsigned char *ch = (const unsigned char *)hostname;
+
+ if(!hostname) /* bad input, consider it ASCII! */
+ return TRUE;
+
+ while(*ch) {
+ if(*ch++ & 0x80)
+ return FALSE;
+ }
+ return TRUE;
+}
+
+#ifdef USE_IDN
+/*
+ * Curl_idn_decode() returns an allocated IDN decoded string if it was
+ * possible. NULL on error.
+ *
+ * CURLE_URL_MALFORMAT - the host name could not be converted
+ * CURLE_OUT_OF_MEMORY - memory problem
+ *
+ */
+static CURLcode idn_decode(const char *input, char **output)
+{
+ char *decoded = NULL;
+ CURLcode result = CURLE_OK;
+#ifdef USE_LIBIDN2
+ if(idn2_check_version(IDN2_VERSION)) {
+ int flags = IDN2_NFC_INPUT
+#if IDN2_VERSION_NUMBER >= 0x00140000
+ /* IDN2_NFC_INPUT: Normalize input string using normalization form C.
+ IDN2_NONTRANSITIONAL: Perform Unicode TR46 non-transitional
+ processing. */
+ | IDN2_NONTRANSITIONAL
+#endif
+ ;
+ int rc = IDN2_LOOKUP(input, &decoded, flags);
+ if(rc != IDN2_OK)
+ /* fallback to TR46 Transitional mode for better IDNA2003
+ compatibility */
+ rc = IDN2_LOOKUP(input, &decoded, IDN2_TRANSITIONAL);
+ if(rc != IDN2_OK)
+ result = CURLE_URL_MALFORMAT;
+ }
+ else
+ /* a too old libidn2 version */
+ result = CURLE_NOT_BUILT_IN;
+#elif defined(USE_WIN32_IDN)
+ result = win32_idn_to_ascii(input, &decoded);
+#endif
+ if(!result)
+ *output = decoded;
+ return result;
+}
+
+static CURLcode idn_encode(const char *puny, char **output)
+{
+ char *enc = NULL;
+#ifdef USE_LIBIDN2
+ int rc = idn2_to_unicode_8z8z(puny, &enc, 0);
+ if(rc != IDNA_SUCCESS)
+ return rc == IDNA_MALLOC_ERROR ? CURLE_OUT_OF_MEMORY : CURLE_URL_MALFORMAT;
+#elif defined(USE_WIN32_IDN)
+ CURLcode result = win32_ascii_to_idn(puny, &enc);
+ if(result)
+ return result;
+#endif
+ *output = enc;
+ return CURLE_OK;
+}
+
+CURLcode Curl_idn_decode(const char *input, char **output)
+{
+ char *d = NULL;
+ CURLcode result = idn_decode(input, &d);
+#ifdef USE_LIBIDN2
+ if(!result) {
+ char *c = strdup(d);
+ idn2_free(d);
+ if(c)
+ d = c;
+ else
+ result = CURLE_OUT_OF_MEMORY;
+ }
+#endif
+ if(!result)
+ *output = d;
+ return result;
+}
+
+CURLcode Curl_idn_encode(const char *puny, char **output)
+{
+ char *d = NULL;
+ CURLcode result = idn_encode(puny, &d);
+#ifdef USE_LIBIDN2
+ if(!result) {
+ char *c = strdup(d);
+ idn2_free(d);
+ if(c)
+ d = c;
+ else
+ result = CURLE_OUT_OF_MEMORY;
+ }
+#endif
+ if(!result)
+ *output = d;
+ return result;
+}
+
+/*
+ * Frees data allocated by idnconvert_hostname()
+ */
+void Curl_free_idnconverted_hostname(struct hostname *host)
+{
+ if(host->encalloc) {
+ /* must be freed with idn2_free() if allocated by libidn */
+ Curl_idn_free(host->encalloc);
+ host->encalloc = NULL;
+ }
+}
+
+#endif /* USE_IDN */
+
+/*
+ * Perform any necessary IDN conversion of hostname
+ */
+CURLcode Curl_idnconvert_hostname(struct hostname *host)
+{
+ /* set the name we use to display the host name */
+ host->dispname = host->name;
+
+#ifdef USE_IDN
+ /* Check name for non-ASCII and convert hostname if we can */
+ if(!Curl_is_ASCII_name(host->name)) {
+ char *decoded;
+ CURLcode result = idn_decode(host->name, &decoded);
+ if(!result) {
+ if(!*decoded) {
+ /* zero length is a bad host name */
+ Curl_idn_free(decoded);
+ return CURLE_URL_MALFORMAT;
+ }
+ /* successful */
+ host->encalloc = decoded;
+ /* change the name pointer to point to the encoded hostname */
+ host->name = host->encalloc;
+ }
+ else
+ return result;
+ }
+#endif
+ return CURLE_OK;
+}
diff --git a/tests/libtest/sethostname.h b/lib/idn.h
index a0bbc14d5..74bbcaf49 100644
--- a/tests/libtest/sethostname.h
+++ b/lib/idn.h
@@ -1,3 +1,5 @@
+#ifndef HEADER_CURL_IDN_H
+#define HEADER_CURL_IDN_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
@@ -5,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -22,21 +24,21 @@
*
***************************************************************************/
-#ifdef CURL_STATICLIB
-# define LIBHOSTNAME_EXTERN
-#elif defined(WIN32)
-# define LIBHOSTNAME_EXTERN __declspec(dllexport)
-#elif defined(CURL_HIDDEN_SYMBOLS)
-# define LIBHOSTNAME_EXTERN CURL_EXTERN_SYMBOL
+bool Curl_is_ASCII_name(const char *hostname);
+CURLcode Curl_idnconvert_hostname(struct hostname *host);
+#if defined(USE_LIBIDN2) || defined(USE_WIN32_IDN)
+#define USE_IDN
+void Curl_free_idnconverted_hostname(struct hostname *host);
+CURLcode Curl_idn_decode(const char *input, char **output);
+CURLcode Curl_idn_encode(const char *input, char **output);
+#ifdef USE_LIBIDN2
+#define Curl_idn_free(x) idn2_free(x)
#else
-# define LIBHOSTNAME_EXTERN
+#define Curl_idn_free(x) free(x)
#endif
-#ifdef USE_WINSOCK
-# define FUNCALLCONV __stdcall
#else
-# define FUNCALLCONV
+#define Curl_free_idnconverted_hostname(x)
+#define Curl_idn_decode(x) NULL
#endif
-
-LIBHOSTNAME_EXTERN int FUNCALLCONV
- gethostname(char *name, GETHOSTNAME_TYPE_ARG2 namelen);
+#endif /* HEADER_CURL_IDN_H */
diff --git a/lib/idn_win32.c b/lib/idn_win32.c
deleted file mode 100644
index 2433d927e..000000000
--- a/lib/idn_win32.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed 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
- *
- ***************************************************************************/
-
- /*
- * IDN conversions using Windows kernel32 and normaliz libraries.
- */
-
-#include "curl_setup.h"
-
-#ifdef USE_WIN32_IDN
-
-#include "curl_multibyte.h"
-#include "curl_memory.h"
-#include "warnless.h"
-
- /* The last #include file should be: */
-#include "memdebug.h"
-
-#ifdef WANT_IDN_PROTOTYPES
-# if defined(_SAL_VERSION)
-WINNORMALIZEAPI int WINAPI
-IdnToAscii(_In_ DWORD dwFlags,
- _In_reads_(cchUnicodeChar) LPCWSTR lpUnicodeCharStr,
- _In_ int cchUnicodeChar,
- _Out_writes_opt_(cchASCIIChar) LPWSTR lpASCIICharStr,
- _In_ int cchASCIIChar);
-WINNORMALIZEAPI int WINAPI
-IdnToUnicode(_In_ DWORD dwFlags,
- _In_reads_(cchASCIIChar) LPCWSTR lpASCIICharStr,
- _In_ int cchASCIIChar,
- _Out_writes_opt_(cchUnicodeChar) LPWSTR lpUnicodeCharStr,
- _In_ int cchUnicodeChar);
-# else
-WINBASEAPI int WINAPI IdnToAscii(DWORD dwFlags,
- const WCHAR *lpUnicodeCharStr,
- int cchUnicodeChar,
- WCHAR *lpASCIICharStr,
- int cchASCIIChar);
-WINBASEAPI int WINAPI IdnToUnicode(DWORD dwFlags,
- const WCHAR *lpASCIICharStr,
- int cchASCIIChar,
- WCHAR *lpUnicodeCharStr,
- int cchUnicodeChar);
-# endif
-#endif
-
-#define IDN_MAX_LENGTH 255
-
-bool Curl_win32_idn_to_ascii(const char *in, char **out);
-bool Curl_win32_ascii_to_idn(const char *in, char **out);
-
-bool Curl_win32_idn_to_ascii(const char *in, char **out)
-{
- bool success = FALSE;
-
- wchar_t *in_w = curlx_convert_UTF8_to_wchar(in);
- if(in_w) {
- wchar_t punycode[IDN_MAX_LENGTH];
- int chars = IdnToAscii(0, in_w, -1, punycode, IDN_MAX_LENGTH);
- curlx_unicodefree(in_w);
- if(chars) {
- char *mstr = curlx_convert_wchar_to_UTF8(punycode);
- if(mstr) {
- *out = strdup(mstr);
- curlx_unicodefree(mstr);
- if(*out)
- success = TRUE;
- }
- }
- }
-
- return success;
-}
-
-bool Curl_win32_ascii_to_idn(const char *in, char **out)
-{
- bool success = FALSE;
-
- wchar_t *in_w = curlx_convert_UTF8_to_wchar(in);
- if(in_w) {
- size_t in_len = wcslen(in_w) + 1;
- wchar_t unicode[IDN_MAX_LENGTH];
- int chars = IdnToUnicode(0, in_w, curlx_uztosi(in_len),
- unicode, IDN_MAX_LENGTH);
- curlx_unicodefree(in_w);
- if(chars) {
- char *mstr = curlx_convert_wchar_to_UTF8(unicode);
- if(mstr) {
- *out = strdup(mstr);
- curlx_unicodefree(mstr);
- if(*out)
- success = TRUE;
- }
- }
- }
-
- return success;
-}
-
-#endif /* USE_WIN32_IDN */
diff --git a/lib/if2ip.c b/lib/if2ip.c
index c29194878..5249f6cc7 100644
--- a/lib/if2ip.c
+++ b/lib/if2ip.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -92,6 +92,8 @@ unsigned int Curl_ipv6_scope(const struct sockaddr *sa)
}
#endif
+#ifndef CURL_DISABLE_BINDLOCAL
+
#if defined(HAVE_GETIFADDRS)
if2ip_result_t Curl_if2ip(int af,
@@ -254,3 +256,5 @@ if2ip_result_t Curl_if2ip(int af,
}
#endif
+
+#endif /* CURL_DISABLE_BINDLOCAL */
diff --git a/lib/if2ip.h b/lib/if2ip.h
index 5d15459e9..1f973505c 100644
--- a/lib/if2ip.h
+++ b/lib/if2ip.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2020, 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/imap.c b/lib/imap.c
index ffa08bf7a..47cff4897 100644
--- a/lib/imap.c
+++ b/lib/imap.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -45,9 +45,6 @@
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
-#ifdef HAVE_UTSNAME_H
-#include <sys/utsname.h>
-#endif
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
@@ -56,11 +53,6 @@
#include <inet.h>
#endif
-#if (defined(NETWARE) && defined(__NOVELL_LIBC__))
-#undef in_addr_t
-#define in_addr_t unsigned long
-#endif
-
#include <curl/curl.h>
#include "urldata.h"
#include "sendf.h"
@@ -75,11 +67,11 @@
#include "strtoofft.h"
#include "strcase.h"
#include "vtls/vtls.h"
+#include "cfilters.h"
#include "connect.h"
#include "select.h"
#include "multiif.h"
#include "url.h"
-#include "strcase.h"
#include "bufref.h"
#include "curl_sasl.h"
#include "warnless.h"
@@ -390,11 +382,11 @@ static CURLcode imap_get_message(struct Curl_easy *data, struct bufref *out)
/***********************************************************************
*
- * state()
+ * imap_state()
*
* This is the ONLY way to change IMAP state!
*/
-static void state(struct Curl_easy *data, imapstate newstate)
+static void imap_state(struct Curl_easy *data, imapstate newstate)
{
struct imap_conn *imapc = &data->conn->proto.imapc;
#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
@@ -446,7 +438,7 @@ static CURLcode imap_perform_capability(struct Curl_easy *data,
result = imap_sendf(data, "CAPABILITY");
if(!result)
- state(data, IMAP_CAPABILITY);
+ imap_state(data, IMAP_CAPABILITY);
return result;
}
@@ -463,7 +455,7 @@ static CURLcode imap_perform_starttls(struct Curl_easy *data)
CURLcode result = imap_sendf(data, "STARTTLS");
if(!result)
- state(data, IMAP_STARTTLS);
+ imap_state(data, IMAP_STARTTLS);
return result;
}
@@ -479,19 +471,27 @@ static CURLcode imap_perform_upgrade_tls(struct Curl_easy *data,
{
/* Start the SSL connection */
struct imap_conn *imapc = &conn->proto.imapc;
- CURLcode result = Curl_ssl_connect_nonblocking(data, conn, FALSE,
- FIRSTSOCKET, &imapc->ssldone);
+ CURLcode result;
+ bool ssldone = FALSE;
+ if(!Curl_conn_is_ssl(conn, FIRSTSOCKET)) {
+ result = Curl_ssl_cfilter_add(data, conn, FIRSTSOCKET);
+ if(result)
+ goto out;
+ }
+
+ result = Curl_conn_connect(data, FIRSTSOCKET, FALSE, &ssldone);
if(!result) {
+ imapc->ssldone = ssldone;
if(imapc->state != IMAP_UPGRADETLS)
- state(data, IMAP_UPGRADETLS);
+ imap_state(data, IMAP_UPGRADETLS);
if(imapc->ssldone) {
imap_to_imaps(conn);
result = imap_perform_capability(data, conn);
}
}
-
+out:
return result;
}
@@ -511,7 +511,7 @@ static CURLcode imap_perform_login(struct Curl_easy *data,
/* Check we have a username and password to authenticate with and end the
connect phase if we don't */
if(!data->state.aptr.user) {
- state(data, IMAP_STOP);
+ imap_state(data, IMAP_STOP);
return result;
}
@@ -528,7 +528,7 @@ static CURLcode imap_perform_login(struct Curl_easy *data,
free(passwd);
if(!result)
- state(data, IMAP_LOGIN);
+ imap_state(data, IMAP_LOGIN);
return result;
}
@@ -612,7 +612,7 @@ static CURLcode imap_perform_authentication(struct Curl_easy *data,
with and end the connect phase if we don't */
if(imapc->preauth ||
!Curl_sasl_can_authenticate(&imapc->sasl, data)) {
- state(data, IMAP_STOP);
+ imap_state(data, IMAP_STOP);
return result;
}
@@ -621,7 +621,7 @@ static CURLcode imap_perform_authentication(struct Curl_easy *data,
if(!result) {
if(progress == SASL_INPROGRESS)
- state(data, IMAP_AUTHENTICATE);
+ imap_state(data, IMAP_AUTHENTICATE);
else if(!imapc->login_disabled && (imapc->preftype & IMAP_TYPE_CLEARTEXT))
/* Perform clear text authentication */
result = imap_perform_login(data, conn);
@@ -664,7 +664,7 @@ static CURLcode imap_perform_list(struct Curl_easy *data)
}
if(!result)
- state(data, IMAP_LIST);
+ imap_state(data, IMAP_LIST);
return result;
}
@@ -704,7 +704,7 @@ static CURLcode imap_perform_select(struct Curl_easy *data)
free(mailbox);
if(!result)
- state(data, IMAP_SELECT);
+ imap_state(data, IMAP_SELECT);
return result;
}
@@ -746,7 +746,7 @@ static CURLcode imap_perform_fetch(struct Curl_easy *data)
return CURLE_URL_MALFORMAT;
}
if(!result)
- state(data, IMAP_FETCH);
+ imap_state(data, IMAP_FETCH);
return result;
}
@@ -776,7 +776,7 @@ static CURLcode imap_perform_append(struct Curl_easy *data)
/* Add external headers and mime version. */
curl_mime_headers(&data->set.mimepost, data->set.headers, 0);
- result = Curl_mime_prepare_headers(&data->set.mimepost, NULL,
+ result = Curl_mime_prepare_headers(data, &data->set.mimepost, NULL,
NULL, MIMESTRATEGY_MAIL);
if(!result)
@@ -817,7 +817,7 @@ static CURLcode imap_perform_append(struct Curl_easy *data)
free(mailbox);
if(!result)
- state(data, IMAP_APPEND);
+ imap_state(data, IMAP_APPEND);
return result;
}
@@ -843,7 +843,7 @@ static CURLcode imap_perform_search(struct Curl_easy *data)
result = imap_sendf(data, "SEARCH %s", imap->query);
if(!result)
- state(data, IMAP_SEARCH);
+ imap_state(data, IMAP_SEARCH);
return result;
}
@@ -860,7 +860,7 @@ static CURLcode imap_perform_logout(struct Curl_easy *data)
CURLcode result = imap_sendf(data, "LOGOUT");
if(!result)
- state(data, IMAP_LOGOUT);
+ imap_state(data, IMAP_LOGOUT);
return result;
}
@@ -951,7 +951,7 @@ static CURLcode imap_state_capability_resp(struct Curl_easy *data,
line += wordlen;
}
}
- else if(data->set.use_ssl && !conn->ssl[FIRSTSOCKET].use) {
+ else if(data->set.use_ssl && !Curl_conn_is_ssl(conn, FIRSTSOCKET)) {
/* PREAUTH is not compatible with STARTTLS. */
if(imapcode == IMAP_RESP_OK && imapc->tls_supported && !imapc->preauth) {
/* Switch to TLS connection now */
@@ -1014,7 +1014,7 @@ static CURLcode imap_state_auth_resp(struct Curl_easy *data,
if(!result)
switch(progress) {
case SASL_DONE:
- state(data, IMAP_STOP); /* Authenticated */
+ imap_state(data, IMAP_STOP); /* Authenticated */
break;
case SASL_IDLE: /* No mechanism left after cancellation */
if((!imapc->login_disabled) && (imapc->preftype & IMAP_TYPE_CLEARTEXT))
@@ -1046,7 +1046,7 @@ static CURLcode imap_state_login_resp(struct Curl_easy *data,
}
else
/* End of connect phase */
- state(data, IMAP_STOP);
+ imap_state(data, IMAP_STOP);
return result;
}
@@ -1072,7 +1072,7 @@ static CURLcode imap_state_listsearch_resp(struct Curl_easy *data,
result = CURLE_QUOTE_ERROR;
else
/* End of DO phase */
- state(data, IMAP_STOP);
+ imap_state(data, IMAP_STOP);
return result;
}
@@ -1091,10 +1091,19 @@ static CURLcode imap_state_select_resp(struct Curl_easy *data, int imapcode,
if(imapcode == '*') {
/* See if this is an UIDVALIDITY response */
- char tmp[20];
- if(sscanf(line + 2, "OK [UIDVALIDITY %19[0123456789]]", tmp) == 1) {
- Curl_safefree(imapc->mailbox_uidvalidity);
- imapc->mailbox_uidvalidity = strdup(tmp);
+ if(checkprefix("OK [UIDVALIDITY ", line + 2)) {
+ size_t len = 0;
+ const char *p = &line[2] + strlen("OK [UIDVALIDITY ");
+ while((len < 20) && p[len] && ISDIGIT(p[len]))
+ len++;
+ if(len && (p[len] == ']')) {
+ struct dynbuf uid;
+ Curl_dyn_init(&uid, 20);
+ if(Curl_dyn_addn(&uid, p, len))
+ return CURLE_OUT_OF_MEMORY;
+ Curl_safefree(imapc->mailbox_uidvalidity);
+ imapc->mailbox_uidvalidity = Curl_dyn_ptr(&uid);
+ }
}
}
else if(imapcode == IMAP_RESP_OK) {
@@ -1106,7 +1115,10 @@ static CURLcode imap_state_select_resp(struct Curl_easy *data, int imapcode,
}
else {
/* Note the currently opened mailbox on this connection */
+ DEBUGASSERT(!imapc->mailbox);
imapc->mailbox = strdup(imap->mailbox);
+ if(!imapc->mailbox)
+ return CURLE_OUT_OF_MEMORY;
if(imap->custom)
result = imap_perform_list(data);
@@ -1140,7 +1152,7 @@ static CURLcode imap_state_fetch_resp(struct Curl_easy *data,
if(imapcode != '*') {
Curl_pgrsSetDownloadSize(data, -1);
- state(data, IMAP_STOP);
+ imap_state(data, IMAP_STOP);
return CURLE_REMOTE_FILE_NOT_FOUND;
}
@@ -1175,15 +1187,13 @@ static CURLcode imap_state_fetch_resp(struct Curl_easy *data,
if(!chunk) {
/* no size, we're done with the data */
- state(data, IMAP_STOP);
+ imap_state(data, IMAP_STOP);
return CURLE_OK;
}
result = Curl_client_write(data, CLIENTWRITE_BODY, pp->cache, chunk);
if(result)
return result;
- data->req.bytecount += chunk;
-
infof(data, "Written %zu bytes, %" CURL_FORMAT_CURL_OFF_TU
" bytes are left for transfer", chunk, size - chunk);
@@ -1221,7 +1231,7 @@ static CURLcode imap_state_fetch_resp(struct Curl_easy *data,
}
/* End of DO phase */
- state(data, IMAP_STOP);
+ imap_state(data, IMAP_STOP);
return result;
}
@@ -1239,7 +1249,7 @@ static CURLcode imap_state_fetch_final_resp(struct Curl_easy *data,
result = CURLE_WEIRD_SERVER_REPLY;
else
/* End of DONE phase */
- state(data, IMAP_STOP);
+ imap_state(data, IMAP_STOP);
return result;
}
@@ -1262,7 +1272,7 @@ static CURLcode imap_state_append_resp(struct Curl_easy *data, int imapcode,
Curl_setup_transfer(data, -1, -1, FALSE, FIRSTSOCKET);
/* End of DO phase */
- state(data, IMAP_STOP);
+ imap_state(data, IMAP_STOP);
}
return result;
@@ -1281,7 +1291,7 @@ static CURLcode imap_state_append_final_resp(struct Curl_easy *data,
result = CURLE_UPLOAD_FAILED;
else
/* End of DONE phase */
- state(data, IMAP_STOP);
+ imap_state(data, IMAP_STOP);
return result;
}
@@ -1369,7 +1379,7 @@ static CURLcode imap_statemachine(struct Curl_easy *data,
/* fallthrough, just stop! */
default:
/* internal error */
- state(data, IMAP_STOP);
+ imap_state(data, IMAP_STOP);
break;
}
} while(!result && imapc->state != IMAP_STOP && Curl_pp_moredata(pp));
@@ -1385,9 +1395,10 @@ static CURLcode imap_multi_statemach(struct Curl_easy *data, bool *done)
struct imap_conn *imapc = &conn->proto.imapc;
if((conn->handler->flags & PROTOPT_SSL) && !imapc->ssldone) {
- result = Curl_ssl_connect_nonblocking(data, conn, FALSE,
- FIRSTSOCKET, &imapc->ssldone);
- if(result || !imapc->ssldone)
+ bool ssldone = FALSE;
+ result = Curl_conn_connect(data, FIRSTSOCKET, FALSE, &ssldone);
+ imapc->ssldone = ssldone;
+ if(result || !ssldone)
return result;
}
@@ -1417,7 +1428,7 @@ static CURLcode imap_init(struct Curl_easy *data)
CURLcode result = CURLE_OK;
struct IMAP *imap;
- imap = data->req.p.imap = calloc(sizeof(struct IMAP), 1);
+ imap = data->req.p.imap = calloc(1, sizeof(struct IMAP));
if(!imap)
result = CURLE_OUT_OF_MEMORY;
@@ -1471,7 +1482,7 @@ static CURLcode imap_connect(struct Curl_easy *data, bool *done)
return result;
/* Start off waiting for the server greeting response */
- state(data, IMAP_SERVERGREET);
+ imap_state(data, IMAP_SERVERGREET);
/* Start off with an response id of '*' */
strcpy(imapc->resptag, "*");
@@ -1507,17 +1518,17 @@ static CURLcode imap_done(struct Curl_easy *data, CURLcode status,
result = status; /* use the already set error code */
}
else if(!data->set.connect_only && !imap->custom &&
- (imap->uid || imap->mindex || data->set.upload ||
+ (imap->uid || imap->mindex || data->state.upload ||
data->set.mimepost.kind != MIMEKIND_NONE)) {
/* Handle responses after FETCH or APPEND transfer has finished */
- if(!data->set.upload && data->set.mimepost.kind == MIMEKIND_NONE)
- state(data, IMAP_FETCH_FINAL);
+ if(!data->state.upload && data->set.mimepost.kind == MIMEKIND_NONE)
+ imap_state(data, IMAP_FETCH_FINAL);
else {
/* End the APPEND command first by sending an empty line */
result = Curl_pp_sendf(data, &conn->proto.imapc.pp, "%s", "");
if(!result)
- state(data, IMAP_APPEND_FINAL);
+ imap_state(data, IMAP_APPEND_FINAL);
}
/* Run the state-machine */
@@ -1561,7 +1572,7 @@ static CURLcode imap_perform(struct Curl_easy *data, bool *connected,
DEBUGF(infof(data, "DO phase starts"));
- if(data->set.opt_no_body) {
+ if(data->req.no_body) {
/* Requested no body means no transfer */
imap->transfer = PPTRANSFER_INFO;
}
@@ -1577,7 +1588,7 @@ static CURLcode imap_perform(struct Curl_easy *data, bool *connected,
selected = TRUE;
/* Start the first command in the DO phase */
- if(data->set.upload || data->set.mimepost.kind != MIMEKIND_NONE)
+ if(data->state.upload || data->set.mimepost.kind != MIMEKIND_NONE)
/* APPEND can be executed directly */
result = imap_perform_append(data);
else if(imap->custom && (selected || !imap->mailbox))
@@ -1603,7 +1614,7 @@ static CURLcode imap_perform(struct Curl_easy *data, bool *connected,
/* Run the state-machine */
result = imap_multi_statemach(data, dophase_done);
- *connected = conn->bits.tcpconnect[FIRSTSOCKET];
+ *connected = Curl_conn_is_connected(conn, FIRSTSOCKET);
if(*dophase_done)
DEBUGF(infof(data, "DO phase is complete"));
@@ -1773,8 +1784,8 @@ static CURLcode imap_sendf(struct Curl_easy *data, const char *fmt, ...)
/* Calculate the tag based on the connection ID and command ID */
msnprintf(imapc->resptag, sizeof(imapc->resptag), "%c%03d",
- 'A' + curlx_sltosi(data->conn->connection_id % 26),
- (++imapc->cmdid)%1000);
+ 'A' + curlx_sltosi((long)(data->conn->connection_id % 26)),
+ ++imapc->cmdid);
/* start with a blank buffer */
Curl_dyn_reset(&imapc->dyn);
@@ -1802,79 +1813,37 @@ static CURLcode imap_sendf(struct Curl_easy *data, const char *fmt, ...)
*/
static char *imap_atom(const char *str, bool escape_only)
{
- /* !checksrc! disable PARENBRACE 1 */
- const char atom_specials[] = "(){ %*]";
- const char *p1;
- char *p2;
- size_t backsp_count = 0;
- size_t quote_count = 0;
- bool others_exists = FALSE;
- size_t newlen = 0;
- char *newstr = NULL;
+ struct dynbuf line;
+ size_t nclean;
+ size_t len;
if(!str)
return NULL;
- /* Look for "atom-specials", counting the backslash and quote characters as
- these will need escaping */
- p1 = str;
- while(*p1) {
- if(*p1 == '\\')
- backsp_count++;
- else if(*p1 == '"')
- quote_count++;
- else if(!escape_only) {
- const char *p3 = atom_specials;
-
- while(*p3 && !others_exists) {
- if(*p1 == *p3)
- others_exists = TRUE;
-
- p3++;
- }
- }
-
- p1++;
- }
-
- /* Does the input contain any "atom-special" characters? */
- if(!backsp_count && !quote_count && !others_exists)
+ len = strlen(str);
+ nclean = strcspn(str, "() {%*]\\\"");
+ if(len == nclean)
+ /* nothing to escape, return a strdup */
return strdup(str);
- /* Calculate the new string length */
- newlen = strlen(str) + backsp_count + quote_count + (escape_only ? 0 : 2);
+ Curl_dyn_init(&line, 2000);
- /* Allocate the new string */
- newstr = (char *) malloc((newlen + 1) * sizeof(char));
- if(!newstr)
+ if(!escape_only && Curl_dyn_addn(&line, "\"", 1))
return NULL;
- /* Surround the string in quotes if necessary */
- p2 = newstr;
- if(!escape_only) {
- newstr[0] = '"';
- newstr[newlen - 1] = '"';
- p2++;
+ while(*str) {
+ if((*str == '\\' || *str == '"') &&
+ Curl_dyn_addn(&line, "\\", 1))
+ return NULL;
+ if(Curl_dyn_addn(&line, str, 1))
+ return NULL;
+ str++;
}
- /* Copy the string, escaping backslash and quote characters along the way */
- p1 = str;
- while(*p1) {
- if(*p1 == '\\' || *p1 == '"') {
- *p2 = '\\';
- p2++;
- }
-
- *p2 = *p1;
-
- p1++;
- p2++;
- }
-
- /* Terminate the string */
- newstr[newlen] = '\0';
+ if(!escape_only && Curl_dyn_addn(&line, "\"", 1))
+ return NULL;
- return newstr;
+ return Curl_dyn_ptr(&line);
}
/***********************************************************************
@@ -1921,39 +1890,53 @@ static CURLcode imap_parse_url_options(struct connectdata *conn)
CURLcode result = CURLE_OK;
struct imap_conn *imapc = &conn->proto.imapc;
const char *ptr = conn->options;
+ bool prefer_login = false;
while(!result && ptr && *ptr) {
const char *key = ptr;
const char *value;
while(*ptr && *ptr != '=')
- ptr++;
+ ptr++;
value = ptr + 1;
while(*ptr && *ptr != ';')
ptr++;
- if(strncasecompare(key, "AUTH=", 5))
+ if(strncasecompare(key, "AUTH=+LOGIN", 11)) {
+ /* User prefers plaintext LOGIN over any SASL, including SASL LOGIN */
+ prefer_login = true;
+ imapc->sasl.prefmech = SASL_AUTH_NONE;
+ }
+ else if(strncasecompare(key, "AUTH=", 5)) {
+ prefer_login = false;
result = Curl_sasl_parse_url_auth_option(&imapc->sasl,
value, ptr - value);
- else
+ }
+ else {
+ prefer_login = false;
result = CURLE_URL_MALFORMAT;
+ }
if(*ptr == ';')
ptr++;
}
- switch(imapc->sasl.prefmech) {
- case SASL_AUTH_NONE:
- imapc->preftype = IMAP_TYPE_NONE;
- break;
- case SASL_AUTH_DEFAULT:
- imapc->preftype = IMAP_TYPE_ANY;
- break;
- default:
- imapc->preftype = IMAP_TYPE_SASL;
- break;
+ if(prefer_login)
+ imapc->preftype = IMAP_TYPE_CLEARTEXT;
+ else {
+ switch(imapc->sasl.prefmech) {
+ case SASL_AUTH_NONE:
+ imapc->preftype = IMAP_TYPE_NONE;
+ break;
+ case SASL_AUTH_DEFAULT:
+ imapc->preftype = IMAP_TYPE_ANY;
+ break;
+ default:
+ imapc->preftype = IMAP_TYPE_SASL;
+ break;
+ }
}
return result;
diff --git a/lib/imap.h b/lib/imap.h
index 43cc1e98f..784ee97e5 100644
--- a/lib/imap.h
+++ b/lib/imap.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2009 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -72,19 +72,19 @@ struct IMAP {
struct */
struct imap_conn {
struct pingpong pp;
- imapstate state; /* Always use imap.c:state() to change state! */
- bool ssldone; /* Is connect() over SSL done? */
- bool preauth; /* Is this connection PREAUTH? */
struct SASL sasl; /* SASL-related parameters */
- unsigned int preftype; /* Preferred authentication type */
- unsigned int cmdid; /* Last used command ID */
- char resptag[5]; /* Response tag to wait for */
- bool tls_supported; /* StartTLS capability supported by server */
- bool login_disabled; /* LOGIN command disabled by server */
- bool ir_supported; /* Initial response supported by server */
+ struct dynbuf dyn; /* for the IMAP commands */
char *mailbox; /* The last selected mailbox */
char *mailbox_uidvalidity; /* UIDVALIDITY parsed from select response */
- struct dynbuf dyn; /* for the IMAP commands */
+ imapstate state; /* Always use imap.c:state() to change state! */
+ char resptag[5]; /* Response tag to wait for */
+ unsigned char preftype; /* Preferred authentication type */
+ unsigned char cmdid; /* Last used command ID */
+ BIT(ssldone); /* Is connect() over SSL done? */
+ BIT(preauth); /* Is this connection PREAUTH? */
+ BIT(tls_supported); /* StartTLS capability supported by server */
+ BIT(login_disabled); /* LOGIN command disabled by server */
+ BIT(ir_supported); /* Initial response supported by server */
};
extern const struct Curl_handler Curl_handler_imap;
@@ -96,6 +96,6 @@ extern const struct Curl_handler Curl_handler_imaps;
/* Authentication type values */
#define IMAP_TYPE_NONE 0
-#define IMAP_TYPE_ANY ~0U
+#define IMAP_TYPE_ANY (IMAP_TYPE_CLEARTEXT|IMAP_TYPE_SASL)
#endif /* HEADER_CURL_IMAP_H */
diff --git a/lib/inet_ntop.c b/lib/inet_ntop.c
index 024f8da36..c9cee0c57 100644
--- a/lib/inet_ntop.c
+++ b/lib/inet_ntop.c
@@ -42,6 +42,15 @@
#define INT16SZ 2
/*
+ * If ENABLE_IPV6 is disabled, we still want to parse IPv6 addresses, so make
+ * sure we have _some_ value for AF_INET6 without polluting our fake value
+ * everywhere.
+ */
+#if !defined(ENABLE_IPV6) && !defined(AF_INET6)
+#define AF_INET6 (AF_INET + 1)
+#endif
+
+/*
* Format an IPv4 address, more or less like inet_ntop().
*
* Returns `dst' (as a const)
@@ -72,7 +81,6 @@ static char *inet_ntop4 (const unsigned char *src, char *dst, size_t size)
return dst;
}
-#ifdef ENABLE_IPV6
/*
* Convert IPv6 binary address into presentation (printable) format.
*/
@@ -88,10 +96,10 @@ static char *inet_ntop6 (const unsigned char *src, char *dst, size_t size)
char tmp[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];
char *tp;
struct {
- long base;
- long len;
+ int base;
+ int len;
} best, cur;
- unsigned long words[IN6ADDRSZ / INT16SZ];
+ unsigned int words[IN6ADDRSZ / INT16SZ];
int i;
/* Preprocess:
@@ -100,7 +108,7 @@ static char *inet_ntop6 (const unsigned char *src, char *dst, size_t size)
*/
memset(words, '\0', sizeof(words));
for(i = 0; i < IN6ADDRSZ; i++)
- words[i/2] |= (src[i] << ((1 - (i % 2)) << 3));
+ words[i/2] |= ((unsigned int)src[i] << ((1 - (i % 2)) << 3));
best.base = -1;
cur.base = -1;
@@ -109,8 +117,9 @@ static char *inet_ntop6 (const unsigned char *src, char *dst, size_t size)
for(i = 0; i < (IN6ADDRSZ / INT16SZ); i++) {
if(words[i] == 0) {
- if(cur.base == -1)
- cur.base = i, cur.len = 1;
+ if(cur.base == -1) {
+ cur.base = i; cur.len = 1;
+ }
else
cur.len++;
}
@@ -150,13 +159,13 @@ static char *inet_ntop6 (const unsigned char *src, char *dst, size_t size)
tp += strlen(tp);
break;
}
- tp += msnprintf(tp, 5, "%lx", words[i]);
+ tp += msnprintf(tp, 5, "%x", words[i]);
}
/* Was it a trailing run of 0x00's?
*/
if(best.base != -1 && (best.base + best.len) == (IN6ADDRSZ / INT16SZ))
- *tp++ = ':';
+ *tp++ = ':';
*tp++ = '\0';
/* Check for overflow, copy, and we're done.
@@ -168,7 +177,6 @@ static char *inet_ntop6 (const unsigned char *src, char *dst, size_t size)
strcpy(dst, tmp);
return dst;
}
-#endif /* ENABLE_IPV6 */
/*
* Convert a network format address to presentation format.
@@ -187,10 +195,8 @@ char *Curl_inet_ntop(int af, const void *src, char *buf, size_t size)
switch(af) {
case AF_INET:
return inet_ntop4((const unsigned char *)src, buf, size);
-#ifdef ENABLE_IPV6
case AF_INET6:
return inet_ntop6((const unsigned char *)src, buf, size);
-#endif
default:
errno = EAFNOSUPPORT;
return NULL;
diff --git a/lib/inet_ntop.h b/lib/inet_ntop.h
index 18fbd8ba3..7c3ead434 100644
--- a/lib/inet_ntop.h
+++ b/lib/inet_ntop.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/inet_pton.c b/lib/inet_pton.c
index 47fb77834..7d3c69879 100644
--- a/lib/inet_pton.c
+++ b/lib/inet_pton.c
@@ -1,6 +1,6 @@
/* This is from the BIND 4.9.4 release, modified to compile by itself */
-/* Copyright (c) 2003 - 2022 by Internet Software Consortium.
+/* Copyright (c) Internet Software Consortium.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -39,14 +39,21 @@
#define INT16SZ 2
/*
+ * If ENABLE_IPV6 is disabled, we still want to parse IPv6 addresses, so make
+ * sure we have _some_ value for AF_INET6 without polluting our fake value
+ * everywhere.
+ */
+#if !defined(ENABLE_IPV6) && !defined(AF_INET6)
+#define AF_INET6 (AF_INET + 1)
+#endif
+
+/*
* WARNING: Don't even consider trying to compile this on a system where
* sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX.
*/
static int inet_pton4(const char *src, unsigned char *dst);
-#ifdef ENABLE_IPV6
static int inet_pton6(const char *src, unsigned char *dst);
-#endif
/* int
* inet_pton(af, src, dst)
@@ -70,10 +77,8 @@ Curl_inet_pton(int af, const char *src, void *dst)
switch(af) {
case AF_INET:
return (inet_pton4(src, (unsigned char *)dst));
-#ifdef ENABLE_IPV6
case AF_INET6:
return (inet_pton6(src, (unsigned char *)dst));
-#endif
default:
errno = EAFNOSUPPORT;
return (-1);
@@ -135,7 +140,6 @@ inet_pton4(const char *src, unsigned char *dst)
return (1);
}
-#ifdef ENABLE_IPV6
/* int
* inet_pton6(src, dst)
* convert presentation level address to network order binary form.
@@ -234,6 +238,5 @@ inet_pton6(const char *src, unsigned char *dst)
memcpy(dst, tmp, IN6ADDRSZ);
return (1);
}
-#endif /* ENABLE_IPV6 */
#endif /* HAVE_INET_PTON */
diff --git a/lib/inet_pton.h b/lib/inet_pton.h
index 92ae93ea1..82fde7e2e 100644
--- a/lib/inet_pton.h
+++ b/lib/inet_pton.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/krb5.c b/lib/krb5.c
index 517491c46..18e73debb 100644
--- a/lib/krb5.c
+++ b/lib/krb5.c
@@ -2,7 +2,7 @@
*
* Copyright (c) 1995, 1996, 1997, 1998, 1999 Kungliga Tekniska Högskolan
* (Royal Institute of Technology, Stockholm, Sweden).
- * Copyright (c) 2004 - 2022 Daniel Stenberg
+ * Copyright (C) Daniel Stenberg
* All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
@@ -41,8 +41,13 @@
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
#include "urldata.h"
+#include "cfilters.h"
+#include "cf-socket.h"
#include "curl_base64.h"
#include "ftp.h"
#include "curl_gssapi.h"
@@ -67,7 +72,7 @@ static CURLcode ftpsend(struct Curl_easy *data, struct connectdata *conn,
char *sptr = s;
CURLcode result = CURLE_OK;
#ifdef HAVE_GSSAPI
- enum protection_level data_sec = conn->data_prot;
+ unsigned char data_sec = conn->data_prot;
#endif
if(!cmd)
@@ -86,7 +91,7 @@ static CURLcode ftpsend(struct Curl_easy *data, struct connectdata *conn,
#ifdef HAVE_GSSAPI
conn->data_prot = PROT_CMD;
#endif
- result = Curl_write(data, conn->sock[FIRSTSOCKET], sptr, write_len,
+ result = Curl_nwrite(data, FIRSTSOCKET, sptr, write_len,
&bytes_written);
#ifdef HAVE_GSSAPI
DEBUGASSERT(data_sec > PROT_NONE && data_sec < PROT_LAST);
@@ -204,8 +209,8 @@ krb5_auth(void *app_data, struct Curl_easy *data, struct connectdata *conn)
gss_ctx_id_t *context = app_data;
struct gss_channel_bindings_struct chan;
size_t base64_sz = 0;
- struct sockaddr_in **remote_addr =
- (struct sockaddr_in **)&conn->ip_addr->ai_addr;
+ struct sockaddr_in *remote_addr =
+ (struct sockaddr_in *)(void *)&conn->remote_addr->sa_addr;
char *stringp;
if(getsockname(conn->sock[FIRSTSOCKET],
@@ -217,7 +222,7 @@ krb5_auth(void *app_data, struct Curl_easy *data, struct connectdata *conn)
chan.initiator_address.value = &conn->local_addr.sin_addr.s_addr;
chan.acceptor_addrtype = GSS_C_AF_INET;
chan.acceptor_address.length = l - 4;
- chan.acceptor_address.value = &(*remote_addr)->sin_addr.s_addr;
+ chan.acceptor_address.value = &remote_addr->sin_addr.s_addr;
chan.application_data.length = 0;
chan.application_data.value = NULL;
@@ -256,7 +261,7 @@ krb5_auth(void *app_data, struct Curl_easy *data, struct connectdata *conn)
}
/* We pass NULL as |output_name_type| to avoid a leak. */
gss_display_name(&min, gssname, &output_buffer, NULL);
- infof(data, "Trying against %s", output_buffer.value);
+ infof(data, "Trying against %s", (char *)output_buffer.value);
gssresp = GSS_C_NO_BUFFER;
*context = GSS_C_NO_CONTEXT;
@@ -380,7 +385,7 @@ static const struct Curl_sec_client_mech Curl_krb5_client_mech = {
};
static const struct {
- enum protection_level level;
+ unsigned char level;
const char *name;
} level_names[] = {
{ PROT_CLEAR, "clear" },
@@ -389,8 +394,7 @@ static const struct {
{ PROT_PRIVATE, "private" }
};
-static enum protection_level
-name_to_level(const char *name)
+static unsigned char name_to_level(const char *name)
{
int i;
for(i = 0; i < (int)sizeof(level_names)/(int)sizeof(level_names[0]); i++)
@@ -451,15 +455,15 @@ static int ftp_send_command(struct Curl_easy *data, const char *message, ...)
/* Read |len| from the socket |fd| and store it in |to|. Return a CURLcode
saying whether an error occurred or CURLE_OK if |len| was read. */
static CURLcode
-socket_read(curl_socket_t fd, void *to, size_t len)
+socket_read(struct Curl_easy *data, int sockindex, void *to, size_t len)
{
char *to_p = to;
CURLcode result;
ssize_t nread = 0;
while(len > 0) {
- result = Curl_read_plain(fd, to_p, len, &nread);
- if(!result) {
+ nread = Curl_conn_recv(data, sockindex, to_p, len, &result);
+ if(nread > 0) {
len -= nread;
to_p += nread;
}
@@ -477,7 +481,7 @@ socket_read(curl_socket_t fd, void *to, size_t len)
CURLcode saying whether an error occurred or CURLE_OK if |len| was
written. */
static CURLcode
-socket_write(struct Curl_easy *data, curl_socket_t fd, const void *to,
+socket_write(struct Curl_easy *data, int sockindex, const void *to,
size_t len)
{
const char *to_p = to;
@@ -485,8 +489,8 @@ socket_write(struct Curl_easy *data, curl_socket_t fd, const void *to,
ssize_t written;
while(len > 0) {
- result = Curl_write_plain(data, fd, to_p, len, &written);
- if(!result) {
+ written = Curl_conn_send(data, sockindex, to_p, len, &result);
+ if(written > 0) {
len -= written;
to_p += written;
}
@@ -499,15 +503,15 @@ socket_write(struct Curl_easy *data, curl_socket_t fd, const void *to,
return CURLE_OK;
}
-static CURLcode read_data(struct connectdata *conn,
- curl_socket_t fd,
+static CURLcode read_data(struct Curl_easy *data, int sockindex,
struct krb5buffer *buf)
{
+ struct connectdata *conn = data->conn;
int len;
CURLcode result;
int nread;
- result = socket_read(fd, &len, sizeof(len));
+ result = socket_read(data, sockindex, &len, sizeof(len));
if(result)
return result;
@@ -522,7 +526,7 @@ static CURLcode read_data(struct connectdata *conn,
if(!len || !buf->data)
return CURLE_OUT_OF_MEMORY;
- result = socket_read(fd, buf->data, len);
+ result = socket_read(data, sockindex, buf->data, len);
if(result)
return result;
nread = conn->mech->decode(conn->app_data, buf->data, len,
@@ -551,13 +555,12 @@ static ssize_t sec_recv(struct Curl_easy *data, int sockindex,
size_t bytes_read;
size_t total_read = 0;
struct connectdata *conn = data->conn;
- curl_socket_t fd = conn->sock[sockindex];
*err = CURLE_OK;
/* Handle clear text response. */
if(conn->sec_complete == 0 || conn->data_prot == PROT_CLEAR)
- return sread(fd, buffer, len);
+ return Curl_conn_recv(data, sockindex, buffer, len, err);
if(conn->in_buffer.eof_flag) {
conn->in_buffer.eof_flag = 0;
@@ -570,7 +573,7 @@ static ssize_t sec_recv(struct Curl_easy *data, int sockindex,
buffer += bytes_read;
while(len > 0) {
- if(read_data(conn, fd, &conn->in_buffer))
+ if(read_data(data, sockindex, &conn->in_buffer))
return -1;
if(conn->in_buffer.size == 0) {
if(bytes_read > 0)
@@ -717,8 +720,7 @@ int Curl_sec_read_msg(struct Curl_easy *data, struct connectdata *conn,
return 0;
if(buf[3] != '-')
- /* safe to ignore return code */
- (void)sscanf(buf, "%d", &ret_code);
+ ret_code = atoi(buf);
if(buf[decoded_len - 1] == '\n')
buf[decoded_len - 1] = '\0';
@@ -731,7 +733,7 @@ static int sec_set_protection_level(struct Curl_easy *data)
{
int code;
struct connectdata *conn = data->conn;
- enum protection_level level = conn->request_data_prot;
+ unsigned char level = conn->request_data_prot;
DEBUGASSERT(level > PROT_NONE && level < PROT_LAST);
@@ -761,8 +763,9 @@ static int sec_set_protection_level(struct Curl_easy *data)
pbsz = strstr(data->state.buffer, "PBSZ=");
if(pbsz) {
- /* ignore return code, use default value if it fails */
- (void)sscanf(pbsz, "PBSZ=%u", &buffer_size);
+ /* stick to default value if the check fails */
+ if(!strncmp(pbsz, "PBSZ=", 5) && ISDIGIT(pbsz[5]))
+ buffer_size = atoi(&pbsz[5]);
if(buffer_size < conn->buffer_size)
conn->buffer_size = buffer_size;
}
@@ -789,7 +792,7 @@ static int sec_set_protection_level(struct Curl_easy *data)
int
Curl_sec_request_prot(struct connectdata *conn, const char *level)
{
- enum protection_level l = name_to_level(level);
+ unsigned char l = name_to_level(level);
if(l == PROT_NONE)
return -1;
DEBUGASSERT(l > PROT_NONE && l < PROT_LAST);
diff --git a/lib/ldap.c b/lib/ldap.c
index b07334904..eb5fe795e 100644
--- a/lib/ldap.c
+++ b/lib/ldap.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -50,6 +50,14 @@
#endif
#ifdef USE_WIN32_LDAP /* Use Windows LDAP implementation. */
+# ifdef _MSC_VER
+# pragma warning(push)
+# pragma warning(disable: 4201)
+# endif
+# include <subauth.h> /* for [P]UNICODE_STRING */
+# ifdef _MSC_VER
+# pragma warning(pop)
+# endif
# include <winldap.h>
# ifndef LDAP_VENDOR_NAME
# error Your Platform SDK is NOT sufficient for LDAP support! \
@@ -140,6 +148,14 @@ static void _ldap_free_urldesc(LDAPURLDesc *ludp);
#define ldap_err2string ldap_err2stringA
#endif
+#if defined(USE_WIN32_LDAP) && defined(_MSC_VER) && (_MSC_VER <= 1600)
+/* Workaround for warning:
+ 'type cast' : conversion from 'int' to 'void *' of greater size */
+#undef LDAP_OPT_ON
+#undef LDAP_OPT_OFF
+#define LDAP_OPT_ON ((void *)(size_t)1)
+#define LDAP_OPT_OFF ((void *)(size_t)0)
+#endif
static CURLcode ldap_do(struct Curl_easy *data, bool *done);
@@ -223,7 +239,7 @@ static int ldap_win_bind_auth(LDAP *server, const char *user,
}
else
#endif
-#if !defined(CURL_DISABLE_CRYPTO_AUTH)
+#if !defined(CURL_DISABLE_DIGEST_AUTH)
if(authflags & CURLAUTH_DIGEST) {
method = LDAP_AUTH_DIGEST;
}
@@ -297,7 +313,6 @@ static CURLcode ldap_do(struct Curl_easy *data, bool *done)
int ldap_ssl = 0;
char *val_b64 = NULL;
size_t val_b64_sz = 0;
- curl_off_t dlsize = 0;
#ifdef LDAP_OPT_NETWORK_TIMEOUT
struct timeval ldap_timeout = {10, 0}; /* 10 sec connection/search timeout */
#endif
@@ -311,7 +326,7 @@ static CURLcode ldap_do(struct Curl_easy *data, bool *done)
*done = TRUE; /* unconditionally */
infof(data, "LDAP local: LDAP Vendor = %s ; LDAP Version = %d",
- LDAP_VENDOR_NAME, LDAP_VENDOR_VERSION);
+ LDAP_VENDOR_NAME, LDAP_VENDOR_VERSION);
infof(data, "LDAP local: %s", data->state.url);
#ifdef HAVE_LDAP_URL_PARSE
@@ -329,7 +344,7 @@ static CURLcode ldap_do(struct Curl_easy *data, bool *done)
if(conn->given->flags & PROTOPT_SSL)
ldap_ssl = 1;
infof(data, "LDAP local: trying to establish %s connection",
- ldap_ssl ? "encrypted" : "cleartext");
+ ldap_ssl ? "encrypted" : "cleartext");
#if defined(USE_WIN32_LDAP)
host = curlx_convert_UTF8_to_tchar(conn->host.name);
@@ -519,6 +534,7 @@ static CURLcode ldap_do(struct Curl_easy *data, bool *done)
goto quit;
}
+ Curl_pgrsSetDownloadCounter(data, 0);
rc = ldap_search_s(server, ludp->lud_dn, ludp->lud_scope,
ludp->lud_filter, ludp->lud_attrs, 0, &ldapmsg);
@@ -565,8 +581,7 @@ static CURLcode ldap_do(struct Curl_easy *data, bool *done)
goto quit;
}
- result = Curl_client_write(data, CLIENTWRITE_BODY, (char *) name,
- name_len);
+ result = Curl_client_write(data, CLIENTWRITE_BODY, name, name_len);
if(result) {
FREE_ON_WINLDAP(name);
ldap_memfree(dn);
@@ -581,8 +596,6 @@ static CURLcode ldap_do(struct Curl_easy *data, bool *done)
goto quit;
}
- dlsize += name_len + 5;
-
FREE_ON_WINLDAP(name);
ldap_memfree(dn);
}
@@ -622,8 +635,7 @@ static CURLcode ldap_do(struct Curl_easy *data, bool *done)
goto quit;
}
- result = Curl_client_write(data, CLIENTWRITE_BODY,
- (char *) attr, attr_len);
+ result = Curl_client_write(data, CLIENTWRITE_BODY, attr, attr_len);
if(result) {
ldap_value_free_len(vals);
FREE_ON_WINLDAP(attr);
@@ -645,10 +657,8 @@ static CURLcode ldap_do(struct Curl_easy *data, bool *done)
goto quit;
}
- dlsize += attr_len + 3;
-
if((attr_len > 7) &&
- (strcmp(";binary", (char *) attr + (attr_len - 7)) == 0)) {
+ (strcmp(";binary", attr + (attr_len - 7)) == 0)) {
/* Binary attribute, encode to base64. */
result = Curl_base64_encode(vals[i]->bv_val, vals[i]->bv_len,
&val_b64, &val_b64_sz);
@@ -675,8 +685,6 @@ static CURLcode ldap_do(struct Curl_easy *data, bool *done)
goto quit;
}
-
- dlsize += val_b64_sz;
}
}
else {
@@ -691,8 +699,6 @@ static CURLcode ldap_do(struct Curl_easy *data, bool *done)
goto quit;
}
-
- dlsize += vals[i]->bv_len;
}
result = Curl_client_write(data, CLIENTWRITE_BODY, (char *)"\n", 1);
@@ -705,8 +711,6 @@ static CURLcode ldap_do(struct Curl_easy *data, bool *done)
goto quit;
}
-
- dlsize++;
}
/* Free memory used to store values */
@@ -720,12 +724,10 @@ static CURLcode ldap_do(struct Curl_easy *data, bool *done)
result = Curl_client_write(data, CLIENTWRITE_BODY, (char *)"\n", 1);
if(result)
goto quit;
- dlsize++;
- Curl_pgrsSetDownloadCounter(data, dlsize);
}
if(ber)
- ber_free(ber, 0);
+ ber_free(ber, 0);
}
quit:
@@ -748,7 +750,7 @@ quit:
/* no data to transfer */
Curl_setup_transfer(data, -1, -1, FALSE, -1);
- connclose(conn, "LDAP connection always disable re-use");
+ connclose(conn, "LDAP connection always disable reuse");
return result;
}
@@ -1063,7 +1065,7 @@ static int _ldap_url_parse(struct Curl_easy *data,
*ludpp = NULL;
if(!ludp)
- return LDAP_NO_MEMORY;
+ return LDAP_NO_MEMORY;
rc = _ldap_url_parse2(data, conn, ludp);
if(rc != LDAP_SUCCESS) {
diff --git a/lib/libcurl.plist b/lib/libcurl.plist
index fee5827e4..14c198bb9 100644
--- a/lib/libcurl.plist
+++ b/lib/libcurl.plist
@@ -15,7 +15,7 @@
<string>se.curl.libcurl</string>
<key>CFBundleVersion</key>
- <string>7.86.0-DEV</string>
+ <string>8.5.0</string>
<key>CFBundleName</key>
<string>libcurl</string>
@@ -27,9 +27,9 @@
<string>????</string>
<key>CFBundleShortVersionString</key>
- <string>libcurl 7.86.0-DEV</string>
+ <string>libcurl 8.5.0</string>
<key>CFBundleGetInfoString</key>
- <string>libcurl.plist 7.86.0-DEV</string>
+ <string>libcurl.plist 8.5.0</string>
</dict>
</plist>
diff --git a/lib/libcurl.rc b/lib/libcurl.rc
index 23134a710..daa2d62d8 100644
--- a/lib/libcurl.rc
+++ b/lib/libcurl.rc
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/llist.c b/lib/llist.c
index fa2d366cb..5b6b0336d 100644
--- a/lib/llist.c
+++ b/lib/llist.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/llist.h b/lib/llist.h
index 2fcb91ca5..320580e33 100644
--- a/lib/llist.h
+++ b/lib/llist.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/macos.c b/lib/macos.c
new file mode 100644
index 000000000..9e8e76e86
--- /dev/null
+++ b/lib/macos.c
@@ -0,0 +1,55 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+
+#ifdef CURL_MACOS_CALL_COPYPROXIES
+
+#include <curl/curl.h>
+
+#include "macos.h"
+
+#include <SystemConfiguration/SCDynamicStoreCopySpecific.h>
+
+CURLcode Curl_macos_init(void)
+{
+ {
+ /*
+ * The automagic conversion from IPv4 literals to IPv6 literals only
+ * works if the SCDynamicStoreCopyProxies system function gets called
+ * first. As Curl currently doesn't support system-wide HTTP proxies, we
+ * therefore don't use any value this function might return.
+ *
+ * This function is only available on macOS and is not needed for
+ * IPv4-only builds, hence the conditions for defining
+ * CURL_MACOS_CALL_COPYPROXIES in curl_setup.h.
+ */
+ CFDictionaryRef dict = SCDynamicStoreCopyProxies(NULL);
+ if(dict)
+ CFRelease(dict);
+ }
+ return CURLE_OK;
+}
+
+#endif
diff --git a/lib/vquic/msh3.h b/lib/macos.h
index ce884d92d..637860e80 100644
--- a/lib/vquic/msh3.h
+++ b/lib/macos.h
@@ -1,5 +1,5 @@
-#ifndef HEADER_CURL_VQUIC_MSH3_H
-#define HEADER_CURL_VQUIC_MSH3_H
+#ifndef HEADER_CURL_MACOS_H
+#define HEADER_CURL_MACOS_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -26,15 +26,14 @@
#include "curl_setup.h"
-#ifdef USE_MSH3
+#ifdef CURL_MACOS_CALL_COPYPROXIES
-#include <msh3.h>
+CURLcode Curl_macos_init(void);
-struct quicsocket {
- MSH3_API* api;
- MSH3_CONNECTION* conn;
-};
+#else
-#endif /* USE_MSQUIC */
+#define Curl_macos_init() CURLE_OK
-#endif /* HEADER_CURL_VQUIC_MSH3_H */
+#endif
+
+#endif /* HEADER_CURL_MACOS_H */
diff --git a/lib/makefile.dj b/lib/makefile.dj
deleted file mode 100644
index bb95f2bbf..000000000
--- a/lib/makefile.dj
+++ /dev/null
@@ -1,73 +0,0 @@
-#***************************************************************************
-# _ _ ____ _
-# Project ___| | | | _ \| |
-# / __| | | | |_) | |
-# | (__| |_| | _ <| |___
-# \___|\___/|_| \_\_____|
-#
-# Copyright (C) 2003 - 2022, Gisle Vanem <gvanem@yahoo.no>.
-# Copyright (C) 2003 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
-#
-# This software is licensed as described in the file COPYING, which
-# you should have received as part of this distribution. The terms
-# are also available at https://curl.se/docs/copyright.html.
-#
-# You may opt to use, copy, modify, merge, publish, distribute and/or sell
-# copies of the Software, and permit persons to whom the Software is
-# furnished to do so, under 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
-#
-#***************************************************************************
-
-#
-# Adapted for djgpp2 / Watt-32 / DOS
-#
-
-DEPEND_PREREQ = curl_config.h
-VPATH = vtls vauth vquic vssh
-TOPDIR = ..
-
-include ../packages/DOS/common.dj
-include Makefile.inc
-
-CFLAGS += -DBUILDING_LIBCURL
-
-SOURCES = $(sort $(CSOURCES))
-OBJECTS = $(addprefix $(OBJ_DIR)/, $(notdir $(SOURCES:.c=.o)))
-
-CURL_LIB = libcurl.a
-
-all: $(OBJ_DIR) curl_config.h $(CURL_LIB)
-
-$(CURL_LIB): $(OBJECTS)
- ar rs $@ $?
-
-curl_config.h: config-dos.h
- $(COPY) $^ $@
-
-# clean generated files
-#
-genclean:
- - $(DELETE) curl_config.h
-
-# clean object files and subdir
-#
-objclean: genclean
- - $(DELETE) $(OBJ_DIR)$(DS)*.o
- - $(RMDIR) $(OBJ_DIR)
-
-# clean without removing built library
-#
-clean: objclean
- - $(DELETE) depend.dj
-
-# clean everything
-#
-realclean vclean: clean
- - $(DELETE) $(CURL_LIB)
-
--include depend.dj
diff --git a/lib/md4.c b/lib/md4.c
index e976fe7bd..486e5fa6a 100644
--- a/lib/md4.c
+++ b/lib/md4.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,16 +24,16 @@
#include "curl_setup.h"
-#if !defined(CURL_DISABLE_CRYPTO_AUTH)
+#if defined(USE_CURL_NTLM_CORE)
+
+#include <string.h>
#include "curl_md4.h"
#include "warnless.h"
-
#ifdef USE_OPENSSL
-#include <openssl/opensslconf.h>
-#if defined(OPENSSL_VERSION_MAJOR) && (OPENSSL_VERSION_MAJOR >= 3) && \
- !defined(USE_AMISSL)
+#include <openssl/opensslv.h>
+#if (OPENSSL_VERSION_NUMBER >= 0x30000000L) && !defined(USE_AMISSL)
/* OpenSSL 3.0.0 marks the MD4 functions as deprecated */
#define OPENSSL_NO_MD4
#endif
@@ -41,6 +41,7 @@
#ifdef USE_WOLFSSL
#include <wolfssl/options.h>
+#define VOID_MD4_INIT
#ifdef NO_MD4
#define WOLFSSL_NO_MD4
#endif
@@ -53,26 +54,48 @@
#else
#include <mbedtls/config.h>
#endif
-
#if(MBEDTLS_VERSION_NUMBER >= 0x02070000)
#define HAS_MBEDTLS_RESULT_CODE_BASED_FUNCTIONS
#endif
#endif /* USE_MBEDTLS */
#if defined(USE_GNUTLS)
-
#include <nettle/md4.h>
+/* When OpenSSL or wolfSSL is available, we use their MD4 functions. */
+#elif defined(USE_WOLFSSL) && !defined(WOLFSSL_NO_MD4)
+#include <wolfssl/openssl/md4.h>
+#elif defined(USE_OPENSSL) && !defined(OPENSSL_NO_MD4)
+#include <openssl/md4.h>
+#elif (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && \
+ (__MAC_OS_X_VERSION_MAX_ALLOWED >= 1040) && \
+ defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && \
+ (__MAC_OS_X_VERSION_MIN_REQUIRED < 101500)) || \
+ (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && \
+ (__IPHONE_OS_VERSION_MAX_ALLOWED >= 20000) && \
+ defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && \
+ (__IPHONE_OS_VERSION_MIN_REQUIRED < 130000))
+#define AN_APPLE_OS
+#include <CommonCrypto/CommonDigest.h>
+#elif defined(USE_WIN32_CRYPTO)
+#include <wincrypt.h>
+#elif(defined(USE_MBEDTLS) && defined(MBEDTLS_MD4_C))
+#include <mbedtls/md4.h>
+#endif
+/* The last 3 #include files should be in this order */
+#include "curl_printf.h"
#include "curl_memory.h"
-
-/* The last #include file should be: */
#include "memdebug.h"
+
+#if defined(USE_GNUTLS)
+
typedef struct md4_ctx MD4_CTX;
-static void MD4_Init(MD4_CTX *ctx)
+static int MD4_Init(MD4_CTX *ctx)
{
md4_init(ctx);
+ return 1;
}
static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size)
@@ -85,32 +108,16 @@ static void MD4_Final(unsigned char *result, MD4_CTX *ctx)
md4_digest(ctx, MD4_DIGEST_SIZE, result);
}
-/* When OpenSSL or wolfSSL is available, we use their MD4 functions. */
#elif defined(USE_WOLFSSL) && !defined(WOLFSSL_NO_MD4)
-#include <wolfssl/openssl/md4.h>
#elif defined(USE_OPENSSL) && !defined(OPENSSL_NO_MD4)
-#include <openssl/md4.h>
-
-#elif (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && \
- (__MAC_OS_X_VERSION_MAX_ALLOWED >= 1040) && \
- defined(__MAC_OS_X_VERSION_MIN_ALLOWED) && \
- (__MAC_OS_X_VERSION_MIN_ALLOWED < 101500)) || \
- (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && \
- (__IPHONE_OS_VERSION_MAX_ALLOWED >= 20000))
-
-#include <CommonCrypto/CommonDigest.h>
-
-#include "curl_memory.h"
-
-/* The last #include file should be: */
-#include "memdebug.h"
+#elif defined(AN_APPLE_OS)
typedef CC_MD4_CTX MD4_CTX;
-static void MD4_Init(MD4_CTX *ctx)
+static int MD4_Init(MD4_CTX *ctx)
{
- (void)CC_MD4_Init(ctx);
+ return CC_MD4_Init(ctx);
}
static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size)
@@ -125,28 +132,28 @@ static void MD4_Final(unsigned char *result, MD4_CTX *ctx)
#elif defined(USE_WIN32_CRYPTO)
-#include <wincrypt.h>
-
-#include "curl_memory.h"
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
struct md4_ctx {
HCRYPTPROV hCryptProv;
HCRYPTHASH hHash;
};
typedef struct md4_ctx MD4_CTX;
-static void MD4_Init(MD4_CTX *ctx)
+static int MD4_Init(MD4_CTX *ctx)
{
ctx->hCryptProv = 0;
ctx->hHash = 0;
- if(CryptAcquireContext(&ctx->hCryptProv, NULL, NULL, PROV_RSA_FULL,
- CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) {
- CryptCreateHash(ctx->hCryptProv, CALG_MD4, 0, 0, &ctx->hHash);
+ if(!CryptAcquireContext(&ctx->hCryptProv, NULL, NULL, PROV_RSA_FULL,
+ CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
+ return 0;
+
+ if(!CryptCreateHash(ctx->hCryptProv, CALG_MD4, 0, 0, &ctx->hHash)) {
+ CryptReleaseContext(ctx->hCryptProv, 0);
+ ctx->hCryptProv = 0;
+ return 0;
}
+
+ return 1;
}
static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size)
@@ -171,23 +178,17 @@ static void MD4_Final(unsigned char *result, MD4_CTX *ctx)
#elif(defined(USE_MBEDTLS) && defined(MBEDTLS_MD4_C))
-#include <mbedtls/md4.h>
-
-#include "curl_memory.h"
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
struct md4_ctx {
void *data;
unsigned long size;
};
typedef struct md4_ctx MD4_CTX;
-static void MD4_Init(MD4_CTX *ctx)
+static int MD4_Init(MD4_CTX *ctx)
{
ctx->data = NULL;
ctx->size = 0;
+ return 1;
}
static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size)
@@ -255,9 +256,6 @@ static void MD4_Final(unsigned char *result, MD4_CTX *ctx)
* compile-time configuration.
*/
-
-#include <string.h>
-
/* Any 32-bit or wider unsigned integer data type will do */
typedef unsigned int MD4_u32plus;
@@ -269,7 +267,7 @@ struct md4_ctx {
};
typedef struct md4_ctx MD4_CTX;
-static void MD4_Init(MD4_CTX *ctx);
+static int MD4_Init(MD4_CTX *ctx);
static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size);
static void MD4_Final(unsigned char *result, MD4_CTX *ctx);
@@ -408,7 +406,7 @@ static const void *body(MD4_CTX *ctx, const void *data, unsigned long size)
return ptr;
}
-static void MD4_Init(MD4_CTX *ctx)
+static int MD4_Init(MD4_CTX *ctx)
{
ctx->a = 0x67452301;
ctx->b = 0xefcdab89;
@@ -417,6 +415,7 @@ static void MD4_Init(MD4_CTX *ctx)
ctx->lo = 0;
ctx->hi = 0;
+ return 1;
}
static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size)
@@ -507,14 +506,21 @@ static void MD4_Final(unsigned char *result, MD4_CTX *ctx)
#endif /* CRYPTO LIBS */
-void Curl_md4it(unsigned char *output, const unsigned char *input,
- const size_t len)
+CURLcode Curl_md4it(unsigned char *output, const unsigned char *input,
+ const size_t len)
{
MD4_CTX ctx;
+#ifdef VOID_MD4_INIT
MD4_Init(&ctx);
+#else
+ if(!MD4_Init(&ctx))
+ return CURLE_FAILED_INIT;
+#endif
+
MD4_Update(&ctx, input, curlx_uztoui(len));
MD4_Final(output, &ctx);
+ return CURLE_OK;
}
-#endif /* CURL_DISABLE_CRYPTO_AUTH */
+#endif /* USE_CURL_NTLM_CORE */
diff --git a/lib/md5.c b/lib/md5.c
index 5be639929..01415af91 100644
--- a/lib/md5.c
+++ b/lib/md5.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,8 +24,10 @@
#include "curl_setup.h"
-#ifndef CURL_DISABLE_CRYPTO_AUTH
+#if (defined(USE_CURL_NTLM_CORE) && !defined(USE_WINDOWS_SSPI)) \
+ || !defined(CURL_DISABLE_DIGEST_AUTH)
+#include <string.h>
#include <curl/curl.h>
#include "curl_md5.h"
@@ -56,12 +58,34 @@
#endif
#if defined(USE_GNUTLS)
-
#include <nettle/md5.h>
+#elif defined(USE_OPENSSL_MD5)
+#include <openssl/md5.h>
+#elif defined(USE_WOLFSSL_MD5)
+#include <wolfssl/openssl/md5.h>
+#elif defined(USE_MBEDTLS)
+#include <mbedtls/md5.h>
+#elif (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && \
+ (__MAC_OS_X_VERSION_MAX_ALLOWED >= 1040) && \
+ defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && \
+ (__MAC_OS_X_VERSION_MIN_REQUIRED < 101500)) || \
+ (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && \
+ (__IPHONE_OS_VERSION_MAX_ALLOWED >= 20000) && \
+ defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && \
+ (__IPHONE_OS_VERSION_MIN_REQUIRED < 130000))
+#define AN_APPLE_OS
+#include <CommonCrypto/CommonDigest.h>
+#elif defined(USE_WIN32_CRYPTO)
+#include <wincrypt.h>
+#endif
+
+/* The last 3 #include files should be in this order */
+#include "curl_printf.h"
#include "curl_memory.h"
-/* The last #include file should be: */
#include "memdebug.h"
+#if defined(USE_GNUTLS)
+
typedef struct md5_ctx my_md5_ctx;
static CURLcode my_md5_init(my_md5_ctx *ctx)
@@ -84,17 +108,6 @@ static void my_md5_final(unsigned char *digest, my_md5_ctx *ctx)
#elif defined(USE_OPENSSL_MD5) || defined(USE_WOLFSSL_MD5)
-/* When OpenSSL or wolfSSL is available, we use their MD5 functions. */
-#if defined(USE_OPENSSL_MD5)
-#include <openssl/md5.h>
-#elif defined(USE_WOLFSSL_MD5)
-#include <wolfssl/openssl/md5.h>
-#endif
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
typedef MD5_CTX my_md5_ctx;
static CURLcode my_md5_init(my_md5_ctx *ctx)
@@ -119,13 +132,6 @@ static void my_md5_final(unsigned char *digest, my_md5_ctx *ctx)
#elif defined(USE_MBEDTLS)
-#include <mbedtls/md5.h>
-
-#include "curl_memory.h"
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
typedef mbedtls_md5_context my_md5_ctx;
static CURLcode my_md5_init(my_md5_ctx *ctx)
@@ -162,12 +168,7 @@ static void my_md5_final(unsigned char *digest, my_md5_ctx *ctx)
#endif
}
-#elif (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && \
- (__MAC_OS_X_VERSION_MAX_ALLOWED >= 1040) && \
- defined(__MAC_OS_X_VERSION_MIN_ALLOWED) && \
- (__MAC_OS_X_VERSION_MIN_ALLOWED < 101500)) || \
- (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && \
- (__IPHONE_OS_VERSION_MAX_ALLOWED >= 20000))
+#elif defined(AN_APPLE_OS)
/* For Apple operating systems: CommonCrypto has the functions we need.
These functions are available on Tiger and later, as well as iOS 2.0
@@ -175,11 +176,7 @@ static void my_md5_final(unsigned char *digest, my_md5_ctx *ctx)
Declaring the functions as static like this seems to be a bit more
reliable than defining COMMON_DIGEST_FOR_OPENSSL on older cats. */
-# include <CommonCrypto/CommonDigest.h>
# define my_md5_ctx CC_MD5_CTX
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
static CURLcode my_md5_init(my_md5_ctx *ctx)
{
@@ -203,11 +200,6 @@ static void my_md5_final(unsigned char *digest, my_md5_ctx *ctx)
#elif defined(USE_WIN32_CRYPTO)
-#include <wincrypt.h>
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
struct md5_ctx {
HCRYPTPROV hCryptProv;
HCRYPTHASH hHash;
@@ -222,7 +214,8 @@ static CURLcode my_md5_init(my_md5_ctx *ctx)
if(!CryptCreateHash(ctx->hCryptProv, CALG_MD5, 0, 0, &ctx->hHash)) {
CryptReleaseContext(ctx->hCryptProv, 0);
- return CURLE_OUT_OF_MEMORY;
+ ctx->hCryptProv = 0;
+ return CURLE_FAILED_INIT;
}
return CURLE_OK;
@@ -288,12 +281,6 @@ static void my_md5_final(unsigned char *digest, my_md5_ctx *ctx)
* compile-time configuration.
*/
-#include <string.h>
-
-/* The last #include files should be: */
-#include "curl_memory.h"
-#include "memdebug.h"
-
/* Any 32-bit or wider unsigned integer data type will do */
typedef unsigned int MD5_u32plus;
@@ -666,4 +653,4 @@ CURLcode Curl_MD5_final(struct MD5_context *context, unsigned char *result)
return CURLE_OK;
}
-#endif /* CURL_DISABLE_CRYPTO_AUTH */
+#endif /* Using NTLM (without SSPI) || Digest */
diff --git a/lib/memdebug.c b/lib/memdebug.c
index 15fb49155..f6ced85cd 100644
--- a/lib/memdebug.c
+++ b/lib/memdebug.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -208,7 +208,7 @@ ALLOC_FUNC char *curl_dbg_strdup(const char *str,
return mem;
}
-#if defined(WIN32) && defined(UNICODE)
+#if defined(_WIN32) && defined(UNICODE)
ALLOC_FUNC wchar_t *curl_dbg_wcsdup(const wchar_t *str,
int line, const char *source)
{
diff --git a/lib/memdebug.h b/lib/memdebug.h
index 7fc90e83a..78a012580 100644
--- a/lib/memdebug.h
+++ b/lib/memdebug.h
@@ -8,7 +8,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -64,7 +64,7 @@ CURL_EXTERN ALLOC_SIZE(2) void *curl_dbg_realloc(void *ptr,
CURL_EXTERN void curl_dbg_free(void *ptr, int line, const char *source);
CURL_EXTERN ALLOC_FUNC char *curl_dbg_strdup(const char *str, int line,
const char *src);
-#if defined(WIN32) && defined(UNICODE)
+#if defined(_WIN32) && defined(UNICODE)
CURL_EXTERN ALLOC_FUNC wchar_t *curl_dbg_wcsdup(const wchar_t *str,
int line,
const char *source);
@@ -121,7 +121,7 @@ CURL_EXTERN int curl_dbg_fclose(FILE *file, int line, const char *source);
#define send(a,b,c,d) curl_dbg_send(a,b,c,d, __LINE__, __FILE__)
#define recv(a,b,c,d) curl_dbg_recv(a,b,c,d, __LINE__, __FILE__)
-#ifdef WIN32
+#ifdef _WIN32
# ifdef UNICODE
# undef wcsdup
# define wcsdup(ptr) curl_dbg_wcsdup(ptr, __LINE__, __FILE__)
diff --git a/lib/mime.c b/lib/mime.c
index 042141fc8..bb66130ad 100644
--- a/lib/mime.c
+++ b/lib/mime.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -48,7 +48,7 @@
#include "curl_memory.h"
#include "memdebug.h"
-#ifdef WIN32
+#ifdef _WIN32
# ifndef R_OK
# define R_OK 4
# endif
@@ -84,7 +84,7 @@ static const struct mime_encoder encoders[] = {
};
/* Base64 encoding table */
-static const char base64[] =
+static const char base64enc[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
/* Quoted-printable character class table.
@@ -311,8 +311,7 @@ static char *escape_string(struct Curl_easy *data,
table = formtable;
/* data can be NULL when this function is called indirectly from
curl_formget(). */
- if(strategy == MIMESTRATEGY_MAIL ||
- (data && (data->set.mime_options & CURLMIMEOPT_FORMESCAPE)))
+ if(strategy == MIMESTRATEGY_MAIL || (data && (data->set.mime_formescape)))
table = mimetable;
Curl_dyn_init(&db, CURL_MAX_INPUT_LENGTH);
@@ -469,10 +468,10 @@ static size_t encoder_base64_read(char *buffer, size_t size, bool ateof,
i = st->buf[st->bufbeg++] & 0xFF;
i = (i << 8) | (st->buf[st->bufbeg++] & 0xFF);
i = (i << 8) | (st->buf[st->bufbeg++] & 0xFF);
- *ptr++ = base64[(i >> 18) & 0x3F];
- *ptr++ = base64[(i >> 12) & 0x3F];
- *ptr++ = base64[(i >> 6) & 0x3F];
- *ptr++ = base64[i & 0x3F];
+ *ptr++ = base64enc[(i >> 18) & 0x3F];
+ *ptr++ = base64enc[(i >> 12) & 0x3F];
+ *ptr++ = base64enc[(i >> 6) & 0x3F];
+ *ptr++ = base64enc[i & 0x3F];
cursize += 4;
st->pos += 4;
size -= 4;
@@ -496,10 +495,10 @@ static size_t encoder_base64_read(char *buffer, size_t size, bool ateof,
i = (st->buf[st->bufbeg + 1] & 0xFF) << 8;
i |= (st->buf[st->bufbeg] & 0xFF) << 16;
- ptr[0] = base64[(i >> 18) & 0x3F];
- ptr[1] = base64[(i >> 12) & 0x3F];
+ ptr[0] = base64enc[(i >> 18) & 0x3F];
+ ptr[1] = base64enc[(i >> 12) & 0x3F];
if(++st->bufbeg != st->bufend) {
- ptr[2] = base64[(i >> 6) & 0x3F];
+ ptr[2] = base64enc[(i >> 6) & 0x3F];
st->bufbeg++;
}
cursize += 4;
@@ -750,7 +749,6 @@ static void mime_file_free(void *ptr)
part->fp = NULL;
}
Curl_safefree(part->data);
- part->data = NULL;
}
@@ -1108,7 +1106,7 @@ static int mime_subparts_seek(void *instream, curl_off_t offset, int whence)
return CURL_SEEKFUNC_CANTSEEK; /* Only support full rewind. */
if(mime->state.state == MIMESTATE_BEGIN)
- return CURL_SEEKFUNC_OK; /* Already rewound. */
+ return CURL_SEEKFUNC_OK; /* Already rewound. */
for(part = mime->firstpart; part; part = part->nextpart) {
int res = mime_part_rewind(part);
@@ -1168,14 +1166,16 @@ static void mime_subparts_unbind(void *ptr)
void Curl_mime_cleanpart(curl_mimepart *part)
{
- cleanup_part_content(part);
- curl_slist_free_all(part->curlheaders);
- if(part->flags & MIME_USERHEADERS_OWNER)
- curl_slist_free_all(part->userheaders);
- Curl_safefree(part->mimetype);
- Curl_safefree(part->name);
- Curl_safefree(part->filename);
- Curl_mime_initpart(part, part->easy);
+ if(part) {
+ cleanup_part_content(part);
+ curl_slist_free_all(part->curlheaders);
+ if(part->flags & MIME_USERHEADERS_OWNER)
+ curl_slist_free_all(part->userheaders);
+ Curl_safefree(part->mimetype);
+ Curl_safefree(part->name);
+ Curl_safefree(part->filename);
+ Curl_mime_initpart(part);
+ }
}
/* Recursively delete a mime handle and its parts. */
@@ -1195,7 +1195,8 @@ void curl_mime_free(curl_mime *mime)
}
}
-CURLcode Curl_mime_duppart(curl_mimepart *dst, const curl_mimepart *src)
+CURLcode Curl_mime_duppart(struct Curl_easy *data,
+ curl_mimepart *dst, const curl_mimepart *src)
{
curl_mime *mime;
curl_mimepart *d;
@@ -1224,13 +1225,13 @@ CURLcode Curl_mime_duppart(curl_mimepart *dst, const curl_mimepart *src)
case MIMEKIND_MULTIPART:
/* No one knows about the cloned subparts, thus always attach ownership
to the part. */
- mime = curl_mime_init(dst->easy);
+ mime = curl_mime_init(data);
res = mime? curl_mime_subparts(dst, mime): CURLE_OUT_OF_MEMORY;
/* Duplicate subparts. */
for(s = ((curl_mime *) src->arg)->firstpart; !res && s; s = s->nextpart) {
d = curl_mime_addpart(mime);
- res = d? Curl_mime_duppart(d, s): CURLE_OUT_OF_MEMORY;
+ res = d? Curl_mime_duppart(data, d, s): CURLE_OUT_OF_MEMORY;
}
break;
default: /* Invalid kind: should not occur. */
@@ -1282,15 +1283,14 @@ curl_mime *curl_mime_init(struct Curl_easy *easy)
mime = (curl_mime *) malloc(sizeof(*mime));
if(mime) {
- mime->easy = easy;
mime->parent = NULL;
mime->firstpart = NULL;
mime->lastpart = NULL;
memset(mime->boundary, '-', MIME_BOUNDARY_DASHES);
- if(Curl_rand_hex(easy,
- (unsigned char *) &mime->boundary[MIME_BOUNDARY_DASHES],
- MIME_RAND_BOUNDARY_CHARS + 1)) {
+ if(Curl_rand_alnum(easy,
+ (unsigned char *) &mime->boundary[MIME_BOUNDARY_DASHES],
+ MIME_RAND_BOUNDARY_CHARS + 1)) {
/* failed to get random separator, bail out */
free(mime);
return NULL;
@@ -1302,10 +1302,9 @@ curl_mime *curl_mime_init(struct Curl_easy *easy)
}
/* Initialize a mime part. */
-void Curl_mime_initpart(curl_mimepart *part, struct Curl_easy *easy)
+void Curl_mime_initpart(curl_mimepart *part)
{
memset((char *) part, 0, sizeof(*part));
- part->easy = easy;
part->lastreadstatus = 1; /* Successful read status. */
mimesetstate(&part->state, MIMESTATE_BEGIN, NULL);
}
@@ -1321,7 +1320,7 @@ curl_mimepart *curl_mime_addpart(curl_mime *mime)
part = (curl_mimepart *) malloc(sizeof(*part));
if(part) {
- Curl_mime_initpart(part, mime->easy);
+ Curl_mime_initpart(part);
part->parent = mime;
if(mime->lastpart)
@@ -1342,7 +1341,6 @@ CURLcode curl_mime_name(curl_mimepart *part, const char *name)
return CURLE_BAD_FUNCTION_ARGUMENT;
Curl_safefree(part->name);
- part->name = NULL;
if(name) {
part->name = strdup(name);
@@ -1360,7 +1358,6 @@ CURLcode curl_mime_filename(curl_mimepart *part, const char *filename)
return CURLE_BAD_FUNCTION_ARGUMENT;
Curl_safefree(part->filename);
- part->filename = NULL;
if(filename) {
part->filename = strdup(filename);
@@ -1460,7 +1457,6 @@ CURLcode curl_mime_type(curl_mimepart *part, const char *mimetype)
return CURLE_BAD_FUNCTION_ARGUMENT;
Curl_safefree(part->mimetype);
- part->mimetype = NULL;
if(mimetype) {
part->mimetype = strdup(mimetype);
@@ -1551,10 +1547,6 @@ CURLcode Curl_mime_set_subparts(curl_mimepart *part,
cleanup_part_content(part);
if(subparts) {
- /* Must belong to the same data handle. */
- if(part->easy && subparts->easy && part->easy != subparts->easy)
- return CURLE_BAD_FUNCTION_ARGUMENT;
-
/* Should not have been attached already. */
if(subparts->parent)
return CURLE_BAD_FUNCTION_ARGUMENT;
@@ -1565,8 +1557,7 @@ CURLcode Curl_mime_set_subparts(curl_mimepart *part,
while(root->parent && root->parent->parent)
root = root->parent->parent;
if(subparts == root) {
- if(part->easy)
- failf(part->easy, "Can't add itself as a subpart");
+ /* Can't add as a subpart of itself. */
return CURLE_BAD_FUNCTION_ARGUMENT;
}
}
@@ -1636,7 +1627,7 @@ static size_t slist_size(struct curl_slist *s,
static curl_off_t multipart_size(curl_mime *mime)
{
curl_off_t size;
- size_t boundarysize;
+ curl_off_t boundarysize;
curl_mimepart *part;
if(!mime)
@@ -1744,7 +1735,7 @@ const char *Curl_mime_contenttype(const char *filename)
size_t len2 = strlen(ctts[i].extension);
if(len1 >= len2 && strcasecompare(nameend - len2, ctts[i].extension))
- return ctts[i].type;
+ return ctts[i].type;
}
}
return NULL;
@@ -1766,7 +1757,8 @@ static bool content_type_match(const char *contenttype,
return FALSE;
}
-CURLcode Curl_mime_prepare_headers(curl_mimepart *part,
+CURLcode Curl_mime_prepare_headers(struct Curl_easy *data,
+ curl_mimepart *part,
const char *contenttype,
const char *disposition,
enum mimestrategy strategy)
@@ -1835,12 +1827,12 @@ CURLcode Curl_mime_prepare_headers(curl_mimepart *part,
char *filename = NULL;
if(part->name) {
- name = escape_string(part->easy, part->name, strategy);
+ name = escape_string(data, part->name, strategy);
if(!name)
ret = CURLE_OUT_OF_MEMORY;
}
if(!ret && part->filename) {
- filename = escape_string(part->easy, part->filename, strategy);
+ filename = escape_string(data, part->filename, strategy);
if(!filename)
ret = CURLE_OUT_OF_MEMORY;
}
@@ -1897,7 +1889,8 @@ CURLcode Curl_mime_prepare_headers(curl_mimepart *part,
if(content_type_match(contenttype, STRCONST("multipart/form-data")))
disposition = "form-data";
for(subpart = mime->firstpart; subpart; subpart = subpart->nextpart) {
- ret = Curl_mime_prepare_headers(subpart, NULL, disposition, strategy);
+ ret = Curl_mime_prepare_headers(data, subpart, NULL,
+ disposition, strategy);
if(ret)
return ret;
}
diff --git a/lib/mime.h b/lib/mime.h
index bafde29f4..0a05c2a5a 100644
--- a/lib/mime.h
+++ b/lib/mime.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -27,7 +27,7 @@
#include "curl_setup.h"
#define MIME_BOUNDARY_DASHES 24 /* leading boundary dashes */
-#define MIME_RAND_BOUNDARY_CHARS 16 /* Nb. of random boundary chars. */
+#define MIME_RAND_BOUNDARY_CHARS 22 /* Nb. of random boundary chars. */
#define MAX_ENCODED_LINE_LENGTH 76 /* Maximum encoded line length. */
#define ENCODING_BUFFER_SIZE 256 /* Encoding temp buffers size. */
@@ -99,7 +99,6 @@ struct mime_state {
/* A mime multipart. */
struct curl_mime {
- struct Curl_easy *easy; /* The associated easy handle. */
curl_mimepart *parent; /* Parent part. */
curl_mimepart *firstpart; /* First part. */
curl_mimepart *lastpart; /* Last part. */
@@ -109,7 +108,6 @@ struct curl_mime {
/* A mime part. */
struct curl_mimepart {
- struct Curl_easy *easy; /* The associated easy handle. */
curl_mime *parent; /* Parent mime structure. */
curl_mimepart *nextpart; /* Forward linked list. */
enum mimekind kind; /* The part kind. */
@@ -139,14 +137,16 @@ CURLcode Curl_mime_add_header(struct curl_slist **slp, const char *fmt, ...);
!defined(CURL_DISABLE_IMAP))
/* Prototypes. */
-void Curl_mime_initpart(struct curl_mimepart *part, struct Curl_easy *easy);
+void Curl_mime_initpart(struct curl_mimepart *part);
void Curl_mime_cleanpart(struct curl_mimepart *part);
-CURLcode Curl_mime_duppart(struct curl_mimepart *dst,
+CURLcode Curl_mime_duppart(struct Curl_easy *data,
+ struct curl_mimepart *dst,
const curl_mimepart *src);
CURLcode Curl_mime_set_subparts(struct curl_mimepart *part,
struct curl_mime *subparts,
int take_ownership);
-CURLcode Curl_mime_prepare_headers(struct curl_mimepart *part,
+CURLcode Curl_mime_prepare_headers(struct Curl_easy *data,
+ struct curl_mimepart *part,
const char *contenttype,
const char *disposition,
enum mimestrategy strategy);
@@ -159,11 +159,11 @@ void Curl_mime_unpause(struct curl_mimepart *part);
#else
/* if disabled */
-#define Curl_mime_initpart(x,y)
+#define Curl_mime_initpart(x)
#define Curl_mime_cleanpart(x)
-#define Curl_mime_duppart(x,y) CURLE_OK /* Nothing to duplicate. Succeed */
+#define Curl_mime_duppart(x,y,z) CURLE_OK /* Nothing to duplicate. Succeed */
#define Curl_mime_set_subparts(a,b,c) CURLE_NOT_BUILT_IN
-#define Curl_mime_prepare_headers(a,b,c,d) CURLE_NOT_BUILT_IN
+#define Curl_mime_prepare_headers(a,b,c,d,e) CURLE_NOT_BUILT_IN
#define Curl_mime_size(x) (curl_off_t) -1
#define Curl_mime_read NULL
#define Curl_mime_rewind(x) ((void)x, CURLE_NOT_BUILT_IN)
diff --git a/lib/mprintf.c b/lib/mprintf.c
index 8a7c17a7f..6b5df5bdd 100644
--- a/lib/mprintf.c
+++ b/lib/mprintf.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1999 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -66,9 +66,7 @@
* Non-ANSI integer extensions
*/
-#if (defined(__BORLANDC__) && (__BORLANDC__ >= 0x520)) || \
- (defined(__POCC__) && defined(_MSC_VER)) || \
- (defined(_WIN32_WCE)) || \
+#if (defined(_WIN32_WCE)) || \
(defined(__MINGW32__)) || \
(defined(_MSC_VER) && (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64))
# define MP_HAVE_INT_EXTENSIONS
@@ -400,7 +398,7 @@ static int dprintf_Pass1(const char *format, struct va_stack *vto,
/* out of allowed range */
return 1;
- switch (*fmt) {
+ switch(*fmt) {
case 'S':
flags |= FLAGS_ALT;
/* FALLTHROUGH */
@@ -743,11 +741,11 @@ static int dprintf_formatf(
goto number;
- unsigned_number:
+unsigned_number:
/* Unsigned number of base BASE. */
is_neg = 0;
- number:
+number:
/* Number of base BASE. */
/* Supply a default precision if none was given. */
@@ -1071,9 +1069,6 @@ static int alloc_addbyter(int output, FILE *data)
return outc; /* fputc() returns like this on success */
}
-extern int Curl_dyn_vprintf(struct dynbuf *dyn,
- const char *format, va_list ap_save);
-
/* appends the formatted string, returns 0 on success, 1 on error */
int Curl_dyn_vprintf(struct dynbuf *dyn, const char *format, va_list ap_save)
{
diff --git a/lib/mqtt.c b/lib/mqtt.c
index 4f3d14386..366235c55 100644
--- a/lib/mqtt.c
+++ b/lib/mqtt.c
@@ -5,8 +5,8 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2020 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- * Copyright (C) 2019, Björn Stenberg, <bjorn@haxx.se>
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Björn Stenberg, <bjorn@haxx.se>
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -109,6 +109,7 @@ static CURLcode mqtt_setup_conn(struct Curl_easy *data,
mq = calloc(1, sizeof(struct MQTT));
if(!mq)
return CURLE_OUT_OF_MEMORY;
+ Curl_dyn_init(&mq->recvbuf, DYN_MQTT_RECV);
data->req.p.mqtt = mq;
return CURLE_OK;
}
@@ -117,13 +118,12 @@ static CURLcode mqtt_send(struct Curl_easy *data,
char *buf, size_t len)
{
CURLcode result = CURLE_OK;
- struct connectdata *conn = data->conn;
- curl_socket_t sockfd = conn->sock[FIRSTSOCKET];
struct MQTT *mq = data->req.p.mqtt;
ssize_t n;
- result = Curl_write(data, sockfd, buf, len, &n);
- if(!result)
- Curl_debug(data, CURLINFO_HEADER_OUT, buf, (size_t)n);
+ result = Curl_nwrite(data, FIRSTSOCKET, buf, len, &n);
+ if(result)
+ return result;
+ Curl_debug(data, CURLINFO_HEADER_OUT, buf, (size_t)n);
if(len != (size_t)n) {
size_t nsend = len - n;
char *sendleftovers = Curl_memdup(&buf[n], nsend);
@@ -242,7 +242,7 @@ static int init_connpack(char *packet, char *remain, int remain_pos)
/* keep-alive 0 = disabled */
packet[remain_pos + 9] = 0x00;
packet[remain_pos + 10] = 0x3c;
- /*end of variable header*/
+ /* end of variable header */
return remain_pos + 10;
}
@@ -251,7 +251,7 @@ static CURLcode mqtt_connect(struct Curl_easy *data)
CURLcode result = CURLE_OK;
int pos = 0;
int rc = 0;
- /*remain length*/
+ /* remain length */
int remain_pos = 0;
char remain[4] = {0};
size_t packetlen = 0;
@@ -296,12 +296,12 @@ static CURLcode mqtt_connect(struct Curl_easy *data)
/* set initial values for the CONNECT packet */
pos = init_connpack(packet, remain, remain_pos);
- result = Curl_rand_hex(data, (unsigned char *)&client_id[clen],
- MQTT_CLIENTID_LEN - clen + 1);
+ result = Curl_rand_alnum(data, (unsigned char *)&client_id[clen],
+ MQTT_CLIENTID_LEN - clen + 1);
/* add client id */
rc = add_client_id(client_id, strlen(client_id), packet, pos + 1);
if(rc) {
- failf(data, "Client ID length mismatched: [%lu]", strlen(client_id));
+ failf(data, "Client ID length mismatched: [%zu]", strlen(client_id));
result = CURLE_WEIRD_SERVER_REPLY;
goto end;
}
@@ -318,7 +318,7 @@ static CURLcode mqtt_connect(struct Curl_easy *data)
rc = add_user(username, ulen,
(unsigned char *)packet, start_user, remain_pos);
if(rc) {
- failf(data, "Username is too large: [%lu]", ulen);
+ failf(data, "Username is too large: [%zu]", ulen);
result = CURLE_WEIRD_SERVER_REPLY;
goto end;
}
@@ -328,7 +328,7 @@ static CURLcode mqtt_connect(struct Curl_easy *data)
if(plen) {
rc = add_passwd(passwd, plen, packet, start_pwd, remain_pos);
if(rc) {
- failf(data, "Password is too large: [%lu]", plen);
+ failf(data, "Password is too large: [%zu]", plen);
result = CURLE_WEIRD_SERVER_REPLY;
goto end;
}
@@ -351,36 +351,66 @@ static CURLcode mqtt_disconnect(struct Curl_easy *data)
struct MQTT *mq = data->req.p.mqtt;
result = mqtt_send(data, (char *)"\xe0\x00", 2);
Curl_safefree(mq->sendleftovers);
+ Curl_dyn_free(&mq->recvbuf);
return result;
}
-static CURLcode mqtt_verify_connack(struct Curl_easy *data)
+static CURLcode mqtt_recv_atleast(struct Curl_easy *data, size_t nbytes)
{
+ struct MQTT *mq = data->req.p.mqtt;
+ size_t rlen = Curl_dyn_len(&mq->recvbuf);
CURLcode result;
- struct connectdata *conn = data->conn;
- curl_socket_t sockfd = conn->sock[FIRSTSOCKET];
- unsigned char readbuf[MQTT_CONNACK_LEN];
- ssize_t nread;
- result = Curl_read(data, sockfd, (char *)readbuf, MQTT_CONNACK_LEN, &nread);
- if(result)
- goto fail;
+ if(rlen < nbytes) {
+ unsigned char readbuf[1024];
+ ssize_t nread;
- Curl_debug(data, CURLINFO_HEADER_IN, (char *)readbuf, (size_t)nread);
+ DEBUGASSERT(nbytes - rlen < sizeof(readbuf));
+ result = Curl_read(data, data->conn->sock[FIRSTSOCKET],
+ (char *)readbuf, nbytes - rlen, &nread);
+ if(result)
+ return result;
+ DEBUGASSERT(nread >= 0);
+ if(Curl_dyn_addn(&mq->recvbuf, readbuf, (size_t)nread))
+ return CURLE_OUT_OF_MEMORY;
+ rlen = Curl_dyn_len(&mq->recvbuf);
+ }
+ return (rlen >= nbytes)? CURLE_OK : CURLE_AGAIN;
+}
- /* fixme */
- if(nread < MQTT_CONNACK_LEN) {
- result = CURLE_WEIRD_SERVER_REPLY;
+static void mqtt_recv_consume(struct Curl_easy *data, size_t nbytes)
+{
+ struct MQTT *mq = data->req.p.mqtt;
+ size_t rlen = Curl_dyn_len(&mq->recvbuf);
+ if(rlen <= nbytes)
+ Curl_dyn_reset(&mq->recvbuf);
+ else
+ Curl_dyn_tail(&mq->recvbuf, rlen - nbytes);
+}
+
+static CURLcode mqtt_verify_connack(struct Curl_easy *data)
+{
+ struct MQTT *mq = data->req.p.mqtt;
+ CURLcode result;
+ char *ptr;
+
+ result = mqtt_recv_atleast(data, MQTT_CONNACK_LEN);
+ if(result)
goto fail;
- }
/* verify CONNACK */
- if(readbuf[0] != 0x00 || readbuf[1] != 0x00) {
+ DEBUGASSERT(Curl_dyn_len(&mq->recvbuf) >= MQTT_CONNACK_LEN);
+ ptr = Curl_dyn_ptr(&mq->recvbuf);
+ Curl_debug(data, CURLINFO_HEADER_IN, ptr, MQTT_CONNACK_LEN);
+
+ if(ptr[0] != 0x00 || ptr[1] != 0x00) {
failf(data, "Expected %02x%02x but got %02x%02x",
- 0x00, 0x00, readbuf[0], readbuf[1]);
+ 0x00, 0x00, ptr[0], ptr[1]);
+ Curl_dyn_reset(&mq->recvbuf);
result = CURLE_WEIRD_SERVER_REPLY;
+ goto fail;
}
-
+ mqtt_recv_consume(data, MQTT_CONNACK_LEN);
fail:
return result;
}
@@ -453,31 +483,29 @@ fail:
*/
static CURLcode mqtt_verify_suback(struct Curl_easy *data)
{
- CURLcode result;
+ struct MQTT *mq = data->req.p.mqtt;
struct connectdata *conn = data->conn;
- curl_socket_t sockfd = conn->sock[FIRSTSOCKET];
- unsigned char readbuf[MQTT_SUBACK_LEN];
- ssize_t nread;
struct mqtt_conn *mqtt = &conn->proto.mqtt;
+ CURLcode result;
+ char *ptr;
- result = Curl_read(data, sockfd, (char *)readbuf, MQTT_SUBACK_LEN, &nread);
+ result = mqtt_recv_atleast(data, MQTT_SUBACK_LEN);
if(result)
goto fail;
- Curl_debug(data, CURLINFO_HEADER_IN, (char *)readbuf, (size_t)nread);
-
- /* fixme */
- if(nread < MQTT_SUBACK_LEN) {
+ /* verify SUBACK */
+ DEBUGASSERT(Curl_dyn_len(&mq->recvbuf) >= MQTT_SUBACK_LEN);
+ ptr = Curl_dyn_ptr(&mq->recvbuf);
+ Curl_debug(data, CURLINFO_HEADER_IN, ptr, MQTT_SUBACK_LEN);
+
+ if(((unsigned char)ptr[0]) != ((mqtt->packetid >> 8) & 0xff) ||
+ ((unsigned char)ptr[1]) != (mqtt->packetid & 0xff) ||
+ ptr[2] != 0x00) {
+ Curl_dyn_reset(&mq->recvbuf);
result = CURLE_WEIRD_SERVER_REPLY;
goto fail;
}
-
- /* verify SUBACK */
- if(readbuf[0] != ((mqtt->packetid >> 8) & 0xff) ||
- readbuf[1] != (mqtt->packetid & 0xff) ||
- readbuf[2] != 0x00)
- result = CURLE_WEIRD_SERVER_REPLY;
-
+ mqtt_recv_consume(data, MQTT_SUBACK_LEN);
fail:
return result;
}
@@ -588,9 +616,6 @@ static void mqstate(struct Curl_easy *data,
}
-/* for the publish packet */
-#define MQTT_HEADER_LEN 5 /* max 5 bytes */
-
static CURLcode mqtt_read_publish(struct Curl_easy *data, bool *done)
{
CURLcode result = CURLE_OK;
@@ -604,7 +629,7 @@ static CURLcode mqtt_read_publish(struct Curl_easy *data, bool *done)
unsigned char packet;
switch(mqtt->state) {
- MQTT_SUBACK_COMING:
+MQTT_SUBACK_COMING:
case MQTT_SUBACK_COMING:
result = mqtt_verify_suback(data);
if(result)
@@ -635,7 +660,7 @@ static CURLcode mqtt_read_publish(struct Curl_easy *data, bool *done)
/* -- switched state -- */
remlen = mq->remaining_length;
- infof(data, "Remaining length: %zd bytes", remlen);
+ infof(data, "Remaining length: %zu bytes", remlen);
if(data->set.max_filesize &&
(curl_off_t)remlen > data->set.max_filesize) {
failf(data, "Maximum file size exceeded");
@@ -649,7 +674,6 @@ static CURLcode mqtt_read_publish(struct Curl_easy *data, bool *done)
/* FALLTHROUGH */
case MQTT_PUB_REMAIN: {
/* read rest of packet, but no more. Cap to buffer size */
- struct SingleRequest *k = &data->req;
size_t rest = mq->npacket;
if(rest > (size_t)data->set.buffer_size)
rest = (size_t)data->set.buffer_size;
@@ -665,11 +689,8 @@ static CURLcode mqtt_read_publish(struct Curl_easy *data, bool *done)
result = CURLE_PARTIAL_FILE;
goto end;
}
- Curl_debug(data, CURLINFO_DATA_IN, (char *)pkt, (size_t)nread);
mq->npacket -= nread;
- k->bytecount += nread;
- Curl_pgrsSetDownloadCounter(data, k->bytecount);
/* if QoS is set, message contains packet id */
@@ -687,7 +708,7 @@ static CURLcode mqtt_read_publish(struct Curl_easy *data, bool *done)
result = CURLE_WEIRD_SERVER_REPLY;
goto end;
}
- end:
+end:
return result;
}
@@ -712,6 +733,7 @@ static CURLcode mqtt_done(struct Curl_easy *data,
(void)status;
(void)premature;
Curl_safefree(mq->sendleftovers);
+ Curl_dyn_free(&mq->recvbuf);
return CURLE_OK;
}
diff --git a/lib/mqtt.h b/lib/mqtt.h
index c400d9b14..84f177022 100644
--- a/lib/mqtt.h
+++ b/lib/mqtt.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2019 - 2022, Björn Stenberg, <bjorn@haxx.se>
+ * Copyright (C) Björn Stenberg, <bjorn@haxx.se>
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -56,6 +56,7 @@ struct MQTT {
size_t npacket; /* byte counter */
unsigned char firstbyte;
size_t remaining_length;
+ struct dynbuf recvbuf;
};
#endif /* HEADER_CURL_MQTT_H */
diff --git a/lib/multi.c b/lib/multi.c
index 51acba73a..5456113be 100644
--- a/lib/multi.c
+++ b/lib/multi.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -29,6 +29,7 @@
#include "urldata.h"
#include "transfer.h"
#include "url.h"
+#include "cfilters.h"
#include "connect.h"
#include "progress.h"
#include "easyif.h"
@@ -54,22 +55,6 @@
#include "curl_memory.h"
#include "memdebug.h"
-#ifdef __APPLE__
-
-#define wakeup_write write
-#define wakeup_read read
-#define wakeup_close close
-#define wakeup_create pipe
-
-#else /* __APPLE__ */
-
-#define wakeup_write swrite
-#define wakeup_read sread
-#define wakeup_close sclose
-#define wakeup_create(p) Curl_socketpair(AF_UNIX, SOCK_STREAM, 0, p)
-
-#endif /* __APPLE__ */
-
/*
CURL_SOCKET_HASH_TABLE_SIZE should be a prime number. Increasing it from 97
to 911 takes on a 32-bit machine 4 x 804 = 3211 more bytes. Still, every
@@ -89,8 +74,17 @@
#define CURL_MULTI_HANDLE 0x000bab1e
+#ifdef DEBUGBUILD
+/* On a debug build, we want to fail hard on multi handles that
+ * are not NULL, but no longer have the MAGIC touch. This gives
+ * us early warning on things only discovered by valgrind otherwise. */
+#define GOOD_MULTI_HANDLE(x) \
+ (((x) && (x)->magic == CURL_MULTI_HANDLE)? TRUE: \
+ (DEBUGASSERT(!(x)), FALSE))
+#else
#define GOOD_MULTI_HANDLE(x) \
((x) && (x)->magic == CURL_MULTI_HANDLE)
+#endif
static CURLMcode singlesocket(struct Curl_multi *multi,
struct Curl_easy *data);
@@ -102,7 +96,7 @@ static CURLMcode multi_timeout(struct Curl_multi *multi,
static void process_pending_handles(struct Curl_multi *multi);
#ifdef DEBUGBUILD
-static const char * const statename[]={
+static const char * const multi_statename[]={
"INIT",
"PENDING",
"CONNECT",
@@ -160,7 +154,7 @@ static void mstate(struct Curl_easy *data, CURLMstate state
NULL, /* TUNNELING */
NULL, /* PROTOCONNECT */
NULL, /* PROTOCONNECTING */
- Curl_connect_free, /* DO */
+ NULL, /* DO */
NULL, /* DOING */
NULL, /* DOING_MORE */
before_perform, /* DID */
@@ -184,15 +178,10 @@ static void mstate(struct Curl_easy *data, CURLMstate state
#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
if(data->mstate >= MSTATE_PENDING &&
data->mstate < MSTATE_COMPLETED) {
- long connection_id = -5000;
-
- if(data->conn)
- connection_id = data->conn->connection_id;
-
infof(data,
- "STATE: %s => %s handle %p; line %d (connection #%ld)",
- statename[oldstate], statename[data->mstate],
- (void *)data, lineno, connection_id);
+ "STATE: %s => %s handle %p; line %d",
+ multi_statename[oldstate], multi_statename[data->mstate],
+ (void *)data, lineno);
}
#endif
@@ -226,10 +215,6 @@ struct Curl_sh_entry {
unsigned int readers; /* this many transfers want to read */
unsigned int writers; /* this many transfers want to write */
};
-/* bits for 'action' having no bits means this socket is not expecting any
- action */
-#define SH_READ 1
-#define SH_WRITE 2
/* look up a given socket in the socket hash, skip invalid sockets */
static struct Curl_sh_entry *sh_getentry(struct Curl_hash *sh,
@@ -382,12 +367,10 @@ static void sh_init(struct Curl_hash *hash, int hashsize)
* Called when a transfer is completed. Adds the given msg pointer to
* the list kept in the multi handle.
*/
-static CURLMcode multi_addmsg(struct Curl_multi *multi,
- struct Curl_message *msg)
+static void multi_addmsg(struct Curl_multi *multi, struct Curl_message *msg)
{
Curl_llist_insert_next(&multi->msglist, multi->msglist.tail, msg,
&msg->list);
- return CURLM_OK;
}
struct Curl_multi *Curl_multi_handle(int hashsize, /* socket hash */
@@ -410,11 +393,9 @@ struct Curl_multi *Curl_multi_handle(int hashsize, /* socket hash */
Curl_llist_init(&multi->msglist, NULL);
Curl_llist_init(&multi->pending, NULL);
+ Curl_llist_init(&multi->msgsent, NULL);
multi->multiplexing = TRUE;
-
- /* -1 means it not set by user, use the default value */
- multi->maxconnects = -1;
multi->max_concurrent_streams = 100;
#ifdef USE_WINSOCK
@@ -439,14 +420,11 @@ struct Curl_multi *Curl_multi_handle(int hashsize, /* socket hash */
return multi;
- error:
+error:
sockhash_destroy(&multi->sockhash);
Curl_hash_destroy(&multi->hostcache);
Curl_conncache_destroy(&multi->conn_cache);
- Curl_llist_destroy(&multi->msglist, NULL);
- Curl_llist_destroy(&multi->pending, NULL);
-
free(multi);
return NULL;
}
@@ -458,6 +436,66 @@ struct Curl_multi *curl_multi_init(void)
CURL_DNS_HASH_SIZE);
}
+#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
+static void multi_warn_debug(struct Curl_multi *multi, struct Curl_easy *data)
+{
+ if(!multi->warned) {
+ infof(data, "!!! WARNING !!!");
+ infof(data, "This is a debug build of libcurl, "
+ "do not use in production.");
+ multi->warned = true;
+ }
+}
+#else
+#define multi_warn_debug(x,y) Curl_nop_stmt
+#endif
+
+/* returns TRUE if the easy handle is supposed to be present in the main link
+ list */
+static bool in_main_list(struct Curl_easy *data)
+{
+ return ((data->mstate != MSTATE_PENDING) &&
+ (data->mstate != MSTATE_MSGSENT));
+}
+
+static void link_easy(struct Curl_multi *multi,
+ struct Curl_easy *data)
+{
+ /* We add the new easy entry last in the list. */
+ data->next = NULL; /* end of the line */
+ if(multi->easyp) {
+ struct Curl_easy *last = multi->easylp;
+ last->next = data;
+ data->prev = last;
+ multi->easylp = data; /* the new last node */
+ }
+ else {
+ /* first node, make prev NULL! */
+ data->prev = NULL;
+ multi->easylp = multi->easyp = data; /* both first and last */
+ }
+}
+
+/* unlink the given easy handle from the linked list of easy handles */
+static void unlink_easy(struct Curl_multi *multi,
+ struct Curl_easy *data)
+{
+ /* make the previous node point to our next */
+ if(data->prev)
+ data->prev->next = data->next;
+ else
+ multi->easyp = data->next; /* point to first node */
+
+ /* make our next point to our previous node */
+ if(data->next)
+ data->next->prev = data->prev;
+ else
+ multi->easylp = data->prev; /* point to last node */
+
+ data->prev = data->next = NULL;
+}
+
+
CURLMcode curl_multi_add_handle(struct Curl_multi *multi,
struct Curl_easy *data)
{
@@ -553,19 +591,7 @@ CURLMcode curl_multi_add_handle(struct Curl_multi *multi,
data->psl = &multi->psl;
#endif
- /* We add the new entry last in the list. */
- data->next = NULL; /* end of the line */
- if(multi->easyp) {
- struct Curl_easy *last = multi->easylp;
- last->next = data;
- data->prev = last;
- multi->easylp = data; /* the new last node */
- }
- else {
- /* first node, make prev NULL! */
- data->prev = NULL;
- multi->easylp = multi->easyp = data; /* both first and last */
- }
+ link_easy(multi, data);
/* increase the node-counter */
multi->num_easy++;
@@ -583,8 +609,13 @@ CURLMcode curl_multi_add_handle(struct Curl_multi *multi,
data->set.server_response_timeout;
data->state.conn_cache->closure_handle->set.no_signal =
data->set.no_signal;
+ data->id = data->state.conn_cache->next_easy_id++;
+ if(data->state.conn_cache->next_easy_id <= 0)
+ data->state.conn_cache->next_easy_id = 0;
CONNCACHE_UNLOCK(data);
+ multi_warn_debug(multi, data);
+
return CURLM_OK;
}
@@ -611,10 +642,15 @@ static CURLcode multi_done(struct Curl_easy *data,
{
CURLcode result;
struct connectdata *conn = data->conn;
- unsigned int i;
+#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
+ DEBUGF(infof(data, "multi_done[%s]: status: %d prem: %d done: %d",
+ multi_statename[data->mstate],
+ (int)status, (int)premature, data->state.done));
+#else
DEBUGF(infof(data, "multi_done: status: %d prem: %d done: %d",
(int)status, (int)premature, data->state.done));
+#endif
if(data->state.done)
/* Stop if multi_done() has already been called */
@@ -654,8 +690,15 @@ static CURLcode multi_done(struct Curl_easy *data,
result = CURLE_ABORTED_BY_CALLBACK;
}
+ /* Inform connection filters that this transfer is done */
+ Curl_conn_ev_data_done(data, premature);
+
process_pending_handles(data->multi); /* connection / multiplex */
+ Curl_safefree(data->state.ulbuf);
+
+ Curl_client_cleanup(data);
+
CONNCACHE_LOCK(data);
Curl_detach_connection(data);
if(CONN_INUSE(conn)) {
@@ -674,14 +717,6 @@ static CURLcode multi_done(struct Curl_easy *data,
conn->dns_entry = NULL;
}
Curl_hostcache_prune(data);
- Curl_safefree(data->state.ulbuf);
-
- /* if the transfer was completed in a paused state there can be buffered
- data left to free */
- for(i = 0; i < data->state.tempcount; i++) {
- Curl_dyn_free(&data->state.tempwrite[i].b);
- }
- data->state.tempcount = 0;
/* if data->set.reuse_forbid is TRUE, it means the libcurl client has
forced us to close this connection. This is ignored for requests taking
@@ -693,11 +728,12 @@ static CURLcode multi_done(struct Curl_easy *data,
if premature is TRUE, it means this connection was said to be DONE before
the entire request operation is complete and thus we can't know in what
- state it is for re-using, so we're forced to close it. In a perfect world
+ state it is for reusing, so we're forced to close it. In a perfect world
we can add code that keep track of if we really must close it here or not,
but currently we have no such detail knowledge.
*/
+ data->state.recent_conn_id = conn->connection_id;
if((data->set.reuse_forbid
#if defined(USE_NTLM)
&& !(conn->http_ntlm_state == NTLMSTATE_TYPE2 ||
@@ -708,7 +744,13 @@ static CURLcode multi_done(struct Curl_easy *data,
conn->proxy_negotiate_state == GSS_AUTHRECV)
#endif
) || conn->bits.close
- || (premature && !(conn->handler->flags & PROTOPT_STREAM))) {
+ || (premature && !Curl_conn_is_multiplex(conn, FIRSTSOCKET))) {
+ DEBUGF(infof(data, "multi_done, not reusing connection=%"
+ CURL_FORMAT_CURL_OFF_T ", forbid=%d"
+ ", close=%d, premature=%d, conn_multiplex=%d",
+ conn->connection_id,
+ data->set.reuse_forbid, conn->bits.close, premature,
+ Curl_conn_is_multiplex(conn, FIRSTSOCKET)));
connclose(conn, "disconnecting");
Curl_conncache_remove_conn(data, conn, FALSE);
CONNCACHE_UNLOCK(data);
@@ -725,15 +767,16 @@ static CURLcode multi_done(struct Curl_easy *data,
conn->bits.conn_to_host ? conn->conn_to_host.dispname :
conn->host.dispname;
/* create string before returning the connection */
- long connection_id = conn->connection_id;
+ curl_off_t connection_id = conn->connection_id;
msnprintf(buffer, sizeof(buffer),
- "Connection #%ld to host %s left intact",
+ "Connection #%" CURL_FORMAT_CURL_OFF_T " to host %s left intact",
connection_id, host);
/* the connection is no longer in use by this transfer */
CONNCACHE_UNLOCK(data);
if(Curl_conncache_return_conn(data, conn)) {
/* remember the most recently used connection */
data->state.lastconnect_id = connection_id;
+ data->state.recent_conn_id = connection_id;
infof(data, "%s", buffer);
}
else
@@ -818,10 +861,16 @@ CURLMcode curl_multi_remove_handle(struct Curl_multi *multi,
called. Do it after multi_done() in case that sets another time! */
Curl_expire_clear(data);
- if(data->connect_queue.ptr)
- /* the handle was in the pending list waiting for an available connection,
- so go ahead and remove it */
- Curl_llist_remove(&multi->pending, &data->connect_queue, NULL);
+ if(data->connect_queue.ptr) {
+ /* the handle is in the pending or msgsent lists, so go ahead and remove
+ it */
+ if(data->mstate == MSTATE_PENDING)
+ Curl_llist_remove(&multi->pending, &data->connect_queue, NULL);
+ else
+ Curl_llist_remove(&multi->msgsent, &data->connect_queue, NULL);
+ }
+ if(in_main_list(data))
+ unlink_easy(multi, data);
if(data->dns.hostcachetype == HCACHE_MULTI) {
/* stop using the multi handle's DNS cache, *after* the possible
@@ -832,10 +881,6 @@ CURLMcode curl_multi_remove_handle(struct Curl_multi *multi,
Curl_wildcard_dtor(&data->wildcard);
- /* destroy the timeout list that is held in the easy handle, do this *after*
- multi_done() as that may actually call Curl_expire that uses this */
- Curl_llist_destroy(&data->state.timeoutlist, NULL);
-
/* change state without using multistate(), only to make singlesocket() do
what we want */
data->mstate = MSTATE_COMPLETED;
@@ -886,7 +931,6 @@ CURLMcode curl_multi_remove_handle(struct Curl_multi *multi,
/* make sure there's no pending message in the queue sent from this easy
handle */
-
for(e = multi->msglist.head; e; e = e->next) {
struct Curl_message *msg = e->ptr;
@@ -897,29 +941,6 @@ CURLMcode curl_multi_remove_handle(struct Curl_multi *multi,
}
}
- /* Remove from the pending list if it is there. Otherwise this will
- remain on the pending list forever due to the state change. */
- for(e = multi->pending.head; e; e = e->next) {
- struct Curl_easy *curr_data = e->ptr;
-
- if(curr_data == data) {
- Curl_llist_remove(&multi->pending, e, NULL);
- break;
- }
- }
-
- /* make the previous node point to our next */
- if(data->prev)
- data->prev->next = data->next;
- else
- multi->easyp = data->next; /* point to first node */
-
- /* make our next point to our previous node */
- if(data->next)
- data->next->prev = data->prev;
- else
- multi->easylp = data->prev; /* point to last node */
-
/* NOTE NOTE NOTE
We do not touch the easy handle here! */
multi->num_easy--; /* one less to care about now */
@@ -948,9 +969,8 @@ void Curl_detach_connection(struct Curl_easy *data)
{
struct connectdata *conn = data->conn;
if(conn) {
- Curl_connect_done(data); /* if mid-CONNECT, shut it down */
+ Curl_conn_ev_data_detach(conn, data);
Curl_llist_remove(&conn->easyq, &data->conn_queue, NULL);
- Curl_ssl_detach_conn(data, conn);
}
data->conn = NULL;
}
@@ -968,53 +988,9 @@ void Curl_attach_connection(struct Curl_easy *data,
data->conn = conn;
Curl_llist_insert_next(&conn->easyq, conn->easyq.tail, data,
&data->conn_queue);
- if(conn->handler->attach)
+ if(conn->handler && conn->handler->attach)
conn->handler->attach(data, conn);
- Curl_ssl_associate_conn(data, conn);
-}
-
-static int waitconnect_getsock(struct connectdata *conn,
- curl_socket_t *sock)
-{
- int i;
- int s = 0;
- int rc = 0;
-
-#ifdef USE_SSL
-#ifndef CURL_DISABLE_PROXY
- if(CONNECT_FIRSTSOCKET_PROXY_SSL())
- return Curl_ssl->getsock(conn, sock);
-#endif
-#endif
-
- if(SOCKS_STATE(conn->cnnct.state))
- return Curl_SOCKS_getsock(conn, sock, FIRSTSOCKET);
-
- for(i = 0; i<2; i++) {
- if(conn->tempsock[i] != CURL_SOCKET_BAD) {
- sock[s] = conn->tempsock[i];
- rc |= GETSOCK_WRITESOCK(s);
-#ifdef ENABLE_QUIC
- if(conn->transport == TRNSPRT_QUIC)
- /* when connecting QUIC, we want to read the socket too */
- rc |= GETSOCK_READSOCK(s);
-#endif
- s++;
- }
- }
-
- return rc;
-}
-
-static int waitproxyconnect_getsock(struct connectdata *conn,
- curl_socket_t *sock)
-{
- sock[0] = conn->sock[FIRSTSOCKET];
-
- if(conn->connect_state)
- return Curl_connect_getsock(conn);
-
- return GETSOCK_WRITESOCK(0);
+ Curl_conn_ev_data_attach(conn, data);
}
static int domore_getsock(struct Curl_easy *data,
@@ -1041,55 +1017,61 @@ static int protocol_getsock(struct Curl_easy *data,
{
if(conn->handler->proto_getsock)
return conn->handler->proto_getsock(data, conn, socks);
- /* Backup getsock logic. Since there is a live socket in use, we must wait
- for it or it will be removed from watching when the multi_socket API is
- used. */
- socks[0] = conn->sock[FIRSTSOCKET];
- return GETSOCK_READSOCK(0) | GETSOCK_WRITESOCK(0);
+ return GETSOCK_BLANK;
}
-/* returns bitmapped flags for this handle and its sockets. The 'socks[]'
- array contains MAX_SOCKSPEREASYHANDLE entries. */
-static int multi_getsock(struct Curl_easy *data,
- curl_socket_t *socks)
+/* Initializes `poll_set` with the current socket poll actions needed
+ * for transfer `data`. */
+static void multi_getsock(struct Curl_easy *data,
+ struct easy_pollset *ps)
{
- struct connectdata *conn = data->conn;
/* The no connection case can happen when this is called from
curl_multi_remove_handle() => singlesocket() => multi_getsock().
*/
- if(!conn)
- return 0;
+ Curl_pollset_reset(data, ps);
+ if(!data->conn)
+ return;
switch(data->mstate) {
default:
- return 0;
+ break;
case MSTATE_RESOLVING:
- return Curl_resolv_getsock(data, socks);
+ Curl_pollset_add_socks2(data, ps, Curl_resolv_getsock);
+ /* connection filters are not involved in this phase */
+ return;
case MSTATE_PROTOCONNECTING:
case MSTATE_PROTOCONNECT:
- return protocol_getsock(data, conn, socks);
+ Curl_pollset_add_socks(data, ps, protocol_getsock);
+ break;
case MSTATE_DO:
case MSTATE_DOING:
- return doing_getsock(data, conn, socks);
+ Curl_pollset_add_socks(data, ps, doing_getsock);
+ break;
case MSTATE_TUNNELING:
- return waitproxyconnect_getsock(conn, socks);
-
case MSTATE_CONNECTING:
- return waitconnect_getsock(conn, socks);
+ break;
case MSTATE_DOING_MORE:
- return domore_getsock(data, conn, socks);
+ Curl_pollset_add_socks(data, ps, domore_getsock);
+ break;
case MSTATE_DID: /* since is set after DO is completed, we switch to
waiting for the same as the PERFORMING state */
case MSTATE_PERFORMING:
- return Curl_single_getsock(data, conn, socks);
+ Curl_pollset_add_socks(data, ps, Curl_single_getsock);
+ break;
+
+ case MSTATE_RATELIMITING:
+ /* nothing to wait for */
+ return;
}
+ /* Let connection filters add/remove as needed */
+ Curl_conn_adjust_pollset(data, ps);
}
CURLMcode curl_multi_fdset(struct Curl_multi *multi,
@@ -1101,8 +1083,8 @@ CURLMcode curl_multi_fdset(struct Curl_multi *multi,
and then we must make sure that is done. */
struct Curl_easy *data;
int this_max_fd = -1;
- curl_socket_t sockbunch[MAX_SOCKSPEREASYHANDLE];
- int i;
+ struct easy_pollset ps;
+ unsigned int i;
(void)exc_fd_set; /* not used */
if(!GOOD_MULTI_HANDLE(multi))
@@ -1111,40 +1093,21 @@ CURLMcode curl_multi_fdset(struct Curl_multi *multi,
if(multi->in_callback)
return CURLM_RECURSIVE_API_CALL;
- data = multi->easyp;
- while(data) {
- int bitmap;
-#ifdef __clang_analyzer_
- /* to prevent "The left operand of '>=' is a garbage value" warnings */
- memset(sockbunch, 0, sizeof(sockbunch));
-#endif
- bitmap = multi_getsock(data, sockbunch);
-
- for(i = 0; i< MAX_SOCKSPEREASYHANDLE; i++) {
- curl_socket_t s = CURL_SOCKET_BAD;
-
- if((bitmap & GETSOCK_READSOCK(i)) && VALID_SOCK(sockbunch[i])) {
- if(!FDSET_SOCK(sockbunch[i]))
- /* pretend it doesn't exist */
- continue;
- FD_SET(sockbunch[i], read_fd_set);
- s = sockbunch[i];
- }
- if((bitmap & GETSOCK_WRITESOCK(i)) && VALID_SOCK(sockbunch[i])) {
- if(!FDSET_SOCK(sockbunch[i]))
- /* pretend it doesn't exist */
- continue;
- FD_SET(sockbunch[i], write_fd_set);
- s = sockbunch[i];
- }
- if(s == CURL_SOCKET_BAD)
- /* this socket is unused, break out of loop */
- break;
- if((int)s > this_max_fd)
- this_max_fd = (int)s;
+ memset(&ps, 0, sizeof(ps));
+ for(data = multi->easyp; data; data = data->next) {
+ multi_getsock(data, &ps);
+
+ for(i = 0; i < ps.num; i++) {
+ if(!FDSET_SOCK(ps.sockets[i]))
+ /* pretend it doesn't exist */
+ continue;
+ if(ps.actions[i] & CURL_POLL_IN)
+ FD_SET(ps.sockets[i], read_fd_set);
+ if(ps.actions[i] & CURL_POLL_OUT)
+ FD_SET(ps.sockets[i], write_fd_set);
+ if((int)ps.sockets[i] > this_max_fd)
+ this_max_fd = (int)ps.sockets[i];
}
-
- data = data->next; /* check next handle */
}
*max_fd = this_max_fd;
@@ -1152,6 +1115,22 @@ CURLMcode curl_multi_fdset(struct Curl_multi *multi,
return CURLM_OK;
}
+#ifdef USE_WINSOCK
+/* Reset FD_WRITE for TCP sockets. Nothing is actually sent. UDP sockets can't
+ * be reset this way because an empty datagram would be sent. #9203
+ *
+ * "On Windows the internal state of FD_WRITE as returned from
+ * WSAEnumNetworkEvents is only reset after successful send()."
+ */
+static void reset_socket_fdwrite(curl_socket_t s)
+{
+ int t;
+ int l = (int)sizeof(t);
+ if(!getsockopt(s, SOL_SOCKET, SO_TYPE, (char *)&t, &l) && t == SOCK_STREAM)
+ send(s, NULL, 0, 0);
+}
+#endif
+
#define NUM_POLLS_ON_STACK 10
static CURLMcode multi_wait(struct Curl_multi *multi,
@@ -1163,9 +1142,8 @@ static CURLMcode multi_wait(struct Curl_multi *multi,
bool use_wakeup)
{
struct Curl_easy *data;
- curl_socket_t sockbunch[MAX_SOCKSPEREASYHANDLE];
- int bitmap;
- unsigned int i;
+ struct easy_pollset ps;
+ size_t i;
unsigned int nfds = 0;
unsigned int curlfds;
long timeout_internal;
@@ -1191,27 +1169,10 @@ static CURLMcode multi_wait(struct Curl_multi *multi,
return CURLM_BAD_FUNCTION_ARGUMENT;
/* Count up how many fds we have from the multi handle */
- data = multi->easyp;
- while(data) {
- bitmap = multi_getsock(data, sockbunch);
-
- for(i = 0; i< MAX_SOCKSPEREASYHANDLE; i++) {
- curl_socket_t s = CURL_SOCKET_BAD;
-
- if((bitmap & GETSOCK_READSOCK(i)) && VALID_SOCK((sockbunch[i]))) {
- ++nfds;
- s = sockbunch[i];
- }
- if((bitmap & GETSOCK_WRITESOCK(i)) && VALID_SOCK((sockbunch[i]))) {
- ++nfds;
- s = sockbunch[i];
- }
- if(s == CURL_SOCKET_BAD) {
- break;
- }
- }
-
- data = data->next; /* check next handle */
+ memset(&ps, 0, sizeof(ps));
+ for(data = multi->easyp; data; data = data->next) {
+ multi_getsock(data, &ps);
+ nfds += ps.num;
}
/* If the internally desired timeout is actually shorter than requested from
@@ -1251,49 +1212,37 @@ static CURLMcode multi_wait(struct Curl_multi *multi,
if(curlfds) {
/* Add the curl handles to our pollfds first */
- data = multi->easyp;
- while(data) {
- bitmap = multi_getsock(data, sockbunch);
+ for(data = multi->easyp; data; data = data->next) {
+ multi_getsock(data, &ps);
- for(i = 0; i < MAX_SOCKSPEREASYHANDLE; i++) {
- curl_socket_t s = CURL_SOCKET_BAD;
+ for(i = 0; i < ps.num; i++) {
+ struct pollfd *ufd = &ufds[nfds++];
#ifdef USE_WINSOCK
long mask = 0;
#endif
- if((bitmap & GETSOCK_READSOCK(i)) && VALID_SOCK((sockbunch[i]))) {
- s = sockbunch[i];
+ ufd->fd = ps.sockets[i];
+ ufd->events = 0;
+ if(ps.actions[i] & CURL_POLL_IN) {
#ifdef USE_WINSOCK
mask |= FD_READ|FD_ACCEPT|FD_CLOSE;
#endif
- ufds[nfds].fd = s;
- ufds[nfds].events = POLLIN;
- ++nfds;
+ ufd->events |= POLLIN;
}
- if((bitmap & GETSOCK_WRITESOCK(i)) && VALID_SOCK((sockbunch[i]))) {
- s = sockbunch[i];
+ if(ps.actions[i] & CURL_POLL_OUT) {
#ifdef USE_WINSOCK
mask |= FD_WRITE|FD_CONNECT|FD_CLOSE;
- send(s, NULL, 0, 0); /* reset FD_WRITE */
+ reset_socket_fdwrite(ps.sockets[i]);
#endif
- ufds[nfds].fd = s;
- ufds[nfds].events = POLLOUT;
- ++nfds;
- }
- /* s is only set if either being readable or writable is checked */
- if(s == CURL_SOCKET_BAD) {
- /* break on entry not checked for being readable or writable */
- break;
+ ufd->events |= POLLOUT;
}
#ifdef USE_WINSOCK
- if(WSAEventSelect(s, multi->wsa_event, mask) != 0) {
+ if(WSAEventSelect(ps.sockets[i], multi->wsa_event, mask) != 0) {
if(ufds_malloc)
free(ufds);
return CURLM_INTERNAL_ERROR;
}
#endif
}
-
- data = data->next; /* check next handle */
}
}
@@ -1307,7 +1256,7 @@ static CURLMcode multi_wait(struct Curl_multi *multi,
mask |= FD_OOB;
if(extra_fds[i].events & CURL_WAIT_POLLOUT) {
mask |= FD_WRITE|FD_CONNECT|FD_CLOSE;
- send(extra_fds[i].fd, NULL, 0, 0); /* reset FD_WRITE */
+ reset_socket_fdwrite(extra_fds[i].fd);
}
if(WSAEventSelect(extra_fds[i].fd, multi->wsa_event, mask) != 0) {
if(ufds_malloc)
@@ -1402,26 +1351,19 @@ static CURLMcode multi_wait(struct Curl_multi *multi,
/* Count up all our own sockets that had activity,
and remove them from the event. */
if(curlfds) {
- data = multi->easyp;
- while(data) {
- bitmap = multi_getsock(data, sockbunch);
-
- for(i = 0; i < MAX_SOCKSPEREASYHANDLE; i++) {
- if(bitmap & (GETSOCK_READSOCK(i) | GETSOCK_WRITESOCK(i))) {
- wsa_events.lNetworkEvents = 0;
- if(WSAEnumNetworkEvents(sockbunch[i], NULL, &wsa_events) == 0) {
- if(ret && !pollrc && wsa_events.lNetworkEvents)
- retcode++;
- }
- WSAEventSelect(sockbunch[i], multi->wsa_event, 0);
- }
- else {
- /* break on entry not checked for being readable or writable */
- break;
+
+ for(data = multi->easyp; data; data = data->next) {
+ multi_getsock(data, &ps);
+
+ for(i = 0; i < ps.num; i++) {
+ wsa_events.lNetworkEvents = 0;
+ if(WSAEnumNetworkEvents(ps.sockets[i], NULL,
+ &wsa_events) == 0) {
+ if(ret && !pollrc && wsa_events.lNetworkEvents)
+ retcode++;
}
+ WSAEventSelect(ps.sockets[i], multi->wsa_event, 0);
}
-
- data = data->next;
}
}
@@ -1567,6 +1509,18 @@ static bool multi_ischanged(struct Curl_multi *multi, bool clear)
return retval;
}
+/*
+ * Curl_multi_connchanged() is called to tell that there is a connection in
+ * this multi handle that has changed state (multiplexing become possible, the
+ * number of allowed streams changed or similar), and a subsequent use of this
+ * multi handle should move CONNECT_PEND handles back to CONNECT to have them
+ * retry.
+ */
+void Curl_multi_connchanged(struct Curl_multi *multi)
+{
+ multi->recheckstate = TRUE;
+}
+
CURLMcode Curl_multi_add_perform(struct Curl_multi *multi,
struct Curl_easy *data,
struct connectdata *conn)
@@ -1601,7 +1555,6 @@ static CURLcode multi_do(struct Curl_easy *data, bool *done)
DEBUGASSERT(conn->handler);
if(conn->handler->do_it)
- /* generic protocol-specific function pointer set in curl_connect() */
result = conn->handler->do_it(data, done);
return result;
@@ -1737,7 +1690,8 @@ static CURLcode protocol_connect(struct Curl_easy *data,
*protocol_done = FALSE;
- if(conn->bits.tcpconnect[FIRSTSOCKET] && conn->bits.protoconnstart) {
+ if(Curl_conn_is_connected(conn, FIRSTSOCKET)
+ && conn->bits.protoconnstart) {
/* We already are connected, get back. This may happen when the connect
worked fine in the first call, like when we connect to a local server
or proxy. Note that we don't know if the protocol is actually done.
@@ -1751,21 +1705,6 @@ static CURLcode protocol_connect(struct Curl_easy *data,
}
if(!conn->bits.protoconnstart) {
-#ifndef CURL_DISABLE_PROXY
- result = Curl_proxy_connect(data, FIRSTSOCKET);
- if(result)
- return result;
-
- if(CONNECT_FIRSTSOCKET_PROXY_SSL())
- /* wait for HTTPS proxy SSL initialization to complete */
- return CURLE_OK;
-
- if(conn->bits.tunnel_proxy && conn->bits.httpproxy &&
- Curl_connect_ongoing(conn))
- /* when using an HTTP tunnel proxy, await complete tunnel establishment
- before proceeding further. Return CURLE_OK so we'll be called again */
- return CURLE_OK;
-#endif
if(conn->handler->connect_it) {
/* is there a protocol-specific connect() procedure? */
@@ -1785,6 +1724,89 @@ static CURLcode protocol_connect(struct Curl_easy *data,
}
/*
+ * readrewind() rewinds the read stream. This is typically used for HTTP
+ * POST/PUT with multi-pass authentication when a sending was denied and a
+ * resend is necessary.
+ */
+static CURLcode readrewind(struct Curl_easy *data)
+{
+ curl_mimepart *mimepart = &data->set.mimepost;
+ DEBUGASSERT(data->conn);
+
+ data->state.rewindbeforesend = FALSE; /* we rewind now */
+
+ /* explicitly switch off sending data on this connection now since we are
+ about to restart a new transfer and thus we want to avoid inadvertently
+ sending more data on the existing connection until the next transfer
+ starts */
+ data->req.keepon &= ~KEEP_SEND;
+
+ /* We have sent away data. If not using CURLOPT_POSTFIELDS or
+ CURLOPT_HTTPPOST, call app to rewind
+ */
+#ifndef CURL_DISABLE_HTTP
+ if(data->conn->handler->protocol & PROTO_FAMILY_HTTP) {
+ if(data->state.mimepost)
+ mimepart = data->state.mimepost;
+ }
+#endif
+ if(data->set.postfields ||
+ (data->state.httpreq == HTTPREQ_GET) ||
+ (data->state.httpreq == HTTPREQ_HEAD))
+ ; /* no need to rewind */
+ else if(data->state.httpreq == HTTPREQ_POST_MIME ||
+ data->state.httpreq == HTTPREQ_POST_FORM) {
+ CURLcode result = Curl_mime_rewind(mimepart);
+ if(result) {
+ failf(data, "Cannot rewind mime/post data");
+ return result;
+ }
+ }
+ else {
+ if(data->set.seek_func) {
+ int err;
+
+ Curl_set_in_callback(data, true);
+ err = (data->set.seek_func)(data->set.seek_client, 0, SEEK_SET);
+ Curl_set_in_callback(data, false);
+ if(err) {
+ failf(data, "seek callback returned error %d", (int)err);
+ return CURLE_SEND_FAIL_REWIND;
+ }
+ }
+ else if(data->set.ioctl_func) {
+ curlioerr err;
+
+ Curl_set_in_callback(data, true);
+ err = (data->set.ioctl_func)(data, CURLIOCMD_RESTARTREAD,
+ data->set.ioctl_client);
+ Curl_set_in_callback(data, false);
+ infof(data, "the ioctl callback returned %d", (int)err);
+
+ if(err) {
+ failf(data, "ioctl callback returned error %d", (int)err);
+ return CURLE_SEND_FAIL_REWIND;
+ }
+ }
+ else {
+ /* If no CURLOPT_READFUNCTION is used, we know that we operate on a
+ given FILE * stream and we can actually attempt to rewind that
+ ourselves with fseek() */
+ if(data->state.fread_func == (curl_read_callback)fread) {
+ if(-1 != fseek(data->state.in, 0, SEEK_SET))
+ /* successful rewind */
+ return CURLE_OK;
+ }
+
+ /* no callback set or failure above, makes us fail at once */
+ failf(data, "necessary data rewind wasn't possible");
+ return CURLE_SEND_FAIL_REWIND;
+ }
+ }
+ return CURLE_OK;
+}
+
+/*
* Curl_preconnect() is called immediately before a connect starts. When a
* redirect is followed, this is then called multiple times during a single
* transfer.
@@ -1796,6 +1818,7 @@ CURLcode Curl_preconnect(struct Curl_easy *data)
if(!data->state.buffer)
return CURLE_OUT_OF_MEMORY;
}
+
return CURLE_OK;
}
@@ -1832,6 +1855,8 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
multistate(data, MSTATE_COMPLETED);
}
+ multi_warn_debug(multi, data);
+
do {
/* A "stream" here is a logical stream if the protocol can handle that
(HTTP/2), or the full connection for older protocols */
@@ -1882,11 +1907,6 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
}
break;
- case MSTATE_PENDING:
- /* We will stay here until there is a connection available. Then
- we try again in the MSTATE_CONNECT state. */
- break;
-
case MSTATE_CONNECT:
/* Connect. We want to get a connection identifier filled in. */
/* init this transfer. */
@@ -1901,7 +1921,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
if(data->set.connecttimeout)
Curl_expire(data, data->set.connecttimeout, EXPIRE_CONNECTTIMEOUT);
- result = Curl_connect(data, &async, &protocol_connected);
+ result = Curl_connect(data, &async, &connected);
if(CURLE_NO_CONNECTION_AVAILABLE == result) {
/* There was no connection available. We will go to the pending
state and wait for an available connection. */
@@ -1910,6 +1930,8 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
/* add this handle to the list of connect-pending handles */
Curl_llist_insert_next(&multi->pending, multi->pending.tail, data,
&data->connect_queue);
+ /* unlink from the main list */
+ unlink_easy(multi, data);
result = CURLE_OK;
break;
}
@@ -1929,15 +1951,10 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
WAITDO or DO! */
rc = CURLM_CALL_MULTI_PERFORM;
- if(protocol_connected)
- multistate(data, MSTATE_DO);
+ if(connected)
+ multistate(data, MSTATE_PROTOCONNECT);
else {
-#ifndef CURL_DISABLE_HTTP
- if(Curl_connect_ongoing(data->conn))
- multistate(data, MSTATE_TUNNELING);
- else
-#endif
- multistate(data, MSTATE_CONNECTING);
+ multistate(data, MSTATE_CONNECTING);
}
}
}
@@ -1957,7 +1974,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
else
#endif
if(conn->bits.conn_to_host)
- hostname = conn->conn_to_host.name;
+ hostname = conn->conn_to_host.name;
else
hostname = conn->host.name;
@@ -1966,8 +1983,8 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
if(dns) {
#ifdef CURLRES_ASYNCH
- data->state.async.dns = dns;
- data->state.async.done = TRUE;
+ conn->resolve_async.dns = dns;
+ conn->resolve_async.done = TRUE;
#endif
result = CURLE_OK;
infof(data, "Hostname '%s' was found in DNS cache", hostname);
@@ -1989,7 +2006,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
if(dns) {
/* Perform the next step in the connection phase, and then move on
to the WAITCONNECT state */
- result = Curl_once_resolved(data, &protocol_connected);
+ result = Curl_once_resolved(data, &connected);
if(result)
/* if Curl_once_resolved() returns failure, the connection struct
@@ -1998,15 +2015,10 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
else {
/* call again please so that we get the next socket setup */
rc = CURLM_CALL_MULTI_PERFORM;
- if(protocol_connected)
- multistate(data, MSTATE_DO);
+ if(connected)
+ multistate(data, MSTATE_PROTOCONNECT);
else {
-#ifndef CURL_DISABLE_HTTP
- if(Curl_connect_ongoing(data->conn))
- multistate(data, MSTATE_TUNNELING);
- else
-#endif
- multistate(data, MSTATE_CONNECTING);
+ multistate(data, MSTATE_CONNECTING);
}
}
}
@@ -2035,16 +2047,9 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
else
#endif
if(!result) {
- if(
-#ifndef CURL_DISABLE_PROXY
- (data->conn->http_proxy.proxytype != CURLPROXY_HTTPS ||
- data->conn->bits.proxy_ssl_connected[FIRSTSOCKET]) &&
-#endif
- Curl_connect_complete(data->conn)) {
- rc = CURLM_CALL_MULTI_PERFORM;
- /* initiate protocol connect phase */
- multistate(data, MSTATE_PROTOCONNECT);
- }
+ rc = CURLM_CALL_MULTI_PERFORM;
+ /* initiate protocol connect phase */
+ multistate(data, MSTATE_PROTOCONNECT);
}
else
stream_error = TRUE;
@@ -2054,27 +2059,10 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
case MSTATE_CONNECTING:
/* awaiting a completion of an asynch TCP connect */
DEBUGASSERT(data->conn);
- result = Curl_is_connected(data, data->conn, FIRSTSOCKET, &connected);
+ result = Curl_conn_connect(data, FIRSTSOCKET, FALSE, &connected);
if(connected && !result) {
-#ifndef CURL_DISABLE_HTTP
- if(
-#ifndef CURL_DISABLE_PROXY
- (data->conn->http_proxy.proxytype == CURLPROXY_HTTPS &&
- !data->conn->bits.proxy_ssl_connected[FIRSTSOCKET]) ||
-#endif
- Curl_connect_ongoing(data->conn)) {
- multistate(data, MSTATE_TUNNELING);
- break;
- }
-#endif
rc = CURLM_CALL_MULTI_PERFORM;
-#ifndef CURL_DISABLE_PROXY
- multistate(data,
- data->conn->bits.tunnel_proxy?
- MSTATE_TUNNELING : MSTATE_PROTOCONNECT);
-#else
multistate(data, MSTATE_PROTOCONNECT);
-#endif
}
else if(result) {
/* failure detected */
@@ -2086,10 +2074,24 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
break;
case MSTATE_PROTOCONNECT:
- result = protocol_connect(data, &protocol_connected);
- if(!result && !protocol_connected)
+ if(data->state.rewindbeforesend)
+ result = readrewind(data);
+
+ if(!result && data->conn->bits.reuse) {
+ /* ftp seems to hang when protoconnect on reused connection
+ * since we handle PROTOCONNECT in general inside the filers, it
+ * seems wrong to restart this on a reused connection. */
+ multistate(data, MSTATE_DO);
+ rc = CURLM_CALL_MULTI_PERFORM;
+ break;
+ }
+ if(!result)
+ result = protocol_connect(data, &protocol_connected);
+ if(!result && !protocol_connected) {
/* switch to waiting state */
multistate(data, MSTATE_PROTOCONNECTING);
+ rc = CURLM_CALL_MULTI_PERFORM;
+ }
else if(!result) {
/* protocol connect has completed, go WAITDO or DO */
multistate(data, MSTATE_DO);
@@ -2160,7 +2162,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
#ifndef CURL_DISABLE_FTP
/* some steps needed for wildcard matching */
if(data->state.wildcardmatch) {
- struct WildcardData *wc = &data->wildcard;
+ struct WildcardData *wc = data->wildcard;
if(wc->state == CURLWC_DONE || wc->state == CURLWC_SKIP) {
/* skip some states if it is important */
multi_done(data, CURLE_OK, FALSE);
@@ -2176,7 +2178,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
/* DO was not completed in one function call, we must continue
DOING... */
multistate(data, MSTATE_DOING);
- rc = CURLM_OK;
+ rc = CURLM_CALL_MULTI_PERFORM;
}
/* after DO, go DO_DONE... or DO_MORE */
@@ -2184,7 +2186,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
/* we're supposed to do more, but we need to sit down, relax
and wait a little while first */
multistate(data, MSTATE_DOING_MORE);
- rc = CURLM_OK;
+ rc = CURLM_CALL_MULTI_PERFORM;
}
else {
/* we're done with the DO, now DID */
@@ -2285,9 +2287,8 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
MSTATE_DID : MSTATE_DOING);
rc = CURLM_CALL_MULTI_PERFORM;
}
- else
- /* stay in DO_MORE */
- rc = CURLM_OK;
+ /* else
+ stay in DO_MORE */
}
else {
/* failure detected */
@@ -2312,7 +2313,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
#ifndef CURL_DISABLE_FTP
if(data->state.wildcardmatch &&
((data->conn->handler->flags & PROTOPT_WILDCARD) == 0)) {
- data->wildcard.state = CURLWC_DONE;
+ data->wildcard->state = CURLWC_DONE;
}
#endif
multistate(data, MSTATE_DONE);
@@ -2405,7 +2406,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
if(done || (result == CURLE_RECV_ERROR)) {
/* If CURLE_RECV_ERROR happens early enough, we assume it was a race
- * condition and the server closed the re-used connection exactly when
+ * condition and the server closed the reused connection exactly when
* we wanted to use it, so figure out if that is indeed the case.
*/
CURLcode ret = Curl_retry_request(data, &newurl);
@@ -2447,7 +2448,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
if(result) {
/*
* The transfer phase returned error, we mark the connection to get
- * closed to prevent being re-used. This is because we can't possibly
+ * closed to prevent being reused. This is because we can't possibly
* know if the connection is in a good shape or not now. Unless it is
* a protocol which uses two "channels" like FTP, as then the error
* happened in the data connection.
@@ -2516,7 +2517,6 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
won't get stuck on this transfer at the expense of other concurrent
transfers */
Curl_expire(data, 0, EXPIRE_RUN_NOW);
- rc = CURLM_OK;
}
break;
}
@@ -2542,7 +2542,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
#ifndef CURL_DISABLE_FTP
if(data->state.wildcardmatch) {
- if(data->wildcard.state != CURLWC_DONE) {
+ if(data->wildcard->state != CURLWC_DONE) {
/* if a wildcard is set and we are not ending -> lets start again
with MSTATE_INIT */
multistate(data, MSTATE_INIT);
@@ -2558,9 +2558,11 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
case MSTATE_COMPLETED:
break;
+ case MSTATE_PENDING:
case MSTATE_MSGSENT:
- data->result = result;
- return CURLM_OK; /* do nothing */
+ /* handles in these states should NOT be in this list */
+ DEBUGASSERT(0);
+ break;
default:
return CURLM_INTERNAL_ERROR;
@@ -2580,7 +2582,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
multi_handle_timeout(data, nowp, &stream_error, &result, TRUE);
}
- statemachine_end:
+statemachine_end:
if(data->mstate < MSTATE_COMPLETED) {
if(result) {
@@ -2648,10 +2650,17 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
msg->extmsg.easy_handle = data;
msg->extmsg.data.result = result;
- rc = multi_addmsg(multi, msg);
+ multi_addmsg(multi, msg);
DEBUGASSERT(!data->conn);
}
multistate(data, MSTATE_MSGSENT);
+
+ /* add this handle to the list of msgsent handles */
+ Curl_llist_insert_next(&multi->msgsent, multi->msgsent.tail, data,
+ &data->connect_queue);
+ /* unlink from the main list */
+ unlink_easy(multi, data);
+ return CURLM_OK;
}
} while((rc == CURLM_CALL_MULTI_PERFORM) || multi_ischanged(multi, FALSE));
@@ -2674,18 +2683,28 @@ CURLMcode curl_multi_perform(struct Curl_multi *multi, int *running_handles)
return CURLM_RECURSIVE_API_CALL;
data = multi->easyp;
- while(data) {
+ if(data) {
CURLMcode result;
+ bool nosig = data->set.no_signal;
SIGPIPE_VARIABLE(pipe_st);
-
sigpipe_ignore(data, &pipe_st);
- result = multi_runsingle(multi, &now, data);
+ /* Do the loop and only alter the signal ignore state if the next handle
+ has a different NO_SIGNAL state than the previous */
+ do {
+ /* the current node might be unlinked in multi_runsingle(), get the next
+ pointer now */
+ struct Curl_easy *datanext = data->next;
+ if(data->set.no_signal != nosig) {
+ sigpipe_restore(&pipe_st);
+ sigpipe_ignore(data, &pipe_st);
+ nosig = data->set.no_signal;
+ }
+ result = multi_runsingle(multi, &now, data);
+ if(result)
+ returncode = result;
+ data = datanext; /* operate on next handle */
+ } while(data);
sigpipe_restore(&pipe_st);
-
- if(result)
- returncode = result;
-
- data = data->next; /* operate on next handle */
}
/*
@@ -2714,6 +2733,18 @@ CURLMcode curl_multi_perform(struct Curl_multi *multi, int *running_handles)
return returncode;
}
+/* unlink_all_msgsent_handles() detaches all those easy handles from this
+ multi handle */
+static void unlink_all_msgsent_handles(struct Curl_multi *multi)
+{
+ struct Curl_llist_element *e = multi->msgsent.head;
+ if(e) {
+ struct Curl_easy *data = e->ptr;
+ DEBUGASSERT(data->mstate == MSTATE_MSGSENT);
+ data->multi = NULL;
+ }
+}
+
CURLMcode curl_multi_cleanup(struct Curl_multi *multi)
{
struct Curl_easy *data;
@@ -2725,6 +2756,8 @@ CURLMcode curl_multi_cleanup(struct Curl_multi *multi)
multi->magic = 0; /* not good anymore */
+ unlink_all_msgsent_handles(multi);
+ process_pending_handles(multi);
/* First remove all remaining easy handles */
data = multi->easyp;
while(data) {
@@ -2756,9 +2789,6 @@ CURLMcode curl_multi_cleanup(struct Curl_multi *multi)
sockhash_destroy(&multi->sockhash);
Curl_conncache_destroy(&multi->conn_cache);
- Curl_llist_destroy(&multi->msglist, NULL);
- Curl_llist_destroy(&multi->pending, NULL);
-
Curl_hash_destroy(&multi->hostcache);
Curl_psl_destroy(&multi->psl);
@@ -2770,6 +2800,11 @@ CURLMcode curl_multi_cleanup(struct Curl_multi *multi)
wakeup_close(multi->wakeup_pair[1]);
#endif
#endif
+
+#ifdef USE_SSL
+ Curl_free_multi_ssl_backend_data(multi->ssl_backend_data);
+#endif
+
free(multi);
return CURLM_OK;
@@ -2822,53 +2857,36 @@ CURLMsg *curl_multi_info_read(struct Curl_multi *multi, int *msgs_in_queue)
static CURLMcode singlesocket(struct Curl_multi *multi,
struct Curl_easy *data)
{
- curl_socket_t socks[MAX_SOCKSPEREASYHANDLE];
- int i;
+ struct easy_pollset cur_poll;
+ unsigned int i;
struct Curl_sh_entry *entry;
curl_socket_t s;
- int num;
- unsigned int curraction;
- unsigned char actions[MAX_SOCKSPEREASYHANDLE];
int rc;
- for(i = 0; i< MAX_SOCKSPEREASYHANDLE; i++)
- socks[i] = CURL_SOCKET_BAD;
-
/* Fill in the 'current' struct with the state as it is now: what sockets to
supervise and for what actions */
- curraction = multi_getsock(data, socks);
+ multi_getsock(data, &cur_poll);
/* We have 0 .. N sockets already and we get to know about the 0 .. M
sockets we should have from now on. Detect the differences, remove no
longer supervised ones and add new ones */
/* walk over the sockets we got right now */
- for(i = 0; (i< MAX_SOCKSPEREASYHANDLE) &&
- (curraction & (GETSOCK_READSOCK(i) | GETSOCK_WRITESOCK(i)));
- i++) {
- unsigned char action = CURL_POLL_NONE;
- unsigned char prevaction = 0;
+ for(i = 0; i < cur_poll.num; i++) {
+ unsigned char cur_action = cur_poll.actions[i];
+ unsigned char last_action = 0;
int comboaction;
- bool sincebefore = FALSE;
- s = socks[i];
+ s = cur_poll.sockets[i];
/* get it from the hash */
entry = sh_getentry(&multi->sockhash, s);
-
- if(curraction & GETSOCK_READSOCK(i))
- action |= CURL_POLL_IN;
- if(curraction & GETSOCK_WRITESOCK(i))
- action |= CURL_POLL_OUT;
-
- actions[i] = action;
if(entry) {
/* check if new for this transfer */
- int j;
- for(j = 0; j< data->numsocks; j++) {
- if(s == data->sockets[j]) {
- prevaction = data->actions[j];
- sincebefore = TRUE;
+ unsigned int j;
+ for(j = 0; j< data->last_poll.num; j++) {
+ if(s == data->last_poll.sockets[j]) {
+ last_action = data->last_poll.actions[j];
break;
}
}
@@ -2880,23 +2898,23 @@ static CURLMcode singlesocket(struct Curl_multi *multi,
/* fatal */
return CURLM_OUT_OF_MEMORY;
}
- if(sincebefore && (prevaction != action)) {
+ if(last_action && (last_action != cur_action)) {
/* Socket was used already, but different action now */
- if(prevaction & CURL_POLL_IN)
+ if(last_action & CURL_POLL_IN)
entry->readers--;
- if(prevaction & CURL_POLL_OUT)
+ if(last_action & CURL_POLL_OUT)
entry->writers--;
- if(action & CURL_POLL_IN)
+ if(cur_action & CURL_POLL_IN)
entry->readers++;
- if(action & CURL_POLL_OUT)
+ if(cur_action & CURL_POLL_OUT)
entry->writers++;
}
- else if(!sincebefore) {
- /* a new user */
+ else if(!last_action) {
+ /* a new transfer using this socket */
entry->users++;
- if(action & CURL_POLL_IN)
+ if(cur_action & CURL_POLL_IN)
entry->readers++;
- if(action & CURL_POLL_OUT)
+ if(cur_action & CURL_POLL_OUT)
entry->writers++;
/* add 'data' to the transfer hash on this socket! */
@@ -2907,11 +2925,11 @@ static CURLMcode singlesocket(struct Curl_multi *multi,
}
}
- comboaction = (entry->writers? CURL_POLL_OUT : 0) |
+ comboaction = (entry->writers ? CURL_POLL_OUT : 0) |
(entry->readers ? CURL_POLL_IN : 0);
/* socket existed before and has the same action set as before */
- if(sincebefore && ((int)entry->action == comboaction))
+ if(last_action && ((int)entry->action == comboaction))
/* same, continue */
continue;
@@ -2919,6 +2937,7 @@ static CURLMcode singlesocket(struct Curl_multi *multi,
set_in_callback(multi, TRUE);
rc = multi->socket_cb(data, s, comboaction, multi->socket_userp,
entry->socketp);
+
set_in_callback(multi, FALSE);
if(rc == -1) {
multi->dead = TRUE;
@@ -2929,16 +2948,15 @@ static CURLMcode singlesocket(struct Curl_multi *multi,
entry->action = comboaction; /* store the current action state */
}
- num = i; /* number of sockets */
-
- /* when we've walked over all the sockets we should have right now, we must
- make sure to detect sockets that are removed */
- for(i = 0; i< data->numsocks; i++) {
- int j;
+ /* Check for last_poll.sockets that no longer appear in cur_poll.sockets.
+ * Need to remove the easy handle from the multi->sockhash->transfers and
+ * remove multi->sockhash entry when this was the last transfer */
+ for(i = 0; i< data->last_poll.num; i++) {
+ unsigned int j;
bool stillused = FALSE;
- s = data->sockets[i];
- for(j = 0; j < num; j++) {
- if(s == socks[j]) {
+ s = data->last_poll.sockets[i];
+ for(j = 0; j < cur_poll.num; j++) {
+ if(s == cur_poll.sockets[j]) {
/* this is still supervised */
stillused = TRUE;
break;
@@ -2951,7 +2969,7 @@ static CURLMcode singlesocket(struct Curl_multi *multi,
/* if this is NULL here, the socket has been closed and notified so
already by Curl_multi_closed() */
if(entry) {
- unsigned char oldactions = data->actions[i];
+ unsigned char oldactions = data->last_poll.actions[i];
/* this socket has been removed. Decrease user count */
entry->users--;
if(oldactions & CURL_POLL_OUT)
@@ -2979,11 +2997,10 @@ static CURLMcode singlesocket(struct Curl_multi *multi,
}
}
}
- } /* for loop over numsocks */
+ } /* for loop over num */
- memcpy(data->sockets, socks, num*sizeof(curl_socket_t));
- memcpy(data->actions, actions, num*sizeof(char));
- data->numsocks = num;
+ /* Remember for next time */
+ memcpy(&data->last_poll, &cur_poll, sizeof(data->last_poll));
return CURLM_OK;
}
@@ -3064,7 +3081,7 @@ static CURLMcode add_next_timeout(struct curltime now,
struct Curl_llist_element *n = e->next;
timediff_t diff;
node = (struct time_node *)e->ptr;
- diff = Curl_timediff(node->time, now);
+ diff = Curl_timediff_us(node->time, now);
if(diff <= 0)
/* remove outdated entry */
Curl_llist_remove(list, e, NULL);
@@ -3102,6 +3119,9 @@ static CURLMcode multi_socket(struct Curl_multi *multi,
struct Curl_easy *data = NULL;
struct Curl_tree *t;
struct curltime now = Curl_now();
+ bool first = FALSE;
+ bool nosig = FALSE;
+ SIGPIPE_VARIABLE(pipe_st);
if(checkall) {
/* *perform() deals with running_handles on its own */
@@ -3144,7 +3164,7 @@ static CURLMcode multi_socket(struct Curl_multi *multi,
if(data->conn && !(data->conn->handler->flags & PROTOPT_DIRLOCK))
/* set socket event bitmask if they're not locked */
- data->conn->cselect_bits = ev_bitmask;
+ data->conn->cselect_bits = (unsigned char)ev_bitmask;
Curl_expire(data, 0, EXPIRE_RUN_NOW);
}
@@ -3176,18 +3196,24 @@ static CURLMcode multi_socket(struct Curl_multi *multi,
do {
/* the first loop lap 'data' can be NULL */
if(data) {
- SIGPIPE_VARIABLE(pipe_st);
-
- sigpipe_ignore(data, &pipe_st);
+ if(!first) {
+ first = TRUE;
+ nosig = data->set.no_signal; /* initial state */
+ sigpipe_ignore(data, &pipe_st);
+ }
+ else if(data->set.no_signal != nosig) {
+ sigpipe_restore(&pipe_st);
+ sigpipe_ignore(data, &pipe_st);
+ nosig = data->set.no_signal; /* remember new state */
+ }
result = multi_runsingle(multi, &now, data);
- sigpipe_restore(&pipe_st);
if(CURLM_OK >= result) {
/* get the socket(s) and check if the state has been changed since
last */
result = singlesocket(multi, data);
if(result)
- return result;
+ break;
}
}
@@ -3201,6 +3227,8 @@ static CURLMcode multi_socket(struct Curl_multi *multi,
}
} while(t);
+ if(first)
+ sigpipe_restore(&pipe_st);
*running_handles = multi->num_alive;
return result;
@@ -3212,6 +3240,7 @@ CURLMcode curl_multi_setopt(struct Curl_multi *multi,
{
CURLMcode res = CURLM_OK;
va_list param;
+ unsigned long uarg;
if(!GOOD_MULTI_HANDLE(multi))
return CURLM_BAD_HANDLE;
@@ -3235,7 +3264,7 @@ CURLMcode curl_multi_setopt(struct Curl_multi *multi,
multi->push_userp = va_arg(param, void *);
break;
case CURLMOPT_PIPELINING:
- multi->multiplexing = va_arg(param, long) & CURLPIPE_MULTIPLEX;
+ multi->multiplexing = va_arg(param, long) & CURLPIPE_MULTIPLEX ? 1 : 0;
break;
case CURLMOPT_TIMERFUNCTION:
multi->timer_cb = va_arg(param, curl_multi_timer_callback);
@@ -3244,7 +3273,9 @@ CURLMcode curl_multi_setopt(struct Curl_multi *multi,
multi->timer_userp = va_arg(param, void *);
break;
case CURLMOPT_MAXCONNECTS:
- multi->maxconnects = va_arg(param, long);
+ uarg = va_arg(param, unsigned long);
+ if(uarg <= UINT_MAX)
+ multi->maxconnects = (unsigned int)uarg;
break;
case CURLMOPT_MAX_HOST_CONNECTIONS:
multi->max_host_connections = va_arg(param, long);
@@ -3266,9 +3297,9 @@ CURLMcode curl_multi_setopt(struct Curl_multi *multi,
case CURLMOPT_MAX_CONCURRENT_STREAMS:
{
long streams = va_arg(param, long);
- if(streams < 1)
+ if((streams < 1) || (streams > INT_MAX))
streams = 100;
- multi->max_concurrent_streams = curlx_sltoui(streams);
+ multi->max_concurrent_streams = (unsigned int)streams;
}
break;
default:
@@ -3336,20 +3367,10 @@ static CURLMcode multi_timeout(struct Curl_multi *multi,
if(Curl_splaycomparekeys(multi->timetree->key, now) > 0) {
/* some time left before expiration */
- timediff_t diff = Curl_timediff(multi->timetree->key, now);
- if(diff <= 0)
- /*
- * Since we only provide millisecond resolution on the returned value
- * and the diff might be less than one millisecond here, we don't
- * return zero as that may cause short bursts of busyloops on fast
- * processors while the diff is still present but less than one
- * millisecond! instead we return 1 until the time is ripe.
- */
- *timeout_ms = 1;
- else
- /* this should be safe even on 64 bit archs, as we don't use that
- overly long timeouts */
- *timeout_ms = (long)diff;
+ timediff_t diff = Curl_timediff_ceil(multi->timetree->key, now);
+ /* this should be safe even on 32 bit archs, as we don't use that
+ overly long timeouts */
+ *timeout_ms = (long)diff;
}
else
/* 0 means immediately */
@@ -3601,7 +3622,7 @@ void Curl_expire_clear(struct Curl_easy *data)
}
#ifdef DEBUGBUILD
- infof(data, "Expire cleared (transfer %p)", data);
+ infof(data, "Expire cleared");
#endif
nowp->tv_sec = 0;
nowp->tv_usec = 0;
@@ -3654,6 +3675,8 @@ void Curl_multiuse_state(struct Curl_easy *data,
process_pending_handles(data->multi);
}
+/* process_pending_handles() moves all handles from PENDING
+ back into the main list and change state to CONNECT */
static void process_pending_handles(struct Curl_multi *multi)
{
struct Curl_llist_element *e = multi->pending.head;
@@ -3662,6 +3685,9 @@ static void process_pending_handles(struct Curl_multi *multi)
DEBUGASSERT(data->mstate == MSTATE_PENDING);
+ /* put it back into the main list */
+ link_easy(multi, data);
+
multistate(data, MSTATE_CONNECT);
/* Remove this node from the list */
@@ -3692,41 +3718,26 @@ bool Curl_is_in_callback(struct Curl_easy *easy)
(easy->multi_easy && easy->multi_easy->in_callback));
}
-#ifdef DEBUGBUILD
-void Curl_multi_dump(struct Curl_multi *multi)
-{
- struct Curl_easy *data;
- int i;
- fprintf(stderr, "* Multi status: %d handles, %d alive\n",
- multi->num_easy, multi->num_alive);
- for(data = multi->easyp; data; data = data->next) {
- if(data->mstate < MSTATE_COMPLETED) {
- /* only display handles that are not completed */
- fprintf(stderr, "handle %p, state %s, %d sockets\n",
- (void *)data,
- statename[data->mstate], data->numsocks);
- for(i = 0; i < data->numsocks; i++) {
- curl_socket_t s = data->sockets[i];
- struct Curl_sh_entry *entry = sh_getentry(&multi->sockhash, s);
-
- fprintf(stderr, "%d ", (int)s);
- if(!entry) {
- fprintf(stderr, "INTERNAL CONFUSION\n");
- continue;
- }
- fprintf(stderr, "[%s %s] ",
- (entry->action&CURL_POLL_IN)?"RECVING":"",
- (entry->action&CURL_POLL_OUT)?"SENDING":"");
- }
- if(data->numsocks)
- fprintf(stderr, "\n");
- }
- }
-}
-#endif
-
unsigned int Curl_multi_max_concurrent_streams(struct Curl_multi *multi)
{
DEBUGASSERT(multi);
return multi->max_concurrent_streams;
}
+
+struct Curl_easy **curl_multi_get_handles(struct Curl_multi *multi)
+{
+ struct Curl_easy **a = malloc(sizeof(struct Curl_easy *) *
+ (multi->num_easy + 1));
+ if(a) {
+ unsigned int i = 0;
+ struct Curl_easy *e = multi->easyp;
+ while(e) {
+ DEBUGASSERT(i < multi->num_easy);
+ if(!e->state.internal)
+ a[i++] = e;
+ e = e->next;
+ }
+ a[i] = NULL; /* last entry is a NULL */
+ }
+ return a;
+}
diff --git a/lib/multihandle.h b/lib/multihandle.h
index a997784ea..e03e382e2 100644
--- a/lib/multihandle.h
+++ b/lib/multihandle.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -79,6 +79,10 @@ typedef enum {
/* value for MAXIMUM CONCURRENT STREAMS upper limit */
#define INITIAL_MAX_CONCURRENT_STREAMS ((1U << 31) - 1)
+/* Curl_multi SSL backend-specific data; declared differently by each SSL
+ backend */
+struct multi_ssl_backend_data;
+
/* This is the struct known as CURLM on the outside */
struct Curl_multi {
/* First a simple identifier to easier detect if a user mix up
@@ -89,14 +93,16 @@ struct Curl_multi {
struct Curl_easy *easyp;
struct Curl_easy *easylp; /* last node */
- int num_easy; /* amount of entries in the linked list above. */
- int num_alive; /* amount of easy handles that are added but have not yet
- reached COMPLETE state */
+ unsigned int num_easy; /* amount of entries in the linked list above. */
+ unsigned int num_alive; /* amount of easy handles that are added but have
+ not yet reached COMPLETE state */
struct Curl_llist msglist; /* a list of messages from completed transfers */
struct Curl_llist pending; /* Curl_easys that are in the
MSTATE_PENDING state */
+ struct Curl_llist msgsent; /* Curl_easys that are in the
+ MSTATE_MSGSENT state */
/* callback function and user data pointer for the *socket() API */
curl_socket_callback socket_cb;
@@ -118,6 +124,10 @@ struct Curl_multi {
times of all currently set timers */
struct Curl_tree *timetree;
+#if defined(USE_SSL)
+ struct multi_ssl_backend_data *ssl_backend_data;
+#endif
+
/* 'sockhash' is the lookup hash for socket descriptor => easy handles (note
the pluralis form, there can be more than one easy handle waiting on the
same actual socket) */
@@ -126,9 +136,6 @@ struct Curl_multi {
/* Shared connection cache (bundles)*/
struct conncache conn_cache;
- long maxconnects; /* if >0, a fixed limit of the maximum number of entries
- we're allowed to grow the connection cache to */
-
long max_host_connections; /* if >0, a fixed limit of the maximum number
of connections per host */
@@ -140,8 +147,6 @@ struct Curl_multi {
void *timer_userp;
struct curltime timer_lastcall; /* the fixed time for the timeout for the
previous callback */
- unsigned int max_concurrent_streams;
-
#ifdef USE_WINSOCK
WSAEVENT wsa_event; /* winsock event used for waits */
#else
@@ -150,18 +155,25 @@ struct Curl_multi {
0 is used for read, 1 is used for write */
#endif
#endif
+ unsigned int max_concurrent_streams;
+ unsigned int maxconnects; /* if >0, a fixed limit of the maximum number of
+ entries we're allowed to grow the connection
+ cache to */
#define IPV6_UNKNOWN 0
#define IPV6_DEAD 1
#define IPV6_WORKS 2
unsigned char ipv6_up; /* IPV6_* defined */
- bool multiplexing; /* multiplexing wanted */
- bool recheckstate; /* see Curl_multi_connchanged */
- bool in_callback; /* true while executing a callback */
+ BIT(multiplexing); /* multiplexing wanted */
+ BIT(recheckstate); /* see Curl_multi_connchanged */
+ BIT(in_callback); /* true while executing a callback */
#ifdef USE_OPENSSL
- bool ssl_seeded;
+ BIT(ssl_seeded);
#endif
- bool dead; /* a callback returned error, everything needs to crash and
+ BIT(dead); /* a callback returned error, everything needs to crash and
burn */
+#ifdef DEBUGBUILD
+ BIT(warned); /* true after user warned of DEBUGBUILD */
+#endif
};
#endif /* HEADER_CURL_MULTIHANDLE_H */
diff --git a/lib/multiif.h b/lib/multiif.h
index 0cb9d4f7f..7a344fa9f 100644
--- a/lib/multiif.h
+++ b/lib/multiif.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -41,6 +41,8 @@ void Curl_set_in_callback(struct Curl_easy *data, bool value);
bool Curl_is_in_callback(struct Curl_easy *easy);
CURLcode Curl_preconnect(struct Curl_easy *data);
+void Curl_multi_connchanged(struct Curl_multi *multi);
+
/* Internal version of curl_multi_init() accepts size parameters for the
socket, connection and dns hashes */
struct Curl_multi *Curl_multi_handle(int hashsize, int chashsize,
@@ -57,14 +59,8 @@ struct Curl_multi *Curl_multi_handle(int hashsize, int chashsize,
/* set the bit for the given sock number to make the bitmap for readable */
#define GETSOCK_READSOCK(x) (1 << (x))
-#ifdef DEBUGBUILD
- /*
- * Curl_multi_dump is not a stable public function, this is only meant to
- * allow easier tracking of the internal handle's state and what sockets
- * they use. Only for research and development DEBUGBUILD enabled builds.
- */
-void Curl_multi_dump(struct Curl_multi *multi);
-#endif
+/* mask for checking if read and/or write is set for index x */
+#define GETSOCK_MASK_RW(x) (GETSOCK_READSOCK(x)|GETSOCK_WRITESOCK(x))
/* Return the value of the CURLMOPT_MAX_HOST_CONNECTIONS option */
size_t Curl_multi_max_host_connections(struct Curl_multi *multi);
diff --git a/lib/netrc.c b/lib/netrc.c
index 4461b8492..038c6dca6 100644
--- a/lib/netrc.c
+++ b/lib/netrc.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -244,7 +244,7 @@ static int parsenetrc(const char *host,
}
} /* while Curl_get_line() */
- out:
+out:
if(!retcode) {
/* success */
if(login_alloc) {
@@ -327,7 +327,7 @@ int Curl_parsenetrc(const char *host, char **loginp, char **passwordp,
}
retcode = parsenetrc(host, loginp, passwordp, filealloc);
free(filealloc);
-#ifdef WIN32
+#ifdef _WIN32
if(retcode == NETRC_FILE_MISSING) {
/* fallback to the old-style "_netrc" file */
filealloc = curl_maprintf("%s%s_netrc", home, DIR_CHAR);
diff --git a/lib/netrc.h b/lib/netrc.h
index 53d005672..9f2815f3b 100644
--- a/lib/netrc.h
+++ b/lib/netrc.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/nonblock.c b/lib/nonblock.c
index ce73af31c..f4eb65612 100644
--- a/lib/nonblock.c
+++ b/lib/nonblock.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -31,9 +31,6 @@
#include <fcntl.h>
#endif
-#if (defined(HAVE_IOCTL_FIONBIO) && defined(NETWARE))
-#include <sys/filio.h>
-#endif
#ifdef __VMS
#include <in.h>
#include <inet.h>
diff --git a/lib/nonblock.h b/lib/nonblock.h
index a42f443a4..4a1a6151f 100644
--- a/lib/nonblock.h
+++ b/lib/nonblock.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/noproxy.c b/lib/noproxy.c
index 81f1e0993..2b9908d89 100644
--- a/lib/noproxy.c
+++ b/lib/noproxy.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -34,6 +34,10 @@
#include <netinet/in.h>
#endif
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+
/*
* Curl_cidr4_match() returns TRUE if the given IPv4 address is within the
* specified CIDR address range.
@@ -115,8 +119,18 @@ enum nametype {
* Checks if the host is in the noproxy list. returns TRUE if it matches and
* therefore the proxy should NOT be used.
****************************************************************/
-bool Curl_check_noproxy(const char *name, const char *no_proxy)
+bool Curl_check_noproxy(const char *name, const char *no_proxy,
+ bool *spacesep)
{
+ char hostip[128];
+ *spacesep = FALSE;
+ /*
+ * If we don't have a hostname at all, like for example with a FILE
+ * transfer, we have nothing to interrogate the noproxy list with.
+ */
+ if(!name || name[0] == '\0')
+ return FALSE;
+
/* no_proxy=domain1.dom,host.domain2.dom
* (a comma-separated list of hosts which should
* not be proxied, or an asterisk to override
@@ -126,7 +140,6 @@ bool Curl_check_noproxy(const char *name, const char *no_proxy)
const char *p = no_proxy;
size_t namelen;
enum nametype type = TYPE_HOST;
- char hostip[128];
if(!strcmp("*", no_proxy))
return TRUE;
@@ -149,9 +162,14 @@ bool Curl_check_noproxy(const char *name, const char *no_proxy)
}
else {
unsigned int address;
+ namelen = strlen(name);
if(1 == Curl_inet_pton(AF_INET, name, &address))
type = TYPE_IPV4;
- namelen = strlen(name);
+ else {
+ /* ignore trailing dots in the host name */
+ if(name[namelen - 1] == '.')
+ namelen--;
+ }
}
while(*p) {
@@ -173,33 +191,50 @@ bool Curl_check_noproxy(const char *name, const char *no_proxy)
if(tokenlen) {
switch(type) {
case TYPE_HOST:
- if(*token == '.') {
- ++token;
- --tokenlen;
- /* tailmatch */
- match = (tokenlen <= namelen) &&
- strncasecompare(token, name + (namelen - tokenlen), namelen);
+ /* ignore trailing dots in the token to check */
+ if(token[tokenlen - 1] == '.')
+ tokenlen--;
+
+ if(tokenlen && (*token == '.')) {
+ /* ignore leading token dot as well */
+ token++;
+ tokenlen--;
}
- else
- match = (tokenlen == namelen) &&
- strncasecompare(token, name, namelen);
+ /* A: example.com matches 'example.com'
+ B: www.example.com matches 'example.com'
+ C: nonexample.com DOES NOT match 'example.com'
+ */
+ if(tokenlen == namelen)
+ /* case A, exact match */
+ match = strncasecompare(token, name, namelen);
+ else if(tokenlen < namelen) {
+ /* case B, tailmatch domain */
+ match = (name[namelen - tokenlen - 1] == '.') &&
+ strncasecompare(token, name + (namelen - tokenlen),
+ tokenlen);
+ }
+ /* case C passes through, not a match */
break;
case TYPE_IPV4:
/* FALLTHROUGH */
case TYPE_IPV6: {
const char *check = token;
- char *slash = strchr(check, '/');
+ char *slash;
unsigned int bits = 0;
char checkip[128];
+ if(tokenlen >= sizeof(checkip))
+ /* this cannot match */
+ break;
+ /* copy the check name to a temp buffer */
+ memcpy(checkip, check, tokenlen);
+ checkip[tokenlen] = 0;
+ check = checkip;
+
+ slash = strchr(check, '/');
/* if the slash is part of this token, use it */
- if(slash && (slash < &check[tokenlen])) {
+ if(slash) {
bits = atoi(slash + 1);
- /* copy the check name to a temp buffer */
- if(tokenlen >= sizeof(checkip))
- break;
- memcpy(checkip, check, tokenlen);
- checkip[ slash - check ] = 0;
- check = checkip;
+ *slash = 0; /* null terminate there */
}
if(type == TYPE_IPV6)
match = Curl_cidr6_match(name, check, bits);
@@ -211,6 +246,15 @@ bool Curl_check_noproxy(const char *name, const char *no_proxy)
if(match)
return TRUE;
} /* if(tokenlen) */
+ /* pass blanks after pattern */
+ while(ISBLANK(*p))
+ p++;
+ /* if not a comma! */
+ if(*p && (*p != ',')) {
+ *spacesep = TRUE;
+ continue;
+ }
+ /* pass any number of commas */
while(*p == ',')
p++;
} /* while(*p) */
diff --git a/lib/noproxy.h b/lib/noproxy.h
index 8800a2127..a3a680772 100644
--- a/lib/noproxy.h
+++ b/lib/noproxy.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -37,7 +37,8 @@ UNITTEST bool Curl_cidr6_match(const char *ipv6,
unsigned int bits);
#endif
-bool Curl_check_noproxy(const char *name, const char *no_proxy);
+bool Curl_check_noproxy(const char *name, const char *no_proxy,
+ bool *spacesep);
#endif
diff --git a/lib/openldap.c b/lib/openldap.c
index 3a93b6728..131f47414 100644
--- a/lib/openldap.c
+++ b/lib/openldap.c
@@ -5,8 +5,8 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2011 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- * Copyright (C) 2010, Howard Chu, <hyc@openldap.org>
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Howard Chu, <hyc@openldap.org>
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -47,6 +47,7 @@
#include "transfer.h"
#include "curl_ldap.h"
#include "curl_base64.h"
+#include "cfilters.h"
#include "connect.h"
#include "curl_sasl.h"
#include "strcase.h"
@@ -198,11 +199,11 @@ struct ldapreqinfo {
};
/*
- * state()
+ * oldap_state()
*
* This is the ONLY way to change LDAP state!
*/
-static void state(struct Curl_easy *data, ldapstate newstate)
+static void oldap_state(struct Curl_easy *data, ldapstate newstate)
{
struct ldapconninfo *ldapc = data->conn->proto.ldapc;
@@ -294,7 +295,7 @@ static CURLcode oldap_parse_login_options(struct connectdata *conn)
const char *value;
while(*ptr && *ptr != '=')
- ptr++;
+ ptr++;
value = ptr + 1;
@@ -318,31 +319,12 @@ static CURLcode oldap_setup_connection(struct Curl_easy *data,
{
CURLcode result;
LDAPURLDesc *lud;
- struct ldapconninfo *li;
+ (void)conn;
/* Early URL syntax check. */
result = oldap_url_parse(data, &lud);
ldap_free_urldesc(lud);
- if(!result) {
- li = calloc(1, sizeof(struct ldapconninfo));
- if(!li)
- result = CURLE_OUT_OF_MEMORY;
- else {
- li->proto = ldap_pvt_url_scheme2proto(data->state.up.scheme);
- conn->proto.ldapc = li;
- connkeep(conn, "OpenLDAP default");
-
- /* Initialize the SASL storage */
- Curl_sasl_init(&li->sasl, data, &saslldap);
-
- /* Clear the TLS upgraded flag */
- conn->bits.tls_upgraded = FALSE;
-
- result = oldap_parse_login_options(conn);
- }
- }
-
return result;
}
@@ -443,7 +425,7 @@ static CURLcode oldap_perform_bind(struct Curl_easy *data, ldapstate newstate)
rc = ldap_sasl_bind(li->ld, binddn, LDAP_SASL_SIMPLE, &passwd,
NULL, NULL, &li->msgid);
if(rc == LDAP_SUCCESS)
- state(data, newstate);
+ oldap_state(data, newstate);
else
result = oldap_map_error(rc,
data->state.aptr.user?
@@ -466,7 +448,7 @@ static CURLcode oldap_perform_mechs(struct Curl_easy *data)
(char **) supportedSASLMechanisms, 0,
NULL, NULL, NULL, 0, &li->msgid);
if(rc == LDAP_SUCCESS)
- state(data, OLDAP_MECHS);
+ oldap_state(data, OLDAP_MECHS);
else
result = oldap_map_error(rc, CURLE_LOGIN_DENIED);
return result;
@@ -479,7 +461,7 @@ static CURLcode oldap_perform_sasl(struct Curl_easy *data)
struct ldapconninfo *li = data->conn->proto.ldapc;
CURLcode result = Curl_sasl_start(&li->sasl, data, TRUE, &progress);
- state(data, OLDAP_SASL);
+ oldap_state(data, OLDAP_SASL);
if(!result && progress != SASL_INPROGRESS)
result = CURLE_LOGIN_DENIED;
return result;
@@ -500,10 +482,9 @@ static CURLcode oldap_ssl_connect(struct Curl_easy *data, ldapstate newstate)
struct ldapconninfo *li = conn->proto.ldapc;
bool ssldone = 0;
- result = Curl_ssl_connect_nonblocking(data, conn, FALSE,
- FIRSTSOCKET, &ssldone);
+ result = Curl_conn_connect(data, FIRSTSOCKET, FALSE, &ssldone);
if(!result) {
- state(data, newstate);
+ oldap_state(data, newstate);
if(ssldone) {
Sockbuf *sb;
@@ -527,7 +508,7 @@ static CURLcode oldap_perform_starttls(struct Curl_easy *data)
int rc = ldap_start_tls(li->ld, NULL, NULL, &li->msgid);
if(rc == LDAP_SUCCESS)
- state(data, OLDAP_STARTTLS);
+ oldap_state(data, OLDAP_STARTTLS);
else
result = oldap_map_error(rc, CURLE_USE_SSL_FAILED);
return result;
@@ -537,7 +518,7 @@ static CURLcode oldap_perform_starttls(struct Curl_easy *data)
static CURLcode oldap_connect(struct Curl_easy *data, bool *done)
{
struct connectdata *conn = data->conn;
- struct ldapconninfo *li = conn->proto.ldapc;
+ struct ldapconninfo *li;
static const int version = LDAP_VERSION3;
int rc;
char *hosturl;
@@ -547,6 +528,26 @@ static CURLcode oldap_connect(struct Curl_easy *data, bool *done)
(void)done;
+ DEBUGASSERT(!conn->proto.ldapc);
+ li = calloc(1, sizeof(struct ldapconninfo));
+ if(!li)
+ return CURLE_OUT_OF_MEMORY;
+ else {
+ CURLcode result;
+ li->proto = ldap_pvt_url_scheme2proto(data->state.up.scheme);
+ conn->proto.ldapc = li;
+
+ /* Initialize the SASL storage */
+ Curl_sasl_init(&li->sasl, data, &saslldap);
+
+ /* Clear the TLS upgraded flag */
+ conn->bits.tls_upgraded = FALSE;
+
+ result = oldap_parse_login_options(conn);
+ if(result)
+ return result;
+ }
+
hosturl = aprintf("ldap%s://%s:%d",
conn->handler->flags & PROTOPT_SSL? "s": "",
conn->host.name, conn->remote_port);
@@ -682,7 +683,7 @@ static CURLcode oldap_state_sasl_resp(struct Curl_easy *data,
else {
result = Curl_sasl_continue(&li->sasl, data, code, &progress);
if(!result && progress != SASL_INPROGRESS)
- state(data, OLDAP_STOP);
+ oldap_state(data, OLDAP_STOP);
}
if(li->servercred)
@@ -710,7 +711,7 @@ static CURLcode oldap_state_bind_resp(struct Curl_easy *data, LDAPMessage *msg,
result = oldap_map_error(rc, CURLE_LDAP_CANNOT_BIND);
}
else
- state(data, OLDAP_STOP);
+ oldap_state(data, OLDAP_STOP);
if(bv)
ber_bvfree(bv);
@@ -804,7 +805,8 @@ static CURLcode oldap_connecting(struct Curl_easy *data, bool *done)
else if(data->state.aptr.user)
result = oldap_perform_bind(data, OLDAP_BIND);
else {
- state(data, OLDAP_STOP); /* Version 3 supported: no bind required */
+ /* Version 3 supported: no bind required */
+ oldap_state(data, OLDAP_STOP);
result = CURLE_OK;
}
}
@@ -885,6 +887,11 @@ static CURLcode oldap_do(struct Curl_easy *data, bool *done)
result = oldap_url_parse(data, &lud);
if(!result) {
+ Sockbuf *sb;
+ /* re-install the libcurl SSL handlers into the sockbuf. */
+ ldap_get_option(li->ld, LDAP_OPT_SOCKBUF, &sb);
+ ber_sockbuf_add_io(sb, &ldapsb_tls, LBER_SBIOD_LEVEL_TRANSPORT, data);
+
rc = ldap_search_ext(li->ld, lud->lud_dn, lud->lud_scope,
lud->lud_filter, lud->lud_attrs, 0,
NULL, NULL, NULL, 0, &msgid);
@@ -946,18 +953,12 @@ static CURLcode client_write(struct Curl_easy *data,
if(!len && plen && prefix[plen - 1] == ' ')
plen--;
result = Curl_client_write(data, CLIENTWRITE_BODY, (char *) prefix, plen);
- if(!result)
- data->req.bytecount += plen;
}
if(!result && value) {
result = Curl_client_write(data, CLIENTWRITE_BODY, (char *) value, len);
- if(!result)
- data->req.bytecount += len;
}
if(!result && suffix) {
result = Curl_client_write(data, CLIENTWRITE_BODY, (char *) suffix, slen);
- if(!result)
- data->req.bytecount += slen;
}
return result;
}
@@ -1153,7 +1154,7 @@ ldapsb_tls_ctrl(Sockbuf_IO_Desc *sbiod, int opt, void *arg)
(void)arg;
if(opt == LBER_SB_OPT_DATA_READY) {
struct Curl_easy *data = sbiod->sbiod_pvt;
- return Curl_ssl_data_pending(data->conn, FIRSTSOCKET);
+ return Curl_conn_data_pending(data, FIRSTSOCKET);
}
return 0;
}
diff --git a/lib/parsedate.c b/lib/parsedate.c
index 5ed88195f..1a7195b16 100644
--- a/lib/parsedate.c
+++ b/lib/parsedate.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -212,56 +212,55 @@ static int checkday(const char *check, size_t len)
{
int i;
const char * const *what;
- bool found = FALSE;
if(len > 3)
what = &weekday[0];
- else
+ else if(len == 3)
what = &Curl_wkday[0];
+ else
+ return -1; /* too short */
for(i = 0; i<7; i++) {
- if(strcasecompare(check, what[0])) {
- found = TRUE;
- break;
- }
+ size_t ilen = strlen(what[0]);
+ if((ilen == len) &&
+ strncasecompare(check, what[0], len))
+ return i;
what++;
}
- return found?i:-1;
+ return -1;
}
-static int checkmonth(const char *check)
+static int checkmonth(const char *check, size_t len)
{
int i;
- const char * const *what;
- bool found = FALSE;
+ const char * const *what = &Curl_month[0];
+ if(len != 3)
+ return -1; /* not a month */
- what = &Curl_month[0];
for(i = 0; i<12; i++) {
- if(strcasecompare(check, what[0])) {
- found = TRUE;
- break;
- }
+ if(strncasecompare(check, what[0], 3))
+ return i;
what++;
}
- return found?i:-1; /* return the offset or -1, no real offset is -1 */
+ return -1; /* return the offset or -1, no real offset is -1 */
}
/* return the time zone offset between GMT and the input one, in number
of seconds or -1 if the timezone wasn't found/legal */
-static int checktz(const char *check)
+static int checktz(const char *check, size_t len)
{
unsigned int i;
- const struct tzinfo *what;
- bool found = FALSE;
+ const struct tzinfo *what = tz;
+ if(len > 4) /* longer than any valid timezone */
+ return -1;
- what = tz;
for(i = 0; i< sizeof(tz)/sizeof(tz[0]); i++) {
- if(strcasecompare(check, what->name)) {
- found = TRUE;
- break;
- }
+ size_t ilen = strlen(what->name);
+ if((ilen == len) &&
+ strncasecompare(check, what->name, len))
+ return what->offset*60;
what++;
}
- return found?what->offset*60:-1;
+ return -1;
}
static void skip(const char **date)
@@ -294,6 +293,53 @@ static time_t time2epoch(int sec, int min, int hour,
+ hour) * 60 + min) * 60 + sec;
}
+/* Returns the value of a single-digit or two-digit decimal number, return
+ then pointer to after the number. The 'date' pointer is known to point to a
+ digit. */
+static int oneortwodigit(const char *date, const char **endp)
+{
+ int num = date[0] - '0';
+ if(ISDIGIT(date[1])) {
+ *endp = &date[2];
+ return num*10 + (date[1] - '0');
+ }
+ *endp = &date[1];
+ return num;
+}
+
+
+/* HH:MM:SS or HH:MM and accept single-digits too */
+static bool match_time(const char *date,
+ int *h, int *m, int *s, char **endp)
+{
+ const char *p;
+ int hh, mm, ss = 0;
+ hh = oneortwodigit(date, &p);
+ if((hh < 24) && (*p == ':') && ISDIGIT(p[1])) {
+ mm = oneortwodigit(&p[1], &p);
+ if(mm < 60) {
+ if((*p == ':') && ISDIGIT(p[1])) {
+ ss = oneortwodigit(&p[1], &p);
+ if(ss <= 60) {
+ /* valid HH:MM:SS */
+ goto match;
+ }
+ }
+ else {
+ /* valid HH:MM */
+ goto match;
+ }
+ }
+ }
+ return FALSE; /* not a time string */
+match:
+ *h = hh;
+ *m = mm;
+ *s = ss;
+ *endp = (char *)p;
+ return TRUE;
+}
+
/*
* parsedate()
*
@@ -305,6 +351,9 @@ static time_t time2epoch(int sec, int min, int hour,
* PARSEDATE_SOONER - time underflow at the low end of time_t
*/
+/* Wednesday is the longest name this parser knows about */
+#define NAME_LEN 12
+
static int parsedate(const char *date, time_t *output)
{
time_t t = 0;
@@ -327,32 +376,32 @@ static int parsedate(const char *date, time_t *output)
if(ISALPHA(*date)) {
/* a name coming up */
- char buf[32]="";
- size_t len;
- if(sscanf(date, "%31[ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "abcdefghijklmnopqrstuvwxyz]", buf))
- len = strlen(buf);
- else
- len = 0;
-
- if(wdaynum == -1) {
- wdaynum = checkday(buf, len);
- if(wdaynum != -1)
- found = TRUE;
- }
- if(!found && (monnum == -1)) {
- monnum = checkmonth(buf);
- if(monnum != -1)
- found = TRUE;
+ size_t len = 0;
+ const char *p = date;
+ while(ISALPHA(*p) && (len < NAME_LEN)) {
+ p++;
+ len++;
}
- if(!found && (tzoff == -1)) {
- /* this just must be a time zone string */
- tzoff = checktz(buf);
- if(tzoff != -1)
- found = TRUE;
- }
+ if(len != NAME_LEN) {
+ if(wdaynum == -1) {
+ wdaynum = checkday(date, len);
+ if(wdaynum != -1)
+ found = TRUE;
+ }
+ if(!found && (monnum == -1)) {
+ monnum = checkmonth(date, len);
+ if(monnum != -1)
+ found = TRUE;
+ }
+ if(!found && (tzoff == -1)) {
+ /* this just must be a time zone string */
+ tzoff = checktz(date, len);
+ if(tzoff != -1)
+ found = TRUE;
+ }
+ }
if(!found)
return PARSEDATE_FAIL; /* bad string */
@@ -362,18 +411,10 @@ static int parsedate(const char *date, time_t *output)
/* a digit */
int val;
char *end;
- int len = 0;
if((secnum == -1) &&
- (3 == sscanf(date, "%02d:%02d:%02d%n",
- &hournum, &minnum, &secnum, &len))) {
- /* time stamp! */
- date += len;
- }
- else if((secnum == -1) &&
- (2 == sscanf(date, "%02d:%02d%n", &hournum, &minnum, &len))) {
- /* time stamp without seconds */
- date += len;
- secnum = 0;
+ match_time(date, &hournum, &minnum, &secnum, &end)) {
+ /* time stamp */
+ date = end;
}
else {
long lval;
diff --git a/lib/parsedate.h b/lib/parsedate.h
index 4e4347754..84c37f167 100644
--- a/lib/parsedate.h
+++ b/lib/parsedate.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/pingpong.c b/lib/pingpong.c
index d4e6be98c..0081c9ca6 100644
--- a/lib/pingpong.c
+++ b/lib/pingpong.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -28,6 +28,7 @@
#include "curl_setup.h"
#include "urldata.h"
+#include "cfilters.h"
#include "sendf.h"
#include "select.h"
#include "progress.h"
@@ -102,12 +103,12 @@ CURLcode Curl_pp_statemach(struct Curl_easy *data,
else
interval_ms = 0; /* immediate */
- if(Curl_ssl_data_pending(conn, FIRSTSOCKET))
+ if(Curl_conn_data_pending(data, FIRSTSOCKET))
rc = 1;
else if(Curl_pp_moredata(pp))
/* We are receiving and there is data in the cache so just read it */
rc = 1;
- else if(!pp->sendleft && Curl_ssl_data_pending(conn, FIRSTSOCKET))
+ else if(!pp->sendleft && Curl_conn_data_pending(data, FIRSTSOCKET))
/* We are receiving and there is data ready in the SSL library */
rc = 1;
else
@@ -203,14 +204,13 @@ CURLcode Curl_pp_vsendf(struct Curl_easy *data,
#ifdef HAVE_GSSAPI
conn->data_prot = PROT_CMD;
#endif
- result = Curl_write(data, conn->sock[FIRSTSOCKET], s, write_len,
- &bytes_written);
+ result = Curl_nwrite(data, FIRSTSOCKET, s, write_len, &bytes_written);
if(result)
return result;
#ifdef HAVE_GSSAPI
data_sec = conn->data_prot;
DEBUGASSERT(data_sec > PROT_NONE && data_sec < PROT_LAST);
- conn->data_prot = data_sec;
+ conn->data_prot = (unsigned char)data_sec;
#endif
Curl_debug(data, CURLINFO_HEADER_OUT, s, (size_t)bytes_written);
@@ -315,7 +315,7 @@ CURLcode Curl_pp_readresp(struct Curl_easy *data,
&gotbytes);
#ifdef HAVE_GSSAPI
DEBUGASSERT(prot > PROT_NONE && prot < PROT_LAST);
- conn->data_prot = prot;
+ conn->data_prot = (unsigned char)prot;
#endif
if(result == CURLE_AGAIN)
return CURLE_OK; /* return */
@@ -340,7 +340,7 @@ CURLcode Curl_pp_readresp(struct Curl_easy *data,
ssize_t clipamount = 0;
bool restart = FALSE;
- data->req.headerbytecount += (long)gotbytes;
+ data->req.headerbytecount += (unsigned int)gotbytes;
pp->nread_resp += gotbytes;
for(i = 0; i < gotbytes; ptr++, i++) {
@@ -361,7 +361,7 @@ CURLcode Curl_pp_readresp(struct Curl_easy *data,
* for "headers". The response lines can be seen as a kind of
* headers.
*/
- result = Curl_client_write(data, CLIENTWRITE_HEADER,
+ result = Curl_client_write(data, CLIENTWRITE_INFO,
pp->linestart_resp, perline);
if(result)
return result;
@@ -466,11 +466,10 @@ CURLcode Curl_pp_flushsend(struct Curl_easy *data,
struct pingpong *pp)
{
/* we have a piece of a command still left to send */
- struct connectdata *conn = data->conn;
ssize_t written;
- curl_socket_t sock = conn->sock[FIRSTSOCKET];
- CURLcode result = Curl_write(data, sock, pp->sendthis + pp->sendsize -
- pp->sendleft, pp->sendleft, &written);
+ CURLcode result = Curl_nwrite(data, FIRSTSOCKET,
+ pp->sendthis + pp->sendsize - pp->sendleft,
+ pp->sendleft, &written);
if(result)
return result;
diff --git a/lib/pingpong.h b/lib/pingpong.h
index cefae073a..80d3f7718 100644
--- a/lib/pingpong.h
+++ b/lib/pingpong.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/pop3.c b/lib/pop3.c
index 3151a3f56..3e0f20a69 100644
--- a/lib/pop3.c
+++ b/lib/pop3.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -47,9 +47,6 @@
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
-#ifdef HAVE_UTSNAME_H
-#include <sys/utsname.h>
-#endif
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
@@ -58,11 +55,6 @@
#include <inet.h>
#endif
-#if (defined(NETWARE) && defined(__NOVELL_LIBC__))
-#undef in_addr_t
-#define in_addr_t unsigned long
-#endif
-
#include <curl/curl.h>
#include "urldata.h"
#include "sendf.h"
@@ -76,6 +68,7 @@
#include "strtoofft.h"
#include "strcase.h"
#include "vtls/vtls.h"
+#include "cfilters.h"
#include "connect.h"
#include "select.h"
#include "multiif.h"
@@ -286,11 +279,11 @@ static CURLcode pop3_get_message(struct Curl_easy *data, struct bufref *out)
/***********************************************************************
*
- * state()
+ * pop3_state()
*
* This is the ONLY way to change POP3 state!
*/
-static void state(struct Curl_easy *data, pop3state newstate)
+static void pop3_state(struct Curl_easy *data, pop3state newstate)
{
struct pop3_conn *pop3c = &data->conn->proto.pop3c;
#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
@@ -339,7 +332,7 @@ static CURLcode pop3_perform_capa(struct Curl_easy *data,
result = Curl_pp_sendf(data, &pop3c->pp, "%s", "CAPA");
if(!result)
- state(data, POP3_CAPA);
+ pop3_state(data, POP3_CAPA);
return result;
}
@@ -357,7 +350,7 @@ static CURLcode pop3_perform_starttls(struct Curl_easy *data,
CURLcode result = Curl_pp_sendf(data, &conn->proto.pop3c.pp, "%s", "STLS");
if(!result)
- state(data, POP3_STARTTLS);
+ pop3_state(data, POP3_STARTTLS);
return result;
}
@@ -373,20 +366,28 @@ static CURLcode pop3_perform_upgrade_tls(struct Curl_easy *data,
{
/* Start the SSL connection */
struct pop3_conn *pop3c = &conn->proto.pop3c;
- CURLcode result =
- Curl_ssl_connect_nonblocking(data, conn, FALSE, FIRSTSOCKET,
- &pop3c->ssldone);
+ CURLcode result;
+ bool ssldone = FALSE;
+
+ if(!Curl_conn_is_ssl(conn, FIRSTSOCKET)) {
+ result = Curl_ssl_cfilter_add(data, conn, FIRSTSOCKET);
+ if(result)
+ goto out;
+ }
+
+ result = Curl_conn_connect(data, FIRSTSOCKET, FALSE, &ssldone);
if(!result) {
+ pop3c->ssldone = ssldone;
if(pop3c->state != POP3_UPGRADETLS)
- state(data, POP3_UPGRADETLS);
+ pop3_state(data, POP3_UPGRADETLS);
if(pop3c->ssldone) {
pop3_to_pop3s(conn);
result = pop3_perform_capa(data, conn);
}
}
-
+out:
return result;
}
@@ -404,7 +405,7 @@ static CURLcode pop3_perform_user(struct Curl_easy *data,
/* Check we have a username and password to authenticate with and end the
connect phase if we don't */
if(!data->state.aptr.user) {
- state(data, POP3_STOP);
+ pop3_state(data, POP3_STOP);
return result;
}
@@ -413,12 +414,12 @@ static CURLcode pop3_perform_user(struct Curl_easy *data,
result = Curl_pp_sendf(data, &conn->proto.pop3c.pp, "USER %s",
conn->user ? conn->user : "");
if(!result)
- state(data, POP3_USER);
+ pop3_state(data, POP3_USER);
return result;
}
-#ifndef CURL_DISABLE_CRYPTO_AUTH
+#ifndef CURL_DISABLE_DIGEST_AUTH
/***********************************************************************
*
* pop3_perform_apop()
@@ -438,7 +439,7 @@ static CURLcode pop3_perform_apop(struct Curl_easy *data,
/* Check we have a username and password to authenticate with and end the
connect phase if we don't */
if(!data->state.aptr.user) {
- state(data, POP3_STOP);
+ pop3_state(data, POP3_STOP);
return result;
}
@@ -464,7 +465,7 @@ static CURLcode pop3_perform_apop(struct Curl_easy *data,
result = Curl_pp_sendf(data, &pop3c->pp, "APOP %s %s", conn->user, secret);
if(!result)
- state(data, POP3_APOP);
+ pop3_state(data, POP3_APOP);
return result;
}
@@ -548,7 +549,7 @@ static CURLcode pop3_perform_authentication(struct Curl_easy *data,
/* Check we have enough data to authenticate with and end the
connect phase if we don't */
if(!Curl_sasl_can_authenticate(&pop3c->sasl, data)) {
- state(data, POP3_STOP);
+ pop3_state(data, POP3_STOP);
return result;
}
@@ -558,11 +559,11 @@ static CURLcode pop3_perform_authentication(struct Curl_easy *data,
if(!result)
if(progress == SASL_INPROGRESS)
- state(data, POP3_AUTH);
+ pop3_state(data, POP3_AUTH);
}
if(!result && progress == SASL_IDLE) {
-#ifndef CURL_DISABLE_CRYPTO_AUTH
+#ifndef CURL_DISABLE_DIGEST_AUTH
if(pop3c->authtypes & pop3c->preftype & POP3_TYPE_APOP)
/* Perform APOP authentication */
result = pop3_perform_apop(data, conn);
@@ -616,7 +617,7 @@ static CURLcode pop3_perform_command(struct Curl_easy *data)
pop3->custom : command));
if(!result)
- state(data, POP3_COMMAND);
+ pop3_state(data, POP3_COMMAND);
return result;
}
@@ -634,7 +635,7 @@ static CURLcode pop3_perform_quit(struct Curl_easy *data,
CURLcode result = Curl_pp_sendf(data, &conn->proto.pop3c.pp, "%s", "QUIT");
if(!result)
- state(data, POP3_QUIT);
+ pop3_state(data, POP3_QUIT);
return result;
}
@@ -767,7 +768,7 @@ static CURLcode pop3_state_capa_resp(struct Curl_easy *data, int pop3code,
if(pop3code != '+')
pop3c->authtypes |= POP3_TYPE_CLEARTEXT;
- if(!data->set.use_ssl || conn->ssl[FIRSTSOCKET].use)
+ if(!data->set.use_ssl || Curl_conn_is_ssl(conn, FIRSTSOCKET))
result = pop3_perform_authentication(data, conn);
else if(pop3code == '+' && pop3c->tls_supported)
/* Switch to TLS connection now */
@@ -827,10 +828,10 @@ static CURLcode pop3_state_auth_resp(struct Curl_easy *data,
if(!result)
switch(progress) {
case SASL_DONE:
- state(data, POP3_STOP); /* Authenticated */
+ pop3_state(data, POP3_STOP); /* Authenticated */
break;
case SASL_IDLE: /* No mechanism left after cancellation */
-#ifndef CURL_DISABLE_CRYPTO_AUTH
+#ifndef CURL_DISABLE_DIGEST_AUTH
if(pop3c->authtypes & pop3c->preftype & POP3_TYPE_APOP)
/* Perform APOP authentication */
result = pop3_perform_apop(data, conn);
@@ -851,7 +852,7 @@ static CURLcode pop3_state_auth_resp(struct Curl_easy *data,
return result;
}
-#ifndef CURL_DISABLE_CRYPTO_AUTH
+#ifndef CURL_DISABLE_DIGEST_AUTH
/* For APOP responses */
static CURLcode pop3_state_apop_resp(struct Curl_easy *data, int pop3code,
pop3state instate)
@@ -865,7 +866,7 @@ static CURLcode pop3_state_apop_resp(struct Curl_easy *data, int pop3code,
}
else
/* End of connect phase */
- state(data, POP3_STOP);
+ pop3_state(data, POP3_STOP);
return result;
}
@@ -888,7 +889,7 @@ static CURLcode pop3_state_user_resp(struct Curl_easy *data, int pop3code,
result = Curl_pp_sendf(data, &conn->proto.pop3c.pp, "PASS %s",
conn->passwd ? conn->passwd : "");
if(!result)
- state(data, POP3_PASS);
+ pop3_state(data, POP3_PASS);
return result;
}
@@ -906,7 +907,7 @@ static CURLcode pop3_state_pass_resp(struct Curl_easy *data, int pop3code,
}
else
/* End of connect phase */
- state(data, POP3_STOP);
+ pop3_state(data, POP3_STOP);
return result;
}
@@ -925,7 +926,7 @@ static CURLcode pop3_state_command_resp(struct Curl_easy *data,
(void)instate; /* no use for this yet */
if(pop3code != '+') {
- state(data, POP3_STOP);
+ pop3_state(data, POP3_STOP);
return CURLE_WEIRD_SERVER_REPLY;
}
@@ -948,7 +949,7 @@ static CURLcode pop3_state_command_resp(struct Curl_easy *data,
content so send it as such. Note that there may even be additional
"headers" after the body */
- if(!data->set.opt_no_body) {
+ if(!data->req.no_body) {
result = Curl_pop3_write(data, pp->cache, pp->cache_size);
if(result)
return result;
@@ -963,7 +964,7 @@ static CURLcode pop3_state_command_resp(struct Curl_easy *data,
}
/* End of DO phase */
- state(data, POP3_STOP);
+ pop3_state(data, POP3_STOP);
return result;
}
@@ -1014,7 +1015,7 @@ static CURLcode pop3_statemachine(struct Curl_easy *data,
result = pop3_state_auth_resp(data, pop3code, pop3c->state);
break;
-#ifndef CURL_DISABLE_CRYPTO_AUTH
+#ifndef CURL_DISABLE_DIGEST_AUTH
case POP3_APOP:
result = pop3_state_apop_resp(data, pop3code, pop3c->state);
break;
@@ -1033,12 +1034,12 @@ static CURLcode pop3_statemachine(struct Curl_easy *data,
break;
case POP3_QUIT:
- state(data, POP3_STOP);
+ pop3_state(data, POP3_STOP);
break;
default:
/* internal error */
- state(data, POP3_STOP);
+ pop3_state(data, POP3_STOP);
break;
}
} while(!result && pop3c->state != POP3_STOP && Curl_pp_moredata(pp));
@@ -1054,8 +1055,9 @@ static CURLcode pop3_multi_statemach(struct Curl_easy *data, bool *done)
struct pop3_conn *pop3c = &conn->proto.pop3c;
if((conn->handler->flags & PROTOPT_SSL) && !pop3c->ssldone) {
- result = Curl_ssl_connect_nonblocking(data, conn, FALSE,
- FIRSTSOCKET, &pop3c->ssldone);
+ bool ssldone = FALSE;
+ result = Curl_conn_connect(data, FIRSTSOCKET, FALSE, &ssldone);
+ pop3c->ssldone = ssldone;
if(result || !pop3c->ssldone)
return result;
}
@@ -1086,7 +1088,7 @@ static CURLcode pop3_init(struct Curl_easy *data)
CURLcode result = CURLE_OK;
struct POP3 *pop3;
- pop3 = data->req.p.pop3 = calloc(sizeof(struct POP3), 1);
+ pop3 = data->req.p.pop3 = calloc(1, sizeof(struct POP3));
if(!pop3)
result = CURLE_OUT_OF_MEMORY;
@@ -1138,7 +1140,7 @@ static CURLcode pop3_connect(struct Curl_easy *data, bool *done)
return result;
/* Start off waiting for the server greeting response */
- state(data, POP3_SERVERGREET);
+ pop3_state(data, POP3_SERVERGREET);
result = pop3_multi_statemach(data, done);
@@ -1192,12 +1194,11 @@ static CURLcode pop3_perform(struct Curl_easy *data, bool *connected,
{
/* This is POP3 and no proxy */
CURLcode result = CURLE_OK;
- struct connectdata *conn = data->conn;
struct POP3 *pop3 = data->req.p.pop3;
DEBUGF(infof(data, "DO phase starts"));
- if(data->set.opt_no_body) {
+ if(data->req.no_body) {
/* Requested no body means no transfer */
pop3->transfer = PPTRANSFER_INFO;
}
@@ -1211,7 +1212,7 @@ static CURLcode pop3_perform(struct Curl_easy *data, bool *connected,
/* Run the state-machine */
result = pop3_multi_statemach(data, dophase_done);
- *connected = conn->bits.tcpconnect[FIRSTSOCKET];
+ *connected = Curl_conn_is_connected(data->conn, FIRSTSOCKET);
if(*dophase_done)
DEBUGF(infof(data, "DO phase is complete"));
@@ -1372,7 +1373,7 @@ static CURLcode pop3_parse_url_options(struct connectdata *conn)
const char *value;
while(*ptr && *ptr != '=')
- ptr++;
+ ptr++;
value = ptr + 1;
diff --git a/lib/pop3.h b/lib/pop3.h
index bb0645f9b..83f0f831e 100644
--- a/lib/pop3.h
+++ b/lib/pop3.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2009 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -62,16 +62,16 @@ struct POP3 {
struct pop3_conn {
struct pingpong pp;
pop3state state; /* Always use pop3.c:state() to change state! */
- bool ssldone; /* Is connect() over SSL done? */
- bool tls_supported; /* StartTLS capability supported by server */
size_t eob; /* Number of bytes of the EOB (End Of Body) that
have been received so far */
size_t strip; /* Number of bytes from the start to ignore as
non-body */
struct SASL sasl; /* SASL-related storage */
- unsigned int authtypes; /* Accepted authentication types */
- unsigned int preftype; /* Preferred authentication type */
char *apoptimestamp; /* APOP timestamp from the server greeting */
+ unsigned char authtypes; /* Accepted authentication types */
+ unsigned char preftype; /* Preferred authentication type */
+ BIT(ssldone); /* Is connect() over SSL done? */
+ BIT(tls_supported); /* StartTLS capability supported by server */
};
extern const struct Curl_handler Curl_handler_pop3;
@@ -84,7 +84,7 @@ extern const struct Curl_handler Curl_handler_pop3s;
/* Authentication type values */
#define POP3_TYPE_NONE 0
-#define POP3_TYPE_ANY ~0U
+#define POP3_TYPE_ANY (POP3_TYPE_CLEARTEXT|POP3_TYPE_APOP|POP3_TYPE_SASL)
/* This is the 5-bytes End-Of-Body marker for POP3 */
#define POP3_EOB "\x0d\x0a\x2e\x0d\x0a"
diff --git a/lib/progress.c b/lib/progress.c
index 4a1e1daa8..e96cbf7af 100644
--- a/lib/progress.c
+++ b/lib/progress.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -87,8 +87,6 @@ static char *max5data(curl_off_t bytes, char *max5)
CURL_FORMAT_CURL_OFF_T "M", bytes/ONE_MEGABYTE,
(bytes%ONE_MEGABYTE) / (ONE_MEGABYTE/CURL_OFF_T_C(10)) );
-#if (SIZEOF_CURL_OFF_T > 4)
-
else if(bytes < CURL_OFF_T_C(10000) * ONE_MEGABYTE)
/* 'XXXXM' is good until we're at 10000MB or above */
msnprintf(max5, 6, "%4" CURL_FORMAT_CURL_OFF_T "M", bytes/ONE_MEGABYTE);
@@ -111,15 +109,8 @@ static char *max5data(curl_off_t bytes, char *max5)
/* up to 10000PB, display without decimal: XXXXP */
msnprintf(max5, 6, "%4" CURL_FORMAT_CURL_OFF_T "P", bytes/ONE_PETABYTE);
- /* 16384 petabytes (16 exabytes) is the maximum a 64 bit unsigned number
- can hold, but our data type is signed so 8192PB will be the maximum. */
-
-#else
-
- else
- msnprintf(max5, 6, "%4" CURL_FORMAT_CURL_OFF_T "M", bytes/ONE_MEGABYTE);
-
-#endif
+ /* 16384 petabytes (16 exabytes) is the maximum a 64 bit unsigned number can
+ hold, but our data type is signed so 8192PB will be the maximum. */
return max5;
}
@@ -166,14 +157,11 @@ void Curl_pgrsResetTransferSizes(struct Curl_easy *data)
/*
*
- * Curl_pgrsTime(). Store the current time at the given label. This fetches a
- * fresh "now" and returns it.
- *
- * @unittest: 1399
+ * Curl_pgrsTimeWas(). Store the timestamp time at the given label.
*/
-struct curltime Curl_pgrsTime(struct Curl_easy *data, timerid timer)
+void Curl_pgrsTimeWas(struct Curl_easy *data, timerid timer,
+ struct curltime timestamp)
{
- struct curltime now = Curl_now();
timediff_t *delta = NULL;
switch(timer) {
@@ -183,15 +171,15 @@ struct curltime Curl_pgrsTime(struct Curl_easy *data, timerid timer)
break;
case TIMER_STARTOP:
/* This is set at the start of a transfer */
- data->progress.t_startop = now;
+ data->progress.t_startop = timestamp;
break;
case TIMER_STARTSINGLE:
/* This is set at the start of each single fetch */
- data->progress.t_startsingle = now;
+ data->progress.t_startsingle = timestamp;
data->progress.is_t_startransfer_set = false;
break;
case TIMER_STARTACCEPT:
- data->progress.t_acceptdata = now;
+ data->progress.t_acceptdata = timestamp;
break;
case TIMER_NAMELOOKUP:
delta = &data->progress.t_nslookup;
@@ -214,7 +202,7 @@ struct curltime Curl_pgrsTime(struct Curl_easy *data, timerid timer)
* changing the t_starttransfer time.
*/
if(data->progress.is_t_startransfer_set) {
- return now;
+ return;
}
else {
data->progress.is_t_startransfer_set = true;
@@ -224,15 +212,30 @@ struct curltime Curl_pgrsTime(struct Curl_easy *data, timerid timer)
/* this is the normal end-of-transfer thing */
break;
case TIMER_REDIRECT:
- data->progress.t_redirect = Curl_timediff_us(now, data->progress.start);
+ data->progress.t_redirect = Curl_timediff_us(timestamp,
+ data->progress.start);
break;
}
if(delta) {
- timediff_t us = Curl_timediff_us(now, data->progress.t_startsingle);
+ timediff_t us = Curl_timediff_us(timestamp, data->progress.t_startsingle);
if(us < 1)
us = 1; /* make sure at least one microsecond passed */
*delta += us;
}
+}
+
+/*
+ *
+ * Curl_pgrsTime(). Store the current time at the given label. This fetches a
+ * fresh "now" and returns it.
+ *
+ * @unittest: 1399
+ */
+struct curltime Curl_pgrsTime(struct Curl_easy *data, timerid timer)
+{
+ struct curltime now = Curl_now();
+
+ Curl_pgrsTimeWas(data, timer, now);
return now;
}
@@ -301,7 +304,7 @@ timediff_t Curl_pgrsLimitWaitTime(curl_off_t cursize,
* 'actual' is the time in milliseconds it took to actually download the
* last 'size' bytes.
*/
- actual = Curl_timediff(now, start);
+ actual = Curl_timediff_ceil(now, start);
if(actual < minimum) {
/* if it downloaded the data faster than the limit, make it wait the
difference */
@@ -314,9 +317,10 @@ timediff_t Curl_pgrsLimitWaitTime(curl_off_t cursize,
/*
* Set the number of downloaded bytes so far.
*/
-void Curl_pgrsSetDownloadCounter(struct Curl_easy *data, curl_off_t size)
+CURLcode Curl_pgrsSetDownloadCounter(struct Curl_easy *data, curl_off_t size)
{
data->progress.downloaded = size;
+ return CURLE_OK;
}
/*
diff --git a/lib/progress.h b/lib/progress.h
index a12931514..fc39e34d2 100644
--- a/lib/progress.h
+++ b/lib/progress.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -46,7 +46,10 @@ int Curl_pgrsDone(struct Curl_easy *data);
void Curl_pgrsStartNow(struct Curl_easy *data);
void Curl_pgrsSetDownloadSize(struct Curl_easy *data, curl_off_t size);
void Curl_pgrsSetUploadSize(struct Curl_easy *data, curl_off_t size);
-void Curl_pgrsSetDownloadCounter(struct Curl_easy *data, curl_off_t size);
+
+/* It is fine to not check the return code if 'size' is set to 0 */
+CURLcode Curl_pgrsSetDownloadCounter(struct Curl_easy *data, curl_off_t size);
+
void Curl_pgrsSetUploadCounter(struct Curl_easy *data, curl_off_t size);
void Curl_ratelimit(struct Curl_easy *data, struct curltime now);
int Curl_pgrsUpdate(struct Curl_easy *data);
@@ -57,6 +60,13 @@ timediff_t Curl_pgrsLimitWaitTime(curl_off_t cursize,
curl_off_t limit,
struct curltime start,
struct curltime now);
+/**
+ * Update progress timer with the elapsed time from its start to `timestamp`.
+ * This allows updating timers later and is used by happy eyeballing, where
+ * we only want to record the winner's times.
+ */
+void Curl_pgrsTimeWas(struct Curl_easy *data, timerid timer,
+ struct curltime timestamp);
#define PGRS_HIDE (1<<4)
#define PGRS_UL_SIZE_KNOWN (1<<5)
diff --git a/lib/psl.c b/lib/psl.c
index 60c98a4ca..626a203a6 100644
--- a/lib/psl.c
+++ b/lib/psl.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/psl.h b/lib/psl.h
index 34f0a5cae..23cfa921c 100644
--- a/lib/psl.h
+++ b/lib/psl.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/quic.h b/lib/quic.h
deleted file mode 100644
index b35774735..000000000
--- a/lib/quic.h
+++ /dev/null
@@ -1,68 +0,0 @@
-#ifndef HEADER_CURL_QUIC_H
-#define HEADER_CURL_QUIC_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed 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 "curl_setup.h"
-
-#ifdef ENABLE_QUIC
-#ifdef USE_NGTCP2
-#include "vquic/ngtcp2.h"
-#endif
-#ifdef USE_QUICHE
-#include "vquic/quiche.h"
-#endif
-#ifdef USE_MSH3
-#include "vquic/msh3.h"
-#endif
-
-#include "urldata.h"
-
-/* functions provided by the specific backends */
-CURLcode Curl_quic_connect(struct Curl_easy *data,
- struct connectdata *conn,
- curl_socket_t sockfd,
- int sockindex,
- const struct sockaddr *addr,
- socklen_t addrlen);
-CURLcode Curl_quic_is_connected(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex,
- bool *connected);
-void Curl_quic_ver(char *p, size_t len);
-CURLcode Curl_quic_done_sending(struct Curl_easy *data);
-void Curl_quic_done(struct Curl_easy *data, bool premature);
-bool Curl_quic_data_pending(const struct Curl_easy *data);
-void Curl_quic_disconnect(struct Curl_easy *data,
- struct connectdata *conn, int tempindex);
-CURLcode Curl_quic_idle(struct Curl_easy *data);
-
-#else /* ENABLE_QUIC */
-#define Curl_quic_done_sending(x)
-#define Curl_quic_done(x,y)
-#define Curl_quic_data_pending(x)
-#define Curl_quic_disconnect(x,y,z)
-#endif /* !ENABLE_QUIC */
-
-#endif /* HEADER_CURL_QUIC_H */
diff --git a/lib/rand.c b/lib/rand.c
index 2e7e7e823..3383c490b 100644
--- a/lib/rand.c
+++ b/lib/rand.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,28 +24,31 @@
#include "curl_setup.h"
+#include <limits.h>
+
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
#endif
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
#include <curl/curl.h>
+#include "urldata.h"
#include "vtls/vtls.h"
#include "sendf.h"
+#include "timeval.h"
#include "rand.h"
+#include "escape.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"
-#ifdef WIN32
-
-#if defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)
-# define HAVE_MINGW_ORIGINAL
-#endif
+#ifdef _WIN32
-#if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x600 && \
- !defined(HAVE_MINGW_ORIGINAL)
+#if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x600
# define HAVE_WIN_BCRYPTGENRANDOM
# include <bcrypt.h>
# ifdef _MSC_VER
@@ -98,7 +101,6 @@ CURLcode Curl_win32_random(unsigned char *entropy, size_t length)
static CURLcode randit(struct Curl_easy *data, unsigned int *rnd)
{
- unsigned int r;
CURLcode result = CURLE_OK;
static unsigned int randseed;
static bool seeded = FALSE;
@@ -131,7 +133,7 @@ static CURLcode randit(struct Curl_easy *data, unsigned int *rnd)
/* ---- non-cryptographic version following ---- */
-#ifdef WIN32
+#ifdef _WIN32
if(!seeded) {
result = Curl_win32_random((unsigned char *)rnd, sizeof(*rnd));
if(result != CURLE_NOT_BUILT_IN)
@@ -139,7 +141,14 @@ static CURLcode randit(struct Curl_easy *data, unsigned int *rnd)
}
#endif
-#if defined(RANDOM_FILE) && !defined(WIN32)
+#if defined(HAVE_ARC4RANDOM) && !defined(USE_OPENSSL)
+ if(!seeded) {
+ *rnd = (unsigned int)arc4random();
+ return CURLE_OK;
+ }
+#endif
+
+#if defined(RANDOM_FILE) && !defined(_WIN32)
if(!seeded) {
/* if there's a random file to read a seed from, use it */
int fd = open(RANDOM_FILE, O_RDONLY);
@@ -163,18 +172,21 @@ static CURLcode randit(struct Curl_easy *data, unsigned int *rnd)
seeded = TRUE;
}
- /* Return an unsigned 32-bit pseudo-random number. */
- r = randseed = randseed * 1103515245 + 12345;
- *rnd = (r << 16) | ((r >> 16) & 0xFFFF);
+ {
+ unsigned int r;
+ /* Return an unsigned 32-bit pseudo-random number. */
+ r = randseed = randseed * 1103515245 + 12345;
+ *rnd = (r << 16) | ((r >> 16) & 0xFFFF);
+ }
return CURLE_OK;
}
/*
- * Curl_rand() stores 'num' number of random unsigned integers in the buffer
- * 'rndptr' points to.
+ * Curl_rand() stores 'num' number of random unsigned characters in the buffer
+ * 'rnd' points to.
*
* If libcurl is built without TLS support or with a TLS backend that lacks a
- * proper random API (rustls, Gskit or mbedTLS), this function will use "weak"
+ * proper random API (rustls or mbedTLS), this function will use "weak"
* random.
*
* When built *with* TLS support and a backend that offers strong random, it
@@ -220,9 +232,7 @@ CURLcode Curl_rand_hex(struct Curl_easy *data, unsigned char *rnd,
size_t num)
{
CURLcode result = CURLE_BAD_FUNCTION_ARGUMENT;
- const char *hex = "0123456789abcdef";
unsigned char buffer[128];
- unsigned char *bufp = buffer;
DEBUGASSERT(num > 1);
#ifdef __clang_analyzer__
@@ -241,13 +251,37 @@ CURLcode Curl_rand_hex(struct Curl_easy *data, unsigned char *rnd,
if(result)
return result;
+ Curl_hexencode(buffer, num/2, rnd, num + 1);
+ return result;
+}
+
+/*
+ * Curl_rand_alnum() fills the 'rnd' buffer with a given 'num' size with random
+ * alphanumerical chars PLUS a null-terminating byte.
+ */
+
+static const char alnum[] =
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+
+CURLcode Curl_rand_alnum(struct Curl_easy *data, unsigned char *rnd,
+ size_t num)
+{
+ CURLcode result = CURLE_OK;
+ const int alnumspace = sizeof(alnum) - 1;
+ unsigned int r;
+ DEBUGASSERT(num > 1);
+
+ num--; /* save one for null-termination */
+
while(num) {
- /* clang-tidy warns on this line without this comment: */
- /* NOLINTNEXTLINE(clang-analyzer-core.UndefinedBinaryOperatorResult) */
- *rnd++ = hex[(*bufp & 0xF0)>>4];
- *rnd++ = hex[*bufp & 0x0F];
- bufp++;
- num -= 2;
+ do {
+ result = randit(data, &r);
+ if(result)
+ return result;
+ } while(r >= (UINT_MAX - UINT_MAX % alnumspace));
+
+ *rnd++ = alnum[r % alnumspace];
+ num--;
}
*rnd = 0;
diff --git a/lib/rand.h b/lib/rand.h
index 30fc29615..bc05239e4 100644
--- a/lib/rand.h
+++ b/lib/rand.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,20 +24,6 @@
*
***************************************************************************/
-/*
- * Curl_rand() stores 'num' number of random unsigned characters in the buffer
- * 'rnd' points to.
- *
- * If libcurl is built without TLS support or with a TLS backend that lacks a
- * proper random API (Gskit or mbedTLS), this function will use "weak" random.
- *
- * When built *with* TLS support and a backend that offers strong random, it
- * will return error if it cannot provide strong random values.
- *
- * NOTE: 'data' may be passed in as NULL when coming from external API without
- * easy handle!
- *
- */
CURLcode Curl_rand(struct Curl_easy *data, unsigned char *rnd, size_t num);
/*
@@ -48,7 +34,14 @@ CURLcode Curl_rand(struct Curl_easy *data, unsigned char *rnd, size_t num);
CURLcode Curl_rand_hex(struct Curl_easy *data, unsigned char *rnd,
size_t num);
-#ifdef WIN32
+/*
+ * Curl_rand_alnum() fills the 'rnd' buffer with a given 'num' size with random
+ * alphanumerical chars PLUS a null-terminating byte.
+ */
+CURLcode Curl_rand_alnum(struct Curl_easy *data, unsigned char *rnd,
+ size_t num);
+
+#ifdef _WIN32
/* Random generator shared between the Schannel vtls and Curl_rand*()
functions */
CURLcode Curl_win32_random(unsigned char *entropy, size_t length);
diff --git a/lib/rename.c b/lib/rename.c
index cfb3699fb..4c8869806 100644
--- a/lib/rename.c
+++ b/lib/rename.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2020 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -40,7 +40,7 @@
/* return 0 on success, 1 on error */
int Curl_rename(const char *oldpath, const char *newpath)
{
-#ifdef WIN32
+#ifdef _WIN32
/* rename() on Windows doesn't overwrite, so we can't use it here.
MoveFileEx() will overwrite and is usually atomic, however it fails
when there are open handles to the file. */
diff --git a/lib/rename.h b/lib/rename.h
index 9958e2cd2..04440820c 100644
--- a/lib/rename.h
+++ b/lib/rename.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2020 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/rtsp.c b/lib/rtsp.c
index 6d3bf97e6..e673bb8dc 100644
--- a/lib/rtsp.c
+++ b/lib/rtsp.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -38,16 +38,15 @@
#include "strcase.h"
#include "select.h"
#include "connect.h"
+#include "cfilters.h"
#include "strdup.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"
-#define RTP_PKT_CHANNEL(p) ((int)((unsigned char)((p)[1])))
-
-#define RTP_PKT_LENGTH(p) ((((int)((unsigned char)((p)[2]))) << 8) | \
- ((int)((unsigned char)((p)[3]))))
+#define RTP_PKT_LENGTH(p) ((((unsigned int)((unsigned char)((p)[2]))) << 8) | \
+ ((unsigned int)((unsigned char)((p)[3]))))
/* protocol-specific functions set up to be called by the main engine */
static CURLcode rtsp_do(struct Curl_easy *data, bool *done);
@@ -60,14 +59,19 @@ static int rtsp_getsock_do(struct Curl_easy *data,
/*
* Parse and write out any available RTP data.
- *
- * nread: amount of data left after k->str. will be modified if RTP
- * data is parsed and k->str is moved up
- * readmore: whether or not the RTP parser needs more data right away
+ * @param data the transfer
+ * @param conn the connection
+ * @param buf data read from connection
+ * @param blen amount of data in buf
+ * @param consumed out, number of blen consumed
+ * @param readmore out, TRUE iff complete buf was consumed and more data
+ * is needed
*/
static CURLcode rtsp_rtp_readwrite(struct Curl_easy *data,
struct connectdata *conn,
- ssize_t *nread,
+ const char *buf,
+ size_t blen,
+ size_t *pconsumed,
bool *readmore);
static CURLcode rtsp_setup_connection(struct Curl_easy *data,
@@ -89,7 +93,9 @@ static int rtsp_getsock_do(struct Curl_easy *data, struct connectdata *conn,
}
static
-CURLcode rtp_client_write(struct Curl_easy *data, char *ptr, size_t len);
+CURLcode rtp_client_write(struct Curl_easy *data, const char *ptr, size_t len);
+static
+CURLcode rtsp_parse_transport(struct Curl_easy *data, char *transport);
/*
@@ -118,6 +124,7 @@ const struct Curl_handler Curl_handler_rtsp = {
PROTOPT_NONE /* flags */
};
+#define MAX_RTP_BUFFERSIZE 1000000 /* arbitrary */
static CURLcode rtsp_setup_connection(struct Curl_easy *data,
struct connectdata *conn)
@@ -129,41 +136,12 @@ static CURLcode rtsp_setup_connection(struct Curl_easy *data,
if(!rtsp)
return CURLE_OUT_OF_MEMORY;
+ Curl_dyn_init(&conn->proto.rtspc.buf, MAX_RTP_BUFFERSIZE);
return CURLE_OK;
}
/*
- * The server may send us RTP data at any point, and RTSPREQ_RECEIVE does not
- * want to block the application forever while receiving a stream. Therefore,
- * we cannot assume that an RTSP socket is dead just because it is readable.
- *
- * Instead, if it is readable, run Curl_connalive() to peek at the socket
- * and distinguish between closed and data.
- */
-static bool rtsp_connisdead(struct connectdata *check)
-{
- int sval;
- bool ret_val = TRUE;
-
- sval = SOCKET_READABLE(check->sock[FIRSTSOCKET], 0);
- if(sval == 0) {
- /* timeout */
- ret_val = FALSE;
- }
- else if(sval & CURL_CSELECT_ERR) {
- /* socket is in an error state */
- ret_val = TRUE;
- }
- else if(sval & CURL_CSELECT_IN) {
- /* readable with no error. could still be closed */
- ret_val = !Curl_connalive(check);
- }
-
- return ret_val;
-}
-
-/*
* Function to check on various aspects of a connection.
*/
static unsigned int rtsp_conncheck(struct Curl_easy *data,
@@ -174,7 +152,8 @@ static unsigned int rtsp_conncheck(struct Curl_easy *data,
(void)data;
if(checks_to_perform & CONNCHECK_ISDEAD) {
- if(rtsp_connisdead(conn))
+ bool input_pending;
+ if(!Curl_conn_is_alive(data, conn, &input_pending))
ret_val |= CONNRESULT_DEAD;
}
@@ -204,7 +183,7 @@ static CURLcode rtsp_disconnect(struct Curl_easy *data,
{
(void) dead;
(void) data;
- Curl_safefree(conn->proto.rtspc.rtp_buf);
+ Curl_dyn_free(&conn->proto.rtspc.buf);
return CURLE_OK;
}
@@ -232,7 +211,7 @@ static CURLcode rtsp_done(struct Curl_easy *data,
return CURLE_RTSP_CSEQ_ERROR;
}
if(data->set.rtspreq == RTSPREQ_RECEIVE &&
- (data->conn->proto.rtspc.rtp_channel == -1)) {
+ (data->conn->proto.rtspc.rtp_channel == -1)) {
infof(data, "Got an RTP Receive with a CSeq of %ld", CSeq_recv);
}
}
@@ -267,11 +246,23 @@ static CURLcode rtsp_do(struct Curl_easy *data, bool *done)
rtsp->CSeq_sent = data->state.rtsp_next_client_CSeq;
rtsp->CSeq_recv = 0;
+ /* Setup the first_* fields to allow auth details get sent
+ to this origin */
+
+ if(!data->state.first_host) {
+ data->state.first_host = strdup(conn->host.name);
+ if(!data->state.first_host)
+ return CURLE_OUT_OF_MEMORY;
+
+ data->state.first_remote_port = conn->remote_port;
+ data->state.first_remote_protocol = conn->handler->protocol;
+ }
+
/* Setup the 'p_request' pointer to the proper p_request string
* Since all RTSP requests are included here, there is no need to
* support custom requests like HTTP.
**/
- data->set.opt_no_body = TRUE; /* most requests don't contain a body */
+ data->req.no_body = TRUE; /* most requests don't contain a body */
switch(rtspreq) {
default:
failf(data, "Got invalid RTSP request");
@@ -281,7 +272,7 @@ static CURLcode rtsp_do(struct Curl_easy *data, bool *done)
break;
case RTSPREQ_DESCRIBE:
p_request = "DESCRIBE";
- data->set.opt_no_body = FALSE;
+ data->req.no_body = FALSE;
break;
case RTSPREQ_ANNOUNCE:
p_request = "ANNOUNCE";
@@ -301,7 +292,7 @@ static CURLcode rtsp_do(struct Curl_easy *data, bool *done)
case RTSPREQ_GET_PARAMETER:
/* GET_PARAMETER's no_body status is determined later */
p_request = "GET_PARAMETER";
- data->set.opt_no_body = FALSE;
+ data->req.no_body = FALSE;
break;
case RTSPREQ_SET_PARAMETER:
p_request = "SET_PARAMETER";
@@ -311,8 +302,8 @@ static CURLcode rtsp_do(struct Curl_easy *data, bool *done)
break;
case RTSPREQ_RECEIVE:
p_request = "";
- /* Treat interleaved RTP as body*/
- data->set.opt_no_body = FALSE;
+ /* Treat interleaved RTP as body */
+ data->req.no_body = FALSE;
break;
case RTSPREQ_LAST:
failf(data, "Got invalid RTSP request: RTSPREQ_LAST");
@@ -390,7 +381,6 @@ static CURLcode rtsp_do(struct Curl_easy *data, bool *done)
if(Curl_checkheaders(data, STRCONST("User-Agent")) &&
data->state.aptr.uagent) {
Curl_safefree(data->state.aptr.uagent);
- data->state.aptr.uagent = NULL;
}
else if(!Curl_checkheaders(data, STRCONST("User-Agent")) &&
data->set.str[STRING_USERAGENT]) {
@@ -410,8 +400,6 @@ static CURLcode rtsp_do(struct Curl_easy *data, bool *done)
Curl_safefree(data->state.aptr.ref);
if(data->state.referer && !Curl_checkheaders(data, STRCONST("Referer")))
data->state.aptr.ref = aprintf("Referer: %s\r\n", data->state.referer);
- else
- data->state.aptr.ref = NULL;
p_referrer = data->state.aptr.ref;
@@ -492,7 +480,6 @@ static CURLcode rtsp_do(struct Curl_easy *data, bool *done)
* with basic and digest, it will be freed anyway by the next request
*/
Curl_safefree(data->state.aptr.userpwd);
- data->state.aptr.userpwd = NULL;
if(result)
return result;
@@ -511,7 +498,7 @@ static CURLcode rtsp_do(struct Curl_easy *data, bool *done)
rtspreq == RTSPREQ_SET_PARAMETER ||
rtspreq == RTSPREQ_GET_PARAMETER) {
- if(data->set.upload) {
+ if(data->state.upload) {
putsize = data->state.infilesize;
data->state.httpreq = HTTPREQ_PUT;
@@ -530,7 +517,7 @@ static CURLcode rtsp_do(struct Curl_easy *data, bool *done)
result =
Curl_dyn_addf(&req_buffer,
"Content-Length: %" CURL_FORMAT_CURL_OFF_T"\r\n",
- (data->set.upload ? putsize : postsize));
+ (data->state.upload ? putsize : postsize));
if(result)
return result;
}
@@ -561,7 +548,7 @@ static CURLcode rtsp_do(struct Curl_easy *data, bool *done)
else if(rtspreq == RTSPREQ_GET_PARAMETER) {
/* Check for an empty GET_PARAMETER (heartbeat) request */
data->state.httpreq = HTTPREQ_HEAD;
- data->set.opt_no_body = TRUE;
+ data->req.no_body = TRUE;
}
}
@@ -580,7 +567,7 @@ static CURLcode rtsp_do(struct Curl_easy *data, bool *done)
}
/* issue the request */
- result = Curl_buffer_send(&req_buffer, data,
+ result = Curl_buffer_send(&req_buffer, data, data->req.p.http,
&data->info.request_size, 0, FIRSTSOCKET);
if(result) {
failf(data, "Failed sending RTSP request");
@@ -603,133 +590,249 @@ static CURLcode rtsp_do(struct Curl_easy *data, bool *done)
return result;
}
-
-static CURLcode rtsp_rtp_readwrite(struct Curl_easy *data,
- struct connectdata *conn,
- ssize_t *nread,
- bool *readmore) {
- struct SingleRequest *k = &data->req;
+static CURLcode rtsp_filter_rtp(struct Curl_easy *data,
+ struct connectdata *conn,
+ const char *buf,
+ size_t blen,
+ bool in_body,
+ size_t *pconsumed)
+{
struct rtsp_conn *rtspc = &(conn->proto.rtspc);
+ CURLcode result = CURLE_OK;
- char *rtp; /* moving pointer to rtp data */
- ssize_t rtp_dataleft; /* how much data left to parse in this round */
- char *scratch;
- CURLcode result;
-
- if(rtspc->rtp_buf) {
- /* There was some leftover data the last time. Merge buffers */
- char *newptr = Curl_saferealloc(rtspc->rtp_buf,
- rtspc->rtp_bufsize + *nread);
- if(!newptr) {
- rtspc->rtp_buf = NULL;
- rtspc->rtp_bufsize = 0;
- return CURLE_OUT_OF_MEMORY;
- }
- rtspc->rtp_buf = newptr;
- memcpy(rtspc->rtp_buf + rtspc->rtp_bufsize, k->str, *nread);
- rtspc->rtp_bufsize += *nread;
- rtp = rtspc->rtp_buf;
- rtp_dataleft = rtspc->rtp_bufsize;
- }
- else {
- /* Just parse the request buffer directly */
- rtp = k->str;
- rtp_dataleft = *nread;
- }
-
- while((rtp_dataleft > 0) &&
- (rtp[0] == '$')) {
- if(rtp_dataleft > 4) {
- int rtp_length;
-
- /* Parse the header */
- /* The channel identifier immediately follows and is 1 byte */
- rtspc->rtp_channel = RTP_PKT_CHANNEL(rtp);
+ *pconsumed = 0;
+ while(blen) {
+ switch(rtspc->state) {
- /* The length is two bytes */
- rtp_length = RTP_PKT_LENGTH(rtp);
+ case RTP_PARSE_SKIP: {
+ DEBUGASSERT(Curl_dyn_len(&rtspc->buf) == 0);
+ if(in_body && buf[0] != '$') {
+ /* in BODY and no valid start, do not consume and return */
+ goto out;
+ }
+ while(blen && buf[0] != '$') {
+ if(!in_body && buf[0] == 'R' &&
+ data->set.rtspreq != RTSPREQ_RECEIVE) {
+ if(strncmp(buf, "RTSP/", (blen < 5) ? blen : 5) == 0) {
+ /* This could be the next response, no consume and return */
+ if(*pconsumed) {
+ DEBUGF(infof(data, "RTP rtsp_filter_rtp[SKIP] RTSP/ prefix, "
+ "skipping %zd bytes of junk", *pconsumed));
+ }
+ rtspc->state = RTP_PARSE_SKIP;
+ rtspc->in_header = TRUE;
+ goto out;
+ }
+ }
+ /* junk, consume without buffering */
+ *pconsumed += 1;
+ ++buf;
+ --blen;
+ }
+ if(blen && buf[0] == '$') {
+ /* possible start of an RTP message, buffer */
+ if(Curl_dyn_addn(&rtspc->buf, buf, 1)) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
+ }
+ *pconsumed += 1;
+ ++buf;
+ --blen;
+ rtspc->state = RTP_PARSE_CHANNEL;
+ }
+ break;
+ }
- if(rtp_dataleft < rtp_length + 4) {
- /* Need more - incomplete payload*/
- *readmore = TRUE;
+ case RTP_PARSE_CHANNEL: {
+ int idx = ((unsigned char)buf[0]) / 8;
+ int off = ((unsigned char)buf[0]) % 8;
+ DEBUGASSERT(Curl_dyn_len(&rtspc->buf) == 1);
+ if(!(data->state.rtp_channel_mask[idx] & (1 << off))) {
+ /* invalid channel number, junk or BODY data */
+ rtspc->state = RTP_PARSE_SKIP;
+ if(in_body) {
+ /* we do not consume this byte, it is BODY data */
+ DEBUGF(infof(data, "RTSP: invalid RTP channel %d in BODY, "
+ "treating as BODY data", idx));
+ if(*pconsumed == 0) {
+ /* We did not consume the initial '$' in our buffer, but had
+ * it from an earlier call. We cannot un-consume it and have
+ * to write it directly as BODY data */
+ result = Curl_client_write(data, CLIENTWRITE_BODY,
+ Curl_dyn_ptr(&rtspc->buf), 1);
+ Curl_dyn_free(&rtspc->buf);
+ if(result)
+ goto out;
+ }
+ else {
+ /* un-consume the '$' and leave */
+ Curl_dyn_free(&rtspc->buf);
+ *pconsumed -= 1;
+ --buf;
+ ++blen;
+ goto out;
+ }
+ }
+ else {
+ /* not BODY, forget the junk '$'. Do not consume this byte,
+ * it might be a start */
+ infof(data, "RTSP: invalid RTP channel %d, skipping", idx);
+ Curl_dyn_free(&rtspc->buf);
+ }
break;
}
- /* We have the full RTP interleaved packet
- * Write out the header including the leading '$' */
- DEBUGF(infof(data, "RTP write channel %d rtp_length %d",
- rtspc->rtp_channel, rtp_length));
- result = rtp_client_write(data, &rtp[0], rtp_length + 4);
- if(result) {
- failf(data, "Got an error writing an RTP packet");
- *readmore = FALSE;
- Curl_safefree(rtspc->rtp_buf);
- rtspc->rtp_buf = NULL;
- rtspc->rtp_bufsize = 0;
- return result;
+ /* a valid channel, so we expect this to be a real RTP message */
+ rtspc->rtp_channel = (unsigned char)buf[0];
+ if(Curl_dyn_addn(&rtspc->buf, buf, 1)) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
}
+ *pconsumed += 1;
+ ++buf;
+ --blen;
+ rtspc->state = RTP_PARSE_LEN;
+ break;
+ }
- /* Move forward in the buffer */
- rtp_dataleft -= rtp_length + 4;
- rtp += rtp_length + 4;
-
- if(data->set.rtspreq == RTSPREQ_RECEIVE) {
- /* If we are in a passive receive, give control back
- * to the app as often as we can.
- */
- k->keepon &= ~KEEP_RECV;
+ case RTP_PARSE_LEN: {
+ size_t rtp_len = Curl_dyn_len(&rtspc->buf);
+ const char *rtp_buf;
+ DEBUGASSERT(rtp_len >= 2 && rtp_len < 4);
+ if(Curl_dyn_addn(&rtspc->buf, buf, 1)) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
}
+ *pconsumed += 1;
+ ++buf;
+ --blen;
+ if(rtp_len == 2)
+ break;
+ rtp_buf = Curl_dyn_ptr(&rtspc->buf);
+ rtspc->rtp_len = RTP_PKT_LENGTH(rtp_buf) + 4;
+ rtspc->state = RTP_PARSE_DATA;
+ break;
}
- else {
- /* Need more - incomplete header */
- *readmore = TRUE;
+
+ case RTP_PARSE_DATA: {
+ size_t rtp_len = Curl_dyn_len(&rtspc->buf);
+ size_t needed;
+ DEBUGASSERT(rtp_len < rtspc->rtp_len);
+ needed = rtspc->rtp_len - rtp_len;
+ if(needed <= blen) {
+ if(Curl_dyn_addn(&rtspc->buf, buf, needed)) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
+ }
+ *pconsumed += needed;
+ buf += needed;
+ blen -= needed;
+ /* complete RTP message in buffer */
+ DEBUGF(infof(data, "RTP write channel %d rtp_len %zu",
+ rtspc->rtp_channel, rtspc->rtp_len));
+ result = rtp_client_write(data, Curl_dyn_ptr(&rtspc->buf),
+ rtspc->rtp_len);
+ Curl_dyn_free(&rtspc->buf);
+ rtspc->state = RTP_PARSE_SKIP;
+ if(result)
+ goto out;
+ }
+ else {
+ if(Curl_dyn_addn(&rtspc->buf, buf, blen)) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
+ }
+ *pconsumed += blen;
+ buf += blen;
+ blen = 0;
+ }
break;
}
+
+ default:
+ DEBUGASSERT(0);
+ return CURLE_RECV_ERROR;
+ }
}
+out:
+ return result;
+}
- if(rtp_dataleft && rtp[0] == '$') {
- DEBUGF(infof(data, "RTP Rewinding %zd %s", rtp_dataleft,
- *readmore ? "(READMORE)" : ""));
+static CURLcode rtsp_rtp_readwrite(struct Curl_easy *data,
+ struct connectdata *conn,
+ const char *buf,
+ size_t blen,
+ size_t *pconsumed,
+ bool *readmore)
+{
+ struct rtsp_conn *rtspc = &(conn->proto.rtspc);
+ CURLcode result = CURLE_OK;
+ size_t consumed = 0;
+ bool in_body;
- /* Store the incomplete RTP packet for a "rewind" */
- scratch = malloc(rtp_dataleft);
- if(!scratch) {
- Curl_safefree(rtspc->rtp_buf);
- rtspc->rtp_buf = NULL;
- rtspc->rtp_bufsize = 0;
- return CURLE_OUT_OF_MEMORY;
- }
- memcpy(scratch, rtp, rtp_dataleft);
- Curl_safefree(rtspc->rtp_buf);
- rtspc->rtp_buf = scratch;
- rtspc->rtp_bufsize = rtp_dataleft;
+ if(!data->req.header)
+ rtspc->in_header = FALSE;
+ in_body = (data->req.headerline && !rtspc->in_header) &&
+ (data->req.size >= 0) &&
+ (data->req.bytecount < data->req.size);
- /* As far as the transfer is concerned, this data is consumed */
- *nread = 0;
- return CURLE_OK;
+ *readmore = FALSE;
+ *pconsumed = 0;
+ if(!blen) {
+ goto out;
}
- /* Fix up k->str to point just after the last RTP packet */
- k->str += *nread - rtp_dataleft;
- /* either all of the data has been read or...
- * rtp now points at the next byte to parse
- */
- if(rtp_dataleft > 0)
- DEBUGASSERT(k->str[0] == rtp[0]);
-
- DEBUGASSERT(rtp_dataleft <= *nread); /* sanity check */
+ /* If header parsing is not onging, extract RTP messages */
+ if(!rtspc->in_header) {
+ result = rtsp_filter_rtp(data, conn, buf, blen, in_body, &consumed);
+ if(result)
+ goto out;
+ *pconsumed += consumed;
+ buf += consumed;
+ blen -= consumed;
+ }
- *nread = rtp_dataleft;
+ /* we want to parse headers, do so */
+ if(data->req.header && blen) {
+ rtspc->in_header = TRUE;
+ result = Curl_http_readwrite_headers(data, conn, buf, blen,
+ &consumed);
+ if(result)
+ goto out;
+
+ *pconsumed += consumed;
+ buf += consumed;
+ blen -= consumed;
+
+ if(!data->req.header)
+ rtspc->in_header = FALSE;
+
+ if(!rtspc->in_header) {
+ /* If header parsing is done and data left, extract RTP messages */
+ in_body = (data->req.headerline && !rtspc->in_header) &&
+ (data->req.size >= 0) &&
+ (data->req.bytecount < data->req.size);
+ result = rtsp_filter_rtp(data, conn, buf, blen, in_body, &consumed);
+ if(result)
+ goto out;
+ *pconsumed += consumed;
+ }
+ }
- /* If we get here, we have finished with the leftover/merge buffer */
- Curl_safefree(rtspc->rtp_buf);
- rtspc->rtp_buf = NULL;
- rtspc->rtp_bufsize = 0;
+ if(rtspc->state != RTP_PARSE_SKIP)
+ *readmore = TRUE;
- return CURLE_OK;
+out:
+ if(!*readmore && data->set.rtspreq == RTSPREQ_RECEIVE) {
+ /* In special mode RECEIVE, we just process one chunk of network
+ * data, so we stop the transfer here, if we have no incomplete
+ * RTP message pending. */
+ data->req.keepon &= ~KEEP_RECV;
+ }
+ return result;
}
static
-CURLcode rtp_client_write(struct Curl_easy *data, char *ptr, size_t len)
+CURLcode rtp_client_write(struct Curl_easy *data, const char *ptr, size_t len)
{
size_t wrote;
curl_write_callback writeit;
@@ -754,7 +857,7 @@ CURLcode rtp_client_write(struct Curl_easy *data, char *ptr, size_t len)
}
Curl_set_in_callback(data, true);
- wrote = writeit(ptr, 1, len, user_ptr);
+ wrote = writeit((char *)ptr, 1, len, user_ptr);
Curl_set_in_callback(data, false);
if(CURL_WRITEFUNC_PAUSE == wrote) {
@@ -772,12 +875,14 @@ CURLcode rtp_client_write(struct Curl_easy *data, char *ptr, size_t len)
CURLcode Curl_rtsp_parseheader(struct Curl_easy *data, char *header)
{
- long CSeq = 0;
-
if(checkprefix("CSeq:", header)) {
- /* Store the received CSeq. Match is verified in rtsp_done */
- int nc = sscanf(&header[4], ": %ld", &CSeq);
- if(nc == 1) {
+ long CSeq = 0;
+ char *endp;
+ char *p = &header[5];
+ while(ISBLANK(*p))
+ p++;
+ CSeq = strtol(p, &endp, 10);
+ if(p != endp) {
struct RTSP *rtsp = data->req.p.rtsp;
rtsp->CSeq_recv = CSeq; /* mark the request */
data->state.rtsp_CSeq_recv = CSeq; /* update the handle */
@@ -836,7 +941,63 @@ CURLcode Curl_rtsp_parseheader(struct Curl_easy *data, char *header)
(data->set.str[STRING_RTSP_SESSION_ID])[idlen] = '\0';
}
}
+ else if(checkprefix("Transport:", header)) {
+ CURLcode result;
+ result = rtsp_parse_transport(data, header + 10);
+ if(result)
+ return result;
+ }
return CURLE_OK;
}
+static
+CURLcode rtsp_parse_transport(struct Curl_easy *data, char *transport)
+{
+ /* If we receive multiple Transport response-headers, the linterleaved
+ channels of each response header is recorded and used together for
+ subsequent data validity checks.*/
+ /* e.g.: ' RTP/AVP/TCP;unicast;interleaved=5-6' */
+ char *start;
+ char *end;
+ start = transport;
+ while(start && *start) {
+ while(*start && ISBLANK(*start) )
+ start++;
+ end = strchr(start, ';');
+ if(checkprefix("interleaved=", start)) {
+ long chan1, chan2, chan;
+ char *endp;
+ char *p = start + 12;
+ chan1 = strtol(p, &endp, 10);
+ if(p != endp && chan1 >= 0 && chan1 <= 255) {
+ unsigned char *rtp_channel_mask = data->state.rtp_channel_mask;
+ chan2 = chan1;
+ if(*endp == '-') {
+ p = endp + 1;
+ chan2 = strtol(p, &endp, 10);
+ if(p == endp || chan2 < 0 || chan2 > 255) {
+ infof(data, "Unable to read the interleaved parameter from "
+ "Transport header: [%s]", transport);
+ chan2 = chan1;
+ }
+ }
+ for(chan = chan1; chan <= chan2; chan++) {
+ long idx = chan / 8;
+ long off = chan % 8;
+ rtp_channel_mask[idx] |= (unsigned char)(1 << off);
+ }
+ }
+ else {
+ infof(data, "Unable to read the interleaved parameter from "
+ "Transport header: [%s]", transport);
+ }
+ break;
+ }
+ /* skip to next parameter */
+ start = (!end) ? end : (end + 1);
+ }
+ return CURLE_OK;
+}
+
+
#endif /* CURL_DISABLE_RTSP or using Hyper */
diff --git a/lib/rtsp.h b/lib/rtsp.h
index 377c82860..237b80f80 100644
--- a/lib/rtsp.h
+++ b/lib/rtsp.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -39,15 +39,23 @@ CURLcode Curl_rtsp_parseheader(struct Curl_easy *data, char *header);
#endif /* CURL_DISABLE_RTSP */
+typedef enum {
+ RTP_PARSE_SKIP,
+ RTP_PARSE_CHANNEL,
+ RTP_PARSE_LEN,
+ RTP_PARSE_DATA
+} rtp_parse_st;
/*
* RTSP Connection data
*
* Currently, only used for tracking incomplete RTP data reads
*/
struct rtsp_conn {
- char *rtp_buf;
- ssize_t rtp_bufsize;
+ struct dynbuf buf;
int rtp_channel;
+ size_t rtp_len;
+ rtp_parse_st state;
+ BIT(in_header);
};
/****************************************************************************
@@ -62,7 +70,7 @@ struct RTSP {
* HTTP functions can safely treat this as an HTTP struct, but RTSP aware
* functions can also index into the later elements.
*/
- struct HTTP http_wrapper; /*wrap HTTP to do the heavy lifting */
+ struct HTTP http_wrapper; /* wrap HTTP to do the heavy lifting */
long CSeq_sent; /* CSeq of this request */
long CSeq_recv; /* CSeq received */
diff --git a/lib/select.c b/lib/select.c
index 2ac074677..d92e745a7 100644
--- a/lib/select.c
+++ b/lib/select.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -61,8 +61,8 @@
* for the intended use of this function in the library.
*
* Return values:
- * -1 = system call error, invalid timeout value, or interrupted
- * 0 = specified timeout has elapsed
+ * -1 = system call error, or invalid timeout value
+ * 0 = specified timeout has elapsed, or interrupted
*/
int Curl_wait_ms(timediff_t timeout_ms)
{
@@ -76,7 +76,7 @@ int Curl_wait_ms(timediff_t timeout_ms)
}
#if defined(MSDOS)
delay(timeout_ms);
-#elif defined(WIN32)
+#elif defined(_WIN32)
/* prevent overflow, timeout_ms is typecast to ULONG/DWORD. */
#if TIMEDIFF_T_MAX >= ULONG_MAX
if(timeout_ms >= ULONG_MAX)
@@ -99,8 +99,13 @@ int Curl_wait_ms(timediff_t timeout_ms)
}
#endif /* HAVE_POLL_FINE */
#endif /* USE_WINSOCK */
- if(r)
- r = -1;
+ if(r) {
+ if((r == -1) && (SOCKERRNO == EINTR))
+ /* make EINTR from select or poll not a "lethal" error */
+ r = 0;
+ else
+ r = -1;
+ }
return r;
}
@@ -230,14 +235,14 @@ int Curl_socket_check(curl_socket_t readfd0, /* two sockets to read from */
if(readfd0 != CURL_SOCKET_BAD) {
if(pfd[num].revents & (POLLRDNORM|POLLIN|POLLERR|POLLHUP))
r |= CURL_CSELECT_IN;
- if(pfd[num].revents & (POLLRDBAND|POLLPRI|POLLNVAL))
+ if(pfd[num].revents & (POLLPRI|POLLNVAL))
r |= CURL_CSELECT_ERR;
num++;
}
if(readfd1 != CURL_SOCKET_BAD) {
if(pfd[num].revents & (POLLRDNORM|POLLIN|POLLERR|POLLHUP))
r |= CURL_CSELECT_IN2;
- if(pfd[num].revents & (POLLRDBAND|POLLPRI|POLLNVAL))
+ if(pfd[num].revents & (POLLPRI|POLLNVAL))
r |= CURL_CSELECT_ERR;
num++;
}
diff --git a/lib/select.h b/lib/select.h
index f2cf8bbd9..5b1ca23eb 100644
--- a/lib/select.h
+++ b/lib/select.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/sendf.c b/lib/sendf.c
index d26b7e7cd..a2fac0c4e 100644
--- a/lib/sendf.c
+++ b/lib/sendf.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -38,7 +38,9 @@
#include "urldata.h"
#include "sendf.h"
+#include "cfilters.h"
#include "connect.h"
+#include "content_encoding.h"
#include "vtls/vtls.h"
#include "vssh/ssh.h"
#include "easyif.h"
@@ -48,6 +50,7 @@
#include "strdup.h"
#include "http2.h"
#include "headers.h"
+#include "progress.h"
#include "ws.h"
/* The last 3 #include files should be in this order */
@@ -55,6 +58,9 @@
#include "curl_memory.h"
#include "memdebug.h"
+
+static CURLcode do_init_stack(struct Curl_easy *data);
+
#if defined(CURL_DO_LINEEND_CONV) && !defined(CURL_DISABLE_FTP)
/*
* convert_lineends() changes CRLF (\r\n) end-of-line markers to a single LF
@@ -137,173 +143,28 @@ static size_t convert_lineends(struct Curl_easy *data,
}
#endif /* CURL_DO_LINEEND_CONV && !CURL_DISABLE_FTP */
-#ifdef USE_RECV_BEFORE_SEND_WORKAROUND
-bool Curl_recv_has_postponed_data(struct connectdata *conn, int sockindex)
-{
- struct postponed_data * const psnd = &(conn->postponed[sockindex]);
- return psnd->buffer && psnd->allocated_size &&
- psnd->recv_size > psnd->recv_processed;
-}
-
-static CURLcode pre_receive_plain(struct Curl_easy *data,
- struct connectdata *conn, int num)
-{
- const curl_socket_t sockfd = conn->sock[num];
- struct postponed_data * const psnd = &(conn->postponed[num]);
- size_t bytestorecv = psnd->allocated_size - psnd->recv_size;
- /* WinSock will destroy unread received data if send() is
- failed.
- To avoid lossage of received data, recv() must be
- performed before every send() if any incoming data is
- available. However, skip this, if buffer is already full. */
- if((conn->handler->protocol&PROTO_FAMILY_HTTP) != 0 &&
- conn->recv[num] == Curl_recv_plain &&
- (!psnd->buffer || bytestorecv)) {
- const int readymask = Curl_socket_check(sockfd, CURL_SOCKET_BAD,
- CURL_SOCKET_BAD, 0);
- if(readymask != -1 && (readymask & CURL_CSELECT_IN) != 0) {
- /* Have some incoming data */
- if(!psnd->buffer) {
- /* Use buffer double default size for intermediate buffer */
- psnd->allocated_size = 2 * data->set.buffer_size;
- psnd->buffer = malloc(psnd->allocated_size);
- if(!psnd->buffer)
- return CURLE_OUT_OF_MEMORY;
- psnd->recv_size = 0;
- psnd->recv_processed = 0;
-#ifdef DEBUGBUILD
- psnd->bindsock = sockfd; /* Used only for DEBUGASSERT */
-#endif /* DEBUGBUILD */
- bytestorecv = psnd->allocated_size;
- }
- if(psnd->buffer) {
- ssize_t recvedbytes;
- DEBUGASSERT(psnd->bindsock == sockfd);
- recvedbytes = sread(sockfd, psnd->buffer + psnd->recv_size,
- bytestorecv);
- if(recvedbytes > 0)
- psnd->recv_size += recvedbytes;
- }
- else
- psnd->allocated_size = 0;
- }
- }
- return CURLE_OK;
-}
-
-static ssize_t get_pre_recved(struct connectdata *conn, int num, char *buf,
- size_t len)
-{
- struct postponed_data * const psnd = &(conn->postponed[num]);
- size_t copysize;
- if(!psnd->buffer)
- return 0;
-
- DEBUGASSERT(psnd->allocated_size > 0);
- DEBUGASSERT(psnd->recv_size <= psnd->allocated_size);
- DEBUGASSERT(psnd->recv_processed <= psnd->recv_size);
- /* Check and process data that already received and storied in internal
- intermediate buffer */
- if(psnd->recv_size > psnd->recv_processed) {
- DEBUGASSERT(psnd->bindsock == conn->sock[num]);
- copysize = CURLMIN(len, psnd->recv_size - psnd->recv_processed);
- memcpy(buf, psnd->buffer + psnd->recv_processed, copysize);
- psnd->recv_processed += copysize;
- }
- else
- copysize = 0; /* buffer was allocated, but nothing was received */
-
- /* Free intermediate buffer if it has no unprocessed data */
- if(psnd->recv_processed == psnd->recv_size) {
- free(psnd->buffer);
- psnd->buffer = NULL;
- psnd->allocated_size = 0;
- psnd->recv_size = 0;
- psnd->recv_processed = 0;
-#ifdef DEBUGBUILD
- psnd->bindsock = CURL_SOCKET_BAD;
-#endif /* DEBUGBUILD */
- }
- return (ssize_t)copysize;
-}
-#else /* ! USE_RECV_BEFORE_SEND_WORKAROUND */
-/* Use "do-nothing" macros instead of functions when workaround not used */
-bool Curl_recv_has_postponed_data(struct connectdata *conn, int sockindex)
-{
- (void)conn;
- (void)sockindex;
- return false;
-}
-#define pre_receive_plain(d,c,n) CURLE_OK
-#define get_pre_recved(c,n,b,l) 0
-#endif /* ! USE_RECV_BEFORE_SEND_WORKAROUND */
-
-/* Curl_infof() is for info message along the way */
-#define MAXINFO 2048
-
-void Curl_infof(struct Curl_easy *data, const char *fmt, ...)
-{
- DEBUGASSERT(!strchr(fmt, '\n'));
- if(data && data->set.verbose) {
- va_list ap;
- int len;
- char buffer[MAXINFO + 2];
- va_start(ap, fmt);
- len = mvsnprintf(buffer, MAXINFO, fmt, ap);
- va_end(ap);
- buffer[len++] = '\n';
- buffer[len] = '\0';
- Curl_debug(data, CURLINFO_TEXT, buffer, len);
- }
-}
-
-/* Curl_failf() is for messages stating why we failed.
- * The message SHALL NOT include any LF or CR.
- */
-
-void Curl_failf(struct Curl_easy *data, const char *fmt, ...)
-{
- DEBUGASSERT(!strchr(fmt, '\n'));
- if(data->set.verbose || data->set.errorbuffer) {
- va_list ap;
- int len;
- char error[CURL_ERROR_SIZE + 2];
- va_start(ap, fmt);
- len = mvsnprintf(error, CURL_ERROR_SIZE, fmt, ap);
-
- if(data->set.errorbuffer && !data->state.errorbuf) {
- strcpy(data->set.errorbuffer, error);
- data->state.errorbuf = TRUE; /* wrote error string */
- }
- error[len++] = '\n';
- error[len] = '\0';
- Curl_debug(data, CURLINFO_TEXT, error, len);
- va_end(ap);
- }
-}
-
/*
- * Curl_write() is an internal write function that sends data to the
- * server. Works with plain sockets, SCP, SSL or kerberos.
+ * Curl_nwrite() is an internal write function that sends data to the
+ * server. Works with a socket index for the connection.
*
- * If the write would block (CURLE_AGAIN), we return CURLE_OK and
- * (*written == 0). Otherwise we return regular CURLcode value.
+ * If the write would block (CURLE_AGAIN), it returns CURLE_OK and
+ * (*nwritten == 0). Otherwise we return regular CURLcode value.
*/
-CURLcode Curl_write(struct Curl_easy *data,
- curl_socket_t sockfd,
- const void *mem,
- size_t len,
- ssize_t *written)
+CURLcode Curl_nwrite(struct Curl_easy *data,
+ int sockindex,
+ const void *buf,
+ size_t blen,
+ ssize_t *pnwritten)
{
- ssize_t bytes_written;
+ ssize_t nwritten;
CURLcode result = CURLE_OK;
struct connectdata *conn;
- int num;
+
+ DEBUGASSERT(sockindex >= 0 && sockindex < 2);
+ DEBUGASSERT(pnwritten);
DEBUGASSERT(data);
DEBUGASSERT(data->conn);
conn = data->conn;
- num = (sockfd == conn->sock[SECONDARYSOCKET]);
-
#ifdef CURLDEBUG
{
/* Allow debug builds to override this logic to force short sends
@@ -312,168 +173,52 @@ CURLcode Curl_write(struct Curl_easy *data,
if(p) {
size_t altsize = (size_t)strtoul(p, NULL, 10);
if(altsize)
- len = CURLMIN(len, altsize);
+ blen = CURLMIN(blen, altsize);
}
}
#endif
- bytes_written = conn->send[num](data, num, mem, len, &result);
-
- *written = bytes_written;
- if(bytes_written >= 0)
- /* we completely ignore the curlcode value when subzero is not returned */
- return CURLE_OK;
-
- /* handle CURLE_AGAIN or a send failure */
- switch(result) {
- case CURLE_AGAIN:
- *written = 0;
- return CURLE_OK;
-
- case CURLE_OK:
- /* general send failure */
- return CURLE_SEND_ERROR;
-
- default:
- /* we got a specific curlcode, forward it */
- return result;
+ nwritten = conn->send[sockindex](data, sockindex, buf, blen, &result);
+ if(result == CURLE_AGAIN) {
+ nwritten = 0;
+ result = CURLE_OK;
}
-}
-
-ssize_t Curl_send_plain(struct Curl_easy *data, int num,
- const void *mem, size_t len, CURLcode *code)
-{
- struct connectdata *conn;
- curl_socket_t sockfd;
- ssize_t bytes_written;
-
- DEBUGASSERT(data);
- DEBUGASSERT(data->conn);
- conn = data->conn;
- sockfd = conn->sock[num];
- /* WinSock will destroy unread received data if send() is
- failed.
- To avoid lossage of received data, recv() must be
- performed before every send() if any incoming data is
- available. */
- if(pre_receive_plain(data, conn, num)) {
- *code = CURLE_OUT_OF_MEMORY;
- return -1;
- }
-
-#if defined(MSG_FASTOPEN) && !defined(TCP_FASTOPEN_CONNECT) /* Linux */
- if(conn->bits.tcp_fastopen) {
- bytes_written = sendto(sockfd, mem, len, MSG_FASTOPEN,
- conn->ip_addr->ai_addr, conn->ip_addr->ai_addrlen);
- conn->bits.tcp_fastopen = FALSE;
+ else if(result) {
+ nwritten = -1; /* make sure */
}
- else
-#endif
- bytes_written = swrite(sockfd, mem, len);
-
- *code = CURLE_OK;
- if(-1 == bytes_written) {
- int err = SOCKERRNO;
-
- if(
-#ifdef WSAEWOULDBLOCK
- /* This is how Windows does it */
- (WSAEWOULDBLOCK == err)
-#else
- /* errno may be EWOULDBLOCK or on some systems EAGAIN when it returned
- due to its inability to send off data without blocking. We therefore
- treat both error codes the same here */
- (EWOULDBLOCK == err) || (EAGAIN == err) || (EINTR == err) ||
- (EINPROGRESS == err)
-#endif
- ) {
- /* this is just a case of EWOULDBLOCK */
- bytes_written = 0;
- *code = CURLE_AGAIN;
- }
- else {
- char buffer[STRERROR_LEN];
- failf(data, "Send failure: %s",
- Curl_strerror(err, buffer, sizeof(buffer)));
- data->state.os_errno = err;
- *code = CURLE_SEND_ERROR;
- }
+ else {
+ DEBUGASSERT(nwritten >= 0);
}
- return bytes_written;
+
+ *pnwritten = nwritten;
+ return result;
}
/*
- * Curl_write_plain() is an internal write function that sends data to the
- * server using plain sockets only. Otherwise meant to have the exact same
- * proto as Curl_write()
+ * Curl_write() is an internal write function that sends data to the
+ * server. Works with plain sockets, SCP, SSL or kerberos.
+ *
+ * If the write would block (CURLE_AGAIN), we return CURLE_OK and
+ * (*written == 0). Otherwise we return regular CURLcode value.
*/
-CURLcode Curl_write_plain(struct Curl_easy *data,
- curl_socket_t sockfd,
- const void *mem,
- size_t len,
- ssize_t *written)
+CURLcode Curl_write(struct Curl_easy *data,
+ curl_socket_t sockfd,
+ const void *mem,
+ size_t len,
+ ssize_t *written)
{
- CURLcode result;
- struct connectdata *conn = data->conn;
+ struct connectdata *conn;
int num;
- DEBUGASSERT(conn);
- num = (sockfd == conn->sock[SECONDARYSOCKET]);
-
- *written = Curl_send_plain(data, num, mem, len, &result);
-
- return result;
-}
-ssize_t Curl_recv_plain(struct Curl_easy *data, int num, char *buf,
- size_t len, CURLcode *code)
-{
- struct connectdata *conn;
- curl_socket_t sockfd;
- ssize_t nread;
DEBUGASSERT(data);
DEBUGASSERT(data->conn);
conn = data->conn;
- sockfd = conn->sock[num];
- /* Check and return data that already received and storied in internal
- intermediate buffer */
- nread = get_pre_recved(conn, num, buf, len);
- if(nread > 0) {
- *code = CURLE_OK;
- return nread;
- }
-
- nread = sread(sockfd, buf, len);
-
- *code = CURLE_OK;
- if(-1 == nread) {
- int err = SOCKERRNO;
-
- if(
-#ifdef WSAEWOULDBLOCK
- /* This is how Windows does it */
- (WSAEWOULDBLOCK == err)
-#else
- /* errno may be EWOULDBLOCK or on some systems EAGAIN when it returned
- due to its inability to send off data without blocking. We therefore
- treat both error codes the same here */
- (EWOULDBLOCK == err) || (EAGAIN == err) || (EINTR == err)
-#endif
- ) {
- /* this is just a case of EWOULDBLOCK */
- *code = CURLE_AGAIN;
- }
- else {
- char buffer[STRERROR_LEN];
- failf(data, "Recv failure: %s",
- Curl_strerror(err, buffer, sizeof(buffer)));
- data->state.os_errno = err;
- *code = CURLE_RECV_ERROR;
- }
- }
- return nread;
+ num = (sockfd != CURL_SOCKET_BAD && sockfd == conn->sock[SECONDARYSOCKET]);
+ return Curl_nwrite(data, num, mem, len, written);
}
static CURLcode pausewrite(struct Curl_easy *data,
int type, /* what type of data */
+ bool paused_body,
const char *ptr,
size_t len)
{
@@ -485,12 +230,12 @@ static CURLcode pausewrite(struct Curl_easy *data,
unsigned int i;
bool newtype = TRUE;
- /* If this transfers over HTTP/2, pause the stream! */
- Curl_http2_stream_pause(data, TRUE);
+ Curl_conn_ev_data_pause(data, TRUE);
if(s->tempcount) {
for(i = 0; i< s->tempcount; i++) {
- if(s->tempwrite[i].type == type) {
+ if(s->tempwrite[i].type == type &&
+ !!s->tempwrite[i].paused_body == !!paused_body) {
/* data for this type exists */
newtype = FALSE;
break;
@@ -508,6 +253,7 @@ static CURLcode pausewrite(struct Curl_easy *data,
/* store this information in the state struct for later use */
Curl_dyn_init(&s->tempwrite[i].b, DYN_PAUSE_BUFFER);
s->tempwrite[i].type = type;
+ s->tempwrite[i].paused_body = paused_body;
s->tempcount++;
}
@@ -527,6 +273,7 @@ static CURLcode pausewrite(struct Curl_easy *data,
*/
static CURLcode chop_write(struct Curl_easy *data,
int type,
+ bool skip_body_write,
char *optr,
size_t olen)
{
@@ -543,22 +290,22 @@ static CURLcode chop_write(struct Curl_easy *data,
/* If reading is paused, append this data to the already held data for this
type. */
if(data->req.keepon & KEEP_RECV_PAUSE)
- return pausewrite(data, type, ptr, len);
+ return pausewrite(data, type, !skip_body_write, ptr, len);
/* Determine the callback(s) to use. */
- if(type & CLIENTWRITE_BODY) {
+ if(!skip_body_write &&
+ ((type & CLIENTWRITE_BODY) ||
+ ((type & CLIENTWRITE_HEADER) && data->set.include_header))) {
#ifdef USE_WEBSOCKETS
if(conn->handler->protocol & (CURLPROTO_WS|CURLPROTO_WSS)) {
- struct HTTP *ws = data->req.p.http;
writebody = Curl_ws_writecb;
- ws->ws.data = data;
- writebody_ptr = ws;
+ writebody_ptr = data;
}
else
#endif
writebody = data->set.fwrite_func;
}
- if((type & CLIENTWRITE_HEADER) &&
+ if((type & (CLIENTWRITE_HEADER|CLIENTWRITE_INFO)) &&
(data->set.fwrite_header || data->set.writeheader)) {
/*
* Write headers to the same callback or to the especially setup
@@ -586,7 +333,7 @@ static CURLcode chop_write(struct Curl_easy *data,
failf(data, "Write callback asked for PAUSE when not supported");
return CURLE_WRITE_ERROR;
}
- return pausewrite(data, type, ptr, len);
+ return pausewrite(data, type, TRUE, ptr, len);
}
if(wrote != chunklen) {
failf(data, "Failure writing output to destination");
@@ -621,13 +368,7 @@ static CURLcode chop_write(struct Curl_easy *data,
Curl_set_in_callback(data, false);
if(CURL_WRITEFUNC_PAUSE == wrote)
- /* here we pass in the HEADER bit only since if this was body as well
- then it was passed already and clearly that didn't trigger the
- pause, so this is saved for later with the HEADER bit only */
- return pausewrite(data, CLIENTWRITE_HEADER |
- (type & (CLIENTWRITE_STATUS|CLIENTWRITE_CONNECT|
- CLIENTWRITE_1XX|CLIENTWRITE_TRAILER)),
- optr, olen);
+ return pausewrite(data, type, FALSE, optr, olen);
if(wrote != olen) {
failf(data, "Failed writing header");
return CURLE_WRITE_ERROR;
@@ -648,48 +389,380 @@ static CURLcode chop_write(struct Curl_easy *data,
the future to leave the original data alone.
*/
CURLcode Curl_client_write(struct Curl_easy *data,
- int type,
- char *ptr,
- size_t len)
+ int type, char *buf, size_t blen)
{
+ CURLcode result;
+
#if !defined(CURL_DISABLE_FTP) && defined(CURL_DO_LINEEND_CONV)
/* FTP data may need conversion. */
if((type & CLIENTWRITE_BODY) &&
(data->conn->handler->protocol & PROTO_FAMILY_FTP) &&
data->conn->proto.ftpc.transfertype == 'A') {
/* convert end-of-line markers */
- len = convert_lineends(data, ptr, len);
+ blen = convert_lineends(data, buf, blen);
}
#endif
- return chop_write(data, type, ptr, len);
+ /* it is one of those, at least */
+ DEBUGASSERT(type & (CLIENTWRITE_BODY|CLIENTWRITE_HEADER|CLIENTWRITE_INFO));
+ /* BODY is only BODY */
+ DEBUGASSERT(!(type & CLIENTWRITE_BODY) || (type == CLIENTWRITE_BODY));
+ /* INFO is only INFO */
+ DEBUGASSERT(!(type & CLIENTWRITE_INFO) || (type == CLIENTWRITE_INFO));
+
+ if(!data->req.writer_stack) {
+ result = do_init_stack(data);
+ if(result)
+ return result;
+ DEBUGASSERT(data->req.writer_stack);
+ }
+
+ return Curl_cwriter_write(data, data->req.writer_stack, type, buf, blen);
+}
+
+CURLcode Curl_client_unpause(struct Curl_easy *data)
+{
+ CURLcode result = CURLE_OK;
+
+ if(data->state.tempcount) {
+ /* there are buffers for sending that can be delivered as the receive
+ pausing is lifted! */
+ unsigned int i;
+ unsigned int count = data->state.tempcount;
+ struct tempbuf writebuf[3]; /* there can only be three */
+
+ /* copy the structs to allow for immediate re-pausing */
+ for(i = 0; i < data->state.tempcount; i++) {
+ writebuf[i] = data->state.tempwrite[i];
+ Curl_dyn_init(&data->state.tempwrite[i].b, DYN_PAUSE_BUFFER);
+ }
+ data->state.tempcount = 0;
+
+ for(i = 0; i < count; i++) {
+ /* even if one function returns error, this loops through and frees
+ all buffers */
+ if(!result)
+ result = chop_write(data, writebuf[i].type,
+ !writebuf[i].paused_body,
+ Curl_dyn_ptr(&writebuf[i].b),
+ Curl_dyn_len(&writebuf[i].b));
+ Curl_dyn_free(&writebuf[i].b);
+ }
+ }
+ return result;
+}
+
+void Curl_client_cleanup(struct Curl_easy *data)
+{
+ struct Curl_cwriter *writer = data->req.writer_stack;
+ size_t i;
+
+ while(writer) {
+ data->req.writer_stack = writer->next;
+ writer->cwt->do_close(data, writer);
+ free(writer);
+ writer = data->req.writer_stack;
+ }
+
+ for(i = 0; i < data->state.tempcount; i++) {
+ Curl_dyn_free(&data->state.tempwrite[i].b);
+ }
+ data->state.tempcount = 0;
+ data->req.bytecount = 0;
+ data->req.headerline = 0;
+}
+
+/* Write data using an unencoding writer stack. "nbytes" is not
+ allowed to be 0. */
+CURLcode Curl_cwriter_write(struct Curl_easy *data,
+ struct Curl_cwriter *writer, int type,
+ const char *buf, size_t nbytes)
+{
+ if(!nbytes)
+ return CURLE_OK;
+ if(!writer)
+ return CURLE_WRITE_ERROR;
+ return writer->cwt->do_write(data, writer, type, buf, nbytes);
+}
+
+CURLcode Curl_cwriter_def_init(struct Curl_easy *data,
+ struct Curl_cwriter *writer)
+{
+ (void)data;
+ (void)writer;
+ return CURLE_OK;
+}
+
+CURLcode Curl_cwriter_def_write(struct Curl_easy *data,
+ struct Curl_cwriter *writer, int type,
+ const char *buf, size_t nbytes)
+{
+ return Curl_cwriter_write(data, writer->next, type, buf, nbytes);
+}
+
+void Curl_cwriter_def_close(struct Curl_easy *data,
+ struct Curl_cwriter *writer)
+{
+ (void) data;
+ (void) writer;
+}
+
+/* Real client writer to installed callbacks. */
+static CURLcode cw_client_write(struct Curl_easy *data,
+ struct Curl_cwriter *writer, int type,
+ const char *buf, size_t nbytes)
+{
+ (void)writer;
+ if(!nbytes)
+ return CURLE_OK;
+ return chop_write(data, type, FALSE, (char *)buf, nbytes);
}
-CURLcode Curl_read_plain(curl_socket_t sockfd,
- char *buf,
- size_t bytesfromsocket,
- ssize_t *n)
+static const struct Curl_cwtype cw_client = {
+ "client",
+ NULL,
+ Curl_cwriter_def_init,
+ cw_client_write,
+ Curl_cwriter_def_close,
+ sizeof(struct Curl_cwriter)
+};
+
+static size_t get_max_body_write_len(struct Curl_easy *data, curl_off_t limit)
{
- ssize_t nread = sread(sockfd, buf, bytesfromsocket);
-
- if(-1 == nread) {
- const int err = SOCKERRNO;
- const bool return_error =
-#ifdef USE_WINSOCK
- WSAEWOULDBLOCK == err
-#else
- EWOULDBLOCK == err || EAGAIN == err || EINTR == err
+ if(limit != -1) {
+ /* How much more are we allowed to write? */
+ curl_off_t remain_diff;
+ remain_diff = limit - data->req.bytecount;
+ if(remain_diff < 0) {
+ /* already written too much! */
+ return 0;
+ }
+#if SIZEOF_CURL_OFF_T > SIZEOF_SIZE_T
+ else if(remain_diff > SSIZE_T_MAX) {
+ return SIZE_T_MAX;
+ }
#endif
- ;
- *n = 0; /* no data returned */
- if(return_error)
- return CURLE_AGAIN;
- return CURLE_RECV_ERROR;
+ else {
+ return (size_t)remain_diff;
+ }
+ }
+ return SIZE_T_MAX;
+}
+
+/* Download client writer in phase CURL_CW_PROTOCOL that
+ * sees the "real" download body data. */
+static CURLcode cw_download_write(struct Curl_easy *data,
+ struct Curl_cwriter *writer, int type,
+ const char *buf, size_t nbytes)
+{
+ CURLcode result;
+ size_t nwrite, excess_len = 0;
+ const char *excess_data = NULL;
+
+ if(!(type & CLIENTWRITE_BODY)) {
+ if((type & CLIENTWRITE_CONNECT) && data->set.suppress_connect_headers)
+ return CURLE_OK;
+ return Curl_cwriter_write(data, writer->next, type, buf, nbytes);
+ }
+
+ nwrite = nbytes;
+ if(-1 != data->req.maxdownload) {
+ size_t wmax = get_max_body_write_len(data, data->req.maxdownload);
+ if(nwrite > wmax) {
+ excess_len = nbytes - wmax;
+ nwrite = wmax;
+ excess_data = buf + nwrite;
+ }
+
+ if(nwrite == wmax) {
+ data->req.download_done = TRUE;
+ }
+ }
+
+ if(data->set.max_filesize) {
+ size_t wmax = get_max_body_write_len(data, data->set.max_filesize);
+ if(nwrite > wmax) {
+ nwrite = wmax;
+ }
+ }
+
+ data->req.bytecount += nwrite;
+ ++data->req.bodywrites;
+ if(!data->req.ignorebody && nwrite) {
+ result = Curl_cwriter_write(data, writer->next, type, buf, nwrite);
+ if(result)
+ return result;
+ }
+ result = Curl_pgrsSetDownloadCounter(data, data->req.bytecount);
+ if(result)
+ return result;
+
+ if(excess_len) {
+ if(data->conn->handler->readwrite) {
+ /* RTSP hack moved from transfer loop to here */
+ bool readmore = FALSE; /* indicates data is incomplete, need more */
+ size_t consumed = 0;
+ result = data->conn->handler->readwrite(data, data->conn,
+ excess_data, excess_len,
+ &consumed, &readmore);
+ if(result)
+ return result;
+ DEBUGASSERT(consumed <= excess_len);
+ excess_len -= consumed;
+ if(readmore) {
+ data->req.download_done = FALSE;
+ data->req.keepon |= KEEP_RECV; /* we're not done reading */
+ }
+ }
+ if(excess_len && !data->req.ignorebody) {
+ infof(data,
+ "Excess found writing body:"
+ " excess = %zu"
+ ", size = %" CURL_FORMAT_CURL_OFF_T
+ ", maxdownload = %" CURL_FORMAT_CURL_OFF_T
+ ", bytecount = %" CURL_FORMAT_CURL_OFF_T,
+ excess_len, data->req.size, data->req.maxdownload,
+ data->req.bytecount);
+ connclose(data->conn, "excess found in a read");
+ }
+ }
+ else if(nwrite < nbytes) {
+ failf(data, "Exceeded the maximum allowed file size "
+ "(%" CURL_FORMAT_CURL_OFF_T ") with %"
+ CURL_FORMAT_CURL_OFF_T " bytes",
+ data->set.max_filesize, data->req.bytecount);
+ return CURLE_FILESIZE_EXCEEDED;
}
- *n = nread;
return CURLE_OK;
}
+static const struct Curl_cwtype cw_download = {
+ "download",
+ NULL,
+ Curl_cwriter_def_init,
+ cw_download_write,
+ Curl_cwriter_def_close,
+ sizeof(struct Curl_cwriter)
+};
+
+/* RAW client writer in phase CURL_CW_RAW that
+ * enabled tracing of raw data. */
+static CURLcode cw_raw_write(struct Curl_easy *data,
+ struct Curl_cwriter *writer, int type,
+ const char *buf, size_t nbytes)
+{
+ if(type & CLIENTWRITE_BODY && data->set.verbose && !data->req.ignorebody) {
+ Curl_debug(data, CURLINFO_DATA_IN, (char *)buf, nbytes);
+ }
+ return Curl_cwriter_write(data, writer->next, type, buf, nbytes);
+}
+
+static const struct Curl_cwtype cw_raw = {
+ "raw",
+ NULL,
+ Curl_cwriter_def_init,
+ cw_raw_write,
+ Curl_cwriter_def_close,
+ sizeof(struct Curl_cwriter)
+};
+
+/* Create an unencoding writer stage using the given handler. */
+CURLcode Curl_cwriter_create(struct Curl_cwriter **pwriter,
+ struct Curl_easy *data,
+ const struct Curl_cwtype *cwt,
+ Curl_cwriter_phase phase)
+{
+ struct Curl_cwriter *writer;
+ CURLcode result = CURLE_OUT_OF_MEMORY;
+
+ DEBUGASSERT(cwt->cwriter_size >= sizeof(struct Curl_cwriter));
+ writer = (struct Curl_cwriter *) calloc(1, cwt->cwriter_size);
+ if(!writer)
+ goto out;
+
+ writer->cwt = cwt;
+ writer->phase = phase;
+ result = cwt->do_init(data, writer);
+
+out:
+ *pwriter = result? NULL : writer;
+ if(result)
+ free(writer);
+ return result;
+}
+
+void Curl_cwriter_free(struct Curl_easy *data,
+ struct Curl_cwriter *writer)
+{
+ if(writer) {
+ writer->cwt->do_close(data, writer);
+ free(writer);
+ }
+}
+
+size_t Curl_cwriter_count(struct Curl_easy *data, Curl_cwriter_phase phase)
+{
+ struct Curl_cwriter *w;
+ size_t n = 0;
+
+ for(w = data->req.writer_stack; w; w = w->next) {
+ if(w->phase == phase)
+ ++n;
+ }
+ return n;
+}
+
+static CURLcode do_init_stack(struct Curl_easy *data)
+{
+ struct Curl_cwriter *writer;
+ CURLcode result;
+
+ DEBUGASSERT(!data->req.writer_stack);
+ result = Curl_cwriter_create(&data->req.writer_stack,
+ data, &cw_client, CURL_CW_CLIENT);
+ if(result)
+ return result;
+
+ result = Curl_cwriter_create(&writer, data, &cw_download, CURL_CW_PROTOCOL);
+ if(result)
+ return result;
+ result = Curl_cwriter_add(data, writer);
+ if(result) {
+ Curl_cwriter_free(data, writer);
+ }
+
+ result = Curl_cwriter_create(&writer, data, &cw_raw, CURL_CW_RAW);
+ if(result)
+ return result;
+ result = Curl_cwriter_add(data, writer);
+ if(result) {
+ Curl_cwriter_free(data, writer);
+ }
+ return result;
+}
+
+CURLcode Curl_cwriter_add(struct Curl_easy *data,
+ struct Curl_cwriter *writer)
+{
+ CURLcode result;
+ struct Curl_cwriter **anchor = &data->req.writer_stack;
+
+ if(!*anchor) {
+ result = do_init_stack(data);
+ if(result)
+ return result;
+ }
+
+ /* Insert the writer as first in its phase.
+ * Skip existing writers of lower phases. */
+ while(*anchor && (*anchor)->phase < writer->phase)
+ anchor = &((*anchor)->next);
+ writer->next = *anchor;
+ *anchor = writer;
+ return CURLE_OK;
+}
+
+
/*
* Internal read-from-socket function. This is meant to deal with plain
* sockets, SSL sockets and kerberos sockets.
@@ -720,37 +793,10 @@ CURLcode Curl_read(struct Curl_easy *data, /* transfer */
nread = conn->recv[num](data, num, buffertofill, bytesfromsocket, &result);
if(nread < 0)
- return result;
+ goto out;
*n += nread;
-
- return CURLE_OK;
-}
-
-/* return 0 on success */
-void Curl_debug(struct Curl_easy *data, curl_infotype type,
- char *ptr, size_t size)
-{
- if(data->set.verbose) {
- static const char s_infotype[CURLINFO_END][3] = {
- "* ", "< ", "> ", "{ ", "} ", "{ ", "} " };
- if(data->set.fdebug) {
- bool inCallback = Curl_is_in_callback(data);
- Curl_set_in_callback(data, true);
- (void)(*data->set.fdebug)(data, type, ptr, size, data->set.debugdata);
- Curl_set_in_callback(data, inCallback);
- }
- else {
- switch(type) {
- case CURLINFO_TEXT:
- case CURLINFO_HEADER_OUT:
- case CURLINFO_HEADER_IN:
- fwrite(s_infotype[type], 2, 1, data->set.err);
- fwrite(ptr, size, 1, data->set.err);
- break;
- default: /* nada */
- break;
- }
- }
- }
+ result = CURLE_OK;
+out:
+ return result;
}
diff --git a/lib/sendf.h b/lib/sendf.h
index 7c4c1280a..a70189f2f 100644
--- a/lib/sendf.h
+++ b/lib/sendf.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -26,50 +26,147 @@
#include "curl_setup.h"
-void Curl_infof(struct Curl_easy *, const char *fmt, ...);
-void Curl_failf(struct Curl_easy *, const char *fmt, ...);
-
-#if defined(CURL_DISABLE_VERBOSE_STRINGS)
-
-#if defined(HAVE_VARIADIC_MACROS_C99)
-#define infof(...) Curl_nop_stmt
-#elif defined(HAVE_VARIADIC_MACROS_GCC)
-#define infof(x...) Curl_nop_stmt
-#else
-#error "missing VARIADIC macro define, fix and rebuild!"
-#endif
-
-#else /* CURL_DISABLE_VERBOSE_STRINGS */
-
-#define infof Curl_infof
-
-#endif /* CURL_DISABLE_VERBOSE_STRINGS */
-
-#define failf Curl_failf
-
-#define CLIENTWRITE_BODY (1<<0)
-#define CLIENTWRITE_HEADER (1<<1)
-#define CLIENTWRITE_STATUS (1<<2) /* the first "header" is the status line */
-#define CLIENTWRITE_CONNECT (1<<3) /* a CONNECT response */
-#define CLIENTWRITE_1XX (1<<4) /* a 1xx response */
-#define CLIENTWRITE_TRAILER (1<<5) /* a trailer header */
-#define CLIENTWRITE_BOTH (CLIENTWRITE_BODY|CLIENTWRITE_HEADER)
-
+#include "curl_trc.h"
+
+/**
+ * Type of data that is being written to the client (application)
+ * - data written can be either BODY or META data
+ * - META data is either INFO or HEADER
+ * - INFO is meta information, e.g. not BODY, that cannot be interpreted
+ * as headers of a response. Example FTP/IMAP pingpong answers.
+ * - HEADER can have additional bits set (more than one)
+ * - STATUS special "header", e.g. response status line in HTTP
+ * - CONNECT header was received during proxying the connection
+ * - 1XX header is part of an intermediate response, e.g. HTTP 1xx code
+ * - TRAILER header is trailing response data, e.g. HTTP trailers
+ * BODY, INFO and HEADER should not be mixed, as this would lead to
+ * confusion on how to interpret/format/convert the data.
+ */
+#define CLIENTWRITE_BODY (1<<0) /* non-meta information, BODY */
+#define CLIENTWRITE_INFO (1<<1) /* meta information, not a HEADER */
+#define CLIENTWRITE_HEADER (1<<2) /* meta information, HEADER */
+#define CLIENTWRITE_STATUS (1<<3) /* a special status HEADER */
+#define CLIENTWRITE_CONNECT (1<<4) /* a CONNECT related HEADER */
+#define CLIENTWRITE_1XX (1<<5) /* a 1xx response related HEADER */
+#define CLIENTWRITE_TRAILER (1<<6) /* a trailer HEADER */
+
+/**
+ * Write `len` bytes at `prt` to the client. `type` indicates what
+ * kind of data is being written.
+ */
CURLcode Curl_client_write(struct Curl_easy *data, int type, char *ptr,
size_t len) WARN_UNUSED_RESULT;
-bool Curl_recv_has_postponed_data(struct connectdata *conn, int sockindex);
-
-/* internal read-function, does plain socket only */
-CURLcode Curl_read_plain(curl_socket_t sockfd,
- char *buf,
- size_t bytesfromsocket,
- ssize_t *n);
+/**
+ * For a paused transfer, there might be buffered data held back.
+ * Attempt to flush this data to the client. This *may* trigger
+ * another pause of the transfer.
+ */
+CURLcode Curl_client_unpause(struct Curl_easy *data);
+
+/**
+ * Free all resources related to client writing.
+ */
+void Curl_client_cleanup(struct Curl_easy *data);
+
+/**
+ * Client Writers - a chain passing transfer BODY data to the client.
+ * Main application: HTTP and related protocols
+ * Other uses: monitoring of download progress
+ *
+ * Writers in the chain are order by their `phase`. First come all
+ * writers in CURL_CW_RAW, followed by any in CURL_CW_TRANSFER_DECODE,
+ * followed by any in CURL_CW_PROTOCOL, etc.
+ *
+ * When adding a writer, it is inserted as first in its phase. This means
+ * the order of adding writers of the same phase matters, but writers for
+ * different phases may be added in any order.
+ *
+ * Writers which do modify the BODY data written are expected to be of
+ * phases TRANSFER_DECODE or CONTENT_DECODE. The other phases are intended
+ * for monitoring writers. Which do *not* modify the data but gather
+ * statistics or update progress reporting.
+ */
+
+/* Phase a writer operates at. */
+typedef enum {
+ CURL_CW_RAW, /* raw data written, before any decoding */
+ CURL_CW_TRANSFER_DECODE, /* remove transfer-encodings */
+ CURL_CW_PROTOCOL, /* after transfer, but before content decoding */
+ CURL_CW_CONTENT_DECODE, /* remove content-encodings */
+ CURL_CW_CLIENT /* data written to client */
+} Curl_cwriter_phase;
+
+/* Client Writer Type, provides the implementation */
+struct Curl_cwtype {
+ const char *name; /* writer name. */
+ const char *alias; /* writer name alias, maybe NULL. */
+ CURLcode (*do_init)(struct Curl_easy *data,
+ struct Curl_cwriter *writer);
+ CURLcode (*do_write)(struct Curl_easy *data,
+ struct Curl_cwriter *writer, int type,
+ const char *buf, size_t nbytes);
+ void (*do_close)(struct Curl_easy *data,
+ struct Curl_cwriter *writer);
+ size_t cwriter_size; /* sizeof() allocated struct Curl_cwriter */
+};
+
+/* Client writer instance */
+struct Curl_cwriter {
+ const struct Curl_cwtype *cwt; /* type implementation */
+ struct Curl_cwriter *next; /* Downstream writer. */
+ Curl_cwriter_phase phase; /* phase at which it operates */
+};
+
+/**
+ * Create a new cwriter instance with given type and phase. Is not
+ * inserted into the writer chain by this call.
+ * Invokes `writer->do_init()`.
+ */
+CURLcode Curl_cwriter_create(struct Curl_cwriter **pwriter,
+ struct Curl_easy *data,
+ const struct Curl_cwtype *ce_handler,
+ Curl_cwriter_phase phase);
+
+/**
+ * Free a cwriter instance.
+ * Invokes `writer->do_close()`.
+ */
+void Curl_cwriter_free(struct Curl_easy *data,
+ struct Curl_cwriter *writer);
+
+/**
+ * Count the number of writers installed of the given phase.
+ */
+size_t Curl_cwriter_count(struct Curl_easy *data, Curl_cwriter_phase phase);
+
+/**
+ * Adds a writer to the transfer's writer chain.
+ * The writers `phase` determines where in the chain it is inserted.
+ */
+CURLcode Curl_cwriter_add(struct Curl_easy *data,
+ struct Curl_cwriter *writer);
+
+/**
+ * Convenience method for calling `writer->do_write()` that
+ * checks for NULL writer.
+ */
+CURLcode Curl_cwriter_write(struct Curl_easy *data,
+ struct Curl_cwriter *writer, int type,
+ const char *buf, size_t nbytes);
+
+/**
+ * Default implementations for do_init, do_write, do_close that
+ * do nothing and pass the data through.
+ */
+CURLcode Curl_cwriter_def_init(struct Curl_easy *data,
+ struct Curl_cwriter *writer);
+CURLcode Curl_cwriter_def_write(struct Curl_easy *data,
+ struct Curl_cwriter *writer, int type,
+ const char *buf, size_t nbytes);
+void Curl_cwriter_def_close(struct Curl_easy *data,
+ struct Curl_cwriter *writer);
-ssize_t Curl_recv_plain(struct Curl_easy *data, int num, char *buf,
- size_t len, CURLcode *code);
-ssize_t Curl_send_plain(struct Curl_easy *data, int num,
- const void *mem, size_t len, CURLcode *code);
/* internal read-function, does plain socket, SSL and krb4 */
CURLcode Curl_read(struct Curl_easy *data, curl_socket_t sockfd,
@@ -82,15 +179,11 @@ CURLcode Curl_write(struct Curl_easy *data,
const void *mem, size_t len,
ssize_t *written);
-/* internal write-function, does plain sockets ONLY */
-CURLcode Curl_write_plain(struct Curl_easy *data,
- curl_socket_t sockfd,
- const void *mem, size_t len,
- ssize_t *written);
-
-/* the function used to output verbose information */
-void Curl_debug(struct Curl_easy *data, curl_infotype type,
- char *ptr, size_t size);
-
+/* internal write-function, using sockindex for connection destination */
+CURLcode Curl_nwrite(struct Curl_easy *data,
+ int sockindex,
+ const void *buf,
+ size_t blen,
+ ssize_t *pnwritten);
#endif /* HEADER_CURL_SENDF_H */
diff --git a/lib/setopt.c b/lib/setopt.c
index 5b5975485..a08140cce 100644
--- a/lib/setopt.c
+++ b/lib/setopt.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -50,6 +50,7 @@
#include "multiif.h"
#include "altsvc.h"
#include "hsts.h"
+#include "tftp.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
@@ -115,7 +116,11 @@ static CURLcode setstropt_userpwd(char *option, char **userp, char **passwdp)
/* Parse the login details if specified. It not then we treat NULL as a hint
to clear the existing data */
if(option) {
- result = Curl_parse_login_details(option, strlen(option),
+ size_t len = strlen(option);
+ if(len > CURL_MAX_INPUT_LENGTH)
+ return CURLE_BAD_FUNCTION_ARGUMENT;
+
+ result = Curl_parse_login_details(option, len,
(userp ? &user : NULL),
(passwdp ? &passwd : NULL),
NULL);
@@ -167,14 +172,14 @@ static CURLcode protocol2num(const char *str, curl_prot_t *val)
str = strchr(str, ',');
tlen = str? (size_t) (str - token): strlen(token);
if(tlen) {
- const struct Curl_handler *h = Curl_builtin_scheme(token, tlen);
+ const struct Curl_handler *h = Curl_getn_scheme_handler(token, tlen);
if(!h)
return CURLE_UNSUPPORTED_PROTOCOL;
*val |= h->protocol;
}
- } while(str++);
+ } while(str && str++);
if(!*val)
/* no protocol listed */
@@ -204,6 +209,15 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
data->set.dns_cache_timeout = (int)arg;
break;
+ case CURLOPT_CA_CACHE_TIMEOUT:
+ arg = va_arg(param, long);
+ if(arg < -1)
+ return CURLE_BAD_FUNCTION_ARGUMENT;
+ else if(arg > INT_MAX)
+ arg = INT_MAX;
+
+ data->set.general_ssl.ca_cache_timeout = (int)arg;
+ break;
case CURLOPT_DNS_USE_GLOBAL_CACHE:
/* deprecated */
break;
@@ -220,7 +234,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
break;
#endif
case CURLOPT_TLS13_CIPHERS:
- if(Curl_ssl_tls13_ciphersuites()) {
+ if(Curl_ssl_supports(data, SSLSUPP_TLS13_CIPHERSUITES)) {
/* set preferred list of TLS 1.3 cipher suites */
result = Curl_setstropt(&data->set.str[STRING_SSL_CIPHER13_LIST],
va_arg(param, char *));
@@ -230,7 +244,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
break;
#ifndef CURL_DISABLE_PROXY
case CURLOPT_PROXY_TLS13_CIPHERS:
- if(Curl_ssl_tls13_ciphersuites()) {
+ if(Curl_ssl_supports(data, SSLSUPP_TLS13_CIPHERSUITES)) {
/* set preferred list of TLS 1.3 cipher suites for proxy */
result = Curl_setstropt(&data->set.str[STRING_SSL_CIPHER13_LIST_PROXY],
va_arg(param, char *));
@@ -248,43 +262,43 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
* Set the absolute number of maximum simultaneous alive connection that
* libcurl is allowed to have.
*/
- arg = va_arg(param, long);
- if(arg < 0)
+ uarg = va_arg(param, unsigned long);
+ if(uarg > UINT_MAX)
return CURLE_BAD_FUNCTION_ARGUMENT;
- data->set.maxconnects = arg;
+ data->set.maxconnects = (unsigned int)uarg;
break;
case CURLOPT_FORBID_REUSE:
/*
* When this transfer is done, it must not be left to be reused by a
* subsequent transfer but shall be closed immediately.
*/
- data->set.reuse_forbid = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.reuse_forbid = (0 != va_arg(param, long));
break;
case CURLOPT_FRESH_CONNECT:
/*
* This transfer shall not use a previously cached connection but
* should be made with a fresh new connect!
*/
- data->set.reuse_fresh = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.reuse_fresh = (0 != va_arg(param, long));
break;
case CURLOPT_VERBOSE:
/*
* Verbose means infof() calls that give a lot of information about
* the connection and transfer procedures as well as internal choices.
*/
- data->set.verbose = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.verbose = (0 != va_arg(param, long));
break;
case CURLOPT_HEADER:
/*
* Set to include the header in the general data output stream.
*/
- data->set.include_header = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.include_header = (0 != va_arg(param, long));
break;
case CURLOPT_NOPROGRESS:
/*
* Shut off the internal supported progress meter
*/
- data->set.hide_progress = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.hide_progress = (0 != va_arg(param, long));
if(data->set.hide_progress)
data->progress.flags |= PGRS_HIDE;
else
@@ -294,7 +308,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
/*
* Do not include the body part in the output data stream.
*/
- data->set.opt_no_body = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.opt_no_body = (0 != va_arg(param, long));
#ifndef CURL_DISABLE_HTTP
if(data->set.opt_no_body)
/* in HTTP lingo, no body means using the HEAD request... */
@@ -308,11 +322,10 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
* Don't output the >=400 error code HTML-page, but instead only
* return error.
*/
- data->set.http_fail_on_error = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.http_fail_on_error = (0 != va_arg(param, long));
break;
case CURLOPT_KEEP_SENDING_ON_ERROR:
- data->set.http_keep_sending_on_error = (0 != va_arg(param, long)) ?
- TRUE : FALSE;
+ data->set.http_keep_sending_on_error = (0 != va_arg(param, long));
break;
case CURLOPT_UPLOAD:
case CURLOPT_PUT:
@@ -320,8 +333,8 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
* We want to sent data to the remote host. If this is HTTP, that equals
* using the PUT request.
*/
- data->set.upload = (0 != va_arg(param, long)) ? TRUE : FALSE;
- if(data->set.upload) {
+ arg = va_arg(param, long);
+ if(arg) {
/* If this is HTTP, PUT is what's needed to "upload" */
data->set.method = HTTPREQ_PUT;
data->set.opt_no_body = FALSE; /* this is implied */
@@ -340,7 +353,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
* Try to get the file time of the remote document. The time will
* later (possibly) become available using curl_easy_getinfo().
*/
- data->set.get_filetime = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.get_filetime = (0 != va_arg(param, long));
break;
case CURLOPT_SERVER_RESPONSE_TIMEOUT:
/*
@@ -366,7 +379,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
* TFTP option that specifies the block size to use for data transmission.
*/
arg = va_arg(param, long);
- if(arg < 0)
+ if(arg > TFTP_BLKSIZE_MAX || arg < TFTP_BLKSIZE_MIN)
return CURLE_BAD_FUNCTION_ARGUMENT;
data->set.tftp_blksize = arg;
break;
@@ -396,7 +409,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
*
* Transfer using ASCII (instead of BINARY).
*/
- data->set.prefer_ascii = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.prefer_ascii = (0 != va_arg(param, long));
break;
case CURLOPT_TIMECONDITION:
/*
@@ -406,7 +419,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
arg = va_arg(param, long);
if((arg < CURL_TIMECOND_NONE) || (arg >= CURL_TIMECOND_LAST))
return CURLE_BAD_FUNCTION_ARGUMENT;
- data->set.timecondition = (curl_TimeCond)arg;
+ data->set.timecondition = (unsigned char)(curl_TimeCond)arg;
break;
case CURLOPT_TIMEVALUE:
/*
@@ -454,8 +467,8 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
version_max >= CURL_SSLVERSION_MAX_LAST)
return CURLE_BAD_FUNCTION_ARGUMENT;
- primary->version = version;
- primary->version_max = version_max;
+ primary->version = (unsigned char)version;
+ primary->version_max = (unsigned int)version_max;
}
#else
result = CURLE_NOT_BUILT_IN;
@@ -564,7 +577,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
/*
* Switch on automatic referer that gets set if curl follows locations.
*/
- data->set.http_auto_referer = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.http_auto_referer = (0 != va_arg(param, long));
break;
case CURLOPT_ACCEPT_ENCODING:
@@ -579,28 +592,23 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
*/
argptr = va_arg(param, char *);
if(argptr && !*argptr) {
- argptr = Curl_all_content_encodings();
- if(!argptr)
- result = CURLE_OUT_OF_MEMORY;
- else {
- result = Curl_setstropt(&data->set.str[STRING_ENCODING], argptr);
- free(argptr);
- }
+ char all[256];
+ Curl_all_content_encodings(all, sizeof(all));
+ result = Curl_setstropt(&data->set.str[STRING_ENCODING], all);
}
else
result = Curl_setstropt(&data->set.str[STRING_ENCODING], argptr);
break;
case CURLOPT_TRANSFER_ENCODING:
- data->set.http_transfer_encoding = (0 != va_arg(param, long)) ?
- TRUE : FALSE;
+ data->set.http_transfer_encoding = (0 != va_arg(param, long));
break;
case CURLOPT_FOLLOWLOCATION:
/*
- * Follow Location: header hints on a HTTP-server.
+ * Follow Location: header hints on an HTTP-server.
*/
- data->set.http_follow_location = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.http_follow_location = (0 != va_arg(param, long));
break;
case CURLOPT_UNRESTRICTED_AUTH:
@@ -608,8 +616,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
* Send authentication (user+password) when following locations, even when
* hostname changed.
*/
- data->set.allow_auth_to_other_hosts =
- (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.allow_auth_to_other_hosts = (0 != va_arg(param, long));
break;
case CURLOPT_MAXREDIRS:
@@ -651,20 +658,22 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
}
else
data->set.method = HTTPREQ_GET;
- data->set.upload = FALSE;
break;
-#ifndef CURL_DISABLE_MIME
+#ifndef CURL_DISABLE_FORM_API
case CURLOPT_HTTPPOST:
/*
- * Set to make us do HTTP POST
+ * Set to make us do HTTP POST. Legacy API-style.
*/
data->set.httppost = va_arg(param, struct curl_httppost *);
data->set.method = HTTPREQ_POST_FORM;
data->set.opt_no_body = FALSE; /* this is implied */
+ Curl_mime_cleanpart(data->state.formp);
+ Curl_safefree(data->state.formp);
break;
#endif
+#if !defined(CURL_DISABLE_AWS)
case CURLOPT_AWS_SIGV4:
/*
* String that is merged to some authentication
@@ -678,6 +687,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
if(data->set.str[STRING_AWS_SIGV4])
data->set.httpauth = CURLAUTH_AWS_SIGV4;
break;
+#endif
case CURLOPT_REFERER:
/*
@@ -720,14 +730,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
* Set header option.
*/
arg = va_arg(param, long);
- data->set.sep_headers = (bool)((arg & CURLHEADER_SEPARATE)? TRUE: FALSE);
- break;
-
- case CURLOPT_HTTP200ALIASES:
- /*
- * Set a list of aliases for HTTP 200 in response header
- */
- data->set.http200aliases = va_arg(param, struct curl_slist *);
+ data->set.sep_headers = !!(arg & CURLHEADER_SEPARATE);
break;
#if !defined(CURL_DISABLE_COOKIES)
@@ -802,17 +805,8 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
* prevent the forthcoming read-cookies-from-file actions to accept
* cookies that are marked as being session cookies, as they belong to a
* previous session.
- *
- * In the original Netscape cookie spec, "session cookies" are cookies
- * with no expire date set. RFC2109 describes the same action if no
- * 'Max-Age' is set and RFC2965 includes the RFC2109 description and adds
- * a 'Discard' action that can enforce the discard even for cookies that
- * have a Max-Age.
- *
- * We run mostly with the original cookie spec, as hardly anyone implements
- * anything else.
*/
- data->set.cookiesession = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.cookiesession = (0 != va_arg(param, long));
break;
case CURLOPT_COOKIELIST:
@@ -882,7 +876,6 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
*/
if(va_arg(param, long)) {
data->set.method = HTTPREQ_GET;
- data->set.upload = FALSE; /* switch off upload */
data->set.opt_no_body = FALSE; /* this is implied */
}
break;
@@ -893,28 +886,44 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
* the listed enums in curl/curl.h.
*/
arg = va_arg(param, long);
- if(arg < CURL_HTTP_VERSION_NONE)
- return CURLE_BAD_FUNCTION_ARGUMENT;
+ switch(arg) {
+ case CURL_HTTP_VERSION_NONE:
+#ifdef USE_HTTP2
+ /* TODO: this seems an undesirable quirk to force a behaviour on
+ * lower implementations that they should recognize independently? */
+ arg = CURL_HTTP_VERSION_2TLS;
+#endif
+ /* accepted */
+ break;
+ case CURL_HTTP_VERSION_1_0:
+ case CURL_HTTP_VERSION_1_1:
+ /* accepted */
+ break;
+#ifdef USE_HTTP2
+ case CURL_HTTP_VERSION_2_0:
+ case CURL_HTTP_VERSION_2TLS:
+ case CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE:
+ /* accepted */
+ break;
+#endif
#ifdef ENABLE_QUIC
- if(arg == CURL_HTTP_VERSION_3)
- ;
- else
+ case CURL_HTTP_VERSION_3:
+ case CURL_HTTP_VERSION_3ONLY:
+ /* accepted */
+ break;
#endif
-#ifndef USE_HTTP2
- if(arg >= CURL_HTTP_VERSION_2)
- return CURLE_UNSUPPORTED_PROTOCOL;
-#else
- if(arg >= CURL_HTTP_VERSION_LAST)
+ default:
+ /* not accepted */
+ if(arg < CURL_HTTP_VERSION_NONE)
+ return CURLE_BAD_FUNCTION_ARGUMENT;
return CURLE_UNSUPPORTED_PROTOCOL;
- if(arg == CURL_HTTP_VERSION_NONE)
- arg = CURL_HTTP_VERSION_2TLS;
-#endif
+ }
data->set.httpwant = (unsigned char)arg;
break;
case CURLOPT_EXPECT_100_TIMEOUT_MS:
/*
- * Time to wait for a response to a HTTP request containing an
+ * Time to wait for a response to an HTTP request containing an
* Expect: 100-continue header before sending the data anyway.
*/
arg = va_arg(param, long);
@@ -932,9 +941,16 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
if(arg)
return CURLE_BAD_FUNCTION_ARGUMENT;
#else
- data->set.http09_allowed = arg ? TRUE : FALSE;
+ data->set.http09_allowed = !!arg;
#endif
break;
+
+ case CURLOPT_HTTP200ALIASES:
+ /*
+ * Set a list of aliases for HTTP 200 in response header
+ */
+ data->set.http200aliases = va_arg(param, struct curl_slist *);
+ break;
#endif /* CURL_DISABLE_HTTP */
#if !defined(CURL_DISABLE_HTTP) || !defined(CURL_DISABLE_SMTP) || \
@@ -958,12 +974,17 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
if(!result) {
data->set.method = HTTPREQ_POST_MIME;
data->set.opt_no_body = FALSE; /* this is implied */
+#ifndef CURL_DISABLE_FORM_API
+ Curl_mime_cleanpart(data->state.formp);
+ Curl_safefree(data->state.formp);
+#endif
}
break;
case CURLOPT_MIME_OPTIONS:
- data->set.mime_options = (unsigned int)va_arg(param, long);
- break;
+ arg = va_arg(param, long);
+ data->set.mime_formescape = !!(arg & CURLMIMEOPT_FORMESCAPE);
+ break;
# endif
#endif
@@ -983,8 +1004,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
/* the DIGEST_IE bit is only used to set a special marker, for all the
rest we need to handle it as normal DIGEST */
- data->state.authhost.iestyle =
- (bool)((auth & CURLAUTH_DIGEST_IE) ? TRUE : FALSE);
+ data->state.authhost.iestyle = !!(auth & CURLAUTH_DIGEST_IE);
if(auth & CURLAUTH_DIGEST_IE) {
auth |= CURLAUTH_DIGEST; /* set standard digest bit */
@@ -1037,8 +1057,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
/*
* Tunnel operations through the proxy instead of normal proxy use
*/
- data->set.tunnel_thru_httpproxy = (0 != va_arg(param, long)) ?
- TRUE : FALSE;
+ data->set.tunnel_thru_httpproxy = (0 != va_arg(param, long));
break;
case CURLOPT_PROXYPORT:
@@ -1048,7 +1067,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
arg = va_arg(param, long);
if((arg < 0) || (arg > 65535))
return CURLE_BAD_FUNCTION_ARGUMENT;
- data->set.proxyport = arg;
+ data->set.proxyport = (unsigned short)arg;
break;
case CURLOPT_PROXYAUTH:
@@ -1067,8 +1086,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
/* the DIGEST_IE bit is only used to set a special marker, for all the
rest we need to handle it as normal DIGEST */
- data->state.authproxy.iestyle =
- (bool)((auth & CURLAUTH_DIGEST_IE) ? TRUE : FALSE);
+ data->state.authproxy.iestyle = !!(auth & CURLAUTH_DIGEST_IE);
if(auth & CURLAUTH_DIGEST_IE) {
auth |= CURLAUTH_DIGEST; /* set standard digest bit */
@@ -1130,12 +1148,12 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
case CURLOPT_PROXYTYPE:
/*
- * Set proxy type. HTTP/HTTP_1_0/SOCKS4/SOCKS4a/SOCKS5/SOCKS5_HOSTNAME
+ * Set proxy type.
*/
arg = va_arg(param, long);
if((arg < CURLPROXY_HTTP) || (arg > CURLPROXY_SOCKS5_HOSTNAME))
return CURLE_BAD_FUNCTION_ARGUMENT;
- data->set.proxytype = (curl_proxytype)arg;
+ data->set.proxytype = (unsigned char)(curl_proxytype)arg;
break;
case CURLOPT_PROXY_TRANSFER_MODE:
@@ -1157,7 +1175,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
break;
case CURLOPT_SOCKS5_AUTH:
- data->set.socks5auth = va_arg(param, unsigned long);
+ data->set.socks5auth = (unsigned char)va_arg(param, unsigned long);
if(data->set.socks5auth & ~(CURLAUTH_BASIC | CURLAUTH_GSSAPI))
result = CURLE_NOT_BUILT_IN;
break;
@@ -1168,7 +1186,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
/*
* Set flag for NEC SOCK5 support
*/
- data->set.socks5_gssapi_nec = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.socks5_gssapi_nec = (0 != va_arg(param, long));
break;
#endif
#ifndef CURL_DISABLE_PROXY
@@ -1210,20 +1228,21 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
data->set.out = va_arg(param, void *);
break;
+#ifdef CURL_LIST_ONLY_PROTOCOL
case CURLOPT_DIRLISTONLY:
/*
* An option that changes the command to one that asks for a list only, no
* file info details. Used for FTP, POP3 and SFTP.
*/
- data->set.list_only = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.list_only = (0 != va_arg(param, long));
break;
-
+#endif
case CURLOPT_APPEND:
/*
* We want to upload and append to an existing file. Used for FTP and
* SFTP.
*/
- data->set.remote_append = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.remote_append = (0 != va_arg(param, long));
break;
#ifndef CURL_DISABLE_FTP
@@ -1234,7 +1253,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
arg = va_arg(param, long);
if((arg < CURLFTPMETHOD_DEFAULT) || (arg >= CURLFTPMETHOD_LAST))
return CURLE_BAD_FUNCTION_ARGUMENT;
- data->set.ftp_filemethod = (curl_ftpfile)arg;
+ data->set.ftp_filemethod = (unsigned char)arg;
break;
case CURLOPT_FTPPORT:
/*
@@ -1242,26 +1261,26 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
*/
result = Curl_setstropt(&data->set.str[STRING_FTPPORT],
va_arg(param, char *));
- data->set.ftp_use_port = (data->set.str[STRING_FTPPORT]) ? TRUE : FALSE;
+ data->set.ftp_use_port = !!(data->set.str[STRING_FTPPORT]);
break;
case CURLOPT_FTP_USE_EPRT:
- data->set.ftp_use_eprt = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.ftp_use_eprt = (0 != va_arg(param, long));
break;
case CURLOPT_FTP_USE_EPSV:
- data->set.ftp_use_epsv = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.ftp_use_epsv = (0 != va_arg(param, long));
break;
case CURLOPT_FTP_USE_PRET:
- data->set.ftp_use_pret = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.ftp_use_pret = (0 != va_arg(param, long));
break;
case CURLOPT_FTP_SSL_CCC:
arg = va_arg(param, long);
if((arg < CURLFTPSSL_CCC_NONE) || (arg >= CURLFTPSSL_CCC_LAST))
return CURLE_BAD_FUNCTION_ARGUMENT;
- data->set.ftp_ccc = (curl_ftpccc)arg;
+ data->set.ftp_ccc = (unsigned char)arg;
break;
case CURLOPT_FTP_SKIP_PASV_IP:
@@ -1269,7 +1288,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
* Enable or disable FTP_SKIP_PASV_IP, which will disable/enable the
* bypass of the IP address in PASV responses.
*/
- data->set.ftp_skip_ip = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.ftp_skip_ip = (0 != va_arg(param, long));
break;
case CURLOPT_FTP_ACCOUNT:
@@ -1289,7 +1308,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
arg = va_arg(param, long);
if((arg < CURLFTPAUTH_DEFAULT) || (arg >= CURLFTPAUTH_LAST))
return CURLE_BAD_FUNCTION_ARGUMENT;
- data->set.ftpsslauth = (curl_ftpauth)arg;
+ data->set.ftpsslauth = (unsigned char)(curl_ftpauth)arg;
break;
case CURLOPT_KRBLEVEL:
/*
@@ -1297,9 +1316,10 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
*/
result = Curl_setstropt(&data->set.str[STRING_KRB_LEVEL],
va_arg(param, char *));
- data->set.krb = (data->set.str[STRING_KRB_LEVEL]) ? TRUE : FALSE;
+ data->set.krb = !!(data->set.str[STRING_KRB_LEVEL]);
break;
#endif
+#if !defined(CURL_DISABLE_FTP) || defined(USE_SSH)
case CURLOPT_FTP_CREATE_MISSING_DIRS:
/*
* An FTP/SFTP option that modifies an upload to create missing
@@ -1313,6 +1333,26 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
else
data->set.ftp_create_missing_dirs = (unsigned char)arg;
break;
+
+ case CURLOPT_POSTQUOTE:
+ /*
+ * List of RAW FTP commands to use after a transfer
+ */
+ data->set.postquote = va_arg(param, struct curl_slist *);
+ break;
+ case CURLOPT_PREQUOTE:
+ /*
+ * List of RAW FTP commands to use prior to RETR (Wesley Laxton)
+ */
+ data->set.prequote = va_arg(param, struct curl_slist *);
+ break;
+ case CURLOPT_QUOTE:
+ /*
+ * List of RAW FTP commands to use before a transfer
+ */
+ data->set.quote = va_arg(param, struct curl_slist *);
+ break;
+#endif
case CURLOPT_READDATA:
/*
* FILE pointer to read the file to be uploaded from. Or possibly
@@ -1422,7 +1462,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
case CURLOPT_TIMEOUT_MS:
uarg = va_arg(param, unsigned long);
- if(uarg >= UINT_MAX)
+ if(uarg > UINT_MAX)
uarg = UINT_MAX;
data->set.timeout = (unsigned int)uarg;
break;
@@ -1440,7 +1480,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
case CURLOPT_CONNECTTIMEOUT_MS:
uarg = va_arg(param, unsigned long);
- if(uarg >= UINT_MAX)
+ if(uarg > UINT_MAX)
uarg = UINT_MAX;
data->set.connecttimeout = (unsigned int)uarg;
break;
@@ -1451,7 +1491,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
* The maximum time for curl to wait for FTP server connect
*/
uarg = va_arg(param, unsigned long);
- if(uarg >= UINT_MAX)
+ if(uarg > UINT_MAX)
uarg = UINT_MAX;
data->set.accepttimeout = (unsigned int)uarg;
break;
@@ -1497,24 +1537,6 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
va_arg(param, char *));
break;
- case CURLOPT_POSTQUOTE:
- /*
- * List of RAW FTP commands to use after a transfer
- */
- data->set.postquote = va_arg(param, struct curl_slist *);
- break;
- case CURLOPT_PREQUOTE:
- /*
- * List of RAW FTP commands to use prior to RETR (Wesley Laxton)
- */
- data->set.prequote = va_arg(param, struct curl_slist *);
- break;
- case CURLOPT_QUOTE:
- /*
- * List of RAW FTP commands to use before a transfer
- */
- data->set.quote = va_arg(param, struct curl_slist *);
- break;
case CURLOPT_RESOLVE:
/*
* List of HOST:PORT:[addresses] strings to populate the DNS cache with
@@ -1828,14 +1850,23 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
/*
* Kludgy option to enable CRLF conversions. Subject for removal.
*/
- data->set.crlf = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.crlf = (0 != va_arg(param, long));
break;
#ifndef CURL_DISABLE_PROXY
case CURLOPT_HAPROXYPROTOCOL:
/*
* Set to send the HAProxy Proxy Protocol header
*/
- data->set.haproxyprotocol = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.haproxyprotocol = (0 != va_arg(param, long));
+ break;
+ case CURLOPT_HAPROXY_CLIENT_IP:
+ /*
+ * Set the client IP to send through HAProxy PROXY protocol
+ */
+ result = Curl_setstropt(&data->set.str[STRING_HAPROXY_CLIENT_IP],
+ va_arg(param, char *));
+ /* We enable implicitly the HAProxy protocol if we use this flag. */
+ data->set.haproxyprotocol = TRUE;
break;
#endif
case CURLOPT_INTERFACE:
@@ -1846,6 +1877,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
result = Curl_setstropt(&data->set.str[STRING_DEVICE],
va_arg(param, char *));
break;
+#ifndef CURL_DISABLE_BINDLOCAL
case CURLOPT_LOCALPORT:
/*
* Set what local port to bind the socket to when performing an operation.
@@ -1862,37 +1894,32 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
arg = va_arg(param, long);
if((arg < 0) || (arg > 65535))
return CURLE_BAD_FUNCTION_ARGUMENT;
- data->set.localportrange = curlx_sltosi(arg);
+ data->set.localportrange = curlx_sltous(arg);
break;
+#endif
case CURLOPT_GSSAPI_DELEGATION:
/*
* GSS-API credential delegation bitmask
*/
- arg = va_arg(param, long);
- if(arg < CURLGSSAPI_DELEGATION_NONE)
- return CURLE_BAD_FUNCTION_ARGUMENT;
- data->set.gssapi_delegation = arg;
+ uarg = va_arg(param, unsigned long);
+ data->set.gssapi_delegation = (unsigned char)uarg&
+ (CURLGSSAPI_DELEGATION_POLICY_FLAG|CURLGSSAPI_DELEGATION_FLAG);
break;
case CURLOPT_SSL_VERIFYPEER:
/*
* Enable peer SSL verifying.
*/
- data->set.ssl.primary.verifypeer = (0 != va_arg(param, long)) ?
- TRUE : FALSE;
+ data->set.ssl.primary.verifypeer = (0 != va_arg(param, long));
/* Update the current connection ssl_config. */
- if(data->conn) {
- data->conn->ssl_config.verifypeer =
- data->set.ssl.primary.verifypeer;
- }
+ Curl_ssl_conn_config_update(data, FALSE);
break;
#ifndef CURL_DISABLE_DOH
case CURLOPT_DOH_SSL_VERIFYPEER:
/*
* Enable peer SSL verifying for DoH.
*/
- data->set.doh_verifypeer = (0 != va_arg(param, long)) ?
- TRUE : FALSE;
+ data->set.doh_verifypeer = (0 != va_arg(param, long));
break;
#endif
#ifndef CURL_DISABLE_PROXY
@@ -1904,10 +1931,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
(0 != va_arg(param, long))?TRUE:FALSE;
/* Update the current connection proxy_ssl_config. */
- if(data->conn) {
- data->conn->proxy_ssl_config.verifypeer =
- data->set.proxy_ssl.primary.verifypeer;
- }
+ Curl_ssl_conn_config_update(data, TRUE);
break;
#endif
case CURLOPT_SSL_VERIFYHOST:
@@ -1919,13 +1943,10 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
/* Obviously people are not reading documentation and too many thought
this argument took a boolean when it wasn't and misused it.
Treat 1 and 2 the same */
- data->set.ssl.primary.verifyhost = (bool)((arg & 3) ? TRUE : FALSE);
+ data->set.ssl.primary.verifyhost = !!(arg & 3);
/* Update the current connection ssl_config. */
- if(data->conn) {
- data->conn->ssl_config.verifyhost =
- data->set.ssl.primary.verifyhost;
- }
+ Curl_ssl_conn_config_update(data, FALSE);
break;
#ifndef CURL_DISABLE_DOH
case CURLOPT_DOH_SSL_VERIFYHOST:
@@ -1935,7 +1956,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
arg = va_arg(param, long);
/* Treat both 1 and 2 as TRUE */
- data->set.doh_verifyhost = (bool)((arg & 3) ? TRUE : FALSE);
+ data->set.doh_verifyhost = !!(arg & 3);
break;
#endif
#ifndef CURL_DISABLE_PROXY
@@ -1947,12 +1968,8 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
/* Treat both 1 and 2 as TRUE */
data->set.proxy_ssl.primary.verifyhost = (bool)((arg & 3)?TRUE:FALSE);
-
/* Update the current connection proxy_ssl_config. */
- if(data->conn) {
- data->conn->proxy_ssl_config.verifyhost =
- data->set.proxy_ssl.primary.verifyhost;
- }
+ Curl_ssl_conn_config_update(data, TRUE);
break;
#endif
case CURLOPT_SSL_VERIFYSTATUS:
@@ -1964,14 +1981,10 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
break;
}
- data->set.ssl.primary.verifystatus = (0 != va_arg(param, long)) ?
- TRUE : FALSE;
+ data->set.ssl.primary.verifystatus = (0 != va_arg(param, long));
/* Update the current connection ssl_config. */
- if(data->conn) {
- data->conn->ssl_config.verifystatus =
- data->set.ssl.primary.verifystatus;
- }
+ Curl_ssl_conn_config_update(data, FALSE);
break;
#ifndef CURL_DISABLE_DOH
case CURLOPT_DOH_SSL_VERIFYSTATUS:
@@ -1983,8 +1996,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
break;
}
- data->set.doh_verifystatus = (0 != va_arg(param, long)) ?
- TRUE : FALSE;
+ data->set.doh_verifystatus = (0 != va_arg(param, long));
break;
#endif
case CURLOPT_SSL_CTX_FUNCTION:
@@ -1992,7 +2004,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
* Set a SSL_CTX callback
*/
#ifdef USE_SSL
- if(Curl_ssl->supports & SSLSUPP_SSL_CTX)
+ if(Curl_ssl_supports(data, SSLSUPP_SSL_CTX))
data->set.ssl.fsslctx = va_arg(param, curl_ssl_ctx_callback);
else
#endif
@@ -2003,7 +2015,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
* Set a SSL_CTX callback parameter pointer
*/
#ifdef USE_SSL
- if(Curl_ssl->supports & SSLSUPP_SSL_CTX)
+ if(Curl_ssl_supports(data, SSLSUPP_SSL_CTX))
data->set.ssl.fsslctxp = va_arg(param, void *);
else
#endif
@@ -2013,28 +2025,28 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
/*
* Enable TLS false start.
*/
- if(!Curl_ssl_false_start()) {
+ if(!Curl_ssl_false_start(data)) {
result = CURLE_NOT_BUILT_IN;
break;
}
- data->set.ssl.falsestart = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.ssl.falsestart = (0 != va_arg(param, long));
break;
case CURLOPT_CERTINFO:
#ifdef USE_SSL
- if(Curl_ssl->supports & SSLSUPP_CERTINFO)
- data->set.ssl.certinfo = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ if(Curl_ssl_supports(data, SSLSUPP_CERTINFO))
+ data->set.ssl.certinfo = (0 != va_arg(param, long));
else
#endif
result = CURLE_NOT_BUILT_IN;
- break;
+ break;
case CURLOPT_PINNEDPUBLICKEY:
/*
* Set pinned public key for SSL connection.
* Specify file name of the public key in DER format.
*/
#ifdef USE_SSL
- if(Curl_ssl->supports & SSLSUPP_PINNEDPUBKEY)
+ if(Curl_ssl_supports(data, SSLSUPP_PINNEDPUBKEY))
result = Curl_setstropt(&data->set.str[STRING_SSL_PINNEDPUBLICKEY],
va_arg(param, char *));
else
@@ -2048,7 +2060,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
* Specify file name of the public key in DER format.
*/
#ifdef USE_SSL
- if(Curl_ssl->supports & SSLSUPP_PINNEDPUBKEY)
+ if(Curl_ssl_supports(data, SSLSUPP_PINNEDPUBKEY))
result = Curl_setstropt(&data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY],
va_arg(param, char *));
else
@@ -2069,14 +2081,14 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
* Specify entire PEM of the CA certificate
*/
#ifdef USE_SSL
- if(Curl_ssl->supports & SSLSUPP_CAINFO_BLOB)
+ if(Curl_ssl_supports(data, SSLSUPP_CAINFO_BLOB)) {
result = Curl_setblobopt(&data->set.blobs[BLOB_CAINFO],
va_arg(param, struct curl_blob *));
+ break;
+ }
else
#endif
return CURLE_NOT_BUILT_IN;
-
- break;
#ifndef CURL_DISABLE_PROXY
case CURLOPT_PROXY_CAINFO:
/*
@@ -2092,13 +2104,14 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
* Specify entire PEM of the CA certificate
*/
#ifdef USE_SSL
- if(Curl_ssl->supports & SSLSUPP_CAINFO_BLOB)
+ if(Curl_ssl_supports(data, SSLSUPP_CAINFO_BLOB)) {
result = Curl_setblobopt(&data->set.blobs[BLOB_CAINFO_PROXY],
va_arg(param, struct curl_blob *));
+ break;
+ }
else
#endif
return CURLE_NOT_BUILT_IN;
- break;
#endif
case CURLOPT_CAPATH:
/*
@@ -2106,7 +2119,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
* certificates which have been prepared using openssl c_rehash utility.
*/
#ifdef USE_SSL
- if(Curl_ssl->supports & SSLSUPP_CA_PATH)
+ if(Curl_ssl_supports(data, SSLSUPP_CA_PATH))
/* This does not work on windows. */
result = Curl_setstropt(&data->set.str[STRING_SSL_CAPATH],
va_arg(param, char *));
@@ -2121,7 +2134,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
* CA certificates which have been prepared using openssl c_rehash utility.
*/
#ifdef USE_SSL
- if(Curl_ssl->supports & SSLSUPP_CA_PATH)
+ if(Curl_ssl_supports(data, SSLSUPP_CA_PATH))
/* This does not work on windows. */
result = Curl_setstropt(&data->set.str[STRING_SSL_CAPATH_PROXY],
va_arg(param, char *));
@@ -2205,7 +2218,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
else if(arg < READBUFFER_MIN)
arg = READBUFFER_MIN;
- data->set.buffer_size = (int)arg;
+ data->set.buffer_size = (unsigned int)arg;
break;
case CURLOPT_UPLOAD_BUFFERSIZE:
@@ -2229,7 +2242,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
* The application asks not to set any signal() or alarm() handlers,
* even when using a timeout.
*/
- data->set.no_signal = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.no_signal = (0 != va_arg(param, long));
break;
case CURLOPT_SHARE:
@@ -2251,9 +2264,14 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
data->cookies = NULL;
#endif
+#ifndef CURL_DISABLE_HSTS
+ if(data->share->hsts == data->hsts)
+ data->hsts = NULL;
+#endif
+#ifdef USE_SSL
if(data->share->sslsession == data->state.session)
data->state.session = NULL;
-
+#endif
#ifdef USE_LIBPSL
if(data->psl == &data->share->psl)
data->psl = data->multi? &data->multi->psl: NULL;
@@ -2287,10 +2305,19 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
data->cookies = data->share->cookies;
}
#endif /* CURL_DISABLE_HTTP */
+#ifndef CURL_DISABLE_HSTS
+ if(data->share->hsts) {
+ /* first free the private one if any */
+ Curl_hsts_cleanup(&data->hsts);
+ data->hsts = data->share->hsts;
+ }
+#endif /* CURL_DISABLE_HTTP */
+#ifdef USE_SSL
if(data->share->sslsession) {
data->set.general_ssl.max_ssl_sessions = data->share->max_ssl_sessions;
data->state.session = data->share->sslsession;
}
+#endif
#ifdef USE_LIBPSL
if(data->share->specifier & (1 << CURL_LOCK_DATA_PSL))
data->psl = &data->share->psl;
@@ -2328,7 +2355,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
arg = va_arg(param, long);
if((arg < CURLUSESSL_NONE) || (arg >= CURLUSESSL_LAST))
return CURLE_BAD_FUNCTION_ARGUMENT;
- data->set.use_ssl = (curl_usessl)arg;
+ data->set.use_ssl = (unsigned char)arg;
break;
case CURLOPT_SSL_OPTIONS:
@@ -2390,11 +2417,11 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
* Enable or disable TCP_NODELAY, which will disable/enable the Nagle
* algorithm
*/
- data->set.tcp_nodelay = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.tcp_nodelay = (0 != va_arg(param, long));
break;
case CURLOPT_IGNORE_CONTENT_LENGTH:
- data->set.ignorecl = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.ignorecl = (0 != va_arg(param, long));
break;
case CURLOPT_CONNECT_ONLY:
@@ -2469,8 +2496,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
break;
case CURLOPT_SSL_SESSIONID_CACHE:
- data->set.ssl.primary.sessionid = (0 != va_arg(param, long)) ?
- TRUE : FALSE;
+ data->set.ssl.primary.sessionid = (0 != va_arg(param, long));
#ifndef CURL_DISABLE_PROXY
data->set.proxy_ssl.primary.sessionid = data->set.ssl.primary.sessionid;
#endif
@@ -2506,6 +2532,14 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
va_arg(param, char *));
break;
+ case CURLOPT_SSH_KNOWNHOSTS:
+ /*
+ * Store the file name to read known hosts from.
+ */
+ result = Curl_setstropt(&data->set.str[STRING_SSH_KNOWNHOSTS],
+ va_arg(param, char *));
+ break;
+#ifdef USE_LIBSSH2
case CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256:
/*
* Option to allow for the SHA256 of the host public key to be checked
@@ -2515,14 +2549,6 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
va_arg(param, char *));
break;
- case CURLOPT_SSH_KNOWNHOSTS:
- /*
- * Store the file name to read known hosts from.
- */
- result = Curl_setstropt(&data->set.str[STRING_SSH_KNOWNHOSTS],
- va_arg(param, char *));
- break;
-#ifdef USE_LIBSSH2
case CURLOPT_SSH_HOSTKEYFUNCTION:
/* the callback to check the hostkey without the knownhost file */
data->set.ssh_hostkeyfunc = va_arg(param, curl_sshhostkeycallback);
@@ -2535,6 +2561,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
data->set.ssh_hostkeyfunc_userp = va_arg(param, void *);
break;
#endif
+
case CURLOPT_SSH_KEYFUNCTION:
/* setting to NULL is fine since the ssh.c functions themselves will
then revert to use the internal default */
@@ -2558,7 +2585,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
* disable libcurl transfer encoding is used
*/
#ifndef USE_HYPER
- data->set.http_te_skip = (0 == va_arg(param, long)) ? TRUE : FALSE;
+ data->set.http_te_skip = (0 == va_arg(param, long));
break;
#else
return CURLE_NOT_BUILT_IN; /* hyper doesn't support */
@@ -2568,7 +2595,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
/*
* raw data passed to the application when content encoding is used
*/
- data->set.http_ce_skip = (0 == va_arg(param, long)) ? TRUE : FALSE;
+ data->set.http_ce_skip = (0 == va_arg(param, long));
break;
#if !defined(CURL_DISABLE_FTP) || defined(USE_SSH)
@@ -2581,7 +2608,8 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
return CURLE_BAD_FUNCTION_ARGUMENT;
data->set.new_file_perms = (unsigned int)arg;
break;
-
+#endif
+#ifdef USE_SSH
case CURLOPT_NEW_DIRECTORY_PERMS:
/*
* Uses these permissions instead of 0755
@@ -2666,9 +2694,9 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
/* Set the list of mail recipients */
data->set.mail_rcpt = va_arg(param, struct curl_slist *);
break;
- case CURLOPT_MAIL_RCPT_ALLLOWFAILS:
+ case CURLOPT_MAIL_RCPT_ALLOWFAILS:
/* allow RCPT TO command to fail for some recipients */
- data->set.mail_rcpt_allowfails = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.mail_rcpt_allowfails = (0 != va_arg(param, long));
break;
#endif
@@ -2680,7 +2708,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
case CURLOPT_SASL_IR:
/* Enable/disable SASL initial response */
- data->set.sasl_ir = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.sasl_ir = (0 != va_arg(param, long));
break;
#ifndef CURL_DISABLE_RTSP
case CURLOPT_RTSP_REQUEST:
@@ -2794,7 +2822,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
#endif
#ifndef CURL_DISABLE_FTP
case CURLOPT_WILDCARDMATCH:
- data->set.wildcard_enabled = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.wildcard_enabled = (0 != va_arg(param, long));
break;
case CURLOPT_CHUNK_BGN_FUNCTION:
data->set.chunk_bgn = va_arg(param, curl_chunk_bgn_callback);
@@ -2806,7 +2834,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
data->set.fnmatch = va_arg(param, curl_fnmatch_callback);
break;
case CURLOPT_CHUNK_DATA:
- data->wildcard.customptr = va_arg(param, void *);
+ data->set.wildcardptr = va_arg(param, void *);
break;
case CURLOPT_FNMATCH_DATA:
data->set.fnmatch_data = va_arg(param, void *);
@@ -2816,52 +2844,33 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
case CURLOPT_TLSAUTH_USERNAME:
result = Curl_setstropt(&data->set.str[STRING_TLSAUTH_USERNAME],
va_arg(param, char *));
- if(data->set.str[STRING_TLSAUTH_USERNAME] &&
- !data->set.ssl.primary.authtype)
- data->set.ssl.primary.authtype = CURL_TLSAUTH_SRP; /* default to SRP */
break;
#ifndef CURL_DISABLE_PROXY
case CURLOPT_PROXY_TLSAUTH_USERNAME:
result = Curl_setstropt(&data->set.str[STRING_TLSAUTH_USERNAME_PROXY],
va_arg(param, char *));
- if(data->set.str[STRING_TLSAUTH_USERNAME_PROXY] &&
- !data->set.proxy_ssl.primary.authtype)
- data->set.proxy_ssl.primary.authtype = CURL_TLSAUTH_SRP; /* default to
- SRP */
break;
#endif
case CURLOPT_TLSAUTH_PASSWORD:
result = Curl_setstropt(&data->set.str[STRING_TLSAUTH_PASSWORD],
va_arg(param, char *));
- if(data->set.str[STRING_TLSAUTH_USERNAME] &&
- !data->set.ssl.primary.authtype)
- data->set.ssl.primary.authtype = CURL_TLSAUTH_SRP; /* default */
break;
#ifndef CURL_DISABLE_PROXY
case CURLOPT_PROXY_TLSAUTH_PASSWORD:
result = Curl_setstropt(&data->set.str[STRING_TLSAUTH_PASSWORD_PROXY],
va_arg(param, char *));
- if(data->set.str[STRING_TLSAUTH_USERNAME_PROXY] &&
- !data->set.proxy_ssl.primary.authtype)
- data->set.proxy_ssl.primary.authtype = CURL_TLSAUTH_SRP; /* default */
break;
#endif
case CURLOPT_TLSAUTH_TYPE:
argptr = va_arg(param, char *);
- if(!argptr ||
- strncasecompare(argptr, "SRP", strlen("SRP")))
- data->set.ssl.primary.authtype = CURL_TLSAUTH_SRP;
- else
- data->set.ssl.primary.authtype = CURL_TLSAUTH_NONE;
+ if(argptr && !strncasecompare(argptr, "SRP", strlen("SRP")))
+ return CURLE_BAD_FUNCTION_ARGUMENT;
break;
#ifndef CURL_DISABLE_PROXY
case CURLOPT_PROXY_TLSAUTH_TYPE:
argptr = va_arg(param, char *);
- if(!argptr ||
- strncasecompare(argptr, "SRP", strlen("SRP")))
- data->set.proxy_ssl.primary.authtype = CURL_TLSAUTH_SRP;
- else
- data->set.proxy_ssl.primary.authtype = CURL_TLSAUTH_NONE;
+ if(argptr || !strncasecompare(argptr, "SRP", strlen("SRP")))
+ return CURLE_BAD_FUNCTION_ARGUMENT;
break;
#endif
#endif
@@ -2896,7 +2905,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
break;
#endif
case CURLOPT_TCP_KEEPALIVE:
- data->set.tcp_keepalive = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.tcp_keepalive = (0 != va_arg(param, long));
break;
case CURLOPT_TCP_KEEPIDLE:
arg = va_arg(param, long);
@@ -2925,7 +2934,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
case CURLOPT_SSL_ENABLE_NPN:
break;
case CURLOPT_SSL_ENABLE_ALPN:
- data->set.ssl_enable_alpn = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.ssl_enable_alpn = (0 != va_arg(param, long));
break;
#ifdef USE_UNIX_SOCKETS
case CURLOPT_UNIX_SOCKET_PATH:
@@ -2941,35 +2950,29 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
#endif
case CURLOPT_PATH_AS_IS:
- data->set.path_as_is = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.path_as_is = (0 != va_arg(param, long));
break;
case CURLOPT_PIPEWAIT:
- data->set.pipewait = (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.pipewait = (0 != va_arg(param, long));
break;
case CURLOPT_STREAM_WEIGHT:
-#ifndef USE_NGHTTP2
- return CURLE_NOT_BUILT_IN;
-#else
+#if defined(USE_HTTP2) || defined(USE_HTTP3)
arg = va_arg(param, long);
if((arg >= 1) && (arg <= 256))
- data->set.stream_weight = (int)arg;
+ data->set.priority.weight = (int)arg;
break;
+#else
+ return CURLE_NOT_BUILT_IN;
#endif
case CURLOPT_STREAM_DEPENDS:
case CURLOPT_STREAM_DEPENDS_E:
{
-#ifndef USE_NGHTTP2
- return CURLE_NOT_BUILT_IN;
-#else
struct Curl_easy *dep = va_arg(param, struct Curl_easy *);
if(!dep || GOOD_EASY_HANDLE(dep)) {
- if(data->set.stream_depends_on) {
- Curl_http2_remove_child(data->set.stream_depends_on, data);
- }
- Curl_http2_add_child(dep, data, (option == CURLOPT_STREAM_DEPENDS_E));
+ return Curl_data_priority_add_child(dep, data,
+ option == CURLOPT_STREAM_DEPENDS_E);
}
break;
-#endif
}
case CURLOPT_CONNECT_TO:
data->set.connect_to = va_arg(param, struct curl_slist *);
@@ -2979,18 +2982,17 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
break;
case CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS:
uarg = va_arg(param, unsigned long);
- if(uarg >= UINT_MAX)
+ if(uarg > UINT_MAX)
uarg = UINT_MAX;
data->set.happy_eyeballs_timeout = (unsigned int)uarg;
break;
#ifndef CURL_DISABLE_SHUFFLE_DNS
case CURLOPT_DNS_SHUFFLE_ADDRESSES:
- data->set.dns_shuffle_addresses = (0 != va_arg(param, long)) ? TRUE:FALSE;
+ data->set.dns_shuffle_addresses = (0 != va_arg(param, long));
break;
#endif
case CURLOPT_DISALLOW_USERNAME_IN_URL:
- data->set.disallow_username_in_url =
- (0 != va_arg(param, long)) ? TRUE : FALSE;
+ data->set.disallow_username_in_url = (0 != va_arg(param, long));
break;
#ifndef CURL_DISABLE_DOH
case CURLOPT_DOH_URL:
@@ -3040,19 +3042,39 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
case CURLOPT_HSTSWRITEDATA:
data->set.hsts_write_userp = va_arg(param, void *);
break;
- case CURLOPT_HSTS:
+ case CURLOPT_HSTS: {
+ struct curl_slist *h;
if(!data->hsts) {
data->hsts = Curl_hsts_init();
if(!data->hsts)
return CURLE_OUT_OF_MEMORY;
}
argptr = va_arg(param, char *);
- result = Curl_setstropt(&data->set.str[STRING_HSTS], argptr);
- if(result)
- return result;
- if(argptr)
- (void)Curl_hsts_loadfile(data, data->hsts, argptr);
+ if(argptr) {
+ result = Curl_setstropt(&data->set.str[STRING_HSTS], argptr);
+ if(result)
+ return result;
+ /* this needs to build a list of file names to read from, so that it can
+ read them later, as we might get a shared HSTS handle to load them
+ into */
+ h = curl_slist_append(data->state.hstslist, argptr);
+ if(!h) {
+ curl_slist_free_all(data->state.hstslist);
+ data->state.hstslist = NULL;
+ return CURLE_OUT_OF_MEMORY;
+ }
+ data->state.hstslist = h; /* store the list for later use */
+ }
+ else {
+ /* clear the list of HSTS files */
+ curl_slist_free_all(data->state.hstslist);
+ data->state.hstslist = NULL;
+ if(!data->share || !data->share->hsts)
+ /* throw away the HSTS cache unless shared */
+ Curl_hsts_cleanup(&data->hsts);
+ }
break;
+ }
case CURLOPT_HSTS_CTRL:
arg = va_arg(param, long);
if(arg & CURLHSTS_ENABLE) {
@@ -3107,6 +3129,9 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
break;
}
#endif
+ case CURLOPT_QUICK_EXIT:
+ data->set.quick_exit = (0 != va_arg(param, long)) ? 1L:0L;
+ break;
default:
/* unknown tag and its companion, just ignore: */
result = CURLE_UNKNOWN_OPTION;
diff --git a/lib/setopt.h b/lib/setopt.h
index ffc77a71d..3c14a05e3 100644
--- a/lib/setopt.h
+++ b/lib/setopt.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/setup-os400.h b/lib/setup-os400.h
index 6023ca20d..53e91777e 100644
--- a/lib/setup-os400.h
+++ b/lib/setup-os400.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -34,6 +34,9 @@
/* No OS/400 header file defines u_int32_t. */
typedef unsigned long u_int32_t;
+/* OS/400 has no idea of a tty! */
+#define isatty(fd) 0
+
/* System API wrapper prototypes & definitions to support ASCII parameters. */
@@ -49,102 +52,14 @@ extern int Curl_getaddrinfo_a(const char *nodename,
struct addrinfo **res);
#define getaddrinfo Curl_getaddrinfo_a
-
+/* Note socklen_t must be used as this is declared before curl_socklen_t */
extern int Curl_getnameinfo_a(const struct sockaddr *sa,
- curl_socklen_t salen,
- char *nodename, curl_socklen_t nodenamelen,
- char *servname, curl_socklen_t servnamelen,
+ socklen_t salen,
+ char *nodename, socklen_t nodenamelen,
+ char *servname, socklen_t servnamelen,
int flags);
#define getnameinfo Curl_getnameinfo_a
-
-/* GSKit wrappers. */
-
-extern int Curl_gsk_environment_open(gsk_handle * my_env_handle);
-#define gsk_environment_open Curl_gsk_environment_open
-
-extern int Curl_gsk_secure_soc_open(gsk_handle my_env_handle,
- gsk_handle * my_session_handle);
-#define gsk_secure_soc_open Curl_gsk_secure_soc_open
-
-extern int Curl_gsk_environment_close(gsk_handle * my_env_handle);
-#define gsk_environment_close Curl_gsk_environment_close
-
-extern int Curl_gsk_secure_soc_close(gsk_handle * my_session_handle);
-#define gsk_secure_soc_close Curl_gsk_secure_soc_close
-
-extern int Curl_gsk_environment_init(gsk_handle my_env_handle);
-#define gsk_environment_init Curl_gsk_environment_init
-
-extern int Curl_gsk_secure_soc_init(gsk_handle my_session_handle);
-#define gsk_secure_soc_init Curl_gsk_secure_soc_init
-
-extern int Curl_gsk_attribute_set_buffer_a(gsk_handle my_gsk_handle,
- GSK_BUF_ID bufID,
- const char *buffer,
- int bufSize);
-#define gsk_attribute_set_buffer Curl_gsk_attribute_set_buffer_a
-
-extern int Curl_gsk_attribute_set_enum(gsk_handle my_gsk_handle,
- GSK_ENUM_ID enumID,
- GSK_ENUM_VALUE enumValue);
-#define gsk_attribute_set_enum Curl_gsk_attribute_set_enum
-
-extern int Curl_gsk_attribute_set_numeric_value(gsk_handle my_gsk_handle,
- GSK_NUM_ID numID,
- int numValue);
-#define gsk_attribute_set_numeric_value Curl_gsk_attribute_set_numeric_value
-
-extern int Curl_gsk_attribute_set_callback(gsk_handle my_gsk_handle,
- GSK_CALLBACK_ID callBackID,
- void *callBackAreaPtr);
-#define gsk_attribute_set_callback Curl_gsk_attribute_set_callback
-
-extern int Curl_gsk_attribute_get_buffer_a(gsk_handle my_gsk_handle,
- GSK_BUF_ID bufID,
- const char **buffer,
- int *bufSize);
-#define gsk_attribute_get_buffer Curl_gsk_attribute_get_buffer_a
-
-extern int Curl_gsk_attribute_get_enum(gsk_handle my_gsk_handle,
- GSK_ENUM_ID enumID,
- GSK_ENUM_VALUE *enumValue);
-#define gsk_attribute_get_enum Curl_gsk_attribute_get_enum
-
-extern int Curl_gsk_attribute_get_numeric_value(gsk_handle my_gsk_handle,
- GSK_NUM_ID numID,
- int *numValue);
-#define gsk_attribute_get_numeric_value Curl_gsk_attribute_get_numeric_value
-
-extern int Curl_gsk_attribute_get_cert_info(gsk_handle my_gsk_handle,
- GSK_CERT_ID certID,
- const gsk_cert_data_elem **certDataElem,
- int *certDataElementCount);
-#define gsk_attribute_get_cert_info Curl_gsk_attribute_get_cert_info
-
-extern int Curl_gsk_secure_soc_misc(gsk_handle my_session_handle,
- GSK_MISC_ID miscID);
-#define gsk_secure_soc_misc Curl_gsk_secure_soc_misc
-
-extern int Curl_gsk_secure_soc_read(gsk_handle my_session_handle,
- char *readBuffer,
- int readBufSize, int *amtRead);
-#define gsk_secure_soc_read Curl_gsk_secure_soc_read
-
-extern int Curl_gsk_secure_soc_write(gsk_handle my_session_handle,
- char *writeBuffer,
- int writeBufSize, int *amtWritten);
-#define gsk_secure_soc_write Curl_gsk_secure_soc_write
-
-extern const char * Curl_gsk_strerror_a(int gsk_return_value);
-#define gsk_strerror Curl_gsk_strerror_a
-
-extern int Curl_gsk_secure_soc_startInit(gsk_handle my_session_handle,
- int IOCompletionPort,
- Qso_OverlappedIO_t * communicationsArea);
-#define gsk_secure_soc_startInit Curl_gsk_secure_soc_startInit
-
-
/* GSSAPI wrappers. */
extern OM_uint32 Curl_gss_import_name_a(OM_uint32 * minor_status,
@@ -205,7 +120,7 @@ extern OM_uint32 Curl_gss_delete_sec_context_a(OM_uint32 * minor_status,
extern int Curl_os400_connect(int sd, struct sockaddr *destaddr, int addrlen);
extern int Curl_os400_bind(int sd, struct sockaddr *localaddr, int addrlen);
extern int Curl_os400_sendto(int sd, char *buffer, int buflen, int flags,
- struct sockaddr *dstaddr, int addrlen);
+ const struct sockaddr *dstaddr, int addrlen);
extern int Curl_os400_recvfrom(int sd, char *buffer, int buflen, int flags,
struct sockaddr *fromaddr, int *addrlen);
extern int Curl_os400_getpeername(int sd, struct sockaddr *addr, int *addrlen);
diff --git a/lib/setup-vms.h b/lib/setup-vms.h
index b570683d7..645cc1a9c 100644
--- a/lib/setup-vms.h
+++ b/lib/setup-vms.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -262,7 +262,6 @@ static struct passwd *vms_getpwuid(uid_t uid)
#define PKCS12_parse PKCS12_PARSE
#define RAND_add RAND_ADD
#define RAND_bytes RAND_BYTES
-#define RAND_egd RAND_EGD
#define RAND_file_name RAND_FILE_NAME
#define RAND_load_file RAND_LOAD_FILE
#define RAND_status RAND_STATUS
diff --git a/lib/setup-win32.h b/lib/setup-win32.h
index bc5f8efc3..4e034d4bb 100644
--- a/lib/setup-win32.h
+++ b/lib/setup-win32.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -53,14 +53,14 @@
# ifndef NOGDI
# define NOGDI
# endif
-# include <winerror.h>
-# include <windows.h>
# ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
# ifdef HAVE_WS2TCPIP_H
# include <ws2tcpip.h>
# endif
# endif
+# include <windows.h>
+# include <winerror.h>
# include <tchar.h>
# ifdef UNICODE
typedef wchar_t *(*curl_wcsdup_callback)(const wchar_t *str);
@@ -96,18 +96,12 @@
#ifndef _WIN32_WINNT_WS03
#define _WIN32_WINNT_WS03 0x0502 /* Windows Server 2003 */
#endif
-#ifndef _WIN32_WINNT_WIN6
-#define _WIN32_WINNT_WIN6 0x0600 /* Windows Vista */
-#endif
#ifndef _WIN32_WINNT_VISTA
#define _WIN32_WINNT_VISTA 0x0600 /* Windows Vista */
#endif
#ifndef _WIN32_WINNT_WS08
#define _WIN32_WINNT_WS08 0x0600 /* Windows Server 2008 */
#endif
-#ifndef _WIN32_WINNT_LONGHORN
-#define _WIN32_WINNT_LONGHORN 0x0600 /* Windows Vista */
-#endif
#ifndef _WIN32_WINNT_WIN7
#define _WIN32_WINNT_WIN7 0x0601 /* Windows 7 */
#endif
@@ -117,9 +111,6 @@
#ifndef _WIN32_WINNT_WINBLUE
#define _WIN32_WINNT_WINBLUE 0x0603 /* Windows 8.1 */
#endif
-#ifndef _WIN32_WINNT_WINTHRESHOLD
-#define _WIN32_WINNT_WINTHRESHOLD 0x0A00 /* Windows 10 */
-#endif
#ifndef _WIN32_WINNT_WIN10
#define _WIN32_WINNT_WIN10 0x0A00 /* Windows 10 */
#endif
diff --git a/lib/sha256.c b/lib/sha256.c
index 60720f5b1..4a02045d2 100644
--- a/lib/sha256.c
+++ b/lib/sha256.c
@@ -5,8 +5,8 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2017, Florin Petriuc, <petriuc.florin@gmail.com>
- * Copyright (C) 2018 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Florin Petriuc, <petriuc.florin@gmail.com>
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -25,7 +25,8 @@
#include "curl_setup.h"
-#ifndef CURL_DISABLE_CRYPTO_AUTH
+#if !defined(CURL_DISABLE_AWS) || !defined(CURL_DISABLE_DIGEST_AUTH) \
+ || defined(USE_LIBSSH2)
#include "warnless.h"
#include "curl_sha256.h"
@@ -57,6 +58,34 @@
#endif
#endif /* USE_MBEDTLS */
+#if defined(USE_OPENSSL_SHA256)
+
+/* When OpenSSL or wolfSSL is available we use their SHA256-functions. */
+#if defined(USE_OPENSSL)
+#include <openssl/evp.h>
+#elif defined(USE_WOLFSSL)
+#include <wolfssl/openssl/evp.h>
+#endif
+
+#elif defined(USE_GNUTLS)
+#include <nettle/sha.h>
+#elif defined(USE_MBEDTLS)
+#include <mbedtls/sha256.h>
+#elif (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && \
+ (__MAC_OS_X_VERSION_MAX_ALLOWED >= 1040)) || \
+ (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && \
+ (__IPHONE_OS_VERSION_MAX_ALLOWED >= 20000))
+#include <CommonCrypto/CommonDigest.h>
+#define AN_APPLE_OS
+#elif defined(USE_WIN32_CRYPTO)
+#include <wincrypt.h>
+#endif
+
+/* The last 3 #include files should be in this order */
+#include "curl_printf.h"
+#include "curl_memory.h"
+#include "memdebug.h"
+
/* Please keep the SSL backend-specific #if branches in this order:
*
* 1. USE_OPENSSL
@@ -71,20 +100,6 @@
#if defined(USE_OPENSSL_SHA256)
-/* When OpenSSL or wolfSSL is available is available we use their
- * SHA256-functions.
- */
-#if defined(USE_OPENSSL)
-#include <openssl/evp.h>
-#elif defined(USE_WOLFSSL)
-#include <wolfssl/openssl/evp.h>
-#endif
-
-#include "curl_memory.h"
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
struct sha256_ctx {
EVP_MD_CTX *openssl_ctx;
};
@@ -96,7 +111,10 @@ static CURLcode my_sha256_init(my_sha256_ctx *ctx)
if(!ctx->openssl_ctx)
return CURLE_OUT_OF_MEMORY;
- EVP_DigestInit_ex(ctx->openssl_ctx, EVP_sha256(), NULL);
+ if(!EVP_DigestInit_ex(ctx->openssl_ctx, EVP_sha256(), NULL)) {
+ EVP_MD_CTX_destroy(ctx->openssl_ctx);
+ return CURLE_FAILED_INIT;
+ }
return CURLE_OK;
}
@@ -115,13 +133,6 @@ static void my_sha256_final(unsigned char *digest, my_sha256_ctx *ctx)
#elif defined(USE_GNUTLS)
-#include <nettle/sha.h>
-
-#include "curl_memory.h"
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
typedef struct sha256_ctx my_sha256_ctx;
static CURLcode my_sha256_init(my_sha256_ctx *ctx)
@@ -144,13 +155,6 @@ static void my_sha256_final(unsigned char *digest, my_sha256_ctx *ctx)
#elif defined(USE_MBEDTLS)
-#include <mbedtls/sha256.h>
-
-#include "curl_memory.h"
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
typedef mbedtls_sha256_context my_sha256_ctx;
static CURLcode my_sha256_init(my_sha256_ctx *ctx)
@@ -183,18 +187,7 @@ static void my_sha256_final(unsigned char *digest, my_sha256_ctx *ctx)
#endif
}
-#elif (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && \
- (__MAC_OS_X_VERSION_MAX_ALLOWED >= 1040)) || \
- (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && \
- (__IPHONE_OS_VERSION_MAX_ALLOWED >= 20000))
-
-#include <CommonCrypto/CommonDigest.h>
-
-#include "curl_memory.h"
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
+#elif defined(AN_APPLE_OS)
typedef CC_SHA256_CTX my_sha256_ctx;
static CURLcode my_sha256_init(my_sha256_ctx *ctx)
@@ -217,8 +210,6 @@ static void my_sha256_final(unsigned char *digest, my_sha256_ctx *ctx)
#elif defined(USE_WIN32_CRYPTO)
-#include <wincrypt.h>
-
struct sha256_ctx {
HCRYPTPROV hCryptProv;
HCRYPTHASH hHash;
@@ -231,9 +222,14 @@ typedef struct sha256_ctx my_sha256_ctx;
static CURLcode my_sha256_init(my_sha256_ctx *ctx)
{
- if(CryptAcquireContext(&ctx->hCryptProv, NULL, NULL, PROV_RSA_AES,
- CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) {
- CryptCreateHash(ctx->hCryptProv, CALG_SHA_256, 0, 0, &ctx->hHash);
+ if(!CryptAcquireContext(&ctx->hCryptProv, NULL, NULL, PROV_RSA_AES,
+ CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
+ return CURLE_OUT_OF_MEMORY;
+
+ if(!CryptCreateHash(ctx->hCryptProv, CALG_SHA_256, 0, 0, &ctx->hHash)) {
+ CryptReleaseContext(ctx->hCryptProv, 0);
+ ctx->hCryptProv = 0;
+ return CURLE_FAILED_INIT;
}
return CURLE_OK;
@@ -546,4 +542,4 @@ const struct HMAC_params Curl_HMAC_SHA256[] = {
};
-#endif /* CURL_DISABLE_CRYPTO_AUTH */
+#endif /* AWS, DIGEST, or libSSH2 */
diff --git a/lib/share.c b/lib/share.c
index 1a083e72a..c0a8d806f 100644
--- a/lib/share.c
+++ b/lib/share.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -29,9 +29,11 @@
#include "share.h"
#include "psl.h"
#include "vtls/vtls.h"
-#include "curl_memory.h"
+#include "hsts.h"
-/* The last #include file should be: */
+/* The last 3 #include files should be in this order */
+#include "curl_printf.h"
+#include "curl_memory.h"
#include "memdebug.h"
struct Curl_share *
@@ -89,6 +91,18 @@ curl_share_setopt(struct Curl_share *share, CURLSHoption option, ...)
#endif
break;
+ case CURL_LOCK_DATA_HSTS:
+#ifndef CURL_DISABLE_HSTS
+ if(!share->hsts) {
+ share->hsts = Curl_hsts_init();
+ if(!share->hsts)
+ res = CURLSHE_NOMEM;
+ }
+#else /* CURL_DISABLE_HSTS */
+ res = CURLSHE_NOT_BUILT_IN;
+#endif
+ break;
+
case CURL_LOCK_DATA_SSL_SESSION:
#ifdef USE_SSL
if(!share->sslsession) {
@@ -141,6 +155,16 @@ curl_share_setopt(struct Curl_share *share, CURLSHoption option, ...)
#endif
break;
+ case CURL_LOCK_DATA_HSTS:
+#ifndef CURL_DISABLE_HSTS
+ if(share->hsts) {
+ Curl_hsts_cleanup(&share->hsts);
+ }
+#else /* CURL_DISABLE_HSTS */
+ res = CURLSHE_NOT_BUILT_IN;
+#endif
+ break;
+
case CURL_LOCK_DATA_SSL_SESSION:
#ifdef USE_SSL
Curl_safefree(share->sslsession);
@@ -207,6 +231,10 @@ curl_share_cleanup(struct Curl_share *share)
Curl_cookie_cleanup(share->cookies);
#endif
+#ifndef CURL_DISABLE_HSTS
+ Curl_hsts_cleanup(&share->hsts);
+#endif
+
#ifdef USE_SSL
if(share->sslsession) {
size_t i;
diff --git a/lib/share.h b/lib/share.h
index 32be41691..632d9198f 100644
--- a/lib/share.h
+++ b/lib/share.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -31,14 +31,6 @@
#include "urldata.h"
#include "conncache.h"
-/* SalfordC says "A structure member may not be volatile". Hence:
- */
-#ifdef __SALFORDC__
-#define CURL_VOLATILE
-#else
-#define CURL_VOLATILE volatile
-#endif
-
#define CURL_GOOD_SHARE 0x7e117a1e
#define GOOD_SHARE_HANDLE(x) ((x) && (x)->magic == CURL_GOOD_SHARE)
@@ -46,7 +38,7 @@
struct Curl_share {
unsigned int magic; /* CURL_GOOD_SHARE */
unsigned int specifier;
- CURL_VOLATILE unsigned int dirty;
+ volatile unsigned int dirty;
curl_lock_function lockfunc;
curl_unlock_function unlockfunc;
@@ -59,10 +51,14 @@ struct Curl_share {
#ifdef USE_LIBPSL
struct PslCache psl;
#endif
-
+#ifndef CURL_DISABLE_HSTS
+ struct hsts *hsts;
+#endif
+#ifdef USE_SSL
struct Curl_ssl_session *sslsession;
size_t max_ssl_sessions;
long sessionage;
+#endif
};
CURLSHcode Curl_share_lock(struct Curl_easy *, curl_lock_data,
diff --git a/lib/sigpipe.h b/lib/sigpipe.h
index d12b31764..9b29403c2 100644
--- a/lib/sigpipe.h
+++ b/lib/sigpipe.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -25,7 +25,7 @@
***************************************************************************/
#include "curl_setup.h"
-#if defined(HAVE_SIGNAL_H) && defined(HAVE_SIGACTION) && \
+#if defined(HAVE_SIGACTION) && \
(defined(USE_OPENSSL) || defined(USE_MBEDTLS) || defined(USE_WOLFSSL))
#include <signal.h>
@@ -50,7 +50,6 @@ static void sigpipe_ignore(struct Curl_easy *data,
if(!data->set.no_signal) {
struct sigaction action;
/* first, extract the existing situation */
- memset(&ig->old_pipe_act, 0, sizeof(struct sigaction));
sigaction(SIGPIPE, NULL, &ig->old_pipe_act);
action = ig->old_pipe_act;
/* ignore this signal */
diff --git a/lib/slist.c b/lib/slist.c
index 6c80722c7..366b24760 100644
--- a/lib/slist.c
+++ b/lib/slist.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/slist.h b/lib/slist.h
index 4e5834c90..9561fd022 100644
--- a/lib/slist.h
+++ b/lib/slist.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/smb.c b/lib/smb.c
index a62e85814..6c8a47c7f 100644
--- a/lib/smb.c
+++ b/lib/smb.c
@@ -5,8 +5,8 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2016 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- * Copyright (C) 2014, Bill Nagel <wnagel@tycoint.com>, Exacq Technologies
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Bill Nagel <wnagel@tycoint.com>, Exacq Technologies
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -25,24 +25,17 @@
#include "curl_setup.h"
-#if !defined(CURL_DISABLE_SMB) && defined(USE_CURL_NTLM_CORE) && \
- (SIZEOF_CURL_OFF_T > 4)
+#if !defined(CURL_DISABLE_SMB) && defined(USE_CURL_NTLM_CORE)
-#define BUILDING_CURL_SMB_C
-
-#ifdef HAVE_PROCESS_H
-#include <process.h>
-#ifdef CURL_WINDOWS_APP
+#ifdef _WIN32
#define getpid GetCurrentProcessId
-#elif defined(WIN32)
-#define getpid _getpid
-#endif
#endif
#include "smb.h"
#include "urldata.h"
#include "sendf.h"
#include "multiif.h"
+#include "cfilters.h"
#include "connect.h"
#include "progress.h"
#include "transfer.h"
@@ -55,6 +48,199 @@
#include "curl_memory.h"
#include "memdebug.h"
+/*
+ * Definitions for SMB protocol data structures
+ */
+#if defined(_MSC_VER) || defined(__ILEC400__)
+# define PACK
+# pragma pack(push)
+# pragma pack(1)
+#elif defined(__GNUC__)
+# define PACK __attribute__((packed))
+#else
+# define PACK
+#endif
+
+#define SMB_COM_CLOSE 0x04
+#define SMB_COM_READ_ANDX 0x2e
+#define SMB_COM_WRITE_ANDX 0x2f
+#define SMB_COM_TREE_DISCONNECT 0x71
+#define SMB_COM_NEGOTIATE 0x72
+#define SMB_COM_SETUP_ANDX 0x73
+#define SMB_COM_TREE_CONNECT_ANDX 0x75
+#define SMB_COM_NT_CREATE_ANDX 0xa2
+#define SMB_COM_NO_ANDX_COMMAND 0xff
+
+#define SMB_WC_CLOSE 0x03
+#define SMB_WC_READ_ANDX 0x0c
+#define SMB_WC_WRITE_ANDX 0x0e
+#define SMB_WC_SETUP_ANDX 0x0d
+#define SMB_WC_TREE_CONNECT_ANDX 0x04
+#define SMB_WC_NT_CREATE_ANDX 0x18
+
+#define SMB_FLAGS_CANONICAL_PATHNAMES 0x10
+#define SMB_FLAGS_CASELESS_PATHNAMES 0x08
+#define SMB_FLAGS2_UNICODE_STRINGS 0x8000
+#define SMB_FLAGS2_IS_LONG_NAME 0x0040
+#define SMB_FLAGS2_KNOWS_LONG_NAME 0x0001
+
+#define SMB_CAP_LARGE_FILES 0x08
+#define SMB_GENERIC_WRITE 0x40000000
+#define SMB_GENERIC_READ 0x80000000
+#define SMB_FILE_SHARE_ALL 0x07
+#define SMB_FILE_OPEN 0x01
+#define SMB_FILE_OVERWRITE_IF 0x05
+
+#define SMB_ERR_NOACCESS 0x00050001
+
+struct smb_header {
+ unsigned char nbt_type;
+ unsigned char nbt_flags;
+ unsigned short nbt_length;
+ unsigned char magic[4];
+ unsigned char command;
+ unsigned int status;
+ unsigned char flags;
+ unsigned short flags2;
+ unsigned short pid_high;
+ unsigned char signature[8];
+ unsigned short pad;
+ unsigned short tid;
+ unsigned short pid;
+ unsigned short uid;
+ unsigned short mid;
+} PACK;
+
+struct smb_negotiate_response {
+ struct smb_header h;
+ unsigned char word_count;
+ unsigned short dialect_index;
+ unsigned char security_mode;
+ unsigned short max_mpx_count;
+ unsigned short max_number_vcs;
+ unsigned int max_buffer_size;
+ unsigned int max_raw_size;
+ unsigned int session_key;
+ unsigned int capabilities;
+ unsigned int system_time_low;
+ unsigned int system_time_high;
+ unsigned short server_time_zone;
+ unsigned char encryption_key_length;
+ unsigned short byte_count;
+ char bytes[1];
+} PACK;
+
+struct andx {
+ unsigned char command;
+ unsigned char pad;
+ unsigned short offset;
+} PACK;
+
+struct smb_setup {
+ unsigned char word_count;
+ struct andx andx;
+ unsigned short max_buffer_size;
+ unsigned short max_mpx_count;
+ unsigned short vc_number;
+ unsigned int session_key;
+ unsigned short lengths[2];
+ unsigned int pad;
+ unsigned int capabilities;
+ unsigned short byte_count;
+ char bytes[1024];
+} PACK;
+
+struct smb_tree_connect {
+ unsigned char word_count;
+ struct andx andx;
+ unsigned short flags;
+ unsigned short pw_len;
+ unsigned short byte_count;
+ char bytes[1024];
+} PACK;
+
+struct smb_nt_create {
+ unsigned char word_count;
+ struct andx andx;
+ unsigned char pad;
+ unsigned short name_length;
+ unsigned int flags;
+ unsigned int root_fid;
+ unsigned int access;
+ curl_off_t allocation_size;
+ unsigned int ext_file_attributes;
+ unsigned int share_access;
+ unsigned int create_disposition;
+ unsigned int create_options;
+ unsigned int impersonation_level;
+ unsigned char security_flags;
+ unsigned short byte_count;
+ char bytes[1024];
+} PACK;
+
+struct smb_nt_create_response {
+ struct smb_header h;
+ unsigned char word_count;
+ struct andx andx;
+ unsigned char op_lock_level;
+ unsigned short fid;
+ unsigned int create_disposition;
+
+ curl_off_t create_time;
+ curl_off_t last_access_time;
+ curl_off_t last_write_time;
+ curl_off_t last_change_time;
+ unsigned int ext_file_attributes;
+ curl_off_t allocation_size;
+ curl_off_t end_of_file;
+} PACK;
+
+struct smb_read {
+ unsigned char word_count;
+ struct andx andx;
+ unsigned short fid;
+ unsigned int offset;
+ unsigned short max_bytes;
+ unsigned short min_bytes;
+ unsigned int timeout;
+ unsigned short remaining;
+ unsigned int offset_high;
+ unsigned short byte_count;
+} PACK;
+
+struct smb_write {
+ struct smb_header h;
+ unsigned char word_count;
+ struct andx andx;
+ unsigned short fid;
+ unsigned int offset;
+ unsigned int timeout;
+ unsigned short write_mode;
+ unsigned short remaining;
+ unsigned short pad;
+ unsigned short data_length;
+ unsigned short data_offset;
+ unsigned int offset_high;
+ unsigned short byte_count;
+ unsigned char pad2;
+} PACK;
+
+struct smb_close {
+ unsigned char word_count;
+ unsigned short fid;
+ unsigned int last_mtime;
+ unsigned short byte_count;
+} PACK;
+
+struct smb_tree_disconnect {
+ unsigned char word_count;
+ unsigned short byte_count;
+} PACK;
+
+#if defined(_MSC_VER) || defined(__ILEC400__)
+# pragma pack(pop)
+#endif
+
/* Local API functions */
static CURLcode smb_setup_connection(struct Curl_easy *data,
struct connectdata *conn);
@@ -62,8 +248,6 @@ static CURLcode smb_connect(struct Curl_easy *data, bool *done);
static CURLcode smb_connection_state(struct Curl_easy *data, bool *done);
static CURLcode smb_do(struct Curl_easy *data, bool *done);
static CURLcode smb_request_state(struct Curl_easy *data, bool *done);
-static CURLcode smb_done(struct Curl_easy *data, CURLcode status,
- bool premature);
static CURLcode smb_disconnect(struct Curl_easy *data,
struct connectdata *conn, bool dead);
static int smb_getsock(struct Curl_easy *data, struct connectdata *conn,
@@ -78,7 +262,7 @@ const struct Curl_handler Curl_handler_smb = {
"SMB", /* scheme */
smb_setup_connection, /* setup_connection */
smb_do, /* do_it */
- smb_done, /* done */
+ ZERO_NULL, /* done */
ZERO_NULL, /* do_more */
smb_connect, /* connect_it */
smb_connection_state, /* connecting */
@@ -105,7 +289,7 @@ const struct Curl_handler Curl_handler_smbs = {
"SMBS", /* scheme */
smb_setup_connection, /* setup_connection */
smb_do, /* do_it */
- smb_done, /* done */
+ ZERO_NULL, /* done */
ZERO_NULL, /* do_more */
smb_connect, /* connect_it */
smb_connection_state, /* connecting */
@@ -380,12 +564,11 @@ static CURLcode smb_send(struct Curl_easy *data, ssize_t len,
size_t upload_size)
{
struct connectdata *conn = data->conn;
- curl_socket_t sockfd = conn->sock[FIRSTSOCKET];
struct smb_conn *smbc = &conn->proto.smbc;
ssize_t bytes_written;
CURLcode result;
- result = Curl_write(data, sockfd, data->state.ulbuf,
+ result = Curl_nwrite(data, FIRSTSOCKET, data->state.ulbuf,
len, &bytes_written);
if(result)
return result;
@@ -403,7 +586,6 @@ static CURLcode smb_send(struct Curl_easy *data, ssize_t len,
static CURLcode smb_flush(struct Curl_easy *data)
{
struct connectdata *conn = data->conn;
- curl_socket_t sockfd = conn->sock[FIRSTSOCKET];
struct smb_conn *smbc = &conn->proto.smbc;
ssize_t bytes_written;
ssize_t len = smbc->send_size - smbc->sent;
@@ -412,9 +594,9 @@ static CURLcode smb_flush(struct Curl_easy *data)
if(!smbc->send_size)
return CURLE_OK;
- result = Curl_write(data, sockfd,
- data->state.ulbuf + smbc->sent,
- len, &bytes_written);
+ result = Curl_nwrite(data, FIRSTSOCKET,
+ data->state.ulbuf + smbc->sent,
+ len, &bytes_written);
if(result)
return result;
@@ -537,7 +719,7 @@ static CURLcode smb_send_open(struct Curl_easy *data)
byte_count = strlen(req->path);
msg.name_length = smb_swap16((unsigned short)byte_count);
msg.share_access = smb_swap32(SMB_FILE_SHARE_ALL);
- if(data->set.upload) {
+ if(data->state.upload) {
msg.access = smb_swap32(SMB_GENERIC_READ | SMB_GENERIC_WRITE);
msg.create_disposition = smb_swap32(SMB_FILE_OVERWRITE_IF);
}
@@ -671,8 +853,7 @@ static CURLcode smb_connection_state(struct Curl_easy *data, bool *done)
#ifdef USE_SSL
if((conn->handler->flags & PROTOPT_SSL)) {
bool ssl_done = FALSE;
- result = Curl_ssl_connect_nonblocking(data, conn, FALSE,
- FIRSTSOCKET, &ssl_done);
+ result = Curl_conn_connect(data, FIRSTSOCKET, FALSE, &ssl_done);
if(result && result != CURLE_AGAIN)
return result;
if(!ssl_done)
@@ -770,6 +951,11 @@ static CURLcode smb_request_state(struct Curl_easy *data, bool *done)
void *msg = NULL;
const struct smb_nt_create_response *smb_m;
+ if(data->state.upload && (data->state.infilesize < 0)) {
+ failf(data, "SMB upload needs to know the size up front");
+ return CURLE_SEND_ERROR;
+ }
+
/* Start the request */
if(req->state == SMB_REQUESTING) {
result = smb_send_tree_connect(data);
@@ -816,13 +1002,12 @@ static CURLcode smb_request_state(struct Curl_easy *data, bool *done)
smb_m = (const struct smb_nt_create_response*) msg;
req->fid = smb_swap16(smb_m->fid);
data->req.offset = 0;
- if(data->set.upload) {
+ if(data->state.upload) {
data->req.size = data->state.infilesize;
Curl_pgrsSetUploadSize(data, data->req.size);
next_state = SMB_UPLOAD;
}
else {
- smb_m = (const struct smb_nt_create_response*) msg;
data->req.size = smb_swap64(smb_m->end_of_file);
if(data->req.size < 0) {
req->result = CURLE_WEIRD_SERVER_REPLY;
@@ -862,9 +1047,7 @@ static CURLcode smb_request_state(struct Curl_easy *data, bool *done)
break;
}
}
- data->req.bytecount += len;
data->req.offset += len;
- Curl_pgrsSetDownloadCounter(data, data->req.bytecount);
next_state = (len < MAX_PAYLOAD_SIZE) ? SMB_CLOSE : SMB_DOWNLOAD;
break;
@@ -941,14 +1124,6 @@ static CURLcode smb_request_state(struct Curl_easy *data, bool *done)
return CURLE_OK;
}
-static CURLcode smb_done(struct Curl_easy *data, CURLcode status,
- bool premature)
-{
- (void) premature;
- Curl_safefree(data->req.p.smb);
- return status;
-}
-
static CURLcode smb_disconnect(struct Curl_easy *data,
struct connectdata *conn, bool dead)
{
@@ -1008,6 +1183,7 @@ static CURLcode smb_parse_url_path(struct Curl_easy *data,
/* The share must be present */
if(!slash) {
Curl_safefree(smbc->share);
+ failf(data, "missing share in URL path for SMB");
return CURLE_URL_MALFORMAT;
}
diff --git a/lib/smb.h b/lib/smb.h
index 919f3ac14..437f4a58a 100644
--- a/lib/smb.h
+++ b/lib/smb.h
@@ -7,8 +7,8 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2018, Bill Nagel <wnagel@tycoint.com>, Exacq Technologies
- * Copyright (C) 2018 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Bill Nagel <wnagel@tycoint.com>, Exacq Technologies
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -48,203 +48,6 @@ struct smb_conn {
size_t got;
};
-/*
- * Definitions for SMB protocol data structures
- */
-#ifdef BUILDING_CURL_SMB_C
-
-#if defined(_MSC_VER) || defined(__ILEC400__)
-# define PACK
-# pragma pack(push)
-# pragma pack(1)
-#elif defined(__GNUC__)
-# define PACK __attribute__((packed))
-#else
-# define PACK
-#endif
-
-#define SMB_COM_CLOSE 0x04
-#define SMB_COM_READ_ANDX 0x2e
-#define SMB_COM_WRITE_ANDX 0x2f
-#define SMB_COM_TREE_DISCONNECT 0x71
-#define SMB_COM_NEGOTIATE 0x72
-#define SMB_COM_SETUP_ANDX 0x73
-#define SMB_COM_TREE_CONNECT_ANDX 0x75
-#define SMB_COM_NT_CREATE_ANDX 0xa2
-#define SMB_COM_NO_ANDX_COMMAND 0xff
-
-#define SMB_WC_CLOSE 0x03
-#define SMB_WC_READ_ANDX 0x0c
-#define SMB_WC_WRITE_ANDX 0x0e
-#define SMB_WC_SETUP_ANDX 0x0d
-#define SMB_WC_TREE_CONNECT_ANDX 0x04
-#define SMB_WC_NT_CREATE_ANDX 0x18
-
-#define SMB_FLAGS_CANONICAL_PATHNAMES 0x10
-#define SMB_FLAGS_CASELESS_PATHNAMES 0x08
-#define SMB_FLAGS2_UNICODE_STRINGS 0x8000
-#define SMB_FLAGS2_IS_LONG_NAME 0x0040
-#define SMB_FLAGS2_KNOWS_LONG_NAME 0x0001
-
-#define SMB_CAP_LARGE_FILES 0x08
-#define SMB_GENERIC_WRITE 0x40000000
-#define SMB_GENERIC_READ 0x80000000
-#define SMB_FILE_SHARE_ALL 0x07
-#define SMB_FILE_OPEN 0x01
-#define SMB_FILE_OVERWRITE_IF 0x05
-
-#define SMB_ERR_NOACCESS 0x00050001
-
-struct smb_header {
- unsigned char nbt_type;
- unsigned char nbt_flags;
- unsigned short nbt_length;
- unsigned char magic[4];
- unsigned char command;
- unsigned int status;
- unsigned char flags;
- unsigned short flags2;
- unsigned short pid_high;
- unsigned char signature[8];
- unsigned short pad;
- unsigned short tid;
- unsigned short pid;
- unsigned short uid;
- unsigned short mid;
-} PACK;
-
-struct smb_negotiate_response {
- struct smb_header h;
- unsigned char word_count;
- unsigned short dialect_index;
- unsigned char security_mode;
- unsigned short max_mpx_count;
- unsigned short max_number_vcs;
- unsigned int max_buffer_size;
- unsigned int max_raw_size;
- unsigned int session_key;
- unsigned int capabilities;
- unsigned int system_time_low;
- unsigned int system_time_high;
- unsigned short server_time_zone;
- unsigned char encryption_key_length;
- unsigned short byte_count;
- char bytes[1];
-} PACK;
-
-struct andx {
- unsigned char command;
- unsigned char pad;
- unsigned short offset;
-} PACK;
-
-struct smb_setup {
- unsigned char word_count;
- struct andx andx;
- unsigned short max_buffer_size;
- unsigned short max_mpx_count;
- unsigned short vc_number;
- unsigned int session_key;
- unsigned short lengths[2];
- unsigned int pad;
- unsigned int capabilities;
- unsigned short byte_count;
- char bytes[1024];
-} PACK;
-
-struct smb_tree_connect {
- unsigned char word_count;
- struct andx andx;
- unsigned short flags;
- unsigned short pw_len;
- unsigned short byte_count;
- char bytes[1024];
-} PACK;
-
-struct smb_nt_create {
- unsigned char word_count;
- struct andx andx;
- unsigned char pad;
- unsigned short name_length;
- unsigned int flags;
- unsigned int root_fid;
- unsigned int access;
- curl_off_t allocation_size;
- unsigned int ext_file_attributes;
- unsigned int share_access;
- unsigned int create_disposition;
- unsigned int create_options;
- unsigned int impersonation_level;
- unsigned char security_flags;
- unsigned short byte_count;
- char bytes[1024];
-} PACK;
-
-struct smb_nt_create_response {
- struct smb_header h;
- unsigned char word_count;
- struct andx andx;
- unsigned char op_lock_level;
- unsigned short fid;
- unsigned int create_disposition;
-
- curl_off_t create_time;
- curl_off_t last_access_time;
- curl_off_t last_write_time;
- curl_off_t last_change_time;
- unsigned int ext_file_attributes;
- curl_off_t allocation_size;
- curl_off_t end_of_file;
-} PACK;
-
-struct smb_read {
- unsigned char word_count;
- struct andx andx;
- unsigned short fid;
- unsigned int offset;
- unsigned short max_bytes;
- unsigned short min_bytes;
- unsigned int timeout;
- unsigned short remaining;
- unsigned int offset_high;
- unsigned short byte_count;
-} PACK;
-
-struct smb_write {
- struct smb_header h;
- unsigned char word_count;
- struct andx andx;
- unsigned short fid;
- unsigned int offset;
- unsigned int timeout;
- unsigned short write_mode;
- unsigned short remaining;
- unsigned short pad;
- unsigned short data_length;
- unsigned short data_offset;
- unsigned int offset_high;
- unsigned short byte_count;
- unsigned char pad2;
-} PACK;
-
-struct smb_close {
- unsigned char word_count;
- unsigned short fid;
- unsigned int last_mtime;
- unsigned short byte_count;
-} PACK;
-
-struct smb_tree_disconnect {
- unsigned char word_count;
- unsigned short byte_count;
-} PACK;
-
-#if defined(_MSC_VER) || defined(__ILEC400__)
-# pragma pack(pop)
-#endif
-
-#endif /* BUILDING_CURL_SMB_C */
-
#if !defined(CURL_DISABLE_SMB) && defined(USE_CURL_NTLM_CORE) && \
(SIZEOF_CURL_OFF_T > 4)
diff --git a/lib/smtp.c b/lib/smtp.c
index 6ebb41af6..65fbc5b6c 100644
--- a/lib/smtp.c
+++ b/lib/smtp.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -49,9 +49,6 @@
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
-#ifdef HAVE_UTSNAME_H
-#include <sys/utsname.h>
-#endif
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
@@ -60,11 +57,6 @@
#include <inet.h>
#endif
-#if (defined(NETWARE) && defined(__NOVELL_LIBC__))
-#undef in_addr_t
-#define in_addr_t unsigned long
-#endif
-
#include <curl/curl.h>
#include "urldata.h"
#include "sendf.h"
@@ -79,6 +71,7 @@
#include "strtoofft.h"
#include "strcase.h"
#include "vtls/vtls.h"
+#include "cfilters.h"
#include "connect.h"
#include "select.h"
#include "multiif.h"
@@ -87,6 +80,7 @@
#include "bufref.h"
#include "curl_sasl.h"
#include "warnless.h"
+#include "idn.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
@@ -109,7 +103,7 @@ static CURLcode smtp_setup_connection(struct Curl_easy *data,
static CURLcode smtp_parse_url_options(struct connectdata *conn);
static CURLcode smtp_parse_url_path(struct Curl_easy *data);
static CURLcode smtp_parse_custom_request(struct Curl_easy *data);
-static CURLcode smtp_parse_address(struct Curl_easy *data, const char *fqma,
+static CURLcode smtp_parse_address(const char *fqma,
char **address, struct hostname *host);
static CURLcode smtp_perform_auth(struct Curl_easy *data, const char *mech,
const struct bufref *initresp);
@@ -284,11 +278,11 @@ static CURLcode smtp_get_message(struct Curl_easy *data, struct bufref *out)
/***********************************************************************
*
- * state()
+ * smtp_state()
*
* This is the ONLY way to change SMTP state!
*/
-static void state(struct Curl_easy *data, smtpstate newstate)
+static void smtp_state(struct Curl_easy *data, smtpstate newstate)
{
struct smtp_conn *smtpc = &data->conn->proto.smtpc;
#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
@@ -341,7 +335,7 @@ static CURLcode smtp_perform_ehlo(struct Curl_easy *data)
result = Curl_pp_sendf(data, &smtpc->pp, "EHLO %s", smtpc->domain);
if(!result)
- state(data, SMTP_EHLO);
+ smtp_state(data, SMTP_EHLO);
return result;
}
@@ -365,7 +359,7 @@ static CURLcode smtp_perform_helo(struct Curl_easy *data,
result = Curl_pp_sendf(data, &smtpc->pp, "HELO %s", smtpc->domain);
if(!result)
- state(data, SMTP_HELO);
+ smtp_state(data, SMTP_HELO);
return result;
}
@@ -384,7 +378,7 @@ static CURLcode smtp_perform_starttls(struct Curl_easy *data,
"%s", "STARTTLS");
if(!result)
- state(data, SMTP_STARTTLS);
+ smtp_state(data, SMTP_STARTTLS);
return result;
}
@@ -400,20 +394,27 @@ static CURLcode smtp_perform_upgrade_tls(struct Curl_easy *data)
/* Start the SSL connection */
struct connectdata *conn = data->conn;
struct smtp_conn *smtpc = &conn->proto.smtpc;
- CURLcode result = Curl_ssl_connect_nonblocking(data, conn, FALSE,
- FIRSTSOCKET,
- &smtpc->ssldone);
+ CURLcode result;
+ bool ssldone = FALSE;
+ if(!Curl_conn_is_ssl(conn, FIRSTSOCKET)) {
+ result = Curl_ssl_cfilter_add(data, conn, FIRSTSOCKET);
+ if(result)
+ goto out;
+ }
+
+ result = Curl_conn_connect(data, FIRSTSOCKET, FALSE, &ssldone);
if(!result) {
+ smtpc->ssldone = ssldone;
if(smtpc->state != SMTP_UPGRADETLS)
- state(data, SMTP_UPGRADETLS);
+ smtp_state(data, SMTP_UPGRADETLS);
if(smtpc->ssldone) {
smtp_to_smtps(conn);
result = smtp_perform_ehlo(data);
}
}
-
+out:
return result;
}
@@ -495,7 +496,7 @@ static CURLcode smtp_perform_authentication(struct Curl_easy *data)
server supports authentication, and end the connect phase if not */
if(!smtpc->auth_supported ||
!Curl_sasl_can_authenticate(&smtpc->sasl, data)) {
- state(data, SMTP_STOP);
+ smtp_state(data, SMTP_STOP);
return result;
}
@@ -504,7 +505,7 @@ static CURLcode smtp_perform_authentication(struct Curl_easy *data)
if(!result) {
if(progress == SASL_INPROGRESS)
- state(data, SMTP_AUTH);
+ smtp_state(data, SMTP_AUTH);
else {
/* Other mechanisms not supported */
infof(data, "No known authentication mechanisms supported");
@@ -540,7 +541,7 @@ static CURLcode smtp_perform_command(struct Curl_easy *data)
/* Parse the mailbox to verify into the local address and host name
parts, converting the host name to an IDN A-label if necessary */
- result = smtp_parse_address(data, smtp->rcpt->data,
+ result = smtp_parse_address(smtp->rcpt->data,
&address, &host);
if(result)
return result;
@@ -582,7 +583,7 @@ static CURLcode smtp_perform_command(struct Curl_easy *data)
smtp->custom : "HELP");
if(!result)
- state(data, SMTP_COMMAND);
+ smtp_state(data, SMTP_COMMAND);
return result;
}
@@ -614,7 +615,7 @@ static CURLcode smtp_perform_mail(struct Curl_easy *data)
/* Parse the FROM mailbox into the local address and host name parts,
converting the host name to an IDN A-label if necessary */
- result = smtp_parse_address(data, data->set.str[STRING_MAIL_FROM],
+ result = smtp_parse_address(data->set.str[STRING_MAIL_FROM],
&address, &host);
if(result)
return result;
@@ -652,7 +653,7 @@ static CURLcode smtp_perform_mail(struct Curl_easy *data)
/* Parse the AUTH mailbox into the local address and host name parts,
converting the host name to an IDN A-label if necessary */
- result = smtp_parse_address(data, data->set.str[STRING_MAIL_AUTH],
+ result = smtp_parse_address(data->set.str[STRING_MAIL_AUTH],
&address, &host);
if(result) {
free(from);
@@ -696,7 +697,7 @@ static CURLcode smtp_perform_mail(struct Curl_easy *data)
/* Add external headers and mime version. */
curl_mime_headers(&data->set.mimepost, data->set.headers, 0);
- result = Curl_mime_prepare_headers(&data->set.mimepost, NULL,
+ result = Curl_mime_prepare_headers(data, &data->set.mimepost, NULL,
NULL, MIMESTRATEGY_MAIL);
if(!result)
@@ -767,7 +768,7 @@ static CURLcode smtp_perform_mail(struct Curl_easy *data)
free(size);
if(!result)
- state(data, SMTP_MAIL);
+ smtp_state(data, SMTP_MAIL);
return result;
}
@@ -789,7 +790,7 @@ static CURLcode smtp_perform_rcpt_to(struct Curl_easy *data)
/* Parse the recipient mailbox into the local address and host name parts,
converting the host name to an IDN A-label if necessary */
- result = smtp_parse_address(data, smtp->rcpt->data,
+ result = smtp_parse_address(smtp->rcpt->data,
&address, &host);
if(result)
return result;
@@ -808,7 +809,7 @@ static CURLcode smtp_perform_rcpt_to(struct Curl_easy *data)
free(address);
if(!result)
- state(data, SMTP_RCPT);
+ smtp_state(data, SMTP_RCPT);
return result;
}
@@ -826,7 +827,7 @@ static CURLcode smtp_perform_quit(struct Curl_easy *data,
CURLcode result = Curl_pp_sendf(data, &conn->proto.smtpc.pp, "%s", "QUIT");
if(!result)
- state(data, SMTP_QUIT);
+ smtp_state(data, SMTP_QUIT);
return result;
}
@@ -888,7 +889,8 @@ static CURLcode smtp_state_ehlo_resp(struct Curl_easy *data,
(void)instate; /* no use for this yet */
if(smtpcode/100 != 2 && smtpcode != 1) {
- if(data->set.use_ssl <= CURLUSESSL_TRY || conn->ssl[FIRSTSOCKET].use)
+ if(data->set.use_ssl <= CURLUSESSL_TRY
+ || Curl_conn_is_ssl(conn, FIRSTSOCKET))
result = smtp_perform_helo(data, conn);
else {
failf(data, "Remote access denied: %d", smtpcode);
@@ -953,7 +955,7 @@ static CURLcode smtp_state_ehlo_resp(struct Curl_easy *data,
}
if(smtpcode != 1) {
- if(data->set.use_ssl && !conn->ssl[FIRSTSOCKET].use) {
+ if(data->set.use_ssl && !Curl_conn_is_ssl(conn, FIRSTSOCKET)) {
/* We don't have a SSL/TLS connection yet, but SSL is requested */
if(smtpc->tls_supported)
/* Switch to TLS connection now */
@@ -991,7 +993,7 @@ static CURLcode smtp_state_helo_resp(struct Curl_easy *data, int smtpcode,
}
else
/* End of connect phase */
- state(data, SMTP_STOP);
+ smtp_state(data, SMTP_STOP);
return result;
}
@@ -1012,7 +1014,7 @@ static CURLcode smtp_state_auth_resp(struct Curl_easy *data,
if(!result)
switch(progress) {
case SASL_DONE:
- state(data, SMTP_STOP); /* Authenticated */
+ smtp_state(data, SMTP_STOP); /* Authenticated */
break;
case SASL_IDLE: /* No mechanism left after cancellation */
failf(data, "Authentication cancelled");
@@ -1043,7 +1045,7 @@ static CURLcode smtp_state_command_resp(struct Curl_easy *data, int smtpcode,
}
else {
/* Temporarily add the LF character back and send as body to the client */
- if(!data->set.opt_no_body) {
+ if(!data->req.no_body) {
line[len] = '\n';
result = Curl_client_write(data, CLIENTWRITE_BODY, line, len + 1);
line[len] = '\0';
@@ -1059,11 +1061,11 @@ static CURLcode smtp_state_command_resp(struct Curl_easy *data, int smtpcode,
}
else
/* End of DO phase */
- state(data, SMTP_STOP);
+ smtp_state(data, SMTP_STOP);
}
else
/* End of DO phase */
- state(data, SMTP_STOP);
+ smtp_state(data, SMTP_STOP);
}
}
@@ -1140,7 +1142,7 @@ static CURLcode smtp_state_rcpt_resp(struct Curl_easy *data,
result = Curl_pp_sendf(data, &conn->proto.smtpc.pp, "%s", "DATA");
if(!result)
- state(data, SMTP_DATA);
+ smtp_state(data, SMTP_DATA);
}
}
}
@@ -1167,7 +1169,7 @@ static CURLcode smtp_state_data_resp(struct Curl_easy *data, int smtpcode,
Curl_setup_transfer(data, -1, -1, FALSE, FIRSTSOCKET);
/* End of DO phase */
- state(data, SMTP_STOP);
+ smtp_state(data, SMTP_STOP);
}
return result;
@@ -1187,7 +1189,7 @@ static CURLcode smtp_state_postdata_resp(struct Curl_easy *data,
result = CURLE_WEIRD_SERVER_REPLY;
/* End of DONE phase */
- state(data, SMTP_STOP);
+ smtp_state(data, SMTP_STOP);
return result;
}
@@ -1269,7 +1271,7 @@ static CURLcode smtp_statemachine(struct Curl_easy *data,
/* fallthrough, just stop! */
default:
/* internal error */
- state(data, SMTP_STOP);
+ smtp_state(data, SMTP_STOP);
break;
}
} while(!result && smtpc->state != SMTP_STOP && Curl_pp_moredata(pp));
@@ -1285,8 +1287,9 @@ static CURLcode smtp_multi_statemach(struct Curl_easy *data, bool *done)
struct smtp_conn *smtpc = &conn->proto.smtpc;
if((conn->handler->flags & PROTOPT_SSL) && !smtpc->ssldone) {
- result = Curl_ssl_connect_nonblocking(data, conn, FALSE,
- FIRSTSOCKET, &smtpc->ssldone);
+ bool ssldone = FALSE;
+ result = Curl_conn_connect(data, FIRSTSOCKET, FALSE, &ssldone);
+ smtpc->ssldone = ssldone;
if(result || !smtpc->ssldone)
return result;
}
@@ -1317,7 +1320,7 @@ static CURLcode smtp_init(struct Curl_easy *data)
CURLcode result = CURLE_OK;
struct SMTP *smtp;
- smtp = data->req.p.smtp = calloc(sizeof(struct SMTP), 1);
+ smtp = data->req.p.smtp = calloc(1, sizeof(struct SMTP));
if(!smtp)
result = CURLE_OUT_OF_MEMORY;
@@ -1373,7 +1376,7 @@ static CURLcode smtp_connect(struct Curl_easy *data, bool *done)
return result;
/* Start off waiting for the server greeting response */
- state(data, SMTP_SERVERGREET);
+ smtp_state(data, SMTP_SERVERGREET);
result = smtp_multi_statemach(data, done);
@@ -1413,7 +1416,7 @@ static CURLcode smtp_done(struct Curl_easy *data, CURLcode status,
result = status; /* use the already set error code */
}
else if(!data->set.connect_only && data->set.mail_rcpt &&
- (data->set.upload || data->set.mimepost.kind)) {
+ (data->state.upload || data->set.mimepost.kind)) {
/* Calculate the EOB taking into account any terminating CRLF from the
previous line of the email or the CRLF of the DATA command when there
is "no mail data". RFC-5321, sect. 4.1.1.4.
@@ -1455,7 +1458,7 @@ static CURLcode smtp_done(struct Curl_easy *data, CURLcode status,
free(eob);
}
- state(data, SMTP_POSTDATA);
+ smtp_state(data, SMTP_POSTDATA);
/* Run the state-machine */
result = smtp_block_statemach(data, conn, FALSE);
@@ -1479,12 +1482,11 @@ static CURLcode smtp_perform(struct Curl_easy *data, bool *connected,
{
/* This is SMTP and no proxy */
CURLcode result = CURLE_OK;
- struct connectdata *conn = data->conn;
struct SMTP *smtp = data->req.p.smtp;
DEBUGF(infof(data, "DO phase starts"));
- if(data->set.opt_no_body) {
+ if(data->req.no_body) {
/* Requested no body means no transfer */
smtp->transfer = PPTRANSFER_INFO;
}
@@ -1506,7 +1508,7 @@ static CURLcode smtp_perform(struct Curl_easy *data, bool *connected,
smtp->eob = 2;
/* Start the first command in the DO phase */
- if((data->set.upload || data->set.mimepost.kind) && data->set.mail_rcpt)
+ if((data->state.upload || data->set.mimepost.kind) && data->set.mail_rcpt)
/* MAIL transfer */
result = smtp_perform_mail(data);
else
@@ -1519,7 +1521,7 @@ static CURLcode smtp_perform(struct Curl_easy *data, bool *connected,
/* Run the state-machine */
result = smtp_multi_statemach(data, dophase_done);
- *connected = conn->bits.tcpconnect[FIRSTSOCKET];
+ *connected = Curl_conn_is_connected(data->conn, FIRSTSOCKET);
if(*dophase_done)
DEBUGF(infof(data, "DO phase is complete"));
@@ -1782,8 +1784,8 @@ static CURLcode smtp_parse_custom_request(struct Curl_easy *data)
* calling function deems it to be) then the input will simply be returned in
* the address part with the host name being NULL.
*/
-static CURLcode smtp_parse_address(struct Curl_easy *data, const char *fqma,
- char **address, struct hostname *host)
+static CURLcode smtp_parse_address(const char *fqma, char **address,
+ struct hostname *host)
{
CURLcode result = CURLE_OK;
size_t length;
@@ -1807,7 +1809,7 @@ static CURLcode smtp_parse_address(struct Curl_easy *data, const char *fqma,
host->name = host->name + 1;
/* Attempt to convert the host name to IDN ACE */
- (void) Curl_idnconvert_hostname(data, host);
+ (void) Curl_idnconvert_hostname(host);
/* If Curl_idnconvert_hostname() fails then we shall attempt to continue
and send the host name using UTF-8 rather than as 7-bit ACE (which is
diff --git a/lib/smtp.h b/lib/smtp.h
index 24c5589e4..7a04c2154 100644
--- a/lib/smtp.h
+++ b/lib/smtp.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2009 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -57,28 +57,28 @@ struct SMTP {
curl_pp_transfer transfer;
char *custom; /* Custom Request */
struct curl_slist *rcpt; /* Recipient list */
- bool rcpt_had_ok; /* Whether any of RCPT TO commands (depends on
- total number of recipients) succeeded so far */
- bool trailing_crlf; /* Specifies if the trailing CRLF is present */
int rcpt_last_error; /* The last error received for RCPT TO command */
size_t eob; /* Number of bytes of the EOB (End Of Body) that
have been received so far */
+ BIT(rcpt_had_ok); /* Whether any of RCPT TO commands (depends on
+ total number of recipients) succeeded so far */
+ BIT(trailing_crlf); /* Specifies if the trailing CRLF is present */
};
/* smtp_conn is used for struct connection-oriented data in the connectdata
struct */
struct smtp_conn {
struct pingpong pp;
+ struct SASL sasl; /* SASL-related storage */
smtpstate state; /* Always use smtp.c:state() to change state! */
- bool ssldone; /* Is connect() over SSL done? */
char *domain; /* Client address/name to send in the EHLO */
- struct SASL sasl; /* SASL-related storage */
- bool tls_supported; /* StartTLS capability supported by server */
- bool size_supported; /* If server supports SIZE extension according to
+ BIT(ssldone); /* Is connect() over SSL done? */
+ BIT(tls_supported); /* StartTLS capability supported by server */
+ BIT(size_supported); /* If server supports SIZE extension according to
RFC 1870 */
- bool utf8_supported; /* If server supports SMTPUTF8 extension according
+ BIT(utf8_supported); /* If server supports SMTPUTF8 extension according
to RFC 6531 */
- bool auth_supported; /* AUTH capability supported by server */
+ BIT(auth_supported); /* AUTH capability supported by server */
};
extern const struct Curl_handler Curl_handler_smtp;
diff --git a/lib/sockaddr.h b/lib/sockaddr.h
index 77ec833ee..5a6bb207d 100644
--- a/lib/sockaddr.h
+++ b/lib/sockaddr.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/socketpair.c b/lib/socketpair.c
index 0f8798f08..e3d40ff94 100644
--- a/lib/socketpair.c
+++ b/lib/socketpair.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2019 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,9 +24,11 @@
#include "curl_setup.h"
#include "socketpair.h"
+#include "urldata.h"
+#include "rand.h"
#if !defined(HAVE_SOCKETPAIR) && !defined(CURL_DISABLE_SOCKETPAIR)
-#ifdef WIN32
+#ifdef _WIN32
/*
* This is a socketpair() implementation for Windows.
*/
@@ -48,7 +50,7 @@
#ifndef INADDR_LOOPBACK
#define INADDR_LOOPBACK 0x7f000001
#endif /* !INADDR_LOOPBACK */
-#endif /* !WIN32 */
+#endif /* !_WIN32 */
#include "nonblock.h" /* for curlx_nonblock */
#include "timeval.h" /* needed before select.h */
@@ -65,7 +67,7 @@ int Curl_socketpair(int domain, int type, int protocol,
union {
struct sockaddr_in inaddr;
struct sockaddr addr;
- } a, a2;
+ } a;
curl_socket_t listener;
curl_socklen_t addrlen = sizeof(a.inaddr);
int reuse = 1;
@@ -85,9 +87,22 @@ int Curl_socketpair(int domain, int type, int protocol,
socks[0] = socks[1] = CURL_SOCKET_BAD;
+#if defined(_WIN32) || defined(__CYGWIN__)
+ /* don't set SO_REUSEADDR on Windows */
+ (void)reuse;
+#ifdef SO_EXCLUSIVEADDRUSE
+ {
+ int exclusive = 1;
+ if(setsockopt(listener, SOL_SOCKET, SO_EXCLUSIVEADDRUSE,
+ (char *)&exclusive, (curl_socklen_t)sizeof(exclusive)) == -1)
+ goto error;
+ }
+#endif
+#else
if(setsockopt(listener, SOL_SOCKET, SO_REUSEADDR,
(char *)&reuse, (curl_socklen_t)sizeof(reuse)) == -1)
goto error;
+#endif
if(bind(listener, &a.addr, sizeof(a.inaddr)) == -1)
goto error;
if(getsockname(listener, &a.addr, &addrlen) == -1 ||
@@ -107,29 +122,68 @@ int Curl_socketpair(int domain, int type, int protocol,
pfd[0].fd = listener;
pfd[0].events = POLLIN;
pfd[0].revents = 0;
- (void)Curl_poll(pfd, 1, 10*1000); /* 10 seconds */
+ (void)Curl_poll(pfd, 1, 1000); /* one second */
socks[1] = accept(listener, NULL, NULL);
if(socks[1] == CURL_SOCKET_BAD)
goto error;
+ else {
+ struct curltime start = Curl_now();
+ char rnd[9];
+ char check[sizeof(rnd)];
+ char *p = &check[0];
+ size_t s = sizeof(check);
- /* verify that nothing else connected */
- addrlen = sizeof(a.inaddr);
- if(getsockname(socks[0], &a.addr, &addrlen) == -1 ||
- addrlen < (int)sizeof(a.inaddr))
- goto error;
- addrlen = sizeof(a2.inaddr);
- if(getpeername(socks[1], &a2.addr, &addrlen) == -1 ||
- addrlen < (int)sizeof(a2.inaddr))
- goto error;
- if(a.inaddr.sin_family != a2.inaddr.sin_family ||
- a.inaddr.sin_addr.s_addr != a2.inaddr.sin_addr.s_addr ||
- a.inaddr.sin_port != a2.inaddr.sin_port)
- goto error;
+ if(Curl_rand(NULL, (unsigned char *)rnd, sizeof(rnd)))
+ goto error;
+
+ /* write data to the socket */
+ swrite(socks[0], rnd, sizeof(rnd));
+ /* verify that we read the correct data */
+ do {
+ ssize_t nread;
+
+ pfd[0].fd = socks[1];
+ pfd[0].events = POLLIN;
+ pfd[0].revents = 0;
+ (void)Curl_poll(pfd, 1, 1000); /* one second */
+
+ nread = sread(socks[1], p, s);
+ if(nread == -1) {
+ int sockerr = SOCKERRNO;
+ /* Don't block forever */
+ if(Curl_timediff(Curl_now(), start) > (60 * 1000))
+ goto error;
+ if(
+#ifdef WSAEWOULDBLOCK
+ /* This is how Windows does it */
+ (WSAEWOULDBLOCK == sockerr)
+#else
+ /* errno may be EWOULDBLOCK or on some systems EAGAIN when it
+ returned due to its inability to send off data without
+ blocking. We therefore treat both error codes the same here */
+ (EWOULDBLOCK == sockerr) || (EAGAIN == sockerr) ||
+ (EINTR == sockerr) || (EINPROGRESS == sockerr)
+#endif
+ ) {
+ continue;
+ }
+ goto error;
+ }
+ s -= nread;
+ if(s) {
+ p += nread;
+ continue;
+ }
+ if(memcmp(rnd, check, sizeof(check)))
+ goto error;
+ break;
+ } while(1);
+ }
sclose(listener);
return 0;
- error:
+error:
sclose(listener);
sclose(socks[0]);
sclose(socks[1]);
diff --git a/lib/socketpair.h b/lib/socketpair.h
index de70df673..bd499abbe 100644
--- a/lib/socketpair.h
+++ b/lib/socketpair.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2019 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -25,6 +25,23 @@
***************************************************************************/
#include "curl_setup.h"
+
+#ifdef HAVE_PIPE
+
+#define wakeup_write write
+#define wakeup_read read
+#define wakeup_close close
+#define wakeup_create pipe
+
+#else /* HAVE_PIPE */
+
+#define wakeup_write swrite
+#define wakeup_read sread
+#define wakeup_close sclose
+#define wakeup_create(p) Curl_socketpair(AF_UNIX, SOCK_STREAM, 0, p)
+
+#endif /* HAVE_PIPE */
+
#ifndef HAVE_SOCKETPAIR
#include <curl/curl.h>
diff --git a/lib/socks.c b/lib/socks.c
index 52c29880a..3a396de62 100644
--- a/lib/socks.c
+++ b/lib/socks.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -36,17 +36,52 @@
#include "urldata.h"
#include "sendf.h"
#include "select.h"
+#include "cfilters.h"
#include "connect.h"
#include "timeval.h"
#include "socks.h"
#include "multiif.h" /* for getsock macros */
#include "inet_pton.h"
+#include "url.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"
+/* for the (SOCKS) connect state machine */
+enum connect_t {
+ CONNECT_INIT,
+ CONNECT_SOCKS_INIT, /* 1 */
+ CONNECT_SOCKS_SEND, /* 2 waiting to send more first data */
+ CONNECT_SOCKS_READ_INIT, /* 3 set up read */
+ CONNECT_SOCKS_READ, /* 4 read server response */
+ CONNECT_GSSAPI_INIT, /* 5 */
+ CONNECT_AUTH_INIT, /* 6 setup outgoing auth buffer */
+ CONNECT_AUTH_SEND, /* 7 send auth */
+ CONNECT_AUTH_READ, /* 8 read auth response */
+ CONNECT_REQ_INIT, /* 9 init SOCKS "request" */
+ CONNECT_RESOLVING, /* 10 */
+ CONNECT_RESOLVED, /* 11 */
+ CONNECT_RESOLVE_REMOTE, /* 12 */
+ CONNECT_REQ_SEND, /* 13 */
+ CONNECT_REQ_SENDING, /* 14 */
+ CONNECT_REQ_READ, /* 15 */
+ CONNECT_REQ_READ_MORE, /* 16 */
+ CONNECT_DONE /* 17 connected fine to the remote or the SOCKS proxy */
+};
+
+struct socks_state {
+ enum connect_t state;
+ ssize_t outstanding; /* send this many bytes more */
+ unsigned char *outp; /* send from this pointer */
+
+ const char *hostname;
+ int remote_port;
+ const char *proxy_user;
+ const char *proxy_password;
+};
+
#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
/*
* Helper read-from-socket functions. Does the same as Curl_read() but it
@@ -54,8 +89,8 @@
*
* This is STUPID BLOCKING behavior. Only used by the SOCKS GSSAPI functions.
*/
-int Curl_blockread_all(struct Curl_easy *data, /* transfer */
- curl_socket_t sockfd, /* read from this socket */
+int Curl_blockread_all(struct Curl_cfilter *cf,
+ struct Curl_easy *data, /* transfer */
char *buf, /* store read data here */
ssize_t buffersize, /* max amount to read */
ssize_t *n) /* amount bytes read */
@@ -63,6 +98,8 @@ int Curl_blockread_all(struct Curl_easy *data, /* transfer */
ssize_t nread = 0;
ssize_t allread = 0;
int result;
+ CURLcode err = CURLE_OK;
+
*n = 0;
for(;;) {
timediff_t timeout_ms = Curl_timeleft(data, NULL, TRUE);
@@ -73,15 +110,19 @@ int Curl_blockread_all(struct Curl_easy *data, /* transfer */
}
if(!timeout_ms)
timeout_ms = TIMEDIFF_T_MAX;
- if(SOCKET_READABLE(sockfd, timeout_ms) <= 0) {
+ if(SOCKET_READABLE(cf->conn->sock[cf->sockindex], timeout_ms) <= 0) {
result = ~CURLE_OK;
break;
}
- result = Curl_read_plain(sockfd, buf, buffersize, &nread);
- if(CURLE_AGAIN == result)
- continue;
- if(result)
- break;
+ nread = Curl_conn_cf_recv(cf->next, data, buf, buffersize, &err);
+ if(nread <= 0) {
+ result = err;
+ if(CURLE_AGAIN == err)
+ continue;
+ if(err) {
+ break;
+ }
+ }
if(buffersize == nread) {
allread += nread;
@@ -104,24 +145,23 @@ int Curl_blockread_all(struct Curl_easy *data, /* transfer */
#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
#define DEBUG_AND_VERBOSE
-#define sxstate(x,y) socksstate(x,y, __LINE__)
+#define sxstate(x,d,y) socksstate(x,d,y, __LINE__)
#else
-#define sxstate(x,y) socksstate(x,y)
+#define sxstate(x,d,y) socksstate(x,d,y)
#endif
/* always use this function to change state, to make debugging easier */
-static void socksstate(struct Curl_easy *data,
+static void socksstate(struct socks_state *sx, struct Curl_easy *data,
enum connect_t state
#ifdef DEBUG_AND_VERBOSE
, int lineno
#endif
)
{
- struct connectdata *conn = data->conn;
- enum connect_t oldstate = conn->cnnct.state;
+ enum connect_t oldstate = sx->state;
#ifdef DEBUG_AND_VERBOSE
/* synced with the state list in urldata.h */
- static const char * const statename[] = {
+ static const char * const socks_statename[] = {
"INIT",
"SOCKS_INIT",
"SOCKS_SEND",
@@ -143,38 +183,81 @@ static void socksstate(struct Curl_easy *data,
};
#endif
+ (void)data;
if(oldstate == state)
/* don't bother when the new state is the same as the old state */
return;
- conn->cnnct.state = state;
+ sx->state = state;
#ifdef DEBUG_AND_VERBOSE
infof(data,
- "SXSTATE: %s => %s conn %p; line %d",
- statename[oldstate], statename[conn->cnnct.state], conn,
+ "SXSTATE: %s => %s; line %d",
+ socks_statename[oldstate], socks_statename[sx->state],
lineno);
#endif
}
-int Curl_SOCKS_getsock(struct connectdata *conn, curl_socket_t *sock,
- int sockindex)
+static CURLproxycode socks_state_send(struct Curl_cfilter *cf,
+ struct socks_state *sx,
+ struct Curl_easy *data,
+ CURLproxycode failcode,
+ const char *description)
{
- int rc = 0;
- sock[0] = conn->sock[sockindex];
- switch(conn->cnnct.state) {
- case CONNECT_RESOLVING:
- case CONNECT_SOCKS_READ:
- case CONNECT_AUTH_READ:
- case CONNECT_REQ_READ:
- case CONNECT_REQ_READ_MORE:
- rc = GETSOCK_READSOCK(0);
- break;
- default:
- rc = GETSOCK_WRITESOCK(0);
- break;
+ ssize_t nwritten;
+ CURLcode result;
+
+ nwritten = Curl_conn_cf_send(cf->next, data, (char *)sx->outp,
+ sx->outstanding, &result);
+ if(nwritten <= 0) {
+ if(CURLE_AGAIN == result) {
+ return CURLPX_OK;
+ }
+ else if(CURLE_OK == result) {
+ /* connection closed */
+ failf(data, "connection to proxy closed");
+ return CURLPX_CLOSED;
+ }
+ failf(data, "Failed to send %s: %s", description,
+ curl_easy_strerror(result));
+ return failcode;
+ }
+ DEBUGASSERT(sx->outstanding >= nwritten);
+ /* not done, remain in state */
+ sx->outstanding -= nwritten;
+ sx->outp += nwritten;
+ return CURLPX_OK;
+}
+
+static CURLproxycode socks_state_recv(struct Curl_cfilter *cf,
+ struct socks_state *sx,
+ struct Curl_easy *data,
+ CURLproxycode failcode,
+ const char *description)
+{
+ ssize_t nread;
+ CURLcode result;
+
+ nread = Curl_conn_cf_recv(cf->next, data, (char *)sx->outp,
+ sx->outstanding, &result);
+ if(nread <= 0) {
+ if(CURLE_AGAIN == result) {
+ return CURLPX_OK;
+ }
+ else if(CURLE_OK == result) {
+ /* connection closed */
+ failf(data, "connection to proxy closed");
+ return CURLPX_CLOSED;
+ }
+ failf(data, "SOCKS4: Failed receiving %s: %s", description,
+ curl_easy_strerror(result));
+ return failcode;
}
- return rc;
+ /* remain in reading state */
+ DEBUGASSERT(sx->outstanding >= nread);
+ sx->outstanding -= nread;
+ sx->outp += nread;
+ return CURLPX_OK;
}
/*
@@ -188,39 +271,31 @@ int Curl_SOCKS_getsock(struct connectdata *conn, curl_socket_t *sock,
* Set protocol4a=true for "SOCKS 4A (Simple Extension to SOCKS 4 Protocol)"
* Nonsupport "Identification Protocol (RFC1413)"
*/
-CURLproxycode Curl_SOCKS4(const char *proxy_user,
- const char *hostname,
- int remote_port,
- int sockindex,
- struct Curl_easy *data,
- bool *done)
+static CURLproxycode do_SOCKS4(struct Curl_cfilter *cf,
+ struct socks_state *sx,
+ struct Curl_easy *data)
{
- struct connectdata *conn = data->conn;
+ struct connectdata *conn = cf->conn;
const bool protocol4a =
(conn->socks_proxy.proxytype == CURLPROXY_SOCKS4A) ? TRUE : FALSE;
unsigned char *socksreq = (unsigned char *)data->state.buffer;
CURLcode result;
- curl_socket_t sockfd = conn->sock[sockindex];
- struct connstate *sx = &conn->cnnct;
+ CURLproxycode presult;
struct Curl_dns_entry *dns = NULL;
- ssize_t actualread;
- ssize_t written;
/* make sure that the buffer is at least 600 bytes */
DEBUGASSERT(READBUFFER_MIN >= 600);
- if(!SOCKS_STATE(sx->state) && !*done)
- sxstate(data, CONNECT_SOCKS_INIT);
-
switch(sx->state) {
case CONNECT_SOCKS_INIT:
/* SOCKS4 can only do IPv4, insist! */
conn->ip_version = CURL_IPRESOLVE_V4;
if(conn->bits.httpproxy)
infof(data, "SOCKS4%s: connecting to HTTP proxy %s port %d",
- protocol4a ? "a" : "", hostname, remote_port);
+ protocol4a ? "a" : "", sx->hostname, sx->remote_port);
- infof(data, "SOCKS4 communication to %s:%d", hostname, remote_port);
+ infof(data, "SOCKS4 communication to %s:%d",
+ sx->hostname, sx->remote_port);
/*
* Compose socks4 request
@@ -235,40 +310,40 @@ CURLproxycode Curl_SOCKS4(const char *proxy_user,
socksreq[0] = 4; /* version (SOCKS4) */
socksreq[1] = 1; /* connect */
- socksreq[2] = (unsigned char)((remote_port >> 8) & 0xff); /* PORT MSB */
- socksreq[3] = (unsigned char)(remote_port & 0xff); /* PORT LSB */
+ socksreq[2] = (unsigned char)((sx->remote_port >> 8) & 0xff); /* MSB */
+ socksreq[3] = (unsigned char)(sx->remote_port & 0xff); /* LSB */
/* DNS resolve only for SOCKS4, not SOCKS4a */
if(!protocol4a) {
enum resolve_t rc =
- Curl_resolv(data, hostname, remote_port, FALSE, &dns);
+ Curl_resolv(data, sx->hostname, sx->remote_port, TRUE, &dns);
if(rc == CURLRESOLV_ERROR)
return CURLPX_RESOLVE_HOST;
else if(rc == CURLRESOLV_PENDING) {
- sxstate(data, CONNECT_RESOLVING);
- infof(data, "SOCKS4 non-blocking resolve of %s", hostname);
+ sxstate(sx, data, CONNECT_RESOLVING);
+ infof(data, "SOCKS4 non-blocking resolve of %s", sx->hostname);
return CURLPX_OK;
}
- sxstate(data, CONNECT_RESOLVED);
+ sxstate(sx, data, CONNECT_RESOLVED);
goto CONNECT_RESOLVED;
}
/* socks4a doesn't resolve anything locally */
- sxstate(data, CONNECT_REQ_INIT);
+ sxstate(sx, data, CONNECT_REQ_INIT);
goto CONNECT_REQ_INIT;
case CONNECT_RESOLVING:
/* check if we have the name resolved by now */
- dns = Curl_fetch_addr(data, hostname, (int)conn->port);
+ dns = Curl_fetch_addr(data, sx->hostname, (int)conn->port);
if(dns) {
#ifdef CURLRES_ASYNCH
- data->state.async.dns = dns;
- data->state.async.done = TRUE;
+ conn->resolve_async.dns = dns;
+ conn->resolve_async.done = TRUE;
#endif
- infof(data, "Hostname '%s' was found", hostname);
- sxstate(data, CONNECT_RESOLVED);
+ infof(data, "Hostname '%s' was found", sx->hostname);
+ sxstate(sx, data, CONNECT_RESOLVED);
}
else {
result = Curl_resolv_check(data, &dns);
@@ -279,7 +354,7 @@ CURLproxycode Curl_SOCKS4(const char *proxy_user,
}
}
/* FALLTHROUGH */
- CONNECT_RESOLVED:
+CONNECT_RESOLVED:
case CONNECT_RESOLVED: {
struct Curl_addrinfo *hp = NULL;
/*
@@ -309,30 +384,33 @@ CURLproxycode Curl_SOCKS4(const char *proxy_user,
Curl_resolv_unlock(data, dns); /* not used anymore from now on */
}
else
- failf(data, "SOCKS4 connection to %s not supported", hostname);
+ failf(data, "SOCKS4 connection to %s not supported", sx->hostname);
}
else
failf(data, "Failed to resolve \"%s\" for SOCKS4 connect.",
- hostname);
+ sx->hostname);
if(!hp)
return CURLPX_RESOLVE_HOST;
}
/* FALLTHROUGH */
- CONNECT_REQ_INIT:
+CONNECT_REQ_INIT:
case CONNECT_REQ_INIT:
/*
* This is currently not supporting "Identification Protocol (RFC1413)".
*/
socksreq[8] = 0; /* ensure empty userid is NUL-terminated */
- if(proxy_user) {
- size_t plen = strlen(proxy_user);
- if(plen >= (size_t)data->set.buffer_size - 8) {
- failf(data, "Too long SOCKS proxy user name, can't use");
+ if(sx->proxy_user) {
+ size_t plen = strlen(sx->proxy_user);
+ if(plen > 255) {
+ /* there is no real size limit to this field in the protocol, but
+ SOCKS5 limits the proxy user field to 255 bytes and it seems likely
+ that a longer field is either a mistake or malicious input */
+ failf(data, "Too long SOCKS proxy user name");
return CURLPX_LONG_USER;
}
/* copy the proxy name WITH trailing zero */
- memcpy(socksreq + 8, proxy_user, plen + 1);
+ memcpy(socksreq + 8, sx->proxy_user, plen + 1);
}
/*
@@ -350,9 +428,10 @@ CURLproxycode Curl_SOCKS4(const char *proxy_user,
socksreq[6] = 0;
socksreq[7] = 1;
/* append hostname */
- hostnamelen = strlen(hostname) + 1; /* length including NUL */
- if(hostnamelen <= 255)
- strcpy((char *)socksreq + packetsize, hostname);
+ hostnamelen = strlen(sx->hostname) + 1; /* length including NUL */
+ if((hostnamelen <= 255) &&
+ (packetsize + hostnamelen < data->set.buffer_size))
+ strcpy((char *)socksreq + packetsize, sx->hostname);
else {
failf(data, "SOCKS4: too long host name");
return CURLPX_LONG_HOSTNAME;
@@ -361,51 +440,36 @@ CURLproxycode Curl_SOCKS4(const char *proxy_user,
}
sx->outp = socksreq;
sx->outstanding = packetsize;
- sxstate(data, CONNECT_REQ_SENDING);
+ sxstate(sx, data, CONNECT_REQ_SENDING);
}
/* FALLTHROUGH */
case CONNECT_REQ_SENDING:
/* Send request */
- result = Curl_write_plain(data, sockfd, (char *)sx->outp,
- sx->outstanding, &written);
- if(result && (CURLE_AGAIN != result)) {
- failf(data, "Failed to send SOCKS4 connect request.");
- return CURLPX_SEND_CONNECT;
- }
- if(written != sx->outstanding) {
- /* not done, remain in state */
- sx->outstanding -= written;
- sx->outp += written;
+ presult = socks_state_send(cf, sx, data, CURLPX_SEND_CONNECT,
+ "SOCKS4 connect request");
+ if(CURLPX_OK != presult)
+ return presult;
+ else if(sx->outstanding) {
+ /* remain in sending state */
return CURLPX_OK;
}
-
/* done sending! */
sx->outstanding = 8; /* receive data size */
sx->outp = socksreq;
- sxstate(data, CONNECT_SOCKS_READ);
+ sxstate(sx, data, CONNECT_SOCKS_READ);
/* FALLTHROUGH */
case CONNECT_SOCKS_READ:
/* Receive response */
- result = Curl_read_plain(sockfd, (char *)sx->outp,
- sx->outstanding, &actualread);
- if(result && (CURLE_AGAIN != result)) {
- failf(data, "SOCKS4: Failed receiving connect request ack: %s",
- curl_easy_strerror(result));
- return CURLPX_RECV_CONNECT;
- }
- else if(!result && !actualread) {
- /* connection closed */
- failf(data, "connection to proxy closed");
- return CURLPX_CLOSED;
- }
- else if(actualread != sx->outstanding) {
+ presult = socks_state_recv(cf, sx, data, CURLPX_RECV_CONNECT,
+ "connect request ack");
+ if(CURLPX_OK != presult)
+ return presult;
+ else if(sx->outstanding) {
/* remain in reading state */
- sx->outstanding -= actualread;
- sx->outp += actualread;
return CURLPX_OK;
}
- sxstate(data, CONNECT_DONE);
+ sxstate(sx, data, CONNECT_DONE);
break;
default: /* lots of unused states in SOCKS4 */
break;
@@ -478,7 +542,6 @@ CURLproxycode Curl_SOCKS4(const char *proxy_user,
return CURLPX_UNKNOWN_FAIL;
}
- *done = TRUE;
return CURLPX_OK; /* Proxy was successful! */
}
@@ -486,13 +549,9 @@ CURLproxycode Curl_SOCKS4(const char *proxy_user,
* This function logs in to a SOCKS5 proxy and sends the specifics to the final
* destination server.
*/
-CURLproxycode Curl_SOCKS5(const char *proxy_user,
- const char *proxy_password,
- const char *hostname,
- int remote_port,
- int sockindex,
- struct Curl_easy *data,
- bool *done)
+static CURLproxycode do_SOCKS5(struct Curl_cfilter *cf,
+ struct socks_state *sx,
+ struct Curl_easy *data)
{
/*
According to the RFC1928, section "6. Replies". This is what a SOCK5
@@ -510,46 +569,40 @@ CURLproxycode Curl_SOCKS5(const char *proxy_user,
o REP Reply field:
o X'00' succeeded
*/
- struct connectdata *conn = data->conn;
+ struct connectdata *conn = cf->conn;
unsigned char *socksreq = (unsigned char *)data->state.buffer;
- char dest[256] = "unknown"; /* printable hostname:port */
int idx;
- ssize_t actualread;
- ssize_t written;
CURLcode result;
- curl_socket_t sockfd = conn->sock[sockindex];
+ CURLproxycode presult;
bool socks5_resolve_local =
(conn->socks_proxy.proxytype == CURLPROXY_SOCKS5) ? TRUE : FALSE;
- const size_t hostname_len = strlen(hostname);
+ const size_t hostname_len = strlen(sx->hostname);
ssize_t len = 0;
- const unsigned long auth = data->set.socks5auth;
+ const unsigned char auth = data->set.socks5auth;
bool allow_gssapi = FALSE;
- struct connstate *sx = &conn->cnnct;
struct Curl_dns_entry *dns = NULL;
- if(!SOCKS_STATE(sx->state) && !*done)
- sxstate(data, CONNECT_SOCKS_INIT);
-
+ DEBUGASSERT(auth & (CURLAUTH_BASIC | CURLAUTH_GSSAPI));
switch(sx->state) {
case CONNECT_SOCKS_INIT:
if(conn->bits.httpproxy)
infof(data, "SOCKS5: connecting to HTTP proxy %s port %d",
- hostname, remote_port);
+ sx->hostname, sx->remote_port);
/* RFC1928 chapter 5 specifies max 255 chars for domain name in packet */
if(!socks5_resolve_local && hostname_len > 255) {
- infof(data, "SOCKS5: server resolving disabled for hostnames of "
- "length > 255 [actual len=%zu]", hostname_len);
- socks5_resolve_local = TRUE;
+ failf(data, "SOCKS5: the destination hostname is too long to be "
+ "resolved remotely by the proxy.");
+ return CURLPX_LONG_HOSTNAME;
}
if(auth & ~(CURLAUTH_BASIC | CURLAUTH_GSSAPI))
infof(data,
- "warning: unsupported value passed to CURLOPT_SOCKS5_AUTH: %lu",
+ "warning: unsupported value passed to CURLOPT_SOCKS5_AUTH: %u",
auth);
if(!(auth & CURLAUTH_BASIC))
/* disable username/password auth */
- proxy_user = NULL;
+ sx->proxy_user = NULL;
#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
if(auth & CURLAUTH_GSSAPI)
allow_gssapi = TRUE;
@@ -561,59 +614,45 @@ CURLproxycode Curl_SOCKS5(const char *proxy_user,
socksreq[idx++] = 0; /* no authentication */
if(allow_gssapi)
socksreq[idx++] = 1; /* GSS-API */
- if(proxy_user)
+ if(sx->proxy_user)
socksreq[idx++] = 2; /* username/password */
/* write the number of authentication methods */
socksreq[1] = (unsigned char) (idx - 2);
- result = Curl_write_plain(data, sockfd, (char *)socksreq, idx, &written);
- if(result && (CURLE_AGAIN != result)) {
- failf(data, "Unable to send initial SOCKS5 request.");
- return CURLPX_SEND_CONNECT;
- }
- if(written != idx) {
- sxstate(data, CONNECT_SOCKS_SEND);
- sx->outstanding = idx - written;
- sx->outp = &socksreq[written];
+ sx->outp = socksreq;
+ sx->outstanding = idx;
+ presult = socks_state_send(cf, sx, data, CURLPX_SEND_CONNECT,
+ "initial SOCKS5 request");
+ if(CURLPX_OK != presult)
+ return presult;
+ else if(sx->outstanding) {
+ /* remain in sending state */
return CURLPX_OK;
}
- sxstate(data, CONNECT_SOCKS_READ);
+ sxstate(sx, data, CONNECT_SOCKS_READ);
goto CONNECT_SOCKS_READ_INIT;
case CONNECT_SOCKS_SEND:
- result = Curl_write_plain(data, sockfd, (char *)sx->outp,
- sx->outstanding, &written);
- if(result && (CURLE_AGAIN != result)) {
- failf(data, "Unable to send initial SOCKS5 request.");
- return CURLPX_SEND_CONNECT;
- }
- if(written != sx->outstanding) {
- /* not done, remain in state */
- sx->outstanding -= written;
- sx->outp += written;
+ presult = socks_state_send(cf, sx, data, CURLPX_SEND_CONNECT,
+ "initial SOCKS5 request");
+ if(CURLPX_OK != presult)
+ return presult;
+ else if(sx->outstanding) {
+ /* remain in sending state */
return CURLPX_OK;
}
/* FALLTHROUGH */
- CONNECT_SOCKS_READ_INIT:
+CONNECT_SOCKS_READ_INIT:
case CONNECT_SOCKS_READ_INIT:
sx->outstanding = 2; /* expect two bytes */
sx->outp = socksreq; /* store it here */
/* FALLTHROUGH */
case CONNECT_SOCKS_READ:
- result = Curl_read_plain(sockfd, (char *)sx->outp,
- sx->outstanding, &actualread);
- if(result && (CURLE_AGAIN != result)) {
- failf(data, "Unable to receive initial SOCKS5 response.");
- return CURLPX_RECV_CONNECT;
- }
- else if(!result && !actualread) {
- /* connection closed */
- failf(data, "Connection to proxy closed");
- return CURLPX_CLOSED;
- }
- else if(actualread != sx->outstanding) {
+ presult = socks_state_recv(cf, sx, data, CURLPX_RECV_CONNECT,
+ "initial SOCKS5 response");
+ if(CURLPX_OK != presult)
+ return presult;
+ else if(sx->outstanding) {
/* remain in reading state */
- sx->outstanding -= actualread;
- sx->outp += actualread;
return CURLPX_OK;
}
else if(socksreq[0] != 5) {
@@ -622,18 +661,18 @@ CURLproxycode Curl_SOCKS5(const char *proxy_user,
}
else if(socksreq[1] == 0) {
/* DONE! No authentication needed. Send request. */
- sxstate(data, CONNECT_REQ_INIT);
+ sxstate(sx, data, CONNECT_REQ_INIT);
goto CONNECT_REQ_INIT;
}
else if(socksreq[1] == 2) {
/* regular name + password authentication */
- sxstate(data, CONNECT_AUTH_INIT);
+ sxstate(sx, data, CONNECT_AUTH_INIT);
goto CONNECT_AUTH_INIT;
}
#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
else if(allow_gssapi && (socksreq[1] == 1)) {
- sxstate(data, CONNECT_GSSAPI_INIT);
- result = Curl_SOCKS5_gssapi_negotiate(sockindex, data);
+ sxstate(sx, data, CONNECT_GSSAPI_INIT);
+ result = Curl_SOCKS5_gssapi_negotiate(cf, data);
if(result) {
failf(data, "Unable to negotiate SOCKS5 GSS-API context.");
return CURLPX_GSSAPI;
@@ -664,13 +703,13 @@ CURLproxycode Curl_SOCKS5(const char *proxy_user,
default: /* do nothing! */
break;
- CONNECT_AUTH_INIT:
+CONNECT_AUTH_INIT:
case CONNECT_AUTH_INIT: {
/* Needs user name and password */
size_t proxy_user_len, proxy_password_len;
- if(proxy_user && proxy_password) {
- proxy_user_len = strlen(proxy_user);
- proxy_password_len = strlen(proxy_password);
+ if(sx->proxy_user && sx->proxy_password) {
+ proxy_user_len = strlen(sx->proxy_user);
+ proxy_password_len = strlen(sx->proxy_password);
}
else {
proxy_user_len = 0;
@@ -687,63 +726,50 @@ CURLproxycode Curl_SOCKS5(const char *proxy_user,
len = 0;
socksreq[len++] = 1; /* username/pw subnegotiation version */
socksreq[len++] = (unsigned char) proxy_user_len;
- if(proxy_user && proxy_user_len) {
+ if(sx->proxy_user && proxy_user_len) {
/* the length must fit in a single byte */
- if(proxy_user_len >= 255) {
+ if(proxy_user_len > 255) {
failf(data, "Excessive user name length for proxy auth");
return CURLPX_LONG_USER;
}
- memcpy(socksreq + len, proxy_user, proxy_user_len);
+ memcpy(socksreq + len, sx->proxy_user, proxy_user_len);
}
len += proxy_user_len;
socksreq[len++] = (unsigned char) proxy_password_len;
- if(proxy_password && proxy_password_len) {
+ if(sx->proxy_password && proxy_password_len) {
/* the length must fit in a single byte */
if(proxy_password_len > 255) {
failf(data, "Excessive password length for proxy auth");
return CURLPX_LONG_PASSWD;
}
- memcpy(socksreq + len, proxy_password, proxy_password_len);
+ memcpy(socksreq + len, sx->proxy_password, proxy_password_len);
}
len += proxy_password_len;
- sxstate(data, CONNECT_AUTH_SEND);
+ sxstate(sx, data, CONNECT_AUTH_SEND);
sx->outstanding = len;
sx->outp = socksreq;
}
/* FALLTHROUGH */
case CONNECT_AUTH_SEND:
- result = Curl_write_plain(data, sockfd, (char *)sx->outp,
- sx->outstanding, &written);
- if(result && (CURLE_AGAIN != result)) {
- failf(data, "Failed to send SOCKS5 sub-negotiation request.");
- return CURLPX_SEND_AUTH;
- }
- if(sx->outstanding != written) {
- /* remain in state */
- sx->outstanding -= written;
- sx->outp += written;
+ presult = socks_state_send(cf, sx, data, CURLPX_SEND_AUTH,
+ "SOCKS5 sub-negotiation request");
+ if(CURLPX_OK != presult)
+ return presult;
+ else if(sx->outstanding) {
+ /* remain in sending state */
return CURLPX_OK;
}
sx->outp = socksreq;
sx->outstanding = 2;
- sxstate(data, CONNECT_AUTH_READ);
+ sxstate(sx, data, CONNECT_AUTH_READ);
/* FALLTHROUGH */
case CONNECT_AUTH_READ:
- result = Curl_read_plain(sockfd, (char *)sx->outp,
- sx->outstanding, &actualread);
- if(result && (CURLE_AGAIN != result)) {
- failf(data, "Unable to receive SOCKS5 sub-negotiation response.");
- return CURLPX_RECV_AUTH;
- }
- else if(!result && !actualread) {
- /* connection closed */
- failf(data, "connection to proxy closed");
- return CURLPX_CLOSED;
- }
- else if(actualread != sx->outstanding) {
- /* remain in state */
- sx->outstanding -= actualread;
- sx->outp += actualread;
+ presult = socks_state_recv(cf, sx, data, CURLPX_RECV_AUTH,
+ "SOCKS5 sub-negotiation response");
+ if(CURLPX_OK != presult)
+ return presult;
+ else if(sx->outstanding) {
+ /* remain in reading state */
return CURLPX_OK;
}
/* ignore the first (VER) byte */
@@ -754,36 +780,36 @@ CURLproxycode Curl_SOCKS5(const char *proxy_user,
}
/* Everything is good so far, user was authenticated! */
- sxstate(data, CONNECT_REQ_INIT);
+ sxstate(sx, data, CONNECT_REQ_INIT);
/* FALLTHROUGH */
- CONNECT_REQ_INIT:
+CONNECT_REQ_INIT:
case CONNECT_REQ_INIT:
if(socks5_resolve_local) {
- enum resolve_t rc = Curl_resolv(data, hostname, remote_port,
- FALSE, &dns);
+ enum resolve_t rc = Curl_resolv(data, sx->hostname, sx->remote_port,
+ TRUE, &dns);
if(rc == CURLRESOLV_ERROR)
return CURLPX_RESOLVE_HOST;
if(rc == CURLRESOLV_PENDING) {
- sxstate(data, CONNECT_RESOLVING);
+ sxstate(sx, data, CONNECT_RESOLVING);
return CURLPX_OK;
}
- sxstate(data, CONNECT_RESOLVED);
+ sxstate(sx, data, CONNECT_RESOLVED);
goto CONNECT_RESOLVED;
}
goto CONNECT_RESOLVE_REMOTE;
case CONNECT_RESOLVING:
/* check if we have the name resolved by now */
- dns = Curl_fetch_addr(data, hostname, remote_port);
+ dns = Curl_fetch_addr(data, sx->hostname, sx->remote_port);
if(dns) {
#ifdef CURLRES_ASYNCH
- data->state.async.dns = dns;
- data->state.async.done = TRUE;
+ conn->resolve_async.dns = dns;
+ conn->resolve_async.done = TRUE;
#endif
- infof(data, "SOCKS5: hostname '%s' found", hostname);
+ infof(data, "SOCKS5: hostname '%s' found", sx->hostname);
}
if(!dns) {
@@ -795,21 +821,28 @@ CURLproxycode Curl_SOCKS5(const char *proxy_user,
}
}
/* FALLTHROUGH */
- CONNECT_RESOLVED:
+CONNECT_RESOLVED:
case CONNECT_RESOLVED: {
+ char dest[MAX_IPADR_LEN]; /* printable address */
struct Curl_addrinfo *hp = NULL;
- size_t destlen;
if(dns)
hp = dns->addr;
+#ifdef ENABLE_IPV6
+ if(data->set.ipver != CURL_IPRESOLVE_WHATEVER) {
+ int wanted_family = data->set.ipver == CURL_IPRESOLVE_V4 ?
+ AF_INET : AF_INET6;
+ /* scan for the first proper address */
+ while(hp && (hp->ai_family != wanted_family))
+ hp = hp->ai_next;
+ }
+#endif
if(!hp) {
failf(data, "Failed to resolve \"%s\" for SOCKS5 connect.",
- hostname);
+ sx->hostname);
return CURLPX_RESOLVE_HOST;
}
Curl_printable_address(hp, dest, sizeof(dest));
- destlen = strlen(dest);
- msnprintf(dest + destlen, sizeof(dest) - destlen, ":%d", remote_port);
len = 0;
socksreq[len++] = 5; /* version (SOCKS5) */
@@ -825,7 +858,8 @@ CURLproxycode Curl_SOCKS5(const char *proxy_user,
socksreq[len++] = ((unsigned char *)&saddr_in->sin_addr.s_addr)[i];
}
- infof(data, "SOCKS5 connect to IPv4 %s (locally resolved)", dest);
+ infof(data, "SOCKS5 connect to %s:%d (locally resolved)", dest,
+ sx->remote_port);
}
#ifdef ENABLE_IPV6
else if(hp->ai_family == AF_INET6) {
@@ -839,7 +873,8 @@ CURLproxycode Curl_SOCKS5(const char *proxy_user,
((unsigned char *)&saddr_in6->sin6_addr.s6_addr)[i];
}
- infof(data, "SOCKS5 connect to IPv6 %s (locally resolved)", dest);
+ infof(data, "SOCKS5 connect to [%s]:%d (locally resolved)", dest,
+ sx->remote_port);
}
#endif
else {
@@ -850,7 +885,7 @@ CURLproxycode Curl_SOCKS5(const char *proxy_user,
Curl_resolv_unlock(data, dns); /* not used anymore from now on */
goto CONNECT_REQ_SEND;
}
- CONNECT_RESOLVE_REMOTE:
+CONNECT_RESOLVE_REMOTE:
case CONNECT_RESOLVE_REMOTE:
/* Authentication is complete, now specify destination to the proxy */
len = 0;
@@ -866,7 +901,7 @@ CURLproxycode Curl_SOCKS5(const char *proxy_user,
#ifdef ENABLE_IPV6
if(conn->bits.ipv6_ip) {
char ip6[16];
- if(1 != Curl_inet_pton(AF_INET6, hostname, ip6))
+ if(1 != Curl_inet_pton(AF_INET6, sx->hostname, ip6))
return CURLPX_BAD_ADDRESS_TYPE;
socksreq[len++] = 4;
memcpy(&socksreq[len], ip6, sizeof(ip6));
@@ -874,28 +909,28 @@ CURLproxycode Curl_SOCKS5(const char *proxy_user,
}
else
#endif
- if(1 == Curl_inet_pton(AF_INET, hostname, ip4)) {
+ if(1 == Curl_inet_pton(AF_INET, sx->hostname, ip4)) {
socksreq[len++] = 1;
memcpy(&socksreq[len], ip4, sizeof(ip4));
len += sizeof(ip4);
}
else {
socksreq[len++] = 3;
- socksreq[len++] = (char) hostname_len; /* one byte address length */
- memcpy(&socksreq[len], hostname, hostname_len); /* address w/o NULL */
+ socksreq[len++] = (unsigned char) hostname_len; /* one byte length */
+ memcpy(&socksreq[len], sx->hostname, hostname_len); /* w/o NULL */
len += hostname_len;
}
infof(data, "SOCKS5 connect to %s:%d (remotely resolved)",
- hostname, remote_port);
+ sx->hostname, sx->remote_port);
}
/* FALLTHROUGH */
- CONNECT_REQ_SEND:
+CONNECT_REQ_SEND:
case CONNECT_REQ_SEND:
/* PORT MSB */
- socksreq[len++] = (unsigned char)((remote_port >> 8) & 0xff);
+ socksreq[len++] = (unsigned char)((sx->remote_port >> 8) & 0xff);
/* PORT LSB */
- socksreq[len++] = (unsigned char)(remote_port & 0xff);
+ socksreq[len++] = (unsigned char)(sx->remote_port & 0xff);
#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
if(conn->socks5_gssapi_enctype) {
@@ -905,19 +940,15 @@ CURLproxycode Curl_SOCKS5(const char *proxy_user,
#endif
sx->outp = socksreq;
sx->outstanding = len;
- sxstate(data, CONNECT_REQ_SENDING);
+ sxstate(sx, data, CONNECT_REQ_SENDING);
/* FALLTHROUGH */
case CONNECT_REQ_SENDING:
- result = Curl_write_plain(data, sockfd, (char *)sx->outp,
- sx->outstanding, &written);
- if(result && (CURLE_AGAIN != result)) {
- failf(data, "Failed to send SOCKS5 connect request.");
- return CURLPX_SEND_REQUEST;
- }
- if(sx->outstanding != written) {
- /* remain in state */
- sx->outstanding -= written;
- sx->outp += written;
+ presult = socks_state_send(cf, sx, data, CURLPX_SEND_REQUEST,
+ "SOCKS5 connect request");
+ if(CURLPX_OK != presult)
+ return presult;
+ else if(sx->outstanding) {
+ /* remain in send state */
return CURLPX_OK;
}
#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
@@ -928,28 +959,18 @@ CURLproxycode Curl_SOCKS5(const char *proxy_user,
#endif
sx->outstanding = 10; /* minimum packet size is 10 */
sx->outp = socksreq;
- sxstate(data, CONNECT_REQ_READ);
+ sxstate(sx, data, CONNECT_REQ_READ);
/* FALLTHROUGH */
case CONNECT_REQ_READ:
- result = Curl_read_plain(sockfd, (char *)sx->outp,
- sx->outstanding, &actualread);
- if(result && (CURLE_AGAIN != result)) {
- failf(data, "Failed to receive SOCKS5 connect request ack.");
- return CURLPX_RECV_REQACK;
- }
- else if(!result && !actualread) {
- /* connection closed */
- failf(data, "connection to proxy closed");
- return CURLPX_CLOSED;
- }
- else if(actualread != sx->outstanding) {
- /* remain in state */
- sx->outstanding -= actualread;
- sx->outp += actualread;
+ presult = socks_state_recv(cf, sx, data, CURLPX_RECV_REQACK,
+ "SOCKS5 connect request ack");
+ if(CURLPX_OK != presult)
+ return presult;
+ else if(sx->outstanding) {
+ /* remain in reading state */
return CURLPX_OK;
}
-
- if(socksreq[0] != 5) { /* version */
+ else if(socksreq[0] != 5) { /* version */
failf(data,
"SOCKS5 reply has wrong version, version should be 5.");
return CURLPX_BAD_VERSION;
@@ -958,7 +979,7 @@ CURLproxycode Curl_SOCKS5(const char *proxy_user,
CURLproxycode rc = CURLPX_REPLY_UNASSIGNED;
int code = socksreq[1];
failf(data, "Can't complete SOCKS5 connection to %s. (%d)",
- hostname, (unsigned char)socksreq[1]);
+ sx->hostname, (unsigned char)socksreq[1]);
if(code < 9) {
/* RFC 1928 section 6 lists: */
static const CURLproxycode lookup[] = {
@@ -1019,10 +1040,10 @@ CURLproxycode Curl_SOCKS5(const char *proxy_user,
if(len > 10) {
sx->outstanding = len - 10; /* get the rest */
sx->outp = &socksreq[10];
- sxstate(data, CONNECT_REQ_READ_MORE);
+ sxstate(sx, data, CONNECT_REQ_READ_MORE);
}
else {
- sxstate(data, CONNECT_DONE);
+ sxstate(sx, data, CONNECT_DONE);
break;
}
#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
@@ -1030,29 +1051,213 @@ CURLproxycode Curl_SOCKS5(const char *proxy_user,
#endif
/* FALLTHROUGH */
case CONNECT_REQ_READ_MORE:
- result = Curl_read_plain(sockfd, (char *)sx->outp,
- sx->outstanding, &actualread);
- if(result && (CURLE_AGAIN != result)) {
- failf(data, "Failed to receive SOCKS5 connect request ack.");
- return CURLPX_RECV_ADDRESS;
- }
- else if(!result && !actualread) {
- /* connection closed */
- failf(data, "connection to proxy closed");
- return CURLPX_CLOSED;
- }
- else if(actualread != sx->outstanding) {
- /* remain in state */
- sx->outstanding -= actualread;
- sx->outp += actualread;
+ presult = socks_state_recv(cf, sx, data, CURLPX_RECV_ADDRESS,
+ "SOCKS5 connect request address");
+ if(CURLPX_OK != presult)
+ return presult;
+ else if(sx->outstanding) {
+ /* remain in reading state */
return CURLPX_OK;
}
- sxstate(data, CONNECT_DONE);
+ sxstate(sx, data, CONNECT_DONE);
}
infof(data, "SOCKS5 request granted.");
- *done = TRUE;
return CURLPX_OK; /* Proxy was successful! */
}
+static CURLcode connect_SOCKS(struct Curl_cfilter *cf,
+ struct socks_state *sxstate,
+ struct Curl_easy *data)
+{
+ CURLcode result = CURLE_OK;
+ CURLproxycode pxresult = CURLPX_OK;
+ struct connectdata *conn = cf->conn;
+
+ switch(conn->socks_proxy.proxytype) {
+ case CURLPROXY_SOCKS5:
+ case CURLPROXY_SOCKS5_HOSTNAME:
+ pxresult = do_SOCKS5(cf, sxstate, data);
+ break;
+
+ case CURLPROXY_SOCKS4:
+ case CURLPROXY_SOCKS4A:
+ pxresult = do_SOCKS4(cf, sxstate, data);
+ break;
+
+ default:
+ failf(data, "unknown proxytype option given");
+ result = CURLE_COULDNT_CONNECT;
+ } /* switch proxytype */
+ if(pxresult) {
+ result = CURLE_PROXY;
+ data->info.pxcode = pxresult;
+ }
+
+ return result;
+}
+
+static void socks_proxy_cf_free(struct Curl_cfilter *cf)
+{
+ struct socks_state *sxstate = cf->ctx;
+ if(sxstate) {
+ free(sxstate);
+ cf->ctx = NULL;
+ }
+}
+
+/* After a TCP connection to the proxy has been verified, this function does
+ the next magic steps. If 'done' isn't set TRUE, it is not done yet and
+ must be called again.
+
+ Note: this function's sub-functions call failf()
+
+*/
+static CURLcode socks_proxy_cf_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool blocking, bool *done)
+{
+ CURLcode result;
+ struct connectdata *conn = cf->conn;
+ int sockindex = cf->sockindex;
+ struct socks_state *sx = cf->ctx;
+
+ if(cf->connected) {
+ *done = TRUE;
+ return CURLE_OK;
+ }
+
+ result = cf->next->cft->do_connect(cf->next, data, blocking, done);
+ if(result || !*done)
+ return result;
+
+ if(!sx) {
+ sx = calloc(1, sizeof(*sx));
+ if(!sx)
+ return CURLE_OUT_OF_MEMORY;
+ cf->ctx = sx;
+ }
+
+ if(sx->state == CONNECT_INIT) {
+ /* for the secondary socket (FTP), use the "connect to host"
+ * but ignore the "connect to port" (use the secondary port)
+ */
+ sxstate(sx, data, CONNECT_SOCKS_INIT);
+ sx->hostname =
+ conn->bits.httpproxy ?
+ conn->http_proxy.host.name :
+ conn->bits.conn_to_host ?
+ conn->conn_to_host.name :
+ sockindex == SECONDARYSOCKET ?
+ conn->secondaryhostname : conn->host.name;
+ sx->remote_port =
+ conn->bits.httpproxy ? (int)conn->http_proxy.port :
+ sockindex == SECONDARYSOCKET ? conn->secondary_port :
+ conn->bits.conn_to_port ? conn->conn_to_port :
+ conn->remote_port;
+ sx->proxy_user = conn->socks_proxy.user;
+ sx->proxy_password = conn->socks_proxy.passwd;
+ }
+
+ result = connect_SOCKS(cf, sx, data);
+ if(!result && sx->state == CONNECT_DONE) {
+ cf->connected = TRUE;
+ Curl_verboseconnect(data, conn);
+ socks_proxy_cf_free(cf);
+ }
+
+ *done = cf->connected;
+ return result;
+}
+
+static void socks_cf_adjust_pollset(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct easy_pollset *ps)
+{
+ struct socks_state *sx = cf->ctx;
+
+ if(!cf->connected && sx) {
+ /* If we are not connected, the filter below is and has nothing
+ * to wait on, we determine what to wait for. */
+ curl_socket_t sock = Curl_conn_cf_get_socket(cf, data);
+ switch(sx->state) {
+ case CONNECT_RESOLVING:
+ case CONNECT_SOCKS_READ:
+ case CONNECT_AUTH_READ:
+ case CONNECT_REQ_READ:
+ case CONNECT_REQ_READ_MORE:
+ Curl_pollset_set_in_only(data, ps, sock);
+ break;
+ default:
+ Curl_pollset_set_out_only(data, ps, sock);
+ break;
+ }
+ }
+}
+
+static void socks_proxy_cf_close(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+
+ DEBUGASSERT(cf->next);
+ cf->connected = FALSE;
+ socks_proxy_cf_free(cf);
+ cf->next->cft->do_close(cf->next, data);
+}
+
+static void socks_proxy_cf_destroy(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ (void)data;
+ socks_proxy_cf_free(cf);
+}
+
+static void socks_cf_get_host(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ const char **phost,
+ const char **pdisplay_host,
+ int *pport)
+{
+ (void)data;
+ if(!cf->connected) {
+ *phost = cf->conn->socks_proxy.host.name;
+ *pdisplay_host = cf->conn->http_proxy.host.dispname;
+ *pport = (int)cf->conn->socks_proxy.port;
+ }
+ else {
+ cf->next->cft->get_host(cf->next, data, phost, pdisplay_host, pport);
+ }
+}
+
+struct Curl_cftype Curl_cft_socks_proxy = {
+ "SOCKS-PROXYY",
+ CF_TYPE_IP_CONNECT,
+ 0,
+ socks_proxy_cf_destroy,
+ socks_proxy_cf_connect,
+ socks_proxy_cf_close,
+ socks_cf_get_host,
+ socks_cf_adjust_pollset,
+ Curl_cf_def_data_pending,
+ Curl_cf_def_send,
+ Curl_cf_def_recv,
+ Curl_cf_def_cntrl,
+ Curl_cf_def_conn_is_alive,
+ Curl_cf_def_conn_keep_alive,
+ Curl_cf_def_query,
+};
+
+CURLcode Curl_cf_socks_proxy_insert_after(struct Curl_cfilter *cf_at,
+ struct Curl_easy *data)
+{
+ struct Curl_cfilter *cf;
+ CURLcode result;
+
+ (void)data;
+ result = Curl_cf_create(&cf, &Curl_cft_socks_proxy, NULL);
+ if(!result)
+ Curl_conn_cf_insert_after(cf_at, cf);
+ return result;
+}
+
#endif /* CURL_DISABLE_PROXY */
diff --git a/lib/socks.h b/lib/socks.h
index ff83aa561..a3adcc6e9 100644
--- a/lib/socks.h
+++ b/lib/socks.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -37,46 +37,25 @@
*
* This is STUPID BLOCKING behavior
*/
-int Curl_blockread_all(struct Curl_easy *data,
- curl_socket_t sockfd,
+int Curl_blockread_all(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
char *buf,
ssize_t buffersize,
ssize_t *n);
-int Curl_SOCKS_getsock(struct connectdata *conn,
- curl_socket_t *sock,
- int sockindex);
-/*
- * This function logs in to a SOCKS4(a) proxy and sends the specifics to the
- * final destination server.
- */
-CURLproxycode Curl_SOCKS4(const char *proxy_name,
- const char *hostname,
- int remote_port,
- int sockindex,
- struct Curl_easy *data,
- bool *done);
-
-/*
- * This function logs in to a SOCKS5 proxy and sends the specifics to the
- * final destination server.
- */
-CURLproxycode Curl_SOCKS5(const char *proxy_name,
- const char *proxy_password,
- const char *hostname,
- int remote_port,
- int sockindex,
- struct Curl_easy *data,
- bool *done);
-
#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
/*
* This function handles the SOCKS5 GSS-API negotiation and initialization
*/
-CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
+CURLcode Curl_SOCKS5_gssapi_negotiate(struct Curl_cfilter *cf,
struct Curl_easy *data);
#endif
+CURLcode Curl_cf_socks_proxy_insert_after(struct Curl_cfilter *cf_at,
+ struct Curl_easy *data);
+
+extern struct Curl_cftype Curl_cft_socks_proxy;
+
#endif /* CURL_DISABLE_PROXY */
#endif /* HEADER_CURL_SOCKS_H */
diff --git a/lib/socks_gssapi.c b/lib/socks_gssapi.c
index f14099feb..2ede8c7c2 100644
--- a/lib/socks_gssapi.c
+++ b/lib/socks_gssapi.c
@@ -5,8 +5,8 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2012 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- * Copyright (C) 2012, Markus Moeller, <markus_moeller@compuserve.com>
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Markus Moeller, <markus_moeller@compuserve.com>
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -30,6 +30,7 @@
#include "curl_gssapi.h"
#include "urldata.h"
#include "sendf.h"
+#include "cfilters.h"
#include "connect.h"
#include "timeval.h"
#include "socks.h"
@@ -101,14 +102,14 @@ static int check_gss_err(struct Curl_easy *data,
return 0;
}
-CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
+CURLcode Curl_SOCKS5_gssapi_negotiate(struct Curl_cfilter *cf,
struct Curl_easy *data)
{
- struct connectdata *conn = data->conn;
- curl_socket_t sock = conn->sock[sockindex];
+ struct connectdata *conn = cf->conn;
+ curl_socket_t sock = conn->sock[cf->sockindex];
CURLcode code;
ssize_t actualread;
- ssize_t written;
+ ssize_t nwritten;
int result;
OM_uint32 gss_major_status, gss_minor_status, gss_status;
OM_uint32 gss_ret_flags;
@@ -203,8 +204,8 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
us_length = htons((short)gss_send_token.length);
memcpy(socksreq + 2, &us_length, sizeof(short));
- code = Curl_write_plain(data, sock, (char *)socksreq, 4, &written);
- if(code || (4 != written)) {
+ nwritten = Curl_conn_cf_send(cf->next, data, (char *)socksreq, 4, &code);
+ if(code || (4 != nwritten)) {
failf(data, "Failed to send GSS-API authentication request.");
gss_release_name(&gss_status, &server);
gss_release_buffer(&gss_status, &gss_recv_token);
@@ -213,10 +214,10 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
return CURLE_COULDNT_CONNECT;
}
- code = Curl_write_plain(data, sock, (char *)gss_send_token.value,
- gss_send_token.length, &written);
-
- if(code || ((ssize_t)gss_send_token.length != written)) {
+ nwritten = Curl_conn_cf_send(cf->next, data,
+ (char *)gss_send_token.value,
+ gss_send_token.length, &code);
+ if(code || ((ssize_t)gss_send_token.length != nwritten)) {
failf(data, "Failed to send GSS-API authentication token.");
gss_release_name(&gss_status, &server);
gss_release_buffer(&gss_status, &gss_recv_token);
@@ -242,7 +243,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
* +----+------+-----+----------------+
*/
- result = Curl_blockread_all(data, sock, (char *)socksreq, 4, &actualread);
+ result = Curl_blockread_all(cf, data, (char *)socksreq, 4, &actualread);
if(result || (actualread != 4)) {
failf(data, "Failed to receive GSS-API authentication response.");
gss_release_name(&gss_status, &server);
@@ -281,7 +282,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
return CURLE_OUT_OF_MEMORY;
}
- result = Curl_blockread_all(data, sock, (char *)gss_recv_token.value,
+ result = Curl_blockread_all(cf, data, (char *)gss_recv_token.value,
gss_recv_token.length, &actualread);
if(result || (actualread != us_length)) {
@@ -410,8 +411,8 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
memcpy(socksreq + 2, &us_length, sizeof(short));
}
- code = Curl_write_plain(data, sock, (char *)socksreq, 4, &written);
- if(code || (4 != written)) {
+ nwritten = Curl_conn_cf_send(cf->next, data, (char *)socksreq, 4, &code);
+ if(code || (4 != nwritten)) {
failf(data, "Failed to send GSS-API encryption request.");
gss_release_buffer(&gss_status, &gss_w_token);
gss_delete_sec_context(&gss_status, &gss_context, NULL);
@@ -420,17 +421,18 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
if(data->set.socks5_gssapi_nec) {
memcpy(socksreq, &gss_enc, 1);
- code = Curl_write_plain(data, sock, socksreq, 1, &written);
- if(code || ( 1 != written)) {
+ nwritten = Curl_conn_cf_send(cf->next, data, (char *)socksreq, 1, &code);
+ if(code || ( 1 != nwritten)) {
failf(data, "Failed to send GSS-API encryption type.");
gss_delete_sec_context(&gss_status, &gss_context, NULL);
return CURLE_COULDNT_CONNECT;
}
}
else {
- code = Curl_write_plain(data, sock, (char *)gss_w_token.value,
- gss_w_token.length, &written);
- if(code || ((ssize_t)gss_w_token.length != written)) {
+ nwritten = Curl_conn_cf_send(cf->next, data,
+ (char *)gss_w_token.value,
+ gss_w_token.length, &code);
+ if(code || ((ssize_t)gss_w_token.length != nwritten)) {
failf(data, "Failed to send GSS-API encryption type.");
gss_release_buffer(&gss_status, &gss_w_token);
gss_delete_sec_context(&gss_status, &gss_context, NULL);
@@ -439,7 +441,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
gss_release_buffer(&gss_status, &gss_w_token);
}
- result = Curl_blockread_all(data, sock, (char *)socksreq, 4, &actualread);
+ result = Curl_blockread_all(cf, data, (char *)socksreq, 4, &actualread);
if(result || (actualread != 4)) {
failf(data, "Failed to receive GSS-API encryption response.");
gss_delete_sec_context(&gss_status, &gss_context, NULL);
@@ -470,7 +472,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
gss_delete_sec_context(&gss_status, &gss_context, NULL);
return CURLE_OUT_OF_MEMORY;
}
- result = Curl_blockread_all(data, sock, (char *)gss_recv_token.value,
+ result = Curl_blockread_all(cf, data, (char *)gss_recv_token.value,
gss_recv_token.length, &actualread);
if(result || (actualread != us_length)) {
diff --git a/lib/socks_sspi.c b/lib/socks_sspi.c
index 210a0dfbc..d1200ea03 100644
--- a/lib/socks_sspi.c
+++ b/lib/socks_sspi.c
@@ -5,8 +5,8 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2012 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- * Copyright (C) 2012, 2011, Markus Moeller, <markus_moeller@compuserve.com>
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Markus Moeller, <markus_moeller@compuserve.com>
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -29,6 +29,7 @@
#include "urldata.h"
#include "sendf.h"
+#include "cfilters.h"
#include "connect.h"
#include "strerror.h"
#include "timeval.h"
@@ -62,11 +63,11 @@ static int check_sspi_err(struct Curl_easy *data,
}
/* This is the SSPI-using version of this function */
-CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
+CURLcode Curl_SOCKS5_gssapi_negotiate(struct Curl_cfilter *cf,
struct Curl_easy *data)
{
- struct connectdata *conn = data->conn;
- curl_socket_t sock = conn->sock[sockindex];
+ struct connectdata *conn = cf->conn;
+ curl_socket_t sock = conn->sock[cf->sockindex];
CURLcode code;
ssize_t actualread;
ssize_t written;
@@ -206,7 +207,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
us_length = htons((short)sspi_send_token.cbBuffer);
memcpy(socksreq + 2, &us_length, sizeof(short));
- code = Curl_write_plain(data, sock, (char *)socksreq, 4, &written);
+ written = Curl_conn_cf_send(cf->next, data, (char *)socksreq, 4, &code);
if(code || (4 != written)) {
failf(data, "Failed to send SSPI authentication request.");
free(service_name);
@@ -219,8 +220,9 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
return CURLE_COULDNT_CONNECT;
}
- code = Curl_write_plain(data, sock, (char *)sspi_send_token.pvBuffer,
- sspi_send_token.cbBuffer, &written);
+ written = Curl_conn_cf_send(cf->next, data,
+ (char *)sspi_send_token.pvBuffer,
+ sspi_send_token.cbBuffer, &code);
if(code || (sspi_send_token.cbBuffer != (size_t)written)) {
failf(data, "Failed to send SSPI authentication token.");
free(service_name);
@@ -260,7 +262,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
* +----+------+-----+----------------+
*/
- result = Curl_blockread_all(data, sock, (char *)socksreq, 4, &actualread);
+ result = Curl_blockread_all(cf, data, (char *)socksreq, 4, &actualread);
if(result || (actualread != 4)) {
failf(data, "Failed to receive SSPI authentication response.");
free(service_name);
@@ -300,7 +302,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
s_pSecFn->DeleteSecurityContext(&sspi_context);
return CURLE_OUT_OF_MEMORY;
}
- result = Curl_blockread_all(data, sock, (char *)sspi_recv_token.pvBuffer,
+ result = Curl_blockread_all(cf, data, (char *)sspi_recv_token.pvBuffer,
sspi_recv_token.cbBuffer, &actualread);
if(result || (actualread != us_length)) {
@@ -468,7 +470,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
memcpy(socksreq + 2, &us_length, sizeof(short));
}
- code = Curl_write_plain(data, sock, (char *)socksreq, 4, &written);
+ written = Curl_conn_cf_send(cf->next, data, (char *)socksreq, 4, &code);
if(code || (4 != written)) {
failf(data, "Failed to send SSPI encryption request.");
if(sspi_send_token.pvBuffer)
@@ -479,7 +481,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
if(data->set.socks5_gssapi_nec) {
memcpy(socksreq, &gss_enc, 1);
- code = Curl_write_plain(data, sock, (char *)socksreq, 1, &written);
+ written = Curl_conn_cf_send(cf->next, data, (char *)socksreq, 1, &code);
if(code || (1 != written)) {
failf(data, "Failed to send SSPI encryption type.");
s_pSecFn->DeleteSecurityContext(&sspi_context);
@@ -487,8 +489,9 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
}
}
else {
- code = Curl_write_plain(data, sock, (char *)sspi_send_token.pvBuffer,
- sspi_send_token.cbBuffer, &written);
+ written = Curl_conn_cf_send(cf->next, data,
+ (char *)sspi_send_token.pvBuffer,
+ sspi_send_token.cbBuffer, &code);
if(code || (sspi_send_token.cbBuffer != (size_t)written)) {
failf(data, "Failed to send SSPI encryption type.");
if(sspi_send_token.pvBuffer)
@@ -500,7 +503,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
s_pSecFn->FreeContextBuffer(sspi_send_token.pvBuffer);
}
- result = Curl_blockread_all(data, sock, (char *)socksreq, 4, &actualread);
+ result = Curl_blockread_all(cf, data, (char *)socksreq, 4, &actualread);
if(result || (actualread != 4)) {
failf(data, "Failed to receive SSPI encryption response.");
s_pSecFn->DeleteSecurityContext(&sspi_context);
@@ -532,7 +535,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
return CURLE_OUT_OF_MEMORY;
}
- result = Curl_blockread_all(data, sock, (char *)sspi_w_token[0].pvBuffer,
+ result = Curl_blockread_all(cf, data, (char *)sspi_w_token[0].pvBuffer,
sspi_w_token[0].cbBuffer, &actualread);
if(result || (actualread != us_length)) {
diff --git a/lib/speedcheck.c b/lib/speedcheck.c
index 3ddc43d2d..580efbde7 100644
--- a/lib/speedcheck.c
+++ b/lib/speedcheck.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/speedcheck.h b/lib/speedcheck.h
index cb44eb04e..bff2f32b7 100644
--- a/lib/speedcheck.h
+++ b/lib/speedcheck.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/splay.c b/lib/splay.c
index 33b44aa1c..48e079b32 100644
--- a/lib/splay.c
+++ b/lib/splay.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1997 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/splay.h b/lib/splay.h
index 015e2ca52..dd1d07ac2 100644
--- a/lib/splay.h
+++ b/lib/splay.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1997 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/strcase.c b/lib/strcase.c
index 09d2a8a96..7c0b4ef90 100644
--- a/lib/strcase.c
+++ b/lib/strcase.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -83,16 +83,13 @@ char Curl_raw_tolower(char in)
}
/*
- * Curl_strcasecompare() is for doing "raw" case insensitive strings. This is
- * meant to be locale independent and only compare strings we know are safe
- * for this. See
- * https://daniel.haxx.se/blog/2008/10/15/strcasecmp-in-turkish/ for some
- * further explanation to why this function is necessary.
- *
- * @unittest: 1301
+ * curl_strequal() is for doing "raw" case insensitive strings. This is meant
+ * to be locale independent and only compare strings we know are safe for
+ * this. See https://daniel.haxx.se/blog/2008/10/15/strcasecmp-in-turkish/ for
+ * further explanations as to why this function is necessary.
*/
-int Curl_strcasecompare(const char *first, const char *second)
+static int casecompare(const char *first, const char *second)
{
while(*first && *second) {
if(Curl_raw_toupper(*first) != Curl_raw_toupper(*second))
@@ -108,25 +105,22 @@ int Curl_strcasecompare(const char *first, const char *second)
return !*first == !*second;
}
-int Curl_safe_strcasecompare(const char *first, const char *second)
+/* --- public function --- */
+int curl_strequal(const char *first, const char *second)
{
if(first && second)
/* both pointers point to something then compare them */
- return Curl_strcasecompare(first, second);
+ return casecompare(first, second);
/* if both pointers are NULL then treat them as equal */
return (NULL == first && NULL == second);
}
-/*
- * @unittest: 1301
- */
-int Curl_strncasecompare(const char *first, const char *second, size_t max)
+static int ncasecompare(const char *first, const char *second, size_t max)
{
while(*first && *second && max) {
- if(Curl_raw_toupper(*first) != Curl_raw_toupper(*second)) {
- break;
- }
+ if(Curl_raw_toupper(*first) != Curl_raw_toupper(*second))
+ return 0;
max--;
first++;
second++;
@@ -137,6 +131,16 @@ int Curl_strncasecompare(const char *first, const char *second, size_t max)
return Curl_raw_toupper(*first) == Curl_raw_toupper(*second);
}
+/* --- public function --- */
+int curl_strnequal(const char *first, const char *second, size_t max)
+{
+ if(first && second)
+ /* both pointers point to something then compare them */
+ return ncasecompare(first, second, max);
+
+ /* if both pointers are NULL then treat them as equal if max is non-zero */
+ return (NULL == first && NULL == second && max);
+}
/* Copy an upper case version of the string from src to dest. The
* strings may overlap. No more than n characters of the string are copied
* (including any NUL) and the destination string will NOT be
@@ -198,14 +202,3 @@ int Curl_timestrcmp(const char *a, const char *b)
return a || b;
return match;
}
-
-/* --- public functions --- */
-
-int curl_strequal(const char *first, const char *second)
-{
- return Curl_strcasecompare(first, second);
-}
-int curl_strnequal(const char *first, const char *second, size_t max)
-{
- return Curl_strncasecompare(first, second, max);
-}
diff --git a/lib/strcase.h b/lib/strcase.h
index 65a575385..8c50bbcba 100644
--- a/lib/strcase.h
+++ b/lib/strcase.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -35,12 +35,8 @@
* Result is 1 if text matches and 0 if not.
*/
-#define strcasecompare(a,b) Curl_strcasecompare(a,b)
-#define strncasecompare(a,b,c) Curl_strncasecompare(a,b,c)
-
-int Curl_strcasecompare(const char *first, const char *second);
-int Curl_safe_strcasecompare(const char *first, const char *second);
-int Curl_strncasecompare(const char *first, const char *second, size_t max);
+#define strcasecompare(a,b) curl_strequal(a,b)
+#define strncasecompare(a,b,c) curl_strnequal(a,b,c)
char Curl_raw_toupper(char in);
char Curl_raw_tolower(char in);
diff --git a/lib/strdup.c b/lib/strdup.c
index ac22b6dda..2578441c3 100644
--- a/lib/strdup.c
+++ b/lib/strdup.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -26,7 +26,7 @@
#include <curl/curl.h>
-#ifdef WIN32
+#ifdef _WIN32
#include <wchar.h>
#endif
@@ -37,7 +37,7 @@
#include "memdebug.h"
#ifndef HAVE_STRDUP
-char *curlx_strdup(const char *str)
+char *Curl_strdup(const char *str)
{
size_t len;
char *newstr;
@@ -56,7 +56,7 @@ char *curlx_strdup(const char *str)
}
#endif
-#ifdef WIN32
+#ifdef _WIN32
/***************************************************************************
*
* Curl_wcsdup(source)
@@ -101,6 +101,30 @@ void *Curl_memdup(const void *src, size_t length)
/***************************************************************************
*
+ * Curl_strndup(source, length)
+ *
+ * Copies the 'source' string to a newly allocated buffer (that is returned).
+ * Copies not more than 'length' bytes (up to a null terminator) then adds a
+ * null terminator.
+ *
+ * Returns the new pointer or NULL on failure.
+ *
+ ***************************************************************************/
+void *Curl_strndup(const char *src, size_t length)
+{
+ char *buf = memchr(src, '\0', length);
+ if(buf)
+ length = buf - src;
+ buf = malloc(length + 1);
+ if(!buf)
+ return NULL;
+ memcpy(buf, src, length);
+ buf[length] = 0;
+ return buf;
+}
+
+/***************************************************************************
+ *
* Curl_saferealloc(ptr, size)
*
* Does a normal realloc(), but will free the data pointer if the realloc
diff --git a/lib/strdup.h b/lib/strdup.h
index fb46808b8..9f12b2548 100644
--- a/lib/strdup.h
+++ b/lib/strdup.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -26,12 +26,13 @@
#include "curl_setup.h"
#ifndef HAVE_STRDUP
-extern char *curlx_strdup(const char *str);
+char *Curl_strdup(const char *str);
#endif
-#ifdef WIN32
+#ifdef _WIN32
wchar_t* Curl_wcsdup(const wchar_t* src);
#endif
void *Curl_memdup(const void *src, size_t buffer_length);
void *Curl_saferealloc(void *ptr, size_t size);
+void *Curl_strndup(const char *src, size_t length);
#endif /* HEADER_CURL_STRDUP_H */
diff --git a/lib/strerror.c b/lib/strerror.c
index b9a51e26b..0d5f9276f 100644
--- a/lib/strerror.c
+++ b/lib/strerror.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2004 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -48,7 +48,7 @@
#include "curl_memory.h"
#include "memdebug.h"
-#if defined(WIN32) || defined(_WIN32_WCE)
+#if defined(_WIN32) || defined(_WIN32_WCE)
#define PRESERVE_WINDOWS_ERROR_CODE
#endif
@@ -181,13 +181,13 @@ curl_easy_strerror(CURLcode error)
case CURLE_INTERFACE_FAILED:
return "Failed binding local connection end";
- case CURLE_TOO_MANY_REDIRECTS :
+ case CURLE_TOO_MANY_REDIRECTS:
return "Number of redirects hit maximum amount";
case CURLE_UNKNOWN_OPTION:
return "An unknown option was passed in to libcurl";
- case CURLE_SETOPT_OPTION_SYNTAX :
+ case CURLE_SETOPT_OPTION_SYNTAX:
return "Malformed option provided in a setopt";
case CURLE_GOT_NOTHING:
@@ -550,6 +550,9 @@ curl_url_strerror(CURLUcode error)
case CURLUE_BAD_USER:
return "Bad user";
+ case CURLUE_LACKS_IDN:
+ return "libcurl lacks IDN support";
+
case CURLUE_LAST:
break;
}
@@ -759,7 +762,7 @@ get_winsock_error (int err, char *buf, size_t len)
}
#endif /* USE_WINSOCK */
-#if defined(WIN32) || defined(_WIN32_WCE)
+#if defined(_WIN32) || defined(_WIN32_WCE)
/* This is a helper function for Curl_strerror that converts Windows API error
* codes (GetLastError) to error messages.
* Returns NULL if no error message was found for error code.
@@ -801,7 +804,7 @@ get_winapi_error(int err, char *buf, size_t buflen)
return (*buf ? buf : NULL);
}
-#endif /* WIN32 || _WIN32_WCE */
+#endif /* _WIN32 || _WIN32_WCE */
/*
* Our thread-safe and smart strerror() replacement.
@@ -834,15 +837,15 @@ const char *Curl_strerror(int err, char *buf, size_t buflen)
if(!buflen)
return NULL;
-#ifndef WIN32
+#ifndef _WIN32
DEBUGASSERT(err >= 0);
#endif
max = buflen - 1;
*buf = '\0';
-#if defined(WIN32) || defined(_WIN32_WCE)
-#if defined(WIN32)
+#if defined(_WIN32) || defined(_WIN32_WCE)
+#if defined(_WIN32)
/* 'sys_nerr' is the maximum errno number, it is not widely portable */
if(err >= 0 && err < sys_nerr)
strncpy(buf, sys_errlist[err], max);
@@ -920,7 +923,7 @@ const char *Curl_strerror(int err, char *buf, size_t buflen)
* Curl_winapi_strerror:
* Variant of Curl_strerror if the error code is definitely Windows API.
*/
-#if defined(WIN32) || defined(_WIN32_WCE)
+#if defined(_WIN32) || defined(_WIN32_WCE)
const char *Curl_winapi_strerror(DWORD err, char *buf, size_t buflen)
{
#ifdef PRESERVE_WINDOWS_ERROR_CODE
@@ -935,7 +938,7 @@ const char *Curl_winapi_strerror(DWORD err, char *buf, size_t buflen)
#ifndef CURL_DISABLE_VERBOSE_STRINGS
if(!get_winapi_error(err, buf, buflen)) {
- msnprintf(buf, buflen, "Unknown error %u (0x%08X)", err, err);
+ msnprintf(buf, buflen, "Unknown error %lu (0x%08lX)", err, err);
}
#else
{
@@ -955,7 +958,7 @@ const char *Curl_winapi_strerror(DWORD err, char *buf, size_t buflen)
return buf;
}
-#endif /* WIN32 || _WIN32_WCE */
+#endif /* _WIN32 || _WIN32_WCE */
#ifdef USE_WINDOWS_SSPI
/*
@@ -983,6 +986,10 @@ const char *Curl_sspi_strerror(int err, char *buf, size_t buflen)
break;
#define SEC2TXT(sec) case sec: txt = #sec; break
SEC2TXT(CRYPT_E_REVOKED);
+ SEC2TXT(CRYPT_E_NO_REVOCATION_DLL);
+ SEC2TXT(CRYPT_E_NO_REVOCATION_CHECK);
+ SEC2TXT(CRYPT_E_REVOCATION_OFFLINE);
+ SEC2TXT(CRYPT_E_NOT_IN_REVOCATION_DATABASE);
SEC2TXT(SEC_E_ALGORITHM_MISMATCH);
SEC2TXT(SEC_E_BAD_BINDINGS);
SEC2TXT(SEC_E_BAD_PKGID);
diff --git a/lib/strerror.h b/lib/strerror.h
index 658f16c10..680686734 100644
--- a/lib/strerror.h
+++ b/lib/strerror.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -29,7 +29,7 @@
#define STRERROR_LEN 256 /* a suitable length */
const char *Curl_strerror(int err, char *buf, size_t buflen);
-#if defined(WIN32) || defined(_WIN32_WCE)
+#if defined(_WIN32) || defined(_WIN32_WCE)
const char *Curl_winapi_strerror(DWORD err, char *buf, size_t buflen);
#endif
#ifdef USE_WINDOWS_SSPI
diff --git a/lib/strtok.c b/lib/strtok.c
index 6120bcc28..d8e1e8183 100644
--- a/lib/strtok.c
+++ b/lib/strtok.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/strtok.h b/lib/strtok.h
index 641a3daed..321cba232 100644
--- a/lib/strtok.h
+++ b/lib/strtok.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/strtoofft.c b/lib/strtoofft.c
index 30deb8c05..077b25792 100644
--- a/lib/strtoofft.c
+++ b/lib/strtoofft.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -221,6 +221,7 @@ CURLofft curlx_strtoofft(const char *str, char **endp, int base,
curl_off_t number;
errno = 0;
*num = 0; /* clear by default */
+ DEBUGASSERT(base); /* starting now, avoid base zero */
while(*str && ISBLANK(*str))
str++;
diff --git a/lib/strtoofft.h b/lib/strtoofft.h
index 311dae440..34d293ba3 100644
--- a/lib/strtoofft.h
+++ b/lib/strtoofft.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/system_win32.c b/lib/system_win32.c
index bede9c7dc..9408d026b 100644
--- a/lib/system_win32.c
+++ b/lib/system_win32.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2016 - 2022, Steve Holme, <steve_holme@hotmail.com>.
+ * Copyright (C) Steve Holme, <steve_holme@hotmail.com>.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,7 +24,7 @@
#include "curl_setup.h"
-#if defined(WIN32)
+#if defined(_WIN32)
#include <curl/curl.h>
#include "system_win32.h"
@@ -238,4 +238,4 @@ HMODULE Curl_load_library(LPCTSTR filename)
#endif
}
-#endif /* WIN32 */
+#endif /* _WIN32 */
diff --git a/lib/system_win32.h b/lib/system_win32.h
index 167804e3c..256676668 100644
--- a/lib/system_win32.h
+++ b/lib/system_win32.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2016 - 2022, Steve Holme, <steve_holme@hotmail.com>.
+ * Copyright (C) Steve Holme, <steve_holme@hotmail.com>.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -26,7 +26,7 @@
#include "curl_setup.h"
-#if defined(WIN32)
+#if defined(_WIN32)
extern LARGE_INTEGER Curl_freq;
extern bool Curl_isVistaOrGreater;
@@ -42,7 +42,8 @@ extern IF_NAMETOINDEX_FN Curl_if_nametoindex;
/* This is used to dynamically load DLLs */
HMODULE Curl_load_library(LPCTSTR filename);
-
-#endif /* WIN32 */
+#else /* _WIN32 */
+#define Curl_win32_init(x) CURLE_OK
+#endif /* !_WIN32 */
#endif /* HEADER_CURL_SYSTEM_WIN32_H */
diff --git a/lib/telnet.c b/lib/telnet.c
index 923c7f82b..836e255c9 100644
--- a/lib/telnet.c
+++ b/lib/telnet.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -571,7 +571,7 @@ void rec_do(struct Curl_easy *data, int option)
sendsuboption(data, option);
}
else if(tn->subnegotiation[option] == CURL_YES) {
- /* send information to achieve this option*/
+ /* send information to achieve this option */
tn->us[option] = CURL_YES;
send_negotiation(data, CURL_WILL, option);
sendsuboption(data, option);
@@ -770,22 +770,39 @@ static void printsub(struct Curl_easy *data,
}
}
+#ifdef _MSC_VER
+#pragma warning(push)
+/* warning C4706: assignment within conditional expression */
+#pragma warning(disable:4706)
+#endif
+static bool str_is_nonascii(const char *str)
+{
+ char c;
+ while((c = *str++))
+ if(c & 0x80)
+ return TRUE;
+
+ return FALSE;
+}
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
static CURLcode check_telnet_options(struct Curl_easy *data)
{
struct curl_slist *head;
struct curl_slist *beg;
- char option_keyword[128] = "";
- char option_arg[256] = "";
struct TELNET *tn = data->req.p.telnet;
- struct connectdata *conn = data->conn;
CURLcode result = CURLE_OK;
- int binary_option;
/* Add the user name as an environment variable if it
was given on the command line */
if(data->state.aptr.user) {
- msnprintf(option_arg, sizeof(option_arg), "USER,%s", conn->user);
- beg = curl_slist_append(tn->telnet_vars, option_arg);
+ char buffer[256];
+ if(str_is_nonascii(data->conn->user))
+ return CURLE_BAD_FUNCTION_ARGUMENT;
+ msnprintf(buffer, sizeof(buffer), "USER,%s", data->conn->user);
+ beg = curl_slist_append(tn->telnet_vars, buffer);
if(!beg) {
curl_slist_free_all(tn->telnet_vars);
tn->telnet_vars = NULL;
@@ -795,68 +812,100 @@ static CURLcode check_telnet_options(struct Curl_easy *data)
tn->us_preferred[CURL_TELOPT_NEW_ENVIRON] = CURL_YES;
}
- for(head = data->set.telnet_options; head; head = head->next) {
- if(sscanf(head->data, "%127[^= ]%*[ =]%255s",
- option_keyword, option_arg) == 2) {
-
- /* Terminal type */
- if(strcasecompare(option_keyword, "TTYPE")) {
- strncpy(tn->subopt_ttype, option_arg, 31);
- tn->subopt_ttype[31] = 0; /* String termination */
- tn->us_preferred[CURL_TELOPT_TTYPE] = CURL_YES;
+ for(head = data->set.telnet_options; head && !result; head = head->next) {
+ size_t olen;
+ char *option = head->data;
+ char *arg;
+ char *sep = strchr(option, '=');
+ if(sep) {
+ olen = sep - option;
+ arg = ++sep;
+ if(str_is_nonascii(arg))
continue;
- }
+ switch(olen) {
+ case 5:
+ /* Terminal type */
+ if(strncasecompare(option, "TTYPE", 5)) {
+ strncpy(tn->subopt_ttype, arg, 31);
+ tn->subopt_ttype[31] = 0; /* String termination */
+ tn->us_preferred[CURL_TELOPT_TTYPE] = CURL_YES;
+ }
+ else
+ result = CURLE_UNKNOWN_OPTION;
+ break;
- /* Display variable */
- if(strcasecompare(option_keyword, "XDISPLOC")) {
- strncpy(tn->subopt_xdisploc, option_arg, 127);
- tn->subopt_xdisploc[127] = 0; /* String termination */
- tn->us_preferred[CURL_TELOPT_XDISPLOC] = CURL_YES;
- continue;
- }
+ case 8:
+ /* Display variable */
+ if(strncasecompare(option, "XDISPLOC", 8)) {
+ strncpy(tn->subopt_xdisploc, arg, 127);
+ tn->subopt_xdisploc[127] = 0; /* String termination */
+ tn->us_preferred[CURL_TELOPT_XDISPLOC] = CURL_YES;
+ }
+ else
+ result = CURLE_UNKNOWN_OPTION;
+ break;
- /* Environment variable */
- if(strcasecompare(option_keyword, "NEW_ENV")) {
- beg = curl_slist_append(tn->telnet_vars, option_arg);
- if(!beg) {
- result = CURLE_OUT_OF_MEMORY;
- break;
+ case 7:
+ /* Environment variable */
+ if(strncasecompare(option, "NEW_ENV", 7)) {
+ beg = curl_slist_append(tn->telnet_vars, arg);
+ if(!beg) {
+ result = CURLE_OUT_OF_MEMORY;
+ break;
+ }
+ tn->telnet_vars = beg;
+ tn->us_preferred[CURL_TELOPT_NEW_ENVIRON] = CURL_YES;
}
- tn->telnet_vars = beg;
- tn->us_preferred[CURL_TELOPT_NEW_ENVIRON] = CURL_YES;
- continue;
- }
+ else
+ result = CURLE_UNKNOWN_OPTION;
+ break;
- /* Window Size */
- if(strcasecompare(option_keyword, "WS")) {
- if(sscanf(option_arg, "%hu%*[xX]%hu",
- &tn->subopt_wsx, &tn->subopt_wsy) == 2)
- tn->us_preferred[CURL_TELOPT_NAWS] = CURL_YES;
- else {
- failf(data, "Syntax error in telnet option: %s", head->data);
- result = CURLE_SETOPT_OPTION_SYNTAX;
- break;
+ case 2:
+ /* Window Size */
+ if(strncasecompare(option, "WS", 2)) {
+ char *p;
+ unsigned long x = strtoul(arg, &p, 10);
+ unsigned long y = 0;
+ if(x && (x <= 0xffff) && Curl_raw_tolower(*p) == 'x') {
+ p++;
+ y = strtoul(p, NULL, 10);
+ if(y && (y <= 0xffff)) {
+ tn->subopt_wsx = (unsigned short)x;
+ tn->subopt_wsy = (unsigned short)y;
+ tn->us_preferred[CURL_TELOPT_NAWS] = CURL_YES;
+ }
+ }
+ if(!y) {
+ failf(data, "Syntax error in telnet option: %s", head->data);
+ result = CURLE_SETOPT_OPTION_SYNTAX;
+ }
}
- continue;
- }
+ else
+ result = CURLE_UNKNOWN_OPTION;
+ break;
- /* To take care or not of the 8th bit in data exchange */
- if(strcasecompare(option_keyword, "BINARY")) {
- binary_option = atoi(option_arg);
- if(binary_option != 1) {
- tn->us_preferred[CURL_TELOPT_BINARY] = CURL_NO;
- tn->him_preferred[CURL_TELOPT_BINARY] = CURL_NO;
+ case 6:
+ /* To take care or not of the 8th bit in data exchange */
+ if(strncasecompare(option, "BINARY", 6)) {
+ int binary_option = atoi(arg);
+ if(binary_option != 1) {
+ tn->us_preferred[CURL_TELOPT_BINARY] = CURL_NO;
+ tn->him_preferred[CURL_TELOPT_BINARY] = CURL_NO;
+ }
}
- continue;
+ else
+ result = CURLE_UNKNOWN_OPTION;
+ break;
+ default:
+ failf(data, "Unknown telnet option %s", head->data);
+ result = CURLE_UNKNOWN_OPTION;
+ break;
}
-
- failf(data, "Unknown telnet option %s", head->data);
- result = CURLE_UNKNOWN_OPTION;
- break;
}
- failf(data, "Syntax error in telnet option: %s", head->data);
- result = CURLE_SETOPT_OPTION_SYNTAX;
- break;
+ else {
+ failf(data, "Syntax error in telnet option: %s", head->data);
+ result = CURLE_SETOPT_OPTION_SYNTAX;
+ }
}
if(result) {
@@ -881,8 +930,6 @@ static void suboption(struct Curl_easy *data)
ssize_t bytes_written;
size_t len;
int err;
- char varname[128] = "";
- char varval[128] = "";
struct TELNET *tn = data->req.p.telnet;
struct connectdata *conn = data->conn;
@@ -920,19 +967,18 @@ static void suboption(struct Curl_easy *data)
for(v = tn->telnet_vars; v; v = v->next) {
size_t tmplen = (strlen(v->data) + 1);
- /* Add the variable only if it fits */
+ /* Add the variable if it fits */
if(len + tmplen < (int)sizeof(temp)-6) {
- int rv;
- char sep[2] = "";
- varval[0] = 0;
- rv = sscanf(v->data, "%127[^,]%1[,]%127s", varname, sep, varval);
- if(rv == 1)
+ char *s = strchr(v->data, ',');
+ if(!s)
len += msnprintf((char *)&temp[len], sizeof(temp) - len,
- "%c%s", CURL_NEW_ENV_VAR, varname);
- else if(rv >= 2)
+ "%c%s", CURL_NEW_ENV_VAR, v->data);
+ else {
+ size_t vlen = s - v->data;
len += msnprintf((char *)&temp[len], sizeof(temp) - len,
- "%c%s%c%s", CURL_NEW_ENV_VAR, varname,
- CURL_NEW_ENV_VALUE, varval);
+ "%c%.*s%c%s", CURL_NEW_ENV_VAR,
+ (int)vlen, v->data, CURL_NEW_ENV_VALUE, ++s);
+ }
}
}
msnprintf((char *)&temp[len], sizeof(temp) - len,
@@ -1064,7 +1110,7 @@ CURLcode telrcv(struct Curl_easy *data,
break;
case CURL_TS_IAC:
- process_iac:
+process_iac:
DEBUGASSERT(startwrite < 0);
switch(c) {
case CURL_WILL:
@@ -1200,7 +1246,7 @@ static CURLcode send_telnet_data(struct Curl_easy *data,
j = 0;
for(i = 0; i < nread; i++) {
- outbuf[j++] = buffer[i];
+ outbuf[j++] = (unsigned char)buffer[i];
if((unsigned char)buffer[i] == CURL_IAC)
outbuf[j++] = CURL_IAC;
}
@@ -1220,10 +1266,10 @@ static CURLcode send_telnet_data(struct Curl_easy *data,
break;
default: /* write! */
bytes_written = 0;
- result = Curl_write(data, conn->sock[FIRSTSOCKET],
- outbuf + total_written,
- outlen - total_written,
- &bytes_written);
+ result = Curl_nwrite(data, FIRSTSOCKET,
+ outbuf + total_written,
+ outlen - total_written,
+ &bytes_written);
total_written += bytes_written;
break;
}
@@ -1248,9 +1294,6 @@ static CURLcode telnet_done(struct Curl_easy *data,
curl_slist_free_all(tn->telnet_vars);
tn->telnet_vars = NULL;
-
- Curl_safefree(data->req.p.telnet);
-
return CURLE_OK;
}
@@ -1491,6 +1534,7 @@ static CURLcode telnet_do(struct Curl_easy *data, bool *done)
}
while(keepon) {
+ DEBUGF(infof(data, "telnet_do, poll %d fds", poll_cnt));
switch(Curl_poll(pfd, poll_cnt, interval_ms)) {
case -1: /* error, stop reading */
keepon = FALSE;
@@ -1509,6 +1553,13 @@ static CURLcode telnet_do(struct Curl_easy *data, bool *done)
/* returned not-zero, this an error */
if(result) {
keepon = FALSE;
+ /* TODO: in test 1452, macOS sees a ECONNRESET sometimes?
+ * Is this the telnet test server not shutting down the socket
+ * in a clean way? Seems to be timing related, happens more
+ * on slow debug build */
+ if(data->state.os_errno == ECONNRESET) {
+ DEBUGF(infof(data, "telnet_do, unexpected ECONNRESET on recv"));
+ }
break;
}
/* returned zero but actually received 0 or less here,
@@ -1519,8 +1570,9 @@ static CURLcode telnet_do(struct Curl_easy *data, bool *done)
}
total_dl += nread;
- Curl_pgrsSetDownloadCounter(data, total_dl);
- result = telrcv(data, (unsigned char *)buf, nread);
+ result = Curl_pgrsSetDownloadCounter(data, total_dl);
+ if(!result)
+ result = telrcv(data, (unsigned char *)buf, nread);
if(result) {
keepon = FALSE;
break;
diff --git a/lib/telnet.h b/lib/telnet.h
index 6dd99b48d..30782d837 100644
--- a/lib/telnet.h
+++ b/lib/telnet.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/tftp.c b/lib/tftp.c
index 9e6d9490e..663015502 100644
--- a/lib/tftp.c
+++ b/lib/tftp.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -48,6 +48,7 @@
#include "urldata.h"
#include <curl/curl.h>
+#include "cf-socket.h"
#include "transfer.h"
#include "sendf.h"
#include "tftp.h"
@@ -69,8 +70,6 @@
/* RFC2348 allows the block size to be negotiated */
#define TFTP_BLKSIZE_DEFAULT 512
-#define TFTP_BLKSIZE_MIN 8
-#define TFTP_BLKSIZE_MAX 65464
#define TFTP_OPTION_BLKSIZE "blksize"
/* from RFC2349: */
@@ -369,7 +368,7 @@ static CURLcode tftp_parse_option_ack(struct tftp_state_data *state,
/* tsize should be ignored on upload: Who cares about the size of the
remote file? */
- if(!data->set.upload) {
+ if(!data->state.upload) {
if(!tsize) {
failf(data, "invalid tsize -:%s:- value in OACK packet", value);
return CURLE_TFTP_ILLEGAL;
@@ -450,7 +449,7 @@ static CURLcode tftp_send_first(struct tftp_state_data *state,
return result;
}
- if(data->set.upload) {
+ if(data->state.upload) {
/* If we are uploading, send an WRQ */
setpacketevent(&state->spacket, TFTP_EVENT_WRQ);
state->data->req.upload_fromhere =
@@ -485,7 +484,7 @@ static CURLcode tftp_send_first(struct tftp_state_data *state,
if(!data->set.tftp_no_options) {
char buf[64];
/* add tsize option */
- if(data->set.upload && (data->state.infilesize != -1))
+ if(data->state.upload && (data->state.infilesize != -1))
msnprintf(buf, sizeof(buf), "%" CURL_FORMAT_CURL_OFF_T,
data->state.infilesize);
else
@@ -529,8 +528,8 @@ static CURLcode tftp_send_first(struct tftp_state_data *state,
not have a size_t argument, like older unixes that want an 'int' */
senddata = sendto(state->sockfd, (void *)state->spacket.data,
(SEND_TYPE_ARG3)sbytes, 0,
- data->conn->ip_addr->ai_addr,
- data->conn->ip_addr->ai_addrlen);
+ &data->conn->remote_addr->sa_addr,
+ data->conn->remote_addr->addrlen);
if(senddata != (ssize_t)sbytes) {
char buffer[STRERROR_LEN];
failf(data, "%s", Curl_strerror(SOCKERRNO, buffer, sizeof(buffer)));
@@ -539,7 +538,7 @@ static CURLcode tftp_send_first(struct tftp_state_data *state,
break;
case TFTP_EVENT_OACK:
- if(data->set.upload) {
+ if(data->state.upload) {
result = tftp_connect_for_tx(state, event);
}
else {
@@ -977,11 +976,9 @@ static CURLcode tftp_connect(struct Curl_easy *data, bool *done)
return CURLE_OUT_OF_MEMORY;
/* alloc pkt buffers based on specified blksize */
- if(data->set.tftp_blksize) {
+ if(data->set.tftp_blksize)
+ /* range checked when set */
blksize = (int)data->set.tftp_blksize;
- if(blksize > TFTP_BLKSIZE_MAX || blksize < TFTP_BLKSIZE_MIN)
- return CURLE_TFTP_ILLEGAL;
- }
need_blksize = blksize;
/* default size is the fallback when no OACK is received */
@@ -1014,7 +1011,7 @@ static CURLcode tftp_connect(struct Curl_easy *data, bool *done)
state->requested_blksize = blksize;
((struct sockaddr *)&state->local_addr)->sa_family =
- (CURL_SA_FAMILY_T)(conn->ip_addr->ai_family);
+ (CURL_SA_FAMILY_T)(conn->remote_addr->family);
tftp_set_timeouts(state);
@@ -1033,7 +1030,7 @@ static CURLcode tftp_connect(struct Curl_easy *data, bool *done)
* IPv4 and IPv6...
*/
int rc = bind(state->sockfd, (struct sockaddr *)&state->local_addr,
- conn->ip_addr->ai_addrlen);
+ conn->remote_addr->addrlen);
if(rc) {
char buffer[STRERROR_LEN];
failf(data, "bind() failed; %s",
@@ -1106,7 +1103,6 @@ static CURLcode tftp_receive_packet(struct Curl_easy *data)
CURLcode result = CURLE_OK;
struct connectdata *conn = data->conn;
struct tftp_state_data *state = conn->proto.tftpc;
- struct SingleRequest *k = &data->req;
/* Receive the packet */
fromlen = sizeof(fromaddr);
@@ -1144,8 +1140,6 @@ static CURLcode tftp_receive_packet(struct Curl_easy *data)
tftp_state_machine(state, TFTP_EVENT_ERROR);
return result;
}
- k->bytecount += state->rbytes-4;
- Curl_pgrsSetDownloadCounter(data, (curl_off_t) k->bytecount);
}
break;
case TFTP_EVENT_ERROR:
diff --git a/lib/tftp.h b/lib/tftp.h
index 3f1fda638..12404bf6d 100644
--- a/lib/tftp.h
+++ b/lib/tftp.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -25,6 +25,9 @@
***************************************************************************/
#ifndef CURL_DISABLE_TFTP
extern const struct Curl_handler Curl_handler_tftp;
+
+#define TFTP_BLKSIZE_MIN 8
+#define TFTP_BLKSIZE_MAX 65464
#endif
#endif /* HEADER_CURL_TFTP_H */
diff --git a/lib/timediff.c b/lib/timediff.c
index c5893187d..d0824d144 100644
--- a/lib/timediff.c
+++ b/lib/timediff.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -53,7 +53,7 @@ struct timeval *curlx_mstotv(struct timeval *tv, timediff_t ms)
#endif
tv->tv_sec = (time_t)tv_sec;
tv->tv_usec = (suseconds_t)tv_usec;
-#elif defined(WIN32) /* maybe also others in the future */
+#elif defined(_WIN32) /* maybe also others in the future */
#if TIMEDIFF_T_MAX > LONG_MAX
/* tv_sec overflow check on Windows there we know it is long */
if(tv_sec > LONG_MAX)
diff --git a/lib/timediff.h b/lib/timediff.h
index 90e547457..fb318d4f2 100644
--- a/lib/timediff.h
+++ b/lib/timediff.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/timeval.c b/lib/timeval.c
index 647d7b0fc..5a6727cbc 100644
--- a/lib/timeval.c
+++ b/lib/timeval.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,11 +24,10 @@
#include "timeval.h"
-#if defined(WIN32) && !defined(MSDOS)
+#if defined(_WIN32)
-/* set in win32_init() */
-extern LARGE_INTEGER Curl_freq;
-extern bool Curl_isVistaOrGreater;
+#include <curl/curl.h>
+#include "system_win32.h"
/* In case of bug fix this function has a counterpart in tool_util.c */
struct curltime Curl_now(void)
@@ -58,7 +57,8 @@ struct curltime Curl_now(void)
return now;
}
-#elif defined(HAVE_CLOCK_GETTIME_MONOTONIC)
+#elif defined(HAVE_CLOCK_GETTIME_MONOTONIC) || \
+ defined(HAVE_CLOCK_GETTIME_MONOTONIC_RAW)
struct curltime Curl_now(void)
{
@@ -87,6 +87,19 @@ struct curltime Curl_now(void)
have_clock_gettime = TRUE;
#endif
+#ifdef HAVE_CLOCK_GETTIME_MONOTONIC_RAW
+ if(
+#if defined(__APPLE__) && defined(HAVE_BUILTIN_AVAILABLE) && \
+ (HAVE_BUILTIN_AVAILABLE == 1)
+ have_clock_gettime &&
+#endif
+ (0 == clock_gettime(CLOCK_MONOTONIC_RAW, &tsnow))) {
+ cnow.tv_sec = tsnow.tv_sec;
+ cnow.tv_usec = (unsigned int)(tsnow.tv_nsec / 1000);
+ }
+ else
+#endif
+
if(
#if defined(__APPLE__) && defined(HAVE_BUILTIN_AVAILABLE) && \
(HAVE_BUILTIN_AVAILABLE == 1)
@@ -196,6 +209,20 @@ timediff_t Curl_timediff(struct curltime newer, struct curltime older)
}
/*
+ * Returns: time difference in number of milliseconds, rounded up.
+ * For too large diffs it returns max value.
+ */
+timediff_t Curl_timediff_ceil(struct curltime newer, struct curltime older)
+{
+ timediff_t diff = (timediff_t)newer.tv_sec-older.tv_sec;
+ if(diff >= (TIMEDIFF_T_MAX/1000))
+ return TIMEDIFF_T_MAX;
+ else if(diff <= (TIMEDIFF_T_MIN/1000))
+ return TIMEDIFF_T_MIN;
+ return diff * 1000 + (newer.tv_usec - older.tv_usec + 999)/1000;
+}
+
+/*
* Returns: time difference in number of microseconds. For too large diffs it
* returns max value.
*/
diff --git a/lib/timeval.h b/lib/timeval.h
index 8d4fef4e1..33dfb5b10 100644
--- a/lib/timeval.h
+++ b/lib/timeval.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -36,16 +36,24 @@ struct curltime {
struct curltime Curl_now(void);
/*
- * Make sure that the first argument (t1) is the more recent time and t2 is
- * the older time, as otherwise you get a weird negative time-diff back...
+ * Make sure that the first argument (newer) is the more recent time and older
+ * is the older time, as otherwise you get a weird negative time-diff back...
*
* Returns: the time difference in number of milliseconds.
*/
-timediff_t Curl_timediff(struct curltime t1, struct curltime t2);
+timediff_t Curl_timediff(struct curltime newer, struct curltime older);
/*
- * Make sure that the first argument (t1) is the more recent time and t2 is
- * the older time, as otherwise you get a weird negative time-diff back...
+ * Make sure that the first argument (newer) is the more recent time and older
+ * is the older time, as otherwise you get a weird negative time-diff back...
+ *
+ * Returns: the time difference in number of milliseconds, rounded up.
+ */
+timediff_t Curl_timediff_ceil(struct curltime newer, struct curltime older);
+
+/*
+ * Make sure that the first argument (newer) is the more recent time and older
+ * is the older time, as otherwise you get a weird negative time-diff back...
*
* Returns: the time difference in number of microseconds.
*/
diff --git a/lib/transfer.c b/lib/transfer.c
index 441da7342..96f1fde75 100644
--- a/lib/transfer.c
+++ b/lib/transfer.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -40,9 +40,7 @@
#ifdef HAVE_SYS_IOCTL_H
#include <sys/ioctl.h>
#endif
-#ifdef HAVE_SIGNAL_H
#include <signal.h>
-#endif
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
@@ -64,6 +62,7 @@
#include "content_encoding.h"
#include "hostip.h"
+#include "cfilters.h"
#include "transfer.h"
#include "sendf.h"
#include "speedcheck.h"
@@ -72,6 +71,7 @@
#include "url.h"
#include "getinfo.h"
#include "vtls/vtls.h"
+#include "vquic/vquic.h"
#include "select.h"
#include "multiif.h"
#include "connect.h"
@@ -163,9 +163,9 @@ CURLcode Curl_fillreadbuffer(struct Curl_easy *data, size_t bytes,
{
size_t buffersize = bytes;
size_t nread;
-
curl_read_callback readfunc = NULL;
void *extra_data = NULL;
+ int eof_index = 0;
#ifndef CURL_DISABLE_HTTP
if(data->state.trailers_state == TRAILERS_INITIALIZED) {
@@ -223,6 +223,7 @@ CURLcode Curl_fillreadbuffer(struct Curl_easy *data, size_t bytes,
*/
readfunc = trailers_read;
extra_data = (void *)data;
+ eof_index = 1;
}
else
#endif
@@ -231,10 +232,15 @@ CURLcode Curl_fillreadbuffer(struct Curl_easy *data, size_t bytes,
extra_data = data->state.in;
}
- Curl_set_in_callback(data, true);
- nread = readfunc(data->req.upload_fromhere, 1,
- buffersize, extra_data);
- Curl_set_in_callback(data, false);
+ if(!data->req.fread_eof[eof_index]) {
+ Curl_set_in_callback(data, true);
+ nread = readfunc(data->req.upload_fromhere, 1, buffersize, extra_data);
+ Curl_set_in_callback(data, false);
+ /* make sure the callback is not called again after EOF */
+ data->req.fread_eof[eof_index] = !nread;
+ }
+ else
+ nread = 0;
if(nread == CURL_READFUNC_ABORT) {
failf(data, "operation aborted by callback");
@@ -362,114 +368,17 @@ CURLcode Curl_fillreadbuffer(struct Curl_easy *data, size_t bytes,
return CURLE_OK;
}
-
-/*
- * Curl_readrewind() rewinds the read stream. This is typically used for HTTP
- * POST/PUT with multi-pass authentication when a sending was denied and a
- * resend is necessary.
- */
-CURLcode Curl_readrewind(struct Curl_easy *data)
-{
- struct connectdata *conn = data->conn;
- curl_mimepart *mimepart = &data->set.mimepost;
-
- conn->bits.rewindaftersend = FALSE; /* we rewind now */
-
- /* explicitly switch off sending data on this connection now since we are
- about to restart a new transfer and thus we want to avoid inadvertently
- sending more data on the existing connection until the next transfer
- starts */
- data->req.keepon &= ~KEEP_SEND;
-
- /* We have sent away data. If not using CURLOPT_POSTFIELDS or
- CURLOPT_HTTPPOST, call app to rewind
- */
- if(conn->handler->protocol & PROTO_FAMILY_HTTP) {
- struct HTTP *http = data->req.p.http;
-
- if(http->sendit)
- mimepart = http->sendit;
- }
- if(data->set.postfields)
- ; /* do nothing */
- else if(data->state.httpreq == HTTPREQ_POST_MIME ||
- data->state.httpreq == HTTPREQ_POST_FORM) {
- CURLcode result = Curl_mime_rewind(mimepart);
- if(result) {
- failf(data, "Cannot rewind mime/post data");
- return result;
- }
- }
- else {
- if(data->set.seek_func) {
- int err;
-
- Curl_set_in_callback(data, true);
- err = (data->set.seek_func)(data->set.seek_client, 0, SEEK_SET);
- Curl_set_in_callback(data, false);
- if(err) {
- failf(data, "seek callback returned error %d", (int)err);
- return CURLE_SEND_FAIL_REWIND;
- }
- }
- else if(data->set.ioctl_func) {
- curlioerr err;
-
- Curl_set_in_callback(data, true);
- err = (data->set.ioctl_func)(data, CURLIOCMD_RESTARTREAD,
- data->set.ioctl_client);
- Curl_set_in_callback(data, false);
- infof(data, "the ioctl callback returned %d", (int)err);
-
- if(err) {
- failf(data, "ioctl callback returned error %d", (int)err);
- return CURLE_SEND_FAIL_REWIND;
- }
- }
- else {
- /* If no CURLOPT_READFUNCTION is used, we know that we operate on a
- given FILE * stream and we can actually attempt to rewind that
- ourselves with fseek() */
- if(data->state.fread_func == (curl_read_callback)fread) {
- if(-1 != fseek(data->state.in, 0, SEEK_SET))
- /* successful rewind */
- return CURLE_OK;
- }
-
- /* no callback set or failure above, makes us fail at once */
- failf(data, "necessary data rewind wasn't possible");
- return CURLE_SEND_FAIL_REWIND;
- }
- }
- return CURLE_OK;
-}
-
-static int data_pending(const struct Curl_easy *data)
+static int data_pending(struct Curl_easy *data)
{
struct connectdata *conn = data->conn;
-#ifdef ENABLE_QUIC
- if(conn->transport == TRNSPRT_QUIC)
- return Curl_quic_data_pending(data);
-#endif
-
if(conn->handler->protocol&PROTO_FAMILY_FTP)
- return Curl_ssl_data_pending(conn, SECONDARYSOCKET);
+ return Curl_conn_data_pending(data, SECONDARYSOCKET);
/* in the case of libssh2, we can never be really sure that we have emptied
its internal buffers so we MUST always try until we get EAGAIN back */
return conn->handler->protocol&(CURLPROTO_SCP|CURLPROTO_SFTP) ||
-#ifdef USE_NGHTTP2
- /* For HTTP/2, we may read up everything including response body
- with header fields in Curl_http_readwrite_headers. If no
- content-length is provided, curl waits for the connection
- close, which we emulate it using conn->proto.httpc.closed =
- TRUE. The thing is if we read everything, then http2_recv won't
- be called and we cannot signal the HTTP/2 stream has closed. As
- a workaround, we return nonzero here to call http2_recv. */
- ((conn->handler->protocol&PROTO_FAMILY_HTTP) && conn->httpversion >= 20) ||
-#endif
- Curl_ssl_data_pending(conn, FIRSTSOCKET);
+ Curl_conn_data_pending(data, FIRSTSOCKET);
}
/*
@@ -519,13 +428,15 @@ static CURLcode readwrite_data(struct Curl_easy *data,
bool *comeback)
{
CURLcode result = CURLE_OK;
- ssize_t nread; /* number of bytes read */
- size_t excess = 0; /* excess bytes read */
- bool readmore = FALSE; /* used by RTP to signal for more data */
+ char *buf;
+ size_t blen;
+ size_t consumed;
int maxloops = 100;
- char *buf = data->state.buffer;
- DEBUGASSERT(buf);
+ curl_off_t max_recv = data->set.max_recv_speed?
+ data->set.max_recv_speed : CURL_OFF_T_MAX;
+ bool data_eof_handled = FALSE;
+ DEBUGASSERT(data->state.buffer);
*done = FALSE;
*comeback = FALSE;
@@ -533,53 +444,47 @@ static CURLcode readwrite_data(struct Curl_easy *data,
read or we get a CURLE_AGAIN */
do {
bool is_empty_data = FALSE;
- size_t buffersize = data->set.buffer_size;
- size_t bytestoread = buffersize;
-#ifdef USE_NGHTTP2
- bool is_http2 = ((conn->handler->protocol & PROTO_FAMILY_HTTP) &&
- (conn->httpversion == 20));
-#endif
- bool is_http3 =
-#ifdef ENABLE_QUIC
- ((conn->handler->protocol & PROTO_FAMILY_HTTP) &&
- (conn->httpversion == 30));
-#else
- FALSE;
-#endif
-
- if(
-#ifdef USE_NGHTTP2
- /* For HTTP/2, read data without caring about the content length. This
- is safe because body in HTTP/2 is always segmented thanks to its
- framing layer. Meanwhile, we have to call Curl_read to ensure that
- http2_handle_stream_close is called when we read all incoming bytes
- for a particular stream. */
- !is_http2 &&
-#endif
- !is_http3 && /* Same reason mentioned above. */
- k->size != -1 && !k->header) {
- /* make sure we don't read too much */
+ size_t bytestoread = data->set.buffer_size;
+ /* For HTTP/2 and HTTP/3, read data without caring about the content
+ length. This is safe because body in HTTP/2 is always segmented
+ thanks to its framing layer. Meanwhile, we have to call Curl_read
+ to ensure that http2_handle_stream_close is called when we read all
+ incoming bytes for a particular stream. */
+ bool is_http3 = Curl_conn_is_http3(data, conn, FIRSTSOCKET);
+ data_eof_handled = is_http3 || Curl_conn_is_http2(data, conn, FIRSTSOCKET);
+
+ /* Each loop iteration starts with a fresh buffer and handles
+ * all data read into it. */
+ buf = data->state.buffer;
+ blen = 0;
+
+ /* If we are reading BODY data and the connection does NOT handle EOF
+ * and we know the size of the BODY data, limit the read amount */
+ if(!k->header && !data_eof_handled && k->size != -1) {
curl_off_t totalleft = k->size - k->bytecount;
- if(totalleft < (curl_off_t)bytestoread)
+ if(totalleft <= 0)
+ bytestoread = 0;
+ else if(totalleft < (curl_off_t)bytestoread)
bytestoread = (size_t)totalleft;
}
if(bytestoread) {
/* receive data from the network! */
+ ssize_t nread; /* number of bytes read */
result = Curl_read(data, conn->sockfd, buf, bytestoread, &nread);
-
- /* read would've blocked */
- if(CURLE_AGAIN == result)
+ if(CURLE_AGAIN == result) {
+ result = CURLE_OK;
break; /* get out of loop */
-
- if(result>0)
- return result;
+ }
+ else if(result)
+ goto out;
+ DEBUGASSERT(nread >= 0);
+ blen = (size_t)nread;
}
else {
/* read nothing but since we wanted nothing we consider this an OK
situation to proceed from */
DEBUGF(infof(data, "readwrite_data: we're done"));
- nread = 0;
}
if(!k->bytecount) {
@@ -591,69 +496,92 @@ static CURLcode readwrite_data(struct Curl_easy *data,
*didwhat |= KEEP_RECV;
/* indicates data of zero size, i.e. empty file */
- is_empty_data = ((nread == 0) && (k->bodywrites == 0)) ? TRUE : FALSE;
-
- if(0 < nread || is_empty_data) {
- buf[nread] = 0;
+ is_empty_data = ((blen == 0) && (k->bodywrites == 0)) ? TRUE : FALSE;
+
+ if(0 < blen || is_empty_data) {
+ /* data->state.buffer is allocated 1 byte larger than
+ * data->set.buffer_size admits. *wink* */
+ /* TODO: we should really not rely on this being 0-terminated, since
+ * the actual data read might contain 0s. */
+ buf[blen] = 0;
}
- else {
- /* if we receive 0 or less here, either the http2 stream is closed or the
+
+ if(!blen) {
+ /* if we receive 0 or less here, either the data transfer is done or the
server closed the connection and we bail out from this! */
-#ifdef USE_NGHTTP2
- if(is_http2 && !nread)
- DEBUGF(infof(data, "nread == 0, stream closed, bailing"));
- else
-#endif
- if(is_http3 && !nread)
+ if(data_eof_handled)
DEBUGF(infof(data, "nread == 0, stream closed, bailing"));
else
DEBUGF(infof(data, "nread <= 0, server closed connection, bailing"));
- k->keepon &= ~KEEP_RECV;
- break;
+ k->keepon = 0; /* stop sending as well */
+ if(!is_empty_data)
+ break;
}
- /* Default buffer to use when we write the buffer, it may be changed
- in the flow below before the actual storing is done. */
- k->str = buf;
-
if(conn->handler->readwrite) {
- result = conn->handler->readwrite(data, conn, &nread, &readmore);
+ bool readmore = FALSE; /* indicates data is incomplete, need more */
+ consumed = 0;
+ result = conn->handler->readwrite(data, conn, buf, blen,
+ &consumed, &readmore);
if(result)
- return result;
+ goto out;
if(readmore)
break;
+ buf += consumed;
+ blen -= consumed;
+ if(k->download_done) {
+ /* We've stopped dealing with input, get out of the do-while loop */
+ if(blen > 0) {
+ infof(data,
+ "Excess found:"
+ " excess = %zu"
+ " url = %s (zero-length body)",
+ blen, data->state.up.path);
+ }
+
+ /* we make sure that this socket isn't read more now */
+ k->keepon &= ~KEEP_RECV;
+ break;
+ }
}
#ifndef CURL_DISABLE_HTTP
/* Since this is a two-state thing, we check if we are parsing
headers at the moment or not. */
if(k->header) {
- /* we are in parse-the-header-mode */
- bool stop_reading = FALSE;
- result = Curl_http_readwrite_headers(data, conn, &nread, &stop_reading);
+ consumed = 0;
+ result = Curl_http_readwrite_headers(data, conn, buf, blen, &consumed);
if(result)
- return result;
+ goto out;
+ buf += consumed;
+ blen -= consumed;
if(conn->handler->readwrite &&
- (k->maxdownload <= 0 && nread > 0)) {
- result = conn->handler->readwrite(data, conn, &nread, &readmore);
+ (k->maxdownload <= 0 && blen > 0)) {
+ bool readmore = FALSE; /* indicates data is incomplete, need more */
+ consumed = 0;
+ result = conn->handler->readwrite(data, conn, buf, blen,
+ &consumed, &readmore);
if(result)
- return result;
+ goto out;
if(readmore)
break;
+ buf += consumed;
+ blen -= consumed;
}
- if(stop_reading) {
+ if(k->download_done) {
/* We've stopped dealing with input, get out of the do-while loop */
-
- if(nread > 0) {
+ if(blen > 0) {
infof(data,
"Excess found:"
- " excess = %zd"
+ " excess = %zu"
" url = %s (zero-length body)",
- nread, data->state.up.path);
+ blen, data->state.up.path);
}
+ /* we make sure that this socket isn't read more now */
+ k->keepon &= ~KEEP_RECV;
break;
}
}
@@ -663,13 +591,16 @@ static CURLcode readwrite_data(struct Curl_easy *data,
/* This is not an 'else if' since it may be a rest from the header
parsing, where the beginning of the buffer is headers and the end
is non-headers. */
- if(!k->header && (nread > 0 || is_empty_data)) {
+ if(!k->header && (blen > 0 || is_empty_data)) {
- if(data->set.opt_no_body) {
+ if(data->req.no_body && blen > 0) {
/* data arrives although we want none, bail out */
streamclose(conn, "ignoring body");
+ DEBUGF(infof(data, "did not want a BODY, but seeing %zu bytes",
+ blen));
*done = TRUE;
- return CURLE_WEIRD_SERVER_REPLY;
+ result = CURLE_WEIRD_SERVER_REPLY;
+ goto out;
}
#ifndef CURL_DISABLE_HTTP
@@ -680,51 +611,42 @@ static CURLcode readwrite_data(struct Curl_easy *data,
/* HTTP-only checks */
result = Curl_http_firstwrite(data, conn, done);
if(result || *done)
- return result;
+ goto out;
}
} /* this is the first time we write a body part */
#endif /* CURL_DISABLE_HTTP */
- k->bodywrites++;
-
- /* pass data to the debug function before it gets "dechunked" */
- if(data->set.verbose) {
- if(k->badheader) {
- Curl_debug(data, CURLINFO_DATA_IN,
- Curl_dyn_ptr(&data->state.headerb),
- Curl_dyn_len(&data->state.headerb));
- if(k->badheader == HEADER_PARTHEADER)
- Curl_debug(data, CURLINFO_DATA_IN,
- k->str, (size_t)nread);
- }
- else
- Curl_debug(data, CURLINFO_DATA_IN,
- k->str, (size_t)nread);
- }
-
#ifndef CURL_DISABLE_HTTP
if(k->chunk) {
/*
* Here comes a chunked transfer flying and we need to decode this
* properly. While the name says read, this function both reads
- * and writes away the data. The returned 'nread' holds the number
- * of actual data it wrote to the client.
+ * and writes away the data.
*/
CURLcode extra;
- CHUNKcode res =
- Curl_httpchunk_read(data, k->str, nread, &nread, &extra);
+ CHUNKcode res;
+
+ consumed = 0;
+ res = Curl_httpchunk_read(data, buf, blen, &consumed, &extra);
if(CHUNKE_OK < res) {
if(CHUNKE_PASSTHRU_ERROR == res) {
failf(data, "Failed reading the chunked-encoded stream");
- return extra;
+ result = extra;
+ goto out;
}
failf(data, "%s in chunked-encoding", Curl_chunked_strerror(res));
- return CURLE_RECV_ERROR;
+ result = CURLE_RECV_ERROR;
+ goto out;
}
- if(CHUNKE_STOP == res) {
+
+ buf += consumed;
+ blen -= consumed;
+ if(CHUNKE_STOP == res) {
/* we're done reading chunks! */
k->keepon &= ~KEEP_RECV; /* read no more */
+ /* chunks read successfully, download is complete */
+ k->download_done = TRUE;
/* N number of bytes at the end of the str buffer that weren't
written to the client. */
@@ -738,164 +660,100 @@ static CURLcode readwrite_data(struct Curl_easy *data,
}
#endif /* CURL_DISABLE_HTTP */
- /* Account for body content stored in the header buffer */
- if((k->badheader == HEADER_PARTHEADER) && !k->ignorebody) {
- size_t headlen = Curl_dyn_len(&data->state.headerb);
- DEBUGF(infof(data, "Increasing bytecount by %zu", headlen));
- k->bytecount += headlen;
- }
-
- if((-1 != k->maxdownload) &&
- (k->bytecount + nread >= k->maxdownload)) {
-
- excess = (size_t)(k->bytecount + nread - k->maxdownload);
- if(excess > 0 && !k->ignorebody) {
- infof(data,
- "Excess found in a read:"
- " excess = %zu"
- ", size = %" CURL_FORMAT_CURL_OFF_T
- ", maxdownload = %" CURL_FORMAT_CURL_OFF_T
- ", bytecount = %" CURL_FORMAT_CURL_OFF_T,
- excess, k->size, k->maxdownload, k->bytecount);
- connclose(conn, "excess found in a read");
- }
-
- nread = (ssize_t) (k->maxdownload - k->bytecount);
- if(nread < 0) /* this should be unusual */
- nread = 0;
-
- /* HTTP/3 over QUIC should keep reading until QUIC connection
- is closed. In contrast to HTTP/2 which can stop reading
- from TCP connection, HTTP/3 over QUIC needs ACK from server
- to ensure stream closure. It should keep reading. */
- if(!is_http3) {
- k->keepon &= ~KEEP_RECV; /* we're done reading */
- }
- }
-
- k->bytecount += nread;
+ max_recv -= blen;
- Curl_pgrsSetDownloadCounter(data, k->bytecount);
-
- if(!k->chunk && (nread || k->badheader || is_empty_data)) {
+ if(!k->chunk && (blen || k->badheader || is_empty_data)) {
/* If this is chunky transfer, it was already written */
- if(k->badheader && !k->ignorebody) {
+ if(k->badheader) {
/* we parsed a piece of data wrongly assuming it was a header
and now we output it as body instead */
size_t headlen = Curl_dyn_len(&data->state.headerb);
/* Don't let excess data pollute body writes */
- if(k->maxdownload == -1 || (curl_off_t)headlen <= k->maxdownload)
- result = Curl_client_write(data, CLIENTWRITE_BODY,
- Curl_dyn_ptr(&data->state.headerb),
- headlen);
- else
- result = Curl_client_write(data, CLIENTWRITE_BODY,
- Curl_dyn_ptr(&data->state.headerb),
- (size_t)k->maxdownload);
+ if(k->maxdownload != -1 && (curl_off_t)headlen > k->maxdownload)
+ headlen = (size_t)k->maxdownload;
+ result = Curl_client_write(data, CLIENTWRITE_BODY,
+ Curl_dyn_ptr(&data->state.headerb),
+ headlen);
if(result)
- return result;
+ goto out;
}
- if(k->badheader < HEADER_ALLBAD) {
- /* This switch handles various content encodings. If there's an
- error here, be sure to check over the almost identical code
- in http_chunks.c.
- Make sure that ALL_CONTENT_ENCODINGS contains all the
- encodings handled here. */
- if(data->set.http_ce_skip || !k->writer_stack) {
- if(!k->ignorebody && nread) {
+
+ if(blen) {
#ifndef CURL_DISABLE_POP3
- if(conn->handler->protocol & PROTO_FAMILY_POP3)
- result = Curl_pop3_write(data, k->str, nread);
- else
-#endif /* CURL_DISABLE_POP3 */
- result = Curl_client_write(data, CLIENTWRITE_BODY, k->str,
- nread);
- }
+ if(conn->handler->protocol & PROTO_FAMILY_POP3) {
+ result = k->ignorebody? CURLE_OK :
+ Curl_pop3_write(data, buf, blen);
}
- else if(!k->ignorebody && nread)
- result = Curl_unencode_write(data, k->writer_stack, k->str, nread);
+ else
+#endif /* CURL_DISABLE_POP3 */
+ result = Curl_client_write(data, CLIENTWRITE_BODY, buf, blen);
}
- k->badheader = HEADER_NORMAL; /* taken care of now */
+ k->badheader = FALSE; /* taken care of now */
if(result)
- return result;
+ goto out;
}
- } /* if(!header and data to read) */
-
- if(conn->handler->readwrite && excess) {
- /* Parse the excess data */
- k->str += nread;
-
- if(&k->str[excess] > &buf[data->set.buffer_size]) {
- /* the excess amount was too excessive(!), make sure
- it doesn't read out of buffer */
- excess = &buf[data->set.buffer_size] - k->str;
+ if(k->download_done && !is_http3) {
+ /* HTTP/3 over QUIC should keep reading until QUIC connection
+ is closed. In contrast to HTTP/2 which can stop reading
+ from TCP connection, HTTP/3 over QUIC needs ACK from server
+ to ensure stream closure. It should keep reading. */
+ k->keepon &= ~KEEP_RECV; /* we're done reading */
}
- nread = (ssize_t)excess;
-
- result = conn->handler->readwrite(data, conn, &nread, &readmore);
- if(result)
- return result;
-
- if(readmore)
- k->keepon |= KEEP_RECV; /* we're not done reading */
- break;
- }
+ } /* if(!header and data to read) */
if(is_empty_data) {
/* if we received nothing, the server closed the connection and we
are done */
k->keepon &= ~KEEP_RECV;
+ k->download_done = TRUE;
}
- if(k->keepon & KEEP_RECV_PAUSE) {
- /* this is a paused transfer */
+ if((k->keepon & KEEP_RECV_PAUSE) || !(k->keepon & KEEP_RECV)) {
+ /* this is a paused or stopped transfer */
break;
}
- } while(data_pending(data) && maxloops--);
+ } while((max_recv > 0) && data_pending(data) && maxloops--);
- if(maxloops <= 0) {
+ if(maxloops <= 0 || max_recv <= 0) {
/* we mark it as read-again-please */
- conn->cselect_bits = CURL_CSELECT_IN;
+ data->state.dselect_bits = CURL_CSELECT_IN;
*comeback = TRUE;
}
if(((k->keepon & (KEEP_RECV|KEEP_SEND)) == KEEP_SEND) &&
- conn->bits.close) {
+ (conn->bits.close || data_eof_handled)) {
/* When we've read the entire thing and the close bit is set, the server
may now close the connection. If there's now any kind of sending going
on from our side, we need to stop that immediately. */
infof(data, "we are done reading and this is set to close, stop send");
k->keepon &= ~KEEP_SEND; /* no writing anymore either */
+ k->keepon &= ~KEEP_SEND_PAUSE; /* no pausing anymore either */
}
- return CURLE_OK;
+out:
+ if(result)
+ DEBUGF(infof(data, "readwrite_data() -> %d", result));
+ return result;
}
CURLcode Curl_done_sending(struct Curl_easy *data,
struct SingleRequest *k)
{
- struct connectdata *conn = data->conn;
k->keepon &= ~KEEP_SEND; /* we're done writing */
/* These functions should be moved into the handler struct! */
- Curl_http2_done_sending(data, conn);
- Curl_quic_done_sending(data);
+ Curl_conn_ev_data_done_send(data);
- if(conn->bits.rewindaftersend) {
- CURLcode result = Curl_readrewind(data);
- if(result)
- return result;
- }
return CURLE_OK;
}
-#if defined(WIN32) && defined(USE_WINSOCK)
+#if defined(_WIN32) && defined(USE_WINSOCK)
#ifndef SIO_IDEAL_SEND_BACKLOG_QUERY
#define SIO_IDEAL_SEND_BACKLOG_QUERY 0x4004747B
#endif
@@ -933,9 +791,6 @@ static CURLcode readwrite_upload(struct Curl_easy *data,
bool sending_http_headers = FALSE;
struct SingleRequest *k = &data->req;
- if((k->bytecount == 0) && (k->writebytecount == 0))
- Curl_pgrsTime(data, TIMER_STARTTRANSFER);
-
*didwhat |= KEEP_SEND;
do {
@@ -1092,7 +947,15 @@ static CURLcode readwrite_upload(struct Curl_easy *data,
if(result)
return result;
- win_update_buffer_size(conn->writesockfd);
+#if defined(_WIN32) && defined(USE_WINSOCK)
+ {
+ struct curltime n = Curl_now();
+ if(Curl_timediff(n, k->last_sndbuf_update) > 1000) {
+ win_update_buffer_size(conn->writesockfd);
+ k->last_sndbuf_update = n;
+ }
+ }
+#endif
if(k->pendingheader) {
/* parts of what was sent was header */
@@ -1153,6 +1016,19 @@ static CURLcode readwrite_upload(struct Curl_easy *data,
return CURLE_OK;
}
+static int select_bits_paused(struct Curl_easy *data, int select_bits)
+{
+ /* See issue #11982: we really need to be careful not to progress
+ * a transfer direction when that direction is paused. Not all parts
+ * of our state machine are handling PAUSED transfers correctly. So, we
+ * do not want to go there.
+ * NOTE: we are only interested in PAUSE, not HOLD. */
+ return (((select_bits & CURL_CSELECT_IN) &&
+ (data->req.keepon & KEEP_RECV_PAUSE)) ||
+ ((select_bits & CURL_CSELECT_OUT) &&
+ (data->req.keepon & KEEP_SEND_PAUSE)));
+}
+
/*
* Curl_readwrite() is the low-level function to be called when data is to
* be read and written to/from the connection.
@@ -1167,73 +1043,81 @@ CURLcode Curl_readwrite(struct connectdata *conn,
{
struct SingleRequest *k = &data->req;
CURLcode result;
+ struct curltime now;
int didwhat = 0;
+ int select_bits;
+
+ if(data->state.dselect_bits) {
+ if(select_bits_paused(data, data->state.dselect_bits)) {
+ /* leave the bits unchanged, so they'll tell us what to do when
+ * this transfer gets unpaused. */
+ DEBUGF(infof(data, "readwrite, dselect_bits, early return on PAUSED"));
+ result = CURLE_OK;
+ goto out;
+ }
+ select_bits = data->state.dselect_bits;
+ data->state.dselect_bits = 0;
+ }
+ else if(conn->cselect_bits) {
+ /* CAVEAT: adding `select_bits_paused()` check here makes test640 hang
+ * (among others). Which hints at strange state handling in FTP land... */
+ select_bits = conn->cselect_bits;
+ conn->cselect_bits = 0;
+ }
+ else {
+ curl_socket_t fd_read;
+ curl_socket_t fd_write;
+ /* only use the proper socket if the *_HOLD bit is not set simultaneously
+ as then we are in rate limiting state in that transfer direction */
+ if((k->keepon & KEEP_RECVBITS) == KEEP_RECV)
+ fd_read = conn->sockfd;
+ else
+ fd_read = CURL_SOCKET_BAD;
- curl_socket_t fd_read;
- curl_socket_t fd_write;
- int select_res = conn->cselect_bits;
-
- conn->cselect_bits = 0;
-
- /* only use the proper socket if the *_HOLD bit is not set simultaneously as
- then we are in rate limiting state in that transfer direction */
-
- if((k->keepon & KEEP_RECVBITS) == KEEP_RECV)
- fd_read = conn->sockfd;
- else
- fd_read = CURL_SOCKET_BAD;
-
- if((k->keepon & KEEP_SENDBITS) == KEEP_SEND)
- fd_write = conn->writesockfd;
- else
- fd_write = CURL_SOCKET_BAD;
+ if((k->keepon & KEEP_SENDBITS) == KEEP_SEND)
+ fd_write = conn->writesockfd;
+ else
+ fd_write = CURL_SOCKET_BAD;
-#if defined(USE_HTTP2) || defined(USE_HTTP3)
- if(data->state.drain) {
- select_res |= CURL_CSELECT_IN;
- DEBUGF(infof(data, "Curl_readwrite: forcibly told to drain data"));
+ select_bits = Curl_socket_check(fd_read, CURL_SOCKET_BAD, fd_write, 0);
}
-#endif
-
- if(!select_res) /* Call for select()/poll() only, if read/write/error
- status is not known. */
- select_res = Curl_socket_check(fd_read, CURL_SOCKET_BAD, fd_write, 0);
- if(select_res == CURL_CSELECT_ERR) {
+ if(select_bits == CURL_CSELECT_ERR) {
failf(data, "select/poll returned error");
- return CURLE_SEND_ERROR;
+ result = CURLE_SEND_ERROR;
+ goto out;
}
#ifdef USE_HYPER
if(conn->datastream) {
- result = conn->datastream(data, conn, &didwhat, done, select_res);
+ result = conn->datastream(data, conn, &didwhat, done, select_bits);
if(result || *done)
- return result;
+ goto out;
}
else {
#endif
/* We go ahead and do a read if we have a readable socket or if
the stream was rewound (in which case we have data in a
buffer) */
- if((k->keepon & KEEP_RECV) && (select_res & CURL_CSELECT_IN)) {
+ if((k->keepon & KEEP_RECV) && (select_bits & CURL_CSELECT_IN)) {
result = readwrite_data(data, conn, k, &didwhat, done, comeback);
if(result || *done)
- return result;
+ goto out;
}
/* If we still have writing to do, we check if we have a writable socket. */
- if((k->keepon & KEEP_SEND) && (select_res & CURL_CSELECT_OUT)) {
+ if((k->keepon & KEEP_SEND) && (select_bits & CURL_CSELECT_OUT)) {
/* write */
result = readwrite_upload(data, conn, &didwhat);
if(result)
- return result;
+ goto out;
}
#ifdef USE_HYPER
}
#endif
- k->now = Curl_now();
+ now = Curl_now();
if(!didwhat) {
/* no read no write, this is a timeout? */
if(k->exp100 == EXP100_AWAITING_CONTINUE) {
@@ -1250,7 +1134,7 @@ CURLcode Curl_readwrite(struct connectdata *conn,
*/
- timediff_t ms = Curl_timediff(k->now, k->start100);
+ timediff_t ms = Curl_timediff(now, k->start100);
if(ms >= data->set.expect_100_timeout) {
/* we've waited long enough, continue anyway */
k->exp100 = EXP100_SEND_DATA;
@@ -1260,38 +1144,35 @@ CURLcode Curl_readwrite(struct connectdata *conn,
}
}
-#ifdef ENABLE_QUIC
- if(conn->transport == TRNSPRT_QUIC) {
- result = Curl_quic_idle(data);
- if(result)
- return result;
- }
-#endif
+ result = Curl_conn_ev_data_idle(data);
+ if(result)
+ goto out;
}
if(Curl_pgrsUpdate(data))
result = CURLE_ABORTED_BY_CALLBACK;
else
- result = Curl_speedcheck(data, k->now);
+ result = Curl_speedcheck(data, now);
if(result)
- return result;
+ goto out;
if(k->keepon) {
- if(0 > Curl_timeleft(data, &k->now, FALSE)) {
+ if(0 > Curl_timeleft(data, &now, FALSE)) {
if(k->size != -1) {
failf(data, "Operation timed out after %" CURL_FORMAT_TIMEDIFF_T
" milliseconds with %" CURL_FORMAT_CURL_OFF_T " out of %"
CURL_FORMAT_CURL_OFF_T " bytes received",
- Curl_timediff(k->now, data->progress.t_startsingle),
+ Curl_timediff(now, data->progress.t_startsingle),
k->bytecount, k->size);
}
else {
failf(data, "Operation timed out after %" CURL_FORMAT_TIMEDIFF_T
" milliseconds with %" CURL_FORMAT_CURL_OFF_T " bytes received",
- Curl_timediff(k->now, data->progress.t_startsingle),
+ Curl_timediff(now, data->progress.t_startsingle),
k->bytecount);
}
- return CURLE_OPERATION_TIMEDOUT;
+ result = CURLE_OPERATION_TIMEDOUT;
+ goto out;
}
}
else {
@@ -1300,7 +1181,7 @@ CURLcode Curl_readwrite(struct connectdata *conn,
* returning.
*/
- if(!(data->set.opt_no_body) && (k->size != -1) &&
+ if(!(data->req.no_body) && (k->size != -1) &&
(k->bytecount != k->size) &&
#ifdef CURL_DO_LINEEND_CONV
/* Most FTP servers don't adjust their file SIZE response for CRLFs,
@@ -1312,9 +1193,10 @@ CURLcode Curl_readwrite(struct connectdata *conn,
!k->newurl) {
failf(data, "transfer closed with %" CURL_FORMAT_CURL_OFF_T
" bytes remaining to read", k->size - k->bytecount);
- return CURLE_PARTIAL_FILE;
+ result = CURLE_PARTIAL_FILE;
+ goto out;
}
- if(!(data->set.opt_no_body) && k->chunk &&
+ if(!(data->req.no_body) && k->chunk &&
(conn->chunk.state != CHUNK_STOP)) {
/*
* In chunked mode, return an error if the connection is closed prior to
@@ -1326,17 +1208,21 @@ CURLcode Curl_readwrite(struct connectdata *conn,
*
*/
failf(data, "transfer closed with outstanding read data remaining");
- return CURLE_PARTIAL_FILE;
+ result = CURLE_PARTIAL_FILE;
+ goto out;
+ }
+ if(Curl_pgrsUpdate(data)) {
+ result = CURLE_ABORTED_BY_CALLBACK;
+ goto out;
}
- if(Curl_pgrsUpdate(data))
- return CURLE_ABORTED_BY_CALLBACK;
}
/* Now update the "done" boolean we return */
- *done = (0 == (k->keepon&(KEEP_RECV|KEEP_SEND|
- KEEP_RECV_PAUSE|KEEP_SEND_PAUSE))) ? TRUE : FALSE;
-
- return CURLE_OK;
+ *done = (0 == (k->keepon&(KEEP_RECVBITS|KEEP_SENDBITS))) ? TRUE : FALSE;
+out:
+ if(result)
+ DEBUGF(infof(data, "Curl_readwrite() -> %d", result));
+ return result;
}
/*
@@ -1367,7 +1253,6 @@ int Curl_single_getsock(struct Curl_easy *data,
/* don't include HOLD and PAUSE connections */
if((data->req.keepon & KEEP_SENDBITS) == KEEP_SEND) {
-
if((conn->sockfd != conn->writesockfd) ||
bitmap == GETSOCK_BLANK) {
/* only if they are not the same socket and we have a readable
@@ -1392,6 +1277,7 @@ void Curl_init_CONNECT(struct Curl_easy *data)
{
data->state.fread_func = data->set.fread_func_set;
data->state.in = data->set.in_set;
+ data->state.upload = (data->state.httpreq == HTTPREQ_PUT);
}
/*
@@ -1427,8 +1313,16 @@ CURLcode Curl_pretransfer(struct Curl_easy *data)
}
}
+ if(data->set.postfields && data->set.set_resume_from) {
+ /* we can't */
+ failf(data, "cannot mix POSTFIELDS with RESUME_FROM");
+ return CURLE_BAD_FUNCTION_ARGUMENT;
+ }
+
data->state.prefer_ascii = data->set.prefer_ascii;
+#ifdef CURL_LIST_ONLY_PROTOCOL
data->state.list_only = data->set.list_only;
+#endif
data->state.httpreq = data->set.method;
data->state.url = data->set.str[STRING_SET_URL];
@@ -1449,6 +1343,7 @@ CURLcode Curl_pretransfer(struct Curl_easy *data)
data->state.authhost.want = data->set.httpauth;
data->state.authproxy.want = data->set.proxyauth;
Curl_safefree(data->info.wouldredirect);
+ Curl_data_priority_clear_state(data);
if(data->state.httpreq == HTTPREQ_PUT)
data->state.infilesize = data->set.filesize;
@@ -1461,15 +1356,16 @@ CURLcode Curl_pretransfer(struct Curl_easy *data)
else
data->state.infilesize = 0;
-#ifndef CURL_DISABLE_COOKIES
/* If there is a list of cookie files to read, do it now! */
- if(data->state.cookielist)
- Curl_cookie_loadfiles(data);
-#endif
+ Curl_cookie_loadfiles(data);
+
/* If there is a list of host pairs to deal with */
if(data->state.resolve)
result = Curl_loadhostpairs(data);
+ /* If there is a list of hsts files to read */
+ Curl_hsts_loadfiles(data);
+
if(!result) {
/* Allow data->set.use_port to set which port to use. This needs to be
* disabled for example when we follow Location: headers to URLs using
@@ -1488,7 +1384,7 @@ CURLcode Curl_pretransfer(struct Curl_easy *data)
Curl_pgrsResetTransferSizes(data);
Curl_pgrsStartNow(data);
- /* In case the handle is re-used and an authentication method was picked
+ /* In case the handle is reused and an authentication method was picked
in the session we need to make sure we only use the one(s) we now
consider to be fine */
data->state.authhost.picked &= data->state.authhost.want;
@@ -1497,21 +1393,30 @@ CURLcode Curl_pretransfer(struct Curl_easy *data)
#ifndef CURL_DISABLE_FTP
data->state.wildcardmatch = data->set.wildcard_enabled;
if(data->state.wildcardmatch) {
- struct WildcardData *wc = &data->wildcard;
+ struct WildcardData *wc;
+ if(!data->wildcard) {
+ data->wildcard = calloc(1, sizeof(struct WildcardData));
+ if(!data->wildcard)
+ return CURLE_OUT_OF_MEMORY;
+ }
+ wc = data->wildcard;
if(wc->state < CURLWC_INIT) {
+ if(wc->ftpwc)
+ wc->dtor(wc->ftpwc);
+ Curl_safefree(wc->pattern);
+ Curl_safefree(wc->path);
result = Curl_wildcard_init(wc); /* init wildcard structures */
if(result)
return CURLE_OUT_OF_MEMORY;
}
}
#endif
- Curl_http2_init_state(&data->state);
result = Curl_hsts_loadcb(data, data->hsts);
}
/*
* Set user-agent. Used for HTTP, but since we can attempt to tunnel
- * basically anything through a http proxy we can't limit this based on
+ * basically anything through an HTTP proxy we can't limit this based on
* protocol.
*/
if(data->set.str[STRING_USERAGENT]) {
@@ -1591,10 +1496,8 @@ CURLcode Curl_follow(struct Curl_easy *data,
to URL */
}
else {
- /* mark the next request as a followed location: */
- data->state.this_is_a_follow = TRUE;
-
- data->state.followlocation++; /* count location-followers */
+ data->state.followlocation++; /* count redirect-followings, including
+ auth reloads */
if(data->set.http_auto_referer) {
CURLU *u;
@@ -1637,10 +1540,11 @@ CURLcode Curl_follow(struct Curl_easy *data,
if((type != FOLLOW_RETRY) &&
(data->req.httpcode != 401) && (data->req.httpcode != 407) &&
- Curl_is_absolute_url(newurl, NULL, 0, FALSE))
+ Curl_is_absolute_url(newurl, NULL, 0, FALSE)) {
/* If this is not redirect due to a 401 or 407 response and an absolute
URL: don't allow a custom port number */
disallowport = TRUE;
+ }
DEBUGASSERT(data->state.uh);
uc = curl_url_set(data->state.uh, CURLUPART_URL, newurl,
@@ -1700,7 +1604,7 @@ CURLcode Curl_follow(struct Curl_easy *data,
return Curl_uc_to_curlcode(uc);
}
- p = Curl_builtin_scheme(scheme, CURL_ZERO_TERMINATED);
+ p = Curl_get_scheme_handler(scheme);
if(p && (p->protocol != data->info.conn_protocol)) {
infof(data, "Clear auth, redirects scheme from %s to %s",
data->info.conn_scheme, scheme);
@@ -1743,7 +1647,7 @@ CURLcode Curl_follow(struct Curl_easy *data,
* differently based on exactly what return code there was.
*
* News from 7.10.6: we can also get here on a 401 or 407, in case we act on
- * a HTTP (proxy-) authentication scheme other than Basic.
+ * an HTTP (proxy-) authentication scheme other than Basic.
*/
switch(data->info.httpcode) {
/* 401 - Act on a WWW-Authenticate, we keep on moving and do the
@@ -1821,9 +1725,8 @@ CURLcode Curl_follow(struct Curl_easy *data,
data->state.httpreq != HTTPREQ_POST_MIME) ||
!(data->set.keep_post & CURL_REDIR_POST_303))) {
data->state.httpreq = HTTPREQ_GET;
- data->set.upload = false;
infof(data, "Switch to %s",
- data->set.opt_no_body?"HEAD":"GET");
+ data->req.no_body?"HEAD":"GET");
}
break;
case 304: /* Not Modified */
@@ -1859,18 +1762,18 @@ CURLcode Curl_retry_request(struct Curl_easy *data, char **url)
/* if we're talking upload, we can't do the checks below, unless the protocol
is HTTP as when uploading over HTTP we will still get a response */
- if(data->set.upload &&
+ if(data->state.upload &&
!(conn->handler->protocol&(PROTO_FAMILY_HTTP|CURLPROTO_RTSP)))
return CURLE_OK;
if((data->req.bytecount + data->req.headerbytecount == 0) &&
conn->bits.reuse &&
- (!data->set.opt_no_body || (conn->handler->protocol & PROTO_FAMILY_HTTP))
+ (!data->req.no_body || (conn->handler->protocol & PROTO_FAMILY_HTTP))
#ifndef CURL_DISABLE_RTSP
&& (data->set.rtspreq != RTSPREQ_RECEIVE)
#endif
)
- /* We got no data, we attempted to re-use a connection. For HTTP this
+ /* We got no data, we attempted to reuse a connection. For HTTP this
can be a retry so we try again regardless if we expected a body.
For other protocols we only try again only if we expected a body.
@@ -1911,14 +1814,10 @@ CURLcode Curl_retry_request(struct Curl_easy *data, char **url)
transferred! */
- if(conn->handler->protocol&PROTO_FAMILY_HTTP) {
- if(data->req.writebytecount) {
- CURLcode result = Curl_readrewind(data);
- if(result) {
- Curl_safefree(*url);
- return result;
- }
- }
+ if((conn->handler->protocol&PROTO_FAMILY_HTTP) &&
+ data->req.writebytecount) {
+ data->state.rewindbeforesend = TRUE;
+ infof(data, "state.rewindbeforesend = TRUE");
}
}
return CURLE_OK;
@@ -1949,7 +1848,7 @@ Curl_setup_transfer(
httpsending = ((conn->handler->protocol&PROTO_FAMILY_HTTP) &&
(http->sending == HTTPSEND_REQUEST));
- if(conn->bits.multiplex || conn->httpversion == 20 || httpsending) {
+ if(conn->bits.multiplex || conn->httpversion >= 20 || httpsending) {
/* when multiplexing, the read/write sockets need to be the same! */
conn->sockfd = sockindex == -1 ?
((writesockindex == -1 ? CURL_SOCKET_BAD : conn->sock[writesockindex])) :
@@ -1979,7 +1878,7 @@ Curl_setup_transfer(
Curl_pgrsSetDownloadSize(data, size);
}
/* we want header and/or body, if neither then don't do this! */
- if(k->getheader || !data->set.opt_no_body) {
+ if(k->getheader || !data->req.no_body) {
if(sockindex != -1)
k->keepon |= KEEP_RECV;
@@ -2015,6 +1914,6 @@ Curl_setup_transfer(
k->keepon |= KEEP_SEND;
}
} /* if(writesockindex != -1) */
- } /* if(k->getheader || !data->set.opt_no_body) */
+ } /* if(k->getheader || !data->req.no_body) */
}
diff --git a/lib/transfer.h b/lib/transfer.h
index 65fe68e81..536ac249b 100644
--- a/lib/transfer.h
+++ b/lib/transfer.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -50,7 +50,6 @@ CURLcode Curl_readwrite(struct connectdata *conn,
bool *comeback);
int Curl_single_getsock(struct Curl_easy *data,
struct connectdata *conn, curl_socket_t *socks);
-CURLcode Curl_readrewind(struct Curl_easy *data);
CURLcode Curl_fillreadbuffer(struct Curl_easy *data, size_t bytes,
size_t *nreadp);
CURLcode Curl_retry_request(struct Curl_easy *data, char **url);
diff --git a/lib/url.c b/lib/url.c
index be5ffca2d..b81785fe2 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -61,26 +61,9 @@
#include <limits.h>
-#ifdef USE_LIBIDN2
-#include <idn2.h>
-
-#if defined(WIN32) && defined(UNICODE)
-#define IDN2_LOOKUP(name, host, flags) \
- idn2_lookup_u8((const uint8_t *)name, (uint8_t **)host, flags)
-#else
-#define IDN2_LOOKUP(name, host, flags) \
- idn2_lookup_ul((const char *)name, (char **)host, flags)
-#endif
-
-#elif defined(USE_WIN32_IDN)
-/* prototype for Curl_win32_idn_to_ascii() */
-bool Curl_win32_idn_to_ascii(const char *in, char **out);
-#endif /* USE_LIBIDN2 */
-
#include "doh.h"
#include "urldata.h"
#include "netrc.h"
-
#include "formdata.h"
#include "mime.h"
#include "vtls/vtls.h"
@@ -107,6 +90,8 @@ bool Curl_win32_idn_to_ascii(const char *in, char **out);
#include "system_win32.h"
#include "hsts.h"
#include "noproxy.h"
+#include "cfilters.h"
+#include "idn.h"
/* And now for the protocols */
#include "ftp.h"
@@ -140,7 +125,15 @@ bool Curl_win32_idn_to_ascii(const char *in, char **out);
#include "curl_memory.h"
#include "memdebug.h"
-static void conn_free(struct connectdata *conn);
+#ifndef ARRAYSIZE
+#define ARRAYSIZE(A) (sizeof(A)/sizeof((A)[0]))
+#endif
+
+#ifdef USE_NGHTTP2
+static void data_priority_cleanup(struct Curl_easy *data);
+#else
+#define data_priority_cleanup(x)
+#endif
/* Some parts of the code (e.g. chunked encoding) assume this buffer has at
* more than just a few bytes to play with. Don't let it become too small or
@@ -175,157 +168,6 @@ static curl_prot_t get_protocol_family(const struct Curl_handler *h)
return h->family;
}
-
-/*
- * Protocol table. Schemes (roughly) in 2019 popularity order:
- *
- * HTTPS, HTTP, FTP, FTPS, SFTP, FILE, SCP, SMTP, LDAP, IMAPS, TELNET, IMAP,
- * LDAPS, SMTPS, TFTP, SMB, POP3, GOPHER POP3S, RTSP, RTMP, SMBS, DICT
- */
-static const struct Curl_handler * const protocols[] = {
-
-#if defined(USE_SSL) && !defined(CURL_DISABLE_HTTP)
- &Curl_handler_https,
-#endif
-
-#ifndef CURL_DISABLE_HTTP
- &Curl_handler_http,
-#endif
-
-#ifdef USE_WEBSOCKETS
-#if defined(USE_SSL) && !defined(CURL_DISABLE_HTTP)
- &Curl_handler_wss,
-#endif
-
-#ifndef CURL_DISABLE_HTTP
- &Curl_handler_ws,
-#endif
-#endif
-
-#ifndef CURL_DISABLE_FTP
- &Curl_handler_ftp,
-#endif
-
-#if defined(USE_SSL) && !defined(CURL_DISABLE_FTP)
- &Curl_handler_ftps,
-#endif
-
-#if defined(USE_SSH)
- &Curl_handler_sftp,
-#endif
-
-#ifndef CURL_DISABLE_FILE
- &Curl_handler_file,
-#endif
-
-#if defined(USE_SSH) && !defined(USE_WOLFSSH)
- &Curl_handler_scp,
-#endif
-
-#ifndef CURL_DISABLE_SMTP
- &Curl_handler_smtp,
-#ifdef USE_SSL
- &Curl_handler_smtps,
-#endif
-#endif
-
-#ifndef CURL_DISABLE_LDAP
- &Curl_handler_ldap,
-#if !defined(CURL_DISABLE_LDAPS) && \
- ((defined(USE_OPENLDAP) && defined(USE_SSL)) || \
- (!defined(USE_OPENLDAP) && defined(HAVE_LDAP_SSL)))
- &Curl_handler_ldaps,
-#endif
-#endif
-
-#ifndef CURL_DISABLE_IMAP
- &Curl_handler_imap,
-#ifdef USE_SSL
- &Curl_handler_imaps,
-#endif
-#endif
-
-#ifndef CURL_DISABLE_TELNET
- &Curl_handler_telnet,
-#endif
-
-#ifndef CURL_DISABLE_TFTP
- &Curl_handler_tftp,
-#endif
-
-#ifndef CURL_DISABLE_POP3
- &Curl_handler_pop3,
-#ifdef USE_SSL
- &Curl_handler_pop3s,
-#endif
-#endif
-
-#if !defined(CURL_DISABLE_SMB) && defined(USE_CURL_NTLM_CORE) && \
- (SIZEOF_CURL_OFF_T > 4)
- &Curl_handler_smb,
-#ifdef USE_SSL
- &Curl_handler_smbs,
-#endif
-#endif
-
-#ifndef CURL_DISABLE_RTSP
- &Curl_handler_rtsp,
-#endif
-
-#ifndef CURL_DISABLE_MQTT
- &Curl_handler_mqtt,
-#endif
-
-#ifndef CURL_DISABLE_GOPHER
- &Curl_handler_gopher,
-#ifdef USE_SSL
- &Curl_handler_gophers,
-#endif
-#endif
-
-#ifdef USE_LIBRTMP
- &Curl_handler_rtmp,
- &Curl_handler_rtmpt,
- &Curl_handler_rtmpe,
- &Curl_handler_rtmpte,
- &Curl_handler_rtmps,
- &Curl_handler_rtmpts,
-#endif
-
-#ifndef CURL_DISABLE_DICT
- &Curl_handler_dict,
-#endif
-
- (struct Curl_handler *) NULL
-};
-
-/*
- * Dummy handler for undefined protocol schemes.
- */
-
-static const struct Curl_handler Curl_handler_dummy = {
- "<no protocol>", /* scheme */
- ZERO_NULL, /* setup_connection */
- ZERO_NULL, /* do_it */
- ZERO_NULL, /* done */
- ZERO_NULL, /* do_more */
- ZERO_NULL, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- ZERO_NULL, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- ZERO_NULL, /* disconnect */
- ZERO_NULL, /* readwrite */
- ZERO_NULL, /* connection_check */
- ZERO_NULL, /* attach connection */
- 0, /* defport */
- 0, /* protocol */
- 0, /* family */
- PROTOPT_NONE /* flags */
-};
-
void Curl_freeset(struct Curl_easy *data)
{
/* Free all dynamic strings stored in the data->set substructure. */
@@ -352,6 +194,11 @@ void Curl_freeset(struct Curl_easy *data)
data->state.url = NULL;
Curl_mime_cleanpart(&data->set.mimepost);
+
+#ifndef CURL_DISABLE_COOKIES
+ curl_slist_free_all(data->state.cookielist);
+ data->state.cookielist = NULL;
+#endif
}
/* free the URL pieces */
@@ -379,7 +226,6 @@ static void up_free(struct Curl_easy *data)
CURLcode Curl_close(struct Curl_easy **datap)
{
- struct Curl_multi *m;
struct Curl_easy *data;
if(!datap || !*datap)
@@ -393,23 +239,19 @@ CURLcode Curl_close(struct Curl_easy **datap)
/* Detach connection if any is left. This should not be normal, but can be
the case for example with CONNECT_ONLY + recv/send (test 556) */
Curl_detach_connection(data);
- m = data->multi;
- if(m)
- /* This handle is still part of a multi handle, take care of this first
- and detach this handle from there. */
- curl_multi_remove_handle(data->multi, data);
-
- if(data->multi_easy) {
- /* when curl_easy_perform() is used, it creates its own multi handle to
- use and this is the one */
- curl_multi_cleanup(data->multi_easy);
- data->multi_easy = NULL;
- }
+ if(!data->state.internal) {
+ if(data->multi)
+ /* This handle is still part of a multi handle, take care of this first
+ and detach this handle from there. */
+ curl_multi_remove_handle(data->multi, data);
- /* Destroy the timeout list that is held in the easy handle. It is
- /normally/ done by curl_multi_remove_handle() but this is "just in
- case" */
- Curl_llist_destroy(&data->state.timeoutlist, NULL);
+ if(data->multi_easy) {
+ /* when curl_easy_perform() is used, it creates its own multi handle to
+ use and this is the one */
+ curl_multi_cleanup(data->multi_easy);
+ data->multi_easy = NULL;
+ }
+ }
data->magic = 0; /* force a clear AFTER the possibly enforced removal from
the multi handle, since that function uses the magic
@@ -445,18 +287,18 @@ CURLcode Curl_close(struct Curl_easy **datap)
Curl_altsvc_save(data, data->asi, data->set.str[STRING_ALTSVC]);
Curl_altsvc_cleanup(&data->asi);
Curl_hsts_save(data, data->hsts, data->set.str[STRING_HSTS]);
- Curl_hsts_cleanup(&data->hsts);
-#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_CRYPTO_AUTH)
+#ifndef CURL_DISABLE_HSTS
+ if(!data->share || !data->share->hsts)
+ Curl_hsts_cleanup(&data->hsts);
+ curl_slist_free_all(data->state.hstslist); /* clean up list */
+#endif
+#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_DIGEST_AUTH)
Curl_http_auth_cleanup_digest(data);
#endif
Curl_safefree(data->info.contenttype);
Curl_safefree(data->info.wouldredirect);
- /* this destroys the channel and we cannot use it anymore after this */
- Curl_resolver_cancel(data);
- Curl_resolver_cleanup(data->state.async.resolver);
-
- Curl_http2_cleanup_dependencies(data);
+ data_priority_cleanup(data);
/* No longer a dirty share, if it exists */
if(data->share) {
@@ -489,6 +331,11 @@ CURLcode Curl_close(struct Curl_easy **datap)
}
#endif
+#ifndef CURL_DISABLE_HTTP
+ Curl_mime_cleanpart(data->state.formp);
+ Curl_safefree(data->state.formp);
+#endif
+
/* destruct wildcard structures if it is needed */
Curl_wildcard_dtor(&data->wildcard);
Curl_freeset(data);
@@ -522,7 +369,7 @@ CURLcode Curl_init_userdefined(struct Curl_easy *data)
set->filesize = -1; /* we don't know the size */
set->postfieldsize = -1; /* unknown size */
- set->maxredirs = -1; /* allow any amount by default */
+ set->maxredirs = 30; /* sensible default */
set->method = HTTPREQ_GET; /* Default HTTP request */
#ifndef CURL_DISABLE_RTSP
@@ -539,12 +386,14 @@ CURLcode Curl_init_userdefined(struct Curl_easy *data)
/* Set the default size of the SSL session ID cache */
set->general_ssl.max_ssl_sessions = 5;
+ /* Timeout every 24 hours by default */
+ set->general_ssl.ca_cache_timeout = 24 * 60 * 60;
- set->proxyport = 0;
- set->proxytype = CURLPROXY_HTTP; /* defaults to HTTP proxy */
set->httpauth = CURLAUTH_BASIC; /* defaults to basic */
#ifndef CURL_DISABLE_PROXY
+ set->proxyport = 0;
+ set->proxytype = CURLPROXY_HTTP; /* defaults to HTTP proxy */
set->proxyauth = CURLAUTH_BASIC; /* defaults to basic */
/* SOCKS5 proxy auth defaults to username/password + GSS-API */
set->socks5auth = CURLAUTH_BASIC | CURLAUTH_GSSAPI;
@@ -553,31 +402,20 @@ CURLcode Curl_init_userdefined(struct Curl_easy *data)
/* make libcurl quiet by default: */
set->hide_progress = TRUE; /* CURLOPT_NOPROGRESS changes these */
- Curl_mime_initpart(&set->mimepost, data);
+ Curl_mime_initpart(&set->mimepost);
- /*
- * libcurl 7.10 introduced SSL verification *by default*! This needs to be
- * switched off unless wanted.
- */
+ Curl_ssl_easy_config_init(data);
#ifndef CURL_DISABLE_DOH
set->doh_verifyhost = TRUE;
set->doh_verifypeer = TRUE;
#endif
- set->ssl.primary.verifypeer = TRUE;
- set->ssl.primary.verifyhost = TRUE;
-#ifdef USE_TLS_SRP
- set->ssl.primary.authtype = CURL_TLSAUTH_NONE;
-#endif
- /* defaults to any auth type */
+#ifdef USE_SSH
+ /* defaults to any auth type */
set->ssh_auth_types = CURLSSH_AUTH_DEFAULT;
- set->ssl.primary.sessionid = TRUE; /* session ID caching enabled by
- default */
-#ifndef CURL_DISABLE_PROXY
- set->proxy_ssl = set->ssl;
+ set->new_directory_perms = 0755; /* Default permissions */
#endif
set->new_file_perms = 0644; /* Default permissions */
- set->new_directory_perms = 0755; /* Default permissions */
set->allowed_protocols = (curl_prot_t) CURLPROTO_ALL;
set->redir_protocols = CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_FTP |
CURLPROTO_FTPS;
@@ -640,14 +478,16 @@ CURLcode Curl_init_userdefined(struct Curl_easy *data)
set->maxage_conn = 118;
set->maxlifetime_conn = 0;
set->http09_allowed = FALSE;
- set->httpwant =
#ifdef USE_HTTP2
- CURL_HTTP_VERSION_2TLS
+ set->httpwant = CURL_HTTP_VERSION_2TLS
#else
- CURL_HTTP_VERSION_1_1
+ set->httpwant = CURL_HTTP_VERSION_1_1
#endif
;
- Curl_http2_init_userset(set);
+#if defined(USE_HTTP2) || defined(USE_HTTP3)
+ memset(&set->priority, 0, sizeof(set->priority));
+#endif
+ set->quick_exit = 0L;
return result;
}
@@ -674,13 +514,6 @@ CURLcode Curl_open(struct Curl_easy **curl)
data->magic = CURLEASY_MAGIC_NUMBER;
- result = Curl_resolver_init(data, &data->state.async.resolver);
- if(result) {
- DEBUGF(fprintf(stderr, "Error: resolver_init failed\n"));
- free(data);
- return result;
- }
-
result = Curl_init_userdefined(data);
if(!result) {
Curl_dyn_init(&data->state.headerb, CURL_MAX_HTTP_HEADER);
@@ -688,13 +521,15 @@ CURLcode Curl_open(struct Curl_easy **curl)
/* most recent connection is not yet defined */
data->state.lastconnect_id = -1;
+ data->state.recent_conn_id = -1;
+ /* and not assigned an id yet */
+ data->id = -1;
data->progress.flags |= PGRS_HIDE;
data->state.current_speed = -1; /* init to negative == impossible */
}
if(result) {
- Curl_resolver_cleanup(data->state.async.resolver);
Curl_dyn_free(&data->state.headerb);
Curl_freeset(data);
free(data);
@@ -706,76 +541,29 @@ CURLcode Curl_open(struct Curl_easy **curl)
return result;
}
-#ifdef USE_RECV_BEFORE_SEND_WORKAROUND
-static void conn_reset_postponed_data(struct connectdata *conn, int num)
-{
- struct postponed_data * const psnd = &(conn->postponed[num]);
- if(psnd->buffer) {
- DEBUGASSERT(psnd->allocated_size > 0);
- DEBUGASSERT(psnd->recv_size <= psnd->allocated_size);
- DEBUGASSERT(psnd->recv_size ?
- (psnd->recv_processed < psnd->recv_size) :
- (psnd->recv_processed == 0));
- DEBUGASSERT(psnd->bindsock != CURL_SOCKET_BAD);
- free(psnd->buffer);
- psnd->buffer = NULL;
- psnd->allocated_size = 0;
- psnd->recv_size = 0;
- psnd->recv_processed = 0;
-#ifdef DEBUGBUILD
- psnd->bindsock = CURL_SOCKET_BAD; /* used only for DEBUGASSERT */
-#endif /* DEBUGBUILD */
- }
- else {
- DEBUGASSERT(psnd->allocated_size == 0);
- DEBUGASSERT(psnd->recv_size == 0);
- DEBUGASSERT(psnd->recv_processed == 0);
- DEBUGASSERT(psnd->bindsock == CURL_SOCKET_BAD);
- }
-}
-
-static void conn_reset_all_postponed_data(struct connectdata *conn)
-{
- conn_reset_postponed_data(conn, 0);
- conn_reset_postponed_data(conn, 1);
-}
-#else /* ! USE_RECV_BEFORE_SEND_WORKAROUND */
-/* Use "do-nothing" macro instead of function when workaround not used */
-#define conn_reset_all_postponed_data(c) do {} while(0)
-#endif /* ! USE_RECV_BEFORE_SEND_WORKAROUND */
-
-
-static void conn_shutdown(struct Curl_easy *data, struct connectdata *conn)
+static void conn_shutdown(struct Curl_easy *data)
{
- DEBUGASSERT(conn);
DEBUGASSERT(data);
- infof(data, "Closing connection %ld", conn->connection_id);
+ infof(data, "Closing connection");
/* possible left-overs from the async name resolvers */
Curl_resolver_cancel(data);
- /* close the SSL stuff before we close any sockets since they will/may
- write to the sockets */
- Curl_ssl_close(data, conn, FIRSTSOCKET);
-#ifndef CURL_DISABLE_FTP
- Curl_ssl_close(data, conn, SECONDARYSOCKET);
-#endif
-
- /* close possibly still open sockets */
- if(CURL_SOCKET_BAD != conn->sock[SECONDARYSOCKET])
- Curl_closesocket(data, conn, conn->sock[SECONDARYSOCKET]);
- if(CURL_SOCKET_BAD != conn->sock[FIRSTSOCKET])
- Curl_closesocket(data, conn, conn->sock[FIRSTSOCKET]);
- if(CURL_SOCKET_BAD != conn->tempsock[0])
- Curl_closesocket(data, conn, conn->tempsock[0]);
- if(CURL_SOCKET_BAD != conn->tempsock[1])
- Curl_closesocket(data, conn, conn->tempsock[1]);
+ Curl_conn_close(data, SECONDARYSOCKET);
+ Curl_conn_close(data, FIRSTSOCKET);
}
-static void conn_free(struct connectdata *conn)
+static void conn_free(struct Curl_easy *data, struct connectdata *conn)
{
+ size_t i;
+
DEBUGASSERT(conn);
+ for(i = 0; i < ARRAYSIZE(conn->cfilter); ++i) {
+ Curl_conn_cf_discard_all(data, conn, (int)i);
+ }
+
+ Curl_resolver_cleanup(conn->resolve_async.resolver);
Curl_free_idnconverted_hostname(&conn->host);
Curl_free_idnconverted_hostname(&conn->conn_to_host);
#ifndef CURL_DISABLE_PROXY
@@ -787,32 +575,26 @@ static void conn_free(struct connectdata *conn)
Curl_safefree(conn->socks_proxy.passwd);
Curl_safefree(conn->http_proxy.host.rawalloc); /* http proxy name buffer */
Curl_safefree(conn->socks_proxy.host.rawalloc); /* socks proxy name buffer */
- Curl_free_primary_ssl_config(&conn->proxy_ssl_config);
#endif
Curl_safefree(conn->user);
Curl_safefree(conn->passwd);
Curl_safefree(conn->sasl_authzid);
Curl_safefree(conn->options);
Curl_safefree(conn->oauth_bearer);
+#ifndef CURL_DISABLE_HTTP
Curl_dyn_free(&conn->trailer);
+#endif
Curl_safefree(conn->host.rawalloc); /* host name buffer */
Curl_safefree(conn->conn_to_host.rawalloc); /* host name buffer */
Curl_safefree(conn->hostname_resolve);
Curl_safefree(conn->secondaryhostname);
- Curl_safefree(conn->connect_state);
-
- conn_reset_all_postponed_data(conn);
- Curl_llist_destroy(&conn->easyq, NULL);
Curl_safefree(conn->localdev);
- Curl_free_primary_ssl_config(&conn->ssl_config);
+ Curl_ssl_conn_config_cleanup(conn);
#ifdef USE_UNIX_SOCKETS
Curl_safefree(conn->unix_domain_socket);
#endif
-#ifdef USE_SSL
- Curl_safefree(conn->ssl_extra);
-#endif
free(conn); /* free all the connection oriented data */
}
@@ -845,6 +627,9 @@ void Curl_disconnect(struct Curl_easy *data,
/* the transfer must be detached from the connection */
DEBUGASSERT(!data->conn);
+ DEBUGF(infof(data, "Curl_disconnect(conn #%"
+ CURL_FORMAT_CURL_OFF_T ", dead=%d)",
+ conn->connection_id, dead_connection));
/*
* If this connection isn't marked to force-close, leave it open if there
* are other users of it
@@ -873,34 +658,17 @@ void Curl_disconnect(struct Curl_easy *data,
disconnect and shutdown */
Curl_attach_connection(data, conn);
- if(conn->handler->disconnect)
+ if(conn->handler && conn->handler->disconnect)
/* This is set if protocol-specific cleanups should be made */
conn->handler->disconnect(data, conn, dead_connection);
- conn_shutdown(data, conn);
+ conn_shutdown(data);
+ Curl_resolver_cancel(data);
/* detach it again */
Curl_detach_connection(data);
- conn_free(conn);
-}
-
-/*
- * This function should return TRUE if the socket is to be assumed to
- * be dead. Most commonly this happens when the server has closed the
- * connection due to inactivity.
- */
-static bool SocketIsDead(curl_socket_t sock)
-{
- int sval;
- bool ret_val = TRUE;
-
- sval = SOCKET_READABLE(sock, 0);
- if(sval == 0)
- /* timeout */
- ret_val = FALSE;
-
- return ret_val;
+ conn_free(data, conn);
}
/*
@@ -914,7 +682,7 @@ static int IsMultiplexingPossible(const struct Curl_easy *handle,
{
int avail = 0;
- /* If a HTTP protocol and multiplexing is enabled */
+ /* If an HTTP protocol and multiplexing is enabled */
if((conn->handler->protocol & PROTO_FAMILY_HTTP) &&
(!conn->bits.protoconnstart || !conn->bits.close)) {
@@ -933,7 +701,7 @@ proxy_info_matches(const struct proxy_info *data,
{
if((data->proxytype == needle->proxytype) &&
(data->port == needle->port) &&
- Curl_safe_strcasecompare(data->host.name, needle->host.name))
+ strcasecompare(data->host.name, needle->host.name))
return TRUE;
return FALSE;
@@ -977,8 +745,8 @@ static bool conn_maxage(struct Curl_easy *data,
idletime /= 1000; /* integer seconds is fine */
if(idletime > data->set.maxage_conn) {
- infof(data, "Too old connection (%ld seconds idle), disconnect it",
- idletime);
+ infof(data, "Too old connection (%" CURL_FORMAT_TIMEDIFF_T
+ " seconds idle), disconnect it", idletime);
return TRUE;
}
@@ -987,8 +755,8 @@ static bool conn_maxage(struct Curl_easy *data,
if(data->set.maxlifetime_conn && lifetime > data->set.maxlifetime_conn) {
infof(data,
- "Too old connection (%ld seconds since creation), disconnect it",
- lifetime);
+ "Too old connection (%" CURL_FORMAT_TIMEDIFF_T
+ " seconds since creation), disconnect it", lifetime);
return TRUE;
}
@@ -1033,12 +801,27 @@ static bool extract_if_dead(struct connectdata *conn,
}
else {
- /* Use the general method for determining the death of a connection */
- dead = SocketIsDead(conn->sock[FIRSTSOCKET]);
+ bool input_pending;
+
+ Curl_attach_connection(data, conn);
+ dead = !Curl_conn_is_alive(data, conn, &input_pending);
+ if(input_pending) {
+ /* For reuse, we want a "clean" connection state. The includes
+ * that we expect - in general - no waiting input data. Input
+ * waiting might be a TLS Notify Close, for example. We reject
+ * that.
+ * For protocols where data from other end may arrive at
+ * any time (HTTP/2 PING for example), the protocol handler needs
+ * to install its own `connection_check` callback.
+ */
+ dead = TRUE;
+ }
+ Curl_detach_connection(data);
}
if(dead) {
- infof(data, "Connection %ld seems to be dead", conn->connection_id);
+ infof(data, "Connection %" CURL_FORMAT_CURL_OFF_T " seems to be dead",
+ conn->connection_id);
Curl_conncache_remove_conn(data, conn, FALSE);
return TRUE;
}
@@ -1133,11 +916,11 @@ ConnectionExists(struct Curl_easy *data,
bool *force_reuse,
bool *waitpipe)
{
- struct connectdata *check;
- struct connectdata *chosen = 0;
+ struct connectdata *chosen = NULL;
bool foundPendingCandidate = FALSE;
- bool canmultiplex = IsMultiplexingPossible(data, needle);
+ bool canmultiplex = FALSE;
struct connectbundle *bundle;
+ struct Curl_llist_element *curr;
#ifdef USE_NTLM
bool wantNTLMhttp = ((data->state.authhost.want &
@@ -1152,381 +935,372 @@ ConnectionExists(struct Curl_easy *data,
bool wantProxyNTLMhttp = FALSE;
#endif
#endif
+ /* plain HTTP with upgrade */
+ bool h2upgrade = (data->state.httpwant == CURL_HTTP_VERSION_2_0) &&
+ (needle->handler->protocol & CURLPROTO_HTTP);
+ *usethis = NULL;
*force_reuse = FALSE;
*waitpipe = FALSE;
/* Look up the bundle with all the connections to this particular host.
Locks the connection cache, beware of early returns! */
bundle = Curl_conncache_find_bundle(data, needle, data->state.conn_cache);
- if(bundle) {
- /* Max pipe length is zero (unlimited) for multiplexed connections */
- struct Curl_llist_element *curr;
-
- infof(data, "Found bundle for host: %p [%s]",
- (void *)bundle, (bundle->multiuse == BUNDLE_MULTIPLEX ?
- "can multiplex" : "serially"));
-
- /* We can't multiplex if we don't know anything about the server */
- if(canmultiplex) {
- if(bundle->multiuse == BUNDLE_UNKNOWN) {
- if(data->set.pipewait) {
- infof(data, "Server doesn't support multiplex yet, wait");
- *waitpipe = TRUE;
- CONNCACHE_UNLOCK(data);
- return FALSE; /* no re-use */
- }
-
- infof(data, "Server doesn't support multiplex (yet)");
- canmultiplex = FALSE;
+ if(!bundle) {
+ CONNCACHE_UNLOCK(data);
+ return FALSE;
+ }
+ infof(data, "Found bundle for host: %p [%s]",
+ (void *)bundle, (bundle->multiuse == BUNDLE_MULTIPLEX ?
+ "can multiplex" : "serially"));
+
+ /* We can only multiplex iff the transfer allows it AND we know
+ * that the server we want to talk to supports it as well. */
+ canmultiplex = FALSE;
+ if(IsMultiplexingPossible(data, needle)) {
+ if(bundle->multiuse == BUNDLE_UNKNOWN) {
+ if(data->set.pipewait) {
+ infof(data, "Server doesn't support multiplex yet, wait");
+ *waitpipe = TRUE;
+ CONNCACHE_UNLOCK(data);
+ return FALSE; /* no reuse */
}
- if((bundle->multiuse == BUNDLE_MULTIPLEX) &&
- !Curl_multiplex_wanted(data->multi)) {
+ infof(data, "Server doesn't support multiplex (yet)");
+ }
+ else if(bundle->multiuse == BUNDLE_MULTIPLEX) {
+ if(Curl_multiplex_wanted(data->multi))
+ canmultiplex = TRUE;
+ else
infof(data, "Could multiplex, but not asked to");
- canmultiplex = FALSE;
- }
- if(bundle->multiuse == BUNDLE_NO_MULTIUSE) {
- infof(data, "Can not multiplex, even if we wanted to");
- canmultiplex = FALSE;
- }
}
+ else if(bundle->multiuse == BUNDLE_NO_MULTIUSE) {
+ infof(data, "Can not multiplex, even if we wanted to");
+ }
+ }
- curr = bundle->conn_list.head;
- while(curr) {
- bool match = FALSE;
- size_t multiplexed = 0;
+ curr = bundle->conn_list.head;
+ while(curr) {
+ struct connectdata *check = curr->ptr;
+ /* Get next node now. We might remove a dead `check` connection which
+ * would invalidate `curr` as well. */
+ curr = curr->next;
- /*
- * Note that if we use a HTTP proxy in normal mode (no tunneling), we
- * check connections to that proxy and not to the actual remote server.
- */
- check = curr->ptr;
- curr = curr->next;
+ /* Note that if we use an HTTP proxy in normal mode (no tunneling), we
+ * check connections to that proxy and not to the actual remote server.
+ */
+ if(check->connect_only || check->bits.close)
+ /* connect-only or to-be-closed connections will not be reused */
+ continue;
- if(check->connect_only || check->bits.close)
- /* connect-only or to-be-closed connections will not be reused */
- continue;
+ if(data->set.ipver != CURL_IPRESOLVE_WHATEVER
+ && data->set.ipver != check->ip_version) {
+ /* skip because the connection is not via the requested IP version */
+ continue;
+ }
- if(extract_if_dead(check, data)) {
- /* disconnect it */
- Curl_disconnect(data, check, TRUE);
+ if(!canmultiplex) {
+ if(Curl_resolver_asynch() &&
+ /* primary_ip[0] is NUL only if the resolving of the name hasn't
+ completed yet and until then we don't reuse this connection */
+ !check->primary_ip[0])
continue;
- }
+ }
- if(data->set.ipver != CURL_IPRESOLVE_WHATEVER
- && data->set.ipver != check->ip_version) {
- /* skip because the connection is not via the requested IP version */
+ if(CONN_INUSE(check)) {
+ if(!canmultiplex) {
+ /* transfer can't be multiplexed and check is in use */
continue;
}
-
- if(bundle->multiuse == BUNDLE_MULTIPLEX)
- multiplexed = CONN_INUSE(check);
-
- if(!canmultiplex) {
- if(multiplexed) {
- /* can only happen within multi handles, and means that another easy
- handle is using this connection */
+ else {
+ /* Could multiplex, but not when check belongs to another multi */
+ struct Curl_llist_element *e = check->easyq.head;
+ struct Curl_easy *entry = e->ptr;
+ if(entry->multi != data->multi)
continue;
- }
+ }
+ }
- if(Curl_resolver_asynch()) {
- /* primary_ip[0] is NUL only if the resolving of the name hasn't
- completed yet and until then we don't re-use this connection */
- if(!check->primary_ip[0]) {
- infof(data,
- "Connection #%ld is still name resolving, can't reuse",
- check->connection_id);
- continue;
- }
- }
+ if(!Curl_conn_is_connected(check, FIRSTSOCKET)) {
+ foundPendingCandidate = TRUE;
+ /* Don't pick a connection that hasn't connected yet */
+ infof(data, "Connection #%" CURL_FORMAT_CURL_OFF_T
+ " isn't open enough, can't reuse", check->connection_id);
+ continue;
+ }
- if(check->sock[FIRSTSOCKET] == CURL_SOCKET_BAD) {
- foundPendingCandidate = TRUE;
- /* Don't pick a connection that hasn't connected yet */
- infof(data, "Connection #%ld isn't open enough, can't reuse",
- check->connection_id);
- continue;
- }
- }
+ /* `check` is connected. if it is in use and does not support multiplex,
+ * we cannot use it. */
+ if(!check->bits.multiplex && CONN_INUSE(check))
+ continue;
#ifdef USE_UNIX_SOCKETS
- if(needle->unix_domain_socket) {
- if(!check->unix_domain_socket)
- continue;
- if(strcmp(needle->unix_domain_socket, check->unix_domain_socket))
- continue;
- if(needle->bits.abstract_unix_socket !=
- check->bits.abstract_unix_socket)
- continue;
- }
- else if(check->unix_domain_socket)
+ if(needle->unix_domain_socket) {
+ if(!check->unix_domain_socket)
+ continue;
+ if(strcmp(needle->unix_domain_socket, check->unix_domain_socket))
continue;
+ if(needle->bits.abstract_unix_socket !=
+ check->bits.abstract_unix_socket)
+ continue;
+ }
+ else if(check->unix_domain_socket)
+ continue;
#endif
- if((needle->handler->flags&PROTOPT_SSL) !=
- (check->handler->flags&PROTOPT_SSL))
- /* don't do mixed SSL and non-SSL connections */
- if(get_protocol_family(check->handler) !=
- needle->handler->protocol || !check->bits.tls_upgraded)
- /* except protocols that have been upgraded via TLS */
- continue;
+ if((needle->handler->flags&PROTOPT_SSL) !=
+ (check->handler->flags&PROTOPT_SSL))
+ /* don't do mixed SSL and non-SSL connections */
+ if(get_protocol_family(check->handler) !=
+ needle->handler->protocol || !check->bits.tls_upgraded)
+ /* except protocols that have been upgraded via TLS */
+ continue;
+
+ if(needle->bits.conn_to_host != check->bits.conn_to_host)
+ /* don't mix connections that use the "connect to host" feature and
+ * connections that don't use this feature */
+ continue;
+
+ if(needle->bits.conn_to_port != check->bits.conn_to_port)
+ /* don't mix connections that use the "connect to port" feature and
+ * connections that don't use this feature */
+ continue;
#ifndef CURL_DISABLE_PROXY
- if(needle->bits.httpproxy != check->bits.httpproxy ||
- needle->bits.socksproxy != check->bits.socksproxy)
- continue;
+ if(needle->bits.httpproxy != check->bits.httpproxy ||
+ needle->bits.socksproxy != check->bits.socksproxy)
+ continue;
- if(needle->bits.socksproxy &&
- !socks_proxy_info_matches(&needle->socks_proxy,
- &check->socks_proxy))
- continue;
-#endif
- if(needle->bits.conn_to_host != check->bits.conn_to_host)
- /* don't mix connections that use the "connect to host" feature and
- * connections that don't use this feature */
+ if(needle->bits.socksproxy &&
+ !socks_proxy_info_matches(&needle->socks_proxy,
+ &check->socks_proxy))
+ continue;
+
+ if(needle->bits.httpproxy) {
+ if(needle->bits.tunnel_proxy != check->bits.tunnel_proxy)
continue;
- if(needle->bits.conn_to_port != check->bits.conn_to_port)
- /* don't mix connections that use the "connect to port" feature and
- * connections that don't use this feature */
+ if(!proxy_info_matches(&needle->http_proxy, &check->http_proxy))
continue;
-#ifndef CURL_DISABLE_PROXY
- if(needle->bits.httpproxy) {
- if(!proxy_info_matches(&needle->http_proxy, &check->http_proxy))
+ if(IS_HTTPS_PROXY(needle->http_proxy.proxytype)) {
+ /* https proxies come in different types, http/1.1, h2, ... */
+ if(needle->http_proxy.proxytype != check->http_proxy.proxytype)
continue;
-
- if(needle->bits.tunnel_proxy != check->bits.tunnel_proxy)
+ /* match SSL config to proxy */
+ if(!Curl_ssl_conn_config_match(data, check, TRUE)) {
+ DEBUGF(infof(data,
+ "Connection #%" CURL_FORMAT_CURL_OFF_T
+ " has different SSL proxy parameters, can't reuse",
+ check->connection_id));
continue;
-
- if(needle->http_proxy.proxytype == CURLPROXY_HTTPS) {
- /* use https proxy */
- if(needle->handler->flags&PROTOPT_SSL) {
- /* use double layer ssl */
- if(!Curl_ssl_config_matches(&needle->proxy_ssl_config,
- &check->proxy_ssl_config))
- continue;
- if(check->proxy_ssl[FIRSTSOCKET].state != ssl_connection_complete)
- continue;
- }
-
- if(!Curl_ssl_config_matches(&needle->ssl_config,
- &check->ssl_config))
- continue;
- if(check->ssl[FIRSTSOCKET].state != ssl_connection_complete)
- continue;
}
+ /* the SSL config to the server, which may apply here is checked
+ * further below */
}
+ }
#endif
- if(!canmultiplex && CONN_INUSE(check))
- /* this request can't be multiplexed but the checked connection is
- already in use so we skip it */
- continue;
-
- if(CONN_INUSE(check)) {
- /* Subject for multiplex use if 'checks' belongs to the same multi
- handle as 'data' is. */
- struct Curl_llist_element *e = check->easyq.head;
- struct Curl_easy *entry = e->ptr;
- if(entry->multi != data->multi)
- continue;
+ if(h2upgrade && !check->httpversion && canmultiplex) {
+ if(data->set.pipewait) {
+ infof(data, "Server upgrade doesn't support multiplex yet, wait");
+ *waitpipe = TRUE;
+ CONNCACHE_UNLOCK(data);
+ return FALSE; /* no reuse */
}
+ infof(data, "Server upgrade cannot be used");
+ continue; /* can't be used atm */
+ }
+
+ if(needle->localdev || needle->localport) {
+ /* If we are bound to a specific local end (IP+port), we must not
+ reuse a random other one, although if we didn't ask for a
+ particular one we can reuse one that was bound.
+
+ This comparison is a bit rough and too strict. Since the input
+ parameters can be specified in numerous ways and still end up the
+ same it would take a lot of processing to make it really accurate.
+ Instead, this matching will assume that reuses of bound connections
+ will most likely also reuse the exact same binding parameters and
+ missing out a few edge cases shouldn't hurt anyone very much.
+ */
+ if((check->localport != needle->localport) ||
+ (check->localportrange != needle->localportrange) ||
+ (needle->localdev &&
+ (!check->localdev || strcmp(check->localdev, needle->localdev))))
+ continue;
+ }
- if(needle->localdev || needle->localport) {
- /* If we are bound to a specific local end (IP+port), we must not
- re-use a random other one, although if we didn't ask for a
- particular one we can reuse one that was bound.
-
- This comparison is a bit rough and too strict. Since the input
- parameters can be specified in numerous ways and still end up the
- same it would take a lot of processing to make it really accurate.
- Instead, this matching will assume that re-uses of bound connections
- will most likely also re-use the exact same binding parameters and
- missing out a few edge cases shouldn't hurt anyone very much.
- */
- if((check->localport != needle->localport) ||
- (check->localportrange != needle->localportrange) ||
- (needle->localdev &&
- (!check->localdev || strcmp(check->localdev, needle->localdev))))
- continue;
+ if(!(needle->handler->flags & PROTOPT_CREDSPERREQUEST)) {
+ /* This protocol requires credentials per connection,
+ so verify that we're using the same name and password as well */
+ if(Curl_timestrcmp(needle->user, check->user) ||
+ Curl_timestrcmp(needle->passwd, check->passwd) ||
+ Curl_timestrcmp(needle->sasl_authzid, check->sasl_authzid) ||
+ Curl_timestrcmp(needle->oauth_bearer, check->oauth_bearer)) {
+ /* one of them was different */
+ continue;
}
+ }
- if(!(needle->handler->flags & PROTOPT_CREDSPERREQUEST)) {
- /* This protocol requires credentials per connection,
- so verify that we're using the same name and password as well */
- if(Curl_timestrcmp(needle->user, check->user) ||
- Curl_timestrcmp(needle->passwd, check->passwd) ||
- Curl_timestrcmp(needle->sasl_authzid, check->sasl_authzid) ||
- Curl_timestrcmp(needle->oauth_bearer, check->oauth_bearer)) {
- /* one of them was different */
- continue;
- }
- }
+ /* GSS delegation differences do not actually affect every connection
+ and auth method, but this check takes precaution before efficiency */
+ if(needle->gssapi_delegation != check->gssapi_delegation)
+ continue;
- /* If multiplexing isn't enabled on the h2 connection and h1 is
- explicitly requested, handle it: */
- if((needle->handler->protocol & PROTO_FAMILY_HTTP) &&
- (check->httpversion >= 20) &&
+ /* If looking for HTTP and the HTTP version we want is less
+ * than the HTTP version of the check connection, continue looking */
+ if((needle->handler->protocol & PROTO_FAMILY_HTTP) &&
+ (((check->httpversion >= 20) &&
(data->state.httpwant < CURL_HTTP_VERSION_2_0))
+ || ((check->httpversion >= 30) &&
+ (data->state.httpwant < CURL_HTTP_VERSION_3))))
+ continue;
+#ifdef USE_SSH
+ else if(get_protocol_family(needle->handler) & PROTO_FAMILY_SSH) {
+ if(!ssh_config_matches(needle, check))
continue;
+ }
+#endif
+#ifndef CURL_DISABLE_FTP
+ else if(get_protocol_family(needle->handler) & PROTO_FAMILY_FTP) {
+ /* Also match ACCOUNT, ALTERNATIVE-TO-USER, USE_SSL and CCC options */
+ if(Curl_timestrcmp(needle->proto.ftpc.account,
+ check->proto.ftpc.account) ||
+ Curl_timestrcmp(needle->proto.ftpc.alternative_to_user,
+ check->proto.ftpc.alternative_to_user) ||
+ (needle->proto.ftpc.use_ssl != check->proto.ftpc.use_ssl) ||
+ (needle->proto.ftpc.ccc != check->proto.ftpc.ccc))
+ continue;
+ }
+#endif
- if(get_protocol_family(needle->handler) == PROTO_FAMILY_SSH) {
- if(!ssh_config_matches(needle, check))
- continue;
- }
-
- if((needle->handler->flags&PROTOPT_SSL)
+ /* Additional match requirements if talking TLS OR
+ * not talking to a HTTP proxy OR using a tunnel through a proxy */
+ if((needle->handler->flags&PROTOPT_SSL)
#ifndef CURL_DISABLE_PROXY
- || !needle->bits.httpproxy || needle->bits.tunnel_proxy
-#endif
- ) {
- /* The requested connection does not use a HTTP proxy or it uses SSL or
- it is a non-SSL protocol tunneled or it is a non-SSL protocol which
- is allowed to be upgraded via TLS */
-
- if((strcasecompare(needle->handler->scheme, check->handler->scheme) ||
- (get_protocol_family(check->handler) ==
- needle->handler->protocol && check->bits.tls_upgraded)) &&
- (!needle->bits.conn_to_host || strcasecompare(
- needle->conn_to_host.name, check->conn_to_host.name)) &&
- (!needle->bits.conn_to_port ||
- needle->conn_to_port == check->conn_to_port) &&
- strcasecompare(needle->host.name, check->host.name) &&
- needle->remote_port == check->remote_port) {
- /* The schemes match or the protocol family is the same and the
- previous connection was TLS upgraded, and the hostname and host
- port match */
- if(needle->handler->flags & PROTOPT_SSL) {
- /* This is a SSL connection so verify that we're using the same
- SSL options as well */
- if(!Curl_ssl_config_matches(&needle->ssl_config,
- &check->ssl_config)) {
- DEBUGF(infof(data,
- "Connection #%ld has different SSL parameters, "
- "can't reuse",
- check->connection_id));
- continue;
- }
- if(check->ssl[FIRSTSOCKET].state != ssl_connection_complete) {
- foundPendingCandidate = TRUE;
- DEBUGF(infof(data,
- "Connection #%ld has not started SSL connect, "
- "can't reuse",
- check->connection_id));
- continue;
- }
- }
- match = TRUE;
- }
- }
- else {
- /* The requested connection is using the same HTTP proxy in normal
- mode (no tunneling) */
- match = TRUE;
+ || !needle->bits.httpproxy || needle->bits.tunnel_proxy
+#endif
+ ) {
+ /* Talking the same protocol scheme or a TLS upgraded protocol in the
+ * same protocol family? */
+ if(!strcasecompare(needle->handler->scheme, check->handler->scheme) &&
+ (get_protocol_family(check->handler) !=
+ needle->handler->protocol || !check->bits.tls_upgraded))
+ continue;
+
+ /* If needle has "conn_to_*" set, check must match this */
+ if((needle->bits.conn_to_host && !strcasecompare(
+ needle->conn_to_host.name, check->conn_to_host.name)) ||
+ (needle->bits.conn_to_port &&
+ needle->conn_to_port != check->conn_to_port))
+ continue;
+
+ /* hostname and port must match */
+ if(!strcasecompare(needle->host.name, check->host.name) ||
+ needle->remote_port != check->remote_port)
+ continue;
+
+ /* If talking TLS, check needs to use the same SSL options. */
+ if((needle->handler->flags & PROTOPT_SSL) &&
+ !Curl_ssl_conn_config_match(data, check, FALSE)) {
+ DEBUGF(infof(data,
+ "Connection #%" CURL_FORMAT_CURL_OFF_T
+ " has different SSL parameters, can't reuse",
+ check->connection_id));
+ continue;
}
+ }
- if(match) {
#if defined(USE_NTLM)
- /* If we are looking for an HTTP+NTLM connection, check if this is
- already authenticating with the right credentials. If not, keep
- looking so that we can reuse NTLM connections if
- possible. (Especially we must not reuse the same connection if
- partway through a handshake!) */
- if(wantNTLMhttp) {
- if(Curl_timestrcmp(needle->user, check->user) ||
- Curl_timestrcmp(needle->passwd, check->passwd)) {
-
- /* we prefer a credential match, but this is at least a connection
- that can be reused and "upgraded" to NTLM */
- if(check->http_ntlm_state == NTLMSTATE_NONE)
- chosen = check;
- continue;
- }
- }
- else if(check->http_ntlm_state != NTLMSTATE_NONE) {
- /* Connection is using NTLM auth but we don't want NTLM */
- continue;
- }
-
-#ifndef CURL_DISABLE_PROXY
- /* Same for Proxy NTLM authentication */
- if(wantProxyNTLMhttp) {
- /* Both check->http_proxy.user and check->http_proxy.passwd can be
- * NULL */
- if(!check->http_proxy.user || !check->http_proxy.passwd)
- continue;
-
- if(Curl_timestrcmp(needle->http_proxy.user,
- check->http_proxy.user) ||
- Curl_timestrcmp(needle->http_proxy.passwd,
- check->http_proxy.passwd))
- continue;
- }
- else if(check->proxy_ntlm_state != NTLMSTATE_NONE) {
- /* Proxy connection is using NTLM auth but we don't want NTLM */
- continue;
- }
-#endif
- if(wantNTLMhttp || wantProxyNTLMhttp) {
- /* Credentials are already checked, we can use this connection */
+ /* If we are looking for an HTTP+NTLM connection, check if this is
+ already authenticating with the right credentials. If not, keep
+ looking so that we can reuse NTLM connections if
+ possible. (Especially we must not reuse the same connection if
+ partway through a handshake!) */
+ if(wantNTLMhttp) {
+ if(Curl_timestrcmp(needle->user, check->user) ||
+ Curl_timestrcmp(needle->passwd, check->passwd)) {
+
+ /* we prefer a credential match, but this is at least a connection
+ that can be reused and "upgraded" to NTLM */
+ if(check->http_ntlm_state == NTLMSTATE_NONE)
chosen = check;
+ continue;
+ }
+ }
+ else if(check->http_ntlm_state != NTLMSTATE_NONE) {
+ /* Connection is using NTLM auth but we don't want NTLM */
+ continue;
+ }
- if((wantNTLMhttp &&
- (check->http_ntlm_state != NTLMSTATE_NONE)) ||
- (wantProxyNTLMhttp &&
- (check->proxy_ntlm_state != NTLMSTATE_NONE))) {
- /* We must use this connection, no other */
- *force_reuse = TRUE;
- break;
- }
+#ifndef CURL_DISABLE_PROXY
+ /* Same for Proxy NTLM authentication */
+ if(wantProxyNTLMhttp) {
+ /* Both check->http_proxy.user and check->http_proxy.passwd can be
+ * NULL */
+ if(!check->http_proxy.user || !check->http_proxy.passwd)
+ continue;
- /* Continue look up for a better connection */
- continue;
- }
+ if(Curl_timestrcmp(needle->http_proxy.user,
+ check->http_proxy.user) ||
+ Curl_timestrcmp(needle->http_proxy.passwd,
+ check->http_proxy.passwd))
+ continue;
+ }
+ else if(check->proxy_ntlm_state != NTLMSTATE_NONE) {
+ /* Proxy connection is using NTLM auth but we don't want NTLM */
+ continue;
+ }
+#endif
+ if(wantNTLMhttp || wantProxyNTLMhttp) {
+ /* Credentials are already checked, we may use this connection.
+ * With NTLM being weird as it is, we MUST use a
+ * connection where it has already been fully negotiated.
+ * If it has not, we keep on looking for a better one. */
+ chosen = check;
+
+ if((wantNTLMhttp &&
+ (check->http_ntlm_state != NTLMSTATE_NONE)) ||
+ (wantProxyNTLMhttp &&
+ (check->proxy_ntlm_state != NTLMSTATE_NONE))) {
+ /* We must use this connection, no other */
+ *force_reuse = TRUE;
+ break;
+ }
+ /* Continue look up for a better connection */
+ continue;
+ }
#endif
- if(canmultiplex) {
- /* We can multiplex if we want to. Let's continue looking for
- the optimal connection to use. */
- if(!multiplexed) {
- /* We have the optimal connection. Let's stop looking. */
- chosen = check;
- break;
- }
-
-#ifdef USE_NGHTTP2
- /* If multiplexed, make sure we don't go over concurrency limit */
- if(check->bits.multiplex) {
- /* Multiplexed connections can only be HTTP/2 for now */
- struct http_conn *httpc = &check->proto.httpc;
- if(multiplexed >= httpc->settings.max_concurrent_streams) {
- infof(data, "MAX_CONCURRENT_STREAMS reached, skip (%zu)",
- multiplexed);
- continue;
- }
- else if(multiplexed >=
- Curl_multi_max_concurrent_streams(data->multi)) {
- infof(data, "client side MAX_CONCURRENT_STREAMS reached"
- ", skip (%zu)",
- multiplexed);
- continue;
- }
- }
-#endif
- /* When not multiplexed, we have a match here! */
- chosen = check;
- infof(data, "Multiplexed connection found");
- break;
- }
- else {
- /* We have found a connection. Let's stop searching. */
- chosen = check;
- break;
- }
+ if(CONN_INUSE(check)) {
+ DEBUGASSERT(canmultiplex);
+ DEBUGASSERT(check->bits.multiplex);
+ /* If multiplexed, make sure we don't go over concurrency limit */
+ if(CONN_INUSE(check) >=
+ Curl_multi_max_concurrent_streams(data->multi)) {
+ infof(data, "client side MAX_CONCURRENT_STREAMS reached"
+ ", skip (%zu)", CONN_INUSE(check));
+ continue;
}
+ if(CONN_INUSE(check) >=
+ Curl_conn_get_max_concurrent(data, check, FIRSTSOCKET)) {
+ infof(data, "MAX_CONCURRENT_STREAMS reached, skip (%zu)",
+ CONN_INUSE(check));
+ continue;
+ }
+ /* When not multiplexed, we have a match here! */
+ infof(data, "Multiplexed connection found");
+ }
+ else if(extract_if_dead(check, data)) {
+ /* disconnect it */
+ Curl_disconnect(data, check, TRUE);
+ continue;
}
- }
+
+ /* We have found a connection. Let's stop searching. */
+ chosen = check;
+ break;
+ } /* loop over connection bundle */
if(chosen) {
/* mark it as used before releasing the lock */
@@ -1554,123 +1328,12 @@ void Curl_verboseconnect(struct Curl_easy *data,
struct connectdata *conn)
{
if(data->set.verbose)
- infof(data, "Connected to %s (%s) port %u (#%ld)",
-#ifndef CURL_DISABLE_PROXY
- conn->bits.socksproxy ? conn->socks_proxy.host.dispname :
- conn->bits.httpproxy ? conn->http_proxy.host.dispname :
-#endif
- conn->bits.conn_to_host ? conn->conn_to_host.dispname :
- conn->host.dispname,
- conn->primary_ip, conn->port, conn->connection_id);
+ infof(data, "Connected to %s (%s) port %u",
+ CURL_CONN_HOST_DISPNAME(conn), conn->primary_ip, conn->port);
}
#endif
/*
- * Helpers for IDNA conversions.
- */
-bool Curl_is_ASCII_name(const char *hostname)
-{
- /* get an UNSIGNED local version of the pointer */
- const unsigned char *ch = (const unsigned char *)hostname;
-
- if(!hostname) /* bad input, consider it ASCII! */
- return TRUE;
-
- while(*ch) {
- if(*ch++ & 0x80)
- return FALSE;
- }
- return TRUE;
-}
-
-/*
- * Perform any necessary IDN conversion of hostname
- */
-CURLcode Curl_idnconvert_hostname(struct Curl_easy *data,
- struct hostname *host)
-{
-#ifndef USE_LIBIDN2
- (void)data;
- (void)data;
-#elif defined(CURL_DISABLE_VERBOSE_STRINGS)
- (void)data;
-#endif
-
- /* set the name we use to display the host name */
- host->dispname = host->name;
-
- /* Check name for non-ASCII and convert hostname to ACE form if we can */
- if(!Curl_is_ASCII_name(host->name)) {
-#ifdef USE_LIBIDN2
- if(idn2_check_version(IDN2_VERSION)) {
- char *ace_hostname = NULL;
-#if IDN2_VERSION_NUMBER >= 0x00140000
- /* IDN2_NFC_INPUT: Normalize input string using normalization form C.
- IDN2_NONTRANSITIONAL: Perform Unicode TR46 non-transitional
- processing. */
- int flags = IDN2_NFC_INPUT | IDN2_NONTRANSITIONAL;
-#else
- int flags = IDN2_NFC_INPUT;
-#endif
- int rc = IDN2_LOOKUP(host->name, &ace_hostname, flags);
- if(rc != IDN2_OK)
- /* fallback to TR46 Transitional mode for better IDNA2003
- compatibility */
- rc = IDN2_LOOKUP(host->name, &ace_hostname,
- IDN2_TRANSITIONAL);
- if(rc == IDN2_OK) {
- host->encalloc = (char *)ace_hostname;
- /* change the name pointer to point to the encoded hostname */
- host->name = host->encalloc;
- }
- else {
- failf(data, "Failed to convert %s to ACE; %s", host->name,
- idn2_strerror(rc));
- return CURLE_URL_MALFORMAT;
- }
- }
-#elif defined(USE_WIN32_IDN)
- char *ace_hostname = NULL;
-
- if(Curl_win32_idn_to_ascii(host->name, &ace_hostname)) {
- host->encalloc = ace_hostname;
- /* change the name pointer to point to the encoded hostname */
- host->name = host->encalloc;
- }
- else {
- char buffer[STRERROR_LEN];
- failf(data, "Failed to convert %s to ACE; %s", host->name,
- Curl_winapi_strerror(GetLastError(), buffer, sizeof(buffer)));
- return CURLE_URL_MALFORMAT;
- }
-#else
- infof(data, "IDN support not present, can't parse Unicode domains");
-#endif
- }
- return CURLE_OK;
-}
-
-/*
- * Frees data allocated by idnconvert_hostname()
- */
-void Curl_free_idnconverted_hostname(struct hostname *host)
-{
-#if defined(USE_LIBIDN2)
- if(host->encalloc) {
- idn2_free(host->encalloc); /* must be freed with idn2_free() since this was
- allocated by libidn */
- host->encalloc = NULL;
- }
-#elif defined(USE_WIN32_IDN)
- free(host->encalloc); /* must be freed with free() since this was
- allocated by Curl_win32_idn_to_ascii */
- host->encalloc = NULL;
-#else
- (void)host;
-#endif
-}
-
-/*
* Allocate and initialize a new connectdata object.
*/
static struct connectdata *allocate_conn(struct Curl_easy *data)
@@ -1679,62 +1342,13 @@ static struct connectdata *allocate_conn(struct Curl_easy *data)
if(!conn)
return NULL;
-#ifdef USE_SSL
- /* The SSL backend-specific data (ssl_backend_data) objects are allocated as
- a separate array to ensure suitable alignment.
- Note that these backend pointers can be swapped by vtls (eg ssl backend
- data becomes proxy backend data). */
- {
- size_t onesize = Curl_ssl->sizeof_ssl_backend_data;
- size_t totalsize = onesize;
- char *ssl;
-
-#ifndef CURL_DISABLE_FTP
- totalsize *= 2;
-#endif
-#ifndef CURL_DISABLE_PROXY
- totalsize *= 2;
-#endif
-
- ssl = calloc(1, totalsize);
- if(!ssl) {
- free(conn);
- return NULL;
- }
- conn->ssl_extra = ssl;
- conn->ssl[FIRSTSOCKET].backend = (void *)ssl;
-#ifndef CURL_DISABLE_FTP
- ssl += onesize;
- conn->ssl[SECONDARYSOCKET].backend = (void *)ssl;
-#endif
-#ifndef CURL_DISABLE_PROXY
- ssl += onesize;
- conn->proxy_ssl[FIRSTSOCKET].backend = (void *)ssl;
-#ifndef CURL_DISABLE_FTP
- ssl += onesize;
- conn->proxy_ssl[SECONDARYSOCKET].backend = (void *)ssl;
-#endif
-#endif
- }
-#endif
-
- conn->handler = &Curl_handler_dummy; /* Be sure we have a handler defined
- already from start to avoid NULL
- situations and checks */
-
/* and we setup a few fields in case we end up actually using this struct */
conn->sock[FIRSTSOCKET] = CURL_SOCKET_BAD; /* no file descriptor */
conn->sock[SECONDARYSOCKET] = CURL_SOCKET_BAD; /* no file descriptor */
- conn->tempsock[0] = CURL_SOCKET_BAD; /* no file descriptor */
- conn->tempsock[1] = CURL_SOCKET_BAD; /* no file descriptor */
conn->connection_id = -1; /* no ID */
conn->port = -1; /* unknown at this point */
conn->remote_port = -1; /* unknown at this point */
-#if defined(USE_RECV_BEFORE_SEND_WORKAROUND) && defined(DEBUGBUILD)
- conn->postponed[0].bindsock = CURL_SOCKET_BAD; /* no file descriptor */
- conn->postponed[1].bindsock = CURL_SOCKET_BAD; /* no file descriptor */
-#endif /* USE_RECV_BEFORE_SEND_WORKAROUND && DEBUGBUILD */
/* Default protocol-independent behavior doesn't support persistent
connections, so we set this to force-close. Protocols that support
@@ -1745,7 +1359,7 @@ static struct connectdata *allocate_conn(struct Curl_easy *data)
conn->created = Curl_now();
/* Store current time to give a baseline to keepalive connection times. */
- conn->keepalive = Curl_now();
+ conn->keepalive = conn->created;
#ifndef CURL_DISABLE_PROXY
conn->http_proxy.proxytype = data->set.proxytype;
@@ -1758,8 +1372,8 @@ static struct connectdata *allocate_conn(struct Curl_easy *data)
conn->bits.httpproxy = (conn->bits.proxy &&
(conn->http_proxy.proxytype == CURLPROXY_HTTP ||
conn->http_proxy.proxytype == CURLPROXY_HTTP_1_0 ||
- conn->http_proxy.proxytype == CURLPROXY_HTTPS)) ?
- TRUE : FALSE;
+ IS_HTTPS_PROXY(conn->http_proxy.proxytype))) ?
+ TRUE : FALSE;
conn->bits.socksproxy = (conn->bits.proxy &&
!conn->bits.httpproxy) ? TRUE : FALSE;
@@ -1777,17 +1391,6 @@ static struct connectdata *allocate_conn(struct Curl_easy *data)
conn->bits.ftp_use_epsv = data->set.ftp_use_epsv;
conn->bits.ftp_use_eprt = data->set.ftp_use_eprt;
#endif
- conn->ssl_config.verifystatus = data->set.ssl.primary.verifystatus;
- conn->ssl_config.verifypeer = data->set.ssl.primary.verifypeer;
- conn->ssl_config.verifyhost = data->set.ssl.primary.verifyhost;
- conn->ssl_config.ssl_options = data->set.ssl.primary.ssl_options;
-#ifndef CURL_DISABLE_PROXY
- conn->proxy_ssl_config.verifystatus =
- data->set.proxy_ssl.primary.verifystatus;
- conn->proxy_ssl_config.verifypeer = data->set.proxy_ssl.primary.verifypeer;
- conn->proxy_ssl_config.verifyhost = data->set.proxy_ssl.primary.verifyhost;
- conn->proxy_ssl_config.ssl_options = data->set.proxy_ssl.primary.ssl_options;
-#endif
conn->ip_version = data->set.ipver;
conn->connect_only = data->set.connect_only;
conn->transport = TRNSPRT_TCP; /* most of them are TCP streams */
@@ -1811,51 +1414,251 @@ static struct connectdata *allocate_conn(struct Curl_easy *data)
if(!conn->localdev)
goto error;
}
+#ifndef CURL_DISABLE_BINDLOCAL
conn->localportrange = data->set.localportrange;
conn->localport = data->set.localport;
+#endif
/* the close socket stuff needs to be copied to the connection struct as
it may live on without (this specific) Curl_easy */
conn->fclosesocket = data->set.fclosesocket;
conn->closesocket_client = data->set.closesocket_client;
- conn->lastused = Curl_now(); /* used now */
+ conn->lastused = conn->created;
+ conn->gssapi_delegation = data->set.gssapi_delegation;
return conn;
- error:
+error:
- Curl_llist_destroy(&conn->easyq, NULL);
free(conn->localdev);
-#ifdef USE_SSL
- free(conn->ssl_extra);
-#endif
free(conn);
return NULL;
}
-/* returns the handler if the given scheme is built-in */
-const struct Curl_handler *Curl_builtin_scheme(const char *scheme,
- size_t schemelen)
+const struct Curl_handler *Curl_get_scheme_handler(const char *scheme)
{
- const struct Curl_handler * const *pp;
- const struct Curl_handler *p;
- /* Scan protocol handler table and match against 'scheme'. The handler may
- be changed later when the protocol specific setup function is called. */
- if(schemelen == CURL_ZERO_TERMINATED)
- schemelen = strlen(scheme);
- for(pp = protocols; (p = *pp) != NULL; pp++)
- if(strncasecompare(p->scheme, scheme, schemelen) && !p->scheme[schemelen])
- /* Protocol found in table. */
- return p;
- return NULL; /* not found */
+ return Curl_getn_scheme_handler(scheme, strlen(scheme));
}
+/* returns the handler if the given scheme is built-in */
+const struct Curl_handler *Curl_getn_scheme_handler(const char *scheme,
+ size_t len)
+{
+ /* table generated by schemetable.c:
+ 1. gcc schemetable.c && ./a.out
+ 2. check how small the table gets
+ 3. tweak the hash algorithm, then rerun from 1
+ 4. when the table is good enough
+ 5. copy the table into this source code
+ 6. make sure this function uses the same hash function that worked for
+ schemetable.c
+ 7. if needed, adjust the #ifdefs in schemetable.c and rerun
+ */
+ static const struct Curl_handler * const protocols[67] = {
+#ifndef CURL_DISABLE_FILE
+ &Curl_handler_file,
+#else
+ NULL,
+#endif
+ NULL, NULL,
+#if defined(USE_SSL) && !defined(CURL_DISABLE_GOPHER)
+ &Curl_handler_gophers,
+#else
+ NULL,
+#endif
+ NULL,
+#ifdef USE_LIBRTMP
+ &Curl_handler_rtmpe,
+#else
+ NULL,
+#endif
+#ifndef CURL_DISABLE_SMTP
+ &Curl_handler_smtp,
+#else
+ NULL,
+#endif
+#if defined(USE_SSH)
+ &Curl_handler_sftp,
+#else
+ NULL,
+#endif
+#if !defined(CURL_DISABLE_SMB) && defined(USE_CURL_NTLM_CORE) && \
+ (SIZEOF_CURL_OFF_T > 4)
+ &Curl_handler_smb,
+#else
+ NULL,
+#endif
+#if defined(USE_SSL) && !defined(CURL_DISABLE_SMTP)
+ &Curl_handler_smtps,
+#else
+ NULL,
+#endif
+#ifndef CURL_DISABLE_TELNET
+ &Curl_handler_telnet,
+#else
+ NULL,
+#endif
+#ifndef CURL_DISABLE_GOPHER
+ &Curl_handler_gopher,
+#else
+ NULL,
+#endif
+#ifndef CURL_DISABLE_TFTP
+ &Curl_handler_tftp,
+#else
+ NULL,
+#endif
+ NULL, NULL, NULL,
+#if defined(USE_SSL) && !defined(CURL_DISABLE_FTP)
+ &Curl_handler_ftps,
+#else
+ NULL,
+#endif
+#ifndef CURL_DISABLE_HTTP
+ &Curl_handler_http,
+#else
+ NULL,
+#endif
+#ifndef CURL_DISABLE_IMAP
+ &Curl_handler_imap,
+#else
+ NULL,
+#endif
+#ifdef USE_LIBRTMP
+ &Curl_handler_rtmps,
+#else
+ NULL,
+#endif
+#ifdef USE_LIBRTMP
+ &Curl_handler_rtmpt,
+#else
+ NULL,
+#endif
+ NULL, NULL, NULL,
+#if !defined(CURL_DISABLE_LDAP) && \
+ !defined(CURL_DISABLE_LDAPS) && \
+ ((defined(USE_OPENLDAP) && defined(USE_SSL)) || \
+ (!defined(USE_OPENLDAP) && defined(HAVE_LDAP_SSL)))
+ &Curl_handler_ldaps,
+#else
+ NULL,
+#endif
+#if defined(USE_WEBSOCKETS) && \
+ defined(USE_SSL) && !defined(CURL_DISABLE_HTTP)
+ &Curl_handler_wss,
+#else
+ NULL,
+#endif
+#if defined(USE_SSL) && !defined(CURL_DISABLE_HTTP)
+ &Curl_handler_https,
+#else
+ NULL,
+#endif
+ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+#ifndef CURL_DISABLE_RTSP
+ &Curl_handler_rtsp,
+#else
+ NULL,
+#endif
+#if defined(USE_SSL) && !defined(CURL_DISABLE_SMB) && \
+ defined(USE_CURL_NTLM_CORE) && (SIZEOF_CURL_OFF_T > 4)
+ &Curl_handler_smbs,
+#else
+ NULL,
+#endif
+#if defined(USE_SSH) && !defined(USE_WOLFSSH)
+ &Curl_handler_scp,
+#else
+ NULL,
+#endif
+ NULL, NULL, NULL,
+#ifndef CURL_DISABLE_POP3
+ &Curl_handler_pop3,
+#else
+ NULL,
+#endif
+ NULL, NULL,
+#ifdef USE_LIBRTMP
+ &Curl_handler_rtmp,
+#else
+ NULL,
+#endif
+ NULL, NULL, NULL,
+#ifdef USE_LIBRTMP
+ &Curl_handler_rtmpte,
+#else
+ NULL,
+#endif
+ NULL, NULL, NULL,
+#ifndef CURL_DISABLE_DICT
+ &Curl_handler_dict,
+#else
+ NULL,
+#endif
+ NULL, NULL, NULL,
+#ifndef CURL_DISABLE_MQTT
+ &Curl_handler_mqtt,
+#else
+ NULL,
+#endif
+#if defined(USE_SSL) && !defined(CURL_DISABLE_POP3)
+ &Curl_handler_pop3s,
+#else
+ NULL,
+#endif
+#if defined(USE_SSL) && !defined(CURL_DISABLE_IMAP)
+ &Curl_handler_imaps,
+#else
+ NULL,
+#endif
+ NULL,
+#if defined(USE_WEBSOCKETS) && !defined(CURL_DISABLE_HTTP)
+ &Curl_handler_ws,
+#else
+ NULL,
+#endif
+ NULL,
+#ifdef USE_LIBRTMP
+ &Curl_handler_rtmpts,
+#else
+ NULL,
+#endif
+#ifndef CURL_DISABLE_LDAP
+ &Curl_handler_ldap,
+#else
+ NULL,
+#endif
+ NULL, NULL,
+#ifndef CURL_DISABLE_FTP
+ &Curl_handler_ftp,
+#else
+ NULL,
+#endif
+ };
+
+ if(len && (len <= 7)) {
+ const char *s = scheme;
+ size_t l = len;
+ const struct Curl_handler *h;
+ unsigned int c = 978;
+ while(l) {
+ c <<= 5;
+ c += Curl_raw_tolower(*s);
+ s++;
+ l--;
+ }
+
+ h = protocols[c % 67];
+ if(h && strncasecompare(scheme, h->scheme, len) && !h->scheme[len])
+ return h;
+ }
+ return NULL;
+}
static CURLcode findprotocol(struct Curl_easy *data,
struct connectdata *conn,
const char *protostr)
{
- const struct Curl_handler *p = Curl_builtin_scheme(protostr,
- CURL_ZERO_TERMINATED);
+ const struct Curl_handler *p = Curl_get_scheme_handler(protostr);
if(p && /* Protocol found in table. Check if allowed */
(data->set.allowed_protocols & p->protocol)) {
@@ -1869,7 +1672,6 @@ static CURLcode findprotocol(struct Curl_easy *data,
else {
/* Perform setup complement if some. */
conn->handler = conn->given = p;
-
/* 'port' and 'remote_port' are set in setup_connection_internals() */
return CURLE_OK;
}
@@ -1922,14 +1724,14 @@ static void zonefrom_url(CURLU *uh, struct Curl_easy *data,
conn->scope_id = (unsigned int)scope;
#if defined(HAVE_IF_NAMETOINDEX)
else {
-#elif defined(WIN32)
+#elif defined(_WIN32)
else if(Curl_if_nametoindex) {
#endif
-#if defined(HAVE_IF_NAMETOINDEX) || defined(WIN32)
+#if defined(HAVE_IF_NAMETOINDEX) || defined(_WIN32)
/* Zone identifier is not numeric */
unsigned int scopeidx = 0;
-#if defined(WIN32)
+#if defined(_WIN32)
scopeidx = Curl_if_nametoindex(zoneid);
#else
scopeidx = if_nametoindex(zoneid);
@@ -1944,7 +1746,7 @@ static void zonefrom_url(CURLU *uh, struct Curl_easy *data,
else
conn->scope_id = scopeidx;
}
-#endif /* HAVE_IF_NAMETOINDEX || WIN32 */
+#endif /* HAVE_IF_NAMETOINDEX || _WIN32 */
free(zoneid);
}
@@ -1993,14 +1795,13 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data,
if(!use_set_uh) {
char *newurl;
uc = curl_url_set(uh, CURLUPART_URL, data->state.url,
- CURLU_GUESS_SCHEME |
- CURLU_NON_SUPPORT_SCHEME |
- (data->set.disallow_username_in_url ?
- CURLU_DISALLOW_USER : 0) |
- (data->set.path_as_is ? CURLU_PATH_AS_IS : 0));
+ CURLU_GUESS_SCHEME |
+ CURLU_NON_SUPPORT_SCHEME |
+ (data->set.disallow_username_in_url ?
+ CURLU_DISALLOW_USER : 0) |
+ (data->set.path_as_is ? CURLU_PATH_AS_IS : 0));
if(uc) {
- DEBUGF(infof(data, "curl_url_set rejected %s: %s", data->state.url,
- curl_url_strerror(uc)));
+ failf(data, "URL rejected: %s", curl_url_strerror(uc));
return Curl_uc_to_curlcode(uc);
}
@@ -2051,26 +1852,9 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data,
/*************************************************************
* IDN-convert the hostnames
*************************************************************/
- result = Curl_idnconvert_hostname(data, &conn->host);
+ result = Curl_idnconvert_hostname(&conn->host);
if(result)
return result;
- if(conn->bits.conn_to_host) {
- result = Curl_idnconvert_hostname(data, &conn->conn_to_host);
- if(result)
- return result;
- }
-#ifndef CURL_DISABLE_PROXY
- if(conn->bits.httpproxy) {
- result = Curl_idnconvert_hostname(data, &conn->http_proxy.host);
- if(result)
- return result;
- }
- if(conn->bits.socksproxy) {
- result = Curl_idnconvert_hostname(data, &conn->socks_proxy.host);
- if(result)
- return result;
- }
-#endif
#ifndef CURL_DISABLE_HSTS
/* HSTS upgrade */
@@ -2109,7 +1893,7 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data,
* User name and password set with their own options override the
* credentials possibly set in the URL.
*/
- if(!data->state.aptr.passwd) {
+ if(!data->set.str[STRING_PASSWORD]) {
uc = curl_url_get(uh, CURLUPART_PASSWORD, &data->state.up.password, 0);
if(!uc) {
char *decoded;
@@ -2268,13 +2052,13 @@ void Curl_free_request_state(struct Curl_easy *data)
{
Curl_safefree(data->req.p.http);
Curl_safefree(data->req.newurl);
-
#ifndef CURL_DISABLE_DOH
if(data->req.doh) {
Curl_close(&data->req.doh->probe[0].easy);
Curl_close(&data->req.doh->probe[1].easy);
}
#endif
+ Curl_client_cleanup(data);
}
@@ -2311,7 +2095,6 @@ static char *detect_proxy(struct Curl_easy *data,
char proxy_env[128];
const char *protop = conn->handler->scheme;
char *envp = proxy_env;
- char *prox;
#ifdef CURL_DISABLE_VERBOSE_STRINGS
(void)data;
#endif
@@ -2324,7 +2107,7 @@ static char *detect_proxy(struct Curl_easy *data,
strcpy(envp, "_proxy");
/* read the protocol proxy: */
- prox = curl_getenv(proxy_env);
+ proxy = curl_getenv(proxy_env);
/*
* We don't try the uppercase version of HTTP_PROXY because of
@@ -2338,23 +2121,35 @@ static char *detect_proxy(struct Curl_easy *data,
* This can cause 'internal' http/ftp requests to be
* arbitrarily redirected by any external attacker.
*/
- if(!prox && !strcasecompare("http_proxy", proxy_env)) {
+ if(!proxy && !strcasecompare("http_proxy", proxy_env)) {
/* There was no lowercase variable, try the uppercase version: */
Curl_strntoupper(proxy_env, proxy_env, sizeof(proxy_env));
- prox = curl_getenv(proxy_env);
+ proxy = curl_getenv(proxy_env);
}
envp = proxy_env;
- if(prox) {
- proxy = prox; /* use this */
- }
- else {
- envp = (char *)"all_proxy";
- proxy = curl_getenv(envp); /* default proxy to use */
+ if(!proxy) {
+#ifdef USE_WEBSOCKETS
+ /* websocket proxy fallbacks */
+ if(strcasecompare("ws_proxy", proxy_env)) {
+ proxy = curl_getenv("http_proxy");
+ }
+ else if(strcasecompare("wss_proxy", proxy_env)) {
+ proxy = curl_getenv("https_proxy");
+ if(!proxy)
+ proxy = curl_getenv("HTTPS_PROXY");
+ }
if(!proxy) {
- envp = (char *)"ALL_PROXY";
- proxy = curl_getenv(envp);
+#endif
+ envp = (char *)"all_proxy";
+ proxy = curl_getenv(envp); /* default proxy to use */
+ if(!proxy) {
+ envp = (char *)"ALL_PROXY";
+ proxy = curl_getenv(envp);
+ }
+#ifdef USE_WEBSOCKETS
}
+#endif
}
if(proxy)
infof(data, "Uses proxy env variable %s == '%s'", envp, proxy);
@@ -2365,7 +2160,7 @@ static char *detect_proxy(struct Curl_easy *data,
/*
* If this is supposed to use a proxy, we need to figure out the proxy
- * host name, so that we can re-use an existing connection
+ * host name, so that we can reuse an existing connection
* that may exist registered to the same proxy host.
*/
static CURLcode parse_proxy(struct Curl_easy *data,
@@ -2406,8 +2201,12 @@ static CURLcode parse_proxy(struct Curl_easy *data,
goto error;
}
- if(strcasecompare("https", scheme))
- proxytype = CURLPROXY_HTTPS;
+ if(strcasecompare("https", scheme)) {
+ if(proxytype != CURLPROXY_HTTPS2)
+ proxytype = CURLPROXY_HTTPS;
+ else
+ proxytype = CURLPROXY_HTTPS2;
+ }
else if(strcasecompare("socks5h", scheme))
proxytype = CURLPROXY_SOCKS5_HOSTNAME;
else if(strcasecompare("socks5", scheme))
@@ -2427,17 +2226,18 @@ static CURLcode parse_proxy(struct Curl_easy *data,
}
}
else {
- failf(data, "Unsupported proxy syntax in \'%s\'", proxy);
+ failf(data, "Unsupported proxy syntax in \'%s\': %s", proxy,
+ curl_url_strerror(uc));
result = CURLE_COULDNT_RESOLVE_PROXY;
goto error;
}
#ifdef USE_SSL
- if(!(Curl_ssl->supports & SSLSUPP_HTTPS_PROXY))
+ if(!Curl_ssl_supports(data, SSLSUPP_HTTPS_PROXY))
#endif
- if(proxytype == CURLPROXY_HTTPS) {
+ if(IS_HTTPS_PROXY(proxytype)) {
failf(data, "Unsupported proxy \'%s\', libcurl is built without the "
- "HTTPS-proxy support.", proxy);
+ "HTTPS-proxy support.", proxy);
result = CURLE_NOT_BUILT_IN;
goto error;
}
@@ -2449,7 +2249,7 @@ static CURLcode parse_proxy(struct Curl_easy *data,
proxytype == CURLPROXY_SOCKS4;
proxyinfo = sockstype ? &conn->socks_proxy : &conn->http_proxy;
- proxyinfo->proxytype = proxytype;
+ proxyinfo->proxytype = (unsigned char)proxytype;
/* Is there a username and password given in this proxy url? */
uc = curl_url_get(uhp, CURLUPART_USER, &proxyuser, CURLU_URLDECODE);
@@ -2494,7 +2294,7 @@ static CURLcode parse_proxy(struct Curl_easy *data,
given */
port = (int)data->set.proxyport;
else {
- if(proxytype == CURLPROXY_HTTPS)
+ if(IS_HTTPS_PROXY(proxytype))
port = CURL_DEFAULT_HTTPS_PROXY_PORT;
else
port = CURL_DEFAULT_PROXY_PORT;
@@ -2519,7 +2319,7 @@ static CURLcode parse_proxy(struct Curl_easy *data,
result = CURLE_OUT_OF_MEMORY;
goto error;
}
- /* path will be "/", if no path was was found */
+ /* path will be "/", if no path was found */
if(strcmp("/", path)) {
is_unix_proxy = TRUE;
free(host);
@@ -2552,7 +2352,7 @@ static CURLcode parse_proxy(struct Curl_easy *data,
}
#endif
- error:
+error:
free(proxyuser);
free(proxypasswd);
free(host);
@@ -2574,22 +2374,17 @@ static CURLcode parse_proxy_auth(struct Curl_easy *data,
data->state.aptr.proxyuser : "";
const char *proxypasswd = data->state.aptr.proxypasswd ?
data->state.aptr.proxypasswd : "";
- CURLcode result = CURLE_OK;
-
- if(proxyuser) {
- result = Curl_urldecode(proxyuser, 0, &conn->http_proxy.user, NULL,
- REJECT_ZERO);
- if(!result)
- result = Curl_setstropt(&data->state.aptr.proxyuser,
- conn->http_proxy.user);
- }
- if(!result && proxypasswd) {
+ CURLcode result = Curl_urldecode(proxyuser, 0, &conn->http_proxy.user, NULL,
+ REJECT_ZERO);
+ if(!result)
+ result = Curl_setstropt(&data->state.aptr.proxyuser,
+ conn->http_proxy.user);
+ if(!result)
result = Curl_urldecode(proxypasswd, 0, &conn->http_proxy.passwd,
NULL, REJECT_ZERO);
- if(!result)
- result = Curl_setstropt(&data->state.aptr.proxypasswd,
- conn->http_proxy.passwd);
- }
+ if(!result)
+ result = Curl_setstropt(&data->state.aptr.proxypasswd,
+ conn->http_proxy.passwd);
return result;
}
@@ -2602,6 +2397,7 @@ static CURLcode create_conn_helper_init_proxy(struct Curl_easy *data,
char *socksproxy = NULL;
char *no_proxy = NULL;
CURLcode result = CURLE_OK;
+ bool spacesep = FALSE;
/*************************************************************
* Extract the user and password from the authentication string
@@ -2648,7 +2444,8 @@ static CURLcode create_conn_helper_init_proxy(struct Curl_easy *data,
}
if(Curl_check_noproxy(conn->host.name, data->set.str[STRING_NOPROXY] ?
- data->set.str[STRING_NOPROXY] : no_proxy)) {
+ data->set.str[STRING_NOPROXY] : no_proxy,
+ &spacesep)) {
Curl_safefree(proxy);
Curl_safefree(socksproxy);
}
@@ -2657,6 +2454,8 @@ static CURLcode create_conn_helper_init_proxy(struct Curl_easy *data,
/* if the host is not in the noproxy list, detect proxy. */
proxy = detect_proxy(data, conn);
#endif /* CURL_DISABLE_HTTP */
+ if(spacesep)
+ infof(data, "space-separated NOPROXY patterns are deprecated");
Curl_safefree(no_proxy);
@@ -2682,7 +2481,7 @@ static CURLcode create_conn_helper_init_proxy(struct Curl_easy *data,
/***********************************************************************
* If this is supposed to use a proxy, we need to figure out the proxy host
- * name, proxy type and port number, so that we can re-use an existing
+ * name, proxy type and port number, so that we can reuse an existing
* connection that may exist registered to the same proxy host.
***********************************************************************/
if(proxy || socksproxy) {
@@ -2704,7 +2503,7 @@ static CURLcode create_conn_helper_init_proxy(struct Curl_easy *data,
if(conn->http_proxy.host.rawalloc) {
#ifdef CURL_DISABLE_HTTP
- /* asking for a HTTP proxy is a bit funny when HTTP is disabled... */
+ /* asking for an HTTP proxy is a bit funny when HTTP is disabled... */
result = CURLE_UNSUPPORTED_PROTOCOL;
goto out;
#else
@@ -2721,7 +2520,7 @@ static CURLcode create_conn_helper_init_proxy(struct Curl_easy *data,
#endif
}
else {
- conn->bits.httpproxy = FALSE; /* not a HTTP proxy */
+ conn->bits.httpproxy = FALSE; /* not an HTTP proxy */
conn->bits.tunnel_proxy = FALSE; /* no tunneling if not HTTP */
}
@@ -2810,29 +2609,13 @@ CURLcode Curl_parse_login_details(const char *login, const size_t len,
size_t plen;
size_t olen;
- /* the input length check is because this is called directly from setopt
- and isn't going through the regular string length check */
- size_t llen = strlen(login);
- if(llen > CURL_MAX_INPUT_LENGTH)
- return CURLE_BAD_FUNCTION_ARGUMENT;
-
/* Attempt to find the password separator */
- if(passwdp) {
- psep = strchr(login, ':');
-
- /* Within the constraint of the login string */
- if(psep >= login + len)
- psep = NULL;
- }
+ if(passwdp)
+ psep = memchr(login, ':', len);
/* Attempt to find the options separator */
- if(optionsp) {
- osep = strchr(login, ';');
-
- /* Within the constraint of the login string */
- if(osep >= login + len)
- osep = NULL;
- }
+ if(optionsp)
+ osep = memchr(login, ';', len);
/* Calculate the portion lengths */
ulen = (psep ?
@@ -2966,7 +2749,9 @@ static CURLcode override_login(struct Curl_easy *data,
data->set.str[STRING_NETRC_FILE]);
if(ret > 0) {
infof(data, "Couldn't find host %s in the %s file; using defaults",
- conn->host.name, data->set.str[STRING_NETRC_FILE]);
+ conn->host.name,
+ (data->set.str[STRING_NETRC_FILE] ?
+ data->set.str[STRING_NETRC_FILE] : ".netrc"));
}
else if(ret < 0) {
failf(data, ".netrc parser error");
@@ -2985,7 +2770,7 @@ static CURLcode override_login(struct Curl_easy *data,
return CURLE_OUT_OF_MEMORY;
}
/* no user was set but a password, set a blank user */
- if(userp && !*userp && *passwdp) {
+ if(!*userp && *passwdp) {
*userp = strdup("");
if(!*userp)
return CURLE_OUT_OF_MEMORY;
@@ -3157,17 +2942,16 @@ static CURLcode parse_connect_to_host_port(struct Curl_easy *data,
}
/* now, clone the cleaned host name */
- if(hostptr) {
- *hostname_result = strdup(hostptr);
- if(!*hostname_result) {
- result = CURLE_OUT_OF_MEMORY;
- goto error;
- }
+ DEBUGASSERT(hostptr);
+ *hostname_result = strdup(hostptr);
+ if(!*hostname_result) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto error;
}
*port_result = port;
- error:
+error:
free(host_dup);
return result;
}
@@ -3462,8 +3246,8 @@ static CURLcode resolve_host(struct Curl_easy *data,
if(rc == CURLRESOLV_PENDING)
*async = TRUE;
else if(rc == CURLRESOLV_TIMEDOUT) {
- failf(data, "Failed to resolve host '%s' with timeout after %ld ms",
- connhost->dispname,
+ failf(data, "Failed to resolve host '%s' with timeout after %"
+ CURL_FORMAT_TIMEDIFF_T " ms", connhost->dispname,
Curl_timediff(Curl_now(), data->progress.t_startsingle));
return CURLE_OPERATION_TIMEDOUT;
}
@@ -3517,7 +3301,7 @@ static CURLcode resolve_server(struct Curl_easy *data,
/* Resolve the name of the server or proxy */
if(conn->bits.reuse) {
/* We're reusing the connection - no need to resolve anything, and
- idnconvert_hostname() was called already in create_conn() for the re-use
+ idnconvert_hostname() was called already in create_conn() for the reuse
case. */
*async = FALSE;
return CURLE_OK;
@@ -3527,84 +3311,83 @@ static CURLcode resolve_server(struct Curl_easy *data,
}
/*
- * Cleanup the connection just allocated before we can move along and use the
- * previously existing one. All relevant data is copied over and old_conn is
- * ready for freeing once this function returns.
+ * Cleanup the connection `temp`, just allocated for `data`, before using the
+ * previously `existing` one for `data`. All relevant info is copied over
+ * and `temp` is freed.
*/
static void reuse_conn(struct Curl_easy *data,
- struct connectdata *old_conn,
- struct connectdata *conn)
+ struct connectdata *temp,
+ struct connectdata *existing)
{
- /* 'local_ip' and 'local_port' get filled with local's numerical
- ip address and port number whenever an outgoing connection is
- **established** from the primary socket to a remote address. */
- char local_ip[MAX_IPADR_LEN] = "";
- int local_port = -1;
-
- /* get the user+password information from the old_conn struct since it may
- * be new for this request even when we re-use an existing connection */
- if(old_conn->user) {
+ /* get the user+password information from the temp struct since it may
+ * be new for this request even when we reuse an existing connection */
+ if(temp->user) {
/* use the new user name and password though */
- Curl_safefree(conn->user);
- Curl_safefree(conn->passwd);
- conn->user = old_conn->user;
- conn->passwd = old_conn->passwd;
- old_conn->user = NULL;
- old_conn->passwd = NULL;
+ Curl_safefree(existing->user);
+ Curl_safefree(existing->passwd);
+ existing->user = temp->user;
+ existing->passwd = temp->passwd;
+ temp->user = NULL;
+ temp->passwd = NULL;
}
#ifndef CURL_DISABLE_PROXY
- conn->bits.proxy_user_passwd = old_conn->bits.proxy_user_passwd;
- if(conn->bits.proxy_user_passwd) {
+ existing->bits.proxy_user_passwd = temp->bits.proxy_user_passwd;
+ if(existing->bits.proxy_user_passwd) {
/* use the new proxy user name and proxy password though */
- Curl_safefree(conn->http_proxy.user);
- Curl_safefree(conn->socks_proxy.user);
- Curl_safefree(conn->http_proxy.passwd);
- Curl_safefree(conn->socks_proxy.passwd);
- conn->http_proxy.user = old_conn->http_proxy.user;
- conn->socks_proxy.user = old_conn->socks_proxy.user;
- conn->http_proxy.passwd = old_conn->http_proxy.passwd;
- conn->socks_proxy.passwd = old_conn->socks_proxy.passwd;
- old_conn->http_proxy.user = NULL;
- old_conn->socks_proxy.user = NULL;
- old_conn->http_proxy.passwd = NULL;
- old_conn->socks_proxy.passwd = NULL;
- }
-#endif
-
- Curl_free_idnconverted_hostname(&conn->host);
- Curl_free_idnconverted_hostname(&conn->conn_to_host);
- Curl_safefree(conn->host.rawalloc);
- Curl_safefree(conn->conn_to_host.rawalloc);
- conn->host = old_conn->host;
- old_conn->host.rawalloc = NULL;
- old_conn->host.encalloc = NULL;
- conn->conn_to_host = old_conn->conn_to_host;
- old_conn->conn_to_host.rawalloc = NULL;
- conn->conn_to_port = old_conn->conn_to_port;
- conn->remote_port = old_conn->remote_port;
- Curl_safefree(conn->hostname_resolve);
-
- conn->hostname_resolve = old_conn->hostname_resolve;
- old_conn->hostname_resolve = NULL;
-
- /* persist connection info in session handle */
- if(conn->transport == TRNSPRT_TCP) {
- Curl_conninfo_local(data, conn->sock[FIRSTSOCKET],
- local_ip, &local_port);
- }
- Curl_persistconninfo(data, conn, local_ip, local_port);
-
- conn_reset_all_postponed_data(old_conn); /* free buffers */
-
- /* re-use init */
- conn->bits.reuse = TRUE; /* yes, we're re-using here */
-
- conn_free(old_conn);
+ Curl_safefree(existing->http_proxy.user);
+ Curl_safefree(existing->socks_proxy.user);
+ Curl_safefree(existing->http_proxy.passwd);
+ Curl_safefree(existing->socks_proxy.passwd);
+ existing->http_proxy.user = temp->http_proxy.user;
+ existing->socks_proxy.user = temp->socks_proxy.user;
+ existing->http_proxy.passwd = temp->http_proxy.passwd;
+ existing->socks_proxy.passwd = temp->socks_proxy.passwd;
+ temp->http_proxy.user = NULL;
+ temp->socks_proxy.user = NULL;
+ temp->http_proxy.passwd = NULL;
+ temp->socks_proxy.passwd = NULL;
+ }
+#endif
+
+ /* Finding a connection for reuse in the cache matches, among other
+ * things on the "remote-relevant" hostname. This is not necessarily
+ * the authority of the URL, e.g. conn->host. For example:
+ * - we use a proxy (not tunneling). we want to send all requests
+ * that use the same proxy on this connection.
+ * - we have a "connect-to" setting that may redirect the hostname of
+ * a new request to the same remote endpoint of an existing conn.
+ * We want to reuse an existing conn to the remote endpoint.
+ * Since connection reuse does not match on conn->host necessarily, we
+ * switch `existing` conn to `temp` conn's host settings.
+ * TODO: is this correct in the case of TLS connections that have
+ * used the original hostname in SNI to negotiate? Do we send
+ * requests for another host through the different SNI?
+ */
+ Curl_free_idnconverted_hostname(&existing->host);
+ Curl_free_idnconverted_hostname(&existing->conn_to_host);
+ Curl_safefree(existing->host.rawalloc);
+ Curl_safefree(existing->conn_to_host.rawalloc);
+ existing->host = temp->host;
+ temp->host.rawalloc = NULL;
+ temp->host.encalloc = NULL;
+ existing->conn_to_host = temp->conn_to_host;
+ temp->conn_to_host.rawalloc = NULL;
+ existing->conn_to_port = temp->conn_to_port;
+ existing->remote_port = temp->remote_port;
+ Curl_safefree(existing->hostname_resolve);
+
+ existing->hostname_resolve = temp->hostname_resolve;
+ temp->hostname_resolve = NULL;
+
+ /* reuse init */
+ existing->bits.reuse = TRUE; /* yes, we're reusing here */
+
+ conn_free(data, temp);
}
/**
- * create_conn() sets up a new connectdata struct, or re-uses an already
+ * create_conn() sets up a new connectdata struct, or reuses an already
* existing one, and resolves host name.
*
* if this function returns CURLE_OK and *async is set to TRUE, the resolve
@@ -3624,7 +3407,7 @@ static CURLcode create_conn(struct Curl_easy *data,
{
CURLcode result = CURLE_OK;
struct connectdata *conn;
- struct connectdata *conn_temp = NULL;
+ struct connectdata *existing = NULL;
bool reuse;
bool connections_available = TRUE;
bool force_reuse = FALSE;
@@ -3730,6 +3513,26 @@ static CURLcode create_conn(struct Curl_easy *data,
if(result)
goto out;
+ /*************************************************************
+ * IDN-convert the proxy hostnames
+ *************************************************************/
+#ifndef CURL_DISABLE_PROXY
+ if(conn->bits.httpproxy) {
+ result = Curl_idnconvert_hostname(&conn->http_proxy.host);
+ if(result)
+ return result;
+ }
+ if(conn->bits.socksproxy) {
+ result = Curl_idnconvert_hostname(&conn->socks_proxy.host);
+ if(result)
+ return result;
+ }
+#endif
+ if(conn->bits.conn_to_host) {
+ result = Curl_idnconvert_hostname(&conn->conn_to_host);
+ if(result)
+ return result;
+ }
/*************************************************************
* Check whether the host and the "connect to host" are equal.
@@ -3766,13 +3569,6 @@ static CURLcode create_conn(struct Curl_easy *data,
if(result)
goto out;
- conn->recv[FIRSTSOCKET] = Curl_recv_plain;
- conn->send[FIRSTSOCKET] = Curl_send_plain;
- conn->recv[SECONDARYSOCKET] = Curl_recv_plain;
- conn->send[SECONDARYSOCKET] = Curl_send_plain;
-
- conn->bits.tcp_fastopen = data->set.tcp_fastopen;
-
/***********************************************************************
* file: is a special case in that it doesn't need a network connection
***********************************************************************/
@@ -3787,8 +3583,6 @@ static CURLcode create_conn(struct Curl_easy *data,
/* Setup a "faked" transfer that'll do nothing */
if(!result) {
- conn->bits.tcpconnect[FIRSTSOCKET] = TRUE; /* we are "connected */
-
Curl_attach_connection(data, conn);
result = Curl_conncache_add_conn(data);
if(result)
@@ -3814,91 +3608,23 @@ static CURLcode create_conn(struct Curl_easy *data,
}
#endif
- /* Get a cloned copy of the SSL config situation stored in the
- connection struct. But to get this going nicely, we must first make
- sure that the strings in the master copy are pointing to the correct
- strings in the session handle strings array!
-
- Keep in mind that the pointers in the master copy are pointing to strings
- that will be freed as part of the Curl_easy struct, but all cloned
- copies will be separately allocated.
- */
- data->set.ssl.primary.CApath = data->set.str[STRING_SSL_CAPATH];
- data->set.ssl.primary.CAfile = data->set.str[STRING_SSL_CAFILE];
- data->set.ssl.primary.issuercert = data->set.str[STRING_SSL_ISSUERCERT];
- data->set.ssl.primary.issuercert_blob = data->set.blobs[BLOB_SSL_ISSUERCERT];
- data->set.ssl.primary.cipher_list =
- data->set.str[STRING_SSL_CIPHER_LIST];
- data->set.ssl.primary.cipher_list13 =
- data->set.str[STRING_SSL_CIPHER13_LIST];
- data->set.ssl.primary.pinned_key =
- data->set.str[STRING_SSL_PINNEDPUBLICKEY];
- data->set.ssl.primary.cert_blob = data->set.blobs[BLOB_CERT];
- data->set.ssl.primary.ca_info_blob = data->set.blobs[BLOB_CAINFO];
- data->set.ssl.primary.curves = data->set.str[STRING_SSL_EC_CURVES];
-
-#ifndef CURL_DISABLE_PROXY
- data->set.proxy_ssl.primary.CApath = data->set.str[STRING_SSL_CAPATH_PROXY];
- data->set.proxy_ssl.primary.CAfile = data->set.str[STRING_SSL_CAFILE_PROXY];
- data->set.proxy_ssl.primary.cipher_list =
- data->set.str[STRING_SSL_CIPHER_LIST_PROXY];
- data->set.proxy_ssl.primary.cipher_list13 =
- data->set.str[STRING_SSL_CIPHER13_LIST_PROXY];
- data->set.proxy_ssl.primary.pinned_key =
- data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY];
- data->set.proxy_ssl.primary.cert_blob = data->set.blobs[BLOB_CERT_PROXY];
- data->set.proxy_ssl.primary.ca_info_blob =
- data->set.blobs[BLOB_CAINFO_PROXY];
- data->set.proxy_ssl.primary.issuercert =
- data->set.str[STRING_SSL_ISSUERCERT_PROXY];
- data->set.proxy_ssl.primary.issuercert_blob =
- data->set.blobs[BLOB_SSL_ISSUERCERT_PROXY];
- data->set.proxy_ssl.primary.CRLfile =
- data->set.str[STRING_SSL_CRLFILE_PROXY];
- data->set.proxy_ssl.cert_type = data->set.str[STRING_CERT_TYPE_PROXY];
- data->set.proxy_ssl.key = data->set.str[STRING_KEY_PROXY];
- data->set.proxy_ssl.key_type = data->set.str[STRING_KEY_TYPE_PROXY];
- data->set.proxy_ssl.key_passwd = data->set.str[STRING_KEY_PASSWD_PROXY];
- data->set.proxy_ssl.primary.clientcert = data->set.str[STRING_CERT_PROXY];
- data->set.proxy_ssl.key_blob = data->set.blobs[BLOB_KEY_PROXY];
-#endif
- data->set.ssl.primary.CRLfile = data->set.str[STRING_SSL_CRLFILE];
- data->set.ssl.cert_type = data->set.str[STRING_CERT_TYPE];
- data->set.ssl.key = data->set.str[STRING_KEY];
- data->set.ssl.key_type = data->set.str[STRING_KEY_TYPE];
- data->set.ssl.key_passwd = data->set.str[STRING_KEY_PASSWD];
- data->set.ssl.primary.clientcert = data->set.str[STRING_CERT];
-#ifdef USE_TLS_SRP
- data->set.ssl.primary.username = data->set.str[STRING_TLSAUTH_USERNAME];
- data->set.ssl.primary.password = data->set.str[STRING_TLSAUTH_PASSWORD];
-#ifndef CURL_DISABLE_PROXY
- data->set.proxy_ssl.primary.username =
- data->set.str[STRING_TLSAUTH_USERNAME_PROXY];
- data->set.proxy_ssl.primary.password =
- data->set.str[STRING_TLSAUTH_PASSWORD_PROXY];
-#endif
-#endif
- data->set.ssl.key_blob = data->set.blobs[BLOB_KEY];
-
- if(!Curl_clone_primary_ssl_config(&data->set.ssl.primary,
- &conn->ssl_config)) {
- result = CURLE_OUT_OF_MEMORY;
- goto out;
- }
+ /* Setup filter for network connections */
+ conn->recv[FIRSTSOCKET] = Curl_conn_recv;
+ conn->send[FIRSTSOCKET] = Curl_conn_send;
+ conn->recv[SECONDARYSOCKET] = Curl_conn_recv;
+ conn->send[SECONDARYSOCKET] = Curl_conn_send;
+ conn->bits.tcp_fastopen = data->set.tcp_fastopen;
-#ifndef CURL_DISABLE_PROXY
- if(!Curl_clone_primary_ssl_config(&data->set.proxy_ssl.primary,
- &conn->proxy_ssl_config)) {
- result = CURLE_OUT_OF_MEMORY;
+ /* Complete the easy's SSL configuration for connection cache matching */
+ result = Curl_ssl_easy_config_complete(data);
+ if(result)
goto out;
- }
-#endif
prune_dead_connections(data);
/*************************************************************
* Check the current list of connections to see if we can
- * re-use an already existing one or if we have to create a
+ * reuse an already existing one or if we have to create a
* new one.
*************************************************************/
@@ -3906,35 +3632,34 @@ static CURLcode create_conn(struct Curl_easy *data,
DEBUGASSERT(conn->passwd);
/* reuse_fresh is TRUE if we are told to use a new connection by force, but
- we only acknowledge this option if this is not a re-used connection
- already (which happens due to follow-location or during a HTTP
+ we only acknowledge this option if this is not a reused connection
+ already (which happens due to follow-location or during an HTTP
authentication phase). CONNECT_ONLY transfers also refuse reuse. */
- if((data->set.reuse_fresh && !data->state.this_is_a_follow) ||
+ if((data->set.reuse_fresh && !data->state.followlocation) ||
data->set.connect_only)
reuse = FALSE;
else
- reuse = ConnectionExists(data, conn, &conn_temp, &force_reuse, &waitpipe);
+ reuse = ConnectionExists(data, conn, &existing, &force_reuse, &waitpipe);
if(reuse) {
/*
* We already have a connection for this, we got the former connection in
- * the conn_temp variable and thus we need to cleanup the one we just
- * allocated before we can move along and use the previously existing one.
+ * `existing` and thus we need to cleanup the one we just
+ * allocated before we can move along and use `existing`.
*/
- reuse_conn(data, conn, conn_temp);
- conn = conn_temp;
+ reuse_conn(data, conn, existing);
+ conn = existing;
*in_connect = conn;
#ifndef CURL_DISABLE_PROXY
- infof(data, "Re-using existing connection #%ld with %s %s",
- conn->connection_id,
+ infof(data, "Re-using existing connection with %s %s",
conn->bits.proxy?"proxy":"host",
conn->socks_proxy.host.name ? conn->socks_proxy.host.dispname :
conn->http_proxy.host.name ? conn->http_proxy.host.dispname :
conn->host.dispname);
#else
- infof(data, "Re-using existing connection #%ld with host %s",
- conn->connection_id, conn->host.dispname);
+ infof(data, "Re-using existing connection with host %s",
+ conn->host.dispname);
#endif
}
else {
@@ -3997,7 +3722,7 @@ static CURLcode create_conn(struct Curl_easy *data,
if(!connections_available) {
infof(data, "No connections available.");
- conn_free(conn);
+ conn_free(data, conn);
*in_connect = NULL;
result = CURLE_NO_CONNECTION_AVAILABLE;
@@ -4008,7 +3733,41 @@ static CURLcode create_conn(struct Curl_easy *data,
* This is a brand new connection, so let's store it in the connection
* cache of ours!
*/
+ result = Curl_ssl_conn_config_init(data, conn);
+ if(result) {
+ DEBUGF(fprintf(stderr, "Error: init connection ssl config\n"));
+ goto out;
+ }
+
+ result = Curl_resolver_init(data, &conn->resolve_async.resolver);
+ if(result) {
+ DEBUGF(fprintf(stderr, "Error: resolver_init failed\n"));
+ goto out;
+ }
+
Curl_attach_connection(data, conn);
+
+#ifdef USE_ARES
+ result = Curl_set_dns_servers(data, data->set.str[STRING_DNS_SERVERS]);
+ if(result && result != CURLE_NOT_BUILT_IN)
+ goto out;
+
+ result = Curl_set_dns_interface(data,
+ data->set.str[STRING_DNS_INTERFACE]);
+ if(result && result != CURLE_NOT_BUILT_IN)
+ goto out;
+
+ result = Curl_set_dns_local_ip4(data,
+ data->set.str[STRING_DNS_LOCAL_IP4]);
+ if(result && result != CURLE_NOT_BUILT_IN)
+ goto out;
+
+ result = Curl_set_dns_local_ip6(data,
+ data->set.str[STRING_DNS_LOCAL_IP6]);
+ if(result && result != CURLE_NOT_BUILT_IN)
+ goto out;
+#endif /* USE_ARES */
+
result = Curl_conncache_add_conn(data);
if(result)
goto out;
@@ -4057,6 +3816,13 @@ static CURLcode create_conn(struct Curl_easy *data,
* Resolve the address of the server or proxy
*************************************************************/
result = resolve_server(data, conn, async);
+ if(result)
+ goto out;
+
+ /* Everything general done, inform filters that they need
+ * to prepare for a data transfer.
+ */
+ result = Curl_conn_ev_data_setup(data);
out:
return result;
@@ -4080,7 +3846,6 @@ CURLcode Curl_setup_conn(struct Curl_easy *data,
*protocol_done = TRUE;
return result;
}
- *protocol_done = FALSE; /* default to not done */
#ifndef CURL_DISABLE_PROXY
/* set proxy_connect_closed to false unconditionally already here since it
@@ -4097,26 +3862,11 @@ CURLcode Curl_setup_conn(struct Curl_easy *data,
/* set start time here for timeout purposes in the connect procedure, it
is later set again for the progress meter purpose */
conn->now = Curl_now();
-
- if(CURL_SOCKET_BAD == conn->sock[FIRSTSOCKET]) {
- conn->bits.tcpconnect[FIRSTSOCKET] = FALSE;
- result = Curl_connecthost(data, conn, conn->dns_entry);
- if(result)
- return result;
- }
- else {
- Curl_pgrsTime(data, TIMER_CONNECT); /* we're connected already */
- if(conn->ssl[FIRSTSOCKET].use ||
- (conn->handler->protocol & PROTO_FAMILY_SSH))
- Curl_pgrsTime(data, TIMER_APPCONNECT); /* we're connected already */
- conn->bits.tcpconnect[FIRSTSOCKET] = TRUE;
- *protocol_done = TRUE;
- Curl_updateconninfo(data, conn, conn->sock[FIRSTSOCKET]);
- Curl_verboseconnect(data, conn);
- }
-
- conn->now = Curl_now(); /* time this *after* the connect is done, we set
- this here perhaps a second time */
+ if(!conn->bits.reuse)
+ result = Curl_conn_setup(data, conn, FIRSTSOCKET, conn->dns_entry,
+ CURL_CF_SSL_DEFAULT);
+ /* not sure we need this flag to be passed around any more */
+ *protocol_done = FALSE;
return result;
}
@@ -4133,6 +3883,7 @@ CURLcode Curl_connect(struct Curl_easy *data,
Curl_free_request_state(data);
memset(&data->req, 0, sizeof(struct SingleRequest));
data->req.size = data->req.maxdownload = -1;
+ data->req.no_body = data->set.opt_no_body;
/* call the stuff that needs to be called */
result = create_conn(data, &conn, asyncp);
@@ -4194,19 +3945,118 @@ CURLcode Curl_init_do(struct Curl_easy *data, struct connectdata *conn)
data->state.done = FALSE; /* *_done() is not called yet */
data->state.expect100header = FALSE;
- if(data->set.opt_no_body)
+ if(data->req.no_body)
/* in HTTP lingo, no body means using the HEAD request... */
data->state.httpreq = HTTPREQ_HEAD;
k->start = Curl_now(); /* start time */
- k->now = k->start; /* current time is now */
k->header = TRUE; /* assume header */
k->bytecount = 0;
k->ignorebody = FALSE;
+ Curl_client_cleanup(data);
Curl_speedinit(data);
Curl_pgrsSetUploadCounter(data, 0);
Curl_pgrsSetDownloadCounter(data, 0);
return CURLE_OK;
}
+
+#if defined(USE_HTTP2) || defined(USE_HTTP3)
+
+#ifdef USE_NGHTTP2
+
+static void priority_remove_child(struct Curl_easy *parent,
+ struct Curl_easy *child)
+{
+ struct Curl_data_prio_node **pnext = &parent->set.priority.children;
+ struct Curl_data_prio_node *pnode = parent->set.priority.children;
+
+ DEBUGASSERT(child->set.priority.parent == parent);
+ while(pnode && pnode->data != child) {
+ pnext = &pnode->next;
+ pnode = pnode->next;
+ }
+
+ DEBUGASSERT(pnode);
+ if(pnode) {
+ *pnext = pnode->next;
+ free(pnode);
+ }
+
+ child->set.priority.parent = 0;
+ child->set.priority.exclusive = FALSE;
+}
+
+CURLcode Curl_data_priority_add_child(struct Curl_easy *parent,
+ struct Curl_easy *child,
+ bool exclusive)
+{
+ if(child->set.priority.parent) {
+ priority_remove_child(child->set.priority.parent, child);
+ }
+
+ if(parent) {
+ struct Curl_data_prio_node **tail;
+ struct Curl_data_prio_node *pnode;
+
+ pnode = calloc(1, sizeof(*pnode));
+ if(!pnode)
+ return CURLE_OUT_OF_MEMORY;
+ pnode->data = child;
+
+ if(parent->set.priority.children && exclusive) {
+ /* exclusive: move all existing children underneath the new child */
+ struct Curl_data_prio_node *node = parent->set.priority.children;
+ while(node) {
+ node->data->set.priority.parent = child;
+ node = node->next;
+ }
+
+ tail = &child->set.priority.children;
+ while(*tail)
+ tail = &(*tail)->next;
+
+ DEBUGASSERT(!*tail);
+ *tail = parent->set.priority.children;
+ parent->set.priority.children = 0;
+ }
+
+ tail = &parent->set.priority.children;
+ while(*tail) {
+ (*tail)->data->set.priority.exclusive = FALSE;
+ tail = &(*tail)->next;
+ }
+
+ DEBUGASSERT(!*tail);
+ *tail = pnode;
+ }
+
+ child->set.priority.parent = parent;
+ child->set.priority.exclusive = exclusive;
+ return CURLE_OK;
+}
+
+#endif /* USE_NGHTTP2 */
+
+#ifdef USE_NGHTTP2
+static void data_priority_cleanup(struct Curl_easy *data)
+{
+ while(data->set.priority.children) {
+ struct Curl_easy *tmp = data->set.priority.children->data;
+ priority_remove_child(data, tmp);
+ if(data->set.priority.parent)
+ Curl_data_priority_add_child(data->set.priority.parent, tmp, FALSE);
+ }
+
+ if(data->set.priority.parent)
+ priority_remove_child(data->set.priority.parent, data);
+}
+#endif
+
+void Curl_data_priority_clear_state(struct Curl_easy *data)
+{
+ memset(&data->state.priority, 0, sizeof(data->state.priority));
+}
+
+#endif /* defined(USE_HTTP2) || defined(USE_HTTP3) */
diff --git a/lib/url.h b/lib/url.h
index ba4270d52..7c1a29bc3 100644
--- a/lib/url.h
+++ b/lib/url.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -46,13 +46,13 @@ CURLcode Curl_parse_login_details(const char *login, const size_t len,
char **userptr, char **passwdptr,
char **optionsptr);
-const struct Curl_handler *Curl_builtin_scheme(const char *scheme,
- size_t schemelen);
-
-bool Curl_is_ASCII_name(const char *hostname);
-CURLcode Curl_idnconvert_hostname(struct Curl_easy *data,
- struct hostname *host);
-void Curl_free_idnconverted_hostname(struct hostname *host);
+/* Get protocol handler for a URI scheme
+ * @param scheme URI scheme, case-insensitive
+ * @return NULL of handler not found
+ */
+const struct Curl_handler *Curl_get_scheme_handler(const char *scheme);
+const struct Curl_handler *Curl_getn_scheme_handler(const char *scheme,
+ size_t len);
#define CURL_DEFAULT_PROXY_PORT 1080 /* default proxy port unless specified */
#define CURL_DEFAULT_HTTPS_PROXY_PORT 443 /* default https proxy port unless
@@ -64,21 +64,18 @@ void Curl_free_idnconverted_hostname(struct hostname *host);
void Curl_verboseconnect(struct Curl_easy *data, struct connectdata *conn);
#endif
-#ifdef CURL_DISABLE_PROXY
-#define CONNECT_PROXY_SSL() FALSE
+#if defined(USE_HTTP2) || defined(USE_HTTP3)
+void Curl_data_priority_clear_state(struct Curl_easy *data);
#else
+#define Curl_data_priority_clear_state(x)
+#endif /* !(defined(USE_HTTP2) || defined(USE_HTTP3)) */
-#define CONNECT_PROXY_SSL()\
- (conn->http_proxy.proxytype == CURLPROXY_HTTPS &&\
- !conn->bits.proxy_ssl_connected[sockindex])
-
-#define CONNECT_FIRSTSOCKET_PROXY_SSL()\
- (conn->http_proxy.proxytype == CURLPROXY_HTTPS &&\
- !conn->bits.proxy_ssl_connected[FIRSTSOCKET])
-
-#define CONNECT_SECONDARYSOCKET_PROXY_SSL()\
- (conn->http_proxy.proxytype == CURLPROXY_HTTPS &&\
- !conn->bits.proxy_ssl_connected[SECONDARYSOCKET])
-#endif /* !CURL_DISABLE_PROXY */
+#ifdef USE_NGHTTP2
+CURLcode Curl_data_priority_add_child(struct Curl_easy *parent,
+ struct Curl_easy *child,
+ bool exclusive);
+#else
+#define Curl_data_priority_add_child(x, y, z) CURLE_NOT_BUILT_IN
+#endif
#endif /* HEADER_CURL_URL_H */
diff --git a/lib/urlapi-int.h b/lib/urlapi-int.h
index 43a83ef6e..d6e240aa3 100644
--- a/lib/urlapi-int.h
+++ b/lib/urlapi-int.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -28,6 +28,9 @@
size_t Curl_is_absolute_url(const char *url, char *buf, size_t buflen,
bool guess_scheme);
+CURLUcode Curl_url_set_authority(CURLU *u, const char *authority,
+ unsigned int flags);
+
#ifdef DEBUGBUILD
CURLUcode Curl_parse_port(struct Curl_URL *u, struct dynbuf *host,
bool has_scheme);
diff --git a/lib/urlapi.c b/lib/urlapi.c
index 7dac81c85..0d11e48c9 100644
--- a/lib/urlapi.c
+++ b/lib/urlapi.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -33,6 +33,8 @@
#include "inet_pton.h"
#include "inet_ntop.h"
#include "strdup.h"
+#include "idn.h"
+#include "curl_memrchr.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
@@ -56,6 +58,15 @@
/* scheme is not URL encoded, the longest libcurl supported ones are... */
#define MAX_SCHEME_LEN 40
+/*
+ * If ENABLE_IPV6 is disabled, we still want to parse IPv6 addresses, so make
+ * sure we have _some_ value for AF_INET6 without polluting our fake value
+ * everywhere.
+ */
+#if !defined(ENABLE_IPV6) && !defined(AF_INET6)
+#define AF_INET6 (AF_INET + 1)
+#endif
+
/* Internal representation of CURLU. Point to URL-encoded strings. */
struct Curl_URL {
char *scheme;
@@ -89,7 +100,7 @@ static void free_urlhandle(struct Curl_URL *u)
/*
* Find the separator at the end of the host name, or the '?' in cases like
- * http://www.url.com?id=2380
+ * http://www.example.com?id=2380
*/
static const char *find_host_sep(const char *url)
{
@@ -116,14 +127,11 @@ static const char *find_host_sep(const char *url)
}
/*
- * Decide in an encoding-independent manner whether a character in a URL must
- * be escaped. This is used in urlencode_str().
+ * Decide whether a character in a URL must be escaped.
*/
-static bool urlchar_needs_escaping(int c)
-{
- return !(ISCNTRL(c) || ISSPACE(c) || ISGRAPH(c));
-}
+#define urlchar_needs_escaping(c) (!(ISCNTRL(c) || ISSPACE(c) || ISGRAPH(c)))
+static const char hexdigits[] = "0123456789abcdef";
/* urlencode_str() writes data into an output dynbuf and URL-encodes the
* spaces in the source URL accordingly.
*
@@ -167,7 +175,10 @@ static CURLUcode urlencode_str(struct dynbuf *o, const char *url,
left = FALSE;
if(urlchar_needs_escaping(*iptr)) {
- if(Curl_dyn_addf(o, "%%%02x", *iptr))
+ char out[3]={'%'};
+ out[1] = hexdigits[*iptr>>4];
+ out[2] = hexdigits[*iptr & 0xf];
+ if(Curl_dyn_addn(o, out, 3))
return CURLUE_OUT_OF_MEMORY;
}
else {
@@ -190,26 +201,27 @@ static CURLUcode urlencode_str(struct dynbuf *o, const char *url,
size_t Curl_is_absolute_url(const char *url, char *buf, size_t buflen,
bool guess_scheme)
{
- int i;
+ int i = 0;
DEBUGASSERT(!buf || (buflen > MAX_SCHEME_LEN));
(void)buflen; /* only used in debug-builds */
if(buf)
buf[0] = 0; /* always leave a defined value in buf */
-#ifdef WIN32
+#ifdef _WIN32
if(guess_scheme && STARTS_WITH_DRIVE_PREFIX(url))
return 0;
#endif
- for(i = 0; i < MAX_SCHEME_LEN; ++i) {
- char s = url[i];
- if(s && (ISALNUM(s) || (s == '+') || (s == '-') || (s == '.') )) {
- /* RFC 3986 3.1 explains:
- scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
- */
- }
- else {
- break;
+ if(ISALPHA(url[0]))
+ for(i = 1; i < MAX_SCHEME_LEN; ++i) {
+ char s = url[i];
+ if(s && (ISALNUM(s) || (s == '+') || (s == '-') || (s == '.') )) {
+ /* RFC 3986 3.1 explains:
+ scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
+ */
+ }
+ else {
+ break;
+ }
}
- }
if(i && (url[i] == ':') && ((url[i + 1] == '/') || !guess_scheme)) {
/* If this does not guess scheme, the scheme always ends with the colon so
that this also detects data: URLs etc. In guessing mode, data: could
@@ -326,7 +338,7 @@ static char *concat_url(char *base, const char *relurl)
pathsep = strchr(protsep, '/');
if(pathsep) {
/* When people use badly formatted URLs, such as
- "http://www.url.com?dir=/home/daniel" we must not use the first
+ "http://www.example.com?dir=/home/daniel" we must not use the first
slash, if there's a ?-letter before it! */
char *sep = strchr(protsep, '?');
if(sep && (sep < pathsep))
@@ -335,9 +347,9 @@ static char *concat_url(char *base, const char *relurl)
}
else {
/* There was no slash. Now, since we might be operating on a badly
- formatted URL, such as "http://www.url.com?id=2380" which doesn't
- use a slash separator as it is supposed to, we need to check for a
- ?-letter as well! */
+ formatted URL, such as "http://www.example.com?id=2380" which
+ doesn't use a slash separator as it is supposed to, we need to check
+ for a ?-letter as well! */
pathsep = strchr(protsep, '?');
if(pathsep)
*pathsep = 0;
@@ -365,27 +377,30 @@ static char *concat_url(char *base, const char *relurl)
return Curl_dyn_ptr(&newest);
}
-/* scan for byte values < 31 or 127 */
-static bool junkscan(const char *part, unsigned int flags)
+/* scan for byte values <= 31, 127 and sometimes space */
+static CURLUcode junkscan(const char *url, size_t *urllen, unsigned int flags)
{
- if(part) {
- static const char badbytes[]={
- /* */ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
- 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
- 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
- 0x7f, 0x00 /* null-terminate */
- };
- size_t n = strlen(part);
- size_t nfine = strcspn(part, badbytes);
- if(nfine != n)
- /* since we don't know which part is scanned, return a generic error
- code */
- return TRUE;
- if(!(flags & CURLU_ALLOW_SPACE) && strchr(part, ' '))
- return TRUE;
- }
- return FALSE;
+ static const char badbytes[]={
+ /* */ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ 0x7f, 0x00 /* null-terminate */
+ };
+ size_t n = strlen(url);
+ size_t nfine;
+
+ if(n > CURL_MAX_INPUT_LENGTH)
+ /* excessive input length */
+ return CURLUE_MALFORMED_INPUT;
+
+ nfine = strcspn(url, badbytes);
+ if((nfine != n) ||
+ (!(flags & CURLU_ALLOW_SPACE) && strchr(url, ' ')))
+ return CURLUE_MALFORMED_INPUT;
+
+ *urllen = n;
+ return CURLUE_OK;
}
/*
@@ -396,8 +411,10 @@ static bool junkscan(const char *part, unsigned int flags)
*
*/
static CURLUcode parse_hostname_login(struct Curl_URL *u,
- struct dynbuf *host,
- unsigned int flags)
+ const char *login,
+ size_t len,
+ unsigned int flags,
+ size_t *offset) /* to the host name */
{
CURLUcode result = CURLUE_OK;
CURLcode ccode;
@@ -413,13 +430,12 @@ static CURLUcode parse_hostname_login(struct Curl_URL *u,
*
* We need somewhere to put the embedded details, so do that first.
*/
-
- char *login = Curl_dyn_ptr(host);
char *ptr;
DEBUGASSERT(login);
- ptr = strchr(login, '@');
+ *offset = 0;
+ ptr = memchr(login, '@', len);
if(!ptr)
goto out;
@@ -430,7 +446,7 @@ static CURLUcode parse_hostname_login(struct Curl_URL *u,
/* if this is a known scheme, get some details */
if(u->scheme)
- h = Curl_builtin_scheme(u->scheme, CURL_ZERO_TERMINATED);
+ h = Curl_get_scheme_handler(u->scheme);
/* We could use the login information in the URL so extract it. Only parse
options if the handler says we should. Note that 'h' might be NULL! */
@@ -449,35 +465,25 @@ static CURLUcode parse_hostname_login(struct Curl_URL *u,
result = CURLUE_USER_NOT_ALLOWED;
goto out;
}
- if(junkscan(userp, flags)) {
- result = CURLUE_BAD_USER;
- goto out;
- }
+ free(u->user);
u->user = userp;
}
if(passwdp) {
- if(junkscan(passwdp, flags)) {
- result = CURLUE_BAD_PASSWORD;
- goto out;
- }
+ free(u->password);
u->password = passwdp;
}
if(optionsp) {
- if(junkscan(optionsp, flags)) {
- result = CURLUE_BAD_LOGIN;
- goto out;
- }
+ free(u->options);
u->options = optionsp;
}
- /* move the name to the start of the host buffer */
- if(Curl_dyn_tail(host, strlen(ptr)))
- return CURLUE_OUT_OF_MEMORY;
-
+ /* the host name starts at this offset */
+ *offset = ptr - login;
return CURLUE_OK;
- out:
+
+out:
free(userp);
free(passwdp);
@@ -492,35 +498,20 @@ static CURLUcode parse_hostname_login(struct Curl_URL *u,
UNITTEST CURLUcode Curl_parse_port(struct Curl_URL *u, struct dynbuf *host,
bool has_scheme)
{
- char *portptr = NULL;
- char endbracket;
- int len;
+ char *portptr;
char *hostname = Curl_dyn_ptr(host);
/*
- * Find the end of an IPv6 address, either on the ']' ending bracket or
- * a percent-encoded zone index.
+ * Find the end of an IPv6 address on the ']' ending bracket.
*/
- if(1 == sscanf(hostname, "[%*45[0123456789abcdefABCDEF:.]%c%n",
- &endbracket, &len)) {
- if(']' == endbracket)
- portptr = &hostname[len];
- else if('%' == endbracket) {
- int zonelen = len;
- if(1 == sscanf(hostname + zonelen, "%*[^]]%c%n", &endbracket, &len)) {
- if(']' != endbracket)
- return CURLUE_BAD_IPV6;
- portptr = &hostname[--zonelen + len + 1];
- }
- else
- return CURLUE_BAD_IPV6;
- }
- else
+ if(hostname[0] == '[') {
+ portptr = strchr(hostname, ']');
+ if(!portptr)
return CURLUE_BAD_IPV6;
-
+ portptr++;
/* this is a RFC2732-style specified IP-address */
- if(portptr && *portptr) {
+ if(*portptr) {
if(*portptr != ':')
- return CURLUE_BAD_IPV6;
+ return CURLUE_BAD_PORT_NUMBER;
}
else
portptr = NULL;
@@ -531,7 +522,6 @@ UNITTEST CURLUcode Curl_parse_port(struct Curl_URL *u, struct dynbuf *host,
if(portptr) {
char *rest;
long port;
- char portbuf[7];
size_t keep = portptr - hostname;
/* Browser behavior adaptation. If there's a colon with no digits after,
@@ -557,11 +547,10 @@ UNITTEST CURLUcode Curl_parse_port(struct Curl_URL *u, struct dynbuf *host,
if(rest[0])
return CURLUE_BAD_PORT_NUMBER;
- *rest = 0;
- /* generate a new port number string to get rid of leading zeroes etc */
- msnprintf(portbuf, sizeof(portbuf), "%ld", port);
u->portnum = port;
- u->port = strdup(portbuf);
+ /* generate a new port number string to get rid of leading zeroes etc */
+ free(u->port);
+ u->port = aprintf("%ld", port);
if(!u->port)
return CURLUE_OUT_OF_MEMORY;
}
@@ -569,74 +558,79 @@ UNITTEST CURLUcode Curl_parse_port(struct Curl_URL *u, struct dynbuf *host,
return CURLUE_OK;
}
-static CURLUcode hostname_check(struct Curl_URL *u, char *hostname,
- size_t hlen) /* length of hostname */
+/* this assumes 'hostname' now starts with [ */
+static CURLUcode ipv6_parse(struct Curl_URL *u, char *hostname,
+ size_t hlen) /* length of hostname */
{
size_t len;
- DEBUGASSERT(hostname);
-
- if(!hostname[0])
- return CURLUE_NO_HOST;
- else if(hostname[0] == '[') {
- const char *l = "0123456789abcdefABCDEF:.";
- if(hlen < 4) /* '[::]' is the shortest possible valid string */
+ DEBUGASSERT(*hostname == '[');
+ if(hlen < 4) /* '[::]' is the shortest possible valid string */
+ return CURLUE_BAD_IPV6;
+ hostname++;
+ hlen -= 2;
+
+ /* only valid IPv6 letters are ok */
+ len = strspn(hostname, "0123456789abcdefABCDEF:.");
+
+ if(hlen != len) {
+ hlen = len;
+ if(hostname[len] == '%') {
+ /* this could now be '%[zone id]' */
+ char zoneid[16];
+ int i = 0;
+ char *h = &hostname[len + 1];
+ /* pass '25' if present and is a url encoded percent sign */
+ if(!strncmp(h, "25", 2) && h[2] && (h[2] != ']'))
+ h += 2;
+ while(*h && (*h != ']') && (i < 15))
+ zoneid[i++] = *h++;
+ if(!i || (']' != *h))
+ return CURLUE_BAD_IPV6;
+ zoneid[i] = 0;
+ u->zoneid = strdup(zoneid);
+ if(!u->zoneid)
+ return CURLUE_OUT_OF_MEMORY;
+ hostname[len] = ']'; /* insert end bracket */
+ hostname[len + 1] = 0; /* terminate the hostname */
+ }
+ else
return CURLUE_BAD_IPV6;
- hostname++;
- hlen -= 2;
+ /* hostname is fine */
+ }
- if(hostname[hlen] != ']')
+ /* Check the IPv6 address. */
+ {
+ char dest[16]; /* fits a binary IPv6 address */
+ char norm[MAX_IPADR_LEN];
+ hostname[hlen] = 0; /* end the address there */
+ if(1 != Curl_inet_pton(AF_INET6, hostname, dest))
return CURLUE_BAD_IPV6;
- /* only valid letters are ok */
- len = strspn(hostname, l);
- if(hlen != len) {
- hlen = len;
- if(hostname[len] == '%') {
- /* this could now be '%[zone id]' */
- char zoneid[16];
- int i = 0;
- char *h = &hostname[len + 1];
- /* pass '25' if present and is a url encoded percent sign */
- if(!strncmp(h, "25", 2) && h[2] && (h[2] != ']'))
- h += 2;
- while(*h && (*h != ']') && (i < 15))
- zoneid[i++] = *h++;
- if(!i || (']' != *h))
- /* impossible to reach? */
- return CURLUE_MALFORMED_INPUT;
- zoneid[i] = 0;
- u->zoneid = strdup(zoneid);
- if(!u->zoneid)
- return CURLUE_OUT_OF_MEMORY;
- hostname[len] = ']'; /* insert end bracket */
- hostname[len + 1] = 0; /* terminate the hostname */
- }
- else
- return CURLUE_BAD_IPV6;
- /* hostname is fine */
- }
-#ifdef ENABLE_IPV6
- {
- char dest[16]; /* fits a binary IPv6 address */
- char norm[MAX_IPADR_LEN];
- hostname[hlen] = 0; /* end the address there */
- if(1 != Curl_inet_pton(AF_INET6, hostname, dest))
- return CURLUE_BAD_IPV6;
-
- /* check if it can be done shorter */
- if(Curl_inet_ntop(AF_INET6, dest, norm, sizeof(norm)) &&
- (strlen(norm) < hlen)) {
- strcpy(hostname, norm);
- hlen = strlen(norm);
- hostname[hlen + 1] = 0;
- }
- hostname[hlen] = ']'; /* restore ending bracket */
+ /* check if it can be done shorter */
+ if(Curl_inet_ntop(AF_INET6, dest, norm, sizeof(norm)) &&
+ (strlen(norm) < hlen)) {
+ strcpy(hostname, norm);
+ hlen = strlen(norm);
+ hostname[hlen + 1] = 0;
}
-#endif
+ hostname[hlen] = ']'; /* restore ending bracket */
}
+ return CURLUE_OK;
+}
+
+static CURLUcode hostname_check(struct Curl_URL *u, char *hostname,
+ size_t hlen) /* length of hostname */
+{
+ size_t len;
+ DEBUGASSERT(hostname);
+
+ if(!hlen)
+ return CURLUE_NO_HOST;
+ else if(hostname[0] == '[')
+ return ipv6_parse(u, hostname, hlen);
else {
/* letters from the second string are not ok */
- len = strcspn(hostname, " \r\n\t/:#?!@{}[]\\$\'\"^`*<>=;,");
+ len = strcspn(hostname, " \r\n\t/:#?!@{}[]\\$\'\"^`*<>=;,+&()%");
if(hlen != len)
/* hostname with bad content */
return CURLUE_BAD_HOSTNAME;
@@ -644,50 +638,52 @@ static CURLUcode hostname_check(struct Curl_URL *u, char *hostname,
return CURLUE_OK;
}
-#define HOSTNAME_END(x) (((x) == '/') || ((x) == '?') || ((x) == '#'))
-
/*
* Handle partial IPv4 numerical addresses and different bases, like
* '16843009', '0x7f', '0x7f.1' '0177.1.1.1' etc.
*
- * If the given input string is syntactically wrong or any part for example is
- * too big, this function returns FALSE and doesn't create any output.
+ * If the given input string is syntactically wrong IPv4 or any part for
+ * example is too big, this function returns HOST_NAME.
*
* Output the "normalized" version of that input string in plain quad decimal
- * integers and return TRUE.
+ * integers.
+ *
+ * Returns the host type.
*/
-static bool ipv4_normalize(const char *hostname, char *outp, size_t olen)
+
+#define HOST_ERROR -1 /* out of memory */
+#define HOST_BAD -2 /* bad IPv4 address */
+
+#define HOST_NAME 1
+#define HOST_IPV4 2
+#define HOST_IPV6 3
+
+static int ipv4_normalize(struct dynbuf *host)
{
bool done = FALSE;
int n = 0;
- const char *c = hostname;
+ const char *c = Curl_dyn_ptr(host);
unsigned long parts[4] = {0, 0, 0, 0};
+ CURLcode result = CURLE_OK;
+
+ if(*c == '[')
+ return HOST_IPV6;
while(!done) {
char *endp;
unsigned long l;
- if((*c < '0') || (*c > '9'))
+ if(!ISDIGIT(*c))
/* most importantly this doesn't allow a leading plus or minus */
- return FALSE;
+ return HOST_NAME;
l = strtoul(c, &endp, 0);
- /* overflow or nothing parsed at all */
- if(((l == ULONG_MAX) && (errno == ERANGE)) || (endp == c))
- return FALSE;
-
-#if SIZEOF_LONG > 4
- /* a value larger than 32 bits */
- if(l > UINT_MAX)
- return FALSE;
-#endif
-
parts[n] = l;
c = endp;
- switch (*c) {
- case '.' :
+ switch(*c) {
+ case '.':
if(n == 3)
- return FALSE;
+ return HOST_NAME;
n++;
c++;
break;
@@ -697,51 +693,63 @@ static bool ipv4_normalize(const char *hostname, char *outp, size_t olen)
break;
default:
- return FALSE;
+ return HOST_NAME;
}
- }
- /* this is deemed a valid IPv4 numerical address */
+ /* overflow */
+ if((l == ULONG_MAX) && (errno == ERANGE))
+ return HOST_NAME;
+
+#if SIZEOF_LONG > 4
+ /* a value larger than 32 bits */
+ if(l > UINT_MAX)
+ return HOST_NAME;
+#endif
+ }
switch(n) {
case 0: /* a -- 32 bits */
- msnprintf(outp, olen, "%u.%u.%u.%u",
- parts[0] >> 24, (parts[0] >> 16) & 0xff,
- (parts[0] >> 8) & 0xff, parts[0] & 0xff);
+ Curl_dyn_reset(host);
+
+ result = Curl_dyn_addf(host, "%u.%u.%u.%u",
+ parts[0] >> 24, (parts[0] >> 16) & 0xff,
+ (parts[0] >> 8) & 0xff, parts[0] & 0xff);
break;
case 1: /* a.b -- 8.24 bits */
if((parts[0] > 0xff) || (parts[1] > 0xffffff))
- return FALSE;
- msnprintf(outp, olen, "%u.%u.%u.%u",
- parts[0], (parts[1] >> 16) & 0xff,
- (parts[1] >> 8) & 0xff, parts[1] & 0xff);
+ return HOST_NAME;
+ Curl_dyn_reset(host);
+ result = Curl_dyn_addf(host, "%u.%u.%u.%u",
+ parts[0], (parts[1] >> 16) & 0xff,
+ (parts[1] >> 8) & 0xff, parts[1] & 0xff);
break;
case 2: /* a.b.c -- 8.8.16 bits */
if((parts[0] > 0xff) || (parts[1] > 0xff) || (parts[2] > 0xffff))
- return FALSE;
- msnprintf(outp, olen, "%u.%u.%u.%u",
- parts[0], parts[1], (parts[2] >> 8) & 0xff,
- parts[2] & 0xff);
+ return HOST_NAME;
+ Curl_dyn_reset(host);
+ result = Curl_dyn_addf(host, "%u.%u.%u.%u",
+ parts[0], parts[1], (parts[2] >> 8) & 0xff,
+ parts[2] & 0xff);
break;
case 3: /* a.b.c.d -- 8.8.8.8 bits */
if((parts[0] > 0xff) || (parts[1] > 0xff) || (parts[2] > 0xff) ||
(parts[3] > 0xff))
- return FALSE;
- msnprintf(outp, olen, "%u.%u.%u.%u",
- parts[0], parts[1], parts[2], parts[3]);
+ return HOST_NAME;
+ Curl_dyn_reset(host);
+ result = Curl_dyn_addf(host, "%u.%u.%u.%u",
+ parts[0], parts[1], parts[2], parts[3]);
break;
}
- return TRUE;
+ if(result)
+ return HOST_ERROR;
+ return HOST_IPV4;
}
/* if necessary, replace the host content with a URL decoded version */
-static CURLUcode decode_host(struct dynbuf *host)
+static CURLUcode urldecode_host(struct dynbuf *host)
{
char *per = NULL;
const char *hostname = Curl_dyn_ptr(host);
- if(hostname[0] == '[')
- /* only decode if not an ipv6 numerical */
- return CURLUE_OK;
per = strchr(hostname, '%');
if(!per)
/* nothing to decode */
@@ -764,6 +772,78 @@ static CURLUcode decode_host(struct dynbuf *host)
return CURLUE_OK;
}
+static CURLUcode parse_authority(struct Curl_URL *u,
+ const char *auth, size_t authlen,
+ unsigned int flags,
+ struct dynbuf *host,
+ bool has_scheme)
+{
+ size_t offset;
+ CURLUcode result;
+
+ /*
+ * Parse the login details and strip them out of the host name.
+ */
+ result = parse_hostname_login(u, auth, authlen, flags, &offset);
+ if(result)
+ goto out;
+
+ if(Curl_dyn_addn(host, auth + offset, authlen - offset)) {
+ result = CURLUE_OUT_OF_MEMORY;
+ goto out;
+ }
+
+ result = Curl_parse_port(u, host, has_scheme);
+ if(result)
+ goto out;
+
+ if(!Curl_dyn_len(host))
+ return CURLUE_NO_HOST;
+
+ switch(ipv4_normalize(host)) {
+ case HOST_IPV4:
+ break;
+ case HOST_IPV6:
+ result = ipv6_parse(u, Curl_dyn_ptr(host), Curl_dyn_len(host));
+ break;
+ case HOST_NAME:
+ result = urldecode_host(host);
+ if(!result)
+ result = hostname_check(u, Curl_dyn_ptr(host), Curl_dyn_len(host));
+ break;
+ case HOST_ERROR:
+ result = CURLUE_OUT_OF_MEMORY;
+ break;
+ case HOST_BAD:
+ default:
+ result = CURLUE_BAD_HOSTNAME; /* Bad IPv4 address even */
+ break;
+ }
+
+out:
+ return result;
+}
+
+CURLUcode Curl_url_set_authority(CURLU *u, const char *authority,
+ unsigned int flags)
+{
+ CURLUcode result;
+ struct dynbuf host;
+
+ DEBUGASSERT(authority);
+ Curl_dyn_init(&host, CURL_MAX_INPUT_LENGTH);
+
+ result = parse_authority(u, authority, strlen(authority), flags,
+ &host, !!u->scheme);
+ if(result)
+ Curl_dyn_free(&host);
+ else {
+ free(u->host);
+ u->host = Curl_dyn_ptr(&host);
+ }
+ return result;
+}
+
/*
* "Remove Dot Segments"
* https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.4
@@ -782,32 +862,27 @@ static CURLUcode decode_host(struct dynbuf *host)
*
* RETURNS
*
- * an allocated dedotdotified output string
+ * Zero for success and 'out' set to an allocated dedotdotified string.
*/
-UNITTEST char *dedotdotify(const char *input, size_t clen);
-UNITTEST char *dedotdotify(const char *input, size_t clen)
+UNITTEST int dedotdotify(const char *input, size_t clen, char **outp);
+UNITTEST int dedotdotify(const char *input, size_t clen, char **outp)
{
- char *out = malloc(clen + 1);
char *outptr;
- const char *orginput = input;
- char *queryp;
+ const char *endp = &input[clen];
+ char *out;
+
+ *outp = NULL;
+ /* the path always starts with a slash, and a slash has not dot */
+ if((clen < 2) || !memchr(input, '.', clen))
+ return 0;
+
+ out = malloc(clen + 1);
if(!out)
- return NULL; /* out of memory */
+ return 1; /* out of memory */
*out = 0; /* null-terminates, for inputs like "./" */
outptr = out;
- if(!*input)
- /* zero length input string, return that */
- return out;
-
- /*
- * To handle query-parts properly, we must find it and remove it during the
- * dotdot-operation and then append it again at the end to the output
- * string.
- */
- queryp = strchr(input, '?');
-
do {
bool dotdot = TRUE;
if(*input == '.') {
@@ -893,30 +968,20 @@ UNITTEST char *dedotdotify(const char *input, size_t clen)
*outptr = 0;
}
- /* continue until end of input string OR, if there is a terminating
- query part, stop there */
- } while(*input && (!queryp || (input < queryp)));
-
- if(queryp) {
- size_t qlen;
- /* There was a query part, append that to the output. */
- size_t oindex = queryp - orginput;
- qlen = strlen(&orginput[oindex]);
- memcpy(outptr, &orginput[oindex], qlen + 1); /* include zero byte */
- }
+ /* continue until end of path */
+ } while(input < endp);
- return out;
+ *outp = out;
+ return 0; /* success */
}
static CURLUcode parseurl(const char *url, CURLU *u, unsigned int flags)
{
const char *path;
size_t pathlen;
- bool uncpath = FALSE;
char *query = NULL;
char *fragment = NULL;
char schemebuf[MAX_SCHEME_LEN + 1];
- const char *schemep = NULL;
size_t schemelen = 0;
size_t urllen;
CURLUcode result = CURLUE_OK;
@@ -927,16 +992,9 @@ static CURLUcode parseurl(const char *url, CURLU *u, unsigned int flags)
Curl_dyn_init(&host, CURL_MAX_INPUT_LENGTH);
- /*************************************************************
- * Parse the URL.
- ************************************************************/
- /* allocate scratch area */
- urllen = strlen(url);
- if(urllen > CURL_MAX_INPUT_LENGTH) {
- /* excessive input length */
- result = CURLUE_MALFORMED_INPUT;
+ result = junkscan(url, &urllen, flags);
+ if(result)
goto fail;
- }
schemelen = Curl_is_absolute_url(url, schemebuf, sizeof(schemebuf),
flags & (CURLU_GUESS_SCHEME|
@@ -944,6 +1002,7 @@ static CURLUcode parseurl(const char *url, CURLU *u, unsigned int flags)
/* handle the file: scheme */
if(schemelen && !strcmp(schemebuf, "file")) {
+ bool uncpath = FALSE;
if(urllen <= 6) {
/* file:/ is not enough to actually be a complete file: URL */
result = CURLUE_BAD_FILE_URL;
@@ -952,8 +1011,9 @@ static CURLUcode parseurl(const char *url, CURLU *u, unsigned int flags)
/* path has been allocated large enough to hold this */
path = (char *)&url[5];
+ pathlen = urllen - 5;
- schemep = u->scheme = strdup("file");
+ u->scheme = strdup("file");
if(!u->scheme) {
result = CURLUE_OUT_OF_MEMORY;
goto fail;
@@ -996,7 +1056,7 @@ static CURLUcode parseurl(const char *url, CURLU *u, unsigned int flags)
ptr += 9; /* now points to the slash after the host */
}
else {
-#if defined(WIN32)
+#if defined(_WIN32)
size_t len;
/* the host name, NetBIOS computer name, can not contain disallowed
@@ -1028,13 +1088,14 @@ static CURLUcode parseurl(const char *url, CURLU *u, unsigned int flags)
}
path = ptr;
+ pathlen = urllen - (ptr - url);
}
if(!uncpath)
/* no host for file: URLs by default */
Curl_dyn_reset(&host);
-#if !defined(MSDOS) && !defined(WIN32) && !defined(__CYGWIN__)
+#if !defined(_WIN32) && !defined(MSDOS) && !defined(__CYGWIN__)
/* Don't allow Windows drive letters when not in Windows.
* This catches both "file:/c:" and "file:c:" */
if(('/' == path[0] && STARTS_WITH_URL_DRIVE_PREFIX(&path[1])) ||
@@ -1048,40 +1109,38 @@ static CURLUcode parseurl(const char *url, CURLU *u, unsigned int flags)
if('/' == path[0] && STARTS_WITH_URL_DRIVE_PREFIX(&path[1])) {
/* This cannot be done with strcpy, as the memory chunks overlap! */
path++;
+ pathlen--;
}
#endif
}
else {
/* clear path */
- const char *p;
+ const char *schemep = NULL;
const char *hostp;
- size_t len;
+ size_t hostlen;
if(schemelen) {
int i = 0;
- p = &url[schemelen + 1];
- while(p && (*p == '/') && (i < 4)) {
+ const char *p = &url[schemelen + 1];
+ while((*p == '/') && (i < 4)) {
p++;
i++;
}
schemep = schemebuf;
- if(!Curl_builtin_scheme(schemep, CURL_ZERO_TERMINATED) &&
+ if(!Curl_get_scheme_handler(schemep) &&
!(flags & CURLU_NON_SUPPORT_SCHEME)) {
result = CURLUE_UNSUPPORTED_SCHEME;
goto fail;
}
- if((i < 1) || (i>3)) {
+ if((i < 1) || (i > 3)) {
/* less than one or more than three slashes */
result = CURLUE_BAD_SLASHES;
goto fail;
}
- if(junkscan(schemep, flags)) {
- result = CURLUE_BAD_SCHEME;
- goto fail;
- }
+ hostp = p; /* host name starts here */
}
else {
/* no scheme! */
@@ -1096,63 +1155,101 @@ static CURLUcode parseurl(const char *url, CURLU *u, unsigned int flags)
/*
* The URL was badly formatted, let's try without scheme specified.
*/
- p = url;
+ hostp = url;
}
- hostp = p; /* host name starts here */
-
- /* find the end of the host name + port number */
- while(*p && !HOSTNAME_END(*p))
- p++;
- len = p - hostp;
- if(len) {
- if(Curl_dyn_addn(&host, hostp, len)) {
+ if(schemep) {
+ u->scheme = strdup(schemep);
+ if(!u->scheme) {
result = CURLUE_OUT_OF_MEMORY;
goto fail;
}
}
- else {
- if(!(flags & CURLU_NO_AUTHORITY)) {
- result = CURLUE_NO_HOST;
+
+ /* find the end of the host name + port number */
+ hostlen = strcspn(hostp, "/?#");
+ path = &hostp[hostlen];
+
+ /* this pathlen also contains the query and the fragment */
+ pathlen = urllen - (path - url);
+ if(hostlen) {
+
+ result = parse_authority(u, hostp, hostlen, flags, &host, schemelen);
+ if(result)
goto fail;
- }
- }
- path = (char *)p;
+ if((flags & CURLU_GUESS_SCHEME) && !schemep) {
+ const char *hostname = Curl_dyn_ptr(&host);
+ /* legacy curl-style guess based on host name */
+ if(checkprefix("ftp.", hostname))
+ schemep = "ftp";
+ else if(checkprefix("dict.", hostname))
+ schemep = "dict";
+ else if(checkprefix("ldap.", hostname))
+ schemep = "ldap";
+ else if(checkprefix("imap.", hostname))
+ schemep = "imap";
+ else if(checkprefix("smtp.", hostname))
+ schemep = "smtp";
+ else if(checkprefix("pop3.", hostname))
+ schemep = "pop3";
+ else
+ schemep = "http";
- if(schemep) {
- u->scheme = strdup(schemep);
- if(!u->scheme) {
+ u->scheme = strdup(schemep);
+ if(!u->scheme) {
+ result = CURLUE_OUT_OF_MEMORY;
+ goto fail;
+ }
+ }
+ }
+ else if(flags & CURLU_NO_AUTHORITY) {
+ /* allowed to be empty. */
+ if(Curl_dyn_add(&host, "")) {
result = CURLUE_OUT_OF_MEMORY;
goto fail;
}
}
+ else {
+ result = CURLUE_NO_HOST;
+ goto fail;
+ }
}
fragment = strchr(path, '#');
if(fragment) {
- fraglen = strlen(fragment);
+ fraglen = pathlen - (fragment - path);
if(fraglen > 1) {
/* skip the leading '#' in the copy but include the terminating null */
- u->fragment = Curl_memdup(fragment + 1, fraglen);
- if(!u->fragment) {
- result = CURLUE_OUT_OF_MEMORY;
- goto fail;
+ if(flags & CURLU_URLENCODE) {
+ struct dynbuf enc;
+ Curl_dyn_init(&enc, CURL_MAX_INPUT_LENGTH);
+ if(urlencode_str(&enc, fragment + 1, fraglen - 1, TRUE, FALSE)) {
+ result = CURLUE_OUT_OF_MEMORY;
+ goto fail;
+ }
+ u->fragment = Curl_dyn_ptr(&enc);
}
-
- if(junkscan(u->fragment, flags)) {
- result = CURLUE_BAD_FRAGMENT;
- goto fail;
+ else {
+ u->fragment = Curl_strndup(fragment + 1, fraglen - 1);
+ if(!u->fragment) {
+ result = CURLUE_OUT_OF_MEMORY;
+ goto fail;
+ }
}
}
+ /* after this, pathlen still contains the query */
+ pathlen -= fraglen;
}
- query = strchr(path, '?');
- if(query && (!fragment || (query < fragment))) {
- size_t qlen = strlen(query) - fraglen; /* includes '?' */
- pathlen = strlen(path) - qlen - fraglen;
+ DEBUGASSERT(pathlen < urllen);
+ query = memchr(path, '?', pathlen);
+ if(query) {
+ size_t qlen = fragment ? (size_t)(fragment - query) :
+ pathlen - (query - path);
+ pathlen -= qlen;
if(qlen > 1) {
- if(qlen && (flags & CURLU_URLENCODE)) {
+ if(flags & CURLU_URLENCODE) {
struct dynbuf enc;
Curl_dyn_init(&enc, CURL_MAX_INPUT_LENGTH);
/* skip the leading question mark */
@@ -1163,17 +1260,11 @@ static CURLUcode parseurl(const char *url, CURLU *u, unsigned int flags)
u->query = Curl_dyn_ptr(&enc);
}
else {
- u->query = Curl_memdup(query + 1, qlen);
+ u->query = Curl_strndup(query + 1, qlen - 1);
if(!u->query) {
result = CURLUE_OUT_OF_MEMORY;
goto fail;
}
- u->query[qlen - 1] = 0;
- }
-
- if(junkscan(u->query, flags)) {
- result = CURLUE_BAD_QUERY;
- goto fail;
}
}
else {
@@ -1185,8 +1276,6 @@ static CURLUcode parseurl(const char *url, CURLU *u, unsigned int flags)
}
}
}
- else
- pathlen = strlen(path) - fraglen;
if(pathlen && (flags & CURLU_URLENCODE)) {
struct dynbuf enc;
@@ -1199,111 +1288,42 @@ static CURLUcode parseurl(const char *url, CURLU *u, unsigned int flags)
path = u->path = Curl_dyn_ptr(&enc);
}
- if(!pathlen) {
- /* there is no path left, unset */
+ if(pathlen <= 1) {
+ /* there is no path left or just the slash, unset */
path = NULL;
}
else {
if(!u->path) {
- u->path = Curl_memdup(path, pathlen + 1);
+ u->path = Curl_strndup(path, pathlen);
if(!u->path) {
result = CURLUE_OUT_OF_MEMORY;
goto fail;
}
- u->path[pathlen] = 0;
path = u->path;
}
else if(flags & CURLU_URLENCODE)
/* it might have encoded more than just the path so cut it */
u->path[pathlen] = 0;
- if(junkscan(u->path, flags)) {
- result = CURLUE_BAD_PATH;
- goto fail;
- }
-
if(!(flags & CURLU_PATH_AS_IS)) {
/* remove ../ and ./ sequences according to RFC3986 */
- char *newp = dedotdotify((char *)path, pathlen);
- if(!newp) {
+ char *dedot;
+ int err = dedotdotify((char *)path, pathlen, &dedot);
+ if(err) {
result = CURLUE_OUT_OF_MEMORY;
goto fail;
}
- free(u->path);
- u->path = newp;
- }
- }
-
- if(Curl_dyn_len(&host)) {
- char normalized_ipv4[sizeof("255.255.255.255") + 1];
-
- /*
- * Parse the login details and strip them out of the host name.
- */
- result = parse_hostname_login(u, &host, flags);
- if(!result)
- result = Curl_parse_port(u, &host, schemelen);
- if(result)
- goto fail;
-
- if(junkscan(Curl_dyn_ptr(&host), flags)) {
- result = CURLUE_BAD_HOSTNAME;
- goto fail;
- }
-
- if(ipv4_normalize(Curl_dyn_ptr(&host),
- normalized_ipv4, sizeof(normalized_ipv4))) {
- Curl_dyn_reset(&host);
- if(Curl_dyn_add(&host, normalized_ipv4)) {
- result = CURLUE_OUT_OF_MEMORY;
- goto fail;
+ if(dedot) {
+ free(u->path);
+ u->path = dedot;
}
}
- else {
- result = decode_host(&host);
- if(!result)
- result = hostname_check(u, Curl_dyn_ptr(&host), Curl_dyn_len(&host));
- if(result)
- goto fail;
- }
-
- if((flags & CURLU_GUESS_SCHEME) && !schemep) {
- const char *hostname = Curl_dyn_ptr(&host);
- /* legacy curl-style guess based on host name */
- if(checkprefix("ftp.", hostname))
- schemep = "ftp";
- else if(checkprefix("dict.", hostname))
- schemep = "dict";
- else if(checkprefix("ldap.", hostname))
- schemep = "ldap";
- else if(checkprefix("imap.", hostname))
- schemep = "imap";
- else if(checkprefix("smtp.", hostname))
- schemep = "smtp";
- else if(checkprefix("pop3.", hostname))
- schemep = "pop3";
- else
- schemep = "http";
-
- u->scheme = strdup(schemep);
- if(!u->scheme) {
- result = CURLUE_OUT_OF_MEMORY;
- goto fail;
- }
- }
- }
- else if(flags & CURLU_NO_AUTHORITY) {
- /* allowed to be empty. */
- if(Curl_dyn_add(&host, "")) {
- result = CURLUE_OUT_OF_MEMORY;
- goto fail;
- }
}
u->host = Curl_dyn_ptr(&host);
return result;
- fail:
+fail:
Curl_dyn_free(&host);
free_urlhandle(u);
return result;
@@ -1330,7 +1350,7 @@ static CURLUcode parseurl_and_replace(const char *url, CURLU *u,
*/
CURLU *curl_url(void)
{
- return calloc(sizeof(struct Curl_URL), 1);
+ return calloc(1, sizeof(struct Curl_URL));
}
void curl_url_cleanup(CURLU *u)
@@ -1350,9 +1370,9 @@ void curl_url_cleanup(CURLU *u)
} \
} while(0)
-CURLU *curl_url_dup(CURLU *in)
+CURLU *curl_url_dup(const CURLU *in)
{
- struct Curl_URL *u = calloc(sizeof(struct Curl_URL), 1);
+ struct Curl_URL *u = calloc(1, sizeof(struct Curl_URL));
if(u) {
DUP(u, in, scheme);
DUP(u, in, user);
@@ -1363,22 +1383,25 @@ CURLU *curl_url_dup(CURLU *in)
DUP(u, in, path);
DUP(u, in, query);
DUP(u, in, fragment);
+ DUP(u, in, zoneid);
u->portnum = in->portnum;
}
return u;
- fail:
+fail:
curl_url_cleanup(u);
return NULL;
}
-CURLUcode curl_url_get(CURLU *u, CURLUPart what,
+CURLUcode curl_url_get(const CURLU *u, CURLUPart what,
char **part, unsigned int flags)
{
- char *ptr;
+ const char *ptr;
CURLUcode ifmissing = CURLUE_UNKNOWN_PART;
char portbuf[7];
bool urldecode = (flags & CURLU_URLDECODE)?1:0;
bool urlencode = (flags & CURLU_URLENCODE)?1:0;
+ bool punycode = FALSE;
+ bool depunyfy = FALSE;
bool plusdecode = FALSE;
(void)flags;
if(!u)
@@ -1408,6 +1431,8 @@ CURLUcode curl_url_get(CURLU *u, CURLUPart what,
case CURLUPART_HOST:
ptr = u->host;
ifmissing = CURLUE_NO_HOST;
+ punycode = (flags & CURLU_PUNYCODE)?1:0;
+ depunyfy = (flags & CURLU_PUNY2IDN)?1:0;
break;
case CURLUPART_ZONEID:
ptr = u->zoneid;
@@ -1420,8 +1445,7 @@ CURLUcode curl_url_get(CURLU *u, CURLUPart what,
if(!ptr && (flags & CURLU_DEFAULT_PORT) && u->scheme) {
/* there's no stored port number, but asked to deliver
a default one for the scheme */
- const struct Curl_handler *h =
- Curl_builtin_scheme(u->scheme, CURL_ZERO_TERMINATED);
+ const struct Curl_handler *h = Curl_get_scheme_handler(u->scheme);
if(h) {
msnprintf(portbuf, sizeof(portbuf), "%u", h->defport);
ptr = portbuf;
@@ -1430,8 +1454,7 @@ CURLUcode curl_url_get(CURLU *u, CURLUPart what,
else if(ptr && u->scheme) {
/* there is a stored port number, but ask to inhibit if
it matches the default one for the scheme */
- const struct Curl_handler *h =
- Curl_builtin_scheme(u->scheme, CURL_ZERO_TERMINATED);
+ const struct Curl_handler *h = Curl_get_scheme_handler(u->scheme);
if(h && (h->defport == u->portnum) &&
(flags & CURLU_NO_DEFAULT_PORT))
ptr = NULL;
@@ -1439,11 +1462,8 @@ CURLUcode curl_url_get(CURLU *u, CURLUPart what,
break;
case CURLUPART_PATH:
ptr = u->path;
- if(!ptr) {
- ptr = u->path = strdup("/");
- if(!u->path)
- return CURLUE_OUT_OF_MEMORY;
- }
+ if(!ptr)
+ ptr = "/";
break;
case CURLUPART_QUERY:
ptr = u->query;
@@ -1460,6 +1480,8 @@ CURLUcode curl_url_get(CURLU *u, CURLUPart what,
char *options = u->options;
char *port = u->port;
char *allochost = NULL;
+ punycode = (flags & CURLU_PUNYCODE)?1:0;
+ depunyfy = (flags & CURLU_PUNY2IDN)?1:0;
if(u->scheme && strcasecompare("file", u->scheme)) {
url = aprintf("file://%s%s%s",
u->path,
@@ -1477,7 +1499,7 @@ CURLUcode curl_url_get(CURLU *u, CURLUPart what,
else
return CURLUE_NO_SCHEME;
- h = Curl_builtin_scheme(scheme, CURL_ZERO_TERMINATED);
+ h = Curl_get_scheme_handler(scheme);
if(!port && (flags & CURLU_DEFAULT_PORT)) {
/* there's no stored port number, but asked to deliver
a default one for the scheme */
@@ -1514,39 +1536,33 @@ CURLUcode curl_url_get(CURLU *u, CURLUPart what,
if(!allochost)
return CURLUE_OUT_OF_MEMORY;
}
- else {
- /* only encode '%' in output host name */
- char *host = u->host;
- bool percent = FALSE;
- /* first, count number of percents present in the name */
- while(*host) {
- if(*host == '%') {
- percent = TRUE;
- break;
- }
- host++;
+ else if(punycode) {
+ if(!Curl_is_ASCII_name(u->host)) {
+#ifndef USE_IDN
+ return CURLUE_LACKS_IDN;
+#else
+ CURLcode result = Curl_idn_decode(u->host, &allochost);
+ if(result)
+ return (result == CURLE_OUT_OF_MEMORY) ?
+ CURLUE_OUT_OF_MEMORY : CURLUE_BAD_HOSTNAME;
+#endif
}
- /* if there were percent(s), encode the host name */
- if(percent) {
- struct dynbuf enc;
- CURLcode result;
- Curl_dyn_init(&enc, CURL_MAX_INPUT_LENGTH);
- host = u->host;
- while(*host) {
- if(*host == '%')
- result = Curl_dyn_addn(&enc, "%25", 3);
- else
- result = Curl_dyn_addn(&enc, host, 1);
- if(result)
- return CURLUE_OUT_OF_MEMORY;
- host++;
- }
- free(u->host);
- u->host = Curl_dyn_ptr(&enc);
+ }
+ else if(depunyfy) {
+ if(Curl_is_ASCII_name(u->host) && !strncmp("xn--", u->host, 4)) {
+#ifndef USE_IDN
+ return CURLUE_LACKS_IDN;
+#else
+ CURLcode result = Curl_idn_encode(u->host, &allochost);
+ if(result)
+ /* this is the most likely error */
+ return (result == CURLE_OUT_OF_MEMORY) ?
+ CURLUE_OUT_OF_MEMORY : CURLUE_BAD_HOSTNAME;
+#endif
}
}
- url = aprintf("%s://%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
+ url = aprintf("%s://%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
scheme,
u->user ? u->user : "",
u->password ? ":": "",
@@ -1557,7 +1573,6 @@ CURLUcode curl_url_get(CURLU *u, CURLUPart what,
allochost ? allochost : u->host,
port ? ":": "",
port ? port : "",
- (u->path && (u->path[0] != '/')) ? "/": "",
u->path ? u->path : "/",
(u->query && u->query[0]) ? "?": "",
(u->query && u->query[0]) ? u->query : "",
@@ -1577,7 +1592,7 @@ CURLUcode curl_url_get(CURLU *u, CURLUPart what,
if(ptr) {
size_t partlen = strlen(ptr);
size_t i = 0;
- *part = Curl_memdup(ptr, partlen + 1);
+ *part = Curl_strndup(ptr, partlen);
if(!*part)
return CURLUE_OUT_OF_MEMORY;
if(plusdecode) {
@@ -1611,6 +1626,36 @@ CURLUcode curl_url_get(CURLU *u, CURLUPart what,
free(*part);
*part = Curl_dyn_ptr(&enc);
}
+ else if(punycode) {
+ if(!Curl_is_ASCII_name(u->host)) {
+#ifndef USE_IDN
+ return CURLUE_LACKS_IDN;
+#else
+ char *allochost;
+ CURLcode result = Curl_idn_decode(*part, &allochost);
+ if(result)
+ return (result == CURLE_OUT_OF_MEMORY) ?
+ CURLUE_OUT_OF_MEMORY : CURLUE_BAD_HOSTNAME;
+ free(*part);
+ *part = allochost;
+#endif
+ }
+ }
+ else if(depunyfy) {
+ if(Curl_is_ASCII_name(u->host) && !strncmp("xn--", u->host, 4)) {
+#ifndef USE_IDN
+ return CURLUE_LACKS_IDN;
+#else
+ char *allochost;
+ CURLcode result = Curl_idn_encode(*part, &allochost);
+ if(result)
+ return (result == CURLE_OUT_OF_MEMORY) ?
+ CURLUE_OUT_OF_MEMORY : CURLUE_BAD_HOSTNAME;
+ free(*part);
+ *part = allochost;
+#endif
+ }
+ }
return CURLUE_OK;
}
@@ -1626,8 +1671,10 @@ CURLUcode curl_url_set(CURLU *u, CURLUPart what,
bool urlencode = (flags & CURLU_URLENCODE)? 1 : 0;
bool plusencode = FALSE;
bool urlskipslash = FALSE;
+ bool leadingslash = FALSE;
bool appendquery = FALSE;
bool equalsencode = FALSE;
+ size_t nalloc;
if(!u)
return CURLUE_BAD_HANDLE;
@@ -1680,18 +1727,36 @@ CURLUcode curl_url_set(CURLU *u, CURLUPart what,
return CURLUE_OK;
}
+ nalloc = strlen(part);
+ if(nalloc > CURL_MAX_INPUT_LENGTH)
+ /* excessive input length */
+ return CURLUE_MALFORMED_INPUT;
+
switch(what) {
- case CURLUPART_SCHEME:
- if(strlen(part) > MAX_SCHEME_LEN)
- /* too long */
+ case CURLUPART_SCHEME: {
+ size_t plen = strlen(part);
+ const char *s = part;
+ if((plen > MAX_SCHEME_LEN) || (plen < 1))
+ /* too long or too short */
return CURLUE_BAD_SCHEME;
- if(!(flags & CURLU_NON_SUPPORT_SCHEME) &&
- /* verify that it is a fine scheme */
- !Curl_builtin_scheme(part, CURL_ZERO_TERMINATED))
+ /* verify that it is a fine scheme */
+ if(!(flags & CURLU_NON_SUPPORT_SCHEME) && !Curl_get_scheme_handler(part))
return CURLUE_UNSUPPORTED_SCHEME;
storep = &u->scheme;
urlencode = FALSE; /* never */
+ if(ISALPHA(*s)) {
+ /* ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) */
+ while(--plen) {
+ if(ISALNUM(*s) || (*s == '+') || (*s == '-') || (*s == '.'))
+ s++; /* fine */
+ else
+ return CURLUE_BAD_SCHEME;
+ }
+ }
+ else
+ return CURLUE_BAD_SCHEME;
break;
+ }
case CURLUPART_USER:
storep = &u->user;
break;
@@ -1701,15 +1766,10 @@ CURLUcode curl_url_set(CURLU *u, CURLUPart what,
case CURLUPART_OPTIONS:
storep = &u->options;
break;
- case CURLUPART_HOST: {
- size_t len = strcspn(part, " \r\n");
- if(strlen(part) != len)
- /* hostname with bad content */
- return CURLUE_BAD_HOSTNAME;
+ case CURLUPART_HOST:
storep = &u->host;
Curl_safefree(u->zoneid);
break;
- }
case CURLUPART_ZONEID:
storep = &u->zoneid;
break;
@@ -1728,6 +1788,7 @@ CURLUcode curl_url_set(CURLU *u, CURLUPart what,
break;
case CURLUPART_PATH:
urlskipslash = TRUE;
+ leadingslash = TRUE; /* enforce */
storep = &u->path;
break;
case CURLUPART_QUERY:
@@ -1750,6 +1811,10 @@ CURLUcode curl_url_set(CURLU *u, CURLUPart what,
char *oldurl;
char *redired_url;
+ if(!nalloc)
+ /* a blank URL is not a valid URL */
+ return CURLUE_MALFORMED_INPUT;
+
/* if the new thing is absolute or the old one is not
* (we could not get an absolute url in 'oldurl'),
* then replace the existing with the new. */
@@ -1776,18 +1841,17 @@ CURLUcode curl_url_set(CURLU *u, CURLUPart what,
}
DEBUGASSERT(storep);
{
- const char *newp = part;
- size_t nalloc = strlen(part);
-
- if(nalloc > CURL_MAX_INPUT_LENGTH)
- /* excessive input length */
- return CURLUE_MALFORMED_INPUT;
+ const char *newp;
+ struct dynbuf enc;
+ Curl_dyn_init(&enc, nalloc * 3 + 1 + leadingslash);
+ if(leadingslash && (part[0] != '/')) {
+ CURLcode result = Curl_dyn_addn(&enc, "/", 1);
+ if(result)
+ return CURLUE_OUT_OF_MEMORY;
+ }
if(urlencode) {
const unsigned char *i;
- struct dynbuf enc;
-
- Curl_dyn_init(&enc, nalloc * 3 + 1);
for(i = (const unsigned char *)part; *i; i++) {
CURLcode result;
@@ -1796,7 +1860,7 @@ CURLUcode curl_url_set(CURLU *u, CURLUPart what,
if(result)
return CURLUE_OUT_OF_MEMORY;
}
- else if(Curl_isunreserved(*i) ||
+ else if(ISUNRESERVED(*i) ||
((*i == '/') && urlskipslash) ||
((*i == '=') && equalsencode)) {
if((*i == '=') && equalsencode)
@@ -1807,19 +1871,21 @@ CURLUcode curl_url_set(CURLU *u, CURLUPart what,
return CURLUE_OUT_OF_MEMORY;
}
else {
- result = Curl_dyn_addf(&enc, "%%%02x", *i);
+ char out[3]={'%'};
+ out[1] = hexdigits[*i>>4];
+ out[2] = hexdigits[*i & 0xf];
+ result = Curl_dyn_addn(&enc, out, 3);
if(result)
return CURLUE_OUT_OF_MEMORY;
}
}
- newp = Curl_dyn_ptr(&enc);
}
else {
char *p;
- newp = strdup(part);
- if(!newp)
+ CURLcode result = Curl_dyn_add(&enc, part);
+ if(result)
return CURLUE_OUT_OF_MEMORY;
- p = (char *)newp;
+ p = Curl_dyn_ptr(&enc);
while(*p) {
/* make sure percent encoded are lower case */
if((*p == '%') && ISXDIGIT(p[1]) && ISXDIGIT(p[2]) &&
@@ -1832,44 +1898,45 @@ CURLUcode curl_url_set(CURLU *u, CURLUPart what,
p++;
}
}
+ newp = Curl_dyn_ptr(&enc);
- if(appendquery) {
+ if(appendquery && newp) {
/* Append the 'newp' string onto the old query. Add a '&' separator if
none is present at the end of the existing query already */
size_t querylen = u->query ? strlen(u->query) : 0;
bool addamperand = querylen && (u->query[querylen -1] != '&');
if(querylen) {
- struct dynbuf enc;
- Curl_dyn_init(&enc, CURL_MAX_INPUT_LENGTH);
+ struct dynbuf qbuf;
+ Curl_dyn_init(&qbuf, CURL_MAX_INPUT_LENGTH);
- if(Curl_dyn_addn(&enc, u->query, querylen)) /* add original query */
+ if(Curl_dyn_addn(&qbuf, u->query, querylen)) /* add original query */
goto nomem;
if(addamperand) {
- if(Curl_dyn_addn(&enc, "&", 1))
+ if(Curl_dyn_addn(&qbuf, "&", 1))
goto nomem;
}
- if(Curl_dyn_add(&enc, newp))
+ if(Curl_dyn_add(&qbuf, newp))
goto nomem;
- free((char *)newp);
+ Curl_dyn_free(&enc);
free(*storep);
- *storep = Curl_dyn_ptr(&enc);
+ *storep = Curl_dyn_ptr(&qbuf);
return CURLUE_OK;
- nomem:
- free((char *)newp);
+nomem:
+ Curl_dyn_free(&enc);
return CURLUE_OUT_OF_MEMORY;
}
}
- if(what == CURLUPART_HOST) {
- size_t n = strlen(newp);
+ else if(what == CURLUPART_HOST) {
+ size_t n = Curl_dyn_len(&enc);
if(!n && (flags & CURLU_NO_AUTHORITY)) {
/* Skip hostname check, it's allowed to be empty. */
}
else {
- if(hostname_check(u, (char *)newp, n)) {
- free((char *)newp);
+ if(!n || hostname_check(u, (char *)newp, n)) {
+ Curl_dyn_free(&enc);
return CURLUE_BAD_HOSTNAME;
}
}
diff --git a/lib/urldata.h b/lib/urldata.h
index 1d430b5e8..ff661482e 100644
--- a/lib/urldata.h
+++ b/lib/urldata.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -101,6 +101,12 @@ typedef unsigned int curl_prot_t;
#define PROTO_FAMILY_SMTP (CURLPROTO_SMTP|CURLPROTO_SMTPS)
#define PROTO_FAMILY_SSH (CURLPROTO_SCP|CURLPROTO_SFTP)
+#if !defined(CURL_DISABLE_FTP) || defined(USE_SSH) || \
+ !defined(CURL_DISABLE_POP3)
+/* these protocols support CURLOPT_DIRLISTONLY */
+#define CURL_LIST_ONLY_PROTOCOL 1
+#endif
+
#define DEFAULT_CONNCACHE_SIZE 5
/* length of longest IPv6 address string including the trailing null */
@@ -113,6 +119,7 @@ typedef unsigned int curl_prot_t;
input easier and better. */
#define CURL_MAX_INPUT_LENGTH 8000000
+
#include "cookie.h"
#include "psl.h"
#include "formdata.h"
@@ -133,6 +140,7 @@ typedef unsigned int curl_prot_t;
#include "hash.h"
#include "splay.h"
#include "dynbuf.h"
+#include "dynhds.h"
/* return the count of bytes sent, or -1 on error */
typedef ssize_t (Curl_send)(struct Curl_easy *data, /* transfer */
@@ -167,10 +175,10 @@ typedef CURLcode (*Curl_datastream)(struct Curl_easy *data,
#include "rtsp.h"
#include "smb.h"
#include "mqtt.h"
-#include "wildcard.h"
+#include "ftplistparser.h"
#include "multihandle.h"
-#include "quic.h"
#include "c-hyper.h"
+#include "cf-socket.h"
#ifdef HAVE_GSSAPI
# ifdef HAVE_GSSGNU
@@ -207,8 +215,17 @@ typedef CURLcode (*Curl_datastream)(struct Curl_easy *data,
#define UPLOADBUFFER_MIN CURL_MAX_WRITE_SIZE
#define CURLEASY_MAGIC_NUMBER 0xc0dedbadU
+#ifdef DEBUGBUILD
+/* On a debug build, we want to fail hard on easy handles that
+ * are not NULL, but no longer have the MAGIC touch. This gives
+ * us early warning on things only discovered by valgrind otherwise. */
+#define GOOD_EASY_HANDLE(x) \
+ (((x) && ((x)->magic == CURLEASY_MAGIC_NUMBER))? TRUE: \
+ (DEBUGASSERT(!(x)), FALSE))
+#else
#define GOOD_EASY_HANDLE(x) \
((x) && ((x)->magic == CURLEASY_MAGIC_NUMBER))
+#endif
#ifdef HAVE_GSSAPI
/* Types needed for krb5-ftp connections */
@@ -249,22 +266,14 @@ typedef enum {
/* SSL backend-specific data; declared differently by each SSL backend */
struct ssl_backend_data;
-/* struct for data related to each SSL connection */
-struct ssl_connect_data {
- ssl_connection_state state;
- ssl_connect_state connecting_state;
-#if defined(USE_SSL)
- struct ssl_backend_data *backend;
-#endif
- /* Use ssl encrypted communications TRUE/FALSE. The library is not
- necessarily using ssl at the moment but at least asked to or means to use
- it. See 'state' for the exact current state of the connection. */
- BIT(use);
+struct ssl_peer {
+ char *hostname; /* hostname for verification */
+ char *dispname; /* display version of hostname */
+ char *sni; /* SNI version of hostname or NULL if not usable */
+ BIT(is_ip_address); /* if hostname is an IPv4|6 address */
};
struct ssl_primary_config {
- long version; /* what version the client wants to use */
- long version_max; /* max supported version the client wants to use*/
char *CApath; /* certificate dir (doesn't work on windows) */
char *CAfile; /* certificate to verify peer against */
char *issuercert; /* optional issuer certificate filename */
@@ -279,10 +288,11 @@ struct ssl_primary_config {
#ifdef USE_TLS_SRP
char *username; /* TLS username (for, e.g., SRP) */
char *password; /* TLS password (for, e.g., SRP) */
- enum CURL_TLSAUTH authtype; /* TLS authentication type (default SRP) */
#endif
char *curves; /* list of curves to use */
unsigned char ssl_options; /* the CURLOPT_SSL_OPTIONS bitmask */
+ unsigned int version_max; /* max supported version the client wants to use */
+ unsigned char version; /* what version the client wants to use */
BIT(verifypeer); /* set TRUE if this is desired */
BIT(verifyhost); /* set TRUE if CN/SAN must match hostname */
BIT(verifystatus); /* set TRUE if certificate status must be checked */
@@ -301,7 +311,7 @@ struct ssl_config_data {
char *key_passwd; /* plain text private key password */
BIT(certinfo); /* gather lots of certificate info */
BIT(falsestart);
- BIT(enable_beast); /* allow this flaw for interoperability's sake*/
+ BIT(enable_beast); /* allow this flaw for interoperability's sake */
BIT(no_revoke); /* disable SSL certificate revocation checks */
BIT(no_partialchain); /* don't accept partial certificate chains */
BIT(revoke_best_effort); /* ignore SSL revocation offline/missing revocation
@@ -313,6 +323,7 @@ struct ssl_config_data {
struct ssl_general_config {
size_t max_ssl_sessions; /* SSL session id cache size */
+ int ca_cache_timeout; /* Certificate store cache timeout (seconds) */
};
/* information stored about one single SSL session */
@@ -332,6 +343,7 @@ struct Curl_ssl_session {
#include "curl_sspi.h"
#endif
+#ifndef CURL_DISABLE_DIGEST_AUTH
/* Struct used for Digest challenge-response authentication */
struct digestdata {
#if defined(USE_WINDOWS_SSPI)
@@ -355,6 +367,7 @@ struct digestdata {
BIT(userhash);
#endif
};
+#endif
typedef enum {
NTLMSTATE_NONE,
@@ -476,12 +489,8 @@ struct negotiatedata {
* Boolean values that concerns this connection.
*/
struct ConnectBits {
- bool tcpconnect[2]; /* the TCP layer (or similar) is connected, this is set
- the first time on the first connect function call */
#ifndef CURL_DISABLE_PROXY
- bool proxy_ssl_connected[2]; /* TRUE when SSL initialization for HTTPS proxy
- is complete */
- BIT(httpproxy); /* if set, this transfer is done through a http proxy */
+ BIT(httpproxy); /* if set, this transfer is done through an HTTP proxy */
BIT(socksproxy); /* if set, this transfer is done through a socks proxy */
BIT(proxy_user_passwd); /* user+password for the proxy? */
BIT(tunnel_proxy); /* if CONNECT is used to "tunnel" through the proxy.
@@ -495,7 +504,7 @@ struct ConnectBits {
#endif
/* always modify bits.close with the connclose() and connkeep() macros! */
BIT(close); /* if set, we close the connection after this request */
- BIT(reuse); /* if set, this is a re-used connection */
+ BIT(reuse); /* if set, this is a reused connection */
BIT(altused); /* this is an alt-svc "redirect" */
BIT(conn_to_host); /* if set, this connection has a "connect to host"
that overrides the host in the URL */
@@ -514,10 +523,6 @@ struct ConnectBits {
that we are creating a request with an auth header,
but it is not the final request in the auth
negotiation. */
- BIT(rewindaftersend);/* TRUE when the sending couldn't be stopped even
- though it will be discarded. When the whole send
- operation is done, we must call the data rewind
- callback. */
#ifndef CURL_DISABLE_FTP
BIT(ftp_use_epsv); /* As set with CURLOPT_FTP_USE_EPSV, but if we find out
EPSV doesn't work we disable it for the forthcoming
@@ -573,6 +578,13 @@ struct hostname {
#define KEEP_RECVBITS (KEEP_RECV | KEEP_RECV_HOLD | KEEP_RECV_PAUSE)
#define KEEP_SENDBITS (KEEP_SEND | KEEP_SEND_HOLD | KEEP_SEND_PAUSE)
+/* transfer wants to send is not PAUSE or HOLD */
+#define CURL_WANT_SEND(data) \
+ (((data)->req.keepon & KEEP_SENDBITS) == KEEP_SEND)
+/* transfer receive is not on PAUSE or HOLD */
+#define CURL_WANT_RECV(data) \
+ (!((data)->req.keepon & (KEEP_RECV_PAUSE|KEEP_RECV_HOLD)))
+
#if defined(CURLRES_ASYNCH) || !defined(CURL_DISABLE_DOH)
#define USE_CURL_ASYNC
struct Curl_async {
@@ -591,6 +603,15 @@ struct Curl_async {
#define FIRSTSOCKET 0
#define SECONDARYSOCKET 1
+/* Polling requested by an easy handle.
+ * `action` is CURL_POLL_IN, CURL_POLL_OUT or CURL_POLL_INOUT.
+ */
+struct easy_pollset {
+ curl_socket_t sockets[MAX_SOCKSPEREASYHANDLE];
+ unsigned int num;
+ unsigned char actions[MAX_SOCKSPEREASYHANDLE];
+};
+
enum expect100 {
EXP100_SEND_DATA, /* enough waiting, just send the body now */
EXP100_AWAITING_CONTINUE, /* waiting for the 100 Continue header */
@@ -639,28 +660,20 @@ struct SingleRequest {
curl_off_t bytecount; /* total number of bytes read */
curl_off_t writebytecount; /* number of bytes written */
- curl_off_t headerbytecount; /* only count received headers */
- curl_off_t deductheadercount; /* this amount of bytes doesn't count when we
- check if anything has been transferred at
- the end of a connection. We use this
- counter to make only a 100 reply (without a
- following second response code) result in a
- CURLE_GOT_NOTHING error code */
-
curl_off_t pendingheader; /* this many bytes left to send is actually
header and not body */
struct curltime start; /* transfer started at this time */
- struct curltime now; /* current time */
- enum {
- HEADER_NORMAL, /* no bad header at all */
- HEADER_PARTHEADER, /* part of the chunk is a bad header, the rest
- is normal data */
- HEADER_ALLBAD /* all was believed to be header */
- } badheader; /* the header was deemed bad and will be
- written as body */
+ unsigned int headerbytecount; /* received server headers (not CONNECT
+ headers) */
+ unsigned int allheadercount; /* all received headers (server + CONNECT) */
+ unsigned int deductheadercount; /* this amount of bytes doesn't count when
+ we check if anything has been transferred
+ at the end of a connection. We use this
+ counter to make only a 100 reply (without
+ a following second response code) result
+ in a CURLE_GOT_NOTHING error code */
int headerline; /* counts header lines to better track the
first one */
- char *str; /* within buf */
curl_off_t offset; /* possible resume offset read from the
Content-Range: header */
int httpcode; /* error code from the 'HTTP/1.? XXX' or
@@ -671,7 +684,7 @@ struct SingleRequest {
enum upgrade101 upgr101; /* 101 upgrade state */
/* Content unencoding stack. See sec 3.5, RFC2616. */
- struct contenc_writer *writer_stack;
+ struct Curl_cwriter *writer_stack;
time_t timeofdoc;
long bodywrites;
char *location; /* This points to an allocated version of the Location:
@@ -708,9 +721,20 @@ struct SingleRequest {
#ifndef CURL_DISABLE_DOH
struct dohdata *doh; /* DoH specific data for this request */
#endif
+#if defined(_WIN32) && defined(USE_WINSOCK)
+ struct curltime last_sndbuf_update; /* last time readwrite_upload called
+ win_update_buffer_size */
+#endif
+ char fread_eof[2]; /* the body read callback (index 0) returned EOF or
+ the trailer read callback (index 1) returned EOF */
+#ifndef CURL_DISABLE_COOKIES
unsigned char setcookies;
+#endif
+ unsigned char writer_stack_depth; /* Unencoding stack depth. */
BIT(header); /* incoming data has HTTP header */
+ BIT(badheader); /* header parsing found sth not a header */
BIT(content_range); /* set TRUE if Content-Range: was found */
+ BIT(download_done); /* set to TRUE when download is complete */
BIT(upload_done); /* set to TRUE when doing chunked transfer-encoding
upload and we're uploading the last chunk */
BIT(ignorebody); /* we read a response-body but we ignore it! */
@@ -724,6 +748,7 @@ struct SingleRequest {
BIT(forbidchunk); /* used only to explicitly forbid chunk-upload for
specific upload buffers. See readmoredata() in http.c
for details. */
+ BIT(no_body); /* the response has no body */
};
/*
@@ -752,7 +777,7 @@ struct Curl_handler {
* after the connect() and everything is done, as a step in the connection.
* The 'done' pointer points to a bool that should be set to TRUE if the
* function completes before return. If it doesn't complete, the caller
- * should call the curl_connecting() function until it is.
+ * should call the ->connecting() function until it is.
*/
CURLcode (*connect_it)(struct Curl_easy *data, bool *done);
@@ -784,8 +809,8 @@ struct Curl_handler {
/* This function *MAY* be set to a protocol-dependent function that is run
* by the curl_disconnect(), as a step in the disconnection. If the handler
* is called because the connection has been considered dead,
- * dead_connection is set to TRUE. The connection is already disassociated
- * from the transfer here.
+ * dead_connection is set to TRUE. The connection is (again) associated with
+ * the transfer here.
*/
CURLcode (*disconnect)(struct Curl_easy *, struct connectdata *,
bool dead_connection);
@@ -793,7 +818,8 @@ struct Curl_handler {
/* If used, this function gets called from transfer.c:readwrite_data() to
allow the protocol to do extra reads/writes */
CURLcode (*readwrite)(struct Curl_easy *data, struct connectdata *conn,
- ssize_t *nread, bool *readmore);
+ const char *buf, size_t blen,
+ size_t *pconsumed, bool *readmore);
/* This function can perform various checks on the connection. See
CONNCHECK_* for more information about the checks that can be performed,
@@ -831,7 +857,7 @@ struct Curl_handler {
#define PROTOPT_CREDSPERREQUEST (1<<7) /* requires login credentials per
request instead of per connection */
#define PROTOPT_ALPN (1<<8) /* set ALPN for this */
-#define PROTOPT_STREAM (1<<9) /* a protocol with individual logical streams */
+/* (1<<9) was PROTOPT_STREAM, now free */
#define PROTOPT_URLOPTIONS (1<<10) /* allow options part in the userinfo field
of the URL */
#define PROTOPT_PROXY_AS_HTTP (1<<11) /* allow this non-HTTP scheme over a
@@ -849,23 +875,9 @@ struct Curl_handler {
#define CONNRESULT_NONE 0 /* No extra information. */
#define CONNRESULT_DEAD (1<<0) /* The connection is dead. */
-#ifdef USE_RECV_BEFORE_SEND_WORKAROUND
-struct postponed_data {
- char *buffer; /* Temporal store for received data during
- sending, must be freed */
- size_t allocated_size; /* Size of temporal store */
- size_t recv_size; /* Size of received data during sending */
- size_t recv_processed; /* Size of processed part of postponed data */
-#ifdef DEBUGBUILD
- curl_socket_t bindsock;/* Structure must be bound to specific socket,
- used only for DEBUGASSERT */
-#endif /* DEBUGBUILD */
-};
-#endif /* USE_RECV_BEFORE_SEND_WORKAROUND */
-
struct proxy_info {
struct hostname host;
- long port;
+ int port;
unsigned char proxytype; /* curl_proxytype: what kind of proxy that is in
use */
char *user; /* proxy user name string, allocated */
@@ -873,38 +885,6 @@ struct proxy_info {
};
struct ldapconninfo;
-struct http_connect_state;
-
-/* for the (SOCKS) connect state machine */
-enum connect_t {
- CONNECT_INIT,
- CONNECT_SOCKS_INIT, /* 1 */
- CONNECT_SOCKS_SEND, /* 2 waiting to send more first data */
- CONNECT_SOCKS_READ_INIT, /* 3 set up read */
- CONNECT_SOCKS_READ, /* 4 read server response */
- CONNECT_GSSAPI_INIT, /* 5 */
- CONNECT_AUTH_INIT, /* 6 setup outgoing auth buffer */
- CONNECT_AUTH_SEND, /* 7 send auth */
- CONNECT_AUTH_READ, /* 8 read auth response */
- CONNECT_REQ_INIT, /* 9 init SOCKS "request" */
- CONNECT_RESOLVING, /* 10 */
- CONNECT_RESOLVED, /* 11 */
- CONNECT_RESOLVE_REMOTE, /* 12 */
- CONNECT_REQ_SEND, /* 13 */
- CONNECT_REQ_SENDING, /* 14 */
- CONNECT_REQ_READ, /* 15 */
- CONNECT_REQ_READ_MORE, /* 16 */
- CONNECT_DONE /* 17 connected fine to the remote or the SOCKS proxy */
-};
-
-#define SOCKS_STATE(x) (((x) >= CONNECT_SOCKS_INIT) && \
- ((x) < CONNECT_DONE))
-
-struct connstate {
- enum connect_t state;
- ssize_t outstanding; /* send this many bytes more */
- unsigned char *outp; /* send from this pointer */
-};
#define TRNSPRT_TCP 3
#define TRNSPRT_UDP 4
@@ -916,12 +896,11 @@ struct connstate {
* unique for an entire connection.
*/
struct connectdata {
- struct connstate cnnct;
struct Curl_llist_element bundle_node; /* conncache */
/* chunk is for HTTP chunked encoding, but is in the general connectdata
- struct only because we can do just about any protocol through a HTTP proxy
- and a HTTP proxy may in fact respond using chunked encoding */
+ struct only because we can do just about any protocol through an HTTP
+ proxy and an HTTP proxy may in fact respond using chunked encoding */
struct Curl_chunker chunk;
curl_closesocket_callback fclosesocket; /* function closing the socket(s) */
@@ -934,26 +913,22 @@ struct connectdata {
#define CONN_INUSE(c) ((c)->easyq.size)
/**** Fields set when inited and not modified again */
- long connection_id; /* Contains a unique number to make it easier to
- track the connections in the log output */
+ curl_off_t connection_id; /* Contains a unique number to make it easier to
+ track the connections in the log output */
/* 'dns_entry' is the particular host we use. This points to an entry in the
DNS cache and it will not get pruned while locked. It gets unlocked in
- multi_done(). This entry will be NULL if the connection is re-used as then
+ multi_done(). This entry will be NULL if the connection is reused as then
there is no name resolve done. */
struct Curl_dns_entry *dns_entry;
-
- /* 'ip_addr' is the particular IP we connected to. It points to a struct
- within the DNS cache, so this pointer is only valid as long as the DNS
- cache entry remains locked. It gets unlocked in multi_done() */
- struct Curl_addrinfo *ip_addr;
- struct Curl_addrinfo *tempaddr[2]; /* for happy eyeballs */
-
-#ifdef ENABLE_QUIC
- struct quicsocket hequic[2]; /* two, for happy eyeballs! */
- struct quicsocket *quic;
+#ifdef USE_CURL_ASYNC
+ struct Curl_async resolve_async; /* asynchronous name resolver data */
#endif
+ /* 'remote_addr' is the particular IP we connected to. it is owned, set
+ * and NULLed by the connected socket filter (if there is one). */
+ const struct Curl_sockaddr_ex *remote_addr;
+
struct hostname host;
char *hostname_resolve; /* host name to resolve to address, allocated */
char *secondaryhostname; /* secondary socket host name (ftp) */
@@ -981,37 +956,16 @@ struct connectdata {
struct curltime lastused; /* when returned to the connection cache */
curl_socket_t sock[2]; /* two sockets, the second is used for the data
transfer when doing FTP */
- curl_socket_t tempsock[2]; /* temporary sockets for happy eyeballs */
- int tempfamily[2]; /* family used for the temp sockets */
Curl_recv *recv[2];
Curl_send *send[2];
+ struct Curl_cfilter *cfilter[2]; /* connection filters */
-#ifdef USE_RECV_BEFORE_SEND_WORKAROUND
- struct postponed_data postponed[2]; /* two buffers for two sockets */
-#endif /* USE_RECV_BEFORE_SEND_WORKAROUND */
- struct ssl_connect_data ssl[2]; /* this is for ssl-stuff */
-#ifndef CURL_DISABLE_PROXY
- struct ssl_connect_data proxy_ssl[2]; /* this is for proxy ssl-stuff */
-#endif
-#ifdef USE_SSL
- void *ssl_extra; /* separately allocated backend-specific data */
-#endif
struct ssl_primary_config ssl_config;
#ifndef CURL_DISABLE_PROXY
struct ssl_primary_config proxy_ssl_config;
#endif
struct ConnectBits bits; /* various state-flags for this connection */
- /* connecttime: when connect() is called on the current IP address. Used to
- be able to track when to move on to try next IP - but only when the multi
- interface is used. */
- struct curltime connecttime;
-
- /* The field below gets set in Curl_connecthost */
- /* how long time in milliseconds to spend on trying to connect to each IP
- address, per family */
- timediff_t timeoutms_per_addr[2];
-
const struct Curl_handler *handler; /* Connection's protocol handler */
const struct Curl_handler *given; /* The protocol first given */
@@ -1074,16 +1028,15 @@ struct connectdata {
struct negotiatedata proxyneg; /* state data for proxy Negotiate auth */
#endif
+#ifndef CURL_DISABLE_HTTP
/* for chunked-encoded trailer */
struct dynbuf trailer;
+#endif
union {
#ifndef CURL_DISABLE_FTP
struct ftp_conn ftpc;
#endif
-#ifndef CURL_DISABLE_HTTP
- struct http_conn httpc;
-#endif
#ifdef USE_SSH
struct ssh_conn sshc;
#endif
@@ -1105,14 +1058,21 @@ struct connectdata {
#ifndef CURL_DISABLE_SMB
struct smb_conn smbc;
#endif
+#ifdef USE_LIBRTMP
void *rtmp;
+#endif
+#ifdef USE_OPENLDAP
struct ldapconninfo *ldapc;
+#endif
#ifndef CURL_DISABLE_MQTT
struct mqtt_conn mqtt;
#endif
+#ifdef USE_WEBSOCKETS
+ struct websocket *ws;
+#endif
+ unsigned int unused:1; /* avoids empty union */
} proto;
- struct http_connect_state *connect_state; /* for HTTP CONNECT */
struct connectbundle *bundle; /* The bundle we are member of */
#ifdef USE_UNIX_SOCKETS
char *unix_domain_socket;
@@ -1124,17 +1084,15 @@ struct connectdata {
/* When this connection is created, store the conditions for the local end
bind. This is stored before the actual bind and before any connection is
made and will serve the purpose of being used for comparison reasons so
- that subsequent bound-requested connections aren't accidentally re-using
+ that subsequent bound-requested connections aren't accidentally reusing
wrong connections. */
char *localdev;
- int localportrange;
- int cselect_bits; /* bitmask of socket events */
+ unsigned short localportrange;
int waitfor; /* current READ/WRITE bits to wait for */
#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
int socks5_gssapi_enctype;
#endif
- /* The field below gets set in Curl_connecthost */
- int num_addr; /* number of addresses to try to connect to */
+ /* The field below gets set in connect.c:connecthost() */
int port; /* which port to use locally - to connect to */
int remote_port; /* the remote port, not the proxy port! */
int conn_to_port; /* the remote port to connect to. valid only if
@@ -1145,14 +1103,31 @@ struct connectdata {
unsigned short localport;
unsigned short secondary_port; /* secondary socket remote port to connect to
(ftp) */
+ unsigned char cselect_bits; /* bitmask of socket events */
unsigned char alpn; /* APLN TLS negotiated protocol, a CURL_HTTP_VERSION*
value */
+#ifndef CURL_DISABLE_PROXY
+ unsigned char proxy_alpn; /* APLN of proxy tunnel, CURL_HTTP_VERSION* */
+#endif
unsigned char transport; /* one of the TRNSPRT_* defines */
unsigned char ip_version; /* copied from the Curl_easy at creation time */
unsigned char httpversion; /* the HTTP version*10 reported by the server */
unsigned char connect_only;
+ unsigned char gssapi_delegation; /* inherited from set.gssapi_delegation */
};
+#ifndef CURL_DISABLE_PROXY
+#define CURL_CONN_HOST_DISPNAME(c) \
+ ((c)->bits.socksproxy ? (c)->socks_proxy.host.dispname : \
+ (c)->bits.httpproxy ? (c)->http_proxy.host.dispname : \
+ (c)->bits.conn_to_host ? (c)->conn_to_host.dispname : \
+ (c)->host.dispname)
+#else
+#define CURL_CONN_HOST_DISPNAME(c) \
+ (c)->bits.conn_to_host ? (c)->conn_to_host.dispname : \
+ (c)->host.dispname
+#endif
+
/* The end of connectdata. */
/*
@@ -1165,7 +1140,6 @@ struct PureInfo {
int httpversion; /* the http version number X.Y = X*10+Y */
time_t filetime; /* If requested, this is might get set. Set to -1 if the
time was unretrievable. */
- curl_off_t header_size; /* size of read header(s) in bytes */
curl_off_t request_size; /* the amount of bytes sent in the request(s) */
unsigned long proxyauthavail; /* what proxy auth types were announced */
unsigned long httpauthavail; /* what host auth types were announced */
@@ -1173,6 +1147,7 @@ struct PureInfo {
char *contenttype; /* the content type of the object */
char *wouldredirect; /* URL this would've been redirected to if asked to */
curl_off_t retry_after; /* info from Retry-After: header */
+ unsigned int header_size; /* size of read header(s) in bytes */
/* PureInfo members 'conn_primary_ip', 'conn_primary_port', 'conn_local_ip'
and, 'conn_local_port' are copied over from the connectdata struct in
@@ -1192,10 +1167,8 @@ struct PureInfo {
int conn_local_port;
const char *conn_scheme;
unsigned int conn_protocol;
- struct curl_certinfo certs; /* info about the certs, only populated in
- OpenSSL, GnuTLS, Schannel, NSS and GSKit
- builds. Asked for with CURLOPT_CERTINFO
- / CURLINFO_CERTINFO */
+ struct curl_certinfo certs; /* info about the certs. Asked for with
+ CURLOPT_CERTINFO / CURLINFO_CERTINFO */
CURLproxycode pxcode;
BIT(timecond); /* set to TRUE if the time condition didn't match, which
thus made the document NOT get fetched */
@@ -1279,10 +1252,29 @@ struct auth {
should be RFC compliant */
};
-struct Curl_http2_dep {
- struct Curl_http2_dep *next;
+#ifdef USE_NGHTTP2
+struct Curl_data_prio_node {
+ struct Curl_data_prio_node *next;
struct Curl_easy *data;
};
+#endif
+
+/**
+ * Priority information for an easy handle in relation to others
+ * on the same connection.
+ * TODO: we need to adapt it to the new priority scheme as defined in RFC 9218
+ */
+struct Curl_data_priority {
+#ifdef USE_NGHTTP2
+ /* tree like dependencies only implemented in nghttp2 */
+ struct Curl_easy *parent;
+ struct Curl_data_prio_node *children;
+#endif
+ int weight;
+#ifdef USE_NGHTTP2
+ BIT(exclusive);
+#endif
+};
/*
* This struct is for holding data that was attempted to get sent to the user's
@@ -1293,6 +1285,7 @@ struct tempbuf {
struct dynbuf b;
int type; /* type of the 'tempwrite' buffer as a bitmask that is used with
Curl_client_write() */
+ BIT(paused_body); /* if PAUSE happened before/during BODY write */
};
/* Timers */
@@ -1311,6 +1304,7 @@ typedef enum {
EXPIRE_TOOFAST,
EXPIRE_QUIC,
EXPIRE_FTP_ACCEPT,
+ EXPIRE_ALPN_EYEBALLS,
EXPIRE_LAST /* not an actual timer, used as a marker only */
} expire_id;
@@ -1350,9 +1344,12 @@ struct UrlState {
/* buffers to store authentication data in, as parsed from input options */
struct curltime keeps_speed; /* for the progress meter really */
- long lastconnect_id; /* The last connection, -1 if undefined */
+ curl_off_t lastconnect_id; /* The last connection, -1 if undefined */
+ curl_off_t recent_conn_id; /* The most recent connection used, might no
+ * longer exist */
struct dynbuf headerb; /* buffer to store headers in */
-
+ struct curl_slist *hstslist; /* list of HSTS files set by
+ curl_easy_setopt(HSTS) calls */
char *buffer; /* download buffer */
char *ulbuf; /* allocated upload buffer or NULL */
curl_off_t current_speed; /* the ProgressShow() function sets this,
@@ -1379,15 +1376,12 @@ struct UrlState {
/* storage for the previous bag^H^H^HSIGPIPE signal handler :-) */
void (*prev_signal)(int sig);
#endif
-#ifndef CURL_DISABLE_CRYPTO_AUTH
+#ifndef CURL_DISABLE_DIGEST_AUTH
struct digestdata digest; /* state data for host Digest auth */
struct digestdata proxydigest; /* state data for proxy Digest auth */
#endif
struct auth authhost; /* auth details for host */
struct auth authproxy; /* auth details for proxy */
-#ifdef USE_CURL_ASYNC
- struct Curl_async async; /* asynchronous name resolver data */
-#endif
#if defined(USE_OPENSSL)
/* void instead of ENGINE to avoid bleeding OpenSSL into this header */
@@ -1400,12 +1394,7 @@ struct UrlState {
/* a place to store the most recently set (S)FTP entrypath */
char *most_recent_ftp_entrypath;
- unsigned char httpwant; /* when non-zero, a specific HTTP version requested
- to be used in the library's request(s) */
- unsigned char httpversion; /* the lowest HTTP version*10 reported by any
- server involved in this request */
-
-#if !defined(WIN32) && !defined(MSDOS) && !defined(__EMX__)
+#if !defined(_WIN32) && !defined(MSDOS) && !defined(__EMX__)
/* do FTP line-end conversions on most platforms */
#define CURL_DO_LINEEND_CONV
/* for FTP downloads: track CRLF sequences that span blocks */
@@ -1422,44 +1411,42 @@ struct UrlState {
long rtsp_next_client_CSeq; /* the session's next client CSeq */
long rtsp_next_server_CSeq; /* the session's next server CSeq */
long rtsp_CSeq_recv; /* most recent CSeq received */
+
+ unsigned char rtp_channel_mask[32]; /* for the correctness checking of the
+ interleaved data */
#endif
curl_off_t infilesize; /* size of file to upload, -1 means unknown.
Copied from set.filesize at start of operation */
#if defined(USE_HTTP2) || defined(USE_HTTP3)
- size_t drain; /* Increased when this stream has data to read, even if its
- socket is not necessarily is readable. Decreased when
- checked. */
+ struct Curl_data_priority priority; /* shallow copy of data->set */
#endif
curl_read_callback fread_func; /* read callback/function */
void *in; /* CURLOPT_READDATA */
-#ifdef USE_HTTP2
- struct Curl_easy *stream_depends_on;
- int stream_weight;
-#endif
CURLU *uh; /* URL handle for the current parsed URL */
struct urlpieces up;
- unsigned char httpreq; /* Curl_HttpReq; what kind of HTTP request (if any)
- is this */
char *url; /* work URL, copied from UserDefined */
char *referer; /* referer string */
-#ifndef CURL_DISABLE_COOKIES
- struct curl_slist *cookielist; /* list of cookie files set by
- curl_easy_setopt(COOKIEFILE) calls */
-#endif
struct curl_slist *resolve; /* set to point to the set.resolve list when
this should be dealt with in pretransfer */
#ifndef CURL_DISABLE_HTTP
+ curl_mimepart *mimepost;
+ curl_mimepart *formp; /* storage for old API form-posting, allocated on
+ demand */
size_t trailers_bytes_sent;
struct dynbuf trailers_buf; /* a buffer containing the compiled trailing
headers */
struct Curl_llist httphdrs; /* received headers */
- struct curl_header headerout; /* for external purposes */
+ struct curl_header headerout[2]; /* for external purposes */
struct Curl_header_store *prevhead; /* the latest added header */
trailers_state trailers_state; /* whether we are sending trailers
and what stage are we at */
#endif
+#ifndef CURL_DISABLE_COOKIES
+ struct curl_slist *cookielist; /* list of cookie files set by
+ curl_easy_setopt(COOKIEFILE) calls */
+#endif
#ifdef USE_HYPER
bool hconnect; /* set if a CONNECT request */
CURLcode hresult; /* used to pass return codes back from hyper callbacks */
@@ -1486,6 +1473,15 @@ struct UrlState {
char *proxypasswd;
} aptr;
+ unsigned char httpwant; /* when non-zero, a specific HTTP version requested
+ to be used in the library's request(s) */
+ unsigned char httpversion; /* the lowest HTTP version*10 reported by any
+ server involved in this request */
+ unsigned char httpreq; /* Curl_HttpReq; what kind of HTTP request (if any)
+ is this */
+ unsigned char dselect_bits; /* != 0 -> bitmask of socket events for this
+ transfer overriding anything the socket may
+ report */
#ifdef CURLDEBUG
BIT(conncache_lock);
#endif
@@ -1512,14 +1508,24 @@ struct UrlState {
BIT(done); /* set to FALSE when Curl_init_do() is called and set to TRUE
when multi_done() is called, to prevent multi_done() to get
invoked twice when the multi interface is used. */
- BIT(stream_depends_e); /* set or don't set the Exclusive bit */
BIT(previouslypending); /* this transfer WAS in the multi->pending queue */
+#ifndef CURL_DISABLE_COOKIES
BIT(cookie_engine);
+#endif
BIT(prefer_ascii); /* ASCII rather than binary */
+#ifdef CURL_LIST_ONLY_PROTOCOL
BIT(list_only); /* list directory contents */
+#endif
BIT(url_alloc); /* URL string is malloc()'ed */
BIT(referer_alloc); /* referer string is malloc()ed */
BIT(wildcard_resolve); /* Set to true if any resolve change is a wildcard */
+ BIT(rewindbeforesend);/* TRUE when the sending couldn't be stopped even
+ though it will be discarded. We must call the data
+ rewind callback before trying to send again. */
+ BIT(upload); /* upload request */
+ BIT(internal); /* internal: true if this easy handle was created for
+ internal use and the user does not have ownership of the
+ handle. */
};
/*
@@ -1531,7 +1537,7 @@ struct UrlState {
* Character pointer fields point to dynamic storage, unless otherwise stated.
*/
-struct Curl_multi; /* declared and used only in multi.c */
+struct Curl_multi; /* declared in multihandle.c */
/*
* This enumeration MUST not use conditional directives (#ifdefs), new
@@ -1620,6 +1626,8 @@ enum dupstring {
STRING_DNS_LOCAL_IP4,
STRING_DNS_LOCAL_IP6,
STRING_SSL_EC_CURVES,
+ STRING_AWS_SIGV4, /* Parameters for V4 signature */
+ STRING_HAPROXY_CLIENT_IP, /* CURLOPT_HAPROXY_CLIENT_IP */
/* -- end of null-terminated strings -- */
@@ -1629,8 +1637,6 @@ enum dupstring {
STRING_COPYPOSTFIELDS, /* if POST, set the fields' values here */
- STRING_AWS_SIGV4, /* Parameters for V4 signature */
-
STRING_LAST /* not used, just an end-of-list marker */
};
@@ -1655,18 +1661,12 @@ struct UserDefined {
FILE *err; /* the stderr user data goes here */
void *debugdata; /* the data that will be passed to fdebug */
char *errorbuffer; /* (Static) store failure messages in here */
- long proxyport; /* If non-zero, use this port number by default. If the
- proxy string features a ":[port]" that one will override
- this. */
void *out; /* CURLOPT_WRITEDATA */
void *in_set; /* CURLOPT_READDATA */
void *writeheader; /* write the header to this if non-NULL */
unsigned short use_port; /* which port to use (when not using default) */
unsigned long httpauth; /* kind of HTTP authentication to use (bitmask) */
unsigned long proxyauth; /* kind of proxy authentication to use (bitmask) */
-#ifndef CURL_DISABLE_PROXY
- unsigned long socks5auth;/* kind of SOCKS5 authentication to use (bitmask) */
-#endif
long maxredirs; /* maximum no. of http(s) redirects to follow, set to -1
for infinity */
@@ -1675,9 +1675,12 @@ struct UserDefined {
curl_off_t postfieldsize; /* if POST, this might have a size to use instead
of strlen(), and then the data *may* be binary
(contain zero bytes) */
+#ifndef CURL_DISABLE_BINDLOCAL
unsigned short localport; /* local port number to bind to */
- int localportrange; /* number of additional port numbers to test in case the
- 'localport' one can't be bind()ed */
+ unsigned short localportrange; /* number of additional port numbers to test
+ in case the 'localport' one can't be
+ bind()ed */
+#endif
curl_write_callback fwrite_func; /* function that stores the output */
curl_write_callback fwrite_header; /* function that stores headers */
curl_write_callback fwrite_rtp; /* function that stores interleaved RTP */
@@ -1726,17 +1729,8 @@ struct UserDefined {
download */
curl_off_t set_resume_from; /* continue [ftp] transfer from here */
struct curl_slist *headers; /* linked list of extra headers */
- struct curl_slist *proxyheaders; /* linked list of extra CONNECT headers */
struct curl_httppost *httppost; /* linked list of old POST data */
curl_mimepart mimepost; /* MIME/POST data. */
- struct curl_slist *quote; /* after connection is established */
- struct curl_slist *postquote; /* after the transfer */
- struct curl_slist *prequote; /* before the transfer, after type */
- struct curl_slist *source_quote; /* 3rd party quote */
- struct curl_slist *source_prequote; /* in 3rd party transfer mode - before
- the transfer on source host */
- struct curl_slist *source_postquote; /* in 3rd party transfer mode - after
- the transfer on source host */
#ifndef CURL_DISABLE_TELNET
struct curl_slist *telnet_options; /* linked list of telnet options */
#endif
@@ -1746,13 +1740,18 @@ struct UserDefined {
the hostname and port to connect to */
time_t timevalue; /* what time to compare with */
unsigned char timecondition; /* kind of time comparison: curl_TimeCond */
- unsigned char proxytype; /* what kind of proxy: curl_proxytype */
unsigned char method; /* what kind of HTTP request: Curl_HttpReq */
unsigned char httpwant; /* when non-zero, a specific HTTP version requested
to be used in the library's request(s) */
struct ssl_config_data ssl; /* user defined SSL stuff */
#ifndef CURL_DISABLE_PROXY
struct ssl_config_data proxy_ssl; /* user defined SSL stuff for proxy */
+ struct curl_slist *proxyheaders; /* linked list of extra CONNECT headers */
+ unsigned short proxyport; /* If non-zero, use this port number by
+ default. If the proxy string features a
+ ":[port]" that one will override this. */
+ unsigned char proxytype; /* what kind of proxy: curl_proxytype */
+ unsigned char socks5auth;/* kind of SOCKS5 authentication to use (bitmask) */
#endif
struct ssl_general_config general_ssl; /* general user defined SSL stuff */
int dns_cache_timeout; /* DNS cache timeout (seconds) */
@@ -1760,7 +1759,9 @@ struct UserDefined {
unsigned int upload_buffer_size; /* size of upload buffer to use,
keep it >= CURL_MAX_WRITE_SIZE */
void *private_data; /* application-private data */
+#ifndef CURL_DISABLE_HTTP
struct curl_slist *http200aliases; /* linked list of aliases for http200 */
+#endif
unsigned char ipver; /* the CURL_IPRESOLVE_* defines in the public header
file 0 - whatever, 1 - v2, 2 - v6 */
curl_off_t max_filesize; /* Maximum file size to download */
@@ -1770,26 +1771,30 @@ struct UserDefined {
unsigned char ftp_ccc; /* FTP CCC options: curl_ftpccc */
unsigned int accepttimeout; /* in milliseconds, 0 means no timeout */
#endif
- /* Desppie the name ftp_create_missing_dirs is for FTP(S) and SFTP
+#if !defined(CURL_DISABLE_FTP) || defined(USE_SSH)
+ struct curl_slist *quote; /* after connection is established */
+ struct curl_slist *postquote; /* after the transfer */
+ struct curl_slist *prequote; /* before the transfer, after type */
+ /* Despite the name, ftp_create_missing_dirs is for FTP(S) and SFTP
1 - create directories that don't exist
2 - the same but also allow MKD to fail once
*/
unsigned char ftp_create_missing_dirs;
+#endif
#ifdef USE_LIBSSH2
curl_sshhostkeycallback ssh_hostkeyfunc; /* hostkey check callback */
void *ssh_hostkeyfunc_userp; /* custom pointer to callback */
#endif
-
+#ifdef USE_SSH
curl_sshkeycallback ssh_keyfunc; /* key matching callback */
void *ssh_keyfunc_userp; /* custom pointer to callback */
+ int ssh_auth_types; /* allowed SSH auth types */
+ unsigned int new_directory_perms; /* when creating remote dirs */
+#endif
#ifndef CURL_DISABLE_NETRC
unsigned char use_netrc; /* enum CURL_NETRC_OPTION values */
#endif
- curl_usessl use_ssl; /* if AUTH TLS is to be attempted etc, for FTP or
- IMAP or POP3 or others! */
unsigned int new_file_perms; /* when creating remote files */
- unsigned int new_directory_perms; /* when creating remote dirs */
- int ssh_auth_types; /* allowed SSH auth types */
char *str[STRING_LAST]; /* array of strings, pointing to allocated memory */
struct curl_blob *blobs[BLOB_LAST];
#ifdef ENABLE_IPV6
@@ -1797,8 +1802,6 @@ struct UserDefined {
#endif
curl_prot_t allowed_protocols;
curl_prot_t redir_protocols;
- unsigned int mime_options; /* Mime option flags. */
-
#ifndef CURL_DISABLE_RTSP
void *rtp_out; /* write RTP to this if non-NULL */
/* Common RTSP header options */
@@ -1812,20 +1815,18 @@ struct UserDefined {
curl_fnmatch_callback fnmatch; /* callback to decide which file corresponds
to pattern (e.g. if WILDCARDMATCH is on) */
void *fnmatch_data;
+ void *wildcardptr;
#endif
- long gssapi_delegation; /* GSS-API credential delegation, see the
- documentation of CURLOPT_GSSAPI_DELEGATION */
+ /* GSS-API credential delegation, see the documentation of
+ CURLOPT_GSSAPI_DELEGATION */
+ unsigned char gssapi_delegation;
int tcp_keepidle; /* seconds in idle before sending keepalive probe */
int tcp_keepintvl; /* seconds between TCP keepalive probes */
- size_t maxconnects; /* Max idle connections in the connection cache */
-
long expect_100_timeout; /* in milliseconds */
-#ifdef USE_HTTP2
- struct Curl_easy *stream_depends_on;
- int stream_weight;
- struct Curl_http2_dep *stream_dependents;
+#if defined(USE_HTTP2) || defined(USE_HTTP3)
+ struct Curl_data_priority priority;
#endif
curl_resolver_start_callback resolver_start; /* optional callback called
before resolver start */
@@ -1836,8 +1837,10 @@ struct UserDefined {
struct Curl_easy *dohfor; /* this is a DoH request for that transfer */
#endif
CURLU *uh; /* URL handle for the current parsed URL */
+#ifndef CURL_DISABLE_HTTP
void *trailer_data; /* pointer to pass to trailer data callback */
curl_trailer_callback trailer_callback; /* trailing data callback */
+#endif
char keep_post; /* keep POSTs as POSTs after a 30x request; each
bit represents a request, from 301 to 303 */
#ifndef CURL_DISABLE_SMTP
@@ -1845,25 +1848,39 @@ struct UserDefined {
BIT(mail_rcpt_allowfails); /* allow RCPT TO command to fail for some
recipients */
#endif
+ unsigned int maxconnects; /* Max idle connections in the connection cache */
+ unsigned char use_ssl; /* if AUTH TLS is to be attempted etc, for FTP or
+ IMAP or POP3 or others! (type: curl_usessl)*/
unsigned char connect_only; /* make connection/request, then let
application use the socket */
+#ifndef CURL_DISABLE_MIME
+ BIT(mime_formescape);
+#endif
BIT(is_fread_set); /* has read callback been set to non-NULL? */
#ifndef CURL_DISABLE_TFTP
BIT(tftp_no_options); /* do not send TFTP options requests */
#endif
BIT(sep_headers); /* handle host and proxy headers separately */
+#ifndef CURL_DISABLE_COOKIES
BIT(cookiesession); /* new cookie session? */
+#endif
BIT(crlf); /* convert crlf on ftp upload(?) */
BIT(ssh_compression); /* enable SSH compression */
/* Here follows boolean settings that define how to behave during
this session. They are STATIC, set by libcurl users or at least initially
and they don't change during operations. */
+ BIT(quick_exit); /* set 1L when it is okay to leak things (like
+ threads), as we're about to exit() anyway and
+ don't want lengthy cleanups to delay termination,
+ e.g. after a DNS timeout */
BIT(get_filetime); /* get the time and get of the remote file */
- BIT(tunnel_thru_httpproxy); /* use CONNECT through a HTTP proxy */
+ BIT(tunnel_thru_httpproxy); /* use CONNECT through an HTTP proxy */
BIT(prefer_ascii); /* ASCII rather than binary */
BIT(remote_append); /* append, not overwrite, on upload */
+#ifdef CURL_LIST_ONLY_PROTOCOL
BIT(list_only); /* list directory */
+#endif
#ifndef CURL_DISABLE_FTP
BIT(ftp_use_port); /* use the FTP PORT command */
BIT(ftp_use_epsv); /* if EPSV is to be attempted or not */
@@ -1884,11 +1901,10 @@ struct UserDefined {
BIT(http_auto_referer); /* set "correct" referer when following
location: */
BIT(opt_no_body); /* as set with CURLOPT_NOBODY */
- BIT(upload); /* upload request */
BIT(verbose); /* output verbosity */
BIT(krb); /* Kerberos connection requested */
BIT(reuse_forbid); /* forbidden to be reused, close after use */
- BIT(reuse_fresh); /* do not re-use an existing connection */
+ BIT(reuse_fresh); /* do not reuse an existing connection */
BIT(no_signal); /* do not use any signal/alarm handler */
BIT(tcp_nodelay); /* whether to enable TCP_NODELAY or not */
BIT(ignorecl); /* ignore content length */
@@ -1911,7 +1927,6 @@ struct UserDefined {
BIT(suppress_connect_headers); /* suppress proxy CONNECT response headers
from user callbacks */
BIT(dns_shuffle_addresses); /* whether to shuffle addresses before use */
- BIT(stream_depends_e); /* set or don't set the Exclusive bit */
BIT(haproxyprotocol); /* whether to send HAProxy PROXY protocol v1
header */
BIT(abstract_unix_socket);
@@ -1951,13 +1966,21 @@ struct Curl_easy {
/* First a simple identifier to easier detect if a user mix up this easy
handle with a multi handle. Set this to CURLEASY_MAGIC_NUMBER */
unsigned int magic;
+ /* once an easy handle is tied to a connection cache
+ a non-negative number to distinguish this transfer from
+ other using the same cache. For easier tracking
+ in log output.
+ This may wrap around after LONG_MAX to 0 again, so it
+ has no uniqueness guarantee for very large processings. */
+ curl_off_t id;
/* first, two fields for the linked list of these */
struct Curl_easy *next;
struct Curl_easy *prev;
struct connectdata *conn;
- struct Curl_llist_element connect_queue;
+ struct Curl_llist_element connect_queue; /* for the pending and msgsent
+ lists */
struct Curl_llist_element conn_queue; /* list per connectdata */
CURLMstate mstate; /* the handle's state */
@@ -1969,10 +1992,7 @@ struct Curl_easy {
particular order. Note that all sockets are added to the sockhash, where
the state etc are also kept. This array is mostly used to detect when a
socket is to be removed from the hash. See singlesocket(). */
- curl_socket_t sockets[MAX_SOCKSPEREASYHANDLE];
- unsigned char actions[MAX_SOCKSPEREASYHANDLE]; /* action for each socket in
- sockets[] */
- int numsocks;
+ struct easy_pollset last_poll;
struct Names dns;
struct Curl_multi *multi; /* if non-NULL, points to the multi handle
@@ -2003,7 +2023,7 @@ struct Curl_easy {
struct UrlState state; /* struct for fields used for state info and
other dynamic purposes */
#ifndef CURL_DISABLE_FTP
- struct WildcardData wildcard; /* wildcard download state info */
+ struct WildcardData *wildcard; /* wildcard download state info */
#endif
struct PureInfo info; /* stats, reports and info data */
struct curl_tlssessioninfo tsi; /* Information about the TLS session, only
diff --git a/lib/vauth/cleartext.c b/lib/vauth/cleartext.c
index b82b17146..972a87448 100644
--- a/lib/vauth/cleartext.c
+++ b/lib/vauth/cleartext.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -28,13 +28,13 @@
#include "curl_setup.h"
#if !defined(CURL_DISABLE_IMAP) || !defined(CURL_DISABLE_SMTP) || \
- !defined(CURL_DISABLE_POP3)
+ !defined(CURL_DISABLE_POP3) || \
+ (!defined(CURL_DISABLE_LDAP) && defined(USE_OPENLDAP))
#include <curl/curl.h>
#include "urldata.h"
#include "vauth/vauth.h"
-#include "curl_md5.h"
#include "warnless.h"
#include "strtok.h"
#include "sendf.h"
diff --git a/lib/vauth/cram.c b/lib/vauth/cram.c
index 475d31b8d..91fb261c5 100644
--- a/lib/vauth/cram.c
+++ b/lib/vauth/cram.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -26,7 +26,7 @@
#include "curl_setup.h"
-#if !defined(CURL_DISABLE_CRYPTO_AUTH)
+#ifndef CURL_DISABLE_DIGEST_AUTH
#include <curl/curl.h>
#include "urldata.h"
@@ -94,4 +94,4 @@ CURLcode Curl_auth_create_cram_md5_message(const struct bufref *chlg,
return CURLE_OK;
}
-#endif /* !CURL_DISABLE_CRYPTO_AUTH */
+#endif /* !CURL_DISABLE_DIGEST_AUTH */
diff --git a/lib/vauth/digest.c b/lib/vauth/digest.c
index f945e8b6c..416da0fcc 100644
--- a/lib/vauth/digest.c
+++ b/lib/vauth/digest.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -27,7 +27,7 @@
#include "curl_setup.h"
-#if !defined(CURL_DISABLE_CRYPTO_AUTH)
+#ifndef CURL_DISABLE_DIGEST_AUTH
#include <curl/curl.h>
@@ -125,7 +125,6 @@ bool Curl_auth_digest_get_pair(const char *str, char *value, char *content,
}
else
return FALSE;
- break;
}
}
@@ -142,7 +141,7 @@ bool Curl_auth_digest_get_pair(const char *str, char *value, char *content,
}
#if !defined(USE_WINDOWS_SSPI)
-/* Convert md5 chunk to RFC2617 (section 3.1.3) -suitable ascii string*/
+/* Convert md5 chunk to RFC2617 (section 3.1.3) -suitable ascii string */
static void auth_digest_md5_to_ascii(unsigned char *source, /* 16 bytes */
unsigned char *dest) /* 33 bytes */
{
@@ -151,7 +150,7 @@ static void auth_digest_md5_to_ascii(unsigned char *source, /* 16 bytes */
msnprintf((char *) &dest[i * 2], 3, "%02x", source[i]);
}
-/* Convert sha256 chunk to RFC7616 -suitable ascii string*/
+/* Convert sha256 chunk to RFC7616 -suitable ascii string */
static void auth_digest_sha256_to_ascii(unsigned char *source, /* 32 bytes */
unsigned char *dest) /* 65 bytes */
{
@@ -186,7 +185,7 @@ static char *auth_digest_string_quoted(const char *source)
}
*d++ = *s++;
}
- *d = 0;
+ *d = '\0';
}
return dest;
@@ -420,7 +419,7 @@ CURLcode Curl_auth_create_digest_md5_message(struct Curl_easy *data,
msnprintf(&HA1_hex[2 * i], 3, "%02x", digest[i]);
/* Generate our SPN */
- spn = Curl_auth_build_spn(service, realm, NULL);
+ spn = Curl_auth_build_spn(service, data->conn->host.name, NULL);
if(!spn)
return CURLE_OUT_OF_MEMORY;
@@ -490,7 +489,7 @@ CURLcode Curl_auth_create_digest_md5_message(struct Curl_easy *data,
/*
* Curl_auth_decode_digest_http_message()
*
- * This is used to decode a HTTP DIGEST challenge message into the separate
+ * This is used to decode an HTTP DIGEST challenge message into the separate
* attributes.
*
* Parameters:
@@ -650,7 +649,7 @@ CURLcode Curl_auth_decode_digest_http_message(const char *chlg,
/*
* auth_create_digest_http_message()
*
- * This is used to generate a HTTP DIGEST response message ready for sending
+ * This is used to generate an HTTP DIGEST response message ready for sending
* to the recipient.
*
* Parameters:
@@ -694,6 +693,7 @@ static CURLcode auth_create_digest_http_message(
char *hashthis = NULL;
char *tmp = NULL;
+ memset(hashbuf, 0, sizeof(hashbuf));
if(!digest->nc)
digest->nc = 1;
@@ -926,7 +926,7 @@ static CURLcode auth_create_digest_http_message(
/*
* Curl_auth_create_digest_http_message()
*
- * This is used to generate a HTTP DIGEST response message ready for sending
+ * This is used to generate an HTTP DIGEST response message ready for sending
* to the recipient.
*
* Parameters:
@@ -991,4 +991,4 @@ void Curl_auth_digest_cleanup(struct digestdata *digest)
}
#endif /* !USE_WINDOWS_SSPI */
-#endif /* CURL_DISABLE_CRYPTO_AUTH */
+#endif /* !CURL_DISABLE_DIGEST_AUTH */
diff --git a/lib/vauth/digest.h b/lib/vauth/digest.h
index d785bdd91..99ce1f913 100644
--- a/lib/vauth/digest.h
+++ b/lib/vauth/digest.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -26,7 +26,7 @@
#include <curl/curl.h>
-#if !defined(CURL_DISABLE_CRYPTO_AUTH)
+#ifndef CURL_DISABLE_DIGEST_AUTH
#define DIGEST_MAX_VALUE_LENGTH 256
#define DIGEST_MAX_CONTENT_LENGTH 1024
diff --git a/lib/vauth/digest_sspi.c b/lib/vauth/digest_sspi.c
index 89a9db52c..02e36ea5e 100644
--- a/lib/vauth/digest_sspi.c
+++ b/lib/vauth/digest_sspi.c
@@ -5,8 +5,8 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2014 - 2016, Steve Holme, <steve_holme@hotmail.com>.
- * Copyright (C) 2015 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Steve Holme, <steve_holme@hotmail.com>.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -27,7 +27,7 @@
#include "curl_setup.h"
-#if defined(USE_WINDOWS_SSPI) && !defined(CURL_DISABLE_CRYPTO_AUTH)
+#if defined(USE_WINDOWS_SSPI) && !defined(CURL_DISABLE_DIGEST_AUTH)
#include <curl/curl.h>
@@ -307,7 +307,7 @@ CURLcode Curl_override_sspi_http_realm(const char *chlg,
/*
* Curl_auth_decode_digest_http_message()
*
- * This is used to decode a HTTP DIGEST challenge message into the separate
+ * This is used to decode an HTTP DIGEST challenge message into the separate
* attributes.
*
* Parameters:
@@ -371,7 +371,7 @@ CURLcode Curl_auth_decode_digest_http_message(const char *chlg,
/*
* Curl_auth_create_digest_http_message()
*
- * This is used to generate a HTTP DIGEST response message ready for sending
+ * This is used to generate an HTTP DIGEST response message ready for sending
* to the recipient.
*
* Parameters:
@@ -665,4 +665,4 @@ void Curl_auth_digest_cleanup(struct digestdata *digest)
Curl_safefree(digest->passwd);
}
-#endif /* USE_WINDOWS_SSPI && !CURL_DISABLE_CRYPTO_AUTH */
+#endif /* USE_WINDOWS_SSPI && !CURL_DISABLE_DIGEST_AUTH */
diff --git a/lib/vauth/gsasl.c b/lib/vauth/gsasl.c
index a73c64443..c7d0a8d3b 100644
--- a/lib/vauth/gsasl.c
+++ b/lib/vauth/gsasl.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2020 - 2022, Simon Josefsson, <simon@josefsson.org>, et al.
+ * Copyright (C) Simon Josefsson, <simon@josefsson.org>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/vauth/krb5_gssapi.c b/lib/vauth/krb5_gssapi.c
index bac78049d..65eb3e1b5 100644
--- a/lib/vauth/krb5_gssapi.c
+++ b/lib/vauth/krb5_gssapi.c
@@ -5,8 +5,8 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2014 - 2019, Steve Holme, <steve_holme@hotmail.com>.
- * Copyright (C) 2015 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Steve Holme, <steve_holme@hotmail.com>.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/vauth/krb5_sspi.c b/lib/vauth/krb5_sspi.c
index 895b4a193..c487149b9 100644
--- a/lib/vauth/krb5_sspi.c
+++ b/lib/vauth/krb5_sspi.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2014 - 2022, Steve Holme, <steve_holme@hotmail.com>.
+ * Copyright (C) Steve Holme, <steve_holme@hotmail.com>.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -471,4 +471,4 @@ void Curl_auth_cleanup_gssapi(struct kerberos5data *krb5)
krb5->token_max = 0;
}
-#endif /* USE_WINDOWS_SSPI && USE_KERBEROS5*/
+#endif /* USE_WINDOWS_SSPI && USE_KERBEROS5 */
diff --git a/lib/vauth/ntlm.c b/lib/vauth/ntlm.c
index c10fa6caa..ed7cee8de 100644
--- a/lib/vauth/ntlm.c
+++ b/lib/vauth/ntlm.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -45,12 +45,6 @@
#include "rand.h"
#include "vtls/vtls.h"
-/* SSL backend-specific #if branches in this file must be kept in the order
- documented in curl_ntlm_core. */
-#if defined(NTLM_NEEDS_NSS_INIT)
-#include "vtls/nssg.h" /* for Curl_nss_force_init() */
-#endif
-
#define BUILDING_CURL_NTLM_MSGS_C
#include "vauth/vauth.h"
#include "vauth/ntlm.h"
@@ -88,8 +82,6 @@ static void ntlm_print_flags(FILE *handle, unsigned long flags)
fprintf(handle, "NTLMFLAG_NEGOTIATE_DATAGRAM_STYLE ");
if(flags & NTLMFLAG_NEGOTIATE_LM_KEY)
fprintf(handle, "NTLMFLAG_NEGOTIATE_LM_KEY ");
- if(flags & NTLMFLAG_NEGOTIATE_NETWARE)
- fprintf(handle, "NTLMFLAG_NEGOTIATE_NETWARE ");
if(flags & NTLMFLAG_NEGOTIATE_NTLM_KEY)
fprintf(handle, "NTLMFLAG_NEGOTIATE_NTLM_KEY ");
if(flags & (1<<10))
@@ -276,12 +268,7 @@ CURLcode Curl_auth_decode_ntlm_type2_message(struct Curl_easy *data,
const unsigned char *type2 = Curl_bufref_ptr(type2ref);
size_t type2len = Curl_bufref_len(type2ref);
-#if defined(NTLM_NEEDS_NSS_INIT)
- /* Make sure the crypto backend is initialized */
- result = Curl_nss_force_init(data);
- if(result)
- return result;
-#elif defined(CURL_DISABLE_VERBOSE_STRINGS)
+#if defined(CURL_DISABLE_VERBOSE_STRINGS)
(void)data;
#endif
@@ -382,8 +369,8 @@ CURLcode Curl_auth_create_ntlm_type1_message(struct Curl_easy *data,
(void)data;
(void)userp;
(void)passwdp;
- (void)service,
- (void)hostname,
+ (void)service;
+ (void)hostname;
/* Clean up any former leftovers and initialise to defaults */
Curl_auth_cleanup_ntlm(ntlm);
@@ -513,6 +500,8 @@ CURLcode Curl_auth_create_ntlm_type3_message(struct Curl_easy *data,
size_t userlen = 0;
size_t domlen = 0;
+ memset(lmresp, 0, sizeof(lmresp));
+ memset(ntresp, 0, sizeof(ntresp));
user = strchr(userp, '\\');
if(!user)
user = strchr(userp, '/');
diff --git a/lib/vauth/ntlm.h b/lib/vauth/ntlm.h
index 4dfda5545..31ce921cd 100644
--- a/lib/vauth/ntlm.h
+++ b/lib/vauth/ntlm.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -64,9 +64,6 @@
/* Indicates that the LAN Manager session key should be used for signing and
sealing authenticated communications. */
-#define NTLMFLAG_NEGOTIATE_NETWARE (1<<8)
-/* unknown purpose */
-
#define NTLMFLAG_NEGOTIATE_NTLM_KEY (1<<9)
/* Indicates that NTLM authentication is being used. */
diff --git a/lib/vauth/ntlm_sspi.c b/lib/vauth/ntlm_sspi.c
index 193576aca..5118963f4 100644
--- a/lib/vauth/ntlm_sspi.c
+++ b/lib/vauth/ntlm_sspi.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/vauth/oauth2.c b/lib/vauth/oauth2.c
index 1604b303e..a4adbdcf1 100644
--- a/lib/vauth/oauth2.c
+++ b/lib/vauth/oauth2.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -27,7 +27,8 @@
#include "curl_setup.h"
#if !defined(CURL_DISABLE_IMAP) || !defined(CURL_DISABLE_SMTP) || \
- !defined(CURL_DISABLE_POP3)
+ !defined(CURL_DISABLE_POP3) || \
+ (!defined(CURL_DISABLE_LDAP) && defined(USE_OPENLDAP))
#include <curl/curl.h>
#include "urldata.h"
diff --git a/lib/vauth/spnego_gssapi.c b/lib/vauth/spnego_gssapi.c
index 25dff967d..e1d52b755 100644
--- a/lib/vauth/spnego_gssapi.c
+++ b/lib/vauth/spnego_gssapi.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/vauth/spnego_sspi.c b/lib/vauth/spnego_sspi.c
index d845caca6..d3245d0b1 100644
--- a/lib/vauth/spnego_sspi.c
+++ b/lib/vauth/spnego_sspi.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/vauth/vauth.c b/lib/vauth/vauth.c
index 58fe05139..62fc7c40f 100644
--- a/lib/vauth/vauth.c
+++ b/lib/vauth/vauth.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2014 - 2022, Steve Holme, <steve_holme@hotmail.com>.
+ * Copyright (C) Steve Holme, <steve_holme@hotmail.com>.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/vauth/vauth.h b/lib/vauth/vauth.h
index af27f01df..9da054089 100644
--- a/lib/vauth/vauth.h
+++ b/lib/vauth/vauth.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2014 - 2022, Steve Holme, <steve_holme@hotmail.com>.
+ * Copyright (C) Steve Holme, <steve_holme@hotmail.com>.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -30,7 +30,7 @@
struct Curl_easy;
-#if !defined(CURL_DISABLE_CRYPTO_AUTH)
+#if !defined(CURL_DISABLE_DIGEST_AUTH)
struct digestdata;
#endif
@@ -86,7 +86,7 @@ CURLcode Curl_auth_create_login_message(const char *value,
CURLcode Curl_auth_create_external_message(const char *user,
struct bufref *out);
-#if !defined(CURL_DISABLE_CRYPTO_AUTH)
+#ifndef CURL_DISABLE_DIGEST_AUTH
/* This is used to generate a CRAM-MD5 response message */
CURLcode Curl_auth_create_cram_md5_message(const struct bufref *chlg,
const char *userp,
@@ -104,11 +104,11 @@ CURLcode Curl_auth_create_digest_md5_message(struct Curl_easy *data,
const char *service,
struct bufref *out);
-/* This is used to decode a HTTP DIGEST challenge message */
+/* This is used to decode an HTTP DIGEST challenge message */
CURLcode Curl_auth_decode_digest_http_message(const char *chlg,
struct digestdata *digest);
-/* This is used to generate a HTTP DIGEST response message */
+/* This is used to generate an HTTP DIGEST response message */
CURLcode Curl_auth_create_digest_http_message(struct Curl_easy *data,
const char *userp,
const char *passwdp,
@@ -119,7 +119,7 @@ CURLcode Curl_auth_create_digest_http_message(struct Curl_easy *data,
/* This is used to clean up the digest specific data */
void Curl_auth_digest_cleanup(struct digestdata *digest);
-#endif /* !CURL_DISABLE_CRYPTO_AUTH */
+#endif /* !CURL_DISABLE_DIGEST_AUTH */
#ifdef USE_GSASL
/* This is used to evaluate if MECH is supported by gsasl */
@@ -219,7 +219,7 @@ bool Curl_auth_is_spnego_supported(void);
message */
CURLcode Curl_auth_decode_spnego_message(struct Curl_easy *data,
const char *user,
- const char *passwood,
+ const char *password,
const char *service,
const char *host,
const char *chlg64,
diff --git a/lib/version.c b/lib/version.c
index f71f49e09..f957f085d 100644
--- a/lib/version.c
+++ b/lib/version.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,18 +24,22 @@
#include "curl_setup.h"
+#ifdef USE_NGHTTP2
+#include <nghttp2/nghttp2.h>
+#endif
+
#include <curl/curl.h>
#include "urldata.h"
#include "vtls/vtls.h"
#include "http2.h"
#include "vssh/ssh.h"
-#include "quic.h"
+#include "vquic/vquic.h"
#include "curl_printf.h"
#include "easy_lock.h"
#ifdef USE_ARES
# if defined(CURL_STATICLIB) && !defined(CARES_STATICLIB) && \
- defined(WIN32)
+ defined(_WIN32)
# define CARES_STATICLIB
# endif
# include <ares.h>
@@ -58,7 +62,15 @@
#endif
#ifdef HAVE_BROTLI
+#if defined(__GNUC__)
+/* Ignore -Wvla warnings in brotli headers */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+#endif
#include <brotli/decode.h>
+#if defined(__GNUC__)
+#pragma GCC diagnostic pop
+#endif
#endif
#ifdef HAVE_ZSTD
@@ -288,7 +300,7 @@ char *curl_version(void)
protocol line has its own #if line to make things easier on the eye.
*/
-static const char * const protocols[] = {
+static const char * const supported_protocols[] = {
#ifndef CURL_DISABLE_DICT
"dict",
#endif
@@ -353,8 +365,7 @@ static const char * const protocols[] = {
#ifdef USE_SSH
"sftp",
#endif
-#if !defined(CURL_DISABLE_SMB) && defined(USE_CURL_NTLM_CORE) && \
- (SIZEOF_CURL_OFF_T > 4)
+#if !defined(CURL_DISABLE_SMB) && defined(USE_CURL_NTLM_CORE)
"smb",
# ifdef USE_SSL
"smbs",
@@ -382,97 +393,151 @@ static const char * const protocols[] = {
NULL
};
-static curl_version_info_data version_info = {
- CURLVERSION_NOW,
- LIBCURL_VERSION,
- LIBCURL_VERSION_NUM,
- OS, /* as found by configure or set by hand at build-time */
- 0 /* features is 0 by default */
-#ifdef ENABLE_IPV6
- | CURL_VERSION_IPV6
+/*
+ * Feature presence run-time check functions.
+ *
+ * Warning: the value returned by these should not change between
+ * curl_global_init() and curl_global_cleanup() calls.
+ */
+
+#if defined(USE_LIBIDN2)
+static int idn_present(curl_version_info_data *info)
+{
+ return info->libidn != NULL;
+}
+#else
+#define idn_present NULL
#endif
-#ifdef USE_SSL
- | CURL_VERSION_SSL
+
+#if defined(USE_SSL) && !defined(CURL_DISABLE_PROXY) && \
+ !defined(CURL_DISABLE_HTTP)
+static int https_proxy_present(curl_version_info_data *info)
+{
+ (void) info;
+ return Curl_ssl_supports(NULL, SSLSUPP_HTTPS_PROXY);
+}
#endif
-#ifdef USE_NTLM
- | CURL_VERSION_NTLM
+
+/*
+ * Features table.
+ *
+ * Keep the features alphabetically sorted.
+ * Use FEATURE() macro to define an entry: this allows documentation check.
+ */
+
+#define FEATURE(name, present, bitmask) {(name), (present), (bitmask)}
+
+struct feat {
+ const char *name;
+ int (*present)(curl_version_info_data *info);
+ int bitmask;
+};
+
+static const struct feat features_table[] = {
+#ifndef CURL_DISABLE_ALTSVC
+ FEATURE("alt-svc", NULL, CURL_VERSION_ALTSVC),
#endif
-#if !defined(CURL_DISABLE_HTTP) && defined(USE_NTLM) && \
- defined(NTLM_WB_ENABLED)
- | CURL_VERSION_NTLM_WB
+#ifdef CURLRES_ASYNCH
+ FEATURE("AsynchDNS", NULL, CURL_VERSION_ASYNCHDNS),
#endif
-#ifdef USE_SPNEGO
- | CURL_VERSION_SPNEGO
+#ifdef HAVE_BROTLI
+ FEATURE("brotli", NULL, CURL_VERSION_BROTLI),
#endif
-#ifdef USE_KERBEROS5
- | CURL_VERSION_KERBEROS5
+#ifdef DEBUGBUILD
+ FEATURE("Debug", NULL, CURL_VERSION_DEBUG),
+#endif
+#ifdef USE_GSASL
+ FEATURE("gsasl", NULL, CURL_VERSION_GSASL),
#endif
#ifdef HAVE_GSSAPI
- | CURL_VERSION_GSSAPI
+ FEATURE("GSS-API", NULL, CURL_VERSION_GSSAPI),
#endif
-#ifdef USE_WINDOWS_SSPI
- | CURL_VERSION_SSPI
+#ifndef CURL_DISABLE_HSTS
+ FEATURE("HSTS", NULL, CURL_VERSION_HSTS),
#endif
-#ifdef HAVE_LIBZ
- | CURL_VERSION_LIBZ
+#if defined(USE_NGHTTP2)
+ FEATURE("HTTP2", NULL, CURL_VERSION_HTTP2),
#endif
-#ifdef DEBUGBUILD
- | CURL_VERSION_DEBUG
+#if defined(ENABLE_QUIC)
+ FEATURE("HTTP3", NULL, CURL_VERSION_HTTP3),
#endif
-#ifdef CURLDEBUG
- | CURL_VERSION_CURLDEBUG
+#if defined(USE_SSL) && !defined(CURL_DISABLE_PROXY) && \
+ !defined(CURL_DISABLE_HTTP)
+ FEATURE("HTTPS-proxy", https_proxy_present, CURL_VERSION_HTTPS_PROXY),
#endif
-#ifdef CURLRES_ASYNCH
- | CURL_VERSION_ASYNCHDNS
+#if defined(USE_LIBIDN2) || defined(USE_WIN32_IDN)
+ FEATURE("IDN", idn_present, CURL_VERSION_IDN),
+#endif
+#ifdef ENABLE_IPV6
+ FEATURE("IPv6", NULL, CURL_VERSION_IPV6),
+#endif
+#ifdef USE_KERBEROS5
+ FEATURE("Kerberos", NULL, CURL_VERSION_KERBEROS5),
#endif
#if (SIZEOF_CURL_OFF_T > 4) && \
( (SIZEOF_OFF_T > 4) || defined(USE_WIN32_LARGE_FILES) )
- | CURL_VERSION_LARGEFILE
+ FEATURE("Largefile", NULL, CURL_VERSION_LARGEFILE),
#endif
-#if defined(WIN32) && defined(UNICODE) && defined(_UNICODE)
- | CURL_VERSION_UNICODE
-#endif
-#if defined(USE_TLS_SRP)
- | CURL_VERSION_TLSAUTH_SRP
+#ifdef HAVE_LIBZ
+ FEATURE("libz", NULL, CURL_VERSION_LIBZ),
#endif
-#if defined(USE_NGHTTP2) || defined(USE_HYPER)
- | CURL_VERSION_HTTP2
+#ifdef CURL_WITH_MULTI_SSL
+ FEATURE("MultiSSL", NULL, CURL_VERSION_MULTI_SSL),
#endif
-#if defined(ENABLE_QUIC)
- | CURL_VERSION_HTTP3
+#ifdef USE_NTLM
+ FEATURE("NTLM", NULL, CURL_VERSION_NTLM),
#endif
-#if defined(USE_UNIX_SOCKETS)
- | CURL_VERSION_UNIX_SOCKETS
+#if !defined(CURL_DISABLE_HTTP) && defined(USE_NTLM) && \
+ defined(NTLM_WB_ENABLED)
+ FEATURE("NTLM_WB", NULL, CURL_VERSION_NTLM_WB),
#endif
#if defined(USE_LIBPSL)
- | CURL_VERSION_PSL
+ FEATURE("PSL", NULL, CURL_VERSION_PSL),
#endif
-#if defined(CURL_WITH_MULTI_SSL)
- | CURL_VERSION_MULTI_SSL
+#ifdef USE_SPNEGO
+ FEATURE("SPNEGO", NULL, CURL_VERSION_SPNEGO),
#endif
-#if defined(HAVE_BROTLI)
- | CURL_VERSION_BROTLI
+#ifdef USE_SSL
+ FEATURE("SSL", NULL, CURL_VERSION_SSL),
#endif
-#if defined(HAVE_ZSTD)
- | CURL_VERSION_ZSTD
+#ifdef USE_WINDOWS_SSPI
+ FEATURE("SSPI", NULL, CURL_VERSION_SSPI),
#endif
-#ifndef CURL_DISABLE_ALTSVC
- | CURL_VERSION_ALTSVC
+#ifdef GLOBAL_INIT_IS_THREADSAFE
+ FEATURE("threadsafe", NULL, CURL_VERSION_THREADSAFE),
#endif
-#ifndef CURL_DISABLE_HSTS
- | CURL_VERSION_HSTS
+#ifdef USE_TLS_SRP
+ FEATURE("TLS-SRP", NULL, CURL_VERSION_TLSAUTH_SRP),
#endif
-#if defined(USE_GSASL)
- | CURL_VERSION_GSASL
+#ifdef CURLDEBUG
+ FEATURE("TrackMemory", NULL, CURL_VERSION_CURLDEBUG),
+#endif
+#if defined(_WIN32) && defined(UNICODE) && defined(_UNICODE)
+ FEATURE("Unicode", NULL, CURL_VERSION_UNICODE),
+#endif
+#ifdef USE_UNIX_SOCKETS
+ FEATURE("UnixSockets", NULL, CURL_VERSION_UNIX_SOCKETS),
#endif
-#if defined(GLOBAL_INIT_IS_THREADSAFE)
- | CURL_VERSION_THREADSAFE
+#ifdef HAVE_ZSTD
+ FEATURE("zstd", NULL, CURL_VERSION_ZSTD),
#endif
- ,
+ {NULL, NULL, 0}
+};
+
+static const char *feature_names[sizeof(features_table) /
+ sizeof(features_table[0])] = {NULL};
+
+
+static curl_version_info_data version_info = {
+ CURLVERSION_NOW,
+ LIBCURL_VERSION,
+ LIBCURL_VERSION_NUM,
+ OS, /* as found by configure or set by hand at build-time */
+ 0, /* features bitmask is built at run-time */
NULL, /* ssl_version */
0, /* ssl_version_num, this is kept at zero */
NULL, /* zlib_version */
- protocols,
+ supported_protocols,
NULL, /* c-ares version */
0, /* c-ares version numerical */
NULL, /* libidn version */
@@ -496,11 +561,16 @@ static curl_version_info_data version_info = {
0, /* zstd_ver_num */
NULL, /* zstd version */
NULL, /* Hyper version */
- NULL /* gsasl version */
+ NULL, /* gsasl version */
+ feature_names
};
curl_version_info_data *curl_version_info(CURLversion stamp)
{
+ size_t n;
+ const struct feat *p;
+ int features = 0;
+
#if defined(USE_SSH)
static char ssh_buffer[80];
#endif
@@ -518,15 +588,11 @@ curl_version_info_data *curl_version_info(CURLversion stamp)
static char zstd_buffer[80];
#endif
+ (void)stamp; /* avoid compiler warnings, we don't use this */
+
#ifdef USE_SSL
Curl_ssl_version(ssl_buffer, sizeof(ssl_buffer));
version_info.ssl_version = ssl_buffer;
-#ifndef CURL_DISABLE_PROXY
- if(Curl_ssl->supports & SSLSUPP_HTTPS_PROXY)
- version_info.features |= CURL_VERSION_HTTPS_PROXY;
- else
- version_info.features &= ~CURL_VERSION_HTTPS_PROXY;
-#endif
#endif
#ifdef HAVE_LIBZ
@@ -544,10 +610,6 @@ curl_version_info_data *curl_version_info(CURLversion stamp)
/* This returns a version string if we use the given version or later,
otherwise it returns NULL */
version_info.libidn = idn2_check_version(IDN2_VERSION);
- if(version_info.libidn)
- version_info.features |= CURL_VERSION_IDN;
-#elif defined(USE_WIN32_IDN)
- version_info.features |= CURL_VERSION_IDN;
#endif
#if defined(USE_SSH)
@@ -597,6 +659,16 @@ curl_version_info_data *curl_version_info(CURLversion stamp)
}
#endif
- (void)stamp; /* avoid compiler warnings, we don't use this */
+ /* Get available features, build bitmask and names array. */
+ n = 0;
+ for(p = features_table; p->name; p++)
+ if(!p->present || p->present(&version_info)) {
+ features |= p->bitmask;
+ feature_names[n++] = p->name;
+ }
+
+ feature_names[n] = NULL; /* Terminate array. */
+ version_info.features = features;
+
return &version_info;
}
diff --git a/lib/version_win32.c b/lib/version_win32.c
index e8f14f9df..e0f239e15 100644
--- a/lib/version_win32.c
+++ b/lib/version_win32.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2016 - 2022, Steve Holme, <steve_holme@hotmail.com>.
+ * Copyright (C) Steve Holme, <steve_holme@hotmail.com>.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,7 +24,7 @@
#include "curl_setup.h"
-#if defined(WIN32)
+#if defined(_WIN32)
#include <curl/curl.h>
#include "version_win32.h"
@@ -316,4 +316,4 @@ bool curlx_verify_windows_version(const unsigned int majorVersion,
return matched;
}
-#endif /* WIN32 */
+#endif /* _WIN32 */
diff --git a/lib/version_win32.h b/lib/version_win32.h
index 7a9a6a14f..95c066112 100644
--- a/lib/version_win32.h
+++ b/lib/version_win32.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2016 - 2022, Steve Holme, <steve_holme@hotmail.com>.
+ * Copyright (C) Steve Holme, <steve_holme@hotmail.com>.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -26,7 +26,7 @@
#include "curl_setup.h"
-#if defined(WIN32)
+#if defined(_WIN32)
/* Version condition */
typedef enum {
@@ -51,6 +51,6 @@ bool curlx_verify_windows_version(const unsigned int majorVersion,
const PlatformIdentifier platform,
const VersionCondition condition);
-#endif /* WIN32 */
+#endif /* _WIN32 */
#endif /* HEADER_CURL_VERSION_WIN32_H */
diff --git a/lib/vquic/curl_msh3.c b/lib/vquic/curl_msh3.c
new file mode 100644
index 000000000..8ae367240
--- /dev/null
+++ b/lib/vquic/curl_msh3.c
@@ -0,0 +1,1092 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+
+#ifdef USE_MSH3
+
+#include "urldata.h"
+#include "timeval.h"
+#include "multiif.h"
+#include "sendf.h"
+#include "curl_trc.h"
+#include "cfilters.h"
+#include "cf-socket.h"
+#include "connect.h"
+#include "progress.h"
+#include "http1.h"
+#include "curl_msh3.h"
+#include "socketpair.h"
+#include "vtls/vtls.h"
+#include "vquic/vquic.h"
+
+/* The last 3 #include files should be in this order */
+#include "curl_printf.h"
+#include "curl_memory.h"
+#include "memdebug.h"
+
+#ifdef CURL_DISABLE_SOCKETPAIR
+#error "MSH3 cannot be build with CURL_DISABLE_SOCKETPAIR set"
+#endif
+
+#define H3_STREAM_WINDOW_SIZE (128 * 1024)
+#define H3_STREAM_CHUNK_SIZE (16 * 1024)
+#define H3_STREAM_RECV_CHUNKS \
+ (H3_STREAM_WINDOW_SIZE / H3_STREAM_CHUNK_SIZE)
+
+#ifdef _WIN32
+#define msh3_lock CRITICAL_SECTION
+#define msh3_lock_initialize(lock) InitializeCriticalSection(lock)
+#define msh3_lock_uninitialize(lock) DeleteCriticalSection(lock)
+#define msh3_lock_acquire(lock) EnterCriticalSection(lock)
+#define msh3_lock_release(lock) LeaveCriticalSection(lock)
+#else /* !_WIN32 */
+#include <pthread.h>
+#define msh3_lock pthread_mutex_t
+#define msh3_lock_initialize(lock) do { \
+ pthread_mutexattr_t attr; \
+ pthread_mutexattr_init(&attr); \
+ pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); \
+ pthread_mutex_init(lock, &attr); \
+ pthread_mutexattr_destroy(&attr); \
+}while(0)
+#define msh3_lock_uninitialize(lock) pthread_mutex_destroy(lock)
+#define msh3_lock_acquire(lock) pthread_mutex_lock(lock)
+#define msh3_lock_release(lock) pthread_mutex_unlock(lock)
+#endif /* _WIN32 */
+
+
+static void MSH3_CALL msh3_conn_connected(MSH3_CONNECTION *Connection,
+ void *IfContext);
+static void MSH3_CALL msh3_conn_shutdown_complete(MSH3_CONNECTION *Connection,
+ void *IfContext);
+static void MSH3_CALL msh3_conn_new_request(MSH3_CONNECTION *Connection,
+ void *IfContext,
+ MSH3_REQUEST *Request);
+static void MSH3_CALL msh3_header_received(MSH3_REQUEST *Request,
+ void *IfContext,
+ const MSH3_HEADER *Header);
+static bool MSH3_CALL msh3_data_received(MSH3_REQUEST *Request,
+ void *IfContext, uint32_t *Length,
+ const uint8_t *Data);
+static void MSH3_CALL msh3_complete(MSH3_REQUEST *Request, void *IfContext,
+ bool Aborted, uint64_t AbortError);
+static void MSH3_CALL msh3_shutdown_complete(MSH3_REQUEST *Request,
+ void *IfContext);
+static void MSH3_CALL msh3_data_sent(MSH3_REQUEST *Request,
+ void *IfContext, void *SendContext);
+
+
+void Curl_msh3_ver(char *p, size_t len)
+{
+ uint32_t v[4];
+ MsH3Version(v);
+ (void)msnprintf(p, len, "msh3/%d.%d.%d.%d", v[0], v[1], v[2], v[3]);
+}
+
+#define SP_LOCAL 0
+#define SP_REMOTE 1
+
+struct cf_msh3_ctx {
+ MSH3_API *api;
+ MSH3_CONNECTION *qconn;
+ struct Curl_sockaddr_ex addr;
+ curl_socket_t sock[2]; /* fake socket pair until we get support in msh3 */
+ char l_ip[MAX_IPADR_LEN]; /* local IP as string */
+ int l_port; /* local port number */
+ struct cf_call_data call_data;
+ struct curltime connect_started; /* time the current attempt started */
+ struct curltime handshake_at; /* time connect handshake finished */
+ /* Flags written by msh3/msquic thread */
+ bool handshake_complete;
+ bool handshake_succeeded;
+ bool connected;
+ /* Flags written by curl thread */
+ BIT(verbose);
+ BIT(active);
+};
+
+/* How to access `call_data` from a cf_msh3 filter */
+#undef CF_CTX_CALL_DATA
+#define CF_CTX_CALL_DATA(cf) \
+ ((struct cf_msh3_ctx *)(cf)->ctx)->call_data
+
+/**
+ * All about the H3 internals of a stream
+ */
+struct stream_ctx {
+ struct MSH3_REQUEST *req;
+ struct bufq recvbuf; /* h3 response */
+#ifdef _WIN32
+ CRITICAL_SECTION recv_lock;
+#else /* !_WIN32 */
+ pthread_mutex_t recv_lock;
+#endif /* _WIN32 */
+ uint64_t error3; /* HTTP/3 stream error code */
+ int status_code; /* HTTP status code */
+ CURLcode recv_error;
+ bool closed;
+ bool reset;
+ bool upload_done;
+ bool firstheader; /* FALSE until headers arrive */
+ bool recv_header_complete;
+};
+
+#define H3_STREAM_CTX(d) ((struct stream_ctx *)(((d) && (d)->req.p.http)? \
+ ((struct HTTP *)(d)->req.p.http)->h3_ctx \
+ : NULL))
+#define H3_STREAM_LCTX(d) ((struct HTTP *)(d)->req.p.http)->h3_ctx
+#define H3_STREAM_ID(d) (H3_STREAM_CTX(d)? \
+ H3_STREAM_CTX(d)->id : -2)
+
+
+static CURLcode h3_data_setup(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+
+ if(stream)
+ return CURLE_OK;
+
+ stream = calloc(1, sizeof(*stream));
+ if(!stream)
+ return CURLE_OUT_OF_MEMORY;
+
+ H3_STREAM_LCTX(data) = stream;
+ stream->req = ZERO_NULL;
+ msh3_lock_initialize(&stream->recv_lock);
+ Curl_bufq_init2(&stream->recvbuf, H3_STREAM_CHUNK_SIZE,
+ H3_STREAM_RECV_CHUNKS, BUFQ_OPT_SOFT_LIMIT);
+ CURL_TRC_CF(data, cf, "data setup");
+ return CURLE_OK;
+}
+
+static void h3_data_done(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+
+ (void)cf;
+ if(stream) {
+ CURL_TRC_CF(data, cf, "easy handle is done");
+ Curl_bufq_free(&stream->recvbuf);
+ free(stream);
+ H3_STREAM_LCTX(data) = NULL;
+ }
+}
+
+static void drain_stream_from_other_thread(struct Curl_easy *data,
+ struct stream_ctx *stream)
+{
+ unsigned char bits;
+
+ /* risky */
+ bits = CURL_CSELECT_IN;
+ if(stream && !stream->upload_done)
+ bits |= CURL_CSELECT_OUT;
+ if(data->state.dselect_bits != bits) {
+ data->state.dselect_bits = bits;
+ /* cannot expire from other thread */
+ }
+}
+
+static void drain_stream(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+ unsigned char bits;
+
+ (void)cf;
+ bits = CURL_CSELECT_IN;
+ if(stream && !stream->upload_done)
+ bits |= CURL_CSELECT_OUT;
+ if(data->state.dselect_bits != bits) {
+ data->state.dselect_bits = bits;
+ Curl_expire(data, 0, EXPIRE_RUN_NOW);
+ }
+}
+
+static const MSH3_CONNECTION_IF msh3_conn_if = {
+ msh3_conn_connected,
+ msh3_conn_shutdown_complete,
+ msh3_conn_new_request
+};
+
+static void MSH3_CALL msh3_conn_connected(MSH3_CONNECTION *Connection,
+ void *IfContext)
+{
+ struct Curl_cfilter *cf = IfContext;
+ struct cf_msh3_ctx *ctx = cf->ctx;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+ (void)Connection;
+
+ CURL_TRC_CF(data, cf, "[MSH3] connected");
+ ctx->handshake_succeeded = true;
+ ctx->connected = true;
+ ctx->handshake_complete = true;
+}
+
+static void MSH3_CALL msh3_conn_shutdown_complete(MSH3_CONNECTION *Connection,
+ void *IfContext)
+{
+ struct Curl_cfilter *cf = IfContext;
+ struct cf_msh3_ctx *ctx = cf->ctx;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+
+ (void)Connection;
+ CURL_TRC_CF(data, cf, "[MSH3] shutdown complete");
+ ctx->connected = false;
+ ctx->handshake_complete = true;
+}
+
+static void MSH3_CALL msh3_conn_new_request(MSH3_CONNECTION *Connection,
+ void *IfContext,
+ MSH3_REQUEST *Request)
+{
+ (void)Connection;
+ (void)IfContext;
+ (void)Request;
+}
+
+static const MSH3_REQUEST_IF msh3_request_if = {
+ msh3_header_received,
+ msh3_data_received,
+ msh3_complete,
+ msh3_shutdown_complete,
+ msh3_data_sent
+};
+
+/* Decode HTTP status code. Returns -1 if no valid status code was
+ decoded. (duplicate from http2.c) */
+static int decode_status_code(const char *value, size_t len)
+{
+ int i;
+ int res;
+
+ if(len != 3) {
+ return -1;
+ }
+
+ res = 0;
+
+ for(i = 0; i < 3; ++i) {
+ char c = value[i];
+
+ if(c < '0' || c > '9') {
+ return -1;
+ }
+
+ res *= 10;
+ res += c - '0';
+ }
+
+ return res;
+}
+
+/*
+ * write_resp_raw() copies response data in raw format to the `data`'s
+ * receive buffer. If not enough space is available, it appends to the
+ * `data`'s overflow buffer.
+ */
+static CURLcode write_resp_raw(struct Curl_easy *data,
+ const void *mem, size_t memlen)
+{
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+ CURLcode result = CURLE_OK;
+ ssize_t nwritten;
+
+ if(!stream)
+ return CURLE_RECV_ERROR;
+
+ nwritten = Curl_bufq_write(&stream->recvbuf, mem, memlen, &result);
+ if(nwritten < 0) {
+ return result;
+ }
+
+ if((size_t)nwritten < memlen) {
+ /* This MUST not happen. Our recbuf is dimensioned to hold the
+ * full max_stream_window and then some for this very reason. */
+ DEBUGASSERT(0);
+ return CURLE_RECV_ERROR;
+ }
+ return result;
+}
+
+static void MSH3_CALL msh3_header_received(MSH3_REQUEST *Request,
+ void *userp,
+ const MSH3_HEADER *hd)
+{
+ struct Curl_easy *data = userp;
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+ CURLcode result;
+ (void)Request;
+
+ if(!stream || stream->recv_header_complete) {
+ return;
+ }
+
+ msh3_lock_acquire(&stream->recv_lock);
+
+ if((hd->NameLength == 7) &&
+ !strncmp(HTTP_PSEUDO_STATUS, (char *)hd->Name, 7)) {
+ char line[14]; /* status line is always 13 characters long */
+ size_t ncopy;
+
+ DEBUGASSERT(!stream->firstheader);
+ stream->status_code = decode_status_code(hd->Value, hd->ValueLength);
+ DEBUGASSERT(stream->status_code != -1);
+ ncopy = msnprintf(line, sizeof(line), "HTTP/3 %03d \r\n",
+ stream->status_code);
+ result = write_resp_raw(data, line, ncopy);
+ if(result)
+ stream->recv_error = result;
+ stream->firstheader = TRUE;
+ }
+ else {
+ /* store as an HTTP1-style header */
+ DEBUGASSERT(stream->firstheader);
+ result = write_resp_raw(data, hd->Name, hd->NameLength);
+ if(!result)
+ result = write_resp_raw(data, ": ", 2);
+ if(!result)
+ result = write_resp_raw(data, hd->Value, hd->ValueLength);
+ if(!result)
+ result = write_resp_raw(data, "\r\n", 2);
+ if(result) {
+ stream->recv_error = result;
+ }
+ }
+
+ drain_stream_from_other_thread(data, stream);
+ msh3_lock_release(&stream->recv_lock);
+}
+
+static bool MSH3_CALL msh3_data_received(MSH3_REQUEST *Request,
+ void *IfContext, uint32_t *buflen,
+ const uint8_t *buf)
+{
+ struct Curl_easy *data = IfContext;
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+ CURLcode result;
+ bool rv = FALSE;
+
+ /* TODO: we would like to limit the amount of data we are buffer here.
+ * There seems to be no mechanism in msh3 to adjust flow control and
+ * it is undocumented what happens if we return FALSE here or less
+ * length (buflen is an inout parameter).
+ */
+ (void)Request;
+ if(!stream)
+ return FALSE;
+
+ msh3_lock_acquire(&stream->recv_lock);
+
+ if(!stream->recv_header_complete) {
+ result = write_resp_raw(data, "\r\n", 2);
+ if(result) {
+ stream->recv_error = result;
+ goto out;
+ }
+ stream->recv_header_complete = true;
+ }
+
+ result = write_resp_raw(data, buf, *buflen);
+ if(result) {
+ stream->recv_error = result;
+ }
+ rv = TRUE;
+
+out:
+ msh3_lock_release(&stream->recv_lock);
+ return rv;
+}
+
+static void MSH3_CALL msh3_complete(MSH3_REQUEST *Request, void *IfContext,
+ bool aborted, uint64_t error)
+{
+ struct Curl_easy *data = IfContext;
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+
+ (void)Request;
+ if(!stream)
+ return;
+ msh3_lock_acquire(&stream->recv_lock);
+ stream->closed = TRUE;
+ stream->recv_header_complete = true;
+ if(error)
+ stream->error3 = error;
+ if(aborted)
+ stream->reset = TRUE;
+ msh3_lock_release(&stream->recv_lock);
+}
+
+static void MSH3_CALL msh3_shutdown_complete(MSH3_REQUEST *Request,
+ void *IfContext)
+{
+ struct Curl_easy *data = IfContext;
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+
+ if(!stream)
+ return;
+ (void)Request;
+ (void)stream;
+}
+
+static void MSH3_CALL msh3_data_sent(MSH3_REQUEST *Request,
+ void *IfContext, void *SendContext)
+{
+ struct Curl_easy *data = IfContext;
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+ if(!stream)
+ return;
+ (void)Request;
+ (void)stream;
+ (void)SendContext;
+}
+
+static ssize_t recv_closed_stream(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ CURLcode *err)
+{
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+ ssize_t nread = -1;
+
+ if(!stream) {
+ *err = CURLE_RECV_ERROR;
+ return -1;
+ }
+ (void)cf;
+ if(stream->reset) {
+ failf(data, "HTTP/3 stream reset by server");
+ *err = CURLE_PARTIAL_FILE;
+ CURL_TRC_CF(data, cf, "cf_recv, was reset -> %d", *err);
+ goto out;
+ }
+ else if(stream->error3) {
+ failf(data, "HTTP/3 stream was not closed cleanly: (error %zd)",
+ (ssize_t)stream->error3);
+ *err = CURLE_HTTP3;
+ CURL_TRC_CF(data, cf, "cf_recv, closed uncleanly -> %d", *err);
+ goto out;
+ }
+ else {
+ CURL_TRC_CF(data, cf, "cf_recv, closed ok -> %d", *err);
+ }
+ *err = CURLE_OK;
+ nread = 0;
+
+out:
+ return nread;
+}
+
+static void set_quic_expire(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+
+ /* we have no indication from msh3 when it would be a good time
+ * to juggle the connection again. So, we compromise by calling
+ * us again every some milliseconds. */
+ (void)cf;
+ if(stream && stream->req && !stream->closed) {
+ Curl_expire(data, 10, EXPIRE_QUIC);
+ }
+ else {
+ Curl_expire(data, 50, EXPIRE_QUIC);
+ }
+}
+
+static ssize_t cf_msh3_recv(struct Curl_cfilter *cf, struct Curl_easy *data,
+ char *buf, size_t len, CURLcode *err)
+{
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+ ssize_t nread = -1;
+ struct cf_call_data save;
+
+ (void)cf;
+ if(!stream) {
+ *err = CURLE_RECV_ERROR;
+ return -1;
+ }
+ CF_DATA_SAVE(save, cf, data);
+ CURL_TRC_CF(data, cf, "req: recv with %zu byte buffer", len);
+
+ msh3_lock_acquire(&stream->recv_lock);
+
+ if(stream->recv_error) {
+ failf(data, "request aborted");
+ *err = stream->recv_error;
+ goto out;
+ }
+
+ *err = CURLE_OK;
+
+ if(!Curl_bufq_is_empty(&stream->recvbuf)) {
+ nread = Curl_bufq_read(&stream->recvbuf,
+ (unsigned char *)buf, len, err);
+ CURL_TRC_CF(data, cf, "read recvbuf(len=%zu) -> %zd, %d",
+ len, nread, *err);
+ if(nread < 0)
+ goto out;
+ if(stream->closed)
+ drain_stream(cf, data);
+ }
+ else if(stream->closed) {
+ nread = recv_closed_stream(cf, data, err);
+ goto out;
+ }
+ else {
+ CURL_TRC_CF(data, cf, "req: nothing here, call again");
+ *err = CURLE_AGAIN;
+ }
+
+out:
+ msh3_lock_release(&stream->recv_lock);
+ set_quic_expire(cf, data);
+ CF_DATA_RESTORE(cf, save);
+ return nread;
+}
+
+static ssize_t cf_msh3_send(struct Curl_cfilter *cf, struct Curl_easy *data,
+ const void *buf, size_t len, CURLcode *err)
+{
+ struct cf_msh3_ctx *ctx = cf->ctx;
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+ struct h1_req_parser h1;
+ struct dynhds h2_headers;
+ MSH3_HEADER *nva = NULL;
+ size_t nheader, i;
+ ssize_t nwritten = -1;
+ struct cf_call_data save;
+ bool eos;
+
+ CF_DATA_SAVE(save, cf, data);
+
+ Curl_h1_req_parse_init(&h1, H1_PARSE_DEFAULT_MAX_LINE_LEN);
+ Curl_dynhds_init(&h2_headers, 0, DYN_HTTP_REQUEST);
+
+ /* Sizes must match for cast below to work" */
+ DEBUGASSERT(stream);
+ CURL_TRC_CF(data, cf, "req: send %zu bytes", len);
+
+ if(!stream->req) {
+ /* The first send on the request contains the headers and possibly some
+ data. Parse out the headers and create the request, then if there is
+ any data left over go ahead and send it too. */
+ nwritten = Curl_h1_req_parse_read(&h1, buf, len, NULL, 0, err);
+ if(nwritten < 0)
+ goto out;
+ DEBUGASSERT(h1.done);
+ DEBUGASSERT(h1.req);
+
+ *err = Curl_http_req_to_h2(&h2_headers, h1.req, data);
+ if(*err) {
+ nwritten = -1;
+ goto out;
+ }
+
+ nheader = Curl_dynhds_count(&h2_headers);
+ nva = malloc(sizeof(MSH3_HEADER) * nheader);
+ if(!nva) {
+ *err = CURLE_OUT_OF_MEMORY;
+ nwritten = -1;
+ goto out;
+ }
+
+ for(i = 0; i < nheader; ++i) {
+ struct dynhds_entry *e = Curl_dynhds_getn(&h2_headers, i);
+ nva[i].Name = e->name;
+ nva[i].NameLength = e->namelen;
+ nva[i].Value = e->value;
+ nva[i].ValueLength = e->valuelen;
+ }
+
+ switch(data->state.httpreq) {
+ case HTTPREQ_POST:
+ case HTTPREQ_POST_FORM:
+ case HTTPREQ_POST_MIME:
+ case HTTPREQ_PUT:
+ /* known request body size or -1 */
+ eos = FALSE;
+ break;
+ default:
+ /* there is not request body */
+ eos = TRUE;
+ stream->upload_done = TRUE;
+ break;
+ }
+
+ CURL_TRC_CF(data, cf, "req: send %zu headers", nheader);
+ stream->req = MsH3RequestOpen(ctx->qconn, &msh3_request_if, data,
+ nva, nheader,
+ eos ? MSH3_REQUEST_FLAG_FIN :
+ MSH3_REQUEST_FLAG_NONE);
+ if(!stream->req) {
+ failf(data, "request open failed");
+ *err = CURLE_SEND_ERROR;
+ goto out;
+ }
+ *err = CURLE_OK;
+ nwritten = len;
+ goto out;
+ }
+ else {
+ /* request is open */
+ CURL_TRC_CF(data, cf, "req: send %zu body bytes", len);
+ if(len > 0xFFFFFFFF) {
+ len = 0xFFFFFFFF;
+ }
+
+ if(!MsH3RequestSend(stream->req, MSH3_REQUEST_FLAG_NONE, buf,
+ (uint32_t)len, stream)) {
+ *err = CURLE_SEND_ERROR;
+ goto out;
+ }
+
+ /* TODO - msh3/msquic will hold onto this memory until the send complete
+ event. How do we make sure curl doesn't free it until then? */
+ *err = CURLE_OK;
+ nwritten = len;
+ }
+
+out:
+ set_quic_expire(cf, data);
+ free(nva);
+ Curl_h1_req_parse_free(&h1);
+ Curl_dynhds_free(&h2_headers);
+ CF_DATA_RESTORE(cf, save);
+ return nwritten;
+}
+
+static void cf_msh3_adjust_pollset(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct easy_pollset *ps)
+{
+ struct cf_msh3_ctx *ctx = cf->ctx;
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+ struct cf_call_data save;
+
+ CF_DATA_SAVE(save, cf, data);
+ if(stream && ctx->sock[SP_LOCAL] != CURL_SOCKET_BAD) {
+ if(stream->recv_error) {
+ Curl_pollset_add_in(data, ps, ctx->sock[SP_LOCAL]);
+ drain_stream(cf, data);
+ }
+ else if(stream->req) {
+ Curl_pollset_add_out(data, ps, ctx->sock[SP_LOCAL]);
+ drain_stream(cf, data);
+ }
+ }
+}
+
+static bool cf_msh3_data_pending(struct Curl_cfilter *cf,
+ const struct Curl_easy *data)
+{
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+ struct cf_call_data save;
+ bool pending = FALSE;
+
+ CF_DATA_SAVE(save, cf, data);
+
+ (void)cf;
+ if(stream && stream->req) {
+ msh3_lock_acquire(&stream->recv_lock);
+ CURL_TRC_CF((struct Curl_easy *)data, cf, "data pending = %zu",
+ Curl_bufq_len(&stream->recvbuf));
+ pending = !Curl_bufq_is_empty(&stream->recvbuf);
+ msh3_lock_release(&stream->recv_lock);
+ if(pending)
+ drain_stream(cf, (struct Curl_easy *)data);
+ }
+
+ CF_DATA_RESTORE(cf, save);
+ return pending;
+}
+
+static void cf_msh3_active(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct cf_msh3_ctx *ctx = cf->ctx;
+
+ /* use this socket from now on */
+ cf->conn->sock[cf->sockindex] = ctx->sock[SP_LOCAL];
+ /* the first socket info gets set at conn and data */
+ if(cf->sockindex == FIRSTSOCKET) {
+ cf->conn->remote_addr = &ctx->addr;
+ #ifdef ENABLE_IPV6
+ cf->conn->bits.ipv6 = (ctx->addr.family == AF_INET6)? TRUE : FALSE;
+ #endif
+ Curl_persistconninfo(data, cf->conn, ctx->l_ip, ctx->l_port);
+ }
+ ctx->active = TRUE;
+}
+
+static CURLcode h3_data_pause(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool pause)
+{
+ if(!pause) {
+ drain_stream(cf, data);
+ Curl_expire(data, 0, EXPIRE_RUN_NOW);
+ }
+ return CURLE_OK;
+}
+
+static CURLcode cf_msh3_data_event(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int event, int arg1, void *arg2)
+{
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+ struct cf_call_data save;
+ CURLcode result = CURLE_OK;
+
+ CF_DATA_SAVE(save, cf, data);
+
+ (void)arg1;
+ (void)arg2;
+ switch(event) {
+ case CF_CTRL_DATA_SETUP:
+ result = h3_data_setup(cf, data);
+ break;
+ case CF_CTRL_DATA_PAUSE:
+ result = h3_data_pause(cf, data, (arg1 != 0));
+ break;
+ case CF_CTRL_DATA_DONE:
+ h3_data_done(cf, data);
+ break;
+ case CF_CTRL_DATA_DONE_SEND:
+ CURL_TRC_CF(data, cf, "req: send done");
+ if(stream) {
+ stream->upload_done = TRUE;
+ if(stream->req) {
+ char buf[1];
+ if(!MsH3RequestSend(stream->req, MSH3_REQUEST_FLAG_FIN,
+ buf, 0, data)) {
+ result = CURLE_SEND_ERROR;
+ }
+ }
+ }
+ break;
+ case CF_CTRL_CONN_INFO_UPDATE:
+ CURL_TRC_CF(data, cf, "req: update info");
+ cf_msh3_active(cf, data);
+ break;
+ default:
+ break;
+ }
+
+ CF_DATA_RESTORE(cf, save);
+ return result;
+}
+
+static CURLcode cf_connect_start(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_msh3_ctx *ctx = cf->ctx;
+ struct ssl_primary_config *conn_config;
+ MSH3_ADDR addr = {0};
+ CURLcode result;
+ bool verify;
+
+ conn_config = Curl_ssl_cf_get_primary_config(cf);
+ if(!conn_config)
+ return CURLE_FAILED_INIT;
+ verify = !!conn_config->verifypeer;
+
+ memcpy(&addr, &ctx->addr.sa_addr, ctx->addr.addrlen);
+ MSH3_SET_PORT(&addr, (uint16_t)cf->conn->remote_port);
+
+ if(verify && (conn_config->CAfile || conn_config->CApath)) {
+ /* TODO: need a way to provide trust anchors to MSH3 */
+#ifdef DEBUGBUILD
+ /* we need this for our test cases to run */
+ CURL_TRC_CF(data, cf, "non-standard CA not supported, "
+ "switching off verifypeer in DEBUG mode");
+ verify = 0;
+#else
+ CURL_TRC_CF(data, cf, "non-standard CA not supported, "
+ "attempting with built-in verification");
+#endif
+ }
+
+ CURL_TRC_CF(data, cf, "connecting to %s:%d (verify=%d)",
+ cf->conn->host.name, (int)cf->conn->remote_port, verify);
+
+ ctx->api = MsH3ApiOpen();
+ if(!ctx->api) {
+ failf(data, "can't create msh3 api");
+ return CURLE_FAILED_INIT;
+ }
+
+ ctx->qconn = MsH3ConnectionOpen(ctx->api,
+ &msh3_conn_if,
+ cf,
+ cf->conn->host.name,
+ &addr,
+ !verify);
+ if(!ctx->qconn) {
+ failf(data, "can't create msh3 connection");
+ if(ctx->api) {
+ MsH3ApiClose(ctx->api);
+ ctx->api = NULL;
+ }
+ return CURLE_FAILED_INIT;
+ }
+
+ result = h3_data_setup(cf, data);
+ if(result)
+ return result;
+
+ return CURLE_OK;
+}
+
+static CURLcode cf_msh3_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool blocking, bool *done)
+{
+ struct cf_msh3_ctx *ctx = cf->ctx;
+ struct cf_call_data save;
+ CURLcode result = CURLE_OK;
+
+ (void)blocking;
+ if(cf->connected) {
+ *done = TRUE;
+ return CURLE_OK;
+ }
+
+ CF_DATA_SAVE(save, cf, data);
+
+ if(ctx->sock[SP_LOCAL] == CURL_SOCKET_BAD) {
+ if(Curl_socketpair(AF_UNIX, SOCK_STREAM, 0, &ctx->sock[0]) < 0) {
+ ctx->sock[SP_LOCAL] = CURL_SOCKET_BAD;
+ ctx->sock[SP_REMOTE] = CURL_SOCKET_BAD;
+ return CURLE_COULDNT_CONNECT;
+ }
+ }
+
+ *done = FALSE;
+ if(!ctx->qconn) {
+ ctx->connect_started = Curl_now();
+ result = cf_connect_start(cf, data);
+ if(result)
+ goto out;
+ }
+
+ if(ctx->handshake_complete) {
+ ctx->handshake_at = Curl_now();
+ if(ctx->handshake_succeeded) {
+ CURL_TRC_CF(data, cf, "handshake succeeded");
+ cf->conn->bits.multiplex = TRUE; /* at least potentially multiplexed */
+ cf->conn->httpversion = 30;
+ cf->conn->bundle->multiuse = BUNDLE_MULTIPLEX;
+ cf->connected = TRUE;
+ cf->conn->alpn = CURL_HTTP_VERSION_3;
+ *done = TRUE;
+ connkeep(cf->conn, "HTTP/3 default");
+ Curl_pgrsTime(data, TIMER_APPCONNECT);
+ }
+ else {
+ failf(data, "failed to connect, handshake failed");
+ result = CURLE_COULDNT_CONNECT;
+ }
+ }
+
+out:
+ CF_DATA_RESTORE(cf, save);
+ return result;
+}
+
+static void cf_msh3_close(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct cf_msh3_ctx *ctx = cf->ctx;
+ struct cf_call_data save;
+
+ (void)data;
+ CF_DATA_SAVE(save, cf, data);
+
+ if(ctx) {
+ CURL_TRC_CF(data, cf, "destroying");
+ if(ctx->qconn) {
+ MsH3ConnectionClose(ctx->qconn);
+ ctx->qconn = NULL;
+ }
+ if(ctx->api) {
+ MsH3ApiClose(ctx->api);
+ ctx->api = NULL;
+ }
+
+ if(ctx->active) {
+ /* We share our socket at cf->conn->sock[cf->sockindex] when active.
+ * If it is no longer there, someone has stolen (and hopefully
+ * closed it) and we just forget about it.
+ */
+ ctx->active = FALSE;
+ if(ctx->sock[SP_LOCAL] == cf->conn->sock[cf->sockindex]) {
+ CURL_TRC_CF(data, cf, "cf_msh3_close(%d) active",
+ (int)ctx->sock[SP_LOCAL]);
+ cf->conn->sock[cf->sockindex] = CURL_SOCKET_BAD;
+ }
+ else {
+ CURL_TRC_CF(data, cf, "cf_socket_close(%d) no longer at "
+ "conn->sock[], discarding", (int)ctx->sock[SP_LOCAL]);
+ ctx->sock[SP_LOCAL] = CURL_SOCKET_BAD;
+ }
+ if(cf->sockindex == FIRSTSOCKET)
+ cf->conn->remote_addr = NULL;
+ }
+ if(ctx->sock[SP_LOCAL] != CURL_SOCKET_BAD) {
+ sclose(ctx->sock[SP_LOCAL]);
+ }
+ if(ctx->sock[SP_REMOTE] != CURL_SOCKET_BAD) {
+ sclose(ctx->sock[SP_REMOTE]);
+ }
+ ctx->sock[SP_LOCAL] = CURL_SOCKET_BAD;
+ ctx->sock[SP_REMOTE] = CURL_SOCKET_BAD;
+ }
+ CF_DATA_RESTORE(cf, save);
+}
+
+static void cf_msh3_destroy(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct cf_call_data save;
+
+ CF_DATA_SAVE(save, cf, data);
+ cf_msh3_close(cf, data);
+ free(cf->ctx);
+ cf->ctx = NULL;
+ /* no CF_DATA_RESTORE(cf, save); its gone */
+
+}
+
+static CURLcode cf_msh3_query(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int query, int *pres1, void *pres2)
+{
+ struct cf_msh3_ctx *ctx = cf->ctx;
+
+ switch(query) {
+ case CF_QUERY_MAX_CONCURRENT: {
+ /* TODO: we do not have access to this so far, fake it */
+ (void)ctx;
+ *pres1 = 100;
+ return CURLE_OK;
+ }
+ case CF_QUERY_TIMER_CONNECT: {
+ struct curltime *when = pres2;
+ /* we do not know when the first byte arrived */
+ if(cf->connected)
+ *when = ctx->handshake_at;
+ return CURLE_OK;
+ }
+ case CF_QUERY_TIMER_APPCONNECT: {
+ struct curltime *when = pres2;
+ if(cf->connected)
+ *when = ctx->handshake_at;
+ return CURLE_OK;
+ }
+ default:
+ break;
+ }
+ return cf->next?
+ cf->next->cft->query(cf->next, data, query, pres1, pres2) :
+ CURLE_UNKNOWN_OPTION;
+}
+
+static bool cf_msh3_conn_is_alive(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool *input_pending)
+{
+ struct cf_msh3_ctx *ctx = cf->ctx;
+
+ (void)data;
+ *input_pending = FALSE;
+ return ctx && ctx->sock[SP_LOCAL] != CURL_SOCKET_BAD && ctx->qconn &&
+ ctx->connected;
+}
+
+struct Curl_cftype Curl_cft_http3 = {
+ "HTTP/3",
+ CF_TYPE_IP_CONNECT | CF_TYPE_SSL | CF_TYPE_MULTIPLEX,
+ 0,
+ cf_msh3_destroy,
+ cf_msh3_connect,
+ cf_msh3_close,
+ Curl_cf_def_get_host,
+ cf_msh3_adjust_pollset,
+ cf_msh3_data_pending,
+ cf_msh3_send,
+ cf_msh3_recv,
+ cf_msh3_data_event,
+ cf_msh3_conn_is_alive,
+ Curl_cf_def_conn_keep_alive,
+ cf_msh3_query,
+};
+
+CURLcode Curl_cf_msh3_create(struct Curl_cfilter **pcf,
+ struct Curl_easy *data,
+ struct connectdata *conn,
+ const struct Curl_addrinfo *ai)
+{
+ struct cf_msh3_ctx *ctx = NULL;
+ struct Curl_cfilter *cf = NULL;
+ CURLcode result;
+
+ (void)data;
+ (void)conn;
+ (void)ai; /* TODO: msh3 resolves itself? */
+ ctx = calloc(1, sizeof(*ctx));
+ if(!ctx) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
+ }
+ Curl_sock_assign_addr(&ctx->addr, ai, TRNSPRT_QUIC);
+ ctx->sock[SP_LOCAL] = CURL_SOCKET_BAD;
+ ctx->sock[SP_REMOTE] = CURL_SOCKET_BAD;
+
+ result = Curl_cf_create(&cf, &Curl_cft_http3, ctx);
+
+out:
+ *pcf = (!result)? cf : NULL;
+ if(result) {
+ Curl_safefree(cf);
+ Curl_safefree(ctx);
+ }
+
+ return result;
+}
+
+bool Curl_conn_is_msh3(const struct Curl_easy *data,
+ const struct connectdata *conn,
+ int sockindex)
+{
+ struct Curl_cfilter *cf = conn? conn->cfilter[sockindex] : NULL;
+
+ (void)data;
+ for(; cf; cf = cf->next) {
+ if(cf->cft == &Curl_cft_http3)
+ return TRUE;
+ if(cf->cft->flags & CF_TYPE_IP_CONNECT)
+ return FALSE;
+ }
+ return FALSE;
+}
+
+#endif /* USE_MSH3 */
diff --git a/lib/vquic/curl_msh3.h b/lib/vquic/curl_msh3.h
new file mode 100644
index 000000000..33931f59b
--- /dev/null
+++ b/lib/vquic/curl_msh3.h
@@ -0,0 +1,46 @@
+#ifndef HEADER_CURL_VQUIC_CURL_MSH3_H
+#define HEADER_CURL_VQUIC_CURL_MSH3_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+
+#ifdef USE_MSH3
+
+#include <msh3.h>
+
+void Curl_msh3_ver(char *p, size_t len);
+
+CURLcode Curl_cf_msh3_create(struct Curl_cfilter **pcf,
+ struct Curl_easy *data,
+ struct connectdata *conn,
+ const struct Curl_addrinfo *ai);
+
+bool Curl_conn_is_msh3(const struct Curl_easy *data,
+ const struct connectdata *conn,
+ int sockindex);
+
+#endif /* USE_MSQUIC */
+
+#endif /* HEADER_CURL_VQUIC_CURL_MSH3_H */
diff --git a/lib/vquic/curl_ngtcp2.c b/lib/vquic/curl_ngtcp2.c
new file mode 100644
index 000000000..f09b10bef
--- /dev/null
+++ b/lib/vquic/curl_ngtcp2.c
@@ -0,0 +1,2835 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+
+#if defined(USE_NGTCP2) && defined(USE_NGHTTP3)
+#include <ngtcp2/ngtcp2.h>
+#include <nghttp3/nghttp3.h>
+
+#ifdef USE_OPENSSL
+#include <openssl/err.h>
+#if defined(OPENSSL_IS_BORINGSSL) || defined(OPENSSL_IS_AWSLC)
+#include <ngtcp2/ngtcp2_crypto_boringssl.h>
+#else
+#include <ngtcp2/ngtcp2_crypto_quictls.h>
+#endif
+#include "vtls/openssl.h"
+#elif defined(USE_GNUTLS)
+#include <ngtcp2/ngtcp2_crypto_gnutls.h>
+#include "vtls/gtls.h"
+#elif defined(USE_WOLFSSL)
+#include <ngtcp2/ngtcp2_crypto_wolfssl.h>
+#include "vtls/wolfssl.h"
+#endif
+
+#include "urldata.h"
+#include "sendf.h"
+#include "strdup.h"
+#include "rand.h"
+#include "multiif.h"
+#include "strcase.h"
+#include "cfilters.h"
+#include "cf-socket.h"
+#include "connect.h"
+#include "progress.h"
+#include "strerror.h"
+#include "dynbuf.h"
+#include "http1.h"
+#include "select.h"
+#include "inet_pton.h"
+#include "vquic.h"
+#include "vquic_int.h"
+#include "vtls/keylog.h"
+#include "vtls/vtls.h"
+#include "curl_ngtcp2.h"
+
+#include "warnless.h"
+
+/* The last 3 #include files should be in this order */
+#include "curl_printf.h"
+#include "curl_memory.h"
+#include "memdebug.h"
+
+
+#define H3_ALPN_H3_29 "\x5h3-29"
+#define H3_ALPN_H3 "\x2h3"
+
+#define QUIC_MAX_STREAMS (256*1024)
+#define QUIC_MAX_DATA (1*1024*1024)
+#define QUIC_HANDSHAKE_TIMEOUT (10*NGTCP2_SECONDS)
+
+/* A stream window is the maximum amount we need to buffer for
+ * each active transfer. We use HTTP/3 flow control and only ACK
+ * when we take things out of the buffer.
+ * Chunk size is large enough to take a full DATA frame */
+#define H3_STREAM_WINDOW_SIZE (128 * 1024)
+#define H3_STREAM_CHUNK_SIZE (16 * 1024)
+/* The pool keeps spares around and half of a full stream windows
+ * seems good. More does not seem to improve performance.
+ * The benefit of the pool is that stream buffer to not keep
+ * spares. So memory consumption goes down when streams run empty,
+ * have a large upload done, etc. */
+#define H3_STREAM_POOL_SPARES \
+ (H3_STREAM_WINDOW_SIZE / H3_STREAM_CHUNK_SIZE ) / 2
+/* Receive and Send max number of chunks just follows from the
+ * chunk size and window size */
+#define H3_STREAM_RECV_CHUNKS \
+ (H3_STREAM_WINDOW_SIZE / H3_STREAM_CHUNK_SIZE)
+#define H3_STREAM_SEND_CHUNKS \
+ (H3_STREAM_WINDOW_SIZE / H3_STREAM_CHUNK_SIZE)
+
+
+#ifdef USE_OPENSSL
+#define QUIC_CIPHERS \
+ "TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_" \
+ "POLY1305_SHA256:TLS_AES_128_CCM_SHA256"
+#define QUIC_GROUPS "P-256:X25519:P-384:P-521"
+#elif defined(USE_GNUTLS)
+#define QUIC_PRIORITY \
+ "NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-128-GCM:+AES-256-GCM:" \
+ "+CHACHA20-POLY1305:+AES-128-CCM:-GROUP-ALL:+GROUP-SECP256R1:" \
+ "+GROUP-X25519:+GROUP-SECP384R1:+GROUP-SECP521R1:" \
+ "%DISABLE_TLS13_COMPAT_MODE"
+#elif defined(USE_WOLFSSL)
+#define QUIC_CIPHERS \
+ "TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_" \
+ "POLY1305_SHA256:TLS_AES_128_CCM_SHA256"
+#define QUIC_GROUPS "P-256:P-384:P-521"
+#endif
+
+
+/*
+ * Store ngtcp2 version info in this buffer.
+ */
+void Curl_ngtcp2_ver(char *p, size_t len)
+{
+ const ngtcp2_info *ng2 = ngtcp2_version(0);
+ const nghttp3_info *ht3 = nghttp3_version(0);
+ (void)msnprintf(p, len, "ngtcp2/%s nghttp3/%s",
+ ng2->version_str, ht3->version_str);
+}
+
+struct cf_ngtcp2_ctx {
+ struct cf_quic_ctx q;
+ struct ssl_peer peer;
+ ngtcp2_path connected_path;
+ ngtcp2_conn *qconn;
+ ngtcp2_cid dcid;
+ ngtcp2_cid scid;
+ uint32_t version;
+ ngtcp2_settings settings;
+ ngtcp2_transport_params transport_params;
+ ngtcp2_ccerr last_error;
+ ngtcp2_crypto_conn_ref conn_ref;
+#ifdef USE_OPENSSL
+ SSL_CTX *sslctx;
+ SSL *ssl;
+#elif defined(USE_GNUTLS)
+ struct gtls_instance *gtls;
+#elif defined(USE_WOLFSSL)
+ WOLFSSL_CTX *sslctx;
+ WOLFSSL *ssl;
+#endif
+ struct cf_call_data call_data;
+ nghttp3_conn *h3conn;
+ nghttp3_settings h3settings;
+ struct curltime started_at; /* time the current attempt started */
+ struct curltime handshake_at; /* time connect handshake finished */
+ struct curltime first_byte_at; /* when first byte was recvd */
+ struct curltime reconnect_at; /* time the next attempt should start */
+ struct bufc_pool stream_bufcp; /* chunk pool for streams */
+ size_t max_stream_window; /* max flow window for one stream */
+ uint64_t max_idle_ms; /* max idle time for QUIC connection */
+ int qlogfd;
+ BIT(got_first_byte); /* if first byte was received */
+#ifdef USE_OPENSSL
+ BIT(x509_store_setup); /* if x509 store has been set up */
+#endif
+};
+
+/* How to access `call_data` from a cf_ngtcp2 filter */
+#undef CF_CTX_CALL_DATA
+#define CF_CTX_CALL_DATA(cf) \
+ ((struct cf_ngtcp2_ctx *)(cf)->ctx)->call_data
+
+/**
+ * All about the H3 internals of a stream
+ */
+struct h3_stream_ctx {
+ int64_t id; /* HTTP/3 protocol identifier */
+ struct bufq sendbuf; /* h3 request body */
+ struct bufq recvbuf; /* h3 response body */
+ struct h1_req_parser h1; /* h1 request parsing */
+ size_t sendbuf_len_in_flight; /* sendbuf amount "in flight" */
+ size_t upload_blocked_len; /* the amount written last and EGAINed */
+ size_t recv_buf_nonflow; /* buffered bytes, not counting for flow control */
+ uint64_t error3; /* HTTP/3 stream error code */
+ curl_off_t upload_left; /* number of request bytes left to upload */
+ int status_code; /* HTTP status code */
+ bool resp_hds_complete; /* we have a complete, final response */
+ bool closed; /* TRUE on stream close */
+ bool reset; /* TRUE on stream reset */
+ bool send_closed; /* stream is local closed */
+ BIT(quic_flow_blocked); /* stream is blocked by QUIC flow control */
+};
+
+#define H3_STREAM_CTX(d) ((struct h3_stream_ctx *)(((d) && (d)->req.p.http)? \
+ ((struct HTTP *)(d)->req.p.http)->h3_ctx \
+ : NULL))
+#define H3_STREAM_LCTX(d) ((struct HTTP *)(d)->req.p.http)->h3_ctx
+#define H3_STREAM_ID(d) (H3_STREAM_CTX(d)? \
+ H3_STREAM_CTX(d)->id : -2)
+
+static CURLcode h3_data_setup(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ struct h3_stream_ctx *stream = H3_STREAM_CTX(data);
+
+ if(!data || !data->req.p.http) {
+ failf(data, "initialization failure, transfer not http initialized");
+ return CURLE_FAILED_INIT;
+ }
+
+ if(stream)
+ return CURLE_OK;
+
+ stream = calloc(1, sizeof(*stream));
+ if(!stream)
+ return CURLE_OUT_OF_MEMORY;
+
+ stream->id = -1;
+ /* on send, we control how much we put into the buffer */
+ Curl_bufq_initp(&stream->sendbuf, &ctx->stream_bufcp,
+ H3_STREAM_SEND_CHUNKS, BUFQ_OPT_NONE);
+ stream->sendbuf_len_in_flight = 0;
+ /* on recv, we need a flexible buffer limit since we also write
+ * headers to it that are not counted against the nghttp3 flow limits. */
+ Curl_bufq_initp(&stream->recvbuf, &ctx->stream_bufcp,
+ H3_STREAM_RECV_CHUNKS, BUFQ_OPT_SOFT_LIMIT);
+ stream->recv_buf_nonflow = 0;
+ Curl_h1_req_parse_init(&stream->h1, H1_PARSE_DEFAULT_MAX_LINE_LEN);
+
+ H3_STREAM_LCTX(data) = stream;
+ return CURLE_OK;
+}
+
+static void h3_data_done(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ struct h3_stream_ctx *stream = H3_STREAM_CTX(data);
+
+ (void)cf;
+ if(stream) {
+ CURL_TRC_CF(data, cf, "[%"PRId64"] easy handle is done", stream->id);
+ if(ctx->h3conn && !stream->closed) {
+ nghttp3_conn_shutdown_stream_read(ctx->h3conn, stream->id);
+ nghttp3_conn_close_stream(ctx->h3conn, stream->id,
+ NGHTTP3_H3_REQUEST_CANCELLED);
+ nghttp3_conn_set_stream_user_data(ctx->h3conn, stream->id, NULL);
+ ngtcp2_conn_set_stream_user_data(ctx->qconn, stream->id, NULL);
+ stream->closed = TRUE;
+ }
+
+ Curl_bufq_free(&stream->sendbuf);
+ Curl_bufq_free(&stream->recvbuf);
+ Curl_h1_req_parse_free(&stream->h1);
+ free(stream);
+ H3_STREAM_LCTX(data) = NULL;
+ }
+}
+
+static struct Curl_easy *get_stream_easy(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int64_t stream_id)
+{
+ struct Curl_easy *sdata;
+
+ (void)cf;
+ if(H3_STREAM_ID(data) == stream_id) {
+ return data;
+ }
+ else {
+ DEBUGASSERT(data->multi);
+ for(sdata = data->multi->easyp; sdata; sdata = sdata->next) {
+ if((sdata->conn == data->conn) && H3_STREAM_ID(sdata) == stream_id) {
+ return sdata;
+ }
+ }
+ }
+ return NULL;
+}
+
+static void h3_drain_stream(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct h3_stream_ctx *stream = H3_STREAM_CTX(data);
+ unsigned char bits;
+
+ (void)cf;
+ bits = CURL_CSELECT_IN;
+ if(stream && stream->upload_left && !stream->send_closed)
+ bits |= CURL_CSELECT_OUT;
+ if(data->state.dselect_bits != bits) {
+ data->state.dselect_bits = bits;
+ Curl_expire(data, 0, EXPIRE_RUN_NOW);
+ }
+}
+
+/* ngtcp2 default congestion controller does not perform pacing. Limit
+ the maximum packet burst to MAX_PKT_BURST packets. */
+#define MAX_PKT_BURST 10
+
+struct pkt_io_ctx {
+ struct Curl_cfilter *cf;
+ struct Curl_easy *data;
+ ngtcp2_tstamp ts;
+ size_t pkt_count;
+ ngtcp2_path_storage ps;
+};
+
+static void pktx_update_time(struct pkt_io_ctx *pktx,
+ struct Curl_cfilter *cf)
+{
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+
+ vquic_ctx_update_time(&ctx->q);
+ pktx->ts = ctx->q.last_op.tv_sec * NGTCP2_SECONDS +
+ ctx->q.last_op.tv_usec * NGTCP2_MICROSECONDS;
+}
+
+static void pktx_init(struct pkt_io_ctx *pktx,
+ struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ pktx->cf = cf;
+ pktx->data = data;
+ pktx->pkt_count = 0;
+ ngtcp2_path_storage_zero(&pktx->ps);
+ pktx_update_time(pktx, cf);
+}
+
+static CURLcode cf_progress_ingress(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct pkt_io_ctx *pktx);
+static CURLcode cf_progress_egress(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct pkt_io_ctx *pktx);
+static int cb_h3_acked_req_body(nghttp3_conn *conn, int64_t stream_id,
+ uint64_t datalen, void *user_data,
+ void *stream_user_data);
+
+static ngtcp2_conn *get_conn(ngtcp2_crypto_conn_ref *conn_ref)
+{
+ struct Curl_cfilter *cf = conn_ref->user_data;
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ return ctx->qconn;
+}
+
+#ifdef DEBUG_NGTCP2
+static void quic_printf(void *user_data, const char *fmt, ...)
+{
+ struct Curl_cfilter *cf = user_data;
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+
+ (void)ctx; /* TODO: need an easy handle to infof() message */
+ va_list ap;
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+ fprintf(stderr, "\n");
+}
+#endif
+
+static void qlog_callback(void *user_data, uint32_t flags,
+ const void *data, size_t datalen)
+{
+ struct Curl_cfilter *cf = user_data;
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ (void)flags;
+ if(ctx->qlogfd != -1) {
+ ssize_t rc = write(ctx->qlogfd, data, datalen);
+ if(rc == -1) {
+ /* on write error, stop further write attempts */
+ close(ctx->qlogfd);
+ ctx->qlogfd = -1;
+ }
+ }
+
+}
+
+static void quic_settings(struct cf_ngtcp2_ctx *ctx,
+ struct Curl_easy *data,
+ struct pkt_io_ctx *pktx)
+{
+ ngtcp2_settings *s = &ctx->settings;
+ ngtcp2_transport_params *t = &ctx->transport_params;
+
+ ngtcp2_settings_default(s);
+ ngtcp2_transport_params_default(t);
+#ifdef DEBUG_NGTCP2
+ s->log_printf = quic_printf;
+#else
+ s->log_printf = NULL;
+#endif
+
+ (void)data;
+ s->initial_ts = pktx->ts;
+ s->handshake_timeout = QUIC_HANDSHAKE_TIMEOUT;
+ s->max_window = 100 * ctx->max_stream_window;
+ s->max_stream_window = ctx->max_stream_window;
+
+ t->initial_max_data = 10 * ctx->max_stream_window;
+ t->initial_max_stream_data_bidi_local = ctx->max_stream_window;
+ t->initial_max_stream_data_bidi_remote = ctx->max_stream_window;
+ t->initial_max_stream_data_uni = ctx->max_stream_window;
+ t->initial_max_streams_bidi = QUIC_MAX_STREAMS;
+ t->initial_max_streams_uni = QUIC_MAX_STREAMS;
+ t->max_idle_timeout = (ctx->max_idle_ms * NGTCP2_MILLISECONDS);
+ if(ctx->qlogfd != -1) {
+ s->qlog_write = qlog_callback;
+ }
+}
+
+#ifdef USE_OPENSSL
+static void keylog_callback(const SSL *ssl, const char *line)
+{
+ (void)ssl;
+ Curl_tls_keylog_write_line(line);
+}
+#elif defined(USE_GNUTLS)
+static int keylog_callback(gnutls_session_t session, const char *label,
+ const gnutls_datum_t *secret)
+{
+ gnutls_datum_t crandom;
+ gnutls_datum_t srandom;
+
+ gnutls_session_get_random(session, &crandom, &srandom);
+ if(crandom.size != 32) {
+ return -1;
+ }
+
+ Curl_tls_keylog_write(label, crandom.data, secret->data, secret->size);
+ return 0;
+}
+#elif defined(USE_WOLFSSL)
+#if defined(HAVE_SECRET_CALLBACK)
+static void keylog_callback(const WOLFSSL *ssl, const char *line)
+{
+ (void)ssl;
+ Curl_tls_keylog_write_line(line);
+}
+#endif
+#endif
+
+static int init_ngh3_conn(struct Curl_cfilter *cf);
+
+#ifdef USE_OPENSSL
+static CURLcode quic_ssl_ctx(SSL_CTX **pssl_ctx,
+ struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ struct ssl_primary_config *conn_config;
+ CURLcode result = CURLE_FAILED_INIT;
+
+ SSL_CTX *ssl_ctx = SSL_CTX_new(TLS_method());
+ if(!ssl_ctx) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
+ }
+ conn_config = Curl_ssl_cf_get_primary_config(cf);
+ if(!conn_config) {
+ result = CURLE_FAILED_INIT;
+ goto out;
+ }
+
+#if defined(OPENSSL_IS_BORINGSSL) || defined(OPENSSL_IS_AWSLC)
+ if(ngtcp2_crypto_boringssl_configure_client_context(ssl_ctx) != 0) {
+ failf(data, "ngtcp2_crypto_boringssl_configure_client_context failed");
+ goto out;
+ }
+#else
+ if(ngtcp2_crypto_quictls_configure_client_context(ssl_ctx) != 0) {
+ failf(data, "ngtcp2_crypto_quictls_configure_client_context failed");
+ goto out;
+ }
+#endif
+
+ SSL_CTX_set_default_verify_paths(ssl_ctx);
+
+ {
+ const char *curves = conn_config->curves ?
+ conn_config->curves : QUIC_GROUPS;
+ if(!SSL_CTX_set1_curves_list(ssl_ctx, curves)) {
+ failf(data, "failed setting curves list for QUIC: '%s'", curves);
+ return CURLE_SSL_CIPHER;
+ }
+ }
+
+#ifndef OPENSSL_IS_BORINGSSL
+ {
+ const char *ciphers13 = conn_config->cipher_list13 ?
+ conn_config->cipher_list13 : QUIC_CIPHERS;
+ if(SSL_CTX_set_ciphersuites(ssl_ctx, ciphers13) != 1) {
+ failf(data, "failed setting QUIC cipher suite: %s", ciphers13);
+ return CURLE_SSL_CIPHER;
+ }
+ infof(data, "QUIC cipher selection: %s", ciphers13);
+ }
+#endif
+
+ /* Open the file if a TLS or QUIC backend has not done this before. */
+ Curl_tls_keylog_open();
+ if(Curl_tls_keylog_enabled()) {
+ SSL_CTX_set_keylog_callback(ssl_ctx, keylog_callback);
+ }
+
+ /* OpenSSL always tries to verify the peer, this only says whether it should
+ * fail to connect if the verification fails, or if it should continue
+ * anyway. In the latter case the result of the verification is checked with
+ * SSL_get_verify_result() below. */
+ SSL_CTX_set_verify(ssl_ctx, conn_config->verifypeer ?
+ SSL_VERIFY_PEER : SSL_VERIFY_NONE, NULL);
+
+ /* give application a chance to interfere with SSL set up. */
+ if(data->set.ssl.fsslctx) {
+ /* When a user callback is installed to modify the SSL_CTX,
+ * we need to do the full initialization before calling it.
+ * See: #11800 */
+ if(!ctx->x509_store_setup) {
+ result = Curl_ssl_setup_x509_store(cf, data, ssl_ctx);
+ if(result)
+ goto out;
+ ctx->x509_store_setup = TRUE;
+ }
+ Curl_set_in_callback(data, true);
+ result = (*data->set.ssl.fsslctx)(data, ssl_ctx,
+ data->set.ssl.fsslctxp);
+ Curl_set_in_callback(data, false);
+ if(result) {
+ failf(data, "error signaled by ssl ctx callback");
+ goto out;
+ }
+ }
+ result = CURLE_OK;
+
+out:
+ *pssl_ctx = result? NULL : ssl_ctx;
+ if(result && ssl_ctx)
+ SSL_CTX_free(ssl_ctx);
+ return result;
+}
+
+static CURLcode quic_set_client_cert(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ SSL_CTX *ssl_ctx = ctx->sslctx;
+ const struct ssl_config_data *ssl_config;
+
+ ssl_config = Curl_ssl_cf_get_config(cf, data);
+ DEBUGASSERT(ssl_config);
+
+ if(ssl_config->primary.clientcert || ssl_config->primary.cert_blob
+ || ssl_config->cert_type) {
+ return Curl_ossl_set_client_cert(
+ data, ssl_ctx, ssl_config->primary.clientcert,
+ ssl_config->primary.cert_blob, ssl_config->cert_type,
+ ssl_config->key, ssl_config->key_blob,
+ ssl_config->key_type, ssl_config->key_passwd);
+ }
+
+ return CURLE_OK;
+}
+
+/** SSL callbacks ***/
+
+static CURLcode quic_init_ssl(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ const uint8_t *alpn = NULL;
+ size_t alpnlen = 0;
+
+ DEBUGASSERT(!ctx->ssl);
+ ctx->ssl = SSL_new(ctx->sslctx);
+
+ SSL_set_app_data(ctx->ssl, &ctx->conn_ref);
+ SSL_set_connect_state(ctx->ssl);
+ SSL_set_quic_use_legacy_codepoint(ctx->ssl, 0);
+
+ alpn = (const uint8_t *)H3_ALPN_H3_29 H3_ALPN_H3;
+ alpnlen = sizeof(H3_ALPN_H3_29) - 1 + sizeof(H3_ALPN_H3) - 1;
+ if(alpn)
+ SSL_set_alpn_protos(ctx->ssl, alpn, (int)alpnlen);
+
+ /* set SNI */
+ if(ctx->peer.sni) {
+ if(!SSL_set_tlsext_host_name(ctx->ssl, ctx->peer.sni)) {
+ failf(data, "Failed set SNI");
+ SSL_free(ctx->ssl);
+ ctx->ssl = NULL;
+ return CURLE_QUIC_CONNECT_ERROR;
+ }
+ }
+ return CURLE_OK;
+}
+#elif defined(USE_GNUTLS)
+static CURLcode quic_init_ssl(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ struct ssl_primary_config *conn_config;
+ CURLcode result;
+ gnutls_datum_t alpn[2];
+ /* this will need some attention when HTTPS proxy over QUIC get fixed */
+ long * const pverifyresult = &data->set.ssl.certverifyresult;
+ int rc;
+
+ conn_config = Curl_ssl_cf_get_primary_config(cf);
+ if(!conn_config)
+ return CURLE_FAILED_INIT;
+
+ DEBUGASSERT(ctx->gtls == NULL);
+ ctx->gtls = calloc(1, sizeof(*(ctx->gtls)));
+ if(!ctx->gtls)
+ return CURLE_OUT_OF_MEMORY;
+
+ result = gtls_client_init(data, conn_config, &data->set.ssl,
+ &ctx->peer, ctx->gtls, pverifyresult);
+ if(result)
+ return result;
+
+ gnutls_session_set_ptr(ctx->gtls->session, &ctx->conn_ref);
+
+ if(ngtcp2_crypto_gnutls_configure_client_session(ctx->gtls->session) != 0) {
+ CURL_TRC_CF(data, cf,
+ "ngtcp2_crypto_gnutls_configure_client_session failed\n");
+ return CURLE_QUIC_CONNECT_ERROR;
+ }
+
+ rc = gnutls_priority_set_direct(ctx->gtls->session, QUIC_PRIORITY, NULL);
+ if(rc < 0) {
+ CURL_TRC_CF(data, cf, "gnutls_priority_set_direct failed: %s\n",
+ gnutls_strerror(rc));
+ return CURLE_QUIC_CONNECT_ERROR;
+ }
+
+ /* Open the file if a TLS or QUIC backend has not done this before. */
+ Curl_tls_keylog_open();
+ if(Curl_tls_keylog_enabled()) {
+ gnutls_session_set_keylog_function(ctx->gtls->session, keylog_callback);
+ }
+
+ /* strip the first byte (the length) from NGHTTP3_ALPN_H3 */
+ alpn[0].data = (unsigned char *)H3_ALPN_H3_29 + 1;
+ alpn[0].size = sizeof(H3_ALPN_H3_29) - 2;
+ alpn[1].data = (unsigned char *)H3_ALPN_H3 + 1;
+ alpn[1].size = sizeof(H3_ALPN_H3) - 2;
+
+ gnutls_alpn_set_protocols(ctx->gtls->session,
+ alpn, 2, GNUTLS_ALPN_MANDATORY);
+ return CURLE_OK;
+}
+#elif defined(USE_WOLFSSL)
+
+static CURLcode quic_ssl_ctx(WOLFSSL_CTX **pssl_ctx,
+ struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ CURLcode result = CURLE_FAILED_INIT;
+ struct ssl_primary_config *conn_config;
+ WOLFSSL_CTX *ssl_ctx = NULL;
+
+ conn_config = Curl_ssl_cf_get_primary_config(cf);
+ if(!conn_config) {
+ result = CURLE_FAILED_INIT;
+ goto out;
+ }
+
+ ssl_ctx = wolfSSL_CTX_new(wolfTLSv1_3_client_method());
+ if(!ssl_ctx) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
+ }
+
+ if(ngtcp2_crypto_wolfssl_configure_client_context(ssl_ctx) != 0) {
+ failf(data, "ngtcp2_crypto_wolfssl_configure_client_context failed");
+ result = CURLE_FAILED_INIT;
+ goto out;
+ }
+
+ wolfSSL_CTX_set_default_verify_paths(ssl_ctx);
+
+ if(wolfSSL_CTX_set_cipher_list(ssl_ctx, conn_config->cipher_list13 ?
+ conn_config->cipher_list13 :
+ QUIC_CIPHERS) != 1) {
+ char error_buffer[256];
+ ERR_error_string_n(ERR_get_error(), error_buffer, sizeof(error_buffer));
+ failf(data, "wolfSSL failed to set ciphers: %s", error_buffer);
+ goto out;
+ }
+
+ if(wolfSSL_CTX_set1_groups_list(ssl_ctx, conn_config->curves ?
+ conn_config->curves :
+ (char *)QUIC_GROUPS) != 1) {
+ failf(data, "wolfSSL failed to set curves");
+ goto out;
+ }
+
+ /* Open the file if a TLS or QUIC backend has not done this before. */
+ Curl_tls_keylog_open();
+ if(Curl_tls_keylog_enabled()) {
+#if defined(HAVE_SECRET_CALLBACK)
+ wolfSSL_CTX_set_keylog_callback(ssl_ctx, keylog_callback);
+#else
+ failf(data, "wolfSSL was built without keylog callback");
+ goto out;
+#endif
+ }
+
+ if(conn_config->verifypeer) {
+ const char * const ssl_cafile = conn_config->CAfile;
+ const char * const ssl_capath = conn_config->CApath;
+
+ wolfSSL_CTX_set_verify(ssl_ctx, SSL_VERIFY_PEER, NULL);
+ if(ssl_cafile || ssl_capath) {
+ /* tell wolfSSL where to find CA certificates that are used to verify
+ the server's certificate. */
+ int rc =
+ wolfSSL_CTX_load_verify_locations_ex(ssl_ctx, ssl_cafile, ssl_capath,
+ WOLFSSL_LOAD_FLAG_IGNORE_ERR);
+ if(SSL_SUCCESS != rc) {
+ /* Fail if we insist on successfully verifying the server. */
+ failf(data, "error setting certificate verify locations:"
+ " CAfile: %s CApath: %s",
+ ssl_cafile ? ssl_cafile : "none",
+ ssl_capath ? ssl_capath : "none");
+ goto out;
+ }
+ infof(data, " CAfile: %s", ssl_cafile ? ssl_cafile : "none");
+ infof(data, " CApath: %s", ssl_capath ? ssl_capath : "none");
+ }
+#ifdef CURL_CA_FALLBACK
+ else {
+ /* verifying the peer without any CA certificates won't work so
+ use wolfssl's built-in default as fallback */
+ wolfSSL_CTX_set_default_verify_paths(ssl_ctx);
+ }
+#endif
+ }
+ else {
+ wolfSSL_CTX_set_verify(ssl_ctx, SSL_VERIFY_NONE, NULL);
+ }
+
+ /* give application a chance to interfere with SSL set up. */
+ if(data->set.ssl.fsslctx) {
+ Curl_set_in_callback(data, true);
+ result = (*data->set.ssl.fsslctx)(data, ssl_ctx,
+ data->set.ssl.fsslctxp);
+ Curl_set_in_callback(data, false);
+ if(result) {
+ failf(data, "error signaled by ssl ctx callback");
+ goto out;
+ }
+ }
+ result = CURLE_OK;
+
+out:
+ *pssl_ctx = result? NULL : ssl_ctx;
+ if(result && ssl_ctx)
+ SSL_CTX_free(ssl_ctx);
+ return result;
+}
+
+/** SSL callbacks ***/
+
+static CURLcode quic_init_ssl(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ const uint8_t *alpn = NULL;
+ size_t alpnlen = 0;
+ /* this will need some attention when HTTPS proxy over QUIC get fixed */
+ const char * const hostname = cf->conn->host.name;
+
+ (void)data;
+ DEBUGASSERT(!ctx->ssl);
+ ctx->ssl = wolfSSL_new(ctx->sslctx);
+
+ wolfSSL_set_app_data(ctx->ssl, &ctx->conn_ref);
+ wolfSSL_set_connect_state(ctx->ssl);
+ wolfSSL_set_quic_use_legacy_codepoint(ctx->ssl, 0);
+
+ alpn = (const uint8_t *)H3_ALPN_H3_29 H3_ALPN_H3;
+ alpnlen = sizeof(H3_ALPN_H3_29) - 1 + sizeof(H3_ALPN_H3) - 1;
+ if(alpn)
+ wolfSSL_set_alpn_protos(ctx->ssl, alpn, (int)alpnlen);
+
+ /* set SNI */
+ wolfSSL_UseSNI(ctx->ssl, WOLFSSL_SNI_HOST_NAME,
+ hostname, (unsigned short)strlen(hostname));
+
+ return CURLE_OK;
+}
+#endif /* defined(USE_WOLFSSL) */
+
+static int cb_handshake_completed(ngtcp2_conn *tconn, void *user_data)
+{
+ (void)user_data;
+ (void)tconn;
+ return 0;
+}
+
+static void report_consumed_data(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ size_t consumed)
+{
+ struct h3_stream_ctx *stream = H3_STREAM_CTX(data);
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+
+ if(!stream)
+ return;
+ /* the HTTP/1.1 response headers are written to the buffer, but
+ * consuming those does not count against flow control. */
+ if(stream->recv_buf_nonflow) {
+ if(consumed >= stream->recv_buf_nonflow) {
+ consumed -= stream->recv_buf_nonflow;
+ stream->recv_buf_nonflow = 0;
+ }
+ else {
+ stream->recv_buf_nonflow -= consumed;
+ consumed = 0;
+ }
+ }
+ if(consumed > 0) {
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] ACK %zu bytes of DATA",
+ stream->id, consumed);
+ ngtcp2_conn_extend_max_stream_offset(ctx->qconn, stream->id,
+ consumed);
+ ngtcp2_conn_extend_max_offset(ctx->qconn, consumed);
+ }
+}
+
+static int cb_recv_stream_data(ngtcp2_conn *tconn, uint32_t flags,
+ int64_t stream_id, uint64_t offset,
+ const uint8_t *buf, size_t buflen,
+ void *user_data, void *stream_user_data)
+{
+ struct Curl_cfilter *cf = user_data;
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ nghttp3_ssize nconsumed;
+ int fin = (flags & NGTCP2_STREAM_DATA_FLAG_FIN) ? 1 : 0;
+ struct Curl_easy *data = stream_user_data;
+ (void)offset;
+ (void)data;
+
+ nconsumed =
+ nghttp3_conn_read_stream(ctx->h3conn, stream_id, buf, buflen, fin);
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] read_stream(len=%zu) -> %zd",
+ stream_id, buflen, nconsumed);
+ if(nconsumed < 0) {
+ if(!data) {
+ struct Curl_easy *cdata = CF_DATA_CURRENT(cf);
+ CURL_TRC_CF(cdata, cf, "[%" PRId64 "] nghttp3 error on stream not "
+ "used by us, ignored", stream_id);
+ return 0;
+ }
+ ngtcp2_ccerr_set_application_error(
+ &ctx->last_error,
+ nghttp3_err_infer_quic_app_error_code((int)nconsumed), NULL, 0);
+ return NGTCP2_ERR_CALLBACK_FAILURE;
+ }
+
+ /* number of bytes inside buflen which consists of framing overhead
+ * including QPACK HEADERS. In other words, it does not consume payload of
+ * DATA frame. */
+ ngtcp2_conn_extend_max_stream_offset(tconn, stream_id, nconsumed);
+ ngtcp2_conn_extend_max_offset(tconn, nconsumed);
+
+ return 0;
+}
+
+static int
+cb_acked_stream_data_offset(ngtcp2_conn *tconn, int64_t stream_id,
+ uint64_t offset, uint64_t datalen, void *user_data,
+ void *stream_user_data)
+{
+ struct Curl_cfilter *cf = user_data;
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ int rv;
+ (void)stream_id;
+ (void)tconn;
+ (void)offset;
+ (void)datalen;
+ (void)stream_user_data;
+
+ rv = nghttp3_conn_add_ack_offset(ctx->h3conn, stream_id, datalen);
+ if(rv && rv != NGHTTP3_ERR_STREAM_NOT_FOUND) {
+ return NGTCP2_ERR_CALLBACK_FAILURE;
+ }
+
+ return 0;
+}
+
+static int cb_stream_close(ngtcp2_conn *tconn, uint32_t flags,
+ int64_t stream3_id, uint64_t app_error_code,
+ void *user_data, void *stream_user_data)
+{
+ struct Curl_cfilter *cf = user_data;
+ struct Curl_easy *data = stream_user_data;
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ int rv;
+
+ (void)tconn;
+ (void)data;
+ /* stream is closed... */
+
+ if(!(flags & NGTCP2_STREAM_CLOSE_FLAG_APP_ERROR_CODE_SET)) {
+ app_error_code = NGHTTP3_H3_NO_ERROR;
+ }
+
+ rv = nghttp3_conn_close_stream(ctx->h3conn, stream3_id,
+ app_error_code);
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] quic close(err=%"
+ PRIu64 ") -> %d", stream3_id, app_error_code, rv);
+ if(rv && rv != NGHTTP3_ERR_STREAM_NOT_FOUND) {
+ ngtcp2_ccerr_set_application_error(
+ &ctx->last_error, nghttp3_err_infer_quic_app_error_code(rv), NULL, 0);
+ return NGTCP2_ERR_CALLBACK_FAILURE;
+ }
+
+ return 0;
+}
+
+static int cb_stream_reset(ngtcp2_conn *tconn, int64_t stream_id,
+ uint64_t final_size, uint64_t app_error_code,
+ void *user_data, void *stream_user_data)
+{
+ struct Curl_cfilter *cf = user_data;
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ struct Curl_easy *data = stream_user_data;
+ int rv;
+ (void)tconn;
+ (void)final_size;
+ (void)app_error_code;
+ (void)data;
+
+ rv = nghttp3_conn_shutdown_stream_read(ctx->h3conn, stream_id);
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] reset -> %d", stream_id, rv);
+ if(rv && rv != NGHTTP3_ERR_STREAM_NOT_FOUND) {
+ return NGTCP2_ERR_CALLBACK_FAILURE;
+ }
+
+ return 0;
+}
+
+static int cb_stream_stop_sending(ngtcp2_conn *tconn, int64_t stream_id,
+ uint64_t app_error_code, void *user_data,
+ void *stream_user_data)
+{
+ struct Curl_cfilter *cf = user_data;
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ int rv;
+ (void)tconn;
+ (void)app_error_code;
+ (void)stream_user_data;
+
+ rv = nghttp3_conn_shutdown_stream_read(ctx->h3conn, stream_id);
+ if(rv && rv != NGHTTP3_ERR_STREAM_NOT_FOUND) {
+ return NGTCP2_ERR_CALLBACK_FAILURE;
+ }
+
+ return 0;
+}
+
+static int cb_extend_max_local_streams_bidi(ngtcp2_conn *tconn,
+ uint64_t max_streams,
+ void *user_data)
+{
+ (void)tconn;
+ (void)max_streams;
+ (void)user_data;
+
+ return 0;
+}
+
+static int cb_extend_max_stream_data(ngtcp2_conn *tconn, int64_t stream_id,
+ uint64_t max_data, void *user_data,
+ void *stream_user_data)
+{
+ struct Curl_cfilter *cf = user_data;
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+ struct Curl_easy *s_data;
+ struct h3_stream_ctx *stream;
+ int rv;
+ (void)tconn;
+ (void)max_data;
+ (void)stream_user_data;
+
+ rv = nghttp3_conn_unblock_stream(ctx->h3conn, stream_id);
+ if(rv && rv != NGHTTP3_ERR_STREAM_NOT_FOUND) {
+ return NGTCP2_ERR_CALLBACK_FAILURE;
+ }
+ s_data = get_stream_easy(cf, data, stream_id);
+ stream = H3_STREAM_CTX(s_data);
+ if(stream && stream->quic_flow_blocked) {
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] unblock quic flow", stream_id);
+ stream->quic_flow_blocked = FALSE;
+ h3_drain_stream(cf, data);
+ }
+ return 0;
+}
+
+static void cb_rand(uint8_t *dest, size_t destlen,
+ const ngtcp2_rand_ctx *rand_ctx)
+{
+ CURLcode result;
+ (void)rand_ctx;
+
+ result = Curl_rand(NULL, dest, destlen);
+ if(result) {
+ /* cb_rand is only used for non-cryptographic context. If Curl_rand
+ failed, just fill 0 and call it *random*. */
+ memset(dest, 0, destlen);
+ }
+}
+
+static int cb_get_new_connection_id(ngtcp2_conn *tconn, ngtcp2_cid *cid,
+ uint8_t *token, size_t cidlen,
+ void *user_data)
+{
+ CURLcode result;
+ (void)tconn;
+ (void)user_data;
+
+ result = Curl_rand(NULL, cid->data, cidlen);
+ if(result)
+ return NGTCP2_ERR_CALLBACK_FAILURE;
+ cid->datalen = cidlen;
+
+ result = Curl_rand(NULL, token, NGTCP2_STATELESS_RESET_TOKENLEN);
+ if(result)
+ return NGTCP2_ERR_CALLBACK_FAILURE;
+
+ return 0;
+}
+
+static int cb_recv_rx_key(ngtcp2_conn *tconn, ngtcp2_encryption_level level,
+ void *user_data)
+{
+ struct Curl_cfilter *cf = user_data;
+ (void)tconn;
+
+ if(level != NGTCP2_ENCRYPTION_LEVEL_1RTT) {
+ return 0;
+ }
+
+ if(init_ngh3_conn(cf) != CURLE_OK) {
+ return NGTCP2_ERR_CALLBACK_FAILURE;
+ }
+
+ return 0;
+}
+
+static ngtcp2_callbacks ng_callbacks = {
+ ngtcp2_crypto_client_initial_cb,
+ NULL, /* recv_client_initial */
+ ngtcp2_crypto_recv_crypto_data_cb,
+ cb_handshake_completed,
+ NULL, /* recv_version_negotiation */
+ ngtcp2_crypto_encrypt_cb,
+ ngtcp2_crypto_decrypt_cb,
+ ngtcp2_crypto_hp_mask_cb,
+ cb_recv_stream_data,
+ cb_acked_stream_data_offset,
+ NULL, /* stream_open */
+ cb_stream_close,
+ NULL, /* recv_stateless_reset */
+ ngtcp2_crypto_recv_retry_cb,
+ cb_extend_max_local_streams_bidi,
+ NULL, /* extend_max_local_streams_uni */
+ cb_rand,
+ cb_get_new_connection_id,
+ NULL, /* remove_connection_id */
+ ngtcp2_crypto_update_key_cb, /* update_key */
+ NULL, /* path_validation */
+ NULL, /* select_preferred_addr */
+ cb_stream_reset,
+ NULL, /* extend_max_remote_streams_bidi */
+ NULL, /* extend_max_remote_streams_uni */
+ cb_extend_max_stream_data,
+ NULL, /* dcid_status */
+ NULL, /* handshake_confirmed */
+ NULL, /* recv_new_token */
+ ngtcp2_crypto_delete_crypto_aead_ctx_cb,
+ ngtcp2_crypto_delete_crypto_cipher_ctx_cb,
+ NULL, /* recv_datagram */
+ NULL, /* ack_datagram */
+ NULL, /* lost_datagram */
+ ngtcp2_crypto_get_path_challenge_data_cb,
+ cb_stream_stop_sending,
+ NULL, /* version_negotiation */
+ cb_recv_rx_key,
+ NULL, /* recv_tx_key */
+ NULL, /* early_data_rejected */
+};
+
+/**
+ * Connection maintenance like timeouts on packet ACKs etc. are done by us, not
+ * the OS like for TCP. POLL events on the socket therefore are not
+ * sufficient.
+ * ngtcp2 tells us when it wants to be invoked again. We handle that via
+ * the `Curl_expire()` mechanisms.
+ */
+static CURLcode check_and_set_expiry(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct pkt_io_ctx *pktx)
+{
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ struct pkt_io_ctx local_pktx;
+ ngtcp2_tstamp expiry;
+
+ if(!pktx) {
+ pktx_init(&local_pktx, cf, data);
+ pktx = &local_pktx;
+ }
+ else {
+ pktx_update_time(pktx, cf);
+ }
+
+ expiry = ngtcp2_conn_get_expiry(ctx->qconn);
+ if(expiry != UINT64_MAX) {
+ if(expiry <= pktx->ts) {
+ CURLcode result;
+ int rv = ngtcp2_conn_handle_expiry(ctx->qconn, pktx->ts);
+ if(rv) {
+ failf(data, "ngtcp2_conn_handle_expiry returned error: %s",
+ ngtcp2_strerror(rv));
+ ngtcp2_ccerr_set_liberr(&ctx->last_error, rv, NULL, 0);
+ return CURLE_SEND_ERROR;
+ }
+ result = cf_progress_ingress(cf, data, pktx);
+ if(result)
+ return result;
+ result = cf_progress_egress(cf, data, pktx);
+ if(result)
+ return result;
+ /* ask again, things might have changed */
+ expiry = ngtcp2_conn_get_expiry(ctx->qconn);
+ }
+
+ if(expiry > pktx->ts) {
+ ngtcp2_duration timeout = expiry - pktx->ts;
+ if(timeout % NGTCP2_MILLISECONDS) {
+ timeout += NGTCP2_MILLISECONDS;
+ }
+ Curl_expire(data, timeout / NGTCP2_MILLISECONDS, EXPIRE_QUIC);
+ }
+ }
+ return CURLE_OK;
+}
+
+static void cf_ngtcp2_adjust_pollset(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct easy_pollset *ps)
+{
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ bool want_recv = CURL_WANT_RECV(data);
+ bool want_send = CURL_WANT_SEND(data);
+
+ if(ctx->qconn && (want_recv || want_send)) {
+ struct h3_stream_ctx *stream = H3_STREAM_CTX(data);
+ struct cf_call_data save;
+ bool c_exhaust, s_exhaust;
+
+ CF_DATA_SAVE(save, cf, data);
+ c_exhaust = !ngtcp2_conn_get_cwnd_left(ctx->qconn) ||
+ !ngtcp2_conn_get_max_data_left(ctx->qconn);
+ s_exhaust = stream && stream->id >= 0 && stream->quic_flow_blocked;
+ want_recv = (want_recv || c_exhaust || s_exhaust);
+ want_send = (!s_exhaust && want_send) ||
+ !Curl_bufq_is_empty(&ctx->q.sendbuf);
+
+ Curl_pollset_set(data, ps, ctx->q.sockfd, want_recv, want_send);
+ CF_DATA_RESTORE(cf, save);
+ }
+}
+
+static int cb_h3_stream_close(nghttp3_conn *conn, int64_t stream_id,
+ uint64_t app_error_code, void *user_data,
+ void *stream_user_data)
+{
+ struct Curl_cfilter *cf = user_data;
+ struct Curl_easy *data = stream_user_data;
+ struct h3_stream_ctx *stream = H3_STREAM_CTX(data);
+ (void)conn;
+ (void)stream_id;
+
+ /* we might be called by nghttp3 after we already cleaned up */
+ if(!stream)
+ return 0;
+
+ stream->closed = TRUE;
+ stream->error3 = app_error_code;
+ if(stream->error3 != NGHTTP3_H3_NO_ERROR) {
+ stream->reset = TRUE;
+ stream->send_closed = TRUE;
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] RESET: error %" PRId64,
+ stream->id, stream->error3);
+ }
+ else {
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] CLOSED", stream->id);
+ }
+ h3_drain_stream(cf, data);
+ return 0;
+}
+
+/*
+ * write_resp_raw() copies response data in raw format to the `data`'s
+ * receive buffer. If not enough space is available, it appends to the
+ * `data`'s overflow buffer.
+ */
+static CURLcode write_resp_raw(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ const void *mem, size_t memlen,
+ bool flow)
+{
+ struct h3_stream_ctx *stream = H3_STREAM_CTX(data);
+ CURLcode result = CURLE_OK;
+ ssize_t nwritten;
+
+ (void)cf;
+ if(!stream) {
+ return CURLE_RECV_ERROR;
+ }
+ nwritten = Curl_bufq_write(&stream->recvbuf, mem, memlen, &result);
+ if(nwritten < 0) {
+ return result;
+ }
+
+ if(!flow)
+ stream->recv_buf_nonflow += (size_t)nwritten;
+
+ if((size_t)nwritten < memlen) {
+ /* This MUST not happen. Our recbuf is dimensioned to hold the
+ * full max_stream_window and then some for this very reason. */
+ DEBUGASSERT(0);
+ return CURLE_RECV_ERROR;
+ }
+ return result;
+}
+
+static int cb_h3_recv_data(nghttp3_conn *conn, int64_t stream3_id,
+ const uint8_t *buf, size_t buflen,
+ void *user_data, void *stream_user_data)
+{
+ struct Curl_cfilter *cf = user_data;
+ struct Curl_easy *data = stream_user_data;
+ struct h3_stream_ctx *stream = H3_STREAM_CTX(data);
+ CURLcode result;
+
+ (void)conn;
+ (void)stream3_id;
+
+ if(!stream)
+ return NGHTTP3_ERR_CALLBACK_FAILURE;
+
+ result = write_resp_raw(cf, data, buf, buflen, TRUE);
+ if(result) {
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] DATA len=%zu, ERROR receiving %d",
+ stream->id, buflen, result);
+ return NGHTTP3_ERR_CALLBACK_FAILURE;
+ }
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] DATA len=%zu", stream->id, buflen);
+ h3_drain_stream(cf, data);
+ return 0;
+}
+
+static int cb_h3_deferred_consume(nghttp3_conn *conn, int64_t stream3_id,
+ size_t consumed, void *user_data,
+ void *stream_user_data)
+{
+ struct Curl_cfilter *cf = user_data;
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ (void)conn;
+ (void)stream_user_data;
+
+ /* nghttp3 has consumed bytes on the QUIC stream and we need to
+ * tell the QUIC connection to increase its flow control */
+ ngtcp2_conn_extend_max_stream_offset(ctx->qconn, stream3_id, consumed);
+ ngtcp2_conn_extend_max_offset(ctx->qconn, consumed);
+ return 0;
+}
+
+static int cb_h3_end_headers(nghttp3_conn *conn, int64_t stream_id,
+ int fin, void *user_data, void *stream_user_data)
+{
+ struct Curl_cfilter *cf = user_data;
+ struct Curl_easy *data = stream_user_data;
+ struct h3_stream_ctx *stream = H3_STREAM_CTX(data);
+ CURLcode result = CURLE_OK;
+ (void)conn;
+ (void)stream_id;
+ (void)fin;
+ (void)cf;
+
+ if(!stream)
+ return 0;
+ /* add a CRLF only if we've received some headers */
+ result = write_resp_raw(cf, data, "\r\n", 2, FALSE);
+ if(result) {
+ return -1;
+ }
+
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] end_headers, status=%d",
+ stream_id, stream->status_code);
+ if(stream->status_code / 100 != 1) {
+ stream->resp_hds_complete = TRUE;
+ }
+ h3_drain_stream(cf, data);
+ return 0;
+}
+
+static int cb_h3_recv_header(nghttp3_conn *conn, int64_t stream_id,
+ int32_t token, nghttp3_rcbuf *name,
+ nghttp3_rcbuf *value, uint8_t flags,
+ void *user_data, void *stream_user_data)
+{
+ struct Curl_cfilter *cf = user_data;
+ nghttp3_vec h3name = nghttp3_rcbuf_get_buf(name);
+ nghttp3_vec h3val = nghttp3_rcbuf_get_buf(value);
+ struct Curl_easy *data = stream_user_data;
+ struct h3_stream_ctx *stream = H3_STREAM_CTX(data);
+ CURLcode result = CURLE_OK;
+ (void)conn;
+ (void)stream_id;
+ (void)token;
+ (void)flags;
+ (void)cf;
+
+ /* we might have cleaned up this transfer already */
+ if(!stream)
+ return 0;
+
+ if(token == NGHTTP3_QPACK_TOKEN__STATUS) {
+ char line[14]; /* status line is always 13 characters long */
+ size_t ncopy;
+
+ result = Curl_http_decode_status(&stream->status_code,
+ (const char *)h3val.base, h3val.len);
+ if(result)
+ return -1;
+ ncopy = msnprintf(line, sizeof(line), "HTTP/3 %03d \r\n",
+ stream->status_code);
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] status: %s", stream_id, line);
+ result = write_resp_raw(cf, data, line, ncopy, FALSE);
+ if(result) {
+ return -1;
+ }
+ }
+ else {
+ /* store as an HTTP1-style header */
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] header: %.*s: %.*s",
+ stream_id, (int)h3name.len, h3name.base,
+ (int)h3val.len, h3val.base);
+ result = write_resp_raw(cf, data, h3name.base, h3name.len, FALSE);
+ if(result) {
+ return -1;
+ }
+ result = write_resp_raw(cf, data, ": ", 2, FALSE);
+ if(result) {
+ return -1;
+ }
+ result = write_resp_raw(cf, data, h3val.base, h3val.len, FALSE);
+ if(result) {
+ return -1;
+ }
+ result = write_resp_raw(cf, data, "\r\n", 2, FALSE);
+ if(result) {
+ return -1;
+ }
+ }
+ return 0;
+}
+
+static int cb_h3_stop_sending(nghttp3_conn *conn, int64_t stream_id,
+ uint64_t app_error_code, void *user_data,
+ void *stream_user_data)
+{
+ struct Curl_cfilter *cf = user_data;
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ int rv;
+ (void)conn;
+ (void)stream_user_data;
+
+ rv = ngtcp2_conn_shutdown_stream_read(ctx->qconn, 0, stream_id,
+ app_error_code);
+ if(rv && rv != NGTCP2_ERR_STREAM_NOT_FOUND) {
+ return NGTCP2_ERR_CALLBACK_FAILURE;
+ }
+
+ return 0;
+}
+
+static int cb_h3_reset_stream(nghttp3_conn *conn, int64_t stream_id,
+ uint64_t app_error_code, void *user_data,
+ void *stream_user_data) {
+ struct Curl_cfilter *cf = user_data;
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ struct Curl_easy *data = stream_user_data;
+ int rv;
+ (void)conn;
+ (void)data;
+
+ rv = ngtcp2_conn_shutdown_stream_write(ctx->qconn, 0, stream_id,
+ app_error_code);
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] reset -> %d", stream_id, rv);
+ if(rv && rv != NGTCP2_ERR_STREAM_NOT_FOUND) {
+ return NGTCP2_ERR_CALLBACK_FAILURE;
+ }
+
+ return 0;
+}
+
+static nghttp3_callbacks ngh3_callbacks = {
+ cb_h3_acked_req_body, /* acked_stream_data */
+ cb_h3_stream_close,
+ cb_h3_recv_data,
+ cb_h3_deferred_consume,
+ NULL, /* begin_headers */
+ cb_h3_recv_header,
+ cb_h3_end_headers,
+ NULL, /* begin_trailers */
+ cb_h3_recv_header,
+ NULL, /* end_trailers */
+ cb_h3_stop_sending,
+ NULL, /* end_stream */
+ cb_h3_reset_stream,
+ NULL, /* shutdown */
+ NULL /* recv_settings */
+};
+
+static int init_ngh3_conn(struct Curl_cfilter *cf)
+{
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ CURLcode result;
+ int rc;
+ int64_t ctrl_stream_id, qpack_enc_stream_id, qpack_dec_stream_id;
+
+ if(ngtcp2_conn_get_streams_uni_left(ctx->qconn) < 3) {
+ return CURLE_QUIC_CONNECT_ERROR;
+ }
+
+ nghttp3_settings_default(&ctx->h3settings);
+
+ rc = nghttp3_conn_client_new(&ctx->h3conn,
+ &ngh3_callbacks,
+ &ctx->h3settings,
+ nghttp3_mem_default(),
+ cf);
+ if(rc) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto fail;
+ }
+
+ rc = ngtcp2_conn_open_uni_stream(ctx->qconn, &ctrl_stream_id, NULL);
+ if(rc) {
+ result = CURLE_QUIC_CONNECT_ERROR;
+ goto fail;
+ }
+
+ rc = nghttp3_conn_bind_control_stream(ctx->h3conn, ctrl_stream_id);
+ if(rc) {
+ result = CURLE_QUIC_CONNECT_ERROR;
+ goto fail;
+ }
+
+ rc = ngtcp2_conn_open_uni_stream(ctx->qconn, &qpack_enc_stream_id, NULL);
+ if(rc) {
+ result = CURLE_QUIC_CONNECT_ERROR;
+ goto fail;
+ }
+
+ rc = ngtcp2_conn_open_uni_stream(ctx->qconn, &qpack_dec_stream_id, NULL);
+ if(rc) {
+ result = CURLE_QUIC_CONNECT_ERROR;
+ goto fail;
+ }
+
+ rc = nghttp3_conn_bind_qpack_streams(ctx->h3conn, qpack_enc_stream_id,
+ qpack_dec_stream_id);
+ if(rc) {
+ result = CURLE_QUIC_CONNECT_ERROR;
+ goto fail;
+ }
+
+ return CURLE_OK;
+fail:
+
+ return result;
+}
+
+static ssize_t recv_closed_stream(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct h3_stream_ctx *stream,
+ CURLcode *err)
+{
+ ssize_t nread = -1;
+
+ (void)cf;
+ if(stream->reset) {
+ failf(data,
+ "HTTP/3 stream %" PRId64 " reset by server", stream->id);
+ *err = stream->resp_hds_complete? CURLE_PARTIAL_FILE : CURLE_HTTP3;
+ goto out;
+ }
+ else if(!stream->resp_hds_complete) {
+ failf(data,
+ "HTTP/3 stream %" PRId64 " was closed cleanly, but before getting"
+ " all response header fields, treated as error",
+ stream->id);
+ *err = CURLE_HTTP3;
+ goto out;
+ }
+ *err = CURLE_OK;
+ nread = 0;
+
+out:
+ return nread;
+}
+
+/* incoming data frames on the h3 stream */
+static ssize_t cf_ngtcp2_recv(struct Curl_cfilter *cf, struct Curl_easy *data,
+ char *buf, size_t len, CURLcode *err)
+{
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ struct h3_stream_ctx *stream = H3_STREAM_CTX(data);
+ ssize_t nread = -1;
+ struct cf_call_data save;
+ struct pkt_io_ctx pktx;
+
+ (void)ctx;
+
+ CF_DATA_SAVE(save, cf, data);
+ DEBUGASSERT(cf->connected);
+ DEBUGASSERT(ctx);
+ DEBUGASSERT(ctx->qconn);
+ DEBUGASSERT(ctx->h3conn);
+ *err = CURLE_OK;
+
+ pktx_init(&pktx, cf, data);
+
+ if(!stream) {
+ *err = CURLE_RECV_ERROR;
+ goto out;
+ }
+
+ if(!Curl_bufq_is_empty(&stream->recvbuf)) {
+ nread = Curl_bufq_read(&stream->recvbuf,
+ (unsigned char *)buf, len, err);
+ if(nread < 0) {
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] read recvbuf(len=%zu) "
+ "-> %zd, %d", stream->id, len, nread, *err);
+ goto out;
+ }
+ report_consumed_data(cf, data, nread);
+ }
+
+ if(cf_progress_ingress(cf, data, &pktx)) {
+ *err = CURLE_RECV_ERROR;
+ nread = -1;
+ goto out;
+ }
+
+ /* recvbuf had nothing before, maybe after progressing ingress? */
+ if(nread < 0 && !Curl_bufq_is_empty(&stream->recvbuf)) {
+ nread = Curl_bufq_read(&stream->recvbuf,
+ (unsigned char *)buf, len, err);
+ if(nread < 0) {
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] read recvbuf(len=%zu) "
+ "-> %zd, %d", stream->id, len, nread, *err);
+ goto out;
+ }
+ report_consumed_data(cf, data, nread);
+ }
+
+ if(nread > 0) {
+ h3_drain_stream(cf, data);
+ }
+ else {
+ if(stream->closed) {
+ nread = recv_closed_stream(cf, data, stream, err);
+ goto out;
+ }
+ *err = CURLE_AGAIN;
+ nread = -1;
+ }
+
+out:
+ if(cf_progress_egress(cf, data, &pktx)) {
+ *err = CURLE_SEND_ERROR;
+ nread = -1;
+ }
+ else {
+ CURLcode result2 = check_and_set_expiry(cf, data, &pktx);
+ if(result2) {
+ *err = result2;
+ nread = -1;
+ }
+ }
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] cf_recv(len=%zu) -> %zd, %d",
+ stream? stream->id : -1, len, nread, *err);
+ CF_DATA_RESTORE(cf, save);
+ return nread;
+}
+
+static int cb_h3_acked_req_body(nghttp3_conn *conn, int64_t stream_id,
+ uint64_t datalen, void *user_data,
+ void *stream_user_data)
+{
+ struct Curl_cfilter *cf = user_data;
+ struct Curl_easy *data = stream_user_data;
+ struct h3_stream_ctx *stream = H3_STREAM_CTX(data);
+ size_t skiplen;
+
+ (void)cf;
+ if(!stream)
+ return 0;
+ /* The server acknowledged `datalen` of bytes from our request body.
+ * This is a delta. We have kept this data in `sendbuf` for
+ * re-transmissions and can free it now. */
+ if(datalen >= (uint64_t)stream->sendbuf_len_in_flight)
+ skiplen = stream->sendbuf_len_in_flight;
+ else
+ skiplen = (size_t)datalen;
+ Curl_bufq_skip(&stream->sendbuf, skiplen);
+ stream->sendbuf_len_in_flight -= skiplen;
+
+ /* Everything ACKed, we resume upload processing */
+ if(!stream->sendbuf_len_in_flight) {
+ int rv = nghttp3_conn_resume_stream(conn, stream_id);
+ if(rv && rv != NGHTTP3_ERR_STREAM_NOT_FOUND) {
+ return NGTCP2_ERR_CALLBACK_FAILURE;
+ }
+ }
+ return 0;
+}
+
+static nghttp3_ssize
+cb_h3_read_req_body(nghttp3_conn *conn, int64_t stream_id,
+ nghttp3_vec *vec, size_t veccnt,
+ uint32_t *pflags, void *user_data,
+ void *stream_user_data)
+{
+ struct Curl_cfilter *cf = user_data;
+ struct Curl_easy *data = stream_user_data;
+ struct h3_stream_ctx *stream = H3_STREAM_CTX(data);
+ ssize_t nwritten = 0;
+ size_t nvecs = 0;
+ (void)cf;
+ (void)conn;
+ (void)stream_id;
+ (void)user_data;
+ (void)veccnt;
+
+ if(!stream)
+ return NGHTTP3_ERR_CALLBACK_FAILURE;
+ /* nghttp3 keeps references to the sendbuf data until it is ACKed
+ * by the server (see `cb_h3_acked_req_body()` for updates).
+ * `sendbuf_len_in_flight` is the amount of bytes in `sendbuf`
+ * that we have already passed to nghttp3, but which have not been
+ * ACKed yet.
+ * Any amount beyond `sendbuf_len_in_flight` we need still to pass
+ * to nghttp3. Do that now, if we can. */
+ if(stream->sendbuf_len_in_flight < Curl_bufq_len(&stream->sendbuf)) {
+ nvecs = 0;
+ while(nvecs < veccnt &&
+ Curl_bufq_peek_at(&stream->sendbuf,
+ stream->sendbuf_len_in_flight,
+ (const unsigned char **)&vec[nvecs].base,
+ &vec[nvecs].len)) {
+ stream->sendbuf_len_in_flight += vec[nvecs].len;
+ nwritten += vec[nvecs].len;
+ ++nvecs;
+ }
+ DEBUGASSERT(nvecs > 0); /* we SHOULD have been be able to peek */
+ }
+
+ if(nwritten > 0 && stream->upload_left != -1)
+ stream->upload_left -= nwritten;
+
+ /* When we stopped sending and everything in `sendbuf` is "in flight",
+ * we are at the end of the request body. */
+ if(stream->upload_left == 0) {
+ *pflags = NGHTTP3_DATA_FLAG_EOF;
+ stream->send_closed = TRUE;
+ }
+ else if(!nwritten) {
+ /* Not EOF, and nothing to give, we signal WOULDBLOCK. */
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] read req body -> AGAIN",
+ stream->id);
+ return NGHTTP3_ERR_WOULDBLOCK;
+ }
+
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] read req body -> "
+ "%d vecs%s with %zu (buffered=%zu, left=%"
+ CURL_FORMAT_CURL_OFF_T ")",
+ stream->id, (int)nvecs,
+ *pflags == NGHTTP3_DATA_FLAG_EOF?" EOF":"",
+ nwritten, Curl_bufq_len(&stream->sendbuf),
+ stream->upload_left);
+ return (nghttp3_ssize)nvecs;
+}
+
+/* Index where :authority header field will appear in request header
+ field list. */
+#define AUTHORITY_DST_IDX 3
+
+static ssize_t h3_stream_open(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ const void *buf, size_t len,
+ CURLcode *err)
+{
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ struct h3_stream_ctx *stream = NULL;
+ struct dynhds h2_headers;
+ size_t nheader;
+ nghttp3_nv *nva = NULL;
+ int rc = 0;
+ unsigned int i;
+ ssize_t nwritten = -1;
+ nghttp3_data_reader reader;
+ nghttp3_data_reader *preader = NULL;
+
+ Curl_dynhds_init(&h2_headers, 0, DYN_HTTP_REQUEST);
+
+ *err = h3_data_setup(cf, data);
+ if(*err)
+ goto out;
+ stream = H3_STREAM_CTX(data);
+ DEBUGASSERT(stream);
+ if(!stream) {
+ *err = CURLE_FAILED_INIT;
+ goto out;
+ }
+
+ nwritten = Curl_h1_req_parse_read(&stream->h1, buf, len, NULL, 0, err);
+ if(nwritten < 0)
+ goto out;
+ if(!stream->h1.done) {
+ /* need more data */
+ goto out;
+ }
+ DEBUGASSERT(stream->h1.req);
+
+ *err = Curl_http_req_to_h2(&h2_headers, stream->h1.req, data);
+ if(*err) {
+ nwritten = -1;
+ goto out;
+ }
+ /* no longer needed */
+ Curl_h1_req_parse_free(&stream->h1);
+
+ nheader = Curl_dynhds_count(&h2_headers);
+ nva = malloc(sizeof(nghttp3_nv) * nheader);
+ if(!nva) {
+ *err = CURLE_OUT_OF_MEMORY;
+ nwritten = -1;
+ goto out;
+ }
+
+ for(i = 0; i < nheader; ++i) {
+ struct dynhds_entry *e = Curl_dynhds_getn(&h2_headers, i);
+ nva[i].name = (unsigned char *)e->name;
+ nva[i].namelen = e->namelen;
+ nva[i].value = (unsigned char *)e->value;
+ nva[i].valuelen = e->valuelen;
+ nva[i].flags = NGHTTP3_NV_FLAG_NONE;
+ }
+
+ rc = ngtcp2_conn_open_bidi_stream(ctx->qconn, &stream->id, data);
+ if(rc) {
+ failf(data, "can get bidi streams");
+ *err = CURLE_SEND_ERROR;
+ goto out;
+ }
+
+ switch(data->state.httpreq) {
+ case HTTPREQ_POST:
+ case HTTPREQ_POST_FORM:
+ case HTTPREQ_POST_MIME:
+ case HTTPREQ_PUT:
+ /* known request body size or -1 */
+ if(data->state.infilesize != -1)
+ stream->upload_left = data->state.infilesize;
+ else
+ /* data sending without specifying the data amount up front */
+ stream->upload_left = -1; /* unknown */
+ break;
+ default:
+ /* there is not request body */
+ stream->upload_left = 0; /* no request body */
+ break;
+ }
+
+ stream->send_closed = (stream->upload_left == 0);
+ if(!stream->send_closed) {
+ reader.read_data = cb_h3_read_req_body;
+ preader = &reader;
+ }
+
+ rc = nghttp3_conn_submit_request(ctx->h3conn, stream->id,
+ nva, nheader, preader, data);
+ if(rc) {
+ switch(rc) {
+ case NGHTTP3_ERR_CONN_CLOSING:
+ CURL_TRC_CF(data, cf, "h3sid[%"PRId64"] failed to send, "
+ "connection is closing", stream->id);
+ break;
+ default:
+ CURL_TRC_CF(data, cf, "h3sid[%"PRId64"] failed to send -> %d (%s)",
+ stream->id, rc, ngtcp2_strerror(rc));
+ break;
+ }
+ *err = CURLE_SEND_ERROR;
+ nwritten = -1;
+ goto out;
+ }
+
+ if(Curl_trc_is_verbose(data)) {
+ infof(data, "[HTTP/3] [%" PRId64 "] OPENED stream for %s",
+ stream->id, data->state.url);
+ for(i = 0; i < nheader; ++i) {
+ infof(data, "[HTTP/3] [%" PRId64 "] [%.*s: %.*s]", stream->id,
+ (int)nva[i].namelen, nva[i].name,
+ (int)nva[i].valuelen, nva[i].value);
+ }
+ }
+
+out:
+ free(nva);
+ Curl_dynhds_free(&h2_headers);
+ return nwritten;
+}
+
+static ssize_t cf_ngtcp2_send(struct Curl_cfilter *cf, struct Curl_easy *data,
+ const void *buf, size_t len, CURLcode *err)
+{
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ struct h3_stream_ctx *stream = H3_STREAM_CTX(data);
+ ssize_t sent = 0;
+ struct cf_call_data save;
+ struct pkt_io_ctx pktx;
+ CURLcode result;
+
+ CF_DATA_SAVE(save, cf, data);
+ DEBUGASSERT(cf->connected);
+ DEBUGASSERT(ctx->qconn);
+ DEBUGASSERT(ctx->h3conn);
+ pktx_init(&pktx, cf, data);
+ *err = CURLE_OK;
+
+ result = cf_progress_ingress(cf, data, &pktx);
+ if(result) {
+ *err = result;
+ sent = -1;
+ }
+
+ if(!stream || stream->id < 0) {
+ sent = h3_stream_open(cf, data, buf, len, err);
+ if(sent < 0) {
+ CURL_TRC_CF(data, cf, "failed to open stream -> %d", *err);
+ goto out;
+ }
+ stream = H3_STREAM_CTX(data);
+ }
+ else if(stream->upload_blocked_len) {
+ /* the data in `buf` has already been submitted or added to the
+ * buffers, but have been EAGAINed on the last invocation. */
+ DEBUGASSERT(len >= stream->upload_blocked_len);
+ if(len < stream->upload_blocked_len) {
+ /* Did we get called again with a smaller `len`? This should not
+ * happen. We are not prepared to handle that. */
+ failf(data, "HTTP/3 send again with decreased length");
+ *err = CURLE_HTTP3;
+ sent = -1;
+ goto out;
+ }
+ sent = (ssize_t)stream->upload_blocked_len;
+ stream->upload_blocked_len = 0;
+ }
+ else if(stream->closed) {
+ if(stream->resp_hds_complete) {
+ /* Server decided to close the stream after having sent us a final
+ * response. This is valid if it is not interested in the request
+ * body. This happens on 30x or 40x responses.
+ * We silently discard the data sent, since this is not a transport
+ * error situation. */
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] discarding data"
+ "on closed stream with response", stream->id);
+ *err = CURLE_OK;
+ sent = (ssize_t)len;
+ goto out;
+ }
+ *err = CURLE_HTTP3;
+ sent = -1;
+ goto out;
+ }
+ else {
+ sent = Curl_bufq_write(&stream->sendbuf, buf, len, err);
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] cf_send, add to "
+ "sendbuf(len=%zu) -> %zd, %d",
+ stream->id, len, sent, *err);
+ if(sent < 0) {
+ goto out;
+ }
+
+ (void)nghttp3_conn_resume_stream(ctx->h3conn, stream->id);
+ }
+
+ result = cf_progress_egress(cf, data, &pktx);
+ if(result) {
+ *err = result;
+ sent = -1;
+ }
+
+ if(stream && sent > 0 && stream->sendbuf_len_in_flight) {
+ /* We have unacknowledged DATA and cannot report success to our
+ * caller. Instead we EAGAIN and remember how much we have already
+ * "written" into our various internal connection buffers. */
+ stream->upload_blocked_len = sent;
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] cf_send(len=%zu), "
+ "%zu bytes in flight -> EGAIN", stream->id, len,
+ stream->sendbuf_len_in_flight);
+ *err = CURLE_AGAIN;
+ sent = -1;
+ }
+
+out:
+ result = check_and_set_expiry(cf, data, &pktx);
+ if(result) {
+ *err = result;
+ sent = -1;
+ }
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] cf_send(len=%zu) -> %zd, %d",
+ stream? stream->id : -1, len, sent, *err);
+ CF_DATA_RESTORE(cf, save);
+ return sent;
+}
+
+static CURLcode qng_verify_peer(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ struct ssl_primary_config *conn_config;
+ CURLcode result = CURLE_OK;
+
+ conn_config = Curl_ssl_cf_get_primary_config(cf);
+ if(!conn_config)
+ return CURLE_FAILED_INIT;
+
+ cf->conn->bits.multiplex = TRUE; /* at least potentially multiplexed */
+ cf->conn->httpversion = 30;
+ cf->conn->bundle->multiuse = BUNDLE_MULTIPLEX;
+
+ if(conn_config->verifyhost) {
+#ifdef USE_OPENSSL
+ X509 *server_cert;
+ server_cert = SSL_get1_peer_certificate(ctx->ssl);
+ if(!server_cert) {
+ return CURLE_PEER_FAILED_VERIFICATION;
+ }
+ result = Curl_ossl_verifyhost(data, cf->conn, &ctx->peer, server_cert);
+ X509_free(server_cert);
+ if(result)
+ return result;
+#elif defined(USE_GNUTLS)
+ result = Curl_gtls_verifyserver(data, ctx->gtls->session,
+ conn_config, &data->set.ssl, &ctx->peer,
+ data->set.str[STRING_SSL_PINNEDPUBLICKEY]);
+ if(result)
+ return result;
+#elif defined(USE_WOLFSSL)
+ if(!ctx->peer.sni ||
+ wolfSSL_check_domain_name(ctx->ssl, ctx->peer.sni) == SSL_FAILURE)
+ return CURLE_PEER_FAILED_VERIFICATION;
+#endif
+ infof(data, "Verified certificate just fine");
+ }
+ else
+ infof(data, "Skipped certificate verification");
+#ifdef USE_OPENSSL
+ if(data->set.ssl.certinfo)
+ /* asked to gather certificate info */
+ (void)Curl_ossl_certchain(data, ctx->ssl);
+#endif
+ return result;
+}
+
+static CURLcode recv_pkt(const unsigned char *pkt, size_t pktlen,
+ struct sockaddr_storage *remote_addr,
+ socklen_t remote_addrlen, int ecn,
+ void *userp)
+{
+ struct pkt_io_ctx *pktx = userp;
+ struct cf_ngtcp2_ctx *ctx = pktx->cf->ctx;
+ ngtcp2_pkt_info pi;
+ ngtcp2_path path;
+ int rv;
+
+ ++pktx->pkt_count;
+ ngtcp2_addr_init(&path.local, (struct sockaddr *)&ctx->q.local_addr,
+ ctx->q.local_addrlen);
+ ngtcp2_addr_init(&path.remote, (struct sockaddr *)remote_addr,
+ remote_addrlen);
+ pi.ecn = (uint8_t)ecn;
+
+ rv = ngtcp2_conn_read_pkt(ctx->qconn, &path, &pi, pkt, pktlen, pktx->ts);
+ if(rv) {
+ CURL_TRC_CF(pktx->data, pktx->cf, "ingress, read_pkt -> %s (%d)",
+ ngtcp2_strerror(rv), rv);
+ if(!ctx->last_error.error_code) {
+ if(rv == NGTCP2_ERR_CRYPTO) {
+ ngtcp2_ccerr_set_tls_alert(&ctx->last_error,
+ ngtcp2_conn_get_tls_alert(ctx->qconn),
+ NULL, 0);
+ }
+ else {
+ ngtcp2_ccerr_set_liberr(&ctx->last_error, rv, NULL, 0);
+ }
+ }
+
+ if(rv == NGTCP2_ERR_CRYPTO)
+ /* this is a "TLS problem", but a failed certificate verification
+ is a common reason for this */
+ return CURLE_PEER_FAILED_VERIFICATION;
+ return CURLE_RECV_ERROR;
+ }
+
+ return CURLE_OK;
+}
+
+static CURLcode cf_progress_ingress(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct pkt_io_ctx *pktx)
+{
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ struct pkt_io_ctx local_pktx;
+ size_t pkts_chunk = 128, i;
+ size_t pkts_max = 10 * pkts_chunk;
+ CURLcode result = CURLE_OK;
+
+ if(!pktx) {
+ pktx_init(&local_pktx, cf, data);
+ pktx = &local_pktx;
+ }
+ else {
+ pktx_update_time(pktx, cf);
+ }
+
+#ifdef USE_OPENSSL
+ if(!ctx->x509_store_setup) {
+ result = Curl_ssl_setup_x509_store(cf, data, ctx->sslctx);
+ if(result)
+ return result;
+ ctx->x509_store_setup = TRUE;
+ }
+#endif
+
+ for(i = 0; i < pkts_max; i += pkts_chunk) {
+ pktx->pkt_count = 0;
+ result = vquic_recv_packets(cf, data, &ctx->q, pkts_chunk,
+ recv_pkt, pktx);
+ if(result) /* error */
+ break;
+ if(pktx->pkt_count < pkts_chunk) /* got less than we could */
+ break;
+ /* give egress a chance before we receive more */
+ result = cf_progress_egress(cf, data, pktx);
+ if(result) /* error */
+ break;
+ }
+ return result;
+}
+
+/**
+ * Read a network packet to send from ngtcp2 into `buf`.
+ * Return number of bytes written or -1 with *err set.
+ */
+static ssize_t read_pkt_to_send(void *userp,
+ unsigned char *buf, size_t buflen,
+ CURLcode *err)
+{
+ struct pkt_io_ctx *x = userp;
+ struct cf_ngtcp2_ctx *ctx = x->cf->ctx;
+ nghttp3_vec vec[16];
+ nghttp3_ssize veccnt;
+ ngtcp2_ssize ndatalen;
+ uint32_t flags;
+ int64_t stream_id;
+ int fin;
+ ssize_t nwritten, n;
+ veccnt = 0;
+ stream_id = -1;
+ fin = 0;
+
+ /* ngtcp2 may want to put several frames from different streams into
+ * this packet. `NGTCP2_WRITE_STREAM_FLAG_MORE` tells it to do so.
+ * When `NGTCP2_ERR_WRITE_MORE` is returned, we *need* to make
+ * another iteration.
+ * When ngtcp2 is happy (because it has no other frame that would fit
+ * or it has nothing more to send), it returns the total length
+ * of the assembled packet. This may be 0 if there was nothing to send. */
+ nwritten = 0;
+ *err = CURLE_OK;
+ for(;;) {
+
+ if(ctx->h3conn && ngtcp2_conn_get_max_data_left(ctx->qconn)) {
+ veccnt = nghttp3_conn_writev_stream(ctx->h3conn, &stream_id, &fin, vec,
+ sizeof(vec) / sizeof(vec[0]));
+ if(veccnt < 0) {
+ failf(x->data, "nghttp3_conn_writev_stream returned error: %s",
+ nghttp3_strerror((int)veccnt));
+ ngtcp2_ccerr_set_application_error(
+ &ctx->last_error,
+ nghttp3_err_infer_quic_app_error_code((int)veccnt), NULL, 0);
+ *err = CURLE_SEND_ERROR;
+ return -1;
+ }
+ }
+
+ flags = NGTCP2_WRITE_STREAM_FLAG_MORE |
+ (fin ? NGTCP2_WRITE_STREAM_FLAG_FIN : 0);
+ n = ngtcp2_conn_writev_stream(ctx->qconn, &x->ps.path,
+ NULL, buf, buflen,
+ &ndatalen, flags, stream_id,
+ (const ngtcp2_vec *)vec, veccnt, x->ts);
+ if(n == 0) {
+ /* nothing to send */
+ *err = CURLE_AGAIN;
+ nwritten = -1;
+ goto out;
+ }
+ else if(n < 0) {
+ switch(n) {
+ case NGTCP2_ERR_STREAM_DATA_BLOCKED: {
+ struct h3_stream_ctx *stream = H3_STREAM_CTX(x->data);
+ DEBUGASSERT(ndatalen == -1);
+ nghttp3_conn_block_stream(ctx->h3conn, stream_id);
+ CURL_TRC_CF(x->data, x->cf, "[%" PRId64 "] block quic flow",
+ stream_id);
+ DEBUGASSERT(stream);
+ if(stream)
+ stream->quic_flow_blocked = TRUE;
+ n = 0;
+ break;
+ }
+ case NGTCP2_ERR_STREAM_SHUT_WR:
+ DEBUGASSERT(ndatalen == -1);
+ nghttp3_conn_shutdown_stream_write(ctx->h3conn, stream_id);
+ n = 0;
+ break;
+ case NGTCP2_ERR_WRITE_MORE:
+ /* ngtcp2 wants to send more. update the flow of the stream whose data
+ * is in the buffer and continue */
+ DEBUGASSERT(ndatalen >= 0);
+ n = 0;
+ break;
+ default:
+ DEBUGASSERT(ndatalen == -1);
+ failf(x->data, "ngtcp2_conn_writev_stream returned error: %s",
+ ngtcp2_strerror((int)n));
+ ngtcp2_ccerr_set_liberr(&ctx->last_error, (int)n, NULL, 0);
+ *err = CURLE_SEND_ERROR;
+ nwritten = -1;
+ goto out;
+ }
+ }
+
+ if(ndatalen >= 0) {
+ /* we add the amount of data bytes to the flow windows */
+ int rv = nghttp3_conn_add_write_offset(ctx->h3conn, stream_id, ndatalen);
+ if(rv) {
+ failf(x->data, "nghttp3_conn_add_write_offset returned error: %s\n",
+ nghttp3_strerror(rv));
+ return CURLE_SEND_ERROR;
+ }
+ }
+
+ if(n > 0) {
+ /* packet assembled, leave */
+ nwritten = n;
+ goto out;
+ }
+ }
+out:
+ return nwritten;
+}
+
+static CURLcode cf_progress_egress(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct pkt_io_ctx *pktx)
+{
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ ssize_t nread;
+ size_t max_payload_size, path_max_payload_size, max_pktcnt;
+ size_t pktcnt = 0;
+ size_t gsolen = 0; /* this disables gso until we have a clue */
+ CURLcode curlcode;
+ struct pkt_io_ctx local_pktx;
+
+ if(!pktx) {
+ pktx_init(&local_pktx, cf, data);
+ pktx = &local_pktx;
+ }
+ else {
+ pktx_update_time(pktx, cf);
+ ngtcp2_path_storage_zero(&pktx->ps);
+ }
+
+ curlcode = vquic_flush(cf, data, &ctx->q);
+ if(curlcode) {
+ if(curlcode == CURLE_AGAIN) {
+ Curl_expire(data, 1, EXPIRE_QUIC);
+ return CURLE_OK;
+ }
+ return curlcode;
+ }
+
+ /* In UDP, there is a maximum theoretical packet paload length and
+ * a minimum payload length that is "guarantueed" to work.
+ * To detect if this minimum payload can be increased, ngtcp2 sends
+ * now and then a packet payload larger than the minimum. It that
+ * is ACKed by the peer, both parties know that it works and
+ * the subsequent packets can use a larger one.
+ * This is called PMTUD (Path Maximum Transmission Unit Discovery).
+ * Since a PMTUD might be rejected right on send, we do not want it
+ * be followed by other packets of lesser size. Because those would
+ * also fail then. So, if we detect a PMTUD while buffering, we flush.
+ */
+ max_payload_size = ngtcp2_conn_get_max_tx_udp_payload_size(ctx->qconn);
+ path_max_payload_size =
+ ngtcp2_conn_get_path_max_tx_udp_payload_size(ctx->qconn);
+ /* maximum number of packets buffered before we flush to the socket */
+ max_pktcnt = CURLMIN(MAX_PKT_BURST,
+ ctx->q.sendbuf.chunk_size / max_payload_size);
+
+ for(;;) {
+ /* add the next packet to send, if any, to our buffer */
+ nread = Curl_bufq_sipn(&ctx->q.sendbuf, max_payload_size,
+ read_pkt_to_send, pktx, &curlcode);
+ if(nread < 0) {
+ if(curlcode != CURLE_AGAIN)
+ return curlcode;
+ /* Nothing more to add, flush and leave */
+ curlcode = vquic_send(cf, data, &ctx->q, gsolen);
+ if(curlcode) {
+ if(curlcode == CURLE_AGAIN) {
+ Curl_expire(data, 1, EXPIRE_QUIC);
+ return CURLE_OK;
+ }
+ return curlcode;
+ }
+ goto out;
+ }
+
+ DEBUGASSERT(nread > 0);
+ if(pktcnt == 0) {
+ /* first packet in buffer. This is either of a known, "good"
+ * payload size or it is a PMTUD. We'll see. */
+ gsolen = (size_t)nread;
+ }
+ else if((size_t)nread > gsolen ||
+ (gsolen > path_max_payload_size && (size_t)nread != gsolen)) {
+ /* The just added packet is a PMTUD *or* the one(s) before the
+ * just added were PMTUD and the last one is smaller.
+ * Flush the buffer before the last add. */
+ curlcode = vquic_send_tail_split(cf, data, &ctx->q,
+ gsolen, nread, nread);
+ if(curlcode) {
+ if(curlcode == CURLE_AGAIN) {
+ Curl_expire(data, 1, EXPIRE_QUIC);
+ return CURLE_OK;
+ }
+ return curlcode;
+ }
+ pktcnt = 0;
+ continue;
+ }
+
+ if(++pktcnt >= max_pktcnt || (size_t)nread < gsolen) {
+ /* Reached MAX_PKT_BURST *or*
+ * the capacity of our buffer *or*
+ * last add was shorter than the previous ones, flush */
+ curlcode = vquic_send(cf, data, &ctx->q, gsolen);
+ if(curlcode) {
+ if(curlcode == CURLE_AGAIN) {
+ Curl_expire(data, 1, EXPIRE_QUIC);
+ return CURLE_OK;
+ }
+ return curlcode;
+ }
+ /* pktbuf has been completely sent */
+ pktcnt = 0;
+ }
+ }
+
+out:
+ return CURLE_OK;
+}
+
+/*
+ * Called from transfer.c:data_pending to know if we should keep looping
+ * to receive more data from the connection.
+ */
+static bool cf_ngtcp2_data_pending(struct Curl_cfilter *cf,
+ const struct Curl_easy *data)
+{
+ const struct h3_stream_ctx *stream = H3_STREAM_CTX(data);
+ (void)cf;
+ return stream && !Curl_bufq_is_empty(&stream->recvbuf);
+}
+
+static CURLcode h3_data_pause(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool pause)
+{
+ /* TODO: there seems right now no API in ngtcp2 to shrink/enlarge
+ * the streams windows. As we do in HTTP/2. */
+ if(!pause) {
+ h3_drain_stream(cf, data);
+ Curl_expire(data, 0, EXPIRE_RUN_NOW);
+ }
+ return CURLE_OK;
+}
+
+static CURLcode cf_ngtcp2_data_event(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int event, int arg1, void *arg2)
+{
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ CURLcode result = CURLE_OK;
+ struct cf_call_data save;
+
+ CF_DATA_SAVE(save, cf, data);
+ (void)arg1;
+ (void)arg2;
+ switch(event) {
+ case CF_CTRL_DATA_SETUP:
+ break;
+ case CF_CTRL_DATA_PAUSE:
+ result = h3_data_pause(cf, data, (arg1 != 0));
+ break;
+ case CF_CTRL_DATA_DETACH:
+ h3_data_done(cf, data);
+ break;
+ case CF_CTRL_DATA_DONE:
+ h3_data_done(cf, data);
+ break;
+ case CF_CTRL_DATA_DONE_SEND: {
+ struct h3_stream_ctx *stream = H3_STREAM_CTX(data);
+ if(stream && !stream->send_closed) {
+ stream->send_closed = TRUE;
+ stream->upload_left = Curl_bufq_len(&stream->sendbuf);
+ (void)nghttp3_conn_resume_stream(ctx->h3conn, stream->id);
+ }
+ break;
+ }
+ case CF_CTRL_DATA_IDLE: {
+ struct h3_stream_ctx *stream = H3_STREAM_CTX(data);
+ CURL_TRC_CF(data, cf, "data idle");
+ if(stream && !stream->closed) {
+ result = check_and_set_expiry(cf, data, NULL);
+ if(result)
+ CURL_TRC_CF(data, cf, "data idle, check_and_set_expiry -> %d", result);
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ CF_DATA_RESTORE(cf, save);
+ return result;
+}
+
+static void cf_ngtcp2_ctx_clear(struct cf_ngtcp2_ctx *ctx)
+{
+ struct cf_call_data save = ctx->call_data;
+
+ if(ctx->qlogfd != -1) {
+ close(ctx->qlogfd);
+ }
+#ifdef USE_OPENSSL
+ if(ctx->ssl)
+ SSL_free(ctx->ssl);
+ if(ctx->sslctx)
+ SSL_CTX_free(ctx->sslctx);
+#elif defined(USE_GNUTLS)
+ if(ctx->gtls) {
+ if(ctx->gtls->cred)
+ gnutls_certificate_free_credentials(ctx->gtls->cred);
+ if(ctx->gtls->session)
+ gnutls_deinit(ctx->gtls->session);
+ free(ctx->gtls);
+ }
+#elif defined(USE_WOLFSSL)
+ if(ctx->ssl)
+ wolfSSL_free(ctx->ssl);
+ if(ctx->sslctx)
+ wolfSSL_CTX_free(ctx->sslctx);
+#endif
+ vquic_ctx_free(&ctx->q);
+ if(ctx->h3conn)
+ nghttp3_conn_del(ctx->h3conn);
+ if(ctx->qconn)
+ ngtcp2_conn_del(ctx->qconn);
+ Curl_bufcp_free(&ctx->stream_bufcp);
+ Curl_ssl_peer_cleanup(&ctx->peer);
+
+ memset(ctx, 0, sizeof(*ctx));
+ ctx->qlogfd = -1;
+ ctx->call_data = save;
+}
+
+static void cf_ngtcp2_close(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ struct cf_call_data save;
+
+ CF_DATA_SAVE(save, cf, data);
+ if(ctx && ctx->qconn) {
+ char buffer[NGTCP2_MAX_UDP_PAYLOAD_SIZE];
+ struct pkt_io_ctx pktx;
+ ngtcp2_ssize rc;
+
+ CURL_TRC_CF(data, cf, "close");
+ pktx_init(&pktx, cf, data);
+ rc = ngtcp2_conn_write_connection_close(ctx->qconn, NULL, /* path */
+ NULL, /* pkt_info */
+ (uint8_t *)buffer, sizeof(buffer),
+ &ctx->last_error, pktx.ts);
+ if(rc > 0) {
+ while((send(ctx->q.sockfd, buffer, (SEND_TYPE_ARG3)rc, 0) == -1) &&
+ SOCKERRNO == EINTR);
+ }
+
+ cf_ngtcp2_ctx_clear(ctx);
+ }
+
+ cf->connected = FALSE;
+ CF_DATA_RESTORE(cf, save);
+}
+
+static void cf_ngtcp2_destroy(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ struct cf_call_data save;
+
+ CF_DATA_SAVE(save, cf, data);
+ CURL_TRC_CF(data, cf, "destroy");
+ if(ctx) {
+ cf_ngtcp2_ctx_clear(ctx);
+ free(ctx);
+ }
+ cf->ctx = NULL;
+ /* No CF_DATA_RESTORE(cf, save) possible */
+ (void)save;
+}
+
+/*
+ * Might be called twice for happy eyeballs.
+ */
+static CURLcode cf_connect_start(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct pkt_io_ctx *pktx)
+{
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ int rc;
+ int rv;
+ CURLcode result;
+ const struct Curl_sockaddr_ex *sockaddr = NULL;
+ int qfd;
+
+ ctx->version = NGTCP2_PROTO_VER_MAX;
+ ctx->max_stream_window = H3_STREAM_WINDOW_SIZE;
+ ctx->max_idle_ms = CURL_QUIC_MAX_IDLE_MS;
+ Curl_bufcp_init(&ctx->stream_bufcp, H3_STREAM_CHUNK_SIZE,
+ H3_STREAM_POOL_SPARES);
+
+ result = Curl_ssl_peer_init(&ctx->peer, cf);
+ if(result)
+ return result;
+
+#ifdef USE_OPENSSL
+ result = quic_ssl_ctx(&ctx->sslctx, cf, data);
+ if(result)
+ return result;
+
+ result = quic_set_client_cert(cf, data);
+ if(result)
+ return result;
+#elif defined(USE_WOLFSSL)
+ result = quic_ssl_ctx(&ctx->sslctx, cf, data);
+ if(result)
+ return result;
+#endif
+
+ result = quic_init_ssl(cf, data);
+ if(result)
+ return result;
+
+ ctx->dcid.datalen = NGTCP2_MAX_CIDLEN;
+ result = Curl_rand(data, ctx->dcid.data, NGTCP2_MAX_CIDLEN);
+ if(result)
+ return result;
+
+ ctx->scid.datalen = NGTCP2_MAX_CIDLEN;
+ result = Curl_rand(data, ctx->scid.data, NGTCP2_MAX_CIDLEN);
+ if(result)
+ return result;
+
+ (void)Curl_qlogdir(data, ctx->scid.data, NGTCP2_MAX_CIDLEN, &qfd);
+ ctx->qlogfd = qfd; /* -1 if failure above */
+ quic_settings(ctx, data, pktx);
+
+ result = vquic_ctx_init(&ctx->q);
+ if(result)
+ return result;
+
+ Curl_cf_socket_peek(cf->next, data, &ctx->q.sockfd,
+ &sockaddr, NULL, NULL, NULL, NULL);
+ if(!sockaddr)
+ return CURLE_QUIC_CONNECT_ERROR;
+ ctx->q.local_addrlen = sizeof(ctx->q.local_addr);
+ rv = getsockname(ctx->q.sockfd, (struct sockaddr *)&ctx->q.local_addr,
+ &ctx->q.local_addrlen);
+ if(rv == -1)
+ return CURLE_QUIC_CONNECT_ERROR;
+
+ ngtcp2_addr_init(&ctx->connected_path.local,
+ (struct sockaddr *)&ctx->q.local_addr,
+ ctx->q.local_addrlen);
+ ngtcp2_addr_init(&ctx->connected_path.remote,
+ &sockaddr->sa_addr, sockaddr->addrlen);
+
+ rc = ngtcp2_conn_client_new(&ctx->qconn, &ctx->dcid, &ctx->scid,
+ &ctx->connected_path,
+ NGTCP2_PROTO_VER_V1, &ng_callbacks,
+ &ctx->settings, &ctx->transport_params,
+ NULL, cf);
+ if(rc)
+ return CURLE_QUIC_CONNECT_ERROR;
+
+#ifdef USE_GNUTLS
+ ngtcp2_conn_set_tls_native_handle(ctx->qconn, ctx->gtls->session);
+#else
+ ngtcp2_conn_set_tls_native_handle(ctx->qconn, ctx->ssl);
+#endif
+
+ ngtcp2_ccerr_default(&ctx->last_error);
+
+ ctx->conn_ref.get_conn = get_conn;
+ ctx->conn_ref.user_data = cf;
+
+ return CURLE_OK;
+}
+
+static CURLcode cf_ngtcp2_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool blocking, bool *done)
+{
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ CURLcode result = CURLE_OK;
+ struct cf_call_data save;
+ struct curltime now;
+ struct pkt_io_ctx pktx;
+
+ if(cf->connected) {
+ *done = TRUE;
+ return CURLE_OK;
+ }
+
+ /* Connect the UDP filter first */
+ if(!cf->next->connected) {
+ result = Curl_conn_cf_connect(cf->next, data, blocking, done);
+ if(result || !*done)
+ return result;
+ }
+
+ *done = FALSE;
+ now = Curl_now();
+ pktx_init(&pktx, cf, data);
+
+ CF_DATA_SAVE(save, cf, data);
+
+ if(ctx->reconnect_at.tv_sec && Curl_timediff(now, ctx->reconnect_at) < 0) {
+ /* Not time yet to attempt the next connect */
+ CURL_TRC_CF(data, cf, "waiting for reconnect time");
+ goto out;
+ }
+
+ if(!ctx->qconn) {
+ ctx->started_at = now;
+ result = cf_connect_start(cf, data, &pktx);
+ if(result)
+ goto out;
+ result = cf_progress_egress(cf, data, &pktx);
+ /* we do not expect to be able to recv anything yet */
+ goto out;
+ }
+
+ result = cf_progress_ingress(cf, data, &pktx);
+ if(result)
+ goto out;
+
+ result = cf_progress_egress(cf, data, &pktx);
+ if(result)
+ goto out;
+
+ if(ngtcp2_conn_get_handshake_completed(ctx->qconn)) {
+ ctx->handshake_at = now;
+ CURL_TRC_CF(data, cf, "handshake complete after %dms",
+ (int)Curl_timediff(now, ctx->started_at));
+ result = qng_verify_peer(cf, data);
+ if(!result) {
+ CURL_TRC_CF(data, cf, "peer verified");
+ cf->connected = TRUE;
+ cf->conn->alpn = CURL_HTTP_VERSION_3;
+ *done = TRUE;
+ connkeep(cf->conn, "HTTP/3 default");
+ }
+ }
+
+out:
+ if(result == CURLE_RECV_ERROR && ctx->qconn &&
+ ngtcp2_conn_in_draining_period(ctx->qconn)) {
+ /* When a QUIC server instance is shutting down, it may send us a
+ * CONNECTION_CLOSE right away. Our connection then enters the DRAINING
+ * state. The CONNECT may work in the near future again. Indicate
+ * that as a "weird" reply. */
+ result = CURLE_WEIRD_SERVER_REPLY;
+ }
+
+#ifndef CURL_DISABLE_VERBOSE_STRINGS
+ if(result) {
+ const char *r_ip = NULL;
+ int r_port = 0;
+
+ Curl_cf_socket_peek(cf->next, data, NULL, NULL,
+ &r_ip, &r_port, NULL, NULL);
+ infof(data, "QUIC connect to %s port %u failed: %s",
+ r_ip, r_port, curl_easy_strerror(result));
+ }
+#endif
+ if(!result && ctx->qconn) {
+ result = check_and_set_expiry(cf, data, &pktx);
+ }
+ if(result || *done)
+ CURL_TRC_CF(data, cf, "connect -> %d, done=%d", result, *done);
+ CF_DATA_RESTORE(cf, save);
+ return result;
+}
+
+static CURLcode cf_ngtcp2_query(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int query, int *pres1, void *pres2)
+{
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ struct cf_call_data save;
+
+ switch(query) {
+ case CF_QUERY_MAX_CONCURRENT: {
+ const ngtcp2_transport_params *rp;
+ DEBUGASSERT(pres1);
+
+ CF_DATA_SAVE(save, cf, data);
+ rp = ngtcp2_conn_get_remote_transport_params(ctx->qconn);
+ if(rp)
+ *pres1 = (rp->initial_max_streams_bidi > INT_MAX)?
+ INT_MAX : (int)rp->initial_max_streams_bidi;
+ else /* not arrived yet? */
+ *pres1 = Curl_multi_max_concurrent_streams(data->multi);
+ CURL_TRC_CF(data, cf, "query max_conncurrent -> %d", *pres1);
+ CF_DATA_RESTORE(cf, save);
+ return CURLE_OK;
+ }
+ case CF_QUERY_CONNECT_REPLY_MS:
+ if(ctx->got_first_byte) {
+ timediff_t ms = Curl_timediff(ctx->first_byte_at, ctx->started_at);
+ *pres1 = (ms < INT_MAX)? (int)ms : INT_MAX;
+ }
+ else
+ *pres1 = -1;
+ return CURLE_OK;
+ case CF_QUERY_TIMER_CONNECT: {
+ struct curltime *when = pres2;
+ if(ctx->got_first_byte)
+ *when = ctx->first_byte_at;
+ return CURLE_OK;
+ }
+ case CF_QUERY_TIMER_APPCONNECT: {
+ struct curltime *when = pres2;
+ if(cf->connected)
+ *when = ctx->handshake_at;
+ return CURLE_OK;
+ }
+ default:
+ break;
+ }
+ return cf->next?
+ cf->next->cft->query(cf->next, data, query, pres1, pres2) :
+ CURLE_UNKNOWN_OPTION;
+}
+
+static bool cf_ngtcp2_conn_is_alive(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool *input_pending)
+{
+ struct cf_ngtcp2_ctx *ctx = cf->ctx;
+ bool alive = FALSE;
+ const ngtcp2_transport_params *rp;
+ struct cf_call_data save;
+
+ CF_DATA_SAVE(save, cf, data);
+ *input_pending = FALSE;
+ if(!ctx->qconn)
+ goto out;
+
+ /* Both sides of the QUIC connection announce they max idle times in
+ * the transport parameters. Look at the minimum of both and if
+ * we exceed this, regard the connection as dead. The other side
+ * may have completely purged it and will no longer respond
+ * to any packets from us. */
+ rp = ngtcp2_conn_get_remote_transport_params(ctx->qconn);
+ if(rp) {
+ timediff_t idletime;
+ uint64_t idle_ms = ctx->max_idle_ms;
+
+ if(rp->max_idle_timeout &&
+ (rp->max_idle_timeout / NGTCP2_MILLISECONDS) < idle_ms)
+ idle_ms = (rp->max_idle_timeout / NGTCP2_MILLISECONDS);
+ idletime = Curl_timediff(Curl_now(), ctx->q.last_io);
+ if(idletime > 0 && (uint64_t)idletime > idle_ms)
+ goto out;
+ }
+
+ if(!cf->next || !cf->next->cft->is_alive(cf->next, data, input_pending))
+ goto out;
+
+ alive = TRUE;
+ if(*input_pending) {
+ CURLcode result;
+ /* This happens before we've sent off a request and the connection is
+ not in use by any other transfer, there shouldn't be any data here,
+ only "protocol frames" */
+ *input_pending = FALSE;
+ result = cf_progress_ingress(cf, data, NULL);
+ CURL_TRC_CF(data, cf, "is_alive, progress ingress -> %d", result);
+ alive = result? FALSE : TRUE;
+ }
+
+out:
+ CF_DATA_RESTORE(cf, save);
+ return alive;
+}
+
+struct Curl_cftype Curl_cft_http3 = {
+ "HTTP/3",
+ CF_TYPE_IP_CONNECT | CF_TYPE_SSL | CF_TYPE_MULTIPLEX,
+ 0,
+ cf_ngtcp2_destroy,
+ cf_ngtcp2_connect,
+ cf_ngtcp2_close,
+ Curl_cf_def_get_host,
+ cf_ngtcp2_adjust_pollset,
+ cf_ngtcp2_data_pending,
+ cf_ngtcp2_send,
+ cf_ngtcp2_recv,
+ cf_ngtcp2_data_event,
+ cf_ngtcp2_conn_is_alive,
+ Curl_cf_def_conn_keep_alive,
+ cf_ngtcp2_query,
+};
+
+CURLcode Curl_cf_ngtcp2_create(struct Curl_cfilter **pcf,
+ struct Curl_easy *data,
+ struct connectdata *conn,
+ const struct Curl_addrinfo *ai)
+{
+ struct cf_ngtcp2_ctx *ctx = NULL;
+ struct Curl_cfilter *cf = NULL, *udp_cf = NULL;
+ CURLcode result;
+
+ (void)data;
+ ctx = calloc(1, sizeof(*ctx));
+ if(!ctx) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
+ }
+ ctx->qlogfd = -1;
+ cf_ngtcp2_ctx_clear(ctx);
+
+ result = Curl_cf_create(&cf, &Curl_cft_http3, ctx);
+ if(result)
+ goto out;
+
+ result = Curl_cf_udp_create(&udp_cf, data, conn, ai, TRNSPRT_QUIC);
+ if(result)
+ goto out;
+
+ cf->conn = conn;
+ udp_cf->conn = cf->conn;
+ udp_cf->sockindex = cf->sockindex;
+ cf->next = udp_cf;
+
+out:
+ *pcf = (!result)? cf : NULL;
+ if(result) {
+ if(udp_cf)
+ Curl_conn_cf_discard_sub(cf, udp_cf, data, TRUE);
+ Curl_safefree(cf);
+ Curl_safefree(ctx);
+ }
+ return result;
+}
+
+bool Curl_conn_is_ngtcp2(const struct Curl_easy *data,
+ const struct connectdata *conn,
+ int sockindex)
+{
+ struct Curl_cfilter *cf = conn? conn->cfilter[sockindex] : NULL;
+
+ (void)data;
+ for(; cf; cf = cf->next) {
+ if(cf->cft == &Curl_cft_http3)
+ return TRUE;
+ if(cf->cft->flags & CF_TYPE_IP_CONNECT)
+ return FALSE;
+ }
+ return FALSE;
+}
+
+#endif
diff --git a/lib/vquic/curl_ngtcp2.h b/lib/vquic/curl_ngtcp2.h
new file mode 100644
index 000000000..db3e611bd
--- /dev/null
+++ b/lib/vquic/curl_ngtcp2.h
@@ -0,0 +1,61 @@
+#ifndef HEADER_CURL_VQUIC_CURL_NGTCP2_H
+#define HEADER_CURL_VQUIC_CURL_NGTCP2_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+
+#if defined(USE_NGTCP2) && defined(USE_NGHTTP3)
+
+#ifdef HAVE_NETINET_UDP_H
+#include <netinet/udp.h>
+#endif
+
+#include <ngtcp2/ngtcp2_crypto.h>
+#include <nghttp3/nghttp3.h>
+#ifdef USE_OPENSSL
+#include <openssl/ssl.h>
+#elif defined(USE_WOLFSSL)
+#include <wolfssl/options.h>
+#include <wolfssl/ssl.h>
+#include <wolfssl/quic.h>
+#endif
+
+struct Curl_cfilter;
+
+#include "urldata.h"
+
+void Curl_ngtcp2_ver(char *p, size_t len);
+
+CURLcode Curl_cf_ngtcp2_create(struct Curl_cfilter **pcf,
+ struct Curl_easy *data,
+ struct connectdata *conn,
+ const struct Curl_addrinfo *ai);
+
+bool Curl_conn_is_ngtcp2(const struct Curl_easy *data,
+ const struct connectdata *conn,
+ int sockindex);
+#endif
+
+#endif /* HEADER_CURL_VQUIC_CURL_NGTCP2_H */
diff --git a/lib/vquic/curl_quiche.c b/lib/vquic/curl_quiche.c
new file mode 100644
index 000000000..7123d63ca
--- /dev/null
+++ b/lib/vquic/curl_quiche.c
@@ -0,0 +1,1717 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+
+#ifdef USE_QUICHE
+#include <quiche.h>
+#include <openssl/err.h>
+#include <openssl/ssl.h>
+#include "bufq.h"
+#include "urldata.h"
+#include "cfilters.h"
+#include "cf-socket.h"
+#include "sendf.h"
+#include "strdup.h"
+#include "rand.h"
+#include "strcase.h"
+#include "multiif.h"
+#include "connect.h"
+#include "progress.h"
+#include "strerror.h"
+#include "http1.h"
+#include "vquic.h"
+#include "vquic_int.h"
+#include "curl_quiche.h"
+#include "transfer.h"
+#include "inet_pton.h"
+#include "vtls/openssl.h"
+#include "vtls/keylog.h"
+#include "vtls/vtls.h"
+
+/* The last 3 #include files should be in this order */
+#include "curl_printf.h"
+#include "curl_memory.h"
+#include "memdebug.h"
+
+/* HTTP/3 error values defined in RFC 9114, ch. 8.1 */
+#define CURL_H3_NO_ERROR (0x0100)
+
+#define QUIC_MAX_STREAMS (100)
+
+#define H3_STREAM_WINDOW_SIZE (128 * 1024)
+#define H3_STREAM_CHUNK_SIZE (16 * 1024)
+/* The pool keeps spares around and half of a full stream windows
+ * seems good. More does not seem to improve performance.
+ * The benefit of the pool is that stream buffer to not keep
+ * spares. So memory consumption goes down when streams run empty,
+ * have a large upload done, etc. */
+#define H3_STREAM_POOL_SPARES \
+ (H3_STREAM_WINDOW_SIZE / H3_STREAM_CHUNK_SIZE ) / 2
+/* Receive and Send max number of chunks just follows from the
+ * chunk size and window size */
+#define H3_STREAM_RECV_CHUNKS \
+ (H3_STREAM_WINDOW_SIZE / H3_STREAM_CHUNK_SIZE)
+#define H3_STREAM_SEND_CHUNKS \
+ (H3_STREAM_WINDOW_SIZE / H3_STREAM_CHUNK_SIZE)
+
+/*
+ * Store quiche version info in this buffer.
+ */
+void Curl_quiche_ver(char *p, size_t len)
+{
+ (void)msnprintf(p, len, "quiche/%s", quiche_version());
+}
+
+static void keylog_callback(const SSL *ssl, const char *line)
+{
+ (void)ssl;
+ Curl_tls_keylog_write_line(line);
+}
+
+struct cf_quiche_ctx {
+ struct cf_quic_ctx q;
+ struct ssl_peer peer;
+ quiche_conn *qconn;
+ quiche_config *cfg;
+ quiche_h3_conn *h3c;
+ quiche_h3_config *h3config;
+ uint8_t scid[QUICHE_MAX_CONN_ID_LEN];
+ SSL_CTX *sslctx;
+ SSL *ssl;
+ struct curltime started_at; /* time the current attempt started */
+ struct curltime handshake_at; /* time connect handshake finished */
+ struct curltime first_byte_at; /* when first byte was recvd */
+ struct curltime reconnect_at; /* time the next attempt should start */
+ struct bufc_pool stream_bufcp; /* chunk pool for streams */
+ curl_off_t data_recvd;
+ uint64_t max_idle_ms; /* max idle time for QUIC conn */
+ BIT(goaway); /* got GOAWAY from server */
+ BIT(got_first_byte); /* if first byte was received */
+ BIT(x509_store_setup); /* if x509 store has been set up */
+};
+
+#ifdef DEBUG_QUICHE
+static void quiche_debug_log(const char *line, void *argp)
+{
+ (void)argp;
+ fprintf(stderr, "%s\n", line);
+}
+#endif
+
+static void cf_quiche_ctx_clear(struct cf_quiche_ctx *ctx)
+{
+ if(ctx) {
+ vquic_ctx_free(&ctx->q);
+ if(ctx->qconn)
+ quiche_conn_free(ctx->qconn);
+ if(ctx->h3config)
+ quiche_h3_config_free(ctx->h3config);
+ if(ctx->h3c)
+ quiche_h3_conn_free(ctx->h3c);
+ if(ctx->cfg)
+ quiche_config_free(ctx->cfg);
+ Curl_bufcp_free(&ctx->stream_bufcp);
+ Curl_ssl_peer_cleanup(&ctx->peer);
+
+ memset(ctx, 0, sizeof(*ctx));
+ }
+}
+
+static CURLcode quic_x509_store_setup(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_quiche_ctx *ctx = cf->ctx;
+ struct ssl_primary_config *conn_config;
+
+ conn_config = Curl_ssl_cf_get_primary_config(cf);
+ if(!conn_config)
+ return CURLE_FAILED_INIT;
+
+ if(!ctx->x509_store_setup) {
+ if(conn_config->verifypeer) {
+ const char * const ssl_cafile = conn_config->CAfile;
+ const char * const ssl_capath = conn_config->CApath;
+ if(ssl_cafile || ssl_capath) {
+ SSL_CTX_set_verify(ctx->sslctx, SSL_VERIFY_PEER, NULL);
+ /* tell OpenSSL where to find CA certificates that are used to verify
+ the server's certificate. */
+ if(!SSL_CTX_load_verify_locations(ctx->sslctx, ssl_cafile,
+ ssl_capath)) {
+ /* Fail if we insist on successfully verifying the server. */
+ failf(data, "error setting certificate verify locations:"
+ " CAfile: %s CApath: %s",
+ ssl_cafile ? ssl_cafile : "none",
+ ssl_capath ? ssl_capath : "none");
+ return CURLE_SSL_CACERT_BADFILE;
+ }
+ infof(data, " CAfile: %s", ssl_cafile ? ssl_cafile : "none");
+ infof(data, " CApath: %s", ssl_capath ? ssl_capath : "none");
+ }
+#ifdef CURL_CA_FALLBACK
+ else {
+ /* verifying the peer without any CA certificates won't work so
+ use openssl's built-in default as fallback */
+ SSL_CTX_set_default_verify_paths(ctx->sslctx);
+ }
+#endif
+ }
+ ctx->x509_store_setup = TRUE;
+ }
+ return CURLE_OK;
+}
+
+static CURLcode quic_ssl_setup(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct cf_quiche_ctx *ctx = cf->ctx;
+ struct ssl_primary_config *conn_config;
+ CURLcode result;
+
+ conn_config = Curl_ssl_cf_get_primary_config(cf);
+ if(!conn_config)
+ return CURLE_FAILED_INIT;
+
+ result = Curl_ssl_peer_init(&ctx->peer, cf);
+ if(result)
+ return result;
+
+ DEBUGASSERT(!ctx->sslctx);
+ ctx->sslctx = SSL_CTX_new(TLS_method());
+ if(!ctx->sslctx)
+ return CURLE_OUT_OF_MEMORY;
+
+ SSL_CTX_set_alpn_protos(ctx->sslctx,
+ (const uint8_t *)QUICHE_H3_APPLICATION_PROTOCOL,
+ sizeof(QUICHE_H3_APPLICATION_PROTOCOL) - 1);
+
+ SSL_CTX_set_default_verify_paths(ctx->sslctx);
+
+ /* Open the file if a TLS or QUIC backend has not done this before. */
+ Curl_tls_keylog_open();
+ if(Curl_tls_keylog_enabled()) {
+ SSL_CTX_set_keylog_callback(ctx->sslctx, keylog_callback);
+ }
+
+ if(conn_config->curves &&
+ !SSL_CTX_set1_curves_list(ctx->sslctx, conn_config->curves)) {
+ failf(data, "failed setting curves list for QUIC: '%s'",
+ conn_config->curves);
+ return CURLE_SSL_CIPHER;
+ }
+
+ ctx->ssl = SSL_new(ctx->sslctx);
+ if(!ctx->ssl)
+ return CURLE_QUIC_CONNECT_ERROR;
+
+ SSL_set_app_data(ctx->ssl, cf);
+
+ if(ctx->peer.sni) {
+ if(!SSL_set_tlsext_host_name(ctx->ssl, ctx->peer.sni)) {
+ failf(data, "Failed set SNI");
+ SSL_free(ctx->ssl);
+ ctx->ssl = NULL;
+ return CURLE_QUIC_CONNECT_ERROR;
+ }
+ }
+
+ return CURLE_OK;
+}
+
+/**
+ * All about the H3 internals of a stream
+ */
+struct stream_ctx {
+ int64_t id; /* HTTP/3 protocol stream identifier */
+ struct bufq recvbuf; /* h3 response */
+ struct h1_req_parser h1; /* h1 request parsing */
+ uint64_t error3; /* HTTP/3 stream error code */
+ curl_off_t upload_left; /* number of request bytes left to upload */
+ bool closed; /* TRUE on stream close */
+ bool reset; /* TRUE on stream reset */
+ bool send_closed; /* stream is locally closed */
+ bool resp_hds_complete; /* complete, final response has been received */
+ bool resp_got_header; /* TRUE when h3 stream has recvd some HEADER */
+ BIT(quic_flow_blocked); /* stream is blocked by QUIC flow control */
+};
+
+#define H3_STREAM_CTX(d) ((struct stream_ctx *)(((d) && (d)->req.p.http)? \
+ ((struct HTTP *)(d)->req.p.http)->h3_ctx \
+ : NULL))
+#define H3_STREAM_LCTX(d) ((struct HTTP *)(d)->req.p.http)->h3_ctx
+#define H3_STREAM_ID(d) (H3_STREAM_CTX(d)? \
+ H3_STREAM_CTX(d)->id : -2)
+
+static void check_resumes(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct Curl_easy *sdata;
+ struct stream_ctx *stream;
+
+ DEBUGASSERT(data->multi);
+ for(sdata = data->multi->easyp; sdata; sdata = sdata->next) {
+ if(sdata->conn == data->conn) {
+ stream = H3_STREAM_CTX(sdata);
+ if(stream && stream->quic_flow_blocked) {
+ stream->quic_flow_blocked = FALSE;
+ Curl_expire(data, 0, EXPIRE_RUN_NOW);
+ CURL_TRC_CF(data, cf, "[%"PRId64"] unblock", stream->id);
+ }
+ }
+ }
+}
+
+static CURLcode h3_data_setup(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_quiche_ctx *ctx = cf->ctx;
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+
+ if(stream)
+ return CURLE_OK;
+
+ stream = calloc(1, sizeof(*stream));
+ if(!stream)
+ return CURLE_OUT_OF_MEMORY;
+
+ H3_STREAM_LCTX(data) = stream;
+ stream->id = -1;
+ Curl_bufq_initp(&stream->recvbuf, &ctx->stream_bufcp,
+ H3_STREAM_RECV_CHUNKS, BUFQ_OPT_SOFT_LIMIT);
+ Curl_h1_req_parse_init(&stream->h1, H1_PARSE_DEFAULT_MAX_LINE_LEN);
+ return CURLE_OK;
+}
+
+static void h3_data_done(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct cf_quiche_ctx *ctx = cf->ctx;
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+
+ (void)cf;
+ if(stream) {
+ CURL_TRC_CF(data, cf, "[%"PRId64"] easy handle is done", stream->id);
+ if(ctx->qconn && !stream->closed) {
+ quiche_conn_stream_shutdown(ctx->qconn, stream->id,
+ QUICHE_SHUTDOWN_READ, CURL_H3_NO_ERROR);
+ if(!stream->send_closed) {
+ quiche_conn_stream_shutdown(ctx->qconn, stream->id,
+ QUICHE_SHUTDOWN_WRITE, CURL_H3_NO_ERROR);
+ stream->send_closed = TRUE;
+ }
+ stream->closed = TRUE;
+ }
+ Curl_bufq_free(&stream->recvbuf);
+ Curl_h1_req_parse_free(&stream->h1);
+ free(stream);
+ H3_STREAM_LCTX(data) = NULL;
+ }
+}
+
+static void drain_stream(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+ unsigned char bits;
+
+ (void)cf;
+ bits = CURL_CSELECT_IN;
+ if(stream && !stream->send_closed && stream->upload_left)
+ bits |= CURL_CSELECT_OUT;
+ if(data->state.dselect_bits != bits) {
+ data->state.dselect_bits = bits;
+ Curl_expire(data, 0, EXPIRE_RUN_NOW);
+ }
+}
+
+static struct Curl_easy *get_stream_easy(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int64_t stream3_id)
+{
+ struct Curl_easy *sdata;
+
+ (void)cf;
+ if(H3_STREAM_ID(data) == stream3_id) {
+ return data;
+ }
+ else {
+ DEBUGASSERT(data->multi);
+ for(sdata = data->multi->easyp; sdata; sdata = sdata->next) {
+ if((sdata->conn == data->conn) && H3_STREAM_ID(sdata) == stream3_id) {
+ return sdata;
+ }
+ }
+ }
+ return NULL;
+}
+
+/*
+ * write_resp_raw() copies response data in raw format to the `data`'s
+ * receive buffer. If not enough space is available, it appends to the
+ * `data`'s overflow buffer.
+ */
+static CURLcode write_resp_raw(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ const void *mem, size_t memlen)
+{
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+ CURLcode result = CURLE_OK;
+ ssize_t nwritten;
+
+ (void)cf;
+ if(!stream)
+ return CURLE_RECV_ERROR;
+ nwritten = Curl_bufq_write(&stream->recvbuf, mem, memlen, &result);
+ if(nwritten < 0)
+ return result;
+
+ if((size_t)nwritten < memlen) {
+ /* This MUST not happen. Our recbuf is dimensioned to hold the
+ * full max_stream_window and then some for this very reason. */
+ DEBUGASSERT(0);
+ return CURLE_RECV_ERROR;
+ }
+ return result;
+}
+
+struct cb_ctx {
+ struct Curl_cfilter *cf;
+ struct Curl_easy *data;
+};
+
+static int cb_each_header(uint8_t *name, size_t name_len,
+ uint8_t *value, size_t value_len,
+ void *argp)
+{
+ struct cb_ctx *x = argp;
+ struct stream_ctx *stream = H3_STREAM_CTX(x->data);
+ CURLcode result;
+
+ if(!stream)
+ return CURLE_OK;
+
+ if((name_len == 7) && !strncmp(HTTP_PSEUDO_STATUS, (char *)name, 7)) {
+ CURL_TRC_CF(x->data, x->cf, "[%" PRId64 "] status: %.*s",
+ stream->id, (int)value_len, value);
+ result = write_resp_raw(x->cf, x->data, "HTTP/3 ", sizeof("HTTP/3 ") - 1);
+ if(!result)
+ result = write_resp_raw(x->cf, x->data, value, value_len);
+ if(!result)
+ result = write_resp_raw(x->cf, x->data, " \r\n", 3);
+ }
+ else {
+ CURL_TRC_CF(x->data, x->cf, "[%" PRId64 "] header: %.*s: %.*s",
+ stream->id, (int)name_len, name,
+ (int)value_len, value);
+ result = write_resp_raw(x->cf, x->data, name, name_len);
+ if(!result)
+ result = write_resp_raw(x->cf, x->data, ": ", 2);
+ if(!result)
+ result = write_resp_raw(x->cf, x->data, value, value_len);
+ if(!result)
+ result = write_resp_raw(x->cf, x->data, "\r\n", 2);
+ }
+ if(result) {
+ CURL_TRC_CF(x->data, x->cf, "[%"PRId64"] on header error %d",
+ stream->id, result);
+ }
+ return result;
+}
+
+static ssize_t stream_resp_read(void *reader_ctx,
+ unsigned char *buf, size_t len,
+ CURLcode *err)
+{
+ struct cb_ctx *x = reader_ctx;
+ struct cf_quiche_ctx *ctx = x->cf->ctx;
+ struct stream_ctx *stream = H3_STREAM_CTX(x->data);
+ ssize_t nread;
+
+ if(!stream) {
+ *err = CURLE_RECV_ERROR;
+ return -1;
+ }
+
+ nread = quiche_h3_recv_body(ctx->h3c, ctx->qconn, stream->id,
+ buf, len);
+ if(nread >= 0) {
+ *err = CURLE_OK;
+ return nread;
+ }
+ else {
+ *err = CURLE_AGAIN;
+ return -1;
+ }
+}
+
+static CURLcode cf_recv_body(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+ ssize_t nwritten;
+ struct cb_ctx cb_ctx;
+ CURLcode result = CURLE_OK;
+
+ if(!stream)
+ return CURLE_RECV_ERROR;
+
+ if(!stream->resp_hds_complete) {
+ result = write_resp_raw(cf, data, "\r\n", 2);
+ if(result)
+ return result;
+ stream->resp_hds_complete = TRUE;
+ }
+
+ cb_ctx.cf = cf;
+ cb_ctx.data = data;
+ nwritten = Curl_bufq_slurp(&stream->recvbuf,
+ stream_resp_read, &cb_ctx, &result);
+
+ if(nwritten < 0 && result != CURLE_AGAIN) {
+ CURL_TRC_CF(data, cf, "[%"PRId64"] recv_body error %zd",
+ stream->id, nwritten);
+ failf(data, "Error %d in HTTP/3 response body for stream[%"PRId64"]",
+ result, stream->id);
+ stream->closed = TRUE;
+ stream->reset = TRUE;
+ stream->send_closed = TRUE;
+ streamclose(cf->conn, "Reset of stream");
+ return result;
+ }
+ return CURLE_OK;
+}
+
+#ifdef DEBUGBUILD
+static const char *cf_ev_name(quiche_h3_event *ev)
+{
+ switch(quiche_h3_event_type(ev)) {
+ case QUICHE_H3_EVENT_HEADERS:
+ return "HEADERS";
+ case QUICHE_H3_EVENT_DATA:
+ return "DATA";
+ case QUICHE_H3_EVENT_RESET:
+ return "RESET";
+ case QUICHE_H3_EVENT_FINISHED:
+ return "FINISHED";
+ case QUICHE_H3_EVENT_GOAWAY:
+ return "GOAWAY";
+ default:
+ return "Unknown";
+ }
+}
+#else
+#define cf_ev_name(x) ""
+#endif
+
+static CURLcode h3_process_event(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int64_t stream3_id,
+ quiche_h3_event *ev)
+{
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+ struct cb_ctx cb_ctx;
+ CURLcode result = CURLE_OK;
+ int rc;
+
+ if(!stream)
+ return CURLE_OK;
+ DEBUGASSERT(stream3_id == stream->id);
+ switch(quiche_h3_event_type(ev)) {
+ case QUICHE_H3_EVENT_HEADERS:
+ stream->resp_got_header = TRUE;
+ cb_ctx.cf = cf;
+ cb_ctx.data = data;
+ rc = quiche_h3_event_for_each_header(ev, cb_each_header, &cb_ctx);
+ if(rc) {
+ failf(data, "Error %d in HTTP/3 response header for stream[%"PRId64"]",
+ rc, stream3_id);
+ return CURLE_RECV_ERROR;
+ }
+ CURL_TRC_CF(data, cf, "[%"PRId64"] <- [HEADERS]", stream3_id);
+ break;
+
+ case QUICHE_H3_EVENT_DATA:
+ if(!stream->closed) {
+ result = cf_recv_body(cf, data);
+ }
+ break;
+
+ case QUICHE_H3_EVENT_RESET:
+ CURL_TRC_CF(data, cf, "[%"PRId64"] RESET", stream3_id);
+ stream->closed = TRUE;
+ stream->reset = TRUE;
+ stream->send_closed = TRUE;
+ streamclose(cf->conn, "Reset of stream");
+ break;
+
+ case QUICHE_H3_EVENT_FINISHED:
+ CURL_TRC_CF(data, cf, "[%"PRId64"] CLOSED", stream3_id);
+ if(!stream->resp_hds_complete) {
+ result = write_resp_raw(cf, data, "\r\n", 2);
+ if(result)
+ return result;
+ stream->resp_hds_complete = TRUE;
+ }
+ stream->closed = TRUE;
+ streamclose(cf->conn, "End of stream");
+ break;
+
+ case QUICHE_H3_EVENT_GOAWAY:
+ CURL_TRC_CF(data, cf, "[%"PRId64"] <- [GOAWAY]", stream3_id);
+ break;
+
+ default:
+ CURL_TRC_CF(data, cf, "[%"PRId64"] recv, unhandled event %d",
+ stream3_id, quiche_h3_event_type(ev));
+ break;
+ }
+ return result;
+}
+
+static CURLcode cf_poll_events(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_quiche_ctx *ctx = cf->ctx;
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+ struct Curl_easy *sdata;
+ quiche_h3_event *ev;
+ CURLcode result;
+
+ /* Take in the events and distribute them to the transfers. */
+ while(ctx->h3c) {
+ int64_t stream3_id = quiche_h3_conn_poll(ctx->h3c, ctx->qconn, &ev);
+ if(stream3_id == QUICHE_H3_ERR_DONE) {
+ break;
+ }
+ else if(stream3_id < 0) {
+ CURL_TRC_CF(data, cf, "[%"PRId64"] error poll: %"PRId64,
+ stream? stream->id : -1, stream3_id);
+ return CURLE_HTTP3;
+ }
+
+ sdata = get_stream_easy(cf, data, stream3_id);
+ if(!sdata) {
+ CURL_TRC_CF(data, cf, "[%"PRId64"] discard event %s for "
+ "unknown [%"PRId64"]",
+ stream? stream->id : -1, cf_ev_name(ev), stream3_id);
+ }
+ else {
+ result = h3_process_event(cf, sdata, stream3_id, ev);
+ drain_stream(cf, sdata);
+ if(result) {
+ CURL_TRC_CF(data, cf, "[%"PRId64"] error processing event %s "
+ "for [%"PRId64"] -> %d",
+ stream? stream->id : -1, cf_ev_name(ev),
+ stream3_id, result);
+ if(data == sdata) {
+ /* Only report this error to the caller if it is about the
+ * transfer we were called with. Otherwise we fail a transfer
+ * due to a problem in another one. */
+ quiche_h3_event_free(ev);
+ return result;
+ }
+ }
+ quiche_h3_event_free(ev);
+ }
+ }
+ return CURLE_OK;
+}
+
+struct recv_ctx {
+ struct Curl_cfilter *cf;
+ struct Curl_easy *data;
+ int pkts;
+};
+
+static CURLcode recv_pkt(const unsigned char *pkt, size_t pktlen,
+ struct sockaddr_storage *remote_addr,
+ socklen_t remote_addrlen, int ecn,
+ void *userp)
+{
+ struct recv_ctx *r = userp;
+ struct cf_quiche_ctx *ctx = r->cf->ctx;
+ quiche_recv_info recv_info;
+ ssize_t nread;
+
+ (void)ecn;
+ ++r->pkts;
+
+ recv_info.to = (struct sockaddr *)&ctx->q.local_addr;
+ recv_info.to_len = ctx->q.local_addrlen;
+ recv_info.from = (struct sockaddr *)remote_addr;
+ recv_info.from_len = remote_addrlen;
+
+ nread = quiche_conn_recv(ctx->qconn, (unsigned char *)pkt, pktlen,
+ &recv_info);
+ if(nread < 0) {
+ if(QUICHE_ERR_DONE == nread) {
+ CURL_TRC_CF(r->data, r->cf, "ingress, quiche is DONE");
+ return CURLE_OK;
+ }
+ else if(QUICHE_ERR_TLS_FAIL == nread) {
+ long verify_ok = SSL_get_verify_result(ctx->ssl);
+ if(verify_ok != X509_V_OK) {
+ failf(r->data, "SSL certificate problem: %s",
+ X509_verify_cert_error_string(verify_ok));
+ return CURLE_PEER_FAILED_VERIFICATION;
+ }
+ }
+ else {
+ failf(r->data, "quiche_conn_recv() == %zd", nread);
+ return CURLE_RECV_ERROR;
+ }
+ }
+ else if((size_t)nread < pktlen) {
+ CURL_TRC_CF(r->data, r->cf, "ingress, quiche only read %zd/%zu bytes",
+ nread, pktlen);
+ }
+
+ return CURLE_OK;
+}
+
+static CURLcode cf_process_ingress(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_quiche_ctx *ctx = cf->ctx;
+ struct recv_ctx rctx;
+ CURLcode result;
+
+ DEBUGASSERT(ctx->qconn);
+ result = quic_x509_store_setup(cf, data);
+ if(result)
+ return result;
+
+ rctx.cf = cf;
+ rctx.data = data;
+ rctx.pkts = 0;
+
+ result = vquic_recv_packets(cf, data, &ctx->q, 1000, recv_pkt, &rctx);
+ if(result)
+ return result;
+
+ if(rctx.pkts > 0) {
+ /* quiche digested ingress packets. It might have opened flow control
+ * windows again. */
+ check_resumes(cf, data);
+ }
+ return cf_poll_events(cf, data);
+}
+
+struct read_ctx {
+ struct Curl_cfilter *cf;
+ struct Curl_easy *data;
+ quiche_send_info send_info;
+};
+
+static ssize_t read_pkt_to_send(void *userp,
+ unsigned char *buf, size_t buflen,
+ CURLcode *err)
+{
+ struct read_ctx *x = userp;
+ struct cf_quiche_ctx *ctx = x->cf->ctx;
+ ssize_t nwritten;
+
+ nwritten = quiche_conn_send(ctx->qconn, buf, buflen, &x->send_info);
+ if(nwritten == QUICHE_ERR_DONE) {
+ *err = CURLE_AGAIN;
+ return -1;
+ }
+
+ if(nwritten < 0) {
+ failf(x->data, "quiche_conn_send returned %zd", nwritten);
+ *err = CURLE_SEND_ERROR;
+ return -1;
+ }
+ *err = CURLE_OK;
+ return nwritten;
+}
+
+/*
+ * flush_egress drains the buffers and sends off data.
+ * Calls failf() on errors.
+ */
+static CURLcode cf_flush_egress(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_quiche_ctx *ctx = cf->ctx;
+ ssize_t nread;
+ CURLcode result;
+ int64_t expiry_ns;
+ int64_t timeout_ns;
+ struct read_ctx readx;
+ size_t pkt_count, gsolen;
+
+ expiry_ns = quiche_conn_timeout_as_nanos(ctx->qconn);
+ if(!expiry_ns) {
+ quiche_conn_on_timeout(ctx->qconn);
+ if(quiche_conn_is_closed(ctx->qconn)) {
+ failf(data, "quiche_conn_on_timeout closed the connection");
+ return CURLE_SEND_ERROR;
+ }
+ }
+
+ result = vquic_flush(cf, data, &ctx->q);
+ if(result) {
+ if(result == CURLE_AGAIN) {
+ Curl_expire(data, 1, EXPIRE_QUIC);
+ return CURLE_OK;
+ }
+ return result;
+ }
+
+ readx.cf = cf;
+ readx.data = data;
+ memset(&readx.send_info, 0, sizeof(readx.send_info));
+ pkt_count = 0;
+ gsolen = quiche_conn_max_send_udp_payload_size(ctx->qconn);
+ for(;;) {
+ /* add the next packet to send, if any, to our buffer */
+ nread = Curl_bufq_sipn(&ctx->q.sendbuf, 0,
+ read_pkt_to_send, &readx, &result);
+ if(nread < 0) {
+ if(result != CURLE_AGAIN)
+ return result;
+ /* Nothing more to add, flush and leave */
+ result = vquic_send(cf, data, &ctx->q, gsolen);
+ if(result) {
+ if(result == CURLE_AGAIN) {
+ Curl_expire(data, 1, EXPIRE_QUIC);
+ return CURLE_OK;
+ }
+ return result;
+ }
+ goto out;
+ }
+
+ ++pkt_count;
+ if((size_t)nread < gsolen || pkt_count >= MAX_PKT_BURST) {
+ result = vquic_send(cf, data, &ctx->q, gsolen);
+ if(result) {
+ if(result == CURLE_AGAIN) {
+ Curl_expire(data, 1, EXPIRE_QUIC);
+ return CURLE_OK;
+ }
+ goto out;
+ }
+ pkt_count = 0;
+ }
+ }
+
+out:
+ timeout_ns = quiche_conn_timeout_as_nanos(ctx->qconn);
+ if(timeout_ns % 1000000)
+ timeout_ns += 1000000;
+ /* expire resolution is milliseconds */
+ Curl_expire(data, (timeout_ns / 1000000), EXPIRE_QUIC);
+ return result;
+}
+
+static ssize_t recv_closed_stream(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ CURLcode *err)
+{
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+ ssize_t nread = -1;
+
+ DEBUGASSERT(stream);
+ if(stream->reset) {
+ failf(data,
+ "HTTP/3 stream %" PRId64 " reset by server", stream->id);
+ *err = stream->resp_got_header? CURLE_PARTIAL_FILE : CURLE_RECV_ERROR;
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] cf_recv, was reset -> %d",
+ stream->id, *err);
+ }
+ else if(!stream->resp_got_header) {
+ failf(data,
+ "HTTP/3 stream %" PRId64 " was closed cleanly, but before getting"
+ " all response header fields, treated as error",
+ stream->id);
+ /* *err = CURLE_PARTIAL_FILE; */
+ *err = CURLE_RECV_ERROR;
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] cf_recv, closed incomplete"
+ " -> %d", stream->id, *err);
+ }
+ else {
+ *err = CURLE_OK;
+ nread = 0;
+ }
+ return nread;
+}
+
+static ssize_t cf_quiche_recv(struct Curl_cfilter *cf, struct Curl_easy *data,
+ char *buf, size_t len, CURLcode *err)
+{
+ struct cf_quiche_ctx *ctx = cf->ctx;
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+ ssize_t nread = -1;
+ CURLcode result;
+
+ vquic_ctx_update_time(&ctx->q);
+
+ if(!stream) {
+ *err = CURLE_RECV_ERROR;
+ return -1;
+ }
+
+ if(!Curl_bufq_is_empty(&stream->recvbuf)) {
+ nread = Curl_bufq_read(&stream->recvbuf,
+ (unsigned char *)buf, len, err);
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] read recvbuf(len=%zu) "
+ "-> %zd, %d", stream->id, len, nread, *err);
+ if(nread < 0)
+ goto out;
+ }
+
+ if(cf_process_ingress(cf, data)) {
+ CURL_TRC_CF(data, cf, "cf_recv, error on ingress");
+ *err = CURLE_RECV_ERROR;
+ nread = -1;
+ goto out;
+ }
+
+ /* recvbuf had nothing before, maybe after progressing ingress? */
+ if(nread < 0 && !Curl_bufq_is_empty(&stream->recvbuf)) {
+ nread = Curl_bufq_read(&stream->recvbuf,
+ (unsigned char *)buf, len, err);
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] read recvbuf(len=%zu) "
+ "-> %zd, %d", stream->id, len, nread, *err);
+ if(nread < 0)
+ goto out;
+ }
+
+ if(nread > 0) {
+ if(stream->closed)
+ drain_stream(cf, data);
+ }
+ else {
+ if(stream->closed) {
+ nread = recv_closed_stream(cf, data, err);
+ goto out;
+ }
+ else if(quiche_conn_is_draining(ctx->qconn)) {
+ failf(data, "QUIC connection is draining");
+ *err = CURLE_HTTP3;
+ nread = -1;
+ goto out;
+ }
+ *err = CURLE_AGAIN;
+ nread = -1;
+ }
+
+out:
+ result = cf_flush_egress(cf, data);
+ if(result) {
+ CURL_TRC_CF(data, cf, "cf_recv, flush egress failed");
+ *err = result;
+ nread = -1;
+ }
+ if(nread > 0)
+ ctx->data_recvd += nread;
+ CURL_TRC_CF(data, cf, "[%"PRId64"] cf_recv(total=%"
+ CURL_FORMAT_CURL_OFF_T ") -> %zd, %d",
+ stream->id, ctx->data_recvd, nread, *err);
+ return nread;
+}
+
+/* Index where :authority header field will appear in request header
+ field list. */
+#define AUTHORITY_DST_IDX 3
+
+static ssize_t h3_open_stream(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ const void *buf, size_t len,
+ CURLcode *err)
+{
+ struct cf_quiche_ctx *ctx = cf->ctx;
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+ size_t nheader, i;
+ int64_t stream3_id;
+ struct dynhds h2_headers;
+ quiche_h3_header *nva = NULL;
+ ssize_t nwritten;
+
+ if(!stream) {
+ *err = h3_data_setup(cf, data);
+ if(*err) {
+ return -1;
+ }
+ stream = H3_STREAM_CTX(data);
+ DEBUGASSERT(stream);
+ }
+
+ Curl_dynhds_init(&h2_headers, 0, DYN_HTTP_REQUEST);
+
+ DEBUGASSERT(stream);
+ nwritten = Curl_h1_req_parse_read(&stream->h1, buf, len, NULL, 0, err);
+ if(nwritten < 0)
+ goto out;
+ if(!stream->h1.done) {
+ /* need more data */
+ goto out;
+ }
+ DEBUGASSERT(stream->h1.req);
+
+ *err = Curl_http_req_to_h2(&h2_headers, stream->h1.req, data);
+ if(*err) {
+ nwritten = -1;
+ goto out;
+ }
+ /* no longer needed */
+ Curl_h1_req_parse_free(&stream->h1);
+
+ nheader = Curl_dynhds_count(&h2_headers);
+ nva = malloc(sizeof(quiche_h3_header) * nheader);
+ if(!nva) {
+ *err = CURLE_OUT_OF_MEMORY;
+ nwritten = -1;
+ goto out;
+ }
+
+ for(i = 0; i < nheader; ++i) {
+ struct dynhds_entry *e = Curl_dynhds_getn(&h2_headers, i);
+ nva[i].name = (unsigned char *)e->name;
+ nva[i].name_len = e->namelen;
+ nva[i].value = (unsigned char *)e->value;
+ nva[i].value_len = e->valuelen;
+ }
+
+ switch(data->state.httpreq) {
+ case HTTPREQ_POST:
+ case HTTPREQ_POST_FORM:
+ case HTTPREQ_POST_MIME:
+ case HTTPREQ_PUT:
+ if(data->state.infilesize != -1)
+ stream->upload_left = data->state.infilesize;
+ else
+ /* data sending without specifying the data amount up front */
+ stream->upload_left = -1; /* unknown */
+ break;
+ default:
+ stream->upload_left = 0; /* no request body */
+ break;
+ }
+
+ if(stream->upload_left == 0)
+ stream->send_closed = TRUE;
+
+ stream3_id = quiche_h3_send_request(ctx->h3c, ctx->qconn, nva, nheader,
+ stream->send_closed);
+ if(stream3_id < 0) {
+ if(QUICHE_H3_ERR_STREAM_BLOCKED == stream3_id) {
+ /* quiche seems to report this error if the connection window is
+ * exhausted. Which happens frequently and intermittent. */
+ CURL_TRC_CF(data, cf, "[%"PRId64"] blocked", stream->id);
+ stream->quic_flow_blocked = TRUE;
+ *err = CURLE_AGAIN;
+ nwritten = -1;
+ goto out;
+ }
+ else {
+ CURL_TRC_CF(data, cf, "send_request(%s) -> %" PRId64,
+ data->state.url, stream3_id);
+ }
+ *err = CURLE_SEND_ERROR;
+ nwritten = -1;
+ goto out;
+ }
+
+ DEBUGASSERT(stream->id == -1);
+ *err = CURLE_OK;
+ stream->id = stream3_id;
+ stream->closed = FALSE;
+ stream->reset = FALSE;
+
+ if(Curl_trc_is_verbose(data)) {
+ infof(data, "[HTTP/3] [%" PRId64 "] OPENED stream for %s",
+ stream->id, data->state.url);
+ for(i = 0; i < nheader; ++i) {
+ infof(data, "[HTTP/3] [%" PRId64 "] [%.*s: %.*s]", stream->id,
+ (int)nva[i].name_len, nva[i].name,
+ (int)nva[i].value_len, nva[i].value);
+ }
+ }
+
+out:
+ free(nva);
+ Curl_dynhds_free(&h2_headers);
+ return nwritten;
+}
+
+static ssize_t cf_quiche_send(struct Curl_cfilter *cf, struct Curl_easy *data,
+ const void *buf, size_t len, CURLcode *err)
+{
+ struct cf_quiche_ctx *ctx = cf->ctx;
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+ CURLcode result;
+ ssize_t nwritten;
+
+ vquic_ctx_update_time(&ctx->q);
+
+ *err = cf_process_ingress(cf, data);
+ if(*err) {
+ nwritten = -1;
+ goto out;
+ }
+
+ if(!stream || stream->id < 0) {
+ nwritten = h3_open_stream(cf, data, buf, len, err);
+ if(nwritten < 0)
+ goto out;
+ stream = H3_STREAM_CTX(data);
+ }
+ else {
+ bool eof = (stream->upload_left >= 0 &&
+ (curl_off_t)len >= stream->upload_left);
+ nwritten = quiche_h3_send_body(ctx->h3c, ctx->qconn, stream->id,
+ (uint8_t *)buf, len, eof);
+ if(nwritten == QUICHE_H3_ERR_DONE || (nwritten == 0 && len > 0)) {
+ /* TODO: we seem to be blocked on flow control and should HOLD
+ * sending. But when do we open again? */
+ if(!quiche_conn_stream_writable(ctx->qconn, stream->id, len)) {
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] send_body(len=%zu) "
+ "-> window exhausted", stream->id, len);
+ stream->quic_flow_blocked = TRUE;
+ }
+ *err = CURLE_AGAIN;
+ nwritten = -1;
+ goto out;
+ }
+ else if(nwritten == QUICHE_H3_TRANSPORT_ERR_INVALID_STREAM_STATE &&
+ stream->closed && stream->resp_hds_complete) {
+ /* sending request body on a stream that has been closed by the
+ * server. If the server has send us a final response, we should
+ * silently discard the send data.
+ * This happens for example on redirects where the server, instead
+ * of reading the full request body just closed the stream after
+ * sending the 30x response.
+ * This is sort of a race: had the transfer loop called recv first,
+ * it would see the response and stop/discard sending on its own- */
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] discarding data"
+ "on closed stream with response", stream->id);
+ *err = CURLE_OK;
+ nwritten = (ssize_t)len;
+ goto out;
+ }
+ else if(nwritten == QUICHE_H3_TRANSPORT_ERR_FINAL_SIZE) {
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] send_body(len=%zu) "
+ "-> exceeds size", stream->id, len);
+ *err = CURLE_SEND_ERROR;
+ nwritten = -1;
+ goto out;
+ }
+ else if(nwritten < 0) {
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] send_body(len=%zu) "
+ "-> quiche err %zd", stream->id, len, nwritten);
+ *err = CURLE_SEND_ERROR;
+ nwritten = -1;
+ goto out;
+ }
+ else {
+ /* quiche accepted all or at least a part of the buf */
+ if(stream->upload_left > 0) {
+ stream->upload_left = (nwritten < stream->upload_left)?
+ (stream->upload_left - nwritten) : 0;
+ }
+ if(stream->upload_left == 0)
+ stream->send_closed = TRUE;
+
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] send body(len=%zu, "
+ "left=%" CURL_FORMAT_CURL_OFF_T ") -> %zd",
+ stream->id, len, stream->upload_left, nwritten);
+ *err = CURLE_OK;
+ }
+ }
+
+out:
+ result = cf_flush_egress(cf, data);
+ if(result) {
+ *err = result;
+ nwritten = -1;
+ }
+ CURL_TRC_CF(data, cf, "[%" PRId64 "] cf_send(len=%zu) -> %zd, %d",
+ stream? stream->id : -1, len, nwritten, *err);
+ return nwritten;
+}
+
+static bool stream_is_writeable(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_quiche_ctx *ctx = cf->ctx;
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+
+ return stream && (quiche_conn_stream_writable(ctx->qconn,
+ (uint64_t)stream->id, 1) > 0);
+}
+
+static void cf_quiche_adjust_pollset(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct easy_pollset *ps)
+{
+ struct cf_quiche_ctx *ctx = cf->ctx;
+ bool want_recv = CURL_WANT_RECV(data);
+ bool want_send = CURL_WANT_SEND(data);
+
+ if(ctx->qconn && (want_recv || want_send)) {
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+ bool c_exhaust, s_exhaust;
+
+ c_exhaust = FALSE; /* Have not found any call in quiche that tells
+ us if the connection itself is blocked */
+ s_exhaust = stream && stream->id >= 0 &&
+ (stream->quic_flow_blocked || !stream_is_writeable(cf, data));
+ want_recv = (want_recv || c_exhaust || s_exhaust);
+ want_send = (!s_exhaust && want_send) ||
+ !Curl_bufq_is_empty(&ctx->q.sendbuf);
+
+ Curl_pollset_set(data, ps, ctx->q.sockfd, want_recv, want_send);
+ }
+}
+
+/*
+ * Called from transfer.c:data_pending to know if we should keep looping
+ * to receive more data from the connection.
+ */
+static bool cf_quiche_data_pending(struct Curl_cfilter *cf,
+ const struct Curl_easy *data)
+{
+ const struct stream_ctx *stream = H3_STREAM_CTX(data);
+ (void)cf;
+ return stream && !Curl_bufq_is_empty(&stream->recvbuf);
+}
+
+static CURLcode h3_data_pause(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool pause)
+{
+ /* TODO: there seems right now no API in quiche to shrink/enlarge
+ * the streams windows. As we do in HTTP/2. */
+ if(!pause) {
+ drain_stream(cf, data);
+ Curl_expire(data, 0, EXPIRE_RUN_NOW);
+ }
+ return CURLE_OK;
+}
+
+static CURLcode cf_quiche_data_event(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int event, int arg1, void *arg2)
+{
+ CURLcode result = CURLE_OK;
+
+ (void)arg1;
+ (void)arg2;
+ switch(event) {
+ case CF_CTRL_DATA_SETUP:
+ break;
+ case CF_CTRL_DATA_PAUSE:
+ result = h3_data_pause(cf, data, (arg1 != 0));
+ break;
+ case CF_CTRL_DATA_DETACH:
+ h3_data_done(cf, data);
+ break;
+ case CF_CTRL_DATA_DONE:
+ h3_data_done(cf, data);
+ break;
+ case CF_CTRL_DATA_DONE_SEND: {
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+ if(stream && !stream->send_closed) {
+ unsigned char body[1];
+ ssize_t sent;
+
+ stream->send_closed = TRUE;
+ stream->upload_left = 0;
+ body[0] = 'X';
+ sent = cf_quiche_send(cf, data, body, 0, &result);
+ CURL_TRC_CF(data, cf, "[%"PRId64"] DONE_SEND -> %zd, %d",
+ stream->id, sent, result);
+ }
+ break;
+ }
+ case CF_CTRL_DATA_IDLE: {
+ struct stream_ctx *stream = H3_STREAM_CTX(data);
+ if(stream && !stream->closed) {
+ result = cf_flush_egress(cf, data);
+ if(result)
+ CURL_TRC_CF(data, cf, "data idle, flush egress -> %d", result);
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ return result;
+}
+
+static CURLcode cf_verify_peer(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_quiche_ctx *ctx = cf->ctx;
+ struct ssl_primary_config *conn_config;
+ CURLcode result = CURLE_OK;
+
+ conn_config = Curl_ssl_cf_get_primary_config(cf);
+ if(!conn_config)
+ return CURLE_FAILED_INIT;
+
+ cf->conn->bits.multiplex = TRUE; /* at least potentially multiplexed */
+ cf->conn->httpversion = 30;
+ cf->conn->bundle->multiuse = BUNDLE_MULTIPLEX;
+
+ if(conn_config->verifyhost) {
+ X509 *server_cert;
+ server_cert = SSL_get_peer_certificate(ctx->ssl);
+ if(!server_cert) {
+ result = CURLE_PEER_FAILED_VERIFICATION;
+ goto out;
+ }
+ result = Curl_ossl_verifyhost(data, cf->conn, &ctx->peer, server_cert);
+ X509_free(server_cert);
+ if(result)
+ goto out;
+ }
+ else
+ CURL_TRC_CF(data, cf, "Skipped certificate verification");
+
+ ctx->h3config = quiche_h3_config_new();
+ if(!ctx->h3config) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
+ }
+
+ /* Create a new HTTP/3 connection on the QUIC connection. */
+ ctx->h3c = quiche_h3_conn_new_with_transport(ctx->qconn, ctx->h3config);
+ if(!ctx->h3c) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
+ }
+ if(data->set.ssl.certinfo)
+ /* asked to gather certificate info */
+ (void)Curl_ossl_certchain(data, ctx->ssl);
+
+out:
+ if(result) {
+ if(ctx->h3config) {
+ quiche_h3_config_free(ctx->h3config);
+ ctx->h3config = NULL;
+ }
+ if(ctx->h3c) {
+ quiche_h3_conn_free(ctx->h3c);
+ ctx->h3c = NULL;
+ }
+ }
+ return result;
+}
+
+static CURLcode cf_connect_start(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_quiche_ctx *ctx = cf->ctx;
+ int rv;
+ CURLcode result;
+ const struct Curl_sockaddr_ex *sockaddr;
+
+ DEBUGASSERT(ctx->q.sockfd != CURL_SOCKET_BAD);
+
+#ifdef DEBUG_QUICHE
+ /* initialize debug log callback only once */
+ static int debug_log_init = 0;
+ if(!debug_log_init) {
+ quiche_enable_debug_logging(quiche_debug_log, NULL);
+ debug_log_init = 1;
+ }
+#endif
+ ctx->max_idle_ms = CURL_QUIC_MAX_IDLE_MS;
+ Curl_bufcp_init(&ctx->stream_bufcp, H3_STREAM_CHUNK_SIZE,
+ H3_STREAM_POOL_SPARES);
+ ctx->data_recvd = 0;
+
+ result = vquic_ctx_init(&ctx->q);
+ if(result)
+ return result;
+
+ ctx->cfg = quiche_config_new(QUICHE_PROTOCOL_VERSION);
+ if(!ctx->cfg) {
+ failf(data, "can't create quiche config");
+ return CURLE_FAILED_INIT;
+ }
+ quiche_config_enable_pacing(ctx->cfg, false);
+ quiche_config_set_max_idle_timeout(ctx->cfg, ctx->max_idle_ms * 1000);
+ quiche_config_set_initial_max_data(ctx->cfg, (1 * 1024 * 1024)
+ /* (QUIC_MAX_STREAMS/2) * H3_STREAM_WINDOW_SIZE */);
+ quiche_config_set_initial_max_streams_bidi(ctx->cfg, QUIC_MAX_STREAMS);
+ quiche_config_set_initial_max_streams_uni(ctx->cfg, QUIC_MAX_STREAMS);
+ quiche_config_set_initial_max_stream_data_bidi_local(ctx->cfg,
+ H3_STREAM_WINDOW_SIZE);
+ quiche_config_set_initial_max_stream_data_bidi_remote(ctx->cfg,
+ H3_STREAM_WINDOW_SIZE);
+ quiche_config_set_initial_max_stream_data_uni(ctx->cfg,
+ H3_STREAM_WINDOW_SIZE);
+ quiche_config_set_disable_active_migration(ctx->cfg, TRUE);
+
+ quiche_config_set_max_connection_window(ctx->cfg,
+ 10 * QUIC_MAX_STREAMS * H3_STREAM_WINDOW_SIZE);
+ quiche_config_set_max_stream_window(ctx->cfg, 10 * H3_STREAM_WINDOW_SIZE);
+ quiche_config_set_application_protos(ctx->cfg,
+ (uint8_t *)
+ QUICHE_H3_APPLICATION_PROTOCOL,
+ sizeof(QUICHE_H3_APPLICATION_PROTOCOL)
+ - 1);
+
+ DEBUGASSERT(!ctx->ssl);
+ DEBUGASSERT(!ctx->sslctx);
+ result = quic_ssl_setup(cf, data);
+ if(result)
+ return result;
+
+ result = Curl_rand(data, ctx->scid, sizeof(ctx->scid));
+ if(result)
+ return result;
+
+ Curl_cf_socket_peek(cf->next, data, &ctx->q.sockfd,
+ &sockaddr, NULL, NULL, NULL, NULL);
+ ctx->q.local_addrlen = sizeof(ctx->q.local_addr);
+ rv = getsockname(ctx->q.sockfd, (struct sockaddr *)&ctx->q.local_addr,
+ &ctx->q.local_addrlen);
+ if(rv == -1)
+ return CURLE_QUIC_CONNECT_ERROR;
+
+ ctx->qconn = quiche_conn_new_with_tls((const uint8_t *)ctx->scid,
+ sizeof(ctx->scid), NULL, 0,
+ (struct sockaddr *)&ctx->q.local_addr,
+ ctx->q.local_addrlen,
+ &sockaddr->sa_addr, sockaddr->addrlen,
+ ctx->cfg, ctx->ssl, false);
+ if(!ctx->qconn) {
+ failf(data, "can't create quiche connection");
+ return CURLE_OUT_OF_MEMORY;
+ }
+
+ /* Known to not work on Windows */
+#if !defined(_WIN32) && defined(HAVE_QUICHE_CONN_SET_QLOG_FD)
+ {
+ int qfd;
+ (void)Curl_qlogdir(data, ctx->scid, sizeof(ctx->scid), &qfd);
+ if(qfd != -1)
+ quiche_conn_set_qlog_fd(ctx->qconn, qfd,
+ "qlog title", "curl qlog");
+ }
+#endif
+
+ result = cf_flush_egress(cf, data);
+ if(result)
+ return result;
+
+ {
+ unsigned char alpn_protocols[] = QUICHE_H3_APPLICATION_PROTOCOL;
+ unsigned alpn_len, offset = 0;
+
+ /* Replace each ALPN length prefix by a comma. */
+ while(offset < sizeof(alpn_protocols) - 1) {
+ alpn_len = alpn_protocols[offset];
+ alpn_protocols[offset] = ',';
+ offset += 1 + alpn_len;
+ }
+
+ CURL_TRC_CF(data, cf, "Sent QUIC client Initial, ALPN: %s",
+ alpn_protocols + 1);
+ }
+
+ return CURLE_OK;
+}
+
+static CURLcode cf_quiche_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool blocking, bool *done)
+{
+ struct cf_quiche_ctx *ctx = cf->ctx;
+ CURLcode result = CURLE_OK;
+
+ if(cf->connected) {
+ *done = TRUE;
+ return CURLE_OK;
+ }
+
+ /* Connect the UDP filter first */
+ if(!cf->next->connected) {
+ result = Curl_conn_cf_connect(cf->next, data, blocking, done);
+ if(result || !*done)
+ return result;
+ }
+
+ *done = FALSE;
+ vquic_ctx_update_time(&ctx->q);
+
+ if(ctx->reconnect_at.tv_sec &&
+ Curl_timediff(ctx->q.last_op, ctx->reconnect_at) < 0) {
+ /* Not time yet to attempt the next connect */
+ CURL_TRC_CF(data, cf, "waiting for reconnect time");
+ goto out;
+ }
+
+ if(!ctx->qconn) {
+ result = cf_connect_start(cf, data);
+ if(result)
+ goto out;
+ ctx->started_at = ctx->q.last_op;
+ result = cf_flush_egress(cf, data);
+ /* we do not expect to be able to recv anything yet */
+ goto out;
+ }
+
+ result = cf_process_ingress(cf, data);
+ if(result)
+ goto out;
+
+ result = cf_flush_egress(cf, data);
+ if(result)
+ goto out;
+
+ if(quiche_conn_is_established(ctx->qconn)) {
+ ctx->handshake_at = ctx->q.last_op;
+ CURL_TRC_CF(data, cf, "handshake complete after %dms",
+ (int)Curl_timediff(ctx->handshake_at, ctx->started_at));
+ result = cf_verify_peer(cf, data);
+ if(!result) {
+ CURL_TRC_CF(data, cf, "peer verified");
+ cf->connected = TRUE;
+ cf->conn->alpn = CURL_HTTP_VERSION_3;
+ *done = TRUE;
+ connkeep(cf->conn, "HTTP/3 default");
+ }
+ }
+ else if(quiche_conn_is_draining(ctx->qconn)) {
+ /* When a QUIC server instance is shutting down, it may send us a
+ * CONNECTION_CLOSE right away. Our connection then enters the DRAINING
+ * state. The CONNECT may work in the near future again. Indicate
+ * that as a "weird" reply. */
+ result = CURLE_WEIRD_SERVER_REPLY;
+ }
+
+out:
+#ifndef CURL_DISABLE_VERBOSE_STRINGS
+ if(result && result != CURLE_AGAIN) {
+ const char *r_ip;
+ int r_port;
+
+ Curl_cf_socket_peek(cf->next, data, NULL, NULL,
+ &r_ip, &r_port, NULL, NULL);
+ infof(data, "connect to %s port %u failed: %s",
+ r_ip, r_port, curl_easy_strerror(result));
+ }
+#endif
+ return result;
+}
+
+static void cf_quiche_close(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct cf_quiche_ctx *ctx = cf->ctx;
+
+ if(ctx) {
+ if(ctx->qconn) {
+ vquic_ctx_update_time(&ctx->q);
+ (void)quiche_conn_close(ctx->qconn, TRUE, 0, NULL, 0);
+ /* flushing the egress is not a failsafe way to deliver all the
+ outstanding packets, but we also don't want to get stuck here... */
+ (void)cf_flush_egress(cf, data);
+ }
+ cf_quiche_ctx_clear(ctx);
+ }
+}
+
+static void cf_quiche_destroy(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct cf_quiche_ctx *ctx = cf->ctx;
+
+ (void)data;
+ cf_quiche_ctx_clear(ctx);
+ free(ctx);
+ cf->ctx = NULL;
+}
+
+static CURLcode cf_quiche_query(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int query, int *pres1, void *pres2)
+{
+ struct cf_quiche_ctx *ctx = cf->ctx;
+
+ switch(query) {
+ case CF_QUERY_MAX_CONCURRENT: {
+ uint64_t max_streams = CONN_INUSE(cf->conn);
+ if(!ctx->goaway) {
+ max_streams += quiche_conn_peer_streams_left_bidi(ctx->qconn);
+ }
+ *pres1 = (max_streams > INT_MAX)? INT_MAX : (int)max_streams;
+ CURL_TRC_CF(data, cf, "query: MAX_CONCURRENT -> %d", *pres1);
+ return CURLE_OK;
+ }
+ case CF_QUERY_CONNECT_REPLY_MS:
+ if(ctx->got_first_byte) {
+ timediff_t ms = Curl_timediff(ctx->first_byte_at, ctx->started_at);
+ *pres1 = (ms < INT_MAX)? (int)ms : INT_MAX;
+ }
+ else
+ *pres1 = -1;
+ return CURLE_OK;
+ case CF_QUERY_TIMER_CONNECT: {
+ struct curltime *when = pres2;
+ if(ctx->got_first_byte)
+ *when = ctx->first_byte_at;
+ return CURLE_OK;
+ }
+ case CF_QUERY_TIMER_APPCONNECT: {
+ struct curltime *when = pres2;
+ if(cf->connected)
+ *when = ctx->handshake_at;
+ return CURLE_OK;
+ }
+ default:
+ break;
+ }
+ return cf->next?
+ cf->next->cft->query(cf->next, data, query, pres1, pres2) :
+ CURLE_UNKNOWN_OPTION;
+}
+
+static bool cf_quiche_conn_is_alive(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool *input_pending)
+{
+ struct cf_quiche_ctx *ctx = cf->ctx;
+ bool alive = TRUE;
+
+ *input_pending = FALSE;
+ if(!ctx->qconn)
+ return FALSE;
+
+ /* Both sides of the QUIC connection announce they max idle times in
+ * the transport parameters. Look at the minimum of both and if
+ * we exceed this, regard the connection as dead. The other side
+ * may have completely purged it and will no longer respond
+ * to any packets from us. */
+ {
+ quiche_transport_params qpeerparams;
+ timediff_t idletime;
+ uint64_t idle_ms = ctx->max_idle_ms;
+
+ if(quiche_conn_peer_transport_params(ctx->qconn, &qpeerparams) &&
+ qpeerparams.peer_max_idle_timeout &&
+ qpeerparams.peer_max_idle_timeout < idle_ms)
+ idle_ms = qpeerparams.peer_max_idle_timeout;
+ idletime = Curl_timediff(Curl_now(), cf->conn->lastused);
+ if(idletime > 0 && (uint64_t)idletime > idle_ms)
+ return FALSE;
+ }
+
+ if(!cf->next || !cf->next->cft->is_alive(cf->next, data, input_pending))
+ return FALSE;
+
+ if(*input_pending) {
+ /* This happens before we've sent off a request and the connection is
+ not in use by any other transfer, there shouldn't be any data here,
+ only "protocol frames" */
+ *input_pending = FALSE;
+ if(cf_process_ingress(cf, data))
+ alive = FALSE;
+ else {
+ alive = TRUE;
+ }
+ }
+
+ return alive;
+}
+
+struct Curl_cftype Curl_cft_http3 = {
+ "HTTP/3",
+ CF_TYPE_IP_CONNECT | CF_TYPE_SSL | CF_TYPE_MULTIPLEX,
+ 0,
+ cf_quiche_destroy,
+ cf_quiche_connect,
+ cf_quiche_close,
+ Curl_cf_def_get_host,
+ cf_quiche_adjust_pollset,
+ cf_quiche_data_pending,
+ cf_quiche_send,
+ cf_quiche_recv,
+ cf_quiche_data_event,
+ cf_quiche_conn_is_alive,
+ Curl_cf_def_conn_keep_alive,
+ cf_quiche_query,
+};
+
+CURLcode Curl_cf_quiche_create(struct Curl_cfilter **pcf,
+ struct Curl_easy *data,
+ struct connectdata *conn,
+ const struct Curl_addrinfo *ai)
+{
+ struct cf_quiche_ctx *ctx = NULL;
+ struct Curl_cfilter *cf = NULL, *udp_cf = NULL;
+ CURLcode result;
+
+ (void)data;
+ (void)conn;
+ ctx = calloc(1, sizeof(*ctx));
+ if(!ctx) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
+ }
+
+ result = Curl_cf_create(&cf, &Curl_cft_http3, ctx);
+ if(result)
+ goto out;
+
+ result = Curl_cf_udp_create(&udp_cf, data, conn, ai, TRNSPRT_QUIC);
+ if(result)
+ goto out;
+
+ udp_cf->conn = cf->conn;
+ udp_cf->sockindex = cf->sockindex;
+ cf->next = udp_cf;
+
+out:
+ *pcf = (!result)? cf : NULL;
+ if(result) {
+ if(udp_cf)
+ Curl_conn_cf_discard_sub(cf, udp_cf, data, TRUE);
+ Curl_safefree(cf);
+ Curl_safefree(ctx);
+ }
+
+ return result;
+}
+
+bool Curl_conn_is_quiche(const struct Curl_easy *data,
+ const struct connectdata *conn,
+ int sockindex)
+{
+ struct Curl_cfilter *cf = conn? conn->cfilter[sockindex] : NULL;
+
+ (void)data;
+ for(; cf; cf = cf->next) {
+ if(cf->cft == &Curl_cft_http3)
+ return TRUE;
+ if(cf->cft->flags & CF_TYPE_IP_CONNECT)
+ return FALSE;
+ }
+ return FALSE;
+}
+
+#endif
diff --git a/lib/vquic/quiche.h b/lib/vquic/curl_quiche.h
index 2da65f5f4..bce781c1b 100644
--- a/lib/vquic/quiche.h
+++ b/lib/vquic/curl_quiche.h
@@ -1,5 +1,5 @@
-#ifndef HEADER_CURL_VQUIC_QUICHE_H
-#define HEADER_CURL_VQUIC_QUICHE_H
+#ifndef HEADER_CURL_VQUIC_CURL_QUICHE_H
+#define HEADER_CURL_VQUIC_CURL_QUICHE_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -31,28 +31,20 @@
#include <quiche.h>
#include <openssl/ssl.h>
-struct quic_handshake {
- char *buf; /* pointer to the buffer */
- size_t alloclen; /* size of allocation */
- size_t len; /* size of content in buffer */
- size_t nread; /* how many bytes have been read */
-};
-
-struct quicsocket {
- quiche_config *cfg;
- quiche_conn *conn;
- quiche_h3_conn *h3c;
- quiche_h3_config *h3config;
- uint8_t scid[QUICHE_MAX_CONN_ID_LEN];
- curl_socket_t sockfd;
- uint32_t version;
- SSL_CTX *sslctx;
- SSL *ssl;
- bool h3_recving; /* TRUE when in h3-body-reading state */
- struct sockaddr_storage local_addr;
- socklen_t local_addrlen;
-};
+struct Curl_cfilter;
+struct Curl_easy;
+
+void Curl_quiche_ver(char *p, size_t len);
+
+CURLcode Curl_cf_quiche_create(struct Curl_cfilter **pcf,
+ struct Curl_easy *data,
+ struct connectdata *conn,
+ const struct Curl_addrinfo *ai);
+
+bool Curl_conn_is_quiche(const struct Curl_easy *data,
+ const struct connectdata *conn,
+ int sockindex);
#endif
-#endif /* HEADER_CURL_VQUIC_QUICHE_H */
+#endif /* HEADER_CURL_VQUIC_CURL_QUICHE_H */
diff --git a/lib/vquic/msh3.c b/lib/vquic/msh3.c
deleted file mode 100644
index c3e58e726..000000000
--- a/lib/vquic/msh3.c
+++ /dev/null
@@ -1,527 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed 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 "curl_setup.h"
-
-#ifdef USE_MSH3
-
-#include "urldata.h"
-#include "timeval.h"
-#include "multiif.h"
-#include "sendf.h"
-#include "connect.h"
-#include "h2h3.h"
-#include "msh3.h"
-
-/* The last 3 #include files should be in this order */
-#include "curl_printf.h"
-#include "curl_memory.h"
-#include "memdebug.h"
-
-/* #define DEBUG_HTTP3 1 */
-#ifdef DEBUG_HTTP3
-#define H3BUGF(x) x
-#else
-#define H3BUGF(x) do { } while(0)
-#endif
-
-#define MSH3_REQ_INIT_BUF_LEN 8192
-
-static CURLcode msh3_do_it(struct Curl_easy *data, bool *done);
-static int msh3_getsock(struct Curl_easy *data,
- struct connectdata *conn, curl_socket_t *socks);
-static CURLcode msh3_disconnect(struct Curl_easy *data,
- struct connectdata *conn,
- bool dead_connection);
-static unsigned int msh3_conncheck(struct Curl_easy *data,
- struct connectdata *conn,
- unsigned int checks_to_perform);
-static Curl_recv msh3_stream_recv;
-static Curl_send msh3_stream_send;
-static void MSH3_CALL msh3_header_received(MSH3_REQUEST *Request,
- void *IfContext,
- const MSH3_HEADER *Header);
-static void MSH3_CALL msh3_data_received(MSH3_REQUEST *Request,
- void *IfContext, uint32_t Length,
- const uint8_t *Data);
-static void MSH3_CALL msh3_complete(MSH3_REQUEST *Request, void *IfContext,
- bool Aborted, uint64_t AbortError);
-static void MSH3_CALL msh3_shutdown(MSH3_REQUEST *Request, void *IfContext);
-
-static const struct Curl_handler msh3_curl_handler_http3 = {
- "HTTPS", /* scheme */
- ZERO_NULL, /* setup_connection */
- msh3_do_it, /* do_it */
- Curl_http_done, /* done */
- ZERO_NULL, /* do_more */
- ZERO_NULL, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- msh3_getsock, /* proto_getsock */
- msh3_getsock, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- msh3_getsock, /* perform_getsock */
- msh3_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- msh3_conncheck, /* connection_check */
- ZERO_NULL, /* attach connection */
- PORT_HTTP, /* defport */
- CURLPROTO_HTTPS, /* protocol */
- CURLPROTO_HTTP, /* family */
- PROTOPT_SSL | PROTOPT_STREAM /* flags */
-};
-
-static const MSH3_REQUEST_IF msh3_request_if = {
- msh3_header_received,
- msh3_data_received,
- msh3_complete,
- msh3_shutdown
-};
-
-void Curl_quic_ver(char *p, size_t len)
-{
- uint32_t v[4];
- MsH3Version(v);
- (void)msnprintf(p, len, "msh3/%d.%d.%d.%d", v[0], v[1], v[2], v[3]);
-}
-
-CURLcode Curl_quic_connect(struct Curl_easy *data,
- struct connectdata *conn,
- curl_socket_t sockfd,
- int sockindex,
- const struct sockaddr *addr,
- socklen_t addrlen)
-{
- struct quicsocket *qs = &conn->hequic[sockindex];
- bool insecure = !conn->ssl_config.verifypeer;
- memset(qs, 0, sizeof(*qs));
-
- (void)sockfd;
- (void)addr; /* TODO - Pass address along */
- (void)addrlen;
-
- H3BUGF(infof(data, "creating new api/connection"));
-
- qs->api = MsH3ApiOpen();
- if(!qs->api) {
- failf(data, "can't create msh3 api");
- return CURLE_FAILED_INIT;
- }
-
- qs->conn = MsH3ConnectionOpen(qs->api,
- conn->host.name,
- (uint16_t)conn->remote_port,
- insecure);
- if(!qs->conn) {
- failf(data, "can't create msh3 connection");
- if(qs->api) {
- MsH3ApiClose(qs->api);
- }
- return CURLE_FAILED_INIT;
- }
-
- return CURLE_OK;
-}
-
-CURLcode Curl_quic_is_connected(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex,
- bool *connected)
-{
- struct quicsocket *qs = &conn->hequic[sockindex];
- MSH3_CONNECTION_STATE state;
-
- state = MsH3ConnectionGetState(qs->conn, false);
- if(state == MSH3_CONN_HANDSHAKE_FAILED || state == MSH3_CONN_DISCONNECTED) {
- failf(data, "failed to connect, state=%u", (uint32_t)state);
- return CURLE_COULDNT_CONNECT;
- }
-
- if(state == MSH3_CONN_CONNECTED) {
- H3BUGF(infof(data, "connection connected"));
- *connected = true;
- conn->quic = qs;
- conn->recv[sockindex] = msh3_stream_recv;
- conn->send[sockindex] = msh3_stream_send;
- conn->handler = &msh3_curl_handler_http3;
- conn->bits.multiplex = TRUE; /* at least potentially multiplexed */
- conn->httpversion = 30;
- conn->bundle->multiuse = BUNDLE_MULTIPLEX;
- /* TODO - Clean up other happy-eyeballs connection(s)? */
- }
-
- return CURLE_OK;
-}
-
-static int msh3_getsock(struct Curl_easy *data,
- struct connectdata *conn, curl_socket_t *socks)
-{
- struct HTTP *stream = data->req.p.http;
- int bitmap = GETSOCK_BLANK;
-
- socks[0] = conn->sock[FIRSTSOCKET];
-
- if(stream->recv_error) {
- bitmap |= GETSOCK_READSOCK(FIRSTSOCKET);
- data->state.drain++;
- }
- else if(stream->recv_header_len || stream->recv_data_len) {
- bitmap |= GETSOCK_READSOCK(FIRSTSOCKET);
- data->state.drain++;
- }
-
- H3BUGF(infof(data, "msh3_getsock %u", (uint32_t)data->state.drain));
-
- return bitmap;
-}
-
-static CURLcode msh3_do_it(struct Curl_easy *data, bool *done)
-{
- struct HTTP *stream = data->req.p.http;
- H3BUGF(infof(data, "msh3_do_it"));
- stream->recv_buf = malloc(MSH3_REQ_INIT_BUF_LEN);
- if(!stream->recv_buf) {
- return CURLE_OUT_OF_MEMORY;
- }
- stream->req = ZERO_NULL;
- msh3_lock_initialize(&stream->recv_lock);
- stream->recv_buf_alloc = MSH3_REQ_INIT_BUF_LEN;
- stream->recv_header_len = 0;
- stream->recv_header_complete = false;
- stream->recv_data_len = 0;
- stream->recv_data_complete = false;
- stream->recv_error = CURLE_OK;
- return Curl_http(data, done);
-}
-
-static unsigned int msh3_conncheck(struct Curl_easy *data,
- struct connectdata *conn,
- unsigned int checks_to_perform)
-{
- (void)data;
- (void)conn;
- (void)checks_to_perform;
- H3BUGF(infof(data, "msh3_conncheck"));
- return CONNRESULT_NONE;
-}
-
-static void disconnect(struct quicsocket *qs)
-{
- if(qs->conn) {
- MsH3ConnectionClose(qs->conn);
- qs->conn = ZERO_NULL;
- }
- if(qs->api) {
- MsH3ApiClose(qs->api);
- qs->api = ZERO_NULL;
- }
-}
-
-static CURLcode msh3_disconnect(struct Curl_easy *data,
- struct connectdata *conn, bool dead_connection)
-{
- (void)data;
- (void)dead_connection;
- H3BUGF(infof(data, "disconnecting (msh3)"));
- disconnect(conn->quic);
- return CURLE_OK;
-}
-
-void Curl_quic_disconnect(struct Curl_easy *data, struct connectdata *conn,
- int tempindex)
-{
- (void)data;
- if(conn->transport == TRNSPRT_QUIC) {
- H3BUGF(infof(data, "disconnecting QUIC index %u", tempindex));
- disconnect(&conn->hequic[tempindex]);
- }
-}
-
-/* Requires stream->recv_lock to be held */
-static bool msh3request_ensure_room(struct HTTP *stream, size_t len)
-{
- uint8_t *new_recv_buf;
- const size_t cur_recv_len = stream->recv_header_len + stream->recv_data_len;
- if(cur_recv_len + len > stream->recv_buf_alloc) {
- size_t new_recv_buf_alloc_len = stream->recv_buf_alloc;
- do {
- new_recv_buf_alloc_len <<= 1; /* TODO - handle overflow */
- } while(cur_recv_len + len > new_recv_buf_alloc_len);
- new_recv_buf = malloc(new_recv_buf_alloc_len);
- if(!new_recv_buf) {
- return false;
- }
- if(cur_recv_len) {
- memcpy(new_recv_buf, stream->recv_buf, cur_recv_len);
- }
- stream->recv_buf_alloc = new_recv_buf_alloc_len;
- free(stream->recv_buf);
- stream->recv_buf = new_recv_buf;
- }
- return true;
-}
-
-static void MSH3_CALL msh3_header_received(MSH3_REQUEST *Request,
- void *IfContext,
- const MSH3_HEADER *Header)
-{
- struct HTTP *stream = IfContext;
- size_t total_len;
- (void)Request;
-
- if(stream->recv_header_complete) {
- H3BUGF(printf("* ignoring header after data\n"));
- return;
- }
-
- msh3_lock_acquire(&stream->recv_lock);
-
- if((Header->NameLength == 7) &&
- !strncmp(H2H3_PSEUDO_STATUS, (char *)Header->Name, 7)) {
- total_len = 9 + Header->ValueLength;
- if(!msh3request_ensure_room(stream, total_len)) {
- /* TODO - handle error */
- goto release_lock;
- }
- msnprintf((char *)stream->recv_buf + stream->recv_header_len,
- stream->recv_buf_alloc - stream->recv_header_len,
- "HTTP/3 %.*s\n", (int)Header->ValueLength, Header->Value);
- }
- else {
- total_len = Header->NameLength + 4 + Header->ValueLength;
- if(!msh3request_ensure_room(stream, total_len)) {
- /* TODO - handle error */
- goto release_lock;
- }
- msnprintf((char *)stream->recv_buf + stream->recv_header_len,
- stream->recv_buf_alloc - stream->recv_header_len,
- "%.*s: %.*s\n",
- (int)Header->NameLength, Header->Name,
- (int)Header->ValueLength, Header->Value);
- }
-
- stream->recv_header_len += total_len - 1; /* don't include null-terminator */
-
-release_lock:
- msh3_lock_release(&stream->recv_lock);
-}
-
-static void MSH3_CALL msh3_data_received(MSH3_REQUEST *Request,
- void *IfContext, uint32_t Length,
- const uint8_t *Data)
-{
- struct HTTP *stream = IfContext;
- size_t cur_recv_len = stream->recv_header_len + stream->recv_data_len;
- (void)Request;
- H3BUGF(printf("* msh3_data_received %u. %zu buffered, %zu allocated\n",
- Length, cur_recv_len, stream->recv_buf_alloc));
- msh3_lock_acquire(&stream->recv_lock);
- if(!stream->recv_header_complete) {
- H3BUGF(printf("* Headers complete!\n"));
- if(!msh3request_ensure_room(stream, 2)) {
- /* TODO - handle error */
- goto release_lock;
- }
- stream->recv_buf[stream->recv_header_len++] = '\r';
- stream->recv_buf[stream->recv_header_len++] = '\n';
- stream->recv_header_complete = true;
- cur_recv_len += 2;
- }
- if(!msh3request_ensure_room(stream, Length)) {
- /* TODO - handle error */
- goto release_lock;
- }
- memcpy(stream->recv_buf + cur_recv_len, Data, Length);
- stream->recv_data_len += (size_t)Length;
-release_lock:
- msh3_lock_release(&stream->recv_lock);
-}
-
-static void MSH3_CALL msh3_complete(MSH3_REQUEST *Request, void *IfContext,
- bool Aborted, uint64_t AbortError)
-{
- struct HTTP *stream = IfContext;
- (void)Request;
- (void)AbortError;
- H3BUGF(printf("* msh3_complete, aborted=%s\n", Aborted ? "true" : "false"));
- msh3_lock_acquire(&stream->recv_lock);
- if(Aborted) {
- stream->recv_error = CURLE_HTTP3; /* TODO - how do we pass AbortError? */
- }
- stream->recv_header_complete = true;
- stream->recv_data_complete = true;
- msh3_lock_release(&stream->recv_lock);
-}
-
-static void MSH3_CALL msh3_shutdown(MSH3_REQUEST *Request, void *IfContext)
-{
- struct HTTP *stream = IfContext;
- (void)Request;
- (void)stream;
-}
-
-static ssize_t msh3_stream_send(struct Curl_easy *data,
- int sockindex,
- const void *mem,
- size_t len,
- CURLcode *curlcode)
-{
- struct connectdata *conn = data->conn;
- struct HTTP *stream = data->req.p.http;
- struct quicsocket *qs = conn->quic;
- struct h2h3req *hreq;
-
- (void)sockindex;
- /* Sizes must match for cast below to work" */
- DEBUGASSERT(sizeof(MSH3_HEADER) == sizeof(struct h2h3pseudo));
-
- H3BUGF(infof(data, "msh3_stream_send %zu", len));
-
- if(!stream->req) {
- *curlcode = Curl_pseudo_headers(data, mem, len, &hreq);
- if(*curlcode) {
- failf(data, "Curl_pseudo_headers failed");
- return -1;
- }
- H3BUGF(infof(data, "starting request with %zu headers", hreq->entries));
- stream->req = MsH3RequestOpen(qs->conn, &msh3_request_if, stream,
- (MSH3_HEADER*)hreq->header, hreq->entries);
- Curl_pseudo_free(hreq);
- if(!stream->req) {
- failf(data, "request open failed");
- *curlcode = CURLE_SEND_ERROR;
- return -1;
- }
- *curlcode = CURLE_OK;
- return len;
- }
- H3BUGF(infof(data, "send %zd body bytes on request %p", len,
- (void *)stream->req));
- *curlcode = CURLE_SEND_ERROR;
- return -1;
-}
-
-static ssize_t msh3_stream_recv(struct Curl_easy *data,
- int sockindex,
- char *buf,
- size_t buffersize,
- CURLcode *curlcode)
-{
- struct HTTP *stream = data->req.p.http;
- size_t outsize = 0;
- (void)sockindex;
- H3BUGF(infof(data, "msh3_stream_recv %zu", buffersize));
-
- if(stream->recv_error) {
- failf(data, "request aborted");
- *curlcode = stream->recv_error;
- return -1;
- }
-
- msh3_lock_acquire(&stream->recv_lock);
-
- if(stream->recv_header_len) {
- outsize = buffersize;
- if(stream->recv_header_len < outsize) {
- outsize = stream->recv_header_len;
- }
- memcpy(buf, stream->recv_buf, outsize);
- if(outsize < stream->recv_header_len + stream->recv_data_len) {
- memmove(stream->recv_buf, stream->recv_buf + outsize,
- stream->recv_header_len + stream->recv_data_len - outsize);
- }
- stream->recv_header_len -= outsize;
- H3BUGF(infof(data, "returned %zu bytes of headers", outsize));
- }
- else if(stream->recv_data_len) {
- outsize = buffersize;
- if(stream->recv_data_len < outsize) {
- outsize = stream->recv_data_len;
- }
- memcpy(buf, stream->recv_buf, outsize);
- if(outsize < stream->recv_data_len) {
- memmove(stream->recv_buf, stream->recv_buf + outsize,
- stream->recv_data_len - outsize);
- }
- stream->recv_data_len -= outsize;
- H3BUGF(infof(data, "returned %zu bytes of data", outsize));
- }
- else if(stream->recv_data_complete) {
- H3BUGF(infof(data, "receive complete"));
- }
-
- msh3_lock_release(&stream->recv_lock);
-
- return (ssize_t)outsize;
-}
-
-CURLcode Curl_quic_done_sending(struct Curl_easy *data)
-{
- struct connectdata *conn = data->conn;
- H3BUGF(infof(data, "Curl_quic_done_sending"));
- if(conn->handler == &msh3_curl_handler_http3) {
- struct HTTP *stream = data->req.p.http;
- stream->upload_done = TRUE;
- }
-
- return CURLE_OK;
-}
-
-void Curl_quic_done(struct Curl_easy *data, bool premature)
-{
- struct HTTP *stream = data->req.p.http;
- (void)premature;
- H3BUGF(infof(data, "Curl_quic_done"));
- if(stream) {
- if(stream->recv_buf) {
- Curl_safefree(stream->recv_buf);
- msh3_lock_uninitialize(&stream->recv_lock);
- }
- if(stream->req) {
- MsH3RequestClose(stream->req);
- stream->req = ZERO_NULL;
- }
- }
-}
-
-bool Curl_quic_data_pending(const struct Curl_easy *data)
-{
- struct HTTP *stream = data->req.p.http;
- H3BUGF(infof((struct Curl_easy *)data, "Curl_quic_data_pending"));
- return stream->recv_header_len || stream->recv_data_len;
-}
-
-/*
- * Called from transfer.c:Curl_readwrite when neither HTTP level read
- * nor write is performed. It is a good place to handle timer expiry
- * for QUIC transport.
- */
-CURLcode Curl_quic_idle(struct Curl_easy *data)
-{
- (void)data;
- H3BUGF(infof(data, "Curl_quic_idle"));
- return CURLE_OK;
-}
-
-#endif /* USE_MSH3 */
diff --git a/lib/vquic/ngtcp2.c b/lib/vquic/ngtcp2.c
deleted file mode 100644
index 097cca44b..000000000
--- a/lib/vquic/ngtcp2.c
+++ /dev/null
@@ -1,2254 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed 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 "curl_setup.h"
-
-#ifdef USE_NGTCP2
-#include <ngtcp2/ngtcp2.h>
-#include <nghttp3/nghttp3.h>
-#ifdef USE_OPENSSL
-#include <openssl/err.h>
-#ifdef OPENSSL_IS_BORINGSSL
-#include <ngtcp2/ngtcp2_crypto_boringssl.h>
-#else
-#include <ngtcp2/ngtcp2_crypto_openssl.h>
-#endif
-#include "vtls/openssl.h"
-#elif defined(USE_GNUTLS)
-#include <ngtcp2/ngtcp2_crypto_gnutls.h>
-#include "vtls/gtls.h"
-#elif defined(USE_WOLFSSL)
-#include <ngtcp2/ngtcp2_crypto_wolfssl.h>
-#include "vtls/wolfssl.h"
-#endif
-#include "urldata.h"
-#include "sendf.h"
-#include "strdup.h"
-#include "rand.h"
-#include "ngtcp2.h"
-#include "multiif.h"
-#include "strcase.h"
-#include "connect.h"
-#include "strerror.h"
-#include "dynbuf.h"
-#include "vquic.h"
-#include "h2h3.h"
-#include "vtls/keylog.h"
-#include "vtls/vtls.h"
-
-/* The last 3 #include files should be in this order */
-#include "curl_printf.h"
-#include "curl_memory.h"
-#include "memdebug.h"
-
-/* #define DEBUG_NGTCP2 */
-#ifdef CURLDEBUG
-#define DEBUG_HTTP3
-#endif
-#ifdef DEBUG_HTTP3
-#define H3BUGF(x) x
-#else
-#define H3BUGF(x) do { } while(0)
-#endif
-
-#define H3_ALPN_H3_29 "\x5h3-29"
-#define H3_ALPN_H3 "\x2h3"
-
-/*
- * This holds outgoing HTTP/3 stream data that is used by nghttp3 until acked.
- * It is used as a circular buffer. Add new bytes at the end until it reaches
- * the far end, then start over at index 0 again.
- */
-
-#define H3_SEND_SIZE (256*1024)
-struct h3out {
- uint8_t buf[H3_SEND_SIZE];
- size_t used; /* number of bytes used in the buffer */
- size_t windex; /* index in the buffer where to start writing the next
- data block */
-};
-
-#define QUIC_MAX_STREAMS (256*1024)
-#define QUIC_MAX_DATA (1*1024*1024)
-#define QUIC_IDLE_TIMEOUT (60*NGTCP2_SECONDS)
-
-#ifdef USE_OPENSSL
-#define QUIC_CIPHERS \
- "TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_" \
- "POLY1305_SHA256:TLS_AES_128_CCM_SHA256"
-#define QUIC_GROUPS "P-256:X25519:P-384:P-521"
-#elif defined(USE_GNUTLS)
-#define QUIC_PRIORITY \
- "NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-128-GCM:+AES-256-GCM:" \
- "+CHACHA20-POLY1305:+AES-128-CCM:-GROUP-ALL:+GROUP-SECP256R1:" \
- "+GROUP-X25519:+GROUP-SECP384R1:+GROUP-SECP521R1:" \
- "%DISABLE_TLS13_COMPAT_MODE"
-#elif defined(USE_WOLFSSL)
-#define QUIC_CIPHERS \
- "TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_" \
- "POLY1305_SHA256:TLS_AES_128_CCM_SHA256"
-#define QUIC_GROUPS "P-256:P-384:P-521"
-#endif
-
-/* ngtcp2 default congestion controller does not perform pacing. Limit
- the maximum packet burst to MAX_PKT_BURST packets. */
-#define MAX_PKT_BURST 10
-
-static CURLcode ng_process_ingress(struct Curl_easy *data,
- curl_socket_t sockfd,
- struct quicsocket *qs);
-static CURLcode ng_flush_egress(struct Curl_easy *data, int sockfd,
- struct quicsocket *qs);
-static int cb_h3_acked_stream_data(nghttp3_conn *conn, int64_t stream_id,
- uint64_t datalen, void *user_data,
- void *stream_user_data);
-
-static ngtcp2_conn *get_conn(ngtcp2_crypto_conn_ref *conn_ref)
-{
- struct quicsocket *qs = conn_ref->user_data;
- return qs->qconn;
-}
-
-static ngtcp2_tstamp timestamp(void)
-{
- struct curltime ct = Curl_now();
- return ct.tv_sec * NGTCP2_SECONDS + ct.tv_usec * NGTCP2_MICROSECONDS;
-}
-
-#ifdef DEBUG_NGTCP2
-static void quic_printf(void *user_data, const char *fmt, ...)
-{
- va_list ap;
- (void)user_data; /* TODO, use this to do infof() instead long-term */
- va_start(ap, fmt);
- vfprintf(stderr, fmt, ap);
- va_end(ap);
- fprintf(stderr, "\n");
-}
-#endif
-
-static void qlog_callback(void *user_data, uint32_t flags,
- const void *data, size_t datalen)
-{
- struct quicsocket *qs = (struct quicsocket *)user_data;
- (void)flags;
- if(qs->qlogfd != -1) {
- ssize_t rc = write(qs->qlogfd, data, datalen);
- if(rc == -1) {
- /* on write error, stop further write attempts */
- close(qs->qlogfd);
- qs->qlogfd = -1;
- }
- }
-
-}
-
-static void quic_settings(struct quicsocket *qs,
- uint64_t stream_buffer_size)
-{
- ngtcp2_settings *s = &qs->settings;
- ngtcp2_transport_params *t = &qs->transport_params;
- ngtcp2_settings_default(s);
- ngtcp2_transport_params_default(t);
-#ifdef DEBUG_NGTCP2
- s->log_printf = quic_printf;
-#else
- s->log_printf = NULL;
-#endif
- s->initial_ts = timestamp();
- t->initial_max_stream_data_bidi_local = stream_buffer_size;
- t->initial_max_stream_data_bidi_remote = QUIC_MAX_STREAMS;
- t->initial_max_stream_data_uni = QUIC_MAX_STREAMS;
- t->initial_max_data = QUIC_MAX_DATA;
- t->initial_max_streams_bidi = 1;
- t->initial_max_streams_uni = 3;
- t->max_idle_timeout = QUIC_IDLE_TIMEOUT;
- if(qs->qlogfd != -1) {
- s->qlog.write = qlog_callback;
- }
-}
-
-#ifdef USE_OPENSSL
-static void keylog_callback(const SSL *ssl, const char *line)
-{
- (void)ssl;
- Curl_tls_keylog_write_line(line);
-}
-#elif defined(USE_GNUTLS)
-static int keylog_callback(gnutls_session_t session, const char *label,
- const gnutls_datum_t *secret)
-{
- gnutls_datum_t crandom;
- gnutls_datum_t srandom;
-
- gnutls_session_get_random(session, &crandom, &srandom);
- if(crandom.size != 32) {
- return -1;
- }
-
- Curl_tls_keylog_write(label, crandom.data, secret->data, secret->size);
- return 0;
-}
-#elif defined(USE_WOLFSSL)
-#if defined(HAVE_SECRET_CALLBACK)
-static void keylog_callback(const WOLFSSL *ssl, const char *line)
-{
- (void)ssl;
- Curl_tls_keylog_write_line(line);
-}
-#endif
-#endif
-
-static int init_ngh3_conn(struct quicsocket *qs);
-
-#ifdef USE_OPENSSL
-static SSL_CTX *quic_ssl_ctx(struct Curl_easy *data)
-{
- struct connectdata *conn = data->conn;
- SSL_CTX *ssl_ctx = SSL_CTX_new(TLS_method());
-
-#ifdef OPENSSL_IS_BORINGSSL
- if(ngtcp2_crypto_boringssl_configure_client_context(ssl_ctx) != 0) {
- failf(data, "ngtcp2_crypto_boringssl_configure_client_context failed");
- return NULL;
- }
-#else
- if(ngtcp2_crypto_openssl_configure_client_context(ssl_ctx) != 0) {
- failf(data, "ngtcp2_crypto_openssl_configure_client_context failed");
- return NULL;
- }
-#endif
-
- SSL_CTX_set_default_verify_paths(ssl_ctx);
-
-#ifdef OPENSSL_IS_BORINGSSL
- if(SSL_CTX_set1_curves_list(ssl_ctx, QUIC_GROUPS) != 1) {
- failf(data, "SSL_CTX_set1_curves_list failed");
- return NULL;
- }
-#else
- if(SSL_CTX_set_ciphersuites(ssl_ctx, QUIC_CIPHERS) != 1) {
- char error_buffer[256];
- ERR_error_string_n(ERR_get_error(), error_buffer, sizeof(error_buffer));
- failf(data, "SSL_CTX_set_ciphersuites: %s", error_buffer);
- return NULL;
- }
-
- if(SSL_CTX_set1_groups_list(ssl_ctx, QUIC_GROUPS) != 1) {
- failf(data, "SSL_CTX_set1_groups_list failed");
- return NULL;
- }
-#endif
-
- /* Open the file if a TLS or QUIC backend has not done this before. */
- Curl_tls_keylog_open();
- if(Curl_tls_keylog_enabled()) {
- SSL_CTX_set_keylog_callback(ssl_ctx, keylog_callback);
- }
-
- if(conn->ssl_config.verifypeer) {
- const char * const ssl_cafile = conn->ssl_config.CAfile;
- const char * const ssl_capath = conn->ssl_config.CApath;
-
- if(ssl_cafile || ssl_capath) {
- SSL_CTX_set_verify(ssl_ctx, SSL_VERIFY_PEER, NULL);
- /* tell OpenSSL where to find CA certificates that are used to verify
- the server's certificate. */
- if(!SSL_CTX_load_verify_locations(ssl_ctx, ssl_cafile, ssl_capath)) {
- /* Fail if we insist on successfully verifying the server. */
- failf(data, "error setting certificate verify locations:"
- " CAfile: %s CApath: %s",
- ssl_cafile ? ssl_cafile : "none",
- ssl_capath ? ssl_capath : "none");
- return NULL;
- }
- infof(data, " CAfile: %s", ssl_cafile ? ssl_cafile : "none");
- infof(data, " CApath: %s", ssl_capath ? ssl_capath : "none");
- }
-#ifdef CURL_CA_FALLBACK
- else {
- /* verifying the peer without any CA certificates won't work so
- use openssl's built-in default as fallback */
- SSL_CTX_set_default_verify_paths(ssl_ctx);
- }
-#endif
- }
- return ssl_ctx;
-}
-
-static CURLcode quic_set_client_cert(struct Curl_easy *data,
- struct quicsocket *qs)
-{
- struct connectdata *conn = data->conn;
- SSL_CTX *ssl_ctx = qs->sslctx;
- char *const ssl_cert = SSL_SET_OPTION(primary.clientcert);
- const struct curl_blob *ssl_cert_blob = SSL_SET_OPTION(primary.cert_blob);
- const char *const ssl_cert_type = SSL_SET_OPTION(cert_type);
-
- if(ssl_cert || ssl_cert_blob || ssl_cert_type) {
- return Curl_ossl_set_client_cert(
- data, ssl_ctx, ssl_cert, ssl_cert_blob, ssl_cert_type,
- SSL_SET_OPTION(key), SSL_SET_OPTION(key_blob),
- SSL_SET_OPTION(key_type), SSL_SET_OPTION(key_passwd));
- }
-
- return CURLE_OK;
-}
-
-/** SSL callbacks ***/
-
-static int quic_init_ssl(struct quicsocket *qs)
-{
- const uint8_t *alpn = NULL;
- size_t alpnlen = 0;
- /* this will need some attention when HTTPS proxy over QUIC get fixed */
- const char * const hostname = qs->conn->host.name;
-
- DEBUGASSERT(!qs->ssl);
- qs->ssl = SSL_new(qs->sslctx);
-
- SSL_set_app_data(qs->ssl, &qs->conn_ref);
- SSL_set_connect_state(qs->ssl);
- SSL_set_quic_use_legacy_codepoint(qs->ssl, 0);
-
- alpn = (const uint8_t *)H3_ALPN_H3_29 H3_ALPN_H3;
- alpnlen = sizeof(H3_ALPN_H3_29) - 1 + sizeof(H3_ALPN_H3) - 1;
- if(alpn)
- SSL_set_alpn_protos(qs->ssl, alpn, (int)alpnlen);
-
- /* set SNI */
- SSL_set_tlsext_host_name(qs->ssl, hostname);
- return 0;
-}
-#elif defined(USE_GNUTLS)
-static int quic_init_ssl(struct quicsocket *qs)
-{
- gnutls_datum_t alpn[2];
- /* this will need some attention when HTTPS proxy over QUIC get fixed */
- const char * const hostname = qs->conn->host.name;
- int rc;
-
- DEBUGASSERT(!qs->ssl);
-
- gnutls_init(&qs->ssl, GNUTLS_CLIENT);
- gnutls_session_set_ptr(qs->ssl, &qs->conn_ref);
-
- if(ngtcp2_crypto_gnutls_configure_client_session(qs->ssl) != 0) {
- H3BUGF(fprintf(stderr,
- "ngtcp2_crypto_gnutls_configure_client_session failed\n"));
- return 1;
- }
-
- rc = gnutls_priority_set_direct(qs->ssl, QUIC_PRIORITY, NULL);
- if(rc < 0) {
- H3BUGF(fprintf(stderr, "gnutls_priority_set_direct failed: %s\n",
- gnutls_strerror(rc)));
- return 1;
- }
-
- /* Open the file if a TLS or QUIC backend has not done this before. */
- Curl_tls_keylog_open();
- if(Curl_tls_keylog_enabled()) {
- gnutls_session_set_keylog_function(qs->ssl, keylog_callback);
- }
-
- if(qs->cred)
- gnutls_certificate_free_credentials(qs->cred);
-
- rc = gnutls_certificate_allocate_credentials(&qs->cred);
- if(rc < 0) {
- H3BUGF(fprintf(stderr,
- "gnutls_certificate_allocate_credentials failed: %s\n",
- gnutls_strerror(rc)));
- return 1;
- }
-
- rc = gnutls_certificate_set_x509_system_trust(qs->cred);
- if(rc < 0) {
- H3BUGF(fprintf(stderr,
- "gnutls_certificate_set_x509_system_trust failed: %s\n",
- gnutls_strerror(rc)));
- return 1;
- }
-
- rc = gnutls_credentials_set(qs->ssl, GNUTLS_CRD_CERTIFICATE, qs->cred);
- if(rc < 0) {
- H3BUGF(fprintf(stderr, "gnutls_credentials_set failed: %s\n",
- gnutls_strerror(rc)));
- return 1;
- }
-
- /* strip the first byte (the length) from NGHTTP3_ALPN_H3 */
- alpn[0].data = (unsigned char *)H3_ALPN_H3_29 + 1;
- alpn[0].size = sizeof(H3_ALPN_H3_29) - 2;
- alpn[1].data = (unsigned char *)H3_ALPN_H3 + 1;
- alpn[1].size = sizeof(H3_ALPN_H3) - 2;
-
- gnutls_alpn_set_protocols(qs->ssl, alpn, 2, GNUTLS_ALPN_MANDATORY);
-
- /* set SNI */
- gnutls_server_name_set(qs->ssl, GNUTLS_NAME_DNS, hostname, strlen(hostname));
- return 0;
-}
-#elif defined(USE_WOLFSSL)
-
-static WOLFSSL_CTX *quic_ssl_ctx(struct Curl_easy *data)
-{
- struct connectdata *conn = data->conn;
- WOLFSSL_CTX *ssl_ctx = wolfSSL_CTX_new(wolfTLSv1_3_client_method());
-
- if(ngtcp2_crypto_wolfssl_configure_client_context(ssl_ctx) != 0) {
- failf(data, "ngtcp2_crypto_wolfssl_configure_client_context failed");
- return NULL;
- }
-
- wolfSSL_CTX_set_default_verify_paths(ssl_ctx);
-
- if(wolfSSL_CTX_set_cipher_list(ssl_ctx, QUIC_CIPHERS) != 1) {
- char error_buffer[256];
- ERR_error_string_n(ERR_get_error(), error_buffer, sizeof(error_buffer));
- failf(data, "SSL_CTX_set_ciphersuites: %s", error_buffer);
- return NULL;
- }
-
- if(wolfSSL_CTX_set1_groups_list(ssl_ctx, (char *)QUIC_GROUPS) != 1) {
- failf(data, "SSL_CTX_set1_groups_list failed");
- return NULL;
- }
-
- /* Open the file if a TLS or QUIC backend has not done this before. */
- Curl_tls_keylog_open();
- if(Curl_tls_keylog_enabled()) {
-#if defined(HAVE_SECRET_CALLBACK)
- wolfSSL_CTX_set_keylog_callback(ssl_ctx, keylog_callback);
-#else
- failf(data, "wolfSSL was built without keylog callback");
- return NULL;
-#endif
- }
-
- if(conn->ssl_config.verifypeer) {
- const char * const ssl_cafile = conn->ssl_config.CAfile;
- const char * const ssl_capath = conn->ssl_config.CApath;
-
- if(ssl_cafile || ssl_capath) {
- wolfSSL_CTX_set_verify(ssl_ctx, SSL_VERIFY_PEER, NULL);
- /* tell wolfSSL where to find CA certificates that are used to verify
- the server's certificate. */
- if(!wolfSSL_CTX_load_verify_locations(ssl_ctx, ssl_cafile, ssl_capath)) {
- /* Fail if we insist on successfully verifying the server. */
- failf(data, "error setting certificate verify locations:"
- " CAfile: %s CApath: %s",
- ssl_cafile ? ssl_cafile : "none",
- ssl_capath ? ssl_capath : "none");
- return NULL;
- }
- infof(data, " CAfile: %s", ssl_cafile ? ssl_cafile : "none");
- infof(data, " CApath: %s", ssl_capath ? ssl_capath : "none");
- }
-#ifdef CURL_CA_FALLBACK
- else {
- /* verifying the peer without any CA certificates won't work so
- use wolfssl's built-in default as fallback */
- wolfSSL_CTX_set_default_verify_paths(ssl_ctx);
- }
-#endif
- }
- else {
- wolfSSL_CTX_set_verify(ssl_ctx, SSL_VERIFY_NONE, NULL);
- }
-
- return ssl_ctx;
-}
-
-/** SSL callbacks ***/
-
-static int quic_init_ssl(struct quicsocket *qs)
-{
- const uint8_t *alpn = NULL;
- size_t alpnlen = 0;
- /* this will need some attention when HTTPS proxy over QUIC get fixed */
- const char * const hostname = qs->conn->host.name;
-
- DEBUGASSERT(!qs->ssl);
- qs->ssl = SSL_new(qs->sslctx);
-
- wolfSSL_set_app_data(qs->ssl, &qs->conn_ref);
- wolfSSL_set_connect_state(qs->ssl);
- wolfSSL_set_quic_use_legacy_codepoint(qs->ssl, 0);
-
- alpn = (const uint8_t *)H3_ALPN_H3_29 H3_ALPN_H3;
- alpnlen = sizeof(H3_ALPN_H3_29) - 1 + sizeof(H3_ALPN_H3) - 1;
- if(alpn)
- wolfSSL_set_alpn_protos(qs->ssl, alpn, (int)alpnlen);
-
- /* set SNI */
- wolfSSL_UseSNI(qs->ssl, WOLFSSL_SNI_HOST_NAME,
- hostname, (unsigned short)strlen(hostname));
-
- return 0;
-}
-#endif /* defined(USE_WOLFSSL) */
-
-static int cb_handshake_completed(ngtcp2_conn *tconn, void *user_data)
-{
- (void)user_data;
- (void)tconn;
- return 0;
-}
-
-static void extend_stream_window(ngtcp2_conn *tconn,
- struct HTTP *stream)
-{
- size_t thismuch = stream->unacked_window;
- ngtcp2_conn_extend_max_stream_offset(tconn, stream->stream3_id, thismuch);
- ngtcp2_conn_extend_max_offset(tconn, thismuch);
- stream->unacked_window = 0;
-}
-
-
-static int cb_recv_stream_data(ngtcp2_conn *tconn, uint32_t flags,
- int64_t stream_id, uint64_t offset,
- const uint8_t *buf, size_t buflen,
- void *user_data, void *stream_user_data)
-{
- struct quicsocket *qs = (struct quicsocket *)user_data;
- nghttp3_ssize nconsumed;
- int fin = (flags & NGTCP2_STREAM_DATA_FLAG_FIN) ? 1 : 0;
- (void)offset;
- (void)stream_user_data;
-
- nconsumed =
- nghttp3_conn_read_stream(qs->h3conn, stream_id, buf, buflen, fin);
- if(nconsumed < 0) {
- ngtcp2_connection_close_error_set_application_error(
- &qs->last_error, nghttp3_err_infer_quic_app_error_code((int)nconsumed),
- NULL, 0);
- return NGTCP2_ERR_CALLBACK_FAILURE;
- }
-
- /* number of bytes inside buflen which consists of framing overhead
- * including QPACK HEADERS. In other words, it does not consume payload of
- * DATA frame. */
- ngtcp2_conn_extend_max_stream_offset(tconn, stream_id, nconsumed);
- ngtcp2_conn_extend_max_offset(tconn, nconsumed);
-
- return 0;
-}
-
-static int
-cb_acked_stream_data_offset(ngtcp2_conn *tconn, int64_t stream_id,
- uint64_t offset, uint64_t datalen, void *user_data,
- void *stream_user_data)
-{
- struct quicsocket *qs = (struct quicsocket *)user_data;
- int rv;
- (void)stream_id;
- (void)tconn;
- (void)offset;
- (void)datalen;
- (void)stream_user_data;
-
- rv = nghttp3_conn_add_ack_offset(qs->h3conn, stream_id, datalen);
- if(rv) {
- return NGTCP2_ERR_CALLBACK_FAILURE;
- }
-
- return 0;
-}
-
-static int cb_stream_close(ngtcp2_conn *tconn, uint32_t flags,
- int64_t stream_id, uint64_t app_error_code,
- void *user_data, void *stream_user_data)
-{
- struct quicsocket *qs = (struct quicsocket *)user_data;
- int rv;
- (void)tconn;
- (void)stream_user_data;
- /* stream is closed... */
-
- if(!(flags & NGTCP2_STREAM_CLOSE_FLAG_APP_ERROR_CODE_SET)) {
- app_error_code = NGHTTP3_H3_NO_ERROR;
- }
-
- rv = nghttp3_conn_close_stream(qs->h3conn, stream_id,
- app_error_code);
- if(rv) {
- ngtcp2_connection_close_error_set_application_error(
- &qs->last_error, nghttp3_err_infer_quic_app_error_code(rv), NULL, 0);
- return NGTCP2_ERR_CALLBACK_FAILURE;
- }
-
- return 0;
-}
-
-static int cb_stream_reset(ngtcp2_conn *tconn, int64_t stream_id,
- uint64_t final_size, uint64_t app_error_code,
- void *user_data, void *stream_user_data)
-{
- struct quicsocket *qs = (struct quicsocket *)user_data;
- int rv;
- (void)tconn;
- (void)final_size;
- (void)app_error_code;
- (void)stream_user_data;
-
- rv = nghttp3_conn_shutdown_stream_read(qs->h3conn, stream_id);
- if(rv) {
- return NGTCP2_ERR_CALLBACK_FAILURE;
- }
-
- return 0;
-}
-
-static int cb_stream_stop_sending(ngtcp2_conn *tconn, int64_t stream_id,
- uint64_t app_error_code, void *user_data,
- void *stream_user_data)
-{
- struct quicsocket *qs = (struct quicsocket *)user_data;
- int rv;
- (void)tconn;
- (void)app_error_code;
- (void)stream_user_data;
-
- rv = nghttp3_conn_shutdown_stream_read(qs->h3conn, stream_id);
- if(rv) {
- return NGTCP2_ERR_CALLBACK_FAILURE;
- }
-
- return 0;
-}
-
-static int cb_extend_max_local_streams_bidi(ngtcp2_conn *tconn,
- uint64_t max_streams,
- void *user_data)
-{
- (void)tconn;
- (void)max_streams;
- (void)user_data;
-
- return 0;
-}
-
-static int cb_extend_max_stream_data(ngtcp2_conn *tconn, int64_t stream_id,
- uint64_t max_data, void *user_data,
- void *stream_user_data)
-{
- struct quicsocket *qs = (struct quicsocket *)user_data;
- int rv;
- (void)tconn;
- (void)max_data;
- (void)stream_user_data;
-
- rv = nghttp3_conn_unblock_stream(qs->h3conn, stream_id);
- if(rv) {
- return NGTCP2_ERR_CALLBACK_FAILURE;
- }
-
- return 0;
-}
-
-static void cb_rand(uint8_t *dest, size_t destlen,
- const ngtcp2_rand_ctx *rand_ctx)
-{
- CURLcode result;
- (void)rand_ctx;
-
- result = Curl_rand(NULL, dest, destlen);
- if(result) {
- /* cb_rand is only used for non-cryptographic context. If Curl_rand
- failed, just fill 0 and call it *random*. */
- memset(dest, 0, destlen);
- }
-}
-
-static int cb_get_new_connection_id(ngtcp2_conn *tconn, ngtcp2_cid *cid,
- uint8_t *token, size_t cidlen,
- void *user_data)
-{
- CURLcode result;
- (void)tconn;
- (void)user_data;
-
- result = Curl_rand(NULL, cid->data, cidlen);
- if(result)
- return NGTCP2_ERR_CALLBACK_FAILURE;
- cid->datalen = cidlen;
-
- result = Curl_rand(NULL, token, NGTCP2_STATELESS_RESET_TOKENLEN);
- if(result)
- return NGTCP2_ERR_CALLBACK_FAILURE;
-
- return 0;
-}
-
-static int cb_recv_rx_key(ngtcp2_conn *tconn, ngtcp2_crypto_level level,
- void *user_data)
-{
- struct quicsocket *qs = (struct quicsocket *)user_data;
- (void)tconn;
-
- if(level != NGTCP2_CRYPTO_LEVEL_APPLICATION) {
- return 0;
- }
-
- if(init_ngh3_conn(qs) != CURLE_OK) {
- return NGTCP2_ERR_CALLBACK_FAILURE;
- }
-
- return 0;
-}
-
-static ngtcp2_callbacks ng_callbacks = {
- ngtcp2_crypto_client_initial_cb,
- NULL, /* recv_client_initial */
- ngtcp2_crypto_recv_crypto_data_cb,
- cb_handshake_completed,
- NULL, /* recv_version_negotiation */
- ngtcp2_crypto_encrypt_cb,
- ngtcp2_crypto_decrypt_cb,
- ngtcp2_crypto_hp_mask_cb,
- cb_recv_stream_data,
- cb_acked_stream_data_offset,
- NULL, /* stream_open */
- cb_stream_close,
- NULL, /* recv_stateless_reset */
- ngtcp2_crypto_recv_retry_cb,
- cb_extend_max_local_streams_bidi,
- NULL, /* extend_max_local_streams_uni */
- cb_rand,
- cb_get_new_connection_id,
- NULL, /* remove_connection_id */
- ngtcp2_crypto_update_key_cb, /* update_key */
- NULL, /* path_validation */
- NULL, /* select_preferred_addr */
- cb_stream_reset,
- NULL, /* extend_max_remote_streams_bidi */
- NULL, /* extend_max_remote_streams_uni */
- cb_extend_max_stream_data,
- NULL, /* dcid_status */
- NULL, /* handshake_confirmed */
- NULL, /* recv_new_token */
- ngtcp2_crypto_delete_crypto_aead_ctx_cb,
- ngtcp2_crypto_delete_crypto_cipher_ctx_cb,
- NULL, /* recv_datagram */
- NULL, /* ack_datagram */
- NULL, /* lost_datagram */
- ngtcp2_crypto_get_path_challenge_data_cb,
- cb_stream_stop_sending,
- NULL, /* version_negotiation */
- cb_recv_rx_key,
- NULL, /* recv_tx_key */
- NULL, /* early_data_rejected */
-};
-
-/*
- * Might be called twice for happy eyeballs.
- */
-CURLcode Curl_quic_connect(struct Curl_easy *data,
- struct connectdata *conn,
- curl_socket_t sockfd,
- int sockindex,
- const struct sockaddr *addr,
- socklen_t addrlen)
-{
- int rc;
- int rv;
- CURLcode result;
- ngtcp2_path path; /* TODO: this must be initialized properly */
- struct quicsocket *qs = &conn->hequic[sockindex];
- char ipbuf[40];
- int port;
- int qfd;
-
- if(qs->conn)
- Curl_quic_disconnect(data, conn, sockindex);
- qs->conn = conn;
-
- /* extract the used address as a string */
- if(!Curl_addr2string((struct sockaddr*)addr, addrlen, ipbuf, &port)) {
- char buffer[STRERROR_LEN];
- failf(data, "ssrem inet_ntop() failed with errno %d: %s",
- SOCKERRNO, Curl_strerror(SOCKERRNO, buffer, sizeof(buffer)));
- return CURLE_BAD_FUNCTION_ARGUMENT;
- }
-
- infof(data, "Connect socket %d over QUIC to %s:%d",
- sockfd, ipbuf, port);
-
- qs->version = NGTCP2_PROTO_VER_MAX;
-#ifdef USE_OPENSSL
- qs->sslctx = quic_ssl_ctx(data);
- if(!qs->sslctx)
- return CURLE_QUIC_CONNECT_ERROR;
-
- result = quic_set_client_cert(data, qs);
- if(result)
- return result;
-#elif defined(USE_WOLFSSL)
- qs->sslctx = quic_ssl_ctx(data);
- if(!qs->sslctx)
- return CURLE_QUIC_CONNECT_ERROR;
-#endif
-
- if(quic_init_ssl(qs))
- return CURLE_QUIC_CONNECT_ERROR;
-
- qs->dcid.datalen = NGTCP2_MAX_CIDLEN;
- result = Curl_rand(data, qs->dcid.data, NGTCP2_MAX_CIDLEN);
- if(result)
- return result;
-
- qs->scid.datalen = NGTCP2_MAX_CIDLEN;
- result = Curl_rand(data, qs->scid.data, NGTCP2_MAX_CIDLEN);
- if(result)
- return result;
-
- (void)Curl_qlogdir(data, qs->scid.data, NGTCP2_MAX_CIDLEN, &qfd);
- qs->qlogfd = qfd; /* -1 if failure above */
- quic_settings(qs, data->set.buffer_size);
-
- qs->local_addrlen = sizeof(qs->local_addr);
- rv = getsockname(sockfd, (struct sockaddr *)&qs->local_addr,
- &qs->local_addrlen);
- if(rv == -1)
- return CURLE_QUIC_CONNECT_ERROR;
-
- ngtcp2_addr_init(&path.local, (struct sockaddr *)&qs->local_addr,
- qs->local_addrlen);
- ngtcp2_addr_init(&path.remote, addr, addrlen);
-
- rc = ngtcp2_conn_client_new(&qs->qconn, &qs->dcid, &qs->scid, &path,
- NGTCP2_PROTO_VER_V1, &ng_callbacks,
- &qs->settings, &qs->transport_params, NULL, qs);
- if(rc)
- return CURLE_QUIC_CONNECT_ERROR;
-
- ngtcp2_conn_set_tls_native_handle(qs->qconn, qs->ssl);
-
- ngtcp2_connection_close_error_default(&qs->last_error);
-
-#if defined(__linux__) && defined(UDP_SEGMENT) && defined(HAVE_SENDMSG)
- qs->no_gso = FALSE;
-#else
- qs->no_gso = TRUE;
-#endif
-
- qs->num_blocked_pkt = 0;
- qs->num_blocked_pkt_sent = 0;
- memset(&qs->blocked_pkt, 0, sizeof(qs->blocked_pkt));
-
- qs->pktbuflen = NGTCP2_MAX_PMTUD_UDP_PAYLOAD_SIZE * MAX_PKT_BURST;
- qs->pktbuf = malloc(qs->pktbuflen);
- if(!qs->pktbuf) {
- ngtcp2_conn_del(qs->qconn);
- qs->qconn = NULL;
- return CURLE_OUT_OF_MEMORY;
- }
-
- qs->conn_ref.get_conn = get_conn;
- qs->conn_ref.user_data = qs;
-
- return CURLE_OK;
-}
-
-/*
- * Store ngtcp2 version info in this buffer.
- */
-void Curl_quic_ver(char *p, size_t len)
-{
- const ngtcp2_info *ng2 = ngtcp2_version(0);
- const nghttp3_info *ht3 = nghttp3_version(0);
- (void)msnprintf(p, len, "ngtcp2/%s nghttp3/%s",
- ng2->version_str, ht3->version_str);
-}
-
-static int ng_getsock(struct Curl_easy *data, struct connectdata *conn,
- curl_socket_t *socks)
-{
- struct SingleRequest *k = &data->req;
- int bitmap = GETSOCK_BLANK;
- struct HTTP *stream = data->req.p.http;
- struct quicsocket *qs = conn->quic;
-
- socks[0] = conn->sock[FIRSTSOCKET];
-
- /* in a HTTP/2 connection we can basically always get a frame so we should
- always be ready for one */
- bitmap |= GETSOCK_READSOCK(FIRSTSOCKET);
-
- /* we're still uploading or the HTTP/2 layer wants to send data */
- if((k->keepon & (KEEP_SEND|KEEP_SEND_PAUSE)) == KEEP_SEND &&
- (!stream->h3out || stream->h3out->used < H3_SEND_SIZE) &&
- ngtcp2_conn_get_cwnd_left(qs->qconn) &&
- ngtcp2_conn_get_max_data_left(qs->qconn) &&
- nghttp3_conn_is_stream_writable(qs->h3conn, stream->stream3_id))
- bitmap |= GETSOCK_WRITESOCK(FIRSTSOCKET);
-
- return bitmap;
-}
-
-static void qs_disconnect(struct quicsocket *qs)
-{
- char buffer[NGTCP2_MAX_UDP_PAYLOAD_SIZE];
- ngtcp2_tstamp ts;
- ngtcp2_ssize rc;
-
- if(!qs->conn) /* already closed */
- return;
- ts = timestamp();
- rc = ngtcp2_conn_write_connection_close(qs->qconn, NULL, /* path */
- NULL, /* pkt_info */
- (uint8_t *)buffer, sizeof(buffer),
- &qs->last_error, ts);
- if(rc > 0) {
- while((send(qs->conn->sock[FIRSTSOCKET], buffer, rc, 0) == -1) &&
- SOCKERRNO == EINTR);
- }
-
- qs->conn = NULL;
- if(qs->qlogfd != -1) {
- close(qs->qlogfd);
- qs->qlogfd = -1;
- }
- if(qs->ssl)
-#ifdef USE_OPENSSL
- SSL_free(qs->ssl);
-#elif defined(USE_GNUTLS)
- gnutls_deinit(qs->ssl);
-#elif defined(USE_WOLFSSL)
- wolfSSL_free(qs->ssl);
-#endif
- qs->ssl = NULL;
-#ifdef USE_GNUTLS
- if(qs->cred) {
- gnutls_certificate_free_credentials(qs->cred);
- qs->cred = NULL;
- }
-#endif
- free(qs->pktbuf);
- nghttp3_conn_del(qs->h3conn);
- ngtcp2_conn_del(qs->qconn);
-#ifdef USE_OPENSSL
- SSL_CTX_free(qs->sslctx);
-#elif defined(USE_WOLFSSL)
- wolfSSL_CTX_free(qs->sslctx);
-#endif
-}
-
-void Curl_quic_disconnect(struct Curl_easy *data,
- struct connectdata *conn,
- int tempindex)
-{
- (void)data;
- if(conn->transport == TRNSPRT_QUIC)
- qs_disconnect(&conn->hequic[tempindex]);
-}
-
-static CURLcode ng_disconnect(struct Curl_easy *data,
- struct connectdata *conn,
- bool dead_connection)
-{
- (void)dead_connection;
- Curl_quic_disconnect(data, conn, 0);
- Curl_quic_disconnect(data, conn, 1);
- return CURLE_OK;
-}
-
-static unsigned int ng_conncheck(struct Curl_easy *data,
- struct connectdata *conn,
- unsigned int checks_to_perform)
-{
- (void)data;
- (void)conn;
- (void)checks_to_perform;
- return CONNRESULT_NONE;
-}
-
-static const struct Curl_handler Curl_handler_http3 = {
- "HTTPS", /* scheme */
- ZERO_NULL, /* setup_connection */
- Curl_http, /* do_it */
- Curl_http_done, /* done */
- ZERO_NULL, /* do_more */
- ZERO_NULL, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ng_getsock, /* proto_getsock */
- ng_getsock, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ng_getsock, /* perform_getsock */
- ng_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- ng_conncheck, /* connection_check */
- ZERO_NULL, /* attach connection */
- PORT_HTTP, /* defport */
- CURLPROTO_HTTPS, /* protocol */
- CURLPROTO_HTTP, /* family */
- PROTOPT_SSL | PROTOPT_STREAM /* flags */
-};
-
-static int cb_h3_stream_close(nghttp3_conn *conn, int64_t stream_id,
- uint64_t app_error_code, void *user_data,
- void *stream_user_data)
-{
- struct Curl_easy *data = stream_user_data;
- struct HTTP *stream = data->req.p.http;
- (void)conn;
- (void)stream_id;
- (void)app_error_code;
- (void)user_data;
- H3BUGF(infof(data, "cb_h3_stream_close CALLED"));
-
- stream->closed = TRUE;
- stream->error3 = app_error_code;
- Curl_expire(data, 0, EXPIRE_QUIC);
- /* make sure that ngh3_stream_recv is called again to complete the transfer
- even if there are no more packets to be received from the server. */
- data->state.drain = 1;
- return 0;
-}
-
-/*
- * write_data() copies data to the stream's receive buffer. If not enough
- * space is available in the receive buffer, it copies the rest to the
- * stream's overflow buffer.
- */
-static CURLcode write_data(struct HTTP *stream, const void *mem, size_t memlen)
-{
- CURLcode result = CURLE_OK;
- const char *buf = mem;
- size_t ncopy = memlen;
- /* copy as much as possible to the receive buffer */
- if(stream->len) {
- size_t len = CURLMIN(ncopy, stream->len);
- memcpy(stream->mem, buf, len);
- stream->len -= len;
- stream->memlen += len;
- stream->mem += len;
- buf += len;
- ncopy -= len;
- }
- /* copy the rest to the overflow buffer */
- if(ncopy)
- result = Curl_dyn_addn(&stream->overflow, buf, ncopy);
- return result;
-}
-
-static int cb_h3_recv_data(nghttp3_conn *conn, int64_t stream_id,
- const uint8_t *buf, size_t buflen,
- void *user_data, void *stream_user_data)
-{
- struct Curl_easy *data = stream_user_data;
- struct HTTP *stream = data->req.p.http;
- CURLcode result = CURLE_OK;
- (void)conn;
-
- result = write_data(stream, buf, buflen);
- if(result) {
- return -1;
- }
- stream->unacked_window += buflen;
- (void)stream_id;
- (void)user_data;
- return 0;
-}
-
-static int cb_h3_deferred_consume(nghttp3_conn *conn, int64_t stream_id,
- size_t consumed, void *user_data,
- void *stream_user_data)
-{
- struct quicsocket *qs = user_data;
- (void)conn;
- (void)stream_user_data;
- (void)stream_id;
-
- ngtcp2_conn_extend_max_stream_offset(qs->qconn, stream_id, consumed);
- ngtcp2_conn_extend_max_offset(qs->qconn, consumed);
- return 0;
-}
-
-/* Decode HTTP status code. Returns -1 if no valid status code was
- decoded. (duplicate from http2.c) */
-static int decode_status_code(const uint8_t *value, size_t len)
-{
- int i;
- int res;
-
- if(len != 3) {
- return -1;
- }
-
- res = 0;
-
- for(i = 0; i < 3; ++i) {
- char c = value[i];
-
- if(c < '0' || c > '9') {
- return -1;
- }
-
- res *= 10;
- res += c - '0';
- }
-
- return res;
-}
-
-static int cb_h3_end_headers(nghttp3_conn *conn, int64_t stream_id,
- int fin, void *user_data, void *stream_user_data)
-{
- struct Curl_easy *data = stream_user_data;
- struct HTTP *stream = data->req.p.http;
- CURLcode result = CURLE_OK;
- (void)conn;
- (void)stream_id;
- (void)user_data;
- (void)fin;
-
- /* add a CRLF only if we've received some headers */
- if(stream->firstheader) {
- result = write_data(stream, "\r\n", 2);
- if(result) {
- return -1;
- }
- }
-
- if(stream->status_code / 100 != 1) {
- stream->bodystarted = TRUE;
- }
- return 0;
-}
-
-static int cb_h3_recv_header(nghttp3_conn *conn, int64_t stream_id,
- int32_t token, nghttp3_rcbuf *name,
- nghttp3_rcbuf *value, uint8_t flags,
- void *user_data, void *stream_user_data)
-{
- nghttp3_vec h3name = nghttp3_rcbuf_get_buf(name);
- nghttp3_vec h3val = nghttp3_rcbuf_get_buf(value);
- struct Curl_easy *data = stream_user_data;
- struct HTTP *stream = data->req.p.http;
- CURLcode result = CURLE_OK;
- (void)conn;
- (void)stream_id;
- (void)token;
- (void)flags;
- (void)user_data;
-
- if(token == NGHTTP3_QPACK_TOKEN__STATUS) {
- char line[14]; /* status line is always 13 characters long */
- size_t ncopy;
- stream->status_code = decode_status_code(h3val.base, h3val.len);
- DEBUGASSERT(stream->status_code != -1);
- ncopy = msnprintf(line, sizeof(line), "HTTP/3 %03d \r\n",
- stream->status_code);
- result = write_data(stream, line, ncopy);
- if(result) {
- return -1;
- }
- }
- else {
- /* store as a HTTP1-style header */
- result = write_data(stream, h3name.base, h3name.len);
- if(result) {
- return -1;
- }
- result = write_data(stream, ": ", 2);
- if(result) {
- return -1;
- }
- result = write_data(stream, h3val.base, h3val.len);
- if(result) {
- return -1;
- }
- result = write_data(stream, "\r\n", 2);
- if(result) {
- return -1;
- }
- }
-
- stream->firstheader = TRUE;
- return 0;
-}
-
-static int cb_h3_stop_sending(nghttp3_conn *conn, int64_t stream_id,
- uint64_t app_error_code, void *user_data,
- void *stream_user_data)
-{
- struct quicsocket *qs = user_data;
- int rv;
- (void)conn;
- (void)stream_user_data;
-
- rv = ngtcp2_conn_shutdown_stream_read(qs->qconn, stream_id, app_error_code);
- if(rv && rv != NGTCP2_ERR_STREAM_NOT_FOUND) {
- return NGTCP2_ERR_CALLBACK_FAILURE;
- }
-
- return 0;
-}
-
-static int cb_h3_reset_stream(nghttp3_conn *conn, int64_t stream_id,
- uint64_t app_error_code, void *user_data,
- void *stream_user_data) {
- struct quicsocket *qs = user_data;
- int rv;
- (void)conn;
- (void)stream_user_data;
-
- rv = ngtcp2_conn_shutdown_stream_write(qs->qconn, stream_id, app_error_code);
- if(rv && rv != NGTCP2_ERR_STREAM_NOT_FOUND) {
- return NGTCP2_ERR_CALLBACK_FAILURE;
- }
-
- return 0;
-}
-
-static nghttp3_callbacks ngh3_callbacks = {
- cb_h3_acked_stream_data, /* acked_stream_data */
- cb_h3_stream_close,
- cb_h3_recv_data,
- cb_h3_deferred_consume,
- NULL, /* begin_headers */
- cb_h3_recv_header,
- cb_h3_end_headers,
- NULL, /* begin_trailers */
- cb_h3_recv_header,
- NULL, /* end_trailers */
- cb_h3_stop_sending,
- NULL, /* end_stream */
- cb_h3_reset_stream,
- NULL /* shutdown */
-};
-
-static int init_ngh3_conn(struct quicsocket *qs)
-{
- CURLcode result;
- int rc;
- int64_t ctrl_stream_id, qpack_enc_stream_id, qpack_dec_stream_id;
-
- if(ngtcp2_conn_get_max_local_streams_uni(qs->qconn) < 3) {
- return CURLE_QUIC_CONNECT_ERROR;
- }
-
- nghttp3_settings_default(&qs->h3settings);
-
- rc = nghttp3_conn_client_new(&qs->h3conn,
- &ngh3_callbacks,
- &qs->h3settings,
- nghttp3_mem_default(),
- qs);
- if(rc) {
- result = CURLE_OUT_OF_MEMORY;
- goto fail;
- }
-
- rc = ngtcp2_conn_open_uni_stream(qs->qconn, &ctrl_stream_id, NULL);
- if(rc) {
- result = CURLE_QUIC_CONNECT_ERROR;
- goto fail;
- }
-
- rc = nghttp3_conn_bind_control_stream(qs->h3conn, ctrl_stream_id);
- if(rc) {
- result = CURLE_QUIC_CONNECT_ERROR;
- goto fail;
- }
-
- rc = ngtcp2_conn_open_uni_stream(qs->qconn, &qpack_enc_stream_id, NULL);
- if(rc) {
- result = CURLE_QUIC_CONNECT_ERROR;
- goto fail;
- }
-
- rc = ngtcp2_conn_open_uni_stream(qs->qconn, &qpack_dec_stream_id, NULL);
- if(rc) {
- result = CURLE_QUIC_CONNECT_ERROR;
- goto fail;
- }
-
- rc = nghttp3_conn_bind_qpack_streams(qs->h3conn, qpack_enc_stream_id,
- qpack_dec_stream_id);
- if(rc) {
- result = CURLE_QUIC_CONNECT_ERROR;
- goto fail;
- }
-
- return CURLE_OK;
- fail:
-
- return result;
-}
-
-static Curl_recv ngh3_stream_recv;
-static Curl_send ngh3_stream_send;
-
-static size_t drain_overflow_buffer(struct HTTP *stream)
-{
- size_t overlen = Curl_dyn_len(&stream->overflow);
- size_t ncopy = CURLMIN(overlen, stream->len);
- if(ncopy > 0) {
- memcpy(stream->mem, Curl_dyn_ptr(&stream->overflow), ncopy);
- stream->len -= ncopy;
- stream->mem += ncopy;
- stream->memlen += ncopy;
- if(ncopy != overlen)
- /* make the buffer only keep the tail */
- (void)Curl_dyn_tail(&stream->overflow, overlen - ncopy);
- else
- Curl_dyn_reset(&stream->overflow);
- }
- return ncopy;
-}
-
-/* incoming data frames on the h3 stream */
-static ssize_t ngh3_stream_recv(struct Curl_easy *data,
- int sockindex,
- char *buf,
- size_t buffersize,
- CURLcode *curlcode)
-{
- struct connectdata *conn = data->conn;
- curl_socket_t sockfd = conn->sock[sockindex];
- struct HTTP *stream = data->req.p.http;
- struct quicsocket *qs = conn->quic;
-
- if(!stream->memlen) {
- /* remember where to store incoming data for this stream and how big the
- buffer is */
- stream->mem = buf;
- stream->len = buffersize;
- }
- /* else, there's data in the buffer already */
-
- /* if there's data in the overflow buffer from a previous call, copy as much
- as possible to the receive buffer before receiving more */
- drain_overflow_buffer(stream);
-
- if(ng_process_ingress(data, sockfd, qs)) {
- *curlcode = CURLE_RECV_ERROR;
- return -1;
- }
- if(ng_flush_egress(data, sockfd, qs)) {
- *curlcode = CURLE_SEND_ERROR;
- return -1;
- }
-
- if(stream->memlen) {
- ssize_t memlen = stream->memlen;
- /* data arrived */
- *curlcode = CURLE_OK;
- /* reset to allow more data to come */
- stream->memlen = 0;
- stream->mem = buf;
- stream->len = buffersize;
- /* extend the stream window with the data we're consuming and send out
- any additional packets to tell the server that we can receive more */
- extend_stream_window(qs->qconn, stream);
- if(ng_flush_egress(data, sockfd, qs)) {
- *curlcode = CURLE_SEND_ERROR;
- return -1;
- }
- return memlen;
- }
-
- if(stream->closed) {
- if(stream->error3 != NGHTTP3_H3_NO_ERROR) {
- failf(data,
- "HTTP/3 stream %" PRId64 " was not closed cleanly: (err %" PRIu64
- ")",
- stream->stream3_id, stream->error3);
- *curlcode = CURLE_HTTP3;
- return -1;
- }
-
- if(!stream->bodystarted) {
- failf(data,
- "HTTP/3 stream %" PRId64 " was closed cleanly, but before getting"
- " all response header fields, treated as error",
- stream->stream3_id);
- *curlcode = CURLE_HTTP3;
- return -1;
- }
-
- *curlcode = CURLE_OK;
- return 0;
- }
-
- infof(data, "ngh3_stream_recv returns 0 bytes and EAGAIN");
- *curlcode = CURLE_AGAIN;
- return -1;
-}
-
-/* this amount of data has now been acked on this stream */
-static int cb_h3_acked_stream_data(nghttp3_conn *conn, int64_t stream_id,
- uint64_t datalen, void *user_data,
- void *stream_user_data)
-{
- struct Curl_easy *data = stream_user_data;
- struct HTTP *stream = data->req.p.http;
- (void)user_data;
-
- if(!data->set.postfields) {
- stream->h3out->used -= datalen;
- H3BUGF(infof(data,
- "cb_h3_acked_stream_data, %zd bytes, %zd left unacked",
- datalen, stream->h3out->used));
- DEBUGASSERT(stream->h3out->used < H3_SEND_SIZE);
-
- if(stream->h3out->used == 0) {
- int rv = nghttp3_conn_resume_stream(conn, stream_id);
- if(rv) {
- return NGTCP2_ERR_CALLBACK_FAILURE;
- }
- }
- }
- return 0;
-}
-
-static nghttp3_ssize cb_h3_readfunction(nghttp3_conn *conn, int64_t stream_id,
- nghttp3_vec *vec, size_t veccnt,
- uint32_t *pflags, void *user_data,
- void *stream_user_data)
-{
- struct Curl_easy *data = stream_user_data;
- size_t nread;
- struct HTTP *stream = data->req.p.http;
- (void)conn;
- (void)stream_id;
- (void)user_data;
- (void)veccnt;
-
- if(data->set.postfields) {
- vec[0].base = data->set.postfields;
- vec[0].len = data->state.infilesize;
- *pflags = NGHTTP3_DATA_FLAG_EOF;
- return 1;
- }
-
- if(stream->upload_len && H3_SEND_SIZE <= stream->h3out->used) {
- return NGHTTP3_ERR_WOULDBLOCK;
- }
-
- nread = CURLMIN(stream->upload_len, H3_SEND_SIZE - stream->h3out->used);
- if(nread > 0) {
- /* nghttp3 wants us to hold on to the data until it tells us it is okay to
- delete it. Append the data at the end of the h3out buffer. Since we can
- only return consecutive data, copy the amount that fits and the next
- part comes in next invoke. */
- struct h3out *out = stream->h3out;
- if(nread + out->windex > H3_SEND_SIZE)
- nread = H3_SEND_SIZE - out->windex;
-
- memcpy(&out->buf[out->windex], stream->upload_mem, nread);
-
- /* that's the chunk we return to nghttp3 */
- vec[0].base = &out->buf[out->windex];
- vec[0].len = nread;
-
- out->windex += nread;
- out->used += nread;
-
- if(out->windex == H3_SEND_SIZE)
- out->windex = 0; /* wrap */
- stream->upload_mem += nread;
- stream->upload_len -= nread;
- if(data->state.infilesize != -1) {
- stream->upload_left -= nread;
- if(!stream->upload_left)
- *pflags = NGHTTP3_DATA_FLAG_EOF;
- }
- H3BUGF(infof(data, "cb_h3_readfunction %zd bytes%s (at %zd unacked)",
- nread, *pflags == NGHTTP3_DATA_FLAG_EOF?" EOF":"",
- out->used));
- }
- if(stream->upload_done && !stream->upload_len &&
- (stream->upload_left <= 0)) {
- H3BUGF(infof(data, "cb_h3_readfunction sets EOF"));
- *pflags = NGHTTP3_DATA_FLAG_EOF;
- return nread ? 1 : 0;
- }
- else if(!nread) {
- return NGHTTP3_ERR_WOULDBLOCK;
- }
- return 1;
-}
-
-/* Index where :authority header field will appear in request header
- field list. */
-#define AUTHORITY_DST_IDX 3
-
-static CURLcode http_request(struct Curl_easy *data, const void *mem,
- size_t len)
-{
- struct connectdata *conn = data->conn;
- struct HTTP *stream = data->req.p.http;
- size_t nheader;
- struct quicsocket *qs = conn->quic;
- CURLcode result = CURLE_OK;
- nghttp3_nv *nva = NULL;
- int64_t stream3_id;
- int rc;
- struct h3out *h3out = NULL;
- struct h2h3req *hreq = NULL;
-
- rc = ngtcp2_conn_open_bidi_stream(qs->qconn, &stream3_id, NULL);
- if(rc) {
- failf(data, "can get bidi streams");
- result = CURLE_SEND_ERROR;
- goto fail;
- }
-
- stream->stream3_id = stream3_id;
- stream->h3req = TRUE; /* senf off! */
- Curl_dyn_init(&stream->overflow, CURL_MAX_READ_SIZE);
-
- result = Curl_pseudo_headers(data, mem, len, &hreq);
- if(result)
- goto fail;
- nheader = hreq->entries;
-
- nva = malloc(sizeof(nghttp3_nv) * nheader);
- if(!nva) {
- result = CURLE_OUT_OF_MEMORY;
- goto fail;
- }
- else {
- unsigned int i;
- for(i = 0; i < nheader; i++) {
- nva[i].name = (unsigned char *)hreq->header[i].name;
- nva[i].namelen = hreq->header[i].namelen;
- nva[i].value = (unsigned char *)hreq->header[i].value;
- nva[i].valuelen = hreq->header[i].valuelen;
- nva[i].flags = NGHTTP3_NV_FLAG_NONE;
- }
- }
-
- switch(data->state.httpreq) {
- case HTTPREQ_POST:
- case HTTPREQ_POST_FORM:
- case HTTPREQ_POST_MIME:
- case HTTPREQ_PUT: {
- nghttp3_data_reader data_reader;
- if(data->state.infilesize != -1)
- stream->upload_left = data->state.infilesize;
- else
- /* data sending without specifying the data amount up front */
- stream->upload_left = -1; /* unknown, but not zero */
-
- data_reader.read_data = cb_h3_readfunction;
-
- h3out = calloc(sizeof(struct h3out), 1);
- if(!h3out) {
- result = CURLE_OUT_OF_MEMORY;
- goto fail;
- }
- stream->h3out = h3out;
-
- rc = nghttp3_conn_submit_request(qs->h3conn, stream->stream3_id,
- nva, nheader, &data_reader, data);
- if(rc) {
- result = CURLE_SEND_ERROR;
- goto fail;
- }
- break;
- }
- default:
- stream->upload_left = 0; /* nothing left to send */
- rc = nghttp3_conn_submit_request(qs->h3conn, stream->stream3_id,
- nva, nheader, NULL, data);
- if(rc) {
- result = CURLE_SEND_ERROR;
- goto fail;
- }
- break;
- }
-
- Curl_safefree(nva);
-
- infof(data, "Using HTTP/3 Stream ID: %x (easy handle %p)",
- stream3_id, (void *)data);
-
- Curl_pseudo_free(hreq);
- return CURLE_OK;
-
-fail:
- free(nva);
- Curl_pseudo_free(hreq);
- return result;
-}
-static ssize_t ngh3_stream_send(struct Curl_easy *data,
- int sockindex,
- const void *mem,
- size_t len,
- CURLcode *curlcode)
-{
- ssize_t sent = 0;
- struct connectdata *conn = data->conn;
- struct quicsocket *qs = conn->quic;
- curl_socket_t sockfd = conn->sock[sockindex];
- struct HTTP *stream = data->req.p.http;
-
- if(stream->closed) {
- *curlcode = CURLE_HTTP3;
- return -1;
- }
-
- if(!stream->h3req) {
- CURLcode result = http_request(data, mem, len);
- if(result) {
- *curlcode = CURLE_SEND_ERROR;
- return -1;
- }
- /* Assume that mem of length len only includes HTTP/1.1 style
- header fields. In other words, it does not contain request
- body. */
- sent = len;
- }
- else {
- H3BUGF(infof(data, "ngh3_stream_send() wants to send %zd bytes",
- len));
- if(!stream->upload_len) {
- stream->upload_mem = mem;
- stream->upload_len = len;
- (void)nghttp3_conn_resume_stream(qs->h3conn, stream->stream3_id);
- }
- else {
- *curlcode = CURLE_AGAIN;
- return -1;
- }
- }
-
- if(ng_flush_egress(data, sockfd, qs)) {
- *curlcode = CURLE_SEND_ERROR;
- return -1;
- }
-
- /* Reset post upload buffer after resumed. */
- if(stream->upload_mem) {
- if(data->set.postfields) {
- sent = len;
- }
- else {
- sent = len - stream->upload_len;
- }
-
- stream->upload_mem = NULL;
- stream->upload_len = 0;
-
- if(sent == 0) {
- *curlcode = CURLE_AGAIN;
- return -1;
- }
- }
-
- *curlcode = CURLE_OK;
- return sent;
-}
-
-static CURLcode ng_has_connected(struct Curl_easy *data,
- struct connectdata *conn, int tempindex)
-{
- CURLcode result = CURLE_OK;
- conn->recv[FIRSTSOCKET] = ngh3_stream_recv;
- conn->send[FIRSTSOCKET] = ngh3_stream_send;
- conn->handler = &Curl_handler_http3;
- conn->bits.multiplex = TRUE; /* at least potentially multiplexed */
- conn->httpversion = 30;
- conn->bundle->multiuse = BUNDLE_MULTIPLEX;
- conn->quic = &conn->hequic[tempindex];
-
- if(conn->ssl_config.verifyhost) {
-#ifdef USE_OPENSSL
- X509 *server_cert;
- server_cert = SSL_get_peer_certificate(conn->quic->ssl);
- if(!server_cert) {
- return CURLE_PEER_FAILED_VERIFICATION;
- }
- result = Curl_ossl_verifyhost(data, conn, server_cert);
- X509_free(server_cert);
- if(result)
- return result;
- infof(data, "Verified certificate just fine");
-#elif defined(USE_GNUTLS)
- result = Curl_gtls_verifyserver(data, conn, conn->quic->ssl, FIRSTSOCKET);
-#elif defined(USE_WOLFSSL)
- char *snihost = Curl_ssl_snihost(data, SSL_HOST_NAME(), NULL);
- if(!snihost ||
- (wolfSSL_check_domain_name(conn->quic->ssl, snihost) == SSL_FAILURE))
- return CURLE_PEER_FAILED_VERIFICATION;
- infof(data, "Verified certificate just fine");
-#endif
- }
- else
- infof(data, "Skipped certificate verification");
-#ifdef USE_OPENSSL
- if(data->set.ssl.certinfo)
- /* asked to gather certificate info */
- (void)Curl_ossl_certchain(data, conn->quic->ssl);
-#endif
- return result;
-}
-
-/*
- * There can be multiple connection attempts going on in parallel.
- */
-CURLcode Curl_quic_is_connected(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex,
- bool *done)
-{
- CURLcode result;
- struct quicsocket *qs = &conn->hequic[sockindex];
- curl_socket_t sockfd = conn->tempsock[sockindex];
-
- result = ng_process_ingress(data, sockfd, qs);
- if(result)
- goto error;
-
- result = ng_flush_egress(data, sockfd, qs);
- if(result)
- goto error;
-
- if(ngtcp2_conn_get_handshake_completed(qs->qconn)) {
- result = ng_has_connected(data, conn, sockindex);
- if(!result)
- *done = TRUE;
- }
-
- return result;
- error:
- (void)qs_disconnect(qs);
- return result;
-
-}
-
-static CURLcode ng_process_ingress(struct Curl_easy *data,
- curl_socket_t sockfd,
- struct quicsocket *qs)
-{
- ssize_t recvd;
- int rv;
- uint8_t buf[65536];
- size_t bufsize = sizeof(buf);
- struct sockaddr_storage remote_addr;
- socklen_t remote_addrlen;
- ngtcp2_path path;
- ngtcp2_tstamp ts = timestamp();
- ngtcp2_pkt_info pi = { 0 };
-
- for(;;) {
- remote_addrlen = sizeof(remote_addr);
- while((recvd = recvfrom(sockfd, (char *)buf, bufsize, 0,
- (struct sockaddr *)&remote_addr,
- &remote_addrlen)) == -1 &&
- SOCKERRNO == EINTR)
- ;
- if(recvd == -1) {
- if(SOCKERRNO == EAGAIN || SOCKERRNO == EWOULDBLOCK)
- break;
-
- failf(data, "ngtcp2: recvfrom() unexpectedly returned %zd", recvd);
- return CURLE_RECV_ERROR;
- }
-
- ngtcp2_addr_init(&path.local, (struct sockaddr *)&qs->local_addr,
- qs->local_addrlen);
- ngtcp2_addr_init(&path.remote, (struct sockaddr *)&remote_addr,
- remote_addrlen);
-
- rv = ngtcp2_conn_read_pkt(qs->qconn, &path, &pi, buf, recvd, ts);
- if(rv) {
- if(!qs->last_error.error_code) {
- if(rv == NGTCP2_ERR_CRYPTO) {
- ngtcp2_connection_close_error_set_transport_error_tls_alert(
- &qs->last_error, ngtcp2_conn_get_tls_alert(qs->qconn), NULL, 0);
- }
- else {
- ngtcp2_connection_close_error_set_transport_error_liberr(
- &qs->last_error, rv, NULL, 0);
- }
- }
-
- if(rv == NGTCP2_ERR_CRYPTO)
- /* this is a "TLS problem", but a failed certificate verification
- is a common reason for this */
- return CURLE_PEER_FAILED_VERIFICATION;
- return CURLE_RECV_ERROR;
- }
- }
-
- return CURLE_OK;
-}
-
-static CURLcode do_sendmsg(size_t *sent, struct Curl_easy *data, int sockfd,
- struct quicsocket *qs, const uint8_t *pkt,
- size_t pktlen, size_t gsolen);
-
-static CURLcode send_packet_no_gso(size_t *psent, struct Curl_easy *data,
- int sockfd, struct quicsocket *qs,
- const uint8_t *pkt, size_t pktlen,
- size_t gsolen)
-{
- const uint8_t *p, *end = pkt + pktlen;
- size_t sent;
-
- *psent = 0;
-
- for(p = pkt; p < end; p += gsolen) {
- size_t len = CURLMIN(gsolen, (size_t)(end - p));
- CURLcode curlcode = do_sendmsg(&sent, data, sockfd, qs, p, len, len);
- if(curlcode != CURLE_OK) {
- return curlcode;
- }
- *psent += sent;
- }
-
- return CURLE_OK;
-}
-
-static CURLcode do_sendmsg(size_t *psent, struct Curl_easy *data, int sockfd,
- struct quicsocket *qs, const uint8_t *pkt,
- size_t pktlen, size_t gsolen)
-{
-#ifdef HAVE_SENDMSG
- struct iovec msg_iov;
- struct msghdr msg = {0};
- ssize_t sent;
-#if defined(__linux__) && defined(UDP_SEGMENT)
- uint8_t msg_ctrl[32];
- struct cmsghdr *cm;
-#endif
-
- *psent = 0;
- msg_iov.iov_base = (uint8_t *)pkt;
- msg_iov.iov_len = pktlen;
- msg.msg_iov = &msg_iov;
- msg.msg_iovlen = 1;
-
-#if defined(__linux__) && defined(UDP_SEGMENT)
- if(pktlen > gsolen) {
- /* Only set this, when we need it. macOS, for example,
- * does not seem to like a msg_control of length 0. */
- msg.msg_control = msg_ctrl;
- assert(sizeof(msg_ctrl) >= CMSG_SPACE(sizeof(uint16_t)));
- msg.msg_controllen = CMSG_SPACE(sizeof(uint16_t));
- cm = CMSG_FIRSTHDR(&msg);
- cm->cmsg_level = SOL_UDP;
- cm->cmsg_type = UDP_SEGMENT;
- cm->cmsg_len = CMSG_LEN(sizeof(uint16_t));
- *(uint16_t *)(void *)CMSG_DATA(cm) = gsolen & 0xffff;
- }
-#endif
-
-
- while((sent = sendmsg(sockfd, &msg, 0)) == -1 && SOCKERRNO == EINTR)
- ;
-
- if(sent == -1) {
- switch(SOCKERRNO) {
- case EAGAIN:
-#if EAGAIN != EWOULDBLOCK
- case EWOULDBLOCK:
-#endif
- return CURLE_AGAIN;
- case EMSGSIZE:
- /* UDP datagram is too large; caused by PMTUD. Just let it be lost. */
- break;
- case EIO:
- if(pktlen > gsolen) {
- /* GSO failure */
- failf(data, "sendmsg() returned %zd (errno %d); disable GSO", sent,
- SOCKERRNO);
- qs->no_gso = TRUE;
- return send_packet_no_gso(psent, data, sockfd, qs, pkt, pktlen,
- gsolen);
- }
- /* FALLTHROUGH */
- default:
- failf(data, "sendmsg() returned %zd (errno %d)", sent, SOCKERRNO);
- return CURLE_SEND_ERROR;
- }
- }
- else {
- assert(pktlen == (size_t)sent);
- }
-#else
- ssize_t sent;
- (void)qs;
- (void)gsolen;
-
- *psent = 0;
-
- while((sent = send(sockfd, (const char *)pkt, pktlen, 0)) == -1 &&
- SOCKERRNO == EINTR)
- ;
-
- if(sent == -1) {
- if(SOCKERRNO == EAGAIN || SOCKERRNO == EWOULDBLOCK) {
- return CURLE_AGAIN;
- }
- else {
- failf(data, "send() returned %zd (errno %d)", sent, SOCKERRNO);
- if(SOCKERRNO != EMSGSIZE) {
- return CURLE_SEND_ERROR;
- }
- /* UDP datagram is too large; caused by PMTUD. Just let it be
- lost. */
- }
- }
-#endif
-
- *psent = pktlen;
-
- return CURLE_OK;
-}
-
-static CURLcode send_packet(size_t *psent, struct Curl_easy *data, int sockfd,
- struct quicsocket *qs, const uint8_t *pkt,
- size_t pktlen, size_t gsolen)
-{
- if(qs->no_gso && pktlen > gsolen) {
- return send_packet_no_gso(psent, data, sockfd, qs, pkt, pktlen, gsolen);
- }
-
- return do_sendmsg(psent, data, sockfd, qs, pkt, pktlen, gsolen);
-}
-
-static void push_blocked_pkt(struct quicsocket *qs, const uint8_t *pkt,
- size_t pktlen, size_t gsolen)
-{
- struct blocked_pkt *blkpkt;
-
- assert(qs->num_blocked_pkt <
- sizeof(qs->blocked_pkt) / sizeof(qs->blocked_pkt[0]));
-
- blkpkt = &qs->blocked_pkt[qs->num_blocked_pkt++];
-
- blkpkt->pkt = pkt;
- blkpkt->pktlen = pktlen;
- blkpkt->gsolen = gsolen;
-}
-
-static CURLcode send_blocked_pkt(struct Curl_easy *data, int sockfd,
- struct quicsocket *qs)
-{
- size_t sent;
- CURLcode curlcode;
- struct blocked_pkt *blkpkt;
-
- for(; qs->num_blocked_pkt_sent < qs->num_blocked_pkt;
- ++qs->num_blocked_pkt_sent) {
- blkpkt = &qs->blocked_pkt[qs->num_blocked_pkt_sent];
- curlcode = send_packet(&sent, data, sockfd, qs, blkpkt->pkt,
- blkpkt->pktlen, blkpkt->gsolen);
-
- if(curlcode) {
- if(curlcode == CURLE_AGAIN) {
- blkpkt->pkt += sent;
- blkpkt->pktlen -= sent;
- }
- return curlcode;
- }
- }
-
- qs->num_blocked_pkt = 0;
- qs->num_blocked_pkt_sent = 0;
-
- return CURLE_OK;
-}
-
-static CURLcode ng_flush_egress(struct Curl_easy *data,
- int sockfd,
- struct quicsocket *qs)
-{
- int rv;
- size_t sent;
- ngtcp2_ssize outlen;
- uint8_t *outpos = qs->pktbuf;
- size_t max_udp_payload_size =
- ngtcp2_conn_get_max_tx_udp_payload_size(qs->qconn);
- size_t path_max_udp_payload_size =
- ngtcp2_conn_get_path_max_tx_udp_payload_size(qs->qconn);
- size_t max_pktcnt =
- CURLMIN(MAX_PKT_BURST, qs->pktbuflen / max_udp_payload_size);
- size_t pktcnt = 0;
- size_t gsolen;
- ngtcp2_path_storage ps;
- ngtcp2_tstamp ts = timestamp();
- ngtcp2_tstamp expiry;
- ngtcp2_duration timeout;
- int64_t stream_id;
- nghttp3_ssize veccnt;
- int fin;
- nghttp3_vec vec[16];
- ngtcp2_ssize ndatalen;
- uint32_t flags;
- CURLcode curlcode;
-
- rv = ngtcp2_conn_handle_expiry(qs->qconn, ts);
- if(rv) {
- failf(data, "ngtcp2_conn_handle_expiry returned error: %s",
- ngtcp2_strerror(rv));
- ngtcp2_connection_close_error_set_transport_error_liberr(&qs->last_error,
- rv, NULL, 0);
- return CURLE_SEND_ERROR;
- }
-
- if(qs->num_blocked_pkt) {
- curlcode = send_blocked_pkt(data, sockfd, qs);
- if(curlcode) {
- if(curlcode == CURLE_AGAIN) {
- Curl_expire(data, 1, EXPIRE_QUIC);
- return CURLE_OK;
- }
- return curlcode;
- }
- }
-
- ngtcp2_path_storage_zero(&ps);
-
- for(;;) {
- veccnt = 0;
- stream_id = -1;
- fin = 0;
-
- if(qs->h3conn && ngtcp2_conn_get_max_data_left(qs->qconn)) {
- veccnt = nghttp3_conn_writev_stream(qs->h3conn, &stream_id, &fin, vec,
- sizeof(vec) / sizeof(vec[0]));
- if(veccnt < 0) {
- failf(data, "nghttp3_conn_writev_stream returned error: %s",
- nghttp3_strerror((int)veccnt));
- ngtcp2_connection_close_error_set_application_error(
- &qs->last_error,
- nghttp3_err_infer_quic_app_error_code((int)veccnt), NULL, 0);
- return CURLE_SEND_ERROR;
- }
- }
-
- flags = NGTCP2_WRITE_STREAM_FLAG_MORE |
- (fin ? NGTCP2_WRITE_STREAM_FLAG_FIN : 0);
- outlen = ngtcp2_conn_writev_stream(qs->qconn, &ps.path, NULL, outpos,
- max_udp_payload_size,
- &ndatalen, flags, stream_id,
- (const ngtcp2_vec *)vec, veccnt, ts);
- if(outlen == 0) {
- if(outpos != qs->pktbuf) {
- curlcode = send_packet(&sent, data, sockfd, qs, qs->pktbuf,
- outpos - qs->pktbuf, gsolen);
- if(curlcode) {
- if(curlcode == CURLE_AGAIN) {
- push_blocked_pkt(qs, qs->pktbuf + sent, outpos - qs->pktbuf - sent,
- gsolen);
- Curl_expire(data, 1, EXPIRE_QUIC);
- return CURLE_OK;
- }
- return curlcode;
- }
- }
-
- break;
- }
- if(outlen < 0) {
- switch(outlen) {
- case NGTCP2_ERR_STREAM_DATA_BLOCKED:
- assert(ndatalen == -1);
- nghttp3_conn_block_stream(qs->h3conn, stream_id);
- continue;
- case NGTCP2_ERR_STREAM_SHUT_WR:
- assert(ndatalen == -1);
- nghttp3_conn_shutdown_stream_write(qs->h3conn, stream_id);
- continue;
- case NGTCP2_ERR_WRITE_MORE:
- assert(ndatalen >= 0);
- rv = nghttp3_conn_add_write_offset(qs->h3conn, stream_id, ndatalen);
- if(rv) {
- failf(data, "nghttp3_conn_add_write_offset returned error: %s\n",
- nghttp3_strerror(rv));
- return CURLE_SEND_ERROR;
- }
- continue;
- default:
- assert(ndatalen == -1);
- failf(data, "ngtcp2_conn_writev_stream returned error: %s",
- ngtcp2_strerror((int)outlen));
- ngtcp2_connection_close_error_set_transport_error_liberr(
- &qs->last_error, (int)outlen, NULL, 0);
- return CURLE_SEND_ERROR;
- }
- }
- else if(ndatalen >= 0) {
- rv = nghttp3_conn_add_write_offset(qs->h3conn, stream_id, ndatalen);
- if(rv) {
- failf(data, "nghttp3_conn_add_write_offset returned error: %s\n",
- nghttp3_strerror(rv));
- return CURLE_SEND_ERROR;
- }
- }
-
- outpos += outlen;
-
- if(pktcnt == 0) {
- gsolen = outlen;
- }
- else if((size_t)outlen > gsolen ||
- (gsolen > path_max_udp_payload_size &&
- (size_t)outlen != gsolen)) {
- /* Packet larger than path_max_udp_payload_size is PMTUD probe
- packet and it might not be sent because of EMSGSIZE. Send
- them separately to minimize the loss. */
- curlcode = send_packet(&sent, data, sockfd, qs, qs->pktbuf,
- outpos - outlen - qs->pktbuf, gsolen);
- if(curlcode) {
- if(curlcode == CURLE_AGAIN) {
- push_blocked_pkt(qs, qs->pktbuf + sent,
- outpos - outlen - qs->pktbuf - sent, gsolen);
- push_blocked_pkt(qs, outpos - outlen, outlen, outlen);
- Curl_expire(data, 1, EXPIRE_QUIC);
- return CURLE_OK;
- }
- return curlcode;
- }
- curlcode = send_packet(&sent, data, sockfd, qs, outpos - outlen, outlen,
- outlen);
- if(curlcode) {
- if(curlcode == CURLE_AGAIN) {
- assert(0 == sent);
- push_blocked_pkt(qs, outpos - outlen, outlen, outlen);
- Curl_expire(data, 1, EXPIRE_QUIC);
- return CURLE_OK;
- }
- return curlcode;
- }
-
- pktcnt = 0;
- outpos = qs->pktbuf;
- continue;
- }
-
- if(++pktcnt >= max_pktcnt || (size_t)outlen < gsolen) {
- curlcode = send_packet(&sent, data, sockfd, qs, qs->pktbuf,
- outpos - qs->pktbuf, gsolen);
- if(curlcode) {
- if(curlcode == CURLE_AGAIN) {
- push_blocked_pkt(qs, qs->pktbuf + sent, outpos - qs->pktbuf - sent,
- gsolen);
- Curl_expire(data, 1, EXPIRE_QUIC);
- return CURLE_OK;
- }
- return curlcode;
- }
-
- pktcnt = 0;
- outpos = qs->pktbuf;
- }
- }
-
- expiry = ngtcp2_conn_get_expiry(qs->qconn);
- if(expiry != UINT64_MAX) {
- if(expiry <= ts) {
- timeout = 0;
- }
- else {
- timeout = expiry - ts;
- if(timeout % NGTCP2_MILLISECONDS) {
- timeout += NGTCP2_MILLISECONDS;
- }
- }
- Curl_expire(data, timeout / NGTCP2_MILLISECONDS, EXPIRE_QUIC);
- }
-
- return CURLE_OK;
-}
-
-/*
- * Called from transfer.c:done_sending when we stop HTTP/3 uploading.
- */
-CURLcode Curl_quic_done_sending(struct Curl_easy *data)
-{
- struct connectdata *conn = data->conn;
- DEBUGASSERT(conn);
- if(conn->handler == &Curl_handler_http3) {
- /* only for HTTP/3 transfers */
- struct HTTP *stream = data->req.p.http;
- struct quicsocket *qs = conn->quic;
- stream->upload_done = TRUE;
- (void)nghttp3_conn_resume_stream(qs->h3conn, stream->stream3_id);
- }
-
- return CURLE_OK;
-}
-
-/*
- * Called from http.c:Curl_http_done when a request completes.
- */
-void Curl_quic_done(struct Curl_easy *data, bool premature)
-{
- (void)premature;
- if(data->conn->handler == &Curl_handler_http3) {
- /* only for HTTP/3 transfers */
- struct HTTP *stream = data->req.p.http;
- Curl_dyn_free(&stream->overflow);
- free(stream->h3out);
- }
-}
-
-/*
- * Called from transfer.c:data_pending to know if we should keep looping
- * to receive more data from the connection.
- */
-bool Curl_quic_data_pending(const struct Curl_easy *data)
-{
- /* We may have received more data than we're able to hold in the receive
- buffer and allocated an overflow buffer. Since it's possible that
- there's no more data coming on the socket, we need to keep reading
- until the overflow buffer is empty. */
- const struct HTTP *stream = data->req.p.http;
- return Curl_dyn_len(&stream->overflow) > 0;
-}
-
-/*
- * Called from transfer.c:Curl_readwrite when neither HTTP level read
- * nor write is performed. It is a good place to handle timer expiry
- * for QUIC transport.
- */
-CURLcode Curl_quic_idle(struct Curl_easy *data)
-{
- struct connectdata *conn = data->conn;
- curl_socket_t sockfd = conn->sock[FIRSTSOCKET];
- struct quicsocket *qs = conn->quic;
-
- if(ngtcp2_conn_get_expiry(qs->qconn) > timestamp()) {
- return CURLE_OK;
- }
-
- if(ng_flush_egress(data, sockfd, qs)) {
- return CURLE_SEND_ERROR;
- }
-
- return CURLE_OK;
-}
-
-#endif
diff --git a/lib/vquic/ngtcp2.h b/lib/vquic/ngtcp2.h
deleted file mode 100644
index 6539f5fef..000000000
--- a/lib/vquic/ngtcp2.h
+++ /dev/null
@@ -1,94 +0,0 @@
-#ifndef HEADER_CURL_VQUIC_NGTCP2_H
-#define HEADER_CURL_VQUIC_NGTCP2_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed 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 "curl_setup.h"
-
-#ifdef USE_NGTCP2
-
-#ifdef HAVE_NETINET_UDP_H
-#include <netinet/udp.h>
-#endif
-
-#include <ngtcp2/ngtcp2_crypto.h>
-#include <nghttp3/nghttp3.h>
-#ifdef USE_OPENSSL
-#include <openssl/ssl.h>
-#elif defined(USE_GNUTLS)
-#include <gnutls/gnutls.h>
-#elif defined(USE_WOLFSSL)
-#include <wolfssl/options.h>
-#include <wolfssl/ssl.h>
-#include <wolfssl/quic.h>
-#endif
-
-struct blocked_pkt {
- const uint8_t *pkt;
- size_t pktlen;
- size_t gsolen;
-};
-
-struct quicsocket {
- struct connectdata *conn; /* point back to the connection */
- ngtcp2_conn *qconn;
- ngtcp2_cid dcid;
- ngtcp2_cid scid;
- uint32_t version;
- ngtcp2_settings settings;
- ngtcp2_transport_params transport_params;
- ngtcp2_connection_close_error last_error;
- ngtcp2_crypto_conn_ref conn_ref;
-#ifdef USE_OPENSSL
- SSL_CTX *sslctx;
- SSL *ssl;
-#elif defined(USE_GNUTLS)
- gnutls_certificate_credentials_t cred;
- gnutls_session_t ssl;
-#elif defined(USE_WOLFSSL)
- WOLFSSL_CTX *sslctx;
- WOLFSSL *ssl;
-#endif
- struct sockaddr_storage local_addr;
- socklen_t local_addrlen;
- bool no_gso;
- uint8_t *pktbuf;
- size_t pktbuflen;
- /* the number of entries in blocked_pkt */
- size_t num_blocked_pkt;
- /* the number of processed entries in blocked_pkt */
- size_t num_blocked_pkt_sent;
- /* the packets blocked by sendmsg (EAGAIN or EWOULDBLOCK) */
- struct blocked_pkt blocked_pkt[2];
-
- nghttp3_conn *h3conn;
- nghttp3_settings h3settings;
- int qlogfd;
-};
-
-#include "urldata.h"
-
-#endif
-
-#endif /* HEADER_CURL_VQUIC_NGTCP2_H */
diff --git a/lib/vquic/quiche.c b/lib/vquic/quiche.c
deleted file mode 100644
index a52a7e8e2..000000000
--- a/lib/vquic/quiche.c
+++ /dev/null
@@ -1,895 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed 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 "curl_setup.h"
-
-#ifdef USE_QUICHE
-#include <quiche.h>
-#include <openssl/err.h>
-#include <openssl/ssl.h>
-#include "urldata.h"
-#include "sendf.h"
-#include "strdup.h"
-#include "rand.h"
-#include "quic.h"
-#include "strcase.h"
-#include "multiif.h"
-#include "connect.h"
-#include "strerror.h"
-#include "vquic.h"
-#include "transfer.h"
-#include "h2h3.h"
-#include "vtls/openssl.h"
-#include "vtls/keylog.h"
-
-/* The last 3 #include files should be in this order */
-#include "curl_printf.h"
-#include "curl_memory.h"
-#include "memdebug.h"
-
-#define DEBUG_HTTP3
-/* #define DEBUG_QUICHE */
-#ifdef DEBUG_HTTP3
-#define H3BUGF(x) x
-#else
-#define H3BUGF(x) do { } while(0)
-#endif
-
-#define QUIC_MAX_STREAMS (256*1024)
-#define QUIC_MAX_DATA (1*1024*1024)
-#define QUIC_IDLE_TIMEOUT (60 * 1000) /* milliseconds */
-
-static CURLcode process_ingress(struct Curl_easy *data,
- curl_socket_t sockfd,
- struct quicsocket *qs);
-
-static CURLcode flush_egress(struct Curl_easy *data, curl_socket_t sockfd,
- struct quicsocket *qs);
-
-static CURLcode http_request(struct Curl_easy *data, const void *mem,
- size_t len);
-static Curl_recv h3_stream_recv;
-static Curl_send h3_stream_send;
-
-static int quiche_getsock(struct Curl_easy *data,
- struct connectdata *conn, curl_socket_t *socks)
-{
- struct SingleRequest *k = &data->req;
- int bitmap = GETSOCK_BLANK;
-
- socks[0] = conn->sock[FIRSTSOCKET];
-
- /* in a HTTP/2 connection we can basically always get a frame so we should
- always be ready for one */
- bitmap |= GETSOCK_READSOCK(FIRSTSOCKET);
-
- /* we're still uploading or the HTTP/2 layer wants to send data */
- if((k->keepon & (KEEP_SEND|KEEP_SEND_PAUSE)) == KEEP_SEND)
- bitmap |= GETSOCK_WRITESOCK(FIRSTSOCKET);
-
- return bitmap;
-}
-
-static CURLcode qs_disconnect(struct Curl_easy *data,
- struct quicsocket *qs)
-{
- DEBUGASSERT(qs);
- if(qs->conn) {
- (void)quiche_conn_close(qs->conn, TRUE, 0, NULL, 0);
- /* flushing the egress is not a failsafe way to deliver all the
- outstanding packets, but we also don't want to get stuck here... */
- (void)flush_egress(data, qs->sockfd, qs);
- quiche_conn_free(qs->conn);
- qs->conn = NULL;
- }
- if(qs->h3config)
- quiche_h3_config_free(qs->h3config);
- if(qs->h3c)
- quiche_h3_conn_free(qs->h3c);
- if(qs->cfg) {
- quiche_config_free(qs->cfg);
- qs->cfg = NULL;
- }
- return CURLE_OK;
-}
-
-static CURLcode quiche_disconnect(struct Curl_easy *data,
- struct connectdata *conn,
- bool dead_connection)
-{
- struct quicsocket *qs = conn->quic;
- (void)dead_connection;
- return qs_disconnect(data, qs);
-}
-
-void Curl_quic_disconnect(struct Curl_easy *data,
- struct connectdata *conn,
- int tempindex)
-{
- if(conn->transport == TRNSPRT_QUIC)
- qs_disconnect(data, &conn->hequic[tempindex]);
-}
-
-static unsigned int quiche_conncheck(struct Curl_easy *data,
- struct connectdata *conn,
- unsigned int checks_to_perform)
-{
- (void)data;
- (void)conn;
- (void)checks_to_perform;
- return CONNRESULT_NONE;
-}
-
-static CURLcode quiche_do(struct Curl_easy *data, bool *done)
-{
- struct HTTP *stream = data->req.p.http;
- stream->h3req = FALSE; /* not sent */
- return Curl_http(data, done);
-}
-
-static const struct Curl_handler Curl_handler_http3 = {
- "HTTPS", /* scheme */
- ZERO_NULL, /* setup_connection */
- quiche_do, /* do_it */
- Curl_http_done, /* done */
- ZERO_NULL, /* do_more */
- ZERO_NULL, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- quiche_getsock, /* proto_getsock */
- quiche_getsock, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- quiche_getsock, /* perform_getsock */
- quiche_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- quiche_conncheck, /* connection_check */
- ZERO_NULL, /* attach connection */
- PORT_HTTP, /* defport */
- CURLPROTO_HTTPS, /* protocol */
- CURLPROTO_HTTP, /* family */
- PROTOPT_SSL | PROTOPT_STREAM /* flags */
-};
-
-#ifdef DEBUG_QUICHE
-static void quiche_debug_log(const char *line, void *argp)
-{
- (void)argp;
- fprintf(stderr, "%s\n", line);
-}
-#endif
-
-static void keylog_callback(const SSL *ssl, const char *line)
-{
- (void)ssl;
- Curl_tls_keylog_write_line(line);
-}
-
-static SSL_CTX *quic_ssl_ctx(struct Curl_easy *data)
-{
- SSL_CTX *ssl_ctx = SSL_CTX_new(TLS_method());
-
- SSL_CTX_set_alpn_protos(ssl_ctx,
- (const uint8_t *)QUICHE_H3_APPLICATION_PROTOCOL,
- sizeof(QUICHE_H3_APPLICATION_PROTOCOL) - 1);
-
- SSL_CTX_set_default_verify_paths(ssl_ctx);
-
- /* Open the file if a TLS or QUIC backend has not done this before. */
- Curl_tls_keylog_open();
- if(Curl_tls_keylog_enabled()) {
- SSL_CTX_set_keylog_callback(ssl_ctx, keylog_callback);
- }
-
- {
- struct connectdata *conn = data->conn;
- if(conn->ssl_config.verifypeer) {
- const char * const ssl_cafile = conn->ssl_config.CAfile;
- const char * const ssl_capath = conn->ssl_config.CApath;
- if(ssl_cafile || ssl_capath) {
- SSL_CTX_set_verify(ssl_ctx, SSL_VERIFY_PEER, NULL);
- /* tell OpenSSL where to find CA certificates that are used to verify
- the server's certificate. */
- if(!SSL_CTX_load_verify_locations(ssl_ctx, ssl_cafile, ssl_capath)) {
- /* Fail if we insist on successfully verifying the server. */
- failf(data, "error setting certificate verify locations:"
- " CAfile: %s CApath: %s",
- ssl_cafile ? ssl_cafile : "none",
- ssl_capath ? ssl_capath : "none");
- return NULL;
- }
- infof(data, " CAfile: %s", ssl_cafile ? ssl_cafile : "none");
- infof(data, " CApath: %s", ssl_capath ? ssl_capath : "none");
- }
-#ifdef CURL_CA_FALLBACK
- else {
- /* verifying the peer without any CA certificates won't work so
- use openssl's built-in default as fallback */
- SSL_CTX_set_default_verify_paths(ssl_ctx);
- }
-#endif
- }
- }
- return ssl_ctx;
-}
-
-static int quic_init_ssl(struct quicsocket *qs, struct connectdata *conn)
-{
- /* this will need some attention when HTTPS proxy over QUIC get fixed */
- const char * const hostname = conn->host.name;
-
- DEBUGASSERT(!qs->ssl);
- qs->ssl = SSL_new(qs->sslctx);
-
- SSL_set_app_data(qs->ssl, qs);
-
- /* set SNI */
- SSL_set_tlsext_host_name(qs->ssl, hostname);
- return 0;
-}
-
-
-CURLcode Curl_quic_connect(struct Curl_easy *data,
- struct connectdata *conn, curl_socket_t sockfd,
- int sockindex,
- const struct sockaddr *addr, socklen_t addrlen)
-{
- CURLcode result;
- struct quicsocket *qs = &conn->hequic[sockindex];
- char ipbuf[40];
- int port;
- int rv;
-
-#ifdef DEBUG_QUICHE
- /* initialize debug log callback only once */
- static int debug_log_init = 0;
- if(!debug_log_init) {
- quiche_enable_debug_logging(quiche_debug_log, NULL);
- debug_log_init = 1;
- }
-#endif
-
- (void)addr;
- (void)addrlen;
-
- qs->sockfd = sockfd;
- qs->cfg = quiche_config_new(QUICHE_PROTOCOL_VERSION);
- if(!qs->cfg) {
- failf(data, "can't create quiche config");
- return CURLE_FAILED_INIT;
- }
-
- quiche_config_set_max_idle_timeout(qs->cfg, QUIC_IDLE_TIMEOUT);
- quiche_config_set_initial_max_data(qs->cfg, QUIC_MAX_DATA);
- quiche_config_set_initial_max_stream_data_bidi_local(qs->cfg, QUIC_MAX_DATA);
- quiche_config_set_initial_max_stream_data_bidi_remote(qs->cfg,
- QUIC_MAX_DATA);
- quiche_config_set_initial_max_stream_data_uni(qs->cfg, QUIC_MAX_DATA);
- quiche_config_set_initial_max_streams_bidi(qs->cfg, QUIC_MAX_STREAMS);
- quiche_config_set_initial_max_streams_uni(qs->cfg, QUIC_MAX_STREAMS);
- quiche_config_set_application_protos(qs->cfg,
- (uint8_t *)
- QUICHE_H3_APPLICATION_PROTOCOL,
- sizeof(QUICHE_H3_APPLICATION_PROTOCOL)
- - 1);
-
- qs->sslctx = quic_ssl_ctx(data);
- if(!qs->sslctx)
- return CURLE_QUIC_CONNECT_ERROR;
-
- if(quic_init_ssl(qs, conn))
- return CURLE_QUIC_CONNECT_ERROR;
-
- result = Curl_rand(data, qs->scid, sizeof(qs->scid));
- if(result)
- return result;
-
- qs->local_addrlen = sizeof(qs->local_addr);
- rv = getsockname(sockfd, (struct sockaddr *)&qs->local_addr,
- &qs->local_addrlen);
- if(rv == -1)
- return CURLE_QUIC_CONNECT_ERROR;
-
- qs->conn = quiche_conn_new_with_tls((const uint8_t *) qs->scid,
- sizeof(qs->scid), NULL, 0,
- (struct sockaddr *)&qs->local_addr,
- qs->local_addrlen, addr, addrlen,
- qs->cfg, qs->ssl, false);
- if(!qs->conn) {
- failf(data, "can't create quiche connection");
- return CURLE_OUT_OF_MEMORY;
- }
-
- /* Known to not work on Windows */
-#if !defined(WIN32) && defined(HAVE_QUICHE_CONN_SET_QLOG_FD)
- {
- int qfd;
- (void)Curl_qlogdir(data, qs->scid, sizeof(qs->scid), &qfd);
- if(qfd != -1)
- quiche_conn_set_qlog_fd(qs->conn, qfd,
- "qlog title", "curl qlog");
- }
-#endif
-
- result = flush_egress(data, sockfd, qs);
- if(result)
- return result;
-
- /* extract the used address as a string */
- if(!Curl_addr2string((struct sockaddr*)addr, addrlen, ipbuf, &port)) {
- char buffer[STRERROR_LEN];
- failf(data, "ssrem inet_ntop() failed with errno %d: %s",
- SOCKERRNO, Curl_strerror(SOCKERRNO, buffer, sizeof(buffer)));
- return CURLE_BAD_FUNCTION_ARGUMENT;
- }
-
- infof(data, "Connect socket %d over QUIC to %s:%ld",
- sockfd, ipbuf, port);
-
- Curl_persistconninfo(data, conn, NULL, -1);
-
- /* for connection reuse purposes: */
- conn->ssl[FIRSTSOCKET].state = ssl_connection_complete;
-
- {
- unsigned char alpn_protocols[] = QUICHE_H3_APPLICATION_PROTOCOL;
- unsigned alpn_len, offset = 0;
-
- /* Replace each ALPN length prefix by a comma. */
- while(offset < sizeof(alpn_protocols) - 1) {
- alpn_len = alpn_protocols[offset];
- alpn_protocols[offset] = ',';
- offset += 1 + alpn_len;
- }
-
- infof(data, "Sent QUIC client Initial, ALPN: %s",
- alpn_protocols + 1);
- }
-
- return CURLE_OK;
-}
-
-static CURLcode quiche_has_connected(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex,
- int tempindex)
-{
- CURLcode result;
- struct quicsocket *qs = conn->quic = &conn->hequic[tempindex];
-
- conn->recv[sockindex] = h3_stream_recv;
- conn->send[sockindex] = h3_stream_send;
- conn->handler = &Curl_handler_http3;
- conn->bits.multiplex = TRUE; /* at least potentially multiplexed */
- conn->httpversion = 30;
- conn->bundle->multiuse = BUNDLE_MULTIPLEX;
-
- if(conn->ssl_config.verifyhost) {
- X509 *server_cert;
- server_cert = SSL_get_peer_certificate(qs->ssl);
- if(!server_cert) {
- return CURLE_PEER_FAILED_VERIFICATION;
- }
- result = Curl_ossl_verifyhost(data, conn, server_cert);
- X509_free(server_cert);
- if(result)
- return result;
- infof(data, "Verified certificate just fine");
- }
- else
- infof(data, "Skipped certificate verification");
-
- qs->h3config = quiche_h3_config_new();
- if(!qs->h3config)
- return CURLE_OUT_OF_MEMORY;
-
- /* Create a new HTTP/3 connection on the QUIC connection. */
- qs->h3c = quiche_h3_conn_new_with_transport(qs->conn, qs->h3config);
- if(!qs->h3c) {
- result = CURLE_OUT_OF_MEMORY;
- goto fail;
- }
- if(conn->hequic[1-tempindex].cfg) {
- qs = &conn->hequic[1-tempindex];
- quiche_config_free(qs->cfg);
- quiche_conn_free(qs->conn);
- qs->cfg = NULL;
- qs->conn = NULL;
- }
- if(data->set.ssl.certinfo)
- /* asked to gather certificate info */
- (void)Curl_ossl_certchain(data, qs->ssl);
-
- return CURLE_OK;
- fail:
- quiche_h3_config_free(qs->h3config);
- quiche_h3_conn_free(qs->h3c);
- return result;
-}
-
-/*
- * This function gets polled to check if this QUIC connection has connected.
- */
-CURLcode Curl_quic_is_connected(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex,
- bool *done)
-{
- CURLcode result;
- struct quicsocket *qs = &conn->hequic[sockindex];
- curl_socket_t sockfd = conn->tempsock[sockindex];
-
- result = process_ingress(data, sockfd, qs);
- if(result)
- goto error;
-
- result = flush_egress(data, sockfd, qs);
- if(result)
- goto error;
-
- if(quiche_conn_is_established(qs->conn)) {
- *done = TRUE;
- result = quiche_has_connected(data, conn, 0, sockindex);
- DEBUGF(infof(data, "quiche established connection"));
- }
-
- return result;
- error:
- qs_disconnect(data, qs);
- return result;
-}
-
-static CURLcode process_ingress(struct Curl_easy *data, int sockfd,
- struct quicsocket *qs)
-{
- ssize_t recvd;
- uint8_t *buf = (uint8_t *)data->state.buffer;
- size_t bufsize = data->set.buffer_size;
- struct sockaddr_storage from;
- socklen_t from_len;
- quiche_recv_info recv_info;
-
- DEBUGASSERT(qs->conn);
-
- /* in case the timeout expired */
- quiche_conn_on_timeout(qs->conn);
-
- do {
- from_len = sizeof(from);
-
- recvd = recvfrom(sockfd, buf, bufsize, 0,
- (struct sockaddr *)&from, &from_len);
-
- if((recvd < 0) && ((SOCKERRNO == EAGAIN) || (SOCKERRNO == EWOULDBLOCK)))
- break;
-
- if(recvd < 0) {
- failf(data, "quiche: recvfrom() unexpectedly returned %zd "
- "(errno: %d, socket %d)", recvd, SOCKERRNO, sockfd);
- return CURLE_RECV_ERROR;
- }
-
- recv_info.from = (struct sockaddr *) &from;
- recv_info.from_len = from_len;
- recv_info.to = (struct sockaddr *) &qs->local_addr;
- recv_info.to_len = qs->local_addrlen;
-
- recvd = quiche_conn_recv(qs->conn, buf, recvd, &recv_info);
- if(recvd == QUICHE_ERR_DONE)
- break;
-
- if(recvd < 0) {
- if(QUICHE_ERR_TLS_FAIL == recvd) {
- long verify_ok = SSL_get_verify_result(qs->ssl);
- if(verify_ok != X509_V_OK) {
- failf(data, "SSL certificate problem: %s",
- X509_verify_cert_error_string(verify_ok));
-
- return CURLE_PEER_FAILED_VERIFICATION;
- }
- }
-
- failf(data, "quiche_conn_recv() == %zd", recvd);
-
- return CURLE_RECV_ERROR;
- }
- } while(1);
-
- return CURLE_OK;
-}
-
-/*
- * flush_egress drains the buffers and sends off data.
- * Calls failf() on errors.
- */
-static CURLcode flush_egress(struct Curl_easy *data, int sockfd,
- struct quicsocket *qs)
-{
- ssize_t sent;
- uint8_t out[1200];
- int64_t timeout_ns;
- quiche_send_info send_info;
-
- do {
- sent = quiche_conn_send(qs->conn, out, sizeof(out), &send_info);
- if(sent == QUICHE_ERR_DONE)
- break;
-
- if(sent < 0) {
- failf(data, "quiche_conn_send returned %zd", sent);
- return CURLE_SEND_ERROR;
- }
-
- sent = send(sockfd, out, sent, 0);
- if(sent < 0) {
- failf(data, "send() returned %zd", sent);
- return CURLE_SEND_ERROR;
- }
- } while(1);
-
- /* time until the next timeout event, as nanoseconds. */
- timeout_ns = quiche_conn_timeout_as_nanos(qs->conn);
- if(timeout_ns)
- /* expire uses milliseconds */
- Curl_expire(data, (timeout_ns + 999999) / 1000000, EXPIRE_QUIC);
-
- return CURLE_OK;
-}
-
-struct h3h1header {
- char *dest;
- size_t destlen; /* left to use */
- size_t nlen; /* used */
-};
-
-static int cb_each_header(uint8_t *name, size_t name_len,
- uint8_t *value, size_t value_len,
- void *argp)
-{
- struct h3h1header *headers = (struct h3h1header *)argp;
- size_t olen = 0;
-
- if((name_len == 7) && !strncmp(H2H3_PSEUDO_STATUS, (char *)name, 7)) {
- msnprintf(headers->dest,
- headers->destlen, "HTTP/3 %.*s\n",
- (int) value_len, value);
- }
- else if(!headers->nlen) {
- return CURLE_HTTP3;
- }
- else {
- msnprintf(headers->dest,
- headers->destlen, "%.*s: %.*s\n",
- (int)name_len, name, (int) value_len, value);
- }
- olen = strlen(headers->dest);
- headers->destlen -= olen;
- headers->nlen += olen;
- headers->dest += olen;
- return 0;
-}
-
-static ssize_t h3_stream_recv(struct Curl_easy *data,
- int sockindex,
- char *buf,
- size_t buffersize,
- CURLcode *curlcode)
-{
- ssize_t recvd = -1;
- ssize_t rcode;
- struct connectdata *conn = data->conn;
- struct quicsocket *qs = conn->quic;
- curl_socket_t sockfd = conn->sock[sockindex];
- quiche_h3_event *ev;
- int rc;
- struct h3h1header headers;
- struct HTTP *stream = data->req.p.http;
- headers.dest = buf;
- headers.destlen = buffersize;
- headers.nlen = 0;
-
- if(process_ingress(data, sockfd, qs)) {
- infof(data, "h3_stream_recv returns on ingress");
- *curlcode = CURLE_RECV_ERROR;
- return -1;
- }
-
- if(qs->h3_recving) {
- /* body receiving state */
- rcode = quiche_h3_recv_body(qs->h3c, qs->conn, stream->stream3_id,
- (unsigned char *)buf, buffersize);
- if(rcode <= 0) {
- recvd = -1;
- qs->h3_recving = FALSE;
- /* fall through into the while loop below */
- }
- else
- recvd = rcode;
- }
-
- while(recvd < 0) {
- int64_t s = quiche_h3_conn_poll(qs->h3c, qs->conn, &ev);
- if(s < 0)
- /* nothing more to do */
- break;
-
- if(s != stream->stream3_id) {
- /* another transfer, ignore for now */
- infof(data, "Got h3 for stream %u, expects %u",
- s, stream->stream3_id);
- continue;
- }
-
- switch(quiche_h3_event_type(ev)) {
- case QUICHE_H3_EVENT_HEADERS:
- rc = quiche_h3_event_for_each_header(ev, cb_each_header, &headers);
- if(rc) {
- *curlcode = rc;
- failf(data, "Error in HTTP/3 response header");
- break;
- }
- recvd = headers.nlen;
- break;
- case QUICHE_H3_EVENT_DATA:
- if(!stream->firstbody) {
- /* add a header-body separator CRLF */
- buf[0] = '\r';
- buf[1] = '\n';
- buf += 2;
- buffersize -= 2;
- stream->firstbody = TRUE;
- recvd = 2; /* two bytes already */
- }
- else
- recvd = 0;
- rcode = quiche_h3_recv_body(qs->h3c, qs->conn, s, (unsigned char *)buf,
- buffersize);
- if(rcode <= 0) {
- recvd = -1;
- break;
- }
- qs->h3_recving = TRUE;
- recvd += rcode;
- break;
-
- case QUICHE_H3_EVENT_RESET:
- streamclose(conn, "Stream reset");
- *curlcode = CURLE_PARTIAL_FILE;
- return -1;
-
- case QUICHE_H3_EVENT_FINISHED:
- streamclose(conn, "End of stream");
- recvd = 0; /* end of stream */
- break;
- default:
- break;
- }
-
- quiche_h3_event_free(ev);
- }
- if(flush_egress(data, sockfd, qs)) {
- *curlcode = CURLE_SEND_ERROR;
- return -1;
- }
-
- *curlcode = (-1 == recvd)? CURLE_AGAIN : CURLE_OK;
- if(recvd >= 0)
- /* Get this called again to drain the event queue */
- Curl_expire(data, 0, EXPIRE_QUIC);
-
- data->state.drain = (recvd >= 0) ? 1 : 0;
- return recvd;
-}
-
-static ssize_t h3_stream_send(struct Curl_easy *data,
- int sockindex,
- const void *mem,
- size_t len,
- CURLcode *curlcode)
-{
- ssize_t sent;
- struct connectdata *conn = data->conn;
- struct quicsocket *qs = conn->quic;
- curl_socket_t sockfd = conn->sock[sockindex];
- struct HTTP *stream = data->req.p.http;
-
- if(!stream->h3req) {
- CURLcode result = http_request(data, mem, len);
- if(result) {
- *curlcode = CURLE_SEND_ERROR;
- return -1;
- }
- sent = len;
- }
- else {
- sent = quiche_h3_send_body(qs->h3c, qs->conn, stream->stream3_id,
- (uint8_t *)mem, len, FALSE);
- if(sent == QUICHE_H3_ERR_DONE) {
- sent = 0;
- }
- else if(sent < 0) {
- *curlcode = CURLE_SEND_ERROR;
- return -1;
- }
- }
-
- if(flush_egress(data, sockfd, qs)) {
- *curlcode = CURLE_SEND_ERROR;
- return -1;
- }
-
- *curlcode = CURLE_OK;
- return sent;
-}
-
-/*
- * Store quiche version info in this buffer.
- */
-void Curl_quic_ver(char *p, size_t len)
-{
- (void)msnprintf(p, len, "quiche/%s", quiche_version());
-}
-
-/* Index where :authority header field will appear in request header
- field list. */
-#define AUTHORITY_DST_IDX 3
-
-static CURLcode http_request(struct Curl_easy *data, const void *mem,
- size_t len)
-{
- struct connectdata *conn = data->conn;
- struct HTTP *stream = data->req.p.http;
- size_t nheader;
- int64_t stream3_id;
- quiche_h3_header *nva = NULL;
- struct quicsocket *qs = conn->quic;
- CURLcode result = CURLE_OK;
- struct h2h3req *hreq = NULL;
-
- stream->h3req = TRUE; /* senf off! */
-
- result = Curl_pseudo_headers(data, mem, len, &hreq);
- if(result)
- goto fail;
- nheader = hreq->entries;
-
- nva = malloc(sizeof(quiche_h3_header) * nheader);
- if(!nva) {
- result = CURLE_OUT_OF_MEMORY;
- goto fail;
- }
- else {
- unsigned int i;
- for(i = 0; i < nheader; i++) {
- nva[i].name = (unsigned char *)hreq->header[i].name;
- nva[i].name_len = hreq->header[i].namelen;
- nva[i].value = (unsigned char *)hreq->header[i].value;
- nva[i].value_len = hreq->header[i].valuelen;
- }
- }
-
- switch(data->state.httpreq) {
- case HTTPREQ_POST:
- case HTTPREQ_POST_FORM:
- case HTTPREQ_POST_MIME:
- case HTTPREQ_PUT:
- if(data->state.infilesize != -1)
- stream->upload_left = data->state.infilesize;
- else
- /* data sending without specifying the data amount up front */
- stream->upload_left = -1; /* unknown, but not zero */
-
- stream3_id = quiche_h3_send_request(qs->h3c, qs->conn, nva, nheader,
- stream->upload_left ? FALSE: TRUE);
- if((stream3_id >= 0) && data->set.postfields) {
- ssize_t sent = quiche_h3_send_body(qs->h3c, qs->conn, stream3_id,
- (uint8_t *)data->set.postfields,
- stream->upload_left, TRUE);
- if(sent <= 0) {
- failf(data, "quiche_h3_send_body failed");
- result = CURLE_SEND_ERROR;
- }
- stream->upload_left = 0; /* nothing left to send */
- }
- break;
- default:
- stream3_id = quiche_h3_send_request(qs->h3c, qs->conn, nva, nheader,
- TRUE);
- break;
- }
-
- Curl_safefree(nva);
-
- if(stream3_id < 0) {
- H3BUGF(infof(data, "quiche_h3_send_request returned %d",
- stream3_id));
- result = CURLE_SEND_ERROR;
- goto fail;
- }
-
- infof(data, "Using HTTP/3 Stream ID: %x (easy handle %p)",
- stream3_id, (void *)data);
- stream->stream3_id = stream3_id;
-
- Curl_pseudo_free(hreq);
- return CURLE_OK;
-
-fail:
- free(nva);
- Curl_pseudo_free(hreq);
- return result;
-}
-
-/*
- * Called from transfer.c:done_sending when we stop HTTP/3 uploading.
- */
-CURLcode Curl_quic_done_sending(struct Curl_easy *data)
-{
- struct connectdata *conn = data->conn;
- DEBUGASSERT(conn);
- if(conn->handler == &Curl_handler_http3) {
- /* only for HTTP/3 transfers */
- ssize_t sent;
- struct HTTP *stream = data->req.p.http;
- struct quicsocket *qs = conn->quic;
- stream->upload_done = TRUE;
- sent = quiche_h3_send_body(qs->h3c, qs->conn, stream->stream3_id,
- NULL, 0, TRUE);
- if(sent < 0)
- return CURLE_SEND_ERROR;
- }
-
- return CURLE_OK;
-}
-
-/*
- * Called from http.c:Curl_http_done when a request completes.
- */
-void Curl_quic_done(struct Curl_easy *data, bool premature)
-{
- (void)data;
- (void)premature;
-}
-
-/*
- * Called from transfer.c:data_pending to know if we should keep looping
- * to receive more data from the connection.
- */
-bool Curl_quic_data_pending(const struct Curl_easy *data)
-{
- (void)data;
- return FALSE;
-}
-
-/*
- * Called from transfer.c:Curl_readwrite when neither HTTP level read
- * nor write is performed. It is a good place to handle timer expiry
- * for QUIC transport.
- */
-CURLcode Curl_quic_idle(struct Curl_easy *data)
-{
- (void)data;
- return CURLE_OK;
-}
-
-#endif
diff --git a/lib/vquic/vquic.c b/lib/vquic/vquic.c
index e52a4f301..523b807bc 100644
--- a/lib/vquic/vquic.c
+++ b/lib/vquic/vquic.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -22,17 +22,43 @@
*
***************************************************************************/
-#include "curl_setup.h"
+/* WIP, experimental: use recvmmsg() on linux
+ * we have no configure check, yet
+ * and also it is only available for _GNU_SOURCE, which
+ * we do not use otherwise.
+#define HAVE_SENDMMSG
+ */
+#if defined(HAVE_SENDMMSG)
+#define _GNU_SOURCE
+#include <sys/socket.h>
+#undef _GNU_SOURCE
+#endif
-#ifdef ENABLE_QUIC
+#include "curl_setup.h"
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
#endif
#include "urldata.h"
+#include "bufq.h"
#include "dynbuf.h"
-#include "curl_printf.h"
+#include "cfilters.h"
+#include "curl_trc.h"
+#include "curl_msh3.h"
+#include "curl_ngtcp2.h"
+#include "curl_quiche.h"
+#include "rand.h"
#include "vquic.h"
+#include "vquic_int.h"
+#include "strerror.h"
+
+/* The last 3 #include files should be in this order */
+#include "curl_printf.h"
+#include "curl_memory.h"
+#include "memdebug.h"
+
+
+#ifdef ENABLE_QUIC
#ifdef O_BINARY
#define QLOGMODE O_WRONLY|O_CREAT|O_BINARY
@@ -40,6 +66,488 @@
#define QLOGMODE O_WRONLY|O_CREAT
#endif
+#define NW_CHUNK_SIZE (64 * 1024)
+#define NW_SEND_CHUNKS 2
+
+
+void Curl_quic_ver(char *p, size_t len)
+{
+#if defined(USE_NGTCP2) && defined(USE_NGHTTP3)
+ Curl_ngtcp2_ver(p, len);
+#elif defined(USE_QUICHE)
+ Curl_quiche_ver(p, len);
+#elif defined(USE_MSH3)
+ Curl_msh3_ver(p, len);
+#endif
+}
+
+CURLcode vquic_ctx_init(struct cf_quic_ctx *qctx)
+{
+ Curl_bufq_init2(&qctx->sendbuf, NW_CHUNK_SIZE, NW_SEND_CHUNKS,
+ BUFQ_OPT_SOFT_LIMIT);
+#if defined(__linux__) && defined(UDP_SEGMENT) && defined(HAVE_SENDMSG)
+ qctx->no_gso = FALSE;
+#else
+ qctx->no_gso = TRUE;
+#endif
+#ifdef DEBUGBUILD
+ {
+ char *p = getenv("CURL_DBG_QUIC_WBLOCK");
+ if(p) {
+ long l = strtol(p, NULL, 10);
+ if(l >= 0 && l <= 100)
+ qctx->wblock_percent = (int)l;
+ }
+ }
+#endif
+ vquic_ctx_update_time(qctx);
+
+ return CURLE_OK;
+}
+
+void vquic_ctx_free(struct cf_quic_ctx *qctx)
+{
+ Curl_bufq_free(&qctx->sendbuf);
+}
+
+void vquic_ctx_update_time(struct cf_quic_ctx *qctx)
+{
+ qctx->last_op = Curl_now();
+}
+
+static CURLcode send_packet_no_gso(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct cf_quic_ctx *qctx,
+ const uint8_t *pkt, size_t pktlen,
+ size_t gsolen, size_t *psent);
+
+static CURLcode do_sendmsg(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct cf_quic_ctx *qctx,
+ const uint8_t *pkt, size_t pktlen, size_t gsolen,
+ size_t *psent)
+{
+#ifdef HAVE_SENDMSG
+ struct iovec msg_iov;
+ struct msghdr msg = {0};
+ ssize_t sent;
+#if defined(__linux__) && defined(UDP_SEGMENT)
+ uint8_t msg_ctrl[32];
+ struct cmsghdr *cm;
+#endif
+
+ *psent = 0;
+ msg_iov.iov_base = (uint8_t *)pkt;
+ msg_iov.iov_len = pktlen;
+ msg.msg_iov = &msg_iov;
+ msg.msg_iovlen = 1;
+
+#if defined(__linux__) && defined(UDP_SEGMENT)
+ if(pktlen > gsolen) {
+ /* Only set this, when we need it. macOS, for example,
+ * does not seem to like a msg_control of length 0. */
+ msg.msg_control = msg_ctrl;
+ assert(sizeof(msg_ctrl) >= CMSG_SPACE(sizeof(uint16_t)));
+ msg.msg_controllen = CMSG_SPACE(sizeof(uint16_t));
+ cm = CMSG_FIRSTHDR(&msg);
+ cm->cmsg_level = SOL_UDP;
+ cm->cmsg_type = UDP_SEGMENT;
+ cm->cmsg_len = CMSG_LEN(sizeof(uint16_t));
+ *(uint16_t *)(void *)CMSG_DATA(cm) = gsolen & 0xffff;
+ }
+#endif
+
+
+ while((sent = sendmsg(qctx->sockfd, &msg, 0)) == -1 && SOCKERRNO == EINTR)
+ ;
+
+ if(sent == -1) {
+ switch(SOCKERRNO) {
+ case EAGAIN:
+#if EAGAIN != EWOULDBLOCK
+ case EWOULDBLOCK:
+#endif
+ return CURLE_AGAIN;
+ case EMSGSIZE:
+ /* UDP datagram is too large; caused by PMTUD. Just let it be lost. */
+ break;
+ case EIO:
+ if(pktlen > gsolen) {
+ /* GSO failure */
+ failf(data, "sendmsg() returned %zd (errno %d); disable GSO", sent,
+ SOCKERRNO);
+ qctx->no_gso = TRUE;
+ return send_packet_no_gso(cf, data, qctx, pkt, pktlen, gsolen, psent);
+ }
+ /* FALLTHROUGH */
+ default:
+ failf(data, "sendmsg() returned %zd (errno %d)", sent, SOCKERRNO);
+ return CURLE_SEND_ERROR;
+ }
+ }
+ else {
+ assert(pktlen == (size_t)sent);
+ }
+#else
+ ssize_t sent;
+ (void)gsolen;
+
+ *psent = 0;
+
+ while((sent = send(qctx->sockfd,
+ (const char *)pkt, (SEND_TYPE_ARG3)pktlen, 0)) == -1 &&
+ SOCKERRNO == EINTR)
+ ;
+
+ if(sent == -1) {
+ if(SOCKERRNO == EAGAIN || SOCKERRNO == EWOULDBLOCK) {
+ return CURLE_AGAIN;
+ }
+ else {
+ failf(data, "send() returned %zd (errno %d)", sent, SOCKERRNO);
+ if(SOCKERRNO != EMSGSIZE) {
+ return CURLE_SEND_ERROR;
+ }
+ /* UDP datagram is too large; caused by PMTUD. Just let it be
+ lost. */
+ }
+ }
+#endif
+ (void)cf;
+ *psent = pktlen;
+
+ return CURLE_OK;
+}
+
+static CURLcode send_packet_no_gso(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct cf_quic_ctx *qctx,
+ const uint8_t *pkt, size_t pktlen,
+ size_t gsolen, size_t *psent)
+{
+ const uint8_t *p, *end = pkt + pktlen;
+ size_t sent;
+
+ *psent = 0;
+
+ for(p = pkt; p < end; p += gsolen) {
+ size_t len = CURLMIN(gsolen, (size_t)(end - p));
+ CURLcode curlcode = do_sendmsg(cf, data, qctx, p, len, len, &sent);
+ if(curlcode != CURLE_OK) {
+ return curlcode;
+ }
+ *psent += sent;
+ }
+
+ return CURLE_OK;
+}
+
+static CURLcode vquic_send_packets(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct cf_quic_ctx *qctx,
+ const uint8_t *pkt, size_t pktlen,
+ size_t gsolen, size_t *psent)
+{
+ CURLcode result;
+#ifdef DEBUGBUILD
+ /* simulate network blocking/partial writes */
+ if(qctx->wblock_percent > 0) {
+ unsigned char c;
+ Curl_rand(data, &c, 1);
+ if(c >= ((100-qctx->wblock_percent)*256/100)) {
+ CURL_TRC_CF(data, cf, "vquic_flush() simulate EWOULDBLOCK");
+ return CURLE_AGAIN;
+ }
+ }
+#endif
+ if(qctx->no_gso && pktlen > gsolen) {
+ result = send_packet_no_gso(cf, data, qctx, pkt, pktlen, gsolen, psent);
+ }
+ else {
+ result = do_sendmsg(cf, data, qctx, pkt, pktlen, gsolen, psent);
+ }
+ if(!result)
+ qctx->last_io = qctx->last_op;
+ return result;
+}
+
+CURLcode vquic_flush(struct Curl_cfilter *cf, struct Curl_easy *data,
+ struct cf_quic_ctx *qctx)
+{
+ const unsigned char *buf;
+ size_t blen, sent;
+ CURLcode result;
+ size_t gsolen;
+
+ while(Curl_bufq_peek(&qctx->sendbuf, &buf, &blen)) {
+ gsolen = qctx->gsolen;
+ if(qctx->split_len) {
+ gsolen = qctx->split_gsolen;
+ if(blen > qctx->split_len)
+ blen = qctx->split_len;
+ }
+
+ result = vquic_send_packets(cf, data, qctx, buf, blen, gsolen, &sent);
+ CURL_TRC_CF(data, cf, "vquic_send(len=%zu, gso=%zu) -> %d, sent=%zu",
+ blen, gsolen, result, sent);
+ if(result) {
+ if(result == CURLE_AGAIN) {
+ Curl_bufq_skip(&qctx->sendbuf, sent);
+ if(qctx->split_len)
+ qctx->split_len -= sent;
+ }
+ return result;
+ }
+ Curl_bufq_skip(&qctx->sendbuf, sent);
+ if(qctx->split_len)
+ qctx->split_len -= sent;
+ }
+ return CURLE_OK;
+}
+
+CURLcode vquic_send(struct Curl_cfilter *cf, struct Curl_easy *data,
+ struct cf_quic_ctx *qctx, size_t gsolen)
+{
+ qctx->gsolen = gsolen;
+ return vquic_flush(cf, data, qctx);
+}
+
+CURLcode vquic_send_tail_split(struct Curl_cfilter *cf, struct Curl_easy *data,
+ struct cf_quic_ctx *qctx, size_t gsolen,
+ size_t tail_len, size_t tail_gsolen)
+{
+ DEBUGASSERT(Curl_bufq_len(&qctx->sendbuf) > tail_len);
+ qctx->split_len = Curl_bufq_len(&qctx->sendbuf) - tail_len;
+ qctx->split_gsolen = gsolen;
+ qctx->gsolen = tail_gsolen;
+ CURL_TRC_CF(data, cf, "vquic_send_tail_split: [%zu gso=%zu][%zu gso=%zu]",
+ qctx->split_len, qctx->split_gsolen,
+ tail_len, qctx->gsolen);
+ return vquic_flush(cf, data, qctx);
+}
+
+#ifdef HAVE_SENDMMSG
+static CURLcode recvmmsg_packets(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct cf_quic_ctx *qctx,
+ size_t max_pkts,
+ vquic_recv_pkt_cb *recv_cb, void *userp)
+{
+#define MMSG_NUM 64
+ struct iovec msg_iov[MMSG_NUM];
+ struct mmsghdr mmsg[MMSG_NUM];
+ uint8_t bufs[MMSG_NUM][2*1024];
+ struct sockaddr_storage remote_addr[MMSG_NUM];
+ size_t total_nread, pkts;
+ int mcount, i, n;
+ char errstr[STRERROR_LEN];
+ CURLcode result = CURLE_OK;
+
+ DEBUGASSERT(max_pkts > 0);
+ pkts = 0;
+ total_nread = 0;
+ while(pkts < max_pkts) {
+ n = (int)CURLMIN(MMSG_NUM, max_pkts);
+ memset(&mmsg, 0, sizeof(mmsg));
+ for(i = 0; i < n; ++i) {
+ msg_iov[i].iov_base = bufs[i];
+ msg_iov[i].iov_len = (int)sizeof(bufs[i]);
+ mmsg[i].msg_hdr.msg_iov = &msg_iov[i];
+ mmsg[i].msg_hdr.msg_iovlen = 1;
+ mmsg[i].msg_hdr.msg_name = &remote_addr[i];
+ mmsg[i].msg_hdr.msg_namelen = sizeof(remote_addr[i]);
+ }
+
+ while((mcount = recvmmsg(qctx->sockfd, mmsg, n, 0, NULL)) == -1 &&
+ SOCKERRNO == EINTR)
+ ;
+ if(mcount == -1) {
+ if(SOCKERRNO == EAGAIN || SOCKERRNO == EWOULDBLOCK) {
+ CURL_TRC_CF(data, cf, "ingress, recvmmsg -> EAGAIN");
+ goto out;
+ }
+ if(!cf->connected && SOCKERRNO == ECONNREFUSED) {
+ const char *r_ip = NULL;
+ int r_port = 0;
+ Curl_cf_socket_peek(cf->next, data, NULL, NULL,
+ &r_ip, &r_port, NULL, NULL);
+ failf(data, "QUIC: connection to %s port %u refused",
+ r_ip, r_port);
+ result = CURLE_COULDNT_CONNECT;
+ goto out;
+ }
+ Curl_strerror(SOCKERRNO, errstr, sizeof(errstr));
+ failf(data, "QUIC: recvmsg() unexpectedly returned %d (errno=%d; %s)",
+ mcount, SOCKERRNO, errstr);
+ result = CURLE_RECV_ERROR;
+ goto out;
+ }
+
+ CURL_TRC_CF(data, cf, "recvmmsg() -> %d packets", mcount);
+ pkts += mcount;
+ for(i = 0; i < mcount; ++i) {
+ total_nread += mmsg[i].msg_len;
+ result = recv_cb(bufs[i], mmsg[i].msg_len,
+ mmsg[i].msg_hdr.msg_name, mmsg[i].msg_hdr.msg_namelen,
+ 0, userp);
+ if(result)
+ goto out;
+ }
+ }
+
+out:
+ if(total_nread || result)
+ CURL_TRC_CF(data, cf, "recvd %zu packets with %zu bytes -> %d",
+ pkts, total_nread, result);
+ return result;
+}
+
+#elif defined(HAVE_SENDMSG)
+static CURLcode recvmsg_packets(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct cf_quic_ctx *qctx,
+ size_t max_pkts,
+ vquic_recv_pkt_cb *recv_cb, void *userp)
+{
+ struct iovec msg_iov;
+ struct msghdr msg;
+ uint8_t buf[64*1024];
+ struct sockaddr_storage remote_addr;
+ size_t total_nread, pkts;
+ ssize_t nread;
+ char errstr[STRERROR_LEN];
+ CURLcode result = CURLE_OK;
+
+ msg_iov.iov_base = buf;
+ msg_iov.iov_len = (int)sizeof(buf);
+
+ memset(&msg, 0, sizeof(msg));
+ msg.msg_iov = &msg_iov;
+ msg.msg_iovlen = 1;
+
+ DEBUGASSERT(max_pkts > 0);
+ for(pkts = 0, total_nread = 0; pkts < max_pkts;) {
+ msg.msg_name = &remote_addr;
+ msg.msg_namelen = sizeof(remote_addr);
+ while((nread = recvmsg(qctx->sockfd, &msg, 0)) == -1 &&
+ SOCKERRNO == EINTR)
+ ;
+ if(nread == -1) {
+ if(SOCKERRNO == EAGAIN || SOCKERRNO == EWOULDBLOCK) {
+ goto out;
+ }
+ if(!cf->connected && SOCKERRNO == ECONNREFUSED) {
+ const char *r_ip = NULL;
+ int r_port = 0;
+ Curl_cf_socket_peek(cf->next, data, NULL, NULL,
+ &r_ip, &r_port, NULL, NULL);
+ failf(data, "QUIC: connection to %s port %u refused",
+ r_ip, r_port);
+ result = CURLE_COULDNT_CONNECT;
+ goto out;
+ }
+ Curl_strerror(SOCKERRNO, errstr, sizeof(errstr));
+ failf(data, "QUIC: recvmsg() unexpectedly returned %zd (errno=%d; %s)",
+ nread, SOCKERRNO, errstr);
+ result = CURLE_RECV_ERROR;
+ goto out;
+ }
+
+ ++pkts;
+ total_nread += (size_t)nread;
+ result = recv_cb(buf, (size_t)nread, msg.msg_name, msg.msg_namelen,
+ 0, userp);
+ if(result)
+ goto out;
+ }
+
+out:
+ if(total_nread || result)
+ CURL_TRC_CF(data, cf, "recvd %zu packets with %zu bytes -> %d",
+ pkts, total_nread, result);
+ return result;
+}
+
+#else /* HAVE_SENDMMSG || HAVE_SENDMSG */
+static CURLcode recvfrom_packets(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct cf_quic_ctx *qctx,
+ size_t max_pkts,
+ vquic_recv_pkt_cb *recv_cb, void *userp)
+{
+ uint8_t buf[64*1024];
+ int bufsize = (int)sizeof(buf);
+ struct sockaddr_storage remote_addr;
+ socklen_t remote_addrlen = sizeof(remote_addr);
+ size_t total_nread, pkts;
+ ssize_t nread;
+ char errstr[STRERROR_LEN];
+ CURLcode result = CURLE_OK;
+
+ DEBUGASSERT(max_pkts > 0);
+ for(pkts = 0, total_nread = 0; pkts < max_pkts;) {
+ while((nread = recvfrom(qctx->sockfd, (char *)buf, bufsize, 0,
+ (struct sockaddr *)&remote_addr,
+ &remote_addrlen)) == -1 &&
+ SOCKERRNO == EINTR)
+ ;
+ if(nread == -1) {
+ if(SOCKERRNO == EAGAIN || SOCKERRNO == EWOULDBLOCK) {
+ CURL_TRC_CF(data, cf, "ingress, recvfrom -> EAGAIN");
+ goto out;
+ }
+ if(!cf->connected && SOCKERRNO == ECONNREFUSED) {
+ const char *r_ip = NULL;
+ int r_port = 0;
+ Curl_cf_socket_peek(cf->next, data, NULL, NULL,
+ &r_ip, &r_port, NULL, NULL);
+ failf(data, "QUIC: connection to %s port %u refused",
+ r_ip, r_port);
+ result = CURLE_COULDNT_CONNECT;
+ goto out;
+ }
+ Curl_strerror(SOCKERRNO, errstr, sizeof(errstr));
+ failf(data, "QUIC: recvfrom() unexpectedly returned %zd (errno=%d; %s)",
+ nread, SOCKERRNO, errstr);
+ result = CURLE_RECV_ERROR;
+ goto out;
+ }
+
+ ++pkts;
+ total_nread += (size_t)nread;
+ result = recv_cb(buf, (size_t)nread, &remote_addr, remote_addrlen,
+ 0, userp);
+ if(result)
+ goto out;
+ }
+
+out:
+ if(total_nread || result)
+ CURL_TRC_CF(data, cf, "recvd %zu packets with %zu bytes -> %d",
+ pkts, total_nread, result);
+ return result;
+}
+#endif /* !HAVE_SENDMMSG && !HAVE_SENDMSG */
+
+CURLcode vquic_recv_packets(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct cf_quic_ctx *qctx,
+ size_t max_pkts,
+ vquic_recv_pkt_cb *recv_cb, void *userp)
+{
+ CURLcode result;
+#if defined(HAVE_SENDMMSG)
+ result = recvmmsg_packets(cf, data, qctx, max_pkts, recv_cb, userp);
+#elif defined(HAVE_SENDMSG)
+ result = recvmsg_packets(cf, data, qctx, max_pkts, recv_cb, userp);
+#else
+ result = recvfrom_packets(cf, data, qctx, max_pkts, recv_cb, userp);
+#endif
+ if(!result)
+ qctx->last_io = qctx->last_op;
+ return result;
+}
+
/*
* If the QLOGDIR environment variable is set, open and return a file
* descriptor to write the log to.
@@ -84,4 +592,80 @@ CURLcode Curl_qlogdir(struct Curl_easy *data,
return CURLE_OK;
}
+
+CURLcode Curl_cf_quic_create(struct Curl_cfilter **pcf,
+ struct Curl_easy *data,
+ struct connectdata *conn,
+ const struct Curl_addrinfo *ai,
+ int transport)
+{
+ (void)transport;
+ DEBUGASSERT(transport == TRNSPRT_QUIC);
+#if defined(USE_NGTCP2) && defined(USE_NGHTTP3)
+ return Curl_cf_ngtcp2_create(pcf, data, conn, ai);
+#elif defined(USE_QUICHE)
+ return Curl_cf_quiche_create(pcf, data, conn, ai);
+#elif defined(USE_MSH3)
+ return Curl_cf_msh3_create(pcf, data, conn, ai);
+#else
+ *pcf = NULL;
+ (void)data;
+ (void)conn;
+ (void)ai;
+ return CURLE_NOT_BUILT_IN;
+#endif
+}
+
+bool Curl_conn_is_http3(const struct Curl_easy *data,
+ const struct connectdata *conn,
+ int sockindex)
+{
+#if defined(USE_NGTCP2) && defined(USE_NGHTTP3)
+ return Curl_conn_is_ngtcp2(data, conn, sockindex);
+#elif defined(USE_QUICHE)
+ return Curl_conn_is_quiche(data, conn, sockindex);
+#elif defined(USE_MSH3)
+ return Curl_conn_is_msh3(data, conn, sockindex);
+#else
+ return ((conn->handler->protocol & PROTO_FAMILY_HTTP) &&
+ (conn->httpversion == 30));
#endif
+}
+
+CURLcode Curl_conn_may_http3(struct Curl_easy *data,
+ const struct connectdata *conn)
+{
+ if(conn->transport == TRNSPRT_UNIX) {
+ /* cannot do QUIC over a unix domain socket */
+ return CURLE_QUIC_CONNECT_ERROR;
+ }
+ if(!(conn->handler->flags & PROTOPT_SSL)) {
+ failf(data, "HTTP/3 requested for non-HTTPS URL");
+ return CURLE_URL_MALFORMAT;
+ }
+#ifndef CURL_DISABLE_PROXY
+ if(conn->bits.socksproxy) {
+ failf(data, "HTTP/3 is not supported over a SOCKS proxy");
+ return CURLE_URL_MALFORMAT;
+ }
+ if(conn->bits.httpproxy && conn->bits.tunnel_proxy) {
+ failf(data, "HTTP/3 is not supported over a HTTP proxy");
+ return CURLE_URL_MALFORMAT;
+ }
+#endif
+
+ return CURLE_OK;
+}
+
+#else /* ENABLE_QUIC */
+
+CURLcode Curl_conn_may_http3(struct Curl_easy *data,
+ const struct connectdata *conn)
+{
+ (void)conn;
+ (void)data;
+ DEBUGF(infof(data, "QUIC is not supported in this build"));
+ return CURLE_NOT_BUILT_IN;
+}
+
+#endif /* !ENABLE_QUIC */
diff --git a/lib/vquic/vquic.h b/lib/vquic/vquic.h
index 8f599a8f4..dc73957aa 100644
--- a/lib/vquic/vquic.h
+++ b/lib/vquic/vquic.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -27,10 +27,38 @@
#include "curl_setup.h"
#ifdef ENABLE_QUIC
+struct Curl_cfilter;
+struct Curl_easy;
+struct connectdata;
+struct Curl_addrinfo;
+
+void Curl_quic_ver(char *p, size_t len);
+
CURLcode Curl_qlogdir(struct Curl_easy *data,
unsigned char *scid,
size_t scidlen,
int *qlogfdp);
-#endif
+
+
+CURLcode Curl_cf_quic_create(struct Curl_cfilter **pcf,
+ struct Curl_easy *data,
+ struct connectdata *conn,
+ const struct Curl_addrinfo *ai,
+ int transport);
+
+bool Curl_conn_is_http3(const struct Curl_easy *data,
+ const struct connectdata *conn,
+ int sockindex);
+
+extern struct Curl_cftype Curl_cft_http3;
+
+#else /* ENABLE_QUIC */
+
+#define Curl_conn_is_http3(a,b,c) FALSE
+
+#endif /* !ENABLE_QUIC */
+
+CURLcode Curl_conn_may_http3(struct Curl_easy *data,
+ const struct connectdata *conn);
#endif /* HEADER_CURL_VQUIC_QUIC_H */
diff --git a/lib/vquic/vquic_int.h b/lib/vquic/vquic_int.h
new file mode 100644
index 000000000..a820f39ae
--- /dev/null
+++ b/lib/vquic/vquic_int.h
@@ -0,0 +1,91 @@
+#ifndef HEADER_CURL_VQUIC_QUIC_INT_H
+#define HEADER_CURL_VQUIC_QUIC_INT_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+#include "bufq.h"
+
+#ifdef ENABLE_QUIC
+
+#define MAX_PKT_BURST 10
+#define MAX_UDP_PAYLOAD_SIZE 1452
+/* Default QUIC connection timeout we announce from our side */
+#define CURL_QUIC_MAX_IDLE_MS (120 * 1000)
+
+struct cf_quic_ctx {
+ curl_socket_t sockfd; /* connected UDP socket */
+ struct sockaddr_storage local_addr; /* address socket is bound to */
+ socklen_t local_addrlen; /* length of local address */
+
+ struct bufq sendbuf; /* buffer for sending one or more packets */
+ struct curltime last_op; /* last (attempted) send/recv operation */
+ struct curltime last_io; /* last successful socket IO */
+ size_t gsolen; /* length of individual packets in send buf */
+ size_t split_len; /* if != 0, buffer length after which GSO differs */
+ size_t split_gsolen; /* length of individual packets after split_len */
+#ifdef DEBUGBUILD
+ int wblock_percent; /* percent of writes doing EAGAIN */
+#endif
+ bool no_gso; /* do not use gso on sending */
+};
+
+CURLcode vquic_ctx_init(struct cf_quic_ctx *qctx);
+void vquic_ctx_free(struct cf_quic_ctx *qctx);
+
+void vquic_ctx_update_time(struct cf_quic_ctx *qctx);
+
+void vquic_push_blocked_pkt(struct Curl_cfilter *cf,
+ struct cf_quic_ctx *qctx,
+ const uint8_t *pkt, size_t pktlen, size_t gsolen);
+
+CURLcode vquic_send_blocked_pkts(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct cf_quic_ctx *qctx);
+
+CURLcode vquic_send(struct Curl_cfilter *cf, struct Curl_easy *data,
+ struct cf_quic_ctx *qctx, size_t gsolen);
+
+CURLcode vquic_send_tail_split(struct Curl_cfilter *cf, struct Curl_easy *data,
+ struct cf_quic_ctx *qctx, size_t gsolen,
+ size_t tail_len, size_t tail_gsolen);
+
+CURLcode vquic_flush(struct Curl_cfilter *cf, struct Curl_easy *data,
+ struct cf_quic_ctx *qctx);
+
+
+typedef CURLcode vquic_recv_pkt_cb(const unsigned char *pkt, size_t pktlen,
+ struct sockaddr_storage *remote_addr,
+ socklen_t remote_addrlen, int ecn,
+ void *userp);
+
+CURLcode vquic_recv_packets(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct cf_quic_ctx *qctx,
+ size_t max_pkts,
+ vquic_recv_pkt_cb *recv_cb, void *userp);
+
+#endif /* !ENABLE_QUIC */
+
+#endif /* HEADER_CURL_VQUIC_QUIC_INT_H */
diff --git a/lib/vssh/libssh.c b/lib/vssh/libssh.c
index 0105e4079..97143c477 100644
--- a/lib/vssh/libssh.c
+++ b/lib/vssh/libssh.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2017 - 2022 Red Hat, Inc.
+ * Copyright (C) Red Hat, Inc.
*
* Authors: Nikos Mavrogiannopoulos, Tomas Mraz, Stanislav Zidek,
* Robert Kolcun, Andreas Schneider
@@ -40,9 +40,6 @@
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
-#ifdef HAVE_UTSNAME_H
-#include <sys/utsname.h>
-#endif
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
@@ -51,11 +48,6 @@
#include <inet.h>
#endif
-#if (defined(NETWARE) && defined(__NOVELL_LIBC__))
-#undef in_addr_t
-#define in_addr_t unsigned long
-#endif
-
#include <curl/curl.h>
#include "urldata.h"
#include "sendf.h"
@@ -71,6 +63,7 @@
#include "strdup.h"
#include "strcase.h"
#include "vtls/vtls.h"
+#include "cfilters.h"
#include "connect.h"
#include "inet_ntop.h"
#include "parsedate.h" /* for the week day and month names */
@@ -100,6 +93,7 @@
#if defined(__GNUC__) && \
(LIBSSH_VERSION_MINOR >= 10) || \
(LIBSSH_VERSION_MAJOR > 0)
+#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif
@@ -580,7 +574,7 @@ cleanup:
rc = SSH_ERROR; \
} while(0)
-#define MOVE_TO_LAST_AUTH do { \
+#define MOVE_TO_PASSWD_AUTH do { \
if(sshc->auth_methods & SSH_AUTH_METHOD_PASSWORD) { \
rc = SSH_OK; \
state(data, SSH_AUTH_PASS_INIT); \
@@ -590,23 +584,23 @@ cleanup:
} \
} while(0)
-#define MOVE_TO_TERTIARY_AUTH do { \
+#define MOVE_TO_KEY_AUTH do { \
if(sshc->auth_methods & SSH_AUTH_METHOD_INTERACTIVE) { \
rc = SSH_OK; \
state(data, SSH_AUTH_KEY_INIT); \
} \
else { \
- MOVE_TO_LAST_AUTH; \
+ MOVE_TO_PASSWD_AUTH; \
} \
} while(0)
-#define MOVE_TO_SECONDARY_AUTH do { \
+#define MOVE_TO_GSSAPI_AUTH do { \
if(sshc->auth_methods & SSH_AUTH_METHOD_GSSAPI_MIC) { \
rc = SSH_OK; \
state(data, SSH_AUTH_GSSAPI); \
} \
else { \
- MOVE_TO_TERTIARY_AUTH; \
+ MOVE_TO_KEY_AUTH; \
} \
} while(0)
@@ -689,7 +683,6 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
struct ssh_conn *sshc = &conn->proto.sshc;
curl_socket_t sock = conn->sock[FIRSTSOCKET];
int rc = SSH_NO_ERROR, err;
- char *new_readdir_line;
int seekerr = CURL_SEEKFUNC_OK;
const char *err_msg;
*block = 0; /* we're not blocking by default */
@@ -758,6 +751,16 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
}
sshc->auth_methods = ssh_userauth_list(sshc->ssh_session, NULL);
+ if(sshc->auth_methods)
+ infof(data, "SSH authentication methods available: %s%s%s%s",
+ sshc->auth_methods & SSH_AUTH_METHOD_PUBLICKEY ?
+ "public key, ": "",
+ sshc->auth_methods & SSH_AUTH_METHOD_GSSAPI_MIC ?
+ "GSSAPI, " : "",
+ sshc->auth_methods & SSH_AUTH_METHOD_INTERACTIVE ?
+ "keyboard-interactive, " : "",
+ sshc->auth_methods & SSH_AUTH_METHOD_PASSWORD ?
+ "password": "");
if(sshc->auth_methods & SSH_AUTH_METHOD_PUBLICKEY) {
state(data, SSH_AUTH_PKEY_INIT);
infof(data, "Authentication using SSH public key file");
@@ -780,7 +783,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
}
case SSH_AUTH_PKEY_INIT:
if(!(data->set.ssh_auth_types & CURLSSH_AUTH_PUBLICKEY)) {
- MOVE_TO_SECONDARY_AUTH;
+ MOVE_TO_GSSAPI_AUTH;
break;
}
@@ -796,7 +799,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
}
if(rc != SSH_OK) {
- MOVE_TO_SECONDARY_AUTH;
+ MOVE_TO_GSSAPI_AUTH;
break;
}
}
@@ -831,7 +834,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
break;
}
- MOVE_TO_SECONDARY_AUTH;
+ MOVE_TO_GSSAPI_AUTH;
}
break;
case SSH_AUTH_PKEY:
@@ -849,13 +852,13 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
}
else {
infof(data, "Failed public key authentication (rc: %d)", rc);
- MOVE_TO_SECONDARY_AUTH;
+ MOVE_TO_GSSAPI_AUTH;
}
break;
case SSH_AUTH_GSSAPI:
if(!(data->set.ssh_auth_types & CURLSSH_AUTH_GSSAPI)) {
- MOVE_TO_TERTIARY_AUTH;
+ MOVE_TO_KEY_AUTH;
break;
}
@@ -873,7 +876,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
break;
}
- MOVE_TO_TERTIARY_AUTH;
+ MOVE_TO_KEY_AUTH;
break;
case SSH_AUTH_KEY_INIT:
@@ -881,13 +884,12 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
state(data, SSH_AUTH_KEY);
}
else {
- MOVE_TO_LAST_AUTH;
+ MOVE_TO_PASSWD_AUTH;
}
break;
case SSH_AUTH_KEY:
-
- /* Authentication failed. Continue with keyboard-interactive now. */
+ /* keyboard-interactive authentication */
rc = myssh_auth_interactive(conn);
if(rc == SSH_AGAIN) {
break;
@@ -895,13 +897,15 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
if(rc == SSH_OK) {
sshc->authed = TRUE;
infof(data, "completed keyboard interactive authentication");
+ state(data, SSH_AUTH_DONE);
+ }
+ else {
+ MOVE_TO_PASSWD_AUTH;
}
- state(data, SSH_AUTH_DONE);
break;
case SSH_AUTH_PASS_INIT:
if(!(data->set.ssh_auth_types & CURLSSH_AUTH_PASSWORD)) {
- /* Host key authentication is intentionally not implemented */
MOVE_TO_ERROR_STATE(CURLE_LOGIN_DENIED);
break;
}
@@ -1156,13 +1160,23 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
break;
}
else if(statvfs) {
+ #ifdef _MSC_VER
+ #define LIBSSH_VFS_SIZE_MASK "I64u"
+ #else
+ #define LIBSSH_VFS_SIZE_MASK PRIu64
+ #endif
char *tmp = aprintf("statvfs:\n"
- "f_bsize: %llu\n" "f_frsize: %llu\n"
- "f_blocks: %llu\n" "f_bfree: %llu\n"
- "f_bavail: %llu\n" "f_files: %llu\n"
- "f_ffree: %llu\n" "f_favail: %llu\n"
- "f_fsid: %llu\n" "f_flag: %llu\n"
- "f_namemax: %llu\n",
+ "f_bsize: %" LIBSSH_VFS_SIZE_MASK "\n"
+ "f_frsize: %" LIBSSH_VFS_SIZE_MASK "\n"
+ "f_blocks: %" LIBSSH_VFS_SIZE_MASK "\n"
+ "f_bfree: %" LIBSSH_VFS_SIZE_MASK "\n"
+ "f_bavail: %" LIBSSH_VFS_SIZE_MASK "\n"
+ "f_files: %" LIBSSH_VFS_SIZE_MASK "\n"
+ "f_ffree: %" LIBSSH_VFS_SIZE_MASK "\n"
+ "f_favail: %" LIBSSH_VFS_SIZE_MASK "\n"
+ "f_fsid: %" LIBSSH_VFS_SIZE_MASK "\n"
+ "f_flag: %" LIBSSH_VFS_SIZE_MASK "\n"
+ "f_namemax: %" LIBSSH_VFS_SIZE_MASK "\n",
statvfs->f_bsize, statvfs->f_frsize,
statvfs->f_blocks, statvfs->f_bfree,
statvfs->f_bavail, statvfs->f_files,
@@ -1214,7 +1228,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
}
case SSH_SFTP_TRANS_INIT:
- if(data->set.upload)
+ if(data->state.upload)
state(data, SSH_SFTP_UPLOAD_INIT);
else {
if(protop->path[strlen(protop->path)-1] == '/')
@@ -1415,7 +1429,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
case SSH_SFTP_READDIR_INIT:
Curl_pgrsSetDownloadSize(data, -1);
- if(data->set.opt_no_body) {
+ if(data->req.no_body) {
state(data, SSH_STOP);
break;
}
@@ -1436,7 +1450,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
break;
case SSH_SFTP_READDIR:
-
+ Curl_dyn_reset(&sshc->readdir_buf);
if(sshc->readdir_attrs)
sftp_attributes_free(sshc->readdir_attrs);
@@ -1463,26 +1477,15 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
state(data, SSH_STOP);
break;
}
- /* since this counts what we send to the client, we include the
- newline in this counter */
- data->req.bytecount += sshc->readdir_len + 1;
- /* output debug output if that is requested */
- Curl_debug(data, CURLINFO_DATA_OUT, (char *)sshc->readdir_filename,
- sshc->readdir_len);
}
else {
- sshc->readdir_currLen = strlen(sshc->readdir_longentry);
- sshc->readdir_totalLen = 80 + sshc->readdir_currLen;
- sshc->readdir_line = calloc(sshc->readdir_totalLen, 1);
- if(!sshc->readdir_line) {
- state(data, SSH_SFTP_CLOSE);
+ if(Curl_dyn_add(&sshc->readdir_buf, sshc->readdir_longentry)) {
sshc->actualcode = CURLE_OUT_OF_MEMORY;
+ state(data, SSH_STOP);
break;
}
- memcpy(sshc->readdir_line, sshc->readdir_longentry,
- sshc->readdir_currLen);
if((sshc->readdir_attrs->flags & SSH_FILEXFER_ATTR_PERMISSIONS) &&
((sshc->readdir_attrs->permissions & SSH_S_IFMT) ==
SSH_S_IFLNK)) {
@@ -1545,24 +1548,11 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
Curl_safefree(sshc->readdir_linkPath);
- /* get room for the filename and extra output */
- sshc->readdir_totalLen += 4 + sshc->readdir_len;
- new_readdir_line = Curl_saferealloc(sshc->readdir_line,
- sshc->readdir_totalLen);
- if(!new_readdir_line) {
- sshc->readdir_line = NULL;
- state(data, SSH_SFTP_CLOSE);
+ if(Curl_dyn_addf(&sshc->readdir_buf, " -> %s",
+ sshc->readdir_filename)) {
sshc->actualcode = CURLE_OUT_OF_MEMORY;
break;
}
- sshc->readdir_line = new_readdir_line;
-
- sshc->readdir_currLen += msnprintf(sshc->readdir_line +
- sshc->readdir_currLen,
- sshc->readdir_totalLen -
- sshc->readdir_currLen,
- " -> %s",
- sshc->readdir_filename);
sftp_attributes_free(sshc->readdir_link_attrs);
sshc->readdir_link_attrs = NULL;
@@ -1572,21 +1562,13 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
state(data, SSH_SFTP_READDIR_BOTTOM);
/* FALLTHROUGH */
case SSH_SFTP_READDIR_BOTTOM:
- sshc->readdir_currLen += msnprintf(sshc->readdir_line +
- sshc->readdir_currLen,
- sshc->readdir_totalLen -
- sshc->readdir_currLen, "\n");
- result = Curl_client_write(data, CLIENTWRITE_BODY,
- sshc->readdir_line,
- sshc->readdir_currLen);
-
- if(!result) {
- /* output debug output if that is requested */
- Curl_debug(data, CURLINFO_DATA_OUT, sshc->readdir_line,
- sshc->readdir_currLen);
- data->req.bytecount += sshc->readdir_currLen;
- }
- Curl_safefree(sshc->readdir_line);
+ if(Curl_dyn_addn(&sshc->readdir_buf, "\n", 1))
+ result = CURLE_OUT_OF_MEMORY;
+ else
+ result = Curl_client_write(data, CLIENTWRITE_BODY,
+ Curl_dyn_ptr(&sshc->readdir_buf),
+ Curl_dyn_len(&sshc->readdir_buf));
+
ssh_string_free_char(sshc->readdir_tmp);
sshc->readdir_tmp = NULL;
@@ -1622,7 +1604,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
MOVE_TO_SFTP_CLOSE_STATE();
break;
}
-
+ sftp_file_set_nonblocking(sshc->sftp_file);
state(data, SSH_SFTP_DOWNLOAD_STAT);
break;
@@ -1662,13 +1644,13 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
CURLofft to_t;
CURLofft from_t;
- from_t = curlx_strtoofft(data->state.range, &ptr, 0, &from);
+ from_t = curlx_strtoofft(data->state.range, &ptr, 10, &from);
if(from_t == CURL_OFFT_FLOW) {
return CURLE_RANGE_ERROR;
}
while(*ptr && (ISBLANK(*ptr) || (*ptr == '-')))
ptr++;
- to_t = curlx_strtoofft(ptr, &ptr2, 0, &to);
+ to_t = curlx_strtoofft(ptr, &ptr2, 10, &to);
if(to_t == CURL_OFFT_FLOW) {
return CURLE_RANGE_ERROR;
}
@@ -1827,7 +1809,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
/* Functions from the SCP subsystem cannot handle/return SSH_AGAIN */
ssh_set_blocking(sshc->ssh_session, 1);
- if(data->set.upload) {
+ if(data->state.upload) {
if(data->state.infilesize < 0) {
failf(data, "SCP requires a known file size for upload");
sshc->actualcode = CURLE_UPLOAD_FAILED;
@@ -1932,7 +1914,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
break;
}
case SSH_SCP_DONE:
- if(data->set.upload)
+ if(data->state.upload)
state(data, SSH_SCP_SEND_EOF);
else
state(data, SSH_SCP_CHANNEL_FREE);
@@ -1980,10 +1962,9 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
ssh_disconnect(sshc->ssh_session);
if(!ssh_version(SSH_VERSION_INT(0, 10, 0))) {
/* conn->sock[FIRSTSOCKET] is closed by ssh_disconnect behind our back,
- explicitly mark it as closed with the memdebug macro. This libssh
+ tell the connection to forget about it. This libssh
bug is fixed in 0.10.0. */
- fake_sclose(conn->sock[FIRSTSOCKET]);
- conn->sock[FIRSTSOCKET] = CURL_SOCKET_BAD;
+ Curl_conn_forget_socket(data, FIRSTSOCKET);
}
SSH_STRING_FREE_CHAR(sshc->homedir);
@@ -2025,7 +2006,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block)
Curl_safefree(sshc->rsa);
Curl_safefree(sshc->quote_path1);
Curl_safefree(sshc->quote_path2);
- Curl_safefree(sshc->readdir_line);
+ Curl_dyn_free(&sshc->readdir_buf);
Curl_safefree(sshc->readdir_linkPath);
SSH_STRING_FREE_CHAR(sshc->homedir);
@@ -2170,11 +2151,12 @@ static CURLcode myssh_setup_connection(struct Curl_easy *data,
struct connectdata *conn)
{
struct SSHPROTO *ssh;
- (void)conn;
+ struct ssh_conn *sshc = &conn->proto.sshc;
data->req.p.ssh = ssh = calloc(1, sizeof(struct SSHPROTO));
if(!ssh)
return CURLE_OUT_OF_MEMORY;
+ Curl_dyn_init(&sshc->readdir_buf, PATH_MAX * 2);
return CURLE_OK;
}
@@ -2199,7 +2181,7 @@ static CURLcode myssh_connect(struct Curl_easy *data, bool *done)
myssh_setup_connection(data, conn);
/* We default to persistent connections. We set this already in this connect
- function to make the re-use checks properly be able to check this bit. */
+ function to make the reuse checks properly be able to check this bit. */
connkeep(conn, "SSH default");
if(conn->handler->protocol & CURLPROTO_SCP) {
@@ -2323,7 +2305,6 @@ CURLcode scp_perform(struct Curl_easy *data,
bool *connected, bool *dophase_done)
{
CURLcode result = CURLE_OK;
- struct connectdata *conn = data->conn;
DEBUGF(infof(data, "DO phase starts"));
@@ -2334,7 +2315,7 @@ CURLcode scp_perform(struct Curl_easy *data,
result = myssh_multi_statemach(data, dophase_done);
- *connected = conn->bits.tcpconnect[FIRSTSOCKET];
+ *connected = Curl_conn_is_connected(data->conn, FIRSTSOCKET);
if(*dophase_done) {
DEBUGF(infof(data, "DO phase is complete"));
@@ -2504,7 +2485,6 @@ CURLcode sftp_perform(struct Curl_easy *data,
bool *dophase_done)
{
CURLcode result = CURLE_OK;
- struct connectdata *conn = data->conn;
DEBUGF(infof(data, "DO phase starts"));
@@ -2516,7 +2496,7 @@ CURLcode sftp_perform(struct Curl_easy *data,
/* run the state-machine */
result = myssh_multi_statemach(data, dophase_done);
- *connected = conn->bits.tcpconnect[FIRSTSOCKET];
+ *connected = Curl_conn_is_connected(data->conn, FIRSTSOCKET);
if(*dophase_done) {
DEBUGF(infof(data, "DO phase is complete"));
@@ -2585,6 +2565,12 @@ static ssize_t sftp_send(struct Curl_easy *data, int sockindex,
struct connectdata *conn = data->conn;
(void)sockindex;
+ /* limit the writes to the maximum specified in Section 3 of
+ * https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-02
+ */
+ if(len > 32768)
+ len = 32768;
+
nwrite = sftp_write(conn->proto.sshc.sftp_file, mem, len);
myssh_block2waitfor(conn, FALSE);
@@ -2672,7 +2658,7 @@ static void sftp_quote(struct Curl_easy *data)
/* if a command starts with an asterisk, which a legal SFTP command never
can, the command will be allowed to fail without it causing any
aborts or cancels etc. It will cause libcurl to act as if the command
- is successful, whatever the server reponds. */
+ is successful, whatever the server responds. */
if(cmd[0] == '*') {
cmd++;
@@ -2846,7 +2832,7 @@ static void sftp_quote_stat(struct Curl_easy *data)
/* if a command starts with an asterisk, which a legal SFTP command never
can, the command will be allowed to fail without it causing any
aborts or cancels etc. It will cause libcurl to act as if the command
- is successful, whatever the server reponds. */
+ is successful, whatever the server responds. */
if(cmd[0] == '*') {
cmd++;
@@ -2971,4 +2957,10 @@ void Curl_ssh_version(char *buffer, size_t buflen)
(void)msnprintf(buffer, buflen, "libssh/%s", ssh_version(0));
}
+#if defined(__GNUC__) && \
+ (LIBSSH_VERSION_MINOR >= 10) || \
+ (LIBSSH_VERSION_MAJOR > 0)
+#pragma GCC diagnostic pop
+#endif
+
#endif /* USE_LIBSSH */
diff --git a/lib/vssh/libssh2.c b/lib/vssh/libssh2.c
index 5a2c0f8bb..11f5f4fd5 100644
--- a/lib/vssh/libssh2.c
+++ b/lib/vssh/libssh2.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -43,9 +43,6 @@
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
-#ifdef HAVE_UTSNAME_H
-#include <sys/utsname.h>
-#endif
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
@@ -54,11 +51,6 @@
#include <inet.h>
#endif
-#if (defined(NETWARE) && defined(__NOVELL_LIBC__))
-#undef in_addr_t
-#define in_addr_t unsigned long
-#endif
-
#include <curl/curl.h>
#include "urldata.h"
#include "sendf.h"
@@ -74,6 +66,7 @@
#include "strdup.h"
#include "strcase.h"
#include "vtls/vtls.h"
+#include "cfilters.h"
#include "connect.h"
#include "inet_ntop.h"
#include "parsedate.h" /* for the week day and month names */
@@ -83,7 +76,6 @@
#include "select.h"
#include "warnless.h"
#include "curl_path.h"
-#include "strcase.h"
#include <curl_base64.h> /* for base64 encoding/decoding */
#include <curl_sha256.h>
@@ -108,7 +100,6 @@ static const char *sftp_libssh2_strerror(unsigned long err);
static LIBSSH2_ALLOC_FUNC(my_libssh2_malloc);
static LIBSSH2_REALLOC_FUNC(my_libssh2_realloc);
static LIBSSH2_FREE_FUNC(my_libssh2_free);
-
static CURLcode ssh_force_knownhost_key_type(struct Curl_easy *data);
static CURLcode ssh_connect(struct Curl_easy *data, bool *done);
static CURLcode ssh_multi_statemach(struct Curl_easy *data, bool *done);
@@ -149,7 +140,7 @@ const struct Curl_handler Curl_handler_scp = {
scp_disconnect, /* disconnect */
ZERO_NULL, /* readwrite */
ZERO_NULL, /* connection_check */
- ssh_attach,
+ ssh_attach, /* attach */
PORT_SSH, /* defport */
CURLPROTO_SCP, /* protocol */
CURLPROTO_SCP, /* family */
@@ -178,7 +169,7 @@ const struct Curl_handler Curl_handler_sftp = {
sftp_disconnect, /* disconnect */
ZERO_NULL, /* readwrite */
ZERO_NULL, /* connection_check */
- ssh_attach,
+ ssh_attach, /* attach */
PORT_SSH, /* defport */
CURLPROTO_SFTP, /* protocol */
CURLPROTO_SFTP, /* family */
@@ -610,9 +601,9 @@ static CURLcode ssh_knownhost(struct Curl_easy *data)
/* remove old host+key that doesn't match */
if(host)
libssh2_knownhost_del(sshc->kh, host);
- /*FALLTHROUGH*/
+ /* FALLTHROUGH */
case CURLKHSTAT_FINE:
- /*FALLTHROUGH*/
+ /* FALLTHROUGH */
case CURLKHSTAT_FINE_ADD_TO_FILE:
/* proceed */
if(keycheck != LIBSSH2_KNOWNHOST_CHECK_MATCH) {
@@ -728,11 +719,10 @@ static CURLcode ssh_check_fingerprint(struct Curl_easy *data)
*/
if((pub_pos != b64_pos) ||
strncmp(fingerprint_b64, pubkey_sha256, pub_pos)) {
- free(fingerprint_b64);
-
failf(data,
"Denied establishing ssh session: mismatch sha256 fingerprint. "
"Remote %s is not equal to %s", fingerprint_b64, pubkey_sha256);
+ free(fingerprint_b64);
state(data, SSH_SESSION_FREE);
sshc->actualcode = CURLE_PEER_FAILED_VERIFICATION;
return sshc->actualcode;
@@ -785,7 +775,7 @@ static CURLcode ssh_check_fingerprint(struct Curl_easy *data)
size_t keylen = 0;
int sshkeytype = 0;
int rc = 0;
- /* we handle the process to the callback*/
+ /* we handle the process to the callback */
const char *remotekey = libssh2_session_hostkey(sshc->ssh_session,
&keylen, &sshkeytype);
if(remotekey) {
@@ -796,10 +786,14 @@ static CURLcode ssh_check_fingerprint(struct Curl_easy *data)
Curl_set_in_callback(data, false);
if(rc!= CURLKHMATCH_OK) {
state(data, SSH_SESSION_FREE);
+ sshc->actualcode = CURLE_PEER_FAILED_VERIFICATION;
+ return sshc->actualcode;
}
}
else {
state(data, SSH_SESSION_FREE);
+ sshc->actualcode = CURLE_PEER_FAILED_VERIFICATION;
+ return sshc->actualcode;
}
return CURLE_OK;
}
@@ -841,6 +835,8 @@ static CURLcode ssh_force_knownhost_key_type(struct Curl_easy *data)
#endif
static const char * const hostkey_method_ssh_rsa
= "ssh-rsa";
+ static const char * const hostkey_method_ssh_rsa_all
+ = "rsa-sha2-256,rsa-sha2-512,ssh-rsa";
static const char * const hostkey_method_ssh_dss
= "ssh-dss";
@@ -890,6 +886,7 @@ static CURLcode ssh_force_knownhost_key_type(struct Curl_easy *data)
}
if(found) {
+ int rc;
infof(data, "Found host %s in %s",
conn->host.name, data->set.str[STRING_SSH_KNOWNHOSTS]);
@@ -915,7 +912,16 @@ static CURLcode ssh_force_knownhost_key_type(struct Curl_easy *data)
break;
#endif
case LIBSSH2_KNOWNHOST_KEY_SSHRSA:
- hostkey_method = hostkey_method_ssh_rsa;
+#ifdef HAVE_LIBSSH2_VERSION
+ if(libssh2_version(0x010900))
+ /* since 1.9.0 libssh2_session_method_pref() works as expected */
+ hostkey_method = hostkey_method_ssh_rsa_all;
+ else
+#endif
+ /* old libssh2 which cannot correctly remove unsupported methods due
+ * to bug in src/kex.c or does not support the new methods anyways.
+ */
+ hostkey_method = hostkey_method_ssh_rsa;
break;
case LIBSSH2_KNOWNHOST_KEY_SSHDSS:
hostkey_method = hostkey_method_ssh_dss;
@@ -930,9 +936,15 @@ static CURLcode ssh_force_knownhost_key_type(struct Curl_easy *data)
}
infof(data, "Set \"%s\" as SSH hostkey type", hostkey_method);
- result = libssh2_session_error_to_CURLE(
- libssh2_session_method_pref(
- sshc->ssh_session, LIBSSH2_METHOD_HOSTKEY, hostkey_method));
+ rc = libssh2_session_method_pref(sshc->ssh_session,
+ LIBSSH2_METHOD_HOSTKEY, hostkey_method);
+ if(rc) {
+ char *errmsg = NULL;
+ int errlen;
+ libssh2_session_last_error(sshc->ssh_session, &errmsg, &errlen, 0);
+ failf(data, "libssh2: %s", errmsg);
+ result = libssh2_session_error_to_CURLE(rc);
+ }
}
else {
infof(data, "Did not find host %s in %s",
@@ -1166,8 +1178,16 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block)
}
else {
char *err_msg = NULL;
- (void)libssh2_session_last_error(sshc->ssh_session,
- &err_msg, NULL, 0);
+ char unknown[] = "Reason unknown (-1)";
+ if(rc == -1) {
+ /* No error message has been set and the last set error message, if
+ any, is from a previous error so ignore it. #11837 */
+ err_msg = unknown;
+ }
+ else {
+ (void)libssh2_session_last_error(sshc->ssh_session,
+ &err_msg, NULL, 0);
+ }
infof(data, "SSH public key authentication failed: %s", err_msg);
state(data, SSH_AUTH_PASS_INIT);
rc = 0; /* clear rc and continue */
@@ -1483,7 +1503,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block)
/* if a command starts with an asterisk, which a legal SFTP command never
can, the command will be allowed to fail without it causing any
aborts or cancels etc. It will cause libcurl to act as if the command
- is successful, whatever the server reponds. */
+ is successful, whatever the server responds. */
if(cmd[0] == '*') {
cmd++;
@@ -1517,139 +1537,137 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block)
state(data, SSH_SFTP_NEXT_QUOTE);
break;
}
- {
- /*
- * the arguments following the command must be separated from the
- * command with a space so we can check for it unconditionally
- */
- cp = strchr(cmd, ' ');
- if(!cp) {
- failf(data, "Syntax error command '%s', missing parameter",
- cmd);
+
+ /*
+ * the arguments following the command must be separated from the
+ * command with a space so we can check for it unconditionally
+ */
+ cp = strchr(cmd, ' ');
+ if(!cp) {
+ failf(data, "Syntax error command '%s', missing parameter",
+ cmd);
+ state(data, SSH_SFTP_CLOSE);
+ sshc->nextstate = SSH_NO_STATE;
+ sshc->actualcode = CURLE_QUOTE_ERROR;
+ break;
+ }
+
+ /*
+ * also, every command takes at least one argument so we get that
+ * first argument right now
+ */
+ result = Curl_get_pathname(&cp, &sshc->quote_path1, sshc->homedir);
+ if(result) {
+ if(result == CURLE_OUT_OF_MEMORY)
+ failf(data, "Out of memory");
+ else
+ failf(data, "Syntax error: Bad first parameter to '%s'", cmd);
+ state(data, SSH_SFTP_CLOSE);
+ sshc->nextstate = SSH_NO_STATE;
+ sshc->actualcode = result;
+ break;
+ }
+
+ /*
+ * SFTP is a binary protocol, so we don't send text commands
+ * to the server. Instead, we scan for commands used by
+ * OpenSSH's sftp program and call the appropriate libssh2
+ * functions.
+ */
+ if(strncasecompare(cmd, "chgrp ", 6) ||
+ strncasecompare(cmd, "chmod ", 6) ||
+ strncasecompare(cmd, "chown ", 6) ||
+ strncasecompare(cmd, "atime ", 6) ||
+ strncasecompare(cmd, "mtime ", 6)) {
+ /* attribute change */
+
+ /* sshc->quote_path1 contains the mode to set */
+ /* get the destination */
+ result = Curl_get_pathname(&cp, &sshc->quote_path2, sshc->homedir);
+ if(result) {
+ if(result == CURLE_OUT_OF_MEMORY)
+ failf(data, "Out of memory");
+ else
+ failf(data, "Syntax error in %s: Bad second parameter", cmd);
+ Curl_safefree(sshc->quote_path1);
state(data, SSH_SFTP_CLOSE);
sshc->nextstate = SSH_NO_STATE;
- sshc->actualcode = CURLE_QUOTE_ERROR;
+ sshc->actualcode = result;
break;
}
-
- /*
- * also, every command takes at least one argument so we get that
- * first argument right now
- */
- result = Curl_get_pathname(&cp, &sshc->quote_path1, sshc->homedir);
+ memset(&sshp->quote_attrs, 0, sizeof(LIBSSH2_SFTP_ATTRIBUTES));
+ state(data, SSH_SFTP_QUOTE_STAT);
+ break;
+ }
+ if(strncasecompare(cmd, "ln ", 3) ||
+ strncasecompare(cmd, "symlink ", 8)) {
+ /* symbolic linking */
+ /* sshc->quote_path1 is the source */
+ /* get the destination */
+ result = Curl_get_pathname(&cp, &sshc->quote_path2, sshc->homedir);
if(result) {
if(result == CURLE_OUT_OF_MEMORY)
failf(data, "Out of memory");
else
- failf(data, "Syntax error: Bad first parameter to '%s'", cmd);
+ failf(data,
+ "Syntax error in ln/symlink: Bad second parameter");
+ Curl_safefree(sshc->quote_path1);
state(data, SSH_SFTP_CLOSE);
sshc->nextstate = SSH_NO_STATE;
sshc->actualcode = result;
break;
}
-
- /*
- * SFTP is a binary protocol, so we don't send text commands
- * to the server. Instead, we scan for commands used by
- * OpenSSH's sftp program and call the appropriate libssh2
- * functions.
- */
- if(strncasecompare(cmd, "chgrp ", 6) ||
- strncasecompare(cmd, "chmod ", 6) ||
- strncasecompare(cmd, "chown ", 6) ||
- strncasecompare(cmd, "atime ", 6) ||
- strncasecompare(cmd, "mtime ", 6)) {
- /* attribute change */
-
- /* sshc->quote_path1 contains the mode to set */
- /* get the destination */
- result = Curl_get_pathname(&cp, &sshc->quote_path2, sshc->homedir);
- if(result) {
- if(result == CURLE_OUT_OF_MEMORY)
- failf(data, "Out of memory");
- else
- failf(data, "Syntax error in %s: Bad second parameter", cmd);
- Curl_safefree(sshc->quote_path1);
- state(data, SSH_SFTP_CLOSE);
- sshc->nextstate = SSH_NO_STATE;
- sshc->actualcode = result;
- break;
- }
- memset(&sshp->quote_attrs, 0, sizeof(LIBSSH2_SFTP_ATTRIBUTES));
- state(data, SSH_SFTP_QUOTE_STAT);
- break;
- }
- if(strncasecompare(cmd, "ln ", 3) ||
- strncasecompare(cmd, "symlink ", 8)) {
- /* symbolic linking */
- /* sshc->quote_path1 is the source */
- /* get the destination */
- result = Curl_get_pathname(&cp, &sshc->quote_path2, sshc->homedir);
- if(result) {
- if(result == CURLE_OUT_OF_MEMORY)
- failf(data, "Out of memory");
- else
- failf(data,
- "Syntax error in ln/symlink: Bad second parameter");
- Curl_safefree(sshc->quote_path1);
- state(data, SSH_SFTP_CLOSE);
- sshc->nextstate = SSH_NO_STATE;
- sshc->actualcode = result;
- break;
- }
- state(data, SSH_SFTP_QUOTE_SYMLINK);
- break;
- }
- else if(strncasecompare(cmd, "mkdir ", 6)) {
- /* create dir */
- state(data, SSH_SFTP_QUOTE_MKDIR);
- break;
- }
- else if(strncasecompare(cmd, "rename ", 7)) {
- /* rename file */
- /* first param is the source path */
- /* second param is the dest. path */
- result = Curl_get_pathname(&cp, &sshc->quote_path2, sshc->homedir);
- if(result) {
- if(result == CURLE_OUT_OF_MEMORY)
- failf(data, "Out of memory");
- else
- failf(data, "Syntax error in rename: Bad second parameter");
- Curl_safefree(sshc->quote_path1);
- state(data, SSH_SFTP_CLOSE);
- sshc->nextstate = SSH_NO_STATE;
- sshc->actualcode = result;
- break;
- }
- state(data, SSH_SFTP_QUOTE_RENAME);
- break;
- }
- else if(strncasecompare(cmd, "rmdir ", 6)) {
- /* delete dir */
- state(data, SSH_SFTP_QUOTE_RMDIR);
- break;
- }
- else if(strncasecompare(cmd, "rm ", 3)) {
- state(data, SSH_SFTP_QUOTE_UNLINK);
+ state(data, SSH_SFTP_QUOTE_SYMLINK);
+ break;
+ }
+ else if(strncasecompare(cmd, "mkdir ", 6)) {
+ /* create dir */
+ state(data, SSH_SFTP_QUOTE_MKDIR);
+ break;
+ }
+ else if(strncasecompare(cmd, "rename ", 7)) {
+ /* rename file */
+ /* first param is the source path */
+ /* second param is the dest. path */
+ result = Curl_get_pathname(&cp, &sshc->quote_path2, sshc->homedir);
+ if(result) {
+ if(result == CURLE_OUT_OF_MEMORY)
+ failf(data, "Out of memory");
+ else
+ failf(data, "Syntax error in rename: Bad second parameter");
+ Curl_safefree(sshc->quote_path1);
+ state(data, SSH_SFTP_CLOSE);
+ sshc->nextstate = SSH_NO_STATE;
+ sshc->actualcode = result;
break;
}
+ state(data, SSH_SFTP_QUOTE_RENAME);
+ break;
+ }
+ else if(strncasecompare(cmd, "rmdir ", 6)) {
+ /* delete dir */
+ state(data, SSH_SFTP_QUOTE_RMDIR);
+ break;
+ }
+ else if(strncasecompare(cmd, "rm ", 3)) {
+ state(data, SSH_SFTP_QUOTE_UNLINK);
+ break;
+ }
#ifdef HAS_STATVFS_SUPPORT
- else if(strncasecompare(cmd, "statvfs ", 8)) {
- state(data, SSH_SFTP_QUOTE_STATVFS);
- break;
- }
-#endif
-
- failf(data, "Unknown SFTP command");
- Curl_safefree(sshc->quote_path1);
- Curl_safefree(sshc->quote_path2);
- state(data, SSH_SFTP_CLOSE);
- sshc->nextstate = SSH_NO_STATE;
- sshc->actualcode = CURLE_QUOTE_ERROR;
+ else if(strncasecompare(cmd, "statvfs ", 8)) {
+ state(data, SSH_SFTP_QUOTE_STATVFS);
break;
}
+#endif
+
+ failf(data, "Unknown SFTP command");
+ Curl_safefree(sshc->quote_path1);
+ Curl_safefree(sshc->quote_path2);
+ state(data, SSH_SFTP_CLOSE);
+ sshc->nextstate = SSH_NO_STATE;
+ sshc->actualcode = CURLE_QUOTE_ERROR;
+ break;
}
- break;
case SSH_SFTP_NEXT_QUOTE:
Curl_safefree(sshc->quote_path1);
@@ -1679,7 +1697,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block)
/* if a command starts with an asterisk, which a legal SFTP command never
can, the command will be allowed to fail without it causing any
aborts or cancels etc. It will cause libcurl to act as if the command
- is successful, whatever the server reponds. */
+ is successful, whatever the server responds. */
if(cmd[0] == '*') {
cmd++;
@@ -1942,13 +1960,23 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block)
break;
}
else if(rc == 0) {
+ #ifdef _MSC_VER
+ #define LIBSSH2_VFS_SIZE_MASK "I64u"
+ #else
+ #define LIBSSH2_VFS_SIZE_MASK "llu"
+ #endif
char *tmp = aprintf("statvfs:\n"
- "f_bsize: %llu\n" "f_frsize: %llu\n"
- "f_blocks: %llu\n" "f_bfree: %llu\n"
- "f_bavail: %llu\n" "f_files: %llu\n"
- "f_ffree: %llu\n" "f_favail: %llu\n"
- "f_fsid: %llu\n" "f_flag: %llu\n"
- "f_namemax: %llu\n",
+ "f_bsize: %" LIBSSH2_VFS_SIZE_MASK "\n"
+ "f_frsize: %" LIBSSH2_VFS_SIZE_MASK "\n"
+ "f_blocks: %" LIBSSH2_VFS_SIZE_MASK "\n"
+ "f_bfree: %" LIBSSH2_VFS_SIZE_MASK "\n"
+ "f_bavail: %" LIBSSH2_VFS_SIZE_MASK "\n"
+ "f_files: %" LIBSSH2_VFS_SIZE_MASK "\n"
+ "f_ffree: %" LIBSSH2_VFS_SIZE_MASK "\n"
+ "f_favail: %" LIBSSH2_VFS_SIZE_MASK "\n"
+ "f_fsid: %" LIBSSH2_VFS_SIZE_MASK "\n"
+ "f_flag: %" LIBSSH2_VFS_SIZE_MASK "\n"
+ "f_namemax: %" LIBSSH2_VFS_SIZE_MASK "\n",
statvfs.f_bsize, statvfs.f_frsize,
statvfs.f_blocks, statvfs.f_bfree,
statvfs.f_bavail, statvfs.f_files,
@@ -2004,7 +2032,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block)
}
case SSH_SFTP_TRANS_INIT:
- if(data->set.upload)
+ if(data->state.upload)
state(data, SSH_SFTP_UPLOAD_INIT);
else {
if(sshp->path[strlen(sshp->path)-1] == '/')
@@ -2251,7 +2279,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block)
case SSH_SFTP_READDIR_INIT:
Curl_pgrsSetDownloadSize(data, -1);
- if(data->set.opt_no_body) {
+ if(data->req.no_body) {
state(data, SSH_STOP);
break;
}
@@ -2321,14 +2349,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block)
state(data, SSH_STOP);
break;
}
- /* since this counts what we send to the client, we include the
- newline in this counter */
- data->req.bytecount += readdir_len + 1;
- /* output debug output if that is requested */
- Curl_debug(data, CURLINFO_DATA_IN, sshp->readdir_filename,
- readdir_len);
- Curl_debug(data, CURLINFO_DATA_IN, (char *)"\n", 1);
}
else {
result = Curl_dyn_add(&sshp->readdir, sshp->readdir_longentry);
@@ -2390,7 +2411,6 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block)
result = Curl_dyn_addf(&sshp->readdir, " -> %s", sshp->readdir_filename);
if(result) {
- sshc->readdir_line = NULL;
Curl_safefree(sshp->readdir_filename);
Curl_safefree(sshp->readdir_longentry);
state(data, SSH_SFTP_CLOSE);
@@ -2408,13 +2428,6 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block)
Curl_dyn_ptr(&sshp->readdir),
Curl_dyn_len(&sshp->readdir));
- if(!result) {
- /* output debug output if that is requested */
- Curl_debug(data, CURLINFO_DATA_IN,
- Curl_dyn_ptr(&sshp->readdir),
- Curl_dyn_len(&sshp->readdir));
- data->req.bytecount += Curl_dyn_len(&sshp->readdir);
- }
if(result) {
Curl_dyn_free(&sshp->readdir);
state(data, SSH_STOP);
@@ -2503,12 +2516,12 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block)
CURLofft to_t;
CURLofft from_t;
- from_t = curlx_strtoofft(data->state.range, &ptr, 0, &from);
+ from_t = curlx_strtoofft(data->state.range, &ptr, 10, &from);
if(from_t == CURL_OFFT_FLOW)
return CURLE_RANGE_ERROR;
while(*ptr && (ISBLANK(*ptr) || (*ptr == '-')))
ptr++;
- to_t = curlx_strtoofft(ptr, &ptr2, 0, &to);
+ to_t = curlx_strtoofft(ptr, &ptr2, 10, &to);
if(to_t == CURL_OFFT_FLOW)
return CURLE_RANGE_ERROR;
if((to_t == CURL_OFFT_INVAL) /* no "to" value given */
@@ -2523,7 +2536,8 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block)
if(from > size) {
failf(data, "Offset (%"
CURL_FORMAT_CURL_OFF_T ") was beyond file size (%"
- CURL_FORMAT_CURL_OFF_T ")", from, attrs.filesize);
+ CURL_FORMAT_CURL_OFF_T ")", from,
+ (curl_off_t)attrs.filesize);
return CURLE_BAD_DOWNLOAD_RESUME;
}
if(from > to) {
@@ -2549,7 +2563,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block)
failf(data, "Offset (%"
CURL_FORMAT_CURL_OFF_T ") was beyond file size (%"
CURL_FORMAT_CURL_OFF_T ")",
- data->state.resume_from, attrs.filesize);
+ data->state.resume_from, (curl_off_t)attrs.filesize);
return CURLE_BAD_DOWNLOAD_RESUME;
}
/* download from where? */
@@ -2559,7 +2573,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block)
if((curl_off_t)attrs.filesize < data->state.resume_from) {
failf(data, "Offset (%" CURL_FORMAT_CURL_OFF_T
") was beyond file size (%" CURL_FORMAT_CURL_OFF_T ")",
- data->state.resume_from, attrs.filesize);
+ data->state.resume_from, (curl_off_t)attrs.filesize);
return CURLE_BAD_DOWNLOAD_RESUME;
}
}
@@ -2677,7 +2691,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block)
break;
}
- if(data->set.upload) {
+ if(data->state.upload) {
if(data->state.infilesize < 0) {
failf(data, "SCP requires a known file size for upload");
sshc->actualcode = CURLE_UPLOAD_FAILED;
@@ -2817,7 +2831,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block)
break;
case SSH_SCP_DONE:
- if(data->set.upload)
+ if(data->state.upload)
state(data, SSH_SCP_SEND_EOF);
else
state(data, SSH_SCP_CHANNEL_FREE);
@@ -2994,12 +3008,9 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block)
Curl_safefree(sshc->rsa_pub);
Curl_safefree(sshc->rsa);
-
Curl_safefree(sshc->quote_path1);
Curl_safefree(sshc->quote_path2);
-
Curl_safefree(sshc->homedir);
- Curl_safefree(sshc->readdir_line);
/* the code we are about to return */
result = sshc->actualcode;
@@ -3243,7 +3254,7 @@ static CURLcode ssh_connect(struct Curl_easy *data, bool *done)
}
/* We default to persistent connections. We set this already in this connect
- function to make the re-use checks properly be able to check this bit. */
+ function to make the reuse checks properly be able to check this bit. */
connkeep(conn, "SSH default");
sshc = &conn->proto.sshc;
@@ -3258,14 +3269,27 @@ static CURLcode ssh_connect(struct Curl_easy *data, bool *done)
sock = conn->sock[FIRSTSOCKET];
#endif /* CURL_LIBSSH2_DEBUG */
+ /* libcurl MUST to set custom memory functions so that the kbd_callback
+ funciton's memory allocations can be properled freed */
sshc->ssh_session = libssh2_session_init_ex(my_libssh2_malloc,
my_libssh2_free,
my_libssh2_realloc, data);
+
if(!sshc->ssh_session) {
failf(data, "Failure initialising ssh session");
return CURLE_FAILED_INIT;
}
+#ifdef HAVE_LIBSSH2_VERSION
+ /* Set the packet read timeout if the libssh2 version supports it */
+#if LIBSSH2_VERSION_NUM >= 0x010B00
+ if(data->set.server_response_timeout > 0) {
+ libssh2_session_set_read_timeout(sshc->ssh_session,
+ data->set.server_response_timeout / 1000);
+ }
+#endif
+#endif
+
#ifndef CURL_DISABLE_PROXY
if(conn->http_proxy.proxytype == CURLPROXY_HTTPS) {
/*
@@ -3375,7 +3399,6 @@ CURLcode scp_perform(struct Curl_easy *data,
bool *dophase_done)
{
CURLcode result = CURLE_OK;
- struct connectdata *conn = data->conn;
DEBUGF(infof(data, "DO phase starts"));
@@ -3387,7 +3410,7 @@ CURLcode scp_perform(struct Curl_easy *data,
/* run the state-machine */
result = ssh_multi_statemach(data, dophase_done);
- *connected = conn->bits.tcpconnect[FIRSTSOCKET];
+ *connected = Curl_conn_is_connected(data->conn, FIRSTSOCKET);
if(*dophase_done) {
DEBUGF(infof(data, "DO phase is complete"));
@@ -3576,7 +3599,7 @@ CURLcode sftp_perform(struct Curl_easy *data,
/* run the state-machine */
result = ssh_multi_statemach(data, dophase_done);
- *connected = data->conn->bits.tcpconnect[FIRSTSOCKET];
+ *connected = Curl_conn_is_connected(data->conn, FIRSTSOCKET);
if(*dophase_done) {
DEBUGF(infof(data, "DO phase is complete"));
diff --git a/lib/vssh/ssh.h b/lib/vssh/ssh.h
index 13bb8aa2d..ca0533aa5 100644
--- a/lib/vssh/ssh.h
+++ b/lib/vssh/ssh.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -147,7 +147,6 @@ struct ssh_conn {
char *homedir; /* when doing SFTP we figure out home dir in the
connect phase */
- char *readdir_line;
/* end of READDIR stuff */
int secondCreateDirs; /* counter use by the code to see if the
@@ -158,7 +157,8 @@ struct ssh_conn {
#if defined(USE_LIBSSH)
char *readdir_linkPath;
- size_t readdir_len, readdir_totalLen, readdir_currLen;
+ size_t readdir_len;
+ struct dynbuf readdir_buf;
/* our variables */
unsigned kbd_state; /* 0 or 1 */
ssh_key privkey;
@@ -267,6 +267,7 @@ void Curl_ssh_attach(struct Curl_easy *data,
/* for non-SSH builds */
#define Curl_ssh_cleanup()
#define Curl_ssh_attach(x,y)
+#define Curl_ssh_init() 0
#endif
#endif /* HEADER_CURL_SSH_H */
diff --git a/lib/vssh/wolfssh.c b/lib/vssh/wolfssh.c
index c2f85f3fe..4da7e9dea 100644
--- a/lib/vssh/wolfssh.c
+++ b/lib/vssh/wolfssh.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2019 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -31,6 +31,7 @@
#include <wolfssh/ssh.h>
#include <wolfssh/wolfsftp.h>
#include "urldata.h"
+#include "cfilters.h"
#include "connect.h"
#include "sendf.h"
#include "progress.h"
@@ -276,7 +277,7 @@ static ssize_t wsftp_send(struct Curl_easy *data, int sockindex,
return -1;
}
DEBUGASSERT(rc == (int)len);
- infof(data, "sent %zd bytes SFTP from offset %zd",
+ infof(data, "sent %zu bytes SFTP from offset %" CURL_FORMAT_CURL_OFF_T,
len, sshc->offset);
sshc->offset += len;
return (ssize_t)rc;
@@ -342,9 +343,6 @@ static CURLcode wssh_setup_connection(struct Curl_easy *data,
return CURLE_OK;
}
-static Curl_recv wscp_recv, wsftp_recv;
-static Curl_send wscp_send, wsftp_send;
-
static int userauth(byte authtype,
WS_UserAuthData* authdata,
void *ctx)
@@ -373,7 +371,7 @@ static CURLcode wssh_connect(struct Curl_easy *data, bool *done)
wssh_setup_connection(data, conn);
/* We default to persistent connections. We set this already in this connect
- function to make the re-use checks properly be able to check this bit. */
+ function to make the reuse checks properly be able to check this bit. */
connkeep(conn, "SSH default");
if(conn->handler->protocol & CURLPROTO_SCP) {
@@ -424,7 +422,7 @@ static CURLcode wssh_connect(struct Curl_easy *data, bool *done)
state(data, SSH_SFTP_INIT);
return wssh_multi_statemach(data, done);
- error:
+error:
wolfSSH_free(sshc->ssh_session);
wolfSSH_CTX_free(sshc->ctx);
return CURLE_FAILED_INIT;
@@ -556,7 +554,7 @@ static CURLcode wssh_statemach_act(struct Curl_easy *data, bool *block)
}
break;
case SSH_SFTP_TRANS_INIT:
- if(data->set.upload)
+ if(data->state.upload)
state(data, SSH_SFTP_UPLOAD_INIT);
else {
if(sftp_scp->path[strlen(sftp_scp->path)-1] == '/')
@@ -836,7 +834,7 @@ static CURLcode wssh_statemach_act(struct Curl_easy *data, bool *block)
case SSH_SFTP_READDIR_INIT:
Curl_pgrsSetDownloadSize(data, -1);
- if(data->set.opt_no_body) {
+ if(data->req.no_body) {
state(data, SSH_STOP);
break;
}
@@ -939,7 +937,6 @@ CURLcode wsftp_perform(struct Curl_easy *data,
bool *dophase_done)
{
CURLcode result = CURLE_OK;
- struct connectdata *conn = data->conn;
DEBUGF(infof(data, "DO phase starts"));
@@ -951,7 +948,7 @@ CURLcode wsftp_perform(struct Curl_easy *data,
/* run the state-machine */
result = wssh_multi_statemach(data, dophase_done);
- *connected = conn->bits.tcpconnect[FIRSTSOCKET];
+ *connected = Curl_conn_is_connected(data->conn, FIRSTSOCKET);
if(*dophase_done) {
DEBUGF(infof(data, "DO phase is complete"));
@@ -1168,6 +1165,7 @@ CURLcode Curl_ssh_init(void)
}
void Curl_ssh_cleanup(void)
{
+ (void)wolfSSH_Cleanup();
}
#endif /* USE_WOLFSSH */
diff --git a/lib/vtls/bearssl.c b/lib/vtls/bearssl.c
index 1221ce8c8..a6566f4d9 100644
--- a/lib/vtls/bearssl.c
+++ b/lib/vtls/bearssl.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2019 - 2022, Michael Forney, <mforney@mforney.org>
+ * Copyright (C) Michael Forney, <mforney@mforney.org>
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -32,13 +32,17 @@
#include "sendf.h"
#include "inet_pton.h"
#include "vtls.h"
+#include "vtls_int.h"
#include "connect.h"
#include "select.h"
#include "multiif.h"
#include "curl_printf.h"
-#include "curl_memory.h"
#include "strcase.h"
+/* The last #include files should be: */
+#include "curl_memory.h"
+#include "memdebug.h"
+
struct x509_context {
const br_x509_class *vtable;
br_x509_minimal_context minimal;
@@ -48,13 +52,13 @@ struct x509_context {
int cert_num;
};
-struct ssl_backend_data {
+struct bearssl_ssl_backend_data {
br_ssl_client_context ctx;
struct x509_context x509;
unsigned char buf[BR_SSL_BUFSIZE_BIDI];
br_x509_trust_anchor *anchors;
size_t anchors_len;
- const char *protocols[2];
+ const char *protocols[ALPN_ENTRIES_MAX];
/* SSL client context is active */
bool active;
/* size of pending write, yet to be flushed */
@@ -566,29 +570,29 @@ static CURLcode bearssl_set_selected_ciphers(struct Curl_easy *data,
return CURLE_OK;
}
-static CURLcode bearssl_connect_step1(struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
+static CURLcode bearssl_connect_step1(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
- const struct curl_blob *ca_info_blob = SSL_CONN_CONFIG(ca_info_blob);
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct bearssl_ssl_backend_data *backend =
+ (struct bearssl_ssl_backend_data *)connssl->backend;
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
+ struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data);
+ const struct curl_blob *ca_info_blob = conn_config->ca_info_blob;
const char * const ssl_cafile =
/* CURLOPT_CAINFO_BLOB overrides CURLOPT_CAINFO */
- (ca_info_blob ? NULL : SSL_CONN_CONFIG(CAfile));
- const char *hostname = SSL_HOST_NAME();
- const bool verifypeer = SSL_CONN_CONFIG(verifypeer);
- const bool verifyhost = SSL_CONN_CONFIG(verifyhost);
+ (ca_info_blob ? NULL : conn_config->CAfile);
+ const char *hostname = connssl->peer.hostname;
+ const bool verifypeer = conn_config->verifypeer;
+ const bool verifyhost = conn_config->verifyhost;
CURLcode ret;
unsigned version_min, version_max;
-#ifdef ENABLE_IPV6
- struct in6_addr addr;
-#else
- struct in_addr addr;
-#endif
+ int session_set = 0;
DEBUGASSERT(backend);
+ CURL_TRC_CF(data, cf, "connect_step1");
- switch(SSL_CONN_CONFIG(version)) {
+ switch(conn_config->version) {
case CURL_SSLVERSION_SSLv2:
failf(data, "BearSSL does not support SSLv2");
return CURLE_SSL_CONNECT_ERROR;
@@ -617,38 +621,34 @@ static CURLcode bearssl_connect_step1(struct Curl_easy *data,
return CURLE_SSL_CONNECT_ERROR;
}
- if(ca_info_blob) {
- struct cafile_source source;
- source.type = CAFILE_SOURCE_BLOB;
- source.data = ca_info_blob->data;
- source.len = ca_info_blob->len;
+ if(verifypeer) {
+ if(ca_info_blob) {
+ struct cafile_source source;
+ source.type = CAFILE_SOURCE_BLOB;
+ source.data = ca_info_blob->data;
+ source.len = ca_info_blob->len;
- ret = load_cafile(&source, &backend->anchors, &backend->anchors_len);
- if(ret != CURLE_OK) {
- if(verifypeer) {
+ CURL_TRC_CF(data, cf, "connect_step1, load ca_info_blob");
+ ret = load_cafile(&source, &backend->anchors, &backend->anchors_len);
+ if(ret != CURLE_OK) {
failf(data, "error importing CA certificate blob");
return ret;
}
- /* Only warn if no certificate verification is required. */
- infof(data, "error importing CA certificate blob, continuing anyway");
}
- }
- if(ssl_cafile) {
- struct cafile_source source;
- source.type = CAFILE_SOURCE_PATH;
- source.data = ssl_cafile;
- source.len = 0;
+ if(ssl_cafile) {
+ struct cafile_source source;
+ source.type = CAFILE_SOURCE_PATH;
+ source.data = ssl_cafile;
+ source.len = 0;
- ret = load_cafile(&source, &backend->anchors, &backend->anchors_len);
- if(ret != CURLE_OK) {
- if(verifypeer) {
+ CURL_TRC_CF(data, cf, "connect_step1, load cafile");
+ ret = load_cafile(&source, &backend->anchors, &backend->anchors_len);
+ if(ret != CURLE_OK) {
failf(data, "error setting certificate verify locations."
" CAfile: %s", ssl_cafile);
return ret;
}
- infof(data, "error setting certificate verify locations,"
- " continuing anyway:");
}
}
@@ -659,11 +659,12 @@ static CURLcode bearssl_connect_step1(struct Curl_easy *data,
br_ssl_engine_set_buffer(&backend->ctx.eng, backend->buf,
sizeof(backend->buf), 1);
- if(SSL_CONN_CONFIG(cipher_list)) {
+ if(conn_config->cipher_list) {
/* Override the ciphers as specified. For the default cipher list see the
BearSSL source code of br_ssl_client_init_full() */
+ CURL_TRC_CF(data, cf, "connect_step1, set ciphers");
ret = bearssl_set_selected_ciphers(data, &backend->ctx.eng,
- SSL_CONN_CONFIG(cipher_list));
+ conn_config->cipher_list);
if(ret)
return ret;
}
@@ -674,48 +675,33 @@ static CURLcode bearssl_connect_step1(struct Curl_easy *data,
backend->x509.verifyhost = verifyhost;
br_ssl_engine_set_x509(&backend->ctx.eng, &backend->x509.vtable);
- if(SSL_SET_OPTION(primary.sessionid)) {
+ if(ssl_config->primary.sessionid) {
void *session;
+ CURL_TRC_CF(data, cf, "connect_step1, check session cache");
Curl_ssl_sessionid_lock(data);
- if(!Curl_ssl_getsessionid(data, conn, SSL_IS_PROXY() ? TRUE : FALSE,
- &session, NULL, sockindex)) {
+ if(!Curl_ssl_getsessionid(cf, data, &session, NULL)) {
br_ssl_engine_set_session_parameters(&backend->ctx.eng, session);
- infof(data, "BearSSL: re-using session ID");
+ session_set = 1;
+ infof(data, "BearSSL: reusing session ID");
}
Curl_ssl_sessionid_unlock(data);
}
- if(conn->bits.tls_enable_alpn) {
- int cur = 0;
-
- /* NOTE: when adding more protocols here, increase the size of the
- * protocols array in `struct ssl_backend_data`.
- */
+ if(connssl->alpn) {
+ struct alpn_proto_buf proto;
+ size_t i;
-#ifdef USE_HTTP2
- if(data->state.httpwant >= CURL_HTTP_VERSION_2
-#ifndef CURL_DISABLE_PROXY
- && (!SSL_IS_PROXY() || !conn->bits.tunnel_proxy)
-#endif
- ) {
- backend->protocols[cur++] = ALPN_H2;
- infof(data, VTLS_INFOF_ALPN_OFFER_1STR, ALPN_H2);
+ for(i = 0; i < connssl->alpn->count; ++i) {
+ backend->protocols[i] = connssl->alpn->entries[i];
}
-#endif
-
- backend->protocols[cur++] = ALPN_HTTP_1_1;
- infof(data, VTLS_INFOF_ALPN_OFFER_1STR, ALPN_HTTP_1_1);
-
- br_ssl_engine_set_protocol_names(&backend->ctx.eng,
- backend->protocols, cur);
+ br_ssl_engine_set_protocol_names(&backend->ctx.eng, backend->protocols,
+ connssl->alpn->count);
+ Curl_alpn_to_proto_str(&proto, connssl->alpn);
+ infof(data, VTLS_INFOF_ALPN_OFFER_1STR, proto.data);
}
- if((1 == Curl_inet_pton(AF_INET, hostname, &addr))
-#ifdef ENABLE_IPV6
- || (1 == Curl_inet_pton(AF_INET6, hostname, &addr))
-#endif
- ) {
+ if(connssl->peer.is_ip_address) {
if(verifyhost) {
failf(data, "BearSSL: "
"host verification of IP address is not supported");
@@ -724,12 +710,12 @@ static CURLcode bearssl_connect_step1(struct Curl_easy *data,
hostname = NULL;
}
else {
- char *snihost = Curl_ssl_snihost(data, hostname, NULL);
- if(!snihost) {
+ if(!connssl->peer.sni) {
failf(data, "Failed to set SNI");
return CURLE_SSL_CONNECT_ERROR;
}
- hostname = snihost;
+ hostname = connssl->peer.sni;
+ CURL_TRC_CF(data, cf, "connect_step1, SNI set");
}
/* give application a chance to interfere with SSL set up. */
@@ -744,7 +730,7 @@ static CURLcode bearssl_connect_step1(struct Curl_easy *data,
}
}
- if(!br_ssl_client_reset(&backend->ctx, hostname, 1))
+ if(!br_ssl_client_reset(&backend->ctx, hostname, session_set))
return CURLE_FAILED_INIT;
backend->active = TRUE;
@@ -753,17 +739,40 @@ static CURLcode bearssl_connect_step1(struct Curl_easy *data,
return CURLE_OK;
}
-static CURLcode bearssl_run_until(struct Curl_easy *data,
- struct connectdata *conn, int sockindex,
+static void bearssl_adjust_pollset(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct easy_pollset *ps)
+{
+ if(!cf->connected) {
+ curl_socket_t sock = Curl_conn_cf_get_socket(cf->next, data);
+ if(sock != CURL_SOCKET_BAD) {
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct bearssl_ssl_backend_data *backend =
+ (struct bearssl_ssl_backend_data *)connssl->backend;
+ unsigned state = br_ssl_engine_current_state(&backend->ctx.eng);
+
+ if(state & BR_SSL_SENDREC) {
+ Curl_pollset_set_out_only(data, ps, sock);
+ }
+ else {
+ Curl_pollset_set_in_only(data, ps, sock);
+ }
+ }
+ }
+}
+
+static CURLcode bearssl_run_until(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
unsigned target)
{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
- curl_socket_t sockfd = conn->sock[sockindex];
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct bearssl_ssl_backend_data *backend =
+ (struct bearssl_ssl_backend_data *)connssl->backend;
unsigned state;
unsigned char *buf;
size_t len;
ssize_t ret;
+ CURLcode result;
int err;
DEBUGASSERT(backend);
@@ -802,94 +811,84 @@ static CURLcode bearssl_run_until(struct Curl_easy *data,
return CURLE_OK;
if(state & BR_SSL_SENDREC) {
buf = br_ssl_engine_sendrec_buf(&backend->ctx.eng, &len);
- ret = swrite(sockfd, buf, len);
- if(ret == -1) {
- if(SOCKERRNO == EAGAIN || SOCKERRNO == EWOULDBLOCK) {
- if(connssl->state != ssl_connection_complete)
- connssl->connecting_state = ssl_connect_2_writing;
- return CURLE_AGAIN;
- }
- return CURLE_WRITE_ERROR;
+ ret = Curl_conn_cf_send(cf->next, data, (char *)buf, len, &result);
+ CURL_TRC_CF(data, cf, "ssl_send(len=%zu) -> %zd, %d", len, ret, result);
+ if(ret <= 0) {
+ return result;
}
br_ssl_engine_sendrec_ack(&backend->ctx.eng, ret);
}
else if(state & BR_SSL_RECVREC) {
buf = br_ssl_engine_recvrec_buf(&backend->ctx.eng, &len);
- ret = sread(sockfd, buf, len);
+ ret = Curl_conn_cf_recv(cf->next, data, (char *)buf, len, &result);
+ CURL_TRC_CF(data, cf, "ssl_recv(len=%zu) -> %zd, %d", len, ret, result);
if(ret == 0) {
failf(data, "SSL: EOF without close notify");
return CURLE_READ_ERROR;
}
- if(ret == -1) {
- if(SOCKERRNO == EAGAIN || SOCKERRNO == EWOULDBLOCK) {
- if(connssl->state != ssl_connection_complete)
- connssl->connecting_state = ssl_connect_2_reading;
- return CURLE_AGAIN;
- }
- return CURLE_READ_ERROR;
+ if(ret <= 0) {
+ return result;
}
br_ssl_engine_recvrec_ack(&backend->ctx.eng, ret);
}
}
}
-static CURLcode bearssl_connect_step2(struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
+static CURLcode bearssl_connect_step2(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct bearssl_ssl_backend_data *backend =
+ (struct bearssl_ssl_backend_data *)connssl->backend;
CURLcode ret;
DEBUGASSERT(backend);
+ CURL_TRC_CF(data, cf, "connect_step2");
- ret = bearssl_run_until(data, conn, sockindex,
- BR_SSL_SENDAPP | BR_SSL_RECVAPP);
+ ret = bearssl_run_until(cf, data, BR_SSL_SENDAPP | BR_SSL_RECVAPP);
if(ret == CURLE_AGAIN)
return CURLE_OK;
if(ret == CURLE_OK) {
+ unsigned int tver;
if(br_ssl_engine_current_state(&backend->ctx.eng) == BR_SSL_CLOSED) {
failf(data, "SSL: connection closed during handshake");
return CURLE_SSL_CONNECT_ERROR;
}
connssl->connecting_state = ssl_connect_3;
+ /* Informational message */
+ tver = br_ssl_engine_get_version(&backend->ctx.eng);
+ if(tver == 0x0303)
+ infof(data, "SSL connection using TLSv1.2");
+ else if(tver == 0x0304)
+ infof(data, "SSL connection using TLSv1.3");
+ else
+ infof(data, "SSL connection using TLS 0x%x", tver);
}
return ret;
}
-static CURLcode bearssl_connect_step3(struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
+static CURLcode bearssl_connect_step3(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct bearssl_ssl_backend_data *backend =
+ (struct bearssl_ssl_backend_data *)connssl->backend;
+ struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data);
CURLcode ret;
DEBUGASSERT(ssl_connect_3 == connssl->connecting_state);
DEBUGASSERT(backend);
+ CURL_TRC_CF(data, cf, "connect_step3");
- if(conn->bits.tls_enable_alpn) {
- const char *protocol;
+ if(connssl->alpn) {
+ const char *proto;
- protocol = br_ssl_engine_get_selected_protocol(&backend->ctx.eng);
- if(protocol) {
- infof(data, VTLS_INFOF_ALPN_ACCEPTED_1STR, protocol);
-
-#ifdef USE_HTTP2
- if(!strcmp(protocol, ALPN_H2))
- conn->alpn = CURL_HTTP_VERSION_2;
- else
-#endif
- if(!strcmp(protocol, ALPN_HTTP_1_1))
- conn->alpn = CURL_HTTP_VERSION_1_1;
- else
- infof(data, "ALPN, unrecognized protocol %s", protocol);
- Curl_multiuse_state(data, conn->alpn == CURL_HTTP_VERSION_2 ?
- BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
- }
- else
- infof(data, VTLS_INFOF_NO_ALPN);
+ proto = br_ssl_engine_get_selected_protocol(&backend->ctx.eng);
+ Curl_alpn_set_negotiated(cf, data, (const unsigned char *)proto,
+ proto? strlen(proto) : 0);
}
- if(SSL_SET_OPTION(primary.sessionid)) {
+ if(ssl_config->primary.sessionid) {
bool incache;
bool added = FALSE;
void *oldsession;
@@ -900,14 +899,10 @@ static CURLcode bearssl_connect_step3(struct Curl_easy *data,
return CURLE_OUT_OF_MEMORY;
br_ssl_engine_get_session_parameters(&backend->ctx.eng, session);
Curl_ssl_sessionid_lock(data);
- incache = !(Curl_ssl_getsessionid(data, conn,
- SSL_IS_PROXY() ? TRUE : FALSE,
- &oldsession, NULL, sockindex));
+ incache = !(Curl_ssl_getsessionid(cf, data, &oldsession, NULL));
if(incache)
Curl_ssl_delsessionid(data, oldsession);
- ret = Curl_ssl_addsessionid(data, conn,
- SSL_IS_PROXY() ? TRUE : FALSE,
- session, 0, sockindex, &added);
+ ret = Curl_ssl_addsessionid(cf, data, session, 0, &added);
Curl_ssl_sessionid_unlock(data);
if(!added)
free(session);
@@ -921,20 +916,20 @@ static CURLcode bearssl_connect_step3(struct Curl_easy *data,
return CURLE_OK;
}
-static ssize_t bearssl_send(struct Curl_easy *data, int sockindex,
+static ssize_t bearssl_send(struct Curl_cfilter *cf, struct Curl_easy *data,
const void *buf, size_t len, CURLcode *err)
{
- struct connectdata *conn = data->conn;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct bearssl_ssl_backend_data *backend =
+ (struct bearssl_ssl_backend_data *)connssl->backend;
unsigned char *app;
size_t applen;
DEBUGASSERT(backend);
for(;;) {
- *err = bearssl_run_until(data, conn, sockindex, BR_SSL_SENDAPP);
- if (*err != CURLE_OK)
+ *err = bearssl_run_until(cf, data, BR_SSL_SENDAPP);
+ if(*err)
return -1;
app = br_ssl_engine_sendapp_buf(&backend->ctx.eng, &applen);
if(!app) {
@@ -956,18 +951,18 @@ static ssize_t bearssl_send(struct Curl_easy *data, int sockindex,
}
}
-static ssize_t bearssl_recv(struct Curl_easy *data, int sockindex,
+static ssize_t bearssl_recv(struct Curl_cfilter *cf, struct Curl_easy *data,
char *buf, size_t len, CURLcode *err)
{
- struct connectdata *conn = data->conn;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct bearssl_ssl_backend_data *backend =
+ (struct bearssl_ssl_backend_data *)connssl->backend;
unsigned char *app;
size_t applen;
DEBUGASSERT(backend);
- *err = bearssl_run_until(data, conn, sockindex, BR_SSL_RECVAPP);
+ *err = bearssl_run_until(cf, data, BR_SSL_RECVAPP);
if(*err != CURLE_OK)
return -1;
app = br_ssl_engine_recvapp_buf(&backend->ctx.eng, &applen);
@@ -981,26 +976,27 @@ static ssize_t bearssl_recv(struct Curl_easy *data, int sockindex,
return applen;
}
-static CURLcode bearssl_connect_common(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex,
+static CURLcode bearssl_connect_common(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
bool nonblocking,
bool *done)
{
CURLcode ret;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- curl_socket_t sockfd = conn->sock[sockindex];
+ struct ssl_connect_data *connssl = cf->ctx;
+ curl_socket_t sockfd = Curl_conn_cf_get_socket(cf, data);
timediff_t timeout_ms;
int what;
+ CURL_TRC_CF(data, cf, "connect_common(blocking=%d)", !nonblocking);
/* check if the connection has already been established */
if(ssl_connection_complete == connssl->state) {
+ CURL_TRC_CF(data, cf, "connect_common, connected");
*done = TRUE;
return CURLE_OK;
}
if(ssl_connect_1 == connssl->connecting_state) {
- ret = bearssl_connect_step1(data, conn, sockindex);
+ ret = bearssl_connect_step1(cf, data);
if(ret)
return ret;
}
@@ -1026,8 +1022,10 @@ static CURLcode bearssl_connect_common(struct Curl_easy *data,
curl_socket_t readfd = ssl_connect_2_reading ==
connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
+ CURL_TRC_CF(data, cf, "connect_common, check socket");
what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd,
nonblocking?0:timeout_ms);
+ CURL_TRC_CF(data, cf, "connect_common, check socket -> %d", what);
if(what < 0) {
/* fatal error */
failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);
@@ -1053,7 +1051,7 @@ static CURLcode bearssl_connect_common(struct Curl_easy *data,
* before step2 has completed while ensuring that a client using select()
* or epoll() will always have a valid fdset to wait on.
*/
- ret = bearssl_connect_step2(data, conn, sockindex);
+ ret = bearssl_connect_step2(cf, data);
if(ret || (nonblocking &&
(ssl_connect_2 == connssl->connecting_state ||
ssl_connect_2_reading == connssl->connecting_state ||
@@ -1062,15 +1060,13 @@ static CURLcode bearssl_connect_common(struct Curl_easy *data,
}
if(ssl_connect_3 == connssl->connecting_state) {
- ret = bearssl_connect_step3(data, conn, sockindex);
+ ret = bearssl_connect_step3(cf, data);
if(ret)
return ret;
}
if(ssl_connect_done == connssl->connecting_state) {
connssl->state = ssl_connection_complete;
- conn->recv[sockindex] = bearssl_recv;
- conn->send[sockindex] = bearssl_send;
*done = TRUE;
}
else
@@ -1087,12 +1083,15 @@ static size_t bearssl_version(char *buffer, size_t size)
return msnprintf(buffer, size, "BearSSL");
}
-static bool bearssl_data_pending(const struct connectdata *conn,
- int connindex)
+static bool bearssl_data_pending(struct Curl_cfilter *cf,
+ const struct Curl_easy *data)
{
- const struct ssl_connect_data *connssl = &conn->ssl[connindex];
- struct ssl_backend_data *backend = connssl->backend;
- DEBUGASSERT(backend);
+ struct ssl_connect_data *ctx = cf->ctx;
+ struct bearssl_ssl_backend_data *backend;
+
+ (void)data;
+ DEBUGASSERT(ctx && ctx->backend);
+ backend = (struct bearssl_ssl_backend_data *)ctx->backend;
return br_ssl_engine_current_state(&backend->ctx.eng) & BR_SSL_RECVAPP;
}
@@ -1116,13 +1115,13 @@ static CURLcode bearssl_random(struct Curl_easy *data UNUSED_PARAM,
return CURLE_OK;
}
-static CURLcode bearssl_connect(struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
+static CURLcode bearssl_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
CURLcode ret;
bool done = FALSE;
- ret = bearssl_connect_common(data, conn, sockindex, FALSE, &done);
+ ret = bearssl_connect_common(cf, data, FALSE, &done);
if(ret)
return ret;
@@ -1131,37 +1130,41 @@ static CURLcode bearssl_connect(struct Curl_easy *data,
return CURLE_OK;
}
-static CURLcode bearssl_connect_nonblocking(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex, bool *done)
+static CURLcode bearssl_connect_nonblocking(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool *done)
{
- return bearssl_connect_common(data, conn, sockindex, TRUE, done);
+ return bearssl_connect_common(cf, data, TRUE, done);
}
static void *bearssl_get_internals(struct ssl_connect_data *connssl,
CURLINFO info UNUSED_PARAM)
{
- struct ssl_backend_data *backend = connssl->backend;
+ struct bearssl_ssl_backend_data *backend =
+ (struct bearssl_ssl_backend_data *)connssl->backend;
DEBUGASSERT(backend);
return &backend->ctx;
}
-static void bearssl_close(struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
+static void bearssl_close(struct Curl_cfilter *cf, struct Curl_easy *data)
{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct bearssl_ssl_backend_data *backend =
+ (struct bearssl_ssl_backend_data *)connssl->backend;
size_t i;
DEBUGASSERT(backend);
if(backend->active) {
+ backend->active = FALSE;
br_ssl_engine_close(&backend->ctx.eng);
- (void)bearssl_run_until(data, conn, sockindex, BR_SSL_CLOSED);
+ (void)bearssl_run_until(cf, data, BR_SSL_CLOSED);
+ }
+ if(backend->anchors) {
+ for(i = 0; i < backend->anchors_len; ++i)
+ free(backend->anchors[i].dn.data);
+ Curl_safefree(backend->anchors);
}
- for(i = 0; i < backend->anchors_len; ++i)
- free(backend->anchors[i].dn.data);
- free(backend->anchors);
}
static void bearssl_session_free(void *ptr)
@@ -1184,8 +1187,8 @@ static CURLcode bearssl_sha256sum(const unsigned char *input,
const struct Curl_ssl Curl_ssl_bearssl = {
{ CURLSSLBACKEND_BEARSSL, "bearssl" }, /* info */
- SSLSUPP_CAINFO_BLOB | SSLSUPP_SSL_CTX,
- sizeof(struct ssl_backend_data),
+ SSLSUPP_CAINFO_BLOB | SSLSUPP_SSL_CTX | SSLSUPP_HTTPS_PROXY,
+ sizeof(struct bearssl_ssl_backend_data),
Curl_none_init, /* init */
Curl_none_cleanup, /* cleanup */
@@ -1197,7 +1200,7 @@ const struct Curl_ssl Curl_ssl_bearssl = {
Curl_none_cert_status_request, /* cert_status_request */
bearssl_connect, /* connect */
bearssl_connect_nonblocking, /* connect_nonblocking */
- Curl_ssl_getsock, /* getsock */
+ bearssl_adjust_pollset, /* adjust_pollset */
bearssl_get_internals, /* get_internals */
bearssl_close, /* close_one */
Curl_none_close_all, /* close_all */
@@ -1208,7 +1211,10 @@ const struct Curl_ssl Curl_ssl_bearssl = {
Curl_none_false_start, /* false_start */
bearssl_sha256sum, /* sha256sum */
NULL, /* associate_connection */
- NULL /* disassociate_connection */
+ NULL, /* disassociate_connection */
+ NULL, /* free_multi_ssl_backend_data */
+ bearssl_recv, /* recv decrypted data */
+ bearssl_send, /* send data to encrypt */
};
#endif /* USE_BEARSSL */
diff --git a/lib/vtls/bearssl.h b/lib/vtls/bearssl.h
index 512535996..b3651b092 100644
--- a/lib/vtls/bearssl.h
+++ b/lib/vtls/bearssl.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2019 - 2022, Michael Forney, <mforney@mforney.org>
+ * Copyright (C) Michael Forney, <mforney@mforney.org>
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/vtls/gskit.c b/lib/vtls/gskit.c
deleted file mode 100644
index 4ee4edea6..000000000
--- a/lib/vtls/gskit.c
+++ /dev/null
@@ -1,1329 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed 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 "curl_setup.h"
-
-#ifdef USE_GSKIT
-
-#include <gskssl.h>
-#include <qsoasync.h>
-#undef HAVE_SOCKETPAIR /* because the native one isn't good enough */
-#include "socketpair.h"
-#include "strerror.h"
-
-/* Some symbols are undefined/unsupported on OS400 versions < V7R1. */
-#ifndef GSK_SSL_EXTN_SERVERNAME_REQUEST
-#define GSK_SSL_EXTN_SERVERNAME_REQUEST 230
-#endif
-
-#ifndef GSK_TLSV10_CIPHER_SPECS
-#define GSK_TLSV10_CIPHER_SPECS 236
-#endif
-
-#ifndef GSK_TLSV11_CIPHER_SPECS
-#define GSK_TLSV11_CIPHER_SPECS 237
-#endif
-
-#ifndef GSK_TLSV12_CIPHER_SPECS
-#define GSK_TLSV12_CIPHER_SPECS 238
-#endif
-
-#ifndef GSK_PROTOCOL_TLSV11
-#define GSK_PROTOCOL_TLSV11 437
-#endif
-
-#ifndef GSK_PROTOCOL_TLSV12
-#define GSK_PROTOCOL_TLSV12 438
-#endif
-
-#ifndef GSK_FALSE
-#define GSK_FALSE 0
-#endif
-
-#ifndef GSK_TRUE
-#define GSK_TRUE 1
-#endif
-
-
-#include <limits.h>
-
-#include <curl/curl.h>
-#include "urldata.h"
-#include "sendf.h"
-#include "gskit.h"
-#include "vtls.h"
-#include "connect.h" /* for the connect timeout */
-#include "select.h"
-#include "strcase.h"
-#include "timediff.h"
-#include "x509asn1.h"
-#include "curl_printf.h"
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-
-/* Directions. */
-#define SOS_READ 0x01
-#define SOS_WRITE 0x02
-
-/* SSL version flags. */
-#define CURL_GSKPROTO_SSLV2 0
-#define CURL_GSKPROTO_SSLV2_MASK (1 << CURL_GSKPROTO_SSLV2)
-#define CURL_GSKPROTO_SSLV3 1
-#define CURL_GSKPROTO_SSLV3_MASK (1 << CURL_GSKPROTO_SSLV3)
-#define CURL_GSKPROTO_TLSV10 2
-#define CURL_GSKPROTO_TLSV10_MASK (1 << CURL_GSKPROTO_TLSV10)
-#define CURL_GSKPROTO_TLSV11 3
-#define CURL_GSKPROTO_TLSV11_MASK (1 << CURL_GSKPROTO_TLSV11)
-#define CURL_GSKPROTO_TLSV12 4
-#define CURL_GSKPROTO_TLSV12_MASK (1 << CURL_GSKPROTO_TLSV12)
-#define CURL_GSKPROTO_LAST 5
-
-struct ssl_backend_data {
- gsk_handle handle;
- int iocport;
-#ifndef CURL_DISABLE_PROXY
- int localfd;
- int remotefd;
-#endif
-};
-
-#define BACKEND connssl->backend
-
-/* Supported ciphers. */
-struct gskit_cipher {
- const char *name; /* Cipher name. */
- const char *gsktoken; /* Corresponding token for GSKit String. */
- unsigned int versions; /* SSL version flags. */
-};
-
-static const struct gskit_cipher ciphertable[] = {
- { "null-md5", "01",
- CURL_GSKPROTO_SSLV3_MASK | CURL_GSKPROTO_TLSV10_MASK |
- CURL_GSKPROTO_TLSV11_MASK | CURL_GSKPROTO_TLSV12_MASK },
- { "null-sha", "02",
- CURL_GSKPROTO_SSLV3_MASK | CURL_GSKPROTO_TLSV10_MASK |
- CURL_GSKPROTO_TLSV11_MASK | CURL_GSKPROTO_TLSV12_MASK },
- { "exp-rc4-md5", "03",
- CURL_GSKPROTO_SSLV3_MASK | CURL_GSKPROTO_TLSV10_MASK },
- { "rc4-md5", "04",
- CURL_GSKPROTO_SSLV3_MASK | CURL_GSKPROTO_TLSV10_MASK |
- CURL_GSKPROTO_TLSV11_MASK | CURL_GSKPROTO_TLSV12_MASK },
- { "rc4-sha", "05",
- CURL_GSKPROTO_SSLV3_MASK | CURL_GSKPROTO_TLSV10_MASK |
- CURL_GSKPROTO_TLSV11_MASK | CURL_GSKPROTO_TLSV12_MASK },
- { "exp-rc2-cbc-md5", "06",
- CURL_GSKPROTO_SSLV3_MASK | CURL_GSKPROTO_TLSV10_MASK },
- { "exp-des-cbc-sha", "09",
- CURL_GSKPROTO_SSLV3_MASK | CURL_GSKPROTO_TLSV10_MASK |
- CURL_GSKPROTO_TLSV11_MASK },
- { "des-cbc3-sha", "0A",
- CURL_GSKPROTO_SSLV3_MASK | CURL_GSKPROTO_TLSV10_MASK |
- CURL_GSKPROTO_TLSV11_MASK | CURL_GSKPROTO_TLSV12_MASK },
- { "aes128-sha", "2F",
- CURL_GSKPROTO_TLSV10_MASK | CURL_GSKPROTO_TLSV11_MASK |
- CURL_GSKPROTO_TLSV12_MASK },
- { "aes256-sha", "35",
- CURL_GSKPROTO_TLSV10_MASK | CURL_GSKPROTO_TLSV11_MASK |
- CURL_GSKPROTO_TLSV12_MASK },
- { "null-sha256", "3B", CURL_GSKPROTO_TLSV12_MASK },
- { "aes128-sha256", "3C", CURL_GSKPROTO_TLSV12_MASK },
- { "aes256-sha256", "3D", CURL_GSKPROTO_TLSV12_MASK },
- { "aes128-gcm-sha256",
- "9C", CURL_GSKPROTO_TLSV12_MASK },
- { "aes256-gcm-sha384",
- "9D", CURL_GSKPROTO_TLSV12_MASK },
- { "rc4-md5", "1", CURL_GSKPROTO_SSLV2_MASK },
- { "exp-rc4-md5", "2", CURL_GSKPROTO_SSLV2_MASK },
- { "rc2-md5", "3", CURL_GSKPROTO_SSLV2_MASK },
- { "exp-rc2-md5", "4", CURL_GSKPROTO_SSLV2_MASK },
- { "des-cbc-md5", "6", CURL_GSKPROTO_SSLV2_MASK },
- { "des-cbc3-md5", "7", CURL_GSKPROTO_SSLV2_MASK },
- { (const char *) NULL, (const char *) NULL, 0 }
-};
-
-
-static bool is_separator(char c)
-{
- /* Return whether character is a cipher list separator. */
- switch(c) {
- case ' ':
- case '\t':
- case ':':
- case ',':
- case ';':
- return true;
- }
- return false;
-}
-
-
-static CURLcode gskit_status(struct Curl_easy *data, int rc,
- const char *procname, CURLcode defcode)
-{
- char buffer[STRERROR_LEN];
- /* Process GSKit status and map it to a CURLcode. */
- switch(rc) {
- case GSK_OK:
- case GSK_OS400_ASYNCHRONOUS_SOC_INIT:
- return CURLE_OK;
- case GSK_KEYRING_OPEN_ERROR:
- case GSK_OS400_ERROR_NO_ACCESS:
- return CURLE_SSL_CACERT_BADFILE;
- case GSK_INSUFFICIENT_STORAGE:
- return CURLE_OUT_OF_MEMORY;
- case GSK_ERROR_BAD_V2_CIPHER:
- case GSK_ERROR_BAD_V3_CIPHER:
- case GSK_ERROR_NO_CIPHERS:
- return CURLE_SSL_CIPHER;
- case GSK_OS400_ERROR_NOT_TRUSTED_ROOT:
- case GSK_ERROR_CERT_VALIDATION:
- return CURLE_PEER_FAILED_VERIFICATION;
- case GSK_OS400_ERROR_TIMED_OUT:
- return CURLE_OPERATION_TIMEDOUT;
- case GSK_WOULD_BLOCK:
- return CURLE_AGAIN;
- case GSK_OS400_ERROR_NOT_REGISTERED:
- break;
- case GSK_ERROR_IO:
- switch(errno) {
- case ENOMEM:
- return CURLE_OUT_OF_MEMORY;
- default:
- failf(data, "%s I/O error: %s", procname,
- Curl_strerror(errno, buffer, sizeof(buffer)));
- break;
- }
- break;
- default:
- failf(data, "%s: %s", procname, gsk_strerror(rc));
- break;
- }
- return defcode;
-}
-
-
-static CURLcode set_enum(struct Curl_easy *data, gsk_handle h,
- GSK_ENUM_ID id, GSK_ENUM_VALUE value, bool unsupported_ok)
-{
- char buffer[STRERROR_LEN];
- int rc = gsk_attribute_set_enum(h, id, value);
-
- switch(rc) {
- case GSK_OK:
- return CURLE_OK;
- case GSK_ERROR_IO:
- failf(data, "gsk_attribute_set_enum() I/O error: %s",
- Curl_strerror(errno, buffer, sizeof(buffer)));
- break;
- case GSK_ATTRIBUTE_INVALID_ID:
- if(unsupported_ok)
- return CURLE_UNSUPPORTED_PROTOCOL;
- default:
- failf(data, "gsk_attribute_set_enum(): %s", gsk_strerror(rc));
- break;
- }
- return CURLE_SSL_CONNECT_ERROR;
-}
-
-
-static CURLcode set_buffer(struct Curl_easy *data, gsk_handle h,
- GSK_BUF_ID id, const char *buf, bool unsupported_ok)
-{
- char buffer[STRERROR_LEN];
- int rc = gsk_attribute_set_buffer(h, id, buf, 0);
-
- switch(rc) {
- case GSK_OK:
- return CURLE_OK;
- case GSK_ERROR_IO:
- failf(data, "gsk_attribute_set_buffer() I/O error: %s",
- Curl_strerror(errno, buffer, sizeof(buffer)));
- break;
- case GSK_ATTRIBUTE_INVALID_ID:
- if(unsupported_ok)
- return CURLE_UNSUPPORTED_PROTOCOL;
- default:
- failf(data, "gsk_attribute_set_buffer(): %s", gsk_strerror(rc));
- break;
- }
- return CURLE_SSL_CONNECT_ERROR;
-}
-
-
-static CURLcode set_numeric(struct Curl_easy *data,
- gsk_handle h, GSK_NUM_ID id, int value)
-{
- char buffer[STRERROR_LEN];
- int rc = gsk_attribute_set_numeric_value(h, id, value);
-
- switch(rc) {
- case GSK_OK:
- return CURLE_OK;
- case GSK_ERROR_IO:
- failf(data, "gsk_attribute_set_numeric_value() I/O error: %s",
- Curl_strerror(errno, buffer, sizeof(buffer)));
- break;
- default:
- failf(data, "gsk_attribute_set_numeric_value(): %s", gsk_strerror(rc));
- break;
- }
- return CURLE_SSL_CONNECT_ERROR;
-}
-
-
-static CURLcode set_ciphers(struct Curl_easy *data,
- gsk_handle h, unsigned int *protoflags)
-{
- struct connectdata *conn = data->conn;
- const char *cipherlist = SSL_CONN_CONFIG(cipher_list);
- const char *clp;
- const struct gskit_cipher *ctp;
- int i;
- int l;
- bool unsupported;
- CURLcode result;
- struct {
- char *buf;
- char *ptr;
- } ciphers[CURL_GSKPROTO_LAST];
-
- /* Compile cipher list into GSKit-compatible cipher lists. */
-
- if(!cipherlist)
- return CURLE_OK;
- while(is_separator(*cipherlist)) /* Skip initial separators. */
- cipherlist++;
- if(!*cipherlist)
- return CURLE_OK;
-
- /* We allocate GSKit buffers of the same size as the input string: since
- GSKit tokens are always shorter than their cipher names, allocated buffers
- will always be large enough to accommodate the result. */
- l = strlen(cipherlist) + 1;
- memset((char *) ciphers, 0, sizeof(ciphers));
- for(i = 0; i < CURL_GSKPROTO_LAST; i++) {
- ciphers[i].buf = malloc(l);
- if(!ciphers[i].buf) {
- while(i--)
- free(ciphers[i].buf);
- return CURLE_OUT_OF_MEMORY;
- }
- ciphers[i].ptr = ciphers[i].buf;
- *ciphers[i].ptr = '\0';
- }
-
- /* Process each cipher in input string. */
- unsupported = FALSE;
- result = CURLE_OK;
- for(;;) {
- for(clp = cipherlist; *cipherlist && !is_separator(*cipherlist);)
- cipherlist++;
- l = cipherlist - clp;
- if(!l)
- break;
- /* Search the cipher in our table. */
- for(ctp = ciphertable; ctp->name; ctp++)
- if(strncasecompare(ctp->name, clp, l) && !ctp->name[l])
- break;
- if(!ctp->name) {
- failf(data, "Unknown cipher %.*s", l, clp);
- result = CURLE_SSL_CIPHER;
- }
- else {
- unsupported |= !(ctp->versions & (CURL_GSKPROTO_SSLV2_MASK |
- CURL_GSKPROTO_SSLV3_MASK | CURL_GSKPROTO_TLSV10_MASK));
- for(i = 0; i < CURL_GSKPROTO_LAST; i++) {
- if(ctp->versions & (1 << i)) {
- strcpy(ciphers[i].ptr, ctp->gsktoken);
- ciphers[i].ptr += strlen(ctp->gsktoken);
- }
- }
- }
-
- /* Advance to next cipher name or end of string. */
- while(is_separator(*cipherlist))
- cipherlist++;
- }
-
- /* Disable protocols with empty cipher lists. */
- for(i = 0; i < CURL_GSKPROTO_LAST; i++) {
- if(!(*protoflags & (1 << i)) || !ciphers[i].buf[0]) {
- *protoflags &= ~(1 << i);
- ciphers[i].buf[0] = '\0';
- }
- }
-
- /* Try to set-up TLSv1.1 and TLSv2.1 ciphers. */
- if(*protoflags & CURL_GSKPROTO_TLSV11_MASK) {
- result = set_buffer(data, h, GSK_TLSV11_CIPHER_SPECS,
- ciphers[CURL_GSKPROTO_TLSV11].buf, TRUE);
- if(result == CURLE_UNSUPPORTED_PROTOCOL) {
- result = CURLE_OK;
- if(unsupported) {
- failf(data, "TLSv1.1-only ciphers are not yet supported");
- result = CURLE_SSL_CIPHER;
- }
- }
- }
- if(!result && (*protoflags & CURL_GSKPROTO_TLSV12_MASK)) {
- result = set_buffer(data, h, GSK_TLSV12_CIPHER_SPECS,
- ciphers[CURL_GSKPROTO_TLSV12].buf, TRUE);
- if(result == CURLE_UNSUPPORTED_PROTOCOL) {
- result = CURLE_OK;
- if(unsupported) {
- failf(data, "TLSv1.2-only ciphers are not yet supported");
- result = CURLE_SSL_CIPHER;
- }
- }
- }
-
- /* Try to set-up TLSv1.0 ciphers. If not successful, concatenate them to
- the SSLv3 ciphers. OS/400 prior to version 7.1 will understand it. */
- if(!result && (*protoflags & CURL_GSKPROTO_TLSV10_MASK)) {
- result = set_buffer(data, h, GSK_TLSV10_CIPHER_SPECS,
- ciphers[CURL_GSKPROTO_TLSV10].buf, TRUE);
- if(result == CURLE_UNSUPPORTED_PROTOCOL) {
- result = CURLE_OK;
- strcpy(ciphers[CURL_GSKPROTO_SSLV3].ptr,
- ciphers[CURL_GSKPROTO_TLSV10].ptr);
- }
- }
-
- /* Set-up other ciphers. */
- if(!result && (*protoflags & CURL_GSKPROTO_SSLV3_MASK))
- result = set_buffer(data, h, GSK_V3_CIPHER_SPECS,
- ciphers[CURL_GSKPROTO_SSLV3].buf, FALSE);
- if(!result && (*protoflags & CURL_GSKPROTO_SSLV2_MASK))
- result = set_buffer(data, h, GSK_V2_CIPHER_SPECS,
- ciphers[CURL_GSKPROTO_SSLV2].buf, FALSE);
-
- /* Clean-up. */
- for(i = 0; i < CURL_GSKPROTO_LAST; i++)
- free(ciphers[i].buf);
-
- return result;
-}
-
-
-static int gskit_init(void)
-{
- /* No initialization needed. */
- return 1;
-}
-
-
-static void gskit_cleanup(void)
-{
- /* Nothing to do. */
-}
-
-
-static CURLcode init_environment(struct Curl_easy *data,
- gsk_handle *envir, const char *appid,
- const char *file, const char *label,
- const char *password)
-{
- int rc;
- CURLcode result;
- gsk_handle h;
-
- /* Creates the GSKit environment. */
-
- rc = gsk_environment_open(&h);
- switch(rc) {
- case GSK_OK:
- break;
- case GSK_INSUFFICIENT_STORAGE:
- return CURLE_OUT_OF_MEMORY;
- default:
- failf(data, "gsk_environment_open(): %s", gsk_strerror(rc));
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- result = set_enum(data, h, GSK_SESSION_TYPE, GSK_CLIENT_SESSION, FALSE);
- if(!result && appid)
- result = set_buffer(data, h, GSK_OS400_APPLICATION_ID, appid, FALSE);
- if(!result && file)
- result = set_buffer(data, h, GSK_KEYRING_FILE, file, FALSE);
- if(!result && label)
- result = set_buffer(data, h, GSK_KEYRING_LABEL, label, FALSE);
- if(!result && password)
- result = set_buffer(data, h, GSK_KEYRING_PW, password, FALSE);
-
- if(!result) {
- /* Locate CAs, Client certificate and key according to our settings.
- Note: this call may be blocking for some tenths of seconds. */
- result = gskit_status(data, gsk_environment_init(h),
- "gsk_environment_init()", CURLE_SSL_CERTPROBLEM);
- if(!result) {
- *envir = h;
- return result;
- }
- }
- /* Error: rollback. */
- gsk_environment_close(&h);
- return result;
-}
-
-
-static void cancel_async_handshake(struct connectdata *conn, int sockindex)
-{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- Qso_OverlappedIO_t cstat;
-
- DEBUGASSERT(BACKEND);
-
- if(QsoCancelOperation(conn->sock[sockindex], 0) > 0)
- QsoWaitForIOCompletion(BACKEND->iocport, &cstat, (struct timeval *) NULL);
-}
-
-
-static void close_async_handshake(struct ssl_connect_data *connssl)
-{
- DEBUGASSERT(BACKEND);
- QsoDestroyIOCompletionPort(BACKEND->iocport);
- BACKEND->iocport = -1;
-}
-
-static int pipe_ssloverssl(struct connectdata *conn, int sockindex,
- int directions)
-{
-#ifndef CURL_DISABLE_PROXY
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_connect_data *connproxyssl = &conn->proxy_ssl[sockindex];
- struct pollfd fds[2];
- int n;
- int m;
- int i;
- int ret = 0;
- char buf[CURL_MAX_WRITE_SIZE];
-
- DEBUGASSERT(BACKEND);
- DEBUGASSERT(connproxyssl->backend);
-
- if(!connssl->use || !connproxyssl->use)
- return 0; /* No SSL over SSL: OK. */
-
- n = 1;
- fds[0].fd = BACKEND->remotefd;
- fds[1].fd = conn->sock[sockindex];
-
- if(directions & SOS_READ) {
- fds[0].events |= POLLOUT;
- }
- if(directions & SOS_WRITE) {
- n = 2;
- fds[0].events |= POLLIN;
- fds[1].events |= POLLOUT;
- }
- i = Curl_poll(fds, n, 0);
- if(i < 0)
- return -1; /* Select error. */
-
- if(fds[0].revents & POLLOUT) {
- /* Try getting data from HTTPS proxy and pipe it upstream. */
- n = 0;
- i = gsk_secure_soc_read(connproxyssl->backend->handle,
- buf, sizeof(buf), &n);
- switch(i) {
- case GSK_OK:
- if(n) {
- i = write(BACKEND->remotefd, buf, n);
- if(i < 0)
- return -1;
- ret = 1;
- }
- break;
- case GSK_OS400_ERROR_TIMED_OUT:
- case GSK_WOULD_BLOCK:
- break;
- default:
- return -1;
- }
- }
-
- if((fds[0].revents & POLLIN) && (fds[1].revents & POLLOUT)) {
- /* Pipe data to HTTPS proxy. */
- n = read(BACKEND->remotefd, buf, sizeof(buf));
- if(n < 0)
- return -1;
- if(n) {
- i = gsk_secure_soc_write(connproxyssl->backend->handle, buf, n, &m);
- if(i != GSK_OK || n != m)
- return -1;
- ret = 1;
- }
- }
-
- return ret; /* OK */
-#else
- return 0;
-#endif
-}
-
-
-static void close_one(struct ssl_connect_data *connssl, struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
-{
- DEBUGASSERT(BACKEND);
- if(BACKEND->handle) {
- gskit_status(data, gsk_secure_soc_close(&BACKEND->handle),
- "gsk_secure_soc_close()", 0);
- /* Last chance to drain output. */
- while(pipe_ssloverssl(conn, sockindex, SOS_WRITE) > 0)
- ;
- BACKEND->handle = (gsk_handle) NULL;
-#ifndef CURL_DISABLE_PROXY
- if(BACKEND->localfd >= 0) {
- close(BACKEND->localfd);
- BACKEND->localfd = -1;
- }
- if(BACKEND->remotefd >= 0) {
- close(BACKEND->remotefd);
- BACKEND->remotefd = -1;
- }
-#endif
- }
- if(BACKEND->iocport >= 0)
- close_async_handshake(connssl);
-}
-
-
-static ssize_t gskit_send(struct Curl_easy *data, int sockindex,
- const void *mem, size_t len, CURLcode *curlcode)
-{
- struct connectdata *conn = data->conn;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- CURLcode cc = CURLE_SEND_ERROR;
- int written;
-
- DEBUGASSERT(BACKEND);
-
- if(pipe_ssloverssl(conn, sockindex, SOS_WRITE) >= 0) {
- cc = gskit_status(data,
- gsk_secure_soc_write(BACKEND->handle,
- (char *) mem, (int) len, &written),
- "gsk_secure_soc_write()", CURLE_SEND_ERROR);
- if(cc == CURLE_OK)
- if(pipe_ssloverssl(conn, sockindex, SOS_WRITE) < 0)
- cc = CURLE_SEND_ERROR;
- }
- if(cc != CURLE_OK) {
- *curlcode = cc;
- written = -1;
- }
- return (ssize_t) written; /* number of bytes */
-}
-
-
-static ssize_t gskit_recv(struct Curl_easy *data, int num, char *buf,
- size_t buffersize, CURLcode *curlcode)
-{
- struct connectdata *conn = data->conn;
- struct ssl_connect_data *connssl = &conn->ssl[num];
- int nread;
- CURLcode cc = CURLE_RECV_ERROR;
-
- DEBUGASSERT(BACKEND);
-
- if(pipe_ssloverssl(conn, num, SOS_READ) >= 0) {
- int buffsize = buffersize > (size_t) INT_MAX? INT_MAX: (int) buffersize;
- cc = gskit_status(data, gsk_secure_soc_read(BACKEND->handle,
- buf, buffsize, &nread),
- "gsk_secure_soc_read()", CURLE_RECV_ERROR);
- }
- switch(cc) {
- case CURLE_OK:
- break;
- case CURLE_OPERATION_TIMEDOUT:
- cc = CURLE_AGAIN;
- default:
- *curlcode = cc;
- nread = -1;
- break;
- }
- return (ssize_t) nread;
-}
-
-static CURLcode
-set_ssl_version_min_max(unsigned int *protoflags, struct Curl_easy *data)
-{
- struct connectdata *conn = data->conn;
- long ssl_version = SSL_CONN_CONFIG(version);
- long ssl_version_max = SSL_CONN_CONFIG(version_max);
- long i = ssl_version;
- switch(ssl_version_max) {
- case CURL_SSLVERSION_MAX_NONE:
- case CURL_SSLVERSION_MAX_DEFAULT:
- ssl_version_max = CURL_SSLVERSION_TLSv1_2;
- break;
- }
- for(; i <= (ssl_version_max >> 16); ++i) {
- switch(i) {
- case CURL_SSLVERSION_TLSv1_0:
- *protoflags |= CURL_GSKPROTO_TLSV10_MASK;
- break;
- case CURL_SSLVERSION_TLSv1_1:
- *protoflags |= CURL_GSKPROTO_TLSV11_MASK;
- break;
- case CURL_SSLVERSION_TLSv1_2:
- *protoflags |= CURL_GSKPROTO_TLSV11_MASK;
- break;
- case CURL_SSLVERSION_TLSv1_3:
- failf(data, "GSKit: TLS 1.3 is not yet supported");
- return CURLE_SSL_CONNECT_ERROR;
- }
- }
-
- return CURLE_OK;
-}
-
-static CURLcode gskit_connect_step1(struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
-{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- gsk_handle envir;
- CURLcode result;
- const char * const keyringfile = SSL_CONN_CONFIG(CAfile);
- const char * const keyringpwd = SSL_SET_OPTION(key_passwd);
- const char * const keyringlabel = SSL_SET_OPTION(primary.clientcert);
- const long int ssl_version = SSL_CONN_CONFIG(version);
- const bool verifypeer = SSL_CONN_CONFIG(verifypeer);
- const char * const hostname = SSL_HOST_NAME();
- const char *sni;
- unsigned int protoflags = 0;
- Qso_OverlappedIO_t commarea;
-#ifndef CURL_DISABLE_PROXY
- int sockpair[2];
- static const int sobufsize = CURL_MAX_WRITE_SIZE;
-#endif
-
- /* Create SSL environment, start (preferably asynchronous) handshake. */
- DEBUGASSERT(BACKEND);
-
- BACKEND->handle = (gsk_handle) NULL;
- BACKEND->iocport = -1;
-#ifndef CURL_DISABLE_PROXY
- BACKEND->localfd = -1;
- BACKEND->remotefd = -1;
-#endif
-
- /* GSKit supports two ways of specifying an SSL context: either by
- * application identifier (that should have been defined at the system
- * level) or by keyring file, password and certificate label.
- * Local certificate name (CURLOPT_SSLCERT) is used to hold either the
- * application identifier of the certificate label.
- * Key password (CURLOPT_KEYPASSWD) holds the keyring password.
- * It is not possible to have different keyrings for the CAs and the
- * local certificate. We thus use the CA file (CURLOPT_CAINFO) to identify
- * the keyring file.
- * If no key password is given and the keyring is the system keyring,
- * application identifier mode is tried first, as recommended in IBM doc.
- */
-
- envir = (gsk_handle) NULL;
-
- if(keyringlabel && *keyringlabel && !keyringpwd &&
- !strcmp(keyringfile, CURL_CA_BUNDLE)) {
- /* Try application identifier mode. */
- init_environment(data, &envir, keyringlabel, (const char *) NULL,
- (const char *) NULL, (const char *) NULL);
- }
-
- if(!envir) {
- /* Use keyring mode. */
- result = init_environment(data, &envir, (const char *) NULL,
- keyringfile, keyringlabel, keyringpwd);
- if(result)
- return result;
- }
-
- /* Create secure session. */
- result = gskit_status(data, gsk_secure_soc_open(envir, &BACKEND->handle),
- "gsk_secure_soc_open()", CURLE_SSL_CONNECT_ERROR);
- gsk_environment_close(&envir);
- if(result)
- return result;
-
-#ifndef CURL_DISABLE_PROXY
- /* Establish a pipelining socket pair for SSL over SSL. */
- if(conn->proxy_ssl[sockindex].use) {
- if(Curl_socketpair(0, 0, 0, sockpair))
- return CURLE_SSL_CONNECT_ERROR;
- BACKEND->localfd = sockpair[0];
- BACKEND->remotefd = sockpair[1];
- setsockopt(BACKEND->localfd, SOL_SOCKET, SO_RCVBUF,
- (void *) &sobufsize, sizeof(sobufsize));
- setsockopt(BACKEND->remotefd, SOL_SOCKET, SO_RCVBUF,
- (void *) &sobufsize, sizeof(sobufsize));
- setsockopt(BACKEND->localfd, SOL_SOCKET, SO_SNDBUF,
- (void *) &sobufsize, sizeof(sobufsize));
- setsockopt(BACKEND->remotefd, SOL_SOCKET, SO_SNDBUF,
- (void *) &sobufsize, sizeof(sobufsize));
- curlx_nonblock(BACKEND->localfd, TRUE);
- curlx_nonblock(BACKEND->remotefd, TRUE);
- }
-#endif
-
- /* Determine which SSL/TLS version should be enabled. */
- sni = hostname;
- switch(ssl_version) {
- case CURL_SSLVERSION_SSLv2:
- protoflags = CURL_GSKPROTO_SSLV2_MASK;
- sni = NULL;
- break;
- case CURL_SSLVERSION_SSLv3:
- protoflags = CURL_GSKPROTO_SSLV3_MASK;
- sni = NULL;
- break;
- case CURL_SSLVERSION_DEFAULT:
- case CURL_SSLVERSION_TLSv1:
- protoflags = CURL_GSKPROTO_TLSV10_MASK |
- CURL_GSKPROTO_TLSV11_MASK | CURL_GSKPROTO_TLSV12_MASK;
- break;
- case CURL_SSLVERSION_TLSv1_0:
- case CURL_SSLVERSION_TLSv1_1:
- case CURL_SSLVERSION_TLSv1_2:
- case CURL_SSLVERSION_TLSv1_3:
- result = set_ssl_version_min_max(&protoflags, data);
- if(result != CURLE_OK)
- return result;
- break;
- default:
- failf(data, "Unrecognized parameter passed via CURLOPT_SSLVERSION");
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- /* Process SNI. Ignore if not supported (on OS400 < V7R1). */
- if(sni) {
- char *snihost = Curl_ssl_snihost(data, sni, NULL);
- if(!snihost) {
- failf(data, "Failed to set SNI");
- return CURLE_SSL_CONNECT_ERROR;
- }
- result = set_buffer(data, BACKEND->handle,
- GSK_SSL_EXTN_SERVERNAME_REQUEST, snihost, TRUE);
- if(result == CURLE_UNSUPPORTED_PROTOCOL)
- result = CURLE_OK;
- }
-
- /* Set session parameters. */
- if(!result) {
- /* Compute the handshake timeout. Since GSKit granularity is 1 second,
- we round up the required value. */
- timediff_t timeout = Curl_timeleft(data, NULL, TRUE);
- if(timeout < 0)
- result = CURLE_OPERATION_TIMEDOUT;
- else
- result = set_numeric(data, BACKEND->handle, GSK_HANDSHAKE_TIMEOUT,
- (timeout + 999) / 1000);
- }
- if(!result)
- result = set_numeric(data, BACKEND->handle, GSK_OS400_READ_TIMEOUT, 1);
- if(!result)
-#ifndef CURL_DISABLE_PROXY
- result = set_numeric(data, BACKEND->handle, GSK_FD, BACKEND->localfd >= 0?
- BACKEND->localfd: conn->sock[sockindex]);
-#else
- result = set_numeric(data, BACKEND->handle, GSK_FD,
- conn->sock[sockindex]);
-#endif
- if(!result)
- result = set_ciphers(data, BACKEND->handle, &protoflags);
- if(!protoflags) {
- failf(data, "No SSL protocol/cipher combination enabled");
- result = CURLE_SSL_CIPHER;
- }
- if(!result)
- result = set_enum(data, BACKEND->handle, GSK_PROTOCOL_SSLV2,
- (protoflags & CURL_GSKPROTO_SSLV2_MASK)?
- GSK_PROTOCOL_SSLV2_ON: GSK_PROTOCOL_SSLV2_OFF, FALSE);
- if(!result)
- result = set_enum(data, BACKEND->handle, GSK_PROTOCOL_SSLV3,
- (protoflags & CURL_GSKPROTO_SSLV3_MASK)?
- GSK_PROTOCOL_SSLV3_ON: GSK_PROTOCOL_SSLV3_OFF, FALSE);
- if(!result)
- result = set_enum(data, BACKEND->handle, GSK_PROTOCOL_TLSV1,
- (protoflags & CURL_GSKPROTO_TLSV10_MASK)?
- GSK_PROTOCOL_TLSV1_ON: GSK_PROTOCOL_TLSV1_OFF, FALSE);
- if(!result) {
- result = set_enum(data, BACKEND->handle, GSK_PROTOCOL_TLSV11,
- (protoflags & CURL_GSKPROTO_TLSV11_MASK)?
- GSK_TRUE: GSK_FALSE, TRUE);
- if(result == CURLE_UNSUPPORTED_PROTOCOL) {
- result = CURLE_OK;
- if(protoflags == CURL_GSKPROTO_TLSV11_MASK) {
- failf(data, "TLS 1.1 not yet supported");
- result = CURLE_SSL_CIPHER;
- }
- }
- }
- if(!result) {
- result = set_enum(data, BACKEND->handle, GSK_PROTOCOL_TLSV12,
- (protoflags & CURL_GSKPROTO_TLSV12_MASK)?
- GSK_TRUE: GSK_FALSE, TRUE);
- if(result == CURLE_UNSUPPORTED_PROTOCOL) {
- result = CURLE_OK;
- if(protoflags == CURL_GSKPROTO_TLSV12_MASK) {
- failf(data, "TLS 1.2 not yet supported");
- result = CURLE_SSL_CIPHER;
- }
- }
- }
- if(!result)
- result = set_enum(data, BACKEND->handle, GSK_SERVER_AUTH_TYPE,
- verifypeer? GSK_SERVER_AUTH_FULL:
- GSK_SERVER_AUTH_PASSTHRU, FALSE);
-
- if(!result) {
- /* Start handshake. Try asynchronous first. */
- memset(&commarea, 0, sizeof(commarea));
- BACKEND->iocport = QsoCreateIOCompletionPort();
- if(BACKEND->iocport != -1) {
- result = gskit_status(data,
- gsk_secure_soc_startInit(BACKEND->handle,
- BACKEND->iocport,
- &commarea),
- "gsk_secure_soc_startInit()",
- CURLE_SSL_CONNECT_ERROR);
- if(!result) {
- connssl->connecting_state = ssl_connect_2;
- return CURLE_OK;
- }
- else
- close_async_handshake(connssl);
- }
- else if(errno != ENOBUFS)
- result = gskit_status(data, GSK_ERROR_IO,
- "QsoCreateIOCompletionPort()", 0);
-#ifndef CURL_DISABLE_PROXY
- else if(conn->proxy_ssl[sockindex].use) {
- /* Cannot pipeline while handshaking synchronously. */
- result = CURLE_SSL_CONNECT_ERROR;
- }
-#endif
- else {
- /* No more completion port available. Use synchronous IO. */
- result = gskit_status(data, gsk_secure_soc_init(BACKEND->handle),
- "gsk_secure_soc_init()", CURLE_SSL_CONNECT_ERROR);
- if(!result) {
- connssl->connecting_state = ssl_connect_3;
- return CURLE_OK;
- }
- }
- }
-
- /* Error: rollback. */
- close_one(connssl, data, conn, sockindex);
- return result;
-}
-
-
-static CURLcode gskit_connect_step2(struct Curl_easy *data,
- struct connectdata *conn, int sockindex,
- bool nonblocking)
-{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- Qso_OverlappedIO_t cstat;
- struct timeval stmv;
- CURLcode result;
-
- /* Poll or wait for end of SSL asynchronous handshake. */
- DEBUGASSERT(BACKEND);
-
- for(;;) {
- timediff_t timeout_ms = nonblocking? 0: Curl_timeleft(data, NULL, TRUE);
- stmv.tv_sec = 0;
- stmv.tv_usec = 0;
- if(timeout_ms < 0)
- timeout_ms = 0;
- switch(QsoWaitForIOCompletion(BACKEND->iocport, &cstat,
- curlx_mstotv(&stmv, timeout_ms))) {
- case 1: /* Operation complete. */
- break;
- case -1: /* An error occurred: handshake still in progress. */
- if(errno == EINTR) {
- if(nonblocking)
- return CURLE_OK;
- continue; /* Retry. */
- }
- if(errno != ETIME) {
- char buffer[STRERROR_LEN];
- failf(data, "QsoWaitForIOCompletion() I/O error: %s",
- Curl_strerror(errno, buffer, sizeof(buffer)));
- cancel_async_handshake(conn, sockindex);
- close_async_handshake(connssl);
- return CURLE_SSL_CONNECT_ERROR;
- }
- /* FALL INTO... */
- case 0: /* Handshake in progress, timeout occurred. */
- if(nonblocking)
- return CURLE_OK;
- cancel_async_handshake(conn, sockindex);
- close_async_handshake(connssl);
- return CURLE_OPERATION_TIMEDOUT;
- }
- break;
- }
- result = gskit_status(data, cstat.returnValue, "SSL handshake",
- CURLE_SSL_CONNECT_ERROR);
- if(!result)
- connssl->connecting_state = ssl_connect_3;
- close_async_handshake(connssl);
- return result;
-}
-
-
-static CURLcode gskit_connect_step3(struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
-{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- const gsk_cert_data_elem *cdev;
- int cdec;
- const gsk_cert_data_elem *p;
- const char *cert = (const char *) NULL;
- const char *certend;
- const char *ptr;
- CURLcode result;
-
- /* SSL handshake done: gather certificate info and verify host. */
- DEBUGASSERT(BACKEND);
-
- if(gskit_status(data, gsk_attribute_get_cert_info(BACKEND->handle,
- GSK_PARTNER_CERT_INFO,
- &cdev, &cdec),
- "gsk_attribute_get_cert_info()", CURLE_SSL_CONNECT_ERROR) ==
- CURLE_OK) {
- int i;
-
- infof(data, "Server certificate:");
- p = cdev;
- for(i = 0; i++ < cdec; p++)
- switch(p->cert_data_id) {
- case CERT_BODY_DER:
- cert = p->cert_data_p;
- certend = cert + cdev->cert_data_l;
- break;
- case CERT_DN_PRINTABLE:
- infof(data, "\t subject: %.*s", p->cert_data_l, p->cert_data_p);
- break;
- case CERT_ISSUER_DN_PRINTABLE:
- infof(data, "\t issuer: %.*s", p->cert_data_l, p->cert_data_p);
- break;
- case CERT_VALID_FROM:
- infof(data, "\t start date: %.*s", p->cert_data_l, p->cert_data_p);
- break;
- case CERT_VALID_TO:
- infof(data, "\t expire date: %.*s", p->cert_data_l, p->cert_data_p);
- break;
- }
- }
-
- /* Verify host. */
- result = Curl_verifyhost(data, conn, cert, certend);
- if(result)
- return result;
-
- /* The only place GSKit can get the whole CA chain is a validation
- callback where no user data pointer is available. Therefore it's not
- possible to copy this chain into our structures for CAINFO.
- However the server certificate may be available, thus we can return
- info about it. */
- if(data->set.ssl.certinfo) {
- result = Curl_ssl_init_certinfo(data, 1);
- if(result)
- return result;
-
- if(cert) {
- result = Curl_extract_certinfo(data, 0, cert, certend);
- if(result)
- return result;
- }
- }
-
- /* Check pinned public key. */
- ptr = SSL_PINNED_PUB_KEY();
- if(!result && ptr) {
- struct Curl_X509certificate x509;
- struct Curl_asn1Element *p;
-
- memset(&x509, 0, sizeof(x509));
- if(Curl_parseX509(&x509, cert, certend))
- return CURLE_SSL_PINNEDPUBKEYNOTMATCH;
- p = &x509.subjectPublicKeyInfo;
- result = Curl_pin_peer_pubkey(data, ptr, p->header, p->end - p->header);
- if(result) {
- failf(data, "SSL: public key does not match pinned public key");
- return result;
- }
- }
-
- connssl->connecting_state = ssl_connect_done;
- return CURLE_OK;
-}
-
-
-static CURLcode gskit_connect_common(struct Curl_easy *data,
- struct connectdata *conn, int sockindex,
- bool nonblocking, bool *done)
-{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- timediff_t timeout_ms;
- CURLcode result = CURLE_OK;
-
- *done = connssl->state == ssl_connection_complete;
- if(*done)
- return CURLE_OK;
-
- /* Step 1: create session, start handshake. */
- if(connssl->connecting_state == ssl_connect_1) {
- /* check allowed time left */
- timeout_ms = Curl_timeleft(data, NULL, TRUE);
-
- if(timeout_ms < 0) {
- /* no need to continue if time already is up */
- failf(data, "SSL connection timeout");
- result = CURLE_OPERATION_TIMEDOUT;
- }
- else
- result = gskit_connect_step1(data, conn, sockindex);
- }
-
- /* Handle handshake pipelining. */
- if(!result)
- if(pipe_ssloverssl(conn, sockindex, SOS_READ | SOS_WRITE) < 0)
- result = CURLE_SSL_CONNECT_ERROR;
-
- /* Step 2: check if handshake is over. */
- if(!result && connssl->connecting_state == ssl_connect_2) {
- /* check allowed time left */
- timeout_ms = Curl_timeleft(data, NULL, TRUE);
-
- if(timeout_ms < 0) {
- /* no need to continue if time already is up */
- failf(data, "SSL connection timeout");
- result = CURLE_OPERATION_TIMEDOUT;
- }
- else
- result = gskit_connect_step2(data, conn, sockindex, nonblocking);
- }
-
- /* Handle handshake pipelining. */
- if(!result)
- if(pipe_ssloverssl(conn, sockindex, SOS_READ | SOS_WRITE) < 0)
- result = CURLE_SSL_CONNECT_ERROR;
-
- /* Step 3: gather certificate info, verify host. */
- if(!result && connssl->connecting_state == ssl_connect_3)
- result = gskit_connect_step3(data, conn, sockindex);
-
- if(result)
- close_one(connssl, data, conn, sockindex);
- else if(connssl->connecting_state == ssl_connect_done) {
- connssl->state = ssl_connection_complete;
- connssl->connecting_state = ssl_connect_1;
- conn->recv[sockindex] = gskit_recv;
- conn->send[sockindex] = gskit_send;
- *done = TRUE;
- }
-
- return result;
-}
-
-
-static CURLcode gskit_connect_nonblocking(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex, bool *done)
-{
- CURLcode result;
-
- result = gskit_connect_common(data, conn, sockindex, TRUE, done);
- if(*done || result)
- conn->ssl[sockindex].connecting_state = ssl_connect_1;
- return result;
-}
-
-
-static CURLcode gskit_connect(struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
-{
- CURLcode result;
- bool done;
-
- conn->ssl[sockindex].connecting_state = ssl_connect_1;
- result = gskit_connect_common(data, conn, sockindex, FALSE, &done);
- if(result)
- return result;
-
- DEBUGASSERT(done);
-
- return CURLE_OK;
-}
-
-
-static void gskit_close(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
-{
- close_one(&conn->ssl[sockindex], data, conn, sockindex);
-#ifndef CURL_DISABLE_PROXY
- close_one(&conn->proxy_ssl[sockindex], data, conn, sockindex);
-#endif
-}
-
-
-static int gskit_shutdown(struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
-{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- int what;
- int rc;
- char buf[120];
- int loop = 10; /* don't get stuck */
-
- DEBUGASSERT(BACKEND);
-
- if(!BACKEND->handle)
- return 0;
-
-#ifndef CURL_DISABLE_FTP
- if(data->set.ftp_ccc != CURLFTPSSL_CCC_ACTIVE)
- return 0;
-#endif
-
- close_one(connssl, data, conn, sockindex);
- rc = 0;
- what = SOCKET_READABLE(conn->sock[sockindex],
- SSL_SHUTDOWN_TIMEOUT);
-
- while(loop--) {
- ssize_t nread;
-
- if(what < 0) {
- /* anything that gets here is fatally bad */
- failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);
- rc = -1;
- break;
- }
-
- if(!what) { /* timeout */
- failf(data, "SSL shutdown timeout");
- break;
- }
-
- /* Something to read, let's do it and hope that it is the close
- notify alert from the server. No way to gsk_secure_soc_read() now, so
- use read(). */
-
- nread = read(conn->sock[sockindex], buf, sizeof(buf));
-
- if(nread < 0) {
- char buffer[STRERROR_LEN];
- failf(data, "read: %s", Curl_strerror(errno, buffer, sizeof(buffer)));
- rc = -1;
- }
-
- if(nread <= 0)
- break;
-
- what = SOCKET_READABLE(conn->sock[sockindex], 0);
- }
-
- return rc;
-}
-
-
-static size_t gskit_version(char *buffer, size_t size)
-{
- return msnprintf(buffer, size, "GSKit");
-}
-
-
-static int gskit_check_cxn(struct connectdata *cxn)
-{
- struct ssl_connect_data *connssl = &cxn->ssl[FIRSTSOCKET];
- int err;
- int errlen;
-
- /* The only thing that can be tested here is at the socket level. */
- DEBUGASSERT(BACKEND);
-
- if(!BACKEND->handle)
- return 0; /* connection has been closed */
-
- err = 0;
- errlen = sizeof(err);
-
- if(getsockopt(cxn->sock[FIRSTSOCKET], SOL_SOCKET, SO_ERROR,
- (unsigned char *) &err, &errlen) ||
- errlen != sizeof(err) || err)
- return 0; /* connection has been closed */
-
- return -1; /* connection status unknown */
-}
-
-static void *gskit_get_internals(struct ssl_connect_data *connssl,
- CURLINFO info UNUSED_PARAM)
-{
- (void)info;
- DEBUGASSERT(BACKEND);
- return BACKEND->handle;
-}
-
-const struct Curl_ssl Curl_ssl_gskit = {
- { CURLSSLBACKEND_GSKIT, "gskit" }, /* info */
-
- SSLSUPP_CERTINFO |
- SSLSUPP_PINNEDPUBKEY,
-
- sizeof(struct ssl_backend_data),
-
- gskit_init, /* init */
- gskit_cleanup, /* cleanup */
- gskit_version, /* version */
- gskit_check_cxn, /* check_cxn */
- gskit_shutdown, /* shutdown */
- Curl_none_data_pending, /* data_pending */
- Curl_none_random, /* random */
- Curl_none_cert_status_request, /* cert_status_request */
- gskit_connect, /* connect */
- gskit_connect_nonblocking, /* connect_nonblocking */
- Curl_ssl_getsock, /* getsock */
- gskit_get_internals, /* get_internals */
- gskit_close, /* close_one */
- Curl_none_close_all, /* close_all */
- /* No session handling for GSKit */
- Curl_none_session_free, /* session_free */
- Curl_none_set_engine, /* set_engine */
- Curl_none_set_engine_default, /* set_engine_default */
- Curl_none_engines_list, /* engines_list */
- Curl_none_false_start, /* false_start */
- NULL, /* sha256sum */
- NULL, /* associate_connection */
- NULL /* disassociate_connection */
-};
-
-#endif /* USE_GSKIT */
diff --git a/lib/vtls/gtls.c b/lib/vtls/gtls.c
index cf3dbc523..4e337f5dd 100644
--- a/lib/vtls/gtls.c
+++ b/lib/vtls/gtls.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -45,6 +45,7 @@
#include "inet_pton.h"
#include "gtls.h"
#include "vtls.h"
+#include "vtls_int.h"
#include "vauth/vauth.h"
#include "parsedate.h"
#include "connect.h" /* for the connect timeout */
@@ -58,14 +59,6 @@
/* The last #include file should be: */
#include "memdebug.h"
-#ifdef HAVE_GNUTLS_SRP
-/* the function exists */
-#ifdef USE_TLS_SRP
-/* the functionality is not disabled */
-#define USE_GNUTLS_SRP
-#endif
-#endif
-
/* Enable GnuTLS debugging by defining GTLSDEBUG */
/*#define GTLSDEBUG */
@@ -83,36 +76,48 @@ static bool gtls_inited = FALSE;
# include <gnutls/ocsp.h>
-struct ssl_backend_data {
- gnutls_session_t session;
- gnutls_certificate_credentials_t cred;
-#ifdef USE_GNUTLS_SRP
- gnutls_srp_client_credentials_t srp_client_cred;
-#endif
+struct gtls_ssl_backend_data {
+ struct gtls_instance gtls;
};
-static ssize_t gtls_push(void *s, const void *buf, size_t len)
+static ssize_t gtls_push(void *s, const void *buf, size_t blen)
{
- curl_socket_t sock = *(curl_socket_t *)s;
- ssize_t ret = swrite(sock, buf, len);
- return ret;
-}
+ struct Curl_cfilter *cf = s;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+ ssize_t nwritten;
+ CURLcode result;
-static ssize_t gtls_pull(void *s, void *buf, size_t len)
-{
- curl_socket_t sock = *(curl_socket_t *)s;
- ssize_t ret = sread(sock, buf, len);
- return ret;
+ DEBUGASSERT(data);
+ nwritten = Curl_conn_cf_send(cf->next, data, buf, blen, &result);
+ if(nwritten < 0) {
+ struct gtls_ssl_backend_data *backend =
+ (struct gtls_ssl_backend_data *)connssl->backend;
+ gnutls_transport_set_errno(backend->gtls.session,
+ (CURLE_AGAIN == result)? EAGAIN : EINVAL);
+ nwritten = -1;
+ }
+ return nwritten;
}
-static ssize_t gtls_push_ssl(void *s, const void *buf, size_t len)
+static ssize_t gtls_pull(void *s, void *buf, size_t blen)
{
- return gnutls_record_send((gnutls_session_t) s, buf, len);
-}
+ struct Curl_cfilter *cf = s;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+ ssize_t nread;
+ CURLcode result;
-static ssize_t gtls_pull_ssl(void *s, void *buf, size_t len)
-{
- return gnutls_record_recv((gnutls_session_t) s, buf, len);
+ DEBUGASSERT(data);
+ nread = Curl_conn_cf_recv(cf->next, data, buf, blen, &result);
+ if(nread < 0) {
+ struct gtls_ssl_backend_data *backend =
+ (struct gtls_ssl_backend_data *)connssl->backend;
+ gnutls_transport_set_errno(backend->gtls.session,
+ (CURLE_AGAIN == result)? EAGAIN : EINVAL);
+ nread = -1;
+ }
+ return nread;
}
/* gtls_init()
@@ -205,19 +210,19 @@ static void unload_file(gnutls_datum_t data)
/* this function does a SSL/TLS (re-)handshake */
-static CURLcode handshake(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex,
+static CURLcode handshake(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
bool duringconnect,
bool nonblocking)
{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct gtls_ssl_backend_data *backend =
+ (struct gtls_ssl_backend_data *)connssl->backend;
gnutls_session_t session;
- curl_socket_t sockfd = conn->sock[sockindex];
+ curl_socket_t sockfd = Curl_conn_cf_get_socket(cf, data);
DEBUGASSERT(backend);
- session = backend->session;
+ session = backend->gtls.session;
for(;;) {
timediff_t timeout_ms;
@@ -323,12 +328,12 @@ static gnutls_x509_crt_fmt_t do_file_type(const char *type)
static CURLcode
set_ssl_version_min_max(struct Curl_easy *data,
+ struct ssl_primary_config *conn_config,
const char **prioritylist,
const char *tls13support)
{
- struct connectdata *conn = data->conn;
- long ssl_version = SSL_CONN_CONFIG(version);
- long ssl_version_max = SSL_CONN_CONFIG(version_max);
+ long ssl_version = conn_config->version;
+ long ssl_version_max = conn_config->version_max;
if((ssl_version == CURL_SSLVERSION_DEFAULT) ||
(ssl_version == CURL_SSLVERSION_TLSv1))
@@ -394,75 +399,54 @@ set_ssl_version_min_max(struct Curl_easy *data,
return CURLE_SSL_CONNECT_ERROR;
}
-static CURLcode
-gtls_connect_step1(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex)
+CURLcode gtls_client_init(struct Curl_easy *data,
+ struct ssl_primary_config *config,
+ struct ssl_config_data *ssl_config,
+ struct ssl_peer *peer,
+ struct gtls_instance *gtls,
+ long *pverifyresult)
{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
unsigned int init_flags;
- gnutls_session_t session;
int rc;
bool sni = TRUE; /* default is SNI enabled */
- void *transport_ptr = NULL;
- gnutls_push_func gnutls_transport_push = NULL;
- gnutls_pull_func gnutls_transport_pull = NULL;
-#ifdef ENABLE_IPV6
- struct in6_addr addr;
-#else
- struct in_addr addr;
-#endif
const char *prioritylist;
const char *err = NULL;
- const char * const hostname = SSL_HOST_NAME();
- long * const certverifyresult = &SSL_SET_OPTION_LVALUE(certverifyresult);
const char *tls13support;
CURLcode result;
- DEBUGASSERT(backend);
-
- if(connssl->state == ssl_connection_complete)
- /* to make us tolerant against being called more than once for the
- same connection */
- return CURLE_OK;
-
if(!gtls_inited)
gtls_init();
- /* Initialize certverifyresult to OK */
- *certverifyresult = 0;
+ *pverifyresult = 0;
- if(SSL_CONN_CONFIG(version) == CURL_SSLVERSION_SSLv2) {
+ if(config->version == CURL_SSLVERSION_SSLv2) {
failf(data, "GnuTLS does not support SSLv2");
return CURLE_SSL_CONNECT_ERROR;
}
- else if(SSL_CONN_CONFIG(version) == CURL_SSLVERSION_SSLv3)
+ else if(config->version == CURL_SSLVERSION_SSLv3)
sni = FALSE; /* SSLv3 has no SNI */
/* allocate a cred struct */
- rc = gnutls_certificate_allocate_credentials(&backend->cred);
+ rc = gnutls_certificate_allocate_credentials(&gtls->cred);
if(rc != GNUTLS_E_SUCCESS) {
failf(data, "gnutls_cert_all_cred() failed: %s", gnutls_strerror(rc));
return CURLE_SSL_CONNECT_ERROR;
}
#ifdef USE_GNUTLS_SRP
- if((SSL_SET_OPTION(primary.authtype) == CURL_TLSAUTH_SRP) &&
- Curl_auth_allowed_to_host(data)) {
- infof(data, "Using TLS-SRP username: %s",
- SSL_SET_OPTION(primary.username));
+ if(config->username && Curl_auth_allowed_to_host(data)) {
+ infof(data, "Using TLS-SRP username: %s", config->username);
- rc = gnutls_srp_allocate_client_credentials(&backend->srp_client_cred);
+ rc = gnutls_srp_allocate_client_credentials(&gtls->srp_client_cred);
if(rc != GNUTLS_E_SUCCESS) {
failf(data, "gnutls_srp_allocate_client_cred() failed: %s",
gnutls_strerror(rc));
return CURLE_OUT_OF_MEMORY;
}
- rc = gnutls_srp_set_client_credentials(backend->srp_client_cred,
- SSL_SET_OPTION(primary.username),
- SSL_SET_OPTION(primary.password));
+ rc = gnutls_srp_set_client_credentials(gtls->srp_client_cred,
+ config->username,
+ config->password);
if(rc != GNUTLS_E_SUCCESS) {
failf(data, "gnutls_srp_set_client_cred() failed: %s",
gnutls_strerror(rc));
@@ -471,67 +455,73 @@ gtls_connect_step1(struct Curl_easy *data,
}
#endif
- if(SSL_CONN_CONFIG(CAfile)) {
- /* set the trusted CA cert bundle file */
- gnutls_certificate_set_verify_flags(backend->cred,
- GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT);
+ if(config->verifypeer) {
+ bool imported_native_ca = false;
- rc = gnutls_certificate_set_x509_trust_file(backend->cred,
- SSL_CONN_CONFIG(CAfile),
- GNUTLS_X509_FMT_PEM);
- if(rc < 0) {
- infof(data, "error reading ca cert file %s (%s)",
- SSL_CONN_CONFIG(CAfile), gnutls_strerror(rc));
- if(SSL_CONN_CONFIG(verifypeer)) {
- *certverifyresult = rc;
- return CURLE_SSL_CACERT_BADFILE;
+ if(ssl_config->native_ca_store) {
+ rc = gnutls_certificate_set_x509_system_trust(gtls->cred);
+ if(rc < 0)
+ infof(data, "error reading native ca store (%s), continuing anyway",
+ gnutls_strerror(rc));
+ else {
+ infof(data, "found %d certificates in native ca store", rc);
+ if(rc > 0)
+ imported_native_ca = true;
}
}
- else
- infof(data, "found %d certificates in %s", rc,
- SSL_CONN_CONFIG(CAfile));
- }
- if(SSL_CONN_CONFIG(CApath)) {
- /* set the trusted CA cert directory */
- rc = gnutls_certificate_set_x509_trust_dir(backend->cred,
- SSL_CONN_CONFIG(CApath),
- GNUTLS_X509_FMT_PEM);
- if(rc < 0) {
- infof(data, "error reading ca cert file %s (%s)",
- SSL_CONN_CONFIG(CApath), gnutls_strerror(rc));
- if(SSL_CONN_CONFIG(verifypeer)) {
- *certverifyresult = rc;
- return CURLE_SSL_CACERT_BADFILE;
+ if(config->CAfile) {
+ /* set the trusted CA cert bundle file */
+ gnutls_certificate_set_verify_flags(gtls->cred,
+ GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT);
+
+ rc = gnutls_certificate_set_x509_trust_file(gtls->cred,
+ config->CAfile,
+ GNUTLS_X509_FMT_PEM);
+ if(rc < 0) {
+ infof(data, "error reading ca cert file %s (%s)%s",
+ config->CAfile, gnutls_strerror(rc),
+ (imported_native_ca ? ", continuing anyway" : ""));
+ if(!imported_native_ca) {
+ *pverifyresult = rc;
+ return CURLE_SSL_CACERT_BADFILE;
+ }
}
+ else
+ infof(data, "found %d certificates in %s", rc, config->CAfile);
}
- else
- infof(data, "found %d certificates in %s",
- rc, SSL_CONN_CONFIG(CApath));
- }
-#ifdef CURL_CA_FALLBACK
- /* use system ca certificate store as fallback */
- if(SSL_CONN_CONFIG(verifypeer) &&
- !(SSL_CONN_CONFIG(CAfile) || SSL_CONN_CONFIG(CApath))) {
- /* this ignores errors on purpose */
- gnutls_certificate_set_x509_system_trust(backend->cred);
+ if(config->CApath) {
+ /* set the trusted CA cert directory */
+ rc = gnutls_certificate_set_x509_trust_dir(gtls->cred,
+ config->CApath,
+ GNUTLS_X509_FMT_PEM);
+ if(rc < 0) {
+ infof(data, "error reading ca cert file %s (%s)%s",
+ config->CApath, gnutls_strerror(rc),
+ (imported_native_ca ? ", continuing anyway" : ""));
+ if(!imported_native_ca) {
+ *pverifyresult = rc;
+ return CURLE_SSL_CACERT_BADFILE;
+ }
+ }
+ else
+ infof(data, "found %d certificates in %s", rc, config->CApath);
+ }
}
-#endif
- if(SSL_SET_OPTION(primary.CRLfile)) {
+ if(config->CRLfile) {
/* set the CRL list file */
- rc = gnutls_certificate_set_x509_crl_file(backend->cred,
- SSL_SET_OPTION(primary.CRLfile),
+ rc = gnutls_certificate_set_x509_crl_file(gtls->cred,
+ config->CRLfile,
GNUTLS_X509_FMT_PEM);
if(rc < 0) {
failf(data, "error reading crl file %s (%s)",
- SSL_SET_OPTION(primary.CRLfile), gnutls_strerror(rc));
+ config->CRLfile, gnutls_strerror(rc));
return CURLE_SSL_CRL_BADFILE;
}
else
- infof(data, "found %d CRL in %s",
- rc, SSL_SET_OPTION(primary.CRLfile));
+ infof(data, "found %d CRL in %s", rc, config->CRLfile);
}
/* Initialize TLS session as a client */
@@ -546,31 +536,22 @@ gtls_connect_step1(struct Curl_easy *data,
init_flags |= GNUTLS_NO_TICKETS;
#endif
- rc = gnutls_init(&backend->session, init_flags);
+ rc = gnutls_init(&gtls->session, init_flags);
if(rc != GNUTLS_E_SUCCESS) {
failf(data, "gnutls_init() failed: %d", rc);
return CURLE_SSL_CONNECT_ERROR;
}
- /* convenient assign */
- session = backend->session;
-
- if((0 == Curl_inet_pton(AF_INET, hostname, &addr)) &&
-#ifdef ENABLE_IPV6
- (0 == Curl_inet_pton(AF_INET6, hostname, &addr)) &&
-#endif
- sni) {
- size_t snilen;
- char *snihost = Curl_ssl_snihost(data, hostname, &snilen);
- if(!snihost || gnutls_server_name_set(session, GNUTLS_NAME_DNS, snihost,
- snilen) < 0) {
+ if(sni && peer->sni) {
+ if(gnutls_server_name_set(gtls->session, GNUTLS_NAME_DNS,
+ peer->sni, strlen(peer->sni)) < 0) {
failf(data, "Failed to set SNI");
return CURLE_SSL_CONNECT_ERROR;
}
}
/* Use default priorities */
- rc = gnutls_set_default_priority(session);
+ rc = gnutls_set_default_priority(gtls->session);
if(rc != GNUTLS_E_SUCCESS)
return CURLE_SSL_CONNECT_ERROR;
@@ -581,13 +562,13 @@ gtls_connect_step1(struct Curl_easy *data,
* removed if a run-time error indicates that SRP is not supported by this
* GnuTLS version */
- if(SSL_CONN_CONFIG(version) == CURL_SSLVERSION_SSLv2 ||
- SSL_CONN_CONFIG(version) == CURL_SSLVERSION_SSLv3) {
+ if(config->version == CURL_SSLVERSION_SSLv2 ||
+ config->version == CURL_SSLVERSION_SSLv3) {
failf(data, "GnuTLS does not support SSLv2 or SSLv3");
return CURLE_SSL_CONNECT_ERROR;
}
- if(SSL_CONN_CONFIG(version) == CURL_SSLVERSION_TLSv1_3) {
+ if(config->version == CURL_SSLVERSION_TLSv1_3) {
if(!tls13support) {
failf(data, "This GnuTLS installation does not support TLS 1.3");
return CURLE_SSL_CONNECT_ERROR;
@@ -595,14 +576,14 @@ gtls_connect_step1(struct Curl_easy *data,
}
/* At this point we know we have a supported TLS version, so set it */
- result = set_ssl_version_min_max(data, &prioritylist, tls13support);
+ result = set_ssl_version_min_max(data, config, &prioritylist, tls13support);
if(result)
return result;
#ifdef USE_GNUTLS_SRP
/* Only add SRP to the cipher list if SRP is requested. Otherwise
* GnuTLS will disable TLS 1.3 support. */
- if(SSL_SET_OPTION(primary.authtype) == CURL_TLSAUTH_SRP) {
+ if(config->username) {
size_t len = strlen(prioritylist);
char *prioritysrp = malloc(len + sizeof(GNUTLS_SRP) + 1);
@@ -610,7 +591,7 @@ gtls_connect_step1(struct Curl_easy *data,
return CURLE_OUT_OF_MEMORY;
strcpy(prioritysrp, prioritylist);
strcpy(prioritysrp + len, ":" GNUTLS_SRP);
- rc = gnutls_priority_set_direct(session, prioritysrp, &err);
+ rc = gnutls_priority_set_direct(gtls->session, prioritysrp, &err);
free(prioritysrp);
if((rc == GNUTLS_E_INVALID_REQUEST) && err) {
@@ -620,7 +601,7 @@ gtls_connect_step1(struct Curl_easy *data,
else {
#endif
infof(data, "GnuTLS ciphers: %s", prioritylist);
- rc = gnutls_priority_set_direct(session, prioritylist, &err);
+ rc = gnutls_priority_set_direct(gtls->session, prioritylist, &err);
#ifdef USE_GNUTLS_SRP
}
#endif
@@ -631,48 +612,19 @@ gtls_connect_step1(struct Curl_easy *data,
return CURLE_SSL_CONNECT_ERROR;
}
- if(conn->bits.tls_enable_alpn) {
- int cur = 0;
- gnutls_datum_t protocols[2];
-
-#ifdef USE_HTTP2
- if(data->state.httpwant >= CURL_HTTP_VERSION_2
-#ifndef CURL_DISABLE_PROXY
- && (!SSL_IS_PROXY() || !conn->bits.tunnel_proxy)
-#endif
- ) {
- protocols[cur].data = (unsigned char *)ALPN_H2;
- protocols[cur].size = ALPN_H2_LENGTH;
- cur++;
- infof(data, VTLS_INFOF_ALPN_OFFER_1STR, ALPN_H2);
- }
-#endif
-
- protocols[cur].data = (unsigned char *)ALPN_HTTP_1_1;
- protocols[cur].size = ALPN_HTTP_1_1_LENGTH;
- cur++;
- infof(data, VTLS_INFOF_ALPN_OFFER_1STR, ALPN_HTTP_1_1);
-
- if(gnutls_alpn_set_protocols(session, protocols, cur, 0)) {
- failf(data, "failed setting ALPN");
- return CURLE_SSL_CONNECT_ERROR;
- }
- }
-
- if(SSL_SET_OPTION(primary.clientcert)) {
- if(SSL_SET_OPTION(key_passwd)) {
+ if(config->clientcert) {
+ if(ssl_config->key_passwd) {
const unsigned int supported_key_encryption_algorithms =
GNUTLS_PKCS_USE_PKCS12_3DES | GNUTLS_PKCS_USE_PKCS12_ARCFOUR |
GNUTLS_PKCS_USE_PKCS12_RC2_40 | GNUTLS_PKCS_USE_PBES2_3DES |
GNUTLS_PKCS_USE_PBES2_AES_128 | GNUTLS_PKCS_USE_PBES2_AES_192 |
GNUTLS_PKCS_USE_PBES2_AES_256;
rc = gnutls_certificate_set_x509_key_file2(
- backend->cred,
- SSL_SET_OPTION(primary.clientcert),
- SSL_SET_OPTION(key) ?
- SSL_SET_OPTION(key) : SSL_SET_OPTION(primary.clientcert),
- do_file_type(SSL_SET_OPTION(cert_type)),
- SSL_SET_OPTION(key_passwd),
+ gtls->cred,
+ config->clientcert,
+ ssl_config->key ? ssl_config->key : config->clientcert,
+ do_file_type(ssl_config->cert_type),
+ ssl_config->key_passwd,
supported_key_encryption_algorithms);
if(rc != GNUTLS_E_SUCCESS) {
failf(data,
@@ -683,11 +635,10 @@ gtls_connect_step1(struct Curl_easy *data,
}
else {
if(gnutls_certificate_set_x509_key_file(
- backend->cred,
- SSL_SET_OPTION(primary.clientcert),
- SSL_SET_OPTION(key) ?
- SSL_SET_OPTION(key) : SSL_SET_OPTION(primary.clientcert),
- do_file_type(SSL_SET_OPTION(cert_type)) ) !=
+ gtls->cred,
+ config->clientcert,
+ ssl_config->key ? ssl_config->key : config->clientcert,
+ do_file_type(ssl_config->cert_type) ) !=
GNUTLS_E_SUCCESS) {
failf(data, "error reading X.509 key or certificate file");
return CURLE_SSL_CONNECT_ERROR;
@@ -697,9 +648,9 @@ gtls_connect_step1(struct Curl_easy *data,
#ifdef USE_GNUTLS_SRP
/* put the credentials to the current session */
- if(SSL_SET_OPTION(primary.authtype) == CURL_TLSAUTH_SRP) {
- rc = gnutls_credentials_set(session, GNUTLS_CRD_SRP,
- backend->srp_client_cred);
+ if(config->username) {
+ rc = gnutls_credentials_set(gtls->session, GNUTLS_CRD_SRP,
+ gtls->srp_client_cred);
if(rc != GNUTLS_E_SUCCESS) {
failf(data, "gnutls_credentials_set() failed: %s", gnutls_strerror(rc));
return CURLE_SSL_CONNECT_ERROR;
@@ -708,66 +659,91 @@ gtls_connect_step1(struct Curl_easy *data,
else
#endif
{
- rc = gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE,
- backend->cred);
+ rc = gnutls_credentials_set(gtls->session, GNUTLS_CRD_CERTIFICATE,
+ gtls->cred);
if(rc != GNUTLS_E_SUCCESS) {
failf(data, "gnutls_credentials_set() failed: %s", gnutls_strerror(rc));
return CURLE_SSL_CONNECT_ERROR;
}
}
-#ifndef CURL_DISABLE_PROXY
- if(conn->proxy_ssl[sockindex].use) {
- struct ssl_backend_data *proxy_backend;
- proxy_backend = conn->proxy_ssl[sockindex].backend;
- DEBUGASSERT(proxy_backend);
- transport_ptr = proxy_backend->session;
- gnutls_transport_push = gtls_push_ssl;
- gnutls_transport_pull = gtls_pull_ssl;
- }
- else
-#endif
- {
- /* file descriptor for the socket */
- transport_ptr = &conn->sock[sockindex];
- gnutls_transport_push = gtls_push;
- gnutls_transport_pull = gtls_pull;
+ if(config->verifystatus) {
+ rc = gnutls_ocsp_status_request_enable_client(gtls->session,
+ NULL, 0, NULL);
+ if(rc != GNUTLS_E_SUCCESS) {
+ failf(data, "gnutls_ocsp_status_request_enable_client() failed: %d", rc);
+ return CURLE_SSL_CONNECT_ERROR;
+ }
}
- /* set the connection handle */
- gnutls_transport_set_ptr(session, transport_ptr);
+ return CURLE_OK;
+}
+
+static CURLcode
+gtls_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct gtls_ssl_backend_data *backend =
+ (struct gtls_ssl_backend_data *)connssl->backend;
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
+ struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data);
+ long * const pverifyresult = &ssl_config->certverifyresult;
+ CURLcode result;
- /* register callback functions to send and receive data. */
- gnutls_transport_set_push_function(session, gnutls_transport_push);
- gnutls_transport_set_pull_function(session, gnutls_transport_pull);
+ DEBUGASSERT(backend);
- if(SSL_CONN_CONFIG(verifystatus)) {
- rc = gnutls_ocsp_status_request_enable_client(session, NULL, 0, NULL);
- if(rc != GNUTLS_E_SUCCESS) {
- failf(data, "gnutls_ocsp_status_request_enable_client() failed: %d", rc);
+ if(connssl->state == ssl_connection_complete)
+ /* to make us tolerant against being called more than once for the
+ same connection */
+ return CURLE_OK;
+
+ result = gtls_client_init(data, conn_config, ssl_config,
+ &connssl->peer,
+ &backend->gtls, pverifyresult);
+ if(result)
+ return result;
+
+ if(connssl->alpn) {
+ struct alpn_proto_buf proto;
+ gnutls_datum_t alpn[ALPN_ENTRIES_MAX];
+ size_t i;
+
+ for(i = 0; i < connssl->alpn->count; ++i) {
+ alpn[i].data = (unsigned char *)connssl->alpn->entries[i];
+ alpn[i].size = (unsigned)strlen(connssl->alpn->entries[i]);
+ }
+ if(gnutls_alpn_set_protocols(backend->gtls.session, alpn,
+ (unsigned)connssl->alpn->count, 0)) {
+ failf(data, "failed setting ALPN");
return CURLE_SSL_CONNECT_ERROR;
}
+ Curl_alpn_to_proto_str(&proto, connssl->alpn);
+ infof(data, VTLS_INFOF_ALPN_OFFER_1STR, proto.data);
}
/* This might be a reconnect, so we check for a session ID in the cache
to speed up things */
- if(SSL_SET_OPTION(primary.sessionid)) {
+ if(conn_config->sessionid) {
void *ssl_sessionid;
size_t ssl_idsize;
Curl_ssl_sessionid_lock(data);
- if(!Curl_ssl_getsessionid(data, conn,
- SSL_IS_PROXY() ? TRUE : FALSE,
- &ssl_sessionid, &ssl_idsize, sockindex)) {
+ if(!Curl_ssl_getsessionid(cf, data, &ssl_sessionid, &ssl_idsize)) {
/* we got a session id, use it! */
- gnutls_session_set_data(session, ssl_sessionid, ssl_idsize);
+ gnutls_session_set_data(backend->gtls.session,
+ ssl_sessionid, ssl_idsize);
/* Informational message */
- infof(data, "SSL re-using session ID");
+ infof(data, "SSL reusing session ID");
}
Curl_ssl_sessionid_unlock(data);
}
+ /* register callback functions and handle to send and receive data. */
+ gnutls_transport_set_ptr(backend->gtls.session, cf);
+ gnutls_transport_set_push_function(backend->gtls.session, gtls_push);
+ gnutls_transport_set_pull_function(backend->gtls.session, gtls_pull);
+
return CURLE_OK;
}
@@ -829,14 +805,13 @@ static CURLcode pkp_pin_peer_pubkey(struct Curl_easy *data,
return result;
}
-static Curl_recv gtls_recv;
-static Curl_send gtls_send;
-
CURLcode
Curl_gtls_verifyserver(struct Curl_easy *data,
- struct connectdata *conn,
gnutls_session_t session,
- int sockindex)
+ struct ssl_primary_config *config,
+ struct ssl_config_data *ssl_config,
+ struct ssl_peer *peer,
+ const char *pinned_key)
{
unsigned int cert_list_size;
const gnutls_datum_t *chainp;
@@ -849,15 +824,13 @@ Curl_gtls_verifyserver(struct Curl_easy *data,
time_t certclock;
const char *ptr;
int rc;
- gnutls_datum_t proto;
CURLcode result = CURLE_OK;
#ifndef CURL_DISABLE_VERBOSE_STRINGS
unsigned int algo;
unsigned int bits;
gnutls_protocol_t version = gnutls_protocol_get_version(session);
#endif
- const char * const hostname = SSL_HOST_NAME();
- long * const certverifyresult = &SSL_SET_OPTION_LVALUE(certverifyresult);
+ long * const certverifyresult = &ssl_config->certverifyresult;
/* the name of the cipher suite used, e.g. ECDHE_RSA_AES_256_GCM_SHA384. */
ptr = gnutls_cipher_suite_get_name(gnutls_kx_get(session),
@@ -875,14 +848,12 @@ Curl_gtls_verifyserver(struct Curl_easy *data,
chainp = gnutls_certificate_get_peers(session, &cert_list_size);
if(!chainp) {
- if(SSL_CONN_CONFIG(verifypeer) ||
- SSL_CONN_CONFIG(verifyhost) ||
- SSL_CONN_CONFIG(issuercert)) {
+ if(config->verifypeer ||
+ config->verifyhost ||
+ config->issuercert) {
#ifdef USE_GNUTLS_SRP
- if(SSL_SET_OPTION(primary.authtype) == CURL_TLSAUTH_SRP
- && SSL_SET_OPTION(primary.username)
- && !SSL_CONN_CONFIG(verifypeer)
- && gnutls_cipher_get(session)) {
+ if(ssl_config->primary.username && !config->verifypeer &&
+ gnutls_cipher_get(session)) {
/* no peer cert, but auth is ok if we have SRP user and cipher and no
peer verify */
}
@@ -915,7 +886,7 @@ Curl_gtls_verifyserver(struct Curl_easy *data,
}
}
- if(SSL_CONN_CONFIG(verifypeer)) {
+ if(config->verifypeer) {
/* This function will try to verify the peer's certificate and return its
status (trusted, invalid etc.). The value of status should be one or
more of the gnutls_certificate_status_t enumerated elements bitwise
@@ -934,12 +905,12 @@ Curl_gtls_verifyserver(struct Curl_easy *data,
/* verify_status is a bitmask of gnutls_certificate_status bits */
if(verify_status & GNUTLS_CERT_INVALID) {
- if(SSL_CONN_CONFIG(verifypeer)) {
+ if(config->verifypeer) {
failf(data, "server certificate verification failed. CAfile: %s "
- "CRLfile: %s", SSL_CONN_CONFIG(CAfile) ? SSL_CONN_CONFIG(CAfile):
+ "CRLfile: %s", config->CAfile ? config->CAfile:
"none",
- SSL_SET_OPTION(primary.CRLfile) ?
- SSL_SET_OPTION(primary.CRLfile) : "none");
+ ssl_config->primary.CRLfile ?
+ ssl_config->primary.CRLfile : "none");
return CURLE_PEER_FAILED_VERIFICATION;
}
else
@@ -951,7 +922,7 @@ Curl_gtls_verifyserver(struct Curl_easy *data,
else
infof(data, " server certificate verification SKIPPED");
- if(SSL_CONN_CONFIG(verifystatus)) {
+ if(config->verifystatus) {
if(gnutls_ocsp_status_request_is_checked(session, 0) == 0) {
gnutls_datum_t status_request;
gnutls_ocsp_resp_t ocsp_resp;
@@ -1062,21 +1033,21 @@ Curl_gtls_verifyserver(struct Curl_easy *data,
gnutls_x509_crt_t format */
gnutls_x509_crt_import(x509_cert, chainp, GNUTLS_X509_FMT_DER);
- if(SSL_CONN_CONFIG(issuercert)) {
+ if(config->issuercert) {
gnutls_x509_crt_init(&x509_issuer);
- issuerp = load_file(SSL_CONN_CONFIG(issuercert));
+ issuerp = load_file(config->issuercert);
gnutls_x509_crt_import(x509_issuer, &issuerp, GNUTLS_X509_FMT_PEM);
rc = gnutls_x509_crt_check_issuer(x509_cert, x509_issuer);
gnutls_x509_crt_deinit(x509_issuer);
unload_file(issuerp);
if(rc <= 0) {
failf(data, "server certificate issuer check failed (IssuerCert: %s)",
- SSL_CONN_CONFIG(issuercert)?SSL_CONN_CONFIG(issuercert):"none");
+ config->issuercert?config->issuercert:"none");
gnutls_x509_crt_deinit(x509_cert);
return CURLE_SSL_ISSUER_ERROR;
}
infof(data, " server certificate issuer check OK (Issuer Cert: %s)",
- SSL_CONN_CONFIG(issuercert)?SSL_CONN_CONFIG(issuercert):"none");
+ config->issuercert?config->issuercert:"none");
}
size = sizeof(certname);
@@ -1095,7 +1066,7 @@ Curl_gtls_verifyserver(struct Curl_easy *data,
in RFC2818 (HTTPS), which takes into account wildcards, and the subject
alternative name PKIX extension. Returns non zero on success, and zero on
failure. */
- rc = gnutls_x509_crt_check_hostname(x509_cert, hostname);
+ rc = gnutls_x509_crt_check_hostname(x509_cert, peer->hostname);
#if GNUTLS_VERSION_NUMBER < 0x030306
/* Before 3.3.6, gnutls_x509_crt_check_hostname() didn't check IP
addresses. */
@@ -1108,10 +1079,10 @@ Curl_gtls_verifyserver(struct Curl_easy *data,
unsigned char addrbuf[sizeof(struct use_addr)];
size_t addrlen = 0;
- if(Curl_inet_pton(AF_INET, hostname, addrbuf) > 0)
+ if(Curl_inet_pton(AF_INET, peer->hostname, addrbuf) > 0)
addrlen = 4;
#ifdef ENABLE_IPV6
- else if(Curl_inet_pton(AF_INET6, hostname, addrbuf) > 0)
+ else if(Curl_inet_pton(AF_INET6, peer->hostname, addrbuf) > 0)
addrlen = 16;
#endif
@@ -1139,15 +1110,15 @@ Curl_gtls_verifyserver(struct Curl_easy *data,
}
#endif
if(!rc) {
- if(SSL_CONN_CONFIG(verifyhost)) {
+ if(config->verifyhost) {
failf(data, "SSL: certificate subject name (%s) does not match "
- "target host name '%s'", certname, SSL_HOST_DISPNAME());
+ "target host name '%s'", certname, peer->dispname);
gnutls_x509_crt_deinit(x509_cert);
return CURLE_PEER_FAILED_VERIFICATION;
}
else
infof(data, " common name: %s (does not match '%s')",
- certname, SSL_HOST_DISPNAME());
+ certname, peer->dispname);
}
else
infof(data, " common name: %s (matched)", certname);
@@ -1156,7 +1127,7 @@ Curl_gtls_verifyserver(struct Curl_easy *data,
certclock = gnutls_x509_crt_get_expiration_time(x509_cert);
if(certclock == (time_t)-1) {
- if(SSL_CONN_CONFIG(verifypeer)) {
+ if(config->verifypeer) {
failf(data, "server cert expiration date verify failed");
*certverifyresult = GNUTLS_CERT_EXPIRED;
gnutls_x509_crt_deinit(x509_cert);
@@ -1167,7 +1138,7 @@ Curl_gtls_verifyserver(struct Curl_easy *data,
}
else {
if(certclock < time(NULL)) {
- if(SSL_CONN_CONFIG(verifypeer)) {
+ if(config->verifypeer) {
failf(data, "server certificate expiration date has passed.");
*certverifyresult = GNUTLS_CERT_EXPIRED;
gnutls_x509_crt_deinit(x509_cert);
@@ -1183,7 +1154,7 @@ Curl_gtls_verifyserver(struct Curl_easy *data,
certclock = gnutls_x509_crt_get_activation_time(x509_cert);
if(certclock == (time_t)-1) {
- if(SSL_CONN_CONFIG(verifypeer)) {
+ if(config->verifypeer) {
failf(data, "server cert activation date verify failed");
*certverifyresult = GNUTLS_CERT_NOT_ACTIVATED;
gnutls_x509_crt_deinit(x509_cert);
@@ -1194,7 +1165,7 @@ Curl_gtls_verifyserver(struct Curl_easy *data,
}
else {
if(certclock > time(NULL)) {
- if(SSL_CONN_CONFIG(verifypeer)) {
+ if(config->verifypeer) {
failf(data, "server certificate not activated yet.");
*certverifyresult = GNUTLS_CERT_NOT_ACTIVATED;
gnutls_x509_crt_deinit(x509_cert);
@@ -1207,9 +1178,8 @@ Curl_gtls_verifyserver(struct Curl_easy *data,
infof(data, " server certificate activation date OK");
}
- ptr = SSL_PINNED_PUB_KEY();
- if(ptr) {
- result = pkp_pin_peer_pubkey(data, x509_cert, ptr);
+ if(pinned_key) {
+ result = pkp_pin_peer_pubkey(data, x509_cert, pinned_key);
if(result != CURLE_OK) {
failf(data, "SSL: public key does not match pinned public key");
gnutls_x509_crt_deinit(x509_cert);
@@ -1265,35 +1235,38 @@ Curl_gtls_verifyserver(struct Curl_easy *data,
gnutls_x509_crt_deinit(x509_cert);
- if(conn->bits.tls_enable_alpn) {
+ return result;
+}
+
+static CURLcode gtls_verifyserver(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ gnutls_session_t session)
+{
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
+ struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data);
+ const char *pinned_key = Curl_ssl_cf_is_proxy(cf)?
+ data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY]:
+ data->set.str[STRING_SSL_PINNEDPUBLICKEY];
+ CURLcode result;
+
+ result = Curl_gtls_verifyserver(data, session, conn_config, ssl_config,
+ &connssl->peer, pinned_key);
+ if(result)
+ goto out;
+
+ if(connssl->alpn) {
+ gnutls_datum_t proto;
+ int rc;
+
rc = gnutls_alpn_get_selected_protocol(session, &proto);
- if(rc == 0) {
- infof(data, VTLS_INFOF_ALPN_ACCEPTED_LEN_1STR, proto.size,
- proto.data);
-
-#ifdef USE_HTTP2
- if(proto.size == ALPN_H2_LENGTH &&
- !memcmp(ALPN_H2, proto.data,
- ALPN_H2_LENGTH)) {
- conn->alpn = CURL_HTTP_VERSION_2;
- }
- else
-#endif
- if(proto.size == ALPN_HTTP_1_1_LENGTH &&
- !memcmp(ALPN_HTTP_1_1, proto.data, ALPN_HTTP_1_1_LENGTH)) {
- conn->alpn = CURL_HTTP_VERSION_1_1;
- }
- }
+ if(rc == 0)
+ Curl_alpn_set_negotiated(cf, data, proto.data, proto.size);
else
- infof(data, VTLS_INFOF_NO_ALPN);
-
- Curl_multiuse_state(data, conn->alpn == CURL_HTTP_VERSION_2 ?
- BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
+ Curl_alpn_set_negotiated(cf, data, NULL, 0);
}
- conn->ssl[sockindex].state = ssl_connection_complete;
-
- if(SSL_SET_OPTION(primary.sessionid)) {
+ if(ssl_config->primary.sessionid) {
/* we always unconditionally get the session id here, as even if we
already got it from the cache and asked to use it in the connection, it
might've been rejected and then a new one is in use now and we need to
@@ -1314,9 +1287,7 @@ Curl_gtls_verifyserver(struct Curl_easy *data,
gnutls_session_get_data(session, connect_sessionid, &connect_idsize);
Curl_ssl_sessionid_lock(data);
- incache = !(Curl_ssl_getsessionid(data, conn,
- SSL_IS_PROXY() ? TRUE : FALSE,
- &ssl_sessionid, NULL, sockindex));
+ incache = !(Curl_ssl_getsessionid(cf, data, &ssl_sessionid, NULL));
if(incache) {
/* there was one before in the cache, so instead of risking that the
previous one was rejected, we just kill that and store the new */
@@ -1324,10 +1295,8 @@ Curl_gtls_verifyserver(struct Curl_easy *data,
}
/* store this session id */
- result = Curl_ssl_addsessionid(data, conn,
- SSL_IS_PROXY() ? TRUE : FALSE,
- connect_sessionid, connect_idsize,
- sockindex, &added);
+ result = Curl_ssl_addsessionid(cf, data, connect_sessionid,
+ connect_idsize, &added);
Curl_ssl_sessionid_unlock(data);
if(!added)
free(connect_sessionid);
@@ -1339,10 +1308,10 @@ Curl_gtls_verifyserver(struct Curl_easy *data,
result = CURLE_OUT_OF_MEMORY;
}
+out:
return result;
}
-
/*
* This function is called after the TCP connect has completed. Setup the TLS
* layer and do all necessary magic.
@@ -1353,59 +1322,66 @@ Curl_gtls_verifyserver(struct Curl_easy *data,
'ssl_connect_2_writing' (waiting to be able to write).
*/
static CURLcode
-gtls_connect_common(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex,
+gtls_connect_common(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
bool nonblocking,
bool *done)
{
+ struct ssl_connect_data *connssl = cf->ctx;
int rc;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
+ CURLcode result = CURLE_OK;
/* Initiate the connection, if not already done */
if(ssl_connect_1 == connssl->connecting_state) {
- rc = gtls_connect_step1(data, conn, sockindex);
- if(rc)
- return rc;
+ rc = gtls_connect_step1(cf, data);
+ if(rc) {
+ result = rc;
+ goto out;
+ }
}
- rc = handshake(data, conn, sockindex, TRUE, nonblocking);
- if(rc)
+ rc = handshake(cf, data, TRUE, nonblocking);
+ if(rc) {
/* handshake() sets its own error message with failf() */
- return rc;
+ result = rc;
+ goto out;
+ }
/* Finish connecting once the handshake is done */
if(ssl_connect_1 == connssl->connecting_state) {
- struct ssl_backend_data *backend = connssl->backend;
+ struct gtls_ssl_backend_data *backend =
+ (struct gtls_ssl_backend_data *)connssl->backend;
gnutls_session_t session;
DEBUGASSERT(backend);
- session = backend->session;
- rc = Curl_gtls_verifyserver(data, conn, session, sockindex);
- if(rc)
- return rc;
- conn->recv[sockindex] = gtls_recv;
- conn->send[sockindex] = gtls_send;
+ session = backend->gtls.session;
+ rc = gtls_verifyserver(cf, data, session);
+ if(rc) {
+ result = rc;
+ goto out;
+ }
+ connssl->state = ssl_connection_complete;
}
+out:
*done = ssl_connect_1 == connssl->connecting_state;
- return CURLE_OK;
+ return result;
}
-static CURLcode gtls_connect_nonblocking(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex, bool *done)
+static CURLcode gtls_connect_nonblocking(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool *done)
{
- return gtls_connect_common(data, conn, sockindex, TRUE, done);
+ return gtls_connect_common(cf, data, TRUE, done);
}
-static CURLcode gtls_connect(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
+static CURLcode gtls_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
CURLcode result;
bool done = FALSE;
- result = gtls_connect_common(data, conn, sockindex, FALSE, &done);
+ result = gtls_connect_common(cf, data, FALSE, &done);
if(result)
return result;
@@ -1414,44 +1390,35 @@ static CURLcode gtls_connect(struct Curl_easy *data, struct connectdata *conn,
return CURLE_OK;
}
-static bool gtls_data_pending(const struct connectdata *conn,
- int connindex)
+static bool gtls_data_pending(struct Curl_cfilter *cf,
+ const struct Curl_easy *data)
{
- const struct ssl_connect_data *connssl = &conn->ssl[connindex];
- bool res = FALSE;
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *ctx = cf->ctx;
+ struct gtls_ssl_backend_data *backend;
- DEBUGASSERT(backend);
-
- if(backend->session &&
- 0 != gnutls_record_check_pending(backend->session))
- res = TRUE;
-
-#ifndef CURL_DISABLE_PROXY
- connssl = &conn->proxy_ssl[connindex];
- backend = connssl->backend;
- DEBUGASSERT(backend);
- if(backend->session &&
- 0 != gnutls_record_check_pending(backend->session))
- res = TRUE;
-#endif
-
- return res;
+ (void)data;
+ DEBUGASSERT(ctx && ctx->backend);
+ backend = (struct gtls_ssl_backend_data *)ctx->backend;
+ if(backend->gtls.session &&
+ 0 != gnutls_record_check_pending(backend->gtls.session))
+ return TRUE;
+ return FALSE;
}
-static ssize_t gtls_send(struct Curl_easy *data,
- int sockindex,
+static ssize_t gtls_send(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
const void *mem,
size_t len,
CURLcode *curlcode)
{
- struct connectdata *conn = data->conn;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct gtls_ssl_backend_data *backend =
+ (struct gtls_ssl_backend_data *)connssl->backend;
ssize_t rc;
+ (void)data;
DEBUGASSERT(backend);
- rc = gnutls_record_send(backend->session, mem, len);
+ rc = gnutls_record_send(backend->gtls.session, mem, len);
if(rc < 0) {
*curlcode = (rc == GNUTLS_E_AGAIN)
@@ -1464,51 +1431,47 @@ static ssize_t gtls_send(struct Curl_easy *data,
return rc;
}
-static void close_one(struct ssl_connect_data *connssl)
+static void gtls_close(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct gtls_ssl_backend_data *backend =
+ (struct gtls_ssl_backend_data *)connssl->backend;
+
+ (void) data;
DEBUGASSERT(backend);
- if(backend->session) {
+ if(backend->gtls.session) {
char buf[32];
/* Maybe the server has already sent a close notify alert.
Read it to avoid an RST on the TCP connection. */
- (void)gnutls_record_recv(backend->session, buf, sizeof(buf));
- gnutls_bye(backend->session, GNUTLS_SHUT_WR);
- gnutls_deinit(backend->session);
- backend->session = NULL;
+ (void)gnutls_record_recv(backend->gtls.session, buf, sizeof(buf));
+ gnutls_bye(backend->gtls.session, GNUTLS_SHUT_WR);
+ gnutls_deinit(backend->gtls.session);
+ backend->gtls.session = NULL;
}
- if(backend->cred) {
- gnutls_certificate_free_credentials(backend->cred);
- backend->cred = NULL;
+ if(backend->gtls.cred) {
+ gnutls_certificate_free_credentials(backend->gtls.cred);
+ backend->gtls.cred = NULL;
}
#ifdef USE_GNUTLS_SRP
- if(backend->srp_client_cred) {
- gnutls_srp_free_client_credentials(backend->srp_client_cred);
- backend->srp_client_cred = NULL;
+ if(backend->gtls.srp_client_cred) {
+ gnutls_srp_free_client_credentials(backend->gtls.srp_client_cred);
+ backend->gtls.srp_client_cred = NULL;
}
#endif
}
-static void gtls_close(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
-{
- (void) data;
- close_one(&conn->ssl[sockindex]);
-#ifndef CURL_DISABLE_PROXY
- close_one(&conn->proxy_ssl[sockindex]);
-#endif
-}
-
/*
* This function is called to shut down the SSL layer but keep the
* socket open (CCC - Clear Command Channel)
*/
-static int gtls_shutdown(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
+static int gtls_shutdown(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct gtls_ssl_backend_data *backend =
+ (struct gtls_ssl_backend_data *)connssl->backend;
int retval = 0;
DEBUGASSERT(backend);
@@ -1520,21 +1483,21 @@ static int gtls_shutdown(struct Curl_easy *data, struct connectdata *conn,
we do not send one. Let's hope other servers do the same... */
if(data->set.ftp_ccc == CURLFTPSSL_CCC_ACTIVE)
- gnutls_bye(backend->session, GNUTLS_SHUT_WR);
+ gnutls_bye(backend->gtls.session, GNUTLS_SHUT_WR);
#endif
- if(backend->session) {
+ if(backend->gtls.session) {
ssize_t result;
bool done = FALSE;
char buf[120];
while(!done) {
- int what = SOCKET_READABLE(conn->sock[sockindex],
+ int what = SOCKET_READABLE(Curl_conn_cf_get_socket(cf, data),
SSL_SHUTDOWN_TIMEOUT);
if(what > 0) {
/* Something to read, let's do it and hope that it is the close
notify alert from the server */
- result = gnutls_record_recv(backend->session,
+ result = gnutls_record_recv(backend->gtls.session,
buf, sizeof(buf));
switch(result) {
case 0:
@@ -1564,51 +1527,56 @@ static int gtls_shutdown(struct Curl_easy *data, struct connectdata *conn,
done = TRUE;
}
}
- gnutls_deinit(backend->session);
+ gnutls_deinit(backend->gtls.session);
}
- gnutls_certificate_free_credentials(backend->cred);
+ gnutls_certificate_free_credentials(backend->gtls.cred);
#ifdef USE_GNUTLS_SRP
- if(SSL_SET_OPTION(primary.authtype) == CURL_TLSAUTH_SRP
- && SSL_SET_OPTION(primary.username) != NULL)
- gnutls_srp_free_client_credentials(backend->srp_client_cred);
+ {
+ struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data);
+ if(ssl_config->primary.username)
+ gnutls_srp_free_client_credentials(backend->gtls.srp_client_cred);
+ }
#endif
- backend->cred = NULL;
- backend->session = NULL;
+ backend->gtls.cred = NULL;
+ backend->gtls.session = NULL;
return retval;
}
-static ssize_t gtls_recv(struct Curl_easy *data, /* connection data */
- int num, /* socketindex */
- char *buf, /* store read data here */
- size_t buffersize, /* max amount to read */
+static ssize_t gtls_recv(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ char *buf,
+ size_t buffersize,
CURLcode *curlcode)
{
- struct connectdata *conn = data->conn;
- struct ssl_connect_data *connssl = &conn->ssl[num];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct gtls_ssl_backend_data *backend =
+ (struct gtls_ssl_backend_data *)connssl->backend;
ssize_t ret;
+ (void)data;
DEBUGASSERT(backend);
- ret = gnutls_record_recv(backend->session, buf, buffersize);
+ ret = gnutls_record_recv(backend->gtls.session, buf, buffersize);
if((ret == GNUTLS_E_AGAIN) || (ret == GNUTLS_E_INTERRUPTED)) {
*curlcode = CURLE_AGAIN;
- return -1;
+ ret = -1;
+ goto out;
}
if(ret == GNUTLS_E_REHANDSHAKE) {
/* BLOCKING call, this is bad but a work-around for now. Fixing this "the
proper way" takes a whole lot of work. */
- CURLcode result = handshake(data, conn, num, FALSE, FALSE);
+ CURLcode result = handshake(cf, data, FALSE, FALSE);
if(result)
/* handshake() writes error message on its own */
*curlcode = result;
else
*curlcode = CURLE_AGAIN; /* then return as if this was a wouldblock */
- return -1;
+ ret = -1;
+ goto out;
}
if(ret < 0) {
@@ -1616,9 +1584,11 @@ static ssize_t gtls_recv(struct Curl_easy *data, /* connection data */
(int)ret, gnutls_strerror((int)ret));
*curlcode = CURLE_RECV_ERROR;
- return -1;
+ ret = -1;
+ goto out;
}
+out:
return ret;
}
@@ -1662,10 +1632,11 @@ static bool gtls_cert_status_request(void)
static void *gtls_get_internals(struct ssl_connect_data *connssl,
CURLINFO info UNUSED_PARAM)
{
- struct ssl_backend_data *backend = connssl->backend;
+ struct gtls_ssl_backend_data *backend =
+ (struct gtls_ssl_backend_data *)connssl->backend;
(void)info;
DEBUGASSERT(backend);
- return backend->session;
+ return backend->gtls.session;
}
const struct Curl_ssl Curl_ssl_gnutls = {
@@ -1676,7 +1647,7 @@ const struct Curl_ssl Curl_ssl_gnutls = {
SSLSUPP_PINNEDPUBKEY |
SSLSUPP_HTTPS_PROXY,
- sizeof(struct ssl_backend_data),
+ sizeof(struct gtls_ssl_backend_data),
gtls_init, /* init */
gtls_cleanup, /* cleanup */
@@ -1688,7 +1659,7 @@ const struct Curl_ssl Curl_ssl_gnutls = {
gtls_cert_status_request, /* cert_status_request */
gtls_connect, /* connect */
gtls_connect_nonblocking, /* connect_nonblocking */
- Curl_ssl_getsock, /* getsock */
+ Curl_ssl_adjust_pollset, /* adjust_pollset */
gtls_get_internals, /* get_internals */
gtls_close, /* close_one */
Curl_none_close_all, /* close_all */
@@ -1699,7 +1670,10 @@ const struct Curl_ssl Curl_ssl_gnutls = {
Curl_none_false_start, /* false_start */
gtls_sha256sum, /* sha256sum */
NULL, /* associate_connection */
- NULL /* disassociate_connection */
+ NULL, /* disassociate_connection */
+ NULL, /* free_multi_ssl_backend_data */
+ gtls_recv, /* recv decrypted data */
+ gtls_send, /* send data to encrypt */
};
#endif /* USE_GNUTLS */
diff --git a/lib/vtls/gtls.h b/lib/vtls/gtls.h
index abade73f8..1a81c01e9 100644
--- a/lib/vtls/gtls.h
+++ b/lib/vtls/gtls.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -25,15 +25,50 @@
***************************************************************************/
#include "curl_setup.h"
+#include <curl/curl.h>
#ifdef USE_GNUTLS
-#include "urldata.h"
#include <gnutls/gnutls.h>
+
+#ifdef HAVE_GNUTLS_SRP
+/* the function exists */
+#ifdef USE_TLS_SRP
+/* the functionality is not disabled */
+#define USE_GNUTLS_SRP
+#endif
+#endif
+
+struct Curl_easy;
+struct Curl_cfilter;
+struct ssl_primary_config;
+struct ssl_config_data;
+struct ssl_peer;
+
+struct gtls_instance {
+ gnutls_session_t session;
+ gnutls_certificate_credentials_t cred;
+#ifdef USE_GNUTLS_SRP
+ gnutls_srp_client_credentials_t srp_client_cred;
+#endif
+};
+
CURLcode
-Curl_gtls_verifyserver(struct Curl_easy *data, struct connectdata *conn,
+gtls_client_init(struct Curl_easy *data,
+ struct ssl_primary_config *config,
+ struct ssl_config_data *ssl_config,
+ struct ssl_peer *peer,
+ struct gtls_instance *gtls,
+ long *pverifyresult);
+
+CURLcode
+Curl_gtls_verifyserver(struct Curl_easy *data,
gnutls_session_t session,
- int sockindex);
+ struct ssl_primary_config *config,
+ struct ssl_config_data *ssl_config,
+ struct ssl_peer *peer,
+ const char *pinned_key);
+
extern const struct Curl_ssl Curl_ssl_gnutls;
#endif /* USE_GNUTLS */
diff --git a/lib/vtls/hostcheck.c b/lib/vtls/hostcheck.c
index 2a648f20a..2726dca7f 100644
--- a/lib/vtls/hostcheck.c
+++ b/lib/vtls/hostcheck.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,8 +24,7 @@
#include "curl_setup.h"
-#if defined(USE_OPENSSL) \
- || defined(USE_GSKIT) \
+#if defined(USE_OPENSSL) \
|| defined(USE_SCHANNEL)
/* these backends use functions from this file */
@@ -71,7 +70,12 @@ static bool pmatch(const char *hostname, size_t hostlen,
* apparent distinction between a name and an IP. We need to detect the use of
* an IP address and not wildcard match on such names.
*
+ * Only match on "*" being used for the leftmost label, not "a*", "a*b" nor
+ * "*b".
+ *
* Return TRUE on a match. FALSE if not.
+ *
+ * @unittest: 1397
*/
static bool hostmatch(const char *hostname,
@@ -79,53 +83,42 @@ static bool hostmatch(const char *hostname,
const char *pattern,
size_t patternlen)
{
- const char *pattern_label_end, *wildcard, *hostname_label_end;
- size_t prefixlen, suffixlen;
+ const char *pattern_label_end;
- /* normalize pattern and hostname by stripping off trailing dots */
+ DEBUGASSERT(pattern);
DEBUGASSERT(patternlen);
+ DEBUGASSERT(hostname);
+ DEBUGASSERT(hostlen);
+
+ /* normalize pattern and hostname by stripping off trailing dots */
if(hostname[hostlen-1]=='.')
hostlen--;
if(pattern[patternlen-1]=='.')
patternlen--;
- wildcard = memchr(pattern, '*', patternlen);
- if(!wildcard)
+ if(strncmp(pattern, "*.", 2))
return pmatch(hostname, hostlen, pattern, patternlen);
/* detect IP address as hostname and fail the match if so */
- if(Curl_host_is_ipnum(hostname))
+ else if(Curl_host_is_ipnum(hostname))
return FALSE;
/* We require at least 2 dots in the pattern to avoid too wide wildcard
match. */
pattern_label_end = memchr(pattern, '.', patternlen);
if(!pattern_label_end ||
- (memrchr(pattern, '.', patternlen) == pattern_label_end) ||
- strncasecompare(pattern, "xn--", 4))
+ (memrchr(pattern, '.', patternlen) == pattern_label_end))
return pmatch(hostname, hostlen, pattern, patternlen);
-
- hostname_label_end = memchr(hostname, '.', hostlen);
- if(!hostname_label_end)
- return FALSE;
else {
- size_t skiphost = hostname_label_end - hostname;
- size_t skiplen = pattern_label_end - pattern;
- if(!pmatch(hostname_label_end, hostlen - skiphost,
- pattern_label_end, patternlen - skiplen))
- return FALSE;
+ const char *hostname_label_end = memchr(hostname, '.', hostlen);
+ if(hostname_label_end) {
+ size_t skiphost = hostname_label_end - hostname;
+ size_t skiplen = pattern_label_end - pattern;
+ return pmatch(hostname_label_end, hostlen - skiphost,
+ pattern_label_end, patternlen - skiplen);
+ }
}
- /* The wildcard must match at least one character, so the left-most
- label of the hostname is at least as large as the left-most label
- of the pattern. */
- if(hostname_label_end - hostname < pattern_label_end - pattern)
- return FALSE;
-
- prefixlen = wildcard - pattern;
- suffixlen = pattern_label_end - (wildcard + 1);
- return strncasecompare(pattern, hostname, prefixlen) &&
- strncasecompare(wildcard + 1, hostname_label_end - suffixlen,
- suffixlen) ? TRUE : FALSE;
+ return FALSE;
}
/*
@@ -139,4 +132,4 @@ bool Curl_cert_hostcheck(const char *match, size_t matchlen,
return FALSE;
}
-#endif /* OPENSSL, GSKIT or schannel+wince */
+#endif /* OPENSSL or SCHANNEL */
diff --git a/lib/vtls/hostcheck.h b/lib/vtls/hostcheck.h
index d3c4eab56..22a1ac2e5 100644
--- a/lib/vtls/hostcheck.h
+++ b/lib/vtls/hostcheck.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/vtls/keylog.c b/lib/vtls/keylog.c
index 1952a690c..fbcb25cfb 100644
--- a/lib/vtls/keylog.c
+++ b/lib/vtls/keylog.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,6 +23,11 @@
***************************************************************************/
#include "curl_setup.h"
+#if defined(USE_OPENSSL) || \
+ defined(USE_WOLFSSL) || \
+ (defined(USE_NGTCP2) && defined(USE_NGHTTP3)) || \
+ defined(USE_QUICHE)
+
#include "keylog.h"
#include <curl/curl.h>
@@ -55,7 +60,7 @@ Curl_tls_keylog_open(void)
if(keylog_file_name) {
keylog_file_fp = fopen(keylog_file_name, FOPEN_APPENDTEXT);
if(keylog_file_fp) {
-#ifdef WIN32
+#ifdef _WIN32
if(setvbuf(keylog_file_fp, NULL, _IONBF, 0))
#else
if(setvbuf(keylog_file_fp, NULL, _IOLBF, 4096))
@@ -157,3 +162,5 @@ Curl_tls_keylog_write(const char *label,
fputs(line, keylog_file_fp);
return true;
}
+
+#endif /* TLS or QUIC backend */
diff --git a/lib/vtls/keylog.h b/lib/vtls/keylog.h
index 5d3c675b3..eff5bf38f 100644
--- a/lib/vtls/keylog.h
+++ b/lib/vtls/keylog.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/vtls/mbedtls.c b/lib/vtls/mbedtls.c
index fbde8976e..38f7de7f7 100644
--- a/lib/vtls/mbedtls.c
+++ b/lib/vtls/mbedtls.c
@@ -5,8 +5,8 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2012 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- * Copyright (C) 2010 - 2011, Hoi-Ho Chan, <hoiho.chan@gmail.com>
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Hoi-Ho Chan, <hoiho.chan@gmail.com>
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -61,6 +61,7 @@
#include "inet_pton.h"
#include "mbedtls.h"
#include "vtls.h"
+#include "vtls_int.h"
#include "parsedate.h"
#include "connect.h" /* for the connect timeout */
#include "select.h"
@@ -80,7 +81,7 @@
# endif
#endif
-struct ssl_backend_data {
+struct mbed_ssl_backend_data {
mbedtls_ctr_drbg_context ctr_drbg;
mbedtls_entropy_context entropy;
mbedtls_ssl_context ssl;
@@ -155,6 +156,45 @@ static void mbed_debug(void *context, int level, const char *f_name,
#else
#endif
+static int mbedtls_bio_cf_write(void *bio,
+ const unsigned char *buf, size_t blen)
+{
+ struct Curl_cfilter *cf = bio;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+ ssize_t nwritten;
+ CURLcode result;
+
+ DEBUGASSERT(data);
+ nwritten = Curl_conn_cf_send(cf->next, data, (char *)buf, blen, &result);
+ CURL_TRC_CF(data, cf, "mbedtls_bio_cf_out_write(len=%zu) -> %zd, err=%d",
+ blen, nwritten, result);
+ if(nwritten < 0 && CURLE_AGAIN == result) {
+ nwritten = MBEDTLS_ERR_SSL_WANT_WRITE;
+ }
+ return (int)nwritten;
+}
+
+static int mbedtls_bio_cf_read(void *bio, unsigned char *buf, size_t blen)
+{
+ struct Curl_cfilter *cf = bio;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+ ssize_t nread;
+ CURLcode result;
+
+ DEBUGASSERT(data);
+ /* OpenSSL catches this case, so should we. */
+ if(!buf)
+ return 0;
+
+ nread = Curl_conn_cf_recv(cf->next, data, (char *)buf, blen, &result);
+ CURL_TRC_CF(data, cf, "mbedtls_bio_cf_in_read(len=%zu) -> %zd, err=%d",
+ blen, nread, result);
+ if(nread < 0 && CURLE_AGAIN == result) {
+ nread = MBEDTLS_ERR_SSL_WANT_READ;
+ }
+ return (int)nread;
+}
+
/*
* profile
*/
@@ -181,9 +221,6 @@ static const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_fr =
#define PUB_DER_MAX_BYTES (RSA_PUB_DER_MAX_BYTES > ECP_PUB_DER_MAX_BYTES ? \
RSA_PUB_DER_MAX_BYTES : ECP_PUB_DER_MAX_BYTES)
-static Curl_recv mbed_recv;
-static Curl_send mbed_send;
-
static CURLcode mbedtls_version_from_curl(int *mbedver, long version)
{
#if MBEDTLS_VERSION_NUMBER >= 0x03000000
@@ -216,11 +253,12 @@ static CURLcode mbedtls_version_from_curl(int *mbedver, long version)
}
static CURLcode
-set_ssl_version_min_max(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
+set_ssl_version_min_max(struct Curl_cfilter *cf, struct Curl_easy *data)
{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct mbed_ssl_backend_data *backend =
+ (struct mbed_ssl_backend_data *)connssl->backend;
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
#if MBEDTLS_VERSION_NUMBER >= 0x03000000
int mbedtls_ver_min = MBEDTLS_SSL_MINOR_VERSION_3;
int mbedtls_ver_max = MBEDTLS_SSL_MINOR_VERSION_3;
@@ -228,8 +266,8 @@ set_ssl_version_min_max(struct Curl_easy *data, struct connectdata *conn,
int mbedtls_ver_min = MBEDTLS_SSL_MINOR_VERSION_1;
int mbedtls_ver_max = MBEDTLS_SSL_MINOR_VERSION_1;
#endif
- long ssl_version = SSL_CONN_CONFIG(version);
- long ssl_version_max = SSL_CONN_CONFIG(version_max);
+ long ssl_version = conn_config->version;
+ long ssl_version_max = conn_config->version_max;
CURLcode result = CURLE_OK;
DEBUGASSERT(backend);
@@ -268,31 +306,30 @@ set_ssl_version_min_max(struct Curl_easy *data, struct connectdata *conn,
}
static CURLcode
-mbed_connect_step1(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
+mbed_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data)
{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
- const struct curl_blob *ca_info_blob = SSL_CONN_CONFIG(ca_info_blob);
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct mbed_ssl_backend_data *backend =
+ (struct mbed_ssl_backend_data *)connssl->backend;
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
+ const struct curl_blob *ca_info_blob = conn_config->ca_info_blob;
+ struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data);
const char * const ssl_cafile =
/* CURLOPT_CAINFO_BLOB overrides CURLOPT_CAINFO */
- (ca_info_blob ? NULL : SSL_CONN_CONFIG(CAfile));
- const bool verifypeer = SSL_CONN_CONFIG(verifypeer);
- const char * const ssl_capath = SSL_CONN_CONFIG(CApath);
- char * const ssl_cert = SSL_SET_OPTION(primary.clientcert);
- const struct curl_blob *ssl_cert_blob = SSL_SET_OPTION(primary.cert_blob);
- const char * const ssl_crlfile = SSL_SET_OPTION(primary.CRLfile);
- const char * const hostname = SSL_HOST_NAME();
-#ifndef CURL_DISABLE_VERBOSE_STRINGS
- const long int port = SSL_HOST_PORT();
-#endif
+ (ca_info_blob ? NULL : conn_config->CAfile);
+ const bool verifypeer = conn_config->verifypeer;
+ const char * const ssl_capath = conn_config->CApath;
+ char * const ssl_cert = ssl_config->primary.clientcert;
+ const struct curl_blob *ssl_cert_blob = ssl_config->primary.cert_blob;
+ const char * const ssl_crlfile = ssl_config->primary.CRLfile;
+ const char *hostname = connssl->peer.hostname;
int ret = -1;
char errorbuf[128];
DEBUGASSERT(backend);
- if((SSL_CONN_CONFIG(version) == CURL_SSLVERSION_SSLv2) ||
- (SSL_CONN_CONFIG(version) == CURL_SSLVERSION_SSLv3)) {
+ if((conn_config->version == CURL_SSLVERSION_SSLv2) ||
+ (conn_config->version == CURL_SSLVERSION_SSLv3)) {
failf(data, "Not supported SSL version");
return CURLE_NOT_BUILT_IN;
}
@@ -416,7 +453,7 @@ mbed_connect_step1(struct Curl_easy *data, struct connectdata *conn,
if(ret) {
mbedtls_strerror(ret, errorbuf, sizeof(errorbuf));
failf(data, "Error reading private key %s - mbedTLS: (-0x%04X) %s",
- SSL_SET_OPTION(key), -ret, errorbuf);
+ ssl_config->key, -ret, errorbuf);
return CURLE_SSL_CERTPROBLEM;
}
}
@@ -424,23 +461,23 @@ mbed_connect_step1(struct Curl_easy *data, struct connectdata *conn,
/* Load the client private key */
mbedtls_pk_init(&backend->pk);
- if(SSL_SET_OPTION(key) || SSL_SET_OPTION(key_blob)) {
- if(SSL_SET_OPTION(key)) {
+ if(ssl_config->key || ssl_config->key_blob) {
+ if(ssl_config->key) {
#ifdef MBEDTLS_FS_IO
#if MBEDTLS_VERSION_NUMBER >= 0x03000000
- ret = mbedtls_pk_parse_keyfile(&backend->pk, SSL_SET_OPTION(key),
- SSL_SET_OPTION(key_passwd),
+ ret = mbedtls_pk_parse_keyfile(&backend->pk, ssl_config->key,
+ ssl_config->key_passwd,
mbedtls_ctr_drbg_random,
&backend->ctr_drbg);
#else
- ret = mbedtls_pk_parse_keyfile(&backend->pk, SSL_SET_OPTION(key),
- SSL_SET_OPTION(key_passwd));
+ ret = mbedtls_pk_parse_keyfile(&backend->pk, ssl_config->key,
+ ssl_config->key_passwd);
#endif
if(ret) {
mbedtls_strerror(ret, errorbuf, sizeof(errorbuf));
failf(data, "Error reading private key %s - mbedTLS: (-0x%04X) %s",
- SSL_SET_OPTION(key), -ret, errorbuf);
+ ssl_config->key, -ret, errorbuf);
return CURLE_SSL_CERTPROBLEM;
}
#else
@@ -449,10 +486,10 @@ mbed_connect_step1(struct Curl_easy *data, struct connectdata *conn,
#endif
}
else {
- const struct curl_blob *ssl_key_blob = SSL_SET_OPTION(key_blob);
+ const struct curl_blob *ssl_key_blob = ssl_config->key_blob;
const unsigned char *key_data =
(const unsigned char *)ssl_key_blob->data;
- const char *passwd = SSL_SET_OPTION(key_passwd);
+ const char *passwd = ssl_config->key_passwd;
#if MBEDTLS_VERSION_NUMBER >= 0x03000000
ret = mbedtls_pk_parse_key(&backend->pk, key_data, ssl_key_blob->len,
(const unsigned char *)passwd,
@@ -505,7 +542,7 @@ mbed_connect_step1(struct Curl_easy *data, struct connectdata *conn,
}
#endif
- infof(data, "mbedTLS: Connecting to %s:%ld", hostname, port);
+ infof(data, "mbedTLS: Connecting to %s:%d", hostname, connssl->port);
mbedtls_ssl_config_init(&backend->config);
ret = mbedtls_ssl_config_defaults(&backend->config,
@@ -527,7 +564,7 @@ mbed_connect_step1(struct Curl_easy *data, struct connectdata *conn,
mbedtls_ssl_conf_cert_profile(&backend->config,
&mbedtls_x509_crt_profile_fr);
- switch(SSL_CONN_CONFIG(version)) {
+ switch(conn_config->version) {
case CURL_SSLVERSION_DEFAULT:
case CURL_SSLVERSION_TLSv1:
#if MBEDTLS_VERSION_NUMBER < 0x03000000
@@ -541,7 +578,7 @@ mbed_connect_step1(struct Curl_easy *data, struct connectdata *conn,
case CURL_SSLVERSION_TLSv1_2:
case CURL_SSLVERSION_TLSv1_3:
{
- CURLcode result = set_ssl_version_min_max(data, conn, sockindex);
+ CURLcode result = set_ssl_version_min_max(cf, data);
if(result != CURLE_OK)
return result;
break;
@@ -555,9 +592,9 @@ mbed_connect_step1(struct Curl_easy *data, struct connectdata *conn,
mbedtls_ssl_conf_rng(&backend->config, mbedtls_ctr_drbg_random,
&backend->ctr_drbg);
- mbedtls_ssl_set_bio(&backend->ssl, &conn->sock[sockindex],
- mbedtls_net_send,
- mbedtls_net_recv,
+ mbedtls_ssl_set_bio(&backend->ssl, cf,
+ mbedtls_bio_cf_write,
+ mbedtls_bio_cf_read,
NULL /* rev_timeout() */);
mbedtls_ssl_conf_ciphersuites(&backend->config,
@@ -574,20 +611,18 @@ mbed_connect_step1(struct Curl_easy *data, struct connectdata *conn,
#endif
/* Check if there's a cached ID we can/should use here! */
- if(SSL_SET_OPTION(primary.sessionid)) {
+ if(ssl_config->primary.sessionid) {
void *old_session = NULL;
Curl_ssl_sessionid_lock(data);
- if(!Curl_ssl_getsessionid(data, conn,
- SSL_IS_PROXY() ? TRUE : FALSE,
- &old_session, NULL, sockindex)) {
+ if(!Curl_ssl_getsessionid(cf, data, &old_session, NULL)) {
ret = mbedtls_ssl_set_session(&backend->ssl, old_session);
if(ret) {
Curl_ssl_sessionid_unlock(data);
failf(data, "mbedtls_ssl_set_session returned -0x%x", -ret);
return CURLE_SSL_CONNECT_ERROR;
}
- infof(data, "mbedTLS re-using session");
+ infof(data, "mbedTLS reusing session");
}
Curl_ssl_sessionid_unlock(data);
}
@@ -600,13 +635,13 @@ mbed_connect_step1(struct Curl_easy *data, struct connectdata *conn,
NULL);
#endif
- if(SSL_SET_OPTION(key) || SSL_SET_OPTION(key_blob)) {
+ if(ssl_config->key || ssl_config->key_blob) {
mbedtls_ssl_conf_own_cert(&backend->config,
&backend->clicert, &backend->pk);
}
- {
- char *snihost = Curl_ssl_snihost(data, hostname, NULL);
- if(!snihost || mbedtls_ssl_set_hostname(&backend->ssl, snihost)) {
+
+ if(connssl->peer.sni) {
+ if(mbedtls_ssl_set_hostname(&backend->ssl, connssl->peer.sni)) {
/* mbedtls_ssl_set_hostname() sets the name to use in CN/SAN checks and
the name to set in the SNI extension. So even if curl connects to a
host specified as an IP address, this function must be used. */
@@ -616,14 +651,13 @@ mbed_connect_step1(struct Curl_easy *data, struct connectdata *conn,
}
#ifdef HAS_ALPN
- if(conn->bits.tls_enable_alpn) {
- const char **p = &backend->protocols[0];
-#ifdef USE_HTTP2
- if(data->state.httpwant >= CURL_HTTP_VERSION_2)
- *p++ = ALPN_H2;
-#endif
- *p++ = ALPN_HTTP_1_1;
- *p = NULL;
+ if(connssl->alpn) {
+ struct alpn_proto_buf proto;
+ size_t i;
+
+ for(i = 0; i < connssl->alpn->count; ++i) {
+ backend->protocols[i] = connssl->alpn->entries[i];
+ }
/* this function doesn't clone the protocols array, which is why we need
to keep it around */
if(mbedtls_ssl_conf_alpn_protocols(&backend->config,
@@ -631,8 +665,8 @@ mbed_connect_step1(struct Curl_easy *data, struct connectdata *conn,
failf(data, "Failed setting ALPN protocols");
return CURLE_SSL_CONNECT_ERROR;
}
- for(p = &backend->protocols[0]; *p; ++p)
- infof(data, VTLS_INFOF_ALPN_OFFER_1STR, *p);
+ Curl_alpn_to_proto_str(&proto, connssl->alpn);
+ infof(data, VTLS_INFOF_ALPN_OFFER_1STR, proto.data);
}
#endif
@@ -664,20 +698,20 @@ mbed_connect_step1(struct Curl_easy *data, struct connectdata *conn,
}
static CURLcode
-mbed_connect_step2(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
+mbed_connect_step2(struct Curl_cfilter *cf, struct Curl_easy *data)
{
int ret;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct mbed_ssl_backend_data *backend =
+ (struct mbed_ssl_backend_data *)connssl->backend;
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
const mbedtls_x509_crt *peercert;
- const char * const pinnedpubkey = SSL_PINNED_PUB_KEY();
+ const char * const pinnedpubkey = Curl_ssl_cf_is_proxy(cf)?
+ data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY]:
+ data->set.str[STRING_SSL_PINNEDPUBLICKEY];
DEBUGASSERT(backend);
- conn->recv[sockindex] = mbed_recv;
- conn->send[sockindex] = mbed_send;
-
ret = mbedtls_ssl_handshake(&backend->ssl);
if(ret == MBEDTLS_ERR_SSL_WANT_READ) {
@@ -701,11 +735,11 @@ mbed_connect_step2(struct Curl_easy *data, struct connectdata *conn,
ret = mbedtls_ssl_get_verify_result(&backend->ssl);
- if(!SSL_CONN_CONFIG(verifyhost))
+ if(!conn_config->verifyhost)
/* Ignore hostname errors if verifyhost is disabled */
ret &= ~MBEDTLS_X509_BADCERT_CN_MISMATCH;
- if(ret && SSL_CONN_CONFIG(verifypeer)) {
+ if(ret && conn_config->verifypeer) {
if(ret & MBEDTLS_X509_BADCERT_EXPIRED)
failf(data, "Cert verify failed: BADCERT_EXPIRED");
@@ -803,7 +837,7 @@ mbed_connect_step2(struct Curl_easy *data, struct connectdata *conn,
result = Curl_pin_peer_pubkey(data,
pinnedpubkey,
&pubkey[PUB_DER_MAX_BYTES - size], size);
- pinnedpubkey_error:
+pinnedpubkey_error:
mbedtls_x509_crt_free(p);
free(p);
free(pubkey);
@@ -813,28 +847,11 @@ mbed_connect_step2(struct Curl_easy *data, struct connectdata *conn,
}
#ifdef HAS_ALPN
- if(conn->bits.tls_enable_alpn) {
- const char *next_protocol = mbedtls_ssl_get_alpn_protocol(&backend->ssl);
+ if(connssl->alpn) {
+ const char *proto = mbedtls_ssl_get_alpn_protocol(&backend->ssl);
- if(next_protocol) {
- infof(data, VTLS_INFOF_ALPN_ACCEPTED_1STR, next_protocol);
-#ifdef USE_HTTP2
- if(!strncmp(next_protocol, ALPN_H2, ALPN_H2_LENGTH) &&
- !next_protocol[ALPN_H2_LENGTH]) {
- conn->alpn = CURL_HTTP_VERSION_2;
- }
- else
-#endif
- if(!strncmp(next_protocol, ALPN_HTTP_1_1, ALPN_HTTP_1_1_LENGTH) &&
- !next_protocol[ALPN_HTTP_1_1_LENGTH]) {
- conn->alpn = CURL_HTTP_VERSION_1_1;
- }
- }
- else {
- infof(data, VTLS_INFOF_NO_ALPN);
- }
- Curl_multiuse_state(data, conn->alpn == CURL_HTTP_VERSION_2 ?
- BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
+ Curl_alpn_set_negotiated(cf, data, (const unsigned char *)proto,
+ proto? strlen(proto) : 0);
}
#endif
@@ -845,21 +862,21 @@ mbed_connect_step2(struct Curl_easy *data, struct connectdata *conn,
}
static CURLcode
-mbed_connect_step3(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
+mbed_connect_step3(struct Curl_cfilter *cf, struct Curl_easy *data)
{
CURLcode retcode = CURLE_OK;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct mbed_ssl_backend_data *backend =
+ (struct mbed_ssl_backend_data *)connssl->backend;
+ struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data);
DEBUGASSERT(ssl_connect_3 == connssl->connecting_state);
DEBUGASSERT(backend);
- if(SSL_SET_OPTION(primary.sessionid)) {
+ if(ssl_config->primary.sessionid) {
int ret;
mbedtls_ssl_session *our_ssl_sessionid;
void *old_ssl_sessionid = NULL;
- bool isproxy = SSL_IS_PROXY() ? TRUE : FALSE;
bool added = FALSE;
our_ssl_sessionid = malloc(sizeof(mbedtls_ssl_session));
@@ -879,12 +896,11 @@ mbed_connect_step3(struct Curl_easy *data, struct connectdata *conn,
/* If there's already a matching session in the cache, delete it */
Curl_ssl_sessionid_lock(data);
- if(!Curl_ssl_getsessionid(data, conn, isproxy, &old_ssl_sessionid, NULL,
- sockindex))
+ if(!Curl_ssl_getsessionid(cf, data, &old_ssl_sessionid, NULL))
Curl_ssl_delsessionid(data, old_ssl_sessionid);
- retcode = Curl_ssl_addsessionid(data, conn, isproxy, our_ssl_sessionid,
- 0, sockindex, &added);
+ retcode = Curl_ssl_addsessionid(cf, data, our_ssl_sessionid,
+ 0, &added);
Curl_ssl_sessionid_unlock(data);
if(!added) {
mbedtls_ssl_session_free(our_ssl_sessionid);
@@ -901,17 +917,17 @@ mbed_connect_step3(struct Curl_easy *data, struct connectdata *conn,
return CURLE_OK;
}
-static ssize_t mbed_send(struct Curl_easy *data, int sockindex,
+static ssize_t mbed_send(struct Curl_cfilter *cf, struct Curl_easy *data,
const void *mem, size_t len,
CURLcode *curlcode)
{
- struct connectdata *conn = data->conn;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct mbed_ssl_backend_data *backend =
+ (struct mbed_ssl_backend_data *)connssl->backend;
int ret = -1;
+ (void)data;
DEBUGASSERT(backend);
-
ret = mbedtls_ssl_write(&backend->ssl, (unsigned char *)mem, len);
if(ret < 0) {
@@ -928,14 +944,14 @@ static void mbedtls_close_all(struct Curl_easy *data)
(void)data;
}
-static void mbedtls_close(struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
+static void mbedtls_close(struct Curl_cfilter *cf, struct Curl_easy *data)
{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct mbed_ssl_backend_data *backend =
+ (struct mbed_ssl_backend_data *)connssl->backend;
char buf[32];
- (void) data;
+ (void)data;
DEBUGASSERT(backend);
/* Maybe the server has already sent a close notify alert.
@@ -956,16 +972,17 @@ static void mbedtls_close(struct Curl_easy *data,
#endif /* THREADING_SUPPORT */
}
-static ssize_t mbed_recv(struct Curl_easy *data, int num,
+static ssize_t mbed_recv(struct Curl_cfilter *cf, struct Curl_easy *data,
char *buf, size_t buffersize,
CURLcode *curlcode)
{
- struct connectdata *conn = data->conn;
- struct ssl_connect_data *connssl = &conn->ssl[num];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct mbed_ssl_backend_data *backend =
+ (struct mbed_ssl_backend_data *)connssl->backend;
int ret = -1;
ssize_t len = -1;
+ (void)data;
DEBUGASSERT(backend);
ret = mbedtls_ssl_read(&backend->ssl, (unsigned char *)buf,
@@ -1048,15 +1065,13 @@ static CURLcode mbedtls_random(struct Curl_easy *data,
}
static CURLcode
-mbed_connect_common(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex,
+mbed_connect_common(struct Curl_cfilter *cf, struct Curl_easy *data,
bool nonblocking,
bool *done)
{
CURLcode retcode;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- curl_socket_t sockfd = conn->sock[sockindex];
+ struct ssl_connect_data *connssl = cf->ctx;
+ curl_socket_t sockfd = Curl_conn_cf_get_socket(cf, data);
timediff_t timeout_ms;
int what;
@@ -1075,7 +1090,7 @@ mbed_connect_common(struct Curl_easy *data,
failf(data, "SSL connection timeout");
return CURLE_OPERATION_TIMEDOUT;
}
- retcode = mbed_connect_step1(data, conn, sockindex);
+ retcode = mbed_connect_step1(cf, data);
if(retcode)
return retcode;
}
@@ -1130,7 +1145,7 @@ mbed_connect_common(struct Curl_easy *data,
* ensuring that a client using select() or epoll() will always
* have a valid fdset to wait on.
*/
- retcode = mbed_connect_step2(data, conn, sockindex);
+ retcode = mbed_connect_step2(cf, data);
if(retcode || (nonblocking &&
(ssl_connect_2 == connssl->connecting_state ||
ssl_connect_2_reading == connssl->connecting_state ||
@@ -1140,15 +1155,13 @@ mbed_connect_common(struct Curl_easy *data,
} /* repeat step2 until all transactions are done. */
if(ssl_connect_3 == connssl->connecting_state) {
- retcode = mbed_connect_step3(data, conn, sockindex);
+ retcode = mbed_connect_step3(cf, data);
if(retcode)
return retcode;
}
if(ssl_connect_done == connssl->connecting_state) {
connssl->state = ssl_connection_complete;
- conn->recv[sockindex] = mbed_recv;
- conn->send[sockindex] = mbed_send;
*done = TRUE;
}
else
@@ -1160,21 +1173,21 @@ mbed_connect_common(struct Curl_easy *data,
return CURLE_OK;
}
-static CURLcode mbedtls_connect_nonblocking(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex, bool *done)
+static CURLcode mbedtls_connect_nonblocking(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool *done)
{
- return mbed_connect_common(data, conn, sockindex, TRUE, done);
+ return mbed_connect_common(cf, data, TRUE, done);
}
-static CURLcode mbedtls_connect(struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
+static CURLcode mbedtls_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
CURLcode retcode;
bool done = FALSE;
- retcode = mbed_connect_common(data, conn, sockindex, FALSE, &done);
+ retcode = mbed_connect_common(cf, data, FALSE, &done);
if(retcode)
return retcode;
@@ -1197,12 +1210,15 @@ static void mbedtls_cleanup(void)
(void)Curl_mbedtlsthreadlock_thread_cleanup();
}
-static bool mbedtls_data_pending(const struct connectdata *conn,
- int sockindex)
+static bool mbedtls_data_pending(struct Curl_cfilter *cf,
+ const struct Curl_easy *data)
{
- const struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
- DEBUGASSERT(backend);
+ struct ssl_connect_data *ctx = cf->ctx;
+ struct mbed_ssl_backend_data *backend;
+
+ (void)data;
+ DEBUGASSERT(ctx && ctx->backend);
+ backend = (struct mbed_ssl_backend_data *)ctx->backend;
return mbedtls_ssl_get_bytes_avail(&backend->ssl) != 0;
}
@@ -1230,7 +1246,8 @@ static CURLcode mbedtls_sha256sum(const unsigned char *input,
static void *mbedtls_get_internals(struct ssl_connect_data *connssl,
CURLINFO info UNUSED_PARAM)
{
- struct ssl_backend_data *backend = connssl->backend;
+ struct mbed_ssl_backend_data *backend =
+ (struct mbed_ssl_backend_data *)connssl->backend;
(void)info;
DEBUGASSERT(backend);
return &backend->ssl;
@@ -1242,9 +1259,10 @@ const struct Curl_ssl Curl_ssl_mbedtls = {
SSLSUPP_CA_PATH |
SSLSUPP_CAINFO_BLOB |
SSLSUPP_PINNEDPUBKEY |
- SSLSUPP_SSL_CTX,
+ SSLSUPP_SSL_CTX |
+ SSLSUPP_HTTPS_PROXY,
- sizeof(struct ssl_backend_data),
+ sizeof(struct mbed_ssl_backend_data),
mbedtls_init, /* init */
mbedtls_cleanup, /* cleanup */
@@ -1256,7 +1274,7 @@ const struct Curl_ssl Curl_ssl_mbedtls = {
Curl_none_cert_status_request, /* cert_status_request */
mbedtls_connect, /* connect */
mbedtls_connect_nonblocking, /* connect_nonblocking */
- Curl_ssl_getsock, /* getsock */
+ Curl_ssl_adjust_pollset, /* adjust_pollset */
mbedtls_get_internals, /* get_internals */
mbedtls_close, /* close_one */
mbedtls_close_all, /* close_all */
@@ -1267,7 +1285,10 @@ const struct Curl_ssl Curl_ssl_mbedtls = {
Curl_none_false_start, /* false_start */
mbedtls_sha256sum, /* sha256sum */
NULL, /* associate_connection */
- NULL /* disassociate_connection */
+ NULL, /* disassociate_connection */
+ NULL, /* free_multi_ssl_backend_data */
+ mbed_recv, /* recv decrypted data */
+ mbed_send, /* send data to encrypt */
};
#endif /* USE_MBEDTLS */
diff --git a/lib/vtls/mbedtls.h b/lib/vtls/mbedtls.h
index ec3b43bf9..d8a0a06eb 100644
--- a/lib/vtls/mbedtls.h
+++ b/lib/vtls/mbedtls.h
@@ -7,8 +7,8 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2012 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- * Copyright (C) 2010, Hoi-Ho Chan, <hoiho.chan@gmail.com>
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Hoi-Ho Chan, <hoiho.chan@gmail.com>
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/vtls/mbedtls_threadlock.c b/lib/vtls/mbedtls_threadlock.c
index 3971e69b2..22b1b221e 100644
--- a/lib/vtls/mbedtls_threadlock.c
+++ b/lib/vtls/mbedtls_threadlock.c
@@ -5,8 +5,8 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2013 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- * Copyright (C) 2010, 2011, Hoi-Ho Chan, <hoiho.chan@gmail.com>
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Hoi-Ho Chan, <hoiho.chan@gmail.com>
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -26,13 +26,12 @@
#if defined(USE_MBEDTLS) && \
((defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)) || \
- (defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)))
+ defined(USE_THREADS_WIN32))
#if defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)
# include <pthread.h>
# define MBEDTLS_MUTEX_T pthread_mutex_t
-#elif defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)
-# include <process.h>
+#elif defined(USE_THREADS_WIN32)
# define MBEDTLS_MUTEX_T HANDLE
#endif
@@ -52,7 +51,7 @@ int Curl_mbedtlsthreadlock_thread_setup(void)
{
int i;
- mutex_buf = calloc(NUMT * sizeof(MBEDTLS_MUTEX_T), 1);
+ mutex_buf = calloc(1, NUMT * sizeof(MBEDTLS_MUTEX_T));
if(!mutex_buf)
return 0; /* error, no number of threads defined */
@@ -60,7 +59,7 @@ int Curl_mbedtlsthreadlock_thread_setup(void)
#if defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)
if(pthread_mutex_init(&mutex_buf[i], NULL))
return 0; /* pthread_mutex_init failed */
-#elif defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)
+#elif defined(USE_THREADS_WIN32)
mutex_buf[i] = CreateMutex(0, FALSE, 0);
if(mutex_buf[i] == 0)
return 0; /* CreateMutex failed */
@@ -81,7 +80,7 @@ int Curl_mbedtlsthreadlock_thread_cleanup(void)
#if defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)
if(pthread_mutex_destroy(&mutex_buf[i]))
return 0; /* pthread_mutex_destroy failed */
-#elif defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)
+#elif defined(USE_THREADS_WIN32)
if(!CloseHandle(mutex_buf[i]))
return 0; /* CloseHandle failed */
#endif /* USE_THREADS_POSIX && HAVE_PTHREAD_H */
@@ -101,7 +100,7 @@ int Curl_mbedtlsthreadlock_lock_function(int n)
"Error: mbedtlsthreadlock_lock_function failed\n"));
return 0; /* pthread_mutex_lock failed */
}
-#elif defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)
+#elif defined(USE_THREADS_WIN32)
if(WaitForSingleObject(mutex_buf[n], INFINITE) == WAIT_FAILED) {
DEBUGF(fprintf(stderr,
"Error: mbedtlsthreadlock_lock_function failed\n"));
@@ -121,7 +120,7 @@ int Curl_mbedtlsthreadlock_unlock_function(int n)
"Error: mbedtlsthreadlock_unlock_function failed\n"));
return 0; /* pthread_mutex_unlock failed */
}
-#elif defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)
+#elif defined(USE_THREADS_WIN32)
if(!ReleaseMutex(mutex_buf[n])) {
DEBUGF(fprintf(stderr,
"Error: mbedtlsthreadlock_unlock_function failed\n"));
diff --git a/lib/vtls/mbedtls_threadlock.h b/lib/vtls/mbedtls_threadlock.h
index 3a50d0381..2b0bd41c8 100644
--- a/lib/vtls/mbedtls_threadlock.h
+++ b/lib/vtls/mbedtls_threadlock.h
@@ -7,8 +7,8 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2013 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- * Copyright (C) 2010, Hoi-Ho Chan, <hoiho.chan@gmail.com>
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Hoi-Ho Chan, <hoiho.chan@gmail.com>
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -29,7 +29,7 @@
#ifdef USE_MBEDTLS
#if (defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)) || \
- (defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H))
+ defined(USE_THREADS_WIN32)
int Curl_mbedtlsthreadlock_thread_setup(void);
int Curl_mbedtlsthreadlock_thread_cleanup(void);
diff --git a/lib/vtls/nss.c b/lib/vtls/nss.c
deleted file mode 100644
index 12cf618f5..000000000
--- a/lib/vtls/nss.c
+++ /dev/null
@@ -1,2537 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed 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
- *
- ***************************************************************************/
-
-/*
- * Source file for all NSS-specific code for the TLS/SSL layer. No code
- * but vtls.c should ever call or use these functions.
- */
-
-#include "curl_setup.h"
-
-#ifdef USE_NSS
-
-#include "urldata.h"
-#include "sendf.h"
-#include "formdata.h" /* for the boundary function */
-#include "url.h" /* for the ssl config check function */
-#include "connect.h"
-#include "strcase.h"
-#include "select.h"
-#include "vtls.h"
-#include "llist.h"
-#include "multiif.h"
-#include "curl_printf.h"
-#include "nssg.h"
-#include <nspr.h>
-#include <nss.h>
-#include <ssl.h>
-#include <sslerr.h>
-#include <secerr.h>
-#include <secmod.h>
-#include <sslproto.h>
-#include <prtypes.h>
-#include <pk11pub.h>
-#include <prio.h>
-#include <secitem.h>
-#include <secport.h>
-#include <certdb.h>
-#include <base64.h>
-#include <cert.h>
-#include <prerror.h>
-#include <keyhi.h> /* for SECKEY_DestroyPublicKey() */
-#include <private/pprio.h> /* for PR_ImportTCPSocket */
-
-#define NSSVERNUM ((NSS_VMAJOR<<16)|(NSS_VMINOR<<8)|NSS_VPATCH)
-
-#if NSSVERNUM >= 0x030f00 /* 3.15.0 */
-#include <ocsp.h>
-#endif
-
-#include "strcase.h"
-#include "warnless.h"
-#include "x509asn1.h"
-
-/* The last #include files should be: */
-#include "curl_memory.h"
-#include "memdebug.h"
-
-#define SSL_DIR "/etc/pki/nssdb"
-
-/* enough to fit the string "PEM Token #[0|1]" */
-#define SLOTSIZE 13
-
-struct ssl_backend_data {
- PRFileDesc *handle;
- char *client_nickname;
- struct Curl_easy *data;
- struct Curl_llist obj_list;
- PK11GenericObject *obj_clicert;
-};
-
-static PRLock *nss_initlock = NULL;
-static PRLock *nss_crllock = NULL;
-static PRLock *nss_findslot_lock = NULL;
-static PRLock *nss_trustload_lock = NULL;
-static struct Curl_llist nss_crl_list;
-static NSSInitContext *nss_context = NULL;
-static volatile int initialized = 0;
-
-/* type used to wrap pointers as list nodes */
-struct ptr_list_wrap {
- void *ptr;
- struct Curl_llist_element node;
-};
-
-struct cipher_s {
- const char *name;
- int num;
-};
-
-#define PK11_SETATTRS(_attr, _idx, _type, _val, _len) do { \
- CK_ATTRIBUTE *ptr = (_attr) + ((_idx)++); \
- ptr->type = (_type); \
- ptr->pValue = (_val); \
- ptr->ulValueLen = (_len); \
-} while(0)
-
-#define CERT_NewTempCertificate __CERT_NewTempCertificate
-
-#define NUM_OF_CIPHERS sizeof(cipherlist)/sizeof(cipherlist[0])
-static const struct cipher_s cipherlist[] = {
- /* SSL2 cipher suites */
- {"rc4", SSL_EN_RC4_128_WITH_MD5},
- {"rc4-md5", SSL_EN_RC4_128_WITH_MD5},
- {"rc4export", SSL_EN_RC4_128_EXPORT40_WITH_MD5},
- {"rc2", SSL_EN_RC2_128_CBC_WITH_MD5},
- {"rc2export", SSL_EN_RC2_128_CBC_EXPORT40_WITH_MD5},
- {"des", SSL_EN_DES_64_CBC_WITH_MD5},
- {"desede3", SSL_EN_DES_192_EDE3_CBC_WITH_MD5},
- /* SSL3/TLS cipher suites */
- {"rsa_rc4_128_md5", SSL_RSA_WITH_RC4_128_MD5},
- {"rsa_rc4_128_sha", SSL_RSA_WITH_RC4_128_SHA},
- {"rsa_3des_sha", SSL_RSA_WITH_3DES_EDE_CBC_SHA},
- {"rsa_des_sha", SSL_RSA_WITH_DES_CBC_SHA},
- {"rsa_rc4_40_md5", SSL_RSA_EXPORT_WITH_RC4_40_MD5},
- {"rsa_rc2_40_md5", SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5},
- {"rsa_null_md5", SSL_RSA_WITH_NULL_MD5},
- {"rsa_null_sha", SSL_RSA_WITH_NULL_SHA},
- {"fips_3des_sha", SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA},
- {"fips_des_sha", SSL_RSA_FIPS_WITH_DES_CBC_SHA},
- {"fortezza", SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA},
- {"fortezza_rc4_128_sha", SSL_FORTEZZA_DMS_WITH_RC4_128_SHA},
- {"fortezza_null", SSL_FORTEZZA_DMS_WITH_NULL_SHA},
- {"dhe_rsa_3des_sha", SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA},
- {"dhe_dss_3des_sha", SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA},
- {"dhe_rsa_des_sha", SSL_DHE_RSA_WITH_DES_CBC_SHA},
- {"dhe_dss_des_sha", SSL_DHE_DSS_WITH_DES_CBC_SHA},
- /* TLS 1.0: Exportable 56-bit Cipher Suites. */
- {"rsa_des_56_sha", TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA},
- {"rsa_rc4_56_sha", TLS_RSA_EXPORT1024_WITH_RC4_56_SHA},
- /* Ephemeral DH with RC4 bulk encryption */
- {"dhe_dss_rc4_128_sha", TLS_DHE_DSS_WITH_RC4_128_SHA},
- /* AES ciphers. */
- {"dhe_dss_aes_128_cbc_sha", TLS_DHE_DSS_WITH_AES_128_CBC_SHA},
- {"dhe_dss_aes_256_cbc_sha", TLS_DHE_DSS_WITH_AES_256_CBC_SHA},
- {"dhe_rsa_aes_128_cbc_sha", TLS_DHE_RSA_WITH_AES_128_CBC_SHA},
- {"dhe_rsa_aes_256_cbc_sha", TLS_DHE_RSA_WITH_AES_256_CBC_SHA},
- {"rsa_aes_128_sha", TLS_RSA_WITH_AES_128_CBC_SHA},
- {"rsa_aes_256_sha", TLS_RSA_WITH_AES_256_CBC_SHA},
- /* ECC ciphers. */
- {"ecdh_ecdsa_null_sha", TLS_ECDH_ECDSA_WITH_NULL_SHA},
- {"ecdh_ecdsa_rc4_128_sha", TLS_ECDH_ECDSA_WITH_RC4_128_SHA},
- {"ecdh_ecdsa_3des_sha", TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA},
- {"ecdh_ecdsa_aes_128_sha", TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA},
- {"ecdh_ecdsa_aes_256_sha", TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA},
- {"ecdhe_ecdsa_null_sha", TLS_ECDHE_ECDSA_WITH_NULL_SHA},
- {"ecdhe_ecdsa_rc4_128_sha", TLS_ECDHE_ECDSA_WITH_RC4_128_SHA},
- {"ecdhe_ecdsa_3des_sha", TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA},
- {"ecdhe_ecdsa_aes_128_sha", TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA},
- {"ecdhe_ecdsa_aes_256_sha", TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA},
- {"ecdh_rsa_null_sha", TLS_ECDH_RSA_WITH_NULL_SHA},
- {"ecdh_rsa_128_sha", TLS_ECDH_RSA_WITH_RC4_128_SHA},
- {"ecdh_rsa_3des_sha", TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA},
- {"ecdh_rsa_aes_128_sha", TLS_ECDH_RSA_WITH_AES_128_CBC_SHA},
- {"ecdh_rsa_aes_256_sha", TLS_ECDH_RSA_WITH_AES_256_CBC_SHA},
- {"ecdhe_rsa_null", TLS_ECDHE_RSA_WITH_NULL_SHA},
- {"ecdhe_rsa_rc4_128_sha", TLS_ECDHE_RSA_WITH_RC4_128_SHA},
- {"ecdhe_rsa_3des_sha", TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA},
- {"ecdhe_rsa_aes_128_sha", TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA},
- {"ecdhe_rsa_aes_256_sha", TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA},
- {"ecdh_anon_null_sha", TLS_ECDH_anon_WITH_NULL_SHA},
- {"ecdh_anon_rc4_128sha", TLS_ECDH_anon_WITH_RC4_128_SHA},
- {"ecdh_anon_3des_sha", TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA},
- {"ecdh_anon_aes_128_sha", TLS_ECDH_anon_WITH_AES_128_CBC_SHA},
- {"ecdh_anon_aes_256_sha", TLS_ECDH_anon_WITH_AES_256_CBC_SHA},
-#ifdef TLS_RSA_WITH_NULL_SHA256
- /* new HMAC-SHA256 cipher suites specified in RFC */
- {"rsa_null_sha_256", TLS_RSA_WITH_NULL_SHA256},
- {"rsa_aes_128_cbc_sha_256", TLS_RSA_WITH_AES_128_CBC_SHA256},
- {"rsa_aes_256_cbc_sha_256", TLS_RSA_WITH_AES_256_CBC_SHA256},
- {"dhe_rsa_aes_128_cbc_sha_256", TLS_DHE_RSA_WITH_AES_128_CBC_SHA256},
- {"dhe_rsa_aes_256_cbc_sha_256", TLS_DHE_RSA_WITH_AES_256_CBC_SHA256},
- {"ecdhe_ecdsa_aes_128_cbc_sha_256", TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256},
- {"ecdhe_rsa_aes_128_cbc_sha_256", TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256},
-#endif
-#ifdef TLS_RSA_WITH_AES_128_GCM_SHA256
- /* AES GCM cipher suites in RFC 5288 and RFC 5289 */
- {"rsa_aes_128_gcm_sha_256", TLS_RSA_WITH_AES_128_GCM_SHA256},
- {"dhe_rsa_aes_128_gcm_sha_256", TLS_DHE_RSA_WITH_AES_128_GCM_SHA256},
- {"dhe_dss_aes_128_gcm_sha_256", TLS_DHE_DSS_WITH_AES_128_GCM_SHA256},
- {"ecdhe_ecdsa_aes_128_gcm_sha_256", TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256},
- {"ecdh_ecdsa_aes_128_gcm_sha_256", TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256},
- {"ecdhe_rsa_aes_128_gcm_sha_256", TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256},
- {"ecdh_rsa_aes_128_gcm_sha_256", TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256},
-#endif
-#ifdef TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- /* cipher suites using SHA384 */
- {"rsa_aes_256_gcm_sha_384", TLS_RSA_WITH_AES_256_GCM_SHA384},
- {"dhe_rsa_aes_256_gcm_sha_384", TLS_DHE_RSA_WITH_AES_256_GCM_SHA384},
- {"dhe_dss_aes_256_gcm_sha_384", TLS_DHE_DSS_WITH_AES_256_GCM_SHA384},
- {"ecdhe_ecdsa_aes_256_sha_384", TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384},
- {"ecdhe_rsa_aes_256_sha_384", TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384},
- {"ecdhe_ecdsa_aes_256_gcm_sha_384", TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384},
- {"ecdhe_rsa_aes_256_gcm_sha_384", TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384},
-#endif
-#ifdef TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256
- /* chacha20-poly1305 cipher suites */
- {"ecdhe_rsa_chacha20_poly1305_sha_256",
- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256},
- {"ecdhe_ecdsa_chacha20_poly1305_sha_256",
- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256},
- {"dhe_rsa_chacha20_poly1305_sha_256",
- TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256},
-#endif
-#ifdef TLS_AES_256_GCM_SHA384
- {"aes_128_gcm_sha_256", TLS_AES_128_GCM_SHA256},
- {"aes_256_gcm_sha_384", TLS_AES_256_GCM_SHA384},
- {"chacha20_poly1305_sha_256", TLS_CHACHA20_POLY1305_SHA256},
-#endif
-#ifdef TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
- /* AES CBC cipher suites in RFC 5246. Introduced in NSS release 3.20 */
- {"dhe_dss_aes_128_sha_256", TLS_DHE_DSS_WITH_AES_128_CBC_SHA256},
- {"dhe_dss_aes_256_sha_256", TLS_DHE_DSS_WITH_AES_256_CBC_SHA256},
-#endif
-#ifdef TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
- /* Camellia cipher suites in RFC 4132/5932.
- Introduced in NSS release 3.12 */
- {"dhe_rsa_camellia_128_sha", TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA},
- {"dhe_dss_camellia_128_sha", TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA},
- {"dhe_rsa_camellia_256_sha", TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA},
- {"dhe_dss_camellia_256_sha", TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA},
- {"rsa_camellia_128_sha", TLS_RSA_WITH_CAMELLIA_128_CBC_SHA},
- {"rsa_camellia_256_sha", TLS_RSA_WITH_CAMELLIA_256_CBC_SHA},
-#endif
-#ifdef TLS_RSA_WITH_SEED_CBC_SHA
- /* SEED cipher suite in RFC 4162. Introduced in NSS release 3.12.3 */
- {"rsa_seed_sha", TLS_RSA_WITH_SEED_CBC_SHA},
-#endif
-};
-
-#if defined(WIN32)
-static const char *pem_library = "nsspem.dll";
-static const char *trust_library = "nssckbi.dll";
-#elif defined(__APPLE__)
-static const char *pem_library = "libnsspem.dylib";
-static const char *trust_library = "libnssckbi.dylib";
-#else
-static const char *pem_library = "libnsspem.so";
-static const char *trust_library = "libnssckbi.so";
-#endif
-
-static SECMODModule *pem_module = NULL;
-static SECMODModule *trust_module = NULL;
-
-/* NSPR I/O layer we use to detect blocking direction during SSL handshake */
-static PRDescIdentity nspr_io_identity = PR_INVALID_IO_LAYER;
-static PRIOMethods nspr_io_methods;
-
-static const char *nss_error_to_name(PRErrorCode code)
-{
- const char *name = PR_ErrorToName(code);
- if(name)
- return name;
-
- return "unknown error";
-}
-
-static void nss_print_error_message(struct Curl_easy *data, PRUint32 err)
-{
- failf(data, "%s", PR_ErrorToString(err, PR_LANGUAGE_I_DEFAULT));
-}
-
-static char *nss_sslver_to_name(PRUint16 nssver)
-{
- switch(nssver) {
- case SSL_LIBRARY_VERSION_2:
- return strdup("SSLv2");
- case SSL_LIBRARY_VERSION_3_0:
- return strdup("SSLv3");
- case SSL_LIBRARY_VERSION_TLS_1_0:
- return strdup("TLSv1.0");
-#ifdef SSL_LIBRARY_VERSION_TLS_1_1
- case SSL_LIBRARY_VERSION_TLS_1_1:
- return strdup("TLSv1.1");
-#endif
-#ifdef SSL_LIBRARY_VERSION_TLS_1_2
- case SSL_LIBRARY_VERSION_TLS_1_2:
- return strdup("TLSv1.2");
-#endif
-#ifdef SSL_LIBRARY_VERSION_TLS_1_3
- case SSL_LIBRARY_VERSION_TLS_1_3:
- return strdup("TLSv1.3");
-#endif
- default:
- return curl_maprintf("0x%04x", nssver);
- }
-}
-
-/* the longest cipher name this supports */
-#define MAX_CIPHER_LENGTH 128
-
-static SECStatus set_ciphers(struct Curl_easy *data, PRFileDesc *model,
- const char *cipher_list)
-{
- unsigned int i;
- const char *cipher;
-
- /* use accessors to avoid dynamic linking issues after an update of NSS */
- const PRUint16 num_implemented_ciphers = SSL_GetNumImplementedCiphers();
- const PRUint16 *implemented_ciphers = SSL_GetImplementedCiphers();
- if(!implemented_ciphers)
- return SECFailure;
-
- /* First disable all ciphers. This uses a different max value in case
- * NSS adds more ciphers later we don't want them available by
- * accident
- */
- for(i = 0; i < num_implemented_ciphers; i++) {
- SSL_CipherPrefSet(model, implemented_ciphers[i], PR_FALSE);
- }
-
- cipher = cipher_list;
-
- while(cipher && cipher[0]) {
- const char *end;
- char name[MAX_CIPHER_LENGTH + 1];
- size_t len;
- bool found = FALSE;
- while((*cipher) && (ISBLANK(*cipher)))
- ++cipher;
-
- end = strpbrk(cipher, ":, ");
- if(end)
- len = end - cipher;
- else
- len = strlen(cipher);
-
- if(len > MAX_CIPHER_LENGTH) {
- failf(data, "Bad cipher list");
- return SECFailure;
- }
- else if(len) {
- memcpy(name, cipher, len);
- name[len] = 0;
-
- for(i = 0; i<NUM_OF_CIPHERS; i++) {
- if(strcasecompare(name, cipherlist[i].name)) {
- /* Enable the selected cipher */
- if(SSL_CipherPrefSet(model, cipherlist[i].num, PR_TRUE) !=
- SECSuccess) {
- failf(data, "cipher-suite not supported by NSS: %s", name);
- return SECFailure;
- }
- found = TRUE;
- break;
- }
- }
- }
-
- if(!found && len) {
- failf(data, "Unknown cipher: %s", name);
- return SECFailure;
- }
- if(end)
- cipher = ++end;
- else
- break;
- }
-
- return SECSuccess;
-}
-
-/*
- * Return true if at least one cipher-suite is enabled. Used to determine
- * if we need to call NSS_SetDomesticPolicy() to enable the default ciphers.
- */
-static bool any_cipher_enabled(void)
-{
- unsigned int i;
-
- for(i = 0; i<NUM_OF_CIPHERS; i++) {
- PRInt32 policy = 0;
- SSL_CipherPolicyGet(cipherlist[i].num, &policy);
- if(policy)
- return TRUE;
- }
-
- return FALSE;
-}
-
-/*
- * Determine whether the nickname passed in is a filename that needs to
- * be loaded as a PEM or a regular NSS nickname.
- *
- * returns 1 for a file
- * returns 0 for not a file (NSS nickname)
- */
-static int is_file(const char *filename)
-{
- struct_stat st;
-
- if(!filename)
- return 0;
-
- if(stat(filename, &st) == 0)
- if(S_ISREG(st.st_mode) || S_ISFIFO(st.st_mode) || S_ISCHR(st.st_mode))
- return 1;
-
- return 0;
-}
-
-/* Check if the given string is filename or nickname of a certificate. If the
- * given string is recognized as filename, return NULL. If the given string is
- * recognized as nickname, return a duplicated string. The returned string
- * should be later deallocated using free(). If the OOM failure occurs, we
- * return NULL, too.
- */
-static char *dup_nickname(struct Curl_easy *data, const char *str)
-{
- const char *n;
-
- if(!is_file(str))
- /* no such file exists, use the string as nickname */
- return strdup(str);
-
- /* search the first slash; we require at least one slash in a file name */
- n = strchr(str, '/');
- if(!n) {
- infof(data, "WARNING: certificate file name \"%s\" handled as nickname; "
- "please use \"./%s\" to force file name", str, str);
- return strdup(str);
- }
-
- /* we'll use the PEM reader to read the certificate from file */
- return NULL;
-}
-
-/* Lock/unlock wrapper for PK11_FindSlotByName() to work around race condition
- * in nssSlot_IsTokenPresent() causing spurious SEC_ERROR_NO_TOKEN. For more
- * details, go to <https://bugzilla.mozilla.org/1297397>.
- */
-static PK11SlotInfo* nss_find_slot_by_name(const char *slot_name)
-{
- PK11SlotInfo *slot;
- PR_Lock(nss_findslot_lock);
- slot = PK11_FindSlotByName(slot_name);
- PR_Unlock(nss_findslot_lock);
- return slot;
-}
-
-/* wrap 'ptr' as list node and tail-insert into 'list' */
-static CURLcode insert_wrapped_ptr(struct Curl_llist *list, void *ptr)
-{
- struct ptr_list_wrap *wrap = malloc(sizeof(*wrap));
- if(!wrap)
- return CURLE_OUT_OF_MEMORY;
-
- wrap->ptr = ptr;
- Curl_llist_insert_next(list, list->tail, wrap, &wrap->node);
- return CURLE_OK;
-}
-
-/* Call PK11_CreateGenericObject() with the given obj_class and filename. If
- * the call succeeds, append the object handle to the list of objects so that
- * the object can be destroyed in nss_close(). */
-static CURLcode nss_create_object(struct ssl_connect_data *connssl,
- CK_OBJECT_CLASS obj_class,
- const char *filename, bool cacert)
-{
- PK11SlotInfo *slot;
- PK11GenericObject *obj;
- CK_BBOOL cktrue = CK_TRUE;
- CK_BBOOL ckfalse = CK_FALSE;
- CK_ATTRIBUTE attrs[/* max count of attributes */ 4];
- int attr_cnt = 0;
- CURLcode result = (cacert)
- ? CURLE_SSL_CACERT_BADFILE
- : CURLE_SSL_CERTPROBLEM;
-
- const int slot_id = (cacert) ? 0 : 1;
- char *slot_name = aprintf("PEM Token #%d", slot_id);
- struct ssl_backend_data *backend = connssl->backend;
-
- DEBUGASSERT(backend);
-
- if(!slot_name)
- return CURLE_OUT_OF_MEMORY;
-
- slot = nss_find_slot_by_name(slot_name);
- free(slot_name);
- if(!slot)
- return result;
-
- PK11_SETATTRS(attrs, attr_cnt, CKA_CLASS, &obj_class, sizeof(obj_class));
- PK11_SETATTRS(attrs, attr_cnt, CKA_TOKEN, &cktrue, sizeof(CK_BBOOL));
- PK11_SETATTRS(attrs, attr_cnt, CKA_LABEL, (unsigned char *)filename,
- (CK_ULONG)strlen(filename) + 1);
-
- if(CKO_CERTIFICATE == obj_class) {
- CK_BBOOL *pval = (cacert) ? (&cktrue) : (&ckfalse);
- PK11_SETATTRS(attrs, attr_cnt, CKA_TRUST, pval, sizeof(*pval));
- }
-
- /* PK11_CreateManagedGenericObject() was introduced in NSS 3.34 because
- * PK11_DestroyGenericObject() does not release resources allocated by
- * PK11_CreateGenericObject() early enough. */
- obj =
-#ifdef HAVE_PK11_CREATEMANAGEDGENERICOBJECT
- PK11_CreateManagedGenericObject
-#else
- PK11_CreateGenericObject
-#endif
- (slot, attrs, attr_cnt, PR_FALSE);
-
- PK11_FreeSlot(slot);
- if(!obj)
- return result;
-
- if(insert_wrapped_ptr(&backend->obj_list, obj) != CURLE_OK) {
- PK11_DestroyGenericObject(obj);
- return CURLE_OUT_OF_MEMORY;
- }
-
- if(!cacert && CKO_CERTIFICATE == obj_class)
- /* store reference to a client certificate */
- backend->obj_clicert = obj;
-
- return CURLE_OK;
-}
-
-/* Destroy the NSS object whose handle is given by ptr. This function is
- * a callback of Curl_llist_alloc() used by Curl_llist_destroy() to destroy
- * NSS objects in nss_close() */
-static void nss_destroy_object(void *user, void *ptr)
-{
- struct ptr_list_wrap *wrap = (struct ptr_list_wrap *) ptr;
- PK11GenericObject *obj = (PK11GenericObject *) wrap->ptr;
- (void) user;
- PK11_DestroyGenericObject(obj);
- free(wrap);
-}
-
-/* same as nss_destroy_object() but for CRL items */
-static void nss_destroy_crl_item(void *user, void *ptr)
-{
- struct ptr_list_wrap *wrap = (struct ptr_list_wrap *) ptr;
- SECItem *crl_der = (SECItem *) wrap->ptr;
- (void) user;
- SECITEM_FreeItem(crl_der, PR_TRUE);
- free(wrap);
-}
-
-static CURLcode nss_load_cert(struct ssl_connect_data *ssl,
- const char *filename, PRBool cacert)
-{
- CURLcode result = (cacert)
- ? CURLE_SSL_CACERT_BADFILE
- : CURLE_SSL_CERTPROBLEM;
-
- /* libnsspem.so leaks memory if the requested file does not exist. For more
- * details, go to <https://bugzilla.redhat.com/734760>. */
- if(is_file(filename))
- result = nss_create_object(ssl, CKO_CERTIFICATE, filename, cacert);
-
- if(!result && !cacert) {
- /* we have successfully loaded a client certificate */
- char *nickname = NULL;
- char *n = strrchr(filename, '/');
- if(n)
- n++;
-
- /* The following undocumented magic helps to avoid a SIGSEGV on call
- * of PK11_ReadRawAttribute() from SelectClientCert() when using an
- * immature version of libnsspem.so. For more details, go to
- * <https://bugzilla.redhat.com/733685>. */
- nickname = aprintf("PEM Token #1:%s", n);
- if(nickname) {
- CERTCertificate *cert = PK11_FindCertFromNickname(nickname, NULL);
- if(cert)
- CERT_DestroyCertificate(cert);
-
- free(nickname);
- }
- }
-
- return result;
-}
-
-/* add given CRL to cache if it is not already there */
-static CURLcode nss_cache_crl(SECItem *crl_der)
-{
- CERTCertDBHandle *db = CERT_GetDefaultCertDB();
- CERTSignedCrl *crl = SEC_FindCrlByDERCert(db, crl_der, 0);
- if(crl) {
- /* CRL already cached */
- SEC_DestroyCrl(crl);
- SECITEM_FreeItem(crl_der, PR_TRUE);
- return CURLE_OK;
- }
-
- /* acquire lock before call of CERT_CacheCRL() and accessing nss_crl_list */
- PR_Lock(nss_crllock);
-
- if(SECSuccess != CERT_CacheCRL(db, crl_der)) {
- /* unable to cache CRL */
- SECITEM_FreeItem(crl_der, PR_TRUE);
- PR_Unlock(nss_crllock);
- return CURLE_SSL_CRL_BADFILE;
- }
-
- /* store the CRL item so that we can free it in nss_cleanup() */
- if(insert_wrapped_ptr(&nss_crl_list, crl_der) != CURLE_OK) {
- if(SECSuccess == CERT_UncacheCRL(db, crl_der))
- SECITEM_FreeItem(crl_der, PR_TRUE);
- PR_Unlock(nss_crllock);
- return CURLE_OUT_OF_MEMORY;
- }
-
- /* we need to clear session cache, so that the CRL could take effect */
- SSL_ClearSessionCache();
- PR_Unlock(nss_crllock);
- return CURLE_OK;
-}
-
-static CURLcode nss_load_crl(const char *crlfilename)
-{
- PRFileDesc *infile;
- PRFileInfo info;
- SECItem filedata = { 0, NULL, 0 };
- SECItem *crl_der = NULL;
- char *body;
-
- infile = PR_Open(crlfilename, PR_RDONLY, 0);
- if(!infile)
- return CURLE_SSL_CRL_BADFILE;
-
- if(PR_SUCCESS != PR_GetOpenFileInfo(infile, &info))
- goto fail;
-
- if(!SECITEM_AllocItem(NULL, &filedata, info.size + /* zero ended */ 1))
- goto fail;
-
- if(info.size != PR_Read(infile, filedata.data, info.size))
- goto fail;
-
- crl_der = SECITEM_AllocItem(NULL, NULL, 0U);
- if(!crl_der)
- goto fail;
-
- /* place a trailing zero right after the visible data */
- body = (char *)filedata.data;
- body[--filedata.len] = '\0';
-
- body = strstr(body, "-----BEGIN");
- if(body) {
- /* assume ASCII */
- char *trailer;
- char *begin = PORT_Strchr(body, '\n');
- if(!begin)
- begin = PORT_Strchr(body, '\r');
- if(!begin)
- goto fail;
-
- trailer = strstr(++begin, "-----END");
- if(!trailer)
- goto fail;
-
- /* retrieve DER from ASCII */
- *trailer = '\0';
- if(ATOB_ConvertAsciiToItem(crl_der, begin))
- goto fail;
-
- SECITEM_FreeItem(&filedata, PR_FALSE);
- }
- else
- /* assume DER */
- *crl_der = filedata;
-
- PR_Close(infile);
- return nss_cache_crl(crl_der);
-
-fail:
- PR_Close(infile);
- SECITEM_FreeItem(crl_der, PR_TRUE);
- SECITEM_FreeItem(&filedata, PR_FALSE);
- return CURLE_SSL_CRL_BADFILE;
-}
-
-static CURLcode nss_load_key(struct Curl_easy *data, struct connectdata *conn,
- int sockindex, char *key_file)
-{
- PK11SlotInfo *slot, *tmp;
- SECStatus status;
- CURLcode result;
- struct ssl_connect_data *ssl = conn->ssl;
-
- (void)sockindex; /* unused */
-
- result = nss_create_object(ssl, CKO_PRIVATE_KEY, key_file, FALSE);
- if(result) {
- PR_SetError(SEC_ERROR_BAD_KEY, 0);
- return result;
- }
-
- slot = nss_find_slot_by_name("PEM Token #1");
- if(!slot)
- return CURLE_SSL_CERTPROBLEM;
-
- /* This will force the token to be seen as re-inserted */
- tmp = SECMOD_WaitForAnyTokenEvent(pem_module, 0, 0);
- if(tmp)
- PK11_FreeSlot(tmp);
- if(!PK11_IsPresent(slot)) {
- PK11_FreeSlot(slot);
- return CURLE_SSL_CERTPROBLEM;
- }
-
- status = PK11_Authenticate(slot, PR_TRUE, SSL_SET_OPTION(key_passwd));
- PK11_FreeSlot(slot);
-
- return (SECSuccess == status) ? CURLE_OK : CURLE_SSL_CERTPROBLEM;
-}
-
-static int display_error(struct Curl_easy *data, PRInt32 err,
- const char *filename)
-{
- switch(err) {
- case SEC_ERROR_BAD_PASSWORD:
- failf(data, "Unable to load client key: Incorrect password");
- return 1;
- case SEC_ERROR_UNKNOWN_CERT:
- failf(data, "Unable to load certificate %s", filename);
- return 1;
- default:
- break;
- }
- return 0; /* The caller will print a generic error */
-}
-
-static CURLcode cert_stuff(struct Curl_easy *data, struct connectdata *conn,
- int sockindex, char *cert_file, char *key_file)
-{
- CURLcode result;
-
- if(cert_file) {
- result = nss_load_cert(&conn->ssl[sockindex], cert_file, PR_FALSE);
- if(result) {
- const PRErrorCode err = PR_GetError();
- if(!display_error(data, err, cert_file)) {
- const char *err_name = nss_error_to_name(err);
- failf(data, "unable to load client cert: %d (%s)", err, err_name);
- }
-
- return result;
- }
- }
-
- if(key_file || (is_file(cert_file))) {
- if(key_file)
- result = nss_load_key(data, conn, sockindex, key_file);
- else
- /* In case the cert file also has the key */
- result = nss_load_key(data, conn, sockindex, cert_file);
- if(result) {
- const PRErrorCode err = PR_GetError();
- if(!display_error(data, err, key_file)) {
- const char *err_name = nss_error_to_name(err);
- failf(data, "unable to load client key: %d (%s)", err, err_name);
- }
-
- return result;
- }
- }
-
- return CURLE_OK;
-}
-
-static char *nss_get_password(PK11SlotInfo *slot, PRBool retry, void *arg)
-{
- (void)slot; /* unused */
-
- if(retry || !arg)
- return NULL;
- else
- return (char *)PORT_Strdup((char *)arg);
-}
-
-/* bypass the default SSL_AuthCertificate() hook in case we do not want to
- * verify peer */
-static SECStatus nss_auth_cert_hook(void *arg, PRFileDesc *fd, PRBool checksig,
- PRBool isServer)
-{
- struct Curl_easy *data = (struct Curl_easy *)arg;
- struct connectdata *conn = data->conn;
-
-#ifdef SSL_ENABLE_OCSP_STAPLING
- if(SSL_CONN_CONFIG(verifystatus)) {
- SECStatus cacheResult;
-
- const SECItemArray *csa = SSL_PeerStapledOCSPResponses(fd);
- if(!csa) {
- failf(data, "Invalid OCSP response");
- return SECFailure;
- }
-
- if(csa->len == 0) {
- failf(data, "No OCSP response received");
- return SECFailure;
- }
-
- cacheResult = CERT_CacheOCSPResponseFromSideChannel(
- CERT_GetDefaultCertDB(), SSL_PeerCertificate(fd),
- PR_Now(), &csa->items[0], arg
- );
-
- if(cacheResult != SECSuccess) {
- failf(data, "Invalid OCSP response");
- return cacheResult;
- }
- }
-#endif
-
- if(!SSL_CONN_CONFIG(verifypeer)) {
- infof(data, "skipping SSL peer certificate verification");
- return SECSuccess;
- }
-
- return SSL_AuthCertificate(CERT_GetDefaultCertDB(), fd, checksig, isServer);
-}
-
-/**
- * Inform the application that the handshake is complete.
- */
-static void HandshakeCallback(PRFileDesc *sock, void *arg)
-{
- struct Curl_easy *data = (struct Curl_easy *)arg;
- struct connectdata *conn = data->conn;
- unsigned int buflenmax = 50;
- unsigned char buf[50];
- unsigned int buflen;
- SSLNextProtoState state;
-
- if(!conn->bits.tls_enable_alpn) {
- return;
- }
-
- if(SSL_GetNextProto(sock, &state, buf, &buflen, buflenmax) == SECSuccess) {
-
- switch(state) {
-#if NSSVERNUM >= 0x031a00 /* 3.26.0 */
- /* used by NSS internally to implement 0-RTT */
- case SSL_NEXT_PROTO_EARLY_VALUE:
- /* fall through! */
-#endif
- case SSL_NEXT_PROTO_NO_SUPPORT:
- case SSL_NEXT_PROTO_NO_OVERLAP:
- infof(data, VTLS_INFOF_NO_ALPN);
- return;
-#ifdef SSL_ENABLE_ALPN
- case SSL_NEXT_PROTO_SELECTED:
- infof(data, VTLS_INFOF_ALPN_ACCEPTED_LEN_1STR, buflen, buf);
- break;
-#endif
- default:
- /* ignore SSL_NEXT_PROTO_NEGOTIATED */
- break;
- }
-
-#ifdef USE_HTTP2
- if(buflen == ALPN_H2_LENGTH &&
- !memcmp(ALPN_H2, buf, ALPN_H2_LENGTH)) {
- conn->alpn = CURL_HTTP_VERSION_2;
- }
- else
-#endif
- if(buflen == ALPN_HTTP_1_1_LENGTH &&
- !memcmp(ALPN_HTTP_1_1, buf, ALPN_HTTP_1_1_LENGTH)) {
- conn->alpn = CURL_HTTP_VERSION_1_1;
- }
-
- /* This callback might get called when PR_Recv() is used within
- * close_one() during a connection shutdown. At that point there might not
- * be any "bundle" associated with the connection anymore.
- */
- if(conn->bundle)
- Curl_multiuse_state(data, conn->alpn == CURL_HTTP_VERSION_2 ?
- BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
- }
-}
-
-#if NSSVERNUM >= 0x030f04 /* 3.15.4 */
-static SECStatus CanFalseStartCallback(PRFileDesc *sock, void *client_data,
- PRBool *canFalseStart)
-{
- struct Curl_easy *data = (struct Curl_easy *)client_data;
-
- SSLChannelInfo channelInfo;
- SSLCipherSuiteInfo cipherInfo;
-
- SECStatus rv;
- PRBool negotiatedExtension;
-
- *canFalseStart = PR_FALSE;
-
- if(SSL_GetChannelInfo(sock, &channelInfo, sizeof(channelInfo)) != SECSuccess)
- return SECFailure;
-
- if(SSL_GetCipherSuiteInfo(channelInfo.cipherSuite, &cipherInfo,
- sizeof(cipherInfo)) != SECSuccess)
- return SECFailure;
-
- /* Prevent version downgrade attacks from TLS 1.2, and avoid False Start for
- * TLS 1.3 and later. See https://bugzilla.mozilla.org/show_bug.cgi?id=861310
- */
- if(channelInfo.protocolVersion != SSL_LIBRARY_VERSION_TLS_1_2)
- goto end;
-
- /* Only allow ECDHE key exchange algorithm.
- * See https://bugzilla.mozilla.org/show_bug.cgi?id=952863 */
- if(cipherInfo.keaType != ssl_kea_ecdh)
- goto end;
-
- /* Prevent downgrade attacks on the symmetric cipher. We do not allow CBC
- * mode due to BEAST, POODLE, and other attacks on the MAC-then-Encrypt
- * design. See https://bugzilla.mozilla.org/show_bug.cgi?id=1109766 */
- if(cipherInfo.symCipher != ssl_calg_aes_gcm)
- goto end;
-
- /* Enforce ALPN to do False Start, as an indicator of server
- compatibility. */
- rv = SSL_HandshakeNegotiatedExtension(sock, ssl_app_layer_protocol_xtn,
- &negotiatedExtension);
- if(rv != SECSuccess || !negotiatedExtension) {
- rv = SSL_HandshakeNegotiatedExtension(sock, ssl_next_proto_nego_xtn,
- &negotiatedExtension);
- }
-
- if(rv != SECSuccess || !negotiatedExtension)
- goto end;
-
- *canFalseStart = PR_TRUE;
-
- infof(data, "Trying TLS False Start");
-
-end:
- return SECSuccess;
-}
-#endif
-
-static void display_cert_info(struct Curl_easy *data,
- CERTCertificate *cert)
-{
- char *subject, *issuer, *common_name;
- PRExplodedTime printableTime;
- char timeString[256];
- PRTime notBefore, notAfter;
-
- subject = CERT_NameToAscii(&cert->subject);
- issuer = CERT_NameToAscii(&cert->issuer);
- common_name = CERT_GetCommonName(&cert->subject);
- infof(data, "subject: %s", subject);
-
- CERT_GetCertTimes(cert, &notBefore, &notAfter);
- PR_ExplodeTime(notBefore, PR_GMTParameters, &printableTime);
- PR_FormatTime(timeString, 256, "%b %d %H:%M:%S %Y GMT", &printableTime);
- infof(data, " start date: %s", timeString);
- PR_ExplodeTime(notAfter, PR_GMTParameters, &printableTime);
- PR_FormatTime(timeString, 256, "%b %d %H:%M:%S %Y GMT", &printableTime);
- infof(data, " expire date: %s", timeString);
- infof(data, " common name: %s", common_name);
- infof(data, " issuer: %s", issuer);
-
- PR_Free(subject);
- PR_Free(issuer);
- PR_Free(common_name);
-}
-
-/* A number of certs that will never occur in a real server handshake */
-#define TOO_MANY_CERTS 300
-
-static CURLcode display_conn_info(struct Curl_easy *data, PRFileDesc *sock)
-{
- CURLcode result = CURLE_OK;
- SSLChannelInfo channel;
- SSLCipherSuiteInfo suite;
- CERTCertificate *cert;
- CERTCertificate *cert2;
- CERTCertificate *cert3;
- PRTime now;
-
- if(SSL_GetChannelInfo(sock, &channel, sizeof(channel)) ==
- SECSuccess && channel.length == sizeof(channel) &&
- channel.cipherSuite) {
- if(SSL_GetCipherSuiteInfo(channel.cipherSuite,
- &suite, sizeof(suite)) == SECSuccess) {
- infof(data, "SSL connection using %s", suite.cipherSuiteName);
- }
- }
-
- cert = SSL_PeerCertificate(sock);
- if(cert) {
- infof(data, "Server certificate:");
-
- if(!data->set.ssl.certinfo) {
- display_cert_info(data, cert);
- CERT_DestroyCertificate(cert);
- }
- else {
- /* Count certificates in chain. */
- int i = 1;
- now = PR_Now();
- if(!cert->isRoot) {
- cert2 = CERT_FindCertIssuer(cert, now, certUsageSSLCA);
- while(cert2) {
- i++;
- if(i >= TOO_MANY_CERTS) {
- CERT_DestroyCertificate(cert2);
- failf(data, "certificate loop");
- return CURLE_SSL_CERTPROBLEM;
- }
- if(cert2->isRoot) {
- CERT_DestroyCertificate(cert2);
- break;
- }
- cert3 = CERT_FindCertIssuer(cert2, now, certUsageSSLCA);
- CERT_DestroyCertificate(cert2);
- cert2 = cert3;
- }
- }
-
- result = Curl_ssl_init_certinfo(data, i);
- if(!result) {
- for(i = 0; cert; cert = cert2) {
- result = Curl_extract_certinfo(data, i++, (char *)cert->derCert.data,
- (char *)cert->derCert.data +
- cert->derCert.len);
- if(result)
- break;
-
- if(cert->isRoot) {
- CERT_DestroyCertificate(cert);
- break;
- }
-
- cert2 = CERT_FindCertIssuer(cert, now, certUsageSSLCA);
- CERT_DestroyCertificate(cert);
- }
- }
- }
- }
-
- return result;
-}
-
-static SECStatus BadCertHandler(void *arg, PRFileDesc *sock)
-{
- struct Curl_easy *data = (struct Curl_easy *)arg;
- struct connectdata *conn = data->conn;
- PRErrorCode err = PR_GetError();
- CERTCertificate *cert;
-
- /* remember the cert verification result */
- SSL_SET_OPTION_LVALUE(certverifyresult) = err;
-
- if(err == SSL_ERROR_BAD_CERT_DOMAIN && !SSL_CONN_CONFIG(verifyhost))
- /* we are asked not to verify the host name */
- return SECSuccess;
-
- /* print only info about the cert, the error is printed off the callback */
- cert = SSL_PeerCertificate(sock);
- if(cert) {
- infof(data, "Server certificate:");
- display_cert_info(data, cert);
- CERT_DestroyCertificate(cert);
- }
-
- return SECFailure;
-}
-
-/**
- *
- * Check that the Peer certificate's issuer certificate matches the one found
- * by issuer_nickname. This is not exactly the way OpenSSL and GNU TLS do the
- * issuer check, so we provide comments that mimic the OpenSSL
- * X509_check_issued function (in x509v3/v3_purp.c)
- */
-static SECStatus check_issuer_cert(PRFileDesc *sock,
- char *issuer_nickname)
-{
- CERTCertificate *cert, *cert_issuer, *issuer;
- SECStatus res = SECSuccess;
- void *proto_win = NULL;
-
- cert = SSL_PeerCertificate(sock);
- cert_issuer = CERT_FindCertIssuer(cert, PR_Now(), certUsageObjectSigner);
-
- proto_win = SSL_RevealPinArg(sock);
- issuer = PK11_FindCertFromNickname(issuer_nickname, proto_win);
-
- if((!cert_issuer) || (!issuer))
- res = SECFailure;
- else if(SECITEM_CompareItem(&cert_issuer->derCert,
- &issuer->derCert) != SECEqual)
- res = SECFailure;
-
- CERT_DestroyCertificate(cert);
- CERT_DestroyCertificate(issuer);
- CERT_DestroyCertificate(cert_issuer);
- return res;
-}
-
-static CURLcode cmp_peer_pubkey(struct ssl_connect_data *connssl,
- const char *pinnedpubkey)
-{
- CURLcode result = CURLE_SSL_PINNEDPUBKEYNOTMATCH;
- struct ssl_backend_data *backend = connssl->backend;
- struct Curl_easy *data = NULL;
- CERTCertificate *cert;
-
- DEBUGASSERT(backend);
- data = backend->data;
-
- if(!pinnedpubkey)
- /* no pinned public key specified */
- return CURLE_OK;
-
- /* get peer certificate */
- cert = SSL_PeerCertificate(backend->handle);
- if(cert) {
- /* extract public key from peer certificate */
- SECKEYPublicKey *pubkey = CERT_ExtractPublicKey(cert);
- if(pubkey) {
- /* encode the public key as DER */
- SECItem *cert_der = PK11_DEREncodePublicKey(pubkey);
- if(cert_der) {
- /* compare the public key with the pinned public key */
- result = Curl_pin_peer_pubkey(data, pinnedpubkey, cert_der->data,
- cert_der->len);
- SECITEM_FreeItem(cert_der, PR_TRUE);
- }
- SECKEY_DestroyPublicKey(pubkey);
- }
- CERT_DestroyCertificate(cert);
- }
-
- /* report the resulting status */
- switch(result) {
- case CURLE_OK:
- infof(data, "pinned public key verified successfully");
- break;
- case CURLE_SSL_PINNEDPUBKEYNOTMATCH:
- failf(data, "failed to verify pinned public key");
- break;
- default:
- /* OOM, etc. */
- break;
- }
-
- return result;
-}
-
-/**
- *
- * Callback to pick the SSL client certificate.
- */
-static SECStatus SelectClientCert(void *arg, PRFileDesc *sock,
- struct CERTDistNamesStr *caNames,
- struct CERTCertificateStr **pRetCert,
- struct SECKEYPrivateKeyStr **pRetKey)
-{
- struct ssl_connect_data *connssl = (struct ssl_connect_data *)arg;
- struct ssl_backend_data *backend = connssl->backend;
- struct Curl_easy *data = NULL;
- const char *nickname = NULL;
- static const char pem_slotname[] = "PEM Token #1";
-
- DEBUGASSERT(backend);
-
- data = backend->data;
- nickname = backend->client_nickname;
-
- if(backend->obj_clicert) {
- /* use the cert/key provided by PEM reader */
- SECItem cert_der = { 0, NULL, 0 };
- void *proto_win = SSL_RevealPinArg(sock);
- struct CERTCertificateStr *cert;
- struct SECKEYPrivateKeyStr *key;
-
- PK11SlotInfo *slot = nss_find_slot_by_name(pem_slotname);
- if(!slot) {
- failf(data, "NSS: PK11 slot not found: %s", pem_slotname);
- return SECFailure;
- }
-
- if(PK11_ReadRawAttribute(PK11_TypeGeneric, backend->obj_clicert, CKA_VALUE,
- &cert_der) != SECSuccess) {
- failf(data, "NSS: CKA_VALUE not found in PK11 generic object");
- PK11_FreeSlot(slot);
- return SECFailure;
- }
-
- cert = PK11_FindCertFromDERCertItem(slot, &cert_der, proto_win);
- SECITEM_FreeItem(&cert_der, PR_FALSE);
- if(!cert) {
- failf(data, "NSS: client certificate from file not found");
- PK11_FreeSlot(slot);
- return SECFailure;
- }
-
- key = PK11_FindPrivateKeyFromCert(slot, cert, NULL);
- PK11_FreeSlot(slot);
- if(!key) {
- failf(data, "NSS: private key from file not found");
- CERT_DestroyCertificate(cert);
- return SECFailure;
- }
-
- infof(data, "NSS: client certificate from file");
- display_cert_info(data, cert);
-
- *pRetCert = cert;
- *pRetKey = key;
- return SECSuccess;
- }
-
- /* use the default NSS hook */
- if(SECSuccess != NSS_GetClientAuthData((void *)nickname, sock, caNames,
- pRetCert, pRetKey)
- || !*pRetCert) {
-
- if(!nickname)
- failf(data, "NSS: client certificate not found (nickname not "
- "specified)");
- else
- failf(data, "NSS: client certificate not found: %s", nickname);
-
- return SECFailure;
- }
-
- /* get certificate nickname if any */
- nickname = (*pRetCert)->nickname;
- if(!nickname)
- nickname = "[unknown]";
-
- if(!strncmp(nickname, pem_slotname, sizeof(pem_slotname) - 1U)) {
- failf(data, "NSS: refusing previously loaded certificate from file: %s",
- nickname);
- return SECFailure;
- }
-
- if(!*pRetKey) {
- failf(data, "NSS: private key not found for certificate: %s", nickname);
- return SECFailure;
- }
-
- infof(data, "NSS: using client certificate: %s", nickname);
- display_cert_info(data, *pRetCert);
- return SECSuccess;
-}
-
-/* update blocking direction in case of PR_WOULD_BLOCK_ERROR */
-static void nss_update_connecting_state(ssl_connect_state state, void *secret)
-{
- struct ssl_connect_data *connssl = (struct ssl_connect_data *)secret;
- if(PR_GetError() != PR_WOULD_BLOCK_ERROR)
- /* an unrelated error is passing by */
- return;
-
- switch(connssl->connecting_state) {
- case ssl_connect_2:
- case ssl_connect_2_reading:
- case ssl_connect_2_writing:
- break;
- default:
- /* we are not called from an SSL handshake */
- return;
- }
-
- /* update the state accordingly */
- connssl->connecting_state = state;
-}
-
-/* recv() wrapper we use to detect blocking direction during SSL handshake */
-static PRInt32 nspr_io_recv(PRFileDesc *fd, void *buf, PRInt32 amount,
- PRIntn flags, PRIntervalTime timeout)
-{
- const PRRecvFN recv_fn = fd->lower->methods->recv;
- const PRInt32 rv = recv_fn(fd->lower, buf, amount, flags, timeout);
- if(rv < 0)
- /* check for PR_WOULD_BLOCK_ERROR and update blocking direction */
- nss_update_connecting_state(ssl_connect_2_reading, fd->secret);
- return rv;
-}
-
-/* send() wrapper we use to detect blocking direction during SSL handshake */
-static PRInt32 nspr_io_send(PRFileDesc *fd, const void *buf, PRInt32 amount,
- PRIntn flags, PRIntervalTime timeout)
-{
- const PRSendFN send_fn = fd->lower->methods->send;
- const PRInt32 rv = send_fn(fd->lower, buf, amount, flags, timeout);
- if(rv < 0)
- /* check for PR_WOULD_BLOCK_ERROR and update blocking direction */
- nss_update_connecting_state(ssl_connect_2_writing, fd->secret);
- return rv;
-}
-
-/* close() wrapper to avoid assertion failure due to fd->secret != NULL */
-static PRStatus nspr_io_close(PRFileDesc *fd)
-{
- const PRCloseFN close_fn = PR_GetDefaultIOMethods()->close;
- fd->secret = NULL;
- return close_fn(fd);
-}
-
-/* load a PKCS #11 module */
-static CURLcode nss_load_module(SECMODModule **pmod, const char *library,
- const char *name)
-{
- char *config_string;
- SECMODModule *module = *pmod;
- if(module)
- /* already loaded */
- return CURLE_OK;
-
- config_string = aprintf("library=%s name=%s", library, name);
- if(!config_string)
- return CURLE_OUT_OF_MEMORY;
-
- module = SECMOD_LoadUserModule(config_string, NULL, PR_FALSE);
- free(config_string);
-
- if(module && module->loaded) {
- /* loaded successfully */
- *pmod = module;
- return CURLE_OK;
- }
-
- if(module)
- SECMOD_DestroyModule(module);
- return CURLE_FAILED_INIT;
-}
-
-/* unload a PKCS #11 module */
-static void nss_unload_module(SECMODModule **pmod)
-{
- SECMODModule *module = *pmod;
- if(!module)
- /* not loaded */
- return;
-
- if(SECMOD_UnloadUserModule(module) != SECSuccess)
- /* unload failed */
- return;
-
- SECMOD_DestroyModule(module);
- *pmod = NULL;
-}
-
-/* data might be NULL */
-static CURLcode nss_init_core(struct Curl_easy *data, const char *cert_dir)
-{
- NSSInitParameters initparams;
- PRErrorCode err;
- const char *err_name;
-
- if(nss_context)
- return CURLE_OK;
-
- memset((void *) &initparams, '\0', sizeof(initparams));
- initparams.length = sizeof(initparams);
-
- if(cert_dir) {
- char *certpath = aprintf("sql:%s", cert_dir);
- if(!certpath)
- return CURLE_OUT_OF_MEMORY;
-
- infof(data, "Initializing NSS with certpath: %s", certpath);
- nss_context = NSS_InitContext(certpath, "", "", "", &initparams,
- NSS_INIT_READONLY | NSS_INIT_PK11RELOAD);
- free(certpath);
-
- if(nss_context)
- return CURLE_OK;
-
- err = PR_GetError();
- err_name = nss_error_to_name(err);
- infof(data, "Unable to initialize NSS database: %d (%s)", err, err_name);
- }
-
- infof(data, "Initializing NSS with certpath: none");
- nss_context = NSS_InitContext("", "", "", "", &initparams, NSS_INIT_READONLY
- | NSS_INIT_NOCERTDB | NSS_INIT_NOMODDB | NSS_INIT_FORCEOPEN
- | NSS_INIT_NOROOTINIT | NSS_INIT_OPTIMIZESPACE | NSS_INIT_PK11RELOAD);
- if(nss_context)
- return CURLE_OK;
-
- err = PR_GetError();
- err_name = nss_error_to_name(err);
- failf(data, "Unable to initialize NSS: %d (%s)", err, err_name);
- return CURLE_SSL_CACERT_BADFILE;
-}
-
-/* data might be NULL */
-static CURLcode nss_setup(struct Curl_easy *data)
-{
- char *cert_dir;
- struct_stat st;
- CURLcode result;
-
- if(initialized)
- return CURLE_OK;
-
- /* list of all CRL items we need to destroy in nss_cleanup() */
- Curl_llist_init(&nss_crl_list, nss_destroy_crl_item);
-
- /* First we check if $SSL_DIR points to a valid dir */
- cert_dir = getenv("SSL_DIR");
- if(cert_dir) {
- if((stat(cert_dir, &st) != 0) ||
- (!S_ISDIR(st.st_mode))) {
- cert_dir = NULL;
- }
- }
-
- /* Now we check if the default location is a valid dir */
- if(!cert_dir) {
- if((stat(SSL_DIR, &st) == 0) &&
- (S_ISDIR(st.st_mode))) {
- cert_dir = (char *)SSL_DIR;
- }
- }
-
- if(nspr_io_identity == PR_INVALID_IO_LAYER) {
- /* allocate an identity for our own NSPR I/O layer */
- nspr_io_identity = PR_GetUniqueIdentity("libcurl");
- if(nspr_io_identity == PR_INVALID_IO_LAYER)
- return CURLE_OUT_OF_MEMORY;
-
- /* the default methods just call down to the lower I/O layer */
- memcpy(&nspr_io_methods, PR_GetDefaultIOMethods(),
- sizeof(nspr_io_methods));
-
- /* override certain methods in the table by our wrappers */
- nspr_io_methods.recv = nspr_io_recv;
- nspr_io_methods.send = nspr_io_send;
- nspr_io_methods.close = nspr_io_close;
- }
-
- result = nss_init_core(data, cert_dir);
- if(result)
- return result;
-
- if(!any_cipher_enabled())
- NSS_SetDomesticPolicy();
-
- initialized = 1;
-
- return CURLE_OK;
-}
-
-/**
- * Global SSL init
- *
- * @retval 0 error initializing SSL
- * @retval 1 SSL initialized successfully
- */
-static int nss_init(void)
-{
- /* curl_global_init() is not thread-safe so this test is ok */
- if(!nss_initlock) {
- PR_Init(PR_USER_THREAD, PR_PRIORITY_NORMAL, 0);
- nss_initlock = PR_NewLock();
- nss_crllock = PR_NewLock();
- nss_findslot_lock = PR_NewLock();
- nss_trustload_lock = PR_NewLock();
- }
-
- /* We will actually initialize NSS later */
-
- return 1;
-}
-
-/* data might be NULL */
-CURLcode Curl_nss_force_init(struct Curl_easy *data)
-{
- CURLcode result;
- if(!nss_initlock) {
- if(data)
- failf(data, "unable to initialize NSS, curl_global_init() should have "
- "been called with CURL_GLOBAL_SSL or CURL_GLOBAL_ALL");
- return CURLE_FAILED_INIT;
- }
-
- PR_Lock(nss_initlock);
- result = nss_setup(data);
- PR_Unlock(nss_initlock);
-
- return result;
-}
-
-/* Global cleanup */
-static void nss_cleanup(void)
-{
- /* This function isn't required to be threadsafe and this is only done
- * as a safety feature.
- */
- PR_Lock(nss_initlock);
- if(initialized) {
- /* Free references to client certificates held in the SSL session cache.
- * Omitting this hampers destruction of the security module owning
- * the certificates. */
- SSL_ClearSessionCache();
-
- nss_unload_module(&pem_module);
- nss_unload_module(&trust_module);
- NSS_ShutdownContext(nss_context);
- nss_context = NULL;
- }
-
- /* destroy all CRL items */
- Curl_llist_destroy(&nss_crl_list, NULL);
-
- PR_Unlock(nss_initlock);
-
- PR_DestroyLock(nss_initlock);
- PR_DestroyLock(nss_crllock);
- PR_DestroyLock(nss_findslot_lock);
- PR_DestroyLock(nss_trustload_lock);
- nss_initlock = NULL;
-
- initialized = 0;
-}
-
-/*
- * This function uses SSL_peek to determine connection status.
- *
- * Return codes:
- * 1 means the connection is still in place
- * 0 means the connection has been closed
- * -1 means the connection status is unknown
- */
-static int nss_check_cxn(struct connectdata *conn)
-{
- struct ssl_connect_data *connssl = &conn->ssl[FIRSTSOCKET];
- struct ssl_backend_data *backend = connssl->backend;
- int rc;
- char buf;
-
- DEBUGASSERT(backend);
-
- rc =
- PR_Recv(backend->handle, (void *)&buf, 1, PR_MSG_PEEK,
- PR_SecondsToInterval(1));
- if(rc > 0)
- return 1; /* connection still in place */
-
- if(rc == 0)
- return 0; /* connection has been closed */
-
- return -1; /* connection status unknown */
-}
-
-static void close_one(struct ssl_connect_data *connssl)
-{
- /* before the cleanup, check whether we are using a client certificate */
- struct ssl_backend_data *backend = connssl->backend;
- bool client_cert = true;
-
- DEBUGASSERT(backend);
-
- client_cert = (backend->client_nickname != NULL)
- || (backend->obj_clicert != NULL);
-
- if(backend->handle) {
- char buf[32];
- /* Maybe the server has already sent a close notify alert.
- Read it to avoid an RST on the TCP connection. */
- (void)PR_Recv(backend->handle, buf, (int)sizeof(buf), 0,
- PR_INTERVAL_NO_WAIT);
- }
-
- free(backend->client_nickname);
- backend->client_nickname = NULL;
-
- /* destroy all NSS objects in order to avoid failure of NSS shutdown */
- Curl_llist_destroy(&backend->obj_list, NULL);
- backend->obj_clicert = NULL;
-
- if(backend->handle) {
- if(client_cert)
- /* A server might require different authentication based on the
- * particular path being requested by the client. To support this
- * scenario, we must ensure that a connection will never reuse the
- * authentication data from a previous connection. */
- SSL_InvalidateSession(backend->handle);
-
- PR_Close(backend->handle);
- backend->handle = NULL;
- }
-}
-
-/*
- * This function is called when an SSL connection is closed.
- */
-static void nss_close(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
-{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
-#ifndef CURL_DISABLE_PROXY
- struct ssl_connect_data *connssl_proxy = &conn->proxy_ssl[sockindex];
-#endif
- struct ssl_backend_data *backend = connssl->backend;
- (void)data;
-
- DEBUGASSERT(backend);
-#ifndef CURL_DISABLE_PROXY
- DEBUGASSERT(connssl_proxy->backend != NULL);
-#endif
-
- if(backend->handle
-#ifndef CURL_DISABLE_PROXY
- || connssl_proxy->backend->handle
-#endif
- ) {
- /* NSS closes the socket we previously handed to it, so we must mark it
- as closed to avoid double close */
- fake_sclose(conn->sock[sockindex]);
- conn->sock[sockindex] = CURL_SOCKET_BAD;
- }
-
-#ifndef CURL_DISABLE_PROXY
- if(backend->handle)
- /* nss_close(connssl) will transitively close also
- connssl_proxy->backend->handle if both are used. Clear it to avoid
- a double close leading to crash. */
- connssl_proxy->backend->handle = NULL;
-
- close_one(connssl_proxy);
-#endif
- close_one(connssl);
-}
-
-/* return true if NSS can provide error code (and possibly msg) for the
- error */
-static bool is_nss_error(CURLcode err)
-{
- switch(err) {
- case CURLE_PEER_FAILED_VERIFICATION:
- case CURLE_SSL_CERTPROBLEM:
- case CURLE_SSL_CONNECT_ERROR:
- case CURLE_SSL_ISSUER_ERROR:
- return true;
-
- default:
- return false;
- }
-}
-
-/* return true if the given error code is related to a client certificate */
-static bool is_cc_error(PRInt32 err)
-{
- switch(err) {
- case SSL_ERROR_BAD_CERT_ALERT:
- case SSL_ERROR_EXPIRED_CERT_ALERT:
- case SSL_ERROR_REVOKED_CERT_ALERT:
- return true;
-
- default:
- return false;
- }
-}
-
-static Curl_recv nss_recv;
-static Curl_send nss_send;
-
-static CURLcode nss_load_ca_certificates(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex)
-{
- const char *cafile = SSL_CONN_CONFIG(CAfile);
- const char *capath = SSL_CONN_CONFIG(CApath);
- bool use_trust_module;
- CURLcode result = CURLE_OK;
-
- /* treat empty string as unset */
- if(cafile && !cafile[0])
- cafile = NULL;
- if(capath && !capath[0])
- capath = NULL;
-
- infof(data, " CAfile: %s", cafile ? cafile : "none");
- infof(data, " CApath: %s", capath ? capath : "none");
-
- /* load libnssckbi.so if no other trust roots were specified */
- use_trust_module = !cafile && !capath;
-
- PR_Lock(nss_trustload_lock);
- if(use_trust_module && !trust_module) {
- /* libnssckbi.so needed but not yet loaded --> load it! */
- result = nss_load_module(&trust_module, trust_library, "trust");
- infof(data, "%s %s", (result) ? "failed to load" : "loaded",
- trust_library);
- if(result == CURLE_FAILED_INIT)
- /* If libnssckbi.so is not available (or fails to load), one can still
- use CA certificates stored in NSS database. Ignore the failure. */
- result = CURLE_OK;
- }
- else if(!use_trust_module && trust_module) {
- /* libnssckbi.so not needed but already loaded --> unload it! */
- infof(data, "unloading %s", trust_library);
- nss_unload_module(&trust_module);
- }
- PR_Unlock(nss_trustload_lock);
-
- if(cafile)
- result = nss_load_cert(&conn->ssl[sockindex], cafile, PR_TRUE);
-
- if(result)
- return result;
-
- if(capath) {
- struct_stat st;
- if(stat(capath, &st) == -1)
- return CURLE_SSL_CACERT_BADFILE;
-
- if(S_ISDIR(st.st_mode)) {
- PRDirEntry *entry;
- PRDir *dir = PR_OpenDir(capath);
- if(!dir)
- return CURLE_SSL_CACERT_BADFILE;
-
- while((entry =
- PR_ReadDir(dir, (PRDirFlags)(PR_SKIP_BOTH | PR_SKIP_HIDDEN)))) {
- char *fullpath = aprintf("%s/%s", capath, entry->name);
- if(!fullpath) {
- PR_CloseDir(dir);
- return CURLE_OUT_OF_MEMORY;
- }
-
- if(CURLE_OK != nss_load_cert(&conn->ssl[sockindex], fullpath, PR_TRUE))
- /* This is purposefully tolerant of errors so non-PEM files can
- * be in the same directory */
- infof(data, "failed to load '%s' from CURLOPT_CAPATH", fullpath);
-
- free(fullpath);
- }
-
- PR_CloseDir(dir);
- }
- else
- infof(data, "WARNING: CURLOPT_CAPATH not a directory (%s)", capath);
- }
-
- return CURLE_OK;
-}
-
-static CURLcode nss_sslver_from_curl(PRUint16 *nssver, long version)
-{
- switch(version) {
- case CURL_SSLVERSION_SSLv2:
- *nssver = SSL_LIBRARY_VERSION_2;
- return CURLE_OK;
-
- case CURL_SSLVERSION_SSLv3:
- return CURLE_NOT_BUILT_IN;
-
- case CURL_SSLVERSION_TLSv1_0:
- *nssver = SSL_LIBRARY_VERSION_TLS_1_0;
- return CURLE_OK;
-
- case CURL_SSLVERSION_TLSv1_1:
-#ifdef SSL_LIBRARY_VERSION_TLS_1_1
- *nssver = SSL_LIBRARY_VERSION_TLS_1_1;
- return CURLE_OK;
-#else
- return CURLE_SSL_CONNECT_ERROR;
-#endif
-
- case CURL_SSLVERSION_TLSv1_2:
-#ifdef SSL_LIBRARY_VERSION_TLS_1_2
- *nssver = SSL_LIBRARY_VERSION_TLS_1_2;
- return CURLE_OK;
-#else
- return CURLE_SSL_CONNECT_ERROR;
-#endif
-
- case CURL_SSLVERSION_TLSv1_3:
-#ifdef SSL_LIBRARY_VERSION_TLS_1_3
- *nssver = SSL_LIBRARY_VERSION_TLS_1_3;
- return CURLE_OK;
-#else
- return CURLE_SSL_CONNECT_ERROR;
-#endif
-
- default:
- return CURLE_SSL_CONNECT_ERROR;
- }
-}
-
-static CURLcode nss_init_sslver(SSLVersionRange *sslver,
- struct Curl_easy *data,
- struct connectdata *conn)
-{
- CURLcode result;
- const long min = SSL_CONN_CONFIG(version);
- const long max = SSL_CONN_CONFIG(version_max);
- SSLVersionRange vrange;
-
- switch(min) {
- case CURL_SSLVERSION_TLSv1:
- case CURL_SSLVERSION_DEFAULT:
- /* Bump our minimum TLS version if NSS has stricter requirements. */
- if(SSL_VersionRangeGetDefault(ssl_variant_stream, &vrange) != SECSuccess)
- return CURLE_SSL_CONNECT_ERROR;
- if(sslver->min < vrange.min)
- sslver->min = vrange.min;
- break;
- default:
- result = nss_sslver_from_curl(&sslver->min, min);
- if(result) {
- failf(data, "unsupported min version passed via CURLOPT_SSLVERSION");
- return result;
- }
- }
-
- switch(max) {
- case CURL_SSLVERSION_MAX_NONE:
- case CURL_SSLVERSION_MAX_DEFAULT:
- break;
- default:
- result = nss_sslver_from_curl(&sslver->max, max >> 16);
- if(result) {
- failf(data, "unsupported max version passed via CURLOPT_SSLVERSION");
- return result;
- }
- }
-
- return CURLE_OK;
-}
-
-static CURLcode nss_fail_connect(struct ssl_connect_data *connssl,
- struct Curl_easy *data,
- CURLcode curlerr)
-{
- struct ssl_backend_data *backend = connssl->backend;
-
- DEBUGASSERT(backend);
-
- if(is_nss_error(curlerr)) {
- /* read NSPR error code */
- PRErrorCode err = PR_GetError();
- if(is_cc_error(err))
- curlerr = CURLE_SSL_CERTPROBLEM;
-
- /* print the error number and error string */
- infof(data, "NSS error %d (%s)", err, nss_error_to_name(err));
-
- /* print a human-readable message describing the error if available */
- nss_print_error_message(data, err);
- }
-
- /* cleanup on connection failure */
- Curl_llist_destroy(&backend->obj_list, NULL);
-
- return curlerr;
-}
-
-/* Switch the SSL socket into blocking or non-blocking mode. */
-static CURLcode nss_set_blocking(struct ssl_connect_data *connssl,
- struct Curl_easy *data,
- bool blocking)
-{
- PRSocketOptionData sock_opt;
- struct ssl_backend_data *backend = connssl->backend;
-
- DEBUGASSERT(backend);
-
- sock_opt.option = PR_SockOpt_Nonblocking;
- sock_opt.value.non_blocking = !blocking;
-
- if(PR_SetSocketOption(backend->handle, &sock_opt) != PR_SUCCESS)
- return nss_fail_connect(connssl, data, CURLE_SSL_CONNECT_ERROR);
-
- return CURLE_OK;
-}
-
-static CURLcode nss_setup_connect(struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
-{
- PRFileDesc *model = NULL;
- PRFileDesc *nspr_io = NULL;
- PRFileDesc *nspr_io_stub = NULL;
- PRBool ssl_no_cache;
- PRBool ssl_cbc_random_iv;
- curl_socket_t sockfd = conn->sock[sockindex];
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
- CURLcode result;
- bool second_layer = FALSE;
- SSLVersionRange sslver_supported;
- SSLVersionRange sslver = {
- SSL_LIBRARY_VERSION_TLS_1_0, /* min */
-#ifdef SSL_LIBRARY_VERSION_TLS_1_3
- SSL_LIBRARY_VERSION_TLS_1_3 /* max */
-#elif defined SSL_LIBRARY_VERSION_TLS_1_2
- SSL_LIBRARY_VERSION_TLS_1_2
-#elif defined SSL_LIBRARY_VERSION_TLS_1_1
- SSL_LIBRARY_VERSION_TLS_1_1
-#else
- SSL_LIBRARY_VERSION_TLS_1_0
-#endif
- };
- char *snihost = Curl_ssl_snihost(data, SSL_HOST_NAME(), NULL);
- if(!snihost) {
- failf(data, "Failed to set SNI");
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- DEBUGASSERT(backend);
-
- backend->data = data;
-
- /* list of all NSS objects we need to destroy in nss_do_close() */
- Curl_llist_init(&backend->obj_list, nss_destroy_object);
-
- PR_Lock(nss_initlock);
- result = nss_setup(data);
- if(result) {
- PR_Unlock(nss_initlock);
- goto error;
- }
-
- PK11_SetPasswordFunc(nss_get_password);
-
- result = nss_load_module(&pem_module, pem_library, "PEM");
- PR_Unlock(nss_initlock);
- if(result == CURLE_FAILED_INIT)
- infof(data, "WARNING: failed to load NSS PEM library %s. Using "
- "OpenSSL PEM certificates will not work.", pem_library);
- else if(result)
- goto error;
-
- result = CURLE_SSL_CONNECT_ERROR;
-
- model = PR_NewTCPSocket();
- if(!model)
- goto error;
- model = SSL_ImportFD(NULL, model);
-
- if(SSL_OptionSet(model, SSL_SECURITY, PR_TRUE) != SECSuccess)
- goto error;
- if(SSL_OptionSet(model, SSL_HANDSHAKE_AS_SERVER, PR_FALSE) != SECSuccess)
- goto error;
- if(SSL_OptionSet(model, SSL_HANDSHAKE_AS_CLIENT, PR_TRUE) != SECSuccess)
- goto error;
-
- /* do not use SSL cache if disabled or we are not going to verify peer */
- ssl_no_cache = (SSL_SET_OPTION(primary.sessionid)
- && SSL_CONN_CONFIG(verifypeer)) ? PR_FALSE : PR_TRUE;
- if(SSL_OptionSet(model, SSL_NO_CACHE, ssl_no_cache) != SECSuccess)
- goto error;
-
- /* enable/disable the requested SSL version(s) */
- if(nss_init_sslver(&sslver, data, conn) != CURLE_OK)
- goto error;
- if(SSL_VersionRangeGetSupported(ssl_variant_stream,
- &sslver_supported) != SECSuccess)
- goto error;
- if(sslver_supported.max < sslver.max && sslver_supported.max >= sslver.min) {
- char *sslver_req_str, *sslver_supp_str;
- sslver_req_str = nss_sslver_to_name(sslver.max);
- sslver_supp_str = nss_sslver_to_name(sslver_supported.max);
- if(sslver_req_str && sslver_supp_str)
- infof(data, "Falling back from %s to max supported SSL version (%s)",
- sslver_req_str, sslver_supp_str);
- free(sslver_req_str);
- free(sslver_supp_str);
- sslver.max = sslver_supported.max;
- }
- if(SSL_VersionRangeSet(model, &sslver) != SECSuccess)
- goto error;
-
- ssl_cbc_random_iv = !SSL_SET_OPTION(enable_beast);
-#ifdef SSL_CBC_RANDOM_IV
- /* unless the user explicitly asks to allow the protocol vulnerability, we
- use the work-around */
- if(SSL_OptionSet(model, SSL_CBC_RANDOM_IV, ssl_cbc_random_iv) != SECSuccess)
- infof(data, "WARNING: failed to set SSL_CBC_RANDOM_IV = %d",
- ssl_cbc_random_iv);
-#else
- if(ssl_cbc_random_iv)
- infof(data, "WARNING: support for SSL_CBC_RANDOM_IV not compiled in");
-#endif
-
- if(SSL_CONN_CONFIG(cipher_list)) {
- if(set_ciphers(data, model, SSL_CONN_CONFIG(cipher_list)) != SECSuccess) {
- result = CURLE_SSL_CIPHER;
- goto error;
- }
- }
-
- if(!SSL_CONN_CONFIG(verifypeer) && SSL_CONN_CONFIG(verifyhost))
- infof(data, "WARNING: ignoring value of ssl.verifyhost");
-
- /* bypass the default SSL_AuthCertificate() hook in case we do not want to
- * verify peer */
- if(SSL_AuthCertificateHook(model, nss_auth_cert_hook, data) != SECSuccess)
- goto error;
-
- /* not checked yet */
- SSL_SET_OPTION_LVALUE(certverifyresult) = 0;
-
- if(SSL_BadCertHook(model, BadCertHandler, data) != SECSuccess)
- goto error;
-
- if(SSL_HandshakeCallback(model, HandshakeCallback, data) != SECSuccess)
- goto error;
-
- {
- const CURLcode rv = nss_load_ca_certificates(data, conn, sockindex);
- if((rv == CURLE_SSL_CACERT_BADFILE) && !SSL_CONN_CONFIG(verifypeer))
- /* not a fatal error because we are not going to verify the peer */
- infof(data, "WARNING: CA certificates failed to load");
- else if(rv) {
- result = rv;
- goto error;
- }
- }
-
- if(SSL_SET_OPTION(primary.CRLfile)) {
- const CURLcode rv = nss_load_crl(SSL_SET_OPTION(primary.CRLfile));
- if(rv) {
- result = rv;
- goto error;
- }
- infof(data, " CRLfile: %s", SSL_SET_OPTION(primary.CRLfile));
- }
-
- if(SSL_SET_OPTION(primary.clientcert)) {
- char *nickname = dup_nickname(data, SSL_SET_OPTION(primary.clientcert));
- if(nickname) {
- /* we are not going to use libnsspem.so to read the client cert */
- backend->obj_clicert = NULL;
- }
- else {
- CURLcode rv = cert_stuff(data, conn, sockindex,
- SSL_SET_OPTION(primary.clientcert),
- SSL_SET_OPTION(key));
- if(rv) {
- /* failf() is already done in cert_stuff() */
- result = rv;
- goto error;
- }
- }
-
- /* store the nickname for SelectClientCert() called during handshake */
- backend->client_nickname = nickname;
- }
- else
- backend->client_nickname = NULL;
-
- if(SSL_GetClientAuthDataHook(model, SelectClientCert,
- (void *)connssl) != SECSuccess) {
- result = CURLE_SSL_CERTPROBLEM;
- goto error;
- }
-
-#ifndef CURL_DISABLE_PROXY
- if(conn->proxy_ssl[sockindex].use) {
- struct ssl_backend_data *proxy_backend;
- proxy_backend = conn->proxy_ssl[sockindex].backend;
- DEBUGASSERT(ssl_connection_complete == conn->proxy_ssl[sockindex].state);
- DEBUGASSERT(proxy_backend);
- DEBUGASSERT(proxy_backend->handle);
- nspr_io = proxy_backend->handle;
- second_layer = TRUE;
- }
-#endif
- else {
- /* wrap OS file descriptor by NSPR's file descriptor abstraction */
- nspr_io = PR_ImportTCPSocket(sockfd);
- if(!nspr_io)
- goto error;
- }
-
- /* create our own NSPR I/O layer */
- nspr_io_stub = PR_CreateIOLayerStub(nspr_io_identity, &nspr_io_methods);
- if(!nspr_io_stub) {
- if(!second_layer)
- PR_Close(nspr_io);
- goto error;
- }
-
- /* make the per-connection data accessible from NSPR I/O callbacks */
- nspr_io_stub->secret = (void *)connssl;
-
- /* push our new layer to the NSPR I/O stack */
- if(PR_PushIOLayer(nspr_io, PR_TOP_IO_LAYER, nspr_io_stub) != PR_SUCCESS) {
- if(!second_layer)
- PR_Close(nspr_io);
- PR_Close(nspr_io_stub);
- goto error;
- }
-
- /* import our model socket onto the current I/O stack */
- backend->handle = SSL_ImportFD(model, nspr_io);
- if(!backend->handle) {
- if(!second_layer)
- PR_Close(nspr_io);
- goto error;
- }
-
- PR_Close(model); /* We don't need this any more */
- model = NULL;
-
- /* This is the password associated with the cert that we're using */
- if(SSL_SET_OPTION(key_passwd)) {
- SSL_SetPKCS11PinArg(backend->handle, SSL_SET_OPTION(key_passwd));
- }
-
-#ifdef SSL_ENABLE_OCSP_STAPLING
- if(SSL_CONN_CONFIG(verifystatus)) {
- if(SSL_OptionSet(backend->handle, SSL_ENABLE_OCSP_STAPLING, PR_TRUE)
- != SECSuccess)
- goto error;
- }
-#endif
-
-#ifdef SSL_ENABLE_ALPN
- if(SSL_OptionSet(backend->handle, SSL_ENABLE_ALPN, conn->bits.tls_enable_alpn
- ? PR_TRUE : PR_FALSE) != SECSuccess)
- goto error;
-#endif
-
-#if NSSVERNUM >= 0x030f04 /* 3.15.4 */
- if(data->set.ssl.falsestart) {
- if(SSL_OptionSet(backend->handle, SSL_ENABLE_FALSE_START, PR_TRUE)
- != SECSuccess)
- goto error;
-
- if(SSL_SetCanFalseStartCallback(backend->handle, CanFalseStartCallback,
- data) != SECSuccess)
- goto error;
- }
-#endif
-
-#if defined(SSL_ENABLE_ALPN)
- if(conn->bits.tls_enable_alpn) {
- int cur = 0;
- unsigned char protocols[128];
-
-#ifdef USE_HTTP2
- if(data->state.httpwant >= CURL_HTTP_VERSION_2
-#ifndef CURL_DISABLE_PROXY
- && (!SSL_IS_PROXY() || !conn->bits.tunnel_proxy)
-#endif
- ) {
- protocols[cur++] = ALPN_H2_LENGTH;
- memcpy(&protocols[cur], ALPN_H2, ALPN_H2_LENGTH);
- cur += ALPN_H2_LENGTH;
- }
-#endif
- protocols[cur++] = ALPN_HTTP_1_1_LENGTH;
- memcpy(&protocols[cur], ALPN_HTTP_1_1, ALPN_HTTP_1_1_LENGTH);
- cur += ALPN_HTTP_1_1_LENGTH;
-
- if(SSL_SetNextProtoNego(backend->handle, protocols, cur) != SECSuccess)
- goto error;
- }
-#endif
-
-
- /* Force handshake on next I/O */
- if(SSL_ResetHandshake(backend->handle, /* asServer */ PR_FALSE)
- != SECSuccess)
- goto error;
-
- /* propagate hostname to the TLS layer */
- if(SSL_SetURL(backend->handle, snihost) != SECSuccess)
- goto error;
-
- /* prevent NSS from re-using the session for a different hostname */
- if(SSL_SetSockPeerID(backend->handle, snihost) != SECSuccess)
- goto error;
-
- return CURLE_OK;
-
-error:
- if(model)
- PR_Close(model);
-
- return nss_fail_connect(connssl, data, result);
-}
-
-static CURLcode nss_do_connect(struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
-{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
- CURLcode result = CURLE_SSL_CONNECT_ERROR;
- PRUint32 timeout;
-
- /* check timeout situation */
- const timediff_t time_left = Curl_timeleft(data, NULL, TRUE);
- if(time_left < 0) {
- failf(data, "timed out before SSL handshake");
- result = CURLE_OPERATION_TIMEDOUT;
- goto error;
- }
-
- DEBUGASSERT(backend);
-
- /* Force the handshake now */
- timeout = PR_MillisecondsToInterval((PRUint32) time_left);
- if(SSL_ForceHandshakeWithTimeout(backend->handle, timeout) != SECSuccess) {
- if(PR_GetError() == PR_WOULD_BLOCK_ERROR)
- /* blocking direction is updated by nss_update_connecting_state() */
- return CURLE_AGAIN;
- else if(SSL_SET_OPTION(certverifyresult) == SSL_ERROR_BAD_CERT_DOMAIN)
- result = CURLE_PEER_FAILED_VERIFICATION;
- else if(SSL_SET_OPTION(certverifyresult) != 0)
- result = CURLE_PEER_FAILED_VERIFICATION;
- goto error;
- }
-
- result = display_conn_info(data, backend->handle);
- if(result)
- goto error;
-
- if(SSL_CONN_CONFIG(issuercert)) {
- SECStatus ret = SECFailure;
- char *nickname = dup_nickname(data, SSL_CONN_CONFIG(issuercert));
- if(nickname) {
- /* we support only nicknames in case of issuercert for now */
- ret = check_issuer_cert(backend->handle, nickname);
- free(nickname);
- }
-
- if(SECFailure == ret) {
- infof(data, "SSL certificate issuer check failed");
- result = CURLE_SSL_ISSUER_ERROR;
- goto error;
- }
- else {
- infof(data, "SSL certificate issuer check ok");
- }
- }
-
- result = cmp_peer_pubkey(connssl, SSL_PINNED_PUB_KEY());
- if(result)
- /* status already printed */
- goto error;
-
- return CURLE_OK;
-
-error:
- return nss_fail_connect(connssl, data, result);
-}
-
-static CURLcode nss_connect_common(struct Curl_easy *data,
- struct connectdata *conn, int sockindex,
- bool *done)
-{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- const bool blocking = (done == NULL);
- CURLcode result;
-
- if(connssl->state == ssl_connection_complete) {
- if(!blocking)
- *done = TRUE;
- return CURLE_OK;
- }
-
- if(connssl->connecting_state == ssl_connect_1) {
- result = nss_setup_connect(data, conn, sockindex);
- if(result)
- /* we do not expect CURLE_AGAIN from nss_setup_connect() */
- return result;
-
- connssl->connecting_state = ssl_connect_2;
- }
-
- /* enable/disable blocking mode before handshake */
- result = nss_set_blocking(connssl, data, blocking);
- if(result)
- return result;
-
- result = nss_do_connect(data, conn, sockindex);
- switch(result) {
- case CURLE_OK:
- break;
- case CURLE_AGAIN:
- /* CURLE_AGAIN in non-blocking mode is not an error */
- if(!blocking)
- return CURLE_OK;
- else
- return result;
- default:
- return result;
- }
-
- if(blocking) {
- /* in blocking mode, set NSS non-blocking mode _after_ SSL handshake */
- result = nss_set_blocking(connssl, data, /* blocking */ FALSE);
- if(result)
- return result;
- }
- else
- /* signal completed SSL handshake */
- *done = TRUE;
-
- connssl->state = ssl_connection_complete;
- conn->recv[sockindex] = nss_recv;
- conn->send[sockindex] = nss_send;
-
- /* ssl_connect_done is never used outside, go back to the initial state */
- connssl->connecting_state = ssl_connect_1;
-
- return CURLE_OK;
-}
-
-static CURLcode nss_connect(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
-{
- return nss_connect_common(data, conn, sockindex, /* blocking */ NULL);
-}
-
-static CURLcode nss_connect_nonblocking(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex, bool *done)
-{
- return nss_connect_common(data, conn, sockindex, done);
-}
-
-static ssize_t nss_send(struct Curl_easy *data, /* transfer */
- int sockindex, /* socketindex */
- const void *mem, /* send this data */
- size_t len, /* amount to write */
- CURLcode *curlcode)
-{
- struct connectdata *conn = data->conn;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
- ssize_t rc;
-
- DEBUGASSERT(backend);
-
- /* The SelectClientCert() hook uses this for infof() and failf() but the
- handle stored in nss_setup_connect() could have already been freed. */
- backend->data = data;
-
- rc = PR_Send(backend->handle, mem, (int)len, 0, PR_INTERVAL_NO_WAIT);
- if(rc < 0) {
- PRInt32 err = PR_GetError();
- if(err == PR_WOULD_BLOCK_ERROR)
- *curlcode = CURLE_AGAIN;
- else {
- /* print the error number and error string */
- const char *err_name = nss_error_to_name(err);
- infof(data, "SSL write: error %d (%s)", err, err_name);
-
- /* print a human-readable message describing the error if available */
- nss_print_error_message(data, err);
-
- *curlcode = (is_cc_error(err))
- ? CURLE_SSL_CERTPROBLEM
- : CURLE_SEND_ERROR;
- }
-
- return -1;
- }
-
- return rc; /* number of bytes */
-}
-
-static ssize_t nss_recv(struct Curl_easy *data, /* transfer */
- int sockindex, /* socketindex */
- char *buf, /* store read data here */
- size_t buffersize, /* max amount to read */
- CURLcode *curlcode)
-{
- struct connectdata *conn = data->conn;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
- ssize_t nread;
-
- DEBUGASSERT(backend);
-
- /* The SelectClientCert() hook uses this for infof() and failf() but the
- handle stored in nss_setup_connect() could have already been freed. */
- backend->data = data;
-
- nread = PR_Recv(backend->handle, buf, (int)buffersize, 0,
- PR_INTERVAL_NO_WAIT);
- if(nread < 0) {
- /* failed SSL read */
- PRInt32 err = PR_GetError();
-
- if(err == PR_WOULD_BLOCK_ERROR)
- *curlcode = CURLE_AGAIN;
- else {
- /* print the error number and error string */
- const char *err_name = nss_error_to_name(err);
- infof(data, "SSL read: errno %d (%s)", err, err_name);
-
- /* print a human-readable message describing the error if available */
- nss_print_error_message(data, err);
-
- *curlcode = (is_cc_error(err))
- ? CURLE_SSL_CERTPROBLEM
- : CURLE_RECV_ERROR;
- }
-
- return -1;
- }
-
- return nread;
-}
-
-static size_t nss_version(char *buffer, size_t size)
-{
- return msnprintf(buffer, size, "NSS/%s", NSS_GetVersion());
-}
-
-/* data might be NULL */
-static int Curl_nss_seed(struct Curl_easy *data)
-{
- /* make sure that NSS is initialized */
- return !!Curl_nss_force_init(data);
-}
-
-/* data might be NULL */
-static CURLcode nss_random(struct Curl_easy *data,
- unsigned char *entropy,
- size_t length)
-{
- Curl_nss_seed(data); /* Initiate the seed if not already done */
-
- if(SECSuccess != PK11_GenerateRandom(entropy, curlx_uztosi(length)))
- /* signal a failure */
- return CURLE_FAILED_INIT;
-
- return CURLE_OK;
-}
-
-static CURLcode nss_sha256sum(const unsigned char *tmp, /* input */
- size_t tmplen,
- unsigned char *sha256sum, /* output */
- size_t sha256len)
-{
- PK11Context *SHA256pw = PK11_CreateDigestContext(SEC_OID_SHA256);
- unsigned int SHA256out;
-
- if(!SHA256pw)
- return CURLE_NOT_BUILT_IN;
-
- PK11_DigestOp(SHA256pw, tmp, curlx_uztoui(tmplen));
- PK11_DigestFinal(SHA256pw, sha256sum, &SHA256out, curlx_uztoui(sha256len));
- PK11_DestroyContext(SHA256pw, PR_TRUE);
-
- return CURLE_OK;
-}
-
-static bool nss_cert_status_request(void)
-{
-#ifdef SSL_ENABLE_OCSP_STAPLING
- return TRUE;
-#else
- return FALSE;
-#endif
-}
-
-static bool nss_false_start(void)
-{
-#if NSSVERNUM >= 0x030f04 /* 3.15.4 */
- return TRUE;
-#else
- return FALSE;
-#endif
-}
-
-static void *nss_get_internals(struct ssl_connect_data *connssl,
- CURLINFO info UNUSED_PARAM)
-{
- struct ssl_backend_data *backend = connssl->backend;
- (void)info;
- DEBUGASSERT(backend);
- return backend->handle;
-}
-
-const struct Curl_ssl Curl_ssl_nss = {
- { CURLSSLBACKEND_NSS, "nss" }, /* info */
-
- SSLSUPP_CA_PATH |
- SSLSUPP_CERTINFO |
- SSLSUPP_PINNEDPUBKEY |
- SSLSUPP_HTTPS_PROXY,
-
- sizeof(struct ssl_backend_data),
-
- nss_init, /* init */
- nss_cleanup, /* cleanup */
- nss_version, /* version */
- nss_check_cxn, /* check_cxn */
- /* NSS has no shutdown function provided and thus always fail */
- Curl_none_shutdown, /* shutdown */
- Curl_none_data_pending, /* data_pending */
- nss_random, /* random */
- nss_cert_status_request, /* cert_status_request */
- nss_connect, /* connect */
- nss_connect_nonblocking, /* connect_nonblocking */
- Curl_ssl_getsock, /* getsock */
- nss_get_internals, /* get_internals */
- nss_close, /* close_one */
- Curl_none_close_all, /* close_all */
- /* NSS has its own session ID cache */
- Curl_none_session_free, /* session_free */
- Curl_none_set_engine, /* set_engine */
- Curl_none_set_engine_default, /* set_engine_default */
- Curl_none_engines_list, /* engines_list */
- nss_false_start, /* false_start */
- nss_sha256sum, /* sha256sum */
- NULL, /* associate_connection */
- NULL /* disassociate_connection */
-};
-
-#endif /* USE_NSS */
diff --git a/lib/vtls/openssl.c b/lib/vtls/openssl.c
index ad2efa558..8c8f43e83 100644
--- a/lib/vtls/openssl.c
+++ b/lib/vtls/openssl.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -55,6 +55,7 @@
#include "slist.h"
#include "select.h"
#include "vtls.h"
+#include "vtls_int.h"
#include "vauth/vauth.h"
#include "keylog.h"
#include "strcase.h"
@@ -78,6 +79,8 @@
#include <openssl/bio.h>
#include <openssl/buffer.h>
#include <openssl/pkcs12.h>
+#include <openssl/tls1.h>
+#include <openssl/evp.h>
#if (OPENSSL_VERSION_NUMBER >= 0x0090808fL) && !defined(OPENSSL_NO_OCSP)
#include <openssl/ocsp.h>
@@ -95,6 +98,10 @@
#include "curl_memory.h"
#include "memdebug.h"
+#ifndef ARRAYSIZE
+#define ARRAYSIZE(A) (sizeof(A)/sizeof((A)[0]))
+#endif
+
/* Uncomment the ALLOW_RENEG line to a real #define if you want to allow TLS
renegotiations when built with BoringSSL. Renegotiating is non-compliant
with HTTP/2 and "an extremely dangerous protocol feature". Beware.
@@ -171,8 +178,6 @@
#if (OPENSSL_VERSION_NUMBER >= 0x30000000L)
#define HAVE_EVP_PKEY_GET_PARAMS 1
-#else
-#define SSL_get1_peer_certificate SSL_get_peer_certificate
#endif
#ifdef HAVE_EVP_PKEY_GET_PARAMS
@@ -188,11 +193,12 @@
* Whether SSL_CTX_set_keylog_callback is available.
* OpenSSL: supported since 1.1.1 https://github.com/openssl/openssl/pull/2287
* BoringSSL: supported since d28f59c27bac (committed 2015-11-19)
- * LibreSSL: unsupported in at least 2.7.2 (explicitly check for it since it
- * lies and pretends to be OpenSSL 2.0.0).
+ * LibreSSL: supported since 3.5.0 (released 2022-02-24)
*/
#if (OPENSSL_VERSION_NUMBER >= 0x10101000L && \
!defined(LIBRESSL_VERSION_NUMBER)) || \
+ (defined(LIBRESSL_VERSION_NUMBER) && \
+ LIBRESSL_VERSION_NUMBER >= 0x3050000fL) || \
defined(OPENSSL_IS_BORINGSSL)
#define HAVE_KEYLOG_CALLBACK
#endif
@@ -200,13 +206,17 @@
/* Whether SSL_CTX_set_ciphersuites is available.
* OpenSSL: supported since 1.1.1 (commit a53b5be6a05)
* BoringSSL: no
- * LibreSSL: no
+ * LibreSSL: supported since 3.4.1 (released 2021-10-14)
*/
-#if ((OPENSSL_VERSION_NUMBER >= 0x10101000L) && \
- !defined(LIBRESSL_VERSION_NUMBER) && \
- !defined(OPENSSL_IS_BORINGSSL))
-#define HAVE_SSL_CTX_SET_CIPHERSUITES
-#define HAVE_SSL_CTX_SET_POST_HANDSHAKE_AUTH
+#if ((OPENSSL_VERSION_NUMBER >= 0x10101000L && \
+ !defined(LIBRESSL_VERSION_NUMBER)) || \
+ (defined(LIBRESSL_VERSION_NUMBER) && \
+ LIBRESSL_VERSION_NUMBER >= 0x3040100fL)) && \
+ !defined(OPENSSL_IS_BORINGSSL)
+ #define HAVE_SSL_CTX_SET_CIPHERSUITES
+ #if !defined(OPENSSL_IS_AWSLC)
+ #define HAVE_SSL_CTX_SET_POST_HANDSHAKE_AUTH
+ #endif
#endif
/*
@@ -225,8 +235,14 @@
#define OSSL_PACKAGE "LibreSSL"
#elif defined(OPENSSL_IS_BORINGSSL)
#define OSSL_PACKAGE "BoringSSL"
+#elif defined(OPENSSL_IS_AWSLC)
+#define OSSL_PACKAGE "AWS-LC"
#else
-#define OSSL_PACKAGE "OpenSSL"
+# if defined(USE_NGTCP2) && defined(USE_NGHTTP3)
+# define OSSL_PACKAGE "quictls"
+# else
+# define OSSL_PACKAGE "OpenSSL"
+#endif
#endif
#if (OPENSSL_VERSION_NUMBER >= 0x10100000L)
@@ -255,23 +271,55 @@
#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && \
!(defined(LIBRESSL_VERSION_NUMBER) && \
LIBRESSL_VERSION_NUMBER < 0x2070100fL) && \
- !defined(OPENSSL_IS_BORINGSSL)
+ !defined(OPENSSL_IS_BORINGSSL) && \
+ !defined(OPENSSL_IS_AWSLC)
#define HAVE_OPENSSL_VERSION
#endif
-struct ssl_backend_data {
- struct Curl_easy *logger; /* transfer handle to pass trace logs to, only
- using sockindex 0 */
+#if defined(OPENSSL_IS_BORINGSSL) || defined(OPENSSL_IS_AWSLC)
+typedef uint32_t sslerr_t;
+#else
+typedef unsigned long sslerr_t;
+#endif
+
+/*
+ * Whether the OpenSSL version has the API needed to support sharing an
+ * X509_STORE between connections. The API is:
+ * * `X509_STORE_up_ref` -- Introduced: OpenSSL 1.1.0.
+ */
+#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) /* OpenSSL >= 1.1.0 */
+#define HAVE_SSL_X509_STORE_SHARE
+#endif
+
+/* What API version do we use? */
+#if defined(LIBRESSL_VERSION_NUMBER)
+#define USE_PRE_1_1_API (LIBRESSL_VERSION_NUMBER < 0x2070000f)
+#else /* !LIBRESSL_VERSION_NUMBER */
+#define USE_PRE_1_1_API (OPENSSL_VERSION_NUMBER < 0x10100000L)
+#endif /* !LIBRESSL_VERSION_NUMBER */
+
+struct ossl_ssl_backend_data {
/* these ones requires specific SSL-types */
SSL_CTX* ctx;
SSL* handle;
X509* server_cert;
+ BIO_METHOD *bio_method;
+ CURLcode io_result; /* result of last BIO cfilter operation */
#ifndef HAVE_KEYLOG_CALLBACK
/* Set to true once a valid keylog entry has been created to avoid dupes. */
bool keylog_done;
#endif
+ bool x509_store_setup; /* x509 store has been set up */
};
+#if defined(HAVE_SSL_X509_STORE_SHARE)
+struct multi_ssl_backend_data {
+ char *CAfile; /* CAfile path used to generate X509 store */
+ X509_STORE *store; /* cached X509 store or NULL if none */
+ struct curltime time; /* when the cached store was created */
+};
+#endif /* HAVE_SSL_X509_STORE_SHARE */
+
#define push_certinfo(_label, _num) \
do { \
long info_len = BIO_get_mem_data(mem, &ptr); \
@@ -327,8 +375,8 @@ static int asn1_object_dump(ASN1_OBJECT *a, char *buf, size_t len)
}
static void X509V3_ext(struct Curl_easy *data,
- int certnum,
- CONST_EXTS STACK_OF(X509_EXTENSION) *exts)
+ int certnum,
+ CONST_EXTS STACK_OF(X509_EXTENSION) *exts)
{
int i;
@@ -360,7 +408,7 @@ static void X509V3_ext(struct Curl_easy *data,
}
}
-#ifdef OPENSSL_IS_BORINGSSL
+#if defined(OPENSSL_IS_BORINGSSL) || defined(OPENSSL_IS_AWSLC)
typedef size_t numcert_t;
#else
typedef int numcert_t;
@@ -425,7 +473,9 @@ CURLcode Curl_ossl_certchain(struct Curl_easy *data, SSL *ssl)
X509_get0_signature(&psig, &sigalg, x);
if(sigalg) {
- i2a_ASN1_OBJECT(mem, sigalg->algorithm);
+ const ASN1_OBJECT *sigalgoid = NULL;
+ X509_ALGOR_get0(&sigalgoid, NULL, NULL, sigalg);
+ i2a_ASN1_OBJECT(mem, sigalgoid);
push_certinfo("Signature Algorithm", i);
}
@@ -495,9 +545,9 @@ CURLcode Curl_ossl_certchain(struct Curl_easy *data, SSL *ssl)
#else
RSA_get0_key(rsa, &n, &e, NULL);
#endif /* HAVE_EVP_PKEY_GET_PARAMS */
- BIO_printf(mem, "%d", BN_num_bits(n));
+ BIO_printf(mem, "%d", n ? BN_num_bits(n) : 0);
#else
- BIO_printf(mem, "%d", BN_num_bits(rsa->n));
+ BIO_printf(mem, "%d", rsa->n ? BN_num_bits(rsa->n) : 0);
#endif /* HAVE_OPAQUE_RSA_DSA_DH */
push_certinfo("RSA Public Key", i);
print_pubkey_BN(rsa, n, i);
@@ -584,7 +634,7 @@ CURLcode Curl_ossl_certchain(struct Curl_easy *data, SSL *ssl)
FREE_PKEY_PARAM_BIGNUM(q);
FREE_PKEY_PARAM_BIGNUM(g);
FREE_PKEY_PARAM_BIGNUM(pub_key);
- }
+ }
break;
}
}
@@ -610,9 +660,175 @@ CURLcode Curl_ossl_certchain(struct Curl_easy *data, SSL *ssl)
#ifdef USE_OPENSSL
-static bool ossl_associate_connection(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex);
+#if USE_PRE_1_1_API
+#if !defined(LIBRESSL_VERSION_NUMBER) || LIBRESSL_VERSION_NUMBER < 0x2070000fL
+#define BIO_set_init(x,v) ((x)->init=(v))
+#define BIO_get_data(x) ((x)->ptr)
+#define BIO_set_data(x,v) ((x)->ptr=(v))
+#endif
+#define BIO_get_shutdown(x) ((x)->shutdown)
+#define BIO_set_shutdown(x,v) ((x)->shutdown=(v))
+#endif /* USE_PRE_1_1_API */
+
+static int ossl_bio_cf_create(BIO *bio)
+{
+ BIO_set_shutdown(bio, 1);
+ BIO_set_init(bio, 1);
+#if USE_PRE_1_1_API
+ bio->num = -1;
+#endif
+ BIO_set_data(bio, NULL);
+ return 1;
+}
+
+static int ossl_bio_cf_destroy(BIO *bio)
+{
+ if(!bio)
+ return 0;
+ return 1;
+}
+
+static long ossl_bio_cf_ctrl(BIO *bio, int cmd, long num, void *ptr)
+{
+ struct Curl_cfilter *cf = BIO_get_data(bio);
+ long ret = 1;
+
+ (void)cf;
+ (void)ptr;
+ switch(cmd) {
+ case BIO_CTRL_GET_CLOSE:
+ ret = (long)BIO_get_shutdown(bio);
+ break;
+ case BIO_CTRL_SET_CLOSE:
+ BIO_set_shutdown(bio, (int)num);
+ break;
+ case BIO_CTRL_FLUSH:
+ /* we do no delayed writes, but if we ever would, this
+ * needs to trigger it. */
+ ret = 1;
+ break;
+ case BIO_CTRL_DUP:
+ ret = 1;
+ break;
+#ifdef BIO_CTRL_EOF
+ case BIO_CTRL_EOF:
+ /* EOF has been reached on input? */
+ return (!cf->next || !cf->next->connected);
+#endif
+ default:
+ ret = 0;
+ break;
+ }
+ return ret;
+}
+
+static int ossl_bio_cf_out_write(BIO *bio, const char *buf, int blen)
+{
+ struct Curl_cfilter *cf = BIO_get_data(bio);
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct ossl_ssl_backend_data *backend =
+ (struct ossl_ssl_backend_data *)connssl->backend;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+ ssize_t nwritten;
+ CURLcode result = CURLE_SEND_ERROR;
+
+ DEBUGASSERT(data);
+ nwritten = Curl_conn_cf_send(cf->next, data, buf, blen, &result);
+ CURL_TRC_CF(data, cf, "ossl_bio_cf_out_write(len=%d) -> %d, err=%d",
+ blen, (int)nwritten, result);
+ BIO_clear_retry_flags(bio);
+ backend->io_result = result;
+ if(nwritten < 0) {
+ if(CURLE_AGAIN == result)
+ BIO_set_retry_write(bio);
+ }
+ return (int)nwritten;
+}
+
+static int ossl_bio_cf_in_read(BIO *bio, char *buf, int blen)
+{
+ struct Curl_cfilter *cf = BIO_get_data(bio);
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct ossl_ssl_backend_data *backend =
+ (struct ossl_ssl_backend_data *)connssl->backend;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+ ssize_t nread;
+ CURLcode result = CURLE_RECV_ERROR;
+
+ DEBUGASSERT(data);
+ /* OpenSSL catches this case, so should we. */
+ if(!buf)
+ return 0;
+
+ nread = Curl_conn_cf_recv(cf->next, data, buf, blen, &result);
+ CURL_TRC_CF(data, cf, "ossl_bio_cf_in_read(len=%d) -> %d, err=%d",
+ blen, (int)nread, result);
+ BIO_clear_retry_flags(bio);
+ backend->io_result = result;
+ if(nread < 0) {
+ if(CURLE_AGAIN == result)
+ BIO_set_retry_read(bio);
+ }
+
+ /* Before returning server replies to the SSL instance, we need
+ * to have setup the x509 store or verification will fail. */
+ if(!backend->x509_store_setup) {
+ result = Curl_ssl_setup_x509_store(cf, data, backend->ctx);
+ if(result) {
+ backend->io_result = result;
+ return -1;
+ }
+ backend->x509_store_setup = TRUE;
+ }
+
+ return (int)nread;
+}
+
+#if USE_PRE_1_1_API
+
+static BIO_METHOD ossl_bio_cf_meth_1_0 = {
+ BIO_TYPE_MEM,
+ "OpenSSL CF BIO",
+ ossl_bio_cf_out_write,
+ ossl_bio_cf_in_read,
+ NULL, /* puts is never called */
+ NULL, /* gets is never called */
+ ossl_bio_cf_ctrl,
+ ossl_bio_cf_create,
+ ossl_bio_cf_destroy,
+ NULL
+};
+
+static BIO_METHOD *ossl_bio_cf_method_create(void)
+{
+ return &ossl_bio_cf_meth_1_0;
+}
+
+#define ossl_bio_cf_method_free(m) Curl_nop_stmt
+
+#else
+
+static BIO_METHOD *ossl_bio_cf_method_create(void)
+{
+ BIO_METHOD *m = BIO_meth_new(BIO_TYPE_MEM, "OpenSSL CF BIO");
+ if(m) {
+ BIO_meth_set_write(m, &ossl_bio_cf_out_write);
+ BIO_meth_set_read(m, &ossl_bio_cf_in_read);
+ BIO_meth_set_ctrl(m, &ossl_bio_cf_ctrl);
+ BIO_meth_set_create(m, &ossl_bio_cf_create);
+ BIO_meth_set_destroy(m, &ossl_bio_cf_destroy);
+ }
+ return m;
+}
+
+static void ossl_bio_cf_method_free(BIO_METHOD *m)
+{
+ if(m)
+ BIO_meth_free(m);
+}
+
+#endif
+
/*
* Number of bytes to read from the random number seed file. This must be
@@ -645,9 +861,9 @@ ossl_log_tls12_secret(const SSL *ssl, bool *keylog_done)
if(!session || *keylog_done)
return;
-#if OPENSSL_VERSION_NUMBER >= 0x10100000L && \
- !(defined(LIBRESSL_VERSION_NUMBER) && \
- LIBRESSL_VERSION_NUMBER < 0x20700000L)
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L && \
+ !(defined(LIBRESSL_VERSION_NUMBER) && \
+ LIBRESSL_VERSION_NUMBER < 0x20700000L)
/* ssl->s3 is not checked in openssl 1.1.0-pre6, but let's assume that
* we have a valid SSL context if we have a non-NULL session. */
SSL_get_client_random(ssl, client_random, SSL3_RANDOM_SIZE);
@@ -711,20 +927,33 @@ static const char *SSL_ERROR_to_str(int err)
}
}
+static size_t ossl_version(char *buffer, size_t size);
+
/* Return error string for last OpenSSL error
*/
static char *ossl_strerror(unsigned long error, char *buf, size_t size)
{
- if(size)
+ size_t len;
+ DEBUGASSERT(size);
+ *buf = '\0';
+
+ len = ossl_version(buf, size);
+ DEBUGASSERT(len < (size - 2));
+ if(len < (size - 2)) {
+ buf += len;
+ size -= (len + 2);
+ *buf++ = ':';
+ *buf++ = ' ';
*buf = '\0';
+ }
-#ifdef OPENSSL_IS_BORINGSSL
+#if defined(OPENSSL_IS_BORINGSSL) || defined(OPENSSL_IS_AWSLC)
ERR_error_string_n((uint32_t)error, buf, size);
#else
ERR_error_string_n(error, buf, size);
#endif
- if(size > 1 && !*buf) {
+ if(!*buf) {
strncpy(buf, (error ? "Unknown error" : "No error"), size);
buf[size - 1] = '\0';
}
@@ -732,54 +961,6 @@ static char *ossl_strerror(unsigned long error, char *buf, size_t size)
return buf;
}
-/* Return an extra data index for the transfer data.
- * This index can be used with SSL_get_ex_data() and SSL_set_ex_data().
- */
-static int ossl_get_ssl_data_index(void)
-{
- static int ssl_ex_data_data_index = -1;
- if(ssl_ex_data_data_index < 0) {
- ssl_ex_data_data_index = SSL_get_ex_new_index(0, NULL, NULL, NULL, NULL);
- }
- return ssl_ex_data_data_index;
-}
-
-/* Return an extra data index for the connection data.
- * This index can be used with SSL_get_ex_data() and SSL_set_ex_data().
- */
-static int ossl_get_ssl_conn_index(void)
-{
- static int ssl_ex_data_conn_index = -1;
- if(ssl_ex_data_conn_index < 0) {
- ssl_ex_data_conn_index = SSL_get_ex_new_index(0, NULL, NULL, NULL, NULL);
- }
- return ssl_ex_data_conn_index;
-}
-
-/* Return an extra data index for the sockindex.
- * This index can be used with SSL_get_ex_data() and SSL_set_ex_data().
- */
-static int ossl_get_ssl_sockindex_index(void)
-{
- static int sockindex_index = -1;
- if(sockindex_index < 0) {
- sockindex_index = SSL_get_ex_new_index(0, NULL, NULL, NULL, NULL);
- }
- return sockindex_index;
-}
-
-/* Return an extra data index for proxy boolean.
- * This index can be used with SSL_get_ex_data() and SSL_set_ex_data().
- */
-static int ossl_get_proxy_index(void)
-{
- static int proxy_index = -1;
- if(proxy_index < 0) {
- proxy_index = SSL_get_ex_new_index(0, NULL, NULL, NULL, NULL);
- }
- return proxy_index;
-}
-
static int passwd_callback(char *buf, int num, int encrypting,
void *global_passwd)
{
@@ -827,20 +1008,6 @@ static CURLcode ossl_seed(struct Curl_easy *data)
return CURLE_OK;
#endif
-#if defined(HAVE_RAND_EGD) && defined(EGD_SOCKET)
- /* available in OpenSSL 0.9.5 and later */
- /* EGD_SOCKET is set at configure time or not at all */
- {
- /* If there's an option and a define, the option overrides the
- define */
- int ret = RAND_egd(EGD_SOCKET);
- if(-1 != ret) {
- if(rand_enough())
- return CURLE_OK;
- }
- }
-#endif
-
/* fallback to a custom seeding of the PRNG using a hash based on a current
time */
do {
@@ -988,7 +1155,7 @@ SSL_CTX_use_certificate_blob(SSL_CTX *ctx, const struct curl_blob *blob,
}
ret = SSL_CTX_use_certificate(ctx, x);
- end:
+end:
X509_free(x);
BIO_free(in);
return ret;
@@ -996,7 +1163,7 @@ SSL_CTX_use_certificate_blob(SSL_CTX *ctx, const struct curl_blob *blob,
static int
SSL_CTX_use_PrivateKey_blob(SSL_CTX *ctx, const struct curl_blob *blob,
- int type, const char *key_passwd)
+ int type, const char *key_passwd)
{
int ret = 0;
EVP_PKEY *pkey = NULL;
@@ -1019,7 +1186,7 @@ SSL_CTX_use_PrivateKey_blob(SSL_CTX *ctx, const struct curl_blob *blob,
}
ret = SSL_CTX_use_PrivateKey(ctx, pkey);
EVP_PKEY_free(pkey);
- end:
+end:
BIO_free(in);
return ret;
}
@@ -1030,8 +1197,8 @@ SSL_CTX_use_certificate_chain_blob(SSL_CTX *ctx, const struct curl_blob *blob,
{
/* SSL_CTX_add1_chain_cert introduced in OpenSSL 1.0.2 */
#if (OPENSSL_VERSION_NUMBER >= 0x1000200fL) && /* OpenSSL 1.0.2 or later */ \
- !(defined(LIBRESSL_VERSION_NUMBER) && \
- (LIBRESSL_VERSION_NUMBER < 0x2090100fL)) /* LibreSSL 2.9.1 or later */
+ !(defined(LIBRESSL_VERSION_NUMBER) && \
+ (LIBRESSL_VERSION_NUMBER < 0x2090100fL)) /* LibreSSL 2.9.1 or later */
int ret = 0;
X509 *x = NULL;
void *passwd_callback_userdata = (void *)key_passwd;
@@ -1056,7 +1223,7 @@ SSL_CTX_use_certificate_chain_blob(SSL_CTX *ctx, const struct curl_blob *blob,
if(ret) {
X509 *ca;
- unsigned long err;
+ sslerr_t err;
if(!SSL_CTX_clear_chain_certs(ctx)) {
ret = 0;
@@ -1082,7 +1249,7 @@ SSL_CTX_use_certificate_chain_blob(SSL_CTX *ctx, const struct curl_blob *blob,
ret = 0;
}
- end:
+end:
X509_free(x);
BIO_free(in);
return ret;
@@ -1150,7 +1317,7 @@ int cert_stuff(struct Curl_easy *data,
cert_use_result = cert_blob ?
SSL_CTX_use_certificate_blob(ctx, cert_blob,
file_type, key_passwd) :
- SSL_CTX_use_certificate_file(ctx, cert_file, file_type);
+ SSL_CTX_use_certificate_file(ctx, cert_file, file_type);
if(cert_use_result != 1) {
failf(data,
"could not load ASN1 client certificate from %s, " OSSL_PACKAGE
@@ -1164,67 +1331,67 @@ int cert_stuff(struct Curl_easy *data,
break;
case SSL_FILETYPE_ENGINE:
#if defined(USE_OPENSSL_ENGINE) && defined(ENGINE_CTRL_GET_CMD_FROM_NAME)
- {
- /* Implicitly use pkcs11 engine if none was provided and the
- * cert_file is a PKCS#11 URI */
- if(!data->state.engine) {
- if(is_pkcs11_uri(cert_file)) {
- if(ossl_set_engine(data, "pkcs11") != CURLE_OK) {
- return 0;
- }
+ {
+ /* Implicitly use pkcs11 engine if none was provided and the
+ * cert_file is a PKCS#11 URI */
+ if(!data->state.engine) {
+ if(is_pkcs11_uri(cert_file)) {
+ if(ossl_set_engine(data, "pkcs11") != CURLE_OK) {
+ return 0;
}
}
+ }
- if(data->state.engine) {
- const char *cmd_name = "LOAD_CERT_CTRL";
- struct {
- const char *cert_id;
- X509 *cert;
- } params;
-
- params.cert_id = cert_file;
- params.cert = NULL;
+ if(data->state.engine) {
+ const char *cmd_name = "LOAD_CERT_CTRL";
+ struct {
+ const char *cert_id;
+ X509 *cert;
+ } params;
- /* Does the engine supports LOAD_CERT_CTRL ? */
- if(!ENGINE_ctrl(data->state.engine, ENGINE_CTRL_GET_CMD_FROM_NAME,
- 0, (void *)cmd_name, NULL)) {
- failf(data, "ssl engine does not support loading certificates");
- return 0;
- }
+ params.cert_id = cert_file;
+ params.cert = NULL;
- /* Load the certificate from the engine */
- if(!ENGINE_ctrl_cmd(data->state.engine, cmd_name,
- 0, &params, NULL, 1)) {
- failf(data, "ssl engine cannot load client cert with id"
- " '%s' [%s]", cert_file,
- ossl_strerror(ERR_get_error(), error_buffer,
- sizeof(error_buffer)));
- return 0;
- }
+ /* Does the engine supports LOAD_CERT_CTRL ? */
+ if(!ENGINE_ctrl(data->state.engine, ENGINE_CTRL_GET_CMD_FROM_NAME,
+ 0, (void *)cmd_name, NULL)) {
+ failf(data, "ssl engine does not support loading certificates");
+ return 0;
+ }
- if(!params.cert) {
- failf(data, "ssl engine didn't initialized the certificate "
- "properly.");
- return 0;
- }
+ /* Load the certificate from the engine */
+ if(!ENGINE_ctrl_cmd(data->state.engine, cmd_name,
+ 0, &params, NULL, 1)) {
+ failf(data, "ssl engine cannot load client cert with id"
+ " '%s' [%s]", cert_file,
+ ossl_strerror(ERR_get_error(), error_buffer,
+ sizeof(error_buffer)));
+ return 0;
+ }
- if(SSL_CTX_use_certificate(ctx, params.cert) != 1) {
- failf(data, "unable to set client certificate [%s]",
- ossl_strerror(ERR_get_error(), error_buffer,
- sizeof(error_buffer)));
- return 0;
- }
- X509_free(params.cert); /* we don't need the handle any more... */
+ if(!params.cert) {
+ failf(data, "ssl engine didn't initialized the certificate "
+ "properly.");
+ return 0;
}
- else {
- failf(data, "crypto engine not set, can't load certificate");
+
+ if(SSL_CTX_use_certificate(ctx, params.cert) != 1) {
+ failf(data, "unable to set client certificate [%s]",
+ ossl_strerror(ERR_get_error(), error_buffer,
+ sizeof(error_buffer)));
return 0;
}
+ X509_free(params.cert); /* we don't need the handle any more... */
}
- break;
+ else {
+ failf(data, "crypto engine not set, can't load certificate");
+ return 0;
+ }
+ }
+ break;
#else
- failf(data, "file type ENG for certificate not implemented");
- return 0;
+ failf(data, "file type ENG for certificate not implemented");
+ return 0;
#endif
case SSL_FILETYPE_PKCS12:
@@ -1331,7 +1498,7 @@ int cert_stuff(struct Curl_easy *data,
}
cert_done = 1;
- fail:
+fail:
EVP_PKEY_free(pri);
X509_free(x509);
sk_X509_pop_free(ca, X509_free);
@@ -1359,7 +1526,7 @@ int cert_stuff(struct Curl_easy *data,
case SSL_FILETYPE_ASN1:
cert_use_result = key_blob ?
SSL_CTX_use_PrivateKey_blob(ctx, key_blob, file_type, key_passwd) :
- SSL_CTX_use_PrivateKey_file(ctx, key_file, file_type);
+ SSL_CTX_use_PrivateKey_file(ctx, key_file, file_type);
if(cert_use_result != 1) {
failf(data, "unable to set private key file: '%s' type %s",
key_file?key_file:"(memory blob)", key_type?key_type:"PEM");
@@ -1368,57 +1535,55 @@ int cert_stuff(struct Curl_easy *data,
break;
case SSL_FILETYPE_ENGINE:
#ifdef USE_OPENSSL_ENGINE
- { /* XXXX still needs some work */
- EVP_PKEY *priv_key = NULL;
-
- /* Implicitly use pkcs11 engine if none was provided and the
- * key_file is a PKCS#11 URI */
- if(!data->state.engine) {
- if(is_pkcs11_uri(key_file)) {
- if(ossl_set_engine(data, "pkcs11") != CURLE_OK) {
- return 0;
- }
- }
- }
+ {
+ EVP_PKEY *priv_key = NULL;
- if(data->state.engine) {
- UI_METHOD *ui_method =
- UI_create_method((char *)"curl user interface");
- if(!ui_method) {
- failf(data, "unable do create " OSSL_PACKAGE
- " user-interface method");
+ /* Implicitly use pkcs11 engine if none was provided and the
+ * key_file is a PKCS#11 URI */
+ if(!data->state.engine) {
+ if(is_pkcs11_uri(key_file)) {
+ if(ossl_set_engine(data, "pkcs11") != CURLE_OK) {
return 0;
}
- UI_method_set_opener(ui_method, UI_method_get_opener(UI_OpenSSL()));
- UI_method_set_closer(ui_method, UI_method_get_closer(UI_OpenSSL()));
- UI_method_set_reader(ui_method, ssl_ui_reader);
- UI_method_set_writer(ui_method, ssl_ui_writer);
- /* the typecast below was added to please mingw32 */
- priv_key = (EVP_PKEY *)
- ENGINE_load_private_key(data->state.engine, key_file,
- ui_method,
- key_passwd);
- UI_destroy_method(ui_method);
- if(!priv_key) {
- failf(data, "failed to load private key from crypto engine");
- return 0;
- }
- if(SSL_CTX_use_PrivateKey(ctx, priv_key) != 1) {
- failf(data, "unable to set private key");
- EVP_PKEY_free(priv_key);
- return 0;
- }
- EVP_PKEY_free(priv_key); /* we don't need the handle any more... */
}
- else {
- failf(data, "crypto engine not set, can't load private key");
+ }
+
+ if(data->state.engine) {
+ UI_METHOD *ui_method =
+ UI_create_method((char *)"curl user interface");
+ if(!ui_method) {
+ failf(data, "unable do create " OSSL_PACKAGE
+ " user-interface method");
+ return 0;
+ }
+ UI_method_set_opener(ui_method, UI_method_get_opener(UI_OpenSSL()));
+ UI_method_set_closer(ui_method, UI_method_get_closer(UI_OpenSSL()));
+ UI_method_set_reader(ui_method, ssl_ui_reader);
+ UI_method_set_writer(ui_method, ssl_ui_writer);
+ priv_key = ENGINE_load_private_key(data->state.engine, key_file,
+ ui_method,
+ key_passwd);
+ UI_destroy_method(ui_method);
+ if(!priv_key) {
+ failf(data, "failed to load private key from crypto engine");
+ return 0;
+ }
+ if(SSL_CTX_use_PrivateKey(ctx, priv_key) != 1) {
+ failf(data, "unable to set private key");
+ EVP_PKEY_free(priv_key);
return 0;
}
+ EVP_PKEY_free(priv_key); /* we don't need the handle any more... */
}
- break;
+ else {
+ failf(data, "crypto engine not set, can't load private key");
+ return 0;
+ }
+ }
+ break;
#else
- failf(data, "file type ENG for private key not supported");
- return 0;
+ failf(data, "file type ENG for private key not supported");
+ return 0;
#endif
case SSL_FILETYPE_PKCS12:
if(!cert_done) {
@@ -1447,8 +1612,8 @@ int cert_stuff(struct Curl_easy *data,
EVP_PKEY_free(pktmp);
}
-#if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_IS_BORINGSSL) && \
- !defined(OPENSSL_NO_DEPRECATED_3_0)
+#if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_IS_BORINGSSL) && \
+ !defined(OPENSSL_NO_DEPRECATED_3_0)
{
/* If RSA is used, don't check the private key if its flags indicate
* it doesn't support it. */
@@ -1536,7 +1701,7 @@ static int x509_name_oneline(X509_NAME *a, char *buf, size_t size)
static int ossl_init(void)
{
#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && \
- !defined(LIBRESSL_VERSION_NUMBER)
+ (!defined(LIBRESSL_VERSION_NUMBER) || LIBRESSL_VERSION_NUMBER >= 0x2070000fL)
const uint64_t flags =
#ifdef OPENSSL_INIT_ENGINE_ALL_BUILTIN
/* not present in BoringSSL */
@@ -1580,19 +1745,14 @@ static int ossl_init(void)
Curl_tls_keylog_open();
- /* Initialize the extra data indexes */
- if(ossl_get_ssl_data_index() < 0 || ossl_get_ssl_conn_index() < 0 ||
- ossl_get_ssl_sockindex_index() < 0 || ossl_get_proxy_index() < 0)
- return 0;
-
return 1;
}
/* Global cleanup */
static void ossl_cleanup(void)
{
-#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && \
- !defined(LIBRESSL_VERSION_NUMBER)
+#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && \
+ !defined(LIBRESSL_VERSION_NUMBER)
/* OpenSSL 1.1 deprecates all these cleanup functions and
turns them into no-ops in OpenSSL 1.0 compatibility mode */
#else
@@ -1625,58 +1785,6 @@ static void ossl_cleanup(void)
Curl_tls_keylog_close();
}
-/*
- * This function is used to determine connection status.
- *
- * Return codes:
- * 1 means the connection is still in place
- * 0 means the connection has been closed
- * -1 means the connection status is unknown
- */
-static int ossl_check_cxn(struct connectdata *conn)
-{
- /* SSL_peek takes data out of the raw recv buffer without peeking so we use
- recv MSG_PEEK instead. Bug #795 */
-#ifdef MSG_PEEK
- char buf;
- ssize_t nread;
- nread = recv((RECV_TYPE_ARG1)conn->sock[FIRSTSOCKET], (RECV_TYPE_ARG2)&buf,
- (RECV_TYPE_ARG3)1, (RECV_TYPE_ARG4)MSG_PEEK);
- if(nread == 0)
- return 0; /* connection has been closed */
- if(nread == 1)
- return 1; /* connection still in place */
- else if(nread == -1) {
- int err = SOCKERRNO;
- if(err == EINPROGRESS ||
-#if defined(EAGAIN) && (EAGAIN != EWOULDBLOCK)
- err == EAGAIN ||
-#endif
- err == EWOULDBLOCK)
- return 1; /* connection still in place */
- if(err == ECONNRESET ||
-#ifdef ECONNABORTED
- err == ECONNABORTED ||
-#endif
-#ifdef ENETDOWN
- err == ENETDOWN ||
-#endif
-#ifdef ENETRESET
- err == ENETRESET ||
-#endif
-#ifdef ESHUTDOWN
- err == ESHUTDOWN ||
-#endif
-#ifdef ETIMEDOUT
- err == ETIMEDOUT ||
-#endif
- err == ENOTCONN)
- return 0; /* connection has been closed */
- }
-#endif
- return -1; /* connection status unknown */
-}
-
/* Selects an OpenSSL crypto engine
*/
static CURLcode ossl_set_engine(struct Curl_easy *data, const char *engine)
@@ -1766,33 +1874,58 @@ static struct curl_slist *ossl_engines_list(struct Curl_easy *data)
return list;
}
-#define set_logger(conn, data) \
- conn->ssl[0].backend->logger = data
-
-static void ossl_closeone(struct Curl_easy *data,
- struct connectdata *conn,
- struct ssl_connect_data *connssl)
+static void ossl_close(struct Curl_cfilter *cf, struct Curl_easy *data)
{
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct ossl_ssl_backend_data *backend =
+ (struct ossl_ssl_backend_data *)connssl->backend;
+ (void)data;
DEBUGASSERT(backend);
if(backend->handle) {
- char buf[32];
- set_logger(conn, data);
- /*
- * The conn->sock[0] socket is passed to openssl with SSL_set_fd(). Make
- * sure the socket is not closed before calling OpenSSL functions that
- * will use it.
- */
- DEBUGASSERT(conn->sock[FIRSTSOCKET] != CURL_SOCKET_BAD);
-
- /* Maybe the server has already sent a close notify alert.
- Read it to avoid an RST on the TCP connection. */
- (void)SSL_read(backend->handle, buf, (int)sizeof(buf));
+ if(cf->next && cf->next->connected) {
+ char buf[1024];
+ int nread, err;
+ long sslerr;
+
+ /* Maybe the server has already sent a close notify alert.
+ Read it to avoid an RST on the TCP connection. */
+ (void)SSL_read(backend->handle, buf, (int)sizeof(buf));
+ ERR_clear_error();
+ if(SSL_shutdown(backend->handle) == 1) {
+ CURL_TRC_CF(data, cf, "SSL shutdown finished");
+ }
+ else {
+ nread = SSL_read(backend->handle, buf, (int)sizeof(buf));
+ err = SSL_get_error(backend->handle, nread);
+ switch(err) {
+ case SSL_ERROR_NONE: /* this is not an error */
+ case SSL_ERROR_ZERO_RETURN: /* no more data */
+ CURL_TRC_CF(data, cf, "SSL shutdown, EOF from server");
+ break;
+ case SSL_ERROR_WANT_READ:
+ /* SSL has send its notify and now wants to read the reply
+ * from the server. We are not really interested in that. */
+ CURL_TRC_CF(data, cf, "SSL shutdown sent");
+ break;
+ case SSL_ERROR_WANT_WRITE:
+ CURL_TRC_CF(data, cf, "SSL shutdown send blocked");
+ break;
+ default:
+ sslerr = ERR_get_error();
+ CURL_TRC_CF(data, cf, "SSL shutdown, error: '%s', errno %d",
+ (sslerr ?
+ ossl_strerror(sslerr, buf, sizeof(buf)) :
+ SSL_ERROR_to_str(err)),
+ SOCKERRNO);
+ break;
+ }
+ }
- (void)SSL_shutdown(backend->handle);
- SSL_set_connect_state(backend->handle);
+ ERR_clear_error();
+ SSL_set_connect_state(backend->handle);
+ }
SSL_free(backend->handle);
backend->handle = NULL;
@@ -1800,38 +1933,32 @@ static void ossl_closeone(struct Curl_easy *data,
if(backend->ctx) {
SSL_CTX_free(backend->ctx);
backend->ctx = NULL;
+ backend->x509_store_setup = FALSE;
+ }
+ if(backend->bio_method) {
+ ossl_bio_cf_method_free(backend->bio_method);
+ backend->bio_method = NULL;
}
-}
-
-/*
- * This function is called when an SSL connection is closed.
- */
-static void ossl_close(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
-{
- ossl_closeone(data, conn, &conn->ssl[sockindex]);
-#ifndef CURL_DISABLE_PROXY
- ossl_closeone(data, conn, &conn->proxy_ssl[sockindex]);
-#endif
}
/*
* This function is called to shut down the SSL layer but keep the
* socket open (CCC - Clear Command Channel)
*/
-static int ossl_shutdown(struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
+static int ossl_shutdown(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
int retval = 0;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
+ struct ssl_connect_data *connssl = cf->ctx;
char buf[256]; /* We will use this for the OpenSSL error buffer, so it has
to be at least 256 bytes long. */
unsigned long sslerror;
- ssize_t nread;
+ int nread;
int buffsize;
int err;
bool done = FALSE;
- struct ssl_backend_data *backend = connssl->backend;
+ struct ossl_ssl_backend_data *backend =
+ (struct ossl_ssl_backend_data *)connssl->backend;
int loop = 10;
DEBUGASSERT(backend);
@@ -1843,21 +1970,21 @@ static int ossl_shutdown(struct Curl_easy *data,
we do not send one. Let's hope other servers do the same... */
if(data->set.ftp_ccc == CURLFTPSSL_CCC_ACTIVE)
- (void)SSL_shutdown(backend->handle);
+ (void)SSL_shutdown(backend->handle);
#endif
if(backend->handle) {
buffsize = (int)sizeof(buf);
while(!done && loop--) {
- int what = SOCKET_READABLE(conn->sock[sockindex],
+ int what = SOCKET_READABLE(Curl_conn_cf_get_socket(cf, data),
SSL_SHUTDOWN_TIMEOUT);
if(what > 0) {
ERR_clear_error();
/* Something to read, let's do it and hope that it is the close
notify alert from the server */
- nread = (ssize_t)SSL_read(backend->handle, buf, buffsize);
- err = SSL_get_error(backend->handle, (int)nread);
+ nread = SSL_read(backend->handle, buf, buffsize);
+ err = SSL_get_error(backend->handle, nread);
switch(err) {
case SSL_ERROR_NONE: /* this is not an error */
@@ -1944,7 +2071,7 @@ static void ossl_close_all(struct Curl_easy *data)
#else
(void)data;
#endif
-#if !defined(HAVE_ERR_REMOVE_THREAD_STATE_DEPRECATED) && \
+#if !defined(HAVE_ERR_REMOVE_THREAD_STATE_DEPRECATED) && \
defined(HAVE_ERR_REMOVE_THREAD_STATE)
/* OpenSSL 1.0.1 and 1.0.2 build an error queue that is stored per-thread
so we need to clean it here in case the thread will be killed. All OpenSSL
@@ -1972,7 +2099,7 @@ static bool subj_alt_hostcheck(struct Curl_easy *data,
#endif
if(Curl_cert_hostcheck(match_pattern, matchlen, hostname, hostlen)) {
infof(data, " subjectAltName: host \"%s\" matched cert's \"%s\"",
- dispname, match_pattern);
+ dispname, match_pattern);
return TRUE;
}
return FALSE;
@@ -2001,7 +2128,7 @@ static bool subj_alt_hostcheck(struct Curl_easy *data,
This function is now used from ngtcp2 (QUIC) as well.
*/
CURLcode Curl_ossl_verifyhost(struct Curl_easy *data, struct connectdata *conn,
- X509 *server_cert)
+ struct ssl_peer *peer, X509 *server_cert)
{
bool matched = FALSE;
int target = GEN_DNS; /* target type, GEN_DNS or GEN_IPADD */
@@ -2015,28 +2142,30 @@ CURLcode Curl_ossl_verifyhost(struct Curl_easy *data, struct connectdata *conn,
CURLcode result = CURLE_OK;
bool dNSName = FALSE; /* if a dNSName field exists in the cert */
bool iPAddress = FALSE; /* if a iPAddress field exists in the cert */
- const char * const hostname = SSL_HOST_NAME();
- const char * const dispname = SSL_HOST_DISPNAME();
- size_t hostlen = strlen(hostname);
+ size_t hostlen;
+ (void)conn;
+ hostlen = strlen(peer->hostname);
+ if(peer->is_ip_address) {
#ifdef ENABLE_IPV6
- if(conn->bits.ipv6_ip &&
- Curl_inet_pton(AF_INET6, hostname, &addr)) {
- target = GEN_IPADD;
- addrlen = sizeof(struct in6_addr);
- }
- else
-#endif
- if(Curl_inet_pton(AF_INET, hostname, &addr)) {
+ if(conn->bits.ipv6_ip &&
+ Curl_inet_pton(AF_INET6, peer->hostname, &addr)) {
target = GEN_IPADD;
- addrlen = sizeof(struct in_addr);
+ addrlen = sizeof(struct in6_addr);
}
+ else
+#endif
+ if(Curl_inet_pton(AF_INET, peer->hostname, &addr)) {
+ target = GEN_IPADD;
+ addrlen = sizeof(struct in_addr);
+ }
+ }
/* get a "list" of alternative names */
altnames = X509_get_ext_d2i(server_cert, NID_subject_alt_name, NULL, NULL);
if(altnames) {
-#ifdef OPENSSL_IS_BORINGSSL
+#if defined(OPENSSL_IS_BORINGSSL) || defined(OPENSSL_IS_AWSLC)
size_t numalts;
size_t i;
#else
@@ -2080,9 +2209,9 @@ CURLcode Curl_ossl_verifyhost(struct Curl_easy *data, struct connectdata *conn,
if((altlen == strlen(altptr)) &&
/* if this isn't true, there was an embedded zero in the name
string and we cannot match it. */
- subj_alt_hostcheck(data,
- altptr,
- altlen, hostname, hostlen, dispname)) {
+ subj_alt_hostcheck(data, altptr, altlen,
+ peer->hostname, hostlen,
+ peer->dispname)) {
dnsmatched = TRUE;
}
break;
@@ -2094,7 +2223,7 @@ CURLcode Curl_ossl_verifyhost(struct Curl_easy *data, struct connectdata *conn,
ipmatched = TRUE;
infof(data,
" subjectAltName: host \"%s\" matched cert's IP address!",
- dispname);
+ peer->dispname);
}
break;
}
@@ -2110,9 +2239,9 @@ CURLcode Curl_ossl_verifyhost(struct Curl_easy *data, struct connectdata *conn,
/* an alternative name matched */
;
else if(dNSName || iPAddress) {
- infof(data, " subjectAltName does not match %s", dispname);
+ infof(data, " subjectAltName does not match %s", peer->dispname);
failf(data, "SSL: no alternative certificate subject name matches "
- "target host name '%s'", dispname);
+ "target host name '%s'", peer->dispname);
result = CURLE_PEER_FAILED_VERIFICATION;
}
else {
@@ -2176,9 +2305,9 @@ CURLcode Curl_ossl_verifyhost(struct Curl_easy *data, struct connectdata *conn,
result = CURLE_PEER_FAILED_VERIFICATION;
}
else if(!Curl_cert_hostcheck((const char *)peer_CN,
- peerlen, hostname, hostlen)) {
+ peerlen, peer->hostname, hostlen)) {
failf(data, "SSL: certificate subject name '%s' does not match "
- "target host name '%s'", peer_CN, dispname);
+ "target host name '%s'", peer_CN, peer->dispname);
result = CURLE_PEER_FAILED_VERIFICATION;
}
else {
@@ -2192,19 +2321,25 @@ CURLcode Curl_ossl_verifyhost(struct Curl_easy *data, struct connectdata *conn,
}
#if (OPENSSL_VERSION_NUMBER >= 0x0090808fL) && !defined(OPENSSL_NO_TLSEXT) && \
- !defined(OPENSSL_NO_OCSP)
-static CURLcode verifystatus(struct Curl_easy *data,
- struct ssl_connect_data *connssl)
+ !defined(OPENSSL_NO_OCSP)
+static CURLcode verifystatus(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
+ struct ssl_connect_data *connssl = cf->ctx;
int i, ocsp_status;
+#if defined(OPENSSL_IS_AWSLC)
+ const uint8_t *status;
+#else
unsigned char *status;
+#endif
const unsigned char *p;
CURLcode result = CURLE_OK;
OCSP_RESPONSE *rsp = NULL;
OCSP_BASICRESP *br = NULL;
X509_STORE *st = NULL;
STACK_OF(X509) *ch = NULL;
- struct ssl_backend_data *backend = connssl->backend;
+ struct ossl_ssl_backend_data *backend =
+ (struct ossl_ssl_backend_data *)connssl->backend;
X509 *cert;
OCSP_CERTID *id = NULL;
int cert_status, crl_reason;
@@ -2294,7 +2429,7 @@ static CURLcode verifystatus(struct Curl_easy *data,
goto end;
}
- for(i = 0; i < sk_X509_num(ch); i++) {
+ for(i = 0; i < (int)sk_X509_num(ch); i++) {
X509 *issuer = sk_X509_value(ch, i);
if(X509_check_issued(issuer, cert) == X509_V_OK) {
id = OCSP_cert_to_id(EVP_sha1(), cert, issuer);
@@ -2365,81 +2500,81 @@ static const char *ssl_msg_type(int ssl_ver, int msg)
#ifdef SSL2_VERSION_MAJOR
if(ssl_ver == SSL2_VERSION_MAJOR) {
switch(msg) {
- case SSL2_MT_ERROR:
- return "Error";
- case SSL2_MT_CLIENT_HELLO:
- return "Client hello";
- case SSL2_MT_CLIENT_MASTER_KEY:
- return "Client key";
- case SSL2_MT_CLIENT_FINISHED:
- return "Client finished";
- case SSL2_MT_SERVER_HELLO:
- return "Server hello";
- case SSL2_MT_SERVER_VERIFY:
- return "Server verify";
- case SSL2_MT_SERVER_FINISHED:
- return "Server finished";
- case SSL2_MT_REQUEST_CERTIFICATE:
- return "Request CERT";
- case SSL2_MT_CLIENT_CERTIFICATE:
- return "Client CERT";
+ case SSL2_MT_ERROR:
+ return "Error";
+ case SSL2_MT_CLIENT_HELLO:
+ return "Client hello";
+ case SSL2_MT_CLIENT_MASTER_KEY:
+ return "Client key";
+ case SSL2_MT_CLIENT_FINISHED:
+ return "Client finished";
+ case SSL2_MT_SERVER_HELLO:
+ return "Server hello";
+ case SSL2_MT_SERVER_VERIFY:
+ return "Server verify";
+ case SSL2_MT_SERVER_FINISHED:
+ return "Server finished";
+ case SSL2_MT_REQUEST_CERTIFICATE:
+ return "Request CERT";
+ case SSL2_MT_CLIENT_CERTIFICATE:
+ return "Client CERT";
}
}
else
#endif
if(ssl_ver == SSL3_VERSION_MAJOR) {
switch(msg) {
- case SSL3_MT_HELLO_REQUEST:
- return "Hello request";
- case SSL3_MT_CLIENT_HELLO:
- return "Client hello";
- case SSL3_MT_SERVER_HELLO:
- return "Server hello";
+ case SSL3_MT_HELLO_REQUEST:
+ return "Hello request";
+ case SSL3_MT_CLIENT_HELLO:
+ return "Client hello";
+ case SSL3_MT_SERVER_HELLO:
+ return "Server hello";
#ifdef SSL3_MT_NEWSESSION_TICKET
- case SSL3_MT_NEWSESSION_TICKET:
- return "Newsession Ticket";
-#endif
- case SSL3_MT_CERTIFICATE:
- return "Certificate";
- case SSL3_MT_SERVER_KEY_EXCHANGE:
- return "Server key exchange";
- case SSL3_MT_CLIENT_KEY_EXCHANGE:
- return "Client key exchange";
- case SSL3_MT_CERTIFICATE_REQUEST:
- return "Request CERT";
- case SSL3_MT_SERVER_DONE:
- return "Server finished";
- case SSL3_MT_CERTIFICATE_VERIFY:
- return "CERT verify";
- case SSL3_MT_FINISHED:
- return "Finished";
+ case SSL3_MT_NEWSESSION_TICKET:
+ return "Newsession Ticket";
+#endif
+ case SSL3_MT_CERTIFICATE:
+ return "Certificate";
+ case SSL3_MT_SERVER_KEY_EXCHANGE:
+ return "Server key exchange";
+ case SSL3_MT_CLIENT_KEY_EXCHANGE:
+ return "Client key exchange";
+ case SSL3_MT_CERTIFICATE_REQUEST:
+ return "Request CERT";
+ case SSL3_MT_SERVER_DONE:
+ return "Server finished";
+ case SSL3_MT_CERTIFICATE_VERIFY:
+ return "CERT verify";
+ case SSL3_MT_FINISHED:
+ return "Finished";
#ifdef SSL3_MT_CERTIFICATE_STATUS
- case SSL3_MT_CERTIFICATE_STATUS:
- return "Certificate Status";
+ case SSL3_MT_CERTIFICATE_STATUS:
+ return "Certificate Status";
#endif
#ifdef SSL3_MT_ENCRYPTED_EXTENSIONS
- case SSL3_MT_ENCRYPTED_EXTENSIONS:
- return "Encrypted Extensions";
+ case SSL3_MT_ENCRYPTED_EXTENSIONS:
+ return "Encrypted Extensions";
#endif
#ifdef SSL3_MT_SUPPLEMENTAL_DATA
- case SSL3_MT_SUPPLEMENTAL_DATA:
- return "Supplemental data";
+ case SSL3_MT_SUPPLEMENTAL_DATA:
+ return "Supplemental data";
#endif
#ifdef SSL3_MT_END_OF_EARLY_DATA
- case SSL3_MT_END_OF_EARLY_DATA:
- return "End of early data";
+ case SSL3_MT_END_OF_EARLY_DATA:
+ return "End of early data";
#endif
#ifdef SSL3_MT_KEY_UPDATE
- case SSL3_MT_KEY_UPDATE:
- return "Key update";
+ case SSL3_MT_KEY_UPDATE:
+ return "Key update";
#endif
#ifdef SSL3_MT_NEXT_PROTO
- case SSL3_MT_NEXT_PROTO:
- return "Next protocol";
+ case SSL3_MT_NEXT_PROTO:
+ return "Next protocol";
#endif
#ifdef SSL3_MT_MESSAGE_HASH
- case SSL3_MT_MESSAGE_HASH:
- return "Message hash";
+ case SSL3_MT_MESSAGE_HASH:
+ return "Message hash";
#endif
}
}
@@ -2473,18 +2608,15 @@ static void ossl_trace(int direction, int ssl_ver, int content_type,
const void *buf, size_t len, SSL *ssl,
void *userp)
{
- char unknown[32];
- const char *verstr = NULL;
- struct connectdata *conn = userp;
- struct ssl_connect_data *connssl = &conn->ssl[0];
- struct ssl_backend_data *backend = connssl->backend;
+ const char *verstr = "???";
+ struct Curl_cfilter *cf = userp;
struct Curl_easy *data = NULL;
+ char unknown[32];
- DEBUGASSERT(backend);
- data = backend->logger;
-
- if(!conn || !data || !data->set.fdebug ||
- (direction != 0 && direction != 1))
+ if(!cf)
+ return;
+ data = CF_DATA_CURRENT(cf);
+ if(!data || !data->set.fdebug || (direction && direction != 1))
return;
switch(ssl_ver) {
@@ -2529,6 +2661,9 @@ static void ossl_trace(int direction, int ssl_ver, int content_type,
* For TLS 1.3, skip notification of the decrypted inner Content-Type.
*/
if(ssl_ver
+#ifdef SSL3_RT_HEADER
+ && content_type != SSL3_RT_HEADER
+#endif
#ifdef SSL3_RT_INNER_CONTENT_TYPE
&& content_type != SSL3_RT_INNER_CONTENT_TYPE
#endif
@@ -2563,7 +2698,8 @@ static void ossl_trace(int direction, int ssl_ver, int content_type,
msg_name = ssl_msg_type(ssl_ver, msg_type);
}
- txt_len = msnprintf(ssl_buf, sizeof(ssl_buf), "%s (%s), %s, %s (%d):\n",
+ txt_len = msnprintf(ssl_buf, sizeof(ssl_buf),
+ "%s (%s), %s, %s (%d):\n",
verstr, direction?"OUT":"IN",
tls_rt_name, msg_name, msg_type);
if(0 <= txt_len && (unsigned)txt_len < sizeof(ssl_buf)) {
@@ -2580,29 +2716,26 @@ static void ossl_trace(int direction, int ssl_ver, int content_type,
#ifdef USE_OPENSSL
/* ====================================================== */
-#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
-# define use_sni(x) sni = (x)
-#else
-# define use_sni(x) Curl_nop_stmt
-#endif
-
/* Check for OpenSSL 1.0.2 which has ALPN support. */
#undef HAS_ALPN
-#if OPENSSL_VERSION_NUMBER >= 0x10002000L \
- && !defined(OPENSSL_NO_TLSEXT)
+#if OPENSSL_VERSION_NUMBER >= 0x10002000L \
+ && !defined(OPENSSL_NO_TLSEXT)
# define HAS_ALPN 1
#endif
#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) /* 1.1.0 */
static CURLcode
-set_ssl_version_min_max(SSL_CTX *ctx, struct connectdata *conn)
+ossl_set_ssl_version_min_max(struct Curl_cfilter *cf, SSL_CTX *ctx)
{
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
/* first, TLS min version... */
- long curl_ssl_version_min = SSL_CONN_CONFIG(version);
+ long curl_ssl_version_min = conn_config->version;
long curl_ssl_version_max;
/* convert curl min SSL version option to OpenSSL constant */
-#if defined(OPENSSL_IS_BORINGSSL) || defined(LIBRESSL_VERSION_NUMBER)
+#if (defined(OPENSSL_IS_BORINGSSL) || \
+ defined(OPENSSL_IS_AWSLC) || \
+ defined(LIBRESSL_VERSION_NUMBER))
uint16_t ossl_ssl_version_min = 0;
uint16_t ossl_ssl_version_max = 0;
#else
@@ -2610,22 +2743,22 @@ set_ssl_version_min_max(SSL_CTX *ctx, struct connectdata *conn)
long ossl_ssl_version_max = 0;
#endif
switch(curl_ssl_version_min) {
- case CURL_SSLVERSION_TLSv1: /* TLS 1.x */
- case CURL_SSLVERSION_TLSv1_0:
- ossl_ssl_version_min = TLS1_VERSION;
- break;
- case CURL_SSLVERSION_TLSv1_1:
- ossl_ssl_version_min = TLS1_1_VERSION;
- break;
- case CURL_SSLVERSION_TLSv1_2:
- ossl_ssl_version_min = TLS1_2_VERSION;
- break;
- case CURL_SSLVERSION_TLSv1_3:
+ case CURL_SSLVERSION_TLSv1: /* TLS 1.x */
+ case CURL_SSLVERSION_TLSv1_0:
+ ossl_ssl_version_min = TLS1_VERSION;
+ break;
+ case CURL_SSLVERSION_TLSv1_1:
+ ossl_ssl_version_min = TLS1_1_VERSION;
+ break;
+ case CURL_SSLVERSION_TLSv1_2:
+ ossl_ssl_version_min = TLS1_2_VERSION;
+ break;
+ case CURL_SSLVERSION_TLSv1_3:
#ifdef TLS1_3_VERSION
- ossl_ssl_version_min = TLS1_3_VERSION;
- break;
+ ossl_ssl_version_min = TLS1_3_VERSION;
+ break;
#else
- return CURLE_NOT_BUILT_IN;
+ return CURLE_NOT_BUILT_IN;
#endif
}
@@ -2642,33 +2775,33 @@ set_ssl_version_min_max(SSL_CTX *ctx, struct connectdata *conn)
}
/* ... then, TLS max version */
- curl_ssl_version_max = SSL_CONN_CONFIG(version_max);
+ curl_ssl_version_max = conn_config->version_max;
/* convert curl max SSL version option to OpenSSL constant */
switch(curl_ssl_version_max) {
- case CURL_SSLVERSION_MAX_TLSv1_0:
- ossl_ssl_version_max = TLS1_VERSION;
- break;
- case CURL_SSLVERSION_MAX_TLSv1_1:
- ossl_ssl_version_max = TLS1_1_VERSION;
- break;
- case CURL_SSLVERSION_MAX_TLSv1_2:
- ossl_ssl_version_max = TLS1_2_VERSION;
- break;
+ case CURL_SSLVERSION_MAX_TLSv1_0:
+ ossl_ssl_version_max = TLS1_VERSION;
+ break;
+ case CURL_SSLVERSION_MAX_TLSv1_1:
+ ossl_ssl_version_max = TLS1_1_VERSION;
+ break;
+ case CURL_SSLVERSION_MAX_TLSv1_2:
+ ossl_ssl_version_max = TLS1_2_VERSION;
+ break;
#ifdef TLS1_3_VERSION
- case CURL_SSLVERSION_MAX_TLSv1_3:
- ossl_ssl_version_max = TLS1_3_VERSION;
- break;
+ case CURL_SSLVERSION_MAX_TLSv1_3:
+ ossl_ssl_version_max = TLS1_3_VERSION;
+ break;
#endif
- case CURL_SSLVERSION_MAX_NONE: /* none selected */
- case CURL_SSLVERSION_MAX_DEFAULT: /* max selected */
- default:
- /* SSL_CTX_set_max_proto_version states that:
- setting the maximum to 0 will enable
- protocol versions up to the highest version
- supported by the library */
- ossl_ssl_version_max = 0;
- break;
+ case CURL_SSLVERSION_MAX_NONE: /* none selected */
+ case CURL_SSLVERSION_MAX_DEFAULT: /* max selected */
+ default:
+ /* SSL_CTX_set_max_proto_version states that:
+ setting the maximum to 0 will enable
+ protocol versions up to the highest version
+ supported by the library */
+ ossl_ssl_version_max = 0;
+ break;
}
if(!SSL_CTX_set_max_proto_version(ctx, ossl_ssl_version_max)) {
@@ -2679,7 +2812,7 @@ set_ssl_version_min_max(SSL_CTX *ctx, struct connectdata *conn)
}
#endif
-#ifdef OPENSSL_IS_BORINGSSL
+#if defined(OPENSSL_IS_BORINGSSL) || defined(OPENSSL_IS_AWSLC)
typedef uint32_t ctx_option_t;
#elif OPENSSL_VERSION_NUMBER >= 0x30000000L
typedef uint64_t ctx_option_t;
@@ -2689,75 +2822,76 @@ typedef long ctx_option_t;
#if (OPENSSL_VERSION_NUMBER < 0x10100000L) /* 1.1.0 */
static CURLcode
-set_ssl_version_min_max_legacy(ctx_option_t *ctx_options,
- struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
+ossl_set_ssl_version_min_max_legacy(ctx_option_t *ctx_options,
+ struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
- long ssl_version = SSL_CONN_CONFIG(version);
- long ssl_version_max = SSL_CONN_CONFIG(version_max);
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
+ long ssl_version = conn_config->version;
+ long ssl_version_max = conn_config->version_max;
(void) data; /* In case it's unused. */
switch(ssl_version) {
- case CURL_SSLVERSION_TLSv1_3:
+ case CURL_SSLVERSION_TLSv1_3:
#ifdef TLS1_3_VERSION
- {
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
- DEBUGASSERT(backend);
- SSL_CTX_set_max_proto_version(backend->ctx, TLS1_3_VERSION);
- *ctx_options |= SSL_OP_NO_TLSv1_2;
- }
+ {
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct ossl_ssl_backend_data *backend =
+ (struct ossl_ssl_backend_data *)connssl->backend;
+ DEBUGASSERT(backend);
+ SSL_CTX_set_max_proto_version(backend->ctx, TLS1_3_VERSION);
+ *ctx_options |= SSL_OP_NO_TLSv1_2;
+ }
#else
- (void)sockindex;
- (void)ctx_options;
- failf(data, OSSL_PACKAGE " was built without TLS 1.3 support");
- return CURLE_NOT_BUILT_IN;
+ (void)ctx_options;
+ failf(data, OSSL_PACKAGE " was built without TLS 1.3 support");
+ return CURLE_NOT_BUILT_IN;
#endif
- /* FALLTHROUGH */
- case CURL_SSLVERSION_TLSv1_2:
+ /* FALLTHROUGH */
+ case CURL_SSLVERSION_TLSv1_2:
#if OPENSSL_VERSION_NUMBER >= 0x1000100FL
- *ctx_options |= SSL_OP_NO_TLSv1_1;
+ *ctx_options |= SSL_OP_NO_TLSv1_1;
#else
- failf(data, OSSL_PACKAGE " was built without TLS 1.2 support");
- return CURLE_NOT_BUILT_IN;
+ failf(data, OSSL_PACKAGE " was built without TLS 1.2 support");
+ return CURLE_NOT_BUILT_IN;
#endif
- /* FALLTHROUGH */
- case CURL_SSLVERSION_TLSv1_1:
+ /* FALLTHROUGH */
+ case CURL_SSLVERSION_TLSv1_1:
#if OPENSSL_VERSION_NUMBER >= 0x1000100FL
- *ctx_options |= SSL_OP_NO_TLSv1;
+ *ctx_options |= SSL_OP_NO_TLSv1;
#else
- failf(data, OSSL_PACKAGE " was built without TLS 1.1 support");
- return CURLE_NOT_BUILT_IN;
+ failf(data, OSSL_PACKAGE " was built without TLS 1.1 support");
+ return CURLE_NOT_BUILT_IN;
#endif
- /* FALLTHROUGH */
- case CURL_SSLVERSION_TLSv1_0:
- case CURL_SSLVERSION_TLSv1:
- break;
+ /* FALLTHROUGH */
+ case CURL_SSLVERSION_TLSv1_0:
+ case CURL_SSLVERSION_TLSv1:
+ break;
}
switch(ssl_version_max) {
- case CURL_SSLVERSION_MAX_TLSv1_0:
+ case CURL_SSLVERSION_MAX_TLSv1_0:
#if OPENSSL_VERSION_NUMBER >= 0x1000100FL
- *ctx_options |= SSL_OP_NO_TLSv1_1;
+ *ctx_options |= SSL_OP_NO_TLSv1_1;
#endif
- /* FALLTHROUGH */
- case CURL_SSLVERSION_MAX_TLSv1_1:
+ /* FALLTHROUGH */
+ case CURL_SSLVERSION_MAX_TLSv1_1:
#if OPENSSL_VERSION_NUMBER >= 0x1000100FL
- *ctx_options |= SSL_OP_NO_TLSv1_2;
+ *ctx_options |= SSL_OP_NO_TLSv1_2;
#endif
- /* FALLTHROUGH */
- case CURL_SSLVERSION_MAX_TLSv1_2:
+ /* FALLTHROUGH */
+ case CURL_SSLVERSION_MAX_TLSv1_2:
#ifdef TLS1_3_VERSION
- *ctx_options |= SSL_OP_NO_TLSv1_3;
+ *ctx_options |= SSL_OP_NO_TLSv1_3;
#endif
- break;
- case CURL_SSLVERSION_MAX_TLSv1_3:
+ break;
+ case CURL_SSLVERSION_MAX_TLSv1_3:
#ifdef TLS1_3_VERSION
- break;
+ break;
#else
- failf(data, OSSL_PACKAGE " was built without TLS 1.3 support");
- return CURLE_NOT_BUILT_IN;
+ failf(data, OSSL_PACKAGE " was built without TLS 1.3 support");
+ return CURLE_NOT_BUILT_IN;
#endif
}
return CURLE_OK;
@@ -2770,31 +2904,23 @@ set_ssl_version_min_max_legacy(ctx_option_t *ctx_options,
static int ossl_new_session_cb(SSL *ssl, SSL_SESSION *ssl_sessionid)
{
int res = 0;
- struct connectdata *conn;
struct Curl_easy *data;
- int sockindex;
- curl_socket_t *sockindex_ptr;
- int data_idx = ossl_get_ssl_data_index();
- int connectdata_idx = ossl_get_ssl_conn_index();
- int sockindex_idx = ossl_get_ssl_sockindex_index();
- int proxy_idx = ossl_get_proxy_index();
+ struct Curl_cfilter *cf;
+ const struct ssl_config_data *config;
+ struct ssl_connect_data *connssl;
bool isproxy;
- if(data_idx < 0 || connectdata_idx < 0 || sockindex_idx < 0 || proxy_idx < 0)
- return 0;
-
- conn = (struct connectdata*) SSL_get_ex_data(ssl, connectdata_idx);
- data = (struct Curl_easy *) SSL_get_ex_data(ssl, data_idx);
+ cf = (struct Curl_cfilter*) SSL_get_app_data(ssl);
+ connssl = cf? cf->ctx : NULL;
+ data = connssl? CF_DATA_CURRENT(cf) : NULL;
/* The sockindex has been stored as a pointer to an array element */
- sockindex_ptr = (curl_socket_t*) SSL_get_ex_data(ssl, sockindex_idx);
- if(!conn || !data || !sockindex_ptr)
+ if(!cf || !data)
return 0;
- sockindex = (int)(sockindex_ptr - conn->sock);
+ isproxy = Curl_ssl_cf_is_proxy(cf);
- isproxy = SSL_get_ex_data(ssl, proxy_idx) ? TRUE : FALSE;
-
- if(SSL_SET_OPTION(primary.sessionid)) {
+ config = Curl_ssl_cf_get_config(cf, data);
+ if(config->primary.sessionid) {
bool incache;
bool added = FALSE;
void *old_ssl_sessionid = NULL;
@@ -2803,8 +2929,7 @@ static int ossl_new_session_cb(SSL *ssl, SSL_SESSION *ssl_sessionid)
if(isproxy)
incache = FALSE;
else
- incache = !(Curl_ssl_getsessionid(data, conn, isproxy,
- &old_ssl_sessionid, NULL, sockindex));
+ incache = !(Curl_ssl_getsessionid(cf, data, &old_ssl_sessionid, NULL));
if(incache) {
if(old_ssl_sessionid != ssl_sessionid) {
infof(data, "old SSL session ID is stale, removing");
@@ -2814,8 +2939,8 @@ static int ossl_new_session_cb(SSL *ssl, SSL_SESSION *ssl_sessionid)
}
if(!incache) {
- if(!Curl_ssl_addsessionid(data, conn, isproxy, ssl_sessionid,
- 0 /* unknown size */, sockindex, &added)) {
+ if(!Curl_ssl_addsessionid(cf, data, ssl_sessionid,
+ 0 /* unknown size */, &added)) {
if(added) {
/* the session has been put into the session cache */
res = 1;
@@ -2830,7 +2955,7 @@ static int ossl_new_session_cb(SSL *ssl, SSL_SESSION *ssl_sessionid)
return res;
}
-static CURLcode load_cacert_from_memory(SSL_CTX *ctx,
+static CURLcode load_cacert_from_memory(X509_STORE *store,
const struct curl_blob *ca_info_blob)
{
/* these need to be freed at the end */
@@ -2839,16 +2964,11 @@ static CURLcode load_cacert_from_memory(SSL_CTX *ctx,
/* everything else is just a reference */
int i, count = 0;
- X509_STORE *cts = NULL;
X509_INFO *itmp = NULL;
if(ca_info_blob->len > (size_t)INT_MAX)
return CURLE_SSL_CACERT_BADFILE;
- cts = SSL_CTX_get_cert_store(ctx);
- if(!cts)
- return CURLE_OUT_OF_MEMORY;
-
cbio = BIO_new_mem_buf(ca_info_blob->data, (int)ca_info_blob->len);
if(!cbio)
return CURLE_OUT_OF_MEMORY;
@@ -2863,7 +2983,7 @@ static CURLcode load_cacert_from_memory(SSL_CTX *ctx,
for(i = 0; i < (int)sk_X509_INFO_num(inf); ++i) {
itmp = sk_X509_INFO_value(inf, i);
if(itmp->x509) {
- if(X509_STORE_add_cert(cts, itmp->x509)) {
+ if(X509_STORE_add_cert(store, itmp->x509)) {
++count;
}
else {
@@ -2873,7 +2993,7 @@ static CURLcode load_cacert_from_memory(SSL_CTX *ctx,
}
}
if(itmp->crl) {
- if(X509_STORE_add_crl(cts, itmp->crl)) {
+ if(X509_STORE_add_crl(store, itmp->crl)) {
++count;
}
else {
@@ -2888,48 +3008,466 @@ static CURLcode load_cacert_from_memory(SSL_CTX *ctx,
BIO_free(cbio);
/* if we didn't end up importing anything, treat that as an error */
- return (count > 0 ? CURLE_OK : CURLE_SSL_CACERT_BADFILE);
+ return (count > 0) ? CURLE_OK : CURLE_SSL_CACERT_BADFILE;
}
-static CURLcode ossl_connect_step1(struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
+#if defined(USE_WIN32_CRYPTO)
+static CURLcode import_windows_cert_store(struct Curl_easy *data,
+ const char *name,
+ X509_STORE *store,
+ bool *imported)
{
CURLcode result = CURLE_OK;
- char *ciphers;
- SSL_METHOD_QUAL SSL_METHOD *req_method = NULL;
+ HCERTSTORE hStore;
+
+ *imported = false;
+
+ hStore = CertOpenSystemStoreA(0, name);
+ if(hStore) {
+ PCCERT_CONTEXT pContext = NULL;
+ /* The array of enhanced key usage OIDs will vary per certificate and
+ is declared outside of the loop so that rather than malloc/free each
+ iteration we can grow it with realloc, when necessary. */
+ CERT_ENHKEY_USAGE *enhkey_usage = NULL;
+ DWORD enhkey_usage_size = 0;
+
+ /* This loop makes a best effort to import all valid certificates from
+ the MS root store. If a certificate cannot be imported it is
+ skipped. 'result' is used to store only hard-fail conditions (such
+ as out of memory) that cause an early break. */
+ result = CURLE_OK;
+ for(;;) {
+ X509 *x509;
+ FILETIME now;
+ BYTE key_usage[2];
+ DWORD req_size;
+ const unsigned char *encoded_cert;
+#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
+ char cert_name[256];
+#endif
+
+ pContext = CertEnumCertificatesInStore(hStore, pContext);
+ if(!pContext)
+ break;
+
+#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
+ if(!CertGetNameStringA(pContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0,
+ NULL, cert_name, sizeof(cert_name))) {
+ strcpy(cert_name, "Unknown");
+ }
+ infof(data, "SSL: Checking cert \"%s\"", cert_name);
+#endif
+ encoded_cert = (const unsigned char *)pContext->pbCertEncoded;
+ if(!encoded_cert)
+ continue;
+
+ GetSystemTimeAsFileTime(&now);
+ if(CompareFileTime(&pContext->pCertInfo->NotBefore, &now) > 0 ||
+ CompareFileTime(&now, &pContext->pCertInfo->NotAfter) > 0)
+ continue;
+
+ /* If key usage exists check for signing attribute */
+ if(CertGetIntendedKeyUsage(pContext->dwCertEncodingType,
+ pContext->pCertInfo,
+ key_usage, sizeof(key_usage))) {
+ if(!(key_usage[0] & CERT_KEY_CERT_SIGN_KEY_USAGE))
+ continue;
+ }
+ else if(GetLastError())
+ continue;
+
+ /* If enhanced key usage exists check for server auth attribute.
+ *
+ * Note "In a Microsoft environment, a certificate might also have
+ * EKU extended properties that specify valid uses for the
+ * certificate." The call below checks both, and behavior varies
+ * depending on what is found. For more details see
+ * CertGetEnhancedKeyUsage doc.
+ */
+ if(CertGetEnhancedKeyUsage(pContext, 0, NULL, &req_size)) {
+ if(req_size && req_size > enhkey_usage_size) {
+ void *tmp = realloc(enhkey_usage, req_size);
+
+ if(!tmp) {
+ failf(data, "SSL: Out of memory allocating for OID list");
+ result = CURLE_OUT_OF_MEMORY;
+ break;
+ }
+
+ enhkey_usage = (CERT_ENHKEY_USAGE *)tmp;
+ enhkey_usage_size = req_size;
+ }
+
+ if(CertGetEnhancedKeyUsage(pContext, 0, enhkey_usage, &req_size)) {
+ if(!enhkey_usage->cUsageIdentifier) {
+ /* "If GetLastError returns CRYPT_E_NOT_FOUND, the certificate
+ is good for all uses. If it returns zero, the certificate
+ has no valid uses." */
+ if((HRESULT)GetLastError() != CRYPT_E_NOT_FOUND)
+ continue;
+ }
+ else {
+ DWORD i;
+ bool found = false;
+
+ for(i = 0; i < enhkey_usage->cUsageIdentifier; ++i) {
+ if(!strcmp("1.3.6.1.5.5.7.3.1" /* OID server auth */,
+ enhkey_usage->rgpszUsageIdentifier[i])) {
+ found = true;
+ break;
+ }
+ }
+
+ if(!found)
+ continue;
+ }
+ }
+ else
+ continue;
+ }
+ else
+ continue;
+
+ x509 = d2i_X509(NULL, &encoded_cert, pContext->cbCertEncoded);
+ if(!x509)
+ continue;
+
+ /* Try to import the certificate. This may fail for legitimate
+ reasons such as duplicate certificate, which is allowed by MS but
+ not OpenSSL. */
+ if(X509_STORE_add_cert(store, x509) == 1) {
+#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
+ infof(data, "SSL: Imported cert \"%s\"", cert_name);
+#endif
+ *imported = true;
+ }
+ X509_free(x509);
+ }
+
+ free(enhkey_usage);
+ CertFreeCertificateContext(pContext);
+ CertCloseStore(hStore, 0);
+
+ if(result)
+ return result;
+ }
+
+ return result;
+}
+#endif
+
+static CURLcode populate_x509_store(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ X509_STORE *store)
+{
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
+ struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data);
+ CURLcode result = CURLE_OK;
X509_LOOKUP *lookup = NULL;
- curl_socket_t sockfd = conn->sock[sockindex];
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- ctx_option_t ctx_options = 0;
- void *ssl_sessionid = NULL;
+ const struct curl_blob *ca_info_blob = conn_config->ca_info_blob;
+ const char * const ssl_cafile =
+ /* CURLOPT_CAINFO_BLOB overrides CURLOPT_CAINFO */
+ (ca_info_blob ? NULL : conn_config->CAfile);
+ const char * const ssl_capath = conn_config->CApath;
+ const char * const ssl_crlfile = ssl_config->primary.CRLfile;
+ const bool verifypeer = conn_config->verifypeer;
+ bool imported_native_ca = false;
+ bool imported_ca_info_blob = false;
-#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
- bool sni;
- const char * const hostname = SSL_HOST_NAME();
+ if(!store)
+ return CURLE_OUT_OF_MEMORY;
-#ifdef ENABLE_IPV6
- struct in6_addr addr;
+ if(verifypeer) {
+#if defined(USE_WIN32_CRYPTO)
+ /* Import certificates from the Windows root certificate store if
+ requested.
+ https://stackoverflow.com/questions/9507184/
+ https://github.com/d3x0r/SACK/blob/master/src/netlib/ssl_layer.c#L1037
+ https://datatracker.ietf.org/doc/html/rfc5280 */
+ if(ssl_config->native_ca_store) {
+ const char *storeNames[] = {
+ "ROOT", /* Trusted Root Certification Authorities */
+ "CA" /* Intermediate Certification Authorities */
+ };
+ size_t i;
+ for(i = 0; i < ARRAYSIZE(storeNames); ++i) {
+ bool imported = false;
+ result = import_windows_cert_store(data, storeNames[i], store,
+ &imported);
+ if(result)
+ return result;
+ if(imported) {
+ infof(data, "successfully imported Windows %s store", storeNames[i]);
+ imported_native_ca = true;
+ }
+ else
+ infof(data, "error importing Windows %s store, continuing anyway",
+ storeNames[i]);
+ }
+ }
+#endif
+ if(ca_info_blob) {
+ result = load_cacert_from_memory(store, ca_info_blob);
+ if(result) {
+ failf(data, "error importing CA certificate blob");
+ return result;
+ }
+ else {
+ imported_ca_info_blob = true;
+ infof(data, "successfully imported CA certificate blob");
+ }
+ }
+
+ if(ssl_cafile || ssl_capath) {
+#if (OPENSSL_VERSION_NUMBER >= 0x30000000L)
+ /* OpenSSL 3.0.0 has deprecated SSL_CTX_load_verify_locations */
+ if(ssl_cafile && !X509_STORE_load_file(store, ssl_cafile)) {
+ if(!imported_native_ca && !imported_ca_info_blob) {
+ /* Fail if we insist on successfully verifying the server. */
+ failf(data, "error setting certificate file: %s", ssl_cafile);
+ return CURLE_SSL_CACERT_BADFILE;
+ }
+ else
+ infof(data, "error setting certificate file, continuing anyway");
+ }
+ if(ssl_capath && !X509_STORE_load_path(store, ssl_capath)) {
+ if(!imported_native_ca && !imported_ca_info_blob) {
+ /* Fail if we insist on successfully verifying the server. */
+ failf(data, "error setting certificate path: %s", ssl_capath);
+ return CURLE_SSL_CACERT_BADFILE;
+ }
+ else
+ infof(data, "error setting certificate path, continuing anyway");
+ }
#else
- struct in_addr addr;
+ /* tell OpenSSL where to find CA certificates that are used to verify the
+ server's certificate. */
+ if(!X509_STORE_load_locations(store, ssl_cafile, ssl_capath)) {
+ if(!imported_native_ca && !imported_ca_info_blob) {
+ /* Fail if we insist on successfully verifying the server. */
+ failf(data, "error setting certificate verify locations:"
+ " CAfile: %s CApath: %s",
+ ssl_cafile ? ssl_cafile : "none",
+ ssl_capath ? ssl_capath : "none");
+ return CURLE_SSL_CACERT_BADFILE;
+ }
+ else {
+ infof(data, "error setting certificate verify locations,"
+ " continuing anyway");
+ }
+ }
#endif
+ infof(data, " CAfile: %s", ssl_cafile ? ssl_cafile : "none");
+ infof(data, " CApath: %s", ssl_capath ? ssl_capath : "none");
+ }
+
+#ifdef CURL_CA_FALLBACK
+ if(!ssl_cafile && !ssl_capath &&
+ !imported_native_ca && !imported_ca_info_blob) {
+ /* verifying the peer without any CA certificates won't
+ work so use openssl's built-in default as fallback */
+ X509_STORE_set_default_paths(store);
+ }
#endif
- const long int ssl_version = SSL_CONN_CONFIG(version);
-#ifdef USE_OPENSSL_SRP
- const enum CURL_TLSAUTH ssl_authtype = SSL_SET_OPTION(primary.authtype);
+ }
+
+ if(ssl_crlfile) {
+ /* tell OpenSSL where to find CRL file that is used to check certificate
+ * revocation */
+ lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file());
+ if(!lookup ||
+ (!X509_load_crl_file(lookup, ssl_crlfile, X509_FILETYPE_PEM)) ) {
+ failf(data, "error loading CRL file: %s", ssl_crlfile);
+ return CURLE_SSL_CRL_BADFILE;
+ }
+ /* Everything is fine. */
+ infof(data, "successfully loaded CRL file:");
+ X509_STORE_set_flags(store,
+ X509_V_FLAG_CRL_CHECK|X509_V_FLAG_CRL_CHECK_ALL);
+
+ infof(data, " CRLfile: %s", ssl_crlfile);
+ }
+
+ if(verifypeer) {
+ /* Try building a chain using issuers in the trusted store first to avoid
+ problems with server-sent legacy intermediates. Newer versions of
+ OpenSSL do alternate chain checking by default but we do not know how to
+ determine that in a reliable manner.
+ https://rt.openssl.org/Ticket/Display.html?id=3621&user=guest&pass=guest
+ */
+#if defined(X509_V_FLAG_TRUSTED_FIRST)
+ X509_STORE_set_flags(store, X509_V_FLAG_TRUSTED_FIRST);
#endif
- char * const ssl_cert = SSL_SET_OPTION(primary.clientcert);
- const struct curl_blob *ssl_cert_blob = SSL_SET_OPTION(primary.cert_blob);
- const struct curl_blob *ca_info_blob = SSL_CONN_CONFIG(ca_info_blob);
- const char * const ssl_cert_type = SSL_SET_OPTION(cert_type);
- const char * const ssl_cafile =
- /* CURLOPT_CAINFO_BLOB overrides CURLOPT_CAINFO */
- (ca_info_blob ? NULL : SSL_CONN_CONFIG(CAfile));
- const char * const ssl_capath = SSL_CONN_CONFIG(CApath);
- const bool verifypeer = SSL_CONN_CONFIG(verifypeer);
- const char * const ssl_crlfile = SSL_SET_OPTION(primary.CRLfile);
+#ifdef X509_V_FLAG_PARTIAL_CHAIN
+ if(!ssl_config->no_partialchain && !ssl_crlfile) {
+ /* Have intermediate certificates in the trust store be treated as
+ trust-anchors, in the same way as self-signed root CA certificates
+ are. This allows users to verify servers using the intermediate cert
+ only, instead of needing the whole chain.
+
+ Due to OpenSSL bug https://github.com/openssl/openssl/issues/5081 we
+ cannot do partial chains with a CRL check.
+ */
+ X509_STORE_set_flags(store, X509_V_FLAG_PARTIAL_CHAIN);
+ }
+#endif
+ }
+
+ return result;
+}
+
+#if defined(HAVE_SSL_X509_STORE_SHARE)
+static bool cached_x509_store_expired(const struct Curl_easy *data,
+ const struct multi_ssl_backend_data *mb)
+{
+ const struct ssl_general_config *cfg = &data->set.general_ssl;
+ struct curltime now = Curl_now();
+ timediff_t elapsed_ms = Curl_timediff(now, mb->time);
+ timediff_t timeout_ms = cfg->ca_cache_timeout * (timediff_t)1000;
+
+ if(timeout_ms < 0)
+ return false;
+
+ return elapsed_ms >= timeout_ms;
+}
+
+static bool cached_x509_store_different(
+ struct Curl_cfilter *cf,
+ const struct multi_ssl_backend_data *mb)
+{
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
+ if(!mb->CAfile || !conn_config->CAfile)
+ return mb->CAfile != conn_config->CAfile;
+
+ return strcmp(mb->CAfile, conn_config->CAfile);
+}
+
+static X509_STORE *get_cached_x509_store(struct Curl_cfilter *cf,
+ const struct Curl_easy *data)
+{
+ struct Curl_multi *multi = data->multi_easy ? data->multi_easy : data->multi;
+ X509_STORE *store = NULL;
+
+ DEBUGASSERT(multi);
+ if(multi &&
+ multi->ssl_backend_data &&
+ multi->ssl_backend_data->store &&
+ !cached_x509_store_expired(data, multi->ssl_backend_data) &&
+ !cached_x509_store_different(cf, multi->ssl_backend_data)) {
+ store = multi->ssl_backend_data->store;
+ }
+
+ return store;
+}
+
+static void set_cached_x509_store(struct Curl_cfilter *cf,
+ const struct Curl_easy *data,
+ X509_STORE *store)
+{
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
+ struct Curl_multi *multi = data->multi_easy ? data->multi_easy : data->multi;
+ struct multi_ssl_backend_data *mbackend;
+
+ DEBUGASSERT(multi);
+ if(!multi)
+ return;
+
+ if(!multi->ssl_backend_data) {
+ multi->ssl_backend_data = calloc(1, sizeof(struct multi_ssl_backend_data));
+ if(!multi->ssl_backend_data)
+ return;
+ }
+
+ mbackend = multi->ssl_backend_data;
+
+ if(X509_STORE_up_ref(store)) {
+ char *CAfile = NULL;
+
+ if(conn_config->CAfile) {
+ CAfile = strdup(conn_config->CAfile);
+ if(!CAfile) {
+ X509_STORE_free(store);
+ return;
+ }
+ }
+
+ if(mbackend->store) {
+ X509_STORE_free(mbackend->store);
+ free(mbackend->CAfile);
+ }
+
+ mbackend->time = Curl_now();
+ mbackend->store = store;
+ mbackend->CAfile = CAfile;
+ }
+}
+
+CURLcode Curl_ssl_setup_x509_store(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ SSL_CTX *ssl_ctx)
+{
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
+ struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data);
+ CURLcode result = CURLE_OK;
+ X509_STORE *cached_store;
+ bool cache_criteria_met;
+
+ /* Consider the X509 store cacheable if it comes exclusively from a CAfile,
+ or no source is provided and we are falling back to openssl's built-in
+ default. */
+ cache_criteria_met = (data->set.general_ssl.ca_cache_timeout != 0) &&
+ conn_config->verifypeer &&
+ !conn_config->CApath &&
+ !conn_config->ca_info_blob &&
+ !ssl_config->primary.CRLfile &&
+ !ssl_config->native_ca_store;
+
+ cached_store = get_cached_x509_store(cf, data);
+ if(cached_store && cache_criteria_met && X509_STORE_up_ref(cached_store)) {
+ SSL_CTX_set_cert_store(ssl_ctx, cached_store);
+ }
+ else {
+ X509_STORE *store = SSL_CTX_get_cert_store(ssl_ctx);
+
+ result = populate_x509_store(cf, data, store);
+ if(result == CURLE_OK && cache_criteria_met) {
+ set_cached_x509_store(cf, data, store);
+ }
+ }
+
+ return result;
+}
+#else /* HAVE_SSL_X509_STORE_SHARE */
+CURLcode Curl_ssl_setup_x509_store(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ SSL_CTX *ssl_ctx)
+{
+ X509_STORE *store = SSL_CTX_get_cert_store(ssl_ctx);
+
+ return populate_x509_store(cf, data, store);
+}
+#endif /* HAVE_SSL_X509_STORE_SHARE */
+
+static CURLcode ossl_connect_step1(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ CURLcode result = CURLE_OK;
+ char *ciphers;
+ SSL_METHOD_QUAL SSL_METHOD *req_method = NULL;
+ struct ssl_connect_data *connssl = cf->ctx;
+ ctx_option_t ctx_options = 0;
+ void *ssl_sessionid = NULL;
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
+ struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data);
+ BIO *bio;
+ const long int ssl_version = conn_config->version;
+ char * const ssl_cert = ssl_config->primary.clientcert;
+ const struct curl_blob *ssl_cert_blob = ssl_config->primary.cert_blob;
+ const char * const ssl_cert_type = ssl_config->cert_type;
+ const bool verifypeer = conn_config->verifypeer;
char error_buffer[256];
- struct ssl_backend_data *backend = connssl->backend;
- bool imported_native_ca = false;
+ struct ossl_ssl_backend_data *backend =
+ (struct ossl_ssl_backend_data *)connssl->backend;
DEBUGASSERT(ssl_connect_1 == connssl->connecting_state);
DEBUGASSERT(backend);
@@ -2939,7 +3477,7 @@ static CURLcode ossl_connect_step1(struct Curl_easy *data,
if(result)
return result;
- SSL_SET_OPTION_LVALUE(certverifyresult) = !X509_V_OK;
+ ssl_config->certverifyresult = !X509_V_OK;
/* check to see if we've been told to use an explicit SSL/TLS version */
@@ -2956,7 +3494,6 @@ static CURLcode ossl_connect_step1(struct Curl_easy *data,
#else
req_method = SSLv23_client_method();
#endif
- use_sni(TRUE);
break;
case CURL_SSLVERSION_SSLv2:
failf(data, "No SSLv2 support");
@@ -2969,7 +3506,12 @@ static CURLcode ossl_connect_step1(struct Curl_easy *data,
return CURLE_SSL_CONNECT_ERROR;
}
- DEBUGASSERT(!backend->ctx);
+ if(backend->ctx) {
+ /* This happens when an error was encountered before in this
+ * step and we are called to do it again. Get rid of any leftover
+ * from the previous call. */
+ ossl_close(cf, data);
+ }
backend->ctx = SSL_CTX_new(req_method);
if(!backend->ctx) {
@@ -2986,8 +3528,7 @@ static CURLcode ossl_connect_step1(struct Curl_easy *data,
if(data->set.fdebug && data->set.verbose) {
/* the SSL trace callback is only used for verbose logging */
SSL_CTX_set_msg_callback(backend->ctx, ossl_trace);
- SSL_CTX_set_msg_callback_arg(backend->ctx, conn);
- set_logger(conn, data);
+ SSL_CTX_set_msg_callback_arg(backend->ctx, cf);
}
#endif
@@ -3045,75 +3586,55 @@ static CURLcode ossl_connect_step1(struct Curl_easy *data,
#ifdef SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS
/* unless the user explicitly asks to allow the protocol vulnerability we
use the work-around */
- if(!SSL_SET_OPTION(enable_beast))
+ if(!ssl_config->enable_beast)
ctx_options &= ~SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS;
#endif
switch(ssl_version) {
- case CURL_SSLVERSION_SSLv2:
- case CURL_SSLVERSION_SSLv3:
- return CURLE_NOT_BUILT_IN;
+ case CURL_SSLVERSION_SSLv2:
+ case CURL_SSLVERSION_SSLv3:
+ return CURLE_NOT_BUILT_IN;
/* "--tlsv<x.y>" options mean TLS >= version <x.y> */
- case CURL_SSLVERSION_DEFAULT:
- case CURL_SSLVERSION_TLSv1: /* TLS >= version 1.0 */
- case CURL_SSLVERSION_TLSv1_0: /* TLS >= version 1.0 */
- case CURL_SSLVERSION_TLSv1_1: /* TLS >= version 1.1 */
- case CURL_SSLVERSION_TLSv1_2: /* TLS >= version 1.2 */
- case CURL_SSLVERSION_TLSv1_3: /* TLS >= version 1.3 */
- /* asking for any TLS version as the minimum, means no SSL versions
- allowed */
- ctx_options |= SSL_OP_NO_SSLv2;
- ctx_options |= SSL_OP_NO_SSLv3;
+ case CURL_SSLVERSION_DEFAULT:
+ case CURL_SSLVERSION_TLSv1: /* TLS >= version 1.0 */
+ case CURL_SSLVERSION_TLSv1_0: /* TLS >= version 1.0 */
+ case CURL_SSLVERSION_TLSv1_1: /* TLS >= version 1.1 */
+ case CURL_SSLVERSION_TLSv1_2: /* TLS >= version 1.2 */
+ case CURL_SSLVERSION_TLSv1_3: /* TLS >= version 1.3 */
+ /* asking for any TLS version as the minimum, means no SSL versions
+ allowed */
+ ctx_options |= SSL_OP_NO_SSLv2;
+ ctx_options |= SSL_OP_NO_SSLv3;
#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) /* 1.1.0 */
- result = set_ssl_version_min_max(backend->ctx, conn);
+ result = ossl_set_ssl_version_min_max(cf, backend->ctx);
#else
- result = set_ssl_version_min_max_legacy(&ctx_options, data, conn,
- sockindex);
+ result = ossl_set_ssl_version_min_max_legacy(&ctx_options, cf, data);
#endif
- if(result != CURLE_OK)
- return result;
- break;
+ if(result != CURLE_OK)
+ return result;
+ break;
- default:
- failf(data, "Unrecognized parameter passed via CURLOPT_SSLVERSION");
- return CURLE_SSL_CONNECT_ERROR;
+ default:
+ failf(data, "Unrecognized parameter passed via CURLOPT_SSLVERSION");
+ return CURLE_SSL_CONNECT_ERROR;
}
SSL_CTX_set_options(backend->ctx, ctx_options);
#ifdef HAS_ALPN
- if(conn->bits.tls_enable_alpn) {
- int cur = 0;
- unsigned char protocols[128];
-
-#ifdef USE_HTTP2
- if(data->state.httpwant >= CURL_HTTP_VERSION_2
-#ifndef CURL_DISABLE_PROXY
- && (!SSL_IS_PROXY() || !conn->bits.tunnel_proxy)
-#endif
- ) {
- protocols[cur++] = ALPN_H2_LENGTH;
+ if(connssl->alpn) {
+ struct alpn_proto_buf proto;
- memcpy(&protocols[cur], ALPN_H2, ALPN_H2_LENGTH);
- cur += ALPN_H2_LENGTH;
- infof(data, VTLS_INFOF_ALPN_OFFER_1STR, ALPN_H2);
- }
-#endif
-
- protocols[cur++] = ALPN_HTTP_1_1_LENGTH;
- memcpy(&protocols[cur], ALPN_HTTP_1_1, ALPN_HTTP_1_1_LENGTH);
- cur += ALPN_HTTP_1_1_LENGTH;
- infof(data, VTLS_INFOF_ALPN_OFFER_1STR, ALPN_HTTP_1_1);
-
- /* expects length prefixed preference ordered list of protocols in wire
- * format
- */
- if(SSL_CTX_set_alpn_protos(backend->ctx, protocols, cur)) {
+ result = Curl_alpn_to_proto_buf(&proto, connssl->alpn);
+ if(result ||
+ SSL_CTX_set_alpn_protos(backend->ctx, proto.data, proto.len)) {
failf(data, "Error setting ALPN");
return CURLE_SSL_CONNECT_ERROR;
}
+ Curl_alpn_to_proto_str(&proto, connssl->alpn);
+ infof(data, VTLS_INFOF_ALPN_OFFER_1STR, proto.data);
}
#endif
@@ -3121,15 +3642,15 @@ static CURLcode ossl_connect_step1(struct Curl_easy *data,
if(!result &&
!cert_stuff(data, backend->ctx,
ssl_cert, ssl_cert_blob, ssl_cert_type,
- SSL_SET_OPTION(key), SSL_SET_OPTION(key_blob),
- SSL_SET_OPTION(key_type), SSL_SET_OPTION(key_passwd)))
+ ssl_config->key, ssl_config->key_blob,
+ ssl_config->key_type, ssl_config->key_passwd))
result = CURLE_SSL_CERTPROBLEM;
if(result)
/* failf() is already done in cert_stuff() */
return result;
}
- ciphers = SSL_CONN_CONFIG(cipher_list);
+ ciphers = conn_config->cipher_list;
if(!ciphers)
ciphers = (char *)DEFAULT_CIPHER_SELECTION;
if(ciphers) {
@@ -3142,7 +3663,7 @@ static CURLcode ossl_connect_step1(struct Curl_easy *data,
#ifdef HAVE_SSL_CTX_SET_CIPHERSUITES
{
- char *ciphers13 = SSL_CONN_CONFIG(cipher_list13);
+ char *ciphers13 = conn_config->cipher_list13;
if(ciphers13) {
if(!SSL_CTX_set_ciphersuites(backend->ctx, ciphers13)) {
failf(data, "failed setting TLS 1.3 cipher suite: %s", ciphers13);
@@ -3160,7 +3681,7 @@ static CURLcode ossl_connect_step1(struct Curl_easy *data,
#ifdef HAVE_SSL_CTX_SET_EC_CURVES
{
- char *curves = SSL_CONN_CONFIG(curves);
+ char *curves = conn_config->curves;
if(curves) {
if(!SSL_CTX_set1_curves_list(backend->ctx, curves)) {
failf(data, "failed setting curves list: '%s'", curves);
@@ -3171,10 +3692,9 @@ static CURLcode ossl_connect_step1(struct Curl_easy *data,
#endif
#ifdef USE_OPENSSL_SRP
- if((ssl_authtype == CURL_TLSAUTH_SRP) &&
- Curl_auth_allowed_to_host(data)) {
- char * const ssl_username = SSL_SET_OPTION(primary.username);
- char * const ssl_password = SSL_SET_OPTION(primary.password);
+ if(ssl_config->primary.username && Curl_auth_allowed_to_host(data)) {
+ char * const ssl_username = ssl_config->primary.username;
+ char * const ssl_password = ssl_config->primary.password;
infof(data, "Using TLS-SRP username: %s", ssl_username);
if(!SSL_CTX_set_srp_username(backend->ctx, ssl_username)) {
@@ -3185,7 +3705,7 @@ static CURLcode ossl_connect_step1(struct Curl_easy *data,
failf(data, "failed setting SRP password");
return CURLE_BAD_FUNCTION_ARGUMENT;
}
- if(!SSL_CONN_CONFIG(cipher_list)) {
+ if(!conn_config->cipher_list) {
infof(data, "Setting cipher list SRP");
if(!SSL_CTX_set_cipher_list(backend->ctx, "SRP")) {
@@ -3196,250 +3716,6 @@ static CURLcode ossl_connect_step1(struct Curl_easy *data,
}
#endif
-
-#if defined(USE_WIN32_CRYPTO)
- /* Import certificates from the Windows root certificate store if requested.
- https://stackoverflow.com/questions/9507184/
- https://github.com/d3x0r/SACK/blob/master/src/netlib/ssl_layer.c#L1037
- https://datatracker.ietf.org/doc/html/rfc5280 */
- if((SSL_CONN_CONFIG(verifypeer) || SSL_CONN_CONFIG(verifyhost)) &&
- (SSL_SET_OPTION(native_ca_store))) {
- X509_STORE *store = SSL_CTX_get_cert_store(backend->ctx);
- HCERTSTORE hStore = CertOpenSystemStore(0, TEXT("ROOT"));
-
- if(hStore) {
- PCCERT_CONTEXT pContext = NULL;
- /* The array of enhanced key usage OIDs will vary per certificate and is
- declared outside of the loop so that rather than malloc/free each
- iteration we can grow it with realloc, when necessary. */
- CERT_ENHKEY_USAGE *enhkey_usage = NULL;
- DWORD enhkey_usage_size = 0;
-
- /* This loop makes a best effort to import all valid certificates from
- the MS root store. If a certificate cannot be imported it is skipped.
- 'result' is used to store only hard-fail conditions (such as out of
- memory) that cause an early break. */
- result = CURLE_OK;
- for(;;) {
- X509 *x509;
- FILETIME now;
- BYTE key_usage[2];
- DWORD req_size;
- const unsigned char *encoded_cert;
-#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
- char cert_name[256];
-#endif
-
- pContext = CertEnumCertificatesInStore(hStore, pContext);
- if(!pContext)
- break;
-
-#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
- if(!CertGetNameStringA(pContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0,
- NULL, cert_name, sizeof(cert_name))) {
- strcpy(cert_name, "Unknown");
- }
- infof(data, "SSL: Checking cert \"%s\"", cert_name);
-#endif
-
- encoded_cert = (const unsigned char *)pContext->pbCertEncoded;
- if(!encoded_cert)
- continue;
-
- GetSystemTimeAsFileTime(&now);
- if(CompareFileTime(&pContext->pCertInfo->NotBefore, &now) > 0 ||
- CompareFileTime(&now, &pContext->pCertInfo->NotAfter) > 0)
- continue;
-
- /* If key usage exists check for signing attribute */
- if(CertGetIntendedKeyUsage(pContext->dwCertEncodingType,
- pContext->pCertInfo,
- key_usage, sizeof(key_usage))) {
- if(!(key_usage[0] & CERT_KEY_CERT_SIGN_KEY_USAGE))
- continue;
- }
- else if(GetLastError())
- continue;
-
- /* If enhanced key usage exists check for server auth attribute.
- *
- * Note "In a Microsoft environment, a certificate might also have EKU
- * extended properties that specify valid uses for the certificate."
- * The call below checks both, and behavior varies depending on what is
- * found. For more details see CertGetEnhancedKeyUsage doc.
- */
- if(CertGetEnhancedKeyUsage(pContext, 0, NULL, &req_size)) {
- if(req_size && req_size > enhkey_usage_size) {
- void *tmp = realloc(enhkey_usage, req_size);
-
- if(!tmp) {
- failf(data, "SSL: Out of memory allocating for OID list");
- result = CURLE_OUT_OF_MEMORY;
- break;
- }
-
- enhkey_usage = (CERT_ENHKEY_USAGE *)tmp;
- enhkey_usage_size = req_size;
- }
-
- if(CertGetEnhancedKeyUsage(pContext, 0, enhkey_usage, &req_size)) {
- if(!enhkey_usage->cUsageIdentifier) {
- /* "If GetLastError returns CRYPT_E_NOT_FOUND, the certificate is
- good for all uses. If it returns zero, the certificate has no
- valid uses." */
- if((HRESULT)GetLastError() != CRYPT_E_NOT_FOUND)
- continue;
- }
- else {
- DWORD i;
- bool found = false;
-
- for(i = 0; i < enhkey_usage->cUsageIdentifier; ++i) {
- if(!strcmp("1.3.6.1.5.5.7.3.1" /* OID server auth */,
- enhkey_usage->rgpszUsageIdentifier[i])) {
- found = true;
- break;
- }
- }
-
- if(!found)
- continue;
- }
- }
- else
- continue;
- }
- else
- continue;
-
- x509 = d2i_X509(NULL, &encoded_cert, pContext->cbCertEncoded);
- if(!x509)
- continue;
-
- /* Try to import the certificate. This may fail for legitimate reasons
- such as duplicate certificate, which is allowed by MS but not
- OpenSSL. */
- if(X509_STORE_add_cert(store, x509) == 1) {
-#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
- infof(data, "SSL: Imported cert \"%s\"", cert_name);
-#endif
- imported_native_ca = true;
- }
- X509_free(x509);
- }
-
- free(enhkey_usage);
- CertFreeCertificateContext(pContext);
- CertCloseStore(hStore, 0);
-
- if(result)
- return result;
- }
- if(imported_native_ca)
- infof(data, "successfully imported Windows CA store");
- else
- infof(data, "error importing Windows CA store, continuing anyway");
- }
-#endif
-
- if(ca_info_blob) {
- result = load_cacert_from_memory(backend->ctx, ca_info_blob);
- if(result) {
- if(result == CURLE_OUT_OF_MEMORY ||
- (verifypeer && !imported_native_ca)) {
- failf(data, "error importing CA certificate blob");
- return result;
- }
- /* Only warn if no certificate verification is required. */
- infof(data, "error importing CA certificate blob, continuing anyway");
- }
- }
-
- if(verifypeer && !imported_native_ca && (ssl_cafile || ssl_capath)) {
-#if defined(OPENSSL_VERSION_MAJOR) && (OPENSSL_VERSION_MAJOR >= 3)
- /* OpenSSL 3.0.0 has deprecated SSL_CTX_load_verify_locations */
- if(ssl_cafile &&
- !SSL_CTX_load_verify_file(backend->ctx, ssl_cafile)) {
- /* Fail if we insist on successfully verifying the server. */
- failf(data, "error setting certificate file: %s", ssl_cafile);
- return CURLE_SSL_CACERT_BADFILE;
- }
- if(ssl_capath &&
- !SSL_CTX_load_verify_dir(backend->ctx, ssl_capath)) {
- /* Fail if we insist on successfully verifying the server. */
- failf(data, "error setting certificate path: %s", ssl_capath);
- return CURLE_SSL_CACERT_BADFILE;
- }
-#else
- /* tell OpenSSL where to find CA certificates that are used to verify the
- server's certificate. */
- if(!SSL_CTX_load_verify_locations(backend->ctx, ssl_cafile, ssl_capath)) {
- /* Fail if we insist on successfully verifying the server. */
- failf(data, "error setting certificate verify locations:"
- " CAfile: %s CApath: %s",
- ssl_cafile ? ssl_cafile : "none",
- ssl_capath ? ssl_capath : "none");
- return CURLE_SSL_CACERT_BADFILE;
- }
-#endif
- infof(data, " CAfile: %s", ssl_cafile ? ssl_cafile : "none");
- infof(data, " CApath: %s", ssl_capath ? ssl_capath : "none");
- }
-
-#ifdef CURL_CA_FALLBACK
- if(verifypeer &&
- !ca_info_blob && !ssl_cafile && !ssl_capath && !imported_native_ca) {
- /* verifying the peer without any CA certificates won't
- work so use openssl's built-in default as fallback */
- SSL_CTX_set_default_verify_paths(backend->ctx);
- }
-#endif
-
- if(ssl_crlfile) {
- /* tell OpenSSL where to find CRL file that is used to check certificate
- * revocation */
- lookup = X509_STORE_add_lookup(SSL_CTX_get_cert_store(backend->ctx),
- X509_LOOKUP_file());
- if(!lookup ||
- (!X509_load_crl_file(lookup, ssl_crlfile, X509_FILETYPE_PEM)) ) {
- failf(data, "error loading CRL file: %s", ssl_crlfile);
- return CURLE_SSL_CRL_BADFILE;
- }
- /* Everything is fine. */
- infof(data, "successfully loaded CRL file:");
- X509_STORE_set_flags(SSL_CTX_get_cert_store(backend->ctx),
- X509_V_FLAG_CRL_CHECK|X509_V_FLAG_CRL_CHECK_ALL);
-
- infof(data, " CRLfile: %s", ssl_crlfile);
- }
-
- if(verifypeer) {
- /* Try building a chain using issuers in the trusted store first to avoid
- problems with server-sent legacy intermediates. Newer versions of
- OpenSSL do alternate chain checking by default but we do not know how to
- determine that in a reliable manner.
- https://rt.openssl.org/Ticket/Display.html?id=3621&user=guest&pass=guest
- */
-#if defined(X509_V_FLAG_TRUSTED_FIRST)
- X509_STORE_set_flags(SSL_CTX_get_cert_store(backend->ctx),
- X509_V_FLAG_TRUSTED_FIRST);
-#endif
-#ifdef X509_V_FLAG_PARTIAL_CHAIN
- if(!SSL_SET_OPTION(no_partialchain) && !ssl_crlfile) {
- /* Have intermediate certificates in the trust store be treated as
- trust-anchors, in the same way as self-signed root CA certificates
- are. This allows users to verify servers using the intermediate cert
- only, instead of needing the whole chain.
-
- Due to OpenSSL bug https://github.com/openssl/openssl/issues/5081 we
- cannot do partial chains with a CRL check.
- */
- X509_STORE_set_flags(SSL_CTX_get_cert_store(backend->ctx),
- X509_V_FLAG_PARTIAL_CHAIN);
- }
-#endif
- }
-
/* OpenSSL always tries to verify the peer, this only says whether it should
* fail to connect if the verification fails, or if it should continue
* anyway. In the latter case the result of the verification is checked with
@@ -3459,11 +3735,21 @@ static CURLcode ossl_connect_step1(struct Curl_easy *data,
* an internal session cache.
*/
SSL_CTX_set_session_cache_mode(backend->ctx,
- SSL_SESS_CACHE_CLIENT | SSL_SESS_CACHE_NO_INTERNAL);
+ SSL_SESS_CACHE_CLIENT |
+ SSL_SESS_CACHE_NO_INTERNAL);
SSL_CTX_sess_set_new_cb(backend->ctx, ossl_new_session_cb);
/* give application a chance to interfere with SSL set up. */
if(data->set.ssl.fsslctx) {
+ /* When a user callback is installed to modify the SSL_CTX,
+ * we need to do the full initialization before calling it.
+ * See: #11800 */
+ if(!backend->x509_store_setup) {
+ result = Curl_ssl_setup_x509_store(cf, data, backend->ctx);
+ if(result)
+ return result;
+ backend->x509_store_setup = TRUE;
+ }
Curl_set_in_callback(data, true);
result = (*data->set.ssl.fsslctx)(data, backend->ctx,
data->set.ssl.fsslctxp);
@@ -3483,13 +3769,16 @@ static CURLcode ossl_connect_step1(struct Curl_easy *data,
return CURLE_OUT_OF_MEMORY;
}
+ SSL_set_app_data(backend->handle, cf);
+
#if (OPENSSL_VERSION_NUMBER >= 0x0090808fL) && !defined(OPENSSL_NO_TLSEXT) && \
- !defined(OPENSSL_NO_OCSP)
- if(SSL_CONN_CONFIG(verifystatus))
+ !defined(OPENSSL_NO_OCSP)
+ if(conn_config->verifystatus)
SSL_set_tlsext_status_type(backend->handle, TLSEXT_STATUSTYPE_ocsp);
#endif
-#if defined(OPENSSL_IS_BORINGSSL) && defined(ALLOW_RENEG)
+#if (defined(OPENSSL_IS_BORINGSSL) || defined(OPENSSL_IS_AWSLC)) && \
+ defined(ALLOW_RENEG)
SSL_set_renegotiate_mode(backend->handle, ssl_renegotiate_freely);
#endif
@@ -3497,31 +3786,20 @@ static CURLcode ossl_connect_step1(struct Curl_easy *data,
backend->server_cert = 0x0;
#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
- if((0 == Curl_inet_pton(AF_INET, hostname, &addr)) &&
-#ifdef ENABLE_IPV6
- (0 == Curl_inet_pton(AF_INET6, hostname, &addr)) &&
-#endif
- sni) {
- char *snihost = Curl_ssl_snihost(data, hostname, NULL);
- if(!snihost || !SSL_set_tlsext_host_name(backend->handle, snihost)) {
+ if(connssl->peer.sni) {
+ if(!SSL_set_tlsext_host_name(backend->handle, connssl->peer.sni)) {
failf(data, "Failed set SNI");
return CURLE_SSL_CONNECT_ERROR;
}
}
#endif
- if(!ossl_associate_connection(data, conn, sockindex)) {
- /* Maybe the internal errors of SSL_get_ex_new_index or SSL_set_ex_data */
- failf(data, "SSL: ossl_associate_connection failed: %s",
- ossl_strerror(ERR_get_error(), error_buffer,
- sizeof(error_buffer)));
- return CURLE_SSL_CONNECT_ERROR;
- }
+ SSL_set_app_data(backend->handle, cf);
- if(SSL_SET_OPTION(primary.sessionid)) {
+ connssl->reused_session = FALSE;
+ if(ssl_config->primary.sessionid) {
Curl_ssl_sessionid_lock(data);
- if(!Curl_ssl_getsessionid(data, conn, SSL_IS_PROXY() ? TRUE : FALSE,
- &ssl_sessionid, NULL, sockindex)) {
+ if(!Curl_ssl_getsessionid(cf, data, &ssl_sessionid, NULL)) {
/* we got a session id, use it! */
if(!SSL_set_session(backend->handle, ssl_sessionid)) {
Curl_ssl_sessionid_unlock(data);
@@ -3531,45 +3809,45 @@ static CURLcode ossl_connect_step1(struct Curl_easy *data,
return CURLE_SSL_CONNECT_ERROR;
}
/* Informational message */
- infof(data, "SSL re-using session ID");
+ infof(data, "SSL reusing session ID");
+ connssl->reused_session = TRUE;
}
Curl_ssl_sessionid_unlock(data);
}
-#ifndef CURL_DISABLE_PROXY
- if(conn->proxy_ssl[sockindex].use) {
- BIO *const bio = BIO_new(BIO_f_ssl());
- struct ssl_backend_data *proxy_backend;
- SSL* handle = NULL;
- proxy_backend = conn->proxy_ssl[sockindex].backend;
- DEBUGASSERT(proxy_backend);
- handle = proxy_backend->handle;
- DEBUGASSERT(ssl_connection_complete == conn->proxy_ssl[sockindex].state);
- DEBUGASSERT(handle != NULL);
- DEBUGASSERT(bio != NULL);
- BIO_set_ssl(bio, handle, FALSE);
- SSL_set_bio(backend->handle, bio, bio);
- }
- else
-#endif
- if(!SSL_set_fd(backend->handle, (int)sockfd)) {
- /* pass the raw socket into the SSL layers */
- failf(data, "SSL: SSL_set_fd failed: %s",
- ossl_strerror(ERR_get_error(), error_buffer, sizeof(error_buffer)));
- return CURLE_SSL_CONNECT_ERROR;
- }
+ backend->bio_method = ossl_bio_cf_method_create();
+ if(!backend->bio_method)
+ return CURLE_OUT_OF_MEMORY;
+ bio = BIO_new(backend->bio_method);
+ if(!bio)
+ return CURLE_OUT_OF_MEMORY;
+ BIO_set_data(bio, cf);
+#ifdef HAVE_SSL_SET0_WBIO
+ /* with OpenSSL v1.1.1 we get an alternative to SSL_set_bio() that works
+ * without backward compat quirks. Every call takes one reference, so we
+ * up it and pass. SSL* then owns it and will free.
+ * We check on the function in configure, since libressl and friends
+ * each have their own versions to add support for this. */
+ BIO_up_ref(bio);
+ SSL_set0_rbio(backend->handle, bio);
+ SSL_set0_wbio(backend->handle, bio);
+#else
+ SSL_set_bio(backend->handle, bio, bio);
+#endif
connssl->connecting_state = ssl_connect_2;
return CURLE_OK;
}
-static CURLcode ossl_connect_step2(struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
+static CURLcode ossl_connect_step2(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
int err;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct ossl_ssl_backend_data *backend =
+ (struct ossl_ssl_backend_data *)connssl->backend;
+ struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data);
DEBUGASSERT(ssl_connect_2 == connssl->connecting_state
|| ssl_connect_2_reading == connssl->connecting_state
|| ssl_connect_2_writing == connssl->connecting_state);
@@ -3578,6 +3856,16 @@ static CURLcode ossl_connect_step2(struct Curl_easy *data,
ERR_clear_error();
err = SSL_connect(backend->handle);
+
+ if(!backend->x509_store_setup) {
+ /* After having send off the ClientHello, we prepare the x509
+ * store to verify the coming certificate from the server */
+ CURLcode result = Curl_ssl_setup_x509_store(cf, data, backend->ctx);
+ if(result)
+ return result;
+ backend->x509_store_setup = TRUE;
+ }
+
#ifndef HAVE_KEYLOG_CALLBACK
if(Curl_tls_keylog_enabled()) {
/* If key logging is enabled, wait for the handshake to complete and then
@@ -3607,9 +3895,18 @@ static CURLcode ossl_connect_step2(struct Curl_easy *data,
return CURLE_OK;
}
#endif
+#ifdef SSL_ERROR_WANT_RETRY_VERIFY
+ if(SSL_ERROR_WANT_RETRY_VERIFY == detail) {
+ connssl->connecting_state = ssl_connect_2;
+ return CURLE_OK;
+ }
+#endif
+ if(backend->io_result == CURLE_AGAIN) {
+ return CURLE_OK;
+ }
else {
/* untreated error */
- unsigned long errdetail;
+ sslerr_t errdetail;
char error_buffer[256]="";
CURLcode result;
long lerr;
@@ -3634,7 +3931,7 @@ static CURLcode ossl_connect_step2(struct Curl_easy *data,
lerr = SSL_get_verify_result(backend->handle);
if(lerr != X509_V_OK) {
- SSL_SET_OPTION_LVALUE(certverifyresult) = lerr;
+ ssl_config->certverifyresult = lerr;
msnprintf(error_buffer, sizeof(error_buffer),
"SSL certificate problem: %s",
X509_verify_cert_error_string(lerr));
@@ -3644,17 +3941,15 @@ static CURLcode ossl_connect_step2(struct Curl_easy *data,
error_buffer */
strcpy(error_buffer, "SSL certificate verification failed");
}
-#if (OPENSSL_VERSION_NUMBER >= 0x10101000L && \
- !defined(LIBRESSL_VERSION_NUMBER) && \
- !defined(OPENSSL_IS_BORINGSSL))
+#if defined(SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED)
/* SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED is only available on
- OpenSSL version above v1.1.1, not LibreSSL nor BoringSSL */
+ OpenSSL version above v1.1.1, not LibreSSL, BoringSSL, or AWS-LC */
else if((lib == ERR_LIB_SSL) &&
(reason == SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED)) {
- /* If client certificate is required, communicate the
- error to client */
- result = CURLE_SSL_CLIENTCERT;
- ossl_strerror(errdetail, error_buffer, sizeof(error_buffer));
+ /* If client certificate is required, communicate the
+ error to client */
+ result = CURLE_SSL_CLIENTCERT;
+ ossl_strerror(errdetail, error_buffer, sizeof(error_buffer));
}
#endif
else {
@@ -3669,15 +3964,14 @@ static CURLcode ossl_connect_step2(struct Curl_easy *data,
* the SO_ERROR is also lost.
*/
if(CURLE_SSL_CONNECT_ERROR == result && errdetail == 0) {
- const char * const hostname = SSL_HOST_NAME();
- const long int port = SSL_HOST_PORT();
char extramsg[80]="";
int sockerr = SOCKERRNO;
+
if(sockerr && detail == SSL_ERROR_SYSCALL)
Curl_strerror(sockerr, extramsg, sizeof(extramsg));
- failf(data, OSSL_PACKAGE " SSL_connect: %s in connection to %s:%ld ",
+ failf(data, OSSL_PACKAGE " SSL_connect: %s in connection to %s:%d ",
extramsg[0] ? extramsg : SSL_ERROR_to_str(detail),
- hostname, port);
+ connssl->peer.hostname, connssl->port);
return result;
}
@@ -3688,42 +3982,39 @@ static CURLcode ossl_connect_step2(struct Curl_easy *data,
}
}
else {
+ int psigtype_nid = NID_undef;
+ const char *negotiated_group_name = NULL;
+
/* we connected fine, we're not waiting for anything else. */
connssl->connecting_state = ssl_connect_3;
+#if (OPENSSL_VERSION_NUMBER >= 0x30000000L)
+ SSL_get_peer_signature_type_nid(backend->handle, &psigtype_nid);
+#if (OPENSSL_VERSION_NUMBER >= 0x30200000L)
+ negotiated_group_name = SSL_get0_group_name(backend->handle);
+#else
+ negotiated_group_name =
+ OBJ_nid2sn(SSL_get_negotiated_group(backend->handle) & 0x0000FFFF);
+#endif
+#endif
+
/* Informational message */
- infof(data, "SSL connection using %s / %s",
+ infof(data, "SSL connection using %s / %s / %s / %s",
SSL_get_version(backend->handle),
- SSL_get_cipher(backend->handle));
+ SSL_get_cipher(backend->handle),
+ negotiated_group_name? negotiated_group_name : "[blank]",
+ OBJ_nid2sn(psigtype_nid));
#ifdef HAS_ALPN
/* Sets data and len to negotiated protocol, len is 0 if no protocol was
* negotiated
*/
- if(conn->bits.tls_enable_alpn) {
+ if(connssl->alpn) {
const unsigned char *neg_protocol;
unsigned int len;
SSL_get0_alpn_selected(backend->handle, &neg_protocol, &len);
- if(len) {
- infof(data, VTLS_INFOF_ALPN_ACCEPTED_LEN_1STR, len, neg_protocol);
-
-#ifdef USE_HTTP2
- if(len == ALPN_H2_LENGTH &&
- !memcmp(ALPN_H2, neg_protocol, len)) {
- conn->alpn = CURL_HTTP_VERSION_2;
- }
- else
-#endif
- if(len == ALPN_HTTP_1_1_LENGTH &&
- !memcmp(ALPN_HTTP_1_1, neg_protocol, ALPN_HTTP_1_1_LENGTH)) {
- conn->alpn = CURL_HTTP_VERSION_1_1;
- }
- }
- else
- infof(data, VTLS_INFOF_NO_ALPN);
- Curl_multiuse_state(data, conn->alpn == CURL_HTTP_VERSION_2 ?
- BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
+ return Curl_alpn_set_negotiated(cf, data, neg_protocol, len);
}
#endif
@@ -3735,8 +4026,8 @@ static CURLcode ossl_connect_step2(struct Curl_easy *data,
* Heavily modified from:
* https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning#OpenSSL
*/
-static CURLcode pkp_pin_peer_pubkey(struct Curl_easy *data, X509* cert,
- const char *pinnedpubkey)
+static CURLcode ossl_pkp_pin_peer_pubkey(struct Curl_easy *data, X509* cert,
+ const char *pinnedpubkey)
{
/* Scratch */
int len1 = 0, len2 = 0;
@@ -3757,7 +4048,7 @@ static CURLcode pkp_pin_peer_pubkey(struct Curl_easy *data, X509* cert,
/* Thanks to Viktor Dukhovni on the OpenSSL mailing list */
/* https://groups.google.com/group/mailing.openssl.users/browse_thread
- /thread/d61858dae102c6c7 */
+ /thread/d61858dae102c6c7 */
len1 = i2d_X509_PUBKEY(X509_get_X509_PUBKEY(cert), NULL);
if(len1 < 1)
break; /* failed */
@@ -3789,6 +4080,75 @@ static CURLcode pkp_pin_peer_pubkey(struct Curl_easy *data, X509* cert,
return result;
}
+#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && \
+ !(defined(LIBRESSL_VERSION_NUMBER) && \
+ LIBRESSL_VERSION_NUMBER < 0x3060000fL) && \
+ !defined(OPENSSL_IS_BORINGSSL) && \
+ !defined(OPENSSL_IS_AWSLC) && \
+ !defined(CURL_DISABLE_VERBOSE_STRINGS)
+static void infof_certstack(struct Curl_easy *data, const SSL *ssl)
+{
+ STACK_OF(X509) *certstack;
+ long verify_result;
+ int num_cert_levels;
+ int cert_level;
+
+ verify_result = SSL_get_verify_result(ssl);
+ if(verify_result != X509_V_OK)
+ certstack = SSL_get_peer_cert_chain(ssl);
+ else
+ certstack = SSL_get0_verified_chain(ssl);
+ num_cert_levels = sk_X509_num(certstack);
+
+ for(cert_level = 0; cert_level < num_cert_levels; cert_level++) {
+ char cert_algorithm[80] = "";
+ char group_name_final[80] = "";
+ const X509_ALGOR *palg_cert = NULL;
+ const ASN1_OBJECT *paobj_cert = NULL;
+ X509 *current_cert;
+ EVP_PKEY *current_pkey;
+ int key_bits;
+ int key_sec_bits;
+ int get_group_name;
+ const char *type_name;
+
+ current_cert = sk_X509_value(certstack, cert_level);
+
+ X509_get0_signature(NULL, &palg_cert, current_cert);
+ X509_ALGOR_get0(&paobj_cert, NULL, NULL, palg_cert);
+ OBJ_obj2txt(cert_algorithm, sizeof(cert_algorithm), paobj_cert, 0);
+
+ current_pkey = X509_get0_pubkey(current_cert);
+ key_bits = EVP_PKEY_bits(current_pkey);
+#if (OPENSSL_VERSION_NUMBER < 0x30000000L)
+#define EVP_PKEY_get_security_bits EVP_PKEY_security_bits
+#endif
+ key_sec_bits = EVP_PKEY_get_security_bits(current_pkey);
+#if (OPENSSL_VERSION_NUMBER >= 0x30000000L)
+ {
+ char group_name[80] = "";
+ get_group_name = EVP_PKEY_get_group_name(current_pkey, group_name,
+ sizeof(group_name), NULL);
+ msnprintf(group_name_final, sizeof(group_name_final), "/%s", group_name);
+ }
+ type_name = EVP_PKEY_get0_type_name(current_pkey);
+#else
+ get_group_name = 0;
+ type_name = NULL;
+#endif
+
+ infof(data,
+ " Certificate level %d: "
+ "Public key type %s%s (%d/%d Bits/secBits), signed using %s",
+ cert_level, type_name ? type_name : "?",
+ get_group_name == 0 ? "" : group_name_final,
+ key_bits, key_sec_bits, cert_algorithm);
+ }
+}
+#else
+#define infof_certstack(data, ssl)
+#endif
+
/*
* Get the server cert, verify it and show it, etc., only call failf() if the
* 'strict' argument is TRUE as otherwise all this is for informational
@@ -3797,11 +4157,14 @@ static CURLcode pkp_pin_peer_pubkey(struct Curl_easy *data, X509* cert,
* We check certificates to authenticate the server; otherwise we risk
* man-in-the-middle attack.
*/
-static CURLcode servercert(struct Curl_easy *data,
- struct connectdata *conn,
- struct ssl_connect_data *connssl,
+static CURLcode servercert(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
bool strict)
{
+ struct connectdata *conn = cf->conn;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data);
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
CURLcode result = CURLE_OK;
int rc;
long lerr;
@@ -3811,7 +4174,8 @@ static CURLcode servercert(struct Curl_easy *data,
char buffer[2048];
const char *ptr;
BIO *mem = BIO_new(BIO_s_mem());
- struct ssl_backend_data *backend = connssl->backend;
+ struct ossl_ssl_backend_data *backend =
+ (struct ossl_ssl_backend_data *)connssl->backend;
DEBUGASSERT(backend);
@@ -3826,7 +4190,7 @@ static CURLcode servercert(struct Curl_easy *data,
if(data->set.ssl.certinfo)
/* asked to gather certificate info */
- (void)Curl_ossl_certchain(data, connssl->backend->handle);
+ (void)Curl_ossl_certchain(data, backend->handle);
backend->server_cert = SSL_get1_peer_certificate(backend->handle);
if(!backend->server_cert) {
@@ -3838,7 +4202,8 @@ static CURLcode servercert(struct Curl_easy *data,
return CURLE_PEER_FAILED_VERIFICATION;
}
- infof(data, "%s certificate:", SSL_IS_PROXY() ? "Proxy" : "Server");
+ infof(data, "%s certificate:",
+ Curl_ssl_cf_is_proxy(cf)? "Proxy" : "Server");
rc = x509_name_oneline(X509_get_subject_name(backend->server_cert),
buffer, sizeof(buffer));
@@ -3861,8 +4226,9 @@ static CURLcode servercert(struct Curl_easy *data,
BIO_free(mem);
- if(SSL_CONN_CONFIG(verifyhost)) {
- result = Curl_ossl_verifyhost(data, conn, backend->server_cert);
+ if(conn_config->verifyhost) {
+ result = Curl_ossl_verifyhost(data, conn, &connssl->peer,
+ backend->server_cert);
if(result) {
X509_free(backend->server_cert);
backend->server_cert = NULL;
@@ -3884,10 +4250,10 @@ static CURLcode servercert(struct Curl_easy *data,
deallocating the certificate. */
/* e.g. match issuer name with provided issuer certificate */
- if(SSL_CONN_CONFIG(issuercert) || SSL_CONN_CONFIG(issuercert_blob)) {
- if(SSL_CONN_CONFIG(issuercert_blob)) {
- fp = BIO_new_mem_buf(SSL_CONN_CONFIG(issuercert_blob)->data,
- (int)SSL_CONN_CONFIG(issuercert_blob)->len);
+ if(conn_config->issuercert || conn_config->issuercert_blob) {
+ if(conn_config->issuercert_blob) {
+ fp = BIO_new_mem_buf(conn_config->issuercert_blob->data,
+ (int)conn_config->issuercert_blob->len);
if(!fp) {
failf(data,
"BIO_new_mem_buf NULL, " OSSL_PACKAGE
@@ -3912,10 +4278,10 @@ static CURLcode servercert(struct Curl_easy *data,
return CURLE_OUT_OF_MEMORY;
}
- if(BIO_read_filename(fp, SSL_CONN_CONFIG(issuercert)) <= 0) {
+ if(BIO_read_filename(fp, conn_config->issuercert) <= 0) {
if(strict)
failf(data, "SSL: Unable to open issuer cert (%s)",
- SSL_CONN_CONFIG(issuercert));
+ conn_config->issuercert);
BIO_free(fp);
X509_free(backend->server_cert);
backend->server_cert = NULL;
@@ -3927,7 +4293,7 @@ static CURLcode servercert(struct Curl_easy *data,
if(!issuer) {
if(strict)
failf(data, "SSL: Unable to read issuer cert (%s)",
- SSL_CONN_CONFIG(issuercert));
+ conn_config->issuercert);
BIO_free(fp);
X509_free(issuer);
X509_free(backend->server_cert);
@@ -3938,7 +4304,7 @@ static CURLcode servercert(struct Curl_easy *data,
if(X509_check_issued(issuer, backend->server_cert) != X509_V_OK) {
if(strict)
failf(data, "SSL: Certificate issuer check failed (%s)",
- SSL_CONN_CONFIG(issuercert));
+ conn_config->issuercert);
BIO_free(fp);
X509_free(issuer);
X509_free(backend->server_cert);
@@ -3947,15 +4313,15 @@ static CURLcode servercert(struct Curl_easy *data,
}
infof(data, " SSL certificate issuer check ok (%s)",
- SSL_CONN_CONFIG(issuercert));
+ conn_config->issuercert);
BIO_free(fp);
X509_free(issuer);
}
lerr = SSL_get_verify_result(backend->handle);
- SSL_SET_OPTION_LVALUE(certverifyresult) = lerr;
+ ssl_config->certverifyresult = lerr;
if(lerr != X509_V_OK) {
- if(SSL_CONN_CONFIG(verifypeer)) {
+ if(conn_config->verifypeer) {
/* We probably never reach this, because SSL_connect() will fail
and we return earlier if verifypeer is set? */
if(strict)
@@ -3972,10 +4338,13 @@ static CURLcode servercert(struct Curl_easy *data,
infof(data, " SSL certificate verify ok.");
}
+ infof_certstack(data, backend->handle);
+
#if (OPENSSL_VERSION_NUMBER >= 0x0090808fL) && !defined(OPENSSL_NO_TLSEXT) && \
- !defined(OPENSSL_NO_OCSP)
- if(SSL_CONN_CONFIG(verifystatus)) {
- result = verifystatus(data, connssl);
+ !defined(OPENSSL_NO_OCSP)
+ if(conn_config->verifystatus && !connssl->reused_session) {
+ /* don't do this after Session ID reuse */
+ result = verifystatus(cf, data);
if(result) {
X509_free(backend->server_cert);
backend->server_cert = NULL;
@@ -3988,9 +4357,11 @@ static CURLcode servercert(struct Curl_easy *data,
/* when not strict, we don't bother about the verify cert problems */
result = CURLE_OK;
- ptr = SSL_PINNED_PUB_KEY();
+ ptr = Curl_ssl_cf_is_proxy(cf)?
+ data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY]:
+ data->set.str[STRING_SSL_PINNEDPUBLICKEY];
if(!result && ptr) {
- result = pkp_pin_peer_pubkey(data, backend->server_cert, ptr);
+ result = ossl_pkp_pin_peer_pubkey(data, backend->server_cert, ptr);
if(result)
failf(data, "SSL: public key does not match pinned public key");
}
@@ -4002,11 +4373,12 @@ static CURLcode servercert(struct Curl_easy *data,
return result;
}
-static CURLcode ossl_connect_step3(struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
+static CURLcode ossl_connect_step3(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
CURLcode result = CURLE_OK;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
DEBUGASSERT(ssl_connect_3 == connssl->connecting_state);
@@ -4017,8 +4389,8 @@ static CURLcode ossl_connect_step3(struct Curl_easy *data,
* operations.
*/
- result = servercert(data, conn, connssl, (SSL_CONN_CONFIG(verifypeer) ||
- SSL_CONN_CONFIG(verifyhost)));
+ result = servercert(cf, data, conn_config->verifypeer ||
+ conn_config->verifyhost);
if(!result)
connssl->connecting_state = ssl_connect_done;
@@ -4026,18 +4398,14 @@ static CURLcode ossl_connect_step3(struct Curl_easy *data,
return result;
}
-static Curl_recv ossl_recv;
-static Curl_send ossl_send;
-
-static CURLcode ossl_connect_common(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex,
+static CURLcode ossl_connect_common(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
bool nonblocking,
bool *done)
{
- CURLcode result;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- curl_socket_t sockfd = conn->sock[sockindex];
+ CURLcode result = CURLE_OK;
+ struct ssl_connect_data *connssl = cf->ctx;
+ curl_socket_t sockfd = Curl_conn_cf_get_socket(cf, data);
int what;
/* check if the connection has already been established */
@@ -4056,9 +4424,9 @@ static CURLcode ossl_connect_common(struct Curl_easy *data,
return CURLE_OPERATION_TIMEDOUT;
}
- result = ossl_connect_step1(data, conn, sockindex);
+ result = ossl_connect_step1(cf, data);
if(result)
- return result;
+ goto out;
}
while(ssl_connect_2 == connssl->connecting_state ||
@@ -4071,12 +4439,14 @@ static CURLcode ossl_connect_common(struct Curl_easy *data,
if(timeout_ms < 0) {
/* no need to continue if time already is up */
failf(data, "SSL connection timeout");
- return CURLE_OPERATION_TIMEDOUT;
+ result = CURLE_OPERATION_TIMEDOUT;
+ goto out;
}
/* if ssl is expecting something, check if it's available. */
- if(connssl->connecting_state == ssl_connect_2_reading ||
- connssl->connecting_state == ssl_connect_2_writing) {
+ if(!nonblocking &&
+ (connssl->connecting_state == ssl_connect_2_reading ||
+ connssl->connecting_state == ssl_connect_2_writing)) {
curl_socket_t writefd = ssl_connect_2_writing ==
connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
@@ -4084,20 +4454,18 @@ static CURLcode ossl_connect_common(struct Curl_easy *data,
connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd,
- nonblocking?0:timeout_ms);
+ timeout_ms);
if(what < 0) {
/* fatal error */
failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);
- return CURLE_SSL_CONNECT_ERROR;
+ result = CURLE_SSL_CONNECT_ERROR;
+ goto out;
}
if(0 == what) {
- if(nonblocking) {
- *done = FALSE;
- return CURLE_OK;
- }
/* timeout */
failf(data, "SSL connection timeout");
- return CURLE_OPERATION_TIMEDOUT;
+ result = CURLE_OPERATION_TIMEDOUT;
+ goto out;
}
/* socket is readable or writable */
}
@@ -4108,25 +4476,23 @@ static CURLcode ossl_connect_common(struct Curl_easy *data,
* before step2 has completed while ensuring that a client using select()
* or epoll() will always have a valid fdset to wait on.
*/
- result = ossl_connect_step2(data, conn, sockindex);
+ result = ossl_connect_step2(cf, data);
if(result || (nonblocking &&
(ssl_connect_2 == connssl->connecting_state ||
ssl_connect_2_reading == connssl->connecting_state ||
ssl_connect_2_writing == connssl->connecting_state)))
- return result;
+ goto out;
} /* repeat step2 until all transactions are done. */
if(ssl_connect_3 == connssl->connecting_state) {
- result = ossl_connect_step3(data, conn, sockindex);
+ result = ossl_connect_step3(cf, data);
if(result)
- return result;
+ goto out;
}
if(ssl_connect_done == connssl->connecting_state) {
connssl->state = ssl_connection_complete;
- conn->recv[sockindex] = ossl_recv;
- conn->send[sockindex] = ossl_send;
*done = TRUE;
}
else
@@ -4135,24 +4501,24 @@ static CURLcode ossl_connect_common(struct Curl_easy *data,
/* Reset our connect state machine */
connssl->connecting_state = ssl_connect_1;
- return CURLE_OK;
+out:
+ return result;
}
-static CURLcode ossl_connect_nonblocking(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex,
+static CURLcode ossl_connect_nonblocking(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
bool *done)
{
- return ossl_connect_common(data, conn, sockindex, TRUE, done);
+ return ossl_connect_common(cf, data, TRUE, done);
}
-static CURLcode ossl_connect(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
+static CURLcode ossl_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
CURLcode result;
bool done = FALSE;
- result = ossl_connect_common(data, conn, sockindex, FALSE, &done);
+ result = ossl_connect_common(cf, data, FALSE, &done);
if(result)
return result;
@@ -4161,28 +4527,22 @@ static CURLcode ossl_connect(struct Curl_easy *data, struct connectdata *conn,
return CURLE_OK;
}
-static bool ossl_data_pending(const struct connectdata *conn,
- int connindex)
+static bool ossl_data_pending(struct Curl_cfilter *cf,
+ const struct Curl_easy *data)
{
- const struct ssl_connect_data *connssl = &conn->ssl[connindex];
- DEBUGASSERT(connssl->backend);
- if(connssl->backend->handle && SSL_pending(connssl->backend->handle))
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct ossl_ssl_backend_data *backend =
+ (struct ossl_ssl_backend_data *)connssl->backend;
+
+ (void)data;
+ DEBUGASSERT(connssl && backend);
+ if(backend->handle && SSL_pending(backend->handle))
return TRUE;
-#ifndef CURL_DISABLE_PROXY
- {
- const struct ssl_connect_data *proxyssl = &conn->proxy_ssl[connindex];
- DEBUGASSERT(proxyssl->backend);
- if(proxyssl->backend->handle && SSL_pending(proxyssl->backend->handle))
- return TRUE;
- }
-#endif
return FALSE;
}
-static size_t ossl_version(char *buffer, size_t size);
-
-static ssize_t ossl_send(struct Curl_easy *data,
- int sockindex,
+static ssize_t ossl_send(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
const void *mem,
size_t len,
CURLcode *curlcode)
@@ -4191,19 +4551,19 @@ static ssize_t ossl_send(struct Curl_easy *data,
'size_t' */
int err;
char error_buffer[256];
- unsigned long sslerror;
+ sslerr_t sslerror;
int memlen;
int rc;
- struct connectdata *conn = data->conn;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct ossl_ssl_backend_data *backend =
+ (struct ossl_ssl_backend_data *)connssl->backend;
+ (void)data;
DEBUGASSERT(backend);
ERR_clear_error();
memlen = (len > (size_t)INT_MAX) ? INT_MAX : (int)len;
- set_logger(conn, data);
rc = SSL_write(backend->handle, mem, memlen);
if(rc <= 0) {
@@ -4216,57 +4576,59 @@ static ssize_t ossl_send(struct Curl_easy *data,
should be called again later. This is basically an EWOULDBLOCK
equivalent. */
*curlcode = CURLE_AGAIN;
- return -1;
+ rc = -1;
+ goto out;
case SSL_ERROR_SYSCALL:
- {
- int sockerr = SOCKERRNO;
- sslerror = ERR_get_error();
- if(sslerror)
- ossl_strerror(sslerror, error_buffer, sizeof(error_buffer));
- else if(sockerr)
- Curl_strerror(sockerr, error_buffer, sizeof(error_buffer));
- else {
- strncpy(error_buffer, SSL_ERROR_to_str(err), sizeof(error_buffer));
- error_buffer[sizeof(error_buffer) - 1] = '\0';
- }
- failf(data, OSSL_PACKAGE " SSL_write: %s, errno %d",
- error_buffer, sockerr);
- *curlcode = CURLE_SEND_ERROR;
- return -1;
+ {
+ int sockerr = SOCKERRNO;
+
+ if(backend->io_result == CURLE_AGAIN) {
+ *curlcode = CURLE_AGAIN;
+ rc = -1;
+ goto out;
+ }
+ sslerror = ERR_get_error();
+ if(sslerror)
+ ossl_strerror(sslerror, error_buffer, sizeof(error_buffer));
+ else if(sockerr)
+ Curl_strerror(sockerr, error_buffer, sizeof(error_buffer));
+ else {
+ strncpy(error_buffer, SSL_ERROR_to_str(err), sizeof(error_buffer));
+ error_buffer[sizeof(error_buffer) - 1] = '\0';
}
- case SSL_ERROR_SSL:
+ failf(data, OSSL_PACKAGE " SSL_write: %s, errno %d",
+ error_buffer, sockerr);
+ *curlcode = CURLE_SEND_ERROR;
+ rc = -1;
+ goto out;
+ }
+ case SSL_ERROR_SSL: {
/* A failure in the SSL library occurred, usually a protocol error.
The OpenSSL error queue contains more information on the error. */
sslerror = ERR_get_error();
- if(ERR_GET_LIB(sslerror) == ERR_LIB_SSL &&
- ERR_GET_REASON(sslerror) == SSL_R_BIO_NOT_SET &&
- conn->ssl[sockindex].state == ssl_connection_complete
-#ifndef CURL_DISABLE_PROXY
- && conn->proxy_ssl[sockindex].state == ssl_connection_complete
-#endif
- ) {
- char ver[120];
- (void)ossl_version(ver, sizeof(ver));
- failf(data, "Error: %s does not support double SSL tunneling.", ver);
- }
- else
- failf(data, "SSL_write() error: %s",
- ossl_strerror(sslerror, error_buffer, sizeof(error_buffer)));
+ failf(data, "SSL_write() error: %s",
+ ossl_strerror(sslerror, error_buffer, sizeof(error_buffer)));
*curlcode = CURLE_SEND_ERROR;
- return -1;
+ rc = -1;
+ goto out;
+ }
+ default:
+ /* a true error */
+ failf(data, OSSL_PACKAGE " SSL_write: %s, errno %d",
+ SSL_ERROR_to_str(err), SOCKERRNO);
+ *curlcode = CURLE_SEND_ERROR;
+ rc = -1;
+ goto out;
}
- /* a true error */
- failf(data, OSSL_PACKAGE " SSL_write: %s, errno %d",
- SSL_ERROR_to_str(err), SOCKERRNO);
- *curlcode = CURLE_SEND_ERROR;
- return -1;
}
*curlcode = CURLE_OK;
+
+out:
return (ssize_t)rc; /* number of bytes */
}
-static ssize_t ossl_recv(struct Curl_easy *data, /* transfer */
- int num, /* socketindex */
+static ssize_t ossl_recv(struct Curl_cfilter *cf,
+ struct Curl_easy *data, /* transfer */
char *buf, /* store read data here */
size_t buffersize, /* max amount to read */
CURLcode *curlcode)
@@ -4275,17 +4637,19 @@ static ssize_t ossl_recv(struct Curl_easy *data, /* transfer */
unsigned long sslerror;
ssize_t nread;
int buffsize;
- struct connectdata *conn = data->conn;
- struct ssl_connect_data *connssl = &conn->ssl[num];
- struct ssl_backend_data *backend = connssl->backend;
+ struct connectdata *conn = cf->conn;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct ossl_ssl_backend_data *backend =
+ (struct ossl_ssl_backend_data *)connssl->backend;
+ (void)data;
DEBUGASSERT(backend);
ERR_clear_error();
buffsize = (buffersize > (size_t)INT_MAX) ? INT_MAX : (int)buffersize;
- set_logger(conn, data);
nread = (ssize_t)SSL_read(backend->handle, buf, buffsize);
+
if(nread <= 0) {
/* failed SSL_read */
int err = SSL_get_error(backend->handle, (int)nread);
@@ -4295,7 +4659,7 @@ static ssize_t ossl_recv(struct Curl_easy *data, /* transfer */
break;
case SSL_ERROR_ZERO_RETURN: /* no more data */
/* close_notify alert */
- if(num == FIRSTSOCKET)
+ if(cf->sockindex == FIRSTSOCKET)
/* mark the connection for close if it is indeed the control
connection */
connclose(conn, "TLS close_notify");
@@ -4304,11 +4668,17 @@ static ssize_t ossl_recv(struct Curl_easy *data, /* transfer */
case SSL_ERROR_WANT_WRITE:
/* there's data pending, re-invoke SSL_read() */
*curlcode = CURLE_AGAIN;
- return -1;
+ nread = -1;
+ goto out;
default:
/* openssl/ssl.h for SSL_ERROR_SYSCALL says "look at error stack/return
value/errno" */
/* https://www.openssl.org/docs/crypto/ERR_get_error.html */
+ if(backend->io_result == CURLE_AGAIN) {
+ *curlcode = CURLE_AGAIN;
+ nread = -1;
+ goto out;
+ }
sslerror = ERR_get_error();
if((nread < 0) || sslerror) {
/* If the return code was negative or there actually is an error in the
@@ -4325,7 +4695,8 @@ static ssize_t ossl_recv(struct Curl_easy *data, /* transfer */
failf(data, OSSL_PACKAGE " SSL_read: %s, errno %d",
error_buffer, sockerr);
*curlcode = CURLE_RECV_ERROR;
- return -1;
+ nread = -1;
+ goto out;
}
/* For debug builds be a little stricter and error on any
SSL_ERROR_SYSCALL. For example a server may have closed the connection
@@ -4348,11 +4719,14 @@ static ssize_t ossl_recv(struct Curl_easy *data, /* transfer */
" (Fatal because this is a curl debug build)",
error_buffer, sockerr);
*curlcode = CURLE_RECV_ERROR;
- return -1;
+ nread = -1;
+ goto out;
}
#endif
}
}
+
+out:
return nread;
}
@@ -4364,7 +4738,7 @@ static size_t ossl_version(char *buffer, size_t size)
int count;
const char *ver = OpenSSL_version(OPENSSL_VERSION);
const char expected[] = OSSL_PACKAGE " "; /* ie "LibreSSL " */
- if(Curl_strncasecompare(ver, expected, sizeof(expected) - 1)) {
+ if(strncasecompare(ver, expected, sizeof(expected) - 1)) {
ver += sizeof(expected) - 1;
}
count = msnprintf(buffer, size, "%s/%s", OSSL_PACKAGE, ver);
@@ -4388,6 +4762,10 @@ static size_t ossl_version(char *buffer, size_t size)
#else
return msnprintf(buffer, size, OSSL_PACKAGE);
#endif
+#elif defined(OPENSSL_IS_AWSLC)
+ return msnprintf(buffer, size, "%s/%s",
+ OSSL_PACKAGE,
+ AWSLC_VERSION_NUMBER_STRING);
#elif defined(HAVE_OPENSSL_VERSION) && defined(OPENSSL_VERSION_STRING)
return msnprintf(buffer, size, "%s/%s",
OSSL_PACKAGE, OpenSSL_version(OPENSSL_VERSION_STRING));
@@ -4463,7 +4841,10 @@ static CURLcode ossl_sha256sum(const unsigned char *tmp, /* input */
mdctx = EVP_MD_CTX_create();
if(!mdctx)
return CURLE_OUT_OF_MEMORY;
- EVP_DigestInit(mdctx, EVP_sha256());
+ if(!EVP_DigestInit(mdctx, EVP_sha256())) {
+ EVP_MD_CTX_destroy(mdctx);
+ return CURLE_FAILED_INIT;
+ }
EVP_DigestUpdate(mdctx, tmp, tmplen);
EVP_DigestFinal_ex(mdctx, sha256sum, &len);
EVP_MD_CTX_destroy(mdctx);
@@ -4474,7 +4855,7 @@ static CURLcode ossl_sha256sum(const unsigned char *tmp, /* input */
static bool ossl_cert_status_request(void)
{
#if (OPENSSL_VERSION_NUMBER >= 0x0090808fL) && !defined(OPENSSL_NO_TLSEXT) && \
- !defined(OPENSSL_NO_OCSP)
+ !defined(OPENSSL_NO_OCSP)
return TRUE;
#else
return FALSE;
@@ -4485,90 +4866,25 @@ static void *ossl_get_internals(struct ssl_connect_data *connssl,
CURLINFO info)
{
/* Legacy: CURLINFO_TLS_SESSION must return an SSL_CTX pointer. */
- struct ssl_backend_data *backend = connssl->backend;
+ struct ossl_ssl_backend_data *backend =
+ (struct ossl_ssl_backend_data *)connssl->backend;
DEBUGASSERT(backend);
return info == CURLINFO_TLS_SESSION ?
- (void *)backend->ctx : (void *)backend->handle;
-}
-
-static bool ossl_associate_connection(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex)
-{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
- DEBUGASSERT(backend);
-
- /* If we don't have SSL context, do nothing. */
- if(!backend->handle)
- return FALSE;
-
- if(SSL_SET_OPTION(primary.sessionid)) {
- int data_idx = ossl_get_ssl_data_index();
- int connectdata_idx = ossl_get_ssl_conn_index();
- int sockindex_idx = ossl_get_ssl_sockindex_index();
- int proxy_idx = ossl_get_proxy_index();
-
- if(data_idx >= 0 && connectdata_idx >= 0 && sockindex_idx >= 0 &&
- proxy_idx >= 0) {
- int data_status, conn_status, sockindex_status, proxy_status;
-
- /* Store the data needed for the "new session" callback.
- * The sockindex is stored as a pointer to an array element. */
- data_status = SSL_set_ex_data(backend->handle, data_idx, data);
- conn_status = SSL_set_ex_data(backend->handle, connectdata_idx, conn);
- sockindex_status = SSL_set_ex_data(backend->handle, sockindex_idx,
- conn->sock + sockindex);
-#ifndef CURL_DISABLE_PROXY
- proxy_status = SSL_set_ex_data(backend->handle, proxy_idx,
- SSL_IS_PROXY() ? (void *) 1 : NULL);
-#else
- proxy_status = SSL_set_ex_data(backend->handle, proxy_idx, NULL);
-#endif
- if(data_status && conn_status && sockindex_status && proxy_status)
- return TRUE;
- }
- return FALSE;
- }
- return TRUE;
+ (void *)backend->ctx : (void *)backend->handle;
}
-/*
- * Starting with TLS 1.3, the ossl_new_session_cb callback gets called after
- * the handshake. If the transfer that sets up the callback gets killed before
- * this callback arrives, we must make sure to properly clear the data to
- * avoid UAF problems. A future optimization could be to instead store another
- * transfer that might still be using the same connection.
- */
-
-static void ossl_disassociate_connection(struct Curl_easy *data,
- int sockindex)
+static void ossl_free_multi_ssl_backend_data(
+ struct multi_ssl_backend_data *mbackend)
{
- struct connectdata *conn = data->conn;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
- DEBUGASSERT(backend);
-
- /* If we don't have SSL context, do nothing. */
- if(!backend->handle)
- return;
-
- if(SSL_SET_OPTION(primary.sessionid)) {
- int data_idx = ossl_get_ssl_data_index();
- int connectdata_idx = ossl_get_ssl_conn_index();
- int sockindex_idx = ossl_get_ssl_sockindex_index();
- int proxy_idx = ossl_get_proxy_index();
-
- if(data_idx >= 0 && connectdata_idx >= 0 && sockindex_idx >= 0 &&
- proxy_idx >= 0) {
- /* Disable references to data in "new session" callback to avoid
- * accessing a stale pointer. */
- SSL_set_ex_data(backend->handle, data_idx, NULL);
- SSL_set_ex_data(backend->handle, connectdata_idx, NULL);
- SSL_set_ex_data(backend->handle, sockindex_idx, NULL);
- SSL_set_ex_data(backend->handle, proxy_idx, NULL);
- }
+#if defined(HAVE_SSL_X509_STORE_SHARE)
+ if(mbackend->store) {
+ X509_STORE_free(mbackend->store);
}
+ free(mbackend->CAfile);
+ free(mbackend);
+#else /* HAVE_SSL_X509_STORE_SHARE */
+ (void)mbackend;
+#endif /* HAVE_SSL_X509_STORE_SHARE */
}
const struct Curl_ssl Curl_ssl_openssl = {
@@ -4584,19 +4900,19 @@ const struct Curl_ssl Curl_ssl_openssl = {
#endif
SSLSUPP_HTTPS_PROXY,
- sizeof(struct ssl_backend_data),
+ sizeof(struct ossl_ssl_backend_data),
ossl_init, /* init */
ossl_cleanup, /* cleanup */
ossl_version, /* version */
- ossl_check_cxn, /* check_cxn */
+ Curl_none_check_cxn, /* check_cxn */
ossl_shutdown, /* shutdown */
ossl_data_pending, /* data_pending */
ossl_random, /* random */
ossl_cert_status_request, /* cert_status_request */
ossl_connect, /* connect */
ossl_connect_nonblocking, /* connect_nonblocking */
- Curl_ssl_getsock, /* getsock */
+ Curl_ssl_adjust_pollset, /* adjust_pollset */
ossl_get_internals, /* get_internals */
ossl_close, /* close_one */
ossl_close_all, /* close_all */
@@ -4610,8 +4926,11 @@ const struct Curl_ssl Curl_ssl_openssl = {
#else
NULL, /* sha256sum */
#endif
- ossl_associate_connection, /* associate_connection */
- ossl_disassociate_connection /* disassociate_connection */
+ NULL, /* use of data in this connection */
+ NULL, /* remote of data from this connection */
+ ossl_free_multi_ssl_backend_data, /* free_multi_ssl_backend_data */
+ ossl_recv, /* recv decrypted data */
+ ossl_send, /* send data to encrypt */
};
#endif /* USE_OPENSSL */
diff --git a/lib/vtls/openssl.h b/lib/vtls/openssl.h
index 9df4ecddb..e802363a4 100644
--- a/lib/vtls/openssl.h
+++ b/lib/vtls/openssl.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -31,24 +31,21 @@
* This header should only be needed to get included by vtls.c, openssl.c
* and ngtcp2.c
*/
+#include <openssl/ossl_typ.h>
#include <openssl/ssl.h>
#include "urldata.h"
-/*
- * In an effort to avoid using 'X509 *' here, we instead use the struct
- * x509_st version of the type so that we can forward-declare it here without
- * having to include <openssl/x509v3.h>. Including that header causes name
- * conflicts when libcurl is built with both Schannel and OpenSSL support.
- */
-struct x509_st;
+#if (OPENSSL_VERSION_NUMBER < 0x30000000L)
+#define SSL_get1_peer_certificate SSL_get_peer_certificate
+#endif
+
CURLcode Curl_ossl_verifyhost(struct Curl_easy *data, struct connectdata *conn,
- struct x509_st *server_cert);
+ struct ssl_peer *peer, X509 *server_cert);
extern const struct Curl_ssl Curl_ssl_openssl;
-struct ssl_ctx_st;
CURLcode Curl_ossl_set_client_cert(struct Curl_easy *data,
- struct ssl_ctx_st *ctx, char *cert_file,
+ SSL_CTX *ctx, char *cert_file,
const struct curl_blob *cert_blob,
const char *cert_type, char *key_file,
const struct curl_blob *key_blob,
@@ -56,5 +53,18 @@ CURLcode Curl_ossl_set_client_cert(struct Curl_easy *data,
CURLcode Curl_ossl_certchain(struct Curl_easy *data, SSL *ssl);
+/**
+ * Setup the OpenSSL X509_STORE in `ssl_ctx` for the cfilter `cf` and
+ * easy handle `data`. Will allow reuse of a shared cache if suitable
+ * and configured.
+ */
+CURLcode Curl_ssl_setup_x509_store(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ SSL_CTX *ssl_ctx);
+
+CURLcode Curl_ossl_ctx_configure(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ SSL_CTX *ssl_ctx);
+
#endif /* USE_OPENSSL */
#endif /* HEADER_CURL_SSLUSE_H */
diff --git a/lib/vtls/rustls.c b/lib/vtls/rustls.c
index 77a49f1ab..8751fd981 100644
--- a/lib/vtls/rustls.c
+++ b/lib/vtls/rustls.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2020 - 2022, Jacob Hoffman-Andrews,
+ * Copyright (C) Jacob Hoffman-Andrews,
* <github@hoffman-andrews.com>
*
* This software is licensed as described in the file COPYING, which
@@ -35,11 +35,13 @@
#include "urldata.h"
#include "sendf.h"
#include "vtls.h"
+#include "vtls_int.h"
#include "select.h"
#include "strerror.h"
#include "multiif.h"
+#include "connect.h" /* for the connect timeout */
-struct ssl_backend_data
+struct rustls_ssl_backend_data
{
const struct rustls_client_config *config;
struct rustls_connection *conn;
@@ -63,43 +65,105 @@ static CURLcode map_error(rustls_result r)
}
static bool
-cr_data_pending(const struct connectdata *conn, int sockindex)
+cr_data_pending(struct Curl_cfilter *cf, const struct Curl_easy *data)
{
- const struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
- DEBUGASSERT(backend);
+ struct ssl_connect_data *ctx = cf->ctx;
+ struct rustls_ssl_backend_data *backend;
+
+ (void)data;
+ DEBUGASSERT(ctx && ctx->backend);
+ backend = (struct rustls_ssl_backend_data *)ctx->backend;
return backend->data_pending;
}
-static CURLcode
-cr_connect(struct Curl_easy *data UNUSED_PARAM,
- struct connectdata *conn UNUSED_PARAM,
- int sockindex UNUSED_PARAM)
-{
- infof(data, "rustls_connect: unimplemented");
- return CURLE_SSL_CONNECT_ERROR;
-}
+struct io_ctx {
+ struct Curl_cfilter *cf;
+ struct Curl_easy *data;
+};
static int
read_cb(void *userdata, uint8_t *buf, uintptr_t len, uintptr_t *out_n)
{
- ssize_t n = sread(*(int *)userdata, buf, len);
- if(n < 0) {
- return SOCKERRNO;
+ struct io_ctx *io_ctx = userdata;
+ CURLcode result;
+ int ret = 0;
+ ssize_t nread = Curl_conn_cf_recv(io_ctx->cf->next, io_ctx->data,
+ (char *)buf, len, &result);
+ if(nread < 0) {
+ nread = 0;
+ if(CURLE_AGAIN == result)
+ ret = EAGAIN;
+ else
+ ret = EINVAL;
}
- *out_n = n;
- return 0;
+ *out_n = (int)nread;
+ return ret;
}
static int
write_cb(void *userdata, const uint8_t *buf, uintptr_t len, uintptr_t *out_n)
{
- ssize_t n = swrite(*(int *)userdata, buf, len);
- if(n < 0) {
- return SOCKERRNO;
+ struct io_ctx *io_ctx = userdata;
+ CURLcode result;
+ int ret = 0;
+ ssize_t nwritten = Curl_conn_cf_send(io_ctx->cf->next, io_ctx->data,
+ (const char *)buf, len, &result);
+ if(nwritten < 0) {
+ nwritten = 0;
+ if(CURLE_AGAIN == result)
+ ret = EAGAIN;
+ else
+ ret = EINVAL;
+ }
+ *out_n = (int)nwritten;
+ /*
+ CURL_TRC_CFX(io_ctx->data, io_ctx->cf, "cf->next send(len=%zu) -> %zd, %d",
+ len, nwritten, result));
+ */
+ return ret;
+}
+
+static ssize_t tls_recv_more(struct Curl_cfilter *cf,
+ struct Curl_easy *data, CURLcode *err)
+{
+ struct ssl_connect_data *const connssl = cf->ctx;
+ struct rustls_ssl_backend_data *const backend =
+ (struct rustls_ssl_backend_data *)connssl->backend;
+ struct io_ctx io_ctx;
+ size_t tls_bytes_read = 0;
+ rustls_io_result io_error;
+ rustls_result rresult = 0;
+
+ io_ctx.cf = cf;
+ io_ctx.data = data;
+ io_error = rustls_connection_read_tls(backend->conn, read_cb, &io_ctx,
+ &tls_bytes_read);
+ if(io_error == EAGAIN || io_error == EWOULDBLOCK) {
+ *err = CURLE_AGAIN;
+ return -1;
+ }
+ else if(io_error) {
+ char buffer[STRERROR_LEN];
+ failf(data, "reading from socket: %s",
+ Curl_strerror(io_error, buffer, sizeof(buffer)));
+ *err = CURLE_READ_ERROR;
+ return -1;
+ }
+
+ rresult = rustls_connection_process_new_packets(backend->conn);
+ if(rresult != RUSTLS_RESULT_OK) {
+ char errorbuf[255];
+ size_t errorlen;
+ rustls_error(rresult, errorbuf, sizeof(errorbuf), &errorlen);
+ failf(data, "rustls_connection_process_new_packets: %.*s",
+ errorlen, errorbuf);
+ *err = map_error(rresult);
+ return -1;
}
- *out_n = n;
- return 0;
+
+ backend->data_pending = TRUE;
+ *err = CURLE_OK;
+ return (ssize_t)tls_bytes_read;
}
/*
@@ -115,94 +179,86 @@ write_cb(void *userdata, const uint8_t *buf, uintptr_t len, uintptr_t *out_n)
* output buffer.
*/
static ssize_t
-cr_recv(struct Curl_easy *data, int sockindex,
+cr_recv(struct Curl_cfilter *cf, struct Curl_easy *data,
char *plainbuf, size_t plainlen, CURLcode *err)
{
- struct connectdata *conn = data->conn;
- struct ssl_connect_data *const connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *const backend = connssl->backend;
+ struct ssl_connect_data *const connssl = cf->ctx;
+ struct rustls_ssl_backend_data *const backend =
+ (struct rustls_ssl_backend_data *)connssl->backend;
struct rustls_connection *rconn = NULL;
-
size_t n = 0;
- size_t tls_bytes_read = 0;
size_t plain_bytes_copied = 0;
rustls_result rresult = 0;
- char errorbuf[255];
- rustls_io_result io_error;
+ ssize_t nread;
+ bool eof = FALSE;
DEBUGASSERT(backend);
rconn = backend->conn;
- io_error = rustls_connection_read_tls(rconn, read_cb,
- &conn->sock[sockindex], &tls_bytes_read);
- if(io_error == EAGAIN || io_error == EWOULDBLOCK) {
- infof(data, "sread: EAGAIN or EWOULDBLOCK");
- }
- else if(io_error) {
- char buffer[STRERROR_LEN];
- failf(data, "reading from socket: %s",
- Curl_strerror(io_error, buffer, sizeof(buffer)));
- *err = CURLE_READ_ERROR;
- return -1;
- }
-
- infof(data, "cr_recv read %ld bytes from the network", tls_bytes_read);
-
- rresult = rustls_connection_process_new_packets(rconn);
- if(rresult != RUSTLS_RESULT_OK) {
- rustls_error(rresult, errorbuf, sizeof(errorbuf), &n);
- failf(data, "%.*s", n, errorbuf);
- *err = map_error(rresult);
- return -1;
- }
-
- backend->data_pending = TRUE;
-
while(plain_bytes_copied < plainlen) {
+ if(!backend->data_pending) {
+ if(tls_recv_more(cf, data, err) < 0) {
+ if(*err != CURLE_AGAIN) {
+ nread = -1;
+ goto out;
+ }
+ break;
+ }
+ }
+
rresult = rustls_connection_read(rconn,
(uint8_t *)plainbuf + plain_bytes_copied,
plainlen - plain_bytes_copied,
&n);
if(rresult == RUSTLS_RESULT_PLAINTEXT_EMPTY) {
- infof(data, "cr_recv got PLAINTEXT_EMPTY. will try again later.");
backend->data_pending = FALSE;
- break;
+ }
+ else if(rresult == RUSTLS_RESULT_UNEXPECTED_EOF) {
+ failf(data, "rustls: peer closed TCP connection "
+ "without first closing TLS connection");
+ *err = CURLE_READ_ERROR;
+ nread = -1;
+ goto out;
}
else if(rresult != RUSTLS_RESULT_OK) {
/* n always equals 0 in this case, don't need to check it */
- failf(data, "error in rustls_connection_read: %d", rresult);
+ char errorbuf[255];
+ size_t errorlen;
+ rustls_error(rresult, errorbuf, sizeof(errorbuf), &errorlen);
+ failf(data, "rustls_connection_read: %.*s", errorlen, errorbuf);
*err = CURLE_READ_ERROR;
- return -1;
+ nread = -1;
+ goto out;
}
else if(n == 0) {
/* n == 0 indicates clean EOF, but we may have read some other
plaintext bytes before we reached this. Break out of the loop
so we can figure out whether to return success or EOF. */
+ eof = TRUE;
break;
}
else {
- infof(data, "cr_recv copied out %ld bytes of plaintext", n);
plain_bytes_copied += n;
}
}
if(plain_bytes_copied) {
*err = CURLE_OK;
- return plain_bytes_copied;
+ nread = (ssize_t)plain_bytes_copied;
}
-
- /* If we wrote out 0 plaintext bytes, that means either we hit a clean EOF,
- OR we got a RUSTLS_RESULT_PLAINTEXT_EMPTY.
- If the latter, return CURLE_AGAIN so curl doesn't treat this as EOF. */
- if(!backend->data_pending) {
+ else if(eof) {
+ *err = CURLE_OK;
+ nread = 0;
+ }
+ else {
*err = CURLE_AGAIN;
- return -1;
+ nread = -1;
}
- /* Zero bytes read, and no RUSTLS_RESULT_PLAINTEXT_EMPTY, means the TCP
- connection was cleanly closed (with a close_notify alert). */
- *err = CURLE_OK;
- return 0;
+out:
+ CURL_TRC_CF(data, cf, "cf_recv(len=%zu) -> %zd, %d",
+ plainlen, nread, *err);
+ return nread;
}
/*
@@ -216,44 +272,52 @@ cr_recv(struct Curl_easy *data, int sockindex,
* It will only drain rustls' plaintext output buffer into the socket.
*/
static ssize_t
-cr_send(struct Curl_easy *data, int sockindex,
+cr_send(struct Curl_cfilter *cf, struct Curl_easy *data,
const void *plainbuf, size_t plainlen, CURLcode *err)
{
- struct connectdata *conn = data->conn;
- struct ssl_connect_data *const connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *const backend = connssl->backend;
+ struct ssl_connect_data *const connssl = cf->ctx;
+ struct rustls_ssl_backend_data *const backend =
+ (struct rustls_ssl_backend_data *)connssl->backend;
struct rustls_connection *rconn = NULL;
+ struct io_ctx io_ctx;
size_t plainwritten = 0;
size_t tlswritten = 0;
size_t tlswritten_total = 0;
rustls_result rresult;
rustls_io_result io_error;
+ char errorbuf[256];
+ size_t errorlen;
DEBUGASSERT(backend);
rconn = backend->conn;
- infof(data, "cr_send %ld bytes of plaintext", plainlen);
+ CURL_TRC_CF(data, cf, "cf_send: %ld plain bytes", plainlen);
+
+ io_ctx.cf = cf;
+ io_ctx.data = data;
if(plainlen > 0) {
rresult = rustls_connection_write(rconn, plainbuf, plainlen,
&plainwritten);
if(rresult != RUSTLS_RESULT_OK) {
- failf(data, "error in rustls_connection_write");
+ rustls_error(rresult, errorbuf, sizeof(errorbuf), &errorlen);
+ failf(data, "rustls_connection_write: %.*s", errorlen, errorbuf);
*err = CURLE_WRITE_ERROR;
return -1;
}
else if(plainwritten == 0) {
- failf(data, "EOF in rustls_connection_write");
+ failf(data, "rustls_connection_write: EOF");
*err = CURLE_WRITE_ERROR;
return -1;
}
}
while(rustls_connection_wants_write(rconn)) {
- io_error = rustls_connection_write_tls(rconn, write_cb,
- &conn->sock[sockindex], &tlswritten);
+ io_error = rustls_connection_write_tls(rconn, write_cb, &io_ctx,
+ &tlswritten);
if(io_error == EAGAIN || io_error == EWOULDBLOCK) {
- infof(data, "swrite: EAGAIN after %ld bytes", tlswritten_total);
+ CURL_TRC_CF(data, cf, "cf_send: EAGAIN after %zu bytes",
+ tlswritten_total);
*err = CURLE_AGAIN;
return -1;
}
@@ -269,7 +333,7 @@ cr_send(struct Curl_easy *data, int sockindex,
*err = CURLE_WRITE_ERROR;
return -1;
}
- infof(data, "cr_send wrote %ld bytes to network", tlswritten);
+ CURL_TRC_CF(data, cf, "cf_send: wrote %zu TLS bytes", tlswritten);
tlswritten_total += tlswritten;
}
@@ -302,37 +366,42 @@ cr_hostname_is_ip(const char *hostname)
}
static CURLcode
-cr_init_backend(struct Curl_easy *data, struct connectdata *conn,
- struct ssl_backend_data *const backend)
+cr_init_backend(struct Curl_cfilter *cf, struct Curl_easy *data,
+ struct rustls_ssl_backend_data *const backend)
{
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
struct rustls_connection *rconn = NULL;
struct rustls_client_config_builder *config_builder = NULL;
struct rustls_root_cert_store *roots = NULL;
- const struct curl_blob *ca_info_blob = SSL_CONN_CONFIG(ca_info_blob);
+ const struct curl_blob *ca_info_blob = conn_config->ca_info_blob;
const char * const ssl_cafile =
/* CURLOPT_CAINFO_BLOB overrides CURLOPT_CAINFO */
- (ca_info_blob ? NULL : SSL_CONN_CONFIG(CAfile));
- const bool verifypeer = SSL_CONN_CONFIG(verifypeer);
- const char *hostname = conn->host.name;
+ (ca_info_blob ? NULL : conn_config->CAfile);
+ const bool verifypeer = conn_config->verifypeer;
+ const char *hostname = connssl->peer.hostname;
char errorbuf[256];
size_t errorlen;
int result;
- rustls_slice_bytes alpn[2] = {
- { (const uint8_t *)ALPN_HTTP_1_1, ALPN_HTTP_1_1_LENGTH },
- { (const uint8_t *)ALPN_H2, ALPN_H2_LENGTH },
- };
DEBUGASSERT(backend);
rconn = backend->conn;
config_builder = rustls_client_config_builder_new();
-#ifdef USE_HTTP2
- infof(data, VTLS_INFOF_ALPN_OFFER_1STR, ALPN_H2);
- rustls_client_config_builder_set_alpn_protocols(config_builder, alpn, 2);
-#else
- rustls_client_config_builder_set_alpn_protocols(config_builder, alpn, 1);
-#endif
- infof(data, VTLS_INFOF_ALPN_OFFER_1STR, ALPN_HTTP_1_1);
+ if(connssl->alpn) {
+ struct alpn_proto_buf proto;
+ rustls_slice_bytes alpn[ALPN_ENTRIES_MAX];
+ size_t i;
+
+ for(i = 0; i < connssl->alpn->count; ++i) {
+ alpn[i].data = (const uint8_t *)connssl->alpn->entries[i];
+ alpn[i].len = strlen(connssl->alpn->entries[i]);
+ }
+ rustls_client_config_builder_set_alpn_protocols(config_builder, alpn,
+ connssl->alpn->count);
+ Curl_alpn_to_proto_str(&proto, connssl->alpn);
+ infof(data, VTLS_INFOF_ALPN_OFFER_1STR, proto.data);
+ }
if(!verifypeer) {
rustls_client_config_builder_dangerous_set_certificate_verifier(
config_builder, cr_verify_none);
@@ -352,7 +421,7 @@ cr_init_backend(struct Curl_easy *data, struct connectdata *conn,
result = rustls_root_cert_store_add_pem(roots, ca_info_blob->data,
ca_info_blob->len, verifypeer);
if(result != RUSTLS_RESULT_OK) {
- failf(data, "failed to parse trusted certificates from blob");
+ failf(data, "rustls: failed to parse trusted certificates from blob");
rustls_root_cert_store_free(roots);
rustls_client_config_free(
rustls_client_config_builder_build(config_builder));
@@ -362,7 +431,7 @@ cr_init_backend(struct Curl_easy *data, struct connectdata *conn,
result = rustls_client_config_builder_use_roots(config_builder, roots);
rustls_root_cert_store_free(roots);
if(result != RUSTLS_RESULT_OK) {
- failf(data, "failed to load trusted certificates");
+ failf(data, "rustls: failed to load trusted certificates");
rustls_client_config_free(
rustls_client_config_builder_build(config_builder));
return CURLE_SSL_CACERT_BADFILE;
@@ -372,7 +441,7 @@ cr_init_backend(struct Curl_easy *data, struct connectdata *conn,
result = rustls_client_config_builder_load_roots_from_file(
config_builder, ssl_cafile);
if(result != RUSTLS_RESULT_OK) {
- failf(data, "failed to load trusted certificates");
+ failf(data, "rustls: failed to load trusted certificates");
rustls_client_config_free(
rustls_client_config_builder_build(config_builder));
return CURLE_SSL_CACERT_BADFILE;
@@ -382,12 +451,11 @@ cr_init_backend(struct Curl_easy *data, struct connectdata *conn,
backend->config = rustls_client_config_builder_build(config_builder);
DEBUGASSERT(rconn == NULL);
{
- char *snihost = Curl_ssl_snihost(data, hostname, NULL);
- if(!snihost) {
- failf(data, "Failed to set SNI");
- return CURLE_SSL_CONNECT_ERROR;
- }
- result = rustls_client_connection_new(backend->config, snihost, &rconn);
+ /* rustls claims to manage ip address hostnames as well here. So,
+ * if we have an SNI, we use it, otherwise we pass the hostname */
+ char *server = connssl->peer.sni?
+ connssl->peer.sni : connssl->peer.hostname;
+ result = rustls_client_connection_new(backend->config, server, &rconn);
}
if(result != RUSTLS_RESULT_OK) {
rustls_error(result, errorbuf, sizeof(errorbuf), &errorlen);
@@ -400,45 +468,35 @@ cr_init_backend(struct Curl_easy *data, struct connectdata *conn,
}
static void
-cr_set_negotiated_alpn(struct Curl_easy *data, struct connectdata *conn,
+cr_set_negotiated_alpn(struct Curl_cfilter *cf, struct Curl_easy *data,
const struct rustls_connection *rconn)
{
const uint8_t *protocol = NULL;
size_t len = 0;
rustls_connection_get_alpn_protocol(rconn, &protocol, &len);
- if(!protocol) {
- infof(data, VTLS_INFOF_NO_ALPN);
- return;
- }
-
-#ifdef USE_HTTP2
- if(len == ALPN_H2_LENGTH && 0 == memcmp(ALPN_H2, protocol, len)) {
- infof(data, VTLS_INFOF_ALPN_ACCEPTED_1STR, ALPN_H2);
- conn->alpn = CURL_HTTP_VERSION_2;
- }
- else
-#endif
- if(len == ALPN_HTTP_1_1_LENGTH &&
- 0 == memcmp(ALPN_HTTP_1_1, protocol, len)) {
- infof(data, VTLS_INFOF_ALPN_ACCEPTED_1STR, ALPN_HTTP_1_1);
- conn->alpn = CURL_HTTP_VERSION_1_1;
- }
- else {
- infof(data, "ALPN, negotiated an unrecognized protocol");
- }
-
- Curl_multiuse_state(data, conn->alpn == CURL_HTTP_VERSION_2 ?
- BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
+ Curl_alpn_set_negotiated(cf, data, protocol, len);
}
+/* Given an established network connection, do a TLS handshake.
+ *
+ * If `blocking` is true, this function will block until the handshake is
+ * complete. Otherwise it will return as soon as I/O would block.
+ *
+ * For the non-blocking I/O case, this function will set `*done` to true
+ * once the handshake is complete. This function never reads the value of
+ * `*done*`.
+ */
static CURLcode
-cr_connect_nonblocking(struct Curl_easy *data, struct connectdata *conn,
- int sockindex, bool *done)
+cr_connect_common(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool blocking,
+ bool *done)
{
- struct ssl_connect_data *const connssl = &conn->ssl[sockindex];
- curl_socket_t sockfd = conn->sock[sockindex];
- struct ssl_backend_data *const backend = connssl->backend;
+ struct ssl_connect_data *const connssl = cf->ctx;
+ curl_socket_t sockfd = Curl_conn_cf_get_socket(cf, data);
+ struct rustls_ssl_backend_data *const backend =
+ (struct rustls_ssl_backend_data *)connssl->backend;
struct rustls_connection *rconn = NULL;
CURLcode tmperr = CURLE_OK;
int result;
@@ -447,11 +505,14 @@ cr_connect_nonblocking(struct Curl_easy *data, struct connectdata *conn,
bool wants_write;
curl_socket_t writefd;
curl_socket_t readfd;
+ timediff_t timeout_ms;
+ timediff_t socket_check_timeout;
DEBUGASSERT(backend);
if(ssl_connection_none == connssl->state) {
- result = cr_init_backend(data, conn, connssl->backend);
+ result = cr_init_backend(cf, data,
+ (struct rustls_ssl_backend_data *)connssl->backend);
if(result != CURLE_OK) {
return result;
}
@@ -471,10 +532,8 @@ cr_connect_nonblocking(struct Curl_easy *data, struct connectdata *conn,
/* Done with the handshake. Set up callbacks to send/receive data. */
connssl->state = ssl_connection_complete;
- cr_set_negotiated_alpn(data, conn, rconn);
+ cr_set_negotiated_alpn(cf, data, rconn);
- conn->recv[sockindex] = cr_recv;
- conn->send[sockindex] = cr_send;
*done = TRUE;
return CURLE_OK;
}
@@ -485,12 +544,29 @@ cr_connect_nonblocking(struct Curl_easy *data, struct connectdata *conn,
writefd = wants_write?sockfd:CURL_SOCKET_BAD;
readfd = wants_read?sockfd:CURL_SOCKET_BAD;
- what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd, 0);
+ /* check allowed time left */
+ timeout_ms = Curl_timeleft(data, NULL, TRUE);
+
+ if(timeout_ms < 0) {
+ /* no need to continue if time already is up */
+ failf(data, "rustls: operation timed out before socket check");
+ return CURLE_OPERATION_TIMEDOUT;
+ }
+
+ socket_check_timeout = blocking?timeout_ms:0;
+
+ what = Curl_socket_check(
+ readfd, CURL_SOCKET_BAD, writefd, socket_check_timeout);
if(what < 0) {
/* fatal error */
failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);
return CURLE_SSL_CONNECT_ERROR;
}
+ if(blocking && 0 == what) {
+ failf(data, "rustls connection timeout after %d ms",
+ socket_check_timeout);
+ return CURLE_OPERATION_TIMEDOUT;
+ }
if(0 == what) {
infof(data, "Curl_socket_check: %s would block",
wants_read&&wants_write ? "writing and reading" :
@@ -502,7 +578,7 @@ cr_connect_nonblocking(struct Curl_easy *data, struct connectdata *conn,
if(wants_write) {
infof(data, "rustls_connection wants us to write_tls.");
- cr_send(data, sockindex, NULL, 0, &tmperr);
+ cr_send(cf, data, NULL, 0, &tmperr);
if(tmperr == CURLE_AGAIN) {
infof(data, "writing would block");
/* fall through */
@@ -515,13 +591,12 @@ cr_connect_nonblocking(struct Curl_easy *data, struct connectdata *conn,
if(wants_read) {
infof(data, "rustls_connection wants us to read_tls.");
- cr_recv(data, sockindex, NULL, 0, &tmperr);
- if(tmperr == CURLE_AGAIN) {
- infof(data, "reading would block");
- /* fall through */
- }
- else if(tmperr != CURLE_OK) {
- if(tmperr == CURLE_READ_ERROR) {
+ if(tls_recv_more(cf, data, &tmperr) < 0) {
+ if(tmperr == CURLE_AGAIN) {
+ infof(data, "reading would block");
+ /* fall through */
+ }
+ else if(tmperr == CURLE_READ_ERROR) {
return CURLE_SSL_CONNECT_ERROR;
}
else {
@@ -536,46 +611,61 @@ cr_connect_nonblocking(struct Curl_easy *data, struct connectdata *conn,
DEBUGASSERT(false);
}
-/* returns a bitmap of flags for this connection's first socket indicating
- whether we want to read or write */
-static int
-cr_getsock(struct connectdata *conn, curl_socket_t *socks)
+static CURLcode
+cr_connect_nonblocking(struct Curl_cfilter *cf,
+ struct Curl_easy *data, bool *done)
{
- struct ssl_connect_data *const connssl = &conn->ssl[FIRSTSOCKET];
- curl_socket_t sockfd = conn->sock[FIRSTSOCKET];
- struct ssl_backend_data *const backend = connssl->backend;
- struct rustls_connection *rconn = NULL;
+ return cr_connect_common(cf, data, false, done);
+}
- DEBUGASSERT(backend);
- rconn = backend->conn;
+static CURLcode
+cr_connect_blocking(struct Curl_cfilter *cf UNUSED_PARAM,
+ struct Curl_easy *data UNUSED_PARAM)
+{
+ bool done; /* unused */
+ return cr_connect_common(cf, data, true, &done);
+}
- if(rustls_connection_wants_write(rconn)) {
- socks[0] = sockfd;
- return GETSOCK_WRITESOCK(0);
- }
- if(rustls_connection_wants_read(rconn)) {
- socks[0] = sockfd;
- return GETSOCK_READSOCK(0);
+static void cr_adjust_pollset(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct easy_pollset *ps)
+{
+ if(!cf->connected) {
+ curl_socket_t sock = Curl_conn_cf_get_socket(cf->next, data);
+ struct ssl_connect_data *const connssl = cf->ctx;
+ struct rustls_ssl_backend_data *const backend =
+ (struct rustls_ssl_backend_data *)connssl->backend;
+ struct rustls_connection *rconn = NULL;
+
+ (void)data;
+ DEBUGASSERT(backend);
+ rconn = backend->conn;
+
+ if(rustls_connection_wants_write(rconn)) {
+ Curl_pollset_add_out(data, ps, sock);
+ }
+ if(rustls_connection_wants_read(rconn)) {
+ Curl_pollset_add_in(data, ps, sock);
+ }
}
-
- return GETSOCK_BLANK;
}
static void *
cr_get_internals(struct ssl_connect_data *connssl,
CURLINFO info UNUSED_PARAM)
{
- struct ssl_backend_data *backend = connssl->backend;
+ struct rustls_ssl_backend_data *backend =
+ (struct rustls_ssl_backend_data *)connssl->backend;
DEBUGASSERT(backend);
return &backend->conn;
}
static void
-cr_close(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
+cr_close(struct Curl_cfilter *cf, struct Curl_easy *data)
{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct rustls_ssl_backend_data *backend =
+ (struct rustls_ssl_backend_data *)connssl->backend;
CURLcode tmperr = CURLE_OK;
ssize_t n = 0;
@@ -583,9 +673,9 @@ cr_close(struct Curl_easy *data, struct connectdata *conn,
if(backend->conn) {
rustls_connection_send_close_notify(backend->conn);
- n = cr_send(data, sockindex, NULL, 0, &tmperr);
+ n = cr_send(cf, data, NULL, 0, &tmperr);
if(n < 0) {
- failf(data, "error sending close notify: %d", tmperr);
+ failf(data, "rustls: error sending close_notify: %d", tmperr);
}
rustls_connection_free(backend->conn);
@@ -606,8 +696,9 @@ static size_t cr_version(char *buffer, size_t size)
const struct Curl_ssl Curl_ssl_rustls = {
{ CURLSSLBACKEND_RUSTLS, "rustls" },
SSLSUPP_CAINFO_BLOB | /* supports */
- SSLSUPP_TLS13_CIPHERSUITES,
- sizeof(struct ssl_backend_data),
+ SSLSUPP_TLS13_CIPHERSUITES |
+ SSLSUPP_HTTPS_PROXY,
+ sizeof(struct rustls_ssl_backend_data),
Curl_none_init, /* init */
Curl_none_cleanup, /* cleanup */
@@ -617,9 +708,9 @@ const struct Curl_ssl Curl_ssl_rustls = {
cr_data_pending, /* data_pending */
Curl_none_random, /* random */
Curl_none_cert_status_request, /* cert_status_request */
- cr_connect, /* connect */
+ cr_connect_blocking, /* connect */
cr_connect_nonblocking, /* connect_nonblocking */
- cr_getsock, /* cr_getsock */
+ cr_adjust_pollset, /* adjust_pollset */
cr_get_internals, /* get_internals */
cr_close, /* close_one */
Curl_none_close_all, /* close_all */
@@ -630,7 +721,10 @@ const struct Curl_ssl Curl_ssl_rustls = {
Curl_none_false_start, /* false_start */
NULL, /* sha256sum */
NULL, /* associate_connection */
- NULL /* disassociate_connection */
+ NULL, /* disassociate_connection */
+ NULL, /* free_multi_ssl_backend_data */
+ cr_recv, /* recv decrypted data */
+ cr_send, /* send data to encrypt */
};
#endif /* USE_RUSTLS */
diff --git a/lib/vtls/rustls.h b/lib/vtls/rustls.h
index 6b393dd63..bfbe23de3 100644
--- a/lib/vtls/rustls.h
+++ b/lib/vtls/rustls.h
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2020 - 2022, Jacob Hoffman-Andrews,
+ * Copyright (C) Jacob Hoffman-Andrews,
* <github@hoffman-andrews.com>
*
* This software is licensed as described in the file COPYING, which
diff --git a/lib/vtls/schannel.c b/lib/vtls/schannel.c
index 454eb7967..ae7f2956d 100644
--- a/lib/vtls/schannel.c
+++ b/lib/vtls/schannel.c
@@ -5,9 +5,9 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2012 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- * Copyright (C) 2012 - 2016, Marc Hoersken, <info@marc-hoersken.de>
- * Copyright (C) 2012, Mark Salisbury, <mark.salisbury@hp.com>
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Marc Hoersken, <info@marc-hoersken.de>
+ * Copyright (C) Mark Salisbury, <mark.salisbury@hp.com>
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -33,14 +33,14 @@
#ifdef USE_SCHANNEL
-#define EXPOSE_SCHANNEL_INTERNAL_STRUCTS
-
#ifndef USE_WINDOWS_SSPI
# error "Can't compile SCHANNEL support without SSPI."
#endif
#include "schannel.h"
+#include "schannel_int.h"
#include "vtls.h"
+#include "vtls_int.h"
#include "strcase.h"
#include "sendf.h"
#include "connect.h" /* for the connect timeout */
@@ -68,22 +68,6 @@
# define HAS_ALPN 1
#endif
-#ifndef UNISP_NAME_A
-#define UNISP_NAME_A "Microsoft Unified Security Protocol Provider"
-#endif
-
-#ifndef UNISP_NAME_W
-#define UNISP_NAME_W L"Microsoft Unified Security Protocol Provider"
-#endif
-
-#ifndef UNISP_NAME
-#ifdef UNICODE
-#define UNISP_NAME UNISP_NAME_W
-#else
-#define UNISP_NAME UNISP_NAME_A
-#endif
-#endif
-
#ifndef BCRYPT_CHACHA20_POLY1305_ALGORITHM
#define BCRYPT_CHACHA20_POLY1305_ALGORITHM L"CHACHA20_POLY1305"
#endif
@@ -108,13 +92,6 @@
#define BCRYPT_SHA384_ALGORITHM L"SHA384"
#endif
-/* Workaround broken compilers like MinGW.
- Return the number of elements in a statically sized array.
-*/
-#ifndef ARRAYSIZE
-#define ARRAYSIZE(A) (sizeof(A)/sizeof((A)[0]))
-#endif
-
#ifdef HAS_CLIENT_CERT_PATH
#ifdef UNICODE
#define CURL_CERT_STORE_PROV_SYSTEM CERT_STORE_PROV_SYSTEM_W
@@ -123,18 +100,6 @@
#endif
#endif
-#ifndef SP_PROT_SSL2_CLIENT
-#define SP_PROT_SSL2_CLIENT 0x00000008
-#endif
-
-#ifndef SP_PROT_SSL3_CLIENT
-#define SP_PROT_SSL3_CLIENT 0x00000008
-#endif
-
-#ifndef SP_PROT_TLS1_CLIENT
-#define SP_PROT_TLS1_CLIENT 0x00000080
-#endif
-
#ifndef SP_PROT_TLS1_0_CLIENT
#define SP_PROT_TLS1_0_CLIENT SP_PROT_TLS1_CLIENT
#endif
@@ -175,22 +140,13 @@
# define CALG_SHA_256 0x0000800c
#endif
-/* Work around typo in classic MinGW's w32api up to version 5.0,
- see https://osdn.net/projects/mingw/ticket/38391 */
-#if !defined(ALG_CLASS_DHASH) && defined(ALG_CLASS_HASH)
-#define ALG_CLASS_DHASH ALG_CLASS_HASH
-#endif
-
#ifndef PKCS12_NO_PERSIST_KEY
#define PKCS12_NO_PERSIST_KEY 0x00008000
#endif
-static Curl_recv schannel_recv;
-static Curl_send schannel_send;
-
-static CURLcode pkp_pin_peer_pubkey(struct Curl_easy *data,
- struct connectdata *conn, int sockindex,
- const char *pinnedpubkey);
+static CURLcode schannel_pkp_pin_peer_pubkey(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ const char *pinnedpubkey);
static void InitSecBuffer(SecBuffer *buffer, unsigned long BufType,
void *BufDataPtr, unsigned long BufByteSize)
@@ -209,11 +165,13 @@ static void InitSecBufferDesc(SecBufferDesc *desc, SecBuffer *BufArr,
}
static CURLcode
-set_ssl_version_min_max(DWORD *enabled_protocols, struct Curl_easy *data,
- struct connectdata *conn)
+schannel_set_ssl_version_min_max(DWORD *enabled_protocols,
+ struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
- long ssl_version = SSL_CONN_CONFIG(version);
- long ssl_version_max = SSL_CONN_CONFIG(version_max);
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
+ long ssl_version = conn_config->version;
+ long ssl_version_max = conn_config->version_max;
long i = ssl_version;
switch(ssl_version_max) {
@@ -262,130 +220,135 @@ set_ssl_version_min_max(DWORD *enabled_protocols, struct Curl_easy *data,
return CURLE_OK;
}
-/*longest is 26, buffer is slightly bigger*/
+/* longest is 26, buffer is slightly bigger */
#define LONGEST_ALG_ID 32
-#define CIPHEROPTION(X) \
- if(strcmp(#X, tmp) == 0) \
- return X
+#define CIPHEROPTION(x) {#x, x}
-static int
-get_alg_id_by_name(char *name)
-{
- char tmp[LONGEST_ALG_ID] = { 0 };
- char *nameEnd = strchr(name, ':');
- size_t n = nameEnd ? (size_t)(nameEnd - name) : strlen(name);
+struct algo {
+ const char *name;
+ int id;
+};
- /* reject too-long alg names */
- if(n > (LONGEST_ALG_ID - 1))
- return 0;
-
- strncpy(tmp, name, n);
- tmp[n] = 0;
- CIPHEROPTION(CALG_MD2);
- CIPHEROPTION(CALG_MD4);
- CIPHEROPTION(CALG_MD5);
- CIPHEROPTION(CALG_SHA);
- CIPHEROPTION(CALG_SHA1);
- CIPHEROPTION(CALG_MAC);
- CIPHEROPTION(CALG_RSA_SIGN);
- CIPHEROPTION(CALG_DSS_SIGN);
-/*ifdefs for the options that are defined conditionally in wincrypt.h*/
+static const struct algo algs[]= {
+ CIPHEROPTION(CALG_MD2),
+ CIPHEROPTION(CALG_MD4),
+ CIPHEROPTION(CALG_MD5),
+ CIPHEROPTION(CALG_SHA),
+ CIPHEROPTION(CALG_SHA1),
+ CIPHEROPTION(CALG_MAC),
+ CIPHEROPTION(CALG_RSA_SIGN),
+ CIPHEROPTION(CALG_DSS_SIGN),
+/* ifdefs for the options that are defined conditionally in wincrypt.h */
#ifdef CALG_NO_SIGN
- CIPHEROPTION(CALG_NO_SIGN);
+ CIPHEROPTION(CALG_NO_SIGN),
#endif
- CIPHEROPTION(CALG_RSA_KEYX);
- CIPHEROPTION(CALG_DES);
+ CIPHEROPTION(CALG_RSA_KEYX),
+ CIPHEROPTION(CALG_DES),
#ifdef CALG_3DES_112
- CIPHEROPTION(CALG_3DES_112);
+ CIPHEROPTION(CALG_3DES_112),
#endif
- CIPHEROPTION(CALG_3DES);
- CIPHEROPTION(CALG_DESX);
- CIPHEROPTION(CALG_RC2);
- CIPHEROPTION(CALG_RC4);
- CIPHEROPTION(CALG_SEAL);
+ CIPHEROPTION(CALG_3DES),
+ CIPHEROPTION(CALG_DESX),
+ CIPHEROPTION(CALG_RC2),
+ CIPHEROPTION(CALG_RC4),
+ CIPHEROPTION(CALG_SEAL),
#ifdef CALG_DH_SF
- CIPHEROPTION(CALG_DH_SF);
+ CIPHEROPTION(CALG_DH_SF),
#endif
- CIPHEROPTION(CALG_DH_EPHEM);
+ CIPHEROPTION(CALG_DH_EPHEM),
#ifdef CALG_AGREEDKEY_ANY
- CIPHEROPTION(CALG_AGREEDKEY_ANY);
+ CIPHEROPTION(CALG_AGREEDKEY_ANY),
#endif
#ifdef CALG_HUGHES_MD5
- CIPHEROPTION(CALG_HUGHES_MD5);
+ CIPHEROPTION(CALG_HUGHES_MD5),
#endif
- CIPHEROPTION(CALG_SKIPJACK);
+ CIPHEROPTION(CALG_SKIPJACK),
#ifdef CALG_TEK
- CIPHEROPTION(CALG_TEK);
+ CIPHEROPTION(CALG_TEK),
#endif
- CIPHEROPTION(CALG_CYLINK_MEK);
- CIPHEROPTION(CALG_SSL3_SHAMD5);
+ CIPHEROPTION(CALG_CYLINK_MEK),
+ CIPHEROPTION(CALG_SSL3_SHAMD5),
#ifdef CALG_SSL3_MASTER
- CIPHEROPTION(CALG_SSL3_MASTER);
+ CIPHEROPTION(CALG_SSL3_MASTER),
#endif
#ifdef CALG_SCHANNEL_MASTER_HASH
- CIPHEROPTION(CALG_SCHANNEL_MASTER_HASH);
+ CIPHEROPTION(CALG_SCHANNEL_MASTER_HASH),
#endif
#ifdef CALG_SCHANNEL_MAC_KEY
- CIPHEROPTION(CALG_SCHANNEL_MAC_KEY);
+ CIPHEROPTION(CALG_SCHANNEL_MAC_KEY),
#endif
#ifdef CALG_SCHANNEL_ENC_KEY
- CIPHEROPTION(CALG_SCHANNEL_ENC_KEY);
+ CIPHEROPTION(CALG_SCHANNEL_ENC_KEY),
#endif
#ifdef CALG_PCT1_MASTER
- CIPHEROPTION(CALG_PCT1_MASTER);
+ CIPHEROPTION(CALG_PCT1_MASTER),
#endif
#ifdef CALG_SSL2_MASTER
- CIPHEROPTION(CALG_SSL2_MASTER);
+ CIPHEROPTION(CALG_SSL2_MASTER),
#endif
#ifdef CALG_TLS1_MASTER
- CIPHEROPTION(CALG_TLS1_MASTER);
+ CIPHEROPTION(CALG_TLS1_MASTER),
#endif
#ifdef CALG_RC5
- CIPHEROPTION(CALG_RC5);
+ CIPHEROPTION(CALG_RC5),
#endif
#ifdef CALG_HMAC
- CIPHEROPTION(CALG_HMAC);
+ CIPHEROPTION(CALG_HMAC),
#endif
#ifdef CALG_TLS1PRF
- CIPHEROPTION(CALG_TLS1PRF);
+ CIPHEROPTION(CALG_TLS1PRF),
#endif
#ifdef CALG_HASH_REPLACE_OWF
- CIPHEROPTION(CALG_HASH_REPLACE_OWF);
+ CIPHEROPTION(CALG_HASH_REPLACE_OWF),
#endif
#ifdef CALG_AES_128
- CIPHEROPTION(CALG_AES_128);
+ CIPHEROPTION(CALG_AES_128),
#endif
#ifdef CALG_AES_192
- CIPHEROPTION(CALG_AES_192);
+ CIPHEROPTION(CALG_AES_192),
#endif
#ifdef CALG_AES_256
- CIPHEROPTION(CALG_AES_256);
+ CIPHEROPTION(CALG_AES_256),
#endif
#ifdef CALG_AES
- CIPHEROPTION(CALG_AES);
+ CIPHEROPTION(CALG_AES),
#endif
#ifdef CALG_SHA_256
- CIPHEROPTION(CALG_SHA_256);
+ CIPHEROPTION(CALG_SHA_256),
#endif
#ifdef CALG_SHA_384
- CIPHEROPTION(CALG_SHA_384);
+ CIPHEROPTION(CALG_SHA_384),
#endif
#ifdef CALG_SHA_512
- CIPHEROPTION(CALG_SHA_512);
+ CIPHEROPTION(CALG_SHA_512),
#endif
#ifdef CALG_ECDH
- CIPHEROPTION(CALG_ECDH);
+ CIPHEROPTION(CALG_ECDH),
#endif
#ifdef CALG_ECMQV
- CIPHEROPTION(CALG_ECMQV);
+ CIPHEROPTION(CALG_ECMQV),
#endif
#ifdef CALG_ECDSA
- CIPHEROPTION(CALG_ECDSA);
+ CIPHEROPTION(CALG_ECDSA),
#endif
#ifdef CALG_ECDH_EPHEM
- CIPHEROPTION(CALG_ECDH_EPHEM);
+ CIPHEROPTION(CALG_ECDH_EPHEM),
#endif
- return 0;
+ {NULL, 0},
+};
+
+static int
+get_alg_id_by_name(char *name)
+{
+ char *nameEnd = strchr(name, ':');
+ size_t n = nameEnd ? (size_t)(nameEnd - name) : strlen(name);
+ int i;
+
+ for(i = 0; algs[i].name; i++) {
+ if((n == strlen(algs[i].name) && !strncmp(algs[i].name, name, n)))
+ return algs[i].id;
+ }
+ return 0; /* not found */
}
#define NUM_CIPHERS 47 /* There are 47 options listed above */
@@ -477,11 +440,12 @@ get_cert_location(TCHAR *path, DWORD *store_name, TCHAR **store_path,
}
#endif
static CURLcode
-schannel_acquire_credential_handle(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex)
+schannel_acquire_credential_handle(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
+ struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data);
#ifdef HAS_CLIENT_CERT_PATH
PCCERT_CONTEXT client_certs[1] = { NULL };
@@ -494,11 +458,12 @@ schannel_acquire_credential_handle(struct Curl_easy *data,
DWORD flags = 0;
DWORD enabled_protocols = 0;
- struct ssl_backend_data *backend = connssl->backend;
+ struct schannel_ssl_backend_data *backend =
+ (struct schannel_ssl_backend_data *)(connssl->backend);
DEBUGASSERT(backend);
- if(conn->ssl_config.verifypeer) {
+ if(conn_config->verifypeer) {
#ifdef HAS_MANUAL_VERIFY_API
if(backend->use_manual_cred_validation)
flags = SCH_CRED_MANUAL_CRED_VALIDATION;
@@ -506,14 +471,14 @@ schannel_acquire_credential_handle(struct Curl_easy *data,
#endif
flags = SCH_CRED_AUTO_CRED_VALIDATION;
- if(SSL_SET_OPTION(no_revoke)) {
+ if(ssl_config->no_revoke) {
flags |= SCH_CRED_IGNORE_NO_REVOCATION_CHECK |
SCH_CRED_IGNORE_REVOCATION_OFFLINE;
DEBUGF(infof(data, "schannel: disabled server certificate revocation "
"checks"));
}
- else if(SSL_SET_OPTION(revoke_best_effort)) {
+ else if(ssl_config->revoke_best_effort) {
flags |= SCH_CRED_IGNORE_NO_REVOCATION_CHECK |
SCH_CRED_IGNORE_REVOCATION_OFFLINE | SCH_CRED_REVOCATION_CHECK_CHAIN;
@@ -534,14 +499,14 @@ schannel_acquire_credential_handle(struct Curl_easy *data,
"schannel: disabled server cert revocation checks"));
}
- if(!conn->ssl_config.verifyhost) {
+ if(!conn_config->verifyhost) {
flags |= SCH_CRED_NO_SERVERNAME_CHECK;
DEBUGF(infof(data, "schannel: verifyhost setting prevents Schannel from "
"comparing the supplied target name with the subject "
"names in server certificates."));
}
- if(!SSL_SET_OPTION(auto_client_cert)) {
+ if(!ssl_config->auto_client_cert) {
flags &= ~SCH_CRED_USE_DEFAULT_CREDS;
flags |= SCH_CRED_NO_DEFAULT_CREDS;
infof(data, "schannel: disabled automatic use of client certificate");
@@ -549,7 +514,7 @@ schannel_acquire_credential_handle(struct Curl_easy *data,
else
infof(data, "schannel: enabled automatic use of client certificate");
- switch(conn->ssl_config.version) {
+ switch(conn_config->version) {
case CURL_SSLVERSION_DEFAULT:
case CURL_SSLVERSION_TLSv1:
case CURL_SSLVERSION_TLSv1_0:
@@ -557,7 +522,7 @@ schannel_acquire_credential_handle(struct Curl_easy *data,
case CURL_SSLVERSION_TLSv1_2:
case CURL_SSLVERSION_TLSv1_3:
{
- result = set_ssl_version_min_max(&enabled_protocols, data, conn);
+ result = schannel_set_ssl_version_min_max(&enabled_protocols, cf, data);
if(result != CURLE_OK)
return result;
break;
@@ -763,7 +728,7 @@ schannel_acquire_credential_handle(struct Curl_easy *data,
}
#endif
- /* allocate memory for the re-usable credential handle */
+ /* allocate memory for the reusable credential handle */
backend->cred = (struct Curl_schannel_cred *)
calloc(1, sizeof(struct Curl_schannel_cred));
if(!backend->cred) {
@@ -787,8 +752,11 @@ schannel_acquire_credential_handle(struct Curl_easy *data,
backend->cred->client_cert_store = client_cert_store;
#endif
- /* Windows 10, 1809 (a.k.a. Windows 10 build 17763) */
- if(curlx_verify_windows_version(10, 0, 17763, PLATFORM_WINNT,
+ /* We support TLS 1.3 starting in Windows 10 version 1809 (OS build 17763) as
+ long as the user did not set a legacy algorithm list
+ (CURLOPT_SSL_CIPHER_LIST). */
+ if(!conn_config->cipher_list &&
+ curlx_verify_windows_version(10, 0, 17763, PLATFORM_WINNT,
VERSION_GREATER_THAN_EQUAL)) {
char *ciphers13 = 0;
@@ -801,9 +769,9 @@ schannel_acquire_credential_handle(struct Curl_easy *data,
SCH_CREDENTIALS credentials = { 0 };
TLS_PARAMETERS tls_parameters = { 0 };
- CRYPTO_SETTINGS crypto_settings[4] = { 0 };
- UNICODE_STRING blocked_ccm_modes[1] = { 0 };
- UNICODE_STRING blocked_gcm_modes[1] = { 0 };
+ CRYPTO_SETTINGS crypto_settings[4] = { { 0 } };
+ UNICODE_STRING blocked_ccm_modes[1] = { { 0 } };
+ UNICODE_STRING blocked_gcm_modes[1] = { { 0 } };
int crypto_settings_idx = 0;
@@ -812,7 +780,7 @@ schannel_acquire_credential_handle(struct Curl_easy *data,
* disable all the ciphers and re-enable which
* ciphers the user has provided.
*/
- ciphers13 = SSL_CONN_CONFIG(cipher_list13);
+ ciphers13 = conn_config->cipher_list13;
if(ciphers13) {
const int remaining_ciphers = 5;
@@ -838,7 +806,7 @@ schannel_acquire_credential_handle(struct Curl_easy *data,
/* reject too-long cipher names */
if(n > (LONGEST_ALG_ID - 1)) {
- failf(data, "Cipher name too long, not checked.");
+ failf(data, "schannel: Cipher name too long, not checked");
return CURLE_SSL_CIPHER;
}
@@ -866,7 +834,7 @@ schannel_acquire_credential_handle(struct Curl_easy *data,
disable_aes_ccm_sha256 = FALSE;
}
else {
- failf(data, "Passed in an unknown TLS 1.3 cipher.");
+ failf(data, "schannel: Unknown TLS 1.3 cipher: %s", tmp);
return CURLE_SSL_CIPHER;
}
@@ -881,7 +849,7 @@ schannel_acquire_credential_handle(struct Curl_easy *data,
if(disable_aes_gcm_sha384 && disable_aes_gcm_sha256
&& disable_chacha_poly && disable_aes_ccm_8_sha256
&& disable_aes_ccm_sha256) {
- failf(data, "All available TLS 1.3 ciphers were disabled.");
+ failf(data, "schannel: All available TLS 1.3 ciphers were disabled");
return CURLE_SSL_CIPHER;
}
@@ -1004,18 +972,31 @@ schannel_acquire_credential_handle(struct Curl_easy *data,
&backend->cred->time_stamp);
}
else {
- /* Pre-Windows 10 1809 */
+ /* Pre-Windows 10 1809 or the user set a legacy algorithm list. Although MS
+ doesn't document it, currently Schannel will not negotiate TLS 1.3 when
+ SCHANNEL_CRED is used. */
ALG_ID algIds[NUM_CIPHERS];
- char *ciphers = SSL_CONN_CONFIG(cipher_list);
+ char *ciphers = conn_config->cipher_list;
SCHANNEL_CRED schannel_cred = { 0 };
schannel_cred.dwVersion = SCHANNEL_CRED_VERSION;
schannel_cred.dwFlags = flags;
schannel_cred.grbitEnabledProtocols = enabled_protocols;
if(ciphers) {
+ if((enabled_protocols & SP_PROT_TLS1_3_CLIENT)) {
+ infof(data, "schannel: WARNING: This version of Schannel may "
+ "negotiate a less-secure TLS version than TLS 1.3 because the "
+ "user set an algorithm cipher list.");
+ }
+ if(conn_config->cipher_list13) {
+ failf(data, "schannel: This version of Schannel does not support "
+ "setting an algorithm cipher list and TLS 1.3 cipher list at "
+ "the same time");
+ return CURLE_SSL_CIPHER;
+ }
result = set_ssl_ciphers(&schannel_cred, ciphers, algIds);
if(CURLE_OK != result) {
- failf(data, "Unable to set ciphers to passed via SSL_CONN_CONFIG");
+ failf(data, "schannel: Failed setting algorithm cipher list");
return result;
}
}
@@ -1065,11 +1046,14 @@ schannel_acquire_credential_handle(struct Curl_easy *data,
}
static CURLcode
-schannel_connect_step1(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
+schannel_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data)
{
ssize_t written = -1;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct schannel_ssl_backend_data *backend =
+ (struct schannel_ssl_backend_data *)connssl->backend;
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
+ struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data);
SecBuffer outbuf;
SecBufferDesc outbuf_desc;
SecBuffer inbuf;
@@ -1079,19 +1063,12 @@ schannel_connect_step1(struct Curl_easy *data, struct connectdata *conn,
#endif
SECURITY_STATUS sspi_status = SEC_E_OK;
struct Curl_schannel_cred *old_cred = NULL;
- struct in_addr addr;
-#ifdef ENABLE_IPV6
- struct in6_addr addr6;
-#endif
CURLcode result;
- char * const hostname = SSL_HOST_NAME();
- struct ssl_backend_data *backend = connssl->backend;
DEBUGASSERT(backend);
-
DEBUGF(infof(data,
- "schannel: SSL/TLS connection with %s port %hu (step 1/3)",
- hostname, conn->remote_port));
+ "schannel: SSL/TLS connection with %s port %d (step 1/3)",
+ connssl->peer.hostname, connssl->port));
if(curlx_verify_windows_version(5, 1, 0, PLATFORM_WINNT,
VERSION_LESS_THAN_EQUAL)) {
@@ -1104,7 +1081,7 @@ schannel_connect_step1(struct Curl_easy *data, struct connectdata *conn,
#ifdef HAS_ALPN
/* ALPN is only supported on Windows 8.1 / Server 2012 R2 and above.
Also it doesn't seem to be supported for Wine, see curl bug #983. */
- backend->use_alpn = conn->bits.tls_enable_alpn &&
+ backend->use_alpn = connssl->alpn &&
!GetProcAddress(GetModuleHandle(TEXT("ntdll")),
"wine_get_version") &&
curlx_verify_windows_version(6, 3, 0, PLATFORM_WINNT,
@@ -1123,7 +1100,7 @@ schannel_connect_step1(struct Curl_easy *data, struct connectdata *conn,
#endif
#else
#ifdef HAS_MANUAL_VERIFY_API
- if(SSL_CONN_CONFIG(CAfile) || SSL_CONN_CONFIG(ca_info_blob)) {
+ if(conn_config->CAfile || conn_config->ca_info_blob) {
if(curlx_verify_windows_version(6, 1, 0, PLATFORM_WINNT,
VERSION_GREATER_THAN_EQUAL)) {
backend->use_manual_cred_validation = true;
@@ -1137,7 +1114,7 @@ schannel_connect_step1(struct Curl_easy *data, struct connectdata *conn,
else
backend->use_manual_cred_validation = false;
#else
- if(SSL_CONN_CONFIG(CAfile) || SSL_CONN_CONFIG(ca_info_blob)) {
+ if(conn_config->CAfile || conn_config->ca_info_blob) {
failf(data, "schannel: CA cert support not built in");
return CURLE_NOT_BUILT_IN;
}
@@ -1146,14 +1123,12 @@ schannel_connect_step1(struct Curl_easy *data, struct connectdata *conn,
backend->cred = NULL;
- /* check for an existing re-usable credential handle */
- if(SSL_SET_OPTION(primary.sessionid)) {
+ /* check for an existing reusable credential handle */
+ if(ssl_config->primary.sessionid) {
Curl_ssl_sessionid_lock(data);
- if(!Curl_ssl_getsessionid(data, conn,
- SSL_IS_PROXY() ? TRUE : FALSE,
- (void **)&old_cred, NULL, sockindex)) {
+ if(!Curl_ssl_getsessionid(cf, data, (void **)&old_cred, NULL)) {
backend->cred = old_cred;
- DEBUGF(infof(data, "schannel: re-using existing credential handle"));
+ DEBUGF(infof(data, "schannel: reusing existing credential handle"));
/* increment the reference counter of the credential/session handle */
backend->cred->refcount++;
@@ -1166,28 +1141,22 @@ schannel_connect_step1(struct Curl_easy *data, struct connectdata *conn,
if(!backend->cred) {
char *snihost;
- result = schannel_acquire_credential_handle(data, conn, sockindex);
- if(result != CURLE_OK) {
+ result = schannel_acquire_credential_handle(cf, data);
+ if(result)
return result;
- }
+ /* schannel_acquire_credential_handle() sets backend->cred accordingly or
+ it returns error otherwise. */
+
/* A hostname associated with the credential is needed by
InitializeSecurityContext for SNI and other reasons. */
- snihost = Curl_ssl_snihost(data, SSL_HOST_NAME(), NULL);
- if(!snihost) {
- failf(data, "Failed to set SNI");
- return CURLE_SSL_CONNECT_ERROR;
- }
+ snihost = connssl->peer.sni? connssl->peer.sni : connssl->peer.hostname;
backend->cred->sni_hostname = curlx_convert_UTF8_to_tchar(snihost);
if(!backend->cred->sni_hostname)
return CURLE_OUT_OF_MEMORY;
}
/* Warn if SNI is disabled due to use of an IP address */
- if(Curl_inet_pton(AF_INET, hostname, &addr)
-#ifdef ENABLE_IPV6
- || Curl_inet_pton(AF_INET6, hostname, &addr6)
-#endif
- ) {
+ if(connssl->peer.is_ip_address) {
infof(data, "schannel: using IP address, SNI is not supported by OS.");
}
@@ -1197,44 +1166,44 @@ schannel_connect_step1(struct Curl_easy *data, struct connectdata *conn,
int list_start_index = 0;
unsigned int *extension_len = NULL;
unsigned short* list_len = NULL;
+ struct alpn_proto_buf proto;
/* The first four bytes will be an unsigned int indicating number
of bytes of data in the rest of the buffer. */
- extension_len = (unsigned int *)(&alpn_buffer[cur]);
- cur += sizeof(unsigned int);
+ extension_len = (unsigned int *)(void *)(&alpn_buffer[cur]);
+ cur += (int)sizeof(unsigned int);
/* The next four bytes are an indicator that this buffer will contain
ALPN data, as opposed to NPN, for example. */
- *(unsigned int *)&alpn_buffer[cur] =
+ *(unsigned int *)(void *)&alpn_buffer[cur] =
SecApplicationProtocolNegotiationExt_ALPN;
- cur += sizeof(unsigned int);
+ cur += (int)sizeof(unsigned int);
/* The next two bytes will be an unsigned short indicating the number
of bytes used to list the preferred protocols. */
- list_len = (unsigned short*)(&alpn_buffer[cur]);
- cur += sizeof(unsigned short);
+ list_len = (unsigned short*)(void *)(&alpn_buffer[cur]);
+ cur += (int)sizeof(unsigned short);
list_start_index = cur;
-#ifdef USE_HTTP2
- if(data->state.httpwant >= CURL_HTTP_VERSION_2) {
- alpn_buffer[cur++] = ALPN_H2_LENGTH;
- memcpy(&alpn_buffer[cur], ALPN_H2, ALPN_H2_LENGTH);
- cur += ALPN_H2_LENGTH;
- infof(data, VTLS_INFOF_ALPN_OFFER_1STR, ALPN_H2);
+ result = Curl_alpn_to_proto_buf(&proto, connssl->alpn);
+ if(result) {
+ failf(data, "Error setting ALPN");
+ return CURLE_SSL_CONNECT_ERROR;
}
-#endif
-
- alpn_buffer[cur++] = ALPN_HTTP_1_1_LENGTH;
- memcpy(&alpn_buffer[cur], ALPN_HTTP_1_1, ALPN_HTTP_1_1_LENGTH);
- cur += ALPN_HTTP_1_1_LENGTH;
- infof(data, VTLS_INFOF_ALPN_OFFER_1STR, ALPN_HTTP_1_1);
+ memcpy(&alpn_buffer[cur], proto.data, proto.len);
+ cur += proto.len;
*list_len = curlx_uitous(cur - list_start_index);
- *extension_len = *list_len + sizeof(unsigned int) + sizeof(unsigned short);
+ *extension_len = *list_len +
+ (unsigned short)sizeof(unsigned int) +
+ (unsigned short)sizeof(unsigned short);
InitSecBuffer(&inbuf, SECBUFFER_APPLICATION_PROTOCOLS, alpn_buffer, cur);
InitSecBufferDesc(&inbuf_desc, &inbuf, 1);
+
+ Curl_alpn_to_proto_str(&proto, connssl->alpn);
+ infof(data, VTLS_INFOF_ALPN_OFFER_1STR, proto.data);
}
else {
InitSecBuffer(&inbuf, SECBUFFER_EMPTY, NULL, 0);
@@ -1254,7 +1223,7 @@ schannel_connect_step1(struct Curl_easy *data, struct connectdata *conn,
ISC_REQ_CONFIDENTIALITY | ISC_REQ_ALLOCATE_MEMORY |
ISC_REQ_STREAM;
- if(!SSL_SET_OPTION(auto_client_cert)) {
+ if(!ssl_config->auto_client_cert) {
backend->req_flags |= ISC_REQ_USE_SUPPLIED_CREDS;
}
@@ -1314,8 +1283,9 @@ schannel_connect_step1(struct Curl_easy *data, struct connectdata *conn,
"sending %lu bytes.", outbuf.cbBuffer));
/* send initial handshake data which is now stored in output buffer */
- result = Curl_write_plain(data, conn->sock[sockindex], outbuf.pvBuffer,
- outbuf.cbBuffer, &written);
+ written = Curl_conn_cf_send(cf->next, data,
+ outbuf.pvBuffer, outbuf.cbBuffer,
+ &result);
s_pSecFn->FreeContextBuffer(outbuf.pvBuffer);
if((result != CURLE_OK) || (outbuf.cbBuffer != (size_t) written)) {
failf(data, "schannel: failed to send initial handshake data: "
@@ -1339,12 +1309,14 @@ schannel_connect_step1(struct Curl_easy *data, struct connectdata *conn,
}
static CURLcode
-schannel_connect_step2(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
+schannel_connect_step2(struct Curl_cfilter *cf, struct Curl_easy *data)
{
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct schannel_ssl_backend_data *backend =
+ (struct schannel_ssl_backend_data *)connssl->backend;
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
int i;
ssize_t nread = -1, written = -1;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
unsigned char *reallocated_buffer;
SecBuffer outbuf[3];
SecBufferDesc outbuf_desc;
@@ -1354,15 +1326,14 @@ schannel_connect_step2(struct Curl_easy *data, struct connectdata *conn,
CURLcode result;
bool doread;
const char *pubkey_ptr;
- struct ssl_backend_data *backend = connssl->backend;
DEBUGASSERT(backend);
doread = (connssl->connecting_state != ssl_connect_2_writing) ? TRUE : FALSE;
DEBUGF(infof(data,
- "schannel: SSL/TLS connection with %s port %hu (step 2/3)",
- SSL_HOST_NAME(), conn->remote_port));
+ "schannel: SSL/TLS connection with %s port %d (step 2/3)",
+ connssl->peer.hostname, connssl->port));
if(!backend->cred || !backend->ctxt)
return CURLE_SSL_CONNECT_ERROR;
@@ -1412,12 +1383,12 @@ schannel_connect_step2(struct Curl_easy *data, struct connectdata *conn,
for(;;) {
if(doread) {
/* read encrypted handshake data from socket */
- result = Curl_read_plain(conn->sock[sockindex],
+ nread = Curl_conn_cf_recv(cf->next, data,
(char *) (backend->encdata_buffer +
backend->encdata_offset),
backend->encdata_length -
backend->encdata_offset,
- &nread);
+ &result);
if(result == CURLE_AGAIN) {
if(connssl->connecting_state != ssl_connect_2_writing)
connssl->connecting_state = ssl_connect_2_reading;
@@ -1501,9 +1472,9 @@ schannel_connect_step2(struct Curl_easy *data, struct connectdata *conn,
"sending %lu bytes.", outbuf[i].cbBuffer));
/* send handshake token to server */
- result = Curl_write_plain(data, conn->sock[sockindex],
- outbuf[i].pvBuffer, outbuf[i].cbBuffer,
- &written);
+ written = Curl_conn_cf_send(cf->next, data,
+ outbuf[i].pvBuffer, outbuf[i].cbBuffer,
+ &result);
if((result != CURLE_OK) ||
(outbuf[i].cbBuffer != (size_t) written)) {
failf(data, "schannel: failed to send next handshake data: "
@@ -1596,9 +1567,11 @@ schannel_connect_step2(struct Curl_easy *data, struct connectdata *conn,
DEBUGF(infof(data, "schannel: SSL/TLS handshake complete"));
}
- pubkey_ptr = SSL_PINNED_PUB_KEY();
+ pubkey_ptr = Curl_ssl_cf_is_proxy(cf)?
+ data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY]:
+ data->set.str[STRING_SSL_PINNEDPUBLICKEY];
if(pubkey_ptr) {
- result = pkp_pin_peer_pubkey(data, conn, sockindex, pubkey_ptr);
+ result = schannel_pkp_pin_peer_pubkey(cf, data, pubkey_ptr);
if(result) {
failf(data, "SSL: public key does not match pinned public key");
return result;
@@ -1606,11 +1579,17 @@ schannel_connect_step2(struct Curl_easy *data, struct connectdata *conn,
}
#ifdef HAS_MANUAL_VERIFY_API
- if(conn->ssl_config.verifypeer && backend->use_manual_cred_validation) {
- return Curl_verify_certificate(data, conn, sockindex);
+ if(conn_config->verifypeer && backend->use_manual_cred_validation) {
+ /* Certificate verification also verifies the hostname if verifyhost */
+ return Curl_verify_certificate(cf, data);
}
#endif
+ /* Verify the hostname manually when certificate verification is disabled,
+ because in that case Schannel won't verify it. */
+ if(!conn_config->verifypeer && conn_config->verifyhost)
+ return Curl_verify_host(cf, data);
+
return CURLE_OK;
}
@@ -1623,7 +1602,8 @@ valid_cert_encoding(const CERT_CONTEXT *cert_context)
(cert_context->cbCertEncoded > 0);
}
-typedef bool(*Read_crt_func)(const CERT_CONTEXT *ccert_context, void *arg);
+typedef bool(*Read_crt_func)(const CERT_CONTEXT *ccert_context,
+ bool reverse_order, void *arg);
static void
traverse_cert_store(const CERT_CONTEXT *context, Read_crt_func func,
@@ -1631,19 +1611,32 @@ traverse_cert_store(const CERT_CONTEXT *context, Read_crt_func func,
{
const CERT_CONTEXT *current_context = NULL;
bool should_continue = true;
+ bool first = true;
+ bool reverse_order = false;
while(should_continue &&
(current_context = CertEnumCertificatesInStore(
context->hCertStore,
- current_context)) != NULL)
- should_continue = func(current_context, arg);
+ current_context)) != NULL) {
+ /* Windows 11 22H2 OS Build 22621.674 or higher enumerates certificates in
+ leaf-to-root order while all previous versions of Windows enumerate
+ certificates in root-to-leaf order. Determine the order of enumeration
+ by comparing SECPKG_ATTR_REMOTE_CERT_CONTEXT's pbCertContext with the
+ first certificate's pbCertContext. */
+ if(first && context->pbCertEncoded != current_context->pbCertEncoded)
+ reverse_order = true;
+ should_continue = func(current_context, reverse_order, arg);
+ first = false;
+ }
if(current_context)
CertFreeCertificateContext(current_context);
}
static bool
-cert_counter_callback(const CERT_CONTEXT *ccert_context, void *certs_count)
+cert_counter_callback(const CERT_CONTEXT *ccert_context, bool reverse_order,
+ void *certs_count)
{
+ (void)reverse_order; /* unused */
if(valid_cert_encoding(ccert_context))
(*(int *)certs_count)++;
return true;
@@ -1658,14 +1651,16 @@ struct Adder_args
};
static bool
-add_cert_to_certinfo(const CERT_CONTEXT *ccert_context, void *raw_arg)
+add_cert_to_certinfo(const CERT_CONTEXT *ccert_context, bool reverse_order,
+ void *raw_arg)
{
struct Adder_args *args = (struct Adder_args*)raw_arg;
args->result = CURLE_OK;
if(valid_cert_encoding(ccert_context)) {
const char *beg = (const char *) ccert_context->pbCertEncoded;
const char *end = beg + ccert_context->cbCertEncoded;
- int insert_index = (args->certs_count - 1) - args->idx;
+ int insert_index = reverse_order ? (args->certs_count - 1) - args->idx :
+ args->idx;
args->result = Curl_extract_certinfo(args->data, insert_index,
beg, end);
args->idx++;
@@ -1674,28 +1669,25 @@ add_cert_to_certinfo(const CERT_CONTEXT *ccert_context, void *raw_arg)
}
static CURLcode
-schannel_connect_step3(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
+schannel_connect_step3(struct Curl_cfilter *cf, struct Curl_easy *data)
{
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct schannel_ssl_backend_data *backend =
+ (struct schannel_ssl_backend_data *)connssl->backend;
+ struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data);
CURLcode result = CURLE_OK;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
SECURITY_STATUS sspi_status = SEC_E_OK;
CERT_CONTEXT *ccert_context = NULL;
- bool isproxy = SSL_IS_PROXY();
-#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
- const char * const hostname = SSL_HOST_NAME();
-#endif
#ifdef HAS_ALPN
SecPkgContext_ApplicationProtocol alpn_result;
#endif
- struct ssl_backend_data *backend = connssl->backend;
DEBUGASSERT(ssl_connect_3 == connssl->connecting_state);
DEBUGASSERT(backend);
DEBUGF(infof(data,
- "schannel: SSL/TLS connection with %s port %hu (step 3/3)",
- hostname, conn->remote_port));
+ "schannel: SSL/TLS connection with %s port %d (step 3/3)",
+ connssl->peer.hostname, connssl->port));
if(!backend->cred)
return CURLE_SSL_CONNECT_ERROR;
@@ -1729,53 +1721,35 @@ schannel_connect_step3(struct Curl_easy *data, struct connectdata *conn,
if(alpn_result.ProtoNegoStatus ==
SecApplicationProtocolNegotiationStatus_Success) {
- unsigned char alpn = 0;
+ unsigned char prev_alpn = cf->conn->alpn;
- infof(data, VTLS_INFOF_ALPN_ACCEPTED_LEN_1STR,
- alpn_result.ProtocolIdSize, alpn_result.ProtocolId);
-
-#ifdef USE_HTTP2
- if(alpn_result.ProtocolIdSize == ALPN_H2_LENGTH &&
- !memcmp(ALPN_H2, alpn_result.ProtocolId, ALPN_H2_LENGTH)) {
- alpn = CURL_HTTP_VERSION_2;
- }
- else
-#endif
- if(alpn_result.ProtocolIdSize == ALPN_HTTP_1_1_LENGTH &&
- !memcmp(ALPN_HTTP_1_1, alpn_result.ProtocolId,
- ALPN_HTTP_1_1_LENGTH)) {
- alpn = CURL_HTTP_VERSION_1_1;
- }
+ Curl_alpn_set_negotiated(cf, data, alpn_result.ProtocolId,
+ alpn_result.ProtocolIdSize);
if(backend->recv_renegotiating) {
- if(alpn != conn->alpn) {
+ if(prev_alpn != cf->conn->alpn &&
+ prev_alpn != CURL_HTTP_VERSION_NONE) {
+ /* Renegotiation selected a different protocol now, we cannot
+ * deal with this */
failf(data, "schannel: server selected an ALPN protocol too late");
return CURLE_SSL_CONNECT_ERROR;
}
}
- else
- conn->alpn = alpn;
}
else {
if(!backend->recv_renegotiating)
- infof(data, VTLS_INFOF_NO_ALPN);
- }
-
- if(!backend->recv_renegotiating) {
- Curl_multiuse_state(data, conn->alpn == CURL_HTTP_VERSION_2 ?
- BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
+ Curl_alpn_set_negotiated(cf, data, NULL, 0);
}
}
#endif
- /* save the current session data for possible re-use */
- if(SSL_SET_OPTION(primary.sessionid)) {
+ /* save the current session data for possible reuse */
+ if(ssl_config->primary.sessionid) {
bool incache;
bool added = FALSE;
struct Curl_schannel_cred *old_cred = NULL;
Curl_ssl_sessionid_lock(data);
- incache = !(Curl_ssl_getsessionid(data, conn, isproxy, (void **)&old_cred,
- NULL, sockindex));
+ incache = !(Curl_ssl_getsessionid(cf, data, (void **)&old_cred, NULL));
if(incache) {
if(old_cred != backend->cred) {
DEBUGF(infof(data,
@@ -1786,9 +1760,9 @@ schannel_connect_step3(struct Curl_easy *data, struct connectdata *conn,
}
}
if(!incache) {
- result = Curl_ssl_addsessionid(data, conn, isproxy, backend->cred,
+ result = Curl_ssl_addsessionid(cf, data, backend->cred,
sizeof(struct Curl_schannel_cred),
- sockindex, &added);
+ &added);
if(result) {
Curl_ssl_sessionid_unlock(data);
failf(data, "schannel: failed to store credential handle");
@@ -1838,12 +1812,13 @@ schannel_connect_step3(struct Curl_easy *data, struct connectdata *conn,
}
static CURLcode
-schannel_connect_common(struct Curl_easy *data, struct connectdata *conn,
- int sockindex, bool nonblocking, bool *done)
+schannel_connect_common(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool nonblocking, bool *done)
{
CURLcode result;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- curl_socket_t sockfd = conn->sock[sockindex];
+ struct ssl_connect_data *connssl = cf->ctx;
+ curl_socket_t sockfd = Curl_conn_cf_get_socket(cf, data);
timediff_t timeout_ms;
int what;
@@ -1863,7 +1838,7 @@ schannel_connect_common(struct Curl_easy *data, struct connectdata *conn,
return CURLE_OPERATION_TIMEDOUT;
}
- result = schannel_connect_step1(data, conn, sockindex);
+ result = schannel_connect_step1(cf, data);
if(result)
return result;
}
@@ -1918,7 +1893,7 @@ schannel_connect_common(struct Curl_easy *data, struct connectdata *conn,
* ensuring that a client using select() or epoll() will always
* have a valid fdset to wait on.
*/
- result = schannel_connect_step2(data, conn, sockindex);
+ result = schannel_connect_step2(cf, data);
if(result || (nonblocking &&
(ssl_connect_2 == connssl->connecting_state ||
ssl_connect_2_reading == connssl->connecting_state ||
@@ -1928,22 +1903,13 @@ schannel_connect_common(struct Curl_easy *data, struct connectdata *conn,
} /* repeat step2 until all transactions are done. */
if(ssl_connect_3 == connssl->connecting_state) {
- result = schannel_connect_step3(data, conn, sockindex);
+ result = schannel_connect_step3(cf, data);
if(result)
return result;
}
if(ssl_connect_done == connssl->connecting_state) {
connssl->state = ssl_connection_complete;
- if(!connssl->backend->recv_renegotiating) {
- /* On renegotiation, we don't want to reset the existing recv/send
- * function pointers. They will have been set after the initial TLS
- * handshake was completed. If they were subsequently modified, as
- * is the case with HTTP/2, we don't want to override that change.
- */
- conn->recv[sockindex] = schannel_recv;
- conn->send[sockindex] = schannel_send;
- }
#ifdef SECPKG_ATTR_ENDPOINT_BINDINGS
/* When SSPI is used in combination with Schannel
@@ -1952,9 +1918,10 @@ schannel_connect_common(struct Curl_easy *data, struct connectdata *conn,
* Available on Windows 7 or later.
*/
{
- struct ssl_backend_data *backend = connssl->backend;
+ struct schannel_ssl_backend_data *backend =
+ (struct schannel_ssl_backend_data *)connssl->backend;
DEBUGASSERT(backend);
- conn->sslContext = &backend->ctxt->ctxt_handle;
+ cf->conn->sslContext = &backend->ctxt->ctxt_handle;
}
#endif
@@ -1970,19 +1937,19 @@ schannel_connect_common(struct Curl_easy *data, struct connectdata *conn,
}
static ssize_t
-schannel_send(struct Curl_easy *data, int sockindex,
+schannel_send(struct Curl_cfilter *cf, struct Curl_easy *data,
const void *buf, size_t len, CURLcode *err)
{
ssize_t written = -1;
size_t data_len = 0;
unsigned char *ptr = NULL;
- struct connectdata *conn = data->conn;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
+ struct ssl_connect_data *connssl = cf->ctx;
SecBuffer outbuf[4];
SecBufferDesc outbuf_desc;
SECURITY_STATUS sspi_status = SEC_E_OK;
CURLcode result;
- struct ssl_backend_data *backend = connssl->backend;
+ struct schannel_ssl_backend_data *backend =
+ (struct schannel_ssl_backend_data *)connssl->backend;
DEBUGASSERT(backend);
@@ -2068,7 +2035,7 @@ schannel_send(struct Curl_easy *data, int sockindex,
}
else if(!timeout_ms)
timeout_ms = TIMEDIFF_T_MAX;
- what = SOCKET_WRITABLE(conn->sock[sockindex], timeout_ms);
+ what = SOCKET_WRITABLE(Curl_conn_cf_get_socket(cf, data), timeout_ms);
if(what < 0) {
/* fatal error */
failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);
@@ -2085,8 +2052,9 @@ schannel_send(struct Curl_easy *data, int sockindex,
}
/* socket is writable */
- result = Curl_write_plain(data, conn->sock[sockindex], ptr + written,
- len - written, &this_write);
+ this_write = Curl_conn_cf_send(cf->next, data,
+ ptr + written, len - written,
+ &result);
if(result == CURLE_AGAIN)
continue;
else if(result != CURLE_OK) {
@@ -2116,13 +2084,12 @@ schannel_send(struct Curl_easy *data, int sockindex,
}
static ssize_t
-schannel_recv(struct Curl_easy *data, int sockindex,
+schannel_recv(struct Curl_cfilter *cf, struct Curl_easy *data,
char *buf, size_t len, CURLcode *err)
{
size_t size = 0;
ssize_t nread = -1;
- struct connectdata *conn = data->conn;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
+ struct ssl_connect_data *connssl = cf->ctx;
unsigned char *reallocated_buffer;
size_t reallocated_length;
bool done = FALSE;
@@ -2132,7 +2099,8 @@ schannel_recv(struct Curl_easy *data, int sockindex,
/* we want the length of the encrypted buffer to be at least large enough
that it can hold all the bytes requested and some TLS record overhead. */
size_t min_encdata_length = len + CURL_SCHANNEL_BUFFER_FREE_SIZE;
- struct ssl_backend_data *backend = connssl->backend;
+ struct schannel_ssl_backend_data *backend =
+ (struct schannel_ssl_backend_data *)connssl->backend;
DEBUGASSERT(backend);
@@ -2198,19 +2166,19 @@ schannel_recv(struct Curl_easy *data, int sockindex,
backend->encdata_offset, backend->encdata_length));
/* read encrypted data from socket */
- *err = Curl_read_plain(conn->sock[sockindex],
- (char *)(backend->encdata_buffer +
+ nread = Curl_conn_cf_recv(cf->next, data,
+ (char *)(backend->encdata_buffer +
backend->encdata_offset),
- size, &nread);
+ size, err);
if(*err) {
nread = -1;
if(*err == CURLE_AGAIN)
DEBUGF(infof(data,
- "schannel: Curl_read_plain returned CURLE_AGAIN"));
+ "schannel: recv returned CURLE_AGAIN"));
else if(*err == CURLE_RECV_ERROR)
- infof(data, "schannel: Curl_read_plain returned CURLE_RECV_ERROR");
+ infof(data, "schannel: recv returned CURLE_RECV_ERROR");
else
- infof(data, "schannel: Curl_read_plain returned error %d", *err);
+ infof(data, "schannel: recv returned error %d", *err);
}
else if(nread == 0) {
backend->recv_connection_closed = true;
@@ -2331,7 +2299,7 @@ schannel_recv(struct Curl_easy *data, int sockindex,
connssl->state = ssl_connection_negotiating;
connssl->connecting_state = ssl_connect_2_writing;
backend->recv_renegotiating = true;
- *err = schannel_connect_common(data, conn, sockindex, FALSE, &done);
+ *err = schannel_connect_common(cf, data, FALSE, &done);
backend->recv_renegotiating = false;
if(*err) {
infof(data, "schannel: renegotiation failed");
@@ -2380,7 +2348,7 @@ schannel_recv(struct Curl_easy *data, int sockindex,
"schannel: decrypted data buffer: offset %zu length %zu",
backend->decdata_offset, backend->decdata_length));
- cleanup:
+cleanup:
/* Warning- there is no guarantee the encdata state is valid at this point */
DEBUGF(infof(data, "schannel: schannel_recv cleanup"));
@@ -2439,20 +2407,20 @@ schannel_recv(struct Curl_easy *data, int sockindex,
return *err ? -1 : 0;
}
-static CURLcode schannel_connect_nonblocking(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex, bool *done)
+static CURLcode schannel_connect_nonblocking(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool *done)
{
- return schannel_connect_common(data, conn, sockindex, TRUE, done);
+ return schannel_connect_common(cf, data, TRUE, done);
}
-static CURLcode schannel_connect(struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
+static CURLcode schannel_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
CURLcode result;
bool done = FALSE;
- result = schannel_connect_common(data, conn, sockindex, FALSE, &done);
+ result = schannel_connect_common(cf, data, FALSE, &done);
if(result)
return result;
@@ -2461,15 +2429,17 @@ static CURLcode schannel_connect(struct Curl_easy *data,
return CURLE_OK;
}
-static bool schannel_data_pending(const struct connectdata *conn,
- int sockindex)
+static bool schannel_data_pending(struct Curl_cfilter *cf,
+ const struct Curl_easy *data)
{
- const struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ const struct ssl_connect_data *connssl = cf->ctx;
+ struct schannel_ssl_backend_data *backend =
+ (struct schannel_ssl_backend_data *)connssl->backend;
+ (void)data;
DEBUGASSERT(backend);
- if(connssl->use) /* SSL/TLS is in use */
+ if(backend->ctxt) /* SSL/TLS is in use */
return (backend->decdata_offset > 0 ||
(backend->encdata_offset > 0 && !backend->encdata_is_incomplete));
else
@@ -2500,25 +2470,25 @@ static void schannel_session_free(void *ptr)
/* shut down the SSL connection and clean up related memory.
this function can be called multiple times on the same connection including
if the SSL connection failed (eg connection made but failed handshake). */
-static int schannel_shutdown(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
+static int schannel_shutdown(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
/* See https://msdn.microsoft.com/en-us/library/windows/desktop/aa380138.aspx
* Shutting Down an Schannel Connection
*/
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- char * const hostname = SSL_HOST_NAME();
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct schannel_ssl_backend_data *backend =
+ (struct schannel_ssl_backend_data *)connssl->backend;
DEBUGASSERT(data);
DEBUGASSERT(backend);
- if(connssl->use) {
- infof(data, "schannel: shutting down SSL/TLS connection with %s port %hu",
- hostname, conn->remote_port);
+ if(backend->ctxt) {
+ infof(data, "schannel: shutting down SSL/TLS connection with %s port %d",
+ connssl->peer.hostname, connssl->port);
}
- if(connssl->use && backend->cred && backend->ctxt) {
+ if(backend->cred && backend->ctxt) {
SecBufferDesc BuffDesc;
SecBuffer Buffer;
SECURITY_STATUS sspi_status;
@@ -2559,10 +2529,9 @@ static int schannel_shutdown(struct Curl_easy *data, struct connectdata *conn,
if((sspi_status == SEC_E_OK) || (sspi_status == SEC_I_CONTEXT_EXPIRED)) {
/* send close message which is in output buffer */
- ssize_t written;
- result = Curl_write_plain(data, conn->sock[sockindex], outbuf.pvBuffer,
- outbuf.cbBuffer, &written);
-
+ ssize_t written = Curl_conn_cf_send(cf->next, data,
+ outbuf.pvBuffer, outbuf.cbBuffer,
+ &result);
s_pSecFn->FreeContextBuffer(outbuf.pvBuffer);
if((result != CURLE_OK) || (outbuf.cbBuffer != (size_t) written)) {
infof(data, "schannel: failed to send close msg: %s"
@@ -2604,14 +2573,9 @@ static int schannel_shutdown(struct Curl_easy *data, struct connectdata *conn,
return CURLE_OK;
}
-static void schannel_close(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
+static void schannel_close(struct Curl_cfilter *cf, struct Curl_easy *data)
{
- if(conn->ssl[sockindex].use)
- /* Curl_ssl_shutdown resets the socket state and calls schannel_shutdown */
- Curl_ssl_shutdown(data, conn, sockindex);
- else
- schannel_shutdown(data, conn, sockindex);
+ schannel_shutdown(cf, data);
}
static int schannel_init(void)
@@ -2639,12 +2603,13 @@ static CURLcode schannel_random(struct Curl_easy *data UNUSED_PARAM,
return Curl_win32_random(entropy, length);
}
-static CURLcode pkp_pin_peer_pubkey(struct Curl_easy *data,
- struct connectdata *conn, int sockindex,
- const char *pinnedpubkey)
+static CURLcode schannel_pkp_pin_peer_pubkey(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ const char *pinnedpubkey)
{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct schannel_ssl_backend_data *backend =
+ (struct schannel_ssl_backend_data *)connssl->backend;
CERT_CONTEXT *pCertContextServer = NULL;
/* Result is returned to caller */
@@ -2733,8 +2698,7 @@ static void schannel_checksum(const unsigned char *input,
if(!CryptCreateHash(hProv, algId, 0, 0, &hHash))
break; /* failed */
- /* workaround for original MinGW, should be (const BYTE*) */
- if(!CryptHashData(hHash, (BYTE*)input, (DWORD)inputlen, 0))
+ if(!CryptHashData(hHash, input, (DWORD)inputlen, 0))
break; /* failed */
/* get hash size */
@@ -2770,12 +2734,158 @@ static CURLcode schannel_sha256sum(const unsigned char *input,
static void *schannel_get_internals(struct ssl_connect_data *connssl,
CURLINFO info UNUSED_PARAM)
{
- struct ssl_backend_data *backend = connssl->backend;
+ struct schannel_ssl_backend_data *backend =
+ (struct schannel_ssl_backend_data *)connssl->backend;
(void)info;
DEBUGASSERT(backend);
return &backend->ctxt->ctxt_handle;
}
+HCERTSTORE Curl_schannel_get_cached_cert_store(struct Curl_cfilter *cf,
+ const struct Curl_easy *data)
+{
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
+ struct Curl_multi *multi = data->multi_easy ? data->multi_easy : data->multi;
+ const struct curl_blob *ca_info_blob = conn_config->ca_info_blob;
+ struct schannel_multi_ssl_backend_data *mbackend;
+ const struct ssl_general_config *cfg = &data->set.general_ssl;
+ timediff_t timeout_ms;
+ timediff_t elapsed_ms;
+ struct curltime now;
+ unsigned char info_blob_digest[CURL_SHA256_DIGEST_LENGTH];
+
+ DEBUGASSERT(multi);
+
+ if(!multi || !multi->ssl_backend_data) {
+ return NULL;
+ }
+
+ mbackend = (struct schannel_multi_ssl_backend_data *)multi->ssl_backend_data;
+ if(!mbackend->cert_store) {
+ return NULL;
+ }
+
+ /* zero ca_cache_timeout completely disables caching */
+ if(!cfg->ca_cache_timeout) {
+ return NULL;
+ }
+
+ /* check for cache timeout by using the cached_x509_store_expired timediff
+ calculation pattern from openssl.c.
+ negative timeout means retain forever. */
+ timeout_ms = cfg->ca_cache_timeout * (timediff_t)1000;
+ if(timeout_ms >= 0) {
+ now = Curl_now();
+ elapsed_ms = Curl_timediff(now, mbackend->time);
+ if(elapsed_ms >= timeout_ms) {
+ return NULL;
+ }
+ }
+
+ if(ca_info_blob) {
+ if(!mbackend->CAinfo_blob_digest) {
+ return NULL;
+ }
+ if(mbackend->CAinfo_blob_size != ca_info_blob->len) {
+ return NULL;
+ }
+ schannel_sha256sum((const unsigned char *)ca_info_blob->data,
+ ca_info_blob->len,
+ info_blob_digest,
+ CURL_SHA256_DIGEST_LENGTH);
+ if(memcmp(mbackend->CAinfo_blob_digest,
+ info_blob_digest,
+ CURL_SHA256_DIGEST_LENGTH)) {
+ return NULL;
+ }
+ }
+ else {
+ if(!conn_config->CAfile || !mbackend->CAfile ||
+ strcmp(mbackend->CAfile, conn_config->CAfile)) {
+ return NULL;
+ }
+ }
+
+ return mbackend->cert_store;
+}
+
+bool Curl_schannel_set_cached_cert_store(struct Curl_cfilter *cf,
+ const struct Curl_easy *data,
+ HCERTSTORE cert_store)
+{
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
+ struct Curl_multi *multi = data->multi_easy ? data->multi_easy : data->multi;
+ const struct curl_blob *ca_info_blob = conn_config->ca_info_blob;
+ struct schannel_multi_ssl_backend_data *mbackend;
+ unsigned char *CAinfo_blob_digest = NULL;
+ size_t CAinfo_blob_size = 0;
+ char *CAfile = NULL;
+
+ DEBUGASSERT(multi);
+
+ if(!multi) {
+ return false;
+ }
+
+ if(!multi->ssl_backend_data) {
+ multi->ssl_backend_data =
+ calloc(1, sizeof(struct schannel_multi_ssl_backend_data));
+ if(!multi->ssl_backend_data) {
+ return false;
+ }
+ }
+
+ mbackend = (struct schannel_multi_ssl_backend_data *)multi->ssl_backend_data;
+
+
+ if(ca_info_blob) {
+ CAinfo_blob_digest = malloc(CURL_SHA256_DIGEST_LENGTH);
+ if(!CAinfo_blob_digest) {
+ return false;
+ }
+ schannel_sha256sum((const unsigned char *)ca_info_blob->data,
+ ca_info_blob->len,
+ CAinfo_blob_digest,
+ CURL_SHA256_DIGEST_LENGTH);
+ CAinfo_blob_size = ca_info_blob->len;
+ }
+ else {
+ if(conn_config->CAfile) {
+ CAfile = strdup(conn_config->CAfile);
+ if(!CAfile) {
+ return false;
+ }
+ }
+ }
+
+ /* free old cache data */
+ if(mbackend->cert_store) {
+ CertCloseStore(mbackend->cert_store, 0);
+ }
+ free(mbackend->CAinfo_blob_digest);
+ free(mbackend->CAfile);
+
+ mbackend->time = Curl_now();
+ mbackend->cert_store = cert_store;
+ mbackend->CAinfo_blob_digest = CAinfo_blob_digest;
+ mbackend->CAinfo_blob_size = CAinfo_blob_size;
+ mbackend->CAfile = CAfile;
+ return true;
+}
+
+static void schannel_free_multi_ssl_backend_data(
+ struct multi_ssl_backend_data *msbd)
+{
+ struct schannel_multi_ssl_backend_data *mbackend =
+ (struct schannel_multi_ssl_backend_data*)msbd;
+ if(mbackend->cert_store) {
+ CertCloseStore(mbackend->cert_store, 0);
+ }
+ free(mbackend->CAinfo_blob_digest);
+ free(mbackend->CAfile);
+ free(mbackend);
+}
+
const struct Curl_ssl Curl_ssl_schannel = {
{ CURLSSLBACKEND_SCHANNEL, "schannel" }, /* info */
@@ -2784,9 +2894,10 @@ const struct Curl_ssl Curl_ssl_schannel = {
SSLSUPP_CAINFO_BLOB |
#endif
SSLSUPP_PINNEDPUBKEY |
- SSLSUPP_TLS13_CIPHERSUITES,
+ SSLSUPP_TLS13_CIPHERSUITES |
+ SSLSUPP_HTTPS_PROXY,
- sizeof(struct ssl_backend_data),
+ sizeof(struct schannel_ssl_backend_data),
schannel_init, /* init */
schannel_cleanup, /* cleanup */
@@ -2798,7 +2909,7 @@ const struct Curl_ssl Curl_ssl_schannel = {
Curl_none_cert_status_request, /* cert_status_request */
schannel_connect, /* connect */
schannel_connect_nonblocking, /* connect_nonblocking */
- Curl_ssl_getsock, /* getsock */
+ Curl_ssl_adjust_pollset, /* adjust_pollset */
schannel_get_internals, /* get_internals */
schannel_close, /* close_one */
Curl_none_close_all, /* close_all */
@@ -2809,7 +2920,10 @@ const struct Curl_ssl Curl_ssl_schannel = {
Curl_none_false_start, /* false_start */
schannel_sha256sum, /* sha256sum */
NULL, /* associate_connection */
- NULL /* disassociate_connection */
+ NULL, /* disassociate_connection */
+ schannel_free_multi_ssl_backend_data, /* free_multi_ssl_backend_data */
+ schannel_recv, /* recv decrypted data */
+ schannel_send, /* send data to encrypt */
};
#endif /* USE_SCHANNEL */
diff --git a/lib/vtls/schannel.h b/lib/vtls/schannel.h
index 24d7eff25..b26334bcf 100644
--- a/lib/vtls/schannel.h
+++ b/lib/vtls/schannel.h
@@ -7,8 +7,8 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2012, Marc Hoersken, <info@marc-hoersken.de>, et al.
- * Copyright (C) 2012 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Marc Hoersken, <info@marc-hoersken.de>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -28,8 +28,6 @@
#ifdef USE_SCHANNEL
-#define SCHANNEL_USE_BLACKLISTS 1
-
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable: 4201)
@@ -54,6 +52,7 @@
#include <schannel.h>
#include "curl_sspi.h"
+#include "cfilters.h"
#include "urldata.h"
/* <wincrypt.h> has been included via the above <schnlsp.h>.
@@ -69,7 +68,7 @@
* BoringSSL's <openssl/x509.h>: So just undefine those defines here
* (and only here).
*/
-#if defined(HAVE_BORINGSSL) || defined(OPENSSL_IS_BORINGSSL)
+#if defined(OPENSSL_IS_BORINGSSL)
# undef X509_NAME
# undef X509_CERT_PAIR
# undef X509_EXTENSIONS
@@ -77,124 +76,11 @@
extern const struct Curl_ssl Curl_ssl_schannel;
-CURLcode Curl_verify_certificate(struct Curl_easy *data,
- struct connectdata *conn, int sockindex);
-
-/* structs to expose only in schannel.c and schannel_verify.c */
-#ifdef EXPOSE_SCHANNEL_INTERNAL_STRUCTS
-
-#include <wincrypt.h>
-
-#ifdef __MINGW32__
-#ifdef __MINGW64_VERSION_MAJOR
-#define HAS_MANUAL_VERIFY_API
-#endif
-#else
-#ifdef CERT_CHAIN_REVOCATION_CHECK_CHAIN
-#define HAS_MANUAL_VERIFY_API
-#endif
-#endif
-
-#if defined(CryptStringToBinary) && defined(CRYPT_STRING_HEX) \
- && !defined(DISABLE_SCHANNEL_CLIENT_CERT)
-#define HAS_CLIENT_CERT_PATH
-#endif
-
-#ifndef SCH_CREDENTIALS_VERSION
-
-#define SCH_CREDENTIALS_VERSION 0x00000005
-
-typedef enum _eTlsAlgorithmUsage
-{
- TlsParametersCngAlgUsageKeyExchange,
- TlsParametersCngAlgUsageSignature,
- TlsParametersCngAlgUsageCipher,
- TlsParametersCngAlgUsageDigest,
- TlsParametersCngAlgUsageCertSig
-} eTlsAlgorithmUsage;
+CURLcode Curl_verify_host(struct Curl_cfilter *cf,
+ struct Curl_easy *data);
-typedef struct _CRYPTO_SETTINGS
-{
- eTlsAlgorithmUsage eAlgorithmUsage;
- UNICODE_STRING strCngAlgId;
- DWORD cChainingModes;
- PUNICODE_STRING rgstrChainingModes;
- DWORD dwMinBitLength;
- DWORD dwMaxBitLength;
-} CRYPTO_SETTINGS, * PCRYPTO_SETTINGS;
-
-typedef struct _TLS_PARAMETERS
-{
- DWORD cAlpnIds;
- PUNICODE_STRING rgstrAlpnIds;
- DWORD grbitDisabledProtocols;
- DWORD cDisabledCrypto;
- PCRYPTO_SETTINGS pDisabledCrypto;
- DWORD dwFlags;
-} TLS_PARAMETERS, * PTLS_PARAMETERS;
-
-typedef struct _SCH_CREDENTIALS
-{
- DWORD dwVersion;
- DWORD dwCredFormat;
- DWORD cCreds;
- PCCERT_CONTEXT* paCred;
- HCERTSTORE hRootStore;
-
- DWORD cMappers;
- struct _HMAPPER **aphMappers;
-
- DWORD dwSessionLifespan;
- DWORD dwFlags;
- DWORD cTlsParameters;
- PTLS_PARAMETERS pTlsParameters;
-} SCH_CREDENTIALS, * PSCH_CREDENTIALS;
-
-#define SCH_CRED_MAX_SUPPORTED_PARAMETERS 16
-#define SCH_CRED_MAX_SUPPORTED_ALPN_IDS 16
-#define SCH_CRED_MAX_SUPPORTED_CRYPTO_SETTINGS 16
-#define SCH_CRED_MAX_SUPPORTED_CHAINING_MODES 16
-
-#endif
-
-struct Curl_schannel_cred {
- CredHandle cred_handle;
- TimeStamp time_stamp;
- TCHAR *sni_hostname;
-#ifdef HAS_CLIENT_CERT_PATH
- HCERTSTORE client_cert_store;
-#endif
- int refcount;
-};
-
-struct Curl_schannel_ctxt {
- CtxtHandle ctxt_handle;
- TimeStamp time_stamp;
-};
-
-struct ssl_backend_data {
- struct Curl_schannel_cred *cred;
- struct Curl_schannel_ctxt *ctxt;
- SecPkgContext_StreamSizes stream_sizes;
- size_t encdata_length, decdata_length;
- size_t encdata_offset, decdata_offset;
- unsigned char *encdata_buffer, *decdata_buffer;
- /* encdata_is_incomplete: if encdata contains only a partial record that
- can't be decrypted without another Curl_read_plain (that is, status is
- SEC_E_INCOMPLETE_MESSAGE) then set this true. after Curl_read_plain writes
- more bytes into encdata then set this back to false. */
- bool encdata_is_incomplete;
- unsigned long req_flags, ret_flags;
- CURLcode recv_unrecoverable_err; /* schannel_recv had an unrecoverable err */
- bool recv_sspi_close_notify; /* true if connection closed by close_notify */
- bool recv_connection_closed; /* true if connection closed, regardless how */
- bool recv_renegotiating; /* true if recv is doing renegotiation */
- bool use_alpn; /* true if ALPN is used for this connection */
-#ifdef HAS_MANUAL_VERIFY_API
- bool use_manual_cred_validation; /* true if manual cred validation is used */
-#endif
-};
-#endif /* EXPOSE_SCHANNEL_INTERNAL_STRUCTS */
+CURLcode Curl_verify_certificate(struct Curl_cfilter *cf,
+ struct Curl_easy *data);
#endif /* USE_SCHANNEL */
#endif /* HEADER_CURL_SCHANNEL_H */
diff --git a/lib/vtls/schannel_int.h b/lib/vtls/schannel_int.h
new file mode 100644
index 000000000..fe7450d45
--- /dev/null
+++ b/lib/vtls/schannel_int.h
@@ -0,0 +1,170 @@
+#ifndef HEADER_CURL_SCHANNEL_INT_H
+#define HEADER_CURL_SCHANNEL_INT_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Marc Hoersken, <info@marc-hoersken.de>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+
+#ifdef USE_SCHANNEL
+
+#if defined(__MINGW32__) || defined(CERT_CHAIN_REVOCATION_CHECK_CHAIN)
+#define HAS_MANUAL_VERIFY_API
+#endif
+
+#if defined(CryptStringToBinary) && defined(CRYPT_STRING_HEX) \
+ && !defined(DISABLE_SCHANNEL_CLIENT_CERT)
+#define HAS_CLIENT_CERT_PATH
+#endif
+
+#ifndef CRYPT_DECODE_NOCOPY_FLAG
+#define CRYPT_DECODE_NOCOPY_FLAG 0x1
+#endif
+
+#ifndef CRYPT_DECODE_ALLOC_FLAG
+#define CRYPT_DECODE_ALLOC_FLAG 0x8000
+#endif
+
+#ifndef CERT_ALT_NAME_DNS_NAME
+#define CERT_ALT_NAME_DNS_NAME 3
+#endif
+
+#ifndef CERT_ALT_NAME_IP_ADDRESS
+#define CERT_ALT_NAME_IP_ADDRESS 8
+#endif
+
+
+#ifndef SCH_CREDENTIALS_VERSION
+
+#define SCH_CREDENTIALS_VERSION 0x00000005
+
+typedef enum _eTlsAlgorithmUsage
+{
+ TlsParametersCngAlgUsageKeyExchange,
+ TlsParametersCngAlgUsageSignature,
+ TlsParametersCngAlgUsageCipher,
+ TlsParametersCngAlgUsageDigest,
+ TlsParametersCngAlgUsageCertSig
+} eTlsAlgorithmUsage;
+
+typedef struct _CRYPTO_SETTINGS
+{
+ eTlsAlgorithmUsage eAlgorithmUsage;
+ UNICODE_STRING strCngAlgId;
+ DWORD cChainingModes;
+ PUNICODE_STRING rgstrChainingModes;
+ DWORD dwMinBitLength;
+ DWORD dwMaxBitLength;
+} CRYPTO_SETTINGS, * PCRYPTO_SETTINGS;
+
+typedef struct _TLS_PARAMETERS
+{
+ DWORD cAlpnIds;
+ PUNICODE_STRING rgstrAlpnIds;
+ DWORD grbitDisabledProtocols;
+ DWORD cDisabledCrypto;
+ PCRYPTO_SETTINGS pDisabledCrypto;
+ DWORD dwFlags;
+} TLS_PARAMETERS, * PTLS_PARAMETERS;
+
+typedef struct _SCH_CREDENTIALS
+{
+ DWORD dwVersion;
+ DWORD dwCredFormat;
+ DWORD cCreds;
+ PCCERT_CONTEXT* paCred;
+ HCERTSTORE hRootStore;
+
+ DWORD cMappers;
+ struct _HMAPPER **aphMappers;
+
+ DWORD dwSessionLifespan;
+ DWORD dwFlags;
+ DWORD cTlsParameters;
+ PTLS_PARAMETERS pTlsParameters;
+} SCH_CREDENTIALS, * PSCH_CREDENTIALS;
+
+#define SCH_CRED_MAX_SUPPORTED_PARAMETERS 16
+#define SCH_CRED_MAX_SUPPORTED_ALPN_IDS 16
+#define SCH_CRED_MAX_SUPPORTED_CRYPTO_SETTINGS 16
+#define SCH_CRED_MAX_SUPPORTED_CHAINING_MODES 16
+
+#endif /* SCH_CREDENTIALS_VERSION */
+
+struct Curl_schannel_cred {
+ CredHandle cred_handle;
+ TimeStamp time_stamp;
+ TCHAR *sni_hostname;
+#ifdef HAS_CLIENT_CERT_PATH
+ HCERTSTORE client_cert_store;
+#endif
+ int refcount;
+};
+
+struct Curl_schannel_ctxt {
+ CtxtHandle ctxt_handle;
+ TimeStamp time_stamp;
+};
+
+struct schannel_ssl_backend_data {
+ struct Curl_schannel_cred *cred;
+ struct Curl_schannel_ctxt *ctxt;
+ SecPkgContext_StreamSizes stream_sizes;
+ size_t encdata_length, decdata_length;
+ size_t encdata_offset, decdata_offset;
+ unsigned char *encdata_buffer, *decdata_buffer;
+ /* encdata_is_incomplete: if encdata contains only a partial record that
+ can't be decrypted without another recv() (that is, status is
+ SEC_E_INCOMPLETE_MESSAGE) then set this true. after an recv() adds
+ more bytes into encdata then set this back to false. */
+ bool encdata_is_incomplete;
+ unsigned long req_flags, ret_flags;
+ CURLcode recv_unrecoverable_err; /* schannel_recv had an unrecoverable err */
+ bool recv_sspi_close_notify; /* true if connection closed by close_notify */
+ bool recv_connection_closed; /* true if connection closed, regardless how */
+ bool recv_renegotiating; /* true if recv is doing renegotiation */
+ bool use_alpn; /* true if ALPN is used for this connection */
+#ifdef HAS_MANUAL_VERIFY_API
+ bool use_manual_cred_validation; /* true if manual cred validation is used */
+#endif
+};
+
+struct schannel_multi_ssl_backend_data {
+ unsigned char *CAinfo_blob_digest; /* CA info blob digest */
+ size_t CAinfo_blob_size; /* CA info blob size */
+ char *CAfile; /* CAfile path used to generate
+ certificate store */
+ HCERTSTORE cert_store; /* cached certificate store or
+ NULL if none */
+ struct curltime time; /* when the cached store was created */
+};
+
+HCERTSTORE Curl_schannel_get_cached_cert_store(struct Curl_cfilter *cf,
+ const struct Curl_easy *data);
+
+bool Curl_schannel_set_cached_cert_store(struct Curl_cfilter *cf,
+ const struct Curl_easy *data,
+ HCERTSTORE cert_store);
+
+#endif /* USE_SCHANNEL */
+#endif /* HEADER_CURL_SCHANNEL_INT_H */
diff --git a/lib/vtls/schannel_verify.c b/lib/vtls/schannel_verify.c
index 1ac1d3eaf..e7c8bc66b 100644
--- a/lib/vtls/schannel_verify.c
+++ b/lib/vtls/schannel_verify.c
@@ -5,9 +5,9 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2012 - 2016, Marc Hoersken, <info@marc-hoersken.de>
- * Copyright (C) 2012, Mark Salisbury, <mark.salisbury@hp.com>
- * Copyright (C) 2012 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Marc Hoersken, <info@marc-hoersken.de>
+ * Copyright (C) Mark Salisbury, <mark.salisbury@hp.com>
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -36,12 +36,11 @@
# error "Can't compile SCHANNEL support without SSPI."
#endif
-#define EXPOSE_SCHANNEL_INTERNAL_STRUCTS
#include "schannel.h"
-
-#ifdef HAS_MANUAL_VERIFY_API
+#include "schannel_int.h"
#include "vtls.h"
+#include "vtls_int.h"
#include "sendf.h"
#include "strerror.h"
#include "curl_multibyte.h"
@@ -53,7 +52,10 @@
#include "curl_memory.h"
#include "memdebug.h"
-#define BACKEND connssl->backend
+#define BACKEND ((struct schannel_ssl_backend_data *)connssl->backend)
+
+
+#ifdef HAS_MANUAL_VERIFY_API
#define MAX_CAFILE_SIZE 1048576 /* 1 MiB */
#define BEGIN_CERT "-----BEGIN CERTIFICATE-----"
@@ -329,6 +331,8 @@ cleanup:
return result;
}
+#endif /* HAS_MANUAL_VERIFY_API */
+
/*
* Returns the number of characters necessary to populate all the host_names.
* If host_names is not NULL, populate it with all the host names. Each string
@@ -352,10 +356,10 @@ static DWORD cert_get_name_string(struct Curl_easy *data,
LPTSTR current_pos = NULL;
DWORD i;
+#ifdef CERT_NAME_SEARCH_ALL_NAMES_FLAG
/* CERT_NAME_SEARCH_ALL_NAMES_FLAG is available from Windows 8 onwards. */
if(curlx_verify_windows_version(6, 2, 0, PLATFORM_WINNT,
VERSION_GREATER_THAN_EQUAL)) {
-#ifdef CERT_NAME_SEARCH_ALL_NAMES_FLAG
/* CertGetNameString will provide the 8-bit character string without
* any decoding */
DWORD name_flags =
@@ -367,8 +371,8 @@ static DWORD cert_get_name_string(struct Curl_easy *data,
host_names,
length);
return actual_length;
-#endif
}
+#endif
compute_content = host_names != NULL && length != 0;
@@ -456,17 +460,34 @@ static DWORD cert_get_name_string(struct Curl_easy *data,
return actual_length;
}
-static CURLcode verify_host(struct Curl_easy *data,
- CERT_CONTEXT *pCertContextServer,
- const char * const conn_hostname)
+/* Verify the server's hostname */
+CURLcode Curl_verify_host(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
+ struct ssl_connect_data *connssl = cf->ctx;
+ SECURITY_STATUS sspi_status;
CURLcode result = CURLE_PEER_FAILED_VERIFICATION;
+ CERT_CONTEXT *pCertContextServer = NULL;
TCHAR *cert_hostname_buff = NULL;
size_t cert_hostname_buff_index = 0;
+ const char *conn_hostname = connssl->peer.hostname;
size_t hostlen = strlen(conn_hostname);
DWORD len = 0;
DWORD actual_len = 0;
+ sspi_status =
+ s_pSecFn->QueryContextAttributes(&BACKEND->ctxt->ctxt_handle,
+ SECPKG_ATTR_REMOTE_CERT_CONTEXT,
+ &pCertContextServer);
+
+ if((sspi_status != SEC_E_OK) || !pCertContextServer) {
+ char buffer[STRERROR_LEN];
+ failf(data, "schannel: Failed to read remote certificate context: %s",
+ Curl_sspi_strerror(sspi_status, buffer, sizeof(buffer)));
+ result = CURLE_PEER_FAILED_VERIFICATION;
+ goto cleanup;
+ }
+
/* Determine the size of the string needed for the cert hostname */
len = cert_get_name_string(data, pCertContextServer, NULL, 0);
if(len == 0) {
@@ -497,10 +518,9 @@ static CURLcode verify_host(struct Curl_easy *data,
goto cleanup;
}
- /* If HAVE_CERT_NAME_SEARCH_ALL_NAMES is available, the output
- * will contain all DNS names, where each name is null-terminated
- * and the last DNS name is double null-terminated. Due to this
- * encoding, use the length of the buffer to iterate over all names.
+ /* cert_hostname_buff contains all DNS names, where each name is
+ * null-terminated and the last DNS name is double null-terminated. Due to
+ * this encoding, use the length of the buffer to iterate over all names.
*/
result = CURLE_PEER_FAILED_VERIFICATION;
while(cert_hostname_buff_index < len &&
@@ -559,20 +579,28 @@ static CURLcode verify_host(struct Curl_easy *data,
cleanup:
Curl_safefree(cert_hostname_buff);
+ if(pCertContextServer)
+ CertFreeCertificateContext(pCertContextServer);
+
return result;
}
-CURLcode Curl_verify_certificate(struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
+
+#ifdef HAS_MANUAL_VERIFY_API
+/* Verify the server's certificate and hostname */
+CURLcode Curl_verify_certificate(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
+ struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data);
SECURITY_STATUS sspi_status;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
CURLcode result = CURLE_OK;
CERT_CONTEXT *pCertContextServer = NULL;
const CERT_CHAIN_CONTEXT *pChainContext = NULL;
HCERTCHAINENGINE cert_chain_engine = NULL;
HCERTSTORE trust_store = NULL;
- const char * const conn_hostname = SSL_HOST_NAME();
+ HCERTSTORE own_trust_store = NULL;
DEBUGASSERT(BACKEND);
@@ -589,7 +617,7 @@ CURLcode Curl_verify_certificate(struct Curl_easy *data,
}
if(result == CURLE_OK &&
- (SSL_CONN_CONFIG(CAfile) || SSL_CONN_CONFIG(ca_info_blob)) &&
+ (conn_config->CAfile || conn_config->ca_info_blob) &&
BACKEND->use_manual_cred_validation) {
/*
* Create a chain engine that uses the certificates in the CA file as
@@ -603,31 +631,46 @@ CURLcode Curl_verify_certificate(struct Curl_easy *data,
result = CURLE_SSL_CACERT_BADFILE;
}
else {
- /* Open the certificate store */
- trust_store = CertOpenStore(CERT_STORE_PROV_MEMORY,
- 0,
- (HCRYPTPROV)NULL,
- CERT_STORE_CREATE_NEW_FLAG,
- NULL);
- if(!trust_store) {
- char buffer[STRERROR_LEN];
- failf(data, "schannel: failed to create certificate store: %s",
- Curl_winapi_strerror(GetLastError(), buffer, sizeof(buffer)));
- result = CURLE_SSL_CACERT_BADFILE;
+ /* try cache */
+ trust_store = Curl_schannel_get_cached_cert_store(cf, data);
+
+ if(trust_store) {
+ infof(data, "schannel: reusing certificate store from cache");
}
else {
- const struct curl_blob *ca_info_blob = SSL_CONN_CONFIG(ca_info_blob);
- if(ca_info_blob) {
- result = add_certs_data_to_store(trust_store,
- (const char *)ca_info_blob->data,
- ca_info_blob->len,
- "(memory blob)",
- data);
+ /* Open the certificate store */
+ trust_store = CertOpenStore(CERT_STORE_PROV_MEMORY,
+ 0,
+ (HCRYPTPROV)NULL,
+ CERT_STORE_CREATE_NEW_FLAG,
+ NULL);
+ if(!trust_store) {
+ char buffer[STRERROR_LEN];
+ failf(data, "schannel: failed to create certificate store: %s",
+ Curl_winapi_strerror(GetLastError(), buffer, sizeof(buffer)));
+ result = CURLE_SSL_CACERT_BADFILE;
}
else {
- result = add_certs_file_to_store(trust_store,
- SSL_CONN_CONFIG(CAfile),
- data);
+ const struct curl_blob *ca_info_blob = conn_config->ca_info_blob;
+ own_trust_store = trust_store;
+
+ if(ca_info_blob) {
+ result = add_certs_data_to_store(trust_store,
+ (const char *)ca_info_blob->data,
+ ca_info_blob->len,
+ "(memory blob)",
+ data);
+ }
+ else {
+ result = add_certs_file_to_store(trust_store,
+ conn_config->CAfile,
+ data);
+ }
+ if(result == CURLE_OK) {
+ if(Curl_schannel_set_cached_cert_store(cf, data, trust_store)) {
+ own_trust_store = NULL;
+ }
+ }
}
}
}
@@ -669,7 +712,7 @@ CURLcode Curl_verify_certificate(struct Curl_easy *data,
NULL,
pCertContextServer->hCertStore,
&ChainPara,
- (SSL_SET_OPTION(no_revoke) ? 0 :
+ (ssl_config->no_revoke ? 0 :
CERT_CHAIN_REVOCATION_CHECK_CHAIN),
NULL,
&pChainContext)) {
@@ -718,8 +761,8 @@ CURLcode Curl_verify_certificate(struct Curl_easy *data,
}
if(result == CURLE_OK) {
- if(SSL_CONN_CONFIG(verifyhost)) {
- result = verify_host(data, pCertContextServer, conn_hostname);
+ if(conn_config->verifyhost) {
+ result = Curl_verify_host(cf, data);
}
}
@@ -727,8 +770,8 @@ CURLcode Curl_verify_certificate(struct Curl_easy *data,
CertFreeCertificateChainEngine(cert_chain_engine);
}
- if(trust_store) {
- CertCloseStore(trust_store, 0);
+ if(own_trust_store) {
+ CertCloseStore(own_trust_store, 0);
}
if(pChainContext)
diff --git a/lib/vtls/sectransp.c b/lib/vtls/sectransp.c
index c764e3631..0a22ff60b 100644
--- a/lib/vtls/sectransp.c
+++ b/lib/vtls/sectransp.c
@@ -5,8 +5,8 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2012 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- * Copyright (C) 2012 - 2017, Nick Zitzmann, <nickzman@gmail.com>.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Nick Zitzmann, <nickzman@gmail.com>.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -45,6 +45,13 @@
#pragma clang diagnostic ignored "-Wtautological-pointer-compare"
#endif /* __clang__ */
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Waddress"
+#pragma GCC diagnostic ignored "-Wundef"
+#pragma GCC diagnostic ignored "-Wunreachable-code"
+#endif
+
#include <limits.h>
#include <Security/Security.h>
@@ -122,12 +129,12 @@
#include <sys/sysctl.h>
#endif /* CURL_BUILD_MAC */
-#include "urldata.h"
#include "sendf.h"
#include "inet_pton.h"
#include "connect.h"
#include "select.h"
#include "vtls.h"
+#include "vtls_int.h"
#include "sectransp.h"
#include "curl_printf.h"
#include "strdup.h"
@@ -136,13 +143,13 @@
/* The last #include file should be: */
#include "memdebug.h"
+
/* From MacTypes.h (which we can't include because it isn't present in iOS: */
#define ioErr -36
#define paramErr -50
-struct ssl_backend_data {
+struct st_ssl_backend_data {
SSLContextRef ssl_ctx;
- curl_socket_t ssl_sockfd;
bool ssl_direction; /* true if writing, false if reading */
size_t ssl_write_buffered_length;
};
@@ -234,7 +241,7 @@ struct st_cipher {
insert in between existing items to appropriate place based on
cipher suite IANA number
*/
-const static struct st_cipher ciphertable[] = {
+static const struct st_cipher ciphertable[] = {
/* SSL version 3.0 and initial TLS 1.0 cipher suites.
Defined since SDK 10.2.8 */
CIPHER_DEF_SSLTLS(NULL_WITH_NULL_NULL, /* 0x0000 */
@@ -825,116 +832,78 @@ static const unsigned char ecDsaSecp384r1SpkiHeader[] = {
#endif /* SECTRANSP_PINNEDPUBKEY_V1 */
#endif /* SECTRANSP_PINNEDPUBKEY */
-/* The following two functions were ripped from Apple sample code,
- * with some modifications: */
-static OSStatus SocketRead(SSLConnectionRef connection,
- void *data, /* owned by
- * caller, data
- * RETURNED */
- size_t *dataLength) /* IN/OUT */
+static OSStatus sectransp_bio_cf_in_read(SSLConnectionRef connection,
+ void *buf,
+ size_t *dataLength) /* IN/OUT */
{
- size_t bytesToGo = *dataLength;
- size_t initLen = bytesToGo;
- UInt8 *currData = (UInt8 *)data;
- /*int sock = *(int *)connection;*/
- struct ssl_connect_data *connssl = (struct ssl_connect_data *)connection;
- struct ssl_backend_data *backend = connssl->backend;
- int sock;
+ struct Curl_cfilter *cf = (struct Curl_cfilter *)connection;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct st_ssl_backend_data *backend =
+ (struct st_ssl_backend_data *)connssl->backend;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+ ssize_t nread;
+ CURLcode result;
OSStatus rtn = noErr;
- size_t bytesRead;
- ssize_t rrtn;
- int theErr;
-
- DEBUGASSERT(backend);
- sock = backend->ssl_sockfd;
- *dataLength = 0;
-
- for(;;) {
- bytesRead = 0;
- rrtn = read(sock, currData, bytesToGo);
- if(rrtn <= 0) {
- /* this is guesswork... */
- theErr = errno;
- if(rrtn == 0) { /* EOF = server hung up */
- /* the framework will turn this into errSSLClosedNoNotify */
- rtn = errSSLClosedGraceful;
- }
- else /* do the switch */
- switch(theErr) {
- case ENOENT:
- /* connection closed */
- rtn = errSSLClosedGraceful;
- break;
- case ECONNRESET:
- rtn = errSSLClosedAbort;
- break;
- case EAGAIN:
- rtn = errSSLWouldBlock;
- backend->ssl_direction = false;
- break;
- default:
- rtn = ioErr;
- break;
- }
- break;
- }
- else {
- bytesRead = rrtn;
- }
- bytesToGo -= bytesRead;
- currData += bytesRead;
- if(bytesToGo == 0) {
- /* filled buffer with incoming data, done */
- break;
+ DEBUGASSERT(data);
+ nread = Curl_conn_cf_recv(cf->next, data, buf, *dataLength, &result);
+ CURL_TRC_CF(data, cf, "bio_read(len=%zu) -> %zd, result=%d",
+ *dataLength, nread, result);
+ if(nread < 0) {
+ switch(result) {
+ case CURLE_OK:
+ case CURLE_AGAIN:
+ rtn = errSSLWouldBlock;
+ backend->ssl_direction = false;
+ break;
+ default:
+ rtn = ioErr;
+ break;
}
+ nread = 0;
}
- *dataLength = initLen - bytesToGo;
-
+ else if(nread == 0) {
+ rtn = errSSLClosedGraceful;
+ }
+ else if((size_t)nread < *dataLength) {
+ rtn = errSSLWouldBlock;
+ }
+ *dataLength = nread;
return rtn;
}
-static OSStatus SocketWrite(SSLConnectionRef connection,
- const void *data,
- size_t *dataLength) /* IN/OUT */
+static OSStatus sectransp_bio_cf_out_write(SSLConnectionRef connection,
+ const void *buf,
+ size_t *dataLength) /* IN/OUT */
{
- size_t bytesSent = 0;
- /*int sock = *(int *)connection;*/
- struct ssl_connect_data *connssl = (struct ssl_connect_data *)connection;
- struct ssl_backend_data *backend = connssl->backend;
- int sock;
- ssize_t length;
- size_t dataLen = *dataLength;
- const UInt8 *dataPtr = (UInt8 *)data;
- OSStatus ortn;
- int theErr;
-
- DEBUGASSERT(backend);
- sock = backend->ssl_sockfd;
- *dataLength = 0;
+ struct Curl_cfilter *cf = (struct Curl_cfilter *)connection;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct st_ssl_backend_data *backend =
+ (struct st_ssl_backend_data *)connssl->backend;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+ ssize_t nwritten;
+ CURLcode result;
+ OSStatus rtn = noErr;
- do {
- length = write(sock,
- (char *)dataPtr + bytesSent,
- dataLen - bytesSent);
- } while((length > 0) &&
- ( (bytesSent += length) < dataLen) );
-
- if(length <= 0) {
- theErr = errno;
- if(theErr == EAGAIN) {
- ortn = errSSLWouldBlock;
+ DEBUGASSERT(data);
+ nwritten = Curl_conn_cf_send(cf->next, data, buf, *dataLength, &result);
+ CURL_TRC_CF(data, cf, "bio_send(len=%zu) -> %zd, result=%d",
+ *dataLength, nwritten, result);
+ if(nwritten <= 0) {
+ if(result == CURLE_AGAIN) {
+ rtn = errSSLWouldBlock;
backend->ssl_direction = true;
}
else {
- ortn = ioErr;
+ rtn = ioErr;
}
+ nwritten = 0;
}
- else {
- ortn = noErr;
+ else if((size_t)nwritten < *dataLength) {
+ rtn = errSSLWouldBlock;
}
- *dataLength = bytesSent;
- return ortn;
+ *dataLength = nwritten;
+ return rtn;
}
#ifndef CURL_DISABLE_VERBOSE_STRINGS
@@ -943,12 +912,12 @@ CF_INLINE const char *TLSCipherNameForNumber(SSLCipherSuite cipher)
/* The first ciphers in the ciphertable are continuous. Here we do small
optimization and instead of loop directly get SSL name by cipher number.
*/
+ size_t i;
if(cipher <= SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA) {
return ciphertable[cipher].name;
}
/* Iterate through the rest of the ciphers */
- for(size_t i = SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA + 1;
- i < NUM_OF_CIPHERS;
+ for(i = SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA + 1; i < NUM_OF_CIPHERS;
++i) {
if(ciphertable[i].num == cipher) {
return ciphertable[i].name;
@@ -1046,7 +1015,7 @@ static CURLcode CopyCertSubject(struct Curl_easy *data,
}
else {
size_t cbuf_size = ((size_t)CFStringGetLength(c) * 4) + 1;
- cbuf = calloc(cbuf_size, 1);
+ cbuf = calloc(1, cbuf_size);
if(cbuf) {
if(!CFStringGetCString(c, cbuf, cbuf_size,
kCFStringEncodingUTF8)) {
@@ -1119,7 +1088,6 @@ static OSStatus CopyIdentityWithLabel(char *label,
CFArrayRef keys_list;
CFIndex keys_list_count;
CFIndex i;
- CFStringRef common_name;
/* SecItemCopyMatching() was introduced in iOS and Snow Leopard.
kSecClassIdentity was introduced in Lion. If both exist, let's use them
@@ -1167,6 +1135,7 @@ static OSStatus CopyIdentityWithLabel(char *label,
(SecIdentityRef) CFArrayGetValueAtIndex(keys_list, i);
err = SecIdentityCopyCertificate(identity, &cert);
if(err == noErr) {
+ CFStringRef common_name = NULL;
OSStatus copy_status = noErr;
#if CURL_BUILD_IOS
common_name = SecCertificateCopySubjectSummary(cert);
@@ -1182,7 +1151,8 @@ static OSStatus CopyIdentityWithLabel(char *label,
status = noErr;
break;
}
- CFRelease(common_name);
+ if(common_name)
+ CFRelease(common_name);
}
CFRelease(cert);
}
@@ -1326,7 +1296,7 @@ static OSStatus CopyIdentityFromPKCS12File(const char *cPath,
/* This code was borrowed from nss.c, with some modifications:
* Determine whether the nickname passed in is a filename that needs to
- * be loaded as a PEM or a regular NSS nickname.
+ * be loaded as a PEM or a nickname.
*
* returns 1 for a file
* returns 0 for not a file
@@ -1372,14 +1342,15 @@ static CURLcode sectransp_version_from_curl(SSLProtocol *darwinver,
}
#endif
-static CURLcode
-set_ssl_version_min_max(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
+static CURLcode set_ssl_version_min_max(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
- long ssl_version = SSL_CONN_CONFIG(version);
- long ssl_version_max = SSL_CONN_CONFIG(version_max);
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct st_ssl_backend_data *backend =
+ (struct st_ssl_backend_data *)connssl->backend;
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
+ long ssl_version = conn_config->version;
+ long ssl_version_max = conn_config->version_max;
long max_supported_version_by_os;
DEBUGASSERT(backend);
@@ -1472,7 +1443,8 @@ set_ssl_version_min_max(struct Curl_easy *data, struct connectdata *conn,
static bool is_cipher_suite_strong(SSLCipherSuite suite_num)
{
- for(size_t i = 0; i < NUM_OF_CIPHERS; ++i) {
+ size_t i;
+ for(i = 0; i < NUM_OF_CIPHERS; ++i) {
if(ciphertable[i].num == suite_num) {
return !ciphertable[i].weak;
}
@@ -1588,16 +1560,17 @@ static CURLcode sectransp_set_selected_ciphers(struct Curl_easy *data,
size_t cipher_len = 0;
const char *cipher_end = NULL;
bool tls_name = FALSE;
+ size_t i;
/* Skip separators */
while(is_separator(*cipher_start))
- cipher_start++;
+ cipher_start++;
if(*cipher_start == '\0') {
break;
}
/* Find last position of a cipher in the ciphers string */
cipher_end = cipher_start;
- while (*cipher_end != '\0' && !is_separator(*cipher_end)) {
+ while(*cipher_end != '\0' && !is_separator(*cipher_end)) {
++cipher_end;
}
@@ -1611,7 +1584,7 @@ static CURLcode sectransp_set_selected_ciphers(struct Curl_easy *data,
/* Iterate through the cipher table and look for the cipher, starting
the cipher number 0x01 because the 0x00 is not the real cipher */
cipher_len = cipher_end - cipher_start;
- for(size_t i = 1; i < NUM_OF_CIPHERS; ++i) {
+ for(i = 1; i < NUM_OF_CIPHERS; ++i) {
const char *table_cipher_name = NULL;
if(tls_name) {
table_cipher_name = ciphertable[i].name;
@@ -1641,7 +1614,7 @@ static CURLcode sectransp_set_selected_ciphers(struct Curl_easy *data,
The message is a bit cryptic and longer than necessary but can be
understood by humans. */
failf(data, "SSL: cipher string \"%s\" contains unsupported cipher name"
- " starting position %d and ending position %d",
+ " starting position %zd and ending position %zd",
ciphers,
cipher_start - ciphers,
cipher_end - ciphers);
@@ -1665,28 +1638,21 @@ static CURLcode sectransp_set_selected_ciphers(struct Curl_easy *data,
return CURLE_OK;
}
-static CURLcode sectransp_connect_step1(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex)
+static CURLcode sectransp_connect_step1(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
- curl_socket_t sockfd = conn->sock[sockindex];
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
- const struct curl_blob *ssl_cablob = SSL_CONN_CONFIG(ca_info_blob);
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct st_ssl_backend_data *backend =
+ (struct st_ssl_backend_data *)connssl->backend;
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
+ struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data);
+ const struct curl_blob *ssl_cablob = conn_config->ca_info_blob;
const char * const ssl_cafile =
/* CURLOPT_CAINFO_BLOB overrides CURLOPT_CAINFO */
- (ssl_cablob ? NULL : SSL_CONN_CONFIG(CAfile));
- const bool verifypeer = SSL_CONN_CONFIG(verifypeer);
- char * const ssl_cert = SSL_SET_OPTION(primary.clientcert);
- const struct curl_blob *ssl_cert_blob = SSL_SET_OPTION(primary.cert_blob);
- bool isproxy = SSL_IS_PROXY();
- const char * const hostname = SSL_HOST_NAME();
- const long int port = SSL_HOST_PORT();
-#ifdef ENABLE_IPV6
- struct in6_addr addr;
-#else
- struct in_addr addr;
-#endif /* ENABLE_IPV6 */
+ (ssl_cablob ? NULL : conn_config->CAfile);
+ const bool verifypeer = conn_config->verifypeer;
+ char * const ssl_cert = ssl_config->primary.clientcert;
+ const struct curl_blob *ssl_cert_blob = ssl_config->primary.cert_blob;
char *ciphers;
OSStatus err = noErr;
#if CURL_BUILD_MAC
@@ -1694,6 +1660,7 @@ static CURLcode sectransp_connect_step1(struct Curl_easy *data,
DEBUGASSERT(backend);
+ CURL_TRC_CF(data, cf, "connect_step1");
GetDarwinVersionNumber(&darwinver_maj, &darwinver_min);
#endif /* CURL_BUILD_MAC */
@@ -1733,7 +1700,7 @@ static CURLcode sectransp_connect_step1(struct Curl_easy *data,
/* check to see if we've been told to use an explicit SSL/TLS version */
#if CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS
if(SSLSetProtocolVersionMax) {
- switch(conn->ssl_config.version) {
+ switch(conn_config->version) {
case CURL_SSLVERSION_TLSv1:
(void)SSLSetProtocolVersionMin(backend->ssl_ctx, kTLSProtocol1);
#if (CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11) && HAVE_BUILTIN_AVAILABLE == 1
@@ -1754,7 +1721,7 @@ static CURLcode sectransp_connect_step1(struct Curl_easy *data,
case CURL_SSLVERSION_TLSv1_2:
case CURL_SSLVERSION_TLSv1_3:
{
- CURLcode result = set_ssl_version_min_max(data, conn, sockindex);
+ CURLcode result = set_ssl_version_min_max(cf, data);
if(result != CURLE_OK)
return result;
break;
@@ -1773,7 +1740,7 @@ static CURLcode sectransp_connect_step1(struct Curl_easy *data,
(void)SSLSetProtocolVersionEnabled(backend->ssl_ctx,
kSSLProtocolAll,
false);
- switch(conn->ssl_config.version) {
+ switch(conn_config->version) {
case CURL_SSLVERSION_DEFAULT:
case CURL_SSLVERSION_TLSv1:
(void)SSLSetProtocolVersionEnabled(backend->ssl_ctx,
@@ -1791,7 +1758,7 @@ static CURLcode sectransp_connect_step1(struct Curl_easy *data,
case CURL_SSLVERSION_TLSv1_2:
case CURL_SSLVERSION_TLSv1_3:
{
- CURLcode result = set_ssl_version_min_max(data, conn, sockindex);
+ CURLcode result = set_ssl_version_min_max(cf, data);
if(result != CURLE_OK)
return result;
break;
@@ -1807,13 +1774,13 @@ static CURLcode sectransp_connect_step1(struct Curl_easy *data,
#endif /* CURL_SUPPORT_MAC_10_8 */
}
#else
- if(conn->ssl_config.version_max != CURL_SSLVERSION_MAX_NONE) {
+ if(conn_config->version_max != CURL_SSLVERSION_MAX_NONE) {
failf(data, "Your version of the OS does not support to set maximum"
" SSL/TLS version");
return CURLE_SSL_CONNECT_ERROR;
}
(void)SSLSetProtocolVersionEnabled(backend->ssl_ctx, kSSLProtocolAll, false);
- switch(conn->ssl_config.version) {
+ switch(conn_config->version) {
case CURL_SSLVERSION_DEFAULT:
case CURL_SSLVERSION_TLSv1:
case CURL_SSLVERSION_TLSv1_0:
@@ -1841,38 +1808,33 @@ static CURLcode sectransp_connect_step1(struct Curl_easy *data,
#endif /* CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS */
#if (CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11) && HAVE_BUILTIN_AVAILABLE == 1
- if(conn->bits.tls_enable_alpn) {
+ if(connssl->alpn) {
if(__builtin_available(macOS 10.13.4, iOS 11, tvOS 11, *)) {
+ struct alpn_proto_buf proto;
+ size_t i;
+ CFStringRef cstr;
CFMutableArrayRef alpnArr = CFArrayCreateMutable(NULL, 0,
&kCFTypeArrayCallBacks);
-
-#ifdef USE_HTTP2
- if(data->state.httpwant >= CURL_HTTP_VERSION_2
-#ifndef CURL_DISABLE_PROXY
- && (!isproxy || !conn->bits.tunnel_proxy)
-#endif
- ) {
- CFArrayAppendValue(alpnArr, CFSTR(ALPN_H2));
- infof(data, VTLS_INFOF_ALPN_OFFER_1STR, ALPN_H2);
+ for(i = 0; i < connssl->alpn->count; ++i) {
+ cstr = CFStringCreateWithCString(NULL, connssl->alpn->entries[i],
+ kCFStringEncodingUTF8);
+ if(!cstr)
+ return CURLE_OUT_OF_MEMORY;
+ CFArrayAppendValue(alpnArr, cstr);
+ CFRelease(cstr);
}
-#endif
-
- CFArrayAppendValue(alpnArr, CFSTR(ALPN_HTTP_1_1));
- infof(data, VTLS_INFOF_ALPN_OFFER_1STR, ALPN_HTTP_1_1);
-
- /* expects length prefixed preference ordered list of protocols in wire
- * format
- */
err = SSLSetALPNProtocols(backend->ssl_ctx, alpnArr);
if(err != noErr)
infof(data, "WARNING: failed to set ALPN protocols; OSStatus %d",
err);
CFRelease(alpnArr);
+ Curl_alpn_to_proto_str(&proto, connssl->alpn);
+ infof(data, VTLS_INFOF_ALPN_OFFER_1STR, proto.data);
}
}
#endif
- if(SSL_SET_OPTION(key)) {
+ if(ssl_config->key) {
infof(data, "WARNING: SSL: CURLOPT_SSLKEY is ignored by Secure "
"Transport. The private key must be in the Keychain.");
}
@@ -1891,17 +1853,17 @@ static CURLcode sectransp_connect_step1(struct Curl_easy *data,
else
err = !noErr;
if((err != noErr) && (is_cert_file || is_cert_data)) {
- if(!SSL_SET_OPTION(cert_type))
+ if(!ssl_config->cert_type)
infof(data, "SSL: Certificate type not set, assuming "
"PKCS#12 format.");
- else if(!strcasecompare(SSL_SET_OPTION(cert_type), "P12")) {
+ else if(!strcasecompare(ssl_config->cert_type, "P12")) {
failf(data, "SSL: The Security framework only supports "
"loading identities that are in PKCS#12 format.");
return CURLE_SSL_CERTPROBLEM;
}
err = CopyIdentityFromPKCS12File(ssl_cert, ssl_cert_blob,
- SSL_SET_OPTION(key_passwd),
+ ssl_config->key_passwd,
&cert_and_key);
}
@@ -1994,7 +1956,7 @@ static CURLcode sectransp_connect_step1(struct Curl_easy *data,
#else
if(SSLSetSessionOption) {
#endif /* CURL_BUILD_MAC */
- bool break_on_auth = !conn->ssl_config.verifypeer ||
+ bool break_on_auth = !conn_config->verifypeer ||
ssl_cafile || ssl_cablob;
err = SSLSetSessionOption(backend->ssl_ctx,
kSSLSessionOptionBreakOnServerAuth,
@@ -2007,7 +1969,7 @@ static CURLcode sectransp_connect_step1(struct Curl_easy *data,
else {
#if CURL_SUPPORT_MAC_10_8
err = SSLSetEnableCertVerify(backend->ssl_ctx,
- conn->ssl_config.verifypeer?true:false);
+ conn_config->verifypeer?true:false);
if(err != noErr) {
failf(data, "SSL: SSLSetEnableCertVerify() failed: OSStatus %d", err);
return CURLE_SSL_CONNECT_ERROR;
@@ -2016,7 +1978,7 @@ static CURLcode sectransp_connect_step1(struct Curl_easy *data,
}
#else
err = SSLSetEnableCertVerify(backend->ssl_ctx,
- conn->ssl_config.verifypeer?true:false);
+ conn_config->verifypeer?true:false);
if(err != noErr) {
failf(data, "SSL: SSLSetEnableCertVerify() failed: OSStatus %d", err);
return CURLE_SSL_CONNECT_ERROR;
@@ -2037,14 +1999,10 @@ static CURLcode sectransp_connect_step1(struct Curl_easy *data,
/* Configure hostname check. SNI is used if available.
* Both hostname check and SNI require SSLSetPeerDomainName().
* Also: the verifyhost setting influences SNI usage */
- if(conn->ssl_config.verifyhost) {
- size_t snilen;
- char *snihost = Curl_ssl_snihost(data, hostname, &snilen);
- if(!snihost) {
- failf(data, "Failed to set SNI");
- return CURLE_SSL_CONNECT_ERROR;
- }
- err = SSLSetPeerDomainName(backend->ssl_ctx, snihost, snilen);
+ if(conn_config->verifyhost) {
+ char *server = connssl->peer.sni?
+ connssl->peer.sni : connssl->peer.hostname;
+ err = SSLSetPeerDomainName(backend->ssl_ctx, server, strlen(server));
if(err != noErr) {
failf(data, "SSL: SSLSetPeerDomainName() failed: OSStatus %d",
@@ -2052,11 +2010,7 @@ static CURLcode sectransp_connect_step1(struct Curl_easy *data,
return CURLE_SSL_CONNECT_ERROR;
}
- if((Curl_inet_pton(AF_INET, hostname, &addr))
- #ifdef ENABLE_IPV6
- || (Curl_inet_pton(AF_INET6, hostname, &addr))
- #endif
- ) {
+ if(connssl->peer.is_ip_address) {
infof(data, "WARNING: using IP address, SNI is being disabled by "
"the OS.");
}
@@ -2065,7 +2019,7 @@ static CURLcode sectransp_connect_step1(struct Curl_easy *data,
infof(data, "WARNING: disabling hostname validation also disables SNI.");
}
- ciphers = SSL_CONN_CONFIG(cipher_list);
+ ciphers = conn_config->cipher_list;
if(ciphers) {
err = sectransp_set_selected_ciphers(data, backend->ssl_ctx, ciphers);
}
@@ -2083,20 +2037,20 @@ static CURLcode sectransp_connect_step1(struct Curl_easy *data,
specifically doesn't want us doing that: */
if(SSLSetSessionOption) {
SSLSetSessionOption(backend->ssl_ctx, kSSLSessionOptionSendOneByteRecord,
- !SSL_SET_OPTION(enable_beast));
+ !ssl_config->enable_beast);
SSLSetSessionOption(backend->ssl_ctx, kSSLSessionOptionFalseStart,
- data->set.ssl.falsestart); /* false start support */
+ ssl_config->falsestart); /* false start support */
}
#endif /* CURL_BUILD_MAC_10_9 || CURL_BUILD_IOS_7 */
/* Check if there's a cached ID we can/should use here! */
- if(SSL_SET_OPTION(primary.sessionid)) {
+ if(ssl_config->primary.sessionid) {
char *ssl_sessionid;
size_t ssl_sessionid_len;
Curl_ssl_sessionid_lock(data);
- if(!Curl_ssl_getsessionid(data, conn, isproxy, (void **)&ssl_sessionid,
- &ssl_sessionid_len, sockindex)) {
+ if(!Curl_ssl_getsessionid(cf, data, (void **)&ssl_sessionid,
+ &ssl_sessionid_len)) {
/* we got a session id, use it! */
err = SSLSetPeerID(backend->ssl_ctx, ssl_sessionid, ssl_sessionid_len);
Curl_ssl_sessionid_unlock(data);
@@ -2105,16 +2059,17 @@ static CURLcode sectransp_connect_step1(struct Curl_easy *data,
return CURLE_SSL_CONNECT_ERROR;
}
/* Informational message */
- infof(data, "SSL re-using session ID");
+ infof(data, "SSL reusing session ID");
}
/* If there isn't one, then let's make one up! This has to be done prior
to starting the handshake. */
else {
CURLcode result;
ssl_sessionid =
- aprintf("%s:%d:%d:%s:%ld",
+ aprintf("%s:%d:%d:%s:%d",
ssl_cafile ? ssl_cafile : "(blob memory)",
- verifypeer, SSL_CONN_CONFIG(verifyhost), hostname, port);
+ verifypeer, conn_config->verifyhost, connssl->peer.hostname,
+ connssl->port);
ssl_sessionid_len = strlen(ssl_sessionid);
err = SSLSetPeerID(backend->ssl_ctx, ssl_sessionid, ssl_sessionid_len);
@@ -2124,8 +2079,8 @@ static CURLcode sectransp_connect_step1(struct Curl_easy *data,
return CURLE_SSL_CONNECT_ERROR;
}
- result = Curl_ssl_addsessionid(data, conn, isproxy, ssl_sessionid,
- ssl_sessionid_len, sockindex, NULL);
+ result = Curl_ssl_addsessionid(cf, data, ssl_sessionid,
+ ssl_sessionid_len, NULL);
Curl_ssl_sessionid_unlock(data);
if(result) {
failf(data, "failed to store ssl session");
@@ -2134,18 +2089,15 @@ static CURLcode sectransp_connect_step1(struct Curl_easy *data,
}
}
- err = SSLSetIOFuncs(backend->ssl_ctx, SocketRead, SocketWrite);
+ err = SSLSetIOFuncs(backend->ssl_ctx,
+ sectransp_bio_cf_in_read,
+ sectransp_bio_cf_out_write);
if(err != noErr) {
failf(data, "SSL: SSLSetIOFuncs() failed: OSStatus %d", err);
return CURLE_SSL_CONNECT_ERROR;
}
- /* pass the raw socket into the SSL layers */
- /* We need to store the FD in a constant memory address, because
- * SSLSetConnection() will not copy that address. I've found that
- * conn->sock[sockindex] may change on its own. */
- backend->ssl_sockfd = sockfd;
- err = SSLSetConnection(backend->ssl_ctx, connssl);
+ err = SSLSetConnection(backend->ssl_ctx, cf);
if(err != noErr) {
failf(data, "SSL: SSLSetConnection() failed: %d", err);
return CURLE_SSL_CONNECT_ERROR;
@@ -2204,50 +2156,39 @@ static long pem_to_der(const char *in, unsigned char **out, size_t *outlen)
return sep_end - in;
}
+#define MAX_CERTS_SIZE (50*1024*1024) /* arbitrary - to catch mistakes */
+
static int read_cert(const char *file, unsigned char **out, size_t *outlen)
{
int fd;
- ssize_t n, len = 0, cap = 512;
- unsigned char buf[512], *data;
+ ssize_t n;
+ unsigned char buf[512];
+ struct dynbuf certs;
+
+ Curl_dyn_init(&certs, MAX_CERTS_SIZE);
fd = open(file, 0);
if(fd < 0)
return -1;
- data = malloc(cap);
- if(!data) {
- close(fd);
- return -1;
- }
-
for(;;) {
n = read(fd, buf, sizeof(buf));
+ if(!n)
+ break;
if(n < 0) {
close(fd);
- free(data);
+ Curl_dyn_free(&certs);
return -1;
}
- else if(n == 0) {
+ if(Curl_dyn_addn(&certs, buf, n)) {
close(fd);
- break;
- }
-
- if(len + n >= cap) {
- cap *= 2;
- data = Curl_saferealloc(data, cap);
- if(!data) {
- close(fd);
- return -1;
- }
+ return -1;
}
-
- memcpy(data + len, buf, n);
- len += n;
}
- data[len] = '\0';
+ close(fd);
- *out = data;
- *outlen = len;
+ *out = Curl_dyn_uptr(&certs);
+ *outlen = Curl_dyn_len(&certs);
return 0;
}
@@ -2256,16 +2197,18 @@ static int append_cert_to_array(struct Curl_easy *data,
const unsigned char *buf, size_t buflen,
CFMutableArrayRef array)
{
- CFDataRef certdata = CFDataCreate(kCFAllocatorDefault, buf, buflen);
char *certp;
CURLcode result;
+ SecCertificateRef cacert;
+ CFDataRef certdata;
+
+ certdata = CFDataCreate(kCFAllocatorDefault, buf, buflen);
if(!certdata) {
failf(data, "SSL: failed to allocate array for CA certificate");
return CURLE_OUT_OF_MEMORY;
}
- SecCertificateRef cacert =
- SecCertificateCreateWithData(kCFAllocatorDefault, certdata);
+ cacert = SecCertificateCreateWithData(kCFAllocatorDefault, certdata);
CFRelease(certdata);
if(!cacert) {
failf(data, "SSL: failed to create SecCertificate from CA certificate");
@@ -2291,7 +2234,8 @@ static int append_cert_to_array(struct Curl_easy *data,
return CURLE_OK;
}
-static CURLcode verify_cert_buf(struct Curl_easy *data,
+static CURLcode verify_cert_buf(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
const unsigned char *certbuf, size_t buflen,
SSLContextRef ctx)
{
@@ -2299,7 +2243,12 @@ static CURLcode verify_cert_buf(struct Curl_easy *data,
long res;
unsigned char *der;
size_t derlen, offset = 0;
-
+ OSStatus ret;
+ SecTrustResultType trust_eval;
+ CFMutableArrayRef array = NULL;
+ SecTrustRef trust = NULL;
+ CURLcode result = CURLE_PEER_FAILED_VERIFICATION;
+ (void)cf;
/*
* Certbuf now contains the contents of the certificate file, which can be
* - a single DER certificate,
@@ -2309,11 +2258,11 @@ static CURLcode verify_cert_buf(struct Curl_easy *data,
* Go through certbuf, and convert any PEM certificate in it into DER
* format.
*/
- CFMutableArrayRef array = CFArrayCreateMutable(kCFAllocatorDefault, 0,
- &kCFTypeArrayCallBacks);
+ array = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
if(!array) {
failf(data, "SSL: out of memory creating CA certificate array");
- return CURLE_OUT_OF_MEMORY;
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
}
while(offset < buflen) {
@@ -2325,10 +2274,10 @@ static CURLcode verify_cert_buf(struct Curl_easy *data,
*/
res = pem_to_der((const char *)certbuf + offset, &der, &derlen);
if(res < 0) {
- CFRelease(array);
failf(data, "SSL: invalid CA certificate #%d (offset %zu) in bundle",
n, offset);
- return CURLE_SSL_CACERT_BADFILE;
+ result = CURLE_SSL_CACERT_BADFILE;
+ goto out;
}
offset += res;
@@ -2336,8 +2285,9 @@ static CURLcode verify_cert_buf(struct Curl_easy *data,
/* This is not a PEM file, probably a certificate in DER format. */
rc = append_cert_to_array(data, certbuf, buflen, array);
if(rc != CURLE_OK) {
- CFRelease(array);
- return rc;
+ CURL_TRC_CF(data, cf, "append_cert for CA failed");
+ result = rc;
+ goto out;
}
break;
}
@@ -2349,63 +2299,73 @@ static CURLcode verify_cert_buf(struct Curl_easy *data,
rc = append_cert_to_array(data, der, derlen, array);
free(der);
if(rc != CURLE_OK) {
- CFRelease(array);
- return rc;
+ CURL_TRC_CF(data, cf, "append_cert for CA failed");
+ result = rc;
+ goto out;
}
}
- SecTrustRef trust;
- OSStatus ret = SSLCopyPeerTrust(ctx, &trust);
+ ret = SSLCopyPeerTrust(ctx, &trust);
if(!trust) {
failf(data, "SSL: error getting certificate chain");
- CFRelease(array);
- return CURLE_PEER_FAILED_VERIFICATION;
+ goto out;
}
else if(ret != noErr) {
- CFRelease(array);
failf(data, "SSLCopyPeerTrust() returned error %d", ret);
- return CURLE_PEER_FAILED_VERIFICATION;
+ goto out;
}
+ CURL_TRC_CF(data, cf, "setting %d trust anchors", n);
ret = SecTrustSetAnchorCertificates(trust, array);
if(ret != noErr) {
- CFRelease(array);
- CFRelease(trust);
failf(data, "SecTrustSetAnchorCertificates() returned error %d", ret);
- return CURLE_PEER_FAILED_VERIFICATION;
+ goto out;
}
ret = SecTrustSetAnchorCertificatesOnly(trust, true);
if(ret != noErr) {
- CFRelease(array);
- CFRelease(trust);
failf(data, "SecTrustSetAnchorCertificatesOnly() returned error %d", ret);
- return CURLE_PEER_FAILED_VERIFICATION;
+ goto out;
}
- SecTrustResultType trust_eval = 0;
+ trust_eval = 0;
ret = SecTrustEvaluate(trust, &trust_eval);
- CFRelease(array);
- CFRelease(trust);
if(ret != noErr) {
failf(data, "SecTrustEvaluate() returned error %d", ret);
- return CURLE_PEER_FAILED_VERIFICATION;
+ goto out;
}
switch(trust_eval) {
case kSecTrustResultUnspecified:
+ /* what does this really mean? */
+ CURL_TRC_CF(data, cf, "trust result: Unspecified");
+ result = CURLE_OK;
+ goto out;
case kSecTrustResultProceed:
- return CURLE_OK;
+ CURL_TRC_CF(data, cf, "trust result: Proceed");
+ result = CURLE_OK;
+ goto out;
case kSecTrustResultRecoverableTrustFailure:
+ failf(data, "SSL: peer not verified: RecoverableTrustFailure");
+ goto out;
case kSecTrustResultDeny:
+ failf(data, "SSL: peer not verified: Deny");
+ goto out;
default:
- failf(data, "SSL: certificate verification failed (result: %d)",
- trust_eval);
- return CURLE_PEER_FAILED_VERIFICATION;
+ failf(data, "SSL: perr not verified: result=%d", trust_eval);
+ goto out;
}
+
+out:
+ if(trust)
+ CFRelease(trust);
+ if(array)
+ CFRelease(array);
+ return result;
}
-static CURLcode verify_cert(struct Curl_easy *data, const char *cafile,
+static CURLcode verify_cert(struct Curl_cfilter *cf,
+ struct Curl_easy *data, const char *cafile,
const struct curl_blob *ca_info_blob,
SSLContextRef ctx)
{
@@ -2414,6 +2374,7 @@ static CURLcode verify_cert(struct Curl_easy *data, const char *cafile,
size_t buflen;
if(ca_info_blob) {
+ CURL_TRC_CF(data, cf, "verify_peer, CA from config blob");
certbuf = (unsigned char *)malloc(ca_info_blob->len + 1);
if(!certbuf) {
return CURLE_OUT_OF_MEMORY;
@@ -2423,6 +2384,7 @@ static CURLcode verify_cert(struct Curl_easy *data, const char *cafile,
certbuf[ca_info_blob->len]='\0';
}
else if(cafile) {
+ CURL_TRC_CF(data, cf, "verify_peer, CA from file '%s'", cafile);
if(read_cert(cafile, &certbuf, &buflen) < 0) {
failf(data, "SSL: failed to read or invalid CA certificate");
return CURLE_SSL_CACERT_BADFILE;
@@ -2431,7 +2393,7 @@ static CURLcode verify_cert(struct Curl_easy *data, const char *cafile,
else
return CURLE_SSL_CACERT_BADFILE;
- result = verify_cert_buf(data, certbuf, buflen, ctx);
+ result = verify_cert_buf(cf, data, certbuf, buflen, ctx);
free(certbuf);
return result;
}
@@ -2460,11 +2422,14 @@ static CURLcode pkp_pin_peer_pubkey(struct Curl_easy *data,
do {
SecTrustRef trust;
- OSStatus ret = SSLCopyPeerTrust(ctx, &trust);
+ OSStatus ret;
+ SecKeyRef keyRef;
+
+ ret = SSLCopyPeerTrust(ctx, &trust);
if(ret != noErr || !trust)
break;
- SecKeyRef keyRef = SecTrustCopyPublicKey(trust);
+ keyRef = SecTrustCopyPublicKey(trust);
CFRelease(trust);
if(!keyRef)
break;
@@ -2478,11 +2443,14 @@ static CURLcode pkp_pin_peer_pubkey(struct Curl_easy *data,
#elif SECTRANSP_PINNEDPUBKEY_V2
- OSStatus success = SecItemExport(keyRef, kSecFormatOpenSSL, 0, NULL,
- &publicKeyBits);
- CFRelease(keyRef);
- if(success != errSecSuccess || !publicKeyBits)
- break;
+ {
+ OSStatus success;
+ success = SecItemExport(keyRef, kSecFormatOpenSSL, 0, NULL,
+ &publicKeyBits);
+ CFRelease(keyRef);
+ if(success != errSecSuccess || !publicKeyBits)
+ break;
+ }
#endif /* SECTRANSP_PINNEDPUBKEY_V2 */
@@ -2510,7 +2478,7 @@ static CURLcode pkp_pin_peer_pubkey(struct Curl_easy *data,
spkiHeaderLength = 23;
break;
default:
- infof(data, "SSL: unhandled public key length: %d", pubkeylen);
+ infof(data, "SSL: unhandled public key length: %zu", pubkeylen);
#elif SECTRANSP_PINNEDPUBKEY_V2
default:
/* ecDSA secp256r1 pubkeylen == 91 header already included?
@@ -2544,23 +2512,25 @@ static CURLcode pkp_pin_peer_pubkey(struct Curl_easy *data,
}
#endif /* SECTRANSP_PINNEDPUBKEY */
-static CURLcode
-sectransp_connect_step2(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
+static CURLcode sectransp_connect_step2(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct st_ssl_backend_data *backend =
+ (struct st_ssl_backend_data *)connssl->backend;
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
OSStatus err;
SSLCipherSuite cipher;
SSLProtocol protocol = 0;
- const char * const hostname = SSL_HOST_NAME();
DEBUGASSERT(ssl_connect_2 == connssl->connecting_state
|| ssl_connect_2_reading == connssl->connecting_state
|| ssl_connect_2_writing == connssl->connecting_state);
DEBUGASSERT(backend);
+ CURL_TRC_CF(data, cf, "connect_step2");
/* Here goes nothing: */
+check_handshake:
err = SSLHandshake(backend->ssl_ctx);
if(err != noErr) {
@@ -2573,16 +2543,16 @@ sectransp_connect_step2(struct Curl_easy *data, struct connectdata *conn,
/* The below is errSSLServerAuthCompleted; it's not defined in
Leopard's headers */
case -9841:
- if((SSL_CONN_CONFIG(CAfile) || SSL_CONN_CONFIG(ca_info_blob)) &&
- SSL_CONN_CONFIG(verifypeer)) {
- CURLcode result = verify_cert(data, SSL_CONN_CONFIG(CAfile),
- SSL_CONN_CONFIG(ca_info_blob),
+ if((conn_config->CAfile || conn_config->ca_info_blob) &&
+ conn_config->verifypeer) {
+ CURLcode result = verify_cert(cf, data, conn_config->CAfile,
+ conn_config->ca_info_blob,
backend->ssl_ctx);
if(result)
return result;
}
/* the documentation says we need to call SSLHandshake() again */
- return sectransp_connect_step2(data, conn, sockindex);
+ goto check_handshake;
/* Problem with encrypt / decrypt */
case errSSLPeerDecodeError:
@@ -2684,7 +2654,7 @@ sectransp_connect_step2(struct Curl_easy *data, struct connectdata *conn,
host name: */
case errSSLHostNameMismatch:
failf(data, "SSL certificate peer verification failed, the "
- "certificate did not match \"%s\"\n", conn->host.dispname);
+ "certificate did not match \"%s\"\n", connssl->peer.dispname);
return CURLE_PEER_FAILED_VERIFICATION;
/* Problem with SSL / TLS negotiation */
@@ -2751,7 +2721,7 @@ sectransp_connect_step2(struct Curl_easy *data, struct connectdata *conn,
failf(data, "Peer rejected unexpected message");
break;
#if CURL_BUILD_MAC_10_11 || CURL_BUILD_IOS_9
- /* Treaing non-fatal error as fatal like before */
+ /* Treating non-fatal error as fatal like before */
case errSSLClientHelloReceived:
failf(data, "A non-fatal result for providing a server name "
"indication");
@@ -2776,7 +2746,7 @@ sectransp_connect_step2(struct Curl_easy *data, struct connectdata *conn,
default:
/* May also return codes listed in Security Framework Result Codes */
failf(data, "Unknown SSL protocol error in connection to %s:%d",
- hostname, err);
+ connssl->peer.hostname, err);
break;
}
return CURLE_SSL_CONNECT_ERROR;
@@ -2835,7 +2805,7 @@ sectransp_connect_step2(struct Curl_easy *data, struct connectdata *conn,
}
#if(CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11) && HAVE_BUILTIN_AVAILABLE == 1
- if(conn->bits.tls_enable_alpn) {
+ if(connssl->alpn) {
if(__builtin_available(macOS 10.13.4, iOS 11, tvOS 11, *)) {
CFArrayRef alpnArr = NULL;
CFStringRef chosenProtocol = NULL;
@@ -2847,18 +2817,18 @@ sectransp_connect_step2(struct Curl_easy *data, struct connectdata *conn,
#ifdef USE_HTTP2
if(chosenProtocol &&
!CFStringCompare(chosenProtocol, CFSTR(ALPN_H2), 0)) {
- conn->alpn = CURL_HTTP_VERSION_2;
+ cf->conn->alpn = CURL_HTTP_VERSION_2;
}
else
#endif
if(chosenProtocol &&
!CFStringCompare(chosenProtocol, CFSTR(ALPN_HTTP_1_1), 0)) {
- conn->alpn = CURL_HTTP_VERSION_1_1;
+ cf->conn->alpn = CURL_HTTP_VERSION_1_1;
}
else
infof(data, VTLS_INFOF_NO_ALPN);
- Curl_multiuse_state(data, conn->alpn == CURL_HTTP_VERSION_2 ?
+ Curl_multiuse_state(data, cf->conn->alpn == CURL_HTTP_VERSION_2 ?
BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
/* chosenProtocol is a reference to the string within alpnArr
@@ -2894,11 +2864,12 @@ add_cert_to_certinfo(struct Curl_easy *data,
}
static CURLcode
-collect_server_cert_single(struct Curl_easy *data,
+collect_server_cert_single(struct Curl_cfilter *cf, struct Curl_easy *data,
SecCertificateRef server_cert,
CFIndex idx)
{
CURLcode result = CURLE_OK;
+ struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data);
#ifndef CURL_DISABLE_VERBOSE_STRINGS
if(data->set.verbose) {
char *certp;
@@ -2909,26 +2880,26 @@ collect_server_cert_single(struct Curl_easy *data,
}
}
#endif
- if(data->set.ssl.certinfo)
+ if(ssl_config->certinfo)
result = add_cert_to_certinfo(data, server_cert, (int)idx);
return result;
}
/* This should be called during step3 of the connection at the earliest */
-static CURLcode
-collect_server_cert(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex)
+static CURLcode collect_server_cert(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
#ifndef CURL_DISABLE_VERBOSE_STRINGS
const bool show_verbose_server_cert = data->set.verbose;
#else
const bool show_verbose_server_cert = false;
#endif
- CURLcode result = data->set.ssl.certinfo ?
+ struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data);
+ CURLcode result = ssl_config->certinfo ?
CURLE_PEER_FAILED_VERIFICATION : CURLE_OK;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct st_ssl_backend_data *backend =
+ (struct st_ssl_backend_data *)connssl->backend;
CFArrayRef server_certs = NULL;
SecCertificateRef server_cert;
OSStatus err;
@@ -2937,7 +2908,7 @@ collect_server_cert(struct Curl_easy *data,
DEBUGASSERT(backend);
- if(!show_verbose_server_cert && !data->set.ssl.certinfo)
+ if(!show_verbose_server_cert && !ssl_config->certinfo)
return CURLE_OK;
if(!backend->ssl_ctx)
@@ -2951,11 +2922,11 @@ collect_server_cert(struct Curl_easy *data,
a null trust, so be on guard for that: */
if(err == noErr && trust) {
count = SecTrustGetCertificateCount(trust);
- if(data->set.ssl.certinfo)
+ if(ssl_config->certinfo)
result = Curl_ssl_init_certinfo(data, (int)count);
for(i = 0L ; !result && (i < count) ; i++) {
server_cert = SecTrustGetCertificateAtIndex(trust, i);
- result = collect_server_cert_single(data, server_cert, i);
+ result = collect_server_cert_single(cf, data, server_cert, i);
}
CFRelease(trust);
}
@@ -2973,11 +2944,11 @@ collect_server_cert(struct Curl_easy *data,
a null trust, so be on guard for that: */
if(err == noErr && trust) {
count = SecTrustGetCertificateCount(trust);
- if(data->set.ssl.certinfo)
+ if(ssl_config->certinfo)
result = Curl_ssl_init_certinfo(data, (int)count);
for(i = 0L ; !result && (i < count) ; i++) {
server_cert = SecTrustGetCertificateAtIndex(trust, i);
- result = collect_server_cert_single(data, server_cert, i);
+ result = collect_server_cert_single(cf, data, server_cert, i);
}
CFRelease(trust);
}
@@ -2988,12 +2959,12 @@ collect_server_cert(struct Curl_easy *data,
/* Just in case SSLCopyPeerCertificates() returns null too... */
if(err == noErr && server_certs) {
count = CFArrayGetCount(server_certs);
- if(data->set.ssl.certinfo)
+ if(ssl_config->certinfo)
result = Curl_ssl_init_certinfo(data, (int)count);
for(i = 0L ; !result && (i < count) ; i++) {
server_cert = (SecCertificateRef)CFArrayGetValueAtIndex(server_certs,
i);
- result = collect_server_cert_single(data, server_cert, i);
+ result = collect_server_cert_single(cf, data, server_cert, i);
}
CFRelease(server_certs);
}
@@ -3005,11 +2976,11 @@ collect_server_cert(struct Curl_easy *data,
err = SSLCopyPeerCertificates(backend->ssl_ctx, &server_certs);
if(err == noErr) {
count = CFArrayGetCount(server_certs);
- if(data->set.ssl.certinfo)
+ if(ssl_config->certinfo)
result = Curl_ssl_init_certinfo(data, (int)count);
for(i = 0L ; !result && (i < count) ; i++) {
server_cert = (SecCertificateRef)CFArrayGetValueAtIndex(server_certs, i);
- result = collect_server_cert_single(data, server_cert, i);
+ result = collect_server_cert_single(cf, data, server_cert, i);
}
CFRelease(server_certs);
}
@@ -3017,16 +2988,17 @@ collect_server_cert(struct Curl_easy *data,
return result;
}
-static CURLcode
-sectransp_connect_step3(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
+static CURLcode sectransp_connect_step3(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
+ struct ssl_connect_data *connssl = cf->ctx;
+ CURLcode result;
+ CURL_TRC_CF(data, cf, "connect_step3");
/* There is no step 3!
* Well, okay, let's collect server certificates, and if verbose mode is on,
* let's print the details of the server certificates. */
- const CURLcode result = collect_server_cert(data, conn, sockindex);
+ result = collect_server_cert(cf, data);
if(result)
return result;
@@ -3034,19 +3006,14 @@ sectransp_connect_step3(struct Curl_easy *data, struct connectdata *conn,
return CURLE_OK;
}
-static Curl_recv sectransp_recv;
-static Curl_send sectransp_send;
-
static CURLcode
-sectransp_connect_common(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex,
+sectransp_connect_common(struct Curl_cfilter *cf, struct Curl_easy *data,
bool nonblocking,
bool *done)
{
CURLcode result;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- curl_socket_t sockfd = conn->sock[sockindex];
+ struct ssl_connect_data *connssl = cf->ctx;
+ curl_socket_t sockfd = Curl_conn_cf_get_socket(cf, data);
int what;
/* check if the connection has already been established */
@@ -3065,7 +3032,7 @@ sectransp_connect_common(struct Curl_easy *data,
return CURLE_OPERATION_TIMEDOUT;
}
- result = sectransp_connect_step1(data, conn, sockindex);
+ result = sectransp_connect_step1(cf, data);
if(result)
return result;
}
@@ -3119,7 +3086,7 @@ sectransp_connect_common(struct Curl_easy *data,
* before step2 has completed while ensuring that a client using select()
* or epoll() will always have a valid fdset to wait on.
*/
- result = sectransp_connect_step2(data, conn, sockindex);
+ result = sectransp_connect_step2(cf, data);
if(result || (nonblocking &&
(ssl_connect_2 == connssl->connecting_state ||
ssl_connect_2_reading == connssl->connecting_state ||
@@ -3130,15 +3097,14 @@ sectransp_connect_common(struct Curl_easy *data,
if(ssl_connect_3 == connssl->connecting_state) {
- result = sectransp_connect_step3(data, conn, sockindex);
+ result = sectransp_connect_step3(cf, data);
if(result)
return result;
}
if(ssl_connect_done == connssl->connecting_state) {
+ CURL_TRC_CF(data, cf, "connected");
connssl->state = ssl_connection_complete;
- conn->recv[sockindex] = sectransp_recv;
- conn->send[sockindex] = sectransp_send;
*done = TRUE;
}
else
@@ -3150,20 +3116,20 @@ sectransp_connect_common(struct Curl_easy *data,
return CURLE_OK;
}
-static CURLcode sectransp_connect_nonblocking(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex, bool *done)
+static CURLcode sectransp_connect_nonblocking(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool *done)
{
- return sectransp_connect_common(data, conn, sockindex, TRUE, done);
+ return sectransp_connect_common(cf, data, TRUE, done);
}
-static CURLcode sectransp_connect(struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
+static CURLcode sectransp_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
CURLcode result;
bool done = FALSE;
- result = sectransp_connect_common(data, conn, sockindex, FALSE, &done);
+ result = sectransp_connect_common(cf, data, FALSE, &done);
if(result)
return result;
@@ -3173,17 +3139,18 @@ static CURLcode sectransp_connect(struct Curl_easy *data,
return CURLE_OK;
}
-static void sectransp_close(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
+static void sectransp_close(struct Curl_cfilter *cf, struct Curl_easy *data)
{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct st_ssl_backend_data *backend =
+ (struct st_ssl_backend_data *)connssl->backend;
(void) data;
DEBUGASSERT(backend);
if(backend->ssl_ctx) {
+ CURL_TRC_CF(data, cf, "close");
(void)SSLClose(backend->ssl_ctx);
#if CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS
if(SSLCreateContext)
@@ -3197,19 +3164,20 @@ static void sectransp_close(struct Curl_easy *data, struct connectdata *conn,
#endif /* CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS */
backend->ssl_ctx = NULL;
}
- backend->ssl_sockfd = 0;
}
-static int sectransp_shutdown(struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
+static int sectransp_shutdown(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct st_ssl_backend_data *backend =
+ (struct st_ssl_backend_data *)connssl->backend;
ssize_t nread;
int what;
int rc;
char buf[120];
int loop = 10; /* avoid getting stuck */
+ CURLcode result;
DEBUGASSERT(backend);
@@ -3221,12 +3189,14 @@ static int sectransp_shutdown(struct Curl_easy *data,
return 0;
#endif
- sectransp_close(data, conn, sockindex);
+ sectransp_close(cf, data);
rc = 0;
- what = SOCKET_READABLE(conn->sock[sockindex], SSL_SHUTDOWN_TIMEOUT);
+ what = SOCKET_READABLE(Curl_conn_cf_get_socket(cf, data),
+ SSL_SHUTDOWN_TIMEOUT);
+ CURL_TRC_CF(data, cf, "shutdown");
while(loop--) {
if(what < 0) {
/* anything that gets here is fatally bad */
@@ -3243,19 +3213,17 @@ static int sectransp_shutdown(struct Curl_easy *data,
/* Something to read, let's do it and hope that it is the close
notify alert from the server. No way to SSL_Read now, so use read(). */
- nread = read(conn->sock[sockindex], buf, sizeof(buf));
+ nread = Curl_conn_cf_recv(cf->next, data, buf, sizeof(buf), &result);
if(nread < 0) {
- char buffer[STRERROR_LEN];
- failf(data, "read: %s",
- Curl_strerror(errno, buffer, sizeof(buffer)));
+ failf(data, "read: %s", curl_easy_strerror(result));
rc = -1;
}
if(nread <= 0)
break;
- what = SOCKET_READABLE(conn->sock[sockindex], 0);
+ what = SOCKET_READABLE(Curl_conn_cf_get_socket(cf, data), 0);
}
return rc;
@@ -3277,43 +3245,20 @@ static size_t sectransp_version(char *buffer, size_t size)
return msnprintf(buffer, size, "SecureTransport");
}
-/*
- * This function uses SSLGetSessionState to determine connection status.
- *
- * Return codes:
- * 1 means the connection is still in place
- * 0 means the connection has been closed
- * -1 means the connection status is unknown
- */
-static int sectransp_check_cxn(struct connectdata *conn)
+static bool sectransp_data_pending(struct Curl_cfilter *cf,
+ const struct Curl_easy *data)
{
- struct ssl_connect_data *connssl = &conn->ssl[FIRSTSOCKET];
- struct ssl_backend_data *backend = connssl->backend;
- OSStatus err;
- SSLSessionState state;
-
- DEBUGASSERT(backend);
-
- if(backend->ssl_ctx) {
- err = SSLGetSessionState(backend->ssl_ctx, &state);
- if(err == noErr)
- return state == kSSLConnected || state == kSSLHandshake;
- return -1;
- }
- return 0;
-}
-
-static bool sectransp_data_pending(const struct connectdata *conn,
- int connindex)
-{
- const struct ssl_connect_data *connssl = &conn->ssl[connindex];
- struct ssl_backend_data *backend = connssl->backend;
+ const struct ssl_connect_data *connssl = cf->ctx;
+ struct st_ssl_backend_data *backend =
+ (struct st_ssl_backend_data *)connssl->backend;
OSStatus err;
size_t buffer;
+ (void)data;
DEBUGASSERT(backend);
if(backend->ssl_ctx) { /* SSL is in use */
+ CURL_TRC_CF((struct Curl_easy *)data, cf, "data_pending");
err = SSLGetBufferedReadSize(backend->ssl_ctx, &buffer);
if(err == noErr)
return buffer > 0UL;
@@ -3348,6 +3293,7 @@ static CURLcode sectransp_sha256sum(const unsigned char *tmp, /* input */
unsigned char *sha256sum, /* output */
size_t sha256len)
{
+ (void)sha256len;
assert(sha256len >= CURL_SHA256_DIGEST_LENGTH);
(void)CC_SHA256(tmp, (CC_LONG)tmplen, sha256sum);
return CURLE_OK;
@@ -3362,15 +3308,15 @@ static bool sectransp_false_start(void)
return FALSE;
}
-static ssize_t sectransp_send(struct Curl_easy *data,
- int sockindex,
+static ssize_t sectransp_send(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
const void *mem,
size_t len,
CURLcode *curlcode)
{
- struct connectdata *conn = data->conn;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct st_ssl_backend_data *backend =
+ (struct st_ssl_backend_data *)connssl->backend;
size_t processed = 0UL;
OSStatus err;
@@ -3431,31 +3377,33 @@ static ssize_t sectransp_send(struct Curl_easy *data,
return (ssize_t)processed;
}
-static ssize_t sectransp_recv(struct Curl_easy *data,
- int num,
+static ssize_t sectransp_recv(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
char *buf,
size_t buffersize,
CURLcode *curlcode)
{
- struct connectdata *conn = data->conn;
- struct ssl_connect_data *connssl = &conn->ssl[num];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct st_ssl_backend_data *backend =
+ (struct st_ssl_backend_data *)connssl->backend;
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
size_t processed = 0UL;
OSStatus err;
DEBUGASSERT(backend);
- again:
+again:
+ *curlcode = CURLE_OK;
err = SSLRead(backend->ssl_ctx, buf, buffersize, &processed);
if(err != noErr) {
switch(err) {
case errSSLWouldBlock: /* return how much we read (if anything) */
- if(processed)
+ if(processed) {
return (ssize_t)processed;
+ }
*curlcode = CURLE_AGAIN;
return -1L;
- break;
/* errSSLClosedGraceful - server gracefully shut down the SSL session
errSSLClosedNoNotify - server hung up on us instead of sending a
@@ -3464,26 +3412,26 @@ static ssize_t sectransp_recv(struct Curl_easy *data,
case errSSLClosedGraceful:
case errSSLClosedNoNotify:
*curlcode = CURLE_OK;
- return -1L;
- break;
+ return 0;
/* The below is errSSLPeerAuthCompleted; it's not defined in
Leopard's headers */
case -9841:
- if((SSL_CONN_CONFIG(CAfile) || SSL_CONN_CONFIG(ca_info_blob)) &&
- SSL_CONN_CONFIG(verifypeer)) {
- CURLcode result = verify_cert(data, SSL_CONN_CONFIG(CAfile),
- SSL_CONN_CONFIG(ca_info_blob),
+ if((conn_config->CAfile || conn_config->ca_info_blob) &&
+ conn_config->verifypeer) {
+ CURLcode result = verify_cert(cf, data, conn_config->CAfile,
+ conn_config->ca_info_blob,
backend->ssl_ctx);
- if(result)
- return result;
+ if(result) {
+ *curlcode = result;
+ return -1;
+ }
}
goto again;
default:
failf(data, "SSLRead() return error %d", err);
*curlcode = CURLE_RECV_ERROR;
return -1L;
- break;
}
}
return (ssize_t)processed;
@@ -3492,7 +3440,8 @@ static ssize_t sectransp_recv(struct Curl_easy *data,
static void *sectransp_get_internals(struct ssl_connect_data *connssl,
CURLINFO info UNUSED_PARAM)
{
- struct ssl_backend_data *backend = connssl->backend;
+ struct st_ssl_backend_data *backend =
+ (struct st_ssl_backend_data *)connssl->backend;
(void)info;
DEBUGASSERT(backend);
return backend->ssl_ctx;
@@ -3504,24 +3453,23 @@ const struct Curl_ssl Curl_ssl_sectransp = {
SSLSUPP_CAINFO_BLOB |
SSLSUPP_CERTINFO |
#ifdef SECTRANSP_PINNEDPUBKEY
- SSLSUPP_PINNEDPUBKEY,
-#else
- 0,
+ SSLSUPP_PINNEDPUBKEY |
#endif /* SECTRANSP_PINNEDPUBKEY */
+ SSLSUPP_HTTPS_PROXY,
- sizeof(struct ssl_backend_data),
+ sizeof(struct st_ssl_backend_data),
Curl_none_init, /* init */
Curl_none_cleanup, /* cleanup */
sectransp_version, /* version */
- sectransp_check_cxn, /* check_cxn */
+ Curl_none_check_cxn, /* check_cxn */
sectransp_shutdown, /* shutdown */
sectransp_data_pending, /* data_pending */
sectransp_random, /* random */
Curl_none_cert_status_request, /* cert_status_request */
sectransp_connect, /* connect */
sectransp_connect_nonblocking, /* connect_nonblocking */
- Curl_ssl_getsock, /* getsock */
+ Curl_ssl_adjust_pollset, /* adjust_pollset */
sectransp_get_internals, /* get_internals */
sectransp_close, /* close_one */
Curl_none_close_all, /* close_all */
@@ -3532,9 +3480,16 @@ const struct Curl_ssl Curl_ssl_sectransp = {
sectransp_false_start, /* false_start */
sectransp_sha256sum, /* sha256sum */
NULL, /* associate_connection */
- NULL /* disassociate_connection */
+ NULL, /* disassociate_connection */
+ NULL, /* free_multi_ssl_backend_data */
+ sectransp_recv, /* recv decrypted data */
+ sectransp_send, /* send data to encrypt */
};
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
+
#ifdef __clang__
#pragma clang diagnostic pop
#endif
diff --git a/lib/vtls/sectransp.h b/lib/vtls/sectransp.h
index 2d53b7c48..0f1085ad9 100644
--- a/lib/vtls/sectransp.h
+++ b/lib/vtls/sectransp.h
@@ -7,8 +7,8 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2012 - 2014, Nick Zitzmann, <nickzman@gmail.com>.
- * Copyright (C) 2012 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Nick Zitzmann, <nickzman@gmail.com>.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/vtls/vtls.c b/lib/vtls/vtls.c
index 9dee5aa3b..34eda3e5a 100644
--- a/lib/vtls/vtls.c
+++ b/lib/vtls/vtls.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -51,8 +51,10 @@
#endif
#include "urldata.h"
+#include "cfilters.h"
#include "vtls.h" /* generic SSL protos etc */
+#include "vtls_int.h"
#include "slist.h"
#include "sendf.h"
#include "strcase.h"
@@ -65,12 +67,14 @@
#include "warnless.h"
#include "curl_base64.h"
#include "curl_printf.h"
+#include "inet_pton.h"
#include "strdup.h"
/* The last #include files should be: */
#include "curl_memory.h"
#include "memdebug.h"
+
/* convenience macro to check if this handle is using a shared SSL session */
#define SSLSESSION_SHARED(data) (data->share && \
(data->share->specifier & \
@@ -127,42 +131,97 @@ static bool blobcmp(struct curl_blob *first, struct curl_blob *second)
return !memcmp(first->data, second->data, first->len); /* same data */
}
+#ifdef USE_SSL
+static const struct alpn_spec ALPN_SPEC_H11 = {
+ { ALPN_HTTP_1_1 }, 1
+};
+#ifdef USE_HTTP2
+static const struct alpn_spec ALPN_SPEC_H2_H11 = {
+ { ALPN_H2, ALPN_HTTP_1_1 }, 2
+};
+#endif
+
+static const struct alpn_spec *alpn_get_spec(int httpwant, bool use_alpn)
+{
+ if(!use_alpn)
+ return NULL;
+#ifdef USE_HTTP2
+ if(httpwant >= CURL_HTTP_VERSION_2)
+ return &ALPN_SPEC_H2_H11;
+#else
+ (void)httpwant;
+#endif
+ /* Use the ALPN protocol "http/1.1" for HTTP/1.x.
+ Avoid "http/1.0" because some servers don't support it. */
+ return &ALPN_SPEC_H11;
+}
+#endif /* USE_SSL */
+
+
+void Curl_ssl_easy_config_init(struct Curl_easy *data)
+{
+ /*
+ * libcurl 7.10 introduced SSL verification *by default*! This needs to be
+ * switched off unless wanted.
+ */
+ data->set.ssl.primary.verifypeer = TRUE;
+ data->set.ssl.primary.verifyhost = TRUE;
+ data->set.ssl.primary.sessionid = TRUE; /* session ID caching by default */
+#ifndef CURL_DISABLE_PROXY
+ data->set.proxy_ssl = data->set.ssl;
+#endif
+}
-bool
-Curl_ssl_config_matches(struct ssl_primary_config *data,
- struct ssl_primary_config *needle)
-{
- if((data->version == needle->version) &&
- (data->version_max == needle->version_max) &&
- (data->ssl_options == needle->ssl_options) &&
- (data->verifypeer == needle->verifypeer) &&
- (data->verifyhost == needle->verifyhost) &&
- (data->verifystatus == needle->verifystatus) &&
- blobcmp(data->cert_blob, needle->cert_blob) &&
- blobcmp(data->ca_info_blob, needle->ca_info_blob) &&
- blobcmp(data->issuercert_blob, needle->issuercert_blob) &&
- Curl_safecmp(data->CApath, needle->CApath) &&
- Curl_safecmp(data->CAfile, needle->CAfile) &&
- Curl_safecmp(data->issuercert, needle->issuercert) &&
- Curl_safecmp(data->clientcert, needle->clientcert) &&
+static bool
+match_ssl_primary_config(struct Curl_easy *data,
+ struct ssl_primary_config *c1,
+ struct ssl_primary_config *c2)
+{
+ (void)data;
+ if((c1->version == c2->version) &&
+ (c1->version_max == c2->version_max) &&
+ (c1->ssl_options == c2->ssl_options) &&
+ (c1->verifypeer == c2->verifypeer) &&
+ (c1->verifyhost == c2->verifyhost) &&
+ (c1->verifystatus == c2->verifystatus) &&
+ blobcmp(c1->cert_blob, c2->cert_blob) &&
+ blobcmp(c1->ca_info_blob, c2->ca_info_blob) &&
+ blobcmp(c1->issuercert_blob, c2->issuercert_blob) &&
+ Curl_safecmp(c1->CApath, c2->CApath) &&
+ Curl_safecmp(c1->CAfile, c2->CAfile) &&
+ Curl_safecmp(c1->issuercert, c2->issuercert) &&
+ Curl_safecmp(c1->clientcert, c2->clientcert) &&
#ifdef USE_TLS_SRP
- !Curl_timestrcmp(data->username, needle->username) &&
- !Curl_timestrcmp(data->password, needle->password) &&
- (data->authtype == needle->authtype) &&
+ !Curl_timestrcmp(c1->username, c2->username) &&
+ !Curl_timestrcmp(c1->password, c2->password) &&
#endif
- Curl_safe_strcasecompare(data->cipher_list, needle->cipher_list) &&
- Curl_safe_strcasecompare(data->cipher_list13, needle->cipher_list13) &&
- Curl_safe_strcasecompare(data->curves, needle->curves) &&
- Curl_safe_strcasecompare(data->CRLfile, needle->CRLfile) &&
- Curl_safe_strcasecompare(data->pinned_key, needle->pinned_key))
+ strcasecompare(c1->cipher_list, c2->cipher_list) &&
+ strcasecompare(c1->cipher_list13, c2->cipher_list13) &&
+ strcasecompare(c1->curves, c2->curves) &&
+ strcasecompare(c1->CRLfile, c2->CRLfile) &&
+ strcasecompare(c1->pinned_key, c2->pinned_key))
return TRUE;
return FALSE;
}
-bool
-Curl_clone_primary_ssl_config(struct ssl_primary_config *source,
- struct ssl_primary_config *dest)
+bool Curl_ssl_conn_config_match(struct Curl_easy *data,
+ struct connectdata *candidate,
+ bool proxy)
+{
+#ifndef CURL_DISABLE_PROXY
+ if(proxy)
+ return match_ssl_primary_config(data, &data->set.proxy_ssl.primary,
+ &candidate->proxy_ssl_config);
+#else
+ (void)proxy;
+#endif
+ return match_ssl_primary_config(data, &data->set.ssl.primary,
+ &candidate->ssl_config);
+}
+
+static bool clone_ssl_primary_config(struct ssl_primary_config *source,
+ struct ssl_primary_config *dest)
{
dest->version = source->version;
dest->version_max = source->version_max;
@@ -171,9 +230,6 @@ Curl_clone_primary_ssl_config(struct ssl_primary_config *source,
dest->verifystatus = source->verifystatus;
dest->sessionid = source->sessionid;
dest->ssl_options = source->ssl_options;
-#ifdef USE_TLS_SRP
- dest->authtype = source->authtype;
-#endif
CLONE_BLOB(cert_blob);
CLONE_BLOB(ca_info_blob);
@@ -195,7 +251,7 @@ Curl_clone_primary_ssl_config(struct ssl_primary_config *source,
return TRUE;
}
-void Curl_free_primary_ssl_config(struct ssl_primary_config *sslc)
+static void Curl_free_primary_ssl_config(struct ssl_primary_config *sslc)
{
Curl_safefree(sslc->CApath);
Curl_safefree(sslc->CAfile);
@@ -215,6 +271,111 @@ void Curl_free_primary_ssl_config(struct ssl_primary_config *sslc)
#endif
}
+CURLcode Curl_ssl_easy_config_complete(struct Curl_easy *data)
+{
+ data->set.ssl.primary.CApath = data->set.str[STRING_SSL_CAPATH];
+ data->set.ssl.primary.CAfile = data->set.str[STRING_SSL_CAFILE];
+ data->set.ssl.primary.CRLfile = data->set.str[STRING_SSL_CRLFILE];
+ data->set.ssl.primary.issuercert = data->set.str[STRING_SSL_ISSUERCERT];
+ data->set.ssl.primary.issuercert_blob = data->set.blobs[BLOB_SSL_ISSUERCERT];
+ data->set.ssl.primary.cipher_list =
+ data->set.str[STRING_SSL_CIPHER_LIST];
+ data->set.ssl.primary.cipher_list13 =
+ data->set.str[STRING_SSL_CIPHER13_LIST];
+ data->set.ssl.primary.pinned_key =
+ data->set.str[STRING_SSL_PINNEDPUBLICKEY];
+ data->set.ssl.primary.cert_blob = data->set.blobs[BLOB_CERT];
+ data->set.ssl.primary.ca_info_blob = data->set.blobs[BLOB_CAINFO];
+ data->set.ssl.primary.curves = data->set.str[STRING_SSL_EC_CURVES];
+#ifdef USE_TLS_SRP
+ data->set.ssl.primary.username = data->set.str[STRING_TLSAUTH_USERNAME];
+ data->set.ssl.primary.password = data->set.str[STRING_TLSAUTH_PASSWORD];
+#endif
+ data->set.ssl.cert_type = data->set.str[STRING_CERT_TYPE];
+ data->set.ssl.key = data->set.str[STRING_KEY];
+ data->set.ssl.key_type = data->set.str[STRING_KEY_TYPE];
+ data->set.ssl.key_passwd = data->set.str[STRING_KEY_PASSWD];
+ data->set.ssl.primary.clientcert = data->set.str[STRING_CERT];
+ data->set.ssl.key_blob = data->set.blobs[BLOB_KEY];
+
+#ifndef CURL_DISABLE_PROXY
+ data->set.proxy_ssl.primary.CApath = data->set.str[STRING_SSL_CAPATH_PROXY];
+ data->set.proxy_ssl.primary.CAfile = data->set.str[STRING_SSL_CAFILE_PROXY];
+ data->set.proxy_ssl.primary.cipher_list =
+ data->set.str[STRING_SSL_CIPHER_LIST_PROXY];
+ data->set.proxy_ssl.primary.cipher_list13 =
+ data->set.str[STRING_SSL_CIPHER13_LIST_PROXY];
+ data->set.proxy_ssl.primary.pinned_key =
+ data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY];
+ data->set.proxy_ssl.primary.cert_blob = data->set.blobs[BLOB_CERT_PROXY];
+ data->set.proxy_ssl.primary.ca_info_blob =
+ data->set.blobs[BLOB_CAINFO_PROXY];
+ data->set.proxy_ssl.primary.issuercert =
+ data->set.str[STRING_SSL_ISSUERCERT_PROXY];
+ data->set.proxy_ssl.primary.issuercert_blob =
+ data->set.blobs[BLOB_SSL_ISSUERCERT_PROXY];
+ data->set.proxy_ssl.primary.CRLfile =
+ data->set.str[STRING_SSL_CRLFILE_PROXY];
+ data->set.proxy_ssl.cert_type = data->set.str[STRING_CERT_TYPE_PROXY];
+ data->set.proxy_ssl.key = data->set.str[STRING_KEY_PROXY];
+ data->set.proxy_ssl.key_type = data->set.str[STRING_KEY_TYPE_PROXY];
+ data->set.proxy_ssl.key_passwd = data->set.str[STRING_KEY_PASSWD_PROXY];
+ data->set.proxy_ssl.primary.clientcert = data->set.str[STRING_CERT_PROXY];
+ data->set.proxy_ssl.key_blob = data->set.blobs[BLOB_KEY_PROXY];
+#ifdef USE_TLS_SRP
+ data->set.proxy_ssl.primary.username =
+ data->set.str[STRING_TLSAUTH_USERNAME_PROXY];
+ data->set.proxy_ssl.primary.password =
+ data->set.str[STRING_TLSAUTH_PASSWORD_PROXY];
+#endif
+#endif /* CURL_DISABLE_PROXY */
+
+ return CURLE_OK;
+}
+
+CURLcode Curl_ssl_conn_config_init(struct Curl_easy *data,
+ struct connectdata *conn)
+{
+ /* Clone "primary" SSL configurations from the esay handle to
+ * the connection. They are used for connection cache matching and
+ * probably outlive the easy handle */
+ if(!clone_ssl_primary_config(&data->set.ssl.primary, &conn->ssl_config))
+ return CURLE_OUT_OF_MEMORY;
+#ifndef CURL_DISABLE_PROXY
+ if(!clone_ssl_primary_config(&data->set.proxy_ssl.primary,
+ &conn->proxy_ssl_config))
+ return CURLE_OUT_OF_MEMORY;
+#endif
+ return CURLE_OK;
+}
+
+void Curl_ssl_conn_config_cleanup(struct connectdata *conn)
+{
+ Curl_free_primary_ssl_config(&conn->ssl_config);
+#ifndef CURL_DISABLE_PROXY
+ Curl_free_primary_ssl_config(&conn->proxy_ssl_config);
+#endif
+}
+
+void Curl_ssl_conn_config_update(struct Curl_easy *data, bool for_proxy)
+{
+ /* May be called on an easy that has no connection yet */
+ if(data->conn) {
+ struct ssl_primary_config *src, *dest;
+#ifndef CURL_DISABLE_PROXY
+ src = for_proxy? &data->set.proxy_ssl.primary : &data->set.ssl.primary;
+ dest = for_proxy? &data->conn->proxy_ssl_config : &data->conn->ssl_config;
+#else
+ (void)for_proxy;
+ src = &data->set.ssl.primary;
+ dest = &data->conn->ssl_config;
+#endif
+ dest->verifyhost = src->verifyhost;
+ dest->verifypeer = src->verifypeer;
+ dest->verifystatus = src->verifystatus;
+ }
+}
+
#ifdef USE_SSL
static int multissl_setup(const struct Curl_ssl *backend);
#endif
@@ -270,8 +431,8 @@ void Curl_ssl_cleanup(void)
static bool ssl_prefs_check(struct Curl_easy *data)
{
/* check for CURLOPT_SSLVERSION invalid parameter value */
- const long sslver = data->set.ssl.primary.version;
- if((sslver < 0) || (sslver >= CURL_SSLVERSION_LAST)) {
+ const unsigned char sslver = data->set.ssl.primary.version;
+ if(sslver >= CURL_SSLVERSION_LAST) {
failf(data, "Unrecognized parameter value passed via CURLOPT_SSLVERSION");
return FALSE;
}
@@ -291,89 +452,62 @@ static bool ssl_prefs_check(struct Curl_easy *data)
return TRUE;
}
-#ifndef CURL_DISABLE_PROXY
-static CURLcode
-ssl_connect_init_proxy(struct connectdata *conn, int sockindex)
+static struct ssl_connect_data *cf_ctx_new(struct Curl_easy *data,
+ const struct alpn_spec *alpn)
{
- DEBUGASSERT(conn->bits.proxy_ssl_connected[sockindex]);
- if(ssl_connection_complete == conn->ssl[sockindex].state &&
- !conn->proxy_ssl[sockindex].use) {
- struct ssl_backend_data *pbdata;
+ struct ssl_connect_data *ctx;
- if(!(Curl_ssl->supports & SSLSUPP_HTTPS_PROXY))
- return CURLE_NOT_BUILT_IN;
-
- /* The pointers to the ssl backend data, which is opaque here, are swapped
- rather than move the contents. */
- pbdata = conn->proxy_ssl[sockindex].backend;
- conn->proxy_ssl[sockindex] = conn->ssl[sockindex];
-
- DEBUGASSERT(pbdata != NULL);
+ (void)data;
+ ctx = calloc(1, sizeof(*ctx));
+ if(!ctx)
+ return NULL;
- memset(&conn->ssl[sockindex], 0, sizeof(conn->ssl[sockindex]));
- memset(pbdata, 0, Curl_ssl->sizeof_ssl_backend_data);
+ ctx->alpn = alpn;
+ ctx->backend = calloc(1, Curl_ssl->sizeof_ssl_backend_data);
+ if(!ctx->backend) {
+ free(ctx);
+ return NULL;
+ }
+ return ctx;
+}
- conn->ssl[sockindex].backend = pbdata;
+static void cf_ctx_free(struct ssl_connect_data *ctx)
+{
+ if(ctx) {
+ free(ctx->backend);
+ free(ctx);
}
- return CURLE_OK;
}
-#endif
-CURLcode
-Curl_ssl_connect(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
+static CURLcode ssl_connect(struct Curl_cfilter *cf, struct Curl_easy *data)
{
+ struct ssl_connect_data *connssl = cf->ctx;
CURLcode result;
-#ifndef CURL_DISABLE_PROXY
- if(conn->bits.proxy_ssl_connected[sockindex]) {
- result = ssl_connect_init_proxy(conn, sockindex);
- if(result)
- return result;
- }
-#endif
-
if(!ssl_prefs_check(data))
return CURLE_SSL_CONNECT_ERROR;
/* mark this is being ssl-enabled from here on. */
- conn->ssl[sockindex].use = TRUE;
- conn->ssl[sockindex].state = ssl_connection_negotiating;
+ connssl->state = ssl_connection_negotiating;
- result = Curl_ssl->connect_blocking(data, conn, sockindex);
+ result = Curl_ssl->connect_blocking(cf, data);
- if(!result)
- Curl_pgrsTime(data, TIMER_APPCONNECT); /* SSL is connected */
- else
- conn->ssl[sockindex].use = FALSE;
+ if(!result) {
+ DEBUGASSERT(connssl->state == ssl_connection_complete);
+ }
return result;
}
-CURLcode
-Curl_ssl_connect_nonblocking(struct Curl_easy *data, struct connectdata *conn,
- bool isproxy, int sockindex, bool *done)
+static CURLcode
+ssl_connect_nonblocking(struct Curl_cfilter *cf, struct Curl_easy *data,
+ bool *done)
{
- CURLcode result;
-
-#ifndef CURL_DISABLE_PROXY
- if(conn->bits.proxy_ssl_connected[sockindex]) {
- result = ssl_connect_init_proxy(conn, sockindex);
- if(result)
- return result;
- }
-#endif
if(!ssl_prefs_check(data))
return CURLE_SSL_CONNECT_ERROR;
/* mark this is being ssl requested from here on. */
- conn->ssl[sockindex].use = TRUE;
- result = Curl_ssl->connect_nonblocking(data, conn, sockindex, done);
- if(result)
- conn->ssl[sockindex].use = FALSE;
- else if(*done && !isproxy)
- Curl_pgrsTime(data, TIMER_APPCONNECT); /* SSL is connected */
- return result;
+ return Curl_ssl->connect_nonblocking(cf, data, done);
}
/*
@@ -398,43 +532,27 @@ void Curl_ssl_sessionid_unlock(struct Curl_easy *data)
* Check if there's a session ID for the given connection in the cache, and if
* there's one suitable, it is provided. Returns TRUE when no entry matched.
*/
-bool Curl_ssl_getsessionid(struct Curl_easy *data,
- struct connectdata *conn,
- const bool isProxy,
+bool Curl_ssl_getsessionid(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
void **ssl_sessionid,
- size_t *idsize, /* set 0 if unknown */
- int sockindex)
+ size_t *idsize) /* set 0 if unknown */
{
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
+ struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data);
struct Curl_ssl_session *check;
size_t i;
long *general_age;
bool no_match = TRUE;
-#ifndef CURL_DISABLE_PROXY
- struct ssl_primary_config * const ssl_config = isProxy ?
- &conn->proxy_ssl_config :
- &conn->ssl_config;
- const char * const name = isProxy ?
- conn->http_proxy.host.name : conn->host.name;
- int port = isProxy ? (int)conn->port : conn->remote_port;
-#else
- /* no proxy support */
- struct ssl_primary_config * const ssl_config = &conn->ssl_config;
- const char * const name = conn->host.name;
- int port = conn->remote_port;
-#endif
- (void)sockindex;
*ssl_sessionid = NULL;
-
-#ifdef CURL_DISABLE_PROXY
- if(isProxy)
+ if(!ssl_config)
return TRUE;
-#endif
- DEBUGASSERT(SSL_SET_OPTION(primary.sessionid));
+ DEBUGASSERT(ssl_config->primary.sessionid);
- if(!SSL_SET_OPTION(primary.sessionid) || !data->state.session)
- /* session ID re-use is disabled or the session cache has not been
+ if(!ssl_config->primary.sessionid || !data->state.session)
+ /* session ID reuse is disabled or the session cache has not been
setup */
return TRUE;
@@ -449,16 +567,16 @@ bool Curl_ssl_getsessionid(struct Curl_easy *data,
if(!check->sessionid)
/* not session ID means blank entry */
continue;
- if(strcasecompare(name, check->name) &&
- ((!conn->bits.conn_to_host && !check->conn_to_host) ||
- (conn->bits.conn_to_host && check->conn_to_host &&
- strcasecompare(conn->conn_to_host.name, check->conn_to_host))) &&
- ((!conn->bits.conn_to_port && check->conn_to_port == -1) ||
- (conn->bits.conn_to_port && check->conn_to_port != -1 &&
- conn->conn_to_port == check->conn_to_port)) &&
- (port == check->remote_port) &&
- strcasecompare(conn->handler->scheme, check->scheme) &&
- Curl_ssl_config_matches(ssl_config, &check->ssl_config)) {
+ if(strcasecompare(connssl->peer.hostname, check->name) &&
+ ((!cf->conn->bits.conn_to_host && !check->conn_to_host) ||
+ (cf->conn->bits.conn_to_host && check->conn_to_host &&
+ strcasecompare(cf->conn->conn_to_host.name, check->conn_to_host))) &&
+ ((!cf->conn->bits.conn_to_port && check->conn_to_port == -1) ||
+ (cf->conn->bits.conn_to_port && check->conn_to_port != -1 &&
+ cf->conn->conn_to_port == check->conn_to_port)) &&
+ (connssl->port == check->remote_port) &&
+ strcasecompare(cf->conn->handler->scheme, check->scheme) &&
+ match_ssl_primary_config(data, conn_config, &check->ssl_config)) {
/* yes, we have a session ID! */
(*general_age)++; /* increase general age */
check->age = *general_age; /* set this as used in this age */
@@ -472,8 +590,9 @@ bool Curl_ssl_getsessionid(struct Curl_easy *data,
DEBUGF(infof(data, "%s Session ID in cache for %s %s://%s:%d",
no_match? "Didn't find": "Found",
- isProxy ? "proxy" : "host",
- conn->handler->scheme, name, port));
+ Curl_ssl_cf_is_proxy(cf) ? "proxy" : "host",
+ cf->conn->handler->scheme, connssl->peer.hostname,
+ connssl->port));
return no_match;
}
@@ -521,14 +640,15 @@ void Curl_ssl_delsessionid(struct Curl_easy *data, void *ssl_sessionid)
* layer. Curl_XXXX_session_free() will be called to free/kill the session ID
* later on.
*/
-CURLcode Curl_ssl_addsessionid(struct Curl_easy *data,
- struct connectdata *conn,
- const bool isProxy,
+CURLcode Curl_ssl_addsessionid(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
void *ssl_sessionid,
size_t idsize,
- int sockindex,
bool *added)
{
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data);
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
size_t i;
struct Curl_ssl_session *store;
long oldest_age;
@@ -536,17 +656,6 @@ CURLcode Curl_ssl_addsessionid(struct Curl_easy *data,
char *clone_conn_to_host;
int conn_to_port;
long *general_age;
-#ifndef CURL_DISABLE_PROXY
- struct ssl_primary_config * const ssl_config = isProxy ?
- &conn->proxy_ssl_config :
- &conn->ssl_config;
- const char *hostname = isProxy ? conn->http_proxy.host.name :
- conn->host.name;
-#else
- struct ssl_primary_config * const ssl_config = &conn->ssl_config;
- const char *hostname = conn->host.name;
-#endif
- (void)sockindex;
if(added)
*added = FALSE;
@@ -556,14 +665,15 @@ CURLcode Curl_ssl_addsessionid(struct Curl_easy *data,
store = &data->state.session[0];
oldest_age = data->state.session[0].age; /* zero if unused */
- DEBUGASSERT(SSL_SET_OPTION(primary.sessionid));
+ (void)ssl_config;
+ DEBUGASSERT(ssl_config->primary.sessionid);
- clone_host = strdup(hostname);
+ clone_host = strdup(connssl->peer.hostname);
if(!clone_host)
return CURLE_OUT_OF_MEMORY; /* bail out */
- if(conn->bits.conn_to_host) {
- clone_conn_to_host = strdup(conn->conn_to_host.name);
+ if(cf->conn->bits.conn_to_host) {
+ clone_conn_to_host = strdup(cf->conn->conn_to_host.name);
if(!clone_conn_to_host) {
free(clone_host);
return CURLE_OUT_OF_MEMORY; /* bail out */
@@ -572,8 +682,8 @@ CURLcode Curl_ssl_addsessionid(struct Curl_easy *data,
else
clone_conn_to_host = NULL;
- if(conn->bits.conn_to_port)
- conn_to_port = conn->conn_to_port;
+ if(cf->conn->bits.conn_to_port)
+ conn_to_port = cf->conn->conn_to_port;
else
conn_to_port = -1;
@@ -613,10 +723,10 @@ CURLcode Curl_ssl_addsessionid(struct Curl_easy *data,
store->conn_to_host = clone_conn_to_host; /* clone connect to host name */
store->conn_to_port = conn_to_port; /* connect to port number */
/* port number */
- store->remote_port = isProxy ? (int)conn->port : conn->remote_port;
- store->scheme = conn->handler->scheme;
+ store->remote_port = connssl->port;
+ store->scheme = cf->conn->handler->scheme;
- if(!Curl_clone_primary_ssl_config(ssl_config, &store->ssl_config)) {
+ if(!clone_ssl_primary_config(conn_config, &store->ssl_config)) {
Curl_free_primary_ssl_config(&store->ssl_config);
store->sessionid = NULL; /* let caller free sessionid */
free(clone_host);
@@ -629,30 +739,14 @@ CURLcode Curl_ssl_addsessionid(struct Curl_easy *data,
DEBUGF(infof(data, "Added Session ID to cache for %s://%s:%d [%s]",
store->scheme, store->name, store->remote_port,
- isProxy ? "PROXY" : "server"));
+ Curl_ssl_cf_is_proxy(cf) ? "PROXY" : "server"));
return CURLE_OK;
}
-void Curl_ssl_associate_conn(struct Curl_easy *data,
- struct connectdata *conn)
+void Curl_free_multi_ssl_backend_data(struct multi_ssl_backend_data *mbackend)
{
- if(Curl_ssl->associate_connection) {
- Curl_ssl->associate_connection(data, conn, FIRSTSOCKET);
- if((conn->sock[SECONDARYSOCKET] != CURL_SOCKET_BAD) &&
- conn->bits.sock_accepted)
- Curl_ssl->associate_connection(data, conn, SECONDARYSOCKET);
- }
-}
-
-void Curl_ssl_detach_conn(struct Curl_easy *data,
- struct connectdata *conn)
-{
- if(Curl_ssl->disassociate_connection) {
- Curl_ssl->disassociate_connection(data, FIRSTSOCKET);
- if((conn->sock[SECONDARYSOCKET] != CURL_SOCKET_BAD) &&
- conn->bits.sock_accepted)
- Curl_ssl->disassociate_connection(data, SECONDARYSOCKET);
- }
+ if(Curl_ssl->free_multi_ssl_backend_data && mbackend)
+ Curl_ssl->free_multi_ssl_backend_data(mbackend);
}
void Curl_ssl_close_all(struct Curl_easy *data)
@@ -671,45 +765,21 @@ void Curl_ssl_close_all(struct Curl_easy *data)
Curl_ssl->close_all(data);
}
-int Curl_ssl_getsock(struct connectdata *conn, curl_socket_t *socks)
+void Curl_ssl_adjust_pollset(struct Curl_cfilter *cf, struct Curl_easy *data,
+ struct easy_pollset *ps)
{
- struct ssl_connect_data *connssl = &conn->ssl[FIRSTSOCKET];
-
- if(connssl->connecting_state == ssl_connect_2_writing) {
- /* write mode */
- socks[0] = conn->sock[FIRSTSOCKET];
- return GETSOCK_WRITESOCK(0);
- }
- if(connssl->connecting_state == ssl_connect_2_reading) {
- /* read mode */
- socks[0] = conn->sock[FIRSTSOCKET];
- return GETSOCK_READSOCK(0);
+ if(!cf->connected) {
+ struct ssl_connect_data *connssl = cf->ctx;
+ curl_socket_t sock = Curl_conn_cf_get_socket(cf->next, data);
+ if(sock != CURL_SOCKET_BAD) {
+ if(connssl->connecting_state == ssl_connect_2_writing) {
+ Curl_pollset_set_out_only(data, ps, sock);
+ }
+ else {
+ Curl_pollset_set_in_only(data, ps, sock);
+ }
+ }
}
-
- return GETSOCK_BLANK;
-}
-
-void Curl_ssl_close(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
-{
- DEBUGASSERT((sockindex <= 1) && (sockindex >= -1));
- Curl_ssl->close_one(data, conn, sockindex);
- conn->ssl[sockindex].state = ssl_connection_none;
-}
-
-CURLcode Curl_ssl_shutdown(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
-{
- if(Curl_ssl->shut_down(data, conn, sockindex))
- return CURLE_SSL_SHUTDOWN_FAILED;
-
- conn->ssl[sockindex].use = FALSE; /* get back to ordinary socket usage */
- conn->ssl[sockindex].state = ssl_connection_none;
-
- conn->recv[sockindex] = Curl_recv_plain;
- conn->send[sockindex] = Curl_send_plain;
-
- return CURLE_OK;
}
/* Selects an SSL crypto engine
@@ -766,25 +836,6 @@ void Curl_ssl_version(char *buffer, size_t size)
#endif
}
-/*
- * This function tries to determine connection status.
- *
- * Return codes:
- * 1 means the connection is still in place
- * 0 means the connection has been closed
- * -1 means the connection status is unknown
- */
-int Curl_ssl_check_cxn(struct connectdata *conn)
-{
- return Curl_ssl->check_cxn(conn);
-}
-
-bool Curl_ssl_data_pending(const struct connectdata *conn,
- int connindex)
-{
- return Curl_ssl->data_pending(conn, connindex);
-}
-
void Curl_ssl_free_certinfo(struct Curl_easy *data)
{
struct curl_certinfo *ci = &data->info.certs;
@@ -862,20 +913,6 @@ CURLcode Curl_ssl_push_certinfo_len(struct Curl_easy *data,
return result;
}
-/*
- * This is a convenience function for push_certinfo_len that takes a zero
- * terminated value.
- */
-CURLcode Curl_ssl_push_certinfo(struct Curl_easy *data,
- int certnum,
- const char *label,
- const char *value)
-{
- size_t valuelen = strlen(value);
-
- return Curl_ssl_push_certinfo_len(data, certnum, label, value, valuelen);
-}
-
CURLcode Curl_ssl_random(struct Curl_easy *data,
unsigned char *entropy,
size_t length)
@@ -884,32 +921,6 @@ CURLcode Curl_ssl_random(struct Curl_easy *data,
}
/*
- * Curl_ssl_snihost() converts the input host name to a suitable SNI name put
- * in data->state.buffer. Returns a pointer to the name (or NULL if a problem)
- * and stores the new length in 'olen'.
- *
- * SNI fields must not have any trailing dot and while RFC 6066 section 3 says
- * the SNI field is case insensitive, browsers always send the data lowercase
- * and subsequently there are numerous servers out there that don't work
- * unless the name is lowercased.
- */
-
-char *Curl_ssl_snihost(struct Curl_easy *data, const char *host, size_t *olen)
-{
- size_t len = strlen(host);
- if(len && (host[len-1] == '.'))
- len--;
- if(len >= data->set.buffer_size)
- return NULL;
-
- Curl_strntolower(data->state.buffer, host, len);
- data->state.buffer[len] = 0;
- if(olen)
- *olen = len;
- return data->state.buffer;
-}
-
-/*
* Public key pem to der conversion
*/
@@ -978,6 +989,9 @@ CURLcode Curl_pin_peer_pubkey(struct Curl_easy *data,
FILE *fp;
unsigned char *buf = NULL, *pem_ptr = NULL;
CURLcode result = CURLE_SSL_PINNEDPUBKEYNOTMATCH;
+#ifdef CURL_DISABLE_VERBOSE_STRINGS
+ (void)data;
+#endif
/* if a path wasn't specified, don't pin */
if(!pinnedpubkey)
@@ -988,8 +1002,8 @@ CURLcode Curl_pin_peer_pubkey(struct Curl_easy *data,
/* only do this if pinnedpubkey starts with "sha256//", length 8 */
if(strncmp(pinnedpubkey, "sha256//", 8) == 0) {
CURLcode encode;
- size_t encodedlen, pinkeylen;
- char *encoded, *pinkeycopy, *begin_pos, *end_pos;
+ size_t encodedlen = 0, pinkeylen;
+ char *encoded = NULL, *pinkeycopy, *begin_pos, *end_pos;
unsigned char *sha256sumdigest;
if(!Curl_ssl->sha256sum) {
@@ -1002,14 +1016,12 @@ CURLcode Curl_pin_peer_pubkey(struct Curl_easy *data,
if(!sha256sumdigest)
return CURLE_OUT_OF_MEMORY;
encode = Curl_ssl->sha256sum(pubkey, pubkeylen,
- sha256sumdigest, CURL_SHA256_DIGEST_LENGTH);
-
- if(encode != CURLE_OK)
- return encode;
+ sha256sumdigest, CURL_SHA256_DIGEST_LENGTH);
- encode = Curl_base64_encode((char *)sha256sumdigest,
- CURL_SHA256_DIGEST_LENGTH, &encoded,
- &encodedlen);
+ if(!encode)
+ encode = Curl_base64_encode((char *)sha256sumdigest,
+ CURL_SHA256_DIGEST_LENGTH, &encoded,
+ &encodedlen);
Curl_safefree(sha256sumdigest);
if(encode)
@@ -1138,20 +1150,13 @@ bool Curl_ssl_cert_status_request(void)
/*
* Check whether the SSL backend supports false start.
*/
-bool Curl_ssl_false_start(void)
+bool Curl_ssl_false_start(struct Curl_easy *data)
{
+ (void)data;
return Curl_ssl->false_start();
}
/*
- * Check whether the SSL backend supports setting TLS 1.3 cipher suites
- */
-bool Curl_ssl_tls13_ciphersuites(void)
-{
- return Curl_ssl->supports & SSLSUPP_TLS13_CIPHERSUITES;
-}
-
-/*
* Default implementations for unsupported functions.
*/
@@ -1163,19 +1168,18 @@ int Curl_none_init(void)
void Curl_none_cleanup(void)
{ }
-int Curl_none_shutdown(struct Curl_easy *data UNUSED_PARAM,
- struct connectdata *conn UNUSED_PARAM,
- int sockindex UNUSED_PARAM)
+int Curl_none_shutdown(struct Curl_cfilter *cf UNUSED_PARAM,
+ struct Curl_easy *data UNUSED_PARAM)
{
(void)data;
- (void)conn;
- (void)sockindex;
+ (void)cf;
return 0;
}
-int Curl_none_check_cxn(struct connectdata *conn UNUSED_PARAM)
+int Curl_none_check_cxn(struct Curl_cfilter *cf, struct Curl_easy *data)
{
- (void)conn;
+ (void)cf;
+ (void)data;
return -1;
}
@@ -1199,11 +1203,11 @@ void Curl_none_session_free(void *ptr UNUSED_PARAM)
(void)ptr;
}
-bool Curl_none_data_pending(const struct connectdata *conn UNUSED_PARAM,
- int connindex UNUSED_PARAM)
+bool Curl_none_data_pending(struct Curl_cfilter *cf UNUSED_PARAM,
+ const struct Curl_easy *data UNUSED_PARAM)
{
- (void)conn;
- (void)connindex;
+ (void)cf;
+ (void)data;
return 0;
}
@@ -1244,28 +1248,30 @@ static int multissl_init(void)
return Curl_ssl->init();
}
-static CURLcode multissl_connect(struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
+static CURLcode multissl_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
if(multissl_setup(NULL))
return CURLE_FAILED_INIT;
- return Curl_ssl->connect_blocking(data, conn, sockindex);
+ return Curl_ssl->connect_blocking(cf, data);
}
-static CURLcode multissl_connect_nonblocking(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex, bool *done)
+static CURLcode multissl_connect_nonblocking(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool *done)
{
if(multissl_setup(NULL))
return CURLE_FAILED_INIT;
- return Curl_ssl->connect_nonblocking(data, conn, sockindex, done);
+ return Curl_ssl->connect_nonblocking(cf, data, done);
}
-static int multissl_getsock(struct connectdata *conn, curl_socket_t *socks)
+static void multissl_adjust_pollset(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct easy_pollset *ps)
{
if(multissl_setup(NULL))
- return 0;
- return Curl_ssl->getsock(conn, socks);
+ return;
+ Curl_ssl->adjust_pollset(cf, data, ps);
}
static void *multissl_get_internals(struct ssl_connect_data *connssl,
@@ -1276,12 +1282,30 @@ static void *multissl_get_internals(struct ssl_connect_data *connssl,
return Curl_ssl->get_internals(connssl, info);
}
-static void multissl_close(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
+static void multissl_close(struct Curl_cfilter *cf, struct Curl_easy *data)
{
if(multissl_setup(NULL))
return;
- Curl_ssl->close_one(data, conn, sockindex);
+ Curl_ssl->close(cf, data);
+}
+
+static ssize_t multissl_recv_plain(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ char *buf, size_t len, CURLcode *code)
+{
+ if(multissl_setup(NULL))
+ return CURLE_FAILED_INIT;
+ return Curl_ssl->recv_plain(cf, data, buf, len, code);
+}
+
+static ssize_t multissl_send_plain(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ const void *mem, size_t len,
+ CURLcode *code)
+{
+ if(multissl_setup(NULL))
+ return CURLE_FAILED_INIT;
+ return Curl_ssl->send_plain(cf, data, mem, len, code);
}
static const struct Curl_ssl Curl_ssl_multi = {
@@ -1299,7 +1323,7 @@ static const struct Curl_ssl Curl_ssl_multi = {
Curl_none_cert_status_request, /* cert_status_request */
multissl_connect, /* connect */
multissl_connect_nonblocking, /* connect_nonblocking */
- multissl_getsock, /* getsock */
+ multissl_adjust_pollset, /* adjust_pollset */
multissl_get_internals, /* get_internals */
multissl_close, /* close_one */
Curl_none_close_all, /* close_all */
@@ -1310,7 +1334,10 @@ static const struct Curl_ssl Curl_ssl_multi = {
Curl_none_false_start, /* false_start */
NULL, /* sha256sum */
NULL, /* associate_connection */
- NULL /* disassociate_connection */
+ NULL, /* disassociate_connection */
+ NULL, /* free_multi_ssl_backend_data */
+ multissl_recv_plain, /* recv decrypted data */
+ multissl_send_plain, /* send data to encrypt */
};
const struct Curl_ssl *Curl_ssl =
@@ -1322,12 +1349,8 @@ const struct Curl_ssl *Curl_ssl =
&Curl_ssl_sectransp;
#elif defined(USE_GNUTLS)
&Curl_ssl_gnutls;
-#elif defined(USE_GSKIT)
- &Curl_ssl_gskit;
#elif defined(USE_MBEDTLS)
&Curl_ssl_mbedtls;
-#elif defined(USE_NSS)
- &Curl_ssl_nss;
#elif defined(USE_RUSTLS)
&Curl_ssl_rustls;
#elif defined(USE_OPENSSL)
@@ -1350,15 +1373,9 @@ static const struct Curl_ssl *available_backends[] = {
#if defined(USE_GNUTLS)
&Curl_ssl_gnutls,
#endif
-#if defined(USE_GSKIT)
- &Curl_ssl_gskit,
-#endif
#if defined(USE_MBEDTLS)
&Curl_ssl_mbedtls,
#endif
-#if defined(USE_NSS)
- &Curl_ssl_nss,
-#endif
#if defined(USE_OPENSSL)
&Curl_ssl_openssl,
#endif
@@ -1498,3 +1515,643 @@ CURLsslset Curl_init_sslset_nolock(curl_sslbackend id, const char *name,
}
#endif /* !USE_SSL */
+
+#ifdef USE_SSL
+
+void Curl_ssl_peer_cleanup(struct ssl_peer *peer)
+{
+ if(peer->dispname != peer->hostname)
+ free(peer->dispname);
+ free(peer->sni);
+ free(peer->hostname);
+ peer->hostname = peer->sni = peer->dispname = NULL;
+ peer->is_ip_address = FALSE;
+}
+
+static void cf_close(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct ssl_connect_data *connssl = cf->ctx;
+ if(connssl) {
+ Curl_ssl->close(cf, data);
+ connssl->state = ssl_connection_none;
+ Curl_ssl_peer_cleanup(&connssl->peer);
+ }
+ cf->connected = FALSE;
+}
+
+static int is_ip_address(const char *hostname)
+{
+#ifdef ENABLE_IPV6
+ struct in6_addr addr;
+#else
+ struct in_addr addr;
+#endif
+ return (hostname && hostname[0] && (Curl_inet_pton(AF_INET, hostname, &addr)
+#ifdef ENABLE_IPV6
+ || Curl_inet_pton(AF_INET6, hostname, &addr)
+#endif
+ ));
+}
+
+CURLcode Curl_ssl_peer_init(struct ssl_peer *peer, struct Curl_cfilter *cf)
+{
+ struct ssl_connect_data *connssl = cf->ctx;
+ const char *ehostname, *edispname;
+ int eport;
+
+ /* We need the hostname for SNI negotiation. Once handshaked, this
+ * remains the SNI hostname for the TLS connection. But when the
+ * connection is reused, the settings in cf->conn might change.
+ * So we keep a copy of the hostname we use for SNI.
+ */
+#ifndef CURL_DISABLE_PROXY
+ if(Curl_ssl_cf_is_proxy(cf)) {
+ ehostname = cf->conn->http_proxy.host.name;
+ edispname = cf->conn->http_proxy.host.dispname;
+ eport = cf->conn->http_proxy.port;
+ }
+ else
+#endif
+ {
+ ehostname = cf->conn->host.name;
+ edispname = cf->conn->host.dispname;
+ eport = cf->conn->remote_port;
+ }
+
+ /* change if ehostname changed */
+ if(ehostname && (!peer->hostname
+ || strcmp(ehostname, peer->hostname))) {
+ Curl_ssl_peer_cleanup(peer);
+ peer->hostname = strdup(ehostname);
+ if(!peer->hostname) {
+ Curl_ssl_peer_cleanup(peer);
+ return CURLE_OUT_OF_MEMORY;
+ }
+ if(!edispname || !strcmp(ehostname, edispname))
+ peer->dispname = peer->hostname;
+ else {
+ peer->dispname = strdup(edispname);
+ if(!peer->dispname) {
+ Curl_ssl_peer_cleanup(peer);
+ return CURLE_OUT_OF_MEMORY;
+ }
+ }
+
+ peer->sni = NULL;
+ peer->is_ip_address = is_ip_address(peer->hostname)? TRUE : FALSE;
+ if(peer->hostname[0] && !peer->is_ip_address) {
+ /* not an IP address, normalize according to RCC 6066 ch. 3,
+ * max len of SNI is 2^16-1, no trailing dot */
+ size_t len = strlen(peer->hostname);
+ if(len && (peer->hostname[len-1] == '.'))
+ len--;
+ if(len < USHRT_MAX) {
+ peer->sni = calloc(1, len + 1);
+ if(!peer->sni) {
+ Curl_ssl_peer_cleanup(peer);
+ return CURLE_OUT_OF_MEMORY;
+ }
+ Curl_strntolower(peer->sni, peer->hostname, len);
+ peer->sni[len] = 0;
+ }
+ }
+
+ }
+ connssl->port = eport;
+ return CURLE_OK;
+}
+
+static void ssl_cf_destroy(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct cf_call_data save;
+
+ CF_DATA_SAVE(save, cf, data);
+ cf_close(cf, data);
+ CF_DATA_RESTORE(cf, save);
+ cf_ctx_free(cf->ctx);
+ cf->ctx = NULL;
+}
+
+static void ssl_cf_close(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
+{
+ struct cf_call_data save;
+
+ CF_DATA_SAVE(save, cf, data);
+ cf_close(cf, data);
+ if(cf->next)
+ cf->next->cft->do_close(cf->next, data);
+ CF_DATA_RESTORE(cf, save);
+}
+
+static CURLcode ssl_cf_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool blocking, bool *done)
+{
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct cf_call_data save;
+ CURLcode result;
+
+ if(cf->connected) {
+ *done = TRUE;
+ return CURLE_OK;
+ }
+
+ CF_DATA_SAVE(save, cf, data);
+ CURL_TRC_CF(data, cf, "cf_connect()");
+ (void)connssl;
+ DEBUGASSERT(data->conn);
+ DEBUGASSERT(data->conn == cf->conn);
+ DEBUGASSERT(connssl);
+ DEBUGASSERT(cf->conn->host.name);
+
+ result = cf->next->cft->do_connect(cf->next, data, blocking, done);
+ if(result || !*done)
+ goto out;
+
+ *done = FALSE;
+ result = Curl_ssl_peer_init(&connssl->peer, cf);
+ if(result)
+ goto out;
+
+ if(blocking) {
+ result = ssl_connect(cf, data);
+ *done = (result == CURLE_OK);
+ }
+ else {
+ result = ssl_connect_nonblocking(cf, data, done);
+ }
+
+ if(!result && *done) {
+ cf->connected = TRUE;
+ connssl->handshake_done = Curl_now();
+ DEBUGASSERT(connssl->state == ssl_connection_complete);
+ }
+out:
+ CURL_TRC_CF(data, cf, "cf_connect() -> %d, done=%d", result, *done);
+ CF_DATA_RESTORE(cf, save);
+ return result;
+}
+
+static bool ssl_cf_data_pending(struct Curl_cfilter *cf,
+ const struct Curl_easy *data)
+{
+ struct cf_call_data save;
+ bool result;
+
+ CF_DATA_SAVE(save, cf, data);
+ if(Curl_ssl->data_pending(cf, data))
+ result = TRUE;
+ else
+ result = cf->next->cft->has_data_pending(cf->next, data);
+ CF_DATA_RESTORE(cf, save);
+ return result;
+}
+
+static ssize_t ssl_cf_send(struct Curl_cfilter *cf,
+ struct Curl_easy *data, const void *buf, size_t len,
+ CURLcode *err)
+{
+ struct cf_call_data save;
+ ssize_t nwritten;
+
+ CF_DATA_SAVE(save, cf, data);
+ *err = CURLE_OK;
+ nwritten = Curl_ssl->send_plain(cf, data, buf, len, err);
+ CF_DATA_RESTORE(cf, save);
+ return nwritten;
+}
+
+static ssize_t ssl_cf_recv(struct Curl_cfilter *cf,
+ struct Curl_easy *data, char *buf, size_t len,
+ CURLcode *err)
+{
+ struct cf_call_data save;
+ ssize_t nread;
+
+ CF_DATA_SAVE(save, cf, data);
+ *err = CURLE_OK;
+ nread = Curl_ssl->recv_plain(cf, data, buf, len, err);
+ if(nread > 0) {
+ DEBUGASSERT((size_t)nread <= len);
+ }
+ else if(nread == 0) {
+ /* eof */
+ *err = CURLE_OK;
+ }
+ CURL_TRC_CF(data, cf, "cf_recv(len=%zu) -> %zd, %d", len, nread, *err);
+ CF_DATA_RESTORE(cf, save);
+ return nread;
+}
+
+static void ssl_cf_adjust_pollset(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ struct easy_pollset *ps)
+{
+ struct cf_call_data save;
+
+ if(!cf->connected) {
+ CF_DATA_SAVE(save, cf, data);
+ Curl_ssl->adjust_pollset(cf, data, ps);
+ CF_DATA_RESTORE(cf, save);
+ }
+}
+
+static CURLcode ssl_cf_cntrl(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int event, int arg1, void *arg2)
+{
+ struct cf_call_data save;
+
+ (void)arg1;
+ (void)arg2;
+ switch(event) {
+ case CF_CTRL_DATA_ATTACH:
+ if(Curl_ssl->attach_data) {
+ CF_DATA_SAVE(save, cf, data);
+ Curl_ssl->attach_data(cf, data);
+ CF_DATA_RESTORE(cf, save);
+ }
+ break;
+ case CF_CTRL_DATA_DETACH:
+ if(Curl_ssl->detach_data) {
+ CF_DATA_SAVE(save, cf, data);
+ Curl_ssl->detach_data(cf, data);
+ CF_DATA_RESTORE(cf, save);
+ }
+ break;
+ default:
+ break;
+ }
+ return CURLE_OK;
+}
+
+static CURLcode ssl_cf_query(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ int query, int *pres1, void *pres2)
+{
+ struct ssl_connect_data *connssl = cf->ctx;
+
+ switch(query) {
+ case CF_QUERY_TIMER_APPCONNECT: {
+ struct curltime *when = pres2;
+ if(cf->connected && !Curl_ssl_cf_is_proxy(cf))
+ *when = connssl->handshake_done;
+ return CURLE_OK;
+ }
+ default:
+ break;
+ }
+ return cf->next?
+ cf->next->cft->query(cf->next, data, query, pres1, pres2) :
+ CURLE_UNKNOWN_OPTION;
+}
+
+static bool cf_ssl_is_alive(struct Curl_cfilter *cf, struct Curl_easy *data,
+ bool *input_pending)
+{
+ struct cf_call_data save;
+ int result;
+ /*
+ * This function tries to determine connection status.
+ *
+ * Return codes:
+ * 1 means the connection is still in place
+ * 0 means the connection has been closed
+ * -1 means the connection status is unknown
+ */
+ CF_DATA_SAVE(save, cf, data);
+ result = Curl_ssl->check_cxn(cf, data);
+ CF_DATA_RESTORE(cf, save);
+ if(result > 0) {
+ *input_pending = TRUE;
+ return TRUE;
+ }
+ if(result == 0) {
+ *input_pending = FALSE;
+ return FALSE;
+ }
+ /* ssl backend does not know */
+ return cf->next?
+ cf->next->cft->is_alive(cf->next, data, input_pending) :
+ FALSE; /* pessimistic in absence of data */
+}
+
+struct Curl_cftype Curl_cft_ssl = {
+ "SSL",
+ CF_TYPE_SSL,
+ CURL_LOG_LVL_NONE,
+ ssl_cf_destroy,
+ ssl_cf_connect,
+ ssl_cf_close,
+ Curl_cf_def_get_host,
+ ssl_cf_adjust_pollset,
+ ssl_cf_data_pending,
+ ssl_cf_send,
+ ssl_cf_recv,
+ ssl_cf_cntrl,
+ cf_ssl_is_alive,
+ Curl_cf_def_conn_keep_alive,
+ ssl_cf_query,
+};
+
+struct Curl_cftype Curl_cft_ssl_proxy = {
+ "SSL-PROXY",
+ CF_TYPE_SSL,
+ CURL_LOG_LVL_NONE,
+ ssl_cf_destroy,
+ ssl_cf_connect,
+ ssl_cf_close,
+ Curl_cf_def_get_host,
+ ssl_cf_adjust_pollset,
+ ssl_cf_data_pending,
+ ssl_cf_send,
+ ssl_cf_recv,
+ ssl_cf_cntrl,
+ cf_ssl_is_alive,
+ Curl_cf_def_conn_keep_alive,
+ Curl_cf_def_query,
+};
+
+static CURLcode cf_ssl_create(struct Curl_cfilter **pcf,
+ struct Curl_easy *data,
+ struct connectdata *conn)
+{
+ struct Curl_cfilter *cf = NULL;
+ struct ssl_connect_data *ctx;
+ CURLcode result;
+
+ DEBUGASSERT(data->conn);
+
+ ctx = cf_ctx_new(data, alpn_get_spec(data->state.httpwant,
+ conn->bits.tls_enable_alpn));
+ if(!ctx) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
+ }
+
+ result = Curl_cf_create(&cf, &Curl_cft_ssl, ctx);
+
+out:
+ if(result)
+ cf_ctx_free(ctx);
+ *pcf = result? NULL : cf;
+ return result;
+}
+
+CURLcode Curl_ssl_cfilter_add(struct Curl_easy *data,
+ struct connectdata *conn,
+ int sockindex)
+{
+ struct Curl_cfilter *cf;
+ CURLcode result;
+
+ result = cf_ssl_create(&cf, data, conn);
+ if(!result)
+ Curl_conn_cf_add(data, conn, sockindex, cf);
+ return result;
+}
+
+CURLcode Curl_cf_ssl_insert_after(struct Curl_cfilter *cf_at,
+ struct Curl_easy *data)
+{
+ struct Curl_cfilter *cf;
+ CURLcode result;
+
+ result = cf_ssl_create(&cf, data, cf_at->conn);
+ if(!result)
+ Curl_conn_cf_insert_after(cf_at, cf);
+ return result;
+}
+
+#ifndef CURL_DISABLE_PROXY
+
+static CURLcode cf_ssl_proxy_create(struct Curl_cfilter **pcf,
+ struct Curl_easy *data,
+ struct connectdata *conn)
+{
+ struct Curl_cfilter *cf = NULL;
+ struct ssl_connect_data *ctx;
+ CURLcode result;
+ bool use_alpn = conn->bits.tls_enable_alpn;
+ int httpwant = CURL_HTTP_VERSION_1_1;
+
+#ifdef USE_HTTP2
+ if(conn->http_proxy.proxytype == CURLPROXY_HTTPS2) {
+ use_alpn = TRUE;
+ httpwant = CURL_HTTP_VERSION_2;
+ }
+#endif
+
+ ctx = cf_ctx_new(data, alpn_get_spec(httpwant, use_alpn));
+ if(!ctx) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
+ }
+ result = Curl_cf_create(&cf, &Curl_cft_ssl_proxy, ctx);
+
+out:
+ if(result)
+ cf_ctx_free(ctx);
+ *pcf = result? NULL : cf;
+ return result;
+}
+
+CURLcode Curl_cf_ssl_proxy_insert_after(struct Curl_cfilter *cf_at,
+ struct Curl_easy *data)
+{
+ struct Curl_cfilter *cf;
+ CURLcode result;
+
+ result = cf_ssl_proxy_create(&cf, data, cf_at->conn);
+ if(!result)
+ Curl_conn_cf_insert_after(cf_at, cf);
+ return result;
+}
+
+#endif /* !CURL_DISABLE_PROXY */
+
+bool Curl_ssl_supports(struct Curl_easy *data, int option)
+{
+ (void)data;
+ return (Curl_ssl->supports & option)? TRUE : FALSE;
+}
+
+static struct Curl_cfilter *get_ssl_filter(struct Curl_cfilter *cf)
+{
+ for(; cf; cf = cf->next) {
+ if(cf->cft == &Curl_cft_ssl || cf->cft == &Curl_cft_ssl_proxy)
+ return cf;
+ }
+ return NULL;
+}
+
+
+void *Curl_ssl_get_internals(struct Curl_easy *data, int sockindex,
+ CURLINFO info, int n)
+{
+ void *result = NULL;
+ (void)n;
+ if(data->conn) {
+ struct Curl_cfilter *cf;
+ /* get first SSL filter in chain, if any is present */
+ cf = get_ssl_filter(data->conn->cfilter[sockindex]);
+ if(cf) {
+ struct cf_call_data save;
+ CF_DATA_SAVE(save, cf, data);
+ result = Curl_ssl->get_internals(cf->ctx, info);
+ CF_DATA_RESTORE(cf, save);
+ }
+ }
+ return result;
+}
+
+CURLcode Curl_ssl_cfilter_remove(struct Curl_easy *data,
+ int sockindex)
+{
+ struct Curl_cfilter *cf, *head;
+ CURLcode result = CURLE_OK;
+
+ (void)data;
+ head = data->conn? data->conn->cfilter[sockindex] : NULL;
+ for(cf = head; cf; cf = cf->next) {
+ if(cf->cft == &Curl_cft_ssl) {
+ if(Curl_ssl->shut_down(cf, data))
+ result = CURLE_SSL_SHUTDOWN_FAILED;
+ Curl_conn_cf_discard_sub(head, cf, data, FALSE);
+ break;
+ }
+ }
+ return result;
+}
+
+bool Curl_ssl_cf_is_proxy(struct Curl_cfilter *cf)
+{
+ return (cf->cft == &Curl_cft_ssl_proxy);
+}
+
+struct ssl_config_data *
+Curl_ssl_cf_get_config(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+#ifdef CURL_DISABLE_PROXY
+ (void)cf;
+ return &data->set.ssl;
+#else
+ return Curl_ssl_cf_is_proxy(cf)? &data->set.proxy_ssl : &data->set.ssl;
+#endif
+}
+
+struct ssl_primary_config *
+Curl_ssl_cf_get_primary_config(struct Curl_cfilter *cf)
+{
+#ifdef CURL_DISABLE_PROXY
+ return &cf->conn->ssl_config;
+#else
+ return Curl_ssl_cf_is_proxy(cf)?
+ &cf->conn->proxy_ssl_config : &cf->conn->ssl_config;
+#endif
+}
+
+CURLcode Curl_alpn_to_proto_buf(struct alpn_proto_buf *buf,
+ const struct alpn_spec *spec)
+{
+ size_t i, len;
+ int off = 0;
+ unsigned char blen;
+
+ memset(buf, 0, sizeof(*buf));
+ for(i = 0; spec && i < spec->count; ++i) {
+ len = strlen(spec->entries[i]);
+ if(len >= ALPN_NAME_MAX)
+ return CURLE_FAILED_INIT;
+ blen = (unsigned char)len;
+ if(off + blen + 1 >= (int)sizeof(buf->data))
+ return CURLE_FAILED_INIT;
+ buf->data[off++] = blen;
+ memcpy(buf->data + off, spec->entries[i], blen);
+ off += blen;
+ }
+ buf->len = off;
+ return CURLE_OK;
+}
+
+CURLcode Curl_alpn_to_proto_str(struct alpn_proto_buf *buf,
+ const struct alpn_spec *spec)
+{
+ size_t i, len;
+ size_t off = 0;
+
+ memset(buf, 0, sizeof(*buf));
+ for(i = 0; spec && i < spec->count; ++i) {
+ len = strlen(spec->entries[i]);
+ if(len >= ALPN_NAME_MAX)
+ return CURLE_FAILED_INIT;
+ if(off + len + 2 >= sizeof(buf->data))
+ return CURLE_FAILED_INIT;
+ if(off)
+ buf->data[off++] = ',';
+ memcpy(buf->data + off, spec->entries[i], len);
+ off += len;
+ }
+ buf->data[off] = '\0';
+ buf->len = (int)off;
+ return CURLE_OK;
+}
+
+CURLcode Curl_alpn_set_negotiated(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ const unsigned char *proto,
+ size_t proto_len)
+{
+ int can_multi = 0;
+ unsigned char *palpn =
+#ifndef CURL_DISABLE_PROXY
+ (cf->conn->bits.tunnel_proxy && Curl_ssl_cf_is_proxy(cf))?
+ &cf->conn->proxy_alpn : &cf->conn->alpn
+#else
+ &cf->conn->alpn
+#endif
+ ;
+
+ if(proto && proto_len) {
+ if(proto_len == ALPN_HTTP_1_1_LENGTH &&
+ !memcmp(ALPN_HTTP_1_1, proto, ALPN_HTTP_1_1_LENGTH)) {
+ *palpn = CURL_HTTP_VERSION_1_1;
+ }
+#ifdef USE_HTTP2
+ else if(proto_len == ALPN_H2_LENGTH &&
+ !memcmp(ALPN_H2, proto, ALPN_H2_LENGTH)) {
+ *palpn = CURL_HTTP_VERSION_2;
+ can_multi = 1;
+ }
+#endif
+#ifdef USE_HTTP3
+ else if(proto_len == ALPN_H3_LENGTH &&
+ !memcmp(ALPN_H3, proto, ALPN_H3_LENGTH)) {
+ *palpn = CURL_HTTP_VERSION_3;
+ can_multi = 1;
+ }
+#endif
+ else {
+ *palpn = CURL_HTTP_VERSION_NONE;
+ failf(data, "unsupported ALPN protocol: '%.*s'", (int)proto_len, proto);
+ /* TODO: do we want to fail this? Previous code just ignored it and
+ * some vtls backends even ignore the return code of this function. */
+ /* return CURLE_NOT_BUILT_IN; */
+ goto out;
+ }
+ infof(data, VTLS_INFOF_ALPN_ACCEPTED_LEN_1STR, (int)proto_len, proto);
+ }
+ else {
+ *palpn = CURL_HTTP_VERSION_NONE;
+ infof(data, VTLS_INFOF_NO_ALPN);
+ }
+
+out:
+ if(!Curl_ssl_cf_is_proxy(cf))
+ Curl_multiuse_state(data, can_multi?
+ BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
+ return CURLE_OK;
+}
+
+#endif /* USE_SSL */
diff --git a/lib/vtls/vtls.h b/lib/vtls/vtls.h
index 50c53b3fb..f1856bd33 100644
--- a/lib/vtls/vtls.h
+++ b/lib/vtls/vtls.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -26,7 +26,9 @@
#include "curl_setup.h"
struct connectdata;
-struct ssl_connect_data;
+struct ssl_config_data;
+struct ssl_primary_config;
+struct Curl_ssl_session;
#define SSLSUPP_CA_PATH (1<<0) /* supports CAPATH */
#define SSLSUPP_CERTINFO (1<<1) /* supports CURLOPT_CERTINFO */
@@ -41,104 +43,20 @@ struct ssl_connect_data;
#define VTLS_INFOF_NO_ALPN \
"ALPN: server did not agree on a protocol. Uses default."
#define VTLS_INFOF_ALPN_OFFER_1STR \
- "ALPN: offers %s"
+ "ALPN: curl offers %s"
#define VTLS_INFOF_ALPN_ACCEPTED_1STR \
ALPN_ACCEPTED "%s"
#define VTLS_INFOF_ALPN_ACCEPTED_LEN_1STR \
ALPN_ACCEPTED "%.*s"
-struct Curl_ssl {
- /*
- * This *must* be the first entry to allow returning the list of available
- * backends in curl_global_sslset().
- */
- curl_ssl_backend info;
- unsigned int supports; /* bitfield, see above */
- size_t sizeof_ssl_backend_data;
-
- int (*init)(void);
- void (*cleanup)(void);
-
- size_t (*version)(char *buffer, size_t size);
- int (*check_cxn)(struct connectdata *cxn);
- int (*shut_down)(struct Curl_easy *data, struct connectdata *conn,
- int sockindex);
- bool (*data_pending)(const struct connectdata *conn,
- int connindex);
-
- /* return 0 if a find random is filled in */
- CURLcode (*random)(struct Curl_easy *data, unsigned char *entropy,
- size_t length);
- bool (*cert_status_request)(void);
-
- CURLcode (*connect_blocking)(struct Curl_easy *data,
- struct connectdata *conn, int sockindex);
- CURLcode (*connect_nonblocking)(struct Curl_easy *data,
- struct connectdata *conn, int sockindex,
- bool *done);
-
- /* If the SSL backend wants to read or write on this connection during a
- handshake, set socks[0] to the connection's FIRSTSOCKET, and return
- a bitmap indicating read or write with GETSOCK_WRITESOCK(0) or
- GETSOCK_READSOCK(0). Otherwise return GETSOCK_BLANK.
- Mandatory. */
- int (*getsock)(struct connectdata *conn, curl_socket_t *socks);
-
- void *(*get_internals)(struct ssl_connect_data *connssl, CURLINFO info);
- void (*close_one)(struct Curl_easy *data, struct connectdata *conn,
- int sockindex);
- void (*close_all)(struct Curl_easy *data);
- void (*session_free)(void *ptr);
-
- CURLcode (*set_engine)(struct Curl_easy *data, const char *engine);
- CURLcode (*set_engine_default)(struct Curl_easy *data);
- struct curl_slist *(*engines_list)(struct Curl_easy *data);
-
- bool (*false_start)(void);
- CURLcode (*sha256sum)(const unsigned char *input, size_t inputlen,
- unsigned char *sha256sum, size_t sha256sumlen);
-
- bool (*associate_connection)(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex);
- void (*disassociate_connection)(struct Curl_easy *data, int sockindex);
-};
-
-#ifdef USE_SSL
-extern const struct Curl_ssl *Curl_ssl;
-#endif
-
-int Curl_none_init(void);
-void Curl_none_cleanup(void);
-int Curl_none_shutdown(struct Curl_easy *data, struct connectdata *conn,
- int sockindex);
-int Curl_none_check_cxn(struct connectdata *conn);
-CURLcode Curl_none_random(struct Curl_easy *data, unsigned char *entropy,
- size_t length);
-void Curl_none_close_all(struct Curl_easy *data);
-void Curl_none_session_free(void *ptr);
-bool Curl_none_data_pending(const struct connectdata *conn, int connindex);
-bool Curl_none_cert_status_request(void);
-CURLcode Curl_none_set_engine(struct Curl_easy *data, const char *engine);
-CURLcode Curl_none_set_engine_default(struct Curl_easy *data);
-struct curl_slist *Curl_none_engines_list(struct Curl_easy *data);
-bool Curl_none_false_start(void);
-bool Curl_ssl_tls13_ciphersuites(void);
+/* Curl_multi SSL backend-specific data; declared differently by each SSL
+ backend */
+struct multi_ssl_backend_data;
+struct Curl_cfilter;
CURLsslset Curl_init_sslset_nolock(curl_sslbackend id, const char *name,
const curl_ssl_backend ***avail);
-#include "openssl.h" /* OpenSSL versions */
-#include "gtls.h" /* GnuTLS versions */
-#include "nssg.h" /* NSS versions */
-#include "gskit.h" /* Global Secure ToolKit versions */
-#include "wolfssl.h" /* wolfSSL versions */
-#include "schannel.h" /* Schannel SSPI version */
-#include "sectransp.h" /* SecureTransport (Darwin) version */
-#include "mbedtls.h" /* mbedTLS versions */
-#include "bearssl.h" /* BearSSL versions */
-#include "rustls.h" /* rustls versions */
-
#ifndef MAX_PINNED_PUBKEY_SIZE
#define MAX_PINNED_PUBKEY_SIZE 1048576 /* 1MB */
#endif
@@ -147,78 +65,60 @@ CURLsslset Curl_init_sslset_nolock(curl_sslbackend id, const char *name,
#define CURL_SHA256_DIGEST_LENGTH 32 /* fixed size */
#endif
-/* see https://www.iana.org/assignments/tls-extensiontype-values/ */
-#define ALPN_HTTP_1_1_LENGTH 8
-#define ALPN_HTTP_1_1 "http/1.1"
-#define ALPN_H2_LENGTH 2
-#define ALPN_H2 "h2"
+curl_sslbackend Curl_ssl_backend(void);
-/* set of helper macros for the backends to access the correct fields. For the
- proxy or for the remote host - to properly support HTTPS proxy */
-#ifndef CURL_DISABLE_PROXY
-#define SSL_IS_PROXY() \
- (CURLPROXY_HTTPS == conn->http_proxy.proxytype && \
- ssl_connection_complete != \
- conn->proxy_ssl[conn->sock[SECONDARYSOCKET] == \
- CURL_SOCKET_BAD ? FIRSTSOCKET : SECONDARYSOCKET].state)
-#define SSL_SET_OPTION(var) \
- (SSL_IS_PROXY() ? data->set.proxy_ssl.var : data->set.ssl.var)
-#define SSL_SET_OPTION_LVALUE(var) \
- (*(SSL_IS_PROXY() ? &data->set.proxy_ssl.var : &data->set.ssl.var))
-#define SSL_CONN_CONFIG(var) \
- (SSL_IS_PROXY() ? conn->proxy_ssl_config.var : conn->ssl_config.var)
-#define SSL_HOST_NAME() \
- (SSL_IS_PROXY() ? conn->http_proxy.host.name : conn->host.name)
-#define SSL_HOST_DISPNAME() \
- (SSL_IS_PROXY() ? conn->http_proxy.host.dispname : conn->host.dispname)
-#define SSL_HOST_PORT() \
- (SSL_IS_PROXY() ? conn->port : conn->remote_port)
-#define SSL_PINNED_PUB_KEY() (SSL_IS_PROXY() \
- ? data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY] \
- : data->set.str[STRING_SSL_PINNEDPUBLICKEY])
-#else
-#define SSL_IS_PROXY() FALSE
-#define SSL_SET_OPTION(var) data->set.ssl.var
-#define SSL_SET_OPTION_LVALUE(var) data->set.ssl.var
-#define SSL_CONN_CONFIG(var) conn->ssl_config.var
-#define SSL_HOST_NAME() conn->host.name
-#define SSL_HOST_DISPNAME() conn->host.dispname
-#define SSL_HOST_PORT() conn->remote_port
-#define SSL_PINNED_PUB_KEY() \
- data->set.str[STRING_SSL_PINNEDPUBLICKEY]
-#endif
+/**
+ * Init ssl config for a new easy handle.
+ */
+void Curl_ssl_easy_config_init(struct Curl_easy *data);
-char *Curl_ssl_snihost(struct Curl_easy *data, const char *host, size_t *olen);
-bool Curl_ssl_config_matches(struct ssl_primary_config *data,
- struct ssl_primary_config *needle);
-bool Curl_clone_primary_ssl_config(struct ssl_primary_config *source,
- struct ssl_primary_config *dest);
-void Curl_free_primary_ssl_config(struct ssl_primary_config *sslc);
-/* An implementation of the getsock field of Curl_ssl that relies
- on the ssl_connect_state enum. Asks for read or write depending
- on whether conn->state is ssl_connect_2_reading or
- ssl_connect_2_writing. */
-int Curl_ssl_getsock(struct connectdata *conn, curl_socket_t *socks);
+/**
+ * Init the `data->set.ssl` and `data->set.proxy_ssl` for
+ * connection matching use.
+ */
+CURLcode Curl_ssl_easy_config_complete(struct Curl_easy *data);
-curl_sslbackend Curl_ssl_backend(void);
+/**
+ * Init SSL configs (main + proxy) for a new connection from the easy handle.
+ */
+CURLcode Curl_ssl_conn_config_init(struct Curl_easy *data,
+ struct connectdata *conn);
+
+/**
+ * Free allocated resources in SSL configs (main + proxy) for
+ * the given connection.
+ */
+void Curl_ssl_conn_config_cleanup(struct connectdata *conn);
+
+/**
+ * Return TRUE iff SSL configuration from `conn` is functionally the
+ * same as the one on `candidate`.
+ * @param proxy match the proxy SSL config or the main one
+ */
+bool Curl_ssl_conn_config_match(struct Curl_easy *data,
+ struct connectdata *candidate,
+ bool proxy);
+
+/* Update certain connection SSL config flags after they have
+ * been changed on the easy handle. Will work for `verifypeer`,
+ * `verifyhost` and `verifystatus`. */
+void Curl_ssl_conn_config_update(struct Curl_easy *data, bool for_proxy);
+
+/**
+ * Init SSL peer information for filter. Can be called repeatedly.
+ */
+CURLcode Curl_ssl_peer_init(struct ssl_peer *peer, struct Curl_cfilter *cf);
+/**
+ * Free all allocated data and reset peer information.
+ */
+void Curl_ssl_peer_cleanup(struct ssl_peer *peer);
#ifdef USE_SSL
int Curl_ssl_init(void);
void Curl_ssl_cleanup(void);
-CURLcode Curl_ssl_connect(struct Curl_easy *data, struct connectdata *conn,
- int sockindex);
-CURLcode Curl_ssl_connect_nonblocking(struct Curl_easy *data,
- struct connectdata *conn,
- bool isproxy,
- int sockindex,
- bool *done);
/* tell the SSL stuff to close down all open information regarding
connections (and thus session ID caching etc) */
void Curl_ssl_close_all(struct Curl_easy *data);
-void Curl_ssl_close(struct Curl_easy *data, struct connectdata *conn,
- int sockindex);
-CURLcode Curl_ssl_shutdown(struct Curl_easy *data, struct connectdata *conn,
- int sockindex);
CURLcode Curl_ssl_set_engine(struct Curl_easy *data, const char *engine);
/* Sets engine as default for all SSL operations */
CURLcode Curl_ssl_set_engine_default(struct Curl_easy *data);
@@ -227,9 +127,6 @@ struct curl_slist *Curl_ssl_engines_list(struct Curl_easy *data);
/* init the SSL session ID cache */
CURLcode Curl_ssl_initsessions(struct Curl_easy *, size_t);
void Curl_ssl_version(char *buffer, size_t size);
-bool Curl_ssl_data_pending(const struct connectdata *conn,
- int connindex);
-int Curl_ssl_check_cxn(struct connectdata *conn);
/* Certificate information list handling. */
@@ -255,30 +152,6 @@ void Curl_ssl_sessionid_lock(struct Curl_easy *data);
/* Unlock session cache mutex */
void Curl_ssl_sessionid_unlock(struct Curl_easy *data);
-/* extract a session ID
- * Sessionid mutex must be locked (see Curl_ssl_sessionid_lock).
- * Caller must make sure that the ownership of returned sessionid object
- * is properly taken (e.g. its refcount is incremented
- * under sessionid mutex).
- */
-bool Curl_ssl_getsessionid(struct Curl_easy *data,
- struct connectdata *conn,
- const bool isProxy,
- void **ssl_sessionid,
- size_t *idsize, /* set 0 if unknown */
- int sockindex);
-/* add a new session ID
- * Sessionid mutex must be locked (see Curl_ssl_sessionid_lock).
- * Caller must ensure that it has properly shared ownership of this sessionid
- * object with cache (e.g. incrementing refcount on success)
- */
-CURLcode Curl_ssl_addsessionid(struct Curl_easy *data,
- struct connectdata *conn,
- const bool isProxy,
- void *ssl_sessionid,
- size_t idsize,
- int sockindex,
- bool *added);
/* Kill a single session ID entry in the cache
* Sessionid mutex must be locked (see Curl_ssl_sessionid_lock).
* This will call engine-specific curlssl_session_free function, which must
@@ -304,41 +177,80 @@ CURLcode Curl_pin_peer_pubkey(struct Curl_easy *data,
bool Curl_ssl_cert_status_request(void);
-bool Curl_ssl_false_start(void);
+bool Curl_ssl_false_start(struct Curl_easy *data);
-void Curl_ssl_associate_conn(struct Curl_easy *data,
- struct connectdata *conn);
-void Curl_ssl_detach_conn(struct Curl_easy *data,
- struct connectdata *conn);
+void Curl_free_multi_ssl_backend_data(struct multi_ssl_backend_data *mbackend);
#define SSL_SHUTDOWN_TIMEOUT 10000 /* ms */
+CURLcode Curl_ssl_cfilter_add(struct Curl_easy *data,
+ struct connectdata *conn,
+ int sockindex);
+
+CURLcode Curl_cf_ssl_insert_after(struct Curl_cfilter *cf_at,
+ struct Curl_easy *data);
+
+CURLcode Curl_ssl_cfilter_remove(struct Curl_easy *data,
+ int sockindex);
+
+#ifndef CURL_DISABLE_PROXY
+CURLcode Curl_cf_ssl_proxy_insert_after(struct Curl_cfilter *cf_at,
+ struct Curl_easy *data);
+#endif /* !CURL_DISABLE_PROXY */
+
+/**
+ * True iff the underlying SSL implementation supports the option.
+ * Option is one of the defined SSLSUPP_* values.
+ * `data` maybe NULL for the features of the default implementation.
+ */
+bool Curl_ssl_supports(struct Curl_easy *data, int ssl_option);
+
+/**
+ * Get the internal ssl instance (like OpenSSL's SSL*) from the filter
+ * chain at `sockindex` of type specified by `info`.
+ * For `n` == 0, the first active (top down) instance is returned.
+ * 1 gives the second active, etc.
+ * NULL is returned when no active SSL filter is present.
+ */
+void *Curl_ssl_get_internals(struct Curl_easy *data, int sockindex,
+ CURLINFO info, int n);
+
+/**
+ * Get the ssl_config_data in `data` that is relevant for cfilter `cf`.
+ */
+struct ssl_config_data *Curl_ssl_cf_get_config(struct Curl_cfilter *cf,
+ struct Curl_easy *data);
+
+/**
+ * Get the primary config relevant for the filter from its connection.
+ */
+struct ssl_primary_config *
+ Curl_ssl_cf_get_primary_config(struct Curl_cfilter *cf);
+
+extern struct Curl_cftype Curl_cft_ssl;
+extern struct Curl_cftype Curl_cft_ssl_proxy;
+
#else /* if not USE_SSL */
/* When SSL support is not present, just define away these function calls */
#define Curl_ssl_init() 1
#define Curl_ssl_cleanup() Curl_nop_stmt
-#define Curl_ssl_connect(x,y,z) CURLE_NOT_BUILT_IN
#define Curl_ssl_close_all(x) Curl_nop_stmt
-#define Curl_ssl_close(x,y,z) Curl_nop_stmt
-#define Curl_ssl_shutdown(x,y,z) CURLE_NOT_BUILT_IN
#define Curl_ssl_set_engine(x,y) CURLE_NOT_BUILT_IN
#define Curl_ssl_set_engine_default(x) CURLE_NOT_BUILT_IN
#define Curl_ssl_engines_list(x) NULL
-#define Curl_ssl_send(a,b,c,d,e) -1
-#define Curl_ssl_recv(a,b,c,d,e) -1
#define Curl_ssl_initsessions(x,y) CURLE_OK
-#define Curl_ssl_data_pending(x,y) 0
-#define Curl_ssl_check_cxn(x) 0
#define Curl_ssl_free_certinfo(x) Curl_nop_stmt
-#define Curl_ssl_connect_nonblocking(x,y,z,w,a) CURLE_NOT_BUILT_IN
#define Curl_ssl_kill_session(x) Curl_nop_stmt
#define Curl_ssl_random(x,y,z) ((void)x, CURLE_NOT_BUILT_IN)
#define Curl_ssl_cert_status_request() FALSE
-#define Curl_ssl_false_start() FALSE
-#define Curl_ssl_tls13_ciphersuites() FALSE
-#define Curl_ssl_associate_conn(a,b) Curl_nop_stmt
-#define Curl_ssl_detach_conn(a,b) Curl_nop_stmt
+#define Curl_ssl_false_start(a) FALSE
+#define Curl_ssl_get_internals(a,b,c,d) NULL
+#define Curl_ssl_supports(a,b) FALSE
+#define Curl_ssl_cfilter_add(a,b,c) CURLE_NOT_BUILT_IN
+#define Curl_ssl_cfilter_remove(a,b) CURLE_OK
+#define Curl_ssl_cf_get_config(a,b) NULL
+#define Curl_ssl_cf_get_primary_config(a) NULL
#endif
#endif /* HEADER_CURL_VTLS_H */
diff --git a/lib/vtls/vtls_int.h b/lib/vtls/vtls_int.h
new file mode 100644
index 000000000..af7ae552e
--- /dev/null
+++ b/lib/vtls/vtls_int.h
@@ -0,0 +1,207 @@
+#ifndef HEADER_CURL_VTLS_INT_H
+#define HEADER_CURL_VTLS_INT_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curl_setup.h"
+#include "cfilters.h"
+#include "urldata.h"
+
+#ifdef USE_SSL
+
+/* see https://www.iana.org/assignments/tls-extensiontype-values/ */
+#define ALPN_HTTP_1_1_LENGTH 8
+#define ALPN_HTTP_1_1 "http/1.1"
+#define ALPN_H2_LENGTH 2
+#define ALPN_H2 "h2"
+#define ALPN_H3_LENGTH 2
+#define ALPN_H3 "h3"
+
+/* conservative sizes on the ALPN entries and count we are handling,
+ * we can increase these if we ever feel the need or have to accommodate
+ * ALPN strings from the "outside". */
+#define ALPN_NAME_MAX 10
+#define ALPN_ENTRIES_MAX 3
+#define ALPN_PROTO_BUF_MAX (ALPN_ENTRIES_MAX * (ALPN_NAME_MAX + 1))
+
+struct alpn_spec {
+ const char entries[ALPN_ENTRIES_MAX][ALPN_NAME_MAX];
+ size_t count; /* number of entries */
+};
+
+struct alpn_proto_buf {
+ unsigned char data[ALPN_PROTO_BUF_MAX];
+ int len;
+};
+
+CURLcode Curl_alpn_to_proto_buf(struct alpn_proto_buf *buf,
+ const struct alpn_spec *spec);
+CURLcode Curl_alpn_to_proto_str(struct alpn_proto_buf *buf,
+ const struct alpn_spec *spec);
+
+CURLcode Curl_alpn_set_negotiated(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ const unsigned char *proto,
+ size_t proto_len);
+
+/* Information in each SSL cfilter context: cf->ctx */
+struct ssl_connect_data {
+ ssl_connection_state state;
+ ssl_connect_state connecting_state;
+ struct ssl_peer peer;
+ const struct alpn_spec *alpn; /* ALPN to use or NULL for none */
+ void *backend; /* vtls backend specific props */
+ struct cf_call_data call_data; /* data handle used in current call */
+ struct curltime handshake_done; /* time when handshake finished */
+ int port; /* remote port at origin */
+ BIT(use_alpn); /* if ALPN shall be used in handshake */
+ BIT(reused_session); /* session-ID was reused for this */
+};
+
+
+#undef CF_CTX_CALL_DATA
+#define CF_CTX_CALL_DATA(cf) \
+ ((struct ssl_connect_data *)(cf)->ctx)->call_data
+
+
+/* Definitions for SSL Implementations */
+
+struct Curl_ssl {
+ /*
+ * This *must* be the first entry to allow returning the list of available
+ * backends in curl_global_sslset().
+ */
+ curl_ssl_backend info;
+ unsigned int supports; /* bitfield, see above */
+ size_t sizeof_ssl_backend_data;
+
+ int (*init)(void);
+ void (*cleanup)(void);
+
+ size_t (*version)(char *buffer, size_t size);
+ int (*check_cxn)(struct Curl_cfilter *cf, struct Curl_easy *data);
+ int (*shut_down)(struct Curl_cfilter *cf,
+ struct Curl_easy *data);
+ bool (*data_pending)(struct Curl_cfilter *cf,
+ const struct Curl_easy *data);
+
+ /* return 0 if a find random is filled in */
+ CURLcode (*random)(struct Curl_easy *data, unsigned char *entropy,
+ size_t length);
+ bool (*cert_status_request)(void);
+
+ CURLcode (*connect_blocking)(struct Curl_cfilter *cf,
+ struct Curl_easy *data);
+ CURLcode (*connect_nonblocking)(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool *done);
+
+ /* During handshake, adjust the pollset to include the socket
+ * for POLLOUT or POLLIN as needed.
+ * Mandatory. */
+ void (*adjust_pollset)(struct Curl_cfilter *cf, struct Curl_easy *data,
+ struct easy_pollset *ps);
+ void *(*get_internals)(struct ssl_connect_data *connssl, CURLINFO info);
+ void (*close)(struct Curl_cfilter *cf, struct Curl_easy *data);
+ void (*close_all)(struct Curl_easy *data);
+ void (*session_free)(void *ptr);
+
+ CURLcode (*set_engine)(struct Curl_easy *data, const char *engine);
+ CURLcode (*set_engine_default)(struct Curl_easy *data);
+ struct curl_slist *(*engines_list)(struct Curl_easy *data);
+
+ bool (*false_start)(void);
+ CURLcode (*sha256sum)(const unsigned char *input, size_t inputlen,
+ unsigned char *sha256sum, size_t sha256sumlen);
+
+ bool (*attach_data)(struct Curl_cfilter *cf, struct Curl_easy *data);
+ void (*detach_data)(struct Curl_cfilter *cf, struct Curl_easy *data);
+
+ void (*free_multi_ssl_backend_data)(struct multi_ssl_backend_data *mbackend);
+
+ ssize_t (*recv_plain)(struct Curl_cfilter *cf, struct Curl_easy *data,
+ char *buf, size_t len, CURLcode *code);
+ ssize_t (*send_plain)(struct Curl_cfilter *cf, struct Curl_easy *data,
+ const void *mem, size_t len, CURLcode *code);
+
+};
+
+extern const struct Curl_ssl *Curl_ssl;
+
+
+int Curl_none_init(void);
+void Curl_none_cleanup(void);
+int Curl_none_shutdown(struct Curl_cfilter *cf, struct Curl_easy *data);
+int Curl_none_check_cxn(struct Curl_cfilter *cf, struct Curl_easy *data);
+CURLcode Curl_none_random(struct Curl_easy *data, unsigned char *entropy,
+ size_t length);
+void Curl_none_close_all(struct Curl_easy *data);
+void Curl_none_session_free(void *ptr);
+bool Curl_none_data_pending(struct Curl_cfilter *cf,
+ const struct Curl_easy *data);
+bool Curl_none_cert_status_request(void);
+CURLcode Curl_none_set_engine(struct Curl_easy *data, const char *engine);
+CURLcode Curl_none_set_engine_default(struct Curl_easy *data);
+struct curl_slist *Curl_none_engines_list(struct Curl_easy *data);
+bool Curl_none_false_start(void);
+void Curl_ssl_adjust_pollset(struct Curl_cfilter *cf, struct Curl_easy *data,
+ struct easy_pollset *ps);
+
+/**
+ * Get the SSL filter below the given one or NULL if there is none.
+ */
+bool Curl_ssl_cf_is_proxy(struct Curl_cfilter *cf);
+
+/* extract a session ID
+ * Sessionid mutex must be locked (see Curl_ssl_sessionid_lock).
+ * Caller must make sure that the ownership of returned sessionid object
+ * is properly taken (e.g. its refcount is incremented
+ * under sessionid mutex).
+ */
+bool Curl_ssl_getsessionid(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ void **ssl_sessionid,
+ size_t *idsize); /* set 0 if unknown */
+/* add a new session ID
+ * Sessionid mutex must be locked (see Curl_ssl_sessionid_lock).
+ * Caller must ensure that it has properly shared ownership of this sessionid
+ * object with cache (e.g. incrementing refcount on success)
+ */
+CURLcode Curl_ssl_addsessionid(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ void *ssl_sessionid,
+ size_t idsize,
+ bool *added);
+
+#include "openssl.h" /* OpenSSL versions */
+#include "gtls.h" /* GnuTLS versions */
+#include "wolfssl.h" /* wolfSSL versions */
+#include "schannel.h" /* Schannel SSPI version */
+#include "sectransp.h" /* SecureTransport (Darwin) version */
+#include "mbedtls.h" /* mbedTLS versions */
+#include "bearssl.h" /* BearSSL versions */
+#include "rustls.h" /* rustls versions */
+
+#endif /* USE_SSL */
+
+#endif /* HEADER_CURL_VTLS_INT_H */
diff --git a/lib/vtls/wolfssl.c b/lib/vtls/wolfssl.c
index 594c39a32..5890bb609 100644
--- a/lib/vtls/wolfssl.c
+++ b/lib/vtls/wolfssl.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -55,6 +55,7 @@
#include "sendf.h"
#include "inet_pton.h"
#include "vtls.h"
+#include "vtls_int.h"
#include "keylog.h"
#include "parsedate.h"
#include "connect.h" /* for the connect timeout */
@@ -84,13 +85,17 @@
#endif
#endif
-struct ssl_backend_data {
- SSL_CTX* ctx;
- SSL* handle;
-};
+#if defined(HAVE_WOLFSSL_FULL_BIO) && HAVE_WOLFSSL_FULL_BIO
+#define USE_BIO_CHAIN
+#else
+#undef USE_BIO_CHAIN
+#endif
-static Curl_recv wolfssl_recv;
-static Curl_send wolfssl_send;
+struct wolfssl_ssl_backend_data {
+ WOLFSSL_CTX *ctx;
+ WOLFSSL *handle;
+ CURLcode io_result; /* result of last BIO cfilter operation */
+};
#ifdef OPENSSL_EXTRA
/*
@@ -175,7 +180,8 @@ wolfssl_log_tls12_secret(SSL *ssl)
}
#endif
- if(SSL_get_keys(ssl, &ms, &msLen, &sr, &srLen, &cr, &crLen) != SSL_SUCCESS) {
+ if(wolfSSL_get_keys(ssl, &ms, &msLen, &sr, &srLen, &cr, &crLen) !=
+ SSL_SUCCESS) {
return;
}
@@ -214,46 +220,153 @@ static const struct group_name_map gnm[] = {
{ WOLFSSL_KYBER_LEVEL1, "KYBER_LEVEL1" },
{ WOLFSSL_KYBER_LEVEL3, "KYBER_LEVEL3" },
{ WOLFSSL_KYBER_LEVEL5, "KYBER_LEVEL5" },
- { WOLFSSL_NTRU_HPS_LEVEL1, "NTRU_HPS_LEVEL1" },
- { WOLFSSL_NTRU_HPS_LEVEL3, "NTRU_HPS_LEVEL3" },
- { WOLFSSL_NTRU_HPS_LEVEL5, "NTRU_HPS_LEVEL5" },
- { WOLFSSL_NTRU_HRSS_LEVEL3, "NTRU_HRSS_LEVEL3" },
- { WOLFSSL_SABER_LEVEL1, "SABER_LEVEL1" },
- { WOLFSSL_SABER_LEVEL3, "SABER_LEVEL3" },
- { WOLFSSL_SABER_LEVEL5, "SABER_LEVEL5" },
- { WOLFSSL_KYBER_90S_LEVEL1, "KYBER_90S_LEVEL1" },
- { WOLFSSL_KYBER_90S_LEVEL3, "KYBER_90S_LEVEL3" },
- { WOLFSSL_KYBER_90S_LEVEL5, "KYBER_90S_LEVEL5" },
- { WOLFSSL_P256_NTRU_HPS_LEVEL1, "P256_NTRU_HPS_LEVEL1" },
- { WOLFSSL_P384_NTRU_HPS_LEVEL3, "P384_NTRU_HPS_LEVEL3" },
- { WOLFSSL_P521_NTRU_HPS_LEVEL5, "P521_NTRU_HPS_LEVEL5" },
- { WOLFSSL_P384_NTRU_HRSS_LEVEL3, "P384_NTRU_HRSS_LEVEL3" },
- { WOLFSSL_P256_SABER_LEVEL1, "P256_SABER_LEVEL1" },
- { WOLFSSL_P384_SABER_LEVEL3, "P384_SABER_LEVEL3" },
- { WOLFSSL_P521_SABER_LEVEL5, "P521_SABER_LEVEL5" },
{ WOLFSSL_P256_KYBER_LEVEL1, "P256_KYBER_LEVEL1" },
{ WOLFSSL_P384_KYBER_LEVEL3, "P384_KYBER_LEVEL3" },
{ WOLFSSL_P521_KYBER_LEVEL5, "P521_KYBER_LEVEL5" },
- { WOLFSSL_P256_KYBER_90S_LEVEL1, "P256_KYBER_90S_LEVEL1" },
- { WOLFSSL_P384_KYBER_90S_LEVEL3, "P384_KYBER_90S_LEVEL3" },
- { WOLFSSL_P521_KYBER_90S_LEVEL5, "P521_KYBER_90S_LEVEL5" },
{ 0, NULL }
};
#endif
+#ifdef USE_BIO_CHAIN
+
+static int wolfssl_bio_cf_create(WOLFSSL_BIO *bio)
+{
+ wolfSSL_BIO_set_shutdown(bio, 1);
+ wolfSSL_BIO_set_init(bio, 1);
+ wolfSSL_BIO_set_data(bio, NULL);
+ return 1;
+}
+
+static int wolfssl_bio_cf_destroy(WOLFSSL_BIO *bio)
+{
+ if(!bio)
+ return 0;
+ return 1;
+}
+
+static long wolfssl_bio_cf_ctrl(WOLFSSL_BIO *bio, int cmd, long num, void *ptr)
+{
+ struct Curl_cfilter *cf = BIO_get_data(bio);
+ long ret = 1;
+
+ (void)cf;
+ (void)ptr;
+ switch(cmd) {
+ case BIO_CTRL_GET_CLOSE:
+ ret = (long)wolfSSL_BIO_get_shutdown(bio);
+ break;
+ case BIO_CTRL_SET_CLOSE:
+ wolfSSL_BIO_set_shutdown(bio, (int)num);
+ break;
+ case BIO_CTRL_FLUSH:
+ /* we do no delayed writes, but if we ever would, this
+ * needs to trigger it. */
+ ret = 1;
+ break;
+ case BIO_CTRL_DUP:
+ ret = 1;
+ break;
+#ifdef BIO_CTRL_EOF
+ case BIO_CTRL_EOF:
+ /* EOF has been reached on input? */
+ return (!cf->next || !cf->next->connected);
+#endif
+ default:
+ ret = 0;
+ break;
+ }
+ return ret;
+}
+
+static int wolfssl_bio_cf_out_write(WOLFSSL_BIO *bio,
+ const char *buf, int blen)
+{
+ struct Curl_cfilter *cf = wolfSSL_BIO_get_data(bio);
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct wolfssl_ssl_backend_data *backend =
+ (struct wolfssl_ssl_backend_data *)connssl->backend;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+ ssize_t nwritten;
+ CURLcode result = CURLE_OK;
+
+ DEBUGASSERT(data);
+ nwritten = Curl_conn_cf_send(cf->next, data, buf, blen, &result);
+ backend->io_result = result;
+ CURL_TRC_CF(data, cf, "bio_write(len=%d) -> %zd, %d",
+ blen, nwritten, result);
+ wolfSSL_BIO_clear_retry_flags(bio);
+ if(nwritten < 0 && CURLE_AGAIN == result)
+ BIO_set_retry_write(bio);
+ return (int)nwritten;
+}
+
+static int wolfssl_bio_cf_in_read(WOLFSSL_BIO *bio, char *buf, int blen)
+{
+ struct Curl_cfilter *cf = wolfSSL_BIO_get_data(bio);
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct wolfssl_ssl_backend_data *backend =
+ (struct wolfssl_ssl_backend_data *)connssl->backend;
+ struct Curl_easy *data = CF_DATA_CURRENT(cf);
+ ssize_t nread;
+ CURLcode result = CURLE_OK;
+
+ DEBUGASSERT(data);
+ /* OpenSSL catches this case, so should we. */
+ if(!buf)
+ return 0;
+
+ nread = Curl_conn_cf_recv(cf->next, data, buf, blen, &result);
+ backend->io_result = result;
+ CURL_TRC_CF(data, cf, "bio_read(len=%d) -> %zd, %d", blen, nread, result);
+ wolfSSL_BIO_clear_retry_flags(bio);
+ if(nread < 0 && CURLE_AGAIN == result)
+ BIO_set_retry_read(bio);
+ return (int)nread;
+}
+
+static WOLFSSL_BIO_METHOD *wolfssl_bio_cf_method = NULL;
+
+static void wolfssl_bio_cf_init_methods(void)
+{
+ wolfssl_bio_cf_method = wolfSSL_BIO_meth_new(BIO_TYPE_MEM, "wolfSSL CF BIO");
+ wolfSSL_BIO_meth_set_write(wolfssl_bio_cf_method, &wolfssl_bio_cf_out_write);
+ wolfSSL_BIO_meth_set_read(wolfssl_bio_cf_method, &wolfssl_bio_cf_in_read);
+ wolfSSL_BIO_meth_set_ctrl(wolfssl_bio_cf_method, &wolfssl_bio_cf_ctrl);
+ wolfSSL_BIO_meth_set_create(wolfssl_bio_cf_method, &wolfssl_bio_cf_create);
+ wolfSSL_BIO_meth_set_destroy(wolfssl_bio_cf_method, &wolfssl_bio_cf_destroy);
+}
+
+static void wolfssl_bio_cf_free_methods(void)
+{
+ wolfSSL_BIO_meth_free(wolfssl_bio_cf_method);
+}
+
+#else /* USE_BIO_CHAIN */
+
+#define wolfssl_bio_cf_init_methods() Curl_nop_stmt
+#define wolfssl_bio_cf_free_methods() Curl_nop_stmt
+
+#endif /* !USE_BIO_CHAIN */
+
/*
* This function loads all the client/CA certificates and CRLs. Setup the TLS
* layer and do all necessary magic.
*/
static CURLcode
-wolfssl_connect_step1(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
+wolfssl_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data)
{
char *ciphers, *curves;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
- SSL_METHOD* req_method = NULL;
- curl_socket_t sockfd = conn->sock[sockindex];
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct wolfssl_ssl_backend_data *backend =
+ (struct wolfssl_ssl_backend_data *)connssl->backend;
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
+ const struct curl_blob *ca_info_blob = conn_config->ca_info_blob;
+ const struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data);
+ const char * const ssl_cafile =
+ /* CURLOPT_CAINFO_BLOB overrides CURLOPT_CAINFO */
+ (ca_info_blob ? NULL : conn_config->CAfile);
+ const char * const ssl_capath = conn_config->CApath;
+ WOLFSSL_METHOD* req_method = NULL;
#ifdef HAVE_LIBOQS
word16 oqsAlg = 0;
size_t idx = 0;
@@ -264,19 +377,21 @@ wolfssl_connect_step1(struct Curl_easy *data, struct connectdata *conn,
#else
#define use_sni(x) Curl_nop_stmt
#endif
+ bool imported_native_ca = false;
+ bool imported_ca_info_blob = false;
DEBUGASSERT(backend);
if(connssl->state == ssl_connection_complete)
return CURLE_OK;
- if(SSL_CONN_CONFIG(version_max) != CURL_SSLVERSION_MAX_NONE) {
+ if(conn_config->version_max != CURL_SSLVERSION_MAX_NONE) {
failf(data, "wolfSSL does not support to set maximum SSL/TLS version");
return CURLE_SSL_CONNECT_ERROR;
}
/* check to see if we've been told to use an explicit SSL/TLS version */
- switch(SSL_CONN_CONFIG(version)) {
+ switch(conn_config->version) {
case CURL_SSLVERSION_DEFAULT:
case CURL_SSLVERSION_TLSv1:
#if LIBWOLFSSL_VERSION_HEX >= 0x03003000 /* >= 3.3.0 */
@@ -308,8 +423,13 @@ wolfssl_connect_step1(struct Curl_easy *data, struct connectdata *conn,
#endif
break;
case CURL_SSLVERSION_TLSv1_2:
+#ifndef WOLFSSL_NO_TLS12
req_method = TLSv1_2_client_method();
use_sni(TRUE);
+#else
+ failf(data, "wolfSSL does not support TLS 1.2");
+ return CURLE_NOT_BUILT_IN;
+#endif
break;
case CURL_SSLVERSION_TLSv1_3:
#ifdef WOLFSSL_TLS13
@@ -331,15 +451,15 @@ wolfssl_connect_step1(struct Curl_easy *data, struct connectdata *conn,
}
if(backend->ctx)
- SSL_CTX_free(backend->ctx);
- backend->ctx = SSL_CTX_new(req_method);
+ wolfSSL_CTX_free(backend->ctx);
+ backend->ctx = wolfSSL_CTX_new(req_method);
if(!backend->ctx) {
failf(data, "SSL: couldn't create a context");
return CURLE_OUT_OF_MEMORY;
}
- switch(SSL_CONN_CONFIG(version)) {
+ switch(conn_config->version) {
case CURL_SSLVERSION_DEFAULT:
case CURL_SSLVERSION_TLSv1:
#if LIBWOLFSSL_VERSION_HEX > 0x03004006 /* > 3.4.6 */
@@ -360,10 +480,11 @@ wolfssl_connect_step1(struct Curl_easy *data, struct connectdata *conn,
return CURLE_SSL_CONNECT_ERROR;
}
#endif
+ default:
break;
}
- ciphers = SSL_CONN_CONFIG(cipher_list);
+ ciphers = conn_config->cipher_list;
if(ciphers) {
if(!SSL_CTX_set_cipher_list(backend->ctx, ciphers)) {
failf(data, "failed setting cipher list: %s", ciphers);
@@ -372,7 +493,7 @@ wolfssl_connect_step1(struct Curl_easy *data, struct connectdata *conn,
infof(data, "Cipher selection: %s", ciphers);
}
- curves = SSL_CONN_CONFIG(curves);
+ curves = conn_config->curves;
if(curves) {
#ifdef HAVE_LIBOQS
@@ -392,20 +513,55 @@ wolfssl_connect_step1(struct Curl_easy *data, struct connectdata *conn,
}
}
}
+
+#if !defined(NO_FILESYSTEM) && defined(WOLFSSL_SYS_CA_CERTS)
+ /* load native CA certificates */
+ if(ssl_config->native_ca_store) {
+ if(wolfSSL_CTX_load_system_CA_certs(backend->ctx) != WOLFSSL_SUCCESS) {
+ infof(data, "error importing native CA store, continuing anyway");
+ }
+ else {
+ imported_native_ca = true;
+ infof(data, "successfully imported native CA store");
+ }
+ }
+#endif /* !NO_FILESYSTEM */
+
+ /* load certificate blob */
+ if(ca_info_blob) {
+ if(wolfSSL_CTX_load_verify_buffer(backend->ctx, ca_info_blob->data,
+ ca_info_blob->len,
+ SSL_FILETYPE_PEM) != SSL_SUCCESS) {
+ if(imported_native_ca) {
+ infof(data, "error importing CA certificate blob, continuing anyway");
+ }
+ else {
+ failf(data, "error importing CA certificate blob");
+ return CURLE_SSL_CACERT_BADFILE;
+ }
+ }
+ else {
+ imported_ca_info_blob = true;
+ infof(data, "successfully imported CA certificate blob");
+ }
+ }
+
#ifndef NO_FILESYSTEM
- /* load trusted cacert */
- if(SSL_CONN_CONFIG(CAfile)) {
- if(1 != SSL_CTX_load_verify_locations(backend->ctx,
- SSL_CONN_CONFIG(CAfile),
- SSL_CONN_CONFIG(CApath))) {
- if(SSL_CONN_CONFIG(verifypeer)) {
+ /* load trusted cacert from file if not blob */
+ if(ssl_cafile || ssl_capath) {
+ int rc =
+ wolfSSL_CTX_load_verify_locations_ex(backend->ctx,
+ ssl_cafile,
+ ssl_capath,
+ WOLFSSL_LOAD_FLAG_IGNORE_ERR);
+ if(SSL_SUCCESS != rc) {
+ if(conn_config->verifypeer && !imported_ca_info_blob &&
+ !imported_native_ca) {
/* Fail if we insist on successfully verifying the server. */
failf(data, "error setting certificate verify locations:"
" CAfile: %s CApath: %s",
- SSL_CONN_CONFIG(CAfile)?
- SSL_CONN_CONFIG(CAfile): "none",
- SSL_CONN_CONFIG(CApath)?
- SSL_CONN_CONFIG(CApath) : "none");
+ ssl_cafile ? ssl_cafile : "none",
+ ssl_capath ? ssl_capath : "none");
return CURLE_SSL_CACERT_BADFILE;
}
else {
@@ -419,27 +575,25 @@ wolfssl_connect_step1(struct Curl_easy *data, struct connectdata *conn,
/* Everything is fine. */
infof(data, "successfully set certificate verify locations:");
}
- infof(data, " CAfile: %s",
- SSL_CONN_CONFIG(CAfile) ? SSL_CONN_CONFIG(CAfile) : "none");
- infof(data, " CApath: %s",
- SSL_CONN_CONFIG(CApath) ? SSL_CONN_CONFIG(CApath) : "none");
+ infof(data, " CAfile: %s", ssl_cafile ? ssl_cafile : "none");
+ infof(data, " CApath: %s", ssl_capath ? ssl_capath : "none");
}
/* Load the client certificate, and private key */
- if(SSL_SET_OPTION(primary.clientcert) && SSL_SET_OPTION(key)) {
- int file_type = do_file_type(SSL_SET_OPTION(cert_type));
+ if(ssl_config->primary.clientcert && ssl_config->key) {
+ int file_type = do_file_type(ssl_config->cert_type);
- if(SSL_CTX_use_certificate_file(backend->ctx,
- SSL_SET_OPTION(primary.clientcert),
- file_type) != 1) {
+ if(wolfSSL_CTX_use_certificate_file(backend->ctx,
+ ssl_config->primary.clientcert,
+ file_type) != 1) {
failf(data, "unable to use client certificate (no key or wrong pass"
" phrase?)");
return CURLE_SSL_CONNECT_ERROR;
}
- file_type = do_file_type(SSL_SET_OPTION(key_type));
- if(SSL_CTX_use_PrivateKey_file(backend->ctx, SSL_SET_OPTION(key),
- file_type) != 1) {
+ file_type = do_file_type(ssl_config->key_type);
+ if(wolfSSL_CTX_use_PrivateKey_file(backend->ctx, ssl_config->key,
+ file_type) != 1) {
failf(data, "unable to set private key");
return CURLE_SSL_CONNECT_ERROR;
}
@@ -450,30 +604,17 @@ wolfssl_connect_step1(struct Curl_easy *data, struct connectdata *conn,
* fail to connect if the verification fails, or if it should continue
* anyway. In the latter case the result of the verification is checked with
* SSL_get_verify_result() below. */
- SSL_CTX_set_verify(backend->ctx,
- SSL_CONN_CONFIG(verifypeer)?SSL_VERIFY_PEER:
- SSL_VERIFY_NONE,
- NULL);
+ wolfSSL_CTX_set_verify(backend->ctx,
+ conn_config->verifypeer?SSL_VERIFY_PEER:
+ SSL_VERIFY_NONE, NULL);
#ifdef HAVE_SNI
- if(sni) {
- struct in_addr addr4;
-#ifdef ENABLE_IPV6
- struct in6_addr addr6;
-#endif
- const char * const hostname = SSL_HOST_NAME();
- size_t hostname_len = strlen(hostname);
- if((hostname_len < USHRT_MAX) &&
- !Curl_inet_pton(AF_INET, hostname, &addr4)
-#ifdef ENABLE_IPV6
- && !Curl_inet_pton(AF_INET6, hostname, &addr6)
-#endif
- ) {
- size_t snilen;
- char *snihost = Curl_ssl_snihost(data, hostname, &snilen);
- if(!snihost ||
- wolfSSL_CTX_UseSNI(backend->ctx, WOLFSSL_SNI_HOST_NAME, snihost,
- (unsigned short)snilen) != 1) {
+ if(sni && connssl->peer.sni) {
+ size_t sni_len = strlen(connssl->peer.sni);
+ if((sni_len < USHRT_MAX)) {
+ if(wolfSSL_CTX_UseSNI(backend->ctx, WOLFSSL_SNI_HOST_NAME,
+ connssl->peer.sni,
+ (unsigned short)sni_len) != 1) {
failf(data, "Failed to set SNI");
return CURLE_SSL_CONNECT_ERROR;
}
@@ -491,7 +632,7 @@ wolfssl_connect_step1(struct Curl_easy *data, struct connectdata *conn,
}
}
#ifdef NO_FILESYSTEM
- else if(SSL_CONN_CONFIG(verifypeer)) {
+ else if(conn_config->verifypeer) {
failf(data, "SSL: Certificates can't be loaded because wolfSSL was built"
" with \"no filesystem\". Either disable peer verification"
" (insecure) or if you are building an application with libcurl you"
@@ -502,8 +643,8 @@ wolfssl_connect_step1(struct Curl_easy *data, struct connectdata *conn,
/* Let's make an SSL structure */
if(backend->handle)
- SSL_free(backend->handle);
- backend->handle = SSL_new(backend->ctx);
+ wolfSSL_free(backend->handle);
+ backend->handle = wolfSSL_new(backend->ctx);
if(!backend->handle) {
failf(data, "SSL: couldn't create a handle");
return CURLE_OUT_OF_MEMORY;
@@ -518,29 +659,18 @@ wolfssl_connect_step1(struct Curl_easy *data, struct connectdata *conn,
#endif
#ifdef HAVE_ALPN
- if(conn->bits.tls_enable_alpn) {
- char protocols[128];
- *protocols = '\0';
-
- /* wolfSSL's ALPN protocol name list format is a comma separated string of
- protocols in descending order of preference, eg: "h2,http/1.1" */
-
-#ifdef USE_HTTP2
- if(data->state.httpwant >= CURL_HTTP_VERSION_2) {
- strcpy(protocols + strlen(protocols), ALPN_H2 ",");
- infof(data, VTLS_INFOF_ALPN_OFFER_1STR, ALPN_H2);
- }
-#endif
-
- strcpy(protocols + strlen(protocols), ALPN_HTTP_1_1);
- infof(data, VTLS_INFOF_ALPN_OFFER_1STR, ALPN_HTTP_1_1);
+ if(connssl->alpn) {
+ struct alpn_proto_buf proto;
+ CURLcode result;
- if(wolfSSL_UseALPN(backend->handle, protocols,
- (unsigned)strlen(protocols),
+ result = Curl_alpn_to_proto_str(&proto, connssl->alpn);
+ if(result ||
+ wolfSSL_UseALPN(backend->handle, (char *)proto.data, proto.len,
WOLFSSL_ALPN_CONTINUE_ON_MISMATCH) != SSL_SUCCESS) {
failf(data, "SSL: failed setting ALPN protocols");
return CURLE_SSL_CONNECT_ERROR;
}
+ infof(data, VTLS_INFOF_ALPN_OFFER_1STR, proto.data);
}
#endif /* HAVE_ALPN */
@@ -563,29 +693,41 @@ wolfssl_connect_step1(struct Curl_easy *data, struct connectdata *conn,
#endif /* HAVE_SECURE_RENEGOTIATION */
/* Check if there's a cached ID we can/should use here! */
- if(SSL_SET_OPTION(primary.sessionid)) {
+ if(ssl_config->primary.sessionid) {
void *ssl_sessionid = NULL;
Curl_ssl_sessionid_lock(data);
- if(!Curl_ssl_getsessionid(data, conn,
- SSL_IS_PROXY() ? TRUE : FALSE,
- &ssl_sessionid, NULL, sockindex)) {
+ if(!Curl_ssl_getsessionid(cf, data, &ssl_sessionid, NULL)) {
/* we got a session id, use it! */
if(!SSL_set_session(backend->handle, ssl_sessionid)) {
Curl_ssl_delsessionid(data, ssl_sessionid);
infof(data, "Can't use session ID, going on without");
}
else
- infof(data, "SSL re-using session ID");
+ infof(data, "SSL reusing session ID");
}
Curl_ssl_sessionid_unlock(data);
}
+#ifdef USE_BIO_CHAIN
+ {
+ WOLFSSL_BIO *bio;
+
+ bio = BIO_new(wolfssl_bio_cf_method);
+ if(!bio)
+ return CURLE_OUT_OF_MEMORY;
+
+ wolfSSL_BIO_set_data(bio, cf);
+ wolfSSL_set_bio(backend->handle, bio, bio);
+ }
+#else /* USE_BIO_CHAIN */
/* pass the raw socket into the SSL layer */
- if(!SSL_set_fd(backend->handle, (int)sockfd)) {
+ if(!wolfSSL_set_fd(backend->handle,
+ (int)Curl_conn_cf_get_socket(cf, data))) {
failf(data, "SSL: SSL_set_fd failed");
return CURLE_SSL_CONNECT_ERROR;
}
+#endif /* !USE_BIO_CHAIN */
connssl->connecting_state = ssl_connect_2;
return CURLE_OK;
@@ -593,31 +735,30 @@ wolfssl_connect_step1(struct Curl_easy *data, struct connectdata *conn,
static CURLcode
-wolfssl_connect_step2(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
+wolfssl_connect_step2(struct Curl_cfilter *cf, struct Curl_easy *data)
{
int ret = -1;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
- const char * const dispname = SSL_HOST_DISPNAME();
- const char * const pinnedpubkey = SSL_PINNED_PUB_KEY();
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct wolfssl_ssl_backend_data *backend =
+ (struct wolfssl_ssl_backend_data *)connssl->backend;
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
+ const char * const pinnedpubkey = Curl_ssl_cf_is_proxy(cf)?
+ data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY]:
+ data->set.str[STRING_SSL_PINNEDPUBLICKEY];
DEBUGASSERT(backend);
- ERR_clear_error();
-
- conn->recv[sockindex] = wolfssl_recv;
- conn->send[sockindex] = wolfssl_send;
+ wolfSSL_ERR_clear_error();
/* Enable RFC2818 checks */
- if(SSL_CONN_CONFIG(verifyhost)) {
- char *snihost = Curl_ssl_snihost(data, SSL_HOST_NAME(), NULL);
- if(!snihost ||
- (wolfSSL_check_domain_name(backend->handle, snihost) == SSL_FAILURE))
+ if(conn_config->verifyhost) {
+ char *snihost = connssl->peer.sni?
+ connssl->peer.sni : connssl->peer.hostname;
+ if(wolfSSL_check_domain_name(backend->handle, snihost) == SSL_FAILURE)
return CURLE_SSL_CONNECT_ERROR;
}
- ret = SSL_connect(backend->handle);
+ ret = wolfSSL_connect(backend->handle);
#ifdef OPENSSL_EXTRA
if(Curl_tls_keylog_enabled()) {
@@ -645,7 +786,7 @@ wolfssl_connect_step2(struct Curl_easy *data, struct connectdata *conn,
if(ret != 1) {
char error_buffer[WOLFSSL_MAX_ERROR_SZ];
- int detail = SSL_get_error(backend->handle, ret);
+ int detail = wolfSSL_get_error(backend->handle, ret);
if(SSL_ERROR_WANT_READ == detail) {
connssl->connecting_state = ssl_connect_2_reading;
@@ -661,32 +802,32 @@ wolfssl_connect_step2(struct Curl_easy *data, struct connectdata *conn,
else if(DOMAIN_NAME_MISMATCH == detail) {
#if 1
failf(data, " subject alt name(s) or common name do not match \"%s\"",
- dispname);
+ connssl->peer.dispname);
return CURLE_PEER_FAILED_VERIFICATION;
#else
/* When the wolfssl_check_domain_name() is used and you desire to
- * continue on a DOMAIN_NAME_MISMATCH, i.e. 'conn->ssl_config.verifyhost
+ * continue on a DOMAIN_NAME_MISMATCH, i.e. 'ssl_config.verifyhost
* == 0', CyaSSL version 2.4.0 will fail with an INCOMPLETE_DATA
* error. The only way to do this is currently to switch the
* Wolfssl_check_domain_name() in and out based on the
- * 'conn->ssl_config.verifyhost' value. */
- if(SSL_CONN_CONFIG(verifyhost)) {
+ * 'ssl_config.verifyhost' value. */
+ if(conn_config->verifyhost) {
failf(data,
" subject alt name(s) or common name do not match \"%s\"\n",
- dispname);
+ connssl->dispname);
return CURLE_PEER_FAILED_VERIFICATION;
}
else {
infof(data,
" subject alt name(s) and/or common name do not match \"%s\"",
- dispname);
+ connssl->dispname);
return CURLE_OK;
}
#endif
}
#if LIBWOLFSSL_VERSION_HEX >= 0x02007000 /* 2.7.0 */
else if(ASN_NO_SIGNER_E == detail) {
- if(SSL_CONN_CONFIG(verifypeer)) {
+ if(conn_config->verifypeer) {
failf(data, " CA signer not available for verification");
return CURLE_SSL_CACERT_BADFILE;
}
@@ -698,9 +839,12 @@ wolfssl_connect_step2(struct Curl_easy *data, struct connectdata *conn,
}
}
#endif
+ else if(backend->io_result == CURLE_AGAIN) {
+ return CURLE_OK;
+ }
else {
failf(data, "SSL_connect failed with error %d: %s", detail,
- ERR_error_string(detail, error_buffer));
+ wolfSSL_ERR_error_string(detail, error_buffer));
return CURLE_SSL_CONNECT_ERROR;
}
}
@@ -714,7 +858,7 @@ wolfssl_connect_step2(struct Curl_easy *data, struct connectdata *conn,
struct Curl_asn1Element *pubkey;
CURLcode result;
- x509 = SSL_get_peer_certificate(backend->handle);
+ x509 = wolfSSL_get_peer_certificate(backend->handle);
if(!x509) {
failf(data, "SSL: failed retrieving server certificate");
return CURLE_SSL_PINNEDPUBKEYNOTMATCH;
@@ -751,7 +895,7 @@ wolfssl_connect_step2(struct Curl_easy *data, struct connectdata *conn,
}
#ifdef HAVE_ALPN
- if(conn->bits.tls_enable_alpn) {
+ if(connssl->alpn) {
int rc;
char *protocol = NULL;
unsigned short protocol_len = 0;
@@ -759,25 +903,11 @@ wolfssl_connect_step2(struct Curl_easy *data, struct connectdata *conn,
rc = wolfSSL_ALPN_GetProtocol(backend->handle, &protocol, &protocol_len);
if(rc == SSL_SUCCESS) {
- infof(data, VTLS_INFOF_ALPN_ACCEPTED_LEN_1STR, protocol_len, protocol);
-
- if(protocol_len == ALPN_HTTP_1_1_LENGTH &&
- !memcmp(protocol, ALPN_HTTP_1_1, ALPN_HTTP_1_1_LENGTH))
- conn->alpn = CURL_HTTP_VERSION_1_1;
-#ifdef USE_HTTP2
- else if(data->state.httpwant >= CURL_HTTP_VERSION_2 &&
- protocol_len == ALPN_H2_LENGTH &&
- !memcmp(protocol, ALPN_H2, ALPN_H2_LENGTH))
- conn->alpn = CURL_HTTP_VERSION_2;
-#endif
- else
- infof(data, "ALPN, unrecognized protocol %.*s", protocol_len,
- protocol);
- Curl_multiuse_state(data, conn->alpn == CURL_HTTP_VERSION_2 ?
- BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
+ Curl_alpn_set_negotiated(cf, data, (const unsigned char *)protocol,
+ protocol_len);
}
else if(rc == SSL_ALPN_NOT_FOUND)
- infof(data, VTLS_INFOF_NO_ALPN);
+ Curl_alpn_set_negotiated(cf, data, NULL, 0);
else {
failf(data, "ALPN, failure getting protocol, error %d", rc);
return CURLE_SSL_CONNECT_ERROR;
@@ -799,28 +929,27 @@ wolfssl_connect_step2(struct Curl_easy *data, struct connectdata *conn,
static CURLcode
-wolfssl_connect_step3(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
+wolfssl_connect_step3(struct Curl_cfilter *cf, struct Curl_easy *data)
{
CURLcode result = CURLE_OK;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct wolfssl_ssl_backend_data *backend =
+ (struct wolfssl_ssl_backend_data *)connssl->backend;
+ const struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data);
DEBUGASSERT(ssl_connect_3 == connssl->connecting_state);
DEBUGASSERT(backend);
- if(SSL_SET_OPTION(primary.sessionid)) {
+ if(ssl_config->primary.sessionid) {
bool incache;
bool added = FALSE;
void *old_ssl_sessionid = NULL;
- /* SSL_get1_session allocates memory that has to be freed. */
- SSL_SESSION *our_ssl_sessionid = SSL_get1_session(backend->handle);
- bool isproxy = SSL_IS_PROXY() ? TRUE : FALSE;
+ /* wolfSSL_get1_session allocates memory that has to be freed. */
+ WOLFSSL_SESSION *our_ssl_sessionid = wolfSSL_get1_session(backend->handle);
if(our_ssl_sessionid) {
Curl_ssl_sessionid_lock(data);
- incache = !(Curl_ssl_getsessionid(data, conn, isproxy,
- &old_ssl_sessionid, NULL, sockindex));
+ incache = !(Curl_ssl_getsessionid(cf, data, &old_ssl_sessionid, NULL));
if(incache) {
if(old_ssl_sessionid != our_ssl_sessionid) {
infof(data, "old SSL session ID is stale, removing");
@@ -830,11 +959,10 @@ wolfssl_connect_step3(struct Curl_easy *data, struct connectdata *conn,
}
if(!incache) {
- result = Curl_ssl_addsessionid(data, conn, isproxy, our_ssl_sessionid,
- 0, sockindex, NULL);
+ result = Curl_ssl_addsessionid(cf, data, our_ssl_sessionid, 0, NULL);
if(result) {
Curl_ssl_sessionid_unlock(data);
- SSL_SESSION_free(our_ssl_sessionid);
+ wolfSSL_SESSION_free(our_ssl_sessionid);
failf(data, "failed to store ssl session");
return result;
}
@@ -846,7 +974,7 @@ wolfssl_connect_step3(struct Curl_easy *data, struct connectdata *conn,
if(!added) {
/* If the session info wasn't added to the cache, free our copy. */
- SSL_SESSION_free(our_ssl_sessionid);
+ wolfSSL_SESSION_free(our_ssl_sessionid);
}
}
}
@@ -857,50 +985,57 @@ wolfssl_connect_step3(struct Curl_easy *data, struct connectdata *conn,
}
-static ssize_t wolfssl_send(struct Curl_easy *data,
- int sockindex,
+static ssize_t wolfssl_send(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
const void *mem,
size_t len,
CURLcode *curlcode)
{
- struct connectdata *conn = data->conn;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct wolfssl_ssl_backend_data *backend =
+ (struct wolfssl_ssl_backend_data *)connssl->backend;
char error_buffer[WOLFSSL_MAX_ERROR_SZ];
int memlen = (len > (size_t)INT_MAX) ? INT_MAX : (int)len;
int rc;
DEBUGASSERT(backend);
- ERR_clear_error();
-
- rc = SSL_write(backend->handle, mem, memlen);
+ wolfSSL_ERR_clear_error();
+ rc = wolfSSL_write(backend->handle, mem, memlen);
if(rc <= 0) {
- int err = SSL_get_error(backend->handle, rc);
+ int err = wolfSSL_get_error(backend->handle, rc);
switch(err) {
case SSL_ERROR_WANT_READ:
case SSL_ERROR_WANT_WRITE:
/* there's data pending, re-invoke SSL_write() */
+ CURL_TRC_CF(data, cf, "wolfssl_send(len=%zu) -> AGAIN", len);
*curlcode = CURLE_AGAIN;
return -1;
default:
+ if(backend->io_result == CURLE_AGAIN) {
+ CURL_TRC_CF(data, cf, "wolfssl_send(len=%zu) -> AGAIN", len);
+ *curlcode = CURLE_AGAIN;
+ return -1;
+ }
+ CURL_TRC_CF(data, cf, "wolfssl_send(len=%zu) -> %d, %d", len, rc, err);
failf(data, "SSL write: %s, errno %d",
- ERR_error_string(err, error_buffer),
+ wolfSSL_ERR_error_string(err, error_buffer),
SOCKERRNO);
*curlcode = CURLE_SEND_ERROR;
return -1;
}
}
+ CURL_TRC_CF(data, cf, "wolfssl_send(len=%zu) -> %d", len, rc);
return rc;
}
-static void wolfssl_close(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
+static void wolfssl_close(struct Curl_cfilter *cf, struct Curl_easy *data)
{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct wolfssl_ssl_backend_data *backend =
+ (struct wolfssl_ssl_backend_data *)connssl->backend;
(void) data;
@@ -910,64 +1045,73 @@ static void wolfssl_close(struct Curl_easy *data, struct connectdata *conn,
char buf[32];
/* Maybe the server has already sent a close notify alert.
Read it to avoid an RST on the TCP connection. */
- (void)SSL_read(backend->handle, buf, (int)sizeof(buf));
- (void)SSL_shutdown(backend->handle);
- SSL_free(backend->handle);
+ (void)wolfSSL_read(backend->handle, buf, (int)sizeof(buf));
+ (void)wolfSSL_shutdown(backend->handle);
+ wolfSSL_free(backend->handle);
backend->handle = NULL;
}
if(backend->ctx) {
- SSL_CTX_free(backend->ctx);
+ wolfSSL_CTX_free(backend->ctx);
backend->ctx = NULL;
}
}
-static ssize_t wolfssl_recv(struct Curl_easy *data,
- int num,
- char *buf,
- size_t buffersize,
+static ssize_t wolfssl_recv(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ char *buf, size_t blen,
CURLcode *curlcode)
{
- struct connectdata *conn = data->conn;
- struct ssl_connect_data *connssl = &conn->ssl[num];
- struct ssl_backend_data *backend = connssl->backend;
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct wolfssl_ssl_backend_data *backend =
+ (struct wolfssl_ssl_backend_data *)connssl->backend;
char error_buffer[WOLFSSL_MAX_ERROR_SZ];
- int buffsize = (buffersize > (size_t)INT_MAX) ? INT_MAX : (int)buffersize;
+ int buffsize = (blen > (size_t)INT_MAX) ? INT_MAX : (int)blen;
int nread;
DEBUGASSERT(backend);
- ERR_clear_error();
+ wolfSSL_ERR_clear_error();
+ *curlcode = CURLE_OK;
- nread = SSL_read(backend->handle, buf, buffsize);
+ nread = wolfSSL_read(backend->handle, buf, buffsize);
if(nread <= 0) {
- int err = SSL_get_error(backend->handle, nread);
+ int err = wolfSSL_get_error(backend->handle, nread);
switch(err) {
case SSL_ERROR_ZERO_RETURN: /* no more data */
- break;
+ CURL_TRC_CF(data, cf, "wolfssl_recv(len=%zu) -> CLOSED", blen);
+ *curlcode = CURLE_OK;
+ return 0;
case SSL_ERROR_NONE:
/* FALLTHROUGH */
case SSL_ERROR_WANT_READ:
/* FALLTHROUGH */
case SSL_ERROR_WANT_WRITE:
- /* there's data pending, re-invoke SSL_read() */
+ /* there's data pending, re-invoke wolfSSL_read() */
+ CURL_TRC_CF(data, cf, "wolfssl_recv(len=%zu) -> AGAIN", blen);
*curlcode = CURLE_AGAIN;
return -1;
default:
+ if(backend->io_result == CURLE_AGAIN) {
+ CURL_TRC_CF(data, cf, "wolfssl_recv(len=%zu) -> AGAIN", blen);
+ *curlcode = CURLE_AGAIN;
+ return -1;
+ }
failf(data, "SSL read: %s, errno %d",
- ERR_error_string(err, error_buffer), SOCKERRNO);
+ wolfSSL_ERR_error_string(err, error_buffer), SOCKERRNO);
*curlcode = CURLE_RECV_ERROR;
return -1;
}
}
+ CURL_TRC_CF(data, cf, "wolfssl_recv(len=%zu) -> %d", blen, nread);
return nread;
}
static void wolfssl_session_free(void *ptr)
{
- SSL_SESSION_free(ptr);
+ wolfSSL_SESSION_free(ptr);
}
@@ -983,15 +1127,20 @@ static size_t wolfssl_version(char *buffer, size_t size)
static int wolfssl_init(void)
{
+ int ret;
+
#ifdef OPENSSL_EXTRA
Curl_tls_keylog_open();
#endif
- return (wolfSSL_Init() == SSL_SUCCESS);
+ ret = (wolfSSL_Init() == SSL_SUCCESS);
+ wolfssl_bio_cf_init_methods();
+ return ret;
}
static void wolfssl_cleanup(void)
{
+ wolfssl_bio_cf_free_methods();
wolfSSL_Cleanup();
#ifdef OPENSSL_EXTRA
Curl_tls_keylog_close();
@@ -999,14 +1148,18 @@ static void wolfssl_cleanup(void)
}
-static bool wolfssl_data_pending(const struct connectdata *conn,
- int connindex)
+static bool wolfssl_data_pending(struct Curl_cfilter *cf,
+ const struct Curl_easy *data)
{
- const struct ssl_connect_data *connssl = &conn->ssl[connindex];
- struct ssl_backend_data *backend = connssl->backend;
- DEBUGASSERT(backend);
+ struct ssl_connect_data *ctx = cf->ctx;
+ struct wolfssl_ssl_backend_data *backend;
+
+ (void)data;
+ DEBUGASSERT(ctx && ctx->backend);
+
+ backend = (struct wolfssl_ssl_backend_data *)ctx->backend;
if(backend->handle) /* SSL is in use */
- return (0 != SSL_pending(backend->handle)) ? TRUE : FALSE;
+ return (0 != wolfSSL_pending(backend->handle)) ? TRUE : FALSE;
else
return FALSE;
}
@@ -1016,20 +1169,20 @@ static bool wolfssl_data_pending(const struct connectdata *conn,
* This function is called to shut down the SSL layer but keep the
* socket open (CCC - Clear Command Channel)
*/
-static int wolfssl_shutdown(struct Curl_easy *data, struct connectdata *conn,
- int sockindex)
+static int wolfssl_shutdown(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
+ struct ssl_connect_data *ctx = cf->ctx;
+ struct wolfssl_ssl_backend_data *backend;
int retval = 0;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct ssl_backend_data *backend = connssl->backend;
- (void) data;
-
- DEBUGASSERT(backend);
+ (void)data;
+ DEBUGASSERT(ctx && ctx->backend);
+ backend = (struct wolfssl_ssl_backend_data *)ctx->backend;
if(backend->handle) {
- ERR_clear_error();
- SSL_free(backend->handle);
+ wolfSSL_ERR_clear_error();
+ wolfSSL_free(backend->handle);
backend->handle = NULL;
}
return retval;
@@ -1037,15 +1190,14 @@ static int wolfssl_shutdown(struct Curl_easy *data, struct connectdata *conn,
static CURLcode
-wolfssl_connect_common(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex,
- bool nonblocking,
- bool *done)
+wolfssl_connect_common(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool nonblocking,
+ bool *done)
{
CURLcode result;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- curl_socket_t sockfd = conn->sock[sockindex];
+ struct ssl_connect_data *connssl = cf->ctx;
+ curl_socket_t sockfd = Curl_conn_cf_get_socket(cf, data);
int what;
/* check if the connection has already been established */
@@ -1064,7 +1216,7 @@ wolfssl_connect_common(struct Curl_easy *data,
return CURLE_OPERATION_TIMEDOUT;
}
- result = wolfssl_connect_step1(data, conn, sockindex);
+ result = wolfssl_connect_step1(cf, data);
if(result)
return result;
}
@@ -1119,7 +1271,7 @@ wolfssl_connect_common(struct Curl_easy *data,
* ensuring that a client using select() or epoll() will always
* have a valid fdset to wait on.
*/
- result = wolfssl_connect_step2(data, conn, sockindex);
+ result = wolfssl_connect_step2(cf, data);
if(result || (nonblocking &&
(ssl_connect_2 == connssl->connecting_state ||
ssl_connect_2_reading == connssl->connecting_state ||
@@ -1128,15 +1280,13 @@ wolfssl_connect_common(struct Curl_easy *data,
} /* repeat step2 until all transactions are done. */
if(ssl_connect_3 == connssl->connecting_state) {
- result = wolfssl_connect_step3(data, conn, sockindex);
+ result = wolfssl_connect_step3(cf, data);
if(result)
return result;
}
if(ssl_connect_done == connssl->connecting_state) {
connssl->state = ssl_connection_complete;
- conn->recv[sockindex] = wolfssl_recv;
- conn->send[sockindex] = wolfssl_send;
*done = TRUE;
}
else
@@ -1149,21 +1299,21 @@ wolfssl_connect_common(struct Curl_easy *data,
}
-static CURLcode wolfssl_connect_nonblocking(struct Curl_easy *data,
- struct connectdata *conn,
- int sockindex, bool *done)
+static CURLcode wolfssl_connect_nonblocking(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool *done)
{
- return wolfssl_connect_common(data, conn, sockindex, TRUE, done);
+ return wolfssl_connect_common(cf, data, TRUE, done);
}
-static CURLcode wolfssl_connect(struct Curl_easy *data,
- struct connectdata *conn, int sockindex)
+static CURLcode wolfssl_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data)
{
CURLcode result;
bool done = FALSE;
- result = wolfssl_connect_common(data, conn, sockindex, FALSE, &done);
+ result = wolfssl_connect_common(cf, data, FALSE, &done);
if(result)
return result;
@@ -1195,7 +1345,8 @@ static CURLcode wolfssl_sha256sum(const unsigned char *tmp, /* input */
{
wc_Sha256 SHA256pw;
(void)unused;
- wc_InitSha256(&SHA256pw);
+ if(wc_InitSha256(&SHA256pw))
+ return CURLE_FAILED_INIT;
wc_Sha256Update(&SHA256pw, tmp, (word32)tmplen);
wc_Sha256Final(&SHA256pw, sha256sum);
return CURLE_OK;
@@ -1204,7 +1355,8 @@ static CURLcode wolfssl_sha256sum(const unsigned char *tmp, /* input */
static void *wolfssl_get_internals(struct ssl_connect_data *connssl,
CURLINFO info UNUSED_PARAM)
{
- struct ssl_backend_data *backend = connssl->backend;
+ struct wolfssl_ssl_backend_data *backend =
+ (struct wolfssl_ssl_backend_data *)connssl->backend;
(void)info;
DEBUGASSERT(backend);
return backend->handle;
@@ -1216,9 +1368,14 @@ const struct Curl_ssl Curl_ssl_wolfssl = {
#ifdef KEEP_PEER_CERT
SSLSUPP_PINNEDPUBKEY |
#endif
+#ifdef USE_BIO_CHAIN
+ SSLSUPP_HTTPS_PROXY |
+#endif
+ SSLSUPP_CA_PATH |
+ SSLSUPP_CAINFO_BLOB |
SSLSUPP_SSL_CTX,
- sizeof(struct ssl_backend_data),
+ sizeof(struct wolfssl_ssl_backend_data),
wolfssl_init, /* init */
wolfssl_cleanup, /* cleanup */
@@ -1230,7 +1387,7 @@ const struct Curl_ssl Curl_ssl_wolfssl = {
Curl_none_cert_status_request, /* cert_status_request */
wolfssl_connect, /* connect */
wolfssl_connect_nonblocking, /* connect_nonblocking */
- Curl_ssl_getsock, /* getsock */
+ Curl_ssl_adjust_pollset, /* adjust_pollset */
wolfssl_get_internals, /* get_internals */
wolfssl_close, /* close_one */
Curl_none_close_all, /* close_all */
@@ -1241,7 +1398,10 @@ const struct Curl_ssl Curl_ssl_wolfssl = {
Curl_none_false_start, /* false_start */
wolfssl_sha256sum, /* sha256sum */
NULL, /* associate_connection */
- NULL /* disassociate_connection */
+ NULL, /* disassociate_connection */
+ NULL, /* free_multi_ssl_backend_data */
+ wolfssl_recv, /* recv decrypted data */
+ wolfssl_send, /* send data to encrypt */
};
#endif
diff --git a/lib/vtls/wolfssl.h b/lib/vtls/wolfssl.h
index b2e7c3fde..a5ed84809 100644
--- a/lib/vtls/wolfssl.h
+++ b/lib/vtls/wolfssl.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/lib/vtls/x509asn1.c b/lib/vtls/x509asn1.c
index 0cfcbe87d..8b1eed63f 100644
--- a/lib/vtls/x509asn1.c
+++ b/lib/vtls/x509asn1.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,30 +24,25 @@
#include "curl_setup.h"
-#if defined(USE_GSKIT) || defined(USE_NSS) || defined(USE_GNUTLS) || \
- defined(USE_WOLFSSL) || defined(USE_SCHANNEL) || defined(USE_SECTRANSP)
+#if defined(USE_GNUTLS) || defined(USE_WOLFSSL) || \
+ defined(USE_SCHANNEL) || defined(USE_SECTRANSP)
-#if defined(USE_GSKIT) || defined(USE_WOLFSSL) || defined(USE_SCHANNEL)
+#if defined(USE_WOLFSSL) || defined(USE_SCHANNEL)
#define WANT_PARSEX509 /* uses Curl_parseX509() */
#endif
-#if defined(USE_GSKIT) || defined(USE_NSS) || defined(USE_GNUTLS) || \
- defined(USE_SCHANNEL) || defined(USE_SECTRANSP)
+#if defined(USE_GNUTLS) || defined(USE_SCHANNEL) || defined(USE_SECTRANSP)
#define WANT_EXTRACT_CERTINFO /* uses Curl_extract_certinfo() */
#define WANT_PARSEX509 /* ... uses Curl_parseX509() */
#endif
-#if defined(USE_GSKIT)
-#define WANT_VERIFYHOST /* uses Curl_verifyhost () */
-#define WANT_PARSEX509 /* ... uses Curl_parseX509() */
-#endif
-
#include <curl/curl.h>
#include "urldata.h"
#include "strcase.h"
#include "curl_ctype.h"
#include "hostcheck.h"
#include "vtls/vtls.h"
+#include "vtls/vtls_int.h"
#include "sendf.h"
#include "inet_pton.h"
#include "curl_base64.h"
@@ -171,7 +166,7 @@ static const struct Curl_OID OIDtable[] = {
* It is intended to support certificate information gathering for SSL backends
* that offer a mean to get certificates as a whole, but do not supply
* entry points to get particular certificate sub-fields.
- * Please note there is no pretention here to rewrite a full SSL library.
+ * Please note there is no pretension here to rewrite a full SSL library.
*/
static const char *getASN1Element(struct Curl_asn1Element *elem,
@@ -182,7 +177,7 @@ static const char *getASN1Element(struct Curl_asn1Element *elem,
const char *beg, const char *end)
{
unsigned char b;
- unsigned long len;
+ size_t len;
struct Curl_asn1Element lelem;
/* Get a single ASN.1 element into `elem', parse ASN.1 string at `beg'
@@ -307,7 +302,7 @@ static const char *bit2str(const char *beg, const char *end)
*/
static const char *int2str(const char *beg, const char *end)
{
- unsigned long val = 0;
+ unsigned int val = 0;
size_t n = end - beg;
if(!n)
@@ -323,7 +318,7 @@ static const char *int2str(const char *beg, const char *end)
do
val = (val << 8) | *(const unsigned char *) beg++;
while(beg < end);
- return curl_maprintf("%s%lx", val >= 10? "0x": "", val);
+ return curl_maprintf("%s%x", val >= 10? "0x": "", val);
}
/*
@@ -917,6 +912,20 @@ static const char *dumpAlgo(struct Curl_asn1Element *param,
return OID2str(oid.beg, oid.end, TRUE);
}
+/*
+ * This is a convenience function for push_certinfo_len that takes a zero
+ * terminated value.
+ */
+static CURLcode ssl_push_certinfo(struct Curl_easy *data,
+ int certnum,
+ const char *label,
+ const char *value)
+{
+ size_t valuelen = strlen(value);
+
+ return Curl_ssl_push_certinfo_len(data, certnum, label, value, valuelen);
+}
+
/* return 0 on success, 1 on error */
static int do_pubkey_field(struct Curl_easy *data, int certnum,
const char *label, struct Curl_asn1Element *elem)
@@ -929,7 +938,7 @@ static int do_pubkey_field(struct Curl_easy *data, int certnum,
output = ASN1tostr(elem, 0);
if(output) {
if(data->set.ssl.certinfo)
- result = Curl_ssl_push_certinfo(data, certnum, label, output);
+ result = ssl_push_certinfo(data, certnum, label, output);
if(!certnum && !result)
infof(data, " %s: %s", label, output);
free((char *) output);
@@ -953,14 +962,13 @@ static int do_pubkey(struct Curl_easy *data, int certnum,
* ECC public key is all the data, a value of type BIT STRING mapped to
* OCTET STRING and should not be parsed as an ASN.1 value.
*/
- const unsigned long len =
- (unsigned long)((pubkey->end - pubkey->beg - 2) * 4);
+ const size_t len = ((pubkey->end - pubkey->beg - 2) * 4);
if(!certnum)
infof(data, " ECC Public Key (%lu bits)", len);
if(data->set.ssl.certinfo) {
char q[sizeof(len) * 8 / 3 + 1];
- (void)msnprintf(q, sizeof(q), "%lu", len);
- if(Curl_ssl_push_certinfo(data, certnum, "ECC Public Key", q))
+ (void)msnprintf(q, sizeof(q), "%zu", len);
+ if(ssl_push_certinfo(data, certnum, "ECC Public Key", q))
return 1;
}
return do_pubkey_field(data, certnum, "ecPublicKey", pubkey);
@@ -972,7 +980,7 @@ static int do_pubkey(struct Curl_easy *data, int certnum,
if(strcasecompare(algo, "rsaEncryption")) {
const char *q;
- unsigned long len;
+ size_t len;
p = getASN1Element(&elem, pk.beg, pk.end);
if(!p)
@@ -981,7 +989,7 @@ static int do_pubkey(struct Curl_easy *data, int certnum,
/* Compute key length. */
for(q = elem.beg; !*q && q < elem.end; q++)
;
- len = (unsigned long)((elem.end - q) * 8);
+ len = ((elem.end - q) * 8);
if(len) {
unsigned int i;
for(i = *(unsigned char *) q; !(i & 0x80); i <<= 1)
@@ -993,8 +1001,8 @@ static int do_pubkey(struct Curl_easy *data, int certnum,
infof(data, " RSA Public Key (%lu bits)", len);
if(data->set.ssl.certinfo) {
char r[sizeof(len) * 8 / 3 + 1];
- msnprintf(r, sizeof(r), "%lu", len);
- if(Curl_ssl_push_certinfo(data, certnum, "RSA Public Key", r))
+ msnprintf(r, sizeof(r), "%zu", len);
+ if(ssl_push_certinfo(data, certnum, "RSA Public Key", r))
return 1;
}
/* Generate coefficients. */
@@ -1073,7 +1081,7 @@ CURLcode Curl_extract_certinfo(struct Curl_easy *data,
size_t cl1;
char *cp2;
CURLcode result = CURLE_OK;
- unsigned long version;
+ unsigned int version;
size_t i;
size_t j;
@@ -1092,7 +1100,7 @@ CURLcode Curl_extract_certinfo(struct Curl_easy *data,
if(!ccp)
return CURLE_OUT_OF_MEMORY;
if(data->set.ssl.certinfo) {
- result = Curl_ssl_push_certinfo(data, certnum, "Subject", ccp);
+ result = ssl_push_certinfo(data, certnum, "Subject", ccp);
if(result)
return result;
}
@@ -1105,7 +1113,7 @@ CURLcode Curl_extract_certinfo(struct Curl_easy *data,
if(!ccp)
return CURLE_OUT_OF_MEMORY;
if(data->set.ssl.certinfo) {
- result = Curl_ssl_push_certinfo(data, certnum, "Issuer", ccp);
+ result = ssl_push_certinfo(data, certnum, "Issuer", ccp);
}
if(!certnum)
infof(data, " Issuer: %s", ccp);
@@ -1118,23 +1126,23 @@ CURLcode Curl_extract_certinfo(struct Curl_easy *data,
for(ccp = cert.version.beg; ccp < cert.version.end; ccp++)
version = (version << 8) | *(const unsigned char *) ccp;
if(data->set.ssl.certinfo) {
- ccp = curl_maprintf("%lx", version);
+ ccp = curl_maprintf("%x", version);
if(!ccp)
return CURLE_OUT_OF_MEMORY;
- result = Curl_ssl_push_certinfo(data, certnum, "Version", ccp);
+ result = ssl_push_certinfo(data, certnum, "Version", ccp);
free((char *) ccp);
if(result)
return result;
}
if(!certnum)
- infof(data, " Version: %lu (0x%lx)", version + 1, version);
+ infof(data, " Version: %u (0x%x)", version + 1, version);
/* Serial number. */
ccp = ASN1tostr(&cert.serialNumber, 0);
if(!ccp)
return CURLE_OUT_OF_MEMORY;
if(data->set.ssl.certinfo)
- result = Curl_ssl_push_certinfo(data, certnum, "Serial Number", ccp);
+ result = ssl_push_certinfo(data, certnum, "Serial Number", ccp);
if(!certnum)
infof(data, " Serial Number: %s", ccp);
free((char *) ccp);
@@ -1147,7 +1155,7 @@ CURLcode Curl_extract_certinfo(struct Curl_easy *data,
if(!ccp)
return CURLE_OUT_OF_MEMORY;
if(data->set.ssl.certinfo)
- result = Curl_ssl_push_certinfo(data, certnum, "Signature Algorithm", ccp);
+ result = ssl_push_certinfo(data, certnum, "Signature Algorithm", ccp);
if(!certnum)
infof(data, " Signature Algorithm: %s", ccp);
free((char *) ccp);
@@ -1159,7 +1167,7 @@ CURLcode Curl_extract_certinfo(struct Curl_easy *data,
if(!ccp)
return CURLE_OUT_OF_MEMORY;
if(data->set.ssl.certinfo)
- result = Curl_ssl_push_certinfo(data, certnum, "Start Date", ccp);
+ result = ssl_push_certinfo(data, certnum, "Start Date", ccp);
if(!certnum)
infof(data, " Start Date: %s", ccp);
free((char *) ccp);
@@ -1171,7 +1179,7 @@ CURLcode Curl_extract_certinfo(struct Curl_easy *data,
if(!ccp)
return CURLE_OUT_OF_MEMORY;
if(data->set.ssl.certinfo)
- result = Curl_ssl_push_certinfo(data, certnum, "Expire Date", ccp);
+ result = ssl_push_certinfo(data, certnum, "Expire Date", ccp);
if(!certnum)
infof(data, " Expire Date: %s", ccp);
free((char *) ccp);
@@ -1184,7 +1192,7 @@ CURLcode Curl_extract_certinfo(struct Curl_easy *data,
if(!ccp)
return CURLE_OUT_OF_MEMORY;
if(data->set.ssl.certinfo)
- result = Curl_ssl_push_certinfo(data, certnum, "Public Key Algorithm",
+ result = ssl_push_certinfo(data, certnum, "Public Key Algorithm",
ccp);
if(!result) {
int ret;
@@ -1203,7 +1211,7 @@ CURLcode Curl_extract_certinfo(struct Curl_easy *data,
if(!ccp)
return CURLE_OUT_OF_MEMORY;
if(data->set.ssl.certinfo)
- result = Curl_ssl_push_certinfo(data, certnum, "Signature", ccp);
+ result = ssl_push_certinfo(data, certnum, "Signature", ccp);
if(!certnum)
infof(data, " Signature: %s", ccp);
free((char *) ccp);
@@ -1238,7 +1246,7 @@ CURLcode Curl_extract_certinfo(struct Curl_easy *data,
cp2[i] = '\0';
free(cp1);
if(data->set.ssl.certinfo)
- result = Curl_ssl_push_certinfo(data, certnum, "Cert", cp2);
+ result = ssl_push_certinfo(data, certnum, "Cert", cp2);
if(!certnum)
infof(data, "%s", cp2);
free(cp2);
@@ -1247,8 +1255,7 @@ CURLcode Curl_extract_certinfo(struct Curl_easy *data,
#endif /* WANT_EXTRACT_CERTINFO */
-#endif /* USE_GSKIT or USE_NSS or USE_GNUTLS or USE_WOLFSSL or USE_SCHANNEL
- * or USE_SECTRANSP */
+#endif /* USE_GNUTLS or USE_WOLFSSL or USE_SCHANNEL or USE_SECTRANSP */
#ifdef WANT_VERIFYHOST
@@ -1276,9 +1283,12 @@ static const char *checkOID(const char *beg, const char *end,
return matched? ccp: NULL;
}
-CURLcode Curl_verifyhost(struct Curl_easy *data, struct connectdata *conn,
+CURLcode Curl_verifyhost(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
const char *beg, const char *end)
{
+ struct ssl_connect_data *connssl = cf->ctx;
+ struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf);
struct Curl_X509certificate cert;
struct Curl_asn1Element dn;
struct Curl_asn1Element elem;
@@ -1290,9 +1300,8 @@ CURLcode Curl_verifyhost(struct Curl_easy *data, struct connectdata *conn,
int matched = -1;
size_t addrlen = (size_t) -1;
ssize_t len;
- const char * const hostname = SSL_HOST_NAME();
- const char * const dispname = SSL_HOST_DISPNAME();
- size_t hostlen = strlen(hostname);
+ size_t hostlen;
+
#ifdef ENABLE_IPV6
struct in6_addr addr;
#else
@@ -1302,19 +1311,22 @@ CURLcode Curl_verifyhost(struct Curl_easy *data, struct connectdata *conn,
/* Verify that connection server matches info in X509 certificate at
`beg'..`end'. */
- if(!SSL_CONN_CONFIG(verifyhost))
+ if(!conn_config->verifyhost)
return CURLE_OK;
if(Curl_parseX509(&cert, beg, end))
return CURLE_PEER_FAILED_VERIFICATION;
+ hostlen = strlen(connssl->peer.hostname);
+
/* Get the server IP address. */
#ifdef ENABLE_IPV6
- if(conn->bits.ipv6_ip && Curl_inet_pton(AF_INET6, hostname, &addr))
+ if(cf->conn->bits.ipv6_ip &&
+ Curl_inet_pton(AF_INET6, connssl->peer.hostname, &addr))
addrlen = sizeof(struct in6_addr);
else
#endif
- if(Curl_inet_pton(AF_INET, hostname, &addr))
+ if(Curl_inet_pton(AF_INET, connssl->peer.hostname, &addr))
addrlen = sizeof(struct in_addr);
/* Process extensions. */
@@ -1348,16 +1360,16 @@ CURLcode Curl_verifyhost(struct Curl_easy *data, struct connectdata *conn,
len = utf8asn1str(&dnsname, CURL_ASN1_IA5_STRING,
name.beg, name.end);
if(len > 0 && (size_t)len == strlen(dnsname))
- matched = Curl_cert_hostcheck(dnsname,
- (size_t)len, hostname, hostlen);
+ matched = Curl_cert_hostcheck(dnsname, (size_t)len,
+ connssl->peer.hostname, hostlen);
else
matched = 0;
free(dnsname);
break;
case 7: /* IP address. */
- matched = (size_t) (name.end - name.beg) == addrlen &&
- !memcmp(&addr, name.beg, addrlen);
+ matched = (size_t)(name.end - name.beg) == addrlen &&
+ !memcmp(&addr, name.beg, addrlen);
break;
}
}
@@ -1367,12 +1379,12 @@ CURLcode Curl_verifyhost(struct Curl_easy *data, struct connectdata *conn,
switch(matched) {
case 1:
/* an alternative name matched the server hostname */
- infof(data, " subjectAltName: %s matched", dispname);
+ infof(data, " subjectAltName: %s matched", connssl->dispname);
return CURLE_OK;
case 0:
/* an alternative name field existed, but didn't match and then
we MUST fail */
- infof(data, " subjectAltName does not match %s", dispname);
+ infof(data, " subjectAltName does not match %s", connssl->dispname);
return CURLE_PEER_FAILED_VERIFICATION;
}
@@ -1409,14 +1421,14 @@ CURLcode Curl_verifyhost(struct Curl_easy *data, struct connectdata *conn,
if(strlen(dnsname) != (size_t) len) /* Nul byte in string ? */
failf(data, "SSL: illegal cert name field");
else if(Curl_cert_hostcheck((const char *) dnsname,
- len, hostname, hostlen)) {
+ len, connssl->peer.hostname, hostlen)) {
infof(data, " common name: %s (matched)", dnsname);
free(dnsname);
return CURLE_OK;
}
else
failf(data, "SSL: certificate subject name '%s' does not match "
- "target host name '%s'", dnsname, dispname);
+ "target host name '%s'", dnsname, connssl->dispname);
free(dnsname);
}
diff --git a/lib/vtls/x509asn1.h b/lib/vtls/x509asn1.h
index a18fa1153..23a67b828 100644
--- a/lib/vtls/x509asn1.h
+++ b/lib/vtls/x509asn1.h
@@ -8,7 +8,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -27,9 +27,10 @@
#include "curl_setup.h"
-#if defined(USE_GSKIT) || defined(USE_NSS) || defined(USE_GNUTLS) || \
- defined(USE_WOLFSSL) || defined(USE_SCHANNEL) || defined(USE_SECTRANSP)
+#if defined(USE_GNUTLS) || defined(USE_WOLFSSL) || \
+ defined(USE_SCHANNEL) || defined(USE_SECTRANSP)
+#include "cfilters.h"
#include "urldata.h"
/*
@@ -73,8 +74,7 @@ int Curl_parseX509(struct Curl_X509certificate *cert,
const char *beg, const char *end);
CURLcode Curl_extract_certinfo(struct Curl_easy *data, int certnum,
const char *beg, const char *end);
-CURLcode Curl_verifyhost(struct Curl_easy *data, struct connectdata *conn,
+CURLcode Curl_verifyhost(struct Curl_cfilter *cf, struct Curl_easy *data,
const char *beg, const char *end);
-#endif /* USE_GSKIT or USE_NSS or USE_GNUTLS or USE_WOLFSSL or USE_SCHANNEL
- * or USE_SECTRANSP */
+#endif /* USE_GNUTLS or USE_WOLFSSL or USE_SCHANNEL or USE_SECTRANSP */
#endif /* HEADER_CURL_X509ASN1_H */
diff --git a/lib/warnless.c b/lib/warnless.c
index b00d7a5a2..c80937b84 100644
--- a/lib/warnless.c
+++ b/lib/warnless.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -35,10 +35,13 @@
#endif /* __INTEL_COMPILER && __unix__ */
-#define BUILDING_WARNLESS_C 1
-
#include "warnless.h"
+#ifdef _WIN32
+#undef read
+#undef write
+#endif
+
#include <limits.h>
#define CURL_MASK_UCHAR ((unsigned char)~0)
@@ -364,7 +367,7 @@ curl_socket_t curlx_sitosk(int i)
#endif /* USE_WINSOCK */
-#if defined(WIN32)
+#if defined(_WIN32)
ssize_t curlx_read(int fd, void *buf, size_t count)
{
@@ -376,56 +379,8 @@ ssize_t curlx_write(int fd, const void *buf, size_t count)
return (ssize_t)write(fd, buf, curlx_uztoui(count));
}
-#endif /* WIN32 */
-
-#if defined(__INTEL_COMPILER) && defined(__unix__)
-
-int curlx_FD_ISSET(int fd, fd_set *fdset)
-{
- #pragma warning(push)
- #pragma warning(disable:1469) /* clobber ignored */
- return FD_ISSET(fd, fdset);
- #pragma warning(pop)
-}
-
-void curlx_FD_SET(int fd, fd_set *fdset)
-{
- #pragma warning(push)
- #pragma warning(disable:1469) /* clobber ignored */
- FD_SET(fd, fdset);
- #pragma warning(pop)
-}
+#endif /* _WIN32 */
-void curlx_FD_ZERO(fd_set *fdset)
-{
- #pragma warning(push)
- #pragma warning(disable:593) /* variable was set but never used */
- FD_ZERO(fdset);
- #pragma warning(pop)
-}
-
-unsigned short curlx_htons(unsigned short usnum)
-{
-#if (__INTEL_COMPILER == 910) && defined(__i386__)
- return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF));
-#else
- #pragma warning(push)
- #pragma warning(disable:810) /* conversion may lose significant bits */
- return htons(usnum);
- #pragma warning(pop)
-#endif
-}
-
-unsigned short curlx_ntohs(unsigned short usnum)
-{
-#if (__INTEL_COMPILER == 910) && defined(__i386__)
- return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF));
-#else
- #pragma warning(push)
- #pragma warning(disable:810) /* conversion may lose significant bits */
- return ntohs(usnum);
- #pragma warning(pop)
-#endif
-}
-
-#endif /* __INTEL_COMPILER && __unix__ */
+/* Ensure that warnless.h redefinitions continue to have an effect
+ in "unity" builds. */
+#undef HEADER_CURL_WARNLESS_H_REDEFS
diff --git a/lib/warnless.h b/lib/warnless.h
index 4367099d9..e5a02c8d9 100644
--- a/lib/warnless.h
+++ b/lib/warnless.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -69,20 +69,13 @@ curl_socket_t curlx_sitosk(int i);
#endif /* USE_WINSOCK */
-#if defined(WIN32)
+#if defined(_WIN32)
ssize_t curlx_read(int fd, void *buf, size_t count);
ssize_t curlx_write(int fd, const void *buf, size_t count);
-#ifndef BUILDING_WARNLESS_C
-# undef read
-# define read(fd, buf, count) curlx_read(fd, buf, count)
-# undef write
-# define write(fd, buf, count) curlx_write(fd, buf, count)
-#endif
-
-#endif /* WIN32 */
+#endif /* _WIN32 */
#if defined(__INTEL_COMPILER) && defined(__unix__)
@@ -99,3 +92,15 @@ unsigned short curlx_ntohs(unsigned short usnum);
#endif /* __INTEL_COMPILER && __unix__ */
#endif /* HEADER_CURL_WARNLESS_H */
+
+#ifndef HEADER_CURL_WARNLESS_H_REDEFS
+#define HEADER_CURL_WARNLESS_H_REDEFS
+
+#if defined(_WIN32)
+#undef read
+#define read(fd, buf, count) curlx_read(fd, buf, count)
+#undef write
+#define write(fd, buf, count) curlx_write(fd, buf, count)
+#endif
+
+#endif /* HEADER_CURL_WARNLESS_H_REDEFS */
diff --git a/lib/wildcard.h b/lib/wildcard.h
deleted file mode 100644
index 21e933b9a..000000000
--- a/lib/wildcard.h
+++ /dev/null
@@ -1,70 +0,0 @@
-#ifndef HEADER_CURL_WILDCARD_H
-#define HEADER_CURL_WILDCARD_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2010 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed 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 "curl_setup.h"
-
-#ifndef CURL_DISABLE_FTP
-#include <curl/curl.h>
-#include "llist.h"
-
-/* list of wildcard process states */
-typedef enum {
- CURLWC_CLEAR = 0,
- CURLWC_INIT = 1,
- CURLWC_MATCHING, /* library is trying to get list of addresses for
- downloading */
- CURLWC_DOWNLOADING,
- CURLWC_CLEAN, /* deallocate resources and reset settings */
- CURLWC_SKIP, /* skip over concrete file */
- CURLWC_ERROR, /* error cases */
- CURLWC_DONE /* if is wildcard->state == CURLWC_DONE wildcard loop
- will end */
-} wildcard_states;
-
-typedef void (*wildcard_dtor)(void *ptr);
-
-/* struct keeping information about wildcard download process */
-struct WildcardData {
- wildcard_states state;
- char *path; /* path to the directory, where we trying wildcard-match */
- char *pattern; /* wildcard pattern */
- struct Curl_llist filelist; /* llist with struct Curl_fileinfo */
- void *protdata; /* pointer to protocol specific temporary data */
- wildcard_dtor dtor;
- void *customptr; /* for CURLOPT_CHUNK_DATA pointer */
-};
-
-CURLcode Curl_wildcard_init(struct WildcardData *wc);
-void Curl_wildcard_dtor(struct WildcardData *wc);
-
-struct Curl_easy;
-
-#else
-/* FTP is disabled */
-#define Curl_wildcard_dtor(x)
-#endif
-
-#endif /* HEADER_CURL_WILDCARD_H */
diff --git a/lib/ws.c b/lib/ws.c
index a67344662..adde531f5 100644
--- a/lib/ws.c
+++ b/lib/ws.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -27,9 +27,11 @@
#ifdef USE_WEBSOCKETS
#include "urldata.h"
+#include "bufq.h"
#include "dynbuf.h"
#include "rand.h"
#include "curl_base64.h"
+#include "connect.h"
#include "sendf.h"
#include "multiif.h"
#include "ws.h"
@@ -42,6 +44,488 @@
#include "curl_memory.h"
#include "memdebug.h"
+
+#define WSBIT_FIN 0x80
+#define WSBIT_OPCODE_CONT 0
+#define WSBIT_OPCODE_TEXT (1)
+#define WSBIT_OPCODE_BIN (2)
+#define WSBIT_OPCODE_CLOSE (8)
+#define WSBIT_OPCODE_PING (9)
+#define WSBIT_OPCODE_PONG (0xa)
+#define WSBIT_OPCODE_MASK (0xf)
+
+#define WSBIT_MASK 0x80
+
+/* buffer dimensioning */
+#define WS_CHUNK_SIZE 65535
+#define WS_CHUNK_COUNT 2
+
+struct ws_frame_meta {
+ char proto_opcode;
+ int flags;
+ const char *name;
+};
+
+static struct ws_frame_meta WS_FRAMES[] = {
+ { WSBIT_OPCODE_CONT, CURLWS_CONT, "CONT" },
+ { WSBIT_OPCODE_TEXT, CURLWS_TEXT, "TEXT" },
+ { WSBIT_OPCODE_BIN, CURLWS_BINARY, "BIN" },
+ { WSBIT_OPCODE_CLOSE, CURLWS_CLOSE, "CLOSE" },
+ { WSBIT_OPCODE_PING, CURLWS_PING, "PING" },
+ { WSBIT_OPCODE_PONG, CURLWS_PONG, "PONG" },
+};
+
+static const char *ws_frame_name_of_op(unsigned char proto_opcode)
+{
+ unsigned char opcode = proto_opcode & WSBIT_OPCODE_MASK;
+ size_t i;
+ for(i = 0; i < sizeof(WS_FRAMES)/sizeof(WS_FRAMES[0]); ++i) {
+ if(WS_FRAMES[i].proto_opcode == opcode)
+ return WS_FRAMES[i].name;
+ }
+ return "???";
+}
+
+static int ws_frame_op2flags(unsigned char proto_opcode)
+{
+ unsigned char opcode = proto_opcode & WSBIT_OPCODE_MASK;
+ size_t i;
+ for(i = 0; i < sizeof(WS_FRAMES)/sizeof(WS_FRAMES[0]); ++i) {
+ if(WS_FRAMES[i].proto_opcode == opcode)
+ return WS_FRAMES[i].flags;
+ }
+ return 0;
+}
+
+static unsigned char ws_frame_flags2op(int flags)
+{
+ size_t i;
+ for(i = 0; i < sizeof(WS_FRAMES)/sizeof(WS_FRAMES[0]); ++i) {
+ if(WS_FRAMES[i].flags & flags)
+ return WS_FRAMES[i].proto_opcode;
+ }
+ return 0;
+}
+
+static void ws_dec_info(struct ws_decoder *dec, struct Curl_easy *data,
+ const char *msg)
+{
+ switch(dec->head_len) {
+ case 0:
+ break;
+ case 1:
+ infof(data, "WS-DEC: %s [%s%s]", msg,
+ ws_frame_name_of_op(dec->head[0]),
+ (dec->head[0] & WSBIT_FIN)? "" : " NON-FINAL");
+ break;
+ default:
+ if(dec->head_len < dec->head_total) {
+ infof(data, "WS-DEC: %s [%s%s](%d/%d)", msg,
+ ws_frame_name_of_op(dec->head[0]),
+ (dec->head[0] & WSBIT_FIN)? "" : " NON-FINAL",
+ dec->head_len, dec->head_total);
+ }
+ else {
+ infof(data, "WS-DEC: %s [%s%s payload=%" CURL_FORMAT_CURL_OFF_T
+ "/%" CURL_FORMAT_CURL_OFF_T "]",
+ msg, ws_frame_name_of_op(dec->head[0]),
+ (dec->head[0] & WSBIT_FIN)? "" : " NON-FINAL",
+ dec->payload_offset, dec->payload_len);
+ }
+ break;
+ }
+}
+
+typedef ssize_t ws_write_payload(const unsigned char *buf, size_t buflen,
+ int frame_age, int frame_flags,
+ curl_off_t payload_offset,
+ curl_off_t payload_len,
+ void *userp,
+ CURLcode *err);
+
+
+static void ws_dec_reset(struct ws_decoder *dec)
+{
+ dec->frame_age = 0;
+ dec->frame_flags = 0;
+ dec->payload_offset = 0;
+ dec->payload_len = 0;
+ dec->head_len = dec->head_total = 0;
+ dec->state = WS_DEC_INIT;
+}
+
+static void ws_dec_init(struct ws_decoder *dec)
+{
+ ws_dec_reset(dec);
+}
+
+static CURLcode ws_dec_read_head(struct ws_decoder *dec,
+ struct Curl_easy *data,
+ struct bufq *inraw)
+{
+ const unsigned char *inbuf;
+ size_t inlen;
+
+ while(Curl_bufq_peek(inraw, &inbuf, &inlen)) {
+ if(dec->head_len == 0) {
+ dec->head[0] = *inbuf;
+ Curl_bufq_skip(inraw, 1);
+
+ dec->frame_flags = ws_frame_op2flags(dec->head[0]);
+ if(!dec->frame_flags) {
+ failf(data, "WS: unknown opcode: %x", dec->head[0]);
+ ws_dec_reset(dec);
+ return CURLE_RECV_ERROR;
+ }
+ dec->head_len = 1;
+ /* ws_dec_info(dec, data, "seeing opcode"); */
+ continue;
+ }
+ else if(dec->head_len == 1) {
+ dec->head[1] = *inbuf;
+ Curl_bufq_skip(inraw, 1);
+ dec->head_len = 2;
+
+ if(dec->head[1] & WSBIT_MASK) {
+ /* A client MUST close a connection if it detects a masked frame. */
+ failf(data, "WS: masked input frame");
+ ws_dec_reset(dec);
+ return CURLE_RECV_ERROR;
+ }
+ /* How long is the frame head? */
+ if(dec->head[1] == 126) {
+ dec->head_total = 4;
+ continue;
+ }
+ else if(dec->head[1] == 127) {
+ dec->head_total = 10;
+ continue;
+ }
+ else {
+ dec->head_total = 2;
+ }
+ }
+
+ if(dec->head_len < dec->head_total) {
+ dec->head[dec->head_len] = *inbuf;
+ Curl_bufq_skip(inraw, 1);
+ ++dec->head_len;
+ if(dec->head_len < dec->head_total) {
+ /* ws_dec_info(dec, data, "decoding head"); */
+ continue;
+ }
+ }
+ /* got the complete frame head */
+ DEBUGASSERT(dec->head_len == dec->head_total);
+ switch(dec->head_total) {
+ case 2:
+ dec->payload_len = dec->head[1];
+ break;
+ case 4:
+ dec->payload_len = (dec->head[2] << 8) | dec->head[3];
+ break;
+ case 10:
+ dec->payload_len = ((curl_off_t)dec->head[2] << 56) |
+ (curl_off_t)dec->head[3] << 48 |
+ (curl_off_t)dec->head[4] << 40 |
+ (curl_off_t)dec->head[5] << 32 |
+ (curl_off_t)dec->head[6] << 24 |
+ (curl_off_t)dec->head[7] << 16 |
+ (curl_off_t)dec->head[8] << 8 |
+ dec->head[9];
+ break;
+ default:
+ /* this should never happen */
+ DEBUGASSERT(0);
+ failf(data, "WS: unexpected frame header length");
+ return CURLE_RECV_ERROR;
+ }
+
+ dec->frame_age = 0;
+ dec->payload_offset = 0;
+ ws_dec_info(dec, data, "decoded");
+ return CURLE_OK;
+ }
+ return CURLE_AGAIN;
+}
+
+static CURLcode ws_dec_pass_payload(struct ws_decoder *dec,
+ struct Curl_easy *data,
+ struct bufq *inraw,
+ ws_write_payload *write_payload,
+ void *write_ctx)
+{
+ const unsigned char *inbuf;
+ size_t inlen;
+ ssize_t nwritten;
+ CURLcode result;
+ curl_off_t remain = dec->payload_len - dec->payload_offset;
+
+ (void)data;
+ while(remain && Curl_bufq_peek(inraw, &inbuf, &inlen)) {
+ if((curl_off_t)inlen > remain)
+ inlen = (size_t)remain;
+ nwritten = write_payload(inbuf, inlen, dec->frame_age, dec->frame_flags,
+ dec->payload_offset, dec->payload_len,
+ write_ctx, &result);
+ if(nwritten < 0)
+ return result;
+ Curl_bufq_skip(inraw, (size_t)nwritten);
+ dec->payload_offset += (curl_off_t)nwritten;
+ remain = dec->payload_len - dec->payload_offset;
+ /* infof(data, "WS-DEC: passed %zd bytes payload, %"
+ CURL_FORMAT_CURL_OFF_T " remain",
+ nwritten, remain); */
+ }
+
+ return remain? CURLE_AGAIN : CURLE_OK;
+}
+
+static CURLcode ws_dec_pass(struct ws_decoder *dec,
+ struct Curl_easy *data,
+ struct bufq *inraw,
+ ws_write_payload *write_payload,
+ void *write_ctx)
+{
+ CURLcode result;
+
+ if(Curl_bufq_is_empty(inraw))
+ return CURLE_AGAIN;
+
+ switch(dec->state) {
+ case WS_DEC_INIT:
+ ws_dec_reset(dec);
+ dec->state = WS_DEC_HEAD;
+ /* FALLTHROUGH */
+ case WS_DEC_HEAD:
+ result = ws_dec_read_head(dec, data, inraw);
+ if(result) {
+ if(result != CURLE_AGAIN) {
+ infof(data, "WS: decode error %d", (int)result);
+ break; /* real error */
+ }
+ /* incomplete ws frame head */
+ DEBUGASSERT(Curl_bufq_is_empty(inraw));
+ break;
+ }
+ /* head parsing done */
+ dec->state = WS_DEC_PAYLOAD;
+ if(dec->payload_len == 0) {
+ ssize_t nwritten;
+ const unsigned char tmp = '\0';
+ /* special case of a 0 length frame, need to write once */
+ nwritten = write_payload(&tmp, 0, dec->frame_age, dec->frame_flags,
+ 0, 0, write_ctx, &result);
+ if(nwritten < 0)
+ return result;
+ dec->state = WS_DEC_INIT;
+ break;
+ }
+ /* FALLTHROUGH */
+ case WS_DEC_PAYLOAD:
+ result = ws_dec_pass_payload(dec, data, inraw, write_payload, write_ctx);
+ ws_dec_info(dec, data, "passing");
+ if(result)
+ return result;
+ /* paylod parsing done */
+ dec->state = WS_DEC_INIT;
+ break;
+ default:
+ /* we covered all enums above, but some code analyzers are whimps */
+ result = CURLE_FAILED_INIT;
+ }
+ return result;
+}
+
+static void update_meta(struct websocket *ws,
+ int frame_age, int frame_flags,
+ curl_off_t payload_offset,
+ curl_off_t payload_len,
+ size_t cur_len)
+{
+ ws->frame.age = frame_age;
+ ws->frame.flags = frame_flags;
+ ws->frame.offset = payload_offset;
+ ws->frame.len = cur_len;
+ ws->frame.bytesleft = (payload_len - payload_offset - cur_len);
+}
+
+static void ws_enc_info(struct ws_encoder *enc, struct Curl_easy *data,
+ const char *msg)
+{
+ infof(data, "WS-ENC: %s [%s%s%s payload=%" CURL_FORMAT_CURL_OFF_T
+ "/%" CURL_FORMAT_CURL_OFF_T "]",
+ msg, ws_frame_name_of_op(enc->firstbyte),
+ (enc->firstbyte & WSBIT_OPCODE_MASK) == WSBIT_OPCODE_CONT ?
+ " CONT" : "",
+ (enc->firstbyte & WSBIT_FIN)? "" : " NON-FIN",
+ enc->payload_len - enc->payload_remain, enc->payload_len);
+}
+
+static void ws_enc_reset(struct ws_encoder *enc)
+{
+ enc->payload_remain = 0;
+ enc->xori = 0;
+ enc->contfragment = FALSE;
+}
+
+static void ws_enc_init(struct ws_encoder *enc)
+{
+ ws_enc_reset(enc);
+}
+
+/***
+ RFC 6455 Section 5.2
+
+ 0 1 2 3
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ +-+-+-+-+-------+-+-------------+-------------------------------+
+ |F|R|R|R| opcode|M| Payload len | Extended payload length |
+ |I|S|S|S| (4) |A| (7) | (16/64) |
+ |N|V|V|V| |S| | (if payload len==126/127) |
+ | |1|2|3| |K| | |
+ +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
+ | Extended payload length continued, if payload len == 127 |
+ + - - - - - - - - - - - - - - - +-------------------------------+
+ | |Masking-key, if MASK set to 1 |
+ +-------------------------------+-------------------------------+
+ | Masking-key (continued) | Payload Data |
+ +-------------------------------- - - - - - - - - - - - - - - - +
+ : Payload Data continued ... :
+ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
+ | Payload Data continued ... |
+ +---------------------------------------------------------------+
+*/
+
+static ssize_t ws_enc_write_head(struct Curl_easy *data,
+ struct ws_encoder *enc,
+ unsigned int flags,
+ curl_off_t payload_len,
+ struct bufq *out,
+ CURLcode *err)
+{
+ unsigned char firstbyte = 0;
+ unsigned char opcode;
+ unsigned char head[14];
+ size_t hlen;
+ ssize_t n;
+
+ if(enc->payload_remain > 0) {
+ /* trying to write a new frame before the previous one is finished */
+ failf(data, "WS: starting new frame with %zd bytes from last one"
+ "remaining to be sent", (ssize_t)enc->payload_remain);
+ *err = CURLE_SEND_ERROR;
+ return -1;
+ }
+
+ opcode = ws_frame_flags2op(flags);
+ if(!opcode) {
+ failf(data, "WS: provided flags not recognized '%x'", flags);
+ *err = CURLE_SEND_ERROR;
+ return -1;
+ }
+
+ if(!(flags & CURLWS_CONT)) {
+ if(!enc->contfragment)
+ /* not marked as continuing, this is the final fragment */
+ firstbyte |= WSBIT_FIN | opcode;
+ else
+ /* marked as continuing, this is the final fragment; set CONT
+ opcode and FIN bit */
+ firstbyte |= WSBIT_FIN | WSBIT_OPCODE_CONT;
+
+ enc->contfragment = FALSE;
+ }
+ else if(enc->contfragment) {
+ /* the previous fragment was not a final one and this isn't either, keep a
+ CONT opcode and no FIN bit */
+ firstbyte |= WSBIT_OPCODE_CONT;
+ }
+ else {
+ firstbyte = opcode;
+ enc->contfragment = TRUE;
+ }
+
+ head[0] = enc->firstbyte = firstbyte;
+ if(payload_len > 65535) {
+ head[1] = 127 | WSBIT_MASK;
+ head[2] = (unsigned char)((payload_len >> 56) & 0xff);
+ head[3] = (unsigned char)((payload_len >> 48) & 0xff);
+ head[4] = (unsigned char)((payload_len >> 40) & 0xff);
+ head[5] = (unsigned char)((payload_len >> 32) & 0xff);
+ head[6] = (unsigned char)((payload_len >> 24) & 0xff);
+ head[7] = (unsigned char)((payload_len >> 16) & 0xff);
+ head[8] = (unsigned char)((payload_len >> 8) & 0xff);
+ head[9] = (unsigned char)(payload_len & 0xff);
+ hlen = 10;
+ }
+ else if(payload_len >= 126) {
+ head[1] = 126 | WSBIT_MASK;
+ head[2] = (unsigned char)((payload_len >> 8) & 0xff);
+ head[3] = (unsigned char)(payload_len & 0xff);
+ hlen = 4;
+ }
+ else {
+ head[1] = (unsigned char)payload_len | WSBIT_MASK;
+ hlen = 2;
+ }
+
+ enc->payload_remain = enc->payload_len = payload_len;
+ ws_enc_info(enc, data, "sending");
+
+ /* add 4 bytes mask */
+ memcpy(&head[hlen], &enc->mask, 4);
+ hlen += 4;
+ /* reset for payload to come */
+ enc->xori = 0;
+
+ n = Curl_bufq_write(out, head, hlen, err);
+ if(n < 0)
+ return -1;
+ if((size_t)n != hlen) {
+ /* We use a bufq with SOFT_LIMIT, writing should always succeed */
+ DEBUGASSERT(0);
+ *err = CURLE_SEND_ERROR;
+ return -1;
+ }
+ return n;
+}
+
+static ssize_t ws_enc_write_payload(struct ws_encoder *enc,
+ struct Curl_easy *data,
+ const unsigned char *buf, size_t buflen,
+ struct bufq *out, CURLcode *err)
+{
+ ssize_t n;
+ size_t i, len;
+
+ if(Curl_bufq_is_full(out)) {
+ *err = CURLE_AGAIN;
+ return -1;
+ }
+
+ /* not the most performant way to do this */
+ len = buflen;
+ if((curl_off_t)len > enc->payload_remain)
+ len = (size_t)enc->payload_remain;
+
+ for(i = 0; i < len; ++i) {
+ unsigned char c = buf[i] ^ enc->mask[enc->xori];
+ n = Curl_bufq_write(out, &c, 1, err);
+ if(n < 0) {
+ if((*err != CURLE_AGAIN) || !i)
+ return -1;
+ break;
+ }
+ enc->xori++;
+ enc->xori &= 3;
+ }
+ enc->payload_remain -= (curl_off_t)i;
+ ws_enc_info(enc, data, "buffered");
+ return (ssize_t)i;
+}
+
+
struct wsfield {
const char *name;
const char *val;
@@ -111,18 +595,38 @@ CURLcode Curl_ws_request(struct Curl_easy *data, REQTYPE *req)
}
}
k->upgr101 = UPGR101_WS;
- Curl_dyn_init(&data->req.p.http->ws.buf, MAX_WS_SIZE * 2);
return result;
}
-CURLcode Curl_ws_accept(struct Curl_easy *data)
+/*
+ * 'nread' is number of bytes of websocket data already in the buffer at
+ * 'mem'.
+ */
+CURLcode Curl_ws_accept(struct Curl_easy *data,
+ const char *mem, size_t nread)
{
struct SingleRequest *k = &data->req;
- struct HTTP *ws = data->req.p.http;
- struct connectdata *conn = data->conn;
- struct websocket *wsp = &data->req.p.http->ws;
+ struct websocket *ws;
CURLcode result;
+ DEBUGASSERT(data->conn);
+ ws = data->conn->proto.ws;
+ if(!ws) {
+ ws = calloc(1, sizeof(*ws));
+ if(!ws)
+ return CURLE_OUT_OF_MEMORY;
+ data->conn->proto.ws = ws;
+ Curl_bufq_init(&ws->recvbuf, WS_CHUNK_SIZE, WS_CHUNK_COUNT);
+ Curl_bufq_init2(&ws->sendbuf, WS_CHUNK_SIZE, WS_CHUNK_COUNT,
+ BUFQ_OPT_SOFT_LIMIT);
+ ws_dec_init(&ws->dec);
+ ws_enc_init(&ws->enc);
+ }
+ else {
+ Curl_bufq_reset(&ws->recvbuf);
+ ws_dec_reset(&ws->dec);
+ ws_enc_reset(&ws->enc);
+ }
/* Verify the Sec-WebSocket-Accept response.
The sent value is the base64 encoded version of a SHA-1 hash done on the
@@ -143,184 +647,74 @@ CURLcode Curl_ws_accept(struct Curl_easy *data)
the WebSocket Connection. */
/* 4 bytes random */
- result = Curl_rand(data, (unsigned char *)&ws->ws.mask, sizeof(ws->ws.mask));
+
+ result = Curl_rand(data, (unsigned char *)&ws->enc.mask,
+ sizeof(ws->enc.mask));
if(result)
return result;
-
infof(data, "Received 101, switch to WebSocket; mask %02x%02x%02x%02x",
- ws->ws.mask[0], ws->ws.mask[1], ws->ws.mask[2], ws->ws.mask[3]);
+ ws->enc.mask[0], ws->enc.mask[1], ws->enc.mask[2], ws->enc.mask[3]);
+
+ if(data->set.connect_only) {
+ ssize_t nwritten;
+ /* In CONNECT_ONLY setup, the payloads from `mem` need to be received
+ * when using `curl_ws_recv` later on after this transfer is already
+ * marked as DONE. */
+ nwritten = Curl_bufq_write(&ws->recvbuf, (const unsigned char *)mem,
+ nread, &result);
+ if(nwritten < 0)
+ return result;
+ infof(data, "%zu bytes websocket payload", nread);
+ }
k->upgr101 = UPGR101_RECEIVED;
- if(data->set.connect_only)
- /* switch off non-blocking sockets */
- (void)curlx_nonblock(conn->sock[FIRSTSOCKET], FALSE);
-
- wsp->oleft = 0;
return result;
}
-#define WSBIT_FIN 0x80
-#define WSBIT_OPCODE_CONT 0
-#define WSBIT_OPCODE_TEXT (1)
-#define WSBIT_OPCODE_BIN (2)
-#define WSBIT_OPCODE_CLOSE (8)
-#define WSBIT_OPCODE_PING (9)
-#define WSBIT_OPCODE_PONG (0xa)
-#define WSBIT_OPCODE_MASK (0xf)
-
-#define WSBIT_MASK 0x80
-
-/* remove the spent bytes from the beginning of the buffer as that part has
- now been delivered to the application */
-static void ws_decode_clear(struct Curl_easy *data)
+static ssize_t ws_client_write(const unsigned char *buf, size_t buflen,
+ int frame_age, int frame_flags,
+ curl_off_t payload_offset,
+ curl_off_t payload_len,
+ void *userp,
+ CURLcode *err)
{
- struct websocket *wsp = &data->req.p.http->ws;
- size_t spent = wsp->usedbuf;
- size_t len = Curl_dyn_len(&wsp->buf);
- size_t keep = len - spent;
- DEBUGASSERT(len >= spent);
- Curl_dyn_tail(&wsp->buf, keep);
-}
-
-/* ws_decode() decodes a binary frame into structured WebSocket data,
-
- wpkt - the incoming raw data. If NULL, work on the already buffered data.
- ilen - the size of the provided data, perhaps too little, perhaps too much
- out - stored pointed to extracted data
- olen - stored length of the extracted data
- oleft - number of unread bytes pending to that belongs to this frame
- more - if there is more data in there
- flags - stored bitmask about the frame
-
- Returns CURLE_AGAIN if there is only a partial frame in the buffer. Then it
- stores the first part in the ->extra buffer to be used in the next call
- when more data is provided.
-*/
-
-static CURLcode ws_decode(struct Curl_easy *data,
- unsigned char *wpkt, size_t ilen,
- unsigned char **out, size_t *olen,
- curl_off_t *oleft,
- bool *more,
- unsigned int *flags)
-{
- bool fin;
- unsigned char opcode;
- curl_off_t total;
- size_t dataindex = 2;
- curl_off_t plen; /* size of data in the buffer */
- curl_off_t payloadsize;
- struct websocket *wsp = &data->req.p.http->ws;
- unsigned char *p;
- CURLcode result;
-
- *olen = 0;
-
- /* add the incoming bytes, if any */
- if(wpkt) {
- result = Curl_dyn_addn(&wsp->buf, wpkt, ilen);
- if(result)
- return result;
- }
-
- plen = Curl_dyn_len(&wsp->buf);
- if(plen < 2) {
- /* the smallest possible frame is two bytes */
- infof(data, "WS: plen == %u, EAGAIN", (int)plen);
- return CURLE_AGAIN;
- }
-
- p = Curl_dyn_uptr(&wsp->buf);
-
- fin = p[0] & WSBIT_FIN;
- opcode = p[0] & WSBIT_OPCODE_MASK;
- infof(data, "WS:%d received FIN bit %u", __LINE__, (int)fin);
- *flags = 0;
- switch(opcode) {
- case WSBIT_OPCODE_CONT:
- if(!fin)
- *flags |= CURLWS_CONT;
- infof(data, "WS: received OPCODE CONT");
- break;
- case WSBIT_OPCODE_TEXT:
- infof(data, "WS: received OPCODE TEXT");
- *flags |= CURLWS_TEXT;
- break;
- case WSBIT_OPCODE_BIN:
- infof(data, "WS: received OPCODE BINARY");
- *flags |= CURLWS_BINARY;
- break;
- case WSBIT_OPCODE_CLOSE:
- infof(data, "WS: received OPCODE CLOSE");
- *flags |= CURLWS_CLOSE;
- break;
- case WSBIT_OPCODE_PING:
- infof(data, "WS: received OPCODE PING");
- *flags |= CURLWS_PING;
- break;
- case WSBIT_OPCODE_PONG:
- infof(data, "WS: received OPCODE PONG");
- *flags |= CURLWS_PONG;
- break;
+ struct Curl_easy *data = userp;
+ struct websocket *ws;
+ size_t wrote;
+ curl_off_t remain = (payload_len - (payload_offset + buflen));
+
+ (void)frame_age;
+ if(!data->conn || !data->conn->proto.ws) {
+ *err = CURLE_FAILED_INIT;
+ return -1;
}
-
- if(p[1] & WSBIT_MASK) {
- /* A client MUST close a connection if it detects a masked frame. */
- failf(data, "WS: masked input frame");
- return CURLE_RECV_ERROR;
+ ws = data->conn->proto.ws;
+
+ if((frame_flags & CURLWS_PING) && !remain) {
+ /* auto-respond to PINGs, only works for single-frame payloads atm */
+ size_t bytes;
+ infof(data, "WS: auto-respond to PING with a PONG");
+ /* send back the exact same content as a PONG */
+ *err = curl_ws_send(data, buf, buflen, &bytes, 0, CURLWS_PONG);
+ if(*err)
+ return -1;
}
- payloadsize = p[1];
- if(payloadsize == 126) {
- if(plen < 4) {
- infof(data, "WS:%d plen == %u, EAGAIN", __LINE__, (int)plen);
- return CURLE_AGAIN; /* not enough data available */
+ else if(buflen || !remain) {
+ /* deliver the decoded frame to the user callback. The application
+ * may invoke curl_ws_meta() to access frame information. */
+ update_meta(ws, frame_age, frame_flags, payload_offset,
+ payload_len, buflen);
+ Curl_set_in_callback(data, true);
+ wrote = data->set.fwrite_func((char *)buf, 1,
+ buflen, data->set.out);
+ Curl_set_in_callback(data, false);
+ if(wrote != buflen) {
+ *err = CURLE_RECV_ERROR;
+ return -1;
}
- payloadsize = (p[2] << 8) | p[3];
- dataindex += 2;
- }
- else if(payloadsize == 127) {
- /* 64 bit payload size */
- if(plen < 10)
- return CURLE_AGAIN;
- if(p[2] & 80) {
- failf(data, "WS: too large frame");
- return CURLE_RECV_ERROR;
- }
- dataindex += 8;
- payloadsize = ((curl_off_t)p[2] << 56) |
- (curl_off_t)p[3] << 48 |
- (curl_off_t)p[4] << 40 |
- (curl_off_t)p[5] << 32 |
- (curl_off_t)p[6] << 24 |
- (curl_off_t)p[7] << 16 |
- (curl_off_t)p[8] << 8 |
- p[9];
- }
-
- total = dataindex + payloadsize;
- if(total > plen) {
- /* deliver a partial frame */
- *oleft = total - dataindex;
- payloadsize = total - dataindex;
- }
- else {
- *oleft = 0;
- if(plen > total)
- /* there is another fragment after */
- *more = TRUE;
}
-
- /* point to the payload */
- *out = &p[dataindex];
-
- /* return the payload length */
- *olen = payloadsize;
-
- /* number of bytes "used" from the buffer */
- wsp->usedbuf = dataindex + payloadsize;
- infof(data, "WS: received %zu bytes payload (%zu left)",
- payloadsize, *oleft);
- return CURLE_OK;
+ *err = CURLE_OK;
+ return (ssize_t)buflen;
}
/* Curl_ws_writecb() is the write callback for websocket traffic. The
@@ -330,91 +724,150 @@ static CURLcode ws_decode(struct Curl_easy *data,
size_t Curl_ws_writecb(char *buffer, size_t size /* 1 */,
size_t nitems, void *userp)
{
- struct HTTP *ws = (struct HTTP *)userp;
- struct Curl_easy *data = ws->ws.data;
- void *writebody_ptr = data->set.out;
+ struct Curl_easy *data = userp;
+
if(data->set.ws_raw_mode)
- return data->set.fwrite_func(buffer, size, nitems, writebody_ptr);
+ return data->set.fwrite_func(buffer, size, nitems, data->set.out);
else if(nitems) {
- unsigned char *frame = NULL;
- size_t flen = 0;
- size_t wrote = 0;
+ struct websocket *ws;
CURLcode result;
- bool more; /* there's is more to parse in the buffer */
- curl_off_t oleft;
-
- decode:
- more = FALSE;
- oleft = ws->ws.frame.bytesleft;
- if(!oleft) {
- unsigned int recvflags;
- result = ws_decode(data, (unsigned char *)buffer, nitems,
- &frame, &flen, &oleft, &more, &recvflags);
+
+ if(!data->conn || !data->conn->proto.ws) {
+ failf(data, "WS: not a websocket transfer");
+ return nitems - 1;
+ }
+ ws = data->conn->proto.ws;
+
+ if(buffer) {
+ ssize_t nwritten;
+
+ nwritten = Curl_bufq_write(&ws->recvbuf, (const unsigned char *)buffer,
+ nitems, &result);
+ if(nwritten < 0) {
+ infof(data, "WS: error adding data to buffer %d", (int)result);
+ return nitems - 1;
+ }
+ buffer = NULL;
+ }
+
+ while(!Curl_bufq_is_empty(&ws->recvbuf)) {
+
+ result = ws_dec_pass(&ws->dec, data, &ws->recvbuf,
+ ws_client_write, data);
if(result == CURLE_AGAIN)
- /* insufficient amount of data, keep it for later */
+ /* insufficient amount of data, keep it for later.
+ * we pretend to have written all since we have a copy */
return nitems;
else if(result) {
infof(data, "WS: decode error %d", (int)result);
return nitems - 1;
}
- /* Store details about the frame to be reachable with curl_ws_meta()
- from within the write callback */
- ws->ws.frame.age = 0;
- ws->ws.frame.offset = 0;
- ws->ws.frame.flags = recvflags;
- ws->ws.frame.bytesleft = oleft;
- }
- else {
- if(nitems > (size_t)ws->ws.frame.bytesleft) {
- nitems = ws->ws.frame.bytesleft;
- more = TRUE;
- }
- else
- more = FALSE;
- ws->ws.frame.offset += nitems;
- ws->ws.frame.bytesleft -= nitems;
- frame = (unsigned char *)buffer;
- flen = nitems;
- }
- if((ws->ws.frame.flags & CURLWS_PING) && !oleft) {
- /* auto-respond to PINGs, only works for single-frame payloads atm */
- size_t bytes;
- infof(data, "WS: auto-respond to PING with a PONG");
- DEBUGASSERT(frame);
- /* send back the exact same content as a PONG */
- result = curl_ws_send(data, frame, flen, &bytes, 0, CURLWS_PONG);
- if(result)
- return result;
}
- else {
- /* deliver the decoded frame to the user callback */
- Curl_set_in_callback(data, true);
- wrote = data->set.fwrite_func((char *)frame, 1, flen, writebody_ptr);
- Curl_set_in_callback(data, false);
- if(wrote != flen)
+ }
+ return nitems;
+}
+
+struct ws_collect {
+ struct Curl_easy *data;
+ void *buffer;
+ size_t buflen;
+ size_t bufidx;
+ int frame_age;
+ int frame_flags;
+ curl_off_t payload_offset;
+ curl_off_t payload_len;
+ bool written;
+};
+
+static ssize_t ws_client_collect(const unsigned char *buf, size_t buflen,
+ int frame_age, int frame_flags,
+ curl_off_t payload_offset,
+ curl_off_t payload_len,
+ void *userp,
+ CURLcode *err)
+{
+ struct ws_collect *ctx = userp;
+ size_t nwritten;
+ curl_off_t remain = (payload_len - (payload_offset + buflen));
+
+ if(!ctx->bufidx) {
+ /* first write */
+ ctx->frame_age = frame_age;
+ ctx->frame_flags = frame_flags;
+ ctx->payload_offset = payload_offset;
+ ctx->payload_len = payload_len;
+ }
+
+ if((frame_flags & CURLWS_PING) && !remain) {
+ /* auto-respond to PINGs, only works for single-frame payloads atm */
+ size_t bytes;
+ infof(ctx->data, "WS: auto-respond to PING with a PONG");
+ /* send back the exact same content as a PONG */
+ *err = curl_ws_send(ctx->data, buf, buflen, &bytes, 0, CURLWS_PONG);
+ if(*err)
+ return -1;
+ nwritten = bytes;
+ }
+ else {
+ ctx->written = TRUE;
+ DEBUGASSERT(ctx->buflen >= ctx->bufidx);
+ nwritten = CURLMIN(buflen, ctx->buflen - ctx->bufidx);
+ if(!nwritten) {
+ if(!buflen) { /* 0 length write, we accept that */
+ *err = CURLE_OK;
return 0;
+ }
+ *err = CURLE_AGAIN; /* no more space */
+ return -1;
}
- if(oleft)
- ws->ws.frame.offset += flen;
- /* the websocket frame has been delivered */
- ws_decode_clear(data);
- if(more) {
- /* there's more websocket data to deal with in the buffer */
- buffer = NULL; /* the buffer as been drained already */
- goto decode;
- }
+ *err = CURLE_OK;
+ memcpy(ctx->buffer, buf, nwritten);
+ ctx->bufidx += nwritten;
}
- return nitems;
+ return nwritten;
}
+static ssize_t nw_in_recv(void *reader_ctx,
+ unsigned char *buf, size_t buflen,
+ CURLcode *err)
+{
+ struct Curl_easy *data = reader_ctx;
+ size_t nread;
+
+ *err = curl_easy_recv(data, buf, buflen, &nread);
+ if(*err)
+ return -1;
+ return (ssize_t)nread;
+}
CURL_EXTERN CURLcode curl_ws_recv(struct Curl_easy *data, void *buffer,
size_t buflen, size_t *nread,
- struct curl_ws_frame **metap)
+ const struct curl_ws_frame **metap)
{
- size_t bytes;
+ struct connectdata *conn = data->conn;
+ struct websocket *ws;
+ bool done = FALSE; /* not filled passed buffer yet */
+ struct ws_collect ctx;
CURLcode result;
- struct websocket *wsp = &data->req.p.http->ws;
+
+ if(!conn) {
+ /* Unhappy hack with lifetimes of transfers and connection */
+ if(!data->set.connect_only) {
+ failf(data, "CONNECT_ONLY is required");
+ return CURLE_UNSUPPORTED_PROTOCOL;
+ }
+
+ Curl_getconnectinfo(data, &conn);
+ if(!conn) {
+ failf(data, "connection not found");
+ return CURLE_BAD_FUNCTION_ARGUMENT;
+ }
+ }
+ ws = conn->proto.ws;
+ if(!ws) {
+ failf(data, "connection is not setup for websocket");
+ return CURLE_BAD_FUNCTION_ARGUMENT;
+ }
*nread = 0;
*metap = NULL;
@@ -423,301 +876,223 @@ CURL_EXTERN CURLcode curl_ws_recv(struct Curl_easy *data, void *buffer,
if(result)
return result;
- do {
- bool drain = FALSE; /* if there is pending buffered data to drain */
- char *inbuf = data->state.buffer;
- bytes = wsp->stillbuffer;
- if(!bytes) {
- result = curl_easy_recv(data, data->state.buffer,
- data->set.buffer_size, &bytes);
- if(result)
+ memset(&ctx, 0, sizeof(ctx));
+ ctx.data = data;
+ ctx.buffer = buffer;
+ ctx.buflen = buflen;
+
+ while(!done) {
+ /* receive more when our buffer is empty */
+ if(Curl_bufq_is_empty(&ws->recvbuf)) {
+ ssize_t n = Curl_bufq_slurp(&ws->recvbuf, nw_in_recv, data, &result);
+ if(n < 0) {
return result;
- }
- else {
- /* the pending bytes can be found here */
- inbuf = wsp->stillb;
- drain = TRUE;
- }
- if(bytes) {
- unsigned char *out;
- size_t olen;
- bool more;
- unsigned int recvflags;
- curl_off_t oleft = wsp->frame.bytesleft;
-
- infof(data, "WS: got %u websocket bytes to decode", (int)bytes);
- if(!oleft && !drain) {
- result = ws_decode(data, (unsigned char *)inbuf, bytes,
- &out, &olen, &oleft, &more, &recvflags);
- if(result == CURLE_AGAIN)
- /* a packet fragment only */
- break;
- else if(result)
- return result;
- wsp->frame.offset = 0;
- wsp->frame.bytesleft = oleft;
- wsp->frame.flags = recvflags;
}
- else {
- olen = oleft;
- out = (unsigned char *)wsp->stillb;
- recvflags = wsp->frame.flags;
- if((curl_off_t)buflen < oleft)
- /* there is still data left after this */
- wsp->frame.bytesleft -= buflen;
- else
- wsp->frame.bytesleft = 0;
+ else if(n == 0) {
+ /* connection closed */
+ infof(data, "connection expectedly closed?");
+ return CURLE_GOT_NOTHING;
}
+ DEBUGF(infof(data, "curl_ws_recv, added %zu bytes from network",
+ Curl_bufq_len(&ws->recvbuf)));
+ }
- /* auto-respond to PINGs */
- if((recvflags & CURLWS_PING) && !oleft) {
- infof(data, "WS: auto-respond to PING with a PONG");
- /* send back the exact same content as a PONG */
- result = curl_ws_send(data, out, olen, &bytes, 0, CURLWS_PONG);
- if(result)
- return result;
- }
- else {
- if(olen < buflen) {
- /* copy the payload to the user buffer */
- memcpy(buffer, out, olen);
- *nread = olen;
- if(!oleft)
- /* websocket frame has been delivered */
- ws_decode_clear(data);
- }
- else {
- /* copy a partial payload */
- memcpy(buffer, out, buflen);
- *nread = buflen;
- /* remember what is left and where */
- wsp->stillbuffer = olen - buflen;
- wsp->stillb = (char *)buffer + buflen;
- }
- wsp->frame.offset += *nread;
+ result = ws_dec_pass(&ws->dec, data, &ws->recvbuf,
+ ws_client_collect, &ctx);
+ if(result == CURLE_AGAIN) {
+ if(!ctx.written) {
+ ws_dec_info(&ws->dec, data, "need more input");
+ continue; /* nothing written, try more input */
}
+ done = TRUE;
+ break;
+ }
+ else if(result) {
+ return result;
+ }
+ else if(ctx.written) {
+ /* The decoded frame is passed back to our caller.
+ * There are frames like PING were we auto-respond to and
+ * that we do not return. For these `ctx.written` is not set. */
+ done = TRUE;
+ break;
}
- else
- *nread = bytes;
- break;
- } while(1);
- *metap = &wsp->frame;
- return CURLE_OK;
-}
-
-static void ws_xor(struct Curl_easy *data,
- const unsigned char *source,
- unsigned char *dest,
- size_t len)
-{
- struct websocket *wsp = &data->req.p.http->ws;
- size_t i;
- /* append payload after the mask, XOR appropriately */
- for(i = 0; i < len; i++) {
- dest[i] = source[i] ^ wsp->mask[wsp->xori];
- wsp->xori++;
- wsp->xori &= 3;
}
-}
-
-/***
- RFC 6455 Section 5.2
- 0 1 2 3
- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
- +-+-+-+-+-------+-+-------------+-------------------------------+
- |F|R|R|R| opcode|M| Payload len | Extended payload length |
- |I|S|S|S| (4) |A| (7) | (16/64) |
- |N|V|V|V| |S| | (if payload len==126/127) |
- | |1|2|3| |K| | |
- +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
- | Extended payload length continued, if payload len == 127 |
- + - - - - - - - - - - - - - - - +-------------------------------+
- | |Masking-key, if MASK set to 1 |
- +-------------------------------+-------------------------------+
- | Masking-key (continued) | Payload Data |
- +-------------------------------- - - - - - - - - - - - - - - - +
- : Payload Data continued ... :
- + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
- | Payload Data continued ... |
- +---------------------------------------------------------------+
-*/
+ /* update frame information to be passed back */
+ update_meta(ws, ctx.frame_age, ctx.frame_flags, ctx.payload_offset,
+ ctx.payload_len, ctx.bufidx);
+ *metap = &ws->frame;
+ *nread = ws->frame.len;
+ /* infof(data, "curl_ws_recv(len=%zu) -> %zu bytes (frame at %"
+ CURL_FORMAT_CURL_OFF_T ", %" CURL_FORMAT_CURL_OFF_T " left)",
+ buflen, *nread, ws->frame.offset, ws->frame.bytesleft); */
+ return CURLE_OK;
+}
-static size_t ws_packethead(struct Curl_easy *data,
- size_t len, unsigned int flags)
+static CURLcode ws_flush(struct Curl_easy *data, struct websocket *ws,
+ bool complete)
{
- struct HTTP *ws = data->req.p.http;
- unsigned char *out = (unsigned char *)data->state.ulbuf;
- unsigned char firstbyte = 0;
- int outi;
- unsigned char opcode;
- if(flags & CURLWS_TEXT) {
- opcode = WSBIT_OPCODE_TEXT;
- infof(data, "WS: send OPCODE TEXT");
- }
- else if(flags & CURLWS_CLOSE) {
- opcode = WSBIT_OPCODE_CLOSE;
- infof(data, "WS: send OPCODE CLOSE");
- }
- else if(flags & CURLWS_PING) {
- opcode = WSBIT_OPCODE_PING;
- infof(data, "WS: send OPCODE PING");
- }
- else if(flags & CURLWS_PONG) {
- opcode = WSBIT_OPCODE_PONG;
- infof(data, "WS: send OPCODE PONG");
- }
- else {
- opcode = WSBIT_OPCODE_BIN;
- infof(data, "WS: send OPCODE BINARY");
- }
+ if(!Curl_bufq_is_empty(&ws->sendbuf)) {
+ CURLcode result;
+ const unsigned char *out;
+ size_t outlen;
+ ssize_t n;
- if(!(flags & CURLWS_CONT)) {
- /* if not marked as continuing, assume this is the final fragment */
- firstbyte |= WSBIT_FIN | opcode;
- ws->ws.contfragment = FALSE;
- }
- else if(ws->ws.contfragment) {
- /* the previous fragment was not a final one and this isn't either, keep a
- CONT opcode and no FIN bit */
- firstbyte |= WSBIT_OPCODE_CONT;
- }
- else {
- ws->ws.contfragment = TRUE;
- }
- out[0] = firstbyte;
- if(len > 65535) {
- out[1] = 127 | WSBIT_MASK;
- out[2] = (len >> 8) & 0xff;
- out[3] = len & 0xff;
- outi = 10;
- }
- else if(len > 126) {
- out[1] = 126 | WSBIT_MASK;
- out[2] = (len >> 8) & 0xff;
- out[3] = len & 0xff;
- outi = 4;
- }
- else {
- out[1] = (unsigned char)len | WSBIT_MASK;
- outi = 2;
+ while(Curl_bufq_peek(&ws->sendbuf, &out, &outlen)) {
+ if(data->set.connect_only)
+ result = Curl_senddata(data, out, outlen, &n);
+ else
+ result = Curl_write(data, data->conn->writesockfd, out, outlen, &n);
+ if(result) {
+ if(result == CURLE_AGAIN) {
+ if(!complete) {
+ infof(data, "WS: flush EAGAIN, %zu bytes remain in buffer",
+ Curl_bufq_len(&ws->sendbuf));
+ return result;
+ }
+ /* TODO: the current design does not allow for buffered writes.
+ * We need to flush the buffer now. There is no ws_flush() later */
+ n = 0;
+ continue;
+ }
+ else if(result) {
+ failf(data, "WS: flush, write error %d", result);
+ return result;
+ }
+ }
+ else {
+ infof(data, "WS: flushed %zu bytes", (size_t)n);
+ Curl_bufq_skip(&ws->sendbuf, (size_t)n);
+ }
+ }
}
-
- infof(data, "WS: send FIN bit %u (byte %02x)",
- firstbyte & WSBIT_FIN ? 1 : 0,
- firstbyte);
- infof(data, "WS: send payload len %u", (int)len);
-
- /* 4 bytes mask */
- memcpy(&out[outi], &ws->ws.mask, 4);
-
- if(data->set.upload_buffer_size < (len + 10))
- return 0;
-
- /* pass over the mask */
- outi += 4;
-
- ws->ws.xori = 0;
- /* return packet size */
- return outi;
+ return CURLE_OK;
}
-CURL_EXTERN CURLcode curl_ws_send(struct Curl_easy *data, const void *buffer,
+CURL_EXTERN CURLcode curl_ws_send(CURL *data, const void *buffer,
size_t buflen, size_t *sent,
- curl_off_t totalsize,
- unsigned int sendflags)
+ curl_off_t fragsize,
+ unsigned int flags)
{
+ struct websocket *ws;
+ ssize_t nwritten, n;
+ size_t space;
CURLcode result;
- size_t headlen;
- char *out;
- ssize_t written;
- struct websocket *wsp = &data->req.p.http->ws;
- if(!data->set.ws_raw_mode) {
- result = Curl_get_upload_buffer(data);
+ *sent = 0;
+ if(!data->conn && data->set.connect_only) {
+ result = Curl_connect_only_attach(data);
if(result)
return result;
}
- else {
- if(totalsize || sendflags)
- return CURLE_BAD_FUNCTION_ARGUMENT;
+ if(!data->conn) {
+ failf(data, "No associated connection");
+ return CURLE_SEND_ERROR;
}
+ if(!data->conn->proto.ws) {
+ failf(data, "Not a websocket transfer");
+ return CURLE_SEND_ERROR;
+ }
+ ws = data->conn->proto.ws;
if(data->set.ws_raw_mode) {
+ if(fragsize || flags)
+ return CURLE_BAD_FUNCTION_ARGUMENT;
if(!buflen)
/* nothing to do */
return CURLE_OK;
/* raw mode sends exactly what was requested, and this is from within
the write callback */
- if(Curl_is_in_callback(data))
+ if(Curl_is_in_callback(data)) {
result = Curl_write(data, data->conn->writesockfd, buffer, buflen,
- &written);
+ &nwritten);
+ }
else
- result = Curl_senddata(data, buffer, buflen, &written);
+ result = Curl_senddata(data, buffer, buflen, &nwritten);
infof(data, "WS: wanted to send %zu bytes, sent %zu bytes",
- buflen, written);
- *sent = written;
+ buflen, nwritten);
+ *sent = (nwritten >= 0)? (size_t)nwritten : 0;
return result;
}
- if(buflen > (data->set.upload_buffer_size - 10))
- /* don't do more than this in one go */
- buflen = data->set.upload_buffer_size - 10;
+ /* Not RAW mode, buf we do the frame encoding */
+ result = ws_flush(data, ws, FALSE);
+ if(result)
+ return result;
+
+ /* TODO: the current design does not allow partial writes, afaict.
+ * It is not clear who the application is supposed to react. */
+ space = Curl_bufq_space(&ws->sendbuf);
+ DEBUGF(infof(data, "curl_ws_send(len=%zu), sendbuf len=%zu space %zu",
+ buflen, Curl_bufq_len(&ws->sendbuf), space));
+ if(space < 14)
+ return CURLE_AGAIN;
- if(sendflags & CURLWS_OFFSET) {
- if(totalsize) {
- /* a frame series 'totalsize' bytes big, this is the first */
- headlen = ws_packethead(data, totalsize, sendflags);
- wsp->sleft = totalsize - buflen;
+ if(flags & CURLWS_OFFSET) {
+ if(fragsize) {
+ /* a frame series 'fragsize' bytes big, this is the first */
+ n = ws_enc_write_head(data, &ws->enc, flags, fragsize,
+ &ws->sendbuf, &result);
+ if(n < 0)
+ return result;
}
else {
- headlen = 0;
- if((curl_off_t)buflen > wsp->sleft) {
- infof(data, "WS: unaligned frame size (sending %zu instead of %zu)",
- buflen, wsp->sleft);
- wsp->sleft = 0;
+ if((curl_off_t)buflen > ws->enc.payload_remain) {
+ infof(data, "WS: unaligned frame size (sending %zu instead of %"
+ CURL_FORMAT_CURL_OFF_T ")",
+ buflen, ws->enc.payload_remain);
}
- else
- wsp->sleft -= buflen;
}
}
- else
- headlen = ws_packethead(data, buflen, sendflags);
-
- /* headlen is the size of the frame header */
- out = data->state.ulbuf;
- if(buflen)
- /* for PING and PONG etc there might not be a payload */
- ws_xor(data, buffer, (unsigned char *)out + headlen, buflen);
+ else if(!ws->enc.payload_remain) {
+ n = ws_enc_write_head(data, &ws->enc, flags, (curl_off_t)buflen,
+ &ws->sendbuf, &result);
+ if(n < 0)
+ return result;
+ }
- if(data->set.connect_only)
- result = Curl_senddata(data, out, buflen + headlen, &written);
- else
- result = Curl_write(data, data->conn->writesockfd, out,
- buflen + headlen, &written);
+ n = ws_enc_write_payload(&ws->enc, data,
+ buffer, buflen, &ws->sendbuf, &result);
+ if(n < 0)
+ return result;
- infof(data, "WS: wanted to send %zu bytes, sent %zu bytes",
- headlen + buflen, written);
- *sent = written;
+ *sent = (size_t)n;
+ return ws_flush(data, ws, TRUE);
+}
- return result;
+static void ws_free(struct connectdata *conn)
+{
+ if(conn && conn->proto.ws) {
+ Curl_bufq_free(&conn->proto.ws->recvbuf);
+ Curl_bufq_free(&conn->proto.ws->sendbuf);
+ Curl_safefree(conn->proto.ws);
+ }
}
void Curl_ws_done(struct Curl_easy *data)
{
- struct websocket *wsp = &data->req.p.http->ws;
- DEBUGASSERT(wsp);
- Curl_dyn_free(&wsp->buf);
+ (void)data;
}
-CURL_EXTERN struct curl_ws_frame *curl_ws_meta(struct Curl_easy *data)
+CURLcode Curl_ws_disconnect(struct Curl_easy *data,
+ struct connectdata *conn,
+ bool dead_connection)
+{
+ (void)data;
+ (void)dead_connection;
+ ws_free(conn);
+ return CURLE_OK;
+}
+
+CURL_EXTERN const struct curl_ws_frame *curl_ws_meta(struct Curl_easy *data)
{
/* we only return something for websocket, called from within the callback
when not using raw mode */
- if(GOOD_EASY_HANDLE(data) && Curl_is_in_callback(data) && data->req.p.http &&
- !data->set.ws_raw_mode)
- return &data->req.p.http->ws.frame;
+ if(GOOD_EASY_HANDLE(data) && Curl_is_in_callback(data) && data->conn &&
+ data->conn->proto.ws && !data->set.ws_raw_mode)
+ return &data->conn->proto.ws->frame;
return NULL;
}
@@ -725,31 +1100,31 @@ CURL_EXTERN struct curl_ws_frame *curl_ws_meta(struct Curl_easy *data)
CURL_EXTERN CURLcode curl_ws_recv(CURL *curl, void *buffer, size_t buflen,
size_t *nread,
- struct curl_ws_frame **metap)
+ const struct curl_ws_frame **metap)
{
(void)curl;
(void)buffer;
(void)buflen;
(void)nread;
(void)metap;
- return CURLE_OK;
+ return CURLE_NOT_BUILT_IN;
}
CURL_EXTERN CURLcode curl_ws_send(CURL *curl, const void *buffer,
size_t buflen, size_t *sent,
- curl_off_t framesize,
- unsigned int sendflags)
+ curl_off_t fragsize,
+ unsigned int flags)
{
(void)curl;
(void)buffer;
(void)buflen;
(void)sent;
- (void)framesize;
- (void)sendflags;
- return CURLE_OK;
+ (void)fragsize;
+ (void)flags;
+ return CURLE_NOT_BUILT_IN;
}
-CURL_EXTERN struct curl_ws_frame *curl_ws_meta(struct Curl_easy *data)
+CURL_EXTERN const struct curl_ws_frame *curl_ws_meta(struct Curl_easy *data)
{
(void)data;
return NULL;
diff --git a/lib/ws.h b/lib/ws.h
index 341242e50..0308a4254 100644
--- a/lib/ws.h
+++ b/lib/ws.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -33,37 +33,57 @@
#define REQTYPE struct dynbuf
#endif
-/* this is the largest single fragment size we support */
-#define MAX_WS_SIZE 65535
+/* a client-side WS frame decoder, parsing frame headers and
+ * payload, keeping track of current position and stats */
+enum ws_dec_state {
+ WS_DEC_INIT,
+ WS_DEC_HEAD,
+ WS_DEC_PAYLOAD
+};
-/* part of 'struct HTTP', when used in the 'struct SingleRequest' in the
- Curl_easy struct */
-struct websocket {
- bool contfragment; /* set TRUE if the previous fragment sent was not final */
+struct ws_decoder {
+ int frame_age; /* zero */
+ int frame_flags; /* See the CURLWS_* defines */
+ curl_off_t payload_offset; /* the offset parsing is at */
+ curl_off_t payload_len;
+ unsigned char head[10];
+ int head_len, head_total;
+ enum ws_dec_state state;
+};
+
+/* a client-side WS frame encoder, generating frame headers and
+ * converting payloads, tracking remaining data in current frame */
+struct ws_encoder {
+ curl_off_t payload_len; /* payload length of current frame */
+ curl_off_t payload_remain; /* remaining payload of current */
+ unsigned int xori; /* xor index */
unsigned char mask[4]; /* 32 bit mask for this connection */
+ unsigned char firstbyte; /* first byte of frame we encode */
+ bool contfragment; /* set TRUE if the previous fragment sent was not final */
+};
+
+/* A websocket connection with en- and decoder that treat frames
+ * and keep track of boundaries. */
+struct websocket {
struct Curl_easy *data; /* used for write callback handling */
- struct dynbuf buf;
- size_t usedbuf; /* number of leading bytes in 'buf' the most recent complete
- websocket frame uses */
- struct curl_ws_frame frame; /* the struct used for frame state */
- curl_off_t oleft; /* outstanding number of payload bytes left from the
- server */
- curl_off_t stillbuffer; /* number of bytes left in the buffer to deliver in
- the next curl_ws_recv() call */
- char *stillb; /* the stillbuffer pending bytes are here */
- curl_off_t sleft; /* outstanding number of payload bytes left to send */
- unsigned int xori; /* xor index */
+ struct ws_decoder dec; /* decode of we frames */
+ struct ws_encoder enc; /* decode of we frames */
+ struct bufq recvbuf; /* raw data from the server */
+ struct bufq sendbuf; /* raw data to be sent to the server */
+ struct curl_ws_frame frame; /* the current WS FRAME received */
};
CURLcode Curl_ws_request(struct Curl_easy *data, REQTYPE *req);
-CURLcode Curl_ws_accept(struct Curl_easy *data);
-
+CURLcode Curl_ws_accept(struct Curl_easy *data, const char *mem, size_t len);
size_t Curl_ws_writecb(char *buffer, size_t size, size_t nitems, void *userp);
void Curl_ws_done(struct Curl_easy *data);
-
+CURLcode Curl_ws_disconnect(struct Curl_easy *data,
+ struct connectdata *conn,
+ bool dead_connection);
#else
#define Curl_ws_request(x,y) CURLE_OK
#define Curl_ws_done(x) Curl_nop_stmt
+#define Curl_ws_free(x) Curl_nop_stmt
#endif
#endif /* HEADER_CURL_WS_H */
diff --git a/libcurl.def b/libcurl.def
new file mode 100644
index 000000000..c6c96063a
--- /dev/null
+++ b/libcurl.def
@@ -0,0 +1,94 @@
+EXPORTS
+curl_easy_cleanup
+curl_easy_duphandle
+curl_easy_escape
+curl_easy_getinfo
+curl_easy_header
+curl_easy_init
+curl_easy_nextheader
+curl_easy_option_by_id
+curl_easy_option_by_name
+curl_easy_option_next
+curl_easy_pause
+curl_easy_perform
+curl_easy_recv
+curl_easy_reset
+curl_easy_send
+curl_easy_setopt
+curl_easy_strerror
+curl_easy_unescape
+curl_easy_upkeep
+curl_escape
+curl_formadd
+curl_formfree
+curl_formget
+curl_free
+curl_getdate
+curl_getenv
+curl_global_cleanup
+curl_global_init
+curl_global_init_mem
+curl_global_sslset
+curl_global_trace
+curl_maprintf
+curl_mfprintf
+curl_mime_addpart
+curl_mime_data
+curl_mime_data_cb
+curl_mime_encoder
+curl_mime_filedata
+curl_mime_filename
+curl_mime_free
+curl_mime_headers
+curl_mime_init
+curl_mime_name
+curl_mime_subparts
+curl_mime_type
+curl_mprintf
+curl_msnprintf
+curl_msprintf
+curl_multi_add_handle
+curl_multi_assign
+curl_multi_cleanup
+curl_multi_fdset
+curl_multi_get_handles
+curl_multi_info_read
+curl_multi_init
+curl_multi_perform
+curl_multi_poll
+curl_multi_remove_handle
+curl_multi_setopt
+curl_multi_socket
+curl_multi_socket_action
+curl_multi_socket_all
+curl_multi_strerror
+curl_multi_timeout
+curl_multi_wait
+curl_multi_wakeup
+curl_mvaprintf
+curl_mvfprintf
+curl_mvprintf
+curl_mvsnprintf
+curl_mvsprintf
+curl_pushheader_byname
+curl_pushheader_bynum
+curl_share_cleanup
+curl_share_init
+curl_share_setopt
+curl_share_strerror
+curl_slist_append
+curl_slist_free_all
+curl_strequal
+curl_strnequal
+curl_unescape
+curl_url
+curl_url_cleanup
+curl_url_dup
+curl_url_get
+curl_url_set
+curl_url_strerror
+curl_version
+curl_version_info
+curl_ws_meta
+curl_ws_recv
+curl_ws_send
diff --git a/libcurl.pc.in b/libcurl.pc.in
index 49485f192..9db6b0f89 100644
--- a/libcurl.pc.in
+++ b/libcurl.pc.in
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/ltmain.sh b/ltmain.sh
index 8fb8700ee..1dea62ab7 100755
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -31,7 +31,7 @@
PROGRAM=libtool
PACKAGE=libtool
-VERSION="2.4.7 Debian-2.4.7-4"
+VERSION="2.4.7 Debian-2.4.7-7"
package_revision=2.4.7
@@ -572,27 +572,15 @@ func_require_term_colors ()
# ---------------------
# Append VALUE onto the existing contents of VAR.
- # We should try to minimise forks, especially on Windows where they are
- # unreasonably slow, so skip the feature probes when bash or zsh are
- # being used:
- if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
- : ${_G_HAVE_ARITH_OP="yes"}
- : ${_G_HAVE_XSI_OPS="yes"}
- # The += operator was introduced in bash 3.1
- case $BASH_VERSION in
- [12].* | 3.0 | 3.0*) ;;
- *)
- : ${_G_HAVE_PLUSEQ_OP="yes"}
- ;;
- esac
- fi
-
# _G_HAVE_PLUSEQ_OP
# Can be empty, in which case the shell is probed, "yes" if += is
# useable or anything else if it does not work.
- test -z "$_G_HAVE_PLUSEQ_OP" \
- && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
- && _G_HAVE_PLUSEQ_OP=yes
+ if test -z "$_G_HAVE_PLUSEQ_OP" && \
+ __PLUSEQ_TEST="a" && \
+ __PLUSEQ_TEST+=" b" 2>/dev/null && \
+ test "a b" = "$__PLUSEQ_TEST"; then
+ _G_HAVE_PLUSEQ_OP=yes
+ fi
if test yes = "$_G_HAVE_PLUSEQ_OP"
then
@@ -2308,7 +2296,7 @@ include the following information:
compiler: $LTCC
compiler flags: $LTCFLAGS
linker: $LD (gnu? $with_gnu_ld)
- version: $progname $scriptversion Debian-2.4.7-4
+ version: $progname $scriptversion Debian-2.4.7-7
automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
diff --git a/m4/curl-amissl.m4 b/m4/curl-amissl.m4
index dfa626da9..48067e720 100644
--- a/m4/curl-amissl.m4
+++ b/m4/curl-amissl.m4
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -32,8 +32,8 @@ if test "$HAVE_PROTO_BSDSOCKET_H" = "1"; then
#include <libraries/amisslmaster.h>
#include <openssl/opensslv.h>
]],[[
- #if defined(AMISSL_CURRENT_VERSION) && (AMISSL_CURRENT_VERSION >= AMISSL_V303) && \
- defined(OPENSSL_VERSION_MAJOR) && (OPENSSL_VERSION_MAJOR >= 3) && \
+ #if defined(AMISSL_CURRENT_VERSION) && defined(AMISSL_V3xx) && \
+ (OPENSSL_VERSION_NUMBER >= 0x30000000L) && \
defined(PROTO_AMISSL_H)
return 0;
#else
@@ -55,11 +55,6 @@ if test "$HAVE_PROTO_BSDSOCKET_H" = "1"; then
AC_DEFINE_UNQUOTED(HAVE_OPENSSL3, 1, [Define to 1 if using OpenSSL 3 or later.])
AC_CHECK_HEADERS(openssl/x509.h openssl/rsa.h openssl/crypto.h \
openssl/pem.h openssl/ssl.h openssl/err.h)
- dnl OpenSSLv3 marks the DES functions deprecated but we have no
- dnl replacements (yet) so tell the compiler to not warn for them
- dnl
- dnl Ask OpenSSL to suppress the warnings.
- CPPFLAGS="$CPPFLAGS -DOPENSSL_SUPPRESS_DEPRECATED"
],[
AC_MSG_RESULT([no])
])
diff --git a/m4/curl-bearssl.m4 b/m4/curl-bearssl.m4
index 317a9e955..f2d661de1 100644
--- a/m4/curl-bearssl.m4
+++ b/m4/curl-bearssl.m4
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -49,7 +49,7 @@ if test "x$OPT_BEARSSL" != xno; then
BEARSSL_ENABLED=1
USE_BEARSSL="yes"
ssl_msg="BearSSL"
- test bearssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
+ test bearssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
], [], -lbearssl)
fi
diff --git a/m4/curl-compilers.m4 b/m4/curl-compilers.m4
index e39d97801..35ba19866 100644
--- a/m4/curl-compilers.m4
+++ b/m4/curl-compilers.m4
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -48,7 +48,6 @@ AC_DEFUN([CURL_CHECK_COMPILER], [
CURL_CHECK_COMPILER_INTEL_C
CURL_CHECK_COMPILER_CLANG
CURL_CHECK_COMPILER_GNU_C
- CURL_CHECK_COMPILER_LCC
CURL_CHECK_COMPILER_SGI_MIPSPRO_C
CURL_CHECK_COMPILER_SGI_MIPS_C
CURL_CHECK_COMPILER_SUNPRO_C
@@ -92,19 +91,40 @@ AC_DEFUN([CURL_CHECK_COMPILER_CLANG], [
AC_MSG_RESULT([no])
compiler_id="CLANG"
fi
+ AC_MSG_CHECKING([compiler version])
fullclangver=`$CC -v 2>&1 | grep version`
+ if echo $fullclangver | grep 'Apple' >/dev/null; then
+ appleclang=1
+ else
+ appleclang=0
+ fi
clangver=`echo $fullclangver | grep "based on LLVM " | "$SED" 's/.*(based on LLVM \(@<:@0-9@:>@*\.@<:@0-9@:>@*\).*)/\1/'`
if test -z "$clangver"; then
- if echo $fullclangver | grep "Apple LLVM version " >/dev/null; then
- dnl Starting with XCode 7 / clang 3.7, Apple clang won't tell its upstream version
- clangver="3.7"
- else
- clangver=`echo $fullclangver | "$SED" 's/.*version \(@<:@0-9@:>@*\.@<:@0-9@:>@*\).*/\1/'`
- fi
+ clangver=`echo $fullclangver | "$SED" 's/.*version \(@<:@0-9@:>@*\.@<:@0-9@:>@*\).*/\1/'`
+ oldapple=0
+ else
+ oldapple=1
fi
clangvhi=`echo $clangver | cut -d . -f1`
clangvlo=`echo $clangver | cut -d . -f2`
compiler_num=`(expr $clangvhi "*" 100 + $clangvlo) 2>/dev/null`
+ if test "$appleclang" = '1' && test "$oldapple" = '0'; then
+ dnl Starting with Xcode 7 / clang 3.7, Apple clang won't tell its upstream version
+ if test "$compiler_num" -ge '1300'; then compiler_num='1200'
+ elif test "$compiler_num" -ge '1205'; then compiler_num='1101'
+ elif test "$compiler_num" -ge '1204'; then compiler_num='1000'
+ elif test "$compiler_num" -ge '1107'; then compiler_num='900'
+ elif test "$compiler_num" -ge '1103'; then compiler_num='800'
+ elif test "$compiler_num" -ge '1003'; then compiler_num='700'
+ elif test "$compiler_num" -ge '1001'; then compiler_num='600'
+ elif test "$compiler_num" -ge '904'; then compiler_num='500'
+ elif test "$compiler_num" -ge '902'; then compiler_num='400'
+ elif test "$compiler_num" -ge '803'; then compiler_num='309'
+ elif test "$compiler_num" -ge '703'; then compiler_num='308'
+ else compiler_num='307'
+ fi
+ fi
+ AC_MSG_RESULT([clang '$compiler_num' (raw: '$fullclangver' / '$clangver')])
flags_dbg_yes="-g"
flags_opt_all="-O -O0 -O1 -O2 -Os -O3 -O4"
flags_opt_yes="-O2"
@@ -159,10 +179,17 @@ AC_DEFUN([CURL_CHECK_COMPILER_GNU_C], [
test "$compiler_id" = "unknown"; then
AC_MSG_RESULT([yes])
compiler_id="GNU_C"
- gccver=`$CC -dumpversion`
+ AC_MSG_CHECKING([compiler version])
+ # strip '-suffix' parts, e.g. Ubuntu Windows cross-gcc returns '10-win32'
+ gccver=`$CC -dumpversion | sed -E 's/-.+$//'`
gccvhi=`echo $gccver | cut -d . -f1`
- gccvlo=`echo $gccver | cut -d . -f2`
+ if echo $gccver | grep -F '.' >/dev/null; then
+ gccvlo=`echo $gccver | cut -d . -f2`
+ else
+ gccvlo="0"
+ fi
compiler_num=`(expr $gccvhi "*" 100 + $gccvlo) 2>/dev/null`
+ AC_MSG_RESULT([gcc '$compiler_num' (raw: '$gccver')])
flags_dbg_yes="-g"
flags_opt_all="-O -O0 -O1 -O2 -O3 -Os -Og -Ofast"
flags_opt_yes="-O2"
@@ -232,7 +259,9 @@ AC_DEFUN([CURL_CHECK_COMPILER_INTEL_C], [
CURL_CHECK_DEF([__INTEL_COMPILER], [], [silent])
if test "$curl_cv_have_def___INTEL_COMPILER" = "yes"; then
AC_MSG_RESULT([yes])
+ AC_MSG_CHECKING([compiler version])
compiler_num="$curl_cv_def___INTEL_COMPILER"
+ AC_MSG_RESULT([Intel C '$compiler_num'])
CURL_CHECK_DEF([__unix__], [], [silent])
if test "$curl_cv_have_def___unix__" = "yes"; then
compiler_id="INTEL_UNIX_C"
@@ -253,26 +282,6 @@ AC_DEFUN([CURL_CHECK_COMPILER_INTEL_C], [
])
-dnl CURL_CHECK_COMPILER_LCC
-dnl -------------------------------------------------
-dnl Verify if compiler being used is LCC.
-
-AC_DEFUN([CURL_CHECK_COMPILER_LCC], [
- AC_MSG_CHECKING([if compiler is LCC])
- CURL_CHECK_DEF([__LCC__], [], [silent])
- if test "$curl_cv_have_def___LCC__" = "yes"; then
- AC_MSG_RESULT([yes])
- compiler_id="LCC"
- flags_dbg_yes="-g"
- flags_opt_all=""
- flags_opt_yes=""
- flags_opt_off=""
- else
- AC_MSG_RESULT([no])
- fi
-])
-
-
dnl CURL_CHECK_COMPILER_SGI_MIPS_C
dnl -------------------------------------------------
dnl Verify if compiler being used is SGI MIPS C.
@@ -507,9 +516,6 @@ AC_DEFUN([CURL_SET_COMPILER_BASIC_OPTS], [
dnl warn about compile-time arguments used during link-time, like
dnl -O and -g and -pedantic.
tmp_CFLAGS="$tmp_CFLAGS -Qunused-arguments"
- dnl Disable pointer to bool conversion warnings since they cause
- dnl lib/securetransp.c cause several warnings for checks we want.
- tmp_CFLAGS="$tmp_CFLAGS -Wno-pointer-bool-conversion"
;;
#
DEC_C)
@@ -583,12 +589,6 @@ AC_DEFUN([CURL_SET_COMPILER_BASIC_OPTS], [
tmp_CFLAGS="$tmp_CFLAGS"
;;
#
- LCC)
- #
- dnl Disallow run-time dereferencing of null pointers
- tmp_CFLAGS="$tmp_CFLAGS -n"
- ;;
- #
SGI_MIPS_C)
#
dnl Placeholder
@@ -790,7 +790,8 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [missing-prototypes])
tmp_CFLAGS="$tmp_CFLAGS -Wno-long-long"
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [float-equal])
- CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [no-multichar sign-compare])
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [sign-compare])
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-multichar"
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [undef])
tmp_CFLAGS="$tmp_CFLAGS -Wno-format-nonliteral"
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [endif-labels strict-prototypes])
@@ -804,18 +805,46 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unused])
fi
#
+ dnl Only clang 2.7 or later
+ if test "$compiler_num" -ge "207"; then
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [address])
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [attributes])
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [bad-function-cast])
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [conversion])
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [div-by-zero format-security])
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [empty-body])
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [missing-field-initializers])
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [missing-noreturn])
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [old-style-definition])
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [redundant-decls])
+ # CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [switch-enum]) # Not used because this basically disallows default case
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [type-limits])
+ # CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unused-macros]) # Not practical
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unreachable-code unused-parameter])
+ fi
+ #
dnl Only clang 2.8 or later
if test "$compiler_num" -ge "208"; then
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [ignored-qualifiers])
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [vla])
fi
#
dnl Only clang 2.9 or later
if test "$compiler_num" -ge "209"; then
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-sign-conversion"
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [shift-sign-overflow])
+ # CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [padded]) # Not used because we cannot change public structs
+ fi
+ #
+ dnl Only clang 3.0 or later
+ if test "$compiler_num" -ge "300"; then
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [language-extension-token])
fi
#
dnl Only clang 3.2 or later
if test "$compiler_num" -ge "302"; then
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [enum-conversion])
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [sometimes-uninitialized])
case $host_os in
cygwin* | mingw*)
dnl skip missing-variable-declarations warnings for cygwin and
@@ -827,6 +856,18 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
esac
fi
#
+ dnl Only clang 3.4 or later
+ if test "$compiler_num" -ge "304"; then
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [header-guard])
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unused-const-variable])
+ fi
+ #
+ dnl Only clang 3.5 or later
+ if test "$compiler_num" -ge "305"; then
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [pragmas])
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unreachable-code-break])
+ fi
+ #
dnl Only clang 3.6 or later
if test "$compiler_num" -ge "306"; then
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [double-promotion])
@@ -847,6 +888,10 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [extra-semi-stmt])
fi
fi
+ dnl Disable pointer to bool conversion warnings since they cause
+ dnl lib/securetransp.c cause several warnings for checks we want.
+ dnl This option should be placed after -Wconversion.
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-pointer-bool-conversion"
;;
#
DEC_C)
@@ -860,7 +905,6 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
GNU_C)
#
if test "$want_warnings" = "yes"; then
- tmp_CFLAGS="$tmp_CFLAGS -std=gnu89"
#
dnl Do not enable -pedantic when cross-compiling with a gcc older
dnl than 3.0, to avoid warnings from third party system headers.
@@ -941,6 +985,26 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
tmp_CFLAGS="$tmp_CFLAGS -Wstrict-aliasing=3"
fi
#
+ dnl Only gcc 4.1 or later
+ if test "$compiler_num" -ge "401"; then
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [attributes])
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [div-by-zero format-security])
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [missing-field-initializers])
+ case $host in
+ *-*-msys*)
+ ;;
+ *)
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [missing-noreturn]) # Seen to clash with libtool-generated stub code
+ ;;
+ esac
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unreachable-code unused-parameter])
+ # CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [padded]) # Not used because we cannot change public structs
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [pragmas])
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [redundant-decls])
+ # CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [switch-enum]) # Not used because this basically disallows default case
+ # CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [unused-macros]) # Not practical
+ fi
+ #
dnl Only gcc 4.2 or later
if test "$compiler_num" -ge "402"; then
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [cast-align])
@@ -948,6 +1012,7 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
#
dnl Only gcc 4.3 or later
if test "$compiler_num" -ge "403"; then
+ CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [address])
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [type-limits old-style-declaration])
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [missing-parameter-type empty-body])
CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [clobbered ignored-qualifiers])
@@ -1088,17 +1153,6 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [
tmp_CFLAGS="$tmp_CFLAGS"
;;
#
- LCC)
- #
- if test "$want_warnings" = "yes"; then
- dnl Highest warning level is double -A, next is single -A.
- dnl Due to the big number of warnings these trigger on third
- dnl party header files it is impractical for us to use any of
- dnl them here. If you want them simply define it in CPPFLAGS.
- tmp_CFLAGS="$tmp_CFLAGS"
- fi
- ;;
- #
SGI_MIPS_C)
#
if test "$want_warnings" = "yes"; then
diff --git a/m4/curl-confopts.m4 b/m4/curl-confopts.m4
index 301e2d460..37f7d4c2e 100644
--- a/m4/curl-confopts.m4
+++ b/m4/curl-confopts.m4
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -475,9 +475,8 @@ AC_DEFUN([CURL_CONFIGURE_SYMBOL_HIDING], [
dnl CURL_CHECK_LIB_ARES
dnl -------------------------------------------------
-dnl When c-ares library support has been requested,
-dnl performs necessary checks and adjustsments needed
-dnl to enable support of this library.
+dnl When c-ares library support has been requested, performs necessary checks
+dnl and adjustments needed to enable support of this library.
AC_DEFUN([CURL_CHECK_LIB_ARES], [
#
@@ -618,6 +617,9 @@ AC_DEFUN([CURL_CHECK_NTLM_WB], [
test "x$SSL_ENABLED" = "x"; then
want_ntlm_wb_file=""
want_ntlm_wb="no"
+ elif test "x$ac_cv_func_fork" != "xyes"; then
+ dnl ntlm_wb requires fork
+ want_ntlm_wb="no"
fi
AC_MSG_RESULT([$want_ntlm_wb])
if test "$want_ntlm_wb" = "yes"; then
diff --git a/m4/curl-functions.m4 b/m4/curl-functions.m4
index 49ab0b03f..28f4b8b9a 100644
--- a/m4/curl-functions.m4
+++ b/m4/curl-functions.m4
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -108,35 +108,6 @@ curl_includes_ifaddrs="\
])
-dnl CURL_INCLUDES_INTTYPES
-dnl -------------------------------------------------
-dnl Set up variable with list of headers that must be
-dnl included when inttypes.h is to be included.
-
-AC_DEFUN([CURL_INCLUDES_INTTYPES], [
-curl_includes_inttypes="\
-/* includes start */
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-/* includes end */"
- case $host_os in
- irix*)
- ac_cv_header_stdint_h="no"
- ;;
- esac
- AC_CHECK_HEADERS(
- sys/types.h stdint.h inttypes.h,
- [], [], [$curl_includes_inttypes])
-])
-
-
dnl CURL_INCLUDES_LIBGEN
dnl -------------------------------------------------
dnl Set up variable with list of headers that must be
@@ -214,12 +185,10 @@ curl_includes_setjmp="\
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
-#ifdef HAVE_SETJMP_H
-# include <setjmp.h>
-#endif
+#include <setjmp.h>
/* includes end */"
AC_CHECK_HEADERS(
- sys/types.h setjmp.h,
+ sys/types.h,
[], [], [$curl_includes_setjmp])
])
@@ -235,12 +204,10 @@ curl_includes_signal="\
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
-#ifdef HAVE_SIGNAL_H
-# include <signal.h>
-#endif
+#include <signal.h>
/* includes end */"
AC_CHECK_HEADERS(
- sys/types.h signal.h,
+ sys/types.h,
[], [], [$curl_includes_signal])
])
@@ -277,12 +244,10 @@ curl_includes_stdlib="\
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
-#ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
+#include <stdlib.h>
/* includes end */"
AC_CHECK_HEADERS(
- sys/types.h stdlib.h,
+ sys/types.h,
[], [], [$curl_includes_stdlib])
])
@@ -298,15 +263,13 @@ curl_includes_string="\
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
-#ifdef HAVE_STRING_H
-# include <string.h>
-#endif
+#include <string.h>
#ifdef HAVE_STRINGS_H
# include <strings.h>
#endif
/* includes end */"
AC_CHECK_HEADERS(
- sys/types.h string.h strings.h,
+ sys/types.h strings.h,
[], [], [$curl_includes_string])
])
@@ -380,27 +343,6 @@ curl_includes_sys_types="\
])
-dnl CURL_INCLUDES_SYS_UIO
-dnl -------------------------------------------------
-dnl Set up variable with list of headers that must be
-dnl included when sys/uio.h is to be included.
-
-AC_DEFUN([CURL_INCLUDES_SYS_UIO], [
-curl_includes_sys_uio="\
-/* includes start */
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_UIO_H
-# include <sys/uio.h>
-#endif
-/* includes end */"
- AC_CHECK_HEADERS(
- sys/types.h sys/uio.h,
- [], [], [$curl_includes_sys_uio])
-])
-
-
dnl CURL_INCLUDES_SYS_XATTR
dnl -------------------------------------------------
dnl Set up variable with list of headers that must be
@@ -476,10 +418,10 @@ curl_includes_winsock2="\
# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# endif
-# include <windows.h>
# ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
# endif
+# include <windows.h>
#endif
/* includes end */"
CURL_CHECK_HEADER_WINDOWS
@@ -499,13 +441,13 @@ curl_includes_ws2tcpip="\
# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# endif
-# include <windows.h>
# ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
# ifdef HAVE_WS2TCPIP_H
# include <ws2tcpip.h>
# endif
# endif
+# include <windows.h>
#endif
/* includes end */"
CURL_CHECK_HEADER_WINDOWS
@@ -940,109 +882,6 @@ AC_DEFUN([CURL_CHECK_FUNC_CLOSESOCKET_CAMEL], [
fi
])
-
-dnl CURL_CHECK_FUNC_CONNECT
-dnl -------------------------------------------------
-dnl Verify if connect is available, prototyped, and
-dnl can be compiled. If all of these are true, and
-dnl usage has not been previously disallowed with
-dnl shell variable curl_disallow_connect, then
-dnl HAVE_CONNECT will be defined.
-
-AC_DEFUN([CURL_CHECK_FUNC_CONNECT], [
- AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
- AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl
- AC_REQUIRE([CURL_INCLUDES_BSDSOCKET])dnl
- AC_REQUIRE([CURL_INCLUDES_SOCKET])dnl
- #
- tst_links_connect="unknown"
- tst_proto_connect="unknown"
- tst_compi_connect="unknown"
- tst_allow_connect="unknown"
- #
- AC_MSG_CHECKING([if connect can be linked])
- AC_LINK_IFELSE([
- AC_LANG_PROGRAM([[
- $curl_includes_winsock2
- $curl_includes_bsdsocket
- $curl_includes_sys_socket
- $curl_includes_socket
- ]],[[
- if(0 != connect(0, 0, 0))
- return 1;
- ]])
- ],[
- AC_MSG_RESULT([yes])
- tst_links_connect="yes"
- ],[
- AC_MSG_RESULT([no])
- tst_links_connect="no"
- ])
- #
- if test "$tst_links_connect" = "yes"; then
- AC_MSG_CHECKING([if connect is prototyped])
- AC_EGREP_CPP([connect],[
- $curl_includes_winsock2
- $curl_includes_bsdsocket
- $curl_includes_sys_socket
- $curl_includes_socket
- ],[
- AC_MSG_RESULT([yes])
- tst_proto_connect="yes"
- ],[
- AC_MSG_RESULT([no])
- tst_proto_connect="no"
- ])
- fi
- #
- if test "$tst_proto_connect" = "yes"; then
- AC_MSG_CHECKING([if connect is compilable])
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([[
- $curl_includes_winsock2
- $curl_includes_bsdsocket
- $curl_includes_sys_socket
- $curl_includes_socket
- ]],[[
- if(0 != connect(0, 0, 0))
- return 1;
- ]])
- ],[
- AC_MSG_RESULT([yes])
- tst_compi_connect="yes"
- ],[
- AC_MSG_RESULT([no])
- tst_compi_connect="no"
- ])
- fi
- #
- if test "$tst_compi_connect" = "yes"; then
- AC_MSG_CHECKING([if connect usage allowed])
- if test "x$curl_disallow_connect" != "xyes"; then
- AC_MSG_RESULT([yes])
- tst_allow_connect="yes"
- else
- AC_MSG_RESULT([no])
- tst_allow_connect="no"
- fi
- fi
- #
- AC_MSG_CHECKING([if connect might be used])
- if test "$tst_links_connect" = "yes" &&
- test "$tst_proto_connect" = "yes" &&
- test "$tst_compi_connect" = "yes" &&
- test "$tst_allow_connect" = "yes"; then
- AC_MSG_RESULT([yes])
- AC_DEFINE_UNQUOTED(HAVE_CONNECT, 1,
- [Define to 1 if you have the connect function.])
- curl_cv_func_connect="yes"
- else
- AC_MSG_RESULT([no])
- curl_cv_func_connect="no"
- fi
-])
-
-
dnl CURL_CHECK_FUNC_FCNTL
dnl -------------------------------------------------
dnl Verify if fcntl is available, prototyped, and
@@ -3455,6 +3294,93 @@ AC_DEFUN([CURL_CHECK_FUNC_INET_PTON], [
])
+dnl CURL_CHECK_FUNC_IOCTL
+dnl -------------------------------------------------
+dnl Verify if ioctl is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable curl_disallow_ioctl, then
+dnl HAVE_IOCTL will be defined.
+
+AC_DEFUN([CURL_CHECK_FUNC_IOCTL], [
+ AC_REQUIRE([CURL_INCLUDES_STROPTS])dnl
+ #
+ tst_links_ioctl="unknown"
+ tst_proto_ioctl="unknown"
+ tst_compi_ioctl="unknown"
+ tst_allow_ioctl="unknown"
+ #
+ AC_MSG_CHECKING([if ioctl can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([ioctl])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_ioctl="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_ioctl="no"
+ ])
+ #
+ if test "$tst_links_ioctl" = "yes"; then
+ AC_MSG_CHECKING([if ioctl is prototyped])
+ AC_EGREP_CPP([ioctl],[
+ $curl_includes_stropts
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_ioctl="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_ioctl="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_ioctl" = "yes"; then
+ AC_MSG_CHECKING([if ioctl is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $curl_includes_stropts
+ ]],[[
+ if(0 != ioctl(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_ioctl="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_ioctl="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_ioctl" = "yes"; then
+ AC_MSG_CHECKING([if ioctl usage allowed])
+ if test "x$curl_disallow_ioctl" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_ioctl="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_ioctl="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if ioctl might be used])
+ if test "$tst_links_ioctl" = "yes" &&
+ test "$tst_proto_ioctl" = "yes" &&
+ test "$tst_compi_ioctl" = "yes" &&
+ test "$tst_allow_ioctl" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_IOCTL, 1,
+ [Define to 1 if you have the ioctl function.])
+ curl_cv_func_ioctl="yes"
+ CURL_CHECK_FUNC_IOCTL_FIONBIO
+ CURL_CHECK_FUNC_IOCTL_SIOCGIFADDR
+ else
+ AC_MSG_RESULT([no])
+ curl_cv_func_ioctl="no"
+ fi
+])
+
+
dnl CURL_CHECK_FUNC_IOCTL_FIONBIO
dnl -------------------------------------------------
dnl Verify if ioctl with the FIONBIO command is
@@ -5866,11 +5792,14 @@ AC_DEFUN([CURL_RUN_IFELSE], [
AC_RUN_IFELSE([AC_LANG_SOURCE([$1])], $2, $3, $4)
;;
*)
+ oldcc=$CC
old=$LD_LIBRARY_PATH
+ CC="sh ./run-compiler"
LD_LIBRARY_PATH=$CURL_LIBRARY_PATH:$old
export LD_LIBRARY_PATH
AC_RUN_IFELSE([AC_LANG_SOURCE([$1])], $2, $3, $4)
LD_LIBRARY_PATH=$old # restore
+ CC=$oldcc
;;
esac
])
diff --git a/m4/curl-gnutls.m4 b/m4/curl-gnutls.m4
index d6f4a9708..48813dfad 100644
--- a/m4/curl-gnutls.m4
+++ b/m4/curl-gnutls.m4
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/m4/curl-mbedtls.m4 b/m4/curl-mbedtls.m4
index 022d14ea2..64116e758 100644
--- a/m4/curl-mbedtls.m4
+++ b/m4/curl-mbedtls.m4
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -49,7 +49,7 @@ if test "x$OPT_MBEDTLS" != xno; then
MBEDTLS_ENABLED=1
USE_MBEDTLS="yes"
ssl_msg="mbedTLS"
- test mbedtls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
+ test mbedtls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
], [], -lmbedx509 -lmbedcrypto)
fi
diff --git a/m4/curl-nss.m4 b/m4/curl-nss.m4
deleted file mode 100644
index cb162755d..000000000
--- a/m4/curl-nss.m4
+++ /dev/null
@@ -1,144 +0,0 @@
-#***************************************************************************
-# _ _ ____ _
-# Project ___| | | | _ \| |
-# / __| | | | |_) | |
-# | (__| |_| | _ <| |___
-# \___|\___/|_| \_\_____|
-#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
-#
-# This software is licensed 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
-#
-#***************************************************************************
-
-AC_DEFUN([CURL_WITH_NSS], [
-if test "x$OPT_NSS" != xno; then
- ssl_msg=
-
- if test X"$OPT_NSS" != Xno; then
-
- addld=""
- addlib=""
- addcflags=""
- nssprefix=""
- version=""
-
- if test "x$OPT_NSS" = "xyes"; then
-
- CURL_CHECK_PKGCONFIG(nss)
-
- if test "$PKGCONFIG" != "no" ; then
- addlib=`$PKGCONFIG --libs nss`
- addcflags=`$PKGCONFIG --cflags nss`
- version=`$PKGCONFIG --modversion nss`
- nssprefix=`$PKGCONFIG --variable=prefix nss`
- else
- dnl Without pkg-config, we check for nss-config
-
- check=`nss-config --version 2>/dev/null`
- if test -n "$check"; then
- addlib=`nss-config --libs`
- addcflags=`nss-config --cflags`
- version=`nss-config --version`
- nssprefix=`nss-config --prefix`
- else
- addlib="-lnss3"
- addcflags=""
- version="unknown"
- fi
- fi
- else
- NSS_PCDIR="$OPT_NSS/lib/pkgconfig"
- if test -f "$NSS_PCDIR/nss.pc"; then
- CURL_CHECK_PKGCONFIG(nss, [$NSS_PCDIR])
- if test "$PKGCONFIG" != "no" ; then
- addld=`CURL_EXPORT_PCDIR([$NSS_PCDIR]) $PKGCONFIG --libs-only-L nss`
- addlib=`CURL_EXPORT_PCDIR([$NSS_PCDIR]) $PKGCONFIG --libs-only-l nss`
- addcflags=`CURL_EXPORT_PCDIR([$NSS_PCDIR]) $PKGCONFIG --cflags nss`
- version=`CURL_EXPORT_PCDIR([$NSS_PCDIR]) $PKGCONFIG --modversion nss`
- nssprefix=`CURL_EXPORT_PCDIR([$NSS_PCDIR]) $PKGCONFIG --variable=prefix nss`
- fi
- fi
- fi
-
- if test -z "$addlib"; then
- # Without pkg-config, we'll kludge in some defaults
- AC_MSG_WARN([Using hard-wired libraries and compilation flags for NSS.])
- addld="-L$OPT_NSS/lib"
- addlib="-lssl3 -lsmime3 -lnss3 -lplds4 -lplc4 -lnspr4"
- addcflags="-I$OPT_NSS/include"
- version="unknown"
- nssprefix=$OPT_NSS
- fi
-
- CLEANLDFLAGS="$LDFLAGS"
- CLEANLIBS="$LIBS"
- CLEANCPPFLAGS="$CPPFLAGS"
-
- LDFLAGS="$addld $LDFLAGS"
- LIBS="$addlib $LIBS"
- if test "$addcflags" != "-I/usr/include"; then
- CPPFLAGS="$CPPFLAGS $addcflags"
- fi
-
- dnl The function SSL_VersionRangeSet() is needed to enable TLS > 1.0
- AC_CHECK_LIB(nss3, SSL_VersionRangeSet,
- [
- AC_DEFINE(USE_NSS, 1, [if NSS is enabled])
- AC_SUBST(USE_NSS, [1])
- USE_NSS="yes"
- NSS_ENABLED=1
- ssl_msg="NSS"
- test nss != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
- ],
- [
- LDFLAGS="$CLEANLDFLAGS"
- LIBS="$CLEANLIBS"
- CPPFLAGS="$CLEANCPPFLAGS"
- ])
-
- if test "x$USE_NSS" = "xyes"; then
- AC_MSG_NOTICE([detected NSS version $version])
-
- dnl PK11_CreateManagedGenericObject() was introduced in NSS 3.34 because
- dnl PK11_DestroyGenericObject() does not release resources allocated by
- dnl PK11_CreateGenericObject() early enough.
- AC_CHECK_FUNC(PK11_CreateManagedGenericObject,
- [
- AC_DEFINE(HAVE_PK11_CREATEMANAGEDGENERICOBJECT, 1,
- [if you have the PK11_CreateManagedGenericObject function])
- ])
-
- dnl needed when linking the curl tool without USE_EXPLICIT_LIB_DEPS
- NSS_LIBS=$addlib
- AC_SUBST([NSS_LIBS])
-
- dnl when shared libs 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
- dnl due to this
- if test "x$cross_compiling" != "xyes"; then
- CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$nssprefix/lib$libsuff"
- export CURL_LIBRARY_PATH
- AC_MSG_NOTICE([Added $nssprefix/lib$libsuff to CURL_LIBRARY_PATH])
- fi
-
- fi dnl NSS found
-
- fi dnl NSS not disabled
-
- test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
-fi
-
-])
diff --git a/m4/curl-openssl.m4 b/m4/curl-openssl.m4
index bdcbfde17..608653c5c 100644
--- a/m4/curl-openssl.m4
+++ b/m4/curl-openssl.m4
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -102,7 +102,6 @@ if test "x$OPT_OPENSSL" != xno; then
SSL_LDFLAGS="-L$LIB_OPENSSL"
SSL_CPPFLAGS="-I$PREFIX_OPENSSL/include"
fi
- SSL_CPPFLAGS="$SSL_CPPFLAGS -I$PREFIX_OPENSSL/include/openssl"
;;
esac
@@ -150,7 +149,7 @@ if test "x$OPT_OPENSSL" != xno; then
fi
if test "$PKGCONFIG" = "no" -a -n "$PREFIX_OPENSSL" ; then
# only set this if pkg-config wasn't used
- CPPFLAGS="$CLEANCPPFLAGS -I$PREFIX_OPENSSL/include/openssl -I$PREFIX_OPENSSL/include"
+ CPPFLAGS="$CLEANCPPFLAGS -I$PREFIX_OPENSSL/include"
fi
# Linking previously failed, try extra paths from --with-openssl or
# pkg-config. Use a different function name to avoid reusing the earlier
@@ -227,7 +226,7 @@ if test "x$OPT_OPENSSL" != xno; then
AC_CHECK_HEADERS(openssl/x509.h openssl/rsa.h openssl/crypto.h \
openssl/pem.h openssl/ssl.h openssl/err.h,
ssl_msg="OpenSSL"
- test openssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
+ test openssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
OPENSSL_ENABLED=1
AC_DEFINE(USE_OPENSSL, 1, [if OpenSSL is in use]))
@@ -260,8 +259,6 @@ if test "x$OPT_OPENSSL" != xno; then
if test X"$OPENSSL_ENABLED" = X"1"; then
dnl These can only exist if OpenSSL exists
- AC_CHECK_FUNCS( RAND_egd )
-
AC_MSG_CHECKING([for BoringSSL])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
@@ -273,13 +270,27 @@ if test "x$OPT_OPENSSL" != xno; then
]])
],[
AC_MSG_RESULT([yes])
- AC_DEFINE_UNQUOTED(HAVE_BORINGSSL, 1,
- [Define to 1 if using BoringSSL.])
ssl_msg="BoringSSL"
],[
AC_MSG_RESULT([no])
])
+ AC_MSG_CHECKING([for AWS-LC])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ #include <openssl/base.h>
+ ]],[[
+ #ifndef OPENSSL_IS_AWSLC
+ #error not AWS-LC
+ #endif
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ ssl_msg="AWS-LC"
+ ],[
+ AC_MSG_RESULT([no])
+ ])
+
AC_MSG_CHECKING([for libressl])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
@@ -301,7 +312,7 @@ if test "x$OPT_OPENSSL" != xno; then
AC_LANG_PROGRAM([[
#include <openssl/opensslv.h>
]],[[
- #if defined(OPENSSL_VERSION_MAJOR) && (OPENSSL_VERSION_MAJOR >= 3)
+ #if (OPENSSL_VERSION_NUMBER >= 0x30000000L)
return 0;
#else
#error older than 3
@@ -311,11 +322,6 @@ if test "x$OPT_OPENSSL" != xno; then
AC_MSG_RESULT([yes])
AC_DEFINE_UNQUOTED(HAVE_OPENSSL3, 1,
[Define to 1 if using OpenSSL 3 or later.])
- dnl OpenSSLv3 marks the DES functions deprecated but we have no
- dnl replacements (yet) so tell the compiler to not warn for them
- dnl
- dnl Ask OpenSSL to suppress the warnings.
- CPPFLAGS="$CPPFLAGS -DOPENSSL_SUPPRESS_DEPRECATED"
ssl_msg="OpenSSL v3+"
],[
AC_MSG_RESULT([no])
@@ -351,16 +357,6 @@ dnl Check for the random seed preferences
dnl **********************************************************************
if test X"$OPENSSL_ENABLED" = X"1"; then
- AC_ARG_WITH(egd-socket,
- AS_HELP_STRING([--with-egd-socket=FILE],
- [Entropy Gathering Daemon socket pathname]),
- [ EGD_SOCKET="$withval" ]
- )
- if test -n "$EGD_SOCKET" ; then
- AC_DEFINE_UNQUOTED(EGD_SOCKET, "$EGD_SOCKET",
- [your Entropy Gathering Daemon socket pathname] )
- fi
-
dnl Check for user-specified random device
AC_ARG_WITH(random,
AS_HELP_STRING([--with-random=FILE],
diff --git a/m4/curl-override.m4 b/m4/curl-override.m4
index fb84f67cc..b4a8df9bb 100644
--- a/m4/curl-override.m4
+++ b/m4/curl-override.m4
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/m4/curl-reentrant.m4 b/m4/curl-reentrant.m4
index 1992c5ecd..c1f333982 100644
--- a/m4/curl-reentrant.m4
+++ b/m4/curl-reentrant.m4
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/m4/curl-rustls.m4 b/m4/curl-rustls.m4
index 6fd8235aa..75542e4a4 100644
--- a/m4/curl-rustls.m4
+++ b/m4/curl-rustls.m4
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -38,6 +38,14 @@ if test "x$OPT_RUSTLS" != xno; then
OPT_RUSTLS=""
fi
+ case $host_os in
+ darwin*)
+ LDFLAGS="$LDFLAGS -framework Security"
+ ;;
+ *)
+ ;;
+ esac
+
if test -z "$OPT_RUSTLS" ; then
dnl check for lib first without setting any new path
@@ -49,7 +57,7 @@ if test "x$OPT_RUSTLS" != xno; then
RUSTLS_ENABLED=1
USE_RUSTLS="yes"
ssl_msg="rustls"
- test rustls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
+ test rustls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
], [], -lpthread -ldl -lm)
fi
diff --git a/m4/curl-schannel.m4 b/m4/curl-schannel.m4
index 49c387791..016bfd4ed 100644
--- a/m4/curl-schannel.m4
+++ b/m4/curl-schannel.m4
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/m4/curl-sectransp.m4 b/m4/curl-sectransp.m4
index 0c43b13a2..77b37bed9 100644
--- a/m4/curl-sectransp.m4
+++ b/m4/curl-sectransp.m4
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -33,7 +33,7 @@ if test "x$OPT_SECURETRANSPORT" != xno; then
ssl_msg="Secure Transport"
test secure-transport != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
SECURETRANSPORT_ENABLED=1
- LDFLAGS="$LDFLAGS -framework CoreFoundation -framework Security"
+ LDFLAGS="$LDFLAGS -framework CoreFoundation -framework CoreServices -framework Security"
else
AC_MSG_RESULT(no)
fi
diff --git a/m4/curl-sysconfig.m4 b/m4/curl-sysconfig.m4
index c6cd2f88e..9b287bc76 100644
--- a/m4/curl-sysconfig.m4
+++ b/m4/curl-sysconfig.m4
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -23,17 +23,17 @@
#***************************************************************************
AC_DEFUN([CURL_DARWIN_SYSTEMCONFIGURATION], [
-AC_MSG_CHECKING([whether to link macOS CoreFoundation and SystemConfiguration framework])
+AC_MSG_CHECKING([whether to link macOS CoreFoundation, CoreServices, and SystemConfiguration frameworks])
case $host_os in
darwin*)
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([[
#include <TargetConditionals.h>
]],[[
-#if (TARGET_OS_OSX)
+#if TARGET_OS_MAC && !(defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE)
return 0;
#else
-#error Not a macOS
+#error Not macOS
#endif
]])
],[
@@ -43,7 +43,7 @@ case $host_os in
])
if test "x$build_for_macos" != xno; then
AC_MSG_RESULT(yes)
- LDFLAGS="$LDFLAGS -framework CoreFoundation -framework SystemConfiguration"
+ LDFLAGS="$LDFLAGS -framework CoreFoundation -framework CoreServices -framework SystemConfiguration"
else
AC_MSG_RESULT(no)
fi
diff --git a/m4/curl-wolfssl.m4 b/m4/curl-wolfssl.m4
index d66c97935..f630685bc 100644
--- a/m4/curl-wolfssl.m4
+++ b/m4/curl-wolfssl.m4
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -90,16 +90,16 @@ if test "x$OPT_WOLFSSL" != xno; then
AC_MSG_CHECKING([for wolfSSL_Init in -lwolfssl])
AC_LINK_IFELSE([
- AC_LANG_PROGRAM([[
+ AC_LANG_PROGRAM([[
/* These aren't needed for detection and confuse WolfSSL.
They are set up properly later if it is detected. */
#undef SIZEOF_LONG
#undef SIZEOF_LONG_LONG
#include <wolfssl/options.h>
#include <wolfssl/ssl.h>
- ]],[[
- return wolfSSL_Init();
- ]])
+ ]],[[
+ return wolfSSL_Init();
+ ]])
],[
AC_MSG_RESULT(yes)
AC_DEFINE(USE_WOLFSSL, 1, [if wolfSSL is enabled])
@@ -107,7 +107,7 @@ if test "x$OPT_WOLFSSL" != xno; then
WOLFSSL_ENABLED=1
USE_WOLFSSL="yes"
ssl_msg="WolfSSL"
- test wolfssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
+ test wolfssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
],
[
AC_MSG_RESULT(no)
@@ -143,6 +143,15 @@ if test "x$OPT_WOLFSSL" != xno; then
]
)
+ dnl if this symbol is present, we can make use of BIO filter chains
+ AC_CHECK_FUNC(wolfSSL_BIO_set_shutdown,
+ [
+ AC_DEFINE(HAVE_WOLFSSL_FULL_BIO, 1,
+ [if you have wolfSSL_BIO_set_shutdown])
+ WOLFSSL_FULL_BIO=1
+ ]
+ )
+
if test -n "$wolfssllibpath"; then
dnl when shared libs were found in a path that the run-time
dnl linker doesn't search through, we need to add it to
diff --git a/m4/xc-am-iface.m4 b/m4/xc-am-iface.m4
index 621453d4e..c035f58c5 100644
--- a/m4/xc-am-iface.m4
+++ b/m4/xc-am-iface.m4
@@ -2,7 +2,7 @@
#
# xc-am-iface.m4
#
-# Copyright (c) 2013 - 2022 Daniel Stenberg <daniel@haxx.se>
+# Copyright (C) Daniel Stenberg <daniel@haxx.se>
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
@@ -83,172 +83,3 @@ m4_ifdef([AM_INIT_AUTOMAKE],
dnl
m4_define([$0], [])[]dnl
])
-
-
-dnl _XC_AMEND_DISTCLEAN_BODY ([LIST-OF-SUBDIRS])
-dnl -------------------------------------------------
-dnl Private macro.
-dnl
-dnl This macro performs shell code embedding into
-dnl configure script in order to modify distclean
-dnl and maintainer-clean targets of makefiles which
-dnl are located in given list of subdirs.
-dnl
-dnl See XC_AMEND_DISTCLEAN comments for details.
-
-m4_define([_XC_AMEND_DISTCLEAN_BODY],
-[dnl
-## ---------------------------------- ##
-## Start of distclean amending code ##
-## ---------------------------------- ##
-
-for xc_subdir in [$1]
-do
-
-if test ! -f "$xc_subdir/Makefile"; then
- echo "$xc_msg_err $xc_subdir/Makefile file not found. $xc_msg_abrt" >&2
- exit 1
-fi
-
-# Fetch dependency tracking file list from Makefile include lines.
-
-xc_inc_lines=`grep '^include .*(DEPDIR)' "$xc_subdir/Makefile" 2>/dev/null`
-xc_cnt_words=`echo "$xc_inc_lines" | wc -w | tr -d "$xc_space$xc_tab"`
-
-# --disable-dependency-tracking might have been used, consequently
-# there is nothing to amend without a dependency tracking file list.
-
-if test $xc_cnt_words -gt 0; then
-
-AC_MSG_NOTICE([amending $xc_subdir/Makefile])
-
-# Build Makefile specific patch hunk.
-
-xc_p="$xc_subdir/xc_patch.tmp"
-
-xc_rm_depfiles=`echo "$xc_inc_lines" \
- | $SED 's%include% -rm -f%' 2>/dev/null`
-
-xc_dep_subdirs=`echo "$xc_inc_lines" \
- | $SED 's%include[[ ]][[ ]]*%%' 2>/dev/null \
- | $SED 's%(DEPDIR)/.*%(DEPDIR)%' 2>/dev/null \
- | sort | uniq`
-
-echo "$xc_rm_depfiles" >$xc_p
-
-for xc_dep_dir in $xc_dep_subdirs; do
- echo "${xc_tab}@xm_dep_cnt=\`ls $xc_dep_dir | wc -l 2>/dev/null\`; \\" >>$xc_p
- echo "${xc_tab}if test \$\$xm_dep_cnt -eq 0 && test -d $xc_dep_dir; then \\" >>$xc_p
- echo "${xc_tab} rm -rf $xc_dep_dir; \\" >>$xc_p
- echo "${xc_tab}fi" >>$xc_p
-done
-
-# Build Makefile patching sed scripts.
-
-xc_s1="$xc_subdir/xc_script_1.tmp"
-xc_s2="$xc_subdir/xc_script_2.tmp"
-xc_s3="$xc_subdir/xc_script_3.tmp"
-
-cat >$xc_s1 <<\_EOT
-/^distclean[[ ]]*:/,/^[[^ ]][[^ ]]*:/{
- s/^.*(DEPDIR)/___xc_depdir_line___/
-}
-/^maintainer-clean[[ ]]*:/,/^[[^ ]][[^ ]]*:/{
- s/^.*(DEPDIR)/___xc_depdir_line___/
-}
-_EOT
-
-cat >$xc_s2 <<\_EOT
-/___xc_depdir_line___$/{
- N
- /___xc_depdir_line___$/D
-}
-_EOT
-
-cat >$xc_s3 <<_EOT
-/^___xc_depdir_line___/{
- r $xc_p
- d
-}
-_EOT
-
-# Apply patch to Makefile and cleanup.
-
-$SED -f "$xc_s1" "$xc_subdir/Makefile" >"$xc_subdir/Makefile.tmp1"
-$SED -f "$xc_s2" "$xc_subdir/Makefile.tmp1" >"$xc_subdir/Makefile.tmp2"
-$SED -f "$xc_s3" "$xc_subdir/Makefile.tmp2" >"$xc_subdir/Makefile.tmp3"
-
-if test -f "$xc_subdir/Makefile.tmp3"; then
- mv -f "$xc_subdir/Makefile.tmp3" "$xc_subdir/Makefile"
-fi
-
-test -f "$xc_subdir/Makefile.tmp1" && rm -f "$xc_subdir/Makefile.tmp1"
-test -f "$xc_subdir/Makefile.tmp2" && rm -f "$xc_subdir/Makefile.tmp2"
-test -f "$xc_subdir/Makefile.tmp3" && rm -f "$xc_subdir/Makefile.tmp3"
-
-test -f "$xc_p" && rm -f "$xc_p"
-test -f "$xc_s1" && rm -f "$xc_s1"
-test -f "$xc_s2" && rm -f "$xc_s2"
-test -f "$xc_s3" && rm -f "$xc_s3"
-
-fi
-
-done
-
-## -------------------------------- ##
-## End of distclean amending code ##
-## -------------------------------- ##
-dnl
-m4_define([$0], [])[]dnl
-])
-
-
-dnl XC_AMEND_DISTCLEAN ([LIST-OF-SUBDIRS])
-dnl -------------------------------------------------
-dnl Public macro.
-dnl
-dnl This macro embeds shell code into configure script
-dnl that amends, at configure runtime, the distclean
-dnl and maintainer-clean targets of Makefiles located
-dnl in all subdirs given in the mandatory white-space
-dnl separated list argument.
-dnl
-dnl Embedding only takes place when using automake 1.14
-dnl or newer, otherwise amending code is not included
-dnl in generated configure script.
-dnl
-dnl distclean and maintainer-clean targets are modified
-dnl to avoid unconditional removal of dependency subdirs
-dnl which triggers distclean and maintainer-clean errors
-dnl when using automake 'subdir-objects' option along
-dnl with per-target objects and source files existing in
-dnl multiple subdirs used for different build targets.
-dnl
-dnl New behavior first removes each dependency tracking
-dnl file independently, and only removes each dependency
-dnl subdir when it finds out that it no longer holds any
-dnl dependency tracking file.
-dnl
-dnl When configure option --disable-dependency-tracking
-dnl is used no amending takes place given that there are
-dnl no dependency tracking files.
-
-AC_DEFUN([XC_AMEND_DISTCLEAN],
-[dnl
-AC_PREREQ([2.50])dnl
-dnl
-m4_ifdef([_AC_OUTPUT_MAIN_LOOP],
- [m4_provide_if([_AC_OUTPUT_MAIN_LOOP], [],
- [m4_fatal([call to AC_OUTPUT needed before $0])])])dnl
-dnl
-m4_if([$#], [1], [], [m4_fatal([$0: wrong number of arguments])])dnl
-m4_if([$1], [], [m4_fatal([$0: missing argument])])dnl
-dnl
-AC_REQUIRE([XC_CONFIGURE_PREAMBLE])dnl
-dnl
-m4_ifdef([_AM_PROG_CC_C_O],
-[
-_XC_AMEND_DISTCLEAN_BODY([$1])
-])dnl
-m4_define([$0], [])[]dnl
-])
diff --git a/m4/xc-cc-check.m4 b/m4/xc-cc-check.m4
index 9eae8a647..a6cfb07eb 100644
--- a/m4/xc-cc-check.m4
+++ b/m4/xc-cc-check.m4
@@ -2,7 +2,7 @@
#
# xc-cc-check.m4
#
-# Copyright (c) 2013 - 2022, Daniel Stenberg <daniel@haxx.se>
+# Copyright (C), Daniel Stenberg <daniel@haxx.se>
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
diff --git a/m4/xc-lt-iface.m4 b/m4/xc-lt-iface.m4
index 337c9f9cd..d5e437ffd 100644
--- a/m4/xc-lt-iface.m4
+++ b/m4/xc-lt-iface.m4
@@ -2,7 +2,7 @@
#
# xc-lt-iface.m4
#
-# Copyright (c) 2013 - 2022, Daniel Stenberg <daniel@haxx.se>
+# Copyright (C), Daniel Stenberg <daniel@haxx.se>
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
diff --git a/m4/xc-translit.m4 b/m4/xc-translit.m4
index 6fc837e63..6d6677197 100644
--- a/m4/xc-translit.m4
+++ b/m4/xc-translit.m4
@@ -2,7 +2,7 @@
#
# xc-translit.m4
#
-# Copyright (c) 2011 - 2022, Daniel Stenberg <daniel@haxx.se>
+# Copyright (C), Daniel Stenberg <daniel@haxx.se>
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
diff --git a/m4/xc-val-flgs.m4 b/m4/xc-val-flgs.m4
index b721c3155..c8f779651 100644
--- a/m4/xc-val-flgs.m4
+++ b/m4/xc-val-flgs.m4
@@ -2,7 +2,7 @@
#
# xc-val-flgs.m4
#
-# Copyright (c) 2013 - 2022, Daniel Stenberg <daniel@haxx.se>
+# Copyright (C), Daniel Stenberg <daniel@haxx.se>
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
diff --git a/m4/zz40-xc-ovr.m4 b/m4/zz40-xc-ovr.m4
index 3b96e5f01..fa457876f 100644
--- a/m4/zz40-xc-ovr.m4
+++ b/m4/zz40-xc-ovr.m4
@@ -2,7 +2,7 @@
#
# zz40-xc-ovr.m4
#
-# Copyright (c) 2013 - 2022 Daniel Stenberg <daniel@haxx.se>
+# Copyright (C) Daniel Stenberg <daniel@haxx.se>
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
diff --git a/m4/zz50-xc-ovr.m4 b/m4/zz50-xc-ovr.m4
index ea68e5b48..18c1f0aba 100644
--- a/m4/zz50-xc-ovr.m4
+++ b/m4/zz50-xc-ovr.m4
@@ -2,7 +2,7 @@
#
# zz50-xc-ovr.m4
#
-# Copyright (c) 2011 - 2022, Daniel Stenberg <daniel@haxx.se>
+# Copyright (C), Daniel Stenberg <daniel@haxx.se>
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
diff --git a/m4/zz60-xc-ovr.m4 b/m4/zz60-xc-ovr.m4
index e3e29bfc4..531668672 100644
--- a/m4/zz60-xc-ovr.m4
+++ b/m4/zz60-xc-ovr.m4
@@ -2,7 +2,7 @@
#
# zz60-xc-ovr.m4
#
-# Copyright (c) 2013 - 2022, Daniel Stenberg <daniel@haxx.se>
+# Copyright (C), Daniel Stenberg <daniel@haxx.se>
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
diff --git a/maketgz b/maketgz
index 92ea871af..a0fcd878f 100755
--- a/maketgz
+++ b/maketgz
@@ -9,7 +9,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -64,6 +64,7 @@ numeric=`perl -e 'printf("%02x%02x%02x\n", '"$major, $minor, $patch);"`
HEADER=include/curl/curlver.h
CHEADER=src/tool_version.h
PLIST=lib/libcurl.plist
+PLISTO=$PLIST
if test -z "$only"; then
ext=".dist"
@@ -94,6 +95,9 @@ rm -f "$HEADER.bak"
sed -i.bak 's/#define CURL_VERSION .*/#define CURL_VERSION "'$curlversion'"/g' $CHEADER
rm -f "$CHEADER.bak"
+# Replace version number in plist file:
+sed "s/@CURL_PLIST_VERSION@/$curlversion/g" < $PLISTO.in >$PLIST
+
if test -n "$only"; then
# done!
exit;
diff --git a/packages/Android/Android.mk b/packages/Android/Android.mk
deleted file mode 100644
index f5093b7e4..000000000
--- a/packages/Android/Android.mk
+++ /dev/null
@@ -1,133 +0,0 @@
-#***************************************************************************
-# _ _ ____ _
-# Project ___| | | | _ \| |
-# / __| | | | |_) | |
-# | (__| |_| | _ <| |___
-# \___|\___/|_| \_\_____|
-#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
-#
-# This software is licensed 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
-#
-###########################################################################
-# Google Android makefile for curl and libcurl
-#
-# This file can be used when building curl using the full Android source
-# release or the NDK. Most users do not want or need to do this; please
-# instead read the Android section in docs/INSTALL for alternate
-# methods.
-#
-# Place the curl source (including this makefile) into external/curl/ in the
-# Android source tree. Then build them with 'make curl' or just 'make libcurl'
-# from the Android root. Tested with Android versions 1.5, 2.1-2.3
-#
-# Note: you must first create a curl_config.h file by running configure in the
-# Android environment. The only way I've found to do this is tricky. Perform a
-# normal Android build with libcurl in the source tree, providing the target
-# "showcommands" to make. The build will eventually fail (because curl_config.h
-# doesn't exist yet), but the compiler commands used to build curl will be
-# shown. Now, from the external/curl/ directory, run curl's normal configure
-# command with flags that match what Android itself uses. This will mean
-# putting the compiler directory into the PATH, putting the -I, -isystem and
-# -D options into CPPFLAGS, putting the -W, -m, -f, -O and -nostdlib options
-# into CFLAGS, and putting the -Wl, -L and -l options into LIBS, along with the
-# path to the files libgcc.a, crtbegin_dynamic.o, and ccrtend_android.o.
-# Remember that the paths must be absolute since you will not be running
-# configure from the same directory as the Android make. The normal
-# cross-compiler options must also be set. Note that the -c, -o, -MD and
-# similar flags must not be set.
-#
-# To see all the LIBS options, you'll need to do the "showcommands" trick on an
-# executable that's already buildable and watch what flags Android uses to link
-# it (dhcpcd is a good choice to watch). You'll also want to add -L options to
-# LIBS that point to the out/.../obj/lib/ and out/.../obj/system/lib/
-# directories so that additional libraries can be found and used by curl.
-#
-# The end result will be a configure command that looks something like this
-# (the environment variable A is set to the Android root path which makes the
-# command shorter):
-#
-# A=`realpath ../..` && \
-# PATH="$A/prebuilt/linux-x86/toolchain/arm-eabi-X/bin:$PATH" \
-# ./configure --host=arm-linux CC=arm-eabi-gcc \
-# CPPFLAGS="-I $A/system/core/include ..." \
-# CFLAGS="-nostdlib -fno-exceptions -Wno-multichar ..." \
-# LIBS="$A/prebuilt/linux-x86/toolchain/arm-eabi-X/lib/gcc/arm-eabi/X\
-# /interwork/libgcc.a ..."
-#
-# Finally, copy the file COPYING to NOTICE so that the curl license gets put
-# into the right place (but see the note about this below).
-#
-# Dan Fandrich
-# November 2011
-
-LOCAL_PATH:= $(call my-dir)/../..
-
-common_CFLAGS := -Wpointer-arith -Wwrite-strings -Wunused -Winline -Wnested-externs -Wmissing-declarations -Wmissing-prototypes -Wno-long-long -Wfloat-equal -Wno-multichar -Wsign-compare -Wno-format-nonliteral -Wendif-labels -Wstrict-prototypes -Wdeclaration-after-statement -Wno-system-headers -DHAVE_CONFIG_H
-
-#########################
-# Build the libcurl library
-
-include $(CLEAR_VARS)
-include $(LOCAL_PATH)/lib/Makefile.inc
-CURL_HEADERS := \
- curl.h \
- system.h \
- curlver.h \
- easy.h \
- mprintf.h \
- multi.h \
- stdcheaders.h \
- typecheck-gcc.h
-
-LOCAL_SRC_FILES := $(addprefix lib/,$(CSOURCES))
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/include/
-LOCAL_CFLAGS += $(common_CFLAGS)
-
-LOCAL_COPY_HEADERS_TO := libcurl/curl
-LOCAL_COPY_HEADERS := $(addprefix include/curl/,$(CURL_HEADERS))
-
-LOCAL_MODULE:= libcurl
-LOCAL_MODULE_TAGS := optional
-
-# Copy the licence to a place where Android will find it.
-# Actually, this doesn't quite work because the build system searches
-# for NOTICE files before it gets to this point, so it will only be seen
-# on subsequent builds.
-ALL_PREBUILT += $(LOCAL_PATH)/NOTICE
-$(LOCAL_PATH)/NOTICE: $(LOCAL_PATH)/COPYING | $(ACP)
- $(copy-file-to-target)
-
-include $(BUILD_STATIC_LIBRARY)
-
-
-#########################
-# Build the curl binary
-
-include $(CLEAR_VARS)
-include $(LOCAL_PATH)/src/Makefile.inc
-LOCAL_SRC_FILES := $(addprefix src/,$(CURL_CFILES))
-
-LOCAL_MODULE := curl
-LOCAL_MODULE_TAGS := optional
-LOCAL_STATIC_LIBRARIES := libcurl
-LOCAL_SYSTEM_SHARED_LIBRARIES := libc
-
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/include $(LOCAL_PATH)/lib
-
-# This may also need to include $(CURLX_CFILES) in order to correctly link
-# if libcurl is changed to be built as a dynamic library
-LOCAL_CFLAGS += $(common_CFLAGS)
-
-include $(BUILD_EXECUTABLE)
diff --git a/packages/DOS/README b/packages/DOS/README
deleted file mode 100644
index 8336efa41..000000000
--- a/packages/DOS/README
+++ /dev/null
@@ -1,17 +0,0 @@
-Gisle Vanem made curl build fine on DOS (and MinGW) with djgpp, OpenSSL and his
-Watt-32 stack.
-
-'make -f Makefile.dist djgpp' in the root curl dir should build it fine.
-Or enter 'lib' and do a 'make -f Makefile.dj clean all' to first delete
-'lib/curl_config.h' which is possibly from a previous incompatible Windows-build.
-
-Note 1: djgpp 2.04 beta has a sscanf() bug so the URL parsing isn't
- done properly. Use djgpp 2.03 until they fix it.
-
-Note 2: Compile Watt-32 (and OpenSSL) with the same version of djgpp.
- Otherwise things go wrong because things like FS-extensions and
- errnos have been changed between releases.
-
-Note 3: Several 'USE_x' variables in 'common.dj' are on the 'USE_x ?= 0'
- form (conditional variable assignment). So one can build like this:
- c:\curl\lib> make -f makefile.dj USE_OPENSSL=1 USE_ZLIB=1 clean all
diff --git a/packages/DOS/common.dj b/packages/DOS/common.dj
deleted file mode 100644
index b181e8215..000000000
--- a/packages/DOS/common.dj
+++ /dev/null
@@ -1,223 +0,0 @@
-#***************************************************************************
-# _ _ ____ _
-# Project ___| | | | _ \| |
-# / __| | | | |_) | |
-# | (__| |_| | _ <| |___
-# \___|\___/|_| \_\_____|
-#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
-#
-# This software is licensed 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
-#
-###########################################################################
-#
-# Common defines for curl (djgpp/Watt-32)
-#
-# Assumes you've unpacked curl with long-file names
-# I.e use "set LFN=y" before untaring on Win9x/XP.
-# Requires sed, rm and the usual stuff.
-#
-# Define TOPDIR before including this file.
-
-MAKEFILE = Makefile.dj
-OBJ_DIR = djgpp
-
-#
-# Find out if using a Unix-like shell or a DOS command interpreter
-#
-ifneq ($(findstring COMMAND.COM,$(SHELL)),COMMAND.COM)
- ifneq ($(findstring CMD.EXE,$(SHELL)),CMD.EXE)
- ifneq ($(findstring 4DOS.COM,$(SHELL)),4DOS.COM)
- IS_UNIX_SHELL = 1
- endif
- endif
-endif
-
-#
-# Define shell dependent commands and vars
-#
-ifeq ($(IS_UNIX_SHELL),1)
- COPY = cp -f
- DELETE = rm -f
- MKDIR = mkdir
- RMDIR = rm -f -r
- DS = /
-else
- COPY = copy
- DELETE = del
- MKDIR = mkdir
- RMDIR = rmdir
- DS = \$(NOTHING)
-endif
-
-ifeq ($(OS),Windows_NT)
- #
- # Windows hosted djgpp cross compiler. Get it from:
- # https://github.com/andrewwutw/build-djgpp/releases
- #
- DJ_PREFIX ?= c:/some-path/djgpp/bin/i586-pc-msdosdjgpp-
- CC = $(DJ_PREFIX)gcc
-
-else
- #
- # The normal djgpp 'gcc' for MSDOS.
- #
- CC = gcc
-endif
-
-#
-# OpenSSL is available from www.openssl.org and builds okay
-# with djgpp/Watt-32. Set to 0 if you don't need https URLs
-# (reduces curl.exe with approx 700 kB)
-#
-USE_OPENSSL ?= 0
-
-#
-# Use zlib for contents encoding. Needed for 'USE_OPENSSL=1' too.
-#
-USE_ZLIB ?= 0
-
-#
-# Use libidn for international domain names
-#
-USE_IDNA ?= 0
-
-#
-# Use Watt-32 IPv6 stack (only IPv6 name resolution working at the moment)
-#
-USE_IPV6 ?= 0
-
-#
-# Use C-Ares resolver library
-#
-USE_ARES ?= 0
-
-#
-# Enable debug code in libcurl/curl
-#
-USE_DEBUG ?= 0
-
-#
-# Enable memory tracking code in libcurl/curl
-#
-USE_CURLDEBUG ?= 0
-
-#
-# Generate a .map file in 'link_EXE' macro
-#
-MAKE_MAP_FILE ?= 0
-
-default: all
-
-#
-# Root directory for Waterloo tcp/ip etc. Change to suite.
-# WATT_ROOT should be set during Watt-32 install.
-#
-WATT32_ROOT = $(realpath $(WATT_ROOT))
-OPENSSL_ROOT ?= $(TOPDIR)/../crypto/OpenSSL
-ZLIB_ROOT ?= e:/djgpp/contrib/zlib
-LIBIDN_ROOT ?= $(TOPDIR)/../IDN/libidn
-ARES_ROOT ?= $(TOPDIR)/../DNS/c-ares
-
-CFLAGS = -g -O2 -I. -I$(TOPDIR)/include -I$(TOPDIR)/lib \
- -I$(WATT32_ROOT)/inc -Wall -DHAVE_CONFIG_H
-
-ifeq ($(USE_OPENSSL),1)
- CFLAGS += -DUSE_OPENSSL -I$(OPENSSL_ROOT)/include
-
- #
- # Squelch the warnings on deprecated functions.
- #
- CFLAGS += -DOPENSSL_SUPPRESS_DEPRECATED
-
- #
- # Use some of these too?
- #
- # CFLAGS += -DUSE_TLS_SRP=1 \
- # -DHAVE_ENGINE_LOAD_BUILTIN_ENGINES \
- # -DHAVE_SSLV2_CLIENT_METHOD \
- # -DOPENSSL_NO_DEPRECATED
-
- #
- # 'libcomm.a' is normally 'libcommon.a'. But to keep it 8+3 clean, it's
- # shortened to 'libcomm.a'. The official OpenSSL build was recently changed
- # and this "Common" library was added for several of the Crypto Providers.
- #
- OPENSSL_LIBS = $(OPENSSL_ROOT)/lib/libssl.a \
- $(OPENSSL_ROOT)/lib/libcrypt.a \
- $(OPENSSL_ROOT)/lib/libcomm.a
-endif
-
-ifeq ($(USE_ZLIB),1)
- CFLAGS += -DHAVE_LIBZ -I$(ZLIB_ROOT)
-endif
-
-ifeq ($(USE_IPV6),1)
- CFLAGS += -DENABLE_IPV6
-endif
-
-ifeq ($(USE_ARES),1)
- CFLAGS += -DUSE_ARES -I$(ARES_ROOT)/include
-endif
-
-ifeq ($(USE_IDNA),1)
- CFLAGS += -DHAVE_LIBIDN -I$(LIBIDN_ROOT)/lib
-endif
-
-ifeq ($(USE_DEBUG),1)
- CFLAGS += -DDEBUG=1 -DDEBUGBUILD
-endif
-
-ifeq ($(USE_CURLDEBUG),1)
- CFLAGS += -DCURLDEBUG
-endif
-
-$(OBJ_DIR):
- $(MKDIR) $(OBJ_DIR)
-
-$(OBJ_DIR)/%.o: %.c
- $(CC) $(CFLAGS) -o $@ -c $<
- @echo
-
-#
-# Link-EXE macro:
-# $(1): the .exe
-# $(2): the .o-files and libraries
-#
-ifeq ($(MAKE_MAP_FILE),1)
- define link_EXE
- $(CC) -o $(1) $(LDFLAGS) -Wl,--print-map,--sort-common $(2) > $(1:.exe=.map)
- endef
-else
- define link_EXE
- $(CC) $(LDFLAGS) -o $(1) $(2)
- endef
-endif
-
-$(TOPDIR)/docs/curl.1: $(wildcard $(TOPDIR)/docs/cmdline-opts/*.d)
- cd $(TOPDIR)/docs/cmdline-opts; \
- perl gen.pl mainpage > ../$(TOPDIR)/docs/curl.1
-
-DEP_REPLACE = sed -e 's@\(.*\)\.o: @\n$$(OBJ_DIR)\/\1.o: @' \
- -e 's@$(ARES_ROOT)@$$(ARES_ROOT)@g' \
- -e 's@$(OPENSSL_ROOT)@$$(OPENSSL_ROOT)@g' \
- -e 's@$(WATT32_ROOT)@$$(WATT32_ROOT)@g' \
- -e 's@$(ZLIB_ROOT)@$$(ZLIB_ROOT)@g'
-
-#
-# One may have to do 'make -f Makefile.dj clean' first in case
-# a foreign 'curl_config.h' is making trouble.
-#
-depend: $(DEPEND_PREREQ) $(MAKEFILE)
- $(CC) -MM $(CFLAGS) $(CSOURCES) | $(DEP_REPLACE) > depend.dj
diff --git a/packages/Makefile.am b/packages/Makefile.am
index b37991166..b7bf1e591 100644
--- a/packages/Makefile.am
+++ b/packages/Makefile.am
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -23,15 +23,16 @@
###########################################################################
SUBDIRS = vms
-EXTRA_DIST = README \
- DOS/README \
- DOS/common.dj \
+EXTRA_DIST = README.md \
OS400/README.OS400 \
+ OS400/rpg-examples \
OS400/ccsidcurl.c \
OS400/ccsidcurl.h \
- OS400/chkstrings.c \
+ OS400/curlcl.c \
+ OS400/curlmain.c \
OS400/curl.inc.in \
OS400/initscript.sh \
+ OS400/config400.default \
OS400/make-include.sh \
OS400/make-lib.sh \
OS400/make-src.sh \
@@ -39,7 +40,7 @@ EXTRA_DIST = README \
OS400/makefile.sh \
OS400/os400sys.c \
OS400/os400sys.h \
- Android/Android.mk
+ OS400/curl.cmd
CHECKSRC = $(CS_$(V))
CS_0 = @echo " RUN " $@;
diff --git a/packages/Makefile.in b/packages/Makefile.in
index 9d9091e7a..fdbcda62b 100644
--- a/packages/Makefile.in
+++ b/packages/Makefile.in
@@ -95,7 +95,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.m4 \
$(top_srcdir)/m4/curl-confopts.m4 \
$(top_srcdir)/m4/curl-functions.m4 \
$(top_srcdir)/m4/curl-gnutls.m4 \
- $(top_srcdir)/m4/curl-mbedtls.m4 $(top_srcdir)/m4/curl-nss.m4 \
+ $(top_srcdir)/m4/curl-mbedtls.m4 \
$(top_srcdir)/m4/curl-openssl.m4 \
$(top_srcdir)/m4/curl-override.m4 \
$(top_srcdir)/m4/curl-reentrant.m4 \
@@ -175,7 +175,7 @@ am__define_uniq_tagged_files = \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
DIST_SUBDIRS = $(SUBDIRS)
-am__DIST_COMMON = $(srcdir)/Makefile.in README
+am__DIST_COMMON = $(srcdir)/Makefile.in README.md
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
dir0=`pwd`; \
@@ -205,6 +205,8 @@ am__relativize = \
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APACHECTL = @APACHECTL@
+APXS = @APXS@
AR = @AR@
AR_FLAGS = @AR_FLAGS@
AS = @AS@
@@ -213,6 +215,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@
+CADDY = @CADDY@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -274,6 +277,8 @@ HAVE_LIBZ = @HAVE_LIBZ@
HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
HAVE_PROTO_BSDSOCKET_H = @HAVE_PROTO_BSDSOCKET_H@
HAVE_ZSTD = @HAVE_ZSTD@
+HTTPD = @HTTPD@
+HTTPD_NGHTTPX = @HTTPD_NGHTTPX@
IDN_ENABLED = @IDN_ENABLED@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -301,7 +306,6 @@ MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
NROFF = @NROFF@
-NSS_LIBS = @NSS_LIBS@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
@@ -332,6 +336,7 @@ SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@
SUPPORT_FEATURES = @SUPPORT_FEATURES@
SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_NGHTTPX = @TEST_NGHTTPX@
USE_ARES = @USE_ARES@
USE_BEARSSL = @USE_BEARSSL@
USE_GNUTLS = @USE_GNUTLS@
@@ -345,9 +350,8 @@ USE_NGHTTP2 = @USE_NGHTTP2@
USE_NGHTTP3 = @USE_NGHTTP3@
USE_NGTCP2 = @USE_NGTCP2@
USE_NGTCP2_CRYPTO_GNUTLS = @USE_NGTCP2_CRYPTO_GNUTLS@
-USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@
+USE_NGTCP2_CRYPTO_QUICTLS = @USE_NGTCP2_CRYPTO_QUICTLS@
USE_NGTCP2_CRYPTO_WOLFSSL = @USE_NGTCP2_CRYPTO_WOLFSSL@
-USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_RUSTLS = @USE_RUSTLS@
@@ -426,7 +430,7 @@ top_srcdir = @top_srcdir@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -443,15 +447,16 @@ top_srcdir = @top_srcdir@
#
###########################################################################
SUBDIRS = vms
-EXTRA_DIST = README \
- DOS/README \
- DOS/common.dj \
+EXTRA_DIST = README.md \
OS400/README.OS400 \
+ OS400/rpg-examples \
OS400/ccsidcurl.c \
OS400/ccsidcurl.h \
- OS400/chkstrings.c \
+ OS400/curlcl.c \
+ OS400/curlmain.c \
OS400/curl.inc.in \
OS400/initscript.sh \
+ OS400/config400.default \
OS400/make-include.sh \
OS400/make-lib.sh \
OS400/make-src.sh \
@@ -459,7 +464,7 @@ EXTRA_DIST = README \
OS400/makefile.sh \
OS400/os400sys.c \
OS400/os400sys.h \
- Android/Android.mk
+ OS400/curl.cmd
CHECKSRC = $(CS_$(V))
CS_0 = @echo " RUN " $@;
diff --git a/packages/OS400/README.OS400 b/packages/OS400/README.OS400
index e245aff99..38b2c7f06 100644
--- a/packages/OS400/README.OS400
+++ b/packages/OS400/README.OS400
@@ -1,8 +1,8 @@
Implementation notes:
- This is a true OS/400 implementation, not a PASE implementation (for PASE,
-use AIX implementation).
+ This is a true OS/400 ILE implementation, not a PASE implementation (for
+PASE, use AIX implementation).
The biggest problem with OS/400 is EBCDIC. Libcurl implements an internal
conversion mechanism, but it has been designed for computers that have a
@@ -39,22 +39,6 @@ header files are thus altered during build process to use this pragma, in
order to force libcurl enums of being type int (the pragma disposition in use
before inclusion is restored before resuming the including unit compilation).
- Secure socket layer is provided by the IBM GSKit API: unlike other SSL
-implementations, GSKit is based on "certificate stores" or keyrings
-rather than individual certificate/key files. Certificate stores, as well as
-"certificate labels" are managed by external IBM-defined applications.
- There are two ways to specify an SSL context:
-- By an application identifier.
-- By a keyring file pathname and (optionally) certificate label.
- To identify an SSL context by application identifier, use option
-SETOPT_SSLCERT to specify the application identifier.
- To address an SSL context by keyring and certificate label, use CURLOPT_CAINFO
-to set-up the keyring pathname, CURLOPT_SSLCERT to define the certificate label
-(omitting it will cause the default certificate in keyring to be used) and
-CURLOPT_KEYPASSWD to give the keyring password. If SSL is used without
-defining any of these options, the default (i.e.: system) keyring is used for
-server certificate validation.
-
Non-standard EBCDIC wrapper prototypes are defined in an additional header
file: ccsidcurl.h. These should be self-explanatory to an OS/400-aware
designer. CCSID 0 can be used to select the current job's CCSID.
@@ -64,6 +48,7 @@ _ curl_easy_setopt_ccsid()
Variable arguments are a string pointer and a CCSID (unsigned int) for
options:
CURLOPT_ABSTRACT_UNIX_SOCKET
+ CURLOPT_ACCEPT_ENCODING
CURLOPT_ALTSVC
CURLOPT_AWS_SIGV4
CURLOPT_CAINFO
@@ -72,17 +57,19 @@ options:
CURLOPT_COOKIEFILE
CURLOPT_COOKIEJAR
CURLOPT_COOKIELIST
- CURLOPT_COPYPOSTFIELDS
CURLOPT_CRLFILE
CURLOPT_CUSTOMREQUEST
CURLOPT_DEFAULT_PROTOCOL
+ CURLOPT_DNS_INTERFACE
+ CURLOPT_DNS_LOCAL_IP4
+ CURLOPT_DNS_LOCAL_IP6
CURLOPT_DNS_SERVERS
CURLOPT_DOH_URL
CURLOPT_EGDSOCKET
- CURLOPT_ENCODING
CURLOPT_FTPPORT
CURLOPT_FTP_ACCOUNT
CURLOPT_FTP_ALTERNATIVE_TO_USER
+ CURLOPT_HAPROXY_CLIENT_IP
CURLOPT_HSTS
CURLOPT_INTERFACE
CURLOPT_ISSUERCERT
@@ -96,6 +83,7 @@ options:
CURLOPT_PASSWORD
CURLOPT_PINNEDPUBLICKEY
CURLOPT_PRE_PROXY
+ CURLOPT_PROTOCOLS_STR
CURLOPT_PROXY
CURLOPT_PROXYPASSWORD
CURLOPT_PROXYUSERNAME
@@ -103,6 +91,7 @@ options:
CURLOPT_PROXY_CAINFO
CURLOPT_PROXY_CAPATH
CURLOPT_PROXY_CRLFILE
+ CURLOPT_PROXY_ISSUERCERT
CURLOPT_PROXY_KEYPASSWD
CURLOPT_PROXY_PINNEDPUBLICKEY
CURLOPT_PROXY_SERVICE_NAME
@@ -117,15 +106,17 @@ options:
CURLOPT_PROXY_TLSAUTH_USERNAME
CURLOPT_RANDOM_FILE
CURLOPT_RANGE
+ CURLOPT_REDIR_PROTOCOLS_STR
CURLOPT_REFERER
CURLOPT_REQUEST_TARGET
- CURLOPT_RTSP_SESSION_UID
+ CURLOPT_RTSP_SESSION_ID
CURLOPT_RTSP_STREAM_URI
CURLOPT_RTSP_TRANSPORT
CURLOPT_SASL_AUTHZID
CURLOPT_SERVICE_NAME
CURLOPT_SOCKS5_GSSAPI_SERVICE
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5
+ CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256
CURLOPT_SSH_KNOWNHOSTS
CURLOPT_SSH_PRIVATE_KEYFILE
CURLOPT_SSH_PUBLIC_KEYFILE
@@ -135,6 +126,7 @@ options:
CURLOPT_SSLKEY
CURLOPT_SSLKEYTYPE
CURLOPT_SSL_CIPHER_LIST
+ CURLOPT_SSL_EC_CURVES
CURLOPT_TLS13_CIPHERS
CURLOPT_TLSAUTH_PASSWORD
CURLOPT_TLSAUTH_TYPE
@@ -145,24 +137,26 @@ options:
CURLOPT_USERNAME
CURLOPT_USERPWD
CURLOPT_XOAUTH2_BEARER
- Else it is the same as for curl_easy_setopt().
+ All blob options are also supported.
+ In all other cases, it ignores the ccsid parameter and behaves as
+curl_easy_setopt().
Note that CURLOPT_ERRORBUFFER is not in the list above, since it gives the
address of an (empty) character buffer, not the address of a string.
-CURLOPT_POSTFIELDS stores the address of static binary data (of type void *) and
-thus is not converted. If CURLOPT_COPYPOSTFIELDS is issued after
+CURLOPT_POSTFIELDS stores the address of static binary data (of type void *)
+and thus is not converted. If CURLOPT_COPYPOSTFIELDS is issued after
CURLOPT_POSTFIELDSIZE != -1, the data size is adjusted according to the
CCSID conversion result length.
_ curl_formadd_ccsid()
In the variable argument list, string pointers should be followed by a (long)
CCSID for the following options:
- CURLFORM_FILENAME
- CURLFORM_CONTENTTYPE
CURLFORM_BUFFER
- CURLFORM_FILE
- CURLFORM_FILECONTENT
+ CURLFORM_CONTENTTYPE
CURLFORM_COPYCONTENTS
CURLFORM_COPYNAME
+ CURLFORM_FILE
+ CURLFORM_FILECONTENT
+ CURLFORM_FILENAME
CURLFORM_PTRNAME
If taken from an argument array, an additional array entry must follow each
entry containing one of the above option. This additional entry holds the CCSID
@@ -176,25 +170,32 @@ _ curl_easy_getinfo_ccsid()
The following options are followed by a 'char * *' and a CCSID. Unlike
curl_easy_getinfo(), the value returned in the pointer should be released with
curl_free() after use:
- CURLINFO_EFFECTIVE_URL
CURLINFO_CONTENT_TYPE
+ CURLINFO_EFFECTIVE_URL
CURLINFO_FTP_ENTRY_PATH
+ CURLINFO_LOCAL_IP
+ CURLINFO_PRIMARY_IP
CURLINFO_REDIRECT_URL
CURLINFO_REFERER
- CURLINFO_PRIMARY_IP
CURLINFO_RTSP_SESSION_ID
- CURLINFO_LOCAL_IP
CURLINFO_SCHEME
Likewise, the following options are followed by a struct curl_slist * * and a
CCSID.
- CURLINFO_SSL_ENGINES
CURLINFO_COOKIELIST
+ CURLINFO_SSL_ENGINES
Lists returned should be released with curl_slist_free_all() after use.
Option CURLINFO_CERTINFO is followed by a struct curl_certinfo * * and a
CCSID. Returned structures should be freed with curl_certinfo_free_all()
after use.
Other options are processed like in curl_easy_getinfo().
+_ curl_easy_strerror_ccsid(), curl_multi_strerror_ccsid(),
+curl_share_strerror_ccsid() and curl_url_strerror_ccsid() work as their
+non-ccsid version and return a string encoded in the additional ccsid
+parameter. These strings belong to libcurl and may not be freed by the caller.
+A subsequent call to the same procedure in the same thread invalidates the
+previous result.
+
_ curl_pushheader_bynum_cssid() and curl_pushheader_byname_ccsid()
Although the prototypes are self-explanatory, the returned string pointer
should be released with curl_free() after use, as opposite to the non-ccsid
@@ -208,6 +209,17 @@ ASCII, the curl_easy_option_get_name_ccsid() function allows getting it in any
supported ccsid. However the caller should release the returned pointer with
curl_free() after use.
+_ curl_easy_header_ccsid() works as its non-CCSID counterpart but requires an
+additional ccsid parameter specifying the name parameter encoding. The output
+hout parameter is kept in libcurl's encoding and should not be altered.
+
+_ curl_from_ccsid() and curl_to_ccsid() are string encoding conversion
+functions between ASCII (latin1) and the given CCSID. The first parameter is
+the source string, the second is the CCSID and the returned value is a pointer
+to the dynamically allocated string. These functions do not impact on Curl's
+behavior and are only provided for user convenience. After use, returned values
+must be released with curl_free().
+
Standard compilation environment does support neither autotools nor make;
in fact, very few common utilities are available. As a consequence, the
@@ -263,17 +275,20 @@ _ Install the curl source directory in IFS. Do NOT install it in the
_ Enter Qshell (QSH, not PASE)
_ Change current directory to the curl installation directory
_ Change current directory to ./packages/OS400
-_ Edit file iniscript.sh. You may want to change tunable configuration
- parameters, like debug info generation, optimization level, listing option,
- target library, ZLIB/LIBSSH2 availability and location, etc.
+- If you want to change the default configuration parameters like debug info
+ generation, optimization level, listing option, target library, ZLIB/LIBSSH2
+ availability and location, etc., copy file config400.default to
+ config400.override and edit the latter. Do not edit the original default file
+ as it might be overwritten by a subsequent source installation.
_ Copy any file in the current directory to makelog (i.e.:
cp initscript.sh makelog): this is intended to create the makelog file with
an ASCII CCSID!
_ Enter the command "sh makefile.sh > makelog 2>&1"
-_ Examine the makelog file to check for compilation errors.
+_ Examine the makelog file to check for compilation errors. CZM0383 warnings on
+ C or system standard API come from QADRT inlining and can safely be ignored.
- Leaving file initscript.sh unchanged, this will produce the following OS/400
-objects:
+ Without configuration parameters override, this will produce the following
+OS/400 objects:
_ Library CURL. All other objects will be stored in this library.
_ Modules for all libcurl units.
_ Binding directory CURL_A, to be used at calling program link time for
@@ -284,6 +299,8 @@ _ Service program CURL.<soname>, where <soname> is extracted from the
when this program has dynamically bound curl at link time.
_ Binding directory CURL. To be used to dynamically bind libcurl when linking a
calling program.
+- CLI tool bound program CURL.
+- CLI command CURL.
_ Source file H. It contains all the include members needed to compile a C/C++
module using libcurl, and an ILE/RPG /copy member for support in this
language.
@@ -292,11 +309,9 @@ _ CCSIDCURL member in file H. This defines the non-standard EBCDIC wrappers for
C and C++.
_ CURL.INC member in file H. This defines everything needed by an ILE/RPG
program using libcurl.
-_ LIBxxx modules and programs. Although the test environment is not supported
- on OS/400, the libcurl test programs are compiled for manual tests.
_ IFS directory /curl/include/curl containing the C header files for IFS source
C/C++ compilation and curl.inc.rpgle for IFS source ILE/RPG compilation.
-
+- IFS link /curl/bin/curl to CLI tool program.
Special programming consideration:
@@ -316,9 +331,9 @@ _ Do not use original source include files unless you know what you are doing.
ILE/RPG support:
- Since 95% of the OS/400 programmers use ILE/RPG exclusively, a definition
- /INCLUDE member is provided for this language. To include all libcurl
- definitions in an ILE/RPG module, line
+ Since most of the ILE OS/400 programmers use ILE/RPG exclusively, a
+definition /INCLUDE member is provided for this language. To include all
+libcurl definitions in an ILE/RPG module, line
h bnddir('CURL/CURL')
@@ -331,8 +346,9 @@ in the global data section of the module's source code.
No vararg procedure support exists in ILE/RPG: for this reason, the following
considerations apply:
_ Procedures curl_easy_setopt_long(), curl_easy_setopt_object(),
- curl_easy_setopt_function() and curl_easy_setopt_offset() are all alias
- prototypes to curl_easy_setopt(), but with different parameter lists.
+ curl_easy_setopt_function(), curl_easy_setopt_offset() and
+ curl_easy_setopt_blob() are all alias prototypes to curl_easy_setopt(), but
+ with different parameter lists.
_ Procedures curl_easy_getinfo_string(), curl_easy_getinfo_long(),
curl_easy_getinfo_double(), curl_easy_getinfo_slist(),
curl_easy_getinfo_ptr(), curl_easy_getinfo_socket() and
@@ -341,12 +357,35 @@ _ Procedures curl_easy_getinfo_string(), curl_easy_getinfo_long(),
_ Procedures curl_multi_setopt_long(), curl_multi_setopt_object(),
curl_multi_setopt_function() and curl_multi_setopt_offset() are all alias
prototypes to curl_multi_setopt(), but with different parameter lists.
+_ Procedures curl_share_setopt_int(), curl_share_setopt_ptr() and
+ curl_share_setopt_proc() are all alias prototypes to curl_share_setopt,
+ but with different parameter lists.
+_ Procedure curl_easy_setopt_blob_ccsid() is an alias of
+ curl_easy_setopt_ccsid() supporting blob encoding conversion.
_ The prototype of procedure curl_formadd() allows specifying a pointer option
and the CURLFORM_END option. This makes possible to use an option array
without any additional definition. If some specific incompatible argument
list is used in the ILE/RPG program, the latter must define a specialised
alias. The same applies to curl_formadd_ccsid() too.
+_ Since V7R4M0, procedure overloading is used to emulate limited "vararg-like"
+ definitions of curl_easy_setopt(), curl_multi_setopt(), curl_share_setopt()
+ and curl_easy_getinfo(). Blob and CCSID alternatives are NOT included in
+ overloading.
Since RPG cannot cast a long to a pointer, procedure curl_form_long_value()
-is provided for that purpose: this allows storing a long value in the curl_forms
-array.
+is provided for that purpose: this allows storing a long value in the
+curl_forms array. Please note the form API is deprecated and the MIME API
+should be used instead.
+
+
+CLI tool:
+
+ The build system provides it as a bound program, an IFS link to it and a
+simple CL command. The latter however is not able to provide a different
+parameter for each option since there are too many of those; instead,
+parameters are entered in a single field subject to quoting and escaping, in
+the same form as expected by the standard CLI program.
+ Care must be taken about the program output encoding: by default, it is sent
+to the standard output and is thus subject to transcoding. It is therefore
+recommended to use option "--output" to redirect output to a specific IFS file.
+Similar problems may occur about the standard input encoding.
diff --git a/packages/OS400/ccsidcurl.c b/packages/OS400/ccsidcurl.c
index da696ca2b..48f1f5fbd 100644
--- a/packages/OS400/ccsidcurl.c
+++ b/packages/OS400/ccsidcurl.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -235,28 +235,50 @@ slist_convert(int dccsid, struct curl_slist *from, int sccsid)
}
-char *curl_version_ccsid(unsigned int ccsid)
+static char *
+keyed_string(localkey_t key, const char *ascii, unsigned int ccsid)
{
int i;
- char *aversion;
- char *eversion;
+ char *ebcdic;
- aversion = curl_version();
+ if(!ascii)
+ return (char *) NULL;
- if(!aversion)
- return aversion;
+ i = MAX_CONV_EXPANSION * (strlen(ascii) + 1);
- i = strlen(aversion) + 1;
- i *= MAX_CONV_EXPANSION;
+ ebcdic = Curl_thread_buffer(key, i);
+ if(!ebcdic)
+ return ebcdic;
- eversion = Curl_thread_buffer(LK_CURL_VERSION, i);
- if(!eversion)
+ if(convert(ebcdic, i, ccsid, ascii, -1, ASCII_CCSID) < 0)
return (char *) NULL;
- if(convert(eversion, i, ccsid, aversion, -1, ASCII_CCSID) < 0)
- return (char *) NULL;
+ return ebcdic;
+}
- return eversion;
+
+const char *
+curl_to_ccsid(const char *s, unsigned int ccsid)
+{
+ if(s)
+ s = dynconvert(ccsid, s, -1, ASCII_CCSID);
+ return s;
+}
+
+
+const char *
+curl_from_ccsid(const char *s, unsigned int ccsid)
+{
+ if(s)
+ s = dynconvert(ASCII_CCSID, s, -1, ccsid);
+ return s;
+}
+
+
+char *
+curl_version_ccsid(unsigned int ccsid)
+{
+ return keyed_string(LK_CURL_VERSION, curl_version(), ccsid);
}
@@ -414,18 +436,19 @@ curl_version_info_ccsid(CURLversion stamp, unsigned int ccsid)
offsetof(curl_version_info_data, capath),
offsetof(curl_version_info_data, zstd_version),
offsetof(curl_version_info_data, hyper_version),
- offsetof(curl_version_info_data, gsasl_version)
+ offsetof(curl_version_info_data, gsasl_version),
+ offsetof(curl_version_info_data, feature_names)
};
/* The assertion below is possible, because although the second operand
is an enum member, the first is a #define. In that case, the OS/400 C
compiler seems to compare string values after substitution. */
-#if CURLVERSION_NOW != CURLVERSION_TENTH
+#if CURLVERSION_NOW != CURLVERSION_ELEVENTH
#error curl_version_info_data structure has changed: upgrade this procedure.
#endif
- /* If caller has been compiled with a new version, error. */
+ /* If caller has been compiled with a newer version, error. */
if(stamp > CURLVERSION_NOW)
return (curl_version_info_data *) NULL;
@@ -472,7 +495,7 @@ curl_version_info_ccsid(CURLversion stamp, unsigned int ccsid)
memcpy((char *) id, (char *) p, sizeof(*p));
if(id->protocols) {
- int i = nproto * sizeof(id->protocols[0]);
+ i = nproto * sizeof(id->protocols[0]);
id->protocols = (const char * const *) cp;
memcpy(cp, (char *) p->protocols, i);
@@ -487,7 +510,7 @@ curl_version_info_ccsid(CURLversion stamp, unsigned int ccsid)
for(i = 0; i < sizeof(charfields) / sizeof(charfields[0]); i++) {
cpp = (const char **) ((char *) p + charfields[i]);
- if (*cpp && convert_version_info_string(cpp, &cp, &n, ccsid))
+ if(*cpp && convert_version_info_string(cpp, &cp, &n, ccsid))
return (curl_version_info_data *) NULL;
}
@@ -498,75 +521,28 @@ curl_version_info_ccsid(CURLversion stamp, unsigned int ccsid)
const char *
curl_easy_strerror_ccsid(CURLcode error, unsigned int ccsid)
{
- int i;
- const char *s;
- char *buf;
-
- s = curl_easy_strerror(error);
-
- if(!s)
- return s;
-
- i = MAX_CONV_EXPANSION * (strlen(s) + 1);
-
- buf = Curl_thread_buffer(LK_EASY_STRERROR, i);
- if(!buf)
- return (const char *) NULL;
-
- if(convert(buf, i, ccsid, s, -1, ASCII_CCSID) < 0)
- return (const char *) NULL;
-
- return (const char *) buf;
+ return keyed_string(LK_EASY_STRERROR, curl_easy_strerror(error), ccsid);
}
const char *
curl_share_strerror_ccsid(CURLSHcode error, unsigned int ccsid)
{
- int i;
- const char *s;
- char *buf;
-
- s = curl_share_strerror(error);
-
- if(!s)
- return s;
-
- i = MAX_CONV_EXPANSION * (strlen(s) + 1);
-
- buf = Curl_thread_buffer(LK_SHARE_STRERROR, i);
- if(!buf)
- return (const char *) NULL;
-
- if(convert(buf, i, ccsid, s, -1, ASCII_CCSID) < 0)
- return (const char *) NULL;
-
- return (const char *) buf;
+ return keyed_string(LK_SHARE_STRERROR, curl_share_strerror(error), ccsid);
}
const char *
curl_multi_strerror_ccsid(CURLMcode error, unsigned int ccsid)
{
- int i;
- const char *s;
- char *buf;
-
- s = curl_multi_strerror(error);
-
- if(!s)
- return s;
-
- i = MAX_CONV_EXPANSION * (strlen(s) + 1);
-
- buf = Curl_thread_buffer(LK_MULTI_STRERROR, i);
- if(!buf)
- return (const char *) NULL;
+ return keyed_string(LK_MULTI_STRERROR, curl_multi_strerror(error), ccsid);
+}
- if(convert(buf, i, ccsid, s, -1, ASCII_CCSID) < 0)
- return (const char *) NULL;
- return (const char *) buf;
+const char *
+curl_url_strerror_ccsid(CURLUcode error, unsigned int ccsid)
+{
+ return keyed_string(LK_URL_STRERROR, curl_url_strerror(error), ccsid);
}
@@ -1087,22 +1063,24 @@ curl_formget_ccsid(struct curl_httppost *form, void *arg,
CURLcode
-curl_easy_setopt_ccsid(CURL *curl, CURLoption tag, ...)
+curl_easy_setopt_ccsid(CURL *easy, CURLoption tag, ...)
{
CURLcode result;
va_list arg;
- struct Curl_easy *data;
char *s;
- char *cp;
+ char *cp = NULL;
unsigned int ccsid;
curl_off_t pfsize;
- data = (struct Curl_easy *) curl;
va_start(arg, tag);
switch(tag) {
+ /* BEGIN TRANSLATABLE STRING OPTIONS */
+ /* Keep option symbols in alphanumeric order and retain the BEGIN/END
+ armor comments. */
case CURLOPT_ABSTRACT_UNIX_SOCKET:
+ case CURLOPT_ACCEPT_ENCODING:
case CURLOPT_ALTSVC:
case CURLOPT_AWS_SIGV4:
case CURLOPT_CAINFO:
@@ -1114,16 +1092,16 @@ curl_easy_setopt_ccsid(CURL *curl, CURLoption tag, ...)
case CURLOPT_CRLFILE:
case CURLOPT_CUSTOMREQUEST:
case CURLOPT_DEFAULT_PROTOCOL:
- case CURLOPT_DNS_SERVERS:
case CURLOPT_DNS_INTERFACE:
case CURLOPT_DNS_LOCAL_IP4:
case CURLOPT_DNS_LOCAL_IP6:
+ case CURLOPT_DNS_SERVERS:
case CURLOPT_DOH_URL:
case CURLOPT_EGDSOCKET:
- case CURLOPT_ENCODING:
case CURLOPT_FTPPORT:
case CURLOPT_FTP_ACCOUNT:
case CURLOPT_FTP_ALTERNATIVE_TO_USER:
+ case CURLOPT_HAPROXY_CLIENT_IP:
case CURLOPT_HSTS:
case CURLOPT_INTERFACE:
case CURLOPT_ISSUERCERT:
@@ -1137,6 +1115,7 @@ curl_easy_setopt_ccsid(CURL *curl, CURLoption tag, ...)
case CURLOPT_PASSWORD:
case CURLOPT_PINNEDPUBLICKEY:
case CURLOPT_PRE_PROXY:
+ case CURLOPT_PROTOCOLS_STR:
case CURLOPT_PROXY:
case CURLOPT_PROXYPASSWORD:
case CURLOPT_PROXYUSERNAME:
@@ -1144,6 +1123,7 @@ curl_easy_setopt_ccsid(CURL *curl, CURLoption tag, ...)
case CURLOPT_PROXY_CAINFO:
case CURLOPT_PROXY_CAPATH:
case CURLOPT_PROXY_CRLFILE:
+ case CURLOPT_PROXY_ISSUERCERT:
case CURLOPT_PROXY_KEYPASSWD:
case CURLOPT_PROXY_PINNEDPUBLICKEY:
case CURLOPT_PROXY_SERVICE_NAME:
@@ -1158,6 +1138,7 @@ curl_easy_setopt_ccsid(CURL *curl, CURLoption tag, ...)
case CURLOPT_PROXY_TLSAUTH_USERNAME:
case CURLOPT_RANDOM_FILE:
case CURLOPT_RANGE:
+ case CURLOPT_REDIR_PROTOCOLS_STR:
case CURLOPT_REFERER:
case CURLOPT_REQUEST_TARGET:
case CURLOPT_RTSP_SESSION_ID:
@@ -1167,6 +1148,7 @@ curl_easy_setopt_ccsid(CURL *curl, CURLoption tag, ...)
case CURLOPT_SERVICE_NAME:
case CURLOPT_SOCKS5_GSSAPI_SERVICE:
case CURLOPT_SSH_HOST_PUBLIC_KEY_MD5:
+ case CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256:
case CURLOPT_SSH_KNOWNHOSTS:
case CURLOPT_SSH_PRIVATE_KEYFILE:
case CURLOPT_SSH_PUBLIC_KEYFILE:
@@ -1187,6 +1169,7 @@ curl_easy_setopt_ccsid(CURL *curl, CURLoption tag, ...)
case CURLOPT_USERNAME:
case CURLOPT_USERPWD:
case CURLOPT_XOAUTH2_BEARER:
+ /* END TRANSLATABLE STRING OPTIONS */
s = va_arg(arg, char *);
ccsid = va_arg(arg, unsigned int);
@@ -1199,7 +1182,7 @@ curl_easy_setopt_ccsid(CURL *curl, CURLoption tag, ...)
}
}
- result = curl_easy_setopt(curl, tag, s);
+ result = curl_easy_setopt(easy, tag, s);
free(s);
break;
@@ -1210,10 +1193,10 @@ curl_easy_setopt_ccsid(CURL *curl, CURLoption tag, ...)
s = va_arg(arg, char *);
ccsid = va_arg(arg, unsigned int);
- pfsize = data->set.postfieldsize;
+ pfsize = easy->set.postfieldsize;
if(!s || !pfsize || ccsid == NOCONV_CCSID || ccsid == ASCII_CCSID) {
- result = curl_easy_setopt(curl, CURLOPT_COPYPOSTFIELDS, s);
+ result = curl_easy_setopt(easy, CURLOPT_COPYPOSTFIELDS, s);
break;
}
@@ -1251,30 +1234,68 @@ curl_easy_setopt_ccsid(CURL *curl, CURLoption tag, ...)
pfsize = convert(cp, pfsize, ASCII_CCSID, s, len, ccsid);
if(pfsize < 0) {
- free(cp);
result = CURLE_OUT_OF_MEMORY;
break;
}
- data->set.postfieldsize = pfsize; /* Replace data size. */
+ easy->set.postfieldsize = pfsize; /* Replace data size. */
s = cp;
}
- result = curl_easy_setopt(curl, CURLOPT_POSTFIELDS, s);
- data->set.str[STRING_COPYPOSTFIELDS] = s; /* Give to library. */
+ result = curl_easy_setopt(easy, CURLOPT_POSTFIELDS, s);
+ easy->set.str[STRING_COPYPOSTFIELDS] = s; /* Give to library. */
break;
- case CURLOPT_ERRORBUFFER: /* This is an output buffer. */
default:
- result = Curl_vsetopt(curl, tag, arg);
+ if(tag / 10000 == CURLOPTTYPE_BLOB) {
+ struct curl_blob *bp = va_arg(arg, struct curl_blob *);
+ struct curl_blob blob;
+
+ ccsid = va_arg(arg, unsigned int);
+
+ if(bp && bp->data && bp->len &&
+ ccsid != NOCONV_CCSID && ccsid != ASCII_CCSID) {
+ pfsize = (curl_off_t) bp->len * MAX_CONV_EXPANSION;
+
+ if(pfsize > SIZE_MAX)
+ pfsize = SIZE_MAX;
+
+ cp = malloc(pfsize);
+
+ if(!cp) {
+ result = CURLE_OUT_OF_MEMORY;
+ break;
+ }
+
+ pfsize = convert(cp, pfsize, ASCII_CCSID, bp->data, bp->len, ccsid);
+
+ if(pfsize < 0) {
+ result = CURLE_OUT_OF_MEMORY;
+ break;
+ }
+
+ blob.data = cp;
+ blob.len = pfsize;
+ blob.flags = bp->flags | CURL_BLOB_COPY;
+ bp = &blob;
+ }
+ result = curl_easy_setopt(easy, tag, &blob);
+ break;
+ }
+ /* FALLTHROUGH */
+ case CURLOPT_ERRORBUFFER: /* This is an output buffer. */
+ result = Curl_vsetopt(easy, tag, arg);
break;
}
va_end(arg);
+ free(cp);
return result;
}
+/* ILE/RPG helper functions. */
+
char *
curl_form_long_value(long value)
{
@@ -1284,6 +1305,29 @@ curl_form_long_value(long value)
}
+CURLcode
+curl_easy_setopt_RPGnum_(CURL *easy, CURLoption tag, curl_off_t arg)
+{
+ /* ILE/RPG procedure overloading cannot discriminate between different
+ size and/or signedness of format arguments. This provides a generic
+ wrapper that adapts size to the given tag expectation.
+ This procedure is not intended to be explicitly called from user code. */
+ if(tag / 10000 != CURLOPTTYPE_OFF_T)
+ return curl_easy_setopt(easy, tag, (long) arg);
+ return curl_easy_setopt(easy, tag, arg);
+}
+
+
+CURLcode
+curl_multi_setopt_RPGnum_(CURLM *multi, CURLMoption tag, curl_off_t arg)
+{
+ /* Likewise, for multi handle. */
+ if(tag / 10000 != CURLOPTTYPE_OFF_T)
+ return curl_multi_setopt(multi, tag, (long) arg);
+ return curl_multi_setopt(multi, tag, arg);
+}
+
+
char *
curl_pushheader_bynum_cssid(struct curl_pushheaders *h,
size_t num, unsigned int ccsid)
@@ -1460,3 +1504,24 @@ curl_easy_option_get_name_ccsid(const struct curl_easyoption *option,
return (const char *) name;
}
+
+/* Header API CCSID support. */
+CURLHcode
+curl_easy_header_ccsid(CURL *easy, const char *name, size_t index,
+ unsigned int origin, int request,
+ struct curl_header **hout, unsigned int ccsid)
+{
+ CURLHcode result = CURLHE_BAD_ARGUMENT;
+
+ if(name) {
+ char *s = dynconvert(ASCII_CCSID, name, -1, ccsid);
+
+ result = CURLHE_OUT_OF_MEMORY;
+ if(s) {
+ result = curl_easy_header(easy, s, index, origin, request, hout);
+ free(s);
+ }
+ }
+
+ return result;
+}
diff --git a/packages/OS400/ccsidcurl.h b/packages/OS400/ccsidcurl.h
index 9bd2ae7dd..ab01d32b8 100644
--- a/packages/OS400/ccsidcurl.h
+++ b/packages/OS400/ccsidcurl.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -96,5 +96,18 @@ CURL_EXTERN const struct curl_easyoption *curl_easy_option_by_name_ccsid(
CURL_EXTERN const char *curl_easy_option_get_name_ccsid(
const struct curl_easyoption *option,
unsigned int ccsid);
+CURL_EXTERN const char *curl_url_strerror_ccsid(CURLUcode error,
+ unsigned int ccsid);
+CURL_EXTERN CURLHcode curl_easy_header_ccsid(CURL *easy, const char *name,
+ size_t index, unsigned int origin,
+ int request,
+ struct curl_header **hout,
+ unsigned int ccsid);
+CURL_EXTERN const char *curl_from_ccsid(const char *s, unsigned int ccsid);
+CURL_EXTERN const char *curl_to_ccsid(const char *s, unsigned int ccsid);
+CURL_EXTERN CURLcode curl_easy_setopt_RPGnum_(CURL *easy,
+ CURLoption tag, curl_off_t arg);
+CURL_EXTERN CURLcode curl_multi_setopt_RPGnum_(CURLM *multi, CURLMoption tag,
+ curl_off_t arg);
#endif
diff --git a/packages/OS400/chkstrings.c b/packages/OS400/chkstrings.c
deleted file mode 100644
index 6f8d38b77..000000000
--- a/packages/OS400/chkstrings.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed 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 <stdlib.h>
-#pragma enum(int)
-#include "curl_setup.h"
-#include "urldata.h"
-
-/* The following defines indicate the expected dupstring enum values in
- * curl_easy_setopt_ccsid() in packages/OS400/ccsidcurl.c. If a mismatch is
- * flagged during the build, it indicates that curl_easy_setopt_ccsid() may
- * need updating to perform data EBCDIC to ASCII data conversion on the
- * string.
- *
- * Once any applicable changes to curl_easy_setopt_ccsid() have been
- * made, the EXPECTED_STRING_LASTZEROTERMINATED/EXPECTED_STRING_LAST
- * values can be updated to match the latest enum values in urldata.h.
- */
-#define EXPECTED_STRING_LASTZEROTERMINATED (STRING_SSL_EC_CURVES + 1)
-#define EXPECTED_STRING_LAST (STRING_AWS_SIGV4 + 1)
-
-int main(int argc, char *argv[])
-{
- int rc = 0;
-
- if(STRING_LASTZEROTERMINATED != EXPECTED_STRING_LASTZEROTERMINATED) {
- fprintf(stderr,
- "STRING_LASTZEROTERMINATED(%d) is not expected value(%d).\n",
- STRING_LASTZEROTERMINATED, EXPECTED_STRING_LASTZEROTERMINATED);
- rc += 1;
- }
- if(STRING_LAST != EXPECTED_STRING_LAST) {
- fprintf(stderr, "STRING_LAST(%d) is not expected value(%d).\n",
- STRING_LAST, EXPECTED_STRING_LAST);
- rc += 2;
- }
- if(rc) {
- fprintf(stderr, "curl_easy_setopt_ccsid() in packages/OS400/ccsidcurl.c"
- " may need updating if new strings are provided as"
- " input via the curl API.\n");
- }
- return rc;
-}
diff --git a/packages/OS400/config400.default b/packages/OS400/config400.default
new file mode 100644
index 000000000..91a82771f
--- /dev/null
+++ b/packages/OS400/config400.default
@@ -0,0 +1,55 @@
+#!/bin/sh
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed 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
+#
+###########################################################################
+
+# Tunable configuration parameters.
+
+setenv TARGETLIB 'CURL' # Target OS/400 program library.
+setenv STATBNDDIR 'CURL_A' # Static binding directory.
+setenv DYNBNDDIR 'CURL' # Dynamic binding directory.
+setenv SRVPGM "CURL.${SONAME}" # Service program.
+setenv CURLPGM 'CURL' # CLI tool bound program.
+setenv CURLCMD 'CURL' # CL command name.
+setenv CURLCLI 'CURLCL' # CL interface program.
+setenv TGTCCSID '500' # Target CCSID of objects.
+setenv DEBUG '*ALL' # Debug level.
+setenv OPTIMIZE '10' # Optimization level
+setenv OUTPUT '*NONE' # Compilation output option.
+setenv TGTRLS '*CURRENT' # Target OS release.
+setenv IFSDIR '/curl' # Installation IFS directory.
+setenv QADRTDIR '/QIBM/ProdData/qadrt' # QADRT IFS directory.
+
+# Define ZLIB availability and locations.
+
+setenv WITH_ZLIB 0 # Define to 1 to enable.
+setenv ZLIB_INCLUDE '/zlib/include' # ZLIB include IFS directory.
+setenv ZLIB_LIB 'ZLIB' # ZLIB library.
+setenv ZLIB_BNDDIR 'ZLIB_A' # ZLIB binding directory.
+
+# Define LIBSSH2 availability and locations.
+
+setenv WITH_LIBSSH2 0 # Define to 1 to enable.
+setenv LIBSSH2_INCLUDE '/libssh2/include' # LIBSSH2 include IFS directory.
+setenv LIBSSH2_LIB 'LIBSSH2' # LIBSSH2 library.
+setenv LIBSSH2_BNDDIR 'LIBSSH2_A' # LIBSSH2 binding directory.
diff --git a/packages/OS400/curl.cmd b/packages/OS400/curl.cmd
new file mode 100644
index 000000000..ae7a7880b
--- /dev/null
+++ b/packages/OS400/curl.cmd
@@ -0,0 +1,32 @@
+/*****************************************************************************/
+/* _ _ ____ _ */
+/* Project ___| | | | _ \| | */
+/* / __| | | | |_) | | */
+/* | (__| |_| | _ <| |___ */
+/* \___|\___/|_| \_\_____| */
+/* */
+/* Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al. */
+/* */
+/* This software is licensed 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 */
+/* */
+/* */
+/*****************************************************************************/
+
+/* Use program CURLCL as interface to the curl command line tool */
+
+ CMD PROMPT('File transfer utility')
+
+ PARM KWD(CMDARGS) TYPE(*CHAR) LEN(5000) VARY(*YES *INT2) +
+ CASE(*MIXED) EXPR(*YES) MIN(1) +
+ PROMPT('Curl command arguments')
diff --git a/packages/OS400/curl.inc.in b/packages/OS400/curl.inc.in
index 6508b964d..d1254ce49 100644
--- a/packages/OS400/curl.inc.in
+++ b/packages/OS400/curl.inc.in
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -184,12 +184,19 @@
*
d CURL_WRITEFUNC_PAUSE...
d c X'10000001'
+ d CURL_WRITEFUNC_ERROR...
+ d c X'FFFFFFFF'
*
d CURL_TRAILERFUNC_OK...
d c 0
d CURL_TRAILERFUNC_ABORT...
d c 1
*
+ d CURL_PREREQFUNC_OK...
+ d c 0
+ d CURL_PREREQFUNC_ABORT...
+ d c 1
+ *
d CURLAUTH_NONE c X'00000000'
d CURLAUTH_BASIC c X'00000001'
d CURLAUTH_DIGEST...
@@ -278,6 +285,10 @@
d c 4
d CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE...
d c 5
+ d CURL_HTTP_VERSION_3...
+ d c 30
+ d CURL_HTTP_VERSION_3ONLY...
+ d c 31
*
d CURL_NETRC_IGNORED...
d c 0
@@ -330,7 +341,7 @@
d c 7
*
d CURL_ZERO_TERMINATED...
- d c -1
+ d c X'FFFFFFFF'
*
d CURL_POLL_NONE c 0
d CURL_POLL_IN c 1
@@ -340,6 +351,10 @@
d CURL_POLL_REMOVE...
d c 4
*
+ d CURL_BLOB_NOCOPY...
+ d c 0
+ d CURL_BLOB_COPY c 1
+ *
d CURL_CSELECT_IN...
d c X'00000001'
d CURL_CSELECT_OUT...
@@ -424,10 +439,31 @@
d c X'00000200'
d CURLU_NO_AUTHORITY...
d c X'00000400'
+ d CURLU_ALLOW_SPACE...
+ d c X'00000800'
+ d CURLU_PUNYCODE...
+ d c X'00001000'
*
d CURLOT_FLAG_ALIAS...
d c X'00000001'
*
+ d CURLH_HEADER c X'00000001'
+ d CURLH_TRAILER c X'00000002'
+ d CURLH_CONNECT c X'00000004'
+ d CURLH_1XX c X'00000008'
+ d CURLH_PSEUDO c X'00000010'
+ *
+ d CURLWS_TEXT c X'00000001'
+ d CURLWS_BINARY c X'00000002'
+ d CURLWS_CONT c X'00000004'
+ d CURLWS_CLOSE c X'00000008'
+ d CURLWS_PING c X'00000010'
+ d CURLWS_OFFSET c X'00000020'
+ d CURLWS_PONG c X'00000040'
+ *
+ d CURLWS_RAW_MODE...
+ d c X'00000001'
+ *
**************************************************************************
* Types
**************************************************************************
@@ -533,7 +569,7 @@
d c 47
d CURLE_UNKNOWN_OPTION...
d c 48
- d CURLE_TELNET_OPTION_SYNTAX...
+ d CURLE_SETOPT_OPTION_SYNTAX...
d c 49
d CURLE_OBSOLETE50...
d c 50
@@ -559,7 +595,7 @@
d c 60
d CURLE_BAD_CONTENT_ENCODING...
d c 61
- d CURLE_LDAP_INVALID_URL...
+ d CURLE_OBSOLETE62...
d c 62
d CURLE_FILESIZE_EXCEEDED...
d c 63
@@ -585,20 +621,18 @@
d c 73
d CURLE_TFTP_NOSUCHUSER...
d c 74
- d CURLE_CONV_FAILED...
+ d CURLE_OBSOLETE75...
d c 75
- d CURLE_CONV_REQD...
+ d CURLE_OBSOLETE76...
d c 76
d CURLE_SSL_CACERT_BADFILE...
d c 77
d CURLE_REMOTE_FILE_NOT_FOUND...
d c 78
- d CURLE_SSH...
- d c 79
+ d CURLE_SSH c 79
d CURLE_SSL_SHUTDOWN_FAILED...
d c 80
- d CURLE_AGAIN...
- d c 81
+ d CURLE_AGAIN c 81
d CURLE_SSL_CRL_BADFILE...
d c 82
d CURLE_SSL_ISSUER_ERROR...
@@ -625,12 +659,14 @@
d c 93
d CURLE_AUTH_ERROR...
d c 94
- d CURLE_HTTP3...
- d c 95
+ d CURLE_HTTP3 c 95
d CURLE_QUIC_CONNECT_ERROR...
d c 96
- d CURLE_PROXY...
- d c 97
+ d CURLE_PROXY c 97
+ d CURLE_SSL_CLIENTCERT...
+ d c 98
+ d CURLE_UNRECOVERABLE_POLL...
+ d c 99
*
/if not defined(CURL_NO_OLDIES)
d CURLE_URL_MALFORMAT_USER...
@@ -679,6 +715,8 @@
d c 46
d CURLE_UNKNOWN_TELNET_OPTION...
d c 48
+ d CURLE_TELNET_OPTION_SYNTAX...
+ d c 49
d CURLE_OBSOLETE...
d c 50
d CURLE_SHARE_IN_USE...
@@ -687,12 +725,18 @@
d c 60
d CURLE_SSL_PEER_CERTIFICATE...
d c 60
+ d CURLE_LDAP_INVALID_URL...
+ d c 62
d CURLE_FTP_SSL_FAILED...
d c 64
d CURLE_TFTP_DISKFULL...
d c 70
d CURLE_TFTP_EXISTS...
d c 73
+ d CURLE_CONV_FAILED...
+ d c 75
+ d CURLE_CONV_REQD...
+ d c 76
d CURLE_ALREADY_COMPLETE...
d c 99999
/endif
@@ -821,6 +865,8 @@
d c 1
d CURLPROXY_HTTPS...
d c 2
+ d CURLPROXY_HTTPS2...
+ d c 3
d CURLPROXY_SOCKS4...
d c 4
d CURLPROXY_SOCKS5...
@@ -1208,8 +1254,6 @@
d c 00111
d CURLOPT_SERVER_RESPONSE_TIMEOUT...
d c 00112
- d CURLOPT_SERVER_RESPONSE_TIMEOUT... Alias
- d c 00112
d CURLOPT_IPRESOLVE...
d c 00113
d CURLOPT_MAXFILESIZE...
@@ -1545,7 +1589,7 @@
d c 00288
d CURLOPT_SASL_AUTHZID...
d c 10289
- d CURLOPT_MAIL_RCPT_ALLLOWFAILS...
+ d CURLOPT_MAIL_RCPT_ALLOWFAILS...
d c 00290
d CURLOPT_SSLCERT_BLOB...
d c 40291
@@ -1587,10 +1631,30 @@
d c 40309
d CURLOPT_PROXY_CAINFO_BLOB...
d c 40310
+ d CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256...
+ d c 10311
+ d CURLOPT_PREREQFUNCTION...
+ d c 20312
+ d CURLOPT_PREREQDATA...
+ d c 10313
d CURLOPT_MAXLIFETIME_CONN...
d c 00314
d CURLOPT_MIME_OPTIONS...
d c 00315
+ d CURLOPT_SSH_HOSTKEYFUNCTION...
+ d c 20316
+ d CURLOPT_SSH_HOSTKEYDATA...
+ d c 10317
+ d CURLOPT_PROTOCOLS_STR...
+ d c 10318
+ d CURLOPT_REDIR_PROTOCOLS_STR...
+ d c 10319
+ d CURLOPT_WS_OPTIONS...
+ d c 00320
+ d CURLOPT_CA_CACHE_TIMEOUT...
+ d c 00321
+ d CURLOPT_QUICK_EXIT...
+ d c 00322
*
/if not defined(CURL_NO_OLDIES)
d CURLOPT_FILE c 10001
@@ -1618,6 +1682,8 @@
d c 00119
d CURLOPT_POST301...
d c 00161
+ d CURLOPT_FTP_RESPONSE_TIMEOUT...
+ d c 00112
/endif
*
d CURLFORMcode s 10i 0 based(######ptr######) Enum
@@ -1820,6 +1886,10 @@
d c X'0020003B'
d CURLINFO_REFERER... CURLINFO_STRING + 60
d c X'0010003C'
+ d CURLINFO_CAINFO... CURLINFO_STRING + 61
+ d c X'0010003D'
+ d CURLINFO_CAPATH... CURLINFO_STRING + 62
+ d c X'0010003E'
*
d CURLINFO_HTTP_CODE... Old ...RESPONSE_CODE
d c X'00200002'
@@ -1857,10 +1927,12 @@
d CURLSSLBACKEND_RUSTLS...
d c 14
* Aliases for clones.
- d CURLSSLBACKEND_LIBRESSL...
+ d CURLSSLBACKEND_AWSLC...
d c 1
d CURLSSLBACKEND_BORINGSSL...
d c 1
+ d CURLSSLBACKEND_LIBRESSL...
+ d c 1
d CURLSSLBACKEND_WOLFSSL...
d c 6
*
@@ -1893,8 +1965,10 @@
d c 5
d CURL_LOCK_DATA_PSL...
d c 6
- d CURL_LOCK_DATA_LAST...
+ d CURL_LOCK_DATA_HSTS...
d c 7
+ d CURL_LOCK_DATA_LAST...
+ d c 8
*
d curl_lock_access...
d s 10i 0 based(######ptr######) Enum
@@ -1977,8 +2051,27 @@
d c 8
d CURLVERSION_TENTH...
d c 9
+ d CURLVERSION_ELEVENTH...
+ d c 10
d CURLVERSION_NOW...
- d c 9 CURLVERSION_TENTH
+ d c 10 CURLVERSION_ELEVENTH
+ *
+ d CURLHcode s 10i 0 based(######ptr######) Enum
+ d CURLHE_OK c 0
+ d CURLHE_BADINDEX...
+ d c 1
+ d CURLHE_MISSING...
+ d c 2
+ d CURLHE_NOHEADERS...
+ d c 3
+ d CURLHE_NOREQUEST...
+ d c 4
+ d CURLHE_OUT_OF_MEMORY...
+ d c 5
+ d CURLHE_BAD_ARGUMENT...
+ d c 6
+ d CURLHE_NOT_BUILT_IN...
+ d c 7
*
d curlsocktype s 10i 0 based(######ptr######) Enum
d CURLSOCKTYPE_IPCXN...
@@ -2132,6 +2225,32 @@
d c 16
d CURLUE_NO_FRAGMENT...
d c 17
+ d CURLUE_NO_ZONEID...
+ d c 18
+ d CURLUE_BAD_FILE_URL...
+ d c 19
+ d CURLUE_BAD_FRAGMENT...
+ d c 20
+ d CURLUE_BAD_HOSTNAME...
+ d c 21
+ d CURLUE_BAD_IPV6...
+ d c 22
+ d CURLUE_BAD_LOGIN...
+ d c 23
+ d CURLUE_BAD_PASSWORD...
+ d c 24
+ d CURLUE_BAD_PATH...
+ d c 25
+ d CURLUE_BAD_QUERY...
+ d c 26
+ d CURLUE_BAD_SCHEME...
+ d c 27
+ d CURLUE_BAD_SLASHES...
+ d c 28
+ d CURLUE_BAD_USER...
+ d c 29
+ d CURLUE_LACKS_IDN...
+ d c 30
*
d CURLUPart s 10i 0 based(######ptr######) Enum
d CURLUPART_URL c 0
@@ -2162,7 +2281,7 @@
d CURLSTS_DONE c 1
d CURLSTS_FAIL c 2
*
- * Renaming CURLMsg to CURL_Msg to avoid case-insensivity name clash.
+ * Renaming CURLMsg to CURL_Msg to avoid case-insensitivity name clash.
*
d CURL_Msg ds based(######ptr######)
d qualified
@@ -2279,6 +2398,8 @@
d * const char *
d gsasl_version...
d * const char *
+ d feature_names...
+ d * const char *
*
d curl_certinfo ds based(######ptr######)
d qualified
@@ -2337,6 +2458,29 @@
d index 10u 0 size_t
d total 10u 0 size_t
*
+ d curl_header ds based(######ptr######)
+ d qualified
+ d name * char *
+ d value * char *
+ d amount 10u 0 size_t
+ d index 10u 0 size_t
+ d origin 10u 0
+ d anchor * void *
+ *
+ d curl_blob ds based(######ptr######)
+ d qualified
+ d data * void *
+ d len 10u 0 size_t
+ d flags 10u 0
+ *
+ d curl_ws_frame ds based(######ptr######)
+ d qualified
+ d age 10i 0
+ d flags 10i 0
+ d offset like(curl_off_t)
+ d bytesleft like(curl_off_t)
+ d len 10u 0 size_t
+ *
d curl_formget_callback...
d s * based(######ptr######) procptr
*
@@ -2430,6 +2574,15 @@
d curl_hstswrite_callback...
d s * based(######ptr######) procptr
*
+ d curl_prereq_callback...
+ d s * based(######ptr######) procptr
+ *
+ d curl_sshhostkeycallback...
+ d s * based(######ptr######) procptr
+ *
+ d curl_ws_write_callback...
+ d s * based(######ptr######) procptr
+ *
**************************************************************************
* Prototypes
**************************************************************************
@@ -2470,7 +2623,7 @@
d like(CURLcode)
d part * value curl_mimepart *
d data * value options(*string)
- d datasize 10u 0 size_t
+ d datasize 10u 0 value size_t
*
d curl_mime_filedata...
d pr extproc('curl_mime_filedata')
@@ -2671,6 +2824,14 @@
d offsetarg value like(curl_off_t)
d options(*nopass)
*
+ d curl_easy_setopt_blob...
+ d pr extproc('curl_easy_setopt')
+ d like(CURLcode)
+ d curl * value CURL *
+ d option value like(CURLoption)
+ d blob const likeds(curl_blob)
+ d options(*nopass)
+ *
*
d curl_easy_perform...
d pr extproc('curl_easy_perform')
@@ -2940,6 +3101,43 @@
d pr * extproc('curl_easy_next') curl_easyoption *
d prev * value curl_easyoption *
*
+ d curl_ws_recv pr extproc('curl_ws_recv')
+ d like(CURLcode)
+ d curl * value CURL *
+ d buffer * value void *
+ d buflen 10u 0 value size_t
+ d recv 10u 0 size_t *
+ d metap likeds(curl_ws_frame)
+ *
+ d curl_ws_send pr extproc('curl_ws_send')
+ d like(CURLcode)
+ d curl * value CURL *
+ d buffer * value const void *
+ d buflen 10u 0 value size_t
+ d sent 10u 0 size_t *
+ d framesize like(curl_off_t)
+ d sendflags 10u 0 value
+ *
+ d curl_ws_meta pr * extproc('curl_ws_meta') curl_ws_frame *
+ d curl * value CURL *
+ *
+ d curl_easy_header...
+ d pr extproc('curl_easy_header') curl_header *
+ d like(CURLHcode)
+ d curl * value CURL *
+ d name * value options(*string) const char *
+ d index 10u 0 value size_t
+ d origin 10u 0 value
+ d request 10i 0 value
+ d hout * curl_header **
+ *
+ d curl_easy_nextheader...
+ d pr * extproc('curl_easy_nextheader') curl_header *
+ d curl * value CURL *
+ d origin 10u 0 value
+ d request 10i 0 value
+ d prev * value curl_header *
+ *
**************************************************************************
* CCSID wrapper procedure prototypes
**************************************************************************
@@ -3038,6 +3236,15 @@
d objectarg * value options(*string: *nopass)
d ccsid 10u 0 value options(*nopass)
*
+ d curl_easy_setopt_blob_ccsid...
+ d pr extproc('curl_easy_setopt_ccsid')
+ d like(CURLcode)
+ d curl * value CURL *
+ d option value like(CURLoption)
+ d blob const likeds(curl_blob)
+ d options(*nopass)
+ d ccsid 10u 0 value options(*nopass)
+ *
d curl_pushheader_bynum_ccsid...
d pr * extproc( char *
d 'curl_pushheader_bynum_ccsid')
@@ -3086,7 +3293,7 @@
d like(CURLcode)
d part * value curl_mimepart *
d data * value options(*string)
- d datasize 10u 0 size_t
+ d datasize 10u 0 value size_t
d ccsid 10u 0 value
*
d curl_mime_filedata_ccsid...
@@ -3114,6 +3321,11 @@
d flags 10u 0 value
d ccsid 10u 0 value
*
+ d curl_url_strerror_ccsid...
+ d pr * extproc('curl_url_strerror_ccsid') const char *
+ d code value like(CURLUcode)
+ d ccsid 10u 0 value
+ *
d curl_easy_option_by_name_ccsid...
d pr * extproc( curl_easyoption *
d 'curl_easy_option_by_name_ccsid')
@@ -3126,4 +3338,70 @@
d option * value curl_easyoption *
d ccsid 10u 0 value
*
+ d curl_easy_header_ccsid...
+ d pr extproc('curl_easy_header_ccsid') curl_header *
+ d like(CURLHcode)
+ d curl * value CURL *
+ d name * value options(*string) const char *
+ d index 10u 0 value size_t
+ d origin 10u 0 value
+ d request 10i 0 value
+ d hout * curl_header **
+ d ccsid 10u 0 value
+ *
+ d curl_from_ccsid...
+ d pr * extproc('curl_from_ccsid') const char *
+ d s * value options(*string) const char *
+ d ccsid 10u 0 value
+ *
+ d curl_to_ccsid...
+ d pr * extproc('curl_to_ccsid') const char *
+ d s * value options(*string) const char *
+ d ccsid 10u 0 value
+ *
+ **************************************************************************
+ * Procedure overloading
+ **************************************************************************
+ *
+ /if defined(*V7R4M0)
+ d curl_easy_setopt_RPGnum_...
+ d pr extproc('curl_easy_setopt_RPGnum_')
+ d like(CURLcode)
+ d curl * value CURL *
+ d option value like(CURLoption)
+ d numarg 20i 0 value
+ *
+ d curl_easy_setopt...
+ d pr like(CURLcode)
+ d overload(curl_easy_setopt_RPGnum_:
+ d curl_easy_setopt_object:
+ d curl_easy_setopt_function)
+ *
+ d curl_multi_setopt_RPGnum_...
+ d pr extproc('curl_multi_setopt_RPGnum_')
+ d like(CURLcode)
+ d curl * value CURLM *
+ d option value like(CURLMoption)
+ d numarg 20i 0 value
+ *
+ d curl_multi_setopt...
+ d pr like(CURLcode)
+ d overload(curl_multi_setopt_RPGnum_:
+ d curl_multi_setopt_object:
+ d curl_multi_setopt_function)
+ *
+ d curl_share_setopt...
+ d pr like(CURLcode)
+ d overload(curl_share_setopt_int:
+ d curl_share_setopt_ptr:
+ d curl_share_setopt_proc)
+ *
+ d curl_easy_getinfo...
+ d pr like(CURLcode)
+ d overload(curl_easy_getinfo_long:
+ d curl_easy_getinfo_off_t:
+ d curl_easy_getinfo_double:
+ d curl_easy_getinfo_ptr)
+ /endif
+ *
/endif
diff --git a/packages/OS400/curlcl.c b/packages/OS400/curlcl.c
new file mode 100644
index 000000000..02edcd63c
--- /dev/null
+++ b/packages/OS400/curlcl.c
@@ -0,0 +1,177 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ *
+ ***************************************************************************/
+
+/* CL interface program to curl cli tool. */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <milib.h>
+#include <miptrnam.h>
+#include <mih/callpgmv.h>
+
+#ifndef CURLPGM
+#define CURLPGM "CURL"
+#endif
+
+/* Variable-length string, with 16-bit length. */
+struct vary2 {
+ short len;
+ char string[5000];
+};
+
+/* Arguments from CL command. */
+struct arguments {
+ char *pgm; /* Program name. */
+ struct vary2 *cmdargs; /* Command line arguments. */
+};
+
+static int
+is_ifs(char c)
+{
+ return c == ' ' || c == '\t' || c == '\r' || c == '\n';
+}
+
+static int
+parse_command_line(const char *cmdargs, size_t len,
+ size_t *argc, char **argv,
+ size_t *argsize, char *argbuf)
+{
+ const char *endline = cmdargs + len;
+ char quote = '\0';
+ int inarg = 0;
+
+ *argc = 0;
+ *argsize = 0;
+
+ while(cmdargs < endline) {
+ char c = *cmdargs++;
+
+ if(!inarg) {
+ /* Skip argument separator. */
+ if(is_ifs(c))
+ continue;
+
+ /* Start a new argument. */
+ ++*argc;
+ if(argv)
+ *argv++ = argbuf;
+ inarg = 1;
+ }
+
+ /* Check for quoting end. */
+ if(quote && quote == c) {
+ quote = '\0';
+ continue;
+ }
+
+ /* Check for backslash-escaping. */
+ if(quote != '\'' && c == '\\') {
+ if(cmdargs >= endline) {
+ fputs("Trailing backslash in command\n", stderr);
+ return -1;
+ }
+ c = *cmdargs++;
+ }
+ else if(!quote && is_ifs(c)) { /* Check for end of argument. */
+ inarg = 0;
+ c = '\0'; /* Will store a string terminator. */
+ }
+
+ /* Store argument character and count it. */
+ if(argbuf)
+ *argbuf++ = c;
+ ++*argsize;
+ }
+
+ if(quote) {
+ fprintf(stderr, "Unterminated quote: %c\n", quote);
+ return -1;
+ }
+
+ /* Terminate last argument. */
+ if(inarg) {
+ if(argbuf)
+ *argbuf = '\0';
+ ++*argsize;
+ }
+
+ /* Terminate argument list. */
+ if(argv)
+ *argv = NULL;
+
+ return 0;
+}
+
+
+int
+main(int argsc, struct arguments *args)
+{
+ size_t argc;
+ char **argv;
+ size_t argsize;
+ int i;
+ int exitcode;
+ char library[11];
+
+ /* Extract current program library name. */
+ for(i = 0; i < 10; i++) {
+ char c = args->pgm[i];
+
+ if(!c || c == '/')
+ break;
+
+ library[i] = c;
+ }
+ library[i] = '\0';
+
+ /* Measure arguments size. */
+ exitcode = parse_command_line(args->cmdargs->string, args->cmdargs->len,
+ &argc, NULL, &argsize, NULL);
+
+ if(!exitcode) {
+ /* Allocate space for parsed arguments. */
+ argv = (char **) malloc((argc + 1) * sizeof(*argv) + argsize);
+ if(!argv) {
+ fputs("Memory allocation error\n", stderr);
+ exitcode = -2;
+ }
+ else {
+ _SYSPTR pgmptr = rslvsp(WLI_PGM, (char *) CURLPGM, library, _AUTH_NONE);
+ _LU_Work_Area_T *luwrka = (_LU_Work_Area_T *) _LUWRKA();
+
+ parse_command_line(args->cmdargs->string, args->cmdargs->len,
+ &argc, argv, &argsize, (char *) (argv + argc + 1));
+
+ /* Call program. */
+ _CALLPGMV((void *) &pgmptr, argv, argc);
+ exitcode = luwrka->LU_RC;
+
+ free(argv);
+ }
+ }
+
+ return exitcode;
+}
diff --git a/packages/OS400/curlmain.c b/packages/OS400/curlmain.c
new file mode 100644
index 000000000..1b030b7ca
--- /dev/null
+++ b/packages/OS400/curlmain.c
@@ -0,0 +1,121 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ *
+ ***************************************************************************/
+
+/*
+ * QADRT/QADRTMAIN2 substitution program.
+ * This is needed because the IBM-provided QADRTMAIN2 does not
+ * properly translate arguments by default or if no locale is provided.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <iconv.h>
+#include <errno.h>
+#include <locale.h>
+
+/* Do not use qadrt.h since it defines unneeded static procedures. */
+extern void QadrtInit(void);
+extern int QadrtFreeConversionTable(void);
+extern int QadrtFreeEnviron(void);
+extern char * setlocale_a(int, const char *);
+
+
+/* The ASCII main program. */
+extern int main_a(int argc, char * * argv);
+
+/* Global values of original EBCDIC arguments. */
+int ebcdic_argc;
+char ** ebcdic_argv;
+
+
+int main(int argc, char **argv)
+{
+ int i;
+ int j;
+ iconv_t cd;
+ size_t bytecount = 0;
+ char *inbuf;
+ char *outbuf;
+ size_t inbytesleft;
+ size_t outbytesleft;
+ char dummybuf[128];
+ char tocode[32];
+ char fromcode[32];
+
+ ebcdic_argc = argc;
+ ebcdic_argv = argv;
+
+ /* Build the encoding converter. */
+ strncpy(tocode, "IBMCCSID01208", sizeof(tocode)); /* Use UTF-8. */
+ strncpy(fromcode, "IBMCCSID000000000010", sizeof(fromcode));
+ cd = iconv_open(tocode, fromcode);
+
+ /* Measure the arguments. */
+ for(i = 0; i < argc; i++) {
+ inbuf = argv[i];
+ do {
+ inbytesleft = 0;
+ outbuf = dummybuf;
+ outbytesleft = sizeof(dummybuf);
+ j = iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
+ bytecount += outbuf - dummybuf;
+ } while(j == -1 && errno == E2BIG);
+
+ /* Reset the shift state. */
+ iconv(cd, NULL, &inbytesleft, &outbuf, &outbytesleft);
+ }
+
+ /* Allocate memory for the ASCII arguments and vector. */
+ argv = (char **) malloc((argc + 1) * sizeof(*argv) + bytecount);
+
+ /* Build the vector and convert argument encoding. */
+ outbuf = (char *) (argv + argc + 1);
+ outbytesleft = bytecount;
+
+ for(i = 0; i < argc; i++) {
+ argv[i] = outbuf;
+ inbuf = ebcdic_argv[i];
+ inbytesleft = 0;
+ iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
+ iconv(cd, NULL, &inbytesleft, &outbuf, &outbytesleft);
+ }
+
+ iconv_close(cd);
+ argv[argc] = NULL;
+
+ /* Try setting the locale regardless of QADRT_ENV_LOCALE. */
+ setlocale_a(LC_ALL, "");
+
+ /* Call the program. */
+ i = main_a(argc, argv);
+
+ /* Clean-up allocated items. */
+ free((char *) argv);
+ QadrtFreeConversionTable();
+ QadrtFreeEnviron();
+
+ /* Terminate. */
+ return i;
+}
diff --git a/packages/OS400/initscript.sh b/packages/OS400/initscript.sh
index 4facf17ed..b75055a8d 100644..100755
--- a/packages/OS400/initscript.sh
+++ b/packages/OS400/initscript.sh
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -23,9 +23,9 @@
#
###########################################################################
-system ()
+CLcommand()
{
- /usr/bin/system "$@" || exit 1
+ /usr/bin/system "${@}" || exit 1
}
setenv()
@@ -58,44 +58,16 @@ export SCRIPTDIR TOPDIR
# Extract the SONAME from the library makefile.
-SONAME=`sed -e '/^VERSIONINFO=/!d' -e 's/^.* \([0-9]*\):.*$/\1/' -e 'q' \
- < "${TOPDIR}/lib/Makefile.am"`
+SONAME=`sed -e '/^VERSIONCHANGE=/!d;s/^.*=\([0-9]*\).*/\1/' \
+ < "${TOPDIR}/lib/Makefile.soname"`
export SONAME
+# Get OS/400 configuration parameters.
-################################################################################
-#
-# Tunable configuration parameters.
-#
-################################################################################
-
-setenv TARGETLIB 'CURL' # Target OS/400 program library.
-setenv STATBNDDIR 'CURL_A' # Static binding directory.
-setenv DYNBNDDIR 'CURL' # Dynamic binding directory.
-setenv SRVPGM "CURL.${SONAME}" # Service program.
-setenv TGTCCSID '500' # Target CCSID of objects.
-setenv DEBUG '*ALL' # Debug level.
-setenv OPTIMIZE '10' # Optimization level
-setenv OUTPUT '*NONE' # Compilation output option.
-setenv TGTRLS '*CURRENT' # Target OS release.
-setenv IFSDIR '/curl' # Installation IFS directory.
-
-# Define ZLIB availability and locations.
-
-setenv WITH_ZLIB 0 # Define to 1 to enable.
-setenv ZLIB_INCLUDE '/zlib/include' # ZLIB include IFS directory.
-setenv ZLIB_LIB 'ZLIB' # ZLIB library.
-setenv ZLIB_BNDDIR 'ZLIB_A' # ZLIB binding directory.
-
-# Define LIBSSH2 availability and locations.
-
-setenv WITH_LIBSSH2 0 # Define to 1 to enable.
-setenv LIBSSH2_INCLUDE '/libssh2/include' # LIBSSH2 include IFS directory.
-setenv LIBSSH2_LIB 'LIBSSH2' # LIBSSH2 library.
-setenv LIBSSH2_BNDDIR 'LIBSSH2_A' # LIBSSH2 binding directory.
-
-
-################################################################################
+. "${SCRIPTDIR}/config400.default"
+if [ -f "${SCRIPTDIR}/config400.override" ]
+then . "${SCRIPTDIR}/config400.override"
+fi
# Need to get the version definitions.
@@ -206,17 +178,18 @@ make_module()
# putting it in an include file makes it only active
# for that include file.
# Thus we build a temporary file with the pragma prepended to
- # the source file and we compile that themporary file.
+ # the source file and we compile that temporary file.
echo "#line 1 \"${2}\"" > __tmpsrcf.c
echo "#pragma convert(819)" >> __tmpsrcf.c
echo "#line 1" >> __tmpsrcf.c
cat "${2}" >> __tmpsrcf.c
CMD="CRTCMOD MODULE(${TARGETLIB}/${1}) SRCSTMF('__tmpsrcf.c')"
-# CMD="${CMD} SYSIFCOPT(*IFS64IO) OPTION(*INCDIRFIRST *SHOWINC *SHOWSYS)"
- CMD="${CMD} SYSIFCOPT(*IFS64IO) OPTION(*INCDIRFIRST)"
+ CMD="${CMD} SYSIFCOPT(*IFS64IO *ASYNCSIGNAL)"
+# CMD="${CMD} OPTION(*INCDIRFIRST *SHOWINC *SHOWSYS)"
+ CMD="${CMD} OPTION(*INCDIRFIRST)"
CMD="${CMD} LOCALETYPE(*LOCALE) FLAG(10)"
- CMD="${CMD} INCDIR('/qibm/proddata/qadrt/include'"
+ CMD="${CMD} INCDIR('${QADRTDIR}/include'"
CMD="${CMD} '${TOPDIR}/include/curl' '${TOPDIR}/include' '${SRCDIR}'"
CMD="${CMD} '${TOPDIR}/packages/OS400'"
@@ -234,7 +207,7 @@ make_module()
CMD="${CMD} OPTIMIZE(${OPTIMIZE})"
CMD="${CMD} DBGVIEW(${DEBUG})"
- DEFINES="${3} BUILDING_LIBCURL"
+ DEFINES="${3} 'qadrt_use_inline'"
if [ "${WITH_ZLIB}" != "0" ]
then DEFINES="${DEFINES} HAVE_LIBZ"
@@ -248,7 +221,7 @@ make_module()
then CMD="${CMD} DEFINE(${DEFINES})"
fi
- system "${CMD}"
+ CLcommand "${CMD}"
rm -f __tmpsrcf.c
LINK=YES
}
@@ -268,6 +241,7 @@ db2_name()
tr 'a-z-' 'A-Z_' |
sed -e 's/\..*//' \
-e 's/^CURL_*/C/' \
+ -e 's/^TOOL_*/T/' \
-e 's/^\(.\).*\(.........\)$/\1\2/'
fi
}
@@ -286,3 +260,28 @@ versioned_copy()
-e "s/@LIBCURL_TIMESTAMP@/${LIBCURL_TIMESTAMP}/g" \
< "${1}" > "${2}"
}
+
+
+# Get definitions from a make file.
+# The `sed' statement works as follows:
+# - Join \nl-separated lines.
+# - Retain only lines that begins with "identifier =".
+# - Replace @...@ substitutions by shell variable references.
+# - Turn these lines into shell variable assignments.
+
+get_make_vars()
+
+{
+ eval "`sed -e ': begin' \
+ -e '/\\\\$/{' \
+ -e 'N' \
+ -e 's/\\\\\\n/ /' \
+ -e 'b begin' \
+ -e '}' \
+ -e '/^[A-Za-z_][A-Za-z0-9_]*[[:space:]]*=/!d' \
+ -e 's/@\\([A-Za-z0-9_]*\\)@/${\\1}/g' \
+ -e 's/[[:space:]]*=[[:space:]]*/=/' \
+ -e 's/=\\(.*[^[:space:]]\\)[[:space:]]*$/=\\"\\1\\"/' \
+ -e 's/\\\$(\\([^)]*\\))/\${\\1}/g' \
+ < \"${1}\"`"
+}
diff --git a/packages/OS400/make-include.sh b/packages/OS400/make-include.sh
index daf32627c..30235eb79 100644..100755
--- a/packages/OS400/make-include.sh
+++ b/packages/OS400/make-include.sh
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -38,7 +38,7 @@ SRCPF="${LIBIFSNAME}/H.FILE"
if action_needed "${SRCPF}"
then CMD="CRTSRCPF FILE(${TARGETLIB}/H) RCDLEN(112)"
CMD="${CMD} CCSID(${TGTCCSID}) TEXT('curl: Header files')"
- system "${CMD}"
+ CLcommand "${CMD}"
fi
@@ -98,9 +98,9 @@ ln -s "${SRCPF}/CURL.INC.MBR" "${IFSINCLUDE}/curl.inc.rpgle"
if action_needed "${LIBIFSNAME}/CURL.FILE"
then :
-else system "DLTF FILE(${TARGETLIB}/CURL)"
+else CLcommand "DLTF FILE(${TARGETLIB}/CURL)"
fi
CMD="CRTDUPOBJ OBJ(H) FROMLIB(${TARGETLIB}) OBJTYPE(*FILE) TOLIB(*FROMLIB)"
CMD="${CMD} NEWOBJ(CURL) DATA(*YES)"
-system "${CMD}"
+CLcommand "${CMD}"
diff --git a/packages/OS400/make-lib.sh b/packages/OS400/make-lib.sh
index 7bbd9fa2a..860cb5d76 100644..100755
--- a/packages/OS400/make-lib.sh
+++ b/packages/OS400/make-lib.sh
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -43,58 +43,27 @@ fi
echo '#pragma comment(user, "libcurl version '"${LIBCURL_VERSION}"'")' > os400.c
echo '#pragma comment(user, __DATE__)' >> os400.c
echo '#pragma comment(user, __TIME__)' >> os400.c
-echo '#pragma comment(copyright, "Copyright (C) 1998-2016 Daniel Stenberg et al. OS/400 version by P. Monnerat")' >> os400.c
-make_module OS400 os400.c
+echo '#pragma comment(copyright, "Copyright (C) Daniel Stenberg et al. OS/400 version by P. Monnerat")' >> os400.c
+make_module OS400 os400.c BUILDING_LIBCURL
LINK= # No need to rebuild service program yet.
MODULES=
-# Get source list.
+# Get source list (CSOURCES variable).
-sed -e ':begin' \
- -e '/\\$/{' \
- -e 's/\\$/ /' \
- -e 'N' \
- -e 'bbegin' \
- -e '}' \
- -e 's/\n//g' \
- -e 's/[[:space:]]*$//' \
- -e 's/^\([A-Za-z][A-Za-z0-9_]*\)[[:space:]]*=[[:space:]]*\(.*\)/\1="\2"/' \
- -e 's/\$(\([A-Za-z][A-Za-z0-9_]*\))/${\1}/g' \
- < Makefile.inc > tmpscript.sh
-. ./tmpscript.sh
+get_make_vars Makefile.inc
# Compile the sources into modules.
INCLUDES="'`pwd`'"
-# Create a small C program to check ccsidcurl.c is up to date
-if action_needed "${LIBIFSNAME}/CHKSTRINGS.PGM"
-then
- CMD="CRTBNDC PGM(${TARGETLIB}/CHKSTRINGS) SRCSTMF('${SCRIPTDIR}/chkstrings.c')"
- CMD="${CMD} INCDIR('${TOPDIR}/include/curl' '${TOPDIR}/include' '${SRCDIR}' ${INCLUDES})"
- system -i "${CMD}"
- if [ $? -ne 0 ]
- then
- echo "ERROR: Failed to build CHKSTRINGS *PGM object!"
- exit 2
- else
- ${LIBIFSNAME}/CHKSTRINGS.PGM
- if [ $? -ne 0 ]
- then
- echo "ERROR: CHKSTRINGS failed!"
- exit 2
- fi
- fi
-fi
-
-make_module OS400SYS "${SCRIPTDIR}/os400sys.c"
-make_module CCSIDCURL "${SCRIPTDIR}/ccsidcurl.c"
+make_module OS400SYS "${SCRIPTDIR}/os400sys.c" BUILDING_LIBCURL
+make_module CCSIDCURL "${SCRIPTDIR}/ccsidcurl.c" BUILDING_LIBCURL
for SRC in ${CSOURCES}
do MODULE=`db2_name "${SRC}"`
- make_module "${MODULE}" "${SRC}"
+ make_module "${MODULE}" "${SRC}" BUILDING_LIBCURL
done
@@ -108,12 +77,12 @@ if [ "${LINK}" ]
then rm -rf "${LIBIFSNAME}/${STATBNDDIR}.BNDDIR"
CMD="CRTBNDDIR BNDDIR(${TARGETLIB}/${STATBNDDIR})"
CMD="${CMD} TEXT('LibCurl API static binding directory')"
- system "${CMD}"
+ CLcommand "${CMD}"
for MODULE in ${MODULES}
do CMD="ADDBNDDIRE BNDDIR(${TARGETLIB}/${STATBNDDIR})"
CMD="${CMD} OBJ((${TARGETLIB}/${MODULE} *MODULE))"
- system "${CMD}"
+ CLcommand "${CMD}"
done
fi
@@ -124,20 +93,31 @@ fi
if action_needed "${LIBIFSNAME}/TOOLS.FILE"
then CMD="CRTSRCPF FILE(${TARGETLIB}/TOOLS) RCDLEN(112)"
CMD="${CMD} TEXT('curl: build tools')"
- system "${CMD}"
+ CLcommand "${CMD}"
fi
# Gather the list of symbols to export.
+# First use awk to pull all CURL_EXTERN function prototypes from
+# the header files, pass through to sed to strip CURL_DEPRECATED(..)
+# and CURL_TEMP_PRINTF(..) then back to awk to pull the string
+# immediately to the left of a bracket stripping any spaces or *'s.
-EXPORTS=`grep '^CURL_EXTERN[[:space:]]' \
+EXPORTS=`awk '/^CURL_EXTERN/,/;/' \
"${TOPDIR}"/include/curl/*.h \
"${SCRIPTDIR}/ccsidcurl.h" |
- sed -e 's/^.*CURL_EXTERN[[:space:]]\(.*\)(.*$/\1/' \
- -e 's/[[:space:]]*$//' \
- -e 's/^.*[[:space:]][[:space:]]*//' \
- -e 's/^\*//' \
- -e 's/(\(.*\))/\1/'`
+ sed 's/ CURL_DEPRECATED(.*)//g;s/ CURL_TEMP_PRINTF(.*)//g' |
+ awk '{br=index($0,"("); \
+ if (br) { \
+ for(c=br-1; ;c--) { \
+ if (c==1) { \
+ print substr($0,c,br-1); break \
+ } else if (match(substr($0, c, br-c), "[ *]") != 0) { \
+ print substr($0, c+1, br-c-1); break \
+ } \
+ } \
+ } \
+ }'`
# Create the service program exportation file in DB2 member if needed.
@@ -181,7 +161,7 @@ then CMD="CRTSRVPGM SRVPGM(${TARGETLIB}/${SRVPGM})"
CMD="${CMD} BNDSRVPGM(QADRTTS QGLDCLNT QGLDBRDR)"
CMD="${CMD} TEXT('curl API library')"
CMD="${CMD} TGTRLS(${TGTRLS})"
- system "${CMD}"
+ CLcommand "${CMD}"
LINK=YES
fi
@@ -196,52 +176,8 @@ if [ "${LINK}" ]
then rm -rf "${LIBIFSNAME}/${DYNBNDDIR}.BNDDIR"
CMD="CRTBNDDIR BNDDIR(${TARGETLIB}/${DYNBNDDIR})"
CMD="${CMD} TEXT('LibCurl API dynamic binding directory')"
- system "${CMD}"
+ CLcommand "${CMD}"
CMD="ADDBNDDIRE BNDDIR(${TARGETLIB}/${DYNBNDDIR})"
CMD="${CMD} OBJ((*LIBL/${SRVPGM} *SRVPGM))"
- system "${CMD}"
-fi
-
-
-# Rebuild the formdata test if needed.
-
-if [ "${TEST_FORMDATA}" ]
-then MODULES=
- make_module TFORMDATA formdata.c "'_FORM_DEBUG' 'CURLDEBUG'"
- make_module TSTREQUAL strequal.c "'_FORM_DEBUG' 'CURLDEBUG'"
- make_module TMEMDEBUG memdebug.c "'_FORM_DEBUG' 'CURLDEBUG'"
- make_module TMPRINTF mprintf.c "'_FORM_DEBUG' 'CURLDEBUG'"
- make_module TSTRERROR strerror.c "'_FORM_DEBUG' 'CURLDEBUG'"
- # The following modules should not be needed (see comment in
- # formdata.c. However, there are some unsatisfied
- # external references leading in the following
- # modules to be (recursively) needed.
- MODULES="${MODULES} EASY STRDUP SSLGEN GSKIT HOSTIP HOSTIP4 HOSTIP6"
- MODULES="${MODULES} URL HASH TRANSFER GETINFO COOKIE SENDF SELECT"
- MODULES="${MODULES} INET_NTOP SHARE HOSTTHRE MULTI LLIST FTP HTTP"
- MODULES="${MODULES} HTTP_DIGES HTTP_CHUNK HTTP_NEGOT TIMEVAL HOSTSYN"
- MODULES="${MODULES} CONNECT SOCKS PROGRESS ESCAPE INET_PTON GETENV"
- MODULES="${MODULES} DICT LDAP TELNET FILE TFTP NETRC PARSEDATE"
- MODULES="${MODULES} SPEEDCHECK SPLAY BASE64 SECURITY IF2IP MD5"
- MODULES="${MODULES} KRB5 OS400SYS"
-
- PGMIFSNAME="${LIBIFSNAME}/TFORMDATA.PGM"
-
- if action_needed "${PGMIFSNAME}"
- then LINK=YES
- fi
-
- if [ "${LINK}" ]
- then CMD="CRTPGM PGM(${TARGETLIB}/TFORMDATA)"
- CMD="${CMD} ENTMOD(QADRT/QADRTMAIN2)"
- CMD="${CMD} MODULE("
-
- for MODULE in ${MODULES}
- do CMD="${CMD} ${TARGETLIB}/${MODULE}"
- done
-
- CMD="${CMD} ) BNDSRVPGM(QADRTTS)"
- CMD="${CMD} TGTRLS(${TGTRLS})"
- system "${CMD}"
- fi
+ CLcommand "${CMD}"
fi
diff --git a/packages/OS400/make-src.sh b/packages/OS400/make-src.sh
index 327857d16..931c1f335 100644..100755
--- a/packages/OS400/make-src.sh
+++ b/packages/OS400/make-src.sh
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -23,5 +23,77 @@
#
###########################################################################
#
-#
-# Not implemented yet on OS/400.
+# Command line interface tool compilation script for the OS/400.
+
+SCRIPTDIR=`dirname "${0}"`
+. "${SCRIPTDIR}/initscript.sh"
+cd "${TOPDIR}/src"
+
+
+# Get source lists.
+# CURL_CFILES are in the current directory.
+# CURLX_CFILES are in the lib directory and need to be recompiled because
+# some function names change using macros.
+
+get_make_vars Makefile.inc
+
+
+# Compile the sources into modules.
+
+LINK=
+MODULES=
+INCLUDES="'${TOPDIR}/lib'"
+
+for SRC in ${CURLX_CFILES}
+do MODULE=`db2_name "${SRC}"`
+ MODULE=`db2_name "X${MODULE}"`
+ make_module "${MODULE}" "${SRC}"
+done
+
+for SRC in ${CURL_CFILES}
+do MODULE=`db2_name "${SRC}"`
+ make_module "${MODULE}" "${SRC}"
+done
+
+
+# Link modules into program.
+
+MODULES="`echo \"${MODULES}\" | sed \"s/[^ ][^ ]*/${TARGETLIB}\/&/g\"`"
+CMD="CRTPGM PGM(${TARGETLIB}/${CURLPGM})"
+CMD="${CMD} ENTMOD(${TARGETLIB}/CURLMAIN)"
+CMD="${CMD} MODULE(${MODULES})"
+CMD="${CMD} BNDSRVPGM(${TARGETLIB}/${SRVPGM} QADRTTS)"
+CMD="${CMD} TGTRLS(${TGTRLS})"
+CLcommand "${CMD}"
+
+
+# Create the IFS command.
+
+IFSBIN="${IFSDIR}/bin"
+
+if action_needed "${IFSBIN}"
+then mkdir -p "${IFSBIN}"
+fi
+
+rm -f "${IFSBIN}/curl"
+ln -s "/QSYS.LIB/${TARGETLIB}.LIB/${CURLPGM}.PGM" "${IFSBIN}/curl"
+
+
+# Create the CL interface program.
+
+if action_needed "${LIBIFSNAME}/CURLCL.PGM" "${SCRIPTDIR}/curlcl.c"
+then CMD="CRTBNDC PGM(${TARGETLIB}/${CURLCLI})"
+ CMD="${CMD} SRCSTMF('${SCRIPTDIR}/curlcl.c')"
+ CMD="${CMD} DEFINE('CURLPGM=\"${CURLPGM}\"')"
+ CMD="${CMD} TGTCCSID(${TGTCCSID})"
+ CLcommand "${CMD}"
+fi
+
+
+# Create the CL command.
+
+if action_needed "${LIBIFSNAME}/${CURLCMD}.CMD" "${SCRIPTDIR}/curl.cmd"
+then CMD="CRTCMD CMD(${TARGETLIB}/${CURLCMD}) PGM(${TARGETLIB}/${CURLCLI})"
+ CMD="${CMD} SRCSTMF('${SCRIPTDIR}/curl.cmd')"
+ CLcommand "${CMD}"
+fi
diff --git a/packages/OS400/make-tests.sh b/packages/OS400/make-tests.sh
index 9ac9d46d2..ed475956c 100644..100755
--- a/packages/OS400/make-tests.sh
+++ b/packages/OS400/make-tests.sh
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -32,106 +32,114 @@ SCRIPTDIR=`dirname "${0}"`
cd "${TOPDIR}/tests"
-# tests directory not implemented yet.
+# Build programs in a directory.
+build_all_programs()
-# Process the libtest subdirectory.
+{
+ # Compile all programs.
+ # The list is found in variable "noinst_PROGRAMS"
-cd libtest
+ INCLUDES="'`pwd`' '${TOPDIR}/lib' '${TOPDIR}/src'"
+ MODS="${1}"
+ SRVPGMS="${2}"
-# Get definitions from the Makefile.inc file.
-# The `sed' statement works as follows:
-# _ Join \nl-separated lines.
-# _ Retain only lines that begins with "identifier =".
-# _ Turn these lines into shell variable assignments.
+ for PGM in ${noinst_PROGRAMS}
+ do DB2PGM=`db2_name "${PGM}"`
+ PGMIFSNAME="${LIBIFSNAME}/${DB2PGM}.PGM"
-eval "`sed -e ': begin' \
- -e '/\\\\$/{' \
- -e 'N' \
- -e 's/\\\\\\n/ /' \
- -e 'b begin' \
- -e '}' \
- -e '/^[A-Za-z_][A-Za-z0-9_]*[[:space:]]*[=]/b keep' \
- -e 'd' \
- -e ': keep' \
- -e 's/[[:space:]]*=[[:space:]]*/=/' \
- -e 's/=\\(.*[^[:space:]]\\)[[:space:]]*$/=\\"\\1\\"/' \
- -e 's/\\$(\\([^)]*\\))/${\\1}/g' \
- < Makefile.inc`"
+ # Extract preprocessor symbol definitions from
+ # compilation options for the program.
-# Special case: redefine chkhostname compilation parameters.
+ PGMCFLAGS="`eval echo \"\\${${PGM}_CFLAGS}\"`"
+ PGMDFNS=
-chkhostname_SOURCES=chkhostname.c
-chkhostname_LDADD=curl_gethostname.o
+ for FLAG in ${PGMCFLAGS}
+ do case "${FLAG}" in
+ -D?*) DEFINE="`echo \"${FLAG}\" | sed 's/^..//'`"
+ PGMDFNS="${PGMDFNS} '${DEFINE}'"
+ ;;
+ esac
+ done
-# Compile all programs.
-# The list is found in variable "noinst_PROGRAMS"
+ # Compile all C sources for the program into modules.
+
+ PGMSOURCES="`eval echo \"\\${${PGM}_SOURCES}\"`"
+ LINK=
+ MODULES=
+
+ for SOURCE in ${PGMSOURCES}
+ do case "${SOURCE}" in
+ *.c) # Special processing for libxxx.c files:
+ # their module name is determined
+ # by the target PROGRAM name.
+
+ case "${SOURCE}" in
+ lib*.c) MODULE="${DB2PGM}"
+ ;;
+ *) MODULE=`db2_name "${SOURCE}"`
+ ;;
+ esac
+
+ # If source is in a sibling directory,
+ # prefix module name with 'X'.
+
+ case "${SOURCE}" in
+ ../*) MODULE=`db2_name "X${MODULE}"`
+ ;;
+ esac
+
+ make_module "${MODULE}" "${SOURCE}" "${PGMDFNS}"
+ if action_needed "${PGMIFSNAME}" "${MODIFSNAME}"
+ then LINK=yes
+ fi
+ ;;
+ esac
+ done
-INCLUDES="'${TOPDIR}/tests/libtest' '${TOPDIR}/lib'"
+ # Link program if needed.
+
+ if [ "${LINK}" ]
+ then PGMLDADD="`eval echo \"\\${${PGM}_LDADD}\"`"
+ for ARG in ${PGMLDADD}
+ do case "${ARG}" in
+ -*) ;; # Ignore non-module.
+ *) MODULES="${MODULES} "`db2_name "${ARG}"`
+ ;;
+ esac
+ done
+ MODULES="`echo \"${MODULES}\" |
+ sed \"s/[^ ][^ ]*/${TARGETLIB}\/&/g\"`"
+ CMD="CRTPGM PGM(${TARGETLIB}/${DB2PGM})"
+ CMD="${CMD} ENTMOD(${TARGETLIB}/CURLMAIN)"
+ CMD="${CMD} MODULE(${MODULES} ${MODS})"
+ CMD="${CMD} BNDSRVPGM(${SRVPGMS} QADRTTS)"
+ CMD="${CMD} TGTRLS(${TGTRLS})"
+ CLcommand "${CMD}"
+ fi
+ done
+}
-for PGM in ${noinst_PROGRAMS}
-do DB2PGM=`db2_name "${PGM}"`
- PGMIFSNAME="${LIBIFSNAME}/${DB2PGM}.PGM"
- # Extract preprocessor symbol definitions from compilation
- # options for the program.
+# Build programs in the server directory.
- PGMCFLAGS="`eval echo \"\\${${PGM}_CFLAGS}\"`"
- PGMDEFINES=
+(
+ cd server
+ get_make_vars Makefile.inc
+ build_all_programs "${TARGETLIB}/OS400SYS"
+)
- for FLAG in ${PGMCFLAGS}
- do case "${FLAG}" in
- -D?*) DEFINE="`echo \"${FLAG}\" | sed 's/^..//'`"
- PGMDEFINES="${PGMDEFINES} '${DEFINE}'"
- ;;
- esac
- done
- # Compile all C sources for the program into modules.
+# Build all programs in the libtest subdirectory.
- PGMSOURCES="`eval echo \"\\${${PGM}_SOURCES}\"`"
- LINK=
- MODULES=
+(
+ cd libtest
+ get_make_vars Makefile.inc
- for SOURCE in ${PGMSOURCES}
- do case "${SOURCE}" in
- *.c) # Special processing for libxxx.c files: their
- # module name is determined by the target
- # PROGRAM name.
+ # Special case: redefine chkhostname compilation parameters.
- case "${SOURCE}" in
- lib*.c) MODULE="${DB2PGM}"
- ;;
- *) MODULE=`db2_name "${SOURCE}"`
- ;;
- esac
-
- make_module "${MODULE}" "${SOURCE}" "${PGMDEFINES}"
- if action_needed "${PGMIFSNAME}" "${MODIFSNAME}"
- then LINK=yes
- fi
- ;;
- esac
- done
+ chkhostname_SOURCES=chkhostname.c
+ chkhostname_LDADD=curl_gethostname.o
- # Link program if needed.
-
- if [ "${LINK}" ]
- then PGMLDADD="`eval echo \"\\${${PGM}_LDADD}\"`"
- for LDARG in ${PGMLDADD}
- do case "${LDARG}" in
- -*) ;; # Ignore non-module.
- *) MODULES="${MODULES} "`db2_name "${LDARG}"`
- ;;
- esac
- done
- MODULES="`echo \"${MODULES}\" |
- sed \"s/[^ ][^ ]*/${TARGETLIB}\/&/g\"`"
- CMD="CRTPGM PGM(${TARGETLIB}/${DB2PGM})"
- CMD="${CMD} ENTMOD(QADRT/QADRTMAIN2)"
- CMD="${CMD} MODULE(${MODULES})"
- CMD="${CMD} BNDSRVPGM(${TARGETLIB}/${SRVPGM} QADRTTS)"
- CMD="${CMD} TGTRLS(${TGTRLS})"
- system "${CMD}"
- fi
-done
+ build_all_programs "" "${TARGETLIB}/${SRVPGM}"
+)
diff --git a/packages/OS400/makefile.sh b/packages/OS400/makefile.sh
index b2c1b5918..3d659645d 100644..100755
--- a/packages/OS400/makefile.sh
+++ b/packages/OS400/makefile.sh
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -37,7 +37,7 @@ cd "${TOPDIR}"
if action_needed "${LIBIFSNAME}"
then CMD="CRTLIB LIB(${TARGETLIB}) TEXT('curl: multiprotocol support API')"
- system "${CMD}"
+ CLcommand "${CMD}"
fi
@@ -46,7 +46,7 @@ fi
if action_needed "${LIBIFSNAME}/DOCS.FILE"
then CMD="CRTSRCPF FILE(${TARGETLIB}/DOCS) RCDLEN(240)"
CMD="${CMD} CCSID(${TGTCCSID}) TEXT('Documentation texts')"
- system "${CMD}"
+ CLcommand "${CMD}"
fi
@@ -66,11 +66,55 @@ do MEMBER="`basename \"${TEXT}\" .OS400`"
if action_needed "${MEMBER}" "${TEXT}"
then CMD="CPY OBJ('${TEXT}') TOOBJ('${MEMBER}') TOCCSID(${TGTCCSID})"
CMD="${CMD} DTAFMT(*TEXT) REPLACE(*YES)"
- system "${CMD}"
+ CLcommand "${CMD}"
fi
done
+# Create the RPGXAMPLES source file if it does not exist.
+
+if action_needed "${LIBIFSNAME}/RPGXAMPLES.FILE"
+then CMD="CRTSRCPF FILE(${TARGETLIB}/RPGXAMPLES) RCDLEN(240)"
+ CMD="${CMD} CCSID(${TGTCCSID}) TEXT('ILE/RPG examples')"
+ CLcommand "${CMD}"
+fi
+
+
+# Copy RPG examples if needed.
+
+for EXAMPLE in "${SCRIPTDIR}/rpg-examples"/*
+do MEMBER="`basename \"${EXAMPLE}\"`"
+ IFSMEMBER="${LIBIFSNAME}/RPGXAMPLES.FILE/`db2_name \"${MEMBER}\"`.MBR"
+
+ [ -e "${EXAMPLE}" ] || continue
+
+ if action_needed "${IFSMEMBER}" "${EXAMPLE}"
+ then CMD="CPY OBJ('${EXAMPLE}') TOOBJ('${IFSMEMBER}')"
+ CMD="${CMD} TOCCSID(${TGTCCSID}) DTAFMT(*TEXT) REPLACE(*YES)"
+ CLcommand "${CMD}"
+ MBRTEXT=`sed -e '1!d;/^ \*/!d;s/^ *\* *//' \
+ -e 's/ *$//;s/'"'"'/&&/g' < "${EXAMPLE}"`
+ CMD="CHGPFM FILE(${TARGETLIB}/RPGXAMPLES) MBR(${MEMBER})"
+ CMD="${CMD} SRCTYPE(RPGLE) TEXT('${MBRTEXT}')"
+ CLcommand "${CMD}"
+ fi
+done
+
+
+# Compile the QADRTMAIN2 replacement module.
+
+if action_needed "${LIBIFSNAME}/CURLMAIN.MODULE" "${SCRIPTDIR}/curlmain.c"
+then CMD="CRTCMOD MODULE(${TARGETLIB}/CURLMAIN)"
+ CMD="${CMD} SRCSTMF('${SCRIPTDIR}/curlmain.c')"
+ CMD="${CMD} SYSIFCOPT(*IFS64IO) LOCALETYPE(*LOCALE) FLAG(10)"
+ CMD="${CMD} TGTCCSID(${TGTCCSID}) TGTRLS(${TGTRLS})"
+ CMD="${CMD} OUTPUT(${OUTPUT})"
+ CMD="${CMD} OPTIMIZE(${OPTIMIZE})"
+ CMD="${CMD} DBGVIEW(${DEBUG})"
+ CLcommand "${CMD}"
+fi
+
+
# Build in each directory.
# for SUBDIR in include lib src tests
diff --git a/packages/OS400/os400sys.c b/packages/OS400/os400sys.c
index 862c7fd38..510c1c4ec 100644
--- a/packages/OS400/os400sys.c
+++ b/packages/OS400/os400sys.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -44,11 +44,6 @@
#include <zlib.h>
#endif
-#ifdef USE_GSKIT
-#include <gskssl.h>
-#include <qsoasync.h>
-#endif
-
#ifdef HAVE_GSSAPI
#include <gssapi.h>
#endif
@@ -255,9 +250,9 @@ set_thread_string(localkey_t key, const char *s)
int
-Curl_getnameinfo_a(const struct sockaddr *sa, curl_socklen_t salen,
- char *nodename, curl_socklen_t nodenamelen,
- char *servname, curl_socklen_t servnamelen,
+Curl_getnameinfo_a(const struct sockaddr *sa, socklen_t salen,
+ char *nodename, socklen_t nodenamelen,
+ char *servname, socklen_t servnamelen,
int flags)
{
char *enodename = NULL;
@@ -344,371 +339,6 @@ Curl_getaddrinfo_a(const char *nodename, const char *servname,
return status;
}
-#ifdef USE_GSKIT
-
-/* ASCII wrappers for the GSKit procedures. */
-
-/*
- * EBCDIC --> ASCII string mapping table.
- * Some strings returned by GSKit are dynamically allocated and automatically
- * released when closing the handle.
- * To provide the same functionality, we use a "private" handle that
- * holds the GSKit handle and a list of string mappings. This will allow
- * avoid conversion of already converted strings and releasing them upon
- * close time.
- */
-
-struct gskstrlist {
- struct gskstrlist *next;
- const char *ebcdicstr;
- const char *asciistr;
-};
-
-struct Curl_gsk_descriptor {
- gsk_handle h;
- struct gskstrlist *strlist;
-};
-
-int Curl_gsk_environment_open(gsk_handle *my_env_handle)
-{
- struct Curl_gsk_descriptor *p;
- int rc;
-
- if(!my_env_handle)
- return GSK_OS400_ERROR_INVALID_POINTER;
- p = (struct Curl_gsk_descriptor *) malloc(sizeof(*p));
- if(!p)
- return GSK_INSUFFICIENT_STORAGE;
- p->strlist = (struct gskstrlist *) NULL;
- rc = gsk_environment_open(&p->h);
- if(rc != GSK_OK)
- free(p);
- else
- *my_env_handle = (gsk_handle) p;
- return rc;
-}
-
-int Curl_gsk_secure_soc_open(gsk_handle my_env_handle,
- gsk_handle *my_session_handle)
-{
- struct Curl_gsk_descriptor *p;
- gsk_handle h;
- int rc;
-
- if(!my_env_handle)
- return GSK_INVALID_HANDLE;
- if(!my_session_handle)
- return GSK_OS400_ERROR_INVALID_POINTER;
- h = ((struct Curl_gsk_descriptor *) my_env_handle)->h;
- p = (struct Curl_gsk_descriptor *) malloc(sizeof(*p));
- if(!p)
- return GSK_INSUFFICIENT_STORAGE;
- p->strlist = (struct gskstrlist *) NULL;
- rc = gsk_secure_soc_open(h, &p->h);
- if(rc != GSK_OK)
- free(p);
- else
- *my_session_handle = (gsk_handle) p;
- return rc;
-}
-
-static void gsk_free_handle(struct Curl_gsk_descriptor *p)
-{
- struct gskstrlist *q;
-
- while((q = p->strlist)) {
- p->strlist = q;
- free((void *) q->asciistr);
- free(q);
- }
- free(p);
-}
-
-int Curl_gsk_environment_close(gsk_handle *my_env_handle)
-{
- struct Curl_gsk_descriptor *p;
- int rc;
-
- if(!my_env_handle)
- return GSK_OS400_ERROR_INVALID_POINTER;
- if(!*my_env_handle)
- return GSK_INVALID_HANDLE;
- p = (struct Curl_gsk_descriptor *) *my_env_handle;
- rc = gsk_environment_close(&p->h);
- if(rc == GSK_OK) {
- gsk_free_handle(p);
- *my_env_handle = (gsk_handle) NULL;
- }
- return rc;
-}
-
-
-int Curl_gsk_secure_soc_close(gsk_handle *my_session_handle)
-{
- struct Curl_gsk_descriptor *p;
- int rc;
-
- if(!my_session_handle)
- return GSK_OS400_ERROR_INVALID_POINTER;
- if(!*my_session_handle)
- return GSK_INVALID_HANDLE;
- p = (struct Curl_gsk_descriptor *) *my_session_handle;
- rc = gsk_secure_soc_close(&p->h);
- if(rc == GSK_OK) {
- gsk_free_handle(p);
- *my_session_handle = (gsk_handle) NULL;
- }
- return rc;
-}
-
-int Curl_gsk_environment_init(gsk_handle my_env_handle)
-{
- struct Curl_gsk_descriptor *p;
-
- if(!my_env_handle)
- return GSK_INVALID_HANDLE;
- p = (struct Curl_gsk_descriptor *) my_env_handle;
- return gsk_environment_init(p->h);
-}
-
-
-int Curl_gsk_secure_soc_init(gsk_handle my_session_handle)
-{
- struct Curl_gsk_descriptor *p;
-
- if(!my_session_handle)
- return GSK_INVALID_HANDLE;
- p = (struct Curl_gsk_descriptor *) my_session_handle;
- return gsk_secure_soc_init(p->h);
-}
-
-
-int
-Curl_gsk_attribute_set_buffer_a(gsk_handle my_gsk_handle, GSK_BUF_ID bufID,
- const char *buffer, int bufSize)
-{
- struct Curl_gsk_descriptor *p;
- char *ebcdicbuf;
- int rc;
-
- if(!my_gsk_handle)
- return GSK_INVALID_HANDLE;
- if(!buffer)
- return GSK_OS400_ERROR_INVALID_POINTER;
- if(bufSize < 0)
- return GSK_ATTRIBUTE_INVALID_LENGTH;
- p = (struct Curl_gsk_descriptor *) my_gsk_handle;
- if(!bufSize)
- bufSize = strlen(buffer);
- ebcdicbuf = malloc(bufSize + 1);
- if(!ebcdicbuf)
- return GSK_INSUFFICIENT_STORAGE;
- QadrtConvertA2E(ebcdicbuf, buffer, bufSize, bufSize);
- ebcdicbuf[bufSize] = '\0';
- rc = gsk_attribute_set_buffer(p->h, bufID, ebcdicbuf, bufSize);
- free(ebcdicbuf);
- return rc;
-}
-
-
-int
-Curl_gsk_attribute_set_enum(gsk_handle my_gsk_handle, GSK_ENUM_ID enumID,
- GSK_ENUM_VALUE enumValue)
-{
- struct Curl_gsk_descriptor *p;
-
- if(!my_gsk_handle)
- return GSK_INVALID_HANDLE;
- p = (struct Curl_gsk_descriptor *) my_gsk_handle;
- return gsk_attribute_set_enum(p->h, enumID, enumValue);
-}
-
-
-int
-Curl_gsk_attribute_set_numeric_value(gsk_handle my_gsk_handle,
- GSK_NUM_ID numID, int numValue)
-{
- struct Curl_gsk_descriptor *p;
-
- if(!my_gsk_handle)
- return GSK_INVALID_HANDLE;
- p = (struct Curl_gsk_descriptor *) my_gsk_handle;
- return gsk_attribute_set_numeric_value(p->h, numID, numValue);
-}
-
-
-int
-Curl_gsk_attribute_set_callback(gsk_handle my_gsk_handle,
- GSK_CALLBACK_ID callBackID,
- void *callBackAreaPtr)
-{
- struct Curl_gsk_descriptor *p;
-
- if(!my_gsk_handle)
- return GSK_INVALID_HANDLE;
- p = (struct Curl_gsk_descriptor *) my_gsk_handle;
- return gsk_attribute_set_callback(p->h, callBackID, callBackAreaPtr);
-}
-
-
-static int
-cachestring(struct Curl_gsk_descriptor *p,
- const char *ebcdicbuf, int bufsize, const char **buffer)
-{
- int rc;
- char *asciibuf;
- struct gskstrlist *sp;
-
- for(sp = p->strlist; sp; sp = sp->next)
- if(sp->ebcdicstr == ebcdicbuf)
- break;
- if(!sp) {
- sp = (struct gskstrlist *) malloc(sizeof(*sp));
- if(!sp)
- return GSK_INSUFFICIENT_STORAGE;
- asciibuf = malloc(bufsize + 1);
- if(!asciibuf) {
- free(sp);
- return GSK_INSUFFICIENT_STORAGE;
- }
- QadrtConvertE2A(asciibuf, ebcdicbuf, bufsize, bufsize);
- asciibuf[bufsize] = '\0';
- sp->ebcdicstr = ebcdicbuf;
- sp->asciistr = asciibuf;
- sp->next = p->strlist;
- p->strlist = sp;
- }
- *buffer = sp->asciistr;
- return GSK_OK;
-}
-
-
-int
-Curl_gsk_attribute_get_buffer_a(gsk_handle my_gsk_handle, GSK_BUF_ID bufID,
- const char **buffer, int *bufSize)
-{
- struct Curl_gsk_descriptor *p;
- int rc;
- const char *mybuf;
- int mylen;
-
- if(!my_gsk_handle)
- return GSK_INVALID_HANDLE;
- if(!buffer || !bufSize)
- return GSK_OS400_ERROR_INVALID_POINTER;
- p = (struct Curl_gsk_descriptor *) my_gsk_handle;
- rc = gsk_attribute_get_buffer(p->h, bufID, &mybuf, &mylen);
- if(rc != GSK_OK)
- return rc;
- rc = cachestring(p, mybuf, mylen, buffer);
- if(rc == GSK_OK)
- *bufSize = mylen;
- return rc;
-}
-
-
-int
-Curl_gsk_attribute_get_enum(gsk_handle my_gsk_handle, GSK_ENUM_ID enumID,
- GSK_ENUM_VALUE *enumValue)
-{
- struct Curl_gsk_descriptor *p;
-
- if(!my_gsk_handle)
- return GSK_INVALID_HANDLE;
- p = (struct Curl_gsk_descriptor *) my_gsk_handle;
- return gsk_attribute_get_enum(p->h, enumID, enumValue);
-}
-
-
-int
-Curl_gsk_attribute_get_numeric_value(gsk_handle my_gsk_handle,
- GSK_NUM_ID numID, int *numValue)
-{
- struct Curl_gsk_descriptor *p;
-
- if(!my_gsk_handle)
- return GSK_INVALID_HANDLE;
- p = (struct Curl_gsk_descriptor *) my_gsk_handle;
- return gsk_attribute_get_numeric_value(p->h, numID, numValue);
-}
-
-
-int
-Curl_gsk_attribute_get_cert_info(gsk_handle my_gsk_handle,
- GSK_CERT_ID certID,
- const gsk_cert_data_elem **certDataElem,
- int *certDataElementCount)
-{
- struct Curl_gsk_descriptor *p;
-
- if(!my_gsk_handle)
- return GSK_INVALID_HANDLE;
- p = (struct Curl_gsk_descriptor *) my_gsk_handle;
- /* No need to convert code: text results are already in ASCII. */
- return gsk_attribute_get_cert_info(p->h, certID,
- certDataElem, certDataElementCount);
-}
-
-
-int
-Curl_gsk_secure_soc_misc(gsk_handle my_session_handle, GSK_MISC_ID miscID)
-{
- struct Curl_gsk_descriptor *p;
-
- if(!my_session_handle)
- return GSK_INVALID_HANDLE;
- p = (struct Curl_gsk_descriptor *) my_session_handle;
- return gsk_secure_soc_misc(p->h, miscID);
-}
-
-
-int
-Curl_gsk_secure_soc_read(gsk_handle my_session_handle, char *readBuffer,
- int readBufSize, int *amtRead)
-{
- struct Curl_gsk_descriptor *p;
-
- if(!my_session_handle)
- return GSK_INVALID_HANDLE;
- p = (struct Curl_gsk_descriptor *) my_session_handle;
- return gsk_secure_soc_read(p->h, readBuffer, readBufSize, amtRead);
-}
-
-
-int
-Curl_gsk_secure_soc_write(gsk_handle my_session_handle, char *writeBuffer,
- int writeBufSize, int *amtWritten)
-{
- struct Curl_gsk_descriptor *p;
-
- if(!my_session_handle)
- return GSK_INVALID_HANDLE;
- p = (struct Curl_gsk_descriptor *) my_session_handle;
- return gsk_secure_soc_write(p->h, writeBuffer, writeBufSize, amtWritten);
-}
-
-
-const char *
-Curl_gsk_strerror_a(int gsk_return_value)
-{
- return set_thread_string(LK_GSK_ERROR, gsk_strerror(gsk_return_value));
-}
-
-int
-Curl_gsk_secure_soc_startInit(gsk_handle my_session_handle,
- int IOCompletionPort,
- Qso_OverlappedIO_t *communicationsArea)
-{
- struct Curl_gsk_descriptor *p;
-
- if(!my_session_handle)
- return GSK_INVALID_HANDLE;
- p = (struct Curl_gsk_descriptor *) my_session_handle;
- return gsk_secure_soc_startInit(p->h, IOCompletionPort, communicationsArea);
-}
-
-#endif /* USE_GSKIT */
-
#ifdef HAVE_GSSAPI
/* ASCII wrappers for the GSSAPI procedures. */
@@ -745,7 +375,7 @@ OM_uint32
Curl_gss_import_name_a(OM_uint32 *minor_status, gss_buffer_t in_name,
gss_OID in_name_type, gss_name_t *out_name)
{
- int rc;
+ OM_uint32 rc;
unsigned int i;
gss_buffer_desc in;
@@ -859,7 +489,7 @@ Curl_gss_delete_sec_context_a(OM_uint32 *minor_status,
gss_ctx_id_t *context_handle,
gss_buffer_t output_token)
{
- int rc;
+ OM_uint32 rc;
rc = gss_delete_sec_context(minor_status, context_handle, output_token);
@@ -886,7 +516,7 @@ Curl_gss_delete_sec_context_a(OM_uint32 *minor_status,
void *
Curl_ldap_init_a(char *host, int port)
{
- unsigned int i;
+ size_t i;
char *ehost;
void *result;
@@ -1265,7 +895,7 @@ Curl_os400_bind(int sd, struct sockaddr *localaddr, int addrlen)
int
Curl_os400_sendto(int sd, char *buffer, int buflen, int flags,
- struct sockaddr *dstaddr, int addrlen)
+ const struct sockaddr *dstaddr, int addrlen)
{
int i;
struct sockaddr_storage laddr;
diff --git a/packages/OS400/os400sys.h b/packages/OS400/os400sys.h
index f10723848..d5ff412f2 100644
--- a/packages/OS400/os400sys.h
+++ b/packages/OS400/os400sys.h
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -32,7 +32,6 @@
/* Per-thread item identifiers. */
typedef enum {
- LK_SSL_ERROR,
LK_GSK_ERROR,
LK_LDAP_ERROR,
LK_CURL_VERSION,
@@ -41,6 +40,7 @@ typedef enum {
LK_EASY_STRERROR,
LK_SHARE_STRERROR,
LK_MULTI_STRERROR,
+ LK_URL_STRERROR,
LK_ZLIB_VERSION,
LK_ZLIB_MSG,
LK_LAST
diff --git a/packages/OS400/rpg-examples/HEADERAPI b/packages/OS400/rpg-examples/HEADERAPI
new file mode 100644
index 000000000..2c2407ea2
--- /dev/null
+++ b/packages/OS400/rpg-examples/HEADERAPI
@@ -0,0 +1,146 @@
+ * Curl header API: extract headers post transfer
+ *
+ h DFTACTGRP(*NO) ACTGRP(*NEW)
+ h OPTION(*NOSHOWCPY)
+ h BNDDIR('CURL')
+ *
+ **************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 H,CURL.INC
+ *
+ * Extract headers post transfer with the header API.
+ *
+ d pi
+ d url 120
+ *
+ d urllen s 10u 0 URL length
+ *
+ **************************************************************************
+
+ urllen = trimmed_length(url: %len(url));
+
+ // Do the curl stuff.
+
+ curl_global_init(CURL_GLOBAL_ALL);
+ main();
+ curl_global_cleanup();
+ *inlr = *on; // Exit
+ *
+ **************************************************************************
+ * Main procedure: do the curl job.
+ **************************************************************************
+ *
+ p main b
+ d main pi
+ *
+ d h s * Easy handle
+ d result s like(CURLcode) Curl return code
+ d inz(CURLE_OUT_OF_MEMORY)
+ d header ds likeds(curl_header) based(hp)
+ d strp1 s * Work string pointer
+ d strp2 s * Work string pointer
+ d inout s 52 For error display
+
+ // Create and fill curl handle.
+
+ h = curl_easy_init();
+ if h <> *NULL;
+ curl_easy_setopt_ccsid(h: CURLOPT_URL: %subst(url: 1: urllen): 0);
+ curl_easy_setopt(h: CURLOPT_FOLLOWLOCATION: 1);
+ curl_easy_setopt(h: CURLOPT_WRITEFUNCTION: %paddr(in_data_cb)); // Ignore input data
+
+ // Perform the request.
+
+ result = curl_easy_perform(h);
+ endif;
+
+ // Check for error and report if some.
+
+ if result <> CURLE_OK;
+ inout = %str(curl_easy_strerror_ccsid(result: 0));
+ dsply '' '*EXT' inout;
+ else;
+ if curl_easy_header_ccsid(h: 'Content-Type': 0: CURLH_HEADER: -1:
+ hp: 0) = CURLHE_OK;
+ strp2 = curl_to_ccsid(header.value: 0);
+ inout = 'Content-Type: ' + %str(strp2);
+ dsply inout;
+ curl_free(strp2);
+ endif;
+ dsply ' All server headers:';
+ hp = *NULL;
+ dow *on;
+ hp = curl_easy_nextheader(h: CURLH_HEADER: -1: hp);
+ if hp = *NULL;
+ leave;
+ endif;
+ strp1 = curl_to_ccsid(header.name: 0);
+ strp2 = curl_to_ccsid(header.value: 0);
+ inout = %str(strp1) + ': ' + %str(strp2) +
+ ' (' + %char(header.amount) + ')';
+ curl_free(strp2);
+ curl_free(strp1);
+ dsply inout;
+ enddo;
+ inout = 'Done';
+ dsply '' '*EXT' inout;
+ curl_easy_cleanup(h); // Release handle
+ endif;
+ p main e
+ *
+ **************************************************************************
+ * Dummy data input callback procedure.
+ **************************************************************************
+ *
+ p in_data_cb b
+ d in_data_cb pi 10u 0
+ d ptr * value Input data pointer
+ d size 10u 0 value Data element size
+ d nmemb 10u 0 value Data element count
+ d userdata * value User data pointer
+ *
+ return size * nmemb;
+ p in_data_cb e
+ *
+ **************************************************************************
+ * Get the length of right-trimmed string
+ **************************************************************************
+ *
+ p trimmed_length b
+ d trimmed_length pi 10u 0
+ d string 999999 const options(*varsize)
+ d length 10u 0 value
+ *
+ d len s 10u 0
+ *
+ len = %scan(X'00': string: 1: length); // Limit to zero-terminated string
+ if len = 0;
+ len = length + 1;
+ endif;
+ if len <= 1;
+ return 0;
+ endif;
+ return %checkr(' ': string: len - 1); // Trim right
+ p trimmed_length e
diff --git a/packages/OS400/rpg-examples/HTTPPOST b/packages/OS400/rpg-examples/HTTPPOST
new file mode 100644
index 000000000..21202ebe0
--- /dev/null
+++ b/packages/OS400/rpg-examples/HTTPPOST
@@ -0,0 +1,129 @@
+ * Curl MIME post data and display response
+ *
+ h DFTACTGRP(*NO) ACTGRP(*NEW)
+ h OPTION(*NOSHOWCPY)
+ h BNDDIR('CURL')
+ *
+ **************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 H,CURL.INC
+ *
+ * Example to HTTP POST data using the MIME API. Displays the response.
+ *
+ d pi
+ d userinput 120 User data to post
+ *
+ d url c 'http://httpbin.org/anything'
+ *
+ *
+ d inputlen s 10u 0 User input length
+ **************************************************************************
+
+ inputlen = trimmed_length(userinput: %len(userinput));
+
+ // Do the curl stuff.
+
+ curl_global_init(CURL_GLOBAL_ALL);
+ main();
+ curl_global_cleanup();
+ *inlr = *on; // Exit
+ *
+ **************************************************************************
+ * Main procedure: do the curl job.
+ **************************************************************************
+ *
+ p main b
+ d main pi
+ *
+ d h s * Easy handle
+ d result s like(CURLcode) Curl return code
+ d inz(CURLE_OUT_OF_MEMORY)
+ d errmsgp s * Error string pointer
+ d response s 52 For error display
+ d mime s * MIME handle
+ d mimepart s * MIME part handle
+ d parthdrs s * inz(*NULL) Part headers
+
+ // Create and fill curl handle.
+
+ h = curl_easy_init();
+ if h <> *NULL;
+ curl_easy_setopt_ccsid(h: CURLOPT_URL: url: 0);
+ curl_easy_setopt(h: CURLOPT_FOLLOWLOCATION: 1);
+ mime = curl_mime_init(h);
+ mimepart = curl_mime_addpart(mime);
+ curl_mime_name_ccsid(mimepart: 'autofield': 0);
+ curl_mime_data_ccsid(mimepart: 'program-generated value':
+ CURL_ZERO_TERMINATED: 0);
+ mimepart = curl_mime_addpart(mime);
+ curl_mime_name_ccsid(mimepart: 'userfield': 0);
+ curl_mime_data_ccsid(mimepart: %subst(userinput: 1: inputlen):
+ CURL_ZERO_TERMINATED: 0);
+ mimepart = curl_mime_addpart(mime);
+ curl_mime_name_ccsid(mimepart: 'ebcdicfield': 0);
+ curl_mime_data(mimepart: %subst(userinput: 1: inputlen): inputlen);
+ curl_mime_encoder_ccsid(mimepart: 'base64': 0);
+ // Avoid server to convert base64 to text.
+ parthdrs = curl_slist_append_ccsid(parthdrs:
+ 'Content-Transfer-Encoding: bit': 0);
+ curl_mime_headers(mimepart: parthdrs: 1);
+ curl_easy_setopt(h: CURLOPT_MIMEPOST: mime);
+
+ // Perform the request.
+
+ result = curl_easy_perform(h);
+ curl_mime_free(mime);
+ curl_easy_cleanup(h); // Release handle
+ endif;
+
+ // Check for error and report if some.
+
+ if result <> CURLE_OK;
+ errmsgp = curl_easy_strerror_ccsid(result: 0);
+ response = %str(errmsgp);
+ dsply '' '*EXT' response;
+ endif;
+ p main e
+ *
+ **************************************************************************
+ * Get the length of right-trimmed string
+ **************************************************************************
+ *
+ p trimmed_length b
+ d trimmed_length pi 10u 0
+ d string 999999 const options(*varsize)
+ d length 10u 0 value
+ *
+ d len s 10u 0
+ *
+ len = %scan(X'00': string: 1: length); // Limit to zero-terminated string
+ if len = 0;
+ len = length + 1;
+ endif;
+ if len <= 1;
+ return 0;
+ endif;
+ return %checkr(' ': string: len - 1); // Trim right
+ p trimmed_length e
diff --git a/packages/OS400/rpg-examples/INMEMORY b/packages/OS400/rpg-examples/INMEMORY
new file mode 100644
index 000000000..e6f43abc8
--- /dev/null
+++ b/packages/OS400/rpg-examples/INMEMORY
@@ -0,0 +1,159 @@
+ * Curl get in memory and count HTML tags
+ *
+ h DFTACTGRP(*NO) ACTGRP(*NEW)
+ h OPTION(*NOSHOWCPY)
+ h BNDDIR('CURL')
+ *
+ **************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 H,CURL.INC
+ *
+ * Example to request the URL given as command line parameter and count
+ * HTML tags in its response.
+ *
+ d pi
+ d url 120
+ *
+ d countdata ds qualified based(###dummyptr) User data type
+ d tagcount 10u 0 Tag counter
+ d tagopen n Possible opening tag
+ *
+ d urllen s 10u 0 URL length
+ *
+ **************************************************************************
+
+ urllen = trimmed_length(url: %len(url));
+
+ // Do the curl stuff.
+
+ curl_global_init(CURL_GLOBAL_ALL);
+ main();
+ curl_global_cleanup();
+ *inlr = *on; // Exit
+ *
+ **************************************************************************
+ * Main procedure: do the curl job.
+ **************************************************************************
+ *
+ p main b
+ d main pi
+ *
+ d h s * Easy handle
+ d result s like(CURLcode) Curl return code
+ d inz(CURLE_OUT_OF_MEMORY)
+ d errmsgp s * Error string pointer
+ d response s 52 For error display
+ d counter ds likeds(countdata) HTML tag counter
+
+ counter.tagcount = 0;
+ counter.tagopen = *off;
+
+ // Create and fill curl handle.
+
+ h = curl_easy_init();
+ if h <> *NULL;
+ curl_easy_setopt_ccsid(h: CURLOPT_URL: %subst(url: 1: urllen): 0);
+ curl_easy_setopt(h: CURLOPT_FOLLOWLOCATION: 1);
+ curl_easy_setopt(h: CURLOPT_WRITEFUNCTION: %paddr(in_data_cb));
+ curl_easy_setopt(h: CURLOPT_WRITEDATA: %addr(counter));
+
+ // Perform the request.
+
+ result = curl_easy_perform(h);
+ curl_easy_cleanup(h); // Release handle
+ endif;
+
+ // Check for error and report if some.
+
+ if result <> CURLE_OK;
+ errmsgp = curl_easy_strerror_ccsid(result: 0);
+ response = %str(errmsgp);
+ dsply '' '*EXT' response;
+ else;
+ // Display the tag count.
+
+ response = 'Tag count: ' + %char(counter.tagcount);
+ dsply '' '*EXT' response;
+ endif;
+ p main e
+ *
+ **************************************************************************
+ * Data input callback procedure.
+ **************************************************************************
+ *
+ p in_data_cb b
+ d in_data_cb pi 10u 0
+ d ptr * value Input data pointer
+ d size 10u 0 value Data element size
+ d nmemb 10u 0 value Data element count
+ d userdata * value User data pointer
+ *
+ d counter ds likeds(countdata) based(userdata) HTML tag counter
+ d ebcdata s * EBCDIC data pointer
+ d chars s 1 based(ebcdata) dim(1000000)
+ d i s 10u 0 Character position
+ *
+ size = size * nmemb; // The size in bytes.
+ ebcdata = curl_to_ccsid(%str(ptr: size): 0); // Convert to EBCDIC.
+ i = 1;
+ dow i <= size;
+ if counter.tagopen; // Did we see '<' ?
+ counter.tagopen = *off;
+ if chars(i) <> '/'; // Reject closing tag.
+ counter.tagcount = counter.tagcount + 1; // Count this tag.
+ endif;
+ else;
+ i = %scan('<': %str(ebcdata): i); // Search next possible tag.
+ if i = 0;
+ leave;
+ endif;
+ counter.tagopen = *on; // Found one: flag it.
+ endif;
+ i = i + 1;
+ enddo;
+ curl_free(ebcdata);
+ return size;
+ p in_data_cb e
+ *
+ **************************************************************************
+ * Get the length of right-trimmed string
+ **************************************************************************
+ *
+ p trimmed_length b
+ d trimmed_length pi 10u 0
+ d string 999999 const options(*varsize)
+ d length 10u 0 value
+ *
+ d len s 10u 0
+ *
+ len = %scan(X'00': string: 1: length); // Limit to zero-terminated string
+ if len = 0;
+ len = length + 1;
+ endif;
+ if len <= 1;
+ return 0;
+ endif;
+ return %checkr(' ': string: len - 1); // Trim right
+ p trimmed_length e
diff --git a/packages/OS400/rpg-examples/SIMPLE1 b/packages/OS400/rpg-examples/SIMPLE1
new file mode 100644
index 000000000..52c0c93e8
--- /dev/null
+++ b/packages/OS400/rpg-examples/SIMPLE1
@@ -0,0 +1,108 @@
+ * Curl simple URL request
+ *
+ h DFTACTGRP(*NO) ACTGRP(*NEW)
+ h OPTION(*NOSHOWCPY)
+ h BNDDIR('CURL')
+ *
+ **************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 H,CURL.INC
+ *
+ * Simple example to request the URL given as command line parameter and
+ * output its response.
+ *
+ d pi
+ d url 120
+ *
+ d urllen s 10u 0 URL length
+ *
+ **************************************************************************
+ *
+ c eval urllen = trimmed_length(url: %len(url))
+ *
+ * Do the curl stuff.
+ *
+ c callp curl_global_init(CURL_GLOBAL_ALL)
+ c callp main
+ c callp curl_global_cleanup()
+ c seton lr Exit
+ *
+ **************************************************************************
+ * Main procedure: do the curl job.
+ **************************************************************************
+ *
+ p main b
+ d main pi
+ *
+ d h s * Easy handle
+ d result s like(CURLcode) Curl return code
+ d inz(CURLE_OUT_OF_MEMORY)
+ d errmsgp s * Error string pointer
+ d response s 52 For error display
+ *
+ * Create and fill curl handle.
+ *
+ c eval h = curl_easy_init()
+ c if h <> *NULL
+ c callp curl_easy_setopt_ccsid(h: CURLOPT_URL:
+ c %subst(url: 1: urllen): 0)
+ c callp curl_easy_setopt_long(h:
+ c CURLOPT_FOLLOWLOCATION: 1)
+ *
+ * Perform the request.
+ *
+ c eval result = curl_easy_perform(h)
+ c callp curl_easy_cleanup(h) Release handle
+ c endif
+ *
+ * Check for error and report if some.
+ *
+ c if result <> CURLE_OK
+ c eval errmsgp = curl_easy_strerror_ccsid(result: 0)
+ c eval response = %str(errmsgp)
+ c dsply response
+ c endif
+ p main e
+ *
+ **************************************************************************
+ * Get the length of right-trimmed string
+ **************************************************************************
+ *
+ p trimmed_length b
+ d trimmed_length pi 10u 0
+ d string 999999 const options(*varsize)
+ d length 10u 0 value
+ *
+ d len s 10u 0
+ *
+ c eval len = %scan(X'00': string: 1: length) Limit 0-terminated
+ c if len = 0
+ c eval len = length + 1
+ c endif
+ c if len <= 1
+ c return 0
+ c endif
+ c return %checkr(' ': string: len - 1) Trim right
+ p trimmed_length e
diff --git a/packages/OS400/rpg-examples/SIMPLE2 b/packages/OS400/rpg-examples/SIMPLE2
new file mode 100644
index 000000000..493c91ee2
--- /dev/null
+++ b/packages/OS400/rpg-examples/SIMPLE2
@@ -0,0 +1,108 @@
+ * Curl simple URL request (free-format RPG)
+ *
+ ctl-opt dftactgrp(*NO) actgrp(*NEW)
+ option(*NOSHOWCPY)
+ bnddir('CURL');
+ *
+ **************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 H,CURL.INC
+
+ * Simple free-format RPG program to request the URL given as command line
+ * parameter and output its response.
+
+ dcl-pi *N;
+ url char(120);
+ end-pi;
+
+ dcl-s urllen int(10); // URL length
+
+ **************************************************************************
+
+ urllen = trimmed_length(url: %len(url));
+
+ // Do the curl stuff.
+
+ curl_global_init(CURL_GLOBAL_ALL);
+ main();
+ curl_global_cleanup();
+ *inlr = *on; // Exit
+
+ **************************************************************************
+ * Main procedure: do the curl job.
+ **************************************************************************
+
+ dcl-proc main;
+ dcl-pi *N end-pi;
+
+ dcl-s h pointer; // Easy handle
+ dcl-s result like(CURLcode) inz(CURLE_OUT_OF_MEMORY); // Curl return code
+ dcl-s errmsgp pointer; // Error string pointer
+ dcl-s response char(52); // For error display
+
+ // Create and fill curl handle.
+
+ h = curl_easy_init();
+ if h <> *NULL;
+ curl_easy_setopt_ccsid(h: CURLOPT_URL: %subst(url: 1: urllen):
+ 0);
+ curl_easy_setopt(h: CURLOPT_FOLLOWLOCATION: 1);
+
+ // Perform the request.
+
+ result = curl_easy_perform(h);
+ curl_easy_cleanup(h); // Release handle
+ endif;
+
+ // Check for error and report if some.
+
+ if result <> CURLE_OK;
+ errmsgp = curl_easy_strerror_ccsid(result: 0);
+ response = %str(errmsgp);
+ dsply '' '*EXT' response;
+ endif;
+ end-proc;
+ *
+ **************************************************************************
+ * Get the length of right-trimmed string
+ **************************************************************************
+ *
+ dcl-proc trimmed_length;
+ dcl-pi *N uns(10);
+ string char(9999999) const options(*varsize);
+ length uns(10) value;
+ end-pi;
+
+ dcl-s len uns(10);
+
+ len = %scan(X'00': string: 1: length); // Limit to zero-terminated string
+ if len = 0;
+ len = length + 1;
+ endif;
+ if len <= 1;
+ return 0;
+ endif;
+ return %checkr(' ': string: len - 1); // Trim right
+ end-proc;
diff --git a/packages/OS400/rpg-examples/SMTPSRCMBR b/packages/OS400/rpg-examples/SMTPSRCMBR
new file mode 100644
index 000000000..88f4fd25c
--- /dev/null
+++ b/packages/OS400/rpg-examples/SMTPSRCMBR
@@ -0,0 +1,239 @@
+ * Curl SMTP send source member as attachment
+ *
+ h DFTACTGRP(*NO) ACTGRP(*NEW)
+ h OPTION(*NOSHOWCPY)
+ h BNDDIR('CURL')
+ *
+ **************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 H,CURL.INC
+ *
+ * Example to SMTP send source member as attachment via SMTP.
+ *
+ fRPGXAMPLESif e disk extmbr(program_name)
+ f rename(RPGXAMPLES: record)
+ d pi
+ d url 60 SMTP server URL
+ d recipient_mail 40 Recipient mail addr
+ *
+ d program_name c 'SMTPSRCMBR' Member name to send
+ d sender_name c 'Curl' Sender name
+ d sender_mail c 'curl@example.com' Sender e-mail
+ d recipient_name c 'WIMC' Recipient name
+ d crlf c X'0D25'
+ *
+ d urllen s 10u 0 URL length
+ d rcptmlen s 10u 0 Recipient mail len
+ *
+ **************************************************************************
+
+ urllen = trimmed_length(url: %len(url));
+ rcptmlen = trimmed_length(recipient_mail: %len(recipient_mail));
+
+ // Do the curl stuff.
+
+ curl_global_init(CURL_GLOBAL_ALL);
+ main();
+ curl_global_cleanup();
+ *inlr = *on; // Exit
+ *
+ **************************************************************************
+ * Main procedure: do the curl job.
+ **************************************************************************
+ *
+ p main b
+ d main pi
+ *
+ d h s * Easy handle
+ d result s like(CURLcode) Curl return code
+ d inz(CURLE_OUT_OF_MEMORY)
+ d errmsgp s * Error string pointer
+ d response s 52 For error display
+ d headers s * inz(*NULL) Mail headers
+ d rcpts s * inz(*NULL) List of recipients
+ d mime s * Mail MIME structure
+ d mimepart s * Mail part
+
+ // Create and fill curl handle.
+
+ h = curl_easy_init();
+ if h <> *NULL;
+ rcpts = curl_slist_append_ccsid(rcpts:
+ %subst(recipient_mail: 1: rcptmlen): 0);
+ headers = curl_slist_append_ccsid(headers: 'From: ' + sender_name +
+ ' <' + sender_mail + '>':
+ 0);
+ headers = curl_slist_append_ccsid(headers: 'To: ' + recipient_name +
+ ' <' + %subst(recipient_mail: 1: rcptmlen) + '>': 0);
+ headers = curl_slist_append_ccsid(headers: 'Subject: An ILE/RPG ' +
+ 'source program': 0);
+ headers = curl_slist_append_ccsid(headers: 'Date: ' + mail_date():
+ 0);
+ curl_easy_setopt_ccsid(h: CURLOPT_URL: %subst(url: 1: urllen): 0);
+ curl_easy_setopt_ccsid(h: CURLOPT_MAIL_FROM: sender_mail: 0);
+ curl_easy_setopt(h: CURLOPT_MAIL_RCPT: rcpts);
+ curl_easy_setopt(h: CURLOPT_HTTPHEADER: headers);
+ mime = curl_mime_init(h);
+ mimepart = curl_mime_addpart(mime);
+ curl_mime_data_ccsid(mimepart: 'Please find the ILE/RPG program ' +
+ program_name + ' source code in ' +
+ 'attachment.' + crlf:
+ CURL_ZERO_TERMINATED: 0);
+ mimepart = curl_mime_addpart(mime);
+ curl_mime_data_cb(mimepart: -1: %paddr(out_data_cb): *NULL: *NULL:
+ *NULL);
+ curl_mime_filename_ccsid(mimepart: program_name: 0);
+ curl_mime_encoder_ccsid(mimepart: 'quoted-printable': 0);
+ curl_easy_setopt(h: CURLOPT_MIMEPOST: mime);
+
+ // Perform the request.
+
+ setll *start RPGXAMPLES;
+ result = curl_easy_perform(h);
+
+ // Cleanup.
+
+ curl_mime_free(mime);
+ curl_slist_free_all(headers);
+ curl_slist_free_all(rcpts);
+ curl_easy_cleanup(h); // Release handle
+ endif;
+
+ // Check for error and report if some.
+
+ if result <> CURLE_OK;
+ errmsgp = curl_easy_strerror_ccsid(result: 0);
+ response = %str(errmsgp);
+ dsply '' '*EXT' response;
+ else;
+ response = 'Mail sent';
+ dsply '' '*EXT' response;
+ endif;
+ p main e
+ *
+ **************************************************************************
+ * Attachment data callback procedure.
+ **************************************************************************
+ *
+ p out_data_cb b
+ d out_data_cb pi 10u 0
+ d ptr * value Output data pointer
+ d size 10u 0 value Data element size
+ d nmemb 10u 0 value Data element count
+ d userdata * value User data pointer
+ *
+ d buffer s 9999999 based(ptr) Output buffer
+ d line s 9999999 based(lineptr) ASCII line pointer
+ d linelen s 10u 0
+ d i s 10u 0 Buffer position
+ *
+ size = size * nmemb; // The size in bytes.
+ i = 0;
+ dow size - i >= %len(SRCDTA) + %len(crlf) and not %eof(RPGXAMPLES);
+ read record;
+ lineptr = curl_from_ccsid(%trimr(SRCDTA) + crlf: 0);
+ linelen = %scan(X'00': line) - 1;
+ %subst(buffer: i + 1: linelen) = %str(lineptr);
+ curl_free(lineptr);
+ i = i + linelen;
+ enddo;
+ return i;
+ p out_data_cb e
+ *
+ **************************************************************************
+ * Mail-formatted date procedure.
+ **************************************************************************
+ *
+ p mail_date b
+ d mail_date pi 50 varying
+ *
+ d sysval ds qualified To retrieve timezone
+ d numsysval 10u 0
+ d offset 10u 0
+ d 100
+ *
+ d get_sysval pr extpgm('QWCRSVAL')
+ d outdata likeds(sysval)
+ d outsize 10u 0 const
+ d numsysval 10u 0 const
+ d name 10 const
+ d errcode 10000 options(*varsize)
+ *
+ d now ds qualified
+ d ts z
+ d year 4s 0 overlay(ts: 1)
+ d month 2s 0 overlay(ts: 6)
+ d day 2s 0 overlay(ts: 9)
+ d hour 2s 0 overlay(ts: 12)
+ d minute 2 overlay(ts: 15)
+ d second 2 overlay(ts: 18)
+ *
+ d sysvalinfo ds qualified based(sysvalinfoptr)
+ d name 10
+ d type 1
+ d status 1
+ d length 10u 0
+ d value 99999
+ *
+ d qusec ds qualified
+ d 10u 0 inz(0)
+ *
+ d weekday s 10u 0
+ *
+ now.ts = %timestamp(*SYS);
+ get_sysval(sysval: %len(sysval): 1: 'QUTCOFFSET': qusec);
+ sysvalinfoptr = %addr(sysval) + sysval.offset;
+ weekday = %rem(%diff(now.ts: %timestamp('2001-01-01-00.00.00.000000'):
+ *DAYS): 7);
+ return %subst('MonTueWedThuFriSatSun': 3 * weekday + 1: 3) + ', ' +
+ %char(now.day) + ' ' +
+ %subst('JanFebMarAprMayJunJulAugSepOctNovDec':
+ 3 * now.month - 2: 3) + ' ' +
+ %char(now.year) + ' ' +
+ %char(now.hour) + ':' + now.minute + ':' + now.second + ' ' +
+ %subst(sysvalinfo.value: 1: sysvalinfo.length);
+ p mail_date e
+ *
+ **************************************************************************
+ * Get the length of right-trimmed string
+ **************************************************************************
+ *
+ p trimmed_length b
+ d trimmed_length pi 10u 0
+ d string 999999 const options(*varsize)
+ d length 10u 0 value
+ *
+ d addrdiff s 10i 0
+ d len s 10u 0
+ *
+ len = %scan(X'00': string: 1: length); // Limit to zero-terminated string
+ if len = 0;
+ len = length + 1;
+ endif;
+ if len <= 1;
+ return 0;
+ endif;
+ return %checkr(' ': string: len - 1); // Trim right
+ p trimmed_length e
diff --git a/packages/README b/packages/README
deleted file mode 100644
index 2487d95d0..000000000
--- a/packages/README
+++ /dev/null
@@ -1,27 +0,0 @@
- _ _ ____ _
- ___| | | | _ \| |
- / __| | | | |_) | |
- | (__| |_| | _ <| |___
- \___|\___/|_| \_\_____|
-
-PACKAGES
-
- This directory and all its subdirectories are for special package
-information, template, scripts and docs. The files herein should be of use for
-those of you who want to package curl in a binary or source format using one
-of those custom formats.
-
- The hierarchy for these directories is something like this:
-
- packages/[OS]/[FORMAT]/
-
- Currently, we have Win32 and Linux for [OS]. There might be different formats
-for the same OS so for Linux we have RPM as format.
-
- We might need to add some differentiation for CPU as well, as there is
-Linux-RPMs for several CPUs. However, it might not be necessary since the
-packaging should be pretty much the same no matter what CPU that is used.
-
- For each unique OS-FORMAT pair, there's a directory to "fill"! I'd like to
-see a single README with as much details as possible, and then I'd like some
-template files for the package process.
diff --git a/packages/README.md b/packages/README.md
new file mode 100644
index 000000000..f52f8e477
--- /dev/null
+++ b/packages/README.md
@@ -0,0 +1,12 @@
+<!--
+Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+
+SPDX-License-Identifier: curl
+-->
+
+# Packages
+
+ This directory and all its subdirectories are for special package
+information, templates, scripts and docs. The files herein should be of use
+for those of you who want to package curl in a binary or source format for
+these platforms.
diff --git a/packages/vms/Makefile.am b/packages/vms/Makefile.am
index f4b2d68be..e869a8978 100644
--- a/packages/vms/Makefile.am
+++ b/packages/vms/Makefile.am
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/packages/vms/Makefile.in b/packages/vms/Makefile.in
index 78404196f..344cbac03 100644
--- a/packages/vms/Makefile.in
+++ b/packages/vms/Makefile.in
@@ -95,7 +95,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.m4 \
$(top_srcdir)/m4/curl-confopts.m4 \
$(top_srcdir)/m4/curl-functions.m4 \
$(top_srcdir)/m4/curl-gnutls.m4 \
- $(top_srcdir)/m4/curl-mbedtls.m4 $(top_srcdir)/m4/curl-nss.m4 \
+ $(top_srcdir)/m4/curl-mbedtls.m4 \
$(top_srcdir)/m4/curl-openssl.m4 \
$(top_srcdir)/m4/curl-override.m4 \
$(top_srcdir)/m4/curl-reentrant.m4 \
@@ -147,6 +147,8 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APACHECTL = @APACHECTL@
+APXS = @APXS@
AR = @AR@
AR_FLAGS = @AR_FLAGS@
AS = @AS@
@@ -155,6 +157,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@
+CADDY = @CADDY@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -216,6 +219,8 @@ HAVE_LIBZ = @HAVE_LIBZ@
HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
HAVE_PROTO_BSDSOCKET_H = @HAVE_PROTO_BSDSOCKET_H@
HAVE_ZSTD = @HAVE_ZSTD@
+HTTPD = @HTTPD@
+HTTPD_NGHTTPX = @HTTPD_NGHTTPX@
IDN_ENABLED = @IDN_ENABLED@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -243,7 +248,6 @@ MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
NROFF = @NROFF@
-NSS_LIBS = @NSS_LIBS@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
@@ -274,6 +278,7 @@ SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@
SUPPORT_FEATURES = @SUPPORT_FEATURES@
SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_NGHTTPX = @TEST_NGHTTPX@
USE_ARES = @USE_ARES@
USE_BEARSSL = @USE_BEARSSL@
USE_GNUTLS = @USE_GNUTLS@
@@ -287,9 +292,8 @@ USE_NGHTTP2 = @USE_NGHTTP2@
USE_NGHTTP3 = @USE_NGHTTP3@
USE_NGTCP2 = @USE_NGTCP2@
USE_NGTCP2_CRYPTO_GNUTLS = @USE_NGTCP2_CRYPTO_GNUTLS@
-USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@
+USE_NGTCP2_CRYPTO_QUICTLS = @USE_NGTCP2_CRYPTO_QUICTLS@
USE_NGTCP2_CRYPTO_WOLFSSL = @USE_NGTCP2_CRYPTO_WOLFSSL@
-USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_RUSTLS = @USE_RUSTLS@
@@ -368,7 +372,7 @@ top_srcdir = @top_srcdir@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/packages/vms/backup_gnv_curl_src.com b/packages/vms/backup_gnv_curl_src.com
index 900a62b84..298f11f80 100644
--- a/packages/vms/backup_gnv_curl_src.com
+++ b/packages/vms/backup_gnv_curl_src.com
@@ -1,7 +1,5 @@
$! File: Backup_gnv_curl_src.com
$!
-$! $Id$
-$!
$! Procedure to create backup save sets for installing in a PCSI kit.
$!
$! To comply with most Open Source licenses, the source used for building
@@ -17,7 +15,7 @@ $! This file is created from a template file for the purpose of making it
$! easier to port Unix code, particularly open source code to VMS.
$! Therefore permission is freely granted for any use.
$!
-$! Copyright 2013 - 2022, John Malmberg
+$! Copyright (C) John Malmberg
$!
$! Permission to use, copy, modify, and/or distribute this software for any
$! purpose with or without fee is hereby granted, provided that the above
@@ -33,8 +31,6 @@ $! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
$!
$! SPDX-License-Identifier: ISC
$!
-$! 13-Jun-2009 J. Malmberg
-$!
$!===========================================================================
$!
$! Save default
diff --git a/packages/vms/build_curl-config_script.com b/packages/vms/build_curl-config_script.com
index b6a6575ec..1667d0745 100644
--- a/packages/vms/build_curl-config_script.com
+++ b/packages/vms/build_curl-config_script.com
@@ -2,7 +2,7 @@ $! build_curl-config_script.com
$!
$! This generates the curl-config. script from the curl-config.in file.
$!
-$! Copyright 2014 - 2022, John Malmberg
+$! Copyright (C) John Malmberg
$!
$! Permission to use, copy, modify, and/or distribute this software for any
$! purpose with or without fee is hereby granted, provided that the above
@@ -18,8 +18,6 @@ $! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
$!
$! SPDX-License-Identifier: ISC
$!
-$! 16-Dec-2014 J. Malmberg
-$!
$!===========================================================================
$!
$! Skip this if the curl-config. already exists.
diff --git a/packages/vms/build_gnv_curl.com b/packages/vms/build_gnv_curl.com
index 15931fb86..36e728113 100644
--- a/packages/vms/build_gnv_curl.com
+++ b/packages/vms/build_gnv_curl.com
@@ -1,10 +1,8 @@
$! File: build_gnv_curl.com
$!
-$! $Id$
-$!
$! All in one build procedure
$!
-$! Copyright 2013 - 2022, John Malmberg
+$! Copyright (C) John Malmberg
$!
$! Permission to use, copy, modify, and/or distribute this software for any
$! purpose with or without fee is hereby granted, provided that the above
@@ -20,7 +18,6 @@ $! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
$!
$! SPDX-License-Identifier: ISC
$!
-$! 11-Jun-2009 J. Malmberg
$!-----------------------------------------------------------------------
$!
$ @setup_gnv_curl_build.com
diff --git a/packages/vms/build_gnv_curl_pcsi_desc.com b/packages/vms/build_gnv_curl_pcsi_desc.com
index 589de2c72..85674261c 100644
--- a/packages/vms/build_gnv_curl_pcsi_desc.com
+++ b/packages/vms/build_gnv_curl_pcsi_desc.com
@@ -1,7 +1,5 @@
$! File: Build_GNV_CURL_PCSI_DESC.COM
$!
-$! $Id$
-$!
$! Build the *.pcsi$text file in the following sections:
$! Required software dependencies.
$! install/upgrade/postinstall steps.
@@ -31,7 +29,7 @@ $! A rename action section is needed to make sure that the files are
$! created in the GNV$GNU: in the correct case, and to create the alias
$! link [usr.bin]curl. for [usr.bin]curl.exe.
$!
-$! Copyright 2013 - 2022, John Malmberg
+$! Copyright (C) John Malmberg
$!
$! Permission to use, copy, modify, and/or distribute this software for any
$! purpose with or without fee is hereby granted, provided that the above
@@ -47,8 +45,6 @@ $! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
$!
$! SPDX-License-Identifier: ISC
$!
-$! 15-Jun-2009 J. Malmberg
-$!
$!===========================================================================
$!
$ kit_name = f$trnlnm("GNV_PCSI_KITNAME")
diff --git a/packages/vms/build_gnv_curl_pcsi_text.com b/packages/vms/build_gnv_curl_pcsi_text.com
index 9295ffb9d..8f109c1e7 100644
--- a/packages/vms/build_gnv_curl_pcsi_text.com
+++ b/packages/vms/build_gnv_curl_pcsi_text.com
@@ -1,7 +1,5 @@
$! File: Build_GNV_curl_pcsi_text.com
$!
-$! $Id$
-$!
$! Build the *.pcsi$text file from the four components:
$! 1. Generated =product header section
$! 2. [--]readme. file from the Curl distribution, modified to fit
@@ -12,7 +10,7 @@ $! 4. Generated Producer section.
$!
$! Set the name of the release notes from the GNV_PCSI_FILENAME_BASE
$!
-$! Copyright 2013 - 2022, John Malmberg
+$! Copyright (C) John Malmberg
$!
$! Permission to use, copy, modify, and/or distribute this software for any
$! purpose with or without fee is hereby granted, provided that the above
@@ -28,8 +26,6 @@ $! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
$!
$! SPDX-License-Identifier: ISC
$!
-$! 15-Jun-2009 J. Malmberg
-$!
$!===========================================================================
$!
$ kit_name = f$trnlnm("GNV_PCSI_KITNAME")
diff --git a/packages/vms/build_gnv_curl_release_notes.com b/packages/vms/build_gnv_curl_release_notes.com
index 7673ab76e..0da94454d 100644
--- a/packages/vms/build_gnv_curl_release_notes.com
+++ b/packages/vms/build_gnv_curl_release_notes.com
@@ -1,7 +1,5 @@
$! File: Build_GNV_curl_release_notes.com
$!
-$! $Id$
-$!
$! Build the release note file from the four components:
$! 1. The curl_release_note_start.txt
$! 2. The hp_ssl_release_info.txt
@@ -11,7 +9,7 @@ $!
$! Set the name of the release notes from the GNV_PCSI_FILENAME_BASE
$! logical name.
$!
-$! Copyright 2013 - 2022, John Malmberg
+$! Copyright (C) John Malmberg
$!
$! Permission to use, copy, modify, and/or distribute this software for any
$! purpose with or without fee is hereby granted, provided that the above
@@ -27,8 +25,6 @@ $! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
$!
$! SPDX-License-Identifier: ISC
$!
-$! 14-Jun-2009 J. Malmberg
-$!
$!===========================================================================
$!
$ base_file = f$trnlnm("GNV_PCSI_FILENAME_BASE")
diff --git a/packages/vms/build_libcurl_pc.com b/packages/vms/build_libcurl_pc.com
index e5eef33bf..294ae084f 100644
--- a/packages/vms/build_libcurl_pc.com
+++ b/packages/vms/build_libcurl_pc.com
@@ -1,10 +1,8 @@
$! File: build_libcurl_pc.com
$!
-$! $Id:$
-$!
$! Build the libcurl.pc file from the libcurl.pc.in file
$!
-$! Copyright 2013 - 2022, John Malmberg
+$! Copyright (C) John Malmberg
$!
$! Permission to use, copy, modify, and/or distribute this software for any
$! purpose with or without fee is hereby granted, provided that the above
@@ -20,8 +18,6 @@ $! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
$!
$! SPDX-License-Identifier: ISC
$!
-$! 15-Jun-2013 J. Malmberg
-$!
$!===========================================================================
$!
$! Skip this if the libcurl.pc already exists.
diff --git a/packages/vms/clean_gnv_curl.com b/packages/vms/clean_gnv_curl.com
index 0fe31177d..198c0debf 100644
--- a/packages/vms/clean_gnv_curl.com
+++ b/packages/vms/clean_gnv_curl.com
@@ -1,7 +1,5 @@
$! File: clean_gnv_curl.COM
$!
-$! $Id$
-$!
$! The GNV environment leaves behind some during the configure and build
$! procedure that need to be cleaned up.
$!
@@ -15,7 +13,7 @@ $! Parameter P1: REALCLEAN
$! This removes all build products and brings the environment back to
$! the point where the gnv_curl_configure.sh procedure needs to be run again.
$!
-$! Copyright 2009 - 2022, John Malmberg
+$! Copyright (C) John Malmberg
$!
$! Permission to use, copy, modify, and/or distribute this software for any
$! purpose with or without fee is hereby granted, provided that the above
@@ -31,7 +29,6 @@ $! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
$!
$! SPDX-License-Identifier: ISC
$!
-$! 07-Jul-2009 J. Malmberg
$!============================================================================
$!
$! Save this so we can get back.
diff --git a/packages/vms/compare_curl_source.com b/packages/vms/compare_curl_source.com
index 1801f72b5..3f7542de0 100644
--- a/packages/vms/compare_curl_source.com
+++ b/packages/vms/compare_curl_source.com
@@ -1,7 +1,5 @@
$! Compare_curl_source.com
$!
-$! $Id$
-$!
$! This procedure compares the files in two directories and reports the
$! differences. It is customized for the vmsports repository layout.
$!
@@ -69,7 +67,7 @@ $!
$! This is to make sure that the backup save set for the unmodified
$! source is up to date.
$!
-$! Copyright 2013 - 2022, John Malmberg
+$! Copyright (C) John Malmberg
$!
$! Permission to use, copy, modify, and/or distribute this software for any
$! purpose with or without fee is hereby granted, provided that the above
@@ -85,7 +83,6 @@ $! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
$!
$! SPDX-License-Identifier: ISC
$!
-$! 18-Aug-2011 J. Malmberg
$!==========================================================================
$!
$! Update missing/changed files.
diff --git a/packages/vms/config_h.com b/packages/vms/config_h.com
index 4612c6c2b..6e4e03963 100644
--- a/packages/vms/config_h.com
+++ b/packages/vms/config_h.com
@@ -1,7 +1,5 @@
$! File: config_h.com
$!
-$! $Id: config_h.com,v 1.1.1.1 2012/12/02 19:25:21 wb8tyw Exp $
-$!
$! This procedure attempts to figure out how to build a config.h file
$! for the current project.
$!
@@ -28,7 +26,7 @@ $!
$! This procedure may not guess the options correctly for all architectures,
$! and is a work in progress.
$!
-$! Copyright 2013 - 2022, John Malmberg
+$! Copyright (C) John Malmberg
$!
$! Permission to use, copy, modify, and/or distribute this software for any
$! purpose with or without fee is hereby granted, provided that the above
@@ -44,15 +42,6 @@ $! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
$!
$! SPDX-License-Identifier: ISC
$!
-$! 15-Jan-2001 J. Malmberg Original
-$! 29-Apr-2001 J. Malmberg Also look for config.*in* in a [.include]
-$! subdirectory
-$! 30-Apr-2001 J. Malmberg Update for SAMBA checks
-$! 09-Apr-2005 J. Malmberg Update for RSYNC and large file.
-$! 29-Sep-2011 J. Malmberg Update for Bash 4.2
-$! 01-Mar-2012 J. Malmberg Warn about getcwd(0,0)
-$! 21-Dec-2012 J. Malmberg Update for gawk
-$! 29-Dec-2012 J. Malmberg Update for curl
$!============================================================================
$!
$ss_normal = 1
@@ -1539,13 +1528,6 @@ $ write tf "#endif"
$ endif
$ goto cfgh_in_loop1
$ endif
-$ if key2b .eqs. "SHORT"
-$ then
-$ write tf "#ifndef SIZEOF_SHORT"
-$ write tf "#define SIZEOF_SHORT 2"
-$ write tf "#endif"
-$ goto cfgh_in_loop1
-$ endif
$ write tf "/* ", xline, " */"
$ goto cfgh_in_loop1
$ endif
diff --git a/packages/vms/curl_crtl_init.c b/packages/vms/curl_crtl_init.c
index 8b5da62d5..6ae7e8c3a 100644
--- a/packages/vms/curl_crtl_init.c
+++ b/packages/vms/curl_crtl_init.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -39,7 +39,7 @@
* On VMS versions that are too old to use the feature setting API, this
* module falls back to using logical names.
*
- * Copyright 2013, John Malmberg
+ * Copyright (C) John Malmberg
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -130,7 +130,7 @@ static int sys_trnlnm
status = SYS$TRNLNM(&attr, &table_dsc, &name_dsc, 0, itlst);
- if ($VMS_STATUS_SUCCESS(status)) {
+ if($VMS_STATUS_SUCCESS(status)) {
/* Null terminate and return the string */
/*--------------------------------------*/
@@ -192,7 +192,7 @@ static void set_feature_default(const char *name, int value)
index = decc$feature_get_index(name);
- if (index > 0)
+ if(index > 0)
decc$feature_set_value (index, 0, value);
}
#endif
@@ -205,7 +205,7 @@ static void set_features(void)
status = sys_trnlnm("GNV$UNIX_SHELL",
unix_shell_name, sizeof unix_shell_name -1);
- if (!$VMS_STATUS_SUCCESS(status)) {
+ if(!$VMS_STATUS_SUCCESS(status)) {
use_unix_settings = 0;
}
@@ -249,7 +249,7 @@ static void set_features(void)
/* Fix mv aa.bb aa */
set_feature_default ("DECC$RENAME_NO_INHERIT", ENABLE);
- if (use_unix_settings) {
+ if(use_unix_settings) {
/* POSIX requires that open files be able to be removed */
set_feature_default ("DECC$ALLOW_REMOVE_OPEN_FILES", ENABLE);
diff --git a/packages/vms/curl_gnv_build_steps.txt b/packages/vms/curl_gnv_build_steps.txt
index 6274b7bba..b7ea95219 100644
--- a/packages/vms/curl_gnv_build_steps.txt
+++ b/packages/vms/curl_gnv_build_steps.txt
@@ -1,6 +1,6 @@
From File: curl_gnv_build_steps.txt
- Copyright 2013 - 2022, John Malmberg
+ Copyright (C) John Malmberg
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -251,7 +251,7 @@ branding the PCSI kit based on who is making the kit.
step of backing up the source files will probably hang or fail.
You need to copy the source files to VMS mounted disks and create
- logical names SRC_ROOT1 and VMS_ROOT1 to work around this to to
+ logical names SRC_ROOT1 and VMS_ROOT1 to work around this to
reference local disks. Make sure src_root1:[000000] and
vms_root1:[000000] exist and can be written to.
diff --git a/packages/vms/curl_release_note_start.txt b/packages/vms/curl_release_note_start.txt
index 977dce12e..62b283635 100644
--- a/packages/vms/curl_release_note_start.txt
+++ b/packages/vms/curl_release_note_start.txt
@@ -2,7 +2,7 @@ From file: CURL_RELEASE_NOTE_START.TXT
Note: These kits are produced by a hobbyist and are providing any support
or any commitment to supply bug fixes or future releases. This code is
-as-is with no warrantees.
+as-is with no warranties.
The testing of this build of curl was minimal and involved building some of
the sample and test programs, accessing a public HTTPS: website, doing a
@@ -58,12 +58,12 @@ For the HP SSL work around to work for GNV do the following:
dcl @gnv\$gnu:[vms_bin]curl.com $*
^Z
-Similar work arounds will be needed for any program linked with GNV$LIBCURL
+Similar workarounds will be needed for any program linked with GNV$LIBCURL
until the HP OpenSSL is upgraded to the current 1.4 version or later.
If you are installing a "daily" build instead of a release build of Curl, some
things have been changed so that it can be installed at the same time as
-a production build with out conflicts.
+a production build without conflicts.
The CURL_DAILY_STARTUP.COM will be supplied instead of CURL_STARTUP.COM.
This file is actually not used with the daily package and is provided as
diff --git a/packages/vms/curl_startup.com b/packages/vms/curl_startup.com
index 47849dc2b..e90bbecbb 100644
--- a/packages/vms/curl_startup.com
+++ b/packages/vms/curl_startup.com
@@ -1,11 +1,9 @@
$! File: curl_Startup.com
$!
-$! $Id$
-$!
$! Procedure to setup the CURL libraries for use by programs from the
$! VMS SYSTARTUP*.COM procedure.
$!
-$! Copyright 2013 - 2022, John Malmberg
+$! Copyright (C) John Malmberg
$!
$! Permission to use, copy, modify, and/or distribute this software for any
$! purpose with or without fee is hereby granted, provided that the above
@@ -21,8 +19,6 @@ $! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
$!
$! SPDX-License-Identifier: ISC
$!
-$! 15-Jun-2009 J. Malmberg
-$! 30-Jul-2013 J. Malmberg Update for Curl 7.32
$!========================================================================
$!
$!
diff --git a/packages/vms/curlmsg.h b/packages/vms/curlmsg.h
index 7f7378d05..9b5c4c76d 100644
--- a/packages/vms/curlmsg.h
+++ b/packages/vms/curlmsg.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/packages/vms/curlmsg.msg b/packages/vms/curlmsg.msg
index 212249550..ac2d508e3 100644
--- a/packages/vms/curlmsg.msg
+++ b/packages/vms/curlmsg.msg
@@ -5,7 +5,7 @@
! | (__| |_| | _ <| |___
! \___|\___/|_| \_\_____|
!
-! Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+! Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
!
! This software is licensed as described in the file COPYING, which
! you should have received as part of this distribution. The terms
diff --git a/packages/vms/curlmsg_vms.h b/packages/vms/curlmsg_vms.h
index f24a1991e..bb6470221 100644
--- a/packages/vms/curlmsg_vms.h
+++ b/packages/vms/curlmsg_vms.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -52,8 +52,8 @@
*/
static const long vms_cond[] =
- {
- CURL_OK,
+ {
+ CURL_OK,
CURL_UNSUPPORTED_PROTOCOL,
CURL_FAILED_INIT,
CURL_URL_MALFORMAT,
@@ -137,7 +137,7 @@ static const long vms_cond[] =
CURL_AGAIN,
CURLE_SSL_CRL_BADFILE,
CURLE_SSL_ISSUER_ERROR,
- CURL_CURL_LAST
- };
+ CURL_CURL_LAST
+ };
#endif /* HEADER_CURLMSG_VMS_H */
diff --git a/packages/vms/generate_config_vms_h_curl.com b/packages/vms/generate_config_vms_h_curl.com
index 2741b7b3c..99a39c844 100644
--- a/packages/vms/generate_config_vms_h_curl.com
+++ b/packages/vms/generate_config_vms_h_curl.com
@@ -1,7 +1,5 @@
$! File: GENERATE_CONFIG_H_CURL.COM
$!
-$! $Id$
-$!
$! Curl like most open source products uses a variant of a config.h file.
$! Depending on the curl version, this could be config.h or curl_config.h.
$!
@@ -16,8 +14,7 @@ $! which is used to supplement that file. Note that the config_vms.h file
$! and the [.lib]config-vms.h file do two different tasks and that the
$! filenames are slightly different.
$!
-$!
-$! Copyright 2013 - 2022, John Malmberg
+$! Copyright (C) John Malmberg
$!
$! Permission to use, copy, modify, and/or distribute this software for any
$! purpose with or without fee is hereby granted, provided that the above
@@ -33,8 +30,6 @@ $! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
$!
$! SPDX-License-Identifier: ISC
$!
-$! 06-Jan-2013 J. Malmberg
-$!
$!=========================================================================
$!
$! Allow arguments to be grouped together with comma or separated by spaces
@@ -242,9 +237,6 @@ $!
$write cvh "#ifdef CURL_DISABLE_COOKIES"
$write cvh "#undef CURL_DISABLE_COOKIES"
$write cvh "#endif"
-$write cvh "#ifdef CURL_DISABLE_CRYPTO_AUTH"
-$write cvh "#undef CURL_DISABLE_CRYPTO_AUTH"
-$write cvh "#endif"
$write cvh "#ifdef CURL_DISABLE_DICT"
$write cvh "#undef CURL_DISABLE_DICT"
$write cvh "#endif"
@@ -341,9 +333,6 @@ $write cvh "#endif"
$write cvh "#ifdef USE_NGHTTP2"
$write cvh "#undef USE_NGHTTP2"
$write cvh "#endif"
-$write cvh "#ifdef USE_NSS"
-$write cvh "#undef USE_NSS"
-$write cvh "#endif"
$write cvh "#ifdef USE_OPENLDAP"
$write cvh "#undef USE_OPENLDAP"
$write cvh "#endif"
diff --git a/packages/vms/generate_vax_transfer.com b/packages/vms/generate_vax_transfer.com
index f9d978b10..3ed49cb24 100644
--- a/packages/vms/generate_vax_transfer.com
+++ b/packages/vms/generate_vax_transfer.com
@@ -1,7 +1,5 @@
$! File: generate_vax_transfer.com
$!
-$! $Id$
-$!
$! File to generate and compile the VAX transfer vectors from reading in the
$! Alpha/Itanium gnv_libcurl_symbols.opt file.
$!
@@ -14,7 +12,7 @@ $! gnv_libcurl_xfer.obj
$! gnv_libcurl_xfer.opt
$! macro32_exactcase.exe
$!
-$! Copyright 2013 - 2022, John Malmberg
+$! Copyright (C) John Malmberg
$!
$! Permission to use, copy, modify, and/or distribute this software for any
$! purpose with or without fee is hereby granted, provided that the above
@@ -30,7 +28,6 @@ $! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
$!
$! SPDX-License-Identifier: ISC
$!
-$! 20-Jul-2013 J. Malmberg
$!============================================================================
$!
$! Save this so we can get back.
diff --git a/packages/vms/gnv_conftest.c_first b/packages/vms/gnv_conftest.c_first
index 2ee244735..317b1abfc 100644
--- a/packages/vms/gnv_conftest.c_first
+++ b/packages/vms/gnv_conftest.c_first
@@ -1,8 +1,6 @@
/* File: GNV$CONFTEST.C_FIRST
*
- * $Id$
- *
- * Copyright 2013 - 2022, John Malmberg
+ * Copyright (C) John Malmberg
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -31,11 +29,10 @@ char ldap_url_parse(void) {return 0;}
/* These are to pass the test that does not use headers */
/* Because configure does an #undef which keeps us from using #define */
/* char CRYPTO_add_lock(void) {return 0;} */
-char SSL_connnect(void) {return 0;}
+char SSL_connect(void) {return 0;}
char ENGINE_init(void) {return 0;}
char RAND_status(void) {return 0;}
/* char RAND_screen(void) {return 0;} In headers, but not present */
-char RAND_egd(void) {return 0;}
char CRYPTO_cleanup_all_ex_data(void) {return 0;}
char SSL_get_shutdown(void) {return 0;}
char ENGINE_load_builtin_engines (void) {return 0;}
@@ -48,7 +45,6 @@ char ENGINE_load_builtin_engines (void) {return 0;}
#define ENGINE_init ENGINE_INIT
#define RAND_status RAND_STATUS
/* #define RAND_screen RAND_SCREEN */
-#define RAND_egd RAND_EGD
#define CRYPTO_cleanup_all_ex_data CRYPTO_CLEANUP_ALL_EX_DATA
#define SSL_get_shutdown SSL_GET_SHUTDOWN
#define ENGINE_load_builtin_engines ENGINE_LOAD_BUILTIN_ENGINES
diff --git a/packages/vms/gnv_curl_configure.sh b/packages/vms/gnv_curl_configure.sh
index 1cb0543cb..21558001e 100644..100755
--- a/packages/vms/gnv_curl_configure.sh
+++ b/packages/vms/gnv_curl_configure.sh
@@ -1,11 +1,9 @@
# File: gnv_curl_configure.sh
#
-# $Id$
-#
# Set up and run the configure script for Curl so that it can find the
# proper options for VMS.
#
-# Copyright 2013 - 2022, John Malmberg
+# Copyright (C) John Malmberg
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
@@ -21,8 +19,6 @@
#
# SPDX-License-Identifier: ISC
#
-# 06-Jun-2009 J. Malmberg
-# 28-Dec-2012 J. Malmberg Update for Bash 4.2.39
#==========================================================================
#
# POSIX exit mode is needed for Unix shells.
diff --git a/packages/vms/gnv_libcurl_symbols.opt b/packages/vms/gnv_libcurl_symbols.opt
index eff1cbe97..5bc2a852b 100644
--- a/packages/vms/gnv_libcurl_symbols.opt
+++ b/packages/vms/gnv_libcurl_symbols.opt
@@ -1,7 +1,5 @@
! File GNV$LIBCURL_SYMBOLS.OPT
!
-! $Id$
-!
! This file must be manually maintained to allow upward compatibility
! The SYMBOL_VECTORs are set up so that applications can be compiled
! with either case sensitive symbol names or the default of uppercase.
@@ -41,7 +39,7 @@
! maintaining multiple versions as long as the routine can be called with
! the old number of parameters.
!
-! Copyright 2013 - 2022, John Malmberg
+! Copyright (C) John Malmberg
!
! Permission to use, copy, modify, and/or distribute this software for any
! purpose with or without fee is hereby granted, provided that the above
diff --git a/packages/vms/gnv_link_curl.com b/packages/vms/gnv_link_curl.com
index 6e84229b4..247987ae8 100644
--- a/packages/vms/gnv_link_curl.com
+++ b/packages/vms/gnv_link_curl.com
@@ -1,10 +1,8 @@
$! File: gnv_link_curl.com
$!
-$! $Id$
-$!
$! File to build images using gnv$libcurl.exe
$!
-$! Copyright 2013 - 2022, John Malmberg
+$! Copyright (C) John Malmberg
$!
$! Permission to use, copy, modify, and/or distribute this software for any
$! purpose with or without fee is hereby granted, provided that the above
@@ -20,7 +18,6 @@ $! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
$!
$! SPDX-License-Identifier: ISC
$!
-$! 10-Jun-2009 J. Malmberg
$!============================================================================
$!
$! Save this so we can get back.
@@ -391,7 +388,7 @@ $ if f$search("[.src]curl-tool_main.o") .nes. ""
$ then
$! From src/makefile.inc:
$! # libcurl has sources that provide functions named curlx_* that aren't
-$! # part of the official API, but we re-use the code here to avoid
+$! # part of the official API, but we reuse the code here to avoid
$! # duplication.
$!
$!
@@ -412,7 +409,7 @@ $ link'ldebug'/exe=[.src]curl.exe/dsf=[.src]curl.dsf -
[.src]curl-tool_hugehelp.o, [.src]curl-tool_libinfo.o, -
[.src]curl-tool_mfiles.o, -
[.src]curl-tool_msgs.o, [.src]curl-tool_operate.o, -
- [.src]curl-tool_operhlp.o, [.src]curl-tool_panykey.o, -
+ [.src]curl-tool_operhlp.o, -
[.src]curl-tool_paramhlp.o, [.src]curl-tool_parsecfg.o, -
[.src]curl-tool_setopt.o, [.src]curl-tool_sleep.o, -
[.src]curl-tool_urlglob.o, [.src]curl-tool_util.o, -
diff --git a/packages/vms/make_gnv_curl_install.sh b/packages/vms/make_gnv_curl_install.sh
index bdc6077e9..b85ef0ced 100644..100755
--- a/packages/vms/make_gnv_curl_install.sh
+++ b/packages/vms/make_gnv_curl_install.sh
@@ -1,13 +1,11 @@
# File: make_gnv_curl_install.sh
#
-# $Id$
-#
# Set up and run the make script for Curl.
#
# This makes the library, the curl binary and attempts an install.
# A search list should be set up for GNU (GNV$GNU).
#
-# Copyright 2013 - 2022, John Malmberg
+# Copyright (C) John Malmberg
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
@@ -23,7 +21,6 @@
#
# SPDX-License-Identifier: ISC
#
-# 06-Jun-2009 J. Malmberg
#==========================================================================
#
#
diff --git a/packages/vms/make_pcsi_curl_kit_name.com b/packages/vms/make_pcsi_curl_kit_name.com
index 08d347251..956f7c167 100644
--- a/packages/vms/make_pcsi_curl_kit_name.com
+++ b/packages/vms/make_pcsi_curl_kit_name.com
@@ -1,14 +1,12 @@
$! File: MAKE_PCSI_CURL_KIT_NAME.COM
$!
-$! $Id$
-$!
$! Calculates the PCSI kit name for use in building an installation kit.
$! PCSI is HP's PolyCenter Software Installation Utility.
$!
$! The results are stored in as logical names so that other procedures
$! can use them.
$!
-$! Copyright 2013 - 2022, John Malmberg
+$! Copyright (C) John Malmberg
$!
$! Permission to use, copy, modify, and/or distribute this software for any
$! purpose with or without fee is hereby granted, provided that the above
@@ -24,8 +22,6 @@ $! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
$!
$! SPDX-License-Identifier: ISC
$!
-$! 11-Jun-2009 J. Malmberg
-$!
$!========================================================================
$!
$! Save default
diff --git a/packages/vms/pcsi_gnv_curl_file_list.txt b/packages/vms/pcsi_gnv_curl_file_list.txt
index 7015a800e..586f7e767 100644
--- a/packages/vms/pcsi_gnv_curl_file_list.txt
+++ b/packages/vms/pcsi_gnv_curl_file_list.txt
@@ -1,7 +1,5 @@
! File: PCSI_GNV_CURL_FILE_LIST.TXT
!
-! $Id$
-!
! File list for building a PCSI kit.
! Very simple format so that the parsing logic can be simple.
! links first, directory second, and files third.
@@ -15,7 +13,7 @@
!
! [xxx.yyy]file.ext is a file for the rename and add phases.
!
-! Copyright 2013 - 2022, John Malmberg
+! Copyright (C) John Malmberg
!
! Permission to use, copy, modify, and/or distribute this software for any
! purpose with or without fee is hereby granted, provided that the above
@@ -31,7 +29,6 @@
!
! SPDX-License-Identifier: ISC
!
-! 15-Jun-2009 J. Malmberg
!============================================================================
[gnv.usr.bin]curl. -> [gnv.usr.bin]gnv$curl.exe
[gnv.usr.bin]curl.exe -> [gnv.usr.bin]gnv$curl.exe
diff --git a/packages/vms/pcsi_product_gnv_curl.com b/packages/vms/pcsi_product_gnv_curl.com
index 688c9c014..83d8fa3b6 100644
--- a/packages/vms/pcsi_product_gnv_curl.com
+++ b/packages/vms/pcsi_product_gnv_curl.com
@@ -1,11 +1,9 @@
$! File: PCSI_PRODUCT_GNV_CURL.COM
$!
-$! $Id$
-$!
$! This command file packages up the product CURL into a sequential
$! format kit
$!
-$! Copyright 2013 - 2022, John Malmberg
+$! Copyright (C) John Malmberg
$!
$! Permission to use, copy, modify, and/or distribute this software for any
$! purpose with or without fee is hereby granted, provided that the above
@@ -21,8 +19,6 @@ $! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
$!
$! SPDX-License-Identifier: ISC
$!
-$! 16-Jun-2009 J.Malmberg
-$!
$!=========================================================================
$!
$! Save default
diff --git a/packages/vms/report_openssl_version.c b/packages/vms/report_openssl_version.c
index 493969616..64e1ee052 100644
--- a/packages/vms/report_openssl_version.c
+++ b/packages/vms/report_openssl_version.c
@@ -1,7 +1,5 @@
/* File: report_openssl_version.c
*
- * $Id$
- *
* This file dynamically loads the openssl shared image to report the
* version string.
*
@@ -9,7 +7,7 @@
*
* Usage: report_openssl_version <shared_image> [<dcl_symbol>]
*
- * Copyright 2013 - 2022, John Malmberg
+ * Copyright (C) John Malmberg
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -49,7 +47,7 @@ void * libptr;
const char * (*ssl_version)(int t);
const char * version;
- if (argc < 1) {
+ if(argc < 1) {
puts("report_openssl_version filename");
exit(1);
}
@@ -57,16 +55,16 @@ const char * version;
libptr = dlopen(argv[1], 0);
ssl_version = (const char * (*)(int))dlsym(libptr, "SSLeay_version");
- if ((void *)ssl_version == NULL) {
+ if(ssl_version == NULL) {
ssl_version = (const char * (*)(int))dlsym(libptr, "ssleay_version");
- if ((void *)ssl_version == NULL) {
+ if(ssl_version == NULL) {
ssl_version = (const char * (*)(int))dlsym(libptr, "SSLEAY_VERSION");
}
}
dlclose(libptr);
- if ((void *)ssl_version == NULL) {
+ if(ssl_version == NULL) {
puts("Unable to lookup version of OpenSSL");
exit(1);
}
@@ -76,7 +74,7 @@ const char * version;
puts(version);
/* Was a symbol argument given? */
- if (argc > 1) {
+ if(argc > 1) {
int status;
struct dsc$descriptor_s symbol_dsc;
struct dsc$descriptor_s value_dsc;
@@ -93,7 +91,7 @@ const char * version;
value_dsc.dsc$b_class = DSC$K_CLASS_S;
status = LIB$SET_SYMBOL(&symbol_dsc, &value_dsc, &table_type);
- if (!$VMS_STATUS_SUCCESS(status)) {
+ if(!$VMS_STATUS_SUCCESS(status)) {
exit(status);
}
}
diff --git a/packages/vms/setup_gnv_curl_build.com b/packages/vms/setup_gnv_curl_build.com
index 69aecc68d..8404ec3c0 100644
--- a/packages/vms/setup_gnv_curl_build.com
+++ b/packages/vms/setup_gnv_curl_build.com
@@ -1,13 +1,11 @@
$! File: setup_gnv_curl_build.com
$!
-$! $Id$
-$!
$! Set up build environment for building Curl under GNV on VMS.
$!
$! GNV needs some files moved into the other directories to help with
$! the configure script and the build.
$!
-$! Copyright 2013 - 2022, John Malmberg
+$! Copyright (C) John Malmberg
$!
$! Permission to use, copy, modify, and/or distribute this software for any
$! purpose with or without fee is hereby granted, provided that the above
@@ -23,8 +21,6 @@ $! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
$!
$! SPDX-License-Identifier: ISC
$!
-$! 30-May-2009 J. Malmberg
-$!
$!=======================================================================
$!
$! Save this so we can get back.
diff --git a/packages/vms/stage_curl_install.com b/packages/vms/stage_curl_install.com
index 8c4cb05b5..10ae17adc 100644
--- a/packages/vms/stage_curl_install.com
+++ b/packages/vms/stage_curl_install.com
@@ -1,7 +1,5 @@
$! File: stage_curl_install.com
$!
-$! $Id$
-$!
$! This updates or removes the GNV$CURL.EXE and related files for the
$! new_gnu:[*...] directory tree for running the self tests.
$!
@@ -24,7 +22,7 @@ $! [usr.share.man.man3]curl*.3
$! [usr.share.man.man3]libcurl*.3
$! Future: A symbolic link to the release notes?
$!
-$! Copyright 2013 - 2022, John Malmberg
+$! Copyright (C) John Malmberg
$!
$! Permission to use, copy, modify, and/or distribute this software for any
$! purpose with or without fee is hereby granted, provided that the above
@@ -40,8 +38,6 @@ $! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
$!
$! SPDX-License-Identifier: ISC
$!
-$! 20-Aug-2012 J. Malmberg
-$!
$!===========================================================================
$!
$ arch_type = f$getsyi("ARCH_NAME")
diff --git a/packages/vms/vms_eco_level.h b/packages/vms/vms_eco_level.h
index cf2db53a3..89f1dfd62 100644
--- a/packages/vms/vms_eco_level.h
+++ b/packages/vms/vms_eco_level.h
@@ -1,8 +1,6 @@
/* File: vms_eco_level.h
*
- * $Id$
- *
- * Copyright 2013 - 2022, John Malmberg
+ * Copyright (C) John Malmberg
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
diff --git a/plan9/include/mkfile b/plan9/include/mkfile
index d61682b75..a0970e932 100644
--- a/plan9/include/mkfile
+++ b/plan9/include/mkfile
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/plan9/lib/mkfile b/plan9/lib/mkfile
index 45189485b..04b54a837 100644
--- a/plan9/lib/mkfile
+++ b/plan9/lib/mkfile
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/plan9/lib/mkfile.inc b/plan9/lib/mkfile.inc
index bf677bd07..5c2cc128f 100755
--- a/plan9/lib/mkfile.inc
+++ b/plan9/lib/mkfile.inc
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/plan9/mkfile b/plan9/mkfile
index f48d41237..2133a4970 100644
--- a/plan9/mkfile
+++ b/plan9/mkfile
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/plan9/mkfile.proto b/plan9/mkfile.proto
index 2557de795..4ad41a1c7 100644
--- a/plan9/mkfile.proto
+++ b/plan9/mkfile.proto
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/plan9/src/mkfile b/plan9/src/mkfile
index 0ec185b53..beb98cbd6 100644
--- a/plan9/src/mkfile
+++ b/plan9/src/mkfile
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/plan9/src/mkfile.inc b/plan9/src/mkfile.inc
index bf677bd07..5c2cc128f 100755
--- a/plan9/src/mkfile.inc
+++ b/plan9/src/mkfile.inc
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/projects/README.md b/projects/README.md
index fca9cf43e..9b18ccd33 100644
--- a/projects/README.md
+++ b/projects/README.md
@@ -1,5 +1,5 @@
<!--
-Copyright (C) 2000 - 2022 Daniel Stenberg, <daniel@haxx.se>, et al.
+Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
-->
diff --git a/projects/Windows/VC10/curl-all.sln b/projects/Windows/VC10/curl-all.sln
deleted file mode 100644
index bdd2e662a..000000000
--- a/projects/Windows/VC10/curl-all.sln
+++ /dev/null
@@ -1,298 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curl", "src\curl.vcxproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
- ProjectSection(ProjectDependencies) = postProject
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB} = {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcurl", "lib\libcurl.vcxproj", "{DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
- DLL Debug - DLL OpenSSL - DLL LibSSH2|x64 = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
- DLL Debug - DLL OpenSSL|Win32 = DLL Debug - DLL OpenSSL|Win32
- DLL Debug - DLL OpenSSL|x64 = DLL Debug - DLL OpenSSL|x64
- DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32 = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
- DLL Debug - DLL Windows SSPI - DLL WinIDN|x64 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
- DLL Debug - DLL Windows SSPI|Win32 = DLL Debug - DLL Windows SSPI|Win32
- DLL Debug - DLL Windows SSPI|x64 = DLL Debug - DLL Windows SSPI|x64
- DLL Debug - DLL wolfSSL|Win32 = DLL Debug - DLL wolfSSL|Win32
- DLL Debug - DLL wolfSSL|x64 = DLL Debug - DLL wolfSSL|x64
- DLL Debug|Win32 = DLL Debug|Win32
- DLL Debug|x64 = DLL Debug|x64
- DLL Release - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
- DLL Release - DLL OpenSSL - DLL LibSSH2|x64 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
- DLL Release - DLL OpenSSL|Win32 = DLL Release - DLL OpenSSL|Win32
- DLL Release - DLL OpenSSL|x64 = DLL Release - DLL OpenSSL|x64
- DLL Release - DLL Windows SSPI - DLL WinIDN|Win32 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
- DLL Release - DLL Windows SSPI - DLL WinIDN|x64 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
- DLL Release - DLL Windows SSPI|Win32 = DLL Release - DLL Windows SSPI|Win32
- DLL Release - DLL Windows SSPI|x64 = DLL Release - DLL Windows SSPI|x64
- DLL Release - DLL wolfSSL|Win32 = DLL Release - DLL wolfSSL|Win32
- DLL Release - DLL wolfSSL|x64 = DLL Release - DLL wolfSSL|x64
- DLL Release|Win32 = DLL Release|Win32
- DLL Release|x64 = DLL Release|x64
- LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
- LIB Debug - DLL OpenSSL - DLL LibSSH2|x64 = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
- LIB Debug - DLL OpenSSL|Win32 = LIB Debug - DLL OpenSSL|Win32
- LIB Debug - DLL OpenSSL|x64 = LIB Debug - DLL OpenSSL|x64
- LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32 = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
- LIB Debug - DLL Windows SSPI - DLL WinIDN|x64 = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
- LIB Debug - DLL Windows SSPI|Win32 = LIB Debug - DLL Windows SSPI|Win32
- LIB Debug - DLL Windows SSPI|x64 = LIB Debug - DLL Windows SSPI|x64
- LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32 = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
- LIB Debug - LIB OpenSSL - LIB LibSSH2|x64 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
- LIB Debug - LIB OpenSSL|Win32 = LIB Debug - LIB OpenSSL|Win32
- LIB Debug - LIB OpenSSL|x64 = LIB Debug - LIB OpenSSL|x64
- LIB Debug - LIB wolfSSL|Win32 = LIB Debug - LIB wolfSSL|Win32
- LIB Debug - LIB wolfSSL|x64 = LIB Debug - LIB wolfSSL|x64
- LIB Debug|Win32 = LIB Debug|Win32
- LIB Debug|x64 = LIB Debug|x64
- LIB Release - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
- LIB Release - DLL OpenSSL - DLL LibSSH2|x64 = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
- LIB Release - DLL OpenSSL|Win32 = LIB Release - DLL OpenSSL|Win32
- LIB Release - DLL OpenSSL|x64 = LIB Release - DLL OpenSSL|x64
- LIB Release - DLL Windows SSPI - DLL WinIDN|Win32 = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
- LIB Release - DLL Windows SSPI - DLL WinIDN|x64 = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
- LIB Release - DLL Windows SSPI|Win32 = LIB Release - DLL Windows SSPI|Win32
- LIB Release - DLL Windows SSPI|x64 = LIB Release - DLL Windows SSPI|x64
- LIB Release - LIB OpenSSL - LIB LibSSH2|Win32 = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
- LIB Release - LIB OpenSSL - LIB LibSSH2|x64 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
- LIB Release - LIB OpenSSL|Win32 = LIB Release - LIB OpenSSL|Win32
- LIB Release - LIB OpenSSL|x64 = LIB Release - LIB OpenSSL|x64
- LIB Release - LIB wolfSSL|Win32 = LIB Release - LIB wolfSSL|Win32
- LIB Release - LIB wolfSSL|x64 = LIB Release - LIB wolfSSL|x64
- LIB Release|Win32 = LIB Release|Win32
- LIB Release|x64 = LIB Release|x64
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL|Win32.ActiveCfg = DLL Debug - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL|Win32.Build.0 = DLL Debug - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL|x64.ActiveCfg = DLL Debug - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL|x64.Build.0 = DLL Debug - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|x64.ActiveCfg = DLL Debug - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|x64.Build.0 = DLL Debug - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|Win32.ActiveCfg = DLL Debug - DLL wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|Win32.Build.0 = DLL Debug - DLL wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|x64.ActiveCfg = DLL Debug - DLL wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|x64.Build.0 = DLL Debug - DLL wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|x64.Build.0 = DLL Debug|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL|Win32.ActiveCfg = DLL Release - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL|Win32.Build.0 = DLL Release - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL|x64.ActiveCfg = DLL Release - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL|x64.Build.0 = DLL Release - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|Win32.ActiveCfg = DLL Release - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|Win32.ActiveCfg = DLL Release - DLL wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|Win32.Build.0 = DLL Release - DLL wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|x64.ActiveCfg = DLL Release - DLL wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|x64.Build.0 = DLL Release - DLL wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|Win32.Build.0 = DLL Release|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|x64.ActiveCfg = DLL Release|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|x64.Build.0 = DLL Release|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL|Win32.ActiveCfg = LIB Debug - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL|Win32.Build.0 = LIB Debug - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL|x64.ActiveCfg = LIB Debug - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL|x64.Build.0 = LIB Debug - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI|Win32.ActiveCfg = LIB Debug - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI|Win32.Build.0 = LIB Debug - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI|x64.ActiveCfg = LIB Debug - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI|x64.Build.0 = LIB Debug - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32.ActiveCfg = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32.Build.0 = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL - LIB LibSSH2|x64.ActiveCfg = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL - LIB LibSSH2|x64.Build.0 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|Win32.ActiveCfg = LIB Debug - LIB OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|Win32.Build.0 = LIB Debug - LIB OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|x64.ActiveCfg = LIB Debug - LIB OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|x64.Build.0 = LIB Debug - LIB OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|Win32.ActiveCfg = LIB Debug - LIB wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|Win32.Build.0 = LIB Debug - LIB wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|x64.ActiveCfg = LIB Debug - LIB wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|x64.Build.0 = LIB Debug - LIB wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|Win32.Build.0 = LIB Debug|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|x64.ActiveCfg = LIB Debug|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|x64.Build.0 = LIB Debug|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL|Win32.ActiveCfg = LIB Release - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL|Win32.Build.0 = LIB Release - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL|x64.ActiveCfg = LIB Release - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL|x64.Build.0 = LIB Release - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI|Win32.ActiveCfg = LIB Release - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI|Win32.Build.0 = LIB Release - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI|x64.ActiveCfg = LIB Release - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI|x64.Build.0 = LIB Release - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL - LIB LibSSH2|Win32.ActiveCfg = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL - LIB LibSSH2|Win32.Build.0 = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL - LIB LibSSH2|x64.ActiveCfg = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL - LIB LibSSH2|x64.Build.0 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|Win32.ActiveCfg = LIB Release - LIB OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|Win32.Build.0 = LIB Release - LIB OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|x64.ActiveCfg = LIB Release - LIB OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|x64.Build.0 = LIB Release - LIB OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|Win32.ActiveCfg = LIB Release - LIB wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|Win32.Build.0 = LIB Release - LIB wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|x64.ActiveCfg = LIB Release - LIB wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|x64.Build.0 = LIB Release - LIB wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|Win32.ActiveCfg = LIB Release|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|Win32.Build.0 = LIB Release|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|x64.ActiveCfg = LIB Release|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|x64.Build.0 = LIB Release|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL|Win32.ActiveCfg = DLL Debug - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL|Win32.Build.0 = DLL Debug - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL|x64.ActiveCfg = DLL Debug - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL|x64.Build.0 = DLL Debug - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|x64.ActiveCfg = DLL Debug - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|x64.Build.0 = DLL Debug - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|Win32.ActiveCfg = DLL Debug - DLL wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|Win32.Build.0 = DLL Debug - DLL wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|x64.ActiveCfg = DLL Debug - DLL wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|x64.Build.0 = DLL Debug - DLL wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.Build.0 = DLL Debug|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.ActiveCfg = DLL Release - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.Build.0 = DLL Release - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.ActiveCfg = DLL Release - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.Build.0 = DLL Release - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.ActiveCfg = DLL Release - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|Win32.ActiveCfg = DLL Release - DLL wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|Win32.Build.0 = DLL Release - DLL wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|x64.ActiveCfg = DLL Release - DLL wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|x64.Build.0 = DLL Release - DLL wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.Build.0 = DLL Release|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|x64.ActiveCfg = DLL Release|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|x64.Build.0 = DLL Release|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL|Win32.ActiveCfg = LIB Debug - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL|Win32.Build.0 = LIB Debug - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL|x64.ActiveCfg = LIB Debug - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL|x64.Build.0 = LIB Debug - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI|Win32.ActiveCfg = LIB Debug - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI|Win32.Build.0 = LIB Debug - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI|x64.ActiveCfg = LIB Debug - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI|x64.Build.0 = LIB Debug - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32.ActiveCfg = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32.Build.0 = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL - LIB LibSSH2|x64.ActiveCfg = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL - LIB LibSSH2|x64.Build.0 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|Win32.ActiveCfg = LIB Debug - LIB OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|Win32.Build.0 = LIB Debug - LIB OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|x64.ActiveCfg = LIB Debug - LIB OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|x64.Build.0 = LIB Debug - LIB OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|Win32.ActiveCfg = LIB Debug - LIB wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|Win32.Build.0 = LIB Debug - LIB wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|x64.ActiveCfg = LIB Debug - LIB wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|x64.Build.0 = LIB Debug - LIB wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|Win32.Build.0 = LIB Debug|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|x64.ActiveCfg = LIB Debug|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|x64.Build.0 = LIB Debug|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL|Win32.ActiveCfg = LIB Release - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL|Win32.Build.0 = LIB Release - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL|x64.ActiveCfg = LIB Release - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL|x64.Build.0 = LIB Release - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI|Win32.ActiveCfg = LIB Release - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI|Win32.Build.0 = LIB Release - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI|x64.ActiveCfg = LIB Release - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI|x64.Build.0 = LIB Release - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL - LIB LibSSH2|Win32.ActiveCfg = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL - LIB LibSSH2|Win32.Build.0 = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL - LIB LibSSH2|x64.ActiveCfg = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL - LIB LibSSH2|x64.Build.0 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|Win32.ActiveCfg = LIB Release - LIB OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|Win32.Build.0 = LIB Release - LIB OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|x64.ActiveCfg = LIB Release - LIB OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|x64.Build.0 = LIB Release - LIB OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|Win32.ActiveCfg = LIB Release - LIB wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|Win32.Build.0 = LIB Release - LIB wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|x64.ActiveCfg = LIB Release - LIB wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|x64.Build.0 = LIB Release - LIB wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|Win32.ActiveCfg = LIB Release|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|Win32.Build.0 = LIB Release|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|x64.ActiveCfg = LIB Release|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|x64.Build.0 = LIB Release|x64
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/projects/Windows/VC10/lib/libcurl.sln b/projects/Windows/VC10/lib/libcurl.sln
deleted file mode 100644
index 159ab7d0f..000000000
--- a/projects/Windows/VC10/lib/libcurl.sln
+++ /dev/null
@@ -1,181 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcurl", "libcurl.vcxproj", "{DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
- DLL Debug - DLL OpenSSL - DLL LibSSH2|x64 = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
- DLL Debug - DLL OpenSSL|Win32 = DLL Debug - DLL OpenSSL|Win32
- DLL Debug - DLL OpenSSL|x64 = DLL Debug - DLL OpenSSL|x64
- DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32 = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
- DLL Debug - DLL Windows SSPI - DLL WinIDN|x64 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
- DLL Debug - DLL Windows SSPI|Win32 = DLL Debug - DLL Windows SSPI|Win32
- DLL Debug - DLL Windows SSPI|x64 = DLL Debug - DLL Windows SSPI|x64
- DLL Debug - DLL wolfSSL|Win32 = DLL Debug - DLL wolfSSL|Win32
- DLL Debug - DLL wolfSSL|x64 = DLL Debug - DLL wolfSSL|x64
- DLL Debug|Win32 = DLL Debug|Win32
- DLL Debug|x64 = DLL Debug|x64
- DLL Release - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
- DLL Release - DLL OpenSSL - DLL LibSSH2|x64 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
- DLL Release - DLL OpenSSL|Win32 = DLL Release - DLL OpenSSL|Win32
- DLL Release - DLL OpenSSL|x64 = DLL Release - DLL OpenSSL|x64
- DLL Release - DLL Windows SSPI - DLL WinIDN|Win32 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
- DLL Release - DLL Windows SSPI - DLL WinIDN|x64 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
- DLL Release - DLL Windows SSPI|Win32 = DLL Release - DLL Windows SSPI|Win32
- DLL Release - DLL Windows SSPI|x64 = DLL Release - DLL Windows SSPI|x64
- DLL Release - DLL wolfSSL|Win32 = DLL Release - DLL wolfSSL|Win32
- DLL Release - DLL wolfSSL|x64 = DLL Release - DLL wolfSSL|x64
- DLL Release|Win32 = DLL Release|Win32
- DLL Release|x64 = DLL Release|x64
- LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
- LIB Debug - DLL OpenSSL - DLL LibSSH2|x64 = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
- LIB Debug - DLL OpenSSL|Win32 = LIB Debug - DLL OpenSSL|Win32
- LIB Debug - DLL OpenSSL|x64 = LIB Debug - DLL OpenSSL|x64
- LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32 = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
- LIB Debug - DLL Windows SSPI - DLL WinIDN|x64 = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
- LIB Debug - DLL Windows SSPI|Win32 = LIB Debug - DLL Windows SSPI|Win32
- LIB Debug - DLL Windows SSPI|x64 = LIB Debug - DLL Windows SSPI|x64
- LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32 = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
- LIB Debug - LIB OpenSSL - LIB LibSSH2|x64 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
- LIB Debug - LIB OpenSSL|Win32 = LIB Debug - LIB OpenSSL|Win32
- LIB Debug - LIB OpenSSL|x64 = LIB Debug - LIB OpenSSL|x64
- LIB Debug - LIB wolfSSL|Win32 = LIB Debug - LIB wolfSSL|Win32
- LIB Debug - LIB wolfSSL|x64 = LIB Debug - LIB wolfSSL|x64
- LIB Debug|Win32 = LIB Debug|Win32
- LIB Debug|x64 = LIB Debug|x64
- LIB Release - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
- LIB Release - DLL OpenSSL - DLL LibSSH2|x64 = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
- LIB Release - DLL OpenSSL|Win32 = LIB Release - DLL OpenSSL|Win32
- LIB Release - DLL OpenSSL|x64 = LIB Release - DLL OpenSSL|x64
- LIB Release - DLL Windows SSPI - DLL WinIDN|Win32 = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
- LIB Release - DLL Windows SSPI - DLL WinIDN|x64 = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
- LIB Release - DLL Windows SSPI|Win32 = LIB Release - DLL Windows SSPI|Win32
- LIB Release - DLL Windows SSPI|x64 = LIB Release - DLL Windows SSPI|x64
- LIB Release - LIB OpenSSL - LIB LibSSH2|Win32 = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
- LIB Release - LIB OpenSSL - LIB LibSSH2|x64 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
- LIB Release - LIB OpenSSL|Win32 = LIB Release - LIB OpenSSL|Win32
- LIB Release - LIB OpenSSL|x64 = LIB Release - LIB OpenSSL|x64
- LIB Release - LIB wolfSSL|Win32 = LIB Release - LIB wolfSSL|Win32
- LIB Release - LIB wolfSSL|x64 = LIB Release - LIB wolfSSL|x64
- LIB Release|Win32 = LIB Release|Win32
- LIB Release|x64 = LIB Release|x64
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL|Win32.ActiveCfg = DLL Debug - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL|Win32.Build.0 = DLL Debug - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL|x64.ActiveCfg = DLL Debug - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL|x64.Build.0 = DLL Debug - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|x64.ActiveCfg = DLL Debug - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|x64.Build.0 = DLL Debug - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|Win32.ActiveCfg = DLL Debug - DLL wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|Win32.Build.0 = DLL Debug - DLL wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|x64.ActiveCfg = DLL Debug - DLL wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|x64.Build.0 = DLL Debug - DLL wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.Build.0 = DLL Debug|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.ActiveCfg = DLL Release - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.Build.0 = DLL Release - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.ActiveCfg = DLL Release - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.Build.0 = DLL Release - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.ActiveCfg = DLL Release - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|Win32.ActiveCfg = DLL Release - DLL wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|Win32.Build.0 = DLL Release - DLL wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|x64.ActiveCfg = DLL Release - DLL wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|x64.Build.0 = DLL Release - DLL wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.Build.0 = DLL Release|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|x64.ActiveCfg = DLL Release|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|x64.Build.0 = DLL Release|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL|Win32.ActiveCfg = LIB Debug - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL|Win32.Build.0 = LIB Debug - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL|x64.ActiveCfg = LIB Debug - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL|x64.Build.0 = LIB Debug - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI|Win32.ActiveCfg = LIB Debug - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI|Win32.Build.0 = LIB Debug - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI|x64.ActiveCfg = LIB Debug - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI|x64.Build.0 = LIB Debug - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32.ActiveCfg = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32.Build.0 = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL - LIB LibSSH2|x64.ActiveCfg = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL - LIB LibSSH2|x64.Build.0 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|Win32.ActiveCfg = LIB Debug - LIB OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|Win32.Build.0 = LIB Debug - LIB OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|x64.ActiveCfg = LIB Debug - LIB OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|x64.Build.0 = LIB Debug - LIB OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|Win32.ActiveCfg = LIB Debug - LIB wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|Win32.Build.0 = LIB Debug - LIB wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|x64.ActiveCfg = LIB Debug - LIB wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|x64.Build.0 = LIB Debug - LIB wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|Win32.Build.0 = LIB Debug|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|x64.ActiveCfg = LIB Debug|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|x64.Build.0 = LIB Debug|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL|Win32.ActiveCfg = LIB Release - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL|Win32.Build.0 = LIB Release - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL|x64.ActiveCfg = LIB Release - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL|x64.Build.0 = LIB Release - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI|Win32.ActiveCfg = LIB Release - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI|Win32.Build.0 = LIB Release - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI|x64.ActiveCfg = LIB Release - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI|x64.Build.0 = LIB Release - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL - LIB LibSSH2|Win32.ActiveCfg = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL - LIB LibSSH2|Win32.Build.0 = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL - LIB LibSSH2|x64.ActiveCfg = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL - LIB LibSSH2|x64.Build.0 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|Win32.ActiveCfg = LIB Release - LIB OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|Win32.Build.0 = LIB Release - LIB OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|x64.ActiveCfg = LIB Release - LIB OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|x64.Build.0 = LIB Release - LIB OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|Win32.ActiveCfg = LIB Release - LIB wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|Win32.Build.0 = LIB Release - LIB wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|x64.ActiveCfg = LIB Release - LIB wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|x64.Build.0 = LIB Release - LIB wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|Win32.ActiveCfg = LIB Release|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|Win32.Build.0 = LIB Release|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|x64.ActiveCfg = LIB Release|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|x64.Build.0 = LIB Release|x64
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/projects/Windows/VC10/lib/libcurl.vcxproj b/projects/Windows/VC10/lib/libcurl.vcxproj
deleted file mode 100644
index e4574a101..000000000
--- a/projects/Windows/VC10/lib/libcurl.vcxproj
+++ /dev/null
@@ -1,2647 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|Win32">
- <Configuration>DLL Debug - DLL wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|x64">
- <Configuration>DLL Debug - DLL wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|Win32">
- <Configuration>DLL Debug - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|x64">
- <Configuration>DLL Debug - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|Win32">
- <Configuration>DLL Debug - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|x64">
- <Configuration>DLL Debug - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug|Win32">
- <Configuration>DLL Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug|x64">
- <Configuration>DLL Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL wolfSSL|Win32">
- <Configuration>DLL Release - DLL wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL wolfSSL|x64">
- <Configuration>DLL Release - DLL wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL|Win32">
- <Configuration>DLL Release - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL|x64">
- <Configuration>DLL Release - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|Win32">
- <Configuration>DLL Release - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|x64">
- <Configuration>DLL Release - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release|Win32">
- <Configuration>DLL Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release|x64">
- <Configuration>DLL Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|Win32">
- <Configuration>LIB Debug - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|x64">
- <Configuration>LIB Debug - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|Win32">
- <Configuration>LIB Debug - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|x64">
- <Configuration>LIB Debug - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|Win32">
- <Configuration>LIB Debug - LIB wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|x64">
- <Configuration>LIB Debug - LIB wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32">
- <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|x64">
- <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|Win32">
- <Configuration>LIB Debug - LIB OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|x64">
- <Configuration>LIB Debug - LIB OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug|Win32">
- <Configuration>LIB Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug|x64">
- <Configuration>LIB Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL|Win32">
- <Configuration>LIB Release - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL|x64">
- <Configuration>LIB Release - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|Win32">
- <Configuration>LIB Release - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|x64">
- <Configuration>LIB Release - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB wolfSSL|Win32">
- <Configuration>LIB Release - LIB wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB wolfSSL|x64">
- <Configuration>LIB Release - LIB wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|Win32">
- <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|x64">
- <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL|Win32">
- <Configuration>LIB Release - LIB OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL|x64">
- <Configuration>LIB Release - LIB OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release|Win32">
- <Configuration>LIB Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release|x64">
- <Configuration>LIB Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}</ProjectGuid>
- <RootNamespace>libcurl</RootNamespace>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)d</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win32\VC10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win64\VC10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win32\VC10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win64\VC10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC10\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC10\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC10\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC10\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\..\..\lib\altsvc.c" />
- <ClCompile Include="..\..\..\..\lib\amigaos.c" />
- <ClCompile Include="..\..\..\..\lib\asyn-ares.c" />
- <ClCompile Include="..\..\..\..\lib\asyn-thread.c" />
- <ClCompile Include="..\..\..\..\lib\base64.c" />
- <ClCompile Include="..\..\..\..\lib\bufref.c" />
- <ClCompile Include="..\..\..\..\lib\c-hyper.c" />
- <ClCompile Include="..\..\..\..\lib\conncache.c" />
- <ClCompile Include="..\..\..\..\lib\connect.c" />
- <ClCompile Include="..\..\..\..\lib\content_encoding.c" />
- <ClCompile Include="..\..\..\..\lib\cookie.c" />
- <ClCompile Include="..\..\..\..\lib\curl_addrinfo.c" />
- <ClCompile Include="..\..\..\..\lib\curl_des.c" />
- <ClCompile Include="..\..\..\..\lib\curl_endian.c" />
- <ClCompile Include="..\..\..\..\lib\curl_fnmatch.c" />
- <ClCompile Include="..\..\..\..\lib\curl_gethostname.c" />
- <ClCompile Include="..\..\..\..\lib\curl_get_line.c" />
- <ClCompile Include="..\..\..\..\lib\curl_gssapi.c" />
- <ClCompile Include="..\..\..\..\lib\curl_memrchr.c" />
- <ClCompile Include="..\..\..\..\lib\curl_multibyte.c" />
- <ClCompile Include="..\..\..\..\lib\curl_ntlm_core.c" />
- <ClCompile Include="..\..\..\..\lib\curl_ntlm_wb.c" />
- <ClCompile Include="..\..\..\..\lib\curl_path.c" />
- <ClCompile Include="..\..\..\..\lib\curl_range.c" />
- <ClCompile Include="..\..\..\..\lib\curl_rtmp.c" />
- <ClCompile Include="..\..\..\..\lib\curl_sasl.c" />
- <ClCompile Include="..\..\..\..\lib\curl_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\curl_threads.c" />
- <ClCompile Include="..\..\..\..\lib\dict.c" />
- <ClCompile Include="..\..\..\..\lib\doh.c" />
- <ClCompile Include="..\..\..\..\lib\dynbuf.c" />
- <ClCompile Include="..\..\..\..\lib\easy.c" />
- <ClCompile Include="..\..\..\..\lib\easygetopt.c" />
- <ClCompile Include="..\..\..\..\lib\easyoptions.c" />
- <ClCompile Include="..\..\..\..\lib\escape.c" />
- <ClCompile Include="..\..\..\..\lib\file.c" />
- <ClCompile Include="..\..\..\..\lib\fileinfo.c" />
- <ClCompile Include="..\..\..\..\lib\fopen.c" />
- <ClCompile Include="..\..\..\..\lib\formdata.c" />
- <ClCompile Include="..\..\..\..\lib\ftp.c" />
- <ClCompile Include="..\..\..\..\lib\ftplistparser.c" />
- <ClCompile Include="..\..\..\..\lib\getenv.c" />
- <ClCompile Include="..\..\..\..\lib\getinfo.c" />
- <ClCompile Include="..\..\..\..\lib\gopher.c" />
- <ClCompile Include="..\..\..\..\lib\h2h3.c" />
- <ClCompile Include="..\..\..\..\lib\hash.c" />
- <ClCompile Include="..\..\..\..\lib\headers.c" />
- <ClCompile Include="..\..\..\..\lib\hmac.c" />
- <ClCompile Include="..\..\..\..\lib\hostasyn.c" />
- <ClCompile Include="..\..\..\..\lib\hostip4.c" />
- <ClCompile Include="..\..\..\..\lib\hostip6.c" />
- <ClCompile Include="..\..\..\..\lib\hostip.c" />
- <ClCompile Include="..\..\..\..\lib\hostsyn.c" />
- <ClCompile Include="..\..\..\..\lib\hsts.c" />
- <ClCompile Include="..\..\..\..\lib\http2.c" />
- <ClCompile Include="..\..\..\..\lib\http_aws_sigv4.c" />
- <ClCompile Include="..\..\..\..\lib\http.c" />
- <ClCompile Include="..\..\..\..\lib\http_chunks.c" />
- <ClCompile Include="..\..\..\..\lib\http_digest.c" />
- <ClCompile Include="..\..\..\..\lib\http_negotiate.c" />
- <ClCompile Include="..\..\..\..\lib\http_ntlm.c" />
- <ClCompile Include="..\..\..\..\lib\http_proxy.c" />
- <ClCompile Include="..\..\..\..\lib\idn_win32.c" />
- <ClCompile Include="..\..\..\..\lib\if2ip.c" />
- <ClCompile Include="..\..\..\..\lib\imap.c" />
- <ClCompile Include="..\..\..\..\lib\inet_ntop.c" />
- <ClCompile Include="..\..\..\..\lib\inet_pton.c" />
- <ClCompile Include="..\..\..\..\lib\krb5.c" />
- <ClCompile Include="..\..\..\..\lib\ldap.c" />
- <ClCompile Include="..\..\..\..\lib\llist.c" />
- <ClCompile Include="..\..\..\..\lib\md4.c" />
- <ClCompile Include="..\..\..\..\lib\md5.c" />
- <ClCompile Include="..\..\..\..\lib\memdebug.c" />
- <ClCompile Include="..\..\..\..\lib\mime.c" />
- <ClCompile Include="..\..\..\..\lib\mprintf.c" />
- <ClCompile Include="..\..\..\..\lib\mqtt.c" />
- <ClCompile Include="..\..\..\..\lib\multi.c" />
- <ClCompile Include="..\..\..\..\lib\netrc.c" />
- <ClCompile Include="..\..\..\..\lib\nonblock.c" />
- <ClCompile Include="..\..\..\..\lib\noproxy.c" />
- <ClCompile Include="..\..\..\..\lib\openldap.c" />
- <ClCompile Include="..\..\..\..\lib\parsedate.c" />
- <ClCompile Include="..\..\..\..\lib\pingpong.c" />
- <ClCompile Include="..\..\..\..\lib\pop3.c" />
- <ClCompile Include="..\..\..\..\lib\progress.c" />
- <ClCompile Include="..\..\..\..\lib\psl.c" />
- <ClCompile Include="..\..\..\..\lib\rand.c" />
- <ClCompile Include="..\..\..\..\lib\rename.c" />
- <ClCompile Include="..\..\..\..\lib\rtsp.c" />
- <ClCompile Include="..\..\..\..\lib\select.c" />
- <ClCompile Include="..\..\..\..\lib\sendf.c" />
- <ClCompile Include="..\..\..\..\lib\setopt.c" />
- <ClCompile Include="..\..\..\..\lib\sha256.c" />
- <ClCompile Include="..\..\..\..\lib\share.c" />
- <ClCompile Include="..\..\..\..\lib\slist.c" />
- <ClCompile Include="..\..\..\..\lib\smb.c" />
- <ClCompile Include="..\..\..\..\lib\smtp.c" />
- <ClCompile Include="..\..\..\..\lib\socketpair.c" />
- <ClCompile Include="..\..\..\..\lib\socks.c" />
- <ClCompile Include="..\..\..\..\lib\socks_gssapi.c" />
- <ClCompile Include="..\..\..\..\lib\socks_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\speedcheck.c" />
- <ClCompile Include="..\..\..\..\lib\splay.c" />
- <ClCompile Include="..\..\..\..\lib\strcase.c" />
- <ClCompile Include="..\..\..\..\lib\strdup.c" />
- <ClCompile Include="..\..\..\..\lib\strerror.c" />
- <ClCompile Include="..\..\..\..\lib\strtok.c" />
- <ClCompile Include="..\..\..\..\lib\strtoofft.c" />
- <ClCompile Include="..\..\..\..\lib\system_win32.c" />
- <ClCompile Include="..\..\..\..\lib\telnet.c" />
- <ClCompile Include="..\..\..\..\lib\tftp.c" />
- <ClCompile Include="..\..\..\..\lib\timediff.c" />
- <ClCompile Include="..\..\..\..\lib\timeval.c" />
- <ClCompile Include="..\..\..\..\lib\transfer.c" />
- <ClCompile Include="..\..\..\..\lib\urlapi.c" />
- <ClCompile Include="..\..\..\..\lib\url.c" />
- <ClCompile Include="..\..\..\..\lib\version.c" />
- <ClCompile Include="..\..\..\..\lib\version_win32.c" />
- <ClCompile Include="..\..\..\..\lib\warnless.c" />
- <ClCompile Include="..\..\..\..\lib\wildcard.c" />
- <ClCompile Include="..\..\..\..\lib\ws.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\cleartext.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\cram.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\digest.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\digest_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\gsasl.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\krb5_gssapi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\krb5_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\ntlm.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\ntlm_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\oauth2.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\spnego_gssapi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\spnego_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\vauth.c" />
- <ClCompile Include="..\..\..\..\lib\vquic\msh3.c" />
- <ClCompile Include="..\..\..\..\lib\vquic\ngtcp2.c" />
- <ClCompile Include="..\..\..\..\lib\vquic\quiche.c" />
- <ClCompile Include="..\..\..\..\lib\vquic\vquic.c" />
- <ClCompile Include="..\..\..\..\lib\vssh\libssh2.c" />
- <ClCompile Include="..\..\..\..\lib\vssh\libssh.c" />
- <ClCompile Include="..\..\..\..\lib\vssh\wolfssh.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\bearssl.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\gskit.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\gtls.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\hostcheck.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\keylog.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\mbedtls.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\mbedtls_threadlock.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\nss.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\openssl.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\rustls.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\schannel.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\schannel_verify.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\sectransp.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\vtls.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\wolfssl.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\x509asn1.c" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\..\..\..\lib\altsvc.h" />
- <ClInclude Include="..\..\..\..\lib\amigaos.h" />
- <ClInclude Include="..\..\..\..\lib\arpa_telnet.h" />
- <ClInclude Include="..\..\..\..\lib\asyn.h" />
- <ClInclude Include="..\..\..\..\lib\bufref.h" />
- <ClInclude Include="..\..\..\..\lib\c-hyper.h" />
- <ClInclude Include="..\..\..\..\lib\config-win32.h" />
- <ClInclude Include="..\..\..\..\lib\conncache.h" />
- <ClInclude Include="..\..\..\..\lib\connect.h" />
- <ClInclude Include="..\..\..\..\lib\content_encoding.h" />
- <ClInclude Include="..\..\..\..\lib\cookie.h" />
- <ClInclude Include="..\..\..\..\lib\curl_addrinfo.h" />
- <ClInclude Include="..\..\..\..\lib\curl_base64.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ctype.h" />
- <ClInclude Include="..\..\..\..\lib\curl_des.h" />
- <ClInclude Include="..\..\..\..\lib\curl_endian.h" />
- <ClInclude Include="..\..\..\..\lib\curl_fnmatch.h" />
- <ClInclude Include="..\..\..\..\lib\curl_gethostname.h" />
- <ClInclude Include="..\..\..\..\lib\curl_get_line.h" />
- <ClInclude Include="..\..\..\..\lib\curl_gssapi.h" />
- <ClInclude Include="..\..\..\..\lib\curl_hmac.h" />
- <ClInclude Include="..\..\..\..\lib\curl_krb5.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ldap.h" />
- <ClInclude Include="..\..\..\..\lib\curl_md4.h" />
- <ClInclude Include="..\..\..\..\lib\curl_md5.h" />
- <ClInclude Include="..\..\..\..\lib\curl_memory.h" />
- <ClInclude Include="..\..\..\..\lib\curl_memrchr.h" />
- <ClInclude Include="..\..\..\..\lib\curl_multibyte.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ntlm_core.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ntlm_wb.h" />
- <ClInclude Include="..\..\..\..\lib\curl_path.h" />
- <ClInclude Include="..\..\..\..\lib\curl_printf.h" />
- <ClInclude Include="..\..\..\..\lib\curl_range.h" />
- <ClInclude Include="..\..\..\..\lib\curl_rtmp.h" />
- <ClInclude Include="..\..\..\..\lib\curl_sasl.h" />
- <ClInclude Include="..\..\..\..\lib\curl_setup.h" />
- <ClInclude Include="..\..\..\..\lib\curl_setup_once.h" />
- <ClInclude Include="..\..\..\..\lib\curl_sha256.h" />
- <ClInclude Include="..\..\..\..\lib\curl_sspi.h" />
- <ClInclude Include="..\..\..\..\lib\curl_threads.h" />
- <ClInclude Include="..\..\..\..\lib\curlx.h" />
- <ClInclude Include="..\..\..\..\lib\dict.h" />
- <ClInclude Include="..\..\..\..\lib\doh.h" />
- <ClInclude Include="..\..\..\..\lib\dynbuf.h" />
- <ClInclude Include="..\..\..\..\lib\easyif.h" />
- <ClInclude Include="..\..\..\..\lib\easy_lock.h" />
- <ClInclude Include="..\..\..\..\lib\easyoptions.h" />
- <ClInclude Include="..\..\..\..\lib\escape.h" />
- <ClInclude Include="..\..\..\..\lib\file.h" />
- <ClInclude Include="..\..\..\..\lib\fileinfo.h" />
- <ClInclude Include="..\..\..\..\lib\fopen.h" />
- <ClInclude Include="..\..\..\..\lib\formdata.h" />
- <ClInclude Include="..\..\..\..\lib\ftp.h" />
- <ClInclude Include="..\..\..\..\lib\ftplistparser.h" />
- <ClInclude Include="..\..\..\..\lib\functypes.h" />
- <ClInclude Include="..\..\..\..\lib\getinfo.h" />
- <ClInclude Include="..\..\..\..\lib\gopher.h" />
- <ClInclude Include="..\..\..\..\lib\h2h3.h" />
- <ClInclude Include="..\..\..\..\lib\hash.h" />
- <ClInclude Include="..\..\..\..\lib\headers.h" />
- <ClInclude Include="..\..\..\..\lib\hostip.h" />
- <ClInclude Include="..\..\..\..\lib\hsts.h" />
- <ClInclude Include="..\..\..\..\lib\http2.h" />
- <ClInclude Include="..\..\..\..\lib\http_aws_sigv4.h" />
- <ClInclude Include="..\..\..\..\lib\http_chunks.h" />
- <ClInclude Include="..\..\..\..\lib\http_digest.h" />
- <ClInclude Include="..\..\..\..\lib\http.h" />
- <ClInclude Include="..\..\..\..\lib\http_negotiate.h" />
- <ClInclude Include="..\..\..\..\lib\http_ntlm.h" />
- <ClInclude Include="..\..\..\..\lib\http_proxy.h" />
- <ClInclude Include="..\..\..\..\lib\if2ip.h" />
- <ClInclude Include="..\..\..\..\lib\imap.h" />
- <ClInclude Include="..\..\..\..\lib\inet_ntop.h" />
- <ClInclude Include="..\..\..\..\lib\inet_pton.h" />
- <ClInclude Include="..\..\..\..\lib\llist.h" />
- <ClInclude Include="..\..\..\..\lib\memdebug.h" />
- <ClInclude Include="..\..\..\..\lib\mime.h" />
- <ClInclude Include="..\..\..\..\lib\mqtt.h" />
- <ClInclude Include="..\..\..\..\lib\multihandle.h" />
- <ClInclude Include="..\..\..\..\lib\multiif.h" />
- <ClInclude Include="..\..\..\..\lib\netrc.h" />
- <ClInclude Include="..\..\..\..\lib\nonblock.h" />
- <ClInclude Include="..\..\..\..\lib\noproxy.h" />
- <ClInclude Include="..\..\..\..\lib\parsedate.h" />
- <ClInclude Include="..\..\..\..\lib\pingpong.h" />
- <ClInclude Include="..\..\..\..\lib\pop3.h" />
- <ClInclude Include="..\..\..\..\lib\progress.h" />
- <ClInclude Include="..\..\..\..\lib\psl.h" />
- <ClInclude Include="..\..\..\..\lib\quic.h" />
- <ClInclude Include="..\..\..\..\lib\rand.h" />
- <ClInclude Include="..\..\..\..\lib\rename.h" />
- <ClInclude Include="..\..\..\..\lib\rtsp.h" />
- <ClInclude Include="..\..\..\..\lib\select.h" />
- <ClInclude Include="..\..\..\..\lib\sendf.h" />
- <ClInclude Include="..\..\..\..\lib\setopt.h" />
- <ClInclude Include="..\..\..\..\lib\setup-vms.h" />
- <ClInclude Include="..\..\..\..\lib\share.h" />
- <ClInclude Include="..\..\..\..\lib\sigpipe.h" />
- <ClInclude Include="..\..\..\..\lib\slist.h" />
- <ClInclude Include="..\..\..\..\lib\smb.h" />
- <ClInclude Include="..\..\..\..\lib\smtp.h" />
- <ClInclude Include="..\..\..\..\lib\sockaddr.h" />
- <ClInclude Include="..\..\..\..\lib\socketpair.h" />
- <ClInclude Include="..\..\..\..\lib\socks.h" />
- <ClInclude Include="..\..\..\..\lib\speedcheck.h" />
- <ClInclude Include="..\..\..\..\lib\splay.h" />
- <ClInclude Include="..\..\..\..\lib\strcase.h" />
- <ClInclude Include="..\..\..\..\lib\strdup.h" />
- <ClInclude Include="..\..\..\..\lib\strerror.h" />
- <ClInclude Include="..\..\..\..\lib\strtok.h" />
- <ClInclude Include="..\..\..\..\lib\strtoofft.h" />
- <ClInclude Include="..\..\..\..\lib\system_win32.h" />
- <ClInclude Include="..\..\..\..\lib\telnet.h" />
- <ClInclude Include="..\..\..\..\lib\tftp.h" />
- <ClInclude Include="..\..\..\..\lib\timediff.h" />
- <ClInclude Include="..\..\..\..\lib\timeval.h" />
- <ClInclude Include="..\..\..\..\lib\transfer.h" />
- <ClInclude Include="..\..\..\..\lib\urlapi-int.h" />
- <ClInclude Include="..\..\..\..\lib\urldata.h" />
- <ClInclude Include="..\..\..\..\lib\url.h" />
- <ClInclude Include="..\..\..\..\lib\version_win32.h" />
- <ClInclude Include="..\..\..\..\lib\warnless.h" />
- <ClInclude Include="..\..\..\..\lib\wildcard.h" />
- <ClInclude Include="..\..\..\..\lib\ws.h" />
- <ClInclude Include="..\..\..\..\lib\vauth\digest.h" />
- <ClInclude Include="..\..\..\..\lib\vauth\ntlm.h" />
- <ClInclude Include="..\..\..\..\lib\vauth\vauth.h" />
- <ClInclude Include="..\..\..\..\lib\vquic\msh3.h" />
- <ClInclude Include="..\..\..\..\lib\vquic\ngtcp2.h" />
- <ClInclude Include="..\..\..\..\lib\vquic\quiche.h" />
- <ClInclude Include="..\..\..\..\lib\vquic\vquic.h" />
- <ClInclude Include="..\..\..\..\lib\vssh\ssh.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\bearssl.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\gskit.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\gtls.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\hostcheck.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\keylog.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\mbedtls.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\mbedtls_threadlock.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\nssg.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\openssl.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\rustls.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\schannel.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\sectransp.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\vtls.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\wolfssl.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\x509asn1.h" />
- </ItemGroup>
- <ItemGroup>
- <ResourceCompile Include="..\..\..\..\lib\libcurl.rc" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project>
diff --git a/projects/Windows/VC10/src/curl.sln b/projects/Windows/VC10/src/curl.sln
deleted file mode 100644
index 31bcc14c2..000000000
--- a/projects/Windows/VC10/src/curl.sln
+++ /dev/null
@@ -1,181 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curl", "curl.vcxproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
- DLL Debug - DLL OpenSSL - DLL LibSSH2|x64 = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
- DLL Debug - DLL OpenSSL|Win32 = DLL Debug - DLL OpenSSL|Win32
- DLL Debug - DLL OpenSSL|x64 = DLL Debug - DLL OpenSSL|x64
- DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32 = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
- DLL Debug - DLL Windows SSPI - DLL WinIDN|x64 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
- DLL Debug - DLL Windows SSPI|Win32 = DLL Debug - DLL Windows SSPI|Win32
- DLL Debug - DLL Windows SSPI|x64 = DLL Debug - DLL Windows SSPI|x64
- DLL Debug - DLL wolfSSL|Win32 = DLL Debug - DLL wolfSSL|Win32
- DLL Debug - DLL wolfSSL|x64 = DLL Debug - DLL wolfSSL|x64
- DLL Debug|Win32 = DLL Debug|Win32
- DLL Debug|x64 = DLL Debug|x64
- DLL Release - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
- DLL Release - DLL OpenSSL - DLL LibSSH2|x64 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
- DLL Release - DLL OpenSSL|Win32 = DLL Release - DLL OpenSSL|Win32
- DLL Release - DLL OpenSSL|x64 = DLL Release - DLL OpenSSL|x64
- DLL Release - DLL Windows SSPI - DLL WinIDN|Win32 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
- DLL Release - DLL Windows SSPI - DLL WinIDN|x64 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
- DLL Release - DLL Windows SSPI|Win32 = DLL Release - DLL Windows SSPI|Win32
- DLL Release - DLL Windows SSPI|x64 = DLL Release - DLL Windows SSPI|x64
- DLL Release - DLL wolfSSL|Win32 = DLL Release - DLL wolfSSL|Win32
- DLL Release - DLL wolfSSL|x64 = DLL Release - DLL wolfSSL|x64
- DLL Release|Win32 = DLL Release|Win32
- DLL Release|x64 = DLL Release|x64
- LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
- LIB Debug - DLL OpenSSL - DLL LibSSH2|x64 = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
- LIB Debug - DLL OpenSSL|Win32 = LIB Debug - DLL OpenSSL|Win32
- LIB Debug - DLL OpenSSL|x64 = LIB Debug - DLL OpenSSL|x64
- LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32 = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
- LIB Debug - DLL Windows SSPI - DLL WinIDN|x64 = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
- LIB Debug - DLL Windows SSPI|Win32 = LIB Debug - DLL Windows SSPI|Win32
- LIB Debug - DLL Windows SSPI|x64 = LIB Debug - DLL Windows SSPI|x64
- LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32 = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
- LIB Debug - LIB OpenSSL - LIB LibSSH2|x64 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
- LIB Debug - LIB OpenSSL|Win32 = LIB Debug - LIB OpenSSL|Win32
- LIB Debug - LIB OpenSSL|x64 = LIB Debug - LIB OpenSSL|x64
- LIB Debug - LIB wolfSSL|Win32 = LIB Debug - LIB wolfSSL|Win32
- LIB Debug - LIB wolfSSL|x64 = LIB Debug - LIB wolfSSL|x64
- LIB Debug|Win32 = LIB Debug|Win32
- LIB Debug|x64 = LIB Debug|x64
- LIB Release - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
- LIB Release - DLL OpenSSL - DLL LibSSH2|x64 = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
- LIB Release - DLL OpenSSL|Win32 = LIB Release - DLL OpenSSL|Win32
- LIB Release - DLL OpenSSL|x64 = LIB Release - DLL OpenSSL|x64
- LIB Release - DLL Windows SSPI - DLL WinIDN|Win32 = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
- LIB Release - DLL Windows SSPI - DLL WinIDN|x64 = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
- LIB Release - DLL Windows SSPI|Win32 = LIB Release - DLL Windows SSPI|Win32
- LIB Release - DLL Windows SSPI|x64 = LIB Release - DLL Windows SSPI|x64
- LIB Release - LIB OpenSSL - LIB LibSSH2|Win32 = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
- LIB Release - LIB OpenSSL - LIB LibSSH2|x64 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
- LIB Release - LIB OpenSSL|Win32 = LIB Release - LIB OpenSSL|Win32
- LIB Release - LIB OpenSSL|x64 = LIB Release - LIB OpenSSL|x64
- LIB Release - LIB wolfSSL|Win32 = LIB Release - LIB wolfSSL|Win32
- LIB Release - LIB wolfSSL|x64 = LIB Release - LIB wolfSSL|x64
- LIB Release|Win32 = LIB Release|Win32
- LIB Release|x64 = LIB Release|x64
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL|Win32.ActiveCfg = DLL Debug - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL|Win32.Build.0 = DLL Debug - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL|x64.ActiveCfg = DLL Debug - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL|x64.Build.0 = DLL Debug - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|x64.ActiveCfg = DLL Debug - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|x64.Build.0 = DLL Debug - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|Win32.ActiveCfg = DLL Debug - DLL wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|Win32.Build.0 = DLL Debug - DLL wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|x64.ActiveCfg = DLL Debug - DLL wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|x64.Build.0 = DLL Debug - DLL wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|x64.Build.0 = DLL Debug|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL|Win32.ActiveCfg = DLL Release - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL|Win32.Build.0 = DLL Release - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL|x64.ActiveCfg = DLL Release - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL|x64.Build.0 = DLL Release - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|Win32.ActiveCfg = DLL Release - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|Win32.ActiveCfg = DLL Release - DLL wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|Win32.Build.0 = DLL Release - DLL wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|x64.ActiveCfg = DLL Release - DLL wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|x64.Build.0 = DLL Release - DLL wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|Win32.Build.0 = DLL Release|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|x64.ActiveCfg = DLL Release|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|x64.Build.0 = DLL Release|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL|Win32.ActiveCfg = LIB Debug - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL|Win32.Build.0 = LIB Debug - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL|x64.ActiveCfg = LIB Debug - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL|x64.Build.0 = LIB Debug - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI|Win32.ActiveCfg = LIB Debug - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI|Win32.Build.0 = LIB Debug - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI|x64.ActiveCfg = LIB Debug - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI|x64.Build.0 = LIB Debug - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32.ActiveCfg = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32.Build.0 = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL - LIB LibSSH2|x64.ActiveCfg = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL - LIB LibSSH2|x64.Build.0 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|Win32.ActiveCfg = LIB Debug - LIB OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|Win32.Build.0 = LIB Debug - LIB OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|x64.ActiveCfg = LIB Debug - LIB OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|x64.Build.0 = LIB Debug - LIB OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|Win32.ActiveCfg = LIB Debug - LIB wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|Win32.Build.0 = LIB Debug - LIB wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|x64.ActiveCfg = LIB Debug - LIB wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|x64.Build.0 = LIB Debug - LIB wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|Win32.Build.0 = LIB Debug|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|x64.ActiveCfg = LIB Debug|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|x64.Build.0 = LIB Debug|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL|Win32.ActiveCfg = LIB Release - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL|Win32.Build.0 = LIB Release - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL|x64.ActiveCfg = LIB Release - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL|x64.Build.0 = LIB Release - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI|Win32.ActiveCfg = LIB Release - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI|Win32.Build.0 = LIB Release - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI|x64.ActiveCfg = LIB Release - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI|x64.Build.0 = LIB Release - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL - LIB LibSSH2|Win32.ActiveCfg = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL - LIB LibSSH2|Win32.Build.0 = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL - LIB LibSSH2|x64.ActiveCfg = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL - LIB LibSSH2|x64.Build.0 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|Win32.ActiveCfg = LIB Release - LIB OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|Win32.Build.0 = LIB Release - LIB OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|x64.ActiveCfg = LIB Release - LIB OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|x64.Build.0 = LIB Release - LIB OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|Win32.ActiveCfg = LIB Release - LIB wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|Win32.Build.0 = LIB Release - LIB wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|x64.ActiveCfg = LIB Release - LIB wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|x64.Build.0 = LIB Release - LIB wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|Win32.ActiveCfg = LIB Release|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|Win32.Build.0 = LIB Release|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|x64.ActiveCfg = LIB Release|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|x64.Build.0 = LIB Release|x64
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/projects/Windows/VC10/src/curl.vcxproj b/projects/Windows/VC10/src/curl.vcxproj
deleted file mode 100644
index 66a3b2fba..000000000
--- a/projects/Windows/VC10/src/curl.vcxproj
+++ /dev/null
@@ -1,2738 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|Win32">
- <Configuration>DLL Debug - DLL wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|x64">
- <Configuration>DLL Debug - DLL wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|Win32">
- <Configuration>DLL Debug - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|x64">
- <Configuration>DLL Debug - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|Win32">
- <Configuration>DLL Debug - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|x64">
- <Configuration>DLL Debug - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug|Win32">
- <Configuration>DLL Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug|x64">
- <Configuration>DLL Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL wolfSSL|Win32">
- <Configuration>DLL Release - DLL wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL wolfSSL|x64">
- <Configuration>DLL Release - DLL wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL|Win32">
- <Configuration>DLL Release - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL|x64">
- <Configuration>DLL Release - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|Win32">
- <Configuration>DLL Release - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|x64">
- <Configuration>DLL Release - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release|Win32">
- <Configuration>DLL Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release|x64">
- <Configuration>DLL Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|Win32">
- <Configuration>LIB Debug - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|x64">
- <Configuration>LIB Debug - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|Win32">
- <Configuration>LIB Debug - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|x64">
- <Configuration>LIB Debug - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|Win32">
- <Configuration>LIB Debug - LIB wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|x64">
- <Configuration>LIB Debug - LIB wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32">
- <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|x64">
- <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|Win32">
- <Configuration>LIB Debug - LIB OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|x64">
- <Configuration>LIB Debug - LIB OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug|Win32">
- <Configuration>LIB Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug|x64">
- <Configuration>LIB Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL|Win32">
- <Configuration>LIB Release - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL|x64">
- <Configuration>LIB Release - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|Win32">
- <Configuration>LIB Release - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|x64">
- <Configuration>LIB Release - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB wolfSSL|Win32">
- <Configuration>LIB Release - LIB wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB wolfSSL|x64">
- <Configuration>LIB Release - LIB wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|Win32">
- <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|x64">
- <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL|Win32">
- <Configuration>LIB Release - LIB OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL|x64">
- <Configuration>LIB Release - LIB OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release|Win32">
- <Configuration>LIB Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release|x64">
- <Configuration>LIB Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{5228E9CE-A216-422F-A5E6-58E95E2DD71D}</ProjectGuid>
- <RootNamespace>curl</RootNamespace>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(ProjectName)</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC10\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC10\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC10\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC10\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC10\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC10\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC10\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC10\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libssh2.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\..\..\lib\curl_multibyte.c" />
- <ClCompile Include="..\..\..\..\lib\dynbuf.c" />
- <ClCompile Include="..\..\..\..\lib\nonblock.c" />
- <ClCompile Include="..\..\..\..\lib\strtoofft.c" />
- <ClCompile Include="..\..\..\..\lib\timediff.c" />
- <ClCompile Include="..\..\..\..\lib\version_win32.c" />
- <ClCompile Include="..\..\..\..\lib\warnless.c" />
- <ClCompile Include="..\..\..\..\src\slist_wc.c" />
- <ClCompile Include="..\..\..\..\src\tool_binmode.c" />
- <ClCompile Include="..\..\..\..\src\tool_bname.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_dbg.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_hdr.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_prg.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_rea.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_see.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_wrt.c" />
- <ClCompile Include="..\..\..\..\src\tool_cfgable.c" />
- <ClCompile Include="..\..\..\..\src\tool_dirhie.c" />
- <ClCompile Include="..\..\..\..\src\tool_doswin.c" />
- <ClCompile Include="..\..\..\..\src\tool_easysrc.c" />
- <ClCompile Include="..\..\..\..\src\tool_filetime.c" />
- <ClCompile Include="..\..\..\..\src\tool_findfile.c" />
- <ClCompile Include="..\..\..\..\src\tool_formparse.c" />
- <ClCompile Include="..\..\..\..\src\tool_getparam.c" />
- <ClCompile Include="..\..\..\..\src\tool_getpass.c" />
- <ClCompile Include="..\..\..\..\src\tool_help.c" />
- <ClCompile Include="..\..\..\..\src\tool_helpers.c" />
- <ClCompile Include="..\..\..\..\src\tool_hugehelp.c" />
- <ClCompile Include="..\..\..\..\src\tool_libinfo.c" />
- <ClCompile Include="..\..\..\..\src\tool_listhelp.c" />
- <ClCompile Include="..\..\..\..\src\tool_main.c" />
- <ClCompile Include="..\..\..\..\src\tool_msgs.c" />
- <ClCompile Include="..\..\..\..\src\tool_operate.c" />
- <ClCompile Include="..\..\..\..\src\tool_operhlp.c" />
- <ClCompile Include="..\..\..\..\src\tool_panykey.c" />
- <ClCompile Include="..\..\..\..\src\tool_paramhlp.c" />
- <ClCompile Include="..\..\..\..\src\tool_parsecfg.c" />
- <ClCompile Include="..\..\..\..\src\tool_progress.c" />
- <ClCompile Include="..\..\..\..\src\tool_setopt.c" />
- <ClCompile Include="..\..\..\..\src\tool_sleep.c" />
- <ClCompile Include="..\..\..\..\src\tool_strdup.c" />
- <ClCompile Include="..\..\..\..\src\tool_urlglob.c" />
- <ClCompile Include="..\..\..\..\src\tool_util.c" />
- <ClCompile Include="..\..\..\..\src\tool_vms.c" />
- <ClCompile Include="..\..\..\..\src\tool_writeout.c" />
- <ClCompile Include="..\..\..\..\src\tool_writeout_json.c" />
- <ClCompile Include="..\..\..\..\src\tool_xattr.c" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\..\..\..\lib\config-win32.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ctype.h" />
- <ClInclude Include="..\..\..\..\lib\curl_multibyte.h" />
- <ClInclude Include="..\..\..\..\lib\curl_setup.h" />
- <ClInclude Include="..\..\..\..\lib\dynbuf.h" />
- <ClInclude Include="..\..\..\..\lib\nonblock.h" />
- <ClInclude Include="..\..\..\..\lib\strtoofft.h" />
- <ClInclude Include="..\..\..\..\lib\timediff.h" />
- <ClInclude Include="..\..\..\..\lib\version_win32.h" />
- <ClInclude Include="..\..\..\..\lib\warnless.h" />
- <ClInclude Include="..\..\..\..\src\slist_wc.h" />
- <ClInclude Include="..\..\..\..\src\tool_binmode.h" />
- <ClInclude Include="..\..\..\..\src\tool_bname.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_dbg.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_hdr.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_prg.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_rea.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_see.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_wrt.h" />
- <ClInclude Include="..\..\..\..\src\tool_cfgable.h" />
- <ClInclude Include="..\..\..\..\src\tool_dirhie.h" />
- <ClInclude Include="..\..\..\..\src\tool_doswin.h" />
- <ClInclude Include="..\..\..\..\src\tool_easysrc.h" />
- <ClInclude Include="..\..\..\..\src\tool_filetime.h" />
- <ClInclude Include="..\..\..\..\src\tool_findfile.h" />
- <ClInclude Include="..\..\..\..\src\tool_formparse.h" />
- <ClInclude Include="..\..\..\..\src\tool_getparam.h" />
- <ClInclude Include="..\..\..\..\src\tool_getpass.h" />
- <ClInclude Include="..\..\..\..\src\tool_helpers.h" />
- <ClInclude Include="..\..\..\..\src\tool_help.h" />
- <ClInclude Include="..\..\..\..\src\tool_hugehelp.h" />
- <ClInclude Include="..\..\..\..\src\tool_libinfo.h" />
- <ClInclude Include="..\..\..\..\src\tool_main.h" />
- <ClInclude Include="..\..\..\..\src\tool_msgs.h" />
- <ClInclude Include="..\..\..\..\src\tool_operate.h" />
- <ClInclude Include="..\..\..\..\src\tool_operhlp.h" />
- <ClInclude Include="..\..\..\..\src\tool_panykey.h" />
- <ClInclude Include="..\..\..\..\src\tool_paramhlp.h" />
- <ClInclude Include="..\..\..\..\src\tool_parsecfg.h" />
- <ClInclude Include="..\..\..\..\src\tool_progress.h" />
- <ClInclude Include="..\..\..\..\src\tool_sdecls.h" />
- <ClInclude Include="..\..\..\..\src\tool_setopt.h" />
- <ClInclude Include="..\..\..\..\src\tool_setup.h" />
- <ClInclude Include="..\..\..\..\src\tool_sleep.h" />
- <ClInclude Include="..\..\..\..\src\tool_strdup.h" />
- <ClInclude Include="..\..\..\..\src\tool_urlglob.h" />
- <ClInclude Include="..\..\..\..\src\tool_util.h" />
- <ClInclude Include="..\..\..\..\src\tool_version.h" />
- <ClInclude Include="..\..\..\..\src\tool_vms.h" />
- <ClInclude Include="..\..\..\..\src\tool_writeout.h" />
- <ClInclude Include="..\..\..\..\src\tool_writeout_json.h" />
- <ClInclude Include="..\..\..\..\src\tool_xattr.h" />
- </ItemGroup>
- <ItemGroup>
- <ResourceCompile Include="..\..\..\..\src\curl.rc" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project>
diff --git a/projects/Windows/VC11/curl-all.sln b/projects/Windows/VC11/curl-all.sln
deleted file mode 100644
index 4bc4caeb7..000000000
--- a/projects/Windows/VC11/curl-all.sln
+++ /dev/null
@@ -1,298 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2012
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curl", "src\curl.vcxproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
- ProjectSection(ProjectDependencies) = postProject
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB} = {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcurl", "lib\libcurl.vcxproj", "{DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
- DLL Debug - DLL OpenSSL - DLL LibSSH2|x64 = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
- DLL Debug - DLL OpenSSL|Win32 = DLL Debug - DLL OpenSSL|Win32
- DLL Debug - DLL OpenSSL|x64 = DLL Debug - DLL OpenSSL|x64
- DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32 = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
- DLL Debug - DLL Windows SSPI - DLL WinIDN|x64 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
- DLL Debug - DLL Windows SSPI|Win32 = DLL Debug - DLL Windows SSPI|Win32
- DLL Debug - DLL Windows SSPI|x64 = DLL Debug - DLL Windows SSPI|x64
- DLL Debug - DLL wolfSSL|Win32 = DLL Debug - DLL wolfSSL|Win32
- DLL Debug - DLL wolfSSL|x64 = DLL Debug - DLL wolfSSL|x64
- DLL Debug|Win32 = DLL Debug|Win32
- DLL Debug|x64 = DLL Debug|x64
- DLL Release - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
- DLL Release - DLL OpenSSL - DLL LibSSH2|x64 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
- DLL Release - DLL OpenSSL|Win32 = DLL Release - DLL OpenSSL|Win32
- DLL Release - DLL OpenSSL|x64 = DLL Release - DLL OpenSSL|x64
- DLL Release - DLL Windows SSPI - DLL WinIDN|Win32 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
- DLL Release - DLL Windows SSPI - DLL WinIDN|x64 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
- DLL Release - DLL Windows SSPI|Win32 = DLL Release - DLL Windows SSPI|Win32
- DLL Release - DLL Windows SSPI|x64 = DLL Release - DLL Windows SSPI|x64
- DLL Release - DLL wolfSSL|Win32 = DLL Release - DLL wolfSSL|Win32
- DLL Release - DLL wolfSSL|x64 = DLL Release - DLL wolfSSL|x64
- DLL Release|Win32 = DLL Release|Win32
- DLL Release|x64 = DLL Release|x64
- LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
- LIB Debug - DLL OpenSSL - DLL LibSSH2|x64 = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
- LIB Debug - DLL OpenSSL|Win32 = LIB Debug - DLL OpenSSL|Win32
- LIB Debug - DLL OpenSSL|x64 = LIB Debug - DLL OpenSSL|x64
- LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32 = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
- LIB Debug - DLL Windows SSPI - DLL WinIDN|x64 = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
- LIB Debug - DLL Windows SSPI|Win32 = LIB Debug - DLL Windows SSPI|Win32
- LIB Debug - DLL Windows SSPI|x64 = LIB Debug - DLL Windows SSPI|x64
- LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32 = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
- LIB Debug - LIB OpenSSL - LIB LibSSH2|x64 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
- LIB Debug - LIB OpenSSL|Win32 = LIB Debug - LIB OpenSSL|Win32
- LIB Debug - LIB OpenSSL|x64 = LIB Debug - LIB OpenSSL|x64
- LIB Debug - LIB wolfSSL|Win32 = LIB Debug - LIB wolfSSL|Win32
- LIB Debug - LIB wolfSSL|x64 = LIB Debug - LIB wolfSSL|x64
- LIB Debug|Win32 = LIB Debug|Win32
- LIB Debug|x64 = LIB Debug|x64
- LIB Release - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
- LIB Release - DLL OpenSSL - DLL LibSSH2|x64 = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
- LIB Release - DLL OpenSSL|Win32 = LIB Release - DLL OpenSSL|Win32
- LIB Release - DLL OpenSSL|x64 = LIB Release - DLL OpenSSL|x64
- LIB Release - DLL Windows SSPI - DLL WinIDN|Win32 = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
- LIB Release - DLL Windows SSPI - DLL WinIDN|x64 = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
- LIB Release - DLL Windows SSPI|Win32 = LIB Release - DLL Windows SSPI|Win32
- LIB Release - DLL Windows SSPI|x64 = LIB Release - DLL Windows SSPI|x64
- LIB Release - LIB OpenSSL - LIB LibSSH2|Win32 = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
- LIB Release - LIB OpenSSL - LIB LibSSH2|x64 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
- LIB Release - LIB OpenSSL|Win32 = LIB Release - LIB OpenSSL|Win32
- LIB Release - LIB OpenSSL|x64 = LIB Release - LIB OpenSSL|x64
- LIB Release - LIB wolfSSL|Win32 = LIB Release - LIB wolfSSL|Win32
- LIB Release - LIB wolfSSL|x64 = LIB Release - LIB wolfSSL|x64
- LIB Release|Win32 = LIB Release|Win32
- LIB Release|x64 = LIB Release|x64
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL|Win32.ActiveCfg = DLL Debug - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL|Win32.Build.0 = DLL Debug - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL|x64.ActiveCfg = DLL Debug - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL|x64.Build.0 = DLL Debug - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|x64.ActiveCfg = DLL Debug - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|x64.Build.0 = DLL Debug - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|Win32.ActiveCfg = DLL Debug - DLL wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|Win32.Build.0 = DLL Debug - DLL wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|x64.ActiveCfg = DLL Debug - DLL wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|x64.Build.0 = DLL Debug - DLL wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|x64.Build.0 = DLL Debug|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL|Win32.ActiveCfg = DLL Release - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL|Win32.Build.0 = DLL Release - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL|x64.ActiveCfg = DLL Release - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL|x64.Build.0 = DLL Release - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|Win32.ActiveCfg = DLL Release - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|Win32.ActiveCfg = DLL Release - DLL wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|Win32.Build.0 = DLL Release - DLL wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|x64.ActiveCfg = DLL Release - DLL wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|x64.Build.0 = DLL Release - DLL wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|Win32.Build.0 = DLL Release|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|x64.ActiveCfg = DLL Release|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|x64.Build.0 = DLL Release|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL|Win32.ActiveCfg = LIB Debug - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL|Win32.Build.0 = LIB Debug - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL|x64.ActiveCfg = LIB Debug - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL|x64.Build.0 = LIB Debug - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI|Win32.ActiveCfg = LIB Debug - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI|Win32.Build.0 = LIB Debug - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI|x64.ActiveCfg = LIB Debug - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI|x64.Build.0 = LIB Debug - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32.ActiveCfg = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32.Build.0 = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL - LIB LibSSH2|x64.ActiveCfg = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL - LIB LibSSH2|x64.Build.0 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|Win32.ActiveCfg = LIB Debug - LIB OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|Win32.Build.0 = LIB Debug - LIB OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|x64.ActiveCfg = LIB Debug - LIB OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|x64.Build.0 = LIB Debug - LIB OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|Win32.ActiveCfg = LIB Debug - LIB wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|Win32.Build.0 = LIB Debug - LIB wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|x64.ActiveCfg = LIB Debug - LIB wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|x64.Build.0 = LIB Debug - LIB wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|Win32.Build.0 = LIB Debug|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|x64.ActiveCfg = LIB Debug|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|x64.Build.0 = LIB Debug|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL|Win32.ActiveCfg = LIB Release - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL|Win32.Build.0 = LIB Release - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL|x64.ActiveCfg = LIB Release - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL|x64.Build.0 = LIB Release - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI|Win32.ActiveCfg = LIB Release - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI|Win32.Build.0 = LIB Release - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI|x64.ActiveCfg = LIB Release - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI|x64.Build.0 = LIB Release - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL - LIB LibSSH2|Win32.ActiveCfg = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL - LIB LibSSH2|Win32.Build.0 = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL - LIB LibSSH2|x64.ActiveCfg = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL - LIB LibSSH2|x64.Build.0 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|Win32.ActiveCfg = LIB Release - LIB OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|Win32.Build.0 = LIB Release - LIB OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|x64.ActiveCfg = LIB Release - LIB OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|x64.Build.0 = LIB Release - LIB OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|Win32.ActiveCfg = LIB Release - LIB wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|Win32.Build.0 = LIB Release - LIB wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|x64.ActiveCfg = LIB Release - LIB wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|x64.Build.0 = LIB Release - LIB wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|Win32.ActiveCfg = LIB Release|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|Win32.Build.0 = LIB Release|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|x64.ActiveCfg = LIB Release|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|x64.Build.0 = LIB Release|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL|Win32.ActiveCfg = DLL Debug - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL|Win32.Build.0 = DLL Debug - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL|x64.ActiveCfg = DLL Debug - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL|x64.Build.0 = DLL Debug - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|x64.ActiveCfg = DLL Debug - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|x64.Build.0 = DLL Debug - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|Win32.ActiveCfg = DLL Debug - DLL wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|Win32.Build.0 = DLL Debug - DLL wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|x64.ActiveCfg = DLL Debug - DLL wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|x64.Build.0 = DLL Debug - DLL wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.Build.0 = DLL Debug|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.ActiveCfg = DLL Release - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.Build.0 = DLL Release - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.ActiveCfg = DLL Release - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.Build.0 = DLL Release - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.ActiveCfg = DLL Release - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|Win32.ActiveCfg = DLL Release - DLL wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|Win32.Build.0 = DLL Release - DLL wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|x64.ActiveCfg = DLL Release - DLL wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|x64.Build.0 = DLL Release - DLL wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.Build.0 = DLL Release|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|x64.ActiveCfg = DLL Release|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|x64.Build.0 = DLL Release|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL|Win32.ActiveCfg = LIB Debug - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL|Win32.Build.0 = LIB Debug - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL|x64.ActiveCfg = LIB Debug - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL|x64.Build.0 = LIB Debug - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI|Win32.ActiveCfg = LIB Debug - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI|Win32.Build.0 = LIB Debug - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI|x64.ActiveCfg = LIB Debug - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI|x64.Build.0 = LIB Debug - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32.ActiveCfg = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32.Build.0 = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL - LIB LibSSH2|x64.ActiveCfg = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL - LIB LibSSH2|x64.Build.0 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|Win32.ActiveCfg = LIB Debug - LIB OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|Win32.Build.0 = LIB Debug - LIB OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|x64.ActiveCfg = LIB Debug - LIB OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|x64.Build.0 = LIB Debug - LIB OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|Win32.ActiveCfg = LIB Debug - LIB wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|Win32.Build.0 = LIB Debug - LIB wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|x64.ActiveCfg = LIB Debug - LIB wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|x64.Build.0 = LIB Debug - LIB wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|Win32.Build.0 = LIB Debug|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|x64.ActiveCfg = LIB Debug|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|x64.Build.0 = LIB Debug|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL|Win32.ActiveCfg = LIB Release - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL|Win32.Build.0 = LIB Release - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL|x64.ActiveCfg = LIB Release - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL|x64.Build.0 = LIB Release - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI|Win32.ActiveCfg = LIB Release - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI|Win32.Build.0 = LIB Release - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI|x64.ActiveCfg = LIB Release - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI|x64.Build.0 = LIB Release - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL - LIB LibSSH2|Win32.ActiveCfg = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL - LIB LibSSH2|Win32.Build.0 = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL - LIB LibSSH2|x64.ActiveCfg = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL - LIB LibSSH2|x64.Build.0 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|Win32.ActiveCfg = LIB Release - LIB OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|Win32.Build.0 = LIB Release - LIB OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|x64.ActiveCfg = LIB Release - LIB OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|x64.Build.0 = LIB Release - LIB OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|Win32.ActiveCfg = LIB Release - LIB wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|Win32.Build.0 = LIB Release - LIB wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|x64.ActiveCfg = LIB Release - LIB wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|x64.Build.0 = LIB Release - LIB wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|Win32.ActiveCfg = LIB Release|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|Win32.Build.0 = LIB Release|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|x64.ActiveCfg = LIB Release|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|x64.Build.0 = LIB Release|x64
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/projects/Windows/VC11/lib/libcurl.sln b/projects/Windows/VC11/lib/libcurl.sln
deleted file mode 100644
index 34c1dd225..000000000
--- a/projects/Windows/VC11/lib/libcurl.sln
+++ /dev/null
@@ -1,181 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2012
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcurl", "libcurl.vcxproj", "{DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
- DLL Debug - DLL OpenSSL - DLL LibSSH2|x64 = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
- DLL Debug - DLL OpenSSL|Win32 = DLL Debug - DLL OpenSSL|Win32
- DLL Debug - DLL OpenSSL|x64 = DLL Debug - DLL OpenSSL|x64
- DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32 = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
- DLL Debug - DLL Windows SSPI - DLL WinIDN|x64 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
- DLL Debug - DLL Windows SSPI|Win32 = DLL Debug - DLL Windows SSPI|Win32
- DLL Debug - DLL Windows SSPI|x64 = DLL Debug - DLL Windows SSPI|x64
- DLL Debug - DLL wolfSSL|Win32 = DLL Debug - DLL wolfSSL|Win32
- DLL Debug - DLL wolfSSL|x64 = DLL Debug - DLL wolfSSL|x64
- DLL Debug|Win32 = DLL Debug|Win32
- DLL Debug|x64 = DLL Debug|x64
- DLL Release - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
- DLL Release - DLL OpenSSL - DLL LibSSH2|x64 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
- DLL Release - DLL OpenSSL|Win32 = DLL Release - DLL OpenSSL|Win32
- DLL Release - DLL OpenSSL|x64 = DLL Release - DLL OpenSSL|x64
- DLL Release - DLL Windows SSPI - DLL WinIDN|Win32 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
- DLL Release - DLL Windows SSPI - DLL WinIDN|x64 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
- DLL Release - DLL Windows SSPI|Win32 = DLL Release - DLL Windows SSPI|Win32
- DLL Release - DLL Windows SSPI|x64 = DLL Release - DLL Windows SSPI|x64
- DLL Release - DLL wolfSSL|Win32 = DLL Release - DLL wolfSSL|Win32
- DLL Release - DLL wolfSSL|x64 = DLL Release - DLL wolfSSL|x64
- DLL Release|Win32 = DLL Release|Win32
- DLL Release|x64 = DLL Release|x64
- LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
- LIB Debug - DLL OpenSSL - DLL LibSSH2|x64 = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
- LIB Debug - DLL OpenSSL|Win32 = LIB Debug - DLL OpenSSL|Win32
- LIB Debug - DLL OpenSSL|x64 = LIB Debug - DLL OpenSSL|x64
- LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32 = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
- LIB Debug - DLL Windows SSPI - DLL WinIDN|x64 = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
- LIB Debug - DLL Windows SSPI|Win32 = LIB Debug - DLL Windows SSPI|Win32
- LIB Debug - DLL Windows SSPI|x64 = LIB Debug - DLL Windows SSPI|x64
- LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32 = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
- LIB Debug - LIB OpenSSL - LIB LibSSH2|x64 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
- LIB Debug - LIB OpenSSL|Win32 = LIB Debug - LIB OpenSSL|Win32
- LIB Debug - LIB OpenSSL|x64 = LIB Debug - LIB OpenSSL|x64
- LIB Debug - LIB wolfSSL|Win32 = LIB Debug - LIB wolfSSL|Win32
- LIB Debug - LIB wolfSSL|x64 = LIB Debug - LIB wolfSSL|x64
- LIB Debug|Win32 = LIB Debug|Win32
- LIB Debug|x64 = LIB Debug|x64
- LIB Release - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
- LIB Release - DLL OpenSSL - DLL LibSSH2|x64 = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
- LIB Release - DLL OpenSSL|Win32 = LIB Release - DLL OpenSSL|Win32
- LIB Release - DLL OpenSSL|x64 = LIB Release - DLL OpenSSL|x64
- LIB Release - DLL Windows SSPI - DLL WinIDN|Win32 = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
- LIB Release - DLL Windows SSPI - DLL WinIDN|x64 = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
- LIB Release - DLL Windows SSPI|Win32 = LIB Release - DLL Windows SSPI|Win32
- LIB Release - DLL Windows SSPI|x64 = LIB Release - DLL Windows SSPI|x64
- LIB Release - LIB OpenSSL - LIB LibSSH2|Win32 = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
- LIB Release - LIB OpenSSL - LIB LibSSH2|x64 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
- LIB Release - LIB OpenSSL|Win32 = LIB Release - LIB OpenSSL|Win32
- LIB Release - LIB OpenSSL|x64 = LIB Release - LIB OpenSSL|x64
- LIB Release - LIB wolfSSL|Win32 = LIB Release - LIB wolfSSL|Win32
- LIB Release - LIB wolfSSL|x64 = LIB Release - LIB wolfSSL|x64
- LIB Release|Win32 = LIB Release|Win32
- LIB Release|x64 = LIB Release|x64
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL|Win32.ActiveCfg = DLL Debug - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL|Win32.Build.0 = DLL Debug - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL|x64.ActiveCfg = DLL Debug - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL|x64.Build.0 = DLL Debug - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|x64.ActiveCfg = DLL Debug - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|x64.Build.0 = DLL Debug - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|Win32.ActiveCfg = DLL Debug - DLL wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|Win32.Build.0 = DLL Debug - DLL wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|x64.ActiveCfg = DLL Debug - DLL wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|x64.Build.0 = DLL Debug - DLL wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.Build.0 = DLL Debug|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.ActiveCfg = DLL Release - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.Build.0 = DLL Release - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.ActiveCfg = DLL Release - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.Build.0 = DLL Release - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.ActiveCfg = DLL Release - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|Win32.ActiveCfg = DLL Release - DLL wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|Win32.Build.0 = DLL Release - DLL wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|x64.ActiveCfg = DLL Release - DLL wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|x64.Build.0 = DLL Release - DLL wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.Build.0 = DLL Release|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|x64.ActiveCfg = DLL Release|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|x64.Build.0 = DLL Release|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL|Win32.ActiveCfg = LIB Debug - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL|Win32.Build.0 = LIB Debug - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL|x64.ActiveCfg = LIB Debug - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL|x64.Build.0 = LIB Debug - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI|Win32.ActiveCfg = LIB Debug - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI|Win32.Build.0 = LIB Debug - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI|x64.ActiveCfg = LIB Debug - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI|x64.Build.0 = LIB Debug - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32.ActiveCfg = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32.Build.0 = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL - LIB LibSSH2|x64.ActiveCfg = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL - LIB LibSSH2|x64.Build.0 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|Win32.ActiveCfg = LIB Debug - LIB OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|Win32.Build.0 = LIB Debug - LIB OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|x64.ActiveCfg = LIB Debug - LIB OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|x64.Build.0 = LIB Debug - LIB OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|Win32.ActiveCfg = LIB Debug - LIB wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|Win32.Build.0 = LIB Debug - LIB wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|x64.ActiveCfg = LIB Debug - LIB wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|x64.Build.0 = LIB Debug - LIB wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|Win32.Build.0 = LIB Debug|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|x64.ActiveCfg = LIB Debug|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|x64.Build.0 = LIB Debug|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL|Win32.ActiveCfg = LIB Release - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL|Win32.Build.0 = LIB Release - DLL OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL|x64.ActiveCfg = LIB Release - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL|x64.Build.0 = LIB Release - DLL OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI|Win32.ActiveCfg = LIB Release - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI|Win32.Build.0 = LIB Release - DLL Windows SSPI|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI|x64.ActiveCfg = LIB Release - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI|x64.Build.0 = LIB Release - DLL Windows SSPI|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL - LIB LibSSH2|Win32.ActiveCfg = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL - LIB LibSSH2|Win32.Build.0 = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL - LIB LibSSH2|x64.ActiveCfg = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL - LIB LibSSH2|x64.Build.0 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|Win32.ActiveCfg = LIB Release - LIB OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|Win32.Build.0 = LIB Release - LIB OpenSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|x64.ActiveCfg = LIB Release - LIB OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|x64.Build.0 = LIB Release - LIB OpenSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|Win32.ActiveCfg = LIB Release - LIB wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|Win32.Build.0 = LIB Release - LIB wolfSSL|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|x64.ActiveCfg = LIB Release - LIB wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|x64.Build.0 = LIB Release - LIB wolfSSL|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|Win32.ActiveCfg = LIB Release|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|Win32.Build.0 = LIB Release|Win32
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|x64.ActiveCfg = LIB Release|x64
- {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|x64.Build.0 = LIB Release|x64
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/projects/Windows/VC11/lib/libcurl.vcxproj b/projects/Windows/VC11/lib/libcurl.vcxproj
deleted file mode 100644
index 81c42455c..000000000
--- a/projects/Windows/VC11/lib/libcurl.vcxproj
+++ /dev/null
@@ -1,2703 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|Win32">
- <Configuration>DLL Debug - DLL wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|x64">
- <Configuration>DLL Debug - DLL wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|Win32">
- <Configuration>DLL Debug - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|x64">
- <Configuration>DLL Debug - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|Win32">
- <Configuration>DLL Debug - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|x64">
- <Configuration>DLL Debug - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug|Win32">
- <Configuration>DLL Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug|x64">
- <Configuration>DLL Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL wolfSSL|Win32">
- <Configuration>DLL Release - DLL wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL wolfSSL|x64">
- <Configuration>DLL Release - DLL wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL|Win32">
- <Configuration>DLL Release - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL|x64">
- <Configuration>DLL Release - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|Win32">
- <Configuration>DLL Release - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|x64">
- <Configuration>DLL Release - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release|Win32">
- <Configuration>DLL Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release|x64">
- <Configuration>DLL Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|Win32">
- <Configuration>LIB Debug - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|x64">
- <Configuration>LIB Debug - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|Win32">
- <Configuration>LIB Debug - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|x64">
- <Configuration>LIB Debug - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|Win32">
- <Configuration>LIB Debug - LIB wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|x64">
- <Configuration>LIB Debug - LIB wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32">
- <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|x64">
- <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|Win32">
- <Configuration>LIB Debug - LIB OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|x64">
- <Configuration>LIB Debug - LIB OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug|Win32">
- <Configuration>LIB Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug|x64">
- <Configuration>LIB Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL|Win32">
- <Configuration>LIB Release - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL|x64">
- <Configuration>LIB Release - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|Win32">
- <Configuration>LIB Release - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|x64">
- <Configuration>LIB Release - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB wolfSSL|Win32">
- <Configuration>LIB Release - LIB wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB wolfSSL|x64">
- <Configuration>LIB Release - LIB wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|Win32">
- <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|x64">
- <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL|Win32">
- <Configuration>LIB Release - LIB OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL|x64">
- <Configuration>LIB Release - LIB OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release|Win32">
- <Configuration>LIB Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release|x64">
- <Configuration>LIB Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}</ProjectGuid>
- <RootNamespace>libcurl</RootNamespace>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)d</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win32\VC11\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win64\VC11\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win32\VC11\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win64\VC11\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC11\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC11\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC11\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC11\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC11\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC11\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC11\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC11\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC11\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC11\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC11\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC11\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\..\..\lib\altsvc.c" />
- <ClCompile Include="..\..\..\..\lib\amigaos.c" />
- <ClCompile Include="..\..\..\..\lib\asyn-ares.c" />
- <ClCompile Include="..\..\..\..\lib\asyn-thread.c" />
- <ClCompile Include="..\..\..\..\lib\base64.c" />
- <ClCompile Include="..\..\..\..\lib\bufref.c" />
- <ClCompile Include="..\..\..\..\lib\c-hyper.c" />
- <ClCompile Include="..\..\..\..\lib\conncache.c" />
- <ClCompile Include="..\..\..\..\lib\connect.c" />
- <ClCompile Include="..\..\..\..\lib\content_encoding.c" />
- <ClCompile Include="..\..\..\..\lib\cookie.c" />
- <ClCompile Include="..\..\..\..\lib\curl_addrinfo.c" />
- <ClCompile Include="..\..\..\..\lib\curl_des.c" />
- <ClCompile Include="..\..\..\..\lib\curl_endian.c" />
- <ClCompile Include="..\..\..\..\lib\curl_fnmatch.c" />
- <ClCompile Include="..\..\..\..\lib\curl_gethostname.c" />
- <ClCompile Include="..\..\..\..\lib\curl_get_line.c" />
- <ClCompile Include="..\..\..\..\lib\curl_gssapi.c" />
- <ClCompile Include="..\..\..\..\lib\curl_memrchr.c" />
- <ClCompile Include="..\..\..\..\lib\curl_multibyte.c" />
- <ClCompile Include="..\..\..\..\lib\curl_ntlm_core.c" />
- <ClCompile Include="..\..\..\..\lib\curl_ntlm_wb.c" />
- <ClCompile Include="..\..\..\..\lib\curl_path.c" />
- <ClCompile Include="..\..\..\..\lib\curl_range.c" />
- <ClCompile Include="..\..\..\..\lib\curl_rtmp.c" />
- <ClCompile Include="..\..\..\..\lib\curl_sasl.c" />
- <ClCompile Include="..\..\..\..\lib\curl_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\curl_threads.c" />
- <ClCompile Include="..\..\..\..\lib\dict.c" />
- <ClCompile Include="..\..\..\..\lib\doh.c" />
- <ClCompile Include="..\..\..\..\lib\dynbuf.c" />
- <ClCompile Include="..\..\..\..\lib\easy.c" />
- <ClCompile Include="..\..\..\..\lib\easygetopt.c" />
- <ClCompile Include="..\..\..\..\lib\easyoptions.c" />
- <ClCompile Include="..\..\..\..\lib\escape.c" />
- <ClCompile Include="..\..\..\..\lib\file.c" />
- <ClCompile Include="..\..\..\..\lib\fileinfo.c" />
- <ClCompile Include="..\..\..\..\lib\fopen.c" />
- <ClCompile Include="..\..\..\..\lib\formdata.c" />
- <ClCompile Include="..\..\..\..\lib\ftp.c" />
- <ClCompile Include="..\..\..\..\lib\ftplistparser.c" />
- <ClCompile Include="..\..\..\..\lib\getenv.c" />
- <ClCompile Include="..\..\..\..\lib\getinfo.c" />
- <ClCompile Include="..\..\..\..\lib\gopher.c" />
- <ClCompile Include="..\..\..\..\lib\h2h3.c" />
- <ClCompile Include="..\..\..\..\lib\hash.c" />
- <ClCompile Include="..\..\..\..\lib\headers.c" />
- <ClCompile Include="..\..\..\..\lib\hmac.c" />
- <ClCompile Include="..\..\..\..\lib\hostasyn.c" />
- <ClCompile Include="..\..\..\..\lib\hostip4.c" />
- <ClCompile Include="..\..\..\..\lib\hostip6.c" />
- <ClCompile Include="..\..\..\..\lib\hostip.c" />
- <ClCompile Include="..\..\..\..\lib\hostsyn.c" />
- <ClCompile Include="..\..\..\..\lib\hsts.c" />
- <ClCompile Include="..\..\..\..\lib\http2.c" />
- <ClCompile Include="..\..\..\..\lib\http_aws_sigv4.c" />
- <ClCompile Include="..\..\..\..\lib\http.c" />
- <ClCompile Include="..\..\..\..\lib\http_chunks.c" />
- <ClCompile Include="..\..\..\..\lib\http_digest.c" />
- <ClCompile Include="..\..\..\..\lib\http_negotiate.c" />
- <ClCompile Include="..\..\..\..\lib\http_ntlm.c" />
- <ClCompile Include="..\..\..\..\lib\http_proxy.c" />
- <ClCompile Include="..\..\..\..\lib\idn_win32.c" />
- <ClCompile Include="..\..\..\..\lib\if2ip.c" />
- <ClCompile Include="..\..\..\..\lib\imap.c" />
- <ClCompile Include="..\..\..\..\lib\inet_ntop.c" />
- <ClCompile Include="..\..\..\..\lib\inet_pton.c" />
- <ClCompile Include="..\..\..\..\lib\krb5.c" />
- <ClCompile Include="..\..\..\..\lib\ldap.c" />
- <ClCompile Include="..\..\..\..\lib\llist.c" />
- <ClCompile Include="..\..\..\..\lib\md4.c" />
- <ClCompile Include="..\..\..\..\lib\md5.c" />
- <ClCompile Include="..\..\..\..\lib\memdebug.c" />
- <ClCompile Include="..\..\..\..\lib\mime.c" />
- <ClCompile Include="..\..\..\..\lib\mprintf.c" />
- <ClCompile Include="..\..\..\..\lib\mqtt.c" />
- <ClCompile Include="..\..\..\..\lib\multi.c" />
- <ClCompile Include="..\..\..\..\lib\netrc.c" />
- <ClCompile Include="..\..\..\..\lib\nonblock.c" />
- <ClCompile Include="..\..\..\..\lib\noproxy.c" />
- <ClCompile Include="..\..\..\..\lib\openldap.c" />
- <ClCompile Include="..\..\..\..\lib\parsedate.c" />
- <ClCompile Include="..\..\..\..\lib\pingpong.c" />
- <ClCompile Include="..\..\..\..\lib\pop3.c" />
- <ClCompile Include="..\..\..\..\lib\progress.c" />
- <ClCompile Include="..\..\..\..\lib\psl.c" />
- <ClCompile Include="..\..\..\..\lib\rand.c" />
- <ClCompile Include="..\..\..\..\lib\rename.c" />
- <ClCompile Include="..\..\..\..\lib\rtsp.c" />
- <ClCompile Include="..\..\..\..\lib\select.c" />
- <ClCompile Include="..\..\..\..\lib\sendf.c" />
- <ClCompile Include="..\..\..\..\lib\setopt.c" />
- <ClCompile Include="..\..\..\..\lib\sha256.c" />
- <ClCompile Include="..\..\..\..\lib\share.c" />
- <ClCompile Include="..\..\..\..\lib\slist.c" />
- <ClCompile Include="..\..\..\..\lib\smb.c" />
- <ClCompile Include="..\..\..\..\lib\smtp.c" />
- <ClCompile Include="..\..\..\..\lib\socketpair.c" />
- <ClCompile Include="..\..\..\..\lib\socks.c" />
- <ClCompile Include="..\..\..\..\lib\socks_gssapi.c" />
- <ClCompile Include="..\..\..\..\lib\socks_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\speedcheck.c" />
- <ClCompile Include="..\..\..\..\lib\splay.c" />
- <ClCompile Include="..\..\..\..\lib\strcase.c" />
- <ClCompile Include="..\..\..\..\lib\strdup.c" />
- <ClCompile Include="..\..\..\..\lib\strerror.c" />
- <ClCompile Include="..\..\..\..\lib\strtok.c" />
- <ClCompile Include="..\..\..\..\lib\strtoofft.c" />
- <ClCompile Include="..\..\..\..\lib\system_win32.c" />
- <ClCompile Include="..\..\..\..\lib\telnet.c" />
- <ClCompile Include="..\..\..\..\lib\tftp.c" />
- <ClCompile Include="..\..\..\..\lib\timediff.c" />
- <ClCompile Include="..\..\..\..\lib\timeval.c" />
- <ClCompile Include="..\..\..\..\lib\transfer.c" />
- <ClCompile Include="..\..\..\..\lib\urlapi.c" />
- <ClCompile Include="..\..\..\..\lib\url.c" />
- <ClCompile Include="..\..\..\..\lib\version.c" />
- <ClCompile Include="..\..\..\..\lib\version_win32.c" />
- <ClCompile Include="..\..\..\..\lib\warnless.c" />
- <ClCompile Include="..\..\..\..\lib\wildcard.c" />
- <ClCompile Include="..\..\..\..\lib\ws.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\cleartext.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\cram.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\digest.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\digest_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\gsasl.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\krb5_gssapi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\krb5_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\ntlm.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\ntlm_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\oauth2.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\spnego_gssapi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\spnego_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\vauth.c" />
- <ClCompile Include="..\..\..\..\lib\vquic\msh3.c" />
- <ClCompile Include="..\..\..\..\lib\vquic\ngtcp2.c" />
- <ClCompile Include="..\..\..\..\lib\vquic\quiche.c" />
- <ClCompile Include="..\..\..\..\lib\vquic\vquic.c" />
- <ClCompile Include="..\..\..\..\lib\vssh\libssh2.c" />
- <ClCompile Include="..\..\..\..\lib\vssh\libssh.c" />
- <ClCompile Include="..\..\..\..\lib\vssh\wolfssh.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\bearssl.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\gskit.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\gtls.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\hostcheck.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\keylog.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\mbedtls.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\mbedtls_threadlock.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\nss.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\openssl.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\rustls.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\schannel.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\schannel_verify.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\sectransp.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\vtls.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\wolfssl.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\x509asn1.c" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\..\..\..\lib\altsvc.h" />
- <ClInclude Include="..\..\..\..\lib\amigaos.h" />
- <ClInclude Include="..\..\..\..\lib\arpa_telnet.h" />
- <ClInclude Include="..\..\..\..\lib\asyn.h" />
- <ClInclude Include="..\..\..\..\lib\bufref.h" />
- <ClInclude Include="..\..\..\..\lib\c-hyper.h" />
- <ClInclude Include="..\..\..\..\lib\config-win32.h" />
- <ClInclude Include="..\..\..\..\lib\conncache.h" />
- <ClInclude Include="..\..\..\..\lib\connect.h" />
- <ClInclude Include="..\..\..\..\lib\content_encoding.h" />
- <ClInclude Include="..\..\..\..\lib\cookie.h" />
- <ClInclude Include="..\..\..\..\lib\curl_addrinfo.h" />
- <ClInclude Include="..\..\..\..\lib\curl_base64.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ctype.h" />
- <ClInclude Include="..\..\..\..\lib\curl_des.h" />
- <ClInclude Include="..\..\..\..\lib\curl_endian.h" />
- <ClInclude Include="..\..\..\..\lib\curl_fnmatch.h" />
- <ClInclude Include="..\..\..\..\lib\curl_gethostname.h" />
- <ClInclude Include="..\..\..\..\lib\curl_get_line.h" />
- <ClInclude Include="..\..\..\..\lib\curl_gssapi.h" />
- <ClInclude Include="..\..\..\..\lib\curl_hmac.h" />
- <ClInclude Include="..\..\..\..\lib\curl_krb5.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ldap.h" />
- <ClInclude Include="..\..\..\..\lib\curl_md4.h" />
- <ClInclude Include="..\..\..\..\lib\curl_md5.h" />
- <ClInclude Include="..\..\..\..\lib\curl_memory.h" />
- <ClInclude Include="..\..\..\..\lib\curl_memrchr.h" />
- <ClInclude Include="..\..\..\..\lib\curl_multibyte.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ntlm_core.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ntlm_wb.h" />
- <ClInclude Include="..\..\..\..\lib\curl_path.h" />
- <ClInclude Include="..\..\..\..\lib\curl_printf.h" />
- <ClInclude Include="..\..\..\..\lib\curl_range.h" />
- <ClInclude Include="..\..\..\..\lib\curl_rtmp.h" />
- <ClInclude Include="..\..\..\..\lib\curl_sasl.h" />
- <ClInclude Include="..\..\..\..\lib\curl_setup.h" />
- <ClInclude Include="..\..\..\..\lib\curl_setup_once.h" />
- <ClInclude Include="..\..\..\..\lib\curl_sha256.h" />
- <ClInclude Include="..\..\..\..\lib\curl_sspi.h" />
- <ClInclude Include="..\..\..\..\lib\curl_threads.h" />
- <ClInclude Include="..\..\..\..\lib\curlx.h" />
- <ClInclude Include="..\..\..\..\lib\dict.h" />
- <ClInclude Include="..\..\..\..\lib\doh.h" />
- <ClInclude Include="..\..\..\..\lib\dynbuf.h" />
- <ClInclude Include="..\..\..\..\lib\easyif.h" />
- <ClInclude Include="..\..\..\..\lib\easy_lock.h" />
- <ClInclude Include="..\..\..\..\lib\easyoptions.h" />
- <ClInclude Include="..\..\..\..\lib\escape.h" />
- <ClInclude Include="..\..\..\..\lib\file.h" />
- <ClInclude Include="..\..\..\..\lib\fileinfo.h" />
- <ClInclude Include="..\..\..\..\lib\fopen.h" />
- <ClInclude Include="..\..\..\..\lib\formdata.h" />
- <ClInclude Include="..\..\..\..\lib\ftp.h" />
- <ClInclude Include="..\..\..\..\lib\ftplistparser.h" />
- <ClInclude Include="..\..\..\..\lib\functypes.h" />
- <ClInclude Include="..\..\..\..\lib\getinfo.h" />
- <ClInclude Include="..\..\..\..\lib\gopher.h" />
- <ClInclude Include="..\..\..\..\lib\h2h3.h" />
- <ClInclude Include="..\..\..\..\lib\hash.h" />
- <ClInclude Include="..\..\..\..\lib\headers.h" />
- <ClInclude Include="..\..\..\..\lib\hostip.h" />
- <ClInclude Include="..\..\..\..\lib\hsts.h" />
- <ClInclude Include="..\..\..\..\lib\http2.h" />
- <ClInclude Include="..\..\..\..\lib\http_aws_sigv4.h" />
- <ClInclude Include="..\..\..\..\lib\http_chunks.h" />
- <ClInclude Include="..\..\..\..\lib\http_digest.h" />
- <ClInclude Include="..\..\..\..\lib\http.h" />
- <ClInclude Include="..\..\..\..\lib\http_negotiate.h" />
- <ClInclude Include="..\..\..\..\lib\http_ntlm.h" />
- <ClInclude Include="..\..\..\..\lib\http_proxy.h" />
- <ClInclude Include="..\..\..\..\lib\if2ip.h" />
- <ClInclude Include="..\..\..\..\lib\imap.h" />
- <ClInclude Include="..\..\..\..\lib\inet_ntop.h" />
- <ClInclude Include="..\..\..\..\lib\inet_pton.h" />
- <ClInclude Include="..\..\..\..\lib\llist.h" />
- <ClInclude Include="..\..\..\..\lib\memdebug.h" />
- <ClInclude Include="..\..\..\..\lib\mime.h" />
- <ClInclude Include="..\..\..\..\lib\mqtt.h" />
- <ClInclude Include="..\..\..\..\lib\multihandle.h" />
- <ClInclude Include="..\..\..\..\lib\multiif.h" />
- <ClInclude Include="..\..\..\..\lib\netrc.h" />
- <ClInclude Include="..\..\..\..\lib\nonblock.h" />
- <ClInclude Include="..\..\..\..\lib\noproxy.h" />
- <ClInclude Include="..\..\..\..\lib\parsedate.h" />
- <ClInclude Include="..\..\..\..\lib\pingpong.h" />
- <ClInclude Include="..\..\..\..\lib\pop3.h" />
- <ClInclude Include="..\..\..\..\lib\progress.h" />
- <ClInclude Include="..\..\..\..\lib\psl.h" />
- <ClInclude Include="..\..\..\..\lib\quic.h" />
- <ClInclude Include="..\..\..\..\lib\rand.h" />
- <ClInclude Include="..\..\..\..\lib\rename.h" />
- <ClInclude Include="..\..\..\..\lib\rtsp.h" />
- <ClInclude Include="..\..\..\..\lib\select.h" />
- <ClInclude Include="..\..\..\..\lib\sendf.h" />
- <ClInclude Include="..\..\..\..\lib\setopt.h" />
- <ClInclude Include="..\..\..\..\lib\setup-vms.h" />
- <ClInclude Include="..\..\..\..\lib\share.h" />
- <ClInclude Include="..\..\..\..\lib\sigpipe.h" />
- <ClInclude Include="..\..\..\..\lib\slist.h" />
- <ClInclude Include="..\..\..\..\lib\smb.h" />
- <ClInclude Include="..\..\..\..\lib\smtp.h" />
- <ClInclude Include="..\..\..\..\lib\sockaddr.h" />
- <ClInclude Include="..\..\..\..\lib\socketpair.h" />
- <ClInclude Include="..\..\..\..\lib\socks.h" />
- <ClInclude Include="..\..\..\..\lib\speedcheck.h" />
- <ClInclude Include="..\..\..\..\lib\splay.h" />
- <ClInclude Include="..\..\..\..\lib\strcase.h" />
- <ClInclude Include="..\..\..\..\lib\strdup.h" />
- <ClInclude Include="..\..\..\..\lib\strerror.h" />
- <ClInclude Include="..\..\..\..\lib\strtok.h" />
- <ClInclude Include="..\..\..\..\lib\strtoofft.h" />
- <ClInclude Include="..\..\..\..\lib\system_win32.h" />
- <ClInclude Include="..\..\..\..\lib\telnet.h" />
- <ClInclude Include="..\..\..\..\lib\tftp.h" />
- <ClInclude Include="..\..\..\..\lib\timediff.h" />
- <ClInclude Include="..\..\..\..\lib\timeval.h" />
- <ClInclude Include="..\..\..\..\lib\transfer.h" />
- <ClInclude Include="..\..\..\..\lib\urlapi-int.h" />
- <ClInclude Include="..\..\..\..\lib\urldata.h" />
- <ClInclude Include="..\..\..\..\lib\url.h" />
- <ClInclude Include="..\..\..\..\lib\version_win32.h" />
- <ClInclude Include="..\..\..\..\lib\warnless.h" />
- <ClInclude Include="..\..\..\..\lib\wildcard.h" />
- <ClInclude Include="..\..\..\..\lib\ws.h" />
- <ClInclude Include="..\..\..\..\lib\vauth\digest.h" />
- <ClInclude Include="..\..\..\..\lib\vauth\ntlm.h" />
- <ClInclude Include="..\..\..\..\lib\vauth\vauth.h" />
- <ClInclude Include="..\..\..\..\lib\vquic\msh3.h" />
- <ClInclude Include="..\..\..\..\lib\vquic\ngtcp2.h" />
- <ClInclude Include="..\..\..\..\lib\vquic\quiche.h" />
- <ClInclude Include="..\..\..\..\lib\vquic\vquic.h" />
- <ClInclude Include="..\..\..\..\lib\vssh\ssh.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\bearssl.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\gskit.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\gtls.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\hostcheck.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\keylog.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\mbedtls.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\mbedtls_threadlock.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\nssg.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\openssl.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\rustls.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\schannel.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\sectransp.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\vtls.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\wolfssl.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\x509asn1.h" />
- </ItemGroup>
- <ItemGroup>
- <ResourceCompile Include="..\..\..\..\lib\libcurl.rc" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project>
diff --git a/projects/Windows/VC11/lib/libcurl.vcxproj.filters b/projects/Windows/VC11/lib/libcurl.vcxproj.filters
deleted file mode 100644
index 4d6341d74..000000000
--- a/projects/Windows/VC11/lib/libcurl.vcxproj.filters
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <Filter Include="Source Files">
- <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
- <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
- </Filter>
- <Filter Include="Header Files">
- <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
- <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
- </Filter>
- <Filter Include="Resource Files">
- <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
- <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
- </Filter>
- </ItemGroup>
-</Project> \ No newline at end of file
diff --git a/projects/Windows/VC11/src/curl.vcxproj b/projects/Windows/VC11/src/curl.vcxproj
deleted file mode 100644
index a1b4e761d..000000000
--- a/projects/Windows/VC11/src/curl.vcxproj
+++ /dev/null
@@ -1,2794 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|Win32">
- <Configuration>DLL Debug - DLL wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|x64">
- <Configuration>DLL Debug - DLL wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|Win32">
- <Configuration>DLL Debug - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|x64">
- <Configuration>DLL Debug - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|Win32">
- <Configuration>DLL Debug - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|x64">
- <Configuration>DLL Debug - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug|Win32">
- <Configuration>DLL Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug|x64">
- <Configuration>DLL Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL wolfSSL|Win32">
- <Configuration>DLL Release - DLL wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL wolfSSL|x64">
- <Configuration>DLL Release - DLL wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL|Win32">
- <Configuration>DLL Release - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL|x64">
- <Configuration>DLL Release - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|Win32">
- <Configuration>DLL Release - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|x64">
- <Configuration>DLL Release - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release|Win32">
- <Configuration>DLL Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release|x64">
- <Configuration>DLL Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|Win32">
- <Configuration>LIB Debug - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|x64">
- <Configuration>LIB Debug - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|Win32">
- <Configuration>LIB Debug - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|x64">
- <Configuration>LIB Debug - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|Win32">
- <Configuration>LIB Debug - LIB wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|x64">
- <Configuration>LIB Debug - LIB wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32">
- <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|x64">
- <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|Win32">
- <Configuration>LIB Debug - LIB OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|x64">
- <Configuration>LIB Debug - LIB OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug|Win32">
- <Configuration>LIB Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug|x64">
- <Configuration>LIB Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL|Win32">
- <Configuration>LIB Release - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL|x64">
- <Configuration>LIB Release - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|Win32">
- <Configuration>LIB Release - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|x64">
- <Configuration>LIB Release - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB wolfSSL|Win32">
- <Configuration>LIB Release - LIB wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB wolfSSL|x64">
- <Configuration>LIB Release - LIB wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|Win32">
- <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|x64">
- <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL|Win32">
- <Configuration>LIB Release - LIB OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL|x64">
- <Configuration>LIB Release - LIB OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release|Win32">
- <Configuration>LIB Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release|x64">
- <Configuration>LIB Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{5228E9CE-A216-422F-A5E6-58E95E2DD71D}</ProjectGuid>
- <RootNamespace>curl</RootNamespace>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v110</PlatformToolset>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(ProjectName)</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC11\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC11\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC11\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC11\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC11\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC11\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC11\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC11\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC11\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC11\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC11\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libssh2.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC11\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\..\..\lib\curl_multibyte.c" />
- <ClCompile Include="..\..\..\..\lib\dynbuf.c" />
- <ClCompile Include="..\..\..\..\lib\nonblock.c" />
- <ClCompile Include="..\..\..\..\lib\strtoofft.c" />
- <ClCompile Include="..\..\..\..\lib\timediff.c" />
- <ClCompile Include="..\..\..\..\lib\version_win32.c" />
- <ClCompile Include="..\..\..\..\lib\warnless.c" />
- <ClCompile Include="..\..\..\..\src\slist_wc.c" />
- <ClCompile Include="..\..\..\..\src\tool_binmode.c" />
- <ClCompile Include="..\..\..\..\src\tool_bname.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_dbg.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_hdr.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_prg.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_rea.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_see.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_wrt.c" />
- <ClCompile Include="..\..\..\..\src\tool_cfgable.c" />
- <ClCompile Include="..\..\..\..\src\tool_dirhie.c" />
- <ClCompile Include="..\..\..\..\src\tool_doswin.c" />
- <ClCompile Include="..\..\..\..\src\tool_easysrc.c" />
- <ClCompile Include="..\..\..\..\src\tool_filetime.c" />
- <ClCompile Include="..\..\..\..\src\tool_findfile.c" />
- <ClCompile Include="..\..\..\..\src\tool_formparse.c" />
- <ClCompile Include="..\..\..\..\src\tool_getparam.c" />
- <ClCompile Include="..\..\..\..\src\tool_getpass.c" />
- <ClCompile Include="..\..\..\..\src\tool_help.c" />
- <ClCompile Include="..\..\..\..\src\tool_helpers.c" />
- <ClCompile Include="..\..\..\..\src\tool_hugehelp.c" />
- <ClCompile Include="..\..\..\..\src\tool_libinfo.c" />
- <ClCompile Include="..\..\..\..\src\tool_listhelp.c" />
- <ClCompile Include="..\..\..\..\src\tool_main.c" />
- <ClCompile Include="..\..\..\..\src\tool_msgs.c" />
- <ClCompile Include="..\..\..\..\src\tool_operate.c" />
- <ClCompile Include="..\..\..\..\src\tool_operhlp.c" />
- <ClCompile Include="..\..\..\..\src\tool_panykey.c" />
- <ClCompile Include="..\..\..\..\src\tool_paramhlp.c" />
- <ClCompile Include="..\..\..\..\src\tool_parsecfg.c" />
- <ClCompile Include="..\..\..\..\src\tool_progress.c" />
- <ClCompile Include="..\..\..\..\src\tool_setopt.c" />
- <ClCompile Include="..\..\..\..\src\tool_sleep.c" />
- <ClCompile Include="..\..\..\..\src\tool_strdup.c" />
- <ClCompile Include="..\..\..\..\src\tool_urlglob.c" />
- <ClCompile Include="..\..\..\..\src\tool_util.c" />
- <ClCompile Include="..\..\..\..\src\tool_vms.c" />
- <ClCompile Include="..\..\..\..\src\tool_writeout.c" />
- <ClCompile Include="..\..\..\..\src\tool_writeout_json.c" />
- <ClCompile Include="..\..\..\..\src\tool_xattr.c" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\..\..\..\lib\config-win32.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ctype.h" />
- <ClInclude Include="..\..\..\..\lib\curl_multibyte.h" />
- <ClInclude Include="..\..\..\..\lib\curl_setup.h" />
- <ClInclude Include="..\..\..\..\lib\dynbuf.h" />
- <ClInclude Include="..\..\..\..\lib\nonblock.h" />
- <ClInclude Include="..\..\..\..\lib\strtoofft.h" />
- <ClInclude Include="..\..\..\..\lib\timediff.h" />
- <ClInclude Include="..\..\..\..\lib\version_win32.h" />
- <ClInclude Include="..\..\..\..\lib\warnless.h" />
- <ClInclude Include="..\..\..\..\src\slist_wc.h" />
- <ClInclude Include="..\..\..\..\src\tool_binmode.h" />
- <ClInclude Include="..\..\..\..\src\tool_bname.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_dbg.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_hdr.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_prg.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_rea.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_see.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_wrt.h" />
- <ClInclude Include="..\..\..\..\src\tool_cfgable.h" />
- <ClInclude Include="..\..\..\..\src\tool_dirhie.h" />
- <ClInclude Include="..\..\..\..\src\tool_doswin.h" />
- <ClInclude Include="..\..\..\..\src\tool_easysrc.h" />
- <ClInclude Include="..\..\..\..\src\tool_filetime.h" />
- <ClInclude Include="..\..\..\..\src\tool_findfile.h" />
- <ClInclude Include="..\..\..\..\src\tool_formparse.h" />
- <ClInclude Include="..\..\..\..\src\tool_getparam.h" />
- <ClInclude Include="..\..\..\..\src\tool_getpass.h" />
- <ClInclude Include="..\..\..\..\src\tool_helpers.h" />
- <ClInclude Include="..\..\..\..\src\tool_help.h" />
- <ClInclude Include="..\..\..\..\src\tool_hugehelp.h" />
- <ClInclude Include="..\..\..\..\src\tool_libinfo.h" />
- <ClInclude Include="..\..\..\..\src\tool_main.h" />
- <ClInclude Include="..\..\..\..\src\tool_msgs.h" />
- <ClInclude Include="..\..\..\..\src\tool_operate.h" />
- <ClInclude Include="..\..\..\..\src\tool_operhlp.h" />
- <ClInclude Include="..\..\..\..\src\tool_panykey.h" />
- <ClInclude Include="..\..\..\..\src\tool_paramhlp.h" />
- <ClInclude Include="..\..\..\..\src\tool_parsecfg.h" />
- <ClInclude Include="..\..\..\..\src\tool_progress.h" />
- <ClInclude Include="..\..\..\..\src\tool_sdecls.h" />
- <ClInclude Include="..\..\..\..\src\tool_setopt.h" />
- <ClInclude Include="..\..\..\..\src\tool_setup.h" />
- <ClInclude Include="..\..\..\..\src\tool_sleep.h" />
- <ClInclude Include="..\..\..\..\src\tool_strdup.h" />
- <ClInclude Include="..\..\..\..\src\tool_urlglob.h" />
- <ClInclude Include="..\..\..\..\src\tool_util.h" />
- <ClInclude Include="..\..\..\..\src\tool_version.h" />
- <ClInclude Include="..\..\..\..\src\tool_vms.h" />
- <ClInclude Include="..\..\..\..\src\tool_writeout.h" />
- <ClInclude Include="..\..\..\..\src\tool_writeout_json.h" />
- <ClInclude Include="..\..\..\..\src\tool_xattr.h" />
- </ItemGroup>
- <ItemGroup>
- <ResourceCompile Include="..\..\..\..\src\curl.rc" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project>
diff --git a/projects/Windows/VC11/src/curl.vcxproj.filters b/projects/Windows/VC11/src/curl.vcxproj.filters
deleted file mode 100644
index 4d6341d74..000000000
--- a/projects/Windows/VC11/src/curl.vcxproj.filters
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <Filter Include="Source Files">
- <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
- <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
- </Filter>
- <Filter Include="Header Files">
- <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
- <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
- </Filter>
- <Filter Include="Resource Files">
- <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
- <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
- </Filter>
- </ItemGroup>
-</Project> \ No newline at end of file
diff --git a/projects/Windows/VC12/lib/libcurl.vcxproj b/projects/Windows/VC12/lib/libcurl.vcxproj
deleted file mode 100644
index 9e62139ba..000000000
--- a/projects/Windows/VC12/lib/libcurl.vcxproj
+++ /dev/null
@@ -1,2703 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|Win32">
- <Configuration>DLL Debug - DLL wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|x64">
- <Configuration>DLL Debug - DLL wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|Win32">
- <Configuration>DLL Debug - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|x64">
- <Configuration>DLL Debug - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|Win32">
- <Configuration>DLL Debug - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|x64">
- <Configuration>DLL Debug - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug|Win32">
- <Configuration>DLL Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug|x64">
- <Configuration>DLL Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL wolfSSL|Win32">
- <Configuration>DLL Release - DLL wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL wolfSSL|x64">
- <Configuration>DLL Release - DLL wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL|Win32">
- <Configuration>DLL Release - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL|x64">
- <Configuration>DLL Release - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|Win32">
- <Configuration>DLL Release - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|x64">
- <Configuration>DLL Release - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release|Win32">
- <Configuration>DLL Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release|x64">
- <Configuration>DLL Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|Win32">
- <Configuration>LIB Debug - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|x64">
- <Configuration>LIB Debug - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|Win32">
- <Configuration>LIB Debug - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|x64">
- <Configuration>LIB Debug - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|Win32">
- <Configuration>LIB Debug - LIB wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|x64">
- <Configuration>LIB Debug - LIB wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32">
- <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|x64">
- <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|Win32">
- <Configuration>LIB Debug - LIB OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|x64">
- <Configuration>LIB Debug - LIB OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug|Win32">
- <Configuration>LIB Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug|x64">
- <Configuration>LIB Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL|Win32">
- <Configuration>LIB Release - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL|x64">
- <Configuration>LIB Release - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|Win32">
- <Configuration>LIB Release - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|x64">
- <Configuration>LIB Release - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB wolfSSL|Win32">
- <Configuration>LIB Release - LIB wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB wolfSSL|x64">
- <Configuration>LIB Release - LIB wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|Win32">
- <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|x64">
- <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL|Win32">
- <Configuration>LIB Release - LIB OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL|x64">
- <Configuration>LIB Release - LIB OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release|Win32">
- <Configuration>LIB Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release|x64">
- <Configuration>LIB Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}</ProjectGuid>
- <RootNamespace>libcurl</RootNamespace>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)d</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win32\VC12\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win64\VC12\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win32\VC12\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win64\VC12\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC12\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC12\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC12\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC12\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC12\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC12\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC12\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC12\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC12\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC12\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC12\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC12\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\..\..\lib\altsvc.c" />
- <ClCompile Include="..\..\..\..\lib\amigaos.c" />
- <ClCompile Include="..\..\..\..\lib\asyn-ares.c" />
- <ClCompile Include="..\..\..\..\lib\asyn-thread.c" />
- <ClCompile Include="..\..\..\..\lib\base64.c" />
- <ClCompile Include="..\..\..\..\lib\bufref.c" />
- <ClCompile Include="..\..\..\..\lib\c-hyper.c" />
- <ClCompile Include="..\..\..\..\lib\conncache.c" />
- <ClCompile Include="..\..\..\..\lib\connect.c" />
- <ClCompile Include="..\..\..\..\lib\content_encoding.c" />
- <ClCompile Include="..\..\..\..\lib\cookie.c" />
- <ClCompile Include="..\..\..\..\lib\curl_addrinfo.c" />
- <ClCompile Include="..\..\..\..\lib\curl_des.c" />
- <ClCompile Include="..\..\..\..\lib\curl_endian.c" />
- <ClCompile Include="..\..\..\..\lib\curl_fnmatch.c" />
- <ClCompile Include="..\..\..\..\lib\curl_gethostname.c" />
- <ClCompile Include="..\..\..\..\lib\curl_get_line.c" />
- <ClCompile Include="..\..\..\..\lib\curl_gssapi.c" />
- <ClCompile Include="..\..\..\..\lib\curl_memrchr.c" />
- <ClCompile Include="..\..\..\..\lib\curl_multibyte.c" />
- <ClCompile Include="..\..\..\..\lib\curl_ntlm_core.c" />
- <ClCompile Include="..\..\..\..\lib\curl_ntlm_wb.c" />
- <ClCompile Include="..\..\..\..\lib\curl_path.c" />
- <ClCompile Include="..\..\..\..\lib\curl_range.c" />
- <ClCompile Include="..\..\..\..\lib\curl_rtmp.c" />
- <ClCompile Include="..\..\..\..\lib\curl_sasl.c" />
- <ClCompile Include="..\..\..\..\lib\curl_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\curl_threads.c" />
- <ClCompile Include="..\..\..\..\lib\dict.c" />
- <ClCompile Include="..\..\..\..\lib\doh.c" />
- <ClCompile Include="..\..\..\..\lib\dynbuf.c" />
- <ClCompile Include="..\..\..\..\lib\easy.c" />
- <ClCompile Include="..\..\..\..\lib\easygetopt.c" />
- <ClCompile Include="..\..\..\..\lib\easyoptions.c" />
- <ClCompile Include="..\..\..\..\lib\escape.c" />
- <ClCompile Include="..\..\..\..\lib\file.c" />
- <ClCompile Include="..\..\..\..\lib\fileinfo.c" />
- <ClCompile Include="..\..\..\..\lib\fopen.c" />
- <ClCompile Include="..\..\..\..\lib\formdata.c" />
- <ClCompile Include="..\..\..\..\lib\ftp.c" />
- <ClCompile Include="..\..\..\..\lib\ftplistparser.c" />
- <ClCompile Include="..\..\..\..\lib\getenv.c" />
- <ClCompile Include="..\..\..\..\lib\getinfo.c" />
- <ClCompile Include="..\..\..\..\lib\gopher.c" />
- <ClCompile Include="..\..\..\..\lib\h2h3.c" />
- <ClCompile Include="..\..\..\..\lib\hash.c" />
- <ClCompile Include="..\..\..\..\lib\headers.c" />
- <ClCompile Include="..\..\..\..\lib\hmac.c" />
- <ClCompile Include="..\..\..\..\lib\hostasyn.c" />
- <ClCompile Include="..\..\..\..\lib\hostip4.c" />
- <ClCompile Include="..\..\..\..\lib\hostip6.c" />
- <ClCompile Include="..\..\..\..\lib\hostip.c" />
- <ClCompile Include="..\..\..\..\lib\hostsyn.c" />
- <ClCompile Include="..\..\..\..\lib\hsts.c" />
- <ClCompile Include="..\..\..\..\lib\http2.c" />
- <ClCompile Include="..\..\..\..\lib\http_aws_sigv4.c" />
- <ClCompile Include="..\..\..\..\lib\http.c" />
- <ClCompile Include="..\..\..\..\lib\http_chunks.c" />
- <ClCompile Include="..\..\..\..\lib\http_digest.c" />
- <ClCompile Include="..\..\..\..\lib\http_negotiate.c" />
- <ClCompile Include="..\..\..\..\lib\http_ntlm.c" />
- <ClCompile Include="..\..\..\..\lib\http_proxy.c" />
- <ClCompile Include="..\..\..\..\lib\idn_win32.c" />
- <ClCompile Include="..\..\..\..\lib\if2ip.c" />
- <ClCompile Include="..\..\..\..\lib\imap.c" />
- <ClCompile Include="..\..\..\..\lib\inet_ntop.c" />
- <ClCompile Include="..\..\..\..\lib\inet_pton.c" />
- <ClCompile Include="..\..\..\..\lib\krb5.c" />
- <ClCompile Include="..\..\..\..\lib\ldap.c" />
- <ClCompile Include="..\..\..\..\lib\llist.c" />
- <ClCompile Include="..\..\..\..\lib\md4.c" />
- <ClCompile Include="..\..\..\..\lib\md5.c" />
- <ClCompile Include="..\..\..\..\lib\memdebug.c" />
- <ClCompile Include="..\..\..\..\lib\mime.c" />
- <ClCompile Include="..\..\..\..\lib\mprintf.c" />
- <ClCompile Include="..\..\..\..\lib\mqtt.c" />
- <ClCompile Include="..\..\..\..\lib\multi.c" />
- <ClCompile Include="..\..\..\..\lib\netrc.c" />
- <ClCompile Include="..\..\..\..\lib\nonblock.c" />
- <ClCompile Include="..\..\..\..\lib\noproxy.c" />
- <ClCompile Include="..\..\..\..\lib\openldap.c" />
- <ClCompile Include="..\..\..\..\lib\parsedate.c" />
- <ClCompile Include="..\..\..\..\lib\pingpong.c" />
- <ClCompile Include="..\..\..\..\lib\pop3.c" />
- <ClCompile Include="..\..\..\..\lib\progress.c" />
- <ClCompile Include="..\..\..\..\lib\psl.c" />
- <ClCompile Include="..\..\..\..\lib\rand.c" />
- <ClCompile Include="..\..\..\..\lib\rename.c" />
- <ClCompile Include="..\..\..\..\lib\rtsp.c" />
- <ClCompile Include="..\..\..\..\lib\select.c" />
- <ClCompile Include="..\..\..\..\lib\sendf.c" />
- <ClCompile Include="..\..\..\..\lib\setopt.c" />
- <ClCompile Include="..\..\..\..\lib\sha256.c" />
- <ClCompile Include="..\..\..\..\lib\share.c" />
- <ClCompile Include="..\..\..\..\lib\slist.c" />
- <ClCompile Include="..\..\..\..\lib\smb.c" />
- <ClCompile Include="..\..\..\..\lib\smtp.c" />
- <ClCompile Include="..\..\..\..\lib\socketpair.c" />
- <ClCompile Include="..\..\..\..\lib\socks.c" />
- <ClCompile Include="..\..\..\..\lib\socks_gssapi.c" />
- <ClCompile Include="..\..\..\..\lib\socks_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\speedcheck.c" />
- <ClCompile Include="..\..\..\..\lib\splay.c" />
- <ClCompile Include="..\..\..\..\lib\strcase.c" />
- <ClCompile Include="..\..\..\..\lib\strdup.c" />
- <ClCompile Include="..\..\..\..\lib\strerror.c" />
- <ClCompile Include="..\..\..\..\lib\strtok.c" />
- <ClCompile Include="..\..\..\..\lib\strtoofft.c" />
- <ClCompile Include="..\..\..\..\lib\system_win32.c" />
- <ClCompile Include="..\..\..\..\lib\telnet.c" />
- <ClCompile Include="..\..\..\..\lib\tftp.c" />
- <ClCompile Include="..\..\..\..\lib\timediff.c" />
- <ClCompile Include="..\..\..\..\lib\timeval.c" />
- <ClCompile Include="..\..\..\..\lib\transfer.c" />
- <ClCompile Include="..\..\..\..\lib\urlapi.c" />
- <ClCompile Include="..\..\..\..\lib\url.c" />
- <ClCompile Include="..\..\..\..\lib\version.c" />
- <ClCompile Include="..\..\..\..\lib\version_win32.c" />
- <ClCompile Include="..\..\..\..\lib\warnless.c" />
- <ClCompile Include="..\..\..\..\lib\wildcard.c" />
- <ClCompile Include="..\..\..\..\lib\ws.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\cleartext.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\cram.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\digest.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\digest_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\gsasl.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\krb5_gssapi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\krb5_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\ntlm.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\ntlm_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\oauth2.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\spnego_gssapi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\spnego_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\vauth.c" />
- <ClCompile Include="..\..\..\..\lib\vquic\msh3.c" />
- <ClCompile Include="..\..\..\..\lib\vquic\ngtcp2.c" />
- <ClCompile Include="..\..\..\..\lib\vquic\quiche.c" />
- <ClCompile Include="..\..\..\..\lib\vquic\vquic.c" />
- <ClCompile Include="..\..\..\..\lib\vssh\libssh2.c" />
- <ClCompile Include="..\..\..\..\lib\vssh\libssh.c" />
- <ClCompile Include="..\..\..\..\lib\vssh\wolfssh.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\bearssl.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\gskit.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\gtls.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\hostcheck.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\keylog.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\mbedtls.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\mbedtls_threadlock.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\nss.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\openssl.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\rustls.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\schannel.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\schannel_verify.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\sectransp.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\vtls.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\wolfssl.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\x509asn1.c" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\..\..\..\lib\altsvc.h" />
- <ClInclude Include="..\..\..\..\lib\amigaos.h" />
- <ClInclude Include="..\..\..\..\lib\arpa_telnet.h" />
- <ClInclude Include="..\..\..\..\lib\asyn.h" />
- <ClInclude Include="..\..\..\..\lib\bufref.h" />
- <ClInclude Include="..\..\..\..\lib\c-hyper.h" />
- <ClInclude Include="..\..\..\..\lib\config-win32.h" />
- <ClInclude Include="..\..\..\..\lib\conncache.h" />
- <ClInclude Include="..\..\..\..\lib\connect.h" />
- <ClInclude Include="..\..\..\..\lib\content_encoding.h" />
- <ClInclude Include="..\..\..\..\lib\cookie.h" />
- <ClInclude Include="..\..\..\..\lib\curl_addrinfo.h" />
- <ClInclude Include="..\..\..\..\lib\curl_base64.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ctype.h" />
- <ClInclude Include="..\..\..\..\lib\curl_des.h" />
- <ClInclude Include="..\..\..\..\lib\curl_endian.h" />
- <ClInclude Include="..\..\..\..\lib\curl_fnmatch.h" />
- <ClInclude Include="..\..\..\..\lib\curl_gethostname.h" />
- <ClInclude Include="..\..\..\..\lib\curl_get_line.h" />
- <ClInclude Include="..\..\..\..\lib\curl_gssapi.h" />
- <ClInclude Include="..\..\..\..\lib\curl_hmac.h" />
- <ClInclude Include="..\..\..\..\lib\curl_krb5.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ldap.h" />
- <ClInclude Include="..\..\..\..\lib\curl_md4.h" />
- <ClInclude Include="..\..\..\..\lib\curl_md5.h" />
- <ClInclude Include="..\..\..\..\lib\curl_memory.h" />
- <ClInclude Include="..\..\..\..\lib\curl_memrchr.h" />
- <ClInclude Include="..\..\..\..\lib\curl_multibyte.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ntlm_core.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ntlm_wb.h" />
- <ClInclude Include="..\..\..\..\lib\curl_path.h" />
- <ClInclude Include="..\..\..\..\lib\curl_printf.h" />
- <ClInclude Include="..\..\..\..\lib\curl_range.h" />
- <ClInclude Include="..\..\..\..\lib\curl_rtmp.h" />
- <ClInclude Include="..\..\..\..\lib\curl_sasl.h" />
- <ClInclude Include="..\..\..\..\lib\curl_setup.h" />
- <ClInclude Include="..\..\..\..\lib\curl_setup_once.h" />
- <ClInclude Include="..\..\..\..\lib\curl_sha256.h" />
- <ClInclude Include="..\..\..\..\lib\curl_sspi.h" />
- <ClInclude Include="..\..\..\..\lib\curl_threads.h" />
- <ClInclude Include="..\..\..\..\lib\curlx.h" />
- <ClInclude Include="..\..\..\..\lib\dict.h" />
- <ClInclude Include="..\..\..\..\lib\doh.h" />
- <ClInclude Include="..\..\..\..\lib\dynbuf.h" />
- <ClInclude Include="..\..\..\..\lib\easyif.h" />
- <ClInclude Include="..\..\..\..\lib\easy_lock.h" />
- <ClInclude Include="..\..\..\..\lib\easyoptions.h" />
- <ClInclude Include="..\..\..\..\lib\escape.h" />
- <ClInclude Include="..\..\..\..\lib\file.h" />
- <ClInclude Include="..\..\..\..\lib\fileinfo.h" />
- <ClInclude Include="..\..\..\..\lib\fopen.h" />
- <ClInclude Include="..\..\..\..\lib\formdata.h" />
- <ClInclude Include="..\..\..\..\lib\ftp.h" />
- <ClInclude Include="..\..\..\..\lib\ftplistparser.h" />
- <ClInclude Include="..\..\..\..\lib\functypes.h" />
- <ClInclude Include="..\..\..\..\lib\getinfo.h" />
- <ClInclude Include="..\..\..\..\lib\gopher.h" />
- <ClInclude Include="..\..\..\..\lib\h2h3.h" />
- <ClInclude Include="..\..\..\..\lib\hash.h" />
- <ClInclude Include="..\..\..\..\lib\headers.h" />
- <ClInclude Include="..\..\..\..\lib\hostip.h" />
- <ClInclude Include="..\..\..\..\lib\hsts.h" />
- <ClInclude Include="..\..\..\..\lib\http2.h" />
- <ClInclude Include="..\..\..\..\lib\http_aws_sigv4.h" />
- <ClInclude Include="..\..\..\..\lib\http_chunks.h" />
- <ClInclude Include="..\..\..\..\lib\http_digest.h" />
- <ClInclude Include="..\..\..\..\lib\http.h" />
- <ClInclude Include="..\..\..\..\lib\http_negotiate.h" />
- <ClInclude Include="..\..\..\..\lib\http_ntlm.h" />
- <ClInclude Include="..\..\..\..\lib\http_proxy.h" />
- <ClInclude Include="..\..\..\..\lib\if2ip.h" />
- <ClInclude Include="..\..\..\..\lib\imap.h" />
- <ClInclude Include="..\..\..\..\lib\inet_ntop.h" />
- <ClInclude Include="..\..\..\..\lib\inet_pton.h" />
- <ClInclude Include="..\..\..\..\lib\llist.h" />
- <ClInclude Include="..\..\..\..\lib\memdebug.h" />
- <ClInclude Include="..\..\..\..\lib\mime.h" />
- <ClInclude Include="..\..\..\..\lib\mqtt.h" />
- <ClInclude Include="..\..\..\..\lib\multihandle.h" />
- <ClInclude Include="..\..\..\..\lib\multiif.h" />
- <ClInclude Include="..\..\..\..\lib\netrc.h" />
- <ClInclude Include="..\..\..\..\lib\nonblock.h" />
- <ClInclude Include="..\..\..\..\lib\noproxy.h" />
- <ClInclude Include="..\..\..\..\lib\parsedate.h" />
- <ClInclude Include="..\..\..\..\lib\pingpong.h" />
- <ClInclude Include="..\..\..\..\lib\pop3.h" />
- <ClInclude Include="..\..\..\..\lib\progress.h" />
- <ClInclude Include="..\..\..\..\lib\psl.h" />
- <ClInclude Include="..\..\..\..\lib\quic.h" />
- <ClInclude Include="..\..\..\..\lib\rand.h" />
- <ClInclude Include="..\..\..\..\lib\rename.h" />
- <ClInclude Include="..\..\..\..\lib\rtsp.h" />
- <ClInclude Include="..\..\..\..\lib\select.h" />
- <ClInclude Include="..\..\..\..\lib\sendf.h" />
- <ClInclude Include="..\..\..\..\lib\setopt.h" />
- <ClInclude Include="..\..\..\..\lib\setup-vms.h" />
- <ClInclude Include="..\..\..\..\lib\share.h" />
- <ClInclude Include="..\..\..\..\lib\sigpipe.h" />
- <ClInclude Include="..\..\..\..\lib\slist.h" />
- <ClInclude Include="..\..\..\..\lib\smb.h" />
- <ClInclude Include="..\..\..\..\lib\smtp.h" />
- <ClInclude Include="..\..\..\..\lib\sockaddr.h" />
- <ClInclude Include="..\..\..\..\lib\socketpair.h" />
- <ClInclude Include="..\..\..\..\lib\socks.h" />
- <ClInclude Include="..\..\..\..\lib\speedcheck.h" />
- <ClInclude Include="..\..\..\..\lib\splay.h" />
- <ClInclude Include="..\..\..\..\lib\strcase.h" />
- <ClInclude Include="..\..\..\..\lib\strdup.h" />
- <ClInclude Include="..\..\..\..\lib\strerror.h" />
- <ClInclude Include="..\..\..\..\lib\strtok.h" />
- <ClInclude Include="..\..\..\..\lib\strtoofft.h" />
- <ClInclude Include="..\..\..\..\lib\system_win32.h" />
- <ClInclude Include="..\..\..\..\lib\telnet.h" />
- <ClInclude Include="..\..\..\..\lib\tftp.h" />
- <ClInclude Include="..\..\..\..\lib\timediff.h" />
- <ClInclude Include="..\..\..\..\lib\timeval.h" />
- <ClInclude Include="..\..\..\..\lib\transfer.h" />
- <ClInclude Include="..\..\..\..\lib\urlapi-int.h" />
- <ClInclude Include="..\..\..\..\lib\urldata.h" />
- <ClInclude Include="..\..\..\..\lib\url.h" />
- <ClInclude Include="..\..\..\..\lib\version_win32.h" />
- <ClInclude Include="..\..\..\..\lib\warnless.h" />
- <ClInclude Include="..\..\..\..\lib\wildcard.h" />
- <ClInclude Include="..\..\..\..\lib\ws.h" />
- <ClInclude Include="..\..\..\..\lib\vauth\digest.h" />
- <ClInclude Include="..\..\..\..\lib\vauth\ntlm.h" />
- <ClInclude Include="..\..\..\..\lib\vauth\vauth.h" />
- <ClInclude Include="..\..\..\..\lib\vquic\msh3.h" />
- <ClInclude Include="..\..\..\..\lib\vquic\ngtcp2.h" />
- <ClInclude Include="..\..\..\..\lib\vquic\quiche.h" />
- <ClInclude Include="..\..\..\..\lib\vquic\vquic.h" />
- <ClInclude Include="..\..\..\..\lib\vssh\ssh.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\bearssl.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\gskit.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\gtls.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\hostcheck.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\keylog.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\mbedtls.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\mbedtls_threadlock.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\nssg.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\openssl.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\rustls.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\schannel.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\sectransp.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\vtls.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\wolfssl.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\x509asn1.h" />
- </ItemGroup>
- <ItemGroup>
- <ResourceCompile Include="..\..\..\..\lib\libcurl.rc" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project>
diff --git a/projects/Windows/VC12/lib/libcurl.vcxproj.filters b/projects/Windows/VC12/lib/libcurl.vcxproj.filters
deleted file mode 100644
index 4d6341d74..000000000
--- a/projects/Windows/VC12/lib/libcurl.vcxproj.filters
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <Filter Include="Source Files">
- <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
- <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
- </Filter>
- <Filter Include="Header Files">
- <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
- <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
- </Filter>
- <Filter Include="Resource Files">
- <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
- <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
- </Filter>
- </ItemGroup>
-</Project> \ No newline at end of file
diff --git a/projects/Windows/VC12/src/curl.sln b/projects/Windows/VC12/src/curl.sln
deleted file mode 100644
index d4e38dc59..000000000
--- a/projects/Windows/VC12/src/curl.sln
+++ /dev/null
@@ -1,181 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curl", "curl.vcxproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
- DLL Debug - DLL OpenSSL - DLL LibSSH2|x64 = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
- DLL Debug - DLL OpenSSL|Win32 = DLL Debug - DLL OpenSSL|Win32
- DLL Debug - DLL OpenSSL|x64 = DLL Debug - DLL OpenSSL|x64
- DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32 = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
- DLL Debug - DLL Windows SSPI - DLL WinIDN|x64 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
- DLL Debug - DLL Windows SSPI|Win32 = DLL Debug - DLL Windows SSPI|Win32
- DLL Debug - DLL Windows SSPI|x64 = DLL Debug - DLL Windows SSPI|x64
- DLL Debug - DLL wolfSSL|Win32 = DLL Debug - DLL wolfSSL|Win32
- DLL Debug - DLL wolfSSL|x64 = DLL Debug - DLL wolfSSL|x64
- DLL Debug|Win32 = DLL Debug|Win32
- DLL Debug|x64 = DLL Debug|x64
- DLL Release - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
- DLL Release - DLL OpenSSL - DLL LibSSH2|x64 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
- DLL Release - DLL OpenSSL|Win32 = DLL Release - DLL OpenSSL|Win32
- DLL Release - DLL OpenSSL|x64 = DLL Release - DLL OpenSSL|x64
- DLL Release - DLL Windows SSPI - DLL WinIDN|Win32 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
- DLL Release - DLL Windows SSPI - DLL WinIDN|x64 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
- DLL Release - DLL Windows SSPI|Win32 = DLL Release - DLL Windows SSPI|Win32
- DLL Release - DLL Windows SSPI|x64 = DLL Release - DLL Windows SSPI|x64
- DLL Release - DLL wolfSSL|Win32 = DLL Release - DLL wolfSSL|Win32
- DLL Release - DLL wolfSSL|x64 = DLL Release - DLL wolfSSL|x64
- DLL Release|Win32 = DLL Release|Win32
- DLL Release|x64 = DLL Release|x64
- LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
- LIB Debug - DLL OpenSSL - DLL LibSSH2|x64 = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
- LIB Debug - DLL OpenSSL|Win32 = LIB Debug - DLL OpenSSL|Win32
- LIB Debug - DLL OpenSSL|x64 = LIB Debug - DLL OpenSSL|x64
- LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32 = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
- LIB Debug - DLL Windows SSPI - DLL WinIDN|x64 = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
- LIB Debug - DLL Windows SSPI|Win32 = LIB Debug - DLL Windows SSPI|Win32
- LIB Debug - DLL Windows SSPI|x64 = LIB Debug - DLL Windows SSPI|x64
- LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32 = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
- LIB Debug - LIB OpenSSL - LIB LibSSH2|x64 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
- LIB Debug - LIB OpenSSL|Win32 = LIB Debug - LIB OpenSSL|Win32
- LIB Debug - LIB OpenSSL|x64 = LIB Debug - LIB OpenSSL|x64
- LIB Debug - LIB wolfSSL|Win32 = LIB Debug - LIB wolfSSL|Win32
- LIB Debug - LIB wolfSSL|x64 = LIB Debug - LIB wolfSSL|x64
- LIB Debug|Win32 = LIB Debug|Win32
- LIB Debug|x64 = LIB Debug|x64
- LIB Release - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
- LIB Release - DLL OpenSSL - DLL LibSSH2|x64 = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
- LIB Release - DLL OpenSSL|Win32 = LIB Release - DLL OpenSSL|Win32
- LIB Release - DLL OpenSSL|x64 = LIB Release - DLL OpenSSL|x64
- LIB Release - DLL Windows SSPI - DLL WinIDN|Win32 = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
- LIB Release - DLL Windows SSPI - DLL WinIDN|x64 = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
- LIB Release - DLL Windows SSPI|Win32 = LIB Release - DLL Windows SSPI|Win32
- LIB Release - DLL Windows SSPI|x64 = LIB Release - DLL Windows SSPI|x64
- LIB Release - LIB OpenSSL - LIB LibSSH2|Win32 = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
- LIB Release - LIB OpenSSL - LIB LibSSH2|x64 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
- LIB Release - LIB OpenSSL|Win32 = LIB Release - LIB OpenSSL|Win32
- LIB Release - LIB OpenSSL|x64 = LIB Release - LIB OpenSSL|x64
- LIB Release - LIB wolfSSL|Win32 = LIB Release - LIB wolfSSL|Win32
- LIB Release - LIB wolfSSL|x64 = LIB Release - LIB wolfSSL|x64
- LIB Release|Win32 = LIB Release|Win32
- LIB Release|x64 = LIB Release|x64
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL|Win32.ActiveCfg = DLL Debug - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL|Win32.Build.0 = DLL Debug - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL|x64.ActiveCfg = DLL Debug - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL|x64.Build.0 = DLL Debug - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|x64.ActiveCfg = DLL Debug - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|x64.Build.0 = DLL Debug - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|Win32.ActiveCfg = DLL Debug - DLL wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|Win32.Build.0 = DLL Debug - DLL wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|x64.ActiveCfg = DLL Debug - DLL wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|x64.Build.0 = DLL Debug - DLL wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|x64.Build.0 = DLL Debug|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL|Win32.ActiveCfg = DLL Release - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL|Win32.Build.0 = DLL Release - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL|x64.ActiveCfg = DLL Release - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL|x64.Build.0 = DLL Release - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|Win32.ActiveCfg = DLL Release - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|Win32.ActiveCfg = DLL Release - DLL wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|Win32.Build.0 = DLL Release - DLL wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|x64.ActiveCfg = DLL Release - DLL wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|x64.Build.0 = DLL Release - DLL wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|Win32.Build.0 = DLL Release|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|x64.ActiveCfg = DLL Release|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|x64.Build.0 = DLL Release|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL|Win32.ActiveCfg = LIB Debug - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL|Win32.Build.0 = LIB Debug - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL|x64.ActiveCfg = LIB Debug - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL|x64.Build.0 = LIB Debug - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI|Win32.ActiveCfg = LIB Debug - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI|Win32.Build.0 = LIB Debug - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI|x64.ActiveCfg = LIB Debug - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI|x64.Build.0 = LIB Debug - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32.ActiveCfg = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32.Build.0 = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL - LIB LibSSH2|x64.ActiveCfg = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL - LIB LibSSH2|x64.Build.0 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|Win32.ActiveCfg = LIB Debug - LIB OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|Win32.Build.0 = LIB Debug - LIB OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|x64.ActiveCfg = LIB Debug - LIB OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|x64.Build.0 = LIB Debug - LIB OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|Win32.ActiveCfg = LIB Debug - LIB wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|Win32.Build.0 = LIB Debug - LIB wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|x64.ActiveCfg = LIB Debug - LIB wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|x64.Build.0 = LIB Debug - LIB wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|Win32.Build.0 = LIB Debug|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|x64.ActiveCfg = LIB Debug|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|x64.Build.0 = LIB Debug|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL|Win32.ActiveCfg = LIB Release - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL|Win32.Build.0 = LIB Release - DLL OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL|x64.ActiveCfg = LIB Release - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL|x64.Build.0 = LIB Release - DLL OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI|Win32.ActiveCfg = LIB Release - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI|Win32.Build.0 = LIB Release - DLL Windows SSPI|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI|x64.ActiveCfg = LIB Release - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI|x64.Build.0 = LIB Release - DLL Windows SSPI|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL - LIB LibSSH2|Win32.ActiveCfg = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL - LIB LibSSH2|Win32.Build.0 = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL - LIB LibSSH2|x64.ActiveCfg = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL - LIB LibSSH2|x64.Build.0 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|Win32.ActiveCfg = LIB Release - LIB OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|Win32.Build.0 = LIB Release - LIB OpenSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|x64.ActiveCfg = LIB Release - LIB OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|x64.Build.0 = LIB Release - LIB OpenSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|Win32.ActiveCfg = LIB Release - LIB wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|Win32.Build.0 = LIB Release - LIB wolfSSL|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|x64.ActiveCfg = LIB Release - LIB wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|x64.Build.0 = LIB Release - LIB wolfSSL|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|Win32.ActiveCfg = LIB Release|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|Win32.Build.0 = LIB Release|Win32
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|x64.ActiveCfg = LIB Release|x64
- {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|x64.Build.0 = LIB Release|x64
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/projects/Windows/VC12/src/curl.vcxproj b/projects/Windows/VC12/src/curl.vcxproj
deleted file mode 100644
index 0ef2cb262..000000000
--- a/projects/Windows/VC12/src/curl.vcxproj
+++ /dev/null
@@ -1,2794 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|Win32">
- <Configuration>DLL Debug - DLL wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|x64">
- <Configuration>DLL Debug - DLL wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|Win32">
- <Configuration>DLL Debug - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|x64">
- <Configuration>DLL Debug - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|Win32">
- <Configuration>DLL Debug - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|x64">
- <Configuration>DLL Debug - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug|Win32">
- <Configuration>DLL Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug|x64">
- <Configuration>DLL Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL wolfSSL|Win32">
- <Configuration>DLL Release - DLL wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL wolfSSL|x64">
- <Configuration>DLL Release - DLL wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL|Win32">
- <Configuration>DLL Release - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL|x64">
- <Configuration>DLL Release - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|Win32">
- <Configuration>DLL Release - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|x64">
- <Configuration>DLL Release - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release|Win32">
- <Configuration>DLL Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release|x64">
- <Configuration>DLL Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|Win32">
- <Configuration>LIB Debug - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|x64">
- <Configuration>LIB Debug - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|Win32">
- <Configuration>LIB Debug - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|x64">
- <Configuration>LIB Debug - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|Win32">
- <Configuration>LIB Debug - LIB wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|x64">
- <Configuration>LIB Debug - LIB wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32">
- <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|x64">
- <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|Win32">
- <Configuration>LIB Debug - LIB OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|x64">
- <Configuration>LIB Debug - LIB OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug|Win32">
- <Configuration>LIB Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug|x64">
- <Configuration>LIB Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL|Win32">
- <Configuration>LIB Release - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL|x64">
- <Configuration>LIB Release - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|Win32">
- <Configuration>LIB Release - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|x64">
- <Configuration>LIB Release - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB wolfSSL|Win32">
- <Configuration>LIB Release - LIB wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB wolfSSL|x64">
- <Configuration>LIB Release - LIB wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|Win32">
- <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|x64">
- <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL|Win32">
- <Configuration>LIB Release - LIB OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL|x64">
- <Configuration>LIB Release - LIB OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release|Win32">
- <Configuration>LIB Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release|x64">
- <Configuration>LIB Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{5228E9CE-A216-422F-A5E6-58E95E2DD71D}</ProjectGuid>
- <RootNamespace>curl</RootNamespace>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v120</PlatformToolset>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(ProjectName)</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC12\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC12\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC12\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC12\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC12\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC12\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC12\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC12\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC12\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC12\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC12\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libssh2.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC12\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\..\..\lib\curl_multibyte.c" />
- <ClCompile Include="..\..\..\..\lib\dynbuf.c" />
- <ClCompile Include="..\..\..\..\lib\nonblock.c" />
- <ClCompile Include="..\..\..\..\lib\strtoofft.c" />
- <ClCompile Include="..\..\..\..\lib\timediff.c" />
- <ClCompile Include="..\..\..\..\lib\version_win32.c" />
- <ClCompile Include="..\..\..\..\lib\warnless.c" />
- <ClCompile Include="..\..\..\..\src\slist_wc.c" />
- <ClCompile Include="..\..\..\..\src\tool_binmode.c" />
- <ClCompile Include="..\..\..\..\src\tool_bname.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_dbg.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_hdr.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_prg.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_rea.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_see.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_wrt.c" />
- <ClCompile Include="..\..\..\..\src\tool_cfgable.c" />
- <ClCompile Include="..\..\..\..\src\tool_dirhie.c" />
- <ClCompile Include="..\..\..\..\src\tool_doswin.c" />
- <ClCompile Include="..\..\..\..\src\tool_easysrc.c" />
- <ClCompile Include="..\..\..\..\src\tool_filetime.c" />
- <ClCompile Include="..\..\..\..\src\tool_findfile.c" />
- <ClCompile Include="..\..\..\..\src\tool_formparse.c" />
- <ClCompile Include="..\..\..\..\src\tool_getparam.c" />
- <ClCompile Include="..\..\..\..\src\tool_getpass.c" />
- <ClCompile Include="..\..\..\..\src\tool_help.c" />
- <ClCompile Include="..\..\..\..\src\tool_helpers.c" />
- <ClCompile Include="..\..\..\..\src\tool_hugehelp.c" />
- <ClCompile Include="..\..\..\..\src\tool_libinfo.c" />
- <ClCompile Include="..\..\..\..\src\tool_listhelp.c" />
- <ClCompile Include="..\..\..\..\src\tool_main.c" />
- <ClCompile Include="..\..\..\..\src\tool_msgs.c" />
- <ClCompile Include="..\..\..\..\src\tool_operate.c" />
- <ClCompile Include="..\..\..\..\src\tool_operhlp.c" />
- <ClCompile Include="..\..\..\..\src\tool_panykey.c" />
- <ClCompile Include="..\..\..\..\src\tool_paramhlp.c" />
- <ClCompile Include="..\..\..\..\src\tool_parsecfg.c" />
- <ClCompile Include="..\..\..\..\src\tool_progress.c" />
- <ClCompile Include="..\..\..\..\src\tool_setopt.c" />
- <ClCompile Include="..\..\..\..\src\tool_sleep.c" />
- <ClCompile Include="..\..\..\..\src\tool_strdup.c" />
- <ClCompile Include="..\..\..\..\src\tool_urlglob.c" />
- <ClCompile Include="..\..\..\..\src\tool_util.c" />
- <ClCompile Include="..\..\..\..\src\tool_vms.c" />
- <ClCompile Include="..\..\..\..\src\tool_writeout.c" />
- <ClCompile Include="..\..\..\..\src\tool_writeout_json.c" />
- <ClCompile Include="..\..\..\..\src\tool_xattr.c" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\..\..\..\lib\config-win32.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ctype.h" />
- <ClInclude Include="..\..\..\..\lib\curl_multibyte.h" />
- <ClInclude Include="..\..\..\..\lib\curl_setup.h" />
- <ClInclude Include="..\..\..\..\lib\dynbuf.h" />
- <ClInclude Include="..\..\..\..\lib\nonblock.h" />
- <ClInclude Include="..\..\..\..\lib\strtoofft.h" />
- <ClInclude Include="..\..\..\..\lib\timediff.h" />
- <ClInclude Include="..\..\..\..\lib\version_win32.h" />
- <ClInclude Include="..\..\..\..\lib\warnless.h" />
- <ClInclude Include="..\..\..\..\src\slist_wc.h" />
- <ClInclude Include="..\..\..\..\src\tool_binmode.h" />
- <ClInclude Include="..\..\..\..\src\tool_bname.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_dbg.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_hdr.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_prg.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_rea.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_see.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_wrt.h" />
- <ClInclude Include="..\..\..\..\src\tool_cfgable.h" />
- <ClInclude Include="..\..\..\..\src\tool_dirhie.h" />
- <ClInclude Include="..\..\..\..\src\tool_doswin.h" />
- <ClInclude Include="..\..\..\..\src\tool_easysrc.h" />
- <ClInclude Include="..\..\..\..\src\tool_filetime.h" />
- <ClInclude Include="..\..\..\..\src\tool_findfile.h" />
- <ClInclude Include="..\..\..\..\src\tool_formparse.h" />
- <ClInclude Include="..\..\..\..\src\tool_getparam.h" />
- <ClInclude Include="..\..\..\..\src\tool_getpass.h" />
- <ClInclude Include="..\..\..\..\src\tool_helpers.h" />
- <ClInclude Include="..\..\..\..\src\tool_help.h" />
- <ClInclude Include="..\..\..\..\src\tool_hugehelp.h" />
- <ClInclude Include="..\..\..\..\src\tool_libinfo.h" />
- <ClInclude Include="..\..\..\..\src\tool_main.h" />
- <ClInclude Include="..\..\..\..\src\tool_msgs.h" />
- <ClInclude Include="..\..\..\..\src\tool_operate.h" />
- <ClInclude Include="..\..\..\..\src\tool_operhlp.h" />
- <ClInclude Include="..\..\..\..\src\tool_panykey.h" />
- <ClInclude Include="..\..\..\..\src\tool_paramhlp.h" />
- <ClInclude Include="..\..\..\..\src\tool_parsecfg.h" />
- <ClInclude Include="..\..\..\..\src\tool_progress.h" />
- <ClInclude Include="..\..\..\..\src\tool_sdecls.h" />
- <ClInclude Include="..\..\..\..\src\tool_setopt.h" />
- <ClInclude Include="..\..\..\..\src\tool_setup.h" />
- <ClInclude Include="..\..\..\..\src\tool_sleep.h" />
- <ClInclude Include="..\..\..\..\src\tool_strdup.h" />
- <ClInclude Include="..\..\..\..\src\tool_urlglob.h" />
- <ClInclude Include="..\..\..\..\src\tool_util.h" />
- <ClInclude Include="..\..\..\..\src\tool_version.h" />
- <ClInclude Include="..\..\..\..\src\tool_vms.h" />
- <ClInclude Include="..\..\..\..\src\tool_writeout.h" />
- <ClInclude Include="..\..\..\..\src\tool_writeout_json.h" />
- <ClInclude Include="..\..\..\..\src\tool_xattr.h" />
- </ItemGroup>
- <ItemGroup>
- <ResourceCompile Include="..\..\..\..\src\curl.rc" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project>
diff --git a/projects/Windows/VC12/src/curl.vcxproj.filters b/projects/Windows/VC12/src/curl.vcxproj.filters
deleted file mode 100644
index 4d6341d74..000000000
--- a/projects/Windows/VC12/src/curl.vcxproj.filters
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup>
- <Filter Include="Source Files">
- <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
- <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
- </Filter>
- <Filter Include="Header Files">
- <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
- <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
- </Filter>
- <Filter Include="Resource Files">
- <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
- <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
- </Filter>
- </ItemGroup>
-</Project> \ No newline at end of file
diff --git a/projects/Windows/VC14.10/lib/libcurl.vcxproj b/projects/Windows/VC14.10/lib/libcurl.vcxproj
deleted file mode 100644
index ccf69d653..000000000
--- a/projects/Windows/VC14.10/lib/libcurl.vcxproj
+++ /dev/null
@@ -1,2675 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|Win32">
- <Configuration>DLL Debug - DLL wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|x64">
- <Configuration>DLL Debug - DLL wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|Win32">
- <Configuration>DLL Debug - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|x64">
- <Configuration>DLL Debug - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|Win32">
- <Configuration>DLL Debug - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|x64">
- <Configuration>DLL Debug - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug|Win32">
- <Configuration>DLL Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug|x64">
- <Configuration>DLL Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL wolfSSL|Win32">
- <Configuration>DLL Release - DLL wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL wolfSSL|x64">
- <Configuration>DLL Release - DLL wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL|Win32">
- <Configuration>DLL Release - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL|x64">
- <Configuration>DLL Release - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|Win32">
- <Configuration>DLL Release - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|x64">
- <Configuration>DLL Release - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release|Win32">
- <Configuration>DLL Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release|x64">
- <Configuration>DLL Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|Win32">
- <Configuration>LIB Debug - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|x64">
- <Configuration>LIB Debug - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|Win32">
- <Configuration>LIB Debug - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|x64">
- <Configuration>LIB Debug - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|Win32">
- <Configuration>LIB Debug - LIB wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|x64">
- <Configuration>LIB Debug - LIB wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32">
- <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|x64">
- <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|Win32">
- <Configuration>LIB Debug - LIB OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|x64">
- <Configuration>LIB Debug - LIB OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug|Win32">
- <Configuration>LIB Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug|x64">
- <Configuration>LIB Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL|Win32">
- <Configuration>LIB Release - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL|x64">
- <Configuration>LIB Release - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|Win32">
- <Configuration>LIB Release - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|x64">
- <Configuration>LIB Release - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB wolfSSL|Win32">
- <Configuration>LIB Release - LIB wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB wolfSSL|x64">
- <Configuration>LIB Release - LIB wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|Win32">
- <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|x64">
- <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL|Win32">
- <Configuration>LIB Release - LIB OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL|x64">
- <Configuration>LIB Release - LIB OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release|Win32">
- <Configuration>LIB Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release|x64">
- <Configuration>LIB Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}</ProjectGuid>
- <RootNamespace>libcurl</RootNamespace>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)d</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win32\VC14.10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win64\VC14.10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win32\VC14.10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win64\VC14.10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC14.10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC14.10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC14.10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC14.10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC14.10\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC14.10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC14.10\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC14.10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC14.10\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC14.10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC14.10\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC14.10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\..\..\lib\altsvc.c" />
- <ClCompile Include="..\..\..\..\lib\amigaos.c" />
- <ClCompile Include="..\..\..\..\lib\asyn-ares.c" />
- <ClCompile Include="..\..\..\..\lib\asyn-thread.c" />
- <ClCompile Include="..\..\..\..\lib\base64.c" />
- <ClCompile Include="..\..\..\..\lib\bufref.c" />
- <ClCompile Include="..\..\..\..\lib\c-hyper.c" />
- <ClCompile Include="..\..\..\..\lib\conncache.c" />
- <ClCompile Include="..\..\..\..\lib\connect.c" />
- <ClCompile Include="..\..\..\..\lib\content_encoding.c" />
- <ClCompile Include="..\..\..\..\lib\cookie.c" />
- <ClCompile Include="..\..\..\..\lib\curl_addrinfo.c" />
- <ClCompile Include="..\..\..\..\lib\curl_des.c" />
- <ClCompile Include="..\..\..\..\lib\curl_endian.c" />
- <ClCompile Include="..\..\..\..\lib\curl_fnmatch.c" />
- <ClCompile Include="..\..\..\..\lib\curl_gethostname.c" />
- <ClCompile Include="..\..\..\..\lib\curl_get_line.c" />
- <ClCompile Include="..\..\..\..\lib\curl_gssapi.c" />
- <ClCompile Include="..\..\..\..\lib\curl_memrchr.c" />
- <ClCompile Include="..\..\..\..\lib\curl_multibyte.c" />
- <ClCompile Include="..\..\..\..\lib\curl_ntlm_core.c" />
- <ClCompile Include="..\..\..\..\lib\curl_ntlm_wb.c" />
- <ClCompile Include="..\..\..\..\lib\curl_path.c" />
- <ClCompile Include="..\..\..\..\lib\curl_range.c" />
- <ClCompile Include="..\..\..\..\lib\curl_rtmp.c" />
- <ClCompile Include="..\..\..\..\lib\curl_sasl.c" />
- <ClCompile Include="..\..\..\..\lib\curl_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\curl_threads.c" />
- <ClCompile Include="..\..\..\..\lib\dict.c" />
- <ClCompile Include="..\..\..\..\lib\doh.c" />
- <ClCompile Include="..\..\..\..\lib\dynbuf.c" />
- <ClCompile Include="..\..\..\..\lib\easy.c" />
- <ClCompile Include="..\..\..\..\lib\easygetopt.c" />
- <ClCompile Include="..\..\..\..\lib\easyoptions.c" />
- <ClCompile Include="..\..\..\..\lib\escape.c" />
- <ClCompile Include="..\..\..\..\lib\file.c" />
- <ClCompile Include="..\..\..\..\lib\fileinfo.c" />
- <ClCompile Include="..\..\..\..\lib\fopen.c" />
- <ClCompile Include="..\..\..\..\lib\formdata.c" />
- <ClCompile Include="..\..\..\..\lib\ftp.c" />
- <ClCompile Include="..\..\..\..\lib\ftplistparser.c" />
- <ClCompile Include="..\..\..\..\lib\getenv.c" />
- <ClCompile Include="..\..\..\..\lib\getinfo.c" />
- <ClCompile Include="..\..\..\..\lib\gopher.c" />
- <ClCompile Include="..\..\..\..\lib\h2h3.c" />
- <ClCompile Include="..\..\..\..\lib\hash.c" />
- <ClCompile Include="..\..\..\..\lib\headers.c" />
- <ClCompile Include="..\..\..\..\lib\hmac.c" />
- <ClCompile Include="..\..\..\..\lib\hostasyn.c" />
- <ClCompile Include="..\..\..\..\lib\hostip4.c" />
- <ClCompile Include="..\..\..\..\lib\hostip6.c" />
- <ClCompile Include="..\..\..\..\lib\hostip.c" />
- <ClCompile Include="..\..\..\..\lib\hostsyn.c" />
- <ClCompile Include="..\..\..\..\lib\hsts.c" />
- <ClCompile Include="..\..\..\..\lib\http2.c" />
- <ClCompile Include="..\..\..\..\lib\http_aws_sigv4.c" />
- <ClCompile Include="..\..\..\..\lib\http.c" />
- <ClCompile Include="..\..\..\..\lib\http_chunks.c" />
- <ClCompile Include="..\..\..\..\lib\http_digest.c" />
- <ClCompile Include="..\..\..\..\lib\http_negotiate.c" />
- <ClCompile Include="..\..\..\..\lib\http_ntlm.c" />
- <ClCompile Include="..\..\..\..\lib\http_proxy.c" />
- <ClCompile Include="..\..\..\..\lib\idn_win32.c" />
- <ClCompile Include="..\..\..\..\lib\if2ip.c" />
- <ClCompile Include="..\..\..\..\lib\imap.c" />
- <ClCompile Include="..\..\..\..\lib\inet_ntop.c" />
- <ClCompile Include="..\..\..\..\lib\inet_pton.c" />
- <ClCompile Include="..\..\..\..\lib\krb5.c" />
- <ClCompile Include="..\..\..\..\lib\ldap.c" />
- <ClCompile Include="..\..\..\..\lib\llist.c" />
- <ClCompile Include="..\..\..\..\lib\md4.c" />
- <ClCompile Include="..\..\..\..\lib\md5.c" />
- <ClCompile Include="..\..\..\..\lib\memdebug.c" />
- <ClCompile Include="..\..\..\..\lib\mime.c" />
- <ClCompile Include="..\..\..\..\lib\mprintf.c" />
- <ClCompile Include="..\..\..\..\lib\mqtt.c" />
- <ClCompile Include="..\..\..\..\lib\multi.c" />
- <ClCompile Include="..\..\..\..\lib\netrc.c" />
- <ClCompile Include="..\..\..\..\lib\nonblock.c" />
- <ClCompile Include="..\..\..\..\lib\noproxy.c" />
- <ClCompile Include="..\..\..\..\lib\openldap.c" />
- <ClCompile Include="..\..\..\..\lib\parsedate.c" />
- <ClCompile Include="..\..\..\..\lib\pingpong.c" />
- <ClCompile Include="..\..\..\..\lib\pop3.c" />
- <ClCompile Include="..\..\..\..\lib\progress.c" />
- <ClCompile Include="..\..\..\..\lib\psl.c" />
- <ClCompile Include="..\..\..\..\lib\rand.c" />
- <ClCompile Include="..\..\..\..\lib\rename.c" />
- <ClCompile Include="..\..\..\..\lib\rtsp.c" />
- <ClCompile Include="..\..\..\..\lib\select.c" />
- <ClCompile Include="..\..\..\..\lib\sendf.c" />
- <ClCompile Include="..\..\..\..\lib\setopt.c" />
- <ClCompile Include="..\..\..\..\lib\sha256.c" />
- <ClCompile Include="..\..\..\..\lib\share.c" />
- <ClCompile Include="..\..\..\..\lib\slist.c" />
- <ClCompile Include="..\..\..\..\lib\smb.c" />
- <ClCompile Include="..\..\..\..\lib\smtp.c" />
- <ClCompile Include="..\..\..\..\lib\socketpair.c" />
- <ClCompile Include="..\..\..\..\lib\socks.c" />
- <ClCompile Include="..\..\..\..\lib\socks_gssapi.c" />
- <ClCompile Include="..\..\..\..\lib\socks_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\speedcheck.c" />
- <ClCompile Include="..\..\..\..\lib\splay.c" />
- <ClCompile Include="..\..\..\..\lib\strcase.c" />
- <ClCompile Include="..\..\..\..\lib\strdup.c" />
- <ClCompile Include="..\..\..\..\lib\strerror.c" />
- <ClCompile Include="..\..\..\..\lib\strtok.c" />
- <ClCompile Include="..\..\..\..\lib\strtoofft.c" />
- <ClCompile Include="..\..\..\..\lib\system_win32.c" />
- <ClCompile Include="..\..\..\..\lib\telnet.c" />
- <ClCompile Include="..\..\..\..\lib\tftp.c" />
- <ClCompile Include="..\..\..\..\lib\timediff.c" />
- <ClCompile Include="..\..\..\..\lib\timeval.c" />
- <ClCompile Include="..\..\..\..\lib\transfer.c" />
- <ClCompile Include="..\..\..\..\lib\urlapi.c" />
- <ClCompile Include="..\..\..\..\lib\url.c" />
- <ClCompile Include="..\..\..\..\lib\version.c" />
- <ClCompile Include="..\..\..\..\lib\version_win32.c" />
- <ClCompile Include="..\..\..\..\lib\warnless.c" />
- <ClCompile Include="..\..\..\..\lib\wildcard.c" />
- <ClCompile Include="..\..\..\..\lib\ws.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\cleartext.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\cram.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\digest.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\digest_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\gsasl.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\krb5_gssapi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\krb5_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\ntlm.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\ntlm_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\oauth2.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\spnego_gssapi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\spnego_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\vauth.c" />
- <ClCompile Include="..\..\..\..\lib\vquic\msh3.c" />
- <ClCompile Include="..\..\..\..\lib\vquic\ngtcp2.c" />
- <ClCompile Include="..\..\..\..\lib\vquic\quiche.c" />
- <ClCompile Include="..\..\..\..\lib\vquic\vquic.c" />
- <ClCompile Include="..\..\..\..\lib\vssh\libssh2.c" />
- <ClCompile Include="..\..\..\..\lib\vssh\libssh.c" />
- <ClCompile Include="..\..\..\..\lib\vssh\wolfssh.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\bearssl.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\gskit.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\gtls.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\hostcheck.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\keylog.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\mbedtls.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\mbedtls_threadlock.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\nss.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\openssl.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\rustls.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\schannel.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\schannel_verify.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\sectransp.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\vtls.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\wolfssl.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\x509asn1.c" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\..\..\..\lib\altsvc.h" />
- <ClInclude Include="..\..\..\..\lib\amigaos.h" />
- <ClInclude Include="..\..\..\..\lib\arpa_telnet.h" />
- <ClInclude Include="..\..\..\..\lib\asyn.h" />
- <ClInclude Include="..\..\..\..\lib\bufref.h" />
- <ClInclude Include="..\..\..\..\lib\c-hyper.h" />
- <ClInclude Include="..\..\..\..\lib\config-win32.h" />
- <ClInclude Include="..\..\..\..\lib\conncache.h" />
- <ClInclude Include="..\..\..\..\lib\connect.h" />
- <ClInclude Include="..\..\..\..\lib\content_encoding.h" />
- <ClInclude Include="..\..\..\..\lib\cookie.h" />
- <ClInclude Include="..\..\..\..\lib\curl_addrinfo.h" />
- <ClInclude Include="..\..\..\..\lib\curl_base64.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ctype.h" />
- <ClInclude Include="..\..\..\..\lib\curl_des.h" />
- <ClInclude Include="..\..\..\..\lib\curl_endian.h" />
- <ClInclude Include="..\..\..\..\lib\curl_fnmatch.h" />
- <ClInclude Include="..\..\..\..\lib\curl_gethostname.h" />
- <ClInclude Include="..\..\..\..\lib\curl_get_line.h" />
- <ClInclude Include="..\..\..\..\lib\curl_gssapi.h" />
- <ClInclude Include="..\..\..\..\lib\curl_hmac.h" />
- <ClInclude Include="..\..\..\..\lib\curl_krb5.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ldap.h" />
- <ClInclude Include="..\..\..\..\lib\curl_md4.h" />
- <ClInclude Include="..\..\..\..\lib\curl_md5.h" />
- <ClInclude Include="..\..\..\..\lib\curl_memory.h" />
- <ClInclude Include="..\..\..\..\lib\curl_memrchr.h" />
- <ClInclude Include="..\..\..\..\lib\curl_multibyte.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ntlm_core.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ntlm_wb.h" />
- <ClInclude Include="..\..\..\..\lib\curl_path.h" />
- <ClInclude Include="..\..\..\..\lib\curl_printf.h" />
- <ClInclude Include="..\..\..\..\lib\curl_range.h" />
- <ClInclude Include="..\..\..\..\lib\curl_rtmp.h" />
- <ClInclude Include="..\..\..\..\lib\curl_sasl.h" />
- <ClInclude Include="..\..\..\..\lib\curl_setup.h" />
- <ClInclude Include="..\..\..\..\lib\curl_setup_once.h" />
- <ClInclude Include="..\..\..\..\lib\curl_sha256.h" />
- <ClInclude Include="..\..\..\..\lib\curl_sspi.h" />
- <ClInclude Include="..\..\..\..\lib\curl_threads.h" />
- <ClInclude Include="..\..\..\..\lib\curlx.h" />
- <ClInclude Include="..\..\..\..\lib\dict.h" />
- <ClInclude Include="..\..\..\..\lib\doh.h" />
- <ClInclude Include="..\..\..\..\lib\dynbuf.h" />
- <ClInclude Include="..\..\..\..\lib\easyif.h" />
- <ClInclude Include="..\..\..\..\lib\easy_lock.h" />
- <ClInclude Include="..\..\..\..\lib\easyoptions.h" />
- <ClInclude Include="..\..\..\..\lib\escape.h" />
- <ClInclude Include="..\..\..\..\lib\file.h" />
- <ClInclude Include="..\..\..\..\lib\fileinfo.h" />
- <ClInclude Include="..\..\..\..\lib\fopen.h" />
- <ClInclude Include="..\..\..\..\lib\formdata.h" />
- <ClInclude Include="..\..\..\..\lib\ftp.h" />
- <ClInclude Include="..\..\..\..\lib\ftplistparser.h" />
- <ClInclude Include="..\..\..\..\lib\functypes.h" />
- <ClInclude Include="..\..\..\..\lib\getinfo.h" />
- <ClInclude Include="..\..\..\..\lib\gopher.h" />
- <ClInclude Include="..\..\..\..\lib\h2h3.h" />
- <ClInclude Include="..\..\..\..\lib\hash.h" />
- <ClInclude Include="..\..\..\..\lib\headers.h" />
- <ClInclude Include="..\..\..\..\lib\hostip.h" />
- <ClInclude Include="..\..\..\..\lib\hsts.h" />
- <ClInclude Include="..\..\..\..\lib\http2.h" />
- <ClInclude Include="..\..\..\..\lib\http_aws_sigv4.h" />
- <ClInclude Include="..\..\..\..\lib\http_chunks.h" />
- <ClInclude Include="..\..\..\..\lib\http_digest.h" />
- <ClInclude Include="..\..\..\..\lib\http.h" />
- <ClInclude Include="..\..\..\..\lib\http_negotiate.h" />
- <ClInclude Include="..\..\..\..\lib\http_ntlm.h" />
- <ClInclude Include="..\..\..\..\lib\http_proxy.h" />
- <ClInclude Include="..\..\..\..\lib\if2ip.h" />
- <ClInclude Include="..\..\..\..\lib\imap.h" />
- <ClInclude Include="..\..\..\..\lib\inet_ntop.h" />
- <ClInclude Include="..\..\..\..\lib\inet_pton.h" />
- <ClInclude Include="..\..\..\..\lib\llist.h" />
- <ClInclude Include="..\..\..\..\lib\memdebug.h" />
- <ClInclude Include="..\..\..\..\lib\mime.h" />
- <ClInclude Include="..\..\..\..\lib\mqtt.h" />
- <ClInclude Include="..\..\..\..\lib\multihandle.h" />
- <ClInclude Include="..\..\..\..\lib\multiif.h" />
- <ClInclude Include="..\..\..\..\lib\netrc.h" />
- <ClInclude Include="..\..\..\..\lib\nonblock.h" />
- <ClInclude Include="..\..\..\..\lib\noproxy.h" />
- <ClInclude Include="..\..\..\..\lib\parsedate.h" />
- <ClInclude Include="..\..\..\..\lib\pingpong.h" />
- <ClInclude Include="..\..\..\..\lib\pop3.h" />
- <ClInclude Include="..\..\..\..\lib\progress.h" />
- <ClInclude Include="..\..\..\..\lib\psl.h" />
- <ClInclude Include="..\..\..\..\lib\quic.h" />
- <ClInclude Include="..\..\..\..\lib\rand.h" />
- <ClInclude Include="..\..\..\..\lib\rename.h" />
- <ClInclude Include="..\..\..\..\lib\rtsp.h" />
- <ClInclude Include="..\..\..\..\lib\select.h" />
- <ClInclude Include="..\..\..\..\lib\sendf.h" />
- <ClInclude Include="..\..\..\..\lib\setopt.h" />
- <ClInclude Include="..\..\..\..\lib\setup-vms.h" />
- <ClInclude Include="..\..\..\..\lib\share.h" />
- <ClInclude Include="..\..\..\..\lib\sigpipe.h" />
- <ClInclude Include="..\..\..\..\lib\slist.h" />
- <ClInclude Include="..\..\..\..\lib\smb.h" />
- <ClInclude Include="..\..\..\..\lib\smtp.h" />
- <ClInclude Include="..\..\..\..\lib\sockaddr.h" />
- <ClInclude Include="..\..\..\..\lib\socketpair.h" />
- <ClInclude Include="..\..\..\..\lib\socks.h" />
- <ClInclude Include="..\..\..\..\lib\speedcheck.h" />
- <ClInclude Include="..\..\..\..\lib\splay.h" />
- <ClInclude Include="..\..\..\..\lib\strcase.h" />
- <ClInclude Include="..\..\..\..\lib\strdup.h" />
- <ClInclude Include="..\..\..\..\lib\strerror.h" />
- <ClInclude Include="..\..\..\..\lib\strtok.h" />
- <ClInclude Include="..\..\..\..\lib\strtoofft.h" />
- <ClInclude Include="..\..\..\..\lib\system_win32.h" />
- <ClInclude Include="..\..\..\..\lib\telnet.h" />
- <ClInclude Include="..\..\..\..\lib\tftp.h" />
- <ClInclude Include="..\..\..\..\lib\timediff.h" />
- <ClInclude Include="..\..\..\..\lib\timeval.h" />
- <ClInclude Include="..\..\..\..\lib\transfer.h" />
- <ClInclude Include="..\..\..\..\lib\urlapi-int.h" />
- <ClInclude Include="..\..\..\..\lib\urldata.h" />
- <ClInclude Include="..\..\..\..\lib\url.h" />
- <ClInclude Include="..\..\..\..\lib\version_win32.h" />
- <ClInclude Include="..\..\..\..\lib\warnless.h" />
- <ClInclude Include="..\..\..\..\lib\wildcard.h" />
- <ClInclude Include="..\..\..\..\lib\ws.h" />
- <ClInclude Include="..\..\..\..\lib\vauth\digest.h" />
- <ClInclude Include="..\..\..\..\lib\vauth\ntlm.h" />
- <ClInclude Include="..\..\..\..\lib\vauth\vauth.h" />
- <ClInclude Include="..\..\..\..\lib\vquic\msh3.h" />
- <ClInclude Include="..\..\..\..\lib\vquic\ngtcp2.h" />
- <ClInclude Include="..\..\..\..\lib\vquic\quiche.h" />
- <ClInclude Include="..\..\..\..\lib\vquic\vquic.h" />
- <ClInclude Include="..\..\..\..\lib\vssh\ssh.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\bearssl.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\gskit.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\gtls.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\hostcheck.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\keylog.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\mbedtls.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\mbedtls_threadlock.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\nssg.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\openssl.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\rustls.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\schannel.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\sectransp.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\vtls.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\wolfssl.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\x509asn1.h" />
- </ItemGroup>
- <ItemGroup>
- <ResourceCompile Include="..\..\..\..\lib\libcurl.rc" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project>
diff --git a/projects/Windows/VC14.10/src/curl.vcxproj b/projects/Windows/VC14.10/src/curl.vcxproj
deleted file mode 100644
index 032e826dc..000000000
--- a/projects/Windows/VC14.10/src/curl.vcxproj
+++ /dev/null
@@ -1,2766 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|Win32">
- <Configuration>DLL Debug - DLL wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|x64">
- <Configuration>DLL Debug - DLL wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|Win32">
- <Configuration>DLL Debug - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|x64">
- <Configuration>DLL Debug - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|Win32">
- <Configuration>DLL Debug - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|x64">
- <Configuration>DLL Debug - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug|Win32">
- <Configuration>DLL Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug|x64">
- <Configuration>DLL Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL wolfSSL|Win32">
- <Configuration>DLL Release - DLL wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL wolfSSL|x64">
- <Configuration>DLL Release - DLL wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL|Win32">
- <Configuration>DLL Release - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL|x64">
- <Configuration>DLL Release - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|Win32">
- <Configuration>DLL Release - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|x64">
- <Configuration>DLL Release - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release|Win32">
- <Configuration>DLL Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release|x64">
- <Configuration>DLL Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|Win32">
- <Configuration>LIB Debug - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|x64">
- <Configuration>LIB Debug - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|Win32">
- <Configuration>LIB Debug - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|x64">
- <Configuration>LIB Debug - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|Win32">
- <Configuration>LIB Debug - LIB wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|x64">
- <Configuration>LIB Debug - LIB wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32">
- <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|x64">
- <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|Win32">
- <Configuration>LIB Debug - LIB OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|x64">
- <Configuration>LIB Debug - LIB OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug|Win32">
- <Configuration>LIB Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug|x64">
- <Configuration>LIB Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL|Win32">
- <Configuration>LIB Release - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL|x64">
- <Configuration>LIB Release - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|Win32">
- <Configuration>LIB Release - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|x64">
- <Configuration>LIB Release - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB wolfSSL|Win32">
- <Configuration>LIB Release - LIB wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB wolfSSL|x64">
- <Configuration>LIB Release - LIB wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|Win32">
- <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|x64">
- <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL|Win32">
- <Configuration>LIB Release - LIB OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL|x64">
- <Configuration>LIB Release - LIB OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release|Win32">
- <Configuration>LIB Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release|x64">
- <Configuration>LIB Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{5228E9CE-A216-422F-A5E6-58E95E2DD71D}</ProjectGuid>
- <RootNamespace>curl</RootNamespace>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v141</PlatformToolset>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14.10\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(ProjectName)</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC14.10\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC14.10\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC14.10\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC14.10\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.10\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.10\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.10\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.10\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.10\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC14.10\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.10\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC14.10\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.10\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC14.10\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.10\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC14.10\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.10\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC14.10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.10\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC14.10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.10\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC14.10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libssh2.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.10\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC14.10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\..\..\lib\curl_multibyte.c" />
- <ClCompile Include="..\..\..\..\lib\dynbuf.c" />
- <ClCompile Include="..\..\..\..\lib\nonblock.c" />
- <ClCompile Include="..\..\..\..\lib\strtoofft.c" />
- <ClCompile Include="..\..\..\..\lib\timediff.c" />
- <ClCompile Include="..\..\..\..\lib\version_win32.c" />
- <ClCompile Include="..\..\..\..\lib\warnless.c" />
- <ClCompile Include="..\..\..\..\src\slist_wc.c" />
- <ClCompile Include="..\..\..\..\src\tool_binmode.c" />
- <ClCompile Include="..\..\..\..\src\tool_bname.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_dbg.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_hdr.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_prg.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_rea.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_see.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_wrt.c" />
- <ClCompile Include="..\..\..\..\src\tool_cfgable.c" />
- <ClCompile Include="..\..\..\..\src\tool_dirhie.c" />
- <ClCompile Include="..\..\..\..\src\tool_doswin.c" />
- <ClCompile Include="..\..\..\..\src\tool_easysrc.c" />
- <ClCompile Include="..\..\..\..\src\tool_filetime.c" />
- <ClCompile Include="..\..\..\..\src\tool_findfile.c" />
- <ClCompile Include="..\..\..\..\src\tool_formparse.c" />
- <ClCompile Include="..\..\..\..\src\tool_getparam.c" />
- <ClCompile Include="..\..\..\..\src\tool_getpass.c" />
- <ClCompile Include="..\..\..\..\src\tool_help.c" />
- <ClCompile Include="..\..\..\..\src\tool_helpers.c" />
- <ClCompile Include="..\..\..\..\src\tool_hugehelp.c" />
- <ClCompile Include="..\..\..\..\src\tool_libinfo.c" />
- <ClCompile Include="..\..\..\..\src\tool_listhelp.c" />
- <ClCompile Include="..\..\..\..\src\tool_main.c" />
- <ClCompile Include="..\..\..\..\src\tool_msgs.c" />
- <ClCompile Include="..\..\..\..\src\tool_operate.c" />
- <ClCompile Include="..\..\..\..\src\tool_operhlp.c" />
- <ClCompile Include="..\..\..\..\src\tool_panykey.c" />
- <ClCompile Include="..\..\..\..\src\tool_paramhlp.c" />
- <ClCompile Include="..\..\..\..\src\tool_parsecfg.c" />
- <ClCompile Include="..\..\..\..\src\tool_progress.c" />
- <ClCompile Include="..\..\..\..\src\tool_setopt.c" />
- <ClCompile Include="..\..\..\..\src\tool_sleep.c" />
- <ClCompile Include="..\..\..\..\src\tool_strdup.c" />
- <ClCompile Include="..\..\..\..\src\tool_urlglob.c" />
- <ClCompile Include="..\..\..\..\src\tool_util.c" />
- <ClCompile Include="..\..\..\..\src\tool_vms.c" />
- <ClCompile Include="..\..\..\..\src\tool_writeout.c" />
- <ClCompile Include="..\..\..\..\src\tool_writeout_json.c" />
- <ClCompile Include="..\..\..\..\src\tool_xattr.c" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\..\..\..\lib\config-win32.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ctype.h" />
- <ClInclude Include="..\..\..\..\lib\curl_multibyte.h" />
- <ClInclude Include="..\..\..\..\lib\curl_setup.h" />
- <ClInclude Include="..\..\..\..\lib\dynbuf.h" />
- <ClInclude Include="..\..\..\..\lib\nonblock.h" />
- <ClInclude Include="..\..\..\..\lib\strtoofft.h" />
- <ClInclude Include="..\..\..\..\lib\timediff.h" />
- <ClInclude Include="..\..\..\..\lib\version_win32.h" />
- <ClInclude Include="..\..\..\..\lib\warnless.h" />
- <ClInclude Include="..\..\..\..\src\slist_wc.h" />
- <ClInclude Include="..\..\..\..\src\tool_binmode.h" />
- <ClInclude Include="..\..\..\..\src\tool_bname.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_dbg.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_hdr.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_prg.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_rea.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_see.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_wrt.h" />
- <ClInclude Include="..\..\..\..\src\tool_cfgable.h" />
- <ClInclude Include="..\..\..\..\src\tool_dirhie.h" />
- <ClInclude Include="..\..\..\..\src\tool_doswin.h" />
- <ClInclude Include="..\..\..\..\src\tool_easysrc.h" />
- <ClInclude Include="..\..\..\..\src\tool_filetime.h" />
- <ClInclude Include="..\..\..\..\src\tool_findfile.h" />
- <ClInclude Include="..\..\..\..\src\tool_formparse.h" />
- <ClInclude Include="..\..\..\..\src\tool_getparam.h" />
- <ClInclude Include="..\..\..\..\src\tool_getpass.h" />
- <ClInclude Include="..\..\..\..\src\tool_helpers.h" />
- <ClInclude Include="..\..\..\..\src\tool_help.h" />
- <ClInclude Include="..\..\..\..\src\tool_hugehelp.h" />
- <ClInclude Include="..\..\..\..\src\tool_libinfo.h" />
- <ClInclude Include="..\..\..\..\src\tool_main.h" />
- <ClInclude Include="..\..\..\..\src\tool_msgs.h" />
- <ClInclude Include="..\..\..\..\src\tool_operate.h" />
- <ClInclude Include="..\..\..\..\src\tool_operhlp.h" />
- <ClInclude Include="..\..\..\..\src\tool_panykey.h" />
- <ClInclude Include="..\..\..\..\src\tool_paramhlp.h" />
- <ClInclude Include="..\..\..\..\src\tool_parsecfg.h" />
- <ClInclude Include="..\..\..\..\src\tool_progress.h" />
- <ClInclude Include="..\..\..\..\src\tool_sdecls.h" />
- <ClInclude Include="..\..\..\..\src\tool_setopt.h" />
- <ClInclude Include="..\..\..\..\src\tool_setup.h" />
- <ClInclude Include="..\..\..\..\src\tool_sleep.h" />
- <ClInclude Include="..\..\..\..\src\tool_strdup.h" />
- <ClInclude Include="..\..\..\..\src\tool_urlglob.h" />
- <ClInclude Include="..\..\..\..\src\tool_util.h" />
- <ClInclude Include="..\..\..\..\src\tool_version.h" />
- <ClInclude Include="..\..\..\..\src\tool_vms.h" />
- <ClInclude Include="..\..\..\..\src\tool_writeout.h" />
- <ClInclude Include="..\..\..\..\src\tool_writeout_json.h" />
- <ClInclude Include="..\..\..\..\src\tool_xattr.h" />
- </ItemGroup>
- <ItemGroup>
- <ResourceCompile Include="..\..\..\..\src\curl.rc" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project>
diff --git a/projects/Windows/VC12/curl-all.sln b/projects/Windows/VC14.20/curl-all.sln
index 1557b9e3b..3df7e1c30 100644
--- a/projects/Windows/VC12/curl-all.sln
+++ b/projects/Windows/VC14.20/curl-all.sln
@@ -1,5 +1,5 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
+# Visual Studio 16
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curl", "src\curl.vcxproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
ProjectSection(ProjectDependencies) = postProject
{DA6F56B4-06A4-441D-AD70-AC5A7D51FADB} = {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}
diff --git a/projects/Windows/VC12/lib/libcurl.sln b/projects/Windows/VC14.20/lib/libcurl.sln
index 4d690de53..171bb83fa 100644
--- a/projects/Windows/VC12/lib/libcurl.sln
+++ b/projects/Windows/VC14.20/lib/libcurl.sln
@@ -1,5 +1,5 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
+# Visual Studio 17
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcurl", "libcurl.vcxproj", "{DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}"
EndProject
Global
diff --git a/projects/Windows/VC10/lib/libcurl.vcxproj.filters b/projects/Windows/VC14.20/lib/libcurl.vcxproj.filters
index 4d6341d74..4d6341d74 100644
--- a/projects/Windows/VC10/lib/libcurl.vcxproj.filters
+++ b/projects/Windows/VC14.20/lib/libcurl.vcxproj.filters
diff --git a/projects/Windows/VC11/src/curl.sln b/projects/Windows/VC14.20/src/curl.sln
index 31fff6863..94c2fb737 100644
--- a/projects/Windows/VC11/src/curl.sln
+++ b/projects/Windows/VC14.20/src/curl.sln
@@ -1,5 +1,5 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2012
+# Visual Studio 16
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curl", "curl.vcxproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
EndProject
Global
diff --git a/projects/Windows/VC10/src/curl.vcxproj.filters b/projects/Windows/VC14.20/src/curl.vcxproj.filters
index 4d6341d74..4d6341d74 100644
--- a/projects/Windows/VC10/src/curl.vcxproj.filters
+++ b/projects/Windows/VC14.20/src/curl.vcxproj.filters
diff --git a/projects/Windows/VC14.30/lib/libcurl.vcxproj b/projects/Windows/VC14.30/lib/libcurl.vcxproj
deleted file mode 100644
index 65a601757..000000000
--- a/projects/Windows/VC14.30/lib/libcurl.vcxproj
+++ /dev/null
@@ -1,2675 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="17.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|Win32">
- <Configuration>DLL Debug - DLL wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|x64">
- <Configuration>DLL Debug - DLL wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|Win32">
- <Configuration>DLL Debug - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|x64">
- <Configuration>DLL Debug - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|Win32">
- <Configuration>DLL Debug - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|x64">
- <Configuration>DLL Debug - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug|Win32">
- <Configuration>DLL Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug|x64">
- <Configuration>DLL Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL wolfSSL|Win32">
- <Configuration>DLL Release - DLL wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL wolfSSL|x64">
- <Configuration>DLL Release - DLL wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL|Win32">
- <Configuration>DLL Release - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL|x64">
- <Configuration>DLL Release - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|Win32">
- <Configuration>DLL Release - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|x64">
- <Configuration>DLL Release - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release|Win32">
- <Configuration>DLL Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release|x64">
- <Configuration>DLL Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|Win32">
- <Configuration>LIB Debug - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|x64">
- <Configuration>LIB Debug - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|Win32">
- <Configuration>LIB Debug - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|x64">
- <Configuration>LIB Debug - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|Win32">
- <Configuration>LIB Debug - LIB wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|x64">
- <Configuration>LIB Debug - LIB wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32">
- <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|x64">
- <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|Win32">
- <Configuration>LIB Debug - LIB OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|x64">
- <Configuration>LIB Debug - LIB OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug|Win32">
- <Configuration>LIB Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug|x64">
- <Configuration>LIB Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL|Win32">
- <Configuration>LIB Release - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL|x64">
- <Configuration>LIB Release - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|Win32">
- <Configuration>LIB Release - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|x64">
- <Configuration>LIB Release - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB wolfSSL|Win32">
- <Configuration>LIB Release - LIB wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB wolfSSL|x64">
- <Configuration>LIB Release - LIB wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|Win32">
- <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|x64">
- <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL|Win32">
- <Configuration>LIB Release - LIB OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL|x64">
- <Configuration>LIB Release - LIB OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release|Win32">
- <Configuration>LIB Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release|x64">
- <Configuration>LIB Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}</ProjectGuid>
- <RootNamespace>libcurl</RootNamespace>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)d</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win32\VC14.30\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win64\VC14.30\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win32\VC14.30\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win64\VC14.30\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC14.30\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC14.30\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC14.30\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC14.30\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC14.30\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC14.30\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC14.30\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC14.30\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC14.30\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC14.30\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC14.30\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC14.30\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\..\..\lib\altsvc.c" />
- <ClCompile Include="..\..\..\..\lib\amigaos.c" />
- <ClCompile Include="..\..\..\..\lib\asyn-ares.c" />
- <ClCompile Include="..\..\..\..\lib\asyn-thread.c" />
- <ClCompile Include="..\..\..\..\lib\base64.c" />
- <ClCompile Include="..\..\..\..\lib\bufref.c" />
- <ClCompile Include="..\..\..\..\lib\c-hyper.c" />
- <ClCompile Include="..\..\..\..\lib\conncache.c" />
- <ClCompile Include="..\..\..\..\lib\connect.c" />
- <ClCompile Include="..\..\..\..\lib\content_encoding.c" />
- <ClCompile Include="..\..\..\..\lib\cookie.c" />
- <ClCompile Include="..\..\..\..\lib\curl_addrinfo.c" />
- <ClCompile Include="..\..\..\..\lib\curl_des.c" />
- <ClCompile Include="..\..\..\..\lib\curl_endian.c" />
- <ClCompile Include="..\..\..\..\lib\curl_fnmatch.c" />
- <ClCompile Include="..\..\..\..\lib\curl_gethostname.c" />
- <ClCompile Include="..\..\..\..\lib\curl_get_line.c" />
- <ClCompile Include="..\..\..\..\lib\curl_gssapi.c" />
- <ClCompile Include="..\..\..\..\lib\curl_memrchr.c" />
- <ClCompile Include="..\..\..\..\lib\curl_multibyte.c" />
- <ClCompile Include="..\..\..\..\lib\curl_ntlm_core.c" />
- <ClCompile Include="..\..\..\..\lib\curl_ntlm_wb.c" />
- <ClCompile Include="..\..\..\..\lib\curl_path.c" />
- <ClCompile Include="..\..\..\..\lib\curl_range.c" />
- <ClCompile Include="..\..\..\..\lib\curl_rtmp.c" />
- <ClCompile Include="..\..\..\..\lib\curl_sasl.c" />
- <ClCompile Include="..\..\..\..\lib\curl_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\curl_threads.c" />
- <ClCompile Include="..\..\..\..\lib\dict.c" />
- <ClCompile Include="..\..\..\..\lib\doh.c" />
- <ClCompile Include="..\..\..\..\lib\dynbuf.c" />
- <ClCompile Include="..\..\..\..\lib\easy.c" />
- <ClCompile Include="..\..\..\..\lib\easygetopt.c" />
- <ClCompile Include="..\..\..\..\lib\easyoptions.c" />
- <ClCompile Include="..\..\..\..\lib\escape.c" />
- <ClCompile Include="..\..\..\..\lib\file.c" />
- <ClCompile Include="..\..\..\..\lib\fileinfo.c" />
- <ClCompile Include="..\..\..\..\lib\fopen.c" />
- <ClCompile Include="..\..\..\..\lib\formdata.c" />
- <ClCompile Include="..\..\..\..\lib\ftp.c" />
- <ClCompile Include="..\..\..\..\lib\ftplistparser.c" />
- <ClCompile Include="..\..\..\..\lib\getenv.c" />
- <ClCompile Include="..\..\..\..\lib\getinfo.c" />
- <ClCompile Include="..\..\..\..\lib\gopher.c" />
- <ClCompile Include="..\..\..\..\lib\h2h3.c" />
- <ClCompile Include="..\..\..\..\lib\hash.c" />
- <ClCompile Include="..\..\..\..\lib\headers.c" />
- <ClCompile Include="..\..\..\..\lib\hmac.c" />
- <ClCompile Include="..\..\..\..\lib\hostasyn.c" />
- <ClCompile Include="..\..\..\..\lib\hostip4.c" />
- <ClCompile Include="..\..\..\..\lib\hostip6.c" />
- <ClCompile Include="..\..\..\..\lib\hostip.c" />
- <ClCompile Include="..\..\..\..\lib\hostsyn.c" />
- <ClCompile Include="..\..\..\..\lib\hsts.c" />
- <ClCompile Include="..\..\..\..\lib\http2.c" />
- <ClCompile Include="..\..\..\..\lib\http_aws_sigv4.c" />
- <ClCompile Include="..\..\..\..\lib\http.c" />
- <ClCompile Include="..\..\..\..\lib\http_chunks.c" />
- <ClCompile Include="..\..\..\..\lib\http_digest.c" />
- <ClCompile Include="..\..\..\..\lib\http_negotiate.c" />
- <ClCompile Include="..\..\..\..\lib\http_ntlm.c" />
- <ClCompile Include="..\..\..\..\lib\http_proxy.c" />
- <ClCompile Include="..\..\..\..\lib\idn_win32.c" />
- <ClCompile Include="..\..\..\..\lib\if2ip.c" />
- <ClCompile Include="..\..\..\..\lib\imap.c" />
- <ClCompile Include="..\..\..\..\lib\inet_ntop.c" />
- <ClCompile Include="..\..\..\..\lib\inet_pton.c" />
- <ClCompile Include="..\..\..\..\lib\krb5.c" />
- <ClCompile Include="..\..\..\..\lib\ldap.c" />
- <ClCompile Include="..\..\..\..\lib\llist.c" />
- <ClCompile Include="..\..\..\..\lib\md4.c" />
- <ClCompile Include="..\..\..\..\lib\md5.c" />
- <ClCompile Include="..\..\..\..\lib\memdebug.c" />
- <ClCompile Include="..\..\..\..\lib\mime.c" />
- <ClCompile Include="..\..\..\..\lib\mprintf.c" />
- <ClCompile Include="..\..\..\..\lib\mqtt.c" />
- <ClCompile Include="..\..\..\..\lib\multi.c" />
- <ClCompile Include="..\..\..\..\lib\netrc.c" />
- <ClCompile Include="..\..\..\..\lib\nonblock.c" />
- <ClCompile Include="..\..\..\..\lib\noproxy.c" />
- <ClCompile Include="..\..\..\..\lib\openldap.c" />
- <ClCompile Include="..\..\..\..\lib\parsedate.c" />
- <ClCompile Include="..\..\..\..\lib\pingpong.c" />
- <ClCompile Include="..\..\..\..\lib\pop3.c" />
- <ClCompile Include="..\..\..\..\lib\progress.c" />
- <ClCompile Include="..\..\..\..\lib\psl.c" />
- <ClCompile Include="..\..\..\..\lib\rand.c" />
- <ClCompile Include="..\..\..\..\lib\rename.c" />
- <ClCompile Include="..\..\..\..\lib\rtsp.c" />
- <ClCompile Include="..\..\..\..\lib\select.c" />
- <ClCompile Include="..\..\..\..\lib\sendf.c" />
- <ClCompile Include="..\..\..\..\lib\setopt.c" />
- <ClCompile Include="..\..\..\..\lib\sha256.c" />
- <ClCompile Include="..\..\..\..\lib\share.c" />
- <ClCompile Include="..\..\..\..\lib\slist.c" />
- <ClCompile Include="..\..\..\..\lib\smb.c" />
- <ClCompile Include="..\..\..\..\lib\smtp.c" />
- <ClCompile Include="..\..\..\..\lib\socketpair.c" />
- <ClCompile Include="..\..\..\..\lib\socks.c" />
- <ClCompile Include="..\..\..\..\lib\socks_gssapi.c" />
- <ClCompile Include="..\..\..\..\lib\socks_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\speedcheck.c" />
- <ClCompile Include="..\..\..\..\lib\splay.c" />
- <ClCompile Include="..\..\..\..\lib\strcase.c" />
- <ClCompile Include="..\..\..\..\lib\strdup.c" />
- <ClCompile Include="..\..\..\..\lib\strerror.c" />
- <ClCompile Include="..\..\..\..\lib\strtok.c" />
- <ClCompile Include="..\..\..\..\lib\strtoofft.c" />
- <ClCompile Include="..\..\..\..\lib\system_win32.c" />
- <ClCompile Include="..\..\..\..\lib\telnet.c" />
- <ClCompile Include="..\..\..\..\lib\tftp.c" />
- <ClCompile Include="..\..\..\..\lib\timediff.c" />
- <ClCompile Include="..\..\..\..\lib\timeval.c" />
- <ClCompile Include="..\..\..\..\lib\transfer.c" />
- <ClCompile Include="..\..\..\..\lib\urlapi.c" />
- <ClCompile Include="..\..\..\..\lib\url.c" />
- <ClCompile Include="..\..\..\..\lib\version.c" />
- <ClCompile Include="..\..\..\..\lib\version_win32.c" />
- <ClCompile Include="..\..\..\..\lib\warnless.c" />
- <ClCompile Include="..\..\..\..\lib\wildcard.c" />
- <ClCompile Include="..\..\..\..\lib\ws.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\cleartext.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\cram.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\digest.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\digest_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\gsasl.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\krb5_gssapi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\krb5_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\ntlm.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\ntlm_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\oauth2.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\spnego_gssapi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\spnego_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\vauth.c" />
- <ClCompile Include="..\..\..\..\lib\vquic\msh3.c" />
- <ClCompile Include="..\..\..\..\lib\vquic\ngtcp2.c" />
- <ClCompile Include="..\..\..\..\lib\vquic\quiche.c" />
- <ClCompile Include="..\..\..\..\lib\vquic\vquic.c" />
- <ClCompile Include="..\..\..\..\lib\vssh\libssh2.c" />
- <ClCompile Include="..\..\..\..\lib\vssh\libssh.c" />
- <ClCompile Include="..\..\..\..\lib\vssh\wolfssh.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\bearssl.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\gskit.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\gtls.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\hostcheck.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\keylog.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\mbedtls.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\mbedtls_threadlock.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\nss.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\openssl.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\rustls.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\schannel.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\schannel_verify.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\sectransp.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\vtls.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\wolfssl.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\x509asn1.c" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\..\..\..\lib\altsvc.h" />
- <ClInclude Include="..\..\..\..\lib\amigaos.h" />
- <ClInclude Include="..\..\..\..\lib\arpa_telnet.h" />
- <ClInclude Include="..\..\..\..\lib\asyn.h" />
- <ClInclude Include="..\..\..\..\lib\bufref.h" />
- <ClInclude Include="..\..\..\..\lib\c-hyper.h" />
- <ClInclude Include="..\..\..\..\lib\config-win32.h" />
- <ClInclude Include="..\..\..\..\lib\conncache.h" />
- <ClInclude Include="..\..\..\..\lib\connect.h" />
- <ClInclude Include="..\..\..\..\lib\content_encoding.h" />
- <ClInclude Include="..\..\..\..\lib\cookie.h" />
- <ClInclude Include="..\..\..\..\lib\curl_addrinfo.h" />
- <ClInclude Include="..\..\..\..\lib\curl_base64.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ctype.h" />
- <ClInclude Include="..\..\..\..\lib\curl_des.h" />
- <ClInclude Include="..\..\..\..\lib\curl_endian.h" />
- <ClInclude Include="..\..\..\..\lib\curl_fnmatch.h" />
- <ClInclude Include="..\..\..\..\lib\curl_gethostname.h" />
- <ClInclude Include="..\..\..\..\lib\curl_get_line.h" />
- <ClInclude Include="..\..\..\..\lib\curl_gssapi.h" />
- <ClInclude Include="..\..\..\..\lib\curl_hmac.h" />
- <ClInclude Include="..\..\..\..\lib\curl_krb5.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ldap.h" />
- <ClInclude Include="..\..\..\..\lib\curl_md4.h" />
- <ClInclude Include="..\..\..\..\lib\curl_md5.h" />
- <ClInclude Include="..\..\..\..\lib\curl_memory.h" />
- <ClInclude Include="..\..\..\..\lib\curl_memrchr.h" />
- <ClInclude Include="..\..\..\..\lib\curl_multibyte.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ntlm_core.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ntlm_wb.h" />
- <ClInclude Include="..\..\..\..\lib\curl_path.h" />
- <ClInclude Include="..\..\..\..\lib\curl_printf.h" />
- <ClInclude Include="..\..\..\..\lib\curl_range.h" />
- <ClInclude Include="..\..\..\..\lib\curl_rtmp.h" />
- <ClInclude Include="..\..\..\..\lib\curl_sasl.h" />
- <ClInclude Include="..\..\..\..\lib\curl_setup.h" />
- <ClInclude Include="..\..\..\..\lib\curl_setup_once.h" />
- <ClInclude Include="..\..\..\..\lib\curl_sha256.h" />
- <ClInclude Include="..\..\..\..\lib\curl_sspi.h" />
- <ClInclude Include="..\..\..\..\lib\curl_threads.h" />
- <ClInclude Include="..\..\..\..\lib\curlx.h" />
- <ClInclude Include="..\..\..\..\lib\dict.h" />
- <ClInclude Include="..\..\..\..\lib\doh.h" />
- <ClInclude Include="..\..\..\..\lib\dynbuf.h" />
- <ClInclude Include="..\..\..\..\lib\easyif.h" />
- <ClInclude Include="..\..\..\..\lib\easy_lock.h" />
- <ClInclude Include="..\..\..\..\lib\easyoptions.h" />
- <ClInclude Include="..\..\..\..\lib\escape.h" />
- <ClInclude Include="..\..\..\..\lib\file.h" />
- <ClInclude Include="..\..\..\..\lib\fileinfo.h" />
- <ClInclude Include="..\..\..\..\lib\fopen.h" />
- <ClInclude Include="..\..\..\..\lib\formdata.h" />
- <ClInclude Include="..\..\..\..\lib\ftp.h" />
- <ClInclude Include="..\..\..\..\lib\ftplistparser.h" />
- <ClInclude Include="..\..\..\..\lib\functypes.h" />
- <ClInclude Include="..\..\..\..\lib\getinfo.h" />
- <ClInclude Include="..\..\..\..\lib\gopher.h" />
- <ClInclude Include="..\..\..\..\lib\h2h3.h" />
- <ClInclude Include="..\..\..\..\lib\hash.h" />
- <ClInclude Include="..\..\..\..\lib\headers.h" />
- <ClInclude Include="..\..\..\..\lib\hostip.h" />
- <ClInclude Include="..\..\..\..\lib\hsts.h" />
- <ClInclude Include="..\..\..\..\lib\http2.h" />
- <ClInclude Include="..\..\..\..\lib\http_aws_sigv4.h" />
- <ClInclude Include="..\..\..\..\lib\http_chunks.h" />
- <ClInclude Include="..\..\..\..\lib\http_digest.h" />
- <ClInclude Include="..\..\..\..\lib\http.h" />
- <ClInclude Include="..\..\..\..\lib\http_negotiate.h" />
- <ClInclude Include="..\..\..\..\lib\http_ntlm.h" />
- <ClInclude Include="..\..\..\..\lib\http_proxy.h" />
- <ClInclude Include="..\..\..\..\lib\if2ip.h" />
- <ClInclude Include="..\..\..\..\lib\imap.h" />
- <ClInclude Include="..\..\..\..\lib\inet_ntop.h" />
- <ClInclude Include="..\..\..\..\lib\inet_pton.h" />
- <ClInclude Include="..\..\..\..\lib\llist.h" />
- <ClInclude Include="..\..\..\..\lib\memdebug.h" />
- <ClInclude Include="..\..\..\..\lib\mime.h" />
- <ClInclude Include="..\..\..\..\lib\mqtt.h" />
- <ClInclude Include="..\..\..\..\lib\multihandle.h" />
- <ClInclude Include="..\..\..\..\lib\multiif.h" />
- <ClInclude Include="..\..\..\..\lib\netrc.h" />
- <ClInclude Include="..\..\..\..\lib\nonblock.h" />
- <ClInclude Include="..\..\..\..\lib\noproxy.h" />
- <ClInclude Include="..\..\..\..\lib\parsedate.h" />
- <ClInclude Include="..\..\..\..\lib\pingpong.h" />
- <ClInclude Include="..\..\..\..\lib\pop3.h" />
- <ClInclude Include="..\..\..\..\lib\progress.h" />
- <ClInclude Include="..\..\..\..\lib\psl.h" />
- <ClInclude Include="..\..\..\..\lib\quic.h" />
- <ClInclude Include="..\..\..\..\lib\rand.h" />
- <ClInclude Include="..\..\..\..\lib\rename.h" />
- <ClInclude Include="..\..\..\..\lib\rtsp.h" />
- <ClInclude Include="..\..\..\..\lib\select.h" />
- <ClInclude Include="..\..\..\..\lib\sendf.h" />
- <ClInclude Include="..\..\..\..\lib\setopt.h" />
- <ClInclude Include="..\..\..\..\lib\setup-vms.h" />
- <ClInclude Include="..\..\..\..\lib\share.h" />
- <ClInclude Include="..\..\..\..\lib\sigpipe.h" />
- <ClInclude Include="..\..\..\..\lib\slist.h" />
- <ClInclude Include="..\..\..\..\lib\smb.h" />
- <ClInclude Include="..\..\..\..\lib\smtp.h" />
- <ClInclude Include="..\..\..\..\lib\sockaddr.h" />
- <ClInclude Include="..\..\..\..\lib\socketpair.h" />
- <ClInclude Include="..\..\..\..\lib\socks.h" />
- <ClInclude Include="..\..\..\..\lib\speedcheck.h" />
- <ClInclude Include="..\..\..\..\lib\splay.h" />
- <ClInclude Include="..\..\..\..\lib\strcase.h" />
- <ClInclude Include="..\..\..\..\lib\strdup.h" />
- <ClInclude Include="..\..\..\..\lib\strerror.h" />
- <ClInclude Include="..\..\..\..\lib\strtok.h" />
- <ClInclude Include="..\..\..\..\lib\strtoofft.h" />
- <ClInclude Include="..\..\..\..\lib\system_win32.h" />
- <ClInclude Include="..\..\..\..\lib\telnet.h" />
- <ClInclude Include="..\..\..\..\lib\tftp.h" />
- <ClInclude Include="..\..\..\..\lib\timediff.h" />
- <ClInclude Include="..\..\..\..\lib\timeval.h" />
- <ClInclude Include="..\..\..\..\lib\transfer.h" />
- <ClInclude Include="..\..\..\..\lib\urlapi-int.h" />
- <ClInclude Include="..\..\..\..\lib\urldata.h" />
- <ClInclude Include="..\..\..\..\lib\url.h" />
- <ClInclude Include="..\..\..\..\lib\version_win32.h" />
- <ClInclude Include="..\..\..\..\lib\warnless.h" />
- <ClInclude Include="..\..\..\..\lib\wildcard.h" />
- <ClInclude Include="..\..\..\..\lib\ws.h" />
- <ClInclude Include="..\..\..\..\lib\vauth\digest.h" />
- <ClInclude Include="..\..\..\..\lib\vauth\ntlm.h" />
- <ClInclude Include="..\..\..\..\lib\vauth\vauth.h" />
- <ClInclude Include="..\..\..\..\lib\vquic\msh3.h" />
- <ClInclude Include="..\..\..\..\lib\vquic\ngtcp2.h" />
- <ClInclude Include="..\..\..\..\lib\vquic\quiche.h" />
- <ClInclude Include="..\..\..\..\lib\vquic\vquic.h" />
- <ClInclude Include="..\..\..\..\lib\vssh\ssh.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\bearssl.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\gskit.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\gtls.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\hostcheck.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\keylog.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\mbedtls.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\mbedtls_threadlock.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\nssg.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\openssl.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\rustls.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\schannel.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\sectransp.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\vtls.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\wolfssl.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\x509asn1.h" />
- </ItemGroup>
- <ItemGroup>
- <ResourceCompile Include="..\..\..\..\lib\libcurl.rc" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project>
diff --git a/projects/Windows/VC14.30/src/curl.sln b/projects/Windows/VC14.30/src/curl.sln
index 16d22965f..ce5aa2c6f 100644
--- a/projects/Windows/VC14.30/src/curl.sln
+++ b/projects/Windows/VC14.30/src/curl.sln
@@ -1,5 +1,5 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
+# Visual Studio 17
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curl", "curl.vcxproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
EndProject
Global
diff --git a/projects/Windows/VC14.30/src/curl.vcxproj b/projects/Windows/VC14.30/src/curl.vcxproj
deleted file mode 100644
index 8da28ab77..000000000
--- a/projects/Windows/VC14.30/src/curl.vcxproj
+++ /dev/null
@@ -1,2766 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="17.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|Win32">
- <Configuration>DLL Debug - DLL wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|x64">
- <Configuration>DLL Debug - DLL wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|Win32">
- <Configuration>DLL Debug - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|x64">
- <Configuration>DLL Debug - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|Win32">
- <Configuration>DLL Debug - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|x64">
- <Configuration>DLL Debug - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug|Win32">
- <Configuration>DLL Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug|x64">
- <Configuration>DLL Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL wolfSSL|Win32">
- <Configuration>DLL Release - DLL wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL wolfSSL|x64">
- <Configuration>DLL Release - DLL wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL|Win32">
- <Configuration>DLL Release - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL|x64">
- <Configuration>DLL Release - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|Win32">
- <Configuration>DLL Release - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|x64">
- <Configuration>DLL Release - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release|Win32">
- <Configuration>DLL Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release|x64">
- <Configuration>DLL Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|Win32">
- <Configuration>LIB Debug - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|x64">
- <Configuration>LIB Debug - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|Win32">
- <Configuration>LIB Debug - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|x64">
- <Configuration>LIB Debug - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|Win32">
- <Configuration>LIB Debug - LIB wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|x64">
- <Configuration>LIB Debug - LIB wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32">
- <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|x64">
- <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|Win32">
- <Configuration>LIB Debug - LIB OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|x64">
- <Configuration>LIB Debug - LIB OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug|Win32">
- <Configuration>LIB Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug|x64">
- <Configuration>LIB Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL|Win32">
- <Configuration>LIB Release - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL|x64">
- <Configuration>LIB Release - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|Win32">
- <Configuration>LIB Release - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|x64">
- <Configuration>LIB Release - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB wolfSSL|Win32">
- <Configuration>LIB Release - LIB wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB wolfSSL|x64">
- <Configuration>LIB Release - LIB wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|Win32">
- <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|x64">
- <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL|Win32">
- <Configuration>LIB Release - LIB OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL|x64">
- <Configuration>LIB Release - LIB OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release|Win32">
- <Configuration>LIB Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release|x64">
- <Configuration>LIB Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{5228E9CE-A216-422F-A5E6-58E95E2DD71D}</ProjectGuid>
- <RootNamespace>curl</RootNamespace>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v143</PlatformToolset>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14.30\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(ProjectName)</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC14.30\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC14.30\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC14.30\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC14.30\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.30\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.30\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.30\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.30\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.30\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC14.30\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.30\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC14.30\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.30\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC14.30\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.30\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC14.30\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.30\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.30\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.30\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.30\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.30\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC14.30\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.30\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC14.30\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.30\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC14.30\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libssh2.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.30\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC14.30\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\..\..\lib\curl_multibyte.c" />
- <ClCompile Include="..\..\..\..\lib\dynbuf.c" />
- <ClCompile Include="..\..\..\..\lib\nonblock.c" />
- <ClCompile Include="..\..\..\..\lib\strtoofft.c" />
- <ClCompile Include="..\..\..\..\lib\timediff.c" />
- <ClCompile Include="..\..\..\..\lib\version_win32.c" />
- <ClCompile Include="..\..\..\..\lib\warnless.c" />
- <ClCompile Include="..\..\..\..\src\slist_wc.c" />
- <ClCompile Include="..\..\..\..\src\tool_binmode.c" />
- <ClCompile Include="..\..\..\..\src\tool_bname.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_dbg.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_hdr.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_prg.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_rea.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_see.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_wrt.c" />
- <ClCompile Include="..\..\..\..\src\tool_cfgable.c" />
- <ClCompile Include="..\..\..\..\src\tool_dirhie.c" />
- <ClCompile Include="..\..\..\..\src\tool_doswin.c" />
- <ClCompile Include="..\..\..\..\src\tool_easysrc.c" />
- <ClCompile Include="..\..\..\..\src\tool_filetime.c" />
- <ClCompile Include="..\..\..\..\src\tool_findfile.c" />
- <ClCompile Include="..\..\..\..\src\tool_formparse.c" />
- <ClCompile Include="..\..\..\..\src\tool_getparam.c" />
- <ClCompile Include="..\..\..\..\src\tool_getpass.c" />
- <ClCompile Include="..\..\..\..\src\tool_help.c" />
- <ClCompile Include="..\..\..\..\src\tool_helpers.c" />
- <ClCompile Include="..\..\..\..\src\tool_hugehelp.c" />
- <ClCompile Include="..\..\..\..\src\tool_libinfo.c" />
- <ClCompile Include="..\..\..\..\src\tool_listhelp.c" />
- <ClCompile Include="..\..\..\..\src\tool_main.c" />
- <ClCompile Include="..\..\..\..\src\tool_msgs.c" />
- <ClCompile Include="..\..\..\..\src\tool_operate.c" />
- <ClCompile Include="..\..\..\..\src\tool_operhlp.c" />
- <ClCompile Include="..\..\..\..\src\tool_panykey.c" />
- <ClCompile Include="..\..\..\..\src\tool_paramhlp.c" />
- <ClCompile Include="..\..\..\..\src\tool_parsecfg.c" />
- <ClCompile Include="..\..\..\..\src\tool_progress.c" />
- <ClCompile Include="..\..\..\..\src\tool_setopt.c" />
- <ClCompile Include="..\..\..\..\src\tool_sleep.c" />
- <ClCompile Include="..\..\..\..\src\tool_strdup.c" />
- <ClCompile Include="..\..\..\..\src\tool_urlglob.c" />
- <ClCompile Include="..\..\..\..\src\tool_util.c" />
- <ClCompile Include="..\..\..\..\src\tool_vms.c" />
- <ClCompile Include="..\..\..\..\src\tool_writeout.c" />
- <ClCompile Include="..\..\..\..\src\tool_writeout_json.c" />
- <ClCompile Include="..\..\..\..\src\tool_xattr.c" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\..\..\..\lib\config-win32.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ctype.h" />
- <ClInclude Include="..\..\..\..\lib\curl_multibyte.h" />
- <ClInclude Include="..\..\..\..\lib\curl_setup.h" />
- <ClInclude Include="..\..\..\..\lib\dynbuf.h" />
- <ClInclude Include="..\..\..\..\lib\nonblock.h" />
- <ClInclude Include="..\..\..\..\lib\strtoofft.h" />
- <ClInclude Include="..\..\..\..\lib\timediff.h" />
- <ClInclude Include="..\..\..\..\lib\version_win32.h" />
- <ClInclude Include="..\..\..\..\lib\warnless.h" />
- <ClInclude Include="..\..\..\..\src\slist_wc.h" />
- <ClInclude Include="..\..\..\..\src\tool_binmode.h" />
- <ClInclude Include="..\..\..\..\src\tool_bname.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_dbg.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_hdr.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_prg.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_rea.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_see.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_wrt.h" />
- <ClInclude Include="..\..\..\..\src\tool_cfgable.h" />
- <ClInclude Include="..\..\..\..\src\tool_dirhie.h" />
- <ClInclude Include="..\..\..\..\src\tool_doswin.h" />
- <ClInclude Include="..\..\..\..\src\tool_easysrc.h" />
- <ClInclude Include="..\..\..\..\src\tool_filetime.h" />
- <ClInclude Include="..\..\..\..\src\tool_findfile.h" />
- <ClInclude Include="..\..\..\..\src\tool_formparse.h" />
- <ClInclude Include="..\..\..\..\src\tool_getparam.h" />
- <ClInclude Include="..\..\..\..\src\tool_getpass.h" />
- <ClInclude Include="..\..\..\..\src\tool_helpers.h" />
- <ClInclude Include="..\..\..\..\src\tool_help.h" />
- <ClInclude Include="..\..\..\..\src\tool_hugehelp.h" />
- <ClInclude Include="..\..\..\..\src\tool_libinfo.h" />
- <ClInclude Include="..\..\..\..\src\tool_main.h" />
- <ClInclude Include="..\..\..\..\src\tool_msgs.h" />
- <ClInclude Include="..\..\..\..\src\tool_operate.h" />
- <ClInclude Include="..\..\..\..\src\tool_operhlp.h" />
- <ClInclude Include="..\..\..\..\src\tool_panykey.h" />
- <ClInclude Include="..\..\..\..\src\tool_paramhlp.h" />
- <ClInclude Include="..\..\..\..\src\tool_parsecfg.h" />
- <ClInclude Include="..\..\..\..\src\tool_progress.h" />
- <ClInclude Include="..\..\..\..\src\tool_sdecls.h" />
- <ClInclude Include="..\..\..\..\src\tool_setopt.h" />
- <ClInclude Include="..\..\..\..\src\tool_setup.h" />
- <ClInclude Include="..\..\..\..\src\tool_sleep.h" />
- <ClInclude Include="..\..\..\..\src\tool_strdup.h" />
- <ClInclude Include="..\..\..\..\src\tool_urlglob.h" />
- <ClInclude Include="..\..\..\..\src\tool_util.h" />
- <ClInclude Include="..\..\..\..\src\tool_version.h" />
- <ClInclude Include="..\..\..\..\src\tool_vms.h" />
- <ClInclude Include="..\..\..\..\src\tool_writeout.h" />
- <ClInclude Include="..\..\..\..\src\tool_writeout_json.h" />
- <ClInclude Include="..\..\..\..\src\tool_xattr.h" />
- </ItemGroup>
- <ItemGroup>
- <ResourceCompile Include="..\..\..\..\src\curl.rc" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project>
diff --git a/projects/Windows/VC14/lib/libcurl.vcxproj b/projects/Windows/VC14/lib/libcurl.vcxproj
deleted file mode 100644
index 7f8d052c2..000000000
--- a/projects/Windows/VC14/lib/libcurl.vcxproj
+++ /dev/null
@@ -1,2703 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|Win32">
- <Configuration>DLL Debug - DLL wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|x64">
- <Configuration>DLL Debug - DLL wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|Win32">
- <Configuration>DLL Debug - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|x64">
- <Configuration>DLL Debug - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|Win32">
- <Configuration>DLL Debug - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|x64">
- <Configuration>DLL Debug - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug|Win32">
- <Configuration>DLL Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug|x64">
- <Configuration>DLL Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL wolfSSL|Win32">
- <Configuration>DLL Release - DLL wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL wolfSSL|x64">
- <Configuration>DLL Release - DLL wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL|Win32">
- <Configuration>DLL Release - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL|x64">
- <Configuration>DLL Release - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|Win32">
- <Configuration>DLL Release - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|x64">
- <Configuration>DLL Release - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release|Win32">
- <Configuration>DLL Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release|x64">
- <Configuration>DLL Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|Win32">
- <Configuration>LIB Debug - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|x64">
- <Configuration>LIB Debug - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|Win32">
- <Configuration>LIB Debug - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|x64">
- <Configuration>LIB Debug - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|Win32">
- <Configuration>LIB Debug - LIB wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|x64">
- <Configuration>LIB Debug - LIB wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32">
- <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|x64">
- <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|Win32">
- <Configuration>LIB Debug - LIB OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|x64">
- <Configuration>LIB Debug - LIB OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug|Win32">
- <Configuration>LIB Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug|x64">
- <Configuration>LIB Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL|Win32">
- <Configuration>LIB Release - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL|x64">
- <Configuration>LIB Release - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|Win32">
- <Configuration>LIB Release - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|x64">
- <Configuration>LIB Release - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB wolfSSL|Win32">
- <Configuration>LIB Release - LIB wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB wolfSSL|x64">
- <Configuration>LIB Release - LIB wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|Win32">
- <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|x64">
- <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL|Win32">
- <Configuration>LIB Release - LIB OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL|x64">
- <Configuration>LIB Release - LIB OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release|Win32">
- <Configuration>LIB Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release|x64">
- <Configuration>LIB Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}</ProjectGuid>
- <RootNamespace>libcurl</RootNamespace>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>StaticLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>DynamicLibrary</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)lib\</IntDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)lib\</IntDir>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)d</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win32\VC14\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win64\VC14\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win32\VC14\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win64\VC14\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- <DisableSpecificWarnings>4214</DisableSpecificWarnings>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC14\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC14\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC14\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC14\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC14\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC14\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC14\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC14\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>Win32</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC14\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC14\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MkTypLibCompatible>true</MkTypLibCompatible>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC14\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC14\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX86</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- </ResourceCompile>
- <Lib>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <TargetMachine>MachineX64</TargetMachine>
- </Lib>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\..\..\lib\altsvc.c" />
- <ClCompile Include="..\..\..\..\lib\amigaos.c" />
- <ClCompile Include="..\..\..\..\lib\asyn-ares.c" />
- <ClCompile Include="..\..\..\..\lib\asyn-thread.c" />
- <ClCompile Include="..\..\..\..\lib\base64.c" />
- <ClCompile Include="..\..\..\..\lib\bufref.c" />
- <ClCompile Include="..\..\..\..\lib\c-hyper.c" />
- <ClCompile Include="..\..\..\..\lib\conncache.c" />
- <ClCompile Include="..\..\..\..\lib\connect.c" />
- <ClCompile Include="..\..\..\..\lib\content_encoding.c" />
- <ClCompile Include="..\..\..\..\lib\cookie.c" />
- <ClCompile Include="..\..\..\..\lib\curl_addrinfo.c" />
- <ClCompile Include="..\..\..\..\lib\curl_des.c" />
- <ClCompile Include="..\..\..\..\lib\curl_endian.c" />
- <ClCompile Include="..\..\..\..\lib\curl_fnmatch.c" />
- <ClCompile Include="..\..\..\..\lib\curl_gethostname.c" />
- <ClCompile Include="..\..\..\..\lib\curl_get_line.c" />
- <ClCompile Include="..\..\..\..\lib\curl_gssapi.c" />
- <ClCompile Include="..\..\..\..\lib\curl_memrchr.c" />
- <ClCompile Include="..\..\..\..\lib\curl_multibyte.c" />
- <ClCompile Include="..\..\..\..\lib\curl_ntlm_core.c" />
- <ClCompile Include="..\..\..\..\lib\curl_ntlm_wb.c" />
- <ClCompile Include="..\..\..\..\lib\curl_path.c" />
- <ClCompile Include="..\..\..\..\lib\curl_range.c" />
- <ClCompile Include="..\..\..\..\lib\curl_rtmp.c" />
- <ClCompile Include="..\..\..\..\lib\curl_sasl.c" />
- <ClCompile Include="..\..\..\..\lib\curl_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\curl_threads.c" />
- <ClCompile Include="..\..\..\..\lib\dict.c" />
- <ClCompile Include="..\..\..\..\lib\doh.c" />
- <ClCompile Include="..\..\..\..\lib\dynbuf.c" />
- <ClCompile Include="..\..\..\..\lib\easy.c" />
- <ClCompile Include="..\..\..\..\lib\easygetopt.c" />
- <ClCompile Include="..\..\..\..\lib\easyoptions.c" />
- <ClCompile Include="..\..\..\..\lib\escape.c" />
- <ClCompile Include="..\..\..\..\lib\file.c" />
- <ClCompile Include="..\..\..\..\lib\fileinfo.c" />
- <ClCompile Include="..\..\..\..\lib\fopen.c" />
- <ClCompile Include="..\..\..\..\lib\formdata.c" />
- <ClCompile Include="..\..\..\..\lib\ftp.c" />
- <ClCompile Include="..\..\..\..\lib\ftplistparser.c" />
- <ClCompile Include="..\..\..\..\lib\getenv.c" />
- <ClCompile Include="..\..\..\..\lib\getinfo.c" />
- <ClCompile Include="..\..\..\..\lib\gopher.c" />
- <ClCompile Include="..\..\..\..\lib\h2h3.c" />
- <ClCompile Include="..\..\..\..\lib\hash.c" />
- <ClCompile Include="..\..\..\..\lib\headers.c" />
- <ClCompile Include="..\..\..\..\lib\hmac.c" />
- <ClCompile Include="..\..\..\..\lib\hostasyn.c" />
- <ClCompile Include="..\..\..\..\lib\hostip4.c" />
- <ClCompile Include="..\..\..\..\lib\hostip6.c" />
- <ClCompile Include="..\..\..\..\lib\hostip.c" />
- <ClCompile Include="..\..\..\..\lib\hostsyn.c" />
- <ClCompile Include="..\..\..\..\lib\hsts.c" />
- <ClCompile Include="..\..\..\..\lib\http2.c" />
- <ClCompile Include="..\..\..\..\lib\http_aws_sigv4.c" />
- <ClCompile Include="..\..\..\..\lib\http.c" />
- <ClCompile Include="..\..\..\..\lib\http_chunks.c" />
- <ClCompile Include="..\..\..\..\lib\http_digest.c" />
- <ClCompile Include="..\..\..\..\lib\http_negotiate.c" />
- <ClCompile Include="..\..\..\..\lib\http_ntlm.c" />
- <ClCompile Include="..\..\..\..\lib\http_proxy.c" />
- <ClCompile Include="..\..\..\..\lib\idn_win32.c" />
- <ClCompile Include="..\..\..\..\lib\if2ip.c" />
- <ClCompile Include="..\..\..\..\lib\imap.c" />
- <ClCompile Include="..\..\..\..\lib\inet_ntop.c" />
- <ClCompile Include="..\..\..\..\lib\inet_pton.c" />
- <ClCompile Include="..\..\..\..\lib\krb5.c" />
- <ClCompile Include="..\..\..\..\lib\ldap.c" />
- <ClCompile Include="..\..\..\..\lib\llist.c" />
- <ClCompile Include="..\..\..\..\lib\md4.c" />
- <ClCompile Include="..\..\..\..\lib\md5.c" />
- <ClCompile Include="..\..\..\..\lib\memdebug.c" />
- <ClCompile Include="..\..\..\..\lib\mime.c" />
- <ClCompile Include="..\..\..\..\lib\mprintf.c" />
- <ClCompile Include="..\..\..\..\lib\mqtt.c" />
- <ClCompile Include="..\..\..\..\lib\multi.c" />
- <ClCompile Include="..\..\..\..\lib\netrc.c" />
- <ClCompile Include="..\..\..\..\lib\nonblock.c" />
- <ClCompile Include="..\..\..\..\lib\noproxy.c" />
- <ClCompile Include="..\..\..\..\lib\openldap.c" />
- <ClCompile Include="..\..\..\..\lib\parsedate.c" />
- <ClCompile Include="..\..\..\..\lib\pingpong.c" />
- <ClCompile Include="..\..\..\..\lib\pop3.c" />
- <ClCompile Include="..\..\..\..\lib\progress.c" />
- <ClCompile Include="..\..\..\..\lib\psl.c" />
- <ClCompile Include="..\..\..\..\lib\rand.c" />
- <ClCompile Include="..\..\..\..\lib\rename.c" />
- <ClCompile Include="..\..\..\..\lib\rtsp.c" />
- <ClCompile Include="..\..\..\..\lib\select.c" />
- <ClCompile Include="..\..\..\..\lib\sendf.c" />
- <ClCompile Include="..\..\..\..\lib\setopt.c" />
- <ClCompile Include="..\..\..\..\lib\sha256.c" />
- <ClCompile Include="..\..\..\..\lib\share.c" />
- <ClCompile Include="..\..\..\..\lib\slist.c" />
- <ClCompile Include="..\..\..\..\lib\smb.c" />
- <ClCompile Include="..\..\..\..\lib\smtp.c" />
- <ClCompile Include="..\..\..\..\lib\socketpair.c" />
- <ClCompile Include="..\..\..\..\lib\socks.c" />
- <ClCompile Include="..\..\..\..\lib\socks_gssapi.c" />
- <ClCompile Include="..\..\..\..\lib\socks_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\speedcheck.c" />
- <ClCompile Include="..\..\..\..\lib\splay.c" />
- <ClCompile Include="..\..\..\..\lib\strcase.c" />
- <ClCompile Include="..\..\..\..\lib\strdup.c" />
- <ClCompile Include="..\..\..\..\lib\strerror.c" />
- <ClCompile Include="..\..\..\..\lib\strtok.c" />
- <ClCompile Include="..\..\..\..\lib\strtoofft.c" />
- <ClCompile Include="..\..\..\..\lib\system_win32.c" />
- <ClCompile Include="..\..\..\..\lib\telnet.c" />
- <ClCompile Include="..\..\..\..\lib\tftp.c" />
- <ClCompile Include="..\..\..\..\lib\timediff.c" />
- <ClCompile Include="..\..\..\..\lib\timeval.c" />
- <ClCompile Include="..\..\..\..\lib\transfer.c" />
- <ClCompile Include="..\..\..\..\lib\urlapi.c" />
- <ClCompile Include="..\..\..\..\lib\url.c" />
- <ClCompile Include="..\..\..\..\lib\version.c" />
- <ClCompile Include="..\..\..\..\lib\version_win32.c" />
- <ClCompile Include="..\..\..\..\lib\warnless.c" />
- <ClCompile Include="..\..\..\..\lib\wildcard.c" />
- <ClCompile Include="..\..\..\..\lib\ws.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\cleartext.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\cram.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\digest.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\digest_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\gsasl.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\krb5_gssapi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\krb5_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\ntlm.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\ntlm_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\oauth2.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\spnego_gssapi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\spnego_sspi.c" />
- <ClCompile Include="..\..\..\..\lib\vauth\vauth.c" />
- <ClCompile Include="..\..\..\..\lib\vquic\msh3.c" />
- <ClCompile Include="..\..\..\..\lib\vquic\ngtcp2.c" />
- <ClCompile Include="..\..\..\..\lib\vquic\quiche.c" />
- <ClCompile Include="..\..\..\..\lib\vquic\vquic.c" />
- <ClCompile Include="..\..\..\..\lib\vssh\libssh2.c" />
- <ClCompile Include="..\..\..\..\lib\vssh\libssh.c" />
- <ClCompile Include="..\..\..\..\lib\vssh\wolfssh.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\bearssl.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\gskit.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\gtls.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\hostcheck.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\keylog.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\mbedtls.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\mbedtls_threadlock.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\nss.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\openssl.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\rustls.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\schannel.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\schannel_verify.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\sectransp.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\vtls.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\wolfssl.c" />
- <ClCompile Include="..\..\..\..\lib\vtls\x509asn1.c" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\..\..\..\lib\altsvc.h" />
- <ClInclude Include="..\..\..\..\lib\amigaos.h" />
- <ClInclude Include="..\..\..\..\lib\arpa_telnet.h" />
- <ClInclude Include="..\..\..\..\lib\asyn.h" />
- <ClInclude Include="..\..\..\..\lib\bufref.h" />
- <ClInclude Include="..\..\..\..\lib\c-hyper.h" />
- <ClInclude Include="..\..\..\..\lib\config-win32.h" />
- <ClInclude Include="..\..\..\..\lib\conncache.h" />
- <ClInclude Include="..\..\..\..\lib\connect.h" />
- <ClInclude Include="..\..\..\..\lib\content_encoding.h" />
- <ClInclude Include="..\..\..\..\lib\cookie.h" />
- <ClInclude Include="..\..\..\..\lib\curl_addrinfo.h" />
- <ClInclude Include="..\..\..\..\lib\curl_base64.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ctype.h" />
- <ClInclude Include="..\..\..\..\lib\curl_des.h" />
- <ClInclude Include="..\..\..\..\lib\curl_endian.h" />
- <ClInclude Include="..\..\..\..\lib\curl_fnmatch.h" />
- <ClInclude Include="..\..\..\..\lib\curl_gethostname.h" />
- <ClInclude Include="..\..\..\..\lib\curl_get_line.h" />
- <ClInclude Include="..\..\..\..\lib\curl_gssapi.h" />
- <ClInclude Include="..\..\..\..\lib\curl_hmac.h" />
- <ClInclude Include="..\..\..\..\lib\curl_krb5.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ldap.h" />
- <ClInclude Include="..\..\..\..\lib\curl_md4.h" />
- <ClInclude Include="..\..\..\..\lib\curl_md5.h" />
- <ClInclude Include="..\..\..\..\lib\curl_memory.h" />
- <ClInclude Include="..\..\..\..\lib\curl_memrchr.h" />
- <ClInclude Include="..\..\..\..\lib\curl_multibyte.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ntlm_core.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ntlm_wb.h" />
- <ClInclude Include="..\..\..\..\lib\curl_path.h" />
- <ClInclude Include="..\..\..\..\lib\curl_printf.h" />
- <ClInclude Include="..\..\..\..\lib\curl_range.h" />
- <ClInclude Include="..\..\..\..\lib\curl_rtmp.h" />
- <ClInclude Include="..\..\..\..\lib\curl_sasl.h" />
- <ClInclude Include="..\..\..\..\lib\curl_setup.h" />
- <ClInclude Include="..\..\..\..\lib\curl_setup_once.h" />
- <ClInclude Include="..\..\..\..\lib\curl_sha256.h" />
- <ClInclude Include="..\..\..\..\lib\curl_sspi.h" />
- <ClInclude Include="..\..\..\..\lib\curl_threads.h" />
- <ClInclude Include="..\..\..\..\lib\curlx.h" />
- <ClInclude Include="..\..\..\..\lib\dict.h" />
- <ClInclude Include="..\..\..\..\lib\doh.h" />
- <ClInclude Include="..\..\..\..\lib\dynbuf.h" />
- <ClInclude Include="..\..\..\..\lib\easyif.h" />
- <ClInclude Include="..\..\..\..\lib\easy_lock.h" />
- <ClInclude Include="..\..\..\..\lib\easyoptions.h" />
- <ClInclude Include="..\..\..\..\lib\escape.h" />
- <ClInclude Include="..\..\..\..\lib\file.h" />
- <ClInclude Include="..\..\..\..\lib\fileinfo.h" />
- <ClInclude Include="..\..\..\..\lib\fopen.h" />
- <ClInclude Include="..\..\..\..\lib\formdata.h" />
- <ClInclude Include="..\..\..\..\lib\ftp.h" />
- <ClInclude Include="..\..\..\..\lib\ftplistparser.h" />
- <ClInclude Include="..\..\..\..\lib\functypes.h" />
- <ClInclude Include="..\..\..\..\lib\getinfo.h" />
- <ClInclude Include="..\..\..\..\lib\gopher.h" />
- <ClInclude Include="..\..\..\..\lib\h2h3.h" />
- <ClInclude Include="..\..\..\..\lib\hash.h" />
- <ClInclude Include="..\..\..\..\lib\headers.h" />
- <ClInclude Include="..\..\..\..\lib\hostip.h" />
- <ClInclude Include="..\..\..\..\lib\hsts.h" />
- <ClInclude Include="..\..\..\..\lib\http2.h" />
- <ClInclude Include="..\..\..\..\lib\http_aws_sigv4.h" />
- <ClInclude Include="..\..\..\..\lib\http_chunks.h" />
- <ClInclude Include="..\..\..\..\lib\http_digest.h" />
- <ClInclude Include="..\..\..\..\lib\http.h" />
- <ClInclude Include="..\..\..\..\lib\http_negotiate.h" />
- <ClInclude Include="..\..\..\..\lib\http_ntlm.h" />
- <ClInclude Include="..\..\..\..\lib\http_proxy.h" />
- <ClInclude Include="..\..\..\..\lib\if2ip.h" />
- <ClInclude Include="..\..\..\..\lib\imap.h" />
- <ClInclude Include="..\..\..\..\lib\inet_ntop.h" />
- <ClInclude Include="..\..\..\..\lib\inet_pton.h" />
- <ClInclude Include="..\..\..\..\lib\llist.h" />
- <ClInclude Include="..\..\..\..\lib\memdebug.h" />
- <ClInclude Include="..\..\..\..\lib\mime.h" />
- <ClInclude Include="..\..\..\..\lib\mqtt.h" />
- <ClInclude Include="..\..\..\..\lib\multihandle.h" />
- <ClInclude Include="..\..\..\..\lib\multiif.h" />
- <ClInclude Include="..\..\..\..\lib\netrc.h" />
- <ClInclude Include="..\..\..\..\lib\nonblock.h" />
- <ClInclude Include="..\..\..\..\lib\noproxy.h" />
- <ClInclude Include="..\..\..\..\lib\parsedate.h" />
- <ClInclude Include="..\..\..\..\lib\pingpong.h" />
- <ClInclude Include="..\..\..\..\lib\pop3.h" />
- <ClInclude Include="..\..\..\..\lib\progress.h" />
- <ClInclude Include="..\..\..\..\lib\psl.h" />
- <ClInclude Include="..\..\..\..\lib\quic.h" />
- <ClInclude Include="..\..\..\..\lib\rand.h" />
- <ClInclude Include="..\..\..\..\lib\rename.h" />
- <ClInclude Include="..\..\..\..\lib\rtsp.h" />
- <ClInclude Include="..\..\..\..\lib\select.h" />
- <ClInclude Include="..\..\..\..\lib\sendf.h" />
- <ClInclude Include="..\..\..\..\lib\setopt.h" />
- <ClInclude Include="..\..\..\..\lib\setup-vms.h" />
- <ClInclude Include="..\..\..\..\lib\share.h" />
- <ClInclude Include="..\..\..\..\lib\sigpipe.h" />
- <ClInclude Include="..\..\..\..\lib\slist.h" />
- <ClInclude Include="..\..\..\..\lib\smb.h" />
- <ClInclude Include="..\..\..\..\lib\smtp.h" />
- <ClInclude Include="..\..\..\..\lib\sockaddr.h" />
- <ClInclude Include="..\..\..\..\lib\socketpair.h" />
- <ClInclude Include="..\..\..\..\lib\socks.h" />
- <ClInclude Include="..\..\..\..\lib\speedcheck.h" />
- <ClInclude Include="..\..\..\..\lib\splay.h" />
- <ClInclude Include="..\..\..\..\lib\strcase.h" />
- <ClInclude Include="..\..\..\..\lib\strdup.h" />
- <ClInclude Include="..\..\..\..\lib\strerror.h" />
- <ClInclude Include="..\..\..\..\lib\strtok.h" />
- <ClInclude Include="..\..\..\..\lib\strtoofft.h" />
- <ClInclude Include="..\..\..\..\lib\system_win32.h" />
- <ClInclude Include="..\..\..\..\lib\telnet.h" />
- <ClInclude Include="..\..\..\..\lib\tftp.h" />
- <ClInclude Include="..\..\..\..\lib\timediff.h" />
- <ClInclude Include="..\..\..\..\lib\timeval.h" />
- <ClInclude Include="..\..\..\..\lib\transfer.h" />
- <ClInclude Include="..\..\..\..\lib\urlapi-int.h" />
- <ClInclude Include="..\..\..\..\lib\urldata.h" />
- <ClInclude Include="..\..\..\..\lib\url.h" />
- <ClInclude Include="..\..\..\..\lib\version_win32.h" />
- <ClInclude Include="..\..\..\..\lib\warnless.h" />
- <ClInclude Include="..\..\..\..\lib\wildcard.h" />
- <ClInclude Include="..\..\..\..\lib\ws.h" />
- <ClInclude Include="..\..\..\..\lib\vauth\digest.h" />
- <ClInclude Include="..\..\..\..\lib\vauth\ntlm.h" />
- <ClInclude Include="..\..\..\..\lib\vauth\vauth.h" />
- <ClInclude Include="..\..\..\..\lib\vquic\msh3.h" />
- <ClInclude Include="..\..\..\..\lib\vquic\ngtcp2.h" />
- <ClInclude Include="..\..\..\..\lib\vquic\quiche.h" />
- <ClInclude Include="..\..\..\..\lib\vquic\vquic.h" />
- <ClInclude Include="..\..\..\..\lib\vssh\ssh.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\bearssl.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\gskit.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\gtls.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\hostcheck.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\keylog.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\mbedtls.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\mbedtls_threadlock.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\nssg.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\openssl.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\rustls.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\schannel.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\sectransp.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\vtls.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\wolfssl.h" />
- <ClInclude Include="..\..\..\..\lib\vtls\x509asn1.h" />
- </ItemGroup>
- <ItemGroup>
- <ResourceCompile Include="..\..\..\..\lib\libcurl.rc" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project>
diff --git a/projects/Windows/VC14/src/curl.vcxproj b/projects/Windows/VC14/src/curl.vcxproj
deleted file mode 100644
index aa7ff0236..000000000
--- a/projects/Windows/VC14/src/curl.vcxproj
+++ /dev/null
@@ -1,2794 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <ItemGroup Label="ProjectConfigurations">
- <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|Win32">
- <Configuration>DLL Debug - DLL wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|x64">
- <Configuration>DLL Debug - DLL wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|Win32">
- <Configuration>DLL Debug - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|x64">
- <Configuration>DLL Debug - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|Win32">
- <Configuration>DLL Debug - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|x64">
- <Configuration>DLL Debug - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug|Win32">
- <Configuration>DLL Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Debug|x64">
- <Configuration>DLL Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL wolfSSL|Win32">
- <Configuration>DLL Release - DLL wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL wolfSSL|x64">
- <Configuration>DLL Release - DLL wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL|Win32">
- <Configuration>DLL Release - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL OpenSSL|x64">
- <Configuration>DLL Release - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|Win32">
- <Configuration>DLL Release - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|x64">
- <Configuration>DLL Release - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release|Win32">
- <Configuration>DLL Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="DLL Release|x64">
- <Configuration>DLL Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|Win32">
- <Configuration>LIB Debug - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|x64">
- <Configuration>LIB Debug - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|Win32">
- <Configuration>LIB Debug - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|x64">
- <Configuration>LIB Debug - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|Win32">
- <Configuration>LIB Debug - LIB wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|x64">
- <Configuration>LIB Debug - LIB wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32">
- <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|x64">
- <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|Win32">
- <Configuration>LIB Debug - LIB OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|x64">
- <Configuration>LIB Debug - LIB OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug|Win32">
- <Configuration>LIB Debug</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Debug|x64">
- <Configuration>LIB Debug</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|Win32">
- <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|x64">
- <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL|Win32">
- <Configuration>LIB Release - DLL OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL OpenSSL|x64">
- <Configuration>LIB Release - DLL OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|Win32">
- <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|x64">
- <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|Win32">
- <Configuration>LIB Release - DLL Windows SSPI</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|x64">
- <Configuration>LIB Release - DLL Windows SSPI</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB wolfSSL|Win32">
- <Configuration>LIB Release - LIB wolfSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB wolfSSL|x64">
- <Configuration>LIB Release - LIB wolfSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|Win32">
- <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|x64">
- <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL|Win32">
- <Configuration>LIB Release - LIB OpenSSL</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release - LIB OpenSSL|x64">
- <Configuration>LIB Release - LIB OpenSSL</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release|Win32">
- <Configuration>LIB Release</Configuration>
- <Platform>Win32</Platform>
- </ProjectConfiguration>
- <ProjectConfiguration Include="LIB Release|x64">
- <Configuration>LIB Release</Configuration>
- <Platform>x64</Platform>
- </ProjectConfiguration>
- </ItemGroup>
- <PropertyGroup Label="Globals">
- <ProjectGuid>{5228E9CE-A216-422F-A5E6-58E95E2DD71D}</ProjectGuid>
- <RootNamespace>curl</RootNamespace>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
- <ConfigurationType>Application</ConfigurationType>
- <UseOfMfc>false</UseOfMfc>
- <CharacterSet>Unicode</CharacterSet>
- <PlatformToolset>v140</PlatformToolset>
- </PropertyGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
- <ImportGroup Label="ExtensionSettings">
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="PropertySheets">
- <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
- </ImportGroup>
- <PropertyGroup Label="UserMacros" />
- <PropertyGroup>
- <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>
- <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">false</LinkIncremental>
- <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)d</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(ProjectName)</TargetName>
- <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(ProjectName)</TargetName>
- </PropertyGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC14\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC14\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC14\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC14\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC14\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC14\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC14\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC14\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC14\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC14\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC14\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libssh2.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC14\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <MinimalRebuild>true</MinimalRebuild>
- <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
- <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
- <WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">
- <Midl>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX86</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">
- <Midl>
- <TargetEnvironment>X64</TargetEnvironment>
- <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>
- <HeaderFileName>
- </HeaderFileName>
- </Midl>
- <ClCompile>
- <Optimization>MaxSpeed</Optimization>
- <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
- <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <StringPooling>true</StringPooling>
- <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
- <FunctionLevelLinking>true</FunctionLevelLinking>
- <WarningLevel>Level4</WarningLevel>
- </ClCompile>
- <ResourceCompile>
- <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <Culture>0x0409</Culture>
- <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- </ResourceCompile>
- <Link>
- <AdditionalDependencies>ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
- <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
- <SubSystem>Console</SubSystem>
- <TargetMachine>MachineX64</TargetMachine>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- <ClCompile Include="..\..\..\..\lib\curl_multibyte.c" />
- <ClCompile Include="..\..\..\..\lib\dynbuf.c" />
- <ClCompile Include="..\..\..\..\lib\nonblock.c" />
- <ClCompile Include="..\..\..\..\lib\strtoofft.c" />
- <ClCompile Include="..\..\..\..\lib\timediff.c" />
- <ClCompile Include="..\..\..\..\lib\version_win32.c" />
- <ClCompile Include="..\..\..\..\lib\warnless.c" />
- <ClCompile Include="..\..\..\..\src\slist_wc.c" />
- <ClCompile Include="..\..\..\..\src\tool_binmode.c" />
- <ClCompile Include="..\..\..\..\src\tool_bname.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_dbg.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_hdr.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_prg.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_rea.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_see.c" />
- <ClCompile Include="..\..\..\..\src\tool_cb_wrt.c" />
- <ClCompile Include="..\..\..\..\src\tool_cfgable.c" />
- <ClCompile Include="..\..\..\..\src\tool_dirhie.c" />
- <ClCompile Include="..\..\..\..\src\tool_doswin.c" />
- <ClCompile Include="..\..\..\..\src\tool_easysrc.c" />
- <ClCompile Include="..\..\..\..\src\tool_filetime.c" />
- <ClCompile Include="..\..\..\..\src\tool_findfile.c" />
- <ClCompile Include="..\..\..\..\src\tool_formparse.c" />
- <ClCompile Include="..\..\..\..\src\tool_getparam.c" />
- <ClCompile Include="..\..\..\..\src\tool_getpass.c" />
- <ClCompile Include="..\..\..\..\src\tool_help.c" />
- <ClCompile Include="..\..\..\..\src\tool_helpers.c" />
- <ClCompile Include="..\..\..\..\src\tool_hugehelp.c" />
- <ClCompile Include="..\..\..\..\src\tool_libinfo.c" />
- <ClCompile Include="..\..\..\..\src\tool_listhelp.c" />
- <ClCompile Include="..\..\..\..\src\tool_main.c" />
- <ClCompile Include="..\..\..\..\src\tool_msgs.c" />
- <ClCompile Include="..\..\..\..\src\tool_operate.c" />
- <ClCompile Include="..\..\..\..\src\tool_operhlp.c" />
- <ClCompile Include="..\..\..\..\src\tool_panykey.c" />
- <ClCompile Include="..\..\..\..\src\tool_paramhlp.c" />
- <ClCompile Include="..\..\..\..\src\tool_parsecfg.c" />
- <ClCompile Include="..\..\..\..\src\tool_progress.c" />
- <ClCompile Include="..\..\..\..\src\tool_setopt.c" />
- <ClCompile Include="..\..\..\..\src\tool_sleep.c" />
- <ClCompile Include="..\..\..\..\src\tool_strdup.c" />
- <ClCompile Include="..\..\..\..\src\tool_urlglob.c" />
- <ClCompile Include="..\..\..\..\src\tool_util.c" />
- <ClCompile Include="..\..\..\..\src\tool_vms.c" />
- <ClCompile Include="..\..\..\..\src\tool_writeout.c" />
- <ClCompile Include="..\..\..\..\src\tool_writeout_json.c" />
- <ClCompile Include="..\..\..\..\src\tool_xattr.c" />
- </ItemGroup>
- <ItemGroup>
- <ClInclude Include="..\..\..\..\lib\config-win32.h" />
- <ClInclude Include="..\..\..\..\lib\curl_ctype.h" />
- <ClInclude Include="..\..\..\..\lib\curl_multibyte.h" />
- <ClInclude Include="..\..\..\..\lib\curl_setup.h" />
- <ClInclude Include="..\..\..\..\lib\dynbuf.h" />
- <ClInclude Include="..\..\..\..\lib\nonblock.h" />
- <ClInclude Include="..\..\..\..\lib\strtoofft.h" />
- <ClInclude Include="..\..\..\..\lib\timediff.h" />
- <ClInclude Include="..\..\..\..\lib\version_win32.h" />
- <ClInclude Include="..\..\..\..\lib\warnless.h" />
- <ClInclude Include="..\..\..\..\src\slist_wc.h" />
- <ClInclude Include="..\..\..\..\src\tool_binmode.h" />
- <ClInclude Include="..\..\..\..\src\tool_bname.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_dbg.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_hdr.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_prg.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_rea.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_see.h" />
- <ClInclude Include="..\..\..\..\src\tool_cb_wrt.h" />
- <ClInclude Include="..\..\..\..\src\tool_cfgable.h" />
- <ClInclude Include="..\..\..\..\src\tool_dirhie.h" />
- <ClInclude Include="..\..\..\..\src\tool_doswin.h" />
- <ClInclude Include="..\..\..\..\src\tool_easysrc.h" />
- <ClInclude Include="..\..\..\..\src\tool_filetime.h" />
- <ClInclude Include="..\..\..\..\src\tool_findfile.h" />
- <ClInclude Include="..\..\..\..\src\tool_formparse.h" />
- <ClInclude Include="..\..\..\..\src\tool_getparam.h" />
- <ClInclude Include="..\..\..\..\src\tool_getpass.h" />
- <ClInclude Include="..\..\..\..\src\tool_helpers.h" />
- <ClInclude Include="..\..\..\..\src\tool_help.h" />
- <ClInclude Include="..\..\..\..\src\tool_hugehelp.h" />
- <ClInclude Include="..\..\..\..\src\tool_libinfo.h" />
- <ClInclude Include="..\..\..\..\src\tool_main.h" />
- <ClInclude Include="..\..\..\..\src\tool_msgs.h" />
- <ClInclude Include="..\..\..\..\src\tool_operate.h" />
- <ClInclude Include="..\..\..\..\src\tool_operhlp.h" />
- <ClInclude Include="..\..\..\..\src\tool_panykey.h" />
- <ClInclude Include="..\..\..\..\src\tool_paramhlp.h" />
- <ClInclude Include="..\..\..\..\src\tool_parsecfg.h" />
- <ClInclude Include="..\..\..\..\src\tool_progress.h" />
- <ClInclude Include="..\..\..\..\src\tool_sdecls.h" />
- <ClInclude Include="..\..\..\..\src\tool_setopt.h" />
- <ClInclude Include="..\..\..\..\src\tool_setup.h" />
- <ClInclude Include="..\..\..\..\src\tool_sleep.h" />
- <ClInclude Include="..\..\..\..\src\tool_strdup.h" />
- <ClInclude Include="..\..\..\..\src\tool_urlglob.h" />
- <ClInclude Include="..\..\..\..\src\tool_util.h" />
- <ClInclude Include="..\..\..\..\src\tool_version.h" />
- <ClInclude Include="..\..\..\..\src\tool_vms.h" />
- <ClInclude Include="..\..\..\..\src\tool_writeout.h" />
- <ClInclude Include="..\..\..\..\src\tool_writeout_json.h" />
- <ClInclude Include="..\..\..\..\src\tool_xattr.h" />
- </ItemGroup>
- <ItemGroup>
- <ResourceCompile Include="..\..\..\..\src\curl.rc" />
- </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
-</Project>
diff --git a/projects/build-openssl.bat b/projects/build-openssl.bat
index 106a2a363..0ded764c5 100644
--- a/projects/build-openssl.bat
+++ b/projects/build-openssl.bat
@@ -6,7 +6,7 @@ rem * / __| | | | |_) | |
rem * | (__| |_| | _ <| |___
rem * \___|\___/|_| \_\_____|
rem *
-rem * Copyright (C) 2012 - 2022, Steve Holme, <steve_holme@hotmail.com>.
+rem * Copyright (C) Steve Holme, <steve_holme@hotmail.com>.
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
@@ -18,7 +18,7 @@ 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 *
rem * SPDX-License-Identifier: curl
rem *
rem ***************************************************************************
@@ -589,8 +589,13 @@ rem
)
move "%TMP_INSTALL_PATH%\lib\*.lib" "%OUTDIR%\DLL Debug" 1>nul
- move "%TMP_INSTALL_PATH%\lib\engines-1_1\*.dll" "%OUTDIR%\DLL Debug" 1>nul
- move "%TMP_INSTALL_PATH%\lib\engines-1_1\*.pdb" "%OUTDIR%\DLL Debug" 1>nul
+ if exist "%TMP_INSTALL_PATH%\lib\engines-3" (
+ move "%TMP_INSTALL_PATH%\lib\engines-3\*.dll" "%OUTDIR%\DLL Debug" 1>nul
+ move "%TMP_INSTALL_PATH%\lib\engines-3\*.pdb" "%OUTDIR%\DLL Debug" 1>nul
+ ) else if exist "%TMP_INSTALL_PATH%\lib\engines-1_1" (
+ move "%TMP_INSTALL_PATH%\lib\engines-1_1\*.dll" "%OUTDIR%\DLL Debug" 1>nul
+ move "%TMP_INSTALL_PATH%\lib\engines-1_1\*.pdb" "%OUTDIR%\DLL Debug" 1>nul
+ )
move "%TMP_INSTALL_PATH%\bin\*.dll" "%OUTDIR%\DLL Debug" 1>nul
move "%TMP_INSTALL_PATH%\bin\*.exe" "%OUTDIR%\DLL Debug" 1>nul
move "%TMP_INSTALL_PATH%\bin\*.pdb" "%OUTDIR%\DLL Debug" 1>nul
@@ -615,8 +620,13 @@ rem
)
move "%TMP_INSTALL_PATH%\lib\*.lib" "%OUTDIR%\DLL Release" 1>nul
- move "%TMP_INSTALL_PATH%\lib\engines-1_1\*.dll" "%OUTDIR%\DLL Release" 1>nul
- move "%TMP_INSTALL_PATH%\lib\engines-1_1\*.pdb" "%OUTDIR%\DLL Release" 1>nul
+ if exist "%TMP_INSTALL_PATH%\lib\engines-3" (
+ move "%TMP_INSTALL_PATH%\lib\engines-3\*.dll" "%OUTDIR%\DLL Release" 1>nul
+ move "%TMP_INSTALL_PATH%\lib\engines-3\*.pdb" "%OUTDIR%\DLL Release" 1>nul
+ ) else if exist "%TMP_INSTALL_PATH%\lib\engines-1_1" (
+ move "%TMP_INSTALL_PATH%\lib\engines-1_1\*.dll" "%OUTDIR%\DLL Release" 1>nul
+ move "%TMP_INSTALL_PATH%\lib\engines-1_1\*.pdb" "%OUTDIR%\DLL Release" 1>nul
+ )
move "%TMP_INSTALL_PATH%\bin\*.dll" "%OUTDIR%\DLL Release" 1>nul
move "%TMP_INSTALL_PATH%\bin\*.exe" "%OUTDIR%\DLL Release" 1>nul
move "%TMP_INSTALL_PATH%\bin\*.pdb" "%OUTDIR%\DLL Release" 1>nul
diff --git a/projects/build-wolfssl.bat b/projects/build-wolfssl.bat
index 3830e03e8..1ceaa62ff 100644
--- a/projects/build-wolfssl.bat
+++ b/projects/build-wolfssl.bat
@@ -6,8 +6,8 @@ rem * / __| | | | |_) | |
rem * | (__| |_| | _ <| |___
rem * \___|\___/|_| \_\_____|
rem *
-rem * Copyright (C) 2012 - 2020, Steve Holme, <steve_holme@hotmail.com>.
-rem * Copyright (C) 2015 - 2022, Jay Satiro, <raysatiro@yahoo.com>.
+rem * Copyright (C) Steve Holme, <steve_holme@hotmail.com>.
+rem * Copyright (C) Jay Satiro, <raysatiro@yahoo.com>.
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
@@ -19,7 +19,7 @@ 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 *
rem * SPDX-License-Identifier: curl
rem *
rem ***************************************************************************
diff --git a/projects/checksrc.bat b/projects/checksrc.bat
index 022e591ba..af0ff1ee4 100644
--- a/projects/checksrc.bat
+++ b/projects/checksrc.bat
@@ -6,7 +6,7 @@ rem * / __| | | | |_) | |
rem * | (__| |_| | _ <| |___
rem * \___|\___/|_| \_\_____|
rem *
-rem * Copyright (C) 2014 - 2022, Steve Holme, <steve_holme@hotmail.com>.
+rem * Copyright (C) Steve Holme, <steve_holme@hotmail.com>.
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
@@ -18,7 +18,7 @@ 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 *
rem * SPDX-License-Identifier: curl
rem *
rem ***************************************************************************
diff --git a/projects/generate.bat b/projects/generate.bat
index 372d1b302..b453c69cc 100644
--- a/projects/generate.bat
+++ b/projects/generate.bat
@@ -6,7 +6,7 @@ rem * / __| | | | |_) | |
rem * | (__| |_| | _ <| |___
rem * \___|\___/|_| \_\_____|
rem *
-rem * Copyright (C) 2014 - 2022, Steve Holme, <steve_holme@hotmail.com>.
+rem * Copyright (C) Steve Holme, <steve_holme@hotmail.com>.
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
@@ -18,7 +18,7 @@ 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 *
rem * SPDX-License-Identifier: curl
rem *
rem ***************************************************************************
@@ -56,7 +56,9 @@ rem ***************************************************************************
set VERSION=VC14
) else if /i "%~1" == "vc14.10" (
set VERSION=VC14.10
- ) else if /i "%~1" == "vc14.30" (
+ ) else if /i "%~1" == "vc14.20" (
+ set VERSION=VC14.20
+ )else if /i "%~1" == "vc14.30" (
set VERSION=VC14.30
) else if /i "%~1" == "-clean" (
set MODE=CLEAN
@@ -88,6 +90,7 @@ rem ***************************************************************************
if "%VERSION%" == "VC12" goto vc12
if "%VERSION%" == "VC14" goto vc14
if "%VERSION%" == "VC14.10" goto vc14.10
+ if "%VERSION%" == "VC14.20" goto vc14.20
if "%VERSION%" == "VC14.30" goto vc14.30
:vc10
@@ -164,6 +167,21 @@ rem ***************************************************************************
)
if not "%VERSION%" == "ALL" goto success
+
+:vc14.20
+ echo.
+
+ if "%MODE%" == "GENERATE" (
+ echo Generating VC14.20 project files
+ call :generate vcxproj Windows\VC14.20\src\curl.tmpl Windows\VC14.20\src\curl.vcxproj
+ call :generate vcxproj Windows\VC14.20\lib\libcurl.tmpl Windows\VC14.20\lib\libcurl.vcxproj
+ ) else (
+ echo Removing VC14.20 project files
+ call :clean Windows\VC14.20\src\curl.vcxproj
+ call :clean Windows\VC14.20\lib\libcurl.vcxproj
+ )
+
+ if not "%VERSION%" == "ALL" goto success
:vc14.30
echo.
@@ -182,7 +200,7 @@ rem ***************************************************************************
rem Main generate function.
rem
-rem %1 - Project Type (vcxproj for VC10, VC11, VC12, VC14, VC14.10 and VC14.30)
+rem %1 - Project Type (vcxproj for VC10, VC11, VC12, VC14, VC14.10, VC14.20 and VC14.30)
rem %2 - Input template file
rem %3 - Output project file
rem
@@ -217,6 +235,7 @@ rem
call :element %1 lib "curl_multibyte.c" %3
call :element %1 lib "version_win32.c" %3
call :element %1 lib "dynbuf.c" %3
+ call :element %1 lib "base64.c" %3
) else if "!var!" == "CURL_SRC_X_H_FILES" (
call :element %1 lib "config-win32.h" %3
call :element %1 lib "curl_setup.h" %3
@@ -228,6 +247,7 @@ rem
call :element %1 lib "curl_multibyte.h" %3
call :element %1 lib "version_win32.h" %3
call :element %1 lib "dynbuf.h" %3
+ call :element %1 lib "curl_base64.h" %3
) else if "!var!" == "CURL_LIB_C_FILES" (
for /f "delims=" %%c in ('dir /b ..\lib\*.c') do call :element %1 lib "%%c" %3
) else if "!var!" == "CURL_LIB_H_FILES" (
@@ -261,7 +281,7 @@ rem
rem Generates a single file xml element.
rem
-rem %1 - Project Type (vcxproj for VC10, VC11, VC12, VC14, VC14.10 and VC14.30)
+rem %1 - Project Type (vcxproj for VC10, VC11, VC12, VC14, VC14.10, VC14.20 and VC14.30)
rem %2 - Directory (src, lib, lib\vauth, lib\vquic, lib\vssh, lib\vtls)
rem %3 - Source filename
rem %4 - Output project file
@@ -357,6 +377,7 @@ rem
echo vc12 - Use Visual Studio 2013
echo vc14 - Use Visual Studio 2015
echo vc14.10 - Use Visual Studio 2017
+ echo vc14.20 - Use Visual Studio 2019
echo vc14.30 - Use Visual Studio 2022
echo.
echo -clean - Removes the project files
diff --git a/projects/wolfssl_options.h b/projects/wolfssl_options.h
index c30d09777..3ef23fbcd 100644
--- a/projects/wolfssl_options.h
+++ b/projects/wolfssl_options.h
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -301,7 +301,7 @@ extern "C" {
#ifdef __cplusplus
-}
+} /* end of extern "C" */
#endif
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index ed9819b87..9d69cff9c 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -23,7 +23,7 @@
###########################################################################
EXTRA_DIST = updatemanpages.pl coverage.sh completion.pl firefox-db2pem.sh \
- checksrc.pl mk-ca-bundle.pl
+ checksrc.pl mk-ca-bundle.pl schemetable.c
ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
FISH_FUNCTIONS_DIR = @FISH_FUNCTIONS_DIR@
diff --git a/scripts/Makefile.in b/scripts/Makefile.in
index d225f2480..cc65f8edf 100644
--- a/scripts/Makefile.in
+++ b/scripts/Makefile.in
@@ -21,7 +21,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -119,7 +119,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.m4 \
$(top_srcdir)/m4/curl-confopts.m4 \
$(top_srcdir)/m4/curl-functions.m4 \
$(top_srcdir)/m4/curl-gnutls.m4 \
- $(top_srcdir)/m4/curl-mbedtls.m4 $(top_srcdir)/m4/curl-nss.m4 \
+ $(top_srcdir)/m4/curl-mbedtls.m4 \
$(top_srcdir)/m4/curl-openssl.m4 \
$(top_srcdir)/m4/curl-override.m4 \
$(top_srcdir)/m4/curl-reentrant.m4 \
@@ -171,6 +171,8 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APACHECTL = @APACHECTL@
+APXS = @APXS@
AR = @AR@
AR_FLAGS = @AR_FLAGS@
AS = @AS@
@@ -179,6 +181,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@
+CADDY = @CADDY@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -240,6 +243,8 @@ HAVE_LIBZ = @HAVE_LIBZ@
HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
HAVE_PROTO_BSDSOCKET_H = @HAVE_PROTO_BSDSOCKET_H@
HAVE_ZSTD = @HAVE_ZSTD@
+HTTPD = @HTTPD@
+HTTPD_NGHTTPX = @HTTPD_NGHTTPX@
IDN_ENABLED = @IDN_ENABLED@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -267,7 +272,6 @@ MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
NROFF = @NROFF@
-NSS_LIBS = @NSS_LIBS@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
@@ -298,6 +302,7 @@ SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@
SUPPORT_FEATURES = @SUPPORT_FEATURES@
SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_NGHTTPX = @TEST_NGHTTPX@
USE_ARES = @USE_ARES@
USE_BEARSSL = @USE_BEARSSL@
USE_GNUTLS = @USE_GNUTLS@
@@ -311,9 +316,8 @@ USE_NGHTTP2 = @USE_NGHTTP2@
USE_NGHTTP3 = @USE_NGHTTP3@
USE_NGTCP2 = @USE_NGTCP2@
USE_NGTCP2_CRYPTO_GNUTLS = @USE_NGTCP2_CRYPTO_GNUTLS@
-USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@
+USE_NGTCP2_CRYPTO_QUICTLS = @USE_NGTCP2_CRYPTO_QUICTLS@
USE_NGTCP2_CRYPTO_WOLFSSL = @USE_NGTCP2_CRYPTO_WOLFSSL@
-USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_RUSTLS = @USE_RUSTLS@
@@ -385,7 +389,7 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
EXTRA_DIST = updatemanpages.pl coverage.sh completion.pl firefox-db2pem.sh \
- checksrc.pl mk-ca-bundle.pl
+ checksrc.pl mk-ca-bundle.pl schemetable.c
ZSH_COMPLETION_FUNCTION_FILENAME = _curl
FISH_COMPLETION_FUNCTION_FILENAME = curl.fish
diff --git a/scripts/checksrc.pl b/scripts/checksrc.pl
index 651b4b700..76f466081 100755
--- a/scripts/checksrc.pl
+++ b/scripts/checksrc.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2011 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -50,57 +50,64 @@ my @ignore_line;
my %warnings_extended = (
'COPYRIGHTYEAR' => 'copyright year incorrect',
'STRERROR', => 'strerror() detected',
+ 'STDERR', => 'stderr detected',
);
my %warnings = (
- 'LONGLINE' => "Line longer than $max_column",
- 'TABS' => 'TAB characters not allowed',
- 'TRAILINGSPACE' => 'Trailing whitespace on the line',
- 'CPPCOMMENTS' => '// comment detected',
- 'SPACEBEFOREPAREN' => 'space before an open parenthesis',
- 'SPACEAFTERPAREN' => 'space after open parenthesis',
- 'SPACEBEFORECLOSE' => 'space before a close parenthesis',
- 'SPACEBEFORECOMMA' => 'space before a comma',
- 'RETURNNOSPACE' => 'return without space',
- 'COMMANOSPACE' => 'comma without following space',
- 'BRACEELSE' => '} else on the same line',
- 'PARENBRACE' => '){ without sufficient space',
- 'SPACESEMICOLON' => 'space before semicolon',
+ 'ASSIGNWITHINCONDITION' => 'assignment within conditional expression',
+ 'ASTERISKNOSPACE' => 'pointer declared without space before asterisk',
+ 'ASTERISKSPACE' => 'pointer declared with space after asterisk',
+ 'BADCOMMAND' => 'bad !checksrc! instruction',
'BANNEDFUNC' => 'a banned function was used',
- 'FOPENMODE' => 'fopen needs a macro for the mode string',
+ 'BANNEDPREPROC' => 'a banned symbol was used on a preprocessor line',
+ 'BRACEELSE' => '} else on the same line',
'BRACEPOS' => 'wrong position for an open brace',
- 'INDENTATION' => 'wrong start column for code',
+ 'BRACEWHILE' => 'A single space between open brace and while',
+ 'COMMANOSPACE' => 'comma without following space',
+ 'COMMENTNOSPACEEND' => 'no space before */',
+ 'COMMENTNOSPACESTART' => 'no space following /*',
'COPYRIGHT' => 'file missing a copyright statement',
- 'BADCOMMAND' => 'bad !checksrc! instruction',
- 'UNUSEDIGNORE' => 'a warning ignore was not used',
- 'OPENCOMMENT' => 'file ended with a /* comment still "open"',
- 'ASTERISKSPACE' => 'pointer declared with space after asterisk',
- 'ASTERISKNOSPACE' => 'pointer declared without space before asterisk',
- 'ASSIGNWITHINCONDITION' => 'assignment within conditional expression',
+ 'CPPCOMMENTS' => '// comment detected',
+ 'DOBRACE' => 'A single space between do and open brace',
+ 'EMPTYLINEBRACE' => 'Empty line before the open brace',
'EQUALSNOSPACE' => 'equals sign without following space',
+ 'EQUALSNULL' => 'if/while comparison with == NULL',
+ 'EXCLAMATIONSPACE' => 'Whitespace after exclamation mark in expression',
+ 'FOPENMODE' => 'fopen needs a macro for the mode string',
+ 'INCLUDEDUP', => 'same file is included again',
+ 'INDENTATION' => 'wrong start column for code',
+ 'LONGLINE' => "Line longer than $max_column",
+ 'SPACEBEFORELABEL' => 'labels not at the start of the line',
+ 'MULTISPACE' => 'multiple spaces used when not suitable',
'NOSPACEEQUALS' => 'equals sign without preceding space',
+ 'NOTEQUALSZERO', => 'if/while comparison with != 0',
+ 'ONELINECONDITION' => 'conditional block on the same line as the if()',
+ 'OPENCOMMENT' => 'file ended with a /* comment still "open"',
+ 'PARENBRACE' => '){ without sufficient space',
+ 'RETURNNOSPACE' => 'return without space',
'SEMINOSPACE' => 'semicolon without following space',
- 'MULTISPACE' => 'multiple spaces used when not suitable',
'SIZEOFNOPAREN' => 'use of sizeof without parentheses',
'SNPRINTF' => 'use of snprintf',
- 'ONELINECONDITION' => 'conditional block on the same line as the if()',
+ 'SPACEAFTERPAREN' => 'space after open parenthesis',
+ 'SPACEBEFORECLOSE' => 'space before a close parenthesis',
+ 'SPACEBEFORECOMMA' => 'space before a comma',
+ 'SPACEBEFOREPAREN' => 'space before an open parenthesis',
+ 'SPACESEMICOLON' => 'space before semicolon',
+ 'SPACESWITCHCOLON' => 'space before colon of switch label',
+ 'TABS' => 'TAB characters not allowed',
+ 'TRAILINGSPACE' => 'Trailing whitespace on the line',
'TYPEDEFSTRUCT' => 'typedefed struct',
- 'DOBRACE' => 'A single space between do and open brace',
- 'BRACEWHILE' => 'A single space between open brace and while',
- 'EXCLAMATIONSPACE' => 'Whitespace after exclamation mark in expression',
- 'EMPTYLINEBRACE' => 'Empty line before the open brace',
- 'EQUALSNULL' => 'if/while comparison with == NULL',
- 'NOTEQUALSZERO', => 'if/while comparison with != 0',
+ 'UNUSEDIGNORE' => 'a warning ignore was not used',
);
sub readskiplist {
- open(W, "<$dir/checksrc.skip") or return;
- my @all=<W>;
+ open(my $W, '<', "$dir/checksrc.skip") or return;
+ my @all=<$W>;
for(@all) {
$windows_os ? $_ =~ s/\r?\n$// : chomp;
$skiplist{$_}=1;
}
- close(W);
+ close($W);
}
# Reads the .checksrc in $dir for any extended warnings to enable locally.
@@ -376,14 +383,15 @@ sub scanfile {
my $l = "";
my $prep = 0;
my $prevp = 0;
- open(R, "<$file") || die "failed to open $file";
+ open(my $R, '<', $file) || die "failed to open $file";
my $incomment=0;
my @copyright=();
+ my %includes;
checksrc_clear(); # for file based ignores
accept_violations();
- while(<R>) {
+ while(<$R>) {
$windows_os ? $_ =~ s/\r?\n$// : chomp;
my $l = $_;
my $ol = $l; # keep the unmodified line for error reporting
@@ -395,8 +403,16 @@ sub scanfile {
checksrc($cmd, $line, $file, $l)
}
+ if($l =~ /^#line (\d+) \"([^\"]*)\"/) {
+ # a #line instruction
+ $file = $2;
+ $line = $1;
+ next;
+ }
+
# check for a copyright statement and save the years
- if($l =~ /\* +copyright .* \d\d\d\d/i) {
+ if($l =~ /\* +copyright .* (\d\d\d\d|)/i) {
+ my $count = 0;
while($l =~ /([\d]{4})/g) {
push @copyright, {
year => $1,
@@ -404,6 +420,16 @@ sub scanfile {
col => index($l, $1),
code => $l
};
+ $count++;
+ }
+ if(!$count) {
+ # year-less
+ push @copyright, {
+ year => -1,
+ line => $line,
+ col => index($l, $1),
+ code => $l
+ };
}
}
@@ -423,6 +449,18 @@ sub scanfile {
$line, length($1), $file, $l, "Trailing whitespace");
}
+ # no space after comment start
+ if($l =~ /^(.*)\/\*\w/) {
+ checkwarn("COMMENTNOSPACESTART",
+ $line, length($1) + 2, $file, $l,
+ "Missing space after comment start");
+ }
+ # no space at comment end
+ if($l =~ /^(.*)\w\*\//) {
+ checkwarn("COMMENTNOSPACEEND",
+ $line, length($1) + 1, $file, $l,
+ "Missing space end comment end");
+ }
# ------------------------------------------------------------
# Above this marker, the checks were done on lines *including*
# comments
@@ -472,6 +510,15 @@ sub scanfile {
$line, length($1), $file, $l, "\/\/ comment");
}
+ if($l =~ /^(\#\s*include\s+)([\">].*[>}"])/) {
+ my ($pre, $path) = ($1, $2);
+ if($includes{$path}) {
+ checkwarn("INCLUDEDUP",
+ $line, length($1), $file, $l, "duplicated include");
+ }
+ $includes{$path} = $l;
+ }
+
# detect and strip preprocessor directives
if($l =~ /^[ \t]*\#/) {
# preprocessor line
@@ -481,7 +528,8 @@ sub scanfile {
my $nostr = nostrings($l);
# check spaces after for/if/while/function call
- if($nostr =~ /^(.*)(for|if|while| ([a-zA-Z0-9_]+)) \((.)/) {
+ if($nostr =~ /^(.*)(for|if|while|switch| ([a-zA-Z0-9_]+)) \((.)/) {
+ my ($leading, $word, $extra, $first)=($1,$2,$3,$4);
if($1 =~ / *\#/) {
# this is a #if, treat it differently
}
@@ -491,15 +539,16 @@ sub scanfile {
elsif(defined $3 && $3 eq "case") {
# case must have a space
}
- elsif($4 eq "*") {
- # (* beginning makes the space OK!
+ elsif(($first eq "*") && ($word !~ /(for|if|while|switch)/)) {
+ # A "(*" beginning makes the space OK because it wants to
+ # allow function pointer declared
}
elsif($1 =~ / *typedef/) {
# typedefs can use space-paren
}
else {
- checkwarn("SPACEBEFOREPAREN", $line, length($1)+length($2), $file, $l,
- "$2 with space");
+ checkwarn("SPACEBEFOREPAREN", $line, length($leading)+length($word), $file, $l,
+ "$word with space");
}
}
# check for '== NULL' in if/while conditions but not if the thing on
@@ -652,6 +701,17 @@ sub scanfile {
$line, length($1), $file, $ol, "no space before semicolon");
}
+ # check for space before the colon in a switch label
+ if($l =~ /^( *(case .+|default)) :/) {
+ checkwarn("SPACESWITCHCOLON",
+ $line, length($1), $file, $ol, "no space before colon of switch label");
+ }
+
+ if($prevl !~ /\?\z/ && $l =~ /^ +([A-Za-z_][A-Za-z0-9_]*):$/ && $1 ne 'default') {
+ checkwarn("SPACEBEFORELABEL",
+ $line, length($1), $file, $ol, "no space before label");
+ }
+
# scan for use of banned functions
if($l =~ /^(.*\W)
(gmtime|localtime|
@@ -678,6 +738,18 @@ sub scanfile {
}
}
}
+ if($warnings{"STDERR"}) {
+ # scan for use of banned stderr. This is not a BANNEDFUNC to
+ # allow for individual enable/disable of this warning.
+ if($l =~ /^([^\"-]*\W)(stderr)[^\"_]/x) {
+ if($1 !~ /^ *\#/) {
+ # skip preprocessor lines
+ checkwarn("STDERR",
+ $line, length($1), $file, $ol,
+ "use of $2 is banned (use tool_stderr instead)");
+ }
+ }
+ }
# scan for use of snprintf for curl-internals reasons
if($l =~ /^(.*\W)(v?snprintf)\s*\(/x) {
checkwarn("SNPRINTF",
@@ -720,6 +792,32 @@ sub scanfile {
}
}
+ # if the previous line starts with if/while/for AND ends with a closed
+ # parenthesis and there's an equal number of open and closed
+ # parentheses, check that this line is indented $indent more steps, if
+ # not a cpp line
+ elsif(!$prevp && ($prevl =~ /^( *)(if|while|for)(\(.*\))\z/)) {
+ my $first = length($1);
+ my $op = $3;
+ my $cl = $3;
+
+ $op =~ s/[^(]//g;
+ $cl =~ s/[^)]//g;
+
+ if(length($op) == length($cl)) {
+ # this line has some character besides spaces
+ if($l =~ /^( *)[^ ]/) {
+ my $second = length($1);
+ my $expect = $first+$indent;
+ if($expect != $second) {
+ my $diff = $second - $first;
+ checkwarn("INDENTATION", $line, length($1), $file, $ol,
+ "not indented $indent steps (uses $diff)");
+ }
+ }
+ }
+ }
+
# check for 'char * name'
if(($l =~ /(^.*(char|int|long|void|CURL|CURLM|CURLMsg|[cC]url_[A-Za-z_]+|struct [a-zA-Z_]+) *(\*+)) (\w+)/) && ($4 !~ /^(const|volatile)$/)) {
checkwarn("ASTERISKSPACE",
@@ -802,6 +900,18 @@ sub scanfile {
"multiple spaces");
}
preproc:
+ if($prep) {
+ # scan for use of banned symbols on a preprocessor line
+ if($l =~ /^(^|.*\W)
+ (WIN32)
+ (\W|$)
+ /x) {
+ checkwarn("BANNEDPREPROC",
+ $line, length($1), $file, $ol,
+ "use of $2 is banned from preprocessor lines" .
+ (($2 eq "WIN32") ? ", use _WIN32 instead" : ""));
+ }
+ }
$line++;
$prevp = $prep;
$prevl = $ol if(!$prep);
@@ -835,12 +945,12 @@ sub scanfile {
@copyright = sort {$$b{year} cmp $$a{year}} @copyright;
# if the file is modified, assume commit year this year
- if(`git status -s -- $file` =~ /^ [MARCU]/) {
+ if(`git status -s -- "$file"` =~ /^ [MARCU]/) {
$commityear = (localtime(time))[5] + 1900;
}
else {
# min-parents=1 to ignore wrong initial commit in truncated repos
- my $grl = `git rev-list --max-count=1 --min-parents=1 --timestamp HEAD -- $file`;
+ my $grl = `git rev-list --max-count=1 --min-parents=1 --timestamp HEAD -- "$file"`;
if($grl) {
chomp $grl;
$commityear = (localtime((split(/ /, $grl))[0]))[5] + 1900;
@@ -862,7 +972,7 @@ sub scanfile {
checksrc_endoffile($file);
- close(R);
+ close($R);
}
diff --git a/scripts/completion.pl b/scripts/completion.pl
index c2eb774f7..00c736898 100755
--- a/scripts/completion.pl
+++ b/scripts/completion.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/scripts/coverage.sh b/scripts/coverage.sh
index f3db9af17..0a7c7824a 100755
--- a/scripts/coverage.sh
+++ b/scripts/coverage.sh
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/scripts/firefox-db2pem.sh b/scripts/firefox-db2pem.sh
index 36c2de93c..f78f41523 100755
--- a/scripts/firefox-db2pem.sh
+++ b/scripts/firefox-db2pem.sh
@@ -6,7 +6,7 @@
# * | (__| |_| | _ <| |___
# * \___|\___/|_| \_\_____|
# *
-# * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
# *
# * This software is licensed as described in the file COPYING, which
# * you should have received as part of this distribution. The terms
diff --git a/scripts/mk-ca-bundle.pl b/scripts/mk-ca-bundle.pl
index 926478f12..83027a489 100755
--- a/scripts/mk-ca-bundle.pl
+++ b/scripts/mk-ca-bundle.pl
@@ -6,7 +6,7 @@
# * | (__| |_| | _ <| |___
# * \___|\___/|_| \_\_____|
# *
-# * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
# *
# * This software is licensed as described in the file COPYING, which
# * you should have received as part of this distribution. The terms
diff --git a/scripts/schemetable.c b/scripts/schemetable.c
new file mode 100644
index 000000000..ae79eaa09
--- /dev/null
+++ b/scripts/schemetable.c
@@ -0,0 +1,207 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 <stdio.h>
+#include <curl/curl.h>
+
+/*
+ * Use this tool to generate an updated table for the Curl_getn_scheme_handler
+ * function in url.c.
+ */
+
+struct detail {
+ const char *n;
+ const char *ifdef;
+};
+
+static const struct detail scheme[] = {
+ {"dict", "#ifndef CURL_DISABLE_DICT" },
+ {"file", "#ifndef CURL_DISABLE_FILE" },
+ {"ftp", "#ifndef CURL_DISABLE_FTP" },
+ {"ftps", "#if defined(USE_SSL) && !defined(CURL_DISABLE_FTP)" },
+ {"gopher", "#ifndef CURL_DISABLE_GOPHER" },
+ {"gophers", "#if defined(USE_SSL) && !defined(CURL_DISABLE_GOPHER)" },
+ {"http", "#ifndef CURL_DISABLE_HTTP" },
+ {"https", "#if defined(USE_SSL) && !defined(CURL_DISABLE_HTTP)" },
+ {"imap", "#ifndef CURL_DISABLE_IMAP" },
+ {"imaps", "#if defined(USE_SSL) && !defined(CURL_DISABLE_IMAP)" },
+ {"ldap", "#ifndef CURL_DISABLE_LDAP" },
+ {"ldaps", "#if !defined(CURL_DISABLE_LDAP) && \\\n"
+ " !defined(CURL_DISABLE_LDAPS) && \\\n"
+ " ((defined(USE_OPENLDAP) && defined(USE_SSL)) || \\\n"
+ " (!defined(USE_OPENLDAP) && defined(HAVE_LDAP_SSL)))" },
+ {"mqtt", "#ifndef CURL_DISABLE_MQTT" },
+ {"pop3", "#ifndef CURL_DISABLE_POP3" },
+ {"pop3s", "#if defined(USE_SSL) && !defined(CURL_DISABLE_POP3)" },
+ {"rtmp", "#ifdef USE_LIBRTMP" },
+ {"rtmpt", "#ifdef USE_LIBRTMP" },
+ {"rtmpe", "#ifdef USE_LIBRTMP" },
+ {"rtmpte", "#ifdef USE_LIBRTMP" },
+ {"rtmps", "#ifdef USE_LIBRTMP" },
+ {"rtmpts", "#ifdef USE_LIBRTMP" },
+ {"rtsp", "#ifndef CURL_DISABLE_RTSP" },
+ {"scp", "#if defined(USE_SSH) && !defined(USE_WOLFSSH)" },
+ {"sftp", "#if defined(USE_SSH)" },
+ {"smb", "#if !defined(CURL_DISABLE_SMB) && defined(USE_CURL_NTLM_CORE) && \\\n"
+ " (SIZEOF_CURL_OFF_T > 4)" },
+ {"smbs", "#if defined(USE_SSL) && !defined(CURL_DISABLE_SMB) && \\\n"
+ " defined(USE_CURL_NTLM_CORE) && (SIZEOF_CURL_OFF_T > 4)" },
+ {"smtp", "#ifndef CURL_DISABLE_SMTP" },
+ {"smtps", "#if defined(USE_SSL) && !defined(CURL_DISABLE_SMTP)" },
+ {"telnet", "#ifndef CURL_DISABLE_TELNET" },
+ {"tftp", "#ifndef CURL_DISABLE_TFTP" },
+ {"ws", "#if defined(USE_WEBSOCKETS) && !defined(CURL_DISABLE_HTTP)" },
+ {"wss", "#if defined(USE_WEBSOCKETS) && \\\n"
+ " defined(USE_SSL) && !defined(CURL_DISABLE_HTTP)" },
+ { NULL, NULL }
+};
+
+unsigned int calc(const char *s, int add, int shift)
+{
+ const char *so = s;
+ unsigned int c = add;
+ while(*s) {
+ c <<= shift;
+ c += *s;
+ s++;
+ }
+ return c;
+}
+
+unsigned int num[100];
+unsigned int ix[100];
+
+static void showtable(int try, int init, int shift)
+{
+ int nulls = 0;
+ int i;
+ for(i = 0; scheme[i].n; ++i)
+ num[i] = calc(scheme[i].n, init, shift);
+ for(i = 0; scheme[i].n; ++i)
+ ix[i] = num[i] % try;
+ printf("/*\n"
+ " unsigned int c = %d\n"
+ " while(l) {\n"
+ " c <<= %d;\n"
+ " c += Curl_raw_tolower(*s);\n"
+ " s++;\n"
+ " l--;\n"
+ " }\n"
+ "*/\n", init, shift);
+
+ printf(" static const struct Curl_handler * const protocols[%d] = {", try);
+
+ /* generate table */
+ for(i=0; i < try; i++) {
+ int match = 0;
+ int j;
+ for(j=0; scheme[j].n; j++) {
+ if(ix[j] == i) {
+ printf("\n");
+ printf("%s\n", scheme[j].ifdef);
+ printf(" &Curl_handler_%s,\n", scheme[j].n);
+ printf("#else\n NULL,\n");
+ printf("#endif");
+ match = 1;
+ nulls = 0;
+ break;
+ }
+ }
+ if(!match) {
+ if(!nulls || (nulls>10)) {
+ printf("\n ");
+ nulls = 0;
+ }
+ printf(" NULL,", nulls);
+ nulls++;
+ }
+ }
+ printf("\n };\n");
+}
+
+int main(void)
+{
+ int i;
+ int try;
+ int besttry = 9999;
+ int bestadd = 0;
+ int bestshift = 0;
+ int add;
+ int shift;
+ for(shift = 0; shift < 8; shift++) {
+ for(add = 0; add < 999; add++) {
+ for(i = 0; scheme[i].n; ++i) {
+ unsigned int v = calc(scheme[i].n, add, shift);
+ int j;
+ int badcombo = 0;
+ for(j=0; j < i; j++) {
+
+ if(num[j] == v) {
+ /*
+ printf("NOPE: %u is a dupe (%s and %s)\n",
+ v, scheme[i], scheme[j]);
+ */
+ badcombo = 1;
+ break;
+ }
+ }
+ if(badcombo)
+ break;
+ num[i] = v;
+ }
+#if 0
+ for(i = 0; scheme[i].n; ++i) {
+ printf("%u - %s\n", num[i], scheme[i].n);
+ }
+#endif
+ /* try different remainders to find smallest possible table */
+ for(try = 28; try < 199; try++) {
+ int good = 1;
+ for(i = 0; scheme[i].n; ++i) {
+ ix[i] = num[i] % try;
+ }
+ /* check for dupes */
+ for(i = 0; scheme[i].n && good; ++i) {
+ int j;
+ for(j=0; j < i; j++) {
+ if(ix[j] == ix[i]) {
+ /* printf("NOPE, try %u causes dupes (%d and %d)\n", try, j, i); */
+ good = 0;
+ break;
+ }
+ }
+ }
+ if(good) {
+ if(try < besttry) {
+ besttry = try;
+ bestadd = add;
+ bestshift = shift;
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ showtable(besttry, bestadd, bestshift);
+}
diff --git a/scripts/updatemanpages.pl b/scripts/updatemanpages.pl
index fd461e4bd..58a8755e8 100755
--- a/scripts/updatemanpages.pl
+++ b/scripts/updatemanpages.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/src/.checksrc b/src/.checksrc
new file mode 100644
index 000000000..946367c49
--- /dev/null
+++ b/src/.checksrc
@@ -0,0 +1 @@
+enable STDERR
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index bf8ce7a1b..a3c4218ea 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -22,6 +22,7 @@
#
###########################################################################
set(EXE_NAME curl)
+add_definitions(-DBUILDING_CURL)
if(USE_MANUAL)
# Use the C locale to ensure that only ASCII characters appear in the
@@ -58,13 +59,24 @@ transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.
include(${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake)
if(WIN32)
- list(APPEND CURL_FILES curl.rc)
+ list(APPEND CURL_CFILES curl.rc)
+endif()
+
+# CURL_CFILES, CURLX_CFILES, CURL_HFILES, CURLTOOL_LIBCURL_CFILES
+# come from Makefile.inc
+if(BUILD_STATIC_CURL)
+ set(CURLX_CFILES ${CURLTOOL_LIBCURL_CFILES})
+endif()
+
+if(ENABLE_CURLDEBUG)
+ # We must compile this source separately to avoid memdebug.h redefinitions
+ # applying to them.
+ set_source_files_properties(../lib/curl_multibyte.c PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON)
endif()
-# CURL_FILES comes from Makefile.inc
add_executable(
${EXE_NAME}
- ${CURL_FILES}
+ ${CURL_CFILES} ${CURLX_CFILES} ${CURL_HFILES}
)
add_executable(
@@ -72,6 +84,15 @@ add_executable(
ALIAS ${EXE_NAME}
)
+add_library(
+ curltool # special libcurltool library just for unittests
+ STATIC
+ EXCLUDE_FROM_ALL
+ ${CURL_CFILES} ${CURLTOOL_LIBCURL_CFILES} ${CURL_HFILES}
+)
+target_compile_definitions(curltool PUBLIC UNITTESTS CURL_STATICLIB)
+target_link_libraries(curltool PRIVATE ${CURL_LIBS})
+
if(CURL_HAS_LTO)
set_target_properties(${EXE_NAME} PROPERTIES
INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE
@@ -80,8 +101,6 @@ endif()
if(ENABLE_UNICODE AND MINGW)
target_link_libraries(${EXE_NAME} -municode)
- # GCC doesn't know about wmain
- set_source_files_properties(tool_main.c PROPERTIES COMPILE_FLAGS "-Wno-missing-prototypes -Wno-missing-declarations")
endif()
source_group("curlX source files" FILES ${CURLX_CFILES})
@@ -97,7 +116,7 @@ include_directories(
)
#Build curl executable
-target_link_libraries(${EXE_NAME} libcurl ${CURL_LIBS})
+target_link_libraries(${EXE_NAME} ${LIB_SELECTED_FOR_EXE} ${CURL_LIBS})
################################################################################
diff --git a/src/Makefile.am b/src/Makefile.am
index d9180b0b1..dced53e0f 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -50,16 +50,19 @@ SUBDIRS = ../docs
if USE_CPPFLAG_CURL_STATICLIB
AM_CPPFLAGS += -DCURL_STATICLIB
endif
+AM_CPPFLAGS += -DBUILDING_CURL
include Makefile.inc
# CURL_FILES comes from Makefile.inc
curl_SOURCES = $(CURL_FILES)
-if OS_WINDOWS
+if HAVE_WINDRES
curl_SOURCES += $(CURL_RCFILES)
$(CURL_RCFILES): tool_version.h
endif
+curl_LDFLAGS = $(AM_LDFLAGS) $(CURL_LDFLAGS_BIN)
+
# This might hold -Werror
CFLAGS += @CURL_CFLAG_EXTRAS@
@@ -69,7 +72,7 @@ LIBS = $(BLANK_AT_MAKETIME)
if USE_EXPLICIT_LIB_DEPS
curl_LDADD = $(top_builddir)/lib/libcurl.la @LIBCURL_LIBS@
else
-curl_LDADD = $(top_builddir)/lib/libcurl.la @NSS_LIBS@ @SSL_LIBS@ @ZLIB_LIBS@ @CURL_NETWORK_AND_TIME_LIBS@
+curl_LDADD = $(top_builddir)/lib/libcurl.la @SSL_LIBS@ @ZLIB_LIBS@ @CURL_NETWORK_AND_TIME_LIBS@
endif
# if unit tests are enabled, build a static library to link them with
@@ -85,10 +88,10 @@ endif
CLEANFILES = tool_hugehelp.c
# Use the C locale to ensure that only ASCII characters appear in the
# embedded text.
-NROFF=env LC_ALL=C @NROFF@ @MANOPT@ # figured out by the configure script
+NROFF=env LC_ALL=C @NROFF@ @MANOPT@ 2>/dev/null # figured out by the configure script
-EXTRA_DIST = mkhelp.pl makefile.dj \
- Makefile.m32 makefile.amiga curl.rc Makefile.inc CMakeLists.txt
+EXTRA_DIST = mkhelp.pl \
+ Makefile.mk curl.rc Makefile.inc CMakeLists.txt .checksrc
# Use absolute directory to disable VPATH
MANPAGE=$(abs_top_builddir)/docs/curl.1
@@ -156,8 +159,7 @@ tidy:
listhelp:
(cd $(top_srcdir)/docs/cmdline-opts && ./gen.pl listhelp *.d) > tool_listhelp.c
-if OS_WINDOWS
-# Warning is "normal": libtool: error: ignoring unknown tag RC
+if HAVE_WINDRES
.rc.o:
- $(LIBTOOL) --tag=RC --mode=compile $(RC) -I$(top_srcdir)/include -DCURL_EMBED_MANIFEST $(RCFLAGS) -i $< -o $@
+ $(RC) -I$(top_srcdir)/include -DCURL_EMBED_MANIFEST $(RCFLAGS) -i $< -o $@
endif
diff --git a/src/Makefile.in b/src/Makefile.in
index 652e6be6d..e17b739ff 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -21,7 +21,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -122,7 +122,7 @@ build_triplet = @build@
host_triplet = @host@
bin_PROGRAMS = curl$(EXEEXT)
@USE_CPPFLAG_CURL_STATICLIB_TRUE@am__append_1 = -DCURL_STATICLIB
-@OS_WINDOWS_TRUE@am__append_2 = $(CURL_RCFILES)
+@HAVE_WINDRES_TRUE@am__append_2 = $(CURL_RCFILES)
subdir = src
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.m4 \
@@ -131,7 +131,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.m4 \
$(top_srcdir)/m4/curl-confopts.m4 \
$(top_srcdir)/m4/curl-functions.m4 \
$(top_srcdir)/m4/curl-gnutls.m4 \
- $(top_srcdir)/m4/curl-mbedtls.m4 $(top_srcdir)/m4/curl-nss.m4 \
+ $(top_srcdir)/m4/curl-mbedtls.m4 \
$(top_srcdir)/m4/curl-openssl.m4 \
$(top_srcdir)/m4/curl-override.m4 \
$(top_srcdir)/m4/curl-reentrant.m4 \
@@ -168,25 +168,25 @@ am__libcurltool_la_SOURCES_DIST = slist_wc.c tool_binmode.c \
tool_dirhie.c tool_doswin.c tool_easysrc.c tool_filetime.c \
tool_findfile.c tool_formparse.c tool_getparam.c \
tool_getpass.c tool_help.c tool_helpers.c tool_hugehelp.c \
- tool_libinfo.c tool_listhelp.c tool_main.c tool_msgs.c \
- tool_operate.c tool_operhlp.c tool_panykey.c tool_paramhlp.c \
- tool_parsecfg.c tool_progress.c tool_strdup.c tool_setopt.c \
- tool_sleep.c tool_urlglob.c tool_util.c tool_vms.c \
- tool_writeout.c tool_writeout_json.c tool_xattr.c \
- ../lib/strtoofft.c ../lib/timediff.c ../lib/nonblock.c \
- ../lib/warnless.c ../lib/curl_multibyte.c \
- ../lib/version_win32.c ../lib/dynbuf.c slist_wc.h \
+ tool_ipfs.c tool_libinfo.c tool_listhelp.c tool_main.c \
+ tool_msgs.c tool_operate.c tool_operhlp.c tool_paramhlp.c \
+ tool_parsecfg.c tool_progress.c tool_setopt.c tool_sleep.c \
+ tool_stderr.c tool_strdup.c tool_urlglob.c tool_util.c \
+ tool_vms.c tool_writeout.c tool_writeout_json.c tool_xattr.c \
+ var.c ../lib/base64.c ../lib/curl_multibyte.c ../lib/dynbuf.c \
+ ../lib/nonblock.c ../lib/strtoofft.c ../lib/timediff.c \
+ ../lib/version_win32.c ../lib/warnless.c slist_wc.h \
tool_binmode.h tool_bname.h tool_cb_dbg.h tool_cb_hdr.h \
tool_cb_prg.h tool_cb_rea.h tool_cb_see.h tool_cb_wrt.h \
tool_cfgable.h tool_dirhie.h tool_doswin.h tool_easysrc.h \
tool_filetime.h tool_findfile.h tool_formparse.h \
tool_getparam.h tool_getpass.h tool_help.h tool_helpers.h \
- tool_hugehelp.h tool_libinfo.h tool_main.h tool_msgs.h \
- tool_operate.h tool_operhlp.h tool_panykey.h tool_paramhlp.h \
+ tool_hugehelp.h tool_ipfs.h tool_libinfo.h tool_main.h \
+ tool_msgs.h tool_operate.h tool_operhlp.h tool_paramhlp.h \
tool_parsecfg.h tool_progress.h tool_sdecls.h tool_setopt.h \
- tool_setup.h tool_sleep.h tool_strdup.h tool_urlglob.h \
- tool_util.h tool_version.h tool_vms.h tool_writeout.h \
- tool_writeout_json.h tool_xattr.h
+ tool_setup.h tool_sleep.h tool_stderr.h tool_strdup.h \
+ tool_urlglob.h tool_util.h tool_version.h tool_vms.h \
+ tool_writeout.h tool_writeout_json.h tool_xattr.h var.h
am__objects_1 = libcurltool_la-slist_wc.lo \
libcurltool_la-tool_binmode.lo libcurltool_la-tool_bname.lo \
libcurltool_la-tool_cb_dbg.lo libcurltool_la-tool_cb_hdr.lo \
@@ -199,26 +199,28 @@ am__objects_1 = libcurltool_la-slist_wc.lo \
libcurltool_la-tool_formparse.lo \
libcurltool_la-tool_getparam.lo libcurltool_la-tool_getpass.lo \
libcurltool_la-tool_help.lo libcurltool_la-tool_helpers.lo \
- libcurltool_la-tool_hugehelp.lo libcurltool_la-tool_libinfo.lo \
- libcurltool_la-tool_listhelp.lo libcurltool_la-tool_main.lo \
- libcurltool_la-tool_msgs.lo libcurltool_la-tool_operate.lo \
- libcurltool_la-tool_operhlp.lo libcurltool_la-tool_panykey.lo \
+ libcurltool_la-tool_hugehelp.lo libcurltool_la-tool_ipfs.lo \
+ libcurltool_la-tool_libinfo.lo libcurltool_la-tool_listhelp.lo \
+ libcurltool_la-tool_main.lo libcurltool_la-tool_msgs.lo \
+ libcurltool_la-tool_operate.lo libcurltool_la-tool_operhlp.lo \
libcurltool_la-tool_paramhlp.lo \
libcurltool_la-tool_parsecfg.lo \
- libcurltool_la-tool_progress.lo libcurltool_la-tool_strdup.lo \
- libcurltool_la-tool_setopt.lo libcurltool_la-tool_sleep.lo \
- libcurltool_la-tool_urlglob.lo libcurltool_la-tool_util.lo \
- libcurltool_la-tool_vms.lo libcurltool_la-tool_writeout.lo \
+ libcurltool_la-tool_progress.lo libcurltool_la-tool_setopt.lo \
+ libcurltool_la-tool_sleep.lo libcurltool_la-tool_stderr.lo \
+ libcurltool_la-tool_strdup.lo libcurltool_la-tool_urlglob.lo \
+ libcurltool_la-tool_util.lo libcurltool_la-tool_vms.lo \
+ libcurltool_la-tool_writeout.lo \
libcurltool_la-tool_writeout_json.lo \
- libcurltool_la-tool_xattr.lo
+ libcurltool_la-tool_xattr.lo libcurltool_la-var.lo
am__dirstamp = $(am__leading_dot)dirstamp
-am__objects_2 = ../lib/libcurltool_la-strtoofft.lo \
- ../lib/libcurltool_la-timediff.lo \
- ../lib/libcurltool_la-nonblock.lo \
- ../lib/libcurltool_la-warnless.lo \
+am__objects_2 = ../lib/libcurltool_la-base64.lo \
../lib/libcurltool_la-curl_multibyte.lo \
+ ../lib/libcurltool_la-dynbuf.lo \
+ ../lib/libcurltool_la-nonblock.lo \
+ ../lib/libcurltool_la-strtoofft.lo \
+ ../lib/libcurltool_la-timediff.lo \
../lib/libcurltool_la-version_win32.lo \
- ../lib/libcurltool_la-dynbuf.lo
+ ../lib/libcurltool_la-warnless.lo
am__objects_3 =
am__objects_4 = $(am__objects_1) $(am__objects_2) $(am__objects_3)
@BUILD_UNITTESTS_TRUE@am_libcurltool_la_OBJECTS = $(am__objects_4)
@@ -237,25 +239,26 @@ am__curl_SOURCES_DIST = slist_wc.c tool_binmode.c tool_bname.c \
tool_cb_see.c tool_cb_wrt.c tool_cfgable.c tool_dirhie.c \
tool_doswin.c tool_easysrc.c tool_filetime.c tool_findfile.c \
tool_formparse.c tool_getparam.c tool_getpass.c tool_help.c \
- tool_helpers.c tool_hugehelp.c tool_libinfo.c tool_listhelp.c \
- tool_main.c tool_msgs.c tool_operate.c tool_operhlp.c \
- tool_panykey.c tool_paramhlp.c tool_parsecfg.c tool_progress.c \
- tool_strdup.c tool_setopt.c tool_sleep.c tool_urlglob.c \
- tool_util.c tool_vms.c tool_writeout.c tool_writeout_json.c \
- tool_xattr.c ../lib/strtoofft.c ../lib/timediff.c \
- ../lib/nonblock.c ../lib/warnless.c ../lib/curl_multibyte.c \
- ../lib/version_win32.c ../lib/dynbuf.c slist_wc.h \
- tool_binmode.h tool_bname.h tool_cb_dbg.h tool_cb_hdr.h \
- tool_cb_prg.h tool_cb_rea.h tool_cb_see.h tool_cb_wrt.h \
- tool_cfgable.h tool_dirhie.h tool_doswin.h tool_easysrc.h \
- tool_filetime.h tool_findfile.h tool_formparse.h \
- tool_getparam.h tool_getpass.h tool_help.h tool_helpers.h \
- tool_hugehelp.h tool_libinfo.h tool_main.h tool_msgs.h \
- tool_operate.h tool_operhlp.h tool_panykey.h tool_paramhlp.h \
- tool_parsecfg.h tool_progress.h tool_sdecls.h tool_setopt.h \
- tool_setup.h tool_sleep.h tool_strdup.h tool_urlglob.h \
- tool_util.h tool_version.h tool_vms.h tool_writeout.h \
- tool_writeout_json.h tool_xattr.h curl.rc
+ tool_helpers.c tool_hugehelp.c tool_ipfs.c tool_libinfo.c \
+ tool_listhelp.c tool_main.c tool_msgs.c tool_operate.c \
+ tool_operhlp.c tool_paramhlp.c tool_parsecfg.c tool_progress.c \
+ tool_setopt.c tool_sleep.c tool_stderr.c tool_strdup.c \
+ tool_urlglob.c tool_util.c tool_vms.c tool_writeout.c \
+ tool_writeout_json.c tool_xattr.c var.c ../lib/base64.c \
+ ../lib/curl_multibyte.c ../lib/dynbuf.c ../lib/nonblock.c \
+ ../lib/strtoofft.c ../lib/timediff.c ../lib/version_win32.c \
+ ../lib/warnless.c slist_wc.h tool_binmode.h tool_bname.h \
+ tool_cb_dbg.h tool_cb_hdr.h tool_cb_prg.h tool_cb_rea.h \
+ tool_cb_see.h tool_cb_wrt.h tool_cfgable.h tool_dirhie.h \
+ tool_doswin.h tool_easysrc.h tool_filetime.h tool_findfile.h \
+ tool_formparse.h tool_getparam.h tool_getpass.h tool_help.h \
+ tool_helpers.h tool_hugehelp.h tool_ipfs.h tool_libinfo.h \
+ tool_main.h tool_msgs.h tool_operate.h tool_operhlp.h \
+ tool_paramhlp.h tool_parsecfg.h tool_progress.h tool_sdecls.h \
+ tool_setopt.h tool_setup.h tool_sleep.h tool_stderr.h \
+ tool_strdup.h tool_urlglob.h tool_util.h tool_version.h \
+ tool_vms.h tool_writeout.h tool_writeout_json.h tool_xattr.h \
+ var.h curl.rc
am__objects_5 = slist_wc.$(OBJEXT) tool_binmode.$(OBJEXT) \
tool_bname.$(OBJEXT) tool_cb_dbg.$(OBJEXT) \
tool_cb_hdr.$(OBJEXT) tool_cb_prg.$(OBJEXT) \
@@ -266,29 +269,33 @@ am__objects_5 = slist_wc.$(OBJEXT) tool_binmode.$(OBJEXT) \
tool_findfile.$(OBJEXT) tool_formparse.$(OBJEXT) \
tool_getparam.$(OBJEXT) tool_getpass.$(OBJEXT) \
tool_help.$(OBJEXT) tool_helpers.$(OBJEXT) \
- tool_hugehelp.$(OBJEXT) tool_libinfo.$(OBJEXT) \
- tool_listhelp.$(OBJEXT) tool_main.$(OBJEXT) \
- tool_msgs.$(OBJEXT) tool_operate.$(OBJEXT) \
- tool_operhlp.$(OBJEXT) tool_panykey.$(OBJEXT) \
- tool_paramhlp.$(OBJEXT) tool_parsecfg.$(OBJEXT) \
- tool_progress.$(OBJEXT) tool_strdup.$(OBJEXT) \
+ tool_hugehelp.$(OBJEXT) tool_ipfs.$(OBJEXT) \
+ tool_libinfo.$(OBJEXT) tool_listhelp.$(OBJEXT) \
+ tool_main.$(OBJEXT) tool_msgs.$(OBJEXT) tool_operate.$(OBJEXT) \
+ tool_operhlp.$(OBJEXT) tool_paramhlp.$(OBJEXT) \
+ tool_parsecfg.$(OBJEXT) tool_progress.$(OBJEXT) \
tool_setopt.$(OBJEXT) tool_sleep.$(OBJEXT) \
+ tool_stderr.$(OBJEXT) tool_strdup.$(OBJEXT) \
tool_urlglob.$(OBJEXT) tool_util.$(OBJEXT) tool_vms.$(OBJEXT) \
tool_writeout.$(OBJEXT) tool_writeout_json.$(OBJEXT) \
- tool_xattr.$(OBJEXT)
-am__objects_6 = ../lib/strtoofft.$(OBJEXT) ../lib/timediff.$(OBJEXT) \
- ../lib/nonblock.$(OBJEXT) ../lib/warnless.$(OBJEXT) \
- ../lib/curl_multibyte.$(OBJEXT) ../lib/version_win32.$(OBJEXT) \
- ../lib/dynbuf.$(OBJEXT)
+ tool_xattr.$(OBJEXT) var.$(OBJEXT)
+am__objects_6 = ../lib/base64.$(OBJEXT) \
+ ../lib/curl_multibyte.$(OBJEXT) ../lib/dynbuf.$(OBJEXT) \
+ ../lib/nonblock.$(OBJEXT) ../lib/strtoofft.$(OBJEXT) \
+ ../lib/timediff.$(OBJEXT) ../lib/version_win32.$(OBJEXT) \
+ ../lib/warnless.$(OBJEXT)
am__objects_7 = $(am__objects_5) $(am__objects_6) $(am__objects_3)
am__objects_8 = curl.$(OBJEXT)
-@OS_WINDOWS_TRUE@am__objects_9 = $(am__objects_8)
+@HAVE_WINDRES_TRUE@am__objects_9 = $(am__objects_8)
am_curl_OBJECTS = $(am__objects_7) $(am__objects_9)
curl_OBJECTS = $(am_curl_OBJECTS)
@USE_EXPLICIT_LIB_DEPS_FALSE@curl_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_FALSE@ $(top_builddir)/lib/libcurl.la
@USE_EXPLICIT_LIB_DEPS_TRUE@curl_DEPENDENCIES = \
@USE_EXPLICIT_LIB_DEPS_TRUE@ $(top_builddir)/lib/libcurl.la
+curl_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(curl_LDFLAGS) $(LDFLAGS) -o $@
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -304,8 +311,9 @@ am__v_at_1 =
DEFAULT_INCLUDES =
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__maybe_remake_depfiles = depfiles
-am__depfiles_remade = ../lib/$(DEPDIR)/curl_multibyte.Po \
- ../lib/$(DEPDIR)/dynbuf.Po \
+am__depfiles_remade = ../lib/$(DEPDIR)/base64.Po \
+ ../lib/$(DEPDIR)/curl_multibyte.Po ../lib/$(DEPDIR)/dynbuf.Po \
+ ../lib/$(DEPDIR)/libcurltool_la-base64.Plo \
../lib/$(DEPDIR)/libcurltool_la-curl_multibyte.Plo \
../lib/$(DEPDIR)/libcurltool_la-dynbuf.Plo \
../lib/$(DEPDIR)/libcurltool_la-nonblock.Plo \
@@ -337,18 +345,19 @@ am__depfiles_remade = ../lib/$(DEPDIR)/curl_multibyte.Po \
./$(DEPDIR)/libcurltool_la-tool_help.Plo \
./$(DEPDIR)/libcurltool_la-tool_helpers.Plo \
./$(DEPDIR)/libcurltool_la-tool_hugehelp.Plo \
+ ./$(DEPDIR)/libcurltool_la-tool_ipfs.Plo \
./$(DEPDIR)/libcurltool_la-tool_libinfo.Plo \
./$(DEPDIR)/libcurltool_la-tool_listhelp.Plo \
./$(DEPDIR)/libcurltool_la-tool_main.Plo \
./$(DEPDIR)/libcurltool_la-tool_msgs.Plo \
./$(DEPDIR)/libcurltool_la-tool_operate.Plo \
./$(DEPDIR)/libcurltool_la-tool_operhlp.Plo \
- ./$(DEPDIR)/libcurltool_la-tool_panykey.Plo \
./$(DEPDIR)/libcurltool_la-tool_paramhlp.Plo \
./$(DEPDIR)/libcurltool_la-tool_parsecfg.Plo \
./$(DEPDIR)/libcurltool_la-tool_progress.Plo \
./$(DEPDIR)/libcurltool_la-tool_setopt.Plo \
./$(DEPDIR)/libcurltool_la-tool_sleep.Plo \
+ ./$(DEPDIR)/libcurltool_la-tool_stderr.Plo \
./$(DEPDIR)/libcurltool_la-tool_strdup.Plo \
./$(DEPDIR)/libcurltool_la-tool_urlglob.Plo \
./$(DEPDIR)/libcurltool_la-tool_util.Plo \
@@ -356,26 +365,28 @@ am__depfiles_remade = ../lib/$(DEPDIR)/curl_multibyte.Po \
./$(DEPDIR)/libcurltool_la-tool_writeout.Plo \
./$(DEPDIR)/libcurltool_la-tool_writeout_json.Plo \
./$(DEPDIR)/libcurltool_la-tool_xattr.Plo \
- ./$(DEPDIR)/slist_wc.Po ./$(DEPDIR)/tool_binmode.Po \
- ./$(DEPDIR)/tool_bname.Po ./$(DEPDIR)/tool_cb_dbg.Po \
- ./$(DEPDIR)/tool_cb_hdr.Po ./$(DEPDIR)/tool_cb_prg.Po \
- ./$(DEPDIR)/tool_cb_rea.Po ./$(DEPDIR)/tool_cb_see.Po \
- ./$(DEPDIR)/tool_cb_wrt.Po ./$(DEPDIR)/tool_cfgable.Po \
- ./$(DEPDIR)/tool_dirhie.Po ./$(DEPDIR)/tool_doswin.Po \
- ./$(DEPDIR)/tool_easysrc.Po ./$(DEPDIR)/tool_filetime.Po \
- ./$(DEPDIR)/tool_findfile.Po ./$(DEPDIR)/tool_formparse.Po \
- ./$(DEPDIR)/tool_getparam.Po ./$(DEPDIR)/tool_getpass.Po \
- ./$(DEPDIR)/tool_help.Po ./$(DEPDIR)/tool_helpers.Po \
- ./$(DEPDIR)/tool_hugehelp.Po ./$(DEPDIR)/tool_libinfo.Po \
+ ./$(DEPDIR)/libcurltool_la-var.Plo ./$(DEPDIR)/slist_wc.Po \
+ ./$(DEPDIR)/tool_binmode.Po ./$(DEPDIR)/tool_bname.Po \
+ ./$(DEPDIR)/tool_cb_dbg.Po ./$(DEPDIR)/tool_cb_hdr.Po \
+ ./$(DEPDIR)/tool_cb_prg.Po ./$(DEPDIR)/tool_cb_rea.Po \
+ ./$(DEPDIR)/tool_cb_see.Po ./$(DEPDIR)/tool_cb_wrt.Po \
+ ./$(DEPDIR)/tool_cfgable.Po ./$(DEPDIR)/tool_dirhie.Po \
+ ./$(DEPDIR)/tool_doswin.Po ./$(DEPDIR)/tool_easysrc.Po \
+ ./$(DEPDIR)/tool_filetime.Po ./$(DEPDIR)/tool_findfile.Po \
+ ./$(DEPDIR)/tool_formparse.Po ./$(DEPDIR)/tool_getparam.Po \
+ ./$(DEPDIR)/tool_getpass.Po ./$(DEPDIR)/tool_help.Po \
+ ./$(DEPDIR)/tool_helpers.Po ./$(DEPDIR)/tool_hugehelp.Po \
+ ./$(DEPDIR)/tool_ipfs.Po ./$(DEPDIR)/tool_libinfo.Po \
./$(DEPDIR)/tool_listhelp.Po ./$(DEPDIR)/tool_main.Po \
./$(DEPDIR)/tool_msgs.Po ./$(DEPDIR)/tool_operate.Po \
- ./$(DEPDIR)/tool_operhlp.Po ./$(DEPDIR)/tool_panykey.Po \
- ./$(DEPDIR)/tool_paramhlp.Po ./$(DEPDIR)/tool_parsecfg.Po \
- ./$(DEPDIR)/tool_progress.Po ./$(DEPDIR)/tool_setopt.Po \
- ./$(DEPDIR)/tool_sleep.Po ./$(DEPDIR)/tool_strdup.Po \
+ ./$(DEPDIR)/tool_operhlp.Po ./$(DEPDIR)/tool_paramhlp.Po \
+ ./$(DEPDIR)/tool_parsecfg.Po ./$(DEPDIR)/tool_progress.Po \
+ ./$(DEPDIR)/tool_setopt.Po ./$(DEPDIR)/tool_sleep.Po \
+ ./$(DEPDIR)/tool_stderr.Po ./$(DEPDIR)/tool_strdup.Po \
./$(DEPDIR)/tool_urlglob.Po ./$(DEPDIR)/tool_util.Po \
./$(DEPDIR)/tool_vms.Po ./$(DEPDIR)/tool_writeout.Po \
- ./$(DEPDIR)/tool_writeout_json.Po ./$(DEPDIR)/tool_xattr.Po
+ ./$(DEPDIR)/tool_writeout_json.Po ./$(DEPDIR)/tool_xattr.Po \
+ ./$(DEPDIR)/var.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -468,6 +479,8 @@ am__relativize = \
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APACHECTL = @APACHECTL@
+APXS = @APXS@
AR = @AR@
AR_FLAGS = @AR_FLAGS@
AS = @AS@
@@ -476,6 +489,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@
+CADDY = @CADDY@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
@@ -539,6 +553,8 @@ HAVE_LIBZ = @HAVE_LIBZ@
HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
HAVE_PROTO_BSDSOCKET_H = @HAVE_PROTO_BSDSOCKET_H@
HAVE_ZSTD = @HAVE_ZSTD@
+HTTPD = @HTTPD@
+HTTPD_NGHTTPX = @HTTPD_NGHTTPX@
IDN_ENABLED = @IDN_ENABLED@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -569,8 +585,7 @@ NM = @NM@
NMEDIT = @NMEDIT@
# Use the C locale to ensure that only ASCII characters appear in the
# embedded text.
-NROFF = env LC_ALL=C @NROFF@ @MANOPT@ # figured out by the configure script
-NSS_LIBS = @NSS_LIBS@
+NROFF = env LC_ALL=C @NROFF@ @MANOPT@ 2>/dev/null # figured out by the configure script
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
@@ -601,6 +616,7 @@ SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@
SUPPORT_FEATURES = @SUPPORT_FEATURES@
SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_NGHTTPX = @TEST_NGHTTPX@
USE_ARES = @USE_ARES@
USE_BEARSSL = @USE_BEARSSL@
USE_GNUTLS = @USE_GNUTLS@
@@ -614,9 +630,8 @@ USE_NGHTTP2 = @USE_NGHTTP2@
USE_NGHTTP3 = @USE_NGHTTP3@
USE_NGTCP2 = @USE_NGTCP2@
USE_NGTCP2_CRYPTO_GNUTLS = @USE_NGTCP2_CRYPTO_GNUTLS@
-USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@
+USE_NGTCP2_CRYPTO_QUICTLS = @USE_NGTCP2_CRYPTO_QUICTLS@
USE_NGTCP2_CRYPTO_WOLFSSL = @USE_NGTCP2_CRYPTO_WOLFSSL@
-USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_RUSTLS = @USE_RUSTLS@
@@ -695,7 +710,7 @@ top_srcdir = @top_srcdir@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -725,30 +740,37 @@ AUTOMAKE_OPTIONS = foreign nostdinc
# $(top_srcdir)/src is for curl's src/tool_setup.h and "curl-private" files
AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/lib \
-I$(top_builddir)/src -I$(top_srcdir)/lib -I$(top_srcdir)/src \
- $(am__append_1)
+ $(am__append_1) -DBUILDING_CURL
SUBDIRS = ../docs
+# libcurl sources to include in curltool lib we use for test binaries
+CURLTOOL_LIBCURL_CFILES = \
+ ../lib/base64.c \
+ ../lib/dynbuf.c
+
+
# libcurl has sources that provide functions named curlx_* that aren't part of
-# the official API, but we re-use the code here to avoid duplication.
+# the official API, but we reuse the code here to avoid duplication.
CURLX_CFILES = \
+ ../lib/base64.c \
+ ../lib/curl_multibyte.c \
+ ../lib/dynbuf.c \
+ ../lib/nonblock.c \
../lib/strtoofft.c \
../lib/timediff.c \
- ../lib/nonblock.c \
- ../lib/warnless.c \
- ../lib/curl_multibyte.c \
../lib/version_win32.c \
- ../lib/dynbuf.c
+ ../lib/warnless.c
CURLX_HFILES = \
+ ../lib/curl_ctype.h \
+ ../lib/curl_multibyte.h \
../lib/curl_setup.h \
+ ../lib/dynbuf.h \
+ ../lib/nonblock.h \
../lib/strtoofft.h \
../lib/timediff.h \
- ../lib/nonblock.h \
- ../lib/warnless.h \
- ../lib/curl_ctype.h \
- ../lib/curl_multibyte.h \
../lib/version_win32.h \
- ../lib/dynbuf.h
+ ../lib/warnless.h
CURL_CFILES = \
slist_wc.c \
@@ -772,25 +794,27 @@ CURL_CFILES = \
tool_help.c \
tool_helpers.c \
tool_hugehelp.c \
+ tool_ipfs.c \
tool_libinfo.c \
tool_listhelp.c \
tool_main.c \
tool_msgs.c \
tool_operate.c \
tool_operhlp.c \
- tool_panykey.c \
tool_paramhlp.c \
tool_parsecfg.c \
tool_progress.c \
- tool_strdup.c \
tool_setopt.c \
tool_sleep.c \
+ tool_stderr.c \
+ tool_strdup.c \
tool_urlglob.c \
tool_util.c \
tool_vms.c \
tool_writeout.c \
tool_writeout_json.c \
- tool_xattr.c
+ tool_xattr.c \
+ var.c
CURL_HFILES = \
slist_wc.h \
@@ -814,12 +838,12 @@ CURL_HFILES = \
tool_help.h \
tool_helpers.h \
tool_hugehelp.h \
+ tool_ipfs.h \
tool_libinfo.h \
tool_main.h \
tool_msgs.h \
tool_operate.h \
tool_operhlp.h \
- tool_panykey.h \
tool_paramhlp.h \
tool_parsecfg.h \
tool_progress.h \
@@ -827,6 +851,7 @@ CURL_HFILES = \
tool_setopt.h \
tool_setup.h \
tool_sleep.h \
+ tool_stderr.h \
tool_strdup.h \
tool_urlglob.h \
tool_util.h \
@@ -834,7 +859,8 @@ CURL_HFILES = \
tool_vms.h \
tool_writeout.h \
tool_writeout_json.h \
- tool_xattr.h
+ tool_xattr.h \
+ var.h
CURL_RCFILES = curl.rc
@@ -843,7 +869,8 @@ CURL_FILES = $(CURL_CFILES) $(CURLX_CFILES) $(CURL_HFILES)
# CURL_FILES comes from Makefile.inc
curl_SOURCES = $(CURL_FILES) $(am__append_2)
-@USE_EXPLICIT_LIB_DEPS_FALSE@curl_LDADD = $(top_builddir)/lib/libcurl.la @NSS_LIBS@ @SSL_LIBS@ @ZLIB_LIBS@ @CURL_NETWORK_AND_TIME_LIBS@
+curl_LDFLAGS = $(AM_LDFLAGS) $(CURL_LDFLAGS_BIN)
+@USE_EXPLICIT_LIB_DEPS_FALSE@curl_LDADD = $(top_builddir)/lib/libcurl.la @SSL_LIBS@ @ZLIB_LIBS@ @CURL_NETWORK_AND_TIME_LIBS@
@USE_EXPLICIT_LIB_DEPS_TRUE@curl_LDADD = $(top_builddir)/lib/libcurl.la @LIBCURL_LIBS@
# if unit tests are enabled, build a static library to link them with
@@ -855,8 +882,8 @@ curl_SOURCES = $(CURL_FILES) $(am__append_2)
@BUILD_UNITTESTS_TRUE@libcurltool_la_LDFLAGS = -static $(LINKFLAGS)
@BUILD_UNITTESTS_TRUE@libcurltool_la_SOURCES = $(CURL_FILES)
CLEANFILES = tool_hugehelp.c
-EXTRA_DIST = mkhelp.pl makefile.dj \
- Makefile.m32 makefile.amiga curl.rc Makefile.inc CMakeLists.txt
+EXTRA_DIST = mkhelp.pl \
+ Makefile.mk curl.rc Makefile.inc CMakeLists.txt .checksrc
# Use absolute directory to disable VPATH
@@ -975,41 +1002,45 @@ clean-noinstLTLIBRARIES:
../lib/$(DEPDIR)/$(am__dirstamp):
@$(MKDIR_P) ../lib/$(DEPDIR)
@: > ../lib/$(DEPDIR)/$(am__dirstamp)
-../lib/libcurltool_la-strtoofft.lo: ../lib/$(am__dirstamp) \
+../lib/libcurltool_la-base64.lo: ../lib/$(am__dirstamp) \
../lib/$(DEPDIR)/$(am__dirstamp)
-../lib/libcurltool_la-timediff.lo: ../lib/$(am__dirstamp) \
+../lib/libcurltool_la-curl_multibyte.lo: ../lib/$(am__dirstamp) \
+ ../lib/$(DEPDIR)/$(am__dirstamp)
+../lib/libcurltool_la-dynbuf.lo: ../lib/$(am__dirstamp) \
../lib/$(DEPDIR)/$(am__dirstamp)
../lib/libcurltool_la-nonblock.lo: ../lib/$(am__dirstamp) \
../lib/$(DEPDIR)/$(am__dirstamp)
-../lib/libcurltool_la-warnless.lo: ../lib/$(am__dirstamp) \
+../lib/libcurltool_la-strtoofft.lo: ../lib/$(am__dirstamp) \
../lib/$(DEPDIR)/$(am__dirstamp)
-../lib/libcurltool_la-curl_multibyte.lo: ../lib/$(am__dirstamp) \
+../lib/libcurltool_la-timediff.lo: ../lib/$(am__dirstamp) \
../lib/$(DEPDIR)/$(am__dirstamp)
../lib/libcurltool_la-version_win32.lo: ../lib/$(am__dirstamp) \
../lib/$(DEPDIR)/$(am__dirstamp)
-../lib/libcurltool_la-dynbuf.lo: ../lib/$(am__dirstamp) \
+../lib/libcurltool_la-warnless.lo: ../lib/$(am__dirstamp) \
../lib/$(DEPDIR)/$(am__dirstamp)
libcurltool.la: $(libcurltool_la_OBJECTS) $(libcurltool_la_DEPENDENCIES) $(EXTRA_libcurltool_la_DEPENDENCIES)
$(AM_V_CCLD)$(libcurltool_la_LINK) $(am_libcurltool_la_rpath) $(libcurltool_la_OBJECTS) $(libcurltool_la_LIBADD) $(LIBS)
-../lib/strtoofft.$(OBJEXT): ../lib/$(am__dirstamp) \
+../lib/base64.$(OBJEXT): ../lib/$(am__dirstamp) \
../lib/$(DEPDIR)/$(am__dirstamp)
-../lib/timediff.$(OBJEXT): ../lib/$(am__dirstamp) \
+../lib/curl_multibyte.$(OBJEXT): ../lib/$(am__dirstamp) \
+ ../lib/$(DEPDIR)/$(am__dirstamp)
+../lib/dynbuf.$(OBJEXT): ../lib/$(am__dirstamp) \
../lib/$(DEPDIR)/$(am__dirstamp)
../lib/nonblock.$(OBJEXT): ../lib/$(am__dirstamp) \
../lib/$(DEPDIR)/$(am__dirstamp)
-../lib/warnless.$(OBJEXT): ../lib/$(am__dirstamp) \
+../lib/strtoofft.$(OBJEXT): ../lib/$(am__dirstamp) \
../lib/$(DEPDIR)/$(am__dirstamp)
-../lib/curl_multibyte.$(OBJEXT): ../lib/$(am__dirstamp) \
+../lib/timediff.$(OBJEXT): ../lib/$(am__dirstamp) \
../lib/$(DEPDIR)/$(am__dirstamp)
../lib/version_win32.$(OBJEXT): ../lib/$(am__dirstamp) \
../lib/$(DEPDIR)/$(am__dirstamp)
-../lib/dynbuf.$(OBJEXT): ../lib/$(am__dirstamp) \
+../lib/warnless.$(OBJEXT): ../lib/$(am__dirstamp) \
../lib/$(DEPDIR)/$(am__dirstamp)
curl$(EXEEXT): $(curl_OBJECTS) $(curl_DEPENDENCIES) $(EXTRA_curl_DEPENDENCIES)
@rm -f curl$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(curl_OBJECTS) $(curl_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(curl_LINK) $(curl_OBJECTS) $(curl_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -1019,8 +1050,10 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
+@AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/base64.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/curl_multibyte.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/dynbuf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/libcurltool_la-base64.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/libcurltool_la-curl_multibyte.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/libcurltool_la-dynbuf.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/libcurltool_la-nonblock.Plo@am__quote@ # am--include-marker
@@ -1054,18 +1087,19 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_help.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_helpers.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_hugehelp.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_ipfs.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_libinfo.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_listhelp.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_main.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_msgs.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_operate.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_operhlp.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_panykey.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_paramhlp.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_parsecfg.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_progress.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_setopt.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_sleep.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_stderr.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_strdup.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_urlglob.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_util.Plo@am__quote@ # am--include-marker
@@ -1073,6 +1107,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_writeout.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_writeout_json.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_xattr.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-var.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slist_wc.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_binmode.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_bname.Po@am__quote@ # am--include-marker
@@ -1094,18 +1129,19 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_help.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_helpers.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_hugehelp.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_ipfs.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_libinfo.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_listhelp.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_main.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_msgs.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_operate.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_operhlp.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_panykey.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_paramhlp.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_parsecfg.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_progress.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_setopt.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_sleep.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_stderr.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_strdup.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_urlglob.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_util.Po@am__quote@ # am--include-marker
@@ -1113,6 +1149,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_writeout.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_writeout_json.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_xattr.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/var.Po@am__quote@ # am--include-marker
$(am__depfiles_remade):
@$(MKDIR_P) $(@D)
@@ -1291,6 +1328,13 @@ libcurltool_la-tool_hugehelp.lo: tool_hugehelp.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o libcurltool_la-tool_hugehelp.lo `test -f 'tool_hugehelp.c' || echo '$(srcdir)/'`tool_hugehelp.c
+libcurltool_la-tool_ipfs.lo: tool_ipfs.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT libcurltool_la-tool_ipfs.lo -MD -MP -MF $(DEPDIR)/libcurltool_la-tool_ipfs.Tpo -c -o libcurltool_la-tool_ipfs.lo `test -f 'tool_ipfs.c' || echo '$(srcdir)/'`tool_ipfs.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurltool_la-tool_ipfs.Tpo $(DEPDIR)/libcurltool_la-tool_ipfs.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tool_ipfs.c' object='libcurltool_la-tool_ipfs.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o libcurltool_la-tool_ipfs.lo `test -f 'tool_ipfs.c' || echo '$(srcdir)/'`tool_ipfs.c
+
libcurltool_la-tool_libinfo.lo: tool_libinfo.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT libcurltool_la-tool_libinfo.lo -MD -MP -MF $(DEPDIR)/libcurltool_la-tool_libinfo.Tpo -c -o libcurltool_la-tool_libinfo.lo `test -f 'tool_libinfo.c' || echo '$(srcdir)/'`tool_libinfo.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurltool_la-tool_libinfo.Tpo $(DEPDIR)/libcurltool_la-tool_libinfo.Plo
@@ -1333,13 +1377,6 @@ libcurltool_la-tool_operhlp.lo: tool_operhlp.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o libcurltool_la-tool_operhlp.lo `test -f 'tool_operhlp.c' || echo '$(srcdir)/'`tool_operhlp.c
-libcurltool_la-tool_panykey.lo: tool_panykey.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT libcurltool_la-tool_panykey.lo -MD -MP -MF $(DEPDIR)/libcurltool_la-tool_panykey.Tpo -c -o libcurltool_la-tool_panykey.lo `test -f 'tool_panykey.c' || echo '$(srcdir)/'`tool_panykey.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurltool_la-tool_panykey.Tpo $(DEPDIR)/libcurltool_la-tool_panykey.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tool_panykey.c' object='libcurltool_la-tool_panykey.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o libcurltool_la-tool_panykey.lo `test -f 'tool_panykey.c' || echo '$(srcdir)/'`tool_panykey.c
-
libcurltool_la-tool_paramhlp.lo: tool_paramhlp.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT libcurltool_la-tool_paramhlp.lo -MD -MP -MF $(DEPDIR)/libcurltool_la-tool_paramhlp.Tpo -c -o libcurltool_la-tool_paramhlp.lo `test -f 'tool_paramhlp.c' || echo '$(srcdir)/'`tool_paramhlp.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurltool_la-tool_paramhlp.Tpo $(DEPDIR)/libcurltool_la-tool_paramhlp.Plo
@@ -1361,13 +1398,6 @@ libcurltool_la-tool_progress.lo: tool_progress.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o libcurltool_la-tool_progress.lo `test -f 'tool_progress.c' || echo '$(srcdir)/'`tool_progress.c
-libcurltool_la-tool_strdup.lo: tool_strdup.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT libcurltool_la-tool_strdup.lo -MD -MP -MF $(DEPDIR)/libcurltool_la-tool_strdup.Tpo -c -o libcurltool_la-tool_strdup.lo `test -f 'tool_strdup.c' || echo '$(srcdir)/'`tool_strdup.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurltool_la-tool_strdup.Tpo $(DEPDIR)/libcurltool_la-tool_strdup.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tool_strdup.c' object='libcurltool_la-tool_strdup.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o libcurltool_la-tool_strdup.lo `test -f 'tool_strdup.c' || echo '$(srcdir)/'`tool_strdup.c
-
libcurltool_la-tool_setopt.lo: tool_setopt.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT libcurltool_la-tool_setopt.lo -MD -MP -MF $(DEPDIR)/libcurltool_la-tool_setopt.Tpo -c -o libcurltool_la-tool_setopt.lo `test -f 'tool_setopt.c' || echo '$(srcdir)/'`tool_setopt.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurltool_la-tool_setopt.Tpo $(DEPDIR)/libcurltool_la-tool_setopt.Plo
@@ -1382,6 +1412,20 @@ libcurltool_la-tool_sleep.lo: tool_sleep.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o libcurltool_la-tool_sleep.lo `test -f 'tool_sleep.c' || echo '$(srcdir)/'`tool_sleep.c
+libcurltool_la-tool_stderr.lo: tool_stderr.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT libcurltool_la-tool_stderr.lo -MD -MP -MF $(DEPDIR)/libcurltool_la-tool_stderr.Tpo -c -o libcurltool_la-tool_stderr.lo `test -f 'tool_stderr.c' || echo '$(srcdir)/'`tool_stderr.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurltool_la-tool_stderr.Tpo $(DEPDIR)/libcurltool_la-tool_stderr.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tool_stderr.c' object='libcurltool_la-tool_stderr.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o libcurltool_la-tool_stderr.lo `test -f 'tool_stderr.c' || echo '$(srcdir)/'`tool_stderr.c
+
+libcurltool_la-tool_strdup.lo: tool_strdup.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT libcurltool_la-tool_strdup.lo -MD -MP -MF $(DEPDIR)/libcurltool_la-tool_strdup.Tpo -c -o libcurltool_la-tool_strdup.lo `test -f 'tool_strdup.c' || echo '$(srcdir)/'`tool_strdup.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurltool_la-tool_strdup.Tpo $(DEPDIR)/libcurltool_la-tool_strdup.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tool_strdup.c' object='libcurltool_la-tool_strdup.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o libcurltool_la-tool_strdup.lo `test -f 'tool_strdup.c' || echo '$(srcdir)/'`tool_strdup.c
+
libcurltool_la-tool_urlglob.lo: tool_urlglob.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT libcurltool_la-tool_urlglob.lo -MD -MP -MF $(DEPDIR)/libcurltool_la-tool_urlglob.Tpo -c -o libcurltool_la-tool_urlglob.lo `test -f 'tool_urlglob.c' || echo '$(srcdir)/'`tool_urlglob.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurltool_la-tool_urlglob.Tpo $(DEPDIR)/libcurltool_la-tool_urlglob.Plo
@@ -1424,19 +1468,33 @@ libcurltool_la-tool_xattr.lo: tool_xattr.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o libcurltool_la-tool_xattr.lo `test -f 'tool_xattr.c' || echo '$(srcdir)/'`tool_xattr.c
-../lib/libcurltool_la-strtoofft.lo: ../lib/strtoofft.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT ../lib/libcurltool_la-strtoofft.lo -MD -MP -MF ../lib/$(DEPDIR)/libcurltool_la-strtoofft.Tpo -c -o ../lib/libcurltool_la-strtoofft.lo `test -f '../lib/strtoofft.c' || echo '$(srcdir)/'`../lib/strtoofft.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/libcurltool_la-strtoofft.Tpo ../lib/$(DEPDIR)/libcurltool_la-strtoofft.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/strtoofft.c' object='../lib/libcurltool_la-strtoofft.lo' libtool=yes @AMDEPBACKSLASH@
+libcurltool_la-var.lo: var.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT libcurltool_la-var.lo -MD -MP -MF $(DEPDIR)/libcurltool_la-var.Tpo -c -o libcurltool_la-var.lo `test -f 'var.c' || echo '$(srcdir)/'`var.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurltool_la-var.Tpo $(DEPDIR)/libcurltool_la-var.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='var.c' object='libcurltool_la-var.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o ../lib/libcurltool_la-strtoofft.lo `test -f '../lib/strtoofft.c' || echo '$(srcdir)/'`../lib/strtoofft.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o libcurltool_la-var.lo `test -f 'var.c' || echo '$(srcdir)/'`var.c
-../lib/libcurltool_la-timediff.lo: ../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT ../lib/libcurltool_la-timediff.lo -MD -MP -MF ../lib/$(DEPDIR)/libcurltool_la-timediff.Tpo -c -o ../lib/libcurltool_la-timediff.lo `test -f '../lib/timediff.c' || echo '$(srcdir)/'`../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/libcurltool_la-timediff.Tpo ../lib/$(DEPDIR)/libcurltool_la-timediff.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/timediff.c' object='../lib/libcurltool_la-timediff.lo' libtool=yes @AMDEPBACKSLASH@
+../lib/libcurltool_la-base64.lo: ../lib/base64.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT ../lib/libcurltool_la-base64.lo -MD -MP -MF ../lib/$(DEPDIR)/libcurltool_la-base64.Tpo -c -o ../lib/libcurltool_la-base64.lo `test -f '../lib/base64.c' || echo '$(srcdir)/'`../lib/base64.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/libcurltool_la-base64.Tpo ../lib/$(DEPDIR)/libcurltool_la-base64.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/base64.c' object='../lib/libcurltool_la-base64.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o ../lib/libcurltool_la-timediff.lo `test -f '../lib/timediff.c' || echo '$(srcdir)/'`../lib/timediff.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o ../lib/libcurltool_la-base64.lo `test -f '../lib/base64.c' || echo '$(srcdir)/'`../lib/base64.c
+
+../lib/libcurltool_la-curl_multibyte.lo: ../lib/curl_multibyte.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT ../lib/libcurltool_la-curl_multibyte.lo -MD -MP -MF ../lib/$(DEPDIR)/libcurltool_la-curl_multibyte.Tpo -c -o ../lib/libcurltool_la-curl_multibyte.lo `test -f '../lib/curl_multibyte.c' || echo '$(srcdir)/'`../lib/curl_multibyte.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/libcurltool_la-curl_multibyte.Tpo ../lib/$(DEPDIR)/libcurltool_la-curl_multibyte.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/curl_multibyte.c' object='../lib/libcurltool_la-curl_multibyte.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o ../lib/libcurltool_la-curl_multibyte.lo `test -f '../lib/curl_multibyte.c' || echo '$(srcdir)/'`../lib/curl_multibyte.c
+
+../lib/libcurltool_la-dynbuf.lo: ../lib/dynbuf.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT ../lib/libcurltool_la-dynbuf.lo -MD -MP -MF ../lib/$(DEPDIR)/libcurltool_la-dynbuf.Tpo -c -o ../lib/libcurltool_la-dynbuf.lo `test -f '../lib/dynbuf.c' || echo '$(srcdir)/'`../lib/dynbuf.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/libcurltool_la-dynbuf.Tpo ../lib/$(DEPDIR)/libcurltool_la-dynbuf.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/dynbuf.c' object='../lib/libcurltool_la-dynbuf.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o ../lib/libcurltool_la-dynbuf.lo `test -f '../lib/dynbuf.c' || echo '$(srcdir)/'`../lib/dynbuf.c
../lib/libcurltool_la-nonblock.lo: ../lib/nonblock.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT ../lib/libcurltool_la-nonblock.lo -MD -MP -MF ../lib/$(DEPDIR)/libcurltool_la-nonblock.Tpo -c -o ../lib/libcurltool_la-nonblock.lo `test -f '../lib/nonblock.c' || echo '$(srcdir)/'`../lib/nonblock.c
@@ -1445,19 +1503,19 @@ libcurltool_la-tool_xattr.lo: tool_xattr.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o ../lib/libcurltool_la-nonblock.lo `test -f '../lib/nonblock.c' || echo '$(srcdir)/'`../lib/nonblock.c
-../lib/libcurltool_la-warnless.lo: ../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT ../lib/libcurltool_la-warnless.lo -MD -MP -MF ../lib/$(DEPDIR)/libcurltool_la-warnless.Tpo -c -o ../lib/libcurltool_la-warnless.lo `test -f '../lib/warnless.c' || echo '$(srcdir)/'`../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/libcurltool_la-warnless.Tpo ../lib/$(DEPDIR)/libcurltool_la-warnless.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/warnless.c' object='../lib/libcurltool_la-warnless.lo' libtool=yes @AMDEPBACKSLASH@
+../lib/libcurltool_la-strtoofft.lo: ../lib/strtoofft.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT ../lib/libcurltool_la-strtoofft.lo -MD -MP -MF ../lib/$(DEPDIR)/libcurltool_la-strtoofft.Tpo -c -o ../lib/libcurltool_la-strtoofft.lo `test -f '../lib/strtoofft.c' || echo '$(srcdir)/'`../lib/strtoofft.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/libcurltool_la-strtoofft.Tpo ../lib/$(DEPDIR)/libcurltool_la-strtoofft.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/strtoofft.c' object='../lib/libcurltool_la-strtoofft.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o ../lib/libcurltool_la-warnless.lo `test -f '../lib/warnless.c' || echo '$(srcdir)/'`../lib/warnless.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o ../lib/libcurltool_la-strtoofft.lo `test -f '../lib/strtoofft.c' || echo '$(srcdir)/'`../lib/strtoofft.c
-../lib/libcurltool_la-curl_multibyte.lo: ../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT ../lib/libcurltool_la-curl_multibyte.lo -MD -MP -MF ../lib/$(DEPDIR)/libcurltool_la-curl_multibyte.Tpo -c -o ../lib/libcurltool_la-curl_multibyte.lo `test -f '../lib/curl_multibyte.c' || echo '$(srcdir)/'`../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/libcurltool_la-curl_multibyte.Tpo ../lib/$(DEPDIR)/libcurltool_la-curl_multibyte.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/curl_multibyte.c' object='../lib/libcurltool_la-curl_multibyte.lo' libtool=yes @AMDEPBACKSLASH@
+../lib/libcurltool_la-timediff.lo: ../lib/timediff.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT ../lib/libcurltool_la-timediff.lo -MD -MP -MF ../lib/$(DEPDIR)/libcurltool_la-timediff.Tpo -c -o ../lib/libcurltool_la-timediff.lo `test -f '../lib/timediff.c' || echo '$(srcdir)/'`../lib/timediff.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/libcurltool_la-timediff.Tpo ../lib/$(DEPDIR)/libcurltool_la-timediff.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/timediff.c' object='../lib/libcurltool_la-timediff.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o ../lib/libcurltool_la-curl_multibyte.lo `test -f '../lib/curl_multibyte.c' || echo '$(srcdir)/'`../lib/curl_multibyte.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o ../lib/libcurltool_la-timediff.lo `test -f '../lib/timediff.c' || echo '$(srcdir)/'`../lib/timediff.c
../lib/libcurltool_la-version_win32.lo: ../lib/version_win32.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT ../lib/libcurltool_la-version_win32.lo -MD -MP -MF ../lib/$(DEPDIR)/libcurltool_la-version_win32.Tpo -c -o ../lib/libcurltool_la-version_win32.lo `test -f '../lib/version_win32.c' || echo '$(srcdir)/'`../lib/version_win32.c
@@ -1466,12 +1524,12 @@ libcurltool_la-tool_xattr.lo: tool_xattr.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o ../lib/libcurltool_la-version_win32.lo `test -f '../lib/version_win32.c' || echo '$(srcdir)/'`../lib/version_win32.c
-../lib/libcurltool_la-dynbuf.lo: ../lib/dynbuf.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT ../lib/libcurltool_la-dynbuf.lo -MD -MP -MF ../lib/$(DEPDIR)/libcurltool_la-dynbuf.Tpo -c -o ../lib/libcurltool_la-dynbuf.lo `test -f '../lib/dynbuf.c' || echo '$(srcdir)/'`../lib/dynbuf.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/libcurltool_la-dynbuf.Tpo ../lib/$(DEPDIR)/libcurltool_la-dynbuf.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/dynbuf.c' object='../lib/libcurltool_la-dynbuf.lo' libtool=yes @AMDEPBACKSLASH@
+../lib/libcurltool_la-warnless.lo: ../lib/warnless.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT ../lib/libcurltool_la-warnless.lo -MD -MP -MF ../lib/$(DEPDIR)/libcurltool_la-warnless.Tpo -c -o ../lib/libcurltool_la-warnless.lo `test -f '../lib/warnless.c' || echo '$(srcdir)/'`../lib/warnless.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/libcurltool_la-warnless.Tpo ../lib/$(DEPDIR)/libcurltool_la-warnless.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/warnless.c' object='../lib/libcurltool_la-warnless.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o ../lib/libcurltool_la-dynbuf.lo `test -f '../lib/dynbuf.c' || echo '$(srcdir)/'`../lib/dynbuf.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o ../lib/libcurltool_la-warnless.lo `test -f '../lib/warnless.c' || echo '$(srcdir)/'`../lib/warnless.c
mostlyclean-libtool:
-rm -f *.lo
@@ -1684,8 +1742,10 @@ clean-am: clean-binPROGRAMS clean-generic clean-libtool \
clean-noinstLTLIBRARIES mostlyclean-am
distclean: distclean-recursive
- -rm -f ../lib/$(DEPDIR)/curl_multibyte.Po
+ -rm -f ../lib/$(DEPDIR)/base64.Po
+ -rm -f ../lib/$(DEPDIR)/curl_multibyte.Po
-rm -f ../lib/$(DEPDIR)/dynbuf.Po
+ -rm -f ../lib/$(DEPDIR)/libcurltool_la-base64.Plo
-rm -f ../lib/$(DEPDIR)/libcurltool_la-curl_multibyte.Plo
-rm -f ../lib/$(DEPDIR)/libcurltool_la-dynbuf.Plo
-rm -f ../lib/$(DEPDIR)/libcurltool_la-nonblock.Plo
@@ -1719,18 +1779,19 @@ distclean: distclean-recursive
-rm -f ./$(DEPDIR)/libcurltool_la-tool_help.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_helpers.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_hugehelp.Plo
+ -rm -f ./$(DEPDIR)/libcurltool_la-tool_ipfs.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_libinfo.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_listhelp.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_main.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_msgs.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_operate.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_operhlp.Plo
- -rm -f ./$(DEPDIR)/libcurltool_la-tool_panykey.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_paramhlp.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_parsecfg.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_progress.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_setopt.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_sleep.Plo
+ -rm -f ./$(DEPDIR)/libcurltool_la-tool_stderr.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_strdup.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_urlglob.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_util.Plo
@@ -1738,6 +1799,7 @@ distclean: distclean-recursive
-rm -f ./$(DEPDIR)/libcurltool_la-tool_writeout.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_writeout_json.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_xattr.Plo
+ -rm -f ./$(DEPDIR)/libcurltool_la-var.Plo
-rm -f ./$(DEPDIR)/slist_wc.Po
-rm -f ./$(DEPDIR)/tool_binmode.Po
-rm -f ./$(DEPDIR)/tool_bname.Po
@@ -1759,18 +1821,19 @@ distclean: distclean-recursive
-rm -f ./$(DEPDIR)/tool_help.Po
-rm -f ./$(DEPDIR)/tool_helpers.Po
-rm -f ./$(DEPDIR)/tool_hugehelp.Po
+ -rm -f ./$(DEPDIR)/tool_ipfs.Po
-rm -f ./$(DEPDIR)/tool_libinfo.Po
-rm -f ./$(DEPDIR)/tool_listhelp.Po
-rm -f ./$(DEPDIR)/tool_main.Po
-rm -f ./$(DEPDIR)/tool_msgs.Po
-rm -f ./$(DEPDIR)/tool_operate.Po
-rm -f ./$(DEPDIR)/tool_operhlp.Po
- -rm -f ./$(DEPDIR)/tool_panykey.Po
-rm -f ./$(DEPDIR)/tool_paramhlp.Po
-rm -f ./$(DEPDIR)/tool_parsecfg.Po
-rm -f ./$(DEPDIR)/tool_progress.Po
-rm -f ./$(DEPDIR)/tool_setopt.Po
-rm -f ./$(DEPDIR)/tool_sleep.Po
+ -rm -f ./$(DEPDIR)/tool_stderr.Po
-rm -f ./$(DEPDIR)/tool_strdup.Po
-rm -f ./$(DEPDIR)/tool_urlglob.Po
-rm -f ./$(DEPDIR)/tool_util.Po
@@ -1778,6 +1841,7 @@ distclean: distclean-recursive
-rm -f ./$(DEPDIR)/tool_writeout.Po
-rm -f ./$(DEPDIR)/tool_writeout_json.Po
-rm -f ./$(DEPDIR)/tool_xattr.Po
+ -rm -f ./$(DEPDIR)/var.Po
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
@@ -1823,8 +1887,10 @@ install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
- -rm -f ../lib/$(DEPDIR)/curl_multibyte.Po
+ -rm -f ../lib/$(DEPDIR)/base64.Po
+ -rm -f ../lib/$(DEPDIR)/curl_multibyte.Po
-rm -f ../lib/$(DEPDIR)/dynbuf.Po
+ -rm -f ../lib/$(DEPDIR)/libcurltool_la-base64.Plo
-rm -f ../lib/$(DEPDIR)/libcurltool_la-curl_multibyte.Plo
-rm -f ../lib/$(DEPDIR)/libcurltool_la-dynbuf.Plo
-rm -f ../lib/$(DEPDIR)/libcurltool_la-nonblock.Plo
@@ -1858,18 +1924,19 @@ maintainer-clean: maintainer-clean-recursive
-rm -f ./$(DEPDIR)/libcurltool_la-tool_help.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_helpers.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_hugehelp.Plo
+ -rm -f ./$(DEPDIR)/libcurltool_la-tool_ipfs.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_libinfo.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_listhelp.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_main.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_msgs.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_operate.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_operhlp.Plo
- -rm -f ./$(DEPDIR)/libcurltool_la-tool_panykey.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_paramhlp.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_parsecfg.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_progress.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_setopt.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_sleep.Plo
+ -rm -f ./$(DEPDIR)/libcurltool_la-tool_stderr.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_strdup.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_urlglob.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_util.Plo
@@ -1877,6 +1944,7 @@ maintainer-clean: maintainer-clean-recursive
-rm -f ./$(DEPDIR)/libcurltool_la-tool_writeout.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_writeout_json.Plo
-rm -f ./$(DEPDIR)/libcurltool_la-tool_xattr.Plo
+ -rm -f ./$(DEPDIR)/libcurltool_la-var.Plo
-rm -f ./$(DEPDIR)/slist_wc.Po
-rm -f ./$(DEPDIR)/tool_binmode.Po
-rm -f ./$(DEPDIR)/tool_bname.Po
@@ -1898,18 +1966,19 @@ maintainer-clean: maintainer-clean-recursive
-rm -f ./$(DEPDIR)/tool_help.Po
-rm -f ./$(DEPDIR)/tool_helpers.Po
-rm -f ./$(DEPDIR)/tool_hugehelp.Po
+ -rm -f ./$(DEPDIR)/tool_ipfs.Po
-rm -f ./$(DEPDIR)/tool_libinfo.Po
-rm -f ./$(DEPDIR)/tool_listhelp.Po
-rm -f ./$(DEPDIR)/tool_main.Po
-rm -f ./$(DEPDIR)/tool_msgs.Po
-rm -f ./$(DEPDIR)/tool_operate.Po
-rm -f ./$(DEPDIR)/tool_operhlp.Po
- -rm -f ./$(DEPDIR)/tool_panykey.Po
-rm -f ./$(DEPDIR)/tool_paramhlp.Po
-rm -f ./$(DEPDIR)/tool_parsecfg.Po
-rm -f ./$(DEPDIR)/tool_progress.Po
-rm -f ./$(DEPDIR)/tool_setopt.Po
-rm -f ./$(DEPDIR)/tool_sleep.Po
+ -rm -f ./$(DEPDIR)/tool_stderr.Po
-rm -f ./$(DEPDIR)/tool_strdup.Po
-rm -f ./$(DEPDIR)/tool_urlglob.Po
-rm -f ./$(DEPDIR)/tool_util.Po
@@ -1917,6 +1986,7 @@ maintainer-clean: maintainer-clean-recursive
-rm -f ./$(DEPDIR)/tool_writeout.Po
-rm -f ./$(DEPDIR)/tool_writeout_json.Po
-rm -f ./$(DEPDIR)/tool_xattr.Po
+ -rm -f ./$(DEPDIR)/var.Po
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
@@ -1958,7 +2028,7 @@ uninstall-am: uninstall-binPROGRAMS
# remove targets if the command fails
.DELETE_ON_ERROR:
-@OS_WINDOWS_TRUE@$(CURL_RCFILES): tool_version.h
+@HAVE_WINDRES_TRUE@$(CURL_RCFILES): tool_version.h
# Here are the stuff to create a built-in manual
@@ -1998,9 +2068,8 @@ tidy:
listhelp:
(cd $(top_srcdir)/docs/cmdline-opts && ./gen.pl listhelp *.d) > tool_listhelp.c
-# Warning is "normal": libtool: error: ignoring unknown tag RC
-@OS_WINDOWS_TRUE@.rc.o:
-@OS_WINDOWS_TRUE@ $(LIBTOOL) --tag=RC --mode=compile $(RC) -I$(top_srcdir)/include -DCURL_EMBED_MANIFEST $(RCFLAGS) -i $< -o $@
+@HAVE_WINDRES_TRUE@.rc.o:
+@HAVE_WINDRES_TRUE@ $(RC) -I$(top_srcdir)/include -DCURL_EMBED_MANIFEST $(RCFLAGS) -i $< -o $@
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/src/Makefile.inc b/src/Makefile.inc
index bdf663f95..c1d202a06 100644
--- a/src/Makefile.inc
+++ b/src/Makefile.inc
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -29,27 +29,33 @@
# CSRC2 = file4.c file5.c file6.c
# CSOURCES = $(CSRC1) $(CSRC2)
+# libcurl sources to include in curltool lib we use for test binaries
+CURLTOOL_LIBCURL_CFILES = \
+ ../lib/base64.c \
+ ../lib/dynbuf.c
+
# libcurl has sources that provide functions named curlx_* that aren't part of
-# the official API, but we re-use the code here to avoid duplication.
+# the official API, but we reuse the code here to avoid duplication.
CURLX_CFILES = \
+ ../lib/base64.c \
+ ../lib/curl_multibyte.c \
+ ../lib/dynbuf.c \
+ ../lib/nonblock.c \
../lib/strtoofft.c \
../lib/timediff.c \
- ../lib/nonblock.c \
- ../lib/warnless.c \
- ../lib/curl_multibyte.c \
../lib/version_win32.c \
- ../lib/dynbuf.c
+ ../lib/warnless.c
CURLX_HFILES = \
+ ../lib/curl_ctype.h \
+ ../lib/curl_multibyte.h \
../lib/curl_setup.h \
+ ../lib/dynbuf.h \
+ ../lib/nonblock.h \
../lib/strtoofft.h \
../lib/timediff.h \
- ../lib/nonblock.h \
- ../lib/warnless.h \
- ../lib/curl_ctype.h \
- ../lib/curl_multibyte.h \
../lib/version_win32.h \
- ../lib/dynbuf.h
+ ../lib/warnless.h
CURL_CFILES = \
slist_wc.c \
@@ -73,25 +79,27 @@ CURL_CFILES = \
tool_help.c \
tool_helpers.c \
tool_hugehelp.c \
+ tool_ipfs.c \
tool_libinfo.c \
tool_listhelp.c \
tool_main.c \
tool_msgs.c \
tool_operate.c \
tool_operhlp.c \
- tool_panykey.c \
tool_paramhlp.c \
tool_parsecfg.c \
tool_progress.c \
- tool_strdup.c \
tool_setopt.c \
tool_sleep.c \
+ tool_stderr.c \
+ tool_strdup.c \
tool_urlglob.c \
tool_util.c \
tool_vms.c \
tool_writeout.c \
tool_writeout_json.c \
- tool_xattr.c
+ tool_xattr.c \
+ var.c
CURL_HFILES = \
slist_wc.h \
@@ -115,12 +123,12 @@ CURL_HFILES = \
tool_help.h \
tool_helpers.h \
tool_hugehelp.h \
+ tool_ipfs.h \
tool_libinfo.h \
tool_main.h \
tool_msgs.h \
tool_operate.h \
tool_operhlp.h \
- tool_panykey.h \
tool_paramhlp.h \
tool_parsecfg.h \
tool_progress.h \
@@ -128,6 +136,7 @@ CURL_HFILES = \
tool_setopt.h \
tool_setup.h \
tool_sleep.h \
+ tool_stderr.h \
tool_strdup.h \
tool_urlglob.h \
tool_util.h \
@@ -135,7 +144,8 @@ CURL_HFILES = \
tool_vms.h \
tool_writeout.h \
tool_writeout_json.h \
- tool_xattr.h
+ tool_xattr.h \
+ var.h
CURL_RCFILES = curl.rc
diff --git a/src/Makefile.m32 b/src/Makefile.mk
index 096e09399..66882b353 100644
--- a/src/Makefile.m32
+++ b/src/Makefile.mk
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1999 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -22,23 +22,36 @@
#
#***************************************************************************
-# See usage in lib/Makefile.m32
+# See usage in lib/Makefile.mk
PROOT := ..
+### Common
+
+include $(PROOT)/lib/Makefile.mk
+
+### Local
+
RCFLAGS += -DCURL_EMBED_MANIFEST
CPPFLAGS += -I$(PROOT)/lib
LDFLAGS += -L$(PROOT)/lib
-LIBS += -lcurl
+LIBS := -lcurl $(LIBS)
+
+ifdef WIN32
+ ifneq ($(findstring -dyn,$(CFG)),)
+ DYN := 1
+ endif
+endif
-ifneq ($(findstring -dyn,$(CFG)),)
+ifdef DYN
curl_DEPENDENCIES := $(PROOT)/lib/libcurl$(CURL_DLL_SUFFIX).dll
curl_DEPENDENCIES += $(PROOT)/lib/libcurl.dll.a
- DYN := 1
else
curl_DEPENDENCIES := $(PROOT)/lib/libcurl.a
- CPPFLAGS += -DCURL_STATICLIB
- LDFLAGS += -static
+ ifdef WIN32
+ CPPFLAGS += -DCURL_STATICLIB
+ LDFLAGS += -static
+ endif
endif
### Sources and targets
@@ -46,27 +59,53 @@ endif
# Provides CURL_CFILES, CURLX_CFILES, CURL_RCFILES
include Makefile.inc
-TARGETS := curl.exe
+TARGETS := curl$(BIN_EXT)
-curl_OBJECTS := $(patsubst %.c,%.o,$(strip $(CURL_CFILES)))
-curl_OBJECTS += $(patsubst %.c,%.o,$(notdir $(strip $(CURLX_CFILES))))
-curl_OBJECTS += $(patsubst %.rc,%.res,$(strip $(CURL_RCFILES)))
+CURL_CFILES += $(notdir $(CURLX_CFILES))
+
+curl_OBJECTS := $(patsubst %.c,$(OBJ_DIR)/%.o,$(strip $(CURL_CFILES)))
+ifdef WIN32
+curl_OBJECTS += $(patsubst %.rc,$(OBJ_DIR)/%.res,$(strip $(CURL_RCFILES)))
+endif
+ifdef MAP
+CURL_MAP := curl.map
+CURL_LDFLAGS_BIN += -Wl,-Map,$(CURL_MAP)
+TOVCLEAN := $(CURL_MAP)
+endif
vpath %.c $(PROOT)/lib
TOCLEAN := $(curl_OBJECTS)
+
+### Rules
+
ifneq ($(wildcard tool_hugehelp.c.cvs),)
+PERL ?= perl
+NROFF ?= groff
+
TOCLEAN += tool_hugehelp.c
-endif
-### Local rules
+ifneq ($(shell $(call WHICH, $(NROFF))),)
+$(PROOT)/docs/curl.1: $(wildcard $(PROOT)/docs/cmdline-opts/*.d)
+ cd $(PROOT)/docs/cmdline-opts && \
+ $(PERL) gen.pl mainpage $(notdir $^) > ../curl.1
-$(TARGETS): $(curl_OBJECTS) $(curl_DEPENDENCIES)
- $(CC) $(LDFLAGS) $(CURL_LDFLAGS_BIN) -o $@ $(curl_OBJECTS) $(LIBS)
+# Necessary for the generated tools_hugehelp.c
+CPPFLAGS += -DUSE_MANUAL
+ifdef ZLIB
+_MKHELPOPT += -c
+endif
+tool_hugehelp.c: $(PROOT)/docs/curl.1 mkhelp.pl
+ $(NROFF) -man -Tascii $(MANOPT) $< | \
+ $(PERL) mkhelp.pl $(_MKHELPOPT) $< > $@
+else
tool_hugehelp.c:
@echo Creating $@
@$(call COPY, $@.cvs, $@)
+endif
+endif
-### Global script
+$(TARGETS): $(curl_OBJECTS) $(curl_DEPENDENCIES)
+ $(CC) $(LDFLAGS) $(CURL_LDFLAGS_BIN) -o $@ $(curl_OBJECTS) $(LIBS)
-include $(PROOT)/lib/Makefile.m32
+all: $(OBJ_DIR) $(TARGETS)
diff --git a/src/curl.rc b/src/curl.rc
index b0e328798..6fcaf353e 100644
--- a/src/curl.rc
+++ b/src/curl.rc
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -53,7 +53,7 @@ BEGIN
VALUE "OriginalFilename", "curl.exe\0"
VALUE "ProductName", "The curl executable\0"
VALUE "ProductVersion", CURL_VERSION "\0"
- VALUE "LegalCopyright", "\xa9 " CURL_COPYRIGHT "\0" /* a9: Copyright symbol */
+ VALUE "LegalCopyright", "Copyright (C) " CURL_COPYRIGHT "\0"
VALUE "License", "https://curl.se/docs/copyright.html\0"
END
END
diff --git a/src/makefile.dj b/src/makefile.dj
deleted file mode 100644
index 84c127b07..000000000
--- a/src/makefile.dj
+++ /dev/null
@@ -1,101 +0,0 @@
-#***************************************************************************
-# _ _ ____ _
-# Project ___| | | | _ \| |
-# / __| | | | |_) | |
-# | (__| |_| | _ <| |___
-# \___|\___/|_| \_\_____|
-#
-# Copyright (C) 2003 - 2022, Gisle Vanem <gvanem@yahoo.no>.
-# Copyright (C) 2003 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
-#
-# This software is licensed as described in the file COPYING, which
-# you should have received as part of this distribution. The terms
-# are also available at https://curl.se/docs/copyright.html.
-#
-# You may opt to use, copy, modify, merge, publish, distribute and/or sell
-# copies of the Software, and permit persons to whom the Software is
-# furnished to do so, under 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
-#
-#***************************************************************************
-
-#
-# Adapted for djgpp2 / Watt-32 / DOS
-#
-
-DEPEND_PREREQ = # tool_hugehelp.c
-
-TOPDIR = ..
-
-vpath %.c ../lib
-
-include ../packages/DOS/common.dj
-include Makefile.inc
-
-CSOURCES = $(CURL_CFILES) $(CURLX_CFILES)
-
-ifeq ($(USE_OPENSSL),1)
- EX_LIBS += $(OPENSSL_LIBS)
-endif
-
-ifeq ($(USE_ARES),1)
- EX_LIBS += $(ARES_ROOT)/libcares.a
-endif
-
-ifeq ($(USE_ZLIB),1)
- EX_LIBS += $(ZLIB_ROOT)/libz.a
- CFLAGS += -DUSE_MANUAL
-endif
-
-ifeq ($(USE_IDNA),1)
- EX_LIBS += $(LIBIDN_ROOT)/lib/dj_obj/libidn.a -liconv
-endif
-
-EX_LIBS += $(WATT32_ROOT)/lib/libwatt.a
-
-PROGRAM = curl.exe
-OBJECTS = $(addprefix $(OBJ_DIR)/, $(notdir $(CSOURCES:.c=.o)))
-
-all: $(OBJ_DIR) $(PROGRAM)
- @echo Welcome to curl
-
-$(PROGRAM): $(OBJECTS) ../lib/libcurl.a
- $(CC) -o $@ $^ $(LDFLAGS) $(EX_LIBS)
-
-#
-# groff 1.18+ requires "-P -c"
-# If 'USE_ZLIB = 1', create a compressed help-file.
-#
-ifeq ($(USE_ZLIB),1)
- COMPRESS_OPT = -c
-endif
-
-tool_hugehelp.c: ../docs/curl.1 mkhelp.pl Makefile.dj
- groff -Tascii -man $< | perl -w mkhelp.pl $(COMPRESS_OPT) $< > $@
-
-# clean generated files
-#
-genclean:
- - $(DELETE) tool_hugehelp.c
-
-# clean object files and subdir
-#
-objclean: genclean
- - $(DELETE) $(OBJ_DIR)$(DS)*.o
- - $(RMDIR) $(OBJ_DIR)
-
-# clean without removing built program
-#
-clean: objclean
- - $(DELETE) depend.dj
-
-# clean everything
-#
-realclean vclean: clean
- - $(DELETE) $(PROGRAM)
-
--include depend.dj
diff --git a/src/mkhelp.pl b/src/mkhelp.pl
index bf146d7c9..91551cfb4 100755
--- a/src/mkhelp.pl
+++ b/src/mkhelp.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -51,6 +51,7 @@ while (<STDIN>) {
# remove trailing CR from line. msysgit checks out files as line+CRLF
$line =~ s/\r$//;
+ $line =~ s/\x1b\x5b[0-9]+m//g; # escape sequence
if($line =~ /^([ \t]*\n|curl)/i) {
# cut off headers and empty lines
$wline++; # count number of cut off lines
@@ -150,12 +151,12 @@ static void zfree_func(voidpf opaque, voidpf ptr)
/* Decompress and send to stdout a gzip-compressed buffer */
void hugehelp(void)
{
- unsigned char* buf;
- int status,headerlen;
+ unsigned char *buf;
+ int status, headerlen;
z_stream z;
/* Make sure no gzip options are set */
- if (hugehelpgz[3] & 0xfe)
+ if(hugehelpgz[3] & 0xfe)
return;
headerlen = 10;
@@ -165,18 +166,18 @@ void hugehelp(void)
z.avail_in = (unsigned int)(sizeof(hugehelpgz) - headerlen);
z.next_in = (unsigned char *)hugehelpgz + headerlen;
- if (inflateInit2(&z, -MAX_WBITS) != Z_OK)
+ if(inflateInit2(&z, -MAX_WBITS) != Z_OK)
return;
buf = malloc(BUF_SIZE);
- if (buf) {
+ if(buf) {
while(1) {
z.avail_out = BUF_SIZE;
z.next_out = buf;
status = inflate(&z, Z_SYNC_FLUSH);
- if (status == Z_OK || status == Z_STREAM_END) {
+ if(status == Z_OK || status == Z_STREAM_END) {
fwrite(buf, BUF_SIZE - z.avail_out, 1, stdout);
- if (status == Z_STREAM_END)
+ if(status == Z_STREAM_END)
break;
}
else
diff --git a/src/slist_wc.c b/src/slist_wc.c
index 68021e61e..7f1e8f19b 100644
--- a/src/slist_wc.c
+++ b/src/slist_wc.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/src/slist_wc.h b/src/slist_wc.h
index e309fd5a3..dd7b8c10a 100644
--- a/src/slist_wc.h
+++ b/src/slist_wc.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/src/tool_binmode.c b/src/tool_binmode.c
index 68c6c3671..e27ce9663 100644
--- a/src/tool_binmode.c
+++ b/src/tool_binmode.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/src/tool_binmode.h b/src/tool_binmode.h
index 0b3d24b38..bee837b00 100644
--- a/src/tool_binmode.h
+++ b/src/tool_binmode.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/src/tool_bname.c b/src/tool_bname.c
index e70f7d76f..4ba1a3b8e 100644
--- a/src/tool_bname.c
+++ b/src/tool_bname.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/src/tool_bname.h b/src/tool_bname.h
index 0efd7f19c..d091c2231 100644
--- a/src/tool_bname.h
+++ b/src/tool_bname.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/src/tool_cb_dbg.c b/src/tool_cb_dbg.c
index c1dba85ab..ce5e25e92 100644
--- a/src/tool_cb_dbg.c
+++ b/src/tool_cb_dbg.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -34,53 +34,110 @@
#include "memdebug.h" /* keep this as LAST include */
-static void dump(const char *timebuf, const char *text,
+static void dump(const char *timebuf, const char *idsbuf, const char *text,
FILE *stream, const unsigned char *ptr, size_t size,
trace tracetype, curl_infotype infotype);
/*
+ * Return the formatted HH:MM:SS for the tv_sec given.
+ * NOT thread safe.
+ */
+static const char *hms_for_sec(time_t tv_sec)
+{
+ static time_t cached_tv_sec;
+ static char hms_buf[12];
+ static time_t epoch_offset;
+ static int known_epoch;
+
+ if(tv_sec != cached_tv_sec) {
+ struct tm *now;
+ time_t secs;
+ /* recalculate */
+ if(!known_epoch) {
+ epoch_offset = time(NULL) - tv_sec;
+ known_epoch = 1;
+ }
+ secs = epoch_offset + tv_sec;
+ /* !checksrc! disable BANNEDFUNC 1 */
+ now = localtime(&secs); /* not thread safe but we don't care */
+ msnprintf(hms_buf, sizeof(hms_buf), "%02d:%02d:%02d",
+ now->tm_hour, now->tm_min, now->tm_sec);
+ cached_tv_sec = tv_sec;
+ }
+ return hms_buf;
+}
+
+static void log_line_start(FILE *log, const char *timebuf,
+ const char *idsbuf, curl_infotype type)
+{
+ /*
+ * This is the trace look that is similar to what libcurl makes on its
+ * own.
+ */
+ static const char * const s_infotype[] = {
+ "* ", "< ", "> ", "{ ", "} ", "{ ", "} "
+ };
+ if((timebuf && *timebuf) || (idsbuf && *idsbuf))
+ fprintf(log, "%s%s%s", timebuf, idsbuf, s_infotype[type]);
+ else
+ fputs(s_infotype[type], log);
+}
+
+#define TRC_IDS_FORMAT_IDS_1 "[%" CURL_FORMAT_CURL_OFF_T "-x] "
+#define TRC_IDS_FORMAT_IDS_2 "[%" CURL_FORMAT_CURL_OFF_T "-%" \
+ CURL_FORMAT_CURL_OFF_T "] "
+/*
** callback for CURLOPT_DEBUGFUNCTION
*/
-
int tool_debug_cb(CURL *handle, curl_infotype type,
char *data, size_t size,
void *userdata)
{
struct OperationConfig *operation = userdata;
struct GlobalConfig *config = operation->global;
- FILE *output = config->errors;
+ FILE *output = tool_stderr;
const char *text;
struct timeval tv;
char timebuf[20];
- time_t secs;
+ /* largest signed 64bit is: 9,223,372,036,854,775,807
+ * max length in decimal: 1 + (6*3) = 19
+ * formatted via TRC_IDS_FORMAT_IDS_2 this becomes 2 + 19 + 1 + 19 + 2 = 43
+ * negative xfer-id are not printed, negative conn-ids use TRC_IDS_FORMAT_1
+ */
+ char idsbuf[60];
+ curl_off_t xfer_id, conn_id;
(void)handle; /* not used */
if(config->tracetime) {
- struct tm *now;
- static time_t epoch_offset;
- static int known_offset;
tv = tvnow();
- if(!known_offset) {
- epoch_offset = time(NULL) - tv.tv_sec;
- known_offset = 1;
- }
- secs = epoch_offset + tv.tv_sec;
- /* !checksrc! disable BANNEDFUNC 1 */
- now = localtime(&secs); /* not thread safe but we don't care */
- msnprintf(timebuf, sizeof(timebuf), "%02d:%02d:%02d.%06ld ",
- now->tm_hour, now->tm_min, now->tm_sec, (long)tv.tv_usec);
+ msnprintf(timebuf, sizeof(timebuf), "%s.%06ld ",
+ hms_for_sec(tv.tv_sec), (long)tv.tv_usec);
}
else
timebuf[0] = 0;
+ if(handle && config->traceids &&
+ !curl_easy_getinfo(handle, CURLINFO_XFER_ID, &xfer_id) && xfer_id >= 0) {
+ if(!curl_easy_getinfo(handle, CURLINFO_CONN_ID, &conn_id) &&
+ conn_id >= 0) {
+ msnprintf(idsbuf, sizeof(idsbuf), TRC_IDS_FORMAT_IDS_2,
+ xfer_id, conn_id);
+ }
+ else {
+ msnprintf(idsbuf, sizeof(idsbuf), TRC_IDS_FORMAT_IDS_1, xfer_id);
+ }
+ }
+ else
+ idsbuf[0] = 0;
+
if(!config->trace_stream) {
/* open for append */
if(!strcmp("-", config->trace_dump))
config->trace_stream = stdout;
else if(!strcmp("%", config->trace_dump))
/* Ok, this is somewhat hackish but we do it undocumented for now */
- config->trace_stream = config->errors; /* aka stderr */
+ config->trace_stream = tool_stderr;
else {
config->trace_stream = fopen(config->trace_dump, FOPEN_WRITETEXT);
config->trace_fopened = TRUE;
@@ -96,13 +153,6 @@ int tool_debug_cb(CURL *handle, curl_infotype type,
}
if(config->tracetype == TRACE_PLAIN) {
- /*
- * This is the trace look that is similar to what libcurl makes on its
- * own.
- */
- static const char * const s_infotype[] = {
- "*", "<", ">", "{", "}", "{", "}"
- };
static bool newl = FALSE;
static bool traced_data = FALSE;
@@ -114,7 +164,7 @@ int tool_debug_cb(CURL *handle, curl_infotype type,
for(i = 0; i < size - 1; i++) {
if(data[i] == '\n') { /* LF */
if(!newl) {
- fprintf(output, "%s%s ", timebuf, s_infotype[type]);
+ log_line_start(output, timebuf, idsbuf, type);
}
(void)fwrite(data + st, i - st + 1, 1, output);
st = i + 1;
@@ -122,7 +172,7 @@ int tool_debug_cb(CURL *handle, curl_infotype type,
}
}
if(!newl)
- fprintf(output, "%s%s ", timebuf, s_infotype[type]);
+ log_line_start(output, timebuf, idsbuf, type);
(void)fwrite(data + st, i - st + 1, 1, output);
}
newl = (size && (data[size - 1] != '\n')) ? TRUE : FALSE;
@@ -131,7 +181,7 @@ int tool_debug_cb(CURL *handle, curl_infotype type,
case CURLINFO_TEXT:
case CURLINFO_HEADER_IN:
if(!newl)
- fprintf(output, "%s%s ", timebuf, s_infotype[type]);
+ log_line_start(output, timebuf, idsbuf, type);
(void)fwrite(data, size, 1, output);
newl = (size && (data[size - 1] != '\n')) ? TRUE : FALSE;
traced_data = FALSE;
@@ -145,9 +195,10 @@ int tool_debug_cb(CURL *handle, curl_infotype type,
to stderr or stdout, we don't display the alert about the data not
being shown as the data _is_ shown then just not via this
function */
- if(!config->isatty || ((output != stderr) && (output != stdout))) {
+ if(!config->isatty ||
+ ((output != tool_stderr) && (output != stdout))) {
if(!newl)
- fprintf(output, "%s%s ", timebuf, s_infotype[type]);
+ log_line_start(output, timebuf, idsbuf, type);
fprintf(output, "[%zu bytes data]\n", size);
newl = FALSE;
traced_data = TRUE;
@@ -165,7 +216,7 @@ int tool_debug_cb(CURL *handle, curl_infotype type,
switch(type) {
case CURLINFO_TEXT:
- fprintf(output, "%s== Info: %.*s", timebuf, (int)size, data);
+ fprintf(output, "%s%s== Info: %.*s", timebuf, idsbuf, (int)size, data);
/* FALLTHROUGH */
default: /* in case a new one is introduced to shock us */
return 0;
@@ -190,12 +241,12 @@ int tool_debug_cb(CURL *handle, curl_infotype type,
break;
}
- dump(timebuf, text, output, (unsigned char *) data, size, config->tracetype,
- type);
+ dump(timebuf, idsbuf, text, output, (unsigned char *) data, size,
+ config->tracetype, type);
return 0;
}
-static void dump(const char *timebuf, const char *text,
+static void dump(const char *timebuf, const char *idsbuf, const char *text,
FILE *stream, const unsigned char *ptr, size_t size,
trace tracetype, curl_infotype infotype)
{
@@ -208,7 +259,8 @@ static void dump(const char *timebuf, const char *text,
/* without the hex output, we can fit more on screen */
width = 0x40;
- fprintf(stream, "%s%s, %zu bytes (0x%zx)\n", timebuf, text, size, size);
+ fprintf(stream, "%s%s%s, %zu bytes (0x%zx)\n", timebuf, idsbuf,
+ text, size, size);
for(i = 0; i < size; i += width) {
diff --git a/src/tool_cb_dbg.h b/src/tool_cb_dbg.h
index bc69e5660..d78afb36e 100644
--- a/src/tool_cb_dbg.h
+++ b/src/tool_cb_dbg.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/src/tool_cb_hdr.c b/src/tool_cb_hdr.c
index 23700de22..198a8d050 100644
--- a/src/tool_cb_hdr.c
+++ b/src/tool_cb_hdr.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -41,9 +41,9 @@
static char *parse_filename(const char *ptr, size_t len);
-#ifdef WIN32
-#define BOLD
-#define BOLDOFF
+#ifdef _WIN32
+#define BOLD "\x1b[1m"
+#define BOLDOFF "\x1b[22m"
#else
#define BOLD "\x1b[1m"
/* Switch off bold by setting "all attributes off" since the explicit
@@ -77,25 +77,22 @@ size_t tool_header_cb(char *ptr, size_t size, size_t nmemb, void *userdata)
const char *end = (char *)ptr + cb;
const char *scheme = NULL;
- /*
- * Once that libcurl has called back tool_header_cb() the returned value
- * is checked against the amount that was intended to be written, if
- * it does not match then it fails with CURLE_WRITE_ERROR. So at this
- * point returning a value different from sz*nmemb indicates failure.
- */
- size_t failure = (size && nmemb) ? 0 : 1;
-
if(!per->config)
- return failure;
+ return CURL_WRITEFUNC_ERROR;
#ifdef DEBUGBUILD
if(size * nmemb > (size_t)CURL_MAX_HTTP_HEADER) {
- warnf(per->config->global, "Header data exceeds single call write "
- "limit!\n");
- return failure;
+ warnf(per->config->global, "Header data exceeds single call write limit");
+ return CURL_WRITEFUNC_ERROR;
}
#endif
+#ifdef _WIN32
+ /* Discard incomplete UTF-8 sequence buffered from body */
+ if(outs->utf8seq[0])
+ memset(outs->utf8seq, 0, sizeof(outs->utf8seq));
+#endif
+
/*
* Write header data when curl option --dump-header (-D) is given.
*/
@@ -153,16 +150,19 @@ size_t tool_header_cb(char *ptr, size_t size, size_t nmemb, void *userdata)
char *filename;
size_t len;
- while(*p && (p < end) && !ISALPHA(*p))
+ while((p < end) && *p && !ISALPHA(*p))
p++;
if(p > end - 9)
break;
if(memcmp(p, "filename=", 9)) {
/* no match, find next parameter */
- while((p < end) && (*p != ';'))
+ while((p < end) && *p && (*p != ';'))
p++;
- continue;
+ if((p < end) && *p)
+ continue;
+ else
+ break;
}
p += 9;
@@ -175,7 +175,7 @@ size_t tool_header_cb(char *ptr, size_t size, size_t nmemb, void *userdata)
if(outs->stream) {
/* indication of problem, get out! */
free(filename);
- return failure;
+ return CURL_WRITEFUNC_ERROR;
}
outs->is_cd_filename = TRUE;
@@ -185,12 +185,12 @@ size_t tool_header_cb(char *ptr, size_t size, size_t nmemb, void *userdata)
outs->alloc_filename = TRUE;
hdrcbdata->honor_cd_filename = FALSE; /* done now! */
if(!tool_create_output_file(outs, per->config))
- return failure;
+ return CURL_WRITEFUNC_ERROR;
}
break;
}
if(!outs->stream && !tool_create_output_file(outs, per->config))
- return failure;
+ return CURL_WRITEFUNC_ERROR;
}
if(hdrcbdata->config->writeout) {
char *value = memchr(ptr, ':', cb);
@@ -210,13 +210,17 @@ size_t tool_header_cb(char *ptr, size_t size, size_t nmemb, void *userdata)
char *value = NULL;
if(!outs->stream && !tool_create_output_file(outs, per->config))
- return failure;
+ return CURL_WRITEFUNC_ERROR;
- if(hdrcbdata->global->isatty && hdrcbdata->global->styled_output)
+ if(hdrcbdata->global->isatty &&
+#ifdef _WIN32
+ tool_term_has_bold &&
+#endif
+ hdrcbdata->global->styled_output)
value = memchr(ptr, ':', cb);
if(value) {
size_t namelen = value - ptr;
- fprintf(outs->stream, BOLD "%.*s" BOLDOFF ":", namelen, ptr);
+ fprintf(outs->stream, BOLD "%.*s" BOLDOFF ":", (int)namelen, ptr);
#ifndef LINK
fwrite(&value[1], cb - namelen - 1, 1, outs->stream);
#else
@@ -300,7 +304,7 @@ static char *parse_filename(const char *ptr, size_t len)
if(copy != p)
memmove(copy, p, strlen(p) + 1);
-#if defined(MSDOS) || defined(WIN32)
+#if defined(_WIN32) || defined(MSDOS)
{
char *sanitized;
SANITIZEcode sc = sanitize_file_name(&sanitized, copy, 0);
@@ -309,7 +313,7 @@ static char *parse_filename(const char *ptr, size_t len)
return NULL;
copy = sanitized;
}
-#endif /* MSDOS || WIN32 */
+#endif /* _WIN32 || MSDOS */
/* in case we built debug enabled, we allow an environment variable
* named CURL_TESTDIR to prefix the given file name to put it into a
@@ -352,11 +356,22 @@ void write_linked_location(CURL *curl, const char *location, size_t loclen,
char *copyloc = NULL, *locurl = NULL, *scheme = NULL, *finalurl = NULL;
const char *loc = location;
size_t llen = loclen;
+ int space_skipped = 0;
+ char *vver = getenv("VTE_VERSION");
+
+ if(vver) {
+ long vvn = strtol(vver, NULL, 10);
+ /* Skip formatting for old versions of VTE <= 0.48.1 (Mar 2017) since some
+ of those versions have formatting bugs. (#10428) */
+ if(0 < vvn && vvn <= 4801)
+ goto locout;
+ }
/* Strip leading whitespace of the redirect URL */
- while(llen && *loc == ' ') {
+ while(llen && (*loc == ' ' || *loc == '\t')) {
++loc;
--llen;
+ ++space_skipped;
}
/* Strip the trailing end-of-line characters, normally "\r\n" */
@@ -395,8 +410,10 @@ void write_linked_location(CURL *curl, const char *location, size_t loclen,
!strcmp("https", scheme) ||
!strcmp("ftp", scheme) ||
!strcmp("ftps", scheme)) {
- fprintf(stream, LINK "%s" LINKST "%.*s" LINKOFF,
- finalurl, loclen, location);
+ fprintf(stream, "%.*s" LINK "%s" LINKST "%.*s" LINKOFF,
+ space_skipped, location,
+ finalurl,
+ (int)loclen - space_skipped, loc);
goto locdone;
}
diff --git a/src/tool_cb_hdr.h b/src/tool_cb_hdr.h
index 01175bb6a..a855052d0 100644
--- a/src/tool_cb_hdr.h
+++ b/src/tool_cb_hdr.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/src/tool_cb_prg.c b/src/tool_cb_prg.c
index 3532c31bc..ef47b42da 100644
--- a/src/tool_cb_prg.c
+++ b/src/tool_cb_prg.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -38,6 +38,8 @@
#include "memdebug.h" /* keep this as LAST include */
+#define MAX_BARLENGTH 256
+
#ifdef HAVE_TERMIOS_H
# include <termios.h>
#elif defined(HAVE_TERMIO_H)
@@ -78,11 +80,16 @@ static const unsigned int sinus[] = {
static void fly(struct ProgressData *bar, bool moved)
{
- char buf[256];
+ char buf[MAX_BARLENGTH + 2];
int pos;
int check = bar->width - 2;
- msnprintf(buf, sizeof(buf), "%*s\r", bar->width-1, " ");
+ /* bar->width is range checked when assigned */
+ DEBUGASSERT(bar->width <= MAX_BARLENGTH);
+ memset(buf, ' ', bar->width);
+ buf[bar->width] = '\r';
+ buf[bar->width + 1] = '\0';
+
memcpy(&buf[bar->bar], "-=O=-", 5);
pos = sinus[bar->tick%200] / (1000000 / check);
@@ -114,10 +121,8 @@ static void fly(struct ProgressData *bar, bool moved)
** callback for CURLOPT_XFERINFOFUNCTION
*/
-#define MAX_BARLENGTH 256
-
-#if (SIZEOF_CURL_OFF_T == 4)
-# define CURL_OFF_T_MAX CURL_OFF_T_C(0x7FFFFFFF)
+#if (SIZEOF_CURL_OFF_T < 8)
+#error "too small curl_off_t"
#else
/* assume SIZEOF_CURL_OFF_T == 8 */
# define CURL_OFF_T_MAX CURL_OFF_T_C(0x7FFFFFFFFFFFFFFF)
@@ -249,7 +254,7 @@ void progressbarinit(struct ProgressData *bar,
struct winsize ts;
if(!ioctl(STDIN_FILENO, TIOCGWINSZ, &ts))
cols = ts.ws_col;
-#elif defined(WIN32)
+#elif defined(_WIN32)
{
HANDLE stderr_hnd = GetStdHandle(STD_ERROR_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO console_info;
@@ -274,7 +279,7 @@ void progressbarinit(struct ProgressData *bar,
else if(bar->width > MAX_BARLENGTH)
bar->width = MAX_BARLENGTH;
- bar->out = config->global->errors;
+ bar->out = tool_stderr;
bar->tick = 150;
bar->barmove = 1;
}
diff --git a/src/tool_cb_prg.h b/src/tool_cb_prg.h
index 7d8fbae8f..565ad565a 100644
--- a/src/tool_cb_prg.h
+++ b/src/tool_cb_prg.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/src/tool_cb_rea.c b/src/tool_cb_rea.c
index 4aed55c3a..8cb5bbe8a 100644
--- a/src/tool_cb_rea.c
+++ b/src/tool_cb_rea.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,6 +23,10 @@
***************************************************************************/
#include "tool_setup.h"
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+
#define ENABLE_CURLX_PRINTF
/* use our own printf() functions */
#include "curlx.h"
@@ -30,6 +34,8 @@
#include "tool_cfgable.h"
#include "tool_cb_rea.h"
#include "tool_operate.h"
+#include "tool_util.h"
+#include "tool_msgs.h"
#include "memdebug.h" /* keep this as LAST include */
@@ -39,20 +45,65 @@
size_t tool_read_cb(char *buffer, size_t sz, size_t nmemb, void *userdata)
{
- ssize_t rc;
- struct InStruct *in = userdata;
+ ssize_t rc = 0;
+ struct per_transfer *per = userdata;
+ struct OperationConfig *config = per->config;
+
+ if((per->uploadfilesize != -1) &&
+ (per->uploadedsofar == per->uploadfilesize)) {
+ /* done */
+ return 0;
+ }
+
+ if(config->timeout_ms) {
+ struct timeval now = tvnow();
+ long msdelta = tvdiff(now, per->start);
+
+ if(msdelta > config->timeout_ms)
+ /* timeout */
+ return 0;
+#ifndef _WIN32
+ /* this logic waits on read activity on a file descriptor that is not a
+ socket which makes it not work with select() on Windows */
+ else {
+ fd_set bits;
+ struct timeval timeout;
+ long wait = config->timeout_ms - msdelta;
- rc = read(in->fd, buffer, sz*nmemb);
+ /* wait this long at the most */
+ timeout.tv_sec = wait/1000;
+ timeout.tv_usec = (int)((wait%1000)*1000);
+
+ FD_ZERO(&bits);
+ FD_SET(per->infd, &bits);
+ if(!select(per->infd + 1, &bits, NULL, NULL, &timeout))
+ return 0; /* timeout */
+ }
+#endif
+ }
+
+ rc = read(per->infd, buffer, sz*nmemb);
if(rc < 0) {
if(errno == EAGAIN) {
errno = 0;
- in->config->readbusy = TRUE;
+ config->readbusy = TRUE;
return CURL_READFUNC_PAUSE;
}
/* since size_t is unsigned we can't return negative values fine */
rc = 0;
}
- in->config->readbusy = FALSE;
+ if((per->uploadfilesize != -1) &&
+ (per->uploadedsofar + rc > per->uploadfilesize)) {
+ /* do not allow uploading more than originally set out to do */
+ curl_off_t delta = per->uploadedsofar + rc - per->uploadfilesize;
+ warnf(per->config->global, "File size larger in the end than when "
+ "started. Dropping at least %" CURL_FORMAT_CURL_OFF_T " bytes",
+ delta);
+ rc = (ssize_t)(per->uploadfilesize - per->uploadedsofar);
+ }
+ config->readbusy = FALSE;
+
+ /* when select() returned zero here, it timed out */
return (size_t)rc;
}
diff --git a/src/tool_cb_rea.h b/src/tool_cb_rea.h
index 81b5f871a..06899d3ef 100644
--- a/src/tool_cb_rea.h
+++ b/src/tool_cb_rea.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/src/tool_cb_see.c b/src/tool_cb_see.c
index d24d52651..bce57bb28 100644
--- a/src/tool_cb_see.c
+++ b/src/tool_cb_see.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -28,6 +28,7 @@
#include "curlx.h"
#include "tool_cfgable.h"
+#include "tool_operate.h"
#include "tool_cb_see.h"
#include "memdebug.h" /* keep this as LAST include */
@@ -48,7 +49,7 @@
int tool_seek_cb(void *userdata, curl_off_t offset, int whence)
{
- struct InStruct *in = userdata;
+ struct per_transfer *per = userdata;
#if(SIZEOF_CURL_OFF_T > SIZEOF_OFF_T) && !defined(USE_WIN32_LARGE_FILES)
@@ -66,13 +67,13 @@ int tool_seek_cb(void *userdata, curl_off_t offset, int whence)
/* this code path doesn't support other types */
return CURL_SEEKFUNC_FAIL;
- if(LSEEK_ERROR == lseek(in->fd, 0, SEEK_SET))
+ if(LSEEK_ERROR == lseek(per->infd, 0, SEEK_SET))
/* couldn't rewind to beginning */
return CURL_SEEKFUNC_FAIL;
while(left) {
long step = (left > OUR_MAX_SEEK_O) ? OUR_MAX_SEEK_L : (long)left;
- if(LSEEK_ERROR == lseek(in->fd, step, SEEK_CUR))
+ if(LSEEK_ERROR == lseek(per->infd, step, SEEK_CUR))
/* couldn't seek forwards the desired amount */
return CURL_SEEKFUNC_FAIL;
left -= step;
@@ -81,7 +82,7 @@ int tool_seek_cb(void *userdata, curl_off_t offset, int whence)
}
#endif
- if(LSEEK_ERROR == lseek(in->fd, offset, whence))
+ if(LSEEK_ERROR == lseek(per->infd, offset, whence))
/* couldn't rewind, the reason is in errno but errno is just not portable
enough and we don't actually care that much why we failed. We'll let
libcurl know that it may try other means if it wants to. */
@@ -92,21 +93,6 @@ int tool_seek_cb(void *userdata, curl_off_t offset, int whence)
#ifdef USE_TOOL_FTRUNCATE
-#ifdef __BORLANDC__
-/* 64-bit lseek-like function unavailable */
-# define _lseeki64(hnd,ofs,whence) lseek(hnd,ofs,whence)
-#endif
-
-#ifdef __POCC__
-# if(__POCC__ < 450)
-/* 64-bit lseek-like function unavailable */
-# define _lseeki64(hnd,ofs,whence) _lseek(hnd,ofs,whence)
-# else
-# undef _lseeki64
-# define _lseeki64(hnd,ofs,whence) _lseek64(hnd,ofs,whence)
-# endif
-#endif
-
#ifdef _WIN32_WCE
/* 64-bit lseek-like function unavailable */
# undef _lseeki64
diff --git a/src/tool_cb_see.h b/src/tool_cb_see.h
index 4af0b0ab4..b5d7bf985 100644
--- a/src/tool_cb_see.h
+++ b/src/tool_cb_see.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -25,7 +25,7 @@
***************************************************************************/
#include "tool_setup.h"
-#if defined(WIN32) && !defined(HAVE_FTRUNCATE)
+#if defined(_WIN32) && !defined(HAVE_FTRUNCATE)
int tool_ftruncate64(int fd, curl_off_t where);
@@ -35,7 +35,7 @@ int tool_ftruncate64(int fd, curl_off_t where);
#define HAVE_FTRUNCATE 1
#define USE_TOOL_FTRUNCATE 1
-#endif /* WIN32 && ! HAVE_FTRUNCATE */
+#endif /* _WIN32 && ! HAVE_FTRUNCATE */
/*
** callback for CURLOPT_SEEKFUNCTION
diff --git a/src/tool_cb_wrt.c b/src/tool_cb_wrt.c
index c9d1dbd1d..98063c39c 100644
--- a/src/tool_cb_wrt.c
+++ b/src/tool_cb_wrt.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -44,7 +44,7 @@
#ifndef O_BINARY
#define O_BINARY 0
#endif
-#ifdef WIN32
+#ifdef _WIN32
#define OPENMODE S_IREAD | S_IWRITE
#else
#define OPENMODE S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH
@@ -62,14 +62,14 @@ bool tool_create_output_file(struct OutStruct *outs,
DEBUGASSERT(config);
global = config->global;
if(!fname || !*fname) {
- warnf(global, "Remote filename has no length!\n");
+ warnf(global, "Remote filename has no length");
return FALSE;
}
if(config->output_dir && outs->is_cd_filename) {
aname = aprintf("%s/%s", config->output_dir, fname);
if(!aname) {
- errorf(global, "out of memory\n");
+ errorf(global, "out of memory");
return FALSE;
}
fname = aname;
@@ -95,12 +95,12 @@ bool tool_create_output_file(struct OutStruct *outs,
/* Guard against wraparound in new filename */
if(newlen < len) {
free(aname);
- errorf(global, "overflow in filename generation\n");
+ errorf(global, "overflow in filename generation");
return FALSE;
}
newname = malloc(newlen);
if(!newname) {
- errorf(global, "out of memory\n");
+ errorf(global, "out of memory");
free(aname);
return FALSE;
}
@@ -133,7 +133,7 @@ bool tool_create_output_file(struct OutStruct *outs,
}
if(!file) {
- warnf(global, "Failed to open the file %s: %s\n", fname,
+ warnf(global, "Failed to open the file %s: %s", fname,
strerror(errno));
free(aname);
return FALSE;
@@ -159,19 +159,11 @@ size_t tool_write_cb(char *buffer, size_t sz, size_t nmemb, void *userdata)
struct OperationConfig *config = per->config;
size_t bytes = sz * nmemb;
bool is_tty = config->global->isatty;
-#ifdef WIN32
+#ifdef _WIN32
CONSOLE_SCREEN_BUFFER_INFO console_info;
intptr_t fhnd;
#endif
- /*
- * Once that libcurl has called back tool_write_cb() the returned value
- * is checked against the amount that was intended to be written, if
- * it does not match then it fails with CURLE_WRITE_ERROR. So at this
- * point returning a value different from sz*nmemb indicates failure.
- */
- const size_t failure = bytes ? 0 : 1;
-
#ifdef DEBUGBUILD
{
char *tty = curlx_getenv("CURL_ISATTY");
@@ -184,14 +176,14 @@ size_t tool_write_cb(char *buffer, size_t sz, size_t nmemb, void *userdata)
if(config->show_headers) {
if(bytes > (size_t)CURL_MAX_HTTP_HEADER) {
warnf(config->global, "Header data size exceeds single call write "
- "limit!\n");
- return failure;
+ "limit");
+ return CURL_WRITEFUNC_ERROR;
}
}
else {
if(bytes > (size_t)CURL_MAX_WRITE_SIZE) {
- warnf(config->global, "Data size exceeds single call write limit!\n");
- return failure;
+ warnf(config->global, "Data size exceeds single call write limit");
+ return CURL_WRITEFUNC_ERROR;
}
}
@@ -219,57 +211,154 @@ size_t tool_write_cb(char *buffer, size_t sz, size_t nmemb, void *userdata)
check_fails = TRUE;
}
if(check_fails) {
- warnf(config->global, "Invalid output struct data for write callback\n");
- return failure;
+ warnf(config->global, "Invalid output struct data for write callback");
+ return CURL_WRITEFUNC_ERROR;
}
}
#endif
if(!outs->stream && !tool_create_output_file(outs, per->config))
- return failure;
+ return CURL_WRITEFUNC_ERROR;
if(is_tty && (outs->bytes < 2000) && !config->terminal_binary_ok) {
/* binary output to terminal? */
if(memchr(buffer, 0, bytes)) {
warnf(config->global, "Binary output can mess up your terminal. "
"Use \"--output -\" to tell curl to output it to your terminal "
- "anyway, or consider \"--output <FILE>\" to save to a file.\n");
+ "anyway, or consider \"--output <FILE>\" to save to a file.");
config->synthetic_error = TRUE;
- return failure;
+ return CURL_WRITEFUNC_ERROR;
}
}
-#ifdef WIN32
+#ifdef _WIN32
fhnd = _get_osfhandle(fileno(outs->stream));
+ /* if windows console then UTF-8 must be converted to UTF-16 */
if(isatty(fileno(outs->stream)) &&
GetConsoleScreenBufferInfo((HANDLE)fhnd, &console_info)) {
- DWORD in_len = (DWORD)(sz * nmemb);
- wchar_t* wc_buf;
- DWORD wc_len;
-
- /* calculate buffer size for wide characters */
- wc_len = MultiByteToWideChar(CP_UTF8, 0, buffer, in_len, NULL, 0);
- wc_buf = (wchar_t*) malloc(wc_len * sizeof(wchar_t));
- if(!wc_buf)
- return failure;
-
- /* calculate buffer size for multi-byte characters */
- wc_len = MultiByteToWideChar(CP_UTF8, 0, buffer, in_len, wc_buf, wc_len);
- if(!wc_len) {
- free(wc_buf);
- return failure;
+ wchar_t *wc_buf;
+ DWORD wc_len, chars_written;
+ unsigned char *rbuf = (unsigned char *)buffer;
+ DWORD rlen = (DWORD)bytes;
+
+#define IS_TRAILING_BYTE(x) (0x80 <= (x) && (x) < 0xC0)
+
+ /* attempt to complete an incomplete UTF-8 sequence from previous call.
+ the sequence does not have to be well-formed. */
+ if(outs->utf8seq[0] && rlen) {
+ bool complete = false;
+ /* two byte sequence (lead byte 110yyyyy) */
+ if(0xC0 <= outs->utf8seq[0] && outs->utf8seq[0] < 0xE0) {
+ outs->utf8seq[1] = *rbuf++;
+ --rlen;
+ complete = true;
+ }
+ /* three byte sequence (lead byte 1110zzzz) */
+ else if(0xE0 <= outs->utf8seq[0] && outs->utf8seq[0] < 0xF0) {
+ if(!outs->utf8seq[1]) {
+ outs->utf8seq[1] = *rbuf++;
+ --rlen;
+ }
+ if(rlen && !outs->utf8seq[2]) {
+ outs->utf8seq[2] = *rbuf++;
+ --rlen;
+ complete = true;
+ }
+ }
+ /* four byte sequence (lead byte 11110uuu) */
+ else if(0xF0 <= outs->utf8seq[0] && outs->utf8seq[0] < 0xF8) {
+ if(!outs->utf8seq[1]) {
+ outs->utf8seq[1] = *rbuf++;
+ --rlen;
+ }
+ if(rlen && !outs->utf8seq[2]) {
+ outs->utf8seq[2] = *rbuf++;
+ --rlen;
+ }
+ if(rlen && !outs->utf8seq[3]) {
+ outs->utf8seq[3] = *rbuf++;
+ --rlen;
+ complete = true;
+ }
+ }
+
+ if(complete) {
+ WCHAR prefix[3] = {0}; /* UTF-16 (1-2 WCHARs) + NUL */
+
+ if(MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)outs->utf8seq, -1,
+ prefix, sizeof(prefix)/sizeof(prefix[0]))) {
+ DEBUGASSERT(prefix[2] == L'\0');
+ if(!WriteConsoleW(
+ (HANDLE) fhnd,
+ prefix,
+ prefix[1] ? 2 : 1,
+ &chars_written,
+ NULL)) {
+ return CURL_WRITEFUNC_ERROR;
+ }
+ }
+ /* else: UTF-8 input was not well formed and OS is pre-Vista which
+ drops invalid characters instead of writing U+FFFD to output. */
+
+ memset(outs->utf8seq, 0, sizeof(outs->utf8seq));
+ }
}
- if(!WriteConsoleW(
- (HANDLE) fhnd,
- wc_buf,
- wc_len,
- &wc_len,
- NULL)) {
+ /* suppress an incomplete utf-8 sequence at end of rbuf */
+ if(!outs->utf8seq[0] && rlen && (rbuf[rlen - 1] & 0x80)) {
+ /* check for lead byte from a two, three or four byte sequence */
+ if(0xC0 <= rbuf[rlen - 1] && rbuf[rlen - 1] < 0xF8) {
+ outs->utf8seq[0] = rbuf[rlen - 1];
+ rlen -= 1;
+ }
+ else if(rlen >= 2 && IS_TRAILING_BYTE(rbuf[rlen - 1])) {
+ /* check for lead byte from a three or four byte sequence */
+ if(0xE0 <= rbuf[rlen - 2] && rbuf[rlen - 2] < 0xF8) {
+ outs->utf8seq[0] = rbuf[rlen - 2];
+ outs->utf8seq[1] = rbuf[rlen - 1];
+ rlen -= 2;
+ }
+ else if(rlen >= 3 && IS_TRAILING_BYTE(rbuf[rlen - 2])) {
+ /* check for lead byte from a four byte sequence */
+ if(0xF0 <= rbuf[rlen - 3] && rbuf[rlen - 3] < 0xF8) {
+ outs->utf8seq[0] = rbuf[rlen - 3];
+ outs->utf8seq[1] = rbuf[rlen - 2];
+ outs->utf8seq[2] = rbuf[rlen - 1];
+ rlen -= 3;
+ }
+ }
+ }
+ }
+
+ if(rlen) {
+ /* calculate buffer size for wide characters */
+ wc_len = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)rbuf, rlen, NULL, 0);
+ if(!wc_len)
+ return CURL_WRITEFUNC_ERROR;
+
+ wc_buf = (wchar_t*) malloc(wc_len * sizeof(wchar_t));
+ if(!wc_buf)
+ return CURL_WRITEFUNC_ERROR;
+
+ wc_len = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)rbuf, rlen, wc_buf,
+ wc_len);
+ if(!wc_len) {
+ free(wc_buf);
+ return CURL_WRITEFUNC_ERROR;
+ }
+
+ if(!WriteConsoleW(
+ (HANDLE) fhnd,
+ wc_buf,
+ wc_len,
+ &chars_written,
+ NULL)) {
+ free(wc_buf);
+ return CURL_WRITEFUNC_ERROR;
+ }
free(wc_buf);
- return failure;
}
- free(wc_buf);
+
rc = bytes;
}
else
@@ -289,7 +378,7 @@ size_t tool_write_cb(char *buffer, size_t sz, size_t nmemb, void *userdata)
/* output buffering disabled */
int res = fflush(outs->stream);
if(res)
- return failure;
+ return CURL_WRITEFUNC_ERROR;
}
return rc;
diff --git a/src/tool_cb_wrt.h b/src/tool_cb_wrt.h
index 0cbbceefe..55502f440 100644
--- a/src/tool_cb_wrt.h
+++ b/src/tool_cb_wrt.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/src/tool_cfgable.c b/src/tool_cfgable.c
index eccb3bcb5..906e23e14 100644
--- a/src/tool_cfgable.c
+++ b/src/tool_cfgable.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,6 +24,7 @@
#include "tool_setup.h"
#include "tool_cfgable.h"
+#include "tool_formparse.h"
#include "tool_main.h"
#include "memdebug.h" /* keep this as LAST include */
@@ -53,11 +54,13 @@ static void free_config_fields(struct OperationConfig *config)
Curl_safefree(config->useragent);
Curl_safefree(config->altsvc);
Curl_safefree(config->hsts);
+ Curl_safefree(config->haproxy_clientip);
curl_slist_free_all(config->cookies);
Curl_safefree(config->cookiejar);
curl_slist_free_all(config->cookiefiles);
Curl_safefree(config->postfields);
+ Curl_safefree(config->query);
Curl_safefree(config->referer);
Curl_safefree(config->headerfile);
@@ -89,6 +92,8 @@ static void free_config_fields(struct OperationConfig *config)
Curl_safefree(config->netrc_file);
Curl_safefree(config->output_dir);
+ Curl_safefree(config->proto_str);
+ Curl_safefree(config->proto_redir_str);
urlnode = config->url_list;
while(urlnode) {
@@ -104,6 +109,7 @@ static void free_config_fields(struct OperationConfig *config)
config->url_get = NULL;
config->url_out = NULL;
+ Curl_safefree(config->ipfs_gateway);
Curl_safefree(config->doh_url);
Curl_safefree(config->cipher_list);
Curl_safefree(config->proxy_cipher_list);
@@ -132,13 +138,12 @@ static void free_config_fields(struct OperationConfig *config)
Curl_safefree(config->engine);
Curl_safefree(config->etag_save_file);
Curl_safefree(config->etag_compare_file);
+ Curl_safefree(config->ssl_ec_curves);
Curl_safefree(config->request_target);
Curl_safefree(config->customrequest);
Curl_safefree(config->krblevel);
-
Curl_safefree(config->oauth_bearer);
Curl_safefree(config->sasl_authzid);
-
Curl_safefree(config->unix_socket_path);
Curl_safefree(config->writeout);
Curl_safefree(config->proto_default);
diff --git a/src/tool_cfgable.h b/src/tool_cfgable.h
index c26cddd5e..57e8fce52 100644
--- a/src/tool_cfgable.h
+++ b/src/tool_cfgable.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -26,7 +26,7 @@
#include "tool_setup.h"
#include "tool_sdecls.h"
#include "tool_urlglob.h"
-#include "tool_formparse.h"
+#include "var.h"
struct GlobalConfig;
@@ -37,11 +37,11 @@ struct State {
char *outfiles;
char *httpgetfields;
char *uploadfile;
- unsigned long infilenum; /* number of files to upload */
- unsigned long up; /* upload file counter within a single upload glob */
- unsigned long urlnum; /* how many iterations this single URL has with ranges
+ curl_off_t infilenum; /* number of files to upload */
+ curl_off_t up; /* upload file counter within a single upload glob */
+ curl_off_t urlnum; /* how many iterations this single URL has with ranges
etc */
- unsigned long li;
+ curl_off_t li;
};
struct OperationConfig {
@@ -70,8 +70,9 @@ struct OperationConfig {
char *postfields;
curl_off_t postfieldsize;
char *referer;
- double timeout;
- double connecttimeout;
+ char *query;
+ long timeout_ms;
+ long connecttimeout_ms;
long maxredirs;
curl_off_t max_filesize;
char *output_dir;
@@ -117,7 +118,7 @@ struct OperationConfig {
bool dirlistonly; /* only get the FTP dir list */
bool followlocation; /* follow http redirects */
bool unrestricted_auth; /* Continue to send authentication (user+password)
- when following ocations, even when hostname
+ when following redirects, even when hostname
changed */
bool netrc_opt;
bool netrc;
@@ -127,6 +128,7 @@ struct OperationConfig {
struct getout *url_get; /* point to the node to fill in URL */
struct getout *url_out; /* point to the node to fill in outfile */
struct getout *url_ul; /* point to the node to fill in upload */
+ char *ipfs_gateway;
char *doh_url;
char *cipher_list;
char *proxy_cipher_list;
@@ -215,7 +217,7 @@ struct OperationConfig {
bool ftp_ssl_ccc;
int ftp_ssl_ccc_mode;
char *preproxy;
- int socks5_gssapi_nec; /* The NEC reference server does not protect the
+ bool socks5_gssapi_nec; /* The NEC reference server does not protect the
encryption type exchange */
unsigned long socks5_auth;/* auth bitmask for socks5 proxies */
char *proxy_service_name; /* set authentication service name for HTTP and
@@ -254,15 +256,13 @@ struct OperationConfig {
bool xattr; /* store metadata in extended attributes */
long gssapi_delegation;
bool ssl_allow_beast; /* allow this SSL vulnerability */
- bool proxy_ssl_allow_beast; /* allow this SSL vulnerability for proxy*/
-
+ bool proxy_ssl_allow_beast; /* allow this SSL vulnerability for proxy */
bool ssl_no_revoke; /* disable SSL certificate revocation checks */
- /*bool proxy_ssl_no_revoke; */
-
bool ssl_revoke_best_effort; /* ignore SSL revocation offline/missing
revocation list errors */
- bool native_ca_store; /* use the native os ca store */
+ bool native_ca_store; /* use the native OS CA store */
+ bool proxy_native_ca_store; /* use the native OS CA store for proxy */
bool ssl_auto_client_cert; /* automatically locate and use a client
certificate for authentication (Schannel) */
bool proxy_ssl_auto_client_cert; /* proxy version of ssl_auto_client_cert */
@@ -272,7 +272,7 @@ struct OperationConfig {
bool abstract_unix_socket; /* path to an abstract Unix domain socket */
bool falsestart;
bool path_as_is;
- double expect100timeout;
+ long expect100timeout_ms;
bool suppress_connect_headers; /* suppress proxy CONNECT response headers
from user callbacks */
bool synthetic_error; /* if TRUE, this is tool-internal error */
@@ -280,6 +280,7 @@ struct OperationConfig {
long happy_eyeballs_timeout_ms; /* happy eyeballs timeout in milliseconds.
0 is valid. default: CURL_HET_DEFAULT. */
bool haproxy_protocol; /* whether to send HAProxy protocol v1 */
+ char *haproxy_clientip; /* client IP for HAProxy protocol */
bool disallow_username_in_url; /* disallow usernames in URLs */
char *aws_sigv4;
enum {
@@ -300,19 +301,16 @@ struct OperationConfig {
};
struct GlobalConfig {
- int showerror; /* -1 == unset, default => show errors
- 0 => -s is used to NOT show errors
- 1 => -S has been used to show errors */
- bool mute; /* don't show messages, --silent given */
- bool noprogress; /* don't show progress bar --silent given */
+ bool showerror; /* show errors when silent */
+ bool silent; /* don't show messages, --silent given */
+ bool noprogress; /* don't show progress bar */
bool isatty; /* Updated internally if output is a tty */
- FILE *errors; /* Error stream, defaults to stderr */
- bool errors_fopened; /* Whether error stream isn't stderr */
char *trace_dump; /* file to dump the network trace to */
FILE *trace_stream;
bool trace_fopened;
trace tracetype;
bool tracetime; /* include timestamp? */
+ bool traceids; /* include xfer-/conn-id? */
int progressmode; /* CURL_PROGRESS_BAR / CURL_PROGRESS_STATS */
char *libcurl; /* Output libcurl code to this file name */
bool fail_early; /* exit on first transfer error */
@@ -323,9 +321,10 @@ struct GlobalConfig {
bool test_event_based;
#endif
bool parallel;
- long parallel_max;
+ unsigned short parallel_max; /* MAX_PARALLEL is the maximum */
bool parallel_connect;
char *help_category; /* The help category, if set */
+ struct var *variables;
struct OperationConfig *first;
struct OperationConfig *current;
struct OperationConfig *last; /* Always last in the struct */
diff --git a/src/tool_dirhie.c b/src/tool_dirhie.c
index 1b6ac1748..1cadbd0be 100644
--- a/src/tool_dirhie.c
+++ b/src/tool_dirhie.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -25,7 +25,7 @@
#include <sys/stat.h>
-#ifdef WIN32
+#ifdef _WIN32
# include <direct.h>
#endif
@@ -34,54 +34,49 @@
#include "curlx.h"
#include "tool_dirhie.h"
+#include "tool_msgs.h"
#include "memdebug.h" /* keep this as LAST include */
-#ifdef NETWARE
-# ifndef __NOVELL_LIBC__
-# define mkdir mkdir_510
-# endif
-#endif
-
-#if defined(WIN32) || (defined(MSDOS) && !defined(__DJGPP__))
+#if defined(_WIN32) || (defined(MSDOS) && !defined(__DJGPP__))
# define mkdir(x,y) (mkdir)((x))
# ifndef F_OK
# define F_OK 0
# endif
#endif
-static void show_dir_errno(FILE *errors, const char *name)
+static void show_dir_errno(struct GlobalConfig *global, const char *name)
{
switch(errno) {
#ifdef EACCES
case EACCES:
- fprintf(errors, "You don't have permission to create %s.\n", name);
+ errorf(global, "You don't have permission to create %s", name);
break;
#endif
#ifdef ENAMETOOLONG
case ENAMETOOLONG:
- fprintf(errors, "The directory name %s is too long.\n", name);
+ errorf(global, "The directory name %s is too long", name);
break;
#endif
#ifdef EROFS
case EROFS:
- fprintf(errors, "%s resides on a read-only file system.\n", name);
+ errorf(global, "%s resides on a read-only file system", name);
break;
#endif
#ifdef ENOSPC
case ENOSPC:
- fprintf(errors, "No space left on the file system that will "
- "contain the directory %s.\n", name);
+ errorf(global, "No space left on the file system that will "
+ "contain the directory %s", name);
break;
#endif
#ifdef EDQUOT
case EDQUOT:
- fprintf(errors, "Cannot create directory %s because you "
- "exceeded your quota.\n", name);
+ errorf(global, "Cannot create directory %s because you "
+ "exceeded your quota", name);
break;
#endif
- default :
- fprintf(errors, "Error creating directory %s.\n", name);
+ default:
+ errorf(global, "Error creating directory %s", name);
break;
}
}
@@ -89,11 +84,11 @@ static void show_dir_errno(FILE *errors, const char *name)
/*
* Create the needed directory hierarchy recursively in order to save
* multi-GETs in file output, ie:
- * curl "http://my.site/dir[1-5]/file[1-5].txt" -o "dir#1/file#2.txt"
+ * curl "http://example.org/dir[1-5]/file[1-5].txt" -o "dir#1/file#2.txt"
* should create all the dir* automagically
*/
-#if defined(WIN32) || defined(__DJGPP__)
+#if defined(_WIN32) || defined(__DJGPP__)
/* systems that may use either or when specifying a path */
#define PATH_DELIMITERS "\\/"
#else
@@ -101,7 +96,7 @@ static void show_dir_errno(FILE *errors, const char *name)
#endif
-CURLcode create_dir_hierarchy(const char *outfile, FILE *errors)
+CURLcode create_dir_hierarchy(const char *outfile, struct GlobalConfig *global)
{
char *tempdir;
char *tempdir2;
@@ -137,7 +132,7 @@ CURLcode create_dir_hierarchy(const char *outfile, FILE *errors)
msnprintf(&dirbuildup[dlen], outlen - dlen, "%s%s", DIR_CHAR, tempdir);
else {
if(outdup == tempdir) {
-#if defined(MSDOS) || defined(WIN32)
+#if defined(_WIN32) || defined(MSDOS)
/* Skip creating a drive's current directory.
It may seem as though that would harmlessly fail but it could be
a corner case if X: did not exist, since we would be creating it
@@ -157,7 +152,7 @@ CURLcode create_dir_hierarchy(const char *outfile, FILE *errors)
/* Create directory. Ignore access denied error to allow traversal. */
if(!skip && (-1 == mkdir(dirbuildup, (mode_t)0000750)) &&
(errno != EACCES) && (errno != EEXIST)) {
- show_dir_errno(errors, dirbuildup);
+ show_dir_errno(global, dirbuildup);
result = CURLE_WRITE_ERROR;
break; /* get out of loop */
}
diff --git a/src/tool_dirhie.h b/src/tool_dirhie.h
index 954f3e248..0ee407fe5 100644
--- a/src/tool_dirhie.h
+++ b/src/tool_dirhie.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,7 +24,9 @@
*
***************************************************************************/
#include "tool_setup.h"
+#include "tool_cfgable.h"
-CURLcode create_dir_hierarchy(const char *outfile, FILE *errors);
+CURLcode create_dir_hierarchy(const char *outfile,
+ struct GlobalConfig *global);
#endif /* HEADER_CURL_TOOL_DIRHIE_H */
diff --git a/src/tool_doswin.c b/src/tool_doswin.c
index d8695e93c..db2b8b78a 100644
--- a/src/tool_doswin.c
+++ b/src/tool_doswin.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,13 +23,13 @@
***************************************************************************/
#include "tool_setup.h"
-#if defined(MSDOS) || defined(WIN32)
+#if defined(_WIN32) || defined(MSDOS)
#if defined(HAVE_LIBGEN_H) && defined(HAVE_BASENAME)
# include <libgen.h>
#endif
-#ifdef WIN32
+#ifdef _WIN32
# include <stdlib.h>
# include <tlhelp32.h>
# include "tool_cfgable.h"
@@ -42,7 +42,7 @@
#include "curlx.h"
#include "memdebug.h" /* keep this as LAST include */
-#ifdef WIN32
+#ifdef _WIN32
# undef PATH_MAX
# define PATH_MAX MAX_PATH
#endif
@@ -55,7 +55,7 @@
# endif
#endif
-#ifdef WIN32
+#ifdef _WIN32
# define _use_lfn(f) (1) /* long file names always available */
#elif !defined(__DJGPP__) || (__DJGPP__ < 2) /* DJGPP 2.0 has _use_lfn() */
# define _use_lfn(f) (0) /* long file names never available */
@@ -347,7 +347,7 @@ SANITIZEcode msdosify(char **const sanitized, const char *file_name,
if(s[0] >= 'A' && s[0] <= 'z' && s[1] == ':') {
*d++ = *s++;
*d = ((flags & (SANITIZE_ALLOW_COLONS|SANITIZE_ALLOW_PATH))) ? ':' : '_';
- ++d, ++s;
+ ++d; ++s;
}
for(idx = 0, dot_idx = -1; *s && d < dlimit; s++, d++) {
@@ -597,7 +597,7 @@ char **__crt0_glob_function(char *arg)
#endif /* MSDOS && (__DJGPP__ || __GO32__) */
-#ifdef WIN32
+#ifdef _WIN32
/*
* Function to find CACert bundle on a Win32 platform using SearchPath.
@@ -626,8 +626,7 @@ CURLcode FindWin32CACert(struct OperationConfig *config,
* ignored. We allow setting CA location for schannel only when explicitly
* specified by the user via CURLOPT_CAINFO / --cacert.
*/
- if((curlinfo->features & CURL_VERSION_SSL) &&
- backend != CURLSSLBACKEND_SCHANNEL) {
+ if(feature_ssl && backend != CURLSSLBACKEND_SCHANNEL) {
DWORD res_len;
TCHAR buf[PATH_MAX];
@@ -715,6 +714,8 @@ static struct TerminalSettings {
#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
#endif
+bool tool_term_has_bold;
+
static void restore_terminal(void)
{
if(InterlockedExchange(&TerminalSettings.valid, (LONG)FALSE))
@@ -734,16 +735,23 @@ static BOOL WINAPI signal_handler(DWORD type)
static void init_terminal(void)
{
TerminalSettings.hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
+
/*
* Enable VT (Virtual Terminal) output.
* Note: VT mode flag can be set on any version of Windows, but VT
- * processing only performed on Win10 >= Creators Update)
+ * processing only performed on Win10 >= version 1709 (OS build 16299)
+ * Creator's Update. Also, ANSI bold on/off supported since then.
*/
- if((TerminalSettings.hStdOut != INVALID_HANDLE_VALUE) &&
- GetConsoleMode(TerminalSettings.hStdOut,
- &TerminalSettings.dwOutputMode) &&
- !(TerminalSettings.dwOutputMode &
- ENABLE_VIRTUAL_TERMINAL_PROCESSING)) {
+ if(TerminalSettings.hStdOut == INVALID_HANDLE_VALUE ||
+ !GetConsoleMode(TerminalSettings.hStdOut,
+ &TerminalSettings.dwOutputMode) ||
+ !curlx_verify_windows_version(10, 0, 16299, PLATFORM_WINNT,
+ VERSION_GREATER_THAN_EQUAL))
+ return;
+
+ if((TerminalSettings.dwOutputMode & ENABLE_VIRTUAL_TERMINAL_PROCESSING))
+ tool_term_has_bold = true;
+ else {
/* The signal handler is set before attempting to change the console mode
because otherwise a signal would not be caught after the change but
before the handler was installed. */
@@ -752,6 +760,7 @@ static void init_terminal(void)
if(SetConsoleMode(TerminalSettings.hStdOut,
(TerminalSettings.dwOutputMode |
ENABLE_VIRTUAL_TERMINAL_PROCESSING))) {
+ tool_term_has_bold = true;
atexit(restore_terminal);
}
else {
@@ -782,6 +791,6 @@ CURLcode win32_init(void)
return CURLE_OK;
}
-#endif /* WIN32 */
+#endif /* _WIN32 */
-#endif /* MSDOS || WIN32 */
+#endif /* _WIN32 || MSDOS */
diff --git a/src/tool_doswin.h b/src/tool_doswin.h
index ff9bad97e..e07d89d95 100644
--- a/src/tool_doswin.h
+++ b/src/tool_doswin.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -25,7 +25,7 @@
***************************************************************************/
#include "tool_setup.h"
-#if defined(MSDOS) || defined(WIN32)
+#if defined(_WIN32) || defined(MSDOS)
#define SANITIZE_ALLOW_COLONS (1<<0) /* Allow colons */
#define SANITIZE_ALLOW_PATH (1<<1) /* Allow path separators and colons */
@@ -57,7 +57,7 @@ char **__crt0_glob_function(char *arg);
#endif /* MSDOS && (__DJGPP__ || __GO32__) */
-#ifdef WIN32
+#ifdef _WIN32
CURLcode FindWin32CACert(struct OperationConfig *config,
curl_sslbackend backend,
@@ -65,8 +65,8 @@ CURLcode FindWin32CACert(struct OperationConfig *config,
struct curl_slist *GetLoadedModulePaths(void);
CURLcode win32_init(void);
-#endif /* WIN32 */
+#endif /* _WIN32 */
-#endif /* MSDOS || WIN32 */
+#endif /* _WIN32 || MSDOS */
#endif /* HEADER_CURL_TOOL_DOSWIN_H */
diff --git a/src/tool_easysrc.c b/src/tool_easysrc.c
index e653b3117..6ef2be721 100644
--- a/src/tool_easysrc.c
+++ b/src/tool_easysrc.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -186,7 +186,7 @@ void dumpeasysrc(struct GlobalConfig *config)
else
out = stdout;
if(!out)
- warnf(config, "Failed to open %s to write libcurl code!\n", o);
+ warnf(config, "Failed to open %s to write libcurl code", o);
else {
int i;
const char *c;
diff --git a/src/tool_easysrc.h b/src/tool_easysrc.h
index ec2fdd23f..8c8d13150 100644
--- a/src/tool_easysrc.h
+++ b/src/tool_easysrc.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -51,7 +51,7 @@ void dumpeasysrc(struct GlobalConfig *config);
#define easysrc_init() CURLE_OK
#define easysrc_cleanup()
#define dumpeasysrc(x)
-#define easysrc_perform(x) CURLE_OK
+#define easysrc_perform() CURLE_OK
#endif /* CURL_DISABLE_LIBCURL_OPTION */
diff --git a/src/tool_filetime.c b/src/tool_filetime.c
index c095a49ee..13113886e 100644
--- a/src/tool_filetime.c
+++ b/src/tool_filetime.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -32,14 +32,16 @@
# include <sys/utime.h>
#endif
-curl_off_t getfiletime(const char *filename, struct GlobalConfig *global)
+/* Returns 0 on success, non-zero on file problems */
+int getfiletime(const char *filename, struct GlobalConfig *global,
+ curl_off_t *stamp)
{
- curl_off_t result = -1;
+ int rc = 1;
/* Windows stat() may attempt to adjust the unix GMT file time by a daylight
saving time offset and since it's GMT that is bad behavior. When we have
access to a 64-bit type we can bypass stat and get the times directly. */
-#if defined(WIN32) && (SIZEOF_CURL_OFF_T >= 8)
+#if defined(_WIN32)
HANDLE hfile;
TCHAR *tchar_filename = curlx_convert_UTF8_to_tchar((char *)filename);
@@ -52,41 +54,40 @@ curl_off_t getfiletime(const char *filename, struct GlobalConfig *global)
FILETIME ft;
if(GetFileTime(hfile, NULL, NULL, &ft)) {
curl_off_t converted = (curl_off_t)ft.dwLowDateTime
- | ((curl_off_t)ft.dwHighDateTime) << 32;
+ | ((curl_off_t)ft.dwHighDateTime) << 32;
- if(converted < CURL_OFF_T_C(116444736000000000)) {
- warnf(global, "Failed to get filetime: underflow\n");
- }
+ if(converted < CURL_OFF_T_C(116444736000000000))
+ warnf(global, "Failed to get filetime: underflow");
else {
- result = (converted - CURL_OFF_T_C(116444736000000000)) / 10000000;
+ *stamp = (converted - CURL_OFF_T_C(116444736000000000)) / 10000000;
+ rc = 0;
}
}
else {
warnf(global, "Failed to get filetime: "
- "GetFileTime failed: GetLastError %u\n",
+ "GetFileTime failed: GetLastError %u",
(unsigned int)GetLastError());
}
CloseHandle(hfile);
}
else if(GetLastError() != ERROR_FILE_NOT_FOUND) {
warnf(global, "Failed to get filetime: "
- "CreateFile failed: GetLastError %u\n",
+ "CreateFile failed: GetLastError %u",
(unsigned int)GetLastError());
}
#else
struct_stat statbuf;
if(-1 != stat(filename, &statbuf)) {
- result = (curl_off_t)statbuf.st_mtime;
- }
- else if(errno != ENOENT) {
- warnf(global, "Failed to get filetime: %s\n", strerror(errno));
+ *stamp = (curl_off_t)statbuf.st_mtime;
+ rc = 0;
}
+ else
+ warnf(global, "Failed to get filetime: %s", strerror(errno));
#endif
- return result;
+ return rc;
}
-#if defined(HAVE_UTIME) || defined(HAVE_UTIMES) || \
- (defined(WIN32) && (SIZEOF_CURL_OFF_T >= 8))
+#if defined(HAVE_UTIME) || defined(HAVE_UTIMES) || defined(_WIN32)
void setfiletime(curl_off_t filetime, const char *filename,
struct GlobalConfig *global)
{
@@ -94,7 +95,7 @@ void setfiletime(curl_off_t filetime, const char *filename,
/* Windows utime() may attempt to adjust the unix GMT file time by a daylight
saving time offset and since it's GMT that is bad behavior. When we have
access to a 64-bit type we can bypass utime and set the times directly. */
-#if defined(WIN32) && (SIZEOF_CURL_OFF_T >= 8)
+#if defined(_WIN32)
HANDLE hfile;
TCHAR *tchar_filename = curlx_convert_UTF8_to_tchar((char *)filename);
@@ -102,7 +103,7 @@ void setfiletime(curl_off_t filetime, const char *filename,
Windows FILETIME without overflow: 30827-12-31T23:59:59. */
if(filetime > CURL_OFF_T_C(910670515199)) {
warnf(global, "Failed to set filetime %" CURL_FORMAT_CURL_OFF_T
- " on outfile: overflow\n", filetime);
+ " on outfile: overflow", filetime);
curlx_unicodefree(tchar_filename);
return;
}
@@ -120,14 +121,14 @@ void setfiletime(curl_off_t filetime, const char *filename,
ft.dwHighDateTime = (DWORD)(converted >> 32);
if(!SetFileTime(hfile, NULL, &ft, &ft)) {
warnf(global, "Failed to set filetime %" CURL_FORMAT_CURL_OFF_T
- " on outfile: SetFileTime failed: GetLastError %u\n",
+ " on outfile: SetFileTime failed: GetLastError %u",
filetime, (unsigned int)GetLastError());
}
CloseHandle(hfile);
}
else {
warnf(global, "Failed to set filetime %" CURL_FORMAT_CURL_OFF_T
- " on outfile: CreateFile failed: GetLastError %u\n",
+ " on outfile: CreateFile failed: GetLastError %u",
filetime, (unsigned int)GetLastError());
}
@@ -137,7 +138,7 @@ void setfiletime(curl_off_t filetime, const char *filename,
times[0].tv_usec = times[1].tv_usec = 0;
if(utimes(filename, times)) {
warnf(global, "Failed to set filetime %" CURL_FORMAT_CURL_OFF_T
- " on '%s': %s\n", filetime, filename, strerror(errno));
+ " on '%s': %s", filetime, filename, strerror(errno));
}
#elif defined(HAVE_UTIME)
@@ -146,10 +147,10 @@ void setfiletime(curl_off_t filetime, const char *filename,
times.modtime = (time_t)filetime;
if(utime(filename, &times)) {
warnf(global, "Failed to set filetime %" CURL_FORMAT_CURL_OFF_T
- " on '%s': %s\n", filetime, filename, strerror(errno));
+ " on '%s': %s", filetime, filename, strerror(errno));
}
#endif
}
}
-#endif /* defined(HAVE_UTIME) || defined(HAVE_UTIMES) || \
- (defined(WIN32) && (SIZEOF_CURL_OFF_T >= 8)) */
+#endif /* defined(HAVE_UTIME) || defined(HAVE_UTIMES) || \
+ defined(_WIN32) */
diff --git a/src/tool_filetime.h b/src/tool_filetime.h
index 3d88d8913..205e5cee2 100644
--- a/src/tool_filetime.h
+++ b/src/tool_filetime.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -27,15 +27,16 @@
struct GlobalConfig;
-curl_off_t getfiletime(const char *filename, struct GlobalConfig *global);
+int getfiletime(const char *filename, struct GlobalConfig *global,
+ curl_off_t *stamp);
#if defined(HAVE_UTIME) || defined(HAVE_UTIMES) || \
- (defined(WIN32) && (SIZEOF_CURL_OFF_T >= 8))
+ (defined(_WIN32) && (SIZEOF_CURL_OFF_T >= 8))
void setfiletime(curl_off_t filetime, const char *filename,
struct GlobalConfig *global);
#else
#define setfiletime(a,b,c) Curl_nop_stmt
#endif /* defined(HAVE_UTIME) || defined(HAVE_UTIMES) || \
- (defined(WIN32) && (SIZEOF_CURL_OFF_T >= 8)) */
+ (defined(_WIN32) && (SIZEOF_CURL_OFF_T >= 8)) */
#endif /* HEADER_CURL_TOOL_FILETIME_H */
diff --git a/src/tool_findfile.c b/src/tool_findfile.c
index 51a45ff3a..a1544a563 100644
--- a/src/tool_findfile.c
+++ b/src/tool_findfile.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -49,11 +49,11 @@ struct finder {
/* The order of the variables below is important, as the index number is used
in the findfile() function */
-static const struct finder list[] = {
+static const struct finder conf_list[] = {
{ "CURL_HOME", NULL, FALSE },
{ "XDG_CONFIG_HOME", NULL, FALSE }, /* index == 1, used in the code */
{ "HOME", NULL, FALSE },
-#ifdef WIN32
+#ifdef _WIN32
{ "USERPROFILE", NULL, FALSE },
{ "APPDATA", NULL, FALSE },
{ "USERPROFILE", "\\Application Data", FALSE},
@@ -109,8 +109,8 @@ char *findfile(const char *fname, int dotscore)
if(!fname[0])
return NULL;
- for(i = 0; list[i].env; i++) {
- char *home = curl_getenv(list[i].env);
+ for(i = 0; conf_list[i].env; i++) {
+ char *home = curl_getenv(conf_list[i].env);
if(home) {
char *path;
const char *filename = fname;
@@ -120,14 +120,14 @@ char *findfile(const char *fname, int dotscore)
curl_free(home);
continue;
}
- if(list[i].append) {
- char *c = curl_maprintf("%s%s", home, list[i].append);
+ if(conf_list[i].append) {
+ char *c = curl_maprintf("%s%s", home, conf_list[i].append);
curl_free(home);
if(!c)
return NULL;
home = c;
}
- if(list[i].withoutdot) {
+ if(conf_list[i].withoutdot) {
if(!dotscore || xdg) {
/* this is not looking for .curlrc, or the XDG_CONFIG_HOME was
defined so we skip the extended check */
diff --git a/src/tool_findfile.h b/src/tool_findfile.h
index 5bae579e1..63d25195f 100644
--- a/src/tool_findfile.h
+++ b/src/tool_findfile.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -25,7 +25,7 @@
***************************************************************************/
#include "tool_setup.h"
-#ifdef WIN32
+#ifdef _WIN32
#define CURLRC_DOTSCORE 2 /* look for underscore-prefixed name too */
#else
#define CURLRC_DOTSCORE 1 /* regular .curlrc check */
diff --git a/src/tool_formparse.c b/src/tool_formparse.c
index d4fc651e2..fa38698d5 100644
--- a/src/tool_formparse.c
+++ b/src/tool_formparse.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -61,17 +61,18 @@ static struct tool_mime *tool_mime_new_parts(struct tool_mime *parent)
}
static struct tool_mime *tool_mime_new_data(struct tool_mime *parent,
- char *data)
+ char *mime_data)
{
+ char *mime_data_copy;
struct tool_mime *m = NULL;
- data = strdup(data);
- if(data) {
+ mime_data_copy = strdup(mime_data);
+ if(mime_data_copy) {
m = tool_mime_new(parent, TOOLMIME_DATA);
if(!m)
- free(data);
+ free(mime_data_copy);
else
- m->data = data;
+ m->data = mime_data_copy;
}
return m;
}
@@ -201,7 +202,7 @@ size_t tool_mime_stdin_read(char *buffer,
if(ferror(stdin)) {
/* Show error only once. */
if(sip->config) {
- warnf(sip->config, "stdin: %s\n", strerror(errno));
+ warnf(sip->config, "stdin: %s", strerror(errno));
sip->config = NULL;
}
return CURL_READFUNC_ABORT;
@@ -368,7 +369,7 @@ static char *get_param_word(struct OperationConfig *config, char **str,
++ptr;
}
if(trailing_data)
- warnf(config->global, "Trailing data after quoted form parameter\n");
+ warnf(config->global, "Trailing data after quoted form parameter");
*str = ptr;
return word_begin + 1;
}
@@ -416,8 +417,7 @@ static int read_field_headers(struct OperationConfig *config,
if(hdrlen) {
hdrbuf[hdrlen] = '\0';
if(slist_append(pheaders, hdrbuf)) {
- fprintf(config->global->errors,
- "Out of memory for field headers!\n");
+ errorf(config->global, "Out of memory for field headers");
return -1;
}
hdrlen = 0;
@@ -427,8 +427,8 @@ static int read_field_headers(struct OperationConfig *config,
switch(c) {
case EOF:
if(ferror(fp)) {
- fprintf(config->global->errors,
- "Header file %s read error: %s\n", filename, strerror(errno));
+ errorf(config->global, "Header file %s read error: %s", filename,
+ strerror(errno));
return -1;
}
return 0; /* Done. */
@@ -448,7 +448,7 @@ static int read_field_headers(struct OperationConfig *config,
pos++;
if(!incomment) {
if(hdrlen == sizeof(hdrbuf) - 1) {
- warnf(config->global, "File %s line %d: header too long (truncated)\n",
+ warnf(config->global, "File %s line %d: header too long (truncated)",
filename, lineno);
c = ' ';
}
@@ -506,7 +506,7 @@ static int get_param_part(struct OperationConfig *config, char endchar,
/* verify that this is a fine type specifier */
if(2 != sscanf(type, "%127[^/ ]/%127[^;, \n]", type_major, type_minor)) {
- warnf(config->global, "Illegally formatted content-type field!\n");
+ warnf(config->global, "Illegally formatted content-type field");
curl_slist_free_all(headers);
return -1; /* illegal content-type syntax! */
}
@@ -558,7 +558,7 @@ static int get_param_part(struct OperationConfig *config, char endchar,
*endpos = '\0';
fp = fopen(hdrfile, FOPEN_READTEXT);
if(!fp)
- warnf(config->global, "Cannot read from %s: %s\n", hdrfile,
+ warnf(config->global, "Cannot read from %s: %s", hdrfile,
strerror(errno));
else {
int i = read_field_headers(config, hdrfile, fp, &headers);
@@ -584,7 +584,7 @@ static int get_param_part(struct OperationConfig *config, char endchar,
sep = *p;
*endpos = '\0';
if(slist_append(&headers, hdr)) {
- fprintf(config->global->errors, "Out of memory for field header!\n");
+ errorf(config->global, "Out of memory for field header");
curl_slist_free_all(headers);
return -1;
}
@@ -620,7 +620,7 @@ static int get_param_part(struct OperationConfig *config, char endchar,
sep = *p;
*endpos = '\0';
if(*unknown)
- warnf(config->global, "skip unknown form field: %s\n", unknown);
+ warnf(config->global, "skip unknown form field: %s", unknown);
}
}
@@ -631,25 +631,25 @@ static int get_param_part(struct OperationConfig *config, char endchar,
if(ptype)
*ptype = type;
else if(type)
- warnf(config->global, "Field content type not allowed here: %s\n", type);
+ warnf(config->global, "Field content type not allowed here: %s", type);
if(pfilename)
*pfilename = filename;
else if(filename)
warnf(config->global,
- "Field file name not allowed here: %s\n", filename);
+ "Field file name not allowed here: %s", filename);
if(pencoder)
*pencoder = encoder;
else if(encoder)
warnf(config->global,
- "Field encoder not allowed here: %s\n", encoder);
+ "Field encoder not allowed here: %s", encoder);
if(pheaders)
*pheaders = headers;
else if(headers) {
warnf(config->global,
- "Field headers not allowed here: %s\n", headers->data);
+ "Field headers not allowed here: %s", headers->data);
curl_slist_free_all(headers);
}
@@ -772,7 +772,7 @@ int formparse(struct OperationConfig *config,
else if(!name && !strcmp(contp, ")") && !literal_value) {
/* Ending a multipart. */
if(*mimecurrent == *mimeroot) {
- warnf(config->global, "no multipart to terminate!\n");
+ warnf(config->global, "no multipart to terminate");
goto fail;
}
*mimecurrent = (*mimecurrent)->parent;
@@ -818,7 +818,7 @@ int formparse(struct OperationConfig *config,
libcurl. */
if(part->size > 0) {
warnf(config->global,
- "error while reading standard input\n");
+ "error while reading standard input");
goto fail;
}
Curl_safefree(part->data);
@@ -855,7 +855,7 @@ int formparse(struct OperationConfig *config,
libcurl. */
if(part->size > 0) {
warnf(config->global,
- "error while reading standard input\n");
+ "error while reading standard input");
goto fail;
}
Curl_safefree(part->data);
@@ -888,7 +888,7 @@ int formparse(struct OperationConfig *config,
if(sep) {
*contp = (char) sep;
warnf(config->global,
- "garbage at end of field specification: %s\n", contp);
+ "garbage at end of field specification: %s", contp);
}
}
@@ -896,11 +896,11 @@ int formparse(struct OperationConfig *config,
SET_TOOL_MIME_PTR(part, name);
}
else {
- warnf(config->global, "Illegally formatted input field!\n");
+ warnf(config->global, "Illegally formatted input field");
goto fail;
}
err = 0;
- fail:
+fail:
Curl_safefree(contents);
curl_slist_free_all(headers);
return err;
diff --git a/src/tool_formparse.h b/src/tool_formparse.h
index 8c0461c69..35d5c952d 100644
--- a/src/tool_formparse.h
+++ b/src/tool_formparse.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/src/tool_getparam.c b/src/tool_getparam.c
index af4b3a698..5fa1ace10 100644
--- a/src/tool_getparam.c
+++ b/src/tool_getparam.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -41,6 +41,9 @@
#include "tool_paramhlp.h"
#include "tool_parsecfg.h"
#include "tool_main.h"
+#include "dynbuf.h"
+#include "tool_stderr.h"
+#include "var.h"
#include "memdebug.h" /* keep this as LAST include */
@@ -48,17 +51,19 @@
# define USE_WATT32
#endif
-#define GetStr(str,val) do { \
- if(*(str)) { \
- free(*(str)); \
- *(str) = NULL; \
- } \
- if((val)) { \
- *(str) = strdup((val)); \
- if(!(*(str))) \
- return PARAM_NO_MEM; \
- } \
-} while(0)
+#define GetStr(str,val) do { \
+ if(*(str)) { \
+ free(*(str)); \
+ *(str) = NULL; \
+ } \
+ if((val)) { \
+ *(str) = strdup((val)); \
+ if(!(*(str))) { \
+ err = PARAM_NO_MEM; \
+ goto error; \
+ } \
+ } \
+ } while(0)
struct LongShort {
const char *letter; /* short name option */
@@ -111,6 +116,7 @@ static const struct LongShort aliases[]= {
{"*r", "create-dirs", ARG_BOOL},
{"*R", "create-file-mode", ARG_STRING},
{"*s", "max-redirs", ARG_STRING},
+ {"*S", "ipfs-gateway", ARG_STRING},
{"*t", "proxy-ntlm", ARG_BOOL},
{"*u", "crlf", ARG_BOOL},
{"*v", "stderr", ARG_FILENAME},
@@ -120,6 +126,7 @@ static const struct LongShort aliases[]= {
{"*x", "krb4", ARG_STRING},
/* 'krb4' is the previous name */
{"*X", "haproxy-protocol", ARG_BOOL},
+ {"*P", "haproxy-clientip", ARG_STRING},
{"*y", "max-filesize", ARG_STRING},
{"*z", "disable-eprt", ARG_BOOL},
{"*Z", "eprt", ARG_BOOL},
@@ -202,12 +209,16 @@ static const struct LongShort aliases[]= {
{"$Z", "compressed-ssh", ARG_BOOL},
{"$~", "happy-eyeballs-timeout-ms", ARG_STRING},
{"$!", "retry-all-errors", ARG_BOOL},
+ {"$%", "trace-ids", ARG_BOOL},
+ {"$&", "trace-config", ARG_STRING},
{"0", "http1.0", ARG_NONE},
{"01", "http1.1", ARG_NONE},
{"02", "http2", ARG_NONE},
{"03", "http2-prior-knowledge", ARG_NONE},
{"04", "http3", ARG_NONE},
+ {"05", "http3-only", ARG_NONE},
{"09", "http0.9", ARG_BOOL},
+ {"0a", "proxy-http2", ARG_BOOL},
{"1", "tlsv1", ARG_NONE},
{"10", "tlsv1.0", ARG_NONE},
{"11", "tlsv1.1", ARG_NONE},
@@ -233,6 +244,7 @@ static const struct LongShort aliases[]= {
{"db", "data-binary", ARG_STRING},
{"de", "data-urlencode", ARG_STRING},
{"df", "json", ARG_STRING},
+ {"dg", "url-query", ARG_STRING},
{"D", "dump-header", ARG_FILENAME},
{"e", "referer", ARG_STRING},
{"E", "cert", ARG_FILENAME},
@@ -242,6 +254,8 @@ static const struct LongShort aliases[]= {
{"Ed", "key-type", ARG_STRING},
{"Ee", "pass", ARG_STRING},
{"Ef", "engine", ARG_STRING},
+ {"EG", "ca-native", ARG_BOOL},
+ {"EH", "proxy-ca-native", ARG_BOOL},
{"Eg", "capath", ARG_FILENAME},
{"Eh", "pubkey", ARG_STRING},
{"Ei", "hostpubmd5", ARG_STRING},
@@ -291,7 +305,7 @@ static const struct LongShort aliases[]= {
{"F", "form", ARG_STRING},
{"Fs", "form-string", ARG_STRING},
{"g", "globoff", ARG_BOOL},
- {"G", "get", ARG_NONE},
+ {"G", "get", ARG_BOOL},
{"Ga", "request-target", ARG_STRING},
{"h", "help", ARG_BOOL},
{"H", "header", ARG_STRING},
@@ -345,6 +359,7 @@ static const struct LongShort aliases[]= {
{"#", "progress-bar", ARG_BOOL},
{"#m", "progress-meter", ARG_BOOL},
{":", "next", ARG_NONE},
+ {":a", "variable", ARG_STRING},
};
/* Split the argument of -E to 'certname' and 'passphrase' separated by colon.
@@ -422,7 +437,7 @@ void parse_cert_parameter(const char *cert_parameter,
needs to work. In order not to break compatibility, we still use : as
separator, but we try to detect when it is used for a file name! On
windows. */
-#ifdef WIN32
+#ifdef _WIN32
if((param_place == &cert_parameter[1]) &&
(cert_parameter[2] == '\\' || cert_parameter[2] == '/') &&
(ISALPHA(cert_parameter[0])) ) {
@@ -500,8 +515,8 @@ static ParameterError GetSizeParameter(struct GlobalConfig *global,
char *unit;
curl_off_t value;
- if(curlx_strtoofft(arg, &unit, 0, &value)) {
- warnf(global, "invalid number specified for %s\n", which);
+ if(curlx_strtoofft(arg, &unit, 10, &value)) {
+ warnf(global, "invalid number specified for %s", which);
return PARAM_BAD_USE;
}
@@ -534,7 +549,7 @@ static ParameterError GetSizeParameter(struct GlobalConfig *global,
/* for plain bytes, leave as-is */
break;
default:
- warnf(global, "unsupported %s unit. Use G, M, K or B!\n", which);
+ warnf(global, "unsupported %s unit. Use G, M, K or B", which);
return PARAM_BAD_USE;
}
*value_out = value;
@@ -595,10 +610,10 @@ static ParameterError data_urlencode(struct GlobalConfig *global,
}
else {
file = fopen(p, "rb");
- if(!file)
- warnf(global,
- "Couldn't read data from file \"%s\", this makes "
- "an empty POST.\n", nextarg);
+ if(!file) {
+ errorf(global, "Failed to open %s", p);
+ return PARAM_READ_ERROR;
+ }
}
err = file2memory(&postdata, &size, file);
@@ -653,11 +668,79 @@ static ParameterError data_urlencode(struct GlobalConfig *global,
*postp = postdata;
*lenp = size;
return PARAM_OK;
+error:
+ return err;
}
+static void sethttpver(struct GlobalConfig *global,
+ struct OperationConfig *config,
+ long httpversion)
+{
+ if(config->httpversion &&
+ (config->httpversion != httpversion))
+ warnf(global, "Overrides previous HTTP version option");
+
+ config->httpversion = httpversion;
+}
+
+static CURLcode set_trace_config(struct GlobalConfig *global,
+ const char *config)
+{
+ CURLcode result = CURLE_OK;
+ char *token, *tmp, *name;
+ bool toggle;
+
+ tmp = strdup(config);
+ if(!tmp)
+ return CURLE_OUT_OF_MEMORY;
+
+ /* Allow strtok() here since this isn't used threaded */
+ /* !checksrc! disable BANNEDFUNC 2 */
+ token = strtok(tmp, ", ");
+ while(token) {
+ switch(*token) {
+ case '-':
+ toggle = FALSE;
+ name = token + 1;
+ break;
+ case '+':
+ toggle = TRUE;
+ name = token + 1;
+ break;
+ default:
+ toggle = TRUE;
+ name = token;
+ break;
+ }
+
+ if(strcasecompare(name, "all")) {
+ global->traceids = toggle;
+ global->tracetime = toggle;
+ result = curl_global_trace(token);
+ if(result)
+ goto out;
+ }
+ else if(strcasecompare(name, "ids")) {
+ global->traceids = toggle;
+ }
+ else if(strcasecompare(name, "time")) {
+ global->tracetime = toggle;
+ }
+ else {
+ result = curl_global_trace(token);
+ if(result)
+ goto out;
+ }
+ token = strtok(NULL, ", ");
+ }
+out:
+ free(tmp);
+ return result;
+}
ParameterError getparameter(const char *flag, /* f or -long-flag */
char *nextarg, /* NULL if unset */
+ argv_item_t cleararg,
bool *usedarg, /* set to TRUE if the arg
has been used */
struct GlobalConfig *global,
@@ -672,13 +755,10 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
int hit = -1;
bool longopt = FALSE;
bool singleopt = FALSE; /* when true means '-o foo' used '-ofoo' */
- ParameterError err;
+ ParameterError err = PARAM_OK;
bool toggle = TRUE; /* how to switch boolean options, on or off. Controlled
by using --OPTION or --no-OPTION */
-#ifdef HAVE_WRITABLE_ARGV
- argv_item_t clearthis = NULL;
-#endif
-
+ bool nextalloc = FALSE; /* if nextarg is allocated */
static const char *redir_protos[] = {
"http",
"https",
@@ -686,6 +766,11 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
"ftps",
NULL
};
+#ifdef HAVE_WRITABLE_ARGV
+ argv_item_t clearthis = NULL;
+#else
+ (void)cleararg;
+#endif
*usedarg = FALSE; /* default is that we don't use the arg */
@@ -695,6 +780,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
size_t fnam = strlen(word);
int numhits = 0;
bool noflagged = FALSE;
+ bool expand = FALSE;
if(!strncmp(word, "no-", 3)) {
/* disable this option but ignore the "no-" part when looking for it */
@@ -702,6 +788,11 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
toggle = FALSE;
noflagged = TRUE;
}
+ else if(!strncmp(word, "expand-", 7)) {
+ /* variable expansions is to be done on the argument */
+ word += 7;
+ expand = TRUE;
+ }
for(j = 0; j < sizeof(aliases)/sizeof(aliases[0]); j++) {
if(curl_strnequal(aliases[j].lname, word, fnam)) {
@@ -719,14 +810,38 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
}
if(numhits > 1) {
/* this is at least the second match! */
- return PARAM_OPTION_AMBIGUOUS;
+ err = PARAM_OPTION_AMBIGUOUS;
+ goto error;
}
- if(hit < 0) {
- return PARAM_OPTION_UNKNOWN;
+ else if(hit < 0) {
+ err = PARAM_OPTION_UNKNOWN;
+ goto error;
}
- if(noflagged && (aliases[hit].desc != ARG_BOOL))
+ else if(noflagged && (aliases[hit].desc != ARG_BOOL)) {
/* --no- prefixed an option that isn't boolean! */
- return PARAM_NO_NOT_BOOLEAN;
+ err = PARAM_NO_NOT_BOOLEAN;
+ goto error;
+ }
+ else if(expand) {
+ struct curlx_dynbuf nbuf;
+ bool replaced;
+
+ if((aliases[hit].desc != ARG_STRING) &&
+ (aliases[hit].desc != ARG_FILENAME)) {
+ /* --expand on an option that isn't a string or a filename */
+ err = PARAM_EXPAND_ERROR;
+ goto error;
+ }
+ err = varexpand(global, nextarg, &nbuf, &replaced);
+ if(err) {
+ curlx_dyn_free(&nbuf);
+ goto error;
+ }
+ if(replaced) {
+ nextarg = curlx_dyn_ptr(&nbuf);
+ nextalloc = TRUE;
+ }
+ }
}
else {
flag++; /* prefixed with one dash, pass it */
@@ -754,7 +869,8 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
}
}
if(hit < 0) {
- return PARAM_OPTION_UNKNOWN;
+ err = PARAM_OPTION_UNKNOWN;
+ break;
}
}
@@ -762,38 +878,47 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
/* this option requires an extra parameter */
if(!longopt && parse[1]) {
nextarg = (char *)&parse[1]; /* this is the actual extra parameter */
-#ifdef HAVE_WRITABLE_ARGV
- clearthis = nextarg;
-#endif
singleopt = TRUE; /* don't loop anymore after this */
}
- else if(!nextarg)
- return PARAM_REQUIRES_PARAMETER;
- else
+ else if(!nextarg) {
+ err = PARAM_REQUIRES_PARAMETER;
+ break;
+ }
+ else {
+#ifdef HAVE_WRITABLE_ARGV
+ clearthis = cleararg;
+#endif
*usedarg = TRUE; /* mark it as used */
+ }
if((aliases[hit].desc == ARG_FILENAME) &&
(nextarg[0] == '-') && nextarg[1]) {
/* if the file name looks like a command line option */
- warnf(global, "The file name argument '%s' looks like a flag.\n",
+ warnf(global, "The file name argument '%s' looks like a flag.",
nextarg);
}
}
- else if((aliases[hit].desc == ARG_NONE) && !toggle)
- return PARAM_NO_PREFIX;
+ else if((aliases[hit].desc == ARG_NONE) && !toggle) {
+ err = PARAM_NO_PREFIX;
+ break;
+ }
switch(letter) {
case '*': /* options without a short option */
switch(subletter) {
case '4': /* --dns-ipv4-addr */
- if(!curlinfo->ares_num) /* c-ares is needed for this */
- return PARAM_LIBCURL_DOESNT_SUPPORT;
+ if(!curlinfo->ares_num) { /* c-ares is needed for this */
+ err = PARAM_LIBCURL_DOESNT_SUPPORT;
+ break;
+ }
/* addr in dot notation */
GetStr(&config->dns_ipv4_addr, nextarg);
break;
case '6': /* --dns-ipv6-addr */
- if(!curlinfo->ares_num) /* c-ares is needed for this */
- return PARAM_LIBCURL_DOESNT_SUPPORT;
+ if(!curlinfo->ares_num) { /* c-ares is needed for this */
+ err = PARAM_LIBCURL_DOESNT_SUPPORT;
+ break;
+ }
/* addr in dot notation */
GetStr(&config->dns_ipv6_addr, nextarg);
break;
@@ -807,10 +932,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
config->authtype |= CURLAUTH_BEARER;
break;
case 'c': /* connect-timeout */
- err = str2udouble(&config->connecttimeout, nextarg,
- (double)LONG_MAX/1000);
- if(err)
- return err;
+ err = secs2ms(&config->connecttimeout_ms, nextarg);
break;
case 'C': /* doh-url */
GetStr(&config->doh_url, nextarg);
@@ -823,9 +945,10 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case 'D': /* --dns-interface */
if(!curlinfo->ares_num) /* c-ares is needed for this */
- return PARAM_LIBCURL_DOESNT_SUPPORT;
- /* interface name */
- GetStr(&config->dns_interface, nextarg);
+ err = PARAM_LIBCURL_DOESNT_SUPPORT;
+ else
+ /* interface name */
+ GetStr(&config->dns_interface, nextarg);
break;
case 'e': /* --disable-epsv */
config->disable_epsv = toggle;
@@ -838,24 +961,25 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case 'F': /* --dns-servers */
if(!curlinfo->ares_num) /* c-ares is needed for this */
- return PARAM_LIBCURL_DOESNT_SUPPORT;
- /* IP addrs of DNS servers */
- GetStr(&config->dns_servers, nextarg);
+ err = PARAM_LIBCURL_DOESNT_SUPPORT;
+ else
+ /* IP addrs of DNS servers */
+ GetStr(&config->dns_servers, nextarg);
break;
case 'g': /* --trace */
GetStr(&global->trace_dump, nextarg);
if(global->tracetype && (global->tracetype != TRACE_BIN))
- warnf(global, "--trace overrides an earlier trace/verbose option\n");
+ warnf(global, "--trace overrides an earlier trace/verbose option");
global->tracetype = TRACE_BIN;
break;
case 'G': /* --npn */
- warnf(global, "--npn is no longer supported\n");
+ warnf(global, "--npn is no longer supported");
break;
case 'h': /* --trace-ascii */
GetStr(&global->trace_dump, nextarg);
if(global->tracetype && (global->tracetype != TRACE_ASCII))
warnf(global,
- "--trace-ascii overrides an earlier trace/verbose option\n");
+ "--trace-ascii overrides an earlier trace/verbose option");
global->tracetype = TRACE_ASCII;
break;
case 'H': /* --alpn */
@@ -864,10 +988,9 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
case 'i': /* --limit-rate */
{
curl_off_t value;
- ParameterError pe = GetSizeParameter(global, nextarg, "rate", &value);
-
- if(pe != PARAM_OK)
- return pe;
+ err = GetSizeParameter(global, nextarg, "rate", &value);
+ if(err)
+ break;
config->recvpersecond = value;
config->sendpersecond = value;
}
@@ -886,15 +1009,20 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
long denominator;
long numerator = 60*60*1000; /* default per hour */
size_t numlen = div ? (size_t)(div - nextarg) : strlen(nextarg);
- if(numlen > sizeof(number)-1)
- return PARAM_NUMBER_TOO_LARGE;
+ if(numlen > sizeof(number)-1) {
+ err = PARAM_NUMBER_TOO_LARGE;
+ break;
+ }
strncpy(number, nextarg, numlen);
number[numlen] = 0;
err = str2unum(&denominator, number);
if(err)
- return err;
- if(denominator < 1)
- return PARAM_BAD_USE;
+ break;
+
+ if(denominator < 1) {
+ err = PARAM_BAD_USE;
+ break;
+ }
if(div) {
char unit = div[1];
switch(unit) {
@@ -910,19 +1038,26 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
numerator = 24*60*60*1000;
break;
default:
- errorf(global, "unsupported --rate unit\n");
- return PARAM_BAD_USE;
+ errorf(global, "unsupported --rate unit");
+ err = PARAM_BAD_USE;
+ break;
}
}
+
+ if(denominator > numerator) {
+ err = PARAM_NUMBER_TOO_LARGE;
+ break;
+ }
+
global->ms_per_transfer = numerator/denominator;
}
break;
case 'j': /* --compressed */
- if(toggle &&
- !(curlinfo->features & (CURL_VERSION_LIBZ |
- CURL_VERSION_BROTLI | CURL_VERSION_ZSTD)))
- return PARAM_LIBCURL_DOESNT_SUPPORT;
+ if(toggle && !(feature_libz || feature_brotli || feature_zstd)) {
+ err = PARAM_LIBCURL_DOESNT_SUPPORT;
+ break;
+ }
config->encoding = toggle;
break;
@@ -938,36 +1073,36 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case 'l': /* --negotiate */
- if(toggle) {
- if(curlinfo->features & CURL_VERSION_SPNEGO)
- config->authtype |= CURLAUTH_NEGOTIATE;
- else
- return PARAM_LIBCURL_DOESNT_SUPPORT;
- }
- else
+ if(!toggle)
config->authtype &= ~CURLAUTH_NEGOTIATE;
+ else if(feature_spnego)
+ config->authtype |= CURLAUTH_NEGOTIATE;
+ else {
+ err = PARAM_LIBCURL_DOESNT_SUPPORT;
+ break;
+ }
break;
case 'm': /* --ntlm */
- if(toggle) {
- if(curlinfo->features & CURL_VERSION_NTLM)
- config->authtype |= CURLAUTH_NTLM;
- else
- return PARAM_LIBCURL_DOESNT_SUPPORT;
- }
- else
+ if(!toggle)
config->authtype &= ~CURLAUTH_NTLM;
+ else if(feature_ntlm)
+ config->authtype |= CURLAUTH_NTLM;
+ else {
+ err = PARAM_LIBCURL_DOESNT_SUPPORT;
+ break;
+ }
break;
case 'M': /* --ntlm-wb */
- if(toggle) {
- if(curlinfo->features & CURL_VERSION_NTLM_WB)
- config->authtype |= CURLAUTH_NTLM_WB;
- else
- return PARAM_LIBCURL_DOESNT_SUPPORT;
- }
- else
+ if(!toggle)
config->authtype &= ~CURLAUTH_NTLM_WB;
+ else if(feature_ntlm_wb)
+ config->authtype |= CURLAUTH_NTLM_WB;
+ else {
+ err = PARAM_LIBCURL_DOESNT_SUPPORT;
+ break;
+ }
break;
case 'n': /* --basic for completeness */
@@ -998,8 +1133,6 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
case 'R': /* --create-file-mode */
err = oct2nummax(&config->create_file_mode, nextarg, 0777);
- if(err)
- return err;
break;
case 's': /* --max-redirs */
@@ -1007,16 +1140,21 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
special condition */
err = str2num(&config->maxredirs, nextarg);
if(err)
- return err;
+ break;
if(config->maxredirs < -1)
- return PARAM_BAD_NUMERIC;
+ err = PARAM_BAD_NUMERIC;
+ break;
+
+ case 'S': /* ipfs gateway url */
+ GetStr(&config->ipfs_gateway, nextarg);
break;
case 't': /* --proxy-ntlm */
- if(curlinfo->features & CURL_VERSION_NTLM)
- config->proxyntlm = toggle;
- else
- return PARAM_LIBCURL_DOESNT_SUPPORT;
+ if(!feature_ntlm) {
+ err = PARAM_LIBCURL_DOESNT_SUPPORT;
+ break;
+ }
+ config->proxyntlm = toggle;
break;
case 'u': /* --crlf */
@@ -1030,19 +1168,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case 'v': /* --stderr */
- if(strcmp(nextarg, "-")) {
- FILE *newfile = fopen(nextarg, FOPEN_WRITETEXT);
- if(!newfile)
- warnf(global, "Failed to open %s!\n", nextarg);
- else {
- if(global->errors_fopened)
- fclose(global->errors);
- global->errors = newfile;
- global->errors_fopened = TRUE;
- }
- }
- else
- global->errors = stdout;
+ tool_set_stderr_file(global, nextarg);
break;
case 'w': /* --interface */
/* interface */
@@ -1050,22 +1176,25 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case 'x': /* --krb */
/* kerberos level string */
- if(curlinfo->features & CURL_VERSION_SPNEGO)
- GetStr(&config->krblevel, nextarg);
- else
- return PARAM_LIBCURL_DOESNT_SUPPORT;
+ if(!feature_spnego) {
+ err = PARAM_LIBCURL_DOESNT_SUPPORT;
+ break;
+ }
+ GetStr(&config->krblevel, nextarg);
break;
case 'X': /* --haproxy-protocol */
config->haproxy_protocol = toggle;
break;
+ case 'P': /* --haproxy-clientip */
+ GetStr(&config->haproxy_clientip, nextarg);
+ break;
case 'y': /* --max-filesize */
{
curl_off_t value;
- ParameterError pe =
+ err =
GetSizeParameter(global, nextarg, "max-filesize", &value);
-
- if(pe != PARAM_OK)
- return pe;
+ if(err)
+ break;
config->max_filesize = value;
}
break;
@@ -1101,8 +1230,10 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
/* there was no free node, create one! */
config->url_get = url = new_getout(config);
- if(!url)
- return PARAM_NO_MEM;
+ if(!url) {
+ err = PARAM_NO_MEM;
+ break;
+ }
/* fill in the URL */
GetStr(&url->url, nextarg);
@@ -1113,12 +1244,14 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
case '$': /* more options without a short option */
switch(subletter) {
case 'a': /* --ssl */
- if(toggle && !(curlinfo->features & CURL_VERSION_SSL))
- return PARAM_LIBCURL_DOESNT_SUPPORT;
+ if(toggle && !feature_ssl) {
+ err = PARAM_LIBCURL_DOESNT_SUPPORT;
+ break;
+ }
config->ftp_ssl = toggle;
if(config->ftp_ssl)
warnf(global,
- "--ssl is an insecure option, consider --ssl-reqd instead\n");
+ "--ssl is an insecure option, consider --ssl-reqd instead");
break;
case 'b': /* --ftp-pasv */
Curl_safefree(config->ftpport);
@@ -1152,31 +1285,26 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case 'g': /* --retry */
err = str2unum(&config->req_retry, nextarg);
- if(err)
- return err;
break;
case 'V': /* --retry-connrefused */
config->retry_connrefused = toggle;
break;
case 'h': /* --retry-delay */
err = str2unummax(&config->retry_delay, nextarg, LONG_MAX/1000);
- if(err)
- return err;
break;
case 'i': /* --retry-max-time */
err = str2unummax(&config->retry_maxtime, nextarg, LONG_MAX/1000);
- if(err)
- return err;
break;
case '!': /* --retry-all-errors */
config->retry_all_errors = toggle;
break;
case 'k': /* --proxy-negotiate */
- if(curlinfo->features & CURL_VERSION_SPNEGO)
- config->proxynegotiate = toggle;
- else
- return PARAM_LIBCURL_DOESNT_SUPPORT;
+ if(!feature_spnego) {
+ err = PARAM_LIBCURL_DOESNT_SUPPORT;
+ break;
+ }
+ config->proxynegotiate = toggle;
break;
case 'l': /* --form-escape */
@@ -1219,17 +1347,21 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
rc = 0;
err = str2unum(&config->localport, nextarg);
- if(err || (config->localport > 65535))
- return PARAM_BAD_USE;
+ if(err || (config->localport > 65535)) {
+ err = PARAM_BAD_USE;
+ break;
+ }
if(!rc)
config->localportrange = 1; /* default number of ports to try */
else {
err = str2unum(&config->localportrange, lrange);
if(err || (config->localportrange > 65535))
- return PARAM_BAD_USE;
- config->localportrange -= (config->localport-1);
- if(config->localportrange < 1)
- return PARAM_BAD_USE;
+ err = PARAM_BAD_USE;
+ else {
+ config->localportrange -= (config->localport-1);
+ if(config->localportrange < 1)
+ err = PARAM_BAD_USE;
+ }
}
break;
}
@@ -1237,16 +1369,20 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
GetStr(&config->ftp_alternative_to_user, nextarg);
break;
case 'v': /* --ssl-reqd */
- if(toggle && !(curlinfo->features & CURL_VERSION_SSL))
- return PARAM_LIBCURL_DOESNT_SUPPORT;
+ if(toggle && !feature_ssl) {
+ err = PARAM_LIBCURL_DOESNT_SUPPORT;
+ break;
+ }
config->ftp_ssl_reqd = toggle;
break;
case 'w': /* --no-sessionid */
config->disable_sessionid = (!toggle)?TRUE:FALSE;
break;
case 'x': /* --ftp-ssl-control */
- if(toggle && !(curlinfo->features & CURL_VERSION_SSL))
- return PARAM_LIBCURL_DOESNT_SUPPORT;
+ if(toggle && !feature_ssl) {
+ err = PARAM_LIBCURL_DOESNT_SUPPORT;
+ break;
+ }
config->ftp_ssl_control = toggle;
break;
case 'y': /* --ftp-ssl-ccc */
@@ -1261,8 +1397,9 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
case 'z': /* --libcurl */
#ifdef CURL_DISABLE_LIBCURL_OPTION
warnf(global,
- "--libcurl option was disabled at build-time!\n");
- return PARAM_OPTION_UNKNOWN;
+ "--libcurl option was disabled at build-time");
+ err = PARAM_OPTION_UNKNOWN;
+ break;
#else
GetStr(&global->libcurl, nextarg);
break;
@@ -1278,8 +1415,6 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case '3': /* --keepalive-time */
err = str2unum(&config->alivetime, nextarg);
- if(err)
- return err;
break;
case '4': /* --post302 */
config->post302 = toggle;
@@ -1291,7 +1426,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
/* This specifies the noproxy list */
GetStr(&config->noproxy, nextarg);
break;
- case '7': /* --socks5-gssapi-nec*/
+ case '7': /* --socks5-gssapi-nec */
config->socks5_gssapi_nec = toggle;
break;
case '8': /* --proxy1.0 */
@@ -1301,8 +1436,6 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case '9': /* --tftp-blksize */
err = str2unum(&config->tftp_blksize, nextarg);
- if(err)
- return err;
break;
case 'A': /* --mail-from */
GetStr(&config->mail_from, nextarg);
@@ -1310,8 +1443,6 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
case 'B': /* --mail-rcpt */
/* append receiver to a list */
err = add2list(&config->mail_rcpt, nextarg);
- if(err)
- return err;
break;
case 'C': /* --ftp-pret */
config->ftp_pret = toggle;
@@ -1319,18 +1450,17 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
case 'D': /* --proto */
config->proto_present = TRUE;
err = proto2num(config, built_in_protos, &config->proto_str, nextarg);
- if(err)
- return err;
break;
case 'E': /* --proto-redir */
config->proto_redir_present = TRUE;
- if(proto2num(config, redir_protos, &config->proto_redir_str, nextarg))
- return PARAM_BAD_USE;
+ if(proto2num(config, redir_protos, &config->proto_redir_str,
+ nextarg)) {
+ err = PARAM_BAD_USE;
+ break;
+ }
break;
case 'F': /* --resolve */
err = add2list(&config->resolve, nextarg);
- if(err)
- return err;
break;
case 'G': /* --delegation LEVEL */
config->gssapi_delegation = delegation(config, nextarg);
@@ -1339,8 +1469,9 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
GetStr(&config->mail_auth, nextarg);
break;
case 'J': /* --metalink */
- errorf(global, "--metalink is disabled\n");
- return PARAM_BAD_USE;
+ errorf(global, "--metalink is disabled");
+ err = PARAM_BAD_USE;
+ break;
case '6': /* --sasl-authzid */
GetStr(&config->sasl_authzid, nextarg);
break;
@@ -1351,7 +1482,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
#ifdef CURLDEBUG
global->test_event_based = toggle;
#else
- warnf(global, "--test-event is ignored unless a debug build!\n");
+ warnf(global, "--test-event is ignored unless a debug build");
#endif
break;
case 'M': /* --unix-socket */
@@ -1370,22 +1501,15 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
case 'Q': /* --proto-default */
GetStr(&config->proto_default, nextarg);
err = check_protocol(config->proto_default);
- if(err)
- return err;
break;
case 'R': /* --expect100-timeout */
- err = str2udouble(&config->expect100timeout, nextarg,
- (double)LONG_MAX/1000);
- if(err)
- return err;
+ err = secs2ms(&config->expect100timeout_ms, nextarg);
break;
case 'S': /* --tftp-no-options */
config->tftp_no_options = toggle;
break;
case 'U': /* --connect-to */
err = add2list(&config->connect_to, nextarg);
- if(err)
- return err;
break;
case 'W': /* --abstract-unix-socket */
config->abstract_unix_socket = TRUE;
@@ -1393,8 +1517,6 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case 'X': /* --tls-max */
err = str2tls_max(&config->ssl_version_max, nextarg);
- if(err)
- return err;
break;
case 'Y': /* --suppress-connect-headers */
config->suppress_connect_headers = toggle;
@@ -1404,10 +1526,16 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case '~': /* --happy-eyeballs-timeout-ms */
err = str2unum(&config->happy_eyeballs_timeout_ms, nextarg);
- if(err)
- return err;
/* 0 is a valid value for this timeout */
break;
+ case '%': /* --trace-ids */
+ global->traceids = toggle;
+ break;
+ case '&': /* --trace-config */
+ if(set_trace_config(global, nextarg)) {
+ err = PARAM_NO_MEM;
+ }
+ break;
}
break;
case '#':
@@ -1421,37 +1549,64 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
}
break;
- case ':': /* --next */
- return PARAM_NEXT_OPERATION;
+ case ':':
+ switch(subletter) {
+ case 'a': /* --variable */
+ err = setvariable(global, nextarg);
+ break;
+ default: /* --next */
+ err = PARAM_NEXT_OPERATION;
+ break;
+ }
+ break;
case '0': /* --http* options */
switch(subletter) {
case '\0':
/* HTTP version 1.0 */
- config->httpversion = CURL_HTTP_VERSION_1_0;
+ sethttpver(global, config, CURL_HTTP_VERSION_1_0);
break;
case '1':
/* HTTP version 1.1 */
- config->httpversion = CURL_HTTP_VERSION_1_1;
+ sethttpver(global, config, CURL_HTTP_VERSION_1_1);
break;
case '2':
/* HTTP version 2.0 */
- config->httpversion = CURL_HTTP_VERSION_2_0;
+ if(!feature_http2)
+ return PARAM_LIBCURL_DOESNT_SUPPORT;
+ sethttpver(global, config, CURL_HTTP_VERSION_2_0);
break;
case '3': /* --http2-prior-knowledge */
- /* HTTP version 2.0 over clean TCP*/
- config->httpversion = CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE;
+ /* HTTP version 2.0 over clean TCP */
+ if(!feature_http2)
+ return PARAM_LIBCURL_DOESNT_SUPPORT;
+ sethttpver(global, config, CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE);
break;
case '4': /* --http3 */
- /* HTTP version 3 go over QUIC - at once */
- if(curlinfo->features & CURL_VERSION_HTTP3)
- config->httpversion = CURL_HTTP_VERSION_3;
- else
- return PARAM_LIBCURL_DOESNT_SUPPORT;
+ /* Try HTTP/3, allow fallback */
+ if(!feature_http3) {
+ err = PARAM_LIBCURL_DOESNT_SUPPORT;
+ break;
+ }
+ sethttpver(global, config, CURL_HTTP_VERSION_3);
+ break;
+ case '5': /* --http3-only */
+ /* Try HTTP/3 without fallback */
+ if(!feature_http3) {
+ err = PARAM_LIBCURL_DOESNT_SUPPORT;
+ break;
+ }
+ sethttpver(global, config, CURL_HTTP_VERSION_3ONLY);
break;
case '9':
/* Allow HTTP/0.9 responses! */
config->http09_allowed = toggle;
break;
+ case 'a':
+ /* --proxy-http2 */
+ if(!feature_httpsproxy || !feature_http2)
+ return PARAM_LIBCURL_DOESNT_SUPPORT;
+ config->proxyver = CURLPROXY_HTTPS2;
+ break;
}
break;
case '1': /* --tlsv1* options */
@@ -1486,11 +1641,11 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case '2':
/* SSL version 2 */
- warnf(global, "Ignores instruction to use SSLv2\n");
+ warnf(global, "Ignores instruction to use SSLv2");
break;
case '3':
/* SSL version 3 */
- warnf(global, "Ignores instruction to use SSLv3\n");
+ warnf(global, "Ignores instruction to use SSLv3");
break;
case '4':
/* IPv4 */
@@ -1511,16 +1666,16 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
case 'b':
switch(subletter) {
case 'a': /* --alt-svc */
- if(curlinfo->features & CURL_VERSION_ALTSVC)
- GetStr(&config->altsvc, nextarg);
+ if(!feature_altsvc)
+ err = PARAM_LIBCURL_DOESNT_SUPPORT;
else
- return PARAM_LIBCURL_DOESNT_SUPPORT;
+ GetStr(&config->altsvc, nextarg);
break;
case 'b': /* --hsts */
- if(curlinfo->features & CURL_VERSION_HSTS)
- GetStr(&config->hsts, nextarg);
+ if(!feature_hsts)
+ err = PARAM_LIBCURL_DOESNT_SUPPORT;
else
- return PARAM_LIBCURL_DOESNT_SUPPORT;
+ GetStr(&config->hsts, nextarg);
break;
default: /* --cookie string coming up: */
if(nextarg[0] == '@') {
@@ -1529,14 +1684,10 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
else if(strchr(nextarg, '=')) {
/* A cookie string must have a =-letter */
err = add2list(&config->cookies, nextarg);
- if(err)
- return err;
break;
}
/* We have a cookie file to read from! */
err = add2list(&config->cookiefiles, nextarg);
- if(err)
- return err;
}
break;
case 'B':
@@ -1552,7 +1703,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
if(strcmp(nextarg, "-")) {
err = str2offset(&config->resume_from, nextarg);
if(err)
- return err;
+ break;
config->resume_from_current = FALSE;
}
else {
@@ -1569,10 +1720,46 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
size_t size = 0;
bool raw_mode = (subletter == 'r');
- if(subletter == 'e') { /* --data-urlencode */
+ if(subletter == 'g') { /* --url-query */
+#define MAX_QUERY_LEN 100000 /* larger is not likely to ever work */
+ char *query;
+ struct curlx_dynbuf dyn;
+ curlx_dyn_init(&dyn, MAX_QUERY_LEN);
+
+ if(*nextarg == '+') {
+ /* use without encoding */
+ query = strdup(&nextarg[1]);
+ if(!query) {
+ err = PARAM_NO_MEM;
+ break;
+ }
+ }
+ else {
+ err = data_urlencode(global, nextarg, &query, &size);
+ if(err)
+ break;
+ }
+
+ if(config->query) {
+ CURLcode result =
+ curlx_dyn_addf(&dyn, "%s&%s", config->query, query);
+ free(query);
+ if(result) {
+ err = PARAM_NO_MEM;
+ break;
+ }
+ free(config->query);
+ config->query = curlx_dyn_ptr(&dyn);
+ }
+ else
+ config->query = query;
+
+ break; /* this is not a POST argument at all */
+ }
+ else if(subletter == 'e') { /* --data-urlencode */
err = data_urlencode(global, nextarg, &postdata, &size);
if(err)
- return err;
+ break;
}
else if('@' == *nextarg && !raw_mode) {
/* the data begins with a '@' letter, it means that a file name
@@ -1586,9 +1773,11 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
}
else {
file = fopen(nextarg, "rb");
- if(!file)
- warnf(global, "Couldn't read data from file \"%s\", this makes "
- "an empty POST.\n", nextarg);
+ if(!file) {
+ errorf(global, "Failed to open %s", nextarg);
+ err = PARAM_READ_ERROR;
+ break;
+ }
}
if((subletter == 'b') || /* --data-binary */
@@ -1604,14 +1793,16 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
if(file && (file != stdin))
fclose(file);
if(err)
- return err;
+ break;
if(!postdata) {
/* no data from the file, point to a zero byte string to make this
get sent as a POST anyway */
postdata = strdup("");
- if(!postdata)
- return PARAM_NO_MEM;
+ if(!postdata) {
+ err = PARAM_NO_MEM;
+ break;
+ }
}
}
else {
@@ -1632,7 +1823,8 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
if(!config->postfields) {
Curl_safefree(oldpost);
Curl_safefree(postdata);
- return PARAM_NO_MEM;
+ err = PARAM_NO_MEM;
+ break;
}
memcpy(config->postfields, oldpost, (size_t)oldlen);
if(subletter != 'f') {
@@ -1691,9 +1883,15 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
cleanarg(clearthis);
GetFileAndPassword(nextarg, &config->cert, &config->key_passwd);
break;
- case 'a': /* CA info PEM file */
+ case 'a': /* --cacert CA info PEM file */
GetStr(&config->cacert, nextarg);
break;
+ case 'G': /* --ca-native */
+ config->native_ca_store = toggle;
+ break;
+ case 'H': /* --proxy-ca-native */
+ config->proxy_native_ca_store = toggle;
+ break;
case 'b': /* cert file type */
GetStr(&config->cert_type, nextarg);
break;
@@ -1709,8 +1907,10 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case 'f': /* crypto engine */
GetStr(&config->engine, nextarg);
- if(config->engine && curl_strequal(config->engine, "list"))
- return PARAM_ENGINES_REQUESTED;
+ if(config->engine && curl_strequal(config->engine, "list")) {
+ err = PARAM_ENGINES_REQUESTED;
+ break;
+ }
break;
case 'g': /* CA cert directory */
GetStr(&config->capath, nextarg);
@@ -1720,8 +1920,10 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case 'i': /* --hostpubmd5 md5 of the host public key */
GetStr(&config->hostpubmd5, nextarg);
- if(!config->hostpubmd5 || strlen(config->hostpubmd5) != 32)
- return PARAM_BAD_USE;
+ if(!config->hostpubmd5 || strlen(config->hostpubmd5) != 32) {
+ err = PARAM_BAD_USE;
+ break;
+ }
break;
case 'F': /* --hostpubsha256 sha256 of the host public key */
GetStr(&config->hostpubsha256, nextarg);
@@ -1730,42 +1932,46 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
GetStr(&config->crlfile, nextarg);
break;
case 'k': /* TLS username */
- if(!(curlinfo->features & CURL_VERSION_TLSAUTH_SRP)) {
+ if(!feature_tls_srp) {
cleanarg(clearthis);
- return PARAM_LIBCURL_DOESNT_SUPPORT;
+ err = PARAM_LIBCURL_DOESNT_SUPPORT;
+ break;
}
GetStr(&config->tls_username, nextarg);
cleanarg(clearthis);
break;
case 'l': /* TLS password */
- if(!(curlinfo->features & CURL_VERSION_TLSAUTH_SRP)) {
+ if(!feature_tls_srp) {
cleanarg(clearthis);
- return PARAM_LIBCURL_DOESNT_SUPPORT;
+ err = PARAM_LIBCURL_DOESNT_SUPPORT;
+ break;
}
GetStr(&config->tls_password, nextarg);
cleanarg(clearthis);
break;
case 'm': /* TLS authentication type */
- if(curlinfo->features & CURL_VERSION_TLSAUTH_SRP) {
- GetStr(&config->tls_authtype, nextarg);
- if(!curl_strequal(config->tls_authtype, "SRP"))
- return PARAM_LIBCURL_DOESNT_SUPPORT; /* only support TLS-SRP */
+ if(!feature_tls_srp) {
+ err = PARAM_LIBCURL_DOESNT_SUPPORT;
+ break;
+ }
+ GetStr(&config->tls_authtype, nextarg);
+ if(!curl_strequal(config->tls_authtype, "SRP")) {
+ err = PARAM_LIBCURL_DOESNT_SUPPORT; /* only support TLS-SRP */
+ break;
}
- else
- return PARAM_LIBCURL_DOESNT_SUPPORT;
break;
case 'n': /* no empty SSL fragments, --ssl-allow-beast */
- if(curlinfo->features & CURL_VERSION_SSL)
+ if(feature_ssl)
config->ssl_allow_beast = toggle;
break;
case 'o': /* --ssl-auto-client-cert */
- if(curlinfo->features & CURL_VERSION_SSL)
+ if(feature_ssl)
config->ssl_auto_client_cert = toggle;
break;
case 'O': /* --proxy-ssl-auto-client-cert */
- if(curlinfo->features & CURL_VERSION_SSL)
+ if(feature_ssl)
config->proxy_ssl_auto_client_cert = toggle;
break;
@@ -1790,12 +1996,12 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case 's': /* --ssl-no-revoke */
- if(curlinfo->features & CURL_VERSION_SSL)
+ if(feature_ssl)
config->ssl_no_revoke = TRUE;
break;
case 'S': /* --ssl-revoke-best-effort */
- if(curlinfo->features & CURL_VERSION_SSL)
+ if(feature_ssl)
config->ssl_revoke_best_effort = TRUE;
break;
@@ -1805,28 +2011,32 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
case 'u': /* TLS username for proxy */
cleanarg(clearthis);
- if(!(curlinfo->features & CURL_VERSION_TLSAUTH_SRP)) {
- return PARAM_LIBCURL_DOESNT_SUPPORT;
+ if(!feature_tls_srp) {
+ err = PARAM_LIBCURL_DOESNT_SUPPORT;
+ break;
}
GetStr(&config->proxy_tls_username, nextarg);
break;
case 'v': /* TLS password for proxy */
cleanarg(clearthis);
- if(!(curlinfo->features & CURL_VERSION_TLSAUTH_SRP)) {
- return PARAM_LIBCURL_DOESNT_SUPPORT;
+ if(!feature_tls_srp) {
+ err = PARAM_LIBCURL_DOESNT_SUPPORT;
+ break;
}
GetStr(&config->proxy_tls_password, nextarg);
break;
case 'w': /* TLS authentication type for proxy */
- if(curlinfo->features & CURL_VERSION_TLSAUTH_SRP) {
- GetStr(&config->proxy_tls_authtype, nextarg);
- if(!curl_strequal(config->proxy_tls_authtype, "SRP"))
- return PARAM_LIBCURL_DOESNT_SUPPORT; /* only support TLS-SRP */
+ if(!feature_tls_srp) {
+ err = PARAM_LIBCURL_DOESNT_SUPPORT;
+ break;
+ }
+ GetStr(&config->proxy_tls_authtype, nextarg);
+ if(!curl_strequal(config->proxy_tls_authtype, "SRP")) {
+ err = PARAM_LIBCURL_DOESNT_SUPPORT; /* only support TLS-SRP */
+ break;
}
- else
- return PARAM_LIBCURL_DOESNT_SUPPORT;
break;
case 'x': /* certificate file for proxy */
@@ -1861,7 +2071,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case '4': /* no empty SSL fragments for proxy */
- if(curlinfo->features & CURL_VERSION_SSL)
+ if(feature_ssl)
config->proxy_ssl_allow_beast = toggle;
break;
@@ -1915,7 +2125,8 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
default: /* unknown flag */
- return PARAM_OPTION_UNKNOWN;
+ err = PARAM_OPTION_UNKNOWN;
+ break;
}
break;
case 'f':
@@ -1941,8 +2152,9 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
}
if(config->failonerror && config->failwithbody) {
errorf(config->global, "You must select either --fail or "
- "--fail-with-body, not both.\n");
- return PARAM_BAD_USE;
+ "--fail-with-body, not both.");
+ err = PARAM_BAD_USE;
+ break;
}
break;
case 'F':
@@ -1952,10 +2164,15 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
nextarg,
&config->mimeroot,
&config->mimecurrent,
- (subletter == 's')?TRUE:FALSE)) /* 's' is literal string */
- return PARAM_BAD_USE;
- if(SetHTTPrequest(config, HTTPREQ_MIMEPOST, &config->httpreq))
- return PARAM_BAD_USE;
+ (subletter == 's')?TRUE:FALSE)) { /* 's' is literal
+ string */
+ err = PARAM_BAD_USE;
+ break;
+ }
+ if(SetHTTPrequest(config, HTTPREQ_MIMEPOST, &config->httpreq)) {
+ err = PARAM_BAD_USE;
+ break;
+ }
break;
case 'g': /* g disables URLglobbing */
@@ -1967,17 +2184,20 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
GetStr(&config->request_target, nextarg);
}
else
- config->use_httpget = TRUE;
+ config->use_httpget = toggle;
break;
case 'h': /* h for help */
if(toggle) {
if(nextarg) {
global->help_category = strdup(nextarg);
- if(!global->help_category)
- return PARAM_NO_MEM;
+ if(!global->help_category) {
+ err = PARAM_NO_MEM;
+ break;
+ }
}
- return PARAM_HELP_REQUESTED;
+ err = PARAM_HELP_REQUESTED;
+ break;
}
/* we now actually support --no-help too! */
break;
@@ -1989,8 +2209,11 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
size_t len;
bool use_stdin = !strcmp(&nextarg[1], "-");
FILE *file = use_stdin?stdin:fopen(&nextarg[1], FOPEN_READTEXT);
- if(!file)
- warnf(global, "Failed to open %s!\n", &nextarg[1]);
+ if(!file) {
+ errorf(global, "Failed to open %s", &nextarg[1]);
+ err = PARAM_READ_ERROR;
+ break;
+ }
else {
err = file2memory(&string, &len, file);
if(!err && string) {
@@ -2011,7 +2234,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
if(!use_stdin)
fclose(file);
if(err)
- return err;
+ break;
}
}
else {
@@ -2019,8 +2242,6 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
err = add2list(&config->proxyheaders, nextarg);
else
err = add2list(&config->headers, nextarg);
- if(err)
- return err;
}
break;
case 'i':
@@ -2035,8 +2256,10 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
config->show_headers = toggle;
if(SetHTTPrequest(config,
(config->no_body)?HTTPREQ_HEAD:HTTPREQ_GET,
- &config->httpreq))
- return PARAM_BAD_USE;
+ &config->httpreq)) {
+ err = PARAM_BAD_USE;
+ break;
+ }
break;
case 'J': /* --remote-header-name */
config->content_disposition = toggle;
@@ -2049,8 +2272,9 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case 'K': /* parse config file */
if(parseconfig(nextarg, global)) {
- errorf(global, "cannot read config from '%s'\n", nextarg);
- return PARAM_READ_ERROR;
+ errorf(global, "cannot read config from '%s'", nextarg);
+ err = PARAM_READ_ERROR;
+ break;
}
break;
case 'l':
@@ -2068,17 +2292,16 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
break;
case 'm':
/* specified max time */
- err = str2udouble(&config->timeout, nextarg, (double)LONG_MAX/1000);
- if(err)
- return err;
+ err = secs2ms(&config->timeout_ms, nextarg);
break;
case 'M': /* M for manual, huge help */
if(toggle) { /* --no-manual shows no manual... */
#ifndef USE_MANUAL
warnf(global,
- "built-in manual was disabled at build-time!\n");
+ "built-in manual was disabled at build-time");
#endif
- return PARAM_MANUAL_REQUESTED;
+ err = PARAM_MANUAL_REQUESTED;
+ break;
}
break;
case 'n':
@@ -2133,18 +2356,24 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
if(config->url_out)
/* existing node */
url = config->url_out;
- else
+ else {
+ if(!toggle && !config->default_node_flags)
+ break;
/* there was no free node, create one! */
config->url_out = url = new_getout(config);
+ }
- if(!url)
- return PARAM_NO_MEM;
+ if(!url) {
+ err = PARAM_NO_MEM;
+ break;
+ }
/* fill in the outfile */
if('o' == letter) {
if(!*nextarg) {
- warnf(global, "output file name has no length\n");
- return PARAM_BAD_USE;
+ warnf(global, "output file name has no length");
+ err = PARAM_BAD_USE;
+ break;
}
GetStr(&url->outfile, nextarg);
url->flags &= ~GETOUT_USEREMOTE; /* switch off */
@@ -2192,8 +2421,6 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
err = add2list(&config->quote, nextarg);
break;
}
- if(err)
- return err;
break;
case 'r':
/* Specifying a range WITHOUT A DASH will create an illegal HTTP range
@@ -2204,17 +2431,20 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
char buffer[32];
curl_off_t off;
if(curlx_strtoofft(nextarg, NULL, 10, &off)) {
- warnf(global, "unsupported range point\n");
- return PARAM_BAD_USE;
+ warnf(global, "unsupported range point");
+ err = PARAM_BAD_USE;
+ break;
}
warnf(global,
"A specified range MUST include at least one dash (-). "
- "Appending one for you!\n");
+ "Appending one for you");
msnprintf(buffer, sizeof(buffer), "%" CURL_FORMAT_CURL_OFF_T "-", off);
Curl_safefree(config->range);
config->range = strdup(buffer);
- if(!config->range)
- return PARAM_NO_MEM;
+ if(!config->range) {
+ err = PARAM_NO_MEM;
+ break;
+ }
}
else {
/* byte range requested */
@@ -2224,7 +2454,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
warnf(global, "Invalid character is found in given range. "
"A specified range MUST have only digits in "
"\'start\'-\'stop\'. The server's response to this "
- "request is uncertain.\n");
+ "request is uncertain.");
break;
}
tmp_range++;
@@ -2236,27 +2466,15 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
/* use remote file's time */
config->remote_time = toggle;
break;
- case 's':
- /* don't show progress meter, don't show errors : */
- if(toggle)
- global->mute = global->noprogress = TRUE;
- else
- global->mute = global->noprogress = FALSE;
- if(global->showerror < 0)
- /* if still on the default value, set showerror to the reverse of
- toggle. This is to allow -S and -s to be used in an independent
- order but still have the same effect. */
- global->showerror = (!toggle)?TRUE:FALSE; /* toggle off */
+ case 's': /* --silent */
+ global->silent = toggle;
break;
- case 'S':
- /* show errors */
- global->showerror = toggle?1:0; /* toggle on if used with -s */
+ case 'S': /* --show-error */
+ global->showerror = toggle;
break;
case 't':
/* Telnet options */
err = add2list(&config->telnet_options, nextarg);
- if(err)
- return err;
break;
case 'T':
/* we are uploading */
@@ -2280,8 +2498,10 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
/* there was no free node, create one! */
config->url_ul = url = new_getout(config);
- if(!url)
- return PARAM_NO_MEM;
+ if(!url) {
+ err = PARAM_NO_MEM;
+ break;
+ }
url->flags |= GETOUT_UPLOAD; /* mark -T used */
if(!*nextarg)
@@ -2307,11 +2527,13 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
/* the '%' thing here will cause the trace get sent to stderr */
Curl_safefree(global->trace_dump);
global->trace_dump = strdup("%");
- if(!global->trace_dump)
- return PARAM_NO_MEM;
+ if(!global->trace_dump) {
+ err = PARAM_NO_MEM;
+ break;
+ }
if(global->tracetype && (global->tracetype != TRACE_PLAIN))
warnf(global,
- "-v, --verbose overrides an earlier trace/verbose option\n");
+ "-v, --verbose overrides an earlier trace/verbose option");
global->tracetype = TRACE_PLAIN;
}
else
@@ -2319,8 +2541,10 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
global->tracetype = TRACE_NONE;
break;
case 'V':
- if(toggle) /* --no-version yields no output! */
- return PARAM_VERSION_INFO_REQUESTED;
+ if(toggle) { /* --no-version yields no output! */
+ err = PARAM_VERSION_INFO_REQUESTED;
+ break;
+ }
break;
case 'w':
@@ -2337,14 +2561,19 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
}
else {
fname = nextarg;
- file = fopen(nextarg, FOPEN_READTEXT);
+ file = fopen(fname, FOPEN_READTEXT);
+ if(!file) {
+ errorf(global, "Failed to open %s", fname);
+ err = PARAM_READ_ERROR;
+ break;
+ }
}
Curl_safefree(config->writeout);
err = file2string(&config->writeout, file);
if(file && (file != stdin))
fclose(file);
if(err)
- return err;
+ break;
if(!config->writeout)
warnf(global, "Failed to read %s", fname);
}
@@ -2359,7 +2588,8 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
default:
/* --proxy */
GetStr(&config->proxy, nextarg);
- config->proxyver = CURLPROXY_HTTP;
+ if(config->proxyver != CURLPROXY_HTTPS2)
+ config->proxyver = CURLPROXY_HTTP;
break;
}
break;
@@ -2371,7 +2601,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
/* low speed time */
err = str2unum(&config->low_speed_time, nextarg);
if(err)
- return err;
+ break;
if(!config->low_speed_limit)
config->low_speed_limit = 1;
break;
@@ -2379,7 +2609,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
/* low speed limit */
err = str2unum(&config->low_speed_limit, nextarg);
if(err)
- return err;
+ break;
if(!config->low_speed_time)
config->low_speed_time = 30;
break;
@@ -2388,16 +2618,20 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
case '\0': /* --parallel */
global->parallel = toggle;
break;
- case 'b': /* --parallel-max */
- err = str2unum(&global->parallel_max, nextarg);
+ case 'b': { /* --parallel-max */
+ long val;
+ err = str2unum(&val, nextarg);
if(err)
- return err;
- if(global->parallel_max > MAX_PARALLEL)
+ break;
+ if(val > MAX_PARALLEL)
global->parallel_max = MAX_PARALLEL;
- else if(global->parallel_max < 1)
+ else if(val < 1)
global->parallel_max = PARALLEL_DEFAULT;
+ else
+ global->parallel_max = (unsigned short)val;
break;
- case 'c': /* --parallel-connect */
+ }
+ case 'c': /* --parallel-immediate */
global->parallel_connect = toggle;
break;
}
@@ -2426,29 +2660,33 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
config->condtime = (curl_off_t)curl_getdate(nextarg, &now);
if(-1 == config->condtime) {
/* now let's see if it is a file name to get the time from instead! */
- curl_off_t filetime = getfiletime(nextarg, global);
- if(filetime >= 0) {
+ curl_off_t filetime;
+ rc = getfiletime(nextarg, global, &filetime);
+ if(!rc)
/* pull the time out from the file */
config->condtime = filetime;
- }
else {
/* failed, remove time condition */
config->timecond = CURL_TIMECOND_NONE;
warnf(global,
"Illegal date format for -z, --time-cond (and not "
"a file name). Disabling time condition. "
- "See curl_getdate(3) for valid date syntax.\n");
+ "See curl_getdate(3) for valid date syntax.");
}
}
break;
default: /* unknown flag */
- return PARAM_OPTION_UNKNOWN;
+ err = PARAM_OPTION_UNKNOWN;
+ break;
}
hit = -1;
- } while(!longopt && !singleopt && *++parse && !*usedarg);
+ } while(!longopt && !singleopt && *++parse && !*usedarg && !err);
- return PARAM_OK;
+error:
+ if(nextalloc)
+ free(nextarg);
+ return err;
}
ParameterError parse_args(struct GlobalConfig *global, int argc,
@@ -2482,7 +2720,7 @@ ParameterError parse_args(struct GlobalConfig *global, int argc,
}
}
- result = getparameter(orig_opt, nextarg, &passarg,
+ result = getparameter(orig_opt, nextarg, argv[i + 1], &passarg,
global, config);
curlx_unicodefree(nextarg);
@@ -2512,6 +2750,10 @@ ParameterError parse_args(struct GlobalConfig *global, int argc,
else
result = PARAM_NO_MEM;
}
+ else {
+ errorf(global, "missing URL before --next");
+ result = PARAM_BAD_USE;
+ }
}
else if(!result && passarg)
i++; /* we're supposed to skip this */
@@ -2521,7 +2763,7 @@ ParameterError parse_args(struct GlobalConfig *global, int argc,
bool used;
/* Just add the URL please */
- result = getparameter("--url", orig_opt, &used, global, config);
+ result = getparameter("--url", orig_opt, argv[i], &used, global, config);
}
if(!result)
@@ -2542,9 +2784,9 @@ ParameterError parse_args(struct GlobalConfig *global, int argc,
const char *reason = param2text(result);
if(orig_opt && strcmp(":", orig_opt))
- helpf(global->errors, "option %s: %s\n", orig_opt, reason);
+ helpf(tool_stderr, "option %s: %s", orig_opt, reason);
else
- helpf(global->errors, "%s\n", reason);
+ helpf(tool_stderr, "%s", reason);
}
curlx_unicodefree(orig_opt);
diff --git a/src/tool_getparam.h b/src/tool_getparam.h
index 3eb177391..a8a9d4597 100644
--- a/src/tool_getparam.h
+++ b/src/tool_getparam.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -48,6 +48,7 @@ typedef enum {
PARAM_CONTDISP_SHOW_HEADER, /* --include and --remote-header-name */
PARAM_CONTDISP_RESUME_FROM, /* --continue-at and --remote-header-name */
PARAM_READ_ERROR,
+ PARAM_EXPAND_ERROR, /* --expand problem */
PARAM_LAST
} ParameterError;
@@ -55,6 +56,7 @@ struct GlobalConfig;
struct OperationConfig;
ParameterError getparameter(const char *flag, char *nextarg,
+ argv_item_t cleararg,
bool *usedarg,
struct GlobalConfig *global,
struct OperationConfig *operation);
diff --git a/src/tool_getpass.c b/src/tool_getpass.c
index c959c5a52..8ccccdfb8 100644
--- a/src/tool_getpass.c
+++ b/src/tool_getpass.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -46,18 +46,10 @@
# include iodef
#endif
-#ifdef WIN32
+#ifdef _WIN32
# include <conio.h>
#endif
-#ifdef NETWARE
-# ifdef __NOVELL_LIBC__
-# include <screen.h>
-# else
-# include <nwconio.h>
-# endif
-#endif
-
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -102,12 +94,12 @@ char *getpass_r(const char *prompt, char *buffer, size_t buflen)
#define DONE
#endif /* __VMS */
-#if defined(WIN32)
+#if defined(_WIN32)
char *getpass_r(const char *prompt, char *buffer, size_t buflen)
{
size_t i;
- fputs(prompt, stderr);
+ fputs(prompt, tool_stderr);
for(i = 0; i < buflen; i++) {
buffer[i] = (char)getch();
@@ -122,7 +114,7 @@ char *getpass_r(const char *prompt, char *buffer, size_t buflen)
i = i - (i >= 1 ? 2 : 1);
}
/* since echo is disabled, print a newline */
- fputs("\n", stderr);
+ fputs("\n", tool_stderr);
/* if user didn't hit ENTER, terminate buffer */
if(i == buflen)
buffer[buflen-1] = '\0';
@@ -130,46 +122,7 @@ char *getpass_r(const char *prompt, char *buffer, size_t buflen)
return buffer; /* we always return success */
}
#define DONE
-#endif /* WIN32 */
-
-#ifdef NETWARE
-/* NetWare implementation */
-#ifdef __NOVELL_LIBC__
-char *getpass_r(const char *prompt, char *buffer, size_t buflen)
-{
- return getpassword(prompt, buffer, buflen);
-}
-#else
-char *getpass_r(const char *prompt, char *buffer, size_t buflen)
-{
- size_t i = 0;
-
- printf("%s", prompt);
- do {
- buffer[i++] = getch();
- if(buffer[i-1] == '\b') {
- /* remove this letter and if this is not the first key,
- remove the previous one as well */
- if(i > 1) {
- printf("\b \b");
- i = i - 2;
- }
- else {
- RingTheBell();
- i = i - 1;
- }
- }
- else if(buffer[i-1] != 13)
- putchar('*');
-
- } while((buffer[i-1] != 13) && (i < buflen));
- buffer[i-1] = '\0';
- printf("\r\n");
- return buffer;
-}
-#endif /* __NOVELL_LIBC__ */
-#define DONE
-#endif /* NETWARE */
+#endif /* _WIN32 */
#ifndef DONE /* not previously provided */
@@ -231,7 +184,7 @@ char *getpass_r(const char *prompt, /* prompt to display */
disabled = ttyecho(FALSE, fd); /* disable terminal echo */
- fputs(prompt, stderr);
+ fputs(prompt, tool_stderr);
nread = read(fd, password, buflen);
if(nread > 0)
password[--nread] = '\0'; /* null-terminate where enter is stored */
@@ -240,7 +193,7 @@ char *getpass_r(const char *prompt, /* prompt to display */
if(disabled) {
/* if echo actually was disabled, add a newline */
- fputs("\n", stderr);
+ fputs("\n", tool_stderr);
(void)ttyecho(TRUE, fd); /* enable echo */
}
diff --git a/src/tool_getpass.h b/src/tool_getpass.h
index 01dc46401..b93585d94 100644
--- a/src/tool_getpass.h
+++ b/src/tool_getpass.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/src/tool_help.c b/src/tool_help.c
index 65a1f43df..c8aea295d 100644
--- a/src/tool_help.c
+++ b/src/tool_help.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -26,7 +26,6 @@
/* use our own printf() functions */
#include "curlx.h"
-#include "tool_panykey.h"
#include "tool_help.h"
#include "tool_libinfo.h"
#include "tool_util.h"
@@ -74,44 +73,6 @@ static const struct category_descriptors categories[] = {
{NULL, NULL, CURLHELP_HIDDEN}
};
-extern const struct helptxt helptext[];
-
-struct feat {
- const char *name;
- int bitmask;
-};
-
-static const struct feat feats[] = {
- {"AsynchDNS", CURL_VERSION_ASYNCHDNS},
- {"Debug", CURL_VERSION_DEBUG},
- {"TrackMemory", CURL_VERSION_CURLDEBUG},
- {"IDN", CURL_VERSION_IDN},
- {"IPv6", CURL_VERSION_IPV6},
- {"Largefile", CURL_VERSION_LARGEFILE},
- {"Unicode", CURL_VERSION_UNICODE},
- {"SSPI", CURL_VERSION_SSPI},
- {"GSS-API", CURL_VERSION_GSSAPI},
- {"Kerberos", CURL_VERSION_KERBEROS5},
- {"SPNEGO", CURL_VERSION_SPNEGO},
- {"NTLM", CURL_VERSION_NTLM},
- {"NTLM_WB", CURL_VERSION_NTLM_WB},
- {"SSL", CURL_VERSION_SSL},
- {"libz", CURL_VERSION_LIBZ},
- {"brotli", CURL_VERSION_BROTLI},
- {"zstd", CURL_VERSION_ZSTD},
- {"CharConv", CURL_VERSION_CONV},
- {"TLS-SRP", CURL_VERSION_TLSAUTH_SRP},
- {"HTTP2", CURL_VERSION_HTTP2},
- {"HTTP3", CURL_VERSION_HTTP3},
- {"UnixSockets", CURL_VERSION_UNIX_SOCKETS},
- {"HTTPS-proxy", CURL_VERSION_HTTPS_PROXY},
- {"MultiSSL", CURL_VERSION_MULTI_SSL},
- {"PSL", CURL_VERSION_PSL},
- {"alt-svc", CURL_VERSION_ALTSVC},
- {"HSTS", CURL_VERSION_HSTS},
- {"gsasl", CURL_VERSION_GSASL},
- {"threadsafe", CURL_VERSION_THREADSAFE},
-};
static void print_category(curlhelp_t category)
{
@@ -188,10 +149,21 @@ void tool_help(char *category)
free(category);
}
+static bool is_debug(void)
+{
+ const char *const *builtin;
+ for(builtin = feature_names; *builtin; ++builtin)
+ if(curl_strequal("debug", *builtin))
+ return TRUE;
+ return FALSE;
+}
void tool_version_info(void)
{
- const char *const *proto;
+ const char *const *builtin;
+ if(is_debug())
+ fprintf(tool_stderr, "WARNING: this libcurl is Debug-enabled, "
+ "do not use in production\n\n");
printf(CURL_ID "%s\n", curl_version());
#ifdef CURL_PATCHSTAMP
@@ -200,28 +172,20 @@ void tool_version_info(void)
#else
printf("Release-Date: %s\n", LIBCURL_TIMESTAMP);
#endif
- if(curlinfo->protocols) {
- printf("Protocols: ");
- for(proto = curlinfo->protocols; *proto; ++proto) {
+ if(built_in_protos[0]) {
+ printf("Protocols:");
+ for(builtin = built_in_protos; *builtin; ++builtin) {
/* Special case: do not list rtmp?* protocols.
They may only appear together with "rtmp" */
- if(!curl_strnequal(*proto, "rtmp", 4) || !proto[0][4])
- printf("%s ", *proto);
+ if(!curl_strnequal(*builtin, "rtmp", 4) || !builtin[0][4])
+ printf(" %s", *builtin);
}
puts(""); /* newline */
}
- if(curlinfo->features) {
- char *featp[ sizeof(feats) / sizeof(feats[0]) + 1];
- size_t numfeat = 0;
- unsigned int i;
+ if(feature_names[0]) {
printf("Features:");
- for(i = 0; i < sizeof(feats)/sizeof(feats[0]); i++) {
- if(curlinfo->features & feats[i].bitmask)
- featp[numfeat++] = (char *)feats[i].name;
- }
- qsort(&featp[0], numfeat, sizeof(char *), struplocompare4sort);
- for(i = 0; i< numfeat; i++)
- printf(" %s", featp[i]);
+ for(builtin = feature_names; *builtin; ++builtin)
+ printf(" %s", *builtin);
puts(""); /* newline */
}
if(strcmp(CURL_VERSION, curlinfo->version)) {
diff --git a/src/tool_help.h b/src/tool_help.h
index 6fe244e2c..a7906266e 100644
--- a/src/tool_help.h
+++ b/src/tool_help.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -54,20 +54,21 @@ struct helptxt {
#define CURLHELP_HTTP 1u << 7u
#define CURLHELP_IMAP 1u << 8u
#define CURLHELP_IMPORTANT 1u << 9u
-#define CURLHELP_MISC 1u << 10u
-#define CURLHELP_OUTPUT 1u << 11u
-#define CURLHELP_POP3 1u << 12u
-#define CURLHELP_POST 1u << 13u
-#define CURLHELP_PROXY 1u << 14u
-#define CURLHELP_SCP 1u << 15u
-#define CURLHELP_SFTP 1u << 16u
-#define CURLHELP_SMTP 1u << 17u
-#define CURLHELP_SSH 1u << 18u
-#define CURLHELP_TELNET 1u << 19u
-#define CURLHELP_TFTP 1u << 20u
-#define CURLHELP_TLS 1u << 21u
-#define CURLHELP_UPLOAD 1u << 22u
-#define CURLHELP_VERBOSE 1u << 23u
+#define CURLHELP_IPFS 1u << 10u
+#define CURLHELP_MISC 1u << 11u
+#define CURLHELP_OUTPUT 1u << 12u
+#define CURLHELP_POP3 1u << 13u
+#define CURLHELP_POST 1u << 14u
+#define CURLHELP_PROXY 1u << 15u
+#define CURLHELP_SCP 1u << 16u
+#define CURLHELP_SFTP 1u << 17u
+#define CURLHELP_SMTP 1u << 18u
+#define CURLHELP_SSH 1u << 19u
+#define CURLHELP_TELNET 1u << 20u
+#define CURLHELP_TFTP 1u << 21u
+#define CURLHELP_TLS 1u << 22u
+#define CURLHELP_UPLOAD 1u << 23u
+#define CURLHELP_VERBOSE 1u << 24u
extern const struct helptxt helptext[];
diff --git a/src/tool_helpers.c b/src/tool_helpers.c
index 3b2fe9d15..854bf777a 100644
--- a/src/tool_helpers.c
+++ b/src/tool_helpers.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -76,6 +76,8 @@ const char *param2text(int res)
return "--continue-at and --remote-header-name cannot be combined";
case PARAM_READ_ERROR:
return "error encountered when reading a file";
+ case PARAM_EXPAND_ERROR:
+ return "variable expansion failure";
default:
return "unknown error";
}
@@ -99,7 +101,7 @@ int SetHTTPrequest(struct OperationConfig *config, HttpReq req, HttpReq *store)
return 0;
}
warnf(config->global, "You can only select one HTTP request method! "
- "You asked for both %s and %s.\n",
+ "You asked for both %s and %s.",
reqname[req], reqname[*store]);
return 1;
@@ -122,11 +124,11 @@ void customrequest_helper(struct OperationConfig *config, HttpReq req,
;
else if(curl_strequal(method, dflt[req])) {
notef(config->global, "Unnecessary use of -X or --request, %s is already "
- "inferred.\n", dflt[req]);
+ "inferred.", dflt[req]);
}
else if(curl_strequal(method, "head")) {
warnf(config->global,
"Setting custom HTTP method to HEAD with -X/--request may not work "
- "the way you want. Consider using -I/--head instead.\n");
+ "the way you want. Consider using -I/--head instead.");
}
}
diff --git a/src/tool_helpers.h b/src/tool_helpers.h
index cdc84106c..2cfbad21a 100644
--- a/src/tool_helpers.h
+++ b/src/tool_helpers.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/src/tool_hugehelp.c b/src/tool_hugehelp.c
index b1c2113dd..51a4087b0 100644
--- a/src/tool_hugehelp.c
+++ b/src/tool_hugehelp.c
@@ -21,21 +21,13 @@ void hugehelp(void)
" curl [options / URLs]\n"
"\n"
"DESCRIPTION\n"
-" curl is a tool for transferring data from or to a server. It supports\n"
-" these protocols: DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS,\n"
+" curl is a tool for transferring data from or to a server using URLs. It\n"
+" supports these protocols: DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP,\n"
, stdout);
fputs(
-" IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP,\n"
-" SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS. The command is\n"
-" designed to work without user interaction.\n"
+" HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP,\n"
+" SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS.\n"
"\n"
-" curl offers a busload of useful tricks like proxy support, user authen-\n"
-" tication, FTP upload, HTTP post, SSL connections, cookies, file trans-\n"
-" fer resume and more. As you will see below, the number of features will\n"
-" make your head spin.\n"
-"\n"
-, stdout);
- fputs(
" curl is powered by libcurl for all transfer-related features. See\n"
" libcurl(3) for details.\n"
"\n"
@@ -43,15 +35,48 @@ void hugehelp(void)
" The URL syntax is protocol-dependent. You find a detailed description\n"
" in RFC 3986.\n"
"\n"
-" You can specify multiple URLs or parts of URLs by writing part sets\n"
-" within braces and quoting the URL as in:\n"
+" If you provide a URL without a leading protocol:// scheme, curl guesses\n"
+, stdout);
+ fputs(
+" what protocol you want. It then defaults to HTTP but assumes others\n"
+" based on often-used host name prefixes. For example, for host names\n"
+" starting with \"ftp.\" curl assumes you want FTP.\n"
"\n"
-" \"http://site.{one,two,three}.com\"\n"
+" You can specify any amount of URLs on the command line. They are\n"
+" fetched in a sequential manner in the specified order unless you use\n"
+" -Z, --parallel. You can specify command line options and URLs mixed and\n"
+" in any order on the command line.\n"
"\n"
-" or you can get sequences of alphanumeric series by using [] as in:\n"
+, stdout);
+ fputs(
+" curl attempts to reuse connections when doing multiple transfers, so\n"
+" that getting many files from the same server do not use multiple con-\n"
+" nects and setup handshakes. This improves speed. Connection reuse can\n"
+" only be done for URLs specified for a single command line invocation\n"
+" and cannot be performed between separate curl runs.\n"
+"\n"
+" Provide an IPv6 zone id in the URL with an escaped percentage sign.\n"
+" Like in\n"
+"\n"
+, stdout);
+ fputs(
+" \"http://[fe80::3%25eth0]/\"\n"
+"\n"
+" Everything provided on the command line that is not a command line op-\n"
+" tion or its argument, curl assumes is a URL and treats it as such.\n"
+"\n"
+"GLOBBING\n"
+" You can specify multiple URLs or parts of URLs by writing lists within\n"
+" braces or ranges within brackets. We call this \"globbing\".\n"
+"\n"
+" Provide a list with three different names like this:\n"
+"\n"
+" \"http://site.{one,two,three}.com\"\n"
"\n"
, stdout);
fputs(
+" or you can get sequences of alphanumeric series by using [] as in:\n"
+"\n"
" \"ftp://ftp.example.com/file[1-100].txt\"\n"
"\n"
" \"ftp://ftp.example.com/file[001-100].txt\" (with leading zeros)\n"
@@ -63,68 +88,91 @@ void hugehelp(void)
"\n"
" \"http://example.com/archive[1996-1999]/vol[1-4]/part{a,b,c}.html\"\n"
"\n"
-" You can specify any amount of URLs on the command line. They will be\n"
, stdout);
fputs(
-" fetched in a sequential manner in the specified order. You can specify\n"
-" command line options and URLs mixed and in any order on the command\n"
-" line.\n"
-"\n"
-" You can specify a step counter for the ranges to get every Nth number\n"
+" You can specify a step counter for the ranges to get every Nth number\n"
" or letter:\n"
"\n"
" \"http://example.com/file[1-100:10].txt\"\n"
"\n"
" \"http://example.com/file[a-z:2].txt\"\n"
"\n"
-" When using [] or {} sequences when invoked from a command line prompt,\n"
-, stdout);
- fputs(
+" When using [] or {} sequences when invoked from a command line prompt,\n"
" you probably have to put the full URL within double quotes to avoid the\n"
" shell from interfering with it. This also goes for other characters\n"
" treated special, like for example '&', '?' and '*'.\n"
"\n"
-" Provide the IPv6 zone index in the URL with an escaped percentage sign\n"
-" and the interface name. Like in\n"
+, stdout);
+ fputs(
+" Switch off globbing with -g, --globoff.\n"
"\n"
-" \"http://[fe80::3%25eth0]/\"\n"
+"VARIABLES\n"
+" curl supports command line variables (added in 8.3.0). Set variables\n"
+" with --variable name=content or --variable name@file (where \"file\" can\n"
+" be stdin if set to a single dash (-)).\n"
+"\n"
+" Variable contents can expanded in option parameters using \"{{name}}\"\n"
+" (without the quotes) if the option name is prefixed with \"--expand-\".\n"
+" This gets the contents of the variable \"name\" inserted, or a blank if\n"
+, stdout);
+ fputs(
+" the name does not exist as a variable. Insert \"{{\" verbatim in the\n"
+" string by prefixing it with a backslash, like \"\\{{\".\n"
"\n"
-" If you specify URL without protocol:// prefix, curl will attempt to\n"
+" You an access and expand environment variables by first importing them.\n"
+" You can select to either require the environment variable to be set or\n"
+" you can provide a default value in case it is not already set. Plain\n"
+" --variable %name imports the variable called 'name' but exits with an\n"
, stdout);
fputs(
-" guess what protocol you might want. It will then default to HTTP but\n"
-" try other protocols based on often-used host name prefixes. For exam-\n"
-" ple, for host names starting with \"ftp.\" curl will assume you want to\n"
-" speak FTP.\n"
+" error if that environment variable is not already set. To provide a de-\n"
+" fault value if it is not set, use --variable %name=content or --vari-\n"
+" able %name@content.\n"
"\n"
-" curl will do its best to use what you pass to it as a URL. It is not\n"
-" trying to validate it as a syntactically correct URL by any means but\n"
-" is fairly liberal with what it accepts.\n"
+" Example. Get the USER environment variable into the URL, fail if USER\n"
+" is not set:\n"
"\n"
+" --variable '%USER'\n"
+" --expand-url = \"https://example.com/api/{{USER}}/method\"\n"
+"\n"
+" When expanding variables, curl supports a set of functions that can\n"
+, stdout);
+ fputs(
+" make the variable contents more convenient to use. It can trim leading\n"
+" and trailing white space with trim, it can output the contents as a\n"
+" JSON quoted string with json, URL encode the string with url or base64\n"
+" encode it with b64. You apply function to a variable expansion, add\n"
+" them colon separated to the right side of the variable. Variable con-\n"
+" tent holding null bytes that are not encoded when expanded cause error.\n"
, stdout);
fputs(
-" curl will attempt to re-use connections for multiple file transfers, so\n"
-" that getting many files from the same server will not do multiple con-\n"
-" nects / handshakes. This improves speed. Of course this is only done on\n"
-" files specified on a single command line and cannot be used between\n"
-" separate curl invocations.\n"
+" Example: get the contents of a file called $HOME/.secret into a vari-\n"
+" able called \"fix\". Make sure that the content is trimmed and per-\n"
+" cent-encoded sent as POST data:\n"
+"\n"
+" --variable %HOME\n"
+" --expand-variable fix@{{HOME}}/.secret\n"
+" --expand-data \"{{fix:trim:url}}\"\n"
+" https://example.com/\n"
+"\n"
+" Command line variables and expansions were added in in 8.3.0.\n"
"\n"
"OUTPUT\n"
-" If not told otherwise, curl writes the received data to stdout. It can\n"
, stdout);
fputs(
+" If not told otherwise, curl writes the received data to stdout. It can\n"
" be instructed to instead save that data into a local file, using the\n"
-" --output or --remote-name options. If curl is given multiple URLs to\n"
-" transfer on the command line, it similarly needs multiple options for\n"
-" where to save them.\n"
+" -o, --output or -O, --remote-name options. If curl is given multiple\n"
+" URLs to transfer on the command line, it similarly needs multiple op-\n"
+" tions for where to save them.\n"
"\n"
" curl does not parse or otherwise \"understand\" the content it gets or\n"
+, stdout);
+ fputs(
" writes as output. It does no encoding or decoding, unless explicitly\n"
" asked to with dedicated command line options.\n"
"\n"
"PROTOCOLS\n"
-, stdout);
- fputs(
" curl supports numerous protocols, or put in URL terms: schemes. Your\n"
" particular build may not support them all.\n"
"\n"
@@ -132,11 +180,11 @@ void hugehelp(void)
"\n"
" FILE Read or write local files. curl does not support accessing\n"
" file:// URL remotely, but when running on Microsoft Windows us-\n"
-" ing the native UNC approach will work.\n"
-"\n"
-" FTP(S) curl supports the File Transfer Protocol with a lot of tweaks\n"
, stdout);
fputs(
+" ing the native UNC approach works.\n"
+"\n"
+" FTP(S) curl supports the File Transfer Protocol with a lot of tweaks\n"
" and levers. With or without using TLS.\n"
"\n"
" GOPHER(S)\n"
@@ -148,12 +196,12 @@ void hugehelp(void)
" tions and the correct command line options.\n"
"\n"
" IMAP(S)\n"
-" Using the mail reading protocol, curl can \"download\" emails for\n"
+, stdout);
+ fputs(
+" Using the mail reading protocol, curl can \"download\" emails for\n"
" you. With or without using TLS.\n"
"\n"
" LDAP(S)\n"
-, stdout);
- fputs(
" curl can do directory lookups for you, with or without TLS.\n"
"\n"
" MQTT curl supports MQTT version 3. Downloading over MQTT equals \"sub-\n"
@@ -161,13 +209,13 @@ void hugehelp(void)
" topic. MQTT over TLS is not supported (yet).\n"
"\n"
" POP3(S)\n"
-" Downloading from a pop3 server means getting a mail. With or\n"
+, stdout);
+ fputs(
+" Downloading from a pop3 server means getting a mail. With or\n"
" without using TLS.\n"
"\n"
" RTMP(S)\n"
-, stdout);
- fputs(
-" The Realtime Messaging Protocol is primarily used to server\n"
+" The Realtime Messaging Protocol is primarily used to serve\n"
" streaming media and curl can download it.\n"
"\n"
" RTSP curl supports RTSP 1.0 downloads.\n"
@@ -176,12 +224,12 @@ void hugehelp(void)
"\n"
" SFTP curl supports SFTP (draft 5) done over SSH version 2.\n"
"\n"
+, stdout);
+ fputs(
" SMB(S) curl supports SMB version 1 for upload and download.\n"
"\n"
" SMTP(S)\n"
-" Uploading contents to an SMTP server means sending an email.\n"
-, stdout);
- fputs(
+" Uploading contents to an SMTP server means sending an email.\n"
" With or without TLS.\n"
"\n"
" TELNET Telling curl to fetch a telnet URL starts an interactive session\n"
@@ -191,115 +239,144 @@ void hugehelp(void)
" TFTP curl can do TFTP downloads and uploads.\n"
"\n"
"PROGRESS METER\n"
-" curl normally displays a progress meter during operations, indicating\n"
-" the amount of transferred data, transfer speeds and estimated time\n"
, stdout);
fputs(
-" left, etc. The progress meter displays number of bytes and the speeds\n"
-" are in bytes per second. The suffixes (k, M, G, T, P) are 1024 based.\n"
-" For example 1k is 1024 bytes. 1M is 1048576 bytes.\n"
+" curl normally displays a progress meter during operations, indicating\n"
+" the amount of transferred data, transfer speeds and estimated time\n"
+" left, etc. The progress meter displays the transfer rate in bytes per\n"
+" second. The suffixes (k, M, G, T, P) are 1024 based. For example 1k is\n"
+" 1024 bytes. 1M is 1048576 bytes.\n"
"\n"
" curl displays this data to the terminal by default, so if you invoke\n"
-" curl to do an operation and it is about to write data to the terminal,\n"
-" it disables the progress meter as otherwise it would mess up the output\n"
, stdout);
fputs(
+" curl to do an operation and it is about to write data to the terminal,\n"
+" it disables the progress meter as otherwise it would mess up the output\n"
" mixing progress meter and response data.\n"
"\n"
" If you want a progress meter for HTTP POST or PUT requests, you need to\n"
-" redirect the response output to a file, using shell redirect (>),\n"
+" redirect the response output to a file, using shell redirect (>), -o,\n"
" --output or similar.\n"
"\n"
" This does not apply to FTP upload as that operation does not spit out\n"
+, stdout);
+ fputs(
" any response data to the terminal.\n"
"\n"
-" If you prefer a progress \"bar\" instead of the regular meter,\n"
+" If you prefer a progress \"bar\" instead of the regular meter, -#,\n"
+" --progress-bar is your friend. You can also disable the progress meter\n"
+" completely with the -s, --silent option.\n"
+"\n"
+"VERSION\n"
+" This man page describes curl 8.5.0. If you use a later version, chances\n"
+" are this man page does not fully document it. If you use an earlier\n"
+" version, this document tries to include version information about which\n"
, stdout);
fputs(
-" --progress-bar is your friend. You can also disable the progress meter\n"
-" completely with the --silent option.\n"
+" specific version that introduced changes.\n"
+"\n"
+" You can always learn which the latest curl version is by running\n"
+"\n"
+" curl https://curl.se/info\n"
+"\n"
+" The online version of this man page is always showing the latest incar-\n"
+" nation: https://curl.se/docs/manpage.html\n"
"\n"
"OPTIONS\n"
-" Options start with one or two dashes. Many of the options require an\n"
-" additional value next to them.\n"
+" Options start with one or two dashes. Many of the options require an\n"
+" additional value next to them. If provided text does not start with a\n"
+, stdout);
+ fputs(
+" dash, it is presumed to be and treated as a URL.\n"
"\n"
" The short \"single-dash\" form of the options, -d for example, may be\n"
" used with or without a space between it and its value, although a space\n"
-" is a recommended separator. The long \"double-dash\" form, --data for ex-\n"
-, stdout);
- fputs(
-" ample, requires a space between it and its value.\n"
+" is a recommended separator. The long \"double-dash\" form, -d, --data for\n"
+" example, requires a space between it and its value.\n"
"\n"
" Short version options that do not need any additional values can be\n"
+, stdout);
+ fputs(
" used immediately next to each other, like for example you can specify\n"
" all the options -O, -L and -v at once as -OLv.\n"
"\n"
" In general, all boolean options are enabled with --option and yet again\n"
-" disabled with --no-option. That is, you use the same option name but\n"
+" disabled with --no-option. That is, you use the same option name but\n"
+" prefix it with \"no-\". However, in this list we mostly only list and\n"
+" show the --option version of them.\n"
+"\n"
+" When -:, --next is used, it resets the parser state and you start again\n"
, stdout);
fputs(
-" prefix it with \"no-\". However, in this list we mostly only list and\n"
-" show the --option version of them.\n"
+" with a clean option state, except for the options that are \"global\".\n"
+" Global options retain their values and meaning even after -:, --next.\n"
+"\n"
+" The following options are global: --fail-early, --libcurl, --paral-\n"
+" lel-immediate, -Z, --parallel, -#, --progress-bar, --rate, -S,\n"
+" --show-error, --stderr, --styled-output, --trace-ascii, --trace-config,\n"
+" --trace-ids, --trace-time, --trace and -v, --verbose.\n"
"\n"
" --abstract-unix-socket <path>\n"
+, stdout);
+ fputs(
" (HTTP) Connect through an abstract Unix domain socket, instead\n"
" of using the network. Note: netstat shows the path of an ab-\n"
" stract socket prefixed with '@', however the <path> argument\n"
" should not have this leading character.\n"
"\n"
-, stdout);
- fputs(
" If --abstract-unix-socket is provided several times, the last\n"
-" set value will be used.\n"
+" set value is used.\n"
"\n"
" Example:\n"
+, stdout);
+ fputs(
" curl --abstract-unix-socket socketpath https://example.com\n"
"\n"
" See also --unix-socket. Added in 7.53.0.\n"
"\n"
" --alt-svc <file name>\n"
" (HTTPS) This option enables the alt-svc parser in curl. If the\n"
-" file name points to an existing alt-svc cache file, that will be\n"
+" file name points to an existing alt-svc cache file, that gets\n"
+" used. After a completed transfer, the cache is saved to the file\n"
+" name again if it has been modified.\n"
+"\n"
, stdout);
fputs(
-" used. After a completed transfer, the cache will be saved to the\n"
-" file name again if it has been modified.\n"
-"\n"
" Specify a \"\" file name (zero length) to avoid loading/saving and\n"
" make curl just handle the cache in memory.\n"
"\n"
-" If this option is used several times, curl will load contents\n"
-" from all the files but the last one will be used for saving.\n"
+" If this option is used several times, curl loads contents from\n"
+" all the files but the last one is used for saving.\n"
"\n"
" --alt-svc can be used several times in a command line\n"
"\n"
-, stdout);
- fputs(
" Example:\n"
" curl --alt-svc svc.txt https://example.com\n"
"\n"
+, stdout);
+ fputs(
" See also --resolve and --connect-to. Added in 7.64.1.\n"
"\n"
" --anyauth\n"
" (HTTP) Tells curl to figure out authentication method by itself,\n"
-" and use the most secure one the remote site claims to support.\n"
-" This is done by first doing a request and checking the response-\n"
-" headers, thus possibly inducing an extra network round-trip.\n"
+" and use the most secure one the remote site claims to support.\n"
+" This is done by first doing a request and checking the re-\n"
+" sponse-headers, thus possibly inducing an extra network\n"
+" round-trip. This is used instead of setting a specific authenti-\n"
, stdout);
fputs(
-" This is used instead of setting a specific authentication\n"
-" method, which you can do with --basic, --digest, --ntlm, and\n"
-" --negotiate.\n"
+" cation method, which you can do with --basic, --digest, --ntlm,\n"
+" and --negotiate.\n"
"\n"
" Using --anyauth is not recommended if you do uploads from stdin,\n"
-" since it may require data to be sent twice and then the client\n"
-" must be able to rewind. If the need should arise when uploading\n"
-" from stdin, the upload operation will fail.\n"
+" since it may require data to be sent twice and then the client\n"
+" must be able to rewind. If the need should arise when uploading\n"
+" from stdin, the upload operation fails.\n"
"\n"
-, stdout);
- fputs(
" Used together with -u, --user.\n"
"\n"
+, stdout);
+ fputs(
" Providing --anyauth multiple times has no extra effect.\n"
"\n"
" Example:\n"
@@ -308,15 +385,15 @@ void hugehelp(void)
" See also --proxy-anyauth, --basic and --digest.\n"
"\n"
" -a, --append\n"
-" (FTP SFTP) When used in an upload, this makes curl append to the\n"
-" target file instead of overwriting it. If the remote file does\n"
+" (FTP SFTP) When used in an upload, this option makes curl append\n"
+" to the target file instead of overwriting it. If the remote file\n"
+" does not exist, it is created. Note that this flag is ignored by\n"
, stdout);
fputs(
-" not exist, it will be created. Note that this flag is ignored by\n"
" some SFTP servers (including OpenSSH).\n"
"\n"
-" Providing --append multiple times has no extra effect. Disable\n"
-" it again with --no-append.\n"
+" Providing -a, --append multiple times has no extra effect. Dis-\n"
+" able it again with --no-append.\n"
"\n"
" Example:\n"
" curl --upload-file local --append ftp://example.com/\n"
@@ -324,11 +401,11 @@ void hugehelp(void)
" See also -r, --range and -C, --continue-at.\n"
"\n"
" --aws-sigv4 <provider1[:provider2[:region[:service]]]>\n"
-, stdout);
- fputs(
" Use AWS V4 signature authentication in the transfer.\n"
"\n"
-" The provider argument is a string that is used by the algorithm\n"
+, stdout);
+ fputs(
+" The provider argument is a string that is used by the algorithm\n"
" when creating outgoing authentication headers.\n"
"\n"
" The region argument is a string that points to a geographic area\n"
@@ -336,26 +413,26 @@ void hugehelp(void)
" omitted from the endpoint.\n"
"\n"
" The service argument is a string that points to a function pro-\n"
+" vided by a cloud (service-code) when the service name is omitted\n"
, stdout);
fputs(
-" vided by a cloud (service-code) when the service name is omitted\n"
" from the endpoint.\n"
"\n"
-" If --aws-sigv4 is provided several times, the last set value\n"
-" will be used.\n"
+" If --aws-sigv4 is provided several times, the last set value is\n"
+" used.\n"
"\n"
" Example:\n"
-" curl --aws-sigv4 \"aws:amz:east-2:es\" --user \"key:secret\" https://example.com\n"
+" curl --aws-sigv4 \"aws:amz:us-east-2:es\" --user \"key:secret\" https://example.com\n"
"\n"
" See also --basic and -u, --user. Added in 7.75.0.\n"
"\n"
" --basic\n"
-" (HTTP) Tells curl to use HTTP Basic authentication with the re-\n"
+" (HTTP) Tells curl to use HTTP Basic authentication with the re-\n"
+" mote host. This is the default and this option is usually point-\n"
, stdout);
fputs(
-" mote host. This is the default and this option is usually point-\n"
" less, unless you use it to override a previously set option that\n"
-" sets a different authentication method (such as --ntlm, --di-\n"
+" sets a different authentication method (such as --ntlm, --di-\n"
" gest, or --negotiate).\n"
"\n"
" Used together with -u, --user.\n"
@@ -365,14 +442,39 @@ void hugehelp(void)
" Example:\n"
" curl -u name:password --basic https://example.com\n"
"\n"
+" See also --proxy-basic.\n"
+"\n"
+" --ca-native\n"
, stdout);
fputs(
-" See also --proxy-basic.\n"
+" (TLS) Tells curl to use the CA store from the native operating\n"
+" system to verify the peer. By default, curl otherwise uses a CA\n"
+" store provided in a single file or directory, but when using\n"
+" this option it interfaces the operating system's own vault.\n"
+"\n"
+" This option only works for curl on Windows when built to use\n"
+" OpenSSL. When curl on Windows is built to use Schannel, this\n"
+, stdout);
+ fputs(
+" feature is implied and curl then only uses the native CA store.\n"
+"\n"
+" curl built with wolfSSL also supports this option (added in\n"
+" 8.3.0).\n"
+"\n"
+" Providing --ca-native multiple times has no extra effect. Dis-\n"
+" able it again with --no-ca-native.\n"
+"\n"
+" Example:\n"
+" curl --ca-native https://example.com\n"
+"\n"
+" See also --cacert, --capath and -k, --insecure. Added in 8.2.0.\n"
"\n"
" --cacert <file>\n"
+, stdout);
+ fputs(
" (TLS) Tells curl to use the specified certificate file to verify\n"
-" the peer. The file may contain multiple CA certificates. The\n"
-" certificate(s) must be in PEM format. Normally curl is built to\n"
+" the peer. The file may contain multiple CA certificates. The\n"
+" certificate(s) must be in PEM format. Normally curl is built to\n"
" use a default file for this, so this option is typically used to\n"
" alter that default file.\n"
"\n"
@@ -382,174 +484,159 @@ void hugehelp(void)
" if it is set, and uses the given path as a path to a CA cert\n"
" bundle. This option overrides that variable.\n"
"\n"
-" The windows version of curl will automatically look for a CA\n"
-" certs file named 'curl-ca-bundle.crt', either in the same direc-\n"
-" tory as curl.exe, or in the Current Working Directory, or in any\n"
-" folder along your PATH.\n"
+" The windows version of curl automatically looks for a CA certs\n"
+" file named 'curl-ca-bundle.crt', either in the same directory as\n"
+" curl.exe, or in the Current Working Directory, or in any folder\n"
+" along your PATH.\n"
"\n"
-" If curl is built against the NSS SSL library, the NSS PEM\n"
+" (iOS and macOS only) If curl is built against Secure Transport,\n"
, stdout);
fputs(
-" PKCS#11 module (libnsspem.so) needs to be available for this op-\n"
-" tion to work properly.\n"
+" then this option is supported for backward compatibility with\n"
+" other SSL engines, but it should not be set. If the option is\n"
+" not set, then curl uses the certificates in the system and user\n"
+" Keychain to verify the peer, which is the preferred method of\n"
+" verifying the peer's certificate chain.\n"
"\n"
-" (iOS and macOS only) If curl is built against Secure Transport,\n"
-" then this option is supported for backward compatibility with\n"
-" other SSL engines, but it should not be set. If the option is\n"
-" not set, then curl will use the certificates in the system and\n"
+" (Schannel only) This option is supported for Schannel in Windows\n"
, stdout);
fputs(
-" user Keychain to verify the peer, which is the preferred method\n"
-" of verifying the peer's certificate chain.\n"
+" 7 or later (added in 7.60.0). This option is supported for back-\n"
+" ward compatibility with other SSL engines; instead it is recom-\n"
+" mended to use Windows' store of root certificates (the default\n"
+" for Schannel).\n"
"\n"
-" (Schannel only) This option is supported for Schannel in Windows\n"
-" 7 or later with libcurl 7.60 or later. This option is supported\n"
-" for backward compatibility with other SSL engines; instead it is\n"
-" recommended to use Windows' store of root certificates (the de-\n"
-" fault for Schannel).\n"
+" If --cacert is provided several times, the last set value is\n"
+" used.\n"
"\n"
-, stdout);
- fputs(
-" If --cacert is provided several times, the last set value will\n"
-" be used.\n"
" Example:\n"
" curl --cacert CA-file.txt https://example.com\n"
"\n"
+, stdout);
+ fputs(
" See also --capath and -k, --insecure.\n"
"\n"
" --capath <dir>\n"
-" (TLS) Tells curl to use the specified certificate directory to\n"
-" verify the peer. Multiple paths can be provided by separating\n"
+" (TLS) Tells curl to use the specified certificate directory to\n"
+" verify the peer. Multiple paths can be provided by separating\n"
" them with \":\" (e.g. \"path1:path2:path3\"). The certificates must\n"
-, stdout);
- fputs(
" be in PEM format, and if curl is built against OpenSSL, the di-\n"
" rectory must have been processed using the c_rehash utility sup-\n"
-" plied with OpenSSL. Using --capath can allow OpenSSL-powered\n"
-" curl to make SSL-connections much more efficiently than using\n"
-" --cacert if the --cacert file contains many CA certificates.\n"
-"\n"
-" If this option is set, the default capath value will be ignored.\n"
, stdout);
fputs(
-" If --capath is provided several times, the last set value will\n"
-" be used.\n"
+" plied with OpenSSL. Using --capath can allow OpenSSL-powered\n"
+" curl to make SSL-connections much more efficiently than using\n"
+" --cacert if the --cacert file contains many CA certificates.\n"
+"\n"
+" If this option is set, the default capath value is ignored.\n"
+"\n"
+" If --capath is provided several times, the last set value is\n"
+" used.\n"
+"\n"
" Example:\n"
" curl --capath /local/directory https://example.com\n"
"\n"
+, stdout);
+ fputs(
" See also --cacert and -k, --insecure.\n"
"\n"
" --cert-status\n"
-" (TLS) Tells curl to verify the status of the server certificate\n"
+" (TLS) Tells curl to verify the status of the server certificate\n"
" by using the Certificate Status Request (aka. OCSP stapling) TLS\n"
" extension.\n"
"\n"
-, stdout);
- fputs(
" If this option is enabled and the server sends an invalid (e.g.\n"
" expired) response, if the response suggests that the server cer-\n"
-" tificate has been revoked, or no response at all is received,\n"
+" tificate has been revoked, or no response at all is received,\n"
+, stdout);
+ fputs(
" the verification fails.\n"
"\n"
-" This is currently only implemented in the OpenSSL, GnuTLS and\n"
-" NSS backends.\n"
+" This is currently only implemented in the OpenSSL and GnuTLS\n"
+" backends.\n"
"\n"
-" Providing --cert-status multiple times has no extra effect.\n"
-, stdout);
- fputs(
+" Providing --cert-status multiple times has no extra effect.\n"
" Disable it again with --no-cert-status.\n"
"\n"
" Example:\n"
" curl --cert-status https://example.com\n"
"\n"
-" See also --pinnedpubkey. Added in 7.41.0.\n"
+" See also --pinnedpubkey.\n"
"\n"
" --cert-type <type>\n"
-" (TLS) Tells curl what type the provided client certificate is\n"
-" using. PEM, DER, ENG and P12 are recognized types.\n"
-"\n"
-" The default type depends on the TLS backend and is usually PEM,\n"
+" (TLS) Tells curl what type the provided client certificate is\n"
, stdout);
fputs(
-" however for Secure Transport and Schannel it is P12. If --cert\n"
-" is a pkcs11: URI then ENG is the default type.\n"
+" using. PEM, DER, ENG and P12 are recognized types.\n"
"\n"
-" If --cert-type is provided several times, the last set value\n"
-" will be used.\n"
+" The default type depends on the TLS backend and is usually PEM,\n"
+" however for Secure Transport and Schannel it is P12. If -E,\n"
+" --cert is a pkcs11: URI then ENG is the default type.\n"
+"\n"
+" If --cert-type is provided several times, the last set value is\n"
+" used.\n"
"\n"
" Example:\n"
" curl --cert-type PEM --cert file https://example.com\n"
"\n"
+, stdout);
+ fputs(
" See also -E, --cert, --key and --key-type.\n"
"\n"
" -E, --cert <certificate[:password]>\n"
-, stdout);
- fputs(
-" (TLS) Tells curl to use the specified client certificate file\n"
+" (TLS) Tells curl to use the specified client certificate file\n"
" when getting a file with HTTPS, FTPS or another SSL-based proto-\n"
" col. The certificate must be in PKCS#12 format if using Secure\n"
" Transport, or PEM format if using any other engine. If the op-\n"
-" tional password is not specified, it will be queried for on the\n"
-" terminal. Note that this option assumes a certificate file that\n"
+" tional password is not specified, it is queried for on the ter-\n"
, stdout);
fputs(
-" is the private key and the client certificate concatenated. See\n"
+" minal. Note that this option assumes a certificate file that is\n"
+" the private key and the client certificate concatenated. See -E,\n"
" --cert and --key to specify them independently.\n"
"\n"
-" In the <certificate> portion of the argument, you must escape\n"
-" the character \":\" as \"\\:\" so that it is not recognized as the\n"
+" In the <certificate> portion of the argument, you must escape\n"
+" the character \":\" as \"\\:\" so that it is not recognized as the\n"
" password delimiter. Similarly, you must escape the character \"\\\"\n"
-" as \"\\\\\" so that it is not recognized as an escape character.\n"
-"\n"
-, stdout);
- fputs(
-" If curl is built against the NSS SSL library then this option\n"
-" can tell curl the nickname of the certificate to use within the\n"
-" NSS database defined by the environment variable SSL_DIR (or by\n"
-" default /etc/pki/nssdb). If the NSS PEM PKCS#11 module (lib-\n"
-" nsspem.so) is available then PEM files may be loaded.\n"
-"\n"
-" If you provide a path relative to the current directory, you\n"
, stdout);
fputs(
-" must prefix the path with \"./\" in order to avoid confusion with\n"
-" an NSS database nickname.\n"
+" as \"\\\\\" so that it is not recognized as an escape character.\n"
"\n"
" If curl is built against OpenSSL library, and the engine pkcs11\n"
" is available, then a PKCS#11 URI (RFC 7512) can be used to spec-\n"
-" ify a certificate located in a PKCS#11 device. A string begin-\n"
-" ning with \"pkcs11:\" will be interpreted as a PKCS#11 URI. If a\n"
+" ify a certificate located in a PKCS#11 device. A string begin-\n"
+" ning with \"pkcs11:\" is interpreted as a PKCS#11 URI. If a\n"
+" PKCS#11 URI is provided, then the --engine option is set as\n"
, stdout);
fputs(
-" PKCS#11 URI is provided, then the --engine option will be set as\n"
-" \"pkcs11\" if none was provided and the --cert-type option will be\n"
-" set as \"ENG\" if none was provided.\n"
+" \"pkcs11\" if none was provided and the --cert-type option is set\n"
+" as \"ENG\" if none was provided.\n"
"\n"
-" (iOS and macOS only) If curl is built against Secure Transport,\n"
+" (iOS and macOS only) If curl is built against Secure Transport,\n"
" then the certificate string can either be the name of a certifi-\n"
" cate/private key in the system or user keychain, or the path to\n"
+" a PKCS#12-encoded certificate and private key. If you want to\n"
, stdout);
fputs(
-" a PKCS#12-encoded certificate and private key. If you want to\n"
" use a file from the current directory, please precede it with\n"
" \"./\" prefix, in order to avoid confusion with a nickname.\n"
"\n"
" (Schannel only) Client certificates must be specified by a path\n"
" expression to a certificate store. (Loading PFX is not sup-\n"
" ported; you can import it to a store first). You can use \"<store\n"
+" location>\\<store name>\\<thumbprint>\" to refer to a certificate\n"
, stdout);
fputs(
-" location>\\<store name>\\<thumbprint>\" to refer to a certificate\n"
-" in the system certificates store, for example, \"Curren-\n"
+" in the system certificates store, for example, \"Curren-\n"
" tUser\\MY\\934a7ac6f8a5d579285a74fa61e19f23ddfe8d7a\". Thumbprint\n"
-" is usually a SHA-1 hex string which you can see in certificate\n"
-" details. Following store locations are supported: CurrentUser,\n"
-" LocalMachine, CurrentService, Services, CurrentUserGroupPolicy,\n"
+" is usually a SHA-1 hex string which you can see in certificate\n"
+" details. Following store locations are supported: CurrentUser,\n"
+" LocalMachine, CurrentService, Services, CurrentUserGroupPolicy,\n"
+" LocalMachineGroupPolicy and LocalMachineEnterprise.\n"
+"\n"
, stdout);
fputs(
-" LocalMachineGroupPolicy, LocalMachineEnterprise.\n"
-"\n"
-" If --cert is provided several times, the last set value will be\n"
+" If -E, --cert is provided several times, the last set value is\n"
" used.\n"
"\n"
" Example:\n"
@@ -559,27 +646,28 @@ void hugehelp(void)
"\n"
" --ciphers <list of ciphers>\n"
" (TLS) Specifies which ciphers to use in the connection. The list\n"
-, stdout);
- fputs(
" of ciphers must specify valid ciphers. Read up on SSL cipher\n"
" list details on this URL:\n"
"\n"
-" https://curl.se/docs/ssl-ciphers.html\n"
+, stdout);
+ fputs(
+" https://curl.se/docs/ssl-ciphers.html\n"
+"\n"
+" If --ciphers is provided several times, the last set value is\n"
+" used.\n"
"\n"
-" If --ciphers is provided several times, the last set value will\n"
-" be used.\n"
" Example:\n"
" curl --ciphers ECDHE-ECDSA-AES256-CCM8 https://example.com\n"
"\n"
-" See also --tlsv1.3.\n"
+" See also --tlsv1.3, --tls13-ciphers and --proxy-ciphers.\n"
"\n"
" --compressed-ssh\n"
-, stdout);
- fputs(
" (SCP SFTP) Enables built-in SSH compression. This is a request,\n"
" not an order; the server may or may not do it.\n"
"\n"
-" Providing --compressed-ssh multiple times has no extra effect.\n"
+, stdout);
+ fputs(
+" Providing --compressed-ssh multiple times has no extra effect.\n"
" Disable it again with --no-compressed-ssh.\n"
"\n"
" Example:\n"
@@ -588,19 +676,23 @@ void hugehelp(void)
" See also --compressed. Added in 7.56.0.\n"
"\n"
" --compressed\n"
+" (HTTP) Request a compressed response using one of the algorithms\n"
+" curl supports, and automatically decompress the content.\n"
+"\n"
, stdout);
fputs(
-" (HTTP) Request a compressed response using one of the algorithms\n"
-" curl supports, and automatically decompress the content. Headers\n"
-" are not modified.\n"
+" Response headers are not modified when saved, so if they are\n"
+" \"interpreted\" separately again at a later point they might ap-\n"
+" pear to be saying that the content is (still) compressed; while\n"
+" in fact it has already been decompressed.\n"
"\n"
" If this option is used and the server sends an unsupported en-\n"
-" coding, curl will report an error. This is a request, not an or-\n"
-" der; the server may or may not deliver data compressed.\n"
-"\n"
-" Providing --compressed multiple times has no extra effect. Dis-\n"
+" coding, curl reports an error. This is a request, not an order;\n"
, stdout);
fputs(
+" the server may or may not deliver data compressed.\n"
+"\n"
+" Providing --compressed multiple times has no extra effect. Dis-\n"
" able it again with --no-compressed.\n"
"\n"
" Example:\n"
@@ -609,38 +701,42 @@ void hugehelp(void)
" See also --compressed-ssh.\n"
"\n"
" -K, --config <file>\n"
-" Specify a text file to read curl arguments from. The command\n"
-" line arguments found in the text file will be used as if they\n"
-" were provided on the command line.\n"
-"\n"
-" Options and their parameters must be specified on the same line\n"
+" Specify a text file to read curl arguments from. The command\n"
+" line arguments found in the text file are used as if they were\n"
, stdout);
fputs(
+" provided on the command line.\n"
+"\n"
+" Options and their parameters must be specified on the same line\n"
" in the file, separated by whitespace, colon, or the equals sign.\n"
" Long option names can optionally be given in the config file\n"
" without the initial double dashes and if so, the colon or equals\n"
" characters can be used as separators. If the option is specified\n"
+, stdout);
+ fputs(
" with one or two dashes, there can be no colon or equals charac-\n"
" ter between the option and its parameter.\n"
"\n"
+" If the parameter contains whitespace or starts with a colon (:)\n"
+" or equals sign (=), it must be specified enclosed within double\n"
+" quotes (\"). Within double quotes the following escape sequences\n"
+" are available: \\\\, \\\", \\t, \\n, \\r and \\v. A backslash preceding\n"
+" any other letter is ignored.\n"
+"\n"
, stdout);
fputs(
-" If the parameter contains whitespace (or starts with : or =),\n"
-" the parameter must be enclosed within quotes. Within double\n"
-" quotes, the following escape sequences are available: \\\\, \\\",\n"
-" \\t, \\n, \\r and \\v. A backslash preceding any other letter is ig-\n"
-" nored.\n"
+" If the first non-blank column of a config line is a '#' charac-\n"
+" ter, that line is treated as a comment.\n"
"\n"
-" If the first column of a config line is a '#' character, the\n"
-" rest of the line will be treated as a comment.\n"
+" Only write one option per physical line in the config file. A\n"
+" single line is required to be no more than 10 megabytes (since\n"
+" 8.2.0).\n"
+"\n"
+" Specify the filename to -K, --config as '-' to make curl read\n"
+" the file from stdin.\n"
"\n"
, stdout);
fputs(
-" Only write one option per physical line in the config file.\n"
-"\n"
-" Specify the filename to --config as '-' to make curl read the\n"
-" file from stdin.\n"
-"\n"
" Note that to be able to specify a URL in the config file, you\n"
" need to specify it using the --url option, and not by simply\n"
" writing the URL on its own line. So, it could look similar to\n"
@@ -648,30 +744,30 @@ void hugehelp(void)
"\n"
" url = \"https://curl.se/docs/\"\n"
"\n"
-, stdout);
- fputs(
" # --- Example file ---\n"
" # this is a comment\n"
" url = \"example.com\"\n"
" output = \"curlhere.html\"\n"
" user-agent = \"superagent/1.0\"\n"
"\n"
+, stdout);
+ fputs(
" # and fetch another URL too\n"
" url = \"example.com/docs/manpage.html\"\n"
" -O\n"
" referer = \"http://nowhereatall.example.com/\"\n"
" # --- End of example file ---\n"
"\n"
-" When curl is invoked, it (unless --disable is used) checks for a\n"
+" When curl is invoked, it (unless -q, --disable is used) checks\n"
+" for a default config file and uses it if found, even when -K,\n"
+" --config is used. The default config file is checked for in the\n"
, stdout);
fputs(
-" default config file and uses it if found, even when --config is\n"
-" used. The default config file is checked for in the following\n"
-" places in this order:\n"
+" following places in this order:\n"
"\n"
" 1) \"$CURL_HOME/.curlrc\"\n"
"\n"
-" 2) \"$XDG_CONFIG_HOME/.curlrc\" (Added in 7.73.0)\n"
+" 2) \"$XDG_CONFIG_HOME/curlrc\" (Added in 7.73.0)\n"
"\n"
" 3) \"$HOME/.curlrc\"\n"
"\n"
@@ -681,11 +777,11 @@ void hugehelp(void)
"\n"
" 6) Windows: \"%USERPROFILE%\\Application Data\\.curlrc\"\n"
"\n"
-, stdout);
- fputs(
" 7) Non-Windows: use getpwuid to find the home directory\n"
"\n"
" 8) On Windows, if it finds no .curlrc file in the sequence de-\n"
+, stdout);
+ fputs(
" scribed above, it checks for one in the same dir the curl exe-\n"
" cutable is placed.\n"
"\n"
@@ -693,52 +789,59 @@ void hugehelp(void)
" _curlrc, preferring the former. Older versions on Windows\n"
" checked for _curlrc only.\n"
"\n"
-, stdout);
- fputs(
-" --config can be used several times in a command line\n"
+" -K, --config can be used several times in a command line\n"
"\n"
" Example:\n"
" curl --config file.txt https://example.com\n"
"\n"
+, stdout);
+ fputs(
" See also -q, --disable.\n"
"\n"
" --connect-timeout <fractional seconds>\n"
" Maximum time in seconds that you allow curl's connection to\n"
" take. This only limits the connection phase, so if curl con-\n"
-" nects within the given period it will continue - if not it will\n"
+" nects within the given period it continues - if not it exits.\n"
+"\n"
+" This option accepts decimal values. The decimal value needs to\n"
+" be provided using a dot (.) as decimal separator - not the local\n"
, stdout);
fputs(
-" exit. Since version 7.32.0, this option accepts decimal values.\n"
-" If --connect-timeout is provided several times, the last set\n"
-" value will be used.\n"
+" version even if it might be using another separator.\n"
+"\n"
+" The connection phase is considered complete when the DNS lookup\n"
+" and requested TCP, TLS or QUIC handshakes are done.\n"
+"\n"
+" If --connect-timeout is provided several times, the last set\n"
+" value is used.\n"
"\n"
" Examples:\n"
" curl --connect-timeout 20 https://example.com\n"
" curl --connect-timeout 3.14 https://example.com\n"
"\n"
+, stdout);
+ fputs(
" See also -m, --max-time.\n"
"\n"
" --connect-to <HOST1:PORT1:HOST2:PORT2>\n"
"\n"
-, stdout);
- fputs(
" For a request to the given HOST1:PORT1 pair, connect to\n"
" HOST2:PORT2 instead. This option is suitable to direct requests\n"
" at a specific server, e.g. at a specific cluster node in a clus-\n"
-" ter of servers. This option is only used to establish the net-\n"
-" work connection. It does NOT affect the hostname/port that is\n"
-" used for TLS/SSL (e.g. SNI, certificate verification) or for the\n"
+" ter of servers. This option is only used to establish the net-\n"
+" work connection. It does NOT affect the hostname/port that is\n"
, stdout);
fputs(
+" used for TLS/SSL (e.g. SNI, certificate verification) or for the\n"
" application protocols. \"HOST1\" and \"PORT1\" may be the empty\n"
" string, meaning \"any host/port\". \"HOST2\" and \"PORT2\" may also be\n"
-" the empty string, meaning \"use the request's original\n"
+" the empty string, meaning \"use the request's original\n"
" host/port\".\n"
"\n"
" A \"host\" specified to this option is compared as a string, so it\n"
-" needs to match the name used in request URL. It can be either\n"
, stdout);
fputs(
+" needs to match the name used in request URL. It can be either\n"
" numerical such as \"127.0.0.1\" or the full host name such as \"ex-\n"
" ample.org\".\n"
"\n"
@@ -747,25 +850,25 @@ void hugehelp(void)
" Example:\n"
" curl --connect-to example.com:443:example.net:8443 https://example.com\n"
"\n"
-" See also --resolve and -H, --header. Added in 7.49.0.\n"
+" See also --resolve and -H, --header.\n"
"\n"
" -C, --continue-at <offset>\n"
-" Continue/Resume a previous file transfer at the given offset.\n"
, stdout);
fputs(
-" The given offset is the exact number of bytes that will be\n"
-" skipped, counting from the beginning of the source file before\n"
-" it is transferred to the destination. If used with uploads, the\n"
-" FTP server command SIZE will not be used by curl.\n"
-"\n"
-" Use \"-C -\" to tell curl to automatically find out where/how to\n"
-" resume the transfer. It then uses the given output/input files\n"
-" to figure that out.\n"
+" Continue/Resume a previous file transfer at the given offset.\n"
+" The given offset is the exact number of bytes that are skipped,\n"
+" counting from the beginning of the source file before it is\n"
+" transferred to the destination. If used with uploads, the FTP\n"
+" server command SIZE is not used by curl.\n"
"\n"
+" Use \"-C -\" to tell curl to automatically find out where/how to\n"
, stdout);
fputs(
-" If --continue-at is provided several times, the last set value\n"
-" will be used.\n"
+" resume the transfer. It then uses the given output/input files\n"
+" to figure that out.\n"
+"\n"
+" If -C, --continue-at is provided several times, the last set\n"
+" value is used.\n"
"\n"
" Examples:\n"
" curl -C - https://example.com\n"
@@ -774,32 +877,36 @@ void hugehelp(void)
" See also -r, --range.\n"
"\n"
" -c, --cookie-jar <filename>\n"
-" (HTTP) Specify to which file you want curl to write all cookies\n"
-" after a completed operation. Curl writes all cookies from its\n"
+" (HTTP) Specify to which file you want curl to write all cookies\n"
, stdout);
fputs(
-" in-memory cookie storage to the given file at the end of opera-\n"
-" tions. If no cookies are known, no data will be written. The\n"
-" file will be written using the Netscape cookie file format. If\n"
-" you set the file name to a single dash, \"-\", the cookies will be\n"
-" written to stdout.\n"
+" after a completed operation. Curl writes all cookies from its\n"
+" in-memory cookie storage to the given file at the end of opera-\n"
+" tions. If no cookies are known, no data is written. The file is\n"
+" created using the Netscape cookie file format. If you set the\n"
+" file name to a single dash, \"-\", the cookies are written to std-\n"
+" out.\n"
"\n"
-" This command line option will activate the cookie engine that\n"
+" The file specified with -c, --cookie-jar is only used for out-\n"
, stdout);
fputs(
-" makes curl record and use cookies. Another way to activate it is\n"
-" to use the --cookie option.\n"
+" put. No cookies are read from the file. To read cookies, use the\n"
+" -b, --cookie option. Both options can specify the same file.\n"
"\n"
-" If the cookie jar cannot be created or written to, the whole\n"
-" curl operation will not fail or even report an error clearly.\n"
-" Using --verbose will get a warning displayed, but that is the\n"
-" only visible feedback you get about this possibly lethal situa-\n"
-" tion.\n"
+" This command line option activates the cookie engine that makes\n"
+" curl record and use cookies. The -b, --cookie option also acti-\n"
+" vates it.\n"
"\n"
+" If the cookie jar cannot be created or written to, the whole\n"
+" curl operation does not fail or even report an error clearly.\n"
, stdout);
fputs(
-" If --cookie-jar is provided several times, the last set value\n"
-" will be used.\n"
+" Using -v, --verbose gets a warning displayed, but that is the\n"
+" only visible feedback you get about this possibly lethal situa-\n"
+" tion.\n"
+"\n"
+" If -c, --cookie-jar is provided several times, the last set\n"
+" value is used.\n"
"\n"
" Examples:\n"
" curl -c store-here.txt https://example.com\n"
@@ -807,106 +914,108 @@ void hugehelp(void)
"\n"
" See also -b, --cookie.\n"
"\n"
+, stdout);
+ fputs(
" -b, --cookie <data|filename>\n"
" (HTTP) Pass the data to the HTTP server in the Cookie header. It\n"
" is supposedly the data previously received from the server in a\n"
-, stdout);
- fputs(
" \"Set-Cookie:\" line. The data should be in the format\n"
" \"NAME1=VALUE1; NAME2=VALUE2\". This makes curl use the cookie\n"
" header with this content explicitly in all outgoing request(s).\n"
+, stdout);
+ fputs(
" If multiple requests are done due to authentication, followed\n"
-" redirects or similar, they will all get this cookie passed on.\n"
+" redirects or similar, they all get this cookie passed on.\n"
"\n"
" If no '=' symbol is used in the argument, it is instead treated\n"
-, stdout);
- fputs(
" as a filename to read previously stored cookie from. This option\n"
-" also activates the cookie engine which will make curl record in-\n"
-" coming cookies, which may be handy if you are using this in com-\n"
-" bination with the --location option or do multiple URL transfers\n"
-" on the same invoke. If the file name is exactly a minus (\"-\"),\n"
-" curl will instead read the contents from stdin.\n"
-"\n"
+" also activates the cookie engine which makes curl record incom-\n"
+" ing cookies, which may be handy if you are using this in combi-\n"
, stdout);
fputs(
+" nation with the -L, --location option or do multiple URL trans-\n"
+" fers on the same invoke. If the file name is exactly a minus\n"
+" (\"-\"), curl instead reads the contents from stdin.\n"
+"\n"
" The file format of the file to read cookies from should be plain\n"
" HTTP headers (Set-Cookie style) or the Netscape/Mozilla cookie\n"
" file format.\n"
"\n"
-" The file specified with --cookie is only used as input. No cook-\n"
-" ies will be written to the file. To store cookies, use the\n"
+" The file specified with -b, --cookie is only used as input. No\n"
+, stdout);
+ fputs(
+" cookies are written to the file. To store cookies, use the -c,\n"
" --cookie-jar option.\n"
"\n"
" If you use the Set-Cookie file format and do not specify a do-\n"
+" main then the cookie is not sent since the domain never matches.\n"
+" To address this, set a domain in Set-Cookie line (doing that in-\n"
+" cludes subdomains) or preferably: use the Netscape format.\n"
+"\n"
, stdout);
fputs(
-" main then the cookie is not sent since the domain will never\n"
-" match. To address this, set a domain in Set-Cookie line (doing\n"
-" that will include sub-domains) or preferably: use the Netscape\n"
-" format.\n"
-"\n"
-" Users often want to both read cookies from a file and write up-\n"
-" dated cookies back to a file, so using both --cookie and\n"
+" Users often want to both read cookies from a file and write up-\n"
+" dated cookies back to a file, so using both -b, --cookie and -c,\n"
" --cookie-jar in the same command line is common.\n"
"\n"
-, stdout);
- fputs(
-" --cookie can be used several times in a command line\n"
+" -b, --cookie can be used several times in a command line\n"
"\n"
" Examples:\n"
" curl -b cookiefile https://example.com\n"
" curl -b cookiefile -c cookiefile https://example.com\n"
"\n"
+, stdout);
+ fputs(
" See also -c, --cookie-jar and -j, --junk-session-cookies.\n"
"\n"
" --create-dirs\n"
-" When used in conjunction with the --output option, curl will\n"
-" create the necessary local directory hierarchy as needed. This\n"
+" When used in conjunction with the -o, --output option, curl cre-\n"
+" ates the necessary local directory hierarchy as needed. This op-\n"
+" tion creates the directories mentioned with the -o, --output op-\n"
+" tion combined with the path possibly set with --output-dir. If\n"
+" the combined output file name uses no directory, or if the di-\n"
, stdout);
fputs(
-" option creates the directories mentioned with the --output op-\n"
-" tion, nothing else. If the --output file name uses no directory,\n"
-" or if the directories it mentions already exist, no directories\n"
-" will be created.\n"
+" rectories it mentions already exist, no directories are created.\n"
+" Created directories are made with mode 0750 on unix style file\n"
+" systems.\n"
"\n"
-" Created dirs are made with mode 0750 on unix style file systems.\n"
-" To create remote directories when using FTP or SFTP, try --ftp-\n"
-" create-dirs.\n"
+" To create remote directories when using FTP or SFTP, try\n"
+" --ftp-create-dirs.\n"
"\n"
-, stdout);
- fputs(
" Providing --create-dirs multiple times has no extra effect.\n"
" Disable it again with --no-create-dirs.\n"
"\n"
" Example:\n"
+, stdout);
+ fputs(
" curl --create-dirs --output local/dir/file https://example.com\n"
"\n"
" See also --ftp-create-dirs and --output-dir.\n"
"\n"
" --create-file-mode <mode>\n"
" (SFTP SCP FILE) When curl is used to create files remotely using\n"
-" one of the supported protocols, this option allows the user to\n"
-, stdout);
- fputs(
+" one of the supported protocols, this option allows the user to\n"
" set which 'mode' to set on the file at creation time, instead of\n"
" the default 0644.\n"
"\n"
+, stdout);
+ fputs(
" This option takes an octal number as argument.\n"
"\n"
" If --create-file-mode is provided several times, the last set\n"
-" value will be used.\n"
+" value is used.\n"
"\n"
" Example:\n"
" curl --create-file-mode 0777 -T localfile sftp://example.com/new\n"
"\n"
" See also --ftp-create-dirs. Added in 7.75.0.\n"
"\n"
+" --crlf (FTP SMTP) Convert line feeds to carriage return plus line feeds\n"
+" in upload. Useful for MVS (OS/390).\n"
+"\n"
, stdout);
fputs(
-" --crlf (FTP SMTP) Convert LF to CRLF in upload. Useful for MVS\n"
-" (OS/390).\n"
-"\n"
" (SMTP added in 7.40.0)\n"
"\n"
" Providing --crlf multiple times has no extra effect. Disable it\n"
@@ -919,13 +1028,14 @@ void hugehelp(void)
"\n"
" --crlfile <file>\n"
" (TLS) Provide a file using PEM format with a Certificate Revoca-\n"
-, stdout);
- fputs(
" tion List that may specify peer certificates that are to be con-\n"
" sidered revoked.\n"
"\n"
-" If --crlfile is provided several times, the last set value will\n"
-" be used.\n"
+, stdout);
+ fputs(
+" If --crlfile is provided several times, the last set value is\n"
+" used.\n"
+"\n"
" Example:\n"
" curl --crlfile rejects.txt https://example.com\n"
"\n"
@@ -933,24 +1043,25 @@ void hugehelp(void)
"\n"
" --curves <algorithm list>\n"
" (TLS) Tells curl to request specific curves to use during SSL\n"
+" session establishment according to RFC 8422, 5.1. Multiple al-\n"
, stdout);
fputs(
-" session establishment according to RFC 8422, 5.1. Multiple al-\n"
" gorithms can be provided by separating them with \":\" (e.g.\n"
" \"X25519:P-521\"). The parameter is available identically in the\n"
" \"openssl s_client/s_server\" utilities.\n"
"\n"
" --curves allows a OpenSSL powered curl to make SSL-connections\n"
" with exactly the (EC) curve requested by the client, avoiding\n"
-, stdout);
- fputs(
" nontransparent client/server negotiations.\n"
"\n"
+, stdout);
+ fputs(
" If this option is set, the default curves list built into\n"
-" openssl will be ignored.\n"
+" OpenSSL are ignored.\n"
+"\n"
+" If --curves is provided several times, the last set value is\n"
+" used.\n"
"\n"
-" If --curves is provided several times, the last set value will\n"
-" be used.\n"
" Example:\n"
" curl --curves X25519 https://example.com\n"
"\n"
@@ -975,20 +1086,20 @@ void hugehelp(void)
" If you start the data with the letter @, the rest should be a\n"
, stdout);
fputs(
-" filename. Data is posted in a similar manner as --data does, ex-\n"
-" cept that newlines and carriage returns are preserved and con-\n"
+" filename. Data is posted in a similar manner as -d, --data does,\n"
+" except that newlines and carriage returns are preserved and con-\n"
" versions are never done.\n"
"\n"
-" Like --data the default content-type sent to the server is ap-\n"
-" plication/x-www-form-urlencoded. If you want the data to be\n"
+" Like -d, --data the default content-type sent to the server is\n"
+" application/x-www-form-urlencoded. If you want the data to be\n"
" treated as arbitrary binary data by the server then set the con-\n"
, stdout);
fputs(
-" tent-type to octet-stream: -H \"Content-Type: application/octet-\n"
-" stream\".\n"
+" tent-type to octet-stream: -H \"Content-Type: applica-\n"
+" tion/octet-stream\".\n"
"\n"
-" If this option is used several times, the ones following the\n"
-" first will append data as described in -d, --data.\n"
+" If this option is used several times, the ones following the\n"
+" first append data as described in -d, --data.\n"
"\n"
" --data-binary can be used several times in a command line\n"
"\n"
@@ -1000,8 +1111,8 @@ void hugehelp(void)
" --data-raw <data>\n"
, stdout);
fputs(
-" (HTTP) This posts data similarly to --data but without the spe-\n"
-" cial interpretation of the @ character.\n"
+" (HTTP) This posts data similarly to -d, --data but without the\n"
+" special interpretation of the @ character.\n"
"\n"
" --data-raw can be used several times in a command line\n"
"\n"
@@ -1009,175 +1120,177 @@ void hugehelp(void)
" curl --data-raw \"hello\" https://example.com\n"
" curl --data-raw \"@at@at@\" https://example.com\n"
"\n"
-" See also -d, --data. Added in 7.43.0.\n"
+" See also -d, --data.\n"
"\n"
" --data-urlencode <data>\n"
+" (HTTP) This posts data, similar to the other -d, --data options\n"
, stdout);
fputs(
-" (HTTP) This posts data, similar to the other --data options with\n"
-" the exception that this performs URL-encoding.\n"
+" with the exception that this performs URL-encoding.\n"
"\n"
-" To be CGI-compliant, the <data> part should begin with a name\n"
-" followed by a separator and a content specification. The <data>\n"
+" To be CGI-compliant, the <data> part should begin with a name\n"
+" followed by a separator and a content specification. The <data>\n"
" part can be passed to curl using one of the following syntaxes:\n"
"\n"
" content\n"
-" This will make curl URL-encode the content and pass that\n"
+" This makes curl URL-encode the content and pass that on.\n"
+" Just be careful so that the content does not contain any\n"
, stdout);
fputs(
-" on. Just be careful so that the content does not contain\n"
-" any = or @ symbols, as that will then make the syntax\n"
-" match one of the other cases below!\n"
+" = or @ symbols, as that makes the syntax match one of the\n"
+" other cases below!\n"
"\n"
" =content\n"
-" This will make curl URL-encode the content and pass that\n"
-" on. The preceding = symbol is not included in the data.\n"
+" This makes curl URL-encode the content and pass that on.\n"
+" The preceding = symbol is not included in the data.\n"
"\n"
" name=content\n"
+" This makes curl URL-encode the content part and pass that\n"
+" on. Note that the name part is expected to be URL-encoded\n"
, stdout);
fputs(
-" This will make curl URL-encode the content part and pass\n"
-" that on. Note that the name part is expected to be URL-\n"
-" encoded already.\n"
+" already.\n"
"\n"
" @filename\n"
-" This will make curl load data from the given file (in-\n"
-" cluding any newlines), URL-encode that data and pass it\n"
-" on in the POST.\n"
+" This makes curl load data from the given file (including\n"
+" any newlines), URL-encode that data and pass it on in the\n"
+" POST.\n"
"\n"
" name@filename\n"
+" This makes curl load data from the given file (including\n"
+" any newlines), URL-encode that data and pass it on in the\n"
, stdout);
fputs(
-" This will make curl load data from the given file (in-\n"
-" cluding any newlines), URL-encode that data and pass it\n"
-" on in the POST. The name part gets an equal sign ap-\n"
-" pended, resulting in name=urlencoded-file-content. Note\n"
-" that the name is expected to be URL-encoded already.\n"
+" POST. The name part gets an equal sign appended, result-\n"
+" ing in name=urlencoded-file-content. Note that the name\n"
+" is expected to be URL-encoded already.\n"
"\n"
-" --data-urlencode can be used several times in a command line\n"
+" --data-urlencode can be used several times in a command line\n"
"\n"
-" Examples:\n"
+" Examples:\n"
+" curl --data-urlencode name=val https://example.com\n"
+" curl --data-urlencode =encodethis https://example.com\n"
, stdout);
fputs(
-" curl --data-urlencode name=val https://example.com\n"
-" curl --data-urlencode =encodethis https://example.com\n"
-" curl --data-urlencode name@file https://example.com\n"
-" curl --data-urlencode @fileonly https://example.com\n"
+" curl --data-urlencode name@file https://example.com\n"
+" curl --data-urlencode @fileonly https://example.com\n"
"\n"
-" See also -d, --data and --data-raw.\n"
+" See also -d, --data and --data-raw.\n"
"\n"
" -d, --data <data>\n"
" (HTTP MQTT) Sends the specified data in a POST request to the\n"
" HTTP server, in the same way that a browser does when a user has\n"
+" filled in an HTML form and presses the submit button. This makes\n"
, stdout);
fputs(
-" filled in an HTML form and presses the submit button. This will\n"
-" cause curl to pass the data to the server using the content-type\n"
-" application/x-www-form-urlencoded. Compare to -F, --form.\n"
+" curl pass the data to the server using the content-type applica-\n"
+" tion/x-www-form-urlencoded. Compare to -F, --form.\n"
"\n"
" --data-raw is almost the same but does not have a special inter-\n"
" pretation of the @ character. To post data purely binary, you\n"
" should instead use the --data-binary option. To URL-encode the\n"
-, stdout);
- fputs(
" value of a form field you may use --data-urlencode.\n"
"\n"
+, stdout);
+ fputs(
" If any of these options is used more than once on the same com-\n"
-" mand line, the data pieces specified will be merged with a sepa-\n"
-" rating &-symbol. Thus, using '-d name=daniel -d skill=lousy'\n"
-" would generate a post chunk that looks like\n"
-" 'name=daniel&skill=lousy'.\n"
-"\n"
+" mand line, the data pieces specified are merged with a separat-\n"
+" ing &-symbol. Thus, using '-d name=daniel -d skill=lousy' would\n"
+" generate a post chunk that looks like 'name=daniel&skill=lousy'.\n"
+" If you start the data with the letter @, the rest should be a\n"
+" file name to read the data from, or - if you want curl to read\n"
, stdout);
fputs(
-" If you start the data with the letter @, the rest should be a\n"
-" file name to read the data from, or - if you want curl to read\n"
-" the data from stdin. Posting data from a file named 'foobar'\n"
-" would thus be done with -d, --data @foobar. When --data is told\n"
-" to read from a file like that, carriage returns and newlines\n"
-" will be stripped out. If you do not want the @ character to have\n"
+" the data from stdin. Posting data from a file named 'foobar'\n"
+" would thus be done with -d, --data @foobar. When -d, --data is\n"
+" told to read from a file like that, carriage returns and new-\n"
+" lines are stripped out. If you do not want the @ character to\n"
+" have a special interpretation use --data-raw instead.\n"
+"\n"
+" The data for this option is passed on to the server exactly as\n"
, stdout);
fputs(
-" a special interpretation use --data-raw instead.\n"
+" provided on the command line. curl does not convert, change or\n"
+" improve it. It is up to the user to provide the data in the cor-\n"
+" rect form.\n"
"\n"
-" --data can be used several times in a command line\n"
+" -d, --data can be used several times in a command line\n"
"\n"
" Examples:\n"
" curl -d \"name=curl\" https://example.com\n"
" curl -d \"name=curl\" -d \"tool=cmdline\" https://example.com\n"
" curl -d @filename https://example.com\n"
"\n"
-" See also --data-binary, --data-urlencode and --data-raw. This\n"
-" option is mutually exclusive to -F, --form and -I, --head and\n"
, stdout);
fputs(
+" See also --data-binary, --data-urlencode and --data-raw. This\n"
+" option is mutually exclusive to -F, --form and -I, --head and\n"
" -T, --upload-file.\n"
"\n"
" --delegation <LEVEL>\n"
-" (GSS/kerberos) Set LEVEL to tell the server what it is allowed\n"
+" (GSS/kerberos) Set LEVEL to tell the server what it is allowed\n"
" to delegate when it comes to user credentials.\n"
"\n"
" none Do not allow any delegation.\n"
"\n"
-" policy Delegates if and only if the OK-AS-DELEGATE flag is set\n"
-" in the Kerberos service ticket, which is a matter of\n"
-" realm policy.\n"
-"\n"
+" policy Delegates if and only if the OK-AS-DELEGATE flag is set\n"
, stdout);
fputs(
+" in the Kerberos service ticket, which is a matter of\n"
+" realm policy.\n"
+"\n"
" always Unconditionally allow the server to delegate.\n"
"\n"
-" If --delegation is provided several times, the last set value will be\n"
-" used.\n"
+" If --delegation is provided several times, the last set value is\n"
+" used.\n"
"\n"
-" Example:\n"
-" curl --delegation \"none\" https://example.com\n"
+" Example:\n"
+" curl --delegation \"none\" https://example.com\n"
"\n"
-" See also -k, --insecure and --ssl.\n"
+" See also -k, --insecure and --ssl.\n"
"\n"
" --digest\n"
-" (HTTP) Enables HTTP Digest authentication. This is an authenti-\n"
-" cation scheme that prevents the password from being sent over\n"
, stdout);
fputs(
+" (HTTP) Enables HTTP Digest authentication. This is an authenti-\n"
+" cation scheme that prevents the password from being sent over\n"
" the wire in clear text. Use this in combination with the normal\n"
-" --user option to set user name and password.\n"
+" -u, --user option to set user name and password.\n"
"\n"
" Providing --digest multiple times has no extra effect. Disable\n"
" it again with --no-digest.\n"
"\n"
" Example:\n"
+, stdout);
+ fputs(
" curl -u name:password --digest https://example.com\n"
"\n"
" See also -u, --user, --proxy-digest and --anyauth. This option\n"
-, stdout);
- fputs(
" is mutually exclusive to --basic and --ntlm and --negotiate.\n"
"\n"
" --disable-eprt\n"
" (FTP) Tell curl to disable the use of the EPRT and LPRT commands\n"
-" when doing active FTP transfers. Curl will normally always first\n"
-" attempt to use EPRT, then LPRT before using PORT, but with this\n"
-" option, it will use PORT right away. EPRT and LPRT are exten-\n"
-" sions to the original FTP protocol, and may not work on all\n"
+" when doing active FTP transfers. Curl normally first attempts to\n"
+" use EPRT before using PORT, but with this option, it uses PORT\n"
, stdout);
fputs(
-" servers, but they enable more functionality in a better way than\n"
-" the traditional PORT command.\n"
+" right away. EPRT is an extension to the original FTP protocol,\n"
+" and does not work on all servers, but enables more functionality\n"
+" in a better way than the traditional PORT command.\n"
"\n"
" --eprt can be used to explicitly enable EPRT again and --no-eprt\n"
" is an alias for --disable-eprt.\n"
"\n"
-" If the server is accessed using IPv6, this option will have no\n"
-" effect as EPRT is necessary then.\n"
+" If the server is accessed using IPv6, this option has no effect\n"
+" as EPRT is necessary then.\n"
"\n"
-" Disabling EPRT only changes the active behavior. If you want to\n"
, stdout);
fputs(
-" switch to passive mode you need to not use --ftp-port or force\n"
-" it with --ftp-pasv.\n"
+" Disabling EPRT only changes the active behavior. If you want to\n"
+" switch to passive mode you need to not use -P, --ftp-port or\n"
+" force it with --ftp-pasv.\n"
"\n"
-" Providing --disable-eprt multiple times has no extra effect.\n"
+" Providing --disable-eprt multiple times has no extra effect.\n"
" Disable it again with --no-disable-eprt.\n"
"\n"
" Example:\n"
@@ -1186,25 +1299,24 @@ void hugehelp(void)
" See also --disable-epsv and -P, --ftp-port.\n"
"\n"
" --disable-epsv\n"
-" (FTP) Tell curl to disable the use of the EPSV command when do-\n"
, stdout);
fputs(
-" ing passive FTP transfers. Curl will normally always first at-\n"
-" tempt to use EPSV before PASV, but with this option, it will not\n"
-" try using EPSV.\n"
+" (FTP) Tell curl to disable the use of the EPSV command when do-\n"
+" ing passive FTP transfers. Curl normally first attempts to use\n"
+" EPSV before PASV, but with this option, it does not try EPSV.\n"
"\n"
" --epsv can be used to explicitly enable EPSV again and --no-epsv\n"
" is an alias for --disable-epsv.\n"
"\n"
-" If the server is an IPv6 host, this option will have no effect\n"
-" as EPSV is necessary then.\n"
+" If the server is an IPv6 host, this option has no effect as EPSV\n"
+" is necessary then.\n"
"\n"
, stdout);
fputs(
" Disabling EPSV only changes the passive behavior. If you want to\n"
" switch to active mode you need to use -P, --ftp-port.\n"
"\n"
-" Providing --disable-epsv multiple times has no extra effect.\n"
+" Providing --disable-epsv multiple times has no extra effect.\n"
" Disable it again with --no-disable-epsv.\n"
"\n"
" Example:\n"
@@ -1215,21 +1327,24 @@ void hugehelp(void)
" -q, --disable\n"
, stdout);
fputs(
-" If used as the first parameter on the command line, the curlrc\n"
-" config file will not be read and used. See the --config for de-\n"
+" If used as the first parameter on the command line, the curlrc\n"
+" config file is not read or used. See the -K, --config for de-\n"
" tails on the default config file search path.\n"
"\n"
-" Providing --disable multiple times has no extra effect. Disable\n"
-" it again with --no-disable.\n"
+" Prior to 7.50.0 curl supported the short option name q but not\n"
+" the long option name disable.\n"
+"\n"
+" Providing -q, --disable multiple times has no extra effect.\n"
+" Disable it again with --no-disable.\n"
"\n"
" Example:\n"
+, stdout);
+ fputs(
" curl -q https://example.com\n"
"\n"
" See also -K, --config.\n"
"\n"
" --disallow-username-in-url\n"
-, stdout);
- fputs(
" (HTTP) This tells curl to exit if passed a URL containing a\n"
" username. This is probably most useful when the URL is being\n"
" provided at runtime or similar.\n"
@@ -1238,57 +1353,54 @@ void hugehelp(void)
" effect. Disable it again with --no-disallow-username-in-url.\n"
"\n"
" Example:\n"
-" curl --disallow-username-in-url https://example.com\n"
-"\n"
, stdout);
fputs(
+" curl --disallow-username-in-url https://example.com\n"
+"\n"
" See also --proto. Added in 7.61.0.\n"
"\n"
" --dns-interface <interface>\n"
-" (DNS) Tell curl to send outgoing DNS requests through <inter-\n"
-" face>. This option is a counterpart to --interface (which does\n"
-" not affect DNS). The supplied string must be an interface name\n"
+" (DNS) Tell curl to send outgoing DNS requests through <inter-\n"
+" face>. This option is a counterpart to --interface (which does\n"
+" not affect DNS). The supplied string must be an interface name\n"
" (not an address).\n"
"\n"
-" If --dns-interface is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
-" Example:\n"
, stdout);
fputs(
+" If --dns-interface is provided several times, the last set value\n"
+" is used.\n"
+" Example:\n"
" curl --dns-interface eth0 https://example.com\n"
"\n"
" See also --dns-ipv4-addr and --dns-ipv6-addr. --dns-interface\n"
" requires that the underlying libcurl was built to support c-\n"
-" ares. Added in 7.33.0.\n"
+" ares.\n"
"\n"
" --dns-ipv4-addr <address>\n"
-" (DNS) Tell curl to bind to <ip-address> when making IPv4 DNS re-\n"
-" quests, so that the DNS requests originate from this address.\n"
+" (DNS) Tell curl to bind to a specific IP address when making\n"
, stdout);
fputs(
-" The argument should be a single IPv4 address.\n"
+" IPv4 DNS requests, so that the DNS requests originate from this\n"
+" address. The argument should be a single IPv4 address.\n"
"\n"
" If --dns-ipv4-addr is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
+" is used.\n"
" Example:\n"
" curl --dns-ipv4-addr 10.1.2.3 https://example.com\n"
"\n"
-" See also --dns-interface and --dns-ipv6-addr. --dns-ipv4-addr\n"
-" requires that the underlying libcurl was built to support c-\n"
-" ares. Added in 7.33.0.\n"
-"\n"
-" --dns-ipv6-addr <address>\n"
+" See also --dns-interface and --dns-ipv6-addr. --dns-ipv4-addr\n"
+" requires that the underlying libcurl was built to support c-\n"
, stdout);
fputs(
-" (DNS) Tell curl to bind to <ip-address> when making IPv6 DNS re-\n"
-" quests, so that the DNS requests originate from this address.\n"
-" The argument should be a single IPv6 address.\n"
+" ares.\n"
"\n"
-" If --dns-ipv6-addr is provided several times, the last set value\n"
-" will be used.\n"
+" --dns-ipv6-addr <address>\n"
+" (DNS) Tell curl to bind to a specific IP address when making\n"
+" IPv6 DNS requests, so that the DNS requests originate from this\n"
+" address. The argument should be a single IPv6 address.\n"
"\n"
+" If --dns-ipv6-addr is provided several times, the last set value\n"
+" is used.\n"
" Example:\n"
" curl --dns-ipv6-addr 2a04:4e42::561 https://example.com\n"
"\n"
@@ -1296,32 +1408,30 @@ void hugehelp(void)
fputs(
" See also --dns-interface and --dns-ipv4-addr. --dns-ipv6-addr\n"
" requires that the underlying libcurl was built to support c-\n"
-" ares. Added in 7.33.0.\n"
+" ares.\n"
"\n"
" --dns-servers <addresses>\n"
" Set the list of DNS servers to be used instead of the system de-\n"
-" fault. The list of IP addresses should be separated with com-\n"
+" fault. The list of IP addresses should be separated with com-\n"
" mas. Port numbers may also optionally be given as :<port-number>\n"
-, stdout);
- fputs(
" after each IP address.\n"
"\n"
+, stdout);
+ fputs(
" If --dns-servers is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
+" is used.\n"
" Example:\n"
" curl --dns-servers 192.168.0.1,192.168.0.2 https://example.com\n"
"\n"
" See also --dns-interface and --dns-ipv4-addr. --dns-servers re-\n"
-" quires that the underlying libcurl was built to support c-ares.\n"
-" Added in 7.33.0.\n"
+" quires that the underlying libcurl was built to support c-ares.\n"
"\n"
" --doh-cert-status\n"
-, stdout);
- fputs(
" Same as --cert-status but used for DoH (DNS-over-HTTPS).\n"
"\n"
-" Providing --doh-cert-status multiple times has no extra effect.\n"
+, stdout);
+ fputs(
+" Providing --doh-cert-status multiple times has no extra effect.\n"
" Disable it again with --no-doh-cert-status.\n"
"\n"
" Example:\n"
@@ -1330,11 +1440,11 @@ void hugehelp(void)
" See also --doh-insecure. Added in 7.76.0.\n"
"\n"
" --doh-insecure\n"
-" Same as --insecure but used for DoH (DNS-over-HTTPS).\n"
+" Same as -k, --insecure but used for DoH (DNS-over-HTTPS).\n"
"\n"
+" Providing --doh-insecure multiple times has no extra effect.\n"
, stdout);
fputs(
-" Providing --doh-insecure multiple times has no extra effect.\n"
" Disable it again with --no-doh-insecure.\n"
"\n"
" Example:\n"
@@ -1343,90 +1453,96 @@ void hugehelp(void)
" See also --doh-url. Added in 7.76.0.\n"
"\n"
" --doh-url <URL>\n"
-" Specifies which DNS-over-HTTPS (DoH) server to use to resolve\n"
+" Specifies which DNS-over-HTTPS (DoH) server to use to resolve\n"
" hostnames, instead of using the default name resolver mechanism.\n"
-, stdout);
- fputs(
" The URL must be HTTPS.\n"
"\n"
-" Some SSL options that you set for your transfer will apply to\n"
+, stdout);
+ fputs(
+" Some SSL options that you set for your transfer also applies to\n"
" DoH since the name lookups take place over SSL. However, the\n"
-" certificate verification settings are not inherited and can be\n"
-" controlled separately via --doh-insecure and --doh-cert-status.\n"
+" certificate verification settings are not inherited but are con-\n"
+" trolled separately via --doh-insecure and --doh-cert-status.\n"
"\n"
-" This option is unset if an empty string \"\" is used as the URL.\n"
+" This option is unset if an empty string \"\" is used as the URL.\n"
" (Added in 7.85.0)\n"
"\n"
, stdout);
fputs(
-" If --doh-url is provided several times, the last set value will\n"
-" be used.\n"
+" If --doh-url is provided several times, the last set value is\n"
+" used.\n"
+"\n"
" Example:\n"
" curl --doh-url https://doh.example https://example.com\n"
"\n"
" See also --doh-insecure. Added in 7.62.0.\n"
"\n"
" -D, --dump-header <filename>\n"
-" (HTTP FTP) Write the received protocol headers to the specified\n"
-" file. If no headers are received, the use of this option will\n"
-" create an empty file.\n"
+" (HTTP FTP) Write the received protocol headers to the specified\n"
+" file. If no headers are received, the use of this option creates\n"
+" an empty file.\n"
"\n"
, stdout);
fputs(
" When used in FTP, the FTP server response lines are considered\n"
" being \"headers\" and thus are saved there.\n"
"\n"
-" If --dump-header is provided several times, the last set value\n"
-" will be used.\n"
+" Having multiple transfers in one set of operations (i.e. the\n"
+" URLs in one -:, --next clause), appends them to the same file,\n"
+" separated by a blank line.\n"
+"\n"
+" If -D, --dump-header is provided several times, the last set\n"
+" value is used.\n"
"\n"
" Example:\n"
+, stdout);
+ fputs(
" curl --dump-header store.txt https://example.com\n"
"\n"
" See also -o, --output.\n"
"\n"
" --egd-file <file>\n"
-" (TLS) Deprecated option. This option is ignored by curl since\n"
-, stdout);
- fputs(
-" 7.84.0. Prior to that it only had an effect on curl if built to\n"
-" use old versions of OpenSSL.\n"
+" (TLS) Deprecated option (added in 7.84.0). Prior to that it only\n"
+" had an effect on curl if built to use old versions of OpenSSL.\n"
"\n"
" Specify the path name to the Entropy Gathering Daemon socket.\n"
" The socket is used to seed the random engine for SSL connec-\n"
" tions.\n"
"\n"
-" If --egd-file is provided several times, the last set value will\n"
-" be used.\n"
+, stdout);
+ fputs(
+" If --egd-file is provided several times, the last set value is\n"
+" used.\n"
+"\n"
" Example:\n"
" curl --egd-file /random/here https://example.com\n"
"\n"
-, stdout);
- fputs(
" See also --random-file.\n"
"\n"
" --engine <name>\n"
" (TLS) Select the OpenSSL crypto engine to use for cipher opera-\n"
" tions. Use --engine list to print a list of build-time supported\n"
-" engines. Note that not all (and possibly none) of the engines\n"
+" engines. Note that not all (and possibly none) of the engines\n"
+, stdout);
+ fputs(
" may be available at runtime.\n"
"\n"
-" If --engine is provided several times, the last set value will\n"
-" be used.\n"
+" If --engine is provided several times, the last set value is\n"
+" used.\n"
+"\n"
" Example:\n"
-, stdout);
- fputs(
" curl --engine flavor https://example.com\n"
"\n"
" See also --ciphers and --curves.\n"
"\n"
" --etag-compare <file>\n"
" (HTTP) This option makes a conditional HTTP request for the spe-\n"
-" cific ETag read from the given file by sending a custom If-None-\n"
-" Match header using the stored ETag.\n"
-"\n"
-" For correct results, make sure that the specified file contains\n"
+" cific ETag read from the given file by sending a custom\n"
, stdout);
fputs(
+" If-None-Match header using the stored ETag.\n"
+"\n"
+" For correct results, make sure that the specified file contains\n"
" only a single line with the desired ETag. An empty file is\n"
" parsed as an empty ETag.\n"
"\n"
@@ -1434,12 +1550,11 @@ void hugehelp(void)
" sponse, and then use this option to compare against the saved\n"
" ETag in a subsequent request.\n"
"\n"
-" If --etag-compare is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
-" Example:\n"
, stdout);
fputs(
+" If --etag-compare is provided several times, the last set value\n"
+" is used.\n"
+" Example:\n"
" curl --etag-compare etag.txt https://example.com\n"
"\n"
" See also --etag-save and -z, --time-cond. Added in 7.68.0.\n"
@@ -1449,12 +1564,12 @@ void hugehelp(void)
" ETag is a caching related header, usually returned in a re-\n"
" sponse.\n"
"\n"
-" If no ETag is sent by the server, an empty file is created.\n"
-"\n"
-" If --etag-save is provided several times, the last set value\n"
, stdout);
fputs(
-" will be used.\n"
+" If no ETag is sent by the server, an empty file is created.\n"
+"\n"
+" If --etag-save is provided several times, the last set value is\n"
+" used.\n"
"\n"
" Example:\n"
" curl --etag-save storetag.txt https://example.com\n"
@@ -1463,50 +1578,55 @@ void hugehelp(void)
"\n"
" --expect100-timeout <seconds>\n"
" (HTTP) Maximum time in seconds that you allow curl to wait for a\n"
-" 100-continue response when curl emits an Expects: 100-continue\n"
-" header in its request. By default curl will wait one second.\n"
, stdout);
fputs(
-" This option accepts decimal values! When curl stops waiting, it\n"
-" will continue as if the response has been received.\n"
+" 100-continue response when curl emits an Expects: 100-continue\n"
+" header in its request. By default curl waits one second. This\n"
+" option accepts decimal values! When curl stops waiting, it con-\n"
+" tinues as if the response has been received.\n"
"\n"
-" If --expect100-timeout is provided several times, the last set\n"
-" value will be used.\n"
+" The decimal value needs to provided using a dot (.) as decimal\n"
+" separator - not the local version even if it might be using an-\n"
+" other separator.\n"
+"\n"
+, stdout);
+ fputs(
+" If --expect100-timeout is provided several times, the last set\n"
+" value is used.\n"
"\n"
" Example:\n"
" curl --expect100-timeout 2.5 -T file https://example.com\n"
"\n"
-" See also --connect-timeout. Added in 7.47.0.\n"
+" See also --connect-timeout.\n"
"\n"
" --fail-early\n"
-, stdout);
- fputs(
" Fail and exit on the first detected transfer error.\n"
"\n"
-" When curl is used to do multiple transfers on the command line,\n"
-" it will attempt to operate on each given URL, one by one. By de-\n"
-" fault, it will ignore errors if there are more URLs given and\n"
-" the last URL's success will determine the error code curl re-\n"
-" turns. So early failures will be \"hidden\" by subsequent success-\n"
-" ful transfers.\n"
+" When curl is used to do multiple transfers on the command line,\n"
+" it attempts to operate on each given URL, one by one. By de-\n"
+, stdout);
+ fputs(
+" fault, it ignores errors if there are more URLs given and the\n"
+" last URL's success determines the error code curl returns. So\n"
+" early failures are \"hidden\" by subsequent successful transfers.\n"
"\n"
+" Using this option, curl instead returns an error on the first\n"
+" transfer that fails, independent of the amount of URLs that are\n"
+" given on the command line. This way, no transfer failures go un-\n"
, stdout);
fputs(
-" Using this option, curl will instead return an error on the\n"
-" first transfer that fails, independent of the amount of URLs\n"
-" that are given on the command line. This way, no transfer fail-\n"
-" ures go undetected by scripts and similar.\n"
+" detected by scripts and similar.\n"
+"\n"
+" This option does not imply -f, --fail, which causes transfers to\n"
+" fail due to the server's HTTP status code. You can combine the\n"
+" two options, however note -f, --fail is not global and is there-\n"
+" fore contained by -:, --next.\n"
"\n"
" This option is global and does not need to be specified for each\n"
-" use of -:, --next.\n"
+" use of --next.\n"
"\n"
-" This option does not imply -f, --fail, which causes transfers to\n"
, stdout);
fputs(
-" fail due to the server's HTTP status code. You can combine the\n"
-" two options, however note --fail is not global and is therefore\n"
-" contained by -:, --next.\n"
-"\n"
" Providing --fail-early multiple times has no extra effect. Dis-\n"
" able it again with --no-fail-early.\n"
"\n"
@@ -1515,198 +1635,195 @@ void hugehelp(void)
"\n"
" See also -f, --fail and --fail-with-body. Added in 7.52.0.\n"
"\n"
+" --fail-with-body\n"
+" (HTTP) Return an error on server errors where the HTTP response\n"
+" code is 400 or greater). In normal cases when an HTTP server\n"
, stdout);
fputs(
-" --fail-with-body\n"
-" (HTTP) Return an error on server errors where the HTTP response\n"
-" code is 400 or greater). In normal cases when an HTTP server\n"
" fails to deliver a document, it returns an HTML document stating\n"
-" so (which often also describes why and more). This flag will\n"
-" still allow curl to output and save that content but also to re-\n"
-" turn error 22.\n"
+" so (which often also describes why and more). This flag allows\n"
+" curl to output and save that content but also to return error\n"
+" 22.\n"
"\n"
-, stdout);
- fputs(
-" This is an alternative option to --fail which makes curl fail\n"
-" for the same circumstances but without saving the content.\n"
+" This is an alternative option to -f, --fail which makes curl\n"
+" fail for the same circumstances but without saving the content.\n"
"\n"
" Providing --fail-with-body multiple times has no extra effect.\n"
+, stdout);
+ fputs(
" Disable it again with --no-fail-with-body.\n"
"\n"
" Example:\n"
" curl --fail-with-body https://example.com\n"
"\n"
-" See also -f, --fail. This option is mutually exclusive to -f,\n"
-" --fail. Added in 7.76.0.\n"
+" See also -f, --fail and --fail-early. This option is mutually\n"
+" exclusive to -f, --fail. Added in 7.76.0.\n"
"\n"
-, stdout);
- fputs(
" -f, --fail\n"
" (HTTP) Fail fast with no output at all on server errors. This is\n"
-" useful to enable scripts and users to better deal with failed\n"
+" useful to enable scripts and users to better deal with failed\n"
+, stdout);
+ fputs(
" attempts. In normal cases when an HTTP server fails to deliver a\n"
" document, it returns an HTML document stating so (which often\n"
-" also describes why and more). This flag will prevent curl from\n"
-" outputting that and return error 22.\n"
+" also describes why and more). This flag prevents curl from out-\n"
+" putting that and return error 22.\n"
"\n"
+" This method is not fail-safe and there are occasions where\n"
+" non-successful response codes slip through, especially when au-\n"
, stdout);
fputs(
-" This method is not fail-safe and there are occasions where non-\n"
-" successful response codes will slip through, especially when au-\n"
" thentication is involved (response codes 401 and 407).\n"
"\n"
-" Providing --fail multiple times has no extra effect. Disable it\n"
-" again with --no-fail.\n"
+" Providing -f, --fail multiple times has no extra effect. Dis-\n"
+" able it again with --no-fail.\n"
"\n"
" Example:\n"
" curl --fail https://example.com\n"
"\n"
-" See also --fail-with-body. This option is mutually exclusive to\n"
-, stdout);
- fputs(
-" --fail-with-body.\n"
+" See also --fail-with-body and --fail-early. This option is mutu-\n"
+" ally exclusive to --fail-with-body.\n"
"\n"
" --false-start\n"
-" (TLS) Tells curl to use false start during the TLS handshake.\n"
-" False start is a mode where a TLS client will start sending ap-\n"
-" plication data before verifying the server's Finished message,\n"
-" thus saving a round trip when performing a full handshake.\n"
-"\n"
-" This is currently only implemented in the NSS and Secure Trans-\n"
+" (TLS) Tells curl to use false start during the TLS handshake.\n"
, stdout);
fputs(
-" port (on iOS 7.0 or later, or OS X 10.9 or later) backends.\n"
+" False start is a mode where a TLS client starts sending applica-\n"
+" tion data before verifying the server's Finished message, thus\n"
+" saving a round trip when performing a full handshake.\n"
+"\n"
+" This is currently only implemented in the Secure Transport (on\n"
+" iOS 7.0 or later, or OS X 10.9 or later) backend.\n"
"\n"
" Providing --false-start multiple times has no extra effect.\n"
+, stdout);
+ fputs(
" Disable it again with --no-false-start.\n"
"\n"
" Example:\n"
" curl --false-start https://example.com\n"
"\n"
-" See also --tcp-fastopen. Added in 7.42.0.\n"
+" See also --tcp-fastopen.\n"
"\n"
" --form-escape\n"
" (HTTP) Tells curl to pass on names of multipart form fields and\n"
-, stdout);
- fputs(
" files using backslash-escaping instead of percent-encoding.\n"
"\n"
" If --form-escape is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
+" is used.\n"
" Example:\n"
+, stdout);
+ fputs(
" curl --form-escape -F 'field\\name=curl' -F 'file=@load\"this' https://example.com\n"
"\n"
" See also -F, --form. Added in 7.81.0.\n"
"\n"
" --form-string <name=string>\n"
-" (HTTP SMTP IMAP) Similar to --form except that the value string\n"
+" (HTTP SMTP IMAP) Similar to -F, --form except that the value\n"
+" string for the named parameter is used literally. Leading '@'\n"
+" and '<' characters, and the ';type=' string in the value have no\n"
, stdout);
fputs(
-" for the named parameter is used literally. Leading '@' and '<'\n"
-" characters, and the ';type=' string in the value have no special\n"
-" meaning. Use this in preference to --form if there's any possi-\n"
-" bility that the string value may accidentally trigger the '@' or\n"
-" '<' features of -F, --form.\n"
+" special meaning. Use this in preference to -F, --form if there\n"
+" is any possibility that the string value may accidentally trig-\n"
+" ger the '@' or '<' features of -F, --form.\n"
"\n"
" --form-string can be used several times in a command line\n"
"\n"
" Example:\n"
-, stdout);
- fputs(
" curl --form-string \"data\" https://example.com\n"
"\n"
" See also -F, --form.\n"
"\n"
" -F, --form <name=content>\n"
-" (HTTP SMTP IMAP) For HTTP protocol family, this lets curl emu-\n"
-" late a filled-in form in which a user has pressed the submit\n"
-" button. This causes curl to POST data using the Content-Type\n"
-" multipart/form-data according to RFC 2388.\n"
-"\n"
, stdout);
fputs(
+" (HTTP SMTP IMAP) For HTTP protocol family, this lets curl emu-\n"
+" late a filled-in form in which a user has pressed the submit\n"
+" button. This causes curl to POST data using the Content-Type\n"
+" multipart/form-data according to RFC 2388.\n"
+"\n"
" For SMTP and IMAP protocols, this is the means to compose a mul-\n"
" tipart mail message to transmit.\n"
"\n"
+, stdout);
+ fputs(
" This enables uploading of binary files etc. To force the 'con-\n"
" tent' part to be a file, prefix the file name with an @ sign. To\n"
" just get the content part from a file, prefix the file name with\n"
" the symbol <. The difference between @ and < is then that @\n"
-, stdout);
- fputs(
" makes a file get attached in the post as a file upload, while\n"
" the < makes a text field and just get the contents for that text\n"
+, stdout);
+ fputs(
" field from a file.\n"
"\n"
-" Tell curl to read content from stdin instead of a file by using\n"
+" Tell curl to read content from stdin instead of a file by using\n"
" - as filename. This goes for both @ and < constructs. When stdin\n"
" is used, the contents is buffered in memory first by curl to de-\n"
-, stdout);
- fputs(
-" termine its size and allow a possible resend. Defining a part's\n"
+" termine its size and allow a possible resend. Defining a part's\n"
" data from a named non-regular file (such as a named pipe or sim-\n"
-" ilar) is unfortunately not subject to buffering and will be ef-\n"
-" fectively read at transmission time; since the full size is un-\n"
-" known before the transfer starts, such data is sent as chunks by\n"
-" HTTP and rejected by IMAP.\n"
-"\n"
, stdout);
fputs(
+" ilar) is not subject to buffering and is instead read at trans-\n"
+" mission time; since the full size is unknown before the transfer\n"
+" starts, such data is sent as chunks by HTTP and rejected by\n"
+" IMAP.\n"
+"\n"
" Example: send an image to an HTTP server, where 'profile' is the\n"
-" name of the form-field to which the file portrait.jpg will be\n"
-" the input:\n"
+" name of the form-field to which the file portrait.jpg is the in-\n"
+" put:\n"
"\n"
+, stdout);
+ fputs(
" curl -F profile=@portrait.jpg https://example.com/upload.cgi\n"
"\n"
-" Example: send your name and shoe size in two text fields to the\n"
+" Example: send your name and shoe size in two text fields to the\n"
" server:\n"
"\n"
" curl -F name=John -F shoesize=11 https://example.com/\n"
"\n"
-, stdout);
- fputs(
-" Example: send your essay in a text field to the server. Send it\n"
-" as a plain text field, but get the contents for it from a local\n"
+" Example: send your essay in a text field to the server. Send it\n"
+" as a plain text field, but get the contents for it from a local\n"
" file:\n"
"\n"
" curl -F \"story=<hugefile.txt\" https://example.com/\n"
"\n"
-" You can also tell curl what Content-Type to use by using\n"
+, stdout);
+ fputs(
+" You can also tell curl what Content-Type to use by using\n"
" 'type=', in a manner similar to:\n"
"\n"
" curl -F \"web=@index.html;type=text/html\" example.com\n"
"\n"
" or\n"
"\n"
-, stdout);
- fputs(
" curl -F \"name=daniel;type=text/foo\" example.com\n"
"\n"
-" You can also explicitly change the name field of a file upload\n"
+" You can also explicitly change the name field of a file upload\n"
" part by setting filename=, like this:\n"
"\n"
" curl -F \"file=@localfile;filename=nameinpost\" example.com\n"
"\n"
-" If filename/path contains ',' or ';', it must be quoted by dou-\n"
+, stdout);
+ fputs(
+" If filename/path contains ',' or ';', it must be quoted by dou-\n"
" ble-quotes like:\n"
"\n"
" curl -F \"file=@\\\"local,file\\\";filename=\\\"name;in;post\\\"\" example.com\n"
"\n"
" or\n"
"\n"
-, stdout);
- fputs(
" curl -F 'file=@\"local,file\";filename=\"name;in;post\"' example.com\n"
-" Note that if a filename/path is quoted by double-quotes, any\n"
+" Note that if a filename/path is quoted by double-quotes, any\n"
" double-quote or backslash within the filename must be escaped by\n"
" backslash.\n"
"\n"
+, stdout);
+ fputs(
" Quoting must also be applied to non-file data if it contains\n"
" semicolons, leading/trailing spaces or leading double quotes:\n"
"\n"
-, stdout);
- fputs(
" curl -F 'colors=\"red; green; blue\";type=text/x-myapp' example.com\n"
"\n"
" You can add custom headers to the field by setting headers=,\n"
@@ -1716,21 +1833,21 @@ void hugehelp(void)
"\n"
" or\n"
"\n"
+, stdout);
+ fputs(
" curl -F \"submit=OK;headers=@headerfile\" example.com\n"
"\n"
" The headers= keyword may appear more that once and above notes\n"
-, stdout);
- fputs(
" about quoting apply. When headers are read from a file, Empty\n"
" lines and lines starting with '#' are comments and ignored; each\n"
" header can be folded by splitting between two words and starting\n"
" the continuation line with a space; embedded carriage-returns\n"
+, stdout);
+ fputs(
" and trailing spaces are stripped. Here is an example of a\n"
" header file contents:\n"
"\n"
" # This file contain two headers.\n"
-, stdout);
- fputs(
" X-header-1: this is a header\n"
"\n"
" # The following header is folded.\n"
@@ -1739,31 +1856,31 @@ void hugehelp(void)
"\n"
" To support sending multipart mail messages, the syntax is ex-\n"
" tended as follows:\n"
+, stdout);
+ fputs(
" - name can be omitted: the equal sign is the first character of\n"
" the argument,\n"
" - if data starts with '(', this signals to start a new multi-\n"
-, stdout);
- fputs(
" part: it can be followed by a content type specification.\n"
" - a multipart can be terminated with a '=)' argument.\n"
"\n"
" Example: the following command sends an SMTP mime email consist-\n"
" ing in an inline part in two alternative formats: plain text and\n"
+, stdout);
+ fputs(
" HTML. It attaches a text file:\n"
"\n"
" curl -F '=(;type=multipart/alternative' \\\n"
" -F '=plain text message' \\\n"
-, stdout);
- fputs(
" -F '= <body>HTML message</body>;type=text/html' \\\n"
" -F '=)' -F '=@textfile.txt' ... smtp://example.com\n"
"\n"
" Data can be encoded for transfer using encoder=. Available en-\n"
" codings are binary and 8bit that do nothing else than adding the\n"
-" corresponding Content-Transfer-Encoding header, 7bit that only\n"
-" rejects 8-bit characters with a transfer error, quoted-printable\n"
, stdout);
fputs(
+" corresponding Content-Transfer-Encoding header, 7bit that only\n"
+" rejects 8-bit characters with a transfer error, quoted-printable\n"
" and base64 that encodes data according to the corresponding\n"
" schemes, limiting lines length to 76 characters.\n"
"\n"
@@ -1771,122 +1888,123 @@ void hugehelp(void)
" sage and a base64 attached file:\n"
"\n"
" curl -F '=text message;encoder=quoted-printable' \\\n"
+, stdout);
+ fputs(
" -F '=@localfile;encoder=base64' ... smtp://example.com\n"
"\n"
" See further examples and details in the MANUAL.\n"
"\n"
-, stdout);
- fputs(
-" --form can be used several times in a command line\n"
+" -F, --form can be used several times in a command line\n"
"\n"
" Example:\n"
" curl --form \"name=curl\" --form \"file=@loadthis\" https://example.com\n"
"\n"
" See also -d, --data, --form-string and --form-escape. This op-\n"
" tion is mutually exclusive to -d, --data and -I, --head and -T,\n"
+, stdout);
+ fputs(
" --upload-file.\n"
"\n"
" --ftp-account <data>\n"
" (FTP) When an FTP server asks for \"account data\" after user name\n"
-, stdout);
- fputs(
-" and password has been provided, this data is sent off using the\n"
+" and password has been provided, this data is sent off using the\n"
" ACCT command.\n"
"\n"
-" If --ftp-account is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
+" If --ftp-account is provided several times, the last set value\n"
+" is used.\n"
" Example:\n"
" curl --ftp-account \"mr.robot\" ftp://example.com/\n"
"\n"
" See also -u, --user.\n"
"\n"
-" --ftp-alternative-to-user <command>\n"
-" (FTP) If authenticating with the USER and PASS commands fails,\n"
, stdout);
fputs(
-" send this command. When connecting to Tumbleweed's Secure\n"
-" Transport server over FTPS using a client certificate, using\n"
-" \"SITE AUTH\" will tell the server to retrieve the username from\n"
-" the certificate.\n"
+" --ftp-alternative-to-user <command>\n"
+" (FTP) If authenticating with the USER and PASS commands fails,\n"
+" send this command. When connecting to Tumbleweed's Secure\n"
+" Transport server over FTPS using a client certificate, using\n"
+" \"SITE AUTH\" tells the server to retrieve the username from the\n"
+" certificate.\n"
"\n"
" If --ftp-alternative-to-user is provided several times, the last\n"
-" set value will be used.\n"
+" set value is used.\n"
"\n"
+, stdout);
+ fputs(
" Example:\n"
" curl --ftp-alternative-to-user \"U53r\" ftp://example.com\n"
"\n"
-, stdout);
- fputs(
" See also --ftp-account and -u, --user.\n"
"\n"
" --ftp-create-dirs\n"
" (FTP SFTP) When an FTP or SFTP URL/operation uses a path that\n"
" does not currently exist on the server, the standard behavior of\n"
-" curl is to fail. Using this option, curl will instead attempt to\n"
+" curl is to fail. Using this option, curl instead attempts to\n"
" create missing directories.\n"
"\n"
-" Providing --ftp-create-dirs multiple times has no extra effect.\n"
-" Disable it again with --no-ftp-create-dirs.\n"
-"\n"
, stdout);
fputs(
+" Providing --ftp-create-dirs multiple times has no extra effect.\n"
+" Disable it again with --no-ftp-create-dirs.\n"
+"\n"
" Example:\n"
" curl --ftp-create-dirs -T file ftp://example.com/remote/path/file\n"
"\n"
" See also --create-dirs.\n"
"\n"
" --ftp-method <method>\n"
-" (FTP) Control what method curl should use to reach a file on an\n"
-" FTP(S) server. The method argument should be one of the follow-\n"
+" (FTP) Control what method curl should use to reach a file on an\n"
+" FTP(S) server. The method argument should be one of the follow-\n"
+, stdout);
+ fputs(
" ing alternatives:\n"
"\n"
" multicwd\n"
-" curl does a single CWD operation for each path part in\n"
-, stdout);
- fputs(
-" the given URL. For deep hierarchies this means many com-\n"
-" mands. This is how RFC 1738 says it should be done. This\n"
+" curl does a single CWD operation for each path part in\n"
+" the given URL. For deep hierarchies this means many com-\n"
+" mands. This is how RFC 1738 says it should be done. This\n"
" is the default but the slowest behavior.\n"
"\n"
-" nocwd curl does no CWD at all. curl will do SIZE, RETR, STOR\n"
-" etc and give a full path to the server for all these com-\n"
+" nocwd curl does no CWD at all. curl does SIZE, RETR, STOR etc\n"
+, stdout);
+ fputs(
+" and give a full path to the server for all these com-\n"
" mands. This is the fastest behavior.\n"
"\n"
" singlecwd\n"
-, stdout);
- fputs(
" curl does one CWD with the full target directory and then\n"
" operates on the file \"normally\" (like in the multicwd\n"
" case). This is somewhat more standards compliant than\n"
" 'nocwd' but without the full penalty of 'multicwd'.\n"
"\n"
-" If --ftp-method is provided several times, the last set value will be\n"
-" used.\n"
-"\n"
-" Examples:\n"
-" curl --ftp-method multicwd ftp://example.com/dir1/dir2/file\n"
, stdout);
fputs(
-" curl --ftp-method nocwd ftp://example.com/dir1/dir2/file\n"
-" curl --ftp-method singlecwd ftp://example.com/dir1/dir2/file\n"
+" If --ftp-method is provided several times, the last set value is\n"
+" used.\n"
+"\n"
+" Examples:\n"
+" curl --ftp-method multicwd ftp://example.com/dir1/dir2/file\n"
+" curl --ftp-method nocwd ftp://example.com/dir1/dir2/file\n"
+" curl --ftp-method singlecwd ftp://example.com/dir1/dir2/file\n"
"\n"
-" See also -l, --list-only.\n"
+" See also -l, --list-only.\n"
"\n"
" --ftp-pasv\n"
-" (FTP) Use passive mode for the data connection. Passive is the\n"
-" internal default behavior, but using this option can be used to\n"
-" override a previous --ftp-port option.\n"
-"\n"
-" Reversing an enforced passive really is not doable but you must\n"
+" (FTP) Use passive mode for the data connection. Passive is the\n"
, stdout);
fputs(
-" then instead enforce the correct --ftp-port again.\n"
+" internal default behavior, but using this option can be used to\n"
+" override a previous -P, --ftp-port option.\n"
+"\n"
+" Reversing an enforced passive really is not doable but you must\n"
+" then instead enforce the correct -P, --ftp-port again.\n"
"\n"
-" Passive mode means that curl will try the EPSV command first and\n"
+" Passive mode means that curl tries the EPSV command first and\n"
" then PASV, unless --disable-epsv is used.\n"
"\n"
-" Providing --ftp-pasv multiple times has no extra effect. Dis-\n"
+, stdout);
+ fputs(
+" Providing --ftp-pasv multiple times has no extra effect. Dis-\n"
" able it again with --no-ftp-pasv.\n"
"\n"
" Example:\n"
@@ -1894,22 +2012,22 @@ void hugehelp(void)
"\n"
" See also --disable-epsv.\n"
" -P, --ftp-port <address>\n"
+" (FTP) Reverses the default initiator/listener roles when con-\n"
+" necting with FTP. This option makes curl use active mode. curl\n"
, stdout);
fputs(
-" (FTP) Reverses the default initiator/listener roles when con-\n"
-" necting with FTP. This option makes curl use active mode. curl\n"
-" then tells the server to connect back to the client's specified\n"
+" then tells the server to connect back to the client's specified\n"
" address and port, while passive mode asks the server to setup an\n"
" IP address and port for it to connect to. <address> should be\n"
" one of:\n"
"\n"
" interface\n"
-, stdout);
- fputs(
" e.g. \"eth0\" to specify which interface's IP address you\n"
" want to use (Unix only)\n"
"\n"
" IP address\n"
+, stdout);
+ fputs(
" e.g. \"192.168.10.1\" to specify the exact IP address\n"
"\n"
" host name\n"
@@ -1918,38 +2036,38 @@ void hugehelp(void)
" - make curl pick the same IP address that is already used\n"
" for the control connection\n"
"\n"
-, stdout);
- fputs(
-" Disable the use of PORT with --ftp-pasv. Disable the attempt to use the\n"
-" EPRT command instead of PORT by using --disable-eprt. EPRT is really\n"
-" PORT++.\n"
+" Disable the use of PORT with --ftp-pasv. Disable the attempt to\n"
+" use the EPRT command instead of PORT by using --disable-eprt.\n"
+" EPRT is really PORT++.\n"
"\n"
-" You can also append \":[start]-[end]\" to the right of the address, to\n"
-" tell curl what TCP port range to use. That means you specify a port\n"
-" range, from a lower to a higher number. A single number works as well,\n"
-" but do note that it increases the risk of failure since the port may\n"
, stdout);
fputs(
-" not be available.\n"
+" You can also append \":[start]-[end]\" to the right of the ad-\n"
+" dress, to tell curl what TCP port range to use. That means you\n"
+" specify a port range, from a lower to a higher number. A single\n"
+" number works as well, but do note that it increases the risk of\n"
+" failure since the port may not be available.\n"
"\n"
-" If --ftp-port is provided several times, the last set value will be\n"
-" used.\n"
+" If -P, --ftp-port is provided several times, the last set value\n"
+" is used.\n"
"\n"
-" Examples:\n"
-" curl -P - ftp:/example.com\n"
-" curl -P eth0 ftp:/example.com\n"
-" curl -P 192.168.0.2 ftp:/example.com\n"
+, stdout);
+ fputs(
+" Examples:\n"
+" curl -P - ftp:/example.com\n"
+" curl -P eth0 ftp:/example.com\n"
+" curl -P 192.168.0.2 ftp:/example.com\n"
"\n"
-" See also --ftp-pasv and --disable-eprt.\n"
+" See also --ftp-pasv and --disable-eprt.\n"
"\n"
" --ftp-pret\n"
" (FTP) Tell curl to send a PRET command before PASV (and EPSV).\n"
" Certain FTP servers, mainly drftpd, require this non-standard\n"
-, stdout);
- fputs(
" command for directory listings as well as up and downloads in\n"
" PASV mode.\n"
"\n"
+, stdout);
+ fputs(
" Providing --ftp-pret multiple times has no extra effect. Dis-\n"
" able it again with --no-ftp-pret.\n"
"\n"
@@ -1960,35 +2078,35 @@ void hugehelp(void)
"\n"
" --ftp-skip-pasv-ip\n"
" (FTP) Tell curl to not use the IP address the server suggests in\n"
+" its response to curl's PASV command when curl connects the data\n"
, stdout);
fputs(
-" its response to curl's PASV command when curl connects the data\n"
-" connection. Instead curl will re-use the same IP address it al-\n"
-" ready uses for the control connection.\n"
+" connection. Instead curl reuses the same IP address it already\n"
+" uses for the control connection.\n"
"\n"
-" Since curl 7.74.0 this option is enabled by default.\n"
+" This option is enabled by default (added in 7.74.0).\n"
"\n"
-" This option has no effect if PORT, EPRT or EPSV is used instead\n"
+" This option has no effect if PORT, EPRT or EPSV is used instead\n"
" of PASV.\n"
"\n"
" Providing --ftp-skip-pasv-ip multiple times has no extra effect.\n"
-, stdout);
- fputs(
" Disable it again with --no-ftp-skip-pasv-ip.\n"
"\n"
" Example:\n"
+, stdout);
+ fputs(
" curl --ftp-skip-pasv-ip ftp://example.com/\n"
"\n"
" See also --ftp-pasv.\n"
"\n"
" --ftp-ssl-ccc-mode <active/passive>\n"
-" (FTP) Sets the CCC mode. The passive mode will not initiate the\n"
-" shutdown, but instead wait for the server to do it, and will not\n"
-" reply to the shutdown from the server. The active mode initiates\n"
+" (FTP) Sets the CCC mode. The passive mode does not initiate the\n"
+" shutdown, but instead waits for the server to do it, and does\n"
+" not reply to the shutdown from the server. The active mode ini-\n"
+" tiates the shutdown and waits for a reply from the server.\n"
+"\n"
, stdout);
fputs(
-" the shutdown and waits for a reply from the server.\n"
-"\n"
" Providing --ftp-ssl-ccc-mode multiple times has no extra effect.\n"
" Disable it again with --no-ftp-ssl-ccc-mode.\n"
"\n"
@@ -1998,12 +2116,12 @@ void hugehelp(void)
" See also --ftp-ssl-ccc.\n"
"\n"
" --ftp-ssl-ccc\n"
-" (FTP) Use CCC (Clear Command Channel) Shuts down the SSL/TLS\n"
+" (FTP) Use CCC (Clear Command Channel) Shuts down the SSL/TLS\n"
+" layer after authenticating. The rest of the control channel com-\n"
, stdout);
fputs(
-" layer after authenticating. The rest of the control channel com-\n"
-" munication will be unencrypted. This allows NAT routers to fol-\n"
-" low the FTP transaction. The default mode is passive.\n"
+" munication is be unencrypted. This allows NAT routers to follow\n"
+" the FTP transaction. The default mode is passive.\n"
"\n"
" Providing --ftp-ssl-ccc multiple times has no extra effect.\n"
" Disable it again with --no-ftp-ssl-ccc.\n"
@@ -2012,9 +2130,9 @@ void hugehelp(void)
" curl --ftp-ssl-ccc ftps://example.com/\n"
" See also --ssl and --ftp-ssl-ccc-mode.\n"
"\n"
+" --ftp-ssl-control\n"
, stdout);
fputs(
-" --ftp-ssl-control\n"
" (FTP) Require SSL/TLS for the FTP login, clear for transfer.\n"
" Allows secure authentication, but non-encrypted data transfers\n"
" for efficiency. Fails the transfer if the server does not sup-\n"
@@ -2024,24 +2142,25 @@ void hugehelp(void)
" Disable it again with --no-ftp-ssl-control.\n"
"\n"
" Example:\n"
-, stdout);
- fputs(
" curl --ftp-ssl-control ftp://example.com\n"
"\n"
+, stdout);
+ fputs(
" See also --ssl.\n"
"\n"
" -G, --get\n"
-" When used, this option will make all data specified with -d,\n"
-" --data, --data-binary or --data-urlencode to be used in an HTTP\n"
-" GET request instead of the POST request that otherwise would be\n"
-" used. The data will be appended to the URL with a '?' separator.\n"
-" If used in combination with -I, --head, the POST data will in-\n"
+" When used, this option makes all data specified with -d, --data,\n"
+" --data-binary or --data-urlencode to be used in an HTTP GET re-\n"
+" quest instead of the POST request that otherwise would be used.\n"
+" The data is appended to the URL with a '?' separator.\n"
+"\n"
+" If used in combination with -I, --head, the POST data is instead\n"
+" appended to the URL with a HEAD request.\n"
+"\n"
, stdout);
fputs(
-" stead be appended to the URL with a HEAD request.\n"
-"\n"
-" Providing --get multiple times has no extra effect. Disable it\n"
-" again with --no-get.\n"
+" Providing -G, --get multiple times has no extra effect. Disable\n"
+" it again with --no-get.\n"
"\n"
" Examples:\n"
" curl --get https://example.com\n"
@@ -2051,22 +2170,22 @@ void hugehelp(void)
" See also -d, --data and -X, --request.\n"
"\n"
" -g, --globoff\n"
+" This option switches off the \"URL globbing parser\". When you set\n"
, stdout);
fputs(
-" This option switches off the \"URL globbing parser\". When you set\n"
" this option, you can specify URLs that contain the letters {}[]\n"
" without having curl itself interpret them. Note that these let-\n"
" ters are not normal legal URL contents but they should be en-\n"
" coded according to the URI standard.\n"
"\n"
-" Providing --globoff multiple times has no extra effect. Disable\n"
-" it again with --no-globoff.\n"
+" Providing -g, --globoff multiple times has no extra effect.\n"
+" Disable it again with --no-globoff.\n"
"\n"
-, stdout);
- fputs(
" Example:\n"
" curl -g \"https://example.com/{[]}}}}\"\n"
"\n"
+, stdout);
+ fputs(
" See also -K, --config and -q, --disable.\n"
"\n"
" --happy-eyeballs-timeout-ms <milliseconds>\n"
@@ -2088,28 +2207,66 @@ void hugehelp(void)
" currently default to 300 ms.\n"
"\n"
" If --happy-eyeballs-timeout-ms is provided several times, the\n"
-" last set value will be used.\n"
+" last set value is used.\n"
"\n"
" Example:\n"
" curl --happy-eyeballs-timeout-ms 500 https://example.com\n"
"\n"
" See also -m, --max-time and --connect-timeout. Added in 7.59.0.\n"
"\n"
+" --haproxy-clientip\n"
+" (HTTP) Sets a client IP in HAProxy PROXY protocol v1 header at\n"
+" the beginning of the connection.\n"
+"\n"
+, stdout);
+ fputs(
+" For valid requests, IPv4 addresses must be indicated as a series\n"
+" of exactly 4 integers in the range [0..255] inclusive written in\n"
+" decimal representation separated by exactly one dot between each\n"
+" other. Heading zeroes are not permitted in front of numbers in\n"
+" order to avoid any possible confusion with octal numbers. IPv6\n"
+" addresses must be indicated as series of 4 hexadecimal digits\n"
+, stdout);
+ fputs(
+" (upper or lower case) delimited by colons between each other,\n"
+" with the acceptance of one double colon sequence to replace the\n"
+" largest acceptable range of consecutive zeroes. The total number\n"
+" of decoded bits must exactly be 128.\n"
+"\n"
+" Otherwise, any string can be accepted for the client IP and get\n"
+" sent.\n"
+"\n"
+" It replaces --haproxy-protocol if used, it is not necessary to\n"
+, stdout);
+ fputs(
+" specify both flags.\n"
+"\n"
+" This option is primarily useful when sending test requests to\n"
+" verify a service is working as intended.\n"
+"\n"
+" If --haproxy-clientip is provided several times, the last set\n"
+" value is used.\n"
+"\n"
+" Example:\n"
+" curl --haproxy-clientip $IP\n"
+"\n"
+" See also -x, --proxy. Added in 8.2.0.\n"
+"\n"
" --haproxy-protocol\n"
-" (HTTP) Send a HAProxy PROXY protocol v1 header at the beginning\n"
, stdout);
fputs(
+" (HTTP) Send a HAProxy PROXY protocol v1 header at the beginning\n"
" of the connection. This is used by some load balancers and re-\n"
" verse proxies to indicate the client's true IP address and port.\n"
" This option is primarily useful when sending test requests to a\n"
" service that expects this header.\n"
"\n"
" Providing --haproxy-protocol multiple times has no extra effect.\n"
+, stdout);
+ fputs(
" Disable it again with --no-haproxy-protocol.\n"
"\n"
" Example:\n"
-, stdout);
- fputs(
" curl --haproxy-protocol https://example.com\n"
"\n"
" See also -x, --proxy. Added in 7.60.0.\n"
@@ -2118,12 +2275,12 @@ void hugehelp(void)
" (HTTP FTP FILE) Fetch the headers only! HTTP-servers feature the\n"
" command HEAD which this uses to get nothing but the header of a\n"
" document. When used on an FTP or FILE file, curl displays the\n"
-" file size and last modification time only.\n"
-"\n"
, stdout);
fputs(
-" Providing --head multiple times has no extra effect. Disable it\n"
-" again with --no-head.\n"
+" file size and last modification time only.\n"
+"\n"
+" Providing -I, --head multiple times has no extra effect. Dis-\n"
+" able it again with --no-head.\n"
"\n"
" Example:\n"
" curl -I https://example.com\n"
@@ -2132,140 +2289,153 @@ void hugehelp(void)
"\n"
" -H, --header <header/@file>\n"
" (HTTP IMAP SMTP) Extra header to include in information sent.\n"
+, stdout);
+ fputs(
" When used within an HTTP request, it is added to the regular re-\n"
" quest headers.\n"
"\n"
-, stdout);
- fputs(
-" For an IMAP or SMTP MIME uploaded mail built with --form op-\n"
+" For an IMAP or SMTP MIME uploaded mail built with -F, --form op-\n"
" tions, it is prepended to the resulting MIME document, effec-\n"
" tively including it at the mail global level. It does not affect\n"
" raw uploaded mails (Added in 7.56.0).\n"
"\n"
-" You may specify any number of extra headers. Note that if you\n"
-" should add a custom header that has the same name as one of the\n"
+" You may specify any number of extra headers. Note that if you\n"
, stdout);
fputs(
-" internal ones curl would use, your externally set header will be\n"
-" used instead of the internal one. This allows you to make even\n"
-" trickier stuff than curl would normally do. You should not re-\n"
-" place internally set headers without knowing perfectly well what\n"
-" you are doing. Remove an internal header by giving a replacement\n"
-" without content on the right side of the colon, as in: -H\n"
+" should add a custom header that has the same name as one of the\n"
+" internal ones curl would use, your externally set header is used\n"
+" instead of the internal one. This allows you to make even trick-\n"
+" ier stuff than curl would normally do. You should not replace\n"
+" internally set headers without knowing perfectly well what you\n"
+" are doing. Remove an internal header by giving a replacement\n"
, stdout);
fputs(
-" \"Host:\". If you send the custom header with no-value then its\n"
-" header must be terminated with a semicolon, such as -H \"X-Cus-\n"
+" without content on the right side of the colon, as in: -H\n"
+" \"Host:\". If you send the custom header with no-value then its\n"
+" header must be terminated with a semicolon, such as -H \"X-Cus-\n"
" tom-Header;\" to send \"X-Custom-Header:\".\n"
"\n"
-" curl will make sure that each header you add/replace is sent\n"
-" with the proper end-of-line marker, you should thus not add that\n"
-" as a part of the header content: do not add newlines or carriage\n"
+" curl makes sure that each header you add/replace is sent with\n"
+" the proper end-of-line marker, you should thus not add that as a\n"
, stdout);
fputs(
-" returns, they will only mess things up for you.\n"
+" part of the header content: do not add newlines or carriage re-\n"
+" turns, they only mess things up for you. curl passes on the ver-\n"
+" batim string you give it without any filter or other safe\n"
+" guards. That includes white space and control characters.\n"
"\n"
-" This option can take an argument in @filename style, which then\n"
-" adds a header for each line in the input file. Using @- will\n"
-" make curl read the header file from stdin. Added in 7.55.0.\n"
+" This option can take an argument in @filename style, which then\n"
+" adds a header for each line in the input file. Using @- makes\n"
+, stdout);
+ fputs(
+" curl read the header file from stdin. Added in 7.55.0.\n"
"\n"
" Please note that most anti-spam utilities check the presence and\n"
" value of several MIME mail headers: these are \"From:\", \"To:\",\n"
-, stdout);
- fputs(
" \"Date:\" and \"Subject:\" among others and should be added with\n"
" this option.\n"
"\n"
" You need --proxy-header to send custom headers intended for an\n"
" HTTP proxy. Added in 7.37.0.\n"
"\n"
+, stdout);
+ fputs(
" Passing on a \"Transfer-Encoding: chunked\" header when doing an\n"
-" HTTP request with a request body, will make curl send the data\n"
-" using chunked encoding.\n"
+" HTTP request with a request body, makes curl send the data using\n"
+" chunked encoding.\n"
"\n"
+" WARNING: headers set with this option are set in all HTTP re-\n"
+" quests - even after redirects are followed, like when told with\n"
+" -L, --location. This can lead to the header being sent to other\n"
, stdout);
fputs(
-" WARNING: headers set with this option will be set in all HTTP\n"
-" requests - even after redirects are followed, like when told\n"
-" with -L, --location. This can lead to the header being sent to\n"
-" other hosts than the original host, so sensitive headers should\n"
-" be used with caution combined with following redirects.\n"
+" hosts than the original host, so sensitive headers should be\n"
+" used with caution combined with following redirects.\n"
"\n"
-" --header can be used several times in a command line\n"
+" -H, --header can be used several times in a command line\n"
"\n"
" Examples:\n"
-, stdout);
- fputs(
" curl -H \"X-First-Name: Joe\" https://example.com\n"
" curl -H \"User-Agent: yes-please/2000\" https://example.com\n"
" curl -H \"Host:\" https://example.com\n"
+" curl -H @headers.txt https://example.com\n"
"\n"
+, stdout);
+ fputs(
" See also -A, --user-agent and -e, --referer.\n"
"\n"
" -h, --help <category>\n"
-" Usage help. This lists all commands of the <category>. If no\n"
-" arg was provided, curl will display the most important command\n"
-, stdout);
- fputs(
-" line arguments. If the argument \"all\" was provided, curl will\n"
-" display all options available. If the argument \"category\" was\n"
-" provided, curl will display all categories and their meanings.\n"
+" Usage help. This lists all curl command line options within the\n"
+" given category.\n"
+"\n"
+" If no argument is provided, curl displays only the most impor-\n"
+" tant command line arguments.\n"
+"\n"
+" For category all, curl displays help for all options.\n"
"\n"
-" Providing --help multiple times has no extra effect. Disable it\n"
-" again with --no-help.\n"
+" If category is specified, curl displays all available help cate-\n"
+" gories.\n"
"\n"
+, stdout);
+ fputs(
" Example:\n"
" curl --help all\n"
"\n"
" See also -v, --verbose.\n"
"\n"
" --hostpubmd5 <md5>\n"
-, stdout);
- fputs(
" (SFTP SCP) Pass a string containing 32 hexadecimal digits. The\n"
" string should be the 128 bit MD5 checksum of the remote host's\n"
-" public key, curl will refuse the connection with the host unless\n"
-" the md5sums match.\n"
+" public key, curl refuses the connection with the host unless the\n"
+" md5sums match.\n"
"\n"
-" If --hostpubmd5 is provided several times, the last set value\n"
-" will be used.\n"
+" If --hostpubmd5 is provided several times, the last set value is\n"
+" used.\n"
"\n"
+, stdout);
+ fputs(
" Example:\n"
" curl --hostpubmd5 e5c1c49020640a5ab0f2034854c321a8 sftp://example.com/\n"
"\n"
-, stdout);
- fputs(
" See also --hostpubsha256.\n"
"\n"
" --hostpubsha256 <sha256>\n"
" (SFTP SCP) Pass a string containing a Base64-encoded SHA256 hash\n"
-" of the remote host's public key. Curl will refuse the connection\n"
+" of the remote host's public key. Curl refuses the connection\n"
" with the host unless the hashes match.\n"
"\n"
-" If --hostpubsha256 is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
-" Example:\n"
+" This feature requires libcurl to be built with libssh2 and does\n"
, stdout);
fputs(
+" not work with other SSH backends.\n"
+"\n"
+" If --hostpubsha256 is provided several times, the last set value\n"
+" is used.\n"
+" Example:\n"
" curl --hostpubsha256 NDVkMTQxMGQ1ODdmMjQ3MjczYjAyOTY5MmRkMjVmNDQ= sftp://example.com/\n"
"\n"
" See also --hostpubmd5. Added in 7.80.0.\n"
"\n"
" --hsts <file name>\n"
-" (HTTPS) This option enables HSTS for the transfer. If the file\n"
-" name points to an existing HSTS cache file, that will be used.\n"
-" After a completed transfer, the cache will be saved to the file\n"
-" name again if it has been modified.\n"
+" (HTTPS) This option enables HSTS for the transfer. If the file\n"
+, stdout);
+ fputs(
+" name points to an existing HSTS cache file, that is used. After\n"
+" a completed transfer, the cache is saved to the file name again\n"
+" if it has been modified.\n"
+"\n"
+" If curl is told to use HTTP:// for a transfer involving a host\n"
+" name that exists in the HSTS cache, it upgrades the transfer to\n"
+" use HTTPS. Each HSTS cache entry has an individual life time af-\n"
+" ter which the upgrade is no longer performed.\n"
"\n"
, stdout);
fputs(
" Specify a \"\" file name (zero length) to avoid loading/saving and\n"
" make curl just handle HSTS in memory.\n"
"\n"
-" If this option is used several times, curl will load contents\n"
-" from all the files but the last one will be used for saving.\n"
-"\n"
+" If this option is used several times, curl loads contents from\n"
+" all the files but the last one is used for saving.\n"
" --hsts can be used several times in a command line\n"
"\n"
" Example:\n"
@@ -2273,23 +2443,22 @@ void hugehelp(void)
"\n"
" See also --proto. Added in 7.74.0.\n"
"\n"
+" --http0.9\n"
, stdout);
fputs(
-" --http0.9\n"
" (HTTP) Tells curl to be fine with HTTP version 0.9 response.\n"
"\n"
-" HTTP/0.9 is a completely headerless response and therefore you\n"
-" can also connect with this to non-HTTP servers and still get a\n"
-" response since curl will simply transparently downgrade - if al-\n"
-" lowed.\n"
+" HTTP/0.9 is a response without headers and therefore you can\n"
+" also connect with this to non-HTTP servers and still get a re-\n"
+" sponse since curl simply transparently downgrades - if allowed.\n"
"\n"
-" Since curl 7.66.0, HTTP/0.9 is disabled by default.\n"
+" HTTP/0.9 is disabled by default (added in 7.66.0)\n"
"\n"
" Providing --http0.9 multiple times has no extra effect. Disable\n"
-, stdout);
- fputs(
" it again with --no-http0.9.\n"
"\n"
+, stdout);
+ fputs(
" Example:\n"
" curl --http0.9 https://example.com\n"
"\n"
@@ -2299,7 +2468,7 @@ void hugehelp(void)
" (HTTP) Tells curl to use HTTP version 1.0 instead of using its\n"
" internally preferred HTTP version.\n"
"\n"
-" Providing --http1.0 multiple times has no extra effect.\n"
+" Providing -0, --http1.0 multiple times has no extra effect.\n"
"\n"
" Example:\n"
" curl --http1.0 https://example.com\n"
@@ -2307,7 +2476,7 @@ void hugehelp(void)
, stdout);
fputs(
" See also --http0.9 and --http1.1. This option is mutually exclu-\n"
-" sive to --http1.1 and --http2 and --http2-prior-knowledge and\n"
+" sive to --http1.1 and --http2 and --http2-prior-knowledge and\n"
" --http3.\n"
"\n"
" --http1.1\n"
@@ -2318,46 +2487,46 @@ void hugehelp(void)
" Example:\n"
" curl --http1.1 https://example.com\n"
"\n"
-" See also -0, --http1.0 and --http0.9. This option is mutually\n"
+" See also -0, --http1.0 and --http0.9. This option is mutually\n"
, stdout);
fputs(
-" exclusive to -0, --http1.0 and --http2 and --http2-prior-knowl-\n"
-" edge and --http3. Added in 7.33.0.\n"
+" exclusive to -0, --http1.0 and --http2 and --http2-prior-knowl-\n"
+" edge and --http3.\n"
"\n"
" --http2-prior-knowledge\n"
-" (HTTP) Tells curl to issue its non-TLS HTTP requests using\n"
-" HTTP/2 without HTTP/1.1 Upgrade. It requires prior knowledge\n"
-" that the server supports HTTP/2 straight away. HTTPS requests\n"
-" will still do HTTP/2 the standard way with negotiated protocol\n"
+" (HTTP) Tells curl to issue its non-TLS HTTP requests using\n"
+" HTTP/2 without HTTP/1.1 Upgrade. It requires prior knowledge\n"
+" that the server supports HTTP/2 straight away. HTTPS requests\n"
+" still do HTTP/2 the standard way with negotiated protocol ver-\n"
+" sion in the TLS handshake.\n"
, stdout);
fputs(
-" version in the TLS handshake.\n"
"\n"
-" Providing --http2-prior-knowledge multiple times has no extra\n"
+" Providing --http2-prior-knowledge multiple times has no extra\n"
" effect. Disable it again with --no-http2-prior-knowledge.\n"
"\n"
" Example:\n"
" curl --http2-prior-knowledge https://example.com\n"
"\n"
-" See also --http2 and --http3. --http2-prior-knowledge requires\n"
-" that the underlying libcurl was built to support HTTP/2. This\n"
+" See also --http2 and --http3. --http2-prior-knowledge requires\n"
+" that the underlying libcurl was built to support HTTP/2. This\n"
+" option is mutually exclusive to --http1.1 and -0, --http1.0 and\n"
, stdout);
fputs(
-" option is mutually exclusive to --http1.1 and -0, --http1.0 and\n"
-" --http2 and --http3. Added in 7.49.0.\n"
+" --http2 and --http3.\n"
"\n"
" --http2\n"
" (HTTP) Tells curl to use HTTP version 2.\n"
"\n"
-" For HTTPS, this means curl will attempt to negotiate HTTP/2 in\n"
-" the TLS handshake. curl does this by default.\n"
+" For HTTPS, this means curl negotiates HTTP/2 in the TLS hand-\n"
+" shake. curl does this by default.\n"
"\n"
-" For HTTP, this means curl will attempt to upgrade the request to\n"
+" For HTTP, this means curl attempts to upgrade the request to\n"
" HTTP/2 using the Upgrade: request header.\n"
"\n"
+" When curl uses HTTP/2 over HTTPS, it does not itself insist on\n"
, stdout);
fputs(
-" When curl uses HTTP/2 over HTTPS, it does not itself insist on\n"
" TLS 1.2 or higher even though that is required by the specifica-\n"
" tion. A user can add this version requirement with --tlsv1.2.\n"
"\n"
@@ -2366,58 +2535,95 @@ void hugehelp(void)
" Example:\n"
" curl --http2 https://example.com\n"
"\n"
-" See also --http1.1 and --http3. --http2 requires that the under-\n"
+" See also --http1.1, --http3 and --no-alpn. --http2 requires that\n"
+" the underlying libcurl was built to support HTTP/2. This option\n"
, stdout);
fputs(
-" lying libcurl was built to support HTTP/2. This option is mutu-\n"
-" ally exclusive to --http1.1 and -0, --http1.0 and --http2-prior-\n"
-" knowledge and --http3. Added in 7.33.0.\n"
+" is mutually exclusive to --http1.1 and -0, --http1.0 and\n"
+" --http2-prior-knowledge and --http3.\n"
"\n"
-" --http3\n"
-" (HTTP) **WARNING**: this option is experimental. Do not use in\n"
+" --http3-only\n"
+" (HTTP) **WARNING**: this option is experimental. Do not use in\n"
" production.\n"
"\n"
-" Tells curl to use HTTP version 3 directly to the host and port\n"
-" number used in the URL. A normal HTTP/3 transaction will be done\n"
+" Instructs curl to use HTTP/3 to the host in the URL, with no\n"
+" fallback to earlier HTTP versions. HTTP/3 can only be used for\n"
+" HTTPS and not for HTTP URLs. For HTTP, this option triggers an\n"
, stdout);
fputs(
-" to a host and then get redirected via Alt-Svc, but this option\n"
-" allows a user to circumvent that when you know that the target\n"
-" speaks HTTP/3 on the given host and port.\n"
+" error.\n"
"\n"
-" This option will make curl fail if a QUIC connection cannot be\n"
-" established, it cannot fall back to a lower HTTP version on its\n"
-" own.\n"
+" This option allows a user to avoid using the Alt-Svc method of\n"
+" upgrading to HTTP/3 when you know that the target speaks HTTP/3\n"
+" on the given host and port.\n"
"\n"
-" Providing --http3 multiple times has no extra effect.\n"
+" This option makes curl fail if a QUIC connection cannot be es-\n"
+" tablished, it does not attempt any other HTTP versions on its\n"
+" own. Use --http3 for similar functionality with a fallback.\n"
+"\n"
+, stdout);
+ fputs(
+" Providing --http3-only multiple times has no extra effect.\n"
"\n"
" Example:\n"
+" curl --http3-only https://example.com\n"
+"\n"
+" See also --http1.1, --http2 and --http3. --http3-only requires\n"
+" that the underlying libcurl was built to support HTTP/3. This\n"
+" option is mutually exclusive to --http1.1 and -0, --http1.0 and\n"
+" --http2 and --http2-prior-knowledge and --http3. Added in\n"
+" 7.88.0.\n"
+, stdout);
+ fputs(
+" --http3\n"
+" (HTTP) **WARNING**: this option is experimental. Do not use in\n"
+" production.\n"
+"\n"
+" Tells curl to try HTTP/3 to the host in the URL, but fallback to\n"
+" earlier HTTP versions if the HTTP/3 connection establishment\n"
+" fails. HTTP/3 is only available for HTTPS and not for HTTP URLs.\n"
+" This option allows a user to avoid using the Alt-Svc method of\n"
, stdout);
fputs(
+" upgrading to HTTP/3 when you know that the target speaks HTTP/3\n"
+" on the given host and port.\n"
+"\n"
+" When asked to use HTTP/3, curl issues a separate attempt to use\n"
+" older HTTP versions with a slight delay, so if the HTTP/3 trans-\n"
+" fer fails or is slow, curl still tries to proceed with an older\n"
+" HTTP version.\n"
+"\n"
+" Use --http3-only for similar functionality without a fallback.\n"
+"\n"
+, stdout);
+ fputs(
+" Providing --http3 multiple times has no extra effect.\n"
+"\n"
+" Example:\n"
" curl --http3 https://example.com\n"
"\n"
" See also --http1.1 and --http2. --http3 requires that the under-\n"
-" lying libcurl was built to support HTTP/3. This option is mutu-\n"
-" ally exclusive to --http1.1 and -0, --http1.0 and --http2 and\n"
-" --http2-prior-knowledge. Added in 7.66.0.\n"
+" lying libcurl was built to support HTTP/3. This option is mutu-\n"
+" ally exclusive to --http1.1 and -0, --http1.0 and --http2 and\n"
+" --http2-prior-knowledge and --http3-only. Added in 7.66.0.\n"
"\n"
" --ignore-content-length\n"
-" (FTP HTTP) For HTTP, Ignore the Content-Length header. This is\n"
, stdout);
fputs(
-" particularly useful for servers running Apache 1.x, which will\n"
-" report incorrect Content-Length for files larger than 2 giga-\n"
+" (FTP HTTP) For HTTP, Ignore the Content-Length header. This is\n"
+" particularly useful for servers running Apache 1.x, which re-\n"
+" ports incorrect Content-Length for files larger than 2 giga-\n"
" bytes.\n"
"\n"
-" For FTP (since 7.46.0), skip the RETR command to figure out the\n"
+" For FTP, this makes curl skip the SIZE command to figure out the\n"
" size before downloading a file.\n"
"\n"
" This option does not work for HTTP if libcurl was built to use\n"
" hyper.\n"
"\n"
-" Providing --ignore-content-length multiple times has no extra\n"
, stdout);
fputs(
+" Providing --ignore-content-length multiple times has no extra\n"
" effect. Disable it again with --no-ignore-content-length.\n"
"\n"
" Example:\n"
@@ -2428,16 +2634,22 @@ void hugehelp(void)
" -i, --include\n"
" Include the HTTP response headers in the output. The HTTP re-\n"
" sponse headers can include things like server name, cookies,\n"
-" date of the document, HTTP version and more...\n"
-"\n"
, stdout);
fputs(
-" To view the request headers, consider the --verbose option.\n"
+" date of the document, HTTP version and more...\n"
+"\n"
+" To view the request headers, consider the -v, --verbose option.\n"
"\n"
-" Providing --include multiple times has no extra effect. Disable\n"
-" it again with --no-include.\n"
+" Prior to 7.75.0 curl did not print the headers if -f, --fail was\n"
+" used in combination with this option and there was error re-\n"
+" ported by server.\n"
+"\n"
+" Providing -i, --include multiple times has no extra effect.\n"
+" Disable it again with --no-include.\n"
"\n"
" Example:\n"
+, stdout);
+ fputs(
" curl -i https://example.com\n"
"\n"
" See also -v, --verbose.\n"
@@ -2445,32 +2657,37 @@ void hugehelp(void)
" -k, --insecure\n"
" (TLS SFTP SCP) By default, every secure connection curl makes is\n"
" verified to be secure before the transfer takes place. This op-\n"
-, stdout);
- fputs(
" tion makes curl skip the verification step and proceed without\n"
" checking.\n"
"\n"
" When this option is not used for protocols using TLS, curl veri-\n"
-" fies the server's TLS certificate before it continues: that the\n"
-" certificate contains the right name which matches the host name\n"
-" used in the URL and that the certificate has been signed by a CA\n"
-" certificate present in the cert store. See this online resource\n"
, stdout);
fputs(
+" fies the server's TLS certificate before it continues: that the\n"
+" certificate contains the right name which matches the host name\n"
+" used in the URL and that the certificate has been signed by a CA\n"
+" certificate present in the cert store. See this online resource\n"
" for further details:\n"
" https://curl.se/docs/sslcerts.html\n"
"\n"
-" For SFTP and SCP, this option makes curl skip the known_hosts\n"
-" verification. known_hosts is a file normally stored in the\n"
+" For SFTP and SCP, this option makes curl skip the known_hosts\n"
+, stdout);
+ fputs(
+" verification. known_hosts is a file normally stored in the\n"
" user's home directory in the \".ssh\" subdirectory, which contains\n"
" host names and their public keys.\n"
"\n"
" WARNING: using this option makes the transfer insecure.\n"
"\n"
+" When curl uses secure protocols it trusts responses and allows\n"
+" for example HSTS and Alt-Svc information to be stored and used\n"
, stdout);
fputs(
-" Providing --insecure multiple times has no extra effect. Dis-\n"
-" able it again with --no-insecure.\n"
+" subsequently. Using -k, --insecure can make curl trust and use\n"
+" such information from malicious servers.\n"
+"\n"
+" Providing -k, --insecure multiple times has no extra effect.\n"
+" Disable it again with --no-insecure.\n"
"\n"
" Example:\n"
" curl --insecure https://example.com\n"
@@ -2478,60 +2695,100 @@ void hugehelp(void)
" See also --proxy-insecure, --cacert and --capath.\n"
"\n"
" --interface <name>\n"
-" Perform an operation using a specified interface. You can enter\n"
-" interface name, IP address or host name. An example could look\n"
-" like:\n"
-"\n"
, stdout);
fputs(
+" Perform an operation using a specified interface. You can enter\n"
+" interface name, IP address or host name. An example could look\n"
+" like:\n"
+"\n"
" curl --interface eth0:1 https://www.example.com/\n"
"\n"
-" On Linux it can be used to specify a VRF, but the binary needs\n"
-" to either have CAP_NET_RAW or to be run as root. More informa-\n"
-" tion about Linux VRF: https://www.kernel.org/doc/Documenta-\n"
+" On Linux it can be used to specify a VRF, but the binary needs\n"
+" to either have CAP_NET_RAW or to be run as root. More informa-\n"
+" tion about Linux VRF: https://www.kernel.org/doc/Documenta-\n"
+, stdout);
+ fputs(
" tion/networking/vrf.txt\n"
"\n"
-" If --interface is provided several times, the last set value\n"
-" will be used.\n"
+" If --interface is provided several times, the last set value is\n"
+" used.\n"
"\n"
" Example:\n"
-, stdout);
- fputs(
" curl --interface eth0 https://example.com\n"
"\n"
" See also --dns-interface.\n"
"\n"
+" --ipfs-gateway <URL>\n"
+" Specify which gateway to use for IPFS and IPNS URLs. Not speci-\n"
+" fying this will instead make curl check if the IPFS_GATEWAY en-\n"
+, stdout);
+ fputs(
+" vironment variable is set, or if a ~/.ipfs/gateway file holding\n"
+" the gateway URL exists.\n"
+"\n"
+" If you run a local IPFS node, this gateway is by default avail-\n"
+" able under http://localhost:8080. A full example URL would look\n"
+" like:\n"
+"\n"
+" curl --ipfs-gateway http://localhost:8080 ipfs://bafybeigagd5nmnn2iys2f3doro7ydrevyr2mzarwidgadawmamiteydbzi\n"
+"\n"
+" There are many public IPFS gateways. See for example:\n"
+"\n"
+, stdout);
+ fputs(
+" https://ipfs.github.io/public-gateway-checker/\n"
+"\n"
+" WARNING: If you opt to go for a remote gateway you should be\n"
+" aware that you completely trust the gateway. This is fine in lo-\n"
+" cal gateways as you host it yourself. With remote gateways there\n"
+" could potentially be a malicious actor returning you data that\n"
+" does not match the request you made, inspect or even interfere\n"
+, stdout);
+ fputs(
+" with the request. You will not notice this when using curl. A\n"
+" mitigation could be to go for a \"trustless\" gateway. This means\n"
+" you locally verify that the data. Consult the docs page on\n"
+" trusted vs trustless: https://docs.ipfs.tech/refer-\n"
+" ence/http/gateway/#trusted-vs-trustless\n"
+"\n"
+" If --ipfs-gateway is provided several times, the last set value\n"
+" is used.\n"
+" Example:\n"
+, stdout);
+ fputs(
+" curl --ipfs-gateway https://example.com ipfs://\n"
+"\n"
+" See also -h, --help and -M, --manual. Added in 8.4.0.\n"
+"\n"
" -4, --ipv4\n"
-" This option tells curl to use IPv4 addresses only, and not for\n"
-" example try IPv6.\n"
+" This option tells curl to use IPv4 addresses only when resolving\n"
+" host names, and not for example try IPv6.\n"
"\n"
-" Providing --ipv4 multiple times has no extra effect. Disable it\n"
-" again with --no-ipv4.\n"
+" Providing -4, --ipv4 multiple times has no extra effect.\n"
"\n"
" Example:\n"
" curl --ipv4 https://example.com\n"
"\n"
-" See also --http1.1 and --http2. This option is mutually exclu-\n"
, stdout);
fputs(
+" See also --http1.1 and --http2. This option is mutually exclu-\n"
" sive to -6, --ipv6.\n"
"\n"
" -6, --ipv6\n"
-" This option tells curl to use IPv6 addresses only, and not for\n"
-" example try IPv4.\n"
+" This option tells curl to use IPv6 addresses only when resolving\n"
+" host names, and not for example try IPv4.\n"
"\n"
-" Providing --ipv6 multiple times has no extra effect. Disable it\n"
-" again with --no-ipv6.\n"
+" Providing -6, --ipv6 multiple times has no extra effect.\n"
"\n"
" Example:\n"
" curl --ipv6 https://example.com\n"
"\n"
" See also --http1.1 and --http2. This option is mutually exclu-\n"
+, stdout);
+ fputs(
" sive to -4, --ipv4.\n"
"\n"
" --json <data>\n"
-, stdout);
- fputs(
" (HTTP) Sends the specified JSON data in a POST request to the\n"
" HTTP server. --json works as a shortcut for passing on these\n"
" three options:\n"
@@ -2541,32 +2798,32 @@ void hugehelp(void)
" --header \"Accept: application/json\"\n"
"\n"
" There is no verification that the passed in data is actual JSON\n"
-" or that the syntax is correct.\n"
-"\n"
, stdout);
fputs(
+" or that the syntax is correct.\n"
+"\n"
" If you start the data with the letter @, the rest should be a\n"
" file name to read the data from, or a single dash (-) if you\n"
" want curl to read the data from stdin. Posting data from a file\n"
" named 'foobar' would thus be done with --json @foobar and to in-\n"
" stead read the data from stdin, use --json @-.\n"
"\n"
-" If this option is used more than once on the same command line,\n"
, stdout);
fputs(
-" the additional data pieces will be concatenated to the previous\n"
-" before sending.\n"
+" If this option is used more than once on the same command line,\n"
+" the additional data pieces are concatenated to the previous be-\n"
+" fore sending.\n"
"\n"
-" The headers this option sets can be overridden with --header as\n"
-" usual.\n"
+" The headers this option sets can be overridden with -H, --header\n"
+" as usual.\n"
"\n"
" --json can be used several times in a command line\n"
"\n"
" Examples:\n"
" curl --json '{ \"drink\": \"coffe\" }' https://example.com\n"
-" curl --json '{ \"drink\":' --json ' \"coffe\" }' https://example.com\n"
, stdout);
fputs(
+" curl --json '{ \"drink\":' --json ' \"coffe\" }' https://example.com\n"
" curl --json @prepared https://example.com\n"
" curl --json @- https://example.com < json.txt\n"
"\n"
@@ -2575,16 +2832,15 @@ void hugehelp(void)
" Added in 7.82.0.\n"
"\n"
" -j, --junk-session-cookies\n"
-" (HTTP) When curl is told to read cookies from a given file, this\n"
, stdout);
fputs(
-" option will make it discard all \"session cookies\". This will ba-\n"
-" sically have the same effect as if a new session is started.\n"
-" Typical browsers always discard session cookies when they are\n"
-" closed down.\n"
+" (HTTP) When curl is told to read cookies from a given file, this\n"
+" option makes it discard all \"session cookies\". This has the same\n"
+" effect as if a new session is started. Typical browsers discard\n"
+" session cookies when they are closed down.\n"
"\n"
-" Providing --junk-session-cookies multiple times has no extra ef-\n"
-" fect. Disable it again with --no-junk-session-cookies.\n"
+" Providing -j, --junk-session-cookies multiple times has no extra\n"
+" effect. Disable it again with --no-junk-session-cookies.\n"
"\n"
" Example:\n"
, stdout);
@@ -2600,18 +2856,18 @@ void hugehelp(void)
" offering the TCP_KEEPIDLE and TCP_KEEPINTVL socket options\n"
, stdout);
fputs(
-" (meaning Linux, recent AIX, HP-UX and more). Keepalives are\n"
-" used by the TCP stack to detect broken networks on idle connec-\n"
-" tions. The number of missed keepalive probes before declaring\n"
-" the connection down is OS dependent and is commonly 9 or 10.\n"
+" (meaning Linux, recent AIX, HP-UX and more). Keepalives are\n"
+" used by the TCP stack to detect broken networks on idle connec-\n"
+" tions. The number of missed keepalive probes before declaring\n"
+" the connection down is OS dependent and is commonly 9 or 10.\n"
" This option has no effect if --no-keepalive is used.\n"
"\n"
" If unspecified, the option defaults to 60 seconds.\n"
"\n"
, stdout);
fputs(
-" If --keepalive-time is provided several times, the last set\n"
-" value will be used.\n"
+" If --keepalive-time is provided several times, the last set\n"
+" value is used.\n"
"\n"
" Example:\n"
" curl --keepalive-time 20 https://example.com\n"
@@ -2619,14 +2875,15 @@ void hugehelp(void)
" See also --no-keepalive and -m, --max-time.\n"
"\n"
" --key-type <type>\n"
-" (TLS) Private key file type. Specify which type your --key pro-\n"
-" vided private key is. DER, PEM, and ENG are supported. If not\n"
+" (TLS) Private key file type. Specify which type your --key pro-\n"
+" vided private key is. DER, PEM, and ENG are supported. If not\n"
" specified, PEM is assumed.\n"
"\n"
, stdout);
fputs(
-" If --key-type is provided several times, the last set value will\n"
-" be used.\n"
+" If --key-type is provided several times, the last set value is\n"
+" used.\n"
+"\n"
" Example:\n"
" curl --key-type DER --key here https://example.com\n"
"\n"
@@ -2642,164 +2899,168 @@ void hugehelp(void)
"\n"
" If curl is built against OpenSSL library, and the engine pkcs11\n"
" is available, then a PKCS#11 URI (RFC 7512) can be used to spec-\n"
-" ify a private key located in a PKCS#11 device. A string begin-\n"
-" ning with \"pkcs11:\" will be interpreted as a PKCS#11 URI. If a\n"
-" PKCS#11 URI is provided, then the --engine option will be set as\n"
+" ify a private key located in a PKCS#11 device. A string begin-\n"
+" ning with \"pkcs11:\" is interpreted as a PKCS#11 URI. If a\n"
+" PKCS#11 URI is provided, then the --engine option is set as\n"
, stdout);
fputs(
-" \"pkcs11\" if none was provided and the --key-type option will be\n"
-" set as \"ENG\" if none was provided.\n"
+" \"pkcs11\" if none was provided and the --key-type option is set\n"
+" as \"ENG\" if none was provided.\n"
"\n"
-" If curl is built against Secure Transport or Schannel then this\n"
+" If curl is built against Secure Transport or Schannel then this\n"
" option is ignored for TLS protocols (HTTPS, etc). Those backends\n"
" expect the private key to be already present in the keychain or\n"
" PKCS#12 file containing the certificate.\n"
"\n"
+" If --key is provided several times, the last set value is used.\n"
+"\n"
, stdout);
fputs(
-" If --key is provided several times, the last set value will be\n"
-" used.\n"
-"\n"
" Example:\n"
" curl --cert certificate --key here https://example.com\n"
"\n"
" See also --key-type and -E, --cert.\n"
"\n"
" --krb <level>\n"
-" (FTP) Enable Kerberos authentication and use. The level must be\n"
+" (FTP) Enable Kerberos authentication and use. The level must be\n"
" entered and should be one of 'clear', 'safe', 'confidential', or\n"
-, stdout);
- fputs(
" 'private'. Should you use a level that is not one of these,\n"
-" 'private' will instead be used.\n"
+" 'private' is used.\n"
"\n"
-" If --krb is provided several times, the last set value will be\n"
-" used.\n"
+, stdout);
+ fputs(
+" If --krb is provided several times, the last set value is used.\n"
"\n"
" Example:\n"
" curl --krb clear ftp://example.com/\n"
"\n"
-" See also --delegation and --ssl. --krb requires that the under-\n"
+" See also --delegation and --ssl. --krb requires that the under-\n"
" lying libcurl was built to support Kerberos.\n"
"\n"
" --libcurl <file>\n"
+" Append this option to any ordinary curl command line, and you\n"
+" get libcurl-using C source code written to the file that does\n"
, stdout);
fputs(
-" Append this option to any ordinary curl command line, and you\n"
-" will get libcurl-using C source code written to the file that\n"
-" does the equivalent of what your command-line operation does!\n"
+" the equivalent of what your command-line operation does!\n"
"\n"
" This option is global and does not need to be specified for each\n"
-" use of -:, --next.\n"
+" use of --next.\n"
+"\n"
+" If --libcurl is provided several times, the last set value is\n"
+" used.\n"
"\n"
-" If --libcurl is provided several times, the last set value will\n"
-" be used.\n"
" Example:\n"
-, stdout);
- fputs(
" curl --libcurl client.c https://example.com\n"
"\n"
" See also -v, --verbose.\n"
"\n"
" --limit-rate <speed>\n"
+, stdout);
+ fputs(
" Specify the maximum transfer rate you want curl to use - for\n"
" both downloads and uploads. This feature is useful if you have a\n"
-" limited pipe and you would like your transfer not to use your\n"
+" limited pipe and you would like your transfer not to use your\n"
" entire bandwidth. To make it slower than it otherwise would be.\n"
"\n"
+" The given speed is measured in bytes/second, unless a suffix is\n"
+" appended. Appending 'k' or 'K' counts the number as kilobytes,\n"
, stdout);
fputs(
-" The given speed is measured in bytes/second, unless a suffix is\n"
-" appended. Appending 'k' or 'K' will count the number as kilo-\n"
-" bytes, 'm' or 'M' makes it megabytes, while 'g' or 'G' makes it\n"
-" gigabytes. The suffixes (k, M, G, T, P) are 1024 based. For ex-\n"
-" ample 1k is 1024. Examples: 200K, 3m and 1G.\n"
+" 'm' or 'M' makes it megabytes, while 'g' or 'G' makes it giga-\n"
+" bytes. The suffixes (k, M, G, T, P) are 1024 based. For example\n"
+" 1k is 1024. Examples: 200K, 3m and 1G.\n"
"\n"
" The rate limiting logic works on averaging the transfer speed to\n"
-, stdout);
- fputs(
" no more than the set threshold over a period of multiple sec-\n"
" onds.\n"
"\n"
-" If you also use the --speed-limit option, that option will take\n"
+" If you also use the -Y, --speed-limit option, that option takes\n"
+, stdout);
+ fputs(
" precedence and might cripple the rate-limiting slightly, to help\n"
" keeping the speed-limit logic working.\n"
"\n"
-" If --limit-rate is provided several times, the last set value\n"
-" will be used.\n"
+" If --limit-rate is provided several times, the last set value is\n"
+" used.\n"
"\n"
" Examples:\n"
-, stdout);
- fputs(
" curl --limit-rate 100K https://example.com\n"
" curl --limit-rate 1000 https://example.com\n"
" curl --limit-rate 10M https://example.com\n"
"\n"
-" See also -Y, --speed-limit and -y, --speed-time.\n"
+, stdout);
+ fputs(
+" See also --rate, -Y, --speed-limit and -y, --speed-time.\n"
"\n"
" -l, --list-only\n"
-" (FTP POP3) (FTP) When listing an FTP directory, this switch\n"
-" forces a name-only view. This is especially useful if the user\n"
-" wants to machine-parse the contents of an FTP directory since\n"
+" (FTP POP3 SFTP) (FTP) When listing an FTP directory, this switch\n"
+" forces a name-only view. This is especially useful if the user\n"
+" wants to machine-parse the contents of an FTP directory since\n"
+" the normal directory view does not use a standard look or for-\n"
+" mat. When used like this, the option causes an NLST command to\n"
, stdout);
fputs(
-" the normal directory view does not use a standard look or for-\n"
-" mat. When used like this, the option causes an NLST command to\n"
" be sent to the server instead of LIST.\n"
"\n"
-" Note: Some FTP servers list only files in their response to\n"
+" Note: Some FTP servers list only files in their response to\n"
" NLST; they do not include sub-directories and symbolic links.\n"
"\n"
-" (POP3) When retrieving a specific email from POP3, this switch\n"
+" (SFTP) When listing an SFTP directory, this switch forces a\n"
+" name-only view, one per line. This is especially useful if the\n"
+" user wants to machine-parse the contents of an SFTP directory\n"
, stdout);
fputs(
-" forces a LIST command to be performed instead of RETR. This is\n"
-" particularly useful if the user wants to see if a specific mes-\n"
-" sage-id exists on the server and what size it is.\n"
+" since the normal directory view provides more information than\n"
+" just file names.\n"
"\n"
-" Note: When combined with -X, --request, this option can be used\n"
-" to send a UIDL command instead, so the user may use the email's\n"
-" unique identifier rather than its message-id to make the re-\n"
-" quest.\n"
+" (POP3) When retrieving a specific email from POP3, this switch\n"
+" forces a LIST command to be performed instead of RETR. This is\n"
+" particularly useful if the user wants to see if a specific mes-\n"
+" sage-id exists on the server and what size it is.\n"
"\n"
+" Note: When combined with -X, --request, this option can be used\n"
, stdout);
fputs(
-" Providing --list-only multiple times has no extra effect. Dis-\n"
-" able it again with --no-list-only.\n"
+" to send a UIDL command instead, so the user may use the email's\n"
+" unique identifier rather than its message-id to make the re-\n"
+" quest.\n"
+"\n"
+" Providing -l, --list-only multiple times has no extra effect.\n"
+" Disable it again with --no-list-only.\n"
"\n"
" Example:\n"
" curl --list-only ftp://example.com/dir/\n"
" See also -Q, --quote and -X, --request.\n"
"\n"
" --local-port <num/range>\n"
-" Set a preferred single number or range (FROM-TO) of local port\n"
-" numbers to use for the connection(s). Note that port numbers by\n"
, stdout);
fputs(
-" nature are a scarce resource that will be busy at times so set-\n"
-" ting this range to something too narrow might cause unnecessary\n"
-" connection setup failures.\n"
+" Set a preferred single number or range (FROM-TO) of local port\n"
+" numbers to use for the connection(s). Note that port numbers by\n"
+" nature are a scarce resource so setting this range to something\n"
+" too narrow might cause unnecessary connection setup failures.\n"
"\n"
-" If --local-port is provided several times, the last set value\n"
-" will be used.\n"
+" If --local-port is provided several times, the last set value is\n"
+" used.\n"
"\n"
" Example:\n"
" curl --local-port 1000-3000 https://example.com\n"
+, stdout);
+ fputs(
"\n"
" See also -g, --globoff.\n"
"\n"
" --location-trusted\n"
-, stdout);
- fputs(
-" (HTTP) Like -L, --location, but will allow sending the name +\n"
-" password to all hosts that the site may redirect to. This may or\n"
-" may not introduce a security breach if the site redirects you to\n"
-" a site to which you will send your authentication info (which is\n"
-" plaintext in the case of HTTP Basic authentication).\n"
+" (HTTP) Like -L, --location, but allows sending the name + pass-\n"
+" word to all hosts that the site may redirect to. This may or may\n"
+" not introduce a security breach if the site redirects you to a\n"
+" site to which you send your authentication info (which is plain-\n"
+" text in the case of HTTP Basic authentication).\n"
"\n"
-" Providing --location-trusted multiple times has no extra effect.\n"
, stdout);
fputs(
+" Providing --location-trusted multiple times has no extra effect.\n"
" Disable it again with --no-location-trusted.\n"
"\n"
" Example:\n"
@@ -2808,46 +3069,49 @@ void hugehelp(void)
" See also -u, --user.\n"
"\n"
" -L, --location\n"
-" (HTTP) If the server reports that the requested page has moved\n"
+" (HTTP) If the server reports that the requested page has moved\n"
" to a different location (indicated with a Location: header and a\n"
-" 3XX response code), this option will make curl redo the request\n"
, stdout);
fputs(
-" on the new place. If used together with --include or -I, --head,\n"
-" headers from all requested pages will be shown. When authentica-\n"
-" tion is used, curl only sends its credentials to the initial\n"
-" host. If a redirect takes curl to a different host, it will not\n"
-" be able to intercept the user+password. See also --location-\n"
-" trusted on how to change this. You can limit the amount of redi-\n"
+" 3XX response code), this option makes curl redo the request on\n"
+" the new place. If used together with -i, --include or -I,\n"
+" --head, headers from all requested pages are shown.\n"
+"\n"
+" When authentication is used, curl only sends its credentials to\n"
+" the initial host. If a redirect takes curl to a different host,\n"
+" it does not get the user+password pass on. See also --loca-\n"
, stdout);
fputs(
-" rects to follow by using the --max-redirs option.\n"
+" tion-trusted on how to change this.\n"
"\n"
-" When curl follows a redirect and if the request is a POST, it\n"
-" will send the following request with a GET if the HTTP response\n"
-" was 301, 302, or 303. If the response code was any other 3xx\n"
-" code, curl will re-send the following request using the same un-\n"
-" modified method.\n"
+" Limit the amount of redirects to follow by using the\n"
+" --max-redirs option.\n"
"\n"
-" You can tell curl to not change POST requests to GET after a 30x\n"
+" When curl follows a redirect and if the request is a POST, it\n"
+" sends the following request with a GET if the HTTP response was\n"
+" 301, 302, or 303. If the response code was any other 3xx code,\n"
+" curl resends the following request using the same unmodified\n"
, stdout);
fputs(
+" method.\n"
+"\n"
+" You can tell curl to not change POST requests to GET after a 30x\n"
" response by using the dedicated options for that: --post301,\n"
" --post302 and --post303.\n"
"\n"
-" The method set with --request overrides the method curl would\n"
-" otherwise select to use.\n"
+" The method set with -X, --request overrides the method curl\n"
+" would otherwise select to use.\n"
"\n"
-" Providing --location multiple times has no extra effect. Dis-\n"
-" able it again with --no-location.\n"
+" Providing -L, --location multiple times has no extra effect.\n"
+" Disable it again with --no-location.\n"
"\n"
" Example:\n"
+, stdout);
+ fputs(
" curl -L https://example.com\n"
"\n"
" See also --resolve and --alt-svc.\n"
"\n"
-, stdout);
- fputs(
" --login-options <options>\n"
" (IMAP LDAP POP3 SMTP) Specify the login options to use during\n"
" server authentication.\n"
@@ -2855,28 +3119,35 @@ void hugehelp(void)
" You can use login options to specify protocol specific options\n"
" that may be used during authentication. At present only IMAP,\n"
" POP3 and SMTP support login options. For more information about\n"
-" login options please see RFC 2384, RFC 5092 and IETF draft\n"
, stdout);
fputs(
-" draft-earhart-url-smtp-00.txt\n"
+" login options please see RFC 2384, RFC 5092 and the IETF draft\n"
+" https://datatracker.ietf.org/doc/html/draft-earhart-url-smtp-00.\n"
+" Since 8.2.0, IMAP supports the login option \"AUTH=+LOGIN\". With\n"
+" this option, curl uses the plain (not SASL) LOGIN IMAP command\n"
+" even if the server advertises SASL authentication. Care should\n"
+" be taken in using this option, as it sends your password over\n"
+, stdout);
+ fputs(
+" the network in plain text. This does not work if the IMAP server\n"
+" disables the plain LOGIN (e.g. to prevent password snooping).\n"
"\n"
" If --login-options is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
+" is used.\n"
" Example:\n"
" curl --login-options 'AUTH=*' imap://example.com\n"
"\n"
-" See also -u, --user. Added in 7.34.0.\n"
+" See also -u, --user.\n"
"\n"
" --mail-auth <address>\n"
-" (SMTP) Specify a single address. This will be used to specify\n"
-" the authentication address (identity) of a submitted message\n"
+" (SMTP) Specify a single address. This is used to specify the au-\n"
, stdout);
fputs(
-" that is being relayed to another server.\n"
+" thentication address (identity) of a submitted message that is\n"
+" being relayed to another server.\n"
"\n"
-" If --mail-auth is provided several times, the last set value\n"
-" will be used.\n"
+" If --mail-auth is provided several times, the last set value is\n"
+" used.\n"
"\n"
" Example:\n"
" curl --mail-auth user@example.come -T mail smtp://example.com/\n"
@@ -2885,12 +3156,12 @@ void hugehelp(void)
"\n"
" --mail-from <address>\n"
" (SMTP) Specify a single address that the given mail should get\n"
-" sent from.\n"
-"\n"
, stdout);
fputs(
-" If --mail-from is provided several times, the last set value\n"
-" will be used.\n"
+" sent from.\n"
+"\n"
+" If --mail-from is provided several times, the last set value is\n"
+" used.\n"
"\n"
" Example:\n"
" curl --mail-from user@example.com -T mail smtp://example.com/\n"
@@ -2899,20 +3170,20 @@ void hugehelp(void)
"\n"
" --mail-rcpt-allowfails\n"
" (SMTP) When sending data to multiple recipients, by default curl\n"
-" will abort SMTP conversation if at least one of the recipients\n"
+" aborts SMTP conversation if at least one of the recipients\n"
, stdout);
fputs(
" causes RCPT TO command to return an error.\n"
"\n"
-" The default behavior can be changed by passing --mail-rcpt-al-\n"
-" lowfails command-line option which will make curl ignore errors\n"
-" and proceed with the remaining valid recipients.\n"
+" The default behavior can be changed by passing --mail-rcpt-al-\n"
+" lowfails command-line option which makes curl ignore errors and\n"
+" proceed with the remaining valid recipients.\n"
"\n"
-" If all recipients trigger RCPT TO failures and this flag is\n"
-" specified, curl will still abort the SMTP conversation and re-\n"
+" If all recipients trigger RCPT TO failures and this flag is\n"
+" specified, curl still aborts the SMTP conversation and returns\n"
, stdout);
fputs(
-" turn the error received from to the last RCPT TO command.\n"
+" the error received from to the last RCPT TO command.\n"
"\n"
" Providing --mail-rcpt-allowfails multiple times has no extra ef-\n"
" fect. Disable it again with --no-mail-rcpt-allowfails.\n"
@@ -2926,18 +3197,18 @@ void hugehelp(void)
" (SMTP) Specify a single email address, user name or mailing list\n"
, stdout);
fputs(
-" name. Repeat this option several times to send to multiple re-\n"
+" name. Repeat this option several times to send to multiple re-\n"
" cipients.\n"
"\n"
-" When performing an address verification (VRFY command), the re-\n"
-" cipient should be specified as the user name or user name and\n"
-" domain (as per Section 3.5 of RFC5321). (Added in 7.34.0)\n"
+" When performing an address verification (VRFY command), the re-\n"
+" cipient should be specified as the user name or user name and\n"
+" domain (as per Section 3.5 of RFC 5321).\n"
"\n"
" When performing a mailing list expand (EXPN command), the recip-\n"
" ient should be specified using the mailing list name, such as\n"
, stdout);
fputs(
-" \"Friends\" or \"London-Office\". (Added in 7.34.0)\n"
+" \"Friends\" or \"London-Office\".\n"
"\n"
" --mail-rcpt can be used several times in a command line\n"
"\n"
@@ -2949,50 +3220,51 @@ void hugehelp(void)
" -M, --manual\n"
" Manual. Display the huge help text.\n"
"\n"
-" Providing --manual multiple times has no extra effect. Disable\n"
-" it again with --no-manual.\n"
-"\n"
" Example:\n"
-, stdout);
- fputs(
" curl --manual\n"
"\n"
" See also -v, --verbose, --libcurl and --trace.\n"
"\n"
" --max-filesize <bytes>\n"
+, stdout);
+ fputs(
" (FTP HTTP MQTT) Specify the maximum size (in bytes) of a file to\n"
" download. If the file requested is larger than this value, the\n"
-" transfer will not start and curl will return with exit code 63.\n"
+" transfer does not start and curl returns with exit code 63.\n"
"\n"
" A size modifier may be used. For example, Appending 'k' or 'K'\n"
+" counts the number as kilobytes, 'm' or 'M' makes it megabytes,\n"
+" while 'g' or 'G' makes it gigabytes. Examples: 200K, 3m and 1G.\n"
, stdout);
fputs(
-" will count the number as kilobytes, 'm' or 'M' makes it\n"
-" megabytes, while 'g' or 'G' makes it gigabytes. Examples: 200K,\n"
-" 3m and 1G. (Added in 7.58.0)\n"
+" (Added in 7.58.0)\n"
+"\n"
+" NOTE: before curl 8.4.0, when the file size is not known prior\n"
+" to download, for such files this option has no effect even if\n"
+" the file transfer ends up being larger than this given limit.\n"
"\n"
-" NOTE: The file size is not always known prior to download, and\n"
-" for such files this option has no effect even if the file trans-\n"
-" fer ends up being larger than this given limit. If --max-file-\n"
+" Starting with curl 8.4.0, this option aborts the transfer if it\n"
+" reaches the threshold during transfer.\n"
+"\n"
+" If --max-filesize is provided several times, the last set value\n"
, stdout);
fputs(
-" size is provided several times, the last set value will be used.\n"
-"\n"
+" is used.\n"
" Example:\n"
" curl --max-filesize 100K https://example.com\n"
"\n"
" See also --limit-rate.\n"
"\n"
" --max-redirs <num>\n"
-" (HTTP) Set maximum number of redirections to follow. When --lo-\n"
-" cation is used, to prevent curl from following too many redi-\n"
-" rects, by default, the limit is set to 50 redirects. Set this\n"
+" (HTTP) Set maximum number of redirections to follow. When -L,\n"
+" --location is used, to prevent curl from following too many\n"
+" redirects, by default, the limit is set to 50 redirects. Set\n"
+" this option to -1 to make it unlimited.\n"
+"\n"
, stdout);
fputs(
-" option to -1 to make it unlimited.\n"
-"\n"
-" If --max-redirs is provided several times, the last set value\n"
-" will be used.\n"
+" If --max-redirs is provided several times, the last set value is\n"
+" used.\n"
"\n"
" Example:\n"
" curl --max-redirs 3 --location https://example.com\n"
@@ -3004,19 +3276,21 @@ void hugehelp(void)
" This is useful for preventing your batch jobs from hanging for\n"
, stdout);
fputs(
-" hours due to slow networks or links going down. Since 7.32.0,\n"
-" this option accepts decimal values, but the actual timeout will\n"
-" decrease in accuracy as the specified timeout increases in deci-\n"
-" mal precision.\n"
+" hours due to slow networks or links going down. This option ac-\n"
+" cepts decimal values.\n"
"\n"
" If you enable retrying the transfer (--retry) then the maximum\n"
" time counter is reset each time the transfer is retried. You can\n"
" use --retry-max-time to limit the retry time.\n"
"\n"
+" The decimal value needs to provided using a dot (.) as decimal\n"
+" separator - not the local version even if it might be using an-\n"
, stdout);
fputs(
-" If --max-time is provided several times, the last set value will\n"
-" be used.\n"
+" other separator.\n"
+"\n"
+" If -m, --max-time is provided several times, the last set value\n"
+" is used.\n"
"\n"
" Examples:\n"
" curl --max-time 10 https://example.com\n"
@@ -3025,14 +3299,15 @@ void hugehelp(void)
" See also --connect-timeout and --retry-max-time.\n"
"\n"
" --metalink\n"
-" This option was previously used to specify a metalink resource.\n"
-" Metalink support has been disabled in curl since 7.78.0 for se-\n"
+" This option was previously used to specify a Metalink resource.\n"
, stdout);
fputs(
-" curity reasons.\n"
+" Metalink support is disabled in curl for security reasons (added\n"
+" in 7.78.0).\n"
+"\n"
+" If --metalink is provided several times, the last set value is\n"
+" used.\n"
"\n"
-" If --metalink is provided several times, the last set value will\n"
-" be used.\n"
" Example:\n"
" curl --metalink file https://example.com\n"
"\n"
@@ -3042,39 +3317,36 @@ void hugehelp(void)
" (HTTP) Enables Negotiate (SPNEGO) authentication.\n"
"\n"
" This option requires a library built with GSS-API or SSPI sup-\n"
-" port. Use --version to see if your curl supports GSS-API/SSPI or\n"
, stdout);
fputs(
-" SPNEGO.\n"
+" port. Use -V, --version to see if your curl supports\n"
+" GSS-API/SSPI or SPNEGO.\n"
"\n"
-" When using this option, you must also provide a fake --user op-\n"
-" tion to activate the authentication code properly. Sending a '-u\n"
-" :' is enough as the user name and password from the --user op-\n"
-" tion are not actually used.\n"
-"\n"
-" If this option is used several times, only the first one is\n"
-" used.\n"
+" When using this option, you must also provide a fake -u, --user\n"
+" option to activate the authentication code properly. Sending a\n"
+" '-u :' is enough as the user name and password from the -u,\n"
+" --user option are not actually used.\n"
"\n"
" Providing --negotiate multiple times has no extra effect.\n"
"\n"
-" Example:\n"
, stdout);
fputs(
+" Example:\n"
" curl --negotiate -u : https://example.com\n"
"\n"
" See also --basic, --ntlm, --anyauth and --proxy-negotiate.\n"
"\n"
" --netrc-file <filename>\n"
-" This option is similar to -n, --netrc, except that you provide\n"
-" the path (absolute or relative) to the netrc file that curl\n"
+" This option is similar to -n, --netrc, except that you provide\n"
+" the path (absolute or relative) to the netrc file that curl\n"
" should use. You can only specify one netrc file per invocation.\n"
"\n"
-" It will abide by --netrc-optional if specified.\n"
+" It abides by --netrc-optional if specified.\n"
"\n"
, stdout);
fputs(
-" If --netrc-file is provided several times, the last set value\n"
-" will be used.\n"
+" If --netrc-file is provided several times, the last set value is\n"
+" used.\n"
"\n"
" Example:\n"
" curl --netrc-file netrc https://example.com\n"
@@ -3084,7 +3356,7 @@ void hugehelp(void)
"\n"
" --netrc-optional\n"
" Similar to -n, --netrc, but this option makes the .netrc usage\n"
-" optional and not mandatory as the --netrc option does.\n"
+" optional and not mandatory as the -n, --netrc option does.\n"
"\n"
, stdout);
fputs(
@@ -3098,19 +3370,22 @@ void hugehelp(void)
" --netrc.\n"
"\n"
" -n, --netrc\n"
-" Makes curl scan the .netrc (_netrc on Windows) file in the\n"
-" user's home directory for login name and password. This is typi-\n"
+" Makes curl scan the .netrc file in the user's home directory for\n"
+" login name and password. This is typically used for FTP on Unix.\n"
, stdout);
fputs(
-" cally used for FTP on Unix. If used with HTTP, curl will enable\n"
-" user authentication. See netrc(5) and ftp(1) for details on the\n"
-" file format. Curl will not complain if that file does not have\n"
-" the right permissions (it should be neither world- nor group-\n"
-" readable). The environment variable \"HOME\" is used to find the\n"
-" home directory.\n"
+" If used with HTTP, curl enables user authentication. See\n"
+" netrc(5) and ftp(1) for details on the file format. Curl does\n"
+" not complain if that file does not have the right permissions\n"
+" (it should be neither world- nor group-readable). The environ-\n"
+" ment variable \"HOME\" is used to find the home directory.\n"
"\n"
+" On Windows two filenames in the home directory are checked:\n"
, stdout);
fputs(
+" .netrc and _netrc, preferring the former. Older versions on Win-\n"
+" dows checked for _netrc only.\n"
+"\n"
" A quick and simple example of how to setup a .netrc to allow\n"
" curl to FTP to the machine host.domain.com with user name 'my-\n"
" self' and password 'secret' could look similar to:\n"
@@ -3119,27 +3394,30 @@ void hugehelp(void)
" login myself\n"
" password secret\n"
"\n"
-" Providing --netrc multiple times has no extra effect. Disable\n"
-" it again with --no-netrc.\n"
-"\n"
-" Example:\n"
, stdout);
fputs(
+" Providing -n, --netrc multiple times has no extra effect. Dis-\n"
+" able it again with --no-netrc.\n"
+"\n"
+" Example:\n"
" curl --netrc https://example.com\n"
"\n"
-" See also --netrc-file, -K, --config and -u, --user.\n"
+" See also --netrc-file, -K, --config and -u, --user. This option\n"
+" is mutually exclusive to --netrc-file and --netrc-optional.\n"
"\n"
" -:, --next\n"
" Tells curl to use a separate operation for the following URL and\n"
+, stdout);
+ fputs(
" associated options. This allows you to send several URL re-\n"
" quests, each with their own specific options, for example, such\n"
" as different user names or custom requests for each.\n"
"\n"
+" -:, --next resets all local options and only global ones have\n"
+" their values survive over to the operation following the -:,\n"
+" --next instruction. Global options include -v, --verbose,\n"
, stdout);
fputs(
-" --next will reset all local options and only global ones will\n"
-" have their values survive over to the operation following the\n"
-" --next instruction. Global options include -v, --verbose,\n"
" --trace, --trace-ascii and --fail-early.\n"
"\n"
" For example, you can do both a GET and a POST in a single com-\n"
@@ -3147,24 +3425,27 @@ void hugehelp(void)
"\n"
" curl www1.example.com --next -d postthis www2.example.com\n"
"\n"
-, stdout);
- fputs(
-" --next can be used several times in a command line\n"
+" -:, --next can be used several times in a command line\n"
"\n"
" Examples:\n"
" curl https://example.com --next -d postthis www2.example.com\n"
" curl -I https://example.com --next https://example.net/\n"
"\n"
-" See also -Z, --parallel and -K, --config. Added in 7.36.0.\n"
+, stdout);
+ fputs(
+" See also -Z, --parallel and -K, --config.\n"
"\n"
" --no-alpn\n"
" (HTTPS) Disable the ALPN TLS extension. ALPN is enabled by de-\n"
" fault if libcurl was built with an SSL library that supports\n"
-, stdout);
- fputs(
" ALPN. ALPN is used by a libcurl that supports HTTP/2 to negoti-\n"
" ate HTTP/2 support with the server during https sessions.\n"
"\n"
+" Note that this is the negated option name documented. You can\n"
+, stdout);
+ fputs(
+" use --alpn to enable ALPN.\n"
+"\n"
" Providing --no-alpn multiple times has no extra effect. Disable\n"
" it again with --alpn.\n"
"\n"
@@ -3172,21 +3453,24 @@ void hugehelp(void)
" curl --no-alpn https://example.com\n"
"\n"
" See also --no-npn and --http2. --no-alpn requires that the un-\n"
-" derlying libcurl was built to support TLS. Added in 7.36.0.\n"
+" derlying libcurl was built to support TLS.\n"
"\n"
-, stdout);
- fputs(
" -N, --no-buffer\n"
" Disables the buffering of the output stream. In normal work sit-\n"
-" uations, curl will use a standard buffered output stream that\n"
-" will have the effect that it will output the data in chunks, not\n"
-" necessarily exactly when the data arrives. Using this option\n"
-" will disable that buffering.\n"
+, stdout);
+ fputs(
+" uations, curl uses a standard buffered output stream that has\n"
+" the effect that it outputs the data in chunks, not necessarily\n"
+" exactly when the data arrives. Using this option disables that\n"
+" buffering.\n"
+"\n"
+" Note that this is the negated option name documented. You can\n"
+" use --buffer to enable buffering again.\n"
"\n"
-" Providing --no-buffer multiple times has no extra effect. Dis-\n"
+" Providing -N, --no-buffer multiple times has no extra effect.\n"
, stdout);
fputs(
-" able it again with --buffer.\n"
+" Disable it again with --buffer.\n"
"\n"
" Example:\n"
" curl --no-buffer https://example.com\n"
@@ -3194,38 +3478,38 @@ void hugehelp(void)
" See also -#, --progress-bar.\n"
"\n"
" --no-clobber\n"
-" When used in conjunction with the -o, --output, -J, --remote-\n"
-" header-name, -O, --remote-name, or --remote-name-all options,\n"
-" curl avoids overwriting files that already exist. Instead, a dot\n"
-" and a number gets appended to the name of the file that would be\n"
+" When used in conjunction with the -o, --output, -J, --re-\n"
+" mote-header-name, -O, --remote-name, or --remote-name-all op-\n"
+" tions, curl avoids overwriting files that already exist. In-\n"
, stdout);
fputs(
-" created, up to filename.100 after which it will not create any\n"
-" file.\n"
+" stead, a dot and a number gets appended to the name of the file\n"
+" that would be created, up to filename.100 after which it does\n"
+" not create any file.\n"
"\n"
" Note that this is the negated option name documented. You can\n"
-" thus use --clobber to enforce the clobbering, even if --remote-\n"
-" header-name or -J is specified.\n"
+" thus use --clobber to enforce the clobbering, even if -J, --re-\n"
+" mote-header-name is specified.\n"
"\n"
" Providing --no-clobber multiple times has no extra effect. Dis-\n"
+, stdout);
+ fputs(
" able it again with --clobber.\n"
"\n"
" Example:\n"
-, stdout);
- fputs(
" curl --no-clobber --output local/dir/file https://example.com\n"
" See also -o, --output and -O, --remote-name. Added in 7.83.0.\n"
"\n"
" --no-keepalive\n"
-" Disables the use of keepalive messages on the TCP connection.\n"
+" Disables the use of keepalive messages on the TCP connection.\n"
" curl otherwise enables them by default.\n"
"\n"
-" Note that this is the negated option name documented. You can\n"
-" thus use --keepalive to enforce keepalive.\n"
-"\n"
+" Note that this is the negated option name documented. You can\n"
, stdout);
fputs(
-" Providing --no-keepalive multiple times has no extra effect.\n"
+" thus use --keepalive to enforce keepalive.\n"
+"\n"
+" Providing --no-keepalive multiple times has no extra effect.\n"
" Disable it again with --keepalive.\n"
"\n"
" Example:\n"
@@ -3234,37 +3518,38 @@ void hugehelp(void)
" See also --keepalive-time.\n"
"\n"
" --no-npn\n"
-" (HTTPS) In curl 7.86.0 and later, curl never uses NPN.\n"
+" (HTTPS) curl never uses NPN, this option has no effect (added in\n"
+" 7.86.0).\n"
"\n"
-" Disable the NPN TLS extension. NPN is enabled by default if\n"
-" libcurl was built with an SSL library that supports NPN. NPN is\n"
, stdout);
fputs(
-" used by a libcurl that supports HTTP/2 to negotiate HTTP/2 sup-\n"
+" Disable the NPN TLS extension. NPN is enabled by default if\n"
+" libcurl was built with an SSL library that supports NPN. NPN is\n"
+" used by a libcurl that supports HTTP/2 to negotiate HTTP/2 sup-\n"
" port with the server during https sessions.\n"
"\n"
-" Providing --no-npn multiple times has no extra effect. Disable\n"
+" Providing --no-npn multiple times has no extra effect. Disable\n"
" it again with --npn.\n"
"\n"
" Example:\n"
" curl --no-npn https://example.com\n"
"\n"
-" See also --no-alpn and --http2. --no-npn requires that the un-\n"
-" derlying libcurl was built to support TLS. Added in 7.36.0.\n"
-"\n"
, stdout);
fputs(
+" See also --no-alpn and --http2. --no-npn requires that the un-\n"
+" derlying libcurl was built to support TLS.\n"
+"\n"
" --no-progress-meter\n"
" Option to switch off the progress meter output without muting or\n"
-" otherwise affecting warning and informational messages like\n"
+" otherwise affecting warning and informational messages like -s,\n"
" --silent does.\n"
"\n"
" Note that this is the negated option name documented. You can\n"
+, stdout);
+ fputs(
" thus use --progress-meter to enable the progress meter again.\n"
"\n"
" Providing --no-progress-meter multiple times has no extra ef-\n"
-, stdout);
- fputs(
" fect. Disable it again with --progress-meter.\n"
"\n"
" Example:\n"
@@ -3274,46 +3559,55 @@ void hugehelp(void)
"\n"
" --no-sessionid\n"
" (TLS) Disable curl's use of SSL session-ID caching. By default\n"
-" all transfers are done using the cache. Note that while nothing\n"
-" should ever get hurt by attempting to reuse SSL session-IDs,\n"
, stdout);
fputs(
+" all transfers are done using the cache. Note that while nothing\n"
+" should ever get hurt by attempting to reuse SSL session-IDs,\n"
" there seem to be broken SSL implementations in the wild that may\n"
" require you to disable this in order for you to succeed.\n"
"\n"
-" Note that this is the negated option name documented. You can\n"
+" Note that this is the negated option name documented. You can\n"
" thus use --sessionid to enforce session-ID caching.\n"
"\n"
-" Providing --no-sessionid multiple times has no extra effect.\n"
+, stdout);
+ fputs(
+" Providing --no-sessionid multiple times has no extra effect.\n"
" Disable it again with --sessionid.\n"
"\n"
" Example:\n"
-, stdout);
- fputs(
" curl --no-sessionid https://example.com\n"
"\n"
" See also -k, --insecure.\n"
"\n"
" --noproxy <no-proxy-list>\n"
-" Comma-separated list of hosts for which not to use a proxy, if\n"
-" one is specified. The only wildcard is a single * character,\n"
-" which matches all hosts, and effectively disables the proxy.\n"
-" Each name in this list is matched as either a domain which con-\n"
+" Comma-separated list of hosts for which not to use a proxy, if\n"
+" one is specified. The only wildcard is a single * character,\n"
, stdout);
fputs(
-" tains the hostname, or the hostname itself. For example, lo-\n"
-" cal.com would match local.com, local.com:80, and www.local.com,\n"
+" which matches all hosts, and effectively disables the proxy.\n"
+" Each name in this list is matched as either a domain which con-\n"
+" tains the hostname, or the hostname itself. For example, lo-\n"
+" cal.com would match local.com, local.com:80, and www.local.com,\n"
" but not www.notlocal.com.\n"
"\n"
-" Since 7.53.0, This option overrides the environment variables\n"
-" that disable the proxy ('no_proxy' and 'NO_PROXY'). If there's\n"
-" an environment variable disabling a proxy, you can set the no-\n"
+" This option overrides the environment variables that disable the\n"
+, stdout);
+ fputs(
+" proxy ('no_proxy' and 'NO_PROXY') (added in 7.53.0). If there is\n"
+" an environment variable disabling a proxy, you can set the no\n"
" proxy list to \"\" to override it.\n"
"\n"
+" IP addresses specified to this option can be provided using CIDR\n"
+" notation (added in 7.86.0): an appended slash and number speci-\n"
+" fies the number of \"network bits\" out of the address to use in\n"
, stdout);
fputs(
-" If --noproxy is provided several times, the last set value will\n"
-" be used.\n"
+" the comparison. For example \"192.168.0.0/16\" would match all ad-\n"
+" dresses starting with \"192.168\".\n"
+"\n"
+" If --noproxy is provided several times, the last set value is\n"
+" used.\n"
+"\n"
" Example:\n"
" curl --noproxy \"www.example\" https://example.com\n"
"\n"
@@ -3321,11 +3615,11 @@ void hugehelp(void)
"\n"
" --ntlm-wb\n"
" (HTTP) Enables NTLM much in the style --ntlm does, but hand over\n"
+, stdout);
+ fputs(
" the authentication to the separate binary ntlmauth application\n"
" that is executed when needed.\n"
"\n"
-, stdout);
- fputs(
" Providing --ntlm-wb multiple times has no extra effect.\n"
"\n"
" Example:\n"
@@ -3335,9 +3629,9 @@ void hugehelp(void)
"\n"
" --ntlm (HTTP) Enables NTLM authentication. The NTLM authentication\n"
" method was designed by Microsoft and is used by IIS web servers.\n"
-" It is a proprietary protocol, reverse-engineered by clever peo-\n"
, stdout);
fputs(
+" It is a proprietary protocol, reverse-engineered by clever peo-\n"
" ple and implemented in curl based on their efforts. This kind of\n"
" behavior should not be endorsed, you should encourage everyone\n"
" who uses NTLM to switch to a public and documented authentica-\n"
@@ -3346,17 +3640,14 @@ void hugehelp(void)
" If you want to enable NTLM for your proxy authentication, then\n"
" use --proxy-ntlm.\n"
"\n"
-" If this option is used several times, only the first one is\n"
-" used.\n"
, stdout);
fputs(
-"\n"
" Providing --ntlm multiple times has no extra effect.\n"
"\n"
" Example:\n"
" curl --ntlm -u user:password https://example.com\n"
"\n"
-" See also --proxy-ntlm. --ntlm requires that the underlying\n"
+" See also --proxy-ntlm. --ntlm requires that the underlying\n"
" libcurl was built to support TLS. This option is mutually exclu-\n"
" sive to --basic and --negotiate and --digest and --anyauth.\n"
"\n"
@@ -3366,35 +3657,34 @@ void hugehelp(void)
fputs(
" 2.0 server authentication. The Bearer Token is used in conjunc-\n"
" tion with the user name which can be specified as part of the\n"
-" --url or --user options.\n"
+" --url or -u, --user options.\n"
"\n"
" The Bearer Token and user name are formatted according to RFC\n"
" 6750.\n"
"\n"
" If --oauth2-bearer is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
+" is used.\n"
" Example:\n"
, stdout);
fputs(
" curl --oauth2-bearer \"mF_9.B5f-4.1JqM\" https://example.com\n"
"\n"
-" See also --basic, --ntlm and --digest. Added in 7.33.0.\n"
+" See also --basic, --ntlm and --digest.\n"
"\n"
" --output-dir <dir>\n"
-" This option specifies the directory in which files should be\n"
-" stored, when --remote-name or --output are used.\n"
+" This option specifies the directory in which files should be\n"
+" stored, when -O, --remote-name or -o, --output are used.\n"
"\n"
-" The given output directory is used for all URLs and output op-\n"
+" The given output directory is used for all URLs and output op-\n"
" tions on the command line, up until the first -:, --next.\n"
"\n"
, stdout);
fputs(
-" If the specified target directory does not exist, the operation\n"
-" will fail unless --create-dirs is also used.\n"
+" If the specified target directory does not exist, the operation\n"
+" fails unless --create-dirs is also used.\n"
"\n"
-" If --output-dir is provided several times, the last set value\n"
-" will be used.\n"
+" If --output-dir is provided several times, the last set value is\n"
+" used.\n"
"\n"
" Example:\n"
" curl --output-dir \"tmp\" -O https://example.com\n"
@@ -3408,8 +3698,8 @@ void hugehelp(void)
" Write output to <file> instead of stdout. If you are using {} or\n"
" [] to fetch multiple documents, you should quote the URL and you\n"
" can use '#' followed by a number in the <file> specifier. That\n"
-" variable will be replaced with the current string for the URL\n"
-" being fetched. Like in:\n"
+" variable is replaced with the current string for the URL being\n"
+" fetched. Like in:\n"
"\n"
" curl \"http://{one,two}.example.com\" -o \"file_#1.txt\"\n"
"\n"
@@ -3417,13 +3707,13 @@ void hugehelp(void)
"\n"
, stdout);
fputs(
-" curl \"http://{site,host}.host[1-5].com\" -o \"#1_#2\"\n"
+" curl \"http://{site,host}.host[1-5].example\" -o \"#1_#2\"\n"
"\n"
" You may use this option as many times as the number of URLs you\n"
" have. For example, if you specify two URLs on the same command\n"
" line, you can use it like this:\n"
"\n"
-" curl -o aa example.com -o bb example.net\n"
+" curl -o aa example.com -o bb example.net\n"
"\n"
" and the order of the -o options and the URLs does not matter,\n"
" just that the first -o is for the first URL and so on, so the\n"
@@ -3431,46 +3721,47 @@ void hugehelp(void)
fputs(
" above command line can also be written as\n"
"\n"
-" curl example.com example.net -o aa -o bb\n"
+" curl example.com example.net -o aa -o bb\n"
"\n"
" See also the --create-dirs option to create the local directo-\n"
" ries dynamically. Specifying the output as '-' (a single dash)\n"
-" will force the output to be done to stdout.\n"
+" passes the output to stdout.\n"
"\n"
" To suppress response bodies, you can redirect output to\n"
" /dev/null:\n"
"\n"
-" curl example.com -o /dev/null\n"
+" curl example.com -o /dev/null\n"
+"\n"
+" Or for Windows:\n"
"\n"
, stdout);
fputs(
-" Or for Windows use nul:\n"
-" curl example.com -o nul\n"
+" curl example.com -o nul\n"
"\n"
-" --output can be used several times in a command line\n"
+" -o, --output can be used several times in a command line\n"
"\n"
" Examples:\n"
" curl -o file https://example.com\n"
" curl \"http://{one,two}.example.com\" -o \"file_#1.txt\"\n"
-" curl \"http://{site,host}.host[1-5].com\" -o \"#1_#2\"\n"
+" curl \"http://{site,host}.host[1-5].example\" -o \"#1_#2\"\n"
" curl -o file https://example.com -o file2 https://example.net\n"
"\n"
+" See also -O, --remote-name, --remote-name-all and -J, --re-\n"
, stdout);
fputs(
-" See also -O, --remote-name, --remote-name-all and -J, --remote-\n"
-" header-name.\n"
+" mote-header-name.\n"
"\n"
" --parallel-immediate\n"
-" When doing parallel transfers, this option will instruct curl\n"
-" that it should rather prefer opening up more connections in par-\n"
-" allel at once rather than waiting to see if new transfers can be\n"
-" added as multiplexed streams on another connection.\n"
+" When doing parallel transfers, this option instructs curl that\n"
+" it should rather prefer opening up more connections in parallel\n"
+" at once rather than waiting to see if new transfers can be added\n"
+" as multiplexed streams on another connection.\n"
"\n"
-, stdout);
- fputs(
" This option is global and does not need to be specified for each\n"
-" use of -:, --next.\n"
+" use of --next.\n"
"\n"
+, stdout);
+ fputs(
" Providing --parallel-immediate multiple times has no extra ef-\n"
" fect. Disable it again with --no-parallel-immediate.\n"
"\n"
@@ -3480,9 +3771,9 @@ void hugehelp(void)
" See also -Z, --parallel and --parallel-max. Added in 7.68.0.\n"
"\n"
" --parallel-max <num>\n"
+" When asked to do parallel transfers, using -Z, --parallel, this\n"
, stdout);
fputs(
-" When asked to do parallel transfers, using -Z, --parallel, this\n"
" option controls the maximum amount of transfers to do simultane-\n"
" ously.\n"
"\n"
@@ -3491,13 +3782,12 @@ void hugehelp(void)
" The default is 50.\n"
"\n"
" If --parallel-max is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
+" is used.\n"
" Example:\n"
-, stdout);
- fputs(
" curl --parallel-max 100 -Z https://example.com ftp://example.com/\n"
"\n"
+, stdout);
+ fputs(
" See also -Z, --parallel. Added in 7.66.0.\n"
"\n"
" -Z, --parallel\n"
@@ -3505,14 +3795,14 @@ void hugehelp(void)
" regular serial manner.\n"
"\n"
" This option is global and does not need to be specified for each\n"
-" use of -:, --next.\n"
+" use of --next.\n"
"\n"
-" Providing --parallel multiple times has no extra effect. Dis-\n"
-, stdout);
- fputs(
-" able it again with --no-parallel.\n"
+" Providing -Z, --parallel multiple times has no extra effect.\n"
+" Disable it again with --no-parallel.\n"
"\n"
" Example:\n"
+, stdout);
+ fputs(
" curl --parallel https://example.com -o file1 https://example.com -o file2\n"
"\n"
" See also -:, --next and -v, --verbose. Added in 7.66.0.\n"
@@ -3520,82 +3810,82 @@ void hugehelp(void)
" --pass <phrase>\n"
" (SSH TLS) Passphrase for the private key.\n"
"\n"
-" If --pass is provided several times, the last set value will be\n"
-" used.\n"
+" If --pass is provided several times, the last set value is used.\n"
"\n"
" Example:\n"
-, stdout);
- fputs(
" curl --pass secret --key file https://example.com\n"
"\n"
" See also --key and -u, --user.\n"
"\n"
" --path-as-is\n"
+, stdout);
+ fputs(
" Tell curl to not handle sequences of /../ or /./ in the given\n"
-" URL path. Normally curl will squash or merge them according to\n"
+" URL path. Normally curl squashes or merges them according to\n"
" standards but with this option set you tell it not to do that.\n"
"\n"
" Providing --path-as-is multiple times has no extra effect. Dis-\n"
" able it again with --no-path-as-is.\n"
"\n"
-, stdout);
- fputs(
" Example:\n"
" curl --path-as-is https://example.com/../../etc/passwd\n"
"\n"
-" See also --request-target. Added in 7.42.0.\n"
+, stdout);
+ fputs(
+" See also --request-target.\n"
"\n"
" --pinnedpubkey <hashes>\n"
-" (TLS) Tells curl to use the specified public key file (or\n"
-" hashes) to verify the peer. This can be a path to a file which\n"
+" (TLS) Tells curl to use the specified public key file (or\n"
+" hashes) to verify the peer. This can be a path to a file which\n"
" contains a single public key in PEM or DER format, or any number\n"
" of base64 encoded sha256 hashes preceded by 'sha256//' and sepa-\n"
+" rated by ';'.\n"
+"\n"
+" When negotiating a TLS or SSL connection, the server sends a\n"
, stdout);
fputs(
-" rated by ';'.\n"
+" certificate indicating its identity. A public key is extracted\n"
+" from this certificate and if it does not exactly match the pub-\n"
+" lic key provided to this option, curl aborts the connection be-\n"
+" fore sending or receiving any data.\n"
"\n"
-" When negotiating a TLS or SSL connection, the server sends a\n"
-" certificate indicating its identity. A public key is extracted\n"
-" from this certificate and if it does not exactly match the pub-\n"
-" lic key provided to this option, curl will abort the connection\n"
-" before sending or receiving any data.\n"
+" This option is independent of option -k, --insecure. If you use\n"
+" both options together then the peer is still verified by public\n"
+" key.\n"
"\n"
" PEM/DER support:\n"
"\n"
-" 7.39.0: OpenSSL, GnuTLS and GSKit\n"
-"\n"
, stdout);
fputs(
-" 7.43.0: NSS and wolfSSL\n"
+" OpenSSL and GnuTLS, wolfSSL (added in 7.43.0), mbedTLS , Secure\n"
+" Transport macOS 10.7+/iOS 10+ (7.54.1), Schannel (7.58.1)\n"
"\n"
-" 7.47.0: mbedtls\n"
" sha256 support:\n"
"\n"
-" 7.44.0: OpenSSL, GnuTLS, NSS and wolfSSL\n"
-"\n"
-" 7.47.0: mbedtls\n"
+" OpenSSL, GnuTLS and wolfSSL, mbedTLS (added in 7.47.0), Secure\n"
+" Transport macOS 10.7+/iOS 10+ (7.54.1), Schannel (7.58.1)\n"
"\n"
" Other SSL backends not supported.\n"
"\n"
-" If --pinnedpubkey is provided several times, the last set value\n"
-" will be used.\n"
+" If --pinnedpubkey is provided several times, the last set value\n"
+" is used.\n"
"\n"
-" Examples:\n"
-" curl --pinnedpubkey keyfile https://example.com\n"
, stdout);
fputs(
+" Examples:\n"
+" curl --pinnedpubkey keyfile https://example.com\n"
" curl --pinnedpubkey 'sha256//ce118b51897f4452dc' https://example.com\n"
"\n"
-" See also --hostpubsha256. Added in 7.39.0.\n"
+" See also --hostpubsha256.\n"
"\n"
" --post301\n"
" (HTTP) Tells curl to respect RFC 7231/6.4.2 and not convert POST\n"
" requests into GET requests when following a 301 redirection. The\n"
" non-RFC behavior is ubiquitous in web browsers, so curl does the\n"
-" conversion by default to maintain consistency. However, a server\n"
, stdout);
fputs(
-" may require a POST to remain a POST after such a redirection.\n"
+" conversion by default to maintain consistency. However, a server\n"
+" may require a POST to remain a POST after such a redirection.\n"
" This option is meaningful only when using -L, --location.\n"
"\n"
" Providing --post301 multiple times has no extra effect. Disable\n"
@@ -3604,20 +3894,20 @@ void hugehelp(void)
" Example:\n"
" curl --post301 --location -d \"data\" https://example.com\n"
"\n"
+, stdout);
+ fputs(
" See also --post302, --post303 and -L, --location.\n"
"\n"
" --post302\n"
-, stdout);
- fputs(
" (HTTP) Tells curl to respect RFC 7231/6.4.3 and not convert POST\n"
" requests into GET requests when following a 302 redirection. The\n"
" non-RFC behavior is ubiquitous in web browsers, so curl does the\n"
" conversion by default to maintain consistency. However, a server\n"
" may require a POST to remain a POST after such a redirection.\n"
-" This option is meaningful only when using -L, --location.\n"
-"\n"
, stdout);
fputs(
+" This option is meaningful only when using -L, --location.\n"
+"\n"
" Providing --post302 multiple times has no extra effect. Disable\n"
" it again with --no-post302.\n"
"\n"
@@ -3628,11 +3918,11 @@ void hugehelp(void)
"\n"
" --post303\n"
" (HTTP) Tells curl to violate RFC 7231/6.4.4 and not convert POST\n"
-" requests into GET requests when following 303 redirections. A\n"
, stdout);
fputs(
-" server may require a POST to remain a POST after a 303 redirect-\n"
-" ion. This option is meaningful only when using -L, --location.\n"
+" requests into GET requests when following 303 redirections. A\n"
+" server may require a POST to remain a POST after a 303 redirec-\n"
+" tion. This option is meaningful only when using -L, --location.\n"
"\n"
" Providing --post303 multiple times has no extra effect. Disable\n"
" it again with --no-post303.\n"
@@ -3640,58 +3930,59 @@ void hugehelp(void)
" Example:\n"
" curl --post303 --location -d \"data\" https://example.com\n"
"\n"
+, stdout);
+ fputs(
" See also --post302, --post301 and -L, --location.\n"
"\n"
" --preproxy [protocol://]host[:port]\n"
-, stdout);
- fputs(
-" Use the specified SOCKS proxy before connecting to an HTTP or\n"
-" HTTPS -x, --proxy. In such a case curl first connects to the\n"
-" SOCKS proxy and then connects (through SOCKS) to the HTTP or\n"
+" Use the specified SOCKS proxy before connecting to an HTTP or\n"
+" HTTPS -x, --proxy. In such a case curl first connects to the\n"
+" SOCKS proxy and then connects (through SOCKS) to the HTTP or\n"
" HTTPS proxy. Hence pre proxy.\n"
"\n"
" The pre proxy string should be specified with a protocol:// pre-\n"
-" fix to specify alternative proxy protocols. Use socks4://,\n"
, stdout);
fputs(
+" fix to specify alternative proxy protocols. Use socks4://,\n"
" socks4a://, socks5:// or socks5h:// to request the specific\n"
-" SOCKS version to be used. No protocol specified will make curl\n"
-" default to SOCKS4.\n"
+" SOCKS version to be used. No protocol specified makes curl de-\n"
+" fault to SOCKS4.\n"
"\n"
" If the port number is not specified in the proxy string, it is\n"
" assumed to be 1080.\n"
"\n"
" User and password that might be provided in the proxy string are\n"
-" URL decoded by curl. This allows you to pass in special charac-\n"
, stdout);
fputs(
+" URL decoded by curl. This allows you to pass in special charac-\n"
" ters such as @ by using %40 or pass in a colon with %3a.\n"
"\n"
-" If --preproxy is provided several times, the last set value will\n"
-" be used.\n"
+" If --preproxy is provided several times, the last set value is\n"
+" used.\n"
+"\n"
" Example:\n"
" curl --preproxy socks5://proxy.example -x http://http.example https://example.com\n"
"\n"
" See also -x, --proxy and --socks5. Added in 7.52.0.\n"
"\n"
" -#, --progress-bar\n"
-" Make curl display transfer progress as a simple progress bar in-\n"
, stdout);
fputs(
+" Make curl display transfer progress as a simple progress bar in-\n"
" stead of the standard, more informational, meter.\n"
"\n"
" This progress bar draws a single line of '#' characters across\n"
" the screen and shows a percentage if the transfer size is known.\n"
-" For transfers without a known size, there will be space ship\n"
-" (-=o=-) that moves back and forth but only while data is being\n"
-" transferred, with a set of flying hash sign symbols on top.\n"
-"\n"
+" For transfers without a known size, there is a space ship\n"
+" (-=o=-) that moves back and forth but only while data is being\n"
, stdout);
fputs(
+" transferred, with a set of flying hash sign symbols on top.\n"
+"\n"
" This option is global and does not need to be specified for each\n"
-" use of -:, --next.\n"
+" use of --next.\n"
"\n"
-" Providing --progress-bar multiple times has no extra effect.\n"
+" Providing -#, --progress-bar multiple times has no extra effect.\n"
" Disable it again with --no-progress-bar.\n"
"\n"
" Example:\n"
@@ -3700,11 +3991,11 @@ void hugehelp(void)
" See also --styled-output.\n"
"\n"
" --proto-default <protocol>\n"
-" Tells curl to use protocol for any URL missing a scheme name.\n"
-"\n"
, stdout);
fputs(
-" An unknown or unsupported protocol causes error CURLE_UNSUP-\n"
+" Tells curl to use protocol for any URL missing a scheme name.\n"
+"\n"
+" An unknown or unsupported protocol causes error CURLE_UNSUP-\n"
" PORTED_PROTOCOL (1).\n"
"\n"
" This option does not change the default proxy protocol (http).\n"
@@ -3713,18 +4004,17 @@ void hugehelp(void)
" name, see --url for details.\n"
"\n"
" If --proto-default is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
-" Example:\n"
+" is used.\n"
, stdout);
fputs(
+" Example:\n"
" curl --proto-default https ftp.example.com\n"
"\n"
-" See also --proto and --proto-redir. Added in 7.45.0.\n"
+" See also --proto and --proto-redir.\n"
"\n"
" --proto-redir <protocols>\n"
-" Tells curl to limit what protocols it may use on redirect. Pro-\n"
-" tocols denied by --proto are not overridden by this option. See\n"
+" Tells curl to limit what protocols it may use on redirect. Pro-\n"
+" tocols denied by --proto are not overridden by this option. See\n"
" --proto for how protocols are represented.\n"
"\n"
" Example, allow only HTTP and HTTPS on redirect:\n"
@@ -3733,13 +4023,12 @@ void hugehelp(void)
fputs(
" curl --proto-redir -all,http,https http://example.com\n"
"\n"
-" By default curl will only allow HTTP, HTTPS, FTP and FTPS on re-\n"
-" direct (since 7.65.2). Specifying all or +all enables all proto-\n"
-" cols on redirects, which is not good for security.\n"
+" By default curl only allows HTTP, HTTPS, FTP and FTPS on redi-\n"
+" rects (added in 7.65.2). Specifying all or +all enables all pro-\n"
+" tocols on redirects, which is not good for security.\n"
"\n"
" If --proto-redir is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
+" is used.\n"
" Example:\n"
" curl --proto-redir =http,https https://example.com\n"
"\n"
@@ -3758,11 +4047,11 @@ void hugehelp(void)
fputs(
" ted (this is the default if no modifier is used).\n"
"\n"
-" - Deny this protocol, removing it from the list of protocols\n"
+" - Deny this protocol, removing it from the list of protocols\n"
" already permitted.\n"
"\n"
-" = Permit only this protocol (ignoring the list already permit-\n"
-" ted), though subject to later modification by subsequent en-\n"
+" = Permit only this protocol (ignoring the list already permit-\n"
+" ted), though subject to later modification by subsequent en-\n"
" tries in the comma separated list.\n"
"\n"
" For example:\n"
@@ -3777,7 +4066,7 @@ void hugehelp(void)
" --proto =http,https\n"
" also only enables http and https\n"
"\n"
-" Unknown and disabled protocols produce a warning. This allows\n"
+" Unknown and disabled protocols produce a warning. This allows\n"
" scripts to safely rely on being able to disable potentially dan-\n"
" gerous protocols, without relying upon support for that protocol\n"
" being built into curl to avoid an error.\n"
@@ -3788,7 +4077,7 @@ void hugehelp(void)
" is the same as concatenating the protocols into one instance of\n"
" the option.\n"
"\n"
-" If --proto is provided several times, the last set value will be\n"
+" If --proto is provided several times, the last set value is\n"
" used.\n"
"\n"
" Example:\n"
@@ -3815,7 +4104,7 @@ void hugehelp(void)
fputs(
" Tells curl to use HTTP Basic authentication when communicating\n"
" with the given proxy. Use --basic for enabling HTTP Basic with a\n"
-" remote host. Basic is the default authentication method curl\n"
+" remote host. Basic is the default authentication method curl\n"
" uses with proxies.\n"
"\n"
" Providing --proxy-basic multiple times has no extra effect.\n"
@@ -3827,12 +4116,36 @@ void hugehelp(void)
fputs(
" See also -x, --proxy, --proxy-anyauth and --proxy-digest.\n"
"\n"
+" --proxy-ca-native\n"
+" (TLS) Tells curl to use the CA store from the native operating\n"
+" system to verify the HTTPS proxy. By default, curl uses a CA\n"
+" store provided in a single file or directory, but when using\n"
+" this option it interfaces the operating system's own vault.\n"
+"\n"
+" This option only works for curl on Windows when built to use\n"
+, stdout);
+ fputs(
+" OpenSSL. When curl on Windows is built to use Schannel, this\n"
+" feature is implied and curl then only uses the native CA store.\n"
+"\n"
+" curl built with wolfSSL also supports this option (added in\n"
+" 8.3.0).\n"
+"\n"
+" Providing --proxy-ca-native multiple times has no extra effect.\n"
+" Disable it again with --no-proxy-ca-native.\n"
+"\n"
+" Example:\n"
+" curl --ca-native https://example.com\n"
+"\n"
+, stdout);
+ fputs(
+" See also --cacert, --capath and -k, --insecure. Added in 8.2.0.\n"
+"\n"
" --proxy-cacert <file>\n"
" Same as --cacert but used in HTTPS proxy context.\n"
"\n"
" If --proxy-cacert is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
+" is used.\n"
" Example:\n"
" curl --proxy-cacert CA-file.txt -x https://proxy https://example.com\n"
"\n"
@@ -3845,8 +4158,7 @@ void hugehelp(void)
" Same as --capath but used in HTTPS proxy context.\n"
"\n"
" If --proxy-capath is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
+" is used.\n"
" Example:\n"
" curl --proxy-capath /local/directory -x https://proxy https://example.com\n"
"\n"
@@ -3859,7 +4171,7 @@ void hugehelp(void)
" Same as --cert-type but used in HTTPS proxy context.\n"
"\n"
" If --proxy-cert-type is provided several times, the last set\n"
-" value will be used.\n"
+" value is used.\n"
"\n"
" Example:\n"
" curl --proxy-cert-type PEM --proxy-cert file -x https://proxy https://example.com\n"
@@ -3867,12 +4179,12 @@ void hugehelp(void)
" See also --proxy-cert. Added in 7.52.0.\n"
"\n"
" --proxy-cert <cert[:passwd]>\n"
-" Same as --cert but used in HTTPS proxy context.\n"
+" Same as -E, --cert but used in HTTPS proxy context.\n"
"\n"
, stdout);
fputs(
-" If --proxy-cert is provided several times, the last set value\n"
-" will be used.\n"
+" If --proxy-cert is provided several times, the last set value is\n"
+" used.\n"
"\n"
" Example:\n"
" curl --proxy-cert file -x https://proxy https://example.com\n"
@@ -3882,31 +4194,37 @@ void hugehelp(void)
" --proxy-ciphers <list>\n"
" Same as --ciphers but used in HTTPS proxy context.\n"
"\n"
-" If --proxy-ciphers is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
-" Example:\n"
+" Specifies which ciphers to use in the connection to the HTTPS\n"
, stdout);
fputs(
+" proxy. The list of ciphers must specify valid ciphers. Read up\n"
+" on SSL cipher list details on this URL:\n"
+"\n"
+" https://curl.se/docs/ssl-ciphers.html\n"
+"\n"
+" If --proxy-ciphers is provided several times, the last set value\n"
+" is used.\n"
+" Example:\n"
" curl --proxy-ciphers ECDHE-ECDSA-AES256-CCM8 -x https://proxy https://example.com\n"
"\n"
" See also --ciphers, --curves and -x, --proxy. Added in 7.52.0.\n"
"\n"
+, stdout);
+ fputs(
" --proxy-crlfile <file>\n"
" Same as --crlfile but used in HTTPS proxy context.\n"
"\n"
" If --proxy-crlfile is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
+" is used.\n"
" Example:\n"
" curl --proxy-crlfile rejects.txt -x https://proxy https://example.com\n"
"\n"
-, stdout);
- fputs(
" See also --crlfile and -x, --proxy. Added in 7.52.0.\n"
"\n"
" --proxy-digest\n"
-" Tells curl to use HTTP Digest authentication when communicating\n"
+" Tells curl to use HTTP Digest authentication when communicating\n"
+, stdout);
+ fputs(
" with the given proxy. Use --digest for enabling HTTP Digest with\n"
" a remote host.\n"
"\n"
@@ -3915,56 +4233,75 @@ void hugehelp(void)
" Example:\n"
" curl --proxy-digest --proxy-user user:passwd -x proxy https://example.com\n"
"\n"
-, stdout);
- fputs(
" See also -x, --proxy, --proxy-anyauth and --proxy-basic.\n"
"\n"
" --proxy-header <header/@file>\n"
" (HTTP) Extra header to include in the request when sending HTTP\n"
+, stdout);
+ fputs(
" to a proxy. You may specify any number of extra headers. This is\n"
-" the equivalent option to --header but is for proxy communication\n"
-" only like in CONNECT requests when you want a separate header\n"
-" sent to the proxy to what is sent to the actual remote host.\n"
+" the equivalent option to -H, --header but is for proxy communi-\n"
+" cation only like in CONNECT requests when you want a separate\n"
+" header sent to the proxy to what is sent to the actual remote\n"
+" host.\n"
+"\n"
+" curl makes sure that each header you add/replace is sent with\n"
+" the proper end-of-line marker, you should thus not add that as a\n"
, stdout);
fputs(
+" part of the header content: do not add newlines or carriage re-\n"
+" turns, they only mess things up for you.\n"
"\n"
-" curl will make sure that each header you add/replace is sent\n"
-" with the proper end-of-line marker, you should thus not add that\n"
-" as a part of the header content: do not add newlines or carriage\n"
-" returns, they will only mess things up for you.\n"
+" Headers specified with this option are not included in requests\n"
+" that curl knows are not be sent to a proxy.\n"
"\n"
-" Headers specified with this option will not be included in re-\n"
-" quests that curl knows will not be sent to a proxy.\n"
+" This option can take an argument in @filename style, which then\n"
+" adds a header for each line in the input file (added in 7.55.0).\n"
+" Using @- makes curl read the headers from stdin.\n"
"\n"
, stdout);
fputs(
-" Starting in 7.55.0, this option can take an argument in @file-\n"
-" name style, which then adds a header for each line in the input\n"
-" file. Using @- will make curl read the header file from stdin.\n"
-"\n"
" This option can be used multiple times to add/replace/remove\n"
" multiple headers.\n"
"\n"
" --proxy-header can be used several times in a command line\n"
"\n"
" Examples:\n"
-, stdout);
- fputs(
" curl --proxy-header \"X-First-Name: Joe\" -x http://proxy https://example.com\n"
" curl --proxy-header \"User-Agent: surprise\" -x http://proxy https://example.com\n"
" curl --proxy-header \"Host:\" -x http://proxy https://example.com\n"
"\n"
-" See also -x, --proxy. Added in 7.37.0.\n"
+, stdout);
+ fputs(
+" See also -x, --proxy.\n"
"\n"
-" --proxy-insecure\n"
-" Same as --insecure but used in HTTPS proxy context.\n"
+" --proxy-http2\n"
+" (HTTP) Tells curl to try negotiate HTTP version 2 with an HTTPS\n"
+" proxy. The proxy might still only offer HTTP/1 and then curl\n"
+" sticks to using that version.\n"
+"\n"
+" This has no effect for any other kinds of proxies.\n"
"\n"
-" Providing --proxy-insecure multiple times has no extra effect.\n"
+" Providing --proxy-http2 multiple times has no extra effect.\n"
+" Disable it again with --no-proxy-http2.\n"
+"\n"
+" Example:\n"
, stdout);
fputs(
+" curl --proxy-http2 -x proxy https://example.com\n"
+"\n"
+" See also -x, --proxy. --proxy-http2 requires that the underlying\n"
+" libcurl was built to support HTTP/2. Added in 8.1.0.\n"
+"\n"
+" --proxy-insecure\n"
+" Same as -k, --insecure but used in HTTPS proxy context.\n"
+"\n"
+" Providing --proxy-insecure multiple times has no extra effect.\n"
" Disable it again with --no-proxy-insecure.\n"
"\n"
" Example:\n"
+, stdout);
+ fputs(
" curl --proxy-insecure -x https://proxy https://example.com\n"
"\n"
" See also -x, --proxy and -k, --insecure. Added in 7.52.0.\n"
@@ -3972,44 +4309,44 @@ void hugehelp(void)
" --proxy-key-type <type>\n"
" Same as --key-type but used in HTTPS proxy context.\n"
"\n"
-" If --proxy-key-type is provided several times, the last set\n"
-" value will be used.\n"
+" If --proxy-key-type is provided several times, the last set\n"
+" value is used.\n"
"\n"
" Example:\n"
-, stdout);
- fputs(
" curl --proxy-key-type DER --proxy-key here -x https://proxy https://example.com\n"
"\n"
+, stdout);
+ fputs(
" See also --proxy-key and -x, --proxy. Added in 7.52.0.\n"
"\n"
" --proxy-key <key>\n"
" Same as --key but used in HTTPS proxy context.\n"
"\n"
-" If --proxy-key is provided several times, the last set value\n"
-" will be used.\n"
+" If --proxy-key is provided several times, the last set value is\n"
+" used.\n"
"\n"
" Example:\n"
" curl --proxy-key here -x https://proxy https://example.com\n"
"\n"
-, stdout);
- fputs(
" See also --proxy-key-type and -x, --proxy. Added in 7.52.0.\n"
"\n"
" --proxy-negotiate\n"
-" Tells curl to use HTTP Negotiate (SPNEGO) authentication when\n"
+, stdout);
+ fputs(
+" Tells curl to use HTTP Negotiate (SPNEGO) authentication when\n"
" communicating with the given proxy. Use --negotiate for enabling\n"
" HTTP Negotiate (SPNEGO) with a remote host.\n"
"\n"
" Providing --proxy-negotiate multiple times has no extra effect.\n"
"\n"
" Example:\n"
-, stdout);
- fputs(
" curl --proxy-negotiate --proxy-user user:passwd -x proxy https://example.com\n"
"\n"
" See also --proxy-anyauth and --proxy-basic.\n"
"\n"
" --proxy-ntlm\n"
+, stdout);
+ fputs(
" Tells curl to use HTTP NTLM authentication when communicating\n"
" with the given proxy. Use --ntlm for enabling NTLM with a remote\n"
" host.\n"
@@ -4017,47 +4354,47 @@ void hugehelp(void)
" Providing --proxy-ntlm multiple times has no extra effect.\n"
"\n"
" Example:\n"
-, stdout);
- fputs(
" curl --proxy-ntlm --proxy-user user:passwd -x http://proxy https://example.com\n"
"\n"
" See also --proxy-negotiate and --proxy-anyauth.\n"
"\n"
" --proxy-pass <phrase>\n"
+, stdout);
+ fputs(
" Same as --pass but used in HTTPS proxy context.\n"
"\n"
-" If --proxy-pass is provided several times, the last set value\n"
-" will be used.\n"
+" If --proxy-pass is provided several times, the last set value is\n"
+" used.\n"
"\n"
" Example:\n"
" curl --proxy-pass secret --proxy-key here -x https://proxy https://example.com\n"
"\n"
-, stdout);
- fputs(
" See also -x, --proxy and --proxy-key. Added in 7.52.0.\n"
"\n"
" --proxy-pinnedpubkey <hashes>\n"
" (TLS) Tells curl to use the specified public key file (or\n"
+, stdout);
+ fputs(
" hashes) to verify the proxy. This can be a path to a file which\n"
" contains a single public key in PEM or DER format, or any number\n"
" of base64 encoded sha256 hashes preceded by 'sha256//' and sepa-\n"
" rated by ';'.\n"
"\n"
-, stdout);
- fputs(
" When negotiating a TLS or SSL connection, the server sends a\n"
" certificate indicating its identity. A public key is extracted\n"
+, stdout);
+ fputs(
" from this certificate and if it does not exactly match the pub-\n"
-" lic key provided to this option, curl will abort the connection\n"
-" before sending or receiving any data.\n"
+" lic key provided to this option, curl aborts the connection be-\n"
+" fore sending or receiving any data.\n"
"\n"
" If --proxy-pinnedpubkey is provided several times, the last set\n"
-" value will be used.\n"
+" value is used.\n"
"\n"
-, stdout);
- fputs(
" Examples:\n"
" curl --proxy-pinnedpubkey keyfile https://example.com\n"
+, stdout);
+ fputs(
" curl --proxy-pinnedpubkey 'sha256//ce118b51897f4452dc' https://example.com\n"
"\n"
" See also --pinnedpubkey and -x, --proxy. Added in 7.59.0.\n"
@@ -4067,14 +4404,14 @@ void hugehelp(void)
" gotiation.\n"
"\n"
" If --proxy-service-name is provided several times, the last set\n"
-, stdout);
- fputs(
-" value will be used.\n"
+" value is used.\n"
"\n"
" Example:\n"
+, stdout);
+ fputs(
" curl --proxy-service-name \"shrubbery\" -x proxy https://example.com\n"
"\n"
-" See also --service-name and -x, --proxy. Added in 7.43.0.\n"
+" See also --service-name and -x, --proxy.\n"
"\n"
" --proxy-ssl-allow-beast\n"
" Same as --ssl-allow-beast but used in HTTPS proxy context.\n"
@@ -4093,47 +4430,48 @@ void hugehelp(void)
" Same as --ssl-auto-client-cert but used in HTTPS proxy context.\n"
"\n"
" Providing --proxy-ssl-auto-client-cert multiple times has no ex-\n"
-" tra effect. Disable it again with --no-proxy-ssl-auto-client-\n"
-" cert.\n"
+" tra effect. Disable it again with\n"
+" --no-proxy-ssl-auto-client-cert.\n"
"\n"
-" Example:\n"
, stdout);
fputs(
+" Example:\n"
" curl --proxy-ssl-auto-client-cert -x https://proxy https://example.com\n"
"\n"
" See also --ssl-auto-client-cert and -x, --proxy. Added in\n"
" 7.77.0.\n"
"\n"
" --proxy-tls13-ciphers <ciphersuite list>\n"
-" (TLS) Specifies which cipher suites to use in the connection to\n"
+" (TLS) Specifies which cipher suites to use in the connection to\n"
" your HTTPS proxy when it negotiates TLS 1.3. The list of ciphers\n"
" suites must specify valid ciphers. Read up on TLS 1.3 cipher\n"
, stdout);
fputs(
" suite details on this URL:\n"
"\n"
-" https://curl.se/docs/ssl-ciphers.html\n"
+" https://curl.se/docs/ssl-ciphers.html\n"
"\n"
" This option is currently used only when curl is built to use\n"
" OpenSSL 1.1.1 or later. If you are using a different SSL backend\n"
-" you can try setting TLS 1.3 cipher suites by using the --proxy-\n"
-" ciphers option.\n"
+" you can try setting TLS 1.3 cipher suites by using the\n"
+" --proxy-ciphers option.\n"
"\n"
" If --proxy-tls13-ciphers is provided several times, the last set\n"
-" value will be used.\n"
+" value is used.\n"
"\n"
, stdout);
fputs(
" Example:\n"
" curl --proxy-tls13-ciphers TLS_AES_128_GCM_SHA256 -x proxy https://example.com\n"
"\n"
-" See also --tls13-ciphers and --curves. Added in 7.61.0.\n"
+" See also --tls13-ciphers, --curves and --proxy-ciphers. Added in\n"
+" 7.61.0.\n"
"\n"
" --proxy-tlsauthtype <type>\n"
" Same as --tlsauthtype but used in HTTPS proxy context.\n"
"\n"
" If --proxy-tlsauthtype is provided several times, the last set\n"
-" value will be used.\n"
+" value is used.\n"
"\n"
" Example:\n"
, stdout);
@@ -4146,7 +4484,7 @@ void hugehelp(void)
" Same as --tlspassword but used in HTTPS proxy context.\n"
"\n"
" If --proxy-tlspassword is provided several times, the last set\n"
-" value will be used.\n"
+" value is used.\n"
"\n"
" Example:\n"
" curl --proxy-tlspassword passwd -x https://proxy https://example.com\n"
@@ -4159,8 +4497,7 @@ void hugehelp(void)
" Same as --tlsuser but used in HTTPS proxy context.\n"
"\n"
" If --proxy-tlsuser is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
+" is used.\n"
" Example:\n"
" curl --proxy-tlsuser smith -x https://proxy https://example.com\n"
"\n"
@@ -4169,7 +4506,7 @@ void hugehelp(void)
" --proxy-tlsv1\n"
, stdout);
fputs(
-" Same as --tlsv1 but used in HTTPS proxy context.\n"
+" Same as -1, --tlsv1 but used in HTTPS proxy context.\n"
"\n"
" Providing --proxy-tlsv1 multiple times has no extra effect.\n"
"\n"
@@ -4179,82 +4516,90 @@ void hugehelp(void)
" See also -x, --proxy. Added in 7.52.0.\n"
"\n"
" -U, --proxy-user <user:password>\n"
-" Specify the user name and password to use for proxy authentica-\n"
+" Specify the user name and password to use for proxy authentica-\n"
" tion.\n"
"\n"
, stdout);
fputs(
-" If you use a Windows SSPI-enabled curl binary and do either Ne-\n"
-" gotiate or NTLM authentication then you can tell curl to select\n"
+" If you use a Windows SSPI-enabled curl binary and do either Ne-\n"
+" gotiate or NTLM authentication then you can tell curl to select\n"
" the user name and password from your environment by specifying a\n"
" single colon with this option: \"-U :\".\n"
"\n"
-" On systems where it works, curl will hide the given option argu-\n"
-" ment from process listings. This is not enough to protect cre-\n"
+" On systems where it works, curl hides the given option argument\n"
+" from process listings. This is not enough to protect credentials\n"
, stdout);
fputs(
-" dentials from possibly getting seen by other users on the same\n"
-" system as they will still be visible for a moment before\n"
-" cleared. Such sensitive data should be retrieved from a file in-\n"
-" stead or similar and never used in clear text in a command line.\n"
-" If --proxy-user is provided several times, the last set value\n"
-" will be used.\n"
+" from possibly getting seen by other users on the same system as\n"
+" they still are visible for a moment before cleared. Such sensi-\n"
+" tive data should be retrieved from a file instead or similar and\n"
+" never used in clear text in a command line.\n"
+"\n"
+" If -U, --proxy-user is provided several times, the last set\n"
+" value is used.\n"
"\n"
" Example:\n"
-, stdout);
- fputs(
" curl --proxy-user name:pwd -x proxy https://example.com\n"
"\n"
+, stdout);
+ fputs(
" See also --proxy-pass.\n"
"\n"
" -x, --proxy [protocol://]host[:port]\n"
" Use the specified proxy.\n"
"\n"
" The proxy string can be specified with a protocol:// prefix. No\n"
-" protocol specified or http:// will be treated as HTTP proxy. Use\n"
-" socks4://, socks4a://, socks5:// or socks5h:// to request a spe-\n"
-" cific SOCKS version to be used.\n"
+" protocol specified or http:// it is treated as an HTTP proxy.\n"
+" Use socks4://, socks4a://, socks5:// or socks5h:// to request a\n"
+" specific SOCKS version to be used.\n"
"\n"
+" Unix domain sockets are supported for socks proxy. Set localhost\n"
, stdout);
fputs(
-" Unix domain sockets are supported for socks proxy. Set localhost\n"
" for the host part. e.g. socks5h://localhost/path/to/socket.sock\n"
"\n"
-" HTTPS proxy support via https:// protocol prefix was added in\n"
-" 7.52.0 for OpenSSL, GnuTLS and NSS.\n"
+" HTTPS proxy support works set with the https:// protocol prefix\n"
+" for OpenSSL and GnuTLS (added in 7.52.0). It also works for\n"
+" BearSSL, mbedTLS, rustls, Schannel, Secure Transport and wolfSSL\n"
+" (added in 7.87.0).\n"
"\n"
" Unrecognized and unsupported proxy protocols cause an error\n"
-" since 7.52.0. Prior versions may ignore the protocol and use\n"
-" http:// instead.\n"
-"\n"
, stdout);
fputs(
+" (added in 7.52.0). Ancient curl versions ignored unknown\n"
+" schemes and used http:// instead.\n"
+"\n"
" If the port number is not specified in the proxy string, it is\n"
" assumed to be 1080.\n"
"\n"
" This option overrides existing environment variables that set\n"
-" the proxy to use. If there's an environment variable setting a\n"
+" the proxy to use. If there is an environment variable setting a\n"
" proxy, you can set proxy to \"\" to override it.\n"
"\n"
-" All operations that are performed over an HTTP proxy will trans-\n"
-" parently be converted to HTTP. It means that certain protocol\n"
, stdout);
fputs(
-" specific operations might not be available. This is not the case\n"
-" if you can tunnel through the proxy, as one with the --proxytun-\n"
-" nel option.\n"
+" All operations that are performed over an HTTP proxy are trans-\n"
+" parently converted to HTTP. It means that certain protocol spe-\n"
+" cific operations might not be available. This is not the case if\n"
+" you can tunnel through the proxy, as one with the -p, --proxy-\n"
+" tunnel option.\n"
"\n"
" User and password that might be provided in the proxy string are\n"
+, stdout);
+ fputs(
" URL decoded by curl. This allows you to pass in special charac-\n"
" ters such as @ by using %40 or pass in a colon with %3a.\n"
"\n"
" The proxy host can be specified the same way as the proxy envi-\n"
-, stdout);
- fputs(
" ronment variables, including the protocol prefix (http://) and\n"
" the embedded user + password.\n"
"\n"
-" If --proxy is provided several times, the last set value will be\n"
+" When a proxy is used, the active FTP mode as set with -P,\n"
+" --ftp-port, cannot be used.\n"
+"\n"
+, stdout);
+ fputs(
+" If -x, --proxy is provided several times, the last set value is\n"
" used.\n"
"\n"
" Example:\n"
@@ -4263,37 +4608,37 @@ void hugehelp(void)
" See also --socks5 and --proxy-basic.\n"
"\n"
" --proxy1.0 <host[:port]>\n"
-" Use the specified HTTP 1.0 proxy. If the port number is not\n"
-, stdout);
- fputs(
+" Use the specified HTTP 1.0 proxy. If the port number is not\n"
" specified, it is assumed at port 1080.\n"
"\n"
-" The only difference between this and the HTTP proxy option -x,\n"
-" --proxy, is that attempts to use CONNECT through the proxy will\n"
-" specify an HTTP 1.0 protocol instead of the default HTTP 1.1.\n"
+" The only difference between this and the HTTP proxy option -x,\n"
+, stdout);
+ fputs(
+" --proxy, is that attempts to use CONNECT through the proxy spec-\n"
+" ifies an HTTP 1.0 protocol instead of the default HTTP 1.1.\n"
"\n"
" Providing --proxy1.0 multiple times has no extra effect.\n"
"\n"
" Example:\n"
" curl --proxy1.0 -x http://proxy https://example.com\n"
"\n"
-, stdout);
- fputs(
" See also -x, --proxy, --socks5 and --preproxy.\n"
"\n"
" -p, --proxytunnel\n"
-" When an HTTP proxy is used -x, --proxy, this option will make\n"
-" curl tunnel through the proxy. The tunnel approach is made with\n"
-" the HTTP proxy CONNECT request and requires that the proxy al-\n"
-" lows direct connect to the remote port number curl wants to tun-\n"
-" nel through to.\n"
-"\n"
+" When an HTTP proxy is used -x, --proxy, this option makes curl\n"
, stdout);
fputs(
-" To suppress proxy CONNECT response headers when curl is set to\n"
+" tunnel the traffic through the proxy. The tunnel approach is\n"
+" made with the HTTP proxy CONNECT request and requires that the\n"
+" proxy allows direct connect to the remote port number curl wants\n"
+" to tunnel through to.\n"
+"\n"
+" To suppress proxy CONNECT response headers when curl is set to\n"
" output headers use --suppress-connect-headers.\n"
"\n"
-" Providing --proxytunnel multiple times has no extra effect.\n"
+" Providing -p, --proxytunnel multiple times has no extra effect.\n"
+, stdout);
+ fputs(
" Disable it again with --no-proxytunnel.\n"
"\n"
" Example:\n"
@@ -4302,163 +4647,160 @@ void hugehelp(void)
" See also -x, --proxy.\n"
"\n"
" --pubkey <key>\n"
-, stdout);
- fputs(
" (SFTP SCP) Public key file name. Allows you to provide your pub-\n"
" lic key in this separate file.\n"
"\n"
-" (As of 7.39.0, curl attempts to automatically extract the public\n"
-" key from the private key file, so passing this option is gener-\n"
-" ally not required. Note that this public key extraction requires\n"
-" libcurl to be linked against a copy of libssh2 1.2.8 or higher\n"
-" that is itself linked against OpenSSL.)\n"
-"\n"
+" curl attempts to automatically extract the public key from the\n"
+" private key file, so passing this option is generally not re-\n"
, stdout);
fputs(
-" If --pubkey is provided several times, the last set value will\n"
-" be used.\n"
+" quired. Note that this public key extraction requires libcurl to\n"
+" be linked against a copy of libssh2 1.2.8 or higher that is it-\n"
+" self linked against OpenSSL.\n"
+"\n"
+" If --pubkey is provided several times, the last set value is\n"
+" used.\n"
+"\n"
" Example:\n"
" curl --pubkey file.pub sftp://example.com/\n"
"\n"
" See also --pass.\n"
"\n"
" -Q, --quote <command>\n"
-" (FTP SFTP) Send an arbitrary command to the remote FTP or SFTP\n"
-" server. Quote commands are sent BEFORE the transfer takes place\n"
-" (just after the initial PWD command in an FTP transfer, to be\n"
, stdout);
fputs(
+" (FTP SFTP) Send an arbitrary command to the remote FTP or SFTP\n"
+" server. Quote commands are sent BEFORE the transfer takes place\n"
+" (just after the initial PWD command in an FTP transfer, to be\n"
" exact). To make commands take place after a successful transfer,\n"
" prefix them with a dash '-'.\n"
"\n"
" (FTP only) To make commands be sent after curl has changed the\n"
+, stdout);
+ fputs(
" working directory, just before the file transfer command(s),\n"
" prefix the command with a '+'. This is not performed when a di-\n"
" rectory listing is performed.\n"
"\n"
" You may specify any number of commands.\n"
"\n"
+" By default curl stops at first failure. To make curl continue\n"
+" even if the command fails, prefix the command with an asterisk\n"
+" (*). Otherwise, if the server returns failure for one of the\n"
, stdout);
fputs(
-" By default curl will stop at first failure. To make curl con-\n"
-" tinue even if the command fails, prefix the command with an as-\n"
-" terisk (*). Otherwise, if the server returns failure for one of\n"
-" the commands, the entire operation will be aborted.\n"
+" commands, the entire operation is aborted.\n"
"\n"
" You must send syntactically correct FTP commands as RFC 959 de-\n"
" fines to FTP servers, or one of the commands listed below to\n"
" SFTP servers.\n"
"\n"
-, stdout);
- fputs(
-" This option can be used multiple times.\n"
-"\n"
" SFTP is a binary protocol. Unlike for FTP, curl interprets SFTP\n"
" quote commands itself before sending them to the server. File\n"
" names may be quoted shell-style to embed spaces or special char-\n"
-" acters. Following is the list of all supported SFTP quote com-\n"
-" mands:\n"
-"\n"
-" atime date file\n"
, stdout);
fputs(
-" The atime command sets the last access time of the file\n"
-" named by the file operand. The <date expression> can be\n"
-" all sorts of date strings, see the curl_getdate(3) man\n"
+" acters. Following is the list of all supported SFTP quote com-\n"
+" mands:\n"
+"\n"
+" \"atime date file\"\n"
+" The atime command sets the last access time of the file\n"
+" named by the file operand. The <date expression> can be\n"
+" all sorts of date strings, see the curl_getdate(3) man\n"
" page for date expression details. (Added in 7.73.0)\n"
"\n"
-" chgrp group file\n"
-" The chgrp command sets the group ID of the file named by\n"
-" the file operand to the group ID specified by the group\n"
+" \"chgrp group file\"\n"
, stdout);
fputs(
+" The chgrp command sets the group ID of the file named by\n"
+" the file operand to the group ID specified by the group\n"
" operand. The group operand is a decimal integer group ID.\n"
"\n"
-" chmod mode file\n"
-" The chmod command modifies the file mode bits of the\n"
+" \"chmod mode file\"\n"
+" The chmod command modifies the file mode bits of the\n"
" specified file. The mode operand is an octal integer mode\n"
" number.\n"
"\n"
-" chown user file\n"
-" The chown command sets the owner of the file named by the\n"
-" file operand to the user ID specified by the user oper-\n"
+" \"chown user file\"\n"
, stdout);
fputs(
-" and. The user operand is a decimal integer user ID.\n"
+" The chown command sets the owner of the file named by the\n"
+" file operand to the user ID specified by the user\n"
+" operand. The user operand is a decimal integer user ID.\n"
"\n"
-" ln source_file target_file\n"
+" \"ln source_file target_file\"\n"
" The ln and symlink commands create a symbolic link at the\n"
" target_file location pointing to the source_file loca-\n"
" tion.\n"
"\n"
-" mkdir directory_name\n"
+, stdout);
+ fputs(
+" \"mkdir directory_name\"\n"
" The mkdir command creates the directory named by the di-\n"
" rectory_name operand.\n"
"\n"
-" mtime date file\n"
-, stdout);
- fputs(
+" \"mtime date file\"\n"
" The mtime command sets the last modification time of the\n"
" file named by the file operand. The <date expression> can\n"
" be all sorts of date strings, see the curl_getdate(3) man\n"
+, stdout);
+ fputs(
" page for date expression details. (Added in 7.73.0)\n"
"\n"
-" pwd The pwd command returns the absolute pathname of the cur-\n"
-" rent working directory.\n"
+" \"pwd\" The pwd command returns the absolute path name of the\n"
+" current working directory.\n"
"\n"
-" rename source target\n"
-, stdout);
- fputs(
+" \"rename source target\"\n"
" The rename command renames the file or directory named by\n"
-" the source operand to the destination path named by the\n"
+" the source operand to the destination path named by the\n"
" target operand.\n"
"\n"
-" rm file\n"
-" The rm command removes the file specified by the file op-\n"
-" erand.\n"
-"\n"
-" rmdir directory\n"
-" The rmdir command removes the directory entry specified\n"
+" \"rm file\"\n"
, stdout);
fputs(
+" The rm command removes the file specified by the file\n"
+" operand.\n"
+"\n"
+" \"rmdir directory\"\n"
+" The rmdir command removes the directory entry specified\n"
" by the directory operand, provided it is empty.\n"
"\n"
-" symlink source_file target_file\n"
+" \"symlink source_file target_file\"\n"
" See ln.\n"
"\n"
-" --quote can be used several times in a command line\n"
+" -Q, --quote can be used several times in a command line\n"
"\n"
-" Example:\n"
-" curl --quote \"DELE file\" ftp://example.com/foo\n"
+" Example:\n"
+, stdout);
+ fputs(
+" curl --quote \"DELE file\" ftp://example.com/foo\n"
"\n"
-" See also -X, --request.\n"
+" See also -X, --request.\n"
"\n"
" --random-file <file>\n"
-" Deprecated option. This option is ignored by curl since 7.84.0.\n"
-" Prior to that it only had an effect on curl if built to use old\n"
-, stdout);
- fputs(
+" Deprecated option. This option is ignored (added in 7.84.0).\n"
+" Prior to that it only had an effect on curl if built to use old\n"
" versions of OpenSSL.\n"
"\n"
-" Specify the path name to file containing what will be considered\n"
-" as random data. The data may be used to seed the random engine\n"
-" for SSL connections.\n"
+" Specify the path name to file containing random data. The data\n"
+" may be used to seed the random engine for SSL connections.\n"
"\n"
+, stdout);
+ fputs(
" If --random-file is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
+" is used.\n"
" Example:\n"
" curl --random-file rubbish https://example.com\n"
"\n"
" See also --egd-file.\n"
"\n"
" -r, --range <range>\n"
-, stdout);
- fputs(
" (HTTP FTP SFTP FILE) Retrieve a byte range (i.e. a partial docu-\n"
-" ment) from an HTTP/1.1, FTP or SFTP server or a local FILE.\n"
+" ment) from an HTTP/1.1, FTP or SFTP server or a local FILE.\n"
" Ranges can be specified in a number of ways.\n"
"\n"
+, stdout);
+ fputs(
" 0-499 specifies the first 500 bytes\n"
"\n"
" 500-999 specifies the second 500 bytes\n"
@@ -4467,95 +4809,96 @@ void hugehelp(void)
"\n"
" 9500- specifies the bytes from offset 9500 and forward\n"
"\n"
-, stdout);
- fputs(
" 0-0,-1 specifies the first and last byte only(*)(HTTP)\n"
"\n"
" 100-199,500-599\n"
" specifies two separate 100-byte ranges(*) (HTTP)\n"
"\n"
-" (*) = NOTE that this will cause the server to reply with a mul-\n"
-" tipart response, which will be returned as-is by curl! Parsing\n"
-" or otherwise transforming this response is the responsibility of\n"
-" the caller.\n"
-"\n"
+" (*) = NOTE that this causes the server to reply with a multipart\n"
, stdout);
fputs(
-" Only digit characters (0-9) are valid in the 'start' and 'stop'\n"
-" fields of the 'start-stop' range syntax. If a non-digit charac-\n"
-" ter is given in the range, the server's response will be unspec-\n"
-" ified, depending on the server's configuration.\n"
+" response, which is returned as-is by curl! Parsing or otherwise\n"
+" transforming this response is the responsibility of the caller.\n"
+"\n"
+" Only digit characters (0-9) are valid in the 'start' and 'stop'\n"
+" fields of the 'start-stop' range syntax. If a non-digit charac-\n"
+" ter is given in the range, the server's response is unspecified,\n"
+" depending on the server's configuration.\n"
"\n"
-" You should also be aware that many HTTP/1.1 servers do not have\n"
-" this feature enabled, so that when you attempt to get a range,\n"
, stdout);
fputs(
-" you will instead get the whole document.\n"
+" Many HTTP/1.1 servers do not have this feature enabled, so that\n"
+" when you attempt to get a range, curl instead gets the whole\n"
+" document.\n"
"\n"
-" FTP and SFTP range downloads only support the simple 'start-\n"
-" stop' syntax (optionally with one of the numbers omitted). FTP\n"
-" use depends on the extended FTP command SIZE.\n"
+" FTP and SFTP range downloads only support the simple\n"
+" 'start-stop' syntax (optionally with one of the numbers omit-\n"
+" ted). FTP use depends on the extended FTP command SIZE.\n"
"\n"
-" If --range is provided several times, the last set value will be\n"
+" If -r, --range is provided several times, the last set value is\n"
+, stdout);
+ fputs(
" used.\n"
"\n"
" Example:\n"
" curl --range 22-44 https://example.com\n"
"\n"
-, stdout);
- fputs(
" See also -C, --continue-at and -a, --append.\n"
"\n"
" --rate <max request rate>\n"
" Specify the maximum transfer frequency you allow curl to use -\n"
" in number of transfer starts per time unit (sometimes called re-\n"
-" quest rate). Without this option, curl will start the next\n"
-" transfer as fast as possible.\n"
+" quest rate). Without this option, curl starts the next transfer\n"
+" as fast as possible.\n"
"\n"
-" If given several URLs and a transfer completes faster than the\n"
, stdout);
fputs(
-" allowed rate, curl will wait until the next transfer is started\n"
-" to maintain the requested rate. This option has no effect when\n"
+" If given several URLs and a transfer completes faster than the\n"
+" allowed rate, curl waits until the next transfer is started to\n"
+" maintain the requested rate. This option has no effect when -Z,\n"
" --parallel is used.\n"
"\n"
" The request rate is provided as \"N/U\" where N is an integer num-\n"
" ber and U is a time unit. Supported units are 's' (second), 'm'\n"
-" (minute), 'h' (hour) and 'd' /(day, as in a 24 hour unit). The\n"
, stdout);
fputs(
+" (minute), 'h' (hour) and 'd' /(day, as in a 24 hour unit). The\n"
" default time unit, if no \"/U\" is provided, is number of trans-\n"
" fers per hour.\n"
"\n"
-" If curl is told to allow 10 requests per minute, it will not\n"
+" If curl is told to allow 10 requests per minute, it does not\n"
" start the next request until 6 seconds have elapsed since the\n"
" previous transfer was started.\n"
"\n"
" This function uses millisecond resolution. If the allowed fre-\n"
-" quency is set more than 1000 per second, it will instead run un-\n"
-" restricted.\n"
-"\n"
, stdout);
fputs(
+" quency is set more than 1000 per second, it instead runs unre-\n"
+" stricted.\n"
+"\n"
" When retrying transfers, enabled with --retry, the separate\n"
" retry delay logic is used and not this setting.\n"
"\n"
-" If --rate is provided several times, the last set value will be\n"
-" used.\n"
+" This option is global and does not need to be specified for each\n"
+" use of --next.\n"
+"\n"
+" If --rate is provided several times, the last set value is used.\n"
"\n"
" Examples:\n"
-" curl --rate 2/s https://example.com\n"
-" curl --rate 3/h https://example.com\n"
-" curl --rate 14/m https://example.com\n"
+, stdout);
+ fputs(
+" curl --rate 2/s https://example.com ...\n"
+" curl --rate 3/h https://example.com ...\n"
+" curl --rate 14/m https://example.com ...\n"
"\n"
" See also --limit-rate and --retry-delay. Added in 7.84.0.\n"
"\n"
-, stdout);
- fputs(
" --raw (HTTP) When used, it disables all internal HTTP decoding of con-\n"
" tent or transfer encodings and instead makes them passed on un-\n"
" altered, raw.\n"
"\n"
+, stdout);
+ fputs(
" Providing --raw multiple times has no extra effect. Disable it\n"
" again with --no-raw.\n"
"\n"
@@ -4565,59 +4908,64 @@ void hugehelp(void)
" See also --tr-encoding.\n"
"\n"
" -e, --referer <URL>\n"
-, stdout);
- fputs(
" (HTTP) Sends the \"Referrer Page\" information to the HTTP server.\n"
-" This can also be set with the --header flag of course. When used\n"
-" with --location you can append \";auto\" to the --referer URL to\n"
-" make curl automatically set the previous URL when it follows a\n"
-" Location: header. The \";auto\" string can be used alone, even if\n"
-" you do not set an initial -e, --referer.\n"
-"\n"
+" This can also be set with the -H, --header flag of course. When\n"
+" used with -L, --location you can append \";auto\" to the -e,\n"
, stdout);
fputs(
-" If --referer is provided several times, the last set value will\n"
-" be used.\n"
+" --referer URL to make curl automatically set the previous URL\n"
+" when it follows a Location: header. The \";auto\" string can be\n"
+" used alone, even if you do not set an initial -e, --referer.\n"
+"\n"
+" If -e, --referer is provided several times, the last set value\n"
+" is used.\n"
"\n"
" Examples:\n"
" curl --referer \"https://fake.example\" https://example.com\n"
+, stdout);
+ fputs(
" curl --referer \"https://fake.example;auto\" -L https://example.com\n"
" curl --referer \";auto\" -L https://example.com\n"
"\n"
" See also -A, --user-agent and -H, --header.\n"
"\n"
" -J, --remote-header-name\n"
-, stdout);
- fputs(
-" (HTTP) This option tells the --remote-name option to use the\n"
+" (HTTP) This option tells the -O, --remote-name option to use the\n"
" server-specified Content-Disposition filename instead of ex-\n"
" tracting a filename from the URL. If the server-provided file\n"
-" name contains a path, that will be stripped off before the file\n"
-" name is used.\n"
+, stdout);
+ fputs(
+" name contains a path, that is stripped off before the file name\n"
+" is used.\n"
"\n"
" The file is saved in the current directory, or in the directory\n"
" specified with --output-dir.\n"
"\n"
+" If the server specifies a file name and a file with that name\n"
+" already exists in the destination directory, it is not overwrit-\n"
+" ten and an error occurs - unless you allow it by using the\n"
, stdout);
fputs(
-" If the server specifies a file name and a file with that name\n"
-" already exists in the destination directory, it will not be\n"
-" overwritten and an error will occur. If the server does not\n"
-" specify a file name then this option has no effect.\n"
+" --clobber option. If the server does not specify a file name\n"
+" then this option has no effect.\n"
"\n"
-" There's no attempt to decode %-sequences (yet) in the provided\n"
+" There is no attempt to decode %-sequences (yet) in the provided\n"
" file name, so this option may provide you with rather unexpected\n"
" file names.\n"
"\n"
+" This feature uses the name from the \"filename\" field, it does\n"
+" not yet support the \"filename*\" field (filenames with explicit\n"
+" character sets).\n"
, stdout);
fputs(
-" WARNING: Exercise judicious use of this option, especially on\n"
-" Windows. A rogue server could send you the name of a DLL or\n"
+"\n"
+" WARNING: Exercise judicious use of this option, especially on\n"
+" Windows. A rogue server could send you the name of a DLL or\n"
" other file that could be loaded automatically by Windows or some\n"
" third party software.\n"
"\n"
-" Providing --remote-header-name multiple times has no extra ef-\n"
-" fect. Disable it again with --no-remote-header-name.\n"
+" Providing -J, --remote-header-name multiple times has no extra\n"
+" effect. Disable it again with --no-remote-header-name.\n"
"\n"
" Example:\n"
" curl -OJ https://example.com/file\n"
@@ -4628,9 +4976,10 @@ void hugehelp(void)
"\n"
" --remote-name-all\n"
" This option changes the default action for all given URLs to be\n"
-" dealt with as if --remote-name were used for each one. So if you\n"
-" want to disable that for a specific URL after --remote-name-all\n"
-" has been used, you must use \"-o -\" or --no-remote-name.\n"
+" dealt with as if -O, --remote-name were used for each one. So if\n"
+" you want to disable that for a specific URL after --re-\n"
+" mote-name-all has been used, you must use \"-o -\" or --no-re-\n"
+" mote-name.\n"
"\n"
" Providing --remote-name-all multiple times has no extra effect.\n"
, stdout);
@@ -4647,47 +4996,46 @@ void hugehelp(void)
" (Only the file part of the remote file is used, the path is cut\n"
" off.)\n"
"\n"
-" The file will be saved in the current working directory. If you\n"
+" The file is saved in the current working directory. If you want\n"
, stdout);
fputs(
-" want the file saved in a different directory, make sure you\n"
-" change the current working directory before invoking curl with\n"
-" this option or use --output-dir.\n"
+" the file saved in a different directory, make sure you change\n"
+" the current working directory before invoking curl with this op-\n"
+" tion or use --output-dir.\n"
"\n"
-" The remote file name to use for saving is extracted from the\n"
-" given URL, nothing else, and if it already exists it will be\n"
-" overwritten. If you want the server to be able to choose the\n"
+" The remote file name to use for saving is extracted from the\n"
+" given URL, nothing else, and if it already exists it is over-\n"
+" written. If you want the server to be able to choose the file\n"
, stdout);
fputs(
-" file name refer to --remote-header-name which can be used in ad-\n"
-" dition to this option. If the server chooses a file name and\n"
-" that name already exists it will not be overwritten.\n"
+" name refer to -J, --remote-header-name which can be used in ad-\n"
+" dition to this option. If the server chooses a file name and\n"
+" that name already exists it is not overwritten.\n"
"\n"
" There is no URL decoding done on the file name. If it has %20 or\n"
-" other URL encoded parts of the name, they will end up as-is as\n"
-" file name.\n"
+" other URL encoded parts of the name, they end up as-is as file\n"
+" name.\n"
"\n"
" You may use this option as many times as the number of URLs you\n"
-, stdout);
- fputs(
" have.\n"
"\n"
-" --remote-name can be used several times in a command line\n"
+, stdout);
+ fputs(
+" -O, --remote-name can be used several times in a command line\n"
"\n"
" Example:\n"
" curl -O https://example.com/filename\n"
"\n"
-" See also --remote-name-all, --output-dir and -J, --remote-\n"
-" header-name.\n"
-"\n"
+" See also --remote-name-all, --output-dir and -J, --re-\n"
+" mote-header-name.\n"
" -R, --remote-time\n"
-" When used, this will make curl attempt to figure out the time-\n"
-" stamp of the remote file, and if that is available make the lo-\n"
+" Makes curl attempt to figure out the timestamp of the remote\n"
+" file that is getting downloaded, and if that is available make\n"
, stdout);
fputs(
-" cal file get that same timestamp.\n"
+" the local file get that same timestamp.\n"
"\n"
-" Providing --remote-time multiple times has no extra effect.\n"
+" Providing -R, --remote-time multiple times has no extra effect.\n"
" Disable it again with --no-remote-time.\n"
"\n"
" Example:\n"
@@ -4724,8 +5072,12 @@ void hugehelp(void)
"\n"
, stdout);
fputs(
+" curl passes on the verbatim string you give it its the request\n"
+" without any filter or other safe guards. That includes white\n"
+" space and control characters.\n"
+"\n"
" If --request-target is provided several times, the last set\n"
-" value will be used.\n"
+" value is used.\n"
"\n"
" Example:\n"
" curl --request-target \"*\" -X OPTIONS https://example.com\n"
@@ -4733,50 +5085,64 @@ void hugehelp(void)
" See also -X, --request. Added in 7.55.0.\n"
"\n"
" -X, --request <method>\n"
-" (HTTP) Specifies a custom request method to use when communicat-\n"
-" ing with the HTTP server. The specified request method will be\n"
, stdout);
fputs(
-" used instead of the method otherwise used (which defaults to\n"
-" GET). Read the HTTP 1.1 specification for details and explana-\n"
-" tions. Common additional HTTP requests include PUT and DELETE,\n"
-" but related technologies like WebDAV offers PROPFIND, COPY, MOVE\n"
-" and more.\n"
+" Change the method to use when starting the transfer.\n"
+"\n"
+" curl passes on the verbatim string you give it its the request\n"
+" without any filter or other safe guards. That includes white\n"
+" space and control characters.\n"
"\n"
-" Normally you do not need this option. All sorts of GET, HEAD,\n"
-" POST and PUT requests are rather invoked by using dedicated com-\n"
+" HTTP Specifies a custom request method to use when\n"
+" communicating with the HTTP server. The specified\n"
, stdout);
fputs(
-" mand line options.\n"
+" request method is used instead of the method oth-\n"
+" erwise used (which defaults to GET). Read the\n"
+" HTTP 1.1 specification for details and explana-\n"
+" tions. Common additional HTTP requests include\n"
+" PUT and DELETE, but related technologies like\n"
+" WebDAV offers PROPFIND, COPY, MOVE and more.\n"
"\n"
-" This option only changes the actual word used in the HTTP re-\n"
-" quest, it does not alter the way curl behaves. So for example if\n"
-" you want to make a proper HEAD request, using -X HEAD will not\n"
-" suffice. You need to use the --head option.\n"
+, stdout);
+ fputs(
+" Normally you do not need this option. All sorts\n"
+" of GET, HEAD, POST and PUT requests are rather\n"
+" invoked by using dedicated command line options.\n"
"\n"
-" The method string you set with --request will be used for all\n"
-" requests, which if you for example use --location may cause un-\n"
+" This option only changes the actual word used in\n"
+" the HTTP request, it does not alter the way curl\n"
+" behaves. So for example if you want to make a\n"
, stdout);
fputs(
-" intended side-effects when curl does not change request method\n"
-" according to the HTTP 30x response codes - and similar.\n"
+" proper HEAD request, using -X HEAD does not suf-\n"
+" fice. You need to use the -I, --head option.\n"
"\n"
-" (FTP) Specifies a custom FTP command to use instead of LIST when\n"
-" doing file lists with FTP.\n"
+" The method string you set with -X, --request is\n"
+" used for all requests, which if you for example\n"
+" use -L, --location may cause unintended side-ef-\n"
+" fects when curl does not change request method\n"
+, stdout);
+ fputs(
+" according to the HTTP 30x response codes - and\n"
+" similar.\n"
"\n"
-" (POP3) Specifies a custom POP3 command to use instead of LIST or\n"
-" RETR.\n"
+" FTP Specifies a custom FTP command to use instead of\n"
+" LIST when doing file lists with FTP.\n"
"\n"
-" (IMAP) Specifies a custom IMAP command to use instead of LIST.\n"
-" (Added in 7.30.0)\n"
+" POP3 Specifies a custom POP3 command to use instead of\n"
+" LIST or RETR.\n"
"\n"
+" IMAP Specifies a custom IMAP command to use instead of\n"
, stdout);
fputs(
-" (SMTP) Specifies a custom SMTP command to use instead of HELP or\n"
-" VRFY. (Added in 7.34.0)\n"
+" LIST.\n"
+"\n"
+" SMTP Specifies a custom SMTP command to use instead of\n"
+" HELP or VRFY.\n"
"\n"
-" If --request is provided several times, the last set value will\n"
-" be used.\n"
+" If -X, --request is provided several times, the last set value\n"
+" is used.\n"
"\n"
" Examples:\n"
" curl -X \"DELETE\" https://example.com\n"
@@ -4787,32 +5153,31 @@ void hugehelp(void)
" --resolve <[+]host:port:addr[,addr]...>\n"
, stdout);
fputs(
-" Provide a custom address for a specific host and port pair. Us-\n"
-" ing this, you can make the curl requests(s) use a specified ad-\n"
-" dress and prevent the otherwise normally resolved address to be\n"
-" used. Consider it a sort of /etc/hosts alternative provided on\n"
-" the command line. The port number should be the number used for\n"
-" the specific protocol the host will be used for. It means you\n"
+" Provide a custom address for a specific host and port pair. Us-\n"
+" ing this, you can make the curl requests(s) use a specified ad-\n"
+" dress and prevent the otherwise normally resolved address to be\n"
+" used. Consider it a sort of /etc/hosts alternative provided on\n"
+" the command line. The port number should be the number used for\n"
+" the specific protocol the host is used for. It means you need\n"
, stdout);
fputs(
-" need several entries if you want to provide address for the same\n"
-" host but different ports.\n"
+" several entries if you want to provide address for the same host\n"
+" but different ports.\n"
"\n"
" By specifying '*' as host you can tell curl to resolve any host\n"
" and specific port pair to the specified address. Wildcard is re-\n"
-" solved last so any --resolve with a specific host and port will\n"
-" be used first.\n"
+" solved last so any --resolve with a specific host and port is\n"
+" used first.\n"
"\n"
-" The provided address set by this option will be used even if\n"
+" The provided address set by this option is used even if -4,\n"
, stdout);
fputs(
-" --ipv4 or --ipv6 is set to make curl use another IP version.\n"
-"\n"
+" --ipv4 or -6, --ipv6 is set to make curl use another IP version.\n"
" By prefixing the host with a '+' you can make the entry time out\n"
-" after curl's default timeout (1 minute). Note that this will\n"
-" only make sense for long running parallel transfers with a lot\n"
-" of files. In such cases, if this option is used curl will try to\n"
-" resolve the host as it normally would once the timeout has ex-\n"
+" after curl's default timeout (1 minute). Note that this only\n"
+" makes sense for long running parallel transfers with a lot of\n"
+" files. In such cases, if this option is used curl tries to re-\n"
+" solve the host as it normally would once the timeout has ex-\n"
" pired.\n"
"\n"
, stdout);
@@ -4820,21 +5185,18 @@ void hugehelp(void)
" Support for providing the IP address within [brackets] was added\n"
" in 7.57.0.\n"
"\n"
-" Support for providing multiple IP addresses per entry was added\n"
+" Support for providing multiple IP addresses per entry was added\n"
" in 7.59.0.\n"
"\n"
" Support for resolving with wildcard was added in 7.64.0.\n"
"\n"
" Support for the '+' prefix was was added in 7.75.0.\n"
"\n"
-" This option can be used many times to add many host names to re-\n"
-" solve.\n"
-"\n"
-, stdout);
- fputs(
" --resolve can be used several times in a command line\n"
"\n"
" Example:\n"
+, stdout);
+ fputs(
" curl --resolve example.com:443:127.0.0.1 https://example.com\n"
"\n"
" See also --connect-to and --alt-svc.\n"
@@ -4843,39 +5205,39 @@ void hugehelp(void)
" Retry on any error. This option is used together with --retry.\n"
"\n"
" This option is the \"sledgehammer\" of retrying. Do not use this\n"
-" option by default (eg in curlrc), there may be unintended conse-\n"
+" option by default (for example in your curlrc), there may be un-\n"
+" intended consequences such as sending or receiving duplicate\n"
, stdout);
fputs(
-" quences such as sending or receiving duplicate data. Do not use\n"
-" with redirected input or output. You'd be much better off han-\n"
-" dling your unique problems in shell script. Please read the ex-\n"
-" ample below.\n"
+" data. Do not use with redirected input or output. You'd be much\n"
+" better off handling your unique problems in shell script. Please\n"
+" read the example below.\n"
"\n"
" WARNING: For server compatibility curl attempts to retry failed\n"
" flaky transfers as close as possible to how they were started,\n"
+" but this is not possible with redirected input or output. For\n"
, stdout);
fputs(
-" but this is not possible with redirected input or output. For\n"
" example, before retrying it removes output data from a failed\n"
" partial transfer that was written to an output file. However\n"
" this is not true of data redirected to a | pipe or > file, which\n"
-" are not reset. We strongly suggest you do not parse or record\n"
-" output via redirect in combination with this option, since you\n"
-, stdout);
- fputs(
+" are not reset. We strongly suggest you do not parse or record\n"
+" output via redirect in combination with this option, since you\n"
" may receive duplicate data.\n"
"\n"
-" By default curl will not error on an HTTP response code that in-\n"
-" dicates an HTTP error, if the transfer was successful. For exam-\n"
-" ple, if a server replies 404 Not Found and the reply is fully\n"
-" received then that is not an error. When --retry is used then\n"
-" curl will retry on some HTTP response codes that indicate tran-\n"
, stdout);
fputs(
-" sient HTTP errors, but that does not include most 4xx response\n"
-" codes such as 404. If you want to retry on all response codes\n"
-" that indicate HTTP errors (4xx and 5xx) then combine with -f,\n"
-" --fail.\n"
+" By default curl does not return error for transfers with an HTTP\n"
+" response code that indicates an HTTP error, if the transfer was\n"
+" successful. For example, if a server replies 404 Not Found and\n"
+" the reply is fully received then that is not an error. When\n"
+" --retry is used then curl retries on some HTTP response codes\n"
+" that indicate transient HTTP errors, but that does not include\n"
+, stdout);
+ fputs(
+" most 4xx response codes such as 404. If you want to retry on all\n"
+" response codes that indicate HTTP errors (4xx and 5xx) then com-\n"
+" bine with -f, --fail.\n"
"\n"
" Providing --retry-all-errors multiple times has no extra effect.\n"
" Disable it again with --no-retry-all-errors.\n"
@@ -4883,87 +5245,85 @@ void hugehelp(void)
" Example:\n"
" curl --retry 5 --retry-all-errors https://example.com\n"
"\n"
-, stdout);
- fputs(
" See also --retry. Added in 7.71.0.\n"
"\n"
+, stdout);
+ fputs(
" --retry-connrefused\n"
-" In addition to the other conditions, consider ECONNREFUSED as a\n"
-" transient error too for --retry. This option is used together\n"
+" In addition to the other conditions, consider ECONNREFUSED as a\n"
+" transient error too for --retry. This option is used together\n"
" with --retry.\n"
"\n"
-" Providing --retry-connrefused multiple times has no extra ef-\n"
+" Providing --retry-connrefused multiple times has no extra ef-\n"
" fect. Disable it again with --no-retry-connrefused.\n"
"\n"
" Example:\n"
+" curl --retry-connrefused --retry 7 https://example.com\n"
+"\n"
, stdout);
fputs(
-" curl --retry-connrefused --retry https://example.com\n"
-"\n"
" See also --retry and --retry-all-errors. Added in 7.52.0.\n"
"\n"
" --retry-delay <seconds>\n"
-" Make curl sleep this amount of time before each retry when a\n"
-" transfer has failed with a transient error (it changes the de-\n"
-" fault backoff time algorithm between retries). This option is\n"
-" only interesting if --retry is also used. Setting this delay to\n"
+" Make curl sleep this amount of time before each retry when a\n"
+" transfer has failed with a transient error (it changes the de-\n"
+" fault backoff time algorithm between retries). This option is\n"
+" only interesting if --retry is also used. Setting this delay to\n"
+" zero makes curl use the default backoff time.\n"
+"\n"
, stdout);
fputs(
-" zero will make curl use the default backoff time.\n"
-"\n"
-" If --retry-delay is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
+" If --retry-delay is provided several times, the last set value\n"
+" is used.\n"
" Example:\n"
-" curl --retry-delay 5 --retry https://example.com\n"
+" curl --retry-delay 5 --retry 7 https://example.com\n"
"\n"
" See also --retry.\n"
"\n"
" --retry-max-time <seconds>\n"
-" The retry timer is reset before the first transfer attempt. Re-\n"
-" tries will be done as usual (see --retry) as long as the timer\n"
+" The retry timer is reset before the first transfer attempt. Re-\n"
+" tries are done as usual (see --retry) as long as the timer has\n"
+" not reached this given limit. Notice that if the timer has not\n"
, stdout);
fputs(
-" has not reached this given limit. Notice that if the timer has\n"
-" not reached the limit, the request will be made and while per-\n"
-" forming, it may take longer than this given time period. To\n"
-" limit a single request's maximum time, use -m, --max-time. Set\n"
-" this option to zero to not timeout retries.\n"
+" reached the limit, the request is made and while performing, it\n"
+" may take longer than this given time period. To limit a single\n"
+" request's maximum time, use -m, --max-time. Set this option to\n"
+" zero to not timeout retries.\n"
"\n"
-" If --retry-max-time is provided several times, the last set\n"
-" value will be used.\n"
+" If --retry-max-time is provided several times, the last set\n"
+" value is used.\n"
"\n"
-, stdout);
- fputs(
" Example:\n"
" curl --retry-max-time 30 --retry 10 https://example.com\n"
"\n"
+, stdout);
+ fputs(
" See also --retry.\n"
"\n"
" --retry <num>\n"
-" If a transient error is returned when curl tries to perform a\n"
-" transfer, it will retry this number of times before giving up.\n"
-" Setting the number to 0 makes curl do no retries (which is the\n"
-" default). Transient error means either: a timeout, an FTP 4xx\n"
-, stdout);
- fputs(
-" response code or an HTTP 408, 429, 500, 502, 503 or 504 response\n"
+" If a transient error is returned when curl tries to perform a\n"
+" transfer, it retries this number of times before giving up. Set-\n"
+" ting the number to 0 makes curl do no retries (which is the de-\n"
+" fault). Transient error means either: a timeout, an FTP 4xx re-\n"
+" sponse code or an HTTP 408, 429, 500, 502, 503 or 504 response\n"
" code.\n"
"\n"
-" When curl is about to retry a transfer, it will first wait one\n"
-" second and then for all forthcoming retries it will double the\n"
-" waiting time until it reaches 10 minutes which then will be the\n"
-" delay between the rest of the retries. By using --retry-delay\n"
-" you disable this exponential backoff algorithm. See also\n"
, stdout);
fputs(
+" When curl is about to retry a transfer, it first waits one sec-\n"
+" ond and then for all forthcoming retries it doubles the waiting\n"
+" time until it reaches 10 minutes which then remains delay be-\n"
+" tween the rest of the retries. By using --retry-delay you dis-\n"
+" able this exponential backoff algorithm. See also\n"
" --retry-max-time to limit the total time allowed for retries.\n"
"\n"
-" Since curl 7.66.0, curl will comply with the Retry-After: re-\n"
-" sponse header if one was present to know when to issue the next\n"
-" retry.\n"
+, stdout);
+ fputs(
+" curl complies with the Retry-After: response header if one was\n"
+" present to know when to issue the next retry (added in 7.66.0).\n"
"\n"
-" If --retry is provided several times, the last set value will be\n"
+" If --retry is provided several times, the last set value is\n"
" used.\n"
"\n"
" Example:\n"
@@ -4971,24 +5331,23 @@ void hugehelp(void)
"\n"
" See also --retry-max-time.\n"
"\n"
-, stdout);
- fputs(
" --sasl-authzid <identity>\n"
" Use this authorization identity (authzid), during SASL PLAIN au-\n"
+, stdout);
+ fputs(
" thentication, in addition to the authentication identity (auth-\n"
" cid) as specified by -u, --user.\n"
"\n"
-" If the option is not specified, the server will derive the au-\n"
-" thzid from the authcid, but if specified, and depending on the\n"
-" server implementation, it may be used to access another user's\n"
+" If the option is not specified, the server derives the authzid\n"
+" from the authcid, but if specified, and depending on the server\n"
+" implementation, it may be used to access another user's inbox,\n"
+" that the user has been granted access to, or a shared mailbox\n"
+" for example.\n"
+"\n"
, stdout);
fputs(
-" inbox, that the user has been granted access to, or a shared\n"
-" mailbox for example.\n"
-"\n"
" If --sasl-authzid is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
+" is used.\n"
" Example:\n"
" curl --sasl-authzid zid imap://example.com/\n"
"\n"
@@ -4997,43 +5356,37 @@ void hugehelp(void)
" --sasl-ir\n"
" Enable initial response in SASL authentication.\n"
"\n"
-, stdout);
- fputs(
" Providing --sasl-ir multiple times has no extra effect. Disable\n"
" it again with --no-sasl-ir.\n"
"\n"
" Example:\n"
+, stdout);
+ fputs(
" curl --sasl-ir imap://example.com/\n"
"\n"
-" See also --sasl-authzid. Added in 7.31.0.\n"
+" See also --sasl-authzid.\n"
"\n"
" --service-name <name>\n"
" This option allows you to change the service name for SPNEGO.\n"
"\n"
-" Examples: --negotiate --service-name sockd would use\n"
-" sockd/server-name.\n"
-"\n"
-, stdout);
- fputs(
" If --service-name is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
+" is used.\n"
" Example:\n"
" curl --service-name sockd/server https://example.com\n"
"\n"
-" See also --negotiate and --proxy-service-name. Added in 7.43.0.\n"
+" See also --negotiate and --proxy-service-name.\n"
"\n"
" -S, --show-error\n"
+, stdout);
+ fputs(
" When used with -s, --silent, it makes curl show an error message\n"
" if it fails.\n"
"\n"
" This option is global and does not need to be specified for each\n"
-, stdout);
- fputs(
-" use of -:, --next.\n"
+" use of --next.\n"
"\n"
-" Providing --show-error multiple times has no extra effect. Dis-\n"
-" able it again with --no-show-error.\n"
+" Providing -S, --show-error multiple times has no extra effect.\n"
+" Disable it again with --no-show-error.\n"
"\n"
" Example:\n"
" curl --show-error --silent https://example.com\n"
@@ -5041,85 +5394,86 @@ void hugehelp(void)
" See also --no-progress-meter.\n"
"\n"
" -s, --silent\n"
-" Silent or quiet mode. Do not show progress meter or error mes-\n"
-" sages. Makes Curl mute. It will still output the data you ask\n"
, stdout);
fputs(
-" for, potentially even to the terminal/stdout unless you redirect\n"
-" it.\n"
+" Silent or quiet mode. Do not show progress meter or error mes-\n"
+" sages. Makes Curl mute. It still outputs the data you ask for,\n"
+" potentially even to the terminal/stdout unless you redirect it.\n"
"\n"
-" Use --show-error in addition to this option to disable progress\n"
-" meter but still show error messages.\n"
+" Use -S, --show-error in addition to this option to disable\n"
+" progress meter but still show error messages.\n"
"\n"
-" Providing --silent multiple times has no extra effect. Disable\n"
-" it again with --no-silent.\n"
+" Providing -s, --silent multiple times has no extra effect. Dis-\n"
+, stdout);
+ fputs(
+" able it again with --no-silent.\n"
"\n"
" Example:\n"
" curl -s https://example.com\n"
"\n"
" See also -v, --verbose, --stderr and --no-progress-meter.\n"
"\n"
-, stdout);
- fputs(
" --socks4 <host[:port]>\n"
" Use the specified SOCKS4 proxy. If the port number is not speci-\n"
-" fied, it is assumed at port 1080. Using this socket type make\n"
-" curl resolve the host name and passing the address on to the\n"
+" fied, it is assumed at port 1080. Using this socket type make\n"
+" curl resolve the host name and passing the address on to the\n"
" proxy.\n"
"\n"
-" To specify proxy on a unix domain socket, use localhost for\n"
-" host, e.g. socks4://localhost/path/to/socket.sock\n"
-"\n"
, stdout);
fputs(
-" This option overrides any previous use of -x, --proxy, as they\n"
+" To specify proxy on a unix domain socket, use localhost for\n"
+" host, e.g. socks4://localhost/path/to/socket.sock\n"
+"\n"
+" This option overrides any previous use of -x, --proxy, as they\n"
" are mutually exclusive.\n"
"\n"
-" This option is superfluous since you can specify a socks4 proxy\n"
-" with --proxy using a socks4:// protocol prefix.\n"
+" This option is superfluous since you can specify a socks4 proxy\n"
+" with -x, --proxy using a socks4:// protocol prefix.\n"
"\n"
-" Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at\n"
-" the same time --proxy is used with an HTTP/HTTPS proxy. In such\n"
-" a case curl first connects to the SOCKS proxy and then connects\n"
+" --preproxy can be used to specify a SOCKS proxy at the same time\n"
, stdout);
fputs(
-" (through SOCKS) to the HTTP or HTTPS proxy.\n"
+" proxy is used with an HTTP/HTTPS proxy (added in 7.52.0). In\n"
+" such a case, curl first connects to the SOCKS proxy and then\n"
+" connects (through SOCKS) to the HTTP or HTTPS proxy.\n"
+"\n"
+" If --socks4 is provided several times, the last set value is\n"
+" used.\n"
"\n"
-" If --socks4 is provided several times, the last set value will\n"
-" be used.\n"
" Example:\n"
" curl --socks4 hostname:4096 https://example.com\n"
"\n"
" See also --socks4a, --socks5 and --socks5-hostname.\n"
"\n"
-" --socks4a <host[:port]>\n"
-" Use the specified SOCKS4a proxy. If the port number is not spec-\n"
, stdout);
fputs(
-" ified, it is assumed at port 1080. This asks the proxy to re-\n"
+" --socks4a <host[:port]>\n"
+" Use the specified SOCKS4a proxy. If the port number is not spec-\n"
+" ified, it is assumed at port 1080. This asks the proxy to re-\n"
" solve the host name.\n"
"\n"
-" To specify proxy on a unix domain socket, use localhost for\n"
+" To specify proxy on a unix domain socket, use localhost for\n"
" host, e.g. socks4a://localhost/path/to/socket.sock\n"
"\n"
-" This option overrides any previous use of -x, --proxy, as they\n"
+" This option overrides any previous use of -x, --proxy, as they\n"
" are mutually exclusive.\n"
"\n"
-" This option is superfluous since you can specify a socks4a proxy\n"
, stdout);
fputs(
-" with --proxy using a socks4a:// protocol prefix.\n"
+" This option is superfluous since you can specify a socks4a proxy\n"
+" with -x, --proxy using a socks4a:// protocol prefix.\n"
"\n"
-" Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at\n"
-" the same time --proxy is used with an HTTP/HTTPS proxy. In such\n"
-" a case curl first connects to the SOCKS proxy and then connects\n"
-" (through SOCKS) to the HTTP or HTTPS proxy.\n"
+" --preproxy can be used to specify a SOCKS proxy at the same time\n"
+" -x, --proxy is used with an HTTP/HTTPS proxy (added in 7.52.0).\n"
+" In such a case, curl first connects to the SOCKS proxy and then\n"
+" connects (through SOCKS) to the HTTP or HTTPS proxy.\n"
"\n"
-" If --socks4a is provided several times, the last set value will\n"
-" be used.\n"
-" Example:\n"
, stdout);
fputs(
+" If --socks4a is provided several times, the last set value is\n"
+" used.\n"
+"\n"
+" Example:\n"
" curl --socks4a hostname:4096 https://example.com\n"
"\n"
" See also --socks4, --socks5 and --socks5-hostname.\n"
@@ -5127,11 +5481,11 @@ void hugehelp(void)
" --socks5-basic\n"
" Tells curl to use username/password authentication when connect-\n"
" ing to a SOCKS5 proxy. The username/password authentication is\n"
+, stdout);
+ fputs(
" enabled by default. Use --socks5-gssapi to force GSS-API au-\n"
" thentication to SOCKS5 proxies.\n"
"\n"
-, stdout);
- fputs(
" Providing --socks5-basic multiple times has no extra effect.\n"
"\n"
" Example:\n"
@@ -5141,10 +5495,10 @@ void hugehelp(void)
"\n"
" --socks5-gssapi-nec\n"
" As part of the GSS-API negotiation a protection mode is negoti-\n"
-" ated. RFC 1961 says in section 4.3/4.4 it should be protected,\n"
-" but the NEC reference implementation does not. The option\n"
, stdout);
fputs(
+" ated. RFC 1961 says in section 4.3/4.4 it should be protected,\n"
+" but the NEC reference implementation does not. The option\n"
" --socks5-gssapi-nec allows the unprotected exchange of the pro-\n"
" tection mode negotiation.\n"
"\n"
@@ -5152,27 +5506,22 @@ void hugehelp(void)
" fect. Disable it again with --no-socks5-gssapi-nec.\n"
"\n"
" Example:\n"
+, stdout);
+ fputs(
" curl --socks5-gssapi-nec --socks5 hostname:4096 https://example.com\n"
"\n"
" See also --socks5.\n"
"\n"
" --socks5-gssapi-service <name>\n"
-, stdout);
- fputs(
" The default service name for a socks server is rcmd/server-fqdn.\n"
" This option allows you to change it.\n"
"\n"
-" Examples: --socks5 proxy-name --socks5-gssapi-service sockd\n"
-" would use sockd/proxy-name --socks5 proxy-name --socks5-gssapi-\n"
-" service sockd/real-name would use sockd/real-name for cases\n"
-" where the proxy-name does not match the principal name.\n"
-"\n"
-, stdout);
- fputs(
" If --socks5-gssapi-service is provided several times, the last\n"
-" set value will be used.\n"
+" set value is used.\n"
"\n"
" Example:\n"
+, stdout);
+ fputs(
" curl --socks5-gssapi-service sockd --socks5 hostname:4096 https://example.com\n"
"\n"
" See also --socks5.\n"
@@ -5180,11 +5529,11 @@ void hugehelp(void)
" --socks5-gssapi\n"
" Tells curl to use GSS-API authentication when connecting to a\n"
" SOCKS5 proxy. The GSS-API authentication is enabled by default\n"
-, stdout);
- fputs(
" (if curl is compiled with GSS-API support). Use --socks5-basic\n"
" to force username/password authentication to SOCKS5 proxies.\n"
"\n"
+, stdout);
+ fputs(
" Providing --socks5-gssapi multiple times has no extra effect.\n"
" Disable it again with --no-socks5-gssapi.\n"
"\n"
@@ -5194,10 +5543,10 @@ void hugehelp(void)
" See also --socks5. Added in 7.55.0.\n"
"\n"
" --socks5-hostname <host[:port]>\n"
-, stdout);
- fputs(
" Use the specified SOCKS5 proxy (and let the proxy resolve the\n"
" host name). If the port number is not specified, it is assumed\n"
+, stdout);
+ fputs(
" at port 1080.\n"
"\n"
" To specify proxy on a unix domain socket, use localhost for\n"
@@ -5206,90 +5555,91 @@ void hugehelp(void)
" This option overrides any previous use of -x, --proxy, as they\n"
" are mutually exclusive.\n"
"\n"
-, stdout);
- fputs(
" This option is superfluous since you can specify a socks5 host-\n"
-" name proxy with --proxy using a socks5h:// protocol prefix.\n"
-"\n"
-" Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at\n"
-" the same time --proxy is used with an HTTP/HTTPS proxy. In such\n"
-" a case curl first connects to the SOCKS proxy and then connects\n"
-" (through SOCKS) to the HTTP or HTTPS proxy.\n"
+" name proxy with -x, --proxy using a socks5h:// protocol prefix.\n"
"\n"
, stdout);
fputs(
-" If --socks5-hostname is provided several times, the last set\n"
-" value will be used.\n"
+" --preproxy can be used to specify a SOCKS proxy at the same time\n"
+" -x, --proxy is used with an HTTP/HTTPS proxy (added in 7.52.0).\n"
+" In such a case, curl first connects to the SOCKS proxy and then\n"
+" connects (through SOCKS) to the HTTP or HTTPS proxy.\n"
+"\n"
+" If --socks5-hostname is provided several times, the last set\n"
+" value is used.\n"
"\n"
" Example:\n"
+, stdout);
+ fputs(
" curl --socks5-hostname proxy.example:7000 https://example.com\n"
"\n"
" See also --socks5 and --socks4a.\n"
"\n"
" --socks5 <host[:port]>\n"
-" Use the specified SOCKS5 proxy - but resolve the host name lo-\n"
-" cally. If the port number is not specified, it is assumed at\n"
+" Use the specified SOCKS5 proxy - but resolve the host name lo-\n"
+" cally. If the port number is not specified, it is assumed at\n"
" port 1080.\n"
"\n"
-, stdout);
- fputs(
-" To specify proxy on a unix domain socket, use localhost for\n"
+" To specify proxy on a unix domain socket, use localhost for\n"
" host, e.g. socks5://localhost/path/to/socket.sock\n"
"\n"
-" This option overrides any previous use of -x, --proxy, as they\n"
+, stdout);
+ fputs(
+" This option overrides any previous use of -x, --proxy, as they\n"
" are mutually exclusive.\n"
"\n"
-" This option is superfluous since you can specify a socks5 proxy\n"
-" with --proxy using a socks5:// protocol prefix.\n"
+" This option is superfluous since you can specify a socks5 proxy\n"
+" with -x, --proxy using a socks5:// protocol prefix.\n"
"\n"
-" Since 7.52.0, --preproxy can be used to specify a SOCKS proxy at\n"
+" --preproxy can be used to specify a SOCKS proxy at the same time\n"
+" -x, --proxy is used with an HTTP/HTTPS proxy (added in 7.52.0).\n"
, stdout);
fputs(
-" the same time --proxy is used with an HTTP/HTTPS proxy. In such\n"
-" a case curl first connects to the SOCKS proxy and then connects\n"
-" (through SOCKS) to the HTTP or HTTPS proxy.\n"
+" In such a case, curl first connects to the SOCKS proxy and then\n"
+" connects (through SOCKS) to the HTTP or HTTPS proxy.\n"
"\n"
" This option (as well as --socks4) does not work with IPV6, FTPS\n"
" or LDAP.\n"
"\n"
-" If --socks5 is provided several times, the last set value will\n"
-" be used.\n"
+" If --socks5 is provided several times, the last set value is\n"
+" used.\n"
+"\n"
" Example:\n"
-, stdout);
- fputs(
" curl --socks5 proxy.example:7000 https://example.com\n"
"\n"
" See also --socks5-hostname and --socks4a.\n"
"\n"
+, stdout);
+ fputs(
" -Y, --speed-limit <speed>\n"
" If a transfer is slower than this given speed (in bytes per sec-\n"
-" ond) for speed-time seconds it gets aborted. speed-time is set\n"
-" with --speed-time and is 30 if not set.\n"
+" ond) for speed-time seconds it gets aborted. speed-time is set\n"
+" with -y, --speed-time and is 30 if not set.\n"
"\n"
-" If --speed-limit is provided several times, the last set value\n"
-" will be used.\n"
+" If -Y, --speed-limit is provided several times, the last set\n"
+" value is used.\n"
"\n"
-, stdout);
- fputs(
" Example:\n"
" curl --speed-limit 300 --speed-time 10 https://example.com\n"
"\n"
+, stdout);
+ fputs(
" See also -y, --speed-time, --limit-rate and -m, --max-time.\n"
"\n"
" -y, --speed-time <seconds>\n"
" If a transfer runs slower than speed-limit bytes per second dur-\n"
" ing a speed-time period, the transfer is aborted. If speed-time\n"
-" is used, the default speed-limit will be 1 unless set with -Y,\n"
+" is used, the default speed-limit is 1 unless set with -Y,\n"
" --speed-limit.\n"
"\n"
+" This option controls transfers (in both directions) but does not\n"
, stdout);
fputs(
-" This option controls transfers (in both directions) but will not\n"
-" affect slow connects etc. If this is a concern for you, try the\n"
+" affect slow connects etc. If this is a concern for you, try the\n"
" --connect-timeout option.\n"
"\n"
-" If --speed-time is provided several times, the last set value\n"
-" will be used.\n"
+" If -y, --speed-time is provided several times, the last set\n"
+" value is used.\n"
"\n"
" Example:\n"
" curl --speed-limit 300 --speed-time 10 https://example.com\n"
@@ -5297,40 +5647,36 @@ void hugehelp(void)
" See also -Y, --speed-limit and --limit-rate.\n"
"\n"
" --ssl-allow-beast\n"
+" This option tells curl to not work around a security flaw in the\n"
, stdout);
fputs(
-" This option tells curl to not work around a security flaw in the\n"
" SSL3 and TLS1.0 protocols known as BEAST. If this option is not\n"
-" used, the SSL layer may use workarounds known to cause interop-\n"
+" used, the SSL layer may use workarounds known to cause interop-\n"
" erability problems with some older SSL implementations.\n"
"\n"
" WARNING: this option loosens the SSL security, and by using this\n"
" flag you ask for exactly that.\n"
"\n"
-, stdout);
- fputs(
" Providing --ssl-allow-beast multiple times has no extra effect.\n"
" Disable it again with --no-ssl-allow-beast.\n"
"\n"
+, stdout);
+ fputs(
" Example:\n"
" curl --ssl-allow-beast https://example.com\n"
"\n"
" See also --proxy-ssl-allow-beast and -k, --insecure.\n"
"\n"
" --ssl-auto-client-cert\n"
-" Tell libcurl to automatically locate and use a client certifi-\n"
-" cate for authentication, when requested by the server. This op-\n"
+" (Schannel) Tell libcurl to automatically locate and use a client\n"
+" certificate for authentication, when requested by the server.\n"
+" Since the server can request any certificate that supports\n"
+" client authentication in the OS certificate store it could be a\n"
, stdout);
fputs(
-" tion is only supported for Schannel (the native Windows SSL li-\n"
-" brary). Prior to 7.77.0 this was the default behavior in libcurl\n"
-" with Schannel. Since the server can request any certificate that\n"
-" supports client authentication in the OS certificate store it\n"
-" could be a privacy violation and unexpected.\n"
+" privacy violation and unexpected.\n"
"\n"
" Providing --ssl-auto-client-cert multiple times has no extra ef-\n"
-, stdout);
- fputs(
" fect. Disable it again with --no-ssl-auto-client-cert.\n"
"\n"
" Example:\n"
@@ -5340,44 +5686,51 @@ void hugehelp(void)
"\n"
" --ssl-no-revoke\n"
" (Schannel) This option tells curl to disable certificate revoca-\n"
+, stdout);
+ fputs(
" tion checks. WARNING: this option loosens the SSL security, and\n"
" by using this flag you ask for exactly that.\n"
"\n"
-, stdout);
- fputs(
" Providing --ssl-no-revoke multiple times has no extra effect.\n"
" Disable it again with --no-ssl-no-revoke.\n"
"\n"
" Example:\n"
" curl --ssl-no-revoke https://example.com\n"
"\n"
-" See also --crlfile. Added in 7.44.0.\n"
+" See also --crlfile.\n"
"\n"
" --ssl-reqd\n"
" (FTP IMAP POP3 SMTP LDAP) Require SSL/TLS for the connection.\n"
-" Terminates the connection if the server does not support\n"
-" SSL/TLS.\n"
-"\n"
, stdout);
fputs(
-" This option is handled in LDAP since version 7.81.0. It is fully\n"
+" Terminates the connection if the transfer cannot be upgraded to\n"
+" use SSL/TLS.\n"
+"\n"
+" This option is handled in LDAP (added in 7.81.0). It is fully\n"
" supported by the OpenLDAP backend and rejected by the generic\n"
" ldap backend if explicit TLS is required.\n"
"\n"
+" This option is unnecessary if you use a URL scheme that in it-\n"
+" self implies immediate and implicit use of TLS, like for FTPS,\n"
+, stdout);
+ fputs(
+" IMAPS, POP3S, SMTPS and LDAPS. Such a transfer always fails if\n"
+" the TLS handshake does not work.\n"
+"\n"
" This option was formerly known as --ftp-ssl-reqd.\n"
"\n"
-" Providing --ssl-reqd multiple times has no extra effect. Dis-\n"
+" Providing --ssl-reqd multiple times has no extra effect. Dis-\n"
" able it again with --no-ssl-reqd.\n"
"\n"
" Example:\n"
" curl --ssl-reqd ftp://example.com\n"
"\n"
-, stdout);
- fputs(
" See also --ssl and -k, --insecure.\n"
"\n"
" --ssl-revoke-best-effort\n"
-" (Schannel) This option tells curl to ignore certificate revoca-\n"
+, stdout);
+ fputs(
+" (Schannel) This option tells curl to ignore certificate revoca-\n"
" tion checks when they failed due to missing/offline distribution\n"
" points for the revocation check lists.\n"
"\n"
@@ -5385,10 +5738,10 @@ void hugehelp(void)
" effect. Disable it again with --no-ssl-revoke-best-effort.\n"
"\n"
" Example:\n"
-, stdout);
- fputs(
" curl --ssl-revoke-best-effort https://example.com\n"
"\n"
+, stdout);
+ fputs(
" See also --crlfile and -k, --insecure. Added in 7.70.0.\n"
"\n"
" --ssl (FTP IMAP POP3 SMTP LDAP) Warning: this is considered an inse-\n"
@@ -5396,25 +5749,25 @@ void hugehelp(void)
" upgrades to a secure connection.\n"
"\n"
" Try to use SSL/TLS for the connection. Reverts to a non-secure\n"
+" connection if the server does not support SSL/TLS. See also\n"
, stdout);
fputs(
-" connection if the server does not support SSL/TLS. See also\n"
" --ftp-ssl-control and --ssl-reqd for different levels of encryp-\n"
" tion required.\n"
"\n"
-" This option is handled in LDAP since version 7.81.0. It is fully\n"
-" supported by the OpenLDAP backend and ignored by the generic\n"
+" This option is handled in LDAP (added in 7.81.0). It is fully\n"
+" supported by the OpenLDAP backend and ignored by the generic\n"
" ldap backend.\n"
"\n"
-" Please note that a server may close the connection if the nego-\n"
+" Please note that a server may close the connection if the nego-\n"
" tiation does not succeed.\n"
"\n"
+" This option was formerly known as --ftp-ssl. That option name\n"
, stdout);
fputs(
-" This option was formerly known as --ftp-ssl. That option name\n"
-" can still be used but will be removed in a future version.\n"
+" can still be used but might be removed in a future version.\n"
"\n"
-" Providing --ssl multiple times has no extra effect. Disable it\n"
+" Providing --ssl multiple times has no extra effect. Disable it\n"
" again with --no-ssl.\n"
"\n"
" Example:\n"
@@ -5423,66 +5776,71 @@ void hugehelp(void)
" See also --ssl-reqd, -k, --insecure and --ciphers.\n"
"\n"
" -2, --sslv2\n"
+" (SSL) This option previously asked curl to use SSLv2, but is now\n"
, stdout);
fputs(
-" (SSL) This option previously asked curl to use SSLv2, but start-\n"
-" ing in curl 7.77.0 this instruction is ignored. SSLv2 is widely\n"
-" considered insecure (see RFC 6176).\n"
+" ignored (added in 7.77.0). SSLv2 is widely considered insecure\n"
+" (see RFC 6176).\n"
"\n"
-" Providing --sslv2 multiple times has no extra effect.\n"
+" Providing -2, --sslv2 multiple times has no extra effect.\n"
"\n"
" Example:\n"
" curl --sslv2 https://example.com\n"
"\n"
" See also --http1.1 and --http2. -2, --sslv2 requires that the\n"
-, stdout);
- fputs(
" underlying libcurl was built to support TLS. This option is mu-\n"
" tually exclusive to -3, --sslv3 and -1, --tlsv1 and --tlsv1.1\n"
+, stdout);
+ fputs(
" and --tlsv1.2.\n"
"\n"
" -3, --sslv3\n"
-" (SSL) This option previously asked curl to use SSLv3, but start-\n"
-" ing in curl 7.77.0 this instruction is ignored. SSLv3 is widely\n"
-" considered insecure (see RFC 7568).\n"
+" (SSL) This option previously asked curl to use SSLv3, but is now\n"
+" ignored (added in 7.77.0). SSLv3 is widely considered insecure\n"
+" (see RFC 7568).\n"
"\n"
-" Providing --sslv3 multiple times has no extra effect.\n"
+" Providing -3, --sslv3 multiple times has no extra effect.\n"
"\n"
-, stdout);
- fputs(
" Example:\n"
" curl --sslv3 https://example.com\n"
"\n"
-" See also --http1.1 and --http2. -3, --sslv3 requires that the\n"
-" underlying libcurl was built to support TLS. This option is mu-\n"
-" tually exclusive to -2, --sslv2 and -1, --tlsv1 and --tlsv1.1\n"
+" See also --http1.1 and --http2. -3, --sslv3 requires that the\n"
+, stdout);
+ fputs(
+" underlying libcurl was built to support TLS. This option is mu-\n"
+" tually exclusive to -2, --sslv2 and -1, --tlsv1 and --tlsv1.1\n"
" and --tlsv1.2.\n"
"\n"
" --stderr <file>\n"
-" Redirect all writes to stderr to the specified file instead. If\n"
-, stdout);
- fputs(
+" Redirect all writes to stderr to the specified file instead. If\n"
" the file name is a plain '-', it is instead written to stdout.\n"
"\n"
" This option is global and does not need to be specified for each\n"
-" use of -:, --next.\n"
+" use of --next.\n"
+"\n"
+, stdout);
+ fputs(
+" If --stderr is provided several times, the last set value is\n"
+" used.\n"
"\n"
-" If --stderr is provided several times, the last set value will\n"
-" be used.\n"
" Example:\n"
" curl --stderr output.txt https://example.com\n"
"\n"
" See also -v, --verbose and -s, --silent.\n"
"\n"
" --styled-output\n"
-, stdout);
- fputs(
" Enables the automatic use of bold font styles when writing HTTP\n"
" headers to the terminal. Use --no-styled-output to switch them\n"
" off.\n"
"\n"
+, stdout);
+ fputs(
+" Styled output requires a terminal that supports bold fonts. This\n"
+" feature is not present on curl for Windows due to lack of this\n"
+" capability.\n"
+"\n"
" This option is global and does not need to be specified for each\n"
-" use of -:, --next.\n"
+" use of --next.\n"
"\n"
" Providing --styled-output multiple times has no extra effect.\n"
" Disable it again with --no-styled-output.\n"
@@ -5495,13 +5853,14 @@ void hugehelp(void)
" See also -I, --head and -v, --verbose. Added in 7.61.0.\n"
"\n"
" --suppress-connect-headers\n"
-" When --proxytunnel is used and a CONNECT request is made do not\n"
-" output proxy CONNECT response headers. This option is meant to\n"
-" be used with --dump-header or --include which are used to show\n"
-" protocol headers in the output. It has no effect on debug op-\n"
+" When -p, --proxytunnel is used and a CONNECT request is made do\n"
+" not output proxy CONNECT response headers. This option is meant\n"
+" to be used with -D, --dump-header or -i, --include which are\n"
+" used to show protocol headers in the output. It has no effect on\n"
, stdout);
fputs(
-" tions such as --verbose or --trace, or any statistics.\n"
+" debug options such as -v, --verbose or --trace, or any statis-\n"
+" tics.\n"
"\n"
" Providing --suppress-connect-headers multiple times has no extra\n"
" effect. Disable it again with --no-suppress-connect-headers.\n"
@@ -5513,38 +5872,42 @@ void hugehelp(void)
" Added in 7.54.0.\n"
"\n"
" --tcp-fastopen\n"
+"\n"
, stdout);
fputs(
-" Enable use of TCP Fast Open (RFC7413).\n"
+" Enable use of TCP Fast Open (RFC 7413). TCP Fast Open is a TCP\n"
+" extension that allows data to get sent earlier over the connec-\n"
+" tion (before the final handshake ACK) if the client and server\n"
+" have been connected previously.\n"
"\n"
-" Providing --tcp-fastopen multiple times has no extra effect.\n"
+" Providing --tcp-fastopen multiple times has no extra effect.\n"
" Disable it again with --no-tcp-fastopen.\n"
"\n"
" Example:\n"
" curl --tcp-fastopen https://example.com\n"
"\n"
-" See also --false-start. Added in 7.49.0.\n"
+, stdout);
+ fputs(
+" See also --false-start.\n"
"\n"
" --tcp-nodelay\n"
-" Turn on the TCP_NODELAY option. See the curl_easy_setopt(3) man\n"
+" Turn on the TCP_NODELAY option. See the curl_easy_setopt(3) man\n"
" page for details about this option.\n"
"\n"
-, stdout);
- fputs(
-" Since 7.50.2, curl sets this option by default and you need to\n"
-" explicitly switch it off if you do not want it on.\n"
+" curl sets this option by default and you need to explicitly\n"
+" switch it off if you do not want it on (added in 7.50.2).\n"
"\n"
-" Providing --tcp-nodelay multiple times has no extra effect.\n"
+" Providing --tcp-nodelay multiple times has no extra effect.\n"
" Disable it again with --no-tcp-nodelay.\n"
"\n"
" Example:\n"
+, stdout);
+ fputs(
" curl --tcp-nodelay https://example.com\n"
"\n"
" See also -N, --no-buffer.\n"
"\n"
" -t, --telnet-option <opt=val>\n"
-, stdout);
- fputs(
" Pass options to the telnet protocol. Supported options are:\n"
"\n"
" TTYPE=<term> Sets the terminal type.\n"
@@ -5553,78 +5916,81 @@ void hugehelp(void)
"\n"
" NEW_ENV=<var,val> Sets an environment variable.\n"
"\n"
-" --telnet-option can be used several times in a command line\n"
+" -t, --telnet-option can be used several times in a command line\n"
"\n"
" Example:\n"
+, stdout);
+ fputs(
" curl -t TTYPE=vt100 telnet://example.com/\n"
"\n"
" See also -K, --config.\n"
" --tftp-blksize <value>\n"
-, stdout);
- fputs(
-" (TFTP) Set TFTP BLKSIZE option (must be >512). This is the block\n"
-" size that curl will try to use when transferring data to or from\n"
-" a TFTP server. By default 512 bytes will be used.\n"
-"\n"
-" If --tftp-blksize is provided several times, the last set value\n"
-" will be used.\n"
+" (TFTP) Set the TFTP BLKSIZE option (must be >512). This is the\n"
+" block size that curl tries to use when transferring data to or\n"
+" from a TFTP server. By default 512 bytes are used.\n"
"\n"
+" If --tftp-blksize is provided several times, the last set value\n"
+" is used.\n"
" Example:\n"
+, stdout);
+ fputs(
" curl --tftp-blksize 1024 tftp://example.com/file\n"
"\n"
" See also --tftp-no-options.\n"
"\n"
" --tftp-no-options\n"
-, stdout);
- fputs(
" (TFTP) Tells curl not to send TFTP options requests.\n"
"\n"
-" This option improves interop with some legacy servers that do\n"
-" not acknowledge or properly implement TFTP options. When this\n"
+" This option improves interop with some legacy servers that do\n"
+" not acknowledge or properly implement TFTP options. When this\n"
" option is used --tftp-blksize is ignored.\n"
"\n"
-" Providing --tftp-no-options multiple times has no extra effect.\n"
+" Providing --tftp-no-options multiple times has no extra effect.\n"
+, stdout);
+ fputs(
" Disable it again with --no-tftp-no-options.\n"
"\n"
" Example:\n"
-, stdout);
- fputs(
" curl --tftp-no-options tftp://192.168.0.1/\n"
"\n"
-" See also --tftp-blksize. Added in 7.48.0.\n"
+" See also --tftp-blksize.\n"
"\n"
" -z, --time-cond <time>\n"
-" (HTTP FTP) Request a file that has been modified later than the\n"
-" given time and date, or one that has been modified before that\n"
-" time. The <date expression> can be all sorts of date strings or\n"
-" if it does not match any internal ones, it is taken as a file-\n"
+" (HTTP FTP) Request a file that has been modified later than the\n"
+" given time and date, or one that has been modified before that\n"
+" time. The <date expression> can be all sorts of date strings or\n"
, stdout);
fputs(
-" name and tries to get the modification date (mtime) from <file>\n"
-" instead. See the curl_getdate(3) man pages for date expression\n"
+" if it does not match any internal ones, it is taken as a file-\n"
+" name and tries to get the modification date (mtime) from <file>\n"
+" instead. See the curl_getdate(3) man pages for date expression\n"
" details.\n"
"\n"
" Start the date expression with a dash (-) to make it request for\n"
" a document that is older than the given date/time, default is a\n"
" document that is newer than the specified date/time.\n"
"\n"
-" If --time-cond is provided several times, the last set value\n"
, stdout);
fputs(
-" will be used.\n"
+" If provided a non-existing file, curl outputs a warning about\n"
+" that fact and proceeds to do the transfer without a time condi-\n"
+" tion.\n"
+"\n"
+" If -z, --time-cond is provided several times, the last set value\n"
+" is used.\n"
"\n"
" Examples:\n"
" curl -z \"Wed 01 Sep 2021 12:18:00\" https://example.com\n"
" curl -z \"-Wed 01 Sep 2021 12:18:00\" https://example.com\n"
" curl -z file https://example.com\n"
"\n"
+, stdout);
+ fputs(
" See also --etag-compare and -R, --remote-time.\n"
"\n"
" --tls-max <VERSION>\n"
-" (SSL) VERSION defines maximum supported TLS version. The minimum\n"
+" (TLS) VERSION defines maximum supported TLS version. The minimum\n"
" acceptable version is set by tlsv1.0, tlsv1.1, tlsv1.2 or\n"
-, stdout);
- fputs(
" tlsv1.3.\n"
"\n"
" If the connection is done without TLS, this option has no ef-\n"
@@ -5633,103 +5999,104 @@ void hugehelp(void)
" default\n"
" Use up to recommended TLS version.\n"
"\n"
+, stdout);
+ fputs(
" 1.0 Use up to TLSv1.0.\n"
" 1.1 Use up to TLSv1.1.\n"
" 1.2 Use up to TLSv1.2.\n"
" 1.3 Use up to TLSv1.3.\n"
"\n"
-" If --tls-max is provided several times, the last set value will be\n"
-, stdout);
- fputs(
-" used.\n"
-"\n"
-" Examples:\n"
-" curl --tls-max 1.2 https://example.com\n"
-" curl --tls-max 1.3 --tlsv1.2 https://example.com\n"
+" If --tls-max is provided several times, the last set value is\n"
+" used.\n"
"\n"
-" See also --tlsv1.0, --tlsv1.1, --tlsv1.2 and --tlsv1.3. --tls-max re-\n"
-" quires that the underlying libcurl was built to support TLS. Added in\n"
-" 7.54.0.\n"
+" Examples:\n"
+" curl --tls-max 1.2 https://example.com\n"
+" curl --tls-max 1.3 --tlsv1.2 https://example.com\n"
"\n"
-" --tls13-ciphers <ciphersuite list>\n"
-" (TLS) Specifies which cipher suites to use in the connection if\n"
+" See also --tlsv1.0, --tlsv1.1, --tlsv1.2 and --tlsv1.3.\n"
, stdout);
fputs(
-" it negotiates TLS 1.3. The list of ciphers suites must specify\n"
-" valid ciphers. Read up on TLS 1.3 cipher suite details on this\n"
-" URL:\n"
+" --tls-max requires that the underlying libcurl was built to sup-\n"
+" port TLS. Added in 7.54.0.\n"
"\n"
-" https://curl.se/docs/ssl-ciphers.html\n"
+" --tls13-ciphers <ciphersuite list>\n"
+" (TLS) Specifies which cipher suites to use in the connection if\n"
+" it negotiates TLS 1.3. The list of ciphers suites must specify\n"
+" valid ciphers. Read up on TLS 1.3 cipher suite details on this\n"
+" URL:\n"
"\n"
-" This option is currently used only when curl is built to use\n"
-" OpenSSL 1.1.1 or later. If you are using a different SSL backend\n"
-" you can try setting TLS 1.3 cipher suites by using the --ciphers\n"
-" option.\n"
+" https://curl.se/docs/ssl-ciphers.html\n"
"\n"
, stdout);
fputs(
-" If --tls13-ciphers is provided several times, the last set value\n"
-" will be used.\n"
+" This option is currently used only when curl is built to use\n"
+" OpenSSL 1.1.1 or later, or Schannel. If you are using a differ-\n"
+" ent SSL backend you can try setting TLS 1.3 cipher suites by us-\n"
+" ing the --ciphers option.\n"
"\n"
+" If --tls13-ciphers is provided several times, the last set value\n"
+" is used.\n"
" Example:\n"
" curl --tls13-ciphers TLS_AES_128_GCM_SHA256 https://example.com\n"
"\n"
-" See also --ciphers and --curves. Added in 7.61.0.\n"
+, stdout);
+ fputs(
+" See also --ciphers, --curves and --proxy-tls13-ciphers. Added in\n"
+" 7.61.0.\n"
"\n"
" --tlsauthtype <type>\n"
-" Set TLS authentication type. Currently, the only supported op-\n"
+" Set TLS authentication type. Currently, the only supported op-\n"
" tion is \"SRP\", for TLS-SRP (RFC 5054). If --tlsuser and\n"
+" --tlspassword are specified but --tlsauthtype is not, then this\n"
+" option defaults to \"SRP\". This option works only if the underly-\n"
, stdout);
fputs(
-" --tlspassword are specified but --tlsauthtype is not, then this\n"
-" option defaults to \"SRP\". This option works only if the underly-\n"
" ing libcurl is built with TLS-SRP support, which requires\n"
" OpenSSL or GnuTLS with TLS-SRP support.\n"
"\n"
" If --tlsauthtype is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
+" is used.\n"
" Example:\n"
" curl --tlsauthtype SRP https://example.com\n"
"\n"
-, stdout);
- fputs(
" See also --tlsuser.\n"
"\n"
" --tlspassword <string>\n"
" Set password for use with the TLS authentication method speci-\n"
+, stdout);
+ fputs(
" fied with --tlsauthtype. Requires that --tlsuser also be set.\n"
"\n"
" This option does not work with TLS 1.3.\n"
"\n"
" If --tlspassword is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
+" is used.\n"
" Example:\n"
" curl --tlspassword pwd --tlsuser user https://example.com\n"
"\n"
-, stdout);
- fputs(
" See also --tlsuser.\n"
"\n"
" --tlsuser <name>\n"
" Set username for use with the TLS authentication method speci-\n"
+, stdout);
+ fputs(
" fied with --tlsauthtype. Requires that --tlspassword also is\n"
" set.\n"
"\n"
" This option does not work with TLS 1.3.\n"
"\n"
-" If --tlsuser is provided several times, the last set value will\n"
-" be used.\n"
+" If --tlsuser is provided several times, the last set value is\n"
+" used.\n"
+"\n"
" Example:\n"
" curl --tlspassword pwd --tlsuser user https://example.com\n"
"\n"
-, stdout);
- fputs(
" See also --tlspassword.\n"
"\n"
" --tlsv1.0\n"
" (TLS) Forces curl to use TLS version 1.0 or later when connect-\n"
+, stdout);
+ fputs(
" ing to a remote TLS server.\n"
"\n"
" In old versions of curl this option was documented to allow\n"
@@ -5737,96 +6104,94 @@ void hugehelp(void)
" TLS library. Use --tls-max if you want to set a maximum TLS ver-\n"
" sion.\n"
"\n"
-, stdout);
- fputs(
" Providing --tlsv1.0 multiple times has no extra effect.\n"
"\n"
" Example:\n"
" curl --tlsv1.0 https://example.com\n"
"\n"
-" See also --tlsv1.3. Added in 7.34.0.\n"
+" See also --tlsv1.3.\n"
"\n"
" --tlsv1.1\n"
+, stdout);
+ fputs(
" (TLS) Forces curl to use TLS version 1.1 or later when connect-\n"
" ing to a remote TLS server.\n"
"\n"
" In old versions of curl this option was documented to allow\n"
" _only_ TLS 1.1. That behavior was inconsistent depending on the\n"
-, stdout);
- fputs(
" TLS library. Use --tls-max if you want to set a maximum TLS ver-\n"
" sion.\n"
"\n"
" Providing --tlsv1.1 multiple times has no extra effect.\n"
"\n"
" Example:\n"
+, stdout);
+ fputs(
" curl --tlsv1.1 https://example.com\n"
"\n"
-" See also --tlsv1.3 and --tls-max. Added in 7.34.0.\n"
+" See also --tlsv1.3 and --tls-max.\n"
"\n"
" --tlsv1.2\n"
" (TLS) Forces curl to use TLS version 1.2 or later when connect-\n"
" ing to a remote TLS server.\n"
"\n"
-, stdout);
- fputs(
" In old versions of curl this option was documented to allow\n"
" _only_ TLS 1.2. That behavior was inconsistent depending on the\n"
" TLS library. Use --tls-max if you want to set a maximum TLS ver-\n"
" sion.\n"
"\n"
+, stdout);
+ fputs(
" Providing --tlsv1.2 multiple times has no extra effect.\n"
"\n"
" Example:\n"
" curl --tlsv1.2 https://example.com\n"
"\n"
-" See also --tlsv1.3 and --tls-max. Added in 7.34.0.\n"
+" See also --tlsv1.3 and --tls-max.\n"
"\n"
" --tlsv1.3\n"
-, stdout);
- fputs(
" (TLS) Forces curl to use TLS version 1.3 or later when connect-\n"
" ing to a remote TLS server.\n"
"\n"
" If the connection is done without TLS, this option has no ef-\n"
" fect. This includes QUIC-using (HTTP/3) transfers.\n"
"\n"
+, stdout);
+ fputs(
" Note that TLS 1.3 is not supported by all TLS backends.\n"
" Providing --tlsv1.3 multiple times has no extra effect.\n"
"\n"
" Example:\n"
" curl --tlsv1.3 https://example.com\n"
"\n"
-, stdout);
- fputs(
" See also --tlsv1.2 and --tls-max. Added in 7.52.0.\n"
"\n"
" -1, --tlsv1\n"
-" (SSL) Tells curl to use at least TLS version 1.x when negotiat-\n"
+" (TLS) Tells curl to use at least TLS version 1.x when negotiat-\n"
" ing with a remote TLS server. That means TLS version 1.0 or\n"
" higher\n"
"\n"
-" Providing --tlsv1 multiple times has no extra effect.\n"
+, stdout);
+ fputs(
+" Providing -1, --tlsv1 multiple times has no extra effect.\n"
"\n"
" Example:\n"
" curl --tlsv1 https://example.com\n"
"\n"
" See also --http1.1 and --http2. -1, --tlsv1 requires that the\n"
-, stdout);
- fputs(
" underlying libcurl was built to support TLS. This option is mu-\n"
" tually exclusive to --tlsv1.1 and --tlsv1.2 and --tlsv1.3.\n"
"\n"
" --tr-encoding\n"
" (HTTP) Request a compressed Transfer-Encoding response using one\n"
-" of the algorithms curl supports, and uncompress the data while\n"
+, stdout);
+ fputs(
+" of the algorithms curl supports, and uncompress the data while\n"
" receiving it.\n"
"\n"
-" Providing --tr-encoding multiple times has no extra effect.\n"
+" Providing --tr-encoding multiple times has no extra effect.\n"
" Disable it again with --no-tr-encoding.\n"
"\n"
-, stdout);
- fputs(
" Example:\n"
" curl --tr-encoding https://example.com\n"
"\n"
@@ -5834,41 +6199,90 @@ void hugehelp(void)
"\n"
" --trace-ascii <file>\n"
" Enables a full trace dump of all incoming and outgoing data, in-\n"
+, stdout);
+ fputs(
" cluding descriptive information, to the given output file. Use\n"
" \"-\" as filename to have the output sent to stdout.\n"
"\n"
" This is similar to --trace, but leaves out the hex part and only\n"
+" shows the ASCII part of the dump. It makes smaller output that\n"
+" might be easier to read for untrained humans.\n"
+"\n"
+" Note that verbose output of curl activities and network traffic\n"
, stdout);
fputs(
-" shows the ASCII part of the dump. It makes smaller output that\n"
-" might be easier to read for untrained humans.\n"
+" might contain sensitive data, including user names, credentials\n"
+" or secret data content. Be aware and be careful when sharing\n"
+" trace logs with others.\n"
"\n"
" This option is global and does not need to be specified for each\n"
-" use of -:, --next.\n"
-"\n"
-" If --trace-ascii is provided several times, the last set value\n"
-" will be used.\n"
+" use of --next.\n"
"\n"
+" If --trace-ascii is provided several times, the last set value\n"
+" is used.\n"
" Example:\n"
" curl --trace-ascii log.txt https://example.com\n"
"\n"
, stdout);
fputs(
-" See also -v, --verbose and --trace. This option is mutually ex-\n"
+" See also -v, --verbose and --trace. This option is mutually ex-\n"
" clusive to --trace and -v, --verbose.\n"
"\n"
+" --trace-config <string>\n"
+" Set configuration for trace output. A comma-separated list of\n"
+" components where detailed output can be made available from.\n"
+" Names are case-insensitive. Specify 'all' to enable all trace\n"
+" components.\n"
+"\n"
+, stdout);
+ fputs(
+" In addition to trace component names, specify \"ids\" and \"time\"\n"
+" to avoid extra --trace-ids or --trace-time parameters.\n"
+"\n"
+" See the curl_global_trace(3) man page for more details.\n"
+"\n"
+" This option is global and does not need to be specified for each\n"
+" use of --next.\n"
+"\n"
+" --trace-config can be used several times in a command line\n"
+"\n"
+" Example:\n"
+" curl --trace-config ids,http/2 https://example.com\n"
+"\n"
+, stdout);
+ fputs(
+" See also -v, --verbose and --trace. This option is mutually ex-\n"
+" clusive to --trace and -v, --verbose. Added in 8.3.0.\n"
+"\n"
+" --trace-ids\n"
+" Prepends the transfer and connection identifiers to each trace\n"
+" or verbose line that curl displays.\n"
+"\n"
+" This option is global and does not need to be specified for each\n"
+" use of --next.\n"
+"\n"
+" Providing --trace-ids multiple times has no extra effect. Dis-\n"
+, stdout);
+ fputs(
+" able it again with --no-trace-ids.\n"
+"\n"
+" Example:\n"
+" curl --trace-ids --trace-ascii output https://example.com\n"
+"\n"
+" See also --trace and -v, --verbose. Added in 8.2.0.\n"
+"\n"
" --trace-time\n"
" Prepends a time stamp to each trace or verbose line that curl\n"
" displays.\n"
"\n"
" This option is global and does not need to be specified for each\n"
-" use of -:, --next.\n"
+" use of --next.\n"
"\n"
+, stdout);
+ fputs(
" Providing --trace-time multiple times has no extra effect. Dis-\n"
" able it again with --no-trace-time.\n"
"\n"
-, stdout);
- fputs(
" Example:\n"
" curl --trace-time --trace-ascii output https://example.com\n"
"\n"
@@ -5876,23 +6290,31 @@ void hugehelp(void)
"\n"
" --trace <file>\n"
" Enables a full trace dump of all incoming and outgoing data, in-\n"
-" cluding descriptive information, to the given output file. Use\n"
-" \"-\" as filename to have the output sent to stdout. Use \"%\" as\n"
+" cluding descriptive information, to the given output file. Use\n"
+, stdout);
+ fputs(
+" \"-\" as filename to have the output sent to stdout. Use \"%\" as\n"
" filename to have the output sent to stderr.\n"
"\n"
+" Note that verbose output of curl activities and network traffic\n"
+" might contain sensitive data, including user names, credentials\n"
+" or secret data content. Be aware and be careful when sharing\n"
+" trace logs with others.\n"
+"\n"
+" This option is global and does not need to be specified for each\n"
, stdout);
fputs(
-" This option is global and does not need to be specified for each\n"
-" use of -:, --next.\n"
+" use of --next.\n"
"\n"
-" If --trace is provided several times, the last set value will be\n"
+" If --trace is provided several times, the last set value is\n"
" used.\n"
"\n"
" Example:\n"
" curl --trace log.txt https://example.com\n"
"\n"
-" See also --trace-ascii and --trace-time. This option is mutually\n"
-" exclusive to -v, --verbose and --trace-ascii.\n"
+" See also --trace-ascii, --trace-config, --trace-ids and\n"
+" --trace-time. This option is mutually exclusive to -v, --verbose\n"
+" and --trace-ascii.\n"
"\n"
" --unix-socket <path>\n"
, stdout);
@@ -5901,74 +6323,110 @@ void hugehelp(void)
" the network.\n"
"\n"
" If --unix-socket is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
+" is used.\n"
" Example:\n"
" curl --unix-socket socket-path https://example.com\n"
"\n"
-" See also --abstract-unix-socket. Added in 7.40.0.\n"
+" See also --abstract-unix-socket.\n"
"\n"
" -T, --upload-file <file>\n"
-" This transfers the specified local file to the remote URL. If\n"
+" This transfers the specified local file to the remote URL.\n"
+"\n"
, stdout);
fputs(
-" there is no file part in the specified URL, curl will append the\n"
-" local file name. NOTE that you must use a trailing / on the last\n"
-" directory to really prove to Curl that there is no file name or\n"
-" curl will think that your last directory name is the remote file\n"
-" name to use. That will most likely cause the upload operation to\n"
-" fail. If this is used on an HTTP(S) server, the PUT command will\n"
-" be used.\n"
+" If there is no file part in the specified URL, curl appends the\n"
+" local file name to the end of the URL before the operation\n"
+" starts. You must use a trailing slash (/) on the last directory\n"
+" to prove to curl that there is no file name or curl thinks that\n"
+" your last directory name is the remote file name to use.\n"
"\n"
+" When putting the local file name at the end of the URL, curl ig-\n"
, stdout);
fputs(
-" Use the file name \"-\" (a single dash) to use stdin instead of a\n"
-" given file. Alternately, the file name \".\" (a single period)\n"
-" may be specified instead of \"-\" to use stdin in non-blocking\n"
-" mode to allow reading server output while stdin is being up-\n"
+" nores what is on the left side of any slash (/) or backslash (\\)\n"
+" used in the file name and only appends what is on the right side\n"
+" of the rightmost such character.\n"
+"\n"
+" Use the file name \"-\" (a single dash) to use stdin instead of a\n"
+" given file. Alternately, the file name \".\" (a single period)\n"
+" may be specified instead of \"-\" to use stdin in non-blocking\n"
+, stdout);
+ fputs(
+" mode to allow reading server output while stdin is being up-\n"
" loaded.\n"
"\n"
-" You can specify one --upload-file for each URL on the command\n"
-" line. Each -T, --upload-file + URL pair specifies what to upload\n"
+" If this option is used with a HTTP(S) URL, the PUT method is\n"
+" used.\n"
+"\n"
+" You can specify one -T, --upload-file for each URL on the com-\n"
+" mand line. Each -T, --upload-file + URL pair specifies what to\n"
+" upload and to where. curl also supports \"globbing\" of the -T,\n"
, stdout);
fputs(
-" and to where. curl also supports \"globbing\" of the --upload-file\n"
-" argument, meaning that you can upload multiple files to a single\n"
-" URL by using the same URL globbing style supported in the URL.\n"
+" --upload-file argument, meaning that you can upload multiple\n"
+" files to a single URL by using the same URL globbing style sup-\n"
+" ported in the URL.\n"
"\n"
-" When uploading to an SMTP server: the uploaded data is assumed\n"
+" When uploading to an SMTP server: the uploaded data is assumed\n"
" to be RFC 5322 formatted. It has to feature the necessary set of\n"
" headers and mail body formatted correctly by the user as curl\n"
+" does not transcode nor encode it further in any way.\n"
+"\n"
, stdout);
fputs(
-" will not transcode nor encode it further in any way.\n"
-"\n"
-" --upload-file can be used several times in a command line\n"
+" -T, --upload-file can be used several times in a command line\n"
"\n"
" Examples:\n"
" curl -T file https://example.com\n"
" curl -T \"img[1-1000].png\" ftp://ftp.example.com/\n"
" curl --upload-file \"{file1,file2}\" https://example.com\n"
"\n"
-" See also -G, --get and -I, --head.\n"
+" See also -G, --get, -I, --head, -X, --request and -d, --data.\n"
+"\n"
+" --url-query <data>\n"
+" (all) This option adds a piece of data, usually a name + value\n"
+, stdout);
+ fputs(
+" pair, to the end of the URL query part. The syntax is identical\n"
+" to that used for --data-urlencode with one extension:\n"
+"\n"
+" If the argument starts with a '+' (plus), the rest of the string\n"
+" is provided as-is unencoded.\n"
+"\n"
+" The query part of a URL is the one following the question mark\n"
+" on the right end.\n"
+"\n"
+" --url-query can be used several times in a command line\n"
+"\n"
+" Examples:\n"
+, stdout);
+ fputs(
+" curl --url-query name=val https://example.com\n"
+" curl --url-query =encodethis http://example.net/foo\n"
+" curl --url-query name@file https://example.com\n"
+" curl --url-query @fileonly https://example.com\n"
+" curl --url-query \"+name=%20foo\" https://example.com\n"
+"\n"
+" See also --data-urlencode and -G, --get. Added in 7.87.0.\n"
"\n"
" --url <url>\n"
-" Specify a URL to fetch. This option is mostly handy when you\n"
+" Specify a URL to fetch. This option is mostly handy when you\n"
, stdout);
fputs(
" want to specify URL(s) in a config file.\n"
"\n"
-" If the given URL is missing a scheme name (such as \"http://\" or\n"
-" \"ftp://\" etc) then curl will make a guess based on the host. If\n"
-" the outermost sub-domain name matches DICT, FTP, IMAP, LDAP,\n"
-" POP3 or SMTP then that protocol will be used, otherwise HTTP\n"
-" will be used. Since 7.45.0 guessing can be disabled by setting a\n"
+" If the given URL is missing a scheme name (such as \"http://\" or\n"
+" \"ftp://\" etc) then curl makes a guess based on the host. If the\n"
+" outermost subdomain name matches DICT, FTP, IMAP, LDAP, POP3 or\n"
+" SMTP then that protocol is used, otherwise HTTP is used. Guess-\n"
+" ing can be avoided by providing a full URL including the scheme,\n"
, stdout);
fputs(
-" default protocol, see --proto-default for details.\n"
+" or disabled by setting a default protocol (added in 7.45.0), see\n"
+" --proto-default for details.\n"
"\n"
-" To control where this URL is written, use the --output or the\n"
-" --remote-name options.\n"
+" To control where this URL is written, use the -o, --output or\n"
+" the -O, --remote-name options.\n"
"\n"
" WARNING: On Windows, particular file:// accesses can be con-\n"
" verted to network accesses by the operating system. Beware!\n"
@@ -5976,54 +6434,54 @@ void hugehelp(void)
" --url can be used several times in a command line\n"
"\n"
" Example:\n"
-" curl --url https://example.com\n"
-"\n"
, stdout);
fputs(
+" curl --url https://example.com\n"
+"\n"
" See also -:, --next and -K, --config.\n"
"\n"
" -B, --use-ascii\n"
" (FTP LDAP) Enable ASCII transfer. For FTP, this can also be en-\n"
" forced by using a URL that ends with \";type=A\". This option\n"
" causes data sent to stdout to be in text mode for win32 systems.\n"
-" Providing --use-ascii multiple times has no extra effect. Dis-\n"
-" able it again with --no-use-ascii.\n"
+" Providing -B, --use-ascii multiple times has no extra effect.\n"
+" Disable it again with --no-use-ascii.\n"
"\n"
-" Example:\n"
, stdout);
fputs(
+" Example:\n"
" curl -B ftp://example.com/README\n"
"\n"
" See also --crlf and --data-ascii.\n"
"\n"
" -A, --user-agent <name>\n"
" (HTTP) Specify the User-Agent string to send to the HTTP server.\n"
-" To encode blanks in the string, surround the string with single\n"
-" quote marks. This header can also be set with the --header or\n"
-" the --proxy-header options.\n"
+" To encode blanks in the string, surround the string with single\n"
+" quote marks. This header can also be set with the -H, --header\n"
+" or the --proxy-header options.\n"
"\n"
-" If you give an empty argument to -A, --user-agent (\"\"), it will\n"
, stdout);
fputs(
-" remove the header completely from the request. If you prefer a\n"
+" If you give an empty argument to -A, --user-agent (\"\"), it re-\n"
+" moves the header completely from the request. If you prefer a\n"
" blank header, you can set it to a single space (\" \").\n"
"\n"
-" If --user-agent is provided several times, the last set value\n"
-" will be used.\n"
+" If -A, --user-agent is provided several times, the last set\n"
+" value is used.\n"
"\n"
" Example:\n"
" curl -A \"Agent 007\" https://example.com\n"
"\n"
" See also -H, --header and --proxy-header.\n"
"\n"
-" -u, --user <user:password>\n"
, stdout);
fputs(
+" -u, --user <user:password>\n"
" Specify the user name and password to use for server authentica-\n"
-" tion. Overrides --netrc and --netrc-optional.\n"
+" tion. Overrides -n, --netrc and --netrc-optional.\n"
"\n"
-" If you simply specify the user name, curl will prompt for a\n"
-" password.\n"
+" If you simply specify the user name, curl prompts for a pass-\n"
+" word.\n"
"\n"
" The user name and passwords are split up on the first colon,\n"
" which makes it impossible to use a colon in the user name with\n"
@@ -6031,26 +6489,27 @@ void hugehelp(void)
"\n"
, stdout);
fputs(
-" On systems where it works, curl will hide the given option argu-\n"
-" ment from process listings. This is not enough to protect cre-\n"
-" dentials from possibly getting seen by other users on the same\n"
-" system as they will still be visible for a moment before\n"
-" cleared. Such sensitive data should be retrieved from a file in-\n"
-" stead or similar and never used in clear text in a command line.\n"
+" On systems where it works, curl hides the given option argument\n"
+" from process listings. This is not enough to protect credentials\n"
+" from possibly getting seen by other users on the same system as\n"
+" they still are visible for a brief moment before cleared. Such\n"
+" sensitive data should be retrieved from a file instead or simi-\n"
+" lar and never used in clear text in a command line.\n"
+"\n"
, stdout);
fputs(
-" When using Kerberos V5 with a Windows based server you should\n"
-" include the Windows domain name in the user name, in order for\n"
-" the server to successfully obtain a Kerberos Ticket. If you do\n"
+" When using Kerberos V5 with a Windows based server you should\n"
+" include the Windows domain name in the user name, in order for\n"
+" the server to successfully obtain a Kerberos Ticket. If you do\n"
" not, then the initial authentication handshake may fail.\n"
"\n"
-" When using NTLM, the user name can be specified simply as the\n"
-" user name, without the domain, if there is a single domain and\n"
+" When using NTLM, the user name can be specified simply as the\n"
+" user name, without the domain, if there is a single domain and\n"
, stdout);
fputs(
" forest in your setup for example.\n"
"\n"
-" To specify the domain name use either Down-Level Logon Name or\n"
+" To specify the domain name use either Down-Level Logon Name or\n"
" UPN (User Principal Name) formats. For example, EXAMPLE\\user and\n"
" user@example.com respectively.\n"
"\n"
@@ -6061,7 +6520,7 @@ void hugehelp(void)
fputs(
" ronment by specifying a single colon with this option: \"-u :\".\n"
"\n"
-" If --user is provided several times, the last set value will be\n"
+" If -u, --user is provided several times, the last set value is\n"
" used.\n"
"\n"
" Example:\n"
@@ -6069,62 +6528,131 @@ void hugehelp(void)
"\n"
" See also -n, --netrc and -K, --config.\n"
"\n"
+" --variable <[%]name=text/@file>\n"
+" Set a variable with \"name=content\" or \"name@file\" (where \"file\"\n"
+, stdout);
+ fputs(
+" can be stdin if set to a single dash (-)). The name is a case\n"
+" sensitive identifier that must consist of no other letters than\n"
+" a-z, A-Z, 0-9 or underscore. The specified content is then asso-\n"
+" ciated with this identifier.\n"
+"\n"
+" Setting the same variable name again overwrites the old contents\n"
+" with the new.\n"
+"\n"
+" The contents of a variable can be referenced in a later command\n"
+, stdout);
+ fputs(
+" line option when that option name is prefixed with \"--expand-\",\n"
+" and the name is used as \"{{name}}\" (without the quotes).\n"
+"\n"
+" --variable can import environment variables into the name space.\n"
+" Opt to either require the environment variable to be set or pro-\n"
+" vide a default value for the variable in case it is not already\n"
+" set.\n"
+"\n"
+" --variable %name imports the variable called 'name' but exits\n"
+, stdout);
+ fputs(
+" with an error if that environment variable is not already set.\n"
+" To provide a default value if the environment variable is not\n"
+" set, use --variable %name=content or --variable %name@content.\n"
+" Note that on some systems - but not all - environment variables\n"
+" are case insensitive.\n"
+"\n"
+" When expanding variables, curl supports a set of functions that\n"
+, stdout);
+ fputs(
+" can make the variable contents more convenient to use. You apply\n"
+" a function to a variable expansion by adding a colon and then\n"
+" list the desired functions in a comma-separated list that is\n"
+" evaluated in a left-to-right order. Variable content holding\n"
+" null bytes that are not encoded when expanded, causes an error.\n"
+"\n"
+" Available functions:\n"
+"\n"
+, stdout);
+ fputs(
+" trim removes all leading and trailing white space.\n"
+"\n"
+" json outputs the content using JSON string quoting\n"
+" rules.\n"
+"\n"
+" url shows the content URL (percent) encoded.\n"
+"\n"
+" b64 expands the variable base64 encoded\n"
+"\n"
+" --variable can be used several times in a command line\n"
+"\n"
+" Example:\n"
+" curl --variable name=smith https://example.com\n"
+"\n"
+, stdout);
+ fputs(
+" See also -K, --config. Added in 8.3.0.\n"
+"\n"
" -v, --verbose\n"
" Makes curl verbose during the operation. Useful for debugging\n"
" and seeing what's going on \"under the hood\". A line starting\n"
-, stdout);
- fputs(
" with '>' means \"header data\" sent by curl, '<' means \"header\n"
" data\" received by curl that is hidden in normal cases, and a\n"
" line starting with '*' means additional info provided by curl.\n"
"\n"
-" If you only want HTTP headers in the output, --include might be\n"
-" the option you are looking for.\n"
+, stdout);
+ fputs(
+" If you only want HTTP headers in the output, -i, --include or\n"
+" -D, --dump-header might be more suitable options.\n"
"\n"
" If you think this option still does not give you enough details,\n"
+" consider using --trace or --trace-ascii instead.\n"
+"\n"
+" Note that verbose output of curl activities and network traffic\n"
+" might contain sensitive data, including user names, credentials\n"
, stdout);
fputs(
-" consider using --trace or --trace-ascii instead.\n"
+" or secret data content. Be aware and be careful when sharing\n"
+" trace logs with others.\n"
"\n"
" This option is global and does not need to be specified for each\n"
-" use of -:, --next.\n"
-"\n"
-" Use --silent to make curl really quiet.\n"
+" use of --next.\n"
"\n"
-" Providing --verbose multiple times has no extra effect. Disable\n"
-" it again with --no-verbose.\n"
+" Providing -v, --verbose multiple times has no extra effect.\n"
+" Disable it again with --no-verbose.\n"
"\n"
" Example:\n"
" curl --verbose https://example.com\n"
"\n"
, stdout);
fputs(
-" See also -i, --include. This option is mutually exclusive to\n"
-" --trace and --trace-ascii.\n"
+" See also -i, --include, -s, --silent, --trace and --trace-ascii.\n"
+" This option is mutually exclusive to --trace and --trace-ascii.\n"
"\n"
" -V, --version\n"
" Displays information about curl and the libcurl version it uses.\n"
" The first line includes the full version of curl, libcurl and\n"
" other 3rd party libraries linked with the executable.\n"
"\n"
-" The second line (starts with \"Protocols:\") shows all protocols\n"
-" that libcurl reports to support.\n"
-"\n"
+" The second line (starts with \"Release-Date:\") shows the release\n"
, stdout);
fputs(
-" The third line (starts with \"Features:\") shows specific features\n"
-" libcurl reports to offer. Available features include:\n"
+" date.\n"
+"\n"
+" The third line (starts with \"Protocols:\") shows all protocols\n"
+" that libcurl reports to support.\n"
+"\n"
+" The fourth line (starts with \"Features:\") shows specific fea-\n"
+" tures libcurl reports to offer. Available features include:\n"
"\n"
" alt-svc\n"
" Support for the Alt-Svc: header is provided.\n"
"\n"
" AsynchDNS\n"
-" This curl uses asynchronous name resolves. Asynchronous\n"
-" name resolves can be done using either the c-ares or the\n"
-" threaded resolver backends.\n"
-"\n"
+" This curl uses asynchronous name resolves. Asynchronous\n"
, stdout);
fputs(
+" name resolves can be done using either the c-ares or the\n"
+" threaded resolver backends.\n"
+"\n"
" brotli Support for automatic brotli compression over HTTP(S).\n"
"\n"
" CharConv\n"
@@ -6132,12 +6660,12 @@ void hugehelp(void)
" (like EBCDIC)\n"
"\n"
" Debug This curl uses a libcurl built with Debug. This enables\n"
-" more error-tracking and memory debugging etc. For curl-\n"
-" developers only!\n"
-"\n"
-" gsasl The built-in SASL authentication includes extensions to\n"
, stdout);
fputs(
+" more error-tracking and memory debugging etc. For\n"
+" curl-developers only!\n"
+"\n"
+" gsasl The built-in SASL authentication includes extensions to\n"
" support SCRAM because libcurl was built with libgsasl.\n"
"\n"
" GSS-API\n"
@@ -6146,6 +6674,8 @@ void hugehelp(void)
" HSTS HSTS support is present.\n"
"\n"
" HTTP2 HTTP/2 support has been built-in.\n"
+, stdout);
+ fputs(
" HTTP3 HTTP/3 support has been built-in.\n"
"\n"
" HTTPS-proxy\n"
@@ -6153,8 +6683,6 @@ void hugehelp(void)
"\n"
" IDN This curl supports IDN - international domain names.\n"
"\n"
-, stdout);
- fputs(
" IPv6 You can use IPv6 with this.\n"
"\n"
" Kerberos\n"
@@ -6164,28 +6692,28 @@ void hugehelp(void)
" This curl supports transfers of large files, files larger\n"
" than 2GB.\n"
"\n"
+, stdout);
+ fputs(
" libz Automatic decompression (via gzip, deflate) of compressed\n"
" files over HTTP is supported.\n"
"\n"
" MultiSSL\n"
" This curl supports multiple TLS backends.\n"
"\n"
-, stdout);
- fputs(
" NTLM NTLM authentication is supported.\n"
"\n"
" NTLM_WB\n"
" NTLM delegation to winbind helper is supported.\n"
"\n"
" PSL PSL is short for Public Suffix List and means that this\n"
+, stdout);
+ fputs(
" curl has been built with knowledge about \"public suf-\n"
" fixes\".\n"
"\n"
" SPNEGO SPNEGO authentication is supported.\n"
"\n"
" SSL SSL versions of various protocols are supported, such as\n"
-, stdout);
- fputs(
" HTTPS, FTPS, POP3S and so on.\n"
"\n"
" SSPI SSPI is supported.\n"
@@ -6195,6 +6723,8 @@ void hugehelp(void)
" for TLS.\n"
"\n"
" TrackMemory\n"
+, stdout);
+ fputs(
" Debug memory tracking is supported.\n"
"\n"
" Unicode\n"
@@ -6203,121 +6733,143 @@ void hugehelp(void)
" UnixSockets\n"
" Unix sockets support is provided.\n"
"\n"
-, stdout);
- fputs(
" zstd Automatic decompression (via zstd) of compressed files\n"
" over HTTP is supported.\n"
"\n"
-" Providing --version multiple times has no extra effect. Disable it\n"
-" again with --no-version.\n"
-"\n"
-" Example:\n"
-" curl --version\n"
+" Example:\n"
+" curl --version\n"
"\n"
-" See also -h, --help and -M, --manual.\n"
+" See also -h, --help and -M, --manual.\n"
"\n"
" -w, --write-out <format>\n"
-" Make curl display information on stdout after a completed trans-\n"
, stdout);
fputs(
+" Make curl display information on stdout after a completed trans-\n"
" fer. The format is a string that may contain plain text mixed\n"
" with any number of variables. The format can be specified as a\n"
" literal \"string\", or you can have curl read the format from a\n"
" file with \"@filename\" and to tell curl to read the format from\n"
" stdin you write \"@-\".\n"
"\n"
-" The variables present in the output format will be substituted\n"
, stdout);
fputs(
-" by the value or text that curl thinks fit, as described below.\n"
-" All variables are specified as %{variable_name} and to output a\n"
-" normal % you just write them as %%. You can output a newline by\n"
-" using \\n, a carriage return with \\r and a tab space with \\t.\n"
-"\n"
-" The output will be written to standard output, but this can be\n"
-" switched to standard error by using %{stderr}.\n"
+" The variables present in the output format are substituted by\n"
+" the value or text that curl thinks fit, as described below. All\n"
+" variables are specified as %{variable_name} and to output a nor-\n"
+" mal % you just write them as %%. You can output a newline by us-\n"
+" ing \\n, a carriage return with \\r and a tab space with \\t.\n"
"\n"
+" The output is by default written to standard output, but can be\n"
, stdout);
fputs(
+" changed with %{stderr} and %output{}.\n"
+"\n"
" Output HTTP headers from the most recent request by using\n"
" %header{name} where name is the case insensitive name of the\n"
" header (without the trailing colon). The header contents are ex-\n"
" actly as sent over the network, with leading and trailing white-\n"
-" space trimmed. Added in curl 7.84.0.\n"
+" space trimmed (added in 7.84.0).\n"
"\n"
-" NOTE: The %-symbol is a special symbol in the win32-environment,\n"
+" Select a specific target destination file to write the output\n"
, stdout);
fputs(
-" where all occurrences of % must be doubled when using this op-\n"
-" tion.\n"
+" to, by using %output{name} (added in curl 8.3.0) where name is\n"
+" the full file name. The output following that instruction is\n"
+" then written to that file. More than one %output{} instruction\n"
+" can be specified in the same write-out argument. If the file\n"
+" name cannot be created, curl leaves the output destination to\n"
+" the one used prior to the %output{} instruction. Use %out-\n"
+, stdout);
+ fputs(
+" put{>>name} to append data to an existing file.\n"
+"\n"
+" NOTE: In Windows the %-symbol is a special symbol used to expand\n"
+" environment variables. In batch files all occurrences of % must\n"
+" be doubled when using this option to properly escape. If this\n"
+" option is used at the command prompt then the % cannot be es-\n"
+" caped and unintended expansion is possible.\n"
"\n"
" The variables available are:\n"
"\n"
+, stdout);
+ fputs(
+" certs Output the certificate chain with details. Sup-\n"
+" ported only by the OpenSSL, GnuTLS, Schannel and\n"
+" Secure Transport backends. (Added in 7.88.0)\n"
+"\n"
" content_type The Content-Type of the requested document, if\n"
" there was any.\n"
"\n"
" errormsg The error message. (Added in 7.75.0)\n"
"\n"
-" exitcode The numerical exitcode of the transfer. (Added in\n"
-" 7.75.0)\n"
-"\n"
-" filename_effective\n"
, stdout);
fputs(
+" exitcode The numerical exit code of the transfer. (Added\n"
+" in 7.75.0)\n"
+"\n"
+" filename_effective\n"
" The ultimate filename that curl writes out to.\n"
" This is only meaningful if curl is told to write\n"
-" to a file with the --remote-name or --output op-\n"
-" tion. It's most useful in combination with the\n"
-" --remote-header-name option.\n"
-"\n"
-" ftp_entry_path The initial path curl ended up in when logging on\n"
+" to a file with the -O, --remote-name or -o,\n"
+" --output option. It's most useful in combination\n"
, stdout);
fputs(
+" with the -J, --remote-header-name option.\n"
+"\n"
+" ftp_entry_path The initial path curl ended up in when logging on\n"
" to the remote FTP server.\n"
"\n"
" header_json A JSON object with all HTTP response headers from\n"
" the recent transfer. Values are provided as ar-\n"
" rays, since in the case of multiple headers there\n"
-" can be multiple values.\n"
-"\n"
-" The header names provided in lowercase, listed in\n"
, stdout);
fputs(
+" can be multiple values. (Added in 7.83.0)\n"
+"\n"
+" The header names provided in lowercase, listed in\n"
" order of appearance over the wire. Except for du-\n"
-" plicated headers. They are grouped on the first\n"
-" occurrence of that header, each value is pre-\n"
+" plicated headers. They are grouped on the first\n"
+" occurrence of that header, each value is pre-\n"
" sented in the JSON array.\n"
"\n"
+, stdout);
+ fputs(
" http_code The numerical response code that was found in the\n"
" last retrieved HTTP(S) or FTP(s) transfer.\n"
"\n"
-, stdout);
- fputs(
" http_connect The numerical code that was found in the last re-\n"
" sponse (from a proxy) to a curl CONNECT request.\n"
"\n"
" http_version The http version that was effectively used.\n"
" (Added in 7.50.0)\n"
"\n"
-" json A JSON object with all available keys.\n"
-"\n"
-" local_ip The IP address of the local end of the most re-\n"
, stdout);
fputs(
+" json A JSON object with all available keys. (Added in\n"
+" 7.70.0)\n"
+"\n"
+" local_ip The IP address of the local end of the most re-\n"
" cently done connection - can be either IPv4 or\n"
" IPv6.\n"
"\n"
" local_port The local port number of the most recently done\n"
" connection.\n"
"\n"
+, stdout);
+ fputs(
" method The http method used in the most recent HTTP re-\n"
" quest. (Added in 7.72.0)\n"
"\n"
-" num_connects Number of new connects made in the recent trans-\n"
-" fer.\n"
+" num_certs Number of server certificates received in the TLS\n"
+" handshake. Supported only by the OpenSSL, GnuTLS,\n"
+" Schannel and Secure Transport backends. (Added\n"
+" in 7.88.0)\n"
"\n"
+" num_connects Number of new connects made in the recent trans-\n"
, stdout);
fputs(
+" fer.\n"
+"\n"
" num_headers The number of response headers in the most recent\n"
" request (restarted at each redirect). Note that\n"
" the status line IS NOT a header. (Added in\n"
@@ -6326,10 +6878,10 @@ void hugehelp(void)
" num_redirects Number of redirects that were followed in the re-\n"
" quest.\n"
"\n"
-" onerror The rest of the output is only shown if the\n"
, stdout);
fputs(
-" transfer returned a non-zero error (Added in\n"
+" onerror The rest of the output is only shown if the\n"
+" transfer returned a non-zero error. (Added in\n"
" 7.75.0)\n"
"\n"
" proxy_ssl_verify_result\n"
@@ -6337,22 +6889,22 @@ void hugehelp(void)
" cate verification that was requested. 0 means the\n"
" verification was successful. (Added in 7.52.0)\n"
"\n"
-" redirect_url When an HTTP request was made without --location\n"
, stdout);
fputs(
-" to follow redirects (or when --max-redirs is\n"
-" met), this variable will show the actual URL a\n"
-" redirect would have gone to.\n"
+" redirect_url When an HTTP request was made without -L, --loca-\n"
+" tion to follow redirects (or when --max-redirs is\n"
+" met), this variable shows the actual URL a redi-\n"
+" rect would have gone to.\n"
"\n"
-" referer The Referer: header, if there was any. (Added in\n"
+" referer The Referer: header, if there was any. (Added in\n"
" 7.76.0)\n"
"\n"
-" remote_ip The remote IP address of the most recently done\n"
-" connection - can be either IPv4 or IPv6.\n"
-"\n"
+" remote_ip The remote IP address of the most recently done\n"
, stdout);
fputs(
-" remote_port The remote port number of the most recently done\n"
+" connection - can be either IPv4 or IPv6.\n"
+"\n"
+" remote_port The remote port number of the most recently done\n"
" connection.\n"
"\n"
" response_code The numerical response code that was found in the\n"
@@ -6392,24 +6944,24 @@ void hugehelp(void)
" tion that was requested. 0 means the verification\n"
" was successful.\n"
"\n"
-" stderr From this point on, the --write-out output will\n"
-" be written to standard error. (Added in 7.63.0)\n"
+" stderr From this point on, the -w, --write-out output is\n"
+" written to standard error. (Added in 7.63.0)\n"
"\n"
, stdout);
fputs(
-" stdout From this point on, the --write-out output will\n"
-" be written to standard output. This is the de-\n"
-" fault, but can be used to switch back after\n"
-" switching to stderr. (Added in 7.63.0)\n"
+" stdout From this point on, the -w, --write-out output is\n"
+" written to standard output. This is the default,\n"
+" but can be used to switch back after switching to\n"
+" stderr. (Added in 7.63.0)\n"
"\n"
" time_appconnect\n"
-" The time, in seconds, it took from the start un-\n"
-" til the SSL/SSH/etc connect/handshake to the re-\n"
+" The time, in seconds, it took from the start un-\n"
+" til the SSL/SSH/etc connect/handshake to the re-\n"
, stdout);
fputs(
" mote host was completed.\n"
"\n"
-" time_connect The time, in seconds, it took from the start un-\n"
+" time_connect The time, in seconds, it took from the start un-\n"
" til the TCP connect to the remote host (or proxy)\n"
" was completed.\n"
"\n"
@@ -6436,45 +6988,119 @@ void hugehelp(void)
"\n"
" time_starttransfer\n"
" The time, in seconds, it took from the start un-\n"
-" til the first byte was just about to be trans-\n"
+" til the first byte is received. This includes\n"
, stdout);
fputs(
-" ferred. This includes time_pretransfer and also\n"
-" the time the server needed to calculate the re-\n"
-" sult.\n"
+" time_pretransfer and also the time the server\n"
+" needed to calculate the result.\n"
"\n"
-" time_total The total time, in seconds, that the full opera-\n"
+" time_total The total time, in seconds, that the full opera-\n"
" tion lasted.\n"
"\n"
" url The URL that was fetched. (Added in 7.75.0)\n"
"\n"
-" urlnum The URL index number of this transfer, 0-indexed.\n"
+" url.scheme The scheme part of the URL that was fetched.\n"
+" (Added in 8.1.0)\n"
+"\n"
+, stdout);
+ fputs(
+" url.user The user part of the URL that was fetched. (Added\n"
+" in 8.1.0)\n"
+"\n"
+" url.password The password part of the URL that was fetched.\n"
+" (Added in 8.1.0)\n"
+"\n"
+" url.options The options part of the URL that was fetched.\n"
+" (Added in 8.1.0)\n"
+"\n"
+" url.host The host part of the URL that was fetched. (Added\n"
+" in 8.1.0)\n"
+"\n"
+, stdout);
+ fputs(
+" url.port The port number of the URL that was fetched. If\n"
+" no port number was specified, but the URL scheme\n"
+" is known, that scheme's default port number is\n"
+" shown. (Added in 8.1.0)\n"
+"\n"
+" url.path The path part of the URL that was fetched. (Added\n"
+" in 8.1.0)\n"
+"\n"
+" url.query The query part of the URL that was fetched.\n"
+, stdout);
+ fputs(
+" (Added in 8.1.0)\n"
+"\n"
+" url.fragment The fragment part of the URL that was fetched.\n"
+" (Added in 8.1.0)\n"
+"\n"
+" url.zoneid The zone id part of the URL that was fetched.\n"
+" (Added in 8.1.0)\n"
+"\n"
+" urle.scheme The scheme part of the effective (last) URL that\n"
+" was fetched. (Added in 8.1.0)\n"
+"\n"
+, stdout);
+ fputs(
+" urle.user The user part of the effective (last) URL that\n"
+" was fetched. (Added in 8.1.0)\n"
+"\n"
+" urle.password The password part of the effective (last) URL\n"
+" that was fetched. (Added in 8.1.0)\n"
+"\n"
+" urle.options The options part of the effective (last) URL that\n"
+" was fetched. (Added in 8.1.0)\n"
+"\n"
+, stdout);
+ fputs(
+" urle.host The host part of the effective (last) URL that\n"
+" was fetched. (Added in 8.1.0)\n"
+"\n"
+" urle.port The port number of the effective (last) URL that\n"
+" was fetched. If no port number was specified, but\n"
+" the URL scheme is known, that scheme's default\n"
+" port number is shown. (Added in 8.1.0)\n"
+"\n"
+, stdout);
+ fputs(
+" urle.path The path part of the effective (last) URL that\n"
+" was fetched. (Added in 8.1.0)\n"
+"\n"
+" urle.query The query part of the effective (last) URL that\n"
+" was fetched. (Added in 8.1.0)\n"
+"\n"
+" urle.fragment The fragment part of the effective (last) URL\n"
+" that was fetched. (Added in 8.1.0)\n"
+"\n"
, stdout);
fputs(
-" De-globbed URLs share the same index number as\n"
-" the origin globbed URL. (Added in 7.75.0)\n"
+" urle.zoneid The zone id part of the effective (last) URL that\n"
+" was fetched. (Added in 8.1.0)\n"
+"\n"
+" urlnum The URL index number of this transfer, 0-indexed.\n"
+" Unglobbed URLs share the same index number as the\n"
+" origin globbed URL. (Added in 7.75.0)\n"
"\n"
" url_effective The URL that was fetched last. This is most mean-\n"
+, stdout);
+ fputs(
" ingful if you have told curl to follow location:\n"
" headers.\n"
"\n"
-" If --write-out is provided several times, the last set value\n"
-" will be used.\n"
-"\n"
+" If -w, --write-out is provided several times, the last set value\n"
+" is used.\n"
" Example:\n"
-, stdout);
- fputs(
-" curl -w '%{http_code}\\n' https://example.com\n"
+" curl -w '%{response_code}\\n' https://example.com\n"
"\n"
" See also -v, --verbose and -I, --head.\n"
"\n"
" --xattr\n"
-" When saving output to a file, this option tells curl to store\n"
-" certain file metadata in extended file attributes. Currently,\n"
-" the URL is stored in the xdg.origin.url attribute and, for HTTP,\n"
-" the content type is stored in the mime_type attribute. If the\n"
+" When saving output to a file, this option tells curl to store\n"
, stdout);
fputs(
+" certain file metadata in extended file attributes. Currently,\n"
+" the URL is stored in the xdg.origin.url attribute and, for HTTP,\n"
+" the content type is stored in the mime_type attribute. If the\n"
" file system does not support extended attributes, a warning is\n"
" issued.\n"
"\n"
@@ -6482,33 +7108,35 @@ void hugehelp(void)
" it again with --no-xattr.\n"
"\n"
" Example:\n"
+, stdout);
+ fputs(
" curl --xattr -o storage https://example.com\n"
"\n"
" See also -R, --remote-time, -w, --write-out and -v, --verbose.\n"
"\n"
"FILES\n"
" ~/.curlrc\n"
-" Default config file, see --config for details.\n"
+" Default config file, see -K, --config for details.\n"
"\n"
"ENVIRONMENT\n"
-, stdout);
- fputs(
" The environment variables can be specified in lower case or upper case.\n"
" The lower case version has precedence. http_proxy is an exception as it\n"
" is only available in lower case.\n"
"\n"
+, stdout);
+ fputs(
" Using an environment variable to set the proxy has the same effect as\n"
-" using the --proxy option.\n"
+" using the -x, --proxy option.\n"
"\n"
" http_proxy [protocol://]<host>[:port]\n"
" Sets the proxy server to use for HTTP.\n"
" HTTPS_PROXY [protocol://]<host>[:port]\n"
-, stdout);
- fputs(
" Sets the proxy server to use for HTTPS.\n"
"\n"
" [url-protocol]_PROXY [protocol://]<host>[:port]\n"
" Sets the proxy server to use for [url-protocol], where the pro-\n"
+, stdout);
+ fputs(
" tocol is a protocol that curl supports and as specified in a\n"
" URL. FTP, FTPS, POP3, IMAP, SMTP, LDAP, etc.\n"
"\n"
@@ -6516,67 +7144,69 @@ void hugehelp(void)
" Sets the proxy server to use if no protocol-specific proxy is\n"
" set.\n"
"\n"
-, stdout);
- fputs(
" NO_PROXY <comma-separated list of hosts/domains>\n"
" list of host names that should not go through any proxy. If set\n"
" to an asterisk '*' only, it matches all hosts. Each name in this\n"
+, stdout);
+ fputs(
" list is matched as either a domain name which contains the host-\n"
" name, or the hostname itself.\n"
"\n"
" This environment variable disables use of the proxy even when\n"
-" specified with the --proxy option. That is NO_PROXY=direct.exam-\n"
+" specified with the -x, --proxy option. That is NO_PROXY=di-\n"
+" rect.example.com curl -x http://proxy.example.com http://di-\n"
+" rect.example.com accesses the target URL directly, and\n"
, stdout);
fputs(
-" ple.com curl -x http://proxy.example.com http://direct.exam-\n"
-" ple.com accesses the target URL directly, and NO_PROXY=di-\n"
-" rect.example.com curl -x http://proxy.example.com http://some-\n"
-" where.example.com accesses the target URL through the proxy.\n"
+" NO_PROXY=direct.example.com curl -x http://proxy.example.com\n"
+" http://somewhere.example.com accesses the target URL through the\n"
+" proxy.\n"
"\n"
" The list of host names can also be include numerical IP ad-\n"
" dresses, and IPv6 versions should then be given without enclos-\n"
" ing brackets.\n"
"\n"
+" IP addresses can be specified using CIDR notation: an appended\n"
, stdout);
fputs(
-" IPv6 numerical addresses are compared as strings, so they will\n"
-" only match if the representations are the same: \"::1\" is the\n"
-" same as \"::0:1\" but they do not match.\n"
+" slash and number specifies the number of \"network bits\" out of\n"
+" the address to use in the comparison (added in 7.86.0). For ex-\n"
+" ample \"192.168.0.0/16\" would match all addresses starting with\n"
+" \"192.168\".\n"
"\n"
" APPDATA <dir>\n"
" On Windows, this variable is used when trying to find the home\n"
" directory. If the primary home variable are all unset.\n"
"\n"
" COLUMNS <terminal width>\n"
-" If set, the specified number of characters will be used as the\n"
, stdout);
fputs(
-" terminal width when the alternative progress-bar is shown. If\n"
-" not set, curl will try to figure it out using other ways.\n"
+" If set, the specified number of characters is used as the termi-\n"
+" nal width when the alternative progress-bar is shown. If not\n"
+" set, curl tries to figure it out using other ways.\n"
"\n"
" CURL_CA_BUNDLE <file>\n"
-" If set, will be used as the --cacert value.\n"
+" If set, it is used as the --cacert value.\n"
"\n"
" CURL_HOME <dir>\n"
-" If set, is the first variable curl checks when trying to find\n"
-" its home directory. If not set, it continues to check XDG_CON-\n"
-" FIG_HOME.\n"
-"\n"
-" CURL_SSL_BACKEND <TLS backend>\n"
+" If set, is the first variable curl checks when trying to find\n"
+" its home directory. If not set, it continues to check XDG_CON-\n"
, stdout);
fputs(
-" If curl was built with support for \"MultiSSL\", meaning that it\n"
-" has built-in support for more than one TLS backend, this envi-\n"
-" ronment variable can be set to the case insensitive name of the\n"
-" particular backend to use when curl is invoked. Setting a name\n"
-" that is not a built-in alternative will make curl stay with the\n"
-" default.\n"
+" FIG_HOME\n"
+"\n"
+" CURL_SSL_BACKEND <TLS backend>\n"
+" If curl was built with support for \"MultiSSL\", meaning that it\n"
+" has built-in support for more than one TLS backend, this envi-\n"
+" ronment variable can be set to the case insensitive name of the\n"
+" particular backend to use when curl is invoked. Setting a name\n"
+" that is not a built-in alternative makes curl stay with the de-\n"
+" fault.\n"
"\n"
-" SSL backend names (case-insensitive): bearssl, gnutls, gskit,\n"
, stdout);
fputs(
-" mbedtls, nss, openssl, rustls, schannel, secure-transport, wolf-\n"
-" ssl\n"
+" SSL backend names (case-insensitive): bearssl, gnutls, mbedtls,\n"
+" openssl, rustls, schannel, secure-transport, wolfssl\n"
"\n"
" HOME <dir>\n"
" If set, this is used to find the home directory when that is\n"
@@ -6584,62 +7214,61 @@ void hugehelp(void)
" XDG_CONFIG_HOME have preference.\n"
"\n"
" QLOGDIR <directory name>\n"
-" If curl was built with HTTP/3 support, setting this environment\n"
+" If curl was built with HTTP/3 support, setting this environment\n"
, stdout);
fputs(
-" variable to a local directory will make curl produce qlogs in\n"
-" that directory, using file names named after the destination\n"
-" connection id (in hex). Do note that these files can become\n"
-" rather large. Works with both QUIC backends.\n"
+" variable to a local directory makes curl produce qlogs in that\n"
+" directory, using file names named after the destination connec-\n"
+" tion id (in hex). Do note that these files can become rather\n"
+" large. Works with the ngtcp2 and quiche QUIC backends.\n"
"\n"
-" SHELL Used on VMS when trying to detect if using a DCL or a \"unix\"\n"
+" SHELL Used on VMS when trying to detect if using a DCL or a unix\n"
" shell.\n"
"\n"
" SSL_CERT_DIR <dir>\n"
-" If set, will be used as the --capath value.\n"
+" If set, it is used as the --capath value.\n"
"\n"
, stdout);
fputs(
" SSL_CERT_FILE <path>\n"
-" If set, will be used as the --cacert value.\n"
+" If set, it is used as the --cacert value.\n"
"\n"
" SSLKEYLOGFILE <file name>\n"
-" If you set this environment variable to a file name, curl will\n"
-" store TLS secrets from its connections in that file when invoked\n"
-" to enable you to analyze the TLS traffic in real time using net-\n"
-" work analyzing tools such as Wireshark. This works with the fol-\n"
+" If you set this environment variable to a file name, curl stores\n"
+" TLS secrets from its connections in that file when invoked to\n"
+" enable you to analyze the TLS traffic in real time using network\n"
+" analyzing tools such as Wireshark. This works with the following\n"
, stdout);
fputs(
-" lowing TLS backends: OpenSSL, libressl, BoringSSL, GnuTLS, NSS\n"
-" and wolfSSL.\n"
+" TLS backends: OpenSSL, libressl, BoringSSL, GnuTLS and wolfSSL.\n"
"\n"
" USERPROFILE <dir>\n"
-" On Windows, this variable is used when trying to find the home\n"
-" directory. If the other, primary, variable are all unset. If\n"
-" set, curl will use the path \"$USERPROFILE\\Application Data\".\n"
+" On Windows, this variable is used when trying to find the home\n"
+" directory. If the other, primary, variable are all unset. If\n"
+" set, curl uses the path \"$USERPROFILE\\Application Data\".\n"
"\n"
" XDG_CONFIG_HOME <dir>\n"
-" If CURL_HOME is not set, this variable is checked when looking\n"
-, stdout);
- fputs(
+" If CURL_HOME is not set, this variable is checked when looking\n"
" for a default .curlrc file.\n"
"\n"
+, stdout);
+ fputs(
"PROXY PROTOCOL PREFIXES\n"
-" The proxy string may be specified with a protocol:// prefix to specify\n"
+" The proxy string may be specified with a protocol:// prefix to specify\n"
" alternative proxy protocols.\n"
"\n"
-" If no protocol is specified in the proxy string or if the string does\n"
-" not match a supported one, the proxy will be treated as an HTTP proxy.\n"
+" If no protocol is specified in the proxy string or if the string does\n"
+" not match a supported one, the proxy is treated as an HTTP proxy.\n"
"\n"
" The supported proxy protocol prefixes are as follows:\n"
"\n"
" http://\n"
-" Makes it use it as an HTTP proxy. The default if no scheme pre-\n"
-, stdout);
- fputs(
+" Makes it use it as an HTTP proxy. The default if no scheme pre-\n"
" fix is used.\n"
"\n"
" https://\n"
+, stdout);
+ fputs(
" Makes it treated as an HTTPS proxy.\n"
"\n"
" socks4://\n"
@@ -6655,13 +7284,13 @@ void hugehelp(void)
" Makes it the equivalent of --socks5-hostname\n"
"\n"
"EXIT CODES\n"
-" There are a bunch of different error codes and their corresponding er-\n"
+" There are a bunch of different error codes and their corresponding er-\n"
, stdout);
fputs(
-" ror messages that may appear under error conditions. At the time of\n"
+" ror messages that may appear under error conditions. At the time of\n"
" this writing, the exit codes are:\n"
"\n"
-" 0 Success. The operation completed successfully according to the\n"
+" 0 Success. The operation completed successfully according to the\n"
" instructions.\n"
"\n"
" 1 Unsupported protocol. This build of curl has no support for this\n"
@@ -6678,10 +7307,10 @@ void hugehelp(void)
" To make curl able to do this, you probably need another build of\n"
" libcurl.\n"
"\n"
-" 5 Could not resolve proxy. The given proxy host could not be re-\n"
+" 5 Could not resolve proxy. The given proxy host could not be re-\n"
" solved.\n"
"\n"
-" 6 Could not resolve host. The given remote host could not be re-\n"
+" 6 Could not resolve host. The given remote host could not be re-\n"
" solved.\n"
"\n"
, stdout);
@@ -6690,15 +7319,15 @@ void hugehelp(void)
"\n"
" 8 Weird server reply. The server sent data curl could not parse.\n"
"\n"
-" 9 FTP access denied. The server denied login or denied access to\n"
-" the particular resource or directory you wanted to reach. Most\n"
-" often you tried to change to a directory that does not exist on\n"
+" 9 FTP access denied. The server denied login or denied access to\n"
+" the particular resource or directory you wanted to reach. Most\n"
+" often you tried to change to a directory that does not exist on\n"
" the server.\n"
"\n"
-" 10 FTP accept failed. While waiting for the server to connect back\n"
+" 10 FTP accept failed. While waiting for the server to connect back\n"
, stdout);
fputs(
-" when an active FTP session is used, an error code was sent over\n"
+" when an active FTP session is used, an error code was sent over\n"
" the control connection or similar.\n"
"\n"
" 11 FTP weird PASS reply. Curl could not parse the reply sent to the\n"
@@ -6712,7 +7341,7 @@ void hugehelp(void)
"\n"
, stdout);
fputs(
-" 14 FTP weird 227 format. Curl could not parse the 227-line the\n"
+" 14 FTP weird 227 format. Curl could not parse the 227-line the\n"
" server sent.\n"
"\n"
" 15 FTP cannot use host. Could not resolve the host IP we got in the\n"
@@ -6733,17 +7362,17 @@ void hugehelp(void)
" lar) command failed.\n"
"\n"
" 21 FTP quote error. A quote command returned error from the server.\n"
-" 22 HTTP page not retrieved. The requested URL was not found or re-\n"
-" turned another error with the HTTP error code being 400 or\n"
+" 22 HTTP page not retrieved. The requested URL was not found or re-\n"
+" turned another error with the HTTP error code being 400 or\n"
, stdout);
fputs(
-" above. This return code only appears if --fail is used.\n"
+" above. This return code only appears if -f, --fail is used.\n"
"\n"
-" 23 Write error. Curl could not write data to a local filesystem or\n"
+" 23 Write error. Curl could not write data to a local filesystem or\n"
" similar.\n"
"\n"
-" 25 FTP could not STOR file. The server denied the STOR operation,\n"
-" used for FTP uploading.\n"
+" 25 Failed starting the upload. For FTP, the server typically denied\n"
+" the STOR command.\n"
"\n"
" 26 Read error. Various reading problems.\n"
"\n"
@@ -6754,8 +7383,8 @@ void hugehelp(void)
fputs(
" cording to the conditions.\n"
"\n"
-" 30 FTP PORT failed. The PORT command failed. Not all FTP servers\n"
-" support the PORT command, try doing a transfer using PASV in-\n"
+" 30 FTP PORT failed. The PORT command failed. Not all FTP servers\n"
+" support the PORT command, try doing a transfer using PASV in-\n"
" stead!\n"
"\n"
" 31 FTP could not use REST. The REST command failed. This command is\n"
@@ -6793,15 +7422,15 @@ void hugehelp(void)
" 47 Too many redirects. When following redirects, curl hit the maxi-\n"
" mum amount.\n"
"\n"
-" 48 Unknown option specified to libcurl. This indicates that you\n"
-" passed a weird option to curl that was passed on to libcurl and\n"
+" 48 Unknown option specified to libcurl. This indicates that you\n"
+" passed a weird option to curl that was passed on to libcurl and\n"
, stdout);
fputs(
" rejected. Read up in the manual!\n"
"\n"
" 49 Malformed telnet option.\n"
"\n"
-" 52 The server did not reply anything, which here is considered an\n"
+" 52 The server did not reply anything, which here is considered an\n"
" error.\n"
"\n"
" 53 SSL crypto engine not found.\n"
@@ -6817,7 +7446,7 @@ void hugehelp(void)
"\n"
, stdout);
fputs(
-" 60 Peer certificate cannot be authenticated with known CA certifi-\n"
+" 60 Peer certificate cannot be authenticated with known CA certifi-\n"
" cates.\n"
"\n"
" 61 Unrecognized transfer encoding.\n"
@@ -6828,9 +7457,9 @@ void hugehelp(void)
"\n"
" 65 Sending the data requires a rewind that failed.\n"
"\n"
-" 66 Failed to initialise SSL Engine.\n"
+" 66 Failed to initialize SSL Engine.\n"
"\n"
-" 67 The user name, password, or similar was not accepted and curl\n"
+" 67 The user name, password, or similar was not accepted and curl\n"
" failed to log in.\n"
"\n"
, stdout);
@@ -6875,7 +7504,7 @@ void hugehelp(void)
"\n"
, stdout);
fputs(
-" 89 No connection available, the session will be queued.\n"
+" 89 No connection available, the session is queued.\n"
"\n"
" 90 SSL public key does not matched pinned public key.\n"
"\n"
@@ -6887,22 +7516,29 @@ void hugehelp(void)
"\n"
" 94 An authentication function returned an error.\n"
"\n"
-" 95 A problem was detected in the HTTP/3 layer. This is somewhat\n"
+" 95 A problem was detected in the HTTP/3 layer. This is somewhat\n"
, stdout);
fputs(
-" generic and can be one out of several problems, see the error\n"
+" generic and can be one out of several problems, see the error\n"
" message for details.\n"
"\n"
-" 96 QUIC connection error. This error may be caused by an SSL li-\n"
+" 96 QUIC connection error. This error may be caused by an SSL li-\n"
" brary error. QUIC is the protocol used for HTTP/3 transfers.\n"
"\n"
-" XX More error codes will appear here in future releases. The exist-\n"
-" ing ones are meant to never change.\n"
+" 97 Proxy handshake error.\n"
+"\n"
+" 98 A client-side certificate is required to complete the TLS hand-\n"
+" shake.\n"
+"\n"
+" 99 Poll or select returned fatal error.\n"
"\n"
-"BUGS\n"
-" If you experience any problems with curl, submit an issue in the\n"
, stdout);
fputs(
+" XX More error codes might appear here in future releases. The ex-\n"
+" isting ones are meant to never change.\n"
+"\n"
+"BUGS\n"
+" If you experience any problems with curl, submit an issue in the\n"
" project's bug tracker on GitHub: https://github.com/curl/curl/issues\n"
"\n"
"AUTHORS / CONTRIBUTORS\n"
@@ -6913,6 +7549,8 @@ void hugehelp(void)
" https://curl.se\n"
"\n"
"SEE ALSO\n"
+, stdout);
+ fputs(
" ftp(1), wget(1)\n"
"\n"
, stdout) ;
@@ -6928,5270 +7566,5824 @@ void hugehelp(void)
#include "memdebug.h" /* keep this as LAST include */
static const unsigned char hugehelpgz[] = {
/* This mumbo-jumbo is the huge help text compressed with gzip.
- Thanks to this operation, the size of this data shrank from 253328
- to 63131 bytes. You can disable the use of compressed help
+ Thanks to this operation, the size of this data shrank from 279414
+ to 69777 bytes. You can disable the use of compressed help
texts by NOT passing -c to the mkhelp.pl tool. */
- 0x1f, 0x8b, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0xec, 0xfd,
- 0x7b, 0x7b, 0xdb, 0xc6, 0xb5, 0x37, 0x0c, 0xff, 0x9f, 0x4f, 0x81, 0xcd,
- 0xbe, 0xbd, 0x25, 0xb5, 0x04, 0x75, 0xf2, 0x21, 0x51, 0x95, 0x3c, 0x51,
- 0x64, 0x39, 0x76, 0x2b, 0x5b, 0xaa, 0x29, 0x37, 0xe9, 0x4e, 0x72, 0xf9,
- 0x02, 0x49, 0x50, 0x42, 0x4c, 0x12, 0x2c, 0x00, 0xea, 0x90, 0xee, 0x3e,
- 0x9f, 0xfd, 0x5d, 0xc7, 0x99, 0x01, 0x66, 0x40, 0x8a, 0xb2, 0x5d, 0x77,
- 0xbf, 0xef, 0xdd, 0xbd, 0x63, 0x49, 0x24, 0x30, 0xc7, 0x35, 0x6b, 0xd6,
- 0xf1, 0xb7, 0xa2, 0x68, 0xd5, 0xff, 0xde, 0xd1, 0x7f, 0xef, 0xe0, 0x7f,
- 0xf0, 0xf3, 0x8b, 0x28, 0x3a, 0x2f, 0xf2, 0x5f, 0xd3, 0x61, 0x15, 0x7e,
- 0xf6, 0xdd, 0xbb, 0xff, 0x89, 0xf8, 0xff, 0xe0, 0x9d, 0x9f, 0xe1, 0xe7,
- 0x17, 0x4b, 0xdb, 0xde, 0x8e, 0xec, 0x0b, 0xff, 0xf3, 0x6e, 0x2b, 0x5a,
- 0xf5, 0xc2, 0xff, 0x44, 0x9b, 0xf4, 0xc2, 0x3b, 0xe9, 0xe1, 0x10, 0x7f,
- 0x7f, 0xf7, 0x6e, 0x79, 0x27, 0x3f, 0xe3, 0xa8, 0xf0, 0x9f, 0x6d, 0x7c,
- 0xef, 0xe7, 0x77, 0xf8, 0x2b, 0x7c, 0xf2, 0xc5, 0x17, 0xaf, 0x8f, 0x5e,
- 0x9d, 0xe8, 0xab, 0xc3, 0x45, 0x31, 0x89, 0xe2, 0xa8, 0x2a, 0x92, 0x59,
- 0x39, 0x4e, 0x8b, 0x28, 0x89, 0xde, 0xbe, 0x39, 0xfd, 0xe2, 0x8b, 0xfe,
- 0xdf, 0x5f, 0x9f, 0x9d, 0xf7, 0x5f, 0xf6, 0x6b, 0x8f, 0xfd, 0x94, 0xcf,
- 0xab, 0x2c, 0x9f, 0x95, 0x30, 0x7c, 0x78, 0xa8, 0xfc, 0xe5, 0x8b, 0x2f,
- 0x9e, 0x9d, 0xf4, 0x8f, 0xdf, 0xbc, 0x3c, 0xbf, 0x78, 0x79, 0xf6, 0xba,
- 0xf6, 0x64, 0x94, 0x95, 0x11, 0x34, 0x55, 0xe5, 0xf9, 0x24, 0x1a, 0xe7,
- 0x85, 0x69, 0xbe, 0xc8, 0x66, 0x97, 0xd1, 0x28, 0xa9, 0x92, 0x68, 0x5c,
- 0xe4, 0xd3, 0x08, 0xbf, 0xc9, 0xe1, 0xb9, 0x32, 0x2d, 0xae, 0xd3, 0xa2,
- 0x17, 0xbd, 0xac, 0xa2, 0x72, 0x31, 0x9f, 0xe7, 0x45, 0x55, 0x6a, 0x73,
- 0xd5, 0x55, 0x5a, 0xa6, 0xd1, 0xbc, 0xc8, 0xab, 0x7c, 0x98, 0x4f, 0xca,
- 0x83, 0xe8, 0xd9, 0xcb, 0xe3, 0x8b, 0x6e, 0xf4, 0xfc, 0xe5, 0xe9, 0x09,
- 0xfc, 0x7b, 0x71, 0x4e, 0xff, 0xf4, 0xbb, 0xd1, 0xf7, 0x67, 0xe7, 0x2f,
- 0x4e, 0xde, 0xe8, 0x4f, 0xf8, 0x20, 0x7a, 0x71, 0x81, 0xdf, 0xd2, 0x8f,
- 0x7e, 0x57, 0x9b, 0x7b, 0xf9, 0xea, 0x08, 0x3f, 0xc4, 0x1f, 0xf8, 0xcc,
- 0xe9, 0x33, 0xfa, 0x13, 0x7f, 0xc0, 0x9f, 0xaf, 0xfe, 0x7a, 0x01, 0x4d,
- 0x9f, 0x9f, 0x9d, 0xef, 0xf3, 0xbf, 0xf0, 0xd1, 0x9b, 0x8b, 0x57, 0xe7,
- 0xfc, 0x2f, 0xfd, 0xd1, 0x87, 0x3f, 0xfa, 0xc7, 0xe7, 0xa6, 0xb9, 0x3e,
- 0x8d, 0xa0, 0xff, 0xea, 0x3b, 0xfa, 0xa7, 0x8f, 0xff, 0xf2, 0x07, 0x34,
- 0xa6, 0x8b, 0x93, 0xd3, 0xd7, 0x27, 0xd0, 0xe2, 0x05, 0x3d, 0xf5, 0x43,
- 0x3f, 0x4a, 0x66, 0x23, 0xf8, 0xd1, 0xef, 0x45, 0x17, 0x57, 0x69, 0x34,
- 0xcc, 0xa7, 0x53, 0xfc, 0x00, 0xd6, 0x4a, 0x9b, 0x1b, 0xa5, 0x65, 0x76,
- 0x39, 0x4b, 0x47, 0xb8, 0x2a, 0x37, 0x79, 0xf1, 0x3e, 0xba, 0xc9, 0xaa,
- 0xab, 0x7c, 0x51, 0x45, 0x0b, 0x58, 0xa1, 0x28, 0x9b, 0x55, 0x69, 0x91,
- 0x0c, 0x71, 0x0b, 0x7a, 0x5f, 0xd4, 0x96, 0x3b, 0x1f, 0xc3, 0xda, 0x96,
- 0xb0, 0x90, 0x83, 0x45, 0x39, 0xc9, 0x93, 0x11, 0x7c, 0x80, 0xaf, 0x8c,
- 0x17, 0x13, 0x58, 0xf9, 0x6c, 0xf8, 0xbe, 0x8c, 0x26, 0xd9, 0x7b, 0x5a,
- 0xc5, 0xdb, 0x3b, 0x5d, 0xe1, 0x2e, 0x37, 0x9a, 0x2c, 0x60, 0x85, 0x67,
- 0xb1, 0x59, 0xee, 0x6c, 0x98, 0x60, 0x07, 0xb4, 0xac, 0xd1, 0x62, 0x8e,
- 0xad, 0x75, 0x69, 0x0d, 0xa3, 0x79, 0x5e, 0xc2, 0x4b, 0xfd, 0xfe, 0x29,
- 0x8c, 0x7c, 0x36, 0x4b, 0x69, 0x1c, 0x65, 0x17, 0xfe, 0xc8, 0xdf, 0x67,
- 0x29, 0xfc, 0x32, 0xce, 0x26, 0x69, 0xc4, 0x3b, 0x6d, 0x9a, 0x43, 0x8a,
- 0x2a, 0xd2, 0x72, 0x31, 0x4d, 0x69, 0xee, 0xd3, 0xbc, 0x48, 0x7b, 0xd1,
- 0x51, 0x19, 0xdd, 0xe5, 0x0b, 0x98, 0xdb, 0x64, 0x02, 0x3b, 0x9f, 0x46,
- 0x83, 0x74, 0x92, 0xdf, 0x74, 0x71, 0xa7, 0xa3, 0xd9, 0x62, 0x3a, 0x80,
- 0x57, 0x60, 0xf8, 0xe3, 0x34, 0xa9, 0x16, 0xf0, 0x2a, 0x3d, 0xa6, 0xcd,
- 0x4d, 0x13, 0x98, 0x05, 0xbc, 0x5b, 0x44, 0x57, 0x29, 0xcc, 0xb2, 0x9c,
- 0x67, 0xcd, 0x95, 0x00, 0xba, 0x9b, 0xe7, 0x37, 0x69, 0x01, 0x6b, 0x38,
- 0xb8, 0x8b, 0x60, 0xda, 0x03, 0xa6, 0x47, 0x24, 0xc2, 0x28, 0x81, 0x0e,
- 0x0d, 0x29, 0xc6, 0x45, 0x3a, 0x49, 0x2a, 0x78, 0xce, 0x74, 0xd5, 0x83,
- 0xfd, 0x4c, 0x53, 0x6d, 0x4e, 0x5e, 0xdd, 0xdc, 0xdf, 0xa2, 0x97, 0x47,
- 0x69, 0x95, 0x64, 0x93, 0x12, 0xba, 0xc3, 0xf3, 0x21, 0xcf, 0xe0, 0x36,
- 0xe2, 0x51, 0x88, 0xa2, 0xf2, 0x6e, 0x56, 0x25, 0xb7, 0xd4, 0xbd, 0x90,
- 0x6a, 0x3c, 0x4a, 0xe7, 0xe9, 0x6c, 0x94, 0xce, 0xaa, 0x5e, 0xf4, 0x77,
- 0x98, 0xee, 0x38, 0x83, 0x05, 0x48, 0xa4, 0x1d, 0xe8, 0x16, 0xf6, 0x7a,
- 0x58, 0x64, 0x74, 0xa0, 0xb4, 0xb9, 0x6c, 0x16, 0xbd, 0x79, 0x7e, 0x1c,
- 0xed, 0x7f, 0xf5, 0xe5, 0x13, 0x3b, 0x2d, 0x7c, 0x77, 0x98, 0xcc, 0x60,
- 0xb2, 0xe9, 0x30, 0x1b, 0xdf, 0x45, 0xd3, 0xc5, 0xa4, 0xca, 0xe6, 0xb0,
- 0xd4, 0x78, 0x04, 0xf1, 0x04, 0xcd, 0x13, 0x38, 0x2e, 0xb8, 0x64, 0xf4,
- 0x01, 0x4d, 0xfb, 0xa6, 0xc8, 0x2a, 0x3c, 0x69, 0xf4, 0x1d, 0x0c, 0x2e,
- 0xb5, 0xe7, 0x09, 0x29, 0x0a, 0xfa, 0x19, 0x00, 0x21, 0xc1, 0xe2, 0xe2,
- 0xa6, 0xfc, 0x63, 0x91, 0xd3, 0xc3, 0xb8, 0xfe, 0x38, 0x97, 0xa4, 0x84,
- 0x81, 0x1c, 0x7c, 0x61, 0x79, 0x4b, 0xe7, 0xaa, 0xaa, 0xe6, 0x07, 0xdb,
- 0xdb, 0x65, 0x56, 0xa5, 0xbd, 0x7f, 0xe6, 0xb3, 0xb4, 0x5b, 0xdd, 0xe4,
- 0xdd, 0xea, 0xaa, 0x48, 0xd3, 0x7f, 0xf5, 0x80, 0x8a, 0x3b, 0xe6, 0x59,
- 0x18, 0xcd, 0x9d, 0x0c, 0xf7, 0x32, 0x85, 0xb3, 0x9c, 0xfe, 0x63, 0x91,
- 0xce, 0xb0, 0x1f, 0x18, 0x5d, 0x32, 0x99, 0x5f, 0x25, 0xb0, 0xbf, 0x29,
- 0x10, 0x24, 0x1e, 0x78, 0xa0, 0x19, 0x1c, 0xeb, 0xa2, 0xc4, 0xbe, 0x7f,
- 0xfa, 0x25, 0xd0, 0xed, 0x98, 0x7a, 0x85, 0x7f, 0x7b, 0xe9, 0x6d, 0x32,
- 0x85, 0x29, 0x63, 0x67, 0xdb, 0x48, 0x66, 0x3f, 0xed, 0xc6, 0xbb, 0x3b,
- 0x3b, 0xbf, 0xf4, 0xaa, 0xdb, 0xaa, 0x73, 0xcf, 0x37, 0x76, 0x76, 0x9c,
- 0x77, 0xf0, 0xe1, 0x4d, 0x5c, 0x89, 0x68, 0x02, 0x74, 0x84, 0x03, 0xf8,
- 0x2d, 0x2d, 0xf2, 0x72, 0xeb, 0x9e, 0x6d, 0x25, 0xf1, 0x6f, 0x8d, 0xbe,
- 0x5f, 0xa7, 0x25, 0x91, 0x92, 0x9d, 0x71, 0x94, 0x14, 0x40, 0xce, 0xb9,
- 0x61, 0x68, 0x29, 0x1c, 0xa3, 0x01, 0x9c, 0x64, 0x5d, 0x1f, 0x38, 0x7c,
- 0xf0, 0x34, 0x70, 0xbd, 0x04, 0x8e, 0xef, 0x0c, 0x5e, 0x98, 0xa5, 0xb7,
- 0x95, 0x39, 0x85, 0x79, 0x94, 0x26, 0xc3, 0xab, 0x28, 0x87, 0x3d, 0x29,
- 0x42, 0x5b, 0xe1, 0x0e, 0x29, 0x29, 0x86, 0x57, 0xd9, 0x35, 0xac, 0xc9,
- 0x57, 0x5f, 0x3d, 0x89, 0xe1, 0x9f, 0xaf, 0x7e, 0xd9, 0xbe, 0xce, 0x27,
- 0xb0, 0x44, 0x8f, 0x7e, 0xd9, 0xc6, 0xfd, 0xff, 0x67, 0xd2, 0x1d, 0x74,
- 0x87, 0xff, 0xea, 0x5d, 0x55, 0xd3, 0x49, 0xa7, 0x95, 0xac, 0x92, 0x19,
- 0xfc, 0x37, 0xcd, 0x17, 0xb3, 0xca, 0x90, 0x52, 0x3e, 0x23, 0x9a, 0x50,
- 0x3e, 0x35, 0xc9, 0x66, 0x70, 0x78, 0x91, 0xe6, 0x91, 0xc2, 0xf0, 0xf0,
- 0xc2, 0xc9, 0xb5, 0x07, 0xbd, 0x1a, 0x5e, 0xe1, 0x0a, 0x00, 0x6d, 0x25,
- 0xb2, 0x0c, 0x55, 0x06, 0x73, 0x83, 0x57, 0x67, 0xc4, 0xbb, 0xa8, 0x2d,
- 0xee, 0x2d, 0x83, 0x07, 0xf3, 0x62, 0x84, 0x1c, 0xbf, 0x31, 0x0c, 0x73,
- 0x96, 0x9d, 0x3e, 0x23, 0xbd, 0x75, 0xf0, 0x03, 0x1a, 0xd8, 0x34, 0xbb,
- 0x85, 0x16, 0xf0, 0x4f, 0xec, 0x0d, 0x06, 0xce, 0xad, 0x45, 0x38, 0x62,
- 0xea, 0x46, 0xdf, 0xb7, 0x67, 0x19, 0x86, 0x5e, 0x9b, 0x3a, 0x75, 0x6a,
- 0x27, 0x1f, 0xc1, 0xf6, 0xcd, 0xe1, 0xad, 0x05, 0xb2, 0x58, 0xbe, 0xb1,
- 0xa0, 0x19, 0xe0, 0x14, 0x97, 0xb0, 0x33, 0xb0, 0x1b, 0x48, 0xcd, 0xb8,
- 0x59, 0x77, 0xd1, 0x6b, 0x20, 0x1a, 0xe6, 0x52, 0x0e, 0xd1, 0x4f, 0xd2,
- 0xaa, 0x5a, 0xbd, 0x51, 0x96, 0x72, 0x0f, 0x76, 0x03, 0xc4, 0xdb, 0xf6,
- 0x06, 0x50, 0xdb, 0xc1, 0x5e, 0xe3, 0xf1, 0x1f, 0x80, 0x67, 0xdb, 0xa3,
- 0x03, 0x23, 0xf8, 0xe7, 0xbf, 0x1c, 0xda, 0xbb, 0xc1, 0x6f, 0xb3, 0xd9,
- 0x75, 0xfe, 0x1e, 0x96, 0x89, 0x2e, 0xda, 0xa4, 0xbe, 0xa2, 0xc8, 0xa4,
- 0xa6, 0xf3, 0xca, 0x5c, 0x63, 0x48, 0x94, 0xf0, 0xd1, 0x20, 0x19, 0x4c,
- 0xee, 0xa2, 0xab, 0xe4, 0x3a, 0xc5, 0x39, 0xcf, 0x81, 0x5a, 0x71, 0x15,
- 0xe0, 0x16, 0x99, 0x10, 0x63, 0x10, 0xd6, 0x31, 0xca, 0x17, 0x03, 0x60,
- 0x3f, 0xc8, 0x36, 0x78, 0x71, 0x92, 0xeb, 0x3c, 0x1b, 0xe1, 0xa3, 0xda,
- 0x5c, 0x79, 0x95, 0xc2, 0x2b, 0xd4, 0x31, 0xdd, 0x59, 0xc0, 0x6d, 0x71,
- 0xa4, 0x74, 0xe0, 0xb2, 0x0a, 0x6f, 0x3f, 0xe0, 0x93, 0xc9, 0xa4, 0xcc,
- 0xa3, 0xe8, 0x32, 0xc7, 0xb3, 0x42, 0xdc, 0x99, 0x88, 0x1d, 0x36, 0xe6,
- 0x2a, 0xc1, 0x4b, 0x0e, 0xee, 0x33, 0x73, 0x1a, 0x8a, 0x94, 0x18, 0x35,
- 0xed, 0x56, 0x32, 0xe9, 0xf2, 0x65, 0x86, 0xef, 0xc8, 0x5a, 0x45, 0x1b,
- 0xff, 0x67, 0xa3, 0x1b, 0x6d, 0xfc, 0x3f, 0x1b, 0x44, 0x13, 0x1b, 0x7f,
- 0xd8, 0xb0, 0x7b, 0x0d, 0x42, 0xdb, 0x75, 0x36, 0x4a, 0x99, 0x2c, 0x5e,
- 0x9e, 0x5f, 0x3f, 0x89, 0x7e, 0x83, 0xd3, 0x06, 0xc3, 0x1a, 0xa5, 0xb7,
- 0x4a, 0x94, 0x3a, 0x37, 0x78, 0x3b, 0x02, 0xa6, 0x9c, 0xcc, 0xa1, 0xaf,
- 0x79, 0x5a, 0x0c, 0x81, 0x82, 0x93, 0x4b, 0xa0, 0x59, 0xb8, 0x92, 0xb5,
- 0x39, 0x6c, 0x1f, 0x5f, 0xe1, 0x69, 0x01, 0x0b, 0x8d, 0x66, 0xc9, 0x14,
- 0x4e, 0xc5, 0x29, 0x8e, 0x28, 0x9b, 0x05, 0xb6, 0xf3, 0xa7, 0x71, 0xfa,
- 0xe5, 0xce, 0xc1, 0xc1, 0xfe, 0xef, 0xf7, 0x1e, 0xa7, 0xd5, 0xd5, 0xce,
- 0x2f, 0xdb, 0x76, 0x13, 0x5f, 0x8e, 0x69, 0xe1, 0x95, 0x08, 0x75, 0x18,
- 0x78, 0xdf, 0xeb, 0x25, 0x02, 0x0d, 0xc0, 0xef, 0xe9, 0x38, 0xbb, 0xed,
- 0xaa, 0x64, 0xc5, 0x27, 0x2f, 0x01, 0x82, 0x83, 0x1d, 0x44, 0x56, 0xa1,
- 0xcd, 0x5d, 0x2e, 0xd2, 0x12, 0xd6, 0xf2, 0xe6, 0x2a, 0xa9, 0x22, 0xd3,
- 0x00, 0xef, 0xed, 0x34, 0xbb, 0xbc, 0xaa, 0xa2, 0x9b, 0x04, 0xef, 0x22,
- 0x90, 0xb1, 0xa8, 0x09, 0xbc, 0xf6, 0xe1, 0x12, 0x1a, 0x27, 0x70, 0x9f,
- 0xe0, 0x2e, 0xd2, 0x1d, 0x0f, 0x1c, 0xca, 0xae, 0xfa, 0x9d, 0x6c, 0x89,
- 0x11, 0xbe, 0xa2, 0x41, 0x52, 0xe2, 0xd1, 0x9d, 0x01, 0x8b, 0xa8, 0x40,
- 0x68, 0x58, 0xe0, 0x5f, 0x57, 0x20, 0x16, 0xd0, 0x2a, 0xc8, 0x40, 0xe9,
- 0x1e, 0x7d, 0x8e, 0x1b, 0x8a, 0xbb, 0x63, 0x24, 0x01, 0xd8, 0xa6, 0xae,
- 0x6c, 0xb4, 0x79, 0xa3, 0x84, 0x63, 0x07, 0x0c, 0xca, 0xd0, 0x06, 0xf2,
- 0xdc, 0x5e, 0x87, 0xe7, 0x49, 0x63, 0x4c, 0x4a, 0x12, 0x1d, 0x48, 0x5a,
- 0x80, 0xc1, 0x3b, 0x93, 0x85, 0x45, 0x4b, 0xde, 0xa3, 0x8c, 0xd2, 0xb8,
- 0xff, 0xe9, 0xb5, 0x51, 0x0e, 0x64, 0x06, 0xa3, 0x05, 0xa6, 0x8c, 0x33,
- 0x43, 0x56, 0x4b, 0xab, 0x42, 0x64, 0x0e, 0x6d, 0xe2, 0x87, 0x59, 0x85,
- 0x37, 0x0e, 0x49, 0xbb, 0x30, 0x5e, 0x58, 0x14, 0x12, 0x59, 0x81, 0x61,
- 0x3b, 0xf3, 0xa7, 0x2b, 0x14, 0x9e, 0x8d, 0xae, 0x93, 0x49, 0x06, 0x52,
- 0x6b, 0x6a, 0xde, 0xa2, 0xeb, 0x7e, 0x88, 0xc2, 0xd2, 0x04, 0x4e, 0xcc,
- 0x30, 0x2f, 0x0a, 0xd4, 0x0c, 0x70, 0x07, 0x07, 0xcc, 0x4a, 0xa7, 0x29,
- 0x48, 0x19, 0xee, 0x72, 0x42, 0xeb, 0xe3, 0x24, 0x2b, 0xe0, 0x69, 0x10,
- 0x2c, 0x88, 0xeb, 0xd3, 0x94, 0x69, 0x5c, 0xd8, 0xea, 0x70, 0x98, 0xce,
- 0xab, 0x32, 0x34, 0x1b, 0xdd, 0x6a, 0x18, 0x48, 0x91, 0xe2, 0x9a, 0xbb,
- 0xf2, 0x17, 0xad, 0xa8, 0x11, 0x09, 0x48, 0x04, 0x53, 0x01, 0x07, 0x44,
- 0xb2, 0x32, 0xb7, 0x62, 0x34, 0x52, 0x05, 0xb0, 0x31, 0x5a, 0xed, 0x29,
- 0x0e, 0x11, 0x1f, 0x2e, 0xf9, 0x94, 0x12, 0x6b, 0xc6, 0x2d, 0x64, 0x41,
- 0x9c, 0xfb, 0xc5, 0xcb, 0x0b, 0x56, 0xd2, 0x34, 0x0e, 0xbd, 0x9a, 0xdd,
- 0xc4, 0xee, 0x51, 0x0d, 0x80, 0x1b, 0x7d, 0x54, 0x5e, 0x81, 0x54, 0x56,
- 0xca, 0xa9, 0xce, 0xa6, 0x40, 0x2d, 0xd7, 0xb8, 0xb3, 0xf3, 0x34, 0x1d,
- 0xf5, 0xa2, 0xb3, 0x31, 0x72, 0xd5, 0x02, 0x06, 0x5d, 0xd1, 0xd7, 0x78,
- 0xab, 0xc0, 0x1a, 0x8c, 0xf0, 0x10, 0x5a, 0xc1, 0x87, 0x87, 0xe2, 0xdc,
- 0x0e, 0xc4, 0xc9, 0x13, 0xf8, 0x04, 0x46, 0x3b, 0xa9, 0x5f, 0x41, 0x74,
- 0x06, 0x81, 0x7b, 0xe3, 0xf0, 0x06, 0x69, 0x44, 0x34, 0x38, 0x48, 0xab,
- 0x9b, 0x34, 0x35, 0xcd, 0x95, 0x29, 0xdc, 0x7b, 0xb8, 0x5d, 0x2c, 0x12,
- 0x02, 0x23, 0x64, 0xa1, 0x16, 0x97, 0xf7, 0xec, 0xed, 0xc5, 0xf9, 0xdb,
- 0x0b, 0xe7, 0x08, 0x62, 0x3b, 0x55, 0x3e, 0x19, 0x31, 0xb1, 0xdf, 0x64,
- 0x25, 0xd0, 0x29, 0x2f, 0x3e, 0x08, 0x51, 0xc8, 0xe0, 0xf0, 0x22, 0x48,
- 0x87, 0x29, 0x5c, 0xb1, 0x23, 0x56, 0x5d, 0x60, 0x23, 0xca, 0x0a, 0xb8,
- 0x20, 0x1f, 0x26, 0x1c, 0x8b, 0x36, 0x07, 0xe3, 0x81, 0xee, 0xca, 0xaa,
- 0x58, 0x0c, 0x49, 0x1c, 0x40, 0xda, 0xc1, 0xbf, 0x49, 0x58, 0x25, 0xb6,
- 0x8a, 0xdb, 0x40, 0x8d, 0x00, 0x07, 0x41, 0xcd, 0x67, 0x02, 0x43, 0x9b,
- 0xd0, 0xfc, 0xbb, 0xc2, 0xcf, 0x1d, 0x3e, 0x1a, 0xc7, 0xd0, 0x09, 0xb2,
- 0x61, 0xd8, 0xe3, 0x18, 0xe4, 0xd5, 0x29, 0x70, 0xdc, 0x98, 0x8e, 0x9a,
- 0x5c, 0x89, 0x3d, 0x9c, 0x80, 0xca, 0xbd, 0x97, 0x30, 0x42, 0x58, 0x35,
- 0xb3, 0x5f, 0x22, 0x0f, 0xda, 0x33, 0x63, 0x74, 0x3c, 0x73, 0x4f, 0xba,
- 0xeb, 0xda, 0x45, 0x32, 0x2c, 0xb3, 0x69, 0x36, 0x49, 0x90, 0x4a, 0x67,
- 0xb0, 0x7d, 0xa5, 0x6d, 0x4c, 0xef, 0x60, 0x20, 0x37, 0x23, 0x49, 0xc2,
- 0x72, 0xd1, 0x45, 0x21, 0x33, 0x4b, 0xa7, 0x0d, 0xea, 0x1d, 0x21, 0x6f,
- 0xc7, 0xe5, 0x85, 0xdd, 0x00, 0x02, 0x80, 0x49, 0x98, 0x25, 0x8e, 0x3a,
- 0x0b, 0xe0, 0xc0, 0x05, 0x1c, 0xff, 0xd9, 0xa8, 0x23, 0x43, 0x01, 0x96,
- 0x3a, 0xc3, 0x63, 0xc8, 0x74, 0x5a, 0xe2, 0xc5, 0x6a, 0xba, 0xe2, 0xad,
- 0xc0, 0xb3, 0x17, 0xf1, 0x92, 0xf0, 0x99, 0x95, 0x1e, 0x22, 0xb8, 0xf6,
- 0x72, 0x12, 0xe3, 0x48, 0x50, 0xe7, 0xdf, 0x61, 0x3d, 0x67, 0x13, 0xe4,
- 0x88, 0xe9, 0xed, 0x7c, 0x92, 0x0d, 0xb3, 0x6a, 0x62, 0xa4, 0x8b, 0xa4,
- 0x7c, 0x2f, 0x3a, 0x16, 0x1e, 0xc1, 0x51, 0x3a, 0x42, 0xa5, 0x07, 0x3e,
- 0x09, 0x49, 0x1d, 0x30, 0xa7, 0xf3, 0x37, 0x67, 0x17, 0x67, 0xc7, 0x67,
- 0xa7, 0x75, 0x65, 0x58, 0x15, 0xd5, 0x88, 0x64, 0xda, 0x7c, 0x61, 0x25,
- 0x7f, 0x38, 0x78, 0x28, 0x96, 0xc3, 0xbe, 0xc1, 0x05, 0x43, 0xda, 0x01,
- 0x5c, 0x16, 0x53, 0x50, 0x5d, 0xa3, 0x12, 0x64, 0xa4, 0x29, 0x31, 0x48,
- 0x90, 0x41, 0xcc, 0xec, 0x50, 0x48, 0xcb, 0x86, 0x0b, 0x58, 0x77, 0x60,
- 0x18, 0x19, 0x50, 0xe2, 0x34, 0xb9, 0x73, 0x45, 0x47, 0x5a, 0x5b, 0x54,
- 0x5e, 0xec, 0xfa, 0xa2, 0x12, 0x0c, 0x3f, 0x4e, 0x71, 0x9d, 0x90, 0xab,
- 0x4d, 0x40, 0x09, 0x5b, 0xcc, 0x51, 0x67, 0x84, 0x4d, 0x63, 0x3a, 0x82,
- 0x73, 0x86, 0xd3, 0x80, 0xb9, 0xe1, 0x3c, 0x12, 0x94, 0xb7, 0xed, 0xfb,
- 0xa8, 0x3e, 0xc3, 0x8f, 0x37, 0x48, 0x98, 0x38, 0x58, 0x5e, 0xe1, 0x48,
- 0xc8, 0x91, 0xcf, 0x63, 0x4f, 0x6f, 0x1c, 0xb3, 0x8f, 0x3a, 0x1e, 0x64,
- 0x56, 0x25, 0x76, 0xd2, 0xb0, 0x3f, 0xe0, 0x6b, 0x78, 0x63, 0xe1, 0x9c,
- 0x99, 0x5a, 0x27, 0x77, 0x2c, 0xf5, 0x92, 0x44, 0x52, 0x2c, 0x66, 0x33,
- 0x1e, 0x59, 0xf4, 0x2a, 0x1b, 0x82, 0xbc, 0x0d, 0xb7, 0x48, 0xf4, 0x03,
- 0x5c, 0xc5, 0xf9, 0x0d, 0xec, 0xeb, 0xc2, 0x6a, 0x8d, 0x46, 0x1d, 0x62,
- 0xa5, 0x64, 0x06, 0x87, 0x17, 0x28, 0xec, 0xed, 0xeb, 0xe3, 0x28, 0x99,
- 0xc3, 0x22, 0xa3, 0x64, 0x4c, 0x1c, 0x0a, 0x55, 0x64, 0x67, 0x4e, 0x17,
- 0xe7, 0x9b, 0xfd, 0x2d, 0x19, 0xb3, 0xd9, 0x1d, 0x96, 0x07, 0x9f, 0x23,
- 0x63, 0xbc, 0x50, 0xfa, 0x3f, 0xd7, 0xcb, 0x91, 0x6f, 0x7d, 0x98, 0x35,
- 0x09, 0xbd, 0xc0, 0x43, 0x92, 0xf7, 0x65, 0x63, 0x10, 0x44, 0x0f, 0x28,
- 0xfa, 0xc1, 0x7a, 0xfc, 0x80, 0x8f, 0xe7, 0x85, 0xa3, 0x95, 0xe3, 0x10,
- 0x2f, 0x4e, 0xfb, 0x76, 0x10, 0x6c, 0x7e, 0x80, 0x71, 0x34, 0x9a, 0x79,
- 0x93, 0x82, 0x22, 0x0e, 0xcd, 0xc8, 0xd2, 0x9a, 0xe7, 0xf1, 0xd6, 0xf5,
- 0x9f, 0xae, 0x13, 0x18, 0xdd, 0xcc, 0x34, 0x54, 0x43, 0x6a, 0xae, 0x48,
- 0x7c, 0x0d, 0x7b, 0x9b, 0x28, 0x3b, 0xa8, 0xf3, 0xa3, 0xda, 0x65, 0x49,
- 0xcd, 0xe0, 0x44, 0xe0, 0xd1, 0x68, 0xa7, 0xf7, 0x55, 0x37, 0xda, 0xed,
- 0xed, 0xe0, 0x3f, 0xbb, 0xdd, 0x68, 0x8f, 0x5a, 0xda, 0x8f, 0x58, 0x67,
- 0x95, 0x4d, 0x62, 0x62, 0xcc, 0xe7, 0xcd, 0x7d, 0xb1, 0x5d, 0xf3, 0xc1,
- 0xe5, 0xcb, 0xaf, 0xe5, 0xf0, 0x38, 0x76, 0x17, 0x7f, 0x9e, 0x6f, 0x95,
- 0xe3, 0x01, 0xc9, 0x67, 0x13, 0xa0, 0x19, 0x56, 0xc6, 0xf4, 0x20, 0x09,
- 0x23, 0x46, 0x51, 0xbd, 0x03, 0x44, 0x32, 0x43, 0x63, 0x44, 0x27, 0x4a,
- 0xf1, 0x59, 0x16, 0x1a, 0x1b, 0xcd, 0xc1, 0x49, 0xb8, 0xd7, 0x26, 0xa1,
- 0xb9, 0xa7, 0x65, 0xd1, 0xb1, 0x2f, 0xb8, 0xf4, 0x46, 0x19, 0xce, 0x29,
- 0x07, 0x11, 0x88, 0x4f, 0x16, 0xdf, 0xb3, 0xd0, 0x7e, 0x97, 0x37, 0xc2,
- 0x69, 0xbf, 0xd6, 0x32, 0x5a, 0x90, 0xbc, 0xfd, 0xa3, 0x0f, 0x75, 0xe1,
- 0xf7, 0x7b, 0xd1, 0x33, 0x99, 0x0a, 0x2d, 0x33, 0x5e, 0xb7, 0xf4, 0x00,
- 0x48, 0xef, 0x20, 0x12, 0x47, 0x9d, 0x72, 0x31, 0x68, 0x2e, 0x38, 0x1a,
- 0x0a, 0x06, 0x69, 0x87, 0x6d, 0x65, 0x55, 0x3e, 0x07, 0x05, 0xfa, 0xe6,
- 0x0a, 0x29, 0x9a, 0xed, 0x33, 0xd0, 0xce, 0x36, 0x1a, 0x67, 0xb0, 0x3d,
- 0x6d, 0x65, 0x0e, 0x32, 0x7a, 0x56, 0x5e, 0x75, 0x70, 0x1f, 0x93, 0xe6,
- 0xfe, 0x61, 0x0b, 0x3d, 0xee, 0x95, 0xfa, 0x87, 0x29, 0xe0, 0x05, 0x52,
- 0xd3, 0x56, 0xa3, 0xcd, 0xbb, 0xb4, 0xda, 0x72, 0x04, 0xe9, 0xb3, 0xf3,
- 0x7d, 0x7f, 0xcd, 0xdc, 0xa9, 0xb0, 0x28, 0x81, 0xb7, 0xf6, 0x3c, 0x9f,
- 0xef, 0x47, 0x2a, 0x4b, 0xb0, 0x24, 0xa4, 0x92, 0x47, 0x42, 0x3b, 0x6d,
- 0x76, 0xa9, 0xd1, 0xdc, 0x92, 0x3d, 0x43, 0x13, 0x9c, 0xdf, 0x3f, 0x1a,
- 0x60, 0x80, 0x89, 0xc1, 0x25, 0x05, 0x97, 0xe2, 0x2b, 0x60, 0x4a, 0xc9,
- 0x25, 0xbe, 0x69, 0x0e, 0x38, 0x09, 0x75, 0xf3, 0x22, 0x9b, 0xc2, 0x19,
- 0x81, 0x4b, 0x8d, 0xa5, 0x05, 0xba, 0x96, 0x79, 0x74, 0xcd, 0x85, 0x46,
- 0x55, 0x63, 0x4a, 0x12, 0x12, 0x5c, 0x0a, 0x09, 0x8b, 0x1a, 0x96, 0x2c,
- 0x78, 0xae, 0xa8, 0xc2, 0x38, 0xc3, 0xea, 0x9f, 0x7b, 0x1b, 0x4e, 0x1f,
- 0xc2, 0xe1, 0x32, 0xaf, 0x38, 0x07, 0xa1, 0x7f, 0x7c, 0xee, 0x9f, 0xf0,
- 0x7e, 0xff, 0x85, 0x21, 0x90, 0x3d, 0xd8, 0xee, 0xb9, 0x15, 0xe2, 0x9c,
- 0x37, 0xd1, 0x22, 0xe7, 0xbd, 0x89, 0x1f, 0x6e, 0x8e, 0x8a, 0x04, 0x58,
- 0xe9, 0xe3, 0x2d, 0x91, 0xab, 0x70, 0xd9, 0x6b, 0x4d, 0x3a, 0x8d, 0xbc,
- 0xfa, 0xce, 0x30, 0x49, 0xdb, 0xc8, 0xab, 0xef, 0xcc, 0xb3, 0xbb, 0x44,
- 0xe9, 0x4c, 0x58, 0x34, 0x7f, 0x9d, 0x83, 0xdb, 0x46, 0x88, 0x67, 0xbd,
- 0x9d, 0x1b, 0x42, 0x90, 0xbb, 0xbc, 0xe4, 0x95, 0x46, 0x45, 0x1b, 0x5f,
- 0xa9, 0x13, 0x44, 0x29, 0x7c, 0x06, 0x75, 0x2e, 0x22, 0x89, 0x46, 0x73,
- 0x3f, 0x2c, 0x3b, 0x66, 0x6c, 0x58, 0x8d, 0x2e, 0x40, 0xcd, 0xc4, 0x36,
- 0x68, 0x36, 0xd0, 0x15, 0x19, 0x21, 0xf0, 0x88, 0xa4, 0x93, 0x59, 0xca,
- 0xe2, 0x38, 0x29, 0x18, 0xc8, 0xac, 0xac, 0xf5, 0xf4, 0x1a, 0xc5, 0xdc,
- 0xb2, 0x74, 0xec, 0x6e, 0x35, 0x81, 0x86, 0x04, 0x10, 0x1c, 0x9d, 0xd1,
- 0xa5, 0xf0, 0x03, 0x64, 0x4d, 0x25, 0x09, 0x4e, 0x20, 0xfa, 0x91, 0xd5,
- 0x61, 0x24, 0x92, 0x48, 0xc9, 0x4f, 0x39, 0x62, 0x9b, 0x91, 0x42, 0x69,
- 0xba, 0xdc, 0x94, 0x4b, 0x33, 0x17, 0xce, 0x46, 0x0a, 0xbf, 0xa1, 0x8f,
- 0x0c, 0xb5, 0x50, 0xeb, 0xbc, 0x05, 0x22, 0x7f, 0x7c, 0xff, 0xe6, 0xa4,
- 0xdf, 0x8f, 0x5e, 0x9d, 0x5c, 0x9c, 0xbc, 0xa9, 0x09, 0x21, 0xb3, 0xbc,
- 0x98, 0x92, 0x0a, 0x32, 0xca, 0xca, 0xf9, 0x24, 0xb9, 0x43, 0xdd, 0x04,
- 0xb8, 0xe7, 0x65, 0x81, 0x82, 0xcf, 0x34, 0x45, 0x63, 0xc6, 0x68, 0x41,
- 0xca, 0x37, 0xb0, 0x64, 0x98, 0xbe, 0xd8, 0x6c, 0x51, 0xff, 0x25, 0x43,
- 0xaf, 0xbd, 0xc2, 0xe9, 0x9a, 0x14, 0x03, 0x10, 0x5e, 0x86, 0xd6, 0x64,
- 0x8f, 0x27, 0x06, 0x45, 0xd6, 0xae, 0x23, 0x41, 0x92, 0x74, 0xcf, 0xe3,
- 0x04, 0x25, 0x0b, 0x8e, 0x17, 0x72, 0x0c, 0x3c, 0x84, 0xc6, 0xe2, 0x92,
- 0x8e, 0xab, 0x6e, 0x04, 0xfb, 0xc1, 0xb6, 0xee, 0xe6, 0x98, 0x74, 0xb4,
- 0xd6, 0xde, 0x3b, 0xb8, 0xab, 0xc4, 0x1e, 0xc9, 0x43, 0xe1, 0x1e, 0x8c,
- 0xc4, 0x46, 0x1b, 0x33, 0x8b, 0xe4, 0xb1, 0x39, 0xad, 0x2b, 0x90, 0xd9,
- 0x88, 0x9b, 0x2f, 0x17, 0x63, 0xd2, 0x3c, 0xa3, 0xcd, 0xf7, 0xdd, 0xe8,
- 0x55, 0x37, 0xfa, 0xbe, 0x1b, 0xa1, 0x21, 0x7f, 0x8b, 0xde, 0xdb, 0xdd,
- 0xd9, 0x7b, 0xc4, 0x9a, 0xab, 0xa1, 0xb1, 0xe7, 0x8e, 0xed, 0x60, 0xf7,
- 0x3d, 0x32, 0x09, 0x7e, 0x08, 0x1b, 0xef, 0x45, 0xbb, 0xaf, 0xf8, 0x93,
- 0x47, 0x5f, 0x3e, 0x7e, 0xfa, 0x44, 0x3e, 0x6c, 0x48, 0xb6, 0x3a, 0x7e,
- 0x52, 0x6a, 0x54, 0x29, 0xc0, 0x71, 0xa3, 0xa4, 0x97, 0xcd, 0x40, 0x86,
- 0x02, 0x3d, 0x50, 0x94, 0x6b, 0x54, 0xc3, 0x60, 0xf0, 0x63, 0x56, 0xc5,
- 0xc5, 0x2e, 0x53, 0xf7, 0x96, 0xc0, 0xcb, 0x40, 0x04, 0x40, 0x0a, 0x66,
- 0x93, 0xd8, 0xba, 0x55, 0xe1, 0x40, 0x92, 0x01, 0xd2, 0x3f, 0x4a, 0xab,
- 0x24, 0xa3, 0x85, 0x7a, 0x33, 0x86, 0x1c, 0x78, 0x03, 0xc6, 0x96, 0x0c,
- 0x26, 0xa2, 0xb8, 0x34, 0xd6, 0x1d, 0xe4, 0x67, 0x2b, 0x82, 0xc3, 0xb3,
- 0x37, 0xf9, 0x02, 0xc5, 0x4d, 0x7c, 0x00, 0xa4, 0x47, 0x7c, 0x81, 0x69,
- 0xda, 0xd8, 0xdb, 0xb3, 0x5b, 0xb9, 0x8f, 0x6b, 0xad, 0xc0, 0xd0, 0xe0,
- 0xcf, 0x39, 0x90, 0x12, 0x0f, 0xa7, 0xd7, 0x34, 0x69, 0x90, 0xb2, 0xee,
- 0x51, 0x22, 0x32, 0x16, 0x12, 0x42, 0xce, 0xcf, 0xfa, 0x17, 0x78, 0xb6,
- 0x41, 0x11, 0x83, 0x86, 0xfe, 0xb1, 0x00, 0x12, 0x02, 0xa2, 0xc4, 0x17,
- 0x51, 0xeb, 0x70, 0x34, 0x16, 0xa0, 0x3d, 0xba, 0x88, 0x45, 0x09, 0x93,
- 0x2e, 0x45, 0x29, 0x22, 0xde, 0x12, 0x89, 0xee, 0x24, 0x57, 0x86, 0x98,
- 0x9e, 0xec, 0x8b, 0xd1, 0xe6, 0x37, 0x5b, 0xdd, 0x90, 0x3e, 0x25, 0x9a,
- 0x8e, 0x73, 0x2a, 0x71, 0x2b, 0x59, 0xd6, 0xa5, 0x9b, 0x10, 0x44, 0x4d,
- 0x38, 0x57, 0xd0, 0x89, 0x75, 0x84, 0xe0, 0xfa, 0x91, 0x06, 0x67, 0xb7,
- 0xc9, 0xca, 0xc6, 0x73, 0x58, 0xcf, 0xdc, 0x2e, 0x1d, 0x6a, 0xd8, 0xb5,
- 0x45, 0x6a, 0xee, 0x59, 0x6d, 0xd1, 0x98, 0x34, 0xd0, 0x80, 0x82, 0xea,
- 0x59, 0x12, 0xd9, 0xa5, 0x8b, 0x3a, 0x83, 0xa4, 0xe8, 0x58, 0x35, 0x92,
- 0xcf, 0x26, 0x9e, 0x90, 0x22, 0xbd, 0x24, 0x9d, 0x21, 0xe2, 0xe5, 0x75,
- 0x66, 0xa9, 0x2f, 0xc7, 0x03, 0xfc, 0x3a, 0x2b, 0xd9, 0x65, 0x32, 0x06,
- 0x01, 0x14, 0x0f, 0x8c, 0x9a, 0x5c, 0xc9, 0x00, 0x27, 0xd4, 0x12, 0x20,
- 0x16, 0xc7, 0x14, 0x0b, 0xc7, 0x04, 0x45, 0x79, 0x16, 0x7d, 0xf0, 0xc9,
- 0x38, 0x2e, 0x61, 0xd5, 0xd1, 0x54, 0x3c, 0x17, 0x6f, 0xd4, 0x19, 0xf9,
- 0x00, 0x8d, 0x86, 0x74, 0x26, 0xf2, 0x29, 0xb1, 0x5f, 0x11, 0x99, 0x66,
- 0xa4, 0x02, 0x56, 0x37, 0xd0, 0x69, 0x02, 0xdb, 0x04, 0x07, 0xed, 0x15,
- 0x2e, 0x12, 0x0a, 0xde, 0x38, 0x1d, 0x15, 0x69, 0x89, 0x22, 0x32, 0x3c,
- 0xef, 0x56, 0x8e, 0x4d, 0x46, 0xa3, 0x8c, 0xb4, 0x98, 0x09, 0x9a, 0x62,
- 0x16, 0x29, 0x19, 0xcb, 0x65, 0x41, 0xa7, 0xee, 0x16, 0x22, 0xe3, 0xb8,
- 0x42, 0x15, 0x05, 0xe4, 0x28, 0x32, 0x1d, 0xc4, 0xd8, 0x57, 0x87, 0x84,
- 0xc5, 0x69, 0xa4, 0x7d, 0x49, 0x57, 0xdd, 0x28, 0x1e, 0xb9, 0x66, 0xc4,
- 0x2e, 0x29, 0x5e, 0xd6, 0xa6, 0x4d, 0xc2, 0x42, 0x53, 0xdc, 0x4b, 0x60,
- 0xa7, 0xd1, 0xee, 0x27, 0x26, 0x07, 0xb2, 0xdd, 0xd0, 0x51, 0x2d, 0x79,
- 0x68, 0x5d, 0x58, 0x57, 0x7c, 0xf2, 0xf2, 0x4a, 0x1f, 0x75, 0x2c, 0x40,
- 0x09, 0x5a, 0x12, 0x40, 0x4e, 0x46, 0xbf, 0xd0, 0x48, 0xcd, 0x14, 0x79,
- 0xc1, 0x4c, 0x6c, 0x92, 0x03, 0x01, 0x77, 0xd8, 0xba, 0x2a, 0xc3, 0xc6,
- 0x51, 0xc3, 0x28, 0x63, 0xf6, 0x98, 0xd2, 0x48, 0x8d, 0x6c, 0x28, 0x43,
- 0x96, 0xd5, 0x2a, 0x57, 0x0e, 0xcc, 0xb9, 0xbf, 0x69, 0x85, 0xf4, 0xc2,
- 0xd7, 0x75, 0x67, 0xd3, 0x44, 0x4e, 0xc4, 0x4c, 0xc7, 0x90, 0x0c, 0xeb,
- 0xce, 0xca, 0x73, 0x33, 0xa5, 0x98, 0xce, 0x1b, 0xcb, 0x14, 0x65, 0x53,
- 0x12, 0x99, 0x88, 0x4e, 0xcc, 0xf6, 0x58, 0x27, 0x46, 0xc0, 0x68, 0x7b,
- 0x17, 0x36, 0xfd, 0x27, 0x6c, 0x9b, 0x34, 0xe3, 0x8a, 0xcf, 0x60, 0x05,
- 0x4e, 0x69, 0x2e, 0xf1, 0x75, 0x84, 0x87, 0x6f, 0x06, 0xb3, 0x4c, 0xf0,
- 0x8b, 0xd3, 0x6b, 0xe7, 0x10, 0xa1, 0xcb, 0x69, 0x86, 0x86, 0xb5, 0x2e,
- 0x35, 0x31, 0xc8, 0xf3, 0x49, 0x9a, 0xd8, 0xe9, 0xe1, 0x4d, 0x90, 0xce,
- 0x90, 0xd6, 0x65, 0x4f, 0x81, 0x19, 0xcc, 0x0d, 0xa7, 0x05, 0x59, 0x37,
- 0x4a, 0x2e, 0x93, 0xcc, 0x50, 0x9c, 0x9c, 0x8b, 0x11, 0xcb, 0xa4, 0x78,
- 0xa8, 0x66, 0xb9, 0xbc, 0x40, 0x3e, 0x10, 0xb4, 0xda, 0x09, 0xcf, 0x5a,
- 0x94, 0xa9, 0x35, 0xa0, 0x49, 0x9b, 0x64, 0xa4, 0x71, 0xac, 0x7f, 0x6c,
- 0x1a, 0x25, 0x96, 0x4b, 0x86, 0x4e, 0x68, 0xac, 0xd3, 0x8b, 0x5e, 0xe4,
- 0x37, 0xa8, 0x59, 0x76, 0xd9, 0x10, 0x9d, 0xa1, 0x97, 0xb6, 0x84, 0x27,
- 0x80, 0x88, 0xa7, 0x20, 0xce, 0xe3, 0x42, 0x92, 0xb1, 0x8c, 0x3f, 0x8e,
- 0x1c, 0x7f, 0x06, 0xd0, 0xf8, 0x8d, 0x1c, 0x44, 0xe9, 0xd0, 0xec, 0xe6,
- 0xb8, 0x71, 0x26, 0xe2, 0x38, 0x19, 0x80, 0x58, 0x0b, 0x82, 0x4f, 0xbc,
- 0x98, 0x65, 0xb7, 0x71, 0x99, 0x0f, 0xdf, 0xc3, 0x64, 0x0f, 0xe7, 0x49,
- 0x75, 0xf5, 0x4d, 0x43, 0x62, 0xd9, 0x44, 0xee, 0xbc, 0x15, 0x45, 0xc7,
- 0x6c, 0x5f, 0x44, 0x3e, 0x53, 0x30, 0x25, 0xc3, 0x2a, 0x49, 0x2b, 0xd1,
- 0x5b, 0x68, 0x05, 0xe8, 0x04, 0x64, 0x36, 0xd8, 0x3a, 0x6a, 0xac, 0xab,
- 0xcc, 0xa9, 0xd1, 0x1c, 0x39, 0xa1, 0x8d, 0x12, 0x0f, 0x64, 0x89, 0xea,
- 0x7a, 0x14, 0xbd, 0xce, 0xab, 0xf4, 0x00, 0xff, 0x06, 0xe6, 0x50, 0xd1,
- 0x54, 0xe4, 0xae, 0x4a, 0x70, 0xa1, 0x91, 0xbd, 0x21, 0x7d, 0x25, 0xbe,
- 0x16, 0xc4, 0xfd, 0x4b, 0xa7, 0xba, 0xa6, 0x76, 0x8b, 0x36, 0xbe, 0xdd,
- 0xe8, 0x46, 0x57, 0xbc, 0xa4, 0xd4, 0x20, 0xcf, 0x11, 0x76, 0xfe, 0x12,
- 0xd4, 0xe6, 0x59, 0xd5, 0x6c, 0xee, 0x8a, 0x2e, 0x3f, 0x24, 0x77, 0xf6,
- 0x78, 0xd0, 0x06, 0x88, 0x06, 0x6a, 0x9c, 0x10, 0xbd, 0x2f, 0x1a, 0xaf,
- 0x01, 0xb3, 0x6e, 0x59, 0x52, 0xf6, 0xfd, 0xa2, 0xb7, 0x61, 0x64, 0x3c,
- 0x7b, 0x24, 0x13, 0xa1, 0xc0, 0x45, 0x2c, 0x6e, 0x92, 0x94, 0xde, 0x28,
- 0xe0, 0x45, 0x66, 0x69, 0x64, 0xd1, 0x10, 0x83, 0xa6, 0xd7, 0xeb, 0x09,
- 0x9f, 0x99, 0x83, 0x66, 0xc0, 0x07, 0x47, 0x6f, 0x84, 0xc7, 0xc3, 0x3f,
- 0x68, 0x55, 0xd1, 0x17, 0x51, 0xd6, 0x7d, 0x4b, 0xcd, 0x1e, 0xfa, 0x69,
- 0xca, 0x37, 0x42, 0xec, 0x36, 0xd2, 0x8b, 0x8e, 0x46, 0x38, 0x1f, 0xd8,
- 0xeb, 0xa7, 0xbd, 0xc7, 0xfb, 0xbd, 0x9d, 0x1a, 0x61, 0x4d, 0xaa, 0xb8,
- 0xbc, 0x1e, 0x46, 0x87, 0x64, 0x76, 0x46, 0x92, 0x0f, 0x12, 0x14, 0xa8,
- 0x1b, 0x72, 0xb9, 0x0a, 0xad, 0xf2, 0x31, 0xe4, 0x4d, 0xd7, 0x36, 0xc8,
- 0x44, 0x48, 0x6e, 0x42, 0x9c, 0x12, 0xd9, 0x35, 0x7d, 0x89, 0xda, 0xf4,
- 0x03, 0x1a, 0x66, 0x86, 0xfa, 0x45, 0x45, 0x42, 0x53, 0x7a, 0x9b, 0xb1,
- 0xf2, 0xab, 0x8d, 0x0d, 0x81, 0xed, 0xa4, 0x22, 0x18, 0x10, 0x5b, 0x93,
- 0xb5, 0x6d, 0x34, 0x47, 0x2b, 0x1d, 0x1d, 0x8d, 0x49, 0xa6, 0x31, 0xf7,
- 0xdc, 0xc8, 0x48, 0xb9, 0x1c, 0x92, 0xc0, 0x8d, 0xe9, 0xee, 0xa0, 0xad,
- 0x73, 0x24, 0x37, 0x4f, 0xeb, 0xe8, 0x88, 0x93, 0xa0, 0xc4, 0x97, 0x21,
- 0x6d, 0xa1, 0x23, 0x02, 0xf8, 0xf1, 0x34, 0x1f, 0x91, 0x6d, 0xdb, 0xdb,
- 0xdb, 0xbe, 0x71, 0x42, 0x76, 0x3a, 0x4e, 0x23, 0x9b, 0xe8, 0x92, 0x06,
- 0x82, 0x9c, 0x5d, 0x56, 0x57, 0x5b, 0xd6, 0xcd, 0xa6, 0x0a, 0x3f, 0x0c,
- 0x84, 0xd5, 0xa7, 0xe6, 0xa9, 0xa3, 0x18, 0x09, 0xa2, 0x8b, 0x5f, 0x17,
- 0x65, 0x45, 0x16, 0x7a, 0xb9, 0xdf, 0x79, 0x26, 0x30, 0xb2, 0x69, 0x3a,
- 0xcd, 0x8b, 0xbb, 0x10, 0x69, 0xf3, 0x29, 0xd0, 0x8d, 0x42, 0x92, 0x26,
- 0xee, 0xae, 0xe4, 0x2c, 0xd4, 0x6c, 0x7d, 0x13, 0x24, 0x15, 0xa9, 0xba,
- 0xd7, 0x5c, 0x0f, 0x72, 0x3c, 0x0a, 0x37, 0x67, 0x0b, 0xff, 0x40, 0x5c,
- 0x8a, 0x78, 0x10, 0x48, 0x20, 0x70, 0x89, 0x9e, 0x2e, 0x07, 0x9e, 0x96,
- 0x37, 0x34, 0x4b, 0x6c, 0x78, 0x63, 0xe8, 0x0b, 0xb5, 0x61, 0xb1, 0xe7,
- 0xd9, 0xb5, 0x42, 0xad, 0x7b, 0x88, 0xa4, 0x07, 0xf8, 0x0f, 0x9d, 0xad,
- 0x6b, 0x1e, 0x1a, 0xb8, 0x82, 0xf3, 0xc9, 0x35, 0x7b, 0x27, 0xe2, 0x58,
- 0x3c, 0x34, 0x71, 0x95, 0xd7, 0x4e, 0xd0, 0x93, 0x47, 0xbd, 0xdd, 0xda,
- 0x09, 0x9a, 0xdd, 0x61, 0xfc, 0x4d, 0x98, 0x0d, 0xa3, 0x76, 0x5b, 0x5a,
- 0xdd, 0x36, 0xbb, 0x5c, 0x14, 0x24, 0xfb, 0x4a, 0xc8, 0x8e, 0x46, 0xea,
- 0xa0, 0xb4, 0x76, 0x95, 0x53, 0xb8, 0x0b, 0xdc, 0xf5, 0xe9, 0x64, 0xdc,
- 0x0d, 0x58, 0x30, 0xe9, 0x92, 0x62, 0x43, 0x1b, 0x3a, 0xdf, 0x40, 0x77,
- 0xa2, 0xc6, 0x66, 0xa9, 0x48, 0xd6, 0x68, 0xab, 0x8d, 0x30, 0xbe, 0x23,
- 0x1a, 0x4e, 0x92, 0x6c, 0x4a, 0x27, 0x4b, 0xcc, 0x03, 0x3d, 0xcf, 0xe4,
- 0xc2, 0x7e, 0x1c, 0x32, 0x35, 0x0c, 0xd0, 0x8d, 0x54, 0x94, 0x28, 0x38,
- 0xb0, 0x75, 0x47, 0xc4, 0x79, 0xb6, 0x9c, 0x5c, 0xa5, 0xc3, 0xf7, 0xca,
- 0xff, 0x55, 0x16, 0x6e, 0x72, 0x75, 0x0c, 0xe4, 0x21, 0x5f, 0x15, 0x3c,
- 0xb5, 0x40, 0x63, 0x4d, 0x0e, 0xaa, 0x39, 0xba, 0xa1, 0x51, 0x47, 0x5d,
- 0x0c, 0x49, 0xa8, 0xa7, 0x33, 0x0e, 0xa7, 0x52, 0x2f, 0x91, 0x08, 0x6e,
- 0xa5, 0xd9, 0x28, 0xae, 0x8a, 0x6c, 0xde, 0x36, 0x3a, 0x95, 0x4a, 0x5c,
- 0xa9, 0xb9, 0x14, 0x1b, 0x14, 0x39, 0x96, 0xd8, 0xd5, 0x34, 0x8c, 0x1a,
- 0xab, 0xd9, 0x3c, 0x4c, 0xb4, 0xb6, 0x5d, 0xb4, 0x04, 0x64, 0x20, 0xca,
- 0xb0, 0x98, 0x4e, 0xf2, 0xcf, 0x28, 0x57, 0x31, 0x02, 0x54, 0xcb, 0x6c,
- 0x48, 0x52, 0x5a, 0x76, 0x99, 0x62, 0x88, 0x14, 0xc8, 0x0a, 0xd5, 0x04,
- 0xe4, 0x36, 0xff, 0x6c, 0xc2, 0x37, 0xe9, 0x65, 0x5e, 0xa1, 0x98, 0xe4,
- 0x91, 0x38, 0xdb, 0x42, 0x0d, 0x4d, 0xa8, 0x41, 0xce, 0x15, 0x18, 0x33,
- 0xd6, 0xae, 0xa0, 0x6b, 0x31, 0x0e, 0xf0, 0x19, 0x23, 0x8b, 0x44, 0x73,
- 0xd7, 0xa1, 0xb5, 0xa1, 0x18, 0x33, 0x50, 0xaa, 0x55, 0xa1, 0x5a, 0x35,
- 0x11, 0x64, 0x65, 0x28, 0xc0, 0x57, 0x37, 0xd9, 0x30, 0x55, 0x5b, 0xae,
- 0xc4, 0x7b, 0x4c, 0x32, 0xff, 0xb6, 0x9c, 0x22, 0x2f, 0x81, 0x97, 0x58,
- 0x59, 0x40, 0x4f, 0xe4, 0x4d, 0x86, 0xca, 0x04, 0xf3, 0x69, 0x16, 0x18,
- 0xe5, 0x46, 0x4d, 0x8a, 0x8c, 0x1c, 0xae, 0xe8, 0x8c, 0x32, 0x06, 0xca,
- 0x10, 0x6f, 0xe0, 0x71, 0xd3, 0xfb, 0xa2, 0x5f, 0x59, 0xbd, 0x8a, 0x18,
- 0xc3, 0x98, 0xec, 0x42, 0xde, 0x3a, 0x11, 0x03, 0xbe, 0x4c, 0xc9, 0x37,
- 0xcd, 0x7b, 0xb0, 0xc0, 0x45, 0xc7, 0x70, 0x36, 0xef, 0x69, 0xf6, 0xff,
- 0xd7, 0x57, 0xd6, 0x38, 0xb5, 0x98, 0x6f, 0x20, 0x87, 0x46, 0x1f, 0x12,
- 0x51, 0x58, 0x3a, 0x1e, 0xc3, 0xb9, 0x5d, 0xfb, 0xfe, 0x95, 0x96, 0x79,
- 0x10, 0x40, 0x35, 0x07, 0xf3, 0x9b, 0xd1, 0x9a, 0x0c, 0x84, 0x82, 0xf3,
- 0xb4, 0xa5, 0xae, 0xd2, 0x95, 0xf0, 0x13, 0x26, 0x2d, 0x87, 0x75, 0x24,
- 0xf8, 0x04, 0xa8, 0xa8, 0xa9, 0x47, 0x63, 0x9b, 0xa8, 0xaf, 0xa2, 0x59,
- 0x70, 0x4b, 0xa3, 0x44, 0x52, 0x89, 0x93, 0x31, 0xe1, 0x7c, 0xc4, 0xe4,
- 0xf1, 0x9e, 0x10, 0xf6, 0xc2, 0xed, 0x84, 0x6f, 0x35, 0x50, 0xe0, 0x30,
- 0xf8, 0x85, 0xee, 0x25, 0x3d, 0x4d, 0x70, 0x98, 0xd0, 0xc6, 0xa8, 0x51,
- 0x66, 0x18, 0xd2, 0x21, 0x74, 0x20, 0x9c, 0x44, 0x62, 0x01, 0x51, 0x39,
- 0x6e, 0x34, 0x87, 0x24, 0x4d, 0xf7, 0x75, 0x97, 0x85, 0x61, 0x66, 0xff,
- 0x43, 0x8e, 0xf0, 0xe8, 0x91, 0x6c, 0xc8, 0x57, 0x36, 0x8d, 0x71, 0x3c,
- 0x49, 0x2e, 0xf1, 0x20, 0x64, 0x97, 0xb3, 0x9c, 0x43, 0xfa, 0x9a, 0x54,
- 0x9e, 0xc3, 0x4d, 0x49, 0x36, 0x50, 0xb6, 0xb6, 0x95, 0xd1, 0x26, 0xd0,
- 0xfd, 0x64, 0x41, 0x3b, 0x7e, 0x06, 0xb3, 0xea, 0xf7, 0x5f, 0x6c, 0x2d,
- 0x27, 0x0a, 0x9e, 0xfb, 0x3d, 0x68, 0x02, 0xcd, 0xdd, 0xac, 0x15, 0x34,
- 0xfd, 0x54, 0xa2, 0x3b, 0x28, 0x43, 0x00, 0xe1, 0x9e, 0x5b, 0x5d, 0x97,
- 0x8c, 0x78, 0x7f, 0x62, 0x5a, 0x3c, 0xf6, 0xc4, 0x99, 0xf1, 0x8d, 0xbd,
- 0xd8, 0xa0, 0x76, 0x52, 0x2a, 0x90, 0x36, 0x28, 0x76, 0x89, 0xa9, 0xe7,
- 0xb8, 0xcb, 0x37, 0x12, 0x6c, 0xd6, 0x22, 0x8d, 0x93, 0xaa, 0x76, 0x03,
- 0xdd, 0x94, 0xa0, 0xcb, 0x5f, 0x5e, 0x3f, 0x02, 0x69, 0x99, 0x85, 0xd7,
- 0x62, 0xf7, 0xa7, 0x03, 0xfd, 0x75, 0xef, 0xa7, 0x83, 0x22, 0xbd, 0x84,
- 0xf3, 0xf8, 0xd3, 0x01, 0xae, 0x2f, 0xb0, 0x8a, 0x5f, 0x7e, 0xf9, 0xe5,
- 0x1b, 0xff, 0x40, 0x46, 0x47, 0x3f, 0xf4, 0xa3, 0xbf, 0x3d, 0xa2, 0x50,
- 0x19, 0x8a, 0xa5, 0x6c, 0xde, 0x51, 0x12, 0x69, 0xa3, 0x92, 0x95, 0xb7,
- 0x30, 0xa4, 0xb9, 0x6b, 0xaf, 0x46, 0x62, 0x67, 0x95, 0x19, 0x44, 0x5b,
- 0xbe, 0x44, 0x48, 0xe7, 0x12, 0x87, 0xff, 0x9d, 0x48, 0x8f, 0x97, 0x39,
- 0x10, 0xe1, 0xd5, 0xd4, 0xb7, 0xe4, 0xce, 0x98, 0xa8, 0xc8, 0xc7, 0xb2,
- 0xa8, 0x2e, 0xf9, 0x7a, 0xaa, 0x0f, 0x4a, 0xae, 0x9e, 0xe0, 0x60, 0x78,
- 0xda, 0x4b, 0x46, 0xe2, 0x48, 0xa0, 0xa0, 0x78, 0xe6, 0x97, 0x45, 0x32,
- 0xbf, 0xc2, 0xe3, 0x0a, 0x9d, 0xfa, 0x6a, 0x10, 0x5d, 0x8c, 0x65, 0xbe,
- 0x28, 0x30, 0x3a, 0x6b, 0x98, 0x4f, 0x26, 0x1c, 0xbd, 0x11, 0x6d, 0x72,
- 0x37, 0xb0, 0x39, 0xa3, 0x74, 0x8b, 0x47, 0x5d, 0xd9, 0xce, 0x49, 0x0c,
- 0xcc, 0x9a, 0x27, 0x28, 0x9f, 0x66, 0x55, 0xa5, 0x71, 0x5d, 0xf8, 0x34,
- 0x90, 0x07, 0x0d, 0x26, 0x38, 0x0f, 0xd9, 0xb6, 0x7b, 0x4e, 0x64, 0xbc,
- 0x98, 0xf1, 0xc0, 0x70, 0x2f, 0x9a, 0x37, 0x35, 0x6b, 0x36, 0x18, 0xdf,
- 0x02, 0x57, 0x44, 0xbe, 0x18, 0x45, 0x9b, 0xd2, 0x78, 0x73, 0xf8, 0xda,
- 0xa7, 0x8c, 0x5f, 0x47, 0x1c, 0xba, 0x02, 0x96, 0x8e, 0x9f, 0x55, 0x2d,
- 0x43, 0xa0, 0x21, 0xfd, 0xca, 0x53, 0xaf, 0x58, 0xa3, 0x62, 0x95, 0xca,
- 0x73, 0x2e, 0x7d, 0x80, 0x82, 0x65, 0x46, 0xd1, 0x81, 0x5f, 0x0f, 0x92,
- 0xe9, 0x6f, 0x07, 0x29, 0xf4, 0x16, 0xef, 0x1d, 0xa4, 0x65, 0x47, 0xd9,
- 0x7e, 0xe7, 0x7d, 0x7a, 0x07, 0xe7, 0x04, 0xe8, 0xae, 0xea, 0xac, 0xc9,
- 0xfc, 0x1d, 0x5e, 0x6f, 0xef, 0x32, 0x57, 0x72, 0x7c, 0xfa, 0xb8, 0xae,
- 0x7b, 0xd1, 0x0b, 0x2d, 0xea, 0x7b, 0x5d, 0x70, 0x44, 0xc9, 0x8f, 0xac,
- 0xae, 0xdf, 0x71, 0x1f, 0xf5, 0x33, 0x60, 0x4c, 0x7a, 0x85, 0x27, 0x99,
- 0x11, 0x27, 0xc7, 0x58, 0xad, 0x9e, 0x91, 0xaa, 0xf0, 0x41, 0x0d, 0x19,
- 0x63, 0x99, 0x21, 0x53, 0x5f, 0x34, 0x1f, 0xcd, 0x05, 0x39, 0x23, 0x68,
- 0x3b, 0x9b, 0xcd, 0x61, 0x2c, 0x86, 0x89, 0xc9, 0x50, 0xbb, 0x49, 0x46,
- 0x66, 0x22, 0xbc, 0x4c, 0x0a, 0x8c, 0xd2, 0x43, 0x93, 0x71, 0x7a, 0x9d,
- 0xe5, 0x8b, 0x12, 0x5a, 0xc1, 0x8d, 0x94, 0xb6, 0x91, 0x50, 0x7d, 0xc5,
- 0x19, 0x29, 0x19, 0x74, 0x2a, 0xe0, 0x27, 0x48, 0xd8, 0x61, 0xa9, 0x78,
- 0xb3, 0x5c, 0xa0, 0xdc, 0x86, 0x81, 0x23, 0x2a, 0x96, 0xd1, 0x75, 0xda,
- 0x1c, 0x1d, 0x4b, 0x6e, 0x14, 0x67, 0x63, 0x44, 0xb4, 0xad, 0x8f, 0x28,
- 0x7b, 0xf0, 0x06, 0x7f, 0x74, 0xc9, 0x63, 0x41, 0x87, 0xec, 0x00, 0x83,
- 0xda, 0x30, 0xf6, 0xc3, 0x74, 0xf4, 0x10, 0xd1, 0x83, 0xde, 0x74, 0x69,
- 0x0c, 0xf4, 0xc5, 0xb4, 0xa8, 0x58, 0xbd, 0xf7, 0x34, 0xfb, 0x8b, 0xd3,
- 0xfe, 0x56, 0x80, 0xd2, 0xea, 0x41, 0xbe, 0xf8, 0x3e, 0x4a, 0xd9, 0x18,
- 0x8b, 0xc5, 0xb1, 0x69, 0x39, 0x5a, 0xaa, 0x1c, 0x6b, 0x9f, 0xe3, 0x7d,
- 0x9a, 0xa7, 0xa9, 0x58, 0x42, 0xe9, 0x51, 0x94, 0x5a, 0xf1, 0xd2, 0xc2,
- 0x8b, 0xd5, 0x09, 0x6a, 0x3a, 0x3e, 0x8a, 0xdc, 0x66, 0x4b, 0x8e, 0x48,
- 0x6e, 0xba, 0xf2, 0xed, 0x03, 0x9b, 0xe5, 0x96, 0x95, 0x5e, 0xa1, 0xa9,
- 0xf3, 0x93, 0x57, 0x64, 0x56, 0x85, 0x6b, 0x10, 0xa4, 0x0d, 0xf1, 0x9e,
- 0x69, 0x08, 0x15, 0x46, 0x3c, 0xb8, 0x51, 0x86, 0xd6, 0x50, 0x40, 0x91,
- 0xfb, 0x4c, 0xf8, 0x34, 0x3a, 0x0e, 0x11, 0xce, 0x28, 0xc6, 0xae, 0x79,
- 0x0c, 0xaa, 0xbb, 0xb9, 0x04, 0x06, 0x2e, 0xca, 0x9a, 0x3b, 0xc3, 0x58,
- 0x38, 0x2b, 0xb2, 0x50, 0xa1, 0xbd, 0xd5, 0x69, 0xd3, 0xdb, 0x7a, 0xf6,
- 0x0d, 0xa1, 0x02, 0x70, 0x39, 0xcb, 0x7e, 0x13, 0x83, 0x49, 0x3a, 0xbb,
- 0xce, 0x8a, 0x7c, 0x46, 0xbc, 0x9c, 0x22, 0x3f, 0x06, 0x62, 0x30, 0x18,
- 0x45, 0x1b, 0xc7, 0x6f, 0xdf, 0x9c, 0xbe, 0x3b, 0x3e, 0x7a, 0xf7, 0xdd,
- 0xdb, 0xd7, 0xcf, 0x4e, 0x4f, 0x36, 0x9a, 0x62, 0xca, 0x58, 0x1c, 0x4a,
- 0x25, 0x9a, 0xec, 0xc8, 0xc5, 0x58, 0x4a, 0xa3, 0x1c, 0x3a, 0x46, 0xa6,
- 0x22, 0x0a, 0x6f, 0x64, 0x53, 0x9c, 0x38, 0x58, 0x74, 0xc5, 0x1b, 0xcd,
- 0x0d, 0x16, 0x68, 0x58, 0x10, 0xde, 0x20, 0x93, 0xd7, 0x83, 0x2c, 0xd6,
- 0x64, 0x1d, 0x5f, 0xf8, 0xba, 0xbf, 0xd1, 0xc8, 0x1f, 0xb5, 0x5d, 0xd2,
- 0x4d, 0xe9, 0xc4, 0x3d, 0x2e, 0xaa, 0x1c, 0xb6, 0x49, 0x96, 0x12, 0xe3,
- 0x30, 0x68, 0xd5, 0x13, 0x18, 0x50, 0x60, 0xbb, 0x4b, 0x6b, 0x3a, 0x81,
- 0x95, 0xc0, 0x56, 0x80, 0x7e, 0x63, 0x19, 0xe4, 0xb0, 0xa8, 0x36, 0xba,
- 0x51, 0x9a, 0xd1, 0xb1, 0xd5, 0x50, 0x74, 0xbc, 0x9d, 0xc8, 0x4b, 0xe4,
- 0xc5, 0xb7, 0x60, 0xdc, 0x47, 0xc2, 0x74, 0xdd, 0x4b, 0x6f, 0x53, 0xe2,
- 0x0b, 0xf2, 0xd6, 0xf1, 0xa2, 0x20, 0x6e, 0xf3, 0x03, 0xa8, 0xa1, 0x78,
- 0xb2, 0x9f, 0x69, 0xa0, 0x88, 0x3e, 0x04, 0x02, 0x7c, 0xf3, 0xa2, 0xcb,
- 0x27, 0x24, 0xd4, 0x90, 0x7d, 0x9f, 0x3c, 0x31, 0xe7, 0x47, 0x17, 0x2f,
- 0x42, 0xb7, 0x5d, 0x9d, 0x0c, 0x49, 0xa6, 0x2c, 0x2b, 0xb9, 0xdc, 0x5e,
- 0xf7, 0xfb, 0x11, 0x25, 0xdf, 0x60, 0xfc, 0x68, 0x91, 0x60, 0x87, 0xce,
- 0x17, 0x40, 0xd5, 0x4d, 0xe6, 0xf3, 0x97, 0xe3, 0xfe, 0xef, 0x76, 0x77,
- 0xd1, 0xec, 0xb4, 0x80, 0x75, 0xd9, 0x84, 0xb7, 0x66, 0x25, 0x9c, 0xcc,
- 0x69, 0xaf, 0xcc, 0xb7, 0x24, 0xba, 0x8f, 0xf5, 0xc0, 0xe4, 0x1a, 0xd4,
- 0x2c, 0x22, 0x23, 0x25, 0xea, 0x96, 0x98, 0x1f, 0x93, 0x95, 0x04, 0xfc,
- 0x02, 0x14, 0xb5, 0x89, 0x6f, 0x41, 0xda, 0xcc, 0xce, 0x38, 0xc9, 0x69,
- 0x9a, 0x0c, 0xe1, 0x37, 0xb4, 0x5e, 0x6f, 0xb5, 0x4f, 0xac, 0xcf, 0x56,
- 0x08, 0x8e, 0xcb, 0xa2, 0x94, 0x24, 0x9f, 0x2b, 0xcc, 0x02, 0x26, 0x29,
- 0x1b, 0xa3, 0x82, 0x03, 0x1e, 0x24, 0xc3, 0xf7, 0x37, 0x49, 0x41, 0xd1,
- 0x7b, 0x40, 0xb7, 0xd9, 0x20, 0x9b, 0x64, 0x15, 0xfb, 0xaa, 0x9a, 0x92,
- 0x13, 0x6d, 0x3f, 0xae, 0x61, 0x3a, 0xbb, 0xcc, 0x66, 0x28, 0x38, 0xa0,
- 0x41, 0x2a, 0xab, 0x5c, 0x5b, 0x30, 0x29, 0xc6, 0xac, 0xd0, 0xb8, 0x7e,
- 0xa9, 0xc8, 0x17, 0xc4, 0xf0, 0x69, 0x3e, 0x4b, 0x3c, 0x50, 0x4b, 0xb9,
- 0xca, 0x08, 0x5d, 0x3e, 0x65, 0xc8, 0xee, 0x0e, 0x74, 0xa8, 0x69, 0xc0,
- 0x36, 0x40, 0x22, 0xc4, 0x5f, 0xd2, 0xbb, 0xe1, 0x15, 0x72, 0x3c, 0xc3,
- 0x28, 0x0d, 0x6b, 0xec, 0x8a, 0x0d, 0x22, 0x53, 0xcf, 0x6e, 0xaa, 0xce,
- 0x79, 0xbe, 0xea, 0x7c, 0xa9, 0x93, 0x1b, 0x50, 0x03, 0x0c, 0xb6, 0xb1,
- 0x51, 0xd6, 0x58, 0x32, 0x75, 0xe5, 0x6f, 0x62, 0x1f, 0x3e, 0x9f, 0xcd,
- 0xd2, 0x89, 0xec, 0xdf, 0x45, 0x9d, 0xbb, 0xd5, 0x57, 0xdf, 0x3c, 0x0b,
- 0x63, 0x96, 0x50, 0xbe, 0x46, 0x73, 0x4f, 0x29, 0x41, 0x22, 0xa9, 0xf4,
- 0xc2, 0xd4, 0x94, 0xac, 0xa7, 0xbd, 0x27, 0x3b, 0xe6, 0xab, 0x5e, 0xb3,
- 0x17, 0xdb, 0x8d, 0x77, 0x9a, 0x96, 0x6e, 0xb9, 0xbf, 0xc9, 0x7f, 0x32,
- 0x6a, 0x2b, 0x71, 0xbf, 0x46, 0x73, 0xae, 0x79, 0x45, 0xae, 0x30, 0x99,
- 0xc6, 0x06, 0x48, 0xc9, 0x39, 0x1a, 0xc9, 0xc6, 0x51, 0x91, 0xc3, 0x56,
- 0xd7, 0x36, 0x73, 0x93, 0x48, 0x63, 0xe4, 0xc9, 0x4c, 0xc2, 0xcd, 0x9d,
- 0x85, 0xd9, 0x0a, 0x9a, 0x59, 0xcd, 0xe5, 0xba, 0x4c, 0xaa, 0x35, 0x96,
- 0xd2, 0xba, 0x93, 0xa0, 0xc9, 0x87, 0x55, 0xa2, 0x5d, 0x4b, 0xa0, 0x95,
- 0xee, 0x8f, 0x8f, 0x48, 0xdb, 0x7c, 0x80, 0xbd, 0x73, 0x98, 0xf0, 0x75,
- 0x81, 0x22, 0xeb, 0x7b, 0x14, 0x81, 0x60, 0x95, 0xe9, 0x3c, 0xd7, 0x25,
- 0x08, 0x7a, 0xe8, 0x10, 0xd8, 0xec, 0x87, 0x0b, 0x10, 0x4e, 0x50, 0x9e,
- 0x7f, 0xa7, 0xca, 0x61, 0xe1, 0x23, 0xcb, 0x92, 0x44, 0xf4, 0x4a, 0x85,
- 0x06, 0x1c, 0x44, 0xa9, 0x96, 0x63, 0xb3, 0xda, 0x83, 0x3b, 0xf5, 0xc0,
- 0xfa, 0xf6, 0x29, 0x8a, 0xb8, 0x65, 0x57, 0xdd, 0x41, 0x27, 0xda, 0x4c,
- 0x7b, 0x97, 0xd0, 0x5e, 0x07, 0xdb, 0xd9, 0x3d, 0xc0, 0x7f, 0xf7, 0xe8,
- 0xdf, 0xfd, 0xce, 0x96, 0xa4, 0x72, 0xba, 0xb4, 0x81, 0xc2, 0x86, 0xbf,
- 0x47, 0x75, 0xd9, 0x83, 0xef, 0xdf, 0xac, 0x8d, 0x33, 0xb2, 0xe5, 0xe2,
- 0x94, 0x49, 0xc0, 0x17, 0x56, 0x75, 0x19, 0xa6, 0x6c, 0xe0, 0xbf, 0x4e,
- 0xd9, 0xc3, 0x00, 0x33, 0xc3, 0xb8, 0xdc, 0x74, 0xe4, 0xb8, 0xdd, 0x86,
- 0xef, 0x8a, 0x14, 0xc4, 0xcc, 0xab, 0x68, 0x51, 0xf1, 0x21, 0x81, 0x73,
- 0xd5, 0x6c, 0x6e, 0x3e, 0xc9, 0xac, 0x17, 0x4d, 0xba, 0xee, 0xa9, 0x41,
- 0xd2, 0xee, 0x22, 0xc7, 0x0c, 0x4c, 0xf2, 0x1b, 0x7d, 0x26, 0x96, 0x4c,
- 0xcb, 0x90, 0xd8, 0x02, 0xbb, 0x49, 0x8e, 0x08, 0x7c, 0xcc, 0x4d, 0x57,
- 0x98, 0xa2, 0x38, 0x8e, 0x69, 0xa0, 0x11, 0x0a, 0xbc, 0xd9, 0x10, 0x4d,
- 0x8d, 0x13, 0xda, 0x37, 0x34, 0xaa, 0x2e, 0x02, 0x41, 0xc5, 0x86, 0x56,
- 0xb3, 0xb1, 0xb8, 0x3c, 0xe5, 0x6f, 0xba, 0xef, 0x45, 0x42, 0x2c, 0x39,
- 0xa5, 0x01, 0x44, 0x95, 0x9a, 0x6c, 0x18, 0x38, 0x7a, 0x0d, 0x59, 0x8d,
- 0xf8, 0xb7, 0xab, 0xd6, 0xc8, 0x64, 0xeb, 0x3e, 0x39, 0xb1, 0x3f, 0xf5,
- 0x5a, 0x4e, 0x32, 0x8b, 0x4b, 0x9f, 0xed, 0x24, 0x53, 0xf7, 0xdb, 0x64,
- 0x30, 0xda, 0xb6, 0x67, 0x64, 0xdd, 0xe3, 0x4c, 0x6b, 0xba, 0xe2, 0x38,
- 0xc3, 0x23, 0x31, 0x7a, 0x6d, 0x17, 0xe5, 0x3d, 0x4e, 0xb3, 0x73, 0x7f,
- 0xf1, 0x3b, 0x1a, 0x7e, 0x21, 0x81, 0x71, 0xee, 0x56, 0x35, 0x57, 0xe2,
- 0xce, 0x21, 0xe1, 0x63, 0x87, 0x07, 0xf4, 0xb9, 0xa1, 0x37, 0xe2, 0x65,
- 0xd8, 0x4c, 0xde, 0x27, 0xbd, 0xe8, 0xec, 0xb8, 0x7f, 0x8e, 0x5d, 0xcc,
- 0x31, 0x18, 0x70, 0x0b, 0x23, 0x05, 0x1b, 0xcd, 0x81, 0x82, 0x95, 0xce,
- 0xca, 0x5a, 0xda, 0x74, 0x2b, 0x41, 0x68, 0x8c, 0x80, 0x86, 0x37, 0xd7,
- 0xa2, 0xf8, 0x28, 0x8c, 0x90, 0x92, 0x81, 0x22, 0x66, 0x0a, 0x5e, 0x47,
- 0x73, 0x58, 0xff, 0xd1, 0x96, 0xf1, 0x76, 0x74, 0x95, 0x6a, 0x4d, 0x28,
- 0x50, 0xb9, 0xb8, 0x44, 0x5d, 0xb3, 0x54, 0x2b, 0xa7, 0xe9, 0x01, 0x56,
- 0xc3, 0x17, 0xba, 0x64, 0xda, 0xc6, 0x89, 0x08, 0xda, 0x31, 0x26, 0xf5,
- 0x91, 0xb0, 0x39, 0xcb, 0x6d, 0xab, 0x18, 0xa6, 0x48, 0xd9, 0xcd, 0x19,
- 0x05, 0xd0, 0x70, 0xb6, 0x4a, 0x40, 0x9c, 0xe2, 0x4d, 0x51, 0x1d, 0x79,
- 0x2c, 0x19, 0xcd, 0x01, 0x17, 0x0a, 0x35, 0x34, 0x64, 0x61, 0xd7, 0x04,
- 0x22, 0x64, 0x48, 0x48, 0xa8, 0x79, 0xb0, 0x55, 0x02, 0xdb, 0x33, 0x9c,
- 0xea, 0xfb, 0xd9, 0x02, 0xc3, 0x88, 0x7d, 0xb9, 0x06, 0xe5, 0x53, 0xbc,
- 0xb0, 0x71, 0x01, 0x97, 0xaa, 0xc8, 0x0e, 0x75, 0x39, 0xfa, 0x1e, 0x6b,
- 0xca, 0xb4, 0x02, 0x38, 0x63, 0x51, 0x96, 0x8d, 0xb6, 0xdc, 0x08, 0x47,
- 0x96, 0x68, 0xa6, 0x80, 0x45, 0xd6, 0x69, 0x7d, 0x5d, 0xe3, 0x8f, 0x3b,
- 0xb0, 0x35, 0x15, 0xeb, 0x0c, 0x38, 0xdf, 0x68, 0xbe, 0x18, 0xbc, 0x4f,
- 0xef, 0x6a, 0xe6, 0x9c, 0x47, 0xbb, 0x75, 0x73, 0x0e, 0x75, 0x01, 0x7a,
- 0x63, 0x1a, 0x1d, 0xe2, 0xbf, 0xe1, 0xcb, 0x52, 0xce, 0x97, 0xe6, 0x01,
- 0x12, 0xfd, 0xe0, 0x2b, 0x12, 0xbb, 0xc5, 0x9c, 0x87, 0xbd, 0x37, 0xb5,
- 0x8b, 0xd3, 0x13, 0x7a, 0xe8, 0x6c, 0xf5, 0xf0, 0x3a, 0xea, 0x46, 0xcf,
- 0x10, 0x34, 0xe1, 0xe4, 0xf5, 0xf7, 0x44, 0xf0, 0xe7, 0xbb, 0x7b, 0x14,
- 0x28, 0x63, 0x74, 0xce, 0x11, 0xf5, 0x10, 0x36, 0x91, 0x9a, 0xdc, 0x41,
- 0x1c, 0x03, 0x27, 0x0e, 0x98, 0x9c, 0x61, 0x24, 0x05, 0xd9, 0x74, 0xbe,
- 0xe9, 0xac, 0x71, 0x88, 0xba, 0x6d, 0x3a, 0x01, 0x25, 0x6a, 0x83, 0xf3,
- 0x03, 0x45, 0x2f, 0x30, 0x6a, 0x01, 0xb5, 0x60, 0x05, 0x4d, 0xd2, 0x61,
- 0x61, 0xa4, 0x3d, 0x36, 0x10, 0x06, 0x54, 0x53, 0xb2, 0x71, 0xce, 0xdf,
- 0x0f, 0xcb, 0xdd, 0xdd, 0x83, 0xe8, 0xed, 0x9b, 0x97, 0x2c, 0x9f, 0xe3,
- 0x24, 0x1b, 0x36, 0x2c, 0x1c, 0x7a, 0xd8, 0xec, 0x68, 0x37, 0xe4, 0x73,
- 0x9a, 0x1d, 0xed, 0x28, 0x50, 0x74, 0xe0, 0xbf, 0xf9, 0xde, 0x5b, 0x8b,
- 0x0e, 0x4f, 0xba, 0xf2, 0x2e, 0xfe, 0x04, 0x52, 0x14, 0xa7, 0x12, 0xfc,
- 0x16, 0xd7, 0x57, 0xc0, 0x3e, 0x19, 0x1d, 0x3a, 0x14, 0xf4, 0x93, 0x31,
- 0x30, 0xfd, 0x72, 0x1f, 0xca, 0x0c, 0x4b, 0x72, 0x3e, 0x5d, 0xe2, 0x44,
- 0x42, 0x86, 0x7b, 0x9b, 0x2b, 0x40, 0x53, 0xa5, 0x33, 0xcc, 0x28, 0x1e,
- 0x84, 0xf5, 0x81, 0xbc, 0x2f, 0x99, 0x19, 0x39, 0x3f, 0xe6, 0xa4, 0x54,
- 0xca, 0x19, 0x69, 0x32, 0xd0, 0x61, 0x3e, 0xe9, 0x89, 0xb5, 0xc1, 0xed,
- 0xd8, 0x35, 0x07, 0x91, 0x9a, 0xbc, 0x27, 0x62, 0x19, 0x72, 0x6b, 0xbe,
- 0x78, 0x98, 0x06, 0x9b, 0x54, 0x6f, 0x14, 0x55, 0x8a, 0x5e, 0x35, 0xd2,
- 0x9c, 0x7d, 0x8d, 0x02, 0x1a, 0x69, 0x64, 0xac, 0x7d, 0xd4, 0xf4, 0xc8,
- 0x90, 0x4e, 0x8d, 0x31, 0x42, 0xc6, 0x7a, 0xa7, 0x39, 0x18, 0xba, 0x68,
- 0x35, 0x1f, 0x19, 0xdc, 0x78, 0x45, 0x26, 0x5a, 0x17, 0x9f, 0xb2, 0x66,
- 0x73, 0x1a, 0x58, 0xda, 0xf4, 0xa2, 0x69, 0x9c, 0x1b, 0x25, 0xd3, 0xe2,
- 0xd1, 0xf0, 0xcc, 0x72, 0x21, 0x03, 0x6b, 0x26, 0xb9, 0x53, 0xf3, 0x22,
- 0xbb, 0xc6, 0x07, 0x95, 0x6e, 0xac, 0x8b, 0xb8, 0xae, 0x4b, 0xe6, 0x33,
- 0xfc, 0x39, 0x63, 0x3f, 0x9e, 0x83, 0xa3, 0x51, 0xe3, 0x71, 0x96, 0xf2,
- 0x28, 0xc2, 0x40, 0x22, 0x5f, 0x48, 0xda, 0xc6, 0x94, 0x6c, 0x01, 0xcc,
- 0x08, 0x58, 0x16, 0x5e, 0x32, 0x5f, 0x71, 0xa9, 0xf2, 0x9b, 0x08, 0xb7,
- 0xc2, 0x06, 0xbd, 0x19, 0x1f, 0x47, 0x57, 0xfc, 0xf4, 0xb4, 0xcd, 0x92,
- 0xd1, 0x1d, 0xb8, 0x0a, 0x6d, 0x90, 0x57, 0x44, 0x52, 0x3e, 0x9a, 0x7c,
- 0x3a, 0x3f, 0xc3, 0x2f, 0x64, 0xd1, 0xe3, 0xb4, 0x5c, 0xc7, 0x09, 0x2f,
- 0xfc, 0x90, 0x42, 0x80, 0x9b, 0xcd, 0x99, 0x1d, 0x1c, 0xa5, 0x93, 0x6c,
- 0x9a, 0x91, 0x42, 0xdb, 0xd7, 0x54, 0x4a, 0x8e, 0x12, 0xa4, 0xc1, 0xf0,
- 0x58, 0x78, 0x09, 0x4d, 0xe7, 0x9d, 0x9f, 0x3b, 0x4d, 0x03, 0x21, 0x0e,
- 0xe4, 0xe7, 0xd5, 0x03, 0x31, 0xf9, 0xea, 0xcb, 0xe3, 0xd5, 0x1c, 0x48,
- 0x9e, 0xba, 0x9a, 0x81, 0xe3, 0xc0, 0xeb, 0x19, 0xb5, 0x65, 0xb1, 0x2a,
- 0x69, 0x18, 0x80, 0x21, 0x9b, 0xe6, 0x89, 0x82, 0x3e, 0x2b, 0x0c, 0xb1,
- 0x66, 0x29, 0x0f, 0x5d, 0xff, 0xd9, 0xf0, 0x3d, 0xe7, 0xa4, 0x8e, 0x9b,
- 0x46, 0x0f, 0x93, 0x7c, 0xcd, 0xc0, 0x01, 0x81, 0x85, 0x23, 0xe3, 0x15,
- 0xc6, 0x24, 0xe0, 0x21, 0x46, 0xb6, 0x9c, 0xcd, 0xac, 0x77, 0x2f, 0x68,
- 0xea, 0x84, 0xb1, 0xbe, 0x7b, 0xf6, 0xf2, 0x4d, 0xb4, 0x89, 0x76, 0x80,
- 0xa6, 0xa9, 0x4d, 0xf9, 0xfa, 0x76, 0x5a, 0x0d, 0xb7, 0xe7, 0xef, 0xb3,
- 0xed, 0x59, 0x59, 0x8e, 0x06, 0x5b, 0xc6, 0x3d, 0xad, 0xb6, 0x32, 0x6b,
- 0x1e, 0x53, 0xfb, 0x18, 0x19, 0xc8, 0x9a, 0x07, 0xd4, 0x31, 0x98, 0xe1,
- 0x95, 0x62, 0xec, 0x64, 0xb4, 0x46, 0x74, 0xfc, 0x29, 0xaa, 0x89, 0xa3,
- 0x86, 0x29, 0x16, 0x2a, 0xc0, 0xe2, 0x9d, 0xe8, 0x6e, 0x81, 0x22, 0xc0,
- 0xf0, 0x6e, 0x14, 0xd9, 0x09, 0x80, 0x26, 0x63, 0xb0, 0x05, 0x5a, 0x39,
- 0xb1, 0x2d, 0x8e, 0xac, 0x4d, 0x11, 0x5e, 0x0c, 0x05, 0x62, 0x48, 0x38,
- 0xa9, 0x89, 0x9a, 0x64, 0x4d, 0xb5, 0xb7, 0xdd, 0x41, 0x96, 0xc6, 0x58,
- 0x18, 0x26, 0x60, 0x0c, 0x0e, 0xe6, 0x78, 0xc1, 0xf6, 0xd5, 0x80, 0x4d,
- 0x0c, 0xb6, 0x13, 0x17, 0xc5, 0x6c, 0x81, 0xee, 0x66, 0x3b, 0x1d, 0xb5,
- 0x29, 0xab, 0xd6, 0x2e, 0xa9, 0x5c, 0x82, 0x59, 0xa0, 0x5c, 0xc4, 0x81,
- 0x2b, 0x5a, 0xd7, 0xb3, 0xcb, 0x0b, 0x9a, 0x98, 0x4d, 0xc1, 0x2b, 0x7b,
- 0x13, 0x91, 0x70, 0x9e, 0x3e, 0xde, 0xdd, 0xdb, 0xaa, 0x85, 0x7c, 0x09,
- 0xd7, 0xf0, 0x52, 0x45, 0x51, 0xf7, 0x4f, 0xea, 0x5c, 0x1e, 0x15, 0x22,
- 0x91, 0x54, 0x6d, 0xd3, 0xa3, 0x14, 0x5d, 0x93, 0x20, 0x8b, 0xa9, 0x0f,
- 0x74, 0x90, 0xc2, 0x20, 0xbd, 0x8d, 0xb7, 0x90, 0x04, 0x22, 0x46, 0x74,
- 0xac, 0x2e, 0x88, 0x79, 0x44, 0xb0, 0x01, 0x95, 0x9c, 0x41, 0x77, 0xd4,
- 0x3d, 0x5e, 0xa7, 0xa4, 0xc5, 0x16, 0x8b, 0xf3, 0x72, 0xc4, 0x89, 0xae,
- 0x8d, 0xb9, 0x89, 0x63, 0x59, 0x2c, 0xe1, 0xd5, 0x26, 0xdc, 0x10, 0xe3,
- 0x92, 0x9b, 0xe2, 0x9b, 0x8c, 0xa9, 0x83, 0xd7, 0xce, 0x8c, 0xa2, 0xe8,
- 0x12, 0x47, 0x46, 0xd1, 0xd5, 0x77, 0xa5, 0x87, 0x7a, 0xab, 0x81, 0x10,
- 0x54, 0xe4, 0x38, 0x20, 0x1f, 0x85, 0x9b, 0x0c, 0x9b, 0x79, 0xd7, 0xb6,
- 0xf3, 0x2e, 0x37, 0xf3, 0x36, 0x59, 0x87, 0x6c, 0x0f, 0xee, 0xbd, 0xd8,
- 0xed, 0x07, 0xa9, 0x64, 0x03, 0x33, 0xaf, 0x31, 0xd7, 0x98, 0x77, 0xe9,
- 0xc3, 0xeb, 0xdb, 0x7a, 0x6b, 0xd1, 0xb5, 0x55, 0x37, 0xbd, 0x62, 0x7a,
- 0x1b, 0xda, 0x5a, 0xdf, 0x8b, 0xad, 0x95, 0x2e, 0x73, 0x73, 0x94, 0x7c,
- 0x6f, 0x8d, 0xca, 0x08, 0x31, 0x65, 0x99, 0x37, 0x8c, 0x52, 0xb8, 0x08,
- 0xce, 0x0d, 0xd9, 0xb3, 0xc7, 0x9d, 0x72, 0x60, 0xc2, 0xbe, 0x24, 0x4d,
- 0x5b, 0x71, 0x9c, 0xe0, 0x81, 0xb3, 0x0f, 0x62, 0x5d, 0x42, 0xd0, 0x67,
- 0xa0, 0xce, 0x8d, 0x52, 0x8d, 0x1d, 0x6f, 0xd2, 0x02, 0x1e, 0x7a, 0x45,
- 0x08, 0x59, 0x76, 0xf8, 0x25, 0xd5, 0xb9, 0xf5, 0x7c, 0x37, 0xad, 0xbe,
- 0xc7, 0xde, 0x15, 0x5f, 0x1a, 0xb9, 0xc9, 0x4a, 0x75, 0x14, 0x0d, 0x40,
- 0x0b, 0xe7, 0x6b, 0xc2, 0x05, 0x27, 0xd9, 0x19, 0x3f, 0x52, 0xcd, 0x96,
- 0x47, 0xb6, 0x55, 0x38, 0x2e, 0x9b, 0xa7, 0x92, 0x34, 0x78, 0xfe, 0xfc,
- 0x47, 0x27, 0x07, 0xd5, 0x33, 0x51, 0x91, 0x29, 0xf8, 0x4f, 0x26, 0x67,
- 0x00, 0x34, 0x51, 0x54, 0x0c, 0xd8, 0x7d, 0x9c, 0x88, 0xa5, 0x96, 0x22,
- 0x11, 0xb7, 0x6c, 0x82, 0x0b, 0x2e, 0x75, 0xe7, 0x90, 0xbe, 0x6b, 0xfa,
- 0xa2, 0x05, 0x10, 0xe2, 0x9b, 0x9f, 0xf9, 0xeb, 0x88, 0xa3, 0x97, 0x7f,
- 0x3e, 0xac, 0xae, 0x16, 0xd3, 0x01, 0xec, 0xe7, 0xac, 0xfa, 0xa6, 0x13,
- 0x71, 0x9c, 0xdb, 0x58, 0xd6, 0x73, 0x89, 0xb9, 0x22, 0x53, 0xd8, 0x21,
- 0xa1, 0xb0, 0xfa, 0xaa, 0xf1, 0xe8, 0x14, 0xfc, 0xc4, 0x26, 0x9b, 0xc0,
- 0xe6, 0xb1, 0x37, 0xc9, 0x93, 0x0b, 0xdf, 0x02, 0x79, 0xfe, 0xfc, 0xea,
- 0xef, 0x3f, 0x7f, 0xb5, 0xff, 0x28, 0x79, 0x9a, 0x0c, 0x9f, 0x8c, 0xbf,
- 0x4c, 0x1e, 0x8f, 0x1e, 0x3f, 0xfd, 0x6a, 0xef, 0xcb, 0xc7, 0xc9, 0xd3,
- 0x47, 0xe3, 0xe4, 0xc9, 0x6e, 0xba, 0xfb, 0xd5, 0x78, 0x6f, 0x7f, 0x34,
- 0x1a, 0xa7, 0x5f, 0x8e, 0x9e, 0x26, 0x9d, 0x1e, 0xa9, 0x64, 0x3a, 0x74,
- 0x9f, 0xd5, 0xaa, 0xee, 0x95, 0x44, 0xfd, 0x17, 0x47, 0xf1, 0x6e, 0x74,
- 0x95, 0xde, 0xea, 0x01, 0x63, 0xa7, 0x82, 0xc9, 0xc5, 0x48, 0x25, 0xcf,
- 0xae, 0x7d, 0xb2, 0x0a, 0x84, 0x86, 0x59, 0x74, 0x68, 0x0d, 0xe4, 0xb4,
- 0x2b, 0x5a, 0x45, 0x5d, 0x56, 0xce, 0xb6, 0x30, 0x16, 0xfc, 0x03, 0xf5,
- 0x9a, 0xe1, 0xbc, 0x9a, 0x87, 0xff, 0x14, 0xcd, 0x56, 0xaf, 0x92, 0xe1,
- 0x15, 0x41, 0x50, 0xc8, 0x83, 0x7d, 0x8e, 0x20, 0xe9, 0x46, 0xf2, 0x0b,
- 0xea, 0x5a, 0x4e, 0x1b, 0xdf, 0x17, 0xf9, 0x62, 0x7e, 0x9e, 0x4f, 0xb2,
- 0xe1, 0xdd, 0xb2, 0xe6, 0xdc, 0xc7, 0x6a, 0x5f, 0x9c, 0x30, 0x0b, 0xcf,
- 0xca, 0xb4, 0xcd, 0x38, 0x4f, 0xf6, 0xc6, 0xb5, 0xed, 0x79, 0x2d, 0x21,
- 0xe6, 0x0f, 0x50, 0xfa, 0x68, 0xfd, 0x89, 0x45, 0xb0, 0xb0, 0x0c, 0xff,
- 0xad, 0xaf, 0xf6, 0xd9, 0x0b, 0x60, 0xa5, 0xde, 0x17, 0x0f, 0xb3, 0xf9,
- 0x15, 0x86, 0xcf, 0x1d, 0x52, 0xae, 0x09, 0xb0, 0x57, 0xf9, 0x20, 0xac,
- 0xef, 0xf5, 0x85, 0x01, 0x94, 0x42, 0x3e, 0xfa, 0xb6, 0xc8, 0x7b, 0x99,
- 0x02, 0x87, 0xa9, 0xdd, 0x57, 0x12, 0x9c, 0x32, 0xcf, 0x30, 0x4e, 0x1e,
- 0x5f, 0x79, 0x59, 0xe4, 0x75, 0x55, 0x0a, 0x18, 0x74, 0x47, 0xbf, 0xed,
- 0x31, 0x56, 0xc5, 0x62, 0x8e, 0xba, 0x0f, 0x61, 0x10, 0xd2, 0xe7, 0xcd,
- 0x73, 0x8d, 0x83, 0x17, 0x02, 0x65, 0x25, 0x09, 0x36, 0xf1, 0xed, 0x9b,
- 0xd3, 0x83, 0xe6, 0x22, 0x99, 0x85, 0x24, 0x1f, 0x6f, 0x99, 0x6e, 0x8f,
- 0xf2, 0x61, 0xb9, 0x5d, 0x96, 0x13, 0x5d, 0x08, 0x42, 0x4b, 0x0b, 0x5b,
- 0x06, 0x64, 0xb8, 0xeb, 0x91, 0xc7, 0x47, 0xb4, 0xf7, 0x4a, 0xff, 0x27,
- 0xc7, 0xcf, 0x5e, 0x9c, 0xc4, 0xf0, 0x6f, 0xff, 0x28, 0x3e, 0x3a, 0xe9,
- 0xef, 0x3d, 0x7e, 0x12, 0x1f, 0x1f, 0xbf, 0xfa, 0x72, 0x4d, 0x12, 0xa9,
- 0x26, 0xe5, 0xf5, 0x6e, 0x6f, 0xbf, 0x46, 0x0a, 0xf9, 0x94, 0x78, 0x77,
- 0x3a, 0x8a, 0xcb, 0xd2, 0x8b, 0x4d, 0xc7, 0xfc, 0x75, 0x8e, 0x2e, 0x3d,
- 0x91, 0x34, 0x0e, 0xba, 0xec, 0xe3, 0x6c, 0x46, 0x29, 0xe7, 0xfa, 0xb2,
- 0xe6, 0x49, 0x71, 0xdc, 0x90, 0x89, 0x0b, 0xef, 0x06, 0x7c, 0xa8, 0x89,
- 0xdc, 0x5a, 0x7f, 0x72, 0xad, 0xa1, 0x28, 0x53, 0xe7, 0x85, 0x41, 0x42,
- 0x21, 0x44, 0xa7, 0xe5, 0xd6, 0xc3, 0xda, 0xa8, 0x5b, 0x22, 0x6d, 0x1e,
- 0x6e, 0x3d, 0xac, 0xb5, 0xbe, 0xf6, 0x89, 0xae, 0x8f, 0xad, 0x5c, 0x27,
- 0x98, 0xd3, 0x79, 0xb9, 0x9e, 0x8c, 0xf3, 0xa4, 0x61, 0x41, 0x34, 0x8f,
- 0x85, 0xa3, 0xc2, 0xd4, 0x64, 0x9e, 0x44, 0xf6, 0x49, 0x6b, 0x3f, 0x56,
- 0xc8, 0x18, 0xa3, 0xc5, 0x99, 0xc8, 0xca, 0x72, 0x19, 0x34, 0x09, 0xcb,
- 0xfa, 0xf5, 0x40, 0x0d, 0xc4, 0xdf, 0xe1, 0x0e, 0x5c, 0x5c, 0x9f, 0x5e,
- 0xf4, 0x82, 0xa3, 0x2d, 0x9b, 0xd2, 0x95, 0xa0, 0x24, 0xb6, 0x66, 0xc7,
- 0x78, 0x49, 0x29, 0x1a, 0x02, 0xda, 0x66, 0xa0, 0x5f, 0xcc, 0xac, 0x87,
- 0xda, 0xbf, 0x5b, 0x15, 0x1b, 0xc8, 0x3a, 0xeb, 0x8b, 0x54, 0x6c, 0x8c,
- 0x51, 0x5a, 0x14, 0x79, 0xd1, 0x0b, 0x10, 0xad, 0x25, 0xd3, 0xd8, 0xbb,
- 0x0c, 0x97, 0x93, 0x6d, 0x3a, 0xc9, 0xf0, 0x63, 0x8a, 0xba, 0x77, 0x36,
- 0xf2, 0x7e, 0x84, 0x7c, 0xbf, 0xa0, 0x64, 0xa0, 0xda, 0xe6, 0xa8, 0x56,
- 0x53, 0xf1, 0xc3, 0x29, 0x78, 0xdd, 0x2b, 0xa8, 0xe5, 0xe0, 0xc4, 0x7f,
- 0x91, 0xa0, 0xe4, 0x71, 0x76, 0x19, 0x8e, 0x30, 0xb3, 0x69, 0x51, 0x15,
- 0x66, 0x93, 0x6a, 0xf8, 0x18, 0x02, 0x31, 0x88, 0x41, 0x43, 0xed, 0x3d,
- 0x25, 0xcb, 0xd1, 0xc6, 0xd2, 0x57, 0xc7, 0x7e, 0x74, 0x20, 0x20, 0xeb,
- 0xaf, 0x60, 0x0e, 0x49, 0x64, 0x22, 0x93, 0x4d, 0x1f, 0xb5, 0x94, 0x24,
- 0x04, 0x25, 0xa5, 0x03, 0xd1, 0xb4, 0x34, 0xa0, 0xe3, 0xd3, 0xf2, 0xff,
- 0x10, 0x52, 0x66, 0x73, 0x51, 0xce, 0xe6, 0x35, 0xdc, 0x9c, 0x8c, 0x80,
- 0x5b, 0x13, 0x4a, 0xb5, 0x0e, 0x49, 0xd6, 0xb9, 0x13, 0xa5, 0xc4, 0xd9,
- 0x4c, 0x9e, 0xcc, 0x59, 0x99, 0x24, 0x37, 0x05, 0x3c, 0x23, 0x81, 0x1c,
- 0xae, 0x64, 0x10, 0x3b, 0x31, 0x17, 0x18, 0xc1, 0x79, 0x27, 0xb9, 0x55,
- 0x70, 0x04, 0x1c, 0x06, 0xa3, 0xb4, 0x7b, 0x9e, 0xdc, 0x84, 0xe7, 0xdf,
- 0x26, 0xaf, 0xb2, 0xbb, 0x9c, 0x3f, 0xa0, 0x63, 0x3d, 0xd0, 0x28, 0x31,
- 0x2b, 0xed, 0xca, 0xee, 0x05, 0xed, 0xb8, 0x92, 0x2d, 0xcd, 0x58, 0x89,
- 0x19, 0x21, 0x81, 0x0a, 0x6e, 0x24, 0x27, 0x7f, 0xab, 0xff, 0xbb, 0xcc,
- 0x25, 0xcb, 0x0e, 0x07, 0x8a, 0xe3, 0xe4, 0x31, 0x36, 0x4f, 0xad, 0xc1,
- 0x84, 0xac, 0x19, 0x03, 0x92, 0xd2, 0xe6, 0x50, 0x97, 0xc6, 0xc8, 0xe3,
- 0x38, 0x77, 0x75, 0x35, 0x03, 0xa3, 0x8b, 0xfc, 0x84, 0x74, 0x1a, 0x49,
- 0x91, 0x6a, 0x17, 0x70, 0xd4, 0x1a, 0xa3, 0x92, 0x71, 0xc4, 0xbe, 0xe1,
- 0xd5, 0x64, 0x5d, 0x3b, 0x03, 0xd0, 0xec, 0x6b, 0xb3, 0xcd, 0x61, 0xef,
- 0x63, 0x6a, 0x1f, 0xb0, 0xde, 0x6c, 0xbb, 0x87, 0x64, 0xe8, 0x12, 0x14,
- 0x13, 0x1e, 0xf7, 0x01, 0x23, 0x76, 0x7d, 0xbd, 0x15, 0xf2, 0xef, 0x39,
- 0x8d, 0x89, 0x3c, 0x85, 0xb1, 0x07, 0xa0, 0xb9, 0x4e, 0xf2, 0x52, 0x9d,
- 0xfc, 0xb0, 0x81, 0x0c, 0xde, 0xc9, 0x30, 0x3c, 0x06, 0xd2, 0xb3, 0xd1,
- 0x1c, 0x3f, 0xc3, 0xdb, 0x33, 0x36, 0xa2, 0xbe, 0x18, 0x1c, 0x2d, 0xd8,
- 0x28, 0x41, 0x73, 0x18, 0x5b, 0x0e, 0x0c, 0xee, 0xe7, 0x9f, 0x41, 0x5a,
- 0xff, 0xb9, 0xd3, 0x1c, 0xdd, 0xcf, 0xc0, 0x47, 0x7f, 0x06, 0x5a, 0xfc,
- 0x99, 0x01, 0x24, 0x7e, 0xbe, 0x46, 0x23, 0x0c, 0xfa, 0x88, 0xca, 0x09,
- 0xc6, 0x27, 0xb0, 0x9a, 0x5b, 0xb7, 0xa1, 0x33, 0xac, 0x2a, 0x27, 0x80,
- 0x78, 0x26, 0x1a, 0x76, 0xc8, 0x87, 0x57, 0x94, 0x73, 0xd2, 0x60, 0xf7,
- 0x16, 0xd3, 0x99, 0xd8, 0x0a, 0x98, 0x56, 0x89, 0x0b, 0x30, 0x36, 0x79,
- 0xb4, 0xf1, 0xbb, 0x0d, 0x87, 0xb2, 0xba, 0x21, 0xf3, 0x64, 0x91, 0xb2,
- 0x30, 0x4c, 0x02, 0x5d, 0xe6, 0xe4, 0x2b, 0x2a, 0x24, 0x29, 0x19, 0x80,
- 0x38, 0x82, 0xc8, 0x17, 0x4f, 0xce, 0xd0, 0x67, 0xca, 0xa0, 0x1d, 0xb9,
- 0x35, 0xed, 0x20, 0x76, 0xc9, 0xfc, 0xea, 0xae, 0xc4, 0xeb, 0x52, 0xc6,
- 0x63, 0xc4, 0x65, 0x1c, 0x62, 0x30, 0x14, 0x54, 0x99, 0x21, 0xef, 0x31,
- 0x3e, 0x42, 0x66, 0x10, 0x64, 0x88, 0x86, 0x8b, 0xc2, 0x58, 0x36, 0xe2,
- 0x0d, 0x13, 0x79, 0x41, 0x3c, 0x92, 0xb8, 0x65, 0x4b, 0xaa, 0xaa, 0xcd,
- 0xc1, 0xf2, 0xba, 0x73, 0x1c, 0x08, 0xb9, 0x9b, 0xf5, 0x65, 0xf1, 0x72,
- 0x11, 0x5b, 0x47, 0xc6, 0x5d, 0xe3, 0x03, 0x6c, 0x7b, 0x6f, 0xee, 0x55,
- 0x6a, 0x50, 0x97, 0x74, 0x1e, 0x98, 0x97, 0x66, 0x5d, 0xfc, 0x71, 0x4c,
- 0x28, 0xe6, 0x73, 0x46, 0x1e, 0x47, 0xf2, 0xa0, 0x50, 0xbc, 0x3b, 0x44,
- 0xe9, 0x98, 0x4f, 0x3c, 0xde, 0x2b, 0x79, 0x47, 0x8a, 0xdd, 0x8a, 0x87,
- 0x1d, 0x11, 0xb0, 0x6f, 0x66, 0x82, 0x51, 0xdc, 0xcf, 0xc9, 0x73, 0x32,
- 0xa4, 0xa0, 0x3e, 0x8e, 0x1c, 0x55, 0xbc, 0x8f, 0x80, 0x45, 0x06, 0xa5,
- 0x0b, 0x4f, 0x41, 0xc0, 0xf1, 0x7c, 0xcd, 0x20, 0xae, 0x9e, 0x9a, 0xd0,
- 0xf1, 0xb4, 0x89, 0xdf, 0xc1, 0x0c, 0x62, 0xbd, 0x43, 0x23, 0xd1, 0xdb,
- 0x62, 0xff, 0xa9, 0xca, 0x88, 0x16, 0x42, 0x33, 0xcd, 0x47, 0xa4, 0x5b,
- 0xe7, 0x6e, 0x6d, 0xfa, 0x06, 0x14, 0xfd, 0x04, 0x9e, 0xc2, 0x41, 0x21,
- 0xc3, 0x12, 0x64, 0xe7, 0xc8, 0x8f, 0x27, 0x8c, 0x93, 0x4b, 0x34, 0xe2,
- 0x7c, 0x8d, 0xa8, 0x62, 0x98, 0x5a, 0x87, 0x7f, 0x6d, 0xef, 0xf6, 0x76,
- 0x42, 0x33, 0xc0, 0x55, 0x17, 0x00, 0x25, 0x71, 0xae, 0xe1, 0xda, 0x56,
- 0x79, 0xbe, 0x7a, 0x8c, 0xbc, 0x2c, 0x70, 0xf5, 0xcd, 0xa1, 0x87, 0xf0,
- 0x68, 0xe2, 0xb3, 0xe6, 0x27, 0x64, 0x59, 0x81, 0x5e, 0xbe, 0x36, 0x50,
- 0xb9, 0xb3, 0x9c, 0x10, 0x98, 0x40, 0x56, 0x9a, 0x4c, 0x6a, 0xa0, 0xdb,
- 0x9d, 0x96, 0xf5, 0x9e, 0x51, 0x2a, 0x5a, 0xda, 0x5c, 0xf6, 0x26, 0x92,
- 0x94, 0x09, 0xce, 0xc4, 0xc5, 0x9f, 0x49, 0x00, 0x05, 0xd0, 0xc7, 0xa6,
- 0x24, 0x23, 0x60, 0x3e, 0x80, 0x48, 0xfe, 0x2c, 0x5b, 0x6e, 0x71, 0xea,
- 0x2a, 0x83, 0xbe, 0x25, 0x2d, 0x3e, 0x06, 0xe7, 0xb8, 0xda, 0x60, 0xea,
- 0x8c, 0x7c, 0x81, 0x24, 0x5a, 0x74, 0x11, 0x30, 0x7a, 0xc6, 0x1e, 0x4d,
- 0x73, 0x46, 0x43, 0xbe, 0x78, 0x14, 0xec, 0x59, 0x72, 0xd1, 0xa6, 0x6b,
- 0x6d, 0x67, 0x25, 0x8f, 0x46, 0x5c, 0x7f, 0x7a, 0xef, 0x2b, 0x43, 0xf6,
- 0x62, 0xb9, 0x08, 0xd7, 0x5d, 0x01, 0x25, 0x48, 0xb1, 0xf2, 0x88, 0x7b,
- 0x77, 0x2b, 0xea, 0xfc, 0x7f, 0x28, 0x58, 0xfc, 0xc5, 0xd9, 0xab, 0x93,
- 0xed, 0x1e, 0x2e, 0x4e, 0x31, 0xf4, 0x88, 0x62, 0x0f, 0x1f, 0xfb, 0xf1,
- 0xd9, 0xf7, 0xef, 0x8e, 0xcf, 0x5e, 0x3f, 0x7f, 0xf9, 0x7d, 0xfd, 0xe1,
- 0x68, 0xd3, 0xcd, 0x4e, 0xd9, 0xef, 0xed, 0x6c, 0x35, 0x5f, 0xdf, 0xc7,
- 0xd7, 0x97, 0x76, 0xf0, 0x68, 0x4b, 0x83, 0x2d, 0x0f, 0xa2, 0xce, 0xef,
- 0xdf, 0xf6, 0x4f, 0xde, 0x9c, 0xbf, 0x39, 0x43, 0x68, 0xca, 0xdf, 0xff,
- 0xdc, 0xf6, 0xca, 0xe3, 0xda, 0x2b, 0x47, 0xe7, 0xe7, 0xcf, 0x8e, 0x2e,
- 0x8e, 0xda, 0x1f, 0x7f, 0xd2, 0xde, 0xc3, 0xd1, 0x1c, 0x61, 0x41, 0x39,
- 0x10, 0xe6, 0x19, 0xd0, 0x5c, 0x6b, 0x1b, 0x4f, 0xb7, 0x80, 0x1f, 0xce,
- 0x62, 0xd3, 0x0e, 0x5a, 0x38, 0x2e, 0xd3, 0x6a, 0x7e, 0xb3, 0xc8, 0x46,
- 0x9c, 0x99, 0x2d, 0x9a, 0xc8, 0x55, 0xae, 0x11, 0xe5, 0x68, 0xc0, 0x6d,
- 0x36, 0xf3, 0xe5, 0x16, 0x5c, 0x08, 0x3a, 0x9a, 0xae, 0x44, 0xe3, 0xe3,
- 0xbb, 0x24, 0xd4, 0x4b, 0xe7, 0x9a, 0x67, 0x29, 0xe6, 0x44, 0xb9, 0x64,
- 0x43, 0x91, 0xa6, 0x8c, 0x09, 0x38, 0x42, 0x61, 0x3f, 0xbf, 0x46, 0xb6,
- 0x8b, 0x0c, 0xcf, 0x52, 0x6d, 0x6e, 0xef, 0x15, 0x0d, 0x74, 0x57, 0x3b,
- 0xf3, 0x04, 0x4e, 0x8c, 0xd7, 0xdc, 0x70, 0x51, 0xe9, 0x09, 0x20, 0x12,
- 0x1a, 0x05, 0x6e, 0x33, 0x83, 0xd5, 0x89, 0x22, 0x93, 0xde, 0x41, 0x2c,
- 0x00, 0x28, 0x85, 0xe2, 0xe5, 0xa6, 0x56, 0x40, 0x10, 0x05, 0x74, 0x56,
- 0x81, 0xb0, 0xa0, 0x77, 0xfc, 0x55, 0x57, 0x51, 0x8f, 0x18, 0xa4, 0x8c,
- 0xaf, 0xb7, 0xbc, 0x98, 0x52, 0x00, 0xe7, 0x19, 0x05, 0xce, 0x6b, 0x7e,
- 0x00, 0xc3, 0xaf, 0xb5, 0x44, 0x19, 0xbb, 0x47, 0x44, 0x9a, 0x26, 0x43,
- 0x76, 0x00, 0x49, 0x40, 0x0e, 0xd7, 0xa7, 0x03, 0x12, 0x70, 0x2f, 0xf2,
- 0xb5, 0x03, 0x6b, 0xff, 0xd1, 0xb5, 0xfc, 0xa8, 0xae, 0xdf, 0x0b, 0xa2,
- 0x00, 0x0c, 0x11, 0x25, 0xeb, 0xc3, 0xb1, 0x94, 0x02, 0x49, 0x26, 0x02,
- 0x85, 0xe6, 0xd9, 0xea, 0x5e, 0x25, 0xb7, 0xd9, 0x74, 0x31, 0xa5, 0x59,
- 0xe1, 0xa4, 0xe4, 0x31, 0xc1, 0x82, 0x26, 0x27, 0x05, 0xc7, 0x73, 0xd2,
- 0xc0, 0x37, 0xca, 0xc8, 0xb1, 0xd8, 0x85, 0xee, 0x49, 0x90, 0x2a, 0x7a,
- 0x26, 0x3e, 0x4c, 0x91, 0x69, 0xa6, 0x59, 0x55, 0x36, 0xac, 0x7d, 0x20,
- 0xde, 0x24, 0x18, 0xfa, 0x06, 0xd3, 0xd1, 0x08, 0x57, 0x17, 0x3b, 0xba,
- 0x06, 0x21, 0x2d, 0xf2, 0xa8, 0x93, 0x84, 0x92, 0x16, 0x59, 0x3e, 0x32,
- 0x81, 0x0f, 0x9a, 0xb6, 0x1a, 0xc5, 0xec, 0x9a, 0x22, 0x9b, 0x7f, 0xc8,
- 0x98, 0x96, 0xde, 0x62, 0x1a, 0x72, 0xd4, 0xa7, 0xb4, 0x77, 0xcd, 0x28,
- 0x79, 0xda, 0xdb, 0xdf, 0x43, 0x8c, 0xd3, 0x5a, 0x18, 0x04, 0x23, 0x6d,
- 0xa3, 0x9d, 0x22, 0x9b, 0x2a, 0xa0, 0x54, 0xd9, 0x12, 0xda, 0xd9, 0x58,
- 0x74, 0x81, 0x93, 0x14, 0xad, 0x6f, 0x99, 0xd9, 0xaf, 0x19, 0x9e, 0x7c,
- 0x6f, 0x88, 0x97, 0x72, 0x09, 0x55, 0xd5, 0xc6, 0xb2, 0xb7, 0x13, 0x24,
- 0xac, 0xfb, 0xbd, 0xbc, 0xdf, 0xdb, 0x7d, 0xb4, 0x1e, 0x5d, 0x12, 0x0e,
- 0xd5, 0x34, 0xb9, 0xa5, 0x26, 0x82, 0x84, 0x99, 0x47, 0x87, 0x2f, 0xce,
- 0xfa, 0x17, 0xbb, 0x07, 0xe7, 0x67, 0x6f, 0xe0, 0x5f, 0xfc, 0x7d, 0x8f,
- 0x7e, 0xdf, 0xfb, 0xa6, 0xd9, 0x2c, 0xc1, 0xc3, 0x27, 0x91, 0x41, 0x8b,
- 0x20, 0xd9, 0x90, 0xce, 0xbe, 0xe8, 0x98, 0x4e, 0x43, 0xa8, 0xd2, 0x64,
- 0x28, 0x9e, 0x0f, 0x0d, 0x2a, 0x51, 0x93, 0x32, 0x9d, 0xae, 0x34, 0xd8,
- 0x5f, 0x8d, 0x8f, 0x6e, 0xde, 0x42, 0x56, 0xa9, 0x1c, 0x2b, 0xe0, 0x70,
- 0x8a, 0x3d, 0xd7, 0x34, 0x9f, 0x30, 0xca, 0x97, 0x00, 0x44, 0xb0, 0x65,
- 0x07, 0x6e, 0x73, 0x8c, 0x01, 0xaf, 0x7f, 0x35, 0x9c, 0x80, 0x86, 0x95,
- 0x62, 0x24, 0xe6, 0x28, 0x15, 0xae, 0x31, 0xf1, 0x61, 0x8c, 0x49, 0x17,
- 0x63, 0xfc, 0x89, 0x82, 0x71, 0x84, 0x1b, 0x23, 0xa3, 0xa3, 0xa4, 0xde,
- 0x6d, 0x18, 0x4f, 0x42, 0xd0, 0xad, 0x8a, 0x9a, 0xd4, 0x6c, 0x8e, 0x32,
- 0x70, 0x5c, 0xd3, 0xba, 0xe2, 0x60, 0xbf, 0x3e, 0xbb, 0x88, 0x12, 0xb2,
- 0x0a, 0xf1, 0x52, 0x62, 0xea, 0x26, 0x72, 0xe8, 0x6d, 0xb2, 0x6f, 0xc9,
- 0xa9, 0x0f, 0xca, 0x1f, 0xc4, 0x35, 0x2f, 0x4e, 0xfb, 0xdb, 0x68, 0x58,
- 0xe7, 0x60, 0xf7, 0xfe, 0xeb, 0x97, 0xdd, 0x9a, 0xc7, 0xce, 0x0d, 0x1c,
- 0xdd, 0x42, 0x05, 0x54, 0x8a, 0x64, 0x34, 0xd7, 0xce, 0xb9, 0x55, 0x0d,
- 0x1e, 0x76, 0x2f, 0xea, 0xd0, 0x86, 0x76, 0x18, 0x8b, 0xa4, 0x43, 0xfb,
- 0xda, 0x61, 0x60, 0x0a, 0xd2, 0x4f, 0x69, 0xbc, 0x08, 0x72, 0x7f, 0xe7,
- 0x63, 0x3e, 0x91, 0xb9, 0x0e, 0x31, 0x43, 0xf1, 0x82, 0xe8, 0xa0, 0x72,
- 0x88, 0x13, 0xa3, 0x49, 0x75, 0xa4, 0xe1, 0x3d, 0x6e, 0x98, 0xda, 0x85,
- 0xdf, 0xb1, 0x59, 0x22, 0xda, 0x41, 0x30, 0xec, 0x87, 0xfa, 0xb1, 0x4d,
- 0x9b, 0xb6, 0x61, 0x60, 0xe4, 0x9c, 0xe5, 0xa7, 0x94, 0x38, 0x90, 0x2d,
- 0xc2, 0x74, 0xb3, 0x4b, 0x0c, 0xad, 0xf2, 0xc2, 0x16, 0xcd, 0x40, 0x9a,
- 0x14, 0x7e, 0x04, 0x52, 0x2d, 0x7c, 0xdb, 0x71, 0x2c, 0x3a, 0x95, 0x97,
- 0x28, 0x48, 0xe9, 0x2b, 0x85, 0xaa, 0x91, 0x3a, 0x20, 0x64, 0x9b, 0x55,
- 0x40, 0x83, 0x2a, 0x59, 0xb5, 0x43, 0x09, 0xdd, 0xf8, 0xc1, 0x15, 0xdc,
- 0x41, 0x0f, 0x12, 0x55, 0x33, 0x10, 0x10, 0x68, 0x51, 0xfd, 0xc9, 0x79,
- 0xde, 0x6c, 0x8e, 0xcb, 0xf0, 0xe0, 0xd5, 0x81, 0xf1, 0xf8, 0xe8, 0xfd,
- 0xdf, 0xdd, 0x7b, 0xda, 0xdb, 0x81, 0xff, 0x83, 0x7d, 0x11, 0x6b, 0x11,
- 0xd5, 0xfd, 0xb0, 0xd5, 0x1d, 0xcc, 0x93, 0x0e, 0x06, 0x9d, 0x0b, 0x45,
- 0xd7, 0xcb, 0x8b, 0xcb, 0x4e, 0xf8, 0xba, 0x55, 0xfe, 0xf0, 0x49, 0xaf,
- 0x5c, 0xed, 0xc4, 0xe1, 0x66, 0x07, 0x8f, 0x1e, 0xed, 0x1f, 0xe8, 0xdf,
- 0x70, 0x94, 0x0e, 0xbe, 0x84, 0x0f, 0x3e, 0x04, 0xd7, 0xe7, 0x05, 0x32,
- 0x41, 0x86, 0x0d, 0xa8, 0x87, 0xf3, 0x7e, 0x55, 0x33, 0xc6, 0x37, 0x01,
- 0x17, 0xa2, 0xc3, 0x7c, 0x3c, 0x86, 0x4b, 0xa1, 0x79, 0x41, 0x1f, 0xcb,
- 0x23, 0xdb, 0x6f, 0xa4, 0x44, 0x96, 0x49, 0x7f, 0xae, 0x57, 0x72, 0xa0,
- 0xf0, 0x6e, 0x97, 0x3d, 0x72, 0x73, 0xbd, 0x50, 0x56, 0x65, 0xed, 0x09,
- 0x1b, 0xc5, 0x87, 0xcb, 0x82, 0xbc, 0xb3, 0x09, 0xb8, 0xba, 0x04, 0x1e,
- 0xab, 0x7c, 0x9f, 0xcd, 0xe7, 0xa8, 0x2a, 0x51, 0x59, 0x1c, 0x3c, 0x21,
- 0x26, 0x5a, 0x81, 0x82, 0x66, 0x18, 0xcb, 0x5d, 0x42, 0xfa, 0x09, 0xdb,
- 0x40, 0xa3, 0x1a, 0x06, 0xe9, 0xd8, 0xf7, 0xb9, 0x67, 0x3c, 0x1a, 0x17,
- 0x56, 0x56, 0xe2, 0x9e, 0x46, 0x08, 0x21, 0x3b, 0x4b, 0x84, 0x9b, 0x8d,
- 0x1d, 0xdc, 0x45, 0x81, 0xb9, 0xe9, 0x06, 0x18, 0x8d, 0xc5, 0xfc, 0x30,
- 0x74, 0xd3, 0x7f, 0xf9, 0xdf, 0x27, 0xb6, 0x74, 0x85, 0xa9, 0x0d, 0xc1,
- 0xe9, 0xbd, 0xa1, 0x5c, 0xee, 0xa8, 0x13, 0x1f, 0x47, 0x31, 0xe1, 0x6a,
- 0x3b, 0x31, 0x6d, 0x79, 0xc3, 0xa1, 0x41, 0xf2, 0x3d, 0xdd, 0xfe, 0xa4,
- 0x9e, 0x6e, 0x23, 0xf6, 0x9e, 0x7f, 0x07, 0x49, 0x95, 0x33, 0x5e, 0x6c,
- 0x83, 0x73, 0x81, 0x67, 0xb1, 0x12, 0x14, 0x16, 0x37, 0xd5, 0x96, 0x95,
- 0xf8, 0xed, 0x6c, 0x86, 0xaa, 0x3c, 0x45, 0x91, 0x79, 0x39, 0xa8, 0x8a,
- 0xf8, 0xc4, 0x80, 0xa3, 0x8b, 0x16, 0x78, 0x04, 0x97, 0xca, 0xee, 0xe3,
- 0x91, 0xfc, 0xb0, 0x38, 0xe5, 0x36, 0xe1, 0x04, 0x56, 0xf1, 0xfe, 0xc2,
- 0xc8, 0x71, 0xf4, 0x68, 0x67, 0x67, 0xbd, 0x53, 0x68, 0x11, 0x4d, 0x9c,
- 0x53, 0x36, 0xe4, 0x53, 0x86, 0xd5, 0xe7, 0xe2, 0x5f, 0x93, 0x82, 0xbd,
- 0x08, 0xad, 0x28, 0x74, 0x5b, 0xd6, 0x88, 0x86, 0x69, 0xac, 0xe4, 0xb6,
- 0x26, 0x6a, 0x35, 0x78, 0xb5, 0xba, 0xfb, 0x6c, 0xb1, 0x4b, 0x48, 0xf8,
- 0xa4, 0xd2, 0x76, 0x4d, 0x6e, 0xe7, 0x01, 0xc6, 0x19, 0xd8, 0xa2, 0x1e,
- 0x46, 0x29, 0x98, 0xca, 0x21, 0x94, 0x90, 0x21, 0x6d, 0x28, 0x3a, 0x7a,
- 0xe6, 0x49, 0x1b, 0xd9, 0x2c, 0x66, 0x3c, 0x36, 0x7d, 0x96, 0x82, 0x29,
- 0xb0, 0xf0, 0x90, 0x1c, 0x0f, 0xa6, 0x18, 0xb6, 0x33, 0x54, 0x8a, 0x98,
- 0x41, 0x18, 0x3c, 0xd8, 0x6d, 0x10, 0x9c, 0xbf, 0xc7, 0x85, 0x4d, 0x4c,
- 0xe7, 0xa8, 0xa2, 0xbd, 0x9f, 0xe5, 0x37, 0x33, 0x74, 0x65, 0xb1, 0x37,
- 0xca, 0x54, 0xf0, 0x62, 0x7b, 0x5a, 0x95, 0xce, 0x82, 0x99, 0xf4, 0x7c,
- 0xa0, 0xcd, 0xb3, 0xf2, 0xa8, 0x63, 0xba, 0x7b, 0x9d, 0x56, 0x12, 0x82,
- 0xca, 0x83, 0xd7, 0xec, 0x78, 0x4a, 0xb0, 0x7f, 0x39, 0xf6, 0x11, 0xfa,
- 0x89, 0x02, 0xd5, 0x75, 0xc1, 0x57, 0x0b, 0xc7, 0xf0, 0x70, 0xa9, 0x17,
- 0x34, 0xc5, 0x77, 0xe1, 0x60, 0x76, 0xd4, 0x2f, 0xc0, 0x33, 0x08, 0xb3,
- 0x28, 0x1d, 0x8e, 0xad, 0xc8, 0x12, 0x4e, 0x66, 0x31, 0xa5, 0x16, 0xd9,
- 0x0b, 0xe4, 0x86, 0xc3, 0x11, 0x22, 0x38, 0xc5, 0xaa, 0x9a, 0xde, 0x34,
- 0x70, 0x31, 0x10, 0x14, 0xed, 0x80, 0x26, 0x61, 0x28, 0x6e, 0x31, 0x52,
- 0xd3, 0x8f, 0x0e, 0x14, 0xae, 0x05, 0xb1, 0x9e, 0xdd, 0x24, 0x44, 0x69,
- 0xa6, 0xfd, 0x50, 0xf6, 0xa9, 0x13, 0x29, 0xaf, 0xa4, 0x6c, 0x21, 0x75,
- 0x43, 0x7e, 0xd0, 0xd4, 0x10, 0x49, 0x84, 0x24, 0xef, 0xd4, 0xc1, 0x11,
- 0x08, 0x25, 0x82, 0xaa, 0x35, 0xab, 0xc2, 0x6b, 0x78, 0x73, 0x95, 0x7b,
- 0xc6, 0x7d, 0x2e, 0x1b, 0x59, 0x87, 0xdb, 0xc2, 0x96, 0x30, 0x25, 0x88,
- 0x1c, 0x1e, 0xd7, 0x94, 0x6d, 0xc4, 0xa2, 0x23, 0xca, 0x12, 0xe4, 0x1c,
- 0x85, 0xf7, 0x26, 0x69, 0x42, 0x99, 0xdf, 0x21, 0xf0, 0x32, 0x98, 0x04,
- 0x70, 0x9d, 0x41, 0x5e, 0x1a, 0x92, 0x41, 0xe8, 0xa8, 0x04, 0x96, 0xa2,
- 0xa0, 0xcb, 0x42, 0x60, 0xb3, 0xb5, 0x14, 0x9e, 0x22, 0xfa, 0xf8, 0xcc,
- 0x9d, 0x24, 0xe2, 0xeb, 0x0c, 0x81, 0xe0, 0x80, 0x4e, 0x40, 0xf6, 0x41,
- 0x3f, 0x01, 0x11, 0x0f, 0x35, 0xc8, 0x80, 0xd8, 0x57, 0x54, 0xeb, 0x51,
- 0xd0, 0xe2, 0xe0, 0x20, 0x5e, 0x61, 0x2c, 0x7d, 0x99, 0x55, 0x8b, 0xe0,
- 0x99, 0x68, 0x8b, 0xf4, 0xb1, 0xfc, 0xa3, 0xae, 0xdc, 0xad, 0x0c, 0xe9,
- 0xf8, 0x88, 0xec, 0x73, 0xc8, 0xf1, 0x53, 0x31, 0x19, 0x73, 0xdb, 0x2c,
- 0x06, 0xf7, 0x7b, 0x33, 0x1e, 0x90, 0xcd, 0x3f, 0xe6, 0xb2, 0xa9, 0x6b,
- 0x31, 0xd9, 0x81, 0xe5, 0xa7, 0x0e, 0x97, 0x75, 0x3e, 0x8d, 0x0e, 0x91,
- 0x73, 0xfc, 0xcf, 0x0a, 0x36, 0x7b, 0x9e, 0x88, 0xe7, 0xdf, 0x05, 0xbd,
- 0x26, 0x00, 0x1a, 0xb9, 0xae, 0x15, 0x49, 0x81, 0xdb, 0x54, 0x69, 0xea,
- 0x65, 0x28, 0xff, 0x80, 0x3c, 0xf9, 0xb0, 0xa0, 0x93, 0x3b, 0xdb, 0xa2,
- 0x83, 0x10, 0x63, 0xca, 0x32, 0xd9, 0x22, 0x56, 0xa6, 0x8b, 0xa6, 0xd9,
- 0xb6, 0xd3, 0x07, 0x55, 0x8a, 0xfb, 0xc4, 0x58, 0x7f, 0x5b, 0xcc, 0x30,
- 0x12, 0x7e, 0x28, 0x18, 0x00, 0xcc, 0x12, 0xc9, 0xc9, 0x29, 0x8a, 0x00,
- 0x33, 0xb3, 0x66, 0x73, 0x58, 0x43, 0x77, 0xf7, 0xeb, 0xbf, 0x1d, 0x9d,
- 0xbe, 0x3d, 0xd9, 0xfd, 0x53, 0x14, 0xe1, 0x9f, 0x7b, 0xfc, 0xe7, 0x5e,
- 0x47, 0x95, 0x4f, 0x61, 0x17, 0xbc, 0x57, 0x06, 0x14, 0x80, 0xc6, 0x10,
- 0x44, 0x41, 0x54, 0x34, 0x1e, 0x52, 0x0d, 0xb8, 0x1c, 0x92, 0x2d, 0x5e,
- 0x44, 0x93, 0x02, 0x1a, 0x33, 0x68, 0x56, 0x2a, 0xf4, 0x6f, 0x96, 0x5b,
- 0x21, 0xeb, 0x85, 0x4d, 0xa1, 0x53, 0x35, 0x97, 0xa3, 0x2d, 0x08, 0xb7,
- 0x71, 0xb4, 0x48, 0x45, 0xd0, 0x71, 0x30, 0x73, 0xba, 0x62, 0x55, 0xf6,
- 0xfc, 0xa5, 0x8a, 0xa6, 0x5e, 0x3a, 0xc0, 0xe9, 0x74, 0x24, 0xee, 0x84,
- 0x87, 0xc2, 0x7f, 0x97, 0x69, 0xa5, 0x23, 0xa7, 0x7d, 0xc5, 0x94, 0x08,
- 0x72, 0x63, 0x87, 0x0e, 0x1e, 0x5c, 0x42, 0x1b, 0x5f, 0x6f, 0x44, 0xe5,
- 0xdd, 0x74, 0x90, 0x4f, 0x4c, 0x44, 0x87, 0x10, 0x86, 0x4d, 0xe3, 0xe0,
- 0xbc, 0x07, 0x83, 0xe1, 0x28, 0x4e, 0x37, 0x3f, 0x59, 0x22, 0xb1, 0x1e,
- 0x31, 0x8d, 0x10, 0x70, 0x71, 0x84, 0x2a, 0xc2, 0x8e, 0xd3, 0xfb, 0x89,
- 0x22, 0x05, 0x2e, 0x5a, 0x13, 0x1c, 0xe8, 0x2c, 0x28, 0xd3, 0x2e, 0x03,
- 0xb7, 0x02, 0x8b, 0x0e, 0x34, 0x6f, 0xd7, 0xcf, 0x46, 0x97, 0x41, 0x16,
- 0x88, 0x37, 0xa1, 0x72, 0x22, 0xa6, 0x48, 0x2e, 0xbf, 0x2d, 0x19, 0x03,
- 0x88, 0xcd, 0x7a, 0xa7, 0xa8, 0x8e, 0xb8, 0x37, 0x7a, 0xad, 0xd2, 0xac,
- 0xf1, 0xdd, 0x66, 0x73, 0x03, 0x91, 0x93, 0x5d, 0x28, 0x76, 0xb5, 0xb7,
- 0x1a, 0x10, 0x96, 0xa2, 0x56, 0xb6, 0x8d, 0xbc, 0x38, 0x5a, 0x4d, 0xc4,
- 0xe3, 0xb3, 0x1a, 0xb8, 0x4a, 0x50, 0x5d, 0xe4, 0x1b, 0xe9, 0x59, 0x27,
- 0xea, 0xc4, 0x62, 0x78, 0x91, 0xfa, 0x40, 0x11, 0xa4, 0x30, 0x1f, 0xd0,
- 0x4f, 0x36, 0xe1, 0x86, 0xf6, 0x1c, 0xd0, 0x36, 0xa8, 0x46, 0xf7, 0x4c,
- 0xfd, 0x8f, 0xb6, 0x24, 0xc8, 0x12, 0xaf, 0xa3, 0x81, 0xfe, 0x91, 0xac,
- 0xaa, 0xdc, 0x19, 0x87, 0x89, 0xfc, 0x10, 0x79, 0x80, 0x9b, 0xe1, 0x23,
- 0x8b, 0x49, 0xfd, 0x13, 0x07, 0xbb, 0x5b, 0xad, 0x42, 0xc8, 0x73, 0x14,
- 0xe4, 0x0d, 0x23, 0xd7, 0x0c, 0x03, 0x80, 0xfe, 0xef, 0x26, 0xe9, 0x96,
- 0x2a, 0xba, 0x2a, 0xc2, 0x6c, 0xbf, 0xca, 0x7f, 0x83, 0xc1, 0x27, 0xe1,
- 0x23, 0xea, 0x0a, 0x36, 0xad, 0x23, 0xb7, 0xda, 0xbe, 0x44, 0xdd, 0x08,
- 0xed, 0xd4, 0xac, 0x3c, 0x54, 0xe9, 0x96, 0x6a, 0x98, 0xbd, 0x66, 0x11,
- 0xcd, 0xcb, 0x66, 0x40, 0xa6, 0xe1, 0xc9, 0x67, 0x8e, 0x95, 0x8c, 0x4c,
- 0xcb, 0xd1, 0x45, 0x2e, 0x71, 0xb7, 0x86, 0xba, 0x84, 0xc7, 0x04, 0x74,
- 0x70, 0x73, 0xcb, 0xb5, 0x8b, 0x17, 0x2e, 0x96, 0xb9, 0xb3, 0x56, 0xee,
- 0x8e, 0x70, 0x3d, 0x18, 0x27, 0x49, 0x8d, 0xb3, 0x2e, 0x46, 0x5e, 0xe2,
- 0x1d, 0xa1, 0x83, 0x1b, 0xfc, 0x16, 0x47, 0x6a, 0xd1, 0x10, 0x6f, 0xe4,
- 0x6d, 0x0c, 0x51, 0x4a, 0x8c, 0x9d, 0xe1, 0xc4, 0x59, 0x0a, 0x49, 0xfd,
- 0xba, 0x3c, 0x64, 0xf5, 0xa0, 0x09, 0x27, 0xa3, 0x91, 0x84, 0x96, 0x11,
- 0xf6, 0x12, 0x89, 0x17, 0xf2, 0x36, 0x46, 0x20, 0xda, 0x61, 0x8b, 0xa8,
- 0xb7, 0x49, 0xc0, 0xb4, 0x9e, 0x19, 0x28, 0xa9, 0x74, 0x81, 0x19, 0x2e,
- 0x12, 0xcd, 0x1b, 0x83, 0x98, 0x1b, 0x2a, 0x89, 0x30, 0xd8, 0x2b, 0x81,
- 0x05, 0x51, 0x0f, 0xcc, 0xaa, 0x28, 0xa1, 0xf8, 0x90, 0x24, 0x21, 0xa2,
- 0xc0, 0x48, 0xe5, 0x92, 0x2b, 0x65, 0x6a, 0xf5, 0xca, 0x68, 0x90, 0x53,
- 0xde, 0x4f, 0x93, 0x90, 0x13, 0xeb, 0x46, 0x94, 0x42, 0x6c, 0x7e, 0x08,
- 0xfc, 0x88, 0x8b, 0x55, 0x1b, 0x7d, 0x82, 0x44, 0xa2, 0x46, 0x11, 0x0c,
- 0x2c, 0x34, 0x22, 0x85, 0x30, 0xa8, 0x27, 0x43, 0x7f, 0x21, 0x28, 0x5a,
- 0x87, 0x28, 0x5c, 0x4f, 0x51, 0xad, 0x8e, 0x17, 0x1b, 0xa9, 0xa6, 0x01,
- 0x82, 0x31, 0x4d, 0x7f, 0xb8, 0x51, 0xa7, 0x4d, 0x2c, 0x1a, 0xc8, 0x64,
- 0x5b, 0x23, 0x9f, 0x57, 0xbf, 0x05, 0x02, 0xd2, 0x8a, 0x36, 0x5a, 0xc5,
- 0xa1, 0xa6, 0x7a, 0x49, 0x06, 0xa0, 0x5f, 0xf1, 0xc3, 0x5f, 0x17, 0xb3,
- 0xf7, 0xb1, 0x94, 0x10, 0x8a, 0x55, 0xee, 0x77, 0x2d, 0xe2, 0x74, 0x4f,
- 0xc5, 0x70, 0x67, 0x96, 0x21, 0x57, 0xb4, 0xde, 0x75, 0xc0, 0x12, 0x7f,
- 0x55, 0xbc, 0x45, 0xc3, 0xce, 0x6d, 0x8d, 0x12, 0x13, 0x0e, 0xe1, 0xd4,
- 0x7d, 0x6d, 0xf2, 0x5b, 0xea, 0x48, 0x4e, 0xd8, 0x2c, 0x45, 0xf0, 0x8f,
- 0x84, 0x4a, 0x96, 0xa1, 0x65, 0xcf, 0x41, 0x82, 0xc8, 0x60, 0x53, 0x8a,
- 0xe1, 0x15, 0x81, 0x5a, 0xa1, 0x25, 0x31, 0x1d, 0xf1, 0x0d, 0xd8, 0xbc,
- 0x0d, 0xf8, 0xfe, 0xe0, 0x56, 0x45, 0x86, 0x93, 0x46, 0x90, 0xe2, 0xf0,
- 0x4e, 0x86, 0xef, 0x95, 0xb7, 0x79, 0xa3, 0x0d, 0x49, 0xdd, 0x14, 0x3a,
- 0x79, 0x45, 0x71, 0x43, 0x93, 0xd2, 0x5e, 0x2d, 0xe6, 0x35, 0x7b, 0xc7,
- 0x90, 0x81, 0x64, 0xe6, 0x54, 0x5e, 0x6b, 0x5e, 0x2e, 0xe8, 0xfb, 0x1e,
- 0x7b, 0x83, 0x02, 0x11, 0x41, 0xc6, 0x85, 0xfa, 0x36, 0x9e, 0xac, 0x3b,
- 0xc5, 0x97, 0xc5, 0x78, 0x5f, 0xe7, 0xd1, 0x16, 0x79, 0x5d, 0xa1, 0x67,
- 0x9b, 0x84, 0x70, 0x2c, 0xfa, 0x14, 0xee, 0x22, 0xdd, 0xcd, 0x53, 0xb8,
- 0x47, 0x78, 0xe6, 0x53, 0x34, 0xf7, 0xef, 0x3c, 0x7d, 0xbc, 0x83, 0xf7,
- 0x27, 0x82, 0xe5, 0xf3, 0x7d, 0x22, 0x37, 0x00, 0xa5, 0x80, 0x78, 0xfe,
- 0x24, 0x60, 0x5d, 0xba, 0x5d, 0x82, 0x91, 0xeb, 0xce, 0xe2, 0xc6, 0x96,
- 0x73, 0x46, 0xbb, 0x16, 0xc2, 0x07, 0xc1, 0xcf, 0x2e, 0xd5, 0xe0, 0x8d,
- 0xe3, 0x71, 0xe5, 0xad, 0xad, 0x43, 0x62, 0xcb, 0x83, 0x49, 0xed, 0x73,
- 0x9f, 0x02, 0x53, 0x61, 0xc9, 0x28, 0x56, 0x19, 0x6c, 0x9d, 0x81, 0x19,
- 0x6a, 0x30, 0x10, 0x26, 0xdb, 0x0f, 0x48, 0x76, 0xc0, 0x55, 0x72, 0x5b,
- 0xe5, 0x5c, 0x07, 0x6e, 0x19, 0x3f, 0x09, 0x9c, 0x50, 0xec, 0x25, 0xa6,
- 0xdd, 0x3c, 0xc4, 0x7f, 0x3d, 0x85, 0x86, 0x80, 0x85, 0x31, 0xe0, 0x1d,
- 0x23, 0x06, 0xb6, 0xea, 0x81, 0x24, 0xea, 0xaf, 0x91, 0x4d, 0xe5, 0x4c,
- 0x50, 0x2d, 0x7a, 0x19, 0x04, 0xb2, 0x71, 0xa2, 0xab, 0x6d, 0x84, 0xb2,
- 0x53, 0x33, 0xb4, 0xe6, 0xa4, 0x44, 0x39, 0x9c, 0x8f, 0x20, 0x27, 0xab,
- 0xf9, 0x06, 0x47, 0xbc, 0xfb, 0x58, 0x9a, 0xdc, 0xc0, 0xc1, 0x53, 0xe0,
- 0x17, 0x41, 0x66, 0xda, 0xc0, 0x50, 0xb4, 0x17, 0x31, 0x0a, 0x2e, 0x7e,
- 0x08, 0x9b, 0xde, 0x75, 0x20, 0x9c, 0x03, 0xae, 0x11, 0x8d, 0x3f, 0xd9,
- 0x79, 0xf2, 0xe8, 0x51, 0xd8, 0x92, 0xa2, 0x78, 0x9c, 0xa4, 0xd7, 0x60,
- 0x80, 0xe8, 0xb0, 0x02, 0x56, 0x23, 0x46, 0x65, 0x94, 0xc4, 0x45, 0x76,
- 0x6f, 0x31, 0x56, 0x36, 0x97, 0xfd, 0xfe, 0xd8, 0x0a, 0x0f, 0xf6, 0xa7,
- 0xae, 0x20, 0x40, 0x3b, 0x96, 0x9d, 0xa7, 0x4f, 0x9f, 0x46, 0xf1, 0x05,
- 0x13, 0x21, 0x1f, 0x65, 0x3f, 0x4e, 0x7f, 0x96, 0xde, 0xdc, 0x9f, 0x04,
- 0x97, 0x02, 0xb8, 0x0e, 0x8b, 0xc9, 0x98, 0xb1, 0xba, 0xa9, 0x38, 0x1e,
- 0x57, 0x5d, 0xb9, 0x26, 0x48, 0xb0, 0xd3, 0xe7, 0x7c, 0xaf, 0x1f, 0xbf,
- 0xc1, 0xdf, 0x32, 0x03, 0xa3, 0x4e, 0x98, 0x4c, 0xe9, 0x78, 0x31, 0xe1,
- 0x54, 0xb2, 0x57, 0x7f, 0x6b, 0xe2, 0xdc, 0x6c, 0x9e, 0xf5, 0xb7, 0xf7,
- 0xbf, 0xda, 0xd9, 0x0a, 0x24, 0xf7, 0x61, 0xfd, 0xbd, 0xc4, 0x71, 0x58,
- 0xec, 0x04, 0x02, 0x76, 0xea, 0x8c, 0x03, 0x86, 0x77, 0xdf, 0xf8, 0x73,
- 0xe1, 0x0f, 0x4d, 0x4d, 0xca, 0xe3, 0x16, 0x93, 0xf1, 0xfa, 0xbb, 0x04,
- 0xc3, 0x80, 0x4d, 0x61, 0x21, 0x74, 0x8d, 0xb4, 0x89, 0xef, 0x04, 0x95,
- 0x35, 0x4e, 0xca, 0x61, 0x96, 0x35, 0x17, 0x1e, 0x5b, 0x5b, 0x02, 0x6b,
- 0xaa, 0x45, 0xe3, 0x45, 0x2c, 0x63, 0xc6, 0xec, 0xc0, 0x3d, 0x48, 0x2e,
- 0xa5, 0x0b, 0x4c, 0xf4, 0x26, 0xc5, 0x22, 0xd3, 0x41, 0xd4, 0xc4, 0xd3,
- 0xac, 0x14, 0x5b, 0x17, 0xaa, 0x7d, 0x2a, 0x37, 0x23, 0x46, 0x59, 0x3d,
- 0x4f, 0x90, 0x1e, 0x49, 0xb8, 0xa4, 0xf2, 0x20, 0x0d, 0x85, 0x4c, 0x94,
- 0x88, 0x8e, 0x4d, 0x69, 0x1b, 0x14, 0xc4, 0xd6, 0x66, 0xd2, 0x92, 0x09,
- 0x7e, 0x2e, 0x3c, 0x2a, 0xe9, 0xbe, 0x48, 0x7f, 0x45, 0x93, 0xc1, 0x83,
- 0xa0, 0xe5, 0x1c, 0xa8, 0x08, 0x86, 0xb7, 0xaa, 0x6d, 0xe0, 0xa2, 0xc0,
- 0x02, 0xe3, 0x87, 0x26, 0x45, 0x85, 0xd2, 0xbe, 0xee, 0x83, 0x2f, 0xa7,
- 0x5e, 0x52, 0xeb, 0xc0, 0xe7, 0xa6, 0xaa, 0x5c, 0xf2, 0x72, 0xb5, 0x56,
- 0x62, 0xbf, 0x7f, 0xea, 0x71, 0x5b, 0x49, 0x66, 0x35, 0xfe, 0x79, 0x82,
- 0x25, 0x48, 0x86, 0xa8, 0xf7, 0x93, 0xd2, 0x9e, 0x47, 0x98, 0xb1, 0xfe,
- 0xe5, 0xa3, 0xbd, 0xbd, 0x6e, 0xf4, 0xb8, 0xb7, 0xeb, 0xe2, 0xcf, 0x25,
- 0x13, 0x0f, 0x6e, 0x58, 0x92, 0x6b, 0x3c, 0x50, 0x3a, 0x74, 0x57, 0x39,
- 0xb0, 0x74, 0x82, 0x44, 0x27, 0x91, 0xdf, 0x84, 0x52, 0x11, 0xc2, 0x9d,
- 0xea, 0xfc, 0xb8, 0xf7, 0xf8, 0xf1, 0xee, 0x57, 0x07, 0xe7, 0xf1, 0xe3,
- 0xbd, 0x5d, 0x04, 0xa5, 0x63, 0x95, 0xd4, 0xc6, 0x82, 0xd7, 0xe0, 0x0b,
- 0xb2, 0x11, 0xdb, 0x7c, 0x26, 0x13, 0x4d, 0x8d, 0x6e, 0x36, 0x97, 0xcf,
- 0xd3, 0x59, 0x59, 0x4e, 0xa2, 0xf2, 0x1d, 0x23, 0x7d, 0x6c, 0x97, 0xef,
- 0xd8, 0xb2, 0xd6, 0x11, 0x1c, 0xb9, 0x2c, 0x80, 0x09, 0x64, 0x76, 0x46,
- 0x2e, 0xaf, 0xc4, 0x20, 0x03, 0x08, 0x4e, 0x9c, 0xd9, 0x07, 0x36, 0x9c,
- 0x34, 0xb1, 0xe1, 0x82, 0x41, 0xfa, 0x6a, 0x77, 0xe0, 0xeb, 0x60, 0xf3,
- 0xe4, 0x78, 0x8b, 0x37, 0x4d, 0xf7, 0xd2, 0xa2, 0x45, 0xf0, 0x48, 0xbb,
- 0x9c, 0xf8, 0xec, 0xdf, 0xbe, 0xb3, 0x7c, 0x46, 0x56, 0x10, 0x74, 0xb8,
- 0xa3, 0xb3, 0x47, 0xe6, 0xc5, 0xf6, 0x42, 0x85, 0x7c, 0xae, 0xd7, 0x2c,
- 0x6e, 0xc5, 0x08, 0xb3, 0xa8, 0x9f, 0x6e, 0xcc, 0x26, 0x4f, 0x5e, 0x8a,
- 0x75, 0x71, 0x06, 0x3c, 0x55, 0x79, 0xf7, 0xa4, 0x6c, 0x5e, 0x5b, 0x0f,
- 0x5b, 0x2e, 0x7c, 0x98, 0xa5, 0xd5, 0xcf, 0x75, 0x98, 0xb9, 0x7b, 0x26,
- 0xaf, 0x75, 0x8f, 0xb1, 0x66, 0x6e, 0x36, 0x02, 0x45, 0xdd, 0xb3, 0x8c,
- 0xa6, 0x57, 0x66, 0xd1, 0x6c, 0x5c, 0x6e, 0xb1, 0x29, 0x6b, 0x4a, 0x16,
- 0x55, 0x34, 0x22, 0x18, 0xc2, 0x2c, 0xe1, 0x38, 0xc7, 0x78, 0xa4, 0xf5,
- 0xf1, 0x02, 0xf4, 0xe8, 0xb4, 0xfe, 0xe9, 0x42, 0x0f, 0x9c, 0x4e, 0xbe,
- 0x7d, 0x80, 0xd8, 0x4a, 0xaf, 0xa3, 0x59, 0x0f, 0x53, 0xfe, 0xe5, 0xcf,
- 0x22, 0xb9, 0xd1, 0xba, 0x1f, 0xf8, 0x27, 0xf4, 0xc3, 0xd0, 0x03, 0xde,
- 0xca, 0xf1, 0x7b, 0xab, 0x97, 0x0e, 0xab, 0x43, 0x4b, 0x9d, 0x52, 0x63,
- 0xc8, 0x2b, 0x9b, 0xc6, 0x2a, 0x47, 0x13, 0x08, 0xa0, 0xff, 0x4b, 0xc5,
- 0x77, 0x82, 0x1d, 0x2b, 0x73, 0x5c, 0xc1, 0x76, 0xa4, 0x13, 0xae, 0xfa,
- 0x68, 0x4d, 0xf6, 0x46, 0x5f, 0x94, 0x84, 0x8e, 0x6f, 0xbb, 0x8a, 0x89,
- 0x57, 0x39, 0x36, 0xbc, 0x24, 0x60, 0x70, 0x23, 0xa8, 0x02, 0x0a, 0xcf,
- 0x8d, 0x64, 0x1a, 0x0a, 0xe8, 0xa1, 0xf1, 0xfc, 0x53, 0x04, 0x2d, 0x20,
- 0xd9, 0x53, 0xca, 0x24, 0x62, 0x2c, 0x54, 0x37, 0xf2, 0x83, 0x54, 0x30,
- 0xea, 0x4f, 0x4d, 0x3f, 0x20, 0xc6, 0xe1, 0x4e, 0xb3, 0x92, 0x30, 0x4c,
- 0x8a, 0x22, 0x43, 0x7f, 0x6b, 0x91, 0x56, 0x8b, 0x42, 0x92, 0xd7, 0x31,
- 0x69, 0x0d, 0x79, 0x03, 0x3b, 0xf8, 0x02, 0x77, 0xb1, 0x09, 0x4a, 0xa5,
- 0x0c, 0x46, 0x42, 0x2f, 0x43, 0xcb, 0xba, 0xb7, 0x28, 0xa7, 0x58, 0xf6,
- 0x50, 0x86, 0x56, 0xc3, 0x99, 0x64, 0x83, 0x28, 0xe3, 0x73, 0x70, 0x29,
- 0x9e, 0xbc, 0x86, 0x8e, 0x48, 0x59, 0x2a, 0x21, 0xac, 0x4e, 0xb6, 0xf6,
- 0x6e, 0xdf, 0xc6, 0x37, 0x37, 0x37, 0x31, 0x4a, 0x24, 0x96, 0x40, 0x46,
- 0xbd, 0xc8, 0x03, 0xa0, 0x30, 0x1e, 0x8e, 0x2a, 0x14, 0x10, 0xe5, 0xe4,
- 0xb1, 0x14, 0x83, 0xac, 0x22, 0x08, 0x20, 0xa1, 0x2a, 0x7a, 0x49, 0x98,
- 0xab, 0x0c, 0x8a, 0x0c, 0x7a, 0xea, 0xbf, 0x0d, 0x2c, 0x8a, 0x9d, 0x11,
- 0xc1, 0xfa, 0x0f, 0xab, 0x14, 0x81, 0xf3, 0xb0, 0xa6, 0xf6, 0x41, 0x14,
- 0xbf, 0x88, 0x3a, 0xc7, 0x32, 0xe9, 0x0b, 0x78, 0xe4, 0xc0, 0x8d, 0x15,
- 0xdb, 0xe6, 0x67, 0x83, 0xe5, 0xb8, 0x3b, 0xf7, 0xe0, 0xc8, 0xa1, 0x2a,
- 0x65, 0x02, 0xbb, 0x35, 0x23, 0xe7, 0xbb, 0x85, 0x2a, 0x08, 0x65, 0xc3,
- 0x60, 0xb6, 0x10, 0x7b, 0x32, 0xb8, 0xda, 0x0a, 0x4d, 0x3d, 0xc1, 0x18,
- 0x51, 0x0d, 0xb3, 0x06, 0x9a, 0x5b, 0xcd, 0x6a, 0x64, 0xe1, 0x3e, 0x31,
- 0xaf, 0x91, 0x5e, 0xbe, 0x35, 0x3e, 0x8f, 0x07, 0x30, 0x1c, 0x4f, 0x2a,
- 0x36, 0x7c, 0x67, 0x19, 0x2f, 0xf1, 0x98, 0x49, 0xa9, 0x18, 0x57, 0x9c,
- 0x88, 0xc4, 0x14, 0xb3, 0xa8, 0x6a, 0xe9, 0x7f, 0xc0, 0x65, 0xbc, 0xa3,
- 0x88, 0xe9, 0x80, 0x06, 0x47, 0x27, 0x71, 0x31, 0xbc, 0xbe, 0x5d, 0x02,
- 0x65, 0xe5, 0x8c, 0xf2, 0xd3, 0x19, 0x1d, 0x6d, 0x1f, 0x1d, 0x2c, 0x25,
- 0x9c, 0x77, 0xd6, 0x88, 0xb2, 0xb5, 0xaf, 0x7e, 0x9b, 0x54, 0xf8, 0xff,
- 0x6b, 0x96, 0x01, 0xb1, 0x04, 0x56, 0x0b, 0x2e, 0x0b, 0xdd, 0x99, 0xe6,
- 0xc8, 0xaf, 0xc3, 0xfc, 0xbb, 0x86, 0x6b, 0x0a, 0xaf, 0xe1, 0x48, 0x05,
- 0xd9, 0x38, 0xad, 0x94, 0x1a, 0x40, 0x99, 0xa1, 0xa0, 0x93, 0x5b, 0xe4,
- 0xa0, 0x5a, 0x8d, 0x43, 0xdc, 0xef, 0x69, 0x81, 0x0c, 0x88, 0x30, 0x16,
- 0x18, 0x1e, 0x27, 0x54, 0xbc, 0x0f, 0x6d, 0x5f, 0xe8, 0xc7, 0x38, 0xfe,
- 0xfe, 0x25, 0xe5, 0x03, 0xc3, 0xe5, 0x3d, 0x53, 0xf9, 0x89, 0x47, 0x8f,
- 0x92, 0xaa, 0x73, 0x15, 0x5c, 0x66, 0x16, 0xaf, 0x26, 0x99, 0xfa, 0xe6,
- 0x76, 0x76, 0x52, 0x32, 0xf8, 0x8c, 0x49, 0x00, 0xe5, 0x54, 0x74, 0xe3,
- 0x38, 0x55, 0x19, 0x3f, 0xb1, 0xf8, 0x13, 0xe1, 0xa5, 0xa2, 0xae, 0x55,
- 0x0c, 0x67, 0xa7, 0x25, 0x9a, 0x75, 0xd8, 0x65, 0xdb, 0xc8, 0x8a, 0xb7,
- 0x6c, 0xa4, 0xbc, 0x9b, 0x55, 0xc9, 0x6d, 0xea, 0x27, 0x8e, 0x49, 0xff,
- 0x4d, 0x0a, 0x71, 0xa3, 0x51, 0x1a, 0xbe, 0x43, 0xb3, 0x76, 0xa9, 0xeb,
- 0x29, 0x63, 0x64, 0x21, 0xf6, 0xa5, 0x27, 0x2d, 0xcd, 0xe1, 0xc4, 0xfe,
- 0x2c, 0x99, 0xc3, 0x70, 0x8b, 0x91, 0x69, 0x40, 0x31, 0xe3, 0xdc, 0xa6,
- 0x4c, 0x91, 0x6a, 0x4d, 0x30, 0x0d, 0x37, 0x47, 0x05, 0x7f, 0xbf, 0xe6,
- 0xec, 0xd2, 0x6f, 0x23, 0xf1, 0xce, 0x62, 0x8e, 0xbf, 0x1b, 0x26, 0x48,
- 0x57, 0x00, 0x0d, 0x9e, 0x21, 0x95, 0x70, 0x19, 0xc2, 0xcd, 0x71, 0xa8,
- 0xaa, 0xb3, 0x7a, 0x4c, 0x6d, 0xc3, 0x04, 0x2d, 0xbd, 0x83, 0x14, 0x16,
- 0xf2, 0xbf, 0x9a, 0x8b, 0xf7, 0xf5, 0xea, 0xd5, 0x5b, 0x73, 0xf1, 0x56,
- 0xac, 0x1e, 0xd7, 0xa6, 0xd7, 0xcc, 0xd3, 0xaf, 0x1d, 0x8f, 0x34, 0xa5,
- 0x1a, 0xb0, 0x6f, 0xc8, 0x78, 0xa6, 0x83, 0xbc, 0x1f, 0x29, 0xf4, 0xeb,
- 0x8f, 0xb6, 0xeb, 0x44, 0x8d, 0x3a, 0xfa, 0x70, 0x73, 0x1c, 0x10, 0x38,
- 0xab, 0xc3, 0x3c, 0x6a, 0x5d, 0xd4, 0x84, 0x81, 0x6b, 0xd2, 0x5b, 0x20,
- 0xff, 0x8a, 0x49, 0x99, 0xce, 0x1e, 0x76, 0x17, 0x6e, 0x4e, 0x51, 0xad,
- 0xc4, 0x7a, 0xee, 0xcd, 0xcf, 0xdc, 0x33, 0x2b, 0x27, 0x27, 0x6a, 0x1d,
- 0x4d, 0x8f, 0xca, 0xf9, 0x71, 0xd9, 0x6a, 0x8d, 0xcd, 0x70, 0xe2, 0xd8,
- 0x36, 0x7d, 0x47, 0xb9, 0x1e, 0x1f, 0xa9, 0xdd, 0x86, 0xb4, 0xa8, 0x52,
- 0xda, 0x56, 0xb7, 0xbe, 0x5a, 0x58, 0x37, 0x85, 0x2e, 0x68, 0x8c, 0xe8,
- 0xe2, 0x5d, 0xce, 0x5a, 0xf7, 0x58, 0xf7, 0x0e, 0x6b, 0xce, 0x07, 0xf7,
- 0xee, 0x7f, 0xfb, 0xfc, 0x6c, 0x3e, 0x3e, 0x4d, 0x51, 0x62, 0x5a, 0x2c,
- 0x35, 0x5c, 0x52, 0xa1, 0xa4, 0x19, 0xa7, 0xb0, 0x53, 0xee, 0x7f, 0x40,
- 0xac, 0x54, 0x5e, 0x48, 0x85, 0x10, 0xba, 0x14, 0xcc, 0x3a, 0xe1, 0xda,
- 0x7e, 0x33, 0xa1, 0x70, 0x2b, 0x63, 0xb2, 0xcd, 0xd4, 0xe0, 0x7a, 0x10,
- 0x19, 0x2e, 0xa1, 0x54, 0x43, 0x9b, 0x0d, 0xb2, 0x1c, 0xa4, 0xce, 0xac,
- 0x03, 0xe4, 0xe7, 0x5d, 0x74, 0x0f, 0xb9, 0xf3, 0xfd, 0xcb, 0xde, 0xbd,
- 0xaa, 0x6d, 0xdb, 0x34, 0x45, 0xd0, 0x9d, 0x97, 0x5e, 0xf6, 0xe1, 0x57,
- 0xbf, 0xe6, 0x9f, 0x74, 0x1f, 0xae, 0xff, 0xb6, 0xa1, 0xc0, 0x07, 0xbc,
- 0x4b, 0xef, 0x51, 0x58, 0xc1, 0x32, 0x29, 0x23, 0x20, 0x5e, 0xb8, 0xca,
- 0x25, 0x88, 0x2b, 0xce, 0x9a, 0xdb, 0x47, 0xda, 0xc5, 0x8a, 0x28, 0x7a,
- 0xf5, 0xd7, 0x8b, 0x0b, 0x8c, 0xa7, 0x25, 0xc8, 0x95, 0x06, 0xce, 0x2f,
- 0xbd, 0xcc, 0x90, 0x8b, 0x40, 0x8e, 0xc6, 0xe4, 0x16, 0xac, 0x2d, 0xe9,
- 0x44, 0x85, 0x75, 0x6b, 0x3e, 0x68, 0x8a, 0x9d, 0x24, 0x73, 0x68, 0x34,
- 0x28, 0xf2, 0x9b, 0x92, 0x94, 0x2b, 0xf5, 0x93, 0x25, 0xec, 0x11, 0xb9,
- 0xf2, 0x70, 0x11, 0x61, 0x39, 0x26, 0x5c, 0xf4, 0x15, 0xe9, 0xfd, 0xc5,
- 0xc5, 0xab, 0x53, 0x32, 0xd8, 0x0a, 0x46, 0x1f, 0x82, 0x90, 0x94, 0xe2,
- 0x7d, 0x19, 0x4c, 0xb3, 0x0a, 0x05, 0xd5, 0x8a, 0xef, 0x00, 0xb9, 0x56,
- 0x3c, 0x1c, 0x41, 0x8a, 0xeb, 0x14, 0x9b, 0xd5, 0x3c, 0x14, 0xd6, 0x26,
- 0x6a, 0x91, 0x53, 0x6e, 0xc1, 0xd1, 0xea, 0xda, 0x33, 0x63, 0xda, 0x74,
- 0xb7, 0x63, 0xce, 0x07, 0x21, 0x61, 0xfa, 0x39, 0xee, 0x04, 0x3e, 0xb1,
- 0x4c, 0x0c, 0x46, 0xb3, 0xde, 0x84, 0x2a, 0xfa, 0x9a, 0xa5, 0x43, 0xf1,
- 0xdb, 0xdc, 0xf7, 0x54, 0x1b, 0x42, 0x12, 0x96, 0x54, 0xe4, 0xf6, 0x34,
- 0xca, 0x65, 0x22, 0x38, 0xca, 0x6e, 0x28, 0x3f, 0x4a, 0x8c, 0xdc, 0x7c,
- 0x51, 0xa0, 0x77, 0x2b, 0x52, 0x7b, 0x45, 0x20, 0xd7, 0x5f, 0xc3, 0xe8,
- 0x4c, 0xd4, 0x96, 0x0d, 0x70, 0x75, 0xb5, 0x17, 0x09, 0x43, 0xc1, 0xf6,
- 0xeb, 0x37, 0x61, 0xd0, 0xd1, 0x43, 0x10, 0x0e, 0xb4, 0x97, 0x40, 0x63,
- 0xd0, 0x3a, 0x01, 0xea, 0x26, 0x14, 0x4e, 0xb3, 0xc4, 0x48, 0x62, 0xb5,
- 0x45, 0x82, 0x94, 0xa0, 0xd9, 0x95, 0xa9, 0x91, 0x73, 0x55, 0x6d, 0xa4,
- 0x6a, 0x14, 0x54, 0x7f, 0x22, 0xc7, 0x78, 0x94, 0x1a, 0xf0, 0x4a, 0x20,
- 0x04, 0xcb, 0x30, 0x99, 0xae, 0x13, 0x93, 0x98, 0xa1, 0xf3, 0xbd, 0x66,
- 0x50, 0x61, 0xe3, 0xde, 0x34, 0x2d, 0x2e, 0xd5, 0xbe, 0xc2, 0xb2, 0xaa,
- 0x57, 0xcb, 0x83, 0xed, 0xbc, 0xff, 0x27, 0x66, 0xd1, 0x03, 0xc9, 0x71,
- 0x41, 0x91, 0x3c, 0xa4, 0xac, 0x6e, 0xc4, 0x23, 0xe1, 0xbf, 0xa3, 0x64,
- 0x06, 0x53, 0xc7, 0x23, 0x4a, 0x99, 0x19, 0x93, 0xc9, 0xd7, 0x93, 0x7c,
- 0x51, 0xde, 0x6d, 0x78, 0xd9, 0x61, 0x1c, 0xc4, 0x08, 0x6c, 0x7f, 0x86,
- 0xc1, 0xbd, 0x29, 0x91, 0x1e, 0x43, 0x28, 0xa2, 0x5d, 0x12, 0x33, 0x65,
- 0x17, 0xb3, 0xf7, 0x36, 0x0a, 0x86, 0xf1, 0x11, 0x4a, 0x86, 0xc8, 0x79,
- 0xdf, 0x5c, 0xfe, 0x0d, 0xa7, 0xef, 0xff, 0xe3, 0x76, 0xdb, 0x16, 0x40,
- 0xc4, 0xa6, 0x9f, 0x7b, 0x59, 0x7e, 0x0c, 0xa9, 0xa0, 0x7c, 0x92, 0x04,
- 0xe3, 0xce, 0x0d, 0xc8, 0x85, 0x89, 0x23, 0x33, 0x57, 0x2e, 0x17, 0xeb,
- 0xd3, 0xe0, 0xb9, 0x5a, 0x00, 0x3f, 0x3e, 0x1c, 0xf2, 0x6e, 0x9a, 0xdb,
- 0x9a, 0xc3, 0xcf, 0xa2, 0xf3, 0x9c, 0xcb, 0xc6, 0xdb, 0x2f, 0x2c, 0x30,
- 0x27, 0xd7, 0x11, 0x8b, 0x36, 0xc6, 0x79, 0x3e, 0x48, 0x8a, 0x96, 0x55,
- 0xa6, 0x8a, 0xd5, 0x03, 0x09, 0xa9, 0x64, 0x47, 0x97, 0x65, 0xa0, 0xdf,
- 0xf2, 0xab, 0x3d, 0x76, 0x1b, 0xcb, 0x87, 0x18, 0xed, 0x9c, 0x4f, 0x46,
- 0x7e, 0x18, 0x38, 0x4d, 0xd0, 0x8d, 0x05, 0xc2, 0xcd, 0xa0, 0x2d, 0xc2,
- 0x00, 0x10, 0xb5, 0x50, 0x19, 0x13, 0x15, 0xcb, 0x06, 0x2a, 0x40, 0xb4,
- 0x84, 0x36, 0x60, 0x42, 0x19, 0x66, 0xf0, 0x50, 0xf6, 0x88, 0x6e, 0x90,
- 0x84, 0x6f, 0x71, 0x40, 0x52, 0xfd, 0xb4, 0xe3, 0x38, 0x90, 0x63, 0x78,
- 0x00, 0xa8, 0x35, 0xfe, 0x61, 0xf9, 0x85, 0x73, 0xfa, 0x88, 0x19, 0x49,
- 0xe6, 0x65, 0x98, 0x5f, 0x7d, 0x42, 0x95, 0x7d, 0x14, 0x75, 0x58, 0x08,
- 0x87, 0xbf, 0xd6, 0x50, 0xd7, 0xeb, 0xaf, 0xe1, 0x9f, 0x55, 0x9e, 0x4f,
- 0xbe, 0x1e, 0x4e, 0x47, 0x38, 0x86, 0xb5, 0x1a, 0xfa, 0x20, 0x5b, 0x4c,
- 0xc3, 0xf8, 0x6b, 0xef, 0x77, 0xde, 0x64, 0xe7, 0x9e, 0x8e, 0x96, 0x44,
- 0xed, 0x90, 0xbd, 0x70, 0xba, 0xa8, 0xa4, 0xc8, 0x02, 0x68, 0xeb, 0x13,
- 0xe0, 0x21, 0xd7, 0x8d, 0xcb, 0x84, 0x6f, 0xfe, 0x97, 0x9a, 0xc6, 0x16,
- 0x8a, 0x0b, 0xbb, 0xe8, 0xd6, 0x2b, 0x11, 0xd7, 0x24, 0xb2, 0x74, 0x92,
- 0x5e, 0xf2, 0xe6, 0x1f, 0x9e, 0x9e, 0xfc, 0xed, 0xe4, 0xd4, 0x13, 0x10,
- 0xbe, 0xef, 0xf7, 0xb7, 0xdf, 0xa7, 0xc5, 0x20, 0x2d, 0xf2, 0x72, 0x0b,
- 0xe3, 0xf1, 0x22, 0x7a, 0xce, 0xa4, 0x58, 0x39, 0xb7, 0xe6, 0x8d, 0x40,
- 0x9b, 0xb3, 0xa5, 0x33, 0x18, 0x78, 0x8c, 0xa9, 0xba, 0xdc, 0xa5, 0x14,
- 0x14, 0x27, 0x54, 0x97, 0x69, 0xaa, 0x48, 0x93, 0x05, 0x86, 0x37, 0x90,
- 0x37, 0x2b, 0x09, 0x14, 0x32, 0x21, 0x20, 0xe3, 0x28, 0x7a, 0xc6, 0x14,
- 0xcf, 0xa9, 0xee, 0x78, 0x13, 0xd8, 0x59, 0x78, 0xaf, 0xcc, 0x09, 0x2d,
- 0x34, 0x7a, 0x26, 0x9d, 0x96, 0x54, 0x35, 0x91, 0x16, 0x8d, 0x0b, 0xa0,
- 0xf0, 0x0d, 0x79, 0xf6, 0x97, 0xf8, 0xa8, 0x1f, 0x3f, 0x3b, 0x39, 0x3d,
- 0xf9, 0xfe, 0xe8, 0xe2, 0xc4, 0x54, 0xa9, 0xf6, 0xc3, 0x14, 0xea, 0x58,
- 0x5d, 0x7f, 0x91, 0x75, 0x31, 0x05, 0x72, 0xab, 0x6c, 0xf8, 0x9e, 0x3c,
- 0x49, 0x52, 0x5d, 0x5e, 0x80, 0x89, 0x40, 0x71, 0x96, 0x9c, 0xe1, 0x70,
- 0x73, 0xc0, 0x2b, 0x26, 0x53, 0x19, 0xaa, 0x37, 0x83, 0x64, 0x02, 0xc2,
- 0x53, 0x19, 0xbd, 0x9d, 0x61, 0xae, 0x7f, 0x66, 0xe0, 0xbb, 0x78, 0xf6,
- 0xae, 0x29, 0xd7, 0x2e, 0xad, 0x6d, 0x83, 0x7d, 0x4e, 0xce, 0x2e, 0x7f,
- 0x18, 0x08, 0x6a, 0x3d, 0x2e, 0xc3, 0xb3, 0x6d, 0xaa, 0x54, 0x6b, 0xbb,
- 0xeb, 0xe0, 0x96, 0x75, 0xee, 0x29, 0xce, 0xd6, 0xca, 0x14, 0x89, 0x48,
- 0x5b, 0x96, 0x93, 0x1a, 0xbd, 0x52, 0xd9, 0xf4, 0xb0, 0x6d, 0x4c, 0xe1,
- 0x2b, 0x49, 0x08, 0x7d, 0x46, 0x0f, 0x36, 0xe2, 0xe1, 0x1d, 0x28, 0x40,
- 0x58, 0x09, 0xfd, 0x2e, 0x00, 0x37, 0x4d, 0x2b, 0x55, 0x0e, 0xaf, 0xd2,
- 0x69, 0xaa, 0xd7, 0x2a, 0xc6, 0x9f, 0x53, 0xbc, 0x33, 0x03, 0x7c, 0x49,
- 0x79, 0x00, 0x62, 0xf0, 0x83, 0x94, 0x0c, 0x48, 0xa8, 0xed, 0xe7, 0x7e,
- 0xa8, 0x2b, 0x25, 0xec, 0x64, 0x05, 0xe5, 0x93, 0x53, 0xb2, 0x0d, 0x41,
- 0xd3, 0xf5, 0x28, 0x5d, 0xd1, 0x09, 0x0c, 0xf7, 0x03, 0xc1, 0x11, 0x11,
- 0x6b, 0xea, 0xa5, 0x28, 0x4b, 0x69, 0x62, 0x8d, 0xdb, 0xe1, 0x10, 0x21,
- 0xfa, 0x88, 0xd8, 0x95, 0x5a, 0x1a, 0x70, 0x74, 0x4b, 0x02, 0xc9, 0xcc,
- 0x52, 0xae, 0x15, 0x12, 0xb2, 0xba, 0x4c, 0x7a, 0xb3, 0xac, 0xfd, 0xbd,
- 0xac, 0xe0, 0x7e, 0xcd, 0x5b, 0x19, 0xdb, 0x5a, 0xbc, 0xd7, 0x94, 0xed,
- 0xed, 0x9a, 0x02, 0xb8, 0xd2, 0x0c, 0x53, 0x12, 0x30, 0x0a, 0xdc, 0x71,
- 0x93, 0xca, 0x11, 0x4c, 0x16, 0xc8, 0x4a, 0xcb, 0x72, 0xeb, 0x1c, 0xd7,
- 0xad, 0xe8, 0x4c, 0x75, 0x87, 0xf5, 0x57, 0x2d, 0x2e, 0x5c, 0x27, 0x53,
- 0x5a, 0xaf, 0x38, 0x9d, 0x7b, 0xa5, 0x6c, 0x36, 0x09, 0x6a, 0xf5, 0xc2,
- 0xcd, 0x4e, 0x55, 0xb0, 0x22, 0xdc, 0x74, 0xbc, 0x82, 0x45, 0x6c, 0x3f,
- 0x39, 0x7f, 0x73, 0x41, 0x9d, 0x9c, 0xe2, 0x2f, 0x72, 0x9d, 0x96, 0xa1,
- 0xfa, 0x2a, 0x23, 0x2e, 0x86, 0x3e, 0xa4, 0xda, 0x03, 0x18, 0x81, 0x64,
- 0xd2, 0x03, 0x34, 0x7f, 0x91, 0xb3, 0xc1, 0xa4, 0x38, 0xae, 0x70, 0x14,
- 0xf2, 0x92, 0x78, 0x48, 0x09, 0x15, 0x66, 0xd3, 0x9b, 0x44, 0x36, 0x1c,
- 0x83, 0xa0, 0xda, 0xd3, 0x28, 0x38, 0x11, 0x58, 0x03, 0x68, 0xce, 0xf0,
- 0x4b, 0x75, 0x0f, 0x10, 0x31, 0x07, 0xaf, 0x32, 0x5b, 0xf5, 0x04, 0x9b,
- 0xc4, 0xb7, 0xa2, 0x22, 0xbb, 0xbc, 0x82, 0x8d, 0x81, 0x71, 0xf4, 0xec,
- 0x3c, 0xb9, 0x0b, 0xc6, 0x9f, 0xa3, 0x0a, 0x5f, 0x7e, 0xb8, 0x0c, 0x81,
- 0xc6, 0x98, 0xa8, 0x79, 0xcd, 0xe2, 0xe7, 0xe4, 0x61, 0x13, 0x7a, 0xd7,
- 0x15, 0x24, 0x7b, 0x86, 0xec, 0x24, 0x78, 0x05, 0x8e, 0xc0, 0xf3, 0x42,
- 0x40, 0x08, 0xbe, 0x41, 0x73, 0xd7, 0xd2, 0x3b, 0xa9, 0x15, 0xc6, 0x0a,
- 0x84, 0x96, 0x4e, 0x4f, 0xa8, 0xca, 0x1e, 0x89, 0x34, 0x03, 0x96, 0x79,
- 0x45, 0x99, 0x9d, 0x05, 0x0e, 0x3a, 0x2c, 0xbc, 0xf2, 0x68, 0x9e, 0xa8,
- 0x6c, 0x5b, 0x40, 0x86, 0x42, 0xda, 0x68, 0x56, 0x42, 0x70, 0x92, 0x83,
- 0x64, 0x28, 0xbc, 0x38, 0x74, 0xca, 0x84, 0xde, 0xf2, 0x10, 0x55, 0x31,
- 0x4b, 0x73, 0xbc, 0xe8, 0x35, 0x12, 0x6c, 0x43, 0xd5, 0xd3, 0xe4, 0xaa,
- 0x92, 0x30, 0x54, 0x9c, 0x42, 0x83, 0x2f, 0xcf, 0xaf, 0x9f, 0xd4, 0xe3,
- 0x17, 0xd9, 0x5e, 0x46, 0xea, 0x27, 0xac, 0x6a, 0x13, 0xaa, 0x85, 0x41,
- 0x2a, 0xa0, 0x6f, 0x1a, 0x2e, 0x1a, 0x5b, 0x4d, 0xec, 0x32, 0xd2, 0x8e,
- 0xd7, 0x3f, 0xf3, 0x13, 0x62, 0x44, 0xf4, 0x06, 0xdd, 0xc5, 0x08, 0x57,
- 0x7f, 0x29, 0x1a, 0xbd, 0xd0, 0xf2, 0x20, 0x85, 0x1e, 0x33, 0xc4, 0x70,
- 0x7d, 0xe9, 0xa8, 0x05, 0x7e, 0xe4, 0x24, 0xd0, 0x1f, 0x82, 0x28, 0xb0,
- 0x52, 0x8f, 0x2f, 0x52, 0x00, 0x20, 0xbe, 0x40, 0x48, 0x75, 0x15, 0x0b,
- 0x0c, 0x2c, 0xde, 0x62, 0x4c, 0x1f, 0x67, 0x41, 0xe6, 0x5c, 0x9f, 0x6a,
- 0x18, 0xe0, 0x6b, 0xc2, 0xd1, 0xe8, 0xd9, 0xa4, 0xbc, 0x5e, 0xc5, 0x49,
- 0xed, 0x52, 0x47, 0xe1, 0xa8, 0x5c, 0xaf, 0x28, 0xf8, 0xbd, 0x43, 0x72,
- 0x97, 0xee, 0xe3, 0x2a, 0xef, 0xa2, 0x3b, 0xb0, 0xb5, 0x30, 0x8a, 0xed,
- 0x9b, 0xe5, 0x35, 0x13, 0xde, 0x79, 0xd7, 0x59, 0xbb, 0x30, 0xaf, 0x2b,
- 0xaf, 0x3f, 0x80, 0xd7, 0xf5, 0xff, 0x66, 0x34, 0x06, 0xe2, 0x69, 0x81,
- 0x1c, 0x14, 0x5a, 0x6e, 0xdd, 0xe1, 0x35, 0xf9, 0x1c, 0x70, 0x36, 0xdf,
- 0xb7, 0x8d, 0x9c, 0xce, 0x30, 0x3a, 0x18, 0x80, 0x70, 0xb7, 0xf3, 0xa3,
- 0xfe, 0xdf, 0x1a, 0x7c, 0xcd, 0xe3, 0x64, 0x40, 0x4f, 0x9e, 0xe7, 0x5d,
- 0x6b, 0x1c, 0x62, 0x5b, 0xc1, 0x03, 0x0f, 0x6b, 0x79, 0x8f, 0x03, 0x0f,
- 0x03, 0xf1, 0x0e, 0xbc, 0xb7, 0xb4, 0xcb, 0x0e, 0x7c, 0x80, 0x5e, 0xfd,
- 0x03, 0x3f, 0xa3, 0x43, 0x4e, 0x70, 0x20, 0x81, 0x93, 0xae, 0x07, 0x5d,
- 0xcf, 0xb6, 0x9f, 0xa2, 0x47, 0xe3, 0x5c, 0xe7, 0xa4, 0xd3, 0x0b, 0xde,
- 0x41, 0xd7, 0xed, 0x5c, 0xfb, 0xa4, 0x0b, 0x87, 0xf0, 0x0e, 0x3a, 0x1d,
- 0xf2, 0x16, 0x62, 0x0d, 0x84, 0xc5, 0xd6, 0x08, 0xbd, 0x21, 0x0b, 0x7d,
- 0x78, 0x3c, 0xfd, 0xd2, 0x3d, 0xb9, 0xf7, 0xe1, 0x85, 0x91, 0x3d, 0xf0,
- 0xf0, 0x6a, 0xd0, 0x65, 0xdb, 0xe1, 0x75, 0xb1, 0xc9, 0x02, 0xb1, 0x3f,
- 0x44, 0xa5, 0x52, 0x20, 0x4b, 0x8e, 0x91, 0x8d, 0x40, 0x0c, 0x40, 0x24,
- 0x77, 0x0d, 0x22, 0x5d, 0x31, 0xf4, 0xbd, 0xa8, 0x06, 0x00, 0xd1, 0x45,
- 0xf4, 0x28, 0x44, 0x69, 0x15, 0xd8, 0x44, 0x9c, 0x85, 0x26, 0xcf, 0xf3,
- 0x0b, 0xc8, 0xa4, 0x7d, 0xb0, 0x3c, 0xa7, 0x20, 0x40, 0x1a, 0x04, 0x70,
- 0x2c, 0x53, 0x4c, 0x90, 0x89, 0xea, 0xa1, 0xa6, 0xed, 0xfb, 0xff, 0xd1,
- 0xc5, 0xe0, 0x06, 0xdc, 0xdb, 0xbd, 0xb6, 0xfc, 0x1f, 0xeb, 0x09, 0xbc,
- 0x0e, 0xe0, 0x76, 0x93, 0x1f, 0xa3, 0x6e, 0x48, 0xb2, 0x30, 0x0a, 0xd6,
- 0xa0, 0x52, 0xa1, 0x0d, 0x62, 0x49, 0x40, 0x41, 0x55, 0x0b, 0xaa, 0x45,
- 0xe0, 0x35, 0xd2, 0x92, 0xc5, 0x79, 0x8e, 0x1a, 0x2c, 0xe6, 0x9c, 0xaa,
- 0xaf, 0x99, 0xd8, 0x70, 0x12, 0x28, 0x76, 0xce, 0xb1, 0x5d, 0x4e, 0xb9,
- 0x51, 0x10, 0xc8, 0x06, 0x98, 0x70, 0x87, 0x45, 0xb9, 0x4a, 0xba, 0x7f,
- 0xd1, 0xa1, 0x7d, 0xa3, 0xd5, 0x81, 0x08, 0x72, 0xb6, 0x64, 0xf5, 0xc9,
- 0xb3, 0x61, 0x6b, 0xf1, 0xa3, 0x2a, 0x2a, 0x10, 0xac, 0x66, 0x9a, 0x3a,
- 0xa9, 0xca, 0x2b, 0x77, 0x34, 0x34, 0xff, 0x65, 0x5b, 0x1c, 0x94, 0x67,
- 0x7a, 0x2b, 0x8f, 0x76, 0xa8, 0x9b, 0x87, 0x1c, 0xf3, 0xe0, 0x70, 0xd7,
- 0x2c, 0x4c, 0x8a, 0xb2, 0x6f, 0x2d, 0xca, 0xe4, 0x49, 0xa3, 0x22, 0xe9,
- 0x68, 0x56, 0xc6, 0x64, 0xef, 0x1b, 0x23, 0x08, 0xf5, 0xa1, 0xf9, 0xd5,
- 0xb3, 0xf8, 0x3c, 0x7b, 0xad, 0x05, 0x20, 0x9d, 0xfa, 0x8f, 0x65, 0xca,
- 0x98, 0x39, 0x9c, 0xa9, 0x0e, 0x8f, 0xd8, 0x24, 0xf4, 0xea, 0xaa, 0xc8,
- 0x17, 0x97, 0x57, 0xd2, 0xa4, 0x5f, 0x40, 0x1d, 0xba, 0xf0, 0x10, 0xd2,
- 0x12, 0xc6, 0x20, 0x4a, 0x0b, 0xf2, 0x68, 0x92, 0x7e, 0x65, 0xc7, 0x16,
- 0x6d, 0x8a, 0xf9, 0x04, 0xdd, 0x1e, 0x81, 0xfa, 0x12, 0x0a, 0x8a, 0x86,
- 0xc3, 0x90, 0x7a, 0xdd, 0x98, 0x7f, 0x43, 0x45, 0xaf, 0xa5, 0x08, 0x8e,
- 0xc2, 0xaf, 0x53, 0x7d, 0x5f, 0x6d, 0x37, 0xe0, 0x13, 0xde, 0x94, 0x42,
- 0x00, 0x92, 0x85, 0xba, 0x15, 0x4e, 0x73, 0xa9, 0x2f, 0xdd, 0x5a, 0x16,
- 0x94, 0x8f, 0x58, 0x3b, 0xb4, 0x3e, 0x8a, 0xb4, 0xba, 0xba, 0x37, 0xe6,
- 0x0e, 0x13, 0x89, 0x36, 0x31, 0xbf, 0x7e, 0x14, 0xe3, 0x7c, 0x23, 0xf5,
- 0x1a, 0xf2, 0x87, 0x4f, 0xe8, 0xc3, 0x5e, 0xb3, 0x23, 0x0f, 0x39, 0xe0,
- 0x1f, 0x8b, 0xac, 0x48, 0x9d, 0x6a, 0xc7, 0x8b, 0xd9, 0x28, 0x2d, 0x26,
- 0x77, 0xb8, 0xea, 0x93, 0x6c, 0xc0, 0x19, 0xe3, 0x89, 0xa9, 0x4c, 0xc8,
- 0x20, 0xd1, 0x9c, 0x1d, 0x05, 0x33, 0x89, 0xfd, 0x6a, 0x11, 0xf5, 0x78,
- 0xe2, 0xfd, 0xfd, 0x00, 0xd5, 0x9a, 0x11, 0x1f, 0xca, 0x3e, 0x85, 0x69,
- 0xb6, 0x26, 0x68, 0x0e, 0x08, 0xc4, 0x35, 0x07, 0xaa, 0x9c, 0xc7, 0xfa,
- 0x16, 0xb3, 0x9e, 0x69, 0xf2, 0x5e, 0x74, 0x9c, 0x47, 0x42, 0xc8, 0xb1,
- 0x07, 0x94, 0x8e, 0x84, 0xdd, 0xad, 0x85, 0xde, 0xd4, 0x48, 0x5e, 0x14,
- 0xcf, 0x4a, 0x0b, 0x7e, 0x49, 0x41, 0x0b, 0xe9, 0x27, 0x04, 0xe3, 0xa5,
- 0x79, 0x54, 0x6e, 0x78, 0xac, 0x22, 0xe4, 0xd0, 0x48, 0xcc, 0xbb, 0xad,
- 0x04, 0x68, 0x56, 0xe1, 0xb3, 0x12, 0xa0, 0x19, 0xc5, 0xee, 0x4e, 0x6f,
- 0xb7, 0xb7, 0xd7, 0x5b, 0x17, 0x7e, 0xad, 0x4e, 0xc5, 0xc6, 0x22, 0x5e,
- 0xa7, 0xc1, 0x66, 0x67, 0x6d, 0x44, 0x28, 0xb6, 0x39, 0xce, 0xaa, 0xb3,
- 0x74, 0x58, 0x23, 0x44, 0xa6, 0x43, 0x64, 0x61, 0x42, 0x85, 0x0f, 0x26,
- 0xc2, 0x27, 0x9f, 0x84, 0x08, 0x9f, 0xac, 0x20, 0x42, 0xca, 0x01, 0xb7,
- 0xf3, 0x6c, 0xa1, 0x43, 0x09, 0x5a, 0x41, 0xd6, 0xfa, 0x60, 0x22, 0x7c,
- 0x72, 0x2f, 0x22, 0x7c, 0xf2, 0x1f, 0x41, 0x84, 0x32, 0x8a, 0xbd, 0x64,
- 0xe7, 0xd1, 0xc1, 0xa3, 0xf4, 0xd1, 0xde, 0xc1, 0xc1, 0xe3, 0x27, 0xbb,
- 0x0f, 0xe3, 0x87, 0x75, 0x62, 0x6c, 0x50, 0x5e, 0xaf, 0xd9, 0xe5, 0x7f,
- 0x00, 0x3f, 0x14, 0xbb, 0x95, 0x21, 0xc4, 0xd4, 0x23, 0xc5, 0xbe, 0x44,
- 0x74, 0x6b, 0xed, 0x2f, 0x24, 0x1a, 0x7d, 0x8b, 0x23, 0x75, 0x24, 0x67,
- 0x5d, 0x73, 0x47, 0xdd, 0x72, 0x8a, 0xbe, 0xb4, 0x4d, 0xe2, 0xb5, 0x04,
- 0x22, 0x69, 0x93, 0x2f, 0xcf, 0x23, 0xd3, 0xbd, 0x43, 0x4f, 0xb6, 0x70,
- 0x89, 0xe4, 0xfb, 0x04, 0x1d, 0xee, 0x25, 0xfa, 0x6a, 0x61, 0x01, 0x38,
- 0xcf, 0xb4, 0xb4, 0x00, 0x9f, 0xa1, 0xfa, 0x24, 0xb0, 0x78, 0x07, 0x87,
- 0xb8, 0x5e, 0x31, 0x3f, 0xfe, 0x4d, 0x10, 0xbe, 0x2d, 0x4d, 0x40, 0x62,
- 0xb0, 0x83, 0x6a, 0x27, 0x61, 0x5d, 0x87, 0x4f, 0x0f, 0xae, 0xb7, 0x8c,
- 0x84, 0x75, 0x14, 0xbb, 0x5f, 0xed, 0xf5, 0x76, 0x9f, 0x7c, 0x89, 0x38,
- 0x9d, 0x5d, 0xfb, 0xfb, 0xde, 0x7a, 0x94, 0xdc, 0x24, 0xe4, 0x25, 0x74,
- 0xac, 0xfd, 0x86, 0xf8, 0xcd, 0xbd, 0xe8, 0xd8, 0x63, 0xa7, 0x40, 0xc4,
- 0x44, 0xb5, 0x4d, 0xbc, 0xd4, 0x25, 0x34, 0x9c, 0x5f, 0x71, 0x25, 0xbb,
- 0xb2, 0x4a, 0xaa, 0x45, 0x53, 0xc2, 0xeb, 0x93, 0x1b, 0xa3, 0xd4, 0x6a,
- 0x77, 0xfc, 0x0c, 0x59, 0x63, 0x0c, 0xb2, 0xed, 0xb3, 0xfc, 0x05, 0x71,
- 0xdb, 0x18, 0xdd, 0x2d, 0x31, 0x55, 0x12, 0xdf, 0x5a, 0x61, 0xa2, 0xab,
- 0x77, 0x79, 0x1f, 0x75, 0x6f, 0x0d, 0x2d, 0xbf, 0xde, 0xf8, 0xda, 0xe4,
- 0xd0, 0x18, 0x1b, 0x7f, 0xe2, 0xaa, 0x00, 0xf0, 0xb7, 0x96, 0x4f, 0x58,
- 0xf7, 0xb6, 0x85, 0x96, 0xd4, 0xa3, 0x56, 0xcf, 0xdb, 0x7a, 0xe2, 0xef,
- 0x89, 0x3e, 0xd8, 0xba, 0x21, 0xc6, 0x37, 0xf7, 0x21, 0xbb, 0x51, 0xef,
- 0xeb, 0x13, 0xd8, 0x5c, 0xdc, 0x29, 0x3f, 0x60, 0x2b, 0xcc, 0xc8, 0x3e,
- 0xf6, 0x3e, 0xa0, 0x72, 0xb8, 0x6a, 0x0b, 0xb0, 0xb7, 0x43, 0xd0, 0x8b,
- 0xc3, 0xb5, 0xb3, 0x18, 0x46, 0x88, 0x75, 0xa3, 0xfa, 0x82, 0xa3, 0xf4,
- 0x91, 0xbf, 0xd8, 0x72, 0x7c, 0xc1, 0x14, 0xa5, 0x85, 0x61, 0x28, 0x84,
- 0x76, 0x1b, 0xc0, 0x39, 0x26, 0xac, 0x7f, 0x17, 0x3f, 0xc0, 0x89, 0x7a,
- 0x53, 0x8b, 0x0a, 0xb9, 0x14, 0xa5, 0x89, 0x22, 0x9a, 0xa6, 0x68, 0xb9,
- 0xcb, 0xca, 0x69, 0x48, 0xb6, 0x40, 0x65, 0x5e, 0xb5, 0x2e, 0x1a, 0x92,
- 0x5f, 0xf2, 0x06, 0xab, 0x29, 0x50, 0xa9, 0x47, 0x13, 0xb1, 0xc5, 0xdc,
- 0x46, 0x31, 0x24, 0x91, 0x98, 0xe0, 0xf7, 0xc2, 0xc2, 0xe4, 0x6a, 0x0a,
- 0x0f, 0xe5, 0xa3, 0x34, 0x49, 0x00, 0xc8, 0xce, 0x02, 0x0e, 0xd1, 0x48,
- 0x31, 0xf0, 0x69, 0x31, 0x2f, 0x09, 0xcd, 0x80, 0xab, 0x1e, 0x44, 0xe4,
- 0x91, 0xa5, 0x5e, 0xe1, 0xfe, 0x7a, 0x91, 0xdf, 0xa4, 0xd7, 0x2d, 0x95,
- 0x81, 0x6a, 0xc5, 0x6c, 0x5d, 0x6c, 0x6c, 0xba, 0x04, 0x30, 0xac, 0xa8,
- 0x34, 0xb5, 0xed, 0xb2, 0xd9, 0x55, 0x8a, 0xa8, 0x3e, 0x92, 0x4b, 0x46,
- 0x26, 0xdd, 0x40, 0xd6, 0x40, 0x91, 0x53, 0xf8, 0xa2, 0x5e, 0x89, 0x84,
- 0x80, 0x98, 0x34, 0xa9, 0x4c, 0x78, 0xf5, 0x0a, 0x16, 0xd2, 0x50, 0x9f,
- 0x17, 0x33, 0x5c, 0xaf, 0x6c, 0x4c, 0x61, 0xc0, 0x84, 0x7e, 0x2d, 0x7a,
- 0x6f, 0xa7, 0x63, 0xcb, 0xe9, 0x29, 0x50, 0x30, 0x42, 0x48, 0x37, 0x45,
- 0x55, 0x87, 0x0c, 0xbf, 0x7c, 0x1c, 0x40, 0x0e, 0x90, 0xb8, 0x01, 0xa1,
- 0xc8, 0xcf, 0x94, 0xab, 0xfa, 0x6f, 0x60, 0x83, 0x4f, 0xf6, 0x6a, 0x67,
- 0xf0, 0x19, 0xd9, 0x43, 0x17, 0xd3, 0xb9, 0x60, 0x42, 0xaf, 0x80, 0xa0,
- 0x8d, 0xc8, 0xbf, 0xf1, 0x03, 0x01, 0x3c, 0x71, 0x14, 0x9c, 0xc0, 0x17,
- 0xaa, 0x27, 0xd2, 0x80, 0x95, 0x49, 0x78, 0x69, 0x6b, 0x01, 0x33, 0xc6,
- 0xff, 0xa2, 0x65, 0x47, 0xde, 0xa7, 0xaf, 0x21, 0xc1, 0x69, 0xa3, 0xdd,
- 0xba, 0xcf, 0xa4, 0x6e, 0xb0, 0x0f, 0xe3, 0x08, 0x19, 0xea, 0x08, 0x96,
- 0xa0, 0xaa, 0x61, 0x17, 0x31, 0x3a, 0xcd, 0x55, 0xea, 0xc2, 0x30, 0x9b,
- 0x62, 0x92, 0x9c, 0x5a, 0xc9, 0x8e, 0x59, 0x20, 0x6c, 0x41, 0x2d, 0xf0,
- 0xf6, 0x98, 0x08, 0x50, 0x86, 0xde, 0x91, 0xb2, 0x78, 0x0b, 0x29, 0x1d,
- 0x9c, 0xe0, 0xb2, 0x50, 0x35, 0xb6, 0x96, 0xbc, 0x68, 0x77, 0xd5, 0x3f,
- 0x9f, 0x72, 0xe1, 0x0c, 0x82, 0x0b, 0x5a, 0xaf, 0x0d, 0x76, 0x90, 0x77,
- 0x0d, 0x48, 0x8d, 0xcb, 0xdc, 0xd3, 0x4b, 0x0e, 0xbe, 0x5a, 0x86, 0x52,
- 0xf1, 0x2c, 0xc5, 0xcc, 0x15, 0x06, 0x7d, 0x9d, 0x3b, 0xf1, 0x2a, 0xf6,
- 0xdc, 0x4b, 0x6a, 0x39, 0x83, 0x0a, 0xb0, 0x6d, 0x8e, 0x58, 0x60, 0xb3,
- 0xc0, 0x4d, 0xef, 0xcb, 0x47, 0x40, 0xd7, 0x78, 0xeb, 0x66, 0xb9, 0xe4,
- 0x86, 0x71, 0x68, 0x16, 0x07, 0x97, 0x93, 0xc9, 0x5d, 0xbd, 0xb6, 0xb9,
- 0x42, 0xe0, 0x8c, 0x8d, 0x6c, 0x17, 0xa8, 0x70, 0x9e, 0x83, 0x78, 0x6f,
- 0x32, 0x64, 0x81, 0x00, 0x05, 0x09, 0xa0, 0xb5, 0xae, 0x99, 0x29, 0xbf,
- 0xae, 0x20, 0x8e, 0xe4, 0xe5, 0x43, 0x9e, 0x38, 0x87, 0xa1, 0x7f, 0x9f,
- 0x20, 0x29, 0x90, 0x6c, 0xf6, 0x2c, 0x49, 0xa7, 0xc4, 0x64, 0x73, 0x0c,
- 0x9d, 0x0a, 0x22, 0xa0, 0xf3, 0x57, 0x6c, 0x52, 0x66, 0x97, 0x04, 0x19,
- 0x24, 0x99, 0xa0, 0x22, 0xb8, 0x2b, 0x46, 0xa0, 0xfb, 0x0a, 0x98, 0x23,
- 0xde, 0x21, 0x54, 0x4d, 0x98, 0x60, 0x08, 0xc2, 0x58, 0xca, 0x41, 0xd5,
- 0xc0, 0x6c, 0xd0, 0x67, 0x62, 0x76, 0xa6, 0xff, 0x6d, 0x9e, 0xd0, 0x36,
- 0x55, 0x2e, 0x5c, 0x13, 0xda, 0x9e, 0xde, 0xf4, 0x82, 0xfc, 0x64, 0x69,
- 0x0e, 0x83, 0x7c, 0x8c, 0x28, 0x0f, 0x1a, 0x99, 0x68, 0x99, 0x09, 0xc5,
- 0x78, 0x18, 0x16, 0x77, 0x73, 0xf4, 0x06, 0x08, 0x74, 0x32, 0x4b, 0x14,
- 0xb8, 0xbc, 0x0c, 0x03, 0xb0, 0x14, 0xac, 0xfa, 0x2d, 0x79, 0xda, 0xe5,
- 0x55, 0xd2, 0x18, 0xd1, 0x37, 0x8f, 0xa5, 0xcc, 0xa3, 0xc4, 0x68, 0x90,
- 0x48, 0x6d, 0x23, 0xaa, 0x3e, 0x62, 0xe1, 0x93, 0x9a, 0x86, 0x78, 0x6a,
- 0xa1, 0x94, 0x9c, 0x14, 0x93, 0xec, 0xcd, 0xc1, 0x7f, 0xd1, 0x26, 0x05,
- 0x3b, 0x29, 0x60, 0x30, 0x46, 0x9a, 0x6d, 0xa9, 0x2a, 0x2b, 0x2f, 0x7a,
- 0x8a, 0x27, 0xa9, 0x95, 0x16, 0x38, 0xc3, 0x7a, 0x17, 0x5a, 0x88, 0x82,
- 0x67, 0x70, 0x5f, 0x92, 0xf8, 0xe8, 0xa5, 0xa1, 0x95, 0xa8, 0x27, 0xc9,
- 0x35, 0x2c, 0xfc, 0x83, 0xd0, 0x1a, 0x14, 0x75, 0x85, 0x70, 0x1f, 0x6a,
- 0x54, 0x51, 0x25, 0x97, 0xb1, 0x14, 0xac, 0x68, 0xe1, 0x4a, 0x8e, 0x8b,
- 0x48, 0x78, 0x10, 0xe3, 0xdf, 0x52, 0x52, 0xa6, 0x89, 0x73, 0xa1, 0x9b,
- 0x50, 0xd3, 0x42, 0xa4, 0x88, 0x48, 0x38, 0x49, 0x18, 0x11, 0x5a, 0x4e,
- 0x2e, 0x92, 0x4b, 0x27, 0x38, 0xba, 0x91, 0x67, 0x85, 0x15, 0x02, 0xd3,
- 0x19, 0x27, 0x54, 0xc1, 0x22, 0x00, 0x0f, 0x9e, 0xc2, 0x4e, 0xc4, 0xaf,
- 0x61, 0x6f, 0x63, 0xaf, 0x18, 0x12, 0x7a, 0x82, 0x85, 0x59, 0x5b, 0xd1,
- 0x55, 0xc0, 0x61, 0xb1, 0x9b, 0x5e, 0xb0, 0x4a, 0xcd, 0x30, 0x2f, 0xa4,
- 0x56, 0x0c, 0xa6, 0x44, 0xc1, 0x16, 0x52, 0x12, 0x58, 0x69, 0x90, 0xf9,
- 0xeb, 0xd9, 0x2f, 0x34, 0x2a, 0xad, 0xe2, 0x19, 0x02, 0xb5, 0x36, 0x06,
- 0x34, 0x29, 0x27, 0xa9, 0xc1, 0x7b, 0xa3, 0xb4, 0xcc, 0x88, 0x55, 0xd3,
- 0x48, 0x40, 0x1f, 0x9e, 0x99, 0x42, 0x25, 0x1c, 0x90, 0xee, 0x05, 0x4b,
- 0xc1, 0x46, 0x88, 0xdc, 0x66, 0xee, 0xed, 0xe0, 0x2c, 0xf0, 0x70, 0x49,
- 0xfc, 0x93, 0x44, 0x0a, 0xcb, 0x66, 0x96, 0xe4, 0xb4, 0xa7, 0x42, 0x03,
- 0xe8, 0xaa, 0xa5, 0x3f, 0x89, 0xed, 0xe2, 0x92, 0x4b, 0x28, 0xba, 0xaf,
- 0xf7, 0xf3, 0x1d, 0xdf, 0xd5, 0x32, 0xb6, 0x33, 0xc9, 0xef, 0x70, 0xb0,
- 0xc1, 0x72, 0xad, 0x6b, 0x22, 0x10, 0x50, 0x65, 0x65, 0x40, 0x66, 0xaf,
- 0xbd, 0x23, 0x4b, 0x9d, 0x31, 0xa0, 0xc3, 0x62, 0xc0, 0xf5, 0xce, 0x4c,
- 0x5d, 0x9e, 0x96, 0xab, 0xbf, 0x46, 0x89, 0x9f, 0xeb, 0xea, 0xaf, 0x0d,
- 0x02, 0xff, 0x78, 0x00, 0xce, 0x91, 0xdd, 0x05, 0x3a, 0x74, 0xbf, 0xa1,
- 0x28, 0x80, 0x63, 0x47, 0x2f, 0x6d, 0xbd, 0xd8, 0x37, 0x59, 0x79, 0x9a,
- 0x87, 0x91, 0xde, 0xbc, 0xef, 0x49, 0xc4, 0x87, 0x4b, 0x4e, 0x8b, 0x82,
- 0xe3, 0x47, 0xab, 0xae, 0x39, 0x4c, 0x35, 0xe2, 0x25, 0xd2, 0x0b, 0xed,
- 0x91, 0x06, 0x27, 0x0f, 0x93, 0xe1, 0x95, 0xa0, 0x4f, 0x4f, 0xd8, 0x70,
- 0xc7, 0x67, 0x0a, 0x53, 0x56, 0x38, 0x10, 0x92, 0x73, 0x14, 0x14, 0xa7,
- 0xa3, 0x8d, 0x82, 0x5a, 0x60, 0xa1, 0x99, 0x1e, 0x4a, 0x0e, 0x8f, 0xad,
- 0x81, 0x4f, 0x74, 0xeb, 0xf2, 0x29, 0x41, 0x93, 0xb6, 0x60, 0x37, 0x32,
- 0x33, 0x36, 0x6b, 0x74, 0x7f, 0x94, 0xb9, 0xe8, 0xd3, 0xd0, 0x09, 0x8d,
- 0x82, 0x38, 0xcd, 0x07, 0x10, 0x8a, 0x10, 0xdb, 0x72, 0xba, 0xa0, 0xfc,
- 0xca, 0xdd, 0x9d, 0x1d, 0x5b, 0x26, 0xae, 0xa5, 0x36, 0x9c, 0x90, 0xc8,
- 0xd2, 0x12, 0x71, 0x84, 0x4a, 0x4d, 0x71, 0xe3, 0xa6, 0x34, 0x46, 0x92,
- 0x55, 0xc1, 0xa2, 0x98, 0xd8, 0xa5, 0x29, 0xd5, 0x66, 0x14, 0x81, 0x1b,
- 0x03, 0x98, 0x98, 0x52, 0x99, 0x38, 0x0c, 0xa3, 0x3e, 0xa1, 0x21, 0x96,
- 0x07, 0xf5, 0x77, 0xc2, 0x70, 0xe8, 0x94, 0x7d, 0x8a, 0x2f, 0x1a, 0x8e,
- 0x10, 0x45, 0xdf, 0xdd, 0xd9, 0x00, 0x0e, 0x13, 0xc3, 0x45, 0xe3, 0xc2,
- 0x68, 0x7f, 0x1e, 0x7f, 0x6f, 0x89, 0x3a, 0x1c, 0x2e, 0xff, 0xf6, 0x5f,
- 0x0e, 0xb8, 0x23, 0x6c, 0xd4, 0xbc, 0xa4, 0x26, 0xb9, 0x3e, 0x94, 0x97,
- 0x7b, 0x5b, 0x2f, 0x4c, 0x67, 0x4a, 0x84, 0xdb, 0x79, 0xa3, 0x51, 0x6a,
- 0x90, 0x52, 0x01, 0x05, 0x56, 0xc6, 0xda, 0x38, 0x99, 0xb7, 0x5d, 0xf7,
- 0xe5, 0x67, 0x1f, 0x1d, 0x0e, 0xd1, 0x1f, 0xca, 0x5e, 0xef, 0xb1, 0x41,
- 0xde, 0x5b, 0xb7, 0xe6, 0x7b, 0xad, 0xd8, 0x5c, 0x1d, 0xcc, 0xe2, 0x69,
- 0x9d, 0x62, 0xb1, 0xde, 0x44, 0x4c, 0x25, 0x25, 0x9a, 0x97, 0x2f, 0x16,
- 0xa2, 0x40, 0xbe, 0x48, 0xf1, 0x25, 0x06, 0xd4, 0x12, 0x6f, 0xaa, 0x51,
- 0x5a, 0x49, 0x16, 0xb1, 0x1a, 0x7e, 0xa8, 0x38, 0x45, 0x6f, 0x69, 0xe1,
- 0x57, 0x0d, 0xa1, 0x73, 0xa1, 0xd1, 0x4d, 0x3c, 0x60, 0x33, 0x3a, 0x89,
- 0xc3, 0x93, 0x42, 0x71, 0x9e, 0x68, 0x60, 0xaa, 0x4c, 0x28, 0x20, 0x17,
- 0xd0, 0xa0, 0x9c, 0x41, 0x72, 0x28, 0xb0, 0x68, 0xf2, 0xf6, 0xcd, 0x69,
- 0x97, 0xa8, 0x11, 0xf8, 0x17, 0x42, 0x02, 0x31, 0xcd, 0x06, 0xbd, 0x24,
- 0x36, 0x42, 0x90, 0x75, 0x35, 0x9e, 0x89, 0x52, 0x14, 0xda, 0x7b, 0x0a,
- 0x89, 0x2f, 0xc6, 0x56, 0x4b, 0x53, 0xde, 0xc9, 0xcf, 0xdb, 0x71, 0x18,
- 0x19, 0x3c, 0xb9, 0x41, 0xc5, 0x13, 0x28, 0x4a, 0x97, 0x9b, 0xc7, 0x35,
- 0x2b, 0xa6, 0x5c, 0xd5, 0x44, 0x7a, 0x89, 0x38, 0xab, 0x9a, 0xe1, 0xeb,
- 0x3d, 0xc9, 0x1c, 0xd3, 0xcc, 0xb0, 0x92, 0x72, 0x44, 0x9b, 0x43, 0x75,
- 0x41, 0x16, 0x85, 0x2d, 0xc4, 0x02, 0x9a, 0x7b, 0x06, 0xbb, 0x3a, 0xeb,
- 0x90, 0x0c, 0x66, 0xaf, 0x6e, 0xe9, 0xd4, 0x9b, 0xec, 0x62, 0xe2, 0x44,
- 0x5f, 0x7e, 0x11, 0xae, 0x1e, 0x52, 0x39, 0x81, 0xf6, 0x35, 0xd8, 0xe3,
- 0xc8, 0xc1, 0x93, 0xc7, 0x81, 0xd1, 0x4d, 0x40, 0x53, 0xc8, 0x67, 0xad,
- 0x78, 0x3e, 0x86, 0x38, 0x88, 0x97, 0xe1, 0xf8, 0xc9, 0x7c, 0x39, 0x4a,
- 0x29, 0xc9, 0x7d, 0x46, 0x3a, 0x05, 0xaf, 0x5a, 0x32, 0xc5, 0xe0, 0x12,
- 0xae, 0xd1, 0x87, 0xab, 0x1c, 0x44, 0x0b, 0xc7, 0x8d, 0x90, 0xda, 0x4d,
- 0x7e, 0x24, 0x9b, 0x26, 0x11, 0x27, 0x77, 0x04, 0x3b, 0x6c, 0xba, 0x26,
- 0xea, 0xf6, 0x2a, 0x4b, 0xc3, 0x2a, 0x5e, 0xe6, 0xe4, 0x30, 0x11, 0x3a,
- 0xc6, 0x25, 0x1c, 0x16, 0xd9, 0xbc, 0x62, 0xf1, 0xbb, 0x2d, 0x6c, 0xa9,
- 0xa1, 0xdd, 0x5f, 0x4e, 0xf2, 0x41, 0x32, 0x11, 0x4c, 0x76, 0x49, 0xf8,
- 0xd5, 0xb0, 0xc6, 0x41, 0xed, 0x5e, 0xcf, 0xd9, 0xdf, 0x15, 0xd2, 0xd3,
- 0xe1, 0xa6, 0x3c, 0xe8, 0x52, 0x5e, 0xc2, 0x6d, 0xb5, 0xb4, 0x43, 0xd3,
- 0x05, 0x55, 0xe4, 0x8e, 0xe2, 0x71, 0x57, 0x4e, 0xaf, 0xd6, 0x34, 0xa0,
- 0x74, 0xe9, 0xd2, 0x39, 0x53, 0x9e, 0x61, 0x80, 0x6a, 0xcb, 0x48, 0xe5,
- 0x09, 0x7b, 0xaf, 0x6f, 0x48, 0x0a, 0x8e, 0xb8, 0x33, 0x28, 0x85, 0x37,
- 0xfa, 0x3b, 0x5c, 0x3d, 0x54, 0xc2, 0x8e, 0x53, 0x5d, 0xd2, 0x90, 0x09,
- 0x16, 0xab, 0xd0, 0xaa, 0x69, 0xb8, 0x1b, 0x5d, 0xb1, 0xb1, 0x16, 0x87,
- 0x98, 0xca, 0xc8, 0x14, 0xc6, 0xc3, 0x59, 0x28, 0xae, 0x36, 0x53, 0x84,
- 0xea, 0x93, 0x89, 0xd4, 0xce, 0xdb, 0xb1, 0x64, 0x51, 0x5c, 0xd7, 0x84,
- 0xe5, 0x5e, 0xf7, 0x8e, 0x08, 0xf4, 0x5c, 0xb8, 0x2d, 0x7e, 0x09, 0xdb,
- 0xf4, 0xba, 0xac, 0xdc, 0x19, 0x54, 0x80, 0x6f, 0x9b, 0xcf, 0x60, 0xf9,
- 0xd4, 0x3c, 0xda, 0xce, 0xcb, 0xcd, 0x2e, 0x8b, 0x5e, 0x48, 0x6d, 0xe3,
- 0x20, 0xe3, 0x41, 0x3e, 0xba, 0xab, 0x71, 0xf6, 0xc7, 0x7b, 0x01, 0xce,
- 0x6e, 0x1e, 0x6d, 0x01, 0x94, 0x7a, 0xe3, 0x9f, 0x67, 0xb1, 0x26, 0x0a,
- 0x23, 0xa4, 0x92, 0x6b, 0xb6, 0x84, 0x8c, 0x5e, 0xb1, 0xde, 0xde, 0x31,
- 0x98, 0x30, 0x16, 0x16, 0x83, 0x56, 0x2e, 0x49, 0x2e, 0x2c, 0xb6, 0x7a,
- 0xd1, 0xcb, 0x99, 0xc4, 0x77, 0x0b, 0xec, 0x8c, 0x04, 0x8b, 0x23, 0x65,
- 0x31, 0x94, 0x01, 0xf7, 0x16, 0x20, 0xd4, 0x52, 0x32, 0xe4, 0xb2, 0x6b,
- 0x2a, 0xf6, 0x35, 0xca, 0x87, 0xb6, 0x28, 0x89, 0x01, 0x8a, 0x13, 0x94,
- 0x01, 0xfd, 0x92, 0x68, 0xd8, 0x8f, 0x4e, 0x84, 0x85, 0x94, 0x10, 0x35,
- 0x2e, 0x06, 0x40, 0x4b, 0xab, 0xd0, 0x62, 0x38, 0xc5, 0x3b, 0x8e, 0x6b,
- 0x41, 0x3e, 0xbf, 0x65, 0x22, 0x22, 0x29, 0xab, 0x30, 0x64, 0x1b, 0x28,
- 0x2b, 0xa9, 0xb9, 0xe2, 0x08, 0x66, 0x02, 0xa0, 0x4d, 0xdc, 0x83, 0xf5,
- 0xb8, 0xc4, 0x40, 0xcc, 0x91, 0xfb, 0x8d, 0xfa, 0x24, 0x07, 0x4f, 0x88,
- 0xd3, 0xcb, 0xea, 0xef, 0xed, 0x85, 0x59, 0x80, 0x46, 0x8f, 0x57, 0x18,
- 0x72, 0x48, 0x71, 0xd4, 0x56, 0xd7, 0x13, 0xf2, 0x10, 0x37, 0x93, 0x5b,
- 0xf0, 0x86, 0x96, 0xd1, 0x2f, 0x95, 0xe0, 0x54, 0x1a, 0xc8, 0x0a, 0x58,
- 0x37, 0x58, 0xb3, 0x19, 0x26, 0xcf, 0xbb, 0xb8, 0x61, 0x30, 0x87, 0x06,
- 0xa2, 0xc2, 0x72, 0x7f, 0x6d, 0x9d, 0xd6, 0xa2, 0x8f, 0xeb, 0xaf, 0x6d,
- 0xd0, 0xfc, 0x43, 0x4e, 0xa3, 0x1d, 0xda, 0x5a, 0x92, 0x94, 0x39, 0x7d,
- 0x9e, 0x65, 0x37, 0x94, 0xe8, 0x4b, 0xb1, 0x22, 0xf0, 0x8e, 0x97, 0x49,
- 0xc0, 0x2d, 0xb4, 0xbb, 0x12, 0x4d, 0x37, 0xe1, 0x43, 0x4a, 0x92, 0xd8,
- 0x38, 0x29, 0x2b, 0x03, 0x13, 0xa9, 0xd4, 0xc6, 0x76, 0xb5, 0xe6, 0x99,
- 0x35, 0x69, 0x93, 0xfe, 0x7d, 0x43, 0x62, 0x40, 0xae, 0xb9, 0x0b, 0xee,
- 0x9d, 0xb7, 0x28, 0x4d, 0xb0, 0x09, 0x27, 0xbf, 0x8e, 0xd2, 0x64, 0xa2,
- 0x41, 0x21, 0x38, 0x36, 0xbf, 0xee, 0x0f, 0x8b, 0x61, 0xa5, 0x7f, 0xc8,
- 0x19, 0x25, 0x64, 0x56, 0x2b, 0x3a, 0xe5, 0x1f, 0xe9, 0x66, 0x79, 0x8d,
- 0x75, 0x0e, 0x38, 0x47, 0x59, 0x69, 0xdc, 0x29, 0x9d, 0xea, 0x50, 0x19,
- 0x21, 0xe7, 0x90, 0x9b, 0x53, 0x2e, 0x87, 0x9c, 0x96, 0x88, 0x8e, 0x38,
- 0x09, 0x38, 0x92, 0x2e, 0xca, 0x44, 0x83, 0xb6, 0x97, 0xa6, 0xed, 0x88,
- 0x56, 0xbc, 0xe2, 0x43, 0x21, 0x85, 0x58, 0x44, 0x16, 0x5a, 0x7e, 0x74,
- 0xa7, 0x29, 0x9c, 0xa8, 0x91, 0xde, 0x84, 0x44, 0x8c, 0x65, 0x32, 0x4e,
- 0xd5, 0x7c, 0x23, 0x12, 0x66, 0x3e, 0x84, 0x95, 0x63, 0xf0, 0x37, 0xfa,
- 0x0c, 0xad, 0xa3, 0x9e, 0xda, 0xce, 0x92, 0x1d, 0x6e, 0xa1, 0x51, 0x74,
- 0x90, 0xef, 0x8a, 0x48, 0x58, 0x4e, 0xb2, 0xb9, 0xc6, 0xf6, 0x76, 0xa3,
- 0x54, 0x20, 0x03, 0x80, 0x42, 0x79, 0x37, 0x16, 0xb1, 0x2f, 0xaf, 0x9a,
- 0x44, 0x5b, 0xae, 0xf2, 0x74, 0x8d, 0x6e, 0xe3, 0x51, 0xb4, 0xd9, 0x68,
- 0xfd, 0xd1, 0xce, 0x2e, 0x8d, 0xf6, 0xd1, 0xce, 0xd3, 0xad, 0x95, 0x97,
- 0xf1, 0x47, 0x86, 0x2c, 0xa7, 0x93, 0xf3, 0x80, 0x03, 0xbf, 0x6e, 0x3c,
- 0x4e, 0xf3, 0x5a, 0x6d, 0x3b, 0xed, 0x6e, 0x8e, 0x69, 0xf0, 0x98, 0x87,
- 0xf8, 0x14, 0x7e, 0x33, 0x29, 0xd3, 0x98, 0xa0, 0x39, 0xee, 0x81, 0x92,
- 0x4d, 0x86, 0x7b, 0x7c, 0x43, 0xc0, 0x3c, 0x14, 0x14, 0x9b, 0x64, 0x65,
- 0x78, 0x3e, 0xa2, 0xba, 0x55, 0xe5, 0x15, 0x96, 0x83, 0xf7, 0x94, 0x36,
- 0x7c, 0x4d, 0xde, 0xa3, 0xb8, 0x6d, 0x4a, 0xb8, 0x61, 0xa2, 0x4a, 0xe8,
- 0x65, 0x06, 0x5e, 0x16, 0x9a, 0xa1, 0xe7, 0x8c, 0x05, 0xb7, 0x1d, 0xec,
- 0x54, 0xb0, 0x48, 0x39, 0xdf, 0x8a, 0xbc, 0xed, 0x77, 0xc6, 0x80, 0xab,
- 0x42, 0x64, 0xf4, 0x3c, 0x9b, 0x65, 0xe5, 0x15, 0x5a, 0xa4, 0xa6, 0x98,
- 0x62, 0x74, 0xe9, 0x29, 0x70, 0xe4, 0x5e, 0x94, 0xab, 0x25, 0x89, 0x80,
- 0x52, 0xf1, 0x0c, 0x00, 0x0b, 0x62, 0x12, 0x15, 0x2c, 0x43, 0xfe, 0x92,
- 0x6b, 0x1f, 0xdb, 0x69, 0x06, 0xab, 0x4a, 0x66, 0xb4, 0x66, 0x08, 0x27,
- 0x3d, 0xb9, 0x13, 0x7c, 0x00, 0xdc, 0x6c, 0x64, 0x14, 0x16, 0x33, 0xee,
- 0x75, 0xbf, 0x4f, 0xe4, 0xdb, 0x67, 0xff, 0xfd, 0x05, 0x8a, 0xc7, 0xde,
- 0x3c, 0x31, 0x30, 0x6a, 0x13, 0xf7, 0xfa, 0xac, 0x0f, 0xec, 0x99, 0x64,
- 0x18, 0x34, 0xae, 0x15, 0x04, 0x72, 0x02, 0x9f, 0xfd, 0x88, 0xe1, 0xb3,
- 0x5f, 0x99, 0x8f, 0xb7, 0xa8, 0xf8, 0x0f, 0xa2, 0x2f, 0xad, 0x38, 0x10,
- 0x66, 0xdb, 0x3f, 0x41, 0xf1, 0x0f, 0xa7, 0xf5, 0xf5, 0x8f, 0x88, 0x1d,
- 0xd8, 0x7a, 0xa6, 0x85, 0x6a, 0x38, 0x8f, 0xf1, 0x2a, 0x42, 0x10, 0xed,
- 0xba, 0x5d, 0xa1, 0x29, 0x7d, 0x22, 0xb6, 0x52, 0x1a, 0xaa, 0xd6, 0x64,
- 0xb0, 0x4c, 0x6b, 0x44, 0x4f, 0xf0, 0x4e, 0xb0, 0x03, 0x14, 0xe6, 0x82,
- 0x6a, 0x11, 0x2f, 0x18, 0x8e, 0xd0, 0xe2, 0x0e, 0x95, 0x01, 0xbd, 0x9b,
- 0x0b, 0x7f, 0xb0, 0x43, 0x01, 0x77, 0xa5, 0x04, 0x1d, 0xfc, 0x8a, 0x7b,
- 0x66, 0xfc, 0x34, 0x13, 0x2f, 0x03, 0x04, 0x36, 0x44, 0x6c, 0xa8, 0x56,
- 0x9c, 0x4c, 0x32, 0x5b, 0x3a, 0x03, 0xff, 0x8c, 0x31, 0x87, 0xee, 0x28,
- 0xe2, 0xe7, 0xd1, 0x06, 0x4d, 0xff, 0x67, 0x03, 0x97, 0xb2, 0x21, 0x1f,
- 0x4e, 0xd2, 0xaf, 0xbf, 0x45, 0xa0, 0x90, 0x0e, 0xaa, 0xee, 0x1b, 0xeb,
- 0xed, 0xa5, 0x05, 0xb8, 0x72, 0xf7, 0xf1, 0xcb, 0xdd, 0xc0, 0x3e, 0x4a,
- 0xb4, 0x0a, 0x79, 0x24, 0xbf, 0xe6, 0x3f, 0x5a, 0x90, 0xc9, 0xa8, 0xce,
- 0xc5, 0xcb, 0x57, 0x47, 0xb0, 0xc1, 0x7d, 0x0b, 0x75, 0x2a, 0xd8, 0x27,
- 0x8c, 0x60, 0x6a, 0xdd, 0x36, 0x6c, 0x35, 0xe3, 0xf6, 0x5a, 0xe4, 0x54,
- 0x86, 0x01, 0xaa, 0xe1, 0xe8, 0x93, 0x21, 0x69, 0x92, 0x55, 0xb8, 0x1b,
- 0xa0, 0x9c, 0x45, 0xa7, 0xb0, 0xbd, 0x38, 0xba, 0x8d, 0x6f, 0x37, 0x24,
- 0x3e, 0x7d, 0xe3, 0xb0, 0x89, 0x17, 0x64, 0x20, 0x76, 0x4a, 0xe3, 0x38,
- 0x89, 0x36, 0xfe, 0x84, 0x20, 0x61, 0x58, 0x05, 0x91, 0x67, 0x27, 0xfc,
- 0x82, 0x07, 0x45, 0x09, 0x95, 0x70, 0x3a, 0xe5, 0x1a, 0x6d, 0x3a, 0x26,
- 0xb9, 0x62, 0x7d, 0x1d, 0x14, 0x82, 0x0b, 0x96, 0xa5, 0x14, 0xe1, 0x64,
- 0xa6, 0xac, 0x76, 0xa4, 0x8d, 0x92, 0xd1, 0x3d, 0xc9, 0xfd, 0xe9, 0x17,
- 0x15, 0xa4, 0x9c, 0x75, 0xeb, 0xce, 0xe2, 0x01, 0xf1, 0x48, 0x28, 0xd6,
- 0x76, 0x38, 0xa4, 0x9a, 0x01, 0x74, 0x07, 0xc1, 0x97, 0x97, 0x97, 0x8c,
- 0x05, 0x4d, 0x73, 0xce, 0x9b, 0xda, 0x13, 0x4c, 0x3f, 0x1a, 0x83, 0x02,
- 0x46, 0x86, 0x0e, 0x34, 0x30, 0x2c, 0x83, 0x32, 0x73, 0xf7, 0xf7, 0xd3,
- 0xe1, 0x26, 0xbb, 0xbd, 0x74, 0xf0, 0x2e, 0xe9, 0x3c, 0x94, 0x56, 0x2d,
- 0x69, 0x5a, 0x4c, 0x9d, 0x43, 0x17, 0x02, 0x34, 0x4c, 0x98, 0x0e, 0x5d,
- 0xa2, 0x57, 0x91, 0x3e, 0x33, 0x51, 0x3f, 0xe3, 0x04, 0x28, 0xf5, 0x4e,
- 0xd2, 0x6a, 0x27, 0x08, 0xd7, 0x28, 0x0a, 0x54, 0x3a, 0xf5, 0xc4, 0xa6,
- 0x09, 0x05, 0x9c, 0x25, 0x0a, 0x76, 0x17, 0xa3, 0x85, 0x9c, 0x06, 0x81,
- 0x6b, 0xc4, 0xf2, 0xa8, 0xc5, 0xc7, 0x13, 0xd4, 0xbb, 0x91, 0x83, 0x7a,
- 0xd7, 0xdc, 0x7a, 0x17, 0x03, 0x4f, 0x2c, 0x38, 0xca, 0x12, 0x09, 0xbf,
- 0x4f, 0x80, 0xdf, 0x16, 0xa5, 0x15, 0x01, 0x5c, 0x10, 0xef, 0x26, 0x61,
- 0x2a, 0xd3, 0xdc, 0xa6, 0x15, 0x67, 0xac, 0xc1, 0x66, 0x89, 0x8c, 0xbd,
- 0xfd, 0x2f, 0xbf, 0x0c, 0xfa, 0x5a, 0xb9, 0x48, 0x0d, 0xec, 0x30, 0x2e,
- 0x94, 0x57, 0x19, 0x89, 0x4d, 0x37, 0x44, 0xfb, 0xa5, 0x3a, 0x19, 0xb1,
- 0xd2, 0x70, 0x82, 0xbd, 0xfa, 0x81, 0x05, 0xc4, 0xba, 0xa7, 0x24, 0x12,
- 0xb2, 0x34, 0x40, 0x56, 0x27, 0xbc, 0x7d, 0x61, 0x15, 0xc2, 0x17, 0x7a,
- 0x2a, 0x88, 0x30, 0x0c, 0x7e, 0x24, 0xd5, 0xed, 0x05, 0xaf, 0x8e, 0xd9,
- 0x7c, 0x5a, 0x0d, 0x09, 0xb2, 0x8e, 0x60, 0x00, 0x64, 0x39, 0x36, 0x5a,
- 0x70, 0xd0, 0x37, 0x22, 0x4d, 0x56, 0x1b, 0x68, 0x25, 0x99, 0x2e, 0x1d,
- 0xd2, 0xec, 0xb6, 0x51, 0x5e, 0x93, 0xd1, 0xe1, 0x66, 0xd1, 0xb7, 0x84,
- 0xce, 0x89, 0x1d, 0x34, 0x9a, 0xa3, 0xb2, 0x07, 0x97, 0x69, 0xe5, 0x23,
- 0xc5, 0x3a, 0x88, 0x61, 0x4b, 0x1a, 0x0f, 0x99, 0x8a, 0x05, 0xe9, 0x36,
- 0x3a, 0x34, 0x55, 0x70, 0xb3, 0xb1, 0xf2, 0x0f, 0x54, 0xc2, 0x6e, 0xd0,
- 0x7f, 0xf1, 0x2d, 0x6d, 0xc7, 0xa1, 0xac, 0xbd, 0x20, 0x3f, 0x7f, 0x1b,
- 0xac, 0x89, 0x2d, 0xb0, 0x65, 0x54, 0x9f, 0xb9, 0xaa, 0x92, 0xe1, 0x95,
- 0x15, 0x81, 0x08, 0x79, 0x8e, 0xca, 0xb4, 0x8a, 0x2f, 0x9b, 0x17, 0x98,
- 0x71, 0x8f, 0xbc, 0xfc, 0x58, 0x42, 0x85, 0x36, 0x8d, 0x22, 0xf8, 0x8d,
- 0x80, 0xfe, 0xe1, 0x50, 0x42, 0x2b, 0x51, 0x0a, 0xb7, 0x46, 0xee, 0x05,
- 0x4f, 0x7b, 0xf7, 0x33, 0xbe, 0xeb, 0xac, 0x93, 0xbf, 0xf7, 0x6e, 0x0a,
- 0x8e, 0xd4, 0x66, 0xe4, 0x25, 0xb6, 0x60, 0x71, 0xee, 0x3d, 0x9e, 0x98,
- 0xd8, 0x83, 0x60, 0x99, 0xaf, 0x18, 0xa7, 0x6a, 0x6b, 0x17, 0x10, 0x65,
- 0x5d, 0xa2, 0xf1, 0x14, 0x47, 0x49, 0x55, 0x19, 0x75, 0x55, 0x31, 0x36,
- 0xae, 0x2a, 0x16, 0x58, 0x24, 0x87, 0x7d, 0x15, 0xd4, 0x95, 0x9f, 0xb9,
- 0x8f, 0x0c, 0xb1, 0x5b, 0x9f, 0x31, 0xe6, 0xc1, 0x2e, 0x68, 0xbf, 0x68,
- 0x95, 0xa5, 0x80, 0x3c, 0x1b, 0xbe, 0x61, 0x60, 0x06, 0x3e, 0xc1, 0xb7,
- 0xf6, 0x88, 0x17, 0x80, 0xdc, 0x6a, 0x65, 0xf6, 0x1b, 0x6b, 0x82, 0x82,
- 0x8d, 0xa5, 0xd1, 0x31, 0xe4, 0xca, 0x4a, 0xd1, 0x07, 0xfd, 0x0c, 0x28,
- 0x6a, 0xc6, 0x22, 0x31, 0xd2, 0xdb, 0x46, 0xe9, 0x17, 0xa5, 0x4c, 0x74,
- 0x71, 0xf9, 0xae, 0x44, 0xcd, 0xb1, 0x48, 0x2f, 0x17, 0x78, 0xf5, 0x32,
- 0x16, 0x2e, 0x28, 0x8e, 0x57, 0xbc, 0xfd, 0x72, 0x9b, 0x66, 0x73, 0xcd,
- 0xce, 0xf5, 0x20, 0x1b, 0xe0, 0xad, 0x2d, 0x9e, 0xf3, 0x0c, 0x96, 0xab,
- 0x5a, 0xcc, 0x38, 0x10, 0x96, 0x4a, 0x86, 0x2e, 0x06, 0xbf, 0x52, 0xd0,
- 0x51, 0x2e, 0x53, 0x67, 0x18, 0x5d, 0x8b, 0xb5, 0x98, 0x8e, 0x3d, 0xaf,
- 0x43, 0x4a, 0x59, 0xff, 0xe4, 0x93, 0x4e, 0x28, 0x39, 0x58, 0x18, 0x00,
- 0xd7, 0xf2, 0xc1, 0xbb, 0xe5, 0x4f, 0x4e, 0x50, 0x30, 0x09, 0xfd, 0xb4,
- 0x26, 0x14, 0x3a, 0xe6, 0x9d, 0xea, 0xf7, 0xb3, 0xfc, 0x66, 0xa6, 0x5a,
- 0x88, 0xc0, 0xb7, 0xb0, 0x9d, 0x9f, 0x44, 0x59, 0xcc, 0x00, 0xc4, 0xa9,
- 0x2a, 0xd0, 0x1f, 0xb9, 0xb0, 0x61, 0xde, 0x04, 0xb8, 0x08, 0xfb, 0x75,
- 0x17, 0x42, 0x3f, 0x65, 0x45, 0xfe, 0x57, 0xe3, 0x07, 0x40, 0xd6, 0xd7,
- 0x2a, 0xac, 0x71, 0x5a, 0x2d, 0x26, 0xa9, 0x4e, 0x85, 0xa1, 0xd5, 0xad,
- 0x1c, 0x5d, 0xd1, 0xb4, 0x36, 0x80, 0x77, 0xe2, 0xda, 0x6f, 0x84, 0xab,
- 0xab, 0x33, 0xaa, 0xa2, 0x71, 0x7f, 0x10, 0xab, 0xe6, 0x63, 0x82, 0x2e,
- 0x5e, 0xba, 0x43, 0x0c, 0x0f, 0x41, 0xd5, 0xa4, 0x48, 0x80, 0x63, 0xfe,
- 0x3a, 0xbf, 0x6c, 0xc2, 0x7b, 0x39, 0x07, 0x96, 0xea, 0xd9, 0x7a, 0x58,
- 0xe8, 0x72, 0xfd, 0x3e, 0x8f, 0x64, 0x3c, 0x5f, 0x7f, 0x5b, 0x6b, 0x2e,
- 0x70, 0x05, 0x6f, 0x4b, 0xa5, 0xb3, 0xe1, 0x65, 0xb6, 0x7c, 0x11, 0x28,
- 0xf0, 0xdb, 0x40, 0x58, 0x95, 0x57, 0x79, 0x2a, 0x3b, 0x37, 0x23, 0xbf,
- 0x80, 0x65, 0x1b, 0xa5, 0xe2, 0xff, 0x04, 0xd1, 0x7c, 0xda, 0x87, 0x4c,
- 0x77, 0xfa, 0x9f, 0xf3, 0xab, 0x19, 0xfe, 0x81, 0xed, 0x63, 0xf3, 0x5f,
- 0xef, 0x06, 0x93, 0xc6, 0xb6, 0x5b, 0xc7, 0xea, 0x0c, 0x16, 0x6f, 0x21,
- 0x01, 0x06, 0x72, 0x98, 0x5a, 0xcd, 0x15, 0xd2, 0x23, 0x48, 0xdd, 0x80,
- 0x59, 0x02, 0x0f, 0x0f, 0x95, 0x38, 0x76, 0x5e, 0x65, 0xc8, 0x91, 0x20,
- 0x2f, 0xcc, 0xcc, 0xc5, 0xc0, 0xd5, 0xec, 0x02, 0x2a, 0x4b, 0xfb, 0xc4,
- 0x3b, 0x18, 0xa8, 0x70, 0xf7, 0xf5, 0xe1, 0xd5, 0xe2, 0x92, 0xaa, 0xa6,
- 0x62, 0xbc, 0x42, 0xe7, 0x5e, 0xb3, 0x46, 0xa7, 0x0d, 0x7b, 0x6d, 0xd8,
- 0xfa, 0x55, 0x39, 0x39, 0xe1, 0x04, 0xf6, 0x57, 0x13, 0x1d, 0x22, 0x53,
- 0x76, 0x6b, 0x10, 0xae, 0x97, 0xb8, 0xc1, 0xf2, 0x71, 0x97, 0xd7, 0x4c,
- 0xea, 0xbc, 0xd8, 0x02, 0x06, 0x4b, 0x66, 0x70, 0x93, 0x0e, 0xbe, 0xfe,
- 0x16, 0x5d, 0x7d, 0xb7, 0xbd, 0xab, 0x6a, 0x3a, 0x61, 0x41, 0x1b, 0x57,
- 0x6e, 0x1b, 0xff, 0xec, 0x44, 0x4b, 0x64, 0x3e, 0x90, 0x66, 0x5b, 0x9b,
- 0x75, 0xb0, 0x50, 0x9d, 0x26, 0xc7, 0x79, 0xbe, 0xb4, 0x45, 0x75, 0x65,
- 0xd1, 0x9a, 0x38, 0x00, 0x2e, 0x0c, 0x6b, 0x62, 0xb3, 0x11, 0x98, 0x1e,
- 0xe8, 0x7e, 0xa9, 0x5d, 0x93, 0xa1, 0x72, 0x05, 0x14, 0xf7, 0xc6, 0xe6,
- 0x40, 0xbd, 0x69, 0xbe, 0xee, 0x2a, 0x64, 0x68, 0x56, 0x2e, 0x59, 0x1a,
- 0xd5, 0xd9, 0xa4, 0xc6, 0xe1, 0x9f, 0xcc, 0xeb, 0xf8, 0x0f, 0x9c, 0x62,
- 0xb8, 0xaa, 0x97, 0xce, 0x06, 0x03, 0x17, 0xf4, 0x9d, 0x6d, 0x8a, 0xd8,
- 0xd5, 0x68, 0xb7, 0x68, 0xa3, 0x8b, 0xca, 0x00, 0xe8, 0x35, 0x1b, 0x64,
- 0x43, 0xd5, 0xec, 0x8e, 0x7f, 0x2c, 0x72, 0xe1, 0x6d, 0xa3, 0xdc, 0x13,
- 0x67, 0x11, 0x77, 0x84, 0x1e, 0x28, 0x69, 0xf4, 0x2b, 0x07, 0xfe, 0x73,
- 0x87, 0x86, 0xde, 0xc5, 0xbf, 0x7e, 0xee, 0xd8, 0xd1, 0xff, 0x4c, 0x9b,
- 0xf3, 0xa7, 0x6c, 0xf6, 0x27, 0x9c, 0xc1, 0xcf, 0x9d, 0x87, 0xee, 0xb1,
- 0xe8, 0xb4, 0x4e, 0x2f, 0x4e, 0x27, 0xb5, 0x3e, 0x3a, 0x1b, 0x51, 0x3b,
- 0x30, 0xa8, 0x45, 0xe6, 0xcf, 0xc6, 0x4e, 0x75, 0x7a, 0x5e, 0x30, 0xbc,
- 0x5c, 0x64, 0x51, 0x48, 0x88, 0x80, 0x65, 0xb1, 0xcb, 0xd0, 0xa5, 0x32,
- 0x0c, 0x9e, 0x6d, 0xda, 0x3e, 0x81, 0x4b, 0x6c, 0xec, 0x0c, 0x24, 0xdd,
- 0x65, 0xb6, 0xe0, 0x27, 0x11, 0x92, 0x2e, 0x3c, 0xab, 0xef, 0x23, 0xff,
- 0xe2, 0x31, 0xaf, 0x7b, 0x17, 0xcd, 0x5f, 0xa1, 0x07, 0x83, 0x87, 0x40,
- 0x04, 0x8b, 0xb2, 0xab, 0x60, 0x25, 0x10, 0x2c, 0xd6, 0x8c, 0xa3, 0x8e,
- 0x45, 0x2d, 0x40, 0xd8, 0x8f, 0xcc, 0x96, 0x95, 0x28, 0x3d, 0x1e, 0x3b,
- 0xcd, 0x40, 0x82, 0x27, 0xff, 0xec, 0x84, 0xd5, 0xe4, 0x6d, 0x64, 0xff,
- 0x04, 0xf0, 0x53, 0xce, 0x13, 0x74, 0xfb, 0xa0, 0x4d, 0x4b, 0x34, 0x68,
- 0x9e, 0x26, 0xaf, 0xcd, 0x12, 0x1a, 0xde, 0xc0, 0x26, 0x8b, 0xf2, 0xeb,
- 0x0e, 0x08, 0x3f, 0x7f, 0x42, 0x5f, 0x5f, 0x3a, 0xfb, 0x13, 0x10, 0xd2,
- 0x02, 0xb6, 0xca, 0x9e, 0xca, 0xdb, 0x78, 0x7a, 0x07, 0x03, 0xdf, 0x58,
- 0x75, 0x32, 0x85, 0x5f, 0x8d, 0xb0, 0xb2, 0x36, 0xc7, 0x8f, 0x36, 0x93,
- 0x30, 0xf8, 0x5c, 0x3a, 0x27, 0x4e, 0xbe, 0xff, 0xba, 0x69, 0x5e, 0x24,
- 0xf8, 0x64, 0x0f, 0xb1, 0xd3, 0xb2, 0x55, 0xd2, 0xbf, 0xbe, 0x3e, 0xfb,
- 0xcb, 0x9f, 0xb4, 0x81, 0x9f, 0x3b, 0x3f, 0xc6, 0xfc, 0x29, 0xe1, 0x85,
- 0x1f, 0x44, 0x67, 0x7f, 0x59, 0x9f, 0x72, 0x97, 0x75, 0xf0, 0x2d, 0xff,
- 0x42, 0x64, 0xbc, 0xac, 0x59, 0x94, 0xff, 0xf5, 0x9d, 0xe8, 0x7d, 0x7a,
- 0x47, 0xb0, 0x8a, 0xa4, 0xf8, 0xcf, 0xe7, 0x88, 0x40, 0xa9, 0x08, 0xd9,
- 0x15, 0x23, 0x64, 0x93, 0x91, 0x23, 0x19, 0xe4, 0x8c, 0xf9, 0x54, 0x79,
- 0x71, 0xd3, 0xf0, 0x15, 0x86, 0x32, 0xfd, 0x43, 0x88, 0x89, 0x33, 0xb2,
- 0x7a, 0x12, 0x8f, 0x53, 0xcf, 0x55, 0xa9, 0x83, 0x1e, 0x77, 0xa3, 0x13,
- 0x8c, 0xef, 0xf3, 0xd6, 0x55, 0x2b, 0x75, 0xf1, 0x6f, 0x24, 0x6c, 0x51,
- 0x29, 0x32, 0xd4, 0x9b, 0x36, 0x7e, 0xb7, 0x41, 0x6d, 0xa1, 0x75, 0x80,
- 0x2e, 0x40, 0x72, 0xf3, 0x73, 0xe2, 0xc3, 0x9f, 0x42, 0x61, 0x0f, 0x12,
- 0x5b, 0x26, 0xc6, 0x86, 0x71, 0x3e, 0x19, 0x49, 0x04, 0x06, 0x50, 0x39,
- 0x6f, 0xb0, 0x6a, 0x3f, 0x28, 0x48, 0xe0, 0x52, 0x48, 0x54, 0x86, 0x74,
- 0x1b, 0x90, 0x7e, 0x24, 0x16, 0x8c, 0x4d, 0xd5, 0x36, 0xb0, 0x37, 0x89,
- 0x98, 0xc8, 0xff, 0x84, 0x9a, 0xfc, 0x20, 0x25, 0x23, 0x97, 0xc1, 0x72,
- 0x8e, 0xc5, 0xc7, 0xd4, 0x5c, 0x3b, 0x5c, 0x5b, 0x73, 0x46, 0xf4, 0x90,
- 0x70, 0x2e, 0x8d, 0xe2, 0x39, 0x63, 0x79, 0xc7, 0x17, 0xe4, 0xa6, 0x61,
- 0xc7, 0xac, 0x26, 0x39, 0xe1, 0xdd, 0x11, 0x9e, 0xac, 0x09, 0x4b, 0xc6,
- 0x15, 0xf2, 0x4f, 0x56, 0xf4, 0x3b, 0xf1, 0x47, 0x39, 0xd1, 0xcb, 0x34,
- 0x7b, 0xd9, 0xac, 0x9e, 0xf7, 0xc2, 0x8f, 0x92, 0xf6, 0x12, 0xef, 0x1e,
- 0x18, 0xed, 0x3c, 0x91, 0xc7, 0xc3, 0xcd, 0xbb, 0xc5, 0x73, 0x64, 0x54,
- 0xd8, 0x23, 0x2d, 0xff, 0x92, 0xf6, 0xf7, 0x4c, 0xfb, 0x3e, 0x16, 0x6e,
- 0x32, 0xe3, 0x8a, 0x32, 0xe1, 0x6e, 0x2f, 0x6c, 0xce, 0xb1, 0x7a, 0x18,
- 0xac, 0x4d, 0xd7, 0x35, 0x0c, 0x88, 0x35, 0x55, 0x6a, 0xd9, 0x70, 0xa0,
- 0xab, 0x5f, 0x3e, 0xae, 0xa2, 0xd2, 0x18, 0xa4, 0xdb, 0xd1, 0x3c, 0x3c,
- 0x30, 0xea, 0x58, 0x04, 0x6b, 0x21, 0xac, 0x1c, 0xce, 0x22, 0xb0, 0xf8,
- 0x03, 0x8e, 0xb7, 0xb2, 0xb5, 0x37, 0x32, 0x17, 0x1e, 0xcb, 0x42, 0x6f,
- 0x07, 0xeb, 0x31, 0x2b, 0x00, 0x83, 0xe7, 0xd2, 0x45, 0xc6, 0xcb, 0x05,
- 0xb8, 0x48, 0xf1, 0x90, 0x93, 0xb0, 0xb9, 0x21, 0xa6, 0x12, 0xec, 0x28,
- 0x61, 0x77, 0xa7, 0x94, 0xe2, 0x4b, 0x08, 0x2c, 0x5c, 0x0c, 0x34, 0x71,
- 0x40, 0xa4, 0x38, 0x20, 0x68, 0x65, 0x73, 0x26, 0x9c, 0x02, 0x4b, 0xaa,
- 0x0c, 0x73, 0xa1, 0xba, 0x5a, 0x55, 0x25, 0x5f, 0xf3, 0x75, 0x96, 0x58,
- 0x1a, 0x63, 0x85, 0x93, 0x22, 0x85, 0xe5, 0x50, 0x6c, 0x7c, 0xbd, 0xb5,
- 0xd1, 0x5e, 0x28, 0xda, 0x88, 0xce, 0xf5, 0x7a, 0x4b, 0x6a, 0xfc, 0x2b,
- 0xa9, 0xe6, 0x04, 0x34, 0x4d, 0xc6, 0xa2, 0x29, 0x86, 0xad, 0xa6, 0xb4,
- 0x99, 0x94, 0x68, 0x56, 0x56, 0x21, 0x10, 0x40, 0xae, 0x07, 0x91, 0xcd,
- 0xe8, 0x64, 0x72, 0x85, 0x1c, 0x26, 0x6f, 0x37, 0xa2, 0x81, 0x4b, 0xfb,
- 0x96, 0x07, 0xae, 0x9c, 0xed, 0x5b, 0xfb, 0xd1, 0x1b, 0xdc, 0x8b, 0x5e,
- 0x1a, 0x1b, 0x87, 0x63, 0xa2, 0x58, 0x26, 0x53, 0x6f, 0x7c, 0xbd, 0xc9,
- 0x77, 0x93, 0x35, 0x90, 0x39, 0x7d, 0x6f, 0x44, 0x3f, 0x07, 0x81, 0x9e,
- 0xe9, 0x45, 0x67, 0x38, 0x42, 0xaf, 0x4b, 0x1f, 0x8f, 0x0e, 0xd1, 0xf9,
- 0xf7, 0x0d, 0x79, 0xad, 0xe5, 0xf9, 0xc3, 0x6d, 0xfa, 0xa8, 0x21, 0x05,
- 0x2f, 0x6d, 0x65, 0x8b, 0x0d, 0xfc, 0x5f, 0x7f, 0x8b, 0x8f, 0xab, 0x12,
- 0xb0, 0x11, 0xf5, 0x7a, 0xc0, 0x7a, 0xca, 0x69, 0x13, 0x5c, 0xce, 0x03,
- 0xf1, 0x23, 0xd9, 0x80, 0x2e, 0x56, 0x14, 0x43, 0xa4, 0xc0, 0x0b, 0x19,
- 0x69, 0x54, 0x61, 0x66, 0x7b, 0x22, 0x7f, 0x55, 0x7c, 0xdd, 0x8b, 0x8e,
- 0x4c, 0x8e, 0x8d, 0x0f, 0xe3, 0xca, 0xde, 0x12, 0xbe, 0x31, 0xc4, 0x1a,
- 0x87, 0x94, 0xf0, 0xe5, 0x20, 0x13, 0x5b, 0x3e, 0x43, 0xda, 0x53, 0x54,
- 0x7a, 0x3a, 0x29, 0xa5, 0x96, 0x03, 0x5c, 0xe9, 0xe2, 0x22, 0xf4, 0x9a,
- 0x2b, 0xd8, 0xc3, 0xcc, 0xc1, 0x23, 0x46, 0x25, 0x91, 0xa1, 0xc5, 0x27,
- 0xe2, 0x9e, 0xb1, 0x81, 0xed, 0x4f, 0x4d, 0x4f, 0xe8, 0xe4, 0xf3, 0x10,
- 0x3d, 0xa8, 0xcc, 0x71, 0xf4, 0x65, 0x8c, 0x4f, 0x59, 0x43, 0xbf, 0x52,
- 0x7b, 0x3d, 0x46, 0xb5, 0x2b, 0x92, 0x5f, 0x4c, 0xd9, 0x4d, 0x01, 0x74,
- 0x38, 0xe2, 0xff, 0x83, 0xa4, 0x4c, 0x9f, 0x3c, 0xd2, 0xc8, 0x43, 0x5e,
- 0xa5, 0x52, 0x65, 0xae, 0x9a, 0x3d, 0x95, 0x6f, 0x1f, 0x67, 0x42, 0x4d,
- 0x09, 0x8c, 0x40, 0xa9, 0x51, 0xfc, 0x02, 0xbd, 0xa9, 0x62, 0x70, 0x06,
- 0xbc, 0x43, 0x41, 0x54, 0xbc, 0xac, 0x08, 0x18, 0xf1, 0xe9, 0x13, 0x67,
- 0xd0, 0x2b, 0x2c, 0x0f, 0x0d, 0xfe, 0x29, 0x33, 0x6c, 0xce, 0x28, 0x62,
- 0x6a, 0x45, 0xf2, 0xf3, 0x62, 0x08, 0xd0, 0x6c, 0xc1, 0x75, 0xda, 0x64,
- 0x8e, 0xc6, 0x56, 0xb8, 0xea, 0x00, 0xb9, 0x27, 0xe0, 0x4f, 0x4a, 0x38,
- 0xcd, 0xae, 0x97, 0x12, 0xb5, 0xa3, 0xf5, 0xe8, 0xfb, 0x3c, 0x08, 0x26,
- 0xec, 0xd5, 0x74, 0x8d, 0xfe, 0x80, 0xf1, 0xa2, 0xa0, 0x3b, 0x47, 0x1e,
- 0x63, 0xd1, 0x60, 0x94, 0x32, 0xc0, 0xa0, 0x48, 0xe2, 0xaf, 0x8e, 0x5e,
- 0xbf, 0x3d, 0x3a, 0x6d, 0x71, 0x76, 0x7c, 0x62, 0x2f, 0x47, 0xbd, 0xa6,
- 0x81, 0x7c, 0x64, 0x1d, 0x75, 0x78, 0x3d, 0x74, 0xd6, 0xc5, 0xbd, 0x31,
- 0x35, 0x2d, 0xba, 0x0d, 0x57, 0x8a, 0xc4, 0x04, 0x5a, 0x5f, 0xa1, 0x89,
- 0x5c, 0x08, 0x16, 0x42, 0x6f, 0x47, 0xcb, 0x6e, 0x54, 0x26, 0xaa, 0xd5,
- 0x27, 0xa0, 0x92, 0x04, 0x3e, 0xaa, 0x79, 0xb8, 0x40, 0x01, 0x82, 0x56,
- 0xe2, 0x01, 0xc1, 0x78, 0xde, 0x70, 0x05, 0x23, 0xce, 0xc1, 0x96, 0x08,
- 0x21, 0x27, 0x7b, 0x39, 0x29, 0xdf, 0xb3, 0xf1, 0xa4, 0xa3, 0xef, 0xb3,
- 0x9f, 0x88, 0xe1, 0x62, 0x0c, 0x62, 0x7a, 0xe0, 0xb8, 0x1a, 0x20, 0x72,
- 0x13, 0xf6, 0xaf, 0x4e, 0x5b, 0xb9, 0x8e, 0x6b, 0x06, 0xc1, 0x7c, 0x3c,
- 0x76, 0xbc, 0x29, 0x4d, 0x14, 0x94, 0xe3, 0xe3, 0x76, 0x0c, 0x68, 0xce,
- 0x19, 0x70, 0x67, 0xf8, 0xd9, 0xb2, 0x9f, 0xdc, 0x41, 0x74, 0xa6, 0x45,
- 0xaf, 0xc8, 0x07, 0x79, 0xd5, 0x59, 0x0b, 0x76, 0xd4, 0xe0, 0xaf, 0x7b,
- 0xdb, 0x67, 0x2f, 0xc6, 0xb8, 0xca, 0x19, 0xbe, 0xfe, 0x50, 0xd6, 0x24,
- 0xbc, 0x9b, 0x58, 0xe0, 0xc7, 0x01, 0xee, 0x57, 0xcd, 0x80, 0x30, 0x23,
- 0xfb, 0x27, 0x6f, 0x68, 0x93, 0xce, 0x8f, 0xfa, 0xfd, 0xc8, 0xa0, 0xa2,
- 0x4b, 0x88, 0x67, 0xd7, 0xd3, 0x57, 0x49, 0xfa, 0xa6, 0xe0, 0x0e, 0xdd,
- 0x05, 0xcd, 0x23, 0x88, 0xb4, 0x52, 0x39, 0xed, 0x1c, 0x1c, 0x8b, 0x8b,
- 0xc5, 0x14, 0x38, 0x0e, 0x28, 0x0a, 0xa3, 0x8d, 0x52, 0xa2, 0x3b, 0x9a,
- 0x12, 0x28, 0xd5, 0x1b, 0x67, 0x01, 0x94, 0x68, 0x8c, 0xc0, 0x25, 0x9e,
- 0x23, 0xfe, 0x86, 0x50, 0x00, 0x5e, 0x93, 0x1c, 0x0f, 0xe3, 0x02, 0x4a,
- 0x74, 0xc3, 0x8e, 0x85, 0x4e, 0xff, 0xe5, 0xc5, 0x09, 0xd0, 0xc8, 0xdb,
- 0x8b, 0x17, 0x1d, 0xd9, 0xbe, 0x66, 0x49, 0x0d, 0x72, 0x60, 0xc0, 0xd9,
- 0x4c, 0xaf, 0x0d, 0x64, 0x72, 0xc1, 0xc6, 0x25, 0x3f, 0xa4, 0x8c, 0xae,
- 0x0e, 0xdb, 0x69, 0x4b, 0x34, 0x42, 0xcb, 0x86, 0xdc, 0x83, 0xf0, 0xbc,
- 0xb5, 0xad, 0x3e, 0x42, 0x9a, 0x4a, 0xdb, 0x78, 0x3a, 0x6f, 0x1f, 0xef,
- 0x17, 0x01, 0x02, 0x5c, 0x12, 0x4a, 0xe2, 0xd2, 0x30, 0x71, 0x9d, 0x56,
- 0x8a, 0xe4, 0x34, 0xb3, 0x78, 0x04, 0x22, 0x7b, 0x80, 0xfe, 0xa0, 0x51,
- 0xa2, 0x42, 0x21, 0x13, 0xe1, 0x2a, 0xe8, 0xce, 0xc4, 0x9f, 0x6f, 0xdf,
- 0x9c, 0x6e, 0x73, 0x96, 0x88, 0x54, 0xcc, 0x21, 0x53, 0x6e, 0x42, 0xe4,
- 0xe9, 0x15, 0xa6, 0x34, 0x31, 0xf6, 0x36, 0xac, 0x28, 0xbd, 0xa5, 0xf4,
- 0xe7, 0x59, 0x2d, 0x11, 0x8e, 0x9d, 0xf4, 0x30, 0xe8, 0xa4, 0x18, 0x19,
- 0x28, 0x64, 0x5f, 0x85, 0xd0, 0xd4, 0x17, 0x4c, 0xf1, 0xa4, 0x10, 0xd0,
- 0xb7, 0x92, 0xf6, 0xea, 0x00, 0x54, 0xdb, 0x1c, 0x2a, 0xf5, 0x70, 0xd9,
- 0xf4, 0x96, 0x30, 0x4a, 0x04, 0x79, 0x4f, 0xd0, 0x5a, 0x93, 0x61, 0x5e,
- 0x6c, 0x0e, 0xc4, 0xb6, 0x22, 0x0a, 0xa9, 0xbe, 0x82, 0x4b, 0x23, 0xf4,
- 0x1e, 0x10, 0x85, 0x54, 0x6f, 0xfd, 0x21, 0xf4, 0xe4, 0x0e, 0x4e, 0x13,
- 0x9e, 0x7c, 0x4e, 0x56, 0xa4, 0x53, 0x90, 0x35, 0xc8, 0x82, 0xb7, 0x8d,
- 0x8f, 0x2c, 0xcb, 0x7f, 0x0a, 0x8d, 0x87, 0xfb, 0x92, 0x70, 0xcc, 0x43,
- 0xfe, 0x19, 0x66, 0x67, 0x24, 0x92, 0x16, 0xf9, 0x84, 0x6d, 0xe6, 0xf2,
- 0x06, 0x67, 0xa6, 0x31, 0x6e, 0x9a, 0xc1, 0xea, 0x49, 0xc8, 0xdb, 0x4f,
- 0x03, 0xc6, 0xcc, 0xb6, 0xa6, 0xeb, 0x10, 0x5a, 0xdb, 0xec, 0x6f, 0x19,
- 0xdf, 0xc2, 0x05, 0x79, 0xcf, 0xa9, 0xb5, 0x00, 0xb2, 0x9f, 0x53, 0xa7,
- 0x55, 0xd4, 0xae, 0x90, 0x2a, 0xe5, 0x9c, 0x3d, 0xdf, 0x8e, 0x40, 0x3b,
- 0x3b, 0xbc, 0x19, 0xb5, 0x54, 0xbe, 0x24, 0x3f, 0x00, 0x91, 0x38, 0x59,
- 0x46, 0x38, 0x0d, 0xfa, 0xf8, 0x87, 0x67, 0x91, 0x3d, 0x1f, 0x9a, 0xa9,
- 0xc2, 0x27, 0x44, 0x54, 0xb5, 0xb6, 0xda, 0x92, 0xa9, 0x4d, 0xb7, 0xea,
- 0x51, 0xfc, 0xc0, 0x28, 0x4d, 0xe7, 0xd1, 0x55, 0x06, 0x8d, 0x15, 0xc3,
- 0xab, 0x8c, 0xc0, 0xc9, 0x28, 0x02, 0x16, 0x03, 0x06, 0xa6, 0x14, 0xfe,
- 0x12, 0x40, 0x97, 0x33, 0x4e, 0x6c, 0x8c, 0xa6, 0xb3, 0xf1, 0xee, 0x57,
- 0xf9, 0x0d, 0x05, 0x2b, 0xec, 0x3e, 0xdd, 0xff, 0x12, 0xc4, 0xd6, 0xbb,
- 0x12, 0x89, 0xcf, 0xae, 0x16, 0x95, 0x7a, 0x0f, 0x55, 0x63, 0xb2, 0x5e,
- 0x5b, 0x17, 0x18, 0x69, 0xa0, 0xb5, 0xb0, 0x51, 0xaf, 0x26, 0xeb, 0xac,
- 0xc0, 0x97, 0xfb, 0x25, 0x8b, 0x60, 0xfd, 0x64, 0xad, 0x84, 0x1b, 0xd0,
- 0x12, 0x71, 0xa8, 0x75, 0xcf, 0x39, 0xae, 0xa0, 0xf4, 0x44, 0xfd, 0x97,
- 0xff, 0x7d, 0x02, 0x97, 0xc5, 0x9b, 0x93, 0x8b, 0x37, 0xf0, 0xa3, 0x7f,
- 0x71, 0xf6, 0xa6, 0xa5, 0xc4, 0x6b, 0xc5, 0x95, 0x48, 0x70, 0xbd, 0x34,
- 0xb8, 0x91, 0x79, 0x50, 0xad, 0x8c, 0x21, 0x25, 0x76, 0xf2, 0x85, 0x42,
- 0xd1, 0xb7, 0x2b, 0xd6, 0xea, 0xc2, 0x89, 0xca, 0xc0, 0x98, 0xbc, 0xa5,
- 0x13, 0xe3, 0xed, 0x5e, 0x4e, 0x1c, 0x34, 0x61, 0xa4, 0x43, 0x9c, 0xb1,
- 0xb9, 0xc2, 0x69, 0xb4, 0x15, 0x50, 0x2c, 0x5c, 0x20, 0xca, 0x73, 0xee,
- 0x4c, 0xfa, 0x79, 0x4b, 0x59, 0x54, 0xce, 0xcb, 0x2b, 0xb9, 0x40, 0x2a,
- 0xd3, 0x34, 0x99, 0xad, 0x3b, 0x8a, 0xf6, 0xdf, 0x89, 0x36, 0xc9, 0x5d,
- 0x22, 0x22, 0xfb, 0x0a, 0xd2, 0x05, 0x35, 0x61, 0xcb, 0x4e, 0xb8, 0xcc,
- 0xa7, 0x29, 0xfb, 0xb3, 0x38, 0x33, 0x4f, 0x59, 0x31, 0x4b, 0x0d, 0x5c,
- 0xde, 0x3a, 0x0a, 0x95, 0xfc, 0x50, 0xc7, 0x16, 0xed, 0xf2, 0x86, 0x57,
- 0x29, 0x9d, 0xf7, 0x25, 0x9d, 0xc1, 0x21, 0xa3, 0x72, 0x85, 0x1b, 0x3a,
- 0xaa, 0x8d, 0x66, 0x85, 0x26, 0x87, 0x95, 0x7c, 0x82, 0x0a, 0x4d, 0x7e,
- 0xb5, 0x54, 0xa7, 0x3f, 0x1d, 0x53, 0x80, 0x45, 0xc2, 0xee, 0xec, 0xe2,
- 0x3f, 0x7b, 0xcc, 0x20, 0xdb, 0xdb, 0x60, 0x2a, 0xff, 0x80, 0x06, 0x0c,
- 0x35, 0xad, 0x6e, 0xc4, 0xaf, 0x1b, 0x35, 0xc1, 0x7b, 0x1e, 0x51, 0x45,
- 0x62, 0x54, 0xe7, 0x9b, 0x1c, 0x1a, 0xeb, 0x77, 0x04, 0xd9, 0x32, 0xc6,
- 0xda, 0xd5, 0xea, 0x85, 0x68, 0x8c, 0x20, 0x57, 0xb7, 0x13, 0xe9, 0x10,
- 0x83, 0xa9, 0xce, 0xb5, 0xe6, 0x44, 0x56, 0x86, 0x84, 0x7c, 0x02, 0x5e,
- 0xa4, 0x32, 0x34, 0x86, 0x3d, 0xc8, 0xa9, 0xe9, 0x0a, 0x52, 0x5e, 0xe3,
- 0x96, 0x6e, 0x54, 0x81, 0x68, 0xfa, 0x04, 0x60, 0xcb, 0x0b, 0xd8, 0x7d,
- 0x94, 0x2b, 0x8a, 0x14, 0x9a, 0x21, 0x4c, 0x40, 0x53, 0xb6, 0x44, 0xa0,
- 0x81, 0x9a, 0xe7, 0xf1, 0x4d, 0x4a, 0xf0, 0x3c, 0xa4, 0xc4, 0x45, 0xe9,
- 0x8c, 0x02, 0x9a, 0x46, 0x66, 0x7e, 0x58, 0x61, 0x0c, 0xc3, 0x99, 0x59,
- 0x1a, 0x19, 0xe5, 0x74, 0xfb, 0xe2, 0xd8, 0x30, 0x25, 0x9c, 0xbc, 0x43,
- 0x81, 0x68, 0x7e, 0x23, 0x41, 0x48, 0x73, 0xd6, 0x38, 0x31, 0xac, 0xdc,
- 0x11, 0xd1, 0x15, 0xee, 0x8b, 0x0c, 0xee, 0xd2, 0x4a, 0x90, 0x17, 0x25,
- 0x31, 0x19, 0x8e, 0x57, 0x71, 0xd1, 0x88, 0x7a, 0xf1, 0x0f, 0xa9, 0xd6,
- 0x11, 0x4a, 0x87, 0x9d, 0x49, 0x65, 0x8e, 0xc5, 0x6c, 0x82, 0x69, 0xb0,
- 0x8d, 0x12, 0x09, 0x12, 0x57, 0xb3, 0x52, 0x74, 0x41, 0x7a, 0xb8, 0x97,
- 0xcc, 0x12, 0xad, 0x97, 0xde, 0xd7, 0x56, 0x2a, 0xe6, 0x1e, 0x02, 0x0b,
- 0x0d, 0xe9, 0xc1, 0xf5, 0x59, 0x8c, 0x70, 0x55, 0x2f, 0xf3, 0xd0, 0x8e,
- 0x53, 0xfc, 0x5c, 0x32, 0xf5, 0x90, 0x60, 0x52, 0x45, 0x89, 0x53, 0xd2,
- 0xcd, 0x66, 0x19, 0x96, 0xb3, 0xca, 0x8b, 0x6d, 0x3c, 0x51, 0x58, 0x73,
- 0x34, 0x02, 0xd1, 0x45, 0x93, 0x70, 0x02, 0xa1, 0x71, 0xaa, 0x43, 0xd1,
- 0x52, 0x40, 0xd3, 0xbd, 0x00, 0x60, 0x0c, 0xcd, 0x15, 0xa5, 0x1c, 0xa9,
- 0xda, 0x41, 0x44, 0xd1, 0xe3, 0x35, 0x08, 0xed, 0xb3, 0x54, 0x24, 0xa8,
- 0x2b, 0x42, 0x72, 0x22, 0xc9, 0xdb, 0x69, 0x4c, 0x65, 0xa4, 0x6c, 0x6d,
- 0x94, 0xad, 0xc0, 0x6a, 0xb2, 0x06, 0xac, 0xd7, 0xc3, 0xaa, 0x74, 0x39,
- 0x44, 0xad, 0x7e, 0xf0, 0xc9, 0x54, 0x50, 0xef, 0x0c, 0x18, 0xec, 0x62,
- 0xee, 0x4b, 0x60, 0x2f, 0xcf, 0x6d, 0x93, 0x52, 0xce, 0x3b, 0xe7, 0x88,
- 0x72, 0xa4, 0x09, 0x67, 0x90, 0x08, 0xc6, 0x6f, 0x36, 0xc0, 0xca, 0x19,
- 0x1e, 0x82, 0x0c, 0xca, 0x68, 0x9e, 0xdc, 0xd5, 0x06, 0xbe, 0xae, 0xb7,
- 0x7f, 0xef, 0xb2, 0x17, 0x75, 0x10, 0x00, 0xbe, 0x43, 0x43, 0x15, 0xc8,
- 0x2d, 0x0e, 0xf4, 0x31, 0xef, 0xc2, 0xa2, 0xd4, 0x46, 0xeb, 0x57, 0xf6,
- 0x55, 0xbb, 0x01, 0x57, 0x5a, 0xa1, 0xfd, 0xd9, 0x7c, 0x3b, 0xcb, 0x6e,
- 0xc9, 0x2a, 0xea, 0x43, 0x02, 0x1a, 0x6c, 0xdd, 0x65, 0xa3, 0x52, 0x0c,
- 0x5b, 0x44, 0x07, 0xaf, 0x8d, 0x8e, 0xbc, 0x26, 0xb7, 0xb0, 0xff, 0x6e,
- 0x43, 0x01, 0x58, 0xca, 0xa8, 0xbd, 0x72, 0x3b, 0xf7, 0x30, 0xbd, 0xeb,
- 0xe1, 0x73, 0xbd, 0x51, 0x3e, 0x85, 0x13, 0xe8, 0xf5, 0x31, 0x25, 0x38,
- 0x13, 0x4f, 0x9a, 0x8f, 0x6d, 0x68, 0xa3, 0x4a, 0xae, 0xf3, 0x0c, 0xe9,
- 0x48, 0x73, 0x17, 0xed, 0xa8, 0xc4, 0xcf, 0x5f, 0x6a, 0x05, 0x73, 0x62,
- 0x2b, 0xe1, 0x11, 0xe9, 0x8d, 0x21, 0x68, 0x8f, 0xce, 0xa5, 0x61, 0xfa,
- 0x7f, 0xe6, 0x17, 0x3c, 0xa2, 0xc2, 0x60, 0xcd, 0x0a, 0x53, 0xb5, 0x07,
- 0x1d, 0x44, 0x02, 0xa9, 0xb6, 0x6c, 0x6e, 0x74, 0x2a, 0x91, 0x66, 0x60,
- 0x0d, 0x4c, 0x51, 0x66, 0x6d, 0x56, 0x43, 0x6f, 0x9a, 0x15, 0xc0, 0x4c,
- 0x65, 0x2e, 0xbe, 0x09, 0xb4, 0x39, 0x7c, 0xe7, 0x8f, 0x7f, 0xb4, 0x3c,
- 0xab, 0x16, 0xdb, 0x82, 0xce, 0x62, 0xe8, 0xa4, 0x73, 0xf0, 0x13, 0x39,
- 0x9d, 0x7e, 0x89, 0x7f, 0x82, 0x3f, 0x7f, 0xe9, 0xe8, 0xd9, 0xe3, 0x1a,
- 0x6e, 0x36, 0xe9, 0x9e, 0x57, 0x0f, 0x21, 0x58, 0xcc, 0x8d, 0xe6, 0x07,
- 0x0c, 0x5d, 0x1c, 0x9f, 0xcb, 0x99, 0x29, 0x38, 0x5a, 0x86, 0x66, 0x88,
- 0x3c, 0x83, 0x54, 0x23, 0xbc, 0x25, 0x08, 0x0e, 0x54, 0x76, 0x34, 0xa1,
- 0x67, 0xb5, 0x39, 0x7a, 0xa5, 0xab, 0x0e, 0x66, 0x14, 0xbd, 0xe9, 0xac,
- 0x26, 0xa0, 0x23, 0x5c, 0xa2, 0x0d, 0x97, 0xf1, 0xa1, 0x7b, 0xd1, 0x91,
- 0x2a, 0x23, 0xfc, 0x01, 0x95, 0x80, 0x2b, 0x09, 0x10, 0xf3, 0x06, 0x06,
- 0x64, 0x8c, 0x44, 0x78, 0xff, 0x91, 0xd8, 0x3d, 0xb3, 0xe0, 0x62, 0x58,
- 0xfa, 0x64, 0x86, 0xfa, 0x9e, 0xd6, 0x16, 0x2f, 0xb2, 0xf2, 0x3d, 0x4e,
- 0x52, 0xf0, 0x12, 0x9c, 0xe8, 0x42, 0x9a, 0xc5, 0x34, 0x31, 0x6b, 0x29,
- 0x15, 0x6d, 0x0c, 0xba, 0x58, 0x4d, 0xc6, 0x73, 0xf8, 0xf2, 0x9a, 0x49,
- 0x20, 0x8a, 0x98, 0xb0, 0xae, 0x8c, 0x77, 0x0e, 0x34, 0x4f, 0x77, 0x4a,
- 0x7b, 0xfd, 0xf9, 0x73, 0xae, 0x22, 0xb1, 0xf2, 0x29, 0x17, 0x98, 0xda,
- 0x7b, 0xf8, 0x8b, 0xb0, 0x25, 0x86, 0xee, 0x34, 0x01, 0x37, 0x0d, 0x96,
- 0x30, 0x93, 0xc7, 0x8a, 0x34, 0x5c, 0x21, 0xd1, 0x2d, 0x40, 0xa2, 0xf5,
- 0x47, 0x92, 0xe8, 0x1c, 0x54, 0x23, 0x43, 0xfd, 0x4e, 0xb9, 0x2e, 0xc6,
- 0x82, 0x43, 0x41, 0x62, 0xab, 0x69, 0x6b, 0x38, 0x4e, 0x0b, 0x72, 0x7f,
- 0x5b, 0xd3, 0x30, 0x61, 0x7e, 0x65, 0x98, 0xde, 0x35, 0x2a, 0x60, 0x0c,
- 0x18, 0xb7, 0x2c, 0x30, 0xee, 0x6a, 0x2b, 0xc4, 0xb0, 0x18, 0x55, 0x02,
- 0x3c, 0x6f, 0x93, 0x1c, 0x3d, 0xae, 0x4c, 0x64, 0xf4, 0x17, 0x82, 0xb5,
- 0x63, 0xb7, 0x56, 0x49, 0x64, 0x86, 0x3f, 0xe9, 0x0a, 0x41, 0x34, 0x87,
- 0x9b, 0x19, 0x5a, 0xb7, 0x4b, 0x5f, 0xf9, 0xa5, 0xc1, 0x4f, 0x43, 0x55,
- 0xce, 0x3d, 0xb9, 0x05, 0x56, 0xea, 0x53, 0xc9, 0x2d, 0x45, 0x5a, 0x3d,
- 0x48, 0x6e, 0xc1, 0x21, 0xad, 0x23, 0xb7, 0xd4, 0x05, 0x14, 0xf1, 0x36,
- 0x78, 0x82, 0x13, 0x7f, 0x56, 0xbe, 0xcf, 0xf8, 0x8b, 0x38, 0x9b, 0xaf,
- 0xae, 0x2b, 0xa7, 0xf5, 0xfd, 0xf0, 0x04, 0xd5, 0x58, 0xb9, 0xb9, 0xd4,
- 0xcb, 0xc5, 0xe5, 0x25, 0x15, 0x4d, 0xf0, 0x23, 0xb2, 0xab, 0xd2, 0x66,
- 0xc0, 0xe2, 0x1d, 0x8e, 0x09, 0x51, 0x25, 0x6f, 0x4d, 0xad, 0x26, 0x1d,
- 0x75, 0x26, 0x3c, 0xbe, 0x14, 0xb1, 0x09, 0x74, 0x05, 0x1f, 0x77, 0xc2,
- 0x68, 0x0e, 0xd1, 0x4b, 0x61, 0xd0, 0x56, 0xea, 0x2d, 0xd2, 0x58, 0x07,
- 0xda, 0xbc, 0x78, 0x70, 0x7b, 0xbc, 0xcc, 0x07, 0x73, 0x07, 0x95, 0x4b,
- 0xae, 0x1b, 0x1f, 0x87, 0x93, 0xd8, 0x14, 0xf5, 0xfa, 0xb4, 0xf7, 0xf4,
- 0x51, 0x6f, 0xa7, 0xa6, 0x7f, 0x98, 0xdc, 0x08, 0x0e, 0xe3, 0x63, 0xd1,
- 0x6f, 0x29, 0x5a, 0x88, 0x52, 0x1a, 0x63, 0x86, 0x66, 0x63, 0x29, 0xfe,
- 0xc9, 0xd5, 0x1b, 0x0b, 0x53, 0x0d, 0x8e, 0xe1, 0x39, 0xe5, 0x56, 0x6a,
- 0x0a, 0x3b, 0x63, 0x5a, 0xd2, 0x95, 0x84, 0xee, 0x6e, 0xfc, 0x47, 0x4e,
- 0xfc, 0x6f, 0xb4, 0xfe, 0x10, 0x9a, 0xaf, 0x8d, 0x6e, 0x2d, 0x99, 0xbd,
- 0x95, 0xd0, 0xcb, 0x49, 0x3c, 0x1c, 0x0e, 0x63, 0x12, 0x45, 0x0f, 0x59,
- 0x42, 0xde, 0x16, 0xf9, 0x34, 0x2c, 0xbb, 0xf7, 0x53, 0x21, 0xbf, 0xe3,
- 0xe3, 0x63, 0x11, 0xa5, 0x2f, 0xae, 0x1a, 0x32, 0xad, 0x29, 0xb2, 0x26,
- 0x02, 0x7d, 0x10, 0x71, 0xa5, 0xbc, 0x5a, 0x54, 0xc8, 0x9c, 0x58, 0x4f,
- 0x55, 0x61, 0xc2, 0x80, 0x82, 0x35, 0xaa, 0x4b, 0xe7, 0xb0, 0xa6, 0x5d,
- 0x1b, 0xa1, 0xef, 0x97, 0x40, 0x2c, 0x52, 0x46, 0xea, 0xe6, 0x17, 0xa5,
- 0x6d, 0x8b, 0xf3, 0xe8, 0xda, 0x2d, 0xdd, 0xf2, 0x7d, 0x3a, 0xc2, 0x32,
- 0xe0, 0xd0, 0x30, 0xad, 0x50, 0xb7, 0x49, 0x26, 0x01, 0xd1, 0x89, 0xf4,
- 0xd5, 0x6c, 0x7b, 0x25, 0x6d, 0xb9, 0x6b, 0xfd, 0xf1, 0x69, 0xcb, 0x69,
- 0xfd, 0x41, 0xb4, 0xe5, 0x8e, 0x4e, 0x56, 0xa8, 0xf6, 0x0d, 0x12, 0x5c,
- 0xb9, 0x1e, 0xc5, 0xc9, 0x9b, 0x2d, 0x44, 0xd7, 0x6a, 0x18, 0x41, 0xca,
- 0xda, 0x3c, 0xa6, 0x72, 0xd5, 0xc7, 0xc2, 0x02, 0x8f, 0xaf, 0x30, 0x62,
- 0x7b, 0x82, 0x68, 0xb1, 0xb0, 0x29, 0x18, 0xbe, 0x80, 0xfb, 0xc2, 0x6c,
- 0xb0, 0xdf, 0x3f, 0xdd, 0xbe, 0x38, 0xed, 0x7b, 0xb9, 0x6d, 0x77, 0xe8,
- 0x88, 0x25, 0x87, 0x6b, 0xdd, 0xa1, 0xc7, 0x44, 0x50, 0xa4, 0x8c, 0x04,
- 0x5b, 0xe3, 0x69, 0xdc, 0x4b, 0xb0, 0x6e, 0xc8, 0x62, 0xa6, 0xe9, 0xe3,
- 0xc6, 0xe5, 0x34, 0x4b, 0x67, 0x04, 0x54, 0x8b, 0x41, 0x74, 0xc4, 0xaf,
- 0x28, 0xf3, 0xa5, 0x8c, 0x5e, 0x1f, 0x5d, 0x60, 0x42, 0x78, 0x25, 0x71,
- 0x9f, 0x68, 0x01, 0xf7, 0x32, 0xef, 0xa4, 0x7e, 0xba, 0x29, 0x24, 0x9a,
- 0x0c, 0x15, 0x74, 0xd9, 0x1a, 0x7a, 0xa7, 0x02, 0x44, 0x23, 0x67, 0x6b,
- 0x05, 0x6a, 0x89, 0xb3, 0x53, 0xed, 0x09, 0xda, 0x1f, 0x4e, 0x60, 0x1f,
- 0x40, 0x5b, 0x41, 0x0a, 0x6a, 0x25, 0x20, 0x78, 0xc9, 0xb9, 0xa5, 0xc3,
- 0xe4, 0xed, 0x7c, 0xc7, 0x5b, 0x18, 0xa4, 0xa9, 0x37, 0x22, 0x60, 0x09,
- 0xa1, 0x18, 0xf6, 0x42, 0xfe, 0xb6, 0x49, 0x7e, 0x99, 0x11, 0x40, 0x18,
- 0xd1, 0x1b, 0x4b, 0x56, 0x1a, 0x66, 0xe3, 0xd5, 0x15, 0xe1, 0xfd, 0x8d,
- 0x04, 0x3e, 0xbf, 0x51, 0xe1, 0x9d, 0x19, 0x19, 0x8a, 0x6f, 0x86, 0x2e,
- 0xd8, 0x9c, 0x67, 0x50, 0xac, 0x02, 0x79, 0xc1, 0xb0, 0x15, 0xd9, 0x30,
- 0x83, 0x17, 0x30, 0xa6, 0xf5, 0x39, 0xe3, 0x8a, 0xb8, 0xc9, 0x40, 0x59,
- 0xad, 0x78, 0xaa, 0xf1, 0xe9, 0x61, 0x34, 0x62, 0x30, 0xf1, 0x5f, 0xe6,
- 0x78, 0x4f, 0x5a, 0x11, 0xba, 0xff, 0x34, 0xcc, 0x88, 0x1b, 0x7f, 0x30,
- 0xbd, 0xc8, 0xd8, 0xd6, 0xf1, 0xc2, 0xc2, 0x7b, 0x0e, 0x6d, 0x7c, 0x8f,
- 0x02, 0xdf, 0xa5, 0x27, 0xe2, 0x1b, 0xe8, 0xf9, 0x40, 0xe9, 0x59, 0x52,
- 0xd1, 0xd1, 0x6b, 0x21, 0xe1, 0x51, 0x16, 0xf6, 0x4c, 0xc0, 0x63, 0xe2,
- 0x91, 0x1f, 0x3d, 0xc2, 0xc1, 0x2c, 0xf2, 0x4b, 0x2c, 0x41, 0x65, 0x5c,
- 0x16, 0x17, 0x3f, 0x80, 0x69, 0x71, 0x84, 0x50, 0xbd, 0xfa, 0x91, 0x66,
- 0x5b, 0x35, 0x9a, 0xfb, 0x1e, 0x74, 0x0c, 0xc5, 0x33, 0x6e, 0x94, 0x48,
- 0xa2, 0x14, 0x5a, 0xfd, 0x8e, 0x23, 0xc8, 0x30, 0x7a, 0xe8, 0x26, 0x43,
- 0x70, 0x4c, 0xb2, 0xf1, 0xf8, 0x46, 0x1e, 0xae, 0x6c, 0x7a, 0xa1, 0x86,
- 0x65, 0x65, 0x5d, 0xac, 0x5d, 0xa7, 0x26, 0x63, 0x08, 0x0b, 0x68, 0x68,
- 0x40, 0xe5, 0xff, 0xb3, 0xa1, 0x55, 0x23, 0x72, 0xef, 0x00, 0xd8, 0xc2,
- 0xac, 0xd9, 0x4c, 0xd0, 0xd4, 0x94, 0x27, 0xe2, 0xf6, 0x9b, 0x50, 0x9b,
- 0xae, 0x1d, 0xb0, 0xed, 0x37, 0xf3, 0x51, 0x60, 0x68, 0x7a, 0xcb, 0xc7,
- 0xf3, 0xe2, 0xe4, 0xe8, 0x59, 0x2b, 0x86, 0xaf, 0x7b, 0xc5, 0x5e, 0xae,
- 0x50, 0x51, 0x3c, 0xc0, 0x96, 0xd5, 0x88, 0x2d, 0x97, 0xed, 0xaa, 0x49,
- 0xd9, 0x46, 0xbf, 0x38, 0x8c, 0x50, 0x48, 0x54, 0xfb, 0xd3, 0xf1, 0x28,
- 0xea, 0x54, 0x79, 0x3e, 0xd1, 0x38, 0x2b, 0xf8, 0x33, 0xb9, 0x4c, 0xbf,
- 0xce, 0x27, 0xa3, 0xce, 0xba, 0x2d, 0xbd, 0x6c, 0x36, 0xb6, 0x56, 0x62,
- 0x7a, 0x23, 0x70, 0xea, 0x47, 0xfc, 0xd3, 0x5b, 0xf9, 0xf8, 0x92, 0x8e,
- 0xd5, 0x24, 0x1f, 0xe4, 0xe3, 0xf1, 0x12, 0xa1, 0x9d, 0xab, 0x25, 0x53,
- 0xd2, 0x3e, 0x93, 0x6f, 0x07, 0x37, 0x15, 0xdf, 0x1b, 0xe0, 0x7e, 0x11,
- 0xe0, 0x74, 0xd1, 0x91, 0x5c, 0x55, 0xa9, 0xc2, 0xe2, 0xc9, 0x60, 0x4e,
- 0x6c, 0xc1, 0x9d, 0x58, 0x87, 0xd4, 0x3a, 0x43, 0x08, 0x96, 0x06, 0x99,
- 0x2c, 0x11, 0xd7, 0xdb, 0x84, 0x00, 0x9f, 0x80, 0x45, 0xff, 0xf3, 0x5f,
- 0x3f, 0xfd, 0xe2, 0xc5, 0x28, 0xb1, 0x77, 0x0c, 0xf1, 0x10, 0x28, 0x0a,
- 0x98, 0x22, 0x1a, 0xaa, 0x32, 0x9d, 0x8c, 0xd9, 0x72, 0x49, 0x2a, 0x25,
- 0xb4, 0x32, 0xed, 0x39, 0x39, 0x37, 0xec, 0xbf, 0x84, 0x76, 0x03, 0xc9,
- 0xaf, 0xb6, 0x2a, 0x8b, 0x40, 0x46, 0x4d, 0xd2, 0x4b, 0xf8, 0x17, 0x27,
- 0x6a, 0x52, 0xe8, 0xc4, 0x5b, 0x7b, 0x17, 0xa9, 0x21, 0x16, 0xe9, 0x3d,
- 0x1c, 0x98, 0x8a, 0x11, 0xe1, 0xcd, 0x78, 0xcc, 0xb7, 0x6f, 0x5e, 0x1a,
- 0x97, 0xe0, 0x72, 0xf2, 0xe7, 0x1d, 0xf9, 0xc8, 0xc5, 0x84, 0xa5, 0xd5,
- 0x35, 0x99, 0x38, 0x96, 0xe2, 0x08, 0xa4, 0xf8, 0xfd, 0xf3, 0xa7, 0x5f,
- 0xfe, 0x05, 0xff, 0xeb, 0xdc, 0xab, 0xac, 0x30, 0xd3, 0xa0, 0x5b, 0x24,
- 0xda, 0xbd, 0xf6, 0xaf, 0x80, 0x63, 0xdc, 0xc5, 0xe9, 0x5d, 0x3a, 0x00,
- 0x6e, 0x5d, 0x2a, 0x38, 0x6c, 0x3c, 0x2d, 0xa3, 0xc3, 0x29, 0xf0, 0x9a,
- 0xac, 0x05, 0xa8, 0xf8, 0x05, 0xbe, 0x16, 0x9d, 0xc8, 0x6b, 0x06, 0x8a,
- 0xee, 0x32, 0x2f, 0x60, 0xc6, 0x53, 0x41, 0xc3, 0x12, 0x28, 0xb0, 0xba,
- 0x45, 0x3d, 0xa2, 0x6c, 0x6b, 0xcf, 0x2c, 0x7d, 0xfd, 0x48, 0x4c, 0xf1,
- 0x54, 0xc2, 0xd0, 0xa9, 0x4a, 0x27, 0x26, 0x9a, 0x05, 0xe8, 0xd4, 0xb0,
- 0x7d, 0xc3, 0xf7, 0x64, 0x5f, 0x2e, 0xbb, 0xe8, 0x35, 0x37, 0xb5, 0x17,
- 0x43, 0xf9, 0x15, 0x02, 0x64, 0xa3, 0x55, 0xf1, 0xcc, 0xfd, 0x23, 0xd6,
- 0x44, 0xc4, 0x92, 0x71, 0xe6, 0xd7, 0xd3, 0xe2, 0xea, 0xd4, 0x60, 0x8b,
- 0xfb, 0x01, 0x8f, 0x8d, 0xd8, 0x07, 0x65, 0x3e, 0xcc, 0x68, 0x4d, 0xba,
- 0x17, 0x52, 0x39, 0x2c, 0x60, 0x97, 0xfd, 0x1f, 0xc9, 0x92, 0xfa, 0x15,
- 0xc6, 0x38, 0x8c, 0xa1, 0x10, 0xc9, 0xc8, 0x80, 0x6f, 0xba, 0x55, 0x44,
- 0x09, 0x3e, 0x24, 0x41, 0x3c, 0x93, 0x74, 0xc2, 0x57, 0x0f, 0xfb, 0xd5,
- 0x5a, 0x2d, 0x15, 0x72, 0x2f, 0x02, 0x97, 0xc1, 0x6a, 0xed, 0x04, 0xba,
- 0x24, 0x81, 0x00, 0xf9, 0x2c, 0x35, 0x06, 0xf1, 0xa0, 0x7f, 0x8d, 0x5a,
- 0x67, 0x63, 0x2e, 0xac, 0x8c, 0x58, 0x59, 0xd2, 0x91, 0xa2, 0xc3, 0x31,
- 0x1c, 0x33, 0xbe, 0x4d, 0x11, 0xcb, 0x78, 0x15, 0xd6, 0x29, 0xa0, 0xe9,
- 0xc7, 0x7c, 0x7e, 0x1c, 0x3d, 0x79, 0xfc, 0xf8, 0x31, 0xc7, 0x68, 0x74,
- 0x5e, 0x52, 0xc7, 0x6f, 0x4e, 0x8e, 0xcf, 0x5e, 0xbd, 0x3a, 0x79, 0xfd,
- 0xec, 0xe4, 0x99, 0x06, 0x51, 0x3b, 0x63, 0xb7, 0xe4, 0xe2, 0x5f, 0xbe,
- 0x98, 0x6e, 0x03, 0xa4, 0xb1, 0xfb, 0x78, 0x27, 0xde, 0x7b, 0xbc, 0x13,
- 0x01, 0x71, 0x26, 0x06, 0xc5, 0x21, 0x99, 0x20, 0x50, 0x61, 0x74, 0xb5,
- 0x00, 0xf5, 0x06, 0xeb, 0x14, 0x57, 0x88, 0x4f, 0xa9, 0x08, 0xf7, 0xb3,
- 0xb4, 0x42, 0xb3, 0xb1, 0xa7, 0x33, 0x24, 0xa3, 0x5e, 0xc7, 0x14, 0xc4,
- 0xb3, 0x61, 0x5d, 0xa2, 0x2f, 0x10, 0xc5, 0xee, 0xed, 0x60, 0x47, 0xbd,
- 0xe8, 0x79, 0x86, 0xb8, 0xa4, 0xb7, 0x4c, 0x9c, 0xc7, 0x57, 0xa0, 0xaa,
- 0xa6, 0x7e, 0x40, 0x57, 0xfd, 0x7d, 0x7c, 0x7d, 0x9f, 0x5f, 0x0f, 0x47,
- 0x8b, 0xb6, 0x1f, 0x3a, 0xad, 0xb8, 0xdd, 0x66, 0x58, 0xf6, 0x74, 0xb3,
- 0x50, 0x18, 0xc1, 0x83, 0x62, 0xf8, 0xda, 0xc7, 0xf4, 0x78, 0x67, 0x67,
- 0xbd, 0xeb, 0x6f, 0x8a, 0xbc, 0x66, 0x9a, 0xdc, 0x72, 0x59, 0x10, 0x29,
- 0x5d, 0xb1, 0x04, 0x7d, 0xfa, 0xf1, 0x57, 0x75, 0x74, 0x21, 0x18, 0x4a,
- 0x91, 0xdf, 0xde, 0xc5, 0x8a, 0x35, 0x12, 0x86, 0x8a, 0xea, 0xb3, 0x31,
- 0xf9, 0xc5, 0xd1, 0x39, 0x3e, 0x1c, 0x9d, 0xbf, 0x39, 0xfb, 0xf1, 0xef,
- 0x16, 0xbd, 0xe5, 0x7a, 0x57, 0xf3, 0x99, 0x04, 0x3e, 0x07, 0xd6, 0x05,
- 0xf4, 0x93, 0x99, 0x1f, 0xc0, 0x69, 0x7c, 0x1f, 0xae, 0xc9, 0x4f, 0x83,
- 0x4a, 0x48, 0x46, 0xc3, 0x34, 0xb4, 0x9c, 0x2a, 0x93, 0xa1, 0x90, 0xc5,
- 0x04, 0x27, 0x35, 0x39, 0x7c, 0xe0, 0x4e, 0xf2, 0xc7, 0xe2, 0x38, 0x6e,
- 0x29, 0xd6, 0x29, 0x47, 0x70, 0x63, 0x2e, 0x48, 0x56, 0x73, 0x75, 0x56,
- 0xc5, 0xa2, 0x66, 0x35, 0x54, 0xd7, 0x66, 0x6f, 0x39, 0xba, 0xf0, 0xbc,
- 0xc8, 0xa6, 0x49, 0x91, 0x4d, 0xee, 0x6a, 0x75, 0xd8, 0x35, 0x93, 0x8a,
- 0x82, 0x7d, 0x6c, 0x49, 0xef, 0xdc, 0xaf, 0xf0, 0x8e, 0xea, 0x4f, 0x36,
- 0x14, 0x66, 0xc0, 0xe8, 0xe2, 0x12, 0x90, 0xc5, 0xab, 0xb5, 0xf4, 0x66,
- 0x6c, 0xee, 0xcb, 0xc7, 0x55, 0x77, 0x9a, 0xad, 0x3f, 0x80, 0x80, 0xeb,
- 0xa3, 0x5b, 0x8b, 0x66, 0x6f, 0xbb, 0x5c, 0x7f, 0xfd, 0xb6, 0x0e, 0x9f,
- 0xfb, 0x64, 0xa7, 0x46, 0x9a, 0x46, 0x2e, 0x6f, 0x2b, 0x24, 0x16, 0x3d,
- 0x7f, 0x79, 0x7a, 0xb2, 0x15, 0x3d, 0x4f, 0x2b, 0x81, 0x6b, 0xd0, 0xc4,
- 0x4a, 0xf4, 0xc6, 0xfe, 0x17, 0xe9, 0x29, 0xa6, 0x7a, 0xa7, 0xa0, 0x31,
- 0x05, 0x93, 0x61, 0xc4, 0x3d, 0x41, 0x32, 0xbb, 0x62, 0x3f, 0x30, 0x39,
- 0xd2, 0xbe, 0xa2, 0x8c, 0xaa, 0xc9, 0x35, 0x1a, 0xc5, 0x26, 0xe4, 0x1e,
- 0x48, 0x37, 0x54, 0x9c, 0xcc, 0x9e, 0x53, 0x2d, 0x2c, 0x9f, 0x39, 0x31,
- 0xb1, 0x38, 0x68, 0x49, 0xf5, 0xd4, 0x80, 0xc0, 0xac, 0x9c, 0x4f, 0x90,
- 0x77, 0x07, 0x81, 0xbc, 0x27, 0xa9, 0x05, 0x29, 0x21, 0x16, 0x34, 0xcd,
- 0x47, 0xb6, 0xd4, 0x1e, 0x9d, 0xfa, 0x7a, 0x10, 0x4f, 0x88, 0x98, 0x50,
- 0x63, 0xf9, 0xb8, 0xb8, 0x90, 0xd8, 0xe4, 0x9a, 0x54, 0xf3, 0x72, 0x3d,
- 0x2a, 0x51, 0x4d, 0x18, 0x7e, 0x5c, 0xe3, 0xaf, 0xb0, 0x8f, 0x03, 0x42,
- 0x3b, 0x22, 0x1e, 0x07, 0xa3, 0x1e, 0xa6, 0x71, 0x52, 0x0e, 0xb3, 0xcc,
- 0xa1, 0x99, 0x17, 0x4a, 0x33, 0x18, 0x31, 0xcf, 0x3f, 0xb7, 0xbf, 0x6d,
- 0xad, 0x0f, 0xc2, 0x28, 0x4b, 0x98, 0x46, 0xb7, 0x05, 0x43, 0xc7, 0x75,
- 0x90, 0x57, 0x89, 0x93, 0x0c, 0x27, 0x8b, 0x51, 0x2a, 0x05, 0x18, 0x66,
- 0x9c, 0x1b, 0x27, 0xc5, 0x0d, 0x67, 0xde, 0x51, 0xb3, 0x7b, 0x2d, 0xf2,
- 0x89, 0xa2, 0x92, 0x08, 0x83, 0x20, 0x38, 0x00, 0x2e, 0x35, 0x6d, 0xf5,
- 0x45, 0xc5, 0x88, 0x69, 0xa9, 0x64, 0x6d, 0x53, 0x4f, 0x03, 0x40, 0x51,
- 0xd0, 0x3e, 0x0d, 0x5e, 0x31, 0xa3, 0x5e, 0xbd, 0x7c, 0x75, 0x22, 0x68,
- 0x09, 0xe9, 0x88, 0x73, 0x93, 0xb4, 0x7e, 0xb2, 0xd8, 0x00, 0x38, 0x11,
- 0xa6, 0x25, 0x31, 0xa5, 0xec, 0x72, 0x16, 0x3b, 0xdf, 0x88, 0x69, 0x5d,
- 0xaf, 0xe5, 0xba, 0x3f, 0x48, 0x49, 0xd4, 0x8b, 0x85, 0x89, 0x25, 0xaa,
- 0xf1, 0x9b, 0x23, 0xb8, 0x19, 0x5e, 0x3f, 0xca, 0x3d, 0xac, 0xf4, 0x5a,
- 0xa0, 0x61, 0x09, 0x14, 0xf9, 0x04, 0xae, 0xdb, 0x09, 0xe5, 0x11, 0x1a,
- 0xf3, 0x50, 0x42, 0x44, 0xd8, 0xb4, 0x90, 0x27, 0x37, 0xf5, 0x79, 0x95,
- 0xb5, 0x5a, 0x8c, 0x8f, 0x9f, 0xf4, 0x76, 0x7c, 0x4c, 0x54, 0x4a, 0x6b,
- 0xc7, 0xec, 0x6d, 0xa3, 0x78, 0x11, 0xf6, 0x9b, 0x15, 0x47, 0x53, 0x67,
- 0xb7, 0xcb, 0x5e, 0x1d, 0xac, 0xc0, 0x0f, 0xfb, 0x10, 0x1d, 0x08, 0x53,
- 0xe4, 0x4d, 0x8d, 0x25, 0xa5, 0x14, 0x7c, 0x09, 0x8f, 0x92, 0xf1, 0x4e,
- 0xcd, 0xa4, 0xf8, 0xab, 0x44, 0x13, 0x2f, 0x8b, 0x7e, 0xcb, 0x67, 0x1a,
- 0xe9, 0x73, 0xa3, 0x51, 0xcd, 0x5d, 0x41, 0x4a, 0xb9, 0xe5, 0x47, 0x26,
- 0x94, 0x73, 0xaf, 0x9d, 0x85, 0xc1, 0x67, 0x42, 0x85, 0xa9, 0xdd, 0x2e,
- 0x34, 0xa4, 0x57, 0xec, 0xbc, 0xa8, 0x92, 0xc2, 0xc6, 0x72, 0x5c, 0x07,
- 0x42, 0xee, 0x36, 0xf7, 0xaf, 0xc8, 0x86, 0xef, 0x33, 0xc4, 0x1f, 0x2e,
- 0xab, 0xc5, 0x78, 0xcc, 0x51, 0x9c, 0xee, 0x28, 0x35, 0x7e, 0x14, 0x36,
- 0x8e, 0x51, 0xea, 0x65, 0x79, 0x70, 0x0b, 0x7d, 0x52, 0xe6, 0xa2, 0xa2,
- 0x3a, 0x9e, 0xda, 0x7c, 0x4a, 0xa3, 0xdc, 0x22, 0xac, 0x10, 0xe9, 0xd7,
- 0x69, 0x81, 0x24, 0x80, 0x90, 0xb9, 0xe8, 0xaa, 0xbc, 0xf1, 0xf3, 0x03,
- 0xa8, 0x20, 0x4b, 0x81, 0xd1, 0xc7, 0x64, 0x13, 0x7f, 0x93, 0x4e, 0x73,
- 0x2a, 0x1e, 0x64, 0x67, 0x2c, 0x6b, 0x05, 0x72, 0x84, 0x68, 0x2d, 0xec,
- 0xf9, 0x80, 0x51, 0x20, 0xd1, 0xb6, 0x68, 0xd7, 0x9a, 0xe1, 0x2b, 0x59,
- 0x06, 0x1c, 0xa8, 0x11, 0x61, 0xd9, 0xc6, 0x9a, 0xcc, 0x32, 0xa1, 0xaa,
- 0x0c, 0x68, 0x95, 0xce, 0x66, 0x07, 0xc8, 0x6e, 0x9a, 0xf9, 0x29, 0x2f,
- 0x40, 0x5f, 0x3a, 0xe8, 0x48, 0x5d, 0x4a, 0x8a, 0x14, 0x24, 0x37, 0x3c,
- 0x49, 0x23, 0x35, 0xba, 0x11, 0x1c, 0xe9, 0x98, 0x65, 0x49, 0x8e, 0x1d,
- 0xac, 0xca, 0x70, 0xea, 0xba, 0xa2, 0x59, 0xf8, 0x79, 0xc4, 0x06, 0x5d,
- 0x42, 0x70, 0x97, 0x70, 0x64, 0xf1, 0x0b, 0x18, 0xc7, 0x8f, 0xf1, 0xf1,
- 0xc2, 0x73, 0x68, 0x43, 0xf7, 0xf1, 0x0b, 0x6a, 0xf2, 0x4f, 0x1d, 0x13,
- 0x21, 0xc0, 0x8f, 0xda, 0xaf, 0x60, 0xf4, 0x5f, 0x84, 0x92, 0x28, 0x24,
- 0xa6, 0x82, 0xc9, 0x86, 0x6a, 0x7f, 0x89, 0x5c, 0x93, 0xd8, 0x9a, 0x62,
- 0xb4, 0x39, 0xa3, 0xd1, 0xb6, 0xac, 0xb7, 0x26, 0x7c, 0x05, 0xd6, 0x9c,
- 0xc3, 0x41, 0x0a, 0x0c, 0x52, 0x8e, 0x60, 0x14, 0x71, 0x3e, 0x8e, 0x29,
- 0x35, 0x19, 0xe4, 0xad, 0xf7, 0x98, 0xde, 0x71, 0x67, 0xc9, 0x8a, 0x20,
- 0x6b, 0x89, 0x3d, 0x8c, 0x46, 0xa1, 0x8c, 0x11, 0x46, 0x06, 0x72, 0xd4,
- 0x4f, 0x45, 0x37, 0xe0, 0x2d, 0x3d, 0x90, 0xdc, 0x58, 0x7a, 0x7d, 0x96,
- 0xde, 0x70, 0xf2, 0x27, 0x96, 0xfe, 0x10, 0x14, 0x02, 0xcf, 0x23, 0x47,
- 0x98, 0x04, 0x5d, 0x36, 0x7f, 0xd0, 0xa4, 0x09, 0xd7, 0x76, 0xca, 0xce,
- 0x71, 0x8a, 0x57, 0x58, 0xcc, 0xb5, 0xf2, 0xee, 0x52, 0x0f, 0x30, 0x1a,
- 0x7e, 0xa8, 0xb0, 0x2e, 0xaa, 0xeb, 0x9a, 0x6e, 0x00, 0x5c, 0xeb, 0x5b,
- 0x83, 0x53, 0x52, 0x56, 0x77, 0x28, 0x07, 0x08, 0x88, 0x76, 0x20, 0x98,
- 0x1b, 0x06, 0xcd, 0xb9, 0x02, 0x5a, 0x0e, 0x88, 0x14, 0x74, 0x5a, 0x73,
- 0x5a, 0x2f, 0x31, 0x20, 0x11, 0xf6, 0x94, 0x14, 0xaf, 0xe2, 0x0c, 0x97,
- 0x6f, 0xe3, 0x10, 0x6e, 0x3e, 0xed, 0x9e, 0x94, 0x3b, 0x49, 0x46, 0xee,
- 0x6a, 0x71, 0xca, 0x87, 0x01, 0x7b, 0xab, 0xab, 0x0c, 0x8f, 0x5d, 0xb9,
- 0x4c, 0xc5, 0x8b, 0x09, 0x46, 0xfc, 0x70, 0x20, 0x10, 0x11, 0xc2, 0x94,
- 0x20, 0xee, 0x66, 0x55, 0x16, 0x97, 0xf3, 0x64, 0x1a, 0x2d, 0x2a, 0x84,
- 0xd4, 0x44, 0xb1, 0x7c, 0x78, 0x95, 0x4a, 0xd8, 0xd8, 0x9c, 0x30, 0xd5,
- 0x18, 0x3e, 0x23, 0x58, 0xbe, 0x87, 0xce, 0x9a, 0x2a, 0x62, 0x7c, 0xdb,
- 0xd0, 0x9d, 0x21, 0xfc, 0xe2, 0x40, 0xec, 0x5a, 0xc8, 0x00, 0x3a, 0xcf,
- 0x61, 0xb0, 0x07, 0x9d, 0x6e, 0xd4, 0xb9, 0xc8, 0xe1, 0x47, 0xf3, 0x20,
- 0x3e, 0x83, 0x63, 0x72, 0xc0, 0x25, 0x55, 0x3b, 0x7d, 0x86, 0x4d, 0xc3,
- 0x3f, 0xa7, 0x39, 0x42, 0x1a, 0x56, 0xa6, 0xcc, 0x5f, 0xcd, 0xbc, 0xc5,
- 0x97, 0x73, 0x18, 0x2e, 0xd0, 0xec, 0x6a, 0xf8, 0xae, 0xa1, 0xa2, 0x23,
- 0x2a, 0xd4, 0xc6, 0x56, 0x8a, 0xa0, 0x23, 0x56, 0x3b, 0xf9, 0x25, 0x71,
- 0xaa, 0x99, 0xa6, 0x83, 0x7b, 0xf1, 0x92, 0x8a, 0x8b, 0xd9, 0x90, 0x8d,
- 0xf7, 0x9f, 0x86, 0xf6, 0x20, 0xe1, 0x3c, 0x24, 0x94, 0x2f, 0x61, 0x1d,
- 0x9a, 0xe9, 0xdb, 0x07, 0x8c, 0xbb, 0x96, 0xa2, 0x45, 0x56, 0xb8, 0x0e,
- 0x85, 0x8a, 0x12, 0xef, 0x8c, 0x5a, 0xba, 0x36, 0xb6, 0x7a, 0xe5, 0x31,
- 0xfa, 0x37, 0x66, 0xd0, 0x77, 0x1d, 0x87, 0x03, 0xa7, 0xe3, 0x28, 0x77,
- 0x0b, 0x44, 0x75, 0x70, 0x54, 0x9d, 0x0c, 0x21, 0x6a, 0x85, 0xfc, 0xfd,
- 0xe1, 0xe8, 0xcd, 0xeb, 0x97, 0xaf, 0xbf, 0x3f, 0x30, 0xeb, 0x83, 0x17,
- 0x84, 0xf0, 0x88, 0x86, 0xa3, 0x03, 0x4b, 0xba, 0x50, 0x59, 0x53, 0xc2,
- 0xd7, 0x9a, 0x44, 0x21, 0x57, 0x84, 0xd1, 0xc8, 0x30, 0x80, 0x31, 0xe5,
- 0x4a, 0x41, 0xe4, 0x4e, 0x85, 0x6f, 0x38, 0xf6, 0x88, 0xed, 0x9f, 0x8a,
- 0xf0, 0x20, 0x98, 0x51, 0xb4, 0x32, 0x55, 0x3e, 0x19, 0x85, 0x98, 0x55,
- 0x7c, 0x4a, 0xf1, 0xf2, 0xb9, 0x60, 0x3e, 0x28, 0x54, 0xe8, 0x8c, 0x60,
- 0x7b, 0x54, 0x4a, 0xd2, 0x7b, 0x27, 0x65, 0xd4, 0x12, 0xca, 0x68, 0xf4,
- 0x23, 0xd5, 0x29, 0x73, 0x9a, 0xcd, 0x6a, 0x7c, 0xb1, 0x92, 0xc5, 0x08,
- 0xee, 0x9b, 0x8c, 0xee, 0xae, 0x1c, 0x45, 0xc5, 0x92, 0xe8, 0xa6, 0xcc,
- 0xc8, 0x9b, 0x6d, 0x56, 0x85, 0x08, 0x35, 0x5c, 0x23, 0x93, 0x47, 0x39,
- 0x4c, 0x16, 0xcc, 0x76, 0xb8, 0x5e, 0x8c, 0x7c, 0x6a, 0xf1, 0x23, 0xcc,
- 0xfc, 0x03, 0x69, 0xd9, 0x75, 0x44, 0x98, 0x0f, 0x48, 0xcc, 0x6e, 0xf3,
- 0x30, 0xbc, 0xc0, 0x8b, 0xe6, 0x39, 0x5a, 0xd4, 0xe2, 0xd7, 0xc0, 0xf9,
- 0x0e, 0xa2, 0x3f, 0xe7, 0xe9, 0x1a, 0x8e, 0x02, 0x78, 0xfd, 0x2d, 0xa8,
- 0x72, 0xf1, 0xd1, 0x25, 0xb1, 0xf4, 0xbb, 0xb4, 0x8c, 0xe7, 0xc4, 0x80,
- 0xb6, 0xf7, 0x76, 0x76, 0x76, 0xd6, 0x6b, 0x88, 0xef, 0xe8, 0xf5, 0x74,
- 0x91, 0x23, 0x4d, 0x8c, 0x8c, 0x93, 0xcb, 0x54, 0xb3, 0x25, 0x53, 0x76,
- 0x35, 0x20, 0x04, 0xa5, 0x9b, 0x30, 0x79, 0xc5, 0x3a, 0xc8, 0x64, 0x1e,
- 0x1d, 0xa2, 0x29, 0xe2, 0x32, 0x2f, 0xee, 0xbe, 0xf1, 0xaa, 0x3d, 0x21,
- 0x0a, 0x00, 0x3e, 0x23, 0xc4, 0x84, 0xa1, 0x70, 0x24, 0xa1, 0xd9, 0xfc,
- 0x5c, 0xcd, 0x44, 0xb3, 0x8d, 0xf4, 0x22, 0xad, 0x77, 0xdd, 0xbc, 0x25,
- 0x0a, 0x2c, 0x93, 0x92, 0x38, 0xd6, 0x2c, 0x37, 0xab, 0x51, 0xd4, 0x4b,
- 0x96, 0xc0, 0x91, 0x49, 0x67, 0x53, 0x34, 0x7e, 0x60, 0x0c, 0xb3, 0x74,
- 0x16, 0x40, 0x1b, 0x32, 0x17, 0x56, 0xc9, 0xc2, 0x8c, 0x8b, 0xc5, 0x12,
- 0x75, 0x60, 0xa0, 0x1d, 0xea, 0xd0, 0xf6, 0xe7, 0x48, 0x09, 0x4d, 0x8d,
- 0x58, 0xfa, 0xe7, 0x23, 0xab, 0x85, 0xec, 0x6d, 0xd0, 0x67, 0xa0, 0x7d,
- 0x9d, 0x32, 0x75, 0xd2, 0x14, 0x28, 0x97, 0x4c, 0x91, 0x16, 0x90, 0xdf,
- 0xcd, 0x04, 0x98, 0x00, 0x1a, 0xce, 0x0a, 0x85, 0x8b, 0x2e, 0x57, 0x68,
- 0xc9, 0x93, 0xf9, 0x47, 0xd7, 0x92, 0x27, 0x6b, 0xc7, 0x4c, 0xd1, 0x30,
- 0x60, 0x26, 0xed, 0xd4, 0xe8, 0xaa, 0xc3, 0x35, 0x5b, 0x1e, 0xec, 0xee,
- 0x7c, 0x31, 0x98, 0x8e, 0x1e, 0x47, 0x87, 0xf0, 0x8f, 0xa7, 0xf3, 0xf6,
- 0x39, 0x57, 0xf7, 0x18, 0x83, 0x45, 0xf1, 0xee, 0x40, 0x09, 0x52, 0x70,
- 0xa7, 0xd9, 0x1b, 0x85, 0xbf, 0xee, 0xef, 0x01, 0x61, 0xde, 0x26, 0x5a,
- 0x1c, 0x70, 0x04, 0xac, 0xa9, 0xa2, 0x54, 0x37, 0x2f, 0x14, 0x8a, 0x5f,
- 0xb5, 0x19, 0x81, 0xb8, 0x87, 0xbb, 0x7b, 0x5f, 0x46, 0x88, 0x02, 0xf2,
- 0xea, 0xd9, 0x63, 0xbe, 0xf8, 0xcb, 0xc5, 0xd4, 0x90, 0x32, 0x27, 0x90,
- 0x32, 0xfb, 0xf3, 0x70, 0x54, 0x61, 0xe0, 0x93, 0x6c, 0x88, 0xd8, 0x5b,
- 0xdd, 0x5a, 0xec, 0xdf, 0x58, 0x63, 0xff, 0x1c, 0xfb, 0xb5, 0x11, 0x21,
- 0x29, 0xfe, 0x9d, 0xb3, 0x5b, 0x02, 0xa1, 0x50, 0xb0, 0x06, 0xd0, 0x3d,
- 0x1a, 0xfd, 0xab, 0xe1, 0x55, 0x38, 0xbb, 0xdb, 0x59, 0xb2, 0x15, 0x51,
- 0xc6, 0x9f, 0x12, 0x6b, 0xde, 0x19, 0x45, 0xfa, 0x78, 0xb8, 0x3b, 0x7c,
- 0xf4, 0xd5, 0xce, 0xde, 0xce, 0x93, 0x47, 0x3b, 0xc9, 0xe3, 0x64, 0xb0,
- 0x33, 0xde, 0xdb, 0xd9, 0x7f, 0xf4, 0xe5, 0xe3, 0x47, 0xc3, 0xfd, 0xbd,
- 0xdd, 0xe4, 0xcb, 0xa8, 0x5c, 0x2b, 0x84, 0x4e, 0x5a, 0x2e, 0xaf, 0x92,
- 0x3d, 0x50, 0x95, 0x7d, 0x5a, 0xe1, 0x2f, 0xa2, 0x43, 0xfe, 0x19, 0xa6,
- 0x18, 0x22, 0x98, 0x56, 0x7a, 0x49, 0xa2, 0xef, 0x08, 0x42, 0x24, 0x56,
- 0x94, 0x9b, 0xfe, 0x8b, 0x23, 0x6c, 0x12, 0x4e, 0xce, 0x95, 0x6f, 0xfd,
- 0x65, 0x7b, 0x02, 0x91, 0x01, 0x53, 0x81, 0xb3, 0xef, 0xbd, 0xe8, 0x78,
- 0xf9, 0xbe, 0xb7, 0x29, 0x12, 0x0e, 0x15, 0xf0, 0xdf, 0xd0, 0x75, 0x7a,
- 0x9f, 0x6d, 0x97, 0xd9, 0x7f, 0x2e, 0x0c, 0x89, 0xfa, 0x28, 0x5e, 0x3f,
- 0xfb, 0xdb, 0xfb, 0x57, 0x17, 0x7f, 0xbd, 0x7d, 0xf5, 0xfd, 0x5f, 0x77,
- 0xcf, 0x9e, 0x8d, 0xa6, 0xaf, 0x7e, 0xfd, 0xeb, 0xfe, 0xab, 0x5f, 0x87,
- 0xbf, 0xfd, 0xfd, 0xd7, 0xa3, 0xbb, 0xb3, 0x8b, 0xbf, 0x3f, 0x7e, 0x35,
- 0x7d, 0xf3, 0xfe, 0xd5, 0xaf, 0x7f, 0x9b, 0xbe, 0x7e, 0xf6, 0xd7, 0xaf,
- 0x1f, 0x46, 0x05, 0x40, 0x5f, 0xf5, 0x4a, 0x03, 0x3b, 0x0d, 0x5f, 0x00,
- 0x5e, 0x42, 0x87, 0x06, 0x38, 0x3b, 0x68, 0x33, 0xeb, 0xd7, 0x8b, 0xea,
- 0x2a, 0x60, 0xf8, 0x8b, 0xfe, 0x85, 0x0d, 0x51, 0x32, 0x91, 0x48, 0x74,
- 0x5d, 0x99, 0xdc, 0xd3, 0x20, 0x06, 0xef, 0x1c, 0x84, 0x51, 0x94, 0xd6,
- 0x18, 0xc9, 0x97, 0x72, 0xfd, 0x91, 0xaa, 0xa8, 0x3d, 0x2c, 0xb4, 0x9b,
- 0x8a, 0xad, 0x94, 0x74, 0x8c, 0xfa, 0x62, 0x37, 0xc2, 0x9c, 0x38, 0x68,
- 0x8e, 0xf3, 0x4f, 0x53, 0xb7, 0x36, 0xa6, 0x00, 0x47, 0x53, 0x63, 0x46,
- 0x8e, 0xc4, 0x42, 0xcc, 0x2a, 0xba, 0xb5, 0x8e, 0x8e, 0xd9, 0x79, 0x36,
- 0x46, 0x1b, 0x96, 0x81, 0x36, 0x61, 0xfb, 0x6b, 0x60, 0xb7, 0xfb, 0x26,
- 0x05, 0xa3, 0xd3, 0x71, 0xe0, 0xc7, 0x37, 0x7f, 0x4b, 0x8b, 0x5c, 0xe0,
- 0x86, 0xb6, 0x68, 0x9e, 0xd7, 0x79, 0x36, 0x8a, 0x04, 0x60, 0x7d, 0x5b,
- 0xab, 0xb1, 0x78, 0xd7, 0xb0, 0x95, 0xb2, 0x09, 0xf2, 0x1b, 0x4b, 0xb1,
- 0x40, 0x93, 0xb4, 0x30, 0x06, 0xef, 0x3a, 0x44, 0xdd, 0x8d, 0xb0, 0x65,
- 0x5f, 0x98, 0xeb, 0xd6, 0x34, 0x7a, 0x72, 0xb4, 0x18, 0xcf, 0x7f, 0xd3,
- 0xfc, 0x4c, 0x89, 0x23, 0x82, 0xb0, 0xc1, 0x00, 0xf0, 0x6a, 0x02, 0xa7,
- 0x53, 0x91, 0xcf, 0xea, 0x8e, 0x30, 0x22, 0x01, 0x9e, 0x51, 0x48, 0xca,
- 0x44, 0xfa, 0xfa, 0x74, 0xe0, 0x3f, 0xd2, 0x3c, 0x6c, 0xf3, 0x03, 0x0a,
- 0x0c, 0x93, 0x27, 0xa3, 0x5e, 0x22, 0xec, 0x51, 0xe3, 0x74, 0x40, 0x7b,
- 0x3b, 0xbd, 0xaf, 0x5a, 0x0a, 0x4d, 0xd7, 0x4a, 0xa9, 0x20, 0x82, 0x9c,
- 0xc1, 0x40, 0x24, 0xb5, 0x8a, 0x52, 0x4d, 0x61, 0x43, 0xb0, 0x86, 0x8d,
- 0x46, 0xce, 0x7b, 0x2b, 0x84, 0x4f, 0x6e, 0xe3, 0x13, 0x52, 0x69, 0x5a,
- 0x49, 0x19, 0xcb, 0x18, 0x92, 0x80, 0x4e, 0x1c, 0xce, 0x04, 0xde, 0x9b,
- 0x02, 0x56, 0x94, 0xd4, 0xe1, 0x9b, 0x2d, 0x4d, 0x5a, 0x92, 0x06, 0x04,
- 0x58, 0xad, 0x4a, 0x80, 0x4c, 0x1d, 0xe0, 0x6c, 0x45, 0x78, 0x24, 0x9a,
- 0x40, 0x97, 0x87, 0xe7, 0xd9, 0x30, 0xfd, 0x96, 0x36, 0x52, 0x9e, 0x6b,
- 0x18, 0x71, 0x3d, 0x4c, 0x3a, 0x6e, 0x58, 0x9f, 0x99, 0xdd, 0xb3, 0xf9,
- 0xcd, 0xec, 0xb2, 0x40, 0x6f, 0x3b, 0x41, 0xf5, 0x25, 0xa1, 0x60, 0xd2,
- 0xd0, 0x19, 0x72, 0xa3, 0xf0, 0x9f, 0x3c, 0xe9, 0xed, 0x74, 0xed, 0xaa,
- 0x20, 0x8e, 0x10, 0x0b, 0x5e, 0x4b, 0x83, 0xf0, 0x6b, 0x22, 0x1d, 0xef,
- 0xd9, 0x47, 0x8e, 0x2f, 0x91, 0x56, 0xd7, 0x66, 0xf7, 0x32, 0x98, 0xf5,
- 0x08, 0x13, 0x9f, 0xde, 0xed, 0xed, 0x76, 0xe5, 0xd7, 0x3d, 0xf1, 0x7f,
- 0xe0, 0xef, 0xfb, 0x75, 0xf7, 0x59, 0x9d, 0x5e, 0x77, 0xba, 0xe6, 0xe5,
- 0x9d, 0xa5, 0xf5, 0x7f, 0x6a, 0x55, 0xaf, 0x6a, 0xc4, 0x0a, 0x6f, 0xba,
- 0x86, 0x65, 0x56, 0xe8, 0x7d, 0x33, 0xa5, 0x63, 0xdc, 0xe5, 0x0a, 0x2c,
- 0x08, 0xc9, 0xef, 0x36, 0xb4, 0x72, 0x8b, 0xb0, 0xa3, 0xfb, 0xf8, 0x37,
- 0xd7, 0x5f, 0x6f, 0x6c, 0x79, 0xfd, 0xf5, 0xc6, 0x5d, 0xb2, 0xcb, 0x0c,
- 0xab, 0xbf, 0xa2, 0x1e, 0x99, 0x17, 0x22, 0x68, 0x8b, 0x11, 0x6a, 0x0b,
- 0x91, 0xd3, 0xa0, 0xbb, 0x87, 0x7b, 0x08, 0xdd, 0x96, 0x17, 0x31, 0x9a,
- 0xc0, 0x81, 0xb0, 0x2f, 0x43, 0xc6, 0x31, 0xdd, 0xed, 0x06, 0x33, 0x82,
- 0x56, 0xef, 0xc3, 0x8c, 0x02, 0xdb, 0xba, 0x7b, 0x8f, 0x1d, 0xd9, 0xfd,
- 0x64, 0x3b, 0xb2, 0xbb, 0xde, 0x8e, 0xb8, 0x84, 0xec, 0x2c, 0x1c, 0x1e,
- 0x40, 0xa9, 0x42, 0x26, 0xdb, 0x42, 0x5c, 0x53, 0x37, 0xa6, 0xd1, 0x5c,
- 0xbd, 0x46, 0x64, 0x5b, 0x9b, 0xad, 0x1b, 0xd3, 0xdc, 0x60, 0xdd, 0xa8,
- 0xe0, 0x41, 0xdc, 0xdf, 0xf7, 0x2f, 0x0e, 0x6f, 0x9b, 0xef, 0xb3, 0x73,
- 0x30, 0xa1, 0x72, 0x21, 0x85, 0x2a, 0x88, 0x5f, 0x53, 0xe9, 0xb9, 0x9a,
- 0x99, 0xae, 0x0c, 0x03, 0x65, 0x11, 0xcf, 0xdc, 0x73, 0xa2, 0x07, 0xe9,
- 0x03, 0x22, 0xc3, 0xb7, 0x73, 0x62, 0xcb, 0xa8, 0x76, 0x57, 0x9a, 0xc5,
- 0x47, 0xb1, 0x0e, 0x70, 0x73, 0xb7, 0x8d, 0xce, 0xd6, 0x45, 0xd2, 0xcc,
- 0x30, 0x42, 0x95, 0x2d, 0xb5, 0x9f, 0x12, 0xe1, 0x7a, 0xc9, 0x65, 0x92,
- 0xdc, 0x24, 0x18, 0x13, 0x4e, 0x92, 0xa2, 0x1d, 0x64, 0x48, 0x66, 0xd6,
- 0xbb, 0x66, 0x94, 0x6b, 0x2b, 0x35, 0x4c, 0x27, 0x68, 0x47, 0x9c, 0x24,
- 0xa0, 0xcd, 0x53, 0xb2, 0xcb, 0x28, 0x6a, 0x89, 0x51, 0x51, 0xba, 0x16,
- 0x63, 0x38, 0x2e, 0x52, 0x7b, 0xdd, 0xba, 0x26, 0xa1, 0xfb, 0xe7, 0xaf,
- 0x41, 0xf6, 0x8d, 0x32, 0x71, 0x4d, 0x42, 0xf0, 0x4d, 0x02, 0xc1, 0xeb,
- 0xc2, 0xeb, 0xe6, 0x21, 0x47, 0xc7, 0x1f, 0xeb, 0x9a, 0x30, 0x86, 0xa1,
- 0x1b, 0xa4, 0xad, 0x69, 0x25, 0x8d, 0x36, 0x52, 0xc0, 0xe2, 0xdd, 0xc5,
- 0xe4, 0x8e, 0x01, 0x35, 0x39, 0xb8, 0x0b, 0x2d, 0x42, 0xec, 0x74, 0x46,
- 0xe2, 0x55, 0xe8, 0x61, 0xd9, 0x5e, 0x71, 0x43, 0x36, 0x55, 0x42, 0x7b,
- 0x74, 0x5b, 0x80, 0x11, 0x0d, 0xd3, 0xa0, 0x51, 0x37, 0x0f, 0x6e, 0x90,
- 0x53, 0xb6, 0xdf, 0x91, 0x8f, 0xbe, 0x0a, 0x1c, 0xcd, 0x07, 0x31, 0xd1,
- 0xbd, 0xa0, 0x5b, 0x9e, 0xe8, 0xbe, 0xeb, 0xa2, 0x2e, 0x59, 0x31, 0xc9,
- 0x49, 0x51, 0x37, 0x34, 0x6d, 0x4f, 0xaa, 0x97, 0x63, 0xe9, 0x93, 0xb2,
- 0x03, 0x11, 0x44, 0x1d, 0x2c, 0x91, 0x81, 0x74, 0x2c, 0xab, 0x87, 0xb2,
- 0x60, 0x76, 0x20, 0x8a, 0xb9, 0x84, 0xe9, 0xe7, 0x61, 0x76, 0xa2, 0xb0,
- 0x2c, 0xa9, 0x32, 0x91, 0x03, 0xf3, 0x4a, 0x4b, 0x44, 0xd3, 0x0f, 0x26,
- 0x09, 0x94, 0xa2, 0x69, 0xa4, 0x1d, 0x02, 0x01, 0x94, 0xa5, 0xca, 0x9c,
- 0x00, 0x00, 0x09, 0x6b, 0x46, 0x99, 0x03, 0x21, 0xdf, 0x22, 0x4f, 0xe3,
- 0xc7, 0xf5, 0xd8, 0xed, 0xed, 0xa1, 0xfb, 0x4e, 0x12, 0xd8, 0xc9, 0xc2,
- 0x8f, 0x3c, 0xee, 0xf2, 0xca, 0x04, 0x5d, 0x0a, 0xe5, 0x92, 0x90, 0xe8,
- 0xc4, 0xa3, 0x0e, 0x93, 0x50, 0xe4, 0x03, 0xe6, 0xbe, 0x13, 0x7e, 0xde,
- 0x90, 0x11, 0x73, 0x79, 0xc1, 0x74, 0x97, 0xa5, 0xa9, 0x29, 0xd7, 0xeb,
- 0xa4, 0x03, 0x5d, 0x4d, 0xca, 0x6b, 0x18, 0xc3, 0x6a, 0xc6, 0xf2, 0x89,
- 0xee, 0xcf, 0xbd, 0x87, 0xc9, 0x8f, 0xc1, 0x43, 0x6f, 0xf9, 0x7f, 0xfd,
- 0x58, 0x7b, 0xb2, 0x3a, 0x1d, 0xf3, 0xf0, 0x39, 0xd7, 0x63, 0xae, 0xa7,
- 0x3c, 0x20, 0x28, 0x79, 0x99, 0xd5, 0xeb, 0x9e, 0xf2, 0x06, 0x93, 0x0a,
- 0x14, 0x25, 0x9a, 0xac, 0x7d, 0x23, 0xef, 0xb7, 0x08, 0xc5, 0x7f, 0xf8,
- 0x83, 0x78, 0xa4, 0xfe, 0xf0, 0x87, 0x83, 0xc8, 0xcb, 0x01, 0xbe, 0x9d,
- 0xa7, 0x45, 0x36, 0xa5, 0x42, 0x80, 0xbd, 0xe8, 0x99, 0xcd, 0xa2, 0xf6,
- 0x8e, 0x2f, 0xdc, 0x55, 0xa3, 0x45, 0x38, 0xd3, 0x78, 0x05, 0x67, 0xd9,
- 0x97, 0x1c, 0x79, 0x9b, 0x18, 0x4a, 0xf6, 0x2d, 0x0b, 0x9e, 0xd2, 0xb4,
- 0x54, 0x70, 0x54, 0x8b, 0x66, 0xe8, 0x48, 0x26, 0x0a, 0xd2, 0xb5, 0xc4,
- 0xf7, 0xd3, 0xce, 0xec, 0xbb, 0x19, 0x7b, 0x46, 0x67, 0x47, 0x10, 0x37,
- 0x2f, 0x4a, 0x00, 0xe1, 0x21, 0xd8, 0x99, 0xcb, 0x00, 0x63, 0xa4, 0x0e,
- 0xaa, 0xf7, 0x08, 0x3a, 0xb9, 0xce, 0x92, 0xe8, 0x68, 0x52, 0xc5, 0xfd,
- 0xeb, 0x21, 0x67, 0x8f, 0x09, 0x06, 0x00, 0x2f, 0x93, 0xbf, 0xd7, 0x94,
- 0x7d, 0x46, 0x15, 0xf4, 0x04, 0x96, 0x86, 0x8a, 0x9e, 0x53, 0xb1, 0x67,
- 0xb6, 0xea, 0x68, 0x32, 0x05, 0x6e, 0xa4, 0xa5, 0x44, 0x06, 0x3c, 0x6b,
- 0x4a, 0xd6, 0xf3, 0x34, 0x79, 0x5f, 0xea, 0x94, 0x24, 0x5c, 0x83, 0x41,
- 0xf0, 0xcc, 0x98, 0x39, 0xb4, 0x73, 0x89, 0x63, 0xbe, 0xe1, 0xc4, 0xa4,
- 0x72, 0xc5, 0x54, 0xa5, 0xe4, 0xaf, 0x6f, 0x5f, 0x1e, 0xd7, 0xe2, 0xa4,
- 0x25, 0x08, 0xdd, 0x0f, 0xba, 0x71, 0xe2, 0xbe, 0x39, 0x74, 0x4a, 0x9e,
- 0x1c, 0xa3, 0xb1, 0x44, 0xf1, 0x76, 0x14, 0x71, 0xa3, 0xb6, 0xbd, 0x79,
- 0x28, 0xd2, 0x03, 0x94, 0xe5, 0x95, 0x0c, 0x65, 0xff, 0x13, 0x31, 0x94,
- 0xfd, 0x0f, 0x66, 0x28, 0x7b, 0x3d, 0xd3, 0xd4, 0xc7, 0x66, 0x28, 0xfb,
- 0x9f, 0x80, 0xa1, 0x08, 0xa4, 0xb2, 0xb0, 0xc0, 0x76, 0x29, 0xc2, 0x13,
- 0xd9, 0x6a, 0xda, 0x76, 0xbd, 0x80, 0x7c, 0xcc, 0xf5, 0x36, 0x62, 0xb1,
- 0xa3, 0xc5, 0x6c, 0xee, 0x0b, 0x62, 0xa5, 0x0a, 0x9f, 0xb1, 0x57, 0xf4,
- 0x4b, 0x7a, 0x95, 0xd3, 0xd3, 0xe5, 0xf5, 0x53, 0x06, 0x27, 0x97, 0x5b,
- 0xb5, 0xa5, 0x9a, 0x3c, 0x06, 0xbd, 0x64, 0x43, 0x0c, 0x21, 0xb4, 0x21,
- 0xca, 0x64, 0x7f, 0x13, 0x83, 0x4e, 0xb1, 0xa0, 0x10, 0xec, 0xe8, 0x68,
- 0x4e, 0xa6, 0xcf, 0xdd, 0xde, 0x2d, 0xd7, 0x1b, 0xc4, 0x58, 0x93, 0x80,
- 0x9f, 0xae, 0x48, 0x59, 0x5c, 0xcb, 0x66, 0x8a, 0x58, 0xd6, 0x1c, 0x0e,
- 0xb5, 0xce, 0x56, 0xc0, 0x09, 0x1e, 0xce, 0x82, 0x5d, 0xd8, 0x7b, 0x70,
- 0x00, 0x2f, 0xbd, 0xcb, 0x75, 0x70, 0x57, 0xa5, 0xe1, 0xd8, 0x45, 0x5c,
- 0x85, 0x4d, 0x36, 0x22, 0x81, 0x44, 0x86, 0x01, 0x7c, 0xdd, 0x08, 0x41,
- 0x02, 0x68, 0x05, 0x10, 0xc9, 0xd1, 0x18, 0x01, 0x11, 0xb6, 0x35, 0xbb,
- 0xc4, 0x60, 0xa3, 0x9c, 0xd9, 0x8c, 0xe7, 0x83, 0xc2, 0xc8, 0x58, 0x41,
- 0x35, 0x51, 0xcc, 0x10, 0x29, 0x5f, 0x1d, 0xac, 0x73, 0x58, 0x53, 0x17,
- 0x8d, 0xdc, 0x81, 0x69, 0x0b, 0x34, 0x37, 0x3a, 0xa8, 0xc0, 0x09, 0x82,
- 0x74, 0x09, 0x2b, 0xdc, 0x8c, 0xcf, 0xba, 0x9b, 0xaf, 0x88, 0xe2, 0x0e,
- 0x52, 0xc5, 0xc7, 0xd7, 0x30, 0x82, 0xdd, 0xac, 0xcb, 0x0b, 0xc2, 0x63,
- 0x5d, 0x8f, 0x37, 0xb4, 0xe3, 0x45, 0xc4, 0x19, 0x1e, 0x41, 0x89, 0xaa,
- 0x6d, 0x1a, 0xad, 0x35, 0xd6, 0x96, 0x8c, 0xf1, 0xaa, 0xdf, 0x8a, 0xb5,
- 0xd1, 0x86, 0xcd, 0x70, 0xac, 0xc4, 0xa2, 0x9a, 0x63, 0x4a, 0x03, 0x26,
- 0xd1, 0x48, 0x84, 0xad, 0x67, 0x7d, 0xa9, 0xbf, 0x38, 0xa4, 0xe8, 0x40,
- 0xee, 0x41, 0x02, 0xb8, 0x38, 0xe6, 0x43, 0xb5, 0x59, 0x32, 0xd3, 0xa3,
- 0x07, 0x3b, 0xcf, 0xdf, 0x67, 0xa9, 0x07, 0x89, 0x3d, 0x42, 0x39, 0x5d,
- 0x5c, 0x57, 0x36, 0xf6, 0xb5, 0xc6, 0xd3, 0x91, 0x56, 0x11, 0x08, 0xb3,
- 0xd7, 0xeb, 0x05, 0x6a, 0xb0, 0x5c, 0x67, 0xe9, 0x4d, 0x4d, 0xbe, 0x96,
- 0x91, 0x75, 0xb9, 0x62, 0xc7, 0x48, 0x2a, 0x09, 0xdb, 0x08, 0xe7, 0x96,
- 0x48, 0xa3, 0x1a, 0x61, 0xc9, 0x84, 0x3e, 0xae, 0x61, 0x53, 0x5a, 0x5d,
- 0x93, 0x72, 0xb2, 0xf5, 0x88, 0xa4, 0xc5, 0x7b, 0xfd, 0x9e, 0xe9, 0xa3,
- 0x0c, 0xc1, 0x88, 0x6f, 0xa2, 0xe0, 0x6f, 0x7d, 0x91, 0xdf, 0x19, 0xc5,
- 0xa7, 0x8b, 0x0a, 0x40, 0x71, 0xa7, 0xb9, 0xed, 0xce, 0xd5, 0x4d, 0x43,
- 0x63, 0x2c, 0x3d, 0x8f, 0x71, 0xc2, 0x2b, 0x92, 0x1f, 0xcd, 0xb6, 0x7a,
- 0x79, 0x3b, 0x54, 0xd6, 0xb2, 0xa2, 0x16, 0x28, 0x9c, 0x71, 0x39, 0xb2,
- 0xbf, 0x03, 0xdb, 0x67, 0x78, 0x19, 0xf7, 0x23, 0x91, 0xfa, 0x65, 0x95,
- 0xce, 0x45, 0x86, 0x2b, 0xf2, 0x61, 0xaa, 0x91, 0x66, 0x40, 0xcf, 0x5e,
- 0xa5, 0xec, 0x74, 0xf8, 0x3e, 0x18, 0x29, 0xc5, 0xf5, 0x67, 0x6b, 0xb7,
- 0xa1, 0xc8, 0x9f, 0xec, 0x78, 0x31, 0xf5, 0x82, 0x45, 0x53, 0x83, 0x55,
- 0x13, 0x5f, 0x0f, 0x8e, 0x24, 0xf6, 0xcb, 0xc2, 0xba, 0x70, 0x3f, 0x1b,
- 0x25, 0xa9, 0x57, 0x0e, 0x1e, 0xba, 0x2e, 0x48, 0x56, 0x69, 0x79, 0xa7,
- 0x94, 0x42, 0xf0, 0x92, 0x20, 0x2b, 0x76, 0x5f, 0xb4, 0x15, 0xf1, 0x6c,
- 0x34, 0x2d, 0x97, 0xe2, 0xa5, 0xdb, 0x87, 0x1c, 0xb3, 0xd2, 0x79, 0x1b,
- 0x82, 0x5d, 0x43, 0x9c, 0x15, 0x61, 0x54, 0x64, 0x0a, 0xb7, 0x2f, 0xe3,
- 0x97, 0xc3, 0x92, 0x3f, 0x5a, 0xb1, 0xe7, 0xf8, 0x68, 0xc9, 0xe8, 0x38,
- 0x0c, 0xb1, 0xd2, 0xd6, 0xf1, 0xab, 0x08, 0x2b, 0x3e, 0xa2, 0x4d, 0x0c,
- 0xc9, 0x94, 0x97, 0x98, 0x6b, 0xe5, 0xc0, 0xa3, 0xf9, 0xa2, 0xf0, 0x70,
- 0x05, 0xe9, 0x22, 0x94, 0x3a, 0x18, 0x52, 0xfa, 0xc2, 0x3b, 0x1c, 0x7a,
- 0x28, 0x70, 0x03, 0x7a, 0x65, 0xba, 0x0d, 0xbc, 0xa3, 0xdc, 0x2e, 0xcb,
- 0x09, 0xf6, 0x57, 0x52, 0x55, 0xc6, 0x60, 0x05, 0xe8, 0xe7, 0x52, 0x12,
- 0x15, 0x28, 0xbd, 0x9e, 0xeb, 0xef, 0x50, 0x18, 0x93, 0x18, 0xb3, 0x4b,
- 0x2a, 0xc9, 0xfa, 0x8e, 0x22, 0xca, 0x82, 0x64, 0xae, 0x41, 0x6b, 0xb5,
- 0x27, 0xd5, 0xc3, 0x24, 0x98, 0xc0, 0x26, 0xa4, 0x9b, 0x96, 0x41, 0xd7,
- 0xdd, 0xdf, 0x11, 0x24, 0x92, 0x2b, 0xcc, 0xce, 0xb2, 0x28, 0x5e, 0xb2,
- 0x88, 0x9d, 0x5e, 0x59, 0x5e, 0x75, 0xb0, 0x42, 0xad, 0xf9, 0x4a, 0xe3,
- 0x5a, 0x5b, 0x2a, 0xe3, 0x99, 0x8d, 0x77, 0xe3, 0x74, 0x6c, 0x30, 0x40,
- 0xd9, 0x1e, 0x28, 0xe8, 0xa3, 0xc3, 0xf2, 0xd2, 0xd4, 0x21, 0x28, 0x84,
- 0x93, 0x2c, 0xc7, 0x94, 0xd0, 0xa7, 0xa2, 0x7b, 0x33, 0xd2, 0xfb, 0xa2,
- 0x84, 0xb5, 0xf6, 0xbf, 0xea, 0x16, 0xd6, 0x11, 0xad, 0xed, 0xbe, 0xbc,
- 0xbd, 0x33, 0x2f, 0x53, 0x42, 0x72, 0x42, 0x84, 0x2d, 0x19, 0x81, 0x09,
- 0x82, 0x5d, 0xd7, 0xe4, 0x55, 0x45, 0xbd, 0xe4, 0xda, 0xed, 0x4d, 0x5f,
- 0xff, 0x39, 0x7c, 0x89, 0xf9, 0x22, 0x70, 0x77, 0xba, 0xd8, 0xfd, 0x2c,
- 0x5b, 0xd9, 0x04, 0x5f, 0xd3, 0x4a, 0xcf, 0x00, 0x21, 0x46, 0x29, 0x7e,
- 0xd6, 0x86, 0xcf, 0x69, 0x2e, 0x5b, 0x27, 0x1d, 0x0f, 0xad, 0x39, 0x4a,
- 0x0c, 0x20, 0x63, 0xdb, 0x6a, 0x6e, 0x43, 0x8a, 0x2c, 0x9a, 0xc0, 0xb5,
- 0x1c, 0xa8, 0x33, 0xd8, 0x56, 0x29, 0xc7, 0x99, 0x19, 0x62, 0xf5, 0x1d,
- 0x58, 0x6f, 0xc3, 0xcd, 0xcd, 0x4d, 0x6f, 0x59, 0xc0, 0xc4, 0xd9, 0x2c,
- 0x3a, 0x05, 0x26, 0x77, 0xeb, 0xd4, 0x01, 0x13, 0xbc, 0x61, 0x07, 0x5d,
- 0xf1, 0x6f, 0x6f, 0x9e, 0x77, 0x8d, 0x0f, 0x5c, 0x8b, 0x31, 0x51, 0xfc,
- 0x6f, 0xe9, 0x2b, 0xd2, 0x51, 0x9a, 0x49, 0xc0, 0x67, 0x02, 0x6a, 0xc9,
- 0xf1, 0xd1, 0xf9, 0xbb, 0xd7, 0x27, 0x17, 0xef, 0xde, 0x1c, 0xfd, 0x80,
- 0x73, 0xe6, 0xbb, 0x07, 0x84, 0x74, 0x0c, 0x61, 0x2f, 0xf2, 0x1c, 0x08,
- 0xec, 0x15, 0xb1, 0x5b, 0x4e, 0x36, 0x0a, 0xde, 0x32, 0x5a, 0x58, 0x90,
- 0xc7, 0x89, 0x83, 0x39, 0x70, 0x38, 0x0d, 0x4e, 0xf0, 0x7d, 0x5a, 0xcc,
- 0xd2, 0x49, 0x2f, 0x2f, 0x2e, 0x91, 0xe1, 0x6c, 0x3f, 0x13, 0x81, 0x25,
- 0xd8, 0xdc, 0xb6, 0xa4, 0xec, 0x62, 0x18, 0xc2, 0x75, 0x31, 0x46, 0xaf,
- 0x79, 0x38, 0x87, 0xd6, 0xd9, 0xbe, 0x5a, 0xce, 0xec, 0xbf, 0x35, 0x5a,
- 0xa6, 0xbe, 0xaf, 0x6b, 0x9e, 0x8f, 0xd1, 0xac, 0xb4, 0x0d, 0x38, 0xe7,
- 0xe0, 0x11, 0x49, 0x1d, 0xf3, 0xeb, 0x47, 0x4b, 0xcc, 0x05, 0x95, 0x67,
- 0xaf, 0x71, 0x33, 0xc7, 0x53, 0xce, 0x37, 0x64, 0x98, 0x2f, 0x86, 0xb9,
- 0x81, 0xfd, 0xf3, 0xdc, 0x4f, 0x4c, 0xd1, 0x08, 0xe0, 0x8c, 0x49, 0xef,
- 0xcb, 0x65, 0x3b, 0x18, 0xce, 0x47, 0x8e, 0x43, 0xc4, 0x26, 0xd7, 0x5e,
- 0x6f, 0x1c, 0xc6, 0x47, 0x30, 0x0d, 0x34, 0xf4, 0x77, 0x6b, 0xe7, 0x5f,
- 0xe2, 0x3b, 0x45, 0x0d, 0xfe, 0x89, 0x6c, 0x8d, 0x1b, 0xb6, 0x66, 0x3e,
- 0x5b, 0xaa, 0xd8, 0x05, 0x37, 0xec, 0x49, 0x70, 0xc3, 0xc8, 0x66, 0xb3,
- 0x6a, 0xbb, 0x1e, 0xad, 0xda, 0xae, 0x27, 0x1f, 0x7f, 0xbb, 0x9e, 0x3c,
- 0x60, 0xbb, 0x9e, 0x3c, 0xc8, 0x1f, 0xb4, 0x6a, 0xc3, 0xee, 0xe1, 0xea,
- 0xc6, 0xed, 0x32, 0x27, 0xc9, 0xbd, 0x65, 0x7e, 0x2d, 0xa1, 0x8d, 0x70,
- 0x15, 0x2a, 0x9b, 0x58, 0x5e, 0x36, 0x50, 0x23, 0xfe, 0xdc, 0x3f, 0x7b,
- 0x2d, 0x15, 0xa3, 0x30, 0x22, 0x88, 0x00, 0x79, 0x6c, 0x5a, 0x42, 0xb8,
- 0x96, 0x39, 0x2b, 0x8d, 0x8a, 0x97, 0xa7, 0x3d, 0x0b, 0x8e, 0x2d, 0xe7,
- 0x08, 0x95, 0x57, 0x79, 0x51, 0x0d, 0x17, 0x0c, 0xd4, 0x37, 0xb7, 0xa9,
- 0x13, 0x94, 0x53, 0xe2, 0x39, 0x5f, 0x8a, 0x54, 0xf5, 0xb0, 0x40, 0xb5,
- 0x50, 0x01, 0x9c, 0xf9, 0x29, 0x29, 0x2e, 0x7f, 0xf1, 0xbf, 0x93, 0x60,
- 0xfa, 0x8e, 0x5b, 0xea, 0xfb, 0x80, 0x6b, 0x08, 0xb3, 0x30, 0xb6, 0x8d,
- 0x83, 0xeb, 0xb4, 0xbf, 0x78, 0x34, 0x1c, 0xa6, 0xf3, 0x2a, 0xf4, 0x8a,
- 0x8f, 0x24, 0x51, 0xa4, 0xac, 0x06, 0xd4, 0x95, 0x0d, 0x23, 0x29, 0xe3,
- 0x3c, 0x59, 0xa0, 0xd3, 0x12, 0x5c, 0xc9, 0x10, 0xb7, 0x33, 0xa2, 0x55,
- 0xf6, 0x6a, 0xeb, 0x3a, 0x9e, 0x5e, 0x2e, 0x05, 0x8a, 0x89, 0x0e, 0x6c,
- 0x0d, 0x0a, 0xc2, 0x2b, 0x70, 0x8a, 0x1b, 0x17, 0xd8, 0xac, 0x2c, 0x5e,
- 0x93, 0xc4, 0x65, 0x32, 0xae, 0x4d, 0xf4, 0x6d, 0x57, 0xd3, 0x48, 0xdd,
- 0xfa, 0x21, 0x49, 0x28, 0xd3, 0x99, 0x94, 0x04, 0x2e, 0xec, 0x62, 0xf3,
- 0x4a, 0x28, 0x0a, 0xad, 0x1b, 0x11, 0x88, 0xa1, 0xc0, 0x14, 0xc3, 0xe7,
- 0xe5, 0x15, 0x10, 0x51, 0xbc, 0xc5, 0x15, 0x98, 0xfd, 0xe0, 0x27, 0xc2,
- 0xe8, 0x36, 0x3c, 0xc0, 0x6f, 0x4f, 0xf3, 0x9c, 0xce, 0x73, 0x0e, 0x38,
- 0xb4, 0x5f, 0x24, 0x6d, 0xe1, 0x80, 0xa3, 0x68, 0x63, 0x9c, 0xe7, 0x83,
- 0xa4, 0xd8, 0x90, 0x4c, 0x48, 0x4a, 0x4d, 0x13, 0x2b, 0xba, 0x9e, 0x5e,
- 0xa2, 0xbb, 0x6f, 0xf9, 0xb9, 0x48, 0x6c, 0x58, 0x6d, 0x18, 0x52, 0x6d,
- 0xa3, 0xea, 0x12, 0xcf, 0xd2, 0xb6, 0xe2, 0xe0, 0xca, 0x87, 0xa2, 0xfc,
- 0xb4, 0x48, 0xf1, 0x8c, 0x8b, 0x14, 0x6b, 0xc9, 0x24, 0x2a, 0xc9, 0xea,
- 0x84, 0xd5, 0x75, 0x43, 0x75, 0x56, 0x47, 0xa3, 0x0c, 0xdb, 0xc2, 0x88,
- 0x6f, 0x1c, 0xcc, 0x3c, 0x4b, 0xb1, 0xea, 0xae, 0xde, 0xd7, 0x20, 0xc3,
- 0xa3, 0xea, 0xc4, 0xc9, 0x87, 0x1a, 0x35, 0xa9, 0xb5, 0x16, 0xbc, 0xa4,
- 0x14, 0xd2, 0x1a, 0x05, 0x27, 0x21, 0x8c, 0x7e, 0x62, 0x0a, 0x4c, 0xbb,
- 0xd8, 0x4b, 0xa9, 0x8d, 0x0e, 0x94, 0x8a, 0x0e, 0xa3, 0xd4, 0x70, 0x45,
- 0x05, 0x98, 0x28, 0x3d, 0xad, 0x04, 0xa8, 0x39, 0x10, 0x6b, 0x48, 0x6b,
- 0xf7, 0xe9, 0xf2, 0x59, 0xb8, 0xfd, 0x8d, 0x7f, 0x46, 0x9d, 0x51, 0x91,
- 0xcd, 0xde, 0x77, 0x0e, 0xa2, 0xce, 0x30, 0x07, 0x3e, 0xdf, 0x89, 0xfe,
- 0xb5, 0xb1, 0x06, 0xfe, 0x55, 0xb3, 0x95, 0x0d, 0xf3, 0xd9, 0x07, 0xb4,
- 0xf7, 0x2d, 0x66, 0x70, 0x27, 0xa8, 0xc7, 0xad, 0xfb, 0x62, 0x1c, 0x7a,
- 0x23, 0x3a, 0x8c, 0xf0, 0xdb, 0x90, 0x74, 0xe8, 0x0a, 0x58, 0x0e, 0x8c,
- 0x9c, 0x80, 0x58, 0xe3, 0x27, 0x45, 0x72, 0x53, 0xbf, 0x50, 0xee, 0x1f,
- 0xa4, 0x13, 0xc5, 0xcf, 0xbb, 0x26, 0x6f, 0x3d, 0x50, 0x14, 0x31, 0xbe,
- 0xe8, 0x36, 0xab, 0x20, 0x36, 0x22, 0x82, 0x9d, 0x48, 0xe7, 0xbd, 0x9a,
- 0xb5, 0xfe, 0x57, 0x7c, 0xf3, 0xd7, 0xc5, 0xec, 0x7d, 0x0c, 0xd2, 0x00,
- 0x5a, 0xf0, 0x62, 0xb1, 0xfd, 0x85, 0x2f, 0x29, 0xeb, 0xc5, 0xa6, 0xd0,
- 0xc9, 0xc9, 0xc8, 0xb0, 0x14, 0x79, 0x4d, 0x19, 0x07, 0x3b, 0xa2, 0x34,
- 0x60, 0xb9, 0x2d, 0xd8, 0xc1, 0xba, 0x9f, 0xd0, 0xf9, 0x9d, 0x95, 0x43,
- 0x8c, 0x77, 0x41, 0xbf, 0x51, 0x47, 0x46, 0xa3, 0xcd, 0x76, 0x64, 0xe9,
- 0xf8, 0x14, 0x26, 0xfe, 0xd5, 0x3b, 0xa4, 0x7b, 0x99, 0x94, 0x0b, 0x73,
- 0xd2, 0x05, 0x70, 0x18, 0xae, 0x3c, 0x72, 0x69, 0x71, 0xd1, 0x63, 0x6d,
- 0x98, 0x56, 0x9f, 0xf8, 0xb5, 0x1f, 0x40, 0x0d, 0xd7, 0x14, 0x36, 0x08,
- 0x07, 0xb8, 0xc8, 0x6f, 0x4a, 0xc2, 0x23, 0x4b, 0x26, 0x37, 0x84, 0x4b,
- 0xa1, 0x83, 0x6c, 0x8c, 0x4f, 0xb2, 0xe6, 0x30, 0x51, 0x36, 0xf1, 0x6c,
- 0x76, 0xc3, 0x49, 0x8e, 0xc7, 0x6e, 0xb4, 0xca, 0xb5, 0x15, 0xda, 0x86,
- 0x15, 0xe2, 0x94, 0x67, 0xc9, 0x5a, 0x69, 0x20, 0x0f, 0x75, 0xb2, 0xae,
- 0x80, 0x15, 0x1c, 0x68, 0x3c, 0xd0, 0xc5, 0x58, 0x3f, 0xe6, 0x78, 0xc0,
- 0xb8, 0x61, 0xf8, 0x36, 0x13, 0xf4, 0xd0, 0x7e, 0x10, 0xff, 0x9a, 0xd4,
- 0x8a, 0xf0, 0xbd, 0x4f, 0xe1, 0x48, 0x4f, 0xa8, 0xde, 0x1f, 0x22, 0x7e,
- 0x1c, 0xb6, 0x40, 0x85, 0xd5, 0xe4, 0xe0, 0x52, 0x41, 0x8f, 0x19, 0x1a,
- 0xc8, 0xb5, 0x8e, 0x92, 0xbe, 0xca, 0x54, 0x3c, 0xa5, 0x10, 0x77, 0x0c,
- 0x2d, 0x1f, 0x78, 0x96, 0x74, 0x97, 0x91, 0x47, 0x66, 0x08, 0xa8, 0xff,
- 0x0d, 0xac, 0xd9, 0x86, 0xe1, 0x5a, 0x23, 0x53, 0x33, 0x9e, 0x40, 0x78,
- 0x60, 0x7b, 0xe1, 0x84, 0x37, 0x1d, 0xf5, 0x8d, 0x16, 0x08, 0xfe, 0x21,
- 0x2b, 0xdd, 0x5a, 0x7f, 0x44, 0xbc, 0xf8, 0x44, 0x6e, 0x0c, 0x0f, 0x98,
- 0x63, 0x74, 0x07, 0x17, 0xe6, 0xd4, 0x3b, 0x4e, 0xf0, 0x70, 0xa1, 0x65,
- 0x44, 0xa9, 0x50, 0xc2, 0xbb, 0xbf, 0x9c, 0x9c, 0x9c, 0xbf, 0x7c, 0x76,
- 0x7a, 0x22, 0x3e, 0x3e, 0xf3, 0xd1, 0xeb, 0x8b, 0xbf, 0x9d, 0x02, 0xe1,
- 0xe7, 0xc3, 0xf7, 0x18, 0xd9, 0x2c, 0x72, 0x5d, 0xf3, 0xb0, 0x4b, 0x92,
- 0x98, 0x68, 0xd7, 0x84, 0x71, 0x3f, 0xa4, 0x34, 0xce, 0xa3, 0x97, 0x3f,
- 0xc2, 0x5f, 0x2f, 0xce, 0xe3, 0xb7, 0x3f, 0x1a, 0x53, 0xff, 0x16, 0x10,
- 0xdc, 0x5f, 0x74, 0x3e, 0x65, 0x80, 0xfe, 0x15, 0xcd, 0x88, 0xe2, 0x78,
- 0x8e, 0xcf, 0x23, 0x06, 0x54, 0x43, 0x54, 0xe8, 0xb4, 0xa2, 0xa2, 0x2c,
- 0x45, 0xfe, 0x3e, 0x9d, 0x29, 0x6a, 0x56, 0x49, 0x7e, 0x61, 0xdc, 0x85,
- 0x25, 0x40, 0x66, 0x5c, 0x9d, 0x2d, 0x35, 0x2e, 0x7f, 0x06, 0x56, 0x23,
- 0x01, 0xcf, 0xdb, 0x1c, 0x75, 0x8a, 0xa5, 0xc3, 0x49, 0x52, 0xf8, 0x01,
- 0x82, 0x8d, 0x84, 0x2a, 0x02, 0x26, 0x86, 0x9d, 0x38, 0xeb, 0xc3, 0x1b,
- 0x84, 0xfe, 0x21, 0x49, 0x8e, 0x5a, 0x07, 0x94, 0x72, 0xe0, 0xa3, 0xaf,
- 0x48, 0x46, 0x8c, 0x76, 0x77, 0x7a, 0xeb, 0x00, 0x9f, 0xd3, 0x09, 0xb4,
- 0x03, 0x6c, 0x83, 0x45, 0x03, 0xa9, 0x66, 0x31, 0x33, 0x5a, 0x00, 0xcb,
- 0x8c, 0xd2, 0xa4, 0x8b, 0x15, 0xf6, 0x64, 0x27, 0x52, 0x1c, 0xb9, 0xb0,
- 0xb1, 0xa2, 0x71, 0x54, 0x5a, 0x2c, 0x16, 0x21, 0x93, 0x45, 0x30, 0x27,
- 0xfd, 0x43, 0x4c, 0x16, 0x8d, 0xa1, 0xec, 0xad, 0x6b, 0xb5, 0xa8, 0xad,
- 0x1b, 0xb1, 0x88, 0x1a, 0xdc, 0x57, 0x9d, 0x41, 0xdc, 0xc5, 0x54, 0x9f,
- 0xfe, 0x10, 0xff, 0xfd, 0x26, 0xe0, 0x40, 0xd9, 0x02, 0xb6, 0x9b, 0x5d,
- 0xa3, 0x01, 0x1c, 0x9e, 0x65, 0x71, 0x1b, 0x1f, 0xed, 0x99, 0xbc, 0x15,
- 0xc1, 0x3e, 0xc2, 0x46, 0x08, 0x84, 0x84, 0x1a, 0xa5, 0xb5, 0xf3, 0x70,
- 0xb7, 0x78, 0x2d, 0xe7, 0xd2, 0x1e, 0x35, 0x08, 0xeb, 0xdc, 0x8b, 0x9e,
- 0x9d, 0xbc, 0xe9, 0x46, 0xe7, 0x27, 0xaf, 0x58, 0xb9, 0x3e, 0x79, 0xfd,
- 0x3d, 0xe5, 0x5a, 0x8b, 0x47, 0x1f, 0x91, 0xec, 0x60, 0x8b, 0x7c, 0x14,
- 0x74, 0x67, 0xd3, 0xe1, 0x5d, 0x52, 0x52, 0xca, 0x72, 0x31, 0x0d, 0xd3,
- 0x88, 0x33, 0xd5, 0xf5, 0xeb, 0xbe, 0x85, 0xf3, 0xa7, 0x7b, 0xeb, 0xee,
- 0xaa, 0xf4, 0x0f, 0xb3, 0x95, 0x45, 0x22, 0x3d, 0x6c, 0xbd, 0xbd, 0xc5,
- 0x84, 0xb7, 0xfa, 0xfe, 0x45, 0x87, 0xf0, 0xcf, 0x37, 0x41, 0xd7, 0x57,
- 0xff, 0x45, 0x60, 0xf7, 0xc4, 0x5e, 0x5a, 0x83, 0x75, 0x91, 0xf5, 0xe0,
- 0x0d, 0x9c, 0xfb, 0x4e, 0x1f, 0xd3, 0x42, 0x26, 0xae, 0x24, 0x41, 0xcd,
- 0x4d, 0x05, 0x3d, 0x82, 0x5c, 0x10, 0xfd, 0x17, 0x5d, 0x3c, 0xb7, 0x68,
- 0x1b, 0x71, 0xb6, 0x26, 0x58, 0x7b, 0x8a, 0xf2, 0x6c, 0x23, 0xb7, 0x66,
- 0x26, 0x71, 0x50, 0x10, 0xbc, 0x47, 0xd9, 0x88, 0xeb, 0x0f, 0x62, 0xb6,
- 0x7e, 0x5e, 0x20, 0xb4, 0x48, 0x14, 0x6d, 0xfc, 0xbf, 0xdb, 0xe8, 0x28,
- 0xd8, 0xce, 0x46, 0xef, 0x8a, 0x32, 0xd9, 0x68, 0x6a, 0x22, 0xce, 0xd7,
- 0x23, 0xfc, 0x3a, 0xda, 0xe8, 0x99, 0x47, 0xe5, 0x77, 0xfc, 0x3c, 0x44,
- 0x16, 0x2a, 0x9e, 0xb1, 0xbb, 0x5e, 0x31, 0x09, 0xcf, 0x80, 0x97, 0xf5,
- 0xfb, 0xa7, 0xe8, 0xd0, 0x2f, 0x92, 0x42, 0x6c, 0x3e, 0x54, 0x58, 0x69,
- 0x76, 0x89, 0xee, 0x9d, 0x68, 0xfe, 0x7e, 0x58, 0xee, 0x36, 0xc3, 0xe8,
- 0x33, 0x27, 0x3d, 0xd9, 0xe0, 0x4b, 0x9e, 0xff, 0xe5, 0xb8, 0xff, 0xbb,
- 0xdd, 0x5d, 0xc2, 0x36, 0xdd, 0x44, 0xcc, 0xc5, 0xa7, 0x8f, 0x77, 0xf7,
- 0xb6, 0x42, 0x86, 0x62, 0xaf, 0x6a, 0x28, 0x97, 0xe5, 0x71, 0xb6, 0x8f,
- 0xa0, 0x04, 0x04, 0x50, 0xd9, 0x34, 0x3c, 0x4a, 0x11, 0x2d, 0x0e, 0xe3,
- 0xb6, 0x34, 0xcb, 0x92, 0x61, 0xf4, 0xbc, 0xf2, 0x61, 0xf4, 0x15, 0xa3,
- 0x3a, 0x75, 0x78, 0xfc, 0x07, 0x1d, 0xc3, 0xa6, 0x0c, 0x26, 0x2c, 0xe2,
- 0xb2, 0x96, 0xf5, 0x71, 0xd3, 0xf1, 0x6b, 0xea, 0xdd, 0xee, 0xbc, 0xb2,
- 0xb2, 0x56, 0xb8, 0x9b, 0x85, 0x3b, 0x20, 0x4e, 0x59, 0xad, 0x00, 0x16,
- 0x83, 0xa7, 0x8f, 0xc9, 0x88, 0x3a, 0x11, 0x53, 0x10, 0x2a, 0xc6, 0x4e,
- 0x9e, 0xb8, 0x59, 0x7f, 0xe7, 0x14, 0xd5, 0x5b, 0x0d, 0xd4, 0x4c, 0x86,
- 0xf7, 0x3b, 0xc0, 0x4a, 0x3a, 0xc1, 0x16, 0xef, 0x4f, 0x0b, 0x5c, 0xa0,
- 0xda, 0x29, 0x49, 0x8d, 0xa4, 0xae, 0xe0, 0xf9, 0x52, 0x44, 0xad, 0x55,
- 0x66, 0xc7, 0xf8, 0x1b, 0x8a, 0x8f, 0x60, 0x4f, 0x2b, 0x1e, 0x4a, 0xeb,
- 0x6d, 0xdd, 0x94, 0x58, 0xd6, 0xb4, 0x1a, 0x52, 0x8d, 0x4c, 0xf4, 0xe1,
- 0x63, 0x0c, 0x18, 0xda, 0xb6, 0x3c, 0x15, 0x67, 0x4e, 0xd0, 0xac, 0x84,
- 0x86, 0x62, 0x09, 0x82, 0x7d, 0x01, 0x5a, 0x3e, 0xab, 0xe1, 0xa0, 0x84,
- 0x07, 0x60, 0x98, 0x7c, 0x8c, 0x82, 0x9b, 0xb7, 0xc7, 0xfc, 0xc0, 0x49,
- 0xca, 0xbd, 0x47, 0x65, 0x6b, 0x65, 0xef, 0x1f, 0x54, 0x3c, 0xd3, 0x91,
- 0x75, 0xd6, 0xbd, 0x1b, 0xc9, 0x3b, 0xe5, 0xba, 0x65, 0x3f, 0x84, 0x93,
- 0x32, 0x25, 0xd1, 0x0d, 0x79, 0xd2, 0x95, 0xc6, 0x6b, 0xdc, 0xb5, 0x18,
- 0x44, 0x87, 0x04, 0x39, 0x16, 0xae, 0x0f, 0x72, 0x42, 0x69, 0xac, 0x20,
- 0xd0, 0x15, 0x20, 0x57, 0xe5, 0x65, 0x03, 0x23, 0x9f, 0x1a, 0x96, 0xa2,
- 0x5b, 0x29, 0x23, 0x97, 0x31, 0x28, 0x53, 0x20, 0x2e, 0x10, 0x8f, 0x9f,
- 0xd0, 0xb9, 0x57, 0x59, 0x78, 0x83, 0xe0, 0xfa, 0x91, 0x95, 0x95, 0xc9,
- 0x38, 0xc5, 0x9f, 0x84, 0x1a, 0x8c, 0xc2, 0x56, 0x96, 0x4c, 0x36, 0xba,
- 0xfe, 0xfe, 0x6e, 0x08, 0x91, 0x6c, 0xc0, 0x2d, 0xcd, 0xad, 0x21, 0x9f,
- 0xa7, 0xba, 0x80, 0x32, 0x0e, 0x76, 0xc7, 0x73, 0x09, 0xa6, 0x8a, 0xeb,
- 0xe3, 0x29, 0x62, 0x55, 0xe9, 0x59, 0x7a, 0x4c, 0x73, 0xf5, 0x7a, 0xd7,
- 0x6d, 0xd2, 0x8d, 0x50, 0x09, 0xac, 0xdd, 0x67, 0xa3, 0x12, 0xec, 0x9c,
- 0x8b, 0x1c, 0xac, 0x57, 0xed, 0x31, 0x45, 0x50, 0x6b, 0xb3, 0x77, 0x0c,
- 0xb2, 0x2f, 0xcd, 0xf9, 0x21, 0x8a, 0xcb, 0x62, 0x14, 0x97, 0x86, 0x28,
- 0x2a, 0xbd, 0xb8, 0xa4, 0xa6, 0x2f, 0x1c, 0x86, 0x60, 0x07, 0x8f, 0xb8,
- 0x40, 0x5c, 0x2d, 0x60, 0x56, 0x72, 0x9f, 0x11, 0x7d, 0x7f, 0xc4, 0xf6,
- 0x13, 0xa9, 0x9a, 0xe4, 0x58, 0xec, 0x68, 0x16, 0x01, 0x23, 0x27, 0xae,
- 0x33, 0x46, 0xe7, 0x4a, 0xa7, 0x31, 0x7b, 0x68, 0x8f, 0x23, 0x0e, 0x5a,
- 0x20, 0x78, 0xee, 0xe8, 0xa6, 0xc8, 0xaa, 0x8a, 0xd0, 0x6d, 0x6a, 0x75,
- 0x80, 0xdb, 0x8a, 0xaf, 0xd3, 0xed, 0x08, 0x2b, 0x04, 0x3b, 0x49, 0x88,
- 0x68, 0x63, 0xae, 0x43, 0x47, 0x02, 0x85, 0x8c, 0x89, 0xb1, 0xba, 0xac,
- 0x5f, 0x18, 0xdf, 0xfb, 0xaf, 0x2f, 0x96, 0x83, 0xa9, 0x0a, 0xec, 0x1f,
- 0x17, 0xf7, 0x92, 0xb8, 0x3b, 0x42, 0x4d, 0x92, 0x10, 0x1c, 0x63, 0xfd,
- 0xd7, 0x02, 0xd8, 0x3e, 0xf1, 0xe0, 0x58, 0xe2, 0x03, 0x3c, 0xde, 0xb3,
- 0xf4, 0xb6, 0x0a, 0xcb, 0x86, 0xba, 0xfa, 0xeb, 0xd1, 0xeb, 0xc7, 0x93,
- 0x0d, 0x0d, 0xce, 0x31, 0x61, 0xcf, 0xf6, 0x86, 0x1f, 0x25, 0x34, 0x2a,
- 0x26, 0x20, 0xe8, 0x98, 0xc4, 0xb4, 0x43, 0x58, 0xa9, 0xd4, 0x2b, 0x9b,
- 0xae, 0x22, 0x3c, 0x6f, 0x30, 0xe8, 0x07, 0xd9, 0x74, 0x31, 0xb5, 0x25,
- 0x41, 0x10, 0x46, 0xb1, 0x22, 0xa1, 0x90, 0xed, 0xe2, 0xae, 0x6b, 0x2c,
- 0x0e, 0xf8, 0xbf, 0x10, 0x35, 0xdc, 0xa9, 0xc1, 0x46, 0xec, 0x8f, 0xec,
- 0x6c, 0x5a, 0xf3, 0x5a, 0xe1, 0x54, 0x59, 0x97, 0xc3, 0xc0, 0x53, 0x06,
- 0x4e, 0x64, 0x5b, 0x54, 0xe2, 0xb9, 0xeb, 0x09, 0xc7, 0x1a, 0x0b, 0x48,
- 0xce, 0x53, 0x51, 0xcd, 0x69, 0x2c, 0xec, 0xdf, 0xc7, 0x58, 0x3c, 0x22,
- 0x2f, 0x33, 0x5c, 0x24, 0x0e, 0x19, 0x1e, 0x7e, 0xe1, 0xf3, 0x58, 0x2c,
- 0x8c, 0x32, 0x80, 0x76, 0x6e, 0xb2, 0x51, 0x75, 0xd5, 0xc3, 0x20, 0x3b,
- 0xb5, 0xa7, 0x95, 0x52, 0xe4, 0x10, 0xad, 0xe0, 0x99, 0x5f, 0x6c, 0x62,
- 0x90, 0x06, 0x0d, 0xd2, 0x6c, 0xb8, 0xa3, 0xa5, 0x8d, 0x38, 0x5f, 0x06,
- 0x21, 0xee, 0x48, 0x40, 0xa3, 0x38, 0xd6, 0x6d, 0x56, 0x39, 0x4d, 0x25,
- 0xdd, 0x04, 0x58, 0xc0, 0x78, 0x9c, 0xdd, 0x46, 0x7e, 0x70, 0x99, 0x56,
- 0x85, 0xe8, 0x99, 0xe3, 0x4e, 0xf2, 0xda, 0xc6, 0xfb, 0x0d, 0x14, 0x38,
- 0x36, 0xfe, 0x22, 0xbc, 0x77, 0x98, 0x2f, 0x66, 0xcc, 0x7d, 0x44, 0x99,
- 0x07, 0xfe, 0xf2, 0x3e, 0x9b, 0xe4, 0xc1, 0x30, 0x5a, 0xb8, 0x29, 0xa6,
- 0xfc, 0xfa, 0xab, 0x0d, 0x0d, 0x6a, 0xc3, 0xe2, 0x8f, 0x97, 0x89, 0x7c,
- 0xcd, 0x25, 0x5a, 0x37, 0x2e, 0xf9, 0xa1, 0xef, 0xf5, 0x21, 0xdf, 0xd3,
- 0x88, 0x91, 0xba, 0x1c, 0x99, 0xcb, 0x13, 0xe7, 0x69, 0xc0, 0xa3, 0x9b,
- 0xef, 0xbb, 0x11, 0xa8, 0x6d, 0xdf, 0x77, 0xa3, 0x0b, 0xd0, 0xc2, 0xb6,
- 0x48, 0x6f, 0xdb, 0xdd, 0xd9, 0x7b, 0x04, 0xcb, 0x4c, 0xd5, 0x38, 0x50,
- 0x31, 0x48, 0x6f, 0xbd, 0xe8, 0x17, 0x72, 0x93, 0xee, 0xbe, 0xc7, 0x45,
- 0xc3, 0xa7, 0x7b, 0xd6, 0x6e, 0x8e, 0xa0, 0xde, 0x7f, 0xe9, 0x46, 0xfb,
- 0x6c, 0xbb, 0xdd, 0xfd, 0x3e, 0xb8, 0xee, 0x44, 0x96, 0x44, 0x1e, 0xc4,
- 0x6b, 0xf3, 0xcb, 0x6c, 0x18, 0x19, 0x73, 0x48, 0x82, 0xc7, 0xf6, 0x52,
- 0xc5, 0x19, 0x43, 0x1c, 0xbc, 0x4b, 0x5e, 0x8e, 0x12, 0xc6, 0xcf, 0x72,
- 0x31, 0x72, 0xda, 0x7b, 0x89, 0x6c, 0xab, 0xc8, 0x95, 0x07, 0x37, 0x31,
- 0xec, 0x3d, 0xa5, 0x1d, 0x25, 0x08, 0x32, 0x99, 0xe5, 0x94, 0xd0, 0x6c,
- 0xac, 0x8c, 0xa5, 0x2f, 0xb4, 0xb7, 0x19, 0x18, 0x08, 0xe3, 0x10, 0x0f,
- 0xab, 0xc2, 0x93, 0xc0, 0xdd, 0x82, 0x03, 0xe2, 0x33, 0x6a, 0x0a, 0x3f,
- 0x70, 0xa5, 0x13, 0x47, 0xb2, 0xa5, 0x48, 0x42, 0x2f, 0x47, 0x24, 0x1d,
- 0xa6, 0x23, 0x45, 0xc4, 0x8b, 0xa6, 0x14, 0x27, 0x37, 0x2c, 0xb2, 0xf9,
- 0x5c, 0xaa, 0x9a, 0xe2, 0xf2, 0xc4, 0x66, 0x79, 0xca, 0x09, 0x3e, 0x80,
- 0x9e, 0x6b, 0x38, 0x1b, 0x88, 0x12, 0x14, 0x30, 0xaf, 0xe9, 0x6a, 0xb9,
- 0x63, 0xb2, 0xcb, 0x1a, 0xf2, 0xc7, 0x08, 0xdb, 0x34, 0x0c, 0xe6, 0xdf,
- 0x00, 0x83, 0x53, 0xb6, 0x73, 0x4f, 0x33, 0x8c, 0x5d, 0xa0, 0x9e, 0x35,
- 0xfc, 0x17, 0xf5, 0x37, 0x77, 0x1e, 0xfa, 0xe6, 0xab, 0xf5, 0xf8, 0xf5,
- 0xdf, 0xbb, 0x8d, 0xed, 0x27, 0x61, 0xe3, 0xce, 0x7e, 0xda, 0xb0, 0xd2,
- 0xd4, 0xeb, 0xae, 0x07, 0xb3, 0x03, 0xce, 0xcf, 0xce, 0xf7, 0xb7, 0x4c,
- 0x49, 0x4f, 0xf2, 0x3c, 0x68, 0xa1, 0xcc, 0x48, 0x51, 0xa4, 0x9d, 0x10,
- 0x3b, 0xd6, 0xe1, 0xa9, 0x6a, 0x89, 0x6f, 0xbb, 0x45, 0x0f, 0x5e, 0x42,
- 0x66, 0x02, 0xea, 0x8f, 0x02, 0x91, 0x2d, 0xdc, 0x7a, 0x4a, 0x77, 0x2e,
- 0x79, 0x10, 0x2c, 0x0f, 0x17, 0x79, 0xa8, 0xf4, 0x22, 0xb8, 0xf0, 0xde,
- 0x60, 0x98, 0x16, 0x2d, 0x18, 0x1c, 0x53, 0x35, 0x14, 0x63, 0x4a, 0xe4,
- 0xc2, 0x21, 0x88, 0x88, 0xdd, 0x18, 0x24, 0xe3, 0x45, 0x04, 0xec, 0x8f,
- 0x92, 0x9e, 0x64, 0x1f, 0xa4, 0x40, 0x69, 0x23, 0x1d, 0xb0, 0x94, 0x6b,
- 0x12, 0x82, 0x31, 0x0c, 0x8c, 0xcd, 0x8f, 0x63, 0x3f, 0x05, 0x6c, 0x9a,
- 0xa0, 0x03, 0x80, 0x57, 0x8b, 0x54, 0x71, 0xba, 0x54, 0x70, 0x71, 0x6a,
- 0x76, 0xc4, 0x61, 0x42, 0x69, 0x88, 0x30, 0xc2, 0xd7, 0xa7, 0xfd, 0x0b,
- 0x27, 0xcd, 0xc0, 0xbf, 0xfb, 0x49, 0x01, 0xd3, 0xc2, 0x7c, 0x1c, 0x27,
- 0xee, 0x40, 0x21, 0x9c, 0xbe, 0xec, 0x5f, 0x78, 0xd4, 0x8d, 0x28, 0xc2,
- 0x07, 0x51, 0x1f, 0xe3, 0x23, 0x9d, 0xd2, 0xa9, 0xb4, 0x7b, 0x8c, 0x21,
- 0x2a, 0xb9, 0x13, 0x64, 0x11, 0xe1, 0x78, 0x47, 0x1b, 0xe6, 0xee, 0x0f,
- 0x02, 0x87, 0xf8, 0x27, 0xf6, 0xae, 0x08, 0x84, 0xa9, 0x06, 0x7d, 0x97,
- 0x8b, 0x41, 0xac, 0xab, 0xa6, 0x38, 0x67, 0xe5, 0xdd, 0x74, 0x90, 0x63,
- 0xec, 0x24, 0xc8, 0x66, 0xef, 0x7d, 0xce, 0xb5, 0x29, 0x74, 0xc5, 0x4b,
- 0x54, 0xa4, 0x68, 0xb8, 0xb9, 0xae, 0x45, 0xf3, 0x0d, 0xa3, 0x94, 0xb0,
- 0x36, 0xc9, 0x95, 0x85, 0x4f, 0xdf, 0x8b, 0xb8, 0x70, 0x21, 0xdc, 0x74,
- 0x0d, 0x58, 0xb9, 0x39, 0x87, 0x0e, 0xd6, 0x41, 0x89, 0x31, 0xad, 0x43,
- 0x81, 0x88, 0x57, 0x64, 0xb2, 0x38, 0xd4, 0x28, 0x25, 0xa0, 0x0b, 0xa1,
- 0x3e, 0x02, 0xd4, 0x4c, 0xd9, 0xaf, 0x65, 0x46, 0x0d, 0x9c, 0xc9, 0x73,
- 0x8c, 0x25, 0x97, 0x69, 0x9c, 0x8d, 0x18, 0x4d, 0xa8, 0x34, 0x7e, 0x70,
- 0xde, 0x45, 0xae, 0x4d, 0x0a, 0xdc, 0x99, 0x72, 0x47, 0x08, 0x96, 0xbb,
- 0x65, 0x27, 0xd9, 0xed, 0x57, 0x43, 0x53, 0xac, 0x95, 0x17, 0xaa, 0x87,
- 0xe7, 0x8a, 0x21, 0x28, 0x54, 0xfb, 0x9a, 0xb2, 0xa1, 0xb9, 0x82, 0xc2,
- 0xdb, 0x97, 0xcf, 0x4e, 0xcd, 0x7a, 0xc9, 0xfa, 0x10, 0xe2, 0xa3, 0x99,
- 0x2a, 0xc2, 0x56, 0xeb, 0xdd, 0x42, 0x3b, 0xe2, 0x21, 0xa5, 0x2d, 0x66,
- 0x19, 0xf4, 0x1f, 0xb1, 0xde, 0x38, 0x46, 0xa8, 0x66, 0xe0, 0x5e, 0x57,
- 0x56, 0xe8, 0x29, 0x09, 0xac, 0x56, 0xd6, 0x40, 0x4e, 0xec, 0x7b, 0xcd,
- 0xae, 0x68, 0x01, 0x1b, 0x5f, 0x1e, 0x26, 0x6b, 0x58, 0xd6, 0x47, 0x0f,
- 0x93, 0x35, 0x2d, 0xaf, 0xab, 0x18, 0xda, 0x21, 0xf9, 0x8a, 0x21, 0x9c,
- 0x8d, 0xf6, 0x12, 0x7d, 0x7f, 0xc5, 0x1d, 0xfc, 0xc7, 0x02, 0x11, 0xc8,
- 0x96, 0x15, 0x8c, 0x22, 0xb8, 0xcf, 0x09, 0x97, 0xdd, 0x3d, 0x04, 0x11,
- 0x6d, 0x9b, 0x0a, 0xb6, 0x78, 0x72, 0x37, 0x9a, 0xa7, 0x1c, 0xd4, 0x93,
- 0x7a, 0x15, 0xed, 0xbc, 0x90, 0x32, 0x2f, 0x9b, 0xcf, 0xdf, 0x9c, 0xbd,
- 0x8a, 0x2f, 0xce, 0xb6, 0x48, 0x35, 0xa7, 0x96, 0x97, 0xa4, 0x72, 0x96,
- 0x2a, 0xfb, 0x3a, 0xd5, 0x6b, 0xc5, 0x51, 0xb3, 0x59, 0xa2, 0xdf, 0xc9,
- 0xc2, 0x95, 0xd3, 0xf0, 0xf4, 0xad, 0xc1, 0x9d, 0x17, 0xb4, 0x42, 0x42,
- 0x3a, 0x8a, 0x72, 0x70, 0x60, 0x86, 0x09, 0xaa, 0x84, 0x1a, 0xd0, 0x5e,
- 0x07, 0xd4, 0x1a, 0x2c, 0xca, 0xbb, 0x48, 0x2a, 0xea, 0x94, 0x48, 0x8e,
- 0x78, 0xc1, 0xfb, 0x2e, 0x28, 0xf6, 0xb5, 0x61, 0x8a, 0xb5, 0x96, 0x22,
- 0xc7, 0x5a, 0x1d, 0x5c, 0x1a, 0xa1, 0xca, 0x81, 0x49, 0x25, 0x45, 0x91,
- 0xdf, 0xa8, 0x20, 0x83, 0xcc, 0x16, 0x88, 0x75, 0x86, 0x91, 0x24, 0x25,
- 0xe8, 0xb5, 0xed, 0xb5, 0x74, 0xa0, 0x33, 0xc4, 0x54, 0xe6, 0x82, 0xe1,
- 0x65, 0x8b, 0x88, 0x62, 0xf7, 0xe3, 0x33, 0x22, 0xf5, 0x39, 0xa3, 0x40,
- 0x39, 0x23, 0xde, 0xdf, 0x59, 0xb7, 0x60, 0x8b, 0x5b, 0x89, 0xac, 0x49,
- 0x6f, 0xb8, 0x18, 0x71, 0x55, 0x2c, 0xb0, 0x1c, 0x50, 0x4b, 0x7a, 0xf2,
- 0x29, 0x65, 0x2e, 0x21, 0x22, 0xad, 0xf3, 0x0e, 0x47, 0x24, 0x73, 0x6a,
- 0x3f, 0xda, 0xe0, 0x6d, 0x91, 0x92, 0x2b, 0x89, 0xa9, 0xfa, 0xa3, 0xc7,
- 0x71, 0xcb, 0x12, 0x24, 0x42, 0xe2, 0xd9, 0x18, 0x7a, 0x60, 0x10, 0x69,
- 0x25, 0xfa, 0x0b, 0xf4, 0x35, 0xe2, 0x44, 0x9a, 0xf6, 0x1b, 0x21, 0x38,
- 0x16, 0x71, 0x6f, 0xfc, 0xd4, 0x53, 0x18, 0xf1, 0x43, 0xbe, 0xa1, 0x2a,
- 0xca, 0x7b, 0x26, 0x82, 0x43, 0x7b, 0x6b, 0x56, 0xdd, 0x45, 0x83, 0x82,
- 0x00, 0xab, 0xb5, 0x28, 0x24, 0x36, 0x6d, 0xb1, 0x78, 0xd9, 0x6f, 0xd1,
- 0xe4, 0x16, 0xfc, 0x14, 0x96, 0x7b, 0x22, 0x9f, 0x14, 0x29, 0x8b, 0x04,
- 0x35, 0x95, 0xb2, 0x1d, 0xa4, 0x68, 0x5a, 0xe8, 0x30, 0x68, 0x3a, 0xda,
- 0xe4, 0xa7, 0xfd, 0xeb, 0x65, 0x92, 0xa0, 0x59, 0xfc, 0xd6, 0xa6, 0x7c,
- 0x24, 0x6c, 0x4d, 0xa0, 0xa8, 0xc1, 0xef, 0x92, 0x12, 0xae, 0x91, 0x7a,
- 0x7b, 0x5b, 0x4b, 0x43, 0x16, 0x9a, 0x5b, 0xf5, 0x71, 0x6b, 0xb3, 0x34,
- 0x5b, 0x7f, 0x08, 0x89, 0xd6, 0x46, 0x17, 0x93, 0xc5, 0xb0, 0x38, 0x30,
- 0x7b, 0xbe, 0x16, 0xbd, 0x2e, 0x14, 0xfa, 0xd6, 0x21, 0xd6, 0x1a, 0x1e,
- 0x72, 0x98, 0x50, 0x5f, 0xd6, 0x4a, 0x80, 0x72, 0x6e, 0xa9, 0x43, 0x60,
- 0xc2, 0x70, 0x11, 0xd4, 0x05, 0xa1, 0x70, 0x39, 0x05, 0x12, 0xb1, 0xfc,
- 0x47, 0xa1, 0x74, 0xf4, 0x51, 0x86, 0xae, 0x7e, 0x94, 0xc8, 0xb4, 0xd3,
- 0x68, 0x53, 0x4b, 0xfd, 0x18, 0x30, 0xfc, 0x53, 0xf9, 0xea, 0xc0, 0x14,
- 0x23, 0xc2, 0x1b, 0xb7, 0xd1, 0xdc, 0xfe, 0x8f, 0x3f, 0x5a, 0x99, 0x0b,
- 0xcd, 0x63, 0x5b, 0x6d, 0x05, 0x35, 0x05, 0x26, 0x7d, 0x94, 0xeb, 0xbd,
- 0x49, 0x03, 0xf6, 0xb4, 0x44, 0x3e, 0x62, 0x20, 0xb7, 0x4a, 0x8e, 0x18,
- 0x7a, 0xb1, 0xd9, 0x17, 0x74, 0x99, 0xd2, 0xa5, 0x2c, 0x1b, 0xab, 0xb2,
- 0x1b, 0x96, 0xd8, 0xb4, 0x15, 0x27, 0x83, 0x80, 0xff, 0xa5, 0x85, 0xdd,
- 0xab, 0x2f, 0x93, 0x8d, 0xc7, 0x03, 0x85, 0xf6, 0x66, 0x26, 0x25, 0x66,
- 0x2c, 0xe5, 0x86, 0x53, 0x06, 0xb2, 0x32, 0x92, 0xca, 0xa1, 0x92, 0x3c,
- 0x44, 0xb7, 0x66, 0x49, 0x81, 0xb7, 0x28, 0x2c, 0x0c, 0x8b, 0x54, 0x2c,
- 0xd0, 0xa5, 0x0a, 0xbc, 0x5c, 0x5f, 0x7a, 0x12, 0xc8, 0xd8, 0x61, 0x17,
- 0x92, 0xc3, 0x16, 0x6c, 0x52, 0x52, 0x63, 0xa7, 0x18, 0xcb, 0x3a, 0x13,
- 0xb6, 0x14, 0xf0, 0xfa, 0x12, 0xe4, 0x3a, 0x95, 0xb4, 0x24, 0xa8, 0x23,
- 0x34, 0x9c, 0x63, 0xd8, 0x6b, 0x64, 0x44, 0xa1, 0x3f, 0x2a, 0xc1, 0xf6,
- 0x5c, 0xd3, 0xae, 0x21, 0x6f, 0xcf, 0x15, 0xc9, 0xd4, 0x8e, 0x11, 0x08,
- 0x08, 0x23, 0x90, 0x53, 0x61, 0xe4, 0x4b, 0xd6, 0x02, 0x6c, 0x7a, 0x0a,
- 0xeb, 0x69, 0x14, 0xf2, 0x38, 0x25, 0x13, 0x0c, 0xb0, 0x01, 0x9c, 0x8d,
- 0x5f, 0x44, 0x7e, 0xc8, 0x12, 0x27, 0x7b, 0x35, 0x31, 0x92, 0xc3, 0xc2,
- 0x9f, 0xb0, 0x0b, 0x9e, 0x16, 0xa1, 0x15, 0x17, 0x9e, 0x25, 0x6d, 0x5e,
- 0x71, 0x6e, 0x83, 0x32, 0xae, 0xcc, 0xca, 0x91, 0x00, 0x38, 0xae, 0xe5,
- 0x85, 0x66, 0xa5, 0x84, 0x3b, 0x77, 0x7d, 0xc3, 0x8d, 0x65, 0x7f, 0x04,
- 0xc5, 0xe8, 0xa0, 0x7a, 0xf3, 0xbb, 0x72, 0x08, 0xb0, 0x12, 0xab, 0xb4,
- 0x5a, 0xcf, 0xa3, 0xf5, 0xd4, 0x39, 0x18, 0xcd, 0xfe, 0xce, 0x6e, 0x17,
- 0xff, 0xdd, 0xeb, 0xb2, 0x62, 0xb5, 0xbf, 0xb3, 0x6f, 0x6a, 0xf3, 0xd5,
- 0x0e, 0x09, 0x3d, 0x4e, 0x26, 0x6a, 0x22, 0xe9, 0xfd, 0xdb, 0xdb, 0x40,
- 0x1d, 0xc8, 0x3a, 0x6c, 0x6f, 0xbc, 0x64, 0xac, 0x76, 0x21, 0x29, 0x62,
- 0x6d, 0xe1, 0xed, 0xa5, 0x42, 0x6c, 0x46, 0x28, 0x5c, 0xe4, 0xa3, 0x20,
- 0xe6, 0x3e, 0x55, 0x57, 0xc0, 0x2a, 0x21, 0x4a, 0x7c, 0x78, 0xff, 0xc8,
- 0x96, 0xbb, 0x45, 0x67, 0x69, 0x13, 0x71, 0x59, 0xa4, 0xaa, 0x36, 0xcc,
- 0xf2, 0xb6, 0x0d, 0xd9, 0xb0, 0xb6, 0xc9, 0x20, 0x5d, 0x08, 0x83, 0x31,
- 0xa0, 0xd5, 0x52, 0x68, 0x19, 0x98, 0xd8, 0x01, 0xa1, 0xfd, 0x03, 0x89,
- 0xe3, 0x1a, 0x7a, 0xc1, 0xa7, 0xfc, 0x85, 0xc2, 0x10, 0xf1, 0x5f, 0xfb,
- 0xe1, 0x48, 0x58, 0x9e, 0xa1, 0x48, 0x2b, 0xc2, 0x2b, 0x74, 0x9d, 0x24,
- 0x0a, 0x56, 0x8c, 0xf2, 0xf2, 0xa4, 0xad, 0xc4, 0x12, 0xc2, 0x96, 0x27,
- 0x53, 0x67, 0x99, 0x4e, 0xa4, 0xfe, 0xe3, 0xa2, 0x4c, 0xef, 0x75, 0x93,
- 0x2d, 0xbd, 0xc1, 0xac, 0x60, 0xbf, 0x96, 0x64, 0xaf, 0x70, 0xf9, 0xeb,
- 0x5d, 0x5f, 0xa7, 0x6b, 0x3a, 0xff, 0x50, 0x9e, 0x9d, 0x68, 0x74, 0x4c,
- 0x9c, 0x4c, 0xaa, 0xb8, 0xbc, 0x1e, 0xd6, 0xe5, 0x2a, 0xf4, 0xa1, 0xeb,
- 0x0e, 0x1e, 0xca, 0x2f, 0x9e, 0x1b, 0x90, 0xaa, 0x29, 0x45, 0xa7, 0xcf,
- 0x8e, 0xc4, 0x06, 0x13, 0x49, 0x5d, 0x28, 0xb5, 0xac, 0x93, 0xd7, 0x00,
- 0x9b, 0x32, 0xc4, 0x20, 0x42, 0xfa, 0x68, 0x11, 0x08, 0xaf, 0x52, 0x5d,
- 0xb3, 0x26, 0x54, 0xb4, 0x92, 0x31, 0x36, 0xe3, 0xb5, 0xad, 0x29, 0x67,
- 0xa6, 0xc4, 0x9a, 0x55, 0x79, 0x5b, 0x02, 0xd8, 0xd8, 0x15, 0x48, 0x65,
- 0x8f, 0x54, 0x11, 0x95, 0xd1, 0x35, 0x07, 0x12, 0x1d, 0x55, 0xc6, 0xc9,
- 0x4c, 0xb7, 0x01, 0xce, 0xbe, 0x49, 0xc6, 0xb4, 0x0a, 0x94, 0x89, 0x8a,
- 0x05, 0xa6, 0xd4, 0xe5, 0x55, 0x1b, 0x27, 0x9b, 0x85, 0xa7, 0x4e, 0xd6,
- 0x9a, 0x93, 0xa5, 0xe6, 0xe1, 0x7d, 0x5e, 0x92, 0x0b, 0x5b, 0x8f, 0x12,
- 0xe3, 0xf7, 0x47, 0xa4, 0xd1, 0x53, 0x0d, 0xcb, 0x68, 0x6f, 0xff, 0xcb,
- 0x47, 0x5d, 0xfe, 0xfd, 0xf1, 0xce, 0x57, 0x7c, 0x7a, 0x5e, 0x9e, 0x5c,
- 0x3c, 0x8f, 0x46, 0x05, 0x9c, 0xdd, 0xa6, 0xaf, 0x0a, 0x3f, 0x8b, 0xd3,
- 0xa4, 0xb8, 0x4a, 0x8a, 0x0a, 0xcb, 0x55, 0xc7, 0xe5, 0xb4, 0x9a, 0xc7,
- 0x3b, 0x3b, 0x2d, 0x59, 0x6c, 0x4d, 0x42, 0xf8, 0x5c, 0x98, 0xcf, 0xf5,
- 0x51, 0x6c, 0x1c, 0xbd, 0xbd, 0x78, 0xf1, 0xf5, 0x1f, 0x36, 0xa2, 0x6c,
- 0x9a, 0xcc, 0xd7, 0x97, 0xc8, 0x6a, 0x18, 0x47, 0x0d, 0xb8, 0x5a, 0x34,
- 0x1d, 0xc4, 0xb8, 0xef, 0xd1, 0xa1, 0x24, 0x3e, 0xf9, 0xe8, 0xde, 0x44,
- 0xe1, 0xd6, 0x79, 0x84, 0xb5, 0xc3, 0x59, 0x81, 0x95, 0x37, 0x6a, 0xf1,
- 0xc7, 0x5e, 0x36, 0x64, 0x28, 0x8d, 0xa0, 0xe1, 0x37, 0x97, 0x0c, 0xcf,
- 0x4d, 0xb6, 0x55, 0x54, 0x77, 0x5b, 0xec, 0x9c, 0xc6, 0x8e, 0x16, 0x83,
- 0x29, 0xfa, 0x25, 0x47, 0x91, 0x5a, 0x2b, 0x42, 0xd4, 0x8c, 0x41, 0x1c,
- 0x29, 0x5f, 0x1d, 0x93, 0xe4, 0x8e, 0x7b, 0x4f, 0x66, 0x7c, 0x0b, 0x49,
- 0xb2, 0x4f, 0xd8, 0x69, 0x6d, 0x67, 0xff, 0x19, 0x33, 0x16, 0xed, 0x20,
- 0x70, 0xb7, 0xbe, 0x75, 0x36, 0x17, 0x44, 0x88, 0x0b, 0x2e, 0x6d, 0x83,
- 0x54, 0x7b, 0x7f, 0xbf, 0x36, 0xb5, 0x58, 0x0c, 0xe7, 0x9a, 0xd7, 0x4b,
- 0x7f, 0xa3, 0xb4, 0xe8, 0xed, 0x3c, 0x89, 0x90, 0x2b, 0x76, 0xde, 0x02,
- 0x56, 0xd7, 0xb7, 0xdd, 0x8a, 0xe9, 0xec, 0x17, 0xe3, 0x72, 0x72, 0x5a,
- 0x2a, 0x27, 0x00, 0xca, 0x84, 0x7c, 0xa4, 0x3e, 0x0a, 0x7f, 0x33, 0x68,
- 0x40, 0x9f, 0x7b, 0x33, 0x68, 0x10, 0xcd, 0xcd, 0xf8, 0x98, 0x7b, 0x81,
- 0xbb, 0xed, 0xed, 0x05, 0x3e, 0x14, 0x93, 0x62, 0x8e, 0x26, 0x8e, 0x32,
- 0xbc, 0x19, 0x3f, 0xb8, 0xc5, 0x45, 0x29, 0x07, 0x07, 0xab, 0xb4, 0xe9,
- 0xb5, 0x0c, 0x22, 0x63, 0x36, 0x47, 0x97, 0x32, 0x2c, 0x93, 0xc5, 0xfd,
- 0x0b, 0x85, 0xe4, 0xb1, 0xb8, 0x0d, 0x1c, 0x18, 0x73, 0xb2, 0x88, 0x75,
- 0x0f, 0xf3, 0x19, 0x1a, 0xa2, 0x45, 0x51, 0x1e, 0xa3, 0x9d, 0x07, 0x79,
- 0x6f, 0xa5, 0x61, 0x29, 0x2c, 0xee, 0x69, 0xfb, 0x1e, 0x88, 0x34, 0x99,
- 0xcc, 0xdf, 0x1c, 0x9f, 0x5f, 0x44, 0x17, 0x67, 0xae, 0xa9, 0x97, 0x2b,
- 0x65, 0x11, 0x6a, 0x7b, 0x51, 0xe4, 0x45, 0x50, 0xbc, 0xd1, 0x71, 0x0e,
- 0x52, 0x2c, 0x5f, 0x9e, 0x9b, 0x0a, 0x33, 0x2c, 0xa7, 0x51, 0x7c, 0xb4,
- 0x49, 0xc5, 0x6b, 0xac, 0x56, 0x00, 0x2f, 0x9a, 0x56, 0x2f, 0x6a, 0x46,
- 0x21, 0xb0, 0xde, 0x46, 0x9a, 0x7f, 0x43, 0x7b, 0xe3, 0x88, 0x2d, 0x1e,
- 0x9e, 0xe7, 0xa6, 0x9d, 0x8d, 0x0c, 0x10, 0x87, 0x49, 0x58, 0xe3, 0x68,
- 0x78, 0x1c, 0x0c, 0x50, 0x5f, 0x36, 0x72, 0x56, 0x25, 0x44, 0xd9, 0xac,
- 0xa0, 0xe9, 0x13, 0x18, 0x0b, 0x79, 0x89, 0x98, 0x48, 0xba, 0x54, 0xc6,
- 0x9e, 0x25, 0x1e, 0x6f, 0x8e, 0xf9, 0x18, 0x4f, 0x92, 0xcb, 0x80, 0x05,
- 0xbc, 0x19, 0x67, 0xa9, 0x02, 0x3f, 0x61, 0xa4, 0xf2, 0x66, 0xe2, 0x00,
- 0xfd, 0xfd, 0x0c, 0x17, 0xc6, 0xa5, 0x9d, 0x21, 0x0b, 0x32, 0xce, 0x9d,
- 0x02, 0xd9, 0x33, 0x04, 0xbc, 0x27, 0xfa, 0x17, 0x25, 0x8f, 0x4e, 0x5a,
- 0x63, 0x5f, 0x97, 0x0a, 0x8b, 0x21, 0x5a, 0xfe, 0xe8, 0x99, 0x1a, 0xa1,
- 0x4e, 0x1e, 0x74, 0xd4, 0x9b, 0x03, 0x75, 0x0f, 0x2c, 0x88, 0xd4, 0x55,
- 0x8d, 0x03, 0xf8, 0x27, 0xff, 0x3e, 0x07, 0xbf, 0x0e, 0x08, 0xf6, 0x55,
- 0xe0, 0xfe, 0xa5, 0xde, 0xd6, 0xe5, 0xc2, 0xec, 0x87, 0x91, 0x97, 0xba,
- 0xec, 0x15, 0x20, 0x23, 0x1e, 0xca, 0x5a, 0xf0, 0x15, 0x87, 0x25, 0x79,
- 0xb6, 0x08, 0x0e, 0x07, 0x7e, 0x93, 0xce, 0x53, 0x62, 0xde, 0x6e, 0x62,
- 0x9d, 0x9b, 0xf9, 0xa6, 0x55, 0xc9, 0xc8, 0x2f, 0xa0, 0x9b, 0x17, 0x20,
- 0xa1, 0x56, 0xca, 0x67, 0xc5, 0x56, 0xbc, 0x3c, 0x5c, 0xba, 0xc0, 0x5c,
- 0x1c, 0xb5, 0x24, 0xd4, 0xcd, 0xbf, 0xbd, 0x79, 0xfe, 0x77, 0xa5, 0xac,
- 0x2d, 0x4d, 0x02, 0x6d, 0xe9, 0xc7, 0x89, 0x96, 0xb3, 0xb1, 0x40, 0x52,
- 0x57, 0xb3, 0xb6, 0x02, 0xfc, 0x97, 0x54, 0x8f, 0xf0, 0xb1, 0xdb, 0x46,
- 0x39, 0x25, 0xb4, 0x6c, 0x62, 0x88, 0x28, 0x3c, 0xd7, 0x17, 0x0b, 0xf3,
- 0x7e, 0xef, 0x31, 0xb9, 0xa1, 0x9e, 0x1f, 0x3f, 0xde, 0xdf, 0xdb, 0xdd,
- 0xea, 0xd5, 0x8a, 0x88, 0xa2, 0xe8, 0xb4, 0x15, 0x9c, 0xa6, 0x3b, 0xcb,
- 0xda, 0xda, 0x63, 0x20, 0x27, 0x1e, 0xbd, 0xcd, 0x93, 0x1f, 0xcf, 0x5f,
- 0x7b, 0x73, 0x84, 0x39, 0x79, 0x41, 0xc0, 0x6d, 0x73, 0xb4, 0x0a, 0x67,
- 0xad, 0x7d, 0xc5, 0xc9, 0xa0, 0xba, 0x8e, 0x81, 0x30, 0xdb, 0xe7, 0x45,
- 0x86, 0x16, 0x9c, 0x0e, 0x2e, 0x49, 0xe7, 0x34, 0x9f, 0x8d, 0xf2, 0x59,
- 0x7c, 0x36, 0x86, 0xb5, 0x4f, 0xb1, 0xfc, 0xe4, 0xca, 0xd9, 0xb9, 0xf4,
- 0xf9, 0xe9, 0x2a, 0x32, 0xd8, 0x3e, 0x6a, 0x77, 0xee, 0x0c, 0xae, 0xf7,
- 0x87, 0x9d, 0xb8, 0x20, 0x53, 0x88, 0x5f, 0x71, 0x52, 0xc4, 0xcc, 0xcf,
- 0x38, 0x7a, 0x45, 0x1f, 0xf6, 0x90, 0xe1, 0x98, 0x1a, 0x58, 0x57, 0x0b,
- 0xa9, 0xbd, 0x15, 0x55, 0xa1, 0x30, 0xb2, 0x9a, 0xe3, 0x8b, 0x1b, 0xfd,
- 0xc8, 0x28, 0x5b, 0xdc, 0xe8, 0xfa, 0x4c, 0x8d, 0xe6, 0x77, 0xaf, 0xd8,
- 0xb1, 0xae, 0x13, 0x89, 0xe6, 0x94, 0x4b, 0xae, 0xb3, 0xa7, 0x5b, 0x4a,
- 0x9a, 0x24, 0x2f, 0xe8, 0x21, 0x85, 0x04, 0x85, 0x42, 0x63, 0xd9, 0x8a,
- 0xf4, 0xea, 0xaf, 0x17, 0x17, 0x75, 0x55, 0x58, 0x43, 0xcc, 0xe8, 0xf5,
- 0x4d, 0x0d, 0x93, 0x22, 0xff, 0x56, 0x22, 0xb9, 0x25, 0xb9, 0x77, 0x32,
- 0x39, 0x9e, 0xac, 0x17, 0x99, 0xb2, 0x30, 0xf4, 0xa0, 0xb5, 0x71, 0x66,
- 0x75, 0x5c, 0x41, 0x46, 0xe2, 0x45, 0x31, 0xb0, 0x1b, 0xc8, 0xf8, 0x37,
- 0xf1, 0x40, 0x74, 0x51, 0x52, 0xae, 0x02, 0xe5, 0xa1, 0x27, 0xb3, 0x51,
- 0xcd, 0x10, 0x45, 0x57, 0x21, 0x2d, 0x7e, 0x7a, 0x4b, 0x48, 0x56, 0xa3,
- 0x34, 0x7a, 0xe2, 0x1b, 0x63, 0x8e, 0x78, 0x2a, 0x62, 0x79, 0x62, 0x37,
- 0xac, 0x4a, 0x9a, 0x12, 0xfc, 0x44, 0xdb, 0xd3, 0x75, 0x82, 0xba, 0x30,
- 0xa6, 0x8b, 0x58, 0xd2, 0xc6, 0x5f, 0x36, 0x82, 0x52, 0x18, 0x07, 0x79,
- 0xb1, 0x01, 0x59, 0x73, 0xb6, 0xd0, 0xf0, 0x86, 0x81, 0x5e, 0x12, 0xb9,
- 0x45, 0x91, 0x5d, 0xdc, 0xc8, 0xab, 0x8d, 0xc8, 0x04, 0x77, 0x35, 0x0d,
- 0x62, 0x2b, 0x43, 0xbd, 0x60, 0x6a, 0x4e, 0x6c, 0x97, 0x8d, 0xc2, 0xe2,
- 0x30, 0xac, 0xa6, 0x15, 0xdc, 0x04, 0x65, 0xd5, 0x8b, 0x29, 0x7f, 0x19,
- 0xe0, 0x14, 0xaf, 0xcf, 0x2e, 0x4e, 0x0e, 0xc4, 0x58, 0x65, 0xab, 0x91,
- 0x0b, 0xf4, 0x98, 0x24, 0x88, 0x12, 0xb2, 0x94, 0x60, 0xc8, 0x63, 0x86,
- 0x9b, 0xec, 0x74, 0x37, 0xc0, 0x9f, 0x09, 0xa0, 0x12, 0x79, 0x1a, 0xc7,
- 0x42, 0x54, 0xad, 0x89, 0x63, 0x84, 0xec, 0x2c, 0xa6, 0x4c, 0x26, 0x28,
- 0xdc, 0x70, 0x5f, 0xa0, 0xc0, 0x7a, 0xa8, 0x68, 0xca, 0x5e, 0xcc, 0x45,
- 0x55, 0xf4, 0x48, 0x88, 0x95, 0x18, 0x32, 0xfc, 0xf6, 0xc4, 0x16, 0xa0,
- 0xd4, 0x1f, 0x87, 0xf0, 0x24, 0x1f, 0x14, 0xeb, 0xfc, 0x40, 0x9d, 0xc4,
- 0x39, 0x84, 0xad, 0x11, 0x4f, 0xed, 0x7c, 0xd1, 0xc6, 0x2e, 0x35, 0x8f,
- 0xb6, 0xd8, 0xa6, 0xd1, 0x73, 0xdd, 0x8a, 0xbc, 0x51, 0x99, 0x53, 0x6c,
- 0x0b, 0x63, 0xab, 0x79, 0x5a, 0xad, 0x50, 0x6c, 0xbc, 0x15, 0x4f, 0x03,
- 0x99, 0x2f, 0xbc, 0xfb, 0x3b, 0xf1, 0xdc, 0x0c, 0x94, 0x87, 0x94, 0x12,
- 0xc0, 0x2f, 0x03, 0xec, 0xa2, 0xd4, 0x69, 0xcd, 0xc0, 0xe8, 0x29, 0x9e,
- 0xa2, 0x35, 0xb9, 0xd5, 0xee, 0xee, 0xea, 0x38, 0xb2, 0xe8, 0x64, 0xb6,
- 0xcf, 0xb8, 0x3a, 0x28, 0xb4, 0xff, 0x78, 0xc7, 0x29, 0xe8, 0xd9, 0x63,
- 0x47, 0xfc, 0x92, 0xf4, 0x0d, 0x04, 0x28, 0xd9, 0x35, 0x65, 0xaf, 0x33,
- 0xaa, 0x16, 0xc6, 0x41, 0xa9, 0xad, 0x2a, 0xab, 0x59, 0xc3, 0xba, 0xce,
- 0xfa, 0xef, 0x55, 0x59, 0xcd, 0x20, 0xf6, 0x5d, 0x63, 0xed, 0x5a, 0x44,
- 0x52, 0xaf, 0x5d, 0x6a, 0xc9, 0xa4, 0x96, 0x49, 0x18, 0x1d, 0x8e, 0x0b,
- 0x86, 0x86, 0x4e, 0x26, 0x51, 0x4b, 0x6e, 0xf1, 0x2b, 0x21, 0x16, 0x7a,
- 0x3e, 0x9b, 0xe9, 0x63, 0x6c, 0x2c, 0xe0, 0xb0, 0x48, 0x74, 0x94, 0x90,
- 0xaf, 0xd7, 0x89, 0x3c, 0xa6, 0xb0, 0x73, 0xaa, 0xc4, 0x10, 0x4a, 0x55,
- 0x16, 0xaa, 0x51, 0xe8, 0x5a, 0x21, 0x1b, 0xa4, 0x12, 0xf2, 0xf2, 0x0e,
- 0x10, 0x29, 0x30, 0xfa, 0x35, 0x1f, 0x88, 0x4f, 0x0c, 0xd5, 0x46, 0xfc,
- 0xd2, 0x0f, 0x59, 0x06, 0xc9, 0x0a, 0x96, 0x69, 0xb4, 0xe0, 0xa8, 0x04,
- 0x1c, 0x88, 0xcd, 0xac, 0x2d, 0x38, 0x28, 0x2a, 0xba, 0xa4, 0xc2, 0xb7,
- 0x94, 0x91, 0x1e, 0x69, 0xa9, 0x21, 0x14, 0x90, 0xf6, 0x7a, 0x3b, 0xdd,
- 0x50, 0xc5, 0x5f, 0xa5, 0x9e, 0x84, 0xf0, 0x58, 0xca, 0x48, 0x6b, 0x22,
- 0xd2, 0x3e, 0x97, 0x16, 0x06, 0x4c, 0x20, 0x55, 0x70, 0x61, 0x72, 0xf1,
- 0xc3, 0x37, 0xef, 0xbe, 0x74, 0x58, 0x90, 0xb9, 0x33, 0xa3, 0xd6, 0x16,
- 0xb0, 0xd8, 0x77, 0x2a, 0xdd, 0x5a, 0x51, 0x50, 0x1b, 0x80, 0x81, 0xd1,
- 0xd3, 0x24, 0x80, 0x61, 0xa7, 0x7e, 0xb8, 0xdb, 0x84, 0x82, 0x47, 0xb3,
- 0x60, 0x75, 0x1d, 0x03, 0xcc, 0xc2, 0xc5, 0xd9, 0x28, 0xda, 0xeb, 0xce,
- 0x0b, 0xa3, 0xdd, 0x44, 0xdb, 0x39, 0x7c, 0xb1, 0x65, 0x13, 0xbd, 0x84,
- 0x1d, 0x78, 0x5e, 0x44, 0xc2, 0x0f, 0x59, 0xa0, 0x83, 0x8e, 0xe1, 0xf5,
- 0x91, 0xd6, 0x69, 0x9b, 0xe9, 0xab, 0x3a, 0xec, 0x5e, 0x29, 0xc1, 0x65,
- 0x23, 0xe3, 0x72, 0x0b, 0x04, 0xf2, 0x4b, 0xd7, 0x96, 0xfc, 0x60, 0xcf,
- 0xac, 0x63, 0x8e, 0xbe, 0x8b, 0xea, 0xa1, 0x93, 0xae, 0x21, 0xd7, 0xbc,
- 0xf5, 0xf1, 0xf2, 0x3f, 0xd7, 0x8c, 0x53, 0x35, 0x23, 0xd8, 0x5d, 0x27,
- 0xd2, 0xd4, 0xbc, 0xb5, 0xd7, 0xfb, 0x6a, 0x5d, 0x14, 0x7f, 0x09, 0x96,
- 0x89, 0x95, 0x44, 0x58, 0xaa, 0xab, 0xaf, 0x62, 0xed, 0x0e, 0x48, 0xab,
- 0x04, 0x89, 0x7e, 0x19, 0x0a, 0x3a, 0x65, 0xd1, 0x31, 0x84, 0x0b, 0xc7,
- 0x80, 0x36, 0xa0, 0xee, 0xb4, 0x8d, 0xc8, 0x04, 0x0d, 0x35, 0xcf, 0xf0,
- 0x2b, 0xf3, 0x84, 0xba, 0x07, 0x0c, 0x1a, 0xa7, 0xa9, 0xd4, 0x95, 0x09,
- 0x74, 0x86, 0x02, 0x3e, 0x3f, 0x05, 0x21, 0x43, 0x60, 0xaa, 0x63, 0xbf,
- 0xd0, 0x3c, 0xc6, 0x8b, 0x20, 0xed, 0xa3, 0x73, 0x21, 0xbc, 0xf9, 0xda,
- 0xe5, 0x67, 0x4a, 0xfe, 0x35, 0xfd, 0x93, 0x4c, 0xb2, 0xd6, 0x26, 0xfe,
- 0x37, 0x72, 0x5c, 0xcc, 0xb6, 0x9d, 0x4c, 0xd2, 0x89, 0xbb, 0x59, 0xa6,
- 0x1c, 0x48, 0xf8, 0xa6, 0x3e, 0x91, 0x1a, 0x8b, 0xaf, 0x4d, 0xd5, 0x90,
- 0xcd, 0xfe, 0xf9, 0xeb, 0x93, 0xef, 0xcf, 0xb6, 0x56, 0x39, 0x98, 0xea,
- 0xb0, 0x68, 0x26, 0xf1, 0x29, 0xd1, 0x7c, 0x58, 0xc9, 0x68, 0x22, 0xe9,
- 0xf8, 0xfb, 0x7e, 0x3f, 0x3e, 0x3a, 0x7f, 0x49, 0x59, 0x91, 0x7d, 0xf8,
- 0x09, 0x3b, 0xda, 0xdc, 0x1f, 0x02, 0xd6, 0x8f, 0xde, 0x96, 0x82, 0x55,
- 0x5c, 0xca, 0xcd, 0x2a, 0x31, 0x99, 0x9c, 0x21, 0x44, 0x5b, 0xad, 0xe5,
- 0x81, 0xa4, 0xcd, 0x6d, 0x6a, 0xd0, 0x63, 0xd9, 0x3c, 0x89, 0x16, 0xfb,
- 0x82, 0x07, 0xf2, 0xd9, 0x25, 0x9e, 0x46, 0x69, 0x77, 0xb4, 0x9c, 0x9a,
- 0xe9, 0x0c, 0xea, 0x06, 0xde, 0xe9, 0xec, 0x11, 0x69, 0x43, 0xe7, 0x45,
- 0xb7, 0x01, 0xe2, 0x4a, 0x24, 0x55, 0x1a, 0xf2, 0x53, 0x90, 0x52, 0x00,
- 0x0d, 0xce, 0xb1, 0xa2, 0x4d, 0x8f, 0x40, 0xc9, 0x58, 0xe5, 0xdf, 0x88,
- 0x9b, 0x29, 0x57, 0x07, 0x1b, 0x7c, 0x69, 0xa5, 0x33, 0xaa, 0x39, 0xe2,
- 0x59, 0x28, 0xc8, 0xae, 0xa8, 0x81, 0x36, 0x6c, 0x6e, 0xbb, 0x5a, 0x35,
- 0x3a, 0x0c, 0xd0, 0x23, 0x69, 0x7a, 0x28, 0x48, 0x6b, 0x6d, 0xd9, 0x78,
- 0xf7, 0x28, 0xed, 0x28, 0x91, 0xc6, 0x92, 0xe8, 0x55, 0x94, 0x9a, 0x13,
- 0x98, 0x95, 0xf7, 0xc9, 0xc6, 0x73, 0xcd, 0x7d, 0xb6, 0x48, 0xcd, 0xc7,
- 0xaf, 0x3b, 0x60, 0xdb, 0x8e, 0x17, 0xd1, 0xc1, 0x9a, 0xbc, 0x70, 0x80,
- 0x01, 0x5b, 0x94, 0x06, 0x56, 0x4d, 0x48, 0x8a, 0x01, 0x59, 0x92, 0xbc,
- 0x2c, 0xe2, 0x6e, 0x27, 0x28, 0x54, 0xd3, 0x43, 0xfd, 0xa0, 0x55, 0xc5,
- 0x90, 0x24, 0x6e, 0x4e, 0xcf, 0x0b, 0x21, 0x9f, 0x7a, 0x25, 0xc5, 0x4a,
- 0xb8, 0x98, 0x40, 0xa7, 0x20, 0x19, 0x72, 0xd6, 0xd5, 0x56, 0xba, 0x88,
- 0x56, 0x84, 0xe1, 0x2a, 0x46, 0xfc, 0x11, 0x82, 0x0c, 0x78, 0xc5, 0x10,
- 0x7b, 0x35, 0xda, 0x4c, 0x06, 0x65, 0x3e, 0x59, 0x54, 0x64, 0xc4, 0x42,
- 0x77, 0x16, 0xc2, 0x9c, 0x6c, 0xd9, 0xac, 0x3c, 0x6a, 0xd5, 0x4d, 0xce,
- 0x0b, 0x26, 0xdc, 0x8b, 0x05, 0x89, 0x92, 0x51, 0xd5, 0x7d, 0xcc, 0xf1,
- 0x3c, 0xc2, 0xb6, 0x71, 0xb3, 0xb9, 0x29, 0x6a, 0x69, 0x4e, 0x71, 0xeb,
- 0xd7, 0x6d, 0xbe, 0xf8, 0x97, 0x1a, 0x35, 0x38, 0xc0, 0xa3, 0x04, 0x42,
- 0xb7, 0xae, 0x11, 0xcf, 0x3f, 0xa1, 0x28, 0x6c, 0x23, 0xa0, 0xb4, 0xc8,
- 0xca, 0xce, 0xaa, 0x7e, 0x3e, 0x59, 0xd9, 0x19, 0x04, 0x4f, 0x7f, 0x2d,
- 0x9a, 0x72, 0xf7, 0xd5, 0xfa, 0x57, 0x99, 0xa0, 0xfe, 0xc2, 0xa8, 0x3c,
- 0xb3, 0x71, 0x76, 0xd9, 0xab, 0x93, 0x87, 0x0f, 0x1b, 0xd0, 0x52, 0xc3,
- 0xca, 0x36, 0xef, 0x53, 0xa3, 0xae, 0xb4, 0x57, 0x08, 0x93, 0xa9, 0x8e,
- 0x91, 0xb0, 0xdc, 0xf1, 0xb1, 0xd4, 0x19, 0x02, 0x3f, 0xee, 0xf1, 0xcc,
- 0x17, 0x01, 0x6f, 0xaa, 0xd9, 0x4f, 0x05, 0xbd, 0x44, 0x93, 0x5e, 0x42,
- 0x59, 0x17, 0xc2, 0xc2, 0xa4, 0x7d, 0x03, 0xb9, 0x92, 0xa7, 0xe5, 0x0a,
- 0xf6, 0x50, 0xa3, 0x93, 0x30, 0x8f, 0x68, 0x44, 0x90, 0xdc, 0x3f, 0x08,
- 0xb2, 0xde, 0xfa, 0xc3, 0x88, 0xc1, 0x8c, 0x6d, 0x2d, 0x54, 0x4c, 0x97,
- 0x94, 0x56, 0x60, 0x61, 0x3a, 0xfb, 0xeb, 0x99, 0x57, 0x9b, 0xbb, 0x6d,
- 0x77, 0xd0, 0x53, 0xab, 0x2c, 0x70, 0x3c, 0xc5, 0x34, 0xd9, 0x8d, 0x8c,
- 0x36, 0xdf, 0xc9, 0x2f, 0xc8, 0x8a, 0x7e, 0xc8, 0x66, 0xa0, 0xba, 0x94,
- 0x5b, 0xca, 0x23, 0x24, 0x8b, 0xe4, 0x5e, 0x28, 0xdd, 0x28, 0x6f, 0x71,
- 0x00, 0x86, 0x77, 0x49, 0xd9, 0x84, 0xa0, 0xea, 0x6e, 0x9e, 0xf9, 0xda,
- 0xbd, 0xde, 0x47, 0xd4, 0x06, 0x5a, 0x04, 0x61, 0x2c, 0x6f, 0x67, 0xd9,
- 0xad, 0x0d, 0x75, 0x34, 0x55, 0x6e, 0xdd, 0x08, 0x30, 0x51, 0x3e, 0x02,
- 0xa3, 0x8b, 0xbc, 0x68, 0x14, 0x5c, 0x7c, 0x9a, 0xe8, 0xe6, 0xe3, 0x2d,
- 0x1a, 0xdb, 0xb8, 0x9a, 0x6f, 0xee, 0x6e, 0x51, 0x8f, 0x82, 0xae, 0x2e,
- 0x91, 0x96, 0x21, 0xcc, 0x48, 0x8e, 0x3b, 0x71, 0x8b, 0x87, 0x53, 0x24,
- 0x18, 0xd6, 0xce, 0x95, 0xea, 0xcd, 0xc4, 0x4d, 0xe9, 0x59, 0x4a, 0x2e,
- 0xe2, 0x4c, 0x79, 0xcc, 0x54, 0x0d, 0xf0, 0x6a, 0x41, 0xab, 0x47, 0xc6,
- 0x89, 0xd0, 0x4a, 0x1c, 0xab, 0xb2, 0x99, 0xb9, 0xb6, 0xfb, 0x99, 0xa0,
- 0x3a, 0xc3, 0xea, 0x4d, 0x46, 0x31, 0xa6, 0x31, 0x45, 0x97, 0x45, 0xee,
- 0x8b, 0x4b, 0x08, 0xe6, 0x80, 0x6b, 0xb0, 0xc5, 0xb8, 0x01, 0xe9, 0xec,
- 0x3a, 0x2b, 0xf2, 0x19, 0xd5, 0x12, 0xbb, 0x4e, 0x8a, 0x8c, 0x48, 0xbf,
- 0xf3, 0xe2, 0xec, 0xd5, 0x49, 0xc7, 0x5c, 0xe6, 0x78, 0xd8, 0xc7, 0x19,
- 0x7b, 0x0b, 0xbd, 0x6a, 0x23, 0xb5, 0x2d, 0x0d, 0x18, 0x30, 0x23, 0x10,
- 0xef, 0x86, 0xef, 0xc5, 0xdb, 0x48, 0x45, 0x79, 0x53, 0x0b, 0x65, 0x9b,
- 0x8f, 0x35, 0x2c, 0x92, 0x83, 0xed, 0x13, 0x25, 0x32, 0x0e, 0x00, 0xcf,
- 0x6f, 0xbe, 0x08, 0x9c, 0x24, 0xf8, 0x0e, 0x77, 0x5c, 0x1c, 0x86, 0x92,
- 0xf7, 0xc5, 0x71, 0xa0, 0xec, 0x67, 0x21, 0xe7, 0x19, 0xed, 0xbf, 0xeb,
- 0x95, 0xd9, 0x98, 0xde, 0x79, 0x86, 0xb5, 0x74, 0x32, 0xde, 0xa8, 0x0b,
- 0x47, 0x1b, 0x25, 0x2a, 0xc5, 0xd5, 0x86, 0x03, 0xf3, 0xed, 0xdc, 0xb5,
- 0x3e, 0xe8, 0x6a, 0x4b, 0xf7, 0xcd, 0xc7, 0x98, 0xcc, 0xa7, 0x77, 0xd8,
- 0x63, 0xf3, 0x3b, 0xd3, 0x37, 0x77, 0xbd, 0xd4, 0xf4, 0x2f, 0x27, 0xef,
- 0xe3, 0x9a, 0xfe, 0x1b, 0x5c, 0x61, 0x0d, 0x6e, 0xb6, 0x2e, 0x72, 0x94,
- 0xe1, 0x61, 0xdd, 0xda, 0x0d, 0xc6, 0x57, 0x5a, 0x28, 0xa6, 0xdb, 0x24,
- 0xd6, 0xaf, 0xac, 0x56, 0x96, 0x58, 0xd0, 0x20, 0x8b, 0x01, 0xa0, 0xb9,
- 0x2a, 0xd6, 0xcc, 0x27, 0x55, 0x1b, 0x9a, 0x7e, 0xf7, 0xb2, 0xcc, 0x87,
- 0x59, 0x2d, 0xac, 0xd2, 0xdc, 0xaa, 0x5a, 0x2b, 0x8c, 0x8c, 0x17, 0xea,
- 0xa7, 0x54, 0x21, 0x02, 0x9b, 0x6b, 0x49, 0x5e, 0x02, 0xd9, 0x82, 0xcc,
- 0x11, 0xea, 0xc7, 0xcf, 0x0a, 0x2c, 0xa8, 0x65, 0xe3, 0xe5, 0xa4, 0x9f,
- 0x2e, 0x63, 0x0b, 0xa8, 0x1d, 0x9f, 0xcc, 0xd0, 0xde, 0xe8, 0x9c, 0x08,
- 0x66, 0x23, 0xd4, 0x93, 0x09, 0x69, 0x08, 0x9a, 0x07, 0x10, 0xbb, 0x89,
- 0x2a, 0x55, 0x9c, 0x82, 0x00, 0xf6, 0x28, 0xae, 0xa2, 0xba, 0x00, 0xd8,
- 0x5a, 0x42, 0xb1, 0x02, 0x9c, 0xf7, 0xa3, 0xa1, 0x5f, 0xb8, 0x11, 0x24,
- 0xb9, 0x09, 0x32, 0x02, 0x08, 0x6e, 0x65, 0x48, 0x4d, 0x55, 0x74, 0x47,
- 0x98, 0x14, 0xdb, 0x9d, 0x60, 0xdc, 0xc5, 0x35, 0x41, 0xe4, 0x5d, 0x73,
- 0x3d, 0x35, 0x62, 0x5b, 0x76, 0x27, 0x5c, 0x1c, 0x26, 0x9f, 0x8b, 0xe8,
- 0xe8, 0x28, 0xf9, 0xac, 0x90, 0x0a, 0x75, 0x51, 0xf4, 0x3d, 0x0f, 0xc2,
- 0x86, 0xe7, 0x69, 0xbc, 0x3a, 0x39, 0x96, 0x1c, 0xcf, 0x92, 0xd7, 0x1c,
- 0x79, 0x96, 0xba, 0xfa, 0x4b, 0x9c, 0x94, 0xc3, 0x2c, 0x13, 0x49, 0x1c,
- 0xfd, 0x74, 0x18, 0xa2, 0x17, 0xc8, 0xee, 0xaa, 0x79, 0x54, 0xee, 0x44,
- 0x90, 0x1d, 0xe5, 0x8c, 0x3c, 0xc0, 0x61, 0xcc, 0x14, 0xbe, 0xcf, 0xa1,
- 0xbc, 0xe4, 0x87, 0x34, 0xd8, 0xbf, 0x40, 0xf9, 0xbe, 0x41, 0x4c, 0x1c,
- 0x94, 0x2d, 0x55, 0x01, 0x6e, 0x6e, 0x6e, 0x76, 0x7b, 0xb5, 0x90, 0x1f,
- 0x5e, 0x86, 0x18, 0xab, 0xc5, 0x95, 0x15, 0x89, 0x53, 0xf0, 0xcc, 0x5e,
- 0x6f, 0xc9, 0xe9, 0x92, 0x57, 0x3e, 0x19, 0xa6, 0x6c, 0x08, 0x7a, 0xf5,
- 0x3e, 0xc3, 0x0c, 0x32, 0x8d, 0x97, 0xcb, 0x9a, 0x6b, 0x7e, 0x05, 0xcc,
- 0x62, 0xfb, 0x9e, 0x66, 0x8b, 0x80, 0x48, 0xec, 0xba, 0x9a, 0x1b, 0x45,
- 0xd1, 0x80, 0xe3, 0x25, 0x93, 0x79, 0x30, 0x43, 0xa4, 0xbf, 0x65, 0xe5,
- 0x3f, 0xa2, 0xe0, 0xa3, 0xd3, 0xf3, 0xd7, 0x84, 0xab, 0x04, 0x23, 0x4c,
- 0x67, 0x25, 0x87, 0xa9, 0xe2, 0x67, 0x98, 0xaa, 0x3c, 0x73, 0xaa, 0xbe,
- 0x7b, 0x2e, 0x20, 0x8a, 0x30, 0x0a, 0x56, 0xed, 0xe2, 0xa0, 0x78, 0x38,
- 0x12, 0x88, 0x01, 0x66, 0x8c, 0x1e, 0xa2, 0x5d, 0xa9, 0x95, 0xa2, 0x79,
- 0x8f, 0x42, 0x9f, 0xbd, 0xc8, 0x74, 0xad, 0x30, 0x8e, 0x89, 0x69, 0x9e,
- 0xde, 0x6e, 0x56, 0x40, 0x36, 0x45, 0x5d, 0xbd, 0xf0, 0xe8, 0x2a, 0x35,
- 0x55, 0x92, 0xc5, 0x46, 0x66, 0xc2, 0x8d, 0x24, 0x4a, 0x58, 0x62, 0x74,
- 0x69, 0x57, 0x14, 0x62, 0x75, 0x85, 0xec, 0xcd, 0xeb, 0xfa, 0x31, 0x2f,
- 0x27, 0x6c, 0x6f, 0xed, 0x8b, 0x49, 0x86, 0xb1, 0x2e, 0xea, 0x3c, 0x5e,
- 0x84, 0xf3, 0x59, 0xb3, 0x80, 0xa0, 0xb6, 0x16, 0x2a, 0x21, 0x18, 0x7b,
- 0xf6, 0xf4, 0xe2, 0x1e, 0xf0, 0x3c, 0x40, 0x4d, 0xcb, 0xc8, 0xf3, 0x75,
- 0x97, 0x7b, 0x1d, 0x2c, 0x90, 0xe3, 0x87, 0x75, 0x13, 0xd6, 0x8d, 0xf8,
- 0x09, 0xc2, 0x8b, 0x1f, 0x3b, 0x55, 0xc8, 0x10, 0xa7, 0x2d, 0x4d, 0xa6,
- 0x20, 0x09, 0xcf, 0x34, 0x99, 0x9d, 0x4a, 0xc9, 0x95, 0x99, 0x97, 0x3b,
- 0xb9, 0x48, 0xe4, 0x0a, 0x72, 0xa3, 0xbb, 0x9a, 0x29, 0xee, 0xdc, 0x0d,
- 0xe6, 0xb0, 0xb8, 0xcd, 0x87, 0x90, 0x7a, 0xe8, 0x75, 0x83, 0xfb, 0x2b,
- 0x1e, 0x53, 0x8e, 0x98, 0x15, 0x8d, 0x5e, 0x9a, 0x30, 0xe8, 0xe2, 0x68,
- 0x86, 0xbd, 0x5a, 0xcc, 0xde, 0xc3, 0x10, 0xfc, 0x54, 0x1c, 0x4d, 0xd1,
- 0xcc, 0xb8, 0x2a, 0x43, 0x42, 0xc5, 0x47, 0x19, 0xdd, 0xd7, 0xb6, 0x90,
- 0x14, 0x05, 0x42, 0x9d, 0x02, 0x45, 0xbd, 0x6d, 0xda, 0xe6, 0x42, 0xa3,
- 0x13, 0x03, 0x30, 0x8f, 0xca, 0x2c, 0xe0, 0x2a, 0xb2, 0xe6, 0x07, 0xef,
- 0x47, 0xd8, 0xf7, 0xce, 0x46, 0xe0, 0x46, 0x1f, 0x40, 0xdd, 0x32, 0x9a,
- 0xb5, 0x44, 0xaf, 0xdf, 0x75, 0xd9, 0x06, 0x75, 0x89, 0x01, 0x51, 0xf1,
- 0xa0, 0x0e, 0xe3, 0x0b, 0x6d, 0x0e, 0xe1, 0xa6, 0x1d, 0x78, 0xe4, 0xe6,
- 0x40, 0x17, 0x90, 0x62, 0x07, 0xcc, 0xf5, 0xd7, 0xc5, 0x4c, 0x8b, 0xb5,
- 0x0a, 0xbf, 0x88, 0x73, 0x6c, 0x9b, 0x77, 0x16, 0x7e, 0xfb, 0x33, 0x67,
- 0x2e, 0x4f, 0xf3, 0xca, 0xe3, 0x89, 0x9c, 0x48, 0x16, 0x73, 0x0c, 0x51,
- 0x7c, 0xe6, 0x3c, 0x28, 0x61, 0x45, 0x18, 0x70, 0x50, 0xfb, 0x0c, 0x23,
- 0x6b, 0xcc, 0xf5, 0xdf, 0x0d, 0x29, 0x03, 0xc9, 0x75, 0x9e, 0x8d, 0x4a,
- 0x92, 0x3a, 0x10, 0x52, 0x8a, 0xdc, 0x70, 0xe2, 0xc3, 0x4f, 0x2a, 0x83,
- 0x5d, 0x47, 0x39, 0xf7, 0x78, 0x22, 0x24, 0xb5, 0x3d, 0x81, 0x5b, 0xbd,
- 0x0a, 0xc4, 0x5e, 0x26, 0xea, 0x74, 0xbe, 0x44, 0x94, 0x62, 0x05, 0xcd,
- 0x51, 0x71, 0x86, 0x83, 0xbd, 0x5c, 0xe7, 0x3f, 0x65, 0x2b, 0x8b, 0x06,
- 0xd6, 0x1c, 0x1d, 0xf4, 0x5c, 0x91, 0xe3, 0x19, 0xf4, 0x1a, 0xae, 0x19,
- 0xc9, 0xa6, 0xbd, 0xde, 0xee, 0xce, 0x8e, 0xa4, 0xfd, 0x48, 0x66, 0x68,
- 0xe5, 0x28, 0x88, 0xf4, 0x16, 0x66, 0x35, 0x05, 0x94, 0xca, 0x20, 0x22,
- 0x80, 0x32, 0x24, 0xd1, 0x96, 0x29, 0xef, 0xef, 0x92, 0x24, 0x59, 0x31,
- 0x10, 0xd0, 0xa8, 0xb5, 0x44, 0x20, 0x23, 0x00, 0xa1, 0x8d, 0x2e, 0xe0,
- 0x04, 0xa3, 0xca, 0x01, 0xe2, 0x0a, 0x13, 0x82, 0xc0, 0x81, 0xa7, 0x33,
- 0x02, 0x56, 0xe0, 0x1c, 0x55, 0xfe, 0x18, 0x96, 0xb9, 0x6b, 0x62, 0x21,
- 0xee, 0xb1, 0xdd, 0x94, 0x60, 0xf8, 0x67, 0xb2, 0x5b, 0xb6, 0x9a, 0xed,
- 0x1a, 0x67, 0x4e, 0x07, 0xf0, 0x51, 0x73, 0xfb, 0xa5, 0xd1, 0x07, 0x1c,
- 0x3a, 0x1d, 0x8e, 0x52, 0x3a, 0xcb, 0xcd, 0x94, 0xd4, 0xdf, 0xea, 0x73,
- 0x69, 0x3b, 0x8c, 0xce, 0x81, 0xe1, 0xeb, 0xa6, 0x79, 0x14, 0x6a, 0xf7,
- 0xc3, 0x97, 0xfb, 0x9e, 0xf8, 0x62, 0xe0, 0x77, 0xdb, 0xae, 0x07, 0x03,
- 0x98, 0x42, 0x99, 0x0d, 0x16, 0xad, 0x57, 0x92, 0x1a, 0x0c, 0xfa, 0x04,
- 0x42, 0x40, 0xdb, 0x8c, 0xf7, 0x5e, 0xe8, 0x80, 0xd9, 0x04, 0xae, 0x74,
- 0x66, 0xee, 0x9e, 0xe9, 0xb2, 0x32, 0xef, 0xf7, 0xa7, 0xca, 0x3a, 0x59,
- 0x2e, 0xa3, 0x4a, 0x26, 0x4a, 0x3b, 0x11, 0x87, 0x2c, 0xcd, 0x87, 0xcb,
- 0x83, 0xe6, 0x6a, 0xa8, 0xc5, 0x4e, 0x8c, 0xa9, 0x53, 0xed, 0xf4, 0x81,
- 0xd9, 0xd1, 0xed, 0x03, 0x58, 0x4d, 0x56, 0x76, 0x48, 0xeb, 0xa2, 0x4b,
- 0xba, 0x18, 0xce, 0x0d, 0xf2, 0x98, 0xb5, 0x0a, 0xb7, 0x2f, 0xc5, 0xed,
- 0x09, 0x54, 0xf5, 0x44, 0x8a, 0x98, 0x4f, 0x60, 0x57, 0x0a, 0xb1, 0x91,
- 0xcd, 0x50, 0x73, 0x88, 0x28, 0xb4, 0xfe, 0x35, 0xc8, 0x9b, 0x5f, 0xb4,
- 0x2c, 0x00, 0x6e, 0xe7, 0x6b, 0x5f, 0x2e, 0xc6, 0x8f, 0xc4, 0x0b, 0xc5,
- 0x82, 0x31, 0x05, 0xd2, 0x6b, 0xb0, 0x3d, 0x70, 0x0a, 0x0f, 0x80, 0x6d,
- 0x20, 0x62, 0x87, 0x27, 0x1a, 0x3b, 0xe8, 0xb8, 0x0d, 0xc9, 0x16, 0xc7,
- 0x45, 0x3d, 0x05, 0x5d, 0x47, 0xeb, 0xc8, 0xc4, 0x8e, 0x0c, 0xdc, 0xe6,
- 0x56, 0xfc, 0x60, 0xa1, 0xd8, 0x8a, 0x95, 0x1f, 0xd3, 0x62, 0xf3, 0x20,
- 0x99, 0x78, 0x36, 0x9f, 0xad, 0x8f, 0xf3, 0x4d, 0xa2, 0xaf, 0x2f, 0x11,
- 0xcf, 0x3c, 0x81, 0x58, 0x11, 0x2b, 0x3f, 0x89, 0x48, 0x8c, 0x5d, 0x1a,
- 0xd9, 0x65, 0x9a, 0xfa, 0x85, 0xfc, 0xce, 0x4c, 0x3c, 0x15, 0xe3, 0x02,
- 0x21, 0x08, 0xbf, 0xa0, 0xd9, 0xf2, 0x5b, 0x11, 0xbd, 0xa5, 0xe2, 0xa7,
- 0x54, 0x38, 0x45, 0xbb, 0x39, 0x49, 0xcf, 0x45, 0x6b, 0xce, 0x6a, 0xc2,
- 0xc8, 0xff, 0x04, 0x6d, 0x9c, 0x14, 0x33, 0x81, 0xbb, 0x22, 0x69, 0xc8,
- 0x24, 0x16, 0xa2, 0x81, 0xc2, 0xf0, 0x55, 0x82, 0x78, 0xf2, 0x54, 0xf4,
- 0x32, 0x23, 0xd4, 0xca, 0xa0, 0xf7, 0x82, 0xb8, 0xa5, 0x59, 0x44, 0x89,
- 0x3e, 0xba, 0xcf, 0x35, 0x1e, 0x0e, 0x64, 0x71, 0xb8, 0x65, 0x7d, 0xc9,
- 0x98, 0x65, 0x9a, 0xf3, 0xdb, 0x58, 0x19, 0x22, 0xb0, 0x55, 0x57, 0x72,
- 0xa3, 0xc1, 0x00, 0x49, 0xd7, 0xbd, 0x2b, 0x6b, 0xe6, 0x59, 0xd4, 0x9b,
- 0x7f, 0x00, 0x89, 0x37, 0xc6, 0x17, 0xe7, 0x5c, 0x39, 0xf4, 0xe1, 0x68,
- 0x97, 0x4c, 0xfa, 0x65, 0xd7, 0x6c, 0x61, 0x3d, 0xb7, 0xe2, 0xa9, 0x47,
- 0xa5, 0xc2, 0x12, 0xb2, 0x51, 0x10, 0xe9, 0xde, 0x9a, 0x16, 0x70, 0xcc,
- 0x1b, 0xa5, 0xc2, 0x87, 0x22, 0xb7, 0xd3, 0x12, 0x1e, 0x2f, 0x9f, 0xc1,
- 0xa6, 0xa2, 0x49, 0xf9, 0xb2, 0xe7, 0x54, 0x14, 0xf6, 0x2b, 0xcb, 0x9b,
- 0xe0, 0x26, 0xaa, 0xf2, 0xc0, 0xc5, 0x9e, 0x6c, 0xd0, 0x3e, 0x36, 0x01,
- 0x52, 0x84, 0xbd, 0x89, 0x39, 0x3e, 0x17, 0x45, 0xcc, 0xab, 0x40, 0x5e,
- 0xb0, 0xe4, 0xd0, 0x11, 0xf7, 0x27, 0xe4, 0xd6, 0xe8, 0x6a, 0x81, 0x89,
- 0x5a, 0xc8, 0x4d, 0xab, 0x2a, 0x9d, 0xce, 0x2b, 0x8e, 0x90, 0x84, 0x43,
- 0x8f, 0x43, 0xae, 0x8f, 0xb7, 0x0c, 0x54, 0x6e, 0xa2, 0x02, 0x1d, 0xe9,
- 0x54, 0xb0, 0xb7, 0xa4, 0xa8, 0x04, 0xbe, 0x46, 0xf6, 0x7f, 0x2a, 0xfd,
- 0x28, 0x09, 0xaf, 0x2c, 0x87, 0x80, 0xfc, 0x2b, 0x85, 0x74, 0xa7, 0xc9,
- 0x9d, 0xe7, 0xb0, 0x20, 0x46, 0xa3, 0x58, 0xf2, 0x56, 0x83, 0xcb, 0xe8,
- 0x75, 0x02, 0x71, 0x27, 0xbb, 0xa7, 0x3c, 0x50, 0x2e, 0x86, 0x98, 0x3f,
- 0xf5, 0x6f, 0x3c, 0x68, 0x66, 0xd7, 0x5d, 0xb1, 0x24, 0xb0, 0xa1, 0x2b,
- 0x8e, 0x97, 0x6d, 0x66, 0x79, 0x29, 0xf6, 0x75, 0x1d, 0x97, 0xa6, 0xdd,
- 0x07, 0x1c, 0x29, 0x3b, 0xa6, 0xb5, 0x0e, 0x51, 0xad, 0x6c, 0x76, 0xfd,
- 0x8c, 0x50, 0x20, 0x44, 0x74, 0xc8, 0xc7, 0xf5, 0xf6, 0x8e, 0x20, 0xb3,
- 0x9a, 0xd1, 0x0e, 0xc7, 0x68, 0xae, 0x8c, 0xd5, 0x9e, 0x3f, 0x8a, 0x24,
- 0xf9, 0x84, 0xbc, 0x45, 0x6a, 0xe5, 0x66, 0xdd, 0xc9, 0xc1, 0x64, 0x45,
- 0xc4, 0x2b, 0x68, 0xb0, 0xeb, 0x0b, 0x1a, 0x78, 0x36, 0x6a, 0xaa, 0x07,
- 0x79, 0xbe, 0xc8, 0xcc, 0x8d, 0x84, 0x47, 0x45, 0x84, 0xa4, 0xf2, 0xb0,
- 0x5a, 0x73, 0xff, 0x80, 0x15, 0xaf, 0x13, 0x8c, 0x3e, 0x05, 0xe1, 0xa8,
- 0x69, 0x48, 0xa0, 0x9e, 0x4d, 0xbd, 0x68, 0x3a, 0x8d, 0x3c, 0xb0, 0x2e,
- 0xdf, 0x0e, 0xa6, 0x5e, 0x0c, 0x74, 0x30, 0x72, 0x2d, 0x36, 0x34, 0x40,
- 0x2f, 0xb4, 0x0b, 0x9d, 0x04, 0x44, 0x74, 0x5a, 0xfd, 0x80, 0x66, 0x4b,
- 0xa0, 0x46, 0xd8, 0x03, 0x25, 0x1c, 0x89, 0x73, 0x2f, 0xd1, 0x4c, 0x22,
- 0x19, 0xc3, 0x30, 0x80, 0x38, 0x42, 0x15, 0xae, 0xf9, 0x3e, 0xc6, 0x41,
- 0x39, 0xaa, 0xb5, 0x56, 0xb6, 0xe6, 0xce, 0x2a, 0xf4, 0x45, 0x35, 0xb2,
- 0x08, 0x42, 0x81, 0xd4, 0x13, 0x76, 0xa7, 0x11, 0x8b, 0xa0, 0x11, 0xb1,
- 0xea, 0x83, 0x9f, 0x76, 0xed, 0xaf, 0x07, 0x5f, 0xee, 0x48, 0xb1, 0x51,
- 0xac, 0xf7, 0x6a, 0x9f, 0x68, 0x86, 0xb7, 0xc1, 0xb5, 0x8b, 0x7b, 0x86,
- 0x0f, 0xc1, 0x4f, 0xf3, 0x9c, 0x47, 0x9a, 0x26, 0x0e, 0xf6, 0x31, 0xa8,
- 0x3f, 0xdd, 0x46, 0x00, 0x4c, 0x1d, 0x82, 0x22, 0xe4, 0xc2, 0x0c, 0xa2,
- 0x10, 0x8c, 0x1c, 0xf9, 0x95, 0xc9, 0x70, 0x73, 0x63, 0x96, 0xbf, 0xa3,
- 0x5f, 0xd9, 0x0d, 0xb8, 0xf1, 0xfa, 0xec, 0xdd, 0xf9, 0x9b, 0xb3, 0x1f,
- 0xff, 0xbe, 0xb1, 0x65, 0x13, 0x42, 0x8a, 0x74, 0xc3, 0xcf, 0xd3, 0x8c,
- 0x6a, 0xdd, 0x5a, 0xd7, 0x29, 0xf7, 0xc1, 0x71, 0x5a, 0x42, 0x8f, 0xea,
- 0x48, 0x60, 0xdc, 0x57, 0x0c, 0xaa, 0xf2, 0x64, 0x4d, 0x1a, 0x0c, 0x6d,
- 0x3b, 0x10, 0x73, 0xa7, 0x83, 0xff, 0xea, 0x1c, 0x61, 0xa3, 0xc2, 0x31,
- 0x87, 0x7a, 0x94, 0x3e, 0x17, 0xa8, 0xb4, 0xf6, 0xdf, 0x71, 0x2a, 0x18,
- 0x77, 0xd6, 0x63, 0x13, 0xb7, 0x5d, 0x8d, 0x8c, 0xaa, 0xf1, 0x88, 0x6a,
- 0x32, 0x8d, 0x6f, 0x06, 0x2b, 0xc2, 0x0e, 0x2f, 0x4e, 0x5f, 0x01, 0x9f,
- 0x44, 0xf3, 0x89, 0x00, 0x29, 0x56, 0x77, 0x93, 0x54, 0xde, 0x26, 0x49,
- 0x8b, 0x63, 0x52, 0xae, 0xc8, 0xa3, 0x75, 0xed, 0x89, 0x8c, 0x81, 0x78,
- 0x3b, 0x83, 0xab, 0x29, 0x6e, 0x44, 0x53, 0x46, 0x19, 0x5a, 0xe4, 0xa4,
- 0x7d, 0xa7, 0xf4, 0x65, 0x0b, 0x2e, 0x40, 0x7a, 0x0b, 0x2c, 0x8f, 0xe0,
- 0x9f, 0xae, 0x52, 0x2e, 0x68, 0xb5, 0xca, 0xd2, 0xc1, 0x93, 0xfd, 0x14,
- 0xd1, 0x6c, 0xd2, 0xf2, 0x87, 0x01, 0x6d, 0xf1, 0x7a, 0xd6, 0x62, 0xd8,
- 0xe0, 0x83, 0xe6, 0x76, 0x19, 0x20, 0x38, 0xdd, 0x1e, 0xde, 0x1f, 0x2f,
- 0xa6, 0x82, 0x13, 0x76, 0xe8, 0xbb, 0xfa, 0x57, 0x5e, 0x66, 0x11, 0xa1,
- 0xca, 0xa0, 0xb2, 0x00, 0xa7, 0x3c, 0xbb, 0x9c, 0xb1, 0x6a, 0xf7, 0x2a,
- 0x1b, 0x16, 0x79, 0x99, 0x8f, 0x4d, 0x15, 0x28, 0xd5, 0xf9, 0x5e, 0xbe,
- 0xec, 0x47, 0x37, 0xe9, 0x40, 0xd1, 0x4d, 0x7b, 0x7e, 0x40, 0x19, 0xc3,
- 0x18, 0x61, 0x34, 0x65, 0x91, 0xa5, 0x15, 0xee, 0xab, 0x42, 0x98, 0x74,
- 0x23, 0x0c, 0xef, 0x2f, 0xca, 0x54, 0x0a, 0x8a, 0x90, 0xad, 0x1b, 0xda,
- 0x1c, 0x4e, 0x48, 0x1e, 0x9a, 0xa7, 0xfe, 0x71, 0x9d, 0xb0, 0x64, 0x68,
- 0x84, 0x19, 0x27, 0xa0, 0x98, 0x80, 0xa9, 0xc5, 0xbc, 0x92, 0x15, 0xb8,
- 0x75, 0xa8, 0x7c, 0x4a, 0x38, 0xcb, 0x7b, 0x0c, 0xa2, 0xc8, 0xc7, 0xde,
- 0xf1, 0x93, 0x34, 0x74, 0x23, 0x88, 0x21, 0x87, 0x1c, 0x20, 0x63, 0x1b,
- 0xe5, 0x05, 0x25, 0xaf, 0x20, 0x0b, 0x91, 0x2f, 0xd3, 0xd9, 0x30, 0x5f,
- 0x14, 0x08, 0x4f, 0x86, 0xc3, 0xbb, 0x83, 0xbb, 0xcd, 0xbb, 0x9e, 0x72,
- 0x51, 0xe1, 0x71, 0x99, 0xad, 0x4e, 0x44, 0x48, 0x58, 0x52, 0xca, 0x9e,
- 0x18, 0xb5, 0x95, 0x71, 0xa2, 0x55, 0x70, 0x5d, 0xb2, 0x1f, 0x16, 0x1a,
- 0x14, 0x0f, 0x1e, 0x6c, 0xce, 0xb3, 0xec, 0x32, 0x04, 0xd3, 0x69, 0x62,
- 0xfd, 0x09, 0xd7, 0xdd, 0x2a, 0x1e, 0x34, 0x22, 0x11, 0xd5, 0x0a, 0xe1,
- 0x7a, 0x75, 0x3a, 0xe0, 0x02, 0x2f, 0xc1, 0xe0, 0xfc, 0x10, 0xf5, 0x7d,
- 0xae, 0x20, 0x54, 0x24, 0xf9, 0x4f, 0x73, 0x62, 0x1f, 0x7c, 0x5c, 0x8d,
- 0x1f, 0xcb, 0x59, 0x27, 0x73, 0x3c, 0xad, 0xb6, 0xee, 0xa8, 0xeb, 0x54,
- 0x5f, 0x82, 0xb4, 0xf3, 0x16, 0xc3, 0x4c, 0xbb, 0xae, 0xfe, 0xb0, 0x62,
- 0xcc, 0x1c, 0x23, 0x2b, 0xcc, 0xc4, 0x1a, 0x61, 0xa4, 0x30, 0x27, 0x91,
- 0x92, 0x22, 0x26, 0x71, 0xec, 0xac, 0xcb, 0x66, 0x72, 0xfc, 0x60, 0x2f,
- 0x1e, 0xa4, 0xa0, 0xee, 0x14, 0xd1, 0x61, 0x85, 0x2a, 0xc5, 0x3d, 0xf1,
- 0x92, 0x22, 0xc9, 0x2d, 0x73, 0x32, 0x45, 0xbf, 0xe3, 0x66, 0x2e, 0x48,
- 0x31, 0x41, 0x8a, 0x3c, 0x43, 0xcc, 0x9b, 0x46, 0x73, 0x7b, 0xbd, 0x9d,
- 0x16, 0xcc, 0x24, 0xe2, 0x63, 0xb5, 0x36, 0x94, 0xe6, 0x1c, 0x37, 0x49,
- 0x18, 0xf8, 0x8e, 0x4b, 0x24, 0x19, 0x40, 0x6b, 0x96, 0xfc, 0x58, 0x9c,
- 0x13, 0x27, 0x7e, 0x2d, 0xd3, 0x1c, 0x41, 0x88, 0xc5, 0xe7, 0xe0, 0x99,
- 0x15, 0xc8, 0x3c, 0x5b, 0xd8, 0x30, 0xee, 0x2a, 0x68, 0x8d, 0xf2, 0x86,
- 0x2a, 0x75, 0x63, 0x34, 0x34, 0xbc, 0xd0, 0x60, 0x35, 0x66, 0x04, 0xc3,
- 0x21, 0x55, 0xfc, 0xb8, 0xe4, 0x18, 0xcf, 0x37, 0xcf, 0x8f, 0x1b, 0xcd,
- 0x3d, 0x79, 0xfa, 0x78, 0x27, 0x2c, 0x90, 0xd4, 0x77, 0xe8, 0x73, 0x41,
- 0x19, 0xd5, 0x47, 0xd1, 0x99, 0x3e, 0x7f, 0xf7, 0x55, 0xef, 0xbb, 0xc7,
- 0xe3, 0xf8, 0x51, 0x6f, 0xf7, 0xcf, 0xff, 0x78, 0xd5, 0xf9, 0x90, 0xa8,
- 0xee, 0x1a, 0xa5, 0xd6, 0x0d, 0x56, 0x0d, 0x1b, 0x3d, 0x1b, 0x9a, 0x10,
- 0x0e, 0x3b, 0x3a, 0x84, 0x7f, 0xbe, 0x59, 0x92, 0xf0, 0xa2, 0xbb, 0xcd,
- 0xb2, 0xac, 0x0d, 0x8e, 0x44, 0x42, 0x12, 0x29, 0x5f, 0x00, 0xba, 0xf5,
- 0x76, 0xf0, 0xcb, 0x51, 0xa1, 0x95, 0x63, 0xd4, 0x65, 0x99, 0xa3, 0xe6,
- 0x48, 0x60, 0xf2, 0x50, 0x57, 0x43, 0xd1, 0xb2, 0xa2, 0x74, 0x29, 0x73,
- 0x3e, 0xaa, 0x9a, 0xc8, 0x9c, 0x71, 0x94, 0x36, 0xd0, 0x12, 0x35, 0x9d,
- 0xb7, 0x6f, 0x4e, 0x25, 0x4c, 0x88, 0x9f, 0x0c, 0x67, 0x0f, 0x18, 0x0f,
- 0x43, 0xbd, 0x60, 0xcc, 0x62, 0x0e, 0x5c, 0xa7, 0xca, 0x26, 0xe2, 0x42,
- 0x43, 0x1e, 0xbc, 0xbc, 0x76, 0x4a, 0x23, 0x15, 0x0d, 0x93, 0x68, 0xdd,
- 0xc1, 0x19, 0x58, 0x76, 0x72, 0xf0, 0x75, 0x1b, 0x41, 0x47, 0x21, 0xaa,
- 0xc2, 0xe8, 0x1f, 0xad, 0x97, 0x11, 0xc7, 0xec, 0x6e, 0x8b, 0x29, 0x99,
- 0x11, 0x05, 0x04, 0x29, 0xa1, 0xd0, 0x16, 0x53, 0xee, 0x6c, 0xeb, 0xe7,
- 0x8b, 0x29, 0x77, 0x06, 0xd1, 0xa9, 0xa6, 0xf3, 0x4e, 0x14, 0x9f, 0xad,
- 0x47, 0xd4, 0x4d, 0x6f, 0x13, 0x93, 0xf5, 0x9f, 0xbb, 0x8e, 0xef, 0xd5,
- 0x71, 0xdd, 0xf5, 0xa4, 0x64, 0x71, 0xd3, 0x28, 0x8d, 0x64, 0xff, 0xb4,
- 0x4e, 0xf6, 0xae, 0x5f, 0x2b, 0x58, 0x68, 0xe8, 0x87, 0x02, 0x01, 0x74,
- 0x35, 0x08, 0x20, 0x97, 0x87, 0x5c, 0x44, 0xf6, 0xb2, 0x1a, 0xc1, 0xd7,
- 0x3d, 0x53, 0xd3, 0xa2, 0x50, 0xab, 0xd6, 0x3f, 0xff, 0xe5, 0xdb, 0x69,
- 0x7f, 0xfa, 0x85, 0xfc, 0xaa, 0x29, 0x4a, 0x37, 0xe6, 0x36, 0x56, 0xa9,
- 0xa6, 0xac, 0x49, 0x4d, 0x0c, 0xad, 0x8d, 0xfb, 0x22, 0x01, 0x80, 0x81,
- 0xba, 0x45, 0xc8, 0x7e, 0xd9, 0x67, 0xb6, 0xf1, 0xbb, 0x0d, 0x89, 0x57,
- 0x53, 0x97, 0x82, 0xb8, 0x85, 0x45, 0xd7, 0x90, 0x71, 0x2b, 0x61, 0x16,
- 0x78, 0x1f, 0x24, 0x7e, 0xa1, 0x4e, 0x51, 0x09, 0x75, 0xb3, 0x8b, 0x94,
- 0xd0, 0x58, 0x1d, 0x64, 0x1f, 0x29, 0x31, 0x6b, 0x2a, 0xeb, 0x8d, 0x55,
- 0x4b, 0xc7, 0x51, 0x7a, 0x52, 0x22, 0xf9, 0xb6, 0x53, 0x32, 0x09, 0xf4,
- 0x18, 0x71, 0x39, 0x9b, 0xb5, 0x44, 0x96, 0x75, 0x90, 0x20, 0x80, 0x1e,
- 0xfe, 0x09, 0x02, 0x4e, 0xb7, 0xba, 0xc9, 0xff, 0xe5, 0xc6, 0x66, 0x75,
- 0xd0, 0x32, 0xda, 0xc1, 0x29, 0xbc, 0xfb, 0xdd, 0x2e, 0x02, 0xd3, 0x75,
- 0x9a, 0x8d, 0xe4, 0xe4, 0x04, 0x32, 0x54, 0x6d, 0x94, 0x6a, 0xb2, 0x6e,
- 0xaf, 0xea, 0x12, 0x41, 0x92, 0xbb, 0x68, 0x66, 0xf8, 0x57, 0x0f, 0xff,
- 0xfd, 0x69, 0x37, 0x7e, 0xfc, 0x8b, 0xed, 0xf6, 0x77, 0xbb, 0xef, 0x7e,
- 0xb7, 0xd7, 0x09, 0x61, 0x0e, 0x3a, 0x18, 0xf3, 0x96, 0x3b, 0x26, 0x25,
- 0x27, 0x65, 0xb3, 0x8c, 0x25, 0x49, 0x01, 0x36, 0x31, 0x9c, 0x98, 0x91,
- 0xbf, 0x93, 0x18, 0x83, 0xd2, 0xb0, 0x6c, 0x48, 0x25, 0x20, 0x4d, 0x48,
- 0x81, 0x35, 0xe1, 0x97, 0x85, 0x4d, 0x31, 0xe6, 0xa7, 0x72, 0x2b, 0x4f,
- 0x1e, 0x9a, 0x39, 0xf1, 0x80, 0x38, 0x44, 0xac, 0x5f, 0xa2, 0xb5, 0x1c,
- 0xfc, 0xf5, 0x90, 0x93, 0x0a, 0xf2, 0x76, 0x12, 0xd5, 0x02, 0xdd, 0xf2,
- 0x68, 0x30, 0x88, 0x9c, 0xf8, 0xb6, 0x2f, 0x02, 0x21, 0x08, 0xc2, 0xc3,
- 0xc8, 0xaa, 0xa9, 0xc1, 0x06, 0xf0, 0xa2, 0x1b, 0xa0, 0x29, 0x64, 0x5c,
- 0x5a, 0xf6, 0x47, 0xb7, 0xb7, 0x67, 0xa8, 0xfa, 0x15, 0xd3, 0xd2, 0x4c,
- 0xbc, 0x92, 0xb0, 0xdb, 0x1c, 0x39, 0x97, 0x89, 0x8b, 0xa5, 0xcf, 0xf4,
- 0x48, 0xa0, 0xfc, 0x88, 0x22, 0x38, 0xfd, 0xe2, 0x0b, 0x1c, 0xc9, 0x00,
- 0xf4, 0xe8, 0x1a, 0x43, 0xa7, 0xf5, 0x20, 0xa6, 0x32, 0xb0, 0x15, 0xbd,
- 0x92, 0xb2, 0x65, 0x41, 0xdc, 0xa5, 0x70, 0x41, 0x57, 0x78, 0xa1, 0x68,
- 0x71, 0x96, 0x08, 0xb6, 0x9c, 0x0d, 0xe2, 0x32, 0x6c, 0x9b, 0x45, 0x2f,
- 0x51, 0x13, 0x8c, 0x86, 0x39, 0xb4, 0xd5, 0x3b, 0xbc, 0xd8, 0x77, 0xbc,
- 0x66, 0x47, 0x77, 0xc0, 0xd6, 0xb8, 0x48, 0xb9, 0xa9, 0x32, 0xab, 0x76,
- 0x73, 0xbd, 0x29, 0xcb, 0x68, 0x23, 0xde, 0x88, 0x36, 0x1d, 0x83, 0xe0,
- 0x28, 0x29, 0xaf, 0xb6, 0x82, 0x17, 0x8a, 0x89, 0x8d, 0xb0, 0x7c, 0x6d,
- 0x20, 0x06, 0x79, 0x14, 0x9b, 0x99, 0xa1, 0x79, 0x57, 0x6e, 0x1e, 0x71,
- 0xac, 0x1f, 0xf9, 0x60, 0x9c, 0x82, 0x1b, 0x83, 0x7c, 0x94, 0x91, 0xb2,
- 0x72, 0x27, 0xde, 0x70, 0x8b, 0x28, 0x60, 0x2e, 0x67, 0x1f, 0xc5, 0x64,
- 0x7b, 0x94, 0x5e, 0x6f, 0xcf, 0x16, 0x93, 0xc9, 0xc1, 0x3d, 0xd6, 0x1e,
- 0x56, 0xda, 0x3c, 0xdf, 0x7c, 0xfc, 0x8c, 0x4d, 0xe9, 0x92, 0xd5, 0x41,
- 0xb4, 0x0e, 0x8f, 0x1d, 0xdc, 0xab, 0x51, 0x78, 0xd0, 0x8f, 0x4e, 0x95,
- 0x21, 0x7f, 0xb2, 0xf8, 0xd4, 0x38, 0x8f, 0xee, 0x19, 0x7f, 0xf1, 0x30,
- 0xce, 0xf8, 0xe1, 0xac, 0x6e, 0xcd, 0x51, 0xeb, 0x77, 0x7b, 0xa1, 0x80,
- 0xd8, 0xfb, 0x5f, 0xea, 0xdd, 0x40, 0x20, 0x95, 0x7f, 0xcf, 0xb7, 0x47,
- 0xec, 0xb8, 0xd2, 0xac, 0x86, 0xd9, 0xc6, 0xd9, 0x74, 0x0a, 0xb4, 0xe8,
- 0xa7, 0x04, 0x73, 0x9c, 0xd8, 0x88, 0x80, 0x0c, 0x22, 0x13, 0x94, 0x6b,
- 0x5d, 0x54, 0x01, 0x34, 0x73, 0x0d, 0xf4, 0x0e, 0xd6, 0xef, 0x95, 0x90,
- 0x41, 0xb9, 0xbb, 0xa5, 0x8e, 0x08, 0xd7, 0xb3, 0x40, 0xe9, 0x8e, 0xfc,
- 0xb0, 0x20, 0x4a, 0x12, 0xc4, 0xab, 0x0d, 0x5f, 0x21, 0x5a, 0x82, 0xde,
- 0x63, 0xdf, 0x5b, 0x86, 0x21, 0xc2, 0x88, 0x2c, 0x38, 0x4c, 0x6b, 0x55,
- 0x49, 0x6e, 0x92, 0x4c, 0x3d, 0x5b, 0x92, 0x2e, 0x8c, 0x98, 0xe9, 0xd6,
- 0xb3, 0xc6, 0x54, 0xdb, 0x6c, 0x8e, 0xc4, 0xfe, 0xc4, 0x82, 0xcc, 0xdd,
- 0x22, 0x4d, 0x53, 0x50, 0x24, 0x17, 0x08, 0x13, 0x24, 0x50, 0x37, 0xae,
- 0xe6, 0x73, 0x57, 0x21, 0xac, 0x45, 0x24, 0xf8, 0xdb, 0x19, 0x7d, 0x74,
- 0xc0, 0x3c, 0xbf, 0x8f, 0x75, 0xc5, 0xdc, 0xc0, 0x28, 0xe3, 0xff, 0x5e,
- 0x76, 0x60, 0x76, 0x97, 0x9e, 0xa6, 0xb5, 0x22, 0xc9, 0x6d, 0xe7, 0xd3,
- 0xe4, 0xb6, 0xee, 0xf3, 0xfd, 0xb2, 0xae, 0xe8, 0xb9, 0x0f, 0x06, 0x71,
- 0x6d, 0x18, 0x0c, 0xbf, 0x7c, 0xcf, 0xbb, 0x39, 0xca, 0xed, 0xf1, 0x70,
- 0x4e, 0x07, 0x8b, 0xb8, 0xf5, 0x91, 0x74, 0x97, 0x21, 0xc7, 0x60, 0x65,
- 0xab, 0x02, 0x8b, 0xfc, 0xba, 0xa8, 0x57, 0x16, 0x3a, 0xde, 0x52, 0x30,
- 0xf7, 0x59, 0x66, 0xb8, 0xbf, 0xc9, 0xcc, 0x3b, 0xf0, 0x04, 0xb2, 0xf0,
- 0x19, 0xc8, 0xd3, 0xd7, 0x3f, 0x35, 0x4c, 0x08, 0xfa, 0x0b, 0xdb, 0x17,
- 0x9a, 0x8b, 0xfd, 0xb9, 0xec, 0x0b, 0xb5, 0x41, 0x60, 0x28, 0x67, 0x0b,
- 0x55, 0xae, 0x53, 0x19, 0xb6, 0x8e, 0xc1, 0x50, 0xa3, 0xb7, 0x7a, 0x24,
- 0x4c, 0xed, 0xc1, 0xf6, 0x94, 0x4d, 0x01, 0x08, 0xa4, 0x42, 0x0a, 0x96,
- 0x16, 0x98, 0x3b, 0x0a, 0x99, 0x97, 0x94, 0x8b, 0x98, 0x14, 0x92, 0xde,
- 0xe7, 0x4b, 0x7b, 0x45, 0x7a, 0x89, 0xa5, 0xaf, 0xd0, 0x00, 0x96, 0x61,
- 0x26, 0x2d, 0x56, 0xa4, 0x2e, 0xfe, 0x93, 0x38, 0x99, 0x73, 0x68, 0x3f,
- 0x3e, 0x4e, 0xbc, 0x0f, 0x88, 0xb1, 0x1e, 0x75, 0x7c, 0x0a, 0x46, 0x65,
- 0x16, 0x85, 0x99, 0x54, 0xad, 0x2c, 0xeb, 0x12, 0x9a, 0x89, 0xd1, 0x92,
- 0x1c, 0x1d, 0xce, 0xaf, 0x8a, 0xa4, 0x4c, 0x7d, 0xb4, 0xcf, 0xfe, 0x8b,
- 0x88, 0x82, 0x53, 0xce, 0xe1, 0x29, 0x7e, 0xc6, 0x68, 0x07, 0x4e, 0x2d,
- 0xf0, 0xd6, 0x13, 0x59, 0x96, 0x9f, 0xad, 0x0a, 0x33, 0x75, 0xce, 0x39,
- 0x93, 0x52, 0xa6, 0x7b, 0x7d, 0xf4, 0x13, 0x7a, 0xad, 0x35, 0xfb, 0x30,
- 0x46, 0x8c, 0x84, 0x38, 0x29, 0x63, 0x8f, 0x0f, 0x5f, 0x34, 0x6b, 0x3c,
- 0xa0, 0x9f, 0x91, 0x6a, 0x76, 0xfe, 0x63, 0x81, 0xa5, 0x33, 0xa9, 0xe6,
- 0xe0, 0x76, 0xaf, 0xb7, 0x8d, 0xba, 0xf4, 0x36, 0xfc, 0xd0, 0xc4, 0x68,
- 0x31, 0xb4, 0x35, 0x9a, 0x43, 0x0d, 0x8c, 0x00, 0x19, 0xa8, 0x8e, 0x16,
- 0xe6, 0x6c, 0x4c, 0xee, 0x9c, 0xb4, 0xe5, 0xf2, 0x1f, 0x0b, 0x50, 0x3f,
- 0x08, 0x69, 0x35, 0x2d, 0xa8, 0x78, 0x48, 0x3a, 0x75, 0x2c, 0xb5, 0x9e,
- 0x3a, 0xa0, 0xb9, 0x1b, 0xa5, 0x54, 0x60, 0x22, 0x73, 0x83, 0x0b, 0xbd,
- 0xca, 0xd8, 0x10, 0x54, 0xa8, 0x22, 0xab, 0x34, 0x88, 0x82, 0x8a, 0xca,
- 0x24, 0xab, 0x8e, 0x9c, 0x2e, 0xc8, 0x47, 0x2f, 0xba, 0x66, 0x9b, 0x5e,
- 0x9f, 0x10, 0xcc, 0xa0, 0x02, 0x9b, 0x8f, 0xbb, 0x00, 0xff, 0x9f, 0x56,
- 0xc3, 0x6d, 0xf2, 0xa9, 0x8c, 0x96, 0xd6, 0x6d, 0xa0, 0x3c, 0xca, 0x98,
- 0x0d, 0x8d, 0xb5, 0x53, 0xf5, 0x68, 0xaf, 0x71, 0xaa, 0x32, 0x60, 0x88,
- 0xa3, 0xf9, 0x62, 0x80, 0x14, 0x74, 0x08, 0xb3, 0xbf, 0x0a, 0x60, 0x55,
- 0x72, 0xd8, 0x17, 0x27, 0xab, 0x4a, 0x8e, 0x0d, 0x72, 0xdb, 0x85, 0x56,
- 0xa8, 0x74, 0x38, 0xa2, 0xba, 0xe6, 0x0c, 0x1d, 0x6f, 0xfa, 0x68, 0x62,
- 0xd4, 0x09, 0xa1, 0x73, 0x10, 0xa4, 0x2d, 0xbb, 0x32, 0xe6, 0x29, 0x1b,
- 0xa0, 0x32, 0x95, 0x57, 0xd1, 0xcd, 0x87, 0xd8, 0x1e, 0xe4, 0xf0, 0x93,
- 0xb4, 0x7c, 0xb2, 0x24, 0xfb, 0xa5, 0xce, 0x38, 0x58, 0xc4, 0x60, 0xfc,
- 0x3a, 0x43, 0x80, 0x39, 0x9f, 0x9f, 0xbc, 0x42, 0x92, 0x7b, 0x76, 0xf2,
- 0x46, 0x1c, 0x04, 0x58, 0x0a, 0x9e, 0x0a, 0xae, 0xb0, 0x01, 0xa6, 0x29,
- 0x4b, 0x8c, 0xc9, 0xf9, 0xf9, 0xe4, 0x11, 0xb9, 0x28, 0x89, 0x19, 0x5c,
- 0x25, 0x7b, 0x8f, 0x9f, 0xc8, 0xb0, 0xb5, 0xae, 0x2c, 0x19, 0xd4, 0x36,
- 0xf8, 0xab, 0xed, 0x6d, 0x0e, 0xbb, 0x40, 0x97, 0xbb, 0xa7, 0xab, 0x53,
- 0xe4, 0x0f, 0x3e, 0xfb, 0xa7, 0x8d, 0x16, 0x34, 0x1e, 0x75, 0x21, 0x71,
- 0x58, 0x66, 0x44, 0xf1, 0xc8, 0x8c, 0x14, 0x74, 0xea, 0x48, 0xdf, 0x5d,
- 0x37, 0x80, 0x97, 0x0b, 0x0c, 0x35, 0xeb, 0x2f, 0x0d, 0xd3, 0xa2, 0x62,
- 0x84, 0x60, 0xb4, 0xa9, 0x51, 0x81, 0x15, 0x6c, 0x13, 0xaf, 0x4f, 0xad,
- 0x11, 0x00, 0xb4, 0xe0, 0x2e, 0x0f, 0xc7, 0x39, 0x23, 0xad, 0x0f, 0xfd,
- 0xaa, 0x68, 0x0c, 0x2a, 0x4f, 0x27, 0xce, 0x6d, 0x59, 0x6a, 0xeb, 0x64,
- 0x95, 0x6b, 0xb6, 0xe6, 0xac, 0x26, 0x8e, 0xab, 0xa1, 0xdd, 0x5c, 0x0c,
- 0x3c, 0x8c, 0x71, 0xe9, 0xd3, 0x30, 0x59, 0x0a, 0x54, 0x70, 0x20, 0x88,
- 0x2c, 0xa3, 0xb0, 0x98, 0xdc, 0xce, 0x02, 0x78, 0x86, 0xc4, 0x71, 0x4e,
- 0xf1, 0x79, 0x0c, 0x27, 0x64, 0x80, 0xb8, 0x19, 0x34, 0xf9, 0x8e, 0xd2,
- 0xaa, 0x7c, 0x1e, 0x70, 0xf2, 0x6a, 0x1b, 0x09, 0x41, 0xbc, 0x80, 0x9e,
- 0x99, 0xe1, 0x69, 0x6f, 0xff, 0xab, 0xde, 0xce, 0x41, 0x74, 0x06, 0xda,
- 0x19, 0x2c, 0x7f, 0x37, 0xfa, 0x7e, 0xb6, 0xc0, 0xed, 0xc0, 0x39, 0x7f,
- 0xdf, 0xff, 0x4b, 0x56, 0xf9, 0x2f, 0x3c, 0xda, 0xc7, 0x17, 0x5e, 0xf7,
- 0xf9, 0xa1, 0x9b, 0x7c, 0x32, 0x86, 0x17, 0x03, 0x8f, 0x3d, 0xc5, 0xc7,
- 0x80, 0xde, 0x46, 0x95, 0x07, 0x52, 0x2f, 0x04, 0xd6, 0x3e, 0xa8, 0x47,
- 0x8f, 0x02, 0x83, 0xea, 0xae, 0xdb, 0x69, 0xd3, 0x46, 0x42, 0xea, 0x1d,
- 0x12, 0xd9, 0x20, 0x19, 0xbe, 0x27, 0x82, 0x22, 0xa0, 0x57, 0x1e, 0x45,
- 0xab, 0xf3, 0xa0, 0xc6, 0x30, 0x3e, 0xb5, 0xf4, 0xda, 0x0a, 0x12, 0x57,
- 0x1b, 0x05, 0xfc, 0xb7, 0x96, 0xf1, 0xa4, 0xf1, 0xba, 0x39, 0xc5, 0xc3,
- 0x74, 0x77, 0xf7, 0xcb, 0xc1, 0xe3, 0xdd, 0x2f, 0xbf, 0x7a, 0x3a, 0x7e,
- 0xf4, 0xe8, 0xf1, 0xde, 0x68, 0xb8, 0xb1, 0xe6, 0x35, 0x8c, 0xe6, 0x13,
- 0x68, 0x95, 0x1b, 0xac, 0xbb, 0xd6, 0x1a, 0x08, 0xe6, 0x52, 0xde, 0x28,
- 0x1c, 0x1d, 0x54, 0x87, 0x05, 0x28, 0xa8, 0x98, 0x70, 0x45, 0xb5, 0x5b,
- 0x9e, 0xee, 0xed, 0xef, 0x6e, 0x3f, 0xe9, 0x3d, 0xea, 0xed, 0x19, 0xb0,
- 0x19, 0x46, 0xac, 0xaf, 0x28, 0x99, 0x3b, 0x10, 0x73, 0x4a, 0xf9, 0xf4,
- 0xd9, 0x4c, 0xea, 0x34, 0x99, 0x4f, 0xc8, 0xc9, 0x66, 0x93, 0xd9, 0xb1,
- 0x72, 0xd3, 0xae, 0x0b, 0x50, 0x4a, 0xbe, 0x61, 0xaf, 0x0a, 0xf8, 0x2c,
- 0xc6, 0x41, 0x98, 0x48, 0x0f, 0x74, 0xaa, 0x0d, 0xb2, 0x7f, 0x2c, 0xb2,
- 0x0a, 0x34, 0x30, 0x9c, 0x27, 0x06, 0xaf, 0x0c, 0x8a, 0xfc, 0xa6, 0x24,
- 0x7d, 0x10, 0x96, 0x84, 0xe6, 0x40, 0x7c, 0xc2, 0x17, 0xcd, 0x05, 0x6a,
- 0x1f, 0xaf, 0x72, 0xa7, 0xea, 0x02, 0xe1, 0x88, 0x66, 0xc4, 0xd2, 0xf1,
- 0x89, 0x32, 0x2b, 0x2b, 0x60, 0xc4, 0xc0, 0xb8, 0x5e, 0xe4, 0x37, 0x48,
- 0x61, 0x5d, 0x82, 0x48, 0x28, 0xfc, 0x50, 0x28, 0xae, 0xa8, 0xc8, 0x41,
- 0xb6, 0x92, 0xda, 0x4e, 0x8b, 0x47, 0x81, 0x86, 0xf2, 0x01, 0xe7, 0xab,
- 0x29, 0xee, 0x77, 0x54, 0x9b, 0xf0, 0x72, 0x95, 0x60, 0x9a, 0x26, 0x68,
- 0xaf, 0x41, 0x2c, 0x4d, 0x8e, 0xb8, 0xc4, 0xf5, 0x13, 0x85, 0xb7, 0x05,
- 0x05, 0x34, 0x24, 0x77, 0xf0, 0xae, 0x7f, 0x64, 0xe0, 0x0b, 0x69, 0x75,
- 0x6d, 0x79, 0x43, 0x06, 0xe3, 0x80, 0x9f, 0xc6, 0xa3, 0xa8, 0x83, 0x8c,
- 0x73, 0x5d, 0xff, 0xb2, 0xd4, 0xe4, 0xea, 0xda, 0x82, 0x5c, 0x2c, 0x8d,
- 0xb6, 0xe1, 0xa3, 0xea, 0x0b, 0x0f, 0x26, 0xff, 0xfd, 0x8f, 0x4f, 0xfe,
- 0x7b, 0xff, 0x97, 0xfc, 0xff, 0x3d, 0xe4, 0xbf, 0xf7, 0x49, 0xc8, 0x7f,
- 0xef, 0x61, 0xe4, 0xbf, 0xf7, 0xf1, 0xc8, 0x7f, 0x77, 0x5d, 0xf2, 0xdf,
- 0xbf, 0x0f, 0xf9, 0x03, 0xa5, 0x61, 0x6e, 0x5b, 0x9d, 0xfc, 0x1f, 0xad,
- 0x45, 0xfe, 0x4c, 0xff, 0x74, 0x00, 0x5a, 0x4f, 0x00, 0x8e, 0xd9, 0xc5,
- 0xa7, 0x86, 0xcb, 0x2b, 0x5c, 0x76, 0xed, 0xfe, 0x74, 0x96, 0xd4, 0x1a,
- 0xf5, 0x6a, 0x36, 0xf0, 0x21, 0xfb, 0x64, 0x54, 0xb6, 0xff, 0x49, 0xa8,
- 0x6c, 0xff, 0x61, 0x54, 0xb6, 0xff, 0x49, 0x98, 0xec, 0xee, 0x2a, 0x2a,
- 0x2b, 0x52, 0x0e, 0x4e, 0xfc, 0x49, 0x83, 0x44, 0xa1, 0xaf, 0x5f, 0xc8,
- 0xc5, 0x73, 0x80, 0x32, 0xde, 0x2f, 0x4d, 0xf5, 0x5d, 0x2a, 0xa3, 0x5b,
- 0x6d, 0xae, 0x7f, 0x76, 0xfc, 0x97, 0xbe, 0x44, 0x38, 0x8a, 0xc0, 0xad,
- 0x02, 0x39, 0xfb, 0x1b, 0x28, 0x84, 0x9c, 0x8b, 0x61, 0x7a, 0x7a, 0x1e,
- 0x25, 0x6b, 0x46, 0x14, 0x1e, 0x6d, 0xe2, 0xa3, 0x23, 0xcc, 0xdd, 0x94,
- 0xb8, 0x4b, 0xae, 0x14, 0xcc, 0x20, 0xe6, 0xe4, 0xc0, 0x95, 0xa6, 0xb5,
- 0x52, 0x6a, 0x73, 0x25, 0x9c, 0xb1, 0x88, 0xfb, 0x78, 0x66, 0x5f, 0xd9,
- 0xac, 0xae, 0x0a, 0x02, 0x0d, 0xa5, 0xc7, 0xb6, 0x22, 0x8b, 0xfd, 0xb8,
- 0x74, 0x74, 0x32, 0xaa, 0x17, 0x68, 0xec, 0x40, 0xd5, 0x2e, 0x6a, 0x84,
- 0x71, 0x3b, 0xa6, 0x5d, 0xf3, 0xad, 0xc6, 0x39, 0x84, 0x0a, 0x8e, 0x48,
- 0xa5, 0x50, 0x67, 0xbd, 0xf1, 0x3d, 0xcf, 0xf1, 0x90, 0xdd, 0x72, 0xdd,
- 0x7a, 0x53, 0x1c, 0x6e, 0x02, 0x07, 0x66, 0x46, 0xa8, 0x95, 0x1a, 0x46,
- 0x6f, 0xda, 0x60, 0x50, 0x08, 0x54, 0xb2, 0xf3, 0xe1, 0xfb, 0xf2, 0x11,
- 0x34, 0xd9, 0x74, 0x90, 0xf3, 0x17, 0x09, 0x7e, 0x23, 0x7f, 0x3c, 0xc6,
- 0x8e, 0x29, 0x59, 0x82, 0xff, 0xbc, 0xa2, 0xbf, 0xb1, 0x4b, 0x2d, 0x7f,
- 0xe9, 0xec, 0xf3, 0x30, 0xb8, 0xd0, 0x0e, 0x06, 0xad, 0x29, 0xd5, 0xf0,
- 0x3a, 0xb7, 0x15, 0x13, 0xdd, 0x39, 0x63, 0xe6, 0x08, 0x81, 0xbf, 0x87,
- 0xdc, 0x60, 0xce, 0xcd, 0x46, 0x2d, 0x3f, 0x0a, 0x2a, 0x16, 0xb4, 0x55,
- 0x4e, 0xc5, 0x75, 0x2d, 0x82, 0x60, 0xbb, 0x91, 0xa0, 0x15, 0x77, 0x0b,
- 0xa8, 0x04, 0xae, 0x67, 0xd4, 0x4a, 0xca, 0x72, 0x31, 0x35, 0xc6, 0xda,
- 0xdd, 0x9d, 0x2f, 0x7d, 0x43, 0xfc, 0x5b, 0x05, 0xa0, 0xb4, 0xa5, 0xba,
- 0x29, 0x6b, 0x8b, 0xe0, 0xe9, 0x06, 0xa9, 0x55, 0x6a, 0x02, 0x9d, 0x62,
- 0x34, 0x4f, 0xc8, 0xee, 0x35, 0x4a, 0xd9, 0x5c, 0x30, 0x60, 0x93, 0x97,
- 0x30, 0x37, 0x81, 0xdd, 0x92, 0xa4, 0x2e, 0x36, 0x34, 0x4a, 0xb4, 0x1c,
- 0xe8, 0x4a, 0x9c, 0x9c, 0xe3, 0x45, 0x9e, 0xa1, 0x99, 0x5b, 0x63, 0x93,
- 0xbf, 0xb5, 0x85, 0x53, 0x7f, 0xff, 0x68, 0x07, 0xf7, 0x54, 0x1b, 0x41,
- 0x7f, 0xf3, 0x44, 0x21, 0x2c, 0x7e, 0xbf, 0x9f, 0x84, 0xc3, 0x19, 0x0d,
- 0x13, 0xf8, 0x4c, 0x98, 0xce, 0xa6, 0x7f, 0x43, 0x98, 0x7c, 0xc4, 0x14,
- 0x3b, 0x2f, 0xbe, 0x8d, 0xc4, 0x0f, 0x8d, 0x3f, 0xcc, 0xc7, 0x0f, 0x4c,
- 0xc0, 0x10, 0xc7, 0x17, 0xf7, 0x55, 0x53, 0xc0, 0x1e, 0xd7, 0x0d, 0x5f,
- 0x1e, 0x92, 0x48, 0xc0, 0x0d, 0x21, 0xe2, 0x9b, 0x96, 0xb7, 0x51, 0x18,
- 0x76, 0x93, 0x73, 0x9a, 0xb0, 0xcd, 0x89, 0xc6, 0x6b, 0x3e, 0x84, 0xa6,
- 0xa0, 0x43, 0x2f, 0x78, 0x58, 0x23, 0xc3, 0x38, 0xc7, 0x83, 0xed, 0x9a,
- 0x5d, 0xaf, 0xba, 0x67, 0x32, 0xe9, 0x46, 0xe1, 0xb4, 0x51, 0x22, 0xa6,
- 0x5a, 0x27, 0xa3, 0x22, 0xb9, 0x71, 0x8c, 0x5e, 0x5c, 0xb0, 0x6d, 0x4c,
- 0x41, 0x5f, 0x36, 0xe9, 0x0b, 0xf3, 0xba, 0x30, 0xd9, 0xa0, 0x0c, 0xe4,
- 0x8d, 0x94, 0xc3, 0x22, 0x95, 0x38, 0x5a, 0x2c, 0x79, 0x4d, 0x89, 0x05,
- 0x58, 0x26, 0x1a, 0x84, 0xcf, 0xcb, 0x54, 0xab, 0x83, 0x98, 0x59, 0x6b,
- 0xf5, 0x0e, 0x2a, 0x47, 0xd2, 0x0b, 0x20, 0x8e, 0x59, 0x0f, 0x8d, 0x26,
- 0x26, 0x27, 0x52, 0xbb, 0x04, 0x5f, 0xed, 0x4a, 0x3e, 0xa5, 0x70, 0x8b,
- 0x01, 0x19, 0x0d, 0x13, 0xcc, 0x8d, 0x2a, 0xaf, 0xb2, 0x79, 0x53, 0x10,
- 0x8a, 0xbf, 0xce, 0xbf, 0x8e, 0xb7, 0x4c, 0xd5, 0xd5, 0xfc, 0x3a, 0x2d,
- 0xc9, 0x4a, 0xc1, 0x00, 0x96, 0xc0, 0x25, 0xae, 0xc8, 0x24, 0x2c, 0x42,
- 0x02, 0x81, 0x4f, 0x12, 0x0e, 0x8f, 0x54, 0xb4, 0x6c, 0xa9, 0x66, 0xc3,
- 0xd1, 0xa5, 0xcc, 0xa1, 0x91, 0xd2, 0x61, 0xb5, 0xc6, 0x9c, 0xd6, 0x8d,
- 0xb6, 0xbd, 0x08, 0x13, 0x34, 0xa2, 0xf2, 0x6e, 0x3a, 0xc8, 0x05, 0x12,
- 0x33, 0x9f, 0xff, 0xa7, 0xb9, 0xbc, 0x1d, 0x7a, 0xfd, 0xb8, 0xe0, 0x0f,
- 0x6e, 0xda, 0x71, 0x0d, 0x56, 0xe7, 0x5e, 0x87, 0xfc, 0x77, 0x6b, 0x07,
- 0x6f, 0xc6, 0x94, 0xe7, 0x34, 0x92, 0xb8, 0x9a, 0xba, 0xd0, 0x02, 0x17,
- 0x4c, 0xac, 0x97, 0xc6, 0xa1, 0xde, 0x37, 0xdf, 0xac, 0x44, 0x4e, 0x34,
- 0x37, 0xd3, 0x58, 0xcc, 0xbb, 0xc8, 0x95, 0x09, 0x66, 0x94, 0x14, 0xbc,
- 0x72, 0x78, 0x95, 0x4e, 0x19, 0xfc, 0xc6, 0x87, 0xf7, 0x04, 0x29, 0x73,
- 0xc6, 0xb4, 0x8a, 0x31, 0x83, 0x33, 0x63, 0x03, 0x8b, 0x9c, 0x0a, 0xc1,
- 0x52, 0xac, 0x51, 0xaa, 0xfe, 0x45, 0xc7, 0xd0, 0xfc, 0xc9, 0xbb, 0xb7,
- 0xaf, 0xfb, 0x6f, 0xcf, 0x63, 0xaf, 0xb8, 0xef, 0x9b, 0x8b, 0x93, 0x67,
- 0x98, 0x81, 0x77, 0x71, 0x76, 0x7c, 0x76, 0x1a, 0x6d, 0xee, 0x6e, 0x2d,
- 0x25, 0x24, 0x43, 0x3a, 0xa6, 0xa8, 0xba, 0x75, 0x24, 0x33, 0x57, 0x33,
- 0xa3, 0xd8, 0xc4, 0x55, 0xf6, 0x5b, 0xfb, 0x41, 0x4e, 0x5c, 0xc3, 0x3d,
- 0x22, 0x36, 0xd5, 0x4b, 0xb8, 0xf1, 0x4b, 0x32, 0x5d, 0x4b, 0x2b, 0x6e,
- 0x76, 0x0f, 0xa5, 0x52, 0x06, 0xaa, 0xdd, 0x75, 0x29, 0x96, 0x84, 0xa3,
- 0xf3, 0x1d, 0xac, 0xd8, 0xb6, 0x4b, 0xc6, 0xdd, 0xb4, 0xcf, 0xe6, 0xd3,
- 0xae, 0x8d, 0x82, 0xd1, 0x2d, 0xc6, 0xf6, 0x4e, 0x59, 0x25, 0x5e, 0xe3,
- 0xdb, 0x36, 0x45, 0x0c, 0x5a, 0x22, 0xd5, 0xa5, 0xee, 0x3d, 0x79, 0xdc,
- 0xb0, 0xe2, 0xd9, 0xe7, 0x2c, 0xa9, 0x96, 0x61, 0x5a, 0x35, 0xc4, 0xca,
- 0xc5, 0x38, 0x6e, 0x90, 0xb5, 0x99, 0x57, 0xf0, 0x40, 0x6a, 0xe0, 0x68,
- 0x3e, 0x33, 0x4a, 0x53, 0x0f, 0xcf, 0xbf, 0x27, 0x1e, 0xf0, 0x1b, 0xa3,
- 0x74, 0x96, 0xb1, 0xb8, 0x61, 0xc6, 0x2e, 0x50, 0xf7, 0x92, 0x73, 0x09,
- 0x0f, 0xe0, 0xb7, 0x0e, 0x4d, 0x50, 0x2d, 0x1f, 0x3f, 0x01, 0x83, 0xdf,
- 0xc6, 0x4d, 0x46, 0x14, 0x5b, 0x3b, 0x26, 0x6c, 0x0f, 0x6f, 0x6f, 0xaa,
- 0x65, 0xdd, 0xbe, 0x1d, 0x5d, 0x29, 0x4e, 0x43, 0xdc, 0x98, 0xa4, 0x6d,
- 0x5c, 0x44, 0x96, 0xaf, 0x9d, 0xb9, 0xb4, 0x04, 0xdc, 0xd6, 0x17, 0x11,
- 0x03, 0xbc, 0xba, 0xb8, 0x73, 0x5d, 0xde, 0x3e, 0x11, 0x0d, 0x96, 0xec,
- 0xe0, 0x77, 0xf5, 0x82, 0xad, 0x02, 0xd0, 0x86, 0x43, 0xe1, 0x51, 0x31,
- 0x76, 0x32, 0x8d, 0xa6, 0x4b, 0x80, 0xbb, 0x38, 0xb8, 0xe7, 0x66, 0x6c,
- 0x1e, 0xd2, 0x07, 0xc7, 0x28, 0x6e, 0x6a, 0x45, 0x8d, 0x27, 0x8f, 0x7b,
- 0x7b, 0x5b, 0xb5, 0x00, 0x4b, 0x0c, 0x41, 0x83, 0xa5, 0xfa, 0x23, 0xfe,
- 0x54, 0x2c, 0x21, 0xfc, 0x9d, 0xa7, 0xe1, 0x19, 0x79, 0xf8, 0x2e, 0x31,
- 0xe5, 0x94, 0xba, 0x8a, 0x96, 0xc5, 0x27, 0xfe, 0x32, 0xcf, 0x47, 0x52,
- 0xb0, 0x83, 0x0b, 0x74, 0xb4, 0x59, 0xdd, 0x9d, 0x35, 0xfa, 0xcc, 0xe7,
- 0x8b, 0x07, 0xf1, 0x75, 0x63, 0x93, 0xd6, 0x50, 0x63, 0xb1, 0x15, 0xef,
- 0x10, 0xad, 0x3c, 0x3e, 0xab, 0x4e, 0x0f, 0xd7, 0x66, 0x27, 0x97, 0x24,
- 0xc7, 0x9f, 0xab, 0x38, 0xd2, 0xf3, 0x6f, 0x54, 0x79, 0x8b, 0x08, 0x3c,
- 0xc5, 0x55, 0x22, 0x27, 0xdd, 0x24, 0x1d, 0x93, 0x96, 0x42, 0x20, 0xd5,
- 0x5d, 0xfa, 0x92, 0x02, 0x3a, 0x4d, 0x2a, 0x6d, 0xb0, 0xe6, 0x1a, 0xb5,
- 0x91, 0x0c, 0x5d, 0xad, 0xcf, 0x94, 0xd3, 0xdc, 0x00, 0xba, 0xd8, 0xe8,
- 0x1a, 0x7c, 0xf8, 0xc9, 0x1d, 0x45, 0xff, 0x65, 0xb7, 0x0a, 0x2a, 0xf4,
- 0x5b, 0x5a, 0xe4, 0x7e, 0xcc, 0x3a, 0x09, 0x85, 0x5a, 0x2b, 0x0f, 0x0d,
- 0x31, 0xd7, 0xc0, 0x78, 0xe9, 0xd6, 0x36, 0x1f, 0x62, 0xaf, 0xde, 0x79,
- 0xfa, 0x23, 0xcc, 0x0d, 0x81, 0xb5, 0xe5, 0x1a, 0x30, 0xa3, 0xc9, 0xa8,
- 0x84, 0x68, 0xa6, 0x51, 0xc6, 0xce, 0xf9, 0x16, 0x58, 0x39, 0x82, 0xe3,
- 0xf6, 0x0c, 0x34, 0xa4, 0x88, 0x8c, 0x50, 0xb1, 0xb6, 0xe8, 0x57, 0x86,
- 0xc3, 0x8f, 0x51, 0xd0, 0x30, 0xf5, 0xfc, 0x24, 0xb9, 0xc6, 0xbf, 0x97,
- 0x62, 0x90, 0x38, 0xd2, 0xd9, 0x5d, 0x7d, 0x40, 0x98, 0xa9, 0x0a, 0x22,
- 0x1d, 0xbb, 0x26, 0x6d, 0x19, 0x0f, 0x8b, 0x8e, 0x60, 0x87, 0xe8, 0x0f,
- 0xa9, 0x3e, 0xe6, 0x10, 0x57, 0xfa, 0xda, 0x2c, 0x03, 0xb3, 0x81, 0xfa,
- 0x62, 0x6c, 0x52, 0xdd, 0x62, 0x0d, 0x94, 0xa6, 0x2e, 0xef, 0xb3, 0x0c,
- 0x54, 0x7d, 0x94, 0xec, 0x0b, 0xe5, 0x62, 0xf0, 0x2b, 0x01, 0x42, 0xe6,
- 0x8c, 0x39, 0x25, 0xab, 0x20, 0xb6, 0x1d, 0xd8, 0x55, 0x78, 0x80, 0xc3,
- 0x27, 0x2a, 0x4c, 0xae, 0x0f, 0x35, 0x47, 0xf1, 0xdb, 0x99, 0x93, 0x58,
- 0x64, 0x29, 0x8c, 0x46, 0xb4, 0x0c, 0xd0, 0xf7, 0xe0, 0x8b, 0x16, 0xf6,
- 0x1d, 0x8f, 0xf1, 0x28, 0x72, 0xca, 0x6c, 0x43, 0x80, 0xe0, 0xb5, 0xe4,
- 0x44, 0x72, 0x03, 0xe4, 0x80, 0x8f, 0xb7, 0xb6, 0xa5, 0x5c, 0xb8, 0xec,
- 0xfe, 0x11, 0x7f, 0xf8, 0x73, 0xa8, 0xe3, 0x52, 0x60, 0xca, 0xa4, 0x70,
- 0x42, 0x7c, 0x9c, 0x58, 0x2c, 0xbd, 0xde, 0xd6, 0x81, 0xc3, 0x3d, 0x96,
- 0xb7, 0x4d, 0x3c, 0x63, 0x8d, 0x0e, 0xde, 0x8a, 0x18, 0x27, 0xa9, 0xc1,
- 0x5a, 0x27, 0xc9, 0x21, 0x7a, 0xf8, 0x6d, 0xb4, 0x18, 0xa2, 0xed, 0x52,
- 0xa0, 0x90, 0x6a, 0x8a, 0x7a, 0x53, 0x6d, 0x1b, 0x16, 0xd9, 0x9c, 0x0d,
- 0x52, 0x65, 0x32, 0x46, 0x20, 0x8c, 0x02, 0xff, 0xc1, 0x8d, 0xa6, 0x3c,
- 0x16, 0xc6, 0x61, 0xb0, 0x68, 0x2e, 0xf3, 0xbc, 0x42, 0x3f, 0x3b, 0x1d,
- 0xf5, 0x51, 0xe2, 0x6d, 0xfe, 0x25, 0x9c, 0xf7, 0x45, 0xe9, 0x6e, 0x89,
- 0xaa, 0x4a, 0xd8, 0x2c, 0x87, 0x03, 0xa3, 0xe4, 0x26, 0x39, 0xaa, 0x1c,
- 0xc0, 0xe4, 0x30, 0xba, 0x60, 0x2e, 0x0d, 0xa7, 0xb6, 0x92, 0x89, 0x57,
- 0x79, 0x24, 0xa1, 0x49, 0x2e, 0x2b, 0x1e, 0x6e, 0xa5, 0x44, 0x37, 0xa2,
- 0xbd, 0x6e, 0x30, 0xed, 0x46, 0x06, 0xa0, 0x83, 0x0c, 0x75, 0x16, 0x0c,
- 0xd5, 0x2f, 0xcd, 0xc1, 0xfa, 0x24, 0x25, 0x61, 0x61, 0x44, 0xde, 0x0c,
- 0x03, 0x05, 0x66, 0x1c, 0x7d, 0x20, 0xe6, 0x13, 0x65, 0xd4, 0x38, 0x4c,
- 0x02, 0x32, 0x99, 0xa1, 0x16, 0x3c, 0x4c, 0xfd, 0x3c, 0x72, 0xca, 0x41,
- 0x98, 0x57, 0x2d, 0xc5, 0xd7, 0x94, 0x82, 0x3e, 0x5b, 0xb4, 0x56, 0x93,
- 0x7e, 0xbb, 0x25, 0x9c, 0xa4, 0x87, 0x5c, 0x81, 0x72, 0x91, 0xba, 0x02,
- 0xa7, 0x07, 0x45, 0xa8, 0x69, 0xd0, 0x92, 0x48, 0xbc, 0x5c, 0xae, 0x9c,
- 0x63, 0x81, 0x02, 0xe0, 0x25, 0x8b, 0xac, 0x22, 0x62, 0x6c, 0xe0, 0x42,
- 0x28, 0x18, 0x01, 0x9b, 0x4d, 0xa7, 0x53, 0x2f, 0xc1, 0x79, 0xa6, 0x01,
- 0x23, 0x26, 0xb1, 0x8b, 0x93, 0x29, 0x49, 0xa4, 0x13, 0x43, 0x29, 0x91,
- 0x0e, 0x9b, 0xc9, 0x58, 0x21, 0x12, 0x10, 0x11, 0x54, 0x39, 0xc3, 0xee,
- 0x87, 0x6d, 0x93, 0x14, 0x02, 0xb4, 0x3f, 0x1b, 0xc5, 0xc0, 0xfd, 0xe6,
- 0xcb, 0xcd, 0xf7, 0xee, 0x8c, 0x3f, 0x41, 0x7a, 0x7a, 0xbd, 0x7d, 0xfd,
- 0x9b, 0x32, 0x89, 0x6d, 0xc6, 0xfa, 0x08, 0xed, 0x52, 0xac, 0x7b, 0x3d,
- 0xd0, 0x12, 0x65, 0x7e, 0xa9, 0xa5, 0x8b, 0xf3, 0x27, 0xa3, 0x06, 0xde,
- 0x40, 0xed, 0xc9, 0x25, 0x9b, 0xac, 0xaa, 0x2e, 0xed, 0xc8, 0x77, 0xdc,
- 0x6c, 0x7d, 0x93, 0xed, 0xee, 0xea, 0x6e, 0x7a, 0xf2, 0x5f, 0x6d, 0x6f,
- 0x65, 0x5b, 0xb9, 0xec, 0x18, 0x0f, 0x94, 0x4c, 0x15, 0x33, 0x41, 0x7f,
- 0x71, 0x7a, 0x62, 0xc3, 0x89, 0xb7, 0xc9, 0x53, 0xc2, 0xa3, 0xa2, 0xba,
- 0x11, 0x91, 0x3c, 0x69, 0x38, 0x82, 0xde, 0x41, 0x61, 0x4a, 0x0c, 0xd8,
- 0x8a, 0xe9, 0xf6, 0xa2, 0x8e, 0x70, 0x60, 0xd9, 0x8a, 0x2a, 0x39, 0xee,
- 0xf2, 0x7e, 0x2a, 0x3a, 0xe1, 0xd6, 0xff, 0x0d, 0x54, 0x12, 0xaa, 0xb3,
- 0xd5, 0x46, 0x27, 0xc3, 0x04, 0x03, 0xb2, 0xc2, 0xc9, 0xa9, 0x7d, 0xe1,
- 0xc2, 0xb1, 0x3e, 0x85, 0xb7, 0xbe, 0xe6, 0xf4, 0x3b, 0x4e, 0x0f, 0x8a,
- 0x9b, 0x6b, 0x49, 0x57, 0x6e, 0xf4, 0x73, 0x5f, 0x5e, 0xfb, 0x29, 0x14,
- 0x0e, 0x3b, 0x8a, 0xe3, 0x23, 0x2e, 0x1b, 0x54, 0x21, 0x66, 0xff, 0xad,
- 0x59, 0xf0, 0xb5, 0x96, 0xbf, 0x81, 0x2e, 0x31, 0x4c, 0x30, 0xc2, 0x90,
- 0xdc, 0x53, 0xdc, 0x89, 0xfc, 0x4a, 0x71, 0x87, 0xb4, 0x11, 0x2e, 0xb4,
- 0x4f, 0xc3, 0x66, 0xd4, 0x6a, 0x5a, 0xae, 0x35, 0x1e, 0x4c, 0x9c, 0x77,
- 0xf7, 0x88, 0x1e, 0xfa, 0xa0, 0x3d, 0xa2, 0x16, 0x3e, 0xfb, 0x1e, 0xd1,
- 0x28, 0xb6, 0x0d, 0x9c, 0xb0, 0x64, 0xb6, 0x7f, 0xb4, 0x8d, 0xd2, 0xdd,
- 0x71, 0x9c, 0x89, 0x91, 0x9c, 0x15, 0xee, 0xdb, 0xda, 0x69, 0xbc, 0x30,
- 0xb8, 0x96, 0xfd, 0x81, 0x16, 0xe3, 0xea, 0x6e, 0x9e, 0x46, 0x87, 0xf8,
- 0xef, 0x92, 0x3d, 0x32, 0x0f, 0x7e, 0xc8, 0x36, 0x99, 0x46, 0x42, 0x3b,
- 0x65, 0xb0, 0x5d, 0x58, 0x11, 0xc2, 0xcd, 0xc2, 0xdd, 0xf2, 0x52, 0xb1,
- 0x3f, 0xb4, 0x26, 0x76, 0x73, 0x2c, 0x18, 0x1b, 0xeb, 0x7e, 0xca, 0x61,
- 0xb6, 0x0f, 0xdd, 0x34, 0x2b, 0xdd, 0x48, 0x73, 0xbd, 0x7b, 0x9c, 0x12,
- 0x62, 0x64, 0xf8, 0xef, 0x4f, 0xc2, 0x53, 0x7f, 0x59, 0xbe, 0x13, 0x0f,
- 0xd9, 0x84, 0x7a, 0x6f, 0x9f, 0x0f, 0xf3, 0xe0, 0x93, 0x2d, 0x34, 0xed,
- 0xe6, 0x7d, 0x56, 0x3b, 0x9b, 0x5f, 0xa1, 0xf9, 0xe0, 0x30, 0x04, 0x57,
- 0xe8, 0xac, 0xb3, 0x3c, 0xf6, 0x21, 0xf4, 0x2e, 0x4d, 0x7c, 0x46, 0x5b,
- 0x95, 0x33, 0x8a, 0x93, 0xe3, 0x67, 0x2f, 0x4e, 0x62, 0xf8, 0xb7, 0x7f,
- 0x14, 0x1f, 0x9d, 0xf4, 0xf7, 0x1e, 0x3f, 0x89, 0x8f, 0x8f, 0x5f, 0x7d,
- 0xf9, 0xa1, 0x1b, 0x20, 0xcd, 0x53, 0xc1, 0x96, 0x45, 0x81, 0x4e, 0xaa,
- 0xe6, 0xa5, 0x71, 0x8f, 0x2d, 0x29, 0x26, 0xb6, 0x66, 0xe6, 0x92, 0x2d,
- 0x91, 0xc7, 0x3e, 0x64, 0x4b, 0xa4, 0x89, 0xcf, 0xbc, 0x25, 0x32, 0x8a,
- 0x22, 0xfd, 0x95, 0xca, 0xcb, 0x7f, 0xc8, 0x75, 0xae, 0xdb, 0x20, 0x4d,
- 0xae, 0xbf, 0xf8, 0x2c, 0x60, 0xad, 0x74, 0x2d, 0x91, 0x14, 0xfc, 0x4c,
- 0x90, 0x9d, 0x02, 0x02, 0xf7, 0x83, 0x25, 0x6e, 0x41, 0x8b, 0xf2, 0x45,
- 0x6e, 0xe9, 0x0c, 0xdf, 0x6d, 0xda, 0x1b, 0x55, 0xe6, 0x26, 0x91, 0x7b,
- 0xb5, 0x78, 0x2c, 0x5d, 0x7c, 0x2a, 0xf9, 0x58, 0x9a, 0xff, 0x4c, 0x02,
- 0x32, 0x49, 0xe7, 0xfe, 0xb6, 0x72, 0x02, 0x78, 0x74, 0xc8, 0x3f, 0xb7,
- 0xbf, 0x0d, 0x1d, 0x2d, 0x05, 0x62, 0xa4, 0x15, 0x90, 0x17, 0xd0, 0xae,
- 0x20, 0xa5, 0xb9, 0xc4, 0x3c, 0xa7, 0xe1, 0x32, 0xb4, 0xcd, 0x9a, 0x6b,
- 0x40, 0x5b, 0xe4, 0x39, 0x65, 0x14, 0x29, 0x93, 0x91, 0x76, 0xd1, 0x1a,
- 0x6d, 0xaa, 0x7d, 0x9b, 0x5c, 0x13, 0xb4, 0x6e, 0xa6, 0x4e, 0x8f, 0xa5,
- 0x29, 0x10, 0x19, 0x30, 0x82, 0x60, 0x90, 0x1d, 0x9c, 0x41, 0x34, 0x24,
- 0x5a, 0x8c, 0x88, 0x58, 0x27, 0x87, 0x8c, 0x40, 0x20, 0x30, 0x94, 0x03,
- 0x18, 0x1a, 0xf4, 0x92, 0x25, 0x18, 0x32, 0x8e, 0xb0, 0x3e, 0x28, 0x83,
- 0xeb, 0xf8, 0xec, 0xf5, 0xeb, 0x93, 0xe3, 0x66, 0x3c, 0x2c, 0x06, 0xa9,
- 0x10, 0xd4, 0x9d, 0x53, 0x84, 0x8e, 0x7b, 0xf3, 0x42, 0x01, 0x19, 0x0f,
- 0xcf, 0x86, 0xc6, 0xc0, 0x1f, 0x37, 0x82, 0x1d, 0xe9, 0x7e, 0xc9, 0x45,
- 0x97, 0x97, 0x52, 0xac, 0x75, 0xda, 0x50, 0x04, 0x51, 0xb9, 0x28, 0x04,
- 0xeb, 0x99, 0x8c, 0xea, 0x32, 0x59, 0x86, 0x91, 0x48, 0x46, 0xa3, 0x6d,
- 0x41, 0x9f, 0xe1, 0x4b, 0x1c, 0xbb, 0x6a, 0x3b, 0x6d, 0x5c, 0x71, 0x1a,
- 0xc1, 0x07, 0xe3, 0x7c, 0x1c, 0x53, 0x74, 0xc4, 0x34, 0x29, 0xde, 0x63,
- 0x04, 0xad, 0x03, 0xa8, 0x43, 0xf0, 0xc7, 0x54, 0x1e, 0x7a, 0x34, 0x0a,
- 0xd5, 0x02, 0xa2, 0x10, 0x0f, 0x07, 0xbc, 0x4c, 0x07, 0x44, 0xec, 0x76,
- 0x56, 0x1d, 0x60, 0xb6, 0x99, 0xbe, 0x3e, 0x4b, 0x6f, 0xb0, 0x1b, 0x2e,
- 0x68, 0x87, 0x05, 0x7d, 0xfc, 0x4a, 0xb1, 0x45, 0x5a, 0x2d, 0x8a, 0x19,
- 0x33, 0xda, 0x3b, 0xc7, 0x55, 0x85, 0xc0, 0xeb, 0x11, 0x61, 0x5a, 0x97,
- 0x88, 0x08, 0x20, 0xd8, 0x82, 0xde, 0x5a, 0xbd, 0x60, 0xa2, 0xa9, 0xe5,
- 0x5b, 0x79, 0x69, 0x71, 0xa6, 0x08, 0xcb, 0x20, 0x55, 0x6a, 0x26, 0x1e,
- 0xd8, 0x56, 0xdf, 0x8f, 0x57, 0x9b, 0xb6, 0x01, 0x6d, 0xa7, 0x65, 0xad,
- 0x01, 0xdd, 0xcc, 0xa4, 0x25, 0x30, 0xae, 0x5f, 0xc1, 0xda, 0x90, 0x25,
- 0x9f, 0x98, 0xec, 0x63, 0x04, 0xb9, 0xad, 0x1a, 0xe6, 0xc5, 0x0a, 0xf7,
- 0x15, 0x11, 0x56, 0x8a, 0xcb, 0x05, 0xc3, 0xcc, 0x22, 0x09, 0xd2, 0xa1,
- 0x8c, 0x03, 0x8e, 0xe7, 0x88, 0x31, 0x50, 0xd5, 0x51, 0x46, 0x61, 0x7e,
- 0xb0, 0xbc, 0xb8, 0x11, 0xb2, 0xf8, 0x1a, 0x4c, 0xc1, 0x31, 0x2f, 0x72,
- 0x52, 0xb3, 0xd9, 0x7c, 0x51, 0x85, 0xaa, 0xcd, 0x48, 0x45, 0xa5, 0x6f,
- 0x63, 0x87, 0xca, 0x68, 0xb6, 0x68, 0xf5, 0x77, 0xf7, 0x94, 0x0b, 0x9e,
- 0xa2, 0x3b, 0xa2, 0xac, 0x46, 0xd9, 0xec, 0xde, 0x66, 0x53, 0x3f, 0x10,
- 0x83, 0x02, 0x23, 0x2d, 0xb1, 0x6e, 0x93, 0xbf, 0xa3, 0x49, 0x0b, 0xe6,
- 0x2d, 0x65, 0x05, 0x41, 0x63, 0xb9, 0xe5, 0x66, 0x9f, 0x0e, 0x7b, 0xa4,
- 0xde, 0x4f, 0xe7, 0xc7, 0xf8, 0x39, 0x86, 0x63, 0xc6, 0xaf, 0x61, 0x33,
- 0x0e, 0xa2, 0x3f, 0xe7, 0x69, 0xc7, 0x09, 0xd2, 0x6a, 0x67, 0xe6, 0xf7,
- 0x69, 0x1a, 0xe3, 0xee, 0xe2, 0xa3, 0x4b, 0x3a, 0x39, 0x70, 0xd2, 0xe7,
- 0x45, 0x56, 0x7e, 0xc4, 0xd6, 0x5f, 0x00, 0x7f, 0x39, 0xb8, 0x5f, 0x73,
- 0xf7, 0xc1, 0xf2, 0xad, 0xa5, 0xef, 0x3c, 0x0d, 0x89, 0x0f, 0x0a, 0x0d,
- 0xde, 0x2a, 0xb5, 0xe9, 0x03, 0x6b, 0x8b, 0x6d, 0xcd, 0xb0, 0x1f, 0xa7,
- 0xb3, 0x7b, 0x95, 0x4d, 0x5d, 0x2b, 0xec, 0xc7, 0x69, 0xfc, 0x61, 0x42,
- 0x80, 0x19, 0xda, 0x87, 0x09, 0x72, 0xcd, 0x30, 0xbe, 0x3a, 0xfc, 0xfa,
- 0x6a, 0x69, 0xee, 0x7d, 0x7a, 0x77, 0x2f, 0x85, 0xde, 0x3c, 0xf7, 0x01,
- 0xc2, 0xb4, 0x69, 0xc3, 0x95, 0xa6, 0x3f, 0x93, 0x3e, 0x6f, 0xc6, 0x82,
- 0xa9, 0x8d, 0xce, 0x87, 0x11, 0x45, 0xdc, 0x7d, 0x14, 0x25, 0xd3, 0xe4,
- 0x97, 0xaf, 0x25, 0x5e, 0x53, 0x4e, 0x31, 0xfc, 0xb3, 0x74, 0x2b, 0x3e,
- 0x48, 0xa1, 0x37, 0x49, 0xac, 0xfe, 0x1e, 0xfc, 0xfb, 0x54, 0x9a, 0x8f,
- 0xbe, 0xd4, 0xbc, 0x9b, 0xeb, 0xaf, 0xb7, 0x01, 0xa3, 0xbd, 0x9f, 0x46,
- 0xf3, 0xda, 0x60, 0xd7, 0x46, 0x9b, 0xfd, 0xf3, 0xd7, 0x27, 0xdf, 0x9f,
- 0x6d, 0x35, 0xb1, 0xae, 0xb9, 0x50, 0xa1, 0x17, 0xd4, 0xe2, 0x68, 0x3b,
- 0x4b, 0xf5, 0x1b, 0x8b, 0x8e, 0xeb, 0xaa, 0x38, 0x81, 0x48, 0x7c, 0x67,
- 0x2c, 0x66, 0x28, 0x12, 0xa9, 0xb9, 0x9e, 0xba, 0x63, 0x7b, 0xfc, 0x54,
- 0x1a, 0x8f, 0xed, 0xe1, 0x23, 0x2b, 0x3d, 0xeb, 0xeb, 0x39, 0x88, 0xe6,
- 0x7a, 0xcf, 0xad, 0x0e, 0xe0, 0x98, 0x47, 0x1f, 0xa8, 0xbc, 0x12, 0x96,
- 0x6c, 0x4d, 0x75, 0xa5, 0x5e, 0x6a, 0xdb, 0xe6, 0x95, 0x59, 0xbf, 0xdf,
- 0x26, 0x7e, 0x1a, 0x60, 0x6a, 0xa7, 0xf1, 0x65, 0x5b, 0xf7, 0x70, 0xe1,
- 0xc1, 0xa3, 0x10, 0x77, 0x0f, 0x03, 0x60, 0xd0, 0xfc, 0xc5, 0x32, 0x60,
- 0x13, 0xcb, 0x29, 0xe9, 0xa9, 0x0f, 0xb8, 0xb0, 0xee, 0x83, 0x71, 0x62,
- 0x6f, 0xaa, 0x4f, 0xe5, 0x27, 0xa8, 0x83, 0x9d, 0x7c, 0x54, 0xf6, 0xe9,
- 0x25, 0x01, 0x98, 0xd6, 0xef, 0xc1, 0x39, 0xff, 0x73, 0x60, 0x30, 0x1c,
- 0x3f, 0x7b, 0x00, 0x07, 0xe3, 0xff, 0xc2, 0x60, 0xfc, 0x5f, 0x18, 0x8c,
- 0x0f, 0x87, 0xc1, 0x70, 0x25, 0xa8, 0x87, 0xe0, 0x39, 0x3c, 0x58, 0x8e,
- 0x5d, 0xa1, 0x81, 0x7e, 0x28, 0xaa, 0x83, 0xdf, 0xc8, 0x47, 0xc4, 0x76,
- 0xa8, 0xb5, 0xbb, 0x54, 0x36, 0xfb, 0x2a, 0xc4, 0x61, 0x90, 0x64, 0xb3,
- 0xa1, 0x40, 0x55, 0x1f, 0xe2, 0xbf, 0xcb, 0xe0, 0xd4, 0xeb, 0x69, 0x63,
- 0x4e, 0x5e, 0x80, 0x34, 0xc3, 0x96, 0x12, 0x6b, 0xfc, 0x8b, 0x7c, 0x50,
- 0x3c, 0x39, 0x4d, 0xe1, 0x30, 0xaa, 0xf0, 0xb0, 0x3e, 0xf5, 0xf6, 0x2f,
- 0xdf, 0xfd, 0xda, 0x50, 0x3a, 0xe5, 0x55, 0xb1, 0xc0, 0x52, 0xb5, 0x77,
- 0x9d, 0x87, 0x8a, 0x53, 0xb5, 0xf6, 0x96, 0x6d, 0xd8, 0xa3, 0xfd, 0xe0,
- 0x86, 0x95, 0x93, 0x98, 0xb6, 0x01, 0x41, 0xf8, 0x3d, 0x27, 0x81, 0xbd,
- 0x98, 0x1b, 0xcf, 0x7d, 0x80, 0xaa, 0xdf, 0xd2, 0xf3, 0x8a, 0x3a, 0x6a,
- 0x8d, 0xe6, 0x9a, 0x99, 0xcd, 0xed, 0x3a, 0x7f, 0xa3, 0x9b, 0x07, 0x6e,
- 0x5a, 0x63, 0xac, 0x1f, 0xa8, 0x02, 0x35, 0x9b, 0x5b, 0x5f, 0x07, 0xa2,
- 0x16, 0x16, 0x15, 0x96, 0x3a, 0xce, 0x80, 0xd9, 0x93, 0x7b, 0x74, 0xf9,
- 0xde, 0x35, 0x1e, 0xfe, 0x58, 0x1b, 0xd8, 0x6c, 0xb6, 0x4d, 0x9e, 0x8d,
- 0xfd, 0x6c, 0xb5, 0x25, 0x9b, 0x28, 0x85, 0x37, 0x9a, 0xdb, 0xe8, 0x74,
- 0x16, 0xb8, 0x0d, 0x3f, 0x60, 0x6b, 0x9b, 0xb3, 0xf8, 0xe0, 0x80, 0x8e,
- 0x60, 0xab, 0x1c, 0xae, 0xdb, 0xc8, 0x14, 0xe7, 0xad, 0x0e, 0x05, 0x74,
- 0x3c, 0x0d, 0x5a, 0xe3, 0xaa, 0x49, 0xb9, 0xbb, 0x6f, 0x5d, 0xdc, 0xf2,
- 0xcb, 0x02, 0xb1, 0xfa, 0x43, 0xee, 0x6e, 0x16, 0xe7, 0xfa, 0xa6, 0x6e,
- 0x85, 0x84, 0xba, 0xd2, 0x5b, 0x14, 0x44, 0x99, 0x96, 0xaa, 0x42, 0x99,
- 0x58, 0x6d, 0xbd, 0x84, 0x03, 0xd8, 0xd5, 0x54, 0x0b, 0xc8, 0x25, 0x17,
- 0x52, 0xae, 0x10, 0x96, 0x4e, 0xb5, 0x81, 0x92, 0x44, 0x9a, 0xdd, 0xde,
- 0x3e, 0xd7, 0x5d, 0xa1, 0xd8, 0x73, 0x10, 0xb3, 0x64, 0x9c, 0x4d, 0x17,
- 0x0b, 0x0f, 0x60, 0x8a, 0xd8, 0xe7, 0xea, 0x47, 0x02, 0x46, 0x9b, 0x8d,
- 0xf4, 0xf9, 0x5e, 0xf4, 0x06, 0xed, 0xd7, 0x58, 0x95, 0x1d, 0xc7, 0x43,
- 0xd2, 0x12, 0xb4, 0x1d, 0xc9, 0xf7, 0xa1, 0xe6, 0x34, 0x87, 0x8b, 0x33,
- 0xbf, 0x80, 0xd9, 0xbf, 0x7d, 0x73, 0xea, 0x67, 0xe5, 0xe8, 0x86, 0x52,
- 0x12, 0x73, 0x99, 0x6e, 0x8f, 0xf2, 0x61, 0xb9, 0x8d, 0xbb, 0xa6, 0x1d,
- 0x5f, 0x55, 0xd3, 0x49, 0xd0, 0x36, 0xae, 0x97, 0x17, 0x89, 0x53, 0x52,
- 0x14, 0x60, 0x72, 0x27, 0x25, 0x8d, 0x2d, 0xa0, 0x03, 0x11, 0x59, 0xe6,
- 0xd4, 0xe4, 0x81, 0xef, 0xbd, 0x4a, 0xb8, 0x04, 0x75, 0x05, 0x13, 0x82,
- 0xff, 0x43, 0xa1, 0x86, 0x42, 0xed, 0x03, 0xf5, 0x14, 0x92, 0x68, 0x94,
- 0xc1, 0x59, 0xa1, 0xf2, 0x03, 0x0e, 0x94, 0x95, 0xbf, 0x37, 0x0c, 0x42,
- 0x5e, 0x15, 0x77, 0x78, 0x81, 0x91, 0x3c, 0x28, 0x9b, 0xd1, 0xd8, 0x71,
- 0x93, 0x6c, 0xcd, 0x40, 0xed, 0x4c, 0x59, 0xcd, 0x23, 0x25, 0x24, 0xb6,
- 0x22, 0x4a, 0xd9, 0x23, 0xc9, 0xcf, 0x7b, 0xbd, 0xd6, 0xc7, 0x02, 0xb3,
- 0x7f, 0x77, 0x74, 0xd2, 0x7f, 0xb7, 0xbb, 0xf7, 0xe5, 0xbb, 0xef, 0x8f,
- 0x5f, 0xbd, 0xeb, 0xbf, 0x38, 0x42, 0xe9, 0xfe, 0x81, 0x57, 0x6d, 0xbd,
- 0x6d, 0x09, 0xcb, 0xa2, 0x88, 0x88, 0x3a, 0xa4, 0xe7, 0x6e, 0xcb, 0xb9,
- 0x45, 0xc5, 0xf8, 0x3e, 0x96, 0x5b, 0xf7, 0xd1, 0x0f, 0x31, 0x1b, 0xba,
- 0xed, 0x7c, 0xfe, 0x6d, 0x31, 0x43, 0xe9, 0xbf, 0x39, 0xff, 0x34, 0x4a,
- 0x30, 0x74, 0x42, 0x98, 0xa0, 0xab, 0xaf, 0x4f, 0x78, 0xd2, 0x60, 0x22,
- 0x1c, 0x32, 0xe0, 0xc1, 0xd2, 0xed, 0x30, 0x0f, 0x7f, 0x80, 0x69, 0xc2,
- 0x6d, 0xe6, 0xde, 0x16, 0x8a, 0x4f, 0xb7, 0x1d, 0x66, 0x2c, 0x75, 0x93,
- 0xd0, 0x67, 0xdc, 0x11, 0xb2, 0x52, 0x05, 0x75, 0x86, 0xda, 0x5e, 0xd0,
- 0x63, 0x1f, 0xb6, 0x0f, 0xd4, 0xc4, 0xe7, 0x0d, 0x10, 0xd2, 0x51, 0x94,
- 0x53, 0x92, 0x57, 0x3f, 0xd1, 0xe2, 0xeb, 0x26, 0xdf, 0x6f, 0x03, 0xae,
- 0x77, 0x97, 0xad, 0xfb, 0xf5, 0xee, 0x47, 0x90, 0x19, 0xb9, 0x9d, 0x4f,
- 0x65, 0xf4, 0xe4, 0xd6, 0x3f, 0xd6, 0x62, 0x2e, 0x5b, 0xb4, 0xb7, 0xdd,
- 0xba, 0x71, 0xf5, 0xb0, 0x56, 0x06, 0xd0, 0xa3, 0x5f, 0xa7, 0x98, 0x9d,
- 0x53, 0xcc, 0xad, 0x86, 0xcc, 0xc2, 0x32, 0x98, 0xa3, 0xeb, 0x2e, 0xaf,
- 0xf2, 0xd8, 0x5a, 0xc6, 0x91, 0xab, 0x2b, 0x6b, 0x4d, 0x90, 0x7e, 0xff,
- 0xfc, 0x65, 0xcc, 0x49, 0x65, 0x23, 0xa9, 0x79, 0xc9, 0x85, 0x52, 0x19,
- 0xcc, 0x41, 0x4b, 0x15, 0xbf, 0x6e, 0xd1, 0xab, 0x29, 0xbf, 0x33, 0x50,
- 0x01, 0x94, 0xe3, 0x15, 0xb4, 0xc8, 0x4e, 0xe5, 0xe2, 0x2b, 0xc3, 0x99,
- 0x99, 0xf8, 0xd9, 0x53, 0x4b, 0x66, 0x4e, 0x96, 0x27, 0x92, 0x2b, 0xdd,
- 0x22, 0xbd, 0x03, 0x13, 0x58, 0x44, 0x02, 0x90, 0x57, 0xa5, 0x90, 0x6c,
- 0x7f, 0x0e, 0x32, 0x8c, 0x63, 0x5c, 0x3a, 0x88, 0x3a, 0xf1, 0xdb, 0xe8,
- 0xa0, 0xe3, 0x2d, 0xd1, 0x19, 0x02, 0x5f, 0x94, 0x55, 0x3a, 0xa5, 0x48,
- 0xa0, 0x82, 0xf4, 0x0d, 0x18, 0xc2, 0xfb, 0xd2, 0x35, 0x47, 0x5d, 0x61,
- 0x19, 0x5f, 0xeb, 0x0b, 0x50, 0x4b, 0x45, 0x71, 0xe9, 0x65, 0x12, 0x71,
- 0x94, 0x07, 0x1b, 0xce, 0x60, 0xcf, 0x86, 0x18, 0xdd, 0x82, 0xe2, 0x2e,
- 0xc6, 0xb7, 0x98, 0x88, 0x27, 0x36, 0x99, 0xcd, 0x28, 0xa9, 0x52, 0xd2,
- 0x52, 0x31, 0xaf, 0x72, 0x18, 0xc8, 0xc9, 0xe6, 0x9c, 0xba, 0x92, 0x5b,
- 0x9c, 0xe7, 0x65, 0x99, 0x0d, 0x40, 0x98, 0xbc, 0x14, 0x41, 0xae, 0x4c,
- 0x39, 0xd1, 0x9d, 0xeb, 0x55, 0xe0, 0x5a, 0x92, 0x84, 0x6b, 0x0b, 0x22,
- 0x35, 0x97, 0x88, 0x66, 0x4a, 0xb1, 0x3d, 0x1c, 0x87, 0x23, 0x98, 0x24,
- 0x30, 0x3e, 0x85, 0x26, 0xb9, 0xce, 0xb0, 0x0b, 0x4d, 0x25, 0x4e, 0xa2,
- 0x69, 0xce, 0x4b, 0x4f, 0xc6, 0xb6, 0xa6, 0x34, 0x38, 0xc1, 0x1a, 0x7d,
- 0xc0, 0x48, 0xfa, 0x88, 0xd8, 0x53, 0xa6, 0xb3, 0x32, 0x23, 0x1c, 0x27,
- 0x42, 0x24, 0xb1, 0x18, 0x51, 0x45, 0x8a, 0x79, 0x9f, 0xd7, 0xa9, 0x6c,
- 0xab, 0x98, 0x72, 0x5b, 0x91, 0x62, 0x10, 0x70, 0x65, 0x9a, 0x21, 0x72,
- 0x3d, 0x21, 0xbd, 0x51, 0x0d, 0x57, 0x65, 0x30, 0xd4, 0x63, 0x84, 0x7c,
- 0xc5, 0x0f, 0xfd, 0xe8, 0x2d, 0x91, 0x7a, 0x88, 0xcc, 0x3e, 0x77, 0xf4,
- 0xb3, 0xa1, 0xf5, 0x83, 0xf9, 0x87, 0x7a, 0xca, 0xf0, 0xa0, 0x38, 0x9c,
- 0xc7, 0x61, 0xf6, 0x0f, 0x06, 0x3c, 0x5b, 0x06, 0xff, 0xe5, 0x40, 0x40,
- 0x79, 0x25, 0x2e, 0xc3, 0xb8, 0x5f, 0xe3, 0xec, 0x96, 0x90, 0xd0, 0xfd,
- 0x3a, 0xd9, 0x4d, 0x0c, 0x2d, 0xc4, 0x5e, 0x60, 0xb7, 0x93, 0x59, 0xe2,
- 0x8a, 0xaa, 0x41, 0x51, 0x89, 0x16, 0x37, 0x03, 0xef, 0xad, 0xa7, 0x2c,
- 0x59, 0x5c, 0xb0, 0x1a, 0x12, 0x98, 0x05, 0x02, 0x43, 0x62, 0xb2, 0x30,
- 0x60, 0x84, 0xd6, 0xc7, 0x51, 0x8d, 0x09, 0x8e, 0xc0, 0xd7, 0x6e, 0xc6,
- 0xd9, 0xb0, 0x1d, 0x04, 0xcc, 0xcf, 0xb8, 0xcd, 0x6e, 0xb5, 0x9c, 0x3b,
- 0xf6, 0x92, 0x56, 0x0c, 0x1c, 0x61, 0x31, 0x54, 0xc6, 0xda, 0xbf, 0x4e,
- 0xa1, 0x0f, 0xc4, 0x45, 0x89, 0x22, 0x01, 0xe8, 0x11, 0x05, 0xed, 0xc7,
- 0xaf, 0x28, 0xf0, 0xae, 0x17, 0xa5, 0xbd, 0xcb, 0x9e, 0x33, 0x01, 0xf3,
- 0xe6, 0x36, 0xba, 0x45, 0xb6, 0xab, 0x7c, 0x9b, 0xbb, 0xed, 0xe1, 0x8f,
- 0x2f, 0xda, 0x51, 0xde, 0x4c, 0x5a, 0xed, 0x75, 0x96, 0x18, 0x72, 0xb3,
- 0x7b, 0xc1, 0xdb, 0x15, 0x51, 0xb5, 0x58, 0x29, 0x8e, 0xd3, 0x96, 0x4b,
- 0xc2, 0x95, 0x56, 0x03, 0x10, 0xd1, 0xaf, 0xfb, 0xfd, 0xc0, 0xfa, 0x14,
- 0xe9, 0x30, 0xbf, 0x9c, 0x65, 0xbf, 0x51, 0x5d, 0x52, 0xb4, 0x73, 0x34,
- 0x01, 0x66, 0x6a, 0x68, 0x6f, 0x9a, 0x57, 0xa9, 0xd9, 0xbb, 0x3e, 0x7f,
- 0x27, 0x5c, 0x0a, 0xba, 0x75, 0x51, 0x8e, 0x40, 0x20, 0x52, 0xd9, 0xa6,
- 0x92, 0xa2, 0x4e, 0x29, 0xc1, 0x3d, 0x15, 0x40, 0x35, 0x83, 0x5e, 0xc3,
- 0x1d, 0x7b, 0xb4, 0xa3, 0x44, 0x27, 0xb5, 0x0b, 0xff, 0x03, 0xa0, 0xd9,
- 0x5c, 0x2b, 0xb8, 0x16, 0x8f, 0x2f, 0xb9, 0x30, 0x26, 0x9e, 0xbc, 0x60,
- 0xb9, 0x7a, 0x53, 0x0f, 0xd8, 0xd7, 0x0b, 0x74, 0x19, 0x70, 0x8d, 0x59,
- 0x92, 0xe8, 0x49, 0x41, 0xce, 0x22, 0xdd, 0x28, 0x69, 0x95, 0x9d, 0x16,
- 0x4d, 0xb1, 0x43, 0x35, 0x12, 0x24, 0xa1, 0x12, 0xf7, 0xb6, 0x88, 0x1e,
- 0xb2, 0x49, 0x13, 0x00, 0xbb, 0xba, 0xe0, 0xfd, 0x11, 0xc6, 0x7b, 0x6a,
- 0x59, 0x4f, 0x09, 0xbc, 0xc4, 0xb3, 0x22, 0x85, 0x4e, 0x52, 0x2e, 0xf1,
- 0x8e, 0x83, 0xb2, 0x27, 0x9e, 0xf9, 0x01, 0xa1, 0x59, 0x78, 0x05, 0xbc,
- 0x13, 0xb5, 0xb0, 0x0c, 0x52, 0xc5, 0x93, 0x25, 0x9a, 0x82, 0x61, 0x60,
- 0x03, 0x3d, 0xac, 0x18, 0x8e, 0x98, 0x9a, 0x1a, 0xe3, 0x09, 0x5f, 0xe3,
- 0x31, 0x6d, 0x49, 0x27, 0x57, 0x38, 0x40, 0x77, 0x88, 0x9c, 0xea, 0x2b,
- 0xc1, 0xa0, 0x89, 0x02, 0x51, 0xd4, 0xef, 0x70, 0x32, 0x8d, 0x25, 0x1e,
- 0x69, 0x49, 0xa9, 0x42, 0x12, 0x83, 0x16, 0xb3, 0x19, 0x96, 0x0a, 0x12,
- 0x88, 0x46, 0x43, 0x2b, 0x5d, 0x64, 0x6e, 0x98, 0x0d, 0x6e, 0xc2, 0x0c,
- 0x84, 0x81, 0xc3, 0x0b, 0x5e, 0x68, 0x68, 0x3a, 0x69, 0x33, 0xb8, 0xfc,
- 0xff, 0x07, 0x9a, 0x9f, 0xbd, 0x84, 0x88, 0x37, 0x7a, 0x57, 0x90, 0x49,
- 0xc1, 0xbf, 0x01, 0x26, 0x20, 0x25, 0x26, 0x85, 0xf0, 0x91, 0xc4, 0x3d,
- 0x8f, 0xac, 0x77, 0x88, 0xba, 0x91, 0xc4, 0x0b, 0x37, 0xd3, 0xf6, 0x95,
- 0x37, 0x6e, 0x0a, 0xb7, 0xd8, 0x0a, 0xc0, 0xa0, 0x50, 0xc0, 0x3a, 0x22,
- 0xcd, 0xe3, 0xa2, 0xd1, 0x1d, 0xff, 0x47, 0xb3, 0x1d, 0x4b, 0x74, 0xce,
- 0xcf, 0x99, 0xc7, 0x2f, 0x52, 0x87, 0x87, 0x48, 0xb8, 0xa6, 0xc7, 0x82,
- 0x2e, 0xa6, 0x7b, 0x44, 0xeb, 0xec, 0xc2, 0xc5, 0x71, 0xe8, 0xc8, 0x22,
- 0xdf, 0x04, 0x84, 0x11, 0x2f, 0x8c, 0x80, 0xc1, 0x4b, 0xf1, 0x55, 0xbd,
- 0x3c, 0xa5, 0x9a, 0xb0, 0xcf, 0x8f, 0xc3, 0xa7, 0x19, 0x41, 0x6b, 0x88,
- 0x13, 0x1b, 0xde, 0x8b, 0x78, 0x12, 0xf8, 0x72, 0x0b, 0xf7, 0x4d, 0xd9,
- 0x52, 0xab, 0x66, 0x55, 0xb8, 0x6c, 0x06, 0x69, 0x75, 0x83, 0x22, 0x36,
- 0x29, 0x12, 0x5a, 0xb8, 0xd3, 0x61, 0x50, 0xc6, 0xec, 0x0b, 0x12, 0x58,
- 0x38, 0x84, 0xb9, 0x1b, 0x31, 0x80, 0x0c, 0xb2, 0xbb, 0x0a, 0x64, 0x6f,
- 0x81, 0xd4, 0xc0, 0x6b, 0x4e, 0x33, 0x11, 0x3c, 0xde, 0x10, 0x42, 0xa0,
- 0xb4, 0x09, 0x15, 0xdc, 0x3f, 0xae, 0x8b, 0x03, 0x73, 0x53, 0x03, 0x59,
- 0xd4, 0xdc, 0x73, 0x79, 0x70, 0x77, 0xb5, 0x0a, 0x8e, 0xad, 0x7d, 0x22,
- 0xfd, 0x1b, 0x9b, 0xfe, 0x48, 0x61, 0xc9, 0x5d, 0x9f, 0xe6, 0xd2, 0x86,
- 0xd4, 0x1a, 0xcf, 0xbb, 0x0e, 0x23, 0x9d, 0x79, 0x25, 0xb6, 0xb8, 0x98,
- 0x5b, 0xed, 0x92, 0xd1, 0xf2, 0xd8, 0xb5, 0x8e, 0xaa, 0x9a, 0x51, 0xdf,
- 0xc2, 0xbc, 0x86, 0x32, 0x38, 0x5a, 0x79, 0x3c, 0x3b, 0x3b, 0xe4, 0xdb,
- 0x64, 0x0e, 0x9f, 0x25, 0x0c, 0x7f, 0x35, 0x4d, 0x46, 0x69, 0x28, 0xc1,
- 0xa9, 0x41, 0x5d, 0x8d, 0x54, 0x15, 0x9a, 0xb4, 0xe0, 0x4f, 0x97, 0xb6,
- 0x2a, 0xac, 0x31, 0x0d, 0x4c, 0xbc, 0x78, 0x0b, 0x64, 0xd8, 0x82, 0xea,
- 0x25, 0x0e, 0x1c, 0xcd, 0x4e, 0x91, 0xc8, 0x42, 0xf7, 0x28, 0xb1, 0xb6,
- 0x9b, 0xcc, 0x04, 0x84, 0x38, 0x7c, 0x0d, 0x99, 0x39, 0xe6, 0xa1, 0x82,
- 0xa8, 0xa6, 0x1c, 0x6a, 0x73, 0xfc, 0x02, 0x83, 0x21, 0xe1, 0xfe, 0x75,
- 0x5f, 0x08, 0xc7, 0x5c, 0x79, 0x4e, 0x25, 0x29, 0x3b, 0xaa, 0xaf, 0x2c,
- 0x28, 0xee, 0x4e, 0x3b, 0x88, 0x65, 0x3a, 0x71, 0x5b, 0x02, 0x81, 0x1f,
- 0x44, 0x2e, 0xdb, 0x10, 0x86, 0x8e, 0xfc, 0xd0, 0x20, 0x72, 0x6e, 0xfc,
- 0x41, 0xe7, 0x43, 0xc6, 0xf5, 0xb1, 0x22, 0xf7, 0x5d, 0xd6, 0x2b, 0x21,
- 0x5d, 0x81, 0x28, 0xe4, 0xcd, 0x3e, 0xc2, 0xc1, 0xf5, 0x8f, 0xcf, 0xb7,
- 0xa2, 0xf3, 0x46, 0xb4, 0x16, 0x57, 0x0c, 0x3f, 0xaa, 0xdf, 0xf6, 0x7c,
- 0x4d, 0xb1, 0x41, 0x66, 0x49, 0x60, 0x4f, 0x26, 0x9c, 0xd2, 0xa4, 0x50,
- 0x51, 0x16, 0x4a, 0x73, 0xdc, 0x9b, 0x47, 0x54, 0x5b, 0x8b, 0x0b, 0x83,
- 0x88, 0x95, 0xc5, 0xe5, 0x8d, 0xe8, 0x22, 0x45, 0x4c, 0x58, 0x2a, 0xf0,
- 0xab, 0xb1, 0x49, 0x1a, 0x53, 0x34, 0xf1, 0x50, 0x42, 0x68, 0xe4, 0x8a,
- 0xa4, 0xe5, 0x14, 0x3c, 0xa3, 0xce, 0xa9, 0x14, 0x01, 0x5e, 0xc6, 0x7c,
- 0xb1, 0xd7, 0x10, 0x4c, 0xa3, 0xcb, 0x74, 0x96, 0x86, 0x6a, 0x8d, 0xde,
- 0x91, 0x6c, 0x27, 0x27, 0x8d, 0xb0, 0x9f, 0xab, 0x54, 0xcf, 0x1b, 0x5e,
- 0xda, 0x76, 0xc5, 0x64, 0x70, 0x19, 0xc1, 0xdc, 0xf1, 0xc1, 0xf4, 0x96,
- 0x66, 0xa0, 0x46, 0xb0, 0x01, 0x21, 0xd5, 0x62, 0x1d, 0x49, 0xa2, 0x21,
- 0x52, 0x42, 0x87, 0xf9, 0xfc, 0x0e, 0x17, 0x03, 0x1e, 0x2b, 0xcb, 0xab,
- 0x3d, 0xe0, 0xd6, 0x7b, 0xbd, 0x2f, 0x19, 0xbe, 0xfa, 0x0a, 0x64, 0x38,
- 0xcf, 0x99, 0x59, 0x49, 0xa6, 0x59, 0x56, 0x95, 0xe9, 0x64, 0xdc, 0x6c,
- 0x4f, 0x14, 0xb3, 0xde, 0x56, 0x8b, 0x03, 0x88, 0x09, 0xe2, 0xb3, 0xc1,
- 0x21, 0x73, 0xf7, 0x44, 0x13, 0xf0, 0x7b, 0x54, 0xae, 0x53, 0x60, 0xb1,
- 0x69, 0xf1, 0xf8, 0x2b, 0x92, 0x3c, 0xd7, 0x84, 0x3f, 0x14, 0x23, 0x90,
- 0x47, 0xe4, 0x44, 0xe3, 0xcf, 0x31, 0xd5, 0xb1, 0x9f, 0xce, 0x46, 0x9c,
- 0x87, 0x35, 0xc8, 0x60, 0xc7, 0x8a, 0x3b, 0x63, 0x38, 0xaa, 0xf3, 0xc3,
- 0xe7, 0x8c, 0x97, 0x1e, 0xd1, 0x6b, 0xc1, 0x22, 0x00, 0xa0, 0x78, 0xfe,
- 0x95, 0x7a, 0x95, 0x06, 0x44, 0xe3, 0x47, 0x71, 0xf2, 0xbb, 0x93, 0xe7,
- 0x67, 0x6f, 0x4e, 0xea, 0xd0, 0xc1, 0x15, 0x95, 0x74, 0xa4, 0x54, 0xa8,
- 0xe6, 0xe8, 0xa8, 0xb6, 0x37, 0x97, 0x0b, 0xe0, 0x24, 0xae, 0x0c, 0x2d,
- 0x7d, 0xd1, 0xf9, 0x0f, 0xcf, 0xcc, 0xe0, 0x32, 0xba, 0xab, 0x68, 0x50,
- 0xda, 0x62, 0x97, 0x03, 0x2f, 0x3d, 0x41, 0x90, 0x02, 0xf0, 0xb6, 0x7a,
- 0xc8, 0x85, 0x39, 0xcd, 0x4b, 0x87, 0x47, 0x29, 0x68, 0x9c, 0x38, 0xa8,
- 0xb5, 0x09, 0x40, 0x22, 0x47, 0xbb, 0x24, 0xd6, 0x1a, 0x30, 0xcd, 0x7a,
- 0xca, 0x1e, 0x89, 0xbd, 0x54, 0xa6, 0x4e, 0x0c, 0x3c, 0x58, 0x3f, 0x1b,
- 0x8b, 0x6a, 0xfb, 0xe7, 0x19, 0x07, 0x88, 0x92, 0xd3, 0x96, 0xdf, 0xbb,
- 0xe6, 0xd1, 0x71, 0xd7, 0x44, 0x08, 0xc4, 0x6f, 0x39, 0xac, 0x6b, 0x14,
- 0x2a, 0x5b, 0x89, 0xc6, 0x57, 0x62, 0xdc, 0x06, 0x4a, 0xa3, 0x2b, 0x85,
- 0xd0, 0x35, 0xe2, 0x4f, 0x0a, 0x9f, 0x4f, 0x9c, 0x75, 0x96, 0x0e, 0x37,
- 0xcb, 0xad, 0xf6, 0x99, 0x98, 0x65, 0x95, 0x09, 0x6d, 0xfc, 0x71, 0xa3,
- 0xae, 0xcd, 0x59, 0x5d, 0x94, 0x2e, 0xa8, 0x04, 0x87, 0xe0, 0xe9, 0x0e,
- 0x82, 0xee, 0x21, 0x36, 0x5d, 0x3a, 0x4b, 0xfa, 0x9a, 0xb7, 0x32, 0xcb,
- 0xb3, 0x61, 0x75, 0x91, 0x7a, 0x01, 0x5c, 0x4f, 0x23, 0xc3, 0x89, 0x88,
- 0xc1, 0x45, 0x04, 0xab, 0x7c, 0x8e, 0x32, 0x2c, 0x97, 0x0c, 0x18, 0x83,
- 0x46, 0x4a, 0xc9, 0x41, 0x66, 0xd1, 0xf1, 0x49, 0xb8, 0x18, 0x7d, 0xcf,
- 0xc0, 0x6c, 0x81, 0x60, 0x8f, 0x18, 0x93, 0x31, 0xae, 0x2d, 0x04, 0x36,
- 0x01, 0x87, 0xbe, 0x75, 0x89, 0x10, 0x4c, 0xae, 0x0c, 0x28, 0x75, 0x59,
- 0xf9, 0x1e, 0xb6, 0xfd, 0x0f, 0x40, 0x6e, 0x54, 0x49, 0xeb, 0x26, 0x2b,
- 0x81, 0xd1, 0x4a, 0xdb, 0x12, 0x9f, 0x2a, 0xe9, 0x9e, 0x3a, 0x4a, 0xb2,
- 0x1b, 0xe5, 0xb3, 0x16, 0xcc, 0x33, 0x5d, 0x09, 0xe6, 0x3f, 0x68, 0xf2,
- 0x2e, 0x52, 0xab, 0x8a, 0x1b, 0xb3, 0x20, 0x05, 0x85, 0xb6, 0x2d, 0x33,
- 0x45, 0x8b, 0xe0, 0x31, 0x2f, 0xef, 0x66, 0x15, 0xf2, 0x64, 0xbe, 0x3e,
- 0x86, 0x79, 0x41, 0xf2, 0x0f, 0xd2, 0xa8, 0x3d, 0xb2, 0x25, 0xd5, 0x14,
- 0xf9, 0xea, 0xf1, 0x57, 0xb8, 0xd0, 0x7e, 0x89, 0x82, 0x99, 0x66, 0x32,
- 0xd2, 0xd1, 0xe3, 0x19, 0xa1, 0x8e, 0x68, 0xe6, 0x50, 0x1b, 0x35, 0xd1,
- 0x02, 0xea, 0xcb, 0x29, 0x82, 0xae, 0x7a, 0x82, 0x0c, 0x5d, 0xb5, 0xd2,
- 0xc6, 0x03, 0xf1, 0xe8, 0xfc, 0xdc, 0x53, 0x6c, 0x13, 0x55, 0x12, 0xf5,
- 0xdc, 0xa8, 0x2a, 0xd0, 0x8b, 0xde, 0xce, 0x28, 0xd7, 0x19, 0xd7, 0xfb,
- 0x39, 0xc2, 0xbf, 0xb2, 0x98, 0x35, 0x83, 0x5d, 0x83, 0x6d, 0xc6, 0x8a,
- 0x28, 0x01, 0xd6, 0xc6, 0x7c, 0xd4, 0x4e, 0x48, 0xaf, 0x97, 0x66, 0x88,
- 0x2d, 0xb1, 0x03, 0xe1, 0x98, 0xca, 0x0e, 0x9f, 0x67, 0x5e, 0x09, 0x11,
- 0x14, 0x21, 0xd8, 0x20, 0x07, 0xd3, 0xa1, 0xb6, 0x31, 0x84, 0x3a, 0x9d,
- 0x4c, 0x18, 0xfa, 0x1a, 0x5b, 0x20, 0x7d, 0x99, 0x61, 0xd0, 0x29, 0x69,
- 0xd8, 0xb5, 0x23, 0x78, 0x37, 0x32, 0xa1, 0xb9, 0xf7, 0x10, 0x0b, 0x52,
- 0x4b, 0xb6, 0x28, 0x28, 0xa7, 0x06, 0x12, 0x21, 0x08, 0xad, 0x35, 0x2c,
- 0xd2, 0xea, 0xfc, 0x43, 0xb9, 0xb4, 0xe7, 0xa1, 0xc1, 0x29, 0x7a, 0xb1,
- 0x3f, 0x09, 0x2e, 0x34, 0x3a, 0x2e, 0x98, 0xb3, 0x84, 0xa1, 0x19, 0x51,
- 0x9c, 0xe7, 0x07, 0xf5, 0x9c, 0x94, 0x69, 0x55, 0xda, 0x4b, 0x33, 0x21,
- 0xbe, 0x4a, 0x7b, 0x46, 0x60, 0x9e, 0x24, 0x9e, 0xb7, 0x37, 0x87, 0xeb,
- 0x24, 0x70, 0xa8, 0x86, 0xa3, 0x11, 0xd5, 0xcf, 0x46, 0xac, 0x3a, 0x1c,
- 0xd2, 0x78, 0xd2, 0x5b, 0x92, 0x79, 0x81, 0x44, 0xbe, 0x09, 0xd7, 0x33,
- 0xb7, 0x92, 0x0b, 0x48, 0x3b, 0x45, 0x45, 0xd2, 0x15, 0xbd, 0xc9, 0x76,
- 0x9e, 0x92, 0xf1, 0xac, 0x25, 0x9a, 0x1a, 0xc8, 0xe1, 0xdd, 0x65, 0x5a,
- 0xe1, 0xf7, 0x9b, 0xfb, 0x5b, 0xb4, 0x1c, 0xe1, 0xe6, 0xe6, 0x08, 0x85,
- 0x4f, 0xf0, 0xd7, 0xf5, 0x41, 0x18, 0x38, 0x6c, 0x10, 0xe4, 0xac, 0x2b,
- 0xf4, 0xe9, 0x7e, 0x6f, 0xc7, 0x13, 0x3b, 0x86, 0x57, 0x97, 0xc5, 0x3c,
- 0xba, 0x04, 0x95, 0x61, 0xbe, 0x62, 0x55, 0xe5, 0x51, 0x6f, 0x59, 0xf9,
- 0xdd, 0x97, 0xcf, 0xf4, 0xcc, 0x19, 0x11, 0x15, 0xcd, 0x53, 0xe1, 0xe6,
- 0x9a, 0x4b, 0xa9, 0x04, 0x6b, 0x9a, 0xb2, 0x36, 0x06, 0x5d, 0x79, 0xfe,
- 0x2e, 0xdc, 0x5c, 0x6d, 0x43, 0xb8, 0x0d, 0x6d, 0x98, 0x0e, 0xe0, 0x08,
- 0x1a, 0x9b, 0x26, 0x7c, 0xc4, 0x2e, 0x81, 0xf1, 0x69, 0x37, 0x7e, 0xb6,
- 0xff, 0xd5, 0x34, 0x1f, 0x21, 0x64, 0x6a, 0xba, 0x7a, 0x2d, 0xf0, 0x49,
- 0xb3, 0x18, 0x0a, 0x36, 0x5b, 0x3a, 0x04, 0xc5, 0xed, 0x0c, 0x32, 0xde,
- 0x6c, 0xff, 0x12, 0x6d, 0x5a, 0x42, 0x24, 0x1f, 0x1c, 0x9b, 0xa7, 0x37,
- 0xdd, 0x29, 0xcc, 0xa2, 0x7c, 0x58, 0x39, 0x33, 0xc0, 0x07, 0x5a, 0x08,
- 0x96, 0xee, 0xae, 0xc0, 0xcc, 0x10, 0x77, 0x94, 0x2c, 0x5f, 0xcb, 0x67,
- 0xc6, 0x0f, 0x7a, 0x9b, 0x0c, 0x1f, 0xf2, 0x8d, 0xe8, 0xed, 0x70, 0xfb,
- 0xcc, 0x42, 0x3b, 0x4c, 0x23, 0x68, 0x6e, 0x30, 0x2d, 0x19, 0xbb, 0xff,
- 0xf0, 0xf1, 0xb8, 0xe5, 0xec, 0xe8, 0x0e, 0xd3, 0x93, 0x4b, 0x37, 0x58,
- 0x7a, 0xf1, 0x56, 0x61, 0x82, 0x4e, 0xa0, 0x45, 0x31, 0x4c, 0xdf, 0xb1,
- 0x68, 0x42, 0x05, 0x68, 0xdf, 0x2d, 0x5f, 0x90, 0x89, 0xd4, 0xa0, 0xb8,
- 0x9b, 0xa2, 0x24, 0x6f, 0x19, 0xf0, 0x90, 0x1c, 0x60, 0x28, 0xaa, 0x51,
- 0x4d, 0x06, 0xd0, 0x36, 0xe8, 0x7b, 0xd6, 0xf8, 0x5b, 0xc8, 0xde, 0xf6,
- 0x17, 0x99, 0x7a, 0x4b, 0xf3, 0x1c, 0x46, 0xad, 0xf5, 0x8a, 0xd8, 0xc0,
- 0xe6, 0x0c, 0x91, 0x9e, 0x6b, 0x59, 0x90, 0xa0, 0xb5, 0x79, 0xfa, 0x1e,
- 0x61, 0x3b, 0x8d, 0x5c, 0xf6, 0x6e, 0xe6, 0x7b, 0x98, 0x5d, 0x3a, 0xe6,
- 0xc7, 0x75, 0xbb, 0x79, 0x4e, 0x82, 0xd0, 0x6b, 0x50, 0xd2, 0xdc, 0x9d,
- 0x0e, 0x88, 0x5b, 0x75, 0xa9, 0xeb, 0x1d, 0xa3, 0x4b, 0xcb, 0x89, 0xf4,
- 0x46, 0x77, 0x5f, 0x16, 0x3e, 0x5d, 0xc2, 0xc2, 0x6b, 0x90, 0xc6, 0x2e,
- 0x23, 0x5f, 0x42, 0x86, 0xb5, 0x39, 0xdc, 0x93, 0x8b, 0x87, 0x9b, 0x43,
- 0x21, 0x67, 0x39, 0x17, 0x27, 0xc1, 0xa3, 0xc1, 0xc3, 0x3f, 0x25, 0x0b,
- 0x47, 0x4f, 0xb5, 0x5a, 0xe0, 0xe1, 0x57, 0x5d, 0x34, 0x15, 0xef, 0x08,
- 0xe9, 0x64, 0x50, 0xe6, 0x93, 0x05, 0x5a, 0x93, 0x92, 0xea, 0x8a, 0x77,
- 0x68, 0xac, 0xe3, 0x6c, 0xdd, 0xcf, 0x59, 0x65, 0x04, 0x7d, 0x43, 0x0c,
- 0xde, 0x8e, 0xc2, 0x63, 0xd8, 0x1c, 0xd3, 0xac, 0x50, 0x78, 0xfb, 0xb6,
- 0xca, 0xd3, 0x76, 0x88, 0x2c, 0x87, 0xd8, 0x4d, 0x29, 0x02, 0x74, 0xd7,
- 0x7e, 0x87, 0x68, 0xb7, 0x4d, 0x2e, 0x33, 0x4a, 0x51, 0xf2, 0x97, 0xf3,
- 0x85, 0xd9, 0x69, 0xab, 0x99, 0x15, 0x8f, 0xbc, 0x95, 0x70, 0x8b, 0xe9,
- 0x0a, 0x82, 0x85, 0x07, 0xec, 0xac, 0xb8, 0x24, 0x8c, 0x99, 0x95, 0xc7,
- 0xec, 0x84, 0x00, 0x5b, 0x56, 0xbe, 0x6d, 0x04, 0xb5, 0x83, 0xbd, 0xe4,
- 0x4c, 0xf3, 0x93, 0xc1, 0xe1, 0xd8, 0xc5, 0x85, 0xdd, 0x2d, 0xee, 0xec,
- 0xc8, 0x5a, 0x68, 0xfd, 0xae, 0xf1, 0x96, 0x2c, 0x4f, 0xd7, 0x71, 0x5a,
- 0x91, 0xad, 0x03, 0x0d, 0x43, 0x3e, 0x6d, 0x28, 0xcf, 0x5c, 0x8b, 0xe7,
- 0xa2, 0x3d, 0x61, 0x52, 0x2b, 0x14, 0x27, 0x62, 0xe2, 0x03, 0x00, 0x46,
- 0x3c, 0x6b, 0x87, 0x98, 0x39, 0xb8, 0xc5, 0xce, 0xb3, 0x93, 0xd3, 0x13,
- 0xda, 0x8b, 0x4e, 0xe4, 0xdb, 0x39, 0xc6, 0x79, 0x6e, 0xda, 0xb1, 0x36,
- 0x8e, 0x1f, 0xbb, 0xb6, 0x80, 0xb9, 0x3b, 0x46, 0x5c, 0x15, 0x90, 0x63,
- 0xdb, 0xb1, 0xd2, 0x9e, 0x61, 0xa5, 0x8a, 0x21, 0x85, 0x4c, 0x68, 0xb5,
- 0x8b, 0x46, 0xb5, 0x1e, 0xf6, 0x8c, 0x1b, 0x9f, 0x9e, 0xf8, 0xd2, 0xe1,
- 0xd0, 0x7f, 0xf9, 0x08, 0x43, 0xd8, 0x9a, 0xc6, 0xd3, 0x8c, 0xca, 0x08,
- 0xe4, 0x62, 0x6e, 0x92, 0x6a, 0x43, 0x57, 0x09, 0x03, 0x6b, 0x93, 0x85,
- 0x14, 0xc3, 0x8c, 0x58, 0xb5, 0x18, 0xd7, 0xa2, 0xd9, 0xa3, 0x7c, 0xd2,
- 0xdc, 0x6f, 0xe3, 0xa2, 0x07, 0xb6, 0xa0, 0x16, 0xaa, 0x2f, 0x96, 0x04,
- 0xc3, 0x99, 0x43, 0x85, 0x4d, 0xd2, 0xa4, 0x25, 0xc1, 0x93, 0x52, 0xee,
- 0x71, 0x44, 0xaa, 0x10, 0x52, 0x95, 0xd0, 0x51, 0x5a, 0x78, 0x24, 0x86,
- 0x26, 0x06, 0x5e, 0xb5, 0x88, 0xd3, 0x00, 0x89, 0x78, 0x29, 0x2c, 0x49,
- 0xd4, 0x12, 0xda, 0x6a, 0xc4, 0x36, 0x4f, 0xc5, 0x7f, 0x28, 0x8f, 0xa7,
- 0xb3, 0x4b, 0xdc, 0x64, 0x3f, 0x32, 0xa3, 0x9e, 0x8b, 0xd9, 0x52, 0x0c,
- 0xc6, 0xdd, 0xa9, 0xfb, 0x58, 0xd9, 0x3e, 0x4d, 0xbe, 0xb1, 0x3b, 0x0a,
- 0xcc, 0x24, 0xcb, 0xca, 0xab, 0x35, 0x3d, 0x7b, 0xe9, 0xe5, 0x28, 0xae,
- 0xdb, 0x6e, 0xe3, 0xa2, 0xcb, 0x2d, 0xc3, 0x8d, 0x72, 0x48, 0x3f, 0x82,
- 0xa8, 0x62, 0x91, 0xda, 0xdc, 0xa2, 0xe7, 0x2f, 0x4f, 0x4f, 0xb6, 0xa2,
- 0x37, 0x12, 0xfa, 0x85, 0x9a, 0xea, 0x5d, 0x45, 0xab, 0x0c, 0x0d, 0x6c,
- 0x66, 0x3d, 0x10, 0x46, 0x19, 0x5d, 0x0a, 0xb5, 0xbe, 0x51, 0x3e, 0x0c,
- 0x06, 0xd2, 0x6d, 0x49, 0xc0, 0x18, 0xfb, 0x6b, 0xb6, 0x77, 0x7b, 0xbb,
- 0x5c, 0xc7, 0x04, 0xb7, 0xc3, 0x51, 0xcd, 0xd9, 0x64, 0x97, 0xb0, 0x3c,
- 0x33, 0x89, 0xa8, 0xeb, 0x26, 0x4d, 0xbf, 0xc1, 0x8e, 0x4b, 0xdf, 0x75,
- 0x4c, 0xe7, 0xdb, 0xda, 0x64, 0x6e, 0x92, 0x3b, 0x7f, 0x6b, 0x77, 0xe2,
- 0x47, 0x5f, 0x7d, 0x55, 0x93, 0xa7, 0x95, 0xff, 0xa2, 0x1d, 0xe6, 0xf1,
- 0xce, 0x0e, 0xcd, 0xcd, 0x03, 0xe4, 0x87, 0x2f, 0xe2, 0xaf, 0xe8, 0xc5,
- 0xfa, 0x6b, 0x65, 0x0a, 0x74, 0x34, 0x6a, 0x7f, 0x2f, 0xc6, 0x6f, 0x02,
- 0xdd, 0x11, 0xc5, 0xb4, 0xbe, 0xf5, 0x15, 0x76, 0x17, 0x78, 0x8b, 0x1e,
- 0xe6, 0x75, 0xcc, 0xc7, 0x63, 0xa4, 0x37, 0x7c, 0x52, 0xab, 0x89, 0xdd,
- 0x24, 0xc5, 0xc8, 0x9f, 0xee, 0x4e, 0x37, 0xde, 0x6d, 0x9b, 0x2e, 0xf1,
- 0x41, 0x4a, 0xf6, 0xc3, 0xfd, 0x44, 0xc6, 0xb0, 0xf9, 0x87, 0x2d, 0x46,
- 0x94, 0x6b, 0x36, 0xb4, 0x0b, 0x23, 0xda, 0xfd, 0xea, 0xab, 0x2e, 0x8e,
- 0xec, 0xf1, 0x57, 0x5f, 0xb5, 0x96, 0x3b, 0x70, 0xba, 0xb9, 0xc9, 0xad,
- 0xf3, 0x00, 0x5f, 0xb7, 0x44, 0x53, 0x42, 0x37, 0x51, 0xb8, 0x1f, 0xfc,
- 0x26, 0xfa, 0x3a, 0x7a, 0x7d, 0x76, 0x71, 0xe2, 0x98, 0xe9, 0xe9, 0x04,
- 0x71, 0x40, 0x91, 0x63, 0x97, 0xa2, 0x10, 0xb0, 0x39, 0xe6, 0xe3, 0xb0,
- 0x11, 0x70, 0xba, 0x98, 0xf8, 0xf6, 0x32, 0x42, 0x3d, 0x53, 0xaf, 0x95,
- 0xa2, 0x71, 0xe9, 0x89, 0x64, 0xd1, 0x87, 0xa2, 0xd3, 0xe2, 0x8c, 0xb2,
- 0x66, 0xe8, 0xdc, 0xfd, 0x17, 0xf0, 0xcd, 0xa4, 0x28, 0x7d, 0x1c, 0x09,
- 0x34, 0x1a, 0xa9, 0x95, 0x4c, 0x0c, 0x96, 0x79, 0x31, 0x35, 0xfe, 0x08,
- 0xe3, 0x1c, 0x13, 0x93, 0x86, 0xfc, 0x9d, 0x0d, 0xb2, 0x49, 0x56, 0xdd,
- 0xb5, 0xd8, 0xcb, 0x40, 0x48, 0x0c, 0xe8, 0x61, 0x67, 0xec, 0xbd, 0xbe,
- 0xcc, 0x2a, 0xb7, 0x0a, 0xde, 0x26, 0x50, 0xe1, 0x16, 0x59, 0xa9, 0x39,
- 0x89, 0x4a, 0x22, 0x41, 0x36, 0x4a, 0xc4, 0x2f, 0xe3, 0xb4, 0x75, 0xfc,
- 0x23, 0x9f, 0x6f, 0x78, 0x76, 0xb0, 0x74, 0x82, 0xc6, 0x20, 0x91, 0xe6,
- 0xf8, 0x85, 0x98, 0x9e, 0x94, 0x73, 0x4c, 0xa6, 0xb6, 0x5b, 0x72, 0xcc,
- 0x27, 0x54, 0x23, 0xda, 0xed, 0x3c, 0x60, 0x37, 0xa4, 0xba, 0x71, 0x14,
- 0x41, 0xab, 0x18, 0x83, 0xd8, 0x8c, 0x9b, 0xd7, 0xbe, 0xe1, 0x2c, 0x88,
- 0x61, 0x81, 0x33, 0x24, 0x10, 0xaf, 0x88, 0x2e, 0x3b, 0xf8, 0x47, 0xe9,
- 0x5c, 0xf3, 0xbf, 0x67, 0xf5, 0x76, 0xe0, 0x90, 0x8d, 0xb3, 0xcb, 0x45,
- 0x11, 0x4e, 0x04, 0x46, 0x9b, 0xa1, 0x86, 0xa8, 0x12, 0xd3, 0x43, 0xd1,
- 0xfb, 0x26, 0x51, 0x04, 0xbe, 0x29, 0x9a, 0x6a, 0x95, 0xe9, 0xa8, 0xf5,
- 0x4e, 0x11, 0xef, 0xae, 0x12, 0x0f, 0xd1, 0x8c, 0xb6, 0x72, 0x0c, 0x0a,
- 0x0e, 0xda, 0x3a, 0x25, 0xb4, 0x9a, 0x7c, 0x4f, 0xd4, 0x9a, 0x81, 0x18,
- 0x14, 0x37, 0x17, 0x52, 0x21, 0x0a, 0x84, 0x54, 0x88, 0x9a, 0x96, 0x20,
- 0x90, 0xb5, 0x45, 0xd3, 0x57, 0xcf, 0x3e, 0x3e, 0x8d, 0xb3, 0xbb, 0xb9,
- 0xca, 0xb1, 0xe2, 0x1f, 0xf0, 0x4b, 0xe4, 0x8f, 0x7e, 0xb5, 0x14, 0x64,
- 0x8a, 0xb4, 0xa3, 0xcc, 0x1f, 0x79, 0x9b, 0xe0, 0xf9, 0x9b, 0xd9, 0x24,
- 0x4f, 0x46, 0x25, 0x5f, 0xe4, 0x1a, 0x0d, 0x48, 0xcb, 0xc5, 0x35, 0x1c,
- 0x65, 0x73, 0xbd, 0x80, 0x5c, 0xdc, 0x6b, 0xde, 0xe5, 0x68, 0xd3, 0xa9,
- 0xe5, 0x43, 0x87, 0xc7, 0x31, 0x85, 0x32, 0x03, 0x45, 0x5a, 0xe1, 0xca,
- 0x34, 0x5b, 0x3d, 0x1a, 0x4b, 0xa0, 0xe4, 0x1f, 0xef, 0x57, 0xa9, 0xbb,
- 0x95, 0xde, 0x56, 0xf0, 0x67, 0x3a, 0x72, 0xed, 0xb3, 0x51, 0xff, 0xe5,
- 0x7f, 0x9f, 0xb4, 0xde, 0xaf, 0x97, 0xe9, 0x67, 0x0b, 0x9c, 0xe1, 0xde,
- 0xf7, 0xf6, 0xe2, 0x47, 0x8f, 0xd6, 0xbb, 0x4f, 0x8f, 0x09, 0x26, 0x37,
- 0x9f, 0x91, 0x25, 0x3e, 0x4e, 0x24, 0xb7, 0x37, 0xc1, 0x4f, 0x93, 0x39,
- 0xae, 0x47, 0x5d, 0xda, 0x43, 0x9f, 0xd6, 0x14, 0x56, 0x5c, 0xfd, 0xfe,
- 0xf8, 0xc9, 0xb2, 0xec, 0x01, 0x78, 0x36, 0x9b, 0x2e, 0xa6, 0xd6, 0x1b,
- 0x32, 0xa6, 0x37, 0x67, 0xc3, 0x3b, 0x26, 0x3a, 0x2a, 0x06, 0x66, 0x42,
- 0xf1, 0x09, 0xb3, 0xc3, 0x3b, 0x4d, 0x33, 0xe7, 0x12, 0xb4, 0x85, 0x2f,
- 0x91, 0x28, 0xc8, 0xc1, 0xc1, 0xaa, 0xf0, 0x62, 0x96, 0x61, 0x7d, 0xb0,
- 0x7c, 0x9a, 0xb2, 0x70, 0x4c, 0x7c, 0x68, 0xd4, 0x06, 0xaf, 0x48, 0xe3,
- 0x06, 0x4a, 0xa8, 0x55, 0xe8, 0x33, 0x58, 0x0f, 0xae, 0x63, 0x83, 0x3b,
- 0x12, 0xb5, 0x0b, 0x6b, 0x41, 0xb6, 0x54, 0xb1, 0x44, 0xb9, 0x6e, 0x4c,
- 0x86, 0xd6, 0x52, 0x63, 0xe1, 0xd3, 0x60, 0xdc, 0x26, 0x33, 0x19, 0x43,
- 0x1c, 0x6f, 0xdf, 0x9c, 0x72, 0xf8, 0x4e, 0x52, 0xf3, 0x18, 0xc1, 0xbe,
- 0xd1, 0xdd, 0x08, 0x2d, 0x92, 0x13, 0x2e, 0x99, 0x05, 0x54, 0x38, 0x5a,
- 0x3d, 0x9c, 0x24, 0x4c, 0xc6, 0x4d, 0x09, 0xb8, 0x49, 0x60, 0x2d, 0x16,
- 0xb0, 0xa5, 0x13, 0x3e, 0x01, 0x18, 0x92, 0x6e, 0x1a, 0xa7, 0xb0, 0x06,
- 0x9c, 0x93, 0x27, 0x99, 0xe2, 0x0e, 0x98, 0x2a, 0xf7, 0x2e, 0xce, 0xaa,
- 0x74, 0x51, 0x97, 0xdc, 0x35, 0x08, 0x87, 0x45, 0xee, 0x00, 0x1e, 0x15,
- 0xfa, 0x45, 0x0b, 0xdc, 0x85, 0x89, 0xc6, 0xb1, 0x04, 0xe3, 0x9a, 0x5c,
- 0x4a, 0xaa, 0x1d, 0x1f, 0x68, 0xbf, 0xf3, 0x7a, 0xfb, 0x6d, 0x47, 0x72,
- 0x1f, 0x5e, 0x8b, 0x41, 0x50, 0x6d, 0x5d, 0x40, 0x13, 0xb1, 0xe7, 0xfb,
- 0x2d, 0x98, 0xc5, 0xbc, 0x65, 0xf3, 0x98, 0x21, 0x0c, 0xcc, 0x02, 0x50,
- 0x0b, 0x3c, 0xfe, 0xcd, 0x9e, 0xd1, 0x8d, 0x72, 0x03, 0x28, 0x86, 0x24,
- 0x9e, 0xad, 0x6e, 0xb4, 0x31, 0x6d, 0x5e, 0x32, 0x9b, 0x70, 0x13, 0x2e,
- 0x80, 0x4c, 0xe0, 0xbb, 0x2b, 0x78, 0x12, 0x08, 0xa5, 0xa0, 0x18, 0xbb,
- 0x68, 0x63, 0xb4, 0x11, 0x6d, 0x6f, 0x8e, 0x12, 0x8e, 0x94, 0x24, 0x31,
- 0x6d, 0x0f, 0x8e, 0x1d, 0x46, 0x20, 0x50, 0xf3, 0xc8, 0x62, 0x2e, 0xbc,
- 0xdd, 0x32, 0x6e, 0x33, 0x1a, 0x16, 0x3d, 0xd8, 0x95, 0x92, 0x5d, 0x1d,
- 0x9c, 0xa6, 0x33, 0xf7, 0x2e, 0xb9, 0xfd, 0xea, 0x44, 0xef, 0xb9, 0x82,
- 0x90, 0xa9, 0x21, 0xf9, 0x63, 0xbf, 0x21, 0x4a, 0xd3, 0x20, 0x96, 0x2a,
- 0x9f, 0x90, 0x3a, 0xc1, 0x67, 0x6d, 0x77, 0xc7, 0xc2, 0xcb, 0xe2, 0xdb,
- 0x11, 0x4f, 0xb2, 0x4b, 0xd5, 0xd5, 0x85, 0xe4, 0x03, 0x61, 0x6b, 0x8d,
- 0x43, 0x60, 0x2b, 0x56, 0x33, 0x99, 0x3d, 0x11, 0xc9, 0xb1, 0xa4, 0x0b,
- 0x28, 0x4a, 0x27, 0xc9, 0x9c, 0xf4, 0x55, 0x52, 0xe5, 0x7c, 0xc2, 0x05,
- 0x95, 0xf0, 0x3a, 0xc3, 0x9a, 0x4b, 0x86, 0x2a, 0x31, 0xbe, 0x5b, 0xa8,
- 0x32, 0xec, 0x88, 0x1a, 0x2f, 0x66, 0x1c, 0xcc, 0x40, 0xc5, 0x48, 0xa6,
- 0x30, 0xce, 0x4c, 0x84, 0x55, 0xb8, 0x94, 0xd1, 0xc6, 0x43, 0xaa, 0xa5,
- 0x84, 0xe1, 0x99, 0x93, 0x81, 0xec, 0x26, 0xc0, 0x00, 0x90, 0xfd, 0x50,
- 0x2c, 0x48, 0xc5, 0x65, 0xdd, 0xe8, 0x7c, 0x81, 0x4c, 0xb7, 0x43, 0x4b,
- 0xc2, 0xed, 0x52, 0x80, 0x5e, 0xed, 0xa2, 0x2b, 0x16, 0x58, 0x90, 0xd4,
- 0xf7, 0xba, 0xa2, 0x11, 0x6c, 0x18, 0x1a, 0x38, 0x45, 0x74, 0x61, 0x86,
- 0x09, 0xe5, 0x04, 0x99, 0xd2, 0x77, 0xdd, 0x48, 0xaf, 0x61, 0x8b, 0x1b,
- 0x40, 0x4f, 0x29, 0x32, 0xa1, 0x8a, 0x99, 0x3e, 0x4c, 0x6d, 0x81, 0x65,
- 0x15, 0xb1, 0xec, 0xf1, 0x24, 0xbf, 0xcc, 0x86, 0x26, 0x3e, 0x8c, 0x92,
- 0x51, 0xf2, 0x4a, 0x23, 0x5c, 0x28, 0x48, 0xba, 0x25, 0xd3, 0xd6, 0x3b,
- 0x66, 0x9f, 0xe2, 0x96, 0x2a, 0xdb, 0xaf, 0x29, 0xe8, 0x7d, 0x6f, 0xbb,
- 0x5c, 0x03, 0x3e, 0x86, 0x5e, 0xd9, 0xdf, 0xbe, 0x5a, 0xf7, 0x95, 0xdd,
- 0x47, 0xdb, 0xd3, 0x35, 0x55, 0x4b, 0x2a, 0x62, 0xc8, 0x6f, 0x73, 0x10,
- 0x1f, 0xad, 0x78, 0x4c, 0x2b, 0x5e, 0x4b, 0xae, 0x63, 0xcb, 0x84, 0x7b,
- 0x2f, 0xde, 0x18, 0xe8, 0x6a, 0xda, 0x74, 0x5c, 0x1c, 0x22, 0x20, 0x53,
- 0xd8, 0x2d, 0x99, 0x88, 0xab, 0x13, 0xa4, 0x14, 0x0e, 0xa4, 0xa3, 0x58,
- 0x66, 0x92, 0x0e, 0xc7, 0x41, 0xd7, 0x38, 0x85, 0x01, 0x3b, 0x15, 0x9c,
- 0x19, 0xf2, 0x89, 0xc0, 0x88, 0x39, 0x00, 0x83, 0xa9, 0x72, 0x4a, 0x61,
- 0x1c, 0xe4, 0xfe, 0xc4, 0x38, 0x14, 0xae, 0x20, 0xeb, 0x93, 0x29, 0xd5,
- 0xb2, 0xc7, 0x41, 0xc1, 0x58, 0x97, 0x06, 0x5d, 0xe2, 0x5c, 0xee, 0x11,
- 0x6f, 0x69, 0x03, 0xcf, 0x60, 0x9a, 0xcd, 0xbe, 0x1a, 0x71, 0x68, 0xa1,
- 0x2e, 0x57, 0xca, 0x33, 0x37, 0xeb, 0x26, 0xbb, 0x17, 0xb1, 0x2e, 0x90,
- 0xb3, 0x35, 0x29, 0xdb, 0xad, 0x30, 0x68, 0xb6, 0x88, 0x0e, 0xe1, 0xb2,
- 0x6d, 0x01, 0x1c, 0xef, 0x93, 0xe4, 0x87, 0xc4, 0xdf, 0x79, 0x93, 0x52,
- 0x51, 0xea, 0x02, 0x74, 0xa6, 0xcb, 0xb4, 0xe3, 0xd6, 0x01, 0x57, 0x33,
- 0x2b, 0x6d, 0x9f, 0x38, 0x99, 0x43, 0xbc, 0x0a, 0x35, 0x79, 0x15, 0xdc,
- 0xf1, 0x18, 0x39, 0x71, 0xf4, 0x0a, 0x6a, 0x3c, 0x49, 0x64, 0xdf, 0x17,
- 0x05, 0xe6, 0x3e, 0x18, 0xa2, 0x09, 0x01, 0xfd, 0x21, 0x65, 0xaa, 0xd7,
- 0xc4, 0x04, 0xef, 0xb3, 0x70, 0x16, 0x75, 0xfe, 0x84, 0x21, 0x69, 0x1d,
- 0x1d, 0x99, 0x9d, 0x2b, 0x86, 0xcb, 0x7b, 0xfe, 0x7e, 0x1b, 0x8b, 0x51,
- 0x0f, 0x64, 0x2b, 0x45, 0x84, 0x37, 0x7c, 0x19, 0xdf, 0x56, 0xa4, 0x0c,
- 0xd0, 0xc5, 0x39, 0xe2, 0xce, 0x4b, 0xbb, 0x38, 0x95, 0x51, 0x1d, 0x44,
- 0x12, 0x0b, 0xc9, 0xb6, 0x2c, 0x1d, 0x53, 0x3d, 0x2b, 0x8b, 0x19, 0xd5,
- 0x04, 0x24, 0xf3, 0xae, 0x06, 0x7c, 0x04, 0x34, 0x0b, 0x51, 0x63, 0x70,
- 0x40, 0x74, 0xd7, 0x73, 0xe0, 0x51, 0x6d, 0x1b, 0x5b, 0xc4, 0x6f, 0x99,
- 0xf7, 0x7a, 0xac, 0x6d, 0x69, 0x04, 0xd9, 0xba, 0xbc, 0x4d, 0x46, 0xd0,
- 0x51, 0xba, 0x1d, 0xc3, 0x6a, 0x6b, 0xf8, 0x7a, 0x67, 0x1d, 0xf6, 0xb5,
- 0xac, 0x21, 0x59, 0xdb, 0xf8, 0xf4, 0x21, 0x0d, 0x2e, 0x7f, 0xb9, 0xf5,
- 0x6c, 0x1d, 0xe1, 0xea, 0xa3, 0x6f, 0x31, 0x4e, 0x2e, 0x29, 0x62, 0x0a,
- 0x99, 0xe3, 0x8b, 0xae, 0x21, 0x67, 0xe7, 0xbc, 0xfd, 0x99, 0x37, 0x0a,
- 0x23, 0xd6, 0xe4, 0xcb, 0x38, 0xe0, 0x89, 0x93, 0x43, 0xd7, 0xc0, 0x27,
- 0xa9, 0x18, 0xc2, 0x4f, 0xe9, 0x98, 0xda, 0x10, 0xaf, 0x9a, 0x9e, 0x3e,
- 0xb1, 0x98, 0x04, 0xc3, 0xdf, 0x62, 0x6b, 0x39, 0x3b, 0x66, 0x1c, 0xf8,
- 0x18, 0x58, 0x14, 0xc8, 0xe2, 0x5c, 0x63, 0x95, 0xcc, 0xb5, 0x8c, 0x64,
- 0xae, 0xac, 0x93, 0xfc, 0x67, 0x41, 0xa8, 0x9f, 0xa1, 0xc1, 0xbb, 0xb3,
- 0x6f, 0x99, 0x40, 0x4e, 0x38, 0x1c, 0x46, 0xd2, 0x90, 0xae, 0x0d, 0xc9,
- 0x8d, 0xc3, 0x21, 0x27, 0x2e, 0x0e, 0x20, 0x17, 0xb7, 0xaa, 0x5c, 0x63,
- 0x31, 0x9e, 0x14, 0x38, 0xcf, 0x18, 0x25, 0x3f, 0xd6, 0xc0, 0x96, 0xb6,
- 0x00, 0x0d, 0x85, 0x04, 0x6b, 0x15, 0xa8, 0x23, 0x35, 0xf1, 0x96, 0xc9,
- 0xb5, 0xcd, 0xae, 0x11, 0xe0, 0x17, 0x37, 0x72, 0x0d, 0xee, 0x16, 0xf9,
- 0xb2, 0xcd, 0xbb, 0xd2, 0xc8, 0xa4, 0x8c, 0xa5, 0x30, 0x7c, 0x8c, 0x05,
- 0xb8, 0x03, 0xa7, 0xd0, 0xc5, 0x00, 0x34, 0x76, 0xb3, 0xc4, 0x3a, 0x22,
- 0x45, 0xcf, 0x11, 0xb4, 0x44, 0x62, 0x6d, 0x9c, 0x20, 0x16, 0x20, 0x11,
- 0x2d, 0xff, 0xca, 0x39, 0x66, 0x25, 0xa3, 0xd3, 0xd3, 0x9a, 0xb8, 0x4e,
- 0x2e, 0x77, 0x3a, 0x2a, 0xae, 0x71, 0x5a, 0x54, 0xd3, 0xd2, 0x05, 0x83,
- 0xba, 0x29, 0xd0, 0x00, 0xc0, 0x6e, 0x6d, 0xcd, 0xe3, 0x13, 0xb4, 0xff,
- 0x21, 0x2c, 0x4f, 0xcf, 0xc9, 0xab, 0x53, 0xe3, 0x2d, 0x81, 0x08, 0xb6,
- 0xa6, 0x71, 0xdc, 0xd5, 0x26, 0x47, 0x29, 0xe6, 0x55, 0x9b, 0x86, 0x14,
- 0xda, 0x2a, 0xca, 0x75, 0x23, 0xc8, 0x30, 0xc7, 0xf8, 0xc2, 0x29, 0x4e,
- 0xd1, 0xef, 0x63, 0x2e, 0x57, 0x8b, 0x41, 0x48, 0x9b, 0x77, 0x69, 0xb5,
- 0xe5, 0xa4, 0x49, 0x11, 0xa9, 0x7d, 0xd1, 0xe2, 0xed, 0x15, 0xd3, 0x8e,
- 0x1d, 0x06, 0x7a, 0x15, 0x9c, 0x28, 0x69, 0x5e, 0x78, 0x10, 0x72, 0x28,
- 0x2d, 0x1b, 0x84, 0x79, 0x98, 0x4a, 0xd5, 0xde, 0x9c, 0x6f, 0x72, 0xfe,
- 0xe1, 0xe8, 0xcd, 0xeb, 0x97, 0xaf, 0xbf, 0x3f, 0x40, 0x8e, 0x98, 0x16,
- 0x43, 0x34, 0x1d, 0x46, 0xbf, 0x2e, 0x46, 0xd9, 0x90, 0x6e, 0x0e, 0x76,
- 0xb4, 0x8c, 0xeb, 0xe0, 0x89, 0xa9, 0xc4, 0x50, 0x51, 0x91, 0xd6, 0x66,
- 0x73, 0x9c, 0xf9, 0x8f, 0xd8, 0x8f, 0x45, 0x7e, 0xb9, 0x30, 0x14, 0x34,
- 0x24, 0xfb, 0x17, 0x85, 0xcd, 0x51, 0xa8, 0x37, 0xa9, 0x1e, 0x74, 0x10,
- 0xf1, 0xd4, 0xc2, 0xc9, 0x7c, 0x76, 0x7a, 0x8a, 0xf2, 0x51, 0x73, 0xa3,
- 0x69, 0x5e, 0xec, 0x72, 0xa3, 0xec, 0x3a, 0xcd, 0xf4, 0x46, 0x23, 0x13,
- 0xde, 0x40, 0xb5, 0x8b, 0x6f, 0x70, 0x67, 0x90, 0x07, 0x28, 0x1d, 0x76,
- 0x1a, 0x30, 0x9e, 0x11, 0xe4, 0x48, 0x51, 0xc1, 0x2d, 0x99, 0x8f, 0x2b,
- 0x34, 0xc3, 0x2d, 0x17, 0x9f, 0x3c, 0xde, 0xd7, 0x22, 0x4d, 0x89, 0x38,
- 0x05, 0xe4, 0xe1, 0x6b, 0x76, 0xab, 0x90, 0xe2, 0xfc, 0x4e, 0xd6, 0x94,
- 0xaf, 0xce, 0xfe, 0x1c, 0xba, 0x01, 0xb6, 0x89, 0xdd, 0xb4, 0x5e, 0x03,
- 0x67, 0xdd, 0x3a, 0x5f, 0xae, 0x49, 0xc0, 0xf6, 0x63, 0x44, 0x8a, 0x5b,
- 0x86, 0x43, 0xc5, 0xf1, 0xb5, 0xf5, 0x72, 0xc8, 0x12, 0xa8, 0x8e, 0xce,
- 0x2c, 0x14, 0x94, 0xd9, 0x46, 0x42, 0xa6, 0x11, 0x0a, 0x4e, 0xf7, 0x34,
- 0x69, 0x90, 0x66, 0xc5, 0x4a, 0x5e, 0xa2, 0x0a, 0x5d, 0xbf, 0x2e, 0x6e,
- 0xd2, 0x42, 0xc4, 0x0d, 0x53, 0x92, 0x02, 0xa4, 0x8e, 0x5e, 0xd4, 0xcf,
- 0x25, 0xfb, 0xb1, 0x29, 0x64, 0x61, 0x71, 0x15, 0xb7, 0x5e, 0x30, 0x11,
- 0x0e, 0x8d, 0xc5, 0x66, 0x5f, 0xa2, 0x44, 0xc4, 0x91, 0xc2, 0xab, 0x26,
- 0x8b, 0xfb, 0x3b, 0x48, 0x8d, 0x12, 0x70, 0xa7, 0x11, 0xa0, 0x78, 0x30,
- 0x3a, 0x31, 0xac, 0x63, 0x07, 0x69, 0xcd, 0xdd, 0xc7, 0xe0, 0x06, 0x06,
- 0x88, 0x4a, 0x3b, 0x5c, 0x2a, 0x9f, 0xaf, 0x9f, 0x26, 0xd2, 0x68, 0x7d,
- 0x6d, 0x51, 0xbd, 0x31, 0xb8, 0x80, 0x4b, 0x19, 0xc8, 0x6a, 0xb7, 0xe5,
- 0xf3, 0xbd, 0x07, 0xd1, 0x5b, 0xf3, 0xab, 0x26, 0x4f, 0x29, 0x10, 0x57,
- 0x4d, 0xf3, 0x74, 0x08, 0xa2, 0x97, 0xfd, 0x6f, 0x4e, 0x4c, 0x0c, 0x85,
- 0xa2, 0x3a, 0xf1, 0xf5, 0xf4, 0xd5, 0x4d, 0x8a, 0xe6, 0xec, 0xe6, 0xda,
- 0x6d, 0x9e, 0x71, 0xc5, 0x72, 0x79, 0xc8, 0x2d, 0x3c, 0xe3, 0xbe, 0x2c,
- 0x97, 0x72, 0xd7, 0x7a, 0x8a, 0x19, 0x71, 0xad, 0xf2, 0x40, 0x7c, 0xc7,
- 0x7e, 0x1a, 0x84, 0xbd, 0xb9, 0x8d, 0x50, 0x10, 0xba, 0xbe, 0xfd, 0xc0,
- 0x14, 0x41, 0x5f, 0x0b, 0xd1, 0xb4, 0x0d, 0xc4, 0xd0, 0xa6, 0x28, 0x6e,
- 0x5c, 0x91, 0xd9, 0x6a, 0x51, 0xec, 0xa4, 0x1a, 0x70, 0x9d, 0x9f, 0x40,
- 0x73, 0x02, 0x75, 0x6a, 0xe2, 0x34, 0xc3, 0x63, 0x51, 0xd1, 0x25, 0x9b,
- 0x5d, 0xe7, 0xf4, 0x8d, 0x98, 0x24, 0x03, 0xc9, 0x64, 0x4e, 0x36, 0x79,
- 0x21, 0x09, 0x54, 0x4b, 0x64, 0x8b, 0x8b, 0xc6, 0x4a, 0xab, 0x07, 0x5e,
- 0x11, 0x68, 0x60, 0x7e, 0x1a, 0x7a, 0x6b, 0x01, 0x83, 0x2d, 0x46, 0x70,
- 0x93, 0x3c, 0xc4, 0x04, 0x0b, 0x47, 0xba, 0x4b, 0x97, 0xfb, 0x15, 0xbd,
- 0x9c, 0x4e, 0xd0, 0xa1, 0xe6, 0x20, 0x08, 0xab, 0x08, 0x22, 0x12, 0x48,
- 0x56, 0xb5, 0x58, 0x42, 0x1c, 0xd9, 0xc2, 0x60, 0xe1, 0x99, 0xf5, 0xb7,
- 0xbe, 0x3d, 0xcc, 0x06, 0x67, 0x85, 0x19, 0x0d, 0xad, 0xc3, 0xab, 0x3c,
- 0x97, 0xd4, 0xd2, 0xb6, 0xab, 0x37, 0x22, 0xb9, 0x9d, 0xcb, 0x4b, 0x05,
- 0xae, 0x15, 0x2d, 0x02, 0x6e, 0xb5, 0x2b, 0xdc, 0xe0, 0x91, 0x07, 0xd3,
- 0x92, 0x59, 0xd5, 0xd5, 0xac, 0x7a, 0x43, 0x7e, 0x95, 0xd1, 0x94, 0x46,
- 0xe2, 0xd5, 0xab, 0x36, 0x94, 0x51, 0x0c, 0xbc, 0x91, 0x85, 0xb9, 0xf0,
- 0xf2, 0x48, 0x56, 0xba, 0xbb, 0x28, 0x41, 0xd1, 0x87, 0x33, 0x1b, 0x88,
- 0xaf, 0x1a, 0x4b, 0xc8, 0x88, 0xfc, 0x36, 0xb3, 0x7a, 0xb0, 0x25, 0x8d,
- 0x35, 0xab, 0x88, 0xcb, 0xfd, 0x7e, 0x6f, 0xa7, 0xed, 0xca, 0xc7, 0x86,
- 0x14, 0x14, 0x7b, 0x9e, 0x14, 0x26, 0xfa, 0x54, 0x84, 0x22, 0x5b, 0xda,
- 0x09, 0x25, 0x0a, 0xc4, 0x67, 0x64, 0x1f, 0x29, 0xfc, 0x68, 0x5b, 0xff,
- 0xb0, 0x63, 0x0e, 0xc5, 0x29, 0x56, 0x43, 0x1c, 0x5c, 0xe0, 0x92, 0xbd,
- 0x72, 0xcc, 0x8e, 0x25, 0xcb, 0xdb, 0xda, 0x6f, 0xe9, 0x22, 0xf3, 0x0f,
- 0x15, 0x9a, 0x4a, 0x03, 0xe5, 0x85, 0xdc, 0xab, 0xec, 0xc3, 0xab, 0x0b,
- 0xb5, 0x09, 0x00, 0xad, 0xf7, 0x3f, 0xb1, 0xd3, 0x65, 0x50, 0xa1, 0x0d,
- 0x7e, 0x4f, 0xe0, 0xa0, 0xf6, 0xec, 0x2a, 0x68, 0xe8, 0x9f, 0xbb, 0xce,
- 0xb3, 0xcd, 0x89, 0x87, 0xe4, 0x96, 0xf8, 0x8d, 0xc3, 0xd3, 0x71, 0x8e,
- 0x41, 0x38, 0x72, 0x66, 0xb0, 0x8e, 0x17, 0xdd, 0x31, 0x69, 0x58, 0x19,
- 0x9a, 0x9c, 0xab, 0x69, 0xc4, 0x9e, 0x1d, 0xbe, 0x25, 0x7d, 0xff, 0x21,
- 0x4c, 0x3b, 0xc0, 0xc5, 0xbb, 0xca, 0x00, 0x34, 0x9d, 0xcd, 0xc0, 0x2b,
- 0x70, 0x57, 0x0c, 0x77, 0x97, 0x7b, 0xf0, 0x2c, 0x7a, 0xb9, 0xb0, 0x37,
- 0x14, 0x5e, 0xa5, 0xa4, 0x7f, 0xda, 0x2b, 0xec, 0x69, 0x79, 0x16, 0xa8,
- 0x33, 0xeb, 0x8f, 0x9f, 0x05, 0xea, 0x34, 0xfe, 0xc0, 0xab, 0x9d, 0xc6,
- 0x05, 0x92, 0xcb, 0x38, 0xcf, 0xd7, 0x33, 0x1c, 0x34, 0xaf, 0x69, 0xb6,
- 0x1c, 0xfc, 0x86, 0x9f, 0xd2, 0x9e, 0xa0, 0x9d, 0xbd, 0x29, 0x45, 0x5e,
- 0xa7, 0x71, 0x3e, 0x8b, 0x43, 0x20, 0x2b, 0x3f, 0x98, 0xd4, 0x5c, 0x0d,
- 0xf1, 0xb4, 0x5a, 0x1c, 0xe9, 0x5e, 0xe2, 0xe8, 0xc0, 0xdb, 0x4e, 0xef,
- 0x7e, 0xd4, 0x1a, 0x35, 0xfa, 0x26, 0x70, 0xce, 0x95, 0x94, 0xf4, 0x20,
- 0xdb, 0x98, 0x41, 0xda, 0xc1, 0x6b, 0xd1, 0xe8, 0xf5, 0x62, 0x03, 0x56,
- 0x47, 0xa6, 0x75, 0x12, 0x68, 0x03, 0x3e, 0x8d, 0x14, 0x33, 0x94, 0x69,
- 0x84, 0x74, 0xf5, 0x4c, 0x52, 0xbe, 0x97, 0x6c, 0x34, 0x91, 0xa0, 0x4b,
- 0x19, 0x70, 0x0e, 0x4a, 0x10, 0x99, 0x61, 0xe8, 0xa3, 0x0f, 0x04, 0x51,
- 0x44, 0xa3, 0x45, 0xe1, 0x3a, 0x0e, 0xda, 0x54, 0x6e, 0x9d, 0xaa, 0x94,
- 0xcc, 0x93, 0x89, 0xdd, 0x5f, 0x13, 0xf5, 0x48, 0xd1, 0xd9, 0x82, 0x8f,
- 0x5b, 0xd5, 0xaa, 0xd1, 0xf8, 0x43, 0xc8, 0xd1, 0x1d, 0x1b, 0x90, 0xa4,
- 0xa6, 0x62, 0xaf, 0x43, 0x95, 0x63, 0xa4, 0x3f, 0x4c, 0xfe, 0xaa, 0xdb,
- 0xf4, 0x1b, 0x70, 0xe3, 0xe2, 0xe0, 0x8a, 0x25, 0x40, 0xf6, 0x10, 0x05,
- 0xba, 0x16, 0xe3, 0xb1, 0x5f, 0xdd, 0x85, 0x0c, 0xc0, 0x64, 0xec, 0x27,
- 0xd0, 0xb1, 0x0e, 0x37, 0xd2, 0x89, 0x36, 0xb1, 0x95, 0x2d, 0x63, 0x81,
- 0xf2, 0xab, 0x3b, 0x08, 0x0a, 0x89, 0x64, 0xcf, 0x27, 0xac, 0xe1, 0x34,
- 0x91, 0x52, 0xc8, 0x00, 0x75, 0x8e, 0x24, 0x35, 0x5c, 0x4c, 0x92, 0x62,
- 0x42, 0x17, 0xd2, 0x78, 0xd1, 0x24, 0x70, 0x3a, 0x14, 0x28, 0x88, 0x48,
- 0x94, 0x7d, 0x56, 0x96, 0x0b, 0x31, 0x5e, 0x1b, 0x17, 0x20, 0x6d, 0x0e,
- 0xf2, 0x49, 0x24, 0x56, 0xa6, 0x81, 0x72, 0x82, 0xd9, 0x94, 0x6d, 0xd7,
- 0x2c, 0x47, 0x2a, 0x8a, 0xdd, 0xc6, 0xd4, 0x58, 0x60, 0x13, 0xb1, 0xf0,
- 0xd2, 0x4b, 0x1c, 0x14, 0xdd, 0xc7, 0x73, 0xe4, 0xc9, 0xc5, 0xac, 0x4b,
- 0xc2, 0x76, 0xa3, 0xb9, 0xce, 0xd9, 0xf9, 0xc5, 0xcb, 0xb3, 0xd7, 0xfd,
- 0xe8, 0x0f, 0x9d, 0x36, 0x8b, 0x6e, 0x6d, 0x03, 0x3e, 0x6b, 0x45, 0xaf,
- 0xc6, 0x58, 0x3a, 0x7f, 0xe8, 0x44, 0xf1, 0x8f, 0x91, 0xce, 0x60, 0x2d,
- 0xea, 0xab, 0x45, 0xd2, 0xd6, 0x10, 0x1b, 0x1f, 0xd7, 0x08, 0xd0, 0x7d,
- 0x2e, 0x3a, 0x9c, 0xa6, 0xb0, 0x4d, 0xa3, 0x36, 0xe7, 0x85, 0x63, 0x6c,
- 0x1b, 0x82, 0xaa, 0x09, 0xac, 0x47, 0x5f, 0xe4, 0xf7, 0x94, 0x2c, 0x19,
- 0xdc, 0xc0, 0x14, 0x16, 0xf2, 0x23, 0x2d, 0x9c, 0xba, 0x51, 0xae, 0x93,
- 0x83, 0x04, 0x70, 0x6b, 0x0c, 0x6c, 0x34, 0x2e, 0x5e, 0xe3, 0xa0, 0x87,
- 0xb0, 0x61, 0x6c, 0xa5, 0x6d, 0x92, 0xd7, 0x6c, 0xe4, 0x19, 0x3d, 0xb8,
- 0xc9, 0xf2, 0xac, 0x58, 0x04, 0x4a, 0xdf, 0x79, 0xf1, 0xfd, 0xc9, 0xc5,
- 0x96, 0xc0, 0x6b, 0x9b, 0xf1, 0x51, 0x04, 0x94, 0xa8, 0xe8, 0x89, 0x31,
- 0x21, 0x28, 0xa0, 0x36, 0x8b, 0x22, 0xe9, 0xed, 0x7c, 0x92, 0xcc, 0x82,
- 0xa0, 0x94, 0x98, 0xb9, 0x77, 0x0c, 0xcb, 0x81, 0x96, 0xc4, 0x64, 0xc4,
- 0x92, 0xb2, 0xba, 0xe7, 0xcc, 0x11, 0xd1, 0xda, 0xb3, 0xe7, 0x6f, 0x2f,
- 0xa8, 0x41, 0x8c, 0x9e, 0xbe, 0x38, 0x69, 0x86, 0x45, 0x21, 0xd4, 0x68,
- 0x91, 0x4e, 0x28, 0xd0, 0xb9, 0x4a, 0x87, 0x57, 0xb3, 0x1c, 0x5d, 0xb4,
- 0x69, 0xc9, 0x7a, 0xe6, 0x0f, 0xe9, 0xe0, 0xd9, 0xd1, 0xdf, 0x50, 0xf3,
- 0x43, 0xaf, 0xfd, 0xf9, 0x9b, 0xb3, 0xf3, 0xe7, 0x2f, 0x5f, 0x3f, 0xeb,
- 0x46, 0xc7, 0x67, 0xe7, 0x7f, 0xef, 0x46, 0xaf, 0xce, 0xfe, 0x76, 0xf2,
- 0x85, 0x97, 0xf4, 0x43, 0xae, 0x69, 0x8f, 0x50, 0x5f, 0xa3, 0x33, 0x0a,
- 0x4d, 0x57, 0x0c, 0x9f, 0x3d, 0xca, 0x49, 0x83, 0x89, 0x66, 0x1c, 0x2b,
- 0xec, 0x08, 0xf8, 0x47, 0x6e, 0xb2, 0x06, 0xac, 0x5d, 0x37, 0x7a, 0x71,
- 0x72, 0xf4, 0xac, 0x39, 0xec, 0xf3, 0xb3, 0x3e, 0xcf, 0x0a, 0x67, 0x67,
- 0xa6, 0x8c, 0xd1, 0x11, 0x62, 0x21, 0x24, 0x5d, 0x8e, 0xa3, 0xb3, 0x99,
- 0x35, 0x01, 0xbd, 0x66, 0x1c, 0xcf, 0xdd, 0x92, 0xc0, 0xc8, 0xf5, 0x3f,
- 0x79, 0x18, 0x2d, 0x59, 0xa5, 0xc6, 0xe4, 0xcf, 0x15, 0x70, 0x5d, 0x8b,
- 0x90, 0xd4, 0xa6, 0x25, 0xbc, 0x28, 0x55, 0x6a, 0xcc, 0x76, 0xb7, 0x44,
- 0xf3, 0x74, 0x6b, 0xf5, 0x5e, 0x88, 0xf1, 0x72, 0x44, 0x5a, 0x22, 0x21,
- 0xe5, 0x83, 0x14, 0x65, 0xed, 0x92, 0x4c, 0x40, 0x64, 0x13, 0x12, 0x4c,
- 0xa1, 0xa0, 0x0b, 0xca, 0xda, 0x83, 0x48, 0xe0, 0x4b, 0xb4, 0x66, 0x2d,
- 0x2e, 0x9f, 0x2e, 0x51, 0x57, 0x16, 0x03, 0x98, 0x00, 0x7d, 0xac, 0x9a,
- 0x8f, 0x87, 0xef, 0x3e, 0x06, 0xc2, 0x4c, 0xb9, 0xf6, 0x30, 0x6f, 0x91,
- 0xf1, 0x61, 0x88, 0xf7, 0xa4, 0x0d, 0x3d, 0x8b, 0x92, 0x81, 0xf8, 0xa0,
- 0x88, 0x1f, 0x8d, 0xea, 0xe3, 0xaa, 0x37, 0xd1, 0xb2, 0x06, 0x65, 0x6b,
- 0x72, 0xdc, 0x18, 0x1a, 0xd3, 0x33, 0x4a, 0xe9, 0xd6, 0x76, 0xa5, 0x4c,
- 0x91, 0xe2, 0x80, 0xb9, 0xab, 0xc1, 0x6a, 0xb8, 0x71, 0x35, 0xa2, 0xa2,
- 0xc3, 0x31, 0xaa, 0xbe, 0x37, 0x19, 0x3d, 0xd9, 0x14, 0x1b, 0x87, 0x31,
- 0xee, 0x31, 0xcb, 0x01, 0x2e, 0x76, 0x8a, 0xd9, 0x0c, 0x35, 0x1c, 0xe8,
- 0x68, 0x65, 0x4e, 0x5e, 0x1a, 0xed, 0x10, 0xf6, 0x5b, 0xae, 0x29, 0xb3,
- 0xdb, 0xfb, 0x3b, 0xb7, 0x36, 0xe2, 0x12, 0x15, 0xbb, 0x32, 0x8a, 0x39,
- 0x27, 0x8d, 0x31, 0x38, 0x83, 0xd9, 0xfe, 0x41, 0x6e, 0xe8, 0x46, 0xf0,
- 0x99, 0xe2, 0x01, 0x06, 0x97, 0xe8, 0xf4, 0x25, 0x9c, 0x81, 0x40, 0x00,
- 0xd3, 0x28, 0xc7, 0x11, 0x71, 0xd6, 0x1a, 0xa9, 0xb8, 0xb4, 0xf2, 0xd0,
- 0x96, 0xdf, 0xf1, 0xf9, 0xd9, 0xf9, 0x7e, 0xb0, 0x67, 0xfc, 0x62, 0x55,
- 0xd7, 0xde, 0x4d, 0xfb, 0xe6, 0xe4, 0xe2, 0x8d, 0xdf, 0xc7, 0xcb, 0x57,
- 0x47, 0xe8, 0x33, 0xb3, 0x9d, 0xd8, 0x5e, 0xf0, 0xab, 0x15, 0xbd, 0x78,
- 0x36, 0x2d, 0xb7, 0x8c, 0xea, 0x4e, 0x20, 0xbb, 0x6a, 0xb3, 0xff, 0xaa,
- 0x65, 0x35, 0xf1, 0x8b, 0x25, 0xbd, 0xbd, 0x38, 0x39, 0x3d, 0xf7, 0xe7,
- 0xf4, 0xb7, 0x37, 0xcf, 0xff, 0x5e, 0xcf, 0xe9, 0xda, 0x7f, 0x14, 0xe8,
- 0x55, 0x82, 0x54, 0x84, 0x5a, 0x3e, 0x1e, 0x1a, 0xc8, 0x7a, 0xbe, 0xdc,
- 0x1f, 0x39, 0x47, 0xe6, 0xe2, 0x64, 0x0d, 0xb7, 0xed, 0x8f, 0xd1, 0xeb,
- 0x53, 0xd8, 0xcc, 0xb5, 0x80, 0x43, 0xea, 0x62, 0x45, 0x5d, 0xfa, 0x2c,
- 0xf3, 0x09, 0x48, 0x8e, 0x87, 0x3f, 0xfd, 0x91, 0x90, 0x52, 0x09, 0x9c,
- 0xec, 0x00, 0xee, 0xa8, 0xe2, 0xa7, 0x2e, 0xfe, 0xfb, 0x4b, 0xaf, 0xd7,
- 0xfb, 0x26, 0x28, 0xc7, 0xa7, 0x76, 0xa3, 0xf0, 0x41, 0x4c, 0xfa, 0x6e,
- 0x98, 0xb2, 0x09, 0xa8, 0x8e, 0x80, 0xf9, 0x30, 0xd2, 0x76, 0x9e, 0x64,
- 0xe8, 0xfa, 0x7a, 0x5b, 0x86, 0xa4, 0x01, 0xba, 0x52, 0x2c, 0xb0, 0xa2,
- 0xd1, 0x80, 0x45, 0x0b, 0x63, 0x9e, 0xb2, 0x59, 0x6e, 0x09, 0x8a, 0xb3,
- 0x15, 0x11, 0x02, 0x76, 0x28, 0x1a, 0x0a, 0x75, 0xcb, 0x9a, 0x12, 0xeb,
- 0x2e, 0x46, 0x08, 0x98, 0xe9, 0xc5, 0x26, 0x53, 0x1f, 0x99, 0xe1, 0x07,
- 0x41, 0x45, 0x68, 0x5b, 0xf1, 0xf6, 0xe6, 0x34, 0x1b, 0x0a, 0x5f, 0x4b,
- 0xe8, 0xc2, 0x43, 0x1a, 0xdc, 0x4e, 0xab, 0xe1, 0x36, 0xce, 0xb3, 0xac,
- 0xc9, 0xe1, 0x86, 0x98, 0x3c, 0x2f, 0x94, 0x0b, 0x30, 0x41, 0x80, 0xbd,
- 0x9c, 0x56, 0xe8, 0x60, 0x50, 0x59, 0xcc, 0x60, 0xc7, 0xb8, 0x63, 0x78,
- 0x6e, 0x08, 0xdf, 0xd2, 0x2c, 0xb8, 0x03, 0xf8, 0x69, 0x40, 0x54, 0x5d,
- 0x69, 0x14, 0x1b, 0x70, 0x50, 0x21, 0x7d, 0x4b, 0x11, 0x5d, 0x1d, 0x7a,
- 0x00, 0x30, 0x83, 0x0d, 0xcf, 0x63, 0xe6, 0x5a, 0x1a, 0x2d, 0x10, 0x92,
- 0xbb, 0xe9, 0x0a, 0x3e, 0x18, 0xa8, 0xf7, 0x48, 0x02, 0x8b, 0xb5, 0x05,
- 0xe3, 0x4c, 0xc3, 0x68, 0x1f, 0x0e, 0xaa, 0xf5, 0xc6, 0x1f, 0x36, 0x50,
- 0x1d, 0xa1, 0xd7, 0x83, 0x58, 0xda, 0x4a, 0xb5, 0x68, 0x0b, 0x0b, 0xa0,
- 0xc8, 0x12, 0xef, 0xd6, 0x45, 0x31, 0xc4, 0x67, 0x50, 0x1b, 0x1c, 0xe2,
- 0xa1, 0x29, 0x60, 0x78, 0xee, 0x64, 0x34, 0x4c, 0xb8, 0xfe, 0x80, 0x7f,
- 0xf7, 0x0b, 0x99, 0x08, 0x1b, 0xc8, 0xa9, 0x57, 0x7b, 0x72, 0x24, 0x89,
- 0xa2, 0x85, 0xea, 0xdb, 0x79, 0x05, 0xe7, 0x92, 0xb4, 0xe1, 0x3c, 0x4a,
- 0x68, 0xaa, 0xac, 0x31, 0xf2, 0x1e, 0xca, 0x15, 0x6c, 0xd4, 0x79, 0x77,
- 0xee, 0x63, 0x0a, 0x75, 0xf1, 0x05, 0x8d, 0x38, 0xce, 0xe6, 0xd7, 0x8f,
- 0xd8, 0x11, 0x04, 0xbf, 0x3d, 0xd1, 0x70, 0xc4, 0xca, 0x05, 0x4c, 0x61,
- 0x4d, 0x92, 0xf5, 0xae, 0x97, 0xe7, 0x9a, 0xac, 0x16, 0xda, 0x25, 0x86,
- 0x49, 0x51, 0x84, 0x48, 0x21, 0x30, 0x45, 0x92, 0xf1, 0x8f, 0x2f, 0x27,
- 0x41, 0x72, 0x0a, 0xb1, 0xe7, 0x9e, 0xb0, 0x78, 0x38, 0x1b, 0xa5, 0x71,
- 0xd0, 0xe1, 0xb3, 0xa8, 0x26, 0x6e, 0xee, 0x4a, 0xc0, 0xe8, 0x16, 0x41,
- 0x28, 0x57, 0xa9, 0xaa, 0x82, 0x6c, 0x46, 0x09, 0x2c, 0x2b, 0x8b, 0x78,
- 0xe2, 0x5e, 0x48, 0x67, 0x62, 0xb1, 0x9f, 0xe4, 0x30, 0xd6, 0x62, 0x31,
- 0xa3, 0xc4, 0x39, 0x13, 0x27, 0x6c, 0x42, 0x24, 0x75, 0xf4, 0x93, 0xdc,
- 0x77, 0x9e, 0xd0, 0x8d, 0x0c, 0xc4, 0xf1, 0x72, 0xc6, 0xf8, 0x9d, 0x68,
- 0x47, 0x29, 0x05, 0xe3, 0xa5, 0x96, 0x58, 0x48, 0x1b, 0x60, 0xa3, 0xa2,
- 0x69, 0xca, 0xb9, 0x1f, 0xbd, 0x49, 0xd4, 0xc2, 0x27, 0x96, 0x69, 0x84,
- 0x6c, 0xd9, 0x86, 0x1d, 0xdd, 0xd0, 0xb1, 0xcf, 0x25, 0x90, 0xd5, 0x2c,
- 0x04, 0x1a, 0x42, 0xfc, 0xd0, 0x91, 0x39, 0xa1, 0x72, 0x79, 0x1c, 0x5f,
- 0x92, 0x1a, 0x04, 0x2c, 0x5f, 0x8c, 0x2d, 0xd8, 0x1a, 0xec, 0xaa, 0xd2,
- 0x12, 0xce, 0x18, 0xee, 0xc5, 0x9f, 0x06, 0x45, 0x42, 0x70, 0xcd, 0xbf,
- 0x50, 0x4c, 0x2c, 0x41, 0x1e, 0xfb, 0x01, 0xf1, 0xa0, 0x2d, 0xd6, 0x8a,
- 0x2d, 0x35, 0x3a, 0x6a, 0xf4, 0x64, 0x6c, 0x38, 0xb6, 0xbb, 0x94, 0xa3,
- 0x7f, 0x99, 0x10, 0x96, 0x77, 0xf4, 0xd5, 0x92, 0x8e, 0xc6, 0x54, 0xd9,
- 0x10, 0x97, 0xd0, 0xe8, 0x8e, 0x37, 0x7a, 0x66, 0x4d, 0xab, 0x52, 0x65,
- 0xe6, 0xd1, 0x8a, 0x76, 0x28, 0x91, 0x07, 0xa8, 0x55, 0x20, 0x7f, 0xf0,
- 0xf5, 0x46, 0x13, 0x4f, 0x1f, 0xf7, 0x76, 0xee, 0x0f, 0x53, 0x63, 0x0d,
- 0xf2, 0xe8, 0x00, 0x1c, 0xc9, 0x27, 0xb4, 0xc5, 0x92, 0x7d, 0x9d, 0xb7,
- 0x31, 0x95, 0xa0, 0x55, 0x9e, 0x09, 0xe5, 0x93, 0x59, 0xe4, 0x4d, 0x0f,
- 0x8e, 0xec, 0x70, 0xf0, 0xe8, 0xd1, 0xfe, 0xc1, 0xee, 0x1e, 0x6e, 0xf5,
- 0x0e, 0x68, 0xba, 0xeb, 0x05, 0x44, 0x2a, 0x0e, 0x21, 0xce, 0x9e, 0xa2,
- 0x59, 0xe1, 0x26, 0x8c, 0xcb, 0xeb, 0x61, 0x5d, 0xcc, 0xc0, 0x00, 0x57,
- 0xa0, 0x73, 0xb6, 0xa8, 0x35, 0x6d, 0x9a, 0x6f, 0x28, 0xe2, 0x18, 0x1d,
- 0x1c, 0xb0, 0x72, 0x6c, 0xb2, 0x6b, 0x66, 0xef, 0x4a, 0xb2, 0x2a, 0x88,
- 0x2f, 0xc8, 0xa5, 0x8c, 0x6e, 0x52, 0x15, 0x77, 0xbd, 0x95, 0xd5, 0xa8,
- 0x28, 0xdc, 0xb2, 0x9c, 0xa4, 0xa3, 0x4b, 0xd0, 0xcf, 0xa6, 0xd3, 0xb4,
- 0xe8, 0xe0, 0xf1, 0xd6, 0x80, 0xe9, 0x5e, 0xf4, 0x8c, 0x83, 0x01, 0xd5,
- 0xdb, 0xd2, 0xe4, 0x04, 0xdc, 0xd0, 0xe0, 0xce, 0x30, 0xa9, 0xcd, 0xf4,
- 0x92, 0x80, 0xf8, 0x61, 0x3d, 0x8b, 0xe1, 0x56, 0x97, 0xe1, 0xa4, 0x4d,
- 0x56, 0xed, 0xcc, 0x28, 0x2d, 0x98, 0x9b, 0x1b, 0x0e, 0x0b, 0x47, 0xa9,
- 0x5a, 0x41, 0x81, 0x83, 0xc5, 0x3b, 0x47, 0x8b, 0xf9, 0x84, 0x2b, 0x8d,
- 0x72, 0xee, 0xae, 0x1d, 0x62, 0x28, 0x72, 0x13, 0x98, 0x01, 0xf9, 0x46,
- 0x89, 0x80, 0xd1, 0x4e, 0x89, 0x09, 0x77, 0x64, 0xb1, 0x24, 0x95, 0x70,
- 0x83, 0xc4, 0x89, 0x29, 0xf6, 0x37, 0x48, 0xd1, 0x52, 0x46, 0xbe, 0x61,
- 0x34, 0xf8, 0x7b, 0x0a, 0xd7, 0x88, 0x2a, 0x39, 0x33, 0xca, 0x21, 0xcc,
- 0x04, 0x06, 0x8b, 0xe7, 0x7b, 0x30, 0xc1, 0xda, 0x10, 0x88, 0x75, 0x8c,
- 0x10, 0x46, 0x51, 0x39, 0x2c, 0xb2, 0x39, 0x34, 0x7d, 0x3e, 0x49, 0xd1,
- 0xb6, 0x5c, 0xa8, 0xa9, 0xc4, 0xe7, 0x53, 0xac, 0xf0, 0x11, 0x2a, 0x54,
- 0x7b, 0x7c, 0xcf, 0x73, 0xf4, 0xac, 0x6a, 0x30, 0xce, 0x74, 0x0e, 0x22,
- 0x94, 0x24, 0xfe, 0x79, 0xb0, 0x88, 0x1c, 0x99, 0x4e, 0x80, 0x5a, 0x7e,
- 0x24, 0xd1, 0x24, 0x79, 0x7f, 0x17, 0x39, 0xac, 0x1d, 0xd7, 0x76, 0x38,
- 0x41, 0xe7, 0xa7, 0x93, 0x2a, 0x83, 0xad, 0x5c, 0xb1, 0x05, 0xf1, 0x8e,
- 0x03, 0x38, 0x24, 0x1b, 0x20, 0x64, 0x67, 0xa9, 0x5c, 0x60, 0x34, 0x6d,
- 0x20, 0xbc, 0xe0, 0x94, 0x7e, 0xab, 0x4b, 0x8e, 0x33, 0xf2, 0xb1, 0xe9,
- 0x70, 0x29, 0xba, 0x16, 0xc0, 0xcd, 0xc4, 0xeb, 0xe3, 0x2d, 0xa0, 0xfe,
- 0x00, 0x31, 0x33, 0x93, 0xed, 0x53, 0x0b, 0x45, 0x84, 0x26, 0xab, 0x76,
- 0x7e, 0x0b, 0xb2, 0x47, 0x61, 0x7e, 0xc8, 0xca, 0x24, 0xf8, 0x0c, 0x85,
- 0x59, 0xb4, 0xf8, 0x4b, 0x8b, 0x02, 0x7e, 0x13, 0xbd, 0xc8, 0x6f, 0x90,
- 0x99, 0x84, 0xfc, 0xe4, 0x8a, 0xe7, 0x5d, 0x2c, 0x52, 0xc1, 0xdd, 0x48,
- 0xdc, 0x79, 0x52, 0x74, 0xc3, 0xff, 0xc0, 0xcd, 0x33, 0x27, 0x18, 0x89,
- 0x6f, 0xc4, 0xfc, 0x1f, 0x2a, 0x46, 0x8c, 0x66, 0x1d, 0x86, 0x8f, 0x04,
- 0x51, 0x03, 0xa4, 0x2b, 0x0a, 0x3c, 0x84, 0x8b, 0x98, 0xf2, 0xee, 0x2e,
- 0x2f, 0x53, 0x11, 0xeb, 0x24, 0x06, 0x17, 0x27, 0x83, 0x1e, 0x6a, 0x5c,
- 0x41, 0x04, 0xcb, 0x2f, 0x46, 0x61, 0x18, 0x54, 0x42, 0xee, 0x37, 0x23,
- 0xa2, 0x03, 0x98, 0x4f, 0x07, 0x1a, 0xa1, 0xd7, 0x2c, 0x76, 0xd2, 0x95,
- 0xa4, 0x10, 0x5f, 0xc8, 0xc5, 0x73, 0xca, 0x07, 0x2d, 0x6d, 0x1e, 0xb3,
- 0x80, 0xc4, 0xa3, 0x67, 0xde, 0xde, 0xef, 0x54, 0xb8, 0x84, 0xfc, 0x02,
- 0xb9, 0xc5, 0xd1, 0xad, 0xd9, 0x0f, 0xc4, 0xa7, 0xe7, 0x1f, 0x2e, 0xea,
- 0xaa, 0x34, 0x2f, 0x51, 0x2b, 0x06, 0x35, 0xae, 0x9e, 0xa3, 0x62, 0xf0,
- 0x09, 0x7b, 0x74, 0x3e, 0x90, 0x7e, 0x3c, 0x21, 0x60, 0xc2, 0x90, 0x73,
- 0x89, 0x05, 0x9c, 0x83, 0xd9, 0x40, 0xfb, 0x8f, 0x76, 0x1e, 0xa1, 0xcc,
- 0x04, 0x2f, 0x2e, 0x66, 0x23, 0x83, 0xd9, 0x2c, 0x49, 0xbf, 0x14, 0xbc,
- 0x00, 0xed, 0x4e, 0xee, 0x7c, 0x58, 0x3f, 0x5c, 0x13, 0x06, 0x24, 0x9c,
- 0xa9, 0xbc, 0xa5, 0xde, 0x9e, 0x99, 0xf2, 0x65, 0xf2, 0x8e, 0x09, 0xeb,
- 0xb5, 0x8c, 0xd9, 0xb7, 0x6a, 0xd8, 0x05, 0x2b, 0x94, 0xbb, 0x63, 0xdc,
- 0x5b, 0x60, 0xb9, 0x4a, 0x5d, 0x2f, 0x5e, 0x1f, 0x3e, 0xc3, 0xde, 0x7d,
- 0x99, 0x51, 0x28, 0x09, 0x23, 0x62, 0xf3, 0x25, 0xd2, 0x95, 0x43, 0x9a,
- 0x38, 0x46, 0x39, 0x35, 0xa2, 0x4e, 0xf1, 0xfa, 0x7d, 0x74, 0x6b, 0x0d,
- 0x3b, 0x5e, 0xbd, 0x6c, 0xec, 0x57, 0x59, 0x30, 0x2c, 0x58, 0x23, 0xa2,
- 0x22, 0xb7, 0xa3, 0xa6, 0x48, 0x31, 0x3b, 0x62, 0x7e, 0x35, 0x14, 0xad,
- 0xe0, 0xcc, 0xc0, 0x1d, 0x66, 0xb4, 0x89, 0xe3, 0xc0, 0x5d, 0x78, 0x7c,
- 0x7b, 0xbb, 0xc5, 0x8b, 0xcb, 0x94, 0x2b, 0xcc, 0x24, 0x1e, 0xfb, 0xc0,
- 0xd9, 0xe4, 0x36, 0x5a, 0x1e, 0xaa, 0x55, 0xbf, 0x51, 0x3f, 0xb6, 0x03,
- 0xad, 0xde, 0xfa, 0xfa, 0x7e, 0x0c, 0x5c, 0xbc, 0xc7, 0xa1, 0x71, 0xae,
- 0x27, 0x5c, 0xf0, 0x0d, 0xef, 0xba, 0x2f, 0x9e, 0xee, 0x36, 0xfd, 0x67,
- 0xd8, 0x01, 0x0a, 0x21, 0x20, 0xcf, 0x05, 0x52, 0x1b, 0x5e, 0x3a, 0x36,
- 0x77, 0x55, 0x01, 0x59, 0xd5, 0x41, 0xaf, 0x30, 0x7d, 0x8c, 0x75, 0x8e,
- 0x54, 0xbf, 0x3f, 0x41, 0xc4, 0xe6, 0x37, 0x27, 0xcf, 0xdf, 0xf6, 0x4f,
- 0x9e, 0x21, 0x69, 0x24, 0xa1, 0x3c, 0x4c, 0xa2, 0x45, 0xe6, 0x01, 0x55,
- 0xce, 0xa6, 0x5e, 0x33, 0x54, 0x57, 0x6e, 0xa1, 0xb3, 0xc6, 0xfa, 0x99,
- 0x8a, 0x2e, 0xa1, 0xeb, 0xbb, 0x4d, 0x90, 0x69, 0x38, 0x4c, 0x1b, 0xf3,
- 0xf4, 0x3d, 0xf8, 0x8d, 0x3d, 0x7f, 0x48, 0xbc, 0x67, 0xa3, 0x8f, 0x07,
- 0xed, 0x7b, 0x6d, 0x90, 0x4a, 0x0b, 0x0f, 0xd8, 0xf6, 0x5a, 0x72, 0x94,
- 0x43, 0x8b, 0xcb, 0x6a, 0xb6, 0x39, 0x99, 0x54, 0xd1, 0xa1, 0xe4, 0x0a,
- 0x36, 0xed, 0x57, 0xaf, 0x8c, 0xe2, 0x0b, 0x32, 0x61, 0x3a, 0x17, 0x64,
- 0xfb, 0x29, 0x30, 0x4b, 0x0e, 0xb7, 0x43, 0x75, 0x55, 0x6f, 0x69, 0x8a,
- 0xea, 0x54, 0xb9, 0x83, 0xec, 0xce, 0x61, 0x8a, 0x40, 0xbe, 0xcd, 0x01,
- 0x14, 0x7c, 0x5f, 0xab, 0x62, 0xd9, 0x24, 0x97, 0xcd, 0xac, 0x6a, 0x04,
- 0xa6, 0x7a, 0xbb, 0x44, 0xd7, 0x0d, 0x56, 0x32, 0x45, 0x19, 0x8d, 0x06,
- 0x93, 0x4c, 0x2e, 0x73, 0xb8, 0xd6, 0xaf, 0xa6, 0x06, 0x8c, 0x9f, 0xcb,
- 0x49, 0x95, 0x9c, 0x00, 0x5a, 0x97, 0x76, 0x83, 0x6a, 0x31, 0x65, 0x84,
- 0xa5, 0x02, 0xd7, 0x3a, 0x76, 0xd9, 0x37, 0x2d, 0x38, 0x1b, 0xb9, 0xfa,
- 0x52, 0xf5, 0x84, 0xd6, 0x83, 0x97, 0xd0, 0xd3, 0x63, 0x7f, 0x4b, 0x8b,
- 0xbc, 0x19, 0x10, 0xa3, 0x8e, 0x06, 0xbd, 0x2a, 0xdd, 0xb1, 0xb7, 0xb9,
- 0x5c, 0xed, 0x2e, 0x7d, 0x46, 0x8c, 0x18, 0x67, 0x14, 0x8f, 0x3f, 0x84,
- 0x50, 0x7d, 0x02, 0x9c, 0x26, 0xb7, 0x1c, 0xcd, 0xd2, 0x46, 0x83, 0x0c,
- 0x24, 0x95, 0xaa, 0x79, 0xa4, 0x60, 0xcb, 0x13, 0xd9, 0x79, 0x6c, 0x5a,
- 0x06, 0xa3, 0x8d, 0xd8, 0xcc, 0x6f, 0x96, 0x84, 0xd1, 0x37, 0xe9, 0xa7,
- 0x92, 0x50, 0x0d, 0x63, 0x59, 0x0c, 0x0a, 0x6f, 0x4b, 0xf0, 0x6a, 0x46,
- 0x17, 0xd7, 0x26, 0x62, 0xa6, 0xc9, 0xc0, 0xb6, 0xf0, 0x63, 0xb2, 0x89,
- 0x24, 0x0a, 0xa5, 0x48, 0xdd, 0x07, 0x42, 0x8b, 0x59, 0x36, 0x2b, 0xf0,
- 0x00, 0xa8, 0xcb, 0x8f, 0xe3, 0x19, 0x29, 0x7b, 0x91, 0x10, 0xc1, 0xb3,
- 0xa1, 0x8a, 0x3a, 0x63, 0x63, 0xb3, 0x28, 0xf0, 0xe5, 0xa6, 0x59, 0x91,
- 0x64, 0x41, 0x6d, 0x28, 0xe5, 0x16, 0xba, 0x6e, 0xe6, 0xb7, 0x19, 0x3a,
- 0x95, 0x05, 0x20, 0x77, 0x2a, 0x08, 0x96, 0xc8, 0xd9, 0x02, 0x78, 0x85,
- 0x82, 0x1d, 0x22, 0xa9, 0xc4, 0x28, 0xce, 0x31, 0xc2, 0x33, 0x4d, 0x0c,
- 0xcf, 0xa1, 0xa4, 0xb1, 0x9b, 0x11, 0xd3, 0x4e, 0x40, 0x43, 0x59, 0x8e,
- 0x70, 0x74, 0xb9, 0x07, 0x4f, 0x3e, 0x65, 0x9b, 0x2e, 0xd7, 0xce, 0x93,
- 0x11, 0x6d, 0x94, 0x16, 0x53, 0x20, 0xc3, 0xc0, 0x3e, 0xf2, 0x5a, 0x4d,
- 0x29, 0xda, 0x4c, 0x77, 0xb7, 0x87, 0xa4, 0x50, 0x2d, 0x89, 0x39, 0x85,
- 0xeb, 0x86, 0x0e, 0x4c, 0xc5, 0x92, 0xae, 0xda, 0x74, 0xe4, 0xf4, 0xb6,
- 0x65, 0xce, 0xd6, 0x29, 0xa8, 0x5e, 0xb1, 0xcd, 0x8b, 0x48, 0xf8, 0xa4,
- 0x35, 0x6a, 0x1b, 0x43, 0xd9, 0xdf, 0x31, 0xa7, 0x64, 0x77, 0xe7, 0xa3,
- 0x1c, 0x94, 0xe8, 0x70, 0xb6, 0x98, 0x7e, 0xe3, 0x2f, 0x83, 0xcf, 0x38,
- 0xe9, 0x7c, 0x08, 0xea, 0x8c, 0xf5, 0xff, 0x31, 0xdd, 0x93, 0xb2, 0x23,
- 0x10, 0xd4, 0xed, 0xfc, 0xd9, 0x4d, 0x3d, 0x97, 0x93, 0x77, 0x55, 0x4f,
- 0x7f, 0xa7, 0x4b, 0x54, 0xce, 0xdf, 0x25, 0xeb, 0xe1, 0x8b, 0x79, 0xcf,
- 0x9b, 0x93, 0x72, 0x49, 0x63, 0x9d, 0x87, 0xee, 0x77, 0x24, 0x3f, 0x56,
- 0xbc, 0x92, 0x78, 0x0d, 0xcb, 0x2e, 0x6b, 0xc0, 0x01, 0xed, 0x63, 0xd5,
- 0x96, 0xad, 0x4f, 0x9c, 0xdc, 0x4c, 0x59, 0xe6, 0x2c, 0x76, 0x7a, 0xae,
- 0x45, 0x79, 0x20, 0x40, 0x03, 0x40, 0x40, 0x5d, 0x85, 0x44, 0x07, 0xc1,
- 0xd2, 0xb7, 0x33, 0x3a, 0x7a, 0x48, 0x6e, 0xab, 0x49, 0x3d, 0xda, 0xf9,
- 0xb2, 0x1b, 0x3d, 0xda, 0xfb, 0xaa, 0x8b, 0xf0, 0x49, 0xf8, 0xcf, 0x1e,
- 0xfe, 0xb3, 0x8f, 0x8f, 0x3c, 0x06, 0x75, 0x61, 0x89, 0x98, 0x1c, 0x4e,
- 0x37, 0x17, 0xec, 0x0a, 0xbc, 0x41, 0x06, 0xf9, 0xc2, 0x91, 0x98, 0x13,
- 0x67, 0xc1, 0x35, 0x56, 0x97, 0x19, 0x19, 0xc1, 0x45, 0xe4, 0x33, 0x3f,
- 0xab, 0x8e, 0xd2, 0xeb, 0x45, 0x4d, 0xb1, 0xc9, 0x19, 0xf0, 0xb3, 0xba,
- 0x02, 0xa2, 0xc2, 0xc5, 0xd6, 0xb5, 0xd4, 0x06, 0x61, 0x89, 0x17, 0x1c,
- 0xe2, 0xec, 0x63, 0xa7, 0x27, 0x19, 0x27, 0xd5, 0x09, 0x2a, 0x03, 0xc2,
- 0x06, 0x64, 0xca, 0x7f, 0x4a, 0x24, 0x5c, 0x36, 0x2c, 0x6b, 0xc9, 0x77,
- 0xea, 0xd3, 0x54, 0xdd, 0x0b, 0xec, 0xcf, 0x84, 0xec, 0x3a, 0x5a, 0x04,
- 0x87, 0xd0, 0x89, 0x9c, 0xb0, 0x7c, 0x3e, 0xc9, 0xec, 0xc2, 0x90, 0x98,
- 0xaa, 0xda, 0xcd, 0x12, 0x72, 0xfc, 0x9b, 0x04, 0x10, 0xb1, 0x66, 0xa7,
- 0xb7, 0xb0, 0xf6, 0x5c, 0xe5, 0x32, 0x32, 0xb7, 0xa7, 0xbd, 0xf5, 0x7b,
- 0x4e, 0x60, 0x6c, 0xc0, 0x5e, 0x58, 0x3b, 0xa2, 0xb0, 0x0d, 0xcc, 0xcf,
- 0x88, 0x1f, 0xe7, 0x95, 0x5c, 0xa6, 0x06, 0xa8, 0x80, 0x0d, 0xa9, 0x61,
- 0xf6, 0xd3, 0x27, 0x85, 0x99, 0xf6, 0xf5, 0x69, 0xef, 0xc9, 0x13, 0x53,
- 0x98, 0x82, 0x51, 0xa4, 0x10, 0x2b, 0xe4, 0xce, 0x64, 0xd3, 0xa5, 0x62,
- 0xb4, 0x8b, 0x8f, 0xd0, 0x8a, 0x7f, 0x10, 0x85, 0x2c, 0x9c, 0xa2, 0x2f,
- 0x49, 0x2a, 0x32, 0xdc, 0x11, 0x54, 0xeb, 0x8b, 0xe2, 0xcc, 0x52, 0x42,
- 0xc4, 0x87, 0xc1, 0xbe, 0x9f, 0xe5, 0x37, 0x1a, 0x55, 0x29, 0x81, 0x63,
- 0x0a, 0x25, 0x12, 0x42, 0x25, 0x58, 0x22, 0x4e, 0x7c, 0x3e, 0x48, 0x1c,
- 0xea, 0xfd, 0xe9, 0x43, 0xf8, 0xa1, 0xbd, 0x49, 0x1c, 0xc6, 0x58, 0x26,
- 0xe5, 0x24, 0xc6, 0xb2, 0xb2, 0xbf, 0x65, 0xa3, 0xe8, 0x30, 0xa3, 0xf2,
- 0xa7, 0xd5, 0xdd, 0x37, 0xc1, 0xe2, 0x95, 0x78, 0xfc, 0xe0, 0x49, 0xa0,
- 0x93, 0xdf, 0xd8, 0x0c, 0xa2, 0x8f, 0x47, 0x9b, 0xd2, 0xc2, 0x56, 0x57,
- 0xc3, 0x3b, 0xfb, 0x47, 0xfd, 0xd3, 0xe8, 0xfc, 0xf4, 0xe8, 0xe5, 0x6b,
- 0x78, 0x27, 0xf6, 0x1d, 0x89, 0xa6, 0x88, 0x6d, 0x97, 0x03, 0xfc, 0xeb,
- 0x2a, 0x53, 0xa3, 0xce, 0xad, 0xe9, 0x87, 0x3b, 0xf2, 0xab, 0x48, 0x8e,
- 0x48, 0xd4, 0xa8, 0x21, 0x73, 0xc6, 0x0b, 0xcd, 0xef, 0x6d, 0x2f, 0x34,
- 0x68, 0x0d, 0xbe, 0xb5, 0x1a, 0x83, 0x2e, 0x3e, 0x16, 0x6f, 0x1d, 0x90,
- 0x14, 0x1a, 0x70, 0x78, 0x68, 0xfe, 0x6c, 0x70, 0xed, 0x4c, 0x22, 0x2d,
- 0x8e, 0x10, 0x46, 0xc4, 0xf6, 0x02, 0xa0, 0x43, 0xa7, 0x59, 0x2a, 0xf7,
- 0x6b, 0xf0, 0xb3, 0xb4, 0x70, 0x6c, 0x30, 0xef, 0x17, 0x98, 0x1d, 0xee,
- 0x2b, 0x82, 0x4e, 0xc9, 0x32, 0x21, 0x5f, 0x69, 0x60, 0x29, 0x0a, 0xfc,
- 0xb9, 0x7a, 0xd3, 0x70, 0xb2, 0x1b, 0xa5, 0xe7, 0xee, 0x18, 0xe4, 0xb7,
- 0x5d, 0x5b, 0xbd, 0x88, 0xd0, 0x94, 0x4d, 0x36, 0xd7, 0x25, 0x70, 0x4f,
- 0x2a, 0xfc, 0xc9, 0x2d, 0x41, 0xa3, 0x5d, 0x03, 0xee, 0x57, 0x5e, 0x25,
- 0x3e, 0xd0, 0xe3, 0x14, 0x14, 0x0e, 0x68, 0xd0, 0x0d, 0xb1, 0x69, 0x91,
- 0x2c, 0x6a, 0x94, 0xf5, 0xb9, 0xca, 0x7c, 0xd7, 0x06, 0x41, 0x03, 0x99,
- 0x26, 0x6b, 0x84, 0x32, 0x60, 0xb4, 0xdb, 0x2c, 0xd6, 0xa8, 0x2f, 0x57,
- 0x15, 0x44, 0x8e, 0xe5, 0x9d, 0xa3, 0xac, 0x29, 0xda, 0x9e, 0xcc, 0x58,
- 0xf9, 0x95, 0x8c, 0x7f, 0x0b, 0x3d, 0x37, 0xe3, 0x03, 0x52, 0xa7, 0xf3,
- 0xa5, 0x26, 0x18, 0xe9, 0x60, 0x2d, 0x14, 0x8b, 0x26, 0x29, 0xf8, 0x3a,
- 0xb8, 0xb4, 0xfa, 0xa0, 0x65, 0x85, 0xc1, 0xac, 0xb7, 0x9a, 0xee, 0x66,
- 0xd4, 0x16, 0x73, 0xbf, 0x61, 0x65, 0xc1, 0x23, 0x00, 0xe2, 0x3e, 0x47,
- 0xd7, 0x07, 0x6b, 0xd1, 0xbb, 0x76, 0x8f, 0x7a, 0xa1, 0x44, 0x89, 0xcd,
- 0xd2, 0x13, 0x8c, 0x5a, 0x03, 0x35, 0x43, 0x90, 0xa2, 0xe7, 0xaf, 0x4f,
- 0xbe, 0x3f, 0x6b, 0x8f, 0x9b, 0xe1, 0xde, 0x67, 0xa9, 0x96, 0xdd, 0xf6,
- 0x07, 0xc3, 0x15, 0x70, 0x11, 0xa1, 0x99, 0x3d, 0xa8, 0xa1, 0x3a, 0xa7,
- 0xf4, 0xc4, 0xb6, 0xe4, 0xd0, 0x07, 0x53, 0x6e, 0xe8, 0x1e, 0xa9, 0xb5,
- 0x7b, 0xdf, 0xf3, 0xf1, 0xf1, 0x0f, 0x88, 0x3b, 0x0a, 0x77, 0xe4, 0x6b,
- 0xde, 0x30, 0x76, 0xd1, 0xdc, 0xea, 0x84, 0x6e, 0xeb, 0xb5, 0x1d, 0x7f,
- 0x54, 0x8f, 0x4b, 0xef, 0x53, 0xa5, 0xb9, 0xab, 0xfc, 0xa6, 0x3d, 0x45,
- 0x82, 0x78, 0x1e, 0x13, 0x6e, 0x49, 0x4f, 0x63, 0x56, 0x0f, 0x07, 0x49,
- 0x3a, 0xc2, 0x30, 0xb6, 0x61, 0x13, 0x28, 0x60, 0xfd, 0xca, 0xe4, 0x32,
- 0x50, 0x2c, 0x34, 0xe3, 0x6a, 0x2e, 0xcb, 0xcb, 0x83, 0xa0, 0x46, 0x37,
- 0xc9, 0x07, 0xb0, 0x13, 0x5c, 0xa6, 0x5d, 0x8c, 0xbe, 0x1a, 0xf1, 0x58,
- 0x43, 0x35, 0xd5, 0x9c, 0xdc, 0x00, 0x00, 0x1f, 0x08, 0x6f, 0xf1, 0x41,
- 0x97, 0x96, 0xe8, 0xb6, 0x5a, 0x7e, 0xc4, 0xcd, 0x02, 0xdc, 0xfb, 0x94,
- 0x7b, 0x2e, 0xb0, 0x16, 0x5b, 0x9b, 0x6d, 0x7a, 0x6d, 0x02, 0xb1, 0x83,
- 0xd2, 0x45, 0x5f, 0x97, 0x34, 0xa8, 0x66, 0xdb, 0x25, 0x95, 0x91, 0x9b,
- 0xa6, 0x55, 0x0d, 0x59, 0xc3, 0xd9, 0x4a, 0x4f, 0x3e, 0xa4, 0xae, 0xa0,
- 0xdb, 0x7f, 0x2c, 0x32, 0x82, 0xb4, 0x02, 0xe5, 0x40, 0x3d, 0x93, 0xb4,
- 0xcd, 0xda, 0x68, 0x44, 0x8d, 0xd2, 0xad, 0x65, 0x34, 0x19, 0x6f, 0x61,
- 0x90, 0x0e, 0x50, 0x72, 0x7e, 0x45, 0xb4, 0x12, 0x1d, 0x93, 0x3e, 0x31,
- 0x5d, 0x20, 0xfe, 0xdb, 0xcb, 0x4a, 0xab, 0xfd, 0x10, 0x6a, 0x82, 0xa4,
- 0xd7, 0x2a, 0x7c, 0x31, 0x01, 0xfa, 0x95, 0xef, 0x7d, 0xab, 0x40, 0x37,
- 0x9a, 0xe7, 0x15, 0xcb, 0xd1, 0x58, 0x35, 0xed, 0x3a, 0x35, 0xd2, 0x0b,
- 0x8c, 0x06, 0xa4, 0xfe, 0x64, 0xb2, 0x5d, 0x56, 0x23, 0xd4, 0x56, 0x16,
- 0xb3, 0x09, 0x0e, 0x13, 0x5b, 0x52, 0x87, 0x92, 0xc7, 0x99, 0x43, 0x85,
- 0x66, 0xa3, 0xfa, 0xf2, 0x7b, 0x72, 0x52, 0x4d, 0xf5, 0x57, 0x29, 0x5f,
- 0x57, 0xc5, 0x43, 0xf7, 0xc5, 0x35, 0x42, 0x91, 0x84, 0xa7, 0x49, 0x2b,
- 0x58, 0x3b, 0x25, 0xe5, 0x72, 0xda, 0xe4, 0xed, 0xb8, 0x17, 0x5d, 0xae,
- 0x71, 0xfd, 0x50, 0xab, 0x6b, 0x92, 0xe4, 0x9a, 0x56, 0xfd, 0x6b, 0x24,
- 0x31, 0x60, 0x68, 0x83, 0xbc, 0x24, 0xc0, 0x1d, 0xd8, 0x14, 0x98, 0xb7,
- 0xb0, 0xa9, 0x65, 0xb4, 0xc9, 0xa5, 0x2f, 0x1f, 0xad, 0x2c, 0xa4, 0x5a,
- 0x0f, 0xf3, 0xa2, 0x62, 0xe6, 0x8f, 0x56, 0x56, 0x50, 0xe5, 0x37, 0xfc,
- 0x4a, 0x48, 0x2b, 0x6a, 0xa8, 0x42, 0x87, 0xc6, 0x68, 0x2a, 0x25, 0xd0,
- 0x41, 0x68, 0xbb, 0x9b, 0xa7, 0x4b, 0xaa, 0x65, 0x06, 0xa2, 0x81, 0x2c,
- 0x70, 0x89, 0x2d, 0xd5, 0x67, 0x83, 0xec, 0x8c, 0x1c, 0x1e, 0x2a, 0x48,
- 0x1d, 0x2c, 0x43, 0x29, 0xc0, 0x21, 0x5c, 0x49, 0x11, 0xaf, 0x64, 0x74,
- 0xe7, 0xdf, 0x46, 0x5a, 0xab, 0x5d, 0x46, 0xda, 0x15, 0x2c, 0x4c, 0x53,
- 0x55, 0x3d, 0x14, 0x64, 0x88, 0x9f, 0x77, 0xb9, 0x0e, 0xbb, 0xad, 0x36,
- 0xbf, 0x56, 0x1d, 0xf6, 0x46, 0x30, 0xbe, 0xa9, 0xeb, 0x8d, 0xe1, 0x1e,
- 0x06, 0x0b, 0x4a, 0x39, 0xb3, 0x5b, 0x83, 0x94, 0x53, 0x5c, 0xef, 0x02,
- 0xfe, 0x65, 0x60, 0x14, 0x0b, 0x29, 0x8e, 0x38, 0x9c, 0x80, 0xe2, 0x1d,
- 0x08, 0xa6, 0x69, 0xdc, 0x1c, 0xe5, 0x02, 0x4d, 0x44, 0x93, 0x05, 0xf6,
- 0x65, 0x7c, 0xc3, 0x5c, 0xc7, 0xdb, 0xa0, 0xac, 0x08, 0x7d, 0xf1, 0xb2,
- 0x85, 0x5d, 0x35, 0xbc, 0xa2, 0xac, 0xea, 0x27, 0x76, 0x3d, 0x9a, 0xe5,
- 0x92, 0x5b, 0xb4, 0x6b, 0xf6, 0x58, 0x74, 0x9d, 0xc2, 0xad, 0xb5, 0x48,
- 0x9f, 0x2a, 0x77, 0x06, 0x43, 0x74, 0x2b, 0x3b, 0x98, 0x84, 0x2a, 0x9b,
- 0x9b, 0xd4, 0x4f, 0xb7, 0x9e, 0xb2, 0xbd, 0x95, 0x15, 0x33, 0x1c, 0xff,
- 0xe9, 0x1b, 0xf2, 0x9f, 0x71, 0xe4, 0x49, 0x73, 0x49, 0x23, 0xce, 0x13,
- 0xe4, 0xa4, 0x42, 0x32, 0xd7, 0x48, 0x5c, 0x4f, 0xa9, 0x3c, 0xb4, 0x36,
- 0x1c, 0x35, 0xd6, 0xe8, 0x43, 0xcd, 0xa0, 0x6e, 0x2d, 0x92, 0x4a, 0x2f,
- 0x6d, 0xd5, 0xc2, 0xed, 0x81, 0xbf, 0xb9, 0x23, 0x0a, 0x4b, 0x62, 0xbc,
- 0x0f, 0xeb, 0xc9, 0x60, 0xd1, 0xc7, 0xab, 0xd3, 0x28, 0xfd, 0x23, 0x7d,
- 0xe3, 0xb9, 0x3c, 0x78, 0xb4, 0xf3, 0xd5, 0x93, 0x87, 0x54, 0x86, 0x7e,
- 0x94, 0x78, 0x05, 0x7b, 0xf9, 0x8f, 0x58, 0x9b, 0xf6, 0xb9, 0x5b, 0xf2,
- 0x20, 0xf6, 0x96, 0xdc, 0x8f, 0xbf, 0xb5, 0x40, 0x48, 0x2f, 0xe3, 0x6f,
- 0x5c, 0xfa, 0xbc, 0x7c, 0x5f, 0xd6, 0x4a, 0xed, 0xa2, 0xc9, 0xb5, 0x25,
- 0xaa, 0xcd, 0xc6, 0x86, 0x06, 0x45, 0x6d, 0xe0, 0x4e, 0x86, 0xc8, 0x4d,
- 0x0d, 0x69, 0x4e, 0x9f, 0x25, 0x16, 0x25, 0x1c, 0x4a, 0x19, 0x14, 0xb2,
- 0x05, 0xcb, 0x9e, 0xee, 0xc3, 0x9d, 0x92, 0x07, 0xb1, 0x27, 0x85, 0x89,
- 0xb8, 0x3f, 0x73, 0x52, 0x1f, 0xca, 0xbf, 0x9b, 0x3d, 0x25, 0xeb, 0xb2,
- 0xa7, 0xe4, 0x33, 0xf1, 0xa7, 0x87, 0x32, 0xa8, 0x20, 0x7f, 0x7a, 0x10,
- 0x7b, 0xfa, 0x34, 0xfc, 0xc9, 0x39, 0xaa, 0x9f, 0xa9, 0x8e, 0xac, 0x76,
- 0xff, 0xe1, 0x0c, 0x6a, 0x6d, 0xfe, 0xf4, 0x98, 0x0b, 0xdc, 0x37, 0x89,
- 0xd9, 0x4b, 0x4d, 0x46, 0xab, 0x16, 0x36, 0xb0, 0x8d, 0xf2, 0x0c, 0xa5,
- 0xd9, 0x35, 0x4c, 0x88, 0x37, 0xce, 0xfd, 0x11, 0xce, 0x09, 0xc9, 0x95,
- 0xc8, 0x1e, 0x2b, 0x71, 0x98, 0xfa, 0x64, 0x4b, 0x5b, 0xf6, 0x9c, 0xe0,
- 0x0a, 0x83, 0x6b, 0x63, 0x38, 0x7b, 0xcc, 0x49, 0xcd, 0x9c, 0x2e, 0x41,
- 0xe0, 0x9e, 0x67, 0xc4, 0xd5, 0x80, 0xc5, 0x60, 0x5d, 0x98, 0xef, 0xfb,
- 0xfd, 0xf8, 0xe8, 0xfc, 0x65, 0xb4, 0xc2, 0x58, 0x8a, 0xaf, 0x38, 0x63,
- 0xcc, 0x56, 0x09, 0xed, 0xce, 0x12, 0x7e, 0x82, 0x72, 0xf3, 0xb5, 0xe6,
- 0xcd, 0xc6, 0x7e, 0x30, 0x95, 0x3c, 0x5e, 0x96, 0x40, 0x5c, 0x5f, 0x42,
- 0xd0, 0xa9, 0x9b, 0xb4, 0x71, 0x54, 0x46, 0x35, 0x2c, 0x23, 0x5d, 0x59,
- 0x35, 0x50, 0x90, 0xc5, 0x88, 0xf8, 0x13, 0x17, 0x96, 0xe1, 0xf2, 0x7c,
- 0x78, 0x69, 0xd1, 0x03, 0x9e, 0x42, 0x8d, 0x10, 0xc8, 0x54, 0xbc, 0x74,
- 0xf7, 0xab, 0x27, 0xbb, 0xc0, 0x63, 0xee, 0x38, 0x34, 0x55, 0x5e, 0x7e,
- 0xd4, 0xdb, 0xdf, 0x7e, 0xd4, 0x7b, 0x84, 0x57, 0x9a, 0xa4, 0xd2, 0x50,
- 0x96, 0x84, 0x34, 0x1f, 0x0e, 0xf4, 0x64, 0x6e, 0xf5, 0xfa, 0xe4, 0x38,
- 0x62, 0x2c, 0x9c, 0x94, 0x2a, 0x03, 0xd5, 0xcd, 0xbd, 0x0e, 0x48, 0x9f,
- 0xd0, 0x21, 0xf3, 0x6e, 0xcf, 0x23, 0xe3, 0x2d, 0x87, 0x9a, 0xc3, 0xc8,
- 0xd6, 0x3b, 0x33, 0x03, 0xc1, 0xab, 0x81, 0x2d, 0x63, 0xb2, 0x2e, 0x38,
- 0x46, 0x1f, 0x9d, 0xd7, 0x59, 0x12, 0x67, 0xc1, 0x96, 0xc7, 0x0a, 0xf9,
- 0x43, 0xf8, 0xf8, 0xb1, 0x42, 0x5e, 0x1f, 0x0f, 0xa4, 0x55, 0x67, 0x90,
- 0x1f, 0x93, 0x60, 0x5b, 0xe9, 0x53, 0x4d, 0x90, 0x2d, 0x46, 0x4c, 0x1b,
- 0xc6, 0xe2, 0xd9, 0x2a, 0xe5, 0x3a, 0x55, 0x77, 0x00, 0x7a, 0xa4, 0x87,
- 0x53, 0x63, 0x56, 0x1c, 0xff, 0x63, 0x34, 0xeb, 0xad, 0x6b, 0x13, 0xcd,
- 0xaa, 0xa5, 0xa6, 0x4f, 0xb3, 0x20, 0xcc, 0xff, 0xc4, 0xe0, 0xd9, 0x36,
- 0x23, 0x36, 0x16, 0x7a, 0xa5, 0xa4, 0xf1, 0x08, 0x20, 0x43, 0x66, 0x53,
- 0xa2, 0xd3, 0x90, 0x69, 0x7d, 0x59, 0xe3, 0x01, 0x57, 0x88, 0xed, 0x6b,
- 0xbb, 0x48, 0x93, 0x89, 0xbc, 0x28, 0xd6, 0x57, 0x52, 0x27, 0xbd, 0x2f,
- 0x71, 0xf9, 0x28, 0x7f, 0xc6, 0x87, 0x8e, 0x90, 0x58, 0x17, 0x67, 0x0c,
- 0xc6, 0xae, 0x37, 0x4d, 0x2a, 0x76, 0xd0, 0x62, 0x4d, 0xfb, 0xd9, 0x30,
- 0x9b, 0xc3, 0xe5, 0xba, 0xc4, 0x7a, 0x1b, 0x5c, 0x94, 0x25, 0x17, 0xb4,
- 0x05, 0x73, 0xf0, 0x26, 0x59, 0x7d, 0x84, 0xe0, 0x89, 0xf0, 0x78, 0xd8,
- 0x58, 0xfd, 0xef, 0xa0, 0xf4, 0xe0, 0x0d, 0x2d, 0x06, 0x08, 0x2d, 0x82,
- 0xa1, 0xac, 0x78, 0xc9, 0xd5, 0x2c, 0xd9, 0xd2, 0xcd, 0xa8, 0x8a, 0xc0,
- 0xbd, 0xdc, 0xd2, 0x18, 0x96, 0xaf, 0xb3, 0xf7, 0xaf, 0x1e, 0xaf, 0xa6,
- 0x40, 0x96, 0x8d, 0x23, 0x53, 0x49, 0x00, 0x7d, 0xcd, 0x36, 0x88, 0x4e,
- 0x9b, 0x95, 0x92, 0x2d, 0x5b, 0xcd, 0xab, 0x3b, 0x24, 0x8e, 0x54, 0xb9,
- 0x5c, 0xe3, 0x2b, 0x65, 0x85, 0x07, 0x5d, 0xdf, 0x22, 0x2d, 0x04, 0xee,
- 0xef, 0x3a, 0xe2, 0xe6, 0x9a, 0x51, 0xb7, 0xb5, 0xd6, 0x3f, 0x88, 0xdc,
- 0xfe, 0xdd, 0x77, 0xbf, 0xf6, 0xb2, 0x52, 0x75, 0xad, 0x65, 0xac, 0x62,
- 0x3c, 0x93, 0x4b, 0x47, 0xd1, 0x26, 0xa5, 0x34, 0x19, 0x90, 0x70, 0xfc,
- 0x48, 0x4d, 0x65, 0xbe, 0xed, 0xcb, 0x68, 0x98, 0x5b, 0x2b, 0x8d, 0x7a,
- 0x46, 0xc9, 0x8d, 0x18, 0x89, 0x8d, 0xd4, 0x5c, 0x4f, 0xac, 0x70, 0x94,
- 0xde, 0x7f, 0xb7, 0xce, 0xfa, 0xf8, 0xea, 0x7f, 0x91, 0xce, 0xfa, 0x10,
- 0xa5, 0x95, 0x09, 0x31, 0x0e, 0x61, 0x4c, 0xf3, 0x72, 0xb6, 0xab, 0xaf,
- 0xb4, 0x36, 0xff, 0x57, 0x7d, 0xfd, 0xf8, 0xea, 0xab, 0x73, 0x6c, 0x5b,
- 0x82, 0x0c, 0xff, 0x1d, 0x31, 0x86, 0xcd, 0xa1, 0xf0, 0xb0, 0x85, 0x41,
- 0x1d, 0x3c, 0xc5, 0x62, 0x29, 0x0f, 0xe1, 0x5a, 0xae, 0x36, 0xfb, 0x28,
- 0xf1, 0x59, 0xd6, 0x43, 0x8c, 0x6c, 0xca, 0xa6, 0x62, 0x41, 0xe1, 0x69,
- 0x58, 0xbb, 0x04, 0xcb, 0x32, 0x08, 0xda, 0x37, 0xb9, 0x73, 0x61, 0xbf,
- 0x39, 0x79, 0x76, 0x19, 0xa3, 0xaa, 0x59, 0xe3, 0x9a, 0x46, 0xff, 0x65,
- 0x6c, 0xea, 0x93, 0x1a, 0xfe, 0x1f, 0xff, 0xff, 0xb6, 0xe1, 0xff, 0xf1,
- 0xba, 0x86, 0xff, 0xc7, 0xff, 0xd7, 0xf0, 0xff, 0xf1, 0x38, 0x93, 0xbb,
- 0x6b, 0x9b, 0x98, 0xc9, 0x88, 0xa9, 0xa6, 0xf0, 0x53, 0x0f, 0xf1, 0x96,
- 0x55, 0x0c, 0x10, 0x11, 0x98, 0xa7, 0xfa, 0xf2, 0xfc, 0x6f, 0x4f, 0xba,
- 0x54, 0x68, 0xaf, 0xef, 0xd7, 0x9c, 0x3c, 0x7d, 0x76, 0x74, 0xbe, 0x94,
- 0x01, 0x46, 0x9f, 0xd5, 0x7e, 0xf7, 0xf8, 0x63, 0xf1, 0x3a, 0xcb, 0x3c,
- 0xdb, 0x98, 0xde, 0xdf, 0xc9, 0xcc, 0x37, 0x4f, 0xd3, 0x11, 0x17, 0x1f,
- 0x8a, 0x0e, 0xe9, 0x8f, 0xf6, 0xc8, 0x6b, 0xa9, 0xe0, 0x56, 0x62, 0xd4,
- 0x68, 0xe1, 0x05, 0xd4, 0xd3, 0xcb, 0x20, 0xb3, 0xcf, 0xa4, 0xb4, 0xaa,
- 0x54, 0xb3, 0x8a, 0xbd, 0xdc, 0x93, 0xd1, 0x96, 0x20, 0x45, 0x71, 0xdf,
- 0x44, 0xb2, 0x5a, 0xc1, 0x0b, 0x46, 0x71, 0x89, 0x75, 0xe7, 0x93, 0x01,
- 0x15, 0x4c, 0xeb, 0xb9, 0xcf, 0x30, 0x4a, 0x45, 0xf8, 0x1c, 0x3a, 0x8f,
- 0x11, 0x84, 0x6a, 0x89, 0x71, 0xe9, 0x54, 0xdf, 0x8c, 0xb6, 0xaa, 0x45,
- 0x39, 0x74, 0xe6, 0xfe, 0xf9, 0x32, 0x4e, 0xdc, 0x51, 0xec, 0xef, 0xec,
- 0xd4, 0x27, 0xb3, 0x6e, 0x48, 0xfd, 0x5d, 0xb7, 0xf6, 0x7e, 0x37, 0x50,
- 0x58, 0x6a, 0xda, 0x75, 0xb3, 0x15, 0x2c, 0x39, 0x34, 0x5e, 0x6d, 0xcd,
- 0x52, 0xa9, 0xd3, 0x43, 0xb1, 0x98, 0xd5, 0x29, 0xc2, 0x9d, 0x4e, 0x8d,
- 0x10, 0x30, 0x9e, 0x7b, 0xb4, 0x28, 0x42, 0x56, 0xdd, 0xc4, 0xdd, 0x66,
- 0xce, 0xc9, 0xe8, 0xd6, 0xd3, 0x5f, 0x33, 0x87, 0x24, 0xf0, 0xb0, 0xda,
- 0xe7, 0x9b, 0xcd, 0x95, 0x0e, 0x4e, 0xaf, 0x63, 0xb7, 0x71, 0x46, 0xa5,
- 0x9b, 0xb5, 0xab, 0x11, 0x1f, 0x16, 0xd8, 0xec, 0xef, 0x7e, 0xd2, 0xa5,
- 0xf3, 0xe6, 0x72, 0xf8, 0x87, 0x7c, 0x56, 0x15, 0xf9, 0xa4, 0x74, 0x92,
- 0xcd, 0xe9, 0x2c, 0xe4, 0xd0, 0x2e, 0x07, 0x93, 0x60, 0x70, 0xe2, 0x16,
- 0x49, 0x09, 0x2d, 0x88, 0x6d, 0x09, 0x97, 0x33, 0xa4, 0xe5, 0xb4, 0x0c,
- 0x37, 0xad, 0x86, 0xa2, 0xcb, 0x70, 0x3e, 0x36, 0xe2, 0x3c, 0xc0, 0xe5,
- 0x51, 0x70, 0x50, 0x3c, 0xdc, 0x5a, 0x5d, 0x46, 0x17, 0xf1, 0x74, 0x21,
- 0x07, 0x85, 0x41, 0x72, 0x4c, 0x5a, 0xe0, 0xde, 0x9c, 0xc3, 0xa0, 0x07,
- 0x6d, 0xd9, 0x59, 0xf8, 0x5f, 0x73, 0x18, 0x3c, 0x06, 0xc7, 0x9c, 0xd0,
- 0x1e, 0x88, 0x9a, 0x04, 0x88, 0x41, 0x8f, 0x68, 0x8e, 0x8b, 0x07, 0xa9,
- 0x6f, 0xfd, 0x71, 0x77, 0xba, 0xaa, 0xb9, 0x35, 0xcc, 0xd5, 0x93, 0x14,
- 0x9c, 0x59, 0x8d, 0xb4, 0xbe, 0x28, 0x30, 0x0c, 0x7a, 0x3c, 0x49, 0x6e,
- 0x04, 0x42, 0xb0, 0x39, 0xc6, 0xfe, 0xe9, 0x3e, 0x8d, 0xe6, 0xe2, 0xb4,
- 0xbf, 0xdb, 0xdb, 0x31, 0xe2, 0x42, 0x49, 0xb1, 0xef, 0x84, 0xe9, 0xfd,
- 0xdd, 0xc9, 0x51, 0xff, 0xa2, 0x17, 0x99, 0x9d, 0xaf, 0x05, 0x41, 0x07,
- 0x22, 0xd4, 0x85, 0xe0, 0xb1, 0x1c, 0xfb, 0x24, 0xb9, 0x83, 0x23, 0xa3,
- 0x58, 0xe1, 0x38, 0x38, 0x1e, 0x9b, 0xb6, 0x8e, 0xa6, 0xc6, 0x84, 0x81,
- 0xd3, 0xaa, 0xb4, 0xc8, 0xe7, 0xcd, 0x23, 0x09, 0x1b, 0x2e, 0x60, 0x0b,
- 0x06, 0xe6, 0x81, 0x8e, 0x07, 0xa5, 0x6a, 0xe7, 0x13, 0x0c, 0xdc, 0xc7,
- 0x6e, 0xea, 0xa6, 0xf0, 0x25, 0xb5, 0x5a, 0xdc, 0xf1, 0x4f, 0x10, 0xeb,
- 0x7d, 0x56, 0x9a, 0xb1, 0xea, 0x62, 0x71, 0xd4, 0xb5, 0x01, 0x7a, 0x0c,
- 0x40, 0x6e, 0x50, 0xd9, 0x32, 0x09, 0xf3, 0xd2, 0xb8, 0xe6, 0x61, 0x45,
- 0xb5, 0x11, 0x92, 0x15, 0xb8, 0xc2, 0x8d, 0xbd, 0xfd, 0xb8, 0x69, 0xd1,
- 0x8d, 0xc6, 0xd7, 0xa6, 0xf8, 0xc6, 0xd8, 0xd6, 0xbb, 0xeb, 0x25, 0x7e,
- 0xb3, 0xd1, 0x06, 0xd1, 0xf9, 0x7b, 0xa4, 0xfe, 0x6c, 0x46, 0x0b, 0xec,
- 0x53, 0xfa, 0xa2, 0xca, 0xe3, 0xe1, 0x04, 0x13, 0x8b, 0x62, 0xe0, 0x25,
- 0x55, 0xc0, 0x2e, 0x18, 0x4d, 0xb2, 0x81, 0x12, 0x79, 0xbd, 0x70, 0x0d,
- 0xa1, 0x34, 0xf2, 0x6d, 0xc2, 0xd0, 0x6b, 0x11, 0xb7, 0x04, 0x3f, 0xa1,
- 0x29, 0xd0, 0x57, 0x7c, 0x5d, 0xa7, 0x12, 0x7b, 0x6f, 0xdd, 0xd0, 0xd6,
- 0x65, 0xa3, 0xa2, 0xad, 0xf4, 0x3a, 0xb8, 0x73, 0x62, 0xfa, 0x4d, 0xda,
- 0x74, 0x08, 0x3d, 0x15, 0x0f, 0x82, 0x5b, 0xb4, 0x59, 0x82, 0x3b, 0xfb,
- 0x68, 0x43, 0x9f, 0xa5, 0x13, 0x94, 0x39, 0xd1, 0x4a, 0x4f, 0xc8, 0x6b,
- 0x5a, 0x65, 0x07, 0xe9, 0x0d, 0x66, 0xe5, 0x55, 0x6e, 0x2d, 0x92, 0xe2,
- 0x6e, 0xab, 0x07, 0x24, 0x93, 0x51, 0xee, 0x36, 0xe6, 0x93, 0x3f, 0x85,
- 0x43, 0xc9, 0x38, 0xef, 0x49, 0xbd, 0x58, 0x0c, 0xa1, 0x79, 0x66, 0x1c,
- 0xe6, 0x27, 0x0b, 0x14, 0x92, 0x48, 0x74, 0x1c, 0x3d, 0x91, 0xf4, 0xdd,
- 0x72, 0x07, 0x89, 0x99, 0x31, 0xa9, 0x3c, 0xb2, 0x66, 0xb4, 0x46, 0x48,
- 0xca, 0x1e, 0x8c, 0x27, 0xcd, 0xaf, 0xb4, 0x8b, 0xdc, 0x30, 0x56, 0x2a,
- 0x48, 0xe9, 0x59, 0xbf, 0xd6, 0x54, 0x59, 0x51, 0x35, 0x8c, 0xca, 0x4b,
- 0xde, 0x12, 0x20, 0x39, 0x74, 0xae, 0x65, 0xd7, 0xc9, 0xf0, 0x2e, 0x82,
- 0xe9, 0x4c, 0xc4, 0xe1, 0x86, 0x3b, 0x6a, 0xaa, 0x32, 0x2d, 0x37, 0x7a,
- 0x06, 0x88, 0x68, 0xc5, 0xb9, 0x7a, 0x80, 0x3b, 0x29, 0xd0, 0xc9, 0x83,
- 0xce, 0x57, 0x73, 0xa0, 0x0f, 0x3e, 0x64, 0xcd, 0xc1, 0xd4, 0x40, 0x08,
- 0x9e, 0x36, 0xcc, 0xa0, 0xf0, 0x02, 0xe5, 0xcf, 0x23, 0x88, 0xad, 0x07,
- 0x70, 0x29, 0x04, 0xb2, 0xb5, 0xe4, 0x6a, 0xd1, 0x58, 0x51, 0x77, 0x5b,
- 0xb1, 0xb5, 0x61, 0x10, 0x4f, 0x38, 0x1a, 0x5e, 0xa5, 0x20, 0xe2, 0xf7,
- 0x1e, 0xc2, 0x78, 0x9b, 0x27, 0xc2, 0x65, 0xc3, 0x1f, 0xca, 0x78, 0xcd,
- 0x12, 0xac, 0xf4, 0x37, 0x3e, 0x80, 0xf1, 0x9a, 0xc6, 0x1f, 0x42, 0x16,
- 0x76, 0x64, 0x6b, 0x82, 0x5b, 0x15, 0x13, 0x46, 0xce, 0x71, 0x23, 0xe5,
- 0x1f, 0xf9, 0x9b, 0x0f, 0xa7, 0x7c, 0x14, 0x40, 0x89, 0x65, 0xc4, 0x54,
- 0x02, 0x67, 0x25, 0x34, 0x53, 0xd4, 0x48, 0xb7, 0xa2, 0x37, 0xc0, 0x12,
- 0x40, 0x4c, 0xc4, 0xbd, 0xd9, 0x06, 0xa9, 0x40, 0x54, 0x24, 0xae, 0x79,
- 0x23, 0x4e, 0x97, 0xdc, 0xf7, 0x25, 0x72, 0x08, 0x73, 0x95, 0x96, 0xde,
- 0xa3, 0x14, 0x40, 0xdf, 0x52, 0x50, 0xce, 0x70, 0x15, 0x5f, 0x2c, 0xc1,
- 0xbe, 0x57, 0xd9, 0x4e, 0x80, 0x72, 0x47, 0x13, 0x9e, 0x38, 0x8e, 0x5d,
- 0xec, 0x27, 0x82, 0x10, 0x88, 0x68, 0xf6, 0x98, 0x27, 0x82, 0xf1, 0xda,
- 0x54, 0x3a, 0xd9, 0x07, 0x95, 0xb1, 0x2c, 0x9b, 0x9c, 0x3f, 0x34, 0xc6,
- 0xb3, 0x79, 0x3a, 0xa3, 0xc6, 0x30, 0xd5, 0x31, 0x95, 0xd4, 0xcf, 0x22,
- 0xfd, 0x95, 0xbd, 0xe2, 0x72, 0x2f, 0x5c, 0xa6, 0x33, 0x50, 0x0e, 0x9a,
- 0x7e, 0x9d, 0xc9, 0x28, 0x99, 0x9b, 0xd7, 0x60, 0xd2, 0x88, 0xb9, 0x9d,
- 0x0d, 0x81, 0x60, 0x70, 0x19, 0x29, 0x45, 0x98, 0x56, 0x76, 0xb4, 0x74,
- 0x5a, 0xc8, 0xe7, 0x31, 0x55, 0x38, 0x45, 0x44, 0x7b, 0x23, 0x84, 0xc5,
- 0xf1, 0xb8, 0x9a, 0x9b, 0xbd, 0x5c, 0xc9, 0x10, 0xf1, 0xa1, 0x7b, 0xd5,
- 0xc7, 0x8a, 0xd6, 0xcb, 0x0a, 0x68, 0xeb, 0xff, 0x1e, 0x34, 0x4e, 0x43,
- 0xf2, 0x70, 0x61, 0x97, 0x59, 0x0f, 0xca, 0xc9, 0x3d, 0xe4, 0x07, 0x3e,
- 0x37, 0x20, 0x6e, 0x94, 0x15, 0x22, 0x30, 0xfb, 0xa4, 0xe4, 0x30, 0xb8,
- 0x25, 0x1c, 0x2e, 0xbb, 0x9c, 0xe1, 0x2d, 0xb5, 0x16, 0x83, 0x93, 0xcc,
- 0x50, 0xc4, 0xea, 0x12, 0x58, 0x8d, 0xd1, 0x82, 0x72, 0x5c, 0xa7, 0x19,
- 0xc5, 0x48, 0x6f, 0xe7, 0xe3, 0x31, 0xa1, 0x80, 0x03, 0xfb, 0xac, 0x8a,
- 0x6c, 0xb0, 0x08, 0x04, 0x64, 0xcc, 0xf3, 0x0c, 0xab, 0x65, 0x28, 0xf2,
- 0x1f, 0xf7, 0x69, 0xfb, 0x60, 0xc8, 0xe5, 0xd5, 0xac, 0xcd, 0x5f, 0x85,
- 0x68, 0xd9, 0xf6, 0x37, 0xc5, 0xec, 0xf1, 0xfd, 0x6e, 0x40, 0xbf, 0x97,
- 0x87, 0x11, 0x82, 0x37, 0xd6, 0x07, 0x71, 0xbd, 0x10, 0x71, 0xd4, 0x6e,
- 0xc1, 0x1d, 0x8f, 0x11, 0x2e, 0x63, 0x7b, 0x3f, 0x24, 0x05, 0xc2, 0x70,
- 0x1e, 0x18, 0xf5, 0x56, 0x41, 0x77, 0x90, 0x3b, 0x24, 0x24, 0xdd, 0xf8,
- 0x70, 0x79, 0x43, 0xaa, 0x14, 0xa6, 0x60, 0xf3, 0x16, 0x87, 0x57, 0x70,
- 0xd1, 0x2d, 0xe1, 0x2b, 0x32, 0xb4, 0xe4, 0x01, 0xe1, 0x6b, 0x01, 0x89,
- 0x6d, 0x31, 0xbf, 0x2c, 0x92, 0x91, 0x60, 0x35, 0xf2, 0xc5, 0x98, 0xd6,
- 0x98, 0x6e, 0x93, 0x6f, 0x10, 0x98, 0x27, 0xc9, 0xbe, 0xca, 0xad, 0x95,
- 0x92, 0x9c, 0xb7, 0x80, 0xa3, 0x03, 0x4b, 0x64, 0x8b, 0x29, 0xca, 0xc8,
- 0xb3, 0x7c, 0x16, 0x73, 0xdb, 0x9e, 0x48, 0x76, 0x2f, 0x9e, 0x2d, 0x5c,
- 0xd3, 0x30, 0x69, 0xb3, 0x37, 0x3e, 0x4e, 0x94, 0xf0, 0x2c, 0x31, 0x49,
- 0xa8, 0x01, 0xd0, 0x70, 0x03, 0xac, 0x52, 0x60, 0xc0, 0x77, 0x27, 0x30,
- 0xca, 0x09, 0xe1, 0xf4, 0xa7, 0xb3, 0x61, 0x71, 0x17, 0x16, 0xb6, 0xef,
- 0xc5, 0x42, 0x3f, 0xea, 0xcd, 0x20, 0x1c, 0x3f, 0x78, 0x2d, 0x08, 0xdb,
- 0x70, 0xaf, 0x8f, 0xd5, 0x37, 0x83, 0x7f, 0x9a, 0x19, 0xa8, 0x10, 0xd7,
- 0x56, 0x10, 0x4b, 0x0c, 0x66, 0x1a, 0xa1, 0xcf, 0x13, 0x4a, 0x60, 0x7d,
- 0x4f, 0x15, 0xd3, 0x04, 0x63, 0xae, 0xfc, 0x75, 0x62, 0x06, 0x62, 0xec,
- 0xd1, 0x84, 0xd6, 0xf6, 0x61, 0xb7, 0x0e, 0xc5, 0x50, 0x20, 0x88, 0x98,
- 0x3a, 0x4b, 0x02, 0xe5, 0x06, 0xc9, 0x65, 0x51, 0xb9, 0x80, 0xce, 0xc6,
- 0xc2, 0x34, 0x48, 0x05, 0x43, 0x50, 0xca, 0xef, 0x8d, 0x17, 0x15, 0x52,
- 0x76, 0x1b, 0x94, 0x6f, 0x93, 0xbd, 0xad, 0x57, 0x89, 0x7d, 0x65, 0x21,
- 0x76, 0x9c, 0xcf, 0xfa, 0x7c, 0x0b, 0x58, 0xf5, 0x7c, 0x7f, 0x8d, 0xdc,
- 0x55, 0x21, 0xf2, 0x6e, 0x83, 0x45, 0xc9, 0x19, 0x18, 0x66, 0xf3, 0xab,
- 0xd4, 0x45, 0x2e, 0x8b, 0xf7, 0xba, 0xfc, 0xd6, 0xf5, 0x9e, 0x77, 0x81,
- 0xf5, 0x4f, 0xeb, 0xc2, 0xb9, 0xfa, 0xa6, 0x60, 0xab, 0x40, 0x12, 0x56,
- 0x78, 0x5f, 0xcb, 0x08, 0xae, 0xf7, 0xba, 0x92, 0xb9, 0x95, 0x14, 0xe1,
- 0xe0, 0x55, 0xc1, 0x07, 0xad, 0x29, 0x98, 0xc8, 0xa2, 0x8a, 0xc5, 0x50,
- 0x4f, 0x90, 0x90, 0x76, 0x8f, 0x1b, 0x8c, 0xa8, 0xd2, 0xd8, 0x28, 0xf5,
- 0x0e, 0x8a, 0xc3, 0x25, 0xcd, 0x14, 0x09, 0xd3, 0x07, 0x43, 0x20, 0x9f,
- 0xec, 0x3e, 0x7d, 0xb2, 0xb5, 0x4a, 0x58, 0x81, 0xc6, 0x3f, 0x41, 0xa8,
- 0x29, 0xb5, 0xbb, 0xde, 0xbd, 0x82, 0x4f, 0x63, 0x29, 0x15, 0xde, 0x21,
- 0xfc, 0x6b, 0xaf, 0xe7, 0xee, 0x4b, 0xa4, 0xdc, 0xa7, 0xb4, 0x70, 0xcf,
- 0x1e, 0x44, 0xc3, 0x6c, 0x84, 0x47, 0x88, 0x16, 0x59, 0xcd, 0x16, 0x78,
- 0xb6, 0x06, 0x8b, 0x6c, 0x42, 0x90, 0x12, 0xca, 0x3c, 0x89, 0x71, 0x36,
- 0x98, 0xd6, 0xd4, 0x8f, 0xe5, 0x6d, 0x38, 0x13, 0xa9, 0x0c, 0xe2, 0xbe,
- 0x8e, 0x88, 0x2d, 0x77, 0xf1, 0x2e, 0xc1, 0xfe, 0x54, 0x93, 0xf2, 0x7a,
- 0x57, 0xeb, 0xce, 0xf1, 0x5f, 0xbd, 0xdd, 0x00, 0xf4, 0xb8, 0x7e, 0xb7,
- 0xe7, 0xd0, 0x9e, 0x6d, 0xf1, 0xc3, 0x69, 0x6f, 0x7f, 0x05, 0xed, 0xad,
- 0x4b, 0x7a, 0xfb, 0x11, 0x43, 0x6a, 0xaf, 0x4b, 0x7b, 0x4f, 0x1f, 0x3f,
- 0xf9, 0x72, 0x35, 0xed, 0xed, 0x7f, 0x22, 0xda, 0xdb, 0xbf, 0x2f, 0xed,
- 0x99, 0x82, 0x82, 0x4a, 0x7d, 0x0d, 0xf2, 0x73, 0x36, 0xdb, 0x50, 0x9f,
- 0x62, 0x33, 0xb4, 0xd3, 0xde, 0xda, 0xa4, 0xd7, 0x4e, 0x7b, 0x0e, 0xf1,
- 0x91, 0x00, 0xe1, 0x1e, 0x08, 0x25, 0x3f, 0xa5, 0x3e, 0x97, 0xbe, 0xee,
- 0x4b, 0x7b, 0x9a, 0x5f, 0x79, 0x88, 0x32, 0xdd, 0x37, 0x1e, 0xf4, 0xb2,
- 0xe0, 0xa9, 0x22, 0xe4, 0x0e, 0x82, 0xc7, 0xb2, 0x6c, 0x24, 0xaf, 0x78,
- 0x90, 0xf9, 0x52, 0x58, 0x8e, 0x44, 0x2d, 0xb2, 0x58, 0x07, 0xbc, 0xd3,
- 0xb6, 0xb0, 0x28, 0xb9, 0x30, 0xe6, 0x13, 0xbc, 0x1c, 0x36, 0xe2, 0x0d,
- 0x0d, 0x6c, 0x50, 0x49, 0xcd, 0x81, 0xaa, 0xe5, 0xb4, 0xdc, 0xcf, 0x9f,
- 0xfb, 0xcd, 0xee, 0x11, 0x9e, 0xfb, 0xe7, 0x4b, 0x3e, 0xe3, 0xfe, 0x05,
- 0x4d, 0xb8, 0xba, 0xad, 0x1e, 0x9e, 0x5d, 0xcb, 0x34, 0xe1, 0xa4, 0x74,
- 0xd7, 0xc9, 0xe2, 0x0e, 0x04, 0x38, 0xa9, 0xa9, 0x19, 0x84, 0xc9, 0x10,
- 0x53, 0x83, 0x31, 0x09, 0xeb, 0x0a, 0x0e, 0xb0, 0x02, 0xe2, 0x18, 0x44,
- 0xce, 0x88, 0xda, 0x10, 0x3d, 0x0d, 0xf7, 0x13, 0x8f, 0x06, 0x3a, 0xf9,
- 0x83, 0x95, 0x38, 0xcb, 0x66, 0x3a, 0x76, 0x4f, 0x22, 0x39, 0x51, 0x64,
- 0x70, 0x07, 0x43, 0xc7, 0xa0, 0x04, 0x79, 0x62, 0xc8, 0x60, 0x43, 0xd3,
- 0x40, 0x65, 0xe3, 0xff, 0x2c, 0x9c, 0x80, 0xda, 0xe8, 0x3f, 0x7a, 0x5c,
- 0xa8, 0xdb, 0xfa, 0xda, 0xbc, 0xb2, 0x36, 0xb4, 0xf8, 0xe5, 0x7a, 0xc4,
- 0xf4, 0xb2, 0xab, 0xf5, 0xa3, 0x88, 0x92, 0x5c, 0xda, 0xaa, 0x83, 0xaf,
- 0x34, 0xf1, 0x42, 0x80, 0x13, 0x52, 0x0a, 0xb7, 0xfa, 0x25, 0x85, 0x02,
- 0x82, 0x50, 0x62, 0x62, 0x76, 0xad, 0x16, 0x64, 0xce, 0xd7, 0x50, 0x96,
- 0x84, 0x3c, 0x6c, 0x08, 0xc7, 0x7a, 0x72, 0x6c, 0x6a, 0x86, 0xd1, 0x25,
- 0x8e, 0x18, 0x81, 0x0c, 0x1e, 0x1d, 0x46, 0x8a, 0xe6, 0x50, 0x15, 0xfb,
- 0xa6, 0x40, 0xbc, 0xc8, 0x10, 0x02, 0x9c, 0x39, 0x95, 0x4a, 0x5c, 0xfe,
- 0xf1, 0x15, 0xf4, 0x56, 0xd9, 0x8b, 0xd1, 0x62, 0x3a, 0x97, 0x99, 0x48,
- 0x49, 0x0d, 0x81, 0x1b, 0x66, 0x28, 0xb1, 0xa4, 0x70, 0xa2, 0x79, 0xae,
- 0xf2, 0x1b, 0x3f, 0x59, 0x9b, 0x03, 0x85, 0xf4, 0x34, 0x88, 0x35, 0x5f,
- 0x61, 0xc3, 0x5f, 0x56, 0xf5, 0x02, 0x9a, 0x1c, 0x62, 0x3a, 0x4a, 0x07,
- 0x0b, 0x44, 0x26, 0x0a, 0x6a, 0x6b, 0x16, 0xc2, 0xd8, 0x1e, 0x79, 0x1a,
- 0x18, 0xd6, 0xa6, 0x4e, 0xbb, 0x0c, 0x00, 0x77, 0x87, 0xa2, 0x42, 0x95,
- 0x81, 0xe6, 0x30, 0x5c, 0x11, 0xdd, 0xdc, 0xb2, 0x69, 0x1f, 0xdb, 0xd0,
- 0xd1, 0xd2, 0xcd, 0xda, 0x94, 0xdd, 0x36, 0x5c, 0xbb, 0x2f, 0xf1, 0xad,
- 0x10, 0xc3, 0x5a, 0x44, 0xff, 0xac, 0x5b, 0xdf, 0x6b, 0xf8, 0x33, 0xeb,
- 0x3a, 0xad, 0xd2, 0x51, 0x98, 0x77, 0xeb, 0x74, 0xdb, 0x3c, 0xcf, 0x6e,
- 0xd0, 0x74, 0xc3, 0x60, 0x5c, 0x0d, 0xe7, 0xf1, 0x18, 0xae, 0x8f, 0x7c,
- 0xee, 0xa1, 0x66, 0x0b, 0x3c, 0x91, 0x70, 0x9f, 0x8b, 0xe3, 0xf3, 0xe8,
- 0x39, 0xde, 0x33, 0xa8, 0x1b, 0x47, 0x9b, 0x20, 0x74, 0x3d, 0x7d, 0xb4,
- 0xbb, 0xbf, 0xb5, 0x5c, 0x9d, 0x73, 0x5b, 0x6f, 0xa9, 0xf2, 0xfb, 0x70,
- 0x43, 0xbc, 0xdb, 0xf8, 0xba, 0xfb, 0x55, 0x1b, 0xd8, 0x7a, 0x8a, 0xc3,
- 0x18, 0x7e, 0xa6, 0x31, 0x49, 0xbc, 0x75, 0x53, 0xfc, 0x57, 0xfe, 0xca,
- 0xce, 0xf2, 0x10, 0xf0, 0xde, 0xc5, 0xa2, 0x98, 0x69, 0xc9, 0x6f, 0x58,
- 0xd6, 0x77, 0xaf, 0xcf, 0x9e, 0x9d, 0x9c, 0x1e, 0xfd, 0xdd, 0x58, 0x96,
- 0xb0, 0x33, 0xad, 0x38, 0xf5, 0x2e, 0x4d, 0xca, 0xbb, 0x77, 0x70, 0xb7,
- 0xc3, 0x97, 0x9b, 0xfb, 0x5b, 0x54, 0x6e, 0xd0, 0x03, 0xe0, 0xbf, 0x4c,
- 0x6b, 0x35, 0x20, 0x05, 0x05, 0xd1, 0xa9, 0x8c, 0x18, 0x8e, 0x03, 0x44,
- 0x72, 0xd8, 0xe9, 0x81, 0x84, 0x27, 0xe8, 0x38, 0x18, 0x01, 0xe5, 0xfa,
- 0x6e, 0x9c, 0x32, 0x13, 0x48, 0x66, 0x77, 0xb6, 0xa0, 0x9f, 0x57, 0x51,
- 0x80, 0x4d, 0xdf, 0xe8, 0x17, 0xe5, 0x9b, 0x12, 0xd1, 0x15, 0xc7, 0x63,
- 0xad, 0xd7, 0x24, 0xe8, 0xfa, 0x04, 0x67, 0x4e, 0xb8, 0x8b, 0x4b, 0x8f,
- 0xbe, 0xb3, 0x70, 0xed, 0x85, 0xa1, 0x1f, 0x7c, 0x81, 0x39, 0xad, 0x3f,
- 0x84, 0x68, 0x74, 0x60, 0x6b, 0xd1, 0xcc, 0xeb, 0x2e, 0xf7, 0x3d, 0x58,
- 0x8c, 0x6b, 0x35, 0x8d, 0xe3, 0x8a, 0xa4, 0xe9, 0x74, 0x32, 0x4b, 0x2b,
- 0xc1, 0x11, 0x8b, 0x0e, 0xe1, 0xe7, 0xd7, 0x20, 0xc6, 0x79, 0x95, 0xce,
- 0x92, 0x52, 0x37, 0xc6, 0x91, 0x5d, 0xf0, 0x4d, 0xc3, 0xcc, 0x7b, 0x5a,
- 0x5b, 0x26, 0x1d, 0x99, 0x27, 0xe1, 0x1e, 0x38, 0xf0, 0xc4, 0x93, 0x8b,
- 0xbf, 0x9f, 0x9f, 0x7c, 0x7d, 0x88, 0x92, 0xcf, 0x37, 0x88, 0x21, 0x5a,
- 0xd6, 0x04, 0x21, 0x02, 0x0c, 0xf1, 0x96, 0xe6, 0xc7, 0x67, 0x2f, 0xfb,
- 0xe7, 0xa7, 0x67, 0xc7, 0x5f, 0x1f, 0xfe, 0x88, 0x16, 0x6e, 0x10, 0xa4,
- 0xef, 0x9c, 0x77, 0xcd, 0x67, 0x91, 0x96, 0x52, 0xf4, 0x8b, 0x78, 0x9e,
- 0xfc, 0xf0, 0xee, 0xe4, 0xf5, 0xdf, 0xbe, 0x3e, 0xbc, 0x4e, 0x8a, 0x2e,
- 0xce, 0x8f, 0xdf, 0x46, 0x34, 0xa6, 0xd9, 0x75, 0x56, 0xe4, 0x33, 0x0c,
- 0xe9, 0x00, 0xf9, 0xb5, 0xc8, 0x70, 0xe7, 0x02, 0xd5, 0x68, 0xea, 0xcb,
- 0xf4, 0xc9, 0x6a, 0xd2, 0x54, 0xb2, 0x3c, 0xd7, 0xd5, 0xee, 0xce, 0x8e,
- 0xac, 0xf0, 0xbd, 0x0d, 0x41, 0x7f, 0xe9, 0x72, 0xf8, 0xd3, 0x38, 0xbb,
- 0xec, 0x39, 0x9c, 0x00, 0xed, 0x6a, 0x83, 0xc9, 0xfb, 0x32, 0xfb, 0x2d,
- 0x8d, 0x0e, 0x49, 0x44, 0xf7, 0xaa, 0xda, 0x5e, 0x70, 0x1d, 0x47, 0xd8,
- 0x4d, 0xfc, 0x2d, 0xfa, 0xee, 0xf4, 0x2f, 0xfd, 0x97, 0xff, 0x7d, 0x62,
- 0x62, 0x50, 0xa7, 0x0b, 0x2c, 0x5f, 0x96, 0x46, 0xdf, 0x3c, 0xde, 0xdd,
- 0xdb, 0x12, 0xa9, 0x41, 0xaa, 0xc9, 0x0c, 0x26, 0x18, 0xec, 0xdc, 0x30,
- 0x68, 0x62, 0x4f, 0xa4, 0x38, 0x36, 0x6b, 0x41, 0xd9, 0x9a, 0xb8, 0x1a,
- 0x30, 0x46, 0x80, 0x8c, 0x04, 0x66, 0x04, 0xdf, 0x02, 0x17, 0x41, 0xa8,
- 0x42, 0x2f, 0x30, 0x97, 0x06, 0xa5, 0xf1, 0x11, 0x4e, 0x29, 0x0a, 0x18,
- 0x8e, 0x84, 0xdb, 0x2d, 0x0d, 0xbf, 0xe2, 0x40, 0xd7, 0xda, 0x3a, 0x7c,
- 0x2e, 0xcc, 0xbf, 0xda, 0x20, 0x76, 0x77, 0xf6, 0x1e, 0x45, 0x95, 0x5f,
- 0xbf, 0x10, 0xd5, 0xc6, 0x25, 0x57, 0x00, 0xb5, 0x01, 0xe7, 0xd9, 0x2b,
- 0xf8, 0xea, 0x7d, 0x15, 0xde, 0x66, 0x27, 0x43, 0x9d, 0xb0, 0x98, 0x73,
- 0x2a, 0xbc, 0xc3, 0x8b, 0xac, 0x07, 0x57, 0x2b, 0x0d, 0x2e, 0x57, 0x2e,
- 0xa6, 0xb8, 0x86, 0x44, 0xf4, 0x14, 0x52, 0xe5, 0x04, 0x4c, 0x4d, 0xd2,
- 0x4b, 0x8c, 0xb2, 0x90, 0x4d, 0x2b, 0x6d, 0xf9, 0xea, 0x00, 0x20, 0x76,
- 0x94, 0x0c, 0xd1, 0x0a, 0x4c, 0x55, 0x89, 0x18, 0xe0, 0x91, 0xeb, 0xbf,
- 0x02, 0x3f, 0x37, 0xd1, 0x56, 0xb5, 0xd1, 0x49, 0xe9, 0x8d, 0xf6, 0x0a,
- 0x45, 0x2a, 0x38, 0xfb, 0x9b, 0xae, 0xe6, 0x9e, 0xa5, 0x37, 0x40, 0x7d,
- 0x11, 0xef, 0xe5, 0xdb, 0x5c, 0xe3, 0x06, 0x68, 0xdb, 0xbd, 0x35, 0x08,
- 0xc8, 0x19, 0x9c, 0x90, 0xcf, 0xee, 0x57, 0x7b, 0xbd, 0xdd, 0x27, 0x5f,
- 0x62, 0xd1, 0xaa, 0xed, 0x55, 0xa4, 0x23, 0xcb, 0x51, 0x17, 0x1f, 0xbe,
- 0xac, 0x89, 0x0f, 0xbf, 0xd1, 0xcd, 0x00, 0xd3, 0x8d, 0x29, 0x82, 0xf5,
- 0x10, 0x7f, 0x0d, 0x96, 0xc2, 0xa6, 0x80, 0x73, 0xf6, 0xe3, 0x53, 0x68,
- 0x0f, 0x9b, 0x3c, 0x68, 0xb3, 0x0d, 0x8e, 0xe7, 0x34, 0x1f, 0xb1, 0x82,
- 0x89, 0xb5, 0x9a, 0x4d, 0x08, 0x75, 0xf3, 0x54, 0x39, 0x00, 0xe5, 0xa4,
- 0xaa, 0xc2, 0xb3, 0x24, 0xb5, 0x23, 0x54, 0x6e, 0x4b, 0x7b, 0xa6, 0x36,
- 0x41, 0x20, 0x82, 0x48, 0x50, 0xc9, 0x31, 0x1b, 0xf3, 0x10, 0xdb, 0x42,
- 0x29, 0x01, 0x45, 0x64, 0x58, 0xb4, 0x6f, 0x94, 0x7d, 0x27, 0x6e, 0xc1,
- 0xe6, 0x11, 0xc7, 0x0f, 0x21, 0x3f, 0x2a, 0xfd, 0x62, 0xaa, 0x8c, 0xcb,
- 0xd7, 0xc8, 0xc7, 0x45, 0x85, 0x82, 0x48, 0x1f, 0xef, 0x2d, 0x18, 0x67,
- 0xa9, 0x76, 0x1d, 0x04, 0x61, 0x27, 0xa7, 0x06, 0xba, 0xc0, 0x70, 0x45,
- 0x82, 0xe9, 0x5e, 0x9c, 0x42, 0x40, 0x68, 0xce, 0x70, 0x06, 0x2f, 0x25,
- 0xd9, 0x8f, 0x67, 0x27, 0x8e, 0x59, 0x1a, 0xd4, 0xe6, 0x14, 0x27, 0xb3,
- 0xc5, 0x28, 0xae, 0x41, 0xd3, 0x95, 0x31, 0x43, 0xd5, 0x64, 0x37, 0x68,
- 0x11, 0xdf, 0x47, 0xb9, 0x0d, 0x6e, 0x23, 0x12, 0xd4, 0xd8, 0xfb, 0xcb,
- 0xcd, 0x3a, 0x2b, 0xe2, 0x21, 0x3d, 0x57, 0x41, 0x00, 0xc2, 0x3e, 0x4a,
- 0x9d, 0x8a, 0x3e, 0xe7, 0xae, 0xa8, 0xd6, 0x78, 0x18, 0x61, 0x1d, 0xfb,
- 0xcd, 0x78, 0xcb, 0x14, 0x55, 0x24, 0xb8, 0x69, 0x26, 0x0d, 0x3f, 0xa9,
- 0x06, 0x9e, 0xcf, 0x87, 0x8b, 0x29, 0x17, 0x26, 0x4d, 0x68, 0xe1, 0x38,
- 0xce, 0x52, 0x29, 0x44, 0x68, 0x02, 0x3b, 0xdb, 0xe6, 0xc0, 0x6e, 0x65,
- 0xfc, 0x94, 0xbc, 0xe8, 0x15, 0x0f, 0x6e, 0x34, 0x36, 0x4b, 0x6f, 0xdc,
- 0xc6, 0xac, 0xa1, 0xc3, 0x34, 0xd8, 0x76, 0x53, 0x18, 0xc2, 0xbf, 0x7f,
- 0x36, 0xd8, 0x83, 0x6f, 0x8a, 0xb6, 0x8a, 0xb8, 0xbf, 0x45, 0x9d, 0x1f,
- 0xa0, 0xcf, 0x9d, 0x5d, 0xd8, 0xd4, 0x79, 0xb4, 0xb7, 0xb3, 0xb7, 0x1b,
- 0xed, 0xee, 0x1d, 0xec, 0x7e, 0x79, 0xb0, 0xb3, 0xb3, 0x46, 0x8d, 0x5c,
- 0x68, 0x25, 0xfe, 0x28, 0xcd, 0xd0, 0xb9, 0x5e, 0x4f, 0x55, 0x01, 0x2a,
- 0xba, 0x8c, 0xa9, 0x8e, 0x99, 0xba, 0xa2, 0xde, 0x74, 0x09, 0xef, 0x79,
- 0x9a, 0x57, 0xa9, 0x07, 0xf6, 0x5c, 0x4d, 0x4a, 0x0c, 0xd0, 0x8f, 0x0e,
- 0xff, 0x76, 0xf2, 0xa6, 0xff, 0xf2, 0xec, 0xf5, 0x37, 0x41, 0xf7, 0x80,
- 0x7c, 0x89, 0x84, 0x00, 0xb2, 0x95, 0xad, 0x4c, 0x60, 0x7d, 0xa8, 0xe8,
- 0x98, 0x56, 0x67, 0x1f, 0xd7, 0xf4, 0xce, 0x66, 0xf8, 0x88, 0x5f, 0x00,
- 0x3b, 0x9d, 0x57, 0x8c, 0x3d, 0xae, 0xae, 0x5a, 0xda, 0x6d, 0x32, 0x64,
- 0x92, 0x8b, 0x95, 0xcc, 0xc7, 0x3b, 0x5d, 0xfd, 0x6d, 0xd7, 0xfc, 0xb6,
- 0xe7, 0xf3, 0x07, 0xfe, 0x62, 0x3f, 0x44, 0x50, 0x4d, 0x6f, 0x6a, 0xc9,
- 0x55, 0x29, 0xf0, 0xc8, 0xa0, 0xa2, 0x04, 0xe3, 0xed, 0xd6, 0xf4, 0x1e,
- 0x47, 0xc9, 0x68, 0x89, 0x1e, 0x64, 0xf9, 0x8b, 0x55, 0xf0, 0x32, 0xfa,
- 0xeb, 0xdb, 0x97, 0xc7, 0x31, 0x07, 0x01, 0x10, 0x4b, 0xde, 0x86, 0xf3,
- 0x6e, 0xc2, 0xf1, 0xbd, 0x01, 0x85, 0x93, 0xce, 0x9d, 0x6c, 0xbf, 0xc5,
- 0x9c, 0x11, 0xec, 0x51, 0x86, 0xe5, 0xe2, 0x7d, 0xee, 0x8a, 0x36, 0x9b,
- 0xc3, 0x38, 0xee, 0xda, 0x8b, 0xf0, 0xf0, 0x35, 0x59, 0xc0, 0x9a, 0xcf,
- 0xed, 0x86, 0x9e, 0xdb, 0xf5, 0x9f, 0xdb, 0x0b, 0x3d, 0xb7, 0xe7, 0x3f,
- 0xb7, 0x1f, 0x7a, 0xce, 0xd9, 0x00, 0x39, 0xca, 0x42, 0x55, 0x6b, 0xd4,
- 0x8e, 0x08, 0xc3, 0xa2, 0xd7, 0x8f, 0xb0, 0x7f, 0x76, 0xf5, 0x7a, 0x96,
- 0xfe, 0x70, 0x1e, 0xcb, 0x4e, 0x97, 0xf7, 0xf8, 0xbe, 0x75, 0x58, 0x2c,
- 0x3d, 0x66, 0xee, 0x65, 0xae, 0x04, 0x6a, 0xdc, 0x20, 0x5d, 0xa7, 0x11,
- 0xd7, 0x07, 0xb2, 0xdf, 0xab, 0xad, 0x85, 0x83, 0x56, 0xe6, 0xf9, 0x18,
- 0xd7, 0xf3, 0xec, 0xa8, 0x04, 0xa1, 0xcd, 0x05, 0x2c, 0x3c, 0x93, 0x72,
- 0x77, 0x5f, 0x5d, 0xd0, 0xd1, 0xa1, 0xfc, 0xb2, 0xc8, 0x2a, 0x2e, 0xf1,
- 0xee, 0x6b, 0x22, 0xa7, 0x7d, 0xb7, 0x04, 0x3a, 0x9b, 0x13, 0xf9, 0xad,
- 0x88, 0x5e, 0x2b, 0x6d, 0x01, 0xf4, 0xe6, 0xd1, 0xf2, 0x8b, 0xfe, 0x62,
- 0xa2, 0xbb, 0x41, 0xff, 0x85, 0x69, 0x22, 0x29, 0xd3, 0x72, 0x5c, 0x5c,
- 0x71, 0xff, 0x78, 0xf3, 0xeb, 0xe0, 0xa4, 0x79, 0x52, 0x76, 0x24, 0x05,
- 0xd1, 0xcf, 0xf1, 0xcd, 0x46, 0xfa, 0x3c, 0xc6, 0xba, 0x24, 0x23, 0x24,
- 0x3f, 0xe8, 0x5a, 0x1a, 0xae, 0x8d, 0xd4, 0x58, 0x44, 0x04, 0x4c, 0xdd,
- 0x93, 0x56, 0xdf, 0xbe, 0x39, 0xf5, 0xb4, 0x63, 0xb3, 0xf9, 0xb8, 0xf2,
- 0xbd, 0x32, 0xdd, 0x86, 0x6b, 0xad, 0xdc, 0xa6, 0xc0, 0x16, 0xe9, 0xf6,
- 0xaa, 0x9a, 0x4e, 0x56, 0x16, 0xfa, 0x44, 0x02, 0xc3, 0x48, 0x97, 0xc9,
- 0x9d, 0x18, 0x6e, 0x29, 0x6c, 0xdc, 0x96, 0x0b, 0xc9, 0x9c, 0x1d, 0xf5,
- 0x51, 0xa2, 0xd1, 0xc8, 0x86, 0xe1, 0xb2, 0x78, 0x40, 0x77, 0x51, 0x08,
- 0x23, 0xc9, 0xcd, 0x14, 0x86, 0x63, 0xeb, 0x2e, 0xe7, 0x30, 0xd9, 0x98,
- 0x1a, 0x7c, 0x41, 0xc2, 0x4e, 0x02, 0xa5, 0x1e, 0xa8, 0x72, 0x35, 0xe8,
- 0x80, 0xa5, 0x14, 0x0d, 0x09, 0x2d, 0x58, 0xe9, 0xc6, 0xe0, 0xa6, 0x36,
- 0x72, 0x21, 0x28, 0xe4, 0x87, 0x3d, 0x56, 0x75, 0x72, 0xfb, 0x6c, 0x5a,
- 0x5e, 0x6d, 0x14, 0x30, 0xd5, 0x77, 0x47, 0x27, 0xfd, 0x77, 0xbb, 0x7b,
- 0x5f, 0xbe, 0xfb, 0xfe, 0xf8, 0xd5, 0xbb, 0xfe, 0x8b, 0xa3, 0xbd, 0xc7,
- 0xeb, 0x22, 0x50, 0x68, 0x63, 0x12, 0xd2, 0xb1, 0x00, 0xb5, 0xaa, 0x5c,
- 0xea, 0x77, 0x80, 0x31, 0x60, 0xcc, 0x3c, 0xe1, 0xaf, 0x1e, 0xe2, 0xbf,
- 0xdf, 0xf8, 0xe5, 0x5b, 0xf8, 0x40, 0x78, 0x40, 0x20, 0x68, 0x81, 0x41,
- 0x14, 0x62, 0x26, 0x20, 0x5e, 0xab, 0x46, 0xda, 0x41, 0x4b, 0x7e, 0x02,
- 0x91, 0x5e, 0xa7, 0xff, 0xe6, 0xbc, 0xd3, 0x95, 0x58, 0x5e, 0xe8, 0x20,
- 0x86, 0xbf, 0x23, 0xb2, 0xd9, 0x46, 0xd1, 0xe3, 0x9d, 0xc7, 0x8f, 0xb6,
- 0x7a, 0x0e, 0x77, 0x26, 0xc8, 0xff, 0x40, 0x34, 0x36, 0x7d, 0x69, 0xa0,
- 0x4a, 0x88, 0xe4, 0x9c, 0x12, 0x0a, 0xe8, 0xbf, 0xa9, 0xcd, 0x90, 0x33,
- 0x84, 0xba, 0x9c, 0x91, 0xdb, 0xae, 0x18, 0xca, 0xed, 0x47, 0x3c, 0x84,
- 0x86, 0x59, 0x77, 0x81, 0x60, 0xd6, 0x90, 0x64, 0x58, 0x48, 0xd0, 0x93,
- 0x70, 0xc3, 0x60, 0x60, 0x8b, 0xb2, 0x47, 0x9a, 0x34, 0x9f, 0x26, 0xa9,
- 0x0a, 0x62, 0x26, 0x2d, 0x0b, 0xd6, 0x8d, 0x84, 0x91, 0xa9, 0x5b, 0xbd,
- 0xe5, 0xbc, 0xc1, 0x82, 0x7d, 0x3f, 0x5b, 0xe0, 0x9e, 0x50, 0x3b, 0xda,
- 0x8c, 0xb4, 0xd2, 0x4a, 0xf1, 0xee, 0x2a, 0x7c, 0xa6, 0x7c, 0x4e, 0x77,
- 0x14, 0x38, 0xe4, 0xf5, 0x88, 0x5b, 0xe8, 0xa0, 0x41, 0xbe, 0x66, 0xf7,
- 0x0f, 0x59, 0x2d, 0x0b, 0x12, 0xb0, 0x25, 0x11, 0x24, 0x37, 0x32, 0x2f,
- 0x71, 0xfd, 0xd3, 0x94, 0x68, 0xbb, 0x41, 0xda, 0xd3, 0x14, 0x84, 0xae,
- 0x51, 0x3b, 0xbe, 0xb1, 0xea, 0xe9, 0xce, 0x74, 0x7a, 0x1a, 0xa4, 0x2e,
- 0xb1, 0x10, 0x96, 0x6a, 0x69, 0xf0, 0xe8, 0x41, 0x4d, 0x97, 0xfb, 0xeb,
- 0x03, 0xc9, 0xda, 0x7a, 0x0f, 0xb5, 0xed, 0xa8, 0x99, 0xd5, 0x67, 0xdd,
- 0x51, 0x33, 0x8a, 0xf9, 0xcd, 0xc8, 0x99, 0x37, 0x57, 0xe9, 0xf8, 0x08,
- 0x1b, 0x4c, 0x0d, 0x05, 0xd1, 0xc7, 0x68, 0x6b, 0x15, 0xb1, 0xe8, 0xdf,
- 0xb1, 0xb5, 0x22, 0x00, 0x35, 0xb9, 0x0e, 0xc5, 0xcb, 0x78, 0xcc, 0xe4,
- 0xe3, 0x6e, 0xb8, 0xb3, 0x16, 0x9f, 0x29, 0x07, 0xff, 0x63, 0x6f, 0xb5,
- 0x36, 0xd6, 0xd8, 0x6e, 0x14, 0x56, 0x83, 0xe2, 0xde, 0x73, 0x04, 0xa8,
- 0xaa, 0x63, 0x66, 0x3a, 0x3a, 0x07, 0xe9, 0x18, 0x2a, 0x83, 0x48, 0xe5,
- 0xc9, 0x25, 0x60, 0x99, 0x14, 0xce, 0xcc, 0x3a, 0x26, 0xb5, 0x22, 0x66,
- 0xe3, 0x2f, 0x02, 0xc5, 0x50, 0x31, 0x76, 0x43, 0x7b, 0x41, 0xf1, 0x69,
- 0x6c, 0x40, 0xc1, 0x1a, 0xd1, 0xaa, 0x6a, 0x5a, 0x90, 0xca, 0x36, 0x98,
- 0x74, 0xd8, 0x68, 0xee, 0x1d, 0x5e, 0x1a, 0xef, 0x64, 0x9b, 0x77, 0x34,
- 0x84, 0xd5, 0xe4, 0xcd, 0x61, 0x23, 0xa0, 0xb0, 0x61, 0x0c, 0x59, 0x89,
- 0xb8, 0xfc, 0x4e, 0xa5, 0x9d, 0x3c, 0x64, 0x0c, 0xc3, 0x76, 0xe0, 0x7a,
- 0xc1, 0x1c, 0x3d, 0x8d, 0x0c, 0x51, 0xe9, 0x3d, 0xab, 0x17, 0xe7, 0x45,
- 0x72, 0x48, 0x8c, 0x1a, 0x2c, 0xcb, 0xe6, 0x97, 0x0c, 0x5e, 0xe5, 0xf4,
- 0xe2, 0xdd, 0xf9, 0x04, 0x01, 0x6a, 0xda, 0xf2, 0xda, 0x44, 0xc4, 0x6a,
- 0x8b, 0x5b, 0x88, 0xc5, 0xd7, 0x2c, 0x02, 0xa1, 0x5f, 0xf7, 0xa4, 0xa8,
- 0xdd, 0xff, 0x5d, 0x14, 0xb5, 0xfb, 0xbf, 0x94, 0xa2, 0x76, 0x3f, 0x19,
- 0x45, 0xed, 0x3e, 0x8c, 0xa2, 0xac, 0x5a, 0x8c, 0x53, 0xbf, 0x07, 0x7d,
- 0xed, 0x3d, 0x8c, 0xbe, 0xf6, 0xfe, 0x77, 0xd1, 0xd7, 0xde, 0xff, 0x52,
- 0xfa, 0xda, 0xfb, 0x64, 0xf4, 0xb5, 0xf7, 0x6f, 0xa2, 0xaf, 0xfd, 0x87,
- 0xd1, 0xd7, 0xfe, 0x27, 0xa0, 0xaf, 0x71, 0x28, 0x9d, 0x72, 0x95, 0xb5,
- 0xd2, 0xc4, 0x69, 0x7d, 0x7c, 0x53, 0xe5, 0x6b, 0x93, 0xa3, 0xa2, 0xc6,
- 0x02, 0x05, 0x08, 0x73, 0x13, 0x66, 0xd0, 0x89, 0x83, 0xdf, 0x8b, 0xe9,
- 0xa1, 0xec, 0xad, 0x24, 0x9a, 0xfd, 0x4f, 0x46, 0x34, 0xfb, 0x0f, 0x22,
- 0x9a, 0xbd, 0x25, 0x44, 0xd3, 0xa8, 0xea, 0x6d, 0x2d, 0x7c, 0xe1, 0xe0,
- 0x79, 0x0f, 0x7b, 0x3c, 0xc1, 0x5c, 0x27, 0x14, 0x1b, 0xeb, 0xe4, 0x73,
- 0x2b, 0x54, 0xa3, 0xb6, 0xb1, 0xa0, 0x7e, 0xcb, 0xba, 0x6c, 0x12, 0x29,
- 0xed, 0xb0, 0xb1, 0xc0, 0xc2, 0x14, 0x40, 0xdb, 0x5c, 0x96, 0xd5, 0x17,
- 0xd6, 0x9a, 0x41, 0xaf, 0xd9, 0x25, 0x16, 0x7c, 0x5f, 0xb5, 0x33, 0x9f,
- 0x6a, 0x5f, 0x3e, 0x4a, 0x6e, 0x86, 0x13, 0x7a, 0xfe, 0x1f, 0x92, 0x9b,
- 0x61, 0x6e, 0xc2, 0x5a, 0xb8, 0x7b, 0xc3, 0xf0, 0xeb, 0x32, 0x9c, 0x22,
- 0x4e, 0x81, 0xa3, 0xe3, 0x8a, 0x87, 0x5c, 0xb9, 0xae, 0x17, 0x17, 0xbd,
- 0x36, 0xe8, 0xdb, 0x43, 0xeb, 0xbf, 0x9c, 0xcf, 0xf8, 0x44, 0xde, 0xb5,
- 0x61, 0xa4, 0x7c, 0x92, 0xfd, 0x3a, 0xb6, 0xb9, 0x72, 0x12, 0x53, 0xb8,
- 0x55, 0x2b, 0xa0, 0x09, 0xac, 0x43, 0x57, 0x40, 0x17, 0xb4, 0x1b, 0x5b,
- 0xd1, 0x8a, 0x6a, 0x5d, 0x7b, 0xf5, 0x4e, 0x87, 0x29, 0xd7, 0x20, 0xce,
- 0x96, 0xc7, 0x1e, 0x3b, 0x13, 0xfc, 0x14, 0xa1, 0x5b, 0xb6, 0xf5, 0xb5,
- 0xa9, 0xd0, 0x19, 0xd8, 0x9a, 0x66, 0x3f, 0xb3, 0x11, 0xf5, 0x9d, 0x4c,
- 0x86, 0x69, 0x9c, 0x94, 0xc3, 0x2c, 0x0b, 0x3b, 0x84, 0x35, 0x68, 0x3d,
- 0xa1, 0x84, 0xc3, 0x88, 0x9e, 0x8f, 0x30, 0x8e, 0x13, 0xf7, 0x06, 0x39,
- 0x26, 0x5e, 0xed, 0x54, 0x4f, 0x18, 0x37, 0x02, 0x18, 0xfb, 0x65, 0xae,
- 0x71, 0x38, 0x58, 0xf3, 0xd4, 0x4b, 0x3d, 0x05, 0xf6, 0x4d, 0xdf, 0xa7,
- 0xe5, 0xb0, 0xc8, 0xe6, 0x84, 0x2f, 0x92, 0xcd, 0x30, 0x87, 0x4f, 0x10,
- 0x4d, 0x24, 0x22, 0x8c, 0xfd, 0xb5, 0x12, 0x7b, 0x1c, 0x31, 0x5c, 0x00,
- 0x0a, 0x03, 0x8d, 0xe6, 0x3a, 0x71, 0x07, 0x9d, 0xe3, 0xf8, 0x3d, 0xe9,
- 0xf7, 0xf0, 0x36, 0x48, 0x1d, 0xa9, 0x13, 0x02, 0x1c, 0x69, 0x55, 0xdc,
- 0x65, 0xe9, 0x10, 0x08, 0x8d, 0x96, 0x4d, 0xb3, 0x49, 0x52, 0xc8, 0x71,
- 0xe0, 0x48, 0x5f, 0x34, 0x0e, 0x02, 0xcf, 0xc3, 0xb8, 0x94, 0x5c, 0x8a,
- 0xa5, 0x5d, 0xa5, 0xb7, 0x8c, 0xbb, 0x4f, 0xb3, 0x9d, 0xf9, 0x19, 0x98,
- 0x57, 0x8a, 0x4a, 0x7f, 0xd4, 0x3f, 0x7e, 0xf9, 0xb2, 0x86, 0xd1, 0x8f,
- 0xab, 0x46, 0x11, 0xc9, 0x5c, 0xc9, 0xaf, 0x9c, 0xc2, 0xf2, 0xa1, 0xc9,
- 0x52, 0x67, 0x19, 0x88, 0x3d, 0x98, 0x02, 0xbb, 0xa3, 0x78, 0x29, 0xe0,
- 0xbc, 0x19, 0x57, 0xc5, 0x2e, 0xd0, 0x55, 0x40, 0x66, 0x8c, 0x19, 0x0c,
- 0x33, 0xc3, 0xda, 0xdd, 0x57, 0x8b, 0x69, 0x32, 0x2b, 0xff, 0x43, 0x32,
- 0x3d, 0x5c, 0x8a, 0xfa, 0x8c, 0x36, 0x27, 0x67, 0x14, 0x93, 0xfc, 0x72,
- 0x9d, 0x8c, 0x8f, 0xd6, 0x94, 0x0f, 0x6e, 0x34, 0xc0, 0x63, 0x0d, 0x4f,
- 0x0d, 0x50, 0xbb, 0xc3, 0x63, 0xe9, 0xe8, 0xf8, 0x21, 0xff, 0xde, 0x69,
- 0x0c, 0xc0, 0xb2, 0x9d, 0x17, 0x24, 0x33, 0x97, 0x52, 0xaf, 0x1c, 0x83,
- 0xcf, 0xa7, 0xe4, 0xac, 0xc4, 0x7d, 0x92, 0x43, 0x09, 0xbb, 0xa6, 0xc3,
- 0xa5, 0x70, 0x41, 0xbd, 0x52, 0x02, 0x19, 0xdb, 0x12, 0xe4, 0xf8, 0x1f,
- 0x56, 0x18, 0xd2, 0xce, 0xfe, 0xa3, 0x17, 0x86, 0xb4, 0x4d, 0x3f, 0x8c,
- 0x90, 0x04, 0x17, 0xd4, 0xa5, 0x2a, 0x39, 0xb5, 0x6b, 0x8a, 0x69, 0xf7,
- 0xa4, 0x81, 0xff, 0xad, 0xbc, 0x98, 0x22, 0x95, 0x0c, 0x37, 0xbe, 0x07,
- 0x3b, 0x26, 0x05, 0xaf, 0xf3, 0x7b, 0xe4, 0xe2, 0x9e, 0xa5, 0xf5, 0x5e,
- 0x3c, 0x3d, 0x2d, 0x8a, 0xff, 0x24, 0xc6, 0xf7, 0xd9, 0x2a, 0xa6, 0x73,
- 0xef, 0x6b, 0xb2, 0x3a, 0x97, 0x2a, 0x85, 0xac, 0x1d, 0x4e, 0xc7, 0xe7,
- 0xa5, 0x8d, 0xdd, 0x79, 0xa1, 0xf3, 0x2e, 0xb3, 0x6b, 0x63, 0x9e, 0xdc,
- 0x89, 0x4b, 0xee, 0x08, 0xa4, 0x1c, 0x4b, 0x89, 0xc7, 0x43, 0x44, 0x3f,
- 0xfe, 0x26, 0x2c, 0x51, 0x1e, 0xb3, 0x2a, 0x19, 0x29, 0x16, 0x2e, 0x69,
- 0x8e, 0x6f, 0x03, 0x38, 0xf1, 0x9a, 0x09, 0x09, 0x3b, 0x46, 0x52, 0x65,
- 0x20, 0x99, 0x72, 0x96, 0x56, 0x68, 0x4f, 0x0f, 0x6f, 0xa3, 0x3b, 0xa0,
- 0xcf, 0x77, 0x7f, 0xb9, 0xa3, 0xe0, 0x1f, 0x31, 0x2e, 0xce, 0x9a, 0x1b,
- 0x9b, 0x0c, 0x4a, 0x5c, 0xf6, 0xca, 0x6d, 0xae, 0x1e, 0xac, 0x59, 0x47,
- 0x1b, 0xb9, 0xa0, 0x62, 0xf2, 0xf3, 0x49, 0x9e, 0x8c, 0x62, 0x0a, 0xd3,
- 0x0a, 0xb2, 0x21, 0x0e, 0x11, 0xb0, 0x38, 0x9d, 0xcd, 0xfa, 0x03, 0x84,
- 0x66, 0x2d, 0xe1, 0x9b, 0xb9, 0x00, 0xc4, 0x90, 0xda, 0xf7, 0xf6, 0xcd,
- 0x69, 0x2f, 0x98, 0xde, 0x5a, 0x88, 0xdb, 0x95, 0x5f, 0x22, 0x99, 0x29,
- 0x6b, 0x86, 0xda, 0xc1, 0xcb, 0x5d, 0x27, 0x0a, 0x3c, 0x99, 0xe3, 0x85,
- 0x18, 0xd0, 0x97, 0x9c, 0xde, 0xb9, 0x1e, 0xf3, 0xeb, 0xb3, 0x8b, 0x13,
- 0xbe, 0x0a, 0xd1, 0x76, 0x44, 0x31, 0x19, 0x0c, 0xbb, 0x87, 0xe2, 0xd3,
- 0x04, 0x19, 0xe0, 0xb6, 0x26, 0xb1, 0x04, 0xea, 0x96, 0x70, 0x26, 0x6f,
- 0xce, 0x31, 0xe7, 0x58, 0x7d, 0x65, 0x42, 0xb0, 0x8e, 0x4c, 0xe7, 0x54,
- 0x5f, 0x57, 0xf3, 0x9a, 0xeb, 0x93, 0x60, 0x06, 0xe8, 0xe9, 0xaf, 0x4e,
- 0x18, 0xfb, 0x55, 0x36, 0x7b, 0x6f, 0xc6, 0x55, 0x30, 0x31, 0xd9, 0xde,
- 0x34, 0xd7, 0xd7, 0x59, 0xbe, 0xb1, 0xaf, 0xd0, 0x28, 0x83, 0x5c, 0x94,
- 0xa9, 0xe8, 0xd1, 0xd4, 0xf6, 0x14, 0xc1, 0xc7, 0x27, 0xd9, 0xfb, 0x74,
- 0x72, 0x27, 0x50, 0x95, 0xe4, 0x81, 0xa6, 0x8d, 0x8d, 0x30, 0x20, 0x5a,
- 0xeb, 0x74, 0x34, 0x79, 0x2e, 0x2c, 0x48, 0x0d, 0x2c, 0x55, 0x02, 0x3e,
- 0x14, 0xfd, 0x7a, 0xb3, 0xbf, 0x25, 0x5a, 0x3b, 0x1f, 0x80, 0xf3, 0xb7,
- 0x17, 0x26, 0x43, 0x61, 0x99, 0x0f, 0xa9, 0x05, 0x0a, 0xde, 0x2e, 0x14,
- 0xde, 0x1d, 0x9b, 0x09, 0xe2, 0x9d, 0x5c, 0x4e, 0x52, 0x0a, 0xfe, 0xdc,
- 0x52, 0xbb, 0x03, 0xf0, 0x78, 0xa0, 0x05, 0xe7, 0x54, 0x7b, 0xe1, 0x9a,
- 0x7c, 0x3f, 0xe9, 0xc5, 0x14, 0x1d, 0x4d, 0x28, 0x8e, 0xb6, 0x4a, 0x31,
- 0xe0, 0xa0, 0xd9, 0x4f, 0xcf, 0xed, 0x87, 0xa1, 0x72, 0xb7, 0x9a, 0x32,
- 0x77, 0x72, 0x57, 0xbf, 0x16, 0x9c, 0xbe, 0x71, 0x9c, 0x5a, 0xe7, 0x45,
- 0x46, 0x86, 0x94, 0x4a, 0xe0, 0x34, 0x94, 0xbf, 0xe0, 0x33, 0x1c, 0xaa,
- 0x32, 0xc5, 0x20, 0x36, 0x68, 0x3b, 0x8d, 0x48, 0x80, 0x27, 0x6d, 0x5e,
- 0xd0, 0x52, 0xe4, 0x4e, 0x23, 0x7d, 0x55, 0x67, 0x8b, 0xf1, 0xc9, 0xf8,
- 0xcc, 0xc2, 0x0b, 0x8e, 0xc0, 0x2d, 0x0c, 0x2c, 0xe9, 0xdf, 0x1b, 0xe8,
- 0xeb, 0x68, 0x69, 0xab, 0x1f, 0x65, 0xbd, 0xdc, 0xf0, 0x20, 0x69, 0x1c,
- 0x11, 0x99, 0xe8, 0x68, 0xfb, 0x9a, 0xbd, 0x80, 0xfc, 0xd8, 0x8b, 0x4e,
- 0xf0, 0x71, 0x9f, 0x29, 0xfc, 0x91, 0x9a, 0x98, 0x27, 0x59, 0x61, 0x16,
- 0x09, 0xc3, 0xab, 0x12, 0x0e, 0x01, 0xa2, 0x07, 0x03, 0x59, 0xf4, 0xf0,
- 0x1d, 0x55, 0x26, 0xea, 0xf1, 0x19, 0x20, 0x0e, 0x65, 0xc0, 0x19, 0x3b,
- 0x78, 0x47, 0x0f, 0x60, 0xc6, 0x1d, 0x55, 0x96, 0x6a, 0x5d, 0x7a, 0x90,
- 0xf5, 0x97, 0x64, 0x92, 0xee, 0x92, 0xd5, 0x88, 0x83, 0x7c, 0xe4, 0x78,
- 0xe3, 0x1a, 0x08, 0x9d, 0x1b, 0x19, 0x12, 0x5b, 0x50, 0x70, 0x22, 0xda,
- 0x78, 0x3f, 0x78, 0xaa, 0x1e, 0x2e, 0x44, 0x50, 0xf0, 0xf8, 0xa9, 0x8e,
- 0x8a, 0x53, 0xb2, 0x1d, 0x6b, 0xa1, 0x70, 0x27, 0x64, 0x68, 0x5f, 0x04,
- 0xcb, 0xb8, 0xd3, 0x10, 0xd4, 0x64, 0x3a, 0x63, 0xc4, 0x26, 0xde, 0xef,
- 0x03, 0xe7, 0x2c, 0x72, 0x04, 0x71, 0xb2, 0xac, 0x84, 0x0a, 0xcb, 0x28,
- 0x18, 0xf1, 0xf2, 0x78, 0x7f, 0x6f, 0x2f, 0x62, 0xe9, 0x8c, 0x71, 0x9c,
- 0x39, 0x90, 0x1d, 0xcb, 0xf2, 0xa4, 0x09, 0x21, 0xd3, 0xf0, 0xdd, 0x36,
- 0xc4, 0x42, 0xd7, 0x1c, 0x1f, 0x05, 0x8b, 0xd9, 0x92, 0x34, 0x8e, 0x3b,
- 0x02, 0xd7, 0x26, 0xdc, 0x4f, 0xf9, 0xe8, 0xce, 0xb6, 0x0a, 0xe4, 0x50,
- 0x20, 0x07, 0x02, 0xbe, 0x21, 0x08, 0x42, 0x91, 0x84, 0xd5, 0x94, 0x41,
- 0x45, 0x42, 0x91, 0x98, 0xf9, 0x36, 0x18, 0x52, 0x41, 0x35, 0xa4, 0xb3,
- 0x19, 0xfd, 0x8a, 0xf5, 0xe7, 0x17, 0x05, 0xb2, 0x46, 0x4a, 0x66, 0x9a,
- 0xdd, 0x45, 0x37, 0x81, 0x64, 0xb5, 0x3a, 0x71, 0x7d, 0x78, 0x3e, 0x54,
- 0x5b, 0x18, 0xf4, 0x45, 0x7b, 0xe4, 0x71, 0xcb, 0xf3, 0x9d, 0x6c, 0x7a,
- 0xf9, 0xd3, 0x6e, 0xbc, 0xbb, 0xb3, 0xb3, 0xf3, 0x4b, 0x6f, 0x8e, 0xc4,
- 0xc9, 0x29, 0x12, 0xf0, 0x6f, 0xaf, 0x96, 0x47, 0xd5, 0x72, 0x87, 0x3b,
- 0xd3, 0xea, 0xfc, 0x13, 0x7f, 0xec, 0x76, 0xf1, 0xdf, 0xbd, 0x7f, 0x75,
- 0xd6, 0xbb, 0xc7, 0xbf, 0xc7, 0x13, 0x88, 0x51, 0xfd, 0x24, 0x49, 0x99,
- 0xf4, 0xf1, 0x9a, 0x18, 0x05, 0x3d, 0x1e, 0xc2, 0x3f, 0x5e, 0xf8, 0x83,
- 0x16, 0xd8, 0x49, 0x98, 0xce, 0xb9, 0x1a, 0x63, 0x5a, 0x0d, 0xaf, 0x7c,
- 0xc1, 0x0e, 0x2e, 0x0d, 0xd8, 0x77, 0xc4, 0xa0, 0x92, 0xf8, 0x3e, 0x38,
- 0x50, 0xcd, 0xfd, 0x56, 0xcf, 0x8b, 0x34, 0x0b, 0x4d, 0x6e, 0x96, 0x5b,
- 0xba, 0x35, 0x98, 0x2e, 0xc6, 0x6c, 0xb8, 0x25, 0x78, 0x99, 0x39, 0x35,
- 0x8e, 0x03, 0xfb, 0x63, 0xbc, 0x39, 0x3c, 0x95, 0xc3, 0xab, 0x74, 0x2a,
- 0x1c, 0x7a, 0x53, 0x93, 0xaf, 0x3b, 0xb8, 0x44, 0xb0, 0x42, 0x9d, 0xc0,
- 0x2d, 0xda, 0x19, 0xeb, 0x57, 0x30, 0x93, 0x2d, 0x29, 0x9e, 0x60, 0x6e,
- 0x56, 0xca, 0x17, 0x48, 0xa2, 0xcb, 0x05, 0xda, 0x03, 0x07, 0x89, 0x5c,
- 0x61, 0x5a, 0x52, 0x24, 0x2c, 0x81, 0x20, 0x17, 0x4e, 0x0b, 0xba, 0x37,
- 0xcb, 0xc5, 0x20, 0x16, 0x99, 0x92, 0x46, 0x44, 0x19, 0x1a, 0x68, 0xf7,
- 0x7b, 0xf6, 0xf2, 0xf8, 0x82, 0xeb, 0x22, 0xc0, 0xbf, 0x88, 0xc6, 0x06,
- 0x3f, 0x10, 0x5c, 0xab, 0x09, 0x7a, 0x4e, 0x18, 0x6d, 0x94, 0x7d, 0x44,
- 0xc7, 0x5e, 0xca, 0xce, 0x10, 0x8b, 0x32, 0xe9, 0xea, 0xae, 0x6c, 0xd8,
- 0x8d, 0x72, 0x3c, 0x23, 0x37, 0x59, 0x99, 0x86, 0x70, 0x1e, 0x6a, 0x62,
- 0xa4, 0xa9, 0x7c, 0xf1, 0xe8, 0x71, 0x6f, 0x87, 0xa7, 0x88, 0x6b, 0x28,
- 0xa7, 0x46, 0x10, 0x4f, 0xc9, 0x9b, 0xa1, 0xe1, 0x91, 0x49, 0x38, 0x6c,
- 0xdb, 0x0c, 0xa5, 0x1b, 0x21, 0xf6, 0x0c, 0xa5, 0x5d, 0x57, 0x79, 0xac,
- 0xdf, 0x3a, 0x69, 0xb8, 0xc1, 0xc2, 0x4d, 0x8a, 0x8d, 0x26, 0xd5, 0xe6,
- 0x44, 0x1c, 0xe7, 0x8d, 0x15, 0x0c, 0x12, 0x2e, 0xd9, 0xc4, 0xbc, 0x5c,
- 0xee, 0x38, 0x46, 0x79, 0xf3, 0xce, 0xbf, 0xc4, 0xf1, 0xd3, 0x6a, 0xb7,
- 0x25, 0x33, 0x19, 0x50, 0xd6, 0xb3, 0x99, 0x02, 0x12, 0x77, 0x49, 0x52,
- 0xcc, 0x86, 0x0b, 0xb4, 0xdb, 0x21, 0xd9, 0x61, 0xe5, 0x10, 0x0a, 0xc7,
- 0x2f, 0x4b, 0xdc, 0x2f, 0x5c, 0x14, 0xc2, 0x1b, 0x80, 0xc1, 0x36, 0xaf,
- 0x51, 0x84, 0x96, 0x63, 0x0d, 0x50, 0x94, 0x01, 0xfb, 0x9e, 0x30, 0x3e,
- 0x11, 0x93, 0x90, 0xf9, 0xdf, 0xc1, 0xfd, 0x3f, 0xed, 0x45, 0xdf, 0xa5,
- 0x37, 0x49, 0x91, 0xfe, 0x57, 0x80, 0x7f, 0x01, 0xe5, 0x7d, 0xb2, 0x3c,
- 0x4e, 0x6a, 0x7d, 0x2d, 0x76, 0x61, 0xf4, 0x54, 0xe6, 0x17, 0xb5, 0x5c,
- 0x4e, 0xc3, 0x31, 0xbe, 0xa3, 0x5b, 0xbd, 0x14, 0x8d, 0x2c, 0x04, 0xb3,
- 0x2a, 0x08, 0x83, 0x92, 0x3d, 0xcf, 0xe6, 0x4c, 0x15, 0xfa, 0x7b, 0xe8,
- 0x57, 0xe4, 0x93, 0x40, 0x3b, 0x8f, 0xb3, 0xd7, 0x20, 0xb6, 0xd4, 0x5b,
- 0x6c, 0x2a, 0x1b, 0xe7, 0xa0, 0x93, 0x27, 0x44, 0x29, 0x6c, 0x9d, 0x22,
- 0xab, 0x96, 0x38, 0x88, 0x3a, 0x7f, 0xc2, 0x58, 0xaa, 0xaf, 0x8f, 0x3a,
- 0xbd, 0x7a, 0x1c, 0xb2, 0x07, 0xd9, 0xb6, 0xc0, 0x7d, 0xa2, 0x9b, 0xb3,
- 0x6e, 0x4e, 0x90, 0xdb, 0x12, 0x6f, 0x67, 0x9c, 0x3e, 0x89, 0x5e, 0x48,
- 0xc9, 0x37, 0xd9, 0x6c, 0x7f, 0x4f, 0xf6, 0x71, 0x89, 0x5b, 0xcf, 0x5d,
- 0x91, 0x8f, 0x6e, 0x82, 0x32, 0x2d, 0xaf, 0xa9, 0x0a, 0x7e, 0xe7, 0xc3,
- 0x8f, 0x6e, 0xbf, 0x39, 0x39, 0x7a, 0xf6, 0xea, 0x64, 0x05, 0xd8, 0xa4,
- 0xe8, 0xdd, 0xb8, 0x4c, 0x9e, 0xda, 0x7d, 0x24, 0xbb, 0x5f, 0xc4, 0xc9,
- 0x25, 0xae, 0x60, 0x30, 0x74, 0x4e, 0x34, 0x6f, 0xbd, 0x42, 0x48, 0xe0,
- 0xc1, 0x57, 0x8e, 0xe8, 0x15, 0x8e, 0xa4, 0x34, 0x39, 0x9f, 0x6e, 0x51,
- 0x1a, 0x75, 0x0b, 0xfb, 0x6c, 0x43, 0x04, 0x83, 0xc1, 0x24, 0x99, 0xbd,
- 0x37, 0x58, 0x1d, 0xdc, 0x52, 0x17, 0xf1, 0x25, 0xb9, 0x06, 0x80, 0xfd,
- 0x50, 0xf2, 0x40, 0x43, 0x52, 0xdb, 0x3f, 0x16, 0xa8, 0x13, 0x4d, 0x93,
- 0xe2, 0xbd, 0xa2, 0x8f, 0x08, 0x88, 0x88, 0x4b, 0x8b, 0xa6, 0x34, 0x05,
- 0xcb, 0x32, 0xb1, 0x02, 0x8d, 0x04, 0xd2, 0x6e, 0xae, 0x4c, 0xe1, 0x1f,
- 0x83, 0x46, 0xd2, 0xc2, 0x8a, 0xd0, 0xbd, 0x8d, 0xb2, 0x26, 0xde, 0x66,
- 0x94, 0xf7, 0x3d, 0x9d, 0x57, 0x77, 0x46, 0x28, 0x25, 0xfb, 0x47, 0x73,
- 0x7d, 0x37, 0x3b, 0x9d, 0x2d, 0x4a, 0xe9, 0x0b, 0x68, 0x49, 0x8c, 0x31,
- 0x28, 0xde, 0x05, 0x9e, 0x41, 0x8e, 0x3b, 0x8d, 0x0a, 0x0c, 0x67, 0xea,
- 0xb1, 0x0e, 0x48, 0x1e, 0x35, 0x13, 0x39, 0x4f, 0x95, 0x91, 0x48, 0x32,
- 0x6b, 0x2a, 0x5d, 0xb8, 0xb6, 0x91, 0x82, 0x6c, 0x98, 0xaa, 0x4c, 0x29,
- 0x21, 0x16, 0x38, 0x42, 0x30, 0xdc, 0xe1, 0x68, 0x31, 0xda, 0xec, 0x44,
- 0x9d, 0xad, 0x96, 0x60, 0x42, 0x67, 0x02, 0xf5, 0xac, 0x97, 0x7f, 0x63,
- 0x04, 0xfc, 0x51, 0xd4, 0x61, 0x7a, 0xdb, 0xd9, 0x79, 0xba, 0xa6, 0xd8,
- 0xf4, 0xa2, 0x6b, 0x37, 0x9c, 0xcf, 0x82, 0xbb, 0xbd, 0xce, 0x69, 0x58,
- 0xe8, 0x6e, 0x81, 0x08, 0x05, 0xff, 0x1e, 0x68, 0xd4, 0x61, 0x9b, 0x30,
- 0x55, 0x49, 0xc1, 0xec, 0xc8, 0xd4, 0x07, 0x32, 0x41, 0x8f, 0xa2, 0xb4,
- 0x22, 0xd3, 0x11, 0xf5, 0xce, 0x06, 0x97, 0x86, 0xe2, 0xdc, 0x7b, 0xd1,
- 0x99, 0x29, 0xe0, 0x85, 0x4c, 0xbb, 0x2a, 0x86, 0x32, 0x56, 0xfa, 0x5d,
- 0x92, 0x73, 0x93, 0x49, 0x2b, 0x11, 0xa2, 0xe3, 0x6a, 0x8e, 0xb9, 0x19,
- 0xa6, 0x94, 0xa2, 0x95, 0xda, 0x71, 0x78, 0xae, 0xcd, 0x04, 0xa6, 0x0f,
- 0xa4, 0xca, 0x85, 0x04, 0x3c, 0xec, 0x8d, 0x66, 0xa0, 0xa5, 0x31, 0xf6,
- 0xb4, 0xcd, 0xb5, 0x94, 0x50, 0xfa, 0x09, 0xd0, 0xd5, 0x62, 0xee, 0xa8,
- 0x94, 0x5c, 0xf1, 0x0a, 0xa8, 0x78, 0x92, 0xcf, 0xba, 0x5e, 0x71, 0x5a,
- 0x0c, 0x5e, 0x17, 0x0f, 0x18, 0xe5, 0xb8, 0x4e, 0xe7, 0x39, 0xc8, 0x30,
- 0x83, 0x49, 0x6a, 0x02, 0x0d, 0xf8, 0x4d, 0xe5, 0x0e, 0xb6, 0x73, 0x3c,
- 0xc8, 0xde, 0xa9, 0xb5, 0xd8, 0x20, 0x34, 0x54, 0xb3, 0x11, 0x40, 0xf4,
- 0x5d, 0x06, 0xf6, 0xf4, 0xa6, 0x04, 0x12, 0x84, 0x5c, 0x05, 0x22, 0xbd,
- 0x64, 0x1c, 0x5f, 0x5b, 0xba, 0x6b, 0x75, 0x05, 0x5b, 0xe2, 0x5a, 0xbf,
- 0xa5, 0xe0, 0x30, 0x1c, 0xf2, 0xe6, 0x36, 0xd2, 0xa1, 0xe7, 0x83, 0x8a,
- 0x2b, 0x8c, 0x52, 0x04, 0x25, 0x04, 0x61, 0xfa, 0xaf, 0x45, 0x38, 0x40,
- 0x25, 0x29, 0x9d, 0xb1, 0xe9, 0x32, 0xd7, 0xca, 0xd9, 0xd1, 0xb0, 0xf0,
- 0x12, 0x7a, 0x47, 0x48, 0x2c, 0x40, 0xc0, 0xdc, 0xa2, 0x2c, 0xce, 0x1d,
- 0x26, 0xf5, 0xb2, 0x30, 0x82, 0x79, 0xcb, 0x70, 0x93, 0x92, 0xc8, 0x48,
- 0x8b, 0x53, 0xda, 0x95, 0x2f, 0x7d, 0x7c, 0x53, 0x9e, 0xa9, 0xad, 0x51,
- 0x29, 0x87, 0x51, 0x30, 0x4f, 0x49, 0x3c, 0xba, 0xce, 0x78, 0xfd, 0x39,
- 0xcd, 0x22, 0x81, 0x6b, 0x93, 0xa6, 0xc4, 0x29, 0xd1, 0x9e, 0xcf, 0x20,
- 0x4d, 0x18, 0xe4, 0x10, 0xc5, 0x74, 0x44, 0xc4, 0xcf, 0xc8, 0x6f, 0xc0,
- 0x97, 0xf1, 0x95, 0x56, 0x47, 0x28, 0x52, 0xcc, 0x46, 0x46, 0xe4, 0x54,
- 0x9a, 0x45, 0xa2, 0x18, 0x77, 0x5e, 0x70, 0x16, 0x1b, 0x56, 0x0a, 0xe3,
- 0x7e, 0x45, 0x02, 0x9b, 0x21, 0x77, 0x61, 0x49, 0x0a, 0x61, 0x17, 0xb1,
- 0x47, 0xbe, 0xcf, 0x3d, 0x49, 0xaa, 0x17, 0x84, 0xbe, 0x62, 0x21, 0x23,
- 0xfa, 0x4b, 0x5a, 0x0c, 0xd2, 0x22, 0x87, 0x79, 0xff, 0xed, 0xb1, 0xa6,
- 0x15, 0x6b, 0x29, 0x0b, 0xd6, 0x0a, 0xe4, 0x84, 0xe2, 0x31, 0xe2, 0xa1,
- 0x7b, 0xb1, 0x2b, 0x8c, 0x4d, 0x84, 0x6b, 0xab, 0x6f, 0xba, 0x9a, 0x41,
- 0x93, 0x42, 0xbb, 0x64, 0x0b, 0x02, 0xea, 0x43, 0xbe, 0x3c, 0x0e, 0x5e,
- 0x31, 0x06, 0x98, 0x98, 0x02, 0x37, 0x48, 0xe4, 0x24, 0x20, 0xdf, 0x28,
- 0x1f, 0x54, 0x09, 0xcd, 0xcf, 0x0c, 0xfb, 0x22, 0x63, 0x73, 0xed, 0x4b,
- 0xc5, 0x9e, 0xf1, 0x01, 0x0f, 0x4c, 0x96, 0x0a, 0x8e, 0x25, 0x43, 0xb2,
- 0x69, 0xc6, 0xb2, 0xa3, 0x36, 0x57, 0x5e, 0xa1, 0x42, 0x84, 0x66, 0x2d,
- 0xb2, 0xef, 0x85, 0x0d, 0x16, 0xb4, 0x66, 0xaf, 0x2f, 0x4e, 0x5f, 0x75,
- 0x1b, 0xa7, 0x4e, 0x04, 0x5b, 0xa7, 0xbc, 0xac, 0x72, 0x1c, 0x21, 0x29,
- 0xdf, 0x79, 0x51, 0x44, 0xb2, 0x1c, 0x26, 0xd8, 0x8b, 0xdc, 0xdf, 0xb4,
- 0x72, 0x5d, 0xc9, 0x87, 0x29, 0x04, 0xc9, 0x50, 0x4d, 0x7e, 0xbc, 0xac,
- 0xbe, 0x25, 0x0a, 0x69, 0xb0, 0xa4, 0xad, 0x27, 0x2b, 0x29, 0xdc, 0x30,
- 0xc0, 0x6b, 0xa4, 0x8a, 0x02, 0x5d, 0x01, 0x4b, 0xea, 0x35, 0xda, 0x5e,
- 0x79, 0x2a, 0xc8, 0x5d, 0xd2, 0x8c, 0x0e, 0xce, 0xb3, 0xfc, 0x66, 0x16,
- 0x9f, 0x22, 0x76, 0x73, 0x74, 0x9a, 0x5f, 0xe2, 0x01, 0x7a, 0x1d, 0x36,
- 0xd8, 0xbe, 0x3d, 0x7f, 0x1d, 0x6d, 0xa2, 0xd8, 0x83, 0xf5, 0x4d, 0xa4,
- 0x5e, 0x36, 0x3e, 0xba, 0x25, 0x46, 0x93, 0x92, 0x45, 0x61, 0x19, 0x4d,
- 0x37, 0x3a, 0xf9, 0xf1, 0xe8, 0xd5, 0xf9, 0xe9, 0xc9, 0xcf, 0x9c, 0xd7,
- 0xe1, 0x4d, 0x07, 0x3f, 0xfe, 0xd6, 0xb9, 0xbd, 0x28, 0x04, 0x06, 0x43,
- 0xe4, 0x60, 0x24, 0xc1, 0xc2, 0xa2, 0xb8, 0xf5, 0xcc, 0x15, 0x6d, 0x19,
- 0x96, 0xf3, 0x97, 0xb1, 0x56, 0x7f, 0x26, 0x86, 0x35, 0xc8, 0x66, 0x68,
- 0xf0, 0x21, 0x10, 0x55, 0x2c, 0xcb, 0x08, 0x03, 0x23, 0xf2, 0xf7, 0x2a,
- 0xb5, 0xe8, 0x71, 0xe8, 0x46, 0xaf, 0x35, 0x95, 0xb1, 0x4b, 0x9b, 0x8e,
- 0x47, 0xf0, 0x59, 0x76, 0x49, 0x21, 0x3b, 0x8d, 0x14, 0x2e, 0x31, 0x04,
- 0x20, 0x1d, 0x34, 0xe9, 0x19, 0xab, 0xdc, 0x68, 0x88, 0x58, 0x99, 0x4e,
- 0xd8, 0x3d, 0xd3, 0x7a, 0x35, 0x32, 0x87, 0xa4, 0x5d, 0x24, 0xa8, 0x9c,
- 0xe6, 0xe8, 0x14, 0x3a, 0x07, 0x75, 0x57, 0xde, 0x40, 0xb1, 0x0e, 0x30,
- 0x85, 0xf0, 0xa5, 0x20, 0x79, 0x1b, 0x86, 0xeb, 0x1f, 0x44, 0x9d, 0x78,
- 0x11, 0x1d, 0x74, 0x96, 0x48, 0x30, 0x9f, 0xcb, 0x25, 0x47, 0xfb, 0x56,
- 0x1c, 0x94, 0x29, 0x30, 0xf9, 0x35, 0x3d, 0x72, 0xb3, 0x6e, 0x5d, 0x18,
- 0x08, 0xab, 0x70, 0xae, 0x93, 0xad, 0xd1, 0xd4, 0x2b, 0xba, 0x5f, 0x69,
- 0x1c, 0xea, 0x85, 0x1b, 0x2d, 0x0a, 0xb5, 0x6f, 0x1a, 0x0f, 0x00, 0xfb,
- 0x71, 0x81, 0x01, 0x09, 0xef, 0x27, 0x5c, 0xbc, 0x4b, 0xdf, 0x86, 0x4d,
- 0x94, 0x05, 0x37, 0x0f, 0x07, 0xf3, 0x81, 0xde, 0xb6, 0x01, 0x64, 0xc4,
- 0xce, 0x65, 0xbc, 0x7c, 0x3a, 0x14, 0xa3, 0x26, 0x16, 0x96, 0x7c, 0x04,
- 0xea, 0xdb, 0x11, 0x47, 0x20, 0x10, 0xb8, 0x98, 0xdf, 0x1c, 0x6d, 0xe2,
- 0xc6, 0x37, 0x1b, 0x12, 0xf4, 0xd7, 0x11, 0x19, 0x0d, 0xef, 0x90, 0x0e,
- 0x6b, 0x74, 0x98, 0x35, 0x8f, 0xa3, 0x07, 0x16, 0xb2, 0x71, 0xb8, 0x11,
- 0xc9, 0x83, 0xfa, 0x64, 0xf3, 0xc6, 0xa4, 0xf7, 0x24, 0xb8, 0x4b, 0x61,
- 0xcd, 0x35, 0x98, 0x99, 0x01, 0x1c, 0xe0, 0x36, 0x87, 0x7b, 0x15, 0xb9,
- 0xc8, 0x0c, 0x4f, 0xed, 0x84, 0xea, 0x73, 0x4a, 0xf0, 0x58, 0x12, 0xb0,
- 0x7d, 0x9b, 0x91, 0xcb, 0x58, 0xff, 0xa0, 0x63, 0x4d, 0x46, 0xa3, 0x8c,
- 0x25, 0x32, 0x72, 0x95, 0x5b, 0xc2, 0x82, 0x3e, 0x29, 0xcf, 0xb6, 0xe5,
- 0x08, 0x73, 0xd2, 0x2c, 0x5a, 0xcf, 0x48, 0x43, 0x0a, 0xa2, 0x15, 0xba,
- 0x70, 0x78, 0x1c, 0xf8, 0xe3, 0xd3, 0x21, 0x6f, 0x1f, 0x9d, 0x4c, 0xcd,
- 0x9f, 0x9d, 0xe4, 0x39, 0xba, 0x1d, 0x70, 0x07, 0xdb, 0x7a, 0x57, 0x5f,
- 0x93, 0xb5, 0xf7, 0xf1, 0xf5, 0x6f, 0xdc, 0xe1, 0xa4, 0xca, 0xe0, 0x93,
- 0x22, 0xa2, 0x88, 0xe9, 0xa7, 0xdb, 0x02, 0x5d, 0x6c, 0x2a, 0x05, 0x98,
- 0xc8, 0x93, 0x46, 0xdc, 0x8f, 0xa0, 0x88, 0x7c, 0x76, 0xc7, 0xbc, 0x14,
- 0xb5, 0x27, 0x98, 0x56, 0x03, 0x25, 0x42, 0xa4, 0x21, 0xae, 0xbc, 0x7f,
- 0x2c, 0xb2, 0x74, 0x79, 0x54, 0x8a, 0x9e, 0x9f, 0x75, 0xd0, 0xdc, 0xfd,
- 0xdc, 0xf1, 0xa6, 0x35, 0xc0, 0x0b, 0xfc, 0xb8, 0x9f, 0x2d, 0x48, 0x07,
- 0xb3, 0x16, 0x37, 0x71, 0x71, 0x16, 0xeb, 0x56, 0x5f, 0xc1, 0x50, 0x0e,
- 0x62, 0x26, 0xfb, 0x59, 0xb4, 0x36, 0x76, 0xa5, 0xc5, 0x99, 0xff, 0x37,
- 0x61, 0x48, 0x01, 0x20, 0x98, 0x67, 0x12, 0x71, 0xe4, 0x06, 0x98, 0x08,
- 0xbe, 0x1f, 0xbb, 0x83, 0x44, 0xed, 0xd7, 0x08, 0x57, 0x0d, 0x02, 0xce,
- 0xc8, 0x59, 0xeb, 0xd9, 0x6c, 0x2e, 0x1c, 0x3d, 0x83, 0x63, 0x9d, 0x4c,
- 0x64, 0x38, 0x39, 0xfc, 0x30, 0x3c, 0x46, 0x9b, 0xc0, 0xbc, 0x7c, 0x62,
- 0x25, 0xda, 0xb6, 0x7f, 0x2b, 0xb3, 0x30, 0xbd, 0x8f, 0x49, 0x6b, 0x70,
- 0xec, 0xef, 0x24, 0xfd, 0x00, 0xdd, 0x5a, 0xd0, 0xf8, 0x7b, 0xcd, 0xf8,
- 0xc3, 0x96, 0xd3, 0xdb, 0x74, 0xb8, 0xa8, 0x82, 0xc8, 0x6e, 0x17, 0x57,
- 0x5a, 0x87, 0x95, 0x87, 0xb4, 0x49, 0x3c, 0x44, 0x6a, 0xff, 0x75, 0xce,
- 0xb5, 0x44, 0xe1, 0x41, 0x67, 0x4b, 0xa2, 0x04, 0x29, 0x64, 0xc7, 0xd6,
- 0x2e, 0xf4, 0x4e, 0x3a, 0x46, 0x5c, 0xcb, 0x90, 0x8b, 0x94, 0xfd, 0x64,
- 0x36, 0xdc, 0x37, 0xd8, 0x3d, 0x9c, 0xf0, 0x22, 0xd8, 0xfb, 0x73, 0xf6,
- 0x10, 0x39, 0x9d, 0xcb, 0xe1, 0x1a, 0xaa, 0xf3, 0xa8, 0xf4, 0xb8, 0xa0,
- 0xd7, 0x73, 0x4e, 0xa0, 0x7f, 0xd1, 0xd1, 0x35, 0xb0, 0x06, 0xb2, 0x72,
- 0xe9, 0xab, 0xba, 0xf8, 0x1e, 0x04, 0x41, 0x32, 0xa9, 0xe2, 0xf2, 0x7a,
- 0x18, 0x86, 0x08, 0x11, 0x8c, 0x3f, 0x53, 0xfb, 0xe3, 0x08, 0x1e, 0xee,
- 0x5f, 0x0f, 0x0f, 0xd4, 0x0a, 0xe2, 0x5c, 0xdb, 0xde, 0x64, 0x8f, 0xca,
- 0xbb, 0xd9, 0xf0, 0xea, 0xd9, 0xeb, 0x7e, 0xb8, 0x69, 0xa2, 0x71, 0x1a,
- 0x3e, 0x59, 0x0a, 0x13, 0x7a, 0x1a, 0xe4, 0x0b, 0xac, 0x56, 0xcd, 0x8e,
- 0x79, 0x29, 0x34, 0x8e, 0xe5, 0xbe, 0x8e, 0x9c, 0x6f, 0xc3, 0xcd, 0xd5,
- 0x5f, 0x31, 0xc6, 0x76, 0xf4, 0xb1, 0x32, 0x23, 0x14, 0xa1, 0x92, 0x40,
- 0x24, 0xe2, 0x04, 0x57, 0x24, 0x68, 0xe9, 0x36, 0x3b, 0x8b, 0x2e, 0xe0,
- 0x74, 0xa4, 0x2d, 0x16, 0x4e, 0xc6, 0x81, 0x57, 0x5b, 0x2f, 0xaf, 0x26,
- 0x59, 0x6d, 0xa9, 0x2c, 0x70, 0xb4, 0x7c, 0xa9, 0x81, 0xbd, 0x44, 0xeb,
- 0xd8, 0x9a, 0x78, 0xea, 0xbd, 0xc6, 0x8e, 0xaf, 0x92, 0xe2, 0x38, 0x9f,
- 0x5d, 0x87, 0x47, 0xd5, 0x08, 0x2c, 0x67, 0xc3, 0x9b, 0xd3, 0xef, 0x10,
- 0xde, 0x4e, 0x86, 0x15, 0x15, 0xa3, 0xa5, 0x7a, 0xd6, 0x9a, 0x3c, 0x14,
- 0x6e, 0x6e, 0x13, 0xc3, 0x0f, 0xa2, 0x93, 0xef, 0x8e, 0x9f, 0xbd, 0x3c,
- 0xde, 0x6a, 0x8e, 0xe4, 0x19, 0xe3, 0xef, 0xb2, 0x8d, 0x97, 0x6f, 0x6a,
- 0xde, 0x28, 0x43, 0x76, 0xce, 0x20, 0xe8, 0x61, 0xe1, 0x5b, 0x2c, 0xf6,
- 0xb6, 0x74, 0x39, 0x45, 0x04, 0xaf, 0xb4, 0x28, 0xf2, 0x82, 0xf8, 0xd3,
- 0x7b, 0x0d, 0x84, 0x9b, 0xa6, 0x53, 0x8c, 0xa8, 0x30, 0xc2, 0x0d, 0x97,
- 0x84, 0x25, 0xb1, 0x9d, 0x3a, 0x8f, 0xc3, 0xcd, 0x8d, 0x50, 0x3b, 0x40,
- 0x51, 0x89, 0xf3, 0xf8, 0x3d, 0xbb, 0xff, 0x65, 0x99, 0x60, 0x6d, 0x1e,
- 0x62, 0x45, 0x34, 0xdc, 0x18, 0xb5, 0xbf, 0xfe, 0x51, 0xff, 0xb4, 0x29,
- 0x43, 0x1b, 0xde, 0x04, 0xb7, 0x05, 0x6a, 0xcc, 0x8c, 0x7c, 0x19, 0xee,
- 0xd5, 0x94, 0xa9, 0x39, 0x7e, 0x73, 0xf4, 0x0a, 0xc8, 0x8c, 0xc3, 0x37,
- 0xfc, 0xc0, 0x7f, 0x5a, 0x1a, 0xf8, 0x98, 0x46, 0xe1, 0x6d, 0xf5, 0xf7,
- 0xfd, 0x7e, 0x7c, 0x74, 0xfe, 0x32, 0xdc, 0x85, 0x7c, 0x29, 0x65, 0xdc,
- 0xd9, 0xa3, 0xed, 0xb5, 0xf0, 0xa2, 0x7f, 0xd1, 0xd7, 0x1f, 0x3a, 0x26,
- 0x3a, 0x91, 0x69, 0x59, 0x83, 0x3c, 0xd7, 0xc7, 0x81, 0xe6, 0xf6, 0xf8,
- 0xc7, 0xf6, 0x9e, 0x79, 0xc1, 0x00, 0xad, 0xe9, 0xfa, 0xf4, 0x02, 0xaf,
- 0xed, 0xcb, 0x6b, 0xfb, 0xcb, 0x5e, 0x0b, 0xbc, 0xd7, 0x8f, 0x43, 0x85,
- 0xe5, 0x3d, 0x0e, 0x90, 0x05, 0x52, 0x25, 0x96, 0x95, 0x4c, 0x7f, 0xf9,
- 0xec, 0x75, 0xbd, 0x01, 0x13, 0xa4, 0x80, 0xdf, 0xc4, 0x0a, 0xd3, 0x26,
- 0x42, 0xa0, 0xa3, 0x5e, 0x06, 0x0c, 0xc5, 0xe7, 0xd7, 0x4f, 0x9c, 0xd8,
- 0x0c, 0xdc, 0x48, 0xfa, 0xc8, 0x28, 0x31, 0xde, 0x1b, 0xaa, 0xfc, 0x87,
- 0x27, 0x65, 0x4c, 0x03, 0x7f, 0x7b, 0xec, 0x91, 0xd8, 0xb2, 0xbd, 0x3c,
- 0x4d, 0x8a, 0xcb, 0x34, 0x10, 0x47, 0xe1, 0xad, 0x95, 0x99, 0xaa, 0x0d,
- 0xee, 0x82, 0xdb, 0x73, 0x82, 0xaf, 0x73, 0x14, 0x45, 0x57, 0x82, 0x29,
- 0xe8, 0xa3, 0xa2, 0x8d, 0xbd, 0xc1, 0x5c, 0xf7, 0xbe, 0xff, 0xce, 0x1b,
- 0x06, 0x50, 0xeb, 0x6f, 0xc8, 0xbb, 0x0d, 0x03, 0x1b, 0xa5, 0x2e, 0xef,
- 0xda, 0xbc, 0xce, 0x92, 0xe8, 0xf2, 0xb7, 0x6c, 0x4e, 0xe0, 0x6c, 0x98,
- 0x91, 0xb6, 0x45, 0x77, 0xb7, 0xc9, 0x5b, 0x08, 0x77, 0xc7, 0x03, 0x32,
- 0x8c, 0x6f, 0xf9, 0x4a, 0xbc, 0x42, 0x21, 0xae, 0xdf, 0x3f, 0xbd, 0xf7,
- 0x42, 0x18, 0xa9, 0xaf, 0x9e, 0x18, 0xd6, 0xcc, 0x2f, 0x43, 0x15, 0x5a,
- 0x7e, 0xac, 0xb3, 0x31, 0xf8, 0xc2, 0xbb, 0x1f, 0xbe, 0x0b, 0x8f, 0x86,
- 0x5a, 0x1b, 0xa5, 0x88, 0x7f, 0x29, 0xd1, 0x5a, 0xe8, 0xc7, 0x02, 0x5d,
- 0x7f, 0x04, 0x37, 0xe4, 0x64, 0x2e, 0xc5, 0xe4, 0x5b, 0xdb, 0x3e, 0xc7,
- 0x6a, 0xad, 0xfc, 0x03, 0x9f, 0xbb, 0x52, 0x3e, 0x7e, 0xbe, 0x18, 0x4c,
- 0x60, 0xed, 0xfb, 0x8b, 0xf1, 0x38, 0xbb, 0x8d, 0x4e, 0x33, 0xa9, 0x77,
- 0x2b, 0x1a, 0x96, 0x66, 0x21, 0x65, 0xe5, 0x92, 0x5b, 0x82, 0x33, 0x60,
- 0xe8, 0x84, 0xd6, 0xd0, 0x4a, 0x2c, 0xf6, 0x26, 0x4b, 0x76, 0x9d, 0x39,
- 0xf7, 0x55, 0x2e, 0xc6, 0x71, 0xdb, 0xe6, 0xdd, 0xa6, 0xa5, 0xaf, 0xbc,
- 0xf7, 0xcf, 0x5f, 0x9f, 0x7c, 0x7f, 0xa6, 0x3f, 0xd6, 0x59, 0xd1, 0x3e,
- 0xcf, 0x1a, 0x7f, 0x98, 0xe4, 0x56, 0x20, 0x22, 0x84, 0xe3, 0xc5, 0xcb,
- 0xdf, 0x16, 0x8a, 0x26, 0xdb, 0xb5, 0x36, 0xd3, 0x65, 0xc8, 0x77, 0x3f,
- 0x08, 0xd9, 0x65, 0x37, 0x5d, 0xf4, 0x77, 0xc2, 0xbf, 0xe8, 0xde, 0xef,
- 0xd3, 0x9a, 0x81, 0x70, 0x1d, 0xc2, 0xa4, 0xee, 0x03, 0x6f, 0x95, 0x1f,
- 0x4b, 0xc7, 0x2a, 0xa0, 0x2c, 0x2d, 0xd2, 0x11, 0x21, 0xdd, 0xf4, 0xb9,
- 0x3c, 0xcc, 0x1b, 0x0e, 0x00, 0x3c, 0x17, 0x53, 0xca, 0xd6, 0xb2, 0x25,
- 0x69, 0x59, 0x68, 0xd8, 0xf9, 0x60, 0x69, 0x4a, 0xbc, 0x28, 0x5f, 0xd1,
- 0x05, 0x19, 0x7e, 0x91, 0xaf, 0x6a, 0xb9, 0x42, 0xcd, 0xb5, 0xba, 0x74,
- 0x5e, 0x6f, 0x67, 0x19, 0x7a, 0xf9, 0x5a, 0x80, 0xe1, 0xf8, 0x4b, 0xc3,
- 0x8a, 0x73, 0xe3, 0xce, 0x0f, 0xb5, 0x73, 0xdb, 0xa7, 0x98, 0xd5, 0xb2,
- 0xb5, 0xad, 0x5b, 0x89, 0x8e, 0x2d, 0xeb, 0x97, 0x54, 0x8b, 0xd8, 0xf8,
- 0x5b, 0x59, 0x8d, 0x56, 0x71, 0x20, 0x7c, 0x66, 0x4b, 0x12, 0xa2, 0x6d,
- 0xee, 0x1a, 0xb3, 0x99, 0xf0, 0x30, 0x56, 0xf1, 0x9e, 0x9a, 0x83, 0xd9,
- 0x20, 0x04, 0xde, 0x0b, 0x44, 0x3e, 0x54, 0x1f, 0x2c, 0xa0, 0x4a, 0xd6,
- 0x73, 0x9c, 0x3d, 0x1d, 0xd2, 0x2a, 0x8f, 0xa4, 0x99, 0xf9, 0x00, 0x70,
- 0x57, 0xec, 0x29, 0x9b, 0xcc, 0x59, 0xbd, 0x7b, 0x85, 0x7f, 0x4e, 0x93,
- 0xd9, 0xc2, 0xf5, 0x3b, 0xc5, 0x37, 0xf8, 0x29, 0x55, 0xb3, 0xc1, 0x70,
- 0x8e, 0xe8, 0x90, 0xf5, 0xb8, 0x6f, 0x02, 0x96, 0x27, 0xee, 0x50, 0x91,
- 0xb4, 0x5d, 0x8d, 0x8f, 0x2c, 0x0f, 0xe4, 0xa9, 0x4f, 0xc6, 0x28, 0x4a,
- 0x26, 0xc6, 0xd7, 0x39, 0xe2, 0x3b, 0xc7, 0xcf, 0xfd, 0x2d, 0x7a, 0xaa,
- 0xee, 0x51, 0x2b, 0x91, 0x98, 0x8d, 0xc5, 0xfb, 0x4c, 0xa9, 0xa3, 0x58,
- 0x6e, 0x2e, 0x9f, 0x91, 0xfd, 0x9c, 0x0b, 0xe3, 0xb0, 0xf7, 0x1f, 0x78,
- 0xcb, 0x28, 0x64, 0x79, 0xc2, 0x40, 0xb4, 0xd9, 0x62, 0x3a, 0x40, 0x17,
- 0xef, 0xd8, 0x20, 0x75, 0x97, 0xec, 0x40, 0x92, 0x5e, 0x7c, 0xab, 0x77,
- 0x12, 0x00, 0x0a, 0x9d, 0xc0, 0x62, 0x10, 0xf8, 0x5f, 0x87, 0xc7, 0x83,
- 0x58, 0x55, 0x28, 0x55, 0xaa, 0xd7, 0x95, 0xf2, 0x16, 0xd4, 0xdc, 0xc0,
- 0x0a, 0xae, 0xb4, 0xcf, 0x6e, 0x91, 0x40, 0xca, 0x83, 0x28, 0x6c, 0xdf,
- 0x6a, 0xfa, 0x43, 0x47, 0x83, 0x27, 0x6b, 0xd6, 0x56, 0xd3, 0x9c, 0x59,
- 0x95, 0x00, 0xda, 0x35, 0xc7, 0x92, 0x52, 0xc2, 0x3c, 0xee, 0x1a, 0x34,
- 0x1a, 0x77, 0x82, 0x6a, 0xa3, 0x5d, 0x83, 0x48, 0x05, 0xbc, 0xba, 0x65,
- 0x4a, 0x7b, 0x51, 0x3f, 0x6e, 0xb9, 0x18, 0x94, 0x55, 0x56, 0x2d, 0x7c,
- 0x76, 0x23, 0xc1, 0x33, 0x6c, 0x4a, 0xcd, 0xc5, 0x6f, 0x63, 0x01, 0xbc,
- 0xc9, 0x10, 0x85, 0xf9, 0x7a, 0x55, 0x97, 0x16, 0x94, 0x53, 0x4f, 0x06,
- 0x8c, 0xc0, 0x3b, 0xc9, 0x6f, 0xbc, 0x82, 0x0f, 0xa8, 0x21, 0xdb, 0xd1,
- 0xd5, 0xb1, 0xbb, 0xa0, 0x81, 0xdf, 0xff, 0x53, 0xbf, 0x7c, 0x87, 0x8b,
- 0xf5, 0x2f, 0x5d, 0x2c, 0x19, 0x76, 0xe2, 0xb9, 0x4c, 0xc8, 0xf8, 0xf7,
- 0x7b, 0x5a, 0x94, 0x5f, 0x31, 0x12, 0x9c, 0x57, 0x06, 0xcb, 0xe1, 0x50,
- 0x73, 0xbf, 0xef, 0x19, 0x69, 0x4d, 0x9b, 0x40, 0xf0, 0x57, 0x36, 0x31,
- 0x0c, 0xee, 0x3c, 0xfb, 0x13, 0xd2, 0xe0, 0xcf, 0xb3, 0x2e, 0xd2, 0x71,
- 0x52, 0xc0, 0x40, 0x2e, 0xc9, 0xf5, 0x85, 0x65, 0x11, 0x68, 0x1b, 0x7f,
- 0x2e, 0xa4, 0xe2, 0x4a, 0x95, 0x0c, 0xc4, 0xdf, 0xce, 0x9f, 0x87, 0xd5,
- 0x77, 0x93, 0x63, 0xa3, 0xeb, 0x5c, 0xab, 0xe6, 0x04, 0x2d, 0x25, 0xc5,
- 0xc8, 0xd8, 0x0a, 0x07, 0x5a, 0x1a, 0x81, 0x49, 0xb5, 0xb9, 0xf7, 0x54,
- 0xbe, 0x40, 0xca, 0xa6, 0xe8, 0xab, 0xa4, 0x1b, 0xd9, 0x30, 0x9c, 0xdf,
- 0xff, 0x93, 0xf3, 0x67, 0xfe, 0xe5, 0x7b, 0x48, 0x79, 0x1c, 0x35, 0x53,
- 0xa5, 0xd8, 0xef, 0x89, 0xe8, 0x28, 0x4e, 0x8e, 0x0c, 0xae, 0xb3, 0x2a,
- 0x32, 0xb8, 0xbc, 0x64, 0x77, 0x0d, 0xe5, 0x5c, 0xfc, 0x9e, 0xdb, 0xf8,
- 0x27, 0x6f, 0x91, 0x86, 0x8c, 0xb1, 0x56, 0x9d, 0x49, 0xfe, 0x00, 0x1a,
- 0x64, 0xa9, 0x1e, 0x9a, 0x7a, 0x14, 0x39, 0x1a, 0x6c, 0x1c, 0x50, 0xa3,
- 0xc5, 0x3e, 0xb0, 0xe9, 0x3a, 0x97, 0x4c, 0x2c, 0x3f, 0xb9, 0x09, 0xb6,
- 0xf8, 0x2c, 0x9b, 0x70, 0x8a, 0x19, 0xe2, 0x4e, 0x30, 0xf9, 0xf8, 0x49,
- 0x7a, 0x5c, 0x8c, 0x1b, 0x76, 0x9f, 0xe8, 0x9e, 0x98, 0xb9, 0x93, 0x24,
- 0xd2, 0x15, 0x4d, 0x4b, 0x82, 0xb6, 0x19, 0x68, 0x59, 0xfa, 0xba, 0xb9,
- 0x42, 0x66, 0xd8, 0x5c, 0x79, 0xda, 0x66, 0x60, 0x07, 0xd3, 0x29, 0xfa,
- 0x49, 0x4d, 0xb2, 0x85, 0x94, 0x8f, 0xfb, 0xb2, 0x86, 0xdd, 0xa0, 0xa2,
- 0xde, 0xd9, 0xc5, 0xc9, 0x01, 0x0d, 0xf9, 0xf7, 0x71, 0x79, 0x37, 0x1d,
- 0xe4, 0x13, 0xe1, 0x72, 0x48, 0xeb, 0x40, 0xb0, 0xfa, 0x19, 0x9f, 0x49,
- 0x8a, 0x66, 0x8a, 0x9d, 0x6a, 0x03, 0xbe, 0x93, 0x9d, 0x16, 0x98, 0xcc,
- 0x4b, 0xf9, 0x90, 0xf1, 0x1b, 0x11, 0x04, 0x02, 0x56, 0xf3, 0xf7, 0x91,
- 0x22, 0xf0, 0x03, 0x17, 0x26, 0x0f, 0xd2, 0x8d, 0x75, 0xff, 0x89, 0x81,
- 0x38, 0x18, 0xa7, 0x10, 0xa2, 0x57, 0xe7, 0x60, 0x1a, 0x9b, 0x50, 0xa8,
- 0x4e, 0x83, 0x6c, 0xc0, 0x3b, 0xc2, 0x74, 0xe3, 0x57, 0x8f, 0xf9, 0xa3,
- 0xf8, 0x02, 0x3f, 0x92, 0x90, 0x6f, 0x25, 0x24, 0xe4, 0x06, 0x8a, 0x3a,
- 0xd2, 0x0d, 0x40, 0x71, 0x46, 0xa1, 0xfc, 0x11, 0xd4, 0x8c, 0x81, 0xb1,
- 0x7b, 0xe3, 0x24, 0x9a, 0x9f, 0x96, 0x97, 0xce, 0xb0, 0xf9, 0x18, 0x4c,
- 0x31, 0x4c, 0xfa, 0x32, 0xed, 0x45, 0x9b, 0x6e, 0xf5, 0xdd, 0xc7, 0xbd,
- 0x1d, 0xcf, 0x5a, 0x91, 0xde, 0xc2, 0x59, 0xa2, 0x28, 0x7e, 0xd3, 0x04,
- 0x5c, 0x1f, 0x58, 0x2f, 0x15, 0xb6, 0xc6, 0x7c, 0x29, 0x93, 0xb0, 0x11,
- 0x72, 0x9b, 0x4d, 0x48, 0xd3, 0xf0, 0xff, 0x5a, 0x3a, 0x55, 0xfe, 0xff,
- 0x8e, 0x25, 0x01, 0x38, 0x11, 0xcb, 0x9b, 0xa1, 0x38, 0x0d, 0x90, 0x28,
- 0xa6, 0x89, 0x64, 0x8a, 0x70, 0x6a, 0x88, 0xe1, 0xbc, 0x5a, 0x87, 0x8e,
- 0x32, 0x99, 0x81, 0x2b, 0xf4, 0x56, 0x35, 0x87, 0x07, 0x33, 0x13, 0x08,
- 0x43, 0x09, 0xb3, 0x47, 0x47, 0x51, 0x36, 0x36, 0x6a, 0x75, 0x85, 0x18,
- 0x32, 0xa8, 0x95, 0x60, 0xcb, 0x2b, 0xf6, 0x28, 0xd7, 0x18, 0x00, 0x63,
- 0x49, 0x6d, 0x84, 0x7d, 0x16, 0x36, 0x4a, 0x34, 0x40, 0x82, 0x51, 0x28,
- 0x72, 0x26, 0x7a, 0x49, 0x7e, 0x28, 0x66, 0x46, 0x0b, 0xf6, 0x63, 0xe1,
- 0x41, 0xcb, 0xa7, 0xe8, 0x10, 0xad, 0x32, 0xeb, 0x2e, 0x5c, 0x31, 0x3a,
- 0x33, 0x14, 0x66, 0x18, 0x6e, 0x20, 0xaa, 0x47, 0x4f, 0xe3, 0x6a, 0xfe,
- 0x0e, 0xe8, 0xb2, 0xb8, 0x7b, 0x47, 0xf9, 0x58, 0x17, 0x8e, 0xeb, 0x9d,
- 0x3e, 0xa0, 0xc5, 0x61, 0xb4, 0xe3, 0xc5, 0x1c, 0x87, 0x43, 0xe7, 0x6b,
- 0x92, 0xb3, 0xe5, 0x29, 0x9f, 0xad, 0x5c, 0x27, 0x27, 0xe1, 0xc7, 0xa9,
- 0x55, 0xf1, 0x45, 0x90, 0x07, 0xbe, 0xfb, 0xb5, 0x44, 0x51, 0x12, 0xee,
- 0xc9, 0xe8, 0xcf, 0xfd, 0xb3, 0xd7, 0x51, 0x3e, 0xc0, 0x82, 0xef, 0x22,
- 0xe5, 0xc0, 0xe9, 0x27, 0x06, 0xde, 0xac, 0xd5, 0x15, 0x12, 0x15, 0xfc,
- 0x23, 0xa5, 0xdc, 0xdd, 0xd2, 0xf3, 0xdf, 0xf0, 0x4e, 0x67, 0x26, 0x6a,
- 0xe1, 0x8f, 0x49, 0x2a, 0x2a, 0x56, 0x6c, 0x57, 0x91, 0xdc, 0x95, 0x5d,
- 0x29, 0x66, 0xac, 0x58, 0xbb, 0x09, 0xfb, 0x6e, 0x8c, 0x14, 0x6c, 0xaa,
- 0xd9, 0xe1, 0x69, 0x5e, 0xde, 0x9c, 0xc8, 0x66, 0xe6, 0x55, 0x12, 0x36,
- 0x7c, 0xf5, 0x21, 0x70, 0x40, 0xe4, 0x42, 0x20, 0x6b, 0x8d, 0x9d, 0x44,
- 0x86, 0xfb, 0x73, 0x93, 0x16, 0x38, 0xa6, 0x2e, 0x85, 0xee, 0xdc, 0xe3,
- 0xd8, 0x72, 0x94, 0x07, 0xe6, 0xdd, 0xce, 0xe7, 0x69, 0x02, 0x8b, 0x84,
- 0x7e, 0x30, 0xbd, 0x3b, 0x6e, 0x32, 0xcc, 0x73, 0x39, 0xb9, 0x45, 0x60,
- 0x70, 0x0e, 0xa5, 0x5e, 0xac, 0x58, 0x22, 0xac, 0x3b, 0x94, 0x60, 0xbf,
- 0x4e, 0x41, 0xb5, 0xf4, 0x8e, 0x16, 0xfb, 0xb2, 0xc8, 0x17, 0x73, 0x8e,
- 0x61, 0x77, 0xe2, 0xab, 0x56, 0x8c, 0xce, 0x70, 0x7d, 0xc5, 0xd0, 0x40,
- 0x19, 0x51, 0x83, 0x02, 0x39, 0x0f, 0x88, 0x65, 0x34, 0xb6, 0xe9, 0xad,
- 0x18, 0x5d, 0xc9, 0xf8, 0x4f, 0xb2, 0x77, 0x44, 0x6a, 0x20, 0xee, 0x04,
- 0x72, 0x39, 0xd0, 0x2f, 0xf5, 0xce, 0xf2, 0xca, 0x3a, 0xab, 0x34, 0x84,
- 0x48, 0x0f, 0xd0, 0x90, 0xb8, 0x80, 0x33, 0xc6, 0x7c, 0x66, 0xb3, 0xd5,
- 0xe7, 0x94, 0x3c, 0xf5, 0x36, 0xb4, 0x48, 0x33, 0xd2, 0x38, 0x12, 0x19,
- 0xf3, 0x10, 0x0c, 0xb1, 0xb6, 0x8c, 0x8b, 0x53, 0x48, 0x9b, 0xe3, 0x6a,
- 0x1f, 0x8e, 0xf6, 0xb8, 0x6a, 0x79, 0x78, 0x5a, 0x9b, 0x12, 0xeb, 0x44,
- 0x76, 0xc5, 0x2d, 0xe6, 0x79, 0xc4, 0x0e, 0x1a, 0xf5, 0xf6, 0xc2, 0xa3,
- 0x33, 0x8a, 0x21, 0x8b, 0x82, 0xf8, 0x99, 0x83, 0x27, 0xcf, 0x1b, 0x88,
- 0xe3, 0x8b, 0xcc, 0x85, 0xa0, 0x88, 0xcc, 0x2b, 0x58, 0xb9, 0x7b, 0xbf,
- 0x3d, 0xde, 0x09, 0x5c, 0x35, 0xca, 0x44, 0x54, 0xe6, 0x0e, 0xf3, 0x12,
- 0x7b, 0xc5, 0xbf, 0x4f, 0x03, 0xc8, 0x01, 0x94, 0x76, 0xf9, 0x2e, 0x9b,
- 0xbb, 0xe2, 0xec, 0xcb, 0xf3, 0x08, 0x1d, 0xe6, 0x84, 0xcb, 0x22, 0xd7,
- 0x23, 0x67, 0x67, 0x62, 0xc0, 0xb0, 0x7c, 0x40, 0xdc, 0x7b, 0xe5, 0x0a,
- 0x0f, 0x19, 0x80, 0x9a, 0x5c, 0x2e, 0x0e, 0xa8, 0x54, 0xac, 0xbc, 0x40,
- 0x3d, 0x30, 0x68, 0x5f, 0x7d, 0x14, 0x88, 0xe2, 0x89, 0x7c, 0xc3, 0x6c,
- 0xcb, 0x0c, 0xc8, 0x86, 0x60, 0x66, 0xc0, 0xc3, 0x8d, 0xe8, 0x43, 0xab,
- 0x32, 0x3a, 0xe3, 0x76, 0x06, 0xb6, 0x62, 0x06, 0xb6, 0xb2, 0xfd, 0x17,
- 0x5e, 0x00, 0x21, 0xe1, 0x8d, 0xd6, 0x18, 0x15, 0xee, 0xbe, 0x7c, 0xae,
- 0x81, 0x70, 0x8d, 0x5e, 0x99, 0xb9, 0xaf, 0x5e, 0x3a, 0x09, 0x1b, 0xae,
- 0x49, 0x39, 0x7b, 0x01, 0x2a, 0x80, 0xe9, 0xe9, 0x09, 0x29, 0x51, 0x24,
- 0xe5, 0xd9, 0xe2, 0x74, 0x41, 0x01, 0x8a, 0xcc, 0x37, 0x54, 0x28, 0x52,
- 0x46, 0xe3, 0x5e, 0x11, 0x2b, 0x46, 0x11, 0x3a, 0x94, 0xd8, 0xa3, 0xd1,
- 0x2e, 0xcc, 0xa1, 0x94, 0x35, 0xf6, 0x6e, 0x2d, 0x7f, 0x05, 0x56, 0x5c,
- 0x3a, 0xaa, 0x95, 0x6c, 0x62, 0x00, 0x59, 0x42, 0xe9, 0x1e, 0x08, 0x62,
- 0x45, 0xbc, 0xaf, 0x90, 0x0a, 0xbd, 0xa0, 0x28, 0x18, 0x6c, 0xb0, 0xd5,
- 0x57, 0x22, 0x96, 0x7c, 0x5c, 0x94, 0xea, 0x71, 0x7e, 0xd9, 0x27, 0xc1,
- 0x9d, 0x52, 0xab, 0x24, 0xa4, 0xd8, 0x1c, 0xb6, 0xfb, 0x48, 0x7d, 0xfb,
- 0x2d, 0x9b, 0xa0, 0x63, 0x2b, 0xcd, 0x26, 0xd0, 0x72, 0xe8, 0x87, 0xcc,
- 0xa8, 0x50, 0xe4, 0x1d, 0xe7, 0x98, 0x50, 0x6a, 0x89, 0xe3, 0x9e, 0xa4,
- 0xd0, 0xec, 0x13, 0x48, 0x97, 0x04, 0x62, 0x87, 0xfc, 0x28, 0xe4, 0x4e,
- 0xa5, 0x72, 0x95, 0xca, 0x28, 0x1f, 0x63, 0x46, 0xa1, 0xc6, 0x57, 0xf9,
- 0x0d, 0x61, 0xe4, 0x47, 0xab, 0x79, 0xb6, 0xb2, 0xe4, 0x48, 0x14, 0x63,
- 0xda, 0x05, 0x4e, 0x98, 0xfd, 0x2d, 0x2d, 0x72, 0x11, 0xd0, 0xa3, 0x0f,
- 0x94, 0x96, 0x89, 0xe5, 0xbe, 0x2b, 0xcb, 0x09, 0xb2, 0xd1, 0x6c, 0x7c,
- 0x07, 0x8b, 0x58, 0xb6, 0xd6, 0xa6, 0x68, 0xcc, 0x14, 0xd3, 0x9d, 0x64,
- 0xae, 0x8e, 0x5f, 0x68, 0xa3, 0x24, 0x23, 0xf2, 0x3c, 0x45, 0x05, 0x32,
- 0x2d, 0xaa, 0x6c, 0x9c, 0xad, 0xe2, 0x51, 0x28, 0x79, 0x53, 0xf7, 0x36,
- 0x76, 0x4e, 0xee, 0x14, 0xa3, 0xd8, 0xf4, 0xa2, 0x1d, 0xb1, 0xb4, 0xaf,
- 0x5c, 0xb8, 0x5a, 0x4b, 0xd8, 0x88, 0x0d, 0x17, 0xad, 0x9f, 0xe6, 0xc7,
- 0xa1, 0xd3, 0xac, 0xf4, 0xf2, 0x8e, 0x64, 0x7f, 0x8e, 0xf1, 0x94, 0x24,
- 0x6e, 0x73, 0x32, 0xb0, 0x51, 0x3a, 0xce, 0xaa, 0x48, 0x83, 0x20, 0xac,
- 0x65, 0xef, 0x56, 0x8a, 0xa9, 0x42, 0x7d, 0x91, 0x43, 0x99, 0xd1, 0x26,
- 0x6e, 0xe4, 0x8d, 0x94, 0x9f, 0x9d, 0x26, 0xb7, 0x31, 0x7d, 0x57, 0x46,
- 0x6d, 0xce, 0x04, 0x87, 0x01, 0x6e, 0x49, 0x22, 0x91, 0xaa, 0x94, 0x6c,
- 0x02, 0x41, 0x42, 0x13, 0xfc, 0xaf, 0x21, 0x06, 0xa9, 0x48, 0x0e, 0x63,
- 0xb2, 0xea, 0xe4, 0x4b, 0xf9, 0xed, 0x1b, 0x0a, 0x47, 0x26, 0x23, 0xdc,
- 0x25, 0x15, 0x7f, 0xca, 0x7b, 0xfe, 0x3a, 0x61, 0xcd, 0x81, 0x1a, 0xf1,
- 0x47, 0x6f, 0xf8, 0xb3, 0x03, 0x23, 0x2f, 0x99, 0x88, 0x55, 0x55, 0x32,
- 0xd7, 0xa0, 0xd6, 0x27, 0xc1, 0xcd, 0x41, 0xf1, 0xde, 0x5c, 0x96, 0x17,
- 0x56, 0xe2, 0x87, 0x1b, 0xb3, 0x71, 0x61, 0xba, 0xa6, 0x16, 0x3c, 0x7b,
- 0xeb, 0xdc, 0x34, 0xf6, 0x7e, 0x94, 0xeb, 0x91, 0x6e, 0xc7, 0xbc, 0x08,
- 0xdf, 0x7f, 0x32, 0x2a, 0xbd, 0x00, 0x2f, 0x58, 0x23, 0xa7, 0x61, 0x7d,
- 0xda, 0xfb, 0x4f, 0x59, 0xbd, 0x08, 0x8e, 0x9f, 0x42, 0x68, 0x34, 0x5c,
- 0x68, 0x13, 0x2d, 0x99, 0x54, 0x10, 0x0e, 0x9d, 0x55, 0x33, 0x93, 0x68,
- 0x4a, 0x7d, 0x07, 0x12, 0x61, 0x24, 0x35, 0xb5, 0x46, 0x1f, 0x44, 0x83,
- 0xf2, 0xc5, 0x26, 0xd6, 0xa8, 0x63, 0x03, 0xfe, 0x10, 0xe1, 0xbc, 0x46,
- 0xc6, 0xc5, 0xb4, 0x75, 0x8f, 0x4b, 0x05, 0x67, 0xe2, 0x8a, 0x73, 0x9c,
- 0xe2, 0xb9, 0xf2, 0x70, 0x63, 0xcd, 0xb5, 0x77, 0x23, 0x18, 0x3e, 0xe5,
- 0xb9, 0x73, 0xe4, 0x4f, 0x5e, 0x61, 0x24, 0xdd, 0x14, 0x96, 0x85, 0xb8,
- 0x19, 0xd7, 0x32, 0x14, 0xa9, 0x91, 0xac, 0x41, 0xfa, 0xfc, 0x4a, 0x79,
- 0xd1, 0xad, 0xc9, 0x48, 0xc5, 0xee, 0x64, 0xc7, 0x31, 0x53, 0x7c, 0x9b,
- 0xeb, 0x2b, 0xea, 0x2e, 0xdc, 0xf3, 0xe6, 0x2f, 0xd0, 0xc3, 0x46, 0xc1,
- 0x65, 0x8c, 0x5b, 0xd7, 0x52, 0x9a, 0x98, 0xa6, 0xa5, 0x09, 0x5a, 0xcb,
- 0xa6, 0xa5, 0x78, 0x6a, 0x66, 0x46, 0xd4, 0xe4, 0x8a, 0x71, 0xb4, 0xf6,
- 0x68, 0x04, 0x05, 0xde, 0x5d, 0xee, 0x32, 0xbc, 0x94, 0xb4, 0x92, 0x8e,
- 0x79, 0x7c, 0x79, 0x8f, 0x2e, 0xb3, 0x0d, 0x77, 0x2d, 0x48, 0x05, 0x2d,
- 0x93, 0x95, 0x9e, 0x6b, 0xbb, 0xa8, 0xb8, 0x01, 0xff, 0xb1, 0x7b, 0x08,
- 0x17, 0xe6, 0xc8, 0xd2, 0x26, 0x4e, 0x2b, 0xc1, 0x88, 0xeb, 0x4b, 0xbb,
- 0x5d, 0xfc, 0x8c, 0x63, 0x9a, 0x82, 0x0b, 0xb1, 0x5c, 0x14, 0x1c, 0xe6,
- 0xb9, 0x5a, 0x08, 0x53, 0x87, 0x91, 0x69, 0x0f, 0xeb, 0x78, 0xe2, 0x3a,
- 0xcd, 0x29, 0x34, 0x09, 0xe3, 0xef, 0x5a, 0x46, 0x65, 0x56, 0x9b, 0xf6,
- 0x59, 0x87, 0xa5, 0x70, 0x11, 0x1f, 0x69, 0x54, 0xdc, 0xda, 0x7d, 0xc6,
- 0xf4, 0xa1, 0xc2, 0x4a, 0x53, 0x3c, 0x21, 0xf9, 0xc3, 0x88, 0x0d, 0xf7,
- 0xb0, 0xa0, 0xad, 0x92, 0x4f, 0x6a, 0x22, 0xc8, 0x6a, 0x46, 0xe6, 0xc8,
- 0x27, 0x5f, 0xf8, 0x9e, 0x28, 0xa0, 0x20, 0xf3, 0xe7, 0x73, 0x4e, 0x6a,
- 0x44, 0xd3, 0x43, 0x9e, 0x21, 0xad, 0xcf, 0xba, 0x62, 0x12, 0xb4, 0xee,
- 0xc5, 0x9a, 0x2f, 0x64, 0x79, 0xe7, 0x2d, 0x8e, 0x12, 0x12, 0x2c, 0xeb,
- 0xdc, 0xf4, 0x49, 0x48, 0xe6, 0x16, 0x87, 0x64, 0x6d, 0x70, 0x3c, 0xba,
- 0x25, 0xc3, 0x53, 0xd0, 0x96, 0x87, 0x0e, 0x4e, 0xeb, 0xd3, 0x9b, 0x93,
- 0xca, 0x62, 0xce, 0x68, 0x95, 0x08, 0x4f, 0xd9, 0xf9, 0xdd, 0x88, 0xbc,
- 0x3f, 0x36, 0xc1, 0x9d, 0x54, 0x44, 0x92, 0xca, 0xa4, 0x6c, 0x35, 0x46,
- 0xaa, 0xb0, 0x8b, 0x75, 0x85, 0xe5, 0x82, 0x1e, 0xd7, 0x3c, 0x5e, 0x46,
- 0x53, 0x8b, 0x56, 0x2f, 0x19, 0x5e, 0x78, 0xef, 0x92, 0xf9, 0x5c, 0x2e,
- 0xf5, 0xd5, 0x94, 0xcb, 0x35, 0x17, 0x11, 0xa5, 0x8b, 0x0e, 0x03, 0x97,
- 0xb7, 0xac, 0xf2, 0xfc, 0xbd, 0x4d, 0x70, 0x25, 0x1d, 0x0d, 0xe1, 0x6e,
- 0x57, 0x52, 0xee, 0x24, 0x52, 0xfa, 0xdf, 0xee, 0xf7, 0x5f, 0x6c, 0xa7,
- 0xd5, 0x50, 0xa5, 0x8b, 0x6d, 0x9b, 0xee, 0x64, 0x2c, 0xa9, 0x2b, 0x9a,
- 0x23, 0xf9, 0x06, 0x71, 0x21, 0x88, 0x86, 0x8d, 0x37, 0xba, 0x17, 0x9c,
- 0x72, 0xdd, 0x82, 0xf4, 0x91, 0x27, 0x25, 0x55, 0xd4, 0x75, 0x2e, 0x0d,
- 0x5b, 0x30, 0x0d, 0x11, 0x05, 0x6c, 0xb6, 0x2e, 0xad, 0x3e, 0x8e, 0x2b,
- 0xa6, 0x82, 0x36, 0x50, 0xcc, 0x1c, 0x58, 0xcc, 0xff, 0xed, 0xbb, 0x47,
- 0xde, 0x35, 0x34, 0xb1, 0x73, 0xfc, 0x2b, 0x79, 0xd2, 0x56, 0x0f, 0x78,
- 0x8e, 0x86, 0x3f, 0x96, 0xe2, 0x56, 0x8f, 0xf8, 0xfe, 0x43, 0xbe, 0xf7,
- 0x88, 0x19, 0xcf, 0x4c, 0xe5, 0x48, 0x1c, 0x30, 0x39, 0x90, 0x25, 0xd4,
- 0x89, 0x0e, 0xdf, 0x20, 0xbd, 0xf4, 0x43, 0x1c, 0x83, 0x37, 0xb3, 0x06,
- 0x84, 0x26, 0x94, 0x95, 0x9b, 0xc6, 0xa6, 0x5d, 0xc9, 0x6e, 0x2c, 0x25,
- 0x11, 0xf2, 0x32, 0x5f, 0x39, 0xba, 0x44, 0xaa, 0xf7, 0x22, 0x2f, 0x77,
- 0xfc, 0xe3, 0x43, 0xa5, 0x1f, 0x07, 0x23, 0x03, 0x48, 0x67, 0x55, 0x73,
- 0x28, 0xb9, 0x32, 0xa2, 0xcb, 0x35, 0x86, 0x26, 0xb7, 0xec, 0x85, 0xd1,
- 0xb0, 0x56, 0x91, 0x07, 0xc6, 0x2b, 0x4f, 0x26, 0x46, 0x23, 0x5b, 0x79,
- 0x8f, 0xc0, 0x1d, 0x34, 0xd7, 0xe5, 0x41, 0xba, 0x20, 0x32, 0x61, 0x32,
- 0xed, 0xea, 0xc1, 0xe8, 0x46, 0xf7, 0x26, 0x05, 0xca, 0x5b, 0xb2, 0x16,
- 0x08, 0x5b, 0xe4, 0x97, 0xac, 0xe8, 0x54, 0x23, 0x1e, 0xbf, 0x4c, 0x86,
- 0xaa, 0x64, 0xaf, 0x1a, 0x1d, 0x99, 0x91, 0x7a, 0x8d, 0x45, 0xb0, 0x98,
- 0xbf, 0x46, 0x0a, 0xe0, 0x3c, 0x81, 0x7b, 0xdd, 0xc1, 0x88, 0x2c, 0x8a,
- 0xeb, 0x64, 0xdc, 0x19, 0xce, 0x62, 0x95, 0xe1, 0xe5, 0xa7, 0x71, 0x7c,
- 0xe6, 0xc3, 0x80, 0xa9, 0x17, 0x28, 0x9f, 0xda, 0x93, 0x50, 0x3b, 0x08,
- 0xd1, 0x1a, 0x72, 0xa5, 0x41, 0xfb, 0xb0, 0x39, 0x1c, 0x8d, 0x03, 0xcf,
- 0x51, 0x14, 0x93, 0x32, 0x5f, 0x2d, 0x88, 0xd1, 0x7a, 0xd2, 0x8c, 0x38,
- 0xd1, 0x16, 0xf3, 0x89, 0x38, 0x0c, 0x02, 0xf4, 0x33, 0x3c, 0x06, 0x95,
- 0x12, 0xc0, 0x6a, 0xb3, 0x3e, 0xec, 0x48, 0x78, 0x03, 0x44, 0x47, 0xa8,
- 0xab, 0x0c, 0xfe, 0x2a, 0x2b, 0x32, 0x20, 0xe7, 0xa3, 0x50, 0xd6, 0xdd,
- 0x7d, 0x48, 0x02, 0x35, 0xd6, 0xc0, 0xc9, 0x63, 0x4b, 0x4e, 0x6d, 0x67,
- 0x0d, 0x8c, 0x0a, 0xa9, 0xc4, 0x29, 0x45, 0x7c, 0xdc, 0xc3, 0xa1, 0x0d,
- 0x2d, 0x81, 0x82, 0xed, 0xb5, 0x94, 0xcd, 0x46, 0xe9, 0x6d, 0x4d, 0xcd,
- 0xcf, 0x6c, 0x24, 0x70, 0x37, 0xda, 0x89, 0xe9, 0x81, 0x95, 0xba, 0xc7,
- 0xb3, 0x34, 0x26, 0xdc, 0x34, 0x14, 0x49, 0xa0, 0x59, 0x2c, 0x84, 0x7b,
- 0x95, 0xe8, 0xb1, 0x2b, 0x39, 0x6f, 0xda, 0xe9, 0x68, 0xd5, 0xa1, 0xa3,
- 0x28, 0xa4, 0x22, 0x03, 0xce, 0x1a, 0x69, 0xb3, 0x84, 0x23, 0x79, 0x9f,
- 0x59, 0x5a, 0xe7, 0x79, 0xfb, 0x7a, 0xd1, 0x72, 0xdb, 0x3c, 0x7d, 0xb2,
- 0x6b, 0xa0, 0x08, 0xbc, 0x62, 0xa7, 0xc4, 0x1d, 0xae, 0x25, 0x49, 0x18,
- 0xa1, 0x16, 0x1d, 0xe2, 0x1a, 0xa2, 0x25, 0xf6, 0x31, 0x35, 0xa8, 0x1d,
- 0x2c, 0x6f, 0xae, 0x4d, 0x9f, 0x22, 0x48, 0x52, 0x2b, 0x76, 0x2e, 0x49,
- 0x65, 0x65, 0xa2, 0xfe, 0x74, 0x90, 0xa4, 0x37, 0xd1, 0xc6, 0xef, 0xff,
- 0x69, 0x4c, 0x25, 0xff, 0xfa, 0x79, 0xb6, 0xb1, 0x5e, 0x16, 0x9a, 0x0f,
- 0x09, 0x1b, 0x04, 0x32, 0xbb, 0x4d, 0x80, 0xb3, 0x05, 0xd3, 0xfa, 0xcb,
- 0xe4, 0x9a, 0x13, 0x4e, 0x15, 0x2e, 0x5d, 0x63, 0x0a, 0xea, 0x65, 0x44,
- 0xaa, 0x5a, 0xe5, 0x8a, 0xb2, 0x0a, 0x60, 0x18, 0x80, 0xbe, 0x84, 0x51,
- 0x82, 0x74, 0xa3, 0x4f, 0xd3, 0x2a, 0x21, 0x85, 0x18, 0x3e, 0xa0, 0xf4,
- 0x8c, 0x91, 0x46, 0x7b, 0xa2, 0xb7, 0xa0, 0x2a, 0x32, 0x90, 0xb4, 0x29,
- 0x4d, 0xc8, 0x56, 0xb1, 0x0c, 0xa4, 0x64, 0x0a, 0xf2, 0x15, 0xf5, 0x66,
- 0xec, 0xf1, 0xb7, 0xa3, 0xcb, 0x1e, 0x53, 0x6e, 0x8f, 0xd2, 0xce, 0xb4,
- 0x35, 0x9c, 0x7d, 0x97, 0x78, 0x3e, 0x5a, 0x08, 0x42, 0xcd, 0x49, 0xc0,
- 0x4c, 0xa4, 0xa5, 0x18, 0xeb, 0xed, 0x4e, 0x89, 0x05, 0x51, 0x2c, 0x8d,
- 0x69, 0xb3, 0x67, 0xaa, 0xae, 0x84, 0x62, 0x0a, 0x0d, 0x0a, 0x84, 0x49,
- 0xb3, 0xd4, 0x68, 0x59, 0x33, 0x65, 0x3b, 0x57, 0x8c, 0x66, 0xbb, 0x49,
- 0x8a, 0x19, 0xc7, 0xf9, 0x36, 0x53, 0x19, 0xcb, 0x72, 0x11, 0x0a, 0x36,
- 0x77, 0x12, 0x26, 0x69, 0x07, 0x97, 0xa6, 0x4b, 0xda, 0xe8, 0xd6, 0xfb,
- 0x27, 0x4c, 0x52, 0xab, 0xeb, 0xa6, 0x4b, 0xf2, 0x50, 0x62, 0x26, 0x03,
- 0x54, 0xf6, 0xd7, 0xa2, 0xd8, 0x66, 0x8d, 0xf1, 0xae, 0x17, 0x03, 0x1b,
- 0x02, 0xf2, 0x7e, 0xfe, 0xf2, 0xf4, 0xc4, 0xa4, 0xa5, 0xfd, 0xbf, 0xdb,
- 0x3d, 0x1c, 0x4a, 0x31, 0xf4, 0x12, 0xa0, 0x18, 0x66, 0xcd, 0xc1, 0xcc,
- 0x53, 0x1c, 0x36, 0xfd, 0xa8, 0x06, 0xc0, 0x76, 0xf2, 0xfa, 0x6f, 0x2f,
- 0xdf, 0x9c, 0xbd, 0x7e, 0x75, 0xf2, 0xfa, 0xe2, 0x0b, 0x37, 0x92, 0xc9,
- 0xc6, 0x80, 0x39, 0xc1, 0x58, 0x5e, 0xec, 0xaa, 0x06, 0x38, 0x48, 0xd4,
- 0x45, 0x11, 0xc1, 0xe6, 0xcb, 0x5f, 0x3d, 0xb7, 0x39, 0xe7, 0x21, 0x75,
- 0x3c, 0xe3, 0xbe, 0xcd, 0xd1, 0xcc, 0x3b, 0xc2, 0x60, 0x82, 0x1e, 0xbb,
- 0xaa, 0x49, 0x05, 0xa1, 0x08, 0x35, 0x3c, 0x33, 0x18, 0xe4, 0x40, 0xd9,
- 0x9c, 0xa5, 0x13, 0xa4, 0xac, 0x91, 0x43, 0xd6, 0x6b, 0x5c, 0x1b, 0x84,
- 0xdd, 0xc8, 0xb7, 0x0c, 0xd6, 0x81, 0x9a, 0x6c, 0x68, 0x36, 0x5a, 0xe6,
- 0x89, 0x24, 0x59, 0xea, 0x96, 0x30, 0x2f, 0xf5, 0x26, 0x61, 0x42, 0x72,
- 0xee, 0x10, 0xb7, 0xe6, 0x2f, 0x3f, 0xdf, 0x8c, 0xe3, 0x71, 0x66, 0xf0,
- 0x93, 0xda, 0x6a, 0x81, 0x22, 0x7e, 0x39, 0x44, 0x0d, 0xeb, 0x9b, 0x9f,
- 0x0e, 0xf0, 0x58, 0xfc, 0xe2, 0x17, 0x91, 0x2c, 0x9d, 0x21, 0x88, 0x68,
- 0xe1, 0x60, 0xfd, 0xe0, 0x41, 0x36, 0x4b, 0x49, 0x5e, 0xa4, 0x77, 0xe7,
- 0x6f, 0xce, 0x7e, 0xfc, 0xfb, 0x47, 0xee, 0xc2, 0x89, 0xdf, 0xff, 0x09,
- 0x13, 0xd7, 0xb4, 0xf1, 0x5f, 0x3e, 0x7a, 0x6f, 0xf5, 0xe6, 0xbb, 0x12,
- 0x52, 0x48, 0x57, 0x4c, 0x40, 0x8b, 0x60, 0x4c, 0x43, 0x46, 0x31, 0xb5,
- 0x19, 0xad, 0x91, 0x63, 0x4d, 0x33, 0x09, 0x35, 0x24, 0xc9, 0x95, 0x75,
- 0xe2, 0x4c, 0x7c, 0x40, 0xd6, 0x1e, 0x83, 0xcb, 0xd9, 0x8c, 0x8b, 0xae,
- 0x20, 0x2e, 0x22, 0xa4, 0x62, 0x97, 0x61, 0x17, 0x29, 0x8f, 0xcf, 0x2c,
- 0xc8, 0xd1, 0xe9, 0xe9, 0x47, 0x5d, 0x05, 0xb8, 0xd8, 0xb1, 0xc6, 0x8b,
- 0xb6, 0x15, 0x1b, 0xbd, 0x4a, 0x9e, 0x5e, 0x51, 0xcc, 0xf3, 0xf5, 0x99,
- 0x8c, 0xe6, 0x90, 0x54, 0xba, 0xb8, 0x4c, 0x41, 0x11, 0xa3, 0x08, 0x1f,
- 0x2d, 0x16, 0x8e, 0x03, 0x2b, 0xb7, 0x39, 0x81, 0xac, 0xfc, 0xc6, 0x8b,
- 0x2c, 0xc7, 0x7b, 0x5c, 0x9e, 0x92, 0x80, 0x25, 0x5a, 0x4d, 0xc1, 0xd8,
- 0xa1, 0xa4, 0xfd, 0xdc, 0xa0, 0xa1, 0x63, 0x48, 0x3b, 0xa7, 0xb3, 0xe1,
- 0x35, 0x00, 0x03, 0xf1, 0x51, 0x64, 0x11, 0x15, 0x0d, 0x2e, 0x81, 0x22,
- 0x2b, 0xdf, 0x13, 0x9e, 0x01, 0x1e, 0x4f, 0x52, 0x04, 0x14, 0xdf, 0x12,
- 0x15, 0x35, 0x1a, 0x93, 0x00, 0xff, 0x5a, 0x88, 0x9b, 0xac, 0x0c, 0x8d,
- 0x0e, 0x85, 0xa5, 0x84, 0x45, 0x28, 0x74, 0x63, 0xb0, 0x87, 0x29, 0xa9,
- 0x01, 0xae, 0x48, 0xcd, 0x75, 0x8e, 0xcd, 0x2f, 0x0d, 0x04, 0x67, 0x1c,
- 0x40, 0xb1, 0xee, 0x4a, 0xca, 0x2c, 0x3d, 0xc0, 0x5d, 0x57, 0x65, 0x3a,
- 0x19, 0x87, 0x31, 0x04, 0x82, 0xac, 0x42, 0xd0, 0x2f, 0x4b, 0xc5, 0x05,
- 0x50, 0x6a, 0xc5, 0xcd, 0x4a, 0x09, 0x22, 0x1a, 0x7d, 0x93, 0xbe, 0x69,
- 0x58, 0x08, 0xd1, 0x89, 0x4c, 0xac, 0x71, 0x0e, 0xc6, 0xd5, 0x86, 0x4e,
- 0x75, 0x4b, 0xbf, 0x66, 0xfd, 0x8c, 0x20, 0x60, 0x9b, 0x53, 0x51, 0x58,
- 0x17, 0x09, 0xba, 0x8c, 0x6f, 0x99, 0xe1, 0x00, 0x25, 0xf2, 0xf6, 0xb8,
- 0xd0, 0x2f, 0xfa, 0xcd, 0x7d, 0x9a, 0xb3, 0xa8, 0x96, 0x34, 0xab, 0x0a,
- 0xf3, 0xef, 0x2a, 0x71, 0x45, 0xf1, 0xfb, 0x84, 0x76, 0x8d, 0xa7, 0xcb,
- 0x19, 0x66, 0xec, 0xd7, 0x3f, 0xaa, 0x6a, 0x43, 0xe0, 0x7b, 0xf2, 0x3e,
- 0x83, 0x44, 0x3f, 0x57, 0x1c, 0x8a, 0x33, 0xae, 0x3d, 0x6d, 0x86, 0x49,
- 0xaa, 0x18, 0x0f, 0x92, 0x85, 0x6e, 0x45, 0xed, 0x4f, 0x5b, 0xd2, 0x2e,
- 0x39, 0xdc, 0x46, 0xa9, 0x9e, 0xc9, 0x5e, 0xe8, 0xbe, 0x86, 0xe8, 0xa7,
- 0x00, 0x19, 0xd6, 0x43, 0x48, 0x3e, 0x53, 0x0f, 0x45, 0x8b, 0xf2, 0x76,
- 0x04, 0xe1, 0x83, 0x92, 0x2e, 0x4d, 0x3a, 0x98, 0x9c, 0x20, 0x02, 0xb6,
- 0x19, 0x28, 0xbe, 0x97, 0x71, 0x81, 0xc3, 0x35, 0x37, 0xc9, 0xcb, 0x50,
- 0x15, 0xb3, 0x01, 0x26, 0x3f, 0x01, 0xc7, 0x68, 0x49, 0xf3, 0xb4, 0x03,
- 0x52, 0x17, 0xae, 0x04, 0x4b, 0xa2, 0x51, 0x00, 0x31, 0xb3, 0x88, 0xed,
- 0x51, 0x9a, 0x08, 0x06, 0x43, 0xe6, 0x8c, 0xc6, 0x15, 0x30, 0x20, 0x73,
- 0xc4, 0x2d, 0x9e, 0x2c, 0x2d, 0x1d, 0x5e, 0xa4, 0x92, 0x95, 0x21, 0xb6,
- 0x9e, 0x44, 0x59, 0x31, 0xde, 0x81, 0x07, 0x51, 0xd4, 0x39, 0x38, 0xd8,
- 0xed, 0x98, 0x50, 0xfa, 0x26, 0x81, 0x13, 0x10, 0x4f, 0x89, 0x0f, 0xed,
- 0xe0, 0x63, 0x9c, 0x37, 0x90, 0xa2, 0xcf, 0x96, 0xb8, 0x08, 0xf5, 0xe4,
- 0xb0, 0xd1, 0xf3, 0xf3, 0x67, 0x47, 0x17, 0x47, 0xd1, 0x21, 0x50, 0xd5,
- 0x37, 0x3e, 0x70, 0x9a, 0xc5, 0x5e, 0x6d, 0xf8, 0xeb, 0x15, 0x2c, 0x9e,
- 0xdc, 0xff, 0x55, 0x71, 0x27, 0x36, 0xe5, 0x71, 0x26, 0xc0, 0x0e, 0x57,
- 0xb9, 0x07, 0x4d, 0x66, 0xc0, 0xee, 0x7b, 0x8a, 0x0f, 0x3c, 0x2f, 0xb2,
- 0x29, 0x22, 0x19, 0xe1, 0xc3, 0xb6, 0x69, 0x9c, 0x2e, 0x32, 0xa7, 0xc5,
- 0xac, 0xc6, 0x61, 0x8f, 0xcf, 0x4e, 0xdf, 0xbe, 0x7a, 0xdd, 0x8f, 0x0e,
- 0x11, 0xb8, 0x97, 0x8c, 0x39, 0x37, 0xd9, 0xc8, 0xaf, 0x1f, 0xc1, 0xfc,
- 0xb0, 0xdb, 0xa8, 0x26, 0x60, 0xb5, 0x5c, 0x93, 0xd7, 0x5e, 0xd6, 0xb4,
- 0xa3, 0x36, 0x78, 0x2b, 0xd3, 0x19, 0xf7, 0xa6, 0xf1, 0x0e, 0xd8, 0x7a,
- 0x22, 0xc0, 0xf3, 0xa8, 0x6e, 0x02, 0x91, 0x5f, 0x22, 0x0d, 0xc4, 0x83,
- 0xa4, 0x90, 0xfc, 0xcb, 0x9b, 0x59, 0x00, 0x7a, 0x98, 0x64, 0x71, 0x1c,
- 0x9e, 0x53, 0x18, 0x80, 0x6b, 0x0d, 0x80, 0x10, 0xb8, 0x60, 0x6c, 0x3a,
- 0xa4, 0x4b, 0x29, 0x90, 0x46, 0x3c, 0xf6, 0xa6, 0x56, 0xb9, 0xe7, 0x18,
- 0xce, 0xd7, 0xbb, 0xe3, 0xa3, 0x77, 0xdf, 0xbd, 0x7d, 0xfd, 0xec, 0xf4,
- 0x24, 0x5c, 0xb1, 0x41, 0xd7, 0xa0, 0x36, 0x41, 0x91, 0xa3, 0x40, 0xe2,
- 0x4c, 0x50, 0x23, 0x62, 0x7d, 0xb1, 0xd1, 0xee, 0x8b, 0xb3, 0x57, 0x27,
- 0x41, 0x52, 0xd0, 0x16, 0xc5, 0xc7, 0xc8, 0xf6, 0x20, 0xb3, 0x63, 0x34,
- 0x19, 0xb8, 0x19, 0x86, 0xef, 0x4b, 0x5d, 0x1f, 0xa6, 0x08, 0x8e, 0x1c,
- 0xc9, 0x3c, 0x00, 0x8e, 0x0c, 0xc3, 0x47, 0x68, 0xd7, 0x1b, 0x54, 0x61,
- 0xd6, 0x27, 0x23, 0x61, 0xb9, 0xca, 0x66, 0x0b, 0xc6, 0x72, 0xa7, 0xd6,
- 0xa3, 0x1f, 0x9f, 0x7d, 0xff, 0xee, 0xf8, 0xec, 0x75, 0xf3, 0xb8, 0x3e,
- 0x7f, 0xf9, 0x3d, 0x0d, 0xbd, 0x31, 0x9b, 0x7e, 0xff, 0xf4, 0xdd, 0x77,
- 0x47, 0xc7, 0x7f, 0x39, 0x79, 0xfd, 0x2c, 0x3a, 0x74, 0x12, 0x7a, 0x03,
- 0x93, 0x5b, 0x85, 0x86, 0xd0, 0xd1, 0x4c, 0xe2, 0x8e, 0x05, 0xa1, 0x17,
- 0x47, 0x6d, 0xd6, 0xbc, 0x7c, 0x39, 0x5b, 0xd6, 0x20, 0x04, 0xb8, 0xcd,
- 0x10, 0x64, 0x01, 0x25, 0x4c, 0x63, 0x7c, 0x8a, 0x33, 0x24, 0xd1, 0x69,
- 0x97, 0xe1, 0x64, 0xd9, 0xd5, 0x16, 0x79, 0x3f, 0x35, 0x3e, 0x83, 0xd6,
- 0x64, 0x9a, 0x00, 0x41, 0x3b, 0xf6, 0x61, 0xed, 0x3c, 0x52, 0x19, 0xe8,
- 0xc6, 0x00, 0x6b, 0x93, 0xd1, 0xfa, 0x3a, 0x7f, 0x4f, 0xd0, 0x7f, 0x8a,
- 0x2c, 0x4d, 0xcd, 0x86, 0x60, 0x4b, 0x04, 0xef, 0x30, 0xb1, 0xb3, 0x76,
- 0xcf, 0x86, 0x05, 0xe9, 0x66, 0xd1, 0xb0, 0x4a, 0xee, 0x2c, 0x48, 0x6b,
- 0x18, 0xad, 0x3a, 0x9c, 0xe7, 0x6b, 0x86, 0x2b, 0xf7, 0xc4, 0x26, 0xce,
- 0x3b, 0x76, 0xe6, 0xbd, 0x75, 0x00, 0x0b, 0x93, 0x14, 0x65, 0x39, 0xe9,
- 0x46, 0x97, 0xb3, 0x45, 0x35, 0x01, 0xbe, 0x75, 0x59, 0xbe, 0xcf, 0xbc,
- 0x8c, 0x19, 0x60, 0x06, 0x23, 0xfa, 0x76, 0x56, 0xc2, 0x3f, 0xf9, 0x1c,
- 0x1a, 0xc0, 0x77, 0x8a, 0x45, 0x49, 0x9f, 0x96, 0xc0, 0x24, 0x66, 0xb3,
- 0x94, 0xb0, 0xb2, 0x31, 0x21, 0x97, 0xed, 0xf5, 0xb8, 0x8b, 0x70, 0xa6,
- 0xf2, 0x89, 0x97, 0xdd, 0x0c, 0x2f, 0x9b, 0x01, 0x2f, 0x3b, 0x42, 0x4c,
- 0xda, 0xe2, 0x6c, 0xc4, 0xff, 0xe8, 0x60, 0x36, 0xd9, 0xa6, 0x53, 0x15,
- 0x84, 0xb9, 0x2b, 0x2f, 0x71, 0x93, 0x93, 0x90, 0xa1, 0xb3, 0x17, 0x9d,
- 0x22, 0xee, 0x86, 0x24, 0x1d, 0x18, 0x60, 0x28, 0x8e, 0x97, 0x10, 0xa5,
- 0x53, 0x54, 0xd2, 0x9e, 0x73, 0xc4, 0x7d, 0x48, 0x1c, 0x39, 0x59, 0x7a,
- 0x92, 0xd8, 0xc0, 0xc5, 0x98, 0xb3, 0xa4, 0x09, 0x9a, 0xf9, 0xfd, 0xf5,
- 0xf4, 0xec, 0xfb, 0x67, 0x2f, 0xdf, 0xd0, 0x14, 0x9d, 0xda, 0x25, 0xa1,
- 0xd9, 0x86, 0x0e, 0x55, 0x1d, 0xfa, 0xa1, 0x6b, 0x60, 0xcb, 0xab, 0x86,
- 0x98, 0xd7, 0xc4, 0xef, 0x76, 0xf4, 0xc3, 0x44, 0xc2, 0x74, 0x9d, 0x65,
- 0xaa, 0x53, 0x18, 0x72, 0xe3, 0xd1, 0x02, 0x63, 0xe1, 0xff, 0x31, 0xc9,
- 0x2f, 0xcb, 0x40, 0x74, 0x26, 0x9f, 0x5c, 0xd3, 0x40, 0xd7, 0x80, 0x48,
- 0xb2, 0xf9, 0x84, 0xe9, 0x0b, 0xff, 0x1d, 0x49, 0xe2, 0x2a, 0xaf, 0x27,
- 0x82, 0x7c, 0x86, 0xbc, 0xe3, 0x4e, 0x08, 0x56, 0x36, 0x8a, 0x36, 0x81,
- 0xfe, 0xaf, 0xd2, 0xdb, 0xad, 0x5e, 0xf4, 0x8c, 0xae, 0xdc, 0xd4, 0x29,
- 0xf6, 0x59, 0xa6, 0x8a, 0x60, 0xf0, 0xff, 0x2d, 0xee, 0xda, 0x7a, 0xdb,
- 0x56, 0x8e, 0xf0, 0xbb, 0x7e, 0x05, 0x11, 0x14, 0x68, 0x0e, 0xe0, 0xab,
- 0x2c, 0xc9, 0x52, 0x1e, 0x1a, 0x38, 0xb6, 0x4e, 0x6c, 0x9c, 0x24, 0x36,
- 0x44, 0x25, 0x4e, 0x81, 0x02, 0x05, 0x6d, 0xd1, 0x32, 0x1b, 0x99, 0xf2,
- 0xa1, 0xa4, 0x63, 0x3b, 0xbf, 0xbe, 0x3b, 0xf3, 0xcd, 0xec, 0x0e, 0xb9,
- 0x54, 0xda, 0x93, 0x3e, 0xf4, 0xc5, 0xb0, 0x69, 0x72, 0x97, 0xbb, 0x9c,
- 0x9d, 0xfb, 0x7c, 0xa3, 0xd1, 0xdc, 0xdb, 0x58, 0x50, 0x3a, 0xbb, 0x81,
- 0xf8, 0x3e, 0x83, 0x2e, 0xec, 0x25, 0xd7, 0x04, 0x55, 0x8a, 0xcd, 0xbb,
- 0x71, 0x02, 0x81, 0x5b, 0xe1, 0xb6, 0x40, 0x13, 0xa4, 0xe7, 0xe3, 0x0f,
- 0x1f, 0x18, 0x01, 0x6b, 0x06, 0x6c, 0xd6, 0x2f, 0x1f, 0xd3, 0xa4, 0xce,
- 0x8d, 0xdd, 0xde, 0xcd, 0x72, 0xc6, 0x21, 0x2d, 0xee, 0x3c, 0x34, 0xf7,
- 0xd9, 0xe9, 0x07, 0x52, 0xc5, 0x33, 0x42, 0x75, 0x2b, 0x9e, 0x5f, 0x45,
- 0xfd, 0x0d, 0x73, 0x8b, 0xa8, 0x4a, 0x1c, 0xf5, 0x74, 0x3c, 0x99, 0xfe,
- 0x53, 0x29, 0xe0, 0xcf, 0x4a, 0x1e, 0xae, 0x99, 0x69, 0x48, 0x1e, 0x3f,
- 0x28, 0xb9, 0x52, 0xda, 0x9b, 0x42, 0xfd, 0x8c, 0x40, 0x73, 0xc3, 0xfe,
- 0x36, 0xfe, 0xbb, 0xa3, 0x56, 0x0c, 0xeb, 0x9b, 0xc2, 0xfc, 0xad, 0x1d,
- 0x33, 0x0d, 0x5e, 0x87, 0x6d, 0xb6, 0x46, 0x28, 0x68, 0x12, 0xa4, 0x4b,
- 0x29, 0xb2, 0x8a, 0xd5, 0x39, 0xf6, 0xdd, 0x49, 0xb7, 0x64, 0x42, 0x02,
- 0x14, 0x60, 0x57, 0x92, 0x78, 0x81, 0x4c, 0x24, 0xbd, 0x99, 0x0a, 0x83,
- 0xb9, 0x48, 0xea, 0x9e, 0xc1, 0xea, 0x98, 0xdf, 0xc6, 0x96, 0x1c, 0x40,
- 0x70, 0x00, 0xec, 0x46, 0x76, 0x5d, 0xb6, 0x78, 0xf9, 0x0e, 0x85, 0x90,
- 0x66, 0x71, 0xac, 0xe9, 0x8e, 0xcc, 0x54, 0x37, 0x20, 0x61, 0x9c, 0x21,
- 0x20, 0x82, 0x8f, 0x5b, 0xe6, 0x91, 0xe9, 0x05, 0xe8, 0x7b, 0x1e, 0x02,
- 0x14, 0x41, 0xd8, 0x08, 0xda, 0x82, 0xe1, 0x9a, 0x3a, 0xd3, 0x3a, 0xf5,
- 0xe8, 0x9b, 0xb8, 0xc7, 0x9f, 0x02, 0xe5, 0xa1, 0x94, 0x79, 0x11, 0x77,
- 0xa7, 0x79, 0xa2, 0x61, 0x2c, 0x58, 0xc6, 0x9b, 0xe4, 0xd2, 0xb1, 0x53,
- 0xb7, 0xf9, 0x0c, 0xc0, 0x45, 0x3a, 0x91, 0x63, 0xa3, 0xef, 0x96, 0xa4,
- 0x07, 0xf3, 0xc5, 0xe4, 0x7d, 0xb9, 0xe1, 0x5e, 0xd0, 0xc9, 0xa7, 0x34,
- 0x6d, 0xc1, 0x1d, 0x24, 0xfe, 0xea, 0x6e, 0x34, 0x1e, 0xa3, 0x74, 0x3c,
- 0x71, 0x06, 0x0e, 0xbe, 0xe2, 0xff, 0x43, 0x4b, 0x65, 0x2d, 0x6c, 0x47,
- 0x95, 0xd5, 0x9d, 0x30, 0x3a, 0x6b, 0xaa, 0x28, 0xbb, 0x84, 0xae, 0x9a,
- 0xc4, 0x0a, 0x5f, 0x43, 0xd9, 0xd3, 0x16, 0x09, 0x7c, 0x0e, 0x5e, 0xfd,
- 0xc5, 0xac, 0xed, 0x1f, 0x27, 0x8f, 0x28, 0x0a, 0x22, 0x2e, 0x72, 0x46,
- 0x10, 0x87, 0x61, 0x0b, 0x9a, 0xcc, 0x79, 0x9b, 0x78, 0x09, 0x0c, 0xde,
- 0x37, 0xbc, 0x86, 0x2a, 0xdc, 0xd8, 0x13, 0x56, 0xa6, 0x74, 0x5b, 0x44,
- 0x6c, 0xc4, 0x38, 0xac, 0x64, 0xdc, 0xd7, 0x45, 0x88, 0x36, 0xfb, 0x80,
- 0xa7, 0xc3, 0xfd, 0x9c, 0x5e, 0x3a, 0xad, 0xdc, 0xfd, 0x32, 0xfe, 0xf5,
- 0xe2, 0x6b, 0xf0, 0x82, 0x4e, 0x83, 0x8b, 0x05, 0x65, 0xfb, 0x51, 0x8b,
- 0x25, 0x81, 0xe7, 0x35, 0x8e, 0x1b, 0x96, 0x35, 0xc5, 0x33, 0x92, 0x5a,
- 0x00, 0x07, 0xea, 0x01, 0x10, 0xea, 0x7a, 0xf6, 0xf3, 0x4b, 0x80, 0xf5,
- 0x08, 0x5b, 0x44, 0xcb, 0xb7, 0xfe, 0x1b, 0x56, 0xc2, 0xad, 0xd3, 0x69,
- 0xdd, 0x7c, 0x29, 0xb7, 0x40, 0xb1, 0xb7, 0xe4, 0x02, 0x39, 0xcb, 0x3b,
- 0x46, 0x4f, 0x87, 0x4d, 0x96, 0x99, 0x36, 0x40, 0x4e, 0x69, 0xdb, 0x31,
- 0x03, 0x29, 0x37, 0x5a, 0xbb, 0x83, 0xb7, 0x06, 0x43, 0xd2, 0x9c, 0xeb,
- 0x86, 0xd1, 0xcb, 0x58, 0x71, 0x7e, 0x98, 0xfa, 0x22, 0x64, 0xe5, 0x62,
- 0x3d, 0x72, 0xae, 0x2b, 0x45, 0x92, 0x56, 0x6f, 0x6a, 0x2e, 0x4c, 0xb7,
- 0x45, 0xad, 0x98, 0x9f, 0x00, 0xcc, 0x63, 0x0f, 0x7a, 0x73, 0x76, 0x9e,
- 0x55, 0xbf, 0x20, 0xdc, 0x5b, 0x9a, 0xde, 0xda, 0x52, 0x02, 0x46, 0x9b,
- 0x2f, 0xc7, 0xa5, 0xee, 0x3c, 0x5d, 0xfd, 0x60, 0xea, 0x78, 0xe5, 0x11,
- 0xcc, 0x12, 0xe1, 0x75, 0xac, 0x7a, 0x3f, 0x1a, 0x83, 0x1c, 0xdb, 0xbf,
- 0x6f, 0x0a, 0xc7, 0xbe, 0x73, 0x24, 0x42, 0xee, 0xee, 0xe2, 0xa1, 0xc6,
- 0x18, 0xd9, 0x4f, 0x0d, 0x92, 0xd5, 0x47, 0xe9, 0xff, 0xcc, 0x20, 0xfd,
- 0xc6, 0x18, 0xf7, 0x3f, 0x35, 0xc8, 0xae, 0xba, 0xba, 0x3a, 0x9d, 0xf1,
- 0xd7, 0x8b, 0xa9, 0x33, 0x68, 0xcf, 0x6a, 0x67, 0xa6, 0x12, 0x8e, 0x42,
- 0x6a, 0x74, 0xe9, 0x28, 0xcf, 0x3d, 0x3a, 0x2b, 0xee, 0x58, 0x01, 0x5b,
- 0x4b, 0xd9, 0x04, 0x85, 0xe2, 0x56, 0x0a, 0x9e, 0x58, 0x54, 0x68, 0xdf,
- 0x44, 0x09, 0xd3, 0x1c, 0x8b, 0x31, 0x08, 0xc0, 0xa6, 0xe2, 0x79, 0x15,
- 0x50, 0x33, 0x50, 0xbb, 0x88, 0x16, 0xe3, 0x7e, 0xc4, 0x12, 0x08, 0xa7,
- 0x0c, 0x8d, 0xb7, 0x56, 0x7f, 0x53, 0xc1, 0xe0, 0xc8, 0x9e, 0x99, 0x31,
- 0x07, 0xa1, 0x38, 0x08, 0x37, 0x6e, 0x00, 0x30, 0x22, 0x5b, 0x68, 0x33,
- 0x90, 0x6d, 0xa0, 0xd5, 0x03, 0x11, 0xbe, 0x48, 0x0e, 0x54, 0x2c, 0x8f,
- 0xd0, 0x83, 0x2e, 0xe0, 0x7f, 0xd4, 0xe0, 0xb0, 0xb3, 0x5b, 0xb7, 0x14,
- 0x6d, 0xa0, 0x15, 0x9b, 0x05, 0x04, 0x30, 0x5a, 0x6d, 0x9a, 0x39, 0x12,
- 0x87, 0x22, 0x20, 0xca, 0xda, 0xd1, 0xe2, 0x43, 0x25, 0x12, 0x8c, 0x14,
- 0xcf, 0x99, 0x22, 0x42, 0x6a, 0x50, 0x6a, 0x55, 0x03, 0x22, 0x8c, 0x14,
- 0x6b, 0x3f, 0x84, 0x9f, 0xa7, 0x2b, 0x56, 0x66, 0x56, 0x2c, 0xa0, 0xae,
- 0x4b, 0x05, 0x70, 0xf1, 0xdd, 0xa8, 0x1b, 0x47, 0xde, 0x97, 0xed, 0xb6,
- 0x7a, 0xc1, 0x69, 0xe7, 0x33, 0x1c, 0xc1, 0xd5, 0x4b, 0xb9, 0xce, 0x9e,
- 0x59, 0x11, 0x26, 0xb6, 0x22, 0x2d, 0xb7, 0xc2, 0x93, 0x3d, 0xad, 0xc3,
- 0xf3, 0x8d, 0xbd, 0x88, 0x37, 0x69, 0x78, 0x53, 0xc3, 0xd7, 0x21, 0xb1,
- 0x41, 0x21, 0x9f, 0x45, 0x27, 0x2d, 0x2a, 0x86, 0x16, 0xdc, 0xed, 0xb4,
- 0x14, 0xff, 0xf8, 0x49, 0x15, 0x3f, 0x7a, 0x89, 0x54, 0xa6, 0xfc, 0x99,
- 0x64, 0x4d, 0xc1, 0xa9, 0xfc, 0xda, 0x43, 0x88, 0x34, 0x54, 0xde, 0x2f,
- 0xe9, 0x9b, 0xdb, 0xf0, 0xd7, 0x59, 0x30, 0x55, 0x55, 0x89, 0x66, 0x4b,
- 0xde, 0x40, 0xb4, 0x9d, 0x70, 0xfb, 0x76, 0x93, 0x11, 0x74, 0x3d, 0x43,
- 0xba, 0x66, 0x25, 0x9c, 0x17, 0xfa, 0x05, 0xda, 0xe1, 0x26, 0xc3, 0x26,
- 0xf4, 0xc5, 0x6e, 0xf7, 0xde, 0x6e, 0x01, 0x4b, 0xb4, 0xbc, 0x0c, 0xae,
- 0x3b, 0x09, 0x0b, 0x91, 0xc3, 0xf0, 0xd6, 0xdf, 0xcd, 0x29, 0x28, 0xf1,
- 0x26, 0xac, 0x1a, 0x49, 0x4d, 0x03, 0x3b, 0x0b, 0x1e, 0xd4, 0x79, 0xd0,
- 0x2b, 0x2a, 0x4c, 0x63, 0xf3, 0xf0, 0xc2, 0x3c, 0x37, 0xf9, 0x7f, 0x31,
- 0xcb, 0x71, 0x93, 0x5e, 0x4c, 0x8a, 0x1f, 0x4f, 0xe3, 0xef, 0x1c, 0x4a,
- 0xc0, 0x3b, 0x27, 0x1c, 0x4f, 0x89, 0x47, 0x54, 0xf9, 0xe3, 0x42, 0x16,
- 0x2c, 0x57, 0x38, 0x03, 0x9d, 0x83, 0xd6, 0x70, 0xb4, 0xf8, 0xb7, 0x71,
- 0xb6, 0xbc, 0x8d, 0xad, 0x8d, 0x64, 0x5e, 0x27, 0x01, 0xe0, 0x98, 0xa5,
- 0xe6, 0x02, 0x85, 0x27, 0x43, 0x0c, 0x86, 0x4b, 0x54, 0xa1, 0xee, 0x84,
- 0xe2, 0xd2, 0xff, 0xad, 0x4f, 0xc4, 0x40, 0x85, 0x70, 0xab, 0x1b, 0xaf,
- 0x01, 0xed, 0xd8, 0xa6, 0x02, 0x0e, 0x70, 0xb0, 0xc1, 0x18, 0x77, 0x26,
- 0x2b, 0xa5, 0xcb, 0x52, 0x45, 0x65, 0x77, 0x7b, 0xc9, 0xc7, 0x65, 0x54,
- 0xb9, 0xbc, 0xbc, 0x5b, 0x0b, 0xc2, 0x38, 0xd5, 0xf5, 0x62, 0x7b, 0x9c,
- 0xb5, 0x3d, 0x17, 0x1d, 0xdb, 0xf4, 0xdf, 0x24, 0xca, 0xf7, 0x01, 0x6c,
- 0xc7, 0x6f, 0xd8, 0x57, 0x5c, 0xb6, 0xbc, 0x5d, 0xb3, 0x66, 0xfe, 0xf0,
- 0xc0, 0xef, 0x03, 0x2f, 0x8b, 0x8a, 0xb2, 0xf9, 0x5b, 0x38, 0x63, 0x8a,
- 0xbb, 0x2e, 0x3e, 0x65, 0xcc, 0xc9, 0xbc, 0xa5, 0x1c, 0x22, 0x41, 0xfa,
- 0xa5, 0x48, 0x9b, 0x8d, 0xbd, 0xdf, 0x5c, 0x53, 0x95, 0x21, 0xc1, 0x04,
- 0xc5, 0xfa, 0x00, 0x92, 0x12, 0xb9, 0xb9, 0xc3, 0x01, 0x52, 0xcf, 0xa8,
- 0x91, 0x25, 0xcd, 0x90, 0x29, 0x54, 0x29, 0xbe, 0x25, 0xee, 0x4f, 0x5d,
- 0xb5, 0x8c, 0xfd, 0x18, 0x7a, 0x23, 0x98, 0xf5, 0x1c, 0xfa, 0xf5, 0x3c,
- 0x31, 0xa5, 0x5c, 0x9d, 0xa4, 0xa9, 0xd2, 0xc9, 0x69, 0x0b, 0x49, 0xa8,
- 0x17, 0x79, 0xf1, 0xe2, 0x1b, 0x26, 0xc5, 0x3c, 0x55, 0x06, 0x69, 0x94,
- 0x2b, 0x1c, 0x82, 0xd9, 0x9d, 0x01, 0x3d, 0xbc, 0x7d, 0xb9, 0x4f, 0xb5,
- 0x4d, 0x04, 0x94, 0x78, 0xa3, 0xd9, 0x41, 0xbb, 0x81, 0x8c, 0x3c, 0x65,
- 0xda, 0x66, 0x06, 0xe8, 0xd5, 0xfc, 0x2d, 0x72, 0x78, 0x3a, 0x8e, 0x44,
- 0x8c, 0xcc, 0xbc, 0xc8, 0x51, 0xbc, 0xe8, 0x2f, 0x58, 0xd4, 0xce, 0xff,
- 0xb4, 0xe8, 0x2f, 0x2d, 0x8b, 0xee, 0x35, 0xe6, 0xea, 0x76, 0x8f, 0x05,
- 0x03, 0xa9, 0xb6, 0xc1, 0xe0, 0x18, 0x98, 0x0d, 0x2b, 0x76, 0x37, 0xee,
- 0x6a, 0xf3, 0xf5, 0xc8, 0x13, 0x1f, 0x4e, 0xaf, 0x99, 0xaa, 0xef, 0xa7,
- 0xba, 0xcd, 0x4a, 0x1a, 0x8f, 0xd4, 0x37, 0x30, 0x9f, 0x98, 0xf9, 0x69,
- 0x80, 0x8c, 0x82, 0x1e, 0x4f, 0x54, 0xd5, 0xb6, 0xa5, 0x12, 0x45, 0x5f,
- 0xc3, 0xcc, 0x33, 0xf0, 0xb1, 0xe9, 0xfd, 0xae, 0xe6, 0xc6, 0x9f, 0x30,
- 0x93, 0x5e, 0xe4, 0x0f, 0x4c, 0x9a, 0xf0, 0x05, 0x04, 0xed, 0x18, 0x98,
- 0x9e, 0x77, 0x55, 0xc6, 0x2d, 0xc5, 0x17, 0xd9, 0x4b, 0x4b, 0x4f, 0x27,
- 0xc9, 0x9a, 0xa2, 0xe8, 0x10, 0x77, 0x00, 0x9d, 0xe7, 0x25, 0x45, 0x41,
- 0x58, 0x25, 0x11, 0xbf, 0x24, 0x79, 0x36, 0x39, 0x65, 0xfe, 0xce, 0xa7,
- 0x2c, 0xc9, 0xac, 0x11, 0xbe, 0x38, 0x65, 0x40, 0xac, 0x9b, 0x08, 0x2d,
- 0xed, 0xbd, 0xe8, 0x0e, 0x8f, 0xc3, 0xbe, 0xf9, 0x6d, 0x22, 0x9b, 0x1d,
- 0xcd, 0x10, 0xec, 0xe6, 0x09, 0x3b, 0x31, 0x89, 0xa0, 0x5a, 0x71, 0x1d,
- 0xd1, 0xa5, 0x3c, 0x1c, 0x66, 0x01, 0x43, 0xbe, 0x22, 0x6e, 0x27, 0x5d,
- 0x85, 0xf7, 0x9c, 0x81, 0x49, 0x0a, 0x0a, 0xda, 0x14, 0x4b, 0x98, 0x11,
- 0x56, 0x7b, 0x16, 0xd2, 0xe5, 0xea, 0xa4, 0x3b, 0x6a, 0x79, 0x57, 0x2d,
- 0x5f, 0xd9, 0x17, 0x46, 0x1b, 0x7a, 0xcd, 0x68, 0x4e, 0x53, 0x9e, 0x4c,
- 0xc6, 0xd3, 0x09, 0x27, 0x7d, 0x13, 0x0b, 0x88, 0x6c, 0xed, 0xac, 0xfa,
- 0xc5, 0x77, 0x43, 0x11, 0x7e, 0x16, 0x54, 0x94, 0xc0, 0x22, 0xd0, 0x28,
- 0xcb, 0x7f, 0x71, 0xfc, 0xa9, 0xcf, 0xf9, 0xa2, 0x5c, 0x6c, 0x79, 0xc8,
- 0x07, 0xad, 0xb7, 0xf0, 0xea, 0x76, 0x43, 0x45, 0xd3, 0x23, 0x7d, 0x13,
- 0x10, 0xa5, 0x20, 0x31, 0xec, 0x49, 0x75, 0x8a, 0xa2, 0xf7, 0x90, 0xce,
- 0xa3, 0x8a, 0x06, 0x0a, 0xf5, 0x96, 0x55, 0x9b, 0x34, 0xf6, 0xf5, 0xc0,
- 0xa2, 0x1b, 0x68, 0x2d, 0xb0, 0xe9, 0xd8, 0x85, 0x22, 0x77, 0xc3, 0x43,
- 0xd1, 0x17, 0xb7, 0x77, 0x70, 0x10, 0x17, 0xf9, 0x67, 0x37, 0x8e, 0xad,
- 0x8a, 0xa2, 0x27, 0x28, 0x5c, 0x40, 0xe6, 0xe1, 0xef, 0xc5, 0xaa, 0xee,
- 0x8a, 0xec, 0x9e, 0xdd, 0x5d, 0xda, 0xad, 0xd8, 0xb8, 0xe9, 0x82, 0xc3,
- 0x5c, 0x33, 0x24, 0x98, 0xec, 0x57, 0x83, 0xb1, 0x00, 0x2e, 0x0c, 0x05,
- 0x54, 0xc1, 0xf1, 0xc8, 0x0e, 0x3c, 0xc9, 0xb0, 0x8a, 0xde, 0x2a, 0xe2,
- 0xde, 0xdd, 0x70, 0xe2, 0x2d, 0x1b, 0x49, 0xa7, 0x97, 0x13, 0x21, 0xb0,
- 0x58, 0x3a, 0x73, 0xbd, 0x03, 0xdd, 0xe0, 0x15, 0xe7, 0x9d, 0x96, 0x06,
- 0x15, 0x7c, 0x52, 0x68, 0x5c, 0xdf, 0x7e, 0xd6, 0xcc, 0x8a, 0xf3, 0x3f,
- 0x21, 0xe0, 0x38, 0x59, 0xdb, 0x17, 0x01, 0xc5, 0xd4, 0x86, 0xc4, 0x7a,
- 0x2a, 0xcd, 0x43, 0x38, 0x64, 0x97, 0x38, 0xbd, 0x00, 0x81, 0x24, 0x1a,
- 0x12, 0x38, 0x48, 0x6a, 0x68, 0x2c, 0x0e, 0x0a, 0x2d, 0xa2, 0x8b, 0xe8,
- 0x10, 0x07, 0xe8, 0x32, 0xf4, 0x9c, 0x06, 0x7f, 0x97, 0x45, 0x7a, 0x83,
- 0x9c, 0x2e, 0x73, 0x4a, 0x15, 0x7a, 0x32, 0x4b, 0x55, 0x52, 0x86, 0xec,
- 0x82, 0xdb, 0xdd, 0x48, 0x7c, 0x58, 0xdb, 0xc0, 0xda, 0x2c, 0x41, 0xfd,
- 0x36, 0x32, 0xff, 0xea, 0x72, 0x32, 0x4d, 0xbc, 0xc8, 0xe7, 0x99, 0xf9,
- 0x52, 0xe3, 0xf0, 0x10, 0x14, 0x00, 0x7b, 0x6f, 0x02, 0xee, 0x4e, 0x94,
- 0xe2, 0x21, 0xa6, 0xc2, 0xba, 0x31, 0xc4, 0x0e, 0x47, 0xed, 0x66, 0x4b,
- 0xb8, 0x50, 0x03, 0xa3, 0x11, 0x2f, 0x32, 0x4b, 0x99, 0x6d, 0xed, 0x8f,
- 0x02, 0xb0, 0xf4, 0xd1, 0x61, 0x0b, 0x9f, 0x20, 0x71, 0x30, 0x19, 0xa7,
- 0x53, 0xec, 0x18, 0xfd, 0x16, 0xbd, 0x37, 0x70, 0x6b, 0xe5, 0x62, 0x64,
- 0xbf, 0x78, 0xca, 0xa0, 0xf2, 0x31, 0xf2, 0x60, 0xd3, 0xf8, 0x1e, 0xe0,
- 0xd7, 0xec, 0xd8, 0x91, 0xa9, 0x5a, 0x64, 0x8e, 0x29, 0x74, 0xc2, 0x87,
- 0x9b, 0x2f, 0xbc, 0x92, 0x49, 0x5e, 0x39, 0xb5, 0x4c, 0x0e, 0xc4, 0xb2,
- 0xfa, 0x66, 0x86, 0xe8, 0x19, 0x36, 0x41, 0x62, 0x4a, 0x46, 0xb8, 0x00,
- 0x66, 0xf2, 0x82, 0x2f, 0xee, 0x2a, 0xad, 0xb0, 0xac, 0x00, 0x55, 0xe0,
- 0xbe, 0x30, 0x4e, 0xdf, 0x07, 0x79, 0x54, 0x53, 0x30, 0xef, 0x42, 0x97,
- 0xb5, 0xd0, 0x87, 0xb5, 0xb6, 0x06, 0xcd, 0x1d, 0x81, 0xd4, 0xdf, 0x65,
- 0xb3, 0x50, 0x73, 0x88, 0xb5, 0xd7, 0xa4, 0x82, 0x44, 0x13, 0x59, 0x47,
- 0xcb, 0xaa, 0x45, 0x41, 0xd9, 0x2b, 0x37, 0xb0, 0x1a, 0xe9, 0xb1, 0xb6,
- 0xc6, 0xdb, 0x66, 0x0e, 0x11, 0x3f, 0xe4, 0x84, 0xbc, 0x35, 0x62, 0xda,
- 0x4d, 0x85, 0x33, 0x1c, 0x94, 0x7d, 0x8a, 0x26, 0x79, 0x21, 0xb1, 0x97,
- 0x5c, 0x51, 0x00, 0x99, 0xf5, 0xa6, 0xd5, 0xdb, 0x30, 0x1c, 0x8e, 0x09,
- 0xa5, 0x35, 0xa9, 0x1a, 0x40, 0x40, 0xbf, 0x7b, 0xb8, 0xc2, 0x98, 0xbf,
- 0xc1, 0x64, 0x8e, 0xd6, 0x3b, 0x0a, 0x0f, 0xaf, 0xdc, 0x52, 0x6e, 0xef,
- 0xa3, 0x5b, 0x7a, 0x42, 0x59, 0x9b, 0x12, 0x5a, 0xa5, 0xe7, 0xcc, 0x74,
- 0x9a, 0xe9, 0x7b, 0xb0, 0xd1, 0xc8, 0x23, 0xdc, 0xe9, 0x3d, 0x35, 0x0e,
- 0x6e, 0x86, 0x82, 0x28, 0x38, 0x91, 0xad, 0xa2, 0xbe, 0x27, 0xee, 0xcc,
- 0x90, 0x22, 0xe7, 0xc6, 0x2a, 0x89, 0xcf, 0x7a, 0xaf, 0x65, 0x2d, 0x1f,
- 0x9a, 0xf7, 0xd6, 0xb7, 0x9f, 0x89, 0x40, 0xf8, 0xea, 0x49, 0x7a, 0x3d,
- 0xd0, 0xa2, 0xa7, 0x1b, 0x2f, 0xbd, 0x6a, 0x6f, 0x27, 0x15, 0xd7, 0xe2,
- 0x3c, 0xbc, 0xc9, 0xb8, 0x7d, 0x43, 0xe6, 0x84, 0xbb, 0x55, 0xfe, 0x7b,
- 0xfd, 0x30, 0xd4, 0x1d, 0x41, 0xf3, 0xf9, 0xb1, 0x02, 0xf7, 0x71, 0x8c,
- 0x47, 0xba, 0xd9, 0x14, 0xfe, 0xb6, 0x9a, 0x8a, 0xf7, 0x1f, 0xfa, 0x01,
- 0xf5, 0x8e, 0xc5, 0x26, 0x26, 0xa3, 0xb8, 0x7c, 0x09, 0x98, 0x08, 0x7b,
- 0xc8, 0x5d, 0x86, 0x07, 0x8f, 0x26, 0xf0, 0xff, 0x11, 0x27, 0xf0, 0xbd,
- 0x78, 0x88, 0x1e, 0xb2, 0xe7, 0x48, 0xc0, 0x3f, 0x6c, 0x1e, 0xa4, 0x1a,
- 0xd8, 0xcc, 0x34, 0x14, 0x17, 0x07, 0xca, 0xd7, 0xb5, 0x9b, 0x4b, 0xe0,
- 0xa3, 0x4b, 0x6f, 0x4a, 0x87, 0xaa, 0x8a, 0x19, 0xd7, 0x86, 0xfa, 0x4a,
- 0xe2, 0xb8, 0xad, 0x33, 0xf5, 0x68, 0x02, 0x30, 0x07, 0xd4, 0x5d, 0xf5,
- 0x35, 0x2c, 0x15, 0xb5, 0x53, 0x7c, 0x0e, 0x72, 0x1f, 0xfe, 0xb5, 0xbd,
- 0x9d, 0x46, 0x95, 0xff, 0x8b, 0x15, 0xc9, 0x3d, 0x88, 0x1b, 0xe0, 0xa0,
- 0x61, 0x95, 0x84, 0x29, 0x1b, 0x18, 0x5e, 0x6f, 0x24, 0xbe, 0x32, 0xf1,
- 0x8f, 0x50, 0xf2, 0x76, 0x49, 0x6d, 0xcb, 0x1b, 0x39, 0x9b, 0xfd, 0x6e,
- 0xf0, 0x9a, 0x8a, 0x5c, 0x2c, 0xf4, 0xc4, 0x91, 0x7e, 0xef, 0xf6, 0x9c,
- 0x90, 0x45, 0xe7, 0x3b, 0x92, 0x71, 0xa6, 0xed, 0xc5, 0x7c, 0xc3, 0x1a,
- 0x68, 0x19, 0x6d, 0xd0, 0x80, 0x66, 0x92, 0xa3, 0xc0, 0x74, 0xaa, 0x97,
- 0x47, 0x0e, 0xb4, 0xcc, 0x49, 0x95, 0x6f, 0x39, 0x04, 0x7d, 0x30, 0xba,
- 0x53, 0x1c, 0x55, 0x52, 0x3b, 0xe3, 0xc7, 0x58, 0xa3, 0x6e, 0x44, 0xaf,
- 0xfb, 0x7d, 0xeb, 0x09, 0xa0, 0xc6, 0xa9, 0x12, 0x97, 0xe1, 0x38, 0x0c,
- 0xe9, 0x15, 0xe6, 0xde, 0x81, 0xbf, 0x97, 0x13, 0x41, 0x4a, 0xe9, 0x70,
- 0xf4, 0x83, 0x27, 0x86, 0x9a, 0x8c, 0x0d, 0x9d, 0x5e, 0x03, 0x35, 0xd0,
- 0x52, 0x4c, 0x99, 0xb0, 0xd7, 0xeb, 0xfa, 0xa3, 0x86, 0x97, 0x85, 0xa4,
- 0x4d, 0xa0, 0x26, 0x5e, 0x54, 0xf1, 0x78, 0x6f, 0xcf, 0xd3, 0x00, 0x82,
- 0xf5, 0x8a, 0x2a, 0x8f, 0x6b, 0xa5, 0xc7, 0xca, 0xb7, 0x72, 0x8b, 0x4e,
- 0xad, 0xc7, 0x13, 0xe4, 0x7a, 0x7a, 0xb2, 0x0d, 0x4b, 0x85, 0x09, 0xd4,
- 0x4c, 0x72, 0x28, 0x64, 0xee, 0x96, 0xbc, 0x9c, 0x97, 0xc5, 0x77, 0xc5,
- 0x07, 0x26, 0xa9, 0xca, 0x4d, 0x64, 0x6b, 0xca, 0xcd, 0xe0, 0x48, 0xe8,
- 0xe8, 0xb9, 0xa0, 0x43, 0xc3, 0xda, 0x38, 0x97, 0xbd, 0x53, 0x76, 0x72,
- 0x5e, 0x43, 0x82, 0x1e, 0xf4, 0x44, 0x0f, 0x52, 0x65, 0x95, 0xa4, 0x21,
- 0xad, 0x73, 0xc1, 0xcd, 0xe0, 0x9a, 0x8c, 0x73, 0x20, 0x92, 0x48, 0xbe,
- 0x14, 0xbb, 0xd8, 0x48, 0xfb, 0x13, 0x9e, 0x49, 0x20, 0x9d, 0x55, 0xfe,
- 0x84, 0xf0, 0x51, 0x16, 0xab, 0x3f, 0x83, 0xc1, 0x16, 0x4f, 0xe1, 0x0a,
- 0x62, 0x6c, 0xcc, 0xa4, 0x62, 0xee, 0x3f, 0xf6, 0x84, 0x6e, 0xba, 0x0a,
- 0x6a, 0x0b, 0xb5, 0x1d, 0xdb, 0x29, 0x51, 0xd9, 0xb3, 0x78, 0x34, 0x40,
- 0xe1, 0x33, 0x04, 0x22, 0x9b, 0xae, 0x7c, 0x3f, 0xfd, 0x62, 0x39, 0x4f,
- 0x6c, 0x3b, 0x85, 0x01, 0x28, 0xe6, 0x57, 0x0e, 0x64, 0x06, 0x6d, 0xbd,
- 0x4c, 0xa6, 0x6d, 0xd8, 0x83, 0x83, 0x91, 0x7c, 0x7a, 0x95, 0x60, 0xde,
- 0x7c, 0xdc, 0xf6, 0xc4, 0xf1, 0x81, 0x55, 0x20, 0x67, 0x94, 0x7b, 0x0a,
- 0x7c, 0xd4, 0xad, 0x0f, 0xe0, 0xc3, 0x5f, 0x2c, 0x08, 0xf6, 0x7e, 0x81,
- 0x7b, 0x42, 0xbb, 0xb2, 0x70, 0x5b, 0xb7, 0xc6, 0x06, 0xa7, 0x56, 0xa5,
- 0x49, 0x2e, 0xce, 0xcc, 0x8d, 0x47, 0x61, 0x81, 0xd9, 0x82, 0xe4, 0xf3,
- 0x0b, 0x5c, 0x47, 0xab, 0xe4, 0x35, 0x3d, 0x65, 0x10, 0x3f, 0x8e, 0x41,
- 0x19, 0x9f, 0x96, 0x88, 0x7f, 0xf2, 0xfe, 0x47, 0xf7, 0x1c, 0xd7, 0x4e,
- 0x98, 0x6a, 0xce, 0x5a, 0x8e, 0x2f, 0xf4, 0x9d, 0xbc, 0xa6, 0x70, 0xde,
- 0x5b, 0x75, 0xa1, 0x55, 0xd4, 0xcb, 0x6b, 0xf5, 0xd6, 0x0e, 0x33, 0xb4,
- 0x35, 0xfd, 0x70, 0x9e, 0xf9, 0xd4, 0x0a, 0x6f, 0x7f, 0x93, 0x19, 0x55,
- 0xf7, 0x77, 0x99, 0x11, 0xf0, 0x29, 0x9c, 0xc0, 0xdd, 0x94, 0xe1, 0xbc,
- 0xc2, 0x4e, 0x12, 0xf0, 0xbf, 0x99, 0x6d, 0xf9, 0x96, 0xa6, 0xe7, 0xea,
- 0xae, 0x31, 0xde, 0xc6, 0x83, 0x06, 0x75, 0xae, 0xee, 0x37, 0x30, 0x4c,
- 0xfd, 0x8a, 0xda, 0x60, 0x5b, 0x86, 0xdd, 0x06, 0xd3, 0x60, 0x0d, 0xeb,
- 0xd4, 0xbd, 0x2d, 0x2c, 0x57, 0x26, 0x0e, 0x04, 0xd4, 0x9e, 0xaa, 0x25,
- 0xdc, 0x6a, 0xe4, 0x39, 0x09, 0x03, 0x88, 0x74, 0xa7, 0x5a, 0x92, 0x4a,
- 0x32, 0xb9, 0x9a, 0x27, 0x67, 0xd8, 0xf3, 0x5b, 0x44, 0x1f, 0xf7, 0xca,
- 0x99, 0xc2, 0x5b, 0x8d, 0xdd, 0x21, 0x0e, 0xe9, 0xc7, 0x62, 0x85, 0x10,
- 0x9d, 0x23, 0xb5, 0xc9, 0x34, 0xbd, 0x4a, 0x4e, 0xd3, 0xfc, 0x77, 0xc9,
- 0xf4, 0x33, 0xbc, 0x65, 0x38, 0x68, 0xbf, 0x3b, 0x15, 0x6f, 0xd6, 0x05,
- 0x77, 0x60, 0x75, 0xfb, 0x59, 0x7b, 0xe8, 0x58, 0x08, 0x4e, 0x5d, 0xdd,
- 0x70, 0xfa, 0xd0, 0xab, 0x31, 0xb7, 0x59, 0xd4, 0xbe, 0xce, 0x70, 0x18,
- 0x14, 0xf9, 0xfb, 0x4d, 0xf9, 0xcd, 0xab, 0x48, 0xd2, 0x4e, 0x49, 0x3f,
- 0x95, 0x79, 0x62, 0xa4, 0xc4, 0x67, 0x7c, 0x7f, 0xbe, 0x78, 0x42, 0xb2,
- 0x17, 0xd5, 0xdd, 0x26, 0x61, 0x46, 0xc7, 0xc1, 0x6a, 0xb5, 0x38, 0xa3,
- 0x03, 0x2f, 0xc0, 0xa4, 0xf1, 0xc2, 0x37, 0x4e, 0xf3, 0x14, 0x0a, 0xd2,
- 0x64, 0xed, 0xc7, 0xa2, 0x24, 0xab, 0x3b, 0xdc, 0x62, 0x46, 0x90, 0xd3,
- 0x57, 0xfe, 0xe1, 0x58, 0x94, 0xb0, 0x7f, 0xc3, 0xe1, 0x81, 0x7f, 0x66,
- 0x6e, 0x07, 0x21, 0xa4, 0x14, 0xf5, 0x7b, 0x10, 0xe2, 0x2b, 0x4a, 0xf5,
- 0x31, 0x35, 0x1c, 0x47, 0xfe, 0xa1, 0x23, 0xa5, 0x5c, 0xea, 0x41, 0xd3,
- 0xa6, 0xcf, 0x21, 0x3f, 0x82, 0x05, 0x37, 0x03, 0x6b, 0x8b, 0x76, 0x19,
- 0x46, 0xe8, 0xe9, 0x08, 0x8d, 0x36, 0x08, 0x7e, 0x30, 0xef, 0xd5, 0xc8,
- 0x22, 0xd3, 0x62, 0xd4, 0xd7, 0xe0, 0x8a, 0xf2, 0x2e, 0xa0, 0x2a, 0x7a,
- 0xe7, 0x97, 0xf5, 0x7e, 0xed, 0x1f, 0xc9, 0xdb, 0x47, 0x8e, 0xae, 0x66,
- 0x2f, 0xa0, 0x3f, 0xe7, 0xf6, 0x82, 0xa7, 0x0b, 0x1e, 0x0e, 0x7e, 0xbf,
- 0x08, 0x11, 0xf0, 0x07, 0x9e, 0xaf, 0x11, 0xe8, 0x97, 0xd3, 0x7e, 0x2c,
- 0xb5, 0xa8, 0x62, 0x2b, 0x19, 0xf2, 0x70, 0xa1, 0x21, 0xd0, 0xce, 0x4d,
- 0x84, 0x58, 0x57, 0x77, 0xef, 0xc6, 0xc2, 0x2e, 0x12, 0xc0, 0xd4, 0xf0,
- 0xec, 0x45, 0x87, 0xe0, 0xb1, 0x0b, 0x5f, 0x1b, 0x81, 0xb0, 0xb4, 0xb7,
- 0x23, 0x65, 0x67, 0x5a, 0x4c, 0xc8, 0xaf, 0x5f, 0x71, 0xb4, 0x7c, 0x23,
- 0x26, 0x89, 0x08, 0x32, 0xc5, 0x4a, 0xb0, 0x11, 0xba, 0x19, 0x7d, 0x2c,
- 0x0e, 0x6d, 0x55, 0xf9, 0x22, 0xa7, 0x5e, 0x8c, 0x30, 0xed, 0x98, 0xcb,
- 0xb5, 0x25, 0x5f, 0xbb, 0xdd, 0x44, 0x3c, 0x9c, 0x92, 0x2d, 0xd9, 0x97,
- 0x8b, 0x2e, 0xc1, 0xf0, 0xed, 0xb9, 0x37, 0x78, 0xf7, 0xf9, 0x7d, 0x6a,
- 0x63, 0xff, 0xdc, 0x1b, 0x3b, 0x7f, 0x26, 0x77, 0x02, 0x60, 0x50, 0x49,
- 0x2f, 0xf7, 0x5f, 0x40, 0x7d, 0x4c, 0xd2, 0x63, 0x72, 0xb5, 0xb9, 0x79,
- 0xa0, 0x88, 0x79, 0x89, 0xfa, 0xb6, 0x86, 0x4f, 0xd5, 0x3d, 0x44, 0xfa,
- 0xec, 0x5f, 0x29, 0x7c, 0x38, 0x47, 0x0f, 0x0c, 0x4a, 0x1d, 0x2e, 0x93,
- 0xf7, 0xc5, 0xfa, 0x7c, 0x73, 0xf3, 0xc6, 0x47, 0xc5, 0xe7, 0x6e, 0xcc,
- 0xcd, 0x0d, 0x25, 0xc2, 0xef, 0xd3, 0xc0, 0xf8, 0xc1, 0x23, 0xae, 0x3a,
- 0x9d, 0x93, 0xcf, 0xd3, 0xf3, 0xcb, 0x49, 0x9a, 0xec, 0x13, 0x1c, 0xe8,
- 0x74, 0x72, 0xf1, 0xee, 0xf3, 0xd4, 0xfd, 0xa9, 0x73, 0x9c, 0x65, 0x65,
- 0xe1, 0xd4, 0x8f, 0x74, 0x9d, 0x97, 0x8e, 0x5b, 0xcd, 0x75, 0xf3, 0xd1,
- 0x14, 0xd7, 0x51, 0xf9, 0xb2, 0x52, 0xc4, 0x77, 0xca, 0x0e, 0x5a, 0x0a,
- 0xc7, 0x91, 0x2e, 0x15, 0x25, 0x4a, 0xf7, 0x96, 0xc1, 0x5d, 0x51, 0x34,
- 0x70, 0x4c, 0xb5, 0xfa, 0x24, 0x99, 0x9e, 0x9f, 0x7c, 0xfa, 0x2d, 0xd5,
- 0xbc, 0x8d, 0xeb, 0xeb, 0xeb, 0x66, 0x64, 0x9f, 0x4d, 0x87, 0x55, 0xde,
- 0xe9, 0xa4, 0xe3, 0x71, 0x72, 0xf2, 0x21, 0xbd, 0xd4, 0x1b, 0xee, 0xd6,
- 0x8f, 0xaf, 0x0f, 0x7f, 0x71, 0x1a, 0xf6, 0x3c, 0x5f, 0xbb, 0x5f, 0x3a,
- 0x9d, 0x7f, 0x03, 0x79, 0x3a, 0x77, 0xa4, 0x90, 0xdd, 0x03, 0x00,
+ 0x1f, 0x8b, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0xec, 0xbd,
+ 0x7b, 0x77, 0xdc, 0xc6, 0x95, 0x2f, 0xfa, 0xbf, 0x3f, 0x05, 0xa6, 0x73,
+ 0x72, 0x48, 0x26, 0x8d, 0xe6, 0x4b, 0x2f, 0x33, 0xb4, 0xaf, 0x69, 0x8a,
+ 0xb2, 0x39, 0x91, 0x44, 0x46, 0xa4, 0x62, 0x67, 0x6c, 0x2f, 0x2d, 0x74,
+ 0x37, 0x9a, 0x84, 0xd5, 0x0d, 0x74, 0x00, 0x34, 0x29, 0x3a, 0x27, 0xf7,
+ 0xb3, 0xdf, 0xfd, 0xac, 0x2a, 0xa0, 0x0a, 0x4d, 0x36, 0x45, 0x59, 0x33,
+ 0x67, 0xdd, 0x39, 0x27, 0xb2, 0x44, 0x02, 0x55, 0x85, 0xaa, 0x5d, 0xfb,
+ 0xbd, 0x7f, 0x3b, 0x8a, 0x6e, 0xfb, 0xbf, 0x77, 0xf4, 0xbf, 0x77, 0xf0,
+ 0x7f, 0xf0, 0xdf, 0x2f, 0xa2, 0xe8, 0xb4, 0x2c, 0x7e, 0x4d, 0x47, 0x75,
+ 0xf8, 0xd9, 0x77, 0xef, 0xfe, 0x4f, 0xc4, 0xff, 0x0f, 0xde, 0xf9, 0x19,
+ 0xfe, 0xfb, 0xc5, 0xd2, 0xb1, 0x37, 0x23, 0xfb, 0xc2, 0xff, 0x79, 0xb7,
+ 0x11, 0xdd, 0xf6, 0xc2, 0xff, 0x89, 0xd6, 0xe9, 0x85, 0x77, 0x32, 0xc3,
+ 0x3e, 0xfe, 0xfd, 0xdd, 0xbb, 0xe5, 0x93, 0xfc, 0x8c, 0xab, 0xc2, 0x3f,
+ 0x36, 0xf1, 0xbd, 0x9f, 0xdf, 0xe1, 0x5f, 0xe1, 0x27, 0x5f, 0x7c, 0xf1,
+ 0xfa, 0xe0, 0xd5, 0x91, 0xbe, 0x3a, 0x5a, 0x94, 0xd3, 0x28, 0x8e, 0xea,
+ 0x32, 0xc9, 0xab, 0x49, 0x5a, 0x46, 0x49, 0xf4, 0xf6, 0xcd, 0xcb, 0x2f,
+ 0xbe, 0x38, 0xfb, 0xc7, 0xeb, 0x93, 0xd3, 0xb3, 0xe3, 0xb3, 0xc6, 0x63,
+ 0x3f, 0x15, 0xf3, 0x3a, 0x2b, 0xf2, 0x0a, 0x96, 0x0f, 0x0f, 0x55, 0xbf,
+ 0x7c, 0xf1, 0xc5, 0xf3, 0xa3, 0xb3, 0xc3, 0x37, 0xc7, 0xa7, 0xe7, 0xc7,
+ 0x27, 0xaf, 0x1b, 0x4f, 0x66, 0x15, 0x0c, 0x54, 0x17, 0xc5, 0x34, 0x9a,
+ 0x14, 0xa5, 0x19, 0xbc, 0xcc, 0xf2, 0x8b, 0x68, 0x9c, 0xd4, 0x49, 0x34,
+ 0x29, 0x8b, 0x59, 0x84, 0xbf, 0x29, 0xe0, 0xb9, 0x2a, 0x2d, 0xaf, 0x60,
+ 0xe6, 0x45, 0x85, 0xbf, 0xc6, 0x81, 0x07, 0xd1, 0x71, 0xad, 0xc3, 0x55,
+ 0x8b, 0xf9, 0xbc, 0x28, 0xeb, 0x2a, 0xaa, 0x2f, 0xd3, 0x2a, 0x8d, 0xe6,
+ 0x65, 0x51, 0x17, 0xa3, 0x62, 0x5a, 0xed, 0x45, 0xcf, 0x8f, 0x0f, 0xcf,
+ 0xfb, 0xd1, 0x8b, 0xe3, 0x97, 0x47, 0xf0, 0xe7, 0xf9, 0x29, 0xfd, 0x71,
+ 0xd6, 0x8f, 0xbe, 0x3b, 0x39, 0xfd, 0xfe, 0xe8, 0x8d, 0xfe, 0x17, 0x7e,
+ 0xf0, 0xfd, 0x39, 0xfc, 0x52, 0x87, 0xc3, 0x7f, 0xc0, 0xcf, 0xa2, 0xe3,
+ 0x57, 0x07, 0xf0, 0x06, 0xfe, 0x09, 0xff, 0x7a, 0xf9, 0x1c, 0xff, 0x81,
+ 0x7f, 0xc2, 0x3f, 0x5e, 0xfd, 0xed, 0x1c, 0x86, 0x3d, 0x3d, 0x39, 0xdd,
+ 0xe5, 0x3f, 0xe1, 0x47, 0x6f, 0xce, 0x5f, 0x9d, 0xf2, 0x9f, 0xf4, 0x8f,
+ 0x33, 0x3b, 0xdc, 0xd9, 0x21, 0xfc, 0xe2, 0x8c, 0x66, 0x3f, 0x7b, 0xf5,
+ 0x2d, 0xfd, 0x71, 0x86, 0x7f, 0xf2, 0x0f, 0x68, 0xaa, 0xf3, 0xa3, 0x97,
+ 0xaf, 0x8f, 0x60, 0xc4, 0x73, 0x7a, 0xea, 0x87, 0xb3, 0x28, 0xc9, 0xc7,
+ 0xf0, 0x9f, 0xb3, 0xc1, 0x17, 0xed, 0x1d, 0x9b, 0x17, 0xd7, 0x69, 0x99,
+ 0x8e, 0xa3, 0xe1, 0x4d, 0x14, 0x4d, 0xb3, 0x21, 0xfd, 0x98, 0xf6, 0x2f,
+ 0x4a, 0xa6, 0xf0, 0x37, 0xdd, 0xc5, 0xb8, 0x4c, 0xa7, 0x49, 0x0d, 0xcf,
+ 0x45, 0x93, 0x34, 0xa9, 0x17, 0x65, 0x0a, 0xfb, 0x15, 0x9d, 0xa5, 0xa9,
+ 0x0e, 0x27, 0xaf, 0xae, 0xef, 0x6e, 0xd0, 0xcb, 0xe3, 0xb4, 0x4e, 0xb2,
+ 0x69, 0x05, 0xd3, 0xe1, 0xc1, 0xca, 0x33, 0xe7, 0x97, 0x69, 0x84, 0x5b,
+ 0x0d, 0xfb, 0x7b, 0x93, 0xd7, 0xc9, 0x07, 0x9a, 0x5e, 0xb6, 0x36, 0x1e,
+ 0xa7, 0xf3, 0x34, 0x1f, 0xa7, 0x79, 0x3d, 0x88, 0xfe, 0x51, 0x2c, 0xa2,
+ 0x49, 0x06, 0x0b, 0x4e, 0x64, 0x1c, 0x98, 0x76, 0x9c, 0x56, 0xa3, 0x32,
+ 0x23, 0x4a, 0xd0, 0xe1, 0xb2, 0x3c, 0x7a, 0xf3, 0xe2, 0x30, 0xda, 0xfd,
+ 0xf2, 0xd9, 0x13, 0xfb, 0x59, 0xc7, 0x93, 0xe8, 0x06, 0x5e, 0x87, 0x61,
+ 0xaf, 0xb2, 0x71, 0xca, 0x84, 0x15, 0x5d, 0x67, 0xf5, 0x65, 0xb1, 0xa8,
+ 0xe1, 0x5f, 0xd3, 0x34, 0x19, 0xe3, 0x81, 0xeb, 0xb4, 0x7b, 0x9b, 0x9b,
+ 0x51, 0x35, 0xba, 0x4c, 0x67, 0x69, 0x9f, 0x77, 0xe4, 0x62, 0x91, 0x56,
+ 0x55, 0x5a, 0xe9, 0x70, 0xd7, 0x97, 0x49, 0x6d, 0x1e, 0xa6, 0x91, 0xaf,
+ 0x13, 0x5c, 0xe2, 0x71, 0x8d, 0xa4, 0x91, 0xc3, 0xb2, 0x26, 0xc9, 0x62,
+ 0x8a, 0x84, 0x52, 0xf0, 0x31, 0x47, 0xd1, 0x10, 0x26, 0x8a, 0x92, 0xaa,
+ 0x5a, 0xcc, 0xd2, 0x2a, 0x8a, 0x0a, 0x78, 0xac, 0x34, 0xc3, 0x0d, 0x93,
+ 0x0a, 0xb7, 0xb0, 0xc8, 0xe1, 0x7f, 0x93, 0x3a, 0xcd, 0xe3, 0x05, 0xfd,
+ 0xfb, 0xb2, 0xa8, 0xe0, 0x9d, 0x3c, 0x99, 0x21, 0xa9, 0xa5, 0x93, 0xec,
+ 0x03, 0xee, 0xee, 0x0b, 0xd8, 0xc6, 0xf4, 0x43, 0x32, 0x9b, 0x4f, 0x61,
+ 0x6d, 0xb8, 0xa7, 0xf4, 0x14, 0x3e, 0x64, 0x86, 0xab, 0xea, 0xa4, 0xac,
+ 0xf1, 0x73, 0xf0, 0x03, 0xa3, 0xde, 0xa4, 0x9e, 0x0f, 0x7a, 0xfc, 0x19,
+ 0x3a, 0xbf, 0xae, 0x18, 0xc9, 0xd4, 0x6e, 0x12, 0x6e, 0xf0, 0x28, 0xc9,
+ 0xa3, 0x6a, 0x9e, 0x8e, 0xb2, 0xc9, 0x0d, 0x10, 0x07, 0xfc, 0x6f, 0x56,
+ 0x2c, 0xe0, 0xb9, 0x62, 0x42, 0x47, 0x54, 0xf1, 0x22, 0x6b, 0x3c, 0xb1,
+ 0x51, 0x31, 0x9b, 0x21, 0xf9, 0xc0, 0x19, 0xe7, 0xe9, 0x80, 0x8e, 0x11,
+ 0x68, 0x25, 0x29, 0xcd, 0xd9, 0x4f, 0xd2, 0x1a, 0xb6, 0x70, 0x4c, 0x27,
+ 0x02, 0x7b, 0x0c, 0x57, 0xeb, 0x9f, 0x0b, 0x38, 0xc8, 0x2c, 0x99, 0x46,
+ 0xf0, 0x62, 0x0e, 0xb7, 0x0c, 0x7e, 0x81, 0x43, 0xf1, 0x7c, 0x19, 0x3c,
+ 0x5a, 0x94, 0x63, 0xbc, 0x7c, 0xf9, 0x14, 0x76, 0x9b, 0x16, 0x09, 0x1b,
+ 0xa1, 0xc3, 0xc5, 0xff, 0xd5, 0x8f, 0xe2, 0x78, 0x9e, 0x94, 0x40, 0x80,
+ 0xe9, 0x74, 0xe0, 0xad, 0x56, 0xd7, 0x83, 0xcb, 0x89, 0x94, 0x39, 0xe0,
+ 0x0f, 0x68, 0xdd, 0x33, 0xd8, 0xbd, 0x31, 0xfe, 0xd3, 0x21, 0x13, 0xfc,
+ 0x3e, 0x9e, 0xb1, 0xe0, 0x85, 0xb8, 0x43, 0xb4, 0xae, 0x44, 0x52, 0xd7,
+ 0xe9, 0x6c, 0xce, 0x27, 0x5a, 0xa6, 0xb0, 0x2c, 0x78, 0x18, 0xbe, 0x61,
+ 0xc4, 0xd3, 0x5c, 0xd3, 0xa1, 0x17, 0xb8, 0xe7, 0xd1, 0x0c, 0x0e, 0x3e,
+ 0x83, 0xd3, 0xb1, 0x97, 0xa4, 0x82, 0x3b, 0x5e, 0x15, 0x3a, 0x5c, 0x8d,
+ 0xb4, 0x13, 0x5d, 0xa4, 0x75, 0xcd, 0x8f, 0xe3, 0x2a, 0x26, 0x40, 0xcc,
+ 0x15, 0x33, 0x22, 0xda, 0x10, 0x3c, 0x72, 0xe1, 0x44, 0xe3, 0x22, 0xca,
+ 0x8b, 0x1a, 0x37, 0xc2, 0x8e, 0x0c, 0x53, 0xc7, 0x3a, 0x1c, 0xae, 0x81,
+ 0xbf, 0xb3, 0x4a, 0xeb, 0xc5, 0x3c, 0xba, 0x84, 0xbf, 0x56, 0x97, 0xc9,
+ 0x7b, 0xa4, 0x95, 0xf3, 0x4b, 0xb8, 0x4a, 0xd9, 0x0c, 0xa9, 0x1e, 0x86,
+ 0x87, 0x8d, 0x4a, 0xc7, 0x83, 0xe8, 0xd0, 0xac, 0x3b, 0x92, 0x2f, 0xc1,
+ 0x6d, 0xd4, 0xe1, 0x8a, 0x7c, 0x0a, 0xa7, 0x38, 0x84, 0x1f, 0x8e, 0x0b,
+ 0xd8, 0x47, 0xa2, 0x30, 0xda, 0x40, 0x7b, 0x48, 0xf8, 0x23, 0x60, 0x94,
+ 0xb0, 0xfa, 0x69, 0x73, 0xcb, 0x60, 0x4f, 0xaf, 0x8a, 0x51, 0xe2, 0x5e,
+ 0x46, 0xfc, 0x15, 0x8c, 0x8e, 0x5f, 0x00, 0x63, 0xce, 0xd3, 0x12, 0x5e,
+ 0x9e, 0x21, 0x5b, 0x49, 0xeb, 0xeb, 0x14, 0xf6, 0xac, 0x4a, 0xf1, 0x40,
+ 0xeb, 0x94, 0x37, 0xb9, 0x5c, 0xe4, 0x95, 0xdd, 0xf7, 0x53, 0xbd, 0xac,
+ 0x79, 0x74, 0x7c, 0x7a, 0xf5, 0x24, 0xfa, 0x0d, 0x17, 0x94, 0x8d, 0x95,
+ 0x6a, 0xf4, 0x06, 0xe3, 0x24, 0x51, 0x04, 0x7c, 0x20, 0x99, 0x23, 0xb1,
+ 0xc1, 0x1c, 0x23, 0xa0, 0xb2, 0xe4, 0x02, 0x16, 0x5f, 0x65, 0x17, 0xf9,
+ 0x40, 0x87, 0x7b, 0x99, 0xbd, 0xc7, 0x15, 0x7e, 0x61, 0xe5, 0x54, 0xef,
+ 0xb2, 0xae, 0xe7, 0x70, 0xd5, 0x7f, 0x9a, 0xa4, 0xcf, 0xb6, 0xf6, 0xf6,
+ 0x76, 0xff, 0xb8, 0xf3, 0x38, 0xad, 0x2f, 0xb7, 0x7e, 0xd9, 0xec, 0x99,
+ 0x87, 0x8e, 0xe0, 0x08, 0x6e, 0xea, 0x4b, 0x3a, 0x29, 0x61, 0x1e, 0xe3,
+ 0x10, 0xb5, 0xf0, 0xa9, 0xc2, 0x6e, 0xe3, 0x97, 0x26, 0x6d, 0x5a, 0x34,
+ 0x87, 0x45, 0xbb, 0x0e, 0xdb, 0x97, 0xe1, 0x91, 0x95, 0x17, 0x70, 0x17,
+ 0xf3, 0xba, 0xdf, 0xbc, 0x9a, 0x24, 0xad, 0xf0, 0xdb, 0xf0, 0xfd, 0xba,
+ 0x04, 0xae, 0x0a, 0x3f, 0x83, 0x31, 0xe1, 0x04, 0x16, 0xa3, 0x4b, 0xd8,
+ 0x9d, 0xef, 0x5e, 0x9e, 0x7c, 0xfb, 0xed, 0xf1, 0xeb, 0xef, 0xba, 0x6e,
+ 0xad, 0xa1, 0x12, 0x3a, 0x36, 0x98, 0x0c, 0x76, 0x18, 0xc6, 0x80, 0x1b,
+ 0x4c, 0x3f, 0x00, 0x86, 0x7e, 0x5d, 0x66, 0x44, 0x7b, 0xd3, 0xac, 0x82,
+ 0x5f, 0xd0, 0x26, 0x66, 0xe6, 0xc4, 0x86, 0x65, 0x32, 0x4a, 0xe9, 0x3d,
+ 0xa0, 0xde, 0x0b, 0xf8, 0x1b, 0xff, 0x9a, 0x7e, 0xfe, 0x3e, 0xad, 0x81,
+ 0xaa, 0x7e, 0x80, 0x4f, 0x47, 0x21, 0x50, 0x23, 0x75, 0xf5, 0x2e, 0xa6,
+ 0xc5, 0x70, 0x08, 0xa3, 0xf5, 0x02, 0x07, 0x47, 0x33, 0xf0, 0x21, 0xd5,
+ 0x97, 0x65, 0x9a, 0x46, 0xe3, 0x6c, 0x02, 0xf7, 0x01, 0x3e, 0x9a, 0x19,
+ 0x16, 0xfc, 0xfe, 0x7d, 0x4a, 0xe3, 0xec, 0x05, 0x8e, 0xa5, 0xca, 0xea,
+ 0x74, 0xf0, 0x2f, 0x38, 0xf4, 0x7e, 0x7d, 0x5d, 0xf4, 0x69, 0x80, 0x7f,
+ 0x0f, 0x60, 0x67, 0xed, 0xe9, 0xc0, 0x22, 0x6f, 0xe4, 0xeb, 0xe1, 0x3e,
+ 0x09, 0x83, 0xa1, 0xd5, 0x4f, 0x40, 0x4c, 0xcd, 0xe1, 0x2a, 0xc0, 0x96,
+ 0x96, 0xd9, 0x08, 0xef, 0x52, 0x96, 0xd2, 0xb7, 0xb3, 0x60, 0xff, 0xe9,
+ 0x17, 0xdc, 0xd0, 0x2c, 0x6f, 0x4c, 0x3b, 0xa1, 0x59, 0x91, 0x5b, 0x0a,
+ 0x7f, 0xc5, 0xc9, 0x36, 0xf1, 0x6a, 0xfe, 0xb4, 0x1d, 0x6f, 0x6f, 0x6d,
+ 0xfd, 0x32, 0xa8, 0x3f, 0xd4, 0xbd, 0x3b, 0xbe, 0xb1, 0xb5, 0xe5, 0xbc,
+ 0x83, 0x0f, 0xaf, 0xd3, 0x36, 0xa8, 0xa0, 0xf9, 0x2d, 0x2d, 0x8b, 0x6a,
+ 0xe3, 0x8e, 0x63, 0x25, 0xf1, 0x6f, 0xad, 0xb9, 0x5f, 0xa7, 0x15, 0x09,
+ 0x5d, 0xfb, 0xc5, 0xc8, 0x78, 0x89, 0xf8, 0x44, 0x47, 0x49, 0xc7, 0x7d,
+ 0x12, 0x39, 0xba, 0x3f, 0x78, 0xcf, 0xab, 0x14, 0xa8, 0x19, 0xb8, 0x2f,
+ 0x6c, 0x29, 0x10, 0x6a, 0xfa, 0xc1, 0xe8, 0x35, 0xc0, 0xd3, 0xd2, 0x64,
+ 0x74, 0xc9, 0x52, 0x29, 0x74, 0x14, 0xee, 0x92, 0x92, 0x72, 0x74, 0x99,
+ 0x5d, 0xc1, 0x9e, 0x7c, 0xf9, 0xe5, 0x93, 0x18, 0xfe, 0xf8, 0xf2, 0x97,
+ 0xcd, 0xab, 0x62, 0x0a, 0x5b, 0xf4, 0xe8, 0x97, 0x4d, 0x24, 0xb5, 0x7f,
+ 0x25, 0xfd, 0x61, 0x7f, 0xf4, 0xef, 0xc1, 0x65, 0x3d, 0x9b, 0xf6, 0xba,
+ 0x65, 0x0b, 0x48, 0xa9, 0x74, 0x0e, 0x17, 0x05, 0xa4, 0x0b, 0x70, 0x39,
+ 0xd2, 0xcc, 0xe0, 0x4e, 0x09, 0xcd, 0xc1, 0x82, 0xf0, 0x40, 0x71, 0xbd,
+ 0xc0, 0x8d, 0x5e, 0xe3, 0x25, 0x87, 0xa3, 0x1c, 0xa6, 0xa5, 0x73, 0xf2,
+ 0x53, 0xe0, 0xa0, 0xb7, 0xaf, 0xd6, 0x1e, 0xdf, 0xde, 0x76, 0xe0, 0x04,
+ 0xbb, 0xde, 0x80, 0x2d, 0xdf, 0xdb, 0x69, 0x3d, 0xfe, 0x03, 0x32, 0x79,
+ 0x4b, 0x40, 0xb0, 0x84, 0x7f, 0xfd, 0xdb, 0x39, 0x01, 0x92, 0x01, 0xc8,
+ 0x01, 0xdf, 0x23, 0x8f, 0x44, 0x56, 0xde, 0xe2, 0x03, 0xc0, 0x3f, 0x40,
+ 0x82, 0x18, 0x75, 0x4d, 0xf4, 0x91, 0x61, 0x32, 0x04, 0x8e, 0x7b, 0x99,
+ 0x5c, 0xa5, 0xf8, 0xd5, 0xf3, 0x05, 0x69, 0x10, 0xd1, 0x64, 0x01, 0x17,
+ 0x4c, 0x39, 0x5c, 0x86, 0xb2, 0x65, 0x31, 0x84, 0x2b, 0xfd, 0xcf, 0x45,
+ 0x51, 0xf3, 0xf6, 0x24, 0x57, 0x05, 0xb0, 0x42, 0x78, 0xd4, 0x08, 0xfd,
+ 0xcb, 0x14, 0x5e, 0xa1, 0x79, 0x33, 0xdc, 0x52, 0xb8, 0x67, 0x46, 0x05,
+ 0xc8, 0x6a, 0x91, 0x05, 0xc9, 0xb4, 0x02, 0x85, 0xe4, 0xa2, 0x40, 0x82,
+ 0x21, 0x65, 0x8e, 0x4e, 0x1c, 0x04, 0xc0, 0x25, 0x70, 0xe1, 0x51, 0xed,
+ 0xa8, 0x24, 0xc4, 0x79, 0xe0, 0x43, 0xe8, 0xbc, 0x92, 0x69, 0x9f, 0xaf,
+ 0xea, 0xc4, 0x2a, 0x1f, 0xd1, 0xda, 0xff, 0x5e, 0xeb, 0x47, 0x6b, 0xff,
+ 0xcf, 0x1a, 0x31, 0xaa, 0xb5, 0x3f, 0xad, 0xd9, 0xfb, 0x7f, 0x06, 0x93,
+ 0x22, 0x35, 0x4d, 0x26, 0x91, 0x72, 0x07, 0x5e, 0x47, 0x7c, 0x81, 0x22,
+ 0x1c, 0x7f, 0x06, 0xbf, 0x83, 0xe7, 0xff, 0x7e, 0xf0, 0xe6, 0xf8, 0xe0,
+ 0xdb, 0x97, 0x47, 0x4d, 0xcd, 0xde, 0xaa, 0xd9, 0x4d, 0x1d, 0x23, 0xba,
+ 0x4a, 0xca, 0x0c, 0x76, 0x0b, 0x16, 0xbf, 0x9e, 0x8c, 0x91, 0x11, 0xc3,
+ 0xc6, 0x3c, 0x1b, 0xec, 0x0e, 0xb6, 0x36, 0x06, 0xa0, 0x73, 0xd6, 0xf6,
+ 0xf7, 0x46, 0x4d, 0xa3, 0x49, 0x63, 0xfd, 0x39, 0x31, 0x9d, 0xaf, 0x40,
+ 0x78, 0xd6, 0xc8, 0x81, 0xe0, 0x53, 0x5a, 0xbf, 0xfa, 0x06, 0x8f, 0x1e,
+ 0x2e, 0x2a, 0x6c, 0x49, 0x0a, 0x17, 0x12, 0xfe, 0xd1, 0x6b, 0xc8, 0x46,
+ 0x90, 0x60, 0x55, 0x0d, 0xd7, 0x37, 0xca, 0x26, 0x28, 0x6c, 0xc5, 0x60,
+ 0x60, 0x39, 0x38, 0x4e, 0xaa, 0xcb, 0x68, 0x3d, 0xde, 0xd8, 0xb0, 0xdb,
+ 0xf0, 0x77, 0x1d, 0x3b, 0x92, 0x29, 0x2b, 0x1a, 0x0d, 0x64, 0xd5, 0x87,
+ 0x39, 0x7c, 0x14, 0xaf, 0x9f, 0x15, 0x15, 0xe4, 0xd1, 0xb0, 0x00, 0x3c,
+ 0x00, 0x21, 0xb0, 0xde, 0xbf, 0xfe, 0x85, 0x4b, 0xfa, 0xf7, 0xbf, 0x7b,
+ 0x3a, 0xdc, 0xba, 0xaa, 0xab, 0x48, 0x1f, 0x4c, 0x08, 0x1b, 0xb8, 0x12,
+ 0xfc, 0xa7, 0x8c, 0x42, 0xaa, 0x22, 0x69, 0xcf, 0xa4, 0x2d, 0x8e, 0x65,
+ 0x07, 0xa2, 0x5e, 0x1c, 0xf3, 0x9c, 0x71, 0x6f, 0x60, 0xb5, 0x6e, 0x78,
+ 0x10, 0x6f, 0x59, 0x15, 0x89, 0x34, 0x93, 0x35, 0x16, 0x3c, 0xa4, 0xd9,
+ 0x99, 0x1e, 0x8e, 0xda, 0x83, 0xb5, 0x02, 0x13, 0x25, 0xb6, 0x42, 0xe2,
+ 0x7f, 0x38, 0x4d, 0xf2, 0xf7, 0x30, 0xbd, 0xd5, 0x6a, 0x78, 0x0f, 0x81,
+ 0x52, 0x53, 0x96, 0x82, 0xe9, 0x07, 0x64, 0xfe, 0x09, 0x8a, 0x33, 0x1d,
+ 0x0b, 0xb4, 0xc4, 0x63, 0x1a, 0x26, 0xc2, 0xef, 0x83, 0xcd, 0x85, 0xfb,
+ 0x3d, 0x04, 0x7d, 0x61, 0xc6, 0x3a, 0xa2, 0x4b, 0xcd, 0x35, 0x51, 0x2f,
+ 0x30, 0x6c, 0xfe, 0x16, 0xfc, 0x47, 0x26, 0xa2, 0x04, 0x26, 0x07, 0x51,
+ 0x54, 0x4d, 0x61, 0xc7, 0x85, 0x2c, 0x7b, 0x3f, 0xc3, 0x68, 0x4d, 0x3d,
+ 0x16, 0xf6, 0x39, 0x19, 0x8d, 0x50, 0x8d, 0x44, 0xfa, 0xe1, 0xaf, 0x8f,
+ 0xd2, 0xfc, 0x2a, 0x2b, 0x8b, 0x1c, 0xa5, 0xae, 0x43, 0x4c, 0x43, 0xd4,
+ 0xbf, 0x4a, 0x58, 0x2b, 0x68, 0x4a, 0x05, 0x2b, 0xce, 0xb0, 0x92, 0xd9,
+ 0xc0, 0x1d, 0x8e, 0x79, 0x57, 0x3a, 0x45, 0x9b, 0x1b, 0xb9, 0x65, 0x46,
+ 0xf7, 0xa6, 0x84, 0xcb, 0x9f, 0x95, 0x29, 0x7d, 0x7c, 0x68, 0x6c, 0x7c,
+ 0x14, 0x89, 0x26, 0x45, 0x6a, 0x73, 0xef, 0x3d, 0x8e, 0x66, 0x6d, 0x11,
+ 0xb1, 0x16, 0xe0, 0xb5, 0xe9, 0x02, 0x55, 0x14, 0xf8, 0x35, 0x70, 0xeb,
+ 0xcc, 0xe8, 0x13, 0x70, 0x6d, 0xe1, 0x36, 0x8e, 0x6f, 0x90, 0xdf, 0xc3,
+ 0x4d, 0x8e, 0x4e, 0xa7, 0x89, 0x95, 0xd7, 0x0e, 0x0d, 0x47, 0x7f, 0xa4,
+ 0x13, 0x90, 0xef, 0xa8, 0x9a, 0xc7, 0x88, 0x22, 0x1b, 0x28, 0x62, 0x0d,
+ 0x1f, 0x59, 0x23, 0xd1, 0x00, 0x07, 0x54, 0x57, 0xb2, 0xa5, 0x66, 0x38,
+ 0x30, 0x8c, 0x51, 0x3f, 0x99, 0xb0, 0x42, 0x13, 0xfc, 0x28, 0xd5, 0x72,
+ 0x64, 0x51, 0xb4, 0xa6, 0xf3, 0xa2, 0xf1, 0x3d, 0x46, 0xe1, 0x69, 0x7c,
+ 0xd8, 0xc4, 0xf9, 0x26, 0x78, 0xab, 0x4f, 0x42, 0xc9, 0x59, 0xff, 0x1f,
+ 0x1b, 0xf7, 0x13, 0xe9, 0x4c, 0x7e, 0x6b, 0x86, 0xb3, 0x8f, 0x7d, 0x23,
+ 0x8f, 0xd9, 0x53, 0x3f, 0x12, 0x1e, 0x1e, 0x45, 0xdf, 0xc1, 0x7e, 0xb3,
+ 0x8a, 0x78, 0x76, 0xf4, 0xa6, 0xe3, 0x1b, 0x72, 0x38, 0x1a, 0xd1, 0x22,
+ 0xc1, 0x8c, 0x02, 0x63, 0x12, 0x97, 0x87, 0xcf, 0x1b, 0xfb, 0xc0, 0xac,
+ 0xd3, 0x11, 0x31, 0xce, 0x62, 0xd7, 0xfe, 0x88, 0x4f, 0xaf, 0x39, 0xbf,
+ 0x92, 0x2b, 0x86, 0x2c, 0xec, 0x2b, 0x96, 0x2c, 0x55, 0x5b, 0x74, 0xce,
+ 0xb3, 0xcd, 0x7f, 0xfd, 0x0b, 0xdf, 0xfb, 0xf7, 0xbf, 0x37, 0xe1, 0xba,
+ 0x5f, 0x16, 0xe3, 0x96, 0x78, 0xe1, 0x31, 0x90, 0x04, 0x0d, 0x7d, 0x8a,
+ 0x7e, 0x68, 0x98, 0x62, 0x42, 0xf4, 0x44, 0x16, 0xd9, 0x64, 0x91, 0x8b,
+ 0x01, 0x22, 0x56, 0x85, 0xc3, 0xac, 0x66, 0x60, 0x02, 0x44, 0x2d, 0x12,
+ 0xd0, 0x2b, 0x3e, 0x2b, 0x4a, 0xfa, 0xd7, 0x55, 0x9a, 0x67, 0xb8, 0x2d,
+ 0xb0, 0x17, 0x70, 0x14, 0x64, 0xbe, 0x22, 0x65, 0xc2, 0xdd, 0x9b, 0xa9,
+ 0xa6, 0xe2, 0x2a, 0xf2, 0x60, 0xcf, 0x64, 0x53, 0x62, 0xe6, 0x97, 0xa0,
+ 0x9a, 0x81, 0x68, 0x00, 0x4d, 0x51, 0xb4, 0x3b, 0x78, 0xa3, 0x8f, 0xa7,
+ 0x8b, 0xaf, 0x03, 0x8f, 0x42, 0x31, 0xa6, 0x56, 0xa2, 0xb2, 0xbe, 0x04,
+ 0xff, 0xa7, 0xc3, 0xfd, 0xe7, 0xd9, 0xc9, 0xeb, 0x88, 0xb9, 0xd8, 0x58,
+ 0x2f, 0x3b, 0x8d, 0xf4, 0x6b, 0x55, 0xe4, 0x7d, 0x92, 0x7c, 0x20, 0x55,
+ 0x8b, 0x31, 0xdf, 0x2d, 0xf7, 0x01, 0xdc, 0x0b, 0xa0, 0x0c, 0x34, 0x99,
+ 0x9f, 0x3c, 0x32, 0x54, 0xcb, 0xcf, 0x2a, 0x87, 0x18, 0x3e, 0x79, 0xc4,
+ 0xf6, 0x61, 0x32, 0x9f, 0x83, 0x70, 0xd5, 0x6d, 0x22, 0x6b, 0x1c, 0x0c,
+ 0x51, 0x7b, 0x61, 0x68, 0xbb, 0xab, 0x0c, 0xa7, 0x8c, 0x40, 0xa4, 0x38,
+ 0xcc, 0x6c, 0x86, 0x4b, 0x9f, 0xa2, 0x8d, 0xa4, 0x26, 0xca, 0x38, 0x12,
+ 0x92, 0x29, 0xb3, 0x8b, 0x4b, 0x20, 0x0c, 0xa4, 0xf5, 0x16, 0xaf, 0x1c,
+ 0x58, 0x9e, 0xef, 0x9a, 0x68, 0x44, 0xce, 0x97, 0xc5, 0x94, 0xce, 0x35,
+ 0x47, 0xc9, 0x3e, 0xbc, 0x21, 0x31, 0x8e, 0x67, 0xa6, 0x7a, 0x1b, 0x7f,
+ 0xc2, 0x98, 0xd5, 0x08, 0x23, 0x21, 0x46, 0x09, 0xde, 0x11, 0xba, 0x94,
+ 0x83, 0x16, 0xa1, 0xef, 0x91, 0x8a, 0xd4, 0x66, 0xdd, 0x09, 0xd9, 0x92,
+ 0x7a, 0xdb, 0xff, 0xd7, 0xf7, 0x27, 0xaf, 0x8e, 0x36, 0x07, 0x55, 0x3a,
+ 0x2a, 0xe1, 0x59, 0x22, 0x7a, 0xdd, 0x80, 0xe6, 0x9d, 0xd2, 0x17, 0x50,
+ 0xec, 0x7d, 0xe8, 0xc1, 0x1d, 0x7a, 0x45, 0xe4, 0x53, 0x2d, 0xca, 0x54,
+ 0x69, 0xcb, 0x99, 0x09, 0x2f, 0x07, 0x1e, 0xf9, 0x8c, 0x4d, 0x6a, 0xb4,
+ 0xb9, 0xcc, 0x70, 0x68, 0x7c, 0xc5, 0xfa, 0x31, 0x15, 0x3e, 0x0c, 0x07,
+ 0x7f, 0x7a, 0x72, 0x76, 0x4e, 0xce, 0x36, 0x57, 0x5d, 0x73, 0x6f, 0x3e,
+ 0xae, 0xd3, 0xfd, 0x8d, 0xdc, 0x25, 0xf3, 0x00, 0xac, 0xea, 0x9b, 0x7f,
+ 0xfd, 0x0b, 0x9f, 0x82, 0x9b, 0x23, 0xdf, 0x13, 0x78, 0x9e, 0xfc, 0x79,
+ 0x20, 0x5a, 0xe0, 0xf1, 0x3d, 0x5c, 0xe0, 0x1e, 0x50, 0x8b, 0x23, 0x42,
+ 0xa3, 0x28, 0x74, 0x2b, 0xcd, 0x92, 0x0e, 0x5d, 0x6d, 0xcd, 0xca, 0x07,
+ 0x23, 0x40, 0x2a, 0xb6, 0xf5, 0x51, 0x3b, 0x30, 0xfa, 0x87, 0xaa, 0x20,
+ 0xc0, 0x87, 0x4e, 0xde, 0x9e, 0x9f, 0xbe, 0x3d, 0x77, 0x3c, 0x4e, 0x78,
+ 0xac, 0x35, 0x1c, 0x3b, 0x6b, 0x59, 0xd7, 0x59, 0xa5, 0xde, 0x24, 0x34,
+ 0xc0, 0x52, 0xe6, 0xcf, 0x65, 0x3a, 0x4a, 0x41, 0x9b, 0x1e, 0xb3, 0x2b,
+ 0x12, 0xce, 0x07, 0x34, 0x0c, 0xb8, 0x40, 0x74, 0x17, 0x5b, 0xba, 0x07,
+ 0x8a, 0xe0, 0xba, 0x5c, 0x8c, 0x48, 0xf3, 0xc7, 0x93, 0xc4, 0x7f, 0xc3,
+ 0x2d, 0x8d, 0x2a, 0x52, 0x1e, 0xf1, 0x90, 0x68, 0x10, 0x3a, 0x66, 0xb0,
+ 0xbd, 0xc0, 0x14, 0x9f, 0x12, 0x35, 0xf4, 0x45, 0xa7, 0x70, 0xe4, 0x6b,
+ 0x5c, 0xa0, 0x26, 0x26, 0x37, 0x15, 0x35, 0xa1, 0x13, 0xfc, 0x77, 0x99,
+ 0xce, 0xe0, 0x42, 0xc6, 0x24, 0x45, 0xc4, 0x83, 0x32, 0xc0, 0x0f, 0x61,
+ 0xb5, 0x8c, 0xf4, 0x05, 0x58, 0x6b, 0x6e, 0x7d, 0x1c, 0x3a, 0x1c, 0xbb,
+ 0x86, 0x70, 0x4d, 0xc6, 0x77, 0x1b, 0x30, 0x92, 0x89, 0x43, 0x54, 0xd9,
+ 0x2c, 0x9b, 0x26, 0x25, 0x5c, 0xcb, 0x3c, 0x4d, 0xc7, 0x95, 0x35, 0x57,
+ 0x5b, 0x66, 0x72, 0x45, 0xca, 0x26, 0xeb, 0x62, 0xb8, 0x2d, 0xfc, 0x8d,
+ 0x28, 0x96, 0x1b, 0xca, 0xa2, 0x51, 0x37, 0xe0, 0x92, 0xc2, 0x4d, 0x81,
+ 0x57, 0xcc, 0x66, 0x47, 0xbd, 0x05, 0xdc, 0x21, 0x10, 0xec, 0x30, 0x7f,
+ 0xaf, 0x41, 0xbe, 0xb8, 0x0e, 0x51, 0x7d, 0xac, 0x5c, 0x96, 0x43, 0x21,
+ 0x3e, 0xc5, 0x1b, 0x83, 0xea, 0x4a, 0xad, 0x33, 0xf0, 0x05, 0xc5, 0x6d,
+ 0x24, 0x3f, 0x26, 0xff, 0xbd, 0xaf, 0xbe, 0x2a, 0xa0, 0x8f, 0x69, 0x36,
+ 0xca, 0xea, 0xe9, 0x8d, 0xb9, 0x56, 0xd5, 0x7b, 0x66, 0x19, 0xc4, 0x91,
+ 0x80, 0x5a, 0xb2, 0x11, 0x31, 0x91, 0x90, 0x9b, 0x0a, 0xbe, 0xe9, 0xf4,
+ 0xcd, 0xc9, 0xf9, 0xc9, 0xe1, 0xc9, 0xcb, 0xa6, 0x2a, 0x6c, 0x98, 0x3e,
+ 0x19, 0xb2, 0xc5, 0xc2, 0x3a, 0x46, 0x2b, 0xd2, 0xc3, 0xf0, 0xf4, 0x80,
+ 0x02, 0xc9, 0x79, 0x0a, 0xca, 0xe3, 0xac, 0xda, 0x8b, 0xc4, 0x6f, 0x89,
+ 0x7e, 0x58, 0xe0, 0x80, 0xe6, 0xeb, 0xd0, 0x32, 0xcb, 0x46, 0x0b, 0xd8,
+ 0x79, 0x90, 0xfd, 0x19, 0xd0, 0xe4, 0x2c, 0xb9, 0x71, 0xed, 0x45, 0xe6,
+ 0x79, 0xc0, 0x04, 0xec, 0xfe, 0xa2, 0x4f, 0x1b, 0xfd, 0x26, 0xb8, 0x4f,
+ 0xa8, 0xb4, 0x4c, 0x8b, 0xe2, 0xfd, 0x62, 0x1e, 0x5d, 0x17, 0xe5, 0x58,
+ 0xb5, 0xd4, 0x22, 0xa7, 0xcf, 0x80, 0x6f, 0xc3, 0xef, 0x48, 0xd0, 0xc8,
+ 0xb6, 0xef, 0xa3, 0x37, 0x1c, 0xfe, 0xf3, 0x06, 0x49, 0x94, 0x84, 0x39,
+ 0xed, 0x70, 0x24, 0x84, 0xc9, 0x3e, 0xaf, 0x81, 0xea, 0xfc, 0xe6, 0x1c,
+ 0x75, 0x3d, 0xac, 0xbd, 0x39, 0x12, 0x48, 0x35, 0x0a, 0x78, 0x0d, 0xdd,
+ 0xb3, 0xf8, 0xcd, 0x4c, 0xaf, 0xd3, 0x1b, 0x36, 0x75, 0x89, 0x73, 0x96,
+ 0x8b, 0x3c, 0xe7, 0x95, 0x45, 0xaf, 0xb2, 0x11, 0x18, 0xd9, 0xc5, 0xa4,
+ 0x8e, 0x7e, 0xc8, 0xf2, 0x71, 0x71, 0x5d, 0xa1, 0xf1, 0x16, 0xb7, 0x86,
+ 0x93, 0x7b, 0x01, 0xba, 0x6b, 0x0d, 0xa4, 0x1d, 0xbd, 0x7d, 0x7d, 0x88,
+ 0x42, 0xa3, 0x2c, 0xd0, 0x1c, 0x86, 0x2f, 0x7d, 0xef, 0x7e, 0xcf, 0xf9,
+ 0xe9, 0xfa, 0xd9, 0x86, 0x67, 0xa3, 0x90, 0x98, 0x7b, 0x81, 0x4c, 0xf7,
+ 0x5c, 0x69, 0xff, 0x54, 0x3d, 0xc3, 0xa2, 0xaf, 0x4e, 0x0b, 0xf2, 0xa0,
+ 0xd6, 0xd7, 0x69, 0xf2, 0xbe, 0x6a, 0x2d, 0x80, 0x68, 0x01, 0x0d, 0x5d,
+ 0xf4, 0xac, 0xe0, 0xe3, 0x48, 0xf5, 0xa2, 0xe9, 0xf3, 0x26, 0x9f, 0xbf,
+ 0x74, 0xfc, 0xf3, 0x1c, 0x49, 0x80, 0x75, 0xb4, 0x86, 0x79, 0x93, 0x02,
+ 0xbf, 0x83, 0x61, 0x64, 0x5b, 0xbf, 0x70, 0x63, 0x0c, 0xfe, 0xd3, 0x4d,
+ 0xe2, 0x22, 0x07, 0x35, 0x2d, 0xd5, 0x90, 0x99, 0xeb, 0x3f, 0x25, 0x4e,
+ 0xa8, 0xcc, 0xa0, 0xc9, 0x95, 0x54, 0x5b, 0x9f, 0xc3, 0x87, 0xf1, 0x30,
+ 0xf8, 0x21, 0x28, 0x6a, 0xb7, 0x06, 0x5f, 0xf6, 0xa3, 0xed, 0xc1, 0x16,
+ 0xfe, 0xb1, 0xdd, 0x8f, 0x76, 0x68, 0xa4, 0xdd, 0x88, 0xdd, 0xf9, 0x72,
+ 0x40, 0x4c, 0x88, 0xce, 0xbd, 0x6f, 0x5c, 0x7f, 0xd2, 0x38, 0xe8, 0xd2,
+ 0x96, 0x25, 0xaa, 0xdd, 0x1d, 0x17, 0x47, 0xd9, 0xed, 0xab, 0x83, 0xc0,
+ 0x77, 0xbe, 0xa5, 0x0d, 0xa4, 0x61, 0x66, 0xa8, 0xe3, 0x95, 0x2d, 0x3f,
+ 0xbf, 0xf0, 0x63, 0xd4, 0x5a, 0x7a, 0x40, 0x21, 0xf9, 0xb4, 0x48, 0x80,
+ 0x55, 0xa4, 0xf8, 0x2c, 0xf1, 0x9f, 0xd6, 0x70, 0x70, 0x0b, 0xee, 0x74,
+ 0x48, 0x18, 0xbd, 0xe9, 0xd8, 0x74, 0x9c, 0x6a, 0x5c, 0xc0, 0x8d, 0xc1,
+ 0x6f, 0x2a, 0xca, 0x1b, 0xb9, 0x55, 0xcc, 0xed, 0x60, 0xfc, 0x3e, 0x1f,
+ 0x84, 0x33, 0x7e, 0x63, 0x64, 0x0c, 0x08, 0x79, 0xe7, 0x47, 0x3f, 0xd4,
+ 0x8d, 0xdf, 0x1d, 0x44, 0xcf, 0xe5, 0x4b, 0x68, 0x9b, 0xd1, 0x87, 0x4c,
+ 0x0f, 0x80, 0xad, 0x02, 0xe6, 0x7f, 0xd4, 0xab, 0x16, 0xc3, 0xf6, 0x86,
+ 0x63, 0x0c, 0x65, 0x08, 0x36, 0x1e, 0xc9, 0x8d, 0xba, 0x98, 0x67, 0x23,
+ 0x54, 0xf1, 0x80, 0xa2, 0x17, 0x73, 0x19, 0x67, 0x73, 0x5e, 0x54, 0x64,
+ 0x19, 0xe9, 0x28, 0xf3, 0xc5, 0x70, 0x9a, 0x55, 0x97, 0x3d, 0x3c, 0xc7,
+ 0xa4, 0x7d, 0x7e, 0x38, 0xc2, 0x80, 0x67, 0xa5, 0xf9, 0xe1, 0x13, 0x8c,
+ 0x3e, 0xad, 0xee, 0xa9, 0x68, 0xfd, 0x26, 0xad, 0x1d, 0x6b, 0x19, 0xc3,
+ 0x5b, 0xfe, 0x9e, 0xb9, 0x9f, 0x22, 0x3e, 0x95, 0x79, 0x31, 0xdf, 0x55,
+ 0xe7, 0xf8, 0x2c, 0x85, 0x1b, 0x67, 0x7d, 0xe9, 0x49, 0x44, 0xc7, 0x0c,
+ 0x4c, 0x85, 0x0e, 0x29, 0xf2, 0x0e, 0x70, 0xc9, 0x99, 0x61, 0x44, 0xcd,
+ 0x9f, 0x9f, 0x62, 0x53, 0xc0, 0xc1, 0x40, 0x46, 0xa1, 0x65, 0xf5, 0x0a,
+ 0x58, 0x52, 0x72, 0x41, 0x73, 0x99, 0x3b, 0x4e, 0x72, 0x71, 0x0e, 0xca,
+ 0x06, 0x5c, 0x13, 0xf4, 0x9d, 0x53, 0xec, 0x06, 0x25, 0x16, 0x2e, 0xb1,
+ 0xbd, 0xd1, 0xe8, 0x56, 0x99, 0xe1, 0xfb, 0xa0, 0x3a, 0x65, 0x09, 0xbb,
+ 0xc7, 0x2d, 0x59, 0xf0, 0xb7, 0xa2, 0xbb, 0xc6, 0x59, 0xd6, 0xd9, 0xa9,
+ 0x77, 0xe0, 0xf4, 0x43, 0xb8, 0x5c, 0xe6, 0x15, 0xe7, 0x22, 0x9c, 0x1d,
+ 0x9e, 0xfa, 0x37, 0xfc, 0xec, 0xec, 0x7b, 0x43, 0x20, 0x3b, 0x70, 0xdc,
+ 0x73, 0x1b, 0x9b, 0x70, 0xde, 0x7c, 0x71, 0xee, 0x4f, 0x45, 0x3f, 0x5c,
+ 0x1f, 0x97, 0x09, 0xb0, 0xd1, 0xc7, 0x1b, 0x1c, 0x14, 0xa0, 0x33, 0x6d,
+ 0x0c, 0xe9, 0x0c, 0xf2, 0xea, 0x5b, 0xc3, 0x24, 0xed, 0x20, 0xaf, 0xbe,
+ 0x35, 0xcf, 0x6e, 0x13, 0xa5, 0x33, 0x61, 0xd1, 0xf7, 0xeb, 0x37, 0xb8,
+ 0x63, 0x84, 0x78, 0xd6, 0x5b, 0xa5, 0x45, 0xab, 0xef, 0x22, 0xbd, 0xe6,
+ 0xf4, 0xb8, 0x12, 0x84, 0x50, 0x04, 0x2a, 0x9e, 0x63, 0x26, 0x09, 0xf4,
+ 0xb7, 0x10, 0x51, 0xb4, 0x86, 0xfb, 0x61, 0xd9, 0x35, 0xe3, 0x38, 0x69,
+ 0x74, 0x9e, 0x4e, 0xc9, 0xde, 0xa1, 0xaf, 0x81, 0xc9, 0x28, 0xa2, 0x85,
+ 0x57, 0x24, 0x9d, 0xe6, 0xa0, 0x4f, 0xa3, 0x08, 0xa2, 0x58, 0x1b, 0x32,
+ 0x2b, 0xf6, 0xba, 0x25, 0x23, 0x12, 0x23, 0x15, 0x8a, 0xae, 0xa2, 0xcd,
+ 0x26, 0x59, 0x99, 0x21, 0xe5, 0x03, 0xd7, 0x57, 0x49, 0x1c, 0x91, 0x7e,
+ 0x80, 0x9c, 0x89, 0xa3, 0x6b, 0xec, 0x62, 0xc2, 0x9d, 0x61, 0x2d, 0xa4,
+ 0xe2, 0xa7, 0x1c, 0xe5, 0x4d, 0x89, 0x89, 0x3f, 0x99, 0x87, 0x72, 0x69,
+ 0xe6, 0xdc, 0x39, 0x48, 0xe1, 0x37, 0xf4, 0x23, 0x43, 0x2d, 0x34, 0x3a,
+ 0x1f, 0x81, 0xe8, 0x1e, 0xdf, 0xbd, 0x39, 0x3a, 0x3b, 0x8b, 0x5e, 0x1d,
+ 0x9d, 0x5b, 0x03, 0x98, 0x5e, 0xcf, 0x8b, 0x72, 0x06, 0x4a, 0xc1, 0x0d,
+ 0x30, 0xac, 0x6a, 0x3e, 0x4d, 0x6e, 0xd0, 0xfc, 0x04, 0xe6, 0x79, 0x51,
+ 0xa2, 0xd2, 0x43, 0x0e, 0xab, 0x68, 0xbc, 0x20, 0xe3, 0x0c, 0x58, 0x32,
+ 0x7c, 0x3e, 0x71, 0xe5, 0x3e, 0x8a, 0x55, 0xd2, 0x77, 0x1c, 0xf1, 0x4d,
+ 0x62, 0x52, 0xa2, 0x89, 0x64, 0xbc, 0x9a, 0x40, 0x3c, 0xaa, 0xb3, 0xa8,
+ 0xb8, 0xf6, 0x1d, 0xed, 0x91, 0x62, 0x55, 0xa2, 0x7a, 0x03, 0xe3, 0x99,
+ 0xb1, 0xfd, 0x05, 0x77, 0xd0, 0x04, 0x96, 0xd3, 0x49, 0xdd, 0x8f, 0xe0,
+ 0x3c, 0x06, 0x74, 0x47, 0xdb, 0x6b, 0xd2, 0xd5, 0xe2, 0xac, 0x66, 0x50,
+ 0x0a, 0x34, 0xa1, 0xa3, 0x89, 0xcd, 0x2f, 0x34, 0x5b, 0x8c, 0xbf, 0x09,
+ 0x14, 0xba, 0x7c, 0xcc, 0x51, 0x4c, 0xa0, 0xdb, 0x09, 0x05, 0x5b, 0xa3,
+ 0xf5, 0xf7, 0xfd, 0xe8, 0x55, 0x3f, 0xfa, 0xae, 0x1f, 0x61, 0x14, 0x7e,
+ 0x83, 0x6c, 0xb5, 0xed, 0xad, 0x9d, 0x47, 0x1c, 0xb0, 0x6d, 0xc4, 0x62,
+ 0xa3, 0xed, 0xf7, 0xc0, 0x08, 0x74, 0x38, 0x7e, 0x08, 0x67, 0x19, 0x44,
+ 0xdb, 0xaf, 0x90, 0x43, 0x6c, 0x6f, 0x3d, 0x7a, 0xf6, 0xf8, 0xe9, 0x13,
+ 0xf9, 0x61, 0x4b, 0x87, 0xb5, 0xab, 0x85, 0x27, 0xd5, 0x10, 0xa0, 0xa5,
+ 0x83, 0x4e, 0x97, 0xe5, 0x09, 0x1a, 0x8c, 0xea, 0x25, 0xea, 0x47, 0xe8,
+ 0xc2, 0xcd, 0x26, 0xec, 0x48, 0x12, 0x87, 0x73, 0xd3, 0x7f, 0x0a, 0x2f,
+ 0x8f, 0xe9, 0x66, 0x98, 0x23, 0xa1, 0x8d, 0x64, 0xe7, 0x4b, 0x32, 0x24,
+ 0x1f, 0x62, 0x21, 0xda, 0x58, 0x68, 0x36, 0xe3, 0xa2, 0x86, 0x37, 0x60,
+ 0x6d, 0x6c, 0x05, 0xd5, 0xfe, 0x2e, 0x83, 0xa6, 0x6c, 0x95, 0x6d, 0xb4,
+ 0xbd, 0x8b, 0x05, 0x2a, 0x96, 0xf8, 0x00, 0xe8, 0x89, 0xe4, 0x97, 0x24,
+ 0x0a, 0x36, 0x2e, 0x09, 0xf6, 0xe3, 0xb5, 0x47, 0x81, 0xa5, 0xc1, 0x3f,
+ 0xe7, 0x40, 0x38, 0xbc, 0x1c, 0x2f, 0x6a, 0x4f, 0x91, 0x6a, 0x8f, 0xee,
+ 0x90, 0x8d, 0x90, 0xca, 0x41, 0xc6, 0x25, 0xfc, 0x03, 0x8c, 0x2f, 0xf2,
+ 0xc8, 0x01, 0xc1, 0x00, 0x09, 0xe2, 0x8b, 0x68, 0x61, 0xc0, 0xc7, 0xe9,
+ 0x70, 0x40, 0x69, 0x24, 0x76, 0xc5, 0xf0, 0x92, 0x29, 0xc5, 0x08, 0x22,
+ 0xd9, 0xe7, 0x5a, 0x4b, 0xec, 0x50, 0x37, 0xef, 0x44, 0xeb, 0x5f, 0x6f,
+ 0xf4, 0xc9, 0x70, 0xb2, 0x9e, 0x37, 0x6b, 0x3f, 0x89, 0x55, 0xe3, 0xdc,
+ 0x41, 0x72, 0xaf, 0x92, 0x56, 0xcb, 0xde, 0x32, 0xf2, 0x44, 0xc0, 0x24,
+ 0x78, 0x11, 0x95, 0xfb, 0x89, 0x0b, 0xc0, 0x1e, 0x93, 0xd5, 0x82, 0xe7,
+ 0xb0, 0x9f, 0x85, 0xdd, 0x3a, 0x0c, 0x12, 0x37, 0x36, 0xa9, 0x7d, 0x66,
+ 0x81, 0x54, 0x87, 0x94, 0x53, 0x68, 0xcc, 0xb6, 0x45, 0xbd, 0x61, 0x52,
+ 0xf6, 0xac, 0xd9, 0xc8, 0xb7, 0x10, 0xaf, 0x65, 0x99, 0x5e, 0x90, 0x65,
+ 0xc0, 0x3b, 0x8b, 0x5f, 0xf9, 0x07, 0xe7, 0x2b, 0x75, 0x80, 0x78, 0x88,
+ 0x8f, 0x64, 0x64, 0x0c, 0xc0, 0xf6, 0x83, 0xba, 0x89, 0x37, 0x46, 0x03,
+ 0x3b, 0x14, 0x5a, 0x10, 0x6a, 0x09, 0x10, 0x8b, 0xa1, 0xd0, 0x02, 0x6f,
+ 0x0b, 0x2a, 0xed, 0x1a, 0x17, 0x4c, 0xa3, 0xb8, 0x42, 0xe3, 0xb3, 0x82,
+ 0xbd, 0x47, 0xb7, 0x3c, 0x69, 0x76, 0x18, 0x1c, 0x38, 0x7a, 0x73, 0xe6,
+ 0xa4, 0xf2, 0xd0, 0x86, 0xce, 0xd0, 0x6f, 0x8a, 0xa1, 0x5d, 0xce, 0xfb,
+ 0x18, 0xc2, 0x6e, 0x11, 0xc9, 0x3f, 0x1b, 0x3c, 0x06, 0x13, 0x5c, 0x3f,
+ 0x1d, 0x5d, 0x26, 0xa0, 0x74, 0x27, 0x48, 0x25, 0x22, 0x76, 0xfa, 0x18,
+ 0xe2, 0xc0, 0x30, 0x8d, 0xd9, 0xd0, 0x92, 0x03, 0x8f, 0xce, 0x90, 0xba,
+ 0xf7, 0x18, 0x7b, 0x81, 0xeb, 0x56, 0x8c, 0x28, 0x3c, 0x4b, 0xc1, 0x93,
+ 0x63, 0xbd, 0x6e, 0x14, 0x2e, 0x27, 0x99, 0x02, 0x26, 0x6c, 0x66, 0x3f,
+ 0xcb, 0x4c, 0xc3, 0x57, 0x58, 0xdf, 0xad, 0x29, 0xec, 0x08, 0x47, 0x95,
+ 0xe5, 0xa3, 0xe9, 0x62, 0x9c, 0x1a, 0x29, 0x98, 0xe5, 0x18, 0x08, 0x97,
+ 0xbb, 0x49, 0x37, 0x12, 0x14, 0xae, 0xd1, 0xe5, 0x17, 0x56, 0xa1, 0xc6,
+ 0x60, 0xfb, 0xc8, 0x3c, 0xcf, 0xe1, 0xe5, 0xbc, 0x2e, 0x8b, 0xf1, 0x62,
+ 0x84, 0x56, 0xe4, 0x25, 0x05, 0xca, 0xfc, 0xdc, 0x8d, 0x64, 0x7a, 0x8d,
+ 0x9c, 0x64, 0x0a, 0xeb, 0xcb, 0x79, 0x4c, 0xda, 0x62, 0xdc, 0x8c, 0xaa,
+ 0xe6, 0xcd, 0x32, 0x6b, 0x20, 0xd7, 0xb7, 0x18, 0x4c, 0x8e, 0x5f, 0x86,
+ 0x1e, 0x52, 0x47, 0x09, 0xfe, 0x63, 0x50, 0xa5, 0x9b, 0xb8, 0xe0, 0x2f,
+ 0xdc, 0x8c, 0x1d, 0x31, 0xfd, 0x74, 0x30, 0xf2, 0x84, 0xb9, 0xdb, 0x49,
+ 0xd1, 0x26, 0x5a, 0x4b, 0x75, 0x59, 0x5c, 0xab, 0x99, 0x25, 0xeb, 0x80,
+ 0xed, 0x48, 0xac, 0xcb, 0x28, 0xa7, 0x7d, 0xd8, 0xf3, 0xe6, 0x84, 0x6d,
+ 0xac, 0x36, 0x61, 0x40, 0x1c, 0x8f, 0xc2, 0x89, 0x5f, 0x7c, 0x71, 0x42,
+ 0xe9, 0x5d, 0xc6, 0x48, 0x3e, 0x11, 0x33, 0x85, 0xc5, 0xb0, 0x86, 0x3b,
+ 0x48, 0x47, 0x29, 0xc1, 0xdc, 0x2a, 0x28, 0x2c, 0x83, 0x4c, 0xf8, 0x15,
+ 0xe5, 0x7a, 0xb8, 0xc1, 0x92, 0xca, 0x78, 0xef, 0xad, 0x39, 0x93, 0x8c,
+ 0xc7, 0x19, 0x19, 0xb2, 0x53, 0x71, 0x59, 0x63, 0x90, 0x54, 0x6e, 0xda,
+ 0x8c, 0xa8, 0xc0, 0xe4, 0x00, 0xd4, 0xf8, 0x1b, 0x7b, 0x5d, 0xdd, 0xe9,
+ 0x8d, 0x3a, 0x3c, 0xa6, 0x08, 0x05, 0xb3, 0x5d, 0xb8, 0x8e, 0x18, 0xdf,
+ 0x1f, 0x4b, 0x48, 0xc0, 0x04, 0xf7, 0xd3, 0x31, 0x87, 0x48, 0x40, 0x97,
+ 0x18, 0x34, 0xf6, 0x17, 0xb7, 0x8d, 0x02, 0x25, 0x1c, 0x60, 0x8a, 0x71,
+ 0xb0, 0x1e, 0x45, 0xed, 0x66, 0x51, 0xeb, 0x4b, 0xe0, 0xf6, 0x8c, 0xdd,
+ 0xd0, 0x5c, 0x9f, 0x8c, 0xfb, 0xa1, 0x91, 0x0a, 0xa4, 0x91, 0xb6, 0xcd,
+ 0x8a, 0x44, 0xfc, 0xb7, 0x9a, 0x89, 0x81, 0x39, 0x06, 0x24, 0x24, 0x2a,
+ 0xfe, 0xf6, 0x3e, 0x1c, 0x1f, 0x3e, 0x79, 0x71, 0xa9, 0x8f, 0x3a, 0x9e,
+ 0xf1, 0x04, 0xfd, 0x56, 0x60, 0x8f, 0xa5, 0x39, 0x7b, 0xf9, 0xc8, 0x43,
+ 0x5a, 0x94, 0x2c, 0x8b, 0xa7, 0x05, 0xc6, 0xaf, 0x38, 0x62, 0x29, 0xcb,
+ 0xc6, 0x55, 0xe3, 0x2a, 0xf1, 0x9e, 0x73, 0xce, 0x9d, 0x55, 0xcd, 0xcd,
+ 0xa2, 0xe5, 0x3c, 0xaa, 0x5b, 0x97, 0xe6, 0x68, 0x8a, 0xb4, 0x47, 0x86,
+ 0x06, 0xe5, 0x60, 0xd9, 0x15, 0xc6, 0x79, 0x33, 0x24, 0x02, 0xf0, 0xf0,
+ 0xdd, 0xc3, 0xe5, 0x61, 0x34, 0x1c, 0xd7, 0xda, 0xa8, 0x88, 0xfc, 0x9a,
+ 0x60, 0xf1, 0x22, 0x8f, 0x32, 0x14, 0x60, 0xe3, 0xe3, 0x81, 0x50, 0xe8,
+ 0x4d, 0x33, 0xb8, 0x6d, 0xc8, 0x89, 0x92, 0x24, 0x2c, 0xc1, 0x91, 0x93,
+ 0x8d, 0x13, 0x3b, 0xe2, 0xab, 0x08, 0x19, 0x3f, 0x70, 0x24, 0x3c, 0xfe,
+ 0xf8, 0xe4, 0xe5, 0x95, 0xc3, 0xc0, 0x31, 0x9b, 0x21, 0xc7, 0x48, 0x7d,
+ 0x9f, 0x86, 0x18, 0x16, 0x05, 0x5c, 0x67, 0xfb, 0x79, 0xc8, 0xba, 0xd2,
+ 0x1c, 0xf9, 0xec, 0x58, 0x23, 0x9c, 0x12, 0xff, 0xc3, 0x91, 0xc1, 0xaa,
+ 0x8a, 0x92, 0x0b, 0x27, 0x40, 0x24, 0x3c, 0xd9, 0x3c, 0x9b, 0x17, 0xf2,
+ 0x38, 0x9e, 0x16, 0x25, 0xad, 0xf4, 0x0d, 0xd7, 0x34, 0xc9, 0x47, 0x1a,
+ 0x51, 0xe4, 0x98, 0x1e, 0xba, 0x57, 0x8c, 0x23, 0x89, 0xe2, 0x71, 0xac,
+ 0xb4, 0x4a, 0x74, 0x11, 0x46, 0x44, 0x97, 0xf1, 0xf7, 0xc5, 0x35, 0xfa,
+ 0x31, 0xfa, 0x9c, 0xa0, 0x93, 0x55, 0x92, 0xfd, 0x01, 0xa6, 0x37, 0xd8,
+ 0x8e, 0xb0, 0x97, 0x94, 0x5a, 0x44, 0x3f, 0x73, 0xd2, 0xb0, 0x90, 0x39,
+ 0xb0, 0x10, 0xd0, 0x8f, 0x68, 0x70, 0x14, 0xd7, 0xdf, 0x47, 0x01, 0x92,
+ 0x78, 0x0f, 0x69, 0x88, 0x4e, 0x25, 0xab, 0xe8, 0xc0, 0xe8, 0x86, 0x01,
+ 0xd9, 0xa4, 0x12, 0xf1, 0x22, 0x47, 0x60, 0x89, 0x57, 0xb2, 0xe6, 0x7b,
+ 0x86, 0x1f, 0xc7, 0x17, 0xb4, 0xb1, 0x2f, 0xe2, 0x9b, 0x19, 0x39, 0x7b,
+ 0xcb, 0x2f, 0x81, 0x5a, 0xf9, 0x61, 0x94, 0xce, 0x6b, 0x93, 0x94, 0xa0,
+ 0x1b, 0x2f, 0x8e, 0x70, 0xdc, 0x7f, 0xce, 0x7b, 0x49, 0xa6, 0x36, 0x9e,
+ 0xfa, 0x1d, 0xfd, 0xdb, 0x61, 0x2e, 0x75, 0xc2, 0x89, 0x4a, 0x59, 0xa9,
+ 0xe4, 0x86, 0x8b, 0x41, 0xfb, 0x84, 0xec, 0x68, 0xf4, 0xa3, 0x82, 0x51,
+ 0x05, 0x2b, 0xb5, 0x9f, 0xd4, 0xe2, 0x00, 0x93, 0x62, 0x3a, 0x65, 0xd6,
+ 0x69, 0x97, 0x40, 0x93, 0xf3, 0xdc, 0x7b, 0xf0, 0x16, 0x46, 0xae, 0x62,
+ 0x94, 0x45, 0x37, 0x38, 0x86, 0x64, 0x5b, 0x9a, 0x3c, 0xb9, 0xd8, 0x6a,
+ 0xcb, 0xd3, 0xd8, 0x90, 0x75, 0x9f, 0x73, 0xe9, 0x9c, 0x64, 0x3a, 0x96,
+ 0xf8, 0x9e, 0xb0, 0xe7, 0x9f, 0x94, 0xfc, 0x4a, 0x14, 0x9f, 0x39, 0x3a,
+ 0x01, 0x1e, 0x5b, 0x4c, 0x61, 0x09, 0x12, 0xdd, 0xf5, 0x18, 0xfe, 0xce,
+ 0x7f, 0xbb, 0x01, 0x52, 0x13, 0xc5, 0x08, 0x7f, 0x50, 0x63, 0x3a, 0x51,
+ 0x9c, 0x54, 0xa3, 0x2c, 0xb3, 0xff, 0x04, 0x5d, 0x7b, 0x92, 0x5d, 0x38,
+ 0xc3, 0xf1, 0x8f, 0xb3, 0x71, 0x65, 0x9f, 0x41, 0x65, 0xdf, 0xfc, 0x4b,
+ 0xee, 0x0c, 0xfe, 0x1b, 0x43, 0xc6, 0x45, 0xe5, 0xf0, 0x80, 0x38, 0x4e,
+ 0x86, 0x15, 0x3e, 0x55, 0xc7, 0x8b, 0x3c, 0xfb, 0x10, 0x57, 0x05, 0xe6,
+ 0x29, 0x45, 0xfb, 0xf3, 0xa4, 0xbe, 0xfc, 0xba, 0x65, 0x32, 0xad, 0xa3,
+ 0xc2, 0xb8, 0x11, 0x69, 0x0e, 0x1c, 0x9e, 0x68, 0xc9, 0x2c, 0x0e, 0xc5,
+ 0x30, 0x8f, 0x12, 0xbd, 0x85, 0x51, 0x80, 0x7d, 0xcc, 0xf0, 0xfc, 0x78,
+ 0xb0, 0xbe, 0xea, 0x4c, 0xad, 0xe1, 0x80, 0x44, 0x8d, 0x67, 0x1d, 0x38,
+ 0x45, 0x8d, 0x0e, 0x43, 0xb8, 0x08, 0xaf, 0x8b, 0x3a, 0xdd, 0xc3, 0x7f,
+ 0x23, 0x39, 0x11, 0x85, 0x2b, 0x65, 0x92, 0x74, 0x9a, 0xb0, 0x06, 0x91,
+ 0xf8, 0x6e, 0x18, 0x9e, 0x5f, 0x26, 0x8d, 0xbc, 0x30, 0xfe, 0xda, 0x37,
+ 0x6b, 0xfd, 0xe8, 0x92, 0x6f, 0x19, 0x0d, 0xc8, 0xdf, 0x68, 0x32, 0xc9,
+ 0xda, 0xc3, 0x5d, 0x92, 0x3e, 0x8e, 0x5c, 0x90, 0xd3, 0x4b, 0xe8, 0x4e,
+ 0x8a, 0x07, 0xcc, 0x64, 0x7c, 0x0c, 0xbe, 0x68, 0xbd, 0x06, 0x52, 0xae,
+ 0x63, 0x4b, 0x39, 0x2f, 0x97, 0xe5, 0x9f, 0xe6, 0x12, 0x91, 0x51, 0x86,
+ 0x16, 0x1f, 0x29, 0x92, 0xd3, 0xa4, 0xf2, 0x56, 0x91, 0x9a, 0xf8, 0x2f,
+ 0xdf, 0x57, 0x6f, 0x42, 0x8d, 0x67, 0xb5, 0x13, 0xc8, 0x39, 0x1b, 0x3c,
+ 0xbc, 0x14, 0xfe, 0x0f, 0x6d, 0x68, 0x20, 0xa4, 0xd3, 0x9e, 0xe1, 0x2c,
+ 0x4d, 0x59, 0x3f, 0x8d, 0xdd, 0x41, 0x06, 0xd1, 0x81, 0x46, 0x71, 0x9e,
+ 0x0e, 0x1e, 0x73, 0x0c, 0xc7, 0xd2, 0xd4, 0xb4, 0x8e, 0xab, 0xab, 0x51,
+ 0xb4, 0x4f, 0xe1, 0x34, 0xe4, 0x82, 0x41, 0x5a, 0x3a, 0xdb, 0x50, 0x55,
+ 0x5f, 0x38, 0x08, 0x33, 0x66, 0x3e, 0x6f, 0x1d, 0x43, 0x38, 0x12, 0x06,
+ 0xf6, 0x51, 0xb3, 0xc1, 0x1d, 0xf6, 0xad, 0x79, 0x33, 0x4f, 0x34, 0x2f,
+ 0x32, 0xeb, 0xdc, 0xa0, 0x2c, 0x0a, 0x3c, 0x30, 0x1d, 0x6c, 0x04, 0x82,
+ 0x28, 0x8d, 0xc4, 0x52, 0xb1, 0xc9, 0xa4, 0x6d, 0xb7, 0x32, 0xed, 0x74,
+ 0x74, 0x40, 0x0c, 0x26, 0x31, 0x5a, 0xf7, 0xd8, 0x18, 0xc3, 0x7d, 0xf6,
+ 0xad, 0xd2, 0x60, 0xb0, 0x7c, 0x0c, 0xaf, 0x98, 0x00, 0x27, 0x8e, 0xdd,
+ 0x1a, 0x8e, 0x16, 0x46, 0xec, 0x53, 0xc2, 0xf8, 0x97, 0x20, 0xb6, 0x86,
+ 0x28, 0x9c, 0x67, 0xc5, 0x98, 0xd2, 0x42, 0xbd, 0x63, 0x3d, 0x33, 0x99,
+ 0x5e, 0xbd, 0x9e, 0xf3, 0x75, 0xeb, 0x98, 0xfa, 0x06, 0x64, 0x98, 0x5f,
+ 0xd4, 0x97, 0x1b, 0x36, 0x93, 0x49, 0xfd, 0x8c, 0xb0, 0x10, 0xfa, 0xda,
+ 0xbc, 0x7d, 0xd7, 0x28, 0x9e, 0x4d, 0x24, 0xf1, 0xeb, 0xa2, 0xaa, 0x29,
+ 0xcd, 0x55, 0x0c, 0x0d, 0xf9, 0x08, 0x58, 0x4a, 0x3a, 0x2b, 0xca, 0x9b,
+ 0x10, 0x41, 0x33, 0xed, 0xeb, 0x19, 0x09, 0x21, 0x1a, 0x1a, 0x16, 0x12,
+ 0xa6, 0xc1, 0xd9, 0x3f, 0x62, 0x3c, 0x4c, 0xe8, 0x73, 0x6c, 0x3b, 0xec,
+ 0x45, 0xaa, 0x73, 0xce, 0xee, 0x50, 0x12, 0x72, 0x90, 0xf2, 0x49, 0xf1,
+ 0xd4, 0xc1, 0x51, 0x78, 0xf0, 0xc7, 0x78, 0x0b, 0xb2, 0xd4, 0x85, 0x4a,
+ 0x03, 0x68, 0x83, 0xfe, 0x6a, 0x28, 0x3d, 0xb9, 0xe1, 0xf2, 0x5e, 0xf5,
+ 0xd6, 0xc8, 0x0c, 0xf0, 0x3f, 0xcc, 0x62, 0x5b, 0xf1, 0x96, 0x80, 0x04,
+ 0x28, 0xa6, 0x57, 0xc2, 0x76, 0x63, 0xc9, 0x74, 0x8e, 0xeb, 0xa2, 0x71,
+ 0x65, 0x9e, 0x3c, 0x1a, 0x6c, 0x37, 0xae, 0x4c, 0x7e, 0x93, 0x2c, 0xea,
+ 0xcb, 0x30, 0xcb, 0x45, 0x57, 0x5a, 0x65, 0x1d, 0x69, 0xd9, 0x05, 0x46,
+ 0x96, 0x49, 0x0f, 0x5d, 0x60, 0xc6, 0x7c, 0x9d, 0x71, 0xde, 0x70, 0xc4,
+ 0x59, 0x11, 0x68, 0x98, 0x80, 0xba, 0x97, 0x4e, 0x27, 0xfd, 0x40, 0xb8,
+ 0x44, 0x35, 0x15, 0xd4, 0x2b, 0xd0, 0x73, 0x43, 0x43, 0xe5, 0xa9, 0x98,
+ 0xf5, 0x18, 0x12, 0x8a, 0x30, 0x77, 0x14, 0x44, 0x7b, 0x92, 0xcd, 0x24,
+ 0x2e, 0x29, 0xbe, 0xc8, 0x81, 0xe7, 0xdf, 0x45, 0xba, 0x60, 0x53, 0x1d,
+ 0xd3, 0x9d, 0xb1, 0xdc, 0x81, 0x93, 0x81, 0x34, 0x9d, 0x3b, 0x51, 0x9f,
+ 0x02, 0x3b, 0x6b, 0x2f, 0xd3, 0xd1, 0x7b, 0xe5, 0xf8, 0x65, 0xea, 0x71,
+ 0x70, 0x32, 0xd0, 0xe3, 0x4b, 0x60, 0xb2, 0x9c, 0xf6, 0x5d, 0x5f, 0x2e,
+ 0xd0, 0xd1, 0x54, 0x54, 0x55, 0x86, 0x69, 0x7e, 0xe8, 0x17, 0x5b, 0x8c,
+ 0x68, 0x5c, 0x92, 0x01, 0x70, 0xbd, 0xe1, 0x42, 0x52, 0x16, 0x37, 0x09,
+ 0x8f, 0xd6, 0x70, 0x20, 0x9b, 0xf2, 0x31, 0x48, 0xc0, 0x6c, 0xae, 0xb9,
+ 0xdc, 0x42, 0x5c, 0x6a, 0xc2, 0x17, 0x94, 0x88, 0xc6, 0xfc, 0xc1, 0x1a,
+ 0x8d, 0xba, 0xa5, 0xed, 0xd5, 0xc9, 0x16, 0xcb, 0x1e, 0xf7, 0xc5, 0x3c,
+ 0x54, 0xe5, 0x75, 0x5c, 0xa8, 0x86, 0x38, 0x4c, 0xaa, 0x6c, 0x44, 0xaa,
+ 0x7a, 0x06, 0x36, 0x26, 0x89, 0xf1, 0xbc, 0x9e, 0xce, 0x42, 0x47, 0x81,
+ 0x7a, 0xcb, 0x45, 0x51, 0xa3, 0x5a, 0xe1, 0x91, 0x39, 0x07, 0x5f, 0x0c,
+ 0x5d, 0x68, 0x04, 0xc0, 0xb5, 0x1c, 0x32, 0x36, 0xd8, 0x61, 0x6a, 0xf1,
+ 0x46, 0xb2, 0x93, 0x9f, 0x5c, 0xa0, 0xed, 0xe9, 0x60, 0xb4, 0x11, 0xb9,
+ 0x99, 0xd0, 0xb8, 0x51, 0xdb, 0x4d, 0x5d, 0x21, 0x94, 0x65, 0x85, 0x06,
+ 0xf7, 0x75, 0x26, 0xda, 0x02, 0xd5, 0x61, 0x48, 0x0e, 0xca, 0x34, 0xf3,
+ 0xa5, 0xe3, 0x0c, 0xb9, 0x08, 0x99, 0x62, 0x92, 0xa8, 0x55, 0xa6, 0xa0,
+ 0x6a, 0x8d, 0x95, 0x3b, 0xb3, 0xe1, 0x20, 0x22, 0x34, 0x29, 0xd1, 0xc3,
+ 0x45, 0xf1, 0x45, 0x13, 0x11, 0x69, 0xb3, 0x6f, 0xbb, 0x6e, 0x7a, 0x5d,
+ 0x5c, 0x3c, 0xd6, 0xb5, 0x33, 0x91, 0xc2, 0x97, 0xf6, 0x1e, 0x11, 0xdb,
+ 0x05, 0x06, 0x8e, 0xf9, 0x64, 0xbc, 0xff, 0x0b, 0xdc, 0x70, 0x38, 0x66,
+ 0x5f, 0x34, 0x73, 0x62, 0x75, 0x73, 0x57, 0x4d, 0xfc, 0x9c, 0xf9, 0x06,
+ 0xf2, 0x65, 0x0c, 0x56, 0x13, 0x5d, 0xa5, 0x93, 0x09, 0xdc, 0xdb, 0x95,
+ 0x05, 0xae, 0x8c, 0xcc, 0x8b, 0x00, 0x6a, 0xd9, 0x9b, 0x5f, 0x8f, 0x57,
+ 0x64, 0x20, 0xa0, 0x27, 0x7c, 0xb8, 0xd1, 0x91, 0xfa, 0x4a, 0x53, 0x42,
+ 0x32, 0x4c, 0x56, 0x0e, 0xeb, 0x48, 0xf0, 0x89, 0x64, 0x8e, 0xa1, 0xc1,
+ 0x36, 0xf7, 0x40, 0x77, 0x19, 0xc6, 0x20, 0x36, 0x58, 0xfd, 0x17, 0xea,
+ 0xc7, 0xcb, 0xc3, 0x3b, 0x2c, 0x1e, 0x17, 0xe1, 0xec, 0x28, 0x24, 0x84,
+ 0xcb, 0x04, 0x87, 0x53, 0xa7, 0x19, 0x68, 0x4c, 0xa0, 0x44, 0x90, 0x50,
+ 0x72, 0xae, 0x12, 0xc6, 0x35, 0x34, 0x37, 0x5e, 0xbc, 0x3e, 0x0e, 0x4b,
+ 0x09, 0x48, 0xc5, 0x66, 0xae, 0xa3, 0x9a, 0xfa, 0x23, 0xb6, 0xeb, 0x07,
+ 0xa4, 0x07, 0xb2, 0x84, 0xa6, 0x35, 0x4e, 0xa6, 0xc9, 0x05, 0xfe, 0x3e,
+ 0xbb, 0xc8, 0x0b, 0x2e, 0xad, 0x6a, 0x53, 0x78, 0x01, 0xf2, 0x91, 0x02,
+ 0x2e, 0xec, 0xda, 0xaf, 0xa2, 0x75, 0xf6, 0x1b, 0xe1, 0x82, 0x4e, 0xe0,
+ 0x73, 0xce, 0xce, 0xbe, 0xdf, 0x58, 0x46, 0x14, 0xce, 0x3e, 0xde, 0x85,
+ 0x2e, 0xa2, 0xe8, 0x79, 0xe6, 0x05, 0xc4, 0x39, 0x3d, 0x4e, 0x6c, 0x25,
+ 0xc7, 0x66, 0xe4, 0x61, 0x57, 0xa5, 0x25, 0x3e, 0xa4, 0x98, 0x76, 0x9a,
+ 0xe3, 0xfe, 0x66, 0x81, 0x13, 0x2f, 0xf3, 0xba, 0x9b, 0x9e, 0xc8, 0xb6,
+ 0xa0, 0xdc, 0x70, 0x26, 0xa1, 0xc3, 0x3e, 0x8b, 0x25, 0x38, 0xaa, 0x05,
+ 0x58, 0x17, 0x75, 0x43, 0x0c, 0x5d, 0x57, 0x71, 0x95, 0x5d, 0x5c, 0x3d,
+ 0x02, 0xf5, 0x98, 0xb5, 0xd5, 0x72, 0xfb, 0xa7, 0x3d, 0xfd, 0xeb, 0xce,
+ 0x4f, 0x7b, 0x65, 0x7a, 0x01, 0xb4, 0xf2, 0xd3, 0x1e, 0x6e, 0x32, 0x70,
+ 0x8b, 0x5f, 0x7e, 0xf9, 0xe5, 0x6b, 0xff, 0x56, 0x46, 0x07, 0x3f, 0x9c,
+ 0x45, 0x7f, 0x7f, 0x44, 0x25, 0x24, 0x54, 0xd8, 0xd6, 0x16, 0x54, 0x52,
+ 0x85, 0xa2, 0xfa, 0x94, 0xb7, 0x31, 0x12, 0x95, 0xa0, 0x49, 0x8d, 0x86,
+ 0xce, 0xbe, 0x13, 0x49, 0x67, 0xd3, 0x92, 0x11, 0xa2, 0x69, 0x10, 0x3c,
+ 0x1c, 0x21, 0x99, 0x5e, 0x14, 0x40, 0x82, 0x97, 0x33, 0x3f, 0x76, 0x94,
+ 0x33, 0x65, 0x51, 0x54, 0x77, 0x51, 0x5f, 0x90, 0x78, 0x6a, 0x2d, 0x4a,
+ 0x04, 0x4f, 0x70, 0x31, 0xfc, 0xd9, 0x4b, 0x96, 0xe2, 0xe8, 0x9d, 0xa0,
+ 0x51, 0x82, 0x19, 0x98, 0xcc, 0x2f, 0xf1, 0xce, 0xc2, 0xa4, 0xbe, 0xdd,
+ 0x43, 0x72, 0xb1, 0x2a, 0x16, 0x25, 0xa6, 0xbe, 0x8f, 0xc0, 0x50, 0x95,
+ 0x92, 0xa2, 0x75, 0x9e, 0x26, 0xc6, 0xfc, 0xaf, 0x0d, 0x5e, 0x75, 0x6d,
+ 0x27, 0x97, 0x04, 0xe5, 0xf6, 0x70, 0xb3, 0xac, 0xae, 0x35, 0x69, 0x9e,
+ 0x73, 0x69, 0xc7, 0xb4, 0x98, 0xe0, 0x77, 0xc8, 0xb1, 0xdd, 0xf1, 0x43,
+ 0x4c, 0xee, 0x1f, 0x1e, 0x46, 0x9b, 0xd6, 0xd9, 0x94, 0x19, 0xde, 0x90,
+ 0x1b, 0xa0, 0x58, 0x8c, 0xa3, 0x75, 0x19, 0xbc, 0xbd, 0x7c, 0x9d, 0x53,
+ 0x13, 0xac, 0x65, 0xc5, 0x21, 0x19, 0xb0, 0x74, 0xfd, 0xa8, 0x8a, 0xba,
+ 0x14, 0x1a, 0xb2, 0xa8, 0x44, 0x1b, 0x35, 0x4a, 0xa5, 0x6b, 0x40, 0x85,
+ 0x94, 0xfc, 0x55, 0xb9, 0xbb, 0x99, 0xbc, 0x07, 0x7f, 0xdd, 0x4b, 0x66,
+ 0xbf, 0xed, 0x2d, 0xaa, 0x38, 0x85, 0x99, 0xe2, 0x9d, 0xbd, 0xb4, 0xea,
+ 0x29, 0xdb, 0xef, 0xbd, 0x4f, 0x6f, 0xf6, 0x38, 0xd1, 0xae, 0xb7, 0x22,
+ 0xf3, 0x77, 0x78, 0xbd, 0x95, 0x65, 0xae, 0xe6, 0xf8, 0xf4, 0x71, 0xd3,
+ 0xd8, 0xa2, 0x17, 0xee, 0xa2, 0x37, 0xa2, 0xe6, 0x47, 0x31, 0x9f, 0x6f,
+ 0x79, 0x8a, 0x26, 0xf5, 0x9b, 0x80, 0x42, 0x40, 0x33, 0x23, 0x16, 0x8e,
+ 0xa5, 0x92, 0x56, 0x93, 0xc2, 0x27, 0x35, 0xf5, 0x9a, 0x35, 0x06, 0x2b,
+ 0x48, 0xe8, 0x5a, 0x2e, 0x28, 0xf2, 0x49, 0x27, 0xd9, 0x1e, 0x0e, 0x93,
+ 0xbe, 0xfa, 0xad, 0x42, 0x45, 0xe4, 0x9a, 0xb0, 0x46, 0x94, 0x22, 0x25,
+ 0x27, 0x42, 0x83, 0x01, 0x7f, 0x95, 0x15, 0x8b, 0x6a, 0x7a, 0xc3, 0x39,
+ 0xe0, 0x3c, 0x36, 0xd2, 0xa8, 0x6f, 0x24, 0x57, 0x94, 0xbe, 0x60, 0x0b,
+ 0xa4, 0x3a, 0x14, 0xe3, 0x75, 0xac, 0x02, 0x23, 0x9f, 0x21, 0xeb, 0x64,
+ 0x24, 0x4e, 0xdb, 0xab, 0x63, 0xad, 0x8d, 0x0a, 0x1c, 0x8c, 0x7a, 0xb6,
+ 0xf1, 0x80, 0xba, 0x07, 0x1f, 0xf0, 0x83, 0x6b, 0x1e, 0x0b, 0xba, 0x5f,
+ 0x7b, 0xf3, 0xa4, 0xaa, 0x30, 0xc9, 0xcc, 0x4c, 0x74, 0x1f, 0xd5, 0x83,
+ 0xde, 0x74, 0x69, 0x6c, 0x94, 0xc4, 0x9c, 0xe3, 0xd5, 0xa6, 0xb3, 0xf3,
+ 0x97, 0x67, 0x21, 0x32, 0x43, 0xea, 0x38, 0x3c, 0x00, 0xbe, 0x82, 0xb9,
+ 0xd2, 0xe6, 0x66, 0x6b, 0x9e, 0x98, 0x2a, 0x76, 0x9e, 0x1e, 0x58, 0xdd,
+ 0x80, 0x3a, 0x31, 0x23, 0x4d, 0x03, 0xe8, 0x00, 0xed, 0x5f, 0xf2, 0xfc,
+ 0xa4, 0x78, 0x03, 0xbe, 0x75, 0x82, 0xb8, 0x34, 0x95, 0x8d, 0x9e, 0xc2,
+ 0x8c, 0xc8, 0xc5, 0x0e, 0x0f, 0x3c, 0x97, 0x10, 0x4e, 0x6f, 0x78, 0x04,
+ 0x59, 0x85, 0x52, 0x71, 0x42, 0x32, 0x15, 0xd3, 0xea, 0x4c, 0x2e, 0x51,
+ 0x5f, 0xaa, 0x8c, 0xaf, 0x6d, 0xa1, 0x52, 0x5b, 0xff, 0x71, 0x49, 0xbc,
+ 0x96, 0x42, 0x21, 0xaa, 0xf7, 0x63, 0x3f, 0xa7, 0x7c, 0x93, 0x7c, 0xc5,
+ 0x1a, 0x3c, 0x7b, 0x9d, 0x03, 0xf3, 0x81, 0x15, 0x07, 0x58, 0xb1, 0x63,
+ 0x51, 0x4b, 0xd9, 0x28, 0x25, 0xcc, 0x71, 0x65, 0x11, 0x7f, 0x5f, 0x6e,
+ 0x52, 0xef, 0x68, 0x4d, 0x98, 0xf0, 0xa5, 0xd9, 0xe6, 0xad, 0xe1, 0x58,
+ 0xbd, 0x79, 0x39, 0x60, 0x35, 0xaf, 0xfd, 0x36, 0x86, 0xaa, 0xe8, 0x5d,
+ 0xb2, 0xe5, 0x28, 0x08, 0x77, 0x86, 0x21, 0xb0, 0x9c, 0x7c, 0x97, 0xf8,
+ 0x55, 0x6d, 0x56, 0xcc, 0xd5, 0xe8, 0x11, 0xd7, 0xbf, 0x4e, 0x33, 0x49,
+ 0x54, 0xe6, 0x03, 0xc6, 0x19, 0x68, 0xc1, 0xb4, 0xeb, 0x4e, 0xf6, 0x9f,
+ 0x9e, 0xb7, 0xf7, 0xb1, 0x1c, 0x57, 0x97, 0x25, 0xb0, 0x33, 0xee, 0xba,
+ 0x98, 0x4e, 0x60, 0xc1, 0x91, 0xd4, 0x54, 0x39, 0xd0, 0x00, 0x76, 0x8b,
+ 0x4d, 0x99, 0x52, 0x6b, 0x38, 0x29, 0x5a, 0x5a, 0x76, 0xc5, 0x0c, 0xb9,
+ 0xde, 0x4d, 0x91, 0x5b, 0x45, 0x93, 0x33, 0x43, 0xaf, 0x2a, 0x3a, 0xec,
+ 0x9a, 0x56, 0xbb, 0x91, 0x23, 0xa0, 0xb0, 0x92, 0xcc, 0xc8, 0x51, 0x42,
+ 0x2e, 0x3b, 0x12, 0x0d, 0xef, 0xf1, 0x07, 0x58, 0x55, 0x84, 0xf6, 0xbb,
+ 0x23, 0x1e, 0x9e, 0x0d, 0x76, 0x9a, 0xd2, 0x81, 0x5f, 0x67, 0x4f, 0xdc,
+ 0xd7, 0x2b, 0xdc, 0x5e, 0x5b, 0xb1, 0x8c, 0xef, 0xa3, 0x65, 0x9c, 0x88,
+ 0x1a, 0x6f, 0x6f, 0xa7, 0x77, 0x3f, 0xd2, 0x48, 0x2e, 0xab, 0xb8, 0xe0,
+ 0xf1, 0x69, 0xb2, 0x38, 0x51, 0xdb, 0xc4, 0x7d, 0x34, 0xc7, 0x01, 0xc4,
+ 0xe2, 0x8c, 0x4b, 0xd5, 0xd6, 0x6d, 0xa2, 0x76, 0x7e, 0xbf, 0x5e, 0x6d,
+ 0xb0, 0xc9, 0x39, 0x24, 0x57, 0xd5, 0xe9, 0xd1, 0xab, 0x88, 0x23, 0xc0,
+ 0x68, 0x26, 0x48, 0x8e, 0x8d, 0x62, 0x2f, 0x18, 0x52, 0xf7, 0xc5, 0xbd,
+ 0x53, 0x2d, 0x44, 0x4b, 0xe3, 0x10, 0x05, 0x86, 0x70, 0xaa, 0xa2, 0x2d,
+ 0xc0, 0xea, 0x9b, 0x79, 0x36, 0xa2, 0x81, 0x25, 0x25, 0xcd, 0x73, 0x64,
+ 0xd5, 0xe4, 0x47, 0xc6, 0x60, 0x99, 0x33, 0x66, 0x07, 0xf1, 0xa3, 0xd9,
+ 0x7e, 0x91, 0x67, 0xbf, 0xc9, 0x8d, 0x09, 0x56, 0xd5, 0x20, 0xfb, 0x1e,
+ 0x47, 0x6b, 0x87, 0x6f, 0xdf, 0xbc, 0x7c, 0x77, 0x78, 0xf0, 0xee, 0xdb,
+ 0xb7, 0xaf, 0x9f, 0xbf, 0x3c, 0x5a, 0x6b, 0x67, 0xdc, 0x6a, 0x19, 0x10,
+ 0x95, 0x00, 0x89, 0x3f, 0x87, 0x07, 0xe5, 0xec, 0x72, 0x26, 0x11, 0xca,
+ 0x34, 0x22, 0x87, 0xb9, 0x14, 0x2d, 0xc0, 0x7e, 0xd3, 0x86, 0xb6, 0x86,
+ 0x1b, 0x2e, 0xd0, 0x11, 0x28, 0x52, 0x5d, 0x3e, 0x5e, 0x45, 0xb0, 0x84,
+ 0x02, 0x4d, 0x79, 0x46, 0x48, 0x9d, 0x8c, 0xae, 0x35, 0x39, 0xd8, 0x09,
+ 0x3c, 0xb1, 0x05, 0xb9, 0xa8, 0x0b, 0x0c, 0xd1, 0xf3, 0x1e, 0x62, 0x9e,
+ 0x66, 0x25, 0xb5, 0xef, 0x72, 0xf4, 0x55, 0x97, 0x0b, 0x17, 0xf6, 0x00,
+ 0x47, 0xc0, 0x0b, 0x23, 0xcb, 0x1b, 0x95, 0xf5, 0x5a, 0x5f, 0xcb, 0xc6,
+ 0x14, 0xf6, 0x80, 0xca, 0xe5, 0x4c, 0x22, 0x68, 0x52, 0x05, 0xf6, 0x7d,
+ 0x90, 0x7e, 0x48, 0x49, 0x92, 0xcb, 0x3b, 0x87, 0x8b, 0x92, 0xb4, 0x83,
+ 0x1f, 0x80, 0xd3, 0x22, 0xa3, 0x78, 0x6e, 0x79, 0x3f, 0x3f, 0x44, 0xa1,
+ 0xce, 0x49, 0x31, 0x1d, 0xa7, 0xa5, 0x77, 0xdc, 0x18, 0x97, 0xa5, 0xdc,
+ 0x8d, 0xd3, 0x83, 0xf3, 0xef, 0xbd, 0xcd, 0x58, 0xcf, 0x4e, 0xce, 0xd8,
+ 0xa9, 0x33, 0x4b, 0x46, 0xf0, 0x57, 0xe4, 0x90, 0x1b, 0x26, 0xfb, 0xdf,
+ 0x90, 0x25, 0x71, 0x13, 0xa0, 0xe3, 0x33, 0xf6, 0xbb, 0x51, 0xce, 0x33,
+ 0x72, 0xbe, 0xbe, 0x7f, 0x95, 0xf2, 0x36, 0x45, 0xda, 0xe4, 0x4f, 0x2a,
+ 0x3e, 0xc5, 0x32, 0xbe, 0xeb, 0x04, 0x04, 0x3d, 0xf9, 0xa7, 0x61, 0xa7,
+ 0x87, 0xd9, 0x34, 0xab, 0x6f, 0x98, 0xc3, 0xb6, 0x6d, 0x04, 0x2e, 0x54,
+ 0x25, 0x8e, 0x9b, 0xe6, 0x17, 0x59, 0x4e, 0x41, 0x07, 0x14, 0x77, 0x59,
+ 0xed, 0x46, 0x3a, 0xb8, 0xdc, 0xce, 0xd8, 0xee, 0x66, 0xee, 0xb6, 0x3f,
+ 0x5b, 0x4b, 0xd0, 0x6a, 0x23, 0x6e, 0x0c, 0x15, 0xba, 0xb7, 0xda, 0x9c,
+ 0x15, 0x8b, 0x75, 0xaa, 0x45, 0x45, 0xf5, 0xa8, 0x35, 0xdc, 0x5f, 0xd3,
+ 0x1b, 0x10, 0x47, 0x54, 0xc3, 0x58, 0x44, 0x2a, 0xf8, 0x8d, 0xe4, 0x57,
+ 0x4f, 0x5b, 0xa6, 0x59, 0x54, 0xa9, 0xa4, 0xbd, 0x89, 0x4e, 0x57, 0x4c,
+ 0xda, 0x76, 0x09, 0x0d, 0xa0, 0x6e, 0x46, 0x1c, 0x02, 0x44, 0xb1, 0xcb,
+ 0xc4, 0x68, 0x32, 0xff, 0x04, 0x55, 0x26, 0xca, 0xd9, 0x9d, 0x2f, 0xdb,
+ 0x7d, 0xf3, 0x6c, 0x66, 0xc4, 0x6c, 0x6b, 0xb8, 0xa7, 0x54, 0x65, 0x4d,
+ 0x59, 0x34, 0xb6, 0xde, 0xf6, 0xe9, 0xe0, 0xc9, 0x16, 0x15, 0xdc, 0x2e,
+ 0x1d, 0x1c, 0x4f, 0xb6, 0x2d, 0x8e, 0xe8, 0xa4, 0x9b, 0x07, 0xcd, 0x39,
+ 0x09, 0x74, 0xb2, 0x78, 0xb0, 0x72, 0xae, 0x7f, 0x31, 0x3e, 0x19, 0xe6,
+ 0x13, 0xec, 0x31, 0xf4, 0x14, 0x7a, 0xf6, 0x20, 0x1a, 0x85, 0x40, 0xbe,
+ 0x61, 0x4d, 0x54, 0x26, 0xb8, 0xc4, 0x65, 0x01, 0x87, 0xdc, 0x38, 0xcc,
+ 0x75, 0x47, 0xe5, 0x6f, 0xdf, 0x5d, 0x67, 0x4b, 0x36, 0xc2, 0x31, 0x31,
+ 0x91, 0x43, 0xb7, 0xd8, 0x6c, 0x6c, 0xb4, 0x71, 0x8d, 0x1e, 0x9b, 0x6d,
+ 0x0f, 0x63, 0xb7, 0xc9, 0xec, 0x87, 0x07, 0xe4, 0x4c, 0xb9, 0x87, 0x4f,
+ 0xbf, 0x5b, 0xf6, 0x36, 0x64, 0x2d, 0x3d, 0xb4, 0x0f, 0x6c, 0x29, 0x2c,
+ 0x6a, 0x45, 0xd6, 0xde, 0x51, 0xd8, 0x5a, 0xee, 0xe6, 0x49, 0x1f, 0x4f,
+ 0x3b, 0x7e, 0xa5, 0x82, 0x15, 0x57, 0x50, 0x69, 0x68, 0xc4, 0xee, 0x35,
+ 0xf9, 0xe6, 0x25, 0xd5, 0x24, 0xa4, 0xd9, 0xc2, 0xf5, 0x64, 0xbc, 0x9b,
+ 0xbd, 0x5e, 0xb4, 0x9e, 0x0e, 0x2e, 0x40, 0x84, 0xf7, 0x70, 0xa8, 0xed,
+ 0x3d, 0xfc, 0x73, 0x87, 0xfe, 0xdc, 0xed, 0x6d, 0x70, 0x8e, 0x4a, 0x83,
+ 0x2c, 0x50, 0x2e, 0xb7, 0xa5, 0x0a, 0x95, 0x5b, 0x39, 0x62, 0x9a, 0x25,
+ 0x55, 0xd6, 0xc5, 0x0d, 0x45, 0x7d, 0x65, 0x12, 0xf0, 0x0d, 0x32, 0xdd,
+ 0x85, 0x19, 0x87, 0xae, 0xae, 0x52, 0x8e, 0x9d, 0xc1, 0xb7, 0x61, 0x91,
+ 0x4b, 0x3a, 0x76, 0xc2, 0xc8, 0xa3, 0x77, 0x65, 0x7a, 0x89, 0xc5, 0xe4,
+ 0x8b, 0x9a, 0x2f, 0x09, 0xdc, 0xac, 0xf6, 0x70, 0xac, 0xd0, 0xd2, 0xd7,
+ 0x1a, 0xbd, 0x59, 0x4a, 0x1d, 0xcc, 0x11, 0x72, 0x6e, 0x4b, 0x82, 0x19,
+ 0x04, 0x46, 0xbb, 0x8e, 0x05, 0xd5, 0x29, 0x28, 0xe0, 0xf1, 0x22, 0x71,
+ 0xd1, 0x28, 0x3e, 0xe9, 0xa2, 0xdb, 0xcc, 0xd0, 0xe4, 0xa4, 0x9a, 0x51,
+ 0xd0, 0x37, 0xb3, 0x11, 0x3a, 0xd3, 0x31, 0x97, 0xf1, 0x92, 0x60, 0x25,
+ 0xfc, 0xa3, 0xb0, 0x37, 0x65, 0x22, 0x99, 0x1d, 0xf2, 0x6f, 0xae, 0x4c,
+ 0x64, 0x3d, 0xaa, 0x62, 0xe0, 0x9b, 0xb6, 0x12, 0x15, 0xb8, 0x78, 0x6d,
+ 0x19, 0x22, 0x5c, 0xdb, 0xe8, 0x2c, 0xf2, 0xbd, 0x26, 0xc6, 0x2c, 0xee,
+ 0xd5, 0xae, 0x3b, 0x4c, 0x0f, 0x7f, 0xb6, 0x3b, 0x4c, 0xb3, 0x6f, 0x92,
+ 0x27, 0x74, 0xd3, 0x5e, 0x8e, 0xfb, 0xa8, 0xd3, 0xb7, 0x5d, 0x64, 0x78,
+ 0x24, 0xc6, 0xfc, 0x83, 0x45, 0xb5, 0xec, 0x1e, 0xeb, 0x35, 0x76, 0x6e,
+ 0x23, 0xbf, 0xa4, 0x29, 0x66, 0x92, 0x64, 0xee, 0x1c, 0x52, 0xfb, 0xa6,
+ 0xdc, 0x38, 0xc4, 0x7b, 0xe8, 0xdc, 0xfd, 0x33, 0x1e, 0xe7, 0x8d, 0x44,
+ 0xcf, 0xd6, 0x93, 0xf7, 0xc9, 0x20, 0x3a, 0x39, 0x3c, 0x3b, 0xc5, 0x19,
+ 0xe6, 0x98, 0x57, 0xbf, 0x81, 0x49, 0xf7, 0xad, 0xe1, 0xc0, 0xae, 0x49,
+ 0xa9, 0xd0, 0xf2, 0x0e, 0xa4, 0xa0, 0x49, 0x50, 0x5a, 0x29, 0xd4, 0x48,
+ 0x88, 0xa7, 0x8c, 0x7c, 0x38, 0xbc, 0x0c, 0x38, 0x07, 0xb1, 0x03, 0x6f,
+ 0xa2, 0x39, 0xec, 0xff, 0x78, 0xc3, 0xa4, 0xd5, 0xf6, 0x95, 0x5e, 0x4d,
+ 0x9e, 0x6d, 0xb5, 0xb8, 0x40, 0x4f, 0x4a, 0xa5, 0x3e, 0x7c, 0x77, 0x37,
+ 0xfc, 0x9a, 0x25, 0xf9, 0x6c, 0x32, 0xd0, 0xf8, 0x7a, 0xc3, 0x48, 0x84,
+ 0x06, 0x42, 0xba, 0x59, 0x5e, 0xd8, 0x81, 0xb1, 0xec, 0x77, 0x4a, 0x5c,
+ 0x44, 0xcb, 0x3f, 0x03, 0xda, 0x13, 0x9f, 0x89, 0xba, 0x7f, 0xc2, 0xe1,
+ 0x23, 0x75, 0x65, 0x8d, 0x58, 0x2d, 0xd4, 0x24, 0x2b, 0x34, 0x79, 0x53,
+ 0x54, 0xcd, 0x59, 0x66, 0x33, 0x4d, 0x0b, 0x0f, 0x60, 0x15, 0x2f, 0xfa,
+ 0x2e, 0x5f, 0xf8, 0x9b, 0x8f, 0x62, 0x1b, 0x37, 0x6f, 0x89, 0x65, 0xda,
+ 0x24, 0xad, 0x06, 0xda, 0x15, 0x99, 0xa7, 0xfc, 0xf9, 0x9e, 0x1f, 0xa8,
+ 0x55, 0xd5, 0x23, 0x69, 0xc2, 0x21, 0xe3, 0xd4, 0x0e, 0xbe, 0xf2, 0xed,
+ 0x72, 0xd6, 0xb5, 0xa2, 0xcb, 0x28, 0x03, 0x66, 0x37, 0x9e, 0x2f, 0x86,
+ 0xef, 0xd3, 0x1b, 0xef, 0x12, 0x81, 0x19, 0x95, 0x46, 0xfb, 0xf8, 0xe7,
+ 0xad, 0xc6, 0x27, 0x17, 0x6a, 0xe0, 0xf3, 0xf5, 0xa5, 0xe3, 0xb5, 0x91,
+ 0x00, 0x64, 0xc3, 0x1e, 0x0c, 0x72, 0x14, 0x4c, 0x16, 0x40, 0x99, 0xd3,
+ 0x8f, 0x9e, 0x23, 0x6a, 0xe0, 0xd1, 0xeb, 0xef, 0xe8, 0xb0, 0x4e, 0xb7,
+ 0x77, 0x28, 0xef, 0xcb, 0x98, 0x60, 0x63, 0x9a, 0x24, 0xec, 0xe6, 0x37,
+ 0x7c, 0x91, 0xd6, 0xc1, 0xf5, 0x76, 0x95, 0x56, 0xe3, 0x62, 0x21, 0x96,
+ 0x1c, 0x32, 0xcb, 0x33, 0xeb, 0xe6, 0xc4, 0x69, 0x5b, 0xc3, 0x69, 0xaa,
+ 0x11, 0xe9, 0x46, 0x2d, 0x75, 0x9f, 0x5e, 0x37, 0x3a, 0x24, 0x65, 0x03,
+ 0xa2, 0xaa, 0x06, 0x4b, 0x1d, 0x88, 0x9b, 0xfb, 0xa8, 0xef, 0xcb, 0x05,
+ 0xd1, 0x9f, 0xc0, 0xb2, 0x7b, 0x3f, 0xaa, 0xb6, 0xb7, 0xf7, 0xa2, 0xb7,
+ 0x6f, 0x8e, 0x59, 0x05, 0xc7, 0x6f, 0x6d, 0xf9, 0x64, 0xf1, 0x03, 0x3a,
+ 0x3c, 0xe8, 0xf6, 0x60, 0x3e, 0x83, 0x07, 0xdd, 0x4e, 0x8e, 0xea, 0x81,
+ 0x7c, 0x15, 0xc9, 0xb6, 0x95, 0xa8, 0xee, 0xa8, 0x2f, 0xef, 0xe2, 0x7f,
+ 0x81, 0xf0, 0x24, 0x38, 0x0a, 0x7f, 0x8b, 0x9b, 0x5f, 0x6e, 0x9f, 0x8c,
+ 0xf6, 0x1d, 0x0a, 0xfa, 0xc9, 0x38, 0x4a, 0x7f, 0xb9, 0x9f, 0x57, 0x24,
+ 0x4c, 0x96, 0x81, 0x30, 0x27, 0xf9, 0xee, 0x2e, 0x4c, 0x9e, 0x01, 0x7d,
+ 0x2a, 0xdd, 0x58, 0x01, 0xb0, 0x44, 0xac, 0x4b, 0x42, 0x85, 0xc9, 0x8d,
+ 0x2e, 0x1f, 0x33, 0xa4, 0x21, 0xd5, 0x59, 0x7a, 0x69, 0x08, 0xc5, 0x54,
+ 0xdd, 0x2b, 0xee, 0xcc, 0xae, 0x77, 0xe4, 0xaf, 0x87, 0x67, 0x7f, 0x00,
+ 0xa2, 0x67, 0xd5, 0x0b, 0xf9, 0x32, 0x8b, 0x18, 0x26, 0xc2, 0x36, 0xd1,
+ 0x1b, 0x0b, 0x94, 0x8a, 0x40, 0x8c, 0xc6, 0x66, 0x5f, 0xa3, 0xdc, 0x6f,
+ 0x5a, 0x19, 0x5b, 0x18, 0x03, 0x49, 0x09, 0x22, 0x37, 0x6e, 0xa8, 0xf8,
+ 0x14, 0xf3, 0xda, 0x8c, 0x17, 0x5a, 0x0b, 0x17, 0x75, 0xdf, 0x34, 0xcc,
+ 0x0b, 0x62, 0xad, 0x54, 0x38, 0x3c, 0xb9, 0x5e, 0xb5, 0x2f, 0x17, 0xb8,
+ 0x38, 0xa3, 0x1d, 0x0a, 0xd6, 0x7c, 0x5d, 0xc1, 0x7c, 0x4b, 0x02, 0x1e,
+ 0x2a, 0xae, 0x0c, 0xab, 0x02, 0x72, 0x61, 0x5e, 0x66, 0x57, 0xf8, 0x9c,
+ 0xd2, 0x0c, 0x69, 0x8d, 0x7c, 0x94, 0x0d, 0x1b, 0xb1, 0xc8, 0xf1, 0xbf,
+ 0x39, 0xc7, 0xa2, 0x91, 0xee, 0x3a, 0xaf, 0xa4, 0xa1, 0x3c, 0xaa, 0x5b,
+ 0x94, 0xbc, 0x2d, 0xd2, 0xa8, 0xc1, 0xa8, 0x52, 0x00, 0xce, 0x69, 0x20,
+ 0xb3, 0x4a, 0x65, 0x8b, 0x4b, 0x97, 0x5f, 0x63, 0xbe, 0x4b, 0x59, 0xdb,
+ 0x14, 0x5e, 0x07, 0xe9, 0x0e, 0x23, 0x25, 0x74, 0xce, 0x0c, 0xd7, 0x17,
+ 0xf8, 0x38, 0x93, 0x97, 0x48, 0x7a, 0x3c, 0xc8, 0x92, 0xde, 0xcf, 0xf0,
+ 0x5f, 0x72, 0x6e, 0x25, 0xb5, 0x8b, 0x89, 0xe3, 0x30, 0x43, 0x2a, 0xd9,
+ 0xf7, 0x33, 0xea, 0xcc, 0x09, 0x8e, 0xd3, 0x69, 0x36, 0xcb, 0x30, 0xd7,
+ 0x31, 0x3a, 0x53, 0xf4, 0x01, 0x6f, 0x2d, 0xed, 0xd9, 0x7f, 0xee, 0xb5,
+ 0xfd, 0x27, 0xb8, 0x96, 0x9f, 0x43, 0x6b, 0x71, 0x96, 0x92, 0x90, 0xe2,
+ 0x21, 0x23, 0x2e, 0xcd, 0xb1, 0x5c, 0x6e, 0x48, 0x20, 0x70, 0x6a, 0x99,
+ 0xa0, 0x5b, 0x47, 0x4f, 0x98, 0x49, 0x57, 0x18, 0x67, 0xdb, 0xa5, 0x06,
+ 0xb3, 0x5e, 0x81, 0x82, 0x80, 0x42, 0x55, 0x5c, 0x1a, 0x89, 0x5c, 0xa2,
+ 0x6d, 0x62, 0xb1, 0xeb, 0x88, 0x88, 0xfa, 0xf4, 0xf1, 0xf6, 0xce, 0x46,
+ 0x23, 0xe5, 0x4c, 0x4e, 0xdb, 0xab, 0x89, 0xa7, 0xac, 0x3d, 0x97, 0x96,
+ 0x50, 0x61, 0xad, 0x35, 0xfe, 0xa0, 0x03, 0x8f, 0x53, 0x8c, 0x89, 0x0e,
+ 0xa2, 0x03, 0x03, 0xd7, 0x04, 0x03, 0xc3, 0x22, 0xdb, 0xc3, 0x51, 0xbe,
+ 0xb3, 0xe6, 0x8a, 0x0b, 0xe3, 0xef, 0xb1, 0xb8, 0xa0, 0x00, 0xc4, 0xbc,
+ 0xa4, 0xcc, 0x44, 0x06, 0x88, 0x89, 0xdc, 0x75, 0xd3, 0x45, 0x6d, 0x07,
+ 0x9f, 0xdd, 0xef, 0x72, 0xb8, 0x7f, 0x5f, 0x3d, 0x4e, 0x29, 0xe1, 0x81,
+ 0xf0, 0x6e, 0x99, 0xf8, 0x44, 0x56, 0x89, 0x3a, 0xef, 0x79, 0xd9, 0x64,
+ 0x45, 0x3d, 0x72, 0x4c, 0xe6, 0x98, 0x04, 0x76, 0x9d, 0x38, 0x32, 0x45,
+ 0xb7, 0xdf, 0x65, 0xfb, 0x0d, 0x63, 0x24, 0x40, 0x25, 0x20, 0xcb, 0x7a,
+ 0xc1, 0xd1, 0xc2, 0x3e, 0xb7, 0x55, 0x5d, 0x6e, 0xb7, 0xfa, 0xdc, 0x1a,
+ 0xe6, 0xad, 0x9e, 0x0d, 0x9e, 0xbb, 0xf8, 0x1f, 0x87, 0xa9, 0x85, 0xeb,
+ 0x22, 0xc8, 0x18, 0x79, 0x3c, 0x90, 0x2f, 0x96, 0x6e, 0x2a, 0xb7, 0x21,
+ 0x76, 0xd3, 0xf4, 0x86, 0x61, 0x1d, 0x2f, 0x86, 0x8a, 0xdf, 0x8b, 0xf7,
+ 0x8b, 0x18, 0xb0, 0x49, 0x74, 0xf6, 0xfd, 0xcd, 0xca, 0xd7, 0x0d, 0x3c,
+ 0x8c, 0xbb, 0x4c, 0xc2, 0x91, 0xb1, 0x9c, 0xcd, 0xa9, 0xb9, 0xa2, 0xf2,
+ 0xbf, 0xb0, 0x37, 0x1c, 0xe9, 0x85, 0x5d, 0xf4, 0x26, 0x42, 0x27, 0xaa,
+ 0xb0, 0x1b, 0x15, 0x03, 0x51, 0x9c, 0x10, 0x5c, 0x33, 0x28, 0xdb, 0x16,
+ 0x25, 0xa8, 0x4d, 0x07, 0x83, 0xcd, 0x9e, 0x64, 0x5c, 0x53, 0x05, 0x03,
+ 0x03, 0xc3, 0x9a, 0xfc, 0x54, 0x4c, 0x59, 0x5f, 0x54, 0x26, 0xca, 0x9c,
+ 0x00, 0x55, 0x8f, 0xde, 0xe3, 0x0e, 0xde, 0xea, 0x85, 0x3b, 0xf4, 0x58,
+ 0x73, 0x65, 0x64, 0x9d, 0x15, 0xc6, 0x94, 0x84, 0x40, 0x1b, 0xe7, 0xdb,
+ 0x29, 0x25, 0x57, 0x13, 0x1b, 0x4f, 0x78, 0x43, 0x5e, 0x73, 0xc0, 0x0a,
+ 0xa6, 0x7d, 0x29, 0xd5, 0xd1, 0xa7, 0x2f, 0x7e, 0x74, 0x8a, 0xed, 0x3d,
+ 0xd7, 0x01, 0x39, 0xe9, 0xfe, 0x62, 0xb2, 0xfe, 0x18, 0x2b, 0x4c, 0x42,
+ 0xd7, 0x89, 0x86, 0x3b, 0x31, 0x03, 0x72, 0xc3, 0xd6, 0xf6, 0xe1, 0x56,
+ 0xf7, 0xf6, 0xe9, 0x77, 0xed, 0x38, 0xb8, 0xe0, 0xbd, 0x7e, 0xfd, 0x33,
+ 0xff, 0x9a, 0x33, 0xa5, 0x7f, 0xde, 0xaf, 0x2f, 0x17, 0xb3, 0x21, 0x1c,
+ 0x67, 0x5e, 0x7f, 0xdd, 0xe3, 0xe4, 0xba, 0x09, 0xef, 0x66, 0x6b, 0xfd,
+ 0x1e, 0x1a, 0x87, 0x06, 0x61, 0x4c, 0x20, 0xb5, 0xb1, 0x6f, 0xbc, 0xbe,
+ 0xbe, 0x80, 0x17, 0x9a, 0xca, 0xa1, 0xa8, 0xc7, 0x7e, 0x71, 0x4f, 0x96,
+ 0xbf, 0x05, 0xf2, 0xfc, 0xf9, 0xd5, 0x3f, 0x7e, 0xfe, 0x72, 0xf7, 0x51,
+ 0xf2, 0x34, 0x19, 0x3d, 0x99, 0x3c, 0x4b, 0x1e, 0x8f, 0x1f, 0x3f, 0xfd,
+ 0x72, 0xe7, 0xd9, 0xe3, 0xe4, 0xe9, 0xa3, 0x49, 0xf2, 0x64, 0x3b, 0xdd,
+ 0xfe, 0x72, 0xb2, 0xb3, 0x3b, 0x1e, 0x4f, 0xd2, 0x67, 0xe3, 0xa7, 0x09,
+ 0x96, 0xb1, 0x80, 0x66, 0xa2, 0x6b, 0xf7, 0xd9, 0xac, 0x51, 0x97, 0xe1,
+ 0x3b, 0xce, 0xbe, 0x3f, 0x88, 0xb7, 0xa3, 0xcb, 0xf4, 0x83, 0xc1, 0xa7,
+ 0x6a, 0xe4, 0x53, 0x56, 0x29, 0x63, 0xb9, 0x75, 0x7e, 0xac, 0x82, 0x61,
+ 0x47, 0x2f, 0x4c, 0x9d, 0x07, 0xef, 0xa1, 0x6e, 0x2a, 0x97, 0xfa, 0x58,
+ 0xd7, 0xea, 0x5e, 0xa4, 0xfe, 0x7f, 0xfc, 0xae, 0xf6, 0xe5, 0x7f, 0x89,
+ 0x4e, 0x85, 0x57, 0xc9, 0xe8, 0x92, 0x90, 0x76, 0xf4, 0xc9, 0x33, 0xce,
+ 0x5c, 0xe9, 0x47, 0xf2, 0x17, 0xd0, 0x8b, 0x9d, 0x31, 0xbe, 0x2b, 0x8b,
+ 0xc5, 0xfc, 0xb4, 0x98, 0x66, 0xa3, 0x9b, 0x65, 0xc3, 0x39, 0x8f, 0xd1,
+ 0x3d, 0x75, 0x7f, 0x77, 0xc4, 0x2c, 0x3c, 0xab, 0x82, 0xba, 0xba, 0xa3,
+ 0xbb, 0xde, 0x55, 0x53, 0x7f, 0x58, 0x8f, 0x0b, 0xce, 0x8c, 0x7f, 0x10,
+ 0x97, 0x60, 0x1d, 0x07, 0xfe, 0xb7, 0xba, 0xb6, 0x6e, 0xd9, 0xff, 0xad,
+ 0xea, 0x7a, 0x3c, 0xca, 0xe6, 0x88, 0xee, 0x1d, 0xed, 0x53, 0xb1, 0x13,
+ 0x86, 0x93, 0xf8, 0x07, 0x61, 0x35, 0xfd, 0x4c, 0x78, 0x40, 0x25, 0xf4,
+ 0xa3, 0x6f, 0x8b, 0xce, 0x9e, 0x29, 0x8e, 0x92, 0xfa, 0xe3, 0xa4, 0xc8,
+ 0x2e, 0xf3, 0x7c, 0x96, 0x98, 0x95, 0xa5, 0x2f, 0x4b, 0x7a, 0xab, 0xea,
+ 0x72, 0x11, 0x3b, 0x42, 0xe4, 0xb7, 0x03, 0xc6, 0xe4, 0x59, 0xcc, 0x51,
+ 0x6f, 0x45, 0x65, 0x83, 0x7f, 0xde, 0xbe, 0xda, 0xb8, 0x78, 0xa1, 0x51,
+ 0x56, 0x70, 0xe1, 0x04, 0xdf, 0xbe, 0x79, 0xb9, 0xd7, 0xde, 0xa4, 0x60,
+ 0xd9, 0x66, 0x55, 0x4d, 0x75, 0x1f, 0xa4, 0x74, 0x33, 0xe4, 0x8d, 0x93,
+ 0xd5, 0xde, 0x85, 0x34, 0x3e, 0x01, 0x6d, 0xc8, 0xec, 0x47, 0x87, 0xcf,
+ 0xbf, 0x3f, 0x8a, 0xe1, 0xcf, 0xb3, 0x83, 0xf8, 0xe0, 0xe8, 0x6c, 0xe7,
+ 0xf1, 0x93, 0xf8, 0xf0, 0xf0, 0xd5, 0xb3, 0x15, 0xe9, 0xa3, 0x9e, 0x56,
+ 0x57, 0xdb, 0x83, 0xdd, 0x3e, 0xff, 0x75, 0x7b, 0xd7, 0x0c, 0xcf, 0x74,
+ 0xc2, 0x59, 0x29, 0xba, 0x23, 0x2e, 0xb1, 0x14, 0x33, 0x62, 0xf0, 0xe9,
+ 0x38, 0xae, 0x2a, 0x2f, 0x79, 0x1e, 0xd1, 0x3c, 0x38, 0xfd, 0xf5, 0x48,
+ 0x0a, 0x4b, 0x48, 0x25, 0x88, 0xb3, 0x9c, 0x00, 0x38, 0xf4, 0x65, 0x22,
+ 0x0b, 0xe3, 0x0d, 0x32, 0x29, 0xeb, 0xfd, 0x40, 0xd4, 0x2b, 0x11, 0xd1,
+ 0xf6, 0x17, 0xd7, 0xa1, 0x85, 0x01, 0xee, 0xa2, 0x34, 0x98, 0x50, 0xe3,
+ 0xa2, 0x81, 0x27, 0x11, 0x74, 0x02, 0x35, 0x96, 0x1d, 0xdd, 0x29, 0x19,
+ 0xe8, 0xee, 0x4e, 0xa0, 0xc6, 0xe0, 0x2b, 0x9f, 0x6b, 0x73, 0x69, 0xd5,
+ 0x2a, 0x89, 0xa6, 0xce, 0xcb, 0xcd, 0xf2, 0xa0, 0x27, 0xad, 0x9c, 0x04,
+ 0xf3, 0x58, 0x38, 0x6d, 0x4d, 0xbd, 0x9e, 0x49, 0x64, 0x9f, 0xb4, 0xfe,
+ 0x3f, 0x05, 0xcf, 0x32, 0x00, 0x82, 0x26, 0xeb, 0xb3, 0x5a, 0x06, 0xd4,
+ 0xc4, 0xc6, 0x40, 0x33, 0x2c, 0x8d, 0x48, 0x64, 0x3c, 0x81, 0x8b, 0x70,
+ 0xe6, 0x6d, 0xd9, 0x1b, 0x9d, 0x5a, 0x32, 0x44, 0x0d, 0xec, 0xa0, 0x96,
+ 0xef, 0xb0, 0x91, 0x4f, 0x65, 0x40, 0x84, 0x56, 0xcf, 0x10, 0x13, 0x75,
+ 0x1b, 0xd3, 0x5f, 0x95, 0x25, 0x47, 0x71, 0xef, 0x59, 0x88, 0x44, 0x92,
+ 0x8b, 0x74, 0x96, 0x49, 0x6d, 0x2a, 0xf0, 0x29, 0x7f, 0x8e, 0x47, 0x9a,
+ 0x11, 0x72, 0x62, 0xe2, 0x2b, 0x25, 0x69, 0x52, 0x6a, 0x16, 0x7f, 0x72,
+ 0x63, 0xf2, 0x38, 0x5b, 0x88, 0x83, 0xeb, 0x55, 0x9d, 0x4d, 0xa7, 0x1b,
+ 0xce, 0x8e, 0xfe, 0x25, 0x62, 0x9c, 0x22, 0x5f, 0x8b, 0x98, 0x60, 0x21,
+ 0x9d, 0x94, 0x29, 0x29, 0x50, 0x29, 0xf9, 0x64, 0xed, 0x7e, 0x85, 0x43,
+ 0x04, 0xe1, 0x4a, 0xa1, 0x2e, 0x0f, 0xf3, 0x22, 0xb7, 0x71, 0x4f, 0x5f,
+ 0xfd, 0x50, 0x8c, 0x38, 0xc6, 0xb6, 0x4f, 0x05, 0xbe, 0x33, 0x17, 0x38,
+ 0xc7, 0xc0, 0x75, 0xd5, 0x0b, 0x2a, 0x37, 0x34, 0x60, 0x1e, 0x77, 0xdc,
+ 0x57, 0x30, 0x70, 0xa9, 0x57, 0x00, 0x56, 0x43, 0x2c, 0xf9, 0xbe, 0x46,
+ 0x82, 0x91, 0xa5, 0xcb, 0x87, 0x4e, 0x15, 0x5f, 0xb2, 0x82, 0x3b, 0x5f,
+ 0xdd, 0x55, 0xa5, 0x73, 0x07, 0xc7, 0x88, 0xff, 0x2a, 0x99, 0xe2, 0x93,
+ 0xec, 0x22, 0x9c, 0x41, 0xa4, 0x65, 0x6a, 0xa8, 0x98, 0x52, 0x51, 0xbf,
+ 0x18, 0x14, 0xa4, 0xb4, 0x26, 0x92, 0x32, 0xa6, 0x1e, 0x0c, 0xae, 0x4f,
+ 0x91, 0x10, 0x22, 0x17, 0x67, 0x79, 0x52, 0x33, 0x4f, 0xdd, 0xc7, 0xb1,
+ 0x82, 0xc7, 0xe4, 0x8a, 0xe3, 0xf0, 0x34, 0x3a, 0xde, 0x3e, 0x26, 0xac,
+ 0xca, 0xb9, 0x67, 0x18, 0x9b, 0x6b, 0xdf, 0x8c, 0x25, 0x3d, 0x07, 0xbc,
+ 0xcd, 0x35, 0x68, 0x08, 0x42, 0xae, 0x59, 0xe9, 0xe2, 0x4a, 0xfb, 0x36,
+ 0x47, 0xe1, 0xe4, 0xa1, 0x50, 0x89, 0x99, 0x77, 0x8d, 0xb4, 0xce, 0xad,
+ 0xef, 0xa0, 0xa0, 0x62, 0x03, 0x01, 0xc4, 0x7f, 0xa5, 0x1a, 0xfd, 0x3e,
+ 0xa3, 0xa4, 0x1a, 0xcb, 0x4f, 0xe0, 0xc1, 0x1a, 0x8d, 0x17, 0x8c, 0x42,
+ 0x89, 0x3c, 0xcf, 0x02, 0x55, 0x73, 0x88, 0x97, 0x7f, 0x40, 0xac, 0x6c,
+ 0xa8, 0x09, 0x40, 0x36, 0x66, 0x21, 0x07, 0x17, 0x74, 0x4a, 0x3a, 0x68,
+ 0xd8, 0x59, 0x9e, 0x51, 0x5b, 0x11, 0x41, 0x49, 0x67, 0xd0, 0x07, 0x0d,
+ 0xd8, 0x56, 0x85, 0xd4, 0x3a, 0x12, 0x9c, 0x2b, 0x56, 0xed, 0xd3, 0x1a,
+ 0xdb, 0x77, 0xd5, 0x20, 0xa0, 0x37, 0x3c, 0x24, 0xd8, 0x76, 0x41, 0xd1,
+ 0x0d, 0x2a, 0x3f, 0xab, 0xc4, 0x6e, 0x66, 0x60, 0x75, 0x01, 0x20, 0x0a,
+ 0x5a, 0x09, 0x62, 0xef, 0xf2, 0x14, 0x70, 0xcb, 0x5a, 0xab, 0x92, 0x75,
+ 0x78, 0x86, 0x0c, 0x59, 0xed, 0x8c, 0x86, 0xe0, 0x2c, 0x40, 0x51, 0x11,
+ 0xcc, 0x29, 0x87, 0x83, 0x66, 0xa9, 0x7d, 0xc0, 0x86, 0x5f, 0xed, 0x19,
+ 0x12, 0x7e, 0x0d, 0xc3, 0x58, 0x69, 0x4d, 0x3c, 0x23, 0xdf, 0xae, 0xef,
+ 0xb5, 0x31, 0xb8, 0xc8, 0xea, 0xb2, 0x47, 0x1c, 0xad, 0x7f, 0xb5, 0x41,
+ 0xee, 0x50, 0x9f, 0xb6, 0xc0, 0xc4, 0x9f, 0x16, 0x8a, 0x3b, 0x61, 0x00,
+ 0xec, 0x5b, 0xc3, 0x09, 0x9c, 0xfd, 0x3a, 0x46, 0xe5, 0x7f, 0x08, 0x02,
+ 0xdd, 0x23, 0xfd, 0x19, 0xeb, 0x48, 0xdc, 0x6a, 0x16, 0x73, 0xbf, 0xcd,
+ 0x8f, 0xd0, 0x5a, 0x32, 0x8e, 0xb0, 0xbd, 0xe8, 0xe7, 0x9f, 0xfb, 0xd1,
+ 0xcf, 0x3d, 0xf8, 0x1f, 0x70, 0xd6, 0x9f, 0x81, 0x46, 0x7f, 0x66, 0xb0,
+ 0xa1, 0x9f, 0xaf, 0xd0, 0x67, 0x65, 0x30, 0xc4, 0xc5, 0x2f, 0xe0, 0xc7,
+ 0xb1, 0xad, 0xdb, 0x98, 0x5b, 0x0d, 0xdc, 0x12, 0x5c, 0xe6, 0xbb, 0x82,
+ 0xa5, 0x83, 0x79, 0x91, 0xc7, 0x8c, 0x8f, 0x0e, 0x1b, 0xb9, 0x98, 0xe5,
+ 0xe2, 0x64, 0x61, 0x5a, 0xe6, 0x46, 0x29, 0xc8, 0xf5, 0xd7, 0xfe, 0xb0,
+ 0x16, 0x75, 0x9f, 0x77, 0x9f, 0x65, 0xa0, 0x3e, 0xde, 0x00, 0x0b, 0xe1,
+ 0x02, 0x3a, 0x5f, 0xca, 0x9f, 0x70, 0x16, 0x2e, 0xc3, 0x6c, 0x16, 0x8e,
+ 0xff, 0x6b, 0x8e, 0x72, 0xf8, 0xf2, 0xa6, 0x42, 0xa5, 0x41, 0x5b, 0xb5,
+ 0xa8, 0x78, 0xc5, 0x45, 0x51, 0x4a, 0x49, 0x74, 0xe0, 0x57, 0xdc, 0x61,
+ 0xa2, 0xb1, 0x2e, 0x41, 0x6a, 0xee, 0x14, 0xc2, 0x04, 0x88, 0x97, 0x72,
+ 0x02, 0x28, 0x0f, 0x60, 0x7b, 0x0b, 0x33, 0x72, 0x2e, 0x12, 0x41, 0xd6,
+ 0x5a, 0xa7, 0x62, 0x3d, 0x2f, 0xeb, 0x75, 0x27, 0x94, 0xf5, 0x6a, 0x18,
+ 0x70, 0xad, 0x09, 0x97, 0x8c, 0x39, 0x01, 0xb3, 0x34, 0xb8, 0x37, 0x7c,
+ 0xf9, 0x5a, 0xbc, 0x86, 0x3f, 0xb6, 0xa5, 0xc0, 0xa5, 0x5f, 0x93, 0xaf,
+ 0x2c, 0xcb, 0xa9, 0xc8, 0xf3, 0xa6, 0x74, 0xbc, 0xf1, 0x85, 0x5b, 0x02,
+ 0x68, 0x9b, 0x53, 0x20, 0xb4, 0x9b, 0x6c, 0x51, 0x83, 0x09, 0xf5, 0xc9,
+ 0x27, 0xd5, 0x56, 0xab, 0x53, 0x4d, 0x44, 0x32, 0xf6, 0x16, 0xc6, 0xc3,
+ 0x6c, 0x58, 0x3c, 0x26, 0x50, 0x70, 0x3e, 0x0b, 0x56, 0xe2, 0x28, 0x55,
+ 0xed, 0x06, 0x61, 0xa3, 0xe6, 0xd3, 0x76, 0x12, 0xaa, 0x96, 0xa0, 0x69,
+ 0x93, 0x1b, 0xca, 0xd5, 0xe6, 0x54, 0x6c, 0x6e, 0xb5, 0x74, 0x56, 0x30,
+ 0xd6, 0x36, 0x25, 0xbd, 0x51, 0x62, 0x62, 0xa4, 0x00, 0x54, 0x01, 0x3f,
+ 0x59, 0xbb, 0xbd, 0x0a, 0xdb, 0x4b, 0x4d, 0x90, 0xf2, 0x86, 0xe9, 0xd6,
+ 0x6b, 0x3f, 0x1c, 0xfd, 0x01, 0xbe, 0x20, 0x56, 0xd9, 0x1d, 0x89, 0x29,
+ 0x1d, 0xfb, 0x4f, 0xd5, 0x46, 0xa3, 0x11, 0x0a, 0x6d, 0x3f, 0x22, 0xd3,
+ 0x3a, 0x32, 0xbd, 0xed, 0x65, 0x57, 0x38, 0x2e, 0x78, 0x0a, 0x17, 0x85,
+ 0xdc, 0x52, 0x3a, 0x89, 0x44, 0x9e, 0xc5, 0x57, 0xc6, 0xc9, 0x05, 0xea,
+ 0x86, 0x5f, 0x21, 0xa8, 0x25, 0xe6, 0xae, 0xe3, 0xbf, 0x36, 0xb7, 0x07,
+ 0x5b, 0xa1, 0x2f, 0xc0, 0x5d, 0x17, 0xfc, 0x3e, 0x09, 0x53, 0xe1, 0xde,
+ 0xd6, 0x45, 0x71, 0xfb, 0x1a, 0x7d, 0x20, 0x22, 0x6f, 0x35, 0xf1, 0x49,
+ 0xfb, 0x27, 0xe4, 0xf1, 0x82, 0x59, 0xbe, 0x32, 0x4d, 0x46, 0xf2, 0x82,
+ 0x00, 0x00, 0x41, 0x47, 0x9b, 0x4e, 0x1b, 0x4d, 0x5e, 0x7a, 0x1d, 0xfb,
+ 0x9d, 0x53, 0x55, 0x62, 0xda, 0xde, 0xf6, 0x36, 0x90, 0x21, 0x65, 0xfb,
+ 0x1b, 0x88, 0x66, 0xe9, 0x40, 0x42, 0x14, 0xb2, 0x2e, 0x05, 0x2a, 0xf1,
+ 0x3f, 0xb9, 0x4e, 0xa4, 0x52, 0xfc, 0x7e, 0x94, 0x6d, 0x1b, 0x5c, 0xcc,
+ 0x5c, 0x05, 0x12, 0xe1, 0x6c, 0x92, 0xb1, 0xc3, 0x1f, 0x6c, 0xaa, 0x6e,
+ 0x46, 0xb1, 0x35, 0x52, 0x6d, 0xe0, 0x3e, 0x10, 0x92, 0x89, 0xd4, 0x1c,
+ 0xc0, 0x85, 0xf5, 0x23, 0x4c, 0x72, 0x7d, 0x14, 0xfe, 0x81, 0x94, 0xa7,
+ 0xd0, 0xf8, 0x98, 0xc7, 0x80, 0x2b, 0x92, 0x98, 0x1a, 0x5f, 0x3f, 0x6f,
+ 0x75, 0x2a, 0x0c, 0xe6, 0x53, 0xaa, 0x5b, 0x50, 0xac, 0x19, 0xd2, 0x98,
+ 0x3d, 0x32, 0xdf, 0xde, 0x88, 0x7a, 0xff, 0x8b, 0xd2, 0x91, 0x19, 0x08,
+ 0x1d, 0x77, 0xa9, 0x1c, 0x79, 0xe4, 0xb1, 0x83, 0x8f, 0xfd, 0xf8, 0xfc,
+ 0xbb, 0x77, 0x87, 0x27, 0xaf, 0x5f, 0x1c, 0x7f, 0xc7, 0x0f, 0xcb, 0xb3,
+ 0xd1, 0xba, 0x5b, 0xb8, 0x84, 0x79, 0xfb, 0xed, 0xb7, 0x77, 0xf1, 0xed,
+ 0xa5, 0xe3, 0x3f, 0xda, 0xd0, 0xf4, 0xc4, 0xbd, 0xa8, 0x47, 0x7d, 0x03,
+ 0x4e, 0xdf, 0x9c, 0x20, 0x3c, 0xf2, 0x1f, 0x7f, 0xee, 0x7a, 0xe5, 0x71,
+ 0xe3, 0x95, 0x83, 0xd3, 0xd3, 0xe7, 0x07, 0xe7, 0x07, 0xdd, 0x8f, 0x3f,
+ 0xe9, 0x9e, 0xe1, 0x60, 0x8e, 0xd0, 0xd4, 0x9c, 0x45, 0xf2, 0x1c, 0x88,
+ 0xaf, 0x73, 0x8c, 0xa7, 0x1b, 0xc0, 0x18, 0xf3, 0xd8, 0x8c, 0x83, 0xde,
+ 0xa7, 0x8b, 0xb4, 0x9e, 0x5f, 0x2f, 0xb2, 0x31, 0x17, 0xed, 0x8b, 0x15,
+ 0x74, 0x59, 0xb8, 0x89, 0xcb, 0xed, 0x61, 0x9e, 0x6d, 0x80, 0x1c, 0xd2,
+ 0xd5, 0xf4, 0x25, 0xdd, 0x1b, 0xdf, 0x25, 0xab, 0x42, 0x26, 0xd7, 0xda,
+ 0x5b, 0xe6, 0xb0, 0x2a, 0xd0, 0x23, 0xb7, 0x75, 0x44, 0x03, 0x9b, 0x16,
+ 0xc3, 0x43, 0xc3, 0xe2, 0x0a, 0xf9, 0x2f, 0x72, 0x3e, 0x22, 0x5c, 0x89,
+ 0xbc, 0xa6, 0xed, 0x7c, 0x6a, 0x0d, 0x03, 0x4c, 0xe1, 0xea, 0x78, 0xc3,
+ 0x8d, 0x16, 0xb5, 0x5e, 0x02, 0xa2, 0xa0, 0x71, 0x40, 0x88, 0x9a, 0xb2,
+ 0x13, 0x54, 0xdc, 0x54, 0x20, 0xb1, 0xc9, 0xac, 0x04, 0x8a, 0x02, 0x55,
+ 0xdd, 0xb4, 0x7b, 0x91, 0xf9, 0xaa, 0x00, 0x6e, 0xc5, 0x3b, 0xfe, 0x55,
+ 0x3f, 0xd2, 0xbc, 0x5f, 0x83, 0x48, 0x4c, 0x71, 0x6a, 0x2a, 0x35, 0x38,
+ 0xc1, 0x74, 0x6d, 0x93, 0x80, 0x2e, 0x4d, 0xf6, 0xc2, 0x49, 0xb9, 0xee,
+ 0x0d, 0x91, 0xa1, 0x29, 0xce, 0xe0, 0x83, 0x4c, 0xb8, 0xb2, 0xf3, 0xd3,
+ 0xe1, 0x4c, 0xb8, 0x0a, 0xc4, 0xca, 0x39, 0xa9, 0x2e, 0x5b, 0x6a, 0x7a,
+ 0x57, 0x04, 0x70, 0x02, 0x96, 0x88, 0x3a, 0xfe, 0xfe, 0x84, 0x80, 0x55,
+ 0x29, 0x30, 0xcf, 0x48, 0x9d, 0x9e, 0x2f, 0xf5, 0x55, 0xf2, 0x21, 0x9b,
+ 0x2d, 0x66, 0xf4, 0x55, 0xf8, 0x51, 0xf2, 0x98, 0xc4, 0xd1, 0x29, 0x8e,
+ 0x24, 0xb9, 0x90, 0xb8, 0xf0, 0x35, 0xea, 0x2d, 0x64, 0xfb, 0xe0, 0xf9,
+ 0x42, 0x13, 0x54, 0x8c, 0x81, 0xad, 0x72, 0x22, 0xbd, 0x8a, 0x82, 0xc8,
+ 0x55, 0xcb, 0x1b, 0x0b, 0x6a, 0x55, 0x82, 0xb9, 0x63, 0xf0, 0x39, 0x9a,
+ 0x1c, 0xea, 0xb6, 0x7e, 0x30, 0x1a, 0xc2, 0xa8, 0x36, 0x9d, 0xd4, 0x9c,
+ 0x4a, 0x87, 0xb4, 0xcc, 0x8a, 0x31, 0xcb, 0x72, 0xae, 0x65, 0x06, 0x5e,
+ 0xcd, 0x91, 0x43, 0xf2, 0x5e, 0x50, 0x87, 0x96, 0x70, 0xd2, 0x97, 0x5a,
+ 0x00, 0x23, 0x44, 0xaa, 0xaa, 0xd0, 0xad, 0x91, 0xcd, 0x14, 0xb6, 0xae,
+ 0x52, 0x1e, 0xeb, 0xfc, 0x2c, 0x12, 0xb8, 0x7d, 0xff, 0x53, 0x87, 0x4e,
+ 0xa6, 0x92, 0xe4, 0x4b, 0x80, 0x16, 0x0e, 0xc2, 0x63, 0xb0, 0x81, 0x3a,
+ 0x97, 0x8e, 0x62, 0xcc, 0x20, 0x58, 0x21, 0x35, 0x36, 0xb8, 0x94, 0x8a,
+ 0x6e, 0x3f, 0xaf, 0x97, 0x82, 0x55, 0x24, 0x16, 0xf8, 0xf2, 0xb3, 0xdb,
+ 0x67, 0x98, 0x9a, 0x74, 0x0c, 0x96, 0xbf, 0x16, 0x36, 0x2e, 0x98, 0xc7,
+ 0xd4, 0xde, 0x63, 0x92, 0x0f, 0x70, 0x3b, 0xb0, 0xa0, 0x9a, 0x71, 0xf4,
+ 0x09, 0xd2, 0xc6, 0x16, 0xe9, 0x3e, 0x7f, 0x7d, 0x26, 0x68, 0xda, 0x01,
+ 0xa0, 0x0a, 0x71, 0xb1, 0xc0, 0x8b, 0xe7, 0xd8, 0x26, 0x15, 0x13, 0xa1,
+ 0xe0, 0x53, 0xfe, 0xf6, 0xf6, 0xf8, 0xd0, 0xe9, 0x98, 0x48, 0x57, 0x1c,
+ 0x81, 0x40, 0x3a, 0x92, 0x47, 0x5b, 0x64, 0x79, 0x37, 0x3c, 0xa4, 0x28,
+ 0x10, 0x25, 0xbe, 0x13, 0x20, 0x52, 0xb5, 0xe4, 0xce, 0x35, 0xd6, 0xb1,
+ 0xb3, 0x15, 0xbc, 0x76, 0x77, 0x7b, 0x79, 0x77, 0xb0, 0xfd, 0x68, 0xb5,
+ 0x5b, 0x4b, 0x45, 0xa7, 0xb3, 0xe4, 0x03, 0x0d, 0x11, 0xbc, 0xb6, 0x45,
+ 0xb4, 0xff, 0xfd, 0xc9, 0xd9, 0xf9, 0xf6, 0xde, 0xe9, 0xc9, 0x1b, 0xf8,
+ 0x13, 0xff, 0xbe, 0x43, 0x7f, 0xdf, 0xf9, 0xba, 0x3d, 0xec, 0x0b, 0x6a,
+ 0x29, 0x1b, 0x19, 0x90, 0x15, 0x6e, 0x22, 0x81, 0x7b, 0x27, 0xbe, 0x00,
+ 0x67, 0x20, 0x8c, 0x8f, 0x66, 0x88, 0x4a, 0x36, 0x32, 0xf0, 0x5d, 0x6d,
+ 0x62, 0x76, 0xa6, 0xd2, 0x2a, 0x82, 0x41, 0xe4, 0xd7, 0x2a, 0x64, 0xb5,
+ 0xaa, 0xfc, 0x82, 0xee, 0xaa, 0xb8, 0xb1, 0x6d, 0xca, 0xa9, 0x5d, 0x5c,
+ 0x15, 0x76, 0xbe, 0xf5, 0x23, 0x4a, 0x2e, 0x6f, 0xfe, 0x6a, 0x34, 0x05,
+ 0x0b, 0x38, 0xc5, 0x2c, 0xcf, 0x71, 0x2a, 0x3c, 0x75, 0xea, 0x37, 0x1b,
+ 0xc0, 0x27, 0x08, 0xb2, 0xa5, 0x64, 0xbc, 0xff, 0xd6, 0xba, 0xb4, 0x26,
+ 0x91, 0xa4, 0x2d, 0xac, 0x26, 0x21, 0x88, 0x75, 0xd9, 0x8e, 0x3c, 0xf5,
+ 0x8a, 0x90, 0xb1, 0xdc, 0x32, 0x6a, 0x44, 0x86, 0x08, 0x9f, 0x9f, 0x50,
+ 0x29, 0x5e, 0x9f, 0x9c, 0x47, 0x09, 0xf9, 0xee, 0x44, 0x64, 0x57, 0x35,
+ 0x4a, 0xb1, 0x4d, 0xe9, 0xf5, 0x40, 0xc8, 0x03, 0x81, 0x18, 0x0a, 0xc9,
+ 0x15, 0xb8, 0x1c, 0x9b, 0x18, 0x16, 0xe2, 0x2c, 0xfa, 0xb3, 0xd7, 0xc7,
+ 0xfd, 0x46, 0xc8, 0xd9, 0xcd, 0x4b, 0xdd, 0xc0, 0x5b, 0x24, 0x38, 0x79,
+ 0xed, 0xbd, 0x73, 0xf4, 0x0e, 0xd3, 0xb5, 0x62, 0x10, 0xf5, 0xe8, 0x40,
+ 0x7b, 0x9c, 0x85, 0xda, 0xa3, 0x73, 0xed, 0x71, 0x85, 0x1d, 0x25, 0xdd,
+ 0xd3, 0xb7, 0x62, 0xa7, 0xd5, 0x1b, 0x1f, 0x1c, 0x8d, 0x9c, 0xa9, 0x0a,
+ 0xa0, 0xd7, 0x43, 0xf3, 0x1c, 0x3f, 0x8b, 0x3e, 0xa9, 0x27, 0x03, 0xef,
+ 0xf0, 0xc0, 0x34, 0x2e, 0xfc, 0x1d, 0x87, 0x25, 0xa2, 0x1d, 0x86, 0x72,
+ 0x8d, 0x64, 0x22, 0x67, 0xf0, 0xc8, 0x0c, 0x0f, 0x6b, 0xa3, 0x04, 0x03,
+ 0x29, 0x27, 0x27, 0xea, 0x58, 0xa3, 0x7e, 0x21, 0xd9, 0x05, 0xa6, 0x74,
+ 0x79, 0xa9, 0x92, 0x66, 0x21, 0x6d, 0x0a, 0x3f, 0x00, 0x03, 0x00, 0x7e,
+ 0xdb, 0x73, 0x9c, 0x23, 0xb5, 0x57, 0xab, 0x47, 0x75, 0x31, 0xa5, 0xda,
+ 0xf7, 0xba, 0x1c, 0x14, 0x2a, 0x75, 0xc0, 0xd8, 0xac, 0xd8, 0x0a, 0xae,
+ 0x05, 0xdc, 0x95, 0xec, 0x65, 0x45, 0x46, 0xd1, 0x8b, 0x84, 0x80, 0xa2,
+ 0xda, 0xae, 0x81, 0xb7, 0x96, 0xb3, 0x3f, 0xda, 0xc3, 0x71, 0x87, 0x4c,
+ 0x64, 0xf0, 0x52, 0x58, 0xde, 0xdb, 0xde, 0x79, 0x3a, 0xd8, 0x82, 0xff,
+ 0x07, 0xe7, 0x22, 0x5e, 0x3d, 0xea, 0x46, 0x68, 0xfa, 0x0c, 0xdb, 0x27,
+ 0xd3, 0x0f, 0x9e, 0x4b, 0x98, 0xd8, 0x47, 0x51, 0x5e, 0xf4, 0x02, 0xa8,
+ 0x57, 0x0e, 0x7f, 0xf8, 0xa4, 0x0a, 0x89, 0x4e, 0xe2, 0x70, 0xb3, 0xbd,
+ 0x47, 0x8f, 0x76, 0xf7, 0xf4, 0xdf, 0x70, 0x95, 0xf6, 0x9e, 0xc1, 0x0f,
+ 0x3e, 0x06, 0x14, 0xeb, 0x7b, 0x64, 0x82, 0x1c, 0x4c, 0x71, 0x58, 0x60,
+ 0x1b, 0x97, 0x24, 0xda, 0x2f, 0x26, 0x13, 0x60, 0xff, 0x6d, 0x6d, 0xe5,
+ 0x50, 0x1e, 0xd9, 0x7c, 0x43, 0xa8, 0xb0, 0xc4, 0x01, 0x15, 0x2c, 0x40,
+ 0x1c, 0xd0, 0xb6, 0x09, 0x7a, 0xed, 0x68, 0x0c, 0x3c, 0xdc, 0x20, 0x20,
+ 0x2f, 0xdd, 0xdf, 0x6b, 0x26, 0x2d, 0x7c, 0x17, 0xdc, 0x7f, 0xee, 0x9c,
+ 0x89, 0x8c, 0xa7, 0xd5, 0x76, 0x2a, 0xaa, 0xde, 0x67, 0xf3, 0xb9, 0x9f,
+ 0x7c, 0x4e, 0x4d, 0x39, 0xe9, 0x12, 0x90, 0x0f, 0x85, 0xef, 0x00, 0xa5,
+ 0x76, 0xf1, 0xd5, 0x50, 0xdc, 0x68, 0x86, 0xff, 0xe0, 0xe5, 0x0e, 0xd3,
+ 0x09, 0x3a, 0x83, 0xb2, 0x00, 0x5f, 0x71, 0x81, 0xde, 0x05, 0x80, 0x67,
+ 0x8c, 0xa0, 0xee, 0x0c, 0xfb, 0x4b, 0x4e, 0x55, 0x8b, 0x50, 0xab, 0x40,
+ 0x50, 0x2a, 0x41, 0x5f, 0x9c, 0x9f, 0x86, 0x61, 0xef, 0x95, 0x44, 0xce,
+ 0x8e, 0xff, 0xeb, 0x48, 0xf3, 0x5d, 0x14, 0x49, 0x85, 0xdc, 0x19, 0x01,
+ 0xb8, 0x03, 0xec, 0x84, 0x78, 0x08, 0xc7, 0x44, 0x29, 0x29, 0x35, 0xc2,
+ 0x7b, 0x6b, 0x76, 0x6c, 0x33, 0xa8, 0x46, 0x96, 0x0e, 0x83, 0x32, 0x83,
+ 0xae, 0xb1, 0x49, 0x10, 0xa5, 0x85, 0x57, 0xd2, 0x43, 0x27, 0xd7, 0xc0,
+ 0x80, 0x31, 0xfd, 0xbf, 0x5b, 0x15, 0xad, 0xe2, 0xd4, 0xd8, 0xcc, 0x72,
+ 0x6a, 0x8c, 0x46, 0xc8, 0x71, 0x3e, 0x32, 0x91, 0x80, 0xa2, 0x31, 0x24,
+ 0xf8, 0xa2, 0x03, 0x3c, 0xe4, 0xb0, 0x1f, 0xb5, 0x48, 0x4c, 0xfa, 0x4f,
+ 0xdc, 0x9e, 0x59, 0xf1, 0x90, 0x3a, 0xc8, 0x21, 0x68, 0x81, 0x77, 0xd6,
+ 0x39, 0x0e, 0xa3, 0x47, 0x5b, 0x5b, 0xab, 0x5d, 0x36, 0x0b, 0xf8, 0xe3,
+ 0xdc, 0xae, 0x11, 0xdf, 0xae, 0xe2, 0x7d, 0x96, 0xc6, 0xbf, 0x26, 0x25,
+ 0xc7, 0x73, 0x3a, 0xa1, 0x19, 0x37, 0x8c, 0x67, 0x11, 0xc1, 0xee, 0x29,
+ 0xb5, 0x82, 0x28, 0xd5, 0x20, 0xca, 0xeb, 0xd9, 0xb3, 0xbf, 0x94, 0xda,
+ 0xda, 0xf3, 0xe0, 0x9e, 0x16, 0x40, 0x28, 0x8a, 0x94, 0xb9, 0x64, 0x70,
+ 0x14, 0x2d, 0xb2, 0xd7, 0x00, 0x13, 0x6a, 0x4c, 0x4f, 0x2f, 0x1c, 0x46,
+ 0x46, 0x91, 0x66, 0xac, 0x9e, 0x52, 0x91, 0xe5, 0x31, 0x23, 0x15, 0xca,
+ 0x83, 0x94, 0xf5, 0x83, 0x90, 0xd9, 0x72, 0x39, 0x98, 0x66, 0xd8, 0xe5,
+ 0x52, 0x2b, 0x9e, 0x0c, 0x5d, 0x3a, 0x9a, 0x33, 0xd8, 0x2d, 0x67, 0x20,
+ 0x0d, 0xc7, 0xcc, 0xdc, 0x78, 0xbf, 0xdf, 0xe7, 0xc5, 0x75, 0x8e, 0x41,
+ 0x45, 0xe9, 0x0b, 0x56, 0xd1, 0x22, 0xeb, 0x54, 0x52, 0x48, 0xc4, 0xe9,
+ 0xd2, 0xbe, 0xfc, 0xe2, 0x68, 0xb6, 0xde, 0xcb, 0xd7, 0x69, 0x2d, 0xf9,
+ 0xac, 0xbc, 0x5c, 0x2d, 0x3c, 0xa7, 0xe2, 0x75, 0x93, 0xa5, 0x57, 0x49,
+ 0xd3, 0xc5, 0x4e, 0x58, 0xcb, 0x76, 0xb7, 0xd4, 0x3e, 0x5c, 0xc6, 0x9e,
+ 0x86, 0x66, 0xec, 0xa2, 0x65, 0x89, 0xd2, 0x0a, 0xad, 0xfd, 0xb1, 0xa1,
+ 0x7b, 0xe1, 0x14, 0xea, 0x5b, 0x11, 0xcb, 0xd1, 0xc8, 0x36, 0xc5, 0x34,
+ 0x94, 0x2c, 0x72, 0x1f, 0x2c, 0x3c, 0xad, 0x8a, 0x1a, 0x7f, 0xbd, 0x6e,
+ 0xee, 0x24, 0x45, 0x02, 0x4d, 0x8a, 0x21, 0x7b, 0xcb, 0xcf, 0x35, 0x40,
+ 0xc8, 0xcf, 0xf5, 0x35, 0xc3, 0xbe, 0x2d, 0xf6, 0x86, 0x76, 0x0d, 0x0a,
+ 0x6e, 0x1f, 0x7d, 0x5b, 0x60, 0xe1, 0xab, 0x84, 0xeb, 0xdc, 0xb6, 0xc8,
+ 0xc6, 0x8f, 0x11, 0xac, 0xc4, 0x27, 0x7d, 0x31, 0xd0, 0x07, 0x29, 0xa2,
+ 0xb6, 0x23, 0x89, 0x46, 0x4c, 0x64, 0x32, 0xc9, 0x81, 0x65, 0x0b, 0x98,
+ 0x90, 0xd1, 0x3a, 0x0b, 0xfb, 0xcb, 0xb1, 0x01, 0x56, 0x94, 0xcf, 0x61,
+ 0x12, 0x09, 0x2c, 0x9e, 0x2f, 0x28, 0x4e, 0xe8, 0xa1, 0x29, 0x71, 0xc1,
+ 0x74, 0xdd, 0x15, 0x1c, 0x91, 0x61, 0xf0, 0x1c, 0x6c, 0x4b, 0x78, 0x25,
+ 0x37, 0xed, 0x0f, 0x56, 0x13, 0x6a, 0x5f, 0xa1, 0xec, 0xff, 0xfa, 0xb2,
+ 0xf0, 0xa2, 0x46, 0xbc, 0x6c, 0x8b, 0xac, 0xe7, 0x74, 0x59, 0xa0, 0x46,
+ 0x9e, 0x18, 0x4c, 0xc3, 0x1b, 0xc4, 0x11, 0x77, 0x13, 0x70, 0x27, 0xa4,
+ 0xe7, 0x12, 0x3d, 0x25, 0x41, 0x98, 0x42, 0x17, 0x5c, 0x98, 0x7b, 0xc3,
+ 0x25, 0x58, 0xb2, 0x4c, 0x12, 0x4f, 0x1a, 0x74, 0x68, 0x4f, 0x6d, 0x93,
+ 0x9c, 0x1f, 0x22, 0x78, 0xf6, 0x15, 0x5c, 0x65, 0x08, 0xf8, 0x08, 0xc7,
+ 0x08, 0xda, 0x1a, 0x46, 0x9a, 0xe8, 0x8e, 0x20, 0xe6, 0x9c, 0xb4, 0xdf,
+ 0xc0, 0x83, 0x34, 0xa8, 0x90, 0xc0, 0x51, 0x2e, 0x51, 0x01, 0xcb, 0xea,
+ 0x45, 0xf0, 0x76, 0x07, 0xad, 0xd1, 0x00, 0x69, 0xdb, 0x82, 0xa3, 0xdf,
+ 0xd1, 0x1a, 0x1d, 0x71, 0xd2, 0x62, 0x4c, 0x9e, 0xfa, 0x2e, 0x0f, 0xd0,
+ 0xdd, 0xde, 0x8c, 0x87, 0x74, 0xa3, 0x62, 0x58, 0x6c, 0xb5, 0x62, 0x7a,
+ 0x9e, 0x43, 0xa7, 0x8e, 0xc0, 0x70, 0xa9, 0x77, 0x1f, 0x79, 0xe0, 0xff,
+ 0xb9, 0x45, 0x62, 0x9c, 0x26, 0x92, 0x47, 0xe3, 0xb6, 0xd8, 0x20, 0xc0,
+ 0x29, 0xd1, 0x3a, 0x14, 0x86, 0x81, 0xc7, 0x14, 0xfd, 0x0f, 0xc4, 0x7e,
+ 0x20, 0x53, 0x94, 0x32, 0x43, 0x60, 0x43, 0xa7, 0x37, 0x76, 0x44, 0x07,
+ 0x10, 0xca, 0x34, 0x7e, 0x34, 0x6c, 0xc5, 0x4e, 0xd1, 0x4e, 0x79, 0xef,
+ 0x9d, 0x81, 0xf1, 0xc7, 0x73, 0x62, 0xe6, 0x3c, 0x47, 0x81, 0xa4, 0xda,
+ 0x0b, 0x87, 0x55, 0x00, 0x04, 0xd6, 0xf3, 0xdd, 0x2c, 0x5a, 0x66, 0xd3,
+ 0xed, 0xe1, 0x5e, 0x1f, 0xbc, 0x3a, 0xda, 0xfe, 0xea, 0xef, 0x07, 0x2f,
+ 0xdf, 0x1e, 0x6d, 0xff, 0x25, 0x8a, 0xf0, 0x9f, 0x3b, 0xfc, 0xcf, 0x9d,
+ 0x9e, 0x9a, 0xcb, 0x82, 0xa5, 0x68, 0xb0, 0x11, 0x9c, 0x2b, 0xdc, 0xb6,
+ 0x7d, 0x68, 0x17, 0x14, 0x7d, 0x2b, 0x33, 0xe8, 0xb9, 0x4e, 0x53, 0x44,
+ 0xfa, 0x28, 0x90, 0x8c, 0x06, 0xb7, 0x4e, 0xcd, 0x94, 0xf5, 0x6a, 0x63,
+ 0x10, 0x50, 0x73, 0x6c, 0x55, 0xa1, 0x1a, 0xe6, 0x91, 0xf1, 0xcd, 0x44,
+ 0xe3, 0x45, 0x2a, 0x2a, 0x9b, 0x83, 0x8f, 0xd5, 0x97, 0xd0, 0x80, 0x17,
+ 0x89, 0xd7, 0x06, 0x2e, 0x95, 0xd3, 0xa6, 0xa5, 0xcf, 0x09, 0x17, 0xb8,
+ 0x22, 0xee, 0xa1, 0x4a, 0x8b, 0xa6, 0x23, 0xc5, 0xa2, 0x11, 0x4a, 0x8d,
+ 0x08, 0x5d, 0x3a, 0x90, 0xa4, 0x6b, 0x5f, 0xad, 0x45, 0xd5, 0xcd, 0x6c,
+ 0x58, 0x4c, 0x1d, 0x30, 0xd6, 0x56, 0x95, 0x0b, 0x57, 0x86, 0x98, 0x36,
+ 0x2b, 0x12, 0xba, 0xf5, 0x0b, 0x05, 0x12, 0x1b, 0xed, 0xd4, 0x6c, 0x13,
+ 0x17, 0x31, 0xac, 0x2e, 0xd8, 0xcf, 0xc5, 0x42, 0x57, 0xf2, 0x4e, 0x8c,
+ 0xd5, 0xe8, 0xa1, 0x7b, 0x60, 0xce, 0xd6, 0x32, 0x39, 0xc0, 0x2a, 0x90,
+ 0x83, 0x90, 0x29, 0x8c, 0x3f, 0xcb, 0x03, 0xe8, 0x0a, 0xdc, 0x66, 0x4b,
+ 0x04, 0x9b, 0xbe, 0x49, 0x29, 0x1a, 0xe8, 0x2d, 0xbb, 0x51, 0xe0, 0x56,
+ 0xce, 0x63, 0x61, 0x45, 0x81, 0x3e, 0x99, 0x54, 0xa4, 0xa1, 0x27, 0x1a,
+ 0x72, 0xe1, 0xd4, 0xb6, 0xe5, 0xcb, 0x4b, 0xc2, 0xab, 0x17, 0x0f, 0xba,
+ 0xc1, 0x6d, 0x29, 0x31, 0xf5, 0xd0, 0x1c, 0x3e, 0x05, 0xe8, 0x50, 0xb7,
+ 0x8e, 0x3d, 0x74, 0xa7, 0xb2, 0x6a, 0x64, 0xaf, 0x70, 0xd0, 0x6b, 0x60,
+ 0xc3, 0xf0, 0xaa, 0x74, 0xd0, 0x4d, 0x24, 0x33, 0x88, 0x73, 0xb6, 0xb1,
+ 0x1e, 0xcb, 0xaf, 0x88, 0x06, 0x45, 0x64, 0x43, 0xd2, 0xb4, 0xf4, 0xd4,
+ 0xb8, 0x1f, 0x57, 0xa3, 0xbb, 0xee, 0x92, 0x80, 0xb2, 0x51, 0xa7, 0xa4,
+ 0xf4, 0xac, 0x70, 0xd6, 0x51, 0x37, 0xf5, 0x04, 0x19, 0x86, 0x2f, 0x2c,
+ 0xfa, 0x5e, 0xdd, 0x66, 0xde, 0xea, 0xc5, 0x42, 0x8e, 0x63, 0x52, 0xf5,
+ 0xa2, 0x75, 0x7b, 0xfd, 0x23, 0x02, 0xd8, 0xdf, 0x50, 0xc3, 0x5c, 0x55,
+ 0xb3, 0xcd, 0x57, 0xc5, 0x6f, 0xd9, 0x74, 0x9a, 0x84, 0x2f, 0xa8, 0xab,
+ 0xb0, 0x75, 0xae, 0xbc, 0xad, 0x3a, 0xb9, 0xbc, 0xb3, 0xa1, 0x36, 0x25,
+ 0x54, 0xb7, 0xc3, 0xed, 0x51, 0x5f, 0x17, 0x9e, 0xe9, 0xc8, 0x1f, 0xc9,
+ 0xf6, 0xa5, 0xa3, 0xcb, 0x35, 0xf4, 0x26, 0x4e, 0x73, 0x6f, 0x2b, 0x4e,
+ 0x28, 0xd3, 0x02, 0x3e, 0x03, 0x23, 0xe1, 0x4c, 0x67, 0x20, 0xef, 0x5e,
+ 0xba, 0xed, 0x2b, 0x9c, 0xbd, 0x72, 0x4f, 0x84, 0x3b, 0xcd, 0x39, 0x95,
+ 0x7c, 0x4c, 0x0e, 0x63, 0xaf, 0x3a, 0x71, 0x26, 0x6d, 0x1b, 0x72, 0xf7,
+ 0x0a, 0x99, 0x66, 0xe0, 0x79, 0x2d, 0x38, 0xc4, 0xc4, 0xd2, 0xb9, 0x47,
+ 0x40, 0x9e, 0x72, 0x4a, 0x5e, 0x3d, 0xc2, 0x56, 0x33, 0xed, 0xfd, 0x2d,
+ 0xb0, 0xf1, 0x88, 0xe4, 0x67, 0x12, 0x4e, 0x13, 0x2a, 0x01, 0xfa, 0x2a,
+ 0xa6, 0xf1, 0xda, 0xf5, 0x92, 0x46, 0xb7, 0xce, 0xb8, 0xd3, 0xd2, 0xf0,
+ 0xc7, 0x0b, 0x5f, 0x61, 0x17, 0x21, 0xf4, 0x60, 0x0e, 0x79, 0x84, 0x8a,
+ 0x48, 0x81, 0x23, 0x4b, 0x09, 0xe8, 0x12, 0x7b, 0x66, 0x1f, 0x8c, 0xd6,
+ 0xde, 0x71, 0xf0, 0x98, 0xfe, 0x8f, 0xfe, 0xac, 0x09, 0x1e, 0x10, 0xd9,
+ 0x43, 0x98, 0x0b, 0x81, 0x7a, 0xa9, 0x4f, 0xad, 0x89, 0x0d, 0x00, 0xb3,
+ 0xb1, 0xe4, 0xd7, 0x95, 0x8c, 0xa5, 0xb9, 0x2d, 0xbf, 0x45, 0x2a, 0x8f,
+ 0xd3, 0x51, 0xab, 0x2a, 0x84, 0x4d, 0xd0, 0x04, 0x0d, 0xda, 0x22, 0x6f,
+ 0xca, 0xf2, 0x83, 0x77, 0xe3, 0x7b, 0x0d, 0xed, 0x57, 0xb4, 0xe1, 0x00,
+ 0x51, 0x34, 0xa6, 0xf8, 0x78, 0x67, 0x53, 0x97, 0xf2, 0x33, 0x94, 0x2f,
+ 0xee, 0xac, 0x27, 0xb8, 0xfd, 0x2d, 0x50, 0x83, 0x6e, 0x19, 0xa3, 0x53,
+ 0xe9, 0x69, 0xab, 0x80, 0xb4, 0x95, 0xbf, 0xe2, 0x0f, 0x7f, 0x5d, 0xe4,
+ 0xef, 0x63, 0x69, 0x42, 0x18, 0xab, 0x46, 0xef, 0x7a, 0xea, 0x49, 0x24,
+ 0xc5, 0x20, 0x19, 0xab, 0x50, 0x36, 0x81, 0x8a, 0x35, 0x60, 0x7d, 0xbf,
+ 0x2a, 0x7e, 0xaa, 0x65, 0xdd, 0x8d, 0xd6, 0xd1, 0x92, 0xd3, 0xc2, 0x81,
+ 0x2f, 0x1f, 0x76, 0xd3, 0xc8, 0xa2, 0x3c, 0x45, 0xa4, 0x93, 0x84, 0x1a,
+ 0x9e, 0xa2, 0xb7, 0xd1, 0x01, 0xbf, 0xc8, 0xe0, 0x40, 0xca, 0xd1, 0x25,
+ 0x22, 0x60, 0x91, 0x77, 0x93, 0x73, 0x04, 0x48, 0xd0, 0x85, 0xb4, 0x61,
+ 0x31, 0x19, 0x44, 0x4f, 0x93, 0x61, 0x90, 0xe8, 0x50, 0xf8, 0xc2, 0xef,
+ 0x95, 0x83, 0x05, 0xd6, 0x1a, 0x1e, 0x0e, 0x05, 0x56, 0xe3, 0x2d, 0x2a,
+ 0x5f, 0x33, 0xda, 0x39, 0x5e, 0x58, 0x76, 0x4d, 0xe9, 0x48, 0xb8, 0x6f,
+ 0x64, 0x70, 0x87, 0x7c, 0xca, 0x66, 0x38, 0xcd, 0x64, 0xb1, 0xc2, 0x88,
+ 0xbc, 0x42, 0x79, 0xe1, 0x96, 0xa6, 0x61, 0x9e, 0xc3, 0x64, 0x29, 0x68,
+ 0x4c, 0xc6, 0x09, 0x17, 0xf2, 0x71, 0x36, 0x9b, 0x59, 0x20, 0xa7, 0x9d,
+ 0xe1, 0xd4, 0x58, 0x55, 0xfc, 0xe9, 0xb6, 0xcf, 0x51, 0x2c, 0xad, 0xf6,
+ 0xe3, 0x33, 0x90, 0x32, 0xfc, 0x81, 0x33, 0x0c, 0x5e, 0x6c, 0x3d, 0x7d,
+ 0xbc, 0x85, 0xb2, 0x15, 0x1b, 0x65, 0x44, 0x2c, 0x6e, 0x82, 0xf9, 0x97,
+ 0x5c, 0x9f, 0x15, 0x88, 0x4e, 0x16, 0xea, 0x43, 0x88, 0x14, 0x39, 0xbb,
+ 0x31, 0xa5, 0x8b, 0x4e, 0x49, 0xee, 0x3d, 0xce, 0x2a, 0xc4, 0x22, 0x07,
+ 0x50, 0xcb, 0xca, 0x1b, 0x8f, 0x11, 0x4c, 0xea, 0xb9, 0x4b, 0xaf, 0xcb,
+ 0x93, 0x9a, 0xed, 0x73, 0xdd, 0xc8, 0x14, 0x0a, 0xba, 0xbf, 0x7a, 0x59,
+ 0xc2, 0x92, 0x55, 0xdc, 0xe6, 0x95, 0x76, 0x16, 0x66, 0x08, 0xd2, 0xc0,
+ 0xc0, 0x6c, 0xde, 0xa3, 0x1e, 0xa9, 0xb5, 0x2d, 0x52, 0x66, 0xe2, 0x10,
+ 0xa8, 0x7f, 0xdd, 0x71, 0x96, 0x98, 0x0e, 0x79, 0x1f, 0xff, 0xf4, 0x6c,
+ 0x20, 0x82, 0x1e, 0xc7, 0x8a, 0x13, 0x4c, 0x1c, 0xd9, 0x70, 0x90, 0x38,
+ 0x55, 0xd3, 0x45, 0xc7, 0x3d, 0x1f, 0x2d, 0x37, 0xbf, 0xd0, 0xfe, 0xdb,
+ 0x41, 0x18, 0x20, 0xce, 0x3f, 0x54, 0x57, 0xb1, 0x49, 0x93, 0x77, 0x1a,
+ 0x98, 0x37, 0x4a, 0xe1, 0x51, 0x79, 0xe7, 0x3b, 0x4d, 0x35, 0xa5, 0x9e,
+ 0xbf, 0x95, 0xae, 0x21, 0x29, 0xa2, 0x6b, 0xb8, 0xf8, 0x35, 0x6e, 0xb1,
+ 0x5b, 0xab, 0x1a, 0xa8, 0xee, 0x32, 0x86, 0xc8, 0xc6, 0x1f, 0x52, 0xff,
+ 0x20, 0x8b, 0xee, 0x1e, 0xb8, 0xab, 0x9a, 0x84, 0xb4, 0xf5, 0xe4, 0xd1,
+ 0xa3, 0xa5, 0x51, 0xf6, 0x9a, 0x83, 0xc3, 0xa0, 0xa0, 0x8e, 0x6a, 0xe0,
+ 0x5d, 0xe2, 0x50, 0x47, 0x0d, 0x5e, 0x74, 0xfe, 0x8e, 0x78, 0x71, 0x7b,
+ 0xdb, 0x97, 0xd4, 0x39, 0x3d, 0x80, 0x85, 0x7e, 0x0b, 0xed, 0xd9, 0x65,
+ 0x6c, 0x3d, 0x7d, 0xfa, 0x34, 0x8a, 0xcf, 0x99, 0xfe, 0x58, 0xf9, 0xf3,
+ 0x6b, 0x64, 0xf2, 0xf4, 0xfa, 0xee, 0xd4, 0xb7, 0x14, 0xdd, 0x79, 0x54,
+ 0x4e, 0x27, 0x02, 0xe4, 0xff, 0x0a, 0x8d, 0xec, 0xc3, 0x22, 0xbf, 0xc2,
+ 0xb2, 0x3c, 0x12, 0xe1, 0x13, 0x0d, 0x67, 0x8d, 0x92, 0xb2, 0xcc, 0xd0,
+ 0x0b, 0x5a, 0xa6, 0xf5, 0xa2, 0xcc, 0x41, 0x2f, 0x5e, 0x54, 0xce, 0x23,
+ 0x7e, 0x6e, 0x3a, 0x07, 0x0a, 0x10, 0xf8, 0x2a, 0x9d, 0x2c, 0xa6, 0xe4,
+ 0xcd, 0x7b, 0xf5, 0xf7, 0xb3, 0x68, 0xfd, 0xe4, 0x6c, 0x73, 0xf7, 0xcb,
+ 0x40, 0x9e, 0xe9, 0x3a, 0xf5, 0x09, 0x76, 0x80, 0xec, 0x1e, 0x6d, 0x05,
+ 0x92, 0xb9, 0x9a, 0xdc, 0x04, 0x16, 0x7e, 0xd7, 0xe2, 0x08, 0x61, 0x1a,
+ 0x6d, 0xf9, 0xe7, 0xb1, 0x90, 0xe9, 0x64, 0xf5, 0xf3, 0x83, 0x65, 0xc0,
+ 0x71, 0xb1, 0x3a, 0xbb, 0x42, 0x31, 0xd3, 0xb7, 0x02, 0xe6, 0xcc, 0xed,
+ 0xb7, 0xda, 0x47, 0x82, 0xa3, 0x2d, 0xc1, 0x54, 0xe5, 0x8d, 0x48, 0x55,
+ 0xf7, 0x63, 0x7e, 0xed, 0xa0, 0x6b, 0x48, 0xaa, 0xb8, 0x8b, 0xf8, 0xf4,
+ 0x26, 0xbd, 0x02, 0x8a, 0x0a, 0x0a, 0xd9, 0x97, 0x58, 0x4c, 0x48, 0x3a,
+ 0x2d, 0x9a, 0x91, 0xaa, 0x81, 0x23, 0xf0, 0x5b, 0xb3, 0xc0, 0xd7, 0xc4,
+ 0xa6, 0x38, 0x31, 0x37, 0x90, 0x4a, 0xa3, 0xf9, 0x1f, 0x82, 0xad, 0xd4,
+ 0x05, 0x10, 0x23, 0x1f, 0x78, 0xe7, 0xe0, 0xc8, 0x83, 0x02, 0xc4, 0xc8,
+ 0xe4, 0x65, 0xfa, 0x2b, 0x3a, 0x1e, 0xee, 0x85, 0xd5, 0xe7, 0xe0, 0x72,
+ 0x30, 0x6a, 0x58, 0xe3, 0xf8, 0x16, 0xe5, 0x15, 0x6c, 0xd6, 0xbe, 0x29,
+ 0x1b, 0xa3, 0x62, 0xcd, 0xbb, 0xa0, 0xc0, 0x68, 0x74, 0xd8, 0x26, 0x2e,
+ 0xf0, 0x50, 0x06, 0x56, 0x59, 0xbb, 0x39, 0x9f, 0x9d, 0xbd, 0xf4, 0x18,
+ 0xb0, 0x54, 0xa1, 0x9b, 0xcc, 0x04, 0x02, 0x7f, 0x4d, 0x46, 0xe8, 0x45,
+ 0x20, 0x93, 0xa5, 0x88, 0x10, 0x66, 0xe2, 0xd9, 0xa3, 0x9d, 0x9d, 0x7e,
+ 0xf4, 0x78, 0xb0, 0x0d, 0xf7, 0xc2, 0x60, 0xfa, 0x39, 0xbd, 0xe8, 0xe4,
+ 0xff, 0xb4, 0xe0, 0x4d, 0xb5, 0xf3, 0x2e, 0x9c, 0x3f, 0x81, 0xf6, 0x53,
+ 0xfc, 0x08, 0xf4, 0x7f, 0x85, 0xe0, 0xbc, 0x7a, 0x3f, 0xee, 0x3c, 0x7e,
+ 0xbc, 0xfd, 0xe5, 0xde, 0x69, 0xfc, 0x78, 0x67, 0x1b, 0xeb, 0x09, 0xa4,
+ 0x03, 0x83, 0x29, 0x7c, 0x70, 0x31, 0x32, 0xa2, 0x6c, 0xcc, 0x9e, 0xa3,
+ 0xe9, 0xf4, 0x26, 0x9c, 0x67, 0xda, 0x2b, 0xe6, 0x69, 0x5e, 0x55, 0xd3,
+ 0xa8, 0x7a, 0xc7, 0xd0, 0x2a, 0x9b, 0xd5, 0x3b, 0xf6, 0xcf, 0xf5, 0x04,
+ 0x98, 0x2f, 0x0b, 0xe0, 0x2f, 0x99, 0x93, 0x11, 0x69, 0x96, 0x18, 0x38,
+ 0x0f, 0x01, 0xde, 0x33, 0xe7, 0x10, 0x46, 0xda, 0x0b, 0x16, 0x91, 0x18,
+ 0xef, 0x05, 0x49, 0x88, 0xf5, 0xa3, 0xc3, 0x0d, 0x3e, 0x34, 0x27, 0xa5,
+ 0x49, 0x9a, 0x47, 0xf0, 0x4a, 0xfb, 0x8c, 0x58, 0xe0, 0x0b, 0xe4, 0xbc,
+ 0xc8, 0xc9, 0x9b, 0x82, 0x89, 0x06, 0x18, 0xfe, 0x92, 0xef, 0x62, 0xaf,
+ 0xa3, 0xe2, 0xc4, 0x53, 0x30, 0xe9, 0x76, 0xe8, 0x35, 0x86, 0xe1, 0xe3,
+ 0x25, 0xa9, 0x18, 0x55, 0x5a, 0xe2, 0xca, 0x61, 0x45, 0x31, 0xce, 0x72,
+ 0x4f, 0x94, 0xeb, 0xa6, 0xe0, 0x3d, 0x5f, 0x52, 0x50, 0x61, 0xb7, 0xb3,
+ 0x79, 0x8b, 0x7f, 0xb7, 0x6b, 0xcc, 0x93, 0x33, 0x61, 0xad, 0x7a, 0x81,
+ 0xb5, 0xd2, 0xba, 0x95, 0x3c, 0xec, 0xde, 0x62, 0x74, 0xdd, 0x32, 0x6b,
+ 0x66, 0xe7, 0x74, 0x87, 0x4f, 0x5a, 0xcb, 0x04, 0xa9, 0xed, 0x19, 0x75,
+ 0xf8, 0xcd, 0x12, 0xce, 0x7d, 0xb5, 0xfd, 0x54, 0x03, 0x94, 0xe8, 0x8c,
+ 0xfe, 0xe9, 0x92, 0x2d, 0x9c, 0x49, 0xbe, 0xb9, 0x87, 0x0e, 0x4b, 0xaf,
+ 0x83, 0xb5, 0x44, 0x40, 0x37, 0xf2, 0xcf, 0x32, 0xb9, 0xd6, 0x36, 0x41,
+ 0xf8, 0x4f, 0x98, 0x87, 0xd1, 0x42, 0xbc, 0x9d, 0xe3, 0xf7, 0x6e, 0xdf,
+ 0x3a, 0x30, 0xe4, 0x6a, 0xe9, 0xaa, 0xae, 0x57, 0x29, 0xa9, 0xda, 0xee,
+ 0x2e, 0xc7, 0x2c, 0x08, 0xf4, 0x09, 0x41, 0xd3, 0x95, 0x01, 0x1e, 0x92,
+ 0xba, 0x2a, 0x70, 0x07, 0x83, 0xf4, 0xca, 0x71, 0x50, 0x6e, 0x05, 0x6c,
+ 0x5c, 0xfe, 0xc6, 0xaa, 0x94, 0x22, 0xa2, 0x6f, 0xfa, 0x0a, 0x32, 0x58,
+ 0x3b, 0x5e, 0xc0, 0x24, 0xe0, 0xb2, 0x23, 0x74, 0x11, 0x4a, 0xd9, 0x8e,
+ 0xe4, 0x33, 0x6c, 0x07, 0x00, 0x2e, 0xf6, 0x98, 0x21, 0xce, 0x08, 0x29,
+ 0xa2, 0x4e, 0x6b, 0x5d, 0x8c, 0x86, 0xf5, 0x3d, 0x10, 0x11, 0x6a, 0x68,
+ 0x4a, 0xd2, 0x15, 0x14, 0x3b, 0x3c, 0x69, 0xb6, 0x18, 0x5a, 0x5a, 0x17,
+ 0x5b, 0x84, 0x58, 0x49, 0x89, 0x5c, 0x41, 0x30, 0xf3, 0x7d, 0x19, 0x6c,
+ 0x12, 0x95, 0xa9, 0x8a, 0x98, 0xdc, 0x5f, 0xc1, 0xac, 0xc9, 0x97, 0xd8,
+ 0x28, 0xd7, 0x59, 0x5a, 0xdd, 0xcc, 0xfc, 0x47, 0xb7, 0x2a, 0x23, 0xea,
+ 0x70, 0xef, 0xae, 0x42, 0xb3, 0xc1, 0x89, 0x23, 0xf9, 0x97, 0xd8, 0xc9,
+ 0x28, 0xdb, 0xfc, 0x10, 0x5f, 0x5f, 0x5f, 0xc7, 0xa8, 0x8b, 0x58, 0x12,
+ 0x19, 0x0f, 0xa2, 0x16, 0x6a, 0x8c, 0x1b, 0xca, 0xf1, 0x53, 0xc0, 0x9c,
+ 0x92, 0xaa, 0x72, 0x98, 0xd5, 0x88, 0xb7, 0x14, 0x09, 0x55, 0xd1, 0x4b,
+ 0xc2, 0x56, 0x65, 0x3d, 0xe4, 0x13, 0xac, 0x52, 0x53, 0x96, 0xec, 0x27,
+ 0xf7, 0xe9, 0xd7, 0x70, 0x12, 0x23, 0x1a, 0x0b, 0x29, 0x02, 0x12, 0xc2,
+ 0x34, 0xb3, 0x3d, 0xa4, 0xdb, 0xef, 0x51, 0xb0, 0x1c, 0xca, 0x77, 0x9f,
+ 0xc3, 0x93, 0x7b, 0xce, 0x57, 0x85, 0xd4, 0xa6, 0x4d, 0x77, 0x88, 0xde,
+ 0xed, 0xe5, 0xca, 0x82, 0x50, 0x12, 0xd6, 0x74, 0x0a, 0x3c, 0x73, 0x5b,
+ 0x3f, 0x11, 0x0a, 0xd5, 0x63, 0xf1, 0x9a, 0x74, 0x67, 0xa2, 0x0d, 0xa0,
+ 0xf4, 0x5f, 0x4d, 0xc0, 0x07, 0xca, 0xbb, 0x9d, 0xe1, 0xc8, 0xf6, 0x7d,
+ 0x62, 0x8e, 0x23, 0xb3, 0x7c, 0x63, 0xc2, 0x27, 0xf7, 0x60, 0x3b, 0x9e,
+ 0x4e, 0x6c, 0xb8, 0xcf, 0x2a, 0x1c, 0xa5, 0x52, 0x3c, 0x31, 0x2a, 0x57,
+ 0xb3, 0x94, 0xce, 0x7d, 0x38, 0xa4, 0x44, 0x35, 0xb0, 0xd7, 0xc4, 0x7e,
+ 0x92, 0xa9, 0x05, 0xc0, 0x4a, 0x5c, 0xc0, 0xb4, 0x6f, 0x96, 0x40, 0x87,
+ 0x39, 0x0b, 0xfd, 0x74, 0x7e, 0x4d, 0x3b, 0x47, 0xef, 0x12, 0xf4, 0xc7,
+ 0xa2, 0xb7, 0x42, 0x82, 0xb1, 0x7d, 0xf5, 0x9b, 0xa4, 0xc6, 0xff, 0xbf,
+ 0x62, 0xfb, 0xa0, 0x00, 0x8d, 0xb5, 0x65, 0xc1, 0xd2, 0x23, 0x6a, 0x9f,
+ 0x51, 0xdf, 0xb0, 0x4b, 0x61, 0x30, 0x9c, 0x7d, 0xee, 0x1c, 0x96, 0x24,
+ 0x62, 0x84, 0xb4, 0x2f, 0xce, 0xa2, 0x43, 0xe6, 0xa9, 0x9d, 0x7b, 0x24,
+ 0x76, 0x9f, 0x96, 0xc8, 0x7b, 0x08, 0x10, 0x85, 0xe1, 0xac, 0x42, 0x8d,
+ 0x3e, 0xcf, 0xc9, 0x88, 0x39, 0xfc, 0xee, 0x98, 0xea, 0xd3, 0x41, 0x6e,
+ 0xe7, 0x82, 0x5d, 0xcc, 0xeb, 0x47, 0xed, 0xd4, 0x11, 0x02, 0x17, 0x59,
+ 0x6e, 0x5a, 0xc8, 0x73, 0xc7, 0xd5, 0x60, 0xf1, 0x93, 0xa8, 0xc8, 0x89,
+ 0x93, 0x91, 0x4f, 0xb0, 0x10, 0x26, 0xec, 0xaa, 0xba, 0x7d, 0x62, 0xd1,
+ 0x62, 0x82, 0xfb, 0x45, 0xb3, 0xab, 0xf6, 0xcd, 0x61, 0x4f, 0xb4, 0xc3,
+ 0x39, 0xde, 0xdb, 0x02, 0xa8, 0xb0, 0x7c, 0xa3, 0xba, 0xc9, 0xeb, 0xe4,
+ 0x43, 0xea, 0x97, 0x14, 0xca, 0xf4, 0x6d, 0xaa, 0x70, 0xbc, 0x29, 0x4e,
+ 0xec, 0xd1, 0x6c, 0x5b, 0xda, 0x40, 0x79, 0x20, 0x10, 0x30, 0x8e, 0xc1,
+ 0x63, 0x86, 0x45, 0xe1, 0x15, 0x91, 0xcb, 0xff, 0xfd, 0xa7, 0x36, 0x6f,
+ 0x04, 0xf9, 0x45, 0xd6, 0xbf, 0x82, 0xf2, 0xb9, 0x83, 0x99, 0xee, 0x7c,
+ 0xda, 0xba, 0x23, 0xc9, 0x6f, 0xc2, 0xc3, 0x7d, 0x85, 0x2e, 0xc8, 0x6f,
+ 0x24, 0xae, 0x8b, 0x30, 0x1b, 0x95, 0xda, 0xaa, 0xef, 0xc5, 0xcf, 0xcc,
+ 0x5f, 0x2d, 0x39, 0xb7, 0x76, 0x5f, 0xc2, 0xc3, 0x31, 0x81, 0x8d, 0x12,
+ 0x74, 0xf7, 0x0e, 0x53, 0xd8, 0xb7, 0xff, 0x68, 0xef, 0xd5, 0x57, 0xbf,
+ 0xe7, 0x66, 0x71, 0x27, 0x3a, 0xa9, 0x71, 0x86, 0x6f, 0xb5, 0xe1, 0x6b,
+ 0x2a, 0x33, 0xa1, 0x0e, 0x83, 0x36, 0x8c, 0x1d, 0xe4, 0xee, 0x48, 0x8c,
+ 0x0f, 0xb2, 0x66, 0xa2, 0xb9, 0xc6, 0xc2, 0x3b, 0xb6, 0x30, 0x6f, 0x62,
+ 0x66, 0x6a, 0x6b, 0xe4, 0x84, 0x81, 0xa4, 0xd2, 0x0f, 0x40, 0xe3, 0xb5,
+ 0x29, 0x45, 0xb6, 0x93, 0x8d, 0xc3, 0xc3, 0x89, 0xd3, 0xdc, 0xfb, 0x2e,
+ 0x23, 0x41, 0x96, 0x7c, 0x94, 0xfb, 0x55, 0xd4, 0xd3, 0x93, 0x78, 0x86,
+ 0xc9, 0xda, 0x70, 0xb2, 0xf5, 0x6c, 0xb7, 0xc6, 0x8e, 0x55, 0xe4, 0x37,
+ 0x46, 0xfb, 0xda, 0xe8, 0x37, 0xb7, 0x08, 0x9b, 0xb0, 0x90, 0xc8, 0xd5,
+ 0xbd, 0xc9, 0xc8, 0xb5, 0x19, 0x34, 0x4e, 0xd5, 0x55, 0x75, 0x72, 0x76,
+ 0x1e, 0x3c, 0xa9, 0xbb, 0x7c, 0xd5, 0x9d, 0x3f, 0xea, 0xb3, 0x7c, 0x15,
+ 0x13, 0xad, 0x3d, 0x72, 0xce, 0xc7, 0xca, 0x19, 0x7b, 0x80, 0xa1, 0x07,
+ 0x58, 0x4f, 0xc1, 0x94, 0x2c, 0xcc, 0xc4, 0x9d, 0x7a, 0x69, 0x7c, 0x4e,
+ 0x22, 0x43, 0xc6, 0x80, 0x13, 0x5f, 0x59, 0x45, 0x91, 0x9d, 0xa1, 0x0a,
+ 0x96, 0xe3, 0x50, 0x9a, 0x36, 0xf9, 0xea, 0xda, 0xbb, 0xa5, 0xb4, 0xd7,
+ 0x49, 0x66, 0x9e, 0xfc, 0xfa, 0xd4, 0x92, 0xdb, 0xce, 0x44, 0x1f, 0x0e,
+ 0x46, 0xf1, 0xaa, 0x02, 0xdc, 0x8e, 0xf0, 0x15, 0xff, 0x97, 0xc4, 0xde,
+ 0xbd, 0x07, 0x31, 0x64, 0x79, 0xff, 0x21, 0xe8, 0x75, 0x4a, 0x43, 0xb8,
+ 0x9f, 0x3a, 0xe1, 0x5a, 0x95, 0xa0, 0x9e, 0x38, 0xda, 0x85, 0x7d, 0xa4,
+ 0x5b, 0xaf, 0x88, 0xa2, 0x57, 0x7f, 0x3b, 0x3f, 0xdf, 0xc0, 0x91, 0xf3,
+ 0x71, 0x15, 0xb5, 0xa0, 0x94, 0x39, 0xbf, 0x96, 0xc0, 0x51, 0x81, 0x7c,
+ 0x8d, 0x97, 0x8d, 0x15, 0x8e, 0x50, 0x72, 0x87, 0x96, 0x12, 0xb9, 0xa1,
+ 0xed, 0xeb, 0xe4, 0x46, 0xfc, 0x9f, 0xd1, 0xb0, 0x2c, 0xae, 0x2b, 0xb2,
+ 0xaa, 0x52, 0x69, 0x9d, 0x96, 0x70, 0x58, 0xe4, 0x32, 0x09, 0x34, 0x1d,
+ 0x9a, 0x9a, 0x9e, 0xb8, 0xdf, 0x9f, 0xbf, 0x7a, 0x49, 0x0e, 0x5a, 0x81,
+ 0xd3, 0x44, 0x44, 0x1c, 0x11, 0x60, 0x8b, 0xe1, 0x0c, 0x2e, 0x1f, 0xe8,
+ 0xa5, 0x35, 0x2b, 0x05, 0xca, 0x03, 0x42, 0xc9, 0x95, 0xf3, 0x50, 0x1a,
+ 0x9c, 0x98, 0x41, 0x4e, 0xa7, 0x0a, 0xd7, 0x82, 0x5b, 0x66, 0xc5, 0x74,
+ 0xd8, 0x6a, 0x87, 0x5c, 0xf3, 0x42, 0x9a, 0xf3, 0x0b, 0x3c, 0x02, 0x7c,
+ 0x62, 0x99, 0xbe, 0x8b, 0x2e, 0xbc, 0x29, 0x35, 0xfd, 0x36, 0x7b, 0x86,
+ 0x7a, 0xb6, 0x91, 0xf3, 0xd4, 0x58, 0x23, 0x69, 0xea, 0xd6, 0x5e, 0x76,
+ 0xef, 0x32, 0x5d, 0x1b, 0x15, 0x36, 0x54, 0x1c, 0x25, 0xab, 0x6e, 0xbe,
+ 0x28, 0x09, 0xd2, 0x4a, 0x3d, 0x14, 0x01, 0xe8, 0x07, 0x4d, 0xbc, 0x33,
+ 0xc9, 0x5e, 0x26, 0x97, 0xa5, 0x61, 0xa9, 0x68, 0xde, 0x2f, 0x8c, 0xdf,
+ 0x14, 0x8c, 0xc1, 0x38, 0x0f, 0xc1, 0x85, 0xd0, 0x29, 0x02, 0x71, 0xc1,
+ 0xe8, 0x84, 0x54, 0x9c, 0x50, 0xfa, 0xcd, 0x12, 0xb7, 0x88, 0x35, 0x0a,
+ 0x09, 0xb8, 0x84, 0xbe, 0xae, 0x4a, 0x4d, 0x96, 0xb1, 0xc6, 0xf0, 0x2c,
+ 0x66, 0x47, 0x81, 0x79, 0x2c, 0x6e, 0x16, 0x55, 0x14, 0x6a, 0xb3, 0x43,
+ 0x75, 0x5a, 0x53, 0xc2, 0x94, 0xb4, 0x69, 0x8c, 0x19, 0x46, 0xf3, 0x1d,
+ 0xfa, 0xa7, 0x38, 0x72, 0x5a, 0x5e, 0xa8, 0x3b, 0xc5, 0x28, 0xa7, 0xa1,
+ 0xbc, 0xb2, 0xff, 0x1d, 0xb3, 0x06, 0x82, 0x54, 0xb8, 0xa0, 0xf4, 0x1f,
+ 0xfc, 0xe9, 0x5a, 0x3c, 0x66, 0x66, 0x35, 0x4e, 0x72, 0xf8, 0x6a, 0xb8,
+ 0x95, 0x58, 0x9e, 0x32, 0x9d, 0x7e, 0x35, 0x2d, 0x16, 0xd5, 0xcd, 0x1a,
+ 0x56, 0xbb, 0xc1, 0x4e, 0x7b, 0x8d, 0x2e, 0x73, 0xcc, 0x02, 0xa6, 0x5e,
+ 0x9b, 0x78, 0x6e, 0xa3, 0xcb, 0x45, 0xfe, 0x5e, 0x80, 0x53, 0xa8, 0x5f,
+ 0xd7, 0x14, 0x3d, 0x10, 0x6b, 0xce, 0xb8, 0xff, 0xdb, 0x1d, 0x74, 0xf0,
+ 0xe9, 0x9d, 0x38, 0x51, 0x23, 0xbd, 0xcf, 0x0c, 0x88, 0x92, 0x96, 0x3b,
+ 0x74, 0x6a, 0x2a, 0x9d, 0x2d, 0x49, 0x20, 0xef, 0x41, 0x07, 0xb2, 0x89,
+ 0x50, 0x26, 0xd7, 0xe5, 0x70, 0x2e, 0x1a, 0x88, 0xcc, 0xa2, 0x22, 0x4f,
+ 0xb9, 0x95, 0xe1, 0x49, 0xa3, 0x17, 0xd9, 0xa4, 0x28, 0x86, 0x49, 0xb9,
+ 0xe6, 0x55, 0x0f, 0xe2, 0xb2, 0xa9, 0x41, 0xfd, 0x50, 0x32, 0x2b, 0x39,
+ 0x4e, 0x65, 0xd9, 0xe1, 0x37, 0xfc, 0xa6, 0x34, 0x65, 0xc4, 0x5f, 0xe8,
+ 0x6f, 0x02, 0x55, 0x3e, 0xc5, 0x74, 0x6c, 0x97, 0x1e, 0x35, 0xd6, 0x41,
+ 0xa7, 0x80, 0xa7, 0xd2, 0x0f, 0x38, 0x9c, 0x10, 0x0d, 0x25, 0xbd, 0x8e,
+ 0x03, 0x38, 0x5a, 0xec, 0x5f, 0xc2, 0x62, 0x38, 0xac, 0x52, 0xa2, 0xdc,
+ 0x7f, 0xcd, 0xf6, 0x92, 0x54, 0x2e, 0xe3, 0xe4, 0x81, 0x6b, 0xec, 0x80,
+ 0x77, 0xfb, 0xd1, 0xe3, 0x10, 0x6b, 0xb0, 0xac, 0xc0, 0xb9, 0x58, 0xc4,
+ 0x67, 0xa4, 0x70, 0x34, 0xdc, 0x5e, 0x81, 0x0f, 0x40, 0xfa, 0xee, 0x39,
+ 0x2e, 0x71, 0x93, 0x39, 0xda, 0x62, 0x98, 0xd6, 0xe9, 0xb8, 0x0a, 0xb6,
+ 0x17, 0x93, 0x82, 0x6b, 0xc2, 0x5c, 0x51, 0xab, 0x00, 0xfc, 0x4a, 0x6c,
+ 0x83, 0x0d, 0xb4, 0xd3, 0xbe, 0x5a, 0x33, 0x1c, 0x30, 0xe5, 0xce, 0xe5,
+ 0xdc, 0x58, 0x7a, 0xae, 0x4b, 0x91, 0x90, 0xba, 0x4e, 0x69, 0xe9, 0xd0,
+ 0xc0, 0x00, 0x95, 0xa1, 0xec, 0x93, 0x28, 0xcc, 0x91, 0x2d, 0x81, 0x7c,
+ 0x3a, 0x3d, 0x66, 0x1c, 0xf5, 0xd8, 0xe8, 0x80, 0x7f, 0xad, 0xe0, 0x7d,
+ 0x68, 0xbe, 0x86, 0xff, 0xac, 0x8b, 0x62, 0xfa, 0xd5, 0x68, 0x36, 0xc6,
+ 0x35, 0xac, 0x34, 0xd0, 0xca, 0xde, 0x25, 0xc9, 0xc1, 0x6d, 0xb9, 0xb5,
+ 0x7d, 0x45, 0xa6, 0xa5, 0x87, 0x90, 0x2c, 0x6e, 0xe7, 0x4e, 0x18, 0xaa,
+ 0x9a, 0x2d, 0x6a, 0x06, 0x1c, 0x4e, 0x3f, 0x60, 0x45, 0x31, 0x36, 0xdf,
+ 0x6c, 0xc8, 0x4b, 0xae, 0xa3, 0x8d, 0x8f, 0x69, 0xa2, 0x4b, 0xba, 0x79,
+ 0x3e, 0x06, 0x45, 0x7c, 0xde, 0x6f, 0xf6, 0x62, 0x6f, 0xb8, 0x56, 0xd2,
+ 0x69, 0x7a, 0xc1, 0xf7, 0x60, 0xff, 0xe5, 0xd1, 0xdf, 0x8f, 0x5e, 0x7a,
+ 0xfa, 0xcf, 0x77, 0x67, 0x67, 0x9b, 0xef, 0xd3, 0x72, 0x98, 0x96, 0x45,
+ 0x45, 0x1a, 0x10, 0xb0, 0x46, 0x7a, 0xd2, 0x94, 0xd1, 0x39, 0xe4, 0x7e,
+ 0x6d, 0xb1, 0xf1, 0x93, 0x60, 0x42, 0x36, 0x16, 0x5d, 0xf3, 0x94, 0x52,
+ 0xbb, 0x4f, 0xf0, 0x07, 0xb3, 0x54, 0x11, 0x6f, 0x4b, 0xcc, 0xe1, 0xa0,
+ 0xf8, 0x5c, 0x12, 0xe8, 0x78, 0x43, 0x98, 0xea, 0x51, 0xf4, 0x9c, 0xef,
+ 0x3f, 0x43, 0x3a, 0xa0, 0xbc, 0xb3, 0x5f, 0xe1, 0xbd, 0x32, 0x67, 0xe0,
+ 0xe2, 0xe7, 0x32, 0x29, 0x21, 0xee, 0xe1, 0xae, 0x71, 0xab, 0x1c, 0xd6,
+ 0x02, 0x4e, 0xfe, 0x1a, 0x1f, 0x9c, 0xc5, 0xcf, 0x8f, 0x5e, 0x1e, 0x7d,
+ 0x77, 0x70, 0x7e, 0x14, 0x4d, 0xa6, 0xc9, 0x85, 0x01, 0x8d, 0xef, 0x32,
+ 0x2c, 0x84, 0x23, 0xff, 0x55, 0x76, 0x26, 0x32, 0x5d, 0xc2, 0xe1, 0x0a,
+ 0x8c, 0xde, 0x53, 0x7c, 0xcc, 0xf4, 0xfd, 0x4b, 0xd0, 0x75, 0xc0, 0xe5,
+ 0xdf, 0xe1, 0xe1, 0x80, 0x69, 0x4e, 0x67, 0xb2, 0x54, 0xef, 0x0b, 0x92,
+ 0x29, 0xe8, 0x86, 0x55, 0xf4, 0x36, 0x47, 0x4c, 0x8b, 0xcc, 0x00, 0xe6,
+ 0xf1, 0xd7, 0xbb, 0x2e, 0x6a, 0xbb, 0xb5, 0xe1, 0x8c, 0x14, 0xe7, 0xac,
+ 0x3f, 0x43, 0xe3, 0x14, 0x67, 0xf6, 0x1e, 0x9e, 0xe3, 0x8a, 0x8e, 0xc1,
+ 0x46, 0xaf, 0x2b, 0xb9, 0x45, 0x55, 0x35, 0x6d, 0xd0, 0x72, 0x86, 0x0d,
+ 0x9b, 0xc2, 0x7e, 0x41, 0x05, 0xd0, 0x25, 0xfd, 0xfb, 0x39, 0x3d, 0xd8,
+ 0xaa, 0x21, 0x70, 0x20, 0x39, 0x73, 0xdb, 0x7f, 0x3b, 0x80, 0x8a, 0x4f,
+ 0xbe, 0xf6, 0x6a, 0x74, 0x99, 0x12, 0x4e, 0x19, 0xd9, 0x8d, 0x98, 0xb8,
+ 0x4f, 0x59, 0xe2, 0x9c, 0x40, 0x28, 0x9d, 0x27, 0x48, 0x08, 0x0e, 0x53,
+ 0xf2, 0x9b, 0xa1, 0xfb, 0x03, 0x1b, 0x93, 0x06, 0xa4, 0xfa, 0x75, 0x56,
+ 0x32, 0x56, 0xf8, 0x94, 0x80, 0x50, 0xd3, 0x0f, 0x35, 0xa5, 0xb5, 0x98,
+ 0xa4, 0x7a, 0xce, 0x29, 0x6c, 0x37, 0x39, 0xcf, 0xa9, 0x6f, 0x6c, 0xfb,
+ 0xaa, 0x9b, 0x0e, 0xde, 0x26, 0x79, 0x89, 0xf3, 0xa4, 0xe8, 0x47, 0xc4,
+ 0xce, 0xd4, 0x18, 0xc7, 0x15, 0x2e, 0x07, 0xf9, 0xe5, 0xed, 0x5c, 0x29,
+ 0x05, 0xa6, 0x2d, 0x94, 0xfc, 0x2c, 0x3a, 0x1e, 0xf4, 0xa3, 0x5b, 0x83,
+ 0xcb, 0xda, 0x56, 0xa2, 0x20, 0xb3, 0x37, 0x7d, 0x83, 0xc8, 0x2c, 0xc3,
+ 0x30, 0x35, 0x01, 0x23, 0xc1, 0x53, 0x1f, 0x34, 0xbb, 0x5b, 0xfb, 0xb5,
+ 0x3d, 0x1d, 0x4c, 0xd9, 0x6d, 0x7c, 0x4f, 0xdd, 0xd9, 0xf5, 0xaf, 0xda,
+ 0x83, 0xbd, 0x49, 0xaa, 0xb4, 0x5f, 0x71, 0x3a, 0xf7, 0x5a, 0xda, 0xae,
+ 0x13, 0xe0, 0xf3, 0xb9, 0x5b, 0x9f, 0xac, 0xd8, 0x5d, 0x22, 0xcc, 0xd5,
+ 0x78, 0x39, 0x3a, 0x7d, 0x73, 0xce, 0x88, 0xec, 0xf8, 0x17, 0x11, 0xb7,
+ 0x55, 0xa8, 0x7d, 0x0f, 0x67, 0x95, 0x53, 0x7d, 0x48, 0x4a, 0x59, 0x97,
+ 0x5a, 0xb4, 0x5c, 0x49, 0xfd, 0x6a, 0xae, 0x5d, 0x88, 0x25, 0x0c, 0x04,
+ 0xdc, 0x6a, 0x86, 0xc8, 0x32, 0xe1, 0xbe, 0x0b, 0x34, 0xb1, 0x16, 0x7d,
+ 0x4b, 0x6e, 0xd0, 0xc9, 0x9b, 0x73, 0xae, 0x8f, 0xb3, 0x95, 0x40, 0x9a,
+ 0x1e, 0x9c, 0xd5, 0x9c, 0xfc, 0x8a, 0xcf, 0xb4, 0xf5, 0x0c, 0xc6, 0x04,
+ 0x06, 0x06, 0x37, 0xe0, 0x51, 0xf9, 0xfa, 0x99, 0x3e, 0x70, 0xc6, 0x6b,
+ 0x2f, 0xc0, 0x0b, 0x92, 0x33, 0xaa, 0x69, 0x84, 0xfd, 0x00, 0xd6, 0x8b,
+ 0xd1, 0x9a, 0x08, 0x20, 0x83, 0x93, 0x0b, 0x15, 0x74, 0x83, 0x57, 0x98,
+ 0x0a, 0x2f, 0x20, 0x63, 0x68, 0x22, 0x29, 0xce, 0x09, 0xb6, 0x5b, 0xf4,
+ 0xf3, 0xcc, 0x12, 0x44, 0xde, 0x44, 0xd6, 0x2d, 0xf6, 0x79, 0xae, 0x35,
+ 0xdf, 0xca, 0x89, 0xe9, 0xab, 0x74, 0xf3, 0x03, 0xf6, 0x2b, 0x9e, 0x70,
+ 0xbb, 0xed, 0x8a, 0x53, 0x1a, 0xc5, 0x6b, 0x91, 0xa3, 0x64, 0xf0, 0x64,
+ 0xa6, 0x9a, 0x22, 0x44, 0x1b, 0xbc, 0x3b, 0x4e, 0x0e, 0x40, 0x83, 0x90,
+ 0x3a, 0x42, 0x84, 0xb6, 0xb6, 0xac, 0x22, 0xc4, 0x20, 0xa7, 0xe5, 0xe4,
+ 0xf1, 0xe9, 0xd5, 0x93, 0x66, 0x26, 0xa6, 0x5e, 0x6f, 0xba, 0xd8, 0x7e,
+ 0xd1, 0x92, 0x9e, 0x91, 0x4d, 0xe8, 0x46, 0x36, 0xe9, 0x4d, 0xcc, 0xec,
+ 0x00, 0x67, 0xa0, 0x17, 0x48, 0xd6, 0xb2, 0xea, 0xca, 0x2c, 0x52, 0x28,
+ 0x71, 0x98, 0x82, 0x66, 0x9e, 0x21, 0x1a, 0xf2, 0xb1, 0x63, 0x06, 0x05,
+ 0xb2, 0x3f, 0x81, 0xa6, 0x46, 0xd2, 0x0b, 0x1a, 0x99, 0x00, 0xbe, 0xcb,
+ 0xf9, 0xca, 0xf4, 0x16, 0x21, 0x30, 0xd6, 0x85, 0x82, 0x00, 0x44, 0xf1,
+ 0x69, 0x5f, 0x92, 0x14, 0xa9, 0x04, 0xd4, 0xd3, 0x95, 0x61, 0xe7, 0x46,
+ 0xa6, 0x11, 0x88, 0x3e, 0x99, 0x54, 0x57, 0x4b, 0x93, 0x8b, 0xdd, 0x8d,
+ 0x6e, 0xf3, 0xc4, 0x8f, 0x4f, 0x2e, 0x5e, 0x7a, 0x8c, 0xb7, 0x09, 0x56,
+ 0x77, 0x65, 0x2b, 0xc1, 0x9d, 0xdb, 0x37, 0xab, 0x2b, 0xa6, 0xbb, 0xc6,
+ 0xce, 0x85, 0x19, 0x56, 0x75, 0x15, 0x64, 0x58, 0x77, 0xe4, 0x58, 0x67,
+ 0x7f, 0x37, 0x76, 0x81, 0x70, 0xa6, 0x90, 0x93, 0x40, 0x0f, 0x79, 0x15,
+ 0x56, 0xa5, 0x59, 0x6c, 0xed, 0xcd, 0xc3, 0x29, 0x85, 0x55, 0x9d, 0x1e,
+ 0x9c, 0xfd, 0x7d, 0x09, 0x93, 0x32, 0x9c, 0xa3, 0x06, 0xba, 0xc6, 0xf7,
+ 0x82, 0xd7, 0x19, 0xb6, 0xea, 0x0e, 0xd7, 0x19, 0x26, 0xf5, 0xae, 0xb3,
+ 0xb7, 0x73, 0xcb, 0xae, 0x73, 0x80, 0x1c, 0x8f, 0x27, 0xed, 0xdb, 0x9c,
+ 0xd3, 0x0d, 0x26, 0x70, 0x96, 0x25, 0xd7, 0x98, 0x2f, 0xee, 0xd9, 0xdf,
+ 0xfd, 0xd9, 0x57, 0xb8, 0xc6, 0xf0, 0x41, 0xde, 0x35, 0xd6, 0x63, 0x0a,
+ 0xdf, 0xe3, 0xae, 0x6b, 0x5c, 0x17, 0x7a, 0xff, 0xe9, 0x0a, 0xbb, 0x37,
+ 0xd8, 0xbf, 0xbd, 0xb7, 0xa9, 0x28, 0x0e, 0x01, 0x87, 0x73, 0xfe, 0xef,
+ 0xdf, 0x87, 0x60, 0xe9, 0x59, 0xdc, 0xf9, 0x4e, 0xc2, 0xc2, 0xee, 0x79,
+ 0x27, 0x35, 0x05, 0xb4, 0xeb, 0x4e, 0xba, 0xf8, 0x79, 0x3e, 0xa5, 0x68,
+ 0xb5, 0x9e, 0x05, 0x26, 0xb6, 0xd9, 0x90, 0x01, 0x97, 0x83, 0xa6, 0xf3,
+ 0x31, 0xa8, 0xa0, 0x1f, 0xdc, 0x35, 0x18, 0xb8, 0x6c, 0x18, 0x71, 0xe3,
+ 0xb3, 0x64, 0x2c, 0x5d, 0xa0, 0xa4, 0xc5, 0x1c, 0xb9, 0x3e, 0x5d, 0xe4,
+ 0x41, 0x24, 0x6a, 0x1f, 0xd4, 0xd1, 0x69, 0x2a, 0x12, 0xc6, 0x02, 0xad,
+ 0x52, 0x2c, 0x09, 0x8a, 0x9a, 0x89, 0xaf, 0xe6, 0xfc, 0xb3, 0x82, 0x6c,
+ 0x9d, 0xa7, 0x83, 0xc7, 0x5b, 0x83, 0xad, 0x46, 0x8f, 0x84, 0x54, 0x70,
+ 0xfa, 0x2f, 0x89, 0xed, 0x5b, 0xb0, 0xf1, 0xe8, 0x9f, 0xdc, 0x2c, 0x1e,
+ 0x97, 0x1d, 0x50, 0xc0, 0xa7, 0x2d, 0x6c, 0xf2, 0xc8, 0x03, 0x25, 0x0c,
+ 0xd0, 0xde, 0x3f, 0xfb, 0x0e, 0x01, 0x7e, 0x2a, 0xda, 0x5b, 0x91, 0xec,
+ 0xfe, 0xb9, 0x9a, 0x42, 0xec, 0x9c, 0x54, 0x9b, 0xd5, 0xa3, 0x6d, 0x49,
+ 0xba, 0x32, 0xee, 0x07, 0x98, 0x5d, 0xe8, 0xc0, 0x58, 0x92, 0x13, 0x53,
+ 0x37, 0xd2, 0x8c, 0x11, 0xb8, 0x90, 0x80, 0xed, 0xc5, 0x29, 0x86, 0x09,
+ 0x0d, 0x58, 0xcd, 0xab, 0xa1, 0x78, 0xda, 0xc0, 0xc4, 0x57, 0x2c, 0x4b,
+ 0xce, 0x79, 0x13, 0xf5, 0x5b, 0xb2, 0x3e, 0x87, 0x58, 0xd8, 0x88, 0xd2,
+ 0xbe, 0x22, 0xe1, 0x8e, 0xe1, 0x7e, 0x83, 0xf9, 0x47, 0x38, 0xcd, 0x15,
+ 0x9b, 0x58, 0x5d, 0xee, 0x35, 0x30, 0xcf, 0x4a, 0x04, 0x34, 0x9a, 0xa5,
+ 0x4e, 0x09, 0xf8, 0xad, 0x92, 0x3e, 0xf4, 0xfd, 0xcb, 0x2c, 0xa1, 0x76,
+ 0xc6, 0x9d, 0x5f, 0x1a, 0x10, 0x3c, 0xe2, 0xd0, 0x34, 0xf7, 0x61, 0x35,
+ 0xc1, 0xe5, 0xae, 0xd8, 0x05, 0x17, 0x55, 0xea, 0x46, 0xc6, 0xea, 0x93,
+ 0xed, 0x56, 0xc6, 0x6a, 0x5e, 0xc5, 0xe4, 0x3a, 0x9d, 0x20, 0x6c, 0xfc,
+ 0xbe, 0xf9, 0xab, 0xe7, 0x31, 0x7a, 0xfe, 0xfa, 0xac, 0x65, 0xc0, 0x54,
+ 0x29, 0x43, 0x2a, 0x71, 0xf9, 0x3f, 0x42, 0x35, 0x3a, 0xa5, 0xfd, 0xf5,
+ 0x65, 0x59, 0x2c, 0x2e, 0x40, 0xbd, 0xdb, 0x0f, 0xc6, 0x6c, 0x68, 0x8a,
+ 0x96, 0x51, 0xa6, 0x30, 0xd3, 0x0b, 0xf2, 0xe4, 0xa2, 0xb7, 0x9e, 0x2c,
+ 0x30, 0xbb, 0xba, 0x75, 0xf6, 0xbd, 0xa0, 0x44, 0x0f, 0x75, 0xc1, 0x61,
+ 0xb1, 0x88, 0xeb, 0xe4, 0x0c, 0x19, 0xe4, 0x1f, 0xd4, 0x55, 0x5d, 0x7a,
+ 0x79, 0x29, 0xa2, 0x7d, 0x92, 0x4b, 0x97, 0x42, 0x1a, 0x34, 0x14, 0x19,
+ 0x5e, 0x97, 0xa6, 0x1d, 0x52, 0xe6, 0xbb, 0xd1, 0xe1, 0x79, 0x69, 0x6c,
+ 0xdd, 0x4a, 0xce, 0x17, 0x5f, 0x68, 0xb3, 0xf3, 0x65, 0x35, 0x1a, 0x69,
+ 0xcc, 0x9f, 0xd6, 0x97, 0x5b, 0xab, 0xbb, 0x35, 0x71, 0x88, 0xf9, 0xd5,
+ 0xa3, 0x18, 0xbf, 0x34, 0x52, 0x37, 0x26, 0xff, 0xf0, 0x09, 0xfd, 0x70,
+ 0xd0, 0x9e, 0xc8, 0xf3, 0x29, 0x13, 0x82, 0xbc, 0xd3, 0x50, 0x7b, 0x91,
+ 0x8f, 0xd3, 0x72, 0x4a, 0x2d, 0x5f, 0xa6, 0xd9, 0x90, 0x9b, 0x28, 0x53,
+ 0xff, 0x6c, 0x4e, 0x1e, 0x27, 0x4c, 0x75, 0xe6, 0xec, 0xf0, 0x25, 0xb1,
+ 0x8f, 0xf7, 0x5f, 0x79, 0xe4, 0x69, 0x16, 0xb8, 0x2f, 0x07, 0x12, 0x26,
+ 0x4e, 0xa6, 0x4e, 0x27, 0xe0, 0x32, 0x24, 0x74, 0xe3, 0xc2, 0x05, 0x75,
+ 0x3c, 0x3e, 0x35, 0xb5, 0xdb, 0xc4, 0x70, 0x66, 0xc9, 0x7b, 0x9f, 0xcd,
+ 0x80, 0xfa, 0xf5, 0x88, 0xe8, 0x59, 0xc9, 0xb9, 0xdf, 0x48, 0x46, 0x72,
+ 0x7f, 0xa3, 0x36, 0x6c, 0x9d, 0x1a, 0x60, 0x35, 0x3f, 0xc7, 0x95, 0x27,
+ 0x64, 0xa2, 0xd4, 0xf2, 0x32, 0x37, 0xc6, 0xa4, 0x10, 0x4a, 0x34, 0xaf,
+ 0x3e, 0xdd, 0x4d, 0x72, 0x66, 0x3b, 0x3e, 0x13, 0xc9, 0x99, 0xf9, 0xb7,
+ 0xb7, 0x06, 0xdb, 0x83, 0x9d, 0xc1, 0xee, 0xfd, 0xc8, 0xce, 0xde, 0xc0,
+ 0x65, 0x64, 0xa7, 0x93, 0x7d, 0x16, 0xb2, 0x7b, 0xf2, 0x7b, 0x93, 0xdd,
+ 0x93, 0xcf, 0x44, 0x76, 0x4f, 0xee, 0x44, 0x76, 0x4f, 0x3e, 0x33, 0xd9,
+ 0xc9, 0xfc, 0x3b, 0xc9, 0xd6, 0xa3, 0xbd, 0x47, 0xe9, 0xa3, 0x9d, 0xbd,
+ 0xbd, 0xc7, 0x4f, 0xb6, 0x1f, 0x94, 0xf8, 0x1e, 0xb5, 0x89, 0xef, 0xc9,
+ 0x67, 0x22, 0x3e, 0x71, 0x6d, 0x19, 0xd2, 0x4b, 0x3d, 0xe2, 0x3b, 0x93,
+ 0xb4, 0x75, 0x6d, 0x48, 0x88, 0xe4, 0xa1, 0x6f, 0x71, 0x1a, 0x93, 0x94,
+ 0xfc, 0x6b, 0xb5, 0xac, 0xdb, 0xe6, 0xd5, 0x57, 0xdf, 0x49, 0x5f, 0xd7,
+ 0x12, 0x2b, 0x33, 0xa8, 0xa5, 0x5b, 0xcc, 0x0d, 0x30, 0xa4, 0x63, 0x3b,
+ 0x07, 0x91, 0xe6, 0x13, 0xcc, 0x31, 0x00, 0xc2, 0x3b, 0xc5, 0xef, 0xe5,
+ 0xca, 0xda, 0xca, 0xe2, 0xb6, 0x86, 0xda, 0x03, 0xc1, 0x5e, 0xed, 0xed,
+ 0xe3, 0xf6, 0xc4, 0xfc, 0xf8, 0xd7, 0x41, 0xb8, 0xbe, 0x34, 0x01, 0xe9,
+ 0x6f, 0x97, 0xd4, 0x4d, 0xab, 0xba, 0x0f, 0x2b, 0x36, 0x21, 0x7c, 0x30,
+ 0x5a, 0xd5, 0xf9, 0xb7, 0xbf, 0xdc, 0x19, 0x6c, 0x3f, 0x79, 0x86, 0xc0,
+ 0xab, 0x7d, 0xfb, 0xf7, 0x9d, 0xd5, 0x48, 0xb6, 0x4d, 0xb1, 0x4b, 0x08,
+ 0x56, 0xe7, 0xf5, 0x41, 0x1b, 0xee, 0x48, 0xb0, 0x4c, 0xaf, 0xa8, 0xdb,
+ 0x09, 0xb5, 0x8e, 0x62, 0x8f, 0x3a, 0x8b, 0x4b, 0x6e, 0x9c, 0x59, 0xd5,
+ 0x49, 0xed, 0xe1, 0xee, 0x9c, 0x51, 0x34, 0xa2, 0xd2, 0xe6, 0x9a, 0xfc,
+ 0x0c, 0x99, 0x69, 0x06, 0x9f, 0xef, 0x79, 0xf1, 0x3d, 0x71, 0xce, 0x18,
+ 0x23, 0x27, 0x31, 0xf5, 0x9b, 0xdf, 0x58, 0xae, 0xba, 0x37, 0x67, 0x5c,
+ 0x1a, 0xbb, 0xb8, 0x87, 0x51, 0xd6, 0x1c, 0x7d, 0x65, 0x45, 0xbd, 0xb5,
+ 0x38, 0xfe, 0x89, 0xab, 0xa9, 0xc3, 0xbf, 0xb5, 0x35, 0xc8, 0xaa, 0x45,
+ 0x0d, 0x30, 0x92, 0x06, 0xc7, 0x9a, 0x65, 0x67, 0xad, 0xd6, 0x85, 0xee,
+ 0x83, 0x5d, 0x07, 0xd2, 0x0c, 0xb5, 0x7d, 0xcc, 0x89, 0xb4, 0x26, 0x7c,
+ 0x78, 0x33, 0xd9, 0xfd, 0xec, 0x7b, 0x1c, 0x87, 0x59, 0xd8, 0x43, 0x9f,
+ 0x05, 0xda, 0x71, 0xb7, 0x1d, 0x03, 0xce, 0xb6, 0x0f, 0x26, 0x6c, 0xb8,
+ 0x27, 0x9d, 0x6d, 0x09, 0xdb, 0xdc, 0x6e, 0xd8, 0xfe, 0xe2, 0xfb, 0x0d,
+ 0x27, 0xe6, 0xcb, 0x21, 0x19, 0x4e, 0xbd, 0x21, 0x88, 0xe2, 0x00, 0x38,
+ 0x35, 0xb5, 0xb0, 0x70, 0xf1, 0x10, 0x9c, 0x44, 0x3e, 0x75, 0xc0, 0x90,
+ 0xe7, 0x43, 0x86, 0x28, 0xa3, 0x59, 0x8a, 0x8e, 0xbe, 0xac, 0x9a, 0x85,
+ 0xd0, 0x86, 0xd1, 0xee, 0x56, 0x13, 0x89, 0x16, 0xe5, 0xb7, 0x75, 0xc2,
+ 0x26, 0x21, 0xd4, 0x5d, 0x56, 0x33, 0xd0, 0x88, 0x9f, 0xa0, 0xaf, 0x0f,
+ 0x99, 0x28, 0x92, 0x12, 0xfc, 0xbd, 0x74, 0x70, 0x8e, 0x09, 0x57, 0x92,
+ 0xac, 0xb0, 0x40, 0xd4, 0x09, 0xc9, 0xce, 0x22, 0x2f, 0xd1, 0x4a, 0x19,
+ 0xeb, 0xbf, 0x22, 0x74, 0x06, 0x6e, 0xe6, 0x11, 0x51, 0x80, 0x95, 0x66,
+ 0x05, 0xe9, 0xf4, 0x7d, 0x71, 0x9d, 0x52, 0x92, 0x65, 0x20, 0xd1, 0xae,
+ 0x0b, 0xcf, 0x1c, 0xd7, 0x86, 0xb9, 0x54, 0xb6, 0x41, 0x66, 0x96, 0x5f,
+ 0xa6, 0x88, 0x79, 0x34, 0xa6, 0x6b, 0x40, 0xf8, 0x2a, 0x81, 0xda, 0xaf,
+ 0xb2, 0xa0, 0x2c, 0x4c, 0xa7, 0x11, 0xe6, 0x55, 0x96, 0xb4, 0x49, 0x4c,
+ 0x98, 0xf1, 0x2d, 0x3c, 0xe4, 0xbc, 0x5d, 0xd1, 0xb5, 0xc8, 0x09, 0xd2,
+ 0x79, 0x42, 0x61, 0x31, 0x02, 0x2c, 0x17, 0x1b, 0xb5, 0xd7, 0xb3, 0x0d,
+ 0x2a, 0x2b, 0x75, 0x87, 0xb4, 0x4f, 0xcb, 0x6d, 0x5f, 0xf3, 0xec, 0x71,
+ 0x00, 0xf1, 0x80, 0x05, 0xa1, 0x50, 0xe3, 0xe7, 0xe9, 0xc4, 0xfb, 0x3b,
+ 0x70, 0xc1, 0x27, 0x3b, 0x8d, 0xeb, 0xf7, 0x9c, 0x3c, 0xa7, 0x8b, 0xd9,
+ 0x5c, 0x30, 0xbc, 0x6f, 0xc1, 0x12, 0xa6, 0xa0, 0xe3, 0x46, 0xf4, 0x03,
+ 0x81, 0x5f, 0x71, 0xe6, 0x9f, 0xa0, 0x37, 0x6a, 0x1c, 0xd2, 0xa0, 0xb5,
+ 0x69, 0xf2, 0x57, 0x47, 0x63, 0x40, 0xc6, 0x40, 0x63, 0x2c, 0x41, 0xb7,
+ 0x17, 0xab, 0x0e, 0xd8, 0x6f, 0x06, 0x4c, 0xac, 0x3f, 0x5f, 0x50, 0x8f,
+ 0xbc, 0x70, 0xa7, 0x90, 0x44, 0x10, 0x2f, 0xb6, 0x01, 0xe6, 0xc4, 0x00,
+ 0x3b, 0x97, 0x1c, 0x52, 0x11, 0xe6, 0x61, 0x3a, 0xd2, 0x72, 0xba, 0x1d,
+ 0xa3, 0xb6, 0xd9, 0x26, 0x1b, 0x5e, 0xa7, 0x10, 0xa2, 0x3a, 0x59, 0x76,
+ 0x4f, 0xda, 0x4c, 0x2e, 0x24, 0x4d, 0x0f, 0x5b, 0xc7, 0x72, 0x7b, 0x43,
+ 0x6f, 0x1d, 0xdf, 0x27, 0x57, 0x24, 0x0b, 0x1c, 0xde, 0xaf, 0x21, 0x1d,
+ 0x4e, 0xa4, 0xc1, 0xa4, 0x1e, 0x02, 0x73, 0x99, 0x58, 0x5c, 0xd7, 0x2a,
+ 0x5a, 0xcf, 0x06, 0xb0, 0x57, 0xfe, 0xe5, 0x05, 0x2a, 0xa7, 0xb4, 0x08,
+ 0x7c, 0x2b, 0xde, 0xeb, 0x53, 0x84, 0xfd, 0x03, 0x16, 0xb4, 0x27, 0xf0,
+ 0xad, 0x1b, 0x7d, 0x29, 0x0d, 0xa8, 0x18, 0x38, 0xc0, 0x54, 0x95, 0x52,
+ 0x86, 0x2b, 0xc1, 0x91, 0x79, 0xc0, 0x06, 0x4e, 0x6b, 0xcb, 0x24, 0xe2,
+ 0xce, 0x7d, 0xc1, 0x06, 0x9b, 0x54, 0x94, 0xfe, 0x9c, 0xdd, 0xbe, 0x0e,
+ 0xed, 0x7c, 0x52, 0x04, 0xee, 0xce, 0x3b, 0xe3, 0x2c, 0x80, 0xf0, 0xf4,
+ 0x56, 0x87, 0x99, 0x70, 0xc0, 0xb1, 0x5c, 0xc9, 0x94, 0x5e, 0x70, 0x92,
+ 0xd8, 0x32, 0x74, 0x90, 0xe7, 0x29, 0x56, 0x14, 0x31, 0x72, 0x2f, 0xd3,
+ 0xe7, 0xba, 0x83, 0xac, 0xf2, 0xec, 0x11, 0x36, 0xfa, 0xb3, 0x8e, 0xfa,
+ 0x5a, 0x72, 0xc2, 0x30, 0x7c, 0xe4, 0x25, 0x66, 0x8e, 0x89, 0x88, 0xd9,
+ 0x1f, 0x57, 0x28, 0xe0, 0xd0, 0xc4, 0x6a, 0x97, 0x74, 0x17, 0xc0, 0x94,
+ 0x30, 0x45, 0xc7, 0x40, 0x24, 0x82, 0x20, 0xd0, 0xd9, 0x4b, 0xd0, 0xa0,
+ 0x78, 0x69, 0xf6, 0x2d, 0x85, 0x1e, 0x73, 0x60, 0xd3, 0xf3, 0x9b, 0x28,
+ 0xfa, 0x2e, 0x41, 0x32, 0x25, 0x8a, 0x7c, 0x9e, 0xa4, 0x33, 0x4a, 0xe6,
+ 0x29, 0x30, 0x63, 0x2b, 0x24, 0xe9, 0xe4, 0x57, 0x4e, 0x6d, 0x2d, 0xbb,
+ 0x33, 0x25, 0xd2, 0x00, 0x74, 0x3c, 0x06, 0x9b, 0x5a, 0x30, 0x36, 0x51,
+ 0xaa, 0x51, 0x43, 0x75, 0xc2, 0x74, 0x08, 0x23, 0x75, 0x07, 0xf9, 0xaf,
+ 0xd9, 0xf3, 0xbb, 0xda, 0xcb, 0x0f, 0xca, 0x7f, 0xcd, 0xec, 0x9b, 0xfc,
+ 0x39, 0x9b, 0xd4, 0xa4, 0x74, 0xc5, 0xee, 0x08, 0xf4, 0xa6, 0x97, 0x5d,
+ 0x28, 0x1b, 0xb3, 0x1f, 0x64, 0xad, 0x44, 0x4a, 0x30, 0xc8, 0x54, 0xdb,
+ 0x94, 0x28, 0x32, 0xc4, 0xa8, 0xbc, 0x99, 0x63, 0x18, 0x41, 0x10, 0xac,
+ 0x99, 0x08, 0x70, 0x73, 0x19, 0x57, 0x61, 0x29, 0x10, 0xfa, 0x5b, 0x4a,
+ 0xe6, 0x95, 0x57, 0xc9, 0x36, 0xa5, 0xc4, 0x57, 0x6c, 0x42, 0x9d, 0x18,
+ 0x5b, 0x15, 0xa9, 0x6b, 0x4c, 0x0d, 0x6c, 0x6c, 0xe4, 0xa8, 0xed, 0xc1,
+ 0xa7, 0x11, 0x2a, 0xb7, 0x3a, 0x48, 0x52, 0x0e, 0x81, 0xd6, 0x31, 0x85,
+ 0x4a, 0x01, 0xe2, 0x30, 0x95, 0x6d, 0xc3, 0x42, 0x5d, 0xe9, 0x8b, 0x9e,
+ 0x91, 0x4b, 0x26, 0xac, 0xc5, 0x20, 0xb1, 0x61, 0x89, 0x0e, 0xf0, 0x0b,
+ 0xf9, 0x84, 0xcf, 0x03, 0x7e, 0xa1, 0x04, 0x3d, 0x4d, 0xae, 0x60, 0xdb,
+ 0xef, 0x05, 0x7e, 0xa1, 0xf0, 0x35, 0x04, 0xa3, 0xd1, 0xa0, 0x89, 0x3a,
+ 0xb9, 0x88, 0xa5, 0xe3, 0x49, 0x07, 0x93, 0x71, 0x22, 0x4b, 0xc2, 0x5f,
+ 0xb8, 0x60, 0x8d, 0xaa, 0x5c, 0x4d, 0xe2, 0x0d, 0x89, 0x66, 0x2d, 0xb6,
+ 0x91, 0x2e, 0x34, 0x28, 0x79, 0xbd, 0x94, 0x3d, 0xf2, 0xab, 0x1d, 0x9d,
+ 0x27, 0x17, 0x8d, 0xec, 0xf4, 0x46, 0x9f, 0x21, 0x8e, 0x6c, 0x32, 0xf6,
+ 0x4c, 0xce, 0xa6, 0x0b, 0x02, 0xfe, 0x83, 0x8e, 0xeb, 0xa5, 0x08, 0x1f,
+ 0x4f, 0xe2, 0xd7, 0x70, 0xe6, 0xf1, 0x2b, 0xaa, 0x06, 0x15, 0x1e, 0x6c,
+ 0xd5, 0x69, 0x01, 0xee, 0xc5, 0xe9, 0x06, 0xc1, 0x76, 0x47, 0xa3, 0xa2,
+ 0x94, 0xa6, 0x43, 0x58, 0xb8, 0x06, 0x87, 0x48, 0x60, 0x30, 0x95, 0x69,
+ 0xfe, 0xd0, 0xac, 0x2d, 0xa2, 0x85, 0x69, 0xdb, 0xde, 0x10, 0xd8, 0x78,
+ 0xd2, 0x68, 0xd4, 0x6a, 0xf3, 0x03, 0xc7, 0x69, 0x45, 0xed, 0x5a, 0x79,
+ 0x25, 0x51, 0x74, 0x90, 0x9b, 0x86, 0x37, 0x1a, 0xc6, 0xf5, 0x2b, 0x82,
+ 0x45, 0x99, 0x34, 0x7a, 0x45, 0xf0, 0x2b, 0xde, 0x9a, 0xce, 0x38, 0xaa,
+ 0xa6, 0xca, 0xa1, 0xa2, 0x12, 0x20, 0xbd, 0x2c, 0x30, 0xde, 0x4c, 0xff,
+ 0x24, 0xd6, 0x8b, 0x5b, 0x2f, 0x15, 0x01, 0xbe, 0xbf, 0x81, 0x75, 0x90,
+ 0xbe, 0xb6, 0xad, 0xce, 0xa5, 0x88, 0xc6, 0xc1, 0x5f, 0x2b, 0xb4, 0x41,
+ 0x8e, 0x20, 0x6a, 0x55, 0x5a, 0xa9, 0x47, 0x5a, 0x47, 0x9b, 0xb2, 0x71,
+ 0x32, 0xc6, 0xc9, 0x58, 0x0c, 0xb9, 0xb5, 0xa0, 0x69, 0xf0, 0xd4, 0x75,
+ 0xd5, 0x5c, 0x8a, 0xfc, 0xfd, 0x5d, 0x96, 0x8d, 0xe9, 0xf1, 0x1f, 0xf7,
+ 0x80, 0x8c, 0xb2, 0xfb, 0x4f, 0xd7, 0xee, 0x37, 0x94, 0xed, 0xb8, 0x6a,
+ 0x0c, 0xef, 0x8e, 0x9b, 0xaa, 0xf0, 0xb3, 0xa6, 0x25, 0x6a, 0xdf, 0xbc,
+ 0xeb, 0x5d, 0xc4, 0x87, 0x2b, 0xae, 0x37, 0x83, 0x0b, 0x48, 0xfb, 0xdd,
+ 0x56, 0x7b, 0x45, 0xd1, 0x05, 0xa2, 0x0b, 0x9d, 0x0e, 0xf1, 0x34, 0xbc,
+ 0x5e, 0xc9, 0xe8, 0x52, 0xe0, 0xc0, 0xa7, 0xa4, 0x4c, 0xc8, 0x6d, 0xc2,
+ 0xa2, 0x20, 0xce, 0xb0, 0xe4, 0x32, 0x11, 0x05, 0x3e, 0xe9, 0xa2, 0x9d,
+ 0x0e, 0xb0, 0x6e, 0xa6, 0x84, 0x8a, 0x73, 0x6f, 0x1b, 0x68, 0x1e, 0xfd,
+ 0xa6, 0xe6, 0x4c, 0x48, 0xb2, 0x0a, 0x9b, 0x19, 0x94, 0xcf, 0x66, 0x8f,
+ 0x56, 0xcb, 0x9b, 0x7e, 0x20, 0x66, 0x6c, 0x66, 0x27, 0xde, 0xf2, 0x11,
+ 0x04, 0x22, 0x44, 0xb6, 0x9c, 0x1e, 0xa8, 0xc0, 0x75, 0x7b, 0x6b, 0xcb,
+ 0xf6, 0x5f, 0xec, 0x68, 0xba, 0x28, 0xa4, 0xb1, 0xb4, 0xf7, 0x22, 0xc1,
+ 0x84, 0x53, 0xa2, 0xba, 0xe9, 0xb7, 0x92, 0x64, 0xcc, 0xad, 0xdb, 0x31,
+ 0x73, 0x9c, 0x52, 0x3b, 0xdb, 0x44, 0xd6, 0x36, 0xe1, 0x28, 0x08, 0x37,
+ 0xf4, 0xa4, 0x0e, 0x8c, 0x70, 0x74, 0x47, 0xb4, 0xc6, 0x6a, 0xaf, 0xf1,
+ 0x4e, 0x18, 0x97, 0x3e, 0xe3, 0xf6, 0xc9, 0xca, 0x00, 0xa2, 0x6f, 0x6f,
+ 0x6c, 0xc6, 0x09, 0xbb, 0x32, 0xf1, 0xd7, 0x0c, 0x57, 0xc9, 0x2b, 0x97,
+ 0x50, 0x73, 0xb8, 0x26, 0xa3, 0xa3, 0xe5, 0xe2, 0x7f, 0x38, 0x70, 0x99,
+ 0x70, 0x48, 0xf3, 0x8a, 0xc6, 0xa5, 0x2e, 0x5e, 0xdc, 0xde, 0xd1, 0xd7,
+ 0x56, 0xa8, 0xdd, 0x63, 0x52, 0x69, 0x09, 0x82, 0xf9, 0x5e, 0x74, 0x88,
+ 0x0d, 0x53, 0x6a, 0x60, 0xc1, 0x36, 0x61, 0xb0, 0x10, 0xa9, 0xd9, 0xdd,
+ 0xd1, 0x74, 0x05, 0xeb, 0x6c, 0xe5, 0x48, 0xb8, 0xdd, 0xf2, 0x52, 0xd8,
+ 0x00, 0x42, 0xd1, 0xd4, 0xea, 0xed, 0x78, 0xa7, 0x6e, 0x8e, 0x5e, 0x8f,
+ 0x96, 0x5b, 0xba, 0x3b, 0xf2, 0x85, 0xf2, 0x88, 0xec, 0x96, 0x8b, 0xf5,
+ 0x69, 0xb0, 0x31, 0xfd, 0x65, 0xec, 0x0c, 0x1e, 0x1b, 0xb0, 0xc5, 0x15,
+ 0xd5, 0x9e, 0x66, 0x67, 0x45, 0xf7, 0x4a, 0x61, 0x5f, 0x92, 0x98, 0xba,
+ 0x8f, 0xb4, 0xf5, 0x01, 0x6c, 0x58, 0x82, 0x0c, 0x9b, 0x32, 0x66, 0x0c,
+ 0x96, 0x29, 0x0a, 0xcf, 0x71, 0x5a, 0x4b, 0x9d, 0xb9, 0x7a, 0xc8, 0xa8,
+ 0x8d, 0xc9, 0x60, 0x49, 0xff, 0x67, 0x07, 0xa7, 0xd5, 0xc5, 0xd1, 0xb7,
+ 0xc6, 0x76, 0x28, 0xed, 0x2b, 0x90, 0xb1, 0x6f, 0x73, 0xbf, 0xc5, 0x1c,
+ 0xa7, 0x3a, 0x51, 0x8a, 0xa8, 0xb0, 0xb6, 0x04, 0x16, 0x78, 0x9f, 0x6f,
+ 0x0c, 0x2a, 0x4c, 0x05, 0xb5, 0xa3, 0x80, 0x7b, 0xd5, 0x15, 0x2a, 0xe2,
+ 0xae, 0xbd, 0x82, 0xf5, 0x86, 0x80, 0xfc, 0xf8, 0x21, 0x4a, 0xf8, 0xe8,
+ 0x18, 0xc3, 0xf2, 0x51, 0x4c, 0xcf, 0x24, 0xcb, 0x5e, 0xa2, 0x3c, 0xac,
+ 0x0c, 0xb4, 0xcb, 0x02, 0x13, 0x6e, 0x6d, 0xb7, 0x86, 0x18, 0xe8, 0x94,
+ 0xc9, 0x4c, 0xfb, 0x54, 0xce, 0xc8, 0x7f, 0x41, 0x68, 0x2d, 0xdc, 0xeb,
+ 0x85, 0x52, 0x83, 0xb5, 0xc1, 0x0d, 0x55, 0x1a, 0x0e, 0xd0, 0x27, 0xd9,
+ 0xd6, 0xf1, 0x09, 0xba, 0x07, 0x4f, 0x67, 0x51, 0x4a, 0xb9, 0x61, 0xef,
+ 0x32, 0x03, 0xd6, 0x98, 0xf7, 0xa8, 0x3d, 0xbb, 0xd5, 0x1f, 0x64, 0x36,
+ 0x4c, 0x3e, 0xb2, 0xe9, 0xa8, 0x5f, 0x04, 0x5b, 0xc9, 0x34, 0x30, 0x99,
+ 0xfa, 0x51, 0xbb, 0xaf, 0x80, 0x96, 0x3d, 0xca, 0x4a, 0xdd, 0x33, 0xef,
+ 0x68, 0x9c, 0xc6, 0x8c, 0x14, 0x57, 0x49, 0x1e, 0xdc, 0x71, 0x4a, 0xc8,
+ 0x07, 0xb9, 0x69, 0x33, 0x90, 0xcc, 0x30, 0x0d, 0x06, 0xff, 0x45, 0xfb,
+ 0xc7, 0x05, 0x29, 0x89, 0xe7, 0xdd, 0x97, 0x0e, 0x71, 0xa1, 0x62, 0x43,
+ 0x12, 0xee, 0xd7, 0xc9, 0x0d, 0xe1, 0x49, 0x9b, 0x69, 0xcd, 0xbe, 0x5c,
+ 0x80, 0x01, 0xe6, 0x5d, 0x73, 0x43, 0x9f, 0xb8, 0x51, 0xa3, 0x32, 0x9b,
+ 0xd7, 0xac, 0xf1, 0x77, 0x25, 0x58, 0xb9, 0x0a, 0x84, 0xc9, 0xb3, 0xcd,
+ 0xe0, 0x5e, 0xdd, 0x44, 0xf1, 0xa4, 0x2f, 0x97, 0x44, 0x9b, 0x4d, 0x8c,
+ 0x12, 0x6e, 0xa1, 0x66, 0x28, 0xd7, 0x73, 0x08, 0x53, 0xab, 0x1f, 0xea,
+ 0x05, 0xd2, 0xac, 0xb7, 0x5c, 0x93, 0x0a, 0x1f, 0x09, 0xb1, 0x50, 0x8d,
+ 0x74, 0xf4, 0x0f, 0x10, 0x42, 0x98, 0xb2, 0x2b, 0xe0, 0xdc, 0x01, 0xc2,
+ 0xc2, 0x56, 0xcf, 0xe2, 0xa8, 0xee, 0x47, 0x97, 0xec, 0x39, 0xc6, 0x15,
+ 0xa6, 0xce, 0xe2, 0x14, 0x32, 0xe5, 0x62, 0x5a, 0x0c, 0x13, 0xbe, 0xb6,
+ 0xdc, 0x68, 0xcf, 0x57, 0x4b, 0x26, 0xdc, 0xe0, 0x80, 0x94, 0x76, 0xde,
+ 0x22, 0xeb, 0xa8, 0x5a, 0xba, 0x33, 0xf0, 0x37, 0x67, 0x78, 0xb3, 0x4f,
+ 0x9a, 0x1e, 0x3b, 0x6c, 0xa8, 0x58, 0x05, 0x87, 0x39, 0x03, 0x05, 0x1a,
+ 0xc5, 0xa4, 0x6b, 0x32, 0x37, 0x58, 0x66, 0xd9, 0xd2, 0x9d, 0x6b, 0x7c,
+ 0xbc, 0x78, 0x74, 0x47, 0x5c, 0xc6, 0x0e, 0xbd, 0x2a, 0x4b, 0x76, 0x16,
+ 0x15, 0xe0, 0xbf, 0xe6, 0x67, 0x70, 0x60, 0xea, 0x23, 0xee, 0xe6, 0xc9,
+ 0xf6, 0xe8, 0xd8, 0x16, 0xa5, 0xb1, 0x71, 0x91, 0xf1, 0xb0, 0x18, 0xdf,
+ 0x34, 0xb4, 0xa0, 0xc7, 0x4d, 0x07, 0x71, 0xeb, 0xd1, 0xb0, 0xe2, 0xf3,
+ 0x86, 0xa1, 0x8a, 0xdd, 0xbb, 0xac, 0x45, 0xbf, 0xcc, 0xe1, 0xa8, 0x7f,
+ 0xa0, 0x6d, 0x22, 0x64, 0x64, 0xbc, 0x97, 0x5d, 0x3b, 0x16, 0x3b, 0x1f,
+ 0x1b, 0xe5, 0x11, 0x1e, 0xfa, 0x05, 0x69, 0xa3, 0xe5, 0xc6, 0x20, 0x3a,
+ 0xce, 0x25, 0xe1, 0x5d, 0x10, 0x85, 0x18, 0x0e, 0x22, 0x77, 0x71, 0x24,
+ 0x02, 0x57, 0xa3, 0x92, 0x62, 0xc0, 0x0c, 0x57, 0x83, 0x5a, 0xc0, 0xc8,
+ 0x36, 0xa7, 0x71, 0x78, 0x10, 0x01, 0x46, 0xe8, 0x2f, 0xe9, 0xce, 0xf8,
+ 0xa9, 0x26, 0xb0, 0x91, 0x92, 0x4c, 0xc7, 0xcd, 0x22, 0x68, 0x6b, 0x15,
+ 0x17, 0x0e, 0xd7, 0x73, 0x43, 0xbb, 0x8b, 0x0c, 0x7c, 0x43, 0x58, 0x89,
+ 0x14, 0x50, 0x32, 0x0c, 0x6a, 0xb0, 0x7d, 0x17, 0x46, 0xab, 0x04, 0x06,
+ 0x9d, 0xb9, 0x06, 0x9b, 0x8a, 0x89, 0x01, 0x06, 0xe4, 0x70, 0x0b, 0x4e,
+ 0x45, 0xc5, 0xf3, 0xb4, 0xd1, 0xb4, 0xab, 0xad, 0xe1, 0x76, 0x76, 0xc2,
+ 0xf7, 0x49, 0x33, 0xeb, 0x6b, 0x4c, 0x89, 0xa4, 0x5c, 0x73, 0x6b, 0x4c,
+ 0x22, 0x5d, 0x28, 0x61, 0x08, 0xc3, 0x71, 0xdb, 0x1d, 0x85, 0x38, 0x8d,
+ 0xf1, 0x2e, 0x50, 0x13, 0x8a, 0xac, 0x84, 0x1d, 0x83, 0xdd, 0xca, 0x11,
+ 0x06, 0x41, 0xab, 0x09, 0x50, 0x7b, 0xa8, 0xd8, 0xd3, 0xed, 0xc0, 0x63,
+ 0x2c, 0x8f, 0x8d, 0x36, 0xa9, 0x2c, 0xba, 0xcb, 0x35, 0xbc, 0x7b, 0x6c,
+ 0xb4, 0x45, 0xed, 0xf7, 0xb9, 0x87, 0x76, 0x69, 0x2b, 0xe9, 0x42, 0xc1,
+ 0x7b, 0xc7, 0xdc, 0xc0, 0x8f, 0x6f, 0x99, 0x72, 0x3a, 0x1f, 0xb4, 0xd2,
+ 0x29, 0xae, 0x33, 0x43, 0x2e, 0x8b, 0xaa, 0x9a, 0x87, 0xc2, 0xf7, 0x95,
+ 0xb4, 0xad, 0x09, 0xaa, 0x10, 0x0a, 0xfa, 0x29, 0x24, 0x98, 0xb0, 0x5f,
+ 0xaf, 0x7d, 0x7f, 0x4d, 0x41, 0xa8, 0xcf, 0x61, 0x51, 0x11, 0x20, 0x22,
+ 0x96, 0x7a, 0x8f, 0x86, 0x08, 0x5c, 0x54, 0x26, 0xb1, 0x86, 0x2a, 0xc7,
+ 0xc6, 0x29, 0xdc, 0x5e, 0x9a, 0x12, 0xd7, 0xe6, 0xb7, 0x82, 0x12, 0x7d,
+ 0xeb, 0x4e, 0x77, 0x3d, 0x70, 0xbb, 0xdb, 0x82, 0x79, 0x95, 0xbb, 0x4e,
+ 0xd7, 0x5b, 0xef, 0x37, 0x5f, 0xf0, 0x60, 0x67, 0xa9, 0xe5, 0xf7, 0x9d,
+ 0xae, 0xbb, 0x29, 0x81, 0x25, 0x02, 0x22, 0x6f, 0x4f, 0xb8, 0xbd, 0x62,
+ 0x6d, 0x1a, 0xdc, 0x70, 0x67, 0x76, 0x7b, 0xb7, 0x3b, 0x6f, 0xf3, 0x2c,
+ 0x85, 0xfb, 0x35, 0x56, 0x01, 0x4c, 0x7b, 0x00, 0x06, 0xf1, 0x44, 0x52,
+ 0xb2, 0x44, 0x8d, 0xe4, 0xf0, 0x55, 0x31, 0x82, 0xbd, 0xa3, 0x40, 0x01,
+ 0xb3, 0x5f, 0xbf, 0x80, 0x3c, 0x76, 0x94, 0x39, 0x6b, 0x76, 0x21, 0x13,
+ 0x06, 0xad, 0x72, 0x9a, 0xcd, 0x35, 0x1f, 0xb9, 0x1f, 0xa5, 0x02, 0x18,
+ 0x01, 0xb2, 0x88, 0x8f, 0x62, 0x11, 0xfb, 0xd5, 0x03, 0xa6, 0x7e, 0x98,
+ 0xbb, 0x7e, 0x5d, 0x61, 0xf8, 0x7c, 0x1c, 0xad, 0xb7, 0x06, 0x7e, 0xb4,
+ 0xb5, 0x4d, 0x6b, 0x7d, 0xb4, 0xf5, 0x74, 0x69, 0x06, 0x8b, 0xbd, 0x3a,
+ 0x77, 0x49, 0x5d, 0x89, 0x56, 0x16, 0xca, 0xf7, 0x61, 0x03, 0xab, 0xb6,
+ 0xa6, 0x68, 0x72, 0x8e, 0x0e, 0x16, 0xd0, 0xc4, 0x38, 0xf0, 0x3e, 0x21,
+ 0x50, 0x5e, 0xdb, 0xc5, 0xcf, 0xf0, 0x37, 0xd3, 0x2a, 0x8d, 0x09, 0xb5,
+ 0x25, 0x1c, 0x63, 0x60, 0x14, 0x74, 0x2b, 0x7b, 0x28, 0x9e, 0x80, 0x2f,
+ 0x09, 0xd4, 0x8b, 0xc0, 0x9e, 0x23, 0xdf, 0x86, 0x17, 0xa8, 0xc9, 0x59,
+ 0x75, 0x09, 0x12, 0x61, 0xe0, 0xd9, 0x6b, 0xf6, 0x1d, 0x2e, 0xeb, 0x47,
+ 0xd1, 0xcd, 0x62, 0x3e, 0xa1, 0x57, 0x19, 0x56, 0x9b, 0x1f, 0xa9, 0x8c,
+ 0x2f, 0x79, 0x09, 0x3c, 0x92, 0x60, 0xcd, 0x72, 0x7d, 0x1a, 0xe5, 0x22,
+ 0xdc, 0x18, 0x4f, 0xb2, 0x6a, 0xb4, 0x2f, 0xb2, 0x3c, 0xab, 0x2e, 0xd1,
+ 0x3f, 0x36, 0xc3, 0x6a, 0xad, 0x0b, 0x2e, 0xd6, 0xf1, 0x12, 0xaa, 0x44,
+ 0xfa, 0x24, 0x11, 0x90, 0x2f, 0x9a, 0x4f, 0xc0, 0x91, 0x98, 0x6e, 0x05,
+ 0xae, 0x92, 0x7f, 0xc9, 0xdd, 0xbc, 0xed, 0x17, 0x06, 0xf3, 0x0f, 0x32,
+ 0xde, 0x2d, 0x44, 0x0a, 0x87, 0x83, 0x60, 0xa8, 0x04, 0x3c, 0x7a, 0xe4,
+ 0x1d, 0x16, 0x2c, 0xf0, 0x8c, 0x13, 0x1b, 0xce, 0x09, 0x56, 0x1c, 0x53,
+ 0xc0, 0xd6, 0xfd, 0x72, 0xe9, 0x93, 0x33, 0xe0, 0xd3, 0x5b, 0xa8, 0xd4,
+ 0xa0, 0x8b, 0xaf, 0x24, 0xd4, 0x1b, 0xf8, 0xd9, 0x8f, 0x98, 0x11, 0xfc,
+ 0xa5, 0xf9, 0xf1, 0x06, 0xf5, 0x8c, 0x4a, 0xf3, 0xf1, 0x2d, 0x0a, 0xab,
+ 0x39, 0xe7, 0x4f, 0xd0, 0xdf, 0xc5, 0x19, 0x7d, 0xf5, 0x5b, 0x62, 0x17,
+ 0xb6, 0xda, 0x65, 0xa9, 0x47, 0xf3, 0x18, 0x45, 0x12, 0x02, 0xce, 0x37,
+ 0x48, 0x1a, 0xe1, 0xb2, 0x52, 0x6a, 0xe1, 0xd5, 0x85, 0x73, 0xda, 0x28,
+ 0xb9, 0x21, 0xcc, 0x2e, 0x29, 0x5f, 0xa2, 0x18, 0x29, 0xef, 0x0f, 0x2e,
+ 0xc8, 0x42, 0x49, 0x55, 0x01, 0x70, 0x10, 0x6e, 0xe5, 0x22, 0xed, 0xb9,
+ 0xe0, 0x0c, 0x2a, 0xb0, 0xb1, 0x2f, 0x79, 0x66, 0x06, 0xcf, 0x33, 0x19,
+ 0x43, 0x40, 0x45, 0x23, 0x04, 0xfc, 0xea, 0xc4, 0x3b, 0x25, 0xcf, 0x8e,
+ 0xb3, 0xf0, 0xcf, 0x92, 0x53, 0xe9, 0xce, 0x1f, 0xbf, 0x88, 0xd6, 0xe8,
+ 0xc3, 0x7f, 0x36, 0xa8, 0x30, 0x6b, 0xf2, 0xc3, 0x69, 0xfa, 0xd5, 0x37,
+ 0x88, 0x87, 0xd2, 0x43, 0x6b, 0x7d, 0x6d, 0xb5, 0x43, 0xb3, 0x68, 0x65,
+ 0xae, 0x2e, 0xf2, 0xac, 0x55, 0x2d, 0x43, 0x0b, 0x91, 0x54, 0x1d, 0x8a,
+ 0x7f, 0x7e, 0xc5, 0xff, 0xe8, 0xc8, 0x30, 0xa1, 0xf6, 0x24, 0xd1, 0xf1,
+ 0xab, 0x03, 0x3c, 0xdb, 0x33, 0x81, 0xac, 0x6d, 0x81, 0xbd, 0xb8, 0x38,
+ 0xde, 0xb8, 0x81, 0xa1, 0x5d, 0x93, 0x19, 0x55, 0x61, 0x65, 0x0c, 0xa8,
+ 0x46, 0x1f, 0x04, 0x8e, 0x62, 0x4f, 0xb3, 0x1a, 0xcf, 0x03, 0xf9, 0x71,
+ 0xf4, 0x12, 0x4e, 0x98, 0x94, 0x81, 0xb5, 0x6f, 0xd6, 0x02, 0x05, 0xf5,
+ 0x6b, 0xfb, 0x6b, 0x16, 0x5d, 0xa9, 0x32, 0x81, 0x9a, 0x68, 0xed, 0x2f,
+ 0x88, 0xfd, 0x86, 0x1d, 0x31, 0x79, 0x4e, 0xe1, 0x0a, 0xec, 0x91, 0x23,
+ 0xc8, 0xa5, 0xbc, 0xe8, 0x00, 0x3e, 0x06, 0x46, 0x96, 0x60, 0x19, 0xd8,
+ 0x20, 0x6a, 0x20, 0x5d, 0x70, 0x27, 0xbb, 0x94, 0xf2, 0xbc, 0x1a, 0x5f,
+ 0xae, 0xbe, 0xa2, 0x50, 0xfd, 0xec, 0x8d, 0xc4, 0x62, 0xb1, 0x2d, 0xc3,
+ 0x8d, 0x13, 0x42, 0xe3, 0x45, 0xf1, 0x6a, 0x28, 0xa3, 0x78, 0x34, 0xa2,
+ 0xc6, 0x0f, 0x24, 0x5b, 0x90, 0x3b, 0x5e, 0x78, 0x4d, 0x29, 0x18, 0xe7,
+ 0x1b, 0xb7, 0x01, 0x39, 0x13, 0x7e, 0xf7, 0x04, 0xec, 0x30, 0x72, 0x82,
+ 0xa0, 0x49, 0xbd, 0x0c, 0xa6, 0xce, 0x3d, 0xee, 0x4f, 0x87, 0x7f, 0xed,
+ 0xce, 0xd2, 0x43, 0xc9, 0xd1, 0xbb, 0x2f, 0xe9, 0x5a, 0x4a, 0xb5, 0xbb,
+ 0xbc, 0xef, 0x02, 0xbd, 0xde, 0x81, 0x4e, 0x31, 0x9c, 0x49, 0x3f, 0x35,
+ 0x69, 0x50, 0x93, 0x04, 0x08, 0xf7, 0x46, 0x4a, 0x91, 0xa7, 0xa9, 0x6a,
+ 0x83, 0xe9, 0xcc, 0x93, 0xf0, 0x53, 0xc6, 0x6d, 0x63, 0xfc, 0xc2, 0x18,
+ 0xf6, 0x85, 0xcf, 0x39, 0x17, 0x83, 0x4c, 0x00, 0x0f, 0x99, 0xab, 0x33,
+ 0x92, 0xe1, 0x58, 0x83, 0x7e, 0x84, 0x65, 0xd8, 0x4e, 0x4e, 0x12, 0x64,
+ 0x43, 0x91, 0x5f, 0xe2, 0x40, 0xb2, 0x12, 0x9f, 0x80, 0x19, 0x49, 0xd4,
+ 0xda, 0x48, 0xad, 0x8b, 0xc5, 0xde, 0x0e, 0xd7, 0x2b, 0xf7, 0xdc, 0xa4,
+ 0x1d, 0x67, 0x00, 0xc9, 0x76, 0xab, 0x93, 0x9d, 0xdd, 0x67, 0xcf, 0x82,
+ 0x21, 0x5e, 0x6e, 0x35, 0x04, 0x27, 0x8c, 0xdb, 0xe4, 0xb5, 0xbc, 0x62,
+ 0xa7, 0x11, 0xdd, 0x80, 0x4a, 0x63, 0x9b, 0xd8, 0x75, 0x3a, 0xc1, 0x59,
+ 0x7d, 0x15, 0x81, 0x78, 0xf8, 0x8c, 0x34, 0x42, 0x16, 0xfe, 0xe4, 0xf0,
+ 0x42, 0x91, 0x3b, 0xcb, 0x3a, 0x9c, 0x49, 0x8a, 0x6f, 0xc1, 0x90, 0x4f,
+ 0x84, 0xe5, 0x3c, 0x51, 0x68, 0x7b, 0xe6, 0xf7, 0x69, 0x3d, 0x22, 0x38,
+ 0x42, 0x46, 0x42, 0xe0, 0x7d, 0x5d, 0xeb, 0x40, 0xb5, 0x5f, 0x8b, 0xb4,
+ 0xc0, 0x6e, 0x98, 0x9a, 0x96, 0x8e, 0x78, 0x53, 0xb3, 0x0f, 0xad, 0x76,
+ 0xab, 0x0c, 0xfe, 0x97, 0x23, 0x96, 0x72, 0x76, 0x41, 0x78, 0x87, 0xad,
+ 0xe1, 0xa8, 0x89, 0xc5, 0x45, 0x5a, 0xfb, 0xa0, 0xc0, 0x0e, 0x5e, 0xdc,
+ 0x92, 0xc1, 0x43, 0x90, 0x78, 0x82, 0x67, 0x1c, 0xed, 0x9b, 0x9e, 0xc8,
+ 0xd9, 0x44, 0x99, 0x08, 0x5a, 0x60, 0xd7, 0x18, 0x4b, 0xf9, 0x86, 0x8e,
+ 0x63, 0x5f, 0xf6, 0x5e, 0xa0, 0xbc, 0xbf, 0xf1, 0x72, 0x34, 0x38, 0xc7,
+ 0x80, 0xe6, 0xa4, 0x6e, 0xdd, 0x75, 0x9d, 0x8c, 0x2e, 0xad, 0xbe, 0x43,
+ 0x20, 0x83, 0xd4, 0xb9, 0x57, 0x42, 0xe8, 0xbc, 0xc1, 0x8c, 0xf4, 0xe4,
+ 0xd5, 0x60, 0x13, 0xd2, 0xb7, 0x19, 0x14, 0x61, 0x7d, 0x04, 0xd0, 0x11,
+ 0x97, 0x12, 0xda, 0x89, 0x4a, 0xb8, 0x36, 0x32, 0x30, 0x78, 0xda, 0x13,
+ 0xd4, 0xf8, 0xae, 0xb3, 0x4f, 0xfe, 0xd9, 0xdb, 0xe2, 0x22, 0xdb, 0x75,
+ 0x96, 0xf7, 0xd8, 0x36, 0xaf, 0x75, 0x25, 0xba, 0x7c, 0xea, 0x30, 0xdc,
+ 0xc1, 0x2d, 0xc6, 0x4f, 0xb5, 0x9d, 0x28, 0x88, 0xb2, 0x2e, 0x8a, 0x94,
+ 0x57, 0x49, 0x9d, 0x3c, 0x75, 0x57, 0x31, 0x65, 0xb0, 0x2e, 0x17, 0xd8,
+ 0xec, 0x88, 0xe3, 0x11, 0x34, 0x53, 0x58, 0x9c, 0xf7, 0x9b, 0x5f, 0x8c,
+ 0xd5, 0xbb, 0x0b, 0x3a, 0x2f, 0xda, 0xe5, 0x59, 0x3a, 0x2b, 0x4a, 0x45,
+ 0x76, 0x80, 0x75, 0x19, 0x38, 0x09, 0xbf, 0x86, 0x9c, 0xbd, 0xfe, 0x14,
+ 0xdc, 0xab, 0xb2, 0xdf, 0x38, 0xee, 0x2d, 0x80, 0x60, 0x9a, 0x9c, 0x43,
+ 0x51, 0x35, 0x54, 0x2a, 0xa3, 0xe7, 0x40, 0x50, 0x39, 0xeb, 0xbf, 0x44,
+ 0x6f, 0x6b, 0x95, 0xdf, 0xc0, 0xd4, 0x80, 0x27, 0xb2, 0xcc, 0x44, 0x4b,
+ 0xb1, 0x4c, 0x2f, 0x16, 0x28, 0x87, 0x19, 0xdf, 0x19, 0xec, 0xc6, 0x4b,
+ 0x3e, 0x7e, 0x91, 0xaa, 0xd9, 0x5c, 0x6b, 0x8a, 0x3d, 0x0c, 0x0b, 0x78,
+ 0x6b, 0x23, 0x32, 0x8d, 0x63, 0x17, 0xc3, 0x5f, 0x29, 0xc7, 0xa9, 0x90,
+ 0x8f, 0xe5, 0xc8, 0xd9, 0xd8, 0xed, 0x13, 0x4d, 0xc7, 0x85, 0x27, 0x1f,
+ 0xea, 0x78, 0x3c, 0xcb, 0xb8, 0xf9, 0x12, 0x0a, 0x91, 0xbf, 0x38, 0x89,
+ 0xd0, 0xa4, 0xcb, 0xd3, 0xd7, 0x53, 0xa2, 0xf0, 0xfb, 0xbc, 0xb8, 0xce,
+ 0xd5, 0x96, 0x10, 0x98, 0x1a, 0x72, 0xa0, 0x7b, 0x3a, 0x02, 0x5a, 0x27,
+ 0xfd, 0x88, 0x3e, 0x68, 0x2c, 0x1d, 0x46, 0x28, 0x4a, 0x0e, 0x5f, 0x47,
+ 0x20, 0x9a, 0x15, 0x87, 0x76, 0x98, 0xe5, 0x93, 0x8d, 0xcd, 0xdd, 0xac,
+ 0x18, 0x7d, 0xbe, 0xad, 0xf7, 0x01, 0x97, 0xeb, 0xd4, 0x98, 0xb9, 0xf4,
+ 0x17, 0x98, 0x42, 0x36, 0x13, 0xde, 0xd5, 0x74, 0x68, 0xf4, 0xc5, 0x7c,
+ 0x5a, 0x03, 0x36, 0x89, 0xdb, 0xbc, 0x26, 0x77, 0x34, 0x00, 0x6c, 0x6d,
+ 0xd1, 0xe8, 0x4b, 0xcc, 0x34, 0xc3, 0xeb, 0x80, 0xf1, 0x64, 0x92, 0x17,
+ 0x86, 0x57, 0xa0, 0x1d, 0x52, 0x26, 0xc0, 0x19, 0x7f, 0x9d, 0x5f, 0x28,
+ 0xab, 0xf5, 0x1b, 0xe9, 0xce, 0x17, 0xb5, 0x87, 0x60, 0x2f, 0x32, 0xf6,
+ 0x45, 0x24, 0x2b, 0xf9, 0xea, 0x9b, 0xc6, 0x58, 0x01, 0x39, 0xbb, 0x29,
+ 0x4d, 0xe8, 0x46, 0x17, 0x59, 0xe7, 0xe7, 0xf3, 0xf7, 0x53, 0xae, 0xbb,
+ 0x81, 0xdf, 0xaa, 0x2e, 0x8b, 0x54, 0x8e, 0x2d, 0xa7, 0xd0, 0x83, 0x65,
+ 0x0e, 0x55, 0x18, 0x35, 0x98, 0xf7, 0xaa, 0x7b, 0xc9, 0x24, 0xb8, 0xff,
+ 0xb3, 0xb8, 0xcc, 0xf1, 0x1f, 0x38, 0x3c, 0x8e, 0xfe, 0xd5, 0x76, 0xb0,
+ 0xe2, 0x6d, 0x73, 0xf9, 0x51, 0xd1, 0x52, 0x51, 0xd2, 0x70, 0xdb, 0x76,
+ 0x97, 0x71, 0x35, 0x22, 0x2d, 0x03, 0xc2, 0x42, 0x8e, 0x02, 0x4d, 0xef,
+ 0x28, 0xb9, 0x83, 0x1a, 0x5b, 0x3b, 0x2f, 0x33, 0xec, 0x4a, 0x90, 0xe3,
+ 0x65, 0x86, 0xfd, 0x53, 0xd4, 0x39, 0x60, 0xa0, 0x74, 0x7f, 0x78, 0x0f,
+ 0x53, 0x22, 0x6e, 0xbe, 0xda, 0xbf, 0x5c, 0x5c, 0x50, 0x0b, 0x5d, 0xcc,
+ 0x8c, 0xe8, 0xdd, 0xe9, 0xab, 0x35, 0x28, 0xc4, 0x0e, 0xae, 0xda, 0x29,
+ 0xcc, 0x24, 0x0c, 0xc3, 0x86, 0x76, 0x10, 0xd9, 0x3a, 0x0b, 0xbc, 0x16,
+ 0x21, 0x6e, 0xb9, 0xc6, 0xba, 0x70, 0x9f, 0x37, 0x4d, 0x5a, 0xf3, 0xd8,
+ 0xd6, 0x13, 0x4b, 0xbe, 0xe0, 0x3a, 0x1d, 0x7e, 0xf5, 0x0d, 0xc6, 0xf5,
+ 0x3e, 0x0c, 0x2e, 0xeb, 0xd9, 0x94, 0x95, 0x6a, 0xdc, 0xb8, 0x4d, 0xfc,
+ 0x67, 0x2f, 0x5a, 0xa2, 0xd8, 0x15, 0x65, 0xf7, 0xb0, 0x0e, 0xea, 0xad,
+ 0x33, 0xe4, 0xa4, 0x28, 0x96, 0x8e, 0x88, 0xbb, 0x42, 0xdb, 0xc2, 0xfb,
+ 0xe2, 0x20, 0xdb, 0x08, 0xf2, 0xa8, 0xa9, 0xbf, 0x60, 0x92, 0xb0, 0x52,
+ 0x84, 0xef, 0x42, 0xa8, 0xc9, 0xc4, 0xf0, 0x46, 0xeb, 0x2a, 0x8c, 0x38,
+ 0xf9, 0xaa, 0xaf, 0xa8, 0xb0, 0x59, 0xb5, 0x64, 0x6b, 0xd4, 0x4e, 0x93,
+ 0x46, 0x95, 0x7f, 0x31, 0xaf, 0xe3, 0x1f, 0x59, 0x8e, 0xf2, 0x78, 0xe9,
+ 0xd7, 0x80, 0x45, 0xaa, 0xaf, 0x6c, 0x52, 0x42, 0xb0, 0x26, 0xd2, 0x45,
+ 0x6b, 0x7d, 0x56, 0xf1, 0xff, 0xb2, 0x46, 0x7e, 0x52, 0x2d, 0x66, 0xf9,
+ 0xe7, 0xa2, 0x90, 0x98, 0x66, 0x34, 0x2e, 0x3c, 0x9d, 0x15, 0x61, 0x59,
+ 0xe8, 0x09, 0x46, 0x16, 0xbe, 0x75, 0xe1, 0x3f, 0xf7, 0x68, 0xe9, 0x7d,
+ 0xfc, 0xd7, 0xcf, 0x3d, 0xbb, 0xfa, 0x9f, 0xe9, 0x70, 0xfe, 0x92, 0xe5,
+ 0x7f, 0xc1, 0x2f, 0xf8, 0xb9, 0x77, 0xdf, 0x33, 0x16, 0x3b, 0xd6, 0x99,
+ 0xc5, 0x99, 0xa4, 0x31, 0x47, 0x6f, 0x2d, 0xea, 0xc6, 0x3c, 0xa5, 0x0c,
+ 0x57, 0x89, 0x1b, 0x23, 0x6a, 0x47, 0x12, 0xb5, 0x76, 0x0d, 0xd8, 0xa8,
+ 0xdd, 0x18, 0xd8, 0x17, 0xbb, 0x0f, 0xfd, 0x40, 0x57, 0x0d, 0xf7, 0x01,
+ 0xdc, 0x63, 0xe3, 0x55, 0x20, 0x15, 0x2e, 0xb3, 0x0d, 0x5b, 0x89, 0x8c,
+ 0x74, 0xe7, 0xd9, 0x64, 0x1f, 0xfb, 0xd2, 0xc5, 0xbc, 0xee, 0x89, 0x98,
+ 0xbf, 0xc1, 0x0c, 0x06, 0xac, 0x81, 0xc8, 0x75, 0x28, 0x48, 0xe4, 0x0a,
+ 0x07, 0x96, 0x73, 0x5e, 0xb3, 0xa0, 0xf6, 0xe2, 0xb7, 0x61, 0x22, 0x42,
+ 0x47, 0x36, 0x65, 0x95, 0xce, 0x32, 0x50, 0xd3, 0x29, 0x04, 0x3c, 0x65,
+ 0x8b, 0x78, 0x13, 0xd9, 0x3f, 0xe1, 0x1f, 0x55, 0xf3, 0x04, 0x83, 0x3d,
+ 0xe8, 0xaf, 0x12, 0x63, 0x99, 0x3f, 0x93, 0x37, 0x66, 0x09, 0x0d, 0xaf,
+ 0xe1, 0x90, 0x65, 0xf5, 0x55, 0x0f, 0x34, 0x9c, 0xbf, 0x60, 0x5c, 0x2f,
+ 0xcd, 0xff, 0x02, 0x84, 0xb4, 0x80, 0xa3, 0xb2, 0xb7, 0xf2, 0x43, 0x3c,
+ 0xbb, 0x81, 0x85, 0xaf, 0xdd, 0xf1, 0x66, 0x8e, 0xc7, 0x9a, 0x9a, 0x1a,
+ 0xb5, 0x0b, 0x4f, 0xf8, 0x56, 0x3a, 0x37, 0x4e, 0x7e, 0xff, 0x55, 0xdf,
+ 0x43, 0x58, 0x7e, 0xef, 0x19, 0x9f, 0x2e, 0x5b, 0x25, 0x23, 0xeb, 0xab,
+ 0x93, 0xbf, 0xfe, 0x45, 0x07, 0xf8, 0xb9, 0xf7, 0x63, 0xcc, 0x3f, 0x25,
+ 0xc8, 0xf7, 0xbd, 0xe8, 0xe4, 0xaf, 0xab, 0x53, 0xee, 0xb2, 0x09, 0xbe,
+ 0xe1, 0xbf, 0x10, 0x19, 0x2f, 0x1b, 0x16, 0x95, 0x7c, 0x7d, 0x27, 0x7a,
+ 0x9f, 0xde, 0x10, 0x22, 0x24, 0x19, 0xf8, 0xf3, 0x39, 0x02, 0x68, 0x2a,
+ 0xc4, 0x79, 0xcd, 0x10, 0xe7, 0xa4, 0xbd, 0x24, 0x43, 0xc4, 0x46, 0xa6,
+ 0x88, 0xbe, 0x57, 0x43, 0x33, 0xa4, 0x26, 0x4d, 0xff, 0x14, 0x62, 0x22,
+ 0x02, 0x42, 0xa7, 0x08, 0x29, 0xb2, 0xcd, 0x1a, 0x9d, 0x64, 0xdc, 0xb4,
+ 0x53, 0x8e, 0x30, 0x83, 0x30, 0x8c, 0x5c, 0x2d, 0xe6, 0x7d, 0xc5, 0xba,
+ 0x16, 0x75, 0x8f, 0x43, 0xe3, 0x68, 0xed, 0x0f, 0x6b, 0x52, 0x44, 0x36,
+ 0x9b, 0x91, 0xfc, 0x23, 0x2d, 0x90, 0x9b, 0x20, 0xfe, 0x25, 0x14, 0xcd,
+ 0x97, 0x2c, 0x36, 0xf1, 0x28, 0x4c, 0x8a, 0xe9, 0x58, 0x52, 0x2e, 0x80,
+ 0xca, 0xf9, 0x80, 0xd5, 0xc4, 0x41, 0x3d, 0x02, 0xb7, 0x42, 0xd2, 0x30,
+ 0x64, 0xda, 0x80, 0x4d, 0x22, 0xf9, 0x72, 0x1c, 0xb3, 0xb0, 0x49, 0xc3,
+ 0x49, 0xc4, 0x44, 0xfe, 0x17, 0x4c, 0x13, 0x1e, 0xa6, 0xe4, 0xd8, 0x32,
+ 0x78, 0xdd, 0xb1, 0x04, 0x92, 0x02, 0xde, 0xa1, 0xc8, 0xdc, 0x11, 0xbd,
+ 0x24, 0x1c, 0x88, 0x51, 0xe0, 0x6e, 0x0c, 0x52, 0x7c, 0x4f, 0xf1, 0x19,
+ 0x85, 0x76, 0xe4, 0xca, 0x2e, 0x94, 0x1c, 0xe1, 0x8f, 0x35, 0x29, 0xcf,
+ 0xb8, 0x43, 0xfe, 0xcd, 0x8a, 0xfe, 0x20, 0x51, 0x27, 0x27, 0x33, 0x9a,
+ 0xbe, 0x5e, 0x0e, 0xcb, 0xef, 0x83, 0xf3, 0xa3, 0x54, 0xca, 0xc4, 0xdb,
+ 0x7b, 0xc6, 0x04, 0x4f, 0xe4, 0xf1, 0xf0, 0xf0, 0x6e, 0xcb, 0x23, 0x4d,
+ 0x24, 0xac, 0x64, 0xfb, 0x97, 0x8c, 0xbf, 0x63, 0xc6, 0xf7, 0x61, 0x7e,
+ 0x93, 0x9c, 0x33, 0xe3, 0xc2, 0xd3, 0x9e, 0xdb, 0x3a, 0x6a, 0x0d, 0x1a,
+ 0x58, 0x0f, 0xae, 0x6b, 0xfd, 0x6b, 0x3e, 0x9c, 0xb4, 0x24, 0x22, 0x4f,
+ 0x7d, 0xfa, 0x21, 0x60, 0xb7, 0x8f, 0x39, 0x95, 0x9b, 0xbf, 0xc3, 0xc3,
+ 0xd9, 0x8e, 0x45, 0xa5, 0x16, 0xc2, 0x2a, 0xe0, 0x2e, 0x02, 0x7f, 0xdf,
+ 0xe3, 0x1c, 0x2a, 0xdb, 0x66, 0x25, 0x73, 0xf1, 0xc3, 0x2c, 0xc2, 0x7a,
+ 0xb0, 0x9f, 0xb6, 0xe2, 0x46, 0xf4, 0xbd, 0xa9, 0x80, 0xf1, 0x72, 0xbb,
+ 0x34, 0x8e, 0x8a, 0xf0, 0x4d, 0x58, 0x5f, 0x13, 0x7f, 0x08, 0x4e, 0x94,
+ 0x70, 0x4c, 0x53, 0x80, 0xf7, 0xb1, 0xff, 0x55, 0x7a, 0x2d, 0x5e, 0x98,
+ 0x38, 0xa0, 0x52, 0xec, 0x51, 0x56, 0xa5, 0xb9, 0x13, 0xdc, 0x16, 0x8b,
+ 0xca, 0xb7, 0xd4, 0xe0, 0xe5, 0xbe, 0x82, 0x8d, 0x56, 0x58, 0xbe, 0x79,
+ 0xeb, 0x6c, 0xb1, 0x0c, 0xc6, 0x56, 0xa5, 0x85, 0x2b, 0x48, 0xa2, 0xb5,
+ 0xaf, 0x36, 0xd6, 0xba, 0x1b, 0x7d, 0x1b, 0xd5, 0xb9, 0xd9, 0x25, 0x4b,
+ 0x3d, 0x7c, 0x15, 0x15, 0xa2, 0xc1, 0xd0, 0xe4, 0x11, 0x9a, 0x61, 0x82,
+ 0x6c, 0x4a, 0x87, 0x49, 0x45, 0x76, 0x55, 0xb0, 0x3f, 0x02, 0xb7, 0xf2,
+ 0xc8, 0x72, 0xba, 0x99, 0xdc, 0xf1, 0x88, 0xc9, 0xdb, 0x4d, 0x66, 0xe0,
+ 0x2e, 0xcc, 0xd5, 0x9e, 0xab, 0x66, 0xfb, 0xbe, 0x7d, 0x0c, 0xf9, 0x12,
+ 0x1a, 0xbc, 0x38, 0x32, 0x1c, 0x3f, 0xc4, 0x32, 0x9d, 0x7a, 0xed, 0xab,
+ 0x75, 0x96, 0x4d, 0xd6, 0x0b, 0xe6, 0xcc, 0xbd, 0x16, 0xfd, 0x1c, 0xc4,
+ 0xb0, 0xa6, 0x17, 0x9d, 0xe5, 0x08, 0xbd, 0x2e, 0x7d, 0x3c, 0xda, 0xc7,
+ 0x50, 0xde, 0xd7, 0x14, 0x9a, 0x96, 0xe7, 0xf7, 0x37, 0xe9, 0x47, 0x2d,
+ 0x2d, 0x78, 0xe9, 0x28, 0x1b, 0xec, 0xd4, 0xff, 0xea, 0x1b, 0x7c, 0x5c,
+ 0x8d, 0x80, 0xb5, 0x68, 0x30, 0x00, 0xd6, 0x53, 0xcd, 0xda, 0xd8, 0x7b,
+ 0x1e, 0xc6, 0x21, 0xe9, 0x06, 0x24, 0x58, 0x51, 0x0d, 0x91, 0x5e, 0x3e,
+ 0xe4, 0x89, 0xd1, 0x4c, 0x38, 0x76, 0x19, 0xf2, 0xaf, 0xca, 0xaf, 0x06,
+ 0xd1, 0x81, 0xa9, 0xe2, 0x49, 0x3d, 0xcb, 0x92, 0x63, 0x23, 0x2c, 0x31,
+ 0xc4, 0xe5, 0x86, 0x94, 0xf0, 0x6c, 0x98, 0x89, 0xe3, 0x9e, 0x7b, 0x17,
+ 0x50, 0xde, 0x7b, 0x3a, 0xad, 0xa4, 0x19, 0x07, 0x88, 0xf4, 0x70, 0x57,
+ 0x46, 0x2a, 0x16, 0xc1, 0x48, 0x32, 0xfd, 0xde, 0xd8, 0x24, 0xb2, 0xb2,
+ 0xf8, 0x48, 0x62, 0x31, 0x26, 0x71, 0xfe, 0x29, 0xce, 0x63, 0x5a, 0x82,
+ 0x79, 0x49, 0x15, 0xd2, 0x93, 0x3a, 0x7a, 0x16, 0xe3, 0x73, 0xd6, 0xa9,
+ 0xaf, 0xd4, 0xde, 0x4c, 0x36, 0xed, 0x8b, 0xda, 0x17, 0x53, 0xfd, 0x54,
+ 0x00, 0x66, 0x90, 0xf8, 0xff, 0x30, 0xa9, 0xd2, 0x27, 0x8f, 0x74, 0x52,
+ 0xde, 0xa5, 0x4a, 0x75, 0xae, 0x86, 0xd3, 0x54, 0x7a, 0x0d, 0xd8, 0x0f,
+ 0x6a, 0x6b, 0x60, 0x84, 0xa9, 0x8d, 0xea, 0x17, 0xd8, 0x4d, 0x35, 0x03,
+ 0x4e, 0xa0, 0x0c, 0x05, 0x55, 0xf1, 0xa2, 0x26, 0xdc, 0xc8, 0xa7, 0x4f,
+ 0x9c, 0x45, 0xdf, 0xe2, 0x73, 0x68, 0xf1, 0x4f, 0xf9, 0xc2, 0xf6, 0x17,
+ 0x45, 0x4c, 0xad, 0x48, 0x7e, 0x5e, 0x71, 0x01, 0x3a, 0x2c, 0xb8, 0xb9,
+ 0x9e, 0x7c, 0xa3, 0x71, 0x08, 0xde, 0x76, 0x81, 0xdc, 0x1b, 0xf0, 0x17,
+ 0x25, 0x9c, 0xf6, 0xd4, 0x4b, 0x89, 0xda, 0xb1, 0x7a, 0xf4, 0x7d, 0x5e,
+ 0x04, 0x13, 0xf6, 0xed, 0x74, 0x8d, 0x4e, 0xff, 0xc9, 0xa2, 0x24, 0x99,
+ 0x23, 0x8f, 0xb1, 0x6a, 0x30, 0x4e, 0x19, 0x7f, 0x51, 0x34, 0xf1, 0x57,
+ 0x07, 0xaf, 0xdf, 0x1e, 0xf8, 0xb5, 0x94, 0x4e, 0x58, 0xe0, 0xd3, 0x86,
+ 0x33, 0x9a, 0x2d, 0x1b, 0xe4, 0x47, 0x36, 0x40, 0x87, 0x22, 0xa2, 0xb7,
+ 0x2a, 0x70, 0x8f, 0x69, 0x51, 0xd1, 0x6f, 0xc5, 0x4c, 0x24, 0x19, 0xc1,
+ 0xc6, 0x08, 0x4d, 0x36, 0x42, 0x30, 0x36, 0xdf, 0x0d, 0xf6, 0xdd, 0xea,
+ 0x2b, 0x75, 0xdc, 0xd7, 0xfe, 0x0b, 0xdc, 0x90, 0xe1, 0xdc, 0x13, 0x82,
+ 0x5d, 0xfd, 0x17, 0x10, 0xd7, 0x13, 0x2f, 0x09, 0xa6, 0xf0, 0x86, 0xfb,
+ 0x4f, 0x71, 0xed, 0xb9, 0xa4, 0x02, 0x39, 0xd5, 0xdb, 0x49, 0xf5, 0x9e,
+ 0xfd, 0x27, 0x3d, 0x7d, 0x9f, 0x03, 0x42, 0x0c, 0x80, 0x63, 0x00, 0xdf,
+ 0x43, 0x57, 0xd6, 0x00, 0xa9, 0x9b, 0x62, 0x03, 0x8d, 0xd3, 0x8a, 0x4c,
+ 0x6e, 0x38, 0x05, 0x8b, 0x89, 0x03, 0x17, 0xd1, 0x1a, 0xee, 0xe0, 0xf0,
+ 0xb0, 0x1b, 0xfc, 0x9a, 0x03, 0xc2, 0xce, 0x07, 0x7e, 0x96, 0x80, 0xb0,
+ 0x33, 0x7f, 0x6f, 0x56, 0x0e, 0xca, 0x62, 0x58, 0xd4, 0xbd, 0x95, 0x30,
+ 0x59, 0x0d, 0x70, 0xbc, 0x77, 0x70, 0x56, 0x2c, 0xc6, 0x75, 0xc1, 0xb8,
+ 0xfb, 0xfb, 0xb2, 0x1b, 0xe1, 0x73, 0xa4, 0x8a, 0x33, 0xb7, 0xef, 0x80,
+ 0x5a, 0x06, 0x84, 0xdf, 0x70, 0x76, 0xf4, 0x86, 0x0e, 0xe8, 0xf4, 0xe0,
+ 0xec, 0xcc, 0xe0, 0xb9, 0x4b, 0xea, 0xb7, 0x67, 0xad, 0x52, 0x14, 0x96,
+ 0x82, 0x5d, 0xb2, 0xfd, 0xb6, 0x1a, 0x40, 0x7a, 0xca, 0x53, 0x36, 0x3a,
+ 0xdc, 0x87, 0xf3, 0xc5, 0x0c, 0xd8, 0x0d, 0x58, 0x09, 0xe3, 0xb5, 0x2a,
+ 0x92, 0xac, 0x8d, 0xb6, 0xfe, 0x69, 0x72, 0x38, 0x4c, 0x03, 0x66, 0x06,
+ 0xd3, 0x78, 0x81, 0x90, 0x23, 0xa6, 0x9c, 0x44, 0xd2, 0x5b, 0x1c, 0xfc,
+ 0x8c, 0x7e, 0xd0, 0x1b, 0xd6, 0x3b, 0x3b, 0x3e, 0x3f, 0x8a, 0x0e, 0xde,
+ 0x9e, 0x7f, 0xdf, 0x13, 0x6c, 0xd0, 0x66, 0x9f, 0x0a, 0x30, 0x27, 0xca,
+ 0x2c, 0xbd, 0x32, 0xf8, 0xd0, 0x84, 0x5b, 0xe9, 0xd4, 0x65, 0x76, 0xe3,
+ 0x75, 0x2c, 0x21, 0xb2, 0xc0, 0x61, 0xdc, 0x81, 0xe0, 0xbc, 0x7d, 0xad,
+ 0x3f, 0xae, 0xa6, 0xa4, 0x6b, 0x29, 0xbd, 0xb7, 0x8f, 0x77, 0xcb, 0x00,
+ 0xdd, 0x2d, 0xcb, 0xa4, 0x72, 0x48, 0x97, 0xd8, 0x4c, 0x27, 0x21, 0x72,
+ 0xf5, 0x5a, 0x3c, 0x06, 0x3d, 0x3d, 0x40, 0x76, 0x30, 0x28, 0x13, 0x1f,
+ 0x93, 0x87, 0xb0, 0x11, 0x0c, 0x54, 0xe2, 0x7f, 0xdf, 0xbe, 0x79, 0xb9,
+ 0x69, 0x60, 0x17, 0x18, 0xa8, 0x3f, 0xe1, 0xf2, 0xf9, 0x40, 0x83, 0x4e,
+ 0xdb, 0x92, 0xc8, 0x64, 0x07, 0xa5, 0x1f, 0xa8, 0xaa, 0x3a, 0x6f, 0xd4,
+ 0xd7, 0x71, 0x04, 0x1e, 0x16, 0x9d, 0x94, 0x63, 0x03, 0x0f, 0xed, 0xdb,
+ 0x0d, 0x5a, 0xb7, 0x82, 0x35, 0xa3, 0x94, 0xdc, 0xf9, 0x56, 0xf8, 0x8c,
+ 0x03, 0xcc, 0x2d, 0x5e, 0x59, 0xd3, 0x63, 0xcd, 0x05, 0xfc, 0x6e, 0x0f,
+ 0x47, 0xdb, 0xc0, 0xe1, 0x12, 0x74, 0xd1, 0x64, 0x58, 0x68, 0x5b, 0x00,
+ 0xa5, 0x55, 0xb7, 0xe4, 0xe1, 0x36, 0xb7, 0xf0, 0x81, 0xf3, 0x70, 0x9b,
+ 0x83, 0xdf, 0x87, 0x9e, 0xdc, 0xb5, 0x69, 0x75, 0x92, 0xcf, 0xc0, 0xca,
+ 0x74, 0x06, 0x0a, 0x06, 0xb9, 0xec, 0x36, 0xf1, 0x91, 0x65, 0xc5, 0x4a,
+ 0xa1, 0xf5, 0xf0, 0x5c, 0x92, 0x6b, 0xb9, 0xcf, 0xff, 0x0d, 0x73, 0x31,
+ 0xd4, 0x43, 0xcb, 0x62, 0xca, 0x9e, 0x72, 0x79, 0x81, 0x6b, 0xdf, 0x18,
+ 0xf7, 0x8d, 0x2a, 0x78, 0x29, 0x04, 0x49, 0xa1, 0x7c, 0x5a, 0x2f, 0x15,
+ 0xcf, 0xb5, 0x83, 0x82, 0x30, 0xda, 0x3a, 0x26, 0xe8, 0x69, 0x48, 0xe1,
+ 0x9c, 0x02, 0xe3, 0x34, 0x5e, 0x00, 0x86, 0xd0, 0xeb, 0x48, 0x1c, 0xb2,
+ 0x9f, 0x9c, 0xbb, 0xe7, 0x3b, 0x0f, 0xe8, 0x60, 0x47, 0xd7, 0x1d, 0x7d,
+ 0x62, 0x6d, 0xd3, 0x2d, 0x53, 0x54, 0x7d, 0xf8, 0xc3, 0x73, 0x8b, 0x49,
+ 0x62, 0x4a, 0x2e, 0x22, 0xbe, 0x1f, 0x6c, 0x9e, 0x45, 0x5e, 0xa8, 0xd3,
+ 0x0d, 0x4f, 0x9b, 0x8a, 0xa9, 0x01, 0xa5, 0x06, 0x8c, 0xd3, 0x74, 0x1e,
+ 0x5d, 0x66, 0x30, 0x60, 0x39, 0xba, 0x24, 0xa8, 0x23, 0xce, 0x6f, 0xc5,
+ 0x5c, 0x80, 0x19, 0xe6, 0xb2, 0x04, 0x00, 0xf2, 0x4c, 0x78, 0x1a, 0x84,
+ 0x81, 0x6d, 0x52, 0x73, 0x59, 0x5c, 0x53, 0x16, 0xc2, 0xf6, 0xd3, 0xdd,
+ 0x67, 0xa0, 0xaa, 0xde, 0x50, 0x77, 0x55, 0xbb, 0x57, 0x63, 0x2e, 0xcb,
+ 0x0a, 0x54, 0x32, 0x5a, 0x69, 0xea, 0xa2, 0x3f, 0x61, 0x74, 0x86, 0x2e,
+ 0x2d, 0x1a, 0xd3, 0xe4, 0x92, 0x15, 0x48, 0x77, 0xbf, 0x05, 0x13, 0xec,
+ 0x9f, 0x5e, 0x4a, 0xda, 0x2c, 0xbc, 0x1b, 0xb8, 0x4f, 0x9c, 0x46, 0xed,
+ 0xf6, 0x2e, 0x3b, 0x3b, 0xfe, 0xaf, 0xa3, 0x7e, 0xf4, 0xe6, 0xe8, 0xfc,
+ 0x4d, 0x3f, 0x3a, 0x3b, 0x3f, 0x79, 0x83, 0x79, 0x07, 0x5d, 0x6d, 0x64,
+ 0xc7, 0xb4, 0x55, 0x9a, 0xa0, 0xc8, 0xfc, 0xa7, 0xd1, 0x49, 0x8d, 0x76,
+ 0x9f, 0x12, 0xb5, 0xa5, 0xb7, 0xe1, 0xdd, 0xf7, 0x8a, 0x28, 0x06, 0x78,
+ 0xfd, 0xd2, 0x0f, 0xe3, 0x13, 0xbf, 0x03, 0x71, 0x20, 0x19, 0xe2, 0xf7,
+ 0x1a, 0xb9, 0x4d, 0x2b, 0xae, 0x81, 0x60, 0x41, 0x76, 0x28, 0xcf, 0xb9,
+ 0x31, 0xf5, 0xec, 0x1d, 0x2d, 0x8e, 0xb9, 0xb2, 0x8e, 0x4a, 0x4f, 0x85,
+ 0x54, 0xd8, 0x57, 0xdd, 0xd3, 0xfe, 0x06, 0xbd, 0x68, 0x9d, 0x62, 0x24,
+ 0xa2, 0xa7, 0xdf, 0x42, 0xba, 0x60, 0x1b, 0x6c, 0xd8, 0x0f, 0xae, 0x8a,
+ 0x59, 0xca, 0x61, 0x2c, 0xf2, 0x86, 0x1a, 0x56, 0xcc, 0xda, 0x02, 0xf7,
+ 0x22, 0x27, 0x8b, 0xad, 0x63, 0x75, 0x6b, 0x74, 0xca, 0x6b, 0x8d, 0xe2,
+ 0x06, 0xf3, 0xa5, 0xf3, 0x34, 0x87, 0x4b, 0x46, 0x4d, 0x26, 0xd7, 0x74,
+ 0x55, 0x6b, 0xdd, 0x72, 0xd9, 0x26, 0x6f, 0x7f, 0xaa, 0x8e, 0x53, 0xd5,
+ 0x32, 0xde, 0x29, 0xd3, 0xeb, 0x42, 0x03, 0x7c, 0x13, 0x8e, 0x6c, 0x1b,
+ 0xff, 0xd8, 0x61, 0xae, 0x79, 0xeb, 0x50, 0x7c, 0x03, 0x3e, 0x7e, 0x1c,
+ 0x43, 0x70, 0xb7, 0x8f, 0xd5, 0xc9, 0xc9, 0xa7, 0xa8, 0x11, 0x20, 0xac,
+ 0x49, 0x8c, 0xd6, 0x7e, 0x9b, 0x97, 0x63, 0x53, 0x93, 0xb0, 0x1a, 0x4a,
+ 0x18, 0x0e, 0xda, 0xbe, 0x81, 0xb2, 0x98, 0x35, 0x63, 0x90, 0x3b, 0xfb,
+ 0x89, 0x06, 0x89, 0x29, 0x55, 0xa7, 0xf2, 0x54, 0x30, 0x2e, 0x4f, 0x58,
+ 0x93, 0x08, 0xc6, 0x61, 0xf8, 0x88, 0x5c, 0xaf, 0xbe, 0xe0, 0x06, 0xb6,
+ 0xc4, 0x79, 0xc3, 0x98, 0xf4, 0x05, 0x38, 0xea, 0x9c, 0x25, 0xb6, 0x28,
+ 0x4c, 0xa8, 0x9e, 0x20, 0x2b, 0x10, 0x26, 0xb1, 0xd5, 0xcd, 0x65, 0x1e,
+ 0x6c, 0xf3, 0xf6, 0x26, 0xa5, 0x62, 0x65, 0xf2, 0xe0, 0xe7, 0x51, 0x9a,
+ 0x53, 0x66, 0xd3, 0xd8, 0x7c, 0x22, 0x36, 0x58, 0xc3, 0x24, 0x66, 0x56,
+ 0x5e, 0xc6, 0x05, 0x09, 0x6b, 0x5c, 0x21, 0x75, 0x57, 0x5d, 0x54, 0x81,
+ 0xb6, 0x00, 0x36, 0x55, 0x46, 0x46, 0xb3, 0xfe, 0x8b, 0x51, 0xdd, 0x5e,
+ 0x15, 0x09, 0x7d, 0x5f, 0xc9, 0x70, 0x37, 0x58, 0x12, 0xbe, 0xa8, 0xc8,
+ 0x89, 0xd2, 0x5a, 0xca, 0x4c, 0x8a, 0x56, 0xa9, 0xb9, 0x86, 0xb1, 0xa3,
+ 0xc5, 0xdb, 0x1a, 0xf0, 0xe7, 0xd1, 0xa2, 0xb8, 0x87, 0xc9, 0x22, 0x9f,
+ 0x62, 0xf5, 0x6b, 0xab, 0xd1, 0x44, 0x97, 0xca, 0xea, 0x29, 0x3b, 0x48,
+ 0x18, 0xd1, 0xc3, 0x57, 0xfd, 0x75, 0xf5, 0xd1, 0xb9, 0x83, 0x8a, 0x43,
+ 0x2b, 0xba, 0x77, 0xf3, 0x1a, 0xa3, 0x8e, 0xb5, 0x8e, 0xa5, 0x13, 0x8e,
+ 0xf9, 0x05, 0x17, 0xf0, 0x21, 0xcd, 0xa4, 0x4d, 0x41, 0x98, 0xe5, 0x19,
+ 0x76, 0xeb, 0x2a, 0xca, 0x4d, 0xbc, 0x56, 0xd8, 0x61, 0x36, 0x8a, 0x40,
+ 0xd7, 0x49, 0x2b, 0x41, 0x22, 0x08, 0x55, 0xf3, 0x1b, 0x6b, 0x8b, 0xf6,
+ 0x02, 0xb5, 0x9a, 0x41, 0x00, 0xbd, 0x86, 0xbe, 0x16, 0x55, 0x23, 0xa7,
+ 0xfb, 0xc9, 0x20, 0x54, 0x72, 0xc6, 0x29, 0x6a, 0x01, 0xb3, 0x49, 0xae,
+ 0x25, 0xc5, 0x44, 0x8d, 0x43, 0x8d, 0x4c, 0x32, 0x34, 0xec, 0xba, 0x40,
+ 0xe7, 0x14, 0x4e, 0x9a, 0x61, 0x8b, 0xb0, 0x8d, 0x28, 0xa5, 0xab, 0x35,
+ 0xaf, 0x3f, 0x79, 0x13, 0x9a, 0xb3, 0x01, 0x37, 0x5e, 0xcc, 0x7d, 0x9d,
+ 0xed, 0xf8, 0xd4, 0x0e, 0x29, 0xee, 0x84, 0x82, 0xd3, 0xcc, 0x91, 0x26,
+ 0x9c, 0x55, 0x62, 0x3b, 0x01, 0x73, 0x00, 0x56, 0x35, 0xf1, 0x40, 0x6c,
+ 0x50, 0xa9, 0xf3, 0x34, 0xb5, 0x2e, 0x10, 0x79, 0xad, 0x0e, 0x1b, 0x5c,
+ 0x0c, 0xa2, 0x1e, 0x02, 0xd9, 0xf7, 0x68, 0xa9, 0x82, 0xfc, 0x25, 0x1d,
+ 0x17, 0xf5, 0x5d, 0xd8, 0x95, 0xc6, 0x6a, 0xfd, 0x0e, 0xce, 0xf2, 0x7f,
+ 0xd2, 0xaf, 0x86, 0x4e, 0x67, 0xfd, 0x6d, 0x9e, 0x7d, 0x20, 0xe7, 0xa9,
+ 0x0f, 0x96, 0x68, 0x00, 0x85, 0x97, 0xad, 0x4a, 0xe1, 0x7b, 0x11, 0xf3,
+ 0xbc, 0xb1, 0x3a, 0x0a, 0xae, 0x60, 0x3f, 0x58, 0x77, 0xa0, 0x00, 0x5a,
+ 0xe7, 0x92, 0x0e, 0xf4, 0x3c, 0xc3, 0xec, 0x66, 0x80, 0xcf, 0x0d, 0xc6,
+ 0xc5, 0x0c, 0x6e, 0xa0, 0x37, 0xc7, 0x8c, 0x70, 0x55, 0x3c, 0xa9, 0x11,
+ 0xdb, 0x34, 0x47, 0xd5, 0xdf, 0xe6, 0x19, 0x12, 0x92, 0x16, 0x36, 0x3a,
+ 0xd0, 0xe3, 0x8c, 0xd9, 0x56, 0x69, 0x4f, 0x7b, 0x62, 0x2b, 0xe1, 0x15,
+ 0xa9, 0xdc, 0x18, 0x89, 0x4d, 0x60, 0x45, 0xc7, 0x17, 0x1d, 0x36, 0x92,
+ 0x03, 0x71, 0x48, 0xbd, 0xd3, 0xda, 0x5d, 0xb8, 0x1a, 0x0f, 0x8a, 0xb5,
+ 0x17, 0x75, 0x74, 0xa2, 0x23, 0xc5, 0x89, 0xdb, 0xd1, 0x29, 0xff, 0x74,
+ 0x12, 0x1c, 0x69, 0x78, 0x4d, 0x6f, 0xf4, 0x9a, 0xa5, 0xb5, 0x78, 0x94,
+ 0x74, 0x36, 0x13, 0x49, 0x81, 0xaf, 0xfe, 0xf9, 0xcf, 0x83, 0xa5, 0x59,
+ 0x43, 0x8c, 0x34, 0x18, 0xf5, 0xf6, 0x7e, 0xa2, 0xc0, 0xd5, 0x2f, 0xf1,
+ 0x4f, 0xf0, 0xcf, 0x5f, 0x7a, 0x06, 0x74, 0x90, 0x9b, 0xdb, 0x59, 0x68,
+ 0xb0, 0x64, 0xec, 0x55, 0xd1, 0xe3, 0x66, 0xf7, 0xd9, 0x4b, 0x53, 0x9b,
+ 0x86, 0x19, 0xa4, 0xb9, 0x9d, 0x1f, 0x9e, 0xf2, 0xc5, 0x2a, 0x39, 0xef,
+ 0x86, 0x88, 0x13, 0xd9, 0x0a, 0x99, 0x5c, 0x28, 0x4a, 0x02, 0xfd, 0xc8,
+ 0x85, 0x08, 0x12, 0xe7, 0xcd, 0xbe, 0x4d, 0xae, 0xba, 0xe6, 0x7b, 0x9d,
+ 0x80, 0x01, 0x72, 0x81, 0x6e, 0x61, 0x06, 0xd0, 0x1e, 0x44, 0x07, 0xaa,
+ 0xfc, 0xb6, 0xd9, 0x1a, 0xfd, 0x3e, 0xa2, 0x46, 0x7a, 0x84, 0x55, 0x72,
+ 0x0d, 0x4b, 0xec, 0x4b, 0xd7, 0x75, 0x2e, 0x8f, 0x57, 0x6c, 0xbf, 0x2c,
+ 0x47, 0x93, 0x52, 0x79, 0x69, 0x99, 0x55, 0xef, 0x7d, 0x63, 0x5f, 0x00,
+ 0x05, 0x9c, 0xfc, 0x45, 0x5a, 0x25, 0x86, 0xee, 0x51, 0x28, 0xbb, 0xf0,
+ 0x68, 0x41, 0x6d, 0xb2, 0xc9, 0xda, 0x57, 0x83, 0xca, 0xeb, 0x72, 0x25,
+ 0xae, 0xa6, 0x50, 0x9e, 0xc2, 0x1d, 0x22, 0x19, 0x75, 0x6b, 0x03, 0xe1,
+ 0x53, 0x6e, 0xb2, 0x71, 0xd7, 0x87, 0x5d, 0xc4, 0x6f, 0xef, 0x9d, 0xe5,
+ 0x0e, 0x22, 0x12, 0x9c, 0x82, 0x2d, 0x1b, 0x6c, 0x22, 0x27, 0x8f, 0x95,
+ 0x69, 0xbd, 0xa4, 0x6f, 0x5b, 0xb3, 0x53, 0x4b, 0x12, 0x9d, 0x82, 0xd1,
+ 0x66, 0x6e, 0x94, 0xd3, 0x3d, 0x8d, 0xc1, 0xef, 0x50, 0x61, 0xd9, 0x68,
+ 0x5f, 0xa0, 0xc3, 0xb4, 0xa4, 0x50, 0xbc, 0x75, 0x51, 0x13, 0xb6, 0x59,
+ 0x86, 0xc5, 0x63, 0xe3, 0x12, 0xd6, 0x80, 0x89, 0xd2, 0x82, 0x87, 0xaf,
+ 0x28, 0x19, 0x54, 0x8e, 0x29, 0xb6, 0x89, 0x17, 0xf9, 0x52, 0x75, 0x08,
+ 0xcd, 0x3e, 0x6b, 0x56, 0x11, 0x88, 0x1f, 0x87, 0xd8, 0x98, 0x20, 0xf1,
+ 0xbf, 0x24, 0xa7, 0x10, 0x30, 0xe1, 0x3a, 0x47, 0x2f, 0x7b, 0xe5, 0xdb,
+ 0xe4, 0xb4, 0x78, 0x92, 0xb8, 0x4b, 0x2b, 0xcc, 0x64, 0xa7, 0x3e, 0x45,
+ 0xf5, 0xa5, 0x0c, 0x7d, 0x2f, 0xe5, 0x08, 0x97, 0xb4, 0x8a, 0x72, 0xd4,
+ 0x52, 0x4e, 0x39, 0xea, 0xe1, 0x69, 0x67, 0xfc, 0xb3, 0xea, 0x7d, 0xc6,
+ 0xbf, 0x88, 0xb3, 0xf9, 0xed, 0xad, 0x48, 0xb5, 0xc7, 0x22, 0xde, 0xb1,
+ 0x86, 0xbc, 0x30, 0x9a, 0x43, 0xb5, 0xb8, 0xb8, 0xa0, 0xc6, 0x13, 0x7e,
+ 0x0a, 0x38, 0x3a, 0xed, 0x4c, 0x61, 0x2c, 0x6a, 0x0a, 0x58, 0x91, 0x55,
+ 0xf1, 0xd9, 0x34, 0xba, 0x02, 0xd2, 0x6c, 0x22, 0x49, 0x2a, 0x63, 0x96,
+ 0xf8, 0x5d, 0xc9, 0x8c, 0x91, 0x72, 0x2c, 0x4c, 0x9f, 0x5e, 0x2c, 0xd3,
+ 0x85, 0x72, 0xa2, 0xb6, 0x5c, 0xa3, 0x04, 0x30, 0x11, 0x6a, 0xbe, 0x3c,
+ 0xa9, 0x96, 0x48, 0xb3, 0xdb, 0x70, 0x3b, 0xb8, 0xe8, 0x82, 0x53, 0xe4,
+ 0x44, 0x95, 0x74, 0x41, 0x51, 0x9f, 0x12, 0x28, 0xea, 0x52, 0xb4, 0xe7,
+ 0x66, 0xcf, 0xbe, 0x6c, 0x22, 0x3d, 0x55, 0xb9, 0x83, 0x66, 0xc9, 0x56,
+ 0x82, 0xd6, 0x6f, 0x89, 0x90, 0x6b, 0xeb, 0x52, 0x13, 0xda, 0xcb, 0x5b,
+ 0x49, 0xdc, 0x3d, 0xf2, 0x87, 0x77, 0x76, 0xba, 0xa3, 0xdf, 0x87, 0xda,
+ 0x1b, 0xab, 0x5b, 0xc9, 0x24, 0xe8, 0x24, 0xf1, 0x6a, 0x1a, 0x8f, 0x46,
+ 0xa3, 0x98, 0x34, 0xdd, 0x7d, 0x56, 0xbf, 0x37, 0x45, 0xfd, 0x0d, 0x9b,
+ 0x06, 0x67, 0xa9, 0xd0, 0xdd, 0xe1, 0xe1, 0xa1, 0x28, 0xea, 0xe7, 0x97,
+ 0x2d, 0x95, 0xd9, 0xc2, 0xd8, 0xb0, 0xc9, 0x90, 0x86, 0x42, 0x17, 0xd5,
+ 0xe5, 0xa2, 0x46, 0xb6, 0xd4, 0x97, 0x0e, 0x74, 0xc6, 0x8d, 0xcd, 0xc0,
+ 0x63, 0x06, 0x58, 0xc2, 0xb6, 0xf0, 0x2e, 0x60, 0x5f, 0xfb, 0x06, 0xff,
+ 0x25, 0xd0, 0xbd, 0xaa, 0x4c, 0x11, 0x35, 0x47, 0x9d, 0x63, 0x32, 0x3e,
+ 0x4b, 0x79, 0x37, 0x3d, 0xfb, 0xfc, 0xb2, 0x61, 0x69, 0xe0, 0xd4, 0x99,
+ 0x1f, 0xe5, 0x24, 0x1f, 0x54, 0x63, 0x20, 0xba, 0x84, 0x66, 0x71, 0x89,
+ 0x4c, 0xd7, 0x1e, 0xfe, 0x56, 0x12, 0x73, 0xb7, 0xfc, 0xe1, 0x49, 0xcc,
+ 0x19, 0xfd, 0x5e, 0x24, 0xe6, 0xae, 0x4e, 0x36, 0xa9, 0xf1, 0x1b, 0xa4,
+ 0xbb, 0x6a, 0x35, 0xc2, 0x93, 0x37, 0x3b, 0x68, 0x6f, 0x89, 0x1b, 0x06,
+ 0x49, 0x2c, 0x5a, 0x3f, 0xa4, 0xee, 0xdf, 0xd1, 0xa1, 0xb0, 0xc1, 0xc3,
+ 0x4b, 0x4c, 0x21, 0x9f, 0x02, 0x25, 0xc2, 0xb9, 0x54, 0x24, 0xd9, 0xb8,
+ 0xe6, 0xfa, 0xec, 0xe5, 0xe6, 0xf9, 0xcb, 0x33, 0xaf, 0x9a, 0xee, 0x06,
+ 0x23, 0xc2, 0x14, 0xf9, 0x6d, 0x46, 0x17, 0x99, 0x0e, 0xca, 0xb4, 0x32,
+ 0x78, 0x51, 0x86, 0xb5, 0xf1, 0x0c, 0xc1, 0x96, 0x2c, 0x8b, 0xdc, 0x01,
+ 0x35, 0x40, 0x77, 0x4d, 0x9e, 0xe6, 0x84, 0xca, 0x8b, 0xf9, 0x7c, 0xc4,
+ 0xb4, 0x18, 0xdc, 0x25, 0x7a, 0x7d, 0x70, 0x8e, 0xe5, 0xe6, 0xb5, 0xa4,
+ 0xa0, 0x8a, 0x5f, 0x3e, 0x90, 0x1d, 0x66, 0x3a, 0xb9, 0x26, 0x23, 0x6d,
+ 0xb6, 0x6e, 0x6d, 0x6e, 0x3a, 0x06, 0x54, 0xe8, 0xf8, 0x7a, 0xdd, 0xee,
+ 0xbf, 0xd0, 0x53, 0xea, 0x2e, 0x03, 0xff, 0x78, 0xe2, 0xfa, 0x08, 0xba,
+ 0x0a, 0x52, 0x4f, 0x27, 0xf1, 0xc0, 0x4b, 0x8e, 0x88, 0x0e, 0x93, 0xb6,
+ 0xf3, 0x3b, 0x3e, 0xbe, 0x0e, 0x87, 0x06, 0x6b, 0x57, 0x42, 0x24, 0x86,
+ 0xbb, 0x50, 0x0c, 0x70, 0x5a, 0x5c, 0x64, 0x14, 0x4e, 0x63, 0x42, 0x23,
+ 0xb5, 0x4a, 0xf3, 0x7d, 0xda, 0x3b, 0x74, 0xc0, 0xa7, 0x1b, 0x69, 0xdb,
+ 0x0e, 0x97, 0xa6, 0x30, 0x26, 0x87, 0xac, 0x0c, 0x75, 0x37, 0x43, 0x15,
+ 0xec, 0x36, 0x34, 0x80, 0x5d, 0x3e, 0x1e, 0x16, 0x1e, 0x45, 0x36, 0xca,
+ 0xe0, 0x05, 0x4c, 0xae, 0x7d, 0xc1, 0x28, 0x26, 0x4e, 0x89, 0x92, 0xe2,
+ 0x20, 0x0a, 0x23, 0x34, 0xbc, 0x15, 0xd3, 0x22, 0xbd, 0x14, 0x40, 0x54,
+ 0x6a, 0xe4, 0x1b, 0xef, 0x48, 0x2b, 0x42, 0xf3, 0x9f, 0x86, 0x11, 0xf1,
+ 0xe0, 0xf7, 0xa6, 0x17, 0x59, 0xdb, 0x2a, 0x91, 0x61, 0x78, 0xcf, 0xa1,
+ 0x8d, 0xef, 0x50, 0xdb, 0xbb, 0xf0, 0xf4, 0x7b, 0x83, 0xff, 0xdf, 0x6c,
+ 0x0d, 0x2c, 0x15, 0x89, 0xa0, 0xd3, 0x71, 0x52, 0xa6, 0x01, 0x14, 0xe3,
+ 0x2f, 0xb3, 0xb9, 0x33, 0x5e, 0x0a, 0x0b, 0xfe, 0x34, 0x96, 0xa4, 0x36,
+ 0xee, 0x56, 0x8c, 0x3f, 0x80, 0xaf, 0xe1, 0x0c, 0xa5, 0x66, 0x2f, 0x29,
+ 0x53, 0xe7, 0xf5, 0x1d, 0x58, 0x12, 0xc1, 0x36, 0x43, 0xc8, 0x93, 0xda,
+ 0x4d, 0xa7, 0xa8, 0x4e, 0x57, 0x31, 0x9d, 0x39, 0x89, 0x1b, 0x33, 0x98,
+ 0xae, 0x33, 0x60, 0x94, 0xd7, 0x1a, 0xdb, 0x0a, 0x65, 0x81, 0x9c, 0xab,
+ 0xeb, 0x1a, 0x79, 0x13, 0xd9, 0xe5, 0xa9, 0x29, 0x58, 0xc2, 0x76, 0x25,
+ 0x9a, 0xce, 0xf9, 0xff, 0xac, 0x2d, 0xc7, 0xa6, 0xd4, 0xd5, 0x33, 0x56,
+ 0x1c, 0xf3, 0x40, 0xde, 0x18, 0x93, 0xe3, 0xd3, 0xb7, 0x2b, 0xd5, 0x19,
+ 0xc3, 0xea, 0xd8, 0x92, 0x75, 0x7c, 0x7f, 0x74, 0xf0, 0xbc, 0x13, 0x95,
+ 0xd8, 0x91, 0xa5, 0x7a, 0xb4, 0x77, 0xf6, 0xd5, 0x06, 0xb2, 0xf4, 0x02,
+ 0xa4, 0x7b, 0xd1, 0x6d, 0x87, 0x74, 0x06, 0x53, 0x70, 0x15, 0xa1, 0x3c,
+ 0xac, 0xee, 0xa7, 0xe3, 0x71, 0xd4, 0xab, 0x8b, 0x62, 0xaa, 0xc9, 0x5d,
+ 0xf0, 0xcf, 0xe4, 0x22, 0xfd, 0xaa, 0x98, 0x8e, 0x7b, 0xab, 0x8e, 0x74,
+ 0xdc, 0x1e, 0x6c, 0xa5, 0xb2, 0xf7, 0x56, 0xb6, 0xd6, 0x8f, 0xf8, 0x4f,
+ 0x6f, 0xf3, 0xe3, 0x0b, 0xda, 0xeb, 0x69, 0x31, 0x2c, 0x26, 0x93, 0x25,
+ 0xba, 0x3e, 0x77, 0xb1, 0x26, 0x48, 0x00, 0xa6, 0xd9, 0x1e, 0x9e, 0x2b,
+ 0xbe, 0x37, 0xe4, 0xd6, 0xe5, 0x25, 0xf0, 0xb0, 0x9e, 0x54, 0xc2, 0x4a,
+ 0xc3, 0x1b, 0x4f, 0x20, 0x3a, 0xf9, 0x0d, 0x37, 0xe2, 0x52, 0x52, 0xe7,
+ 0x8d, 0x45, 0x71, 0x34, 0xc9, 0xed, 0xe8, 0xcf, 0x20, 0x2c, 0x29, 0x60,
+ 0xc9, 0xff, 0xfa, 0xf7, 0x4f, 0xbf, 0xb4, 0x86, 0xd3, 0x08, 0x1d, 0x82,
+ 0x2e, 0x50, 0xfa, 0x31, 0x65, 0x55, 0xd4, 0x55, 0x3a, 0x9d, 0xb0, 0x2f,
+ 0x94, 0xec, 0x47, 0xec, 0x87, 0xe1, 0xc2, 0xd9, 0x73, 0x10, 0x15, 0xc6,
+ 0x0d, 0x94, 0xd6, 0xda, 0x06, 0x38, 0x02, 0x48, 0x35, 0x4d, 0x2f, 0xe0,
+ 0x4f, 0xfc, 0x50, 0x53, 0xba, 0x27, 0x11, 0x63, 0x84, 0x4c, 0x67, 0xd7,
+ 0x2e, 0x5e, 0xcd, 0x70, 0x46, 0x2c, 0xa6, 0xa2, 0xb7, 0x13, 0x41, 0xdf,
+ 0xbe, 0x39, 0x36, 0x61, 0xc9, 0xa5, 0x4c, 0xfc, 0x82, 0xd0, 0xda, 0xe4,
+ 0x5c, 0x1e, 0xbc, 0x83, 0x94, 0x8c, 0xbb, 0x22, 0xf3, 0xc6, 0x3e, 0x28,
+ 0x81, 0x1a, 0xc3, 0x7f, 0xfd, 0xf4, 0xcb, 0xbf, 0xe1, 0xff, 0x7a, 0x77,
+ 0x6a, 0xb9, 0xcc, 0xb4, 0xe8, 0x36, 0xf1, 0x76, 0xc5, 0xfd, 0x25, 0x30,
+ 0x8f, 0x9b, 0x38, 0xbd, 0x49, 0x87, 0xc0, 0xa9, 0x2b, 0x45, 0x95, 0x8d,
+ 0x67, 0x55, 0xb4, 0x3f, 0xcb, 0xa6, 0xd3, 0xac, 0x03, 0x93, 0xf9, 0x7b,
+ 0x7c, 0x2d, 0x3a, 0x92, 0xd7, 0x0c, 0x0c, 0xde, 0x45, 0x51, 0xc2, 0x17,
+ 0xcf, 0x04, 0x76, 0xcb, 0x01, 0x78, 0xb5, 0xbe, 0xfa, 0x88, 0x6a, 0xba,
+ 0x43, 0xed, 0x4d, 0xd9, 0xc9, 0x4f, 0xad, 0x1f, 0x9d, 0x16, 0x7f, 0xe2,
+ 0x97, 0x59, 0x24, 0x53, 0xf4, 0xe0, 0x8c, 0xde, 0x93, 0xe7, 0xba, 0xea,
+ 0x63, 0x14, 0x1f, 0xcf, 0x8d, 0x3b, 0x45, 0x06, 0x0a, 0x3c, 0x04, 0x26,
+ 0x47, 0x9b, 0x0c, 0x1a, 0xe9, 0x23, 0xce, 0x46, 0x84, 0xae, 0x71, 0xbe,
+ 0x6f, 0xa0, 0x4d, 0xef, 0x69, 0xc0, 0x8e, 0xc0, 0x06, 0x5e, 0x1f, 0xf1,
+ 0x20, 0xca, 0xf7, 0x30, 0xcf, 0x35, 0xf5, 0x66, 0x48, 0xed, 0xb0, 0x81,
+ 0x7d, 0x8e, 0xac, 0x24, 0x4b, 0x1a, 0x74, 0x18, 0x7f, 0x33, 0x66, 0x65,
+ 0x24, 0x63, 0xd3, 0x3d, 0xc4, 0xed, 0xb7, 0x4a, 0x48, 0x25, 0x09, 0x82,
+ 0xa7, 0xa4, 0x53, 0xd6, 0x63, 0x83, 0xf8, 0xad, 0xd6, 0x75, 0x20, 0x82,
+ 0x11, 0xb8, 0x0d, 0x9c, 0x32, 0x23, 0x39, 0x49, 0x52, 0x42, 0x91, 0xa7,
+ 0xc6, 0xd5, 0x1e, 0x74, 0x48, 0xd2, 0xe8, 0xec, 0x01, 0x86, 0x9d, 0x11,
+ 0xd7, 0x0a, 0xe1, 0x3b, 0x13, 0x06, 0x1d, 0xa3, 0x4f, 0xe3, 0xdb, 0x94,
+ 0x32, 0x8d, 0xda, 0x79, 0x93, 0x02, 0xda, 0x51, 0xd2, 0x17, 0x87, 0xd1,
+ 0x93, 0xc7, 0x8f, 0x1f, 0x73, 0xc2, 0x48, 0xef, 0x98, 0x26, 0x7e, 0x73,
+ 0x74, 0x78, 0xf2, 0xea, 0xd5, 0xd1, 0xeb, 0xe7, 0x47, 0xcf, 0x35, 0x8b,
+ 0xdb, 0x59, 0xbb, 0x93, 0x6f, 0xe5, 0xc5, 0x6e, 0xb0, 0xde, 0x07, 0x48,
+ 0x63, 0xfb, 0xf1, 0x56, 0xbc, 0xf3, 0x78, 0x2b, 0x9a, 0xa1, 0xe8, 0x55,
+ 0xac, 0x88, 0x64, 0x8a, 0xf8, 0x88, 0xd1, 0xe5, 0x02, 0xcc, 0x19, 0xec,
+ 0xe1, 0x5c, 0x23, 0x22, 0xa6, 0xc2, 0xf7, 0xe7, 0x69, 0x8d, 0x4e, 0xe5,
+ 0xb6, 0x15, 0x83, 0xc5, 0xd4, 0x3d, 0xd3, 0x65, 0xd0, 0xa6, 0x98, 0x89,
+ 0x9d, 0x40, 0x14, 0xbb, 0xb3, 0x85, 0x13, 0x0d, 0xa2, 0x17, 0xa0, 0xe8,
+ 0x4e, 0x8a, 0x0f, 0x4c, 0x9c, 0x87, 0x97, 0x60, 0x9e, 0xa6, 0x7e, 0x72,
+ 0x59, 0xf3, 0x7d, 0x7c, 0x7d, 0x97, 0x5f, 0x0f, 0x37, 0x02, 0xe8, 0xbe,
+ 0x74, 0xb7, 0x35, 0xf9, 0x09, 0x01, 0x15, 0x7f, 0x74, 0x2a, 0x61, 0xf7,
+ 0x72, 0x1e, 0x6f, 0x6d, 0xad, 0x26, 0x01, 0x67, 0xc8, 0x66, 0x66, 0xc9,
+ 0x07, 0x6e, 0x7a, 0x22, 0xad, 0x39, 0x5a, 0x88, 0xd5, 0x0d, 0x3c, 0xd4,
+ 0x2f, 0x9b, 0x68, 0x46, 0xb0, 0x94, 0xb2, 0xf8, 0x70, 0x13, 0x73, 0xb4,
+ 0xd1, 0x77, 0x14, 0x32, 0x28, 0x15, 0x79, 0x4d, 0x4c, 0x96, 0xe8, 0xf1,
+ 0x29, 0x8e, 0xf5, 0xfd, 0xc1, 0x29, 0xbe, 0x19, 0x9d, 0xbe, 0x39, 0xf9,
+ 0xf1, 0x1f, 0x16, 0x29, 0xe6, 0x6a, 0xdb, 0xd4, 0x7b, 0x45, 0x49, 0x20,
+ 0xfa, 0x0e, 0xc4, 0x06, 0xe6, 0x4a, 0x2e, 0xe0, 0x25, 0x62, 0xb7, 0x76,
+ 0xb9, 0xe2, 0x30, 0xb3, 0x0a, 0x76, 0x3a, 0x1b, 0x3b, 0xfd, 0x70, 0xdd,
+ 0x1b, 0x9b, 0x56, 0xa6, 0xce, 0x34, 0xcb, 0xc7, 0x19, 0x77, 0x2e, 0x22,
+ 0x24, 0x07, 0x10, 0xd5, 0x99, 0xe7, 0x64, 0x81, 0x09, 0x29, 0x4c, 0x07,
+ 0x94, 0xf3, 0x88, 0x04, 0xe8, 0x05, 0x75, 0x08, 0xcd, 0xb5, 0xe5, 0x0f,
+ 0x5c, 0xc6, 0x9f, 0xb6, 0x06, 0x83, 0x9d, 0xc7, 0x8f, 0x7f, 0xc1, 0xc0,
+ 0x87, 0xa4, 0x85, 0x5f, 0x97, 0x58, 0x43, 0x95, 0xfb, 0x6e, 0x4f, 0xc5,
+ 0x6a, 0x2f, 0xb1, 0x6b, 0x12, 0x66, 0x54, 0x6b, 0xaf, 0x39, 0xa7, 0xf1,
+ 0x94, 0xce, 0x87, 0x0c, 0x61, 0x4c, 0xac, 0x8c, 0xab, 0xfa, 0x02, 0x25,
+ 0x81, 0xa4, 0x10, 0x63, 0x83, 0x3b, 0x45, 0x6d, 0xfa, 0x2d, 0x2d, 0x8b,
+ 0xd4, 0x4a, 0xec, 0x39, 0xd6, 0x30, 0xd5, 0x02, 0xd3, 0x36, 0x29, 0x0b,
+ 0xc6, 0x86, 0xd6, 0xde, 0xaa, 0xde, 0xea, 0x40, 0x2a, 0x4b, 0x58, 0xe8,
+ 0xaa, 0xc8, 0xc6, 0x0e, 0x9e, 0x12, 0x57, 0xd7, 0x4d, 0x16, 0x95, 0x51,
+ 0x81, 0x8b, 0x51, 0x8d, 0xd8, 0x4d, 0x32, 0xd4, 0x60, 0x19, 0x4f, 0x4e,
+ 0x09, 0xd8, 0x13, 0x15, 0xfc, 0x21, 0x79, 0x9e, 0x9c, 0x4d, 0xe7, 0x2d,
+ 0xc7, 0x35, 0x3d, 0x02, 0x0a, 0xf8, 0x90, 0xe8, 0xf6, 0x8c, 0xb3, 0x0b,
+ 0xd0, 0x59, 0xda, 0x84, 0xb5, 0x00, 0x1d, 0xba, 0xa4, 0xba, 0x5b, 0x0a,
+ 0x5f, 0x51, 0x9e, 0x13, 0x61, 0x5f, 0xce, 0x32, 0xd9, 0x3a, 0xae, 0xd9,
+ 0xb5, 0x58, 0x2f, 0x92, 0xa1, 0x47, 0xdb, 0xd4, 0x0f, 0x68, 0x4a, 0x52,
+ 0xad, 0x46, 0x38, 0xfe, 0xc4, 0xa2, 0xb0, 0xed, 0x18, 0x6d, 0xfb, 0x82,
+ 0xbf, 0x79, 0x4a, 0x87, 0x83, 0xc0, 0xdf, 0x23, 0x49, 0x63, 0xe4, 0xf6,
+ 0x82, 0xa1, 0x6b, 0x5e, 0x22, 0x3f, 0xd6, 0xc1, 0x08, 0x71, 0x44, 0x79,
+ 0x35, 0x96, 0x78, 0x81, 0xf5, 0x4c, 0xae, 0x25, 0x3e, 0x21, 0x96, 0x15,
+ 0x75, 0x81, 0x9b, 0xc8, 0x7b, 0xe8, 0xd3, 0x1d, 0x6c, 0x06, 0xa9, 0x4b,
+ 0x43, 0xf4, 0xbf, 0xd1, 0x06, 0x2a, 0x65, 0xc0, 0x3e, 0x6e, 0xef, 0xf8,
+ 0x78, 0x43, 0x27, 0x6a, 0x1e, 0x51, 0x29, 0x76, 0xd4, 0x44, 0xa0, 0xe2,
+ 0x75, 0x69, 0x39, 0x93, 0x49, 0x16, 0x20, 0x87, 0x38, 0xb2, 0x4d, 0xdf,
+ 0x66, 0xac, 0x42, 0x55, 0x6e, 0x20, 0x26, 0x74, 0x13, 0x2a, 0x97, 0x19,
+ 0x98, 0xcb, 0x9c, 0x4d, 0xc4, 0xce, 0xcc, 0x6a, 0x4d, 0xb1, 0x81, 0xab,
+ 0x8a, 0xe5, 0x2f, 0xe5, 0x8d, 0x1f, 0xb8, 0x55, 0x45, 0x97, 0x30, 0x64,
+ 0x10, 0x3b, 0xb4, 0xba, 0xcd, 0xb7, 0x3e, 0x2f, 0x81, 0x42, 0xca, 0x6c,
+ 0x7a, 0xa3, 0x72, 0x8f, 0x82, 0x04, 0xa6, 0x53, 0x0f, 0xe5, 0xf5, 0xd9,
+ 0x86, 0xd7, 0xfe, 0x8c, 0x8c, 0xab, 0xc8, 0xd7, 0xfd, 0x2a, 0x1b, 0x11,
+ 0x43, 0x46, 0xf9, 0x43, 0xf9, 0xa2, 0x15, 0x5d, 0xf1, 0x7c, 0x1c, 0x6e,
+ 0xfe, 0x11, 0xe0, 0x7d, 0x9f, 0xa7, 0xe3, 0x9b, 0xb7, 0x8a, 0xff, 0x75,
+ 0x7c, 0xda, 0xcd, 0xef, 0x3f, 0x20, 0xbf, 0xa7, 0x17, 0x1c, 0xb6, 0xfe,
+ 0x6c, 0xb0, 0x13, 0xe6, 0xea, 0x7a, 0x90, 0x5d, 0x5c, 0x9d, 0x42, 0x82,
+ 0xdd, 0x8c, 0x5c, 0xf8, 0xb8, 0x00, 0xaf, 0x59, 0xce, 0xed, 0x93, 0x37,
+ 0x3f, 0xe0, 0x06, 0x6e, 0x34, 0x63, 0x91, 0xec, 0x6e, 0x2c, 0x6c, 0x2e,
+ 0xa8, 0xb7, 0x67, 0x32, 0x56, 0x0d, 0x42, 0x3a, 0x49, 0xf9, 0x0e, 0x04,
+ 0xca, 0xdd, 0xc1, 0x75, 0x7c, 0xe0, 0x96, 0xa1, 0x86, 0xcb, 0x34, 0xd3,
+ 0x62, 0xea, 0x72, 0xd1, 0x88, 0x00, 0x69, 0x16, 0xcc, 0xe0, 0x63, 0x48,
+ 0x8e, 0x28, 0xce, 0x10, 0x1c, 0x2a, 0xcf, 0x49, 0x00, 0xb1, 0x25, 0x1b,
+ 0x89, 0x76, 0xc7, 0x7d, 0x26, 0x24, 0xd9, 0x97, 0x77, 0x6b, 0xa9, 0x03,
+ 0xdd, 0xbb, 0x60, 0x0f, 0xea, 0xb7, 0x6a, 0x8f, 0x7e, 0x5f, 0x4a, 0xb4,
+ 0xcd, 0x2f, 0x57, 0xd1, 0x44, 0x82, 0x94, 0xf9, 0x74, 0xf0, 0x64, 0xab,
+ 0x41, 0x9a, 0xc6, 0xd9, 0x12, 0x44, 0xa1, 0x43, 0x7f, 0xe6, 0x8b, 0xe3,
+ 0x97, 0x47, 0x1b, 0xd1, 0x8b, 0xb4, 0x16, 0xf4, 0x1f, 0x2d, 0xd5, 0xc7,
+ 0xc4, 0x9d, 0xff, 0x20, 0xcf, 0x93, 0xe9, 0x71, 0x2d, 0x20, 0x7e, 0xc1,
+ 0xf2, 0x4a, 0x09, 0x32, 0x93, 0x3f, 0x46, 0xa1, 0x84, 0x98, 0x1c, 0xe9,
+ 0x5c, 0xd1, 0xf9, 0xa0, 0xe5, 0x9a, 0x9a, 0x22, 0x2d, 0xe4, 0x1e, 0x28,
+ 0x60, 0x57, 0x78, 0xe5, 0x81, 0xd3, 0x7b, 0xb3, 0xc8, 0x9d, 0x82, 0x0b,
+ 0x5c, 0xb4, 0x80, 0x07, 0x68, 0x06, 0x75, 0x56, 0x01, 0x63, 0xbd, 0xa9,
+ 0x42, 0xb1, 0x23, 0x4a, 0x08, 0x36, 0xe0, 0x56, 0xc4, 0x54, 0x66, 0xc5,
+ 0xd8, 0x76, 0xab, 0x25, 0x5d, 0xae, 0x99, 0xf7, 0x19, 0xb0, 0x9f, 0x8f,
+ 0xc9, 0x7e, 0xa6, 0xe2, 0xb4, 0x87, 0x4e, 0xf8, 0xc3, 0x41, 0x57, 0xa4,
+ 0x9e, 0xe3, 0xd5, 0xa8, 0x45, 0xfd, 0x5f, 0xf0, 0x9f, 0x2b, 0xfc, 0x2b,
+ 0x9c, 0xe7, 0x90, 0xc0, 0xf2, 0x48, 0x83, 0x85, 0x75, 0x8f, 0xd2, 0x38,
+ 0xa9, 0x46, 0x59, 0xe6, 0xd0, 0xce, 0xf7, 0x4a, 0x3b, 0x58, 0x8d, 0xc5,
+ 0xff, 0xdd, 0xfc, 0xa6, 0xb3, 0xb7, 0x15, 0x83, 0xf4, 0x61, 0x81, 0xf6,
+ 0x06, 0x2c, 0x1d, 0x77, 0x42, 0x5e, 0x25, 0x8e, 0x02, 0xca, 0x1d, 0x87,
+ 0xce, 0xf0, 0x7f, 0x5c, 0x75, 0x4d, 0x46, 0x11, 0xcb, 0xc9, 0x0e, 0x7f,
+ 0xab, 0x1a, 0x9e, 0xea, 0x01, 0x15, 0x46, 0xa1, 0xe2, 0x91, 0xa3, 0xc2,
+ 0x62, 0x58, 0x2a, 0xc4, 0x58, 0x97, 0x83, 0xd4, 0x80, 0x1a, 0x04, 0x54,
+ 0x5e, 0x18, 0x9f, 0x16, 0xaf, 0x90, 0x83, 0xaf, 0x8e, 0x5f, 0x1d, 0x09,
+ 0x0e, 0x4f, 0x3a, 0xe6, 0xaa, 0x57, 0xee, 0xa3, 0xc9, 0x27, 0x66, 0x2b,
+ 0x3a, 0xc3, 0xe5, 0x8e, 0x95, 0x36, 0x6a, 0x61, 0xc8, 0xc5, 0xa6, 0xef,
+ 0x92, 0xbb, 0xd5, 0x21, 0x45, 0xd1, 0x2c, 0x16, 0x65, 0x9c, 0xe8, 0xc6,
+ 0x1f, 0xee, 0x0a, 0xbb, 0x20, 0xf3, 0xfe, 0x51, 0x55, 0x7b, 0xad, 0xe2,
+ 0x81, 0x96, 0x25, 0x4d, 0x2e, 0xa6, 0x20, 0x3a, 0xa7, 0x54, 0xa1, 0x6e,
+ 0xfc, 0xfd, 0x09, 0x91, 0x61, 0xbb, 0x6c, 0x39, 0xb9, 0x6e, 0x7e, 0x57,
+ 0xd5, 0x68, 0x6c, 0xfc, 0xf8, 0x49, 0x28, 0xb6, 0x8e, 0xa9, 0x5a, 0x98,
+ 0x5b, 0x64, 0x92, 0xa2, 0x40, 0x3d, 0xb2, 0x4e, 0x86, 0xd4, 0x39, 0x6a,
+ 0xed, 0xf2, 0xe8, 0x60, 0xe0, 0x04, 0x72, 0xab, 0xc4, 0xc9, 0x85, 0xe8,
+ 0x2b, 0x89, 0xc2, 0xaf, 0x28, 0xa9, 0xe0, 0x7b, 0x97, 0x89, 0x93, 0x72,
+ 0x90, 0x4b, 0x2f, 0x75, 0x5b, 0xb2, 0xd2, 0x95, 0x38, 0x5d, 0xe4, 0x9a,
+ 0x1a, 0x7a, 0xad, 0xb5, 0x33, 0x7d, 0x01, 0xe1, 0xfa, 0xc0, 0x8f, 0x4c,
+ 0x09, 0xcd, 0xc5, 0xc1, 0xa1, 0x08, 0x24, 0xe3, 0xb5, 0xdc, 0xe8, 0xee,
+ 0xe8, 0xcd, 0x80, 0x1d, 0x7a, 0x1b, 0xe1, 0x48, 0x29, 0x09, 0x90, 0xda,
+ 0x3a, 0x81, 0xc2, 0x38, 0x7a, 0xef, 0x15, 0xd2, 0x50, 0x5b, 0xd9, 0x05,
+ 0x39, 0x38, 0x93, 0xdc, 0x5d, 0x9e, 0x56, 0x27, 0xc0, 0x89, 0x71, 0x63,
+ 0x15, 0xb3, 0x31, 0x14, 0xad, 0x11, 0x35, 0xb1, 0xe3, 0x63, 0xa7, 0x37,
+ 0x52, 0xde, 0xa9, 0xcc, 0x5a, 0x3d, 0x97, 0x88, 0x5c, 0x47, 0xce, 0xd3,
+ 0xb4, 0xc4, 0xe3, 0x47, 0xc0, 0x75, 0x4c, 0x3a, 0xb9, 0x96, 0x16, 0x62,
+ 0x6d, 0x76, 0x54, 0xa2, 0xb6, 0x4e, 0xc1, 0xcd, 0x37, 0xe9, 0xac, 0xa0,
+ 0xa6, 0x77, 0xf6, 0x93, 0xd5, 0xaa, 0x44, 0x10, 0x27, 0x71, 0x46, 0x21,
+ 0xa2, 0x84, 0xac, 0x0c, 0x89, 0xb6, 0xcb, 0x7d, 0xaa, 0xe0, 0x11, 0xb6,
+ 0x24, 0x43, 0x32, 0xf8, 0xb0, 0x21, 0xb2, 0xd5, 0x5f, 0xc8, 0x42, 0xe8,
+ 0xb3, 0xe2, 0xb8, 0x07, 0xec, 0xa6, 0x5d, 0xfb, 0xf8, 0x7d, 0x51, 0xd5,
+ 0x7b, 0x3d, 0xf2, 0x5c, 0xb1, 0xfb, 0x57, 0xf0, 0x72, 0x9b, 0x34, 0xc3,
+ 0xa6, 0x08, 0x30, 0x51, 0x69, 0x15, 0x47, 0xae, 0xa9, 0xc8, 0xb7, 0x80,
+ 0xf4, 0x73, 0x8c, 0x35, 0xe5, 0x63, 0x54, 0x18, 0xe4, 0x22, 0x81, 0xf4,
+ 0x83, 0x95, 0xc5, 0xdf, 0x47, 0xbd, 0x1f, 0xe3, 0xc3, 0x85, 0xc7, 0xca,
+ 0x61, 0x05, 0xf1, 0xf7, 0x34, 0xe4, 0x5f, 0x7a, 0x26, 0xdf, 0x8b, 0x1f,
+ 0xb5, 0xbf, 0x82, 0xd5, 0x7f, 0x11, 0xaa, 0xd4, 0xe3, 0xd0, 0x91, 0x6d,
+ 0x55, 0x49, 0x96, 0x96, 0x2c, 0x90, 0x3a, 0xbd, 0x8d, 0xc7, 0x9b, 0x6a,
+ 0x2d, 0x11, 0x1b, 0xa1, 0xfa, 0xe1, 0x2e, 0xe8, 0x4e, 0x50, 0x02, 0xd0,
+ 0xb6, 0x83, 0x05, 0xc4, 0xc5, 0x24, 0x26, 0xbc, 0x0b, 0x50, 0xb9, 0xde,
+ 0x63, 0xf9, 0x20, 0xed, 0x1b, 0xd3, 0x15, 0xb5, 0x98, 0x26, 0xce, 0x30,
+ 0x1e, 0x8b, 0xff, 0xb2, 0xf2, 0x04, 0x2f, 0x17, 0x62, 0x09, 0xf1, 0x2b,
+ 0x66, 0x0e, 0x9f, 0xe6, 0x9e, 0xe4, 0x2a, 0xd2, 0xfb, 0x79, 0x7a, 0xcd,
+ 0x90, 0x02, 0xd8, 0x24, 0x4a, 0xb0, 0x6d, 0x02, 0xac, 0x97, 0xb0, 0x6e,
+ 0xfa, 0xec, 0xdd, 0x26, 0xf0, 0xf3, 0x19, 0xe7, 0x38, 0x51, 0xda, 0xd9,
+ 0x62, 0xae, 0xed, 0xeb, 0xa5, 0xd4, 0x09, 0xa3, 0xd6, 0xa9, 0xe9, 0xae,
+ 0x05, 0x12, 0xca, 0xc3, 0x0d, 0x03, 0xa1, 0x31, 0x53, 0xd3, 0x0c, 0x3f,
+ 0x8d, 0x2a, 0x9d, 0x88, 0xd7, 0x1a, 0xda, 0x43, 0xee, 0x84, 0x02, 0xbf,
+ 0xa6, 0xd2, 0xdb, 0x52, 0xfb, 0xa8, 0x45, 0xd8, 0xe6, 0xa0, 0x0d, 0x53,
+ 0xbc, 0xc0, 0x4a, 0x1e, 0x49, 0x05, 0x15, 0x11, 0x85, 0x8d, 0x19, 0xb0,
+ 0x3b, 0x39, 0x41, 0xf0, 0x90, 0x74, 0x74, 0xc2, 0xfc, 0x5d, 0x78, 0x09,
+ 0x8d, 0xec, 0x23, 0x34, 0x19, 0x6b, 0xe4, 0x0a, 0xe8, 0x30, 0xd6, 0xda,
+ 0x3b, 0x60, 0xaf, 0xdf, 0x18, 0xa8, 0xae, 0xaa, 0xbe, 0x41, 0xc5, 0xc5,
+ 0x00, 0x2e, 0xe6, 0xbe, 0xe9, 0x6f, 0x71, 0x75, 0x6c, 0xad, 0x1c, 0x1d,
+ 0xac, 0x38, 0x4f, 0xb2, 0x1c, 0xfb, 0x6d, 0x48, 0x73, 0x48, 0xe9, 0x97,
+ 0xf5, 0x4d, 0x2c, 0xd0, 0xab, 0x21, 0x8a, 0x23, 0xd0, 0x25, 0xe7, 0x50,
+ 0xb9, 0xf4, 0xd1, 0xa0, 0x99, 0x36, 0x7d, 0x56, 0x8f, 0x5d, 0x15, 0x52,
+ 0x35, 0xa1, 0x29, 0xa6, 0xa5, 0x3a, 0xc9, 0xaa, 0x33, 0x02, 0x71, 0x05,
+ 0x0b, 0x2a, 0x86, 0xbd, 0x9a, 0x45, 0x60, 0xa0, 0x4f, 0xb3, 0x1a, 0x2d,
+ 0x88, 0xd1, 0x65, 0x2a, 0xc9, 0xd0, 0xec, 0xa6, 0xe1, 0x7d, 0x0c, 0x9a,
+ 0x70, 0xc4, 0x0a, 0xd4, 0xee, 0x63, 0x81, 0x48, 0x62, 0x4d, 0xd8, 0xda,
+ 0x9e, 0xc4, 0x56, 0xa8, 0xa1, 0xd8, 0x0b, 0x58, 0xec, 0x5e, 0xaf, 0x1f,
+ 0xf5, 0xce, 0x0b, 0xf8, 0x4f, 0x9b, 0x57, 0x3c, 0x87, 0x7b, 0xbc, 0xc7,
+ 0xbd, 0xd4, 0x7b, 0x67, 0x0c, 0x13, 0x8a, 0xff, 0x9c, 0x15, 0xe8, 0xf7,
+ 0xaa, 0x4d, 0x1f, 0xdd, 0x46, 0x88, 0x85, 0xf5, 0x87, 0xf0, 0xad, 0x32,
+ 0x36, 0x4c, 0x50, 0x1c, 0x72, 0x23, 0x29, 0xd5, 0xbf, 0x63, 0xab, 0xe8,
+ 0x10, 0x17, 0x68, 0xf0, 0x27, 0x6b, 0x15, 0x73, 0x1a, 0x50, 0xee, 0x61,
+ 0xcb, 0x30, 0xee, 0x73, 0x4b, 0x8d, 0xdf, 0x7d, 0x1a, 0x3a, 0x83, 0x84,
+ 0xeb, 0x71, 0x51, 0x15, 0x86, 0x7d, 0x68, 0x83, 0x97, 0xec, 0x31, 0xe6,
+ 0x68, 0x8a, 0x51, 0x41, 0xe1, 0x8d, 0xc4, 0x0b, 0x89, 0xc5, 0x47, 0x1d,
+ 0x53, 0x6b, 0x8c, 0x58, 0x58, 0xa0, 0xfe, 0x13, 0xc1, 0x63, 0xfa, 0x6e,
+ 0xbd, 0x85, 0xe1, 0xbe, 0x16, 0xfc, 0xb9, 0x4d, 0x67, 0x3c, 0x79, 0xd4,
+ 0x89, 0x6b, 0xff, 0xc3, 0xc1, 0x9b, 0xd7, 0xc7, 0xaf, 0xbf, 0xdb, 0xb3,
+ 0x62, 0x8b, 0x85, 0x98, 0xd4, 0xff, 0x59, 0xb3, 0x11, 0xcf, 0x1b, 0x7f,
+ 0x83, 0xaa, 0xdf, 0xd4, 0xf4, 0x27, 0x0e, 0xea, 0x75, 0xc0, 0xa1, 0x59,
+ 0xfc, 0x72, 0xce, 0x4e, 0x99, 0x72, 0x82, 0x2b, 0x7b, 0xf1, 0x14, 0xd2,
+ 0x48, 0x40, 0x12, 0x69, 0x37, 0x6a, 0x6c, 0x82, 0x1e, 0x3a, 0xf3, 0xf8,
+ 0x25, 0xe9, 0xf7, 0x08, 0x17, 0xe2, 0x58, 0xd4, 0x78, 0x9b, 0xa7, 0x74,
+ 0x77, 0x0a, 0xf7, 0xfa, 0x0c, 0x53, 0x02, 0xb3, 0x4b, 0xb9, 0xda, 0x81,
+ 0x08, 0x2c, 0x50, 0x7f, 0x50, 0xb1, 0xd4, 0xa7, 0x00, 0x05, 0x48, 0xc0,
+ 0x8c, 0xa4, 0x6a, 0x81, 0x0a, 0x2c, 0xa2, 0x6b, 0xc0, 0xdb, 0x55, 0x46,
+ 0x6e, 0x2d, 0x67, 0x3f, 0x0c, 0x79, 0x06, 0xca, 0xf6, 0x78, 0xa3, 0x46,
+ 0xc9, 0x82, 0xf9, 0x0c, 0x37, 0x61, 0x93, 0x9f, 0x5a, 0xcc, 0x24, 0xb3,
+ 0x05, 0x3e, 0x14, 0x89, 0xab, 0xd0, 0x7f, 0x3c, 0x18, 0x49, 0x57, 0x80,
+ 0x9b, 0x24, 0xe6, 0x0b, 0x0c, 0xe4, 0xc4, 0xaf, 0x81, 0xdd, 0xed, 0x45,
+ 0xff, 0x59, 0xa4, 0x2b, 0xc4, 0xa9, 0xe1, 0xf5, 0xb7, 0x60, 0x70, 0xc6,
+ 0x07, 0x17, 0x24, 0x74, 0x6e, 0xd2, 0x2a, 0x9e, 0x13, 0xef, 0xd9, 0xdc,
+ 0xd9, 0xda, 0xda, 0x5a, 0x6d, 0x20, 0xd6, 0x20, 0x56, 0x79, 0xe5, 0x1b,
+ 0xd5, 0x64, 0x57, 0xee, 0x0c, 0x7b, 0xa0, 0x98, 0x02, 0x71, 0x72, 0x91,
+ 0x2a, 0xd0, 0x40, 0xca, 0x11, 0x72, 0xc4, 0x65, 0x76, 0xb1, 0x06, 0x2e,
+ 0xf9, 0x20, 0xa6, 0xf3, 0x68, 0x1f, 0x1d, 0x2d, 0x17, 0x45, 0x79, 0xf3,
+ 0xb5, 0xd7, 0x04, 0x11, 0x45, 0x6a, 0x84, 0x0f, 0x09, 0x29, 0x62, 0xbe,
+ 0x36, 0xe7, 0x9b, 0x48, 0x56, 0xaf, 0x3d, 0x21, 0xed, 0xb9, 0xe7, 0x20,
+ 0x43, 0x06, 0xbb, 0x16, 0xea, 0x64, 0x1d, 0x8d, 0x7e, 0xad, 0xb8, 0xaa,
+ 0x1c, 0x20, 0x13, 0x2e, 0xd8, 0x55, 0xf3, 0x9a, 0xc4, 0x38, 0xe9, 0x74,
+ 0x24, 0x00, 0xb0, 0x9d, 0x49, 0xe1, 0x09, 0xea, 0x1a, 0xcb, 0x80, 0x1a,
+ 0x0b, 0xd4, 0xa1, 0xc3, 0x06, 0x98, 0xae, 0x0b, 0xbf, 0xae, 0x3d, 0x21,
+ 0x6d, 0x13, 0xb1, 0x4e, 0x6c, 0x2d, 0xc5, 0xdf, 0x19, 0x5a, 0xbf, 0x19,
+ 0x03, 0xcb, 0x76, 0x35, 0x1a, 0xda, 0x1e, 0x0c, 0xc7, 0xb0, 0xbd, 0xe3,
+ 0x69, 0x68, 0x7c, 0xcf, 0x6b, 0x60, 0x10, 0xc6, 0x3a, 0xb8, 0xcd, 0x9f,
+ 0x83, 0xc3, 0xc1, 0x0c, 0xdd, 0x34, 0xe2, 0x9a, 0xde, 0x0d, 0xff, 0x21,
+ 0x6c, 0xe5, 0x7c, 0x31, 0x9c, 0x8d, 0x1f, 0x47, 0xfb, 0xf0, 0x87, 0x67,
+ 0x5f, 0x9f, 0x31, 0xf8, 0xc4, 0x21, 0xa6, 0x3a, 0xa2, 0x10, 0x40, 0x5d,
+ 0x55, 0x1c, 0xd4, 0x9c, 0xda, 0x80, 0x7f, 0xdd, 0xdd, 0x09, 0x84, 0x01,
+ 0xc8, 0x57, 0x1e, 0x6e, 0x6d, 0x61, 0x6b, 0xdc, 0xf1, 0x38, 0xb7, 0x77,
+ 0x9e, 0xa1, 0xb3, 0x3c, 0x7a, 0xf5, 0xfc, 0x31, 0x4b, 0xf0, 0x6a, 0x31,
+ 0x53, 0x45, 0x30, 0x62, 0x44, 0x04, 0x66, 0x6a, 0x1e, 0xe4, 0x37, 0x2c,
+ 0x7c, 0x9a, 0x8d, 0x10, 0x41, 0xb2, 0xaf, 0xba, 0xc6, 0xc4, 0xe4, 0x8d,
+ 0x3b, 0x01, 0x50, 0x53, 0xe6, 0x4d, 0xa5, 0x59, 0x52, 0x78, 0xe9, 0x53,
+ 0x2a, 0x7c, 0x3f, 0x4c, 0x8d, 0x51, 0xe3, 0x7a, 0x74, 0x19, 0xae, 0x86,
+ 0x76, 0xb6, 0xeb, 0x13, 0x56, 0x43, 0x77, 0x1e, 0xb3, 0x9d, 0x3d, 0x7d,
+ 0x3c, 0xda, 0x1e, 0x3d, 0xfa, 0x72, 0x6b, 0x67, 0xeb, 0xc9, 0xa3, 0xad,
+ 0xe4, 0x71, 0x32, 0xdc, 0x9a, 0xec, 0x6c, 0xed, 0x3e, 0x7a, 0xf6, 0xf8,
+ 0xd1, 0x68, 0x77, 0x67, 0x3b, 0x79, 0x16, 0x55, 0x2b, 0xa5, 0x5d, 0xcb,
+ 0xc8, 0xd5, 0x65, 0xb2, 0x03, 0xa6, 0xb8, 0x4f, 0x1f, 0xfc, 0x8b, 0x68,
+ 0x9f, 0xff, 0x1b, 0xa6, 0x12, 0x22, 0x92, 0x4e, 0x1a, 0x49, 0xa2, 0x6f,
+ 0x09, 0xfc, 0x2a, 0x56, 0x7c, 0xb6, 0xb3, 0xef, 0x0f, 0x70, 0x48, 0xb0,
+ 0xb9, 0x2f, 0xbb, 0xbc, 0xcc, 0xcd, 0xc3, 0x77, 0xcf, 0x7b, 0x10, 0x1d,
+ 0x76, 0x9f, 0x77, 0x28, 0x62, 0x14, 0x38, 0x7d, 0x9a, 0x3a, 0xed, 0x3a,
+ 0x6e, 0x06, 0xa8, 0x14, 0xb7, 0xa3, 0xd4, 0xbc, 0x54, 0x26, 0xb0, 0xcd,
+ 0xe9, 0x00, 0x8e, 0x6b, 0x06, 0x7e, 0x51, 0x55, 0x97, 0x3b, 0xac, 0xea,
+ 0x75, 0x64, 0x7d, 0x63, 0xbc, 0x42, 0xc2, 0x70, 0x64, 0x19, 0x9c, 0x9d,
+ 0x7d, 0xaf, 0x4d, 0x93, 0xaa, 0xa5, 0xe4, 0x26, 0xbb, 0xff, 0xfb, 0xf7,
+ 0xb5, 0x6f, 0xce, 0xff, 0xfa, 0xf9, 0xdf, 0xdf, 0xbf, 0x3a, 0xff, 0xdb,
+ 0x87, 0x57, 0xdf, 0xfd, 0x6d, 0xfb, 0xe4, 0xf9, 0x78, 0xf6, 0xea, 0xd7,
+ 0xbf, 0xed, 0xbe, 0xfa, 0x75, 0xf4, 0xdb, 0x3f, 0x7e, 0x3d, 0xb8, 0x39,
+ 0x39, 0xff, 0xc7, 0xe3, 0x57, 0xb3, 0x37, 0xef, 0x5f, 0xfd, 0xfa, 0xf7,
+ 0xd9, 0xeb, 0xe7, 0x7f, 0xfb, 0xea, 0x7e, 0xf4, 0x07, 0x94, 0xdd, 0xec,
+ 0xc8, 0xb3, 0xd5, 0x8a, 0x76, 0xa0, 0x1c, 0xda, 0x37, 0x1d, 0x25, 0x82,
+ 0xde, 0x40, 0xea, 0x16, 0xe6, 0x9a, 0x45, 0xda, 0x4b, 0xe3, 0xfb, 0xb3,
+ 0x73, 0x9b, 0x4f, 0x6b, 0xd2, 0x66, 0x35, 0x3b, 0x25, 0x50, 0xf0, 0x4f,
+ 0x26, 0xd3, 0x1c, 0x54, 0x58, 0x0e, 0x10, 0x10, 0xf2, 0x29, 0x57, 0x2e,
+ 0xf1, 0x58, 0x23, 0x44, 0x92, 0x13, 0x5f, 0x70, 0x23, 0x05, 0x24, 0x8a,
+ 0x0e, 0x50, 0x27, 0x6c, 0x1b, 0x57, 0x82, 0xdc, 0x90, 0xba, 0x3d, 0xa1,
+ 0xa5, 0x99, 0x02, 0x8d, 0x84, 0xe2, 0x23, 0xb9, 0xb2, 0x0e, 0x3b, 0xdb,
+ 0x39, 0x83, 0xbc, 0xb6, 0xed, 0x13, 0xa5, 0x66, 0xde, 0x06, 0xfe, 0x8b,
+ 0xdd, 0xca, 0xe1, 0x08, 0x98, 0xc5, 0xe8, 0x61, 0x08, 0x78, 0xac, 0xfe,
+ 0xc1, 0xad, 0x82, 0xf3, 0x91, 0x0a, 0x01, 0x9b, 0xc3, 0x4b, 0xed, 0xef,
+ 0xd4, 0xe3, 0x82, 0xc7, 0x12, 0xda, 0x14, 0x8d, 0x89, 0x64, 0x5c, 0x24,
+ 0xc4, 0x0d, 0x52, 0xcd, 0x96, 0x90, 0x97, 0x74, 0x31, 0xbf, 0x28, 0x93,
+ 0x71, 0xda, 0x4a, 0x11, 0x0e, 0x96, 0x80, 0xd2, 0xa9, 0x0d, 0xa2, 0x23,
+ 0x34, 0x35, 0x9d, 0x8d, 0x05, 0x99, 0x0d, 0x32, 0x15, 0x3f, 0x90, 0x7c,
+ 0x43, 0xe3, 0x0c, 0x28, 0x1f, 0x61, 0x4d, 0xa7, 0xd9, 0x84, 0xdd, 0xdf,
+ 0xa0, 0x79, 0x07, 0x12, 0xdf, 0x9c, 0x76, 0x02, 0xb2, 0x06, 0x0e, 0x68,
+ 0x46, 0x53, 0xb0, 0xc8, 0xe0, 0xd7, 0xd2, 0x4a, 0x2d, 0xb0, 0x53, 0x67,
+ 0xa6, 0xf6, 0xb2, 0xd7, 0x73, 0x36, 0x7f, 0x1d, 0x63, 0xbf, 0x82, 0x60,
+ 0xb8, 0x61, 0xc3, 0xec, 0xd2, 0x98, 0x65, 0x53, 0x7b, 0xb6, 0x79, 0x86,
+ 0x26, 0x39, 0xe8, 0x68, 0xeb, 0xa9, 0x55, 0x08, 0x36, 0x6c, 0x9b, 0xca,
+ 0x36, 0x99, 0x3e, 0x19, 0xa1, 0xd3, 0xaa, 0x9b, 0x61, 0x2c, 0x5f, 0x4f,
+ 0x16, 0x61, 0xc7, 0x65, 0x72, 0x36, 0x9b, 0x8f, 0x8c, 0x6a, 0xbf, 0x0b,
+ 0x9f, 0x21, 0x25, 0x93, 0xef, 0xc7, 0x9c, 0x02, 0xfd, 0x9a, 0x3a, 0x3c,
+ 0x12, 0x01, 0x7f, 0x87, 0x87, 0xb1, 0xca, 0x77, 0xee, 0xd3, 0x01, 0x08,
+ 0xca, 0xf0, 0x70, 0xe0, 0xab, 0x2b, 0xbe, 0x1c, 0xbf, 0x6a, 0xf6, 0x13,
+ 0x7d, 0xd4, 0xe2, 0x18, 0x30, 0xde, 0xd6, 0xe0, 0xcb, 0x70, 0x58, 0xb4,
+ 0xd9, 0x80, 0x0d, 0x91, 0x68, 0x0d, 0x96, 0x32, 0x59, 0x7e, 0x84, 0x47,
+ 0x01, 0xa7, 0x80, 0x7d, 0xee, 0xb4, 0xe8, 0xcd, 0x3b, 0x31, 0x7c, 0x72,
+ 0x13, 0x9f, 0x20, 0x77, 0x59, 0xe2, 0x94, 0xc7, 0x19, 0xd7, 0x90, 0xc1,
+ 0xa0, 0x66, 0x43, 0xb6, 0xe4, 0x62, 0x4c, 0xc9, 0x1a, 0x0d, 0x75, 0xeb,
+ 0xd4, 0x9c, 0x3e, 0x6b, 0x9f, 0x0a, 0x18, 0xba, 0xd3, 0x76, 0x43, 0x51,
+ 0xa2, 0x33, 0x38, 0x62, 0x8c, 0x71, 0xf1, 0xd4, 0x1e, 0x02, 0x26, 0x2f,
+ 0x85, 0x0b, 0x76, 0xd9, 0x9c, 0xe6, 0x96, 0xdd, 0x74, 0x25, 0xe7, 0x89,
+ 0xa6, 0x57, 0x15, 0xd7, 0xb9, 0xdc, 0x57, 0x02, 0xfb, 0x4d, 0xd8, 0x7c,
+ 0xed, 0xfe, 0x58, 0x44, 0x18, 0xe4, 0xf8, 0x64, 0x67, 0xbd, 0xdc, 0x13,
+ 0xf4, 0xe9, 0x2f, 0x8d, 0x91, 0xf2, 0xd9, 0x3c, 0x70, 0x62, 0xb4, 0x8c,
+ 0xba, 0xb2, 0x6e, 0x25, 0x8b, 0x59, 0x8d, 0x00, 0xf1, 0xe9, 0xed, 0xc1,
+ 0x76, 0x5f, 0xfe, 0xba, 0x23, 0x51, 0x2d, 0xfc, 0xfb, 0x6e, 0x33, 0x38,
+ 0xda, 0xa4, 0xcb, 0xad, 0xbe, 0x79, 0x79, 0x6b, 0x69, 0x77, 0x40, 0x43,
+ 0x9d, 0xca, 0x28, 0x0d, 0x51, 0xc2, 0x9b, 0x6e, 0xcc, 0x80, 0x0b, 0xe4,
+ 0x7d, 0xe7, 0xb3, 0xe3, 0xb8, 0xe7, 0xde, 0x6c, 0xd8, 0xa7, 0xc7, 0x1d,
+ 0x68, 0x59, 0x18, 0xdb, 0x5d, 0xe6, 0x9d, 0x22, 0xd8, 0xab, 0xef, 0x39,
+ 0x8e, 0xbc, 0xfa, 0x9e, 0xe3, 0x49, 0xd9, 0xad, 0x86, 0x13, 0x08, 0xf6,
+ 0x24, 0xb5, 0xa8, 0x9f, 0xde, 0xb5, 0x30, 0x3d, 0x49, 0xe5, 0x7d, 0x67,
+ 0xb4, 0x1d, 0x49, 0x97, 0x95, 0x7f, 0x21, 0xda, 0x2b, 0xd8, 0x99, 0x18,
+ 0xdf, 0x00, 0x62, 0xbf, 0x48, 0x43, 0xb0, 0x2e, 0x7a, 0xe2, 0x2d, 0xc6,
+ 0x03, 0xe3, 0xde, 0x85, 0xf1, 0x04, 0x8e, 0x76, 0x7b, 0x70, 0xdb, 0xc5,
+ 0xc1, 0x35, 0x7f, 0xaa, 0x13, 0xd9, 0x5e, 0x15, 0xad, 0x75, 0xab, 0x1f,
+ 0x39, 0xc7, 0x69, 0xb7, 0x12, 0xef, 0x61, 0xd7, 0xc1, 0x2c, 0x6d, 0x16,
+ 0xdd, 0x20, 0x3c, 0xf7, 0x68, 0xba, 0x4e, 0xa6, 0x7d, 0xc0, 0x74, 0x52,
+ 0xee, 0x65, 0x6c, 0x1d, 0x8d, 0x77, 0xac, 0x77, 0xb8, 0x85, 0x94, 0x25,
+ 0x92, 0x55, 0xd5, 0x22, 0x95, 0x42, 0x68, 0xe4, 0xc8, 0x58, 0xa4, 0xe5,
+ 0xba, 0x33, 0xab, 0xa0, 0x87, 0x92, 0xf8, 0xe6, 0x8e, 0x11, 0x08, 0xf4,
+ 0x4f, 0xdc, 0xe7, 0xb7, 0xac, 0xa1, 0x0c, 0x34, 0x43, 0x4b, 0xcc, 0x8c,
+ 0x88, 0x16, 0x17, 0x45, 0x5d, 0xab, 0xe3, 0x28, 0x27, 0xa3, 0xc8, 0x0b,
+ 0xb4, 0x9a, 0x60, 0xcf, 0x57, 0x3a, 0x55, 0x85, 0xa0, 0xfe, 0x18, 0xfa,
+ 0x4a, 0xae, 0x13, 0x30, 0x97, 0x48, 0xc7, 0x32, 0x6b, 0xf4, 0xcc, 0x72,
+ 0x14, 0x22, 0xe3, 0x42, 0xdf, 0x6d, 0x40, 0x3f, 0xc2, 0xeb, 0xd2, 0x6d,
+ 0x3b, 0xbd, 0x28, 0xa8, 0xda, 0x74, 0x1c, 0xd9, 0xdc, 0xa1, 0x50, 0xb0,
+ 0x84, 0x68, 0x58, 0xb4, 0xc2, 0x56, 0x33, 0xde, 0x65, 0x95, 0x5e, 0x1d,
+ 0xb7, 0xad, 0x5d, 0x2d, 0xe0, 0x52, 0x79, 0xfb, 0xd0, 0x5b, 0xc2, 0xa2,
+ 0x4b, 0x3c, 0x78, 0xb3, 0xdc, 0xe7, 0x9a, 0xf8, 0x4b, 0x5d, 0x9d, 0x8d,
+ 0xb5, 0xe4, 0x45, 0xf7, 0x26, 0x28, 0x65, 0x74, 0xd3, 0xc1, 0x22, 0x07,
+ 0x15, 0x63, 0x4a, 0x9d, 0x87, 0x8d, 0x95, 0x7a, 0x8d, 0xc6, 0x01, 0xd9,
+ 0xa8, 0xb5, 0x6d, 0x4e, 0xc0, 0x67, 0x3c, 0x08, 0xe1, 0x0a, 0x76, 0x71,
+ 0xcf, 0x0e, 0x6e, 0xd9, 0xb8, 0xa4, 0x9d, 0x5c, 0x71, 0x67, 0xe9, 0x35,
+ 0xbc, 0x17, 0x7f, 0xdc, 0x09, 0xba, 0xf2, 0x98, 0xc6, 0xfb, 0x0a, 0x4c,
+ 0xc1, 0x08, 0x2b, 0x34, 0x86, 0xa1, 0x5c, 0x73, 0x3b, 0x5a, 0xd4, 0xe9,
+ 0x51, 0x30, 0x51, 0xab, 0x03, 0x18, 0x48, 0x43, 0x5a, 0x3d, 0x27, 0x38,
+ 0x3f, 0x0e, 0xdd, 0x77, 0xd1, 0x20, 0xe9, 0x75, 0xb7, 0x54, 0xc3, 0x18,
+ 0x24, 0xea, 0xde, 0x90, 0x0a, 0x3a, 0xcf, 0x2a, 0x92, 0x55, 0xda, 0x46,
+ 0x97, 0xc2, 0x27, 0xf6, 0xcc, 0x3b, 0x1d, 0x29, 0x68, 0x82, 0x1e, 0x4c,
+ 0xdc, 0x8a, 0x3c, 0x23, 0x32, 0x12, 0x21, 0x01, 0xcb, 0xfe, 0x64, 0x4e,
+ 0xae, 0x86, 0x29, 0x31, 0xaa, 0x18, 0x01, 0xb6, 0xed, 0x04, 0x81, 0xfd,
+ 0xd9, 0x1e, 0xec, 0x60, 0x34, 0x53, 0x00, 0x67, 0x38, 0xe1, 0xe0, 0x12,
+ 0xbb, 0xab, 0x1b, 0x9b, 0x57, 0x88, 0x93, 0x14, 0x41, 0xa7, 0x22, 0x24,
+ 0xdc, 0x2d, 0x1b, 0xb1, 0x6a, 0x08, 0x4d, 0x77, 0xc4, 0xa0, 0xf9, 0xbc,
+ 0x61, 0x7a, 0xb2, 0x32, 0x14, 0xb9, 0x82, 0xe5, 0xce, 0xd6, 0xd3, 0xea,
+ 0x0a, 0xd6, 0x70, 0xab, 0x40, 0xdc, 0xf9, 0x44, 0xe2, 0x70, 0xe7, 0xe3,
+ 0x54, 0xc2, 0x5d, 0x21, 0x7f, 0x60, 0x3d, 0xc9, 0x74, 0x0e, 0x9f, 0xaf,
+ 0xa3, 0x1a, 0x66, 0x1f, 0xc0, 0xe8, 0x25, 0xe3, 0xd5, 0x5e, 0xe8, 0x3b,
+ 0xdf, 0x67, 0xbd, 0xc2, 0xbe, 0xf3, 0xc7, 0xde, 0x68, 0xe7, 0x4a, 0x13,
+ 0x4d, 0xda, 0x4b, 0x2d, 0xc2, 0xb5, 0x29, 0xcc, 0xbb, 0xef, 0xb5, 0xc7,
+ 0xa5, 0x96, 0xdc, 0xf3, 0xdd, 0x38, 0xd0, 0xca, 0x40, 0x2e, 0xfb, 0x9f,
+ 0xfe, 0x24, 0xe1, 0xb9, 0x3f, 0xfd, 0x69, 0xaf, 0x6d, 0xfc, 0x62, 0xda,
+ 0x65, 0x99, 0xcd, 0xa8, 0xe7, 0xef, 0x20, 0x7a, 0xce, 0x69, 0x00, 0x8c,
+ 0x1b, 0xe5, 0x39, 0x44, 0x40, 0x26, 0x8d, 0x17, 0xe1, 0xea, 0x82, 0x63,
+ 0xed, 0x6e, 0xe9, 0x4a, 0x72, 0x1a, 0x85, 0x76, 0x6f, 0xd7, 0xc4, 0xd8,
+ 0xd0, 0x43, 0x28, 0xbc, 0xe1, 0xed, 0x9b, 0x97, 0x7d, 0x11, 0x7c, 0x85,
+ 0x07, 0x83, 0x34, 0x9d, 0x2a, 0x80, 0x5b, 0x9a, 0x94, 0xd3, 0x4c, 0x2e,
+ 0x97, 0x92, 0x71, 0x35, 0xd0, 0x71, 0x91, 0xc8, 0x29, 0x6e, 0x81, 0x51,
+ 0x5f, 0x46, 0x4c, 0x04, 0xdb, 0x2f, 0x70, 0xdb, 0xcf, 0x64, 0xf7, 0xf1,
+ 0xfb, 0x26, 0xda, 0x94, 0x17, 0xeb, 0x08, 0x07, 0x6d, 0xde, 0x22, 0x9b,
+ 0x83, 0xdd, 0x8f, 0x2f, 0xd8, 0x0a, 0x6c, 0x4b, 0x41, 0x6c, 0xfc, 0xb0,
+ 0x34, 0x1f, 0x5b, 0x12, 0x89, 0xa4, 0x43, 0xaf, 0xf1, 0x68, 0x58, 0x76,
+ 0x73, 0x30, 0xad, 0xe3, 0xb3, 0x2b, 0x2c, 0xce, 0x67, 0x9c, 0x4b, 0x1f,
+ 0x09, 0x8a, 0x39, 0x99, 0xe2, 0x93, 0xcb, 0xd7, 0x5e, 0x6b, 0xbd, 0x24,
+ 0xd2, 0x84, 0xed, 0xe3, 0x2c, 0xb8, 0xaa, 0xc0, 0x16, 0x92, 0xf7, 0xc2,
+ 0x91, 0x76, 0x3d, 0x08, 0x39, 0x7a, 0x92, 0x63, 0x45, 0x97, 0x1c, 0xdf,
+ 0xd7, 0x24, 0xdf, 0x25, 0x1f, 0xe2, 0x44, 0x89, 0x11, 0x9a, 0x8a, 0x2c,
+ 0xd7, 0xe8, 0x6f, 0x6f, 0x8f, 0x0f, 0x5d, 0xef, 0xbf, 0x94, 0x96, 0x71,
+ 0x6d, 0xa3, 0x9f, 0x4d, 0xa3, 0x05, 0x5d, 0x92, 0x3a, 0xa7, 0x78, 0xb8,
+ 0xa6, 0xc8, 0x8e, 0xf2, 0x3a, 0xd8, 0x61, 0xdb, 0x38, 0x63, 0x5c, 0xb3,
+ 0x6f, 0x6e, 0x81, 0x1d, 0x3d, 0x20, 0x4c, 0x08, 0xbd, 0xfd, 0x93, 0xc2,
+ 0x36, 0x11, 0x9c, 0x2c, 0x72, 0x5a, 0x52, 0x42, 0x7d, 0xae, 0x25, 0xee,
+ 0xad, 0xc4, 0x74, 0x2b, 0x83, 0xe3, 0x3b, 0xf4, 0x89, 0xb8, 0x9c, 0x0c,
+ 0xfe, 0x90, 0xd6, 0x6f, 0x73, 0xe4, 0x07, 0x57, 0x61, 0x76, 0x7f, 0x4f,
+ 0x15, 0xe6, 0x0e, 0x26, 0x61, 0xe4, 0x7c, 0x39, 0x1b, 0xfe, 0x3e, 0x8b,
+ 0x7a, 0x3a, 0x78, 0x86, 0x08, 0x61, 0x2d, 0xde, 0xf8, 0xd9, 0xd8, 0x62,
+ 0x53, 0xcd, 0x42, 0x6f, 0xeb, 0x2d, 0xec, 0x10, 0x1d, 0x88, 0x0e, 0xf3,
+ 0x6b, 0x33, 0x1e, 0x61, 0x85, 0xd2, 0x74, 0xd6, 0x5c, 0x14, 0x4a, 0xc7,
+ 0x24, 0x17, 0xb1, 0x30, 0x45, 0x7b, 0x37, 0x4d, 0x41, 0x65, 0x20, 0xa9,
+ 0x8f, 0x9a, 0x26, 0x18, 0x4e, 0x9a, 0x49, 0x00, 0xd8, 0xc6, 0x50, 0x95,
+ 0x4d, 0x9e, 0xd1, 0xee, 0xfb, 0x8c, 0xf3, 0xff, 0x56, 0x06, 0xc8, 0x8d,
+ 0x44, 0xaa, 0xf7, 0x69, 0xc3, 0x97, 0xbf, 0xb9, 0xdb, 0x57, 0x3f, 0x7f,
+ 0xb5, 0x60, 0xfc, 0x73, 0xa9, 0x4e, 0x33, 0x8c, 0x4c, 0x84, 0x5e, 0x7b,
+ 0xe6, 0xe9, 0xd8, 0x63, 0x6d, 0x9a, 0x95, 0x38, 0x25, 0x0b, 0x72, 0x9c,
+ 0x4e, 0x93, 0x1b, 0xca, 0x1c, 0x11, 0x84, 0x0f, 0xa5, 0x92, 0x50, 0xa3,
+ 0xe3, 0x09, 0xe1, 0x7c, 0x53, 0x82, 0x6f, 0x41, 0xa9, 0xae, 0x08, 0x47,
+ 0x2e, 0x4b, 0x63, 0x3b, 0x53, 0x50, 0x73, 0x0b, 0xa4, 0xcc, 0x51, 0x6a,
+ 0x72, 0x20, 0x73, 0x5e, 0x49, 0x28, 0x53, 0xa8, 0xcb, 0x53, 0xe5, 0xf0,
+ 0x59, 0x66, 0x32, 0xcb, 0x99, 0x2d, 0x5a, 0xde, 0xab, 0xf0, 0xdb, 0x4f,
+ 0xc5, 0x6a, 0xef, 0xc7, 0x65, 0x5d, 0x37, 0xc8, 0xc0, 0x0c, 0xd5, 0xd0,
+ 0x22, 0xad, 0xde, 0xd8, 0x3e, 0x95, 0xbb, 0xea, 0x91, 0xbb, 0x9e, 0xbb,
+ 0x86, 0xf8, 0x68, 0xec, 0x87, 0x15, 0x96, 0x29, 0x92, 0x3e, 0x6b, 0x6d,
+ 0xb9, 0x70, 0x56, 0x57, 0x28, 0x19, 0x1c, 0xbb, 0xe1, 0x51, 0x7d, 0xd2,
+ 0xf4, 0xf4, 0x73, 0x0f, 0xc6, 0x58, 0xc2, 0x21, 0x31, 0xc7, 0x6b, 0x42,
+ 0xad, 0x34, 0x98, 0xbd, 0x5a, 0xad, 0xea, 0x98, 0x5e, 0x64, 0xa8, 0x30,
+ 0x79, 0xf9, 0x25, 0xb7, 0xab, 0x12, 0x23, 0x4b, 0xe3, 0x89, 0x9e, 0xb0,
+ 0xc1, 0x9c, 0xd5, 0x6c, 0x84, 0xc9, 0xff, 0x53, 0xea, 0x29, 0x4c, 0x55,
+ 0x46, 0x5c, 0x55, 0xaf, 0x3e, 0xfa, 0x72, 0xc1, 0x15, 0xb0, 0x07, 0x73,
+ 0x8a, 0x69, 0x6d, 0x0f, 0x3e, 0x68, 0xfa, 0xa5, 0xef, 0xab, 0x67, 0xff,
+ 0x4d, 0x96, 0x2b, 0x40, 0x75, 0x6b, 0x35, 0x38, 0x2e, 0xc7, 0x71, 0xb8,
+ 0x6a, 0xb1, 0x64, 0xf8, 0xf7, 0x28, 0xda, 0xc1, 0x24, 0x9b, 0x0b, 0xcf,
+ 0xda, 0x1a, 0xde, 0xd4, 0x69, 0x38, 0xe9, 0xe5, 0x85, 0x35, 0x54, 0x9d,
+ 0x34, 0xbb, 0xf7, 0xd9, 0x9c, 0xf1, 0xa9, 0x8e, 0xff, 0xeb, 0xc8, 0x44,
+ 0x74, 0xb0, 0xad, 0x47, 0x76, 0x81, 0x31, 0x70, 0x01, 0x90, 0xf7, 0x7c,
+ 0x3d, 0xbf, 0xa5, 0x8a, 0x2e, 0xa9, 0xd8, 0x8d, 0x1c, 0xee, 0x0f, 0x37,
+ 0xb8, 0x77, 0x03, 0xb3, 0xd6, 0x0c, 0xa5, 0xc8, 0xb8, 0xe1, 0xde, 0xc0,
+ 0x65, 0x82, 0x94, 0xea, 0xf3, 0xae, 0xcb, 0x9b, 0xf9, 0x2d, 0x75, 0x58,
+ 0x41, 0xaa, 0x68, 0x5f, 0x6c, 0x03, 0x39, 0x75, 0x6f, 0xaf, 0x52, 0x70,
+ 0x9a, 0x55, 0x99, 0x43, 0x78, 0xad, 0xab, 0x31, 0x8b, 0x6e, 0xf4, 0xbe,
+ 0x38, 0xc3, 0x0b, 0x29, 0xc9, 0xc6, 0x9e, 0x7d, 0x24, 0x55, 0x32, 0xa4,
+ 0x87, 0xb1, 0xf8, 0x36, 0x61, 0x2c, 0x9b, 0x4d, 0xca, 0xf9, 0x84, 0x8b,
+ 0x7a, 0x8e, 0xa5, 0xe6, 0xe7, 0x22, 0x08, 0xba, 0x83, 0x4e, 0xfa, 0xe2,
+ 0x88, 0xe2, 0xb7, 0x3c, 0x83, 0x64, 0x60, 0x73, 0x5a, 0xa4, 0x71, 0x5e,
+ 0x62, 0x9c, 0x15, 0xeb, 0xa9, 0x8a, 0xe2, 0x3d, 0xc8, 0x86, 0x76, 0x8a,
+ 0xed, 0x18, 0x85, 0x98, 0x24, 0x04, 0xd9, 0xaa, 0x95, 0x86, 0x47, 0x08,
+ 0x49, 0x15, 0xfb, 0x24, 0x0c, 0x06, 0x83, 0x40, 0x5f, 0xce, 0xab, 0x2c,
+ 0xbd, 0x96, 0x12, 0x98, 0x46, 0x49, 0x4e, 0x9f, 0xbb, 0x38, 0x72, 0xfd,
+ 0x47, 0xda, 0xaa, 0x4f, 0xea, 0x48, 0xc2, 0x3d, 0x25, 0xcf, 0x2c, 0x36,
+ 0xb2, 0x1b, 0x3c, 0x7d, 0x0c, 0x9c, 0x4d, 0xb2, 0xbc, 0x58, 0x01, 0xa1,
+ 0xc6, 0x70, 0x8d, 0x5a, 0x36, 0xa0, 0xe5, 0x78, 0x42, 0x55, 0x3b, 0xd4,
+ 0xc1, 0x2e, 0x09, 0xa5, 0x01, 0x71, 0x71, 0x92, 0x0b, 0x57, 0x64, 0xaa,
+ 0x9c, 0x1d, 0x95, 0x45, 0x63, 0x87, 0x74, 0x27, 0xc8, 0xc6, 0xeb, 0x60,
+ 0x21, 0x52, 0x85, 0x79, 0x2b, 0xc8, 0x9f, 0x4b, 0x0f, 0xdd, 0x28, 0x6c,
+ 0x2d, 0xc4, 0xd4, 0xbb, 0xd7, 0x28, 0xca, 0xc8, 0x2b, 0x5e, 0x82, 0x6c,
+ 0x35, 0x7a, 0xef, 0x48, 0x6b, 0x7b, 0xcf, 0x9f, 0x56, 0x85, 0xfa, 0x64,
+ 0xad, 0xa3, 0x53, 0xcb, 0x26, 0x2c, 0x7d, 0x6b, 0x9c, 0x7a, 0x7d, 0x74,
+ 0x6e, 0x95, 0x37, 0x8a, 0x98, 0xe6, 0x5a, 0x90, 0xb6, 0x72, 0xc2, 0x93,
+ 0x01, 0x54, 0x98, 0x9c, 0x71, 0x2b, 0x04, 0x34, 0x31, 0xe5, 0x6d, 0x61,
+ 0x89, 0xcd, 0xe4, 0x07, 0x1a, 0x81, 0x6a, 0x2b, 0x96, 0x37, 0xad, 0x0b,
+ 0x71, 0x65, 0x9e, 0x47, 0xca, 0x06, 0xab, 0x3a, 0x9d, 0x0b, 0x70, 0xbb,
+ 0xe8, 0x50, 0xaa, 0xe0, 0x78, 0x99, 0xd1, 0xe9, 0xe8, 0x7d, 0x30, 0x23,
+ 0x9a, 0x32, 0x92, 0x9b, 0xa2, 0x5e, 0x80, 0x61, 0x39, 0x1d, 0x40, 0x3d,
+ 0xfc, 0x12, 0xcf, 0x40, 0x57, 0xa0, 0x68, 0x71, 0xb8, 0x12, 0x4f, 0xeb,
+ 0x43, 0x95, 0xce, 0x41, 0x7f, 0x5b, 0xab, 0xc8, 0x77, 0xe8, 0x74, 0xfd,
+ 0xd2, 0x1d, 0xc9, 0x6a, 0x6d, 0x5f, 0x9c, 0x52, 0x96, 0x7d, 0x52, 0x2f,
+ 0xef, 0x16, 0x66, 0x1b, 0xbe, 0x33, 0x2c, 0x35, 0x2a, 0xa4, 0x94, 0x96,
+ 0xc1, 0x52, 0x94, 0x92, 0xb7, 0x24, 0xcb, 0x84, 0xd4, 0xe6, 0x10, 0xf2,
+ 0xba, 0x22, 0x82, 0x29, 0x82, 0x17, 0xdf, 0x25, 0xd1, 0x97, 0xdc, 0xb9,
+ 0x4c, 0x36, 0x0d, 0x76, 0xb4, 0xd5, 0x86, 0xb4, 0x87, 0x07, 0x4b, 0x56,
+ 0x27, 0x78, 0x10, 0x3a, 0x3a, 0xfe, 0x0a, 0x4e, 0x07, 0x39, 0x11, 0x93,
+ 0x29, 0x6f, 0x31, 0xb7, 0x82, 0x85, 0x47, 0x8b, 0x45, 0xe9, 0x95, 0x56,
+ 0x91, 0x5c, 0x97, 0x36, 0x8f, 0xd2, 0xd9, 0xd1, 0xbb, 0x1c, 0x7a, 0x29,
+ 0xf0, 0x00, 0x06, 0x55, 0xba, 0x09, 0x6c, 0xb0, 0xda, 0xac, 0xaa, 0x29,
+ 0xce, 0x57, 0x0d, 0xb0, 0xbf, 0x6a, 0xd0, 0x23, 0xce, 0xd9, 0x9b, 0x44,
+ 0x28, 0x40, 0xec, 0x21, 0x10, 0xb9, 0x26, 0x91, 0xa1, 0xea, 0x95, 0xbf,
+ 0xa3, 0x04, 0xf2, 0x20, 0x99, 0x6b, 0x82, 0xba, 0xfb, 0x20, 0xb7, 0x62,
+ 0x96, 0xd6, 0x37, 0xa6, 0xb6, 0x8c, 0x37, 0x41, 0x58, 0x9b, 0x7f, 0xc0,
+ 0x68, 0x77, 0xad, 0x61, 0x07, 0x24, 0x38, 0x48, 0x0b, 0x0c, 0x2d, 0x9b,
+ 0xd8, 0x1b, 0x54, 0xd5, 0x65, 0x0f, 0x14, 0xd3, 0xa1, 0xf9, 0x95, 0x2a,
+ 0x4d, 0x1d, 0x8d, 0xdf, 0x0d, 0xe4, 0xbe, 0xc9, 0xb1, 0xc8, 0x4a, 0x27,
+ 0x5b, 0xb0, 0xea, 0x2e, 0x08, 0xf0, 0xdb, 0x9b, 0xf0, 0xbe, 0x34, 0x81,
+ 0x0d, 0x85, 0x93, 0xdc, 0xee, 0x6e, 0x97, 0xdb, 0x6f, 0x2f, 0x0f, 0xf6,
+ 0x53, 0x28, 0x17, 0xb8, 0x4d, 0x2a, 0x4f, 0x79, 0x89, 0x6c, 0x81, 0x86,
+ 0x40, 0x16, 0xa5, 0xb9, 0x36, 0xe5, 0x09, 0xe1, 0x93, 0x6a, 0x8a, 0xba,
+ 0xc5, 0xab, 0xc2, 0x6a, 0x64, 0x8b, 0xe9, 0x7c, 0x03, 0x15, 0x85, 0xb0,
+ 0x81, 0x0c, 0x82, 0x51, 0x53, 0x3b, 0x74, 0x29, 0xd6, 0x69, 0x32, 0x47,
+ 0x12, 0xce, 0x36, 0x53, 0x89, 0xd6, 0x4a, 0x03, 0xfa, 0xca, 0x16, 0x15,
+ 0xa6, 0xb9, 0xab, 0xa0, 0x22, 0x1e, 0x38, 0xee, 0x6c, 0x44, 0x5d, 0x5e,
+ 0x44, 0xe5, 0x5d, 0x26, 0x72, 0x9a, 0x53, 0x2f, 0xd7, 0xc2, 0xee, 0x25,
+ 0x72, 0x3a, 0xce, 0xe9, 0x36, 0xc5, 0x4b, 0x57, 0xb4, 0x72, 0xf6, 0xd1,
+ 0x87, 0x1b, 0xf3, 0x32, 0xc1, 0x82, 0x25, 0xc4, 0x00, 0x04, 0x9c, 0x27,
+ 0xc1, 0x16, 0x58, 0x0d, 0x13, 0x45, 0xbb, 0x5a, 0x44, 0xfb, 0xa1, 0xf4,
+ 0xc5, 0x53, 0xce, 0x4c, 0xa3, 0xf6, 0x37, 0x6e, 0x3b, 0x3f, 0xd6, 0xa7,
+ 0x2d, 0xce, 0x96, 0x19, 0x66, 0x60, 0x9a, 0x19, 0xa4, 0xb9, 0x9f, 0x6f,
+ 0x68, 0x67, 0x63, 0xf5, 0xca, 0x41, 0x50, 0xc0, 0x78, 0x8e, 0x5e, 0x19,
+ 0x30, 0xaa, 0x6c, 0x4b, 0x77, 0xb8, 0x60, 0x54, 0x05, 0x32, 0x05, 0x4d,
+ 0xac, 0x6d, 0x42, 0x82, 0xc6, 0xd6, 0xd5, 0x30, 0xd7, 0xf9, 0x32, 0x04,
+ 0xcd, 0xdf, 0xb3, 0x09, 0x04, 0xd7, 0xd7, 0xd7, 0x83, 0x65, 0x39, 0xa0,
+ 0x27, 0x70, 0x7f, 0x5e, 0x82, 0x30, 0xf8, 0x10, 0x39, 0x0d, 0xc1, 0x89,
+ 0x5f, 0x3b, 0x1d, 0x31, 0x92, 0xe8, 0xef, 0x6f, 0x5e, 0xf4, 0x4d, 0xfa,
+ 0x9a, 0xe0, 0x57, 0x62, 0x25, 0x94, 0xe7, 0x4d, 0x04, 0xf3, 0x3c, 0xe3,
+ 0x26, 0xed, 0x09, 0xd8, 0xa5, 0x87, 0x07, 0xa7, 0xef, 0x5e, 0x1f, 0x9d,
+ 0xbf, 0x7b, 0x73, 0xf0, 0x43, 0xc4, 0x5a, 0x1b, 0x8c, 0x0e, 0x26, 0x19,
+ 0x16, 0x20, 0x96, 0x45, 0x81, 0x4a, 0xfd, 0x2b, 0xea, 0xae, 0x25, 0x64,
+ 0x1d, 0x94, 0xc6, 0x58, 0x3c, 0x4f, 0x05, 0x7e, 0xb2, 0x4e, 0x58, 0xcb,
+ 0x5e, 0xd4, 0xf8, 0xc0, 0xf7, 0x69, 0x99, 0xa7, 0xd3, 0x41, 0x51, 0x5e,
+ 0x20, 0x63, 0xde, 0x7c, 0x2e, 0x3a, 0x6a, 0x70, 0xb8, 0x4d, 0x01, 0xce,
+ 0xc2, 0xd4, 0xc1, 0xab, 0x72, 0x82, 0x49, 0x6f, 0xc1, 0xd4, 0x5f, 0xbb,
+ 0xa3, 0xab, 0x25, 0x9a, 0x3f, 0x4c, 0xa6, 0x79, 0xf3, 0x3c, 0x57, 0xbc,
+ 0x17, 0xe3, 0xbc, 0xb2, 0x03, 0x34, 0xe8, 0x7f, 0x3e, 0xa9, 0xe2, 0x0b,
+ 0x10, 0x9b, 0x98, 0x53, 0xb0, 0x0f, 0x92, 0xf8, 0xeb, 0x8e, 0x0c, 0x4c,
+ 0xe1, 0xf6, 0xfa, 0xa8, 0xb8, 0xb9, 0x90, 0x3d, 0x1e, 0x9f, 0xbe, 0x60,
+ 0xb6, 0x78, 0x7c, 0xfa, 0xfa, 0x4c, 0x02, 0x24, 0xaf, 0x8b, 0x9a, 0x49,
+ 0xc5, 0xd3, 0x4a, 0x6e, 0x0c, 0x73, 0xbf, 0x46, 0xcf, 0x93, 0xa6, 0x4b,
+ 0x59, 0x7e, 0xc7, 0x15, 0x83, 0xe2, 0xd6, 0xc2, 0xb1, 0xdf, 0x7d, 0x77,
+ 0x70, 0x7e, 0xf4, 0xc3, 0xc1, 0x3f, 0x42, 0x30, 0x88, 0x57, 0x59, 0x59,
+ 0xe4, 0x14, 0x9a, 0x84, 0xbd, 0x2e, 0x33, 0xe6, 0x42, 0xc8, 0xf7, 0x40,
+ 0x75, 0x2c, 0x4a, 0x0e, 0x3e, 0xfc, 0xbf, 0x9b, 0x03, 0xfc, 0xca, 0x4d,
+ 0x5d, 0x3a, 0x89, 0xc5, 0xcb, 0x62, 0x1a, 0xe8, 0x95, 0x4d, 0xfe, 0x3e,
+ 0x79, 0x0c, 0xb5, 0x12, 0x4e, 0xa7, 0x0d, 0x65, 0x84, 0xa2, 0x47, 0x91,
+ 0xa8, 0x36, 0xa2, 0x96, 0xd2, 0xbc, 0x09, 0x79, 0x31, 0x4e, 0x45, 0xa2,
+ 0xeb, 0x28, 0x8d, 0x18, 0x75, 0xc4, 0xae, 0xd2, 0x20, 0x10, 0x04, 0x3b,
+ 0x89, 0xe8, 0x58, 0xe1, 0x54, 0x69, 0x50, 0xe4, 0x07, 0x7b, 0xcf, 0xb6,
+ 0x9e, 0x6d, 0x61, 0x80, 0x96, 0x9a, 0xc4, 0x29, 0x4f, 0x20, 0xcc, 0x53,
+ 0x62, 0x0b, 0x2b, 0x73, 0x05, 0xf7, 0xbc, 0x83, 0x93, 0x45, 0xf8, 0x08,
+ 0xfc, 0x74, 0x98, 0x4c, 0x6e, 0x86, 0x69, 0x76, 0x91, 0x5c, 0x8c, 0x1f,
+ 0xe7, 0xb3, 0x3c, 0xdf, 0xc9, 0x6e, 0xaa, 0x9d, 0xc9, 0xee, 0xb8, 0x28,
+ 0x8b, 0xa7, 0x37, 0xc0, 0xb3, 0xae, 0x6e, 0xca, 0x9d, 0xd9, 0x6f, 0x49,
+ 0x79, 0x9d, 0x8d, 0x2f, 0x92, 0x71, 0x72, 0x3d, 0x4b, 0x10, 0x3c, 0xea,
+ 0x66, 0x3c, 0xfc, 0x2d, 0x0b, 0xe0, 0xed, 0x95, 0x5c, 0xb8, 0x49, 0xdd,
+ 0x18, 0x45, 0x0b, 0xa0, 0x2d, 0x93, 0xa5, 0x00, 0xc9, 0x50, 0x6b, 0x6d,
+ 0x2b, 0x6d, 0xfd, 0x2f, 0x50, 0x8a, 0xc7, 0xf5, 0x0d, 0x2e, 0x80, 0xa5,
+ 0x2c, 0x86, 0x83, 0xac, 0xd8, 0xe4, 0xd1, 0xf4, 0x9b, 0x62, 0x22, 0x9f,
+ 0xb4, 0xdc, 0xec, 0x54, 0x2f, 0xe4, 0xf0, 0x0a, 0xf6, 0xbe, 0x5e, 0x14,
+ 0x06, 0x90, 0x9d, 0x0b, 0x1b, 0x74, 0x6f, 0xe8, 0xa1, 0xee, 0x12, 0xbc,
+ 0xe4, 0x3a, 0xd1, 0x7a, 0x6d, 0x4a, 0x1a, 0x95, 0x2c, 0x72, 0xca, 0xe2,
+ 0x5c, 0x54, 0xb5, 0x4b, 0x49, 0x16, 0x8e, 0x67, 0x22, 0x45, 0xbb, 0xd3,
+ 0xc2, 0x83, 0xf3, 0x04, 0x12, 0xd2, 0xad, 0x40, 0x4e, 0x88, 0x63, 0xb2,
+ 0xab, 0x9f, 0xc6, 0x2f, 0x31, 0x25, 0x60, 0x10, 0xfd, 0x80, 0x62, 0x55,
+ 0x16, 0x6a, 0x9e, 0x26, 0x0b, 0xd4, 0x43, 0x60, 0xa1, 0x55, 0xcf, 0x0b,
+ 0xf4, 0x5a, 0x64, 0xac, 0xfd, 0x21, 0x72, 0x95, 0xa3, 0x1a, 0x10, 0x76,
+ 0x20, 0xb6, 0x0c, 0x5e, 0x94, 0xb9, 0x56, 0x50, 0x33, 0xdc, 0xf4, 0x92,
+ 0xfe, 0xb4, 0xa4, 0xda, 0x37, 0xcc, 0x76, 0xea, 0xf4, 0x96, 0x20, 0xd9,
+ 0xc3, 0x4d, 0x46, 0x3c, 0x1e, 0x2a, 0xb3, 0xa6, 0x94, 0x04, 0x91, 0x76,
+ 0xfe, 0xea, 0x2c, 0x5e, 0x98, 0x01, 0xeb, 0xe5, 0x4a, 0x5a, 0xe2, 0x08,
+ 0x8c, 0x8f, 0x5a, 0x33, 0xcc, 0x0f, 0xb2, 0x09, 0x06, 0x00, 0x51, 0x08,
+ 0x56, 0xb8, 0x0b, 0xed, 0xa4, 0xee, 0xac, 0x06, 0x2a, 0x95, 0x32, 0x48,
+ 0x2d, 0x62, 0x72, 0x4e, 0xb6, 0x47, 0x27, 0x82, 0x25, 0x26, 0xbd, 0xd6,
+ 0x91, 0x70, 0x52, 0x48, 0x6b, 0x38, 0x3a, 0x77, 0xba, 0x12, 0xb8, 0x6b,
+ 0x02, 0x72, 0xe5, 0xc6, 0xc4, 0x70, 0x97, 0x06, 0x88, 0x29, 0x9f, 0x57,
+ 0x04, 0x7f, 0xc8, 0x2e, 0x10, 0xc4, 0x59, 0x47, 0x8c, 0xb2, 0x76, 0xac,
+ 0x87, 0x26, 0x47, 0x95, 0x10, 0xb9, 0x55, 0x65, 0x7f, 0x84, 0xeb, 0xd9,
+ 0x6b, 0x12, 0x36, 0x8e, 0x42, 0xac, 0x6a, 0x50, 0xa7, 0xa3, 0xcb, 0x4d,
+ 0x4a, 0x0d, 0xf5, 0x92, 0xe8, 0xf2, 0x51, 0xba, 0x89, 0x2f, 0x28, 0x3b,
+ 0xdb, 0xfc, 0x83, 0xcc, 0x10, 0x5f, 0x55, 0xb1, 0x19, 0x39, 0x8c, 0xb9,
+ 0xd5, 0xb8, 0xfc, 0xbf, 0x7f, 0xe9, 0x8a, 0xc7, 0x7b, 0x5a, 0xf2, 0x4b,
+ 0x39, 0x4f, 0xb7, 0x1c, 0xb3, 0xa5, 0x92, 0xa4, 0xcf, 0xbd, 0x62, 0xfc,
+ 0xc5, 0x7c, 0x81, 0x21, 0x37, 0x07, 0x90, 0xab, 0x99, 0xd8, 0xfb, 0x88,
+ 0x34, 0xdc, 0xf9, 0xd5, 0xa3, 0x25, 0xd1, 0xa7, 0xda, 0xcb, 0x6e, 0x6a,
+ 0x21, 0x1d, 0x52, 0x2c, 0x83, 0x48, 0x11, 0x4d, 0x46, 0x2a, 0xc7, 0xe8,
+ 0x34, 0x78, 0xfa, 0x8d, 0xe8, 0x97, 0xf2, 0x6c, 0x8c, 0xe5, 0x21, 0xb4,
+ 0xdf, 0x32, 0x65, 0xdc, 0x2c, 0xf5, 0x13, 0xc4, 0x39, 0x68, 0xd8, 0x07,
+ 0x08, 0x73, 0x84, 0x82, 0x11, 0x4e, 0xf0, 0xa1, 0x33, 0xad, 0xf7, 0x89,
+ 0x7c, 0x9b, 0x5b, 0xcb, 0x66, 0x7e, 0xb6, 0xea, 0xd1, 0x3c, 0xf9, 0x14,
+ 0x47, 0xf3, 0x68, 0xd9, 0xd1, 0x98, 0xa5, 0x7e, 0x9a, 0xa3, 0x79, 0xb2,
+ 0x6a, 0x7e, 0xef, 0x9d, 0x0e, 0xe7, 0x8e, 0x19, 0xd7, 0x86, 0xec, 0x5c,
+ 0xcd, 0xf0, 0xd7, 0x0a, 0xc6, 0xd8, 0x47, 0x66, 0xf7, 0x75, 0x37, 0x82,
+ 0x5d, 0xd5, 0xc2, 0x1b, 0xfe, 0xcf, 0xb3, 0x93, 0xd7, 0x82, 0xdf, 0x8e,
+ 0xba, 0x11, 0xc1, 0xb9, 0xbb, 0x49, 0x75, 0x21, 0xc7, 0x03, 0xfb, 0xb6,
+ 0xb5, 0xc1, 0x8a, 0xce, 0x2c, 0xfd, 0xd1, 0x04, 0x50, 0xf4, 0xb2, 0x28,
+ 0xeb, 0xd1, 0x82, 0x4f, 0x6d, 0x6e, 0x81, 0x0f, 0x08, 0x11, 0xc2, 0xd3,
+ 0xe1, 0xca, 0xd4, 0xd4, 0x40, 0xfb, 0x5a, 0x84, 0x40, 0x96, 0xff, 0x94,
+ 0x94, 0x17, 0xbf, 0xf8, 0xbf, 0x93, 0x7a, 0xf8, 0x9e, 0xc6, 0x79, 0xce,
+ 0x6f, 0xe6, 0xe9, 0x1e, 0x42, 0xce, 0x4f, 0xc5, 0xd1, 0xb2, 0x89, 0x8b,
+ 0xeb, 0x75, 0xbf, 0x78, 0x40, 0xe0, 0x90, 0xa1, 0x57, 0x82, 0x3a, 0x11,
+ 0x97, 0x41, 0x35, 0x1c, 0x89, 0xc6, 0x0b, 0x46, 0x08, 0x28, 0xc4, 0xd1,
+ 0x0c, 0x04, 0xff, 0x08, 0x8f, 0x33, 0xa2, 0x5d, 0xf6, 0x00, 0x47, 0xed,
+ 0x8b, 0xd5, 0x0d, 0x18, 0x3a, 0x1f, 0xf0, 0x05, 0x09, 0x5b, 0x05, 0x21,
+ 0x18, 0x59, 0xbf, 0x21, 0xd8, 0x68, 0x0b, 0xe5, 0x60, 0x0a, 0x33, 0x19,
+ 0x19, 0x3d, 0xfa, 0xa6, 0xaf, 0x38, 0x55, 0x6e, 0x1b, 0xec, 0x24, 0x04,
+ 0xa9, 0x46, 0x1e, 0x40, 0xee, 0x4f, 0xee, 0x60, 0x43, 0xa0, 0x43, 0x82,
+ 0x54, 0x71, 0xd3, 0xfc, 0x1b, 0x7e, 0x5e, 0x81, 0xf8, 0x5f, 0x8f, 0x37,
+ 0xba, 0x40, 0xa1, 0xa8, 0x6f, 0xa4, 0xb9, 0xf1, 0xfe, 0x78, 0x8a, 0x52,
+ 0x72, 0x5a, 0x70, 0xe5, 0x9f, 0xfd, 0x45, 0xd2, 0x55, 0x33, 0x38, 0x8e,
+ 0xd6, 0x26, 0x45, 0x31, 0x4c, 0xca, 0x35, 0xd1, 0x9b, 0x09, 0x00, 0x47,
+ 0x3a, 0x7a, 0xab, 0xbb, 0x82, 0xe8, 0xee, 0x1b, 0x7e, 0x2e, 0x92, 0x48,
+ 0x5b, 0xe6, 0x99, 0x1c, 0x6c, 0xaf, 0x74, 0xad, 0xaa, 0x4f, 0x1c, 0x4a,
+ 0xc7, 0x8a, 0xef, 0x5a, 0x4c, 0x36, 0x63, 0xcf, 0x34, 0xa5, 0xa6, 0x8d,
+ 0x52, 0x4d, 0x3d, 0x20, 0xd0, 0x2b, 0x83, 0xa6, 0x87, 0x0e, 0xcb, 0x7e,
+ 0xc0, 0x60, 0x41, 0x56, 0x98, 0x71, 0x58, 0x9d, 0x57, 0x33, 0xcf, 0x10,
+ 0x26, 0x94, 0xf4, 0xed, 0x11, 0x0c, 0x07, 0x02, 0x97, 0x81, 0x8d, 0x24,
+ 0x85, 0xc4, 0xf4, 0x00, 0x1e, 0x7a, 0xb1, 0x0a, 0x72, 0x07, 0x0b, 0x1c,
+ 0x63, 0x10, 0x35, 0x5b, 0x63, 0x28, 0xee, 0x37, 0x54, 0xa9, 0xad, 0x46,
+ 0x93, 0x56, 0xc3, 0xe3, 0x54, 0x7d, 0x40, 0x0e, 0xca, 0x44, 0x5b, 0x83,
+ 0xc6, 0x4f, 0x47, 0xc9, 0xed, 0x21, 0x53, 0xf0, 0xe6, 0x7d, 0x3a, 0x4c,
+ 0x0a, 0x1e, 0x7f, 0xed, 0x5f, 0x51, 0x6f, 0x5c, 0x66, 0xf9, 0xfb, 0xde,
+ 0x5e, 0xd4, 0x1b, 0x15, 0xc0, 0xb8, 0x7b, 0xd1, 0xbf, 0xd7, 0x56, 0x68,
+ 0xa1, 0xd0, 0x1e, 0x65, 0xcd, 0xfc, 0xec, 0x23, 0xc6, 0xfb, 0x06, 0x31,
+ 0xe2, 0x12, 0xf4, 0x21, 0xae, 0xfa, 0x62, 0x1c, 0x54, 0xa9, 0xf6, 0x23,
+ 0xfc, 0x6d, 0xc8, 0xa5, 0xe1, 0x7a, 0x07, 0x9c, 0x16, 0x24, 0xd2, 0xf4,
+ 0x10, 0x7f, 0x52, 0x26, 0xd7, 0x4d, 0x89, 0xd2, 0x90, 0xf7, 0x9d, 0xc5,
+ 0x22, 0x9c, 0x79, 0xf0, 0x82, 0x52, 0x56, 0xc9, 0x79, 0x46, 0x43, 0x1a,
+ 0xec, 0x49, 0xfe, 0xe7, 0x39, 0x01, 0x64, 0x10, 0xfa, 0x5c, 0xcc, 0x61,
+ 0xe9, 0xe6, 0x70, 0x6e, 0xc5, 0x71, 0x13, 0x5f, 0xf5, 0x57, 0x7c, 0xf3,
+ 0xd7, 0x45, 0xfe, 0x3e, 0x06, 0xe1, 0x8f, 0x91, 0xc6, 0x58, 0x62, 0x94,
+ 0x61, 0x29, 0xf5, 0x83, 0xe9, 0x7c, 0xe7, 0x54, 0xdb, 0xd2, 0xed, 0x95,
+ 0xd7, 0x94, 0x73, 0x70, 0x9e, 0x8f, 0x96, 0x0e, 0x77, 0x65, 0xb1, 0x49,
+ 0xc8, 0x09, 0x5b, 0xd2, 0x57, 0x23, 0xac, 0xc5, 0xc0, 0x72, 0xce, 0x9e,
+ 0xac, 0x44, 0x87, 0xec, 0xc9, 0xb6, 0xb9, 0xe0, 0x75, 0xc1, 0x08, 0x36,
+ 0xc1, 0x9d, 0xa1, 0x8f, 0x22, 0x4f, 0xaf, 0x23, 0x1d, 0x04, 0xfd, 0x17,
+ 0xc8, 0x96, 0xa9, 0x2b, 0xd4, 0xcd, 0x3c, 0x43, 0xdb, 0x70, 0x58, 0x16,
+ 0xd7, 0x15, 0x81, 0xc2, 0xc8, 0xbc, 0x1e, 0x30, 0x6a, 0x63, 0x01, 0x82,
+ 0x6e, 0x83, 0x48, 0x5b, 0xc4, 0x05, 0xa6, 0x05, 0xde, 0x22, 0x4c, 0x06,
+ 0x58, 0xa6, 0xe2, 0x74, 0xee, 0xec, 0x32, 0x95, 0xe7, 0x1e, 0x91, 0xf9,
+ 0xd0, 0x14, 0xab, 0xaa, 0x4c, 0xc1, 0x65, 0xc6, 0x43, 0xdd, 0x80, 0xd5,
+ 0x0b, 0x57, 0x87, 0xdc, 0x43, 0x02, 0xdf, 0x66, 0x0a, 0x1d, 0xd9, 0x1f,
+ 0xc4, 0xbf, 0x26, 0x2e, 0x60, 0x4b, 0xfc, 0x3e, 0x85, 0x3b, 0x3a, 0x05,
+ 0x7a, 0x61, 0xe0, 0xf7, 0xfd, 0x8e, 0xb6, 0x11, 0x8d, 0xcc, 0x8a, 0x4a,
+ 0x7b, 0xdf, 0x71, 0x99, 0xb4, 0x1b, 0xcb, 0x24, 0xaf, 0x29, 0x93, 0x25,
+ 0x76, 0xf6, 0x8c, 0x32, 0x2c, 0x4a, 0x5e, 0xce, 0x9c, 0x23, 0xb3, 0x04,
+ 0x34, 0xe2, 0x86, 0x36, 0xc8, 0xc2, 0xc1, 0x62, 0x07, 0xb7, 0xdb, 0x56,
+ 0x69, 0xb7, 0x86, 0x6b, 0x8f, 0x40, 0x88, 0x91, 0x59, 0xe5, 0x00, 0xfc,
+ 0xf3, 0x59, 0xe2, 0x13, 0x85, 0xf1, 0x7e, 0x23, 0x54, 0xc8, 0x0d, 0x88,
+ 0xc0, 0x99, 0x0f, 0xef, 0x0e, 0xd6, 0x2a, 0xe7, 0xde, 0xe1, 0x2a, 0xce,
+ 0x0f, 0x4f, 0xdf, 0xfd, 0xf5, 0xe8, 0xe8, 0xf4, 0xf8, 0xf9, 0xcb, 0x23,
+ 0x09, 0x87, 0x98, 0x1f, 0xbd, 0x3e, 0xff, 0xfb, 0x4b, 0x20, 0xd9, 0x62,
+ 0xf4, 0x1e, 0x6b, 0x64, 0x45, 0x53, 0x6b, 0xdf, 0x5e, 0x34, 0xcd, 0x71,
+ 0x38, 0xf2, 0xf0, 0xf6, 0x61, 0x6b, 0x46, 0xe8, 0xe5, 0x3b, 0x38, 0xfe,
+ 0xb1, 0x1f, 0x7d, 0x7f, 0x1a, 0xbf, 0xfd, 0x51, 0x06, 0x45, 0xc1, 0xb9,
+ 0x81, 0x4d, 0x43, 0xff, 0xaa, 0x9f, 0x53, 0x11, 0x94, 0x61, 0x30, 0xa6,
+ 0x2f, 0xc5, 0x10, 0xd8, 0x04, 0x98, 0xbb, 0x6b, 0x60, 0x67, 0xc0, 0xb4,
+ 0xa6, 0xe6, 0xdf, 0x65, 0xf1, 0x3e, 0xcd, 0xb5, 0x85, 0x02, 0x67, 0x12,
+ 0x8f, 0xa7, 0xe9, 0x92, 0xa6, 0x16, 0x82, 0x3c, 0xee, 0x76, 0xd8, 0x20,
+ 0x7d, 0xcd, 0xee, 0xab, 0x1e, 0x8d, 0xc6, 0x59, 0x11, 0x87, 0x7c, 0x9a,
+ 0x94, 0x61, 0xb7, 0x63, 0xa3, 0x3b, 0x04, 0x35, 0xa6, 0x23, 0x6e, 0x7b,
+ 0x72, 0x06, 0x6f, 0x11, 0x68, 0xa8, 0xa0, 0x08, 0x91, 0x56, 0x37, 0x9b,
+ 0x91, 0xd1, 0xf3, 0x25, 0x2a, 0x56, 0xdb, 0x5b, 0xcb, 0xd2, 0x2a, 0xbd,
+ 0xf6, 0x97, 0x74, 0x03, 0xed, 0x1a, 0xbb, 0x70, 0xb3, 0xb1, 0x69, 0x53,
+ 0xee, 0x20, 0xe7, 0x50, 0x9a, 0x09, 0x0f, 0xe9, 0xf6, 0x8d, 0x78, 0xb2,
+ 0x15, 0x69, 0x4f, 0x91, 0xa0, 0xcb, 0xbc, 0x75, 0x53, 0x5c, 0x9f, 0x83,
+ 0x85, 0x7a, 0x13, 0xaf, 0x03, 0x6f, 0x03, 0xf9, 0x1d, 0x1e, 0x1a, 0xe6,
+ 0xbb, 0xb5, 0x8c, 0x9d, 0x55, 0xdd, 0xe7, 0x8d, 0x2d, 0x23, 0xee, 0xd0,
+ 0x68, 0xfd, 0xd0, 0xe4, 0x0d, 0x37, 0x71, 0x0d, 0x56, 0x43, 0xb4, 0x8f,
+ 0x7f, 0x7e, 0x1d, 0xc8, 0x74, 0xd8, 0xa0, 0x8c, 0x95, 0x2b, 0x0c, 0x55,
+ 0xc3, 0xc3, 0xac, 0x3c, 0xe3, 0xb3, 0x03, 0xe3, 0x6b, 0x17, 0xb8, 0x04,
+ 0x1c, 0x85, 0x30, 0x4b, 0x69, 0x54, 0xdc, 0x39, 0xdf, 0xfd, 0x8d, 0x3b,
+ 0x39, 0x77, 0x46, 0xcb, 0x80, 0x2c, 0x9f, 0x1f, 0xbd, 0xe9, 0x47, 0xa7,
+ 0x47, 0xaf, 0xd8, 0xd8, 0x3d, 0x7a, 0xfd, 0x1d, 0x09, 0x01, 0xcd, 0x2a,
+ 0x24, 0x30, 0x0c, 0x34, 0x00, 0xc0, 0x0a, 0x0e, 0x62, 0xc8, 0xd3, 0x79,
+ 0xc3, 0xeb, 0x64, 0x71, 0x54, 0xd5, 0x62, 0xd6, 0x89, 0xe1, 0x6e, 0xbe,
+ 0xf5, 0x73, 0x20, 0xef, 0x98, 0xc9, 0xe1, 0x73, 0x65, 0x87, 0xc8, 0xa4,
+ 0x5a, 0xed, 0x64, 0x11, 0xb8, 0xa6, 0x79, 0x7a, 0xd1, 0x3e, 0xfc, 0xf1,
+ 0x75, 0x30, 0x43, 0xe5, 0xec, 0xfb, 0x0d, 0xff, 0xe8, 0x24, 0x60, 0xd7,
+ 0x00, 0x82, 0x95, 0xbd, 0xe0, 0xd3, 0x9b, 0xfb, 0xb9, 0x19, 0xf6, 0xb8,
+ 0x24, 0xe3, 0xc3, 0x24, 0x06, 0x33, 0x8a, 0x23, 0x66, 0x0a, 0xc0, 0x6c,
+ 0x7d, 0xbc, 0xb0, 0xb9, 0x86, 0x52, 0xf8, 0x60, 0xe8, 0xf3, 0x3d, 0x1f,
+ 0x23, 0xe5, 0x7a, 0xf0, 0x05, 0xb2, 0xe0, 0x6f, 0xa8, 0x42, 0x8f, 0xb3,
+ 0x31, 0x15, 0xd9, 0x51, 0xd0, 0x9f, 0xba, 0x52, 0xec, 0x45, 0xd1, 0xda,
+ 0xff, 0xbb, 0x89, 0xf1, 0xfc, 0xcd, 0x6c, 0xfc, 0xae, 0xac, 0x92, 0xb5,
+ 0xb6, 0x51, 0xe1, 0xfc, 0x7a, 0x8c, 0xbf, 0x8e, 0xd6, 0x06, 0xe6, 0x51,
+ 0xf9, 0x3b, 0xfe, 0x7c, 0x19, 0xac, 0x09, 0x27, 0x08, 0x6a, 0x63, 0x9a,
+ 0x13, 0x60, 0x60, 0x67, 0x67, 0x2f, 0x31, 0x85, 0xb0, 0x4c, 0x30, 0x73,
+ 0x40, 0x85, 0x55, 0x9a, 0x5f, 0xa0, 0x4b, 0x3c, 0x9a, 0xbf, 0x1f, 0x55,
+ 0xdb, 0xdb, 0xbe, 0x93, 0xd1, 0x64, 0x96, 0x9b, 0x26, 0x43, 0xa7, 0x7f,
+ 0x3d, 0x3c, 0xfb, 0xc3, 0xf6, 0x36, 0x35, 0xba, 0x5a, 0xc7, 0xc6, 0x3b,
+ 0x4f, 0x1f, 0x6f, 0xef, 0x6c, 0x84, 0xa2, 0x94, 0x1e, 0xfa, 0x2e, 0xba,
+ 0x71, 0x93, 0xa8, 0x71, 0x5b, 0x08, 0xdf, 0x4f, 0x1a, 0xeb, 0x99, 0xa1,
+ 0xc7, 0x29, 0x62, 0xcc, 0x63, 0xcc, 0x45, 0x20, 0x93, 0x08, 0x7a, 0xbf,
+ 0x3d, 0x1c, 0x09, 0x27, 0xd2, 0x69, 0x7a, 0xbc, 0xfa, 0xbd, 0x1e, 0x31,
+ 0x6c, 0xd3, 0x1a, 0x8c, 0xd2, 0x00, 0x18, 0x7e, 0x42, 0x47, 0xc6, 0x55,
+ 0xcb, 0xe5, 0x6b, 0xeb, 0x4d, 0xee, 0x23, 0xcd, 0x56, 0x08, 0x7d, 0x45,
+ 0xb1, 0xa5, 0x7c, 0xb8, 0x58, 0xb6, 0xcc, 0xda, 0x8f, 0x78, 0xad, 0xbc,
+ 0x1c, 0x36, 0x59, 0x53, 0x8f, 0x09, 0x28, 0xe7, 0x0c, 0x35, 0x73, 0x43,
+ 0x75, 0xfb, 0x9d, 0x4b, 0xe4, 0x6a, 0xf8, 0x3e, 0xf3, 0x85, 0x97, 0x7b,
+ 0xc0, 0x47, 0xc2, 0xc3, 0x05, 0x99, 0x43, 0x98, 0x10, 0xce, 0x38, 0xa6,
+ 0x4f, 0x60, 0x95, 0x94, 0xe1, 0x8c, 0x74, 0xae, 0x2d, 0x53, 0x6b, 0xcd,
+ 0x7f, 0xea, 0xac, 0x1f, 0xe1, 0x6c, 0x4c, 0x4e, 0x86, 0xc2, 0x0b, 0x69,
+ 0x73, 0x3a, 0xd6, 0xa5, 0x90, 0x32, 0xad, 0x47, 0x1b, 0x28, 0x97, 0x31,
+ 0x5b, 0x50, 0x71, 0x9c, 0x3c, 0x43, 0x85, 0xc2, 0x14, 0x6c, 0x09, 0x5b,
+ 0x52, 0xe0, 0x40, 0xb4, 0x34, 0xb1, 0x6e, 0xe7, 0x10, 0xc1, 0x03, 0xb0,
+ 0x4a, 0xbe, 0x42, 0xc1, 0x83, 0xdb, 0x61, 0x5e, 0xe0, 0x80, 0x6b, 0xb5,
+ 0xf2, 0x98, 0xba, 0xc4, 0xe3, 0xcd, 0xca, 0xac, 0xf3, 0x5e, 0xcc, 0x92,
+ 0x72, 0x20, 0xdc, 0x24, 0xa9, 0x8f, 0x61, 0x98, 0x4c, 0x31, 0x24, 0x06,
+ 0x8f, 0xfa, 0x32, 0x78, 0x83, 0x89, 0x96, 0xc3, 0x68, 0x9f, 0x50, 0xc8,
+ 0xc3, 0x6d, 0xa0, 0xa3, 0x23, 0x82, 0x7f, 0x02, 0x95, 0xad, 0x04, 0xd5,
+ 0xa9, 0xa8, 0x5a, 0x8d, 0x50, 0x35, 0xd7, 0x85, 0xf5, 0x2b, 0x1a, 0x47,
+ 0x1b, 0x0d, 0x79, 0xc1, 0x10, 0xb8, 0x6b, 0x42, 0xcf, 0xd6, 0x3b, 0x25,
+ 0xe8, 0xe0, 0x6b, 0xd4, 0x92, 0x15, 0x39, 0x16, 0xa2, 0xfd, 0xe2, 0x7f,
+ 0xa9, 0x43, 0xdc, 0x98, 0x23, 0x62, 0x6b, 0x7d, 0xff, 0x28, 0xd7, 0x84,
+ 0x1e, 0xd6, 0x40, 0x12, 0xf3, 0x68, 0xc8, 0xce, 0xd1, 0x9f, 0x93, 0xc8,
+ 0x32, 0x04, 0xca, 0x5c, 0xaa, 0xd1, 0x68, 0x26, 0x85, 0x46, 0xab, 0x3c,
+ 0xdf, 0x8c, 0x19, 0x6e, 0x99, 0x92, 0xc5, 0xbb, 0xf5, 0xbb, 0xd0, 0x00,
+ 0x4e, 0xc4, 0x6d, 0x6a, 0xef, 0x86, 0x03, 0x66, 0xbc, 0x03, 0x29, 0xf6,
+ 0x29, 0x34, 0x27, 0xc3, 0x7d, 0x52, 0x65, 0xbc, 0x87, 0xab, 0x75, 0x50,
+ 0x62, 0x70, 0x09, 0x49, 0x5f, 0xd8, 0x0f, 0xf5, 0x19, 0x38, 0xa0, 0x3e,
+ 0xa0, 0xcd, 0x02, 0xcc, 0x82, 0x2b, 0x03, 0xb1, 0x25, 0x22, 0xfa, 0x32,
+ 0x1a, 0xd0, 0x98, 0xec, 0x3f, 0x13, 0xb3, 0xc1, 0x77, 0x3a, 0x12, 0x5e,
+ 0x8f, 0x4c, 0x18, 0x73, 0xb8, 0x31, 0x3a, 0x44, 0x2b, 0x05, 0xd3, 0x03,
+ 0xa9, 0xdd, 0xa2, 0xe9, 0x45, 0xe5, 0x62, 0x81, 0xd1, 0x77, 0x07, 0xc0,
+ 0xe5, 0x48, 0xba, 0xc1, 0xde, 0xc0, 0x89, 0xa5, 0xdc, 0x2b, 0x4a, 0x61,
+ 0xd7, 0x4b, 0x5d, 0x51, 0x2c, 0x60, 0x9d, 0x9a, 0x55, 0x84, 0xa3, 0xfc,
+ 0xc7, 0x2d, 0x3d, 0x7b, 0x04, 0xe2, 0x5f, 0xfb, 0x98, 0x4b, 0x53, 0x20,
+ 0x16, 0x7a, 0x43, 0xd7, 0x11, 0xaf, 0x40, 0xd1, 0x01, 0x6c, 0xaf, 0x82,
+ 0x8c, 0x00, 0x30, 0xde, 0xc3, 0xf4, 0xa8, 0x9b, 0x7e, 0x17, 0x9a, 0x64,
+ 0xc8, 0xde, 0x87, 0xcc, 0x72, 0x31, 0x6d, 0xea, 0xa8, 0xd3, 0xcc, 0x60,
+ 0xf4, 0x20, 0xb9, 0xc7, 0x31, 0x35, 0xb6, 0x8a, 0x49, 0xc1, 0xda, 0x87,
+ 0x3d, 0x4a, 0xc7, 0x9d, 0x59, 0x2e, 0x0c, 0x66, 0x9a, 0x7c, 0xc8, 0x66,
+ 0x8b, 0x99, 0xed, 0xe4, 0x8c, 0xcd, 0x12, 0x6a, 0x86, 0x87, 0x22, 0xe7,
+ 0xb4, 0x1b, 0x8d, 0x8a, 0x03, 0xe5, 0xc3, 0xd4, 0x84, 0x49, 0x6b, 0x2f,
+ 0xd8, 0x36, 0x67, 0x5f, 0x57, 0x35, 0x68, 0xa2, 0x18, 0xf2, 0x55, 0xc6,
+ 0x1a, 0x95, 0x8c, 0xd3, 0x12, 0x28, 0x47, 0x2a, 0xf1, 0x32, 0x3a, 0xb8,
+ 0x2f, 0xd7, 0x3c, 0x13, 0xbe, 0x4b, 0x0b, 0xe1, 0xfc, 0x0f, 0x4c, 0xda,
+ 0x27, 0xaa, 0x32, 0x6b, 0x25, 0xd6, 0x64, 0xaa, 0xa9, 0xf1, 0x77, 0x3e,
+ 0xdb, 0xc4, 0x7e, 0xd6, 0x43, 0x18, 0xe9, 0x3a, 0x1b, 0xd7, 0x97, 0x03,
+ 0x4c, 0xc8, 0xa7, 0x04, 0x9c, 0xac, 0xa6, 0xda, 0x30, 0x6e, 0xbe, 0x80,
+ 0xb5, 0xb4, 0x81, 0x46, 0xc1, 0xe1, 0x6e, 0x8a, 0xec, 0x3d, 0xa3, 0xbd,
+ 0x8d, 0x18, 0x6d, 0x01, 0x01, 0xed, 0x49, 0xb3, 0xa2, 0xa2, 0x97, 0x4d,
+ 0x36, 0x13, 0xfb, 0x0a, 0xf6, 0x98, 0xc0, 0xc5, 0x9f, 0x4c, 0xb2, 0x0f,
+ 0x3e, 0xd5, 0x68, 0x7f, 0xdf, 0x81, 0x5e, 0x71, 0xbc, 0x8a, 0x6b, 0xef,
+ 0xd7, 0x50, 0x57, 0x58, 0xfb, 0xeb, 0x1a, 0xc6, 0xf8, 0x73, 0x71, 0xa5,
+ 0x88, 0xed, 0x8d, 0x5a, 0xd6, 0xfb, 0x0c, 0x6e, 0x06, 0x4e, 0xe4, 0x71,
+ 0xe1, 0xd9, 0x1a, 0x43, 0xbf, 0xaf, 0xbd, 0x5a, 0xb3, 0xde, 0xbb, 0x19,
+ 0x70, 0x34, 0x7e, 0x1c, 0x8d, 0x2d, 0xb8, 0xc7, 0x6b, 0x17, 0x3c, 0xc1,
+ 0x77, 0xce, 0x43, 0xdd, 0x15, 0x3c, 0xf4, 0xcd, 0xfc, 0x01, 0xf0, 0xe8,
+ 0xfa, 0xfb, 0x7e, 0x04, 0xc6, 0xd6, 0x77, 0xfd, 0xe8, 0x1c, 0x0c, 0xa7,
+ 0x0d, 0xb2, 0xb6, 0xb6, 0xb7, 0x76, 0x1e, 0xc1, 0x0e, 0x13, 0xf4, 0x20,
+ 0xe5, 0xfd, 0x0a, 0xfd, 0xb6, 0x86, 0xdb, 0x7e, 0x8f, 0xbb, 0x85, 0x0f,
+ 0x0f, 0xac, 0xd7, 0x1a, 0xbb, 0x31, 0xfe, 0xb5, 0x1f, 0xed, 0xb2, 0xe7,
+ 0x74, 0xfb, 0xbb, 0xe0, 0x8e, 0x13, 0x41, 0x12, 0x61, 0x10, 0x6b, 0x2d,
+ 0x2e, 0xb2, 0x51, 0x64, 0x5c, 0x17, 0x09, 0x5e, 0xd7, 0x0b, 0x55, 0x43,
+ 0x0c, 0x65, 0xf0, 0xf1, 0x78, 0x45, 0xa2, 0x98, 0xdf, 0x49, 0x01, 0x08,
+ 0x29, 0x5e, 0xe2, 0x9c, 0xf1, 0x9a, 0x22, 0x69, 0x15, 0x26, 0x4a, 0x31,
+ 0x56, 0x45, 0x82, 0x38, 0x7d, 0x59, 0x41, 0xd0, 0x56, 0xc6, 0x21, 0x58,
+ 0xf9, 0x8a, 0x76, 0x97, 0x37, 0x80, 0x7a, 0x19, 0xe0, 0x35, 0x45, 0xba,
+ 0x24, 0xf5, 0xf3, 0x1f, 0x78, 0x5d, 0x69, 0x51, 0x7c, 0x43, 0x4d, 0xf7,
+ 0x5e, 0xee, 0x51, 0x2d, 0x2a, 0x69, 0x1d, 0x80, 0xb1, 0x9f, 0xa3, 0x3f,
+ 0x68, 0xac, 0x70, 0xf2, 0xd1, 0x8c, 0x72, 0xd0, 0x47, 0x65, 0x36, 0x27,
+ 0x27, 0xa5, 0x6c, 0x4f, 0x6c, 0xb6, 0x87, 0xab, 0x26, 0xa7, 0x60, 0x79,
+ 0xc0, 0xbd, 0xc0, 0xfc, 0x81, 0x80, 0x2f, 0x4c, 0x77, 0xcb, 0x5d, 0x8f,
+ 0xdd, 0xd6, 0x50, 0x40, 0x44, 0xd8, 0xa5, 0x61, 0x2d, 0x9f, 0xd0, 0x08,
+ 0xae, 0xba, 0xf9, 0xa5, 0x99, 0x7e, 0x1b, 0xa8, 0x66, 0x85, 0xa8, 0x41,
+ 0xf3, 0xcd, 0xad, 0xfb, 0xbe, 0xf9, 0x6a, 0x45, 0xfd, 0x11, 0x5f, 0xeb,
+ 0x07, 0x8e, 0x9e, 0x54, 0x8b, 0x1b, 0xfb, 0xd3, 0x96, 0x5f, 0x65, 0xda,
+ 0xa7, 0x89, 0xab, 0x3a, 0x88, 0x5a, 0x81, 0x39, 0xf5, 0xa7, 0x27, 0xa7,
+ 0xbb, 0x94, 0x5d, 0xbf, 0x21, 0x6a, 0x26, 0x79, 0xfe, 0xa7, 0x82, 0x0e,
+ 0x2a, 0xdd, 0xa2, 0x9c, 0xec, 0x75, 0xb6, 0xbb, 0xa9, 0xed, 0xb4, 0xef,
+ 0x68, 0xa5, 0x9e, 0x7c, 0x09, 0xc7, 0x0e, 0xb9, 0x8e, 0x15, 0x0b, 0x96,
+ 0x6c, 0x26, 0x57, 0x4a, 0x92, 0x96, 0x42, 0xeb, 0x96, 0x7f, 0x93, 0xfa,
+ 0x53, 0x79, 0x81, 0x2e, 0x94, 0x18, 0x15, 0xb7, 0x87, 0x19, 0x5d, 0x82,
+ 0xc8, 0x8f, 0xa9, 0x99, 0xb5, 0x02, 0xe4, 0x32, 0x50, 0x24, 0xb6, 0xbd,
+ 0x02, 0x52, 0xa7, 0xda, 0x00, 0x9b, 0x7c, 0xcf, 0x18, 0x81, 0x21, 0x67,
+ 0xa1, 0x34, 0x90, 0x76, 0x9e, 0xa5, 0x82, 0x2a, 0xa3, 0x13, 0xb0, 0xd2,
+ 0x6a, 0x00, 0xa3, 0x30, 0x4b, 0x10, 0xd9, 0xdb, 0xc4, 0x47, 0xe7, 0x9e,
+ 0x25, 0x8d, 0xc6, 0x5a, 0x24, 0x4f, 0x70, 0x6b, 0x1a, 0x2e, 0xbf, 0x51,
+ 0xb2, 0xe0, 0x2c, 0xf9, 0xe8, 0xf5, 0x4b, 0x8c, 0xe8, 0x1b, 0x9d, 0xca,
+ 0xe3, 0x25, 0x54, 0x6e, 0xc3, 0x40, 0xf8, 0xb6, 0xf4, 0xc4, 0x05, 0xc5,
+ 0x7b, 0x79, 0x7c, 0x76, 0xee, 0x51, 0x39, 0x36, 0x0a, 0xda, 0x03, 0x32,
+ 0xc1, 0xda, 0x03, 0xde, 0x04, 0x2d, 0xd6, 0xa4, 0x03, 0x8c, 0x38, 0xc7,
+ 0x83, 0x2b, 0x2d, 0xd9, 0x24, 0xcb, 0x4a, 0x5b, 0x0d, 0xe7, 0x2d, 0x02,
+ 0x17, 0xf9, 0x17, 0x0e, 0x7f, 0x48, 0x9b, 0x12, 0xad, 0xa9, 0xaa, 0x16,
+ 0xc3, 0x58, 0xf7, 0x2c, 0x13, 0xaf, 0x79, 0x75, 0x33, 0x1b, 0x16, 0x98,
+ 0x90, 0x08, 0xfa, 0xd8, 0x7b, 0x9f, 0x73, 0xad, 0x9f, 0x05, 0xa9, 0xe9,
+ 0xac, 0x79, 0x56, 0x06, 0xe3, 0x88, 0x29, 0xca, 0x21, 0xa2, 0x40, 0x34,
+ 0x5a, 0xe0, 0x17, 0xf0, 0xc8, 0xfa, 0x64, 0x44, 0x60, 0xc7, 0x16, 0xd4,
+ 0x06, 0xb5, 0xae, 0x75, 0x09, 0x85, 0x05, 0xaa, 0x36, 0xee, 0x4a, 0x61,
+ 0x44, 0x62, 0xad, 0x75, 0x7b, 0x29, 0x21, 0xc8, 0x52, 0x1b, 0x34, 0xd6,
+ 0x22, 0x31, 0xe1, 0x70, 0x15, 0x4b, 0x8c, 0x46, 0x05, 0xc4, 0xa5, 0x87,
+ 0x7b, 0x42, 0x28, 0xab, 0xc6, 0x4b, 0x16, 0xd8, 0x5b, 0xbc, 0xb4, 0xb2,
+ 0xb7, 0x65, 0x8a, 0x6e, 0xac, 0xab, 0x46, 0x66, 0xfd, 0x28, 0x4a, 0xa9,
+ 0x05, 0x08, 0x85, 0xe8, 0xf0, 0xd9, 0xd6, 0x36, 0x77, 0x5f, 0x5c, 0x24,
+ 0x33, 0xb7, 0x62, 0x76, 0x98, 0x5a, 0x94, 0x59, 0x97, 0x1c, 0xdf, 0x1c,
+ 0x9d, 0xbf, 0x31, 0xd7, 0x7a, 0x59, 0x2d, 0xb1, 0x7f, 0xcd, 0xed, 0xb6,
+ 0x57, 0xc0, 0xde, 0x28, 0x8c, 0x67, 0x96, 0x8d, 0xbd, 0x6d, 0xbc, 0xc4,
+ 0x81, 0xe4, 0x22, 0x8d, 0xb3, 0xb1, 0x62, 0xf4, 0x6a, 0x8c, 0x9f, 0x6f,
+ 0x08, 0x2e, 0x93, 0x2c, 0x04, 0xaa, 0xde, 0xa5, 0x96, 0x66, 0x5d, 0xb7,
+ 0x84, 0x23, 0x9a, 0x8d, 0x86, 0x0f, 0xf1, 0x8f, 0xdc, 0x5a, 0x40, 0x3a,
+ 0xa2, 0xb9, 0x36, 0x91, 0xe3, 0x19, 0xf3, 0x13, 0xf3, 0x2b, 0x6e, 0x42,
+ 0xf9, 0xf6, 0xf8, 0xf9, 0x4b, 0xb3, 0x59, 0xb2, 0x39, 0x04, 0x2e, 0x60,
+ 0x3e, 0x15, 0x5b, 0x7e, 0xa9, 0xd8, 0xe6, 0x33, 0xf1, 0x90, 0xdf, 0x17,
+ 0x79, 0xf6, 0x4f, 0x32, 0x03, 0xc8, 0xc2, 0x9e, 0x64, 0xa2, 0x35, 0x5f,
+ 0xda, 0xa2, 0x68, 0xea, 0xbe, 0x8a, 0xfd, 0x4b, 0x79, 0x1f, 0xb4, 0x61,
+ 0x16, 0x27, 0x98, 0x04, 0x1b, 0x7a, 0x2c, 0x8b, 0x56, 0x36, 0x25, 0x42,
+ 0x28, 0x44, 0xf9, 0x51, 0x85, 0x2b, 0x66, 0xe4, 0xd5, 0x2d, 0x18, 0x5d,
+ 0x92, 0x6f, 0x66, 0xc3, 0x5d, 0xda, 0xec, 0x14, 0x8d, 0x7f, 0xc3, 0x0f,
+ 0xfa, 0xe7, 0x02, 0x93, 0x7b, 0x49, 0x18, 0xba, 0x67, 0xda, 0x30, 0x66,
+ 0x30, 0x37, 0x35, 0x26, 0xa3, 0x79, 0x1f, 0x34, 0xe0, 0x4d, 0x6a, 0x8e,
+ 0xeb, 0x19, 0x34, 0x02, 0x3f, 0x6b, 0x01, 0x46, 0x25, 0xfd, 0x46, 0xe3,
+ 0x55, 0xa5, 0x34, 0xd5, 0x5d, 0x7f, 0xf1, 0xe6, 0xe4, 0x55, 0x7c, 0x7e,
+ 0xb2, 0x81, 0xb7, 0x81, 0x73, 0xd9, 0x71, 0xe8, 0x36, 0xd7, 0x92, 0x46,
+ 0xc7, 0x4e, 0xda, 0x7f, 0x13, 0xe0, 0x7d, 0xbd, 0xc2, 0x28, 0xdc, 0x6b,
+ 0xd3, 0x10, 0x88, 0x96, 0xa7, 0x6f, 0x0d, 0x6f, 0x3c, 0x26, 0x48, 0xd6,
+ 0x0f, 0x2a, 0xca, 0x70, 0x69, 0x46, 0x09, 0x9a, 0xd8, 0x5a, 0x8a, 0x87,
+ 0x74, 0x07, 0x5a, 0x52, 0x6d, 0xea, 0x04, 0x78, 0x9d, 0x68, 0xd0, 0x60,
+ 0x1b, 0x53, 0xaa, 0x56, 0xf6, 0x28, 0x19, 0xb8, 0x7c, 0x52, 0x96, 0xc5,
+ 0xb5, 0x6a, 0x82, 0x28, 0xaf, 0x80, 0x22, 0x6d, 0xbf, 0x5c, 0x27, 0xba,
+ 0x06, 0x83, 0x63, 0xb7, 0x29, 0xa0, 0x61, 0x58, 0x43, 0x47, 0xdc, 0xca,
+ 0xd9, 0xe3, 0xcf, 0x10, 0xda, 0x70, 0x66, 0x47, 0xd5, 0x2c, 0xde, 0xdd,
+ 0x5a, 0xb5, 0x33, 0xf9, 0x05, 0x75, 0x78, 0x04, 0x93, 0xa8, 0x98, 0x4c,
+ 0xda, 0xb4, 0x83, 0x9b, 0x10, 0x4b, 0xd2, 0x70, 0x07, 0xc4, 0xe6, 0x4b,
+ 0xd4, 0x02, 0xb0, 0x07, 0x8e, 0x7d, 0x83, 0x6b, 0x7d, 0x04, 0xa5, 0xc5,
+ 0x74, 0x6c, 0xbd, 0x94, 0xbc, 0xaf, 0x3f, 0x53, 0xb6, 0x5a, 0xfb, 0x0e,
+ 0x83, 0xe2, 0x4c, 0xd7, 0x1c, 0x73, 0x24, 0x4c, 0x0b, 0x1c, 0xc9, 0x51,
+ 0xc3, 0xbe, 0x5a, 0xc8, 0x55, 0xb4, 0x43, 0x4d, 0x84, 0xa8, 0xd1, 0xe7,
+ 0x0c, 0x80, 0x80, 0x2e, 0x1c, 0xfc, 0x4f, 0x00, 0xb0, 0x3f, 0xc3, 0xfe,
+ 0x5b, 0xe3, 0xc5, 0x88, 0x08, 0x07, 0xbd, 0xc9, 0x88, 0x24, 0x32, 0x2c,
+ 0xa9, 0x27, 0x96, 0xf0, 0x66, 0x1a, 0xda, 0xf6, 0xfe, 0xa1, 0x3c, 0xb7,
+ 0x60, 0x33, 0x59, 0x7c, 0x0e, 0x7e, 0xc1, 0xd1, 0x36, 0xd3, 0x54, 0x8e,
+ 0x8c, 0xe9, 0x96, 0x47, 0x12, 0xc5, 0x5c, 0xb4, 0xce, 0x0f, 0x66, 0x54,
+ 0x2f, 0xec, 0x07, 0x04, 0x6a, 0xe0, 0x34, 0xa6, 0xe6, 0x34, 0x61, 0x3f,
+ 0x0b, 0xa5, 0x36, 0x7e, 0x9b, 0x54, 0x20, 0x11, 0x9a, 0x23, 0x6e, 0x2c,
+ 0x45, 0x48, 0x68, 0x9f, 0xd2, 0xc3, 0x76, 0xaa, 0x6d, 0x8f, 0x7e, 0x1f,
+ 0xea, 0x6c, 0xac, 0x2e, 0x26, 0x27, 0x69, 0xb9, 0x87, 0x24, 0x40, 0x47,
+ 0xbe, 0x12, 0xa9, 0x2e, 0xb4, 0x55, 0x8e, 0x43, 0xa7, 0x0d, 0xca, 0xeb,
+ 0xa0, 0xd1, 0xe3, 0x89, 0x5b, 0xdd, 0x8c, 0x9d, 0x08, 0x09, 0xab, 0xc3,
+ 0x50, 0x98, 0x70, 0x4e, 0x74, 0x9b, 0x60, 0x62, 0x3e, 0xee, 0x19, 0x76,
+ 0x35, 0x0c, 0x48, 0xc1, 0x04, 0x74, 0x1c, 0xcc, 0x5e, 0x40, 0xbd, 0x55,
+ 0x27, 0x8d, 0xd6, 0x6d, 0x7b, 0x75, 0x81, 0xde, 0x79, 0x29, 0xbf, 0xda,
+ 0x33, 0xad, 0x99, 0x51, 0x78, 0xb6, 0x86, 0xdb, 0xfd, 0xf1, 0x47, 0xab,
+ 0x98, 0xa2, 0xd7, 0x70, 0xa3, 0xb3, 0xc4, 0x17, 0x48, 0xb4, 0x68, 0xa1,
+ 0x4e, 0xfa, 0xd5, 0x03, 0xa4, 0x88, 0x81, 0xda, 0xa5, 0x35, 0xea, 0xf4,
+ 0xd9, 0x9c, 0xcd, 0x50, 0x17, 0x17, 0x29, 0x8b, 0x57, 0x2e, 0xa8, 0x68,
+ 0xa2, 0x07, 0xc0, 0x0d, 0x8a, 0x8f, 0xfb, 0x5f, 0x84, 0xf2, 0x54, 0xfb,
+ 0x26, 0x8d, 0x8f, 0x53, 0x9f, 0xa6, 0xd3, 0xd6, 0x66, 0x71, 0xee, 0x20,
+ 0x98, 0xfe, 0x81, 0x7c, 0x21, 0x86, 0x3a, 0x6a, 0x5d, 0x8f, 0x4a, 0x3a,
+ 0x95, 0xd3, 0x77, 0x91, 0xec, 0xab, 0x28, 0x39, 0x18, 0x25, 0xfe, 0xa8,
+ 0x4c, 0xc5, 0xe7, 0x1e, 0x6a, 0x22, 0x4e, 0x1f, 0x98, 0xe5, 0x19, 0xfe,
+ 0x9e, 0x78, 0x04, 0x75, 0x7f, 0x48, 0x1c, 0xb6, 0x60, 0x37, 0xac, 0x75,
+ 0x54, 0xd4, 0x3c, 0xcb, 0x07, 0x1f, 0x37, 0x36, 0xd0, 0x45, 0x5a, 0x1b,
+ 0x05, 0xe6, 0xcf, 0x86, 0x36, 0x89, 0x51, 0xe1, 0x4e, 0x0f, 0x5a, 0xf9,
+ 0xd4, 0x78, 0xf2, 0xa1, 0x3c, 0x0f, 0x43, 0xe6, 0x98, 0x4d, 0x81, 0x10,
+ 0x52, 0x05, 0x76, 0xff, 0x23, 0x91, 0x74, 0x19, 0x50, 0xd2, 0x5e, 0x92,
+ 0x35, 0x2b, 0x1f, 0x86, 0x3d, 0xe7, 0x16, 0x98, 0xcc, 0x4a, 0xea, 0xb7,
+ 0xe5, 0x49, 0xc4, 0x8f, 0x38, 0x50, 0xcb, 0x2d, 0x35, 0xc5, 0xe1, 0xec,
+ 0xeb, 0xf7, 0x9c, 0x64, 0x40, 0x6f, 0x76, 0x36, 0xa1, 0xb3, 0x29, 0x6e,
+ 0x3c, 0x64, 0xe5, 0xee, 0x1f, 0xa9, 0x74, 0x93, 0x46, 0xcd, 0x8e, 0x80,
+ 0xe2, 0x63, 0x72, 0x36, 0x21, 0xec, 0xf9, 0xdd, 0xea, 0xc7, 0x82, 0x1c,
+ 0xe0, 0x36, 0x12, 0x6b, 0x74, 0x86, 0xfb, 0xee, 0xe8, 0xdc, 0x45, 0x9e,
+ 0xb2, 0x24, 0xef, 0xc3, 0x69, 0xec, 0x6e, 0x6d, 0xf7, 0xe1, 0x8f, 0x1d,
+ 0xca, 0x02, 0xde, 0xdd, 0xda, 0x35, 0xed, 0x3d, 0x1a, 0xd7, 0x84, 0x82,
+ 0x02, 0x16, 0xd6, 0x2f, 0xda, 0xfd, 0xf0, 0x21, 0xa2, 0x5f, 0xf4, 0x43,
+ 0x0d, 0x0c, 0x23, 0x0a, 0xcf, 0xe9, 0x2a, 0xdd, 0x90, 0xb7, 0xae, 0xd3,
+ 0xe2, 0x86, 0x51, 0x12, 0xed, 0x22, 0xd7, 0x66, 0x1c, 0x6d, 0xf3, 0x97,
+ 0xc0, 0xc4, 0x82, 0x7d, 0xfd, 0xa8, 0x77, 0x63, 0xaa, 0x1d, 0xb6, 0x6a,
+ 0x36, 0x24, 0xe5, 0xe8, 0x29, 0xb1, 0xdd, 0x6d, 0x55, 0x8e, 0x1b, 0xc2,
+ 0x5d, 0xe7, 0x12, 0xf8, 0xc8, 0x0f, 0xed, 0x56, 0xbb, 0xfa, 0xa9, 0xc3,
+ 0x1b, 0x67, 0x65, 0xa0, 0x51, 0x08, 0x87, 0x31, 0x2d, 0xbb, 0x18, 0xa9,
+ 0x08, 0x79, 0xd8, 0x1e, 0x75, 0x14, 0x04, 0x12, 0xc7, 0xfd, 0xf3, 0x88,
+ 0x82, 0x7f, 0xa1, 0xe8, 0x7e, 0xfc, 0xaf, 0xdd, 0xb0, 0x67, 0x56, 0xe1,
+ 0xd2, 0x6c, 0x77, 0x3d, 0x52, 0x2d, 0xad, 0x6e, 0xa9, 0x49, 0xbb, 0x52,
+ 0x62, 0x2f, 0xcf, 0x07, 0xd2, 0x0c, 0xd8, 0x03, 0x6c, 0x3d, 0xc2, 0x55,
+ 0x3a, 0x65, 0xc1, 0x4d, 0xd1, 0xba, 0x25, 0x02, 0xad, 0xc1, 0xce, 0x1f,
+ 0xbe, 0xc6, 0xdc, 0x74, 0xe9, 0x5b, 0x4d, 0x90, 0xbd, 0x5c, 0xd5, 0x73,
+ 0x45, 0xd5, 0x25, 0x0a, 0x81, 0x95, 0x4c, 0xeb, 0xb8, 0xba, 0x1a, 0x35,
+ 0x95, 0x2b, 0xcc, 0x13, 0xd0, 0xa3, 0xdc, 0x97, 0xbf, 0x78, 0x31, 0x50,
+ 0xea, 0x2e, 0x1d, 0xbd, 0x7c, 0x8e, 0x7f, 0x92, 0xd3, 0x4a, 0xfa, 0x64,
+ 0x6b, 0x0c, 0x82, 0xb4, 0x4a, 0x1c, 0xca, 0x50, 0x85, 0x68, 0xdd, 0xe3,
+ 0x45, 0x20, 0x77, 0x4c, 0xed, 0xc7, 0x06, 0x47, 0xee, 0xa4, 0x67, 0x1c,
+ 0xc6, 0x1b, 0x5b, 0x6b, 0xba, 0x2d, 0x82, 0xb8, 0xb5, 0x63, 0xc3, 0xd9,
+ 0x79, 0x1c, 0x07, 0x45, 0x45, 0xcd, 0xa2, 0xa8, 0xf2, 0xea, 0xda, 0x0b,
+ 0x89, 0x0e, 0x6a, 0x13, 0x4c, 0x27, 0xc1, 0x80, 0x5f, 0xdf, 0xa6, 0x67,
+ 0xda, 0x05, 0xdc, 0x56, 0x6a, 0xb8, 0xad, 0x11, 0xc1, 0xc6, 0x3a, 0xd9,
+ 0x8b, 0xee, 0xf9, 0x1c, 0xb8, 0x0e, 0xbc, 0x1d, 0x2e, 0xa1, 0x17, 0xed,
+ 0x9d, 0xe2, 0x8e, 0x81, 0x64, 0xa5, 0x63, 0xc6, 0xc8, 0xce, 0xee, 0xb3,
+ 0x47, 0x7d, 0xfa, 0xdb, 0xe3, 0xad, 0x2f, 0x77, 0x4c, 0x32, 0xc4, 0xf1,
+ 0xd1, 0xf9, 0x8b, 0x68, 0x5c, 0xc2, 0x25, 0xfe, 0x22, 0x5c, 0x77, 0x8a,
+ 0x39, 0xd1, 0xd8, 0x1b, 0xfd, 0x3d, 0xa8, 0x2a, 0x59, 0x5a, 0x4f, 0x4c,
+ 0x71, 0x39, 0x62, 0x7d, 0x6c, 0xd2, 0x9b, 0x71, 0x9a, 0x94, 0x97, 0x49,
+ 0x59, 0xc7, 0x18, 0x44, 0xac, 0x66, 0xf5, 0x3c, 0xde, 0xf2, 0xb2, 0xf3,
+ 0xce, 0xc8, 0xc5, 0xf2, 0x6c, 0xb0, 0x33, 0xd8, 0xea, 0x73, 0xa7, 0x71,
+ 0x83, 0x13, 0xdf, 0x3e, 0xf9, 0xa8, 0x77, 0xf0, 0xf6, 0xfc, 0xfb, 0xaf,
+ 0xfe, 0xfc, 0xf2, 0xe4, 0xbb, 0xe3, 0xd7, 0x3d, 0x10, 0x58, 0x3f, 0x74,
+ 0x74, 0x27, 0x35, 0x8e, 0x73, 0x26, 0x6d, 0xd3, 0x80, 0x8b, 0x14, 0xd5,
+ 0x68, 0x1d, 0x19, 0xd7, 0xd9, 0xc1, 0xd9, 0xcb, 0x8d, 0x88, 0x46, 0xe2,
+ 0x59, 0xc5, 0xde, 0x6f, 0xc7, 0x86, 0x30, 0x8c, 0xa3, 0x8a, 0xb4, 0x90,
+ 0xd6, 0xf8, 0x0a, 0x13, 0x07, 0x70, 0x4c, 0x1c, 0xc4, 0x3b, 0xe1, 0xe8,
+ 0x90, 0xd3, 0xcb, 0x28, 0x64, 0xee, 0xbb, 0x03, 0x49, 0x82, 0xe7, 0x9c,
+ 0x80, 0xe4, 0x41, 0x7b, 0x70, 0xc3, 0xe7, 0x5a, 0x64, 0x0e, 0xa7, 0x4b,
+ 0xa9, 0xa4, 0x46, 0xb6, 0x14, 0xd0, 0x16, 0x24, 0x45, 0x13, 0xc7, 0xe3,
+ 0xcf, 0x43, 0xc5, 0x5b, 0x4c, 0x87, 0x26, 0x7a, 0x99, 0xd6, 0x90, 0xd3,
+ 0x1e, 0xd3, 0xb7, 0xb4, 0xeb, 0x5a, 0x99, 0xa7, 0xb8, 0x7b, 0xc5, 0x1b,
+ 0xb4, 0x9e, 0x0e, 0x2e, 0x06, 0x9c, 0xc8, 0x85, 0x1b, 0x52, 0xdb, 0x45,
+ 0x55, 0x79, 0x51, 0x60, 0xa8, 0x60, 0xa3, 0xcb, 0x6e, 0x74, 0x59, 0xc0,
+ 0xef, 0x5f, 0x62, 0xd9, 0x9c, 0x7f, 0x8d, 0xc8, 0xe7, 0x4f, 0x6b, 0x51,
+ 0x36, 0x4b, 0xe6, 0x1f, 0xa3, 0x8f, 0xc7, 0xe8, 0xf1, 0x89, 0xf1, 0xe0,
+ 0xa3, 0x7d, 0x29, 0xbc, 0xf3, 0x1b, 0xce, 0x35, 0x98, 0x98, 0x29, 0xf7,
+ 0x91, 0xc7, 0xad, 0xeb, 0xbc, 0x8d, 0x24, 0x81, 0x3b, 0x91, 0x78, 0xb5,
+ 0x69, 0xcd, 0x84, 0x10, 0xc1, 0xc8, 0x58, 0x67, 0xdf, 0x52, 0x7d, 0x43,
+ 0xce, 0x0a, 0x0c, 0x21, 0x0e, 0x67, 0x18, 0x92, 0x1f, 0xab, 0x5b, 0xc9,
+ 0x34, 0x9b, 0xaf, 0x3c, 0x3a, 0x64, 0x25, 0x66, 0x9a, 0xdc, 0xf0, 0xec,
+ 0x49, 0xce, 0x8a, 0x46, 0x07, 0x26, 0x17, 0xe7, 0x37, 0xda, 0xaf, 0xfe,
+ 0x0c, 0x4e, 0x00, 0x3b, 0x39, 0x1e, 0xc6, 0x37, 0xce, 0xd9, 0x81, 0x69,
+ 0x7e, 0xce, 0xad, 0x91, 0x91, 0xc5, 0xdc, 0xbd, 0xa3, 0x1b, 0x8d, 0x58,
+ 0x8e, 0xe6, 0x8a, 0x86, 0x42, 0xff, 0x46, 0x13, 0xc0, 0x3b, 0x69, 0xb2,
+ 0x0b, 0xee, 0x79, 0xd2, 0xd6, 0x02, 0xe3, 0x98, 0x30, 0x2d, 0xd4, 0x14,
+ 0xd2, 0x5f, 0xa4, 0x01, 0x75, 0xb3, 0x8e, 0x9a, 0xab, 0xf0, 0x0f, 0x81,
+ 0x16, 0xf4, 0xb9, 0x0e, 0x81, 0x26, 0x6f, 0x1f, 0xc2, 0x43, 0x9e, 0x01,
+ 0x9e, 0xb2, 0x77, 0x06, 0xf8, 0x50, 0x4c, 0xfe, 0x16, 0x82, 0x6e, 0x0d,
+ 0x1f, 0x02, 0xa9, 0xfe, 0xea, 0x8d, 0xe1, 0xf2, 0xfd, 0xc2, 0x2a, 0x58,
+ 0x60, 0x00, 0x64, 0x73, 0xcc, 0xa3, 0x80, 0x1d, 0x72, 0x50, 0x28, 0x02,
+ 0xaa, 0x1d, 0x88, 0x51, 0x14, 0x40, 0x24, 0x7f, 0x47, 0x45, 0x8e, 0xa1,
+ 0x17, 0x31, 0xed, 0x30, 0x6c, 0x80, 0x99, 0x31, 0x69, 0x52, 0xb5, 0x32,
+ 0x9e, 0x22, 0x67, 0x7c, 0x0f, 0xce, 0x80, 0x44, 0xd0, 0x9b, 0xc3, 0xd3,
+ 0xf3, 0xe8, 0xfc, 0xc4, 0xf5, 0xc3, 0x33, 0xe0, 0x00, 0x35, 0xee, 0xeb,
+ 0xc0, 0x44, 0xa7, 0x3c, 0x79, 0x81, 0xcb, 0x18, 0xa6, 0x97, 0xc9, 0x55,
+ 0x56, 0x98, 0x06, 0xc5, 0xac, 0x7d, 0x13, 0x08, 0x98, 0x56, 0x81, 0x36,
+ 0x77, 0xcb, 0x4b, 0x3c, 0x92, 0xdd, 0x6b, 0xe7, 0xdc, 0x70, 0x0f, 0x52,
+ 0x81, 0x2b, 0x33, 0x06, 0x26, 0xe7, 0x17, 0xf2, 0xca, 0xaa, 0x10, 0xf6,
+ 0x74, 0x03, 0x1e, 0x97, 0x6d, 0x98, 0x99, 0xe4, 0xfb, 0x01, 0xd1, 0x65,
+ 0x63, 0x67, 0x47, 0x82, 0xd4, 0x8c, 0xa6, 0xb6, 0xf3, 0x4c, 0xa4, 0x90,
+ 0xf1, 0x11, 0x6f, 0x15, 0xee, 0x95, 0xfa, 0x25, 0x45, 0x2f, 0xc1, 0x5c,
+ 0x91, 0x69, 0x72, 0xe1, 0x53, 0x73, 0xbb, 0xab, 0x2d, 0x03, 0xf9, 0xca,
+ 0x39, 0x12, 0x66, 0xa8, 0x77, 0x96, 0x9c, 0xfa, 0xc4, 0x27, 0x10, 0xcc,
+ 0x57, 0x12, 0x04, 0xc3, 0x51, 0x9a, 0x61, 0xcb, 0x43, 0x22, 0x7b, 0x89,
+ 0xe3, 0xd1, 0xdd, 0x6a, 0x1d, 0xe7, 0x52, 0x17, 0x56, 0x88, 0x84, 0x6f,
+ 0x71, 0x63, 0xf9, 0xb0, 0xc5, 0xb7, 0x15, 0x12, 0x85, 0x26, 0xb9, 0xd7,
+ 0x0d, 0x6f, 0x2f, 0xd4, 0xbd, 0xa7, 0x60, 0x17, 0xd5, 0x8d, 0x8b, 0xef,
+ 0x5f, 0xf8, 0xbb, 0xdc, 0xf7, 0x26, 0x50, 0xee, 0x97, 0x4d, 0xa0, 0x5c,
+ 0x3b, 0xdb, 0xaa, 0x4c, 0x97, 0xe3, 0x63, 0xf2, 0x52, 0x9f, 0x83, 0x35,
+ 0xe4, 0x91, 0x25, 0x0f, 0x6a, 0x36, 0xe5, 0xbc, 0xbb, 0x60, 0xcb, 0x48,
+ 0xd8, 0xdb, 0x37, 0xe9, 0x3c, 0x65, 0x5c, 0x0b, 0xb7, 0x9c, 0xd3, 0xad,
+ 0xb5, 0xd4, 0x20, 0x51, 0x93, 0xad, 0x78, 0xf0, 0x25, 0x5d, 0x44, 0x4f,
+ 0xfc, 0x49, 0x02, 0x6f, 0x12, 0x38, 0x55, 0x31, 0xd1, 0x28, 0x7a, 0x5e,
+ 0xff, 0xfb, 0x9b, 0x17, 0xff, 0x50, 0xc2, 0xda, 0xe8, 0x2b, 0x7b, 0xe9,
+ 0x98, 0xc7, 0xc5, 0x65, 0x71, 0x6e, 0x42, 0x24, 0xe5, 0x76, 0x8d, 0x4d,
+ 0xb0, 0xff, 0xf0, 0xaf, 0xf3, 0xb8, 0xa0, 0x7a, 0xab, 0x75, 0x4c, 0x66,
+ 0xc6, 0xe6, 0xaf, 0x12, 0x20, 0xd8, 0x1d, 0x3c, 0xa6, 0xd0, 0x20, 0x5a,
+ 0x08, 0xbb, 0x3b, 0xdb, 0x1b, 0xb7, 0x7f, 0x55, 0x63, 0xab, 0x31, 0xc3,
+ 0x18, 0x6f, 0xda, 0xfa, 0xd1, 0x8f, 0xa7, 0xaf, 0x5b, 0xdf, 0x44, 0x77,
+ 0xdf, 0xcb, 0x4c, 0xc7, 0x4f, 0xb2, 0xf9, 0xab, 0xf6, 0x7b, 0xac, 0xab,
+ 0xa0, 0x31, 0xbe, 0x62, 0xb3, 0x12, 0xfa, 0x5b, 0x20, 0xf7, 0xfb, 0x45,
+ 0x99, 0xa1, 0x3a, 0xdd, 0xc3, 0xcf, 0xef, 0xbd, 0x2c, 0xf2, 0x71, 0x91,
+ 0xc7, 0x27, 0x13, 0xd8, 0xeb, 0xb4, 0x17, 0x28, 0xb6, 0xb5, 0xb4, 0xf7,
+ 0xe9, 0x3a, 0x4a, 0xda, 0x39, 0x1a, 0x62, 0x34, 0x47, 0x04, 0xf6, 0x7b,
+ 0xdd, 0xa6, 0xe0, 0x85, 0x77, 0xf1, 0x40, 0x5a, 0x63, 0xbc, 0x12, 0x90,
+ 0x90, 0xe7, 0xdc, 0xfb, 0x9b, 0xb1, 0x29, 0x17, 0x17, 0xd2, 0xf5, 0xbb,
+ 0x0e, 0x25, 0x43, 0xde, 0xfa, 0x49, 0x34, 0xcd, 0x9d, 0x52, 0x11, 0xfb,
+ 0x4e, 0x62, 0x23, 0x8b, 0x7d, 0xb4, 0x23, 0xd3, 0x26, 0x07, 0xf8, 0x40,
+ 0x75, 0xb0, 0x14, 0xfe, 0xdd, 0xa7, 0x2c, 0xb3, 0xaf, 0xbb, 0x90, 0xb2,
+ 0xa3, 0x57, 0x7f, 0x3b, 0x3f, 0x6f, 0xfa, 0x0b, 0x34, 0x63, 0x91, 0x5e,
+ 0x5f, 0xd7, 0xa4, 0x3b, 0x51, 0x93, 0x39, 0x51, 0xb5, 0xf0, 0x88, 0x9f,
+ 0xd3, 0x13, 0x07, 0xd6, 0x95, 0x4e, 0x0f, 0x5a, 0x57, 0x30, 0xb6, 0x99,
+ 0x67, 0x54, 0x6b, 0x8a, 0xdf, 0x72, 0x57, 0x20, 0xd4, 0xad, 0xfa, 0x01,
+ 0x47, 0xa5, 0x49, 0x32, 0x33, 0x36, 0x18, 0x63, 0x0b, 0xe0, 0xf7, 0x8a,
+ 0xbb, 0x9b, 0xe4, 0x0e, 0xb3, 0xef, 0xf4, 0x03, 0x81, 0x8e, 0x8e, 0xd3,
+ 0xe8, 0x89, 0xef, 0xb6, 0x3a, 0xe0, 0xcf, 0x10, 0x8f, 0x1d, 0x07, 0x9f,
+ 0x85, 0x2e, 0xd9, 0x0d, 0x20, 0xc4, 0xd2, 0x6f, 0x25, 0x08, 0x72, 0x9a,
+ 0xdf, 0x5f, 0xd7, 0x7c, 0x30, 0x24, 0x96, 0xb5, 0xe4, 0x4b, 0x37, 0x29,
+ 0x83, 0x36, 0x63, 0x90, 0x72, 0x04, 0x31, 0xf9, 0x2f, 0x9c, 0x21, 0xd8,
+ 0xf6, 0x82, 0x2d, 0xcd, 0x17, 0x94, 0xfc, 0xc0, 0x8e, 0x5c, 0x3e, 0x4a,
+ 0xe6, 0x6b, 0x9d, 0xaa, 0x23, 0x16, 0x1e, 0x3f, 0x0b, 0xb4, 0xe7, 0x7c,
+ 0x7d, 0x72, 0x7e, 0xb4, 0x67, 0x6b, 0x08, 0x69, 0x2f, 0x09, 0xe2, 0xa6,
+ 0x6f, 0xaa, 0x7c, 0xf9, 0xe0, 0x38, 0x73, 0x80, 0xf7, 0x9e, 0xc0, 0x40,
+ 0xb9, 0x65, 0x9d, 0x1f, 0xef, 0xd0, 0x93, 0xef, 0x33, 0x38, 0x3f, 0x72,
+ 0x11, 0x4e, 0xad, 0xa9, 0xfd, 0xc2, 0x41, 0xad, 0x1c, 0x54, 0x48, 0xa7,
+ 0x49, 0x40, 0x6f, 0x60, 0xfa, 0xd2, 0xf3, 0x27, 0x4b, 0x7e, 0x31, 0x17,
+ 0x93, 0xcb, 0x23, 0x20, 0x36, 0x0a, 0x28, 0xe7, 0xcb, 0xef, 0xf6, 0x8b,
+ 0x14, 0x43, 0x6e, 0x5c, 0x22, 0x12, 0xf7, 0x53, 0x1b, 0xb8, 0xcb, 0x56,
+ 0xc9, 0xb1, 0x78, 0xa0, 0x13, 0xdf, 0x91, 0x4d, 0x51, 0x41, 0x05, 0x0e,
+ 0x35, 0xb9, 0x8c, 0xe2, 0xa7, 0x32, 0xdd, 0xa6, 0x83, 0x76, 0x7c, 0xe3,
+ 0x3a, 0xde, 0xd5, 0xee, 0x78, 0x40, 0x3b, 0xbe, 0x31, 0x7f, 0x67, 0x62,
+ 0x5f, 0x37, 0xa3, 0xb4, 0x29, 0x7a, 0x6d, 0x26, 0x23, 0xa1, 0x04, 0xcc,
+ 0x1c, 0xe8, 0xc0, 0x75, 0xe1, 0xdc, 0x01, 0x93, 0x03, 0x6d, 0x0b, 0x5c,
+ 0x35, 0xa6, 0xa0, 0x7e, 0x43, 0x76, 0xbb, 0x4b, 0xf6, 0x58, 0xfc, 0xd2,
+ 0xf7, 0x52, 0x1b, 0x97, 0xaf, 0x09, 0x10, 0x39, 0x2e, 0x15, 0xf1, 0xe4,
+ 0x93, 0x96, 0xe9, 0x7a, 0xf0, 0x31, 0x98, 0x4f, 0x38, 0x71, 0xde, 0x69,
+ 0x4a, 0xf4, 0xa4, 0xcf, 0x21, 0x13, 0x03, 0x11, 0x2d, 0x75, 0xa3, 0x14,
+ 0x77, 0x91, 0x7a, 0x28, 0x98, 0xe6, 0xf1, 0x96, 0x7d, 0x03, 0xc1, 0xe5,
+ 0xea, 0x90, 0xdf, 0xcc, 0xd6, 0x0d, 0xc4, 0xdb, 0x26, 0x1f, 0x25, 0xa3,
+ 0x8e, 0xf4, 0x9c, 0x72, 0xdd, 0x4d, 0x1d, 0xb2, 0x8f, 0x9f, 0xc5, 0x26,
+ 0x35, 0xb3, 0xef, 0xba, 0x9b, 0xbc, 0x12, 0x85, 0x34, 0x5c, 0xf2, 0x0e,
+ 0x8d, 0x34, 0xea, 0x5a, 0xa3, 0xfd, 0x09, 0xc8, 0x29, 0x81, 0x16, 0xe9,
+ 0x28, 0x72, 0x7f, 0x25, 0x74, 0xc2, 0xf5, 0xbd, 0xb9, 0x3e, 0x66, 0xa1,
+ 0xf1, 0x48, 0x52, 0x53, 0x2d, 0x82, 0x9b, 0x4f, 0x4f, 0x50, 0x40, 0xd4,
+ 0x7f, 0x32, 0x54, 0x33, 0x8f, 0xff, 0x93, 0x84, 0x2b, 0x06, 0xbe, 0x26,
+ 0x92, 0x11, 0x98, 0xba, 0x32, 0x1a, 0x12, 0x0c, 0xdd, 0xaf, 0xc5, 0x50,
+ 0x22, 0x98, 0x68, 0x15, 0xe2, 0x2f, 0xfd, 0x44, 0xfc, 0x4b, 0xc4, 0xce,
+ 0x83, 0x2b, 0x4f, 0x81, 0x7e, 0x4c, 0x6d, 0x77, 0x2a, 0xbc, 0x4b, 0x4e,
+ 0xf8, 0x8b, 0x2e, 0x0a, 0x32, 0x9e, 0xa9, 0x4d, 0x54, 0x03, 0xed, 0x22,
+ 0xf1, 0x52, 0x9b, 0x11, 0xdb, 0xa7, 0xc2, 0x32, 0xee, 0x0c, 0x33, 0xe3,
+ 0xe8, 0x4c, 0xab, 0x6e, 0x70, 0x1d, 0xee, 0x72, 0x4f, 0x89, 0x6d, 0x37,
+ 0x5e, 0x2e, 0xf6, 0x3a, 0x06, 0x14, 0xe0, 0x17, 0x1b, 0x5a, 0xf7, 0x66,
+ 0x84, 0xb8, 0x17, 0x83, 0x24, 0x10, 0x98, 0x05, 0xd6, 0x3a, 0x71, 0x6b,
+ 0x3f, 0xa4, 0x27, 0xda, 0x4f, 0xfa, 0x55, 0x93, 0x0d, 0x56, 0x92, 0x47,
+ 0x37, 0x36, 0x40, 0xb4, 0x81, 0x0a, 0x10, 0x99, 0xda, 0x9e, 0x33, 0x6c,
+ 0x0e, 0xdf, 0x1f, 0xd6, 0x51, 0x11, 0x0f, 0xab, 0x99, 0x7f, 0xeb, 0x58,
+ 0xe7, 0x8d, 0xaf, 0xb7, 0xd8, 0x05, 0xe6, 0x16, 0x28, 0x38, 0xee, 0x18,
+ 0xc4, 0xd0, 0xfa, 0x60, 0x83, 0x8b, 0x20, 0xe5, 0x25, 0xcf, 0xf5, 0x43,
+ 0x55, 0xaf, 0x28, 0xb6, 0x63, 0x12, 0x5b, 0xec, 0x00, 0xc7, 0x1c, 0x24,
+ 0xed, 0x22, 0xa0, 0xfe, 0x68, 0x94, 0xc8, 0x94, 0xda, 0x43, 0x8a, 0x00,
+ 0x9b, 0x12, 0x5e, 0xe2, 0xb9, 0x78, 0xf4, 0x64, 0xd0, 0xe0, 0xdd, 0x6d,
+ 0xd2, 0xf7, 0xc3, 0x70, 0xf6, 0x15, 0x53, 0xb6, 0xcd, 0xec, 0xdb, 0xab,
+ 0x24, 0x5d, 0x9b, 0xb7, 0x76, 0x06, 0x5f, 0xae, 0xda, 0xff, 0x50, 0x92,
+ 0x9f, 0xe8, 0x7d, 0xea, 0xb8, 0x43, 0x3a, 0x68, 0x93, 0x06, 0x1a, 0x72,
+ 0x22, 0xad, 0x13, 0xbc, 0x1b, 0xcb, 0xf0, 0x2c, 0xb8, 0x02, 0x94, 0x91,
+ 0x84, 0x38, 0x3d, 0xb2, 0x85, 0x0f, 0xfc, 0x4a, 0x06, 0x31, 0x89, 0x5d,
+ 0xed, 0xab, 0x6e, 0x1e, 0xd0, 0x80, 0x8f, 0xdb, 0xc0, 0x3c, 0x33, 0x11,
+ 0xed, 0xd2, 0xe6, 0xf9, 0x80, 0x40, 0xaf, 0x50, 0xf6, 0x70, 0x4b, 0x73,
+ 0x0f, 0x5b, 0x19, 0xfb, 0x3f, 0xa0, 0x06, 0xd5, 0xc1, 0xb4, 0x75, 0xba,
+ 0xd5, 0x0e, 0xfd, 0x81, 0xea, 0x9a, 0xcc, 0xec, 0x8c, 0x3e, 0xbb, 0xca,
+ 0xf1, 0xfd, 0x17, 0x92, 0x2c, 0xd2, 0xf4, 0x74, 0x9a, 0x4e, 0xdd, 0x63,
+ 0x32, 0x3d, 0x54, 0xc3, 0x72, 0x9c, 0xab, 0x2c, 0xab, 0xe8, 0xb5, 0x3e,
+ 0x16, 0xad, 0x9f, 0x9d, 0xbe, 0x3e, 0xfa, 0xee, 0x64, 0xe3, 0xb6, 0x68,
+ 0x61, 0xb3, 0x25, 0x8c, 0xa9, 0xf1, 0x4b, 0xb4, 0x80, 0x5b, 0xaa, 0xf7,
+ 0x48, 0x49, 0xfb, 0xee, 0xec, 0x2c, 0x3e, 0x38, 0x3d, 0xa6, 0x4a, 0xde,
+ 0x33, 0xf8, 0x2f, 0x1c, 0x66, 0xa8, 0x03, 0xc6, 0x80, 0x5b, 0x43, 0x45,
+ 0xf1, 0xdf, 0x29, 0xf4, 0xac, 0xd7, 0x9b, 0xd3, 0xfa, 0x30, 0x0d, 0x03,
+ 0x1d, 0x8d, 0xcc, 0xdd, 0x55, 0x33, 0x30, 0x71, 0xb1, 0xd6, 0x70, 0x32,
+ 0xe3, 0x26, 0x4d, 0x87, 0xd3, 0xd2, 0x47, 0x75, 0x00, 0xc1, 0x07, 0x22,
+ 0x4e, 0x04, 0x59, 0x4a, 0x98, 0xea, 0xb8, 0xbd, 0x5a, 0xaa, 0x8f, 0x5d,
+ 0xa8, 0x30, 0xe9, 0xcd, 0x84, 0x3f, 0xc2, 0x55, 0xc8, 0x18, 0x3a, 0x40,
+ 0x4c, 0x94, 0xa4, 0x4e, 0x25, 0x72, 0xd1, 0x88, 0x54, 0x90, 0x49, 0x03,
+ 0x43, 0xce, 0xb1, 0x6b, 0x1e, 0x65, 0x98, 0xb0, 0x79, 0xe2, 0xe5, 0x09,
+ 0xad, 0xc5, 0x20, 0x20, 0xf6, 0xd6, 0x58, 0xd4, 0xa5, 0x39, 0x35, 0x6f,
+ 0x25, 0x4e, 0xd9, 0x74, 0x60, 0x50, 0xc7, 0x31, 0x8d, 0x3d, 0xb1, 0x43,
+ 0xee, 0x92, 0x16, 0xe9, 0xe9, 0x5a, 0xf4, 0x8e, 0x2a, 0xc8, 0x60, 0x28,
+ 0x50, 0xbb, 0xc4, 0x91, 0xc0, 0xff, 0x05, 0x29, 0xd6, 0x75, 0xd7, 0x19,
+ 0x52, 0xfa, 0x04, 0xe8, 0x86, 0x76, 0x6c, 0xf8, 0xe6, 0xbd, 0x15, 0x59,
+ 0xd7, 0x10, 0x93, 0xe7, 0xf0, 0x48, 0xf2, 0x7a, 0x4a, 0xbc, 0x1b, 0x14,
+ 0x43, 0x0a, 0x8a, 0x48, 0xe6, 0x03, 0xe1, 0xbd, 0x9b, 0x19, 0x9a, 0xb7,
+ 0xa3, 0x2e, 0x47, 0xa4, 0x44, 0x73, 0xfd, 0x68, 0x08, 0xde, 0xbd, 0x55,
+ 0x5d, 0xa9, 0x7d, 0xca, 0x50, 0x1f, 0xcc, 0xfb, 0x3a, 0x46, 0x1f, 0xb1,
+ 0xad, 0x52, 0x84, 0x0b, 0xa6, 0xd8, 0x12, 0x89, 0x76, 0xa1, 0x9a, 0x50,
+ 0x32, 0x13, 0x22, 0xcc, 0xc3, 0x1d, 0x4c, 0x86, 0x55, 0x31, 0x5d, 0x20,
+ 0xa2, 0x30, 0x8a, 0x37, 0x8c, 0x3c, 0x21, 0x92, 0xce, 0x46, 0xa4, 0x1e,
+ 0x55, 0x1a, 0xda, 0xa9, 0x21, 0x0d, 0x38, 0xe5, 0xc5, 0x25, 0x44, 0xa5,
+ 0xd0, 0x1a, 0xc0, 0xe7, 0xe4, 0x2a, 0x61, 0xb2, 0xe8, 0x8d, 0x77, 0xc6,
+ 0x99, 0x53, 0xa5, 0xc5, 0x55, 0x57, 0x36, 0xc4, 0x31, 0x10, 0xc4, 0x90,
+ 0xd2, 0x3c, 0x40, 0x7d, 0xd6, 0xfd, 0xe1, 0x8f, 0x4f, 0x28, 0xb1, 0xdd,
+ 0x38, 0x9e, 0xc2, 0x0c, 0xd4, 0xd9, 0xd0, 0xcf, 0xa0, 0xf5, 0x3a, 0xb3,
+ 0xf3, 0x27, 0xaf, 0x44, 0x47, 0xee, 0x69, 0xda, 0x2b, 0xce, 0x44, 0xf4,
+ 0x57, 0x06, 0x7a, 0xca, 0x27, 0xd9, 0xc5, 0x20, 0xba, 0xa5, 0x67, 0x6f,
+ 0x47, 0x07, 0x4b, 0x3b, 0xbc, 0x4f, 0x81, 0xba, 0xc3, 0x5e, 0x1a, 0x00,
+ 0xd3, 0x1a, 0xa3, 0xa5, 0xb9, 0xeb, 0x63, 0x4c, 0xfd, 0x50, 0xf7, 0x8b,
+ 0x01, 0x7f, 0xf9, 0x02, 0x43, 0x9d, 0x41, 0xf6, 0x24, 0xa5, 0xc1, 0x0c,
+ 0xd5, 0x9c, 0x8f, 0x13, 0x2a, 0xdb, 0x10, 0xaf, 0xa8, 0x33, 0x87, 0x41,
+ 0xf2, 0x29, 0xd2, 0xea, 0x16, 0xb6, 0xd0, 0xa0, 0x91, 0x30, 0x6f, 0xb8,
+ 0x77, 0xde, 0x4e, 0x73, 0xf4, 0xfb, 0x11, 0x84, 0x59, 0xdb, 0x4a, 0xf0,
+ 0xa9, 0x2e, 0x39, 0xdd, 0x02, 0x9a, 0xea, 0x9c, 0xb1, 0xc7, 0x73, 0xdb,
+ 0x27, 0x6e, 0x77, 0xd8, 0x33, 0x92, 0x6c, 0x63, 0x17, 0x4a, 0x2b, 0xb3,
+ 0x87, 0xc9, 0xf7, 0x29, 0x37, 0x7c, 0xdf, 0x6f, 0xc1, 0xe2, 0x5b, 0x35,
+ 0x9c, 0x23, 0xe2, 0x09, 0x08, 0x1b, 0x63, 0xaf, 0x19, 0x36, 0x4e, 0xf5,
+ 0xb2, 0x09, 0x37, 0x98, 0xc3, 0x0c, 0xc6, 0xb7, 0x79, 0xf6, 0x61, 0x10,
+ 0x30, 0x58, 0x38, 0xa5, 0x94, 0xd3, 0xc3, 0xb8, 0x07, 0x9f, 0x48, 0xe1,
+ 0x54, 0xb4, 0x08, 0x16, 0x4a, 0x7e, 0xf2, 0x07, 0x6c, 0x6a, 0x3b, 0xb6,
+ 0x80, 0xdf, 0xb5, 0xfe, 0x78, 0x43, 0xe2, 0x4d, 0x93, 0x7a, 0xbe, 0xbe,
+ 0xbd, 0xc1, 0x99, 0x6d, 0xd2, 0x4b, 0x47, 0x6b, 0x5f, 0xe8, 0xdb, 0x39,
+ 0x99, 0x67, 0x10, 0x1d, 0x6a, 0x67, 0xf7, 0x40, 0xd6, 0x37, 0xc1, 0xab,
+ 0x13, 0x34, 0xda, 0x84, 0xb9, 0x25, 0xbd, 0x69, 0x3c, 0x8d, 0x54, 0x34,
+ 0x2d, 0x31, 0x03, 0x32, 0x12, 0x90, 0x15, 0x22, 0x1c, 0x57, 0x08, 0x58,
+ 0x2c, 0x6b, 0x86, 0x0f, 0x72, 0x69, 0x4e, 0x01, 0x1b, 0x38, 0x1d, 0xa3,
+ 0x15, 0x52, 0x46, 0x17, 0x65, 0x01, 0x4a, 0x0c, 0x02, 0x81, 0xe0, 0xa7,
+ 0x6f, 0x70, 0xb5, 0x6f, 0x9a, 0x53, 0xaf, 0x01, 0xaf, 0x7c, 0x0e, 0x5d,
+ 0x19, 0xa6, 0xf5, 0x40, 0xef, 0xfb, 0x93, 0x57, 0x47, 0x3d, 0x37, 0xcb,
+ 0x61, 0x92, 0x49, 0x7a, 0x51, 0xf3, 0x50, 0x07, 0x81, 0xa6, 0x1b, 0x3f,
+ 0xc0, 0xa3, 0x98, 0xbc, 0x09, 0xf6, 0x69, 0xa4, 0x02, 0xab, 0xd2, 0x66,
+ 0x3d, 0x11, 0x0f, 0xe0, 0x16, 0x07, 0x52, 0xd6, 0x0d, 0xc3, 0xdd, 0x8f,
+ 0xdb, 0x97, 0x44, 0x88, 0x0b, 0x0f, 0xe0, 0x9d, 0xb0, 0x15, 0xa9, 0x04,
+ 0x51, 0x43, 0x94, 0x4a, 0xa1, 0xca, 0x41, 0x74, 0x42, 0xbd, 0x46, 0xdd,
+ 0x0e, 0xca, 0x3f, 0xf8, 0xb9, 0xed, 0xb4, 0x2e, 0x99, 0x8a, 0x0e, 0xf2,
+ 0x9d, 0xf0, 0x91, 0x50, 0x7d, 0xcc, 0x01, 0x16, 0xef, 0x64, 0xa3, 0xf7,
+ 0x72, 0xfe, 0x20, 0x54, 0xa9, 0x8d, 0x89, 0x82, 0x2d, 0x17, 0x13, 0x4d,
+ 0xa3, 0xe5, 0x42, 0x8c, 0x44, 0x17, 0xcb, 0x85, 0x02, 0xc5, 0x75, 0x28,
+ 0xe1, 0x13, 0x7e, 0x87, 0x04, 0x2c, 0xb2, 0x53, 0xca, 0xdc, 0x38, 0x5f,
+ 0x98, 0x83, 0x38, 0x14, 0x99, 0x23, 0xf2, 0x65, 0x3a, 0xa5, 0xcb, 0x11,
+ 0xad, 0xcd, 0x6e, 0xbc, 0x2a, 0xac, 0x74, 0x3a, 0x59, 0x6b, 0xea, 0x55,
+ 0x6b, 0x60, 0x60, 0x80, 0x31, 0xb4, 0x26, 0xf0, 0xf1, 0x54, 0x2c, 0x69,
+ 0x55, 0x01, 0x1f, 0x42, 0xb8, 0x63, 0xfa, 0xf6, 0x63, 0x7c, 0x4b, 0x67,
+ 0x37, 0x38, 0x63, 0xfb, 0x77, 0x36, 0x9f, 0x88, 0xa6, 0xee, 0xe6, 0xc1,
+ 0x0d, 0xb6, 0x7d, 0x07, 0xdd, 0x8c, 0x18, 0x6e, 0xb0, 0xc1, 0x44, 0x17,
+ 0x03, 0xbe, 0x17, 0xdf, 0x5d, 0x15, 0x3f, 0xcd, 0x70, 0xdb, 0x7e, 0x43,
+ 0xde, 0xb2, 0x00, 0xb6, 0x19, 0x47, 0xf7, 0x93, 0xbe, 0xae, 0x6e, 0xc0,
+ 0x6a, 0x61, 0x97, 0x64, 0x89, 0xf7, 0xfa, 0x82, 0x7d, 0xb1, 0xb4, 0xed,
+ 0xb2, 0x54, 0xcf, 0x2a, 0x26, 0x97, 0x85, 0xe8, 0xd0, 0xba, 0x27, 0xeb,
+ 0xae, 0x94, 0xde, 0x65, 0x1e, 0x5e, 0x52, 0x55, 0x8c, 0xb2, 0x46, 0x6a,
+ 0xaf, 0x51, 0x2d, 0xa4, 0x84, 0xc6, 0xd4, 0xa5, 0x50, 0x78, 0x55, 0x95,
+ 0x28, 0x1c, 0xae, 0xa3, 0x16, 0x0e, 0x74, 0x2b, 0x72, 0xfa, 0x68, 0xee,
+ 0x41, 0x56, 0x62, 0x67, 0x73, 0x9b, 0xaa, 0x29, 0xf3, 0xf4, 0x5d, 0x64,
+ 0x73, 0x09, 0x12, 0xfa, 0x68, 0x4e, 0x36, 0x8b, 0xde, 0xd8, 0x1a, 0xe4,
+ 0x11, 0x1b, 0x81, 0x5d, 0x04, 0x17, 0xc9, 0x64, 0x36, 0x2b, 0x8c, 0x88,
+ 0x1f, 0x37, 0xdc, 0xeb, 0x47, 0xb2, 0x95, 0x9c, 0x8d, 0x5d, 0xf3, 0xa7,
+ 0x89, 0xfb, 0x46, 0x33, 0xd0, 0xf0, 0x38, 0x48, 0x65, 0x15, 0xe0, 0x12,
+ 0xd0, 0x58, 0x2b, 0x62, 0xd7, 0xbe, 0xe6, 0x0c, 0xdf, 0xc3, 0x0e, 0x35,
+ 0x58, 0x72, 0x79, 0x45, 0xa8, 0x93, 0x57, 0xdc, 0x09, 0x9a, 0xd8, 0x9f,
+ 0x3d, 0x84, 0x86, 0xb3, 0x18, 0x7f, 0x05, 0x6b, 0x09, 0x88, 0x66, 0x5c,
+ 0x18, 0x15, 0x33, 0x96, 0xd2, 0x6a, 0x1b, 0x2c, 0x47, 0x5e, 0x84, 0xcd,
+ 0x0c, 0xd5, 0x62, 0x09, 0x0a, 0xd7, 0x39, 0xf1, 0x3a, 0x6f, 0x38, 0x8a,
+ 0xd7, 0xf5, 0xf5, 0x2f, 0x71, 0x52, 0x8d, 0xb2, 0x4c, 0x68, 0x0d, 0x83,
+ 0x90, 0x98, 0xf7, 0x19, 0xe0, 0x84, 0x8d, 0x58, 0xd5, 0x8d, 0x68, 0xf0,
+ 0xe3, 0x82, 0xe1, 0x41, 0x38, 0x89, 0x9e, 0x6a, 0x48, 0x38, 0x9d, 0x9c,
+ 0x82, 0xac, 0x06, 0x25, 0x1b, 0x2e, 0x94, 0x5f, 0xaa, 0x2d, 0xd1, 0xd7,
+ 0x8e, 0xee, 0x2e, 0xd7, 0xd7, 0xd7, 0xdb, 0x83, 0x46, 0x8a, 0x12, 0x6f,
+ 0x43, 0x8c, 0x5d, 0xab, 0xab, 0x9a, 0xbb, 0x69, 0x5c, 0x5f, 0xef, 0x0c,
+ 0x96, 0x5c, 0x5a, 0x7b, 0x43, 0x3e, 0x1d, 0x00, 0x73, 0x08, 0xa7, 0xf8,
+ 0x2e, 0x4b, 0x0d, 0xf2, 0xa3, 0xe3, 0x65, 0xc3, 0xb5, 0x7f, 0x05, 0x7c,
+ 0x61, 0xf3, 0x8e, 0x8e, 0x16, 0xdf, 0x36, 0x70, 0x35, 0xfb, 0x22, 0x4e,
+ 0xa6, 0xf3, 0x60, 0x65, 0x12, 0xc2, 0x3b, 0xaa, 0xce, 0xcb, 0x7d, 0xcb,
+ 0x5f, 0x9e, 0xbe, 0x26, 0xb4, 0x32, 0x58, 0x50, 0x9a, 0x57, 0x9c, 0x14,
+ 0x8d, 0x3f, 0xc3, 0x22, 0xef, 0x9c, 0xbd, 0x5d, 0x94, 0x9c, 0xe5, 0xe5,
+ 0xbf, 0x50, 0x0e, 0x54, 0xb0, 0xf3, 0xae, 0xb6, 0xe7, 0x8e, 0x10, 0x55,
+ 0xcf, 0x78, 0x65, 0xc4, 0x40, 0xed, 0x70, 0x9b, 0xe0, 0x9c, 0x83, 0xc8,
+ 0x4c, 0x4d, 0xc7, 0x4a, 0xcd, 0x14, 0x75, 0x78, 0x7a, 0xdb, 0xe4, 0x22,
+ 0x53, 0xef, 0xe9, 0x1d, 0x2a, 0x7b, 0x20, 0xeb, 0xda, 0x93, 0x29, 0x75,
+ 0xaa, 0xcf, 0xa8, 0xff, 0xce, 0x64, 0x45, 0x49, 0xe2, 0xb0, 0x44, 0xda,
+ 0xe8, 0x10, 0x14, 0xa1, 0x38, 0x5c, 0xd5, 0xac, 0x39, 0x83, 0xa2, 0xbd,
+ 0x92, 0x79, 0x7c, 0x41, 0xec, 0x53, 0xd4, 0x72, 0x16, 0xe7, 0xda, 0x69,
+ 0x96, 0xc0, 0x61, 0xd0, 0x22, 0xee, 0xf4, 0x6f, 0xe3, 0xe9, 0x50, 0xe7,
+ 0x31, 0x76, 0xc1, 0xd3, 0xb7, 0x2f, 0x35, 0x74, 0xf8, 0x40, 0xef, 0x2c,
+ 0x61, 0x71, 0x54, 0xbf, 0xf4, 0xa8, 0x21, 0x5f, 0x71, 0xbc, 0x95, 0x65,
+ 0xab, 0x2c, 0x63, 0xd5, 0x5e, 0x10, 0x28, 0xcb, 0xe7, 0x79, 0xbb, 0x1d,
+ 0xb9, 0x8e, 0x16, 0x02, 0xe9, 0xf2, 0x34, 0x3c, 0x74, 0x58, 0xdd, 0x0a,
+ 0xd2, 0x05, 0x64, 0xec, 0x5c, 0x83, 0xd7, 0x7d, 0x9e, 0x64, 0xb8, 0x40,
+ 0x61, 0x12, 0xb6, 0xfb, 0xf8, 0x34, 0xf9, 0x09, 0x6a, 0xda, 0x30, 0x71,
+ 0x3a, 0x16, 0x23, 0xc0, 0x62, 0x9a, 0xcc, 0x06, 0xd1, 0x71, 0xae, 0x68,
+ 0x03, 0x94, 0xb8, 0x5d, 0x65, 0x75, 0x7b, 0x7d, 0x8b, 0x44, 0xa4, 0x9b,
+ 0x4d, 0x70, 0x77, 0xf0, 0x2d, 0x78, 0x7c, 0x24, 0x17, 0x1e, 0x57, 0x06,
+ 0xd6, 0x1b, 0x71, 0x99, 0x84, 0xd2, 0xdd, 0x4c, 0x68, 0x9b, 0x1e, 0x42,
+ 0xf4, 0x19, 0x7a, 0xb9, 0xb2, 0xb0, 0xfe, 0xe8, 0x84, 0xbe, 0x5c, 0xe4,
+ 0xef, 0x61, 0x5a, 0x06, 0xda, 0xe2, 0x6a, 0xe2, 0x2c, 0x00, 0x7e, 0x9e,
+ 0x8c, 0x6a, 0xed, 0x42, 0x62, 0x5e, 0x4f, 0x40, 0xdb, 0xbe, 0xc2, 0x6c,
+ 0x80, 0xb7, 0x5e, 0x47, 0x4b, 0x9b, 0x7a, 0x1e, 0xea, 0xb7, 0x64, 0xb6,
+ 0x2b, 0x7c, 0x59, 0x4c, 0x33, 0x22, 0x09, 0x95, 0x75, 0xdd, 0x17, 0xf7,
+ 0xba, 0x2c, 0x0b, 0x06, 0xf1, 0x74, 0xce, 0x75, 0xb1, 0xc7, 0x45, 0x14,
+ 0xbd, 0xec, 0xe6, 0x34, 0x69, 0xe0, 0x61, 0xab, 0xf0, 0x79, 0xcc, 0x7b,
+ 0xdc, 0x21, 0x59, 0xcc, 0x4a, 0x3a, 0xea, 0x1f, 0xfa, 0xec, 0x4e, 0xbc,
+ 0xc0, 0xe4, 0xb4, 0x78, 0xd8, 0x04, 0xfc, 0x86, 0x31, 0x47, 0xa0, 0x3b,
+ 0x0c, 0x3d, 0x2a, 0x57, 0x27, 0xb3, 0xed, 0x18, 0x9d, 0xff, 0xba, 0xc8,
+ 0x47, 0xcd, 0x8e, 0xd1, 0xa8, 0x5f, 0x14, 0xa4, 0x5f, 0x30, 0x85, 0xc1,
+ 0x4c, 0xff, 0xc9, 0xb5, 0xfd, 0x9e, 0x84, 0x87, 0xe3, 0x95, 0x6e, 0x09,
+ 0x31, 0x27, 0x79, 0xc5, 0x27, 0xfc, 0x24, 0xfd, 0x46, 0xf2, 0xbe, 0x28,
+ 0x5e, 0xe6, 0xfe, 0x2c, 0xa6, 0xbc, 0xd2, 0x70, 0xe7, 0xe2, 0xca, 0x58,
+ 0xf2, 0xc9, 0x55, 0x91, 0x61, 0xc9, 0x1c, 0xaa, 0x55, 0x08, 0x65, 0x47,
+ 0x0a, 0x94, 0x26, 0x7e, 0x24, 0xb5, 0xc1, 0xbe, 0x24, 0x7c, 0x0a, 0xbc,
+ 0x93, 0xc1, 0xce, 0x17, 0x7d, 0x09, 0xed, 0xb1, 0xe2, 0x22, 0xc9, 0x01,
+ 0x17, 0xa8, 0xfe, 0x29, 0x70, 0x97, 0xf1, 0x70, 0x52, 0x06, 0xde, 0x44,
+ 0x4a, 0xf4, 0xfc, 0xbe, 0x1c, 0x4c, 0xc5, 0xd7, 0x36, 0x91, 0x0f, 0x2c,
+ 0x21, 0xa4, 0xe1, 0x3e, 0x66, 0x8f, 0xd4, 0xd6, 0x06, 0x1e, 0x6c, 0x6f,
+ 0x6d, 0x49, 0x6d, 0x9d, 0x54, 0x60, 0xd7, 0x9d, 0x7e, 0x02, 0x1a, 0x81,
+ 0xea, 0x08, 0x83, 0xbd, 0xee, 0xef, 0x2e, 0x6b, 0x1a, 0xa2, 0xa6, 0x4b,
+ 0xd6, 0x50, 0x13, 0x11, 0xb9, 0x44, 0x42, 0x1f, 0x7c, 0x8b, 0x08, 0x88,
+ 0x84, 0x2b, 0xc1, 0xf9, 0xc7, 0xb0, 0xd7, 0x7d, 0x13, 0xcb, 0xbc, 0xeb,
+ 0xe9, 0x93, 0x4b, 0xba, 0xd3, 0x27, 0xdb, 0x12, 0x5f, 0x3a, 0xff, 0x83,
+ 0xda, 0x88, 0x32, 0xe8, 0x3d, 0xae, 0xa0, 0x2e, 0x47, 0x69, 0x9e, 0xed,
+ 0x02, 0x02, 0xc0, 0xe8, 0x8c, 0x80, 0x75, 0x5d, 0xcd, 0xa2, 0x6f, 0x87,
+ 0x21, 0x11, 0xd7, 0xbe, 0x13, 0x8d, 0xdc, 0xda, 0x67, 0xbb, 0xcd, 0xdc,
+ 0x5a, 0x17, 0xbb, 0x7b, 0x99, 0x8c, 0x12, 0x68, 0x44, 0x8b, 0xf3, 0x2d,
+ 0x35, 0x25, 0xe4, 0x13, 0x31, 0xa0, 0xf6, 0x2e, 0x4e, 0xfb, 0x20, 0xe4,
+ 0xa9, 0xb0, 0xe5, 0x91, 0xea, 0x39, 0x83, 0x1f, 0xcc, 0x9c, 0xf4, 0xfb,
+ 0x4f, 0xcd, 0xd3, 0x89, 0x28, 0x99, 0x26, 0xed, 0xb7, 0x38, 0x54, 0x69,
+ 0x7e, 0x78, 0x1b, 0x45, 0x39, 0x3b, 0xf1, 0xa0, 0x15, 0x9b, 0xdd, 0x0b,
+ 0xb8, 0x9d, 0xac, 0xec, 0x9a, 0x56, 0x45, 0xad, 0x75, 0x01, 0xe0, 0x5b,
+ 0xe4, 0x91, 0x77, 0x6a, 0xf2, 0x34, 0x71, 0x8e, 0xb6, 0x0f, 0xab, 0x1c,
+ 0xaf, 0x4f, 0x5f, 0xf7, 0x43, 0x59, 0x72, 0xa2, 0x49, 0x70, 0x5c, 0x1a,
+ 0xc8, 0xb0, 0x35, 0x1c, 0x10, 0xe5, 0x93, 0x50, 0x5c, 0xba, 0x61, 0x27,
+ 0xe0, 0xe0, 0x11, 0x19, 0x0a, 0xae, 0xa5, 0x40, 0x3f, 0x6d, 0x5b, 0x0a,
+ 0x6a, 0x19, 0x78, 0x30, 0x91, 0x5d, 0x76, 0x82, 0x03, 0xbe, 0xdd, 0x52,
+ 0xf3, 0x5f, 0xa3, 0x51, 0x40, 0x33, 0x07, 0xa3, 0x34, 0xd1, 0x2a, 0x26,
+ 0x42, 0xd3, 0x24, 0x08, 0x45, 0x81, 0xef, 0x69, 0x22, 0xb4, 0x08, 0x33,
+ 0xbf, 0xab, 0xa2, 0x7e, 0x47, 0x4d, 0x3d, 0xbf, 0x97, 0xa2, 0x9e, 0xdf,
+ 0x4f, 0x4f, 0x27, 0x8d, 0xdc, 0x57, 0xd4, 0xf3, 0x4f, 0xa8, 0xa7, 0xe3,
+ 0xf8, 0x46, 0xb3, 0x99, 0xa5, 0x7e, 0x5b, 0xea, 0x13, 0x13, 0xdb, 0x16,
+ 0xf4, 0xb2, 0x62, 0x32, 0x11, 0x80, 0x6c, 0x7e, 0x2b, 0xa2, 0xb7, 0x54,
+ 0xbb, 0xc6, 0x6d, 0xc3, 0x34, 0x92, 0xd9, 0x82, 0x74, 0x08, 0x2f, 0x3c,
+ 0x61, 0x59, 0x60, 0xc2, 0x1d, 0x44, 0x10, 0x29, 0x3d, 0xe1, 0x36, 0xa3,
+ 0x8c, 0x30, 0x65, 0x0a, 0x78, 0x31, 0xa8, 0xa4, 0x6c, 0x96, 0xa0, 0xe7,
+ 0xa2, 0xb8, 0xf2, 0xbd, 0x2f, 0x55, 0x46, 0x20, 0xba, 0xc1, 0x70, 0xd5,
+ 0xa7, 0xe3, 0x9e, 0xcd, 0x2d, 0x73, 0xd4, 0xe3, 0xc0, 0xce, 0xdc, 0xaa,
+ 0x27, 0xfb, 0x67, 0x70, 0xbb, 0xae, 0xbc, 0x62, 0x41, 0x4c, 0x73, 0xf8,
+ 0x7b, 0x50, 0x74, 0x6b, 0x7d, 0x71, 0xc1, 0xed, 0xec, 0xef, 0x0f, 0xc1,
+ 0xcb, 0x74, 0x5e, 0xf5, 0xcd, 0x11, 0x36, 0x8b, 0x60, 0x9e, 0x7a, 0x82,
+ 0x5a, 0x38, 0x40, 0x36, 0x0e, 0xb7, 0xcd, 0x30, 0xfc, 0x12, 0xd7, 0xbc,
+ 0x56, 0xa9, 0xc8, 0x46, 0xee, 0xa6, 0xad, 0x80, 0x8e, 0x9f, 0xc3, 0xa1,
+ 0xa2, 0x7b, 0xfe, 0x62, 0x10, 0x7d, 0x6b, 0x78, 0x65, 0x5b, 0xd7, 0x01,
+ 0x75, 0x59, 0x53, 0xe6, 0x18, 0xeb, 0x84, 0xda, 0xc0, 0xd9, 0x72, 0x0b,
+ 0x1c, 0x22, 0x1d, 0x38, 0xea, 0x22, 0x27, 0x7d, 0xa3, 0x8e, 0x19, 0x80,
+ 0x9f, 0xd2, 0x68, 0x12, 0xc9, 0x09, 0x06, 0x92, 0xbe, 0x5c, 0x60, 0x5b,
+ 0x3d, 0xe4, 0x9d, 0x75, 0x9d, 0xce, 0xe6, 0x0c, 0x66, 0x85, 0xd5, 0x6f,
+ 0xb8, 0xe4, 0xe6, 0x7a, 0xab, 0x40, 0x4f, 0x37, 0x6a, 0xf4, 0x93, 0xce,
+ 0x04, 0xb8, 0x4e, 0x7a, 0xd3, 0xe0, 0x6b, 0x14, 0x4b, 0xa1, 0x46, 0xe6,
+ 0x52, 0x61, 0xcc, 0xe6, 0xe6, 0x75, 0x46, 0x2d, 0xed, 0x92, 0x3a, 0x80,
+ 0x9a, 0x24, 0x5c, 0x45, 0x5b, 0x53, 0x88, 0xe1, 0x29, 0x0a, 0x70, 0xce,
+ 0x3d, 0x21, 0xc8, 0xcf, 0x2b, 0x0f, 0x54, 0x8b, 0x11, 0xd6, 0xb8, 0x7d,
+ 0x6a, 0x3f, 0x8d, 0x73, 0xd1, 0xcc, 0xa9, 0xbb, 0x6a, 0x4a, 0xe0, 0x40,
+ 0x97, 0x45, 0x49, 0x1a, 0xd4, 0x13, 0xd9, 0xbb, 0xe5, 0xaa, 0x2c, 0xf7,
+ 0x84, 0x4c, 0x32, 0xc3, 0xde, 0xe3, 0x4a, 0xd9, 0x25, 0xad, 0x74, 0x89,
+ 0xde, 0x33, 0x92, 0x0f, 0x25, 0xbe, 0xb5, 0xb4, 0x15, 0xca, 0x78, 0x89,
+ 0xf6, 0xf9, 0xba, 0x7e, 0xb8, 0x21, 0xb8, 0xb9, 0x76, 0x5a, 0xcb, 0x21,
+ 0xba, 0x66, 0x63, 0x8d, 0x5f, 0x8c, 0xb9, 0x6a, 0x88, 0xe2, 0x6e, 0xea,
+ 0xd3, 0x67, 0x43, 0x8a, 0x52, 0x2e, 0x35, 0xdc, 0x11, 0xd1, 0x78, 0xfd,
+ 0x40, 0x8e, 0x3f, 0x15, 0x7d, 0x12, 0xe8, 0xa2, 0x31, 0x46, 0xa4, 0x50,
+ 0x93, 0x5b, 0xaf, 0x02, 0xf1, 0x51, 0x2b, 0xb4, 0xac, 0xb2, 0x75, 0x69,
+ 0x7f, 0xc2, 0x5a, 0x4d, 0x4c, 0x1e, 0x4e, 0xcb, 0x40, 0x01, 0x05, 0x95,
+ 0x5d, 0xd6, 0x94, 0x9c, 0x6f, 0xb0, 0xc1, 0xb8, 0x2b, 0x88, 0x6d, 0x3a,
+ 0x85, 0x08, 0x99, 0xae, 0x97, 0x24, 0x95, 0x15, 0x7a, 0x99, 0xf4, 0x94,
+ 0x59, 0xcc, 0xf6, 0x92, 0xd4, 0x18, 0xd0, 0xf7, 0x12, 0x92, 0x18, 0xce,
+ 0x41, 0x75, 0x61, 0x12, 0xe5, 0x4d, 0xb4, 0xe6, 0x8b, 0x17, 0x31, 0xf2,
+ 0x03, 0xba, 0xd8, 0xbf, 0xa1, 0x92, 0x88, 0x6d, 0x55, 0xb3, 0xc5, 0x2d,
+ 0x51, 0x1f, 0xfd, 0x01, 0x21, 0x19, 0x52, 0x43, 0xee, 0x06, 0xb4, 0x73,
+ 0x3f, 0x0a, 0x37, 0xf6, 0x26, 0x87, 0xb4, 0xd8, 0xb9, 0xdc, 0x40, 0x9b,
+ 0x6c, 0x21, 0xfc, 0x71, 0xdf, 0xfe, 0x75, 0xef, 0xd9, 0x16, 0xef, 0xc0,
+ 0xf5, 0xf5, 0xf5, 0xc0, 0x3e, 0xe0, 0x79, 0x86, 0x6a, 0xc6, 0x37, 0x80,
+ 0x87, 0xe0, 0xbf, 0xe6, 0xb9, 0xc1, 0x32, 0xdc, 0xf8, 0x26, 0xbe, 0x8b,
+ 0x04, 0xb2, 0x1b, 0x81, 0x6b, 0x51, 0x39, 0x2c, 0x6f, 0x48, 0xfd, 0xc2,
+ 0x57, 0xa0, 0xba, 0xf5, 0xb5, 0xbc, 0x78, 0x47, 0x7f, 0xe5, 0x08, 0xea,
+ 0xda, 0xeb, 0x93, 0x77, 0xa7, 0x6f, 0x4e, 0x7e, 0xfc, 0xc7, 0xda, 0x86,
+ 0xd5, 0x7d, 0xb1, 0x8e, 0x65, 0x17, 0xb5, 0x5d, 0xc1, 0xf9, 0x29, 0x03,
+ 0x09, 0x40, 0x58, 0xfe, 0x1b, 0x58, 0x86, 0x2c, 0x80, 0xf3, 0x87, 0x85,
+ 0x1c, 0x35, 0x6c, 0xc2, 0x29, 0x99, 0x02, 0x4c, 0x1a, 0x5c, 0x1d, 0x9d,
+ 0x3a, 0x90, 0x73, 0xaf, 0x87, 0x7f, 0xea, 0x47, 0x47, 0x81, 0x3a, 0x93,
+ 0xe3, 0x53, 0xa7, 0x7d, 0xb0, 0x2d, 0xb7, 0x23, 0xbf, 0x85, 0x87, 0x9c,
+ 0xd9, 0x4a, 0x6c, 0x3e, 0x3c, 0x7e, 0xfe, 0xc6, 0xf7, 0x3c, 0x48, 0x64,
+ 0xca, 0xdd, 0x04, 0x52, 0xf9, 0xf7, 0xa8, 0xe2, 0x51, 0x1d, 0x23, 0xd5,
+ 0x14, 0x5b, 0x9f, 0x52, 0x86, 0x0e, 0xfb, 0x4d, 0x68, 0x6e, 0x4f, 0xcc,
+ 0x67, 0x69, 0x03, 0xde, 0x1c, 0x2e, 0x6e, 0x4f, 0x41, 0x2f, 0x86, 0x40,
+ 0x79, 0x3d, 0xd4, 0xc3, 0xd4, 0xb1, 0x62, 0x8a, 0xee, 0x15, 0xef, 0x3d,
+ 0x0b, 0x41, 0x88, 0x61, 0xfe, 0x04, 0xec, 0x31, 0x76, 0x82, 0x74, 0x83,
+ 0x52, 0x51, 0x6f, 0xfb, 0xcb, 0x9d, 0xc1, 0xf6, 0x93, 0x67, 0x20, 0x88,
+ 0xb7, 0x36, 0xb7, 0x9f, 0xf4, 0x1a, 0x54, 0x8a, 0x37, 0x33, 0x19, 0x7b,
+ 0x0a, 0xa8, 0x6e, 0x9b, 0xd6, 0xea, 0x70, 0x0f, 0x1c, 0x19, 0xa8, 0xd7,
+ 0x51, 0xc4, 0xaf, 0x7c, 0xab, 0xd1, 0xd9, 0xe6, 0x77, 0x4b, 0x1d, 0x93,
+ 0xc9, 0x7b, 0x78, 0x6b, 0xe4, 0xd3, 0x7b, 0xab, 0x31, 0xe4, 0x0f, 0x7d,
+ 0x4d, 0x36, 0x6c, 0x70, 0xe3, 0x7a, 0x3a, 0x8b, 0xaf, 0x87, 0xb7, 0xa4,
+ 0xdf, 0x9e, 0xbf, 0x7c, 0x05, 0xf2, 0x08, 0xfd, 0x56, 0x82, 0xf8, 0x5a,
+ 0xdf, 0x4c, 0x53, 0x79, 0x9b, 0x74, 0x5a, 0x4e, 0xf9, 0xba, 0xa4, 0x58,
+ 0x69, 0x18, 0xf3, 0xa4, 0x95, 0x65, 0x6a, 0xc0, 0x95, 0x25, 0x40, 0x2d,
+ 0xad, 0x3b, 0x23, 0x1c, 0x91, 0x92, 0x23, 0xdd, 0xf6, 0xc3, 0x21, 0xaf,
+ 0x1b, 0x1a, 0x94, 0x1f, 0x40, 0xb8, 0x10, 0xba, 0xdd, 0x65, 0xca, 0x2d,
+ 0x08, 0x6f, 0xf3, 0x31, 0xf1, 0xc7, 0x7e, 0x8a, 0x04, 0x51, 0x19, 0xf9,
+ 0xe3, 0x70, 0x04, 0x79, 0x3f, 0x1b, 0x69, 0xa1, 0xf0, 0x83, 0xf6, 0x71,
+ 0x99, 0x22, 0x27, 0x3d, 0x1e, 0x3e, 0x1f, 0x3f, 0xaf, 0x89, 0xe4, 0x1b,
+ 0xfd, 0xae, 0xf9, 0xab, 0x20, 0x7e, 0x18, 0x59, 0x61, 0xc0, 0x60, 0xb3,
+ 0x8b, 0x9c, 0x6d, 0xf4, 0x57, 0xd9, 0xa8, 0x2c, 0xaa, 0x62, 0x62, 0x7a,
+ 0xf6, 0x69, 0xb8, 0xed, 0xf8, 0xf8, 0x2c, 0xba, 0x4e, 0x87, 0x8a, 0x6f,
+ 0x3d, 0xf0, 0x73, 0x34, 0x49, 0x8a, 0x62, 0x0a, 0x71, 0x99, 0xa5, 0x35,
+ 0x1e, 0xab, 0xc2, 0x32, 0x61, 0x13, 0x44, 0x7c, 0x27, 0x95, 0x1e, 0x50,
+ 0x14, 0xf0, 0x80, 0x21, 0x47, 0x53, 0x56, 0x3c, 0xe7, 0xa9, 0x27, 0x7d,
+ 0xe6, 0x92, 0x11, 0x61, 0xd4, 0x46, 0x27, 0xb3, 0x9e, 0x9a, 0x13, 0x48,
+ 0x26, 0x56, 0x56, 0xe2, 0xd1, 0xa1, 0x51, 0x2f, 0x29, 0x18, 0xef, 0x31,
+ 0x6d, 0xa9, 0x98, 0x78, 0x28, 0x2a, 0x02, 0xc7, 0x60, 0x54, 0x5e, 0x94,
+ 0x45, 0x43, 0x94, 0x29, 0xe3, 0xa2, 0xa4, 0x02, 0x2f, 0x82, 0xd1, 0xe4,
+ 0x5f, 0xa6, 0xf9, 0xa8, 0x58, 0x94, 0x88, 0xca, 0x82, 0xeb, 0xbb, 0x01,
+ 0x2d, 0xc2, 0x53, 0x04, 0x0a, 0x71, 0xab, 0xe0, 0x36, 0x5b, 0xeb, 0x93,
+ 0x70, 0xfe, 0xe6, 0x8b, 0x21, 0x62, 0x72, 0x93, 0x4e, 0x60, 0xf5, 0x49,
+ 0xf7, 0xa0, 0x42, 0xde, 0x6e, 0x3d, 0x0f, 0x0b, 0x62, 0x8c, 0x17, 0x0f,
+ 0x0e, 0xe7, 0x79, 0x76, 0x11, 0xc2, 0x13, 0x36, 0xb5, 0x3a, 0xd4, 0xd6,
+ 0xc3, 0x9a, 0x78, 0xb4, 0x22, 0x51, 0x8a, 0x4b, 0x91, 0x2f, 0x4d, 0x3a,
+ 0xe0, 0x8e, 0x64, 0xc1, 0x78, 0x4a, 0x88, 0xfa, 0x3a, 0x2e, 0xd4, 0x27,
+ 0xba, 0x4d, 0x1f, 0x77, 0x95, 0x9a, 0x9f, 0x60, 0x6e, 0x8e, 0xf5, 0x4f,
+ 0x18, 0x73, 0x1b, 0xb1, 0xbf, 0x72, 0x75, 0x49, 0xdc, 0xea, 0x8d, 0x6a,
+ 0x39, 0x28, 0xee, 0xd9, 0xac, 0x9e, 0x53, 0xc2, 0x4d, 0xa2, 0x8f, 0x3a,
+ 0x9e, 0xa4, 0x6f, 0x31, 0x1d, 0xb3, 0x42, 0xb4, 0x71, 0xaa, 0xb8, 0xcb,
+ 0x02, 0x0a, 0xfc, 0xc1, 0x4e, 0x3c, 0x4c, 0xc1, 0xe8, 0x2b, 0xa3, 0xfd,
+ 0x1a, 0x0d, 0xab, 0x3b, 0x02, 0xb4, 0x45, 0xd2, 0xf5, 0xde, 0xa9, 0xba,
+ 0xfe, 0x96, 0x87, 0x39, 0x27, 0xf3, 0x0c, 0xa9, 0xe5, 0x04, 0x01, 0x97,
+ 0x5a, 0xc3, 0xed, 0x0c, 0xb6, 0x3a, 0x40, 0xda, 0x88, 0xc7, 0x34, 0xc6,
+ 0x50, 0x46, 0xe1, 0x84, 0x92, 0x82, 0x54, 0xee, 0x86, 0x96, 0x6c, 0xb1,
+ 0x80, 0xe8, 0xb4, 0xac, 0xb6, 0x34, 0x50, 0x11, 0x10, 0xc9, 0x5c, 0x34,
+ 0x06, 0xbf, 0x70, 0x00, 0x9d, 0xd6, 0xa5, 0x9b, 0x15, 0xad, 0x19, 0x4b,
+ 0xa1, 0xea, 0xaf, 0xc6, 0x72, 0xa5, 0x51, 0x97, 0xd6, 0x2a, 0x94, 0x9a,
+ 0xcc, 0xc9, 0x17, 0x75, 0x34, 0xa2, 0x46, 0x4c, 0x17, 0x9c, 0xe2, 0xfc,
+ 0xe6, 0xc5, 0x61, 0x6b, 0xb8, 0x27, 0x4f, 0x1f, 0x6f, 0x85, 0x33, 0xcd,
+ 0x9b, 0xa7, 0xf4, 0xfb, 0xa3, 0x68, 0x35, 0xe7, 0xef, 0xcd, 0x5e, 0xbc,
+ 0xfb, 0x72, 0xf0, 0xed, 0xe3, 0x49, 0xfc, 0x68, 0xb0, 0xfd, 0x9f, 0xff,
+ 0x7c, 0xd5, 0xfb, 0x98, 0x12, 0x86, 0x06, 0x9d, 0x36, 0x28, 0x93, 0x7c,
+ 0x6b, 0xd8, 0x9c, 0x20, 0xda, 0x87, 0x3f, 0x96, 0xf6, 0x12, 0x36, 0x87,
+ 0xab, 0x86, 0x91, 0xcd, 0x0a, 0x35, 0xa6, 0x0d, 0x07, 0xf6, 0x0c, 0xaa,
+ 0x84, 0x17, 0xca, 0xc3, 0x46, 0x7a, 0x52, 0x41, 0xee, 0xc5, 0x53, 0x88,
+ 0x1e, 0x1a, 0x51, 0x97, 0x32, 0x0d, 0x6b, 0x5e, 0xe7, 0x06, 0xe6, 0x49,
+ 0x9e, 0x74, 0x56, 0x52, 0xd9, 0xe4, 0x63, 0x54, 0x25, 0xdf, 0xbe, 0x79,
+ 0xc9, 0xf9, 0x60, 0x26, 0x48, 0xdf, 0x11, 0xb0, 0xd4, 0xec, 0x60, 0x37,
+ 0xc1, 0x88, 0x62, 0x82, 0x0b, 0xb8, 0x3a, 0x53, 0x49, 0x1c, 0x2e, 0xe1,
+ 0xd0, 0x6d, 0xae, 0x52, 0x90, 0xaf, 0x4b, 0x33, 0x17, 0x55, 0xee, 0xb1,
+ 0x10, 0xdd, 0x5d, 0x9f, 0xc9, 0x1e, 0xa6, 0x78, 0xa7, 0xb6, 0xbb, 0x90,
+ 0x24, 0x33, 0x2f, 0x15, 0x07, 0xb3, 0x96, 0xa5, 0x75, 0x51, 0x1c, 0x73,
+ 0x98, 0x31, 0xd6, 0x02, 0x60, 0x6d, 0x6a, 0xd3, 0x51, 0x37, 0xe1, 0x9c,
+ 0xec, 0x67, 0xa8, 0x9b, 0x70, 0x66, 0xef, 0xd5, 0xb3, 0x79, 0x0f, 0x4e,
+ 0x7b, 0x35, 0xfa, 0xf5, 0x88, 0x83, 0x28, 0xf8, 0x3f, 0xfb, 0x4e, 0x0c,
+ 0xda, 0x89, 0x59, 0x0e, 0xa4, 0x75, 0x7b, 0xb0, 0x38, 0xaf, 0x19, 0x99,
+ 0x73, 0x09, 0x2c, 0xd8, 0xe1, 0xed, 0x87, 0x12, 0x11, 0xba, 0xe5, 0x09,
+ 0xe0, 0x21, 0xfc, 0x90, 0xdb, 0xbd, 0xa1, 0xaa, 0xc7, 0xf0, 0xeb, 0x81,
+ 0xe9, 0x2e, 0x54, 0xaa, 0x13, 0xef, 0x5f, 0xff, 0xf6, 0xdd, 0xd2, 0x3f,
+ 0xfd, 0x42, 0x51, 0xe5, 0x14, 0x55, 0x0c, 0x23, 0x76, 0x55, 0xb5, 0xa8,
+ 0x1a, 0xaa, 0x0b, 0xa3, 0xf0, 0xe3, 0x91, 0x48, 0x7e, 0x67, 0xa0, 0x61,
+ 0x1c, 0x19, 0xa5, 0x64, 0x72, 0xad, 0xfd, 0x61, 0x4d, 0x72, 0x12, 0x35,
+ 0xa5, 0x4a, 0x2c, 0x37, 0x51, 0xf8, 0x65, 0xdd, 0x4a, 0x8b, 0x94, 0xe6,
+ 0x9a, 0xf8, 0xfd, 0x8d, 0xc5, 0x06, 0xa6, 0x12, 0x5e, 0x42, 0x7b, 0x76,
+ 0x70, 0xa6, 0xa4, 0x29, 0xb7, 0x76, 0x24, 0xd5, 0x3c, 0x54, 0x5a, 0x1e,
+ 0x23, 0x2d, 0x78, 0xbe, 0x62, 0x72, 0x7d, 0x0c, 0x18, 0xca, 0x3d, 0xcb,
+ 0x3b, 0x52, 0x06, 0x7b, 0x48, 0x0a, 0x40, 0x09, 0xff, 0x02, 0xed, 0xac,
+ 0x0f, 0x26, 0xe6, 0xbf, 0xdd, 0x84, 0xbb, 0x1e, 0xba, 0x80, 0x7b, 0xb8,
+ 0xf8, 0x77, 0x7f, 0xd8, 0xc6, 0x8e, 0xea, 0xbd, 0xf6, 0x20, 0x8c, 0xaf,
+ 0x63, 0x48, 0xd9, 0xba, 0x13, 0xd0, 0x97, 0x7f, 0xdb, 0x94, 0x88, 0xbf,
+ 0xde, 0x47, 0x9f, 0xca, 0xbf, 0x07, 0xf8, 0xe7, 0x4f, 0xdb, 0xf1, 0xe3,
+ 0x5f, 0xac, 0x79, 0x86, 0x53, 0xff, 0x61, 0xfb, 0xdd, 0x1f, 0x76, 0x7a,
+ 0x21, 0x2c, 0x53, 0xa7, 0x21, 0x85, 0x83, 0x0b, 0x51, 0x11, 0x6e, 0x80,
+ 0xa8, 0x52, 0x49, 0xdb, 0x88, 0x26, 0x06, 0xe4, 0x9f, 0x23, 0x66, 0xa3,
+ 0xb6, 0x60, 0x45, 0xa4, 0x17, 0x9b, 0x41, 0x28, 0xbc, 0x2e, 0xf8, 0x65,
+ 0x61, 0x4c, 0x0c, 0x29, 0xdc, 0x01, 0xa0, 0xc9, 0xdc, 0xea, 0xc6, 0xc1,
+ 0x5b, 0xc5, 0x3e, 0x52, 0xda, 0x55, 0xa7, 0x63, 0x4f, 0xe0, 0x63, 0x93,
+ 0x24, 0x6a, 0x24, 0x30, 0x16, 0xd1, 0x70, 0x18, 0x39, 0x79, 0x8b, 0x5f,
+ 0x78, 0x2e, 0x94, 0xb1, 0x30, 0x7f, 0xf6, 0xe0, 0xaa, 0x43, 0x00, 0x5e,
+ 0x74, 0x93, 0x6f, 0x85, 0x86, 0x1d, 0x68, 0x4c, 0x92, 0xcf, 0x9e, 0x53,
+ 0x8e, 0x3a, 0xb5, 0x98, 0xb8, 0x93, 0xf0, 0xd7, 0x02, 0x89, 0xd1, 0xe4,
+ 0x3c, 0xd3, 0xcf, 0xf4, 0x3e, 0xa0, 0x9a, 0x48, 0x80, 0xa3, 0xf8, 0x17,
+ 0x5f, 0xad, 0x48, 0x86, 0x60, 0xc9, 0x36, 0x38, 0x38, 0x6d, 0x07, 0x71,
+ 0x94, 0xa1, 0xed, 0xa4, 0x98, 0x54, 0xe1, 0xfd, 0x70, 0x77, 0xc2, 0x05,
+ 0x0b, 0xe2, 0x7d, 0xa2, 0xbd, 0x59, 0x12, 0x67, 0xe3, 0xd6, 0xb6, 0x2e,
+ 0x93, 0xb6, 0xc5, 0x9b, 0x92, 0x21, 0x62, 0x0b, 0xcd, 0x45, 0x20, 0xb4,
+ 0x25, 0x11, 0x75, 0x07, 0x1a, 0xdf, 0x00, 0x4b, 0xe3, 0x42, 0x1a, 0xd3,
+ 0x9c, 0x5b, 0x43, 0x04, 0x2a, 0x19, 0xab, 0x68, 0x2d, 0x5e, 0x8b, 0xd6,
+ 0x9d, 0xcc, 0xdd, 0x71, 0x52, 0x5d, 0x6e, 0x7c, 0xe1, 0xe7, 0xfb, 0x8b,
+ 0x57, 0xc7, 0xf2, 0x33, 0xe1, 0x5e, 0x9e, 0x4c, 0x2d, 0xa4, 0xf6, 0x95,
+ 0x1c, 0x3b, 0x16, 0x3b, 0x3a, 0x1a, 0x16, 0xe3, 0x8c, 0x1a, 0xa5, 0xdf,
+ 0x88, 0x4b, 0xdd, 0x82, 0x62, 0x58, 0xa1, 0xea, 0xe1, 0xfc, 0x6c, 0x8e,
+ 0xd3, 0xab, 0xcd, 0x7c, 0x31, 0x9d, 0xee, 0xdd, 0xbe, 0xd7, 0xb0, 0xb3,
+ 0xe6, 0x71, 0xaf, 0x42, 0x85, 0xa3, 0x04, 0x52, 0xa5, 0x72, 0xb7, 0xc1,
+ 0x60, 0x1c, 0x2f, 0xc1, 0xd8, 0x65, 0xfb, 0x9f, 0x2c, 0xc5, 0x38, 0x2e,
+ 0xa2, 0x3b, 0xa6, 0x99, 0xdc, 0x8f, 0x0f, 0x3e, 0x0c, 0x63, 0x5b, 0x71,
+ 0xe5, 0xfa, 0xbb, 0x9d, 0x50, 0x5e, 0xf3, 0x52, 0x01, 0xee, 0xa5, 0x90,
+ 0x05, 0xd2, 0xc7, 0x88, 0xa1, 0x18, 0xb9, 0x7e, 0x5b, 0x6e, 0x92, 0xab,
+ 0xba, 0x6a, 0xca, 0x74, 0x9c, 0xcd, 0x66, 0x40, 0x8f, 0x7e, 0x41, 0x3a,
+ 0x67, 0xc9, 0x8d, 0x09, 0x67, 0x23, 0x32, 0x09, 0xd6, 0x26, 0x02, 0xd7,
+ 0x4c, 0xa9, 0xd0, 0x94, 0x7d, 0x2d, 0xc7, 0xf0, 0x45, 0x65, 0x66, 0xd0,
+ 0xd2, 0xa4, 0xbf, 0x10, 0x97, 0x36, 0xa1, 0xf6, 0x46, 0x31, 0x66, 0x50,
+ 0x15, 0x09, 0x28, 0xda, 0x66, 0xea, 0x70, 0x19, 0x95, 0xce, 0xec, 0x65,
+ 0x32, 0x03, 0x27, 0x1b, 0xa5, 0x3a, 0x18, 0x41, 0x15, 0x5d, 0x27, 0x99,
+ 0xc6, 0xec, 0xa4, 0xb9, 0x13, 0x36, 0x61, 0xb0, 0x31, 0x43, 0x21, 0xdc,
+ 0x10, 0x0e, 0x41, 0x62, 0x71, 0x0e, 0x3f, 0x20, 0x59, 0x53, 0x26, 0x2a,
+ 0x77, 0x65, 0x14, 0xcc, 0x59, 0x37, 0x83, 0xe8, 0x73, 0xb6, 0x7b, 0x6d,
+ 0xc4, 0xcf, 0xfc, 0x43, 0x8c, 0x1e, 0x1c, 0xaf, 0xd1, 0x9f, 0x63, 0x55,
+ 0x6d, 0x36, 0xb0, 0xca, 0xf8, 0xbf, 0x96, 0xdd, 0x95, 0xed, 0xa5, 0x17,
+ 0x69, 0xa5, 0x5a, 0x00, 0x3b, 0xf9, 0x2c, 0xf9, 0xd0, 0x8c, 0x64, 0x3f,
+ 0x6b, 0x46, 0xb2, 0xdd, 0x07, 0x83, 0x48, 0x4b, 0xdc, 0x44, 0xa3, 0x7a,
+ 0xcf, 0x27, 0x39, 0x2e, 0x82, 0x97, 0x82, 0x35, 0xd9, 0xe6, 0x4a, 0xa4,
+ 0xff, 0x59, 0x18, 0x9b, 0x00, 0x7b, 0xbd, 0x95, 0xd8, 0x0d, 0xdd, 0x45,
+ 0x84, 0x93, 0x0e, 0x14, 0xa8, 0x1d, 0x18, 0xea, 0xe5, 0x39, 0xab, 0x0c,
+ 0xcf, 0x37, 0xc9, 0xbd, 0xbb, 0x4e, 0x88, 0x1e, 0xbf, 0x17, 0x69, 0x3a,
+ 0x36, 0x5c, 0x08, 0x6b, 0x46, 0x52, 0x9d, 0xaa, 0x28, 0xec, 0x2b, 0x68,
+ 0x6f, 0xf6, 0xef, 0xef, 0x2b, 0x68, 0x4c, 0x8f, 0x99, 0xaa, 0x1d, 0xf4,
+ 0x38, 0x59, 0x01, 0x25, 0xb8, 0x89, 0xf8, 0xd1, 0xa0, 0xb4, 0x27, 0x0d,
+ 0x4a, 0x6b, 0x3c, 0xd8, 0x5d, 0x73, 0x2c, 0x50, 0x95, 0xd4, 0x8e, 0xc5,
+ 0x52, 0x01, 0x02, 0xa8, 0x1b, 0x02, 0xaf, 0x24, 0x46, 0xc4, 0x07, 0x18,
+ 0xd0, 0xe8, 0xca, 0xf4, 0x02, 0x3b, 0xe1, 0xa1, 0x2b, 0x0b, 0x5b, 0xb5,
+ 0x80, 0x5c, 0xce, 0xd3, 0xf2, 0xbf, 0x0f, 0xff, 0xfa, 0xaf, 0xbe, 0x4b,
+ 0x0b, 0x7e, 0x02, 0xc0, 0xc7, 0xb5, 0x4c, 0xf2, 0xd1, 0x57, 0x56, 0x23,
+ 0x8e, 0x4f, 0xc1, 0xa1, 0x6c, 0xa1, 0x16, 0x71, 0xa7, 0x46, 0xeb, 0xeb,
+ 0x25, 0x24, 0x13, 0x53, 0xff, 0x9b, 0xfd, 0xf9, 0x65, 0x99, 0x54, 0xa9,
+ 0x8f, 0x32, 0x7b, 0xf6, 0x7d, 0x44, 0xb9, 0x36, 0xa7, 0xf0, 0x14, 0x3f,
+ 0x63, 0x0c, 0x00, 0x69, 0x67, 0x1f, 0xbd, 0x4f, 0x6f, 0xc2, 0x8e, 0x0e,
+ 0x1a, 0xf9, 0x77, 0x69, 0x65, 0x4f, 0x33, 0x71, 0xe9, 0x2c, 0x25, 0x77,
+ 0xde, 0xdc, 0x03, 0x56, 0x87, 0x5e, 0x6b, 0xd5, 0x9f, 0x36, 0xb6, 0xa9,
+ 0xbe, 0x8c, 0x93, 0x2a, 0xf6, 0x98, 0xed, 0x79, 0xbb, 0x25, 0x0c, 0x06,
+ 0xee, 0xa8, 0x13, 0xf2, 0x3f, 0x17, 0xd8, 0x90, 0x98, 0x5a, 0x6d, 0x6e,
+ 0x0e, 0x06, 0x9b, 0x68, 0x1d, 0x6f, 0xc2, 0x7f, 0x6c, 0x09, 0x37, 0x79,
+ 0xca, 0x5a, 0xc3, 0x91, 0x05, 0x8f, 0x93, 0x51, 0xfb, 0x3c, 0xac, 0x81,
+ 0xc1, 0xc4, 0x07, 0xce, 0xd8, 0xaf, 0xfe, 0xb9, 0x00, 0x5b, 0x82, 0x2b,
+ 0x33, 0x67, 0x69, 0x79, 0xa1, 0xc9, 0xc4, 0xd6, 0xb5, 0xea, 0x69, 0xfb,
+ 0x5a, 0x12, 0x53, 0x51, 0x4c, 0x51, 0xfc, 0x07, 0x2e, 0xb8, 0x2f, 0x83,
+ 0xb2, 0x51, 0x5f, 0x9b, 0xac, 0xd6, 0x0c, 0x10, 0x6a, 0x44, 0x95, 0x2c,
+ 0x6d, 0xb7, 0xe8, 0x6c, 0xc8, 0x83, 0xd7, 0x21, 0xdb, 0xa1, 0x57, 0x27,
+ 0x04, 0xb3, 0xa8, 0xc0, 0xe1, 0xe3, 0x29, 0xc0, 0xff, 0x4f, 0xeb, 0xd1,
+ 0x26, 0x05, 0x42, 0xc6, 0x4b, 0xbb, 0xbb, 0x50, 0xc9, 0x6b, 0xcc, 0x7e,
+ 0xc2, 0x06, 0x25, 0x64, 0xc0, 0xea, 0xc6, 0xf3, 0xc5, 0x10, 0x09, 0x66,
+ 0xff, 0x92, 0x4e, 0xe4, 0xeb, 0x60, 0x82, 0x5a, 0xb3, 0x8a, 0x98, 0x9d,
+ 0x43, 0xec, 0x30, 0x30, 0x8c, 0x4e, 0xe3, 0x5a, 0x78, 0x8b, 0xb8, 0x2a,
+ 0x02, 0x5e, 0xf6, 0x61, 0xeb, 0x68, 0x12, 0x06, 0x8b, 0x61, 0xa0, 0x64,
+ 0x0e, 0x38, 0xcc, 0x53, 0x53, 0x24, 0xad, 0x1a, 0x28, 0xe3, 0xcd, 0x50,
+ 0xc8, 0x8c, 0x46, 0x23, 0xef, 0xaf, 0x87, 0x80, 0x9a, 0x73, 0x5a, 0x8b,
+ 0x49, 0xcf, 0x91, 0x55, 0xe0, 0x22, 0xe0, 0x24, 0x4e, 0x8f, 0x5e, 0x21,
+ 0x89, 0x3d, 0x3f, 0x7a, 0x23, 0x0e, 0x7c, 0x4a, 0x79, 0x41, 0x57, 0x0a,
+ 0x7b, 0x4f, 0xda, 0xfa, 0xc1, 0x84, 0x82, 0x87, 0x4f, 0x1e, 0x51, 0x88,
+ 0x8f, 0x2e, 0xfa, 0x65, 0xb2, 0xf3, 0xf8, 0x89, 0x2c, 0x5b, 0x9b, 0x73,
+ 0x93, 0x2f, 0x6c, 0x8d, 0x7f, 0xb5, 0xb9, 0xc9, 0x19, 0x23, 0x18, 0xb2,
+ 0xf6, 0x4c, 0x6d, 0xca, 0x51, 0xc2, 0x67, 0xff, 0xb2, 0x16, 0x46, 0x71,
+ 0xd2, 0x28, 0x0f, 0x27, 0x86, 0x60, 0x8a, 0x34, 0xa1, 0x4d, 0xbd, 0x74,
+ 0x34, 0x69, 0x85, 0x81, 0x94, 0x48, 0x8b, 0x36, 0xb1, 0x4a, 0x3c, 0x00,
+ 0xbf, 0xb2, 0x66, 0xd4, 0x69, 0x4a, 0x95, 0xa0, 0xfe, 0x4b, 0x24, 0x40,
+ 0x50, 0x34, 0x6a, 0x77, 0x09, 0x60, 0x9f, 0x8d, 0x0d, 0xaa, 0x98, 0xb4,
+ 0x47, 0x7e, 0xbf, 0x44, 0x41, 0x64, 0xc2, 0xe3, 0x70, 0x06, 0x96, 0x96,
+ 0x5b, 0x6e, 0x2f, 0x32, 0x2d, 0x10, 0xe3, 0xcc, 0x0a, 0x4e, 0x66, 0x5a,
+ 0x0c, 0x3d, 0xb4, 0x7a, 0x25, 0x0c, 0xc3, 0x41, 0x9b, 0x29, 0x29, 0x52,
+ 0xfd, 0xe6, 0xe0, 0x9f, 0x3a, 0x6d, 0x2d, 0x87, 0x7e, 0x01, 0x69, 0x41,
+ 0x79, 0x84, 0x8c, 0x40, 0x65, 0x90, 0xdd, 0x39, 0x0b, 0xf7, 0x86, 0x4a,
+ 0xd4, 0x6e, 0x93, 0xdf, 0xb0, 0x43, 0x29, 0xe5, 0xae, 0xb0, 0x06, 0x29,
+ 0xbf, 0x68, 0xa5, 0xa7, 0xa9, 0xf7, 0x15, 0xe9, 0xbd, 0x1d, 0x30, 0xc6,
+ 0x42, 0x67, 0xa7, 0xd5, 0x90, 0x34, 0xac, 0x33, 0x88, 0x87, 0x48, 0xcf,
+ 0x54, 0xe5, 0x42, 0xe0, 0xf5, 0x8c, 0x08, 0x2e, 0xf0, 0xfe, 0xb4, 0xff,
+ 0x5e, 0x9b, 0x76, 0x5f, 0xf2, 0x00, 0xed, 0x6e, 0x22, 0xe1, 0x4a, 0x64,
+ 0xd1, 0xf3, 0x4b, 0x9c, 0xc0, 0xfa, 0x91, 0x54, 0xf0, 0x50, 0xbe, 0xcb,
+ 0x17, 0x40, 0x3c, 0xfd, 0xe8, 0xba, 0x98, 0x4e, 0xf0, 0x67, 0x6e, 0xba,
+ 0xce, 0x23, 0xcc, 0x59, 0xea, 0x47, 0x40, 0xee, 0x63, 0x24, 0xb0, 0x3e,
+ 0x32, 0x07, 0xfc, 0xbc, 0xf6, 0x06, 0xa1, 0xfa, 0x44, 0x21, 0xcc, 0x59,
+ 0x32, 0x3a, 0x39, 0x03, 0x8d, 0x6f, 0xf0, 0xf4, 0xcf, 0x9b, 0x19, 0xfd,
+ 0xed, 0xcf, 0xd1, 0xfa, 0xd3, 0xc1, 0xe3, 0x47, 0x83, 0x6d, 0x18, 0xe7,
+ 0x0c, 0x5b, 0x15, 0xe4, 0x20, 0xf9, 0xd7, 0x09, 0xd6, 0x77, 0xdb, 0x83,
+ 0xf5, 0x95, 0x2b, 0x73, 0xcb, 0xb2, 0x61, 0x19, 0xbc, 0x68, 0xb6, 0xcf,
+ 0x65, 0xe1, 0x76, 0x99, 0x8d, 0x2f, 0x78, 0x4a, 0x5f, 0xf0, 0x69, 0x97,
+ 0x7d, 0x42, 0x07, 0x88, 0x9b, 0x37, 0xc4, 0x4e, 0x48, 0x78, 0xc9, 0x08,
+ 0xeb, 0x99, 0x3f, 0xa3, 0x2b, 0x04, 0xd2, 0x60, 0xa1, 0x9f, 0x05, 0x74,
+ 0xb1, 0xb1, 0x02, 0xf8, 0xdf, 0x4a, 0xde, 0xa1, 0xd6, 0xeb, 0x86, 0xa7,
+ 0x8d, 0xd2, 0xed, 0xed, 0x67, 0xc3, 0xc7, 0xdb, 0xcf, 0xbe, 0x7c, 0x3a,
+ 0x79, 0xf4, 0xe8, 0xf1, 0xce, 0x78, 0xb4, 0xb6, 0xa2, 0x0e, 0x82, 0xfe,
+ 0x21, 0x18, 0x95, 0x07, 0x6c, 0x08, 0x1d, 0xee, 0xfc, 0x16, 0x4e, 0x2d,
+ 0x6a, 0xca, 0x99, 0x92, 0x5a, 0x85, 0xd7, 0x84, 0x57, 0xff, 0x74, 0x67,
+ 0x77, 0x7b, 0xf3, 0xc9, 0xe0, 0xd1, 0x60, 0xc7, 0x00, 0x41, 0x71, 0x0b,
+ 0x88, 0x9a, 0x30, 0x06, 0x02, 0xa9, 0xc1, 0x04, 0xf3, 0x90, 0xe5, 0xd2,
+ 0xc2, 0xce, 0xfc, 0x84, 0x02, 0x83, 0x16, 0x68, 0x01, 0x9b, 0xda, 0x6d,
+ 0xbb, 0x00, 0xc0, 0x14, 0xbc, 0xf6, 0xf2, 0xe0, 0xf2, 0x18, 0x17, 0x61,
+ 0xd2, 0x44, 0xf0, 0xb0, 0x86, 0xd9, 0x3f, 0x17, 0x59, 0x0d, 0x26, 0x25,
+ 0x85, 0x26, 0xd3, 0x21, 0x66, 0x33, 0x5f, 0x57, 0x64, 0xe0, 0xc2, 0x0e,
+ 0x8c, 0x14, 0xf4, 0x27, 0x60, 0x71, 0x48, 0xef, 0x0a, 0xe2, 0x6d, 0xb6,
+ 0xea, 0x85, 0x50, 0x7a, 0x33, 0x92, 0x67, 0xf8, 0x44, 0x95, 0x55, 0x35,
+ 0x48, 0x21, 0xe0, 0xd9, 0xdf, 0x17, 0xd7, 0x48, 0x4c, 0x7d, 0x42, 0xee,
+ 0x08, 0x34, 0x7b, 0xa2, 0x6e, 0x65, 0x9a, 0x0c, 0xad, 0xfd, 0x0f, 0x79,
+ 0xff, 0x28, 0x23, 0x54, 0x50, 0x18, 0xb8, 0xd0, 0x90, 0xd3, 0x46, 0x1a,
+ 0x1f, 0xbc, 0x9c, 0x53, 0xce, 0xd2, 0x04, 0x7d, 0x4f, 0x88, 0x58, 0xcb,
+ 0x49, 0xb1, 0xb8, 0x7f, 0x62, 0xc1, 0x77, 0x60, 0xed, 0x86, 0x74, 0x2c,
+ 0x3e, 0xf5, 0x87, 0x2c, 0x43, 0x47, 0xf5, 0x8a, 0x47, 0x5d, 0x59, 0xb7,
+ 0x92, 0xc5, 0x38, 0x10, 0xc3, 0xf1, 0x38, 0xea, 0xa1, 0xdc, 0x58, 0x35,
+ 0x04, 0x2e, 0xed, 0x0a, 0xfb, 0xb6, 0x57, 0x21, 0x6b, 0xde, 0x5d, 0x28,
+ 0xc4, 0xfa, 0xc2, 0xbd, 0xc9, 0x7f, 0xf7, 0xe1, 0xc9, 0x7f, 0xe7, 0x7f,
+ 0x3e, 0xf9, 0x2b, 0xf5, 0x27, 0x4b, 0x69, 0x5f, 0xfb, 0x4a, 0x44, 0x9f,
+ 0x89, 0xfc, 0x77, 0x3e, 0x09, 0xf9, 0xef, 0xdc, 0x8f, 0xfc, 0x77, 0x1e,
+ 0x8e, 0xfc, 0xb7, 0x57, 0x25, 0xff, 0xdd, 0xbb, 0x90, 0x3f, 0x50, 0xda,
+ 0x14, 0x95, 0xce, 0x06, 0xf9, 0x3f, 0x5a, 0x89, 0xfc, 0x99, 0xfe, 0xe9,
+ 0x02, 0x74, 0xde, 0x00, 0x5c, 0xb3, 0x8b, 0xff, 0x0e, 0x3a, 0x72, 0xb8,
+ 0x11, 0xe5, 0xdd, 0xe9, 0x2c, 0xa1, 0x41, 0x75, 0xd4, 0x50, 0x2a, 0xc8,
+ 0xe0, 0x53, 0x92, 0xd9, 0xee, 0x27, 0x21, 0xb3, 0xdd, 0xfb, 0x91, 0xd9,
+ 0xee, 0x27, 0xe1, 0xb2, 0xdb, 0xb7, 0x91, 0x59, 0x99, 0x72, 0x6a, 0xe3,
+ 0x4f, 0x9a, 0x63, 0x0a, 0x73, 0xfd, 0x42, 0x31, 0xab, 0x3d, 0x54, 0xe7,
+ 0x7e, 0x69, 0xfb, 0x2a, 0x42, 0x06, 0xed, 0xd9, 0xc9, 0xe1, 0x5f, 0xcf,
+ 0x24, 0x45, 0x52, 0x9a, 0x54, 0xa8, 0x55, 0xc2, 0x01, 0x14, 0x30, 0x54,
+ 0xa9, 0x6b, 0x89, 0x67, 0xe5, 0x52, 0x91, 0x6d, 0x23, 0xb7, 0x1a, 0x81,
+ 0x40, 0x44, 0xf4, 0x52, 0x0b, 0x75, 0x69, 0x11, 0x40, 0x91, 0x67, 0x1d,
+ 0x55, 0xba, 0x27, 0xfb, 0x0c, 0x93, 0x17, 0x22, 0x2b, 0x31, 0xf1, 0xf1,
+ 0xdc, 0x79, 0x71, 0xbd, 0xbe, 0x2c, 0x09, 0x69, 0x97, 0x1e, 0xdd, 0xd0,
+ 0x3c, 0xea, 0x65, 0xab, 0x93, 0x75, 0x7d, 0x8f, 0x9e, 0x1d, 0x34, 0x6c,
+ 0xa3, 0x56, 0x12, 0xb8, 0xe3, 0xac, 0x36, 0xbf, 0xd5, 0x2c, 0x8d, 0x50,
+ 0x4b, 0x1f, 0xe9, 0x9f, 0xec, 0xec, 0x37, 0xbe, 0xe7, 0x97, 0x00, 0x7c,
+ 0x60, 0x64, 0x64, 0xc9, 0x40, 0x80, 0x13, 0x86, 0x1b, 0x93, 0x13, 0x84,
+ 0xac, 0xf9, 0x42, 0x1d, 0xa3, 0x52, 0x6c, 0xe5, 0xaa, 0x18, 0xbd, 0xaf,
+ 0x1e, 0xc1, 0x90, 0xed, 0xe0, 0x3e, 0xff, 0x22, 0xc1, 0xdf, 0xc8, 0x3f,
+ 0x1e, 0xe3, 0xc4, 0x04, 0x24, 0xc1, 0xff, 0xbc, 0xa4, 0x7f, 0xe3, 0x94,
+ 0xda, 0x14, 0xd8, 0xc9, 0x9e, 0x1a, 0x05, 0x37, 0x5a, 0x85, 0x13, 0xbb,
+ 0x72, 0xb9, 0x39, 0xcb, 0xeb, 0xc2, 0x36, 0x91, 0xb5, 0xdf, 0xcc, 0x00,
+ 0xa6, 0x72, 0x98, 0x5d, 0x38, 0x47, 0x30, 0x0c, 0x8d, 0xfb, 0xa8, 0x33,
+ 0x97, 0x8b, 0x2b, 0x88, 0x35, 0xb5, 0x46, 0xec, 0x0e, 0x33, 0x89, 0xe4,
+ 0xda, 0xb8, 0x07, 0xd0, 0x8f, 0xa8, 0x23, 0x84, 0x8f, 0xcd, 0xb6, 0x98,
+ 0x19, 0x17, 0xf4, 0xf6, 0xd6, 0x33, 0x3f, 0xb0, 0xf0, 0x56, 0xb1, 0x61,
+ 0x4d, 0xfa, 0x2c, 0xd7, 0xd6, 0x29, 0x00, 0xbd, 0x31, 0x5f, 0x02, 0x93,
+ 0x62, 0x12, 0x52, 0xc0, 0xc5, 0x37, 0x4e, 0xd9, 0x53, 0x82, 0xf9, 0xda,
+ 0xb0, 0x0f, 0xc2, 0xd9, 0x04, 0x0b, 0x4e, 0x2a, 0xef, 0xd8, 0x7f, 0x2a,
+ 0x90, 0x6e, 0x88, 0x53, 0xc6, 0x25, 0x54, 0x1e, 0x67, 0x44, 0xe7, 0xbd,
+ 0xe6, 0x35, 0x7f, 0x63, 0x5b, 0x4a, 0xff, 0xf1, 0xd1, 0x16, 0x9e, 0xa8,
+ 0x8e, 0x82, 0xe1, 0xf3, 0x69, 0x21, 0x1c, 0xea, 0x8f, 0xbb, 0x49, 0x57,
+ 0xf8, 0x44, 0x79, 0xc0, 0xe7, 0x48, 0x4e, 0x33, 0x93, 0x1b, 0xa2, 0xe4,
+ 0xeb, 0xa5, 0xf5, 0x29, 0xf1, 0x87, 0x48, 0x82, 0xea, 0xf8, 0x1f, 0xf3,
+ 0xe3, 0x7b, 0x96, 0x6e, 0x48, 0x18, 0x8f, 0xe7, 0x6a, 0xf8, 0xc8, 0x1f,
+ 0xef, 0x34, 0x7c, 0xe4, 0x1e, 0x16, 0x4c, 0x20, 0xb4, 0x22, 0xba, 0x9b,
+ 0xf6, 0x93, 0xd2, 0x06, 0x0c, 0xa6, 0x2e, 0x38, 0x61, 0x6f, 0x1b, 0xad,
+ 0xd7, 0xfc, 0x10, 0x86, 0x8a, 0xb2, 0x30, 0xae, 0x8a, 0xe6, 0xef, 0xa8,
+ 0x03, 0xb7, 0xef, 0x35, 0x3b, 0x4e, 0xa6, 0xfd, 0x28, 0x5c, 0xda, 0x4b,
+ 0xb4, 0xd4, 0x98, 0x64, 0x5c, 0x26, 0xd7, 0x8e, 0xbb, 0x8f, 0xbb, 0x1e,
+ 0x4e, 0x28, 0x53, 0xcd, 0x16, 0xe6, 0xa1, 0x7f, 0x0c, 0xcb, 0x14, 0x42,
+ 0xe0, 0x48, 0xd5, 0xa8, 0x4c, 0x25, 0xc3, 0x17, 0xd8, 0x18, 0x8d, 0x35,
+ 0x4f, 0xcb, 0x11, 0x56, 0x9e, 0x5e, 0xa4, 0xda, 0x59, 0xd7, 0x7c, 0xb5,
+ 0xb6, 0xc9, 0xa1, 0xb6, 0x43, 0x83, 0x00, 0x0a, 0x9e, 0x13, 0x76, 0x32,
+ 0xe5, 0xe3, 0xa8, 0x61, 0x72, 0x9f, 0x22, 0x7a, 0xbf, 0xaf, 0x95, 0xaf,
+ 0x52, 0x47, 0x38, 0x4f, 0xb0, 0x0a, 0xf4, 0x32, 0x9b, 0xb7, 0xb5, 0xa0,
+ 0xf8, 0xab, 0xe2, 0xab, 0x78, 0x43, 0xae, 0x64, 0x71, 0x85, 0x78, 0xd6,
+ 0xc9, 0xe8, 0x3d, 0x2d, 0x15, 0x4b, 0x18, 0x2e, 0xc9, 0xf3, 0x2d, 0xea,
+ 0x01, 0xc1, 0xc4, 0x22, 0x16, 0x13, 0x15, 0x1e, 0x85, 0x12, 0xe5, 0x74,
+ 0x61, 0x9c, 0x0e, 0xcb, 0xdc, 0x19, 0xa9, 0x1c, 0x76, 0x6b, 0xc2, 0x95,
+ 0xf6, 0xe8, 0xd5, 0x8c, 0xb0, 0xb4, 0x23, 0xaa, 0x6e, 0x66, 0xc3, 0x42,
+ 0xe0, 0x6b, 0x8b, 0xf9, 0x7f, 0x97, 0xe0, 0x97, 0x4f, 0xae, 0x77, 0xaa,
+ 0x2a, 0xb8, 0x7b, 0xf0, 0x2b, 0x08, 0x8a, 0x74, 0xa7, 0x0b, 0xfe, 0x87,
+ 0x95, 0xb3, 0x4d, 0x63, 0xaa, 0x8e, 0x1a, 0x4b, 0x82, 0x50, 0x53, 0x59,
+ 0x01, 0xc1, 0x12, 0xab, 0x1d, 0xb4, 0xaf, 0x72, 0xe6, 0xeb, 0x5b, 0x91,
+ 0x3c, 0x8d, 0x44, 0x9a, 0x88, 0x53, 0x1b, 0xf9, 0x31, 0xa1, 0x03, 0x93,
+ 0x65, 0x57, 0x8d, 0x2e, 0xd3, 0x19, 0xa3, 0x15, 0xf9, 0x50, 0xb6, 0x98,
+ 0xe2, 0x99, 0x0b, 0x91, 0x22, 0x19, 0x2f, 0x72, 0xe3, 0xe9, 0xb2, 0x02,
+ 0x58, 0xdb, 0x9d, 0x72, 0xff, 0xcc, 0x43, 0x18, 0xfe, 0xe8, 0xdd, 0xdb,
+ 0xd7, 0x67, 0x6f, 0x4f, 0x63, 0xaf, 0xcf, 0xf9, 0x9b, 0xf3, 0xa3, 0xe7,
+ 0x58, 0x32, 0x79, 0x7e, 0x72, 0x78, 0xf2, 0x32, 0x5a, 0x0f, 0xf4, 0x16,
+ 0x74, 0x89, 0xc8, 0x90, 0x0d, 0xf7, 0x3d, 0x65, 0x64, 0x31, 0xd9, 0x00,
+ 0xe6, 0x68, 0x66, 0x09, 0xeb, 0xb8, 0xcb, 0x81, 0x4e, 0x85, 0x72, 0xd7,
+ 0x5a, 0x31, 0x20, 0x71, 0x24, 0x5f, 0x2c, 0xb8, 0x96, 0xcf, 0x8c, 0xe2,
+ 0xd6, 0x04, 0x51, 0xb9, 0x6b, 0xa0, 0x6d, 0x64, 0x9f, 0x32, 0x62, 0xb8,
+ 0x6e, 0xc0, 0xc1, 0x74, 0xee, 0x70, 0xfc, 0x35, 0x0e, 0xed, 0x33, 0x44,
+ 0xe7, 0x1b, 0xf3, 0x33, 0xcc, 0xc8, 0xc4, 0x4a, 0x92, 0xdb, 0x14, 0x6a,
+ 0x7c, 0xdb, 0x96, 0x94, 0xc1, 0x48, 0x64, 0xac, 0xf8, 0x54, 0x49, 0x3f,
+ 0xb6, 0x34, 0x59, 0x2d, 0x27, 0x4a, 0x6e, 0xb5, 0x73, 0x8d, 0xfc, 0xcb,
+ 0xbc, 0x41, 0x0d, 0x6e, 0x24, 0xa7, 0xb5, 0xc8, 0x8d, 0xa9, 0x35, 0xa0,
+ 0x8b, 0xee, 0x69, 0x00, 0xfc, 0x0a, 0x6c, 0x7d, 0x2e, 0xee, 0x72, 0xb3,
+ 0x56, 0xe9, 0xfc, 0x20, 0xd5, 0xaf, 0xf0, 0x00, 0xfe, 0xd6, 0x39, 0xfd,
+ 0x41, 0x00, 0xb0, 0x5b, 0x5f, 0xc6, 0xd3, 0x44, 0x68, 0x66, 0xbb, 0x28,
+ 0x1c, 0x0e, 0x45, 0x74, 0x5a, 0x71, 0x35, 0x7f, 0xc7, 0xed, 0xef, 0x4b,
+ 0x93, 0x27, 0x62, 0xba, 0xa4, 0x4d, 0xe3, 0x9e, 0xb1, 0x02, 0xed, 0x7c,
+ 0x4c, 0x57, 0xf2, 0x6b, 0x63, 0x13, 0x31, 0x19, 0xad, 0x8f, 0x07, 0xd5,
+ 0xe7, 0xd3, 0x12, 0xf9, 0xbf, 0xe4, 0xc0, 0xbe, 0x6d, 0x76, 0x36, 0xe6,
+ 0x55, 0x88, 0x66, 0xc5, 0x50, 0xe6, 0xb4, 0x92, 0x3e, 0x21, 0x48, 0xe3,
+ 0xc2, 0x5e, 0xe0, 0xba, 0xa2, 0x42, 0xd2, 0x27, 0xbd, 0x70, 0x14, 0x9b,
+ 0x0a, 0x8e, 0x63, 0xfd, 0xc9, 0xe3, 0xc1, 0xce, 0x46, 0x23, 0x01, 0x14,
+ 0x13, 0xe6, 0x60, 0xb3, 0xfe, 0x8c, 0xff, 0x55, 0x98, 0x27, 0xfc, 0xfb,
+ 0xbc, 0xf3, 0xac, 0x9c, 0x6d, 0xa8, 0xfa, 0x8a, 0x63, 0xc6, 0x97, 0xfb,
+ 0xa2, 0x28, 0xc6, 0x8d, 0x3e, 0x37, 0x9d, 0x9a, 0x9a, 0xdd, 0xa5, 0xcf,
+ 0x76, 0x95, 0x78, 0xfa, 0xaf, 0x5a, 0x07, 0xb4, 0x82, 0x8d, 0x8a, 0xa3,
+ 0x78, 0x17, 0xe8, 0xa3, 0xaf, 0x0e, 0x7b, 0x77, 0x29, 0xe0, 0x3a, 0x69,
+ 0xa8, 0x1b, 0x03, 0x5f, 0x6c, 0xea, 0xed, 0x41, 0xe2, 0x4e, 0x71, 0x7f,
+ 0x18, 0x23, 0x21, 0x9d, 0x90, 0x11, 0x42, 0x00, 0xf2, 0x7d, 0xfa, 0x25,
+ 0xa5, 0x9f, 0x9a, 0x2a, 0xdb, 0x71, 0x3f, 0x04, 0xf4, 0x8c, 0x63, 0x24,
+ 0x23, 0xd7, 0xa4, 0x33, 0x9d, 0x67, 0xd7, 0x80, 0x22, 0xd6, 0xfa, 0xa6,
+ 0x33, 0xc3, 0xf4, 0x86, 0xf2, 0x14, 0xb3, 0x0f, 0x82, 0xaa, 0x14, 0xfd,
+ 0x96, 0x96, 0x85, 0x9f, 0x4f, 0x4f, 0x5a, 0x9f, 0xb6, 0xbe, 0x44, 0x37,
+ 0xcb, 0x15, 0x70, 0x57, 0x12, 0xcd, 0xe6, 0x87, 0x38, 0xab, 0x77, 0x97,
+ 0xfe, 0x0c, 0xdf, 0x86, 0xa0, 0xf7, 0xc2, 0xeb, 0xcd, 0x6a, 0x32, 0xea,
+ 0xb8, 0x9b, 0x69, 0xfe, 0xb3, 0x73, 0xb7, 0x05, 0xee, 0x8f, 0xa0, 0xf2,
+ 0x3d, 0xbc, 0x4d, 0xb2, 0x33, 0xc6, 0x68, 0x31, 0x5b, 0xac, 0x0f, 0x0b,
+ 0x3c, 0x85, 0xda, 0x84, 0x69, 0xcf, 0x29, 0xe4, 0xe4, 0x0b, 0x9f, 0x18,
+ 0xd4, 0x8a, 0x34, 0xbf, 0x51, 0x5c, 0x1e, 0x5b, 0xc7, 0x8a, 0xee, 0xa0,
+ 0x82, 0x02, 0x91, 0x59, 0x6d, 0xbb, 0xda, 0x28, 0x4a, 0x85, 0x59, 0xa2,
+ 0xbf, 0xa4, 0xe6, 0x9a, 0x43, 0x1c, 0xe9, 0x2b, 0xb3, 0x0d, 0xc4, 0x06,
+ 0x9a, 0x7b, 0xb1, 0x4e, 0x0d, 0xbe, 0x35, 0x83, 0x9b, 0xe6, 0xd3, 0x11,
+ 0x97, 0x6e, 0xc3, 0x06, 0xe9, 0xa6, 0xe4, 0x39, 0xa8, 0x16, 0xc3, 0x5f,
+ 0xd1, 0xdb, 0x8c, 0xb4, 0x98, 0x10, 0x8a, 0x0f, 0x6d, 0x83, 0x78, 0x6e,
+ 0xe0, 0x58, 0xe1, 0x01, 0xce, 0x04, 0xa9, 0x81, 0x33, 0x84, 0x86, 0xa3,
+ 0xcc, 0xf2, 0xcc, 0x29, 0x71, 0x8a, 0x9a, 0x40, 0x1d, 0xcb, 0x50, 0xa4,
+ 0xf7, 0xbe, 0xe8, 0x60, 0xdd, 0xf1, 0x04, 0xaf, 0x22, 0x57, 0xd3, 0xb6,
+ 0xb4, 0x04, 0xde, 0x4b, 0xae, 0x31, 0x37, 0x78, 0x1a, 0xf8, 0x78, 0xe7,
+ 0x58, 0xca, 0x81, 0xab, 0xfe, 0x9f, 0xf1, 0x3f, 0xfe, 0x37, 0x34, 0xc1,
+ 0x41, 0xb0, 0x62, 0x53, 0x78, 0x20, 0x3e, 0x4e, 0x2c, 0x96, 0x5e, 0xef,
+ 0x9a, 0xc0, 0xe1, 0x1e, 0xcb, 0xc7, 0x26, 0x9e, 0xb1, 0xc2, 0x04, 0x6f,
+ 0x45, 0x55, 0x23, 0x95, 0x5b, 0x3b, 0x89, 0x59, 0x8a, 0x87, 0xbf, 0x8d,
+ 0x17, 0x23, 0xc2, 0x3a, 0x11, 0x38, 0xaa, 0x16, 0x28, 0x7b, 0xdb, 0x2e,
+ 0x1b, 0x95, 0x19, 0xf6, 0xfb, 0xc3, 0x24, 0xe0, 0x64, 0x82, 0x80, 0x24,
+ 0x25, 0xfe, 0x41, 0xb1, 0x76, 0x92, 0x02, 0x84, 0x95, 0x61, 0x21, 0x75,
+ 0xe6, 0x45, 0x8d, 0x09, 0x04, 0x74, 0xd5, 0xc7, 0x7e, 0x7b, 0xba, 0x0b,
+ 0xb8, 0xef, 0x8b, 0xca, 0x3d, 0x12, 0xb5, 0x84, 0x70, 0x58, 0x4e, 0x5c,
+ 0x46, 0xf5, 0x4c, 0x4a, 0x64, 0x39, 0xed, 0xca, 0x61, 0x74, 0x5e, 0x31,
+ 0x36, 0xbe, 0xc2, 0x95, 0xb5, 0xe4, 0xc0, 0x55, 0x1e, 0x49, 0x38, 0x9f,
+ 0x04, 0xb1, 0x81, 0xfa, 0xe8, 0x52, 0x05, 0xd3, 0xcd, 0xbf, 0x6f, 0xda,
+ 0x0c, 0x7d, 0x5b, 0x49, 0x48, 0x9e, 0x38, 0x42, 0x0e, 0x21, 0xcb, 0xc1,
+ 0x17, 0x26, 0x6c, 0x30, 0x52, 0x69, 0x18, 0xa6, 0x11, 0xe6, 0x98, 0x04,
+ 0x91, 0x73, 0x5e, 0x85, 0x78, 0x47, 0x94, 0x51, 0xe3, 0x32, 0x11, 0x4d,
+ 0x06, 0x73, 0xbc, 0x13, 0xf4, 0xa8, 0x15, 0xa1, 0x7e, 0xb2, 0xa2, 0xa9,
+ 0x74, 0x2b, 0x94, 0xcb, 0xa4, 0x9f, 0x74, 0x03, 0x45, 0xf9, 0xf7, 0xf0,
+ 0x5d, 0xdc, 0x3c, 0xfa, 0xed, 0x57, 0x70, 0x93, 0xee, 0x23, 0x02, 0x45,
+ 0x90, 0xba, 0xba, 0xa5, 0x87, 0x0f, 0xa9, 0x65, 0xd8, 0x52, 0xc7, 0x1c,
+ 0x14, 0x8c, 0xe6, 0xd4, 0xe7, 0xd8, 0x71, 0x03, 0x78, 0xc9, 0x22, 0xab,
+ 0x89, 0x18, 0x5b, 0x90, 0x11, 0x8a, 0x53, 0x80, 0x0e, 0x51, 0xe4, 0x3a,
+ 0x5e, 0x7d, 0x75, 0xae, 0xa9, 0x30, 0xa6, 0xe6, 0x8c, 0xeb, 0x3a, 0x49,
+ 0x9d, 0x13, 0x2f, 0x28, 0x91, 0x0e, 0x7b, 0xc1, 0xd8, 0xe6, 0x21, 0x24,
+ 0x17, 0xb6, 0x2b, 0xc3, 0xc1, 0x85, 0x4d, 0x53, 0xbd, 0x02, 0xb4, 0x9f,
+ 0x8f, 0x63, 0xe0, 0x7e, 0xf3, 0xe5, 0xbe, 0x79, 0xf7, 0x8b, 0x3f, 0x41,
+ 0x75, 0x7c, 0x73, 0x7c, 0xfd, 0x37, 0x15, 0x31, 0xdb, 0x82, 0xf9, 0x31,
+ 0x3a, 0x9e, 0xd8, 0xc0, 0xba, 0xa7, 0xab, 0xc9, 0xfc, 0xa5, 0x51, 0xad,
+ 0xce, 0x3f, 0xf1, 0x6b, 0x7f, 0x9d, 0x27, 0x97, 0x1c, 0xb2, 0xda, 0xb3,
+ 0x74, 0x22, 0xdf, 0xf2, 0xb0, 0xcd, 0x43, 0xb6, 0xa7, 0xab, 0xa7, 0xd9,
+ 0x46, 0x5c, 0x68, 0x9e, 0xad, 0x1c, 0xeb, 0x5b, 0x46, 0x81, 0xa6, 0x11,
+ 0xc9, 0x17, 0x91, 0x0b, 0x08, 0x8f, 0x33, 0x13, 0x7b, 0x46, 0xbc, 0x43,
+ 0xc6, 0xb2, 0x10, 0xee, 0x83, 0x22, 0xcf, 0x89, 0xaa, 0x60, 0x04, 0x50,
+ 0x7b, 0x89, 0x4a, 0x88, 0xa1, 0x7e, 0x67, 0x24, 0xbd, 0x68, 0x22, 0x5c,
+ 0x58, 0x76, 0x4b, 0x6f, 0x2a, 0x77, 0x7b, 0x3f, 0x15, 0x9d, 0xf0, 0xe8,
+ 0xbf, 0x03, 0x95, 0x84, 0xba, 0xda, 0x75, 0xd1, 0xc9, 0x28, 0x89, 0x39,
+ 0x12, 0x10, 0x06, 0xc9, 0x6b, 0xf1, 0x85, 0x85, 0x30, 0xef, 0xc3, 0x03,
+ 0x41, 0xf3, 0x33, 0xfa, 0x96, 0x84, 0x13, 0xa4, 0xe6, 0xd9, 0x47, 0xb5,
+ 0xbb, 0xa9, 0x6a, 0x86, 0xa0, 0x73, 0x12, 0x10, 0x1b, 0x41, 0x11, 0x6b,
+ 0x78, 0x19, 0x8c, 0x69, 0x3a, 0x42, 0x14, 0xb0, 0x87, 0x07, 0xa1, 0x8a,
+ 0x73, 0x07, 0xfb, 0x87, 0xb2, 0x62, 0x6d, 0xd5, 0x1c, 0xe5, 0xe3, 0xa0,
+ 0x37, 0x41, 0xeb, 0xb3, 0x59, 0x61, 0xb1, 0x01, 0xbe, 0x25, 0xed, 0x9b,
+ 0x33, 0x12, 0x80, 0x69, 0x39, 0x49, 0x46, 0x5a, 0x63, 0xa7, 0xdf, 0x24,
+ 0x5f, 0xb1, 0x56, 0x51, 0xaf, 0x94, 0xab, 0x20, 0xfe, 0x6e, 0x03, 0x2a,
+ 0x8b, 0xdc, 0x86, 0xd4, 0x1f, 0x78, 0x42, 0xed, 0x50, 0xc8, 0x9e, 0x34,
+ 0xad, 0x99, 0x78, 0x3d, 0x22, 0x74, 0x35, 0xc7, 0x33, 0x9c, 0xb9, 0x35,
+ 0xd0, 0xb2, 0x27, 0xde, 0x18, 0x24, 0x7d, 0x1d, 0x25, 0x73, 0x00, 0x31,
+ 0x08, 0x0f, 0x50, 0x92, 0xae, 0xfa, 0xa1, 0xda, 0x8e, 0x49, 0x9a, 0xd4,
+ 0x0b, 0xc2, 0xd0, 0x22, 0x14, 0x17, 0x02, 0x74, 0x00, 0x22, 0x91, 0xda,
+ 0xa8, 0x54, 0x96, 0x6c, 0x14, 0x3f, 0x39, 0x54, 0x3d, 0x6d, 0xef, 0x63,
+ 0x19, 0xfa, 0xc5, 0x82, 0xc3, 0x6a, 0x2a, 0x1c, 0x57, 0x4e, 0x1a, 0x68,
+ 0x57, 0x51, 0xd9, 0x15, 0x6f, 0x40, 0xac, 0x61, 0x1f, 0x5c, 0xea, 0xd9,
+ 0x60, 0x37, 0x04, 0x6c, 0xdb, 0xac, 0x2c, 0x6a, 0x52, 0xed, 0x83, 0x3b,
+ 0x27, 0xdd, 0xc1, 0x57, 0xbd, 0xe6, 0x76, 0x55, 0x2b, 0x76, 0xd4, 0x4d,
+ 0x30, 0xe1, 0x93, 0x9a, 0x83, 0x24, 0x94, 0x80, 0x4b, 0x17, 0xb7, 0x95,
+ 0x17, 0x69, 0x02, 0x0c, 0xcf, 0x06, 0x3b, 0xad, 0x1c, 0x7c, 0x59, 0x35,
+ 0x0e, 0x12, 0xae, 0x7d, 0x3f, 0x13, 0x75, 0x4a, 0xa7, 0xa2, 0xdb, 0xa0,
+ 0xd8, 0x20, 0xce, 0x2d, 0xa4, 0xdc, 0xde, 0x0e, 0x04, 0x84, 0xd6, 0x3c,
+ 0x9f, 0xa1, 0x8d, 0x7d, 0x63, 0xfe, 0xc3, 0x03, 0xee, 0xb7, 0x57, 0x63,
+ 0x9f, 0x97, 0x0f, 0x66, 0xc3, 0x57, 0xe2, 0xa0, 0x2d, 0x80, 0x1a, 0xde,
+ 0x7c, 0x2a, 0xfd, 0xd0, 0x13, 0x69, 0x1d, 0x89, 0x0b, 0xdc, 0xd5, 0xf2,
+ 0xed, 0x76, 0x86, 0x7f, 0x1a, 0x83, 0x07, 0xd1, 0x38, 0xdc, 0xd3, 0xa1,
+ 0x87, 0x3e, 0xea, 0x74, 0x68, 0x84, 0xcf, 0x78, 0x3a, 0x34, 0xff, 0xa6,
+ 0x01, 0x68, 0x17, 0x7c, 0x8c, 0x07, 0x3b, 0x22, 0x3d, 0x97, 0x0f, 0x7d,
+ 0xf3, 0xd3, 0x48, 0x04, 0x1d, 0xcf, 0x6d, 0x6f, 0x8a, 0x87, 0x9b, 0xdd,
+ 0x71, 0x32, 0x30, 0x62, 0x5c, 0xdf, 0xcc, 0xd3, 0x68, 0x1f, 0xff, 0x5c,
+ 0x72, 0x3a, 0xe6, 0xc1, 0x8f, 0x39, 0x20, 0x33, 0x48, 0xe8, 0x8c, 0x3a,
+ 0xec, 0x0e, 0x0f, 0xdd, 0xe1, 0x63, 0xaa, 0x5d, 0x5a, 0xcb, 0xc0, 0x74,
+ 0x7d, 0xf7, 0xa7, 0x2c, 0x3c, 0xef, 0x7b, 0x5e, 0xd6, 0x2a, 0x91, 0xe1,
+ 0x06, 0x77, 0xb8, 0x1a, 0xc4, 0xb7, 0xf0, 0xcf, 0x9f, 0x44, 0x17, 0xfa,
+ 0xa5, 0xf3, 0x10, 0x8e, 0xfa, 0x72, 0x10, 0x1f, 0x7b, 0x06, 0x9f, 0x27,
+ 0x40, 0xfd, 0x89, 0x36, 0x99, 0x4e, 0xf2, 0x2e, 0x3b, 0x9d, 0xcd, 0x2f,
+ 0xd1, 0xe5, 0xb7, 0x1f, 0xc2, 0x79, 0x75, 0x08, 0x5d, 0x1e, 0x5b, 0x75,
+ 0x8b, 0xcf, 0x2c, 0x90, 0x10, 0x1b, 0xfb, 0x91, 0x8e, 0xa4, 0xca, 0x89,
+ 0xf1, 0x54, 0x99, 0x42, 0x03, 0x27, 0x6b, 0xe6, 0x2c, 0x04, 0xc4, 0xc9,
+ 0xb8, 0x56, 0xea, 0xcd, 0xd3, 0xf1, 0xa8, 0xe3, 0xb6, 0xe6, 0xb3, 0xc0,
+ 0x09, 0x65, 0x63, 0xfd, 0x15, 0x68, 0x4a, 0x6f, 0x30, 0x00, 0x1e, 0x2d,
+ 0xe6, 0x1e, 0xf0, 0x2c, 0x57, 0x79, 0xd0, 0x73, 0x3c, 0x62, 0xa3, 0x83,
+ 0x28, 0x10, 0xc4, 0xdb, 0x37, 0x2f, 0x3d, 0xa7, 0x98, 0x9e, 0x09, 0x25,
+ 0x5a, 0x54, 0xe9, 0xe6, 0xb8, 0x18, 0x55, 0x9b, 0x55, 0x35, 0xd5, 0x5d,
+ 0x1a, 0x5c, 0xd6, 0xb3, 0xe9, 0x32, 0x62, 0x93, 0x25, 0x7f, 0x16, 0x1f,
+ 0xbb, 0x33, 0xff, 0xd1, 0xe1, 0xf3, 0xef, 0x8f, 0x62, 0xf8, 0xf3, 0xec,
+ 0x20, 0x3e, 0x38, 0x3a, 0xdb, 0x79, 0xfc, 0x24, 0x3e, 0x3c, 0x7c, 0xf5,
+ 0xec, 0x63, 0x89, 0x50, 0x86, 0xa7, 0x6b, 0xb9, 0x28, 0x31, 0x7e, 0xde,
+ 0x96, 0x94, 0x77, 0x20, 0xcb, 0x72, 0x6a, 0x3b, 0x6b, 0x2f, 0x21, 0x4b,
+ 0x79, 0xec, 0x63, 0x6e, 0xbe, 0x0c, 0xf1, 0xd9, 0x0e, 0x43, 0xe6, 0x2f,
+ 0x53, 0xf4, 0xfb, 0x56, 0x1f, 0xa5, 0xbd, 0xe8, 0x01, 0xc8, 0x90, 0xab,
+ 0x6f, 0x3b, 0x9b, 0x84, 0xcb, 0x1d, 0x41, 0xc6, 0x45, 0xf0, 0x5c, 0xb0,
+ 0xf0, 0x1e, 0xd0, 0x47, 0x20, 0xf0, 0x7a, 0xbe, 0x93, 0x40, 0xe6, 0xc2,
+ 0x77, 0xdb, 0x11, 0x92, 0x86, 0x97, 0xe0, 0x76, 0x83, 0x5e, 0xa6, 0xf8,
+ 0x54, 0x16, 0xbd, 0x0c, 0xff, 0x99, 0x4c, 0x7a, 0xf2, 0x27, 0xf8, 0xc7,
+ 0xca, 0xb8, 0x1a, 0xd1, 0x3e, 0xff, 0x77, 0xf3, 0x9b, 0xd0, 0xa5, 0x52,
+ 0x54, 0x59, 0xda, 0x01, 0x79, 0x01, 0x3d, 0xa1, 0xd2, 0xc1, 0x52, 0xd8,
+ 0xb4, 0x66, 0xef, 0xd1, 0x29, 0x6b, 0xe9, 0x17, 0x1d, 0x91, 0x17, 0x96,
+ 0x54, 0x88, 0x65, 0xee, 0x84, 0x80, 0xf1, 0x33, 0xe5, 0xce, 0xb6, 0xf0,
+ 0x0f, 0x19, 0x78, 0xea, 0xcc, 0x58, 0x99, 0x16, 0xd3, 0xc1, 0x7e, 0x6a,
+ 0xff, 0x5c, 0x64, 0x70, 0xfd, 0xa8, 0x58, 0xcc, 0x00, 0xee, 0xc4, 0xdf,
+ 0xe3, 0x96, 0xc8, 0x82, 0x91, 0x0f, 0x08, 0xa4, 0x90, 0x32, 0x00, 0x22,
+ 0x44, 0x1f, 0x35, 0xdb, 0x5a, 0xe3, 0x53, 0x06, 0xb0, 0x8a, 0x0e, 0x4f,
+ 0x5e, 0xbf, 0x3e, 0x3a, 0x6c, 0xe7, 0xe8, 0x5b, 0xf0, 0x4e, 0x72, 0x26,
+ 0x48, 0x24, 0xa5, 0x2d, 0x10, 0x78, 0x76, 0xdc, 0x90, 0xda, 0x64, 0x8f,
+ 0xca, 0x0a, 0xe0, 0x5f, 0xd7, 0x02, 0x89, 0x4b, 0xbf, 0x16, 0xe9, 0x96,
+ 0x8c, 0x10, 0x8c, 0x52, 0x68, 0xb7, 0x3d, 0x5c, 0x88, 0x92, 0x89, 0xca,
+ 0x38, 0xd3, 0xb1, 0x42, 0x7b, 0x9d, 0x5c, 0xf7, 0x14, 0x1a, 0x94, 0xd9,
+ 0x09, 0xa0, 0x6c, 0x3c, 0xde, 0x14, 0x70, 0x2f, 0x41, 0x54, 0xa7, 0x15,
+ 0x05, 0xae, 0x8d, 0x2c, 0x70, 0x9e, 0xe2, 0x4d, 0x1b, 0xc7, 0xc5, 0x24,
+ 0xa6, 0x1c, 0xae, 0x59, 0x52, 0xbe, 0xc7, 0x24, 0x7f, 0x07, 0xab, 0x8c,
+ 0x80, 0xf4, 0x31, 0x8e, 0x0c, 0x83, 0x4b, 0x23, 0xaf, 0xca, 0xf3, 0xd4,
+ 0x11, 0x00, 0xa4, 0xa6, 0x98, 0xc9, 0x82, 0x88, 0xf9, 0xe6, 0xf5, 0x1e,
+ 0x56, 0xff, 0xea, 0xfb, 0x79, 0x7a, 0x8d, 0xf3, 0x70, 0x2f, 0x58, 0xec,
+ 0x5f, 0x87, 0xd9, 0x5e, 0x7e, 0x7e, 0x6a, 0xbd, 0x28, 0x73, 0x66, 0xbc,
+ 0x37, 0x7c, 0x48, 0x33, 0xc2, 0xa0, 0x46, 0x94, 0xfe, 0x0a, 0xe1, 0x57,
+ 0x04, 0x39, 0xd5, 0xdb, 0xa4, 0xef, 0x99, 0x8a, 0xda, 0xf9, 0xb0, 0x0d,
+ 0x10, 0x2f, 0xc9, 0x60, 0x10, 0xc2, 0x66, 0x2c, 0x4c, 0x3d, 0xf3, 0x10,
+ 0x96, 0x31, 0x6d, 0x3c, 0xc6, 0x7d, 0x2a, 0xf3, 0xee, 0x30, 0x35, 0x67,
+ 0x99, 0x74, 0x26, 0xec, 0x3a, 0xfe, 0x0d, 0x6a, 0xc9, 0x8e, 0x39, 0x7d,
+ 0x08, 0x51, 0x55, 0x5e, 0x10, 0x20, 0x1c, 0xce, 0xfb, 0x8d, 0xb6, 0x20,
+ 0x63, 0xcc, 0x66, 0x8d, 0xdb, 0x07, 0x80, 0x5f, 0x61, 0xef, 0x30, 0x69,
+ 0x4d, 0x76, 0x56, 0x13, 0xba, 0x38, 0xef, 0x4e, 0xae, 0x66, 0x96, 0x23,
+ 0xe2, 0x11, 0x31, 0xfe, 0x06, 0x56, 0xfa, 0x63, 0x72, 0xa0, 0xb4, 0x13,
+ 0x50, 0xf1, 0xde, 0x7e, 0x13, 0x0b, 0x41, 0xd1, 0x27, 0x62, 0x9c, 0xd2,
+ 0x39, 0xbe, 0x8a, 0x1d, 0x79, 0x55, 0x3d, 0xce, 0xf2, 0x3b, 0xc7, 0x78,
+ 0xfc, 0xbe, 0x08, 0x78, 0x19, 0x1c, 0xaa, 0xdc, 0xa4, 0xc8, 0x6c, 0x9b,
+ 0xe0, 0xcd, 0x5b, 0xca, 0x05, 0x82, 0x91, 0x3d, 0xcb, 0xc8, 0x3e, 0x1d,
+ 0xac, 0x53, 0x73, 0x9e, 0xde, 0x8f, 0xf1, 0x0b, 0xcc, 0x0d, 0x8f, 0x5f,
+ 0xc3, 0x19, 0xed, 0x45, 0xff, 0x59, 0x20, 0xbc, 0x92, 0x49, 0x19, 0xed,
+ 0xe6, 0xe3, 0x77, 0x19, 0x1a, 0x73, 0x80, 0xe3, 0x83, 0x0b, 0xba, 0x20,
+ 0x70, 0xa1, 0xe7, 0x65, 0x56, 0x3d, 0xe0, 0xe8, 0xdf, 0x03, 0x0b, 0xd9,
+ 0xbb, 0xdb, 0x70, 0x2b, 0x62, 0x92, 0xcb, 0x3c, 0xd8, 0x5a, 0x28, 0x2c,
+ 0x41, 0x5a, 0x19, 0x15, 0x35, 0x98, 0xfa, 0xcd, 0xf6, 0x4d, 0x26, 0xb3,
+ 0x7b, 0xc7, 0xf4, 0x8f, 0xba, 0x45, 0xd7, 0xe7, 0xc5, 0x73, 0x60, 0x88,
+ 0x4b, 0x79, 0x89, 0x29, 0x14, 0xd4, 0x85, 0x91, 0x5b, 0x42, 0x6d, 0x37,
+ 0x33, 0xf2, 0x7d, 0xe7, 0x3f, 0xbc, 0x37, 0x7a, 0x5f, 0xb1, 0x02, 0xc3,
+ 0x91, 0x43, 0xb8, 0xdb, 0xb2, 0x92, 0x30, 0x7d, 0x37, 0x7b, 0x6f, 0x69,
+ 0x72, 0x1f, 0x43, 0x2c, 0x21, 0x7e, 0x75, 0x25, 0xc9, 0x04, 0xb7, 0x44,
+ 0x12, 0x9a, 0x7b, 0xd6, 0xd1, 0x3a, 0xe4, 0xa3, 0x3d, 0x94, 0xdc, 0xeb,
+ 0xe9, 0x5e, 0x2a, 0x0b, 0xaf, 0xeb, 0x63, 0x15, 0x93, 0x41, 0x6b, 0xbc,
+ 0x50, 0xb3, 0xa9, 0xfb, 0x20, 0x39, 0x73, 0xc3, 0xaf, 0x86, 0xb3, 0x73,
+ 0x3b, 0xa4, 0xba, 0xaa, 0x5b, 0xb4, 0xcb, 0x56, 0x68, 0xf8, 0x4e, 0x57,
+ 0x36, 0x18, 0x7c, 0x3d, 0xd2, 0x0c, 0x15, 0xd6, 0x24, 0xef, 0xd7, 0xba,
+ 0xce, 0x1c, 0xa7, 0xdf, 0x9b, 0x65, 0x95, 0x13, 0x35, 0x6b, 0xfb, 0x38,
+ 0x43, 0xa2, 0x9d, 0xd9, 0xde, 0xe5, 0x7e, 0xee, 0xb2, 0x26, 0xde, 0xa7,
+ 0x37, 0x77, 0xf2, 0xa2, 0x99, 0xe7, 0xee, 0x61, 0xc6, 0xf9, 0x93, 0x35,
+ 0x5b, 0x40, 0x78, 0x7e, 0x34, 0xd7, 0x98, 0x7b, 0x78, 0x27, 0x9a, 0x59,
+ 0x05, 0x42, 0x06, 0x38, 0x3f, 0x8c, 0x28, 0xf3, 0xfc, 0x41, 0xbc, 0x3b,
+ 0x06, 0x56, 0x66, 0x25, 0xcb, 0x8e, 0xb0, 0x45, 0xe0, 0x8f, 0xa5, 0xa7,
+ 0xf0, 0x31, 0x76, 0xf4, 0x2a, 0x95, 0xf7, 0x0f, 0x9c, 0x32, 0xf1, 0x29,
+ 0xb6, 0x98, 0x4f, 0x71, 0xf5, 0x7d, 0x36, 0xa2, 0xee, 0x96, 0x40, 0xbb,
+ 0x35, 0xa3, 0x5f, 0x1b, 0xe1, 0xb8, 0x7e, 0x76, 0xfa, 0xfa, 0xe8, 0xbb,
+ 0x93, 0x8d, 0x90, 0x49, 0xed, 0x15, 0xef, 0x3a, 0x06, 0xf6, 0x52, 0x93,
+ 0xda, 0xca, 0x5e, 0xd7, 0xaa, 0x0e, 0xd4, 0xa2, 0x85, 0x16, 0x22, 0xf5,
+ 0x0a, 0xab, 0x59, 0xd8, 0x76, 0xc6, 0x4f, 0x65, 0x64, 0xdb, 0x19, 0x1e,
+ 0xd8, 0xce, 0x5e, 0xdd, 0xb4, 0x46, 0xcc, 0xf5, 0x5b, 0x2b, 0x04, 0x78,
+ 0x7b, 0x03, 0x7d, 0x40, 0x34, 0xe0, 0x7b, 0x5f, 0x7f, 0x09, 0x21, 0xbe,
+ 0x37, 0xbc, 0x25, 0x34, 0x4b, 0xe3, 0xd8, 0xee, 0x62, 0x5c, 0x06, 0x0e,
+ 0xf1, 0xd3, 0x34, 0x8f, 0x70, 0x06, 0x5f, 0x76, 0x74, 0xf7, 0x57, 0x5a,
+ 0x3d, 0x0a, 0x71, 0xcf, 0x30, 0xd0, 0xb0, 0x81, 0x7f, 0xb1, 0x0c, 0xb3,
+ 0xcc, 0x72, 0x48, 0x7a, 0xea, 0x23, 0x58, 0xe4, 0xbd, 0xf0, 0xcb, 0x1e,
+ 0x8c, 0x45, 0x36, 0x31, 0xcd, 0x1e, 0x94, 0x6d, 0x7a, 0x25, 0x70, 0x66,
+ 0xf4, 0x3b, 0x70, 0xcc, 0xbb, 0xc3, 0x5f, 0x85, 0x99, 0x68, 0x17, 0x02,
+ 0x96, 0x41, 0x6d, 0xeb, 0x86, 0xbf, 0x6a, 0xe6, 0x9e, 0xb8, 0x49, 0x68,
+ 0x5d, 0xe8, 0x57, 0xff, 0x57, 0xc2, 0x5f, 0x35, 0xf0, 0xaf, 0xd0, 0xcd,
+ 0x45, 0x78, 0x40, 0x01, 0x08, 0x2c, 0xa7, 0xb1, 0x2e, 0xe3, 0x5f, 0x2d,
+ 0x83, 0xbf, 0x72, 0xd0, 0xaf, 0x96, 0x80, 0x5f, 0x91, 0xb6, 0xb6, 0x14,
+ 0xfe, 0xea, 0x9e, 0xf8, 0x57, 0x1d, 0xf0, 0x57, 0xf7, 0x45, 0xbf, 0x7a,
+ 0x18, 0xf8, 0x2b, 0x57, 0x61, 0xbd, 0x0f, 0x66, 0xd1, 0x7d, 0x14, 0xd6,
+ 0x5b, 0x5c, 0x1d, 0x1f, 0x0b, 0x5c, 0xe4, 0x0f, 0xf2, 0x80, 0xf0, 0x45,
+ 0x8d, 0x71, 0x97, 0x2a, 0x63, 0x5f, 0x86, 0x58, 0x0b, 0xd2, 0x6a, 0x36,
+ 0x92, 0xb6, 0x12, 0xfb, 0xf8, 0xe7, 0xd7, 0x4b, 0x1c, 0x59, 0xcd, 0x62,
+ 0x69, 0xa7, 0x24, 0x4e, 0x86, 0xe1, 0xc2, 0x0b, 0xeb, 0x5b, 0x8e, 0x7c,
+ 0x64, 0x5b, 0xb9, 0x46, 0xe1, 0xe4, 0xe2, 0xf0, 0xb2, 0x3e, 0xe1, 0xc9,
+ 0x2f, 0x3f, 0xf8, 0xc6, 0x2a, 0x7a, 0xd5, 0x65, 0xb9, 0x18, 0x02, 0x2f,
+ 0xba, 0xe9, 0xdd, 0x57, 0x75, 0x6a, 0x8c, 0xe7, 0xe5, 0xc6, 0x78, 0x47,
+ 0x53, 0x4d, 0x63, 0xda, 0x70, 0xec, 0x82, 0xe3, 0x85, 0x9c, 0xac, 0xcc,
+ 0x6d, 0x3d, 0xf7, 0x00, 0x86, 0x7b, 0x7b, 0xc4, 0xe5, 0xcd, 0xe7, 0x5b,
+ 0xc3, 0xb5, 0x61, 0x3b, 0xba, 0x2d, 0xf8, 0xd6, 0x34, 0xf7, 0x3c, 0xa3,
+ 0xd6, 0x5a, 0x3f, 0xd2, 0xba, 0x69, 0x0f, 0xb7, 0xba, 0x79, 0x43, 0x23,
+ 0x2c, 0xea, 0x22, 0x1e, 0x4d, 0x33, 0xe0, 0xe7, 0x94, 0x6a, 0xb0, 0xfc,
+ 0xec, 0x5a, 0x0f, 0x3f, 0xd4, 0x01, 0xb6, 0x87, 0xed, 0x52, 0x55, 0x63,
+ 0xbf, 0x1c, 0xbb, 0x7d, 0x94, 0x4d, 0x97, 0x8c, 0xc1, 0x5f, 0x11, 0xc7,
+ 0x3b, 0x1d, 0xae, 0xd5, 0xc4, 0x3d, 0xc7, 0x74, 0xf3, 0xc0, 0x5b, 0xcb,
+ 0xfa, 0x88, 0x53, 0x6f, 0x7f, 0xe0, 0x47, 0xa7, 0x4b, 0x05, 0x47, 0x15,
+ 0x54, 0x7e, 0x27, 0x75, 0x4a, 0x1b, 0xec, 0x44, 0xa1, 0x74, 0xa9, 0xa7,
+ 0x4f, 0x43, 0x44, 0x51, 0x4f, 0xab, 0xed, 0x5d, 0x9b, 0x49, 0x22, 0x7f,
+ 0x59, 0x60, 0x73, 0x9d, 0x50, 0x56, 0x89, 0x28, 0x73, 0x36, 0x35, 0x44,
+ 0xca, 0x40, 0x38, 0x0b, 0x83, 0xde, 0xab, 0x96, 0x65, 0x87, 0xb4, 0x86,
+ 0xa3, 0x0e, 0x7a, 0x2e, 0x25, 0x91, 0x49, 0x85, 0xd8, 0xb3, 0x6a, 0x03,
+ 0x54, 0xa4, 0xd0, 0x6c, 0x0f, 0x76, 0x83, 0x99, 0x23, 0x6d, 0x3f, 0x31,
+ 0xcf, 0xbf, 0x2c, 0x9d, 0x84, 0xb2, 0x49, 0x16, 0x73, 0x4e, 0xba, 0x25,
+ 0x5d, 0x09, 0xc6, 0xd6, 0xcc, 0x96, 0xd0, 0x70, 0x9f, 0x2e, 0xab, 0xa4,
+ 0xd9, 0xb6, 0x2b, 0x63, 0xe5, 0x18, 0x3b, 0xf9, 0x4c, 0xb9, 0x5c, 0x71,
+ 0xec, 0xe0, 0x18, 0x11, 0x8d, 0xb5, 0x72, 0x83, 0x3b, 0xc0, 0x2c, 0xb7,
+ 0x07, 0xf0, 0xff, 0x50, 0xa7, 0xa1, 0x1a, 0xb4, 0x40, 0xff, 0xa3, 0x24,
+ 0x1a, 0x67, 0xe8, 0x7d, 0xc7, 0x40, 0x96, 0x03, 0xd6, 0xe8, 0x1f, 0x8d,
+ 0xf4, 0x11, 0xc1, 0x28, 0x00, 0x8a, 0x31, 0x56, 0x31, 0xdb, 0x7b, 0x66,
+ 0x76, 0x9d, 0xea, 0x16, 0x79, 0x86, 0x60, 0x2f, 0xb9, 0x66, 0xfe, 0xca,
+ 0x2d, 0x75, 0x3c, 0x1e, 0x65, 0x7e, 0x36, 0x51, 0xdb, 0x5c, 0x06, 0x7c,
+ 0xfd, 0xbb, 0x83, 0xa3, 0xb3, 0x77, 0xdb, 0x3b, 0xcf, 0xde, 0x7d, 0x77,
+ 0xf8, 0xea, 0xdd, 0xd9, 0xf7, 0x07, 0xa8, 0xdd, 0xdf, 0x53, 0xec, 0x36,
+ 0xc6, 0x6e, 0xe7, 0xdc, 0x34, 0x37, 0x6c, 0x49, 0x1e, 0xe4, 0x93, 0xed,
+ 0x8e, 0x8b, 0x8d, 0xf6, 0xf2, 0x5d, 0x7c, 0xb8, 0xee, 0xa3, 0x1f, 0xe3,
+ 0xc6, 0x75, 0xc7, 0xf9, 0xac, 0x07, 0x66, 0x56, 0x71, 0xf6, 0xe6, 0xf4,
+ 0xd3, 0x98, 0xc7, 0x30, 0x09, 0x81, 0x82, 0xdf, 0x2e, 0x75, 0xe1, 0x49,
+ 0x83, 0x14, 0xb4, 0xcf, 0x30, 0x40, 0x4b, 0x4f, 0xc2, 0x3c, 0xfc, 0x11,
+ 0xce, 0x0a, 0x77, 0x98, 0x5b, 0xce, 0xe1, 0x53, 0x66, 0xa5, 0xba, 0xcb,
+ 0x68, 0xfa, 0x87, 0x3e, 0xe3, 0x61, 0x90, 0xcb, 0x2a, 0x68, 0x4f, 0x34,
+ 0x8e, 0x81, 0x1e, 0xfb, 0xb8, 0x23, 0xa0, 0x21, 0x3e, 0x57, 0x6a, 0x9a,
+ 0xce, 0x5f, 0xcd, 0x48, 0xb7, 0xfd, 0x44, 0xdb, 0xae, 0xc7, 0x7b, 0xb7,
+ 0xad, 0xbf, 0xda, 0xee, 0xda, 0x71, 0x82, 0x3f, 0xa4, 0x27, 0x1e, 0x40,
+ 0xc7, 0xe4, 0x71, 0x3e, 0x95, 0xff, 0x93, 0x47, 0x7f, 0xa8, 0x0d, 0x5d,
+ 0xb6, 0x71, 0x6f, 0xfb, 0x4d, 0x3f, 0xeb, 0x7e, 0xa3, 0x6b, 0xef, 0xd7,
+ 0xc1, 0x6c, 0xdd, 0x1b, 0x76, 0xa9, 0x39, 0x8d, 0x57, 0x1b, 0x48, 0x65,
+ 0xac, 0x98, 0x59, 0x33, 0x78, 0x79, 0xc3, 0xe4, 0x10, 0x7d, 0xa3, 0x5a,
+ 0x80, 0x63, 0x24, 0xa6, 0x62, 0xe9, 0xec, 0xec, 0xf4, 0x38, 0xe6, 0x1a,
+ 0x6c, 0x29, 0x3d, 0x92, 0x96, 0xe3, 0x0c, 0x6e, 0x14, 0xa5, 0x19, 0x45,
+ 0xdd, 0xa3, 0xd7, 0x1d, 0x16, 0x37, 0x75, 0xa9, 0x0b, 0x75, 0xd3, 0xe6,
+ 0x7c, 0x00, 0xed, 0x96, 0x57, 0xbb, 0xad, 0x15, 0xaa, 0x74, 0xea, 0x57,
+ 0x1b, 0x2f, 0xf9, 0x70, 0x72, 0x46, 0x91, 0xb2, 0x99, 0xe6, 0x57, 0x59,
+ 0x59, 0xe4, 0x94, 0xc5, 0x33, 0x34, 0x69, 0x6d, 0xa4, 0x16, 0x79, 0x4d,
+ 0x85, 0xc9, 0x1d, 0xe8, 0x00, 0xa5, 0x39, 0xfe, 0xa6, 0xbd, 0xa8, 0x17,
+ 0xbf, 0x8d, 0xf6, 0xfc, 0x96, 0xf6, 0x27, 0xb9, 0x94, 0x95, 0x51, 0x0e,
+ 0x5a, 0x49, 0x46, 0x26, 0xd5, 0x8c, 0x89, 0x87, 0xea, 0x12, 0x38, 0x41,
+ 0xe5, 0x84, 0x04, 0x54, 0xfd, 0xd3, 0xd4, 0xa2, 0x90, 0x17, 0x0d, 0xce,
+ 0x6a, 0x84, 0x39, 0x54, 0xa8, 0xfc, 0x62, 0x16, 0x95, 0x49, 0xb4, 0x63,
+ 0xf7, 0x59, 0x4e, 0xe0, 0x03, 0x82, 0xdf, 0x80, 0xe9, 0x0e, 0xa3, 0x32,
+ 0x1d, 0x73, 0xb1, 0x79, 0x15, 0x74, 0xca, 0xcd, 0x8b, 0xaa, 0xca, 0x86,
+ 0xa0, 0x5a, 0x5e, 0x88, 0x52, 0x57, 0xa5, 0x8c, 0x05, 0xc3, 0xf9, 0x11,
+ 0xb8, 0x87, 0xa6, 0x9f, 0x21, 0x95, 0x6e, 0x4b, 0xb9, 0x5f, 0x12, 0xc8,
+ 0xec, 0xbb, 0x91, 0xa4, 0x0e, 0x54, 0x2f, 0xaf, 0x32, 0x1c, 0x96, 0xe9,
+ 0x2b, 0x89, 0x66, 0x05, 0x6f, 0xb2, 0xc0, 0x3e, 0x4e, 0xb1, 0x61, 0x2e,
+ 0x30, 0x8a, 0x33, 0x02, 0x90, 0xad, 0xd2, 0xbc, 0xca, 0x7c, 0x9a, 0xbb,
+ 0x12, 0x44, 0x2e, 0x8b, 0x8e, 0x58, 0xa6, 0x08, 0x8a, 0x70, 0x95, 0xca,
+ 0x19, 0x8a, 0x2b, 0xd7, 0xb4, 0xf9, 0x44, 0x78, 0xb1, 0x59, 0x86, 0xbd,
+ 0x67, 0x7c, 0xfc, 0x8d, 0x9c, 0x5a, 0x9f, 0x2b, 0x2f, 0xa1, 0x05, 0x44,
+ 0xc8, 0x42, 0xfc, 0x44, 0xa3, 0xb0, 0x56, 0xf3, 0xd6, 0x1a, 0x56, 0x7c,
+ 0x01, 0x3b, 0xa2, 0xd3, 0xbf, 0x8b, 0x56, 0x63, 0x08, 0x7b, 0x6f, 0xfe,
+ 0xb1, 0x11, 0x32, 0xbc, 0x15, 0x0e, 0x9b, 0x71, 0xb8, 0xfb, 0x0a, 0x50,
+ 0x9f, 0xcd, 0x06, 0xba, 0xcb, 0x80, 0x2f, 0x1d, 0xf8, 0x43, 0xaf, 0xfd,
+ 0x74, 0x18, 0xf1, 0x72, 0x92, 0x7d, 0xa0, 0x86, 0x27, 0x7e, 0x52, 0x11,
+ 0x43, 0x75, 0xb8, 0x01, 0x03, 0x04, 0x74, 0x91, 0x88, 0x13, 0x23, 0x3a,
+ 0x46, 0x35, 0x75, 0x71, 0xa4, 0xd6, 0xd6, 0x49, 0xa3, 0x44, 0x3d, 0xf0,
+ 0x15, 0x16, 0x15, 0xb3, 0x81, 0x83, 0x69, 0x61, 0x30, 0x91, 0xc0, 0x2c,
+ 0x08, 0x26, 0x81, 0xd5, 0x72, 0x12, 0xad, 0xcf, 0x2e, 0x04, 0x0f, 0xb3,
+ 0x1b, 0x01, 0xd3, 0x47, 0xa4, 0xc8, 0x3e, 0x00, 0x83, 0x24, 0xf0, 0x5b,
+ 0x9c, 0x24, 0xad, 0x39, 0x4b, 0xd1, 0xa2, 0x88, 0x4d, 0x74, 0x7a, 0x8d,
+ 0x6f, 0x9c, 0x81, 0xa6, 0x40, 0xb5, 0x58, 0x01, 0xfc, 0x2d, 0x6d, 0xc5,
+ 0x83, 0xbf, 0xa2, 0x9c, 0xce, 0x41, 0x94, 0x0e, 0x2e, 0x06, 0xce, 0xfa,
+ 0xcd, 0x9b, 0x9b, 0x18, 0x19, 0xd9, 0xac, 0x8b, 0x4d, 0x9e, 0x76, 0x80,
+ 0xff, 0xf9, 0x22, 0x08, 0x71, 0xaa, 0xe7, 0x27, 0x09, 0x3d, 0x5c, 0xfd,
+ 0x8a, 0xfa, 0x8a, 0x89, 0x6c, 0x2a, 0x05, 0xda, 0xe3, 0xe1, 0x13, 0x0c,
+ 0xac, 0xce, 0x6f, 0xb7, 0xe0, 0x64, 0x3b, 0x8a, 0xfc, 0xdb, 0x80, 0x93,
+ 0x3f, 0xae, 0xd5, 0xf3, 0xc1, 0xf3, 0xe1, 0xcb, 0x6d, 0x5c, 0x27, 0xb8,
+ 0xcc, 0x6e, 0xb3, 0x83, 0x7e, 0x54, 0x82, 0xd1, 0x8f, 0xb8, 0x19, 0xb6,
+ 0x60, 0x96, 0x9b, 0x1d, 0x38, 0xed, 0x0d, 0x9c, 0x2e, 0x09, 0x6d, 0xb7,
+ 0x86, 0x93, 0x74, 0xf9, 0xec, 0x69, 0xa8, 0x6a, 0xf5, 0x6d, 0x5e, 0xa6,
+ 0xa3, 0xe2, 0x22, 0xcf, 0x7e, 0xa3, 0xfe, 0xe5, 0xe8, 0x79, 0x69, 0xe3,
+ 0xbd, 0x35, 0x70, 0x57, 0x15, 0x04, 0x41, 0xa1, 0x36, 0xc2, 0x13, 0xb6,
+ 0x3e, 0x3c, 0x3a, 0xc8, 0x47, 0x19, 0x65, 0xfd, 0x72, 0x98, 0x4c, 0x88,
+ 0x08, 0x51, 0x98, 0x11, 0x9c, 0x26, 0x1d, 0x1b, 0xc4, 0x39, 0x0f, 0x8d,
+ 0x04, 0x71, 0xea, 0x2a, 0x6d, 0xba, 0x3e, 0xb6, 0x57, 0x82, 0x19, 0xe5,
+ 0x7f, 0x03, 0xdc, 0xd4, 0x46, 0x25, 0x35, 0x23, 0x90, 0x21, 0x2c, 0xde,
+ 0x07, 0x96, 0x69, 0x0d, 0xb9, 0xec, 0xf4, 0x0a, 0xe6, 0x0c, 0xb4, 0x00,
+ 0x4b, 0xe5, 0xc5, 0x6b, 0x96, 0xf6, 0xa2, 0xe2, 0x56, 0x23, 0x0c, 0x12,
+ 0x99, 0xd1, 0xcd, 0x77, 0x47, 0x34, 0x0d, 0x94, 0xd5, 0x8d, 0x91, 0x84,
+ 0x12, 0x16, 0x6d, 0x6b, 0x5e, 0xa4, 0x70, 0x33, 0x78, 0xaf, 0x87, 0x7f,
+ 0xea, 0x9a, 0xe1, 0xfb, 0x7d, 0x28, 0x40, 0xcc, 0x6a, 0xd4, 0xf6, 0xe0,
+ 0x92, 0x35, 0x87, 0x37, 0x59, 0x7a, 0xab, 0xa1, 0x27, 0xe7, 0x8a, 0x50,
+ 0x63, 0x1d, 0x76, 0x44, 0x0f, 0x30, 0x16, 0x55, 0xec, 0x27, 0x64, 0x8b,
+ 0x17, 0x48, 0x10, 0xba, 0x79, 0x67, 0xf1, 0xdd, 0x01, 0x5e, 0x0e, 0x44,
+ 0xba, 0x96, 0x59, 0xd0, 0x11, 0x88, 0xfc, 0xc3, 0x45, 0xd6, 0xf5, 0x12,
+ 0xe6, 0x89, 0x2d, 0x39, 0xeb, 0xe3, 0x64, 0x4c, 0x49, 0x86, 0x4e, 0x14,
+ 0x43, 0xaa, 0xa9, 0x55, 0x90, 0xe7, 0x0e, 0xc1, 0x5d, 0xb2, 0x49, 0xc0,
+ 0x31, 0x44, 0x0a, 0xd9, 0x82, 0x9a, 0x81, 0x28, 0x6c, 0xb2, 0x21, 0x94,
+ 0x3e, 0x72, 0x5e, 0x04, 0x72, 0x31, 0x2c, 0x22, 0x8a, 0xe7, 0x8e, 0x28,
+ 0xf5, 0xd2, 0xc5, 0x69, 0x98, 0x0e, 0x7f, 0xd0, 0x27, 0x40, 0xdb, 0xbd,
+ 0x17, 0xdc, 0xee, 0xa7, 0x45, 0xdb, 0xb5, 0x82, 0x92, 0x98, 0xb7, 0x27,
+ 0x26, 0x8d, 0x22, 0x76, 0x9d, 0xdc, 0x68, 0xef, 0x6a, 0x61, 0x38, 0x48,
+ 0xe5, 0x5e, 0xd4, 0xd8, 0xbb, 0x47, 0xfd, 0x48, 0x72, 0xe6, 0xdb, 0xb8,
+ 0x3b, 0xc2, 0xac, 0x19, 0x22, 0x12, 0x18, 0xc6, 0x46, 0x40, 0x8f, 0x22,
+ 0x78, 0x1f, 0xe4, 0xb3, 0xb8, 0x69, 0xa4, 0x87, 0xfc, 0xd9, 0x1c, 0x47,
+ 0x38, 0x28, 0x2d, 0x89, 0xf5, 0xaa, 0xf1, 0x88, 0xa7, 0x21, 0x19, 0x31,
+ 0x44, 0x35, 0x42, 0xed, 0x21, 0x34, 0x56, 0x4a, 0xfd, 0x50, 0xb9, 0x70,
+ 0x99, 0xb6, 0x26, 0x8a, 0x4f, 0xfb, 0x9e, 0xdb, 0x70, 0x52, 0xcf, 0x63,
+ 0x64, 0x52, 0x7d, 0xdc, 0x16, 0xa1, 0xd9, 0xa0, 0x38, 0x25, 0x9d, 0xcd,
+ 0x51, 0x66, 0x3e, 0x57, 0xb2, 0x46, 0x23, 0x01, 0xe6, 0x7e, 0xb0, 0xc4,
+ 0x02, 0x43, 0x7c, 0x87, 0x1c, 0xa6, 0xed, 0xc1, 0x56, 0xb4, 0xef, 0x68,
+ 0x6a, 0x5f, 0xdf, 0xaa, 0xaa, 0x11, 0x07, 0xc2, 0xd7, 0x14, 0x55, 0xbd,
+ 0x21, 0x09, 0x54, 0x14, 0x90, 0xaa, 0x0b, 0xbb, 0x1d, 0x56, 0x72, 0xf0,
+ 0x48, 0x59, 0xd9, 0x52, 0xc6, 0x8f, 0x50, 0x54, 0xf8, 0x7e, 0x07, 0xeb,
+ 0x4f, 0x05, 0x0b, 0xcc, 0x78, 0x9e, 0x47, 0x29, 0x9c, 0x63, 0x7d, 0x9d,
+ 0xa6, 0xe2, 0x54, 0xd7, 0x76, 0xe4, 0x0e, 0x7f, 0xd4, 0x86, 0x52, 0x1f,
+ 0xfa, 0x61, 0x57, 0x72, 0x9f, 0xf1, 0x64, 0x90, 0xd5, 0xd6, 0x60, 0x9d,
+ 0x08, 0x18, 0x17, 0xca, 0x5c, 0xad, 0x06, 0xf2, 0x58, 0x13, 0xad, 0xbf,
+ 0x7d, 0x5b, 0x38, 0x8e, 0xa1, 0xbc, 0x59, 0x76, 0x46, 0xf1, 0xf1, 0x1a,
+ 0xf0, 0xcb, 0x8a, 0x5b, 0x23, 0x0f, 0x6e, 0xdf, 0xee, 0x8b, 0xc0, 0xd1,
+ 0x3e, 0x91, 0x23, 0x02, 0x87, 0x7e, 0xa0, 0x12, 0x81, 0xbe, 0x4f, 0x71,
+ 0x69, 0x3b, 0xf4, 0x3b, 0x37, 0x4f, 0x33, 0xc3, 0x0e, 0x5e, 0xfb, 0x86,
+ 0x7c, 0x93, 0xcb, 0xdf, 0x9c, 0xc8, 0xad, 0xe6, 0x71, 0xb1, 0xdf, 0xc3,
+ 0x42, 0x81, 0x09, 0x13, 0x36, 0x6a, 0x82, 0x12, 0xcc, 0x9c, 0x67, 0x33,
+ 0xe3, 0x27, 0xd5, 0xa7, 0x93, 0x39, 0xfc, 0x2c, 0x21, 0xec, 0x4c, 0xaf,
+ 0xbf, 0xc9, 0xd8, 0x11, 0x47, 0xce, 0x1a, 0x5b, 0x75, 0x63, 0xf4, 0xf9,
+ 0x26, 0xf9, 0x5d, 0x74, 0x0f, 0x3f, 0x96, 0x21, 0xf2, 0x9b, 0x05, 0x86,
+ 0xf4, 0x58, 0x97, 0x28, 0x97, 0x96, 0x88, 0x49, 0xd6, 0xa5, 0xab, 0x5d,
+ 0x49, 0x9a, 0x7c, 0xee, 0x57, 0x2a, 0x15, 0x9e, 0x2c, 0x2d, 0x82, 0x8d,
+ 0xdf, 0x6d, 0xdf, 0xf7, 0xf6, 0xea, 0x05, 0x47, 0x4b, 0xab, 0x7f, 0x1a,
+ 0x21, 0x23, 0xe4, 0x71, 0x5e, 0xe0, 0x4d, 0x7a, 0xac, 0xeb, 0x0b, 0x0b,
+ 0xca, 0x48, 0xd4, 0xf1, 0x63, 0xf9, 0x98, 0xb8, 0xab, 0xa4, 0xc7, 0xa1,
+ 0xf3, 0x36, 0x5d, 0x2c, 0x25, 0xf7, 0x7b, 0x66, 0xd4, 0xf3, 0xc8, 0xf7,
+ 0xba, 0x25, 0xb2, 0xa8, 0x4f, 0x51, 0x4b, 0x23, 0x49, 0x6f, 0x81, 0xbc,
+ 0xec, 0xf5, 0x33, 0x14, 0x71, 0x67, 0x87, 0xa7, 0x1b, 0xd1, 0x69, 0x2b,
+ 0x9f, 0x8d, 0x90, 0xa4, 0x51, 0x5f, 0x74, 0x75, 0x0d, 0x96, 0x52, 0xec,
+ 0x9f, 0x5a, 0x92, 0xfa, 0x94, 0x09, 0xaf, 0xd4, 0x42, 0x46, 0x1a, 0x31,
+ 0x5c, 0x6b, 0x68, 0x59, 0x22, 0xe5, 0xbf, 0x2d, 0xea, 0x02, 0x61, 0xe2,
+ 0x47, 0x84, 0x3e, 0x28, 0x09, 0x5b, 0x9a, 0x68, 0x65, 0x96, 0x27, 0xd0,
+ 0x4f, 0x1e, 0xad, 0x9b, 0xc6, 0xae, 0x34, 0x1f, 0xb5, 0x26, 0x42, 0xe9,
+ 0xcf, 0x9a, 0x44, 0x03, 0xd4, 0x3c, 0xba, 0x48, 0x73, 0x14, 0xb3, 0xc8,
+ 0xe8, 0x51, 0x52, 0x07, 0x8a, 0x03, 0xe9, 0x6a, 0x51, 0x33, 0x88, 0x3a,
+ 0xd5, 0xea, 0x12, 0x14, 0xd4, 0x76, 0x1d, 0xb2, 0xbc, 0x8c, 0x40, 0x71,
+ 0xe5, 0x26, 0x6a, 0x91, 0x89, 0x47, 0xc6, 0x43, 0x0c, 0x60, 0x64, 0x39,
+ 0xf6, 0xca, 0x26, 0xca, 0xc1, 0x2b, 0x0c, 0x57, 0x71, 0x8e, 0xf5, 0x45,
+ 0xf8, 0x56, 0x55, 0x5d, 0xee, 0x00, 0xa7, 0xde, 0x19, 0x3c, 0x43, 0x7d,
+ 0xec, 0x12, 0xb4, 0xc6, 0x54, 0x80, 0x13, 0x51, 0xd3, 0xf5, 0x10, 0x3d,
+ 0xab, 0x74, 0x3a, 0x69, 0x8f, 0xa7, 0x90, 0x4d, 0x61, 0x5f, 0xff, 0x9d,
+ 0x32, 0xc0, 0x3e, 0x19, 0xe2, 0x20, 0xcf, 0x4e, 0x64, 0x00, 0x7f, 0x8f,
+ 0xaa, 0x55, 0xfa, 0x48, 0xb7, 0xdd, 0x40, 0x7f, 0x43, 0x2a, 0xff, 0xe7,
+ 0x02, 0xcf, 0x65, 0x5f, 0x7c, 0x63, 0x1e, 0x5d, 0x93, 0xe6, 0x86, 0xc4,
+ 0x8d, 0x29, 0x00, 0x69, 0x3e, 0xe6, 0x9a, 0xc8, 0x61, 0x06, 0x27, 0x56,
+ 0xde, 0x18, 0x8f, 0x5a, 0x93, 0x05, 0xbe, 0xa0, 0xfe, 0x29, 0xf4, 0x56,
+ 0xb0, 0x29, 0xd0, 0x20, 0xfa, 0x1b, 0x4d, 0x2a, 0x6f, 0x8b, 0x0b, 0x04,
+ 0xd5, 0xd7, 0x6f, 0x8f, 0x5e, 0x9c, 0xbc, 0x39, 0x6a, 0x36, 0x13, 0xa8,
+ 0x59, 0x64, 0x50, 0x3d, 0x62, 0x7b, 0x75, 0xbf, 0x2e, 0xc8, 0x2f, 0xc3,
+ 0x7d, 0xaa, 0x68, 0xdf, 0xb3, 0x3c, 0x43, 0x2f, 0x68, 0x74, 0xfa, 0xc3,
+ 0x73, 0xb3, 0xba, 0x8c, 0xe4, 0x14, 0xae, 0x4a, 0x07, 0xed, 0xb3, 0xd9,
+ 0xda, 0xce, 0x16, 0xc2, 0xac, 0x44, 0x30, 0xca, 0xcf, 0x0b, 0x92, 0x53,
+ 0x76, 0x7d, 0x54, 0x0c, 0xca, 0x65, 0xba, 0xda, 0xab, 0x08, 0x4c, 0x00,
+ 0x74, 0xd0, 0x62, 0xeb, 0x21, 0x33, 0xa8, 0x77, 0x8f, 0x48, 0xcf, 0xa6,
+ 0x16, 0xbd, 0xe2, 0xf5, 0x1a, 0x63, 0xef, 0x80, 0xb5, 0xd8, 0x4f, 0xec,
+ 0xa4, 0x7d, 0x46, 0x7d, 0x69, 0xc3, 0x9f, 0x5d, 0xcb, 0x57, 0x79, 0x6a,
+ 0x76, 0x29, 0xa3, 0x16, 0xcd, 0x29, 0x6f, 0xe3, 0x90, 0xb8, 0x42, 0x27,
+ 0x0a, 0x45, 0xe5, 0x1d, 0xfc, 0xb4, 0x88, 0x37, 0x4b, 0x9c, 0xb3, 0xb4,
+ 0x5b, 0xc4, 0x9f, 0xcc, 0x46, 0xcb, 0x84, 0xeb, 0xd5, 0x46, 0xf7, 0x97,
+ 0x98, 0x3d, 0x95, 0x0f, 0x5a, 0xfb, 0xf3, 0x5a, 0xd3, 0x88, 0xb4, 0xf6,
+ 0xef, 0x35, 0x9b, 0x05, 0x51, 0x18, 0x52, 0x1b, 0x21, 0x85, 0xc4, 0xb9,
+ 0x4d, 0x77, 0x49, 0x5f, 0xf3, 0x76, 0x66, 0x79, 0x35, 0xba, 0x6e, 0xd2,
+ 0x20, 0x80, 0x02, 0x6e, 0x41, 0x07, 0xa5, 0x7d, 0x72, 0x5d, 0xcc, 0x2b,
+ 0x54, 0x5b, 0xb9, 0x81, 0xd0, 0x04, 0x8c, 0x60, 0x2a, 0x8c, 0x32, 0x1b,
+ 0x8e, 0x4f, 0x61, 0xcc, 0x29, 0xcb, 0xbd, 0xb8, 0x5c, 0x8a, 0x8e, 0x7b,
+ 0x69, 0x73, 0xa1, 0x5b, 0x80, 0x03, 0xc0, 0x75, 0xef, 0xda, 0x1c, 0xc2,
+ 0xc2, 0x04, 0x2e, 0x90, 0x96, 0x59, 0xf5, 0xbe, 0x7d, 0xdc, 0x7f, 0x42,
+ 0xdf, 0x0f, 0x35, 0xcf, 0xbc, 0xce, 0x2a, 0xec, 0x75, 0x91, 0x4d, 0x9a,
+ 0x1d, 0x6b, 0xcb, 0x94, 0x8a, 0xaa, 0x75, 0x95, 0xe4, 0x4c, 0x2b, 0xb8,
+ 0x6b, 0x47, 0xa8, 0x37, 0x1c, 0xef, 0x02, 0xf3, 0x1e, 0x8c, 0x03, 0x94,
+ 0xa9, 0xb5, 0xfe, 0x49, 0x69, 0x1f, 0x86, 0xdb, 0x71, 0xd2, 0xee, 0x52,
+ 0xee, 0x0c, 0xde, 0xed, 0xea, 0x26, 0xaf, 0x91, 0x11, 0xb3, 0xd4, 0x18,
+ 0x15, 0x25, 0xe9, 0x39, 0x48, 0x9a, 0xf6, 0xaa, 0x56, 0xd4, 0x5a, 0xec,
+ 0xcb, 0xc7, 0x5f, 0x06, 0x7b, 0xf7, 0x50, 0xb1, 0x38, 0xe5, 0x7a, 0x13,
+ 0xe3, 0xe0, 0x8f, 0x41, 0x5b, 0xb4, 0xb1, 0x7c, 0x3b, 0x1c, 0x92, 0x00,
+ 0xda, 0xe5, 0x29, 0xe2, 0xc5, 0x7b, 0xbc, 0x9e, 0x84, 0xaa, 0x8c, 0xe1,
+ 0x63, 0xd5, 0xe0, 0x2f, 0xa9, 0x37, 0x88, 0x04, 0x9f, 0x54, 0x87, 0x1f,
+ 0x44, 0x6f, 0x73, 0x42, 0x09, 0xc0, 0x3d, 0x7b, 0x81, 0x80, 0xef, 0xac,
+ 0x17, 0x21, 0x26, 0x20, 0x1c, 0x16, 0x4a, 0xc8, 0x00, 0x6b, 0x62, 0x3e,
+ 0x68, 0x57, 0x86, 0x59, 0xd0, 0x28, 0x1b, 0xf4, 0xc2, 0x68, 0xe6, 0x30,
+ 0x5d, 0x67, 0xe1, 0x77, 0xca, 0xce, 0x5e, 0x64, 0x5e, 0x47, 0x30, 0x94,
+ 0xfa, 0x15, 0x11, 0x2e, 0x5c, 0x5f, 0x1a, 0x1b, 0xf3, 0xc2, 0xd3, 0xe9,
+ 0x94, 0x3b, 0x5a, 0xe0, 0x08, 0x64, 0x60, 0x73, 0x63, 0x13, 0x2a, 0xb0,
+ 0x77, 0x1d, 0x0f, 0x5e, 0xab, 0x6c, 0x6a, 0xd0, 0x02, 0x33, 0x99, 0x0e,
+ 0x6c, 0x82, 0xac, 0xa9, 0xd9, 0x51, 0x08, 0x37, 0x6f, 0x7d, 0x93, 0xb4,
+ 0x37, 0xce, 0x27, 0xc5, 0x9e, 0x76, 0x0c, 0x9f, 0xe8, 0xa5, 0x34, 0xf5,
+ 0x12, 0x94, 0x60, 0x18, 0x8e, 0x61, 0xd6, 0xd0, 0x0b, 0xc3, 0x31, 0x93,
+ 0x6d, 0xc7, 0x8f, 0x1a, 0x8a, 0xaf, 0x52, 0xc9, 0xc1, 0x26, 0xb9, 0x97,
+ 0x10, 0x6f, 0x24, 0x79, 0xa8, 0x27, 0x3e, 0xf1, 0xb7, 0xc8, 0xd9, 0xa9,
+ 0x31, 0xb7, 0x25, 0x50, 0xdc, 0x47, 0xa4, 0xdc, 0x7c, 0xcc, 0x9a, 0xfe,
+ 0x3e, 0x2d, 0x27, 0xfd, 0x40, 0x6a, 0x2a, 0x50, 0xf3, 0xd7, 0x92, 0xa2,
+ 0x34, 0xec, 0x18, 0x0e, 0x37, 0x02, 0x14, 0x16, 0x42, 0x2d, 0x84, 0xb9,
+ 0xf9, 0x6b, 0xd8, 0x3b, 0x54, 0x71, 0xaf, 0x0a, 0x22, 0x40, 0xa0, 0x88,
+ 0x77, 0x17, 0x69, 0x8d, 0xbf, 0x5d, 0xdf, 0xdd, 0xc0, 0x0d, 0x09, 0x0f,
+ 0x37, 0x47, 0xc4, 0x03, 0xea, 0x6b, 0xd1, 0x5c, 0x86, 0xe9, 0x73, 0x11,
+ 0xad, 0x3b, 0xe1, 0xdc, 0xa7, 0x08, 0x7f, 0xe8, 0x6d, 0xeb, 0xe8, 0xf2,
+ 0xa2, 0x9c, 0x47, 0x17, 0xa0, 0xe8, 0xcf, 0x6f, 0xdb, 0x57, 0x7e, 0xd4,
+ 0xdb, 0x55, 0x7e, 0xf7, 0xf8, 0xb9, 0xbb, 0x9b, 0xb2, 0x71, 0xb0, 0x73,
+ 0xe1, 0xe1, 0x88, 0x9b, 0x70, 0x15, 0x84, 0x6c, 0xa8, 0x92, 0xad, 0x19,
+ 0xcd, 0xba, 0x08, 0x64, 0xfb, 0xe9, 0x37, 0xe1, 0xe1, 0x1a, 0x87, 0xc2,
+ 0x23, 0xe8, 0xb0, 0x74, 0x09, 0xc7, 0x30, 0xd4, 0x2c, 0xe1, 0x6b, 0x76,
+ 0x01, 0x0c, 0x4c, 0x27, 0x19, 0x04, 0xb6, 0x63, 0x56, 0x8c, 0xd9, 0x1b,
+ 0x74, 0xeb, 0x6e, 0xe0, 0x93, 0xba, 0x1b, 0x82, 0x30, 0x5f, 0xb9, 0x5f,
+ 0xc6, 0x3e, 0xa5, 0x61, 0xa6, 0xa7, 0xed, 0xf3, 0xc6, 0xb6, 0x1b, 0x83,
+ 0x75, 0x27, 0x1a, 0x9e, 0x5e, 0x76, 0x3f, 0x22, 0x8f, 0x8a, 0x51, 0xed,
+ 0x7c, 0x03, 0x3e, 0xd0, 0x41, 0xb4, 0x24, 0x81, 0x42, 0xdf, 0x86, 0xc0,
+ 0xa2, 0xe4, 0x31, 0xbb, 0xf5, 0xdb, 0xf0, 0x49, 0xef, 0xa4, 0xe1, 0x87,
+ 0x2c, 0xd9, 0x5a, 0xc7, 0xcc, 0x07, 0x14, 0x1e, 0xae, 0x79, 0xc8, 0x06,
+ 0xd0, 0x84, 0x97, 0x81, 0xe7, 0xec, 0x46, 0xcf, 0x86, 0x4e, 0xbe, 0xc0,
+ 0x1d, 0x4e, 0x9a, 0xc6, 0x58, 0x7a, 0xd0, 0xf4, 0x44, 0xe8, 0x9c, 0xa7,
+ 0x18, 0xe3, 0x5a, 0x94, 0xa3, 0xf4, 0x1d, 0xeb, 0x19, 0x49, 0x09, 0x17,
+ 0xee, 0xdd, 0x2d, 0xdb, 0x32, 0x95, 0x26, 0x53, 0x37, 0x33, 0x54, 0xca,
+ 0x2d, 0x3b, 0x1e, 0x51, 0x88, 0x0f, 0x15, 0x2f, 0x6a, 0xba, 0x04, 0x96,
+ 0x03, 0xfd, 0x9e, 0x6b, 0xd5, 0x3b, 0x2e, 0x80, 0x9d, 0x30, 0x32, 0xcd,
+ 0x14, 0xe7, 0x45, 0x96, 0x6b, 0x27, 0x42, 0x11, 0xb8, 0xce, 0x1a, 0xe9,
+ 0xb9, 0xb8, 0x63, 0xb8, 0x90, 0xb3, 0xba, 0x37, 0x7b, 0x8f, 0xb8, 0xdd,
+ 0x46, 0xcd, 0x7a, 0x87, 0xa7, 0xb5, 0x8c, 0x6f, 0xf2, 0xf3, 0x7a, 0xec,
+ 0xfc, 0x55, 0x82, 0xd1, 0x6f, 0xa0, 0x16, 0x1b, 0x1c, 0xd1, 0x57, 0x9f,
+ 0x9a, 0x5a, 0xd4, 0x3b, 0xee, 0x2f, 0x21, 0x67, 0xe6, 0xaf, 0xef, 0xce,
+ 0x2c, 0x9d, 0x9f, 0x0c, 0x33, 0xf4, 0x46, 0x57, 0x03, 0x65, 0xeb, 0xb7,
+ 0x10, 0xe4, 0xca, 0x7c, 0x7d, 0xd4, 0xc5, 0x83, 0x31, 0x64, 0x81, 0xe2,
+ 0x8d, 0x98, 0x3a, 0x4c, 0xfc, 0xdf, 0x80, 0xa5, 0xcf, 0xaf, 0xc7, 0x3d,
+ 0x39, 0x51, 0x0c, 0xce, 0x9b, 0x6d, 0x33, 0x7a, 0x1b, 0xa3, 0x06, 0x0d,
+ 0xab, 0x62, 0xba, 0x40, 0xa7, 0x10, 0x96, 0xa5, 0xf1, 0x41, 0x4d, 0xba,
+ 0xb7, 0x4d, 0x72, 0x81, 0x8d, 0xf6, 0x6e, 0x28, 0xc2, 0x3f, 0xd6, 0x52,
+ 0x70, 0x68, 0x88, 0x76, 0x85, 0xd2, 0x97, 0x9c, 0xad, 0x3c, 0xae, 0xab,
+ 0xe4, 0x7f, 0x56, 0xce, 0xc9, 0x94, 0x01, 0xf2, 0xeb, 0x16, 0x2b, 0x32,
+ 0x6d, 0x4b, 0xac, 0x8c, 0x53, 0x54, 0xe7, 0xe5, 0x9a, 0xe9, 0x07, 0x5b,
+ 0x8e, 0xb3, 0xec, 0x92, 0x76, 0xd3, 0x6f, 0x39, 0xbb, 0x55, 0x15, 0x81,
+ 0x47, 0xdc, 0xfd, 0xe7, 0x1e, 0x70, 0xf6, 0xdb, 0x3c, 0x21, 0xd7, 0xad,
+ 0x8a, 0x2c, 0x59, 0x45, 0xe3, 0x96, 0x2f, 0xdb, 0xe9, 0x99, 0x7b, 0xbf,
+ 0x75, 0x35, 0xcd, 0xfb, 0x8d, 0x1a, 0x3a, 0x25, 0x58, 0xeb, 0xca, 0x3a,
+ 0xc8, 0xfe, 0xa6, 0xf5, 0x9e, 0x2c, 0xaf, 0xef, 0x84, 0xc0, 0xc8, 0xab,
+ 0x81, 0x6e, 0x9f, 0x00, 0x8d, 0x28, 0x0f, 0x5d, 0x8d, 0x09, 0xa3, 0xbb,
+ 0x60, 0xea, 0x33, 0x3a, 0xd7, 0x59, 0xf0, 0xf1, 0x78, 0x3e, 0x5d, 0xee,
+ 0x0d, 0x1e, 0xbf, 0xf7, 0xfc, 0xe8, 0xe5, 0x11, 0x1f, 0x7b, 0xe4, 0xfb,
+ 0x37, 0x26, 0x45, 0xd1, 0xed, 0xe2, 0xf8, 0x11, 0x57, 0x29, 0xae, 0x5d,
+ 0xd7, 0x75, 0x87, 0xfb, 0x06, 0x6a, 0x70, 0x37, 0x48, 0xe1, 0x73, 0x6c,
+ 0x6b, 0x35, 0xa2, 0x2c, 0x12, 0xd3, 0x1a, 0xcb, 0x4f, 0xd7, 0xd7, 0x98,
+ 0x7c, 0x23, 0x79, 0xe0, 0x51, 0x00, 0xb1, 0xe9, 0xb4, 0xc4, 0x8e, 0xdf,
+ 0x74, 0x31, 0xd0, 0xf3, 0x24, 0xed, 0x67, 0x2e, 0x13, 0x6e, 0xc4, 0xc1,
+ 0x10, 0x35, 0x85, 0x3a, 0x6c, 0x27, 0x4d, 0xfc, 0xef, 0xa8, 0x98, 0xb6,
+ 0x29, 0xc2, 0x64, 0x05, 0x00, 0xfb, 0xe8, 0xf2, 0x4e, 0x35, 0xb2, 0x01,
+ 0x1d, 0x8e, 0x83, 0x9d, 0xbc, 0x32, 0xca, 0x6a, 0xa3, 0xb2, 0x57, 0x64,
+ 0x2c, 0xbc, 0x1b, 0x5c, 0xf3, 0x48, 0x54, 0x8b, 0x7f, 0x0b, 0x34, 0x08,
+ 0xd7, 0x43, 0xa6, 0xf4, 0x3b, 0x09, 0x4a, 0xca, 0xbb, 0x69, 0x7e, 0x81,
+ 0x60, 0x56, 0x13, 0xaf, 0xec, 0xb4, 0xa3, 0xf3, 0x9b, 0x7b, 0x00, 0x77,
+ 0x09, 0xd3, 0x3d, 0x34, 0xb8, 0xb1, 0x3b, 0x3f, 0x96, 0xce, 0x65, 0xd5,
+ 0xe5, 0x8a, 0x01, 0xba, 0xf4, 0x62, 0x1c, 0x37, 0xdd, 0xaf, 0x71, 0xd9,
+ 0xe7, 0x91, 0x41, 0x9e, 0xec, 0xd3, 0x7f, 0x82, 0x28, 0x7d, 0x64, 0x0a,
+ 0x93, 0x45, 0xf6, 0xe2, 0xf8, 0xe5, 0xd1, 0x46, 0xf4, 0x46, 0xf2, 0xdb,
+ 0xd0, 0x72, 0xbd, 0xa9, 0x69, 0x47, 0x61, 0x80, 0xf5, 0x6c, 0x00, 0x6a,
+ 0x69, 0x42, 0x69, 0x3c, 0x68, 0x05, 0x8e, 0x8b, 0x91, 0xd7, 0x94, 0x03,
+ 0x43, 0xbc, 0x1b, 0x9a, 0xd2, 0x87, 0x46, 0x10, 0x63, 0x29, 0x0d, 0xb6,
+ 0xfb, 0x62, 0x6f, 0x8b, 0xd7, 0x4d, 0x9d, 0x08, 0x94, 0x94, 0x47, 0x29,
+ 0x40, 0x34, 0x75, 0x7b, 0xcb, 0xde, 0xe0, 0xc4, 0x95, 0x1f, 0x7b, 0xa6,
+ 0x5b, 0x6c, 0x7d, 0x2c, 0xd7, 0xc9, 0x8d, 0x7f, 0xa8, 0x5b, 0xf1, 0xa3,
+ 0x2f, 0xbf, 0x6c, 0x68, 0xd6, 0x2a, 0x4e, 0xd0, 0xb7, 0xf2, 0x78, 0x6b,
+ 0x8b, 0xbe, 0xcd, 0x6b, 0xc9, 0x03, 0xbf, 0x88, 0xbf, 0xa4, 0x17, 0x9b,
+ 0xaf, 0x55, 0x29, 0x50, 0xd0, 0xb8, 0xfb, 0xbd, 0x18, 0x7f, 0x13, 0x98,
+ 0x8e, 0x68, 0xa5, 0xf3, 0xad, 0x2f, 0x71, 0xba, 0xc0, 0x5b, 0xf4, 0x30,
+ 0x6f, 0x63, 0x31, 0x99, 0x20, 0xa5, 0xe1, 0x93, 0xda, 0x32, 0xf4, 0x3a,
+ 0x29, 0xc7, 0xfe, 0xe7, 0x6e, 0xf5, 0xe3, 0xed, 0xae, 0xcf, 0x25, 0x6e,
+ 0x47, 0xe5, 0x8e, 0x78, 0x9e, 0x78, 0xd5, 0xd7, 0xff, 0xb4, 0xc1, 0xf8,
+ 0x5a, 0xed, 0x81, 0xb6, 0x61, 0x45, 0xdb, 0x5f, 0x7e, 0xd9, 0xc7, 0x95,
+ 0x3d, 0xfe, 0xf2, 0xcb, 0xce, 0x86, 0x47, 0xce, 0x34, 0xd7, 0x85, 0xf5,
+ 0xff, 0xe3, 0xeb, 0x96, 0x68, 0x2a, 0x98, 0x26, 0x0a, 0xcf, 0x83, 0xbf,
+ 0xf9, 0x2a, 0x7a, 0x7d, 0x72, 0x7e, 0xe4, 0xf8, 0xdc, 0xa5, 0x31, 0xa5,
+ 0x53, 0x17, 0x4e, 0xe9, 0x6d, 0x73, 0x2c, 0x39, 0x62, 0x7f, 0x1e, 0x87,
+ 0x72, 0x12, 0xaf, 0x4a, 0x50, 0xe3, 0x4d, 0x4e, 0xaf, 0x3a, 0xd6, 0x74,
+ 0x28, 0xeb, 0x2e, 0xc6, 0x32, 0x25, 0x4e, 0xad, 0xf8, 0x8f, 0xe8, 0x34,
+ 0x29, 0x2b, 0x29, 0xb1, 0xe6, 0xec, 0x52, 0xf4, 0x70, 0x05, 0xbb, 0xac,
+ 0x16, 0xe5, 0xcc, 0x84, 0x14, 0x4c, 0x40, 0x4b, 0xfc, 0x1a, 0xf2, 0xef,
+ 0x6c, 0x98, 0x4d, 0xb3, 0xfa, 0xc6, 0xf8, 0x8d, 0x40, 0x0f, 0x0c, 0x98,
+ 0x5d, 0x27, 0x12, 0x68, 0xbe, 0xc8, 0x6a, 0xb7, 0x9d, 0xed, 0x3a, 0xd0,
+ 0xda, 0x06, 0xa7, 0xa9, 0x52, 0x45, 0x98, 0x24, 0x8c, 0xac, 0x55, 0x20,
+ 0x05, 0x6b, 0xae, 0xc0, 0x5f, 0x43, 0xa7, 0xe0, 0x9a, 0xe7, 0xc5, 0x4a,
+ 0xa7, 0x0c, 0x17, 0x66, 0x1f, 0x8f, 0xe9, 0x41, 0xb9, 0xab, 0xe4, 0x27,
+ 0xfb, 0x40, 0x81, 0x74, 0xb8, 0x28, 0x45, 0x1e, 0xf3, 0xd4, 0xdd, 0x29,
+ 0x23, 0xd4, 0xff, 0x95, 0x92, 0x7f, 0x15, 0x98, 0x13, 0xc7, 0x71, 0x2b,
+ 0xf4, 0xd7, 0x9a, 0x5b, 0xb0, 0xc8, 0x6d, 0xdc, 0xbd, 0x35, 0xdc, 0x38,
+ 0x9d, 0x6b, 0x11, 0x7b, 0xde, 0x1c, 0x00, 0xae, 0xd0, 0x24, 0xbb, 0x58,
+ 0x94, 0xe1, 0x92, 0xe6, 0x57, 0xe8, 0x39, 0x35, 0x1c, 0x43, 0xdd, 0x6a,
+ 0x8a, 0xf6, 0x78, 0x99, 0x5c, 0xa5, 0x7c, 0x12, 0xda, 0x61, 0x42, 0xf2,
+ 0xbb, 0x29, 0xfa, 0x83, 0x24, 0xd4, 0x76, 0x31, 0x6b, 0xa6, 0xb6, 0xc4,
+ 0x9d, 0x90, 0x94, 0x50, 0x93, 0x4b, 0xf4, 0xdb, 0xd8, 0xe9, 0xaa, 0xf1,
+ 0x74, 0xfc, 0x9d, 0x68, 0x65, 0xf0, 0x6a, 0xe1, 0x69, 0x60, 0xc8, 0xee,
+ 0x90, 0xbd, 0xf9, 0xed, 0xce, 0x90, 0xaf, 0x71, 0xf6, 0x9d, 0xb8, 0xb5,
+ 0xe4, 0x10, 0xf0, 0x9d, 0xeb, 0x7c, 0x5a, 0x24, 0xe8, 0xac, 0xe3, 0x54,
+ 0x03, 0xcd, 0x59, 0x14, 0xc3, 0x8e, 0xba, 0x2d, 0xb7, 0x86, 0x6b, 0x9c,
+ 0x26, 0x9f, 0x63, 0xb4, 0xee, 0xf4, 0xe4, 0xa3, 0x7b, 0x20, 0x9e, 0x4a,
+ 0x1e, 0x86, 0x19, 0x21, 0xce, 0x11, 0x68, 0x08, 0x87, 0xdd, 0xe0, 0x06,
+ 0xb4, 0x46, 0x94, 0xdc, 0x7c, 0x34, 0x26, 0x91, 0x3a, 0xfd, 0x50, 0xc3,
+ 0x3f, 0xd3, 0xb1, 0xeb, 0x41, 0x8d, 0xce, 0x8e, 0xff, 0xeb, 0x28, 0x9c,
+ 0xc8, 0xe2, 0x48, 0x93, 0xcf, 0x90, 0xc8, 0xc2, 0x13, 0xef, 0xec, 0xc4,
+ 0x8f, 0x1e, 0xad, 0x26, 0x18, 0x0f, 0xa9, 0x8a, 0x4d, 0xdc, 0xe6, 0x71,
+ 0x22, 0x65, 0xca, 0x09, 0xfe, 0x34, 0x99, 0xe3, 0x7e, 0x34, 0xf5, 0x30,
+ 0x0c, 0x36, 0xcd, 0x60, 0xd3, 0x35, 0xfe, 0x8e, 0x3f, 0xe9, 0x2a, 0x6c,
+ 0xc0, 0x6f, 0x85, 0x67, 0xb3, 0xd9, 0x62, 0x66, 0xc3, 0x14, 0x13, 0x7a,
+ 0x33, 0x1f, 0xdd, 0x30, 0xf5, 0x51, 0xa7, 0x51, 0x2d, 0x12, 0x60, 0xfd,
+ 0xc9, 0x4b, 0xf7, 0xc8, 0x1d, 0x69, 0x66, 0x9b, 0x54, 0x23, 0x21, 0x50,
+ 0xe4, 0x81, 0x2d, 0xda, 0x45, 0x0e, 0x57, 0x78, 0xbd, 0x2a, 0x66, 0x29,
+ 0xeb, 0xb2, 0xc4, 0x6b, 0xc6, 0xc1, 0x80, 0x26, 0x65, 0x03, 0xe3, 0xc2,
+ 0xe1, 0xec, 0x03, 0x2d, 0x75, 0x85, 0xf6, 0x65, 0x02, 0x6a, 0xc3, 0x82,
+ 0x39, 0xe8, 0x3a, 0xb3, 0x97, 0x48, 0x19, 0x4d, 0xc8, 0x69, 0x5a, 0x69,
+ 0x96, 0x7e, 0x30, 0x39, 0x9d, 0xd9, 0x87, 0x12, 0xc3, 0xdb, 0x37, 0x2f,
+ 0x39, 0x83, 0x26, 0x69, 0xc4, 0x6f, 0xe0, 0xb0, 0x48, 0xb2, 0x51, 0xd8,
+ 0x81, 0xb2, 0x19, 0xf2, 0x90, 0xed, 0x45, 0x9b, 0x86, 0x9a, 0x2e, 0x7e,
+ 0x83, 0x36, 0xeb, 0xb9, 0x4e, 0xd0, 0x8b, 0xb6, 0x80, 0x73, 0x9c, 0xfa,
+ 0x6b, 0xa6, 0xac, 0x02, 0xfc, 0x1e, 0xd2, 0x06, 0x3d, 0x55, 0x31, 0x23,
+ 0xd5, 0xd2, 0x85, 0x1c, 0xc6, 0x9d, 0x83, 0xc1, 0x07, 0x8d, 0x24, 0xd0,
+ 0x26, 0x44, 0x23, 0x63, 0x29, 0xc5, 0xff, 0x15, 0x48, 0xf6, 0x49, 0x30,
+ 0xa4, 0x9c, 0x4e, 0x3b, 0xf3, 0xe7, 0xcf, 0x1d, 0x6c, 0x63, 0x22, 0x29,
+ 0xf7, 0xc2, 0xc0, 0x24, 0xbd, 0xd7, 0x9b, 0x6f, 0x7b, 0x52, 0x8d, 0xf1,
+ 0x5a, 0x5c, 0x7b, 0xea, 0xaf, 0x02, 0x52, 0x88, 0xbd, 0x98, 0x72, 0xc9,
+ 0x2c, 0xe6, 0x2d, 0xbb, 0xb8, 0x0c, 0x3d, 0x60, 0xed, 0x82, 0xfa, 0xd4,
+ 0xf1, 0xdf, 0x1c, 0xaa, 0x5c, 0xab, 0xd6, 0x80, 0x50, 0x48, 0x63, 0xd9,
+ 0xe8, 0x47, 0x6b, 0xb3, 0xb6, 0xfc, 0x58, 0x07, 0xb1, 0x06, 0x56, 0x3f,
+ 0xfe, 0xee, 0x12, 0x9e, 0x04, 0xf2, 0x28, 0x37, 0x58, 0xda, 0x8c, 0xd7,
+ 0xa2, 0xcd, 0xf5, 0x71, 0xc2, 0x09, 0x93, 0xa4, 0x66, 0xed, 0xc0, 0x6d,
+ 0xc3, 0x24, 0x00, 0x1a, 0x7e, 0x83, 0x6c, 0x0e, 0x8f, 0x35, 0x6a, 0x18,
+ 0x8b, 0x5d, 0xee, 0xf8, 0x60, 0x5f, 0x9a, 0x6e, 0xf6, 0xf0, 0x33, 0x9d,
+ 0x6f, 0xa7, 0x04, 0xa9, 0x16, 0xad, 0x7b, 0x31, 0x1a, 0x64, 0x66, 0x48,
+ 0xf5, 0x38, 0x6f, 0x88, 0xd2, 0x34, 0x8b, 0xa4, 0x2e, 0xa6, 0xa4, 0xfa,
+ 0xf3, 0x15, 0xdb, 0xde, 0xb2, 0x50, 0xcb, 0xf8, 0x76, 0xc4, 0x1f, 0xd9,
+ 0xe7, 0xe2, 0x7b, 0x42, 0x76, 0x09, 0x65, 0x8f, 0xd5, 0x89, 0xe1, 0xc7,
+ 0x44, 0x50, 0xe6, 0xd8, 0x98, 0xd0, 0x9e, 0x88, 0xe6, 0x57, 0xb1, 0x00,
+ 0x4a, 0xa7, 0xc9, 0x9c, 0xac, 0xca, 0x0c, 0xd3, 0xc5, 0x42, 0xa9, 0x09,
+ 0xe9, 0x55, 0x86, 0x5d, 0x13, 0x0d, 0x5d, 0x22, 0x08, 0xa5, 0x10, 0x66,
+ 0x38, 0xff, 0x78, 0xb2, 0xc8, 0x39, 0xb5, 0x80, 0x54, 0x9f, 0x59, 0x36,
+ 0x9d, 0x66, 0xa2, 0x6c, 0x82, 0xbc, 0x45, 0xef, 0x0c, 0x99, 0x7a, 0x9c,
+ 0x48, 0xec, 0xdc, 0x8c, 0x49, 0xf0, 0xde, 0x23, 0xd7, 0x11, 0xa0, 0xe6,
+ 0x9a, 0x5b, 0xb3, 0xd2, 0x15, 0x03, 0xad, 0x6c, 0x8b, 0x36, 0x85, 0x47,
+ 0xe6, 0x4c, 0x39, 0x11, 0x7c, 0x25, 0x88, 0x72, 0xf8, 0x58, 0x7f, 0x38,
+ 0x74, 0x60, 0x8d, 0x42, 0xcb, 0xa6, 0xc4, 0x2a, 0x2c, 0x82, 0xa1, 0x1a,
+ 0x25, 0xd3, 0xba, 0xb6, 0x1f, 0xa9, 0x48, 0x36, 0xb9, 0x93, 0x31, 0x3d,
+ 0xd5, 0x37, 0x91, 0xc3, 0x20, 0xda, 0x35, 0x3d, 0x03, 0x44, 0x34, 0x05,
+ 0x83, 0x6e, 0x5a, 0x5c, 0x70, 0x53, 0x36, 0x32, 0xeb, 0x90, 0x24, 0x39,
+ 0xf1, 0x97, 0x73, 0x86, 0xd0, 0x2f, 0xfa, 0x79, 0xbb, 0xd8, 0x8b, 0xa9,
+ 0x58, 0xaf, 0x2e, 0x01, 0xef, 0x87, 0xa9, 0x43, 0x53, 0xed, 0x6c, 0x06,
+ 0xbb, 0x16, 0x47, 0x83, 0xc1, 0x60, 0xd9, 0x6b, 0xbb, 0x9b, 0x97, 0xf7,
+ 0x79, 0x6d, 0xfb, 0xd1, 0xe6, 0xac, 0xf3, 0xbd, 0x6e, 0xeb, 0x93, 0x3a,
+ 0x1d, 0xf3, 0x08, 0x9c, 0xb0, 0x47, 0xc7, 0x1a, 0xd3, 0xb1, 0x36, 0x2a,
+ 0x0a, 0xd1, 0x1d, 0xd1, 0x94, 0xb8, 0xd7, 0x06, 0xeb, 0xf7, 0x07, 0x6e,
+ 0x9f, 0x26, 0xb9, 0x9c, 0xa6, 0xfb, 0x2b, 0x3a, 0x57, 0x29, 0x3a, 0x0a,
+ 0x2a, 0x10, 0xa7, 0xca, 0x51, 0xbe, 0x34, 0xa9, 0x98, 0x18, 0x62, 0xcf,
+ 0x7d, 0xad, 0x07, 0x53, 0x8d, 0xd1, 0xc1, 0xa1, 0xd7, 0x90, 0xa0, 0xaf,
+ 0x08, 0xee, 0x9b, 0x13, 0x2e, 0x98, 0xf6, 0x39, 0xdb, 0x8f, 0x22, 0xa6,
+ 0x98, 0x7a, 0xc2, 0xbd, 0xe4, 0x17, 0xde, 0x70, 0xc9, 0x14, 0xe6, 0xc6,
+ 0x45, 0xc1, 0x5a, 0x97, 0x26, 0x58, 0xe2, 0xb7, 0xdc, 0x21, 0xb7, 0xd2,
+ 0x41, 0x07, 0xc9, 0xda, 0x0c, 0xa9, 0x9d, 0x6d, 0x16, 0x9a, 0xf2, 0x56,
+ 0x4d, 0xe9, 0x7a, 0xd5, 0xa2, 0xff, 0x32, 0xd6, 0x0d, 0x72, 0x8e, 0x26,
+ 0x65, 0x5f, 0x15, 0x26, 0xc7, 0x96, 0xd1, 0x3e, 0x48, 0xf4, 0x0e, 0x8c,
+ 0xff, 0x33, 0xd2, 0x29, 0x91, 0xea, 0x7b, 0x6f, 0xf0, 0x69, 0x7c, 0xfc,
+ 0x34, 0xb9, 0x48, 0x81, 0xf3, 0xe7, 0x0c, 0x50, 0xd6, 0x6a, 0xc3, 0xa2,
+ 0x71, 0xe9, 0x20, 0xf8, 0x04, 0x5a, 0xfb, 0xb4, 0x2c, 0x4a, 0x2b, 0x71,
+ 0xaa, 0x7a, 0x1a, 0xc8, 0xfc, 0x93, 0x69, 0x22, 0x87, 0xbf, 0x28, 0xb1,
+ 0xd0, 0xe2, 0x07, 0x1f, 0xd3, 0x92, 0x58, 0x08, 0x6f, 0xe4, 0x4b, 0x7c,
+ 0xd3, 0x84, 0x58, 0x2c, 0x8c, 0x04, 0xeb, 0x7f, 0x51, 0xd4, 0xfb, 0x0b,
+ 0xe6, 0xa3, 0xf5, 0x9c, 0xd0, 0x14, 0x7c, 0xbc, 0x27, 0xf5, 0x75, 0x2b,
+ 0x38, 0x65, 0x1f, 0x1f, 0xb5, 0x69, 0x19, 0xcd, 0x7c, 0x36, 0xca, 0x6f,
+ 0xa4, 0x84, 0x50, 0x11, 0x07, 0xf0, 0x46, 0xc8, 0x3c, 0xc1, 0x76, 0xd2,
+ 0x05, 0x27, 0xde, 0x25, 0xd1, 0x4b, 0x59, 0xdf, 0x9e, 0xa4, 0x40, 0xb2,
+ 0xe7, 0xcb, 0x2c, 0x4d, 0x0a, 0x08, 0x3a, 0x82, 0xcb, 0xcc, 0x2f, 0xa7,
+ 0x60, 0x18, 0xf4, 0x4d, 0x2e, 0x08, 0x7e, 0xa7, 0x58, 0x4f, 0xb8, 0x20,
+ 0x52, 0x31, 0x38, 0xf9, 0xa8, 0x71, 0xb4, 0x61, 0x65, 0x3f, 0xed, 0xbb,
+ 0x9f, 0xfc, 0x20, 0x25, 0xe3, 0xab, 0xf2, 0x3e, 0x99, 0xbb, 0xa7, 0xb4,
+ 0x3c, 0x81, 0xdd, 0xd6, 0xe4, 0xf5, 0xde, 0x0a, 0x98, 0x62, 0x4b, 0x07,
+ 0x92, 0xed, 0x8d, 0x5f, 0xde, 0x67, 0xc0, 0xe5, 0x2f, 0x77, 0xde, 0xb7,
+ 0x03, 0xdc, 0x7d, 0x0c, 0x4b, 0xc6, 0xc9, 0x05, 0x25, 0x4e, 0x21, 0xc3,
+ 0x74, 0xa8, 0xdb, 0xb9, 0x83, 0xff, 0xc9, 0x07, 0x85, 0x69, 0x6b, 0xf2,
+ 0x4b, 0x02, 0xc4, 0x0a, 0x5f, 0x44, 0x57, 0x14, 0xd6, 0x84, 0x6d, 0x48,
+ 0xf7, 0xe6, 0xc4, 0x19, 0x43, 0x82, 0x71, 0x7a, 0x23, 0xa5, 0xdb, 0x66,
+ 0x30, 0x0b, 0x2e, 0xb6, 0xb2, 0xf2, 0x90, 0x5b, 0x2f, 0xc4, 0xc0, 0xb6,
+ 0xc0, 0x04, 0xe0, 0xe6, 0xec, 0x91, 0x69, 0x36, 0x60, 0x6d, 0x68, 0xb4,
+ 0x49, 0x83, 0x18, 0x49, 0x23, 0x83, 0x05, 0x68, 0xdf, 0x32, 0x8d, 0x3d,
+ 0xe1, 0x72, 0x18, 0x05, 0x47, 0xa6, 0x36, 0xc4, 0x36, 0x09, 0x67, 0xae,
+ 0xb8, 0x18, 0x89, 0xdc, 0x52, 0x4f, 0x33, 0x28, 0xf1, 0x9a, 0xc0, 0xad,
+ 0xc6, 0x04, 0xf9, 0x89, 0xa6, 0xc6, 0x98, 0x50, 0x4b, 0x14, 0xd8, 0xbb,
+ 0x65, 0x2a, 0x7c, 0xa4, 0xee, 0xe0, 0x2a, 0xb9, 0xb2, 0x05, 0x3d, 0x1a,
+ 0x06, 0x73, 0x72, 0xd7, 0x40, 0xd4, 0xc8, 0x2f, 0xcd, 0x0f, 0xbb, 0xca,
+ 0x14, 0x94, 0xb7, 0x73, 0xba, 0x73, 0x0c, 0xcf, 0x87, 0x2e, 0xa0, 0x0b,
+ 0x8d, 0x68, 0x3c, 0x6d, 0x89, 0x0d, 0x5c, 0x8a, 0x6d, 0x25, 0x20, 0x92,
+ 0xa4, 0x6d, 0x71, 0x6a, 0x78, 0xe0, 0x0b, 0xb5, 0x67, 0x3c, 0x15, 0xb6,
+ 0x99, 0x5e, 0xee, 0x6e, 0x34, 0xcc, 0xf9, 0x12, 0x8e, 0xd8, 0x20, 0xcf,
+ 0xc0, 0xfa, 0xb0, 0xeb, 0x32, 0xe4, 0x52, 0xc8, 0xc5, 0xdf, 0x41, 0xcd,
+ 0x94, 0xb1, 0x92, 0x10, 0x4e, 0x7e, 0x04, 0xbb, 0x02, 0xdc, 0x3b, 0x46,
+ 0xfd, 0x7f, 0x8a, 0xc9, 0x35, 0xd6, 0xf8, 0xcd, 0x6a, 0x5b, 0x86, 0x14,
+ 0x42, 0xe1, 0x19, 0x81, 0xca, 0x46, 0x06, 0xc1, 0xbc, 0xa1, 0xeb, 0xca,
+ 0xe7, 0x1b, 0x2d, 0xce, 0x64, 0xd8, 0x29, 0x19, 0x05, 0x3f, 0x96, 0x0a,
+ 0xf4, 0xeb, 0x2e, 0x9b, 0x2e, 0x74, 0xca, 0x25, 0x23, 0xc3, 0xc0, 0x33,
+ 0x8e, 0xa7, 0x88, 0x0b, 0xb2, 0xa2, 0x3f, 0xc6, 0x15, 0x1b, 0xf3, 0xb0,
+ 0x86, 0xf5, 0x9b, 0xb4, 0xde, 0x70, 0x8a, 0xba, 0x88, 0x40, 0xbf, 0xe8,
+ 0x08, 0x2c, 0x8b, 0x57, 0xca, 0x2e, 0x03, 0xc3, 0x15, 0x4e, 0x56, 0x35,
+ 0x9f, 0x19, 0xa8, 0x4b, 0x54, 0xdd, 0x0e, 0xba, 0x26, 0x7c, 0x5b, 0xdd,
+ 0x3d, 0x5c, 0xd5, 0x61, 0x3b, 0x88, 0x2b, 0xcc, 0x69, 0xa7, 0x3a, 0x73,
+ 0x3a, 0xe6, 0xf6, 0xf4, 0xb2, 0xf5, 0xc4, 0x67, 0xe8, 0x18, 0x43, 0xed,
+ 0x4b, 0x85, 0x1b, 0x7c, 0x83, 0x21, 0x0d, 0xf5, 0x51, 0x35, 0x06, 0xf8,
+ 0x53, 0x8f, 0x07, 0x88, 0xd6, 0xf5, 0x27, 0xd2, 0xf9, 0x18, 0x16, 0x3e,
+ 0xcd, 0x46, 0x9e, 0x16, 0x63, 0x9c, 0x9c, 0x14, 0xa7, 0xf7, 0x4b, 0x57,
+ 0x7f, 0x38, 0x78, 0xf3, 0xfa, 0xf8, 0xf5, 0x77, 0x7b, 0x20, 0x04, 0xd2,
+ 0x72, 0x04, 0x06, 0x4f, 0xf4, 0xeb, 0x62, 0x0c, 0xe3, 0xa0, 0xac, 0x14,
+ 0x0d, 0xdc, 0xed, 0xe8, 0x8a, 0xa6, 0x85, 0x64, 0x9f, 0xa1, 0x1b, 0xad,
+ 0x68, 0x8b, 0x7a, 0xc1, 0x7d, 0x40, 0xac, 0x31, 0x2c, 0x35, 0xbb, 0x58,
+ 0xd8, 0x3c, 0x45, 0xd4, 0x10, 0xa6, 0x54, 0x19, 0x0f, 0x14, 0x4b, 0xd9,
+ 0xed, 0xba, 0x4d, 0x98, 0x94, 0x16, 0x3d, 0x7f, 0xf9, 0x32, 0xf2, 0x2a,
+ 0x61, 0x19, 0x73, 0x80, 0xe3, 0x91, 0x54, 0xd1, 0xa8, 0x95, 0xff, 0xe8,
+ 0xcc, 0x43, 0x39, 0xdb, 0x10, 0xf6, 0x40, 0xdb, 0x8a, 0x3b, 0x41, 0xb5,
+ 0xd1, 0x01, 0x92, 0xcc, 0x08, 0x6d, 0xa6, 0xac, 0x41, 0x33, 0x28, 0x26,
+ 0xf5, 0x75, 0x12, 0x00, 0xe2, 0x77, 0xd4, 0xc8, 0x0e, 0x9e, 0x1f, 0xd2,
+ 0x2c, 0x3f, 0x0a, 0x58, 0xd0, 0x9f, 0x62, 0x45, 0x4d, 0xf3, 0xe4, 0x3f,
+ 0x43, 0x72, 0x6f, 0x93, 0x78, 0x76, 0xa7, 0xf0, 0x6b, 0x4b, 0xa3, 0x86,
+ 0x2d, 0x60, 0x7f, 0x8c, 0xc0, 0x82, 0x4b, 0x7b, 0xe0, 0x5c, 0x72, 0x70,
+ 0xc8, 0x2d, 0x82, 0x92, 0x1c, 0x7d, 0xc2, 0x7a, 0x00, 0x93, 0x81, 0x3d,
+ 0x52, 0xe4, 0x89, 0x0a, 0x65, 0x53, 0x8f, 0xd3, 0x44, 0xbb, 0x0a, 0xa3,
+ 0xb3, 0x63, 0x12, 0x10, 0x94, 0xd7, 0x69, 0x29, 0x11, 0x46, 0xd3, 0x22,
+ 0x07, 0x34, 0xac, 0x41, 0x74, 0x56, 0x84, 0x6b, 0x50, 0xb9, 0xb1, 0x13,
+ 0x6a, 0x86, 0x63, 0x55, 0xf0, 0x99, 0x2b, 0xe3, 0xeb, 0xd4, 0xf0, 0x49,
+ 0x2b, 0xf2, 0x59, 0x87, 0x94, 0xc4, 0x70, 0x9c, 0xd4, 0x0b, 0xa5, 0xb9,
+ 0x1b, 0x21, 0x28, 0x92, 0x43, 0xac, 0x4d, 0x13, 0xfb, 0x88, 0xe6, 0xa3,
+ 0xcc, 0x58, 0xbc, 0x2f, 0xbd, 0x18, 0x76, 0xb6, 0x87, 0xf4, 0x27, 0x27,
+ 0xdb, 0x39, 0xdc, 0x72, 0xfb, 0xa5, 0xb9, 0xff, 0x0f, 0x5c, 0x38, 0xd3,
+ 0x1a, 0x7d, 0x65, 0xb3, 0xa6, 0xb5, 0xb8, 0x40, 0xe4, 0x1d, 0x08, 0x6f,
+ 0xbb, 0xe3, 0xe7, 0x3b, 0xf7, 0xa2, 0xc8, 0xf6, 0xaf, 0xda, 0x7c, 0xa7,
+ 0xcc, 0x08, 0x2b, 0x86, 0x2b, 0x97, 0x08, 0xd6, 0x99, 0xa3, 0x99, 0x4e,
+ 0x82, 0x11, 0x65, 0xfa, 0x3a, 0xc5, 0x07, 0xf4, 0xab, 0xeb, 0x14, 0xe3,
+ 0x0d, 0xed, 0xbd, 0x5b, 0xa7, 0x38, 0x91, 0xd1, 0x56, 0xa8, 0x09, 0x96,
+ 0x04, 0x79, 0xdc, 0x97, 0x1b, 0x25, 0xac, 0xda, 0x8c, 0x17, 0x76, 0xa9,
+ 0xf6, 0x80, 0x9f, 0x27, 0x83, 0x8d, 0xd5, 0xd5, 0x1a, 0x3f, 0xbb, 0x47,
+ 0x41, 0x76, 0x90, 0xbc, 0x03, 0x85, 0xb8, 0x9c, 0xc5, 0xa2, 0x43, 0xb9,
+ 0x50, 0x7e, 0x8e, 0x5e, 0x41, 0xa6, 0x12, 0xb7, 0x1a, 0x13, 0x03, 0x8c,
+ 0x2e, 0x70, 0x60, 0xb8, 0xce, 0x75, 0xa8, 0x3a, 0x97, 0xe5, 0x57, 0x05,
+ 0xfd, 0x86, 0xdd, 0xc2, 0x0e, 0x0c, 0x4e, 0x08, 0x31, 0x08, 0x2f, 0x05,
+ 0xd7, 0x92, 0x2d, 0xd1, 0xb8, 0x38, 0x4f, 0x87, 0xf7, 0xd8, 0xd1, 0x2d,
+ 0x22, 0x17, 0x9e, 0x08, 0xbe, 0x50, 0xf2, 0x9a, 0x0d, 0xbe, 0x74, 0x57,
+ 0x85, 0x92, 0xe1, 0x3c, 0x7d, 0x14, 0xac, 0x97, 0x04, 0x26, 0x30, 0xc5,
+ 0xe0, 0xa4, 0x85, 0x9a, 0x6e, 0x29, 0x65, 0x24, 0x97, 0x89, 0xbd, 0xa1,
+ 0xfa, 0xdb, 0xb6, 0x15, 0x81, 0xcc, 0x40, 0xeb, 0x1a, 0xb0, 0x69, 0x66,
+ 0x5b, 0xc8, 0x35, 0xe3, 0xa4, 0x98, 0x85, 0x36, 0xe4, 0xcc, 0xed, 0xd1,
+ 0x65, 0x51, 0x54, 0x69, 0x57, 0x32, 0x11, 0x7d, 0x19, 0xd9, 0x30, 0xd4,
+ 0xf0, 0xae, 0x4b, 0xdc, 0x08, 0x8c, 0xa6, 0x93, 0x4b, 0x83, 0xc8, 0x10,
+ 0xc9, 0xb8, 0xbd, 0xba, 0xb1, 0xd8, 0x03, 0x6c, 0x3b, 0x5b, 0x16, 0x3d,
+ 0x68, 0x2b, 0xb2, 0xbc, 0x2a, 0x4f, 0x8d, 0x0d, 0x35, 0x49, 0xe3, 0xdf,
+ 0xb5, 0xf4, 0x56, 0x4f, 0x33, 0xc5, 0x3d, 0x09, 0x2b, 0x74, 0xac, 0xcf,
+ 0x21, 0x8f, 0x35, 0x9e, 0xa2, 0x31, 0x05, 0xcd, 0xf2, 0x66, 0xde, 0x2a,
+ 0x91, 0x76, 0x56, 0x13, 0x67, 0xfb, 0xe3, 0xce, 0x56, 0x97, 0x2a, 0x80,
+ 0x03, 0x29, 0x78, 0xfa, 0x3c, 0x91, 0x2c, 0x3f, 0x55, 0x24, 0xa4, 0xaf,
+ 0x1c, 0xea, 0x17, 0x8b, 0xb9, 0x04, 0x9b, 0xa9, 0x8a, 0xbc, 0x63, 0xeb,
+ 0x83, 0x35, 0x0e, 0xa4, 0x1f, 0xb2, 0x35, 0xe6, 0x20, 0x48, 0x63, 0x82,
+ 0x7e, 0x7e, 0x23, 0xdc, 0x57, 0x8a, 0xec, 0xad, 0xf7, 0x9c, 0x24, 0x1b,
+ 0x50, 0x83, 0x87, 0x46, 0x1f, 0xe8, 0x2b, 0xef, 0xcb, 0xb6, 0x4f, 0x96,
+ 0x24, 0x75, 0xd2, 0xa9, 0x14, 0x10, 0x07, 0x5d, 0x86, 0x29, 0xdb, 0x62,
+ 0xf1, 0x7d, 0x52, 0x0a, 0xec, 0xb5, 0x35, 0x71, 0x56, 0xa4, 0xd9, 0x25,
+ 0x62, 0xb3, 0xa1, 0xd1, 0xe8, 0x06, 0xbc, 0x71, 0x36, 0x00, 0xbf, 0xd3,
+ 0x8b, 0x3e, 0x9b, 0xc2, 0x5f, 0x53, 0xaa, 0xc8, 0x34, 0x4d, 0x21, 0xeb,
+ 0x34, 0xe2, 0x18, 0x9a, 0x88, 0xc2, 0x1a, 0x3e, 0xac, 0xc9, 0x9a, 0x43,
+ 0x9a, 0xbb, 0xda, 0xa4, 0x8a, 0x69, 0xa5, 0xf1, 0x60, 0xe4, 0xdd, 0xc2,
+ 0x09, 0xf4, 0x11, 0x8b, 0x79, 0xc1, 0x5e, 0xa5, 0x00, 0x5f, 0x74, 0x24,
+ 0xcb, 0x05, 0xf9, 0x97, 0xe0, 0x4d, 0x42, 0x60, 0x30, 0x2b, 0x5a, 0xda,
+ 0x35, 0xac, 0xfd, 0xfd, 0x77, 0x2a, 0x02, 0x5f, 0x55, 0xb6, 0xe3, 0x50,
+ 0xf7, 0x94, 0xeb, 0xb4, 0x26, 0x50, 0x63, 0x26, 0x45, 0xb1, 0x9a, 0x37,
+ 0xc5, 0xa3, 0x6c, 0x72, 0xa7, 0xfc, 0x46, 0xf0, 0x7d, 0x30, 0x26, 0x86,
+ 0x7e, 0xc7, 0x6d, 0x25, 0xf3, 0x2a, 0x8d, 0x8b, 0x3c, 0x0e, 0xa1, 0xe0,
+ 0xfc, 0x60, 0xea, 0x94, 0x35, 0x53, 0x56, 0xe1, 0x72, 0xd8, 0x65, 0xa7,
+ 0x41, 0x27, 0x94, 0x77, 0x2a, 0xf8, 0x89, 0x2f, 0x72, 0x6e, 0xf6, 0x34,
+ 0x40, 0x07, 0xfd, 0x26, 0x5f, 0x74, 0x92, 0x2e, 0xe9, 0x04, 0xaf, 0xc4,
+ 0xcd, 0xa1, 0xe2, 0x0d, 0xd8, 0x1d, 0x05, 0x3a, 0x48, 0xdf, 0x0d, 0xc4,
+ 0x97, 0x40, 0x36, 0x4a, 0x3b, 0x18, 0x92, 0x3e, 0xd3, 0x94, 0xe5, 0x92,
+ 0xcd, 0xcc, 0x12, 0x38, 0x32, 0x8b, 0x97, 0x82, 0x96, 0x0e, 0x99, 0xea,
+ 0x3e, 0x2a, 0x07, 0xd8, 0xd7, 0x8b, 0xd2, 0x0d, 0xe3, 0x74, 0x39, 0x23,
+ 0xf4, 0x53, 0xa5, 0x77, 0xa7, 0x7c, 0xd8, 0xdd, 0x0d, 0xed, 0x46, 0x03,
+ 0xbb, 0xd6, 0x11, 0x3c, 0x3c, 0x29, 0x3a, 0x83, 0xdf, 0x87, 0x1c, 0xdd,
+ 0xb5, 0x01, 0x49, 0x6a, 0x65, 0xfa, 0x2a, 0x54, 0x39, 0x41, 0xfa, 0xc3,
+ 0xe2, 0xb8, 0x66, 0xf0, 0x63, 0xb7, 0x15, 0xfc, 0xe0, 0x60, 0x63, 0x2c,
+ 0x59, 0xc6, 0xfb, 0xa8, 0xcd, 0x75, 0x78, 0xd9, 0xfd, 0x36, 0x40, 0xe4,
+ 0x28, 0xa7, 0xa8, 0x08, 0x81, 0x98, 0xf4, 0x24, 0xcb, 0x3a, 0x5a, 0xc7,
+ 0x51, 0x36, 0x8c, 0x5b, 0xce, 0x6f, 0x07, 0xe2, 0x40, 0x22, 0x4b, 0x22,
+ 0x66, 0x52, 0x79, 0xb0, 0x35, 0xe4, 0x95, 0x3b, 0x45, 0x92, 0x1a, 0x2d,
+ 0xa6, 0x49, 0x39, 0x25, 0xf1, 0x34, 0x59, 0x4c, 0x43, 0x7e, 0x6c, 0xd4,
+ 0x46, 0xa4, 0x66, 0x21, 0xab, 0xaa, 0x85, 0x78, 0xf9, 0x4d, 0x38, 0x96,
+ 0x0e, 0x07, 0xf9, 0x27, 0x12, 0x2b, 0xd3, 0x40, 0x35, 0xc5, 0x4a, 0xd3,
+ 0x2e, 0x79, 0xcb, 0x88, 0x7b, 0x62, 0x3b, 0x19, 0x07, 0x10, 0xbb, 0xca,
+ 0x85, 0xe7, 0x5e, 0xe0, 0xa2, 0x48, 0x30, 0xcf, 0x91, 0x5b, 0x97, 0x79,
+ 0x9f, 0x34, 0xed, 0x76, 0x8e, 0xf1, 0xc9, 0xe9, 0xf9, 0xf1, 0xc9, 0xeb,
+ 0xb3, 0xe8, 0x4f, 0xbd, 0x70, 0x55, 0x3a, 0x85, 0x7d, 0x4c, 0x42, 0x0c,
+ 0x48, 0xc1, 0x21, 0x16, 0x8e, 0xa9, 0xb3, 0x1d, 0x55, 0x2d, 0xd4, 0xe5,
+ 0x48, 0xf7, 0x30, 0xe9, 0x41, 0xf2, 0x5d, 0x81, 0xbe, 0x4a, 0xf4, 0x8d,
+ 0x94, 0xc6, 0x04, 0xd7, 0x83, 0x4c, 0x3b, 0x93, 0x64, 0x06, 0x17, 0x7d,
+ 0x02, 0x8c, 0x7b, 0x91, 0x94, 0x63, 0x02, 0x4b, 0x4c, 0x4c, 0xcb, 0x58,
+ 0x02, 0x2c, 0xf7, 0x04, 0x08, 0x95, 0xdd, 0x11, 0x2b, 0x43, 0x57, 0x67,
+ 0x59, 0x4c, 0x9d, 0xc4, 0xb1, 0x8e, 0xb0, 0x64, 0x93, 0x96, 0x5c, 0x97,
+ 0xbd, 0xd7, 0xb5, 0xee, 0x13, 0xe2, 0xec, 0xb6, 0x96, 0xd1, 0xfb, 0x53,
+ 0x2f, 0x8a, 0x7f, 0x8c, 0xf4, 0x1c, 0x56, 0xba, 0x43, 0x8d, 0x64, 0xe9,
+ 0x06, 0x2a, 0xe9, 0xe3, 0xc6, 0x35, 0x72, 0x9f, 0x8b, 0xf6, 0x67, 0x29,
+ 0x1c, 0x84, 0x57, 0x28, 0x7e, 0x68, 0xfb, 0x6f, 0xf0, 0x03, 0x7a, 0x8b,
+ 0xb8, 0xf5, 0x34, 0x46, 0xe8, 0x15, 0x88, 0xa8, 0x93, 0x15, 0xb2, 0x72,
+ 0x20, 0x24, 0x73, 0x57, 0x9a, 0x71, 0x72, 0x4e, 0x3a, 0x28, 0x06, 0x09,
+ 0x46, 0xe8, 0x05, 0xab, 0x50, 0x2d, 0xb5, 0x18, 0x72, 0x61, 0x7a, 0xb1,
+ 0x04, 0xf3, 0xf1, 0x14, 0x43, 0x17, 0xb4, 0x9d, 0xd0, 0x84, 0x3e, 0x66,
+ 0x14, 0x64, 0xa3, 0x45, 0x55, 0x63, 0x06, 0xaf, 0x01, 0x16, 0xf4, 0x77,
+ 0xac, 0x33, 0x2f, 0xd4, 0xd4, 0xfb, 0x06, 0xda, 0xc9, 0xb9, 0xb1, 0x3f,
+ 0x32, 0xb9, 0x6e, 0x29, 0x30, 0xb0, 0x19, 0x02, 0xbc, 0x0e, 0x59, 0x86,
+ 0xa6, 0x07, 0xb4, 0xa0, 0x70, 0xe4, 0xb7, 0xb0, 0x7f, 0xf1, 0xf2, 0xe1,
+ 0x38, 0xe3, 0x93, 0xc7, 0x58, 0x67, 0x2b, 0x47, 0x3c, 0x48, 0x52, 0x1a,
+ 0xfc, 0xdd, 0xd1, 0x39, 0x66, 0xba, 0x10, 0x2e, 0x7f, 0x77, 0x65, 0x48,
+ 0x73, 0x2b, 0x31, 0x65, 0xd1, 0xb8, 0x77, 0x12, 0xe3, 0x87, 0x52, 0xa4,
+ 0x7e, 0x3c, 0x16, 0xf4, 0x95, 0x26, 0x79, 0x72, 0xcb, 0xea, 0x38, 0x47,
+ 0x3d, 0x3a, 0x84, 0x2d, 0x44, 0x13, 0x60, 0xcc, 0xe6, 0x15, 0xde, 0x5d,
+ 0x9e, 0xc8, 0x72, 0x55, 0x21, 0x87, 0xe5, 0xc3, 0x9d, 0xbe, 0x3d, 0x17,
+ 0xad, 0x19, 0x8b, 0x16, 0xce, 0x8f, 0xe0, 0xee, 0x23, 0x9c, 0x31, 0x0c,
+ 0x33, 0xa5, 0x62, 0x82, 0x3a, 0x1d, 0x5d, 0xe6, 0x05, 0xe6, 0x5d, 0x10,
+ 0xa8, 0xc5, 0xfb, 0x5b, 0x86, 0xfb, 0x21, 0x1d, 0x3e, 0x3f, 0xf8, 0x3b,
+ 0xb7, 0xca, 0xad, 0xa2, 0xd3, 0x37, 0x27, 0xa7, 0x2f, 0x8e, 0x5f, 0x3f,
+ 0xef, 0x47, 0x87, 0x27, 0xa7, 0xff, 0xe8, 0x47, 0xaf, 0x4e, 0xfe, 0x7e,
+ 0x14, 0x71, 0x29, 0x64, 0xc0, 0xc5, 0xd9, 0xfa, 0xbf, 0xd7, 0x18, 0x1a,
+ 0x46, 0x07, 0xaa, 0x13, 0xa7, 0xe4, 0x4c, 0x0d, 0xab, 0x54, 0x0c, 0x18,
+ 0xc8, 0x8e, 0x4b, 0xab, 0x96, 0x0f, 0x87, 0x72, 0x0d, 0x0e, 0x0e, 0xbe,
+ 0xef, 0xfb, 0xa3, 0x03, 0x58, 0x51, 0x74, 0x7a, 0x72, 0x76, 0x4e, 0x8b,
+ 0xc1, 0x2d, 0x30, 0xbb, 0x86, 0xf9, 0x51, 0xec, 0x76, 0x5f, 0x3e, 0x1c,
+ 0x39, 0x19, 0xb8, 0x26, 0x87, 0xa5, 0x25, 0x30, 0x9f, 0x8c, 0xeb, 0x2f,
+ 0x5c, 0xd3, 0x48, 0xd6, 0x59, 0xdd, 0xf6, 0xb1, 0x0d, 0xa8, 0x41, 0xf4,
+ 0xf2, 0xb8, 0xfe, 0x4b, 0x69, 0xde, 0x4e, 0x58, 0x72, 0xdc, 0xf7, 0x3a,
+ 0xbb, 0xe5, 0x82, 0x11, 0xfb, 0x76, 0x85, 0x6c, 0xbf, 0xd1, 0xbe, 0x8a,
+ 0xd4, 0x02, 0x7a, 0x08, 0xd1, 0xd9, 0x02, 0x60, 0x46, 0x5e, 0x01, 0x1b,
+ 0x1a, 0x8d, 0x15, 0x39, 0x36, 0xc9, 0xd3, 0x29, 0x08, 0x61, 0x12, 0x44,
+ 0x76, 0xfc, 0x9a, 0xec, 0xc6, 0x49, 0x96, 0x0f, 0x27, 0x8d, 0xe0, 0xe9,
+ 0x20, 0xec, 0x02, 0x79, 0x1b, 0x41, 0x16, 0xd0, 0x8f, 0xcd, 0x5a, 0xab,
+ 0xc5, 0xe4, 0x96, 0x1b, 0x01, 0x17, 0x0a, 0x0c, 0x75, 0xb4, 0x92, 0x35,
+ 0x91, 0x47, 0xc2, 0x96, 0x51, 0x7c, 0xac, 0x41, 0xd3, 0x2e, 0xb0, 0xbe,
+ 0x50, 0x1d, 0x21, 0xf3, 0x09, 0x87, 0x5d, 0x9b, 0x34, 0x03, 0x94, 0x24,
+ 0x8e, 0x28, 0xf1, 0x13, 0x57, 0xa3, 0x40, 0xd4, 0x5d, 0x9c, 0xbb, 0xd3,
+ 0xa9, 0x21, 0x32, 0x93, 0x84, 0xce, 0xdb, 0xe7, 0xec, 0xe8, 0xad, 0xc3,
+ 0xb5, 0x73, 0x15, 0xd0, 0x2d, 0xc0, 0xa8, 0x9d, 0xc0, 0x4f, 0x73, 0x49,
+ 0xd7, 0x8d, 0x2a, 0x90, 0xea, 0x71, 0x7a, 0xeb, 0xbe, 0x81, 0xde, 0x5c,
+ 0x99, 0x96, 0x90, 0x24, 0xbb, 0xcc, 0xae, 0x4b, 0x3b, 0xaa, 0x26, 0x67,
+ 0x5d, 0x3e, 0x5c, 0x32, 0x1a, 0x01, 0x81, 0x8a, 0x9a, 0x67, 0xd8, 0xf9,
+ 0xee, 0xd6, 0x07, 0x9b, 0x18, 0x1e, 0xa1, 0x8b, 0x84, 0xa3, 0x80, 0xbe,
+ 0x63, 0xa7, 0x5d, 0x40, 0xc0, 0x20, 0xc9, 0x1d, 0xf9, 0xd4, 0x61, 0xc9,
+ 0x24, 0x82, 0xc9, 0x4d, 0x57, 0x36, 0x8d, 0x5d, 0x54, 0x16, 0x2c, 0x9f,
+ 0xf5, 0xe5, 0x31, 0x30, 0x05, 0xda, 0x91, 0x71, 0x81, 0x9f, 0xc2, 0xc5,
+ 0xb7, 0xe4, 0x5f, 0x22, 0x0a, 0x80, 0xa1, 0x7d, 0xd3, 0xe5, 0xe4, 0x74,
+ 0x37, 0xb8, 0x22, 0xb3, 0x20, 0x7a, 0xe2, 0x63, 0x56, 0x04, 0x14, 0xf2,
+ 0xe6, 0xe8, 0xfc, 0x8d, 0xaf, 0xd8, 0xbd, 0x3a, 0x38, 0x5d, 0x3e, 0x35,
+ 0x3d, 0xf1, 0x11, 0x53, 0xfb, 0x39, 0x5d, 0xaf, 0xce, 0x6f, 0x99, 0x92,
+ 0x9e, 0xb8, 0xe7, 0x94, 0xdf, 0x1f, 0xbd, 0x24, 0xec, 0x9d, 0xbf, 0xbf,
+ 0x79, 0xf1, 0x8f, 0xa0, 0x1a, 0xdb, 0xd0, 0xe5, 0x1e, 0xa8, 0x10, 0x6b,
+ 0xb5, 0xc4, 0x93, 0x1f, 0xb9, 0xbe, 0xef, 0xfc, 0x68, 0x85, 0x1c, 0x93,
+ 0x1f, 0xa3, 0xd7, 0x2f, 0xe1, 0x18, 0x57, 0x02, 0x3b, 0x6a, 0x2a, 0xca,
+ 0x4d, 0xab, 0xb0, 0x2a, 0xa6, 0xa0, 0x41, 0xee, 0xff, 0xf4, 0x67, 0x82,
+ 0xbc, 0x26, 0x1c, 0xc5, 0x3d, 0x50, 0x05, 0xca, 0x9f, 0xfa, 0xf8, 0xe7,
+ 0x2f, 0x83, 0xc1, 0xe0, 0xeb, 0xa0, 0x7d, 0x9d, 0x3a, 0xb7, 0x04, 0x9f,
+ 0xc4, 0x40, 0x3c, 0x43, 0x9f, 0x9b, 0xc8, 0x13, 0xc1, 0x79, 0x12, 0x7c,
+ 0x29, 0x46, 0x79, 0xe7, 0x49, 0x56, 0x62, 0xf7, 0x57, 0x3f, 0x25, 0x9d,
+ 0xeb, 0x5e, 0x2c, 0xfe, 0x2c, 0x71, 0x7e, 0xad, 0x63, 0x36, 0xac, 0x6e,
+ 0xbd, 0xda, 0x10, 0xec, 0x7d, 0xa7, 0x84, 0x3f, 0xe0, 0x23, 0x66, 0x8c,
+ 0x38, 0x9a, 0x96, 0x5d, 0x18, 0xec, 0x54, 0xd0, 0xf2, 0x1b, 0xe0, 0x49,
+ 0xa2, 0x0c, 0xc8, 0xb7, 0x8f, 0xcd, 0xf2, 0x43, 0xa1, 0x3b, 0x3a, 0x56,
+ 0xcc, 0x4a, 0x41, 0x46, 0x58, 0x92, 0x13, 0x80, 0x54, 0x04, 0x54, 0x02,
+ 0x36, 0xd3, 0x7a, 0xb4, 0x89, 0x1f, 0x59, 0x35, 0xac, 0x63, 0xc7, 0x18,
+ 0xf2, 0xc2, 0xc7, 0x24, 0x4d, 0x1b, 0xe0, 0xeb, 0x0c, 0x7f, 0xea, 0x20,
+ 0xe5, 0x59, 0xf4, 0x77, 0xc7, 0x07, 0xab, 0x91, 0xc1, 0xc0, 0x70, 0x66,
+ 0xbb, 0x0d, 0x70, 0xa3, 0xc1, 0xc1, 0x56, 0xf5, 0x15, 0x5e, 0x24, 0xe8,
+ 0x5c, 0xc1, 0xce, 0x65, 0x49, 0x8b, 0x12, 0xce, 0xcb, 0xc6, 0x61, 0xc2,
+ 0xc7, 0xa2, 0x5c, 0xbc, 0x87, 0x99, 0x0d, 0xc6, 0xb8, 0x50, 0x6d, 0xee,
+ 0x71, 0x1b, 0x70, 0xd6, 0x00, 0x26, 0x37, 0x6a, 0x7f, 0x36, 0x42, 0x83,
+ 0xdf, 0x18, 0x06, 0x27, 0x72, 0xda, 0x10, 0xac, 0xfd, 0x69, 0x0d, 0x3d,
+ 0x04, 0xb4, 0xfa, 0x60, 0xef, 0x03, 0x25, 0x58, 0xb4, 0x64, 0x02, 0x53,
+ 0x52, 0xbd, 0xbe, 0xd9, 0x10, 0x25, 0x3b, 0x03, 0x52, 0x63, 0x08, 0x47,
+ 0x3e, 0x01, 0x6b, 0x16, 0xa6, 0xe3, 0x51, 0xc2, 0x9d, 0x62, 0x02, 0x89,
+ 0xc9, 0x4c, 0x20, 0x9c, 0x74, 0x56, 0xd0, 0xa4, 0xf6, 0xce, 0x48, 0x9d,
+ 0x58, 0x93, 0xdc, 0x59, 0x01, 0xe6, 0xd2, 0x9b, 0x60, 0x31, 0x0a, 0xd7,
+ 0xc9, 0x85, 0xc3, 0x42, 0x96, 0x70, 0x74, 0x8b, 0x99, 0xe5, 0x70, 0xd9,
+ 0x78, 0x23, 0xf9, 0x98, 0x86, 0xd2, 0xf4, 0xbb, 0xf8, 0x91, 0x9f, 0x42,
+ 0x98, 0xcd, 0xaf, 0x1e, 0x51, 0x94, 0xf6, 0x49, 0x9f, 0xff, 0xf5, 0xc4,
+ 0xc2, 0x21, 0x3a, 0xd9, 0x84, 0xec, 0xdd, 0x61, 0x4b, 0xf0, 0xf8, 0x54,
+ 0xab, 0x6b, 0x07, 0xfe, 0x29, 0x31, 0xb6, 0x93, 0x1a, 0xae, 0xf4, 0xad,
+ 0x16, 0xf8, 0xca, 0xbf, 0xba, 0x5c, 0xd7, 0xcd, 0xf8, 0x08, 0x5e, 0xb8,
+ 0xd0, 0xc2, 0x77, 0xad, 0x55, 0x26, 0xa4, 0x8e, 0xcf, 0xa2, 0x8d, 0xba,
+ 0xbe, 0x2d, 0xf9, 0xf4, 0x1b, 0x04, 0x83, 0x5f, 0xa7, 0x16, 0x8a, 0x32,
+ 0x93, 0xf2, 0x26, 0xaf, 0xe8, 0x82, 0x1c, 0xea, 0xd8, 0x55, 0x21, 0x15,
+ 0x1d, 0x69, 0x5a, 0x60, 0x6d, 0xef, 0x22, 0xa7, 0x1a, 0x5f, 0x53, 0x43,
+ 0x61, 0x12, 0xc8, 0x75, 0xe9, 0x53, 0x0c, 0xf1, 0x4c, 0x02, 0x8e, 0x54,
+ 0xa0, 0x8c, 0xe3, 0x9c, 0xc1, 0x8d, 0xd1, 0xaf, 0x59, 0xf5, 0xd9, 0x83,
+ 0xee, 0x1f, 0x01, 0xd3, 0x25, 0xdd, 0x16, 0xd2, 0x5a, 0x3b, 0x68, 0x48,
+ 0x6e, 0xbe, 0x90, 0x08, 0x07, 0xe1, 0x0c, 0x23, 0xba, 0xa6, 0x0b, 0x5f,
+ 0x48, 0x9e, 0xbf, 0xd9, 0x08, 0xf4, 0x4d, 0xfa, 0x29, 0x6e, 0x73, 0x82,
+ 0x10, 0xf4, 0x98, 0xbd, 0xa4, 0xd2, 0x48, 0x73, 0x13, 0xf1, 0x7f, 0xe2,
+ 0x68, 0x70, 0xa8, 0x4a, 0x4c, 0xf8, 0xd1, 0x59, 0x1e, 0xfd, 0x34, 0x2c,
+ 0x13, 0xc2, 0xdb, 0xff, 0x85, 0x4a, 0x06, 0xa8, 0x7e, 0xdb, 0x2f, 0x13,
+ 0x7a, 0x3a, 0x78, 0xdc, 0x68, 0x99, 0xb7, 0x74, 0x22, 0xe3, 0x55, 0xb5,
+ 0xb3, 0xa5, 0x5c, 0x1b, 0xc1, 0x74, 0x80, 0xf3, 0x2c, 0x99, 0xe8, 0xcb,
+ 0x5b, 0x26, 0xe2, 0x1b, 0x67, 0x0c, 0xfc, 0x6b, 0xbd, 0xb3, 0x66, 0xf9,
+ 0x3c, 0xce, 0x93, 0x47, 0xb7, 0x8c, 0x43, 0x35, 0x8c, 0x40, 0xad, 0x82,
+ 0x53, 0x86, 0xaf, 0xb7, 0x86, 0x78, 0xfa, 0x38, 0x30, 0x84, 0xbd, 0xf2,
+ 0x9f, 0xae, 0xdc, 0x5f, 0x67, 0x70, 0x24, 0xfa, 0xde, 0xa3, 0x47, 0xbb,
+ 0x7b, 0xdb, 0x3b, 0x78, 0x0a, 0x5b, 0x60, 0xf2, 0xaf, 0x96, 0x67, 0xad,
+ 0x20, 0xa6, 0x98, 0x29, 0x40, 0x49, 0xf2, 0x20, 0xa1, 0xe2, 0xea, 0x6a,
+ 0xd4, 0x14, 0xfe, 0x98, 0x37, 0x0f, 0x24, 0xc8, 0xfe, 0xe7, 0x36, 0xb7,
+ 0x7a, 0x43, 0xd5, 0x12, 0xe8, 0x19, 0x00, 0xb6, 0xc7, 0x0e, 0xee, 0x76,
+ 0x09, 0x84, 0x94, 0xc4, 0x83, 0x52, 0x81, 0xfc, 0x43, 0x1c, 0xe3, 0x34,
+ 0xec, 0xe0, 0xd6, 0x7e, 0x7f, 0x94, 0xf5, 0x55, 0x4d, 0xd3, 0xf1, 0x05,
+ 0x98, 0x84, 0xb3, 0x59, 0x5a, 0xf6, 0x50, 0xa6, 0x6a, 0xb1, 0xc7, 0x20,
+ 0x7a, 0xce, 0x76, 0xba, 0x46, 0x2a, 0xdb, 0xde, 0x5b, 0x1e, 0x68, 0x78,
+ 0x63, 0xf8, 0xc7, 0x7a, 0xc3, 0x9c, 0xcc, 0x19, 0x50, 0x14, 0x77, 0xb7,
+ 0x1c, 0x6d, 0xf4, 0x05, 0x1b, 0x5f, 0x2b, 0xf9, 0x73, 0x5f, 0x09, 0x11,
+ 0x83, 0x67, 0x84, 0xd6, 0x85, 0xe6, 0xe1, 0x29, 0xb8, 0xb9, 0x41, 0x3c,
+ 0x23, 0x27, 0xab, 0xed, 0x96, 0x1c, 0x8d, 0x17, 0x98, 0x93, 0xe6, 0x17,
+ 0x9a, 0x30, 0x9c, 0x80, 0xfb, 0x09, 0x9c, 0x84, 0x97, 0x72, 0x86, 0x01,
+ 0x51, 0x1b, 0xfa, 0xf9, 0xd1, 0x09, 0x47, 0x1e, 0x7f, 0x32, 0x3a, 0xd7,
+ 0x48, 0xea, 0xcf, 0x16, 0x5e, 0xa5, 0xc8, 0x30, 0xad, 0xc9, 0x65, 0x37,
+ 0x99, 0x00, 0x53, 0xc8, 0xc7, 0x53, 0xb1, 0x26, 0x31, 0x9d, 0x2f, 0x83,
+ 0xb5, 0xe2, 0x45, 0x1c, 0x4e, 0xb1, 0xe9, 0x0e, 0x62, 0xb6, 0x23, 0xb2,
+ 0x5a, 0x54, 0x8d, 0xca, 0x6c, 0x0e, 0xa3, 0x9e, 0x4e, 0xd3, 0xa4, 0xf2,
+ 0xcb, 0x60, 0x92, 0xb1, 0x54, 0x65, 0xf2, 0x6e, 0x11, 0xe6, 0x5c, 0x77,
+ 0xe6, 0xdc, 0x0b, 0x4c, 0x49, 0x90, 0xc0, 0x7a, 0x31, 0x9b, 0x83, 0x96,
+ 0x23, 0xa5, 0xc8, 0x9c, 0x8f, 0xee, 0xe0, 0x4f, 0x73, 0x81, 0x0d, 0x21,
+ 0xf5, 0xf9, 0x19, 0x86, 0xd3, 0xe4, 0xfd, 0x4d, 0xe4, 0xf0, 0x60, 0xdc,
+ 0xd9, 0xd1, 0x14, 0xb3, 0x07, 0x9c, 0x7a, 0x3f, 0x1c, 0xe5, 0x92, 0x5d,
+ 0xef, 0x37, 0x9c, 0x14, 0x25, 0x25, 0x4d, 0xfd, 0x80, 0x72, 0x51, 0xbb,
+ 0x68, 0x8b, 0x3a, 0x40, 0x78, 0xa7, 0xd9, 0x3d, 0x2e, 0x7b, 0x8d, 0x5f,
+ 0xe4, 0x03, 0x5e, 0xe2, 0x56, 0xf4, 0x2d, 0x2a, 0xa4, 0x29, 0x3b, 0x42,
+ 0x5e, 0xad, 0x81, 0x34, 0x89, 0xcf, 0x50, 0xd0, 0x40, 0x5b, 0xf2, 0x84,
+ 0x3e, 0x56, 0x03, 0x64, 0x16, 0xba, 0x13, 0x45, 0x18, 0x31, 0x1c, 0xce,
+ 0x26, 0x20, 0x61, 0x81, 0xa1, 0x32, 0x19, 0x51, 0xb0, 0xb8, 0xa2, 0xef,
+ 0x8b, 0x6b, 0xe4, 0x2b, 0x7e, 0x5e, 0x9f, 0xed, 0x4d, 0x50, 0x2e, 0x52,
+ 0x81, 0xfe, 0x49, 0xdc, 0xef, 0xa4, 0x9c, 0xa0, 0xff, 0x03, 0xf2, 0x61,
+ 0x4e, 0x20, 0x36, 0x5f, 0x4b, 0xdc, 0x2c, 0xd4, 0xf6, 0x9d, 0x9a, 0x2f,
+ 0x08, 0x46, 0x2d, 0x68, 0x04, 0x03, 0x74, 0xb6, 0xa1, 0x97, 0x02, 0x84,
+ 0x26, 0x96, 0x14, 0x2c, 0x2e, 0x2e, 0x52, 0xd1, 0xbf, 0xc4, 0x59, 0x06,
+ 0x9f, 0x53, 0xa5, 0xd2, 0x29, 0x1c, 0x2c, 0xf3, 0x30, 0x9c, 0xf2, 0x55,
+ 0x66, 0xd7, 0x43, 0x3d, 0x87, 0x8a, 0xd9, 0x50, 0xd3, 0x7e, 0xdb, 0x1d,
+ 0xa4, 0xfa, 0x91, 0x14, 0xb6, 0x05, 0xb2, 0x0a, 0xf0, 0x92, 0xf2, 0x1d,
+ 0x4b, 0xed, 0x05, 0x0b, 0x77, 0x25, 0xff, 0xd6, 0x5e, 0x7f, 0xa2, 0x45,
+ 0xe3, 0x74, 0xe0, 0x88, 0xaa, 0x44, 0x53, 0x27, 0x4e, 0x79, 0x8e, 0x8a,
+ 0x7e, 0x06, 0xeb, 0xee, 0x28, 0xed, 0x67, 0xef, 0x82, 0x44, 0xcc, 0xb9,
+ 0x19, 0xbc, 0x03, 0x92, 0x4e, 0x83, 0xf6, 0x15, 0x02, 0xd3, 0x2d, 0xbf,
+ 0xf3, 0x3a, 0xa8, 0x2a, 0x30, 0xea, 0x80, 0xee, 0x90, 0xa1, 0xb1, 0x0c,
+ 0xf3, 0x41, 0x0d, 0xba, 0x25, 0x7c, 0x21, 0x8c, 0xfe, 0x68, 0xeb, 0x11,
+ 0x6a, 0x3b, 0x48, 0x9b, 0x0b, 0xce, 0x78, 0x0e, 0x75, 0x22, 0x10, 0x88,
+ 0x02, 0x8a, 0xe3, 0xc3, 0xb8, 0xf8, 0x57, 0xd9, 0xaa, 0xb1, 0x49, 0x48,
+ 0x4e, 0x6c, 0xec, 0x34, 0x57, 0xbe, 0x1d, 0x28, 0x5a, 0x11, 0x46, 0x6d,
+ 0xd9, 0xb8, 0x1b, 0x8e, 0x26, 0x85, 0xa6, 0xc8, 0x29, 0xc7, 0xd4, 0xba,
+ 0x83, 0x1b, 0xbe, 0x97, 0x50, 0x32, 0x8d, 0xd9, 0x2d, 0xb9, 0xe7, 0xd4,
+ 0xce, 0xc5, 0x6e, 0x1a, 0xa8, 0x51, 0x7c, 0x6d, 0x13, 0xc7, 0x83, 0x18,
+ 0xf6, 0x2d, 0xcf, 0x50, 0x53, 0x7a, 0xf4, 0xc1, 0xf1, 0xf8, 0xb0, 0xc3,
+ 0x47, 0x59, 0x32, 0x6c, 0x57, 0x23, 0x59, 0xcc, 0x72, 0x1f, 0xee, 0x87,
+ 0xde, 0x75, 0xb2, 0x3c, 0x4a, 0xe3, 0x64, 0xdd, 0x05, 0x46, 0xeb, 0x38,
+ 0x27, 0x4a, 0xcc, 0xc7, 0x1f, 0x3e, 0x6c, 0xc8, 0x9e, 0xf8, 0xa0, 0x91,
+ 0xc3, 0x4c, 0x3b, 0x7c, 0x38, 0xd1, 0xd7, 0xe5, 0xe9, 0x8e, 0x4d, 0x51,
+ 0xfb, 0xd0, 0x71, 0xe8, 0xe6, 0xe8, 0xab, 0x07, 0xd2, 0x70, 0xe3, 0x1e,
+ 0x87, 0xd6, 0xb9, 0x9a, 0xd6, 0xc1, 0xa2, 0xdf, 0x8d, 0x9f, 0x3d, 0xdd,
+ 0x6e, 0x87, 0xa1, 0x71, 0x02, 0xd4, 0x4e, 0x40, 0x07, 0x43, 0xba, 0x6b,
+ 0x3b, 0x66, 0x6c, 0x20, 0x42, 0xad, 0x36, 0x36, 0x4e, 0x30, 0xb7, 0x82,
+ 0x7e, 0x8c, 0xbd, 0xe4, 0xd4, 0x1c, 0x3f, 0x42, 0x10, 0xf8, 0x37, 0x47,
+ 0x2f, 0xde, 0x9e, 0x1d, 0x3d, 0x27, 0x41, 0x9d, 0x84, 0xd0, 0x35, 0xb8,
+ 0xa9, 0x90, 0x94, 0x0f, 0xd4, 0x45, 0xc1, 0x36, 0x82, 0x59, 0xed, 0x32,
+ 0x9d, 0x26, 0x10, 0x47, 0xeb, 0xd4, 0x70, 0xfc, 0xf3, 0x76, 0x3e, 0x73,
+ 0x79, 0x4a, 0x35, 0xa6, 0xb8, 0xfa, 0xc5, 0xc9, 0xb7, 0x67, 0x55, 0xb7,
+ 0x26, 0xb9, 0xd7, 0xb9, 0x37, 0x56, 0xa9, 0xb4, 0xf0, 0xf4, 0x3e, 0x07,
+ 0xdf, 0x28, 0xc7, 0x74, 0xa8, 0x71, 0x59, 0x7b, 0x4c, 0xa7, 0x76, 0x33,
+ 0xda, 0x97, 0x02, 0xe8, 0xaf, 0x03, 0x09, 0x53, 0x06, 0xb9, 0x78, 0x9a,
+ 0xa6, 0x73, 0xb5, 0x05, 0x93, 0x19, 0xf0, 0x4a, 0x4e, 0x5c, 0x45, 0x43,
+ 0x53, 0xb3, 0x5a, 0x30, 0x79, 0x9a, 0x17, 0xc4, 0xc0, 0xcb, 0x41, 0xc4,
+ 0x15, 0xac, 0xfa, 0x4e, 0x2a, 0x91, 0xde, 0x6a, 0x0f, 0x5a, 0x72, 0x61,
+ 0x6a, 0x59, 0xcf, 0x6a, 0x13, 0x3e, 0x61, 0xfe, 0x1b, 0x00, 0xfa, 0xe5,
+ 0x8a, 0x74, 0xec, 0x23, 0x8d, 0x0a, 0x9a, 0x94, 0xa6, 0x27, 0xd3, 0x8b,
+ 0x02, 0x24, 0xfd, 0xe5, 0xcc, 0x74, 0xfa, 0x10, 0xae, 0xba, 0xd1, 0x26,
+ 0xb8, 0xb6, 0x30, 0xc5, 0x90, 0x0d, 0x95, 0xa0, 0xa6, 0x02, 0x09, 0x3d,
+ 0x71, 0x59, 0x35, 0xed, 0x37, 0x3b, 0xa5, 0xce, 0x24, 0xd7, 0x8b, 0xf6,
+ 0x82, 0x77, 0xd0, 0x07, 0x24, 0xf8, 0x2d, 0x2d, 0x0b, 0x31, 0x90, 0x8d,
+ 0xbd, 0xef, 0x26, 0xb2, 0xeb, 0xb2, 0x83, 0xe9, 0x54, 0xdc, 0xde, 0xd8,
+ 0x3d, 0xa2, 0xcf, 0xd0, 0xd1, 0xd5, 0x9d, 0xfe, 0xf1, 0xc7, 0x11, 0xa8,
+ 0x4f, 0x78, 0xb3, 0xe4, 0x03, 0xa7, 0x83, 0x75, 0xd1, 0x1e, 0xc3, 0x2b,
+ 0xa8, 0x2f, 0xa3, 0x64, 0x37, 0x11, 0x7e, 0x60, 0xa3, 0xe0, 0x0b, 0x91,
+ 0x8f, 0x0c, 0x59, 0x89, 0x42, 0x4c, 0x61, 0x5d, 0xbf, 0x40, 0x8d, 0xe3,
+ 0x0b, 0xa8, 0x80, 0x51, 0x9a, 0x68, 0x82, 0x7b, 0x82, 0x21, 0xb9, 0x75,
+ 0x04, 0x6f, 0x94, 0x65, 0x6d, 0xe0, 0x8f, 0xc9, 0x85, 0x21, 0x99, 0x98,
+ 0x3c, 0xf7, 0x65, 0x12, 0xaa, 0xa5, 0x29, 0x91, 0xde, 0x35, 0x96, 0xc9,
+ 0xe9, 0xc0, 0x54, 0x21, 0x4d, 0x6d, 0x06, 0xb2, 0x91, 0xaa, 0x31, 0x13,
+ 0x67, 0x20, 0xe5, 0x3e, 0x3e, 0xb4, 0x11, 0x0f, 0x25, 0x70, 0xca, 0x33,
+ 0x44, 0x57, 0x70, 0x92, 0x0a, 0xf0, 0xe3, 0xa9, 0x99, 0x08, 0x01, 0x7b,
+ 0x5f, 0x52, 0xe2, 0x38, 0x83, 0x95, 0x4b, 0x6b, 0xb4, 0x80, 0x22, 0x47,
+ 0x78, 0xf1, 0xf8, 0x29, 0xac, 0x03, 0xe7, 0xee, 0x32, 0x69, 0xe3, 0x61,
+ 0x84, 0xac, 0x18, 0x13, 0xf4, 0x38, 0xcd, 0xc8, 0xc5, 0x0b, 0xd4, 0x7d,
+ 0xf4, 0x8b, 0x60, 0x6c, 0x7e, 0xad, 0x8a, 0x0c, 0x12, 0x0a, 0x0d, 0xd1,
+ 0xe7, 0x68, 0xd6, 0x0c, 0x05, 0xb1, 0x9e, 0x27, 0x37, 0x0b, 0x74, 0x1d,
+ 0x36, 0xe1, 0x9b, 0x51, 0xb3, 0x7e, 0xab, 0x2e, 0x17, 0xb9, 0xa3, 0x5d,
+ 0x59, 0x2f, 0x0d, 0x8a, 0xf9, 0x7c, 0x59, 0x2f, 0x8d, 0x65, 0xec, 0x6e,
+ 0x99, 0x3b, 0xb1, 0xbd, 0xf5, 0x20, 0x97, 0x22, 0xda, 0xcf, 0x17, 0xb3,
+ 0xaf, 0x03, 0xac, 0x20, 0x09, 0xc8, 0x53, 0x17, 0xfd, 0xca, 0x36, 0x5e,
+ 0x61, 0x32, 0x47, 0x97, 0x31, 0xd3, 0x47, 0x27, 0x0f, 0xee, 0xb3, 0x71,
+ 0x25, 0xcf, 0x5f, 0x36, 0x21, 0x3b, 0x48, 0x50, 0xca, 0x3d, 0xbb, 0x60,
+ 0x8b, 0x7b, 0x31, 0xa7, 0x93, 0xf5, 0xb3, 0xef, 0xc5, 0xdb, 0x25, 0x6f,
+ 0xc3, 0xcc, 0x5b, 0x2e, 0xd7, 0x23, 0x33, 0xc6, 0xcc, 0xb3, 0x6e, 0x80,
+ 0xbb, 0x96, 0xb1, 0x74, 0x42, 0x20, 0x69, 0xc9, 0x03, 0xf6, 0x9f, 0x73,
+ 0x4f, 0xdf, 0x3d, 0x41, 0x47, 0x01, 0xba, 0xe9, 0x6b, 0x53, 0x05, 0x56,
+ 0x58, 0x3d, 0x0f, 0xa0, 0x55, 0x3d, 0x09, 0x87, 0x4e, 0xec, 0x88, 0x47,
+ 0x5b, 0xcf, 0xfa, 0xd1, 0xa3, 0x9d, 0x2f, 0xfb, 0x88, 0xda, 0x86, 0x7f,
+ 0xec, 0xe0, 0x1f, 0xbb, 0x64, 0xa9, 0x3e, 0x06, 0x6b, 0xc0, 0x28, 0xad,
+ 0x1e, 0xc4, 0xfd, 0x38, 0x0d, 0x23, 0x65, 0x18, 0xbc, 0x92, 0x64, 0x58,
+ 0x2c, 0x1c, 0x95, 0x38, 0x69, 0xee, 0x37, 0xf3, 0x2b, 0x06, 0xb9, 0x41,
+ 0x1e, 0x54, 0xf9, 0x6d, 0xa1, 0x8a, 0x7c, 0xac, 0x5d, 0xa9, 0x6c, 0x95,
+ 0x13, 0xfc, 0xb7, 0xbe, 0x04, 0x8a, 0x22, 0xdc, 0x44, 0xd9, 0x4b, 0xca,
+ 0x05, 0x58, 0x10, 0x76, 0x02, 0x03, 0x5a, 0x25, 0x94, 0x52, 0xea, 0x9d,
+ 0x0f, 0xc3, 0xb5, 0x20, 0xce, 0x09, 0xd5, 0x1f, 0x30, 0xa7, 0xa9, 0x90,
+ 0x64, 0xd9, 0xd9, 0x5b, 0x49, 0x20, 0xbb, 0x66, 0xc4, 0x8f, 0x19, 0x55,
+ 0xdc, 0x32, 0xd3, 0x1f, 0xfa, 0x5c, 0x54, 0x5a, 0x67, 0x11, 0x36, 0x9a,
+ 0x53, 0xb8, 0xc2, 0x97, 0x17, 0xad, 0x42, 0xc9, 0x00, 0x68, 0xca, 0x2e,
+ 0x0a, 0x7b, 0x8c, 0x33, 0x2f, 0x02, 0xc5, 0xb9, 0xd0, 0xaa, 0x54, 0xa0,
+ 0x4a, 0x06, 0xdb, 0xce, 0x2d, 0x84, 0x49, 0xd9, 0x57, 0xc9, 0x6e, 0x85,
+ 0xfa, 0x40, 0xd3, 0xc9, 0xe9, 0x26, 0x85, 0x0d, 0x2b, 0x7b, 0x45, 0x6b,
+ 0x65, 0x6d, 0xc4, 0x81, 0x8b, 0x5a, 0x44, 0xa6, 0x41, 0x58, 0x61, 0x17,
+ 0x67, 0x98, 0xf3, 0x48, 0x27, 0x86, 0x19, 0x1b, 0x89, 0x26, 0xbf, 0x89,
+ 0x7c, 0x73, 0xf1, 0x01, 0xfa, 0xd1, 0xf7, 0xda, 0x1d, 0x90, 0xa8, 0x81,
+ 0x02, 0x9e, 0x6b, 0xc0, 0x24, 0x45, 0x80, 0xdf, 0x94, 0xad, 0x25, 0xec,
+ 0xa4, 0xa9, 0x89, 0xc6, 0x92, 0x4b, 0x69, 0xb0, 0x8e, 0x98, 0x6c, 0x5c,
+ 0x68, 0xcf, 0x27, 0x4f, 0x42, 0x7d, 0x41, 0x1d, 0x05, 0xa1, 0xab, 0x3f,
+ 0xf0, 0x27, 0x07, 0xeb, 0xba, 0xbf, 0x3a, 0x60, 0xa5, 0x85, 0xc3, 0x02,
+ 0xab, 0xa4, 0x9a, 0xc6, 0xd8, 0x8a, 0xfb, 0xb7, 0x6c, 0x1c, 0xed, 0x67,
+ 0xd4, 0x4a, 0xba, 0xbe, 0x09, 0x77, 0x96, 0xc3, 0x9b, 0x06, 0x4f, 0x02,
+ 0x4d, 0xfc, 0x26, 0xed, 0x25, 0xe4, 0x71, 0xd8, 0x3a, 0x1e, 0x61, 0xa3,
+ 0xaf, 0x59, 0xcf, 0x67, 0x07, 0x67, 0x2f, 0xa3, 0xd3, 0x97, 0x07, 0xc7,
+ 0xaf, 0xe1, 0x9d, 0x38, 0x50, 0x4a, 0xac, 0x8d, 0xbf, 0xfb, 0xe4, 0x4b,
+ 0x6e, 0xd9, 0x40, 0xad, 0xde, 0xe0, 0x66, 0x1e, 0x9e, 0xc8, 0xef, 0x79,
+ 0x39, 0x26, 0x15, 0xa2, 0x81, 0xf7, 0x1b, 0x2f, 0x14, 0x0b, 0xa0, 0xbb,
+ 0x1f, 0xaa, 0xb5, 0x82, 0x1a, 0xad, 0x50, 0xfb, 0x8d, 0x2a, 0x69, 0x10,
+ 0xd8, 0x0a, 0xe4, 0x2b, 0x5f, 0x19, 0xea, 0xb3, 0xad, 0xbf, 0x86, 0xb5,
+ 0xb0, 0xd5, 0x0f, 0x54, 0xe9, 0x0c, 0x48, 0xa8, 0x39, 0x6d, 0xf8, 0x3e,
+ 0x99, 0xa2, 0xad, 0x36, 0xe2, 0x79, 0x22, 0x20, 0x9e, 0x6c, 0x0f, 0x31,
+ 0x90, 0x16, 0x26, 0xab, 0xb4, 0x59, 0xd0, 0x48, 0x16, 0x7e, 0xe5, 0x1a,
+ 0xba, 0x43, 0x87, 0x85, 0xd7, 0x40, 0x4f, 0x30, 0x20, 0x05, 0xcf, 0x1d,
+ 0x35, 0x21, 0x2a, 0x76, 0xbc, 0x00, 0x0e, 0x49, 0x8d, 0x93, 0xa5, 0x61,
+ 0x43, 0x41, 0xa5, 0xf6, 0xa4, 0x8c, 0x5c, 0x26, 0xd4, 0x7c, 0x16, 0x78,
+ 0xd2, 0x14, 0xc6, 0x0b, 0xb4, 0xf6, 0x55, 0x9a, 0x0b, 0x5f, 0x8f, 0x06,
+ 0x45, 0xfd, 0xfe, 0xfa, 0x73, 0x63, 0x7a, 0x5a, 0xc2, 0x2c, 0x59, 0x21,
+ 0x77, 0x00, 0xf3, 0xf5, 0xf2, 0x58, 0x73, 0xcf, 0x5c, 0x53, 0x0e, 0x59,
+ 0x82, 0x77, 0x73, 0xb2, 0xf6, 0xe9, 0x1d, 0xe5, 0x6c, 0xbe, 0x0a, 0x1e,
+ 0x88, 0x45, 0x76, 0xcc, 0xf9, 0x4a, 0x34, 0x29, 0x7b, 0xa9, 0x51, 0x2d,
+ 0x13, 0xac, 0x84, 0x7b, 0xd3, 0xde, 0x42, 0xdf, 0x8a, 0x96, 0x51, 0x57,
+ 0xe5, 0x3b, 0xba, 0x98, 0xd5, 0x76, 0xd3, 0x3d, 0x8c, 0xc6, 0xde, 0x01,
+ 0xe1, 0x83, 0xae, 0xce, 0x55, 0x25, 0xfb, 0xf8, 0xe7, 0xd7, 0x4b, 0xc0,
+ 0xa7, 0x9a, 0xdd, 0x5a, 0x47, 0x36, 0xdf, 0x58, 0x86, 0x91, 0xe2, 0x7c,
+ 0x84, 0xc0, 0x3d, 0x7d, 0x7d, 0xf4, 0xdd, 0x49, 0x58, 0x9f, 0x6d, 0xcc,
+ 0x79, 0x57, 0xba, 0x7c, 0x48, 0xc2, 0x74, 0xe7, 0xc7, 0x0e, 0x8c, 0xe3,
+ 0x4d, 0x61, 0x31, 0xab, 0xf1, 0xf2, 0x3c, 0xbd, 0x00, 0x43, 0xc7, 0xc2,
+ 0x41, 0x71, 0xc7, 0x50, 0x77, 0x74, 0x67, 0xa7, 0xcf, 0xa8, 0xdd, 0xe3,
+ 0x65, 0x71, 0xdd, 0x5d, 0x92, 0xe3, 0xa0, 0xf9, 0x54, 0xf4, 0x34, 0xd6,
+ 0x93, 0x71, 0xda, 0xa3, 0xa3, 0x52, 0xe2, 0x18, 0xb6, 0x60, 0x07, 0x36,
+ 0xaa, 0x4a, 0xbc, 0x1a, 0x53, 0xae, 0xbf, 0xa4, 0xe6, 0x48, 0x9f, 0x17,
+ 0x4c, 0xcc, 0x2d, 0x89, 0x39, 0xa3, 0xc4, 0x43, 0xbb, 0x05, 0x0f, 0xeb,
+ 0x8a, 0xb4, 0xe3, 0xae, 0x7c, 0xa1, 0xec, 0x8a, 0x74, 0xcf, 0x57, 0x25,
+ 0x04, 0xea, 0x98, 0x78, 0x41, 0x4d, 0x1c, 0x67, 0x69, 0xdd, 0x40, 0xb7,
+ 0x71, 0x4e, 0xb2, 0x3d, 0x00, 0x4f, 0x05, 0xd3, 0xfe, 0x73, 0x91, 0x11,
+ 0x96, 0x1d, 0xa8, 0xd7, 0x1a, 0xba, 0xa3, 0x53, 0xd6, 0x41, 0x23, 0x1a,
+ 0x94, 0xc4, 0x82, 0x38, 0x13, 0x61, 0xbf, 0x3c, 0x65, 0x1f, 0xc8, 0x00,
+ 0xf3, 0xe8, 0xa5, 0xca, 0xef, 0x10, 0x3f, 0x6e, 0xb6, 0x40, 0xf8, 0xc7,
+ 0x63, 0x18, 0x0e, 0x14, 0xe0, 0xa9, 0xc4, 0x4b, 0x04, 0x50, 0x00, 0xa3,
+ 0x38, 0x04, 0x60, 0x52, 0xbd, 0xc7, 0xb3, 0xf5, 0xfa, 0x8d, 0x15, 0x35,
+ 0x6b, 0xa2, 0xd8, 0xbb, 0xf0, 0x2a, 0x35, 0x0a, 0x01, 0x2c, 0x04, 0x14,
+ 0xe7, 0x64, 0xba, 0x59, 0xd5, 0x63, 0xd4, 0xf5, 0x1d, 0x28, 0x14, 0x1b,
+ 0x83, 0xa9, 0x43, 0x1d, 0xa5, 0xbd, 0x3b, 0x20, 0xc5, 0xb6, 0x5d, 0xc5,
+ 0xb5, 0x0d, 0x94, 0x01, 0xbf, 0x17, 0xa8, 0xbb, 0x33, 0x28, 0xe6, 0xf9,
+ 0x13, 0x69, 0xdf, 0x1a, 0x57, 0x63, 0x69, 0x1f, 0x4d, 0xe7, 0x74, 0xee,
+ 0xcc, 0xdd, 0x83, 0x5a, 0x7c, 0x88, 0x22, 0x69, 0xd8, 0x15, 0xa9, 0x71,
+ 0x45, 0xc7, 0xf7, 0x15, 0xae, 0x1f, 0xcb, 0x33, 0x8a, 0x8a, 0xf0, 0xae,
+ 0xe0, 0x50, 0xe0, 0xe3, 0x85, 0x1f, 0x2d, 0x23, 0x4b, 0xee, 0x3c, 0xfb,
+ 0x68, 0xc5, 0x2e, 0xc6, 0x67, 0x27, 0x87, 0x7f, 0x3d, 0x7b, 0xe4, 0xf4,
+ 0x30, 0xae, 0x5b, 0x39, 0x64, 0xae, 0x02, 0xe7, 0x37, 0x26, 0x4b, 0x15,
+ 0x9d, 0x85, 0xcb, 0x87, 0x03, 0x3d, 0x8c, 0x61, 0x4e, 0xe3, 0x59, 0xc4,
+ 0x15, 0xa2, 0x2f, 0xe5, 0x66, 0x9e, 0x86, 0xea, 0x45, 0x25, 0x62, 0xc4,
+ 0xd9, 0x0b, 0x26, 0x35, 0xc8, 0x54, 0x47, 0xda, 0x66, 0x99, 0xa9, 0x93,
+ 0xd5, 0x64, 0xe9, 0x2c, 0xd8, 0x5d, 0x36, 0xdc, 0xff, 0x55, 0x31, 0x79,
+ 0xa4, 0xf7, 0x77, 0xc1, 0xa5, 0x90, 0x8b, 0x3c, 0xfb, 0x00, 0x2c, 0x13,
+ 0x0d, 0x46, 0x59, 0x2a, 0xfb, 0x83, 0xa8, 0x44, 0x92, 0xd6, 0xe2, 0xa7,
+ 0xcd, 0xe1, 0x8f, 0xfb, 0x51, 0x3a, 0xb8, 0x18, 0x44, 0x11, 0x1f, 0x00,
+ 0x1c, 0xb4, 0x79, 0x61, 0x13, 0xeb, 0xd4, 0x36, 0xeb, 0x62, 0x93, 0x87,
+ 0x1b, 0xe0, 0x7f, 0x96, 0x71, 0x6f, 0xac, 0x11, 0x2f, 0xb3, 0x31, 0x45,
+ 0x08, 0x6f, 0x2c, 0x10, 0x9b, 0x72, 0x64, 0xb7, 0x01, 0x30, 0xc5, 0x28,
+ 0x30, 0xb4, 0x1d, 0x08, 0xc8, 0x02, 0x93, 0x58, 0x48, 0x8b, 0xd2, 0xd1,
+ 0x14, 0xec, 0xd7, 0x40, 0x69, 0x75, 0x23, 0x87, 0x02, 0x8f, 0x66, 0x81,
+ 0xfe, 0x95, 0xe9, 0x02, 0xa7, 0xe3, 0x70, 0xaa, 0xe6, 0x61, 0x99, 0x16,
+ 0x81, 0xf2, 0x7d, 0xbc, 0x69, 0xc1, 0x68, 0x86, 0xd3, 0x34, 0x9c, 0xad,
+ 0xe6, 0xc4, 0xee, 0x49, 0xbb, 0x53, 0x7a, 0x20, 0x35, 0x46, 0xbb, 0x25,
+ 0x37, 0x72, 0x63, 0xb0, 0x6a, 0xd5, 0xac, 0x80, 0xa8, 0x55, 0xdb, 0x06,
+ 0xd7, 0x36, 0x63, 0x30, 0x50, 0x1a, 0xdd, 0xec, 0x9d, 0xec, 0x46, 0x6a,
+ 0x37, 0xf1, 0x0f, 0x1d, 0x45, 0x2d, 0x53, 0xe2, 0x5c, 0x1c, 0x53, 0x40,
+ 0x6f, 0xcd, 0x71, 0xee, 0x07, 0x60, 0x2f, 0xb9, 0xcc, 0x28, 0xa9, 0x0c,
+ 0xb8, 0xaf, 0xb8, 0x3f, 0x24, 0x41, 0xa6, 0x52, 0x86, 0xda, 0x58, 0xa5,
+ 0x78, 0x3e, 0x3c, 0xc7, 0x8b, 0xbc, 0xb2, 0xae, 0xad, 0x8a, 0xe9, 0xa5,
+ 0x8d, 0x46, 0x96, 0x3a, 0x70, 0x3c, 0x67, 0xa9, 0x1d, 0x9a, 0x17, 0x9f,
+ 0xc9, 0x67, 0x6a, 0x9c, 0x2a, 0xb3, 0x23, 0xa9, 0xe3, 0x35, 0xdd, 0x7b,
+ 0xb4, 0xf5, 0xe5, 0x93, 0xfb, 0x74, 0x68, 0x7f, 0x94, 0x78, 0xad, 0xb3,
+ 0xf9, 0x1f, 0xb1, 0x0e, 0xed, 0x33, 0xba, 0xe4, 0x5e, 0x9c, 0x2e, 0xb9,
+ 0x1b, 0xab, 0x0b, 0xf5, 0x36, 0xbf, 0x9d, 0xd5, 0xd1, 0xa5, 0x02, 0xe9,
+ 0x5b, 0x39, 0x9d, 0xd2, 0xc9, 0x73, 0x16, 0x4e, 0xe4, 0x6b, 0xb0, 0xb8,
+ 0x10, 0xa3, 0x52, 0xc2, 0x97, 0x3e, 0xee, 0x98, 0x17, 0x46, 0x3c, 0x4a,
+ 0x99, 0x94, 0xe1, 0x52, 0x8c, 0xd0, 0x6d, 0xf9, 0xd4, 0x9d, 0x18, 0x55,
+ 0x72, 0x2f, 0x4e, 0x65, 0x44, 0xf9, 0x0a, 0xbc, 0x8a, 0x43, 0x0f, 0x1f,
+ 0xc3, 0xa9, 0xee, 0xc3, 0xa8, 0x92, 0xfb, 0x70, 0xaa, 0xe4, 0x33, 0xb0,
+ 0x2a, 0x77, 0x35, 0xb7, 0x32, 0x2c, 0xeb, 0x49, 0x33, 0xec, 0xca, 0x8f,
+ 0x7b, 0x4b, 0x6e, 0x83, 0x30, 0x2b, 0x2e, 0xbb, 0xff, 0x6f, 0xc2, 0xaa,
+ 0x92, 0x55, 0xeb, 0x23, 0x1e, 0x94, 0x55, 0x25, 0x0f, 0xc0, 0xab, 0x56,
+ 0x66, 0x55, 0x8f, 0xe3, 0x61, 0x52, 0x65, 0xa3, 0x36, 0x5d, 0x7b, 0xa5,
+ 0xf1, 0xe8, 0x45, 0xc2, 0x01, 0x36, 0x51, 0xd3, 0xa1, 0xba, 0xba, 0x96,
+ 0xaf, 0x8e, 0xa3, 0x22, 0x92, 0x8e, 0x19, 0xa8, 0x7d, 0xe0, 0xc4, 0x2d,
+ 0x3a, 0x9e, 0xc7, 0xca, 0xe7, 0x4c, 0xbf, 0xc1, 0xa5, 0x23, 0x7b, 0x5b,
+ 0xac, 0xa0, 0xd8, 0x36, 0x2b, 0x72, 0x20, 0x2a, 0xbf, 0x7e, 0xd3, 0x05,
+ 0xe8, 0xe2, 0xf3, 0x8c, 0xc1, 0x46, 0x0a, 0x6c, 0x5c, 0x16, 0x7d, 0x77,
+ 0x76, 0x16, 0x1f, 0x9c, 0x1e, 0x47, 0xb7, 0x78, 0x25, 0xf1, 0x15, 0x67,
+ 0x8d, 0xd9, 0x72, 0x7d, 0xbe, 0xb1, 0x85, 0x77, 0x32, 0x30, 0xef, 0x41,
+ 0x17, 0x3a, 0xbc, 0x39, 0xd8, 0x8f, 0xa6, 0x92, 0xc7, 0xcb, 0x4a, 0xbf,
+ 0x9b, 0x5b, 0x08, 0x76, 0x76, 0x9b, 0x36, 0x0e, 0xaa, 0xa8, 0x01, 0xa4,
+ 0xa5, 0x3b, 0xab, 0xfe, 0x09, 0xf2, 0xdc, 0x10, 0x9b, 0xe2, 0xf6, 0x50,
+ 0xdc, 0x74, 0x13, 0xe5, 0x17, 0x3d, 0xe0, 0xd9, 0x33, 0x08, 0x88, 0x4e,
+ 0x1d, 0x86, 0xb7, 0xbf, 0x7c, 0xb2, 0x0d, 0x7c, 0xe8, 0x86, 0xf3, 0x3b,
+ 0xe5, 0xe5, 0x47, 0x83, 0xdd, 0xcd, 0x47, 0x83, 0x47, 0x28, 0xdc, 0xa4,
+ 0x62, 0x84, 0xfa, 0xc1, 0xcb, 0xf0, 0xe1, 0x7c, 0x49, 0x56, 0x2b, 0x5e,
+ 0x1f, 0x1d, 0x46, 0x0c, 0xca, 0x94, 0x52, 0x06, 0x5e, 0xd3, 0xbf, 0xea,
+ 0x00, 0xd8, 0x0b, 0x1d, 0x32, 0x1b, 0xf7, 0xb8, 0xa9, 0xb7, 0x1d, 0xea,
+ 0x96, 0x22, 0xdf, 0x6a, 0x6e, 0x16, 0x82, 0x52, 0x82, 0x3d, 0x54, 0xb2,
+ 0x2f, 0xb8, 0x46, 0x1f, 0xe9, 0xd3, 0xd9, 0x12, 0x67, 0xc3, 0x96, 0x83,
+ 0x7b, 0xf8, 0x4b, 0xb0, 0xb4, 0x16, 0x26, 0xb6, 0xd5, 0x93, 0x6c, 0xbc,
+ 0x39, 0xee, 0x49, 0xab, 0xce, 0x22, 0x1f, 0x92, 0x60, 0x3b, 0xe9, 0x53,
+ 0x5d, 0x81, 0x1d, 0xce, 0x44, 0x9b, 0x01, 0xe2, 0xf9, 0x0c, 0x45, 0xaa,
+ 0xaa, 0xbf, 0x1f, 0x23, 0xbc, 0xa3, 0x99, 0xfa, 0xe6, 0xe2, 0xc9, 0x3f,
+ 0xc7, 0xf9, 0x60, 0x55, 0xdf, 0x64, 0x56, 0x2f, 0x91, 0x2e, 0xde, 0x92,
+ 0x97, 0xc8, 0x1a, 0xab, 0x18, 0x7b, 0xa5, 0x4b, 0xf5, 0xc7, 0x85, 0xd5,
+ 0xc3, 0x4b, 0x21, 0xb7, 0xe4, 0xef, 0x72, 0x60, 0x41, 0x41, 0x23, 0x16,
+ 0x8b, 0xb6, 0x73, 0x51, 0x8e, 0xb2, 0x44, 0xc2, 0x48, 0xd1, 0x6c, 0x3b,
+ 0xde, 0x1e, 0x10, 0x2f, 0x1d, 0x83, 0x21, 0xe8, 0x9c, 0x15, 0x23, 0x4a,
+ 0x25, 0x6d, 0xa0, 0x18, 0x0c, 0x31, 0x6a, 0xb0, 0x19, 0xa3, 0x93, 0x36,
+ 0x89, 0x4a, 0x87, 0x15, 0x70, 0xd7, 0x8d, 0xb6, 0x04, 0x0a, 0x49, 0xd5,
+ 0xba, 0x10, 0x69, 0x74, 0xab, 0xc8, 0xbb, 0x97, 0x14, 0x12, 0xa1, 0x77,
+ 0x6b, 0x06, 0xde, 0xaa, 0xae, 0x4e, 0x77, 0xf4, 0x8f, 0x22, 0xb7, 0xdf,
+ 0x5b, 0x84, 0xe9, 0x2c, 0xb7, 0x1a, 0x63, 0x12, 0x95, 0xb3, 0xf5, 0x96,
+ 0x2e, 0x1d, 0x81, 0x56, 0x8b, 0xb5, 0x2e, 0x06, 0x80, 0x1e, 0x7f, 0xe4,
+ 0x38, 0x82, 0x02, 0xa6, 0x0c, 0xf1, 0x98, 0x8d, 0x5b, 0x3d, 0x56, 0x6c,
+ 0xb6, 0xb5, 0xac, 0x36, 0x4f, 0x3a, 0x3a, 0x36, 0xdc, 0xef, 0xed, 0x2e,
+ 0x7a, 0x7c, 0xf9, 0x7f, 0xb9, 0xbf, 0x88, 0x09, 0x31, 0x0e, 0xa1, 0x39,
+ 0xf2, 0x76, 0x2e, 0x37, 0xc8, 0x68, 0x7f, 0xfe, 0x7f, 0x83, 0xec, 0xd3,
+ 0x19, 0x64, 0xce, 0x15, 0x0e, 0x09, 0xcb, 0xdf, 0x21, 0x0b, 0xad, 0xbd,
+ 0x0c, 0x5e, 0xb1, 0x30, 0xaa, 0xbd, 0xa7, 0xd8, 0x05, 0xe8, 0x3e, 0xdc,
+ 0xcb, 0x35, 0xce, 0x1e, 0x25, 0x3e, 0xeb, 0x5a, 0x99, 0x63, 0x35, 0x18,
+ 0x56, 0x4c, 0x5a, 0x70, 0xd8, 0x59, 0x3d, 0xf5, 0x74, 0x52, 0xc2, 0xdc,
+ 0xbe, 0x23, 0xb3, 0xf2, 0x7c, 0x4c, 0x91, 0xd7, 0x25, 0xf0, 0x33, 0xb2,
+ 0xab, 0xff, 0xeb, 0xb9, 0xd5, 0xea, 0x3e, 0xa3, 0xc7, 0xff, 0x3f, 0x87,
+ 0xfa, 0x04, 0x1c, 0xca, 0x25, 0x9c, 0x75, 0x2c, 0x76, 0xc3, 0x5a, 0x44,
+ 0xf8, 0xaf, 0xde, 0xe8, 0x0d, 0x1b, 0xdc, 0x46, 0xcc, 0x65, 0xfe, 0xfa,
+ 0xe3, 0xd3, 0xbf, 0x3f, 0xe1, 0xae, 0xbd, 0x67, 0xed, 0x2c, 0xc4, 0x32,
+ 0x7a, 0xf9, 0xfc, 0xe0, 0xb4, 0x2b, 0xaf, 0x86, 0xcf, 0xbe, 0x23, 0xef,
+ 0xec, 0x13, 0xa7, 0x9d, 0xb9, 0x84, 0xf7, 0xf1, 0x6c, 0xcf, 0xf2, 0xd1,
+ 0x2e, 0xfe, 0xf7, 0x0f, 0x72, 0x60, 0xcd, 0xd3, 0x74, 0xcc, 0xfd, 0xaf,
+ 0xa2, 0x7d, 0xfa, 0x47, 0x20, 0x4d, 0x37, 0x69, 0x76, 0x2a, 0xc4, 0x14,
+ 0x43, 0x3f, 0xf5, 0x9a, 0x5e, 0x06, 0x35, 0x3e, 0x97, 0x06, 0xc0, 0xd2,
+ 0xb1, 0x2d, 0x90, 0x06, 0xba, 0xc1, 0x88, 0xd4, 0x34, 0x33, 0x65, 0x2d,
+ 0x6a, 0x97, 0x3a, 0x58, 0x03, 0x35, 0x32, 0x4d, 0x86, 0xd4, 0x14, 0x70,
+ 0xe0, 0x3e, 0xa3, 0x8d, 0xe1, 0x82, 0x57, 0xf2, 0xc6, 0x7e, 0x0a, 0xa7,
+ 0x41, 0xe6, 0x94, 0x16, 0xb5, 0xbb, 0xc5, 0x9d, 0xfc, 0xe8, 0xa8, 0xc2,
+ 0x47, 0xfe, 0x0f, 0x4e, 0x5d, 0x70, 0x76, 0xa1, 0x79, 0xf8, 0x4b, 0xce,
+ 0xfe, 0x41, 0x65, 0x9f, 0xb3, 0x80, 0xdd, 0xad, 0xad, 0xe6, 0xd7, 0xac,
+ 0x9a, 0x84, 0xdd, 0xda, 0x8d, 0x7e, 0xa0, 0xc1, 0x59, 0x33, 0xb3, 0xdd,
+ 0xd2, 0x44, 0x7b, 0x23, 0xbb, 0x6a, 0x18, 0x9a, 0x44, 0x41, 0x5d, 0xf8,
+ 0x5c, 0xb2, 0x70, 0x3f, 0xa7, 0x41, 0x0d, 0x98, 0x04, 0x3c, 0x5e, 0x94,
+ 0x21, 0xa7, 0x65, 0xe2, 0x9e, 0x36, 0xa7, 0xf0, 0xf7, 0x9b, 0xe5, 0x90,
+ 0x99, 0x43, 0x19, 0x78, 0x78, 0xf6, 0x79, 0x3f, 0x79, 0x48, 0x1b, 0x0d,
+ 0x48, 0x3a, 0xb6, 0x54, 0xd4, 0x78, 0xe7, 0xbc, 0x6d, 0x3a, 0xbe, 0x58,
+ 0x18, 0xad, 0x7f, 0xf8, 0xc8, 0x17, 0xce, 0x7b, 0x4b, 0x19, 0x94, 0x60,
+ 0x17, 0x56, 0x4e, 0x6d, 0x28, 0x5d, 0x88, 0x02, 0xc6, 0xe5, 0x0c, 0x0a,
+ 0x4c, 0x79, 0xdb, 0x60, 0x18, 0x13, 0x61, 0x5b, 0x1e, 0x90, 0x05, 0xb5,
+ 0xef, 0xac, 0xa8, 0xf1, 0xaa, 0xf2, 0xcf, 0xb4, 0x1e, 0x89, 0xd6, 0xc0,
+ 0x45, 0xbb, 0x88, 0x0b, 0x00, 0xd2, 0xab, 0xe4, 0x44, 0x6a, 0x90, 0x61,
+ 0xb0, 0x53, 0xe5, 0x4d, 0x14, 0x6e, 0x50, 0xa3, 0x65, 0xfb, 0x52, 0x90,
+ 0xd0, 0x81, 0x35, 0x46, 0xb7, 0xe1, 0xc6, 0xb9, 0x0d, 0xf6, 0xd6, 0xdd,
+ 0x89, 0x13, 0xfe, 0xb7, 0xbd, 0x0d, 0x1e, 0x9b, 0x63, 0x7e, 0x68, 0x6f,
+ 0x44, 0x43, 0x25, 0xc4, 0x5c, 0x3a, 0x74, 0x37, 0xc5, 0xc3, 0xd4, 0xf7,
+ 0x08, 0xf9, 0x2d, 0xaa, 0xd4, 0x6d, 0x6f, 0xc4, 0x4f, 0x52, 0x52, 0xad,
+ 0x2d, 0xd6, 0xe2, 0xc2, 0xef, 0x30, 0x9f, 0x76, 0x32, 0x4d, 0xae, 0x05,
+ 0x96, 0xb6, 0xbd, 0xc6, 0xb3, 0x97, 0xbb, 0xb4, 0x9a, 0xf3, 0x97, 0x67,
+ 0xdb, 0x83, 0x2d, 0xa3, 0x3b, 0x54, 0x94, 0x48, 0x4d, 0x08, 0xea, 0xdf,
+ 0x1e, 0x1d, 0x9c, 0x9d, 0x2b, 0x16, 0x7d, 0x23, 0xfe, 0xe5, 0x53, 0x8e,
+ 0x6d, 0xab, 0x00, 0x03, 0xc3, 0xb9, 0xdc, 0xc0, 0x95, 0x51, 0x60, 0x76,
+ 0x5c, 0x1b, 0x2f, 0x4d, 0x07, 0x47, 0x4f, 0x1a, 0x41, 0xb3, 0x71, 0x65,
+ 0x98, 0xdf, 0x7e, 0x00, 0x0e, 0x5a, 0x6a, 0xf2, 0x0d, 0x16, 0x00, 0xdd,
+ 0x0f, 0xaa, 0xdf, 0x2d, 0xa6, 0x98, 0x15, 0x8e, 0xf3, 0x34, 0x5d, 0xbd,
+ 0x55, 0x77, 0xc9, 0xbf, 0xbb, 0xfe, 0x29, 0x62, 0xe9, 0xe7, 0x95, 0x59,
+ 0xac, 0x6e, 0x16, 0x27, 0xf1, 0x3a, 0xfd, 0x96, 0x3c, 0xc1, 0x4a, 0xad,
+ 0xf3, 0x9c, 0xe4, 0x26, 0x4c, 0x94, 0x1d, 0xd5, 0xd4, 0x78, 0x22, 0xb9,
+ 0x05, 0xb7, 0xb9, 0x75, 0xb6, 0x0f, 0x9c, 0xa4, 0xd6, 0x1c, 0x7c, 0x65,
+ 0x8a, 0x6f, 0xad, 0x6d, 0x35, 0x89, 0x2f, 0xe9, 0x89, 0xad, 0x31, 0x88,
+ 0xce, 0xdf, 0x13, 0x54, 0x4f, 0x4e, 0x1b, 0xec, 0x53, 0xfa, 0xa2, 0x2e,
+ 0xe2, 0xd1, 0x14, 0xab, 0x51, 0x62, 0xe0, 0x26, 0x9e, 0x4b, 0xee, 0x0c,
+ 0x7d, 0xad, 0x79, 0x3a, 0x65, 0xfc, 0xe6, 0x68, 0x9a, 0x0d, 0x95, 0xde,
+ 0x9b, 0x4d, 0x84, 0x08, 0xf0, 0x8f, 0x25, 0x0b, 0xc3, 0x69, 0xf1, 0x98,
+ 0x6d, 0x6d, 0x10, 0x66, 0x60, 0x7c, 0x51, 0x71, 0x0a, 0x2f, 0x9a, 0x39,
+ 0xea, 0xd7, 0x5c, 0xa7, 0xa1, 0x0d, 0x8e, 0x05, 0xa2, 0xc8, 0xa4, 0x70,
+ 0x0f, 0xbc, 0x24, 0x3b, 0x0a, 0x35, 0x38, 0x4f, 0x48, 0x7b, 0x41, 0x03,
+ 0x80, 0x48, 0x58, 0xc6, 0xee, 0xac, 0x8c, 0x59, 0xce, 0x5e, 0xc4, 0x36,
+ 0x61, 0xf1, 0x92, 0x3d, 0xd7, 0x25, 0x67, 0x91, 0x9f, 0x9c, 0x35, 0xc6,
+ 0xa9, 0x6a, 0xea, 0xe4, 0xe1, 0xf4, 0x56, 0xf2, 0xbc, 0xa3, 0xf3, 0x32,
+ 0xbb, 0x4a, 0x46, 0x37, 0x11, 0x98, 0x36, 0x53, 0x89, 0xd3, 0xe0, 0xee,
+ 0x98, 0x5e, 0x59, 0xcb, 0x9d, 0x8c, 0x81, 0xb3, 0xb9, 0x85, 0x5c, 0xef,
+ 0x11, 0x85, 0x08, 0x4c, 0x72, 0x2f, 0xb2, 0x6d, 0x2f, 0xf4, 0xde, 0xb4,
+ 0xdb, 0x5e, 0x4c, 0xa3, 0xe8, 0xfb, 0x69, 0xcb, 0xed, 0x08, 0x2f, 0x50,
+ 0xbd, 0x32, 0x02, 0x9d, 0x2e, 0xa1, 0xdb, 0x4e, 0x8e, 0xad, 0x3d, 0x8e,
+ 0xdc, 0x73, 0xc5, 0xd1, 0x46, 0x49, 0xb0, 0x0f, 0xcb, 0xe8, 0x32, 0x05,
+ 0xfd, 0x79, 0x70, 0x1f, 0x7e, 0xd6, 0x8e, 0x9a, 0xb9, 0xdc, 0xed, 0x63,
+ 0xf9, 0x99, 0xd9, 0x82, 0x5b, 0xc3, 0x54, 0xf7, 0xe0, 0x67, 0x66, 0xf0,
+ 0xfb, 0x90, 0x85, 0x5d, 0xd9, 0x8a, 0x28, 0x43, 0xe5, 0x94, 0x70, 0x4b,
+ 0x5a, 0x67, 0x0d, 0x97, 0xba, 0xbd, 0x91, 0xeb, 0x58, 0x1e, 0x47, 0x08,
+ 0x92, 0x84, 0x60, 0x49, 0xc0, 0x8e, 0x68, 0xdb, 0x6d, 0x44, 0x6f, 0x80,
+ 0x03, 0x80, 0xb6, 0x85, 0x47, 0xb1, 0x09, 0xb2, 0x55, 0x00, 0xbc, 0x04,
+ 0x28, 0x8f, 0x63, 0x1a, 0x3e, 0x20, 0xd9, 0x39, 0xa7, 0xbf, 0xd6, 0x5a,
+ 0x97, 0x6d, 0x9f, 0xf4, 0x70, 0x39, 0x80, 0xcd, 0xa0, 0xc0, 0x47, 0xe3,
+ 0x7d, 0x7e, 0x51, 0x52, 0x57, 0x35, 0xaf, 0x16, 0x14, 0x19, 0xa1, 0xcc,
+ 0x7f, 0x5b, 0x2a, 0x0b, 0x01, 0xf0, 0x30, 0xa1, 0xe3, 0xfa, 0x1b, 0x45,
+ 0x52, 0xcf, 0xb6, 0x25, 0x11, 0xad, 0x76, 0x10, 0x3a, 0xbc, 0x9c, 0x34,
+ 0xed, 0xa2, 0x6e, 0x79, 0xe6, 0xc9, 0x3c, 0xcd, 0x69, 0x30, 0x2c, 0x35,
+ 0x4b, 0xa5, 0xf4, 0xae, 0x4c, 0x7f, 0xe5, 0xf8, 0xe9, 0x90, 0x1b, 0x35,
+ 0x5d, 0xa4, 0x39, 0xe8, 0xd9, 0xed, 0xd0, 0xc9, 0x74, 0x9c, 0xcc, 0xcd,
+ 0x6b, 0xf0, 0xe9, 0xda, 0x25, 0x0f, 0xd5, 0x14, 0x2e, 0xce, 0xa4, 0xdd,
+ 0x1d, 0xdf, 0xf6, 0x59, 0x0b, 0xdc, 0x3f, 0xcc, 0xd4, 0xc5, 0x32, 0x73,
+ 0x86, 0xd5, 0x60, 0xe9, 0x80, 0xb8, 0xf7, 0x15, 0x5c, 0xa8, 0x59, 0x6a,
+ 0x20, 0x3e, 0xd0, 0xdb, 0xe5, 0x25, 0x47, 0xa5, 0xd3, 0x09, 0x87, 0x92,
+ 0xa9, 0xc0, 0x39, 0x9b, 0xcd, 0xd2, 0xb1, 0xc9, 0xc9, 0xa7, 0x1f, 0xe3,
+ 0xa2, 0xc4, 0x6b, 0x04, 0x6b, 0x63, 0x0c, 0x7d, 0x3a, 0x6b, 0x34, 0xfc,
+ 0xfb, 0x01, 0x34, 0x52, 0x78, 0x06, 0x69, 0x05, 0xfe, 0x83, 0xd4, 0x72,
+ 0x46, 0x23, 0xe1, 0x2e, 0x9d, 0x61, 0x2b, 0xfa, 0xd1, 0xa5, 0x6b, 0xd3,
+ 0x24, 0xd3, 0x6b, 0x0c, 0x8f, 0x73, 0xaa, 0x7d, 0xe4, 0x77, 0x4c, 0xc3,
+ 0xfd, 0xc3, 0x0d, 0xc1, 0xc3, 0xab, 0x2e, 0xb1, 0x24, 0xb9, 0xe1, 0x87,
+ 0x58, 0xba, 0x39, 0x08, 0xda, 0x83, 0x35, 0xac, 0x29, 0x36, 0x26, 0x30,
+ 0xba, 0x5e, 0x1c, 0x4f, 0xea, 0xb9, 0x21, 0xf6, 0xdb, 0xef, 0x3e, 0x3e,
+ 0x15, 0x3d, 0x7c, 0x6e, 0x73, 0xd7, 0xfc, 0x77, 0xb8, 0xf3, 0xb4, 0x22,
+ 0x0f, 0x46, 0x74, 0x99, 0xab, 0xa2, 0x9a, 0xde, 0x41, 0x4d, 0x61, 0x3e,
+ 0x02, 0x5a, 0x4d, 0x55, 0xc7, 0xf0, 0x49, 0xc5, 0x52, 0x45, 0xa5, 0x93,
+ 0xe1, 0x67, 0x17, 0x39, 0x4a, 0x6d, 0x97, 0xdf, 0xdf, 0xce, 0xf0, 0xa5,
+ 0x9a, 0x11, 0x91, 0xa3, 0x04, 0xd6, 0x61, 0xbc, 0xa0, 0xea, 0xcb, 0x59,
+ 0x46, 0x49, 0xc8, 0x9b, 0xc5, 0x64, 0x42, 0x48, 0xda, 0x20, 0x4e, 0xea,
+ 0x32, 0x1b, 0x2e, 0x02, 0x79, 0x0d, 0xf3, 0x22, 0xc3, 0xa6, 0x27, 0x8a,
+ 0x16, 0xc7, 0x73, 0xda, 0x39, 0x18, 0xc0, 0xf7, 0x2e, 0xc7, 0xdd, 0xde,
+ 0x85, 0xa5, 0x87, 0x7f, 0x8f, 0x96, 0x8a, 0xe1, 0x59, 0xee, 0x47, 0x08,
+ 0xde, 0x5a, 0xef, 0x25, 0x05, 0x42, 0xc4, 0xd1, 0xd0, 0x0a, 0xb6, 0x3c,
+ 0xad, 0x60, 0x99, 0x5c, 0xf8, 0x21, 0x29, 0x11, 0xbd, 0x71, 0xcf, 0xd8,
+ 0xd1, 0x8a, 0xfa, 0x92, 0x4a, 0x3f, 0x58, 0x9c, 0x24, 0xf6, 0xb3, 0xd1,
+ 0x53, 0xa7, 0x2b, 0x98, 0xc1, 0x6d, 0xd5, 0x7a, 0x60, 0x43, 0xf8, 0x8a,
+ 0x22, 0x2c, 0xe5, 0x35, 0xf8, 0x5a, 0x00, 0xbc, 0x5c, 0x24, 0x46, 0xc5,
+ 0x39, 0x5a, 0xfc, 0x4d, 0x0d, 0xa9, 0xd4, 0xe6, 0x1b, 0xe5, 0x8d, 0xe6,
+ 0x85, 0xa9, 0x38, 0x53, 0x4a, 0x72, 0xde, 0x02, 0x91, 0x07, 0x0a, 0x30,
+ 0x3b, 0x67, 0xd1, 0xc9, 0x9f, 0x17, 0x79, 0xcc, 0x63, 0x87, 0x5d, 0xb2,
+ 0x8c, 0x98, 0x37, 0x69, 0xa9, 0xcf, 0x26, 0x4d, 0xc7, 0xf4, 0x51, 0x55,
+ 0x09, 0x66, 0xce, 0xc6, 0x73, 0x2f, 0x28, 0xcf, 0xd2, 0xb6, 0x0d, 0xe2,
+ 0x6d, 0x34, 0xdc, 0x00, 0xdb, 0x08, 0x18, 0xc0, 0xd6, 0x29, 0xac, 0x72,
+ 0x4a, 0xfd, 0xc7, 0xd2, 0x7c, 0x54, 0xde, 0x84, 0x5b, 0xde, 0xdd, 0x55,
+ 0xbe, 0x7c, 0x52, 0xb1, 0xd9, 0x90, 0x9b, 0xcc, 0x3a, 0x56, 0x10, 0x9b,
+ 0xfe, 0x6d, 0x26, 0xd0, 0x3c, 0xdc, 0x5a, 0x91, 0x79, 0x06, 0xac, 0x8b,
+ 0x30, 0xd2, 0xa7, 0xda, 0xf0, 0xce, 0x57, 0x3a, 0x28, 0x75, 0xc9, 0xdf,
+ 0x27, 0x69, 0x7d, 0x6c, 0x71, 0xe8, 0x47, 0xa3, 0xb4, 0x6b, 0xcb, 0x4c,
+ 0xaa, 0x2e, 0x61, 0x66, 0x2e, 0x11, 0x3c, 0xd2, 0xda, 0x45, 0x1e, 0x0f,
+ 0xb4, 0x8c, 0xa4, 0x48, 0x09, 0x55, 0xe3, 0x68, 0xe0, 0x02, 0x3d, 0x59,
+ 0xb3, 0xec, 0xe2, 0x92, 0xb4, 0x21, 0x86, 0xb4, 0x93, 0x46, 0x8a, 0x93,
+ 0x05, 0x75, 0xf7, 0x35, 0xf0, 0xaf, 0xcb, 0xed, 0x9d, 0x95, 0x2a, 0x30,
+ 0x23, 0x1f, 0x18, 0x24, 0xc0, 0xcb, 0xee, 0xc1, 0xb8, 0x80, 0x57, 0xcf,
+ 0x77, 0x57, 0x28, 0xbd, 0x14, 0x2a, 0xef, 0xb7, 0x78, 0x94, 0x5c, 0x82,
+ 0x51, 0x36, 0xbf, 0x6c, 0xb4, 0x2f, 0x89, 0x77, 0xfa, 0xfc, 0xd6, 0xd5,
+ 0x8e, 0x27, 0xc1, 0xce, 0x5e, 0x36, 0x85, 0x97, 0x86, 0xc5, 0xe0, 0xa0,
+ 0xc0, 0x34, 0x30, 0xb0, 0xb0, 0x86, 0x13, 0x5c, 0xed, 0x48, 0x0d, 0x34,
+ 0xee, 0xd3, 0x75, 0xdb, 0x01, 0x2a, 0x04, 0xeb, 0x56, 0x35, 0xb0, 0x0d,
+ 0x05, 0x97, 0x82, 0x5e, 0xc6, 0xf7, 0xae, 0x81, 0x8f, 0x61, 0x33, 0x07,
+ 0xcb, 0x04, 0xf5, 0x03, 0xda, 0xab, 0x43, 0x20, 0x19, 0x4c, 0x1b, 0x7c,
+ 0xb2, 0xfd, 0xf4, 0xc9, 0xc6, 0xb2, 0xa3, 0xb4, 0x1f, 0xf8, 0x29, 0x52,
+ 0x34, 0x69, 0xdc, 0xd5, 0x04, 0x09, 0x3e, 0x8d, 0xdd, 0x4d, 0xf8, 0x44,
+ 0xf0, 0x5f, 0x3b, 0x83, 0xc6, 0x32, 0x95, 0xdd, 0x54, 0x16, 0x13, 0xd8,
+ 0x03, 0xec, 0xce, 0xc7, 0x78, 0x61, 0x48, 0x16, 0xab, 0x0f, 0x04, 0xaf,
+ 0xd2, 0x70, 0x91, 0x4d, 0x09, 0xf7, 0x40, 0xb9, 0x25, 0x71, 0xca, 0x16,
+ 0x97, 0x9a, 0xf9, 0x39, 0xb0, 0xad, 0xa8, 0x25, 0xf5, 0xb1, 0xdc, 0xd5,
+ 0x15, 0xb1, 0x47, 0x30, 0xde, 0x26, 0x4f, 0x6c, 0x3d, 0xad, 0xae, 0xb6,
+ 0x05, 0x00, 0x5a, 0xfe, 0x35, 0xd8, 0x0e, 0xe0, 0x53, 0xeb, 0xef, 0x76,
+ 0x1c, 0x5a, 0xb3, 0x23, 0x7e, 0x3c, 0xad, 0xed, 0x7e, 0x0c, 0xad, 0xed,
+ 0xde, 0x8f, 0xd6, 0x9e, 0x3e, 0x7e, 0xf2, 0x6c, 0x29, 0xad, 0x39, 0x5b,
+ 0xf6, 0x69, 0x68, 0x6d, 0xf7, 0x41, 0x68, 0xcd, 0x59, 0xe6, 0x7f, 0x13,
+ 0x5a, 0x73, 0xa8, 0xff, 0x81, 0x68, 0x4d, 0xab, 0x13, 0xf7, 0x51, 0x69,
+ 0xfb, 0xda, 0x03, 0xfd, 0x95, 0xe2, 0x51, 0x42, 0x7c, 0x41, 0xb0, 0x52,
+ 0xd6, 0x7e, 0xe4, 0x1d, 0x0f, 0x48, 0x5d, 0x3a, 0x00, 0x92, 0x32, 0x85,
+ 0x51, 0x8f, 0xae, 0xa6, 0xbd, 0x9a, 0xab, 0x92, 0x44, 0xf3, 0x29, 0x32,
+ 0xff, 0xb5, 0x78, 0xad, 0x2f, 0x7d, 0x56, 0x55, 0x15, 0x73, 0x90, 0x51,
+ 0xb9, 0xa8, 0xf5, 0xf3, 0xd6, 0x4c, 0x73, 0xb6, 0x0d, 0x7f, 0xf6, 0xe7,
+ 0xaa, 0xd4, 0xe2, 0xd9, 0x05, 0xb6, 0xb6, 0xfe, 0x50, 0xdf, 0xbf, 0x2a,
+ 0x95, 0xa9, 0xc1, 0xa9, 0xb3, 0x6d, 0x12, 0xc4, 0x0d, 0xe8, 0x66, 0xd2,
+ 0xfe, 0x34, 0x88, 0xdf, 0x20, 0x6e, 0x16, 0xe3, 0x49, 0xd6, 0xbd, 0x1b,
+ 0x62, 0x8f, 0xca, 0x09, 0x68, 0x93, 0x11, 0x8d, 0x21, 0x26, 0x18, 0x9e,
+ 0x24, 0x5e, 0x8a, 0x00, 0xc4, 0x2a, 0x43, 0xd4, 0x54, 0xed, 0x32, 0xe6,
+ 0x81, 0x24, 0x89, 0xa2, 0x32, 0xe0, 0x2e, 0x86, 0x54, 0xe4, 0x0a, 0x34,
+ 0x05, 0x2c, 0xe4, 0x83, 0x17, 0x66, 0x81, 0xc6, 0xd3, 0xde, 0x06, 0xd0,
+ 0x00, 0x8a, 0x4a, 0x6b, 0x6e, 0x71, 0x62, 0x26, 0x6b, 0xba, 0x96, 0xed,
+ 0x37, 0x54, 0xc1, 0x46, 0x98, 0x93, 0x34, 0x21, 0xdd, 0x88, 0x54, 0x53,
+ 0x02, 0xc3, 0x15, 0x0c, 0x9d, 0x42, 0xc0, 0xae, 0x90, 0xba, 0x7e, 0xc8,
+ 0xf2, 0x31, 0xa6, 0x3d, 0x8b, 0xc1, 0x39, 0x05, 0xcd, 0x92, 0xd3, 0xdd,
+ 0xbd, 0xe1, 0x46, 0xc9, 0x5c, 0x42, 0x35, 0xff, 0x5d, 0x20, 0x01, 0x5a,
+ 0xe7, 0xff, 0xf0, 0x79, 0xb2, 0xee, 0xe8, 0xab, 0x5f, 0x01, 0x77, 0x69,
+ 0xf1, 0xf1, 0x6a, 0x37, 0xc0, 0x36, 0x6d, 0x22, 0xf2, 0x77, 0x2f, 0x44,
+ 0x13, 0xca, 0xa4, 0x85, 0x52, 0x8a, 0xb4, 0x41, 0xf5, 0xda, 0x1a, 0x8f,
+ 0x15, 0xb2, 0x0d, 0x82, 0x6e, 0xc5, 0x73, 0x93, 0xd6, 0x53, 0xa3, 0x1b,
+ 0x6d, 0x6a, 0x92, 0x7b, 0x12, 0x0a, 0x2e, 0x22, 0x46, 0xe9, 0xd1, 0xe1,
+ 0xb9, 0x87, 0xa2, 0x37, 0x2e, 0x02, 0x68, 0x7e, 0xf2, 0xa1, 0x9c, 0xa9,
+ 0x63, 0xdf, 0x6c, 0x00, 0x3c, 0x55, 0x9e, 0x2c, 0x21, 0x60, 0xb2, 0xda,
+ 0xcf, 0xaa, 0xa6, 0x68, 0x07, 0xb7, 0x8e, 0xa2, 0xf3, 0x88, 0xe2, 0xe7,
+ 0xb8, 0xd6, 0xf1, 0x62, 0x36, 0x97, 0x4f, 0xa2, 0x16, 0x11, 0x19, 0xeb,
+ 0xc3, 0x84, 0xc3, 0x2b, 0x38, 0x5c, 0x49, 0x19, 0xea, 0x84, 0x42, 0xbc,
+ 0x59, 0x20, 0x11, 0x38, 0x73, 0x4a, 0xef, 0xb3, 0xc4, 0x5e, 0x14, 0x61,
+ 0xfb, 0xb8, 0x6e, 0x36, 0x69, 0xf5, 0x3b, 0xa1, 0x8c, 0xd3, 0xe1, 0xe2,
+ 0x42, 0x7b, 0x9a, 0x19, 0x58, 0xdf, 0x26, 0xcf, 0x22, 0x28, 0x08, 0x6c,
+ 0x80, 0x9e, 0x0a, 0x18, 0x0f, 0xc6, 0x88, 0x2a, 0x0c, 0x5e, 0x56, 0xbe,
+ 0x91, 0x35, 0xba, 0x25, 0x17, 0xbc, 0xe3, 0x48, 0x1f, 0xda, 0x2d, 0xd3,
+ 0x31, 0xcd, 0xca, 0x74, 0xdf, 0xb5, 0x5c, 0x7b, 0x50, 0xf1, 0x07, 0x21,
+ 0x93, 0x95, 0xae, 0x44, 0x9b, 0x00, 0xfa, 0xad, 0xe3, 0xa7, 0x8b, 0xd2,
+ 0xa6, 0xe8, 0xf6, 0x6d, 0x77, 0x53, 0xcc, 0x1f, 0x35, 0xaf, 0x4e, 0x3d,
+ 0x9a, 0xc7, 0x13, 0x10, 0x87, 0x05, 0x18, 0xe7, 0x5f, 0x84, 0xb1, 0x80,
+ 0xb8, 0xf0, 0x15, 0xfd, 0xc0, 0x87, 0xa7, 0xd1, 0x0b, 0x14, 0x9d, 0x68,
+ 0xc9, 0x47, 0xeb, 0xa4, 0x48, 0x3e, 0xda, 0xde, 0x45, 0x88, 0xd4, 0xc6,
+ 0x6f, 0x48, 0x6f, 0x80, 0x1f, 0x79, 0x98, 0xed, 0xa0, 0x2e, 0x54, 0xe4,
+ 0x3c, 0x24, 0x2b, 0x9d, 0x2b, 0x4f, 0x08, 0x51, 0x03, 0xe8, 0x14, 0x5b,
+ 0x82, 0x12, 0x9f, 0x4e, 0x93, 0x72, 0x9a, 0x21, 0xa5, 0x5f, 0x49, 0xa7,
+ 0x3a, 0x31, 0xdc, 0x83, 0xfe, 0x8c, 0x68, 0x5d, 0xf1, 0xdf, 0x59, 0x75,
+ 0x41, 0x71, 0x61, 0xbd, 0xc6, 0x07, 0x87, 0x7f, 0xdd, 0x50, 0x5b, 0x5f,
+ 0x63, 0x90, 0xd8, 0x71, 0x26, 0x04, 0x5b, 0x85, 0x7d, 0xee, 0x18, 0x5a,
+ 0x4a, 0x8e, 0x30, 0x1d, 0x3b, 0xba, 0xfb, 0x52, 0x5a, 0x75, 0xf7, 0xb0,
+ 0x4d, 0x9f, 0x1f, 0xcf, 0x8f, 0xdd, 0xd1, 0x57, 0x25, 0xcb, 0xc6, 0xca,
+ 0x56, 0x53, 0xb8, 0x27, 0xf0, 0xdf, 0x34, 0x26, 0x34, 0xff, 0x36, 0xbd,
+ 0xe4, 0x05, 0x21, 0xf4, 0xb5, 0xc5, 0x21, 0x22, 0xb8, 0x2b, 0x34, 0x18,
+ 0x9c, 0xfe, 0xbb, 0xd7, 0x27, 0xcf, 0x8f, 0x5e, 0x1e, 0xfc, 0xc3, 0xb8,
+ 0xf7, 0x70, 0x70, 0x6d, 0x13, 0xf5, 0x2e, 0x4d, 0xaa, 0x9b, 0x77, 0xa0,
+ 0x81, 0xc1, 0x2f, 0xd7, 0x77, 0x37, 0xb0, 0x9b, 0xbd, 0x07, 0xc9, 0x7f,
+ 0x91, 0x36, 0x1b, 0x65, 0x32, 0x48, 0xa2, 0xd3, 0x02, 0x32, 0x08, 0xbe,
+ 0x57, 0xa5, 0x75, 0xd5, 0x88, 0x1f, 0x3a, 0x3d, 0x27, 0x58, 0x01, 0x37,
+ 0xed, 0x94, 0x98, 0xe7, 0x6a, 0x08, 0xc6, 0xf7, 0x61, 0xb1, 0x1e, 0x93,
+ 0xd5, 0xd4, 0xc9, 0x41, 0xa2, 0x2c, 0x82, 0xb0, 0x4f, 0x18, 0xe6, 0x19,
+ 0x29, 0x15, 0xae, 0x6b, 0xec, 0xf1, 0xd6, 0x60, 0x67, 0x63, 0xb9, 0xbb,
+ 0xd9, 0xd9, 0x40, 0x3f, 0xae, 0x68, 0xa8, 0xe5, 0x9e, 0x91, 0x45, 0x67,
+ 0xf0, 0xfb, 0x90, 0x8a, 0xae, 0x6b, 0x25, 0x4a, 0x79, 0xdd, 0xe7, 0xb9,
+ 0x87, 0x8b, 0x49, 0xa3, 0x35, 0x6e, 0x5c, 0x53, 0xa3, 0xf5, 0x74, 0x9a,
+ 0xa7, 0xb5, 0x00, 0x92, 0x45, 0xfb, 0xf0, 0xdf, 0xaf, 0x40, 0xe5, 0xf6,
+ 0x7a, 0x94, 0x25, 0x55, 0x65, 0x84, 0x8b, 0xd1, 0x35, 0xf1, 0x4d, 0x23,
+ 0xba, 0x06, 0xda, 0x1a, 0x26, 0x1d, 0x9b, 0x27, 0x41, 0xea, 0xed, 0x79,
+ 0x5a, 0xd9, 0xf9, 0x3f, 0x4e, 0x8f, 0xbe, 0xda, 0x47, 0xe5, 0xf1, 0x6b,
+ 0xc4, 0x1e, 0xad, 0x1a, 0x8a, 0x2b, 0xe1, 0xa2, 0x78, 0x5b, 0xf3, 0xe3,
+ 0xf3, 0xe3, 0xb3, 0xd3, 0x97, 0x27, 0x87, 0x5f, 0xed, 0xff, 0x88, 0xc1,
+ 0x06, 0x30, 0x79, 0x6e, 0x9c, 0x77, 0xcd, 0xcf, 0x22, 0x6d, 0xbe, 0xe8,
+ 0x0d, 0xf0, 0xfa, 0xe8, 0x87, 0x77, 0x47, 0xaf, 0xff, 0xfe, 0xd5, 0xfe,
+ 0x55, 0x52, 0xf6, 0xf1, 0xfb, 0xf8, 0x6d, 0xc4, 0x9b, 0xca, 0xaf, 0xb2,
+ 0xb2, 0xc8, 0x31, 0x89, 0x07, 0x6c, 0x8d, 0x32, 0xc3, 0x93, 0xf3, 0x13,
+ 0x97, 0x03, 0x5b, 0xf5, 0xc9, 0x7a, 0xd7, 0xd4, 0xb2, 0x45, 0x57, 0xf5,
+ 0xf6, 0xd6, 0x96, 0xec, 0xf2, 0x9d, 0xdd, 0x72, 0x7f, 0xed, 0x73, 0xd6,
+ 0xdb, 0x24, 0xbb, 0x18, 0x38, 0x4c, 0x01, 0x7d, 0x9c, 0xc3, 0xe9, 0xfb,
+ 0x2a, 0xfb, 0x2d, 0x8d, 0xf6, 0xc9, 0xa4, 0xf2, 0x7a, 0x95, 0x9f, 0xbf,
+ 0xc0, 0x5e, 0xe5, 0x67, 0x52, 0x7e, 0x84, 0xff, 0x8a, 0xbe, 0x7d, 0xf9,
+ 0xd7, 0xb3, 0xe3, 0xff, 0x3a, 0x32, 0x19, 0xc8, 0xb3, 0x45, 0x45, 0xae,
+ 0xce, 0xaf, 0x1f, 0x6f, 0xef, 0x28, 0xee, 0x36, 0xa9, 0x4b, 0xbe, 0x29,
+ 0x3f, 0x84, 0xa3, 0x78, 0x8f, 0xc0, 0xc3, 0xbf, 0x69, 0xbf, 0xa9, 0x26,
+ 0x90, 0xad, 0xe9, 0xdf, 0xac, 0x31, 0x47, 0x02, 0x75, 0x54, 0x59, 0xe3,
+ 0xe5, 0xe0, 0x4b, 0x6f, 0x10, 0x5a, 0x95, 0xb6, 0x21, 0x76, 0x9a, 0x55,
+ 0xc0, 0x7a, 0x24, 0xd5, 0x12, 0x73, 0xe3, 0x83, 0xa6, 0x21, 0x99, 0x9f,
+ 0x8d, 0x7d, 0xf8, 0x0c, 0x10, 0x6d, 0x8d, 0xf9, 0xb7, 0xb7, 0x76, 0x1e,
+ 0x45, 0xb5, 0xdf, 0x78, 0x10, 0xed, 0xfb, 0x25, 0x7c, 0x9f, 0xc6, 0x80,
+ 0xeb, 0xec, 0xb5, 0xaf, 0xf5, 0x7e, 0x15, 0x3e, 0x61, 0xa7, 0xe4, 0x9e,
+ 0xa0, 0x9a, 0x0b, 0xea, 0xc6, 0xc3, 0x5b, 0xab, 0xf7, 0x56, 0x7b, 0x04,
+ 0xde, 0xd6, 0x75, 0x68, 0x86, 0x1b, 0x48, 0xf1, 0x69, 0x4e, 0xa3, 0x73,
+ 0x92, 0xe4, 0xa6, 0xe9, 0x05, 0xa6, 0x00, 0xf1, 0x61, 0x55, 0xda, 0xa3,
+ 0x22, 0xa0, 0xa1, 0x83, 0x69, 0x97, 0x17, 0xd7, 0xd4, 0xb7, 0x28, 0xe2,
+ 0x26, 0x58, 0x73, 0xf2, 0xd0, 0x9b, 0xdc, 0x3a, 0x5e, 0x9a, 0x69, 0xd7,
+ 0xab, 0x66, 0x42, 0x77, 0x13, 0x23, 0x35, 0x17, 0xfc, 0xf3, 0x16, 0x77,
+ 0xdd, 0x2d, 0x02, 0xa0, 0xb9, 0x8b, 0x0f, 0x9b, 0x2a, 0xd7, 0x79, 0x7a,
+ 0x2b, 0x10, 0x90, 0xb3, 0x36, 0x21, 0x9f, 0xed, 0x2f, 0x77, 0x06, 0xdb,
+ 0x4f, 0x9e, 0x61, 0x5f, 0xab, 0xcd, 0xdb, 0x48, 0x47, 0xb6, 0xc3, 0xa1,
+ 0x9b, 0xdf, 0x88, 0xb9, 0xc1, 0xc7, 0xc5, 0x94, 0xa2, 0xbc, 0x8f, 0x7f,
+ 0xf5, 0xd8, 0x03, 0x95, 0x2b, 0x10, 0x01, 0xbd, 0x11, 0xbb, 0x2b, 0x61,
+ 0x4f, 0x14, 0x9d, 0xac, 0x81, 0xfd, 0x9c, 0x15, 0x63, 0x36, 0xa2, 0xb1,
+ 0x47, 0xb5, 0x24, 0x44, 0x07, 0xd8, 0x03, 0x67, 0xcd, 0x2b, 0xb6, 0x3f,
+ 0x5a, 0xe4, 0xf0, 0x38, 0x19, 0x25, 0x08, 0xb4, 0xdb, 0x31, 0xa4, 0x81,
+ 0x88, 0xf7, 0x6a, 0x81, 0x18, 0xa2, 0x1c, 0xab, 0x70, 0xf7, 0x71, 0x20,
+ 0x54, 0x19, 0x50, 0xd9, 0x87, 0x2d, 0xfa, 0x5a, 0xf9, 0x34, 0xba, 0xdf,
+ 0xa8, 0x17, 0xb5, 0xf4, 0xfa, 0x49, 0xa5, 0x8d, 0x30, 0x92, 0x73, 0xe9,
+ 0xe3, 0x0c, 0x52, 0x01, 0x92, 0x71, 0x13, 0xcc, 0x12, 0x54, 0x34, 0xd0,
+ 0x5c, 0x22, 0x42, 0x47, 0x39, 0x05, 0xeb, 0xac, 0xd4, 0xe3, 0x86, 0xa0,
+ 0xec, 0x14, 0x4c, 0xe2, 0x2d, 0x09, 0xd6, 0xf9, 0x51, 0x95, 0x88, 0x72,
+ 0xbf, 0x0b, 0xe1, 0xb2, 0xfc, 0x69, 0x12, 0x10, 0xa7, 0x45, 0xad, 0xcf,
+ 0xf0, 0x5b, 0x36, 0x98, 0xe1, 0x85, 0x5d, 0x8a, 0xc6, 0x3b, 0xc8, 0x90,
+ 0xc9, 0x46, 0x63, 0x83, 0x41, 0x71, 0x08, 0xd1, 0xd6, 0x48, 0x3f, 0xe3,
+ 0xc0, 0x7b, 0x6b, 0x4b, 0x3c, 0xc3, 0xb1, 0x0e, 0x02, 0x2a, 0x9e, 0xa1,
+ 0x66, 0xa9, 0x98, 0x7a, 0xee, 0xfb, 0xda, 0xdc, 0x61, 0x9c, 0x54, 0x97,
+ 0xd1, 0x7a, 0xbc, 0x61, 0x1a, 0x20, 0x66, 0xb5, 0xb1, 0xc9, 0xfd, 0x2a,
+ 0x2a, 0x78, 0xbe, 0x18, 0x2d, 0x66, 0xdc, 0x3f, 0x94, 0x5b, 0xea, 0x70,
+ 0x1e, 0xad, 0x94, 0x52, 0xa4, 0x42, 0x13, 0x38, 0xd9, 0x26, 0x67, 0xee,
+ 0x2b, 0x77, 0xcf, 0x02, 0x8d, 0x48, 0xbc, 0xc1, 0xf2, 0xf4, 0xda, 0x1d,
+ 0xcc, 0x7a, 0x73, 0xcc, 0x80, 0xc1, 0xac, 0x6f, 0xa7, 0x45, 0x24, 0x07,
+ 0x8e, 0xd3, 0x0f, 0x19, 0xf7, 0x89, 0xe0, 0x76, 0x4f, 0x74, 0xef, 0x14,
+ 0x60, 0x30, 0x01, 0xb5, 0x92, 0x82, 0xe8, 0xac, 0xeb, 0x86, 0x80, 0x70,
+ 0x27, 0xc9, 0x48, 0x7a, 0xb4, 0x96, 0x05, 0x06, 0x25, 0xe9, 0xb8, 0xc7,
+ 0x45, 0xab, 0xb5, 0x11, 0x6c, 0x20, 0xea, 0xca, 0x89, 0x5c, 0x00, 0xea,
+ 0xc5, 0x12, 0x32, 0x9f, 0x82, 0x52, 0xac, 0x75, 0x5d, 0x1f, 0x04, 0x01,
+ 0x77, 0xb5, 0x3e, 0xbb, 0xbf, 0x45, 0xbd, 0x1f, 0x60, 0xb6, 0xad, 0x6d,
+ 0xa0, 0xc0, 0x79, 0xb4, 0xb3, 0xb5, 0xb3, 0x1d, 0x6d, 0xef, 0xec, 0x6d,
+ 0x3f, 0xdb, 0xdb, 0xda, 0x5a, 0xa1, 0xf3, 0x2e, 0x8c, 0x12, 0x3f, 0xc8,
+ 0x30, 0xc4, 0x86, 0x56, 0x33, 0x9e, 0x80, 0xe6, 0x2f, 0x62, 0x6a, 0xbe,
+ 0xa6, 0x01, 0xcb, 0x37, 0xdc, 0xbd, 0x78, 0x56, 0xd4, 0xa9, 0x87, 0x61,
+ 0x5d, 0x4f, 0x2b, 0xac, 0x17, 0x89, 0xf6, 0xff, 0x7e, 0xf4, 0xe6, 0xec,
+ 0xf8, 0xe4, 0xb5, 0xaf, 0x3b, 0xbd, 0x3c, 0xdb, 0x88, 0xe4, 0x97, 0x48,
+ 0xb6, 0xa0, 0xf3, 0x55, 0xa6, 0xa9, 0x82, 0x0d, 0xb5, 0x63, 0xfe, 0x82,
+ 0x86, 0x84, 0xb9, 0xa1, 0x79, 0x96, 0xe3, 0x23, 0xed, 0xab, 0x32, 0x1a,
+ 0xa5, 0xf3, 0x9a, 0x4d, 0x7b, 0x79, 0xdc, 0x54, 0x00, 0x49, 0xb8, 0x9e,
+ 0x82, 0x10, 0x5b, 0x7d, 0xfd, 0xdb, 0xb6, 0xf9, 0xdb, 0x8e, 0xcf, 0xcd,
+ 0xf8, 0x17, 0xbb, 0x21, 0x5a, 0x6a, 0x47, 0xdd, 0x2b, 0x6e, 0xa2, 0xa1,
+ 0xf4, 0x49, 0x79, 0x65, 0xae, 0xa9, 0xe6, 0x18, 0xcb, 0x1d, 0x49, 0xb7,
+ 0xa4, 0x20, 0x88, 0xef, 0xa3, 0x8a, 0xfe, 0xf6, 0xf6, 0xf8, 0x30, 0xe6,
+ 0x5c, 0x11, 0x12, 0x20, 0x9b, 0xc0, 0x9b, 0x4c, 0x75, 0x88, 0xb7, 0xa0,
+ 0x30, 0x36, 0x82, 0x53, 0x8c, 0xba, 0x98, 0x33, 0x92, 0x18, 0xea, 0xd6,
+ 0xdc, 0x5e, 0xd0, 0xdd, 0xd1, 0xf6, 0x70, 0x58, 0x55, 0xd0, 0x78, 0x11,
+ 0x1e, 0xbe, 0x22, 0xc7, 0x64, 0xfb, 0xb9, 0xed, 0xd0, 0x73, 0xdb, 0xfe,
+ 0x73, 0x3b, 0xa1, 0xe7, 0x76, 0xfc, 0xe7, 0x76, 0x43, 0xcf, 0xed, 0x76,
+ 0x94, 0xdd, 0x29, 0x71, 0xdd, 0xb9, 0xf4, 0xea, 0x3e, 0x65, 0x77, 0x55,
+ 0xa7, 0x42, 0x21, 0xb3, 0xe3, 0xc7, 0xdd, 0xf9, 0xca, 0x39, 0x6f, 0xed,
+ 0xda, 0x90, 0xd8, 0x5d, 0xaf, 0x20, 0xdf, 0x41, 0xf3, 0xde, 0x56, 0xdf,
+ 0x09, 0xb9, 0xf5, 0xa3, 0xc8, 0x19, 0x50, 0xfc, 0x01, 0xe6, 0x27, 0xbb,
+ 0x03, 0x2f, 0x03, 0x47, 0x57, 0x62, 0xc2, 0x12, 0x16, 0x8e, 0xdc, 0x06,
+ 0x13, 0xbb, 0x62, 0x89, 0x71, 0xa8, 0xa4, 0x98, 0x62, 0x8b, 0xcb, 0x1c,
+ 0x72, 0xd3, 0x6a, 0x7b, 0x57, 0xd3, 0x1b, 0xa2, 0x7d, 0xf9, 0xcb, 0x22,
+ 0xab, 0xb9, 0x1b, 0x7d, 0x98, 0x37, 0x38, 0xcd, 0xd8, 0xd9, 0x1f, 0xcc,
+ 0xaf, 0x45, 0xf4, 0x5e, 0x65, 0x5b, 0xb1, 0xfb, 0x79, 0x30, 0x3e, 0xe0,
+ 0xb6, 0xc1, 0x67, 0xae, 0x88, 0xfc, 0x71, 0x5b, 0x88, 0x99, 0xe0, 0xec,
+ 0xa8, 0xdc, 0xe8, 0xd2, 0x64, 0xec, 0x88, 0xac, 0x36, 0xad, 0xb0, 0xf5,
+ 0x2b, 0x95, 0xb2, 0x71, 0xa4, 0xaf, 0x50, 0x8b, 0x9d, 0x64, 0x8c, 0x64,
+ 0x0b, 0x73, 0xcb, 0xe0, 0x8d, 0xa5, 0x1a, 0x67, 0x4f, 0x91, 0x87, 0x14,
+ 0xf0, 0xb7, 0x6f, 0x5e, 0x7a, 0xf6, 0xbe, 0x52, 0x05, 0x9e, 0xc0, 0xa0,
+ 0x4a, 0x37, 0x41, 0x72, 0x57, 0x9b, 0x94, 0x34, 0x25, 0x93, 0x5e, 0xd6,
+ 0xb3, 0xe9, 0x2d, 0xa1, 0x1b, 0x78, 0x17, 0x53, 0xa8, 0xa6, 0x37, 0xac,
+ 0xd8, 0x53, 0x4f, 0x27, 0xdb, 0x1d, 0x85, 0x6e, 0x0e, 0x9f, 0xab, 0x42,
+ 0xbb, 0xb4, 0x86, 0x43, 0xaf, 0x27, 0xa6, 0xa6, 0xe3, 0x5d, 0x87, 0xdb,
+ 0x0e, 0x3a, 0x11, 0xa9, 0xa7, 0xa4, 0x70, 0x6a, 0xfa, 0xa4, 0x69, 0x7f,
+ 0xc7, 0x26, 0x24, 0x57, 0xe5, 0x71, 0xf6, 0x96, 0x57, 0x1d, 0x94, 0x53,
+ 0x72, 0x98, 0x49, 0x93, 0x32, 0x9d, 0xb5, 0x4b, 0x34, 0x78, 0xb8, 0x8b,
+ 0x54, 0x68, 0xf7, 0x2a, 0xce, 0x7f, 0x0f, 0x77, 0x6c, 0x4f, 0x6d, 0xd2,
+ 0xcc, 0x92, 0x32, 0xb5, 0x36, 0xfd, 0xfd, 0xfe, 0xf8, 0xf7, 0xcd, 0xf9,
+ 0xe1, 0x33, 0xdf, 0x1d, 0x1c, 0x9d, 0xbd, 0xdb, 0xde, 0x79, 0xf6, 0xee,
+ 0xbb, 0xc3, 0x57, 0xef, 0xce, 0xbe, 0x3f, 0xd8, 0x79, 0xbc, 0x2a, 0xd2,
+ 0x8a, 0x0c, 0x46, 0xae, 0x8b, 0x45, 0x79, 0x45, 0xb5, 0xf1, 0x16, 0x79,
+ 0xbc, 0x31, 0xa1, 0xbd, 0x9a, 0xad, 0xe1, 0xfc, 0xa0, 0x13, 0xbc, 0x87,
+ 0x05, 0x2d, 0x04, 0xb4, 0xbb, 0x8f, 0x7f, 0x7e, 0xed, 0xad, 0x80, 0xd3,
+ 0xba, 0xdb, 0x98, 0x38, 0xe8, 0x81, 0x42, 0xa0, 0x69, 0x26, 0x39, 0xde,
+ 0x48, 0x22, 0x39, 0x37, 0x6b, 0xae, 0x08, 0xe7, 0xef, 0x11, 0x2d, 0xf6,
+ 0xce, 0xde, 0x9c, 0xf6, 0xfa, 0x92, 0x79, 0x0f, 0x33, 0xc4, 0xf0, 0xef,
+ 0x88, 0xfd, 0xf1, 0xd1, 0xe3, 0xad, 0xc7, 0x8f, 0x36, 0x06, 0x0e, 0xf3,
+ 0xa7, 0xb6, 0x09, 0x81, 0x52, 0x09, 0xfa, 0xa5, 0xc5, 0xed, 0x29, 0x5d,
+ 0x9d, 0x16, 0xf3, 0x51, 0x9a, 0x1f, 0xc8, 0x45, 0x71, 0x7d, 0xee, 0xf7,
+ 0xb2, 0xc4, 0x36, 0x16, 0x19, 0x4b, 0x2c, 0x87, 0x96, 0xd9, 0x8c, 0x7d,
+ 0x61, 0xf6, 0x76, 0x25, 0x3d, 0xd3, 0x26, 0x2e, 0x1b, 0x0d, 0x22, 0xed,
+ 0x29, 0x5f, 0x75, 0x2f, 0x20, 0xc7, 0xc5, 0xcc, 0x47, 0xcb, 0x8e, 0xc1,
+ 0x66, 0x30, 0xdf, 0x53, 0x3e, 0xdd, 0x71, 0x41, 0x61, 0xc3, 0xbe, 0xcb,
+ 0x17, 0x78, 0x28, 0x34, 0x8e, 0x0e, 0x23, 0xa3, 0x74, 0x5e, 0x08, 0x77,
+ 0x1b, 0x56, 0x81, 0x55, 0x7c, 0xa8, 0x0b, 0x61, 0xe6, 0xc7, 0xc5, 0xae,
+ 0x46, 0xfb, 0x42, 0x01, 0x2d, 0xc2, 0x35, 0xe7, 0xbe, 0xcf, 0x56, 0x6a,
+ 0x88, 0x74, 0x23, 0xf3, 0x10, 0x11, 0x9a, 0xe9, 0x8a, 0xac, 0xc9, 0xf9,
+ 0x2d, 0xb2, 0x9e, 0xa5, 0xa0, 0xd4, 0x8d, 0xbb, 0x31, 0xac, 0xd5, 0x49,
+ 0xe1, 0x7c, 0xce, 0x40, 0x8b, 0x49, 0x44, 0xac, 0x5a, 0x7a, 0xa5, 0xc5,
+ 0x63, 0xd0, 0x3c, 0x5d, 0x9e, 0x55, 0x12, 0x80, 0x27, 0x50, 0x99, 0xd5,
+ 0x75, 0x96, 0xe6, 0xab, 0x3e, 0xd3, 0x59, 0x9a, 0xf9, 0xe7, 0xd7, 0x63,
+ 0xe7, 0x8b, 0xb9, 0xbb, 0xc9, 0x03, 0x1c, 0x2d, 0x0d, 0x14, 0x44, 0x91,
+ 0xa3, 0x43, 0x55, 0xc8, 0xae, 0xdf, 0xe3, 0x50, 0x25, 0x11, 0xab, 0xf9,
+ 0xd9, 0xa2, 0x9e, 0x79, 0x0c, 0xe4, 0x61, 0x8f, 0xda, 0xe5, 0x7d, 0x9f,
+ 0x52, 0xf1, 0xfd, 0xbd, 0x0e, 0x5a, 0x07, 0x6b, 0x1d, 0x36, 0xea, 0xb7,
+ 0x41, 0x85, 0xf0, 0x05, 0xe2, 0xb3, 0x35, 0x91, 0x4f, 0x1d, 0x5b, 0x86,
+ 0x6c, 0x17, 0xd5, 0x52, 0x58, 0xd3, 0x59, 0x06, 0x79, 0x4a, 0xd9, 0xf4,
+ 0x6c, 0xbb, 0xd2, 0x28, 0x5a, 0x33, 0x1a, 0x00, 0x38, 0xc1, 0xdc, 0x1c,
+ 0x9d, 0xa5, 0xa2, 0xa0, 0xb1, 0x62, 0xe2, 0xb5, 0x4a, 0x74, 0xd4, 0xc1,
+ 0x22, 0xfd, 0x80, 0x30, 0x16, 0xdc, 0x1a, 0xee, 0x1d, 0x8a, 0x89, 0x77,
+ 0x72, 0xc8, 0x5b, 0x84, 0x82, 0x97, 0x60, 0x78, 0xe0, 0x32, 0xb9, 0xca,
+ 0x0a, 0xea, 0xdf, 0x8c, 0x86, 0x20, 0xe6, 0x3c, 0x56, 0xd8, 0x73, 0xc1,
+ 0x6b, 0x4f, 0xd4, 0xa6, 0x25, 0x18, 0x07, 0x04, 0x4a, 0x99, 0x60, 0x0f,
+ 0x59, 0xce, 0x5e, 0x52, 0xe5, 0x3e, 0x6b, 0xf6, 0x25, 0x46, 0x52, 0x48,
+ 0x8c, 0x79, 0x2d, 0xdb, 0xe6, 0x15, 0x50, 0xdd, 0x96, 0x77, 0x2d, 0xa7,
+ 0xf3, 0x09, 0xd2, 0x27, 0x75, 0xe4, 0x95, 0x89, 0xa8, 0x69, 0x25, 0x76,
+ 0xe5, 0x21, 0xde, 0x91, 0x80, 0xb6, 0xff, 0x67, 0x11, 0xd0, 0xf6, 0xff,
+ 0x50, 0x02, 0xda, 0xfe, 0x64, 0x04, 0xb4, 0x7d, 0x3f, 0x02, 0xb2, 0x79,
+ 0xaa, 0xf8, 0xe9, 0x3e, 0x39, 0xed, 0xdc, 0x8f, 0x9c, 0x76, 0xfe, 0x67,
+ 0x91, 0xd3, 0xce, 0xff, 0x50, 0x72, 0xda, 0xf9, 0x64, 0xe4, 0xb4, 0xf3,
+ 0x69, 0xc8, 0x69, 0xf7, 0x7e, 0xe4, 0xb4, 0xfb, 0x09, 0xc8, 0x69, 0xe2,
+ 0x95, 0x39, 0x47, 0xb7, 0xbb, 0x34, 0x4d, 0x5a, 0xdd, 0xc3, 0xfb, 0x33,
+ 0x5f, 0x9b, 0x82, 0x27, 0x75, 0x06, 0x28, 0xd0, 0x9d, 0x31, 0x23, 0x87,
+ 0x37, 0x14, 0x98, 0xc2, 0xdf, 0x8b, 0x33, 0xa1, 0x1a, 0xdc, 0x4a, 0x23,
+ 0xbb, 0x9f, 0x8c, 0x46, 0x76, 0xef, 0x45, 0x23, 0x3b, 0x2d, 0x1a, 0x59,
+ 0xd2, 0x9f, 0x7c, 0xbb, 0xaf, 0x6f, 0x05, 0xc9, 0xc6, 0x87, 0x83, 0x4f,
+ 0xb0, 0x6e, 0x0e, 0xf5, 0xbf, 0x26, 0xf9, 0x7c, 0x10, 0xaa, 0x51, 0x5f,
+ 0x58, 0xd0, 0x3c, 0x65, 0x53, 0x34, 0x89, 0x94, 0x76, 0x68, 0x0c, 0x93,
+ 0x3e, 0x40, 0xdc, 0x81, 0x1b, 0xd0, 0xfa, 0x9a, 0x57, 0xdb, 0x87, 0x95,
+ 0x5d, 0x60, 0xf3, 0xfa, 0xee, 0x93, 0xb1, 0xdf, 0xf5, 0xa9, 0xce, 0xe6,
+ 0x41, 0xca, 0x31, 0x9c, 0x65, 0xfe, 0x37, 0x29, 0xc7, 0x30, 0xb2, 0xae,
+ 0x51, 0x5d, 0xd1, 0xf8, 0x57, 0x53, 0x25, 0x2a, 0xe3, 0x14, 0x98, 0xf8,
+ 0xd8, 0xef, 0x89, 0x4b, 0x17, 0xd2, 0x8d, 0x4e, 0x63, 0x78, 0x07, 0x43,
+ 0x96, 0x18, 0x26, 0x90, 0x3b, 0x1a, 0x1f, 0xc9, 0xbb, 0x36, 0x05, 0x98,
+ 0x6f, 0x33, 0xb0, 0x08, 0x2f, 0x13, 0x9e, 0x33, 0xf4, 0xb5, 0x45, 0xad,
+ 0xb6, 0xa9, 0x93, 0x2c, 0xf7, 0xbe, 0x40, 0x9a, 0xe8, 0x24, 0x82, 0xb5,
+ 0x85, 0xf9, 0x2b, 0xdc, 0xca, 0xdb, 0x6b, 0xb6, 0x3d, 0x4a, 0xb9, 0xe5,
+ 0x72, 0x76, 0x0b, 0xb2, 0x85, 0xf3, 0x85, 0x9f, 0x20, 0xff, 0xcc, 0x0e,
+ 0xbe, 0x32, 0x15, 0x3a, 0xeb, 0x5a, 0xd1, 0xbd, 0x67, 0x0e, 0xa2, 0x79,
+ 0x92, 0xc9, 0x28, 0x8d, 0x93, 0x6a, 0x94, 0x65, 0xe1, 0x38, 0xb7, 0x56,
+ 0x4a, 0x24, 0x54, 0xc0, 0x1a, 0xd1, 0xf3, 0x11, 0x66, 0xda, 0xe2, 0xd9,
+ 0x20, 0xd7, 0x44, 0x69, 0x4e, 0xcd, 0x93, 0xf1, 0x28, 0x80, 0xb9, 0x5f,
+ 0x14, 0x9a, 0x43, 0x84, 0x3d, 0x5f, 0xbd, 0x52, 0x66, 0x60, 0xe1, 0xf4,
+ 0xfb, 0xb4, 0x1a, 0x95, 0x19, 0xd0, 0xe9, 0x15, 0x3a, 0xdc, 0xb1, 0x20,
+ 0x54, 0x20, 0x78, 0x24, 0xad, 0x8d, 0xc3, 0xd0, 0x92, 0x37, 0x4e, 0xb1,
+ 0x45, 0x86, 0xdc, 0x6e, 0x0d, 0xd7, 0x8b, 0x7b, 0x18, 0xf1, 0xc7, 0xdf,
+ 0x93, 0xb9, 0x0e, 0x6f, 0x53, 0x86, 0xaa, 0xcd, 0xda, 0x8e, 0xb4, 0x33,
+ 0xf0, 0xb2, 0xea, 0x1b, 0x84, 0x14, 0xcc, 0x66, 0xd9, 0x34, 0x29, 0xe5,
+ 0x3a, 0x70, 0x76, 0x36, 0x3a, 0xf8, 0x80, 0xef, 0xa1, 0x2b, 0x94, 0x93,
+ 0x2a, 0x31, 0x57, 0xfd, 0x03, 0xb7, 0x43, 0xa0, 0xaf, 0xcd, 0xfd, 0x6c,
+ 0xc8, 0x4b, 0xcc, 0xd6, 0x65, 0x3a, 0x3c, 0x38, 0x3b, 0x3c, 0x3e, 0x6e,
+ 0x34, 0x4f, 0xc0, 0x7d, 0xa3, 0x34, 0x72, 0x6e, 0xb9, 0x58, 0xcd, 0x60,
+ 0x03, 0x53, 0x2d, 0x85, 0x09, 0xa5, 0x54, 0x98, 0xba, 0x56, 0xe0, 0xbe,
+ 0x19, 0xb7, 0x00, 0x2f, 0x31, 0x36, 0x40, 0x5e, 0x89, 0x1c, 0x96, 0x99,
+ 0x61, 0x8b, 0xf2, 0xcb, 0xc5, 0x2c, 0xc9, 0x97, 0x49, 0x3e, 0x93, 0x7a,
+ 0xce, 0x13, 0x61, 0x78, 0x02, 0xc9, 0x29, 0x01, 0xf1, 0x7c, 0x95, 0xd5,
+ 0x99, 0xb8, 0x7a, 0xf3, 0xb4, 0x26, 0xaf, 0x01, 0x1e, 0xf2, 0x64, 0xe2,
+ 0x55, 0x17, 0xf3, 0x5a, 0x08, 0x60, 0x8e, 0x80, 0x5b, 0x31, 0x4b, 0x99,
+ 0xce, 0x4f, 0xcf, 0x5a, 0xcf, 0x96, 0x6c, 0x77, 0x3c, 0x0e, 0xb8, 0x9f,
+ 0xa3, 0x32, 0x1d, 0x73, 0xab, 0xbf, 0xca, 0x87, 0xc1, 0xac, 0x52, 0xf8,
+ 0x75, 0xcd, 0xf7, 0x15, 0x87, 0xc5, 0x02, 0x9e, 0xe8, 0x5b, 0xa0, 0xd8,
+ 0x6b, 0x0d, 0x08, 0x53, 0xaa, 0xff, 0x08, 0xfe, 0x05, 0xc4, 0x17, 0x89,
+ 0xb4, 0xc1, 0xce, 0xb5, 0x81, 0x66, 0xdc, 0x44, 0x98, 0xd3, 0xe2, 0x42,
+ 0x30, 0xc2, 0xa8, 0x65, 0x6e, 0xf5, 0xd9, 0x8b, 0xad, 0x5a, 0x57, 0xec,
+ 0x73, 0x44, 0x0a, 0x9c, 0xe9, 0x61, 0x7b, 0x1e, 0xa2, 0xe0, 0x8a, 0xc7,
+ 0x0c, 0x08, 0x1b, 0x11, 0x2e, 0xc0, 0x17, 0x03, 0xf7, 0xde, 0x91, 0x36,
+ 0x74, 0x56, 0x7e, 0xf1, 0x8a, 0xc7, 0x97, 0x38, 0x85, 0x72, 0xa9, 0xfb,
+ 0x95, 0x1f, 0x59, 0x94, 0xd2, 0xe6, 0x83, 0x61, 0x76, 0x68, 0x7c, 0xad,
+ 0xda, 0x38, 0xe0, 0x2c, 0xd0, 0xb8, 0x4a, 0xe1, 0x2a, 0x62, 0xff, 0x11,
+ 0x8d, 0xd1, 0x79, 0xb8, 0x04, 0x33, 0xee, 0x90, 0x4e, 0xf5, 0x5e, 0xa5,
+ 0x46, 0xd9, 0x6c, 0xd1, 0x15, 0x41, 0x7b, 0x21, 0x41, 0x52, 0xa1, 0x4b,
+ 0x94, 0x5c, 0xc1, 0x6f, 0x39, 0x3f, 0x00, 0xf3, 0x84, 0xda, 0xc7, 0xf2,
+ 0x3a, 0x21, 0x51, 0x81, 0x94, 0x4c, 0x48, 0xb6, 0x54, 0x9a, 0x2d, 0x57,
+ 0x66, 0xa0, 0xa1, 0xc8, 0x9b, 0x68, 0x0d, 0x76, 0x6c, 0x0d, 0xb7, 0x85,
+ 0xfb, 0x13, 0x10, 0x4b, 0xa5, 0xf5, 0x77, 0xae, 0x2e, 0x64, 0xc1, 0x35,
+ 0x3a, 0x6b, 0xd3, 0xd7, 0x9b, 0xe7, 0xf5, 0x26, 0x2a, 0xb8, 0x6f, 0x2f,
+ 0x1b, 0x57, 0x3d, 0x89, 0xe9, 0xf6, 0x90, 0xf4, 0x7a, 0x7e, 0x85, 0x4d,
+ 0x72, 0x55, 0x64, 0x63, 0x91, 0x6e, 0x7a, 0x16, 0xf0, 0x9a, 0x53, 0xba,
+ 0x22, 0x18, 0x99, 0xb0, 0xa1, 0xd4, 0xfc, 0x31, 0x90, 0xb8, 0xe4, 0xa6,
+ 0xb1, 0xf3, 0x35, 0x7b, 0x47, 0x6f, 0xba, 0x99, 0x51, 0x74, 0x5c, 0xb3,
+ 0xc2, 0xec, 0xf5, 0x67, 0xbe, 0xaf, 0x2d, 0xb2, 0xfb, 0x64, 0xb9, 0xc5,
+ 0xcd, 0x69, 0x60, 0x63, 0xfb, 0x78, 0x21, 0x37, 0x57, 0x8c, 0xdd, 0xdf,
+ 0xe3, 0x62, 0xde, 0xf3, 0x5e, 0x5a, 0x53, 0xe2, 0x19, 0xe8, 0x81, 0x5b,
+ 0xfe, 0x3d, 0x85, 0x4f, 0xf0, 0x94, 0x29, 0xb2, 0xeb, 0xab, 0x66, 0xca,
+ 0x15, 0x0e, 0xed, 0xc6, 0xd5, 0x49, 0x34, 0xc0, 0x79, 0x71, 0xe9, 0x24,
+ 0x1d, 0x58, 0x14, 0xa4, 0x7e, 0x38, 0x4d, 0xfd, 0x50, 0xc2, 0xba, 0xb1,
+ 0xb9, 0xcc, 0x92, 0x74, 0xfe, 0xdf, 0xa8, 0x15, 0xb1, 0x73, 0x5f, 0x1e,
+ 0x1a, 0x19, 0xc9, 0x8c, 0x3c, 0xb8, 0x17, 0xc1, 0xe1, 0x92, 0x9a, 0x02,
+ 0x41, 0x38, 0xdb, 0x8a, 0xf6, 0xe6, 0x1d, 0xc8, 0x64, 0x27, 0x44, 0x26,
+ 0x01, 0x9c, 0x5c, 0x43, 0x27, 0x92, 0x85, 0x57, 0xd5, 0xb0, 0x02, 0x62,
+ 0x87, 0x48, 0x0b, 0xc2, 0xc8, 0xed, 0xe1, 0xf3, 0xe9, 0x8b, 0xad, 0x14,
+ 0x80, 0xb6, 0xf9, 0xef, 0x46, 0x0d, 0x0d, 0x6e, 0xf9, 0x69, 0xa8, 0x21,
+ 0x98, 0x54, 0x79, 0x27, 0x72, 0xa0, 0x45, 0x7d, 0x42, 0x7a, 0x68, 0x9f,
+ 0xff, 0xef, 0x6a, 0x60, 0x34, 0x2c, 0x8c, 0xdb, 0x4d, 0x0c, 0xb6, 0x30,
+ 0x1e, 0xc2, 0xc0, 0x90, 0x8e, 0x0d, 0xbd, 0x3f, 0xa2, 0x90, 0xf5, 0xca,
+ 0xae, 0xef, 0x36, 0x4e, 0x5a, 0x96, 0x61, 0x6d, 0xfe, 0x3e, 0xea, 0xfc,
+ 0x32, 0x6d, 0x7e, 0x35, 0x65, 0x7e, 0xb9, 0x36, 0xaf, 0xea, 0xbc, 0xd8,
+ 0xdf, 0x46, 0xa1, 0x6f, 0x6a, 0xf4, 0x70, 0xbb, 0x54, 0x9f, 0x27, 0x75,
+ 0xfe, 0x7f, 0x94, 0x36, 0xaf, 0x84, 0x7c, 0xa7, 0x5e, 0x5e, 0x9f, 0x00,
+ 0x3a, 0xc1, 0x6c, 0xcb, 0x2a, 0x5a, 0xbc, 0xc6, 0x92, 0x9b, 0x57, 0xbd,
+ 0xef, 0xe9, 0x3b, 0xfd, 0xa6, 0x40, 0xef, 0xc8, 0x86, 0xb1, 0x3c, 0x67,
+ 0x89, 0x96, 0xe1, 0x6a, 0x15, 0x2e, 0x4b, 0x08, 0x63, 0x79, 0xd8, 0x45,
+ 0xb9, 0x2c, 0x03, 0x9b, 0x84, 0xc4, 0xd2, 0xa6, 0x7b, 0x1f, 0xdb, 0x7b,
+ 0x7c, 0x1d, 0x76, 0x35, 0x1d, 0xb2, 0x3e, 0x11, 0x69, 0x7f, 0x07, 0x72,
+ 0x2b, 0xbf, 0x0d, 0x74, 0x18, 0x51, 0x44, 0x0e, 0x38, 0x61, 0x72, 0x37,
+ 0x05, 0x40, 0x3d, 0xe4, 0xca, 0x84, 0x8f, 0xde, 0x5d, 0xd0, 0xe7, 0xc8,
+ 0x8a, 0x70, 0xe7, 0xe7, 0xff, 0xc4, 0xb8, 0x2d, 0x2b, 0x32, 0xeb, 0x64,
+ 0x58, 0xe1, 0x86, 0xd7, 0xee, 0x70, 0xce, 0xb6, 0x9f, 0xe3, 0x69, 0x2d,
+ 0xe6, 0xd3, 0x22, 0x19, 0xc7, 0x94, 0xd1, 0x1d, 0xe4, 0xd9, 0x74, 0xf2,
+ 0x16, 0x60, 0xbe, 0x99, 0xea, 0x4f, 0x4d, 0x59, 0xa4, 0x2a, 0xa5, 0x10,
+ 0xbc, 0x41, 0xf2, 0xfc, 0xbe, 0x7d, 0xf3, 0xb2, 0x2b, 0x5c, 0x50, 0x4a,
+ 0xee, 0x14, 0xbf, 0x46, 0x2e, 0x93, 0xac, 0x5d, 0x42, 0x00, 0xaf, 0x4b,
+ 0x25, 0x40, 0x32, 0x37, 0xba, 0x65, 0x1b, 0x01, 0xcd, 0xce, 0xad, 0x6c,
+ 0x16, 0x07, 0xc1, 0xf4, 0x40, 0x8a, 0x6a, 0xd1, 0xe5, 0x44, 0xf0, 0xcf,
+ 0xc8, 0x2d, 0x88, 0x8e, 0xb0, 0xd8, 0x29, 0x09, 0xe0, 0x26, 0x52, 0x5d,
+ 0x2f, 0x26, 0x64, 0xfe, 0xa3, 0x58, 0x70, 0x06, 0x27, 0xc3, 0x87, 0xa2,
+ 0xe3, 0x65, 0x8a, 0xdc, 0xb1, 0x9a, 0x52, 0xf9, 0xc5, 0xe6, 0x86, 0x56,
+ 0xf4, 0xd2, 0xc9, 0x33, 0xd8, 0x4c, 0x51, 0xde, 0xf8, 0x96, 0x15, 0x95,
+ 0x6a, 0x11, 0xf2, 0x39, 0xb9, 0xd7, 0x25, 0x4d, 0xb6, 0xf9, 0xf9, 0xb4,
+ 0x72, 0xe0, 0x50, 0xf2, 0x48, 0x96, 0xbf, 0x17, 0xf7, 0x70, 0x6b, 0xb8,
+ 0x9b, 0x62, 0x51, 0xb6, 0x26, 0x34, 0x88, 0x34, 0xce, 0xb6, 0x37, 0x76,
+ 0x63, 0x51, 0xf9, 0xca, 0x02, 0x55, 0x72, 0x81, 0x20, 0xa9, 0x35, 0x05,
+ 0xb2, 0xbd, 0x8b, 0x92, 0xcb, 0x8b, 0xbb, 0x28, 0x8e, 0x2c, 0x7b, 0x16,
+ 0xd9, 0x85, 0x57, 0x68, 0x53, 0x94, 0x94, 0x60, 0x2b, 0xe5, 0x25, 0xb2,
+ 0x2f, 0xe9, 0x04, 0xa8, 0x16, 0xee, 0x0b, 0x49, 0xf5, 0xfc, 0xc6, 0xdd,
+ 0xb9, 0x92, 0xa2, 0x2e, 0xf2, 0x83, 0x9f, 0x37, 0x42, 0x08, 0x0d, 0x42,
+ 0x0c, 0xce, 0x92, 0xc4, 0xfd, 0x66, 0x68, 0xa1, 0x35, 0x5f, 0x49, 0xe2,
+ 0x0d, 0x27, 0x0c, 0x7b, 0x94, 0xe9, 0xf7, 0x33, 0x6c, 0x35, 0x44, 0x20,
+ 0x0d, 0x23, 0x90, 0x42, 0x70, 0x29, 0x02, 0xf1, 0x2c, 0xd3, 0x7e, 0xc9,
+ 0xce, 0x8d, 0x3a, 0xc1, 0x7a, 0x82, 0xdd, 0x7b, 0x2e, 0xa6, 0x29, 0x15,
+ 0xe0, 0x6c, 0x68, 0xa0, 0x04, 0x64, 0x77, 0x96, 0xbb, 0x9c, 0x26, 0x09,
+ 0x96, 0x5c, 0x89, 0x3f, 0xf3, 0x60, 0x4a, 0x65, 0x4c, 0x75, 0xaa, 0xf9,
+ 0x8d, 0xce, 0x1c, 0x83, 0x1e, 0xc2, 0x59, 0x45, 0x3a, 0x8b, 0xb4, 0xa3,
+ 0x68, 0x6f, 0x0e, 0x42, 0xf7, 0x91, 0x4b, 0xc2, 0xe9, 0x66, 0xa7, 0xb3,
+ 0xe3, 0xf4, 0xb8, 0xd4, 0xd6, 0xd2, 0xa8, 0xbe, 0x86, 0x0a, 0x43, 0x7d,
+ 0x1e, 0x48, 0x8d, 0x4a, 0x35, 0xb0, 0x4b, 0x9e, 0x46, 0x22, 0x72, 0x86,
+ 0x09, 0x14, 0x6d, 0x83, 0xfc, 0xea, 0x91, 0x0c, 0xc7, 0x39, 0x87, 0x29,
+ 0x29, 0x5c, 0x7e, 0x26, 0x37, 0x72, 0x91, 0x70, 0x11, 0x28, 0x73, 0x69,
+ 0x5b, 0xc2, 0x28, 0xdd, 0x32, 0xb4, 0xa8, 0x09, 0x39, 0xfb, 0xfa, 0xd9,
+ 0x06, 0x93, 0x19, 0x6e, 0xcc, 0xe9, 0xdb, 0x73, 0xcd, 0xb2, 0xba, 0x9b,
+ 0x20, 0xfd, 0x47, 0xab, 0xa9, 0x12, 0x46, 0x1f, 0x7d, 0xe6, 0xa6, 0x7a,
+ 0x00, 0xb1, 0x84, 0x22, 0x37, 0x91, 0xcb, 0x59, 0xec, 0xed, 0x33, 0x72,
+ 0x10, 0x34, 0x3e, 0xe0, 0xd8, 0x8e, 0xf0, 0x0d, 0x7f, 0xb0, 0x3f, 0xd3,
+ 0x28, 0xf3, 0x24, 0x2b, 0xcd, 0x69, 0x08, 0x59, 0xfa, 0xc8, 0xcc, 0xf4,
+ 0x1a, 0x57, 0xa3, 0x15, 0xec, 0x6d, 0x1a, 0x08, 0x6b, 0x43, 0x2e, 0x6d,
+ 0x40, 0x7c, 0x7a, 0xa8, 0xd1, 0x0c, 0x61, 0x77, 0x7b, 0x0e, 0xfb, 0x82,
+ 0x99, 0x3d, 0xb1, 0xec, 0xae, 0x23, 0x4a, 0xca, 0x0b, 0x0a, 0xd2, 0xf7,
+ 0x19, 0x41, 0x85, 0xdb, 0x31, 0x93, 0xc5, 0xa4, 0x29, 0xd2, 0x32, 0xbf,
+ 0x1a, 0x24, 0x01, 0x25, 0x55, 0xc1, 0x41, 0x99, 0xfa, 0xf0, 0xc3, 0x1c,
+ 0xd0, 0x70, 0x69, 0x06, 0x85, 0x3f, 0xd5, 0x05, 0x32, 0x52, 0x52, 0xd4,
+ 0x95, 0xcf, 0x6f, 0xaf, 0x70, 0x48, 0x08, 0x70, 0x29, 0x29, 0x2f, 0xca,
+ 0x34, 0x8f, 0xce, 0x19, 0x36, 0x95, 0x89, 0x6f, 0x8f, 0xb3, 0x60, 0xe7,
+ 0x4c, 0x51, 0xac, 0x61, 0x52, 0x83, 0xfb, 0x50, 0x17, 0x45, 0xd6, 0xf6,
+ 0x30, 0xcf, 0xf7, 0xf1, 0xee, 0xce, 0x4e, 0xc4, 0x9a, 0x3f, 0xb7, 0x6c,
+ 0xe1, 0x82, 0x46, 0xec, 0xcc, 0x29, 0xf8, 0x47, 0x2c, 0xf5, 0x15, 0x23,
+ 0x1a, 0x25, 0xb6, 0xe7, 0x17, 0x54, 0x8c, 0x12, 0x3c, 0x2d, 0x50, 0x28,
+ 0xa6, 0xd1, 0xb0, 0x18, 0xdf, 0xd8, 0x51, 0x81, 0x5c, 0x4a, 0xe4, 0xbe,
+ 0xc0, 0x8b, 0x04, 0x9c, 0x33, 0x92, 0x64, 0xe2, 0x2a, 0x6c, 0xa2, 0xaa,
+ 0x66, 0x4a, 0xf2, 0x73, 0x44, 0xad, 0x81, 0x91, 0x0c, 0x73, 0xfa, 0x2b,
+ 0x98, 0x79, 0x93, 0x45, 0x89, 0x22, 0x81, 0x9c, 0x4c, 0xc0, 0x28, 0xaf,
+ 0x03, 0x20, 0x05, 0x3e, 0xf1, 0x7d, 0xbc, 0xaf, 0xaa, 0xab, 0x38, 0xe5,
+ 0xbc, 0xbb, 0xb2, 0xab, 0xe3, 0xf9, 0x5e, 0x36, 0xbb, 0xf8, 0x69, 0x3b,
+ 0xde, 0xde, 0xda, 0xda, 0xfa, 0x65, 0x30, 0x47, 0xe2, 0xe5, 0xfa, 0x58,
+ 0xf8, 0x73, 0xd0, 0xa8, 0x9f, 0xef, 0xd0, 0x73, 0x9c, 0xcf, 0xea, 0xfd,
+ 0x0b, 0xff, 0xb3, 0xdd, 0xc7, 0x3f, 0x77, 0xfe, 0xdd, 0x5b, 0x4d, 0xd7,
+ 0xf9, 0x0e, 0x37, 0xe9, 0x02, 0x55, 0x3f, 0x0b, 0x99, 0x04, 0xff, 0xfd,
+ 0x91, 0x6b, 0xcc, 0x24, 0x40, 0x89, 0x2a, 0xe8, 0x98, 0xd0, 0x63, 0x80,
+ 0xa6, 0x1a, 0xfa, 0x67, 0x39, 0x8d, 0xe1, 0x19, 0xa0, 0x0a, 0xac, 0x66,
+ 0x4d, 0x3c, 0xed, 0x13, 0x78, 0xe4, 0x46, 0xab, 0x14, 0x3b, 0x19, 0x93,
+ 0x23, 0x63, 0x9e, 0xa5, 0xa3, 0x54, 0x0a, 0x5c, 0x13, 0xec, 0x6c, 0xc7,
+ 0x6a, 0x71, 0xc2, 0x9c, 0xfd, 0xcf, 0x41, 0x95, 0x10, 0xd9, 0x46, 0xdf,
+ 0x55, 0x57, 0xac, 0xa0, 0x8d, 0x78, 0x15, 0xa8, 0x14, 0x71, 0x89, 0x49,
+ 0x75, 0x03, 0x46, 0xdb, 0x07, 0x62, 0x9a, 0xec, 0x41, 0x03, 0x69, 0xed,
+ 0x5f, 0x01, 0xba, 0xf1, 0x44, 0x0f, 0x13, 0x72, 0xdb, 0xe2, 0x62, 0xf0,
+ 0xa3, 0x84, 0xd0, 0xd8, 0xac, 0xca, 0x53, 0x8b, 0x37, 0xb3, 0xd7, 0x51,
+ 0x9a, 0xa6, 0xec, 0x44, 0xb4, 0x21, 0xe5, 0xd1, 0x6b, 0x7f, 0x5e, 0x8b,
+ 0xd6, 0xe7, 0xa0, 0xe8, 0x6f, 0xf4, 0x45, 0xdb, 0xa8, 0x4c, 0x9c, 0x8b,
+ 0xfd, 0xf5, 0xbe, 0xd6, 0x6b, 0x74, 0xe6, 0xa4, 0x8a, 0x09, 0x9e, 0x9d,
+ 0x17, 0x13, 0x02, 0x8d, 0x85, 0x6b, 0xc4, 0xdf, 0x6d, 0x02, 0x68, 0x8c,
+ 0xda, 0x2e, 0xba, 0x0d, 0xae, 0x7c, 0x52, 0xa0, 0x98, 0x52, 0x96, 0x44,
+ 0xe7, 0x49, 0xd9, 0xb8, 0x49, 0xf9, 0xde, 0xeb, 0xf8, 0xe5, 0x28, 0x05,
+ 0x21, 0x70, 0x5c, 0xf7, 0xb8, 0x3f, 0xdd, 0x55, 0x72, 0x26, 0x41, 0x52,
+ 0x40, 0x88, 0x8f, 0x15, 0xca, 0xbd, 0xec, 0xcb, 0x5f, 0xf1, 0xb6, 0x91,
+ 0x0c, 0xc5, 0xf7, 0x9d, 0xd7, 0xc1, 0x82, 0xd9, 0x9c, 0x14, 0xc5, 0x9d,
+ 0xe6, 0xff, 0x66, 0xb5, 0x8b, 0xed, 0xbc, 0x4d, 0x6f, 0x92, 0xfa, 0x75,
+ 0x9f, 0xb7, 0x7b, 0x7f, 0xa6, 0xaf, 0xff, 0xe3, 0xce, 0x16, 0xac, 0x74,
+ 0xc5, 0x3b, 0xdd, 0x26, 0x63, 0xba, 0xbf, 0x7a, 0xd1, 0x1b, 0x39, 0x2f,
+ 0xcf, 0x5a, 0xed, 0x3a, 0x70, 0x15, 0xfb, 0xf0, 0x87, 0x17, 0x45, 0x32,
+ 0x4d, 0x0f, 0x91, 0xbc, 0x48, 0x34, 0xd4, 0xa3, 0xcb, 0x00, 0x18, 0x19,
+ 0x28, 0x8b, 0x18, 0xdb, 0x42, 0xdc, 0xa4, 0x1b, 0x8d, 0x45, 0x82, 0x40,
+ 0x6d, 0x77, 0x83, 0xd3, 0x74, 0x34, 0x19, 0x16, 0x06, 0x5d, 0xaf, 0x36,
+ 0x94, 0x74, 0xc8, 0xe1, 0xdf, 0x6c, 0x2e, 0xd1, 0xca, 0x9b, 0x62, 0x05,
+ 0x51, 0x28, 0x5d, 0x20, 0xde, 0x51, 0x10, 0x73, 0xb3, 0x02, 0xe2, 0x20,
+ 0xeb, 0x8a, 0x2b, 0xd6, 0x93, 0xc3, 0xef, 0xf9, 0xb9, 0x32, 0xbd, 0x89,
+ 0xfc, 0x06, 0x3e, 0x66, 0x83, 0xeb, 0x51, 0xe8, 0x1c, 0x38, 0xf0, 0x9c,
+ 0x44, 0x17, 0x0b, 0x4c, 0x97, 0x18, 0x26, 0x5c, 0xc8, 0x65, 0xba, 0x86,
+ 0x0e, 0x74, 0x1d, 0xed, 0x0b, 0xb4, 0x40, 0x68, 0x98, 0x82, 0xac, 0xda,
+ 0xc5, 0x50, 0x0c, 0x6b, 0x5a, 0x0c, 0x15, 0xe5, 0xc3, 0x90, 0xcf, 0x8f,
+ 0x0f, 0x41, 0x28, 0xbd, 0x38, 0x3f, 0xed, 0x13, 0xf0, 0x79, 0x9f, 0x00,
+ 0xb1, 0xb9, 0xd7, 0x81, 0xbf, 0x3a, 0x92, 0xec, 0x35, 0xe3, 0xda, 0x27,
+ 0x16, 0xbc, 0x46, 0x0d, 0xe3, 0x3e, 0xfb, 0x7b, 0xae, 0xb3, 0x4a, 0x1a,
+ 0x34, 0xaa, 0xc1, 0x1c, 0x45, 0xdf, 0xe1, 0xba, 0x43, 0x79, 0x46, 0x0a,
+ 0x30, 0x80, 0x91, 0x2b, 0x4e, 0xe9, 0x9a, 0x1b, 0x2f, 0xac, 0xb8, 0x16,
+ 0x69, 0x53, 0x8d, 0x63, 0x8b, 0xf8, 0x14, 0xed, 0x6a, 0xdf, 0xf7, 0x65,
+ 0x49, 0x6b, 0x16, 0x1a, 0x47, 0x6b, 0xc9, 0x12, 0x53, 0x0a, 0x6f, 0xd6,
+ 0xeb, 0x82, 0x1a, 0x3d, 0x7a, 0x3c, 0xd8, 0x02, 0x56, 0x58, 0xa5, 0x69,
+ 0xa0, 0xdf, 0x26, 0x3c, 0x1f, 0xeb, 0xdb, 0x0e, 0x5a, 0x53, 0xb0, 0x69,
+ 0xaa, 0xc2, 0x98, 0x4b, 0x14, 0x52, 0x1c, 0x1a, 0x4c, 0x10, 0x82, 0x26,
+ 0xca, 0xed, 0x52, 0xa9, 0x5a, 0xad, 0x40, 0xda, 0x57, 0x47, 0x60, 0x19,
+ 0xf0, 0x69, 0xc4, 0x27, 0x4e, 0x4d, 0x35, 0x9b, 0x96, 0xf3, 0x5b, 0xfa,
+ 0x64, 0x9d, 0xe4, 0x0a, 0xfd, 0xd8, 0x27, 0xee, 0x9b, 0x8d, 0x16, 0x98,
+ 0x1a, 0x81, 0x74, 0x8b, 0x0d, 0x46, 0xa9, 0x34, 0xba, 0xaa, 0x30, 0xba,
+ 0x69, 0x42, 0xa2, 0xb0, 0xe8, 0xf6, 0xa9, 0x20, 0x1a, 0x3c, 0xfb, 0xde,
+ 0xd4, 0x13, 0x69, 0xde, 0x13, 0x45, 0x49, 0xcc, 0x6e, 0xd4, 0x1e, 0x6f,
+ 0xc0, 0x66, 0x99, 0x61, 0xf0, 0x1f, 0x1d, 0x85, 0xff, 0x11, 0x64, 0xcf,
+ 0x9f, 0x30, 0x1e, 0x87, 0x7f, 0xae, 0xc4, 0x86, 0xf6, 0xfa, 0xe2, 0x25,
+ 0x64, 0x06, 0xd4, 0xc0, 0xfb, 0x31, 0x2c, 0xe7, 0x5b, 0x52, 0xd2, 0x2a,
+ 0xf1, 0x6d, 0x85, 0x5a, 0xc7, 0x48, 0x53, 0x00, 0x41, 0x90, 0xe3, 0x7c,
+ 0x11, 0x75, 0xab, 0x0c, 0x30, 0x7d, 0x93, 0x2f, 0x14, 0x51, 0x00, 0x7e,
+ 0xbd, 0x16, 0xfc, 0xa4, 0xde, 0x66, 0x53, 0xa7, 0x79, 0xa7, 0x6f, 0x99,
+ 0x70, 0x33, 0xd2, 0xfa, 0xc9, 0x3e, 0x96, 0x3c, 0xbc, 0xde, 0x5f, 0xb0,
+ 0xfa, 0xe4, 0xab, 0x83, 0xde, 0xa0, 0xa9, 0xbb, 0x78, 0x78, 0x9e, 0x0b,
+ 0x3c, 0x27, 0xd2, 0xb3, 0x9b, 0xfe, 0x6d, 0xd1, 0xae, 0x51, 0x9b, 0xc7,
+ 0xcf, 0x27, 0x8b, 0x11, 0x29, 0x1a, 0xe4, 0xf0, 0xee, 0x8e, 0x9c, 0xe3,
+ 0x92, 0xec, 0x49, 0xda, 0x15, 0x77, 0x5b, 0xa2, 0x87, 0x45, 0x76, 0x31,
+ 0xe3, 0xae, 0xe8, 0x5a, 0xfd, 0xd6, 0x6f, 0x1a, 0xb2, 0xf9, 0xe6, 0xe8,
+ 0xe0, 0xf9, 0xab, 0xa3, 0x5b, 0x5a, 0x44, 0x88, 0x13, 0x93, 0xc4, 0x52,
+ 0xdb, 0x87, 0x79, 0x20, 0x04, 0x50, 0xc6, 0xc9, 0x05, 0x6e, 0x62, 0xb0,
+ 0xde, 0x48, 0xdc, 0x98, 0x2a, 0x86, 0x48, 0xe9, 0xc3, 0x57, 0x0e, 0x2e,
+ 0x58, 0xe7, 0x2a, 0x25, 0xf9, 0x96, 0xf0, 0x81, 0xdc, 0xae, 0xb5, 0xe1,
+ 0x9e, 0x64, 0xe7, 0x85, 0x9a, 0x12, 0xc3, 0x69, 0x82, 0x9e, 0x23, 0xf5,
+ 0xa3, 0xd1, 0x40, 0x7d, 0x6c, 0x0a, 0xc1, 0xfd, 0x01, 0xed, 0x0f, 0x85,
+ 0x34, 0xd8, 0xd6, 0x6b, 0x0d, 0xf7, 0xcf, 0x05, 0x85, 0x1d, 0x50, 0xa7,
+ 0xaa, 0x94, 0x64, 0x04, 0x63, 0xd3, 0x25, 0x48, 0xd3, 0xba, 0x92, 0x38,
+ 0xce, 0xf7, 0xaa, 0x6d, 0x7b, 0xf0, 0x81, 0xd2, 0x36, 0x42, 0x8b, 0x4a,
+ 0x15, 0xad, 0xb3, 0x83, 0x21, 0x49, 0x29, 0x30, 0x8a, 0x44, 0x02, 0x09,
+ 0x9b, 0xcd, 0xeb, 0x1b, 0xab, 0x8e, 0xa2, 0x73, 0xb9, 0xbd, 0xc3, 0xeb,
+ 0xbd, 0xde, 0x86, 0xf4, 0xad, 0x2e, 0x3d, 0x04, 0x98, 0x19, 0xa3, 0x24,
+ 0x91, 0x89, 0x26, 0x33, 0x53, 0x9a, 0xc4, 0x34, 0x45, 0x0f, 0x0c, 0x83,
+ 0xbd, 0xb0, 0x26, 0x4b, 0xba, 0xa4, 0x29, 0x45, 0xc6, 0x3e, 0xca, 0x18,
+ 0xbc, 0xf6, 0xc0, 0xb5, 0x60, 0x7f, 0x23, 0xc5, 0x9b, 0x34, 0x5d, 0x9c,
+ 0x53, 0x42, 0xbc, 0x73, 0xad, 0xe7, 0x6a, 0x8e, 0x5e, 0xfb, 0xf5, 0x5e,
+ 0xd4, 0xdb, 0x08, 0x7a, 0x96, 0xdb, 0x1f, 0xe1, 0x2a, 0xca, 0xbf, 0x63,
+ 0xf7, 0xf3, 0x83, 0xa8, 0xc7, 0x34, 0xb7, 0xb5, 0xf5, 0x74, 0x45, 0xad,
+ 0xcc, 0x39, 0xf0, 0x46, 0xd1, 0x30, 0xff, 0xc8, 0xb9, 0x11, 0x0b, 0xfd,
+ 0x54, 0x50, 0xc5, 0xe0, 0xcf, 0x3d, 0x2d, 0xd8, 0xea, 0x52, 0xca, 0xc8,
+ 0xea, 0xd7, 0x08, 0x14, 0x23, 0xba, 0x68, 0xbd, 0x98, 0xb8, 0xb5, 0xa8,
+ 0x8f, 0x2f, 0x3b, 0xa8, 0x6c, 0x55, 0x5e, 0x10, 0xc5, 0x25, 0x3a, 0x31,
+ 0x4d, 0xbf, 0xe3, 0x9c, 0xf9, 0x77, 0x5d, 0x8e, 0x64, 0xbd, 0xf4, 0x77,
+ 0x01, 0x74, 0x4a, 0xa6, 0x41, 0xed, 0x8c, 0x00, 0x11, 0x2b, 0x04, 0xc4,
+ 0xba, 0xb1, 0x9d, 0xcd, 0x1b, 0x0b, 0x14, 0x97, 0x28, 0x7c, 0x3b, 0x50,
+ 0x2a, 0xa3, 0xfe, 0x24, 0xb4, 0xe0, 0xf6, 0x7a, 0x9a, 0x35, 0x6a, 0x8e,
+ 0xcd, 0x13, 0xfe, 0xd6, 0x4a, 0x0a, 0x8f, 0xa7, 0xd8, 0x6c, 0x6a, 0x1e,
+ 0x59, 0x4f, 0x15, 0xb7, 0xc5, 0x06, 0x22, 0x9e, 0x16, 0x79, 0x5b, 0x8b,
+ 0xe1, 0x4a, 0x5f, 0x51, 0xf8, 0x08, 0x22, 0x69, 0x36, 0x2f, 0x40, 0x9d,
+ 0x1c, 0x4e, 0x53, 0x93, 0xd6, 0xcd, 0x6f, 0x2a, 0x8b, 0xb0, 0x93, 0xe3,
+ 0x55, 0xf6, 0x54, 0x09, 0x8b, 0x28, 0x49, 0x4b, 0x35, 0x07, 0x01, 0x54,
+ 0xdf, 0xe7, 0x96, 0x1c, 0xde, 0x27, 0x81, 0x22, 0x21, 0x12, 0x41, 0x94,
+ 0x99, 0x8c, 0x0b, 0x13, 0x2b, 0xd9, 0xa9, 0x4b, 0x3a, 0x0d, 0x27, 0x18,
+ 0x2b, 0xfe, 0x40, 0xbd, 0xe3, 0x21, 0xfc, 0x39, 0x82, 0xf4, 0x01, 0xdd,
+ 0x75, 0xca, 0x08, 0x41, 0x0a, 0x1b, 0x2c, 0x49, 0xfd, 0x69, 0xce, 0x41,
+ 0x20, 0xf2, 0xb4, 0xd7, 0x18, 0x17, 0xea, 0x8e, 0x59, 0x32, 0xba, 0x93,
+ 0x6c, 0xca, 0x0d, 0xc2, 0x41, 0xb1, 0x2e, 0x82, 0x70, 0x57, 0x20, 0x48,
+ 0x49, 0x07, 0xa5, 0x4d, 0x31, 0x5e, 0x65, 0x72, 0x7b, 0xf1, 0x17, 0xf9,
+ 0xb1, 0x5d, 0x6a, 0xd1, 0xc4, 0xad, 0x49, 0xf0, 0xb8, 0xae, 0x32, 0xde,
+ 0x6b, 0xa6, 0x82, 0x61, 0x99, 0xa5, 0x13, 0xe0, 0x40, 0xc4, 0xb9, 0x34,
+ 0xf6, 0x30, 0x9a, 0xa6, 0x49, 0x49, 0x6a, 0x2d, 0xb6, 0xfe, 0xf2, 0x2a,
+ 0x3d, 0x35, 0x24, 0x2b, 0x62, 0xf8, 0x52, 0x3b, 0x3d, 0x96, 0x29, 0x42,
+ 0x58, 0x61, 0x97, 0x13, 0x01, 0xe4, 0x73, 0xe1, 0xea, 0x29, 0xaf, 0x32,
+ 0x9b, 0x79, 0x75, 0xa8, 0xa8, 0xc0, 0x71, 0x54, 0xf8, 0x8a, 0xbf, 0x8a,
+ 0xd4, 0x56, 0x5a, 0x01, 0x4b, 0x72, 0x4f, 0x87, 0x0a, 0xbb, 0xe9, 0x58,
+ 0xbd, 0xf8, 0x6b, 0x5a, 0x0e, 0xd3, 0xb2, 0xa8, 0xa2, 0xbf, 0x3f, 0x56,
+ 0x7f, 0x80, 0x82, 0x85, 0xb3, 0x4d, 0x61, 0x1a, 0xfa, 0xf0, 0xad, 0xa1,
+ 0xb5, 0x7b, 0x5a, 0x3b, 0x63, 0xf3, 0x32, 0x29, 0x1b, 0xac, 0x71, 0xc7,
+ 0xb6, 0x68, 0xd3, 0x25, 0xc6, 0xf0, 0xe0, 0xfb, 0x90, 0xcb, 0x4c, 0x82,
+ 0xba, 0xae, 0x4c, 0x4a, 0x49, 0xf1, 0xa4, 0x6b, 0x52, 0xd3, 0x9d, 0xa8,
+ 0x18, 0x52, 0x90, 0x3b, 0xb1, 0xcb, 0x3e, 0xcf, 0x28, 0xee, 0x65, 0xef,
+ 0x75, 0x08, 0x14, 0xaf, 0xaf, 0x26, 0x0a, 0xae, 0x24, 0x43, 0x0a, 0x6a,
+ 0x17, 0xfe, 0x5a, 0x0c, 0x5d, 0x74, 0xc4, 0x63, 0x7b, 0xae, 0x2e, 0xdf,
+ 0x26, 0xed, 0x5a, 0xf4, 0xfa, 0xfc, 0xe5, 0x2b, 0x61, 0xe1, 0xf6, 0xb2,
+ 0x89, 0x5a, 0x6b, 0x3d, 0xf8, 0xc2, 0x63, 0x92, 0x50, 0x80, 0xcb, 0xd9,
+ 0x0b, 0x2d, 0xa6, 0xa1, 0xc4, 0x62, 0xda, 0xb5, 0xbe, 0xc0, 0x05, 0x94,
+ 0xd2, 0x94, 0x40, 0x63, 0x07, 0xb2, 0xa7, 0x81, 0x80, 0x2e, 0xd2, 0x61,
+ 0x45, 0x67, 0x4f, 0xc1, 0x24, 0x10, 0x28, 0xc0, 0x5f, 0xa4, 0x07, 0x24,
+ 0xb1, 0xfd, 0x90, 0x81, 0xa2, 0xbc, 0xcf, 0x99, 0x99, 0xbf, 0x04, 0x79,
+ 0x4a, 0x9a, 0xd1, 0xb5, 0x79, 0x5e, 0x5c, 0xe7, 0xf1, 0x4b, 0xec, 0xb5,
+ 0x14, 0xbd, 0x2c, 0x2e, 0x60, 0xab, 0x5e, 0x73, 0x50, 0xab, 0x1d, 0x5d,
+ 0x39, 0x7d, 0x1d, 0xad, 0xa3, 0xba, 0x03, 0x2a, 0x22, 0xd0, 0x43, 0x36,
+ 0x87, 0x3d, 0xc6, 0x27, 0x37, 0xc4, 0xbf, 0x5a, 0xb1, 0x16, 0x2c, 0xab,
+ 0xe9, 0x47, 0x47, 0x3f, 0x1e, 0xbc, 0x3a, 0x7d, 0x79, 0xf4, 0x33, 0x97,
+ 0xbf, 0x7b, 0x9f, 0x83, 0x3f, 0xfe, 0xc6, 0x91, 0x58, 0x54, 0x60, 0x80,
+ 0xc9, 0x66, 0xb0, 0x8e, 0x9b, 0x2e, 0xf5, 0x82, 0x39, 0xa1, 0xd2, 0xdf,
+ 0xd9, 0xd9, 0xe9, 0x71, 0xcc, 0xb9, 0x98, 0xd2, 0x84, 0x64, 0x98, 0xe5,
+ 0xe8, 0x1b, 0xa6, 0x08, 0x00, 0x18, 0x2c, 0xb8, 0xb0, 0x08, 0x29, 0xa9,
+ 0x7d, 0xc3, 0x98, 0xb2, 0xe0, 0x46, 0xf4, 0xa3, 0xd7, 0x0a, 0x0e, 0xd3,
+ 0xa7, 0x23, 0xc7, 0x3b, 0xf9, 0x3c, 0xbb, 0x20, 0x7f, 0x63, 0x0b, 0xe5,
+ 0x02, 0xa9, 0x43, 0x54, 0x87, 0x36, 0x3d, 0x63, 0xbf, 0x5b, 0x2d, 0xc2,
+ 0xa9, 0xd2, 0x29, 0xc7, 0xb8, 0x3b, 0xc5, 0x21, 0x33, 0x33, 0x3a, 0x45,
+ 0x42, 0x53, 0x6d, 0xaf, 0x4e, 0xd1, 0x55, 0xd1, 0xa0, 0xe5, 0xf3, 0x13,
+ 0xc7, 0x02, 0xd3, 0x08, 0x0b, 0x02, 0x51, 0xe1, 0x0c, 0xa7, 0xdf, 0x8b,
+ 0x7a, 0xf1, 0x22, 0xda, 0xeb, 0x85, 0x33, 0x9b, 0x17, 0xaa, 0xc9, 0x97,
+ 0xab, 0xa5, 0x35, 0x3f, 0x48, 0x2e, 0x04, 0x9d, 0x5b, 0xb9, 0x27, 0x39,
+ 0x27, 0x2b, 0x69, 0x2b, 0x6d, 0xe1, 0x1f, 0xb6, 0xde, 0x62, 0xc5, 0xa1,
+ 0x8d, 0xf6, 0x7f, 0xfa, 0xe3, 0x2f, 0xe4, 0xb1, 0x42, 0x3e, 0xb9, 0xf9,
+ 0x4d, 0x28, 0x20, 0x7e, 0x46, 0xc5, 0x87, 0xe6, 0x0d, 0xda, 0xc7, 0x1e,
+ 0xbd, 0x23, 0x69, 0x30, 0xe8, 0xa2, 0xe1, 0x9f, 0xd0, 0xfb, 0xbd, 0x68,
+ 0x5d, 0xac, 0xfb, 0x1e, 0xfd, 0x33, 0xd0, 0xe4, 0x8a, 0xc3, 0x7a, 0x12,
+ 0x65, 0x9b, 0xd0, 0xee, 0xb9, 0x4a, 0xa5, 0xe2, 0xfe, 0x6d, 0xb0, 0x34,
+ 0xb6, 0x9d, 0x48, 0x30, 0xd7, 0xb8, 0x53, 0x94, 0xd8, 0x8c, 0x4b, 0xb6,
+ 0x0d, 0x29, 0xa6, 0x2d, 0xd5, 0x98, 0xe8, 0x63, 0x05, 0xc3, 0x8b, 0xc5,
+ 0x1e, 0xe8, 0xc4, 0x98, 0xd6, 0x4b, 0x81, 0xa3, 0x36, 0x65, 0x26, 0x08,
+ 0x7e, 0x77, 0x10, 0xff, 0x57, 0x3f, 0xda, 0x8a, 0xbf, 0x8c, 0xa8, 0x12,
+ 0x01, 0x03, 0x24, 0xa3, 0xa2, 0x14, 0xf8, 0x47, 0xcb, 0xca, 0xe4, 0xeb,
+ 0xc5, 0x6b, 0x8b, 0xe8, 0x8c, 0x95, 0xd7, 0x49, 0x6c, 0x94, 0x51, 0x52,
+ 0xb6, 0xa5, 0x3d, 0xbb, 0xc8, 0x40, 0x56, 0xb1, 0x8d, 0x52, 0x93, 0x30,
+ 0x36, 0x5b, 0xce, 0x37, 0x82, 0xac, 0x41, 0x84, 0x44, 0xd7, 0x1e, 0x2f,
+ 0x97, 0xd4, 0x28, 0x5c, 0xd7, 0xd1, 0xa6, 0x3b, 0x63, 0xb2, 0xe4, 0xe9,
+ 0x75, 0xd8, 0x07, 0xad, 0x2f, 0xfe, 0x7f, 0xed, 0x5d, 0x6d, 0x53, 0xdb,
+ 0x48, 0xb6, 0xfe, 0xce, 0xaf, 0x50, 0x51, 0x37, 0x15, 0xd8, 0xb2, 0x9d,
+ 0x04, 0x02, 0x21, 0xa9, 0x6c, 0x76, 0x09, 0x90, 0x84, 0x5d, 0x02, 0x2c,
+ 0x76, 0x92, 0xd9, 0xda, 0xd9, 0xa2, 0x04, 0x96, 0x8d, 0x26, 0xb6, 0xe4,
+ 0x95, 0xe4, 0x00, 0x99, 0x9a, 0xfb, 0xdb, 0x6f, 0x9f, 0xd7, 0x6e, 0xa9,
+ 0xdb, 0x16, 0xcc, 0x24, 0x33, 0xfb, 0xe1, 0xce, 0x87, 0x21, 0xb6, 0xa5,
+ 0x7e, 0x3d, 0x7d, 0xfa, 0xbc, 0x3e, 0x87, 0x0c, 0xd0, 0xda, 0x1b, 0xf3,
+ 0x6c, 0x54, 0x0c, 0x8c, 0xba, 0x25, 0x05, 0xc7, 0x28, 0x95, 0x92, 0x2f,
+ 0xd1, 0xe6, 0x05, 0x0c, 0x91, 0x8b, 0x92, 0x4a, 0xab, 0xa6, 0x2f, 0xa7,
+ 0xd0, 0x19, 0x1d, 0xa2, 0x64, 0x94, 0xde, 0xc8, 0x6a, 0x98, 0xd3, 0xd7,
+ 0x4d, 0x6e, 0x66, 0xa6, 0xad, 0xee, 0x6a, 0x27, 0x10, 0x3b, 0x53, 0x39,
+ 0x1b, 0x4f, 0xa5, 0x19, 0xca, 0x68, 0xf5, 0xe7, 0x9f, 0xe1, 0xab, 0x5f,
+ 0x7e, 0x01, 0x12, 0x73, 0x6e, 0x08, 0x54, 0xe4, 0xca, 0xf5, 0x80, 0xe5,
+ 0xbb, 0x36, 0x29, 0x10, 0x12, 0x8b, 0x2a, 0x88, 0xc7, 0x0c, 0xaa, 0x24,
+ 0xeb, 0x9f, 0xd8, 0x29, 0xaa, 0x35, 0x3d, 0x0f, 0x42, 0x06, 0xc9, 0x94,
+ 0x6f, 0x01, 0xce, 0x6e, 0x63, 0xa7, 0x86, 0xdf, 0xa4, 0x04, 0x66, 0x81,
+ 0xdb, 0x0d, 0x41, 0x67, 0x3d, 0x1b, 0x52, 0x8a, 0x91, 0xf6, 0x6a, 0x79,
+ 0x23, 0xfe, 0x21, 0xd5, 0x07, 0xb5, 0x19, 0x90, 0x64, 0xa0, 0xb8, 0x5d,
+ 0x5a, 0x89, 0x1c, 0x18, 0x4f, 0xc0, 0x7b, 0x7d, 0x7b, 0x07, 0xf4, 0x0c,
+ 0x67, 0x01, 0x1e, 0xd0, 0x62, 0x4e, 0xc9, 0xf9, 0x5a, 0xeb, 0x01, 0xaa,
+ 0x8c, 0x83, 0x58, 0xf3, 0x10, 0x1e, 0x79, 0x18, 0x61, 0x6a, 0x90, 0xb9,
+ 0x96, 0xd2, 0x30, 0x49, 0x61, 0x25, 0x47, 0xa3, 0x6c, 0x98, 0x71, 0xe2,
+ 0x8d, 0x1c, 0x87, 0x57, 0xb4, 0x31, 0x58, 0x1a, 0x9e, 0x77, 0xdf, 0x32,
+ 0x63, 0xf5, 0x56, 0x81, 0xa1, 0x81, 0xdc, 0x86, 0x6d, 0xcb, 0x52, 0xd7,
+ 0xc5, 0x5f, 0x80, 0x0e, 0x57, 0x2a, 0x68, 0xce, 0x5b, 0x38, 0x15, 0x05,
+ 0xf9, 0xd7, 0x7f, 0xfb, 0xab, 0x04, 0xf3, 0x2d, 0xcc, 0x30, 0xca, 0x33,
+ 0x02, 0x1c, 0x16, 0x71, 0xbf, 0x8b, 0x2b, 0x44, 0x93, 0x33, 0xdc, 0x3a,
+ 0x3c, 0xca, 0xe6, 0xda, 0x81, 0xd8, 0x4c, 0xfb, 0xe8, 0xa4, 0x4a, 0x84,
+ 0x05, 0x2a, 0x3a, 0x16, 0xc0, 0x0a, 0xb4, 0xb1, 0x4e, 0x3d, 0x37, 0x10,
+ 0xeb, 0x1b, 0x22, 0x53, 0x1b, 0xcd, 0xb3, 0x4b, 0x06, 0xea, 0xf5, 0x83,
+ 0x68, 0x80, 0xe8, 0x11, 0x37, 0xb5, 0xbe, 0xdd, 0x72, 0xec, 0x31, 0x39,
+ 0xc1, 0x7c, 0x32, 0xda, 0x49, 0xca, 0x46, 0x07, 0x08, 0xa1, 0xc1, 0xf8,
+ 0x82, 0x78, 0x36, 0xf3, 0xf2, 0xbf, 0x62, 0xed, 0x8d, 0xb8, 0xb5, 0xb6,
+ 0x88, 0x03, 0x2e, 0x19, 0x69, 0x1f, 0xd2, 0x35, 0xf0, 0xf6, 0xe5, 0x7b,
+ 0x97, 0x84, 0x0b, 0xe0, 0x90, 0x1e, 0xd3, 0x28, 0x2b, 0x16, 0x90, 0x8d,
+ 0xa6, 0x94, 0x62, 0x91, 0x33, 0x3b, 0x1d, 0x47, 0x66, 0x6f, 0x66, 0xb7,
+ 0x30, 0x20, 0x6b, 0x13, 0x32, 0x0d, 0x28, 0x27, 0xae, 0x94, 0x5d, 0x25,
+ 0xa3, 0xaa, 0x5b, 0xe5, 0x5d, 0xf2, 0x8b, 0x91, 0x64, 0x6d, 0x94, 0x91,
+ 0x8f, 0x4a, 0x44, 0x42, 0x12, 0xd1, 0x95, 0x61, 0xa2, 0xbe, 0x47, 0x2f,
+ 0x03, 0xab, 0x3a, 0x21, 0x7e, 0x53, 0xad, 0x8a, 0x22, 0x61, 0x25, 0x0c,
+ 0xbd, 0x7a, 0xc4, 0xe6, 0x68, 0xa7, 0xc0, 0xa8, 0xcf, 0x46, 0x45, 0xb0,
+ 0xe4, 0xc0, 0xd1, 0xf0, 0x76, 0x76, 0x57, 0x13, 0x6a, 0x74, 0x8a, 0x9e,
+ 0x4f, 0xd2, 0x68, 0x3e, 0xd3, 0x5a, 0x42, 0x27, 0x19, 0x75, 0x80, 0xc8,
+ 0x26, 0x1c, 0xae, 0x42, 0x18, 0xbf, 0x1c, 0xa0, 0x65, 0xb4, 0xe0, 0x4a,
+ 0x59, 0x55, 0xa3, 0xad, 0x9f, 0x4a, 0x58, 0x7a, 0xd7, 0xc7, 0x81, 0xf8,
+ 0xb2, 0x9a, 0xbe, 0x4e, 0x53, 0x67, 0xd1, 0xfd, 0x6f, 0xfd, 0x93, 0x63,
+ 0xb1, 0x97, 0x01, 0x2f, 0xf5, 0x57, 0xa3, 0xf1, 0x5f, 0x31, 0x37, 0x34,
+ 0xe9, 0xf5, 0x89, 0xa8, 0x0a, 0xcd, 0x74, 0x41, 0x86, 0x1b, 0xc4, 0xfe,
+ 0xc0, 0x6c, 0xbb, 0x66, 0xc4, 0xcc, 0x4b, 0xf3, 0x61, 0x3d, 0x5a, 0xe4,
+ 0x1f, 0xbd, 0xd8, 0x7e, 0x5a, 0xdb, 0x57, 0x5c, 0xe3, 0x06, 0xcb, 0x02,
+ 0x45, 0xcc, 0x3c, 0xc6, 0x4d, 0xb4, 0xf0, 0xfd, 0xef, 0x63, 0x57, 0xaf,
+ 0xdd, 0xce, 0x7f, 0x2e, 0xa7, 0xe9, 0x7d, 0xc3, 0x15, 0x5d, 0xd1, 0x6c,
+ 0x71, 0x16, 0xca, 0x92, 0x10, 0xd3, 0xf7, 0x68, 0xfe, 0xc0, 0xe1, 0x48,
+ 0xd4, 0xf4, 0x70, 0x5e, 0x88, 0x08, 0xa1, 0x71, 0x7f, 0x14, 0xb5, 0x8d,
+ 0x49, 0x86, 0x98, 0x41, 0x86, 0x75, 0x7c, 0xc6, 0xfe, 0x1e, 0xe3, 0x39,
+ 0x2d, 0x13, 0x0a, 0x78, 0x82, 0xd8, 0x9e, 0x87, 0x86, 0x5e, 0x28, 0x20,
+ 0x1d, 0x58, 0xe0, 0x2a, 0x4a, 0x42, 0xec, 0x4d, 0xcb, 0x87, 0xab, 0x90,
+ 0x7c, 0x86, 0xf7, 0x3e, 0xba, 0xce, 0xfd, 0xe6, 0xf0, 0xb2, 0x78, 0xf8,
+ 0xea, 0x21, 0x67, 0xc0, 0xaf, 0xb2, 0x09, 0x0d, 0xf4, 0xfd, 0x55, 0xb2,
+ 0xbb, 0x03, 0xce, 0x2c, 0x8c, 0xde, 0x70, 0xed, 0x87, 0x2f, 0x1f, 0x46,
+ 0xfc, 0xa0, 0x3c, 0xd9, 0x0c, 0x2d, 0xc1, 0xf7, 0x38, 0xcb, 0x59, 0x8a,
+ 0xca, 0x0a, 0x90, 0x07, 0x85, 0xc7, 0x5d, 0xa5, 0x66, 0x11, 0x39, 0x0c,
+ 0xcc, 0x28, 0x58, 0x13, 0xe4, 0xb7, 0x9c, 0x47, 0x1d, 0x87, 0x24, 0x16,
+ 0x19, 0x39, 0x8f, 0xf5, 0x4f, 0x32, 0x56, 0xc9, 0x38, 0x8b, 0x27, 0x18,
+ 0x5c, 0x6f, 0xc5, 0x7f, 0xd3, 0x27, 0x82, 0x4c, 0x2e, 0xd0, 0xb6, 0x08,
+ 0x35, 0x12, 0x9c, 0xa4, 0x68, 0xc4, 0x0e, 0x56, 0x5a, 0x02, 0xbd, 0x22,
+ 0x45, 0xe5, 0x42, 0x6d, 0x04, 0x9e, 0xe6, 0xe8, 0xd7, 0x7c, 0xd2, 0x5c,
+ 0x59, 0xe4, 0xd9, 0x00, 0xf5, 0x88, 0xa4, 0xd7, 0x62, 0x5c, 0xc6, 0xf8,
+ 0xca, 0x1a, 0x16, 0x05, 0x99, 0x70, 0x34, 0x4c, 0x07, 0xad, 0xcf, 0xf0,
+ 0x24, 0x9b, 0x96, 0xd8, 0x75, 0xd7, 0xf1, 0xab, 0x1a, 0xd7, 0x8b, 0x32,
+ 0x6b, 0xee, 0x4a, 0x3d, 0xc3, 0x42, 0x70, 0xc3, 0xff, 0x3f, 0xbc, 0xff,
+ 0xbf, 0x2c, 0xbc, 0xdf, 0x49, 0xda, 0xa9, 0x25, 0xd6, 0x2d, 0x4c, 0xfe,
+ 0xff, 0xd5, 0xa5, 0x8a, 0xbc, 0xfc, 0x98, 0x3b, 0x32, 0x53, 0x1e, 0xd0,
+ 0xbd, 0x18, 0xa8, 0x5b, 0x05, 0xab, 0x53, 0x2b, 0x95, 0xd8, 0xa9, 0x67,
+ 0xee, 0xd4, 0xc3, 0xf0, 0x97, 0xee, 0xc3, 0x82, 0x40, 0xff, 0xc5, 0xad,
+ 0x29, 0xa3, 0xfe, 0xc8, 0x0b, 0x1b, 0x00, 0xc0, 0xdf, 0xe7, 0xcc, 0x2d,
+ 0x37, 0x55, 0x87, 0x8b, 0x19, 0x11, 0xf5, 0xb3, 0xbe, 0x23, 0x10, 0x18,
+ 0x82, 0x14, 0x92, 0x62, 0x90, 0x53, 0xd9, 0x0b, 0x29, 0x6f, 0x6c, 0x1e,
+ 0xa7, 0x9c, 0x31, 0x85, 0x8f, 0xc1, 0x40, 0x5b, 0x90, 0x5c, 0xa4, 0x09,
+ 0x3e, 0x60, 0x1d, 0x6d, 0xdb, 0x57, 0xde, 0x48, 0x29, 0xde, 0x04, 0x98,
+ 0x3a, 0xc3, 0x0e, 0x6f, 0x19, 0x92, 0x08, 0x8e, 0xa2, 0x69, 0xfc, 0xb3,
+ 0xd5, 0x5e, 0x41, 0xce, 0x4b, 0x2e, 0xe7, 0x55, 0xb0, 0x7e, 0x0d, 0xaa,
+ 0xc6, 0x09, 0xc2, 0xc5, 0xe3, 0x90, 0xd6, 0xdc, 0x80, 0xaa, 0xd5, 0xb3,
+ 0x04, 0x0b, 0x74, 0x77, 0xf7, 0x8d, 0x7c, 0xf6, 0x62, 0x75, 0xdd, 0x11,
+ 0x0d, 0x0c, 0x43, 0xc7, 0x9f, 0x7c, 0x6e, 0x1f, 0xee, 0x03, 0xb8, 0x59,
+ 0x31, 0x94, 0x79, 0xd7, 0x7b, 0x39, 0xe5, 0xd0, 0x85, 0xd2, 0x76, 0x01,
+ 0xb2, 0x93, 0x44, 0x34, 0x94, 0x21, 0x34, 0x7d, 0x59, 0x96, 0x22, 0x61,
+ 0xc5, 0x28, 0x5f, 0x08, 0x05, 0x0a, 0xdd, 0x8f, 0x72, 0x08, 0x60, 0x0c,
+ 0x4d, 0xf1, 0x0d, 0x05, 0x5d, 0x62, 0xdf, 0x82, 0x94, 0xc0, 0xa7, 0xf6,
+ 0x12, 0x4b, 0x52, 0xfa, 0x60, 0x25, 0x05, 0x2e, 0xb1, 0xd7, 0x7f, 0x8e,
+ 0x45, 0x94, 0x5c, 0x89, 0x91, 0x9b, 0x96, 0x6d, 0xf6, 0x04, 0xc7, 0x78,
+ 0x52, 0x75, 0xcb, 0x2f, 0x97, 0x61, 0x99, 0x8d, 0x6b, 0x26, 0xa9, 0x62,
+ 0xb9, 0x6b, 0x1e, 0xee, 0x7f, 0xb9, 0x7c, 0x21, 0x6e, 0x42, 0xc7, 0xbc,
+ 0xe5, 0x4b, 0xad, 0xe5, 0x6d, 0x76, 0x79, 0xb5, 0x7f, 0xdc, 0x0f, 0x37,
+ 0x4d, 0x4e, 0x76, 0xba, 0x84, 0x49, 0xfc, 0xc5, 0xe7, 0x8d, 0x2e, 0x94,
+ 0xcf, 0x4b, 0x52, 0xa4, 0xcd, 0xb0, 0xf3, 0x89, 0x91, 0x62, 0x7b, 0xdc,
+ 0x16, 0xfd, 0x16, 0x6e, 0xae, 0xf6, 0x82, 0x48, 0x6e, 0x88, 0xad, 0x44,
+ 0xf7, 0x0e, 0x2b, 0xde, 0x28, 0x51, 0x76, 0x63, 0x58, 0x10, 0x4c, 0x88,
+ 0xf7, 0xec, 0xc8, 0xba, 0xbf, 0xa0, 0x79, 0x1a, 0xfa, 0xe5, 0x26, 0x0b,
+ 0x07, 0x00, 0xa9, 0x29, 0x72, 0x1a, 0x12, 0x99, 0xa4, 0xb5, 0xa5, 0xb2,
+ 0x85, 0x53, 0xf9, 0x47, 0xc1, 0x18, 0xc1, 0x53, 0x05, 0xad, 0x71, 0x20,
+ 0xb7, 0xd7, 0xd8, 0x9e, 0xb9, 0x16, 0xf6, 0x8c, 0x56, 0x15, 0x1e, 0x55,
+ 0x03, 0xe3, 0x86, 0xca, 0xd9, 0x38, 0xfd, 0x6a, 0xb4, 0x3e, 0x6a, 0x78,
+ 0xa8, 0x9d, 0x11, 0x74, 0x59, 0xb8, 0xb9, 0xb5, 0x49, 0x6a, 0xf4, 0xbb,
+ 0x83, 0xd7, 0x7b, 0xfb, 0x87, 0x7b, 0xeb, 0xcd, 0x91, 0xec, 0x63, 0xc5,
+ 0xc6, 0xc0, 0x36, 0x29, 0xd9, 0x39, 0x83, 0xc0, 0x87, 0xd9, 0xe1, 0x44,
+ 0x36, 0xe2, 0x05, 0x5d, 0xa2, 0x08, 0x42, 0x6a, 0x0e, 0xb2, 0xc2, 0xcf,
+ 0x28, 0x21, 0xa2, 0xf4, 0x38, 0x35, 0x2a, 0x0b, 0x84, 0x35, 0xaa, 0x88,
+ 0x09, 0xf2, 0x7b, 0x75, 0x69, 0x2e, 0x52, 0x30, 0x75, 0x2f, 0x5e, 0x90,
+ 0xee, 0x10, 0xac, 0xe9, 0x20, 0xb1, 0x12, 0x34, 0xb0, 0x17, 0x24, 0x33,
+ 0x2e, 0xe3, 0x72, 0xc2, 0x1c, 0x00, 0xc7, 0xdc, 0x05, 0xd3, 0x61, 0x7f,
+ 0xb7, 0x7f, 0xd4, 0xb4, 0x3a, 0x2b, 0x2b, 0xd4, 0xd8, 0xcf, 0xd2, 0x8f,
+ 0x51, 0x17, 0x0d, 0x85, 0xd7, 0xbd, 0xbf, 0x77, 0xb6, 0xfb, 0xde, 0x10,
+ 0x1b, 0x2a, 0x71, 0x01, 0x20, 0x22, 0x5c, 0x1f, 0xf3, 0x35, 0x8e, 0xc2,
+ 0xdb, 0xef, 0xb7, 0xfd, 0x7e, 0x77, 0xf7, 0xf4, 0x30, 0xdc, 0x05, 0xff,
+ 0x88, 0x28, 0x2c, 0x82, 0xc9, 0xe5, 0xb5, 0xf0, 0xae, 0x3f, 0xe8, 0xcb,
+ 0x1f, 0x19, 0x13, 0x19, 0xcc, 0xca, 0x5a, 0xdd, 0x5f, 0x79, 0xdc, 0x10,
+ 0xde, 0x06, 0xfd, 0x79, 0xb4, 0xa1, 0x2f, 0x68, 0x35, 0x1b, 0x59, 0x9f,
+ 0x5e, 0xe0, 0xb5, 0x4d, 0x7e, 0x6d, 0x73, 0xd9, 0x6b, 0x81, 0xf7, 0xfa,
+ 0xe4, 0xf4, 0x5e, 0xc2, 0x06, 0x28, 0x61, 0x26, 0x00, 0xdd, 0x84, 0xaf,
+ 0x53, 0xdd, 0x4b, 0x5f, 0x4e, 0xdd, 0x3f, 0xae, 0x37, 0xa0, 0x06, 0x0e,
+ 0xf8, 0xa5, 0x2b, 0xb5, 0x70, 0x58, 0x16, 0x77, 0xdc, 0x31, 0x01, 0x91,
+ 0xf7, 0xf4, 0xcb, 0xb6, 0x93, 0x1b, 0x01, 0x1b, 0x89, 0x5f, 0xa9, 0xe9,
+ 0xd5, 0x7b, 0x43, 0x1c, 0x66, 0xe1, 0x49, 0xb9, 0x5e, 0xc0, 0x26, 0x89,
+ 0x2d, 0xdb, 0xcb, 0xa3, 0xb8, 0x18, 0x27, 0x23, 0x1f, 0x9e, 0xc9, 0x5b,
+ 0x2b, 0x9d, 0xaa, 0xcd, 0x35, 0x33, 0x97, 0xf5, 0x04, 0x5e, 0xa7, 0x2c,
+ 0x85, 0x0e, 0x27, 0x2b, 0xe0, 0x57, 0xc5, 0x22, 0x1e, 0x67, 0xe6, 0xba,
+ 0xf1, 0xf6, 0xb5, 0x37, 0x0c, 0x43, 0xad, 0x5f, 0x81, 0x81, 0x2b, 0x17,
+ 0x1b, 0x26, 0x2e, 0x03, 0x5b, 0xfb, 0x92, 0xc6, 0xd1, 0xf8, 0x6b, 0x3a,
+ 0xc3, 0x1a, 0x38, 0x60, 0xda, 0x5d, 0x47, 0x51, 0x41, 0x71, 0x94, 0xc2,
+ 0xdd, 0xd1, 0x80, 0x94, 0xfb, 0x2d, 0x5f, 0x89, 0xf7, 0x20, 0x5c, 0xf6,
+ 0xfb, 0x47, 0x77, 0x5e, 0x08, 0x95, 0x46, 0xeb, 0x60, 0x75, 0x4d, 0x65,
+ 0x02, 0x9c, 0x4e, 0xfc, 0xe7, 0x3e, 0x1b, 0x03, 0x2f, 0x9c, 0x7f, 0x7a,
+ 0x1d, 0x1e, 0x0d, 0xb6, 0x36, 0x4c, 0xa0, 0xa4, 0x98, 0xd8, 0xb7, 0xae,
+ 0xd3, 0xec, 0x22, 0x35, 0x4c, 0xed, 0x2a, 0x99, 0xcc, 0xe8, 0x9a, 0x5c,
+ 0xdc, 0xf6, 0x29, 0x20, 0xff, 0xd3, 0x1f, 0x78, 0xee, 0x4a, 0x98, 0xf9,
+ 0xe9, 0xfc, 0x62, 0x62, 0xd6, 0xbe, 0x3f, 0x37, 0x5a, 0xcc, 0x4d, 0x74,
+ 0x94, 0x72, 0x50, 0x3e, 0x2b, 0xba, 0x82, 0x8a, 0x96, 0x96, 0x4b, 0xae,
+ 0x0a, 0x12, 0xc9, 0xf1, 0x84, 0xd6, 0x00, 0xd0, 0x6d, 0x49, 0x33, 0x12,
+ 0x24, 0x57, 0x67, 0xd4, 0x57, 0x39, 0xf7, 0x70, 0x06, 0x75, 0xf3, 0x6e,
+ 0x92, 0xd2, 0x77, 0x77, 0xf5, 0x4f, 0x8f, 0x0f, 0xde, 0x9e, 0xc8, 0x9f,
+ 0xfb, 0xac, 0x68, 0x9f, 0x66, 0x0d, 0x7f, 0x14, 0x5f, 0xd3, 0x10, 0x11,
+ 0x18, 0x46, 0xe0, 0xfe, 0x57, 0xb9, 0x8b, 0x22, 0x3c, 0xa4, 0x99, 0x0e,
+ 0x65, 0xa5, 0xf9, 0x31, 0x06, 0x2e, 0xbb, 0xc1, 0x68, 0xdb, 0x3e, 0x85,
+ 0xd8, 0xf6, 0xa9, 0x62, 0xab, 0x11, 0x8c, 0xb2, 0xc0, 0x10, 0x0c, 0x6f,
+ 0xe5, 0x3f, 0x4b, 0xc7, 0xca, 0x38, 0xef, 0x0b, 0x44, 0x24, 0x04, 0xcf,
+ 0xef, 0x1b, 0xe1, 0xd6, 0x0c, 0xf4, 0x8c, 0x32, 0x0b, 0x4f, 0xd9, 0xf9,
+ 0xb8, 0xbe, 0x6c, 0x49, 0x16, 0x2c, 0xb4, 0xd9, 0x79, 0x00, 0xac, 0xf3,
+ 0xc6, 0x00, 0x97, 0xe5, 0x7b, 0xbc, 0x22, 0xc3, 0x2f, 0xd2, 0x7d, 0xcd,
+ 0x97, 0xa8, 0x5e, 0xad, 0x4b, 0xe7, 0xf5, 0x21, 0x4b, 0xc1, 0x04, 0xb6,
+ 0xa0, 0xa2, 0x0d, 0xfd, 0xa8, 0xac, 0x38, 0xd7, 0xd8, 0xd7, 0x50, 0x3b,
+ 0x37, 0x7d, 0x4c, 0x98, 0x2d, 0x17, 0xb6, 0x75, 0xc3, 0xa9, 0xb9, 0x65,
+ 0xfd, 0x92, 0x5a, 0x20, 0x3b, 0x7e, 0x2d, 0xab, 0x61, 0x1b, 0x07, 0x82,
+ 0x67, 0xd6, 0x19, 0x93, 0xd5, 0x62, 0xe9, 0x11, 0x9b, 0x09, 0x0f, 0xe3,
+ 0x8e, 0xbc, 0xa7, 0x5d, 0xdd, 0x44, 0x35, 0x6d, 0xa1, 0x6a, 0x79, 0x45,
+ 0x41, 0x5f, 0x93, 0x19, 0xa9, 0x7c, 0xef, 0xe1, 0xe3, 0x34, 0xce, 0xe6,
+ 0x6e, 0xf8, 0x54, 0xf7, 0x1a, 0xbe, 0x45, 0x67, 0x1c, 0x04, 0x29, 0x47,
+ 0x2f, 0x49, 0xb7, 0x7b, 0x15, 0xb0, 0xd2, 0xd5, 0xe0, 0x5c, 0x6a, 0x5a,
+ 0x20, 0xda, 0x64, 0x30, 0xf6, 0x34, 0x1e, 0x81, 0xd0, 0x17, 0x6b, 0xd4,
+ 0xde, 0x90, 0x2e, 0x06, 0x1f, 0x34, 0xb4, 0xe8, 0x89, 0x0a, 0x88, 0xad,
+ 0x44, 0x1c, 0x0f, 0xc1, 0xc1, 0x94, 0xe8, 0xf9, 0x34, 0x9d, 0x88, 0x79,
+ 0xc4, 0xf4, 0xa8, 0xf1, 0xac, 0xe0, 0x7d, 0x0b, 0x59, 0xe9, 0x20, 0x15,
+ 0x2b, 0x9b, 0x4f, 0x2f, 0x20, 0x5c, 0x71, 0x64, 0x9d, 0x0e, 0x3d, 0x56,
+ 0x79, 0xb0, 0x17, 0x2f, 0x92, 0x03, 0x73, 0xc0, 0x7c, 0xb3, 0x5a, 0x45,
+ 0x11, 0x7d, 0xab, 0x34, 0x1e, 0xa8, 0x51, 0x91, 0x17, 0x36, 0x39, 0x0f,
+ 0x71, 0x21, 0x58, 0xe1, 0x89, 0x49, 0xe9, 0xe5, 0xf6, 0x29, 0xdc, 0x27,
+ 0x90, 0xad, 0xc7, 0xfa, 0xd5, 0x5f, 0x05, 0x5e, 0x62, 0x55, 0x52, 0x0b,
+ 0x6b, 0x41, 0x04, 0xda, 0x9c, 0xae, 0x0a, 0x34, 0xe8, 0xa5, 0x3c, 0x0f,
+ 0x29, 0x1a, 0x04, 0x63, 0xcd, 0x13, 0xd3, 0x68, 0x77, 0x35, 0xac, 0x65,
+ 0x5a, 0xbf, 0xa0, 0x48, 0x61, 0x51, 0xdd, 0x8c, 0x27, 0xdd, 0x10, 0x6b,
+ 0xbb, 0x28, 0xab, 0xb4, 0x9a, 0x13, 0xdc, 0x6a, 0x20, 0x74, 0x87, 0x7c,
+ 0x5a, 0x39, 0x07, 0x23, 0x39, 0xb5, 0x4a, 0x29, 0xff, 0x79, 0x94, 0x56,
+ 0x1d, 0x58, 0x4d, 0x42, 0xf5, 0xb8, 0xc0, 0x3a, 0x84, 0x93, 0xfc, 0x1a,
+ 0x93, 0x68, 0x27, 0x5e, 0x10, 0xa4, 0x0c, 0xac, 0x5e, 0xaf, 0xc3, 0xbc,
+ 0xfe, 0xe0, 0x67, 0xf9, 0xf1, 0x1c, 0xbd, 0xa4, 0xb2, 0x4e, 0x3c, 0xe0,
+ 0x18, 0xac, 0xa2, 0x7e, 0xee, 0xe7, 0x24, 0x7a, 0x80, 0x2b, 0xf2, 0x13,
+ 0x78, 0xcb, 0x69, 0x59, 0xcc, 0x90, 0xa7, 0xd8, 0xe0, 0x83, 0x9e, 0xca,
+ 0x53, 0xb6, 0x91, 0xe4, 0x1a, 0xb5, 0xdf, 0x85, 0x75, 0x66, 0x7e, 0xcc,
+ 0x3a, 0xe8, 0xa9, 0x2f, 0xcc, 0x58, 0xc6, 0x18, 0xd0, 0x05, 0x55, 0xa1,
+ 0x71, 0x13, 0x7f, 0xa4, 0x30, 0xad, 0x38, 0xaa, 0xe2, 0x0b, 0x8e, 0x1c,
+ 0xa5, 0xef, 0xc3, 0xca, 0xb6, 0x74, 0x9a, 0x96, 0x6e, 0x05, 0x67, 0x4e,
+ 0x13, 0xa0, 0xa8, 0x6d, 0xd3, 0x5c, 0x5c, 0x0c, 0xd5, 0xb4, 0x7a, 0x31,
+ 0x17, 0x42, 0x6d, 0x5a, 0x30, 0x8d, 0x9c, 0x34, 0x16, 0x53, 0xc6, 0x83,
+ 0x9f, 0x09, 0x86, 0x84, 0x56, 0xe8, 0x01, 0xbd, 0xfc, 0xf3, 0x2f, 0x7e,
+ 0x84, 0x1f, 0x75, 0x5f, 0xb3, 0xe5, 0x72, 0x2c, 0x0a, 0x52, 0x1a, 0xe5,
+ 0x8c, 0x80, 0x45, 0x3a, 0xab, 0x22, 0x2d, 0x4c, 0x88, 0x86, 0xe9, 0x10,
+ 0x08, 0xc3, 0x03, 0x6a, 0x83, 0x5c, 0xd8, 0x9a, 0x01, 0x41, 0x95, 0x18,
+ 0xb8, 0xc4, 0xad, 0xe7, 0x21, 0xe4, 0x7c, 0xf9, 0x51, 0x40, 0xcb, 0x65,
+ 0xf5, 0xbd, 0xe6, 0x08, 0x57, 0xd7, 0x10, 0xba, 0xde, 0x38, 0x7c, 0x42,
+ 0x42, 0x9a, 0xc5, 0xed, 0x07, 0x84, 0xe3, 0x83, 0x65, 0xc5, 0x98, 0xe5,
+ 0x69, 0x76, 0x1d, 0x89, 0x5d, 0x2b, 0xaf, 0xb3, 0x25, 0xb6, 0xc3, 0x3a,
+ 0xd0, 0x42, 0x37, 0x94, 0x07, 0x46, 0x8d, 0xbb, 0x0b, 0x1e, 0xad, 0xa9,
+ 0x59, 0x76, 0x37, 0x97, 0x64, 0xe7, 0x69, 0xef, 0xf1, 0x7a, 0x20, 0xf8,
+ 0x01, 0x83, 0x80, 0x62, 0x6b, 0x33, 0xa9, 0x40, 0xec, 0x05, 0x0c, 0x6d,
+ 0x08, 0x85, 0x24, 0x66, 0x29, 0xb8, 0x0b, 0x4c, 0xa7, 0x8c, 0x6f, 0x80,
+ 0xbb, 0xe4, 0xe5, 0x08, 0x76, 0x9c, 0x8d, 0xd0, 0x3d, 0xa6, 0xa5, 0xb7,
+ 0xa3, 0xc1, 0x53, 0x88, 0x1e, 0x97, 0x75, 0xde, 0x0f, 0x0e, 0x39, 0x08,
+ 0x1c, 0x62, 0x34, 0xab, 0x69, 0x12, 0x3b, 0x2d, 0xad, 0x62, 0x78, 0x6a,
+ 0xb6, 0x1e, 0x0b, 0x75, 0x60, 0x09, 0x2f, 0xe6, 0x8a, 0x10, 0xed, 0x37,
+ 0x97, 0x45, 0x4a, 0xc8, 0x9a, 0xd0, 0x48, 0x99, 0xf3, 0xef, 0xb9, 0x02,
+ 0x69, 0x86, 0x79, 0x80, 0x4a, 0x9d, 0x6e, 0x93, 0x01, 0x37, 0x6f, 0x8d,
+ 0x35, 0xa7, 0x4e, 0x44, 0xa7, 0xbd, 0x9f, 0x34, 0xf2, 0xb4, 0xe7, 0x20,
+ 0x59, 0x07, 0x34, 0x15, 0xa2, 0x48, 0xd3, 0x28, 0xd8, 0xa0, 0x29, 0x01,
+ 0xc6, 0x70, 0x57, 0x94, 0xdc, 0x70, 0xbd, 0x18, 0x35, 0xd4, 0xe1, 0x85,
+ 0xee, 0x1e, 0x79, 0xba, 0xb6, 0x64, 0x34, 0xa2, 0x0b, 0x6e, 0x56, 0xa4,
+ 0x68, 0xb3, 0xc9, 0xb9, 0x7b, 0x3b, 0x3d, 0x77, 0x7e, 0x82, 0x33, 0x04,
+ 0xbf, 0x7a, 0x19, 0xd7, 0xe6, 0xe9, 0x57, 0xaf, 0x68, 0x23, 0xc1, 0x0b,
+ 0x8d, 0x10, 0x09, 0x5a, 0xd6, 0x19, 0xfc, 0xaf, 0x6e, 0x79, 0x4d, 0x5f,
+ 0x0b, 0x38, 0x19, 0x1c, 0xbc, 0x00, 0x54, 0x41, 0x89, 0x89, 0x83, 0x61,
+ 0x3c, 0xe8, 0x96, 0xb7, 0xd3, 0x0b, 0xca, 0xd1, 0x62, 0x0a, 0x34, 0x7c,
+ 0x91, 0xbf, 0xc3, 0x71, 0x43, 0xd8, 0x07, 0xfa, 0x21, 0xbd, 0x3a, 0x5d,
+ 0x21, 0xd7, 0x7f, 0x0f, 0x3a, 0xb8, 0xc0, 0x8a, 0xae, 0xa4, 0x31, 0x81,
+ 0x19, 0x32, 0xbf, 0xa4, 0x1a, 0x63, 0x80, 0x5a, 0x6e, 0x0e, 0xf4, 0x03,
+ 0x8c, 0x4f, 0xf2, 0xc2, 0xec, 0x8c, 0x92, 0x3b, 0xc7, 0xf0, 0xbc, 0x6b,
+ 0x1b, 0x90, 0xea, 0x3a, 0x70, 0x28, 0xf8, 0x97, 0xea, 0x17, 0x47, 0xe6,
+ 0xbe, 0x88, 0xa1, 0xdc, 0x8a, 0xa2, 0x0e, 0x84, 0x2b, 0x32, 0x59, 0x08,
+ 0x02, 0x41, 0xbb, 0x10, 0xb7, 0x27, 0x45, 0x73, 0xdb, 0x50, 0xd0, 0x07,
+ 0xb2, 0xed, 0x90, 0x87, 0xe3, 0x71, 0x77, 0xe8, 0x6c, 0xc8, 0xa8, 0xc4,
+ 0xa0, 0x99, 0x63, 0x7d, 0x44, 0xeb, 0xfb, 0x07, 0x61, 0x90, 0x83, 0xb0,
+ 0x83, 0xec, 0xdc, 0xb9, 0xba, 0xd4, 0xb4, 0x19, 0x2a, 0xdf, 0x7e, 0x99,
+ 0x80, 0x32, 0xd8, 0xe4, 0xc2, 0x38, 0x6c, 0xf3, 0x0b, 0x55, 0xb3, 0x4d,
+ 0x80, 0xa3, 0x8b, 0xe3, 0x41, 0x33, 0xce, 0xd0, 0xd8, 0xd9, 0x5d, 0xee,
+ 0xba, 0xd6, 0xea, 0x5a, 0x99, 0x4d, 0x6a, 0xe7, 0xda, 0x50, 0x1d, 0xae,
+ 0x0c, 0xd5, 0xd1, 0x8a, 0x6d, 0x01, 0x6b, 0x79, 0x53, 0x75, 0x20, 0xa5,
+ 0x01, 0xe1, 0x9f, 0x51, 0x24, 0x56, 0xbd, 0x35, 0x5a, 0x73, 0x13, 0x36,
+ 0x77, 0x0c, 0x8b, 0x59, 0xf1, 0xdd, 0x6a, 0xc0, 0x91, 0xcf, 0xb1, 0xae,
+ 0x13, 0xad, 0xd1, 0x1e, 0x7d, 0xd5, 0x1d, 0xc0, 0x57, 0x9c, 0x70, 0x2c,
+ 0x37, 0x0b, 0x8c, 0x5a, 0x6a, 0x14, 0x40, 0x1e, 0xc8, 0x68, 0xf9, 0xc8,
+ 0x28, 0x56, 0x16, 0x8c, 0x58, 0x46, 0xbc, 0xf3, 0x36, 0x04, 0xcd, 0x77,
+ 0xd3, 0x72, 0xec, 0xec, 0x0f, 0xc5, 0xf4, 0x4c, 0x01, 0x2e, 0x60, 0x9c,
+ 0xd4, 0x87, 0xff, 0x6c, 0x2b, 0x30, 0x7c, 0x88, 0x10, 0x42, 0xf5, 0xc2,
+ 0xb9, 0xb1, 0x8d, 0x14, 0x99, 0x14, 0x90, 0xb3, 0x4d, 0x3f, 0x47, 0xf8,
+ 0x3b, 0xcf, 0xc3, 0x26, 0x7f, 0x51, 0xd3, 0xcb, 0x87, 0xbf, 0xb8, 0x5f,
+ 0x11, 0x04, 0xcf, 0xc9, 0x39, 0x65, 0x6e, 0xc9, 0xe5, 0x2d, 0x61, 0xee,
+ 0xc1, 0xa4, 0x4a, 0xa7, 0x31, 0x03, 0xc6, 0x10, 0x5e, 0x8c, 0x4a, 0x61,
+ 0x11, 0xc7, 0xd3, 0x21, 0x0e, 0xb2, 0x39, 0x60, 0xbd, 0xb6, 0xe6, 0xb8,
+ 0x26, 0x3d, 0x52, 0x10, 0x83, 0x50, 0x80, 0x4f, 0x30, 0x1d, 0xa9, 0x11,
+ 0xac, 0x82, 0xb8, 0x3c, 0xb0, 0x21, 0x40, 0xcb, 0x2d, 0xdb, 0x94, 0x4b,
+ 0x90, 0x3b, 0x13, 0x33, 0xe1, 0x60, 0x9c, 0xa0, 0x8b, 0xd8, 0xcd, 0x6c,
+ 0x44, 0x39, 0xba, 0x9b, 0x77, 0x96, 0x37, 0xa7, 0xf9, 0x92, 0x9a, 0xcf,
+ 0x70, 0x08, 0x7e, 0x7c, 0x14, 0x55, 0xe6, 0x14, 0x05, 0x00, 0xf7, 0x5e,
+ 0x3e, 0xbd, 0x60, 0x86, 0xbd, 0xbc, 0x39, 0x9b, 0xf7, 0xf4, 0x37, 0x27,
+ 0xd3, 0x92, 0x24, 0x0a, 0x37, 0xe1, 0xd2, 0xa3, 0xaf, 0x51, 0x35, 0x3b,
+ 0x37, 0x74, 0x5a, 0xdc, 0x9e, 0x23, 0x8e, 0xd3, 0xc0, 0x89, 0x33, 0xc7,
+ 0x2f, 0x70, 0xa5, 0x88, 0x83, 0xcc, 0x67, 0x30, 0x24, 0xe4, 0x77, 0x93,
+ 0x9c, 0xac, 0xc6, 0x6d, 0xc3, 0xaa, 0x63, 0x2f, 0xbd, 0x71, 0x12, 0xc6,
+ 0x82, 0x42, 0xd2, 0xb9, 0x44, 0xc3, 0xec, 0x52, 0xa8, 0x4b, 0x7e, 0xf1,
+ 0x13, 0x08, 0x1b, 0xa4, 0xfb, 0x18, 0xd6, 0x8c, 0x12, 0x9e, 0xe2, 0xb5,
+ 0x8b, 0xa8, 0x17, 0x50, 0x20, 0xfc, 0x23, 0x26, 0xe2, 0x9f, 0x25, 0xee,
+ 0x8f, 0x20, 0xec, 0x93, 0x94, 0xe5, 0x94, 0x7e, 0x46, 0xb4, 0xdc, 0x16,
+ 0xd6, 0x54, 0xc4, 0xb7, 0x80, 0x65, 0x9b, 0x66, 0x97, 0xb6, 0x50, 0x67,
+ 0x4c, 0x7e, 0x5d, 0x35, 0x8d, 0xc9, 0xe0, 0xf0, 0x74, 0x2f, 0x6f, 0x8e,
+ 0xc5, 0x02, 0x7d, 0x15, 0xb5, 0x90, 0x26, 0x5f, 0xda, 0x0c, 0x1c, 0xb0,
+ 0xc0, 0xf9, 0x61, 0x19, 0x12, 0x4d, 0xaf, 0x76, 0x5a, 0x29, 0xec, 0xd8,
+ 0x75, 0x52, 0xc0, 0x28, 0x3b, 0x18, 0x9b, 0x15, 0xaa, 0x9b, 0xd8, 0xd4,
+ 0xe0, 0x31, 0xc7, 0x01, 0x42, 0x4e, 0xcd, 0xd5, 0x1d, 0x9b, 0x65, 0x83,
+ 0x48, 0x02, 0x11, 0x37, 0xaf, 0x53, 0x88, 0xb3, 0x3d, 0xb8, 0x81, 0xf2,
+ 0xc4, 0x94, 0x4c, 0x3c, 0x6f, 0xe3, 0xe7, 0x13, 0xbc, 0x0f, 0x86, 0x8a,
+ 0x65, 0x42, 0xda, 0xf1, 0x2d, 0x6e, 0xc0, 0xb8, 0xc8, 0xe7, 0x33, 0x9b,
+ 0x05, 0x8e, 0x3e, 0xd3, 0x96, 0xd1, 0xe9, 0x2d, 0x4d, 0x6c, 0x0b, 0xca,
+ 0xc4, 0x73, 0x16, 0x1c, 0x43, 0xb8, 0x2a, 0xe6, 0x1d, 0xaa, 0x86, 0x2d,
+ 0xa3, 0x2b, 0xa9, 0x9e, 0x0c, 0xef, 0x26, 0x12, 0x9f, 0x51, 0x8c, 0x02,
+ 0xa8, 0x27, 0xe0, 0xf8, 0x3e, 0xb7, 0xdc, 0x14, 0xc3, 0x9e, 0x95, 0x97,
+ 0x2a, 0x69, 0xe2, 0x03, 0x38, 0x28, 0xe0, 0xeb, 0x23, 0xcc, 0x75, 0x4c,
+ 0xb3, 0xc5, 0x2e, 0x30, 0x9b, 0x20, 0x53, 0x56, 0x4e, 0x6a, 0x8d, 0x40,
+ 0x10, 0x51, 0x0e, 0x2e, 0xa4, 0xf0, 0x2b, 0xf9, 0x2e, 0x18, 0x17, 0xc1,
+ 0xd0, 0x35, 0xc7, 0xb5, 0x78, 0x38, 0xd2, 0x63, 0xdb, 0xf2, 0xd0, 0xb4,
+ 0xd6, 0x38, 0xd7, 0x07, 0x9d, 0x04, 0xeb, 0xc4, 0x12, 0x91, 0x41, 0xec,
+ 0x9d, 0x1c, 0x1f, 0x1f, 0xec, 0x0d, 0x34, 0x6b, 0x31, 0x38, 0x3a, 0x2d,
+ 0x60, 0x4d, 0x57, 0x10, 0x7c, 0xe7, 0x54, 0xb5, 0x26, 0x79, 0x1c, 0xc6,
+ 0x17, 0xe9, 0x7d, 0x31, 0xb9, 0x8d, 0x82, 0x20, 0x75, 0x4d, 0xdf, 0x9a,
+ 0x5b, 0x65, 0xe4, 0x71, 0xe0, 0xa0, 0x34, 0x82, 0xec, 0x16, 0x70, 0x17,
+ 0x2b, 0xed, 0x7c, 0x4e, 0x6e, 0xed, 0xf9, 0x6b, 0x3d, 0x28, 0xe6, 0xfa,
+ 0x0b, 0x75, 0x8a, 0x00, 0x66, 0xe7, 0xe9, 0xcc, 0xbd, 0x76, 0x0f, 0x4f,
+ 0x23, 0x08, 0x5a, 0xc2, 0x32, 0x11, 0x7c, 0xdb, 0x12, 0xce, 0x99, 0x83,
+ 0xb6, 0x82, 0x57, 0x40, 0xeb, 0x8e, 0x5c, 0x52, 0x11, 0x5c, 0xf4, 0xba,
+ 0x3a, 0x68, 0xc6, 0x5d, 0xe1, 0x26, 0xe2, 0x84, 0x05, 0xe7, 0xca, 0xd3,
+ 0x40, 0xe8, 0x52, 0xe4, 0x7b, 0x65, 0x7a, 0xe1, 0x19, 0xa0, 0xb4, 0xa4,
+ 0x33, 0xa0, 0xe1, 0x52, 0x7d, 0x64, 0x6b, 0x8a, 0x72, 0xc6, 0xed, 0x0c,
+ 0xac, 0x65, 0x06, 0x3a, 0x6a, 0xaf, 0x63, 0x46, 0xd9, 0xaa, 0x31, 0x36,
+ 0xa0, 0x16, 0xfe, 0xde, 0x45, 0x63, 0x73, 0x7a, 0xa5, 0xeb, 0xa1, 0x7d,
+ 0xe9, 0x38, 0xb1, 0xb6, 0x26, 0x37, 0x6d, 0x04, 0x36, 0xd0, 0x4c, 0xef,
+ 0xdc, 0x91, 0x71, 0x8f, 0x75, 0xb6, 0x9c, 0xe1, 0xe5, 0x48, 0xb9, 0xa5,
+ 0x8d, 0x77, 0xe3, 0x71, 0x19, 0xf1, 0x74, 0xf9, 0x28, 0x34, 0x6d, 0xab,
+ 0x27, 0xee, 0x6c, 0x29, 0x67, 0xbc, 0x40, 0xd8, 0x6d, 0x91, 0x6f, 0x45,
+ 0x12, 0x26, 0x07, 0xef, 0x12, 0x71, 0xf7, 0xee, 0x52, 0x5d, 0x50, 0x18,
+ 0xc6, 0x55, 0xa1, 0xad, 0x2b, 0x6b, 0xab, 0x92, 0x25, 0xd7, 0x91, 0xfe,
+ 0x80, 0xe8, 0xf4, 0xbc, 0x14, 0x62, 0x78, 0x09, 0x9a, 0x49, 0x23, 0xdf,
+ 0x6a, 0x1a, 0xea, 0x51, 0xcd, 0x3a, 0xca, 0xda, 0xb8, 0x57, 0x4f, 0x1a,
+ 0xf0, 0xe9, 0xa2, 0xe5, 0x32, 0x17, 0x73, 0xd0, 0x1a, 0x64, 0xa1, 0xc5,
+ 0xa4, 0x74, 0x40, 0xac, 0x7c, 0x8c, 0x35, 0x6a, 0x09, 0xd5, 0x70, 0xbd,
+ 0x67, 0xc3, 0xcc, 0xdb, 0x45, 0x0d, 0xd3, 0x4c, 0x35, 0x2f, 0x25, 0xf6,
+ 0xe5, 0xb0, 0x8f, 0xda, 0x2c, 0x96, 0x1f, 0xe2, 0x5c, 0xe4, 0xe8, 0x3e,
+ 0xbc, 0x65, 0x73, 0xc1, 0x26, 0xc8, 0xd8, 0x4a, 0x77, 0x13, 0xec, 0x97,
+ 0xc4, 0xee, 0x41, 0xb5, 0x20, 0xa3, 0x87, 0x25, 0xcd, 0x3b, 0x1e, 0x90,
+ 0x15, 0x0f, 0xbf, 0x88, 0x14, 0x0f, 0x97, 0x9f, 0x61, 0xe2, 0x9e, 0x45,
+ 0x85, 0x13, 0x91, 0x16, 0x21, 0x1d, 0x80, 0x94, 0x21, 0xbe, 0x26, 0xe3,
+ 0x24, 0x81, 0x96, 0x75, 0x13, 0x78, 0x76, 0xb2, 0x43, 0x82, 0xfe, 0x8a,
+ 0x20, 0x81, 0x5f, 0x93, 0x22, 0x67, 0x2d, 0xa8, 0x17, 0xdd, 0x6b, 0xdd,
+ 0x42, 0x2a, 0x09, 0x5e, 0x5c, 0xe7, 0x65, 0x39, 0x81, 0xcb, 0x28, 0x1d,
+ 0xdd, 0x9a, 0x45, 0x2c, 0x8d, 0xd8, 0xd5, 0x2e, 0x57, 0xd1, 0x73, 0xc2,
+ 0xea, 0x1c, 0x57, 0xf9, 0xc3, 0x12, 0xfd, 0x6a, 0xb3, 0xc4, 0x32, 0x84,
+ 0x36, 0xce, 0x0d, 0xea, 0x0d, 0x76, 0x6f, 0x13, 0xf0, 0xf8, 0x66, 0x56,
+ 0x05, 0xb2, 0x17, 0x3d, 0x66, 0xe7, 0x63, 0xeb, 0xc2, 0xd5, 0x5a, 0x82,
+ 0x46, 0x6c, 0xd6, 0x69, 0x9d, 0xc7, 0x6d, 0x85, 0x78, 0x9c, 0xd0, 0xcb,
+ 0x39, 0xc5, 0x84, 0x63, 0x5e, 0x83, 0xb9, 0x40, 0x58, 0xd0, 0xa6, 0x93,
+ 0x01, 0x8d, 0xe2, 0x79, 0x16, 0x0b, 0x66, 0xf7, 0x08, 0x74, 0x0c, 0xb8,
+ 0x09, 0x5a, 0xa6, 0x2a, 0x96, 0x10, 0xa2, 0x40, 0x87, 0x38, 0xd7, 0x72,
+ 0x2e, 0xf6, 0x06, 0xde, 0x9a, 0x9b, 0x2e, 0xfe, 0x50, 0x46, 0x8b, 0xfc,
+ 0xab, 0xce, 0xb5, 0xb0, 0xde, 0xe1, 0x2c, 0x70, 0x8d, 0xea, 0xb6, 0x21,
+ 0x6a, 0xf1, 0x25, 0x84, 0x04, 0x62, 0xf0, 0x7a, 0x8c, 0x7d, 0xb5, 0x89,
+ 0xf1, 0x78, 0xfb, 0x63, 0x42, 0x33, 0xba, 0x3b, 0xc6, 0x70, 0x97, 0x82,
+ 0x5a, 0xe9, 0xad, 0x11, 0x24, 0x58, 0xd5, 0x08, 0xff, 0x8c, 0xbe, 0x7a,
+ 0xa1, 0x32, 0xa7, 0xe6, 0xbc, 0x8a, 0x1e, 0x7f, 0x1f, 0x4a, 0xdd, 0x0e,
+ 0x6e, 0x0c, 0xa8, 0x4c, 0x2a, 0x3e, 0xf0, 0x69, 0xa3, 0xe2, 0x65, 0x46,
+ 0x8a, 0x68, 0x08, 0x11, 0xbf, 0xfe, 0xee, 0xb5, 0x12, 0x03, 0x0b, 0x0c,
+ 0x28, 0x2f, 0xe4, 0x45, 0x58, 0x22, 0xe0, 0x51, 0x89, 0x48, 0x30, 0xb0,
+ 0xba, 0x5d, 0xab, 0x40, 0xf0, 0xdb, 0x24, 0x02, 0x61, 0xf3, 0x2c, 0x7a,
+ 0x7f, 0x0f, 0xb1, 0x5b, 0x39, 0xd0, 0x1a, 0xb8, 0x8c, 0xd0, 0x70, 0x07,
+ 0xbe, 0xfb, 0x4c, 0x41, 0xae, 0xb0, 0xef, 0x00, 0x7c, 0x06, 0xc3, 0x62,
+ 0xd5, 0x18, 0x23, 0xc2, 0xfb, 0xf2, 0x0f, 0x6b, 0x90, 0x94, 0x44, 0x71,
+ 0xbb, 0x9c, 0xc1, 0x25, 0x1e, 0xf7, 0xf5, 0x3b, 0x5c, 0x28, 0x30, 0x13,
+ 0x57, 0x20, 0x26, 0x0c, 0xaa, 0xd6, 0x83, 0x5d, 0xa6, 0x5f, 0x93, 0xf3,
+ 0xa1, 0x19, 0x3e, 0x82, 0x6c, 0xe2, 0xa0, 0xaa, 0xbc, 0x82, 0xc8, 0xe5,
+ 0xa9, 0x59, 0x16, 0xe4, 0x64, 0x4e, 0xd2, 0x0c, 0x5d, 0x14, 0x91, 0x3c,
+ 0xdf, 0x2a, 0x71, 0x0b, 0xda, 0x01, 0xde, 0x76, 0xa6, 0x27, 0xd9, 0x72,
+ 0x40, 0xa5, 0x7c, 0x44, 0x36, 0x5e, 0xd9, 0x85, 0x3b, 0xde, 0xfa, 0x05,
+ 0x98, 0xad, 0x31, 0x96, 0x97, 0xca, 0x8a, 0xb1, 0x8e, 0x18, 0x9c, 0x96,
+ 0xe0, 0xa6, 0x2c, 0x9b, 0x96, 0x14, 0xbb, 0xd2, 0x19, 0x61, 0x93, 0x2d,
+ 0xe3, 0x58, 0xd8, 0xa3, 0x0a, 0x09, 0x1c, 0xdb, 0x8a, 0x5d, 0x86, 0x97,
+ 0x12, 0x57, 0x12, 0x7d, 0x33, 0x77, 0xa1, 0x3c, 0x97, 0xd1, 0x86, 0xbb,
+ 0x66, 0x98, 0xd4, 0x05, 0x93, 0xe5, 0x9e, 0x6b, 0xbb, 0x28, 0x08, 0xa5,
+ 0xff, 0xb5, 0x7b, 0x68, 0x2e, 0xcb, 0xa1, 0xa5, 0x4d, 0x98, 0x56, 0x0c,
+ 0x09, 0x3f, 0x63, 0xbb, 0x5d, 0xf4, 0x8c, 0x63, 0xfb, 0x33, 0x97, 0x61,
+ 0x39, 0x2f, 0x28, 0xac, 0xbe, 0x5d, 0x00, 0x13, 0xd7, 0xbc, 0xb6, 0xd7,
+ 0x8b, 0x5e, 0xe3, 0x3a, 0xcd, 0x30, 0x5c, 0x13, 0xa2, 0x9f, 0x17, 0x8c,
+ 0x4a, 0x57, 0x1b, 0xf7, 0x59, 0x86, 0x25, 0x58, 0xb5, 0xdf, 0x68, 0x54,
+ 0xd4, 0xda, 0x5d, 0xc6, 0xf4, 0x5b, 0x05, 0x95, 0xa6, 0x68, 0x82, 0xb2,
+ 0x87, 0x8a, 0x0c, 0x77, 0xba, 0xbd, 0x97, 0xcb, 0x26, 0x35, 0xf1, 0xa3,
+ 0x9d, 0x91, 0x39, 0xb2, 0xc9, 0x8a, 0xef, 0xf3, 0x37, 0x14, 0xa4, 0x1f,
+ 0xdf, 0x10, 0x10, 0x12, 0xfa, 0x2a, 0x52, 0xa0, 0xf5, 0x8c, 0xb2, 0xf8,
+ 0x9b, 0xc1, 0x1c, 0xea, 0x7a, 0x6e, 0xe9, 0x3c, 0xe0, 0x8c, 0x66, 0xa1,
+ 0xd2, 0x65, 0xa5, 0xdb, 0x21, 0x61, 0x9b, 0xe3, 0x3e, 0x7e, 0xc7, 0x91,
+ 0x49, 0xd5, 0xb0, 0xda, 0x19, 0x65, 0xbf, 0x7a, 0x8b, 0x1e, 0x68, 0x3d,
+ 0xeb, 0xea, 0x10, 0x2b, 0x8d, 0xdc, 0x66, 0x74, 0x19, 0xd0, 0x00, 0x39,
+ 0x78, 0x85, 0xbe, 0x21, 0x4c, 0xaf, 0x16, 0xc3, 0x0f, 0xd5, 0x01, 0x89,
+ 0xda, 0x57, 0x09, 0x2e, 0xb8, 0xf3, 0x78, 0x36, 0xe3, 0x4b, 0xbc, 0x9d,
+ 0x52, 0xf1, 0x0d, 0x44, 0x53, 0x21, 0xea, 0x2f, 0x3b, 0x84, 0x59, 0x95,
+ 0x7f, 0xb6, 0x28, 0x58, 0xa8, 0x90, 0x45, 0xf3, 0xac, 0x95, 0x52, 0x27,
+ 0x42, 0xee, 0x8f, 0xfa, 0xfd, 0x77, 0x8f, 0x92, 0xea, 0x52, 0x84, 0x89,
+ 0x47, 0x16, 0x1e, 0x85, 0x8d, 0xd1, 0xed, 0xfa, 0x0f, 0x0a, 0x34, 0x80,
+ 0x44, 0x89, 0x34, 0xab, 0x71, 0x3e, 0xbd, 0xe0, 0x94, 0xeb, 0x36, 0xb7,
+ 0xef, 0x30, 0xa9, 0xc1, 0xde, 0xa9, 0x4c, 0xa6, 0x61, 0x4f, 0xc7, 0x21,
+ 0xae, 0x51, 0xd2, 0xfa, 0xcd, 0xed, 0x7a, 0xfb, 0xf1, 0x6b, 0x99, 0x0a,
+ 0x58, 0x8d, 0x27, 0x66, 0xa8, 0xf3, 0x59, 0xfb, 0xee, 0xdd, 0x79, 0x9e,
+ 0x77, 0x9f, 0xa8, 0x93, 0x56, 0x80, 0xe1, 0x0a, 0xed, 0x03, 0x9e, 0x81,
+ 0xa9, 0x94, 0xa4, 0xb6, 0x3f, 0x84, 0xde, 0x28, 0xce, 0x41, 0xe4, 0x46,
+ 0x18, 0x30, 0x46, 0xe7, 0x70, 0xa4, 0x27, 0x7a, 0xcf, 0x2f, 0x92, 0xb1,
+ 0x1f, 0xe1, 0x1d, 0xbc, 0x89, 0x25, 0x1e, 0x9e, 0x52, 0x61, 0x92, 0xae,
+ 0xb6, 0xcb, 0x4e, 0x60, 0xc9, 0xb8, 0x1b, 0xe7, 0xad, 0xa3, 0x8b, 0x6d,
+ 0xa6, 0xb9, 0x1b, 0x7e, 0x74, 0x29, 0xf4, 0xe3, 0xe0, 0x69, 0x06, 0xf0,
+ 0x0e, 0x3c, 0x1f, 0x8e, 0x91, 0x54, 0x09, 0x3e, 0xf6, 0x0b, 0xa4, 0x67,
+ 0x2c, 0xd8, 0x0b, 0x51, 0xee, 0x5a, 0xc9, 0x03, 0x72, 0x36, 0x26, 0x13,
+ 0x55, 0x06, 0x5b, 0xef, 0x0d, 0x73, 0xe7, 0xcc, 0x4a, 0x27, 0x5b, 0x10,
+ 0xc9, 0x84, 0xc8, 0xb4, 0x23, 0x07, 0xa3, 0x13, 0xdd, 0x99, 0x14, 0x28,
+ 0xcb, 0x5d, 0xd6, 0xb6, 0x5e, 0x82, 0x63, 0x94, 0x42, 0xf8, 0x3a, 0xfe,
+ 0x18, 0x5f, 0x8a, 0x42, 0xdd, 0x36, 0x3a, 0x34, 0x19, 0xf5, 0x1a, 0x8b,
+ 0xe0, 0xe6, 0x54, 0xf3, 0xad, 0x4f, 0x59, 0x59, 0x77, 0xba, 0x73, 0xa1,
+ 0x26, 0x16, 0x56, 0x25, 0x14, 0x97, 0x90, 0xb3, 0x58, 0x65, 0x78, 0xf9,
+ 0x71, 0x1c, 0x7f, 0xf0, 0x61, 0x80, 0x44, 0x37, 0x90, 0x47, 0xd1, 0xfe,
+ 0x23, 0x06, 0xd1, 0x9e, 0x75, 0xc5, 0x32, 0x85, 0xb7, 0x35, 0x57, 0x3f,
+ 0xd8, 0xbc, 0x63, 0x54, 0x3e, 0xa8, 0x92, 0xa1, 0x3b, 0x48, 0x5b, 0xcb,
+ 0x9b, 0x83, 0xdc, 0x4c, 0xba, 0x06, 0x8d, 0xee, 0x05, 0x24, 0x4f, 0x71,
+ 0x73, 0x2c, 0x27, 0x85, 0xd7, 0x92, 0xc5, 0xfb, 0x9a, 0xc8, 0xed, 0xaf,
+ 0x97, 0xd4, 0x4d, 0xa1, 0x80, 0x23, 0x4a, 0xe3, 0xbe, 0xcb, 0xee, 0x82,
+ 0xb2, 0x19, 0x38, 0x44, 0x8d, 0xa4, 0xfc, 0x01, 0xe3, 0xae, 0x5b, 0x6d,
+ 0x16, 0x10, 0xa1, 0x9b, 0xaa, 0x5f, 0xd0, 0xc8, 0x05, 0x89, 0xcf, 0x8e,
+ 0x4e, 0x8a, 0xdb, 0x2d, 0x9f, 0x11, 0xc7, 0xbc, 0x5e, 0x85, 0xc6, 0xeb,
+ 0xe1, 0xae, 0xce, 0x96, 0x9d, 0xde, 0x93, 0x05, 0xbd, 0x53, 0xed, 0x01,
+ 0xeb, 0xd4, 0x87, 0x8f, 0x6e, 0x09, 0xe2, 0x65, 0x13, 0x6b, 0xb5, 0x4b,
+ 0x2f, 0xee, 0x56, 0x71, 0xa8, 0xa2, 0x3a, 0x38, 0x60, 0xb3, 0x6b, 0xd7,
+ 0xd7, 0xf4, 0xed, 0x26, 0xcd, 0x39, 0xde, 0x36, 0x28, 0x52, 0x3e, 0xd7,
+ 0xd7, 0xfc, 0x3b, 0x2d, 0x39, 0xca, 0x02, 0x8e, 0xbb, 0x04, 0x3e, 0xfe,
+ 0x1e, 0x4b, 0x2e, 0xce, 0x21, 0x5e, 0x72, 0xdf, 0x0a, 0x54, 0xeb, 0xd8,
+ 0xf6, 0x1c, 0x1d, 0xb6, 0x84, 0xc5, 0x40, 0x72, 0xb3, 0xdb, 0x1c, 0xaa,
+ 0x0f, 0x12, 0x39, 0x47, 0x11, 0xa4, 0xd2, 0x3c, 0x11, 0x77, 0xcb, 0x2c,
+ 0x4a, 0xb2, 0xe6, 0xf0, 0xb9, 0xa5, 0x57, 0x1e, 0x96, 0x1a, 0xad, 0x4a,
+ 0x7d, 0x49, 0x67, 0xad, 0x52, 0x3b, 0x1a, 0xb6, 0x7b, 0x77, 0xda, 0x19,
+ 0x0c, 0xa3, 0x70, 0x96, 0x08, 0x3e, 0xfe, 0x0e, 0x3b, 0xc3, 0x85, 0x0b,
+ 0x94, 0x1c, 0xdd, 0x42, 0x06, 0x8d, 0x32, 0x54, 0xdf, 0x81, 0x1c, 0x47,
+ 0x46, 0x6f, 0xa6, 0x60, 0x3b, 0x8a, 0x4d, 0x97, 0x8f, 0xbf, 0xcf, 0x51,
+ 0xfc, 0x9a, 0x67, 0x49, 0x3a, 0xb4, 0x73, 0x87, 0xcf, 0x50, 0xa7, 0xc2,
+ 0x99, 0xfe, 0xf7, 0x3b, 0x8a, 0x89, 0xc3, 0x7c, 0x07, 0x8a, 0xef, 0x5e,
+ 0x9b, 0xb9, 0xda, 0xf3, 0xa2, 0x35, 0xb8, 0x0d, 0xd6, 0xed, 0x52, 0xb4,
+ 0xcb, 0xf0, 0x81, 0x7b, 0x60, 0xc9, 0x50, 0x2c, 0x27, 0x1e, 0xd8, 0xa2,
+ 0x30, 0xb5, 0x45, 0x08, 0x8e, 0xe5, 0x7b, 0x0c, 0xc5, 0x72, 0xe7, 0x20,
+ 0x73, 0x26, 0x7a, 0xb4, 0xa3, 0x91, 0xe1, 0xc0, 0x78, 0xda, 0x6c, 0x2b,
+ 0x8b, 0xaf, 0xc8, 0x25, 0xe3, 0xb1, 0xfc, 0x1a, 0x23, 0x84, 0xf9, 0x53,
+ 0xeb, 0x36, 0x7d, 0x8f, 0xa5, 0xb1, 0xcc, 0x9b, 0x22, 0x23, 0xf0, 0xe3,
+ 0x1f, 0xb4, 0x4b, 0xca, 0xd0, 0x17, 0xf0, 0xf3, 0x6f, 0x42, 0xbb, 0x87,
+ 0x88, 0xf2, 0xb7, 0x9c, 0xbd, 0xb7, 0x1b, 0xd4, 0x6a, 0x56, 0xf6, 0x36,
+ 0x0e, 0xdf, 0x1e, 0x6d, 0x2a, 0x43, 0xa1, 0xcc, 0xc0, 0x3b, 0xb2, 0xf7,
+ 0xc4, 0xe1, 0xef, 0x41, 0xf6, 0x1e, 0xa6, 0xe8, 0xef, 0x73, 0xda, 0x2d,
+ 0xcf, 0x0f, 0xd5, 0xae, 0xf9, 0x5d, 0xe9, 0xc8, 0x5e, 0x00, 0x41, 0xfe,
+ 0xff, 0xbb, 0x9f, 0x76, 0x7b, 0x25, 0xc0, 0x78, 0xf0, 0x42, 0x48, 0x87,
+ 0x7f, 0xc4, 0xd2, 0x18, 0x22, 0xf3, 0x84, 0xfc, 0x34, 0x1b, 0x26, 0x37,
+ 0xb5, 0x73, 0xe6, 0x94, 0xb6, 0x04, 0x84, 0x4b, 0x7c, 0xa0, 0xf5, 0x72,
+ 0xfa, 0x90, 0x61, 0x25, 0x34, 0x2a, 0x53, 0x59, 0x22, 0xec, 0x4d, 0x62,
+ 0x13, 0x0c, 0x6a, 0x9d, 0xc4, 0x77, 0xf0, 0x2c, 0xe7, 0x45, 0x3a, 0x36,
+ 0x33, 0x71, 0xda, 0xbc, 0x9b, 0xf2, 0x71, 0xee, 0x6c, 0xeb, 0x22, 0x35,
+ 0x06, 0xb5, 0x20, 0x8b, 0x9a, 0x8d, 0xae, 0x42, 0x30, 0x2a, 0x77, 0xdb,
+ 0x24, 0x1e, 0x8c, 0xe0, 0x05, 0x77, 0x2b, 0xe4, 0x42, 0x51, 0xf5, 0x62,
+ 0xc4, 0xd6, 0xe4, 0xf4, 0x32, 0xf6, 0x34, 0x83, 0x6f, 0x1a, 0xb1, 0x63,
+ 0x5b, 0x62, 0x70, 0x16, 0x78, 0x28, 0x00, 0x10, 0xbf, 0x61, 0xcd, 0xbd,
+ 0x17, 0xb8, 0xec, 0xb7, 0x28, 0xb5, 0x7a, 0x1d, 0x3d, 0x7c, 0xf0, 0x73,
+ 0xcd, 0xed, 0xf9, 0xcb, 0x8f, 0xd9, 0xc3, 0xfb, 0x01, 0xef, 0xd4, 0x30,
+ 0x84, 0x30, 0x41, 0x52, 0x6b, 0x90, 0xb9, 0x20, 0xb3, 0x37, 0x71, 0x55,
+ 0x15, 0x21, 0x84, 0xc3, 0x32, 0x46, 0x4b, 0x1c, 0x5b, 0xb2, 0x35, 0x02,
+ 0xba, 0x53, 0xcf, 0x74, 0x48, 0x26, 0x13, 0x85, 0xad, 0x00, 0x93, 0x57,
+ 0x59, 0xe5, 0x5e, 0xc8, 0x2b, 0xf8, 0x1f, 0x10, 0xfe, 0x99, 0x22, 0xa8,
+ 0xa7, 0x49, 0x15, 0x13, 0x84, 0x53, 0x9a, 0x11, 0x00, 0x04, 0xac, 0x2b,
+ 0xfe, 0x06, 0x63, 0x49, 0x0d, 0xfb, 0x87, 0x08, 0xd8, 0x3d, 0x0c, 0xf1,
+ 0xac, 0x26, 0xb7, 0x9d, 0x40, 0xae, 0x0a, 0x57, 0xa3, 0xc1, 0xde, 0x34,
+ 0xb6, 0xe5, 0x66, 0x38, 0xee, 0x11, 0xdd, 0xf6, 0x10, 0x44, 0x47, 0x1a,
+ 0x83, 0xd9, 0x77, 0xd0, 0xa6, 0x02, 0x1e, 0xb7, 0x50, 0x73, 0x82, 0x7d,
+ 0x87, 0x41, 0xfe, 0x5e, 0xbb, 0x53, 0xb4, 0x0b, 0x60, 0xfc, 0xbf, 0xb6,
+ 0x69, 0xd3, 0x73, 0x42, 0xd9, 0x90, 0x02, 0xd1, 0x6e, 0x61, 0xa2, 0x24,
+ 0x19, 0x57, 0xe7, 0x6b, 0xa7, 0x0a, 0x99, 0x78, 0xd7, 0x71, 0x91, 0x51,
+ 0x1a, 0xb1, 0x47, 0x3e, 0xe5, 0x3c, 0x94, 0xcb, 0xee, 0x14, 0x78, 0xc7,
+ 0x1d, 0x5c, 0x5a, 0xc4, 0xc4, 0x16, 0x77, 0x17, 0x54, 0xa8, 0x66, 0x2f,
+ 0x3e, 0x46, 0x14, 0xb6, 0x7a, 0xdf, 0x94, 0x5d, 0x1a, 0x4a, 0x37, 0xc7,
+ 0x05, 0x04, 0xe7, 0xd9, 0xbd, 0x28, 0xf6, 0xcc, 0x89, 0x5e, 0x27, 0x93,
+ 0x4b, 0xf3, 0x20, 0x86, 0x4a, 0xbc, 0xbf, 0x39, 0x3c, 0x3a, 0xd0, 0x70,
+ 0xbb, 0xff, 0x7d, 0xd4, 0x83, 0xa1, 0x14, 0x97, 0x1e, 0xc8, 0x0a, 0x69,
+ 0x7a, 0x4e, 0x01, 0x2c, 0xac, 0x94, 0x54, 0x03, 0xf8, 0x6b, 0x14, 0x46,
+ 0x3a, 0x38, 0xfe, 0x78, 0x78, 0x76, 0x72, 0xfc, 0xfe, 0xe0, 0x78, 0xb0,
+ 0xe2, 0x66, 0x60, 0x04, 0x91, 0x69, 0x43, 0xe9, 0x5d, 0x18, 0x76, 0xcd,
+ 0xd1, 0xe1, 0x45, 0x64, 0x08, 0x80, 0x3f, 0xf5, 0xdc, 0xe6, 0x9c, 0x87,
+ 0x24, 0x1c, 0x16, 0xf6, 0x6e, 0x06, 0x26, 0xb4, 0x21, 0x84, 0x38, 0xf7,
+ 0x28, 0x80, 0x16, 0xcd, 0xfc, 0x98, 0xfb, 0x04, 0x87, 0x06, 0x42, 0xaf,
+ 0x11, 0x9f, 0xca, 0x70, 0x50, 0xbd, 0xa3, 0x24, 0xdd, 0xc1, 0xc6, 0xb2,
+ 0xd6, 0x06, 0x61, 0x37, 0xf3, 0x43, 0xc9, 0x68, 0x30, 0xd1, 0x42, 0x50,
+ 0x5c, 0x44, 0x7b, 0xbe, 0x4a, 0xc8, 0xbb, 0x40, 0x35, 0x2b, 0xe5, 0x2e,
+ 0x21, 0x62, 0x72, 0xa0, 0x01, 0x6c, 0x55, 0xce, 0xee, 0x4d, 0x47, 0x4a,
+ 0x6f, 0x78, 0x39, 0x07, 0xce, 0x2c, 0xfe, 0x25, 0x31, 0x10, 0x86, 0x32,
+ 0xfe, 0xfd, 0x12, 0x24, 0xde, 0x57, 0xff, 0x7a, 0x01, 0xc7, 0xe3, 0xdf,
+ 0x3e, 0xda, 0x72, 0xe9, 0x0c, 0xc3, 0xa2, 0xeb, 0x4b, 0xe1, 0x0d, 0x38,
+ 0xd0, 0xba, 0x9c, 0x18, 0x99, 0x75, 0x7e, 0x7a, 0x76, 0xf2, 0xc3, 0x3f,
+ 0xbf, 0x71, 0x17, 0x0e, 0x4c, 0xc0, 0xbf, 0x00, 0x09, 0x47, 0x1a, 0xff,
+ 0xf7, 0x37, 0xef, 0xad, 0xde, 0x7c, 0x87, 0x13, 0x1e, 0x51, 0x60, 0x0a,
+ 0x58, 0xeb, 0xa9, 0x08, 0x18, 0x9a, 0x5c, 0xe3, 0xc8, 0x56, 0x05, 0x73,
+ 0xbc, 0xd4, 0x16, 0x8c, 0x36, 0xc3, 0xfc, 0xe3, 0x1a, 0x81, 0x36, 0x33,
+ 0xb9, 0xf1, 0x96, 0xc7, 0x82, 0x4f, 0x16, 0xd8, 0x41, 0xaa, 0xa9, 0x41,
+ 0xc5, 0x34, 0xa9, 0xa9, 0x06, 0x68, 0x41, 0xba, 0x20, 0xbb, 0x47, 0x47,
+ 0xdf, 0x74, 0x15, 0xd2, 0x11, 0x99, 0x7f, 0xb8, 0xad, 0xae, 0xc5, 0xe7,
+ 0xa2, 0xa7, 0x7d, 0x1e, 0x59, 0x03, 0x55, 0x3e, 0x3e, 0xe1, 0xd1, 0xbc,
+ 0x0c, 0xc2, 0xd2, 0x1a, 0x01, 0x0b, 0x06, 0x56, 0x3e, 0x22, 0x9c, 0x9a,
+ 0xf2, 0x55, 0x10, 0xef, 0x96, 0x9f, 0xe2, 0x54, 0x0a, 0x52, 0x29, 0xa8,
+ 0xfa, 0x05, 0x02, 0x32, 0xe6, 0x5a, 0xeb, 0x1d, 0x92, 0xf2, 0x09, 0x35,
+ 0x07, 0xae, 0x03, 0xbf, 0x1c, 0x0e, 0x65, 0x3b, 0x82, 0xd1, 0xb7, 0x48,
+ 0xcb, 0xcf, 0x88, 0x5e, 0x09, 0x47, 0x14, 0x0d, 0xee, 0x52, 0xb8, 0x0e,
+ 0x1c, 0x22, 0x38, 0xa6, 0x1e, 0x15, 0xf6, 0xb5, 0x95, 0x27, 0xbc, 0x99,
+ 0xe2, 0xe8, 0x40, 0x64, 0x8a, 0x49, 0x90, 0x82, 0xf0, 0x20, 0x8a, 0xdc,
+ 0x8a, 0x6b, 0x75, 0x10, 0xa8, 0xf4, 0x0a, 0xa3, 0x0b, 0x94, 0x5a, 0x5c,
+ 0xaf, 0x1b, 0x48, 0x22, 0xed, 0x48, 0x49, 0x24, 0x78, 0x80, 0xba, 0xae,
+ 0xca, 0x64, 0x32, 0x0a, 0x63, 0x21, 0x06, 0xd9, 0x05, 0xd7, 0xaa, 0x2b,
+ 0x05, 0xdf, 0x50, 0xa8, 0x15, 0x36, 0x2b, 0xf9, 0x82, 0x59, 0xb4, 0x3e,
+ 0xb0, 0xb0, 0x83, 0x51, 0xe0, 0xa6, 0x54, 0xdd, 0x74, 0x22, 0xe5, 0x20,
+ 0x4e, 0xb5, 0x17, 0xc2, 0x0e, 0x95, 0xbd, 0xfd, 0xb3, 0x1f, 0xde, 0x07,
+ 0x0e, 0x12, 0xb7, 0xb6, 0xab, 0xc8, 0x24, 0xdd, 0x9b, 0x48, 0x2a, 0x54,
+ 0xd2, 0x3e, 0xd5, 0x9e, 0xe1, 0x5f, 0xee, 0xd2, 0x9c, 0x53, 0x73, 0x8e,
+ 0x86, 0x2a, 0xb9, 0xcf, 0xac, 0xd2, 0x91, 0x8f, 0x06, 0xb6, 0x36, 0x90,
+ 0x8f, 0xe8, 0x0c, 0x7c, 0xd9, 0x40, 0x17, 0x8e, 0x34, 0x90, 0x51, 0x61,
+ 0x1e, 0x83, 0xd0, 0x32, 0x2a, 0xdd, 0xec, 0xb6, 0xa7, 0xe3, 0xc4, 0x74,
+ 0x3e, 0x1a, 0x23, 0x49, 0xe1, 0x44, 0xb2, 0xbe, 0xc8, 0x12, 0x86, 0x7d,
+ 0xa2, 0x88, 0x7f, 0x39, 0x0e, 0x6c, 0x97, 0xa0, 0x03, 0x51, 0xab, 0xbc,
+ 0x25, 0x08, 0xa9, 0x36, 0x24, 0x0f, 0x43, 0x14, 0x9b, 0x2b, 0x8a, 0x21,
+ 0x8b, 0x02, 0xf4, 0x8a, 0xa0, 0x4f, 0x0a, 0x47, 0xc3, 0x47, 0x0b, 0x13,
+ 0x5c, 0x2f, 0xa4, 0x12, 0x8f, 0xc4, 0x9b, 0x02, 0x7c, 0xf0, 0x24, 0x0f,
+ 0x82, 0x18, 0x5c, 0x00, 0xf8, 0x8a, 0x61, 0x25, 0x01, 0x98, 0x29, 0xcd,
+ 0xb4, 0x90, 0xd1, 0xd6, 0xee, 0x66, 0xba, 0xb0, 0xf6, 0x0e, 0xf7, 0xcf,
+ 0xe0, 0x3c, 0x93, 0xb2, 0x80, 0xe7, 0x14, 0xf3, 0x94, 0x3d, 0xcb, 0x2b,
+ 0x15, 0x86, 0x47, 0x07, 0x2c, 0x29, 0x50, 0xb6, 0xba, 0x76, 0x55, 0x8b,
+ 0x47, 0x5f, 0x15, 0x48, 0xd4, 0x0b, 0x73, 0x86, 0x56, 0x39, 0x57, 0xd1,
+ 0x2b, 0xe7, 0x8c, 0xd4, 0x23, 0x31, 0x9c, 0xc2, 0xf4, 0x32, 0xf5, 0x17,
+ 0x9a, 0x53, 0x05, 0x19, 0x2b, 0xb5, 0x6c, 0x7c, 0x08, 0x12, 0x95, 0x42,
+ 0x24, 0x1e, 0x26, 0x00, 0xec, 0x7c, 0xb4, 0xfa, 0xe4, 0xf9, 0x46, 0xef,
+ 0xc9, 0xf6, 0x4e, 0xef, 0x71, 0xef, 0xf1, 0xa3, 0x27, 0xdb, 0xab, 0x1c,
+ 0xdb, 0x8a, 0x8c, 0x82, 0x12, 0x5c, 0xec, 0x7a, 0x28, 0xa2, 0x6e, 0xa8,
+ 0xcc, 0x92, 0x34, 0xe4, 0x60, 0x6e, 0xec, 0x9e, 0x9e, 0xee, 0xef, 0x0e,
+ 0x76, 0xa3, 0x97, 0x86, 0x7a, 0x5f, 0xf9, 0x05, 0x96, 0x6c, 0xa9, 0xc6,
+ 0x46, 0x74, 0xae, 0x14, 0x05, 0xa0, 0x62, 0x03, 0xc5, 0x2d, 0xd7, 0x91,
+ 0x1b, 0xa5, 0x8c, 0xa4, 0x79, 0x95, 0x7b, 0x86, 0x7b, 0x3a, 0x1f, 0x79,
+ 0x41, 0xfc, 0x94, 0xae, 0x88, 0x74, 0x0a, 0xd5, 0x4f, 0xe0, 0x61, 0xdb,
+ 0x34, 0xa2, 0xbd, 0x9a, 0x59, 0xcd, 0xb3, 0x1a, 0xf3, 0xdf, 0x3b, 0x39,
+ 0xfa, 0xf0, 0xfe, 0xb8, 0x1f, 0xbd, 0x84, 0x62, 0xa1, 0xe8, 0xcf, 0xbd,
+ 0x4e, 0x87, 0xd5, 0xd5, 0x2b, 0x5f, 0xc5, 0x43, 0x1c, 0xfa, 0xaa, 0x56,
+ 0x2a, 0xc2, 0xee, 0xa3, 0xc2, 0xfb, 0x95, 0x6e, 0x61, 0x03, 0x3c, 0x4f,
+ 0xd0, 0xae, 0xcf, 0x46, 0xb9, 0x1f, 0x29, 0xab, 0x00, 0x63, 0x63, 0x4c,
+ 0xb4, 0x2f, 0x78, 0xc9, 0x8d, 0x61, 0xe9, 0xbb, 0x17, 0x71, 0x41, 0x77,
+ 0x35, 0x5b, 0x98, 0x50, 0x83, 0x58, 0x00, 0x91, 0x4f, 0x3a, 0x2d, 0x02,
+ 0x7c, 0xe2, 0x92, 0x8d, 0xe7, 0x54, 0xbc, 0x0a, 0x48, 0x8a, 0xc8, 0x97,
+ 0x10, 0x41, 0xaf, 0xe3, 0x5b, 0x87, 0xfe, 0xf7, 0xcc, 0x41, 0x3f, 0xdf,
+ 0xdb, 0x3d, 0x7f, 0xfd, 0xe1, 0x78, 0xff, 0xe8, 0x20, 0x7a, 0x19, 0xaa,
+ 0x14, 0x22, 0x93, 0xa7, 0x52, 0x05, 0xee, 0xe4, 0x8c, 0x1c, 0x1c, 0x83,
+ 0xae, 0x46, 0x7a, 0x6c, 0xa3, 0xd5, 0x77, 0x27, 0xef, 0x0f, 0x82, 0x14,
+ 0x00, 0x93, 0x20, 0x54, 0x7f, 0xc1, 0xc7, 0x20, 0x67, 0xb0, 0x45, 0xf7,
+ 0xc6, 0xd2, 0x99, 0x57, 0xc9, 0xe5, 0xe7, 0x32, 0x44, 0x0a, 0x9e, 0x2a,
+ 0x52, 0xd2, 0x5e, 0xd7, 0x49, 0x01, 0x75, 0x28, 0x1e, 0x36, 0xdc, 0x6b,
+ 0x69, 0x36, 0xa7, 0xa5, 0xa1, 0x96, 0xa3, 0xe8, 0x87, 0xfd, 0xb7, 0xe7,
+ 0x7b, 0x27, 0xc7, 0xcd, 0xbd, 0x79, 0x73, 0xf8, 0x16, 0x87, 0x5e, 0x9f,
+ 0x4c, 0xbf, 0x7f, 0x74, 0xfe, 0x7a, 0x77, 0xef, 0xef, 0x07, 0xc7, 0xfb,
+ 0xd1, 0x4b, 0x07, 0xc8, 0x2c, 0x34, 0x37, 0x4e, 0x3f, 0x5e, 0x0c, 0x06,
+ 0xb9, 0x2a, 0x18, 0x6a, 0xab, 0x1d, 0x2d, 0x77, 0x4f, 0x68, 0xd7, 0xcd,
+ 0x9d, 0xbd, 0x92, 0x46, 0x00, 0x18, 0xd1, 0x6d, 0x62, 0x5a, 0x83, 0x93,
+ 0x70, 0x06, 0x24, 0x67, 0x6a, 0x69, 0x45, 0x1d, 0xaf, 0x2a, 0x08, 0x97,
+ 0x6a, 0xb9, 0x27, 0x56, 0x89, 0x13, 0x18, 0xc2, 0xbd, 0x0b, 0x77, 0xba,
+ 0xd6, 0xea, 0xbd, 0x18, 0xab, 0xf2, 0x25, 0xff, 0x0c, 0xf6, 0x2e, 0x29,
+ 0x85, 0x02, 0xa2, 0x27, 0xb4, 0x1a, 0x42, 0x6e, 0xd5, 0x02, 0x13, 0x76,
+ 0xde, 0xee, 0xd1, 0x98, 0x5a, 0x70, 0x74, 0xc3, 0x94, 0x6e, 0x6d, 0x26,
+ 0xf3, 0xd0, 0x0b, 0xd3, 0x42, 0xfd, 0x2d, 0x88, 0x6e, 0x26, 0x83, 0xa5,
+ 0xbb, 0x69, 0x0d, 0x66, 0xdc, 0x75, 0x66, 0xbc, 0xfe, 0xc2, 0x2c, 0x49,
+ 0x5c, 0x94, 0xe5, 0xa4, 0x13, 0x8d, 0xb3, 0x79, 0x35, 0x01, 0x46, 0x65,
+ 0x4e, 0xfa, 0xb0, 0xf2, 0x31, 0xb4, 0x73, 0xc3, 0xff, 0xf1, 0xc1, 0x62,
+ 0x5e, 0xe2, 0x83, 0x25, 0x67, 0x56, 0x81, 0xb2, 0x08, 0x49, 0x55, 0x14,
+ 0x98, 0x03, 0xfb, 0x66, 0x44, 0xf3, 0x7c, 0x32, 0x32, 0x0f, 0xeb, 0x90,
+ 0xee, 0x70, 0x42, 0x2a, 0x49, 0x4b, 0xd7, 0xf8, 0xbc, 0x1a, 0x33, 0xb4,
+ 0x34, 0xef, 0x14, 0x68, 0xf1, 0x84, 0x40, 0x8a, 0x6a, 0xe8, 0x45, 0x47,
+ 0x00, 0x2a, 0xca, 0x19, 0xd9, 0x39, 0x82, 0x90, 0x09, 0x7a, 0xac, 0xf8,
+ 0x35, 0x59, 0x17, 0xee, 0x39, 0x27, 0xd8, 0x97, 0x4d, 0xf8, 0xe0, 0xc8,
+ 0x41, 0x21, 0xbb, 0xda, 0x4c, 0x0b, 0xcb, 0xd8, 0x25, 0xff, 0xc7, 0xd1,
+ 0xc9, 0xdb, 0xfd, 0xc3, 0x33, 0x9c, 0x22, 0x8f, 0x32, 0x54, 0x4e, 0xf4,
+ 0x70, 0x14, 0x84, 0x4f, 0xad, 0x23, 0x5a, 0x76, 0xb4, 0xa8, 0xb1, 0x25,
+ 0x6f, 0x26, 0xe7, 0x05, 0x58, 0x4a, 0x64, 0x5e, 0x8a, 0x39, 0x07, 0xd1,
+ 0x0e, 0xc1, 0x21, 0x21, 0xc3, 0x68, 0x87, 0xf3, 0xcb, 0x24, 0xfa, 0x0f,
+ 0xe2, 0x7a, 0xa7, 0x59, 0xc8, 0x80, 0xab, 0x2f, 0x76, 0x98, 0x8d, 0x2a,
+ 0x58, 0x0c, 0x61, 0xe1, 0x0e, 0x39, 0x4a, 0x92, 0x96, 0xd1, 0x22, 0xa6,
+ 0x70, 0xb0, 0x51, 0xa8, 0xae, 0x23, 0x39, 0x17, 0xd7, 0xc0, 0xc0, 0x75,
+ 0x95, 0xdc, 0x98, 0x7b, 0x3a, 0xda, 0xcf, 0x81, 0xe8, 0x13, 0x8d, 0x12,
+ 0x29, 0x19, 0x2c, 0x92, 0xcf, 0xe7, 0x25, 0x6c, 0xb5, 0xd1, 0x49, 0xae,
+ 0xbc, 0xf8, 0x15, 0x44, 0x91, 0xec, 0x45, 0x9f, 0xa0, 0x42, 0xa1, 0x53,
+ 0x1b, 0x68, 0x5c, 0x5d, 0xce, 0x36, 0x50, 0x00, 0xf9, 0xcf, 0xdc, 0x08,
+ 0xf6, 0x49, 0xf4, 0x8f, 0x0f, 0x87, 0x7b, 0x01, 0xf0, 0xc5, 0xfe, 0xbb,
+ 0x83, 0xa3, 0x23, 0x84, 0x65, 0xc1, 0x6c, 0xea, 0x8f, 0xef, 0xfb, 0x4d,
+ 0x86, 0x3b, 0x4c, 0xb0, 0x24, 0xa1, 0xd1, 0xb1, 0xa4, 0xac, 0x84, 0x39,
+ 0xbc, 0xfb, 0x7b, 0x47, 0x04, 0x5c, 0x10, 0x43, 0xc0, 0x5e, 0x7a, 0xd3,
+ 0xbc, 0x8f, 0xae, 0x12, 0xb7, 0xb2, 0x22, 0xf0, 0xce, 0xbd, 0x83, 0xb3,
+ 0xc1, 0xb9, 0xd0, 0xc2, 0xfd, 0x2e, 0x18, 0xf4, 0x91, 0x34, 0x2e, 0x18,
+ 0x6d, 0x12, 0x6c, 0x39, 0xd1, 0x4b, 0x78, 0xe4, 0xb7, 0xdf, 0x5a, 0xa6,
+ 0xd1, 0xbf, 0x1f, 0xfc, 0xd3, 0xd0, 0x2c, 0x35, 0xaa, 0xfb, 0xfc, 0x2a,
+ 0x0c, 0xc3, 0x4f, 0x06, 0x8f, 0x45, 0x2a, 0x8e, 0x05, 0x80, 0x70, 0xca,
+ 0x6c, 0xa2, 0x95, 0xb0, 0xf4, 0x31, 0x0c, 0x05, 0xa9, 0x5e, 0x81, 0xa8,
+ 0xe0, 0x4e, 0xb3, 0xf9, 0x2d, 0x4a, 0x9a, 0x8c, 0x9c, 0x76, 0x85, 0xe5,
+ 0x10, 0x90, 0xa9, 0xfa, 0x21, 0xb9, 0x04, 0xf2, 0x4b, 0x85, 0x02, 0x40,
+ 0x97, 0x8c, 0x27, 0xb7, 0x5f, 0x13, 0x49, 0x32, 0x15, 0xe8, 0x7d, 0x68,
+ 0xb0, 0x48, 0xd8, 0x28, 0xcd, 0x1b, 0xcb, 0xa2, 0xa8, 0x57, 0x3e, 0x02,
+ 0x1a, 0x20, 0x62, 0x00, 0xd0, 0x47, 0x29, 0xe4, 0xfe, 0xc9, 0x1c, 0x0b,
+ 0x70, 0x19, 0x7c, 0x66, 0xb3, 0xfc, 0x75, 0x9d, 0x02, 0x15, 0x3a, 0x29,
+ 0x30, 0x59, 0x21, 0xc3, 0x17, 0x36, 0x69, 0x15, 0xc0, 0xc9, 0x13, 0xe4,
+ 0xa3, 0xaf, 0x73, 0x00, 0x98, 0x73, 0x32, 0x59, 0x91, 0x8a, 0x81, 0x73,
+ 0x9a, 0xef, 0x1c, 0x83, 0x54, 0xff, 0xe0, 0xcc, 0x28, 0x48, 0xb4, 0x53,
+ 0x61, 0x29, 0x53, 0x85, 0xcc, 0xbb, 0xcb, 0x98, 0x5c, 0x68, 0x77, 0xa9,
+ 0x94, 0x69, 0x41, 0x96, 0x50, 0x9e, 0xea, 0x44, 0x22, 0x70, 0x76, 0x16,
+ 0x09, 0x9b, 0x7e, 0xf0, 0x8a, 0x15, 0xd8, 0xe6, 0xa2, 0x77, 0x21, 0x95,
+ 0xaf, 0xfe, 0x8f, 0x33, 0xaf, 0x1f, 0x77, 0x67, 0x84, 0x82, 0x00, 0x1c,
+ 0x63, 0x1f, 0xea, 0x64, 0xd8, 0xe9, 0x37, 0x59, 0xf0, 0x82, 0x53, 0x65,
+ 0xb9, 0x38, 0xdf, 0xaa, 0x2c, 0xc4, 0x36, 0xd6, 0x03, 0x05, 0x22, 0xd4,
+ 0xab, 0x11, 0xc1, 0x8a, 0x2f, 0x07, 0xbf, 0xee, 0xa2, 0x53, 0xcf, 0x89,
+ 0x2f, 0x0a, 0x41, 0x63, 0x22, 0x03, 0x8a, 0xf9, 0xff, 0xe0, 0xc4, 0x48,
+ 0xd4, 0xe6, 0x1f, 0x07, 0x6f, 0x0e, 0x7f, 0xb0, 0x46, 0xd6, 0x81, 0xd5,
+ 0xef, 0x19, 0xd0, 0x10, 0xb0, 0x0c, 0x6b, 0x1a, 0x16, 0x97, 0xe4, 0x74,
+ 0x0c, 0x42, 0x5c, 0x59, 0x0c, 0x6d, 0x8b, 0x54, 0xfe, 0x4f, 0x9a, 0x6b,
+ 0xc8, 0xca, 0x37, 0xb7, 0x16, 0x94, 0xd4, 0x2e, 0x11, 0x3b, 0x8d, 0xc5,
+ 0xc2, 0x95, 0x96, 0x3e, 0x92, 0x56, 0x6d, 0x44, 0x52, 0xf8, 0x0a, 0x4b,
+ 0xd8, 0xe1, 0x37, 0x68, 0x8b, 0x5f, 0xd1, 0x00, 0xa3, 0x4a, 0x74, 0x23,
+ 0x0b, 0x50, 0x09, 0xc2, 0x57, 0xc7, 0x69, 0x0a, 0xfd, 0x70, 0x08, 0xaa,
+ 0x15, 0x61, 0x62, 0x1f, 0x25, 0xec, 0x34, 0xb4, 0x65, 0x8c, 0xf2, 0xd0,
+ 0x16, 0xea, 0xe3, 0x97, 0x6a, 0x6a, 0x04, 0x34, 0x82, 0x59, 0x69, 0x70,
+ 0x8e, 0x9c, 0xa2, 0x42, 0xac, 0xc9, 0x07, 0x6b, 0xc6, 0x70, 0x65, 0x01,
+ 0x34, 0xce, 0x37, 0xbb, 0xc7, 0x6e, 0x65, 0xf7, 0xc8, 0x62, 0x26, 0xa1,
+ 0x26, 0x7e, 0x84, 0x3b, 0x2c, 0xbb, 0x57, 0x91, 0x59, 0x2c, 0xf3, 0xc1,
+ 0xae, 0x21, 0x1c, 0xd4, 0x9b, 0xb9, 0x87, 0x0f, 0x0d, 0x40, 0xa3, 0xe5,
+ 0xd3, 0x65, 0x6d, 0x80, 0xb9, 0xdc, 0x5c, 0x59, 0x86, 0x33, 0x27, 0x94,
+ 0xb2, 0xd4, 0xed, 0xd2, 0x4b, 0x8d, 0x36, 0xe2, 0x5f, 0xd5, 0x48, 0x5c,
+ 0x6f, 0x65, 0xeb, 0xd7, 0x34, 0xb2, 0xd5, 0x68, 0xe3, 0xea, 0x57, 0x35,
+ 0xd2, 0x15, 0xe3, 0xd9, 0xca, 0xca, 0xc1, 0x0f, 0x87, 0x03, 0xa3, 0x87,
+ 0xee, 0xd7, 0x8e, 0x4b, 0xc1, 0x4c, 0xc4, 0x08, 0x44, 0x99, 0xa1, 0x39,
+ 0xf3, 0xe6, 0x30, 0x1d, 0xa1, 0x80, 0x55, 0x31, 0xa2, 0x13, 0xf8, 0xf8,
+ 0x4a, 0xa9, 0x31, 0x91, 0xc2, 0xe7, 0x82, 0xfc, 0x7f, 0x54, 0xb4, 0xde,
+ 0x29, 0xf6, 0x89, 0x69, 0xd8, 0x0c, 0x00, 0xa5, 0xc9, 0x5f, 0x70, 0x00,
+ 0x19, 0xab, 0x85, 0x8a, 0x21, 0x6a, 0xb3, 0x19, 0x55, 0xc9, 0x01, 0x6c,
+ 0x7f, 0x86, 0x1f, 0x4c, 0x51, 0x01, 0x58, 0x51, 0x31, 0x1d, 0xd8, 0x7d,
+ 0x91, 0x56, 0x58, 0x9c, 0x9d, 0x0a, 0x48, 0x30, 0x26, 0x54, 0x59, 0x47,
+ 0xfe, 0x7a, 0xcc, 0xf7, 0x2a, 0xa5, 0xf1, 0x30, 0xb6, 0x9e, 0xd4, 0x2f,
+ 0x72, 0x10, 0x51, 0x6b, 0x95, 0x6f, 0xe3, 0x4b, 0x33, 0x13, 0x9a, 0x03,
+ 0xe3, 0xc9, 0x79, 0x86, 0x1c, 0x45, 0x94, 0x73, 0x8e, 0xfb, 0x13, 0x71,
+ 0x6a, 0xd7, 0x8e, 0x16, 0x1e, 0x2a, 0xbe, 0xa1, 0x40, 0xb4, 0x1c, 0x6a,
+ 0x69, 0x1a, 0x76, 0x77, 0x95, 0xb5, 0x32, 0x0a, 0x9e, 0xe4, 0xac, 0x4d,
+ 0x68, 0x3f, 0x1b, 0xac, 0x25, 0xc6, 0xe9, 0x84, 0xe4, 0x71, 0xc6, 0x3f,
+ 0x4a, 0xbf, 0x3a, 0x92, 0xc4, 0xa6, 0x5a, 0xc7, 0x01, 0x8a, 0x13, 0x13,
+ 0x44, 0x87, 0x5c, 0x67, 0xf2, 0x36, 0xab, 0xe2, 0x1b, 0x14, 0x75, 0x81,
+ 0xa3, 0xe0, 0xa6, 0x5d, 0x3a, 0x5a, 0x0a, 0xd7, 0xc8, 0xda, 0x8d, 0xa4,
+ 0x3c, 0x04, 0xca, 0x59, 0xe2, 0x3b, 0x15, 0xb7, 0xb8, 0x0d, 0x53, 0x96,
+ 0xea, 0xae, 0x2c, 0x7d, 0x62, 0xb9, 0x35, 0xff, 0x3c, 0xdb, 0xcc, 0x6c,
+ 0xaa, 0x75, 0x46, 0xa5, 0x62, 0x73, 0x8a, 0xa3, 0x49, 0x6e, 0xe0, 0x9a,
+ 0x49, 0x31, 0x15, 0x98, 0xec, 0xb2, 0xe0, 0x6b, 0x24, 0x58, 0xea, 0x21,
+ 0xba, 0xd5, 0x02, 0x15, 0xfe, 0xa6, 0x0a, 0x7f, 0x2b, 0xd2, 0xce, 0x30,
+ 0xc7, 0x05, 0xec, 0x70, 0xfd, 0xf9, 0xfc, 0x22, 0x86, 0x0a, 0xd5, 0x58,
+ 0xec, 0x26, 0xce, 0xc8, 0xf4, 0x20, 0x3b, 0xe0, 0x83, 0x9a, 0xd7, 0xcb,
+ 0x2f, 0x6d, 0xb1, 0xe2, 0x8d, 0x06, 0x29, 0x1c, 0xb2, 0x14, 0x7b, 0x70,
+ 0x99, 0x19, 0x59, 0xfd, 0xd8, 0xdd, 0x94, 0x63, 0x51, 0x50, 0xb1, 0xb7,
+ 0x5f, 0x84, 0x60, 0x0b, 0xca, 0x46, 0x3a, 0xc2, 0xb6, 0xdb, 0x0b, 0xbc,
+ 0x25, 0x7d, 0x40, 0x63, 0x6e, 0x17, 0x6e, 0xfe, 0x8c, 0xed, 0x03, 0x61,
+ 0x53, 0xda, 0x7b, 0x79, 0xd6, 0xa4, 0x17, 0x27, 0x39, 0x07, 0x3b, 0xd2,
+ 0x27, 0x77, 0xd8, 0x95, 0x9e, 0x40, 0x25, 0x14, 0xf6, 0x70, 0x14, 0xc9,
+ 0x6c, 0xc2, 0xd3, 0xe5, 0x6f, 0x30, 0x57, 0x14, 0x9d, 0xe1, 0x64, 0x25,
+ 0xd1, 0xf1, 0x18, 0x65, 0xdc, 0xf5, 0xd8, 0x3d, 0xe7, 0x7e, 0x01, 0xe3,
+ 0x84, 0x0c, 0xbc, 0x00, 0xa8, 0x97, 0xa5, 0x4a, 0x88, 0xd4, 0x1c, 0x7d,
+ 0x05, 0x08, 0x5d, 0x58, 0xa7, 0x5a, 0x3e, 0xf3, 0x1b, 0x41, 0xd4, 0x47,
+ 0x47, 0xeb, 0x87, 0x15, 0x9b, 0x17, 0x54, 0x33, 0xca, 0x2a, 0x58, 0x88,
+ 0xc4, 0x1b, 0x23, 0x42, 0x12, 0x9c, 0xe0, 0x02, 0xb0, 0x31, 0x8c, 0xdc,
+ 0xf4, 0x3e, 0xf7, 0x50, 0x9a, 0xf2, 0x11, 0x22, 0x65, 0xa2, 0xac, 0x5a,
+ 0xa4, 0xbc, 0x3e, 0x88, 0xe9, 0x4a, 0xf2, 0xb3, 0x6d, 0x13, 0x49, 0x5f,
+ 0x7d, 0xe3, 0x08, 0x06, 0xe9, 0xc3, 0x89, 0xd9, 0x28, 0x7f, 0x87, 0x2f,
+ 0x3c, 0xd6, 0x75, 0x80, 0x49, 0x01, 0xfe, 0x14, 0x6e, 0x85, 0xd1, 0x99,
+ 0xae, 0x50, 0x98, 0x8e, 0xd3, 0xca, 0xd5, 0x84, 0xad, 0x6b, 0x49, 0x53,
+ 0xb5, 0x40, 0x5e, 0xf5, 0x2a, 0xd5, 0x27, 0x58, 0x02, 0x91, 0x2a, 0x5c,
+ 0x09, 0x56, 0x59, 0x29, 0x80, 0x89, 0x70, 0x71, 0x76, 0xb4, 0x6a, 0x20,
+ 0x25, 0x9a, 0x5f, 0xbb, 0x20, 0xac, 0x0b, 0x22, 0x0a, 0x8a, 0x7c, 0xe2,
+ 0x26, 0xdb, 0x73, 0x5d, 0x74, 0xb3, 0xd2, 0xce, 0x7c, 0x9e, 0xe8, 0x7c,
+ 0xae, 0x91, 0x52, 0x4e, 0x77, 0xfb, 0x7d, 0xa1, 0x93, 0xbd, 0x00, 0x49,
+ 0x70, 0xfe, 0x02, 0x94, 0xe7, 0x2e, 0xb9, 0x1c, 0xa4, 0xcf, 0x53, 0xb9,
+ 0x91, 0x46, 0x62, 0xf1, 0x13, 0x62, 0x76, 0xfb, 0x54, 0x7d, 0x2e, 0x3c,
+ 0xdb, 0xeb, 0xda, 0x2a, 0x52, 0x29, 0x3a, 0x12, 0xa2, 0xb8, 0x9a, 0xba,
+ 0x47, 0x43, 0xb2, 0xae, 0x98, 0x61, 0x08, 0xeb, 0x8c, 0x85, 0x8c, 0xe4,
+ 0xa2, 0x01, 0x73, 0xa5, 0xe1, 0x48, 0xc0, 0xc8, 0x9c, 0x81, 0x6c, 0xfa,
+ 0x93, 0xfe, 0x48, 0x93, 0xea, 0xfc, 0xa6, 0x49, 0x7f, 0x0c, 0x4c, 0xfa,
+ 0xa9, 0x3d, 0x38, 0xd4, 0x59, 0xb4, 0xb1, 0xf1, 0x4c, 0x00, 0xa8, 0x0d,
+ 0x1d, 0x63, 0x7f, 0xc1, 0x0e, 0xcd, 0x73, 0x5d, 0x44, 0x71, 0xf1, 0xfb,
+ 0x72, 0x4e, 0xaf, 0xd3, 0xd5, 0x96, 0x76, 0xc5, 0x00, 0x9d, 0x20, 0xbd,
+ 0x11, 0xfb, 0xf1, 0xd9, 0x92, 0xb8, 0xdc, 0xc0, 0x59, 0x71, 0x0d, 0xf8,
+ 0x13, 0x0b, 0x72, 0xc6, 0x65, 0x14, 0x4e, 0x3f, 0xdb, 0xea, 0xed, 0x7e,
+ 0xb4, 0x21, 0x89, 0xac, 0xbb, 0xc8, 0xa4, 0x27, 0xc9, 0x14, 0x29, 0x93,
+ 0xd4, 0x7c, 0x2b, 0x1a, 0x53, 0x31, 0x92, 0x51, 0x11, 0x4f, 0x61, 0x5b,
+ 0x27, 0xf1, 0x2d, 0x9c, 0xa9, 0x70, 0x46, 0x38, 0x39, 0x95, 0xcc, 0xf1,
+ 0x1c, 0x27, 0x19, 0xf8, 0x73, 0x50, 0x26, 0x61, 0xbb, 0x22, 0x18, 0x27,
+ 0x73, 0x2a, 0x08, 0x27, 0x61, 0x50, 0xdc, 0xab, 0x67, 0x49, 0x83, 0xd8,
+ 0x8a, 0xaa, 0x89, 0x57, 0xd9, 0x08, 0xb0, 0x90, 0xf9, 0x3c, 0xb3, 0xeb,
+ 0xa6, 0xcb, 0x04, 0xea, 0x38, 0xd5, 0x3d, 0x77, 0x17, 0x8f, 0xb9, 0x89,
+ 0x93, 0xc2, 0x25, 0x68, 0x51, 0x1e, 0x5d, 0xf2, 0xcb, 0xb6, 0x17, 0x62,
+ 0xc8, 0xa7, 0xc0, 0xee, 0xe2, 0x09, 0xc3, 0xf8, 0x9e, 0x60, 0xb8, 0x44,
+ 0x2d, 0x12, 0x90, 0x74, 0xf2, 0xd8, 0x86, 0xe0, 0xd5, 0x49, 0xf7, 0x79,
+ 0x60, 0xac, 0x92, 0x68, 0xfe, 0x48, 0xf8, 0xac, 0xde, 0x35, 0x12, 0x30,
+ 0x95, 0x44, 0x67, 0x07, 0x83, 0x33, 0x4c, 0xd7, 0x04, 0x16, 0xd0, 0xf5,
+ 0xcd, 0x3e, 0xeb, 0x0a, 0xf7, 0xca, 0x0c, 0xcd, 0x8a, 0x28, 0x96, 0x45,
+ 0x60, 0x09, 0x65, 0xbb, 0xe3, 0xf4, 0x51, 0xde, 0x53, 0xec, 0x1c, 0x5a,
+ 0x72, 0x9b, 0xc9, 0xc5, 0x2c, 0x54, 0xe9, 0xc9, 0x62, 0x0f, 0x98, 0x89,
+ 0x8f, 0x13, 0xa6, 0x4a, 0x86, 0x9d, 0xeb, 0x71, 0x22, 0xb9, 0x80, 0x99,
+ 0x82, 0xd0, 0x23, 0x92, 0x06, 0x61, 0x6a, 0xe4, 0x45, 0xe0, 0x9e, 0x14,
+ 0xd8, 0x1e, 0x16, 0x0d, 0x68, 0x08, 0x6a, 0x3e, 0xe0, 0xde, 0x18, 0x42,
+ 0x88, 0x50, 0x3c, 0x2e, 0xa8, 0x84, 0xe5, 0xd3, 0xc7, 0x8f, 0x03, 0x00,
+ 0x65, 0xf1, 0x85, 0x61, 0xab, 0x2c, 0xe8, 0x31, 0x36, 0x39, 0x81, 0x94,
+ 0xe2, 0x7e, 0xa1, 0x98, 0x5b, 0x82, 0xda, 0xd3, 0x1d, 0x41, 0xbc, 0x09,
+ 0xac, 0x98, 0xaf, 0xe0, 0x6c, 0x10, 0x97, 0xf9, 0x44, 0x28, 0xd4, 0xbc,
+ 0x68, 0x0d, 0xee, 0x42, 0x10, 0xd5, 0x8a, 0x4b, 0xcc, 0xc6, 0x45, 0xb4,
+ 0xd5, 0x51, 0x00, 0x97, 0x37, 0x32, 0x8f, 0x83, 0x6f, 0x6c, 0xb9, 0x12,
+ 0x81, 0xba, 0xd6, 0x60, 0xda, 0x92, 0xea, 0xff, 0x86, 0x20, 0xfc, 0x3a,
+ 0xb5, 0x1b, 0xe9, 0x76, 0x06, 0xbe, 0x52, 0x90, 0xd2, 0xf0, 0x8e, 0x0e,
+ 0x5c, 0x21, 0xfd, 0xc1, 0xc9, 0x99, 0xec, 0xae, 0xd3, 0x1f, 0x9d, 0xfe,
+ 0x33, 0x80, 0xd2, 0xe7, 0x49, 0x7d, 0xe4, 0x5a, 0x1e, 0x05, 0x03, 0x7f,
+ 0xcb, 0x99, 0x74, 0x5e, 0xa2, 0x23, 0x76, 0x42, 0x67, 0x97, 0x6a, 0x57,
+ 0x00, 0x05, 0x71, 0x15, 0x0b, 0x33, 0x0e, 0x8e, 0x99, 0x54, 0xdc, 0x1f,
+ 0x8f, 0x0a, 0xe9, 0xf8, 0x9c, 0xa8, 0xbc, 0xcf, 0xdc, 0xbd, 0x59, 0x6f,
+ 0x1d, 0xbe, 0xc6, 0x50, 0x2d, 0xf3, 0x60, 0x6a, 0x0e, 0x26, 0xa1, 0x07,
+ 0xc4, 0x14, 0xad, 0xe0, 0x99, 0x4f, 0x45, 0x37, 0x10, 0x67, 0x85, 0xd5,
+ 0x56, 0xac, 0xf0, 0x6d, 0x6f, 0xfc, 0xd3, 0x93, 0xb3, 0x81, 0xde, 0xf7,
+ 0xd0, 0x2d, 0x7e, 0xd1, 0x38, 0x37, 0x80, 0xd5, 0x15, 0xa1, 0xb9, 0x86,
+ 0x98, 0x3e, 0xad, 0xb7, 0x17, 0x32, 0xc2, 0x8a, 0x02, 0x91, 0x27, 0xb6,
+ 0x23, 0x0d, 0x75, 0xc0, 0x8c, 0x64, 0xce, 0x34, 0xd5, 0x47, 0x56, 0x4e,
+ 0x43, 0x56, 0x35, 0xbc, 0x64, 0x52, 0x2f, 0x52, 0x15, 0x2b, 0x6a, 0xda,
+ 0x7a, 0x58, 0x9b, 0x4f, 0x02, 0x5c, 0x02, 0x2e, 0x83, 0xb3, 0x83, 0xfe,
+ 0x80, 0x86, 0x0e, 0xff, 0xf2, 0x86, 0x4e, 0xe5, 0x76, 0xf8, 0x4b, 0x4f,
+ 0x7b, 0x41, 0x3b, 0xd7, 0x08, 0x8f, 0x5f, 0x39, 0x07, 0x4b, 0x35, 0xb4,
+ 0xaf, 0x75, 0x89, 0x9c, 0x15, 0xdb, 0x74, 0xd0, 0x45, 0x90, 0x5f, 0x32,
+ 0x9d, 0xe0, 0xc9, 0xc6, 0x2f, 0x56, 0xb9, 0x93, 0x55, 0x23, 0x93, 0xf1,
+ 0x49, 0xc8, 0x8b, 0xcf, 0x4e, 0x13, 0x4f, 0x6d, 0x13, 0x33, 0xb8, 0xa4,
+ 0xb8, 0x85, 0x43, 0x2a, 0xf5, 0x34, 0xc1, 0x2f, 0xbb, 0x42, 0x2b, 0x78,
+ 0x53, 0x10, 0x55, 0x34, 0xea, 0x2a, 0x6f, 0x6e, 0xa9, 0x97, 0x46, 0xe4,
+ 0x04, 0x67, 0x2c, 0xf0, 0xb5, 0x64, 0xe8, 0xa3, 0xd0, 0xd6, 0xa0, 0xb9,
+ 0x4d, 0x22, 0xf5, 0xd7, 0xf1, 0xd0, 0x62, 0x83, 0xd0, 0xdc, 0x6b, 0x77,
+ 0x02, 0x7b, 0x03, 0x51, 0x40, 0x8b, 0x8b, 0x49, 0x0a, 0xd1, 0x30, 0x17,
+ 0xa4, 0x33, 0xc2, 0x6b, 0x1e, 0xb3, 0xcd, 0xdd, 0x00, 0xd8, 0x4d, 0xbe,
+ 0x7c, 0xc0, 0xf2, 0x78, 0xe9, 0x5c, 0xd2, 0xf1, 0x90, 0xaf, 0x08, 0x2b,
+ 0xea, 0x83, 0x73, 0x48, 0xaf, 0x88, 0x5e, 0x74, 0x0a, 0xae, 0x60, 0x94,
+ 0x9a, 0xca, 0xbf, 0xd8, 0xe6, 0xe8, 0x98, 0x40, 0x98, 0x94, 0xa2, 0x74,
+ 0xa7, 0x19, 0x38, 0x6b, 0xe0, 0x1b, 0x2c, 0x55, 0x64, 0x55, 0x66, 0x6f,
+ 0xbe, 0xcf, 0xed, 0xcb, 0xa5, 0x99, 0x0a, 0x20, 0x93, 0x37, 0x1e, 0x79,
+ 0xca, 0x94, 0x25, 0x25, 0xbe, 0x95, 0x2d, 0xc3, 0x69, 0xe6, 0x62, 0xf7,
+ 0x43, 0x6a, 0x41, 0xcb, 0x80, 0xd7, 0xd8, 0xb7, 0xd3, 0x14, 0x5d, 0x04,
+ 0xbb, 0xbc, 0x54, 0x50, 0x35, 0xd7, 0x9c, 0x1a, 0x10, 0xe3, 0x4c, 0x5b,
+ 0x18, 0x0b, 0xa1, 0xe6, 0xca, 0x5a, 0x94, 0x35, 0xae, 0xad, 0x16, 0x2f,
+ 0xf6, 0xa2, 0x11, 0xea, 0x41, 0x7f, 0x4f, 0x89, 0x16, 0x95, 0x6e, 0xf4,
+ 0xee, 0xaa, 0x8d, 0x8e, 0x91, 0x91, 0xd8, 0x68, 0x78, 0x11, 0x63, 0x6c,
+ 0x7e, 0x6c, 0xae, 0x76, 0x57, 0xf4, 0x7f, 0xba, 0x65, 0x9b, 0x1a, 0x41,
+ 0xdd, 0x02, 0x6d, 0xcb, 0x72, 0x1f, 0xc3, 0x78, 0xb8, 0x16, 0x72, 0xaa,
+ 0x8f, 0xf1, 0xb6, 0x8a, 0x96, 0x17, 0x38, 0x54, 0x4e, 0x1f, 0xcf, 0x58,
+ 0x23, 0x06, 0x95, 0x38, 0xbb, 0xb5, 0xa0, 0x65, 0x3d, 0x8a, 0x89, 0xb6,
+ 0x25, 0x04, 0xf4, 0x17, 0xb6, 0xfc, 0x5e, 0xb1, 0x7d, 0x68, 0x1a, 0xdf,
+ 0x78, 0xd7, 0xfb, 0x74, 0x3e, 0x65, 0xd4, 0x1e, 0xa7, 0xa7, 0x1d, 0x36,
+ 0x70, 0x10, 0xcc, 0x94, 0xa2, 0xc0, 0x3b, 0x61, 0x51, 0xa0, 0x6d, 0x89,
+ 0x32, 0x2d, 0x30, 0x01, 0x43, 0x46, 0x9c, 0x44, 0x05, 0xca, 0x28, 0x5a,
+ 0x9e, 0x0b, 0x17, 0x6b, 0xf3, 0xc4, 0x2c, 0xea, 0x5a, 0x38, 0x7a, 0xae,
+ 0x64, 0xc2, 0x06, 0x07, 0x7e, 0x8c, 0x7e, 0x92, 0x4a, 0x7a, 0x01, 0xd7,
+ 0x60, 0x91, 0xfc, 0x84, 0x62, 0x64, 0x8f, 0xae, 0x1b, 0xc2, 0x80, 0xa6,
+ 0x59, 0x42, 0x95, 0x1d, 0xcb, 0xf0, 0x9e, 0x3e, 0x67, 0x4b, 0x19, 0x5b,
+ 0x47, 0x20, 0x2e, 0x3c, 0x33, 0x12, 0x5c, 0x33, 0x06, 0x74, 0x6b, 0xc3,
+ 0xc9, 0x4a, 0x66, 0x8d, 0x42, 0x38, 0x10, 0xc9, 0xf7, 0x66, 0xd5, 0xa1,
+ 0xe0, 0xca, 0xb8, 0xc3, 0x31, 0x6c, 0x68, 0x3b, 0x43, 0xae, 0x48, 0xd5,
+ 0x8d, 0x51, 0xc8, 0x08, 0xc1, 0xa4, 0x3b, 0x9d, 0x6c, 0x5a, 0xa6, 0x53,
+ 0xdc, 0xce, 0xa0, 0x2a, 0x40, 0x36, 0x06, 0x39, 0x3e, 0x70, 0x08, 0xb6,
+ 0x88, 0xd1, 0xed, 0xd1, 0x51, 0x05, 0xa1, 0xd3, 0x7f, 0x2d, 0xd6, 0x34,
+ 0x22, 0xe7, 0xbd, 0xfa, 0xad, 0x9f, 0x90, 0x99, 0x4e, 0xc2, 0x7f, 0x40,
+ 0xa0, 0x70, 0x9e, 0xdd, 0xd6, 0x67, 0x31, 0x88, 0x23, 0xe3, 0xf4, 0xf8,
+ 0x25, 0x6f, 0xec, 0x48, 0x90, 0x37, 0x49, 0xf4, 0x22, 0x47, 0x91, 0x78,
+ 0xe2, 0xc0, 0xf9, 0xa8, 0x54, 0xb7, 0xf5, 0xbc, 0x61, 0xfd, 0x80, 0xdb,
+ 0xc6, 0xd2, 0x12, 0x4e, 0x2a, 0x9d, 0x5d, 0xb9, 0xe7, 0x69, 0x9b, 0x2e,
+ 0xd6, 0xd3, 0x26, 0x42, 0x90, 0x2d, 0x2e, 0xe0, 0xd4, 0xd4, 0x92, 0xd3,
+ 0x49, 0xd4, 0xba, 0xb7, 0x1b, 0x2d, 0xc2, 0x3b, 0x44, 0xf2, 0x74, 0x3a,
+ 0x79, 0xc2, 0x64, 0x6e, 0xa6, 0x9c, 0x8f, 0xb3, 0xf4, 0xab, 0x54, 0x4c,
+ 0x82, 0x2b, 0x15, 0x0b, 0xc3, 0x9b, 0x55, 0x70, 0x1e, 0xdf, 0x64, 0x3a,
+ 0xba, 0x49, 0xe1, 0xd0, 0xa0, 0x2c, 0x8e, 0xf0, 0x54, 0x10, 0xf1, 0x9c,
+ 0xd4, 0x0a, 0x58, 0x71, 0xfd, 0xf9, 0x33, 0x95, 0x54, 0xe1, 0x36, 0x84,
+ 0x79, 0x4e, 0xa0, 0x4a, 0xa5, 0xc7, 0x38, 0xb7, 0xf9, 0x26, 0xe2, 0x9d,
+ 0x42, 0x03, 0x1b, 0x88, 0x7d, 0xcc, 0x33, 0x4b, 0x44, 0x0d, 0xbc, 0x26,
+ 0x67, 0x7c, 0xec, 0x8b, 0x3f, 0xdb, 0xdb, 0x0b, 0xed, 0x84, 0xd8, 0xe9,
+ 0x01, 0x92, 0x8a, 0xf3, 0xfc, 0xb3, 0x66, 0xde, 0x25, 0xf9, 0x0d, 0x35,
+ 0xf5, 0xb1, 0xe3, 0x98, 0x03, 0x94, 0x43, 0x93, 0x49, 0x83, 0xcb, 0x37,
+ 0xc0, 0xa1, 0xf4, 0x62, 0x20, 0xa4, 0xfb, 0x49, 0x3e, 0x8e, 0xdc, 0x2a,
+ 0x90, 0xdb, 0x44, 0x31, 0x6f, 0xd0, 0x43, 0x69, 0x45, 0xf5, 0x2c, 0x1a,
+ 0x84, 0x70, 0xd7, 0xb7, 0x9f, 0xf3, 0xd6, 0xcb, 0x0d, 0xa6, 0xca, 0xe3,
+ 0xa2, 0x37, 0x9e, 0x3d, 0x76, 0x05, 0xc8, 0x21, 0xc4, 0xb2, 0x52, 0xf1,
+ 0x98, 0x85, 0x2f, 0xd0, 0xc6, 0x1f, 0x4e, 0xa0, 0x5a, 0xdf, 0x84, 0x9e,
+ 0xb1, 0xc5, 0xee, 0xed, 0x63, 0x1b, 0x35, 0x36, 0x38, 0x70, 0x45, 0x9a,
+ 0xe8, 0x70, 0xdf, 0x79, 0x70, 0xd3, 0x4e, 0x30, 0x9e, 0xc0, 0xfd, 0x7c,
+ 0x4b, 0x76, 0xa3, 0x32, 0x5a, 0x83, 0xb7, 0x1c, 0x64, 0xbe, 0x67, 0x44,
+ 0x19, 0xc7, 0x39, 0x79, 0x37, 0x71, 0xf9, 0xbd, 0x67, 0x9e, 0xd5, 0x4e,
+ 0x98, 0x48, 0xce, 0x02, 0x9b, 0x65, 0x08, 0x1c, 0x5d, 0xca, 0x6b, 0xe0,
+ 0xc7, 0xfb, 0x8b, 0xd8, 0xcf, 0x0a, 0x28, 0x69, 0x5e, 0xfe, 0xc5, 0x6d,
+ 0x66, 0x47, 0xb7, 0x59, 0x8d, 0x67, 0x1a, 0x39, 0xa1, 0xda, 0x37, 0xe8,
+ 0x50, 0x75, 0x63, 0x97, 0xd3, 0x02, 0x6d, 0x85, 0xb9, 0x70, 0xe7, 0x99,
+ 0x3d, 0xaf, 0xa4, 0x29, 0x31, 0xcc, 0xb9, 0x11, 0x63, 0xe6, 0x85, 0x1d,
+ 0xdd, 0x3b, 0x31, 0xd6, 0x38, 0xb6, 0xc6, 0xc7, 0x0d, 0xea, 0x2c, 0xaf,
+ 0xe6, 0xa4, 0x96, 0xea, 0x8c, 0x42, 0xf0, 0x8a, 0x3b, 0x1b, 0x0d, 0xa6,
+ 0x81, 0x12, 0xd6, 0x9e, 0x19, 0x2d, 0xe9, 0xad, 0x48, 0x1c, 0xe4, 0x4b,
+ 0xbb, 0x2e, 0x72, 0xb2, 0xaa, 0x81, 0xd1, 0xc4, 0x36, 0xc0, 0xb7, 0x3b,
+ 0xe4, 0xa8, 0x14, 0x1c, 0x88, 0xd5, 0x3c, 0x39, 0x3b, 0x4f, 0x75, 0x89,
+ 0x50, 0x86, 0x37, 0x8a, 0xf0, 0x42, 0x55, 0x77, 0x87, 0x0e, 0xe9, 0xfb,
+ 0xb4, 0x24, 0xdf, 0x9c, 0x21, 0xb5, 0xb3, 0x41, 0xff, 0x34, 0xda, 0xeb,
+ 0x27, 0xff, 0xe1, 0xf0, 0x3c, 0x87, 0xb7, 0xec, 0x6c, 0x87, 0x9f, 0xee,
+ 0xb3, 0x2d, 0xeb, 0x10, 0x4b, 0xc9, 0x9b, 0xf5, 0xac, 0xbd, 0xf4, 0x8c,
+ 0x09, 0x4e, 0x0c, 0xdd, 0x64, 0xef, 0x81, 0xa1, 0x21, 0xb7, 0x99, 0xd4,
+ 0x76, 0x67, 0x67, 0xc7, 0x0a, 0xf2, 0x57, 0xf3, 0xec, 0xb3, 0x8a, 0x48,
+ 0x5c, 0x0a, 0x5a, 0xb6, 0xca, 0x79, 0xe3, 0xb9, 0x10, 0x9f, 0x63, 0xf9,
+ 0xd3, 0x84, 0x0c, 0x51, 0x01, 0xd5, 0xb4, 0x68, 0x98, 0x57, 0x2d, 0xbd,
+ 0xe7, 0xf9, 0x63, 0xbd, 0xbb, 0xb8, 0x54, 0xe4, 0xe7, 0xe4, 0xd6, 0x12,
+ 0x8f, 0xc4, 0x7d, 0xcf, 0xd2, 0x0c, 0xd4, 0x6d, 0xfb, 0x88, 0xd3, 0x02,
+ 0x1f, 0xbc, 0xec, 0x8b, 0xe1, 0x4e, 0xcc, 0xf9, 0x1d, 0xee, 0x4e, 0xf0,
+ 0xc4, 0xce, 0xe3, 0x44, 0x03, 0x7d, 0x70, 0xf7, 0x4d, 0x99, 0xee, 0xd2,
+ 0x4c, 0x8c, 0x4b, 0x0d, 0x8b, 0x91, 0xbe, 0xb4, 0x29, 0x44, 0x0b, 0x55,
+ 0x73, 0x43, 0xa2, 0x1c, 0x5a, 0x1f, 0x52, 0xbc, 0xb2, 0xb1, 0xce, 0x18,
+ 0x0b, 0x96, 0xb6, 0x85, 0xa7, 0xd2, 0x42, 0xa3, 0x70, 0xa3, 0x36, 0x66,
+ 0xa1, 0x80, 0x3d, 0xad, 0xe2, 0xf9, 0x16, 0x7b, 0x55, 0xda, 0x4c, 0x5e,
+ 0x8f, 0x36, 0x23, 0x1e, 0xba, 0x53, 0x11, 0x44, 0x2d, 0x5c, 0xcd, 0xea,
+ 0xc5, 0x6c, 0xef, 0x22, 0xc8, 0x19, 0xb0, 0x78, 0xb5, 0x99, 0xbc, 0xea,
+ 0x46, 0x2e, 0x0f, 0xc6, 0x7c, 0x89, 0xc9, 0xeb, 0x39, 0x91, 0x2e, 0x86,
+ 0xf1, 0x38, 0x74, 0xa2, 0xba, 0x11, 0x84, 0xa1, 0x90, 0xe1, 0x8c, 0x1c,
+ 0xeb, 0x58, 0xf3, 0x18, 0x65, 0x74, 0x4c, 0xda, 0xc1, 0x9a, 0x9e, 0x13,
+ 0xef, 0xee, 0x85, 0x8a, 0xf0, 0xb7, 0xd2, 0x08, 0xb6, 0x9d, 0x6a, 0x9a,
+ 0x05, 0xf9, 0xa3, 0x55, 0x85, 0xe4, 0xd5, 0x09, 0x68, 0x8f, 0xcf, 0x95,
+ 0x33, 0x62, 0xde, 0x8f, 0xe0, 0xa7, 0x35, 0xb7, 0x60, 0x47, 0x1c, 0x5b,
+ 0x97, 0x46, 0xe1, 0xca, 0xaa, 0x2e, 0xee, 0xb4, 0x4b, 0x68, 0x69, 0x69,
+ 0xf5, 0x11, 0x34, 0xbf, 0x33, 0x12, 0x92, 0x84, 0xae, 0x40, 0xd3, 0x9e,
+ 0x1a, 0x8d, 0x90, 0xe8, 0xb6, 0x13, 0xbe, 0xa6, 0x72, 0x28, 0xcc, 0x04,
+ 0xd6, 0x56, 0xac, 0x3e, 0xa6, 0x84, 0x31, 0x8a, 0x2b, 0xd5, 0x28, 0x6c,
+ 0x28, 0xc5, 0x0f, 0xc4, 0x14, 0x20, 0xa0, 0xd2, 0xf5, 0xac, 0x4e, 0x81,
+ 0x77, 0x8b, 0x87, 0x94, 0x84, 0x4a, 0x20, 0x36, 0xf4, 0xc9, 0x71, 0x75,
+ 0xfb, 0x52, 0x4a, 0x36, 0xfa, 0x31, 0xd6, 0x5c, 0xac, 0xca, 0x10, 0x03,
+ 0xb9, 0xf2, 0x21, 0xcc, 0x13, 0xcd, 0xd0, 0x59, 0x82, 0x60, 0xf0, 0x68,
+ 0x96, 0x34, 0x83, 0x78, 0xfd, 0xe1, 0x6d, 0xdf, 0x89, 0x58, 0x40, 0x57,
+ 0x08, 0xd8, 0xbf, 0x0d, 0x61, 0x61, 0xb5, 0x0a, 0xcc, 0x17, 0x51, 0x02,
+ 0x92, 0xcc, 0x07, 0x32, 0x99, 0x43, 0x85, 0xc2, 0x29, 0xf8, 0xfa, 0x33,
+ 0x4a, 0xfa, 0x6b, 0x98, 0x83, 0xcd, 0x4b, 0x20, 0x8c, 0x3f, 0x04, 0xcf,
+ 0xe7, 0x98, 0xea, 0x8e, 0x42, 0xb0, 0x72, 0x16, 0xbd, 0x4d, 0xab, 0x77,
+ 0xf3, 0x8b, 0x17, 0xea, 0xd0, 0x1f, 0x9b, 0x36, 0xe7, 0x17, 0x90, 0x0a,
+ 0xf0, 0x08, 0x1a, 0xa6, 0xff, 0x61, 0x8b, 0xe5, 0xca, 0xca, 0xee, 0x87,
+ 0xc1, 0xbb, 0x93, 0xb3, 0x7e, 0xf4, 0x08, 0xaa, 0x36, 0x0c, 0xce, 0x0e,
+ 0x5f, 0x7f, 0x18, 0x98, 0x8f, 0xd2, 0xc7, 0x7e, 0x9c, 0xa5, 0x46, 0x76,
+ 0xea, 0x57, 0x49, 0x66, 0x58, 0xed, 0x58, 0xc8, 0x07, 0xf3, 0x4a, 0xe0,
+ 0x9c, 0xe6, 0x85, 0xc5, 0x5e, 0xb9, 0xbe, 0xca, 0x99, 0x5d, 0x72, 0x65,
+ 0xd0, 0x8c, 0xf2, 0x19, 0x73, 0x6b, 0x6b, 0x49, 0x1b, 0xe5, 0x26, 0x24,
+ 0x15, 0x27, 0x1a, 0xbc, 0xdb, 0x3d, 0xfe, 0x7b, 0x5f, 0xa2, 0x4d, 0x3e,
+ 0x7d, 0xfa, 0xd4, 0x0c, 0x4a, 0x40, 0x9d, 0xa7, 0x4c, 0x56, 0x56, 0xfa,
+ 0x07, 0x07, 0xd1, 0xee, 0x51, 0xff, 0x44, 0x1e, 0x18, 0x55, 0xb3, 0xb5,
+ 0x27, 0xeb, 0x46, 0x39, 0x18, 0x27, 0x95, 0xf9, 0xc7, 0xca, 0xca, 0xff,
+ 0x01, 0x98, 0x89, 0xe7, 0x01, 0x76, 0x43, 0x04, 0x00,
};
#define BUF_SIZE 0x10000
static voidpf zalloc_func(voidpf opaque, unsigned int items, unsigned int size)
@@ -12208,12 +13400,12 @@ static void zfree_func(voidpf opaque, voidpf ptr)
/* Decompress and send to stdout a gzip-compressed buffer */
void hugehelp(void)
{
- unsigned char* buf;
- int status,headerlen;
+ unsigned char *buf;
+ int status, headerlen;
z_stream z;
/* Make sure no gzip options are set */
- if (hugehelpgz[3] & 0xfe)
+ if(hugehelpgz[3] & 0xfe)
return;
headerlen = 10;
@@ -12223,18 +13415,18 @@ void hugehelp(void)
z.avail_in = (unsigned int)(sizeof(hugehelpgz) - headerlen);
z.next_in = (unsigned char *)hugehelpgz + headerlen;
- if (inflateInit2(&z, -MAX_WBITS) != Z_OK)
+ if(inflateInit2(&z, -MAX_WBITS) != Z_OK)
return;
buf = malloc(BUF_SIZE);
- if (buf) {
+ if(buf) {
while(1) {
z.avail_out = BUF_SIZE;
z.next_out = buf;
status = inflate(&z, Z_SYNC_FLUSH);
- if (status == Z_OK || status == Z_STREAM_END) {
+ if(status == Z_OK || status == Z_STREAM_END) {
fwrite(buf, BUF_SIZE - z.avail_out, 1, stdout);
- if (status == Z_STREAM_END)
+ if(status == Z_STREAM_END)
break;
}
else
diff --git a/src/tool_hugehelp.h b/src/tool_hugehelp.h
index d5880ac25..ce9af0c54 100644
--- a/src/tool_hugehelp.h
+++ b/src/tool_hugehelp.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/src/tool_ipfs.c b/src/tool_ipfs.c
new file mode 100644
index 000000000..435d1697c
--- /dev/null
+++ b/src/tool_ipfs.c
@@ -0,0 +1,296 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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"
+
+#define ENABLE_CURLX_PRINTF
+/* use our own printf() functions */
+#include "curlx.h"
+#include "dynbuf.h"
+
+#include "tool_cfgable.h"
+#include "tool_msgs.h"
+#include "tool_ipfs.h"
+
+#include "memdebug.h" /* keep this as LAST include */
+
+/* ensure input ends in slash */
+static CURLcode ensure_trailing_slash(char **input)
+{
+ if(*input && **input) {
+ size_t len = strlen(*input);
+ if(((*input)[len - 1] != '/')) {
+ struct curlx_dynbuf dyn;
+ curlx_dyn_init(&dyn, len + 2);
+
+ if(curlx_dyn_addn(&dyn, *input, len)) {
+ Curl_safefree(*input);
+ return CURLE_OUT_OF_MEMORY;
+ }
+
+ Curl_safefree(*input);
+
+ if(curlx_dyn_addn(&dyn, "/", 1))
+ return CURLE_OUT_OF_MEMORY;
+
+ *input = curlx_dyn_ptr(&dyn);
+ }
+ }
+
+ return CURLE_OK;
+}
+
+static char *ipfs_gateway(void)
+{
+ char *ipfs_path = NULL;
+ char *gateway_composed_file_path = NULL;
+ FILE *gateway_file = NULL;
+ char *gateway = curlx_getenv("IPFS_GATEWAY");
+
+ /* Gateway is found from environment variable. */
+ if(gateway) {
+ if(ensure_trailing_slash(&gateway))
+ goto fail;
+ return gateway;
+ }
+
+ /* Try to find the gateway in the IPFS data folder. */
+ ipfs_path = curlx_getenv("IPFS_PATH");
+
+ if(!ipfs_path) {
+ char *home = curlx_getenv("HOME");
+ if(home && *home)
+ ipfs_path = aprintf("%s/.ipfs/", home);
+ /* fallback to "~/.ipfs", as that's the default location. */
+
+ Curl_safefree(home);
+ }
+
+ if(!ipfs_path || ensure_trailing_slash(&ipfs_path))
+ goto fail;
+
+ gateway_composed_file_path = aprintf("%sgateway", ipfs_path);
+
+ if(!gateway_composed_file_path)
+ goto fail;
+
+ gateway_file = fopen(gateway_composed_file_path, FOPEN_READTEXT);
+ Curl_safefree(gateway_composed_file_path);
+
+ if(gateway_file) {
+ int c;
+ struct curlx_dynbuf dyn;
+ curlx_dyn_init(&dyn, MAX_GATEWAY_URL_LEN);
+
+ /* get the first line of the gateway file, ignore the rest */
+ while((c = getc(gateway_file)) != EOF && c != '\n' && c != '\r') {
+ char c_char = (char)c;
+ if(curlx_dyn_addn(&dyn, &c_char, 1))
+ goto fail;
+ }
+
+ fclose(gateway_file);
+ gateway_file = NULL;
+
+ if(curlx_dyn_len(&dyn))
+ gateway = curlx_dyn_ptr(&dyn);
+
+ if(gateway)
+ ensure_trailing_slash(&gateway);
+
+ if(!gateway)
+ goto fail;
+
+ Curl_safefree(ipfs_path);
+
+ return gateway;
+ }
+fail:
+ if(gateway_file)
+ fclose(gateway_file);
+ Curl_safefree(gateway);
+ Curl_safefree(ipfs_path);
+ return NULL;
+}
+
+/*
+ * Rewrite ipfs://<cid> and ipns://<cid> to a HTTP(S)
+ * URL that can be handled by an IPFS gateway.
+ */
+CURLcode ipfs_url_rewrite(CURLU *uh, const char *protocol, char **url,
+ struct OperationConfig *config)
+{
+ CURLcode result = CURLE_URL_MALFORMAT;
+ CURLUcode getResult;
+ char *gateway = NULL;
+ char *gwhost = NULL;
+ char *gwpath = NULL;
+ char *gwquery = NULL;
+ char *gwscheme = NULL;
+ char *gwport = NULL;
+ char *inputpath = NULL;
+ char *cid = NULL;
+ char *pathbuffer = NULL;
+ char *cloneurl;
+ CURLU *gatewayurl = curl_url();
+
+ if(!gatewayurl) {
+ result = CURLE_FAILED_INIT;
+ goto clean;
+ }
+
+ getResult = curl_url_get(uh, CURLUPART_HOST, &cid, CURLU_URLDECODE);
+ if(getResult || !cid)
+ goto clean;
+
+ /* We might have a --ipfs-gateway argument. Check it first and use it. Error
+ * if we do have something but if it's an invalid url.
+ */
+ if(config->ipfs_gateway) {
+ /* ensure the gateway ends in a trailing / */
+ if(ensure_trailing_slash(&config->ipfs_gateway) != CURLE_OK) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto clean;
+ }
+
+ if(!curl_url_set(gatewayurl, CURLUPART_URL, config->ipfs_gateway,
+ CURLU_GUESS_SCHEME)) {
+ gateway = strdup(config->ipfs_gateway);
+ if(!gateway) {
+ result = CURLE_URL_MALFORMAT;
+ goto clean;
+ }
+
+ }
+ else {
+ result = CURLE_BAD_FUNCTION_ARGUMENT;
+ goto clean;
+ }
+ }
+ else {
+ /* this is ensured to end in a trailing / within ipfs_gateway() */
+ gateway = ipfs_gateway();
+ if(!gateway) {
+ result = CURLE_FILE_COULDNT_READ_FILE;
+ goto clean;
+ }
+
+ if(curl_url_set(gatewayurl, CURLUPART_URL, gateway, 0)) {
+ result = CURLE_URL_MALFORMAT;
+ goto clean;
+ }
+ }
+
+ /* check for unsupported gateway parts */
+ if(curl_url_get(gatewayurl, CURLUPART_QUERY, &gwquery, 0)
+ != CURLUE_NO_QUERY) {
+ result = CURLE_URL_MALFORMAT;
+ goto clean;
+ }
+
+ /* get gateway parts */
+ if(curl_url_get(gatewayurl, CURLUPART_HOST,
+ &gwhost, CURLU_URLDECODE)) {
+ goto clean;
+ }
+
+ if(curl_url_get(gatewayurl, CURLUPART_SCHEME,
+ &gwscheme, CURLU_URLDECODE)) {
+ goto clean;
+ }
+
+ curl_url_get(gatewayurl, CURLUPART_PORT, &gwport, CURLU_URLDECODE);
+ curl_url_get(gatewayurl, CURLUPART_PATH, &gwpath, CURLU_URLDECODE);
+
+ /* get the path from user input */
+ curl_url_get(uh, CURLUPART_PATH, &inputpath, CURLU_URLDECODE);
+ /* inputpath might be NULL or a valid pointer now */
+
+ /* set gateway parts in input url */
+ if(curl_url_set(uh, CURLUPART_SCHEME, gwscheme, CURLU_URLENCODE) ||
+ curl_url_set(uh, CURLUPART_HOST, gwhost, CURLU_URLENCODE) ||
+ curl_url_set(uh, CURLUPART_PORT, gwport, CURLU_URLENCODE))
+ goto clean;
+
+ /* if the input path is just a slash, clear it */
+ if(inputpath && (inputpath[0] == '/') && !inputpath[1])
+ *inputpath = '\0';
+
+ /* ensure the gateway path ends with a trailing slash */
+ ensure_trailing_slash(&gwpath);
+
+ pathbuffer = aprintf("%s%s/%s%s", gwpath, protocol, cid,
+ inputpath ? inputpath : "");
+ if(!pathbuffer) {
+ goto clean;
+ }
+
+ if(curl_url_set(uh, CURLUPART_PATH, pathbuffer, CURLU_URLENCODE)) {
+ goto clean;
+ }
+
+ /* Free whatever it has now, rewriting is next */
+ Curl_safefree(*url);
+
+ if(curl_url_get(uh, CURLUPART_URL, &cloneurl, CURLU_URLENCODE)) {
+ goto clean;
+ }
+ /* we need to strdup the URL so that we can call free() on it later */
+ *url = strdup(cloneurl);
+ curl_free(cloneurl);
+ if(!*url)
+ goto clean;
+
+ result = CURLE_OK;
+
+clean:
+ free(gateway);
+ curl_free(gwhost);
+ curl_free(gwpath);
+ curl_free(gwquery);
+ curl_free(inputpath);
+ curl_free(gwscheme);
+ curl_free(gwport);
+ curl_free(cid);
+ curl_free(pathbuffer);
+ curl_url_cleanup(gatewayurl);
+ {
+ const char *msg = NULL;
+ switch(result) {
+ case CURLE_URL_MALFORMAT:
+ msg = "malformed target URL";
+ break;
+ case CURLE_FILE_COULDNT_READ_FILE:
+ msg = "IPFS automatic gateway detection failed";
+ break;
+ case CURLE_BAD_FUNCTION_ARGUMENT:
+ msg = "--ipfs-gateway was given a malformed URL";
+ break;
+ default:
+ break;
+ }
+ if(msg)
+ helpf(tool_stderr, msg);
+ }
+ return result;
+}
diff --git a/lib/vtls/gskit.h b/src/tool_ipfs.h
index cf923f6b8..9c8a83e3b 100644
--- a/lib/vtls/gskit.h
+++ b/src/tool_ipfs.h
@@ -1,5 +1,5 @@
-#ifndef HEADER_CURL_GSKIT_H
-#define HEADER_CURL_GSKIT_H
+#ifndef HEADER_CURL_TOOL_IPFS_H
+#define HEADER_CURL_TOOL_IPFS_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,18 +23,11 @@
* SPDX-License-Identifier: curl
*
***************************************************************************/
-#include "curl_setup.h"
+#include "tool_setup.h"
-/*
- * This header should only be needed to get included by vtls.c and gskit.c
- */
+#define MAX_GATEWAY_URL_LEN 10000
-#include "urldata.h"
+CURLcode ipfs_url_rewrite(CURLU *uh, const char *protocol, char **url,
+ struct OperationConfig *config);
-#ifdef USE_GSKIT
-
-extern const struct Curl_ssl Curl_ssl_gskit;
-
-#endif /* USE_GSKIT */
-
-#endif /* HEADER_CURL_GSKIT_H */
+#endif /* HEADER_CURL_TOOL_IPFS_H */
diff --git a/src/tool_libinfo.c b/src/tool_libinfo.c
index 801fd579f..0bf3a90bf 100644
--- a/src/tool_libinfo.c
+++ b/src/tool_libinfo.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -51,6 +51,8 @@ const char *proto_rtsp = NULL;
const char *proto_scp = NULL;
const char *proto_sftp = NULL;
const char *proto_tftp = NULL;
+const char *proto_ipfs = "ipfs";
+const char *proto_ipns = "ipns";
static struct proto_name_tokenp {
const char *proto_name;
@@ -68,15 +70,74 @@ static struct proto_name_tokenp {
{ NULL, NULL }
};
+bool feature_altsvc = FALSE;
+bool feature_brotli = FALSE;
+bool feature_hsts = FALSE;
+bool feature_http2 = FALSE;
+bool feature_http3 = FALSE;
+bool feature_httpsproxy = FALSE;
+bool feature_libz = FALSE;
+bool feature_ntlm = FALSE;
+bool feature_ntlm_wb = FALSE;
+bool feature_spnego = FALSE;
+bool feature_ssl = FALSE;
+bool feature_tls_srp = FALSE;
+bool feature_zstd = FALSE;
+
+static struct feature_name_presentp {
+ const char *feature_name;
+ bool *feature_presentp;
+ int feature_bitmask;
+} const maybe_feature[] = {
+ /* Keep alphabetically sorted. */
+ {"alt-svc", &feature_altsvc, CURL_VERSION_ALTSVC},
+ {"AsynchDNS", NULL, CURL_VERSION_ASYNCHDNS},
+ {"brotli", &feature_brotli, CURL_VERSION_BROTLI},
+ {"CharConv", NULL, CURL_VERSION_CONV},
+ {"Debug", NULL, CURL_VERSION_DEBUG},
+ {"gsasl", NULL, CURL_VERSION_GSASL},
+ {"GSS-API", NULL, CURL_VERSION_GSSAPI},
+ {"HSTS", &feature_hsts, CURL_VERSION_HSTS},
+ {"HTTP2", &feature_http2, CURL_VERSION_HTTP2},
+ {"HTTP3", &feature_http3, CURL_VERSION_HTTP3},
+ {"HTTPS-proxy", &feature_httpsproxy, CURL_VERSION_HTTPS_PROXY},
+ {"IDN", NULL, CURL_VERSION_IDN},
+ {"IPv6", NULL, CURL_VERSION_IPV6},
+ {"Kerberos", NULL, CURL_VERSION_KERBEROS5},
+ {"Largefile", NULL, CURL_VERSION_LARGEFILE},
+ {"libz", &feature_libz, CURL_VERSION_LIBZ},
+ {"MultiSSL", NULL, CURL_VERSION_MULTI_SSL},
+ {"NTLM", &feature_ntlm, CURL_VERSION_NTLM},
+ {"NTLM_WB", &feature_ntlm_wb, CURL_VERSION_NTLM_WB},
+ {"PSL", NULL, CURL_VERSION_PSL},
+ {"SPNEGO", &feature_spnego, CURL_VERSION_SPNEGO},
+ {"SSL", &feature_ssl, CURL_VERSION_SSL},
+ {"SSPI", NULL, CURL_VERSION_SSPI},
+ {"threadsafe", NULL, CURL_VERSION_THREADSAFE},
+ {"TLS-SRP", &feature_tls_srp, CURL_VERSION_TLSAUTH_SRP},
+ {"TrackMemory", NULL, CURL_VERSION_CURLDEBUG},
+ {"Unicode", NULL, CURL_VERSION_UNICODE},
+ {"UnixSockets", NULL, CURL_VERSION_UNIX_SOCKETS},
+ {"zstd", &feature_zstd, CURL_VERSION_ZSTD},
+ {NULL, NULL, 0}
+};
+
+static const char *fnames[sizeof(maybe_feature) / sizeof(maybe_feature[0])];
+const char * const *feature_names = fnames;
+
/*
* libcurl_info_init: retrieves run-time information about libcurl,
* setting a global pointer 'curlinfo' to libcurl's run-time info
* struct, count protocols and flag those we are interested in.
+ * Global pointer feature_names is set to the feature names array. If
+ * the latter is not returned by curl_version_info(), it is built from
+ * the returned features bit mask.
*/
CURLcode get_libcurl_info(void)
{
CURLcode result = CURLE_OK;
+ const char *const *builtin;
/* Pointer to libcurl's run-time version information */
curlinfo = curl_version_info(CURLVERSION_NOW);
@@ -84,7 +145,6 @@ CURLcode get_libcurl_info(void)
return CURLE_FAILED_INIT;
if(curlinfo->protocols) {
- const char *const *builtin;
const struct proto_name_tokenp *p;
built_in_protos = curlinfo->protocols;
@@ -100,6 +160,30 @@ CURLcode get_libcurl_info(void)
proto_count = builtin - built_in_protos;
}
+ if(curlinfo->age >= CURLVERSION_ELEVENTH && curlinfo->feature_names)
+ feature_names = curlinfo->feature_names;
+ else {
+ const struct feature_name_presentp *p;
+ const char **cpp = fnames;
+
+ for(p = maybe_feature; p->feature_name; p++)
+ if(curlinfo->features & p->feature_bitmask)
+ *cpp++ = p->feature_name;
+ *cpp = NULL;
+ }
+
+ /* Identify features we are interested in. */
+ for(builtin = feature_names; *builtin; builtin++) {
+ const struct feature_name_presentp *p;
+
+ for(p = maybe_feature; p->feature_name; p++)
+ if(curl_strequal(p->feature_name, *builtin)) {
+ if(p->feature_presentp)
+ *p->feature_presentp = TRUE;
+ break;
+ }
+ }
+
return CURLE_OK;
}
diff --git a/src/tool_libinfo.h b/src/tool_libinfo.h
index 40e5aff3e..46063ad1b 100644
--- a/src/tool_libinfo.h
+++ b/src/tool_libinfo.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -29,9 +29,12 @@
extern curl_version_info_data *curlinfo;
+
extern const char * const *built_in_protos;
extern size_t proto_count;
+extern const char * const *feature_names;
+
extern const char *proto_file;
extern const char *proto_ftp;
extern const char *proto_ftps;
@@ -41,6 +44,22 @@ extern const char *proto_rtsp;
extern const char *proto_scp;
extern const char *proto_sftp;
extern const char *proto_tftp;
+extern const char *proto_ipfs;
+extern const char *proto_ipns;
+
+extern bool feature_altsvc;
+extern bool feature_brotli;
+extern bool feature_hsts;
+extern bool feature_http2;
+extern bool feature_http3;
+extern bool feature_httpsproxy;
+extern bool feature_libz;
+extern bool feature_ntlm;
+extern bool feature_ntlm_wb;
+extern bool feature_spnego;
+extern bool feature_ssl;
+extern bool feature_tls_srp;
+extern bool feature_zstd;
CURLcode get_libcurl_info(void);
const char *proto_token(const char *proto);
diff --git a/src/tool_listhelp.c b/src/tool_listhelp.c
index 6a2d10fb6..4e7a6dd63 100644
--- a/src/tool_listhelp.c
+++ b/src/tool_listhelp.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -51,6 +51,9 @@ const struct helptxt helptext[] = {
{" --basic",
"Use HTTP Basic Authentication",
CURLHELP_AUTH},
+ {" --ca-native",
+ "Use CA certificates from the native OS",
+ CURLHELP_TLS},
{" --cacert <file>",
"CA certificate to verify peer against",
CURLHELP_TLS},
@@ -243,6 +246,9 @@ const struct helptxt helptext[] = {
{" --happy-eyeballs-timeout-ms <milliseconds>",
"Time for IPv6 before trying IPv4",
CURLHELP_CONNECTION},
+ {" --haproxy-clientip",
+ "Sets client IP in HAProxy PROXY protocol v1 header",
+ CURLHELP_HTTP | CURLHELP_PROXY},
{" --haproxy-protocol",
"Send HAProxy PROXY protocol v1 header",
CURLHELP_HTTP | CURLHELP_PROXY},
@@ -274,7 +280,7 @@ const struct helptxt helptext[] = {
"Use HTTP 1.1",
CURLHELP_HTTP},
{" --http2",
- "Use HTTP 2",
+ "Use HTTP/2",
CURLHELP_HTTP},
{" --http2-prior-knowledge",
"Use HTTP 2 without HTTP/1.1 Upgrade",
@@ -282,6 +288,9 @@ const struct helptxt helptext[] = {
{" --http3",
"Use HTTP v3",
CURLHELP_HTTP},
+ {" --http3-only",
+ "Use HTTP v3 only",
+ CURLHELP_HTTP},
{" --ignore-content-length",
"Ignore the size of the remote resource",
CURLHELP_HTTP | CURLHELP_FTP},
@@ -294,6 +303,9 @@ const struct helptxt helptext[] = {
{" --interface <name>",
"Use network INTERFACE (or address)",
CURLHELP_CONNECTION},
+ {" --ipfs-gateway <URL>",
+ "Gateway for IPFS",
+ CURLHELP_IPFS},
{"-4, --ipv4",
"Resolve names to IPv4 addresses",
CURLHELP_CONNECTION | CURLHELP_DNS},
@@ -326,7 +338,7 @@ const struct helptxt helptext[] = {
CURLHELP_CONNECTION},
{"-l, --list-only",
"List only mode",
- CURLHELP_FTP | CURLHELP_POP3},
+ CURLHELP_FTP | CURLHELP_POP3 | CURLHELP_SFTP},
{" --local-port <num/range>",
"Force use of RANGE for local port numbers",
CURLHELP_CONNECTION},
@@ -471,6 +483,9 @@ const struct helptxt helptext[] = {
{" --proxy-basic",
"Use Basic authentication on the proxy",
CURLHELP_PROXY | CURLHELP_AUTH},
+ {" --proxy-ca-native",
+ "Use CA certificates from the native OS for proxy",
+ CURLHELP_TLS},
{" --proxy-cacert <file>",
"CA certificate to verify peer against for proxy",
CURLHELP_PROXY | CURLHELP_TLS},
@@ -495,6 +510,9 @@ const struct helptxt helptext[] = {
{" --proxy-header <header/@file>",
"Pass custom header(s) to proxy",
CURLHELP_PROXY},
+ {" --proxy-http2",
+ "Use HTTP/2 with HTTPS proxy",
+ CURLHELP_HTTP | CURLHELP_PROXY},
{" --proxy-insecure",
"Do HTTPS proxy connections without verifying the proxy",
CURLHELP_PROXY | CURLHELP_TLS},
@@ -670,7 +688,7 @@ const struct helptxt helptext[] = {
"Require SSL/TLS",
CURLHELP_TLS},
{" --ssl-revoke-best-effort",
- "Ignore missing/offline cert CRL dist points",
+ "Ignore missing/offline cert CRL dist points (Schannel)",
CURLHELP_TLS},
{"-2, --sslv2",
"Use SSLv2",
@@ -744,6 +762,12 @@ const struct helptxt helptext[] = {
{" --trace-ascii <file>",
"Like --trace, but without hex output",
CURLHELP_VERBOSE},
+ {" --trace-config <string>",
+ "Details to log in trace/verbose output",
+ CURLHELP_VERBOSE},
+ {" --trace-ids",
+ "Add transfer and connection identifiers to trace/verbose output",
+ CURLHELP_VERBOSE},
{" --trace-time",
"Add time stamps to trace/verbose output",
CURLHELP_VERBOSE},
@@ -756,6 +780,9 @@ const struct helptxt helptext[] = {
{" --url <url>",
"URL to work with",
CURLHELP_CURL},
+ {" --url-query <data>",
+ "Add a URL query part",
+ CURLHELP_HTTP | CURLHELP_POST | CURLHELP_UPLOAD},
{"-B, --use-ascii",
"Use ASCII/text transfer",
CURLHELP_MISC},
@@ -765,6 +792,9 @@ const struct helptxt helptext[] = {
{"-A, --user-agent <name>",
"Send User-Agent <name> to server",
CURLHELP_IMPORTANT | CURLHELP_HTTP},
+ {" --variable <[%]name=text/@file>",
+ "Set variable",
+ CURLHELP_CURL},
{"-v, --verbose",
"Make the operation more talkative",
CURLHELP_IMPORTANT | CURLHELP_VERBOSE},
diff --git a/src/tool_main.c b/src/tool_main.c
index 434979dea..446806ecb 100644
--- a/src/tool_main.c
+++ b/src/tool_main.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -25,23 +25,16 @@
#include <sys/stat.h>
-#ifdef WIN32
+#ifdef _WIN32
#include <tchar.h>
#endif
-#ifdef HAVE_SIGNAL_H
#include <signal.h>
-#endif
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
#endif
-#ifdef USE_NSS
-#include <nspr.h>
-#include <plarenas.h>
-#endif
-
#define ENABLE_CURLX_PRINTF
/* use our own printf() functions */
#include "curlx.h"
@@ -50,10 +43,10 @@
#include "tool_doswin.h"
#include "tool_msgs.h"
#include "tool_operate.h"
-#include "tool_panykey.h"
#include "tool_vms.h"
#include "tool_main.h"
#include "tool_libinfo.h"
+#include "tool_stderr.h"
/*
* This is low-level hard-hacking memory leak tracking and similar. Using
@@ -78,6 +71,7 @@ int vms_show = 0;
* when command-line argument globbing is enabled under the MSYS shell, so turn
* it off.
*/
+extern int _CRT_glob;
int _CRT_glob = 0;
#endif /* __MINGW32__ */
@@ -156,8 +150,7 @@ static CURLcode main_init(struct GlobalConfig *config)
#endif
/* Initialise the global config */
- config->showerror = -1; /* Will show errors */
- config->errors = stderr; /* Default errors to stderr */
+ config->showerror = FALSE; /* show errors when silent */
config->styled_output = TRUE; /* enable detection */
config->parallel_max = PARALLEL_DEFAULT;
@@ -176,17 +169,17 @@ static CURLcode main_init(struct GlobalConfig *config)
config->first->global = config;
}
else {
- errorf(config, "error retrieving curl library information\n");
+ errorf(config, "error retrieving curl library information");
free(config->first);
}
}
else {
- errorf(config, "error initializing curl library\n");
+ errorf(config, "error initializing curl library");
free(config->first);
}
}
else {
- errorf(config, "error initializing curl\n");
+ errorf(config, "error initializing curl");
result = CURLE_FAILED_INIT;
}
@@ -197,10 +190,6 @@ static void free_globalconfig(struct GlobalConfig *config)
{
Curl_safefree(config->trace_dump);
- if(config->errors_fopened && config->errors)
- fclose(config->errors);
- config->errors = NULL;
-
if(config->trace_fopened && config->trace_stream)
fclose(config->trace_stream);
config->trace_stream = NULL;
@@ -217,14 +206,6 @@ static void main_free(struct GlobalConfig *config)
/* Cleanup the easy handle */
/* Main cleanup */
curl_global_cleanup();
-#ifdef USE_NSS
- if(PR_Initialized()) {
- /* prevent valgrind from reporting still reachable mem from NSPR arenas */
- PL_ArenaFinish();
- /* prevent valgrind from reporting possibly lost memory (fd cache, ...) */
- PR_Cleanup();
- }
-#endif
free_globalconfig(config);
/* Free the config structures */
@@ -237,6 +218,12 @@ static void main_free(struct GlobalConfig *config)
** curl tool main function.
*/
#ifdef _UNICODE
+#if defined(__GNUC__)
+/* GCC doesn't know about wmain() */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wmissing-prototypes"
+#pragma GCC diagnostic ignored "-Wmissing-declarations"
+#endif
int wmain(int argc, wchar_t *argv[])
#else
int main(int argc, char *argv[])
@@ -246,7 +233,9 @@ int main(int argc, char *argv[])
struct GlobalConfig global;
memset(&global, 0, sizeof(global));
-#ifdef WIN32
+ tool_init_stderr();
+
+#ifdef _WIN32
/* Undocumented diagnostic option to list the full paths of all loaded
modules. This is purposely pre-init. */
if(argc == 2 && !_tcscmp(argv[1], _T("--dump-module-paths"))) {
@@ -259,13 +248,13 @@ int main(int argc, char *argv[])
/* win32_init must be called before other init routines. */
result = win32_init();
if(result) {
- fprintf(stderr, "curl: (%d) Windows-specific init failed.\n", result);
+ errorf(&global, "(%d) Windows-specific init failed", result);
return result;
}
#endif
if(main_checkfds()) {
- fprintf(stderr, "curl: out of file descriptors\n");
+ errorf(&global, "out of file descriptors");
return CURLE_FAILED_INIT;
}
@@ -287,16 +276,11 @@ int main(int argc, char *argv[])
main_free(&global);
}
-#ifdef WIN32
+#ifdef _WIN32
/* Flush buffers of all streams opened in write or update mode */
fflush(NULL);
#endif
-#ifdef __NOVELL_LIBC__
- if(!getenv("_IN_NETWARE_BASH_"))
- tool_pressanykey();
-#endif
-
#ifdef __VMS
vms_special_exit(result, vms_show);
#else
@@ -304,4 +288,10 @@ int main(int argc, char *argv[])
#endif
}
+#ifdef _UNICODE
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
+#endif
+
#endif /* ndef UNITTESTS */
diff --git a/src/tool_main.h b/src/tool_main.h
index a1fd1070e..c4da177e1 100644
--- a/src/tool_main.h
+++ b/src/tool_main.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -42,7 +42,7 @@
#endif
#ifndef STDERR_FILENO
-# define STDERR_FILENO fileno(stderr)
+# define STDERR_FILENO fileno(tool_stderr)
#endif
#endif /* HEADER_CURL_TOOL_MAIN_H */
diff --git a/src/tool_msgs.c b/src/tool_msgs.c
index a880a667e..c914836db 100644
--- a/src/tool_msgs.c
+++ b/src/tool_msgs.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -42,7 +42,8 @@ static void voutf(struct GlobalConfig *config,
va_list ap)
{
size_t width = (79 - strlen(prefix));
- if(!config->mute) {
+ DEBUGASSERT(!strchr(fmt, '\n'));
+ if(!config->silent) {
size_t len;
char *ptr;
char *print_buffer;
@@ -54,7 +55,7 @@ static void voutf(struct GlobalConfig *config,
ptr = print_buffer;
while(len > 0) {
- fputs(prefix, config->errors);
+ fputs(prefix, tool_stderr);
if(len > width) {
size_t cut = width-1;
@@ -67,13 +68,14 @@ static void voutf(struct GlobalConfig *config,
max text width then! */
cut = width-1;
- (void)fwrite(ptr, cut + 1, 1, config->errors);
- fputs("\n", config->errors);
+ (void)fwrite(ptr, cut + 1, 1, tool_stderr);
+ fputs("\n", tool_stderr);
ptr += cut + 1; /* skip the space too */
len -= cut + 1;
}
else {
- fputs(ptr, config->errors);
+ fputs(ptr, tool_stderr);
+ fputs("\n", tool_stderr);
len = 0;
}
}
@@ -115,9 +117,11 @@ void helpf(FILE *errors, const char *fmt, ...)
if(fmt) {
va_list ap;
va_start(ap, fmt);
+ DEBUGASSERT(!strchr(fmt, '\n'));
fputs("curl: ", errors); /* prefix it */
vfprintf(errors, fmt, ap);
va_end(ap);
+ fputs("\n", errors); /* newline it */
}
fprintf(errors, "curl: try 'curl --help' "
#ifdef USE_MANUAL
@@ -132,7 +136,7 @@ void helpf(FILE *errors, const char *fmt, ...)
*/
void errorf(struct GlobalConfig *config, const char *fmt, ...)
{
- if(!config->mute) {
+ if(!config->silent || config->showerror) {
va_list ap;
va_start(ap, fmt);
voutf(config, ERROR_PREFIX, fmt, ap);
diff --git a/src/tool_msgs.h b/src/tool_msgs.h
index e35884e9d..9458991c0 100644
--- a/src/tool_msgs.h
+++ b/src/tool_msgs.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,6 +24,7 @@
*
***************************************************************************/
#include "tool_setup.h"
+#include "tool_cfgable.h"
void warnf(struct GlobalConfig *config, const char *fmt, ...);
void notef(struct GlobalConfig *config, const char *fmt, ...);
diff --git a/src/tool_operate.c b/src/tool_operate.c
index 43c1c5e6c..c805b7732 100644
--- a/src/tool_operate.c
+++ b/src/tool_operate.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -45,8 +45,6 @@
# include <proto/dos.h>
#endif
-#include "strcase.h"
-
#define ENABLE_CURLX_PRINTF
/* use our own printf() functions */
#include "curlx.h"
@@ -83,6 +81,7 @@
#include "tool_help.h"
#include "tool_hugehelp.h"
#include "tool_progress.h"
+#include "tool_ipfs.h"
#include "dynbuf.h"
#include "memdebug.h" /* keep this as LAST include */
@@ -205,14 +204,14 @@ static curl_off_t VmsSpecialSize(const char *name,
struct per_transfer *transfers; /* first node */
static struct per_transfer *transfersl; /* last node */
-static long all_pers;
+static curl_off_t all_pers;
/* add_per_transfer creates a new 'per_transfer' node in the linked
list of transfers */
static CURLcode add_per_transfer(struct per_transfer **per)
{
struct per_transfer *p;
- p = calloc(sizeof(struct per_transfer), 1);
+ p = calloc(1, sizeof(struct per_transfer));
if(!p)
return CURLE_OUT_OF_MEMORY;
if(!transfers)
@@ -306,7 +305,7 @@ static CURLcode pre_transfer(struct GlobalConfig *global,
if((per->infd == -1) || fstat(per->infd, &fileinfo))
#endif
{
- helpf(global->errors, "Can't open '%s'!\n", per->uploadfile);
+ helpf(tool_stderr, "Can't open '%s'", per->uploadfile);
if(per->infd != -1) {
close(per->infd);
per->infd = STDIN_FILENO;
@@ -319,15 +318,28 @@ static CURLcode pre_transfer(struct GlobalConfig *global,
if(S_ISREG(fileinfo.st_mode))
uploadfilesize = fileinfo.st_size;
+#ifdef DEBUGBUILD
+ /* allow dedicated test cases to override */
+ {
+ char *ev = getenv("CURL_UPLOAD_SIZE");
+ if(ev) {
+ int sz = atoi(ev);
+ uploadfilesize = (curl_off_t)sz;
+ }
+ }
+#endif
+
if(uploadfilesize != -1) {
struct OperationConfig *config = per->config; /* for the macro below */
#ifdef CURL_DISABLE_LIBCURL_OPTION
(void)config;
+ (void)global;
#endif
my_setopt(per->curl, CURLOPT_INFILESIZE_LARGE, uploadfilesize);
}
- per->input.fd = per->infd;
}
+ per->uploadfilesize = uploadfilesize;
+ per->start = tvnow();
return result;
}
@@ -382,6 +394,7 @@ static CURLcode post_per_transfer(struct GlobalConfig *global,
struct OutStruct *outs = &per->outs;
CURL *curl = per->curl;
struct OperationConfig *config = per->config;
+ int rc;
if(!curl || !config)
return result;
@@ -395,25 +408,26 @@ static CURLcode post_per_transfer(struct GlobalConfig *global,
#ifdef __VMS
if(is_vms_shell()) {
/* VMS DCL shell behavior */
- if(!global->showerror)
+ if(global->silent && !global->showerror)
vms_show = VMSSTS_HIDE;
}
else
#endif
- if(!config->synthetic_error && result && global->showerror) {
+ if(!config->synthetic_error && result &&
+ (!global->silent || global->showerror)) {
const char *msg = per->errorbuffer;
- fprintf(global->errors, "curl: (%d) %s\n", result,
+ fprintf(tool_stderr, "curl: (%d) %s\n", result,
(msg && msg[0]) ? msg : curl_easy_strerror(result));
if(result == CURLE_PEER_FAILED_VERIFICATION)
- fputs(CURL_CA_CERT_ERRORMSG, global->errors);
+ fputs(CURL_CA_CERT_ERRORMSG, tool_stderr);
}
else if(config->failwithbody) {
/* if HTTP response >= 400, return error */
long code = 0;
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &code);
if(code >= 400) {
- if(global->showerror)
- fprintf(global->errors,
+ if(!global->silent || global->showerror)
+ fprintf(tool_stderr,
"curl: (%d) The requested URL returned error: %ld\n",
CURLE_HTTP_RETURNED_ERROR, code);
result = CURLE_HTTP_RETURNED_ERROR;
@@ -421,9 +435,9 @@ static CURLcode post_per_transfer(struct GlobalConfig *global,
}
/* Set file extended attributes */
if(!result && config->xattr && outs->fopened && outs->stream) {
- int rc = fwrite_xattr(curl, per->this_url, fileno(outs->stream));
+ rc = fwrite_xattr(curl, per->this_url, fileno(outs->stream));
if(rc)
- warnf(config->global, "Error setting extended attributes on '%s': %s\n",
+ warnf(config->global, "Error setting extended attributes on '%s': %s",
outs->filename, strerror(errno));
}
@@ -441,15 +455,20 @@ static CURLcode post_per_transfer(struct GlobalConfig *global,
if(!outs->s_isreg && outs->stream) {
/* Dump standard stream buffered data */
- int rc = fflush(outs->stream);
+ rc = fflush(outs->stream);
if(!result && rc) {
/* something went wrong in the writing process */
result = CURLE_WRITE_ERROR;
- if(global->showerror)
- fprintf(global->errors, "curl: (%d) Failed writing body\n", result);
+ errorf(global, "Failed writing body");
}
}
+#ifdef _WIN32
+ /* Discard incomplete UTF-8 sequence buffered from body */
+ if(outs->utf8seq[0])
+ memset(outs->utf8seq, 0, sizeof(outs->utf8seq));
+#endif
+
/* if retry-max-time is non-zero, make sure we haven't exceeded the
time */
if(per->retry_numretries &&
@@ -573,7 +592,7 @@ static CURLcode post_per_transfer(struct GlobalConfig *global,
}
warnf(config->global, "Problem %s. "
"Will retry in %ld seconds. "
- "%ld retries left.\n",
+ "%ld retries left.",
m[retry], sleeptime/1000L, per->retry_numretries);
per->retry_numretries--;
@@ -583,22 +602,18 @@ static CURLcode post_per_transfer(struct GlobalConfig *global,
per->retry_sleep = RETRY_SLEEP_MAX;
}
if(outs->bytes && outs->filename && outs->stream) {
- int rc;
/* We have written data to an output file, we truncate file
*/
- if(!global->mute)
- fprintf(global->errors, "Throwing away %"
- CURL_FORMAT_CURL_OFF_T " bytes\n",
- outs->bytes);
+ notef(config->global,
+ "Throwing away %" CURL_FORMAT_CURL_OFF_T " bytes",
+ outs->bytes);
fflush(outs->stream);
/* truncate file at the position where we started appending */
#ifdef HAVE_FTRUNCATE
if(ftruncate(fileno(outs->stream), outs->init)) {
/* when truncate fails, we can't just append as then we'll
create something strange, bail out */
- if(global->showerror)
- fprintf(global->errors,
- "curl: (23) Failed to truncate file\n");
+ errorf(config->global, "Failed to truncate file");
return CURLE_WRITE_ERROR;
}
/* now seek to the end of the file, the position where we
@@ -612,9 +627,7 @@ static CURLcode post_per_transfer(struct GlobalConfig *global,
rc = fseek(outs->stream, (long)outs->init, SEEK_SET);
#endif
if(rc) {
- if(global->showerror)
- fprintf(global->errors,
- "curl: (23) Failed seeking to end of file\n");
+ errorf(config->global, "Failed seeking to end of file");
return CURLE_WRITE_ERROR;
}
outs->bytes = 0; /* clear for next round */
@@ -624,7 +637,7 @@ static CURLcode post_per_transfer(struct GlobalConfig *global,
return CURLE_OK;
}
} /* if retry_numretries */
- noretry:
+noretry:
if((global->progressmode == CURL_PROGRESS_BAR) &&
per->progressbar.calls)
@@ -634,15 +647,14 @@ static CURLcode post_per_transfer(struct GlobalConfig *global,
/* Close the outs file */
if(outs->fopened && outs->stream) {
- int rc = fclose(outs->stream);
+ rc = fclose(outs->stream);
if(!result && rc) {
/* something went wrong in the writing process */
result = CURLE_WRITE_ERROR;
- if(global->showerror)
- fprintf(global->errors, "curl: (%d) Failed writing body\n", result);
+ errorf(config->global, "curl: (%d) Failed writing body", result);
}
if(result && config->rm_partial) {
- notef(global, "Removing output file: %s\n", outs->filename);
+ notef(global, "Removing output file: %s", outs->filename);
unlink(outs->filename);
}
}
@@ -659,7 +671,7 @@ static CURLcode post_per_transfer(struct GlobalConfig *global,
/* Write the --write-out data before cleanup but after result is final */
if(config->writeout)
- ourWriteOut(config->writeout, per, result);
+ ourWriteOut(config, per, result);
/* Close function-local opened file descriptors */
if(per->heads.fopened && per->heads.stream)
@@ -689,27 +701,45 @@ static CURLcode post_per_transfer(struct GlobalConfig *global,
/*
* Return the protocol token for the scheme used in the given URL
*/
-static const char *url_proto(char *url)
+static CURLcode url_proto(char **url,
+ struct OperationConfig *config,
+ char **scheme)
{
+ CURLcode result = CURLE_OK;
CURLU *uh = curl_url();
const char *proto = NULL;
+ *scheme = NULL;
if(uh) {
- if(url) {
- if(!curl_url_set(uh, CURLUPART_URL, url,
- CURLU_GUESS_SCHEME | CURLU_NON_SUPPORT_SCHEME)) {
- char *schemep = NULL;
- if(!curl_url_get(uh, CURLUPART_SCHEME, &schemep,
- CURLU_DEFAULT_SCHEME) &&
- schemep) {
- proto = proto_token(schemep);
- curl_free(schemep);
+ if(*url) {
+ char *schemep = NULL;
+
+ if(!curl_url_set(uh, CURLUPART_URL, *url,
+ CURLU_GUESS_SCHEME | CURLU_NON_SUPPORT_SCHEME) &&
+ !curl_url_get(uh, CURLUPART_SCHEME, &schemep,
+ CURLU_DEFAULT_SCHEME)) {
+ if(curl_strequal(schemep, proto_ipfs) ||
+ curl_strequal(schemep, proto_ipns)) {
+ result = ipfs_url_rewrite(uh, schemep, url, config);
+ /* short-circuit proto_token, we know it's ipfs or ipns */
+ if(curl_strequal(schemep, proto_ipfs))
+ proto = proto_ipfs;
+ else if(curl_strequal(schemep, proto_ipns))
+ proto = proto_ipns;
+ if(result)
+ config->synthetic_error = TRUE;
}
+ else
+ proto = proto_token(schemep);
+
+ curl_free(schemep);
}
}
curl_url_cleanup(uh);
}
- return proto? proto: "???"; /* Never match if not found. */
+
+ *scheme = (char *) (proto? proto: "???"); /* Never match if not found. */
+ return result;
}
/* create the next (singular) transfer */
@@ -725,16 +755,17 @@ static CURLcode single_transfer(struct GlobalConfig *global,
bool orig_isatty = global->isatty;
struct State *state = &config->state;
char *httpgetfields = state->httpgetfields;
+
*added = FALSE; /* not yet */
if(config->postfields) {
if(config->use_httpget) {
if(!httpgetfields) {
- /* Use the postfields data for a http get */
+ /* Use the postfields data for an HTTP get */
httpgetfields = state->httpgetfields = strdup(config->postfields);
Curl_safefree(config->postfields);
if(!httpgetfields) {
- errorf(global, "out of memory\n");
+ errorf(global, "out of memory");
result = CURLE_OUT_OF_MEMORY;
}
else if(SetHTTPrequest(config,
@@ -777,7 +808,7 @@ static CURLcode single_transfer(struct GlobalConfig *global,
state->up = 0;
if(!warn_more_options) {
/* only show this once */
- warnf(config->global, "Got more output options than URLs\n");
+ warnf(config->global, "Got more output options than URLs");
warn_more_options = TRUE;
}
continue; /* next URL please */
@@ -787,7 +818,7 @@ static CURLcode single_transfer(struct GlobalConfig *global,
if(urlnode->outfile && !state->outfiles) {
state->outfiles = strdup(urlnode->outfile);
if(!state->outfiles) {
- errorf(global, "out of memory\n");
+ errorf(global, "out of memory");
result = CURLE_OUT_OF_MEMORY;
break;
}
@@ -798,14 +829,15 @@ static CURLcode single_transfer(struct GlobalConfig *global,
if(!config->globoff && infiles && !inglob) {
/* Unless explicitly shut off */
result = glob_url(&inglob, infiles, &state->infilenum,
- global->showerror?global->errors:NULL);
+ (!global->silent || global->showerror)?
+ tool_stderr:NULL);
if(result)
break;
config->state.inglob = inglob;
}
{
- unsigned long urlnum;
+ curl_off_t urlnum;
if(!state->up && !infiles)
Curl_nop_stmt;
@@ -814,12 +846,12 @@ static CURLcode single_transfer(struct GlobalConfig *global,
if(inglob) {
result = glob_next_url(&state->uploadfile, inglob);
if(result == CURLE_OUT_OF_MEMORY)
- errorf(global, "out of memory\n");
+ errorf(global, "out of memory");
}
else if(!state->up) {
state->uploadfile = strdup(infiles);
if(!state->uploadfile) {
- errorf(global, "out of memory\n");
+ errorf(global, "out of memory");
result = CURLE_OUT_OF_MEMORY;
}
}
@@ -833,7 +865,8 @@ static CURLcode single_transfer(struct GlobalConfig *global,
/* Unless explicitly shut off, we expand '{...}' and '[...]'
expressions and return total number of URLs in pattern set */
result = glob_url(&state->urls, urlnode->url, &state->urlnum,
- global->showerror?global->errors:NULL);
+ (!global->silent || global->showerror)?
+ tool_stderr:NULL);
if(result)
break;
urlnum = state->urlnum;
@@ -847,12 +880,11 @@ static CURLcode single_transfer(struct GlobalConfig *global,
if(state->up < state->infilenum) {
struct per_transfer *per = NULL;
struct OutStruct *outs;
- struct InStruct *input;
struct OutStruct *heads;
struct OutStruct *etag_save;
struct HdrCbData *hdrcbdata = NULL;
struct OutStruct etag_first;
- const char *use_proto;
+ char *use_proto;
CURL *curl;
/* --etag-save */
@@ -870,7 +902,7 @@ static CURLcode single_transfer(struct GlobalConfig *global,
FILE *file = fopen(config->etag_compare_file, FOPEN_READTEXT);
if(!file && !config->etag_save_file) {
errorf(global,
- "Failed to open %s\n", config->etag_compare_file);
+ "Failed to open %s", config->etag_compare_file);
result = CURLE_READ_ERROR;
break;
}
@@ -887,7 +919,7 @@ static CURLcode single_transfer(struct GlobalConfig *global,
if(file)
fclose(file);
errorf(global,
- "Failed to allocate memory for custom etag header\n");
+ "Failed to allocate memory for custom etag header");
result = CURLE_OUT_OF_MEMORY;
break;
}
@@ -910,7 +942,7 @@ static CURLcode single_transfer(struct GlobalConfig *global,
FILE *newfile = fopen(config->etag_save_file, "wb");
if(!newfile) {
warnf(global, "Failed creating file for saving etags: \"%s\". "
- "Skip this transfer\n", config->etag_save_file);
+ "Skip this transfer", config->etag_save_file);
Curl_safefree(state->outfiles);
glob_cleanup(state->urls);
return CURLE_OK;
@@ -968,9 +1000,25 @@ static CURLcode single_transfer(struct GlobalConfig *global,
/* open file for output: */
if(strcmp(config->headerfile, "-")) {
FILE *newfile;
- newfile = fopen(config->headerfile, per->prev == NULL?"wb":"ab");
+
+ /*
+ * Since every transfer has its own file handle for dumping
+ * the headers, we need to open it in append mode, since transfers
+ * might finish in any order.
+ * The first transfer just clears the file.
+ * TODO: Consider placing the file handle inside the
+ * OperationConfig, so that it does not need to be opened/closed
+ * for every transfer.
+ */
+ if(!per->prev || per->prev->config != config) {
+ newfile = fopen(config->headerfile, "wb");
+ if(newfile)
+ fclose(newfile);
+ }
+ newfile = fopen(config->headerfile, "ab");
+
if(!newfile) {
- warnf(global, "Failed to open %s\n", config->headerfile);
+ errorf(global, "Failed to open %s", config->headerfile);
result = CURLE_WRITE_ERROR;
break;
}
@@ -990,7 +1038,6 @@ static CURLcode single_transfer(struct GlobalConfig *global,
hdrcbdata = &per->hdrcbdata;
outs = &per->outs;
- input = &per->input;
per->outfile = NULL;
per->infdopen = FALSE;
@@ -1037,11 +1084,11 @@ static CURLcode single_transfer(struct GlobalConfig *global,
result = get_url_file_name(&per->outfile, per->this_url);
if(result) {
errorf(global, "Failed to extract a sensible file name"
- " from the URL to use for storage!\n");
+ " from the URL to use for storage");
break;
}
if(!*per->outfile && !config->content_disposition) {
- errorf(global, "Remote file name has no length!\n");
+ errorf(global, "Remote file name has no length");
result = CURLE_WRITE_ERROR;
break;
}
@@ -1053,11 +1100,11 @@ static CURLcode single_transfer(struct GlobalConfig *global,
Curl_safefree(storefile);
if(result) {
/* bad globbing */
- warnf(global, "bad output glob!\n");
+ warnf(global, "bad output glob");
break;
}
if(!*per->outfile) {
- warnf(global, "output glob produces empty string!\n");
+ warnf(global, "output glob produces empty string");
result = CURLE_WRITE_ERROR;
break;
}
@@ -1076,7 +1123,7 @@ static CURLcode single_transfer(struct GlobalConfig *global,
file output call */
if(config->create_dirs) {
- result = create_dir_hierarchy(per->outfile, global->errors);
+ result = create_dir_hierarchy(per->outfile, global);
/* create_dir_hierarchy shows error upon CURLE_WRITE_ERROR */
if(result)
break;
@@ -1112,7 +1159,7 @@ static CURLcode single_transfer(struct GlobalConfig *global,
FILE *file = fopen(per->outfile, "ab");
#endif
if(!file) {
- errorf(global, "Can't open '%s'!\n", per->outfile);
+ errorf(global, "Can't open '%s'", per->outfile);
result = CURLE_WRITE_ERROR;
break;
}
@@ -1159,7 +1206,7 @@ static CURLcode single_transfer(struct GlobalConfig *global,
warnf(global,
"Using --anyauth or --proxy-anyauth with upload from stdin"
" involves a big risk of it not working. Use a temporary"
- " file or a fixed auth type instead!\n");
+ " file or a fixed auth type instead");
}
DEBUGASSERT(per->infdopen == FALSE);
@@ -1169,7 +1216,7 @@ static CURLcode single_transfer(struct GlobalConfig *global,
if(!strcmp(per->uploadfile, ".")) {
if(curlx_nonblock((curl_socket_t)per->infd, TRUE) < 0)
warnf(global,
- "fcntl failed on fd=%d: %s\n", per->infd, strerror(errno));
+ "fcntl failed on fd=%d: %s", per->infd, strerror(errno));
}
}
@@ -1188,28 +1235,38 @@ static CURLcode single_transfer(struct GlobalConfig *global,
global->isatty = orig_isatty;
}
- if(httpgetfields) {
+ if(httpgetfields || config->query) {
+ char *q = httpgetfields ? httpgetfields : config->query;
CURLU *uh = curl_url();
if(uh) {
- char *updated;
- if(curl_url_set(uh, CURLUPART_URL, per->this_url,
- CURLU_GUESS_SCHEME) ||
- curl_url_set(uh, CURLUPART_QUERY, httpgetfields,
- CURLU_APPENDQUERY) ||
- curl_url_get(uh, CURLUPART_URL, &updated, CURLU_GUESS_SCHEME)) {
- curl_url_cleanup(uh);
- result = CURLE_OUT_OF_MEMORY;
- break;
+ CURLUcode uerr;
+ uerr = curl_url_set(uh, CURLUPART_URL, per->this_url,
+ CURLU_GUESS_SCHEME);
+ if(uerr) {
+ result = urlerr_cvt(uerr);
+ errorf(global, "(%d) Could not parse the URL, "
+ "failed to set query", result);
+ config->synthetic_error = TRUE;
+ }
+ else {
+ char *updated = NULL;
+ uerr = curl_url_set(uh, CURLUPART_QUERY, q, CURLU_APPENDQUERY);
+ if(!uerr)
+ uerr = curl_url_get(uh, CURLUPART_URL, &updated,
+ CURLU_GUESS_SCHEME);
+ if(uerr)
+ result = urlerr_cvt(uerr);
+ else {
+ Curl_safefree(per->this_url); /* free previous URL */
+ per->this_url = updated; /* use our new URL instead! */
+ }
}
- Curl_safefree(per->this_url); /* free previous URL */
- per->this_url = updated; /* use our new URL instead! */
curl_url_cleanup(uh);
+ if(result)
+ break;
}
}
- if(!global->errors)
- global->errors = stderr;
-
if((!per->outfile || !strcmp(per->outfile, "-")) &&
!config->use_ascii) {
/* We get the output to stdout and we have not got the ASCII/text
@@ -1226,7 +1283,19 @@ static CURLcode single_transfer(struct GlobalConfig *global,
if(result)
break;
- use_proto = url_proto(per->this_url);
+ /* result is only used when for ipfs and ipns, ignored otherwise */
+ result = url_proto(&per->this_url, config, &use_proto);
+ if(result && (use_proto == proto_ipfs || use_proto == proto_ipns))
+ break;
+
+ /* On most modern OSes, exiting works thoroughly,
+ we'll clean everything up via exit(), so don't bother with
+ slow cleanups. Crappy ones might need to skip this.
+ Note: avoid having this setopt added to the --libcurl source
+ output. */
+ result = curl_easy_setopt(curl, CURLOPT_QUICK_EXIT, 1L);
+ if(result)
+ break;
if(!config->tcp_nodelay)
my_setopt(curl, CURLOPT_TCP_NODELAY, 0L);
@@ -1241,8 +1310,6 @@ static CURLcode single_transfer(struct GlobalConfig *global,
/* what call to write */
my_setopt(curl, CURLOPT_WRITEFUNCTION, tool_write_cb);
- /* for uploads */
- input->config = config;
/* Note that if CURLOPT_READFUNCTION is fread (the default), then
* lib/telnet.c will Curl_poll() on the input file descriptor
* rather than calling the READFUNCTION at regular intervals.
@@ -1250,24 +1317,36 @@ static CURLcode single_transfer(struct GlobalConfig *global,
* behavior, by omitting to set the READFUNCTION & READDATA options,
* have not been determined.
*/
- my_setopt(curl, CURLOPT_READDATA, input);
+ my_setopt(curl, CURLOPT_READDATA, per);
/* what call to read */
my_setopt(curl, CURLOPT_READFUNCTION, tool_read_cb);
/* in 7.18.0, the CURLOPT_SEEKFUNCTION/DATA pair is taking over what
CURLOPT_IOCTLFUNCTION/DATA pair previously provided for seeking */
- my_setopt(curl, CURLOPT_SEEKDATA, input);
+ my_setopt(curl, CURLOPT_SEEKDATA, per);
my_setopt(curl, CURLOPT_SEEKFUNCTION, tool_seek_cb);
- if(config->recvpersecond &&
- (config->recvpersecond < BUFFER_SIZE))
- /* use a smaller sized buffer for better sleeps */
- my_setopt(curl, CURLOPT_BUFFERSIZE, (long)config->recvpersecond);
- else
- my_setopt(curl, CURLOPT_BUFFERSIZE, (long)BUFFER_SIZE);
+ {
+#ifdef CURLDEBUG
+ char *env = getenv("CURL_BUFFERSIZE");
+ if(env) {
+ long size = strtol(env, NULL, 10);
+ if(size)
+ my_setopt(curl, CURLOPT_BUFFERSIZE, size);
+ }
+ else
+#endif
+ if(config->recvpersecond &&
+ (config->recvpersecond < BUFFER_SIZE))
+ /* use a smaller sized buffer for better sleeps */
+ my_setopt(curl, CURLOPT_BUFFERSIZE, (long)config->recvpersecond);
+ else
+ my_setopt(curl, CURLOPT_BUFFERSIZE, (long)BUFFER_SIZE);
+ }
my_setopt_str(curl, CURLOPT_URL, per->this_url);
- my_setopt(curl, CURLOPT_NOPROGRESS, global->noprogress?1L:0L);
+ my_setopt(curl, CURLOPT_NOPROGRESS,
+ global->noprogress || global->silent?1L:0L);
if(config->no_body)
my_setopt(curl, CURLOPT_NOBODY, 1L);
@@ -1277,7 +1356,7 @@ static CURLcode single_transfer(struct GlobalConfig *global,
my_setopt_str(curl, CURLOPT_PROXY, config->proxy);
if(config->proxy && result) {
- errorf(global, "proxy support is disabled in this libcurl\n");
+ errorf(global, "proxy support is disabled in this libcurl");
config->synthetic_error = TRUE;
result = CURLE_NOT_BUILT_IN;
break;
@@ -1344,23 +1423,34 @@ static CURLcode single_transfer(struct GlobalConfig *global,
per->errorbuffer = global_errorbuffer;
my_setopt(curl, CURLOPT_ERRORBUFFER, global_errorbuffer);
}
- my_setopt(curl, CURLOPT_TIMEOUT_MS, (long)(config->timeout * 1000));
+ my_setopt(curl, CURLOPT_TIMEOUT_MS, config->timeout_ms);
switch(config->httpreq) {
case HTTPREQ_SIMPLEPOST:
- my_setopt_str(curl, CURLOPT_POSTFIELDS,
- config->postfields);
- my_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE,
- config->postfieldsize);
+ if(config->resume_from) {
+ errorf(global, "cannot mix --continue-at with --data");
+ result = CURLE_FAILED_INIT;
+ }
+ else {
+ my_setopt_str(curl, CURLOPT_POSTFIELDS,
+ config->postfields);
+ my_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE,
+ config->postfieldsize);
+ }
break;
case HTTPREQ_MIMEPOST:
/* free previous remainders */
curl_mime_free(config->mimepost);
config->mimepost = NULL;
- result = tool2curlmime(curl, config->mimeroot, &config->mimepost);
- if(result)
- break;
- my_setopt_mimepost(curl, CURLOPT_MIMEPOST, config->mimepost);
+ if(config->resume_from) {
+ errorf(global, "cannot mix --continue-at with --form");
+ result = CURLE_FAILED_INIT;
+ }
+ else {
+ result = tool2curlmime(curl, config->mimeroot, &config->mimepost);
+ if(!result)
+ my_setopt_mimepost(curl, CURLOPT_MIMEPOST, config->mimepost);
+ }
break;
default:
break;
@@ -1390,13 +1480,13 @@ static CURLcode single_transfer(struct GlobalConfig *global,
config->followlocation?1L:0L);
my_setopt(curl, CURLOPT_UNRESTRICTED_AUTH,
config->unrestricted_auth?1L:0L);
-
+ my_setopt_str(curl, CURLOPT_AWS_SIGV4, config->aws_sigv4);
my_setopt(curl, CURLOPT_AUTOREFERER, config->autoreferer?1L:0L);
/* new in libcurl 7.36.0 */
if(config->proxyheaders) {
my_setopt_slist(curl, CURLOPT_PROXYHEADER, config->proxyheaders);
- my_setopt(curl, CURLOPT_HEADEROPT, CURLHEADER_SEPARATE);
+ my_setopt(curl, CURLOPT_HEADEROPT, (long)CURLHEADER_SEPARATE);
}
/* new in libcurl 7.5 */
@@ -1404,9 +1494,8 @@ static CURLcode single_transfer(struct GlobalConfig *global,
if(config->httpversion)
my_setopt_enum(curl, CURLOPT_HTTP_VERSION, config->httpversion);
- else if(curlinfo->features & CURL_VERSION_HTTP2) {
+ else if(feature_http2)
my_setopt_enum(curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2TLS);
- }
/* curl 7.19.1 (the 301 version existed in 7.18.2),
303 was added in 7.26.0 */
@@ -1429,7 +1518,7 @@ static CURLcode single_transfer(struct GlobalConfig *global,
my_setopt(curl, CURLOPT_HTTP09_ALLOWED,
config->http09_allowed ? 1L : 0L);
if(result) {
- errorf(global, "HTTP/0.9 is not supported in this build!\n");
+ errorf(global, "HTTP/0.9 is not supported in this build");
return result;
}
@@ -1454,7 +1543,6 @@ static CURLcode single_transfer(struct GlobalConfig *global,
my_setopt_str(curl, CURLOPT_PROXY_KEYPASSWD, config->proxy_key_passwd);
if(use_proto == proto_scp || use_proto == proto_sftp) {
-
/* SSH and SSL private key uses same command-line option */
/* new in libcurl 7.16.1 */
my_setopt_str(curl, CURLOPT_SSH_PRIVATE_KEYFILE, config->key);
@@ -1484,7 +1572,7 @@ static CURLcode single_transfer(struct GlobalConfig *global,
if(config->capath) {
result = res_setopt_str(curl, CURLOPT_CAPATH, config->capath);
if(result == CURLE_NOT_BUILT_IN) {
- warnf(global, "ignoring %s, not supported by libcurl\n",
+ warnf(global, "ignoring %s, not supported by libcurl",
capath_from_env?
"SSL_CERT_DIR environment variable":"--capath");
}
@@ -1498,10 +1586,11 @@ static CURLcode single_transfer(struct GlobalConfig *global,
(config->proxy_capath ?
config->proxy_capath :
config->capath));
- if(result == CURLE_NOT_BUILT_IN) {
+ if((result == CURLE_NOT_BUILT_IN) ||
+ (result == CURLE_UNKNOWN_OPTION)) {
if(config->proxy_capath) {
warnf(global,
- "ignoring --proxy-capath, not supported by libcurl\n");
+ "ignoring --proxy-capath, not supported by libcurl");
}
}
else if(result)
@@ -1521,7 +1610,10 @@ static CURLcode single_transfer(struct GlobalConfig *global,
if(config->ssl_ec_curves)
my_setopt_str(curl, CURLOPT_SSL_EC_CURVES, config->ssl_ec_curves);
- if(curlinfo->features & CURL_VERSION_SSL) {
+ if(config->writeout)
+ my_setopt_str(curl, CURLOPT_CERTINFO, 1L);
+
+ if(feature_ssl) {
/* Check if config->cert is a PKCS#11 URI and set the
* config->cert_type if necessary */
if(config->cert) {
@@ -1651,9 +1743,6 @@ static CURLcode single_transfer(struct GlobalConfig *global,
my_setopt_str(curl, CURLOPT_SSLKEYTYPE, config->key_type);
my_setopt_str(curl, CURLOPT_PROXY_SSLKEYTYPE,
config->proxy_key_type);
- my_setopt_str(curl, CURLOPT_AWS_SIGV4,
- config->aws_sigv4);
-
if(config->insecure_ok) {
my_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
my_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
@@ -1714,7 +1803,9 @@ static CURLcode single_transfer(struct GlobalConfig *global,
(config->proxy_ssl_allow_beast ?
CURLSSLOPT_ALLOW_BEAST : 0) |
(config->proxy_ssl_auto_client_cert ?
- CURLSSLOPT_AUTO_CLIENT_CERT : 0);
+ CURLSSLOPT_AUTO_CLIENT_CERT : 0) |
+ (config->proxy_native_ca_store ?
+ CURLSSLOPT_NATIVE_CA : 0);
if(mask)
my_setopt_bitmask(curl, CURLOPT_PROXY_SSL_OPTIONS, mask);
@@ -1738,7 +1829,7 @@ static CURLcode single_transfer(struct GlobalConfig *global,
break;
}
else
- warnf(global, "Couldn't find a known_hosts file!");
+ warnf(global, "Couldn't find a known_hosts file");
}
if(config->no_body || config->remote_time) {
@@ -1756,7 +1847,7 @@ static CURLcode single_transfer(struct GlobalConfig *global,
struct curl_slist *cl;
/* The maximum size needs to match MAX_NAME in cookie.h */
-#define MAX_COOKIE_LINE 4096
+#define MAX_COOKIE_LINE 8200
curlx_dyn_init(&cookies, MAX_COOKIE_LINE);
for(cl = config->cookies; cl; cl = cl->next) {
if(cl == config->cookies)
@@ -1767,7 +1858,7 @@ static CURLcode single_transfer(struct GlobalConfig *global,
if(result) {
warnf(global,
"skipped provided cookie, the cookie header "
- "would go over %u bytes\n", MAX_COOKIE_LINE);
+ "would go over %u bytes", MAX_COOKIE_LINE);
break;
}
}
@@ -1794,7 +1885,7 @@ static CURLcode single_transfer(struct GlobalConfig *global,
my_setopt(curl, CURLOPT_TIMEVALUE_LARGE, config->condtime);
my_setopt_str(curl, CURLOPT_CUSTOMREQUEST, config->customrequest);
customrequest_helper(config, config->httpreq, config->customrequest);
- my_setopt(curl, CURLOPT_STDERR, global->errors);
+ my_setopt(curl, CURLOPT_STDERR, tool_stderr);
/* three new ones in libcurl 7.3: */
my_setopt_str(curl, CURLOPT_INTERFACE, config->iface);
@@ -1802,7 +1893,7 @@ static CURLcode single_transfer(struct GlobalConfig *global,
progressbarinit(&per->progressbar, config);
if((global->progressmode == CURL_PROGRESS_BAR) &&
- !global->noprogress && !global->mute) {
+ !global->noprogress && !global->silent) {
/* we want the alternative style, then we have to implement it
ourselves! */
my_setopt(curl, CURLOPT_XFERINFOFUNCTION, tool_progress_cb);
@@ -1826,14 +1917,13 @@ static CURLcode single_transfer(struct GlobalConfig *global,
if(config->dns_ipv4_addr)
my_setopt_str(curl, CURLOPT_DNS_LOCAL_IP4, config->dns_ipv4_addr);
if(config->dns_ipv6_addr)
- my_setopt_str(curl, CURLOPT_DNS_LOCAL_IP6, config->dns_ipv6_addr);
+ my_setopt_str(curl, CURLOPT_DNS_LOCAL_IP6, config->dns_ipv6_addr);
/* new in libcurl 7.6.2: */
my_setopt_slist(curl, CURLOPT_TELNETOPTIONS, config->telnet_options);
/* new in libcurl 7.7: */
- my_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS,
- (long)(config->connecttimeout * 1000));
+ my_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, config->connecttimeout_ms);
if(config->doh_url)
my_setopt_str(curl, CURLOPT_DOH_URL, config->doh_url);
@@ -1908,8 +1998,7 @@ static CURLcode single_transfer(struct GlobalConfig *global,
/* new in curl 7.19.4 */
if(config->socks5_gssapi_nec)
- my_setopt_str(curl, CURLOPT_SOCKS5_GSSAPI_NEC,
- config->socks5_gssapi_nec);
+ my_setopt_str(curl, CURLOPT_SOCKS5_GSSAPI_NEC, 1L);
/* new in curl 7.55.0 */
if(config->socks5_auth)
@@ -1981,8 +2070,8 @@ static CURLcode single_transfer(struct GlobalConfig *global,
my_setopt_slist(curl, CURLOPT_MAIL_RCPT, config->mail_rcpt);
/* curl 7.69.x */
- my_setopt(curl, CURLOPT_MAIL_RCPT_ALLLOWFAILS,
- config->mail_rcpt_allowfails ? 1L : 0L);
+ my_setopt(curl, CURLOPT_MAIL_RCPT_ALLOWFAILS,
+ config->mail_rcpt_allowfails ? 1L : 0L);
/* curl 7.20.x */
if(config->ftp_pret)
@@ -2021,7 +2110,7 @@ static CURLcode single_transfer(struct GlobalConfig *global,
my_setopt_slist(curl, CURLOPT_CONNECT_TO, config->connect_to);
/* new in 7.21.4 */
- if(curlinfo->features & CURL_VERSION_TLSAUTH_SRP) {
+ if(feature_tls_srp) {
if(config->tls_username)
my_setopt_str(curl, CURLOPT_TLSAUTH_USERNAME,
config->tls_username);
@@ -2079,9 +2168,9 @@ static CURLcode single_transfer(struct GlobalConfig *global,
my_setopt_str(curl, CURLOPT_DEFAULT_PROTOCOL, config->proto_default);
/* new in 7.47.0 */
- if(config->expect100timeout > 0)
+ if(config->expect100timeout_ms > 0)
my_setopt_str(curl, CURLOPT_EXPECT_100_TIMEOUT_MS,
- (long)(config->expect100timeout*1000));
+ config->expect100timeout_ms);
/* new in 7.48.0 */
if(config->tftp_no_options && proto_tftp)
@@ -2096,6 +2185,11 @@ static CURLcode single_transfer(struct GlobalConfig *global,
if(config->haproxy_protocol)
my_setopt(curl, CURLOPT_HAPROXYPROTOCOL, 1L);
+ /* new in 8.2.0 */
+ if(config->haproxy_clientip)
+ my_setopt_str(curl, CURLOPT_HAPROXY_CLIENT_IP,
+ config->haproxy_clientip);
+
if(config->disallow_username_in_url)
my_setopt(curl, CURLOPT_DISALLOW_USERNAME_IN_URL, 1L);
@@ -2298,7 +2392,8 @@ static CURLcode parallel_transfers(struct GlobalConfig *global,
curl_easy_getinfo(easy, CURLINFO_PRIVATE, (void *)&ended);
curl_multi_remove_handle(multi, easy);
- if(ended->abort && tres == CURLE_ABORTED_BY_CALLBACK) {
+ if(ended->abort && (tres == CURLE_ABORTED_BY_CALLBACK) &&
+ ended->errorbuffer) {
msnprintf(ended->errorbuffer, CURL_ERROR_SIZE,
"Transfer aborted due to critical error "
"in another transfer");
@@ -2379,7 +2474,7 @@ static CURLcode serial_transfers(struct GlobalConfig *global,
if(result)
return result;
if(!added) {
- errorf(global, "no transfer performed\n");
+ errorf(global, "no transfer performed");
return CURLE_READ_ERROR;
}
for(per = transfers; per;) {
@@ -2396,7 +2491,6 @@ static CURLcode serial_transfers(struct GlobalConfig *global,
if(result)
break;
}
-
start = tvnow();
#ifdef CURLDEBUG
if(global->test_event_based)
@@ -2417,8 +2511,10 @@ static CURLcode serial_transfers(struct GlobalConfig *global,
else {
/* setup the next one just before we delete this */
result = create_transfer(global, share, &added);
- if(result)
+ if(result) {
+ returncode = result;
bailout = TRUE;
+ }
}
per = del_per_transfer(per);
@@ -2431,7 +2527,7 @@ static CURLcode serial_transfers(struct GlobalConfig *global,
milliseconds */
long milli = tvdiff(tvnow(), start);
if(milli < global->ms_per_transfer) {
- notef(global, "Transfer took %ld ms, waits %ldms as set by --rate\n",
+ notef(global, "Transfer took %ld ms, waits %ldms as set by --rate",
milli, global->ms_per_transfer - milli);
/* The transfer took less time than wanted. Wait a little. */
tool_go_sleep(global->ms_per_transfer - milli);
@@ -2460,7 +2556,7 @@ static CURLcode transfer_per_config(struct GlobalConfig *global,
/* Check we have a url */
if(!config->url_list || !config->url_list->url) {
- helpf(global->errors, "no URL specified!\n");
+ helpf(tool_stderr, "(%d) no URL specified", CURLE_FAILED_INIT);
return CURLE_FAILED_INIT;
}
@@ -2507,7 +2603,7 @@ static CURLcode transfer_per_config(struct GlobalConfig *global,
if(!config->cacert) {
curl_free(env);
curl_easy_cleanup(curltls);
- errorf(global, "out of memory\n");
+ errorf(global, "out of memory");
return CURLE_OUT_OF_MEMORY;
}
}
@@ -2518,28 +2614,29 @@ static CURLcode transfer_per_config(struct GlobalConfig *global,
if(!config->capath) {
curl_free(env);
curl_easy_cleanup(curltls);
- helpf(global->errors, "out of memory\n");
+ errorf(global, "out of memory");
return CURLE_OUT_OF_MEMORY;
}
+ curl_free(env);
capath_from_env = true;
}
- else {
- env = curlx_getenv("SSL_CERT_FILE");
- if(env) {
- config->cacert = strdup(env);
- if(!config->cacert) {
- curl_free(env);
- curl_easy_cleanup(curltls);
- errorf(global, "out of memory\n");
- return CURLE_OUT_OF_MEMORY;
- }
+ env = curlx_getenv("SSL_CERT_FILE");
+ if(env) {
+ config->cacert = strdup(env);
+ if(!config->cacert) {
+ curl_free(env);
+ if(capath_from_env)
+ free(config->capath);
+ curl_easy_cleanup(curltls);
+ errorf(global, "out of memory");
+ return CURLE_OUT_OF_MEMORY;
}
}
}
if(env)
curl_free(env);
-#ifdef WIN32
+#ifdef _WIN32
else {
result = FindWin32CACert(config, tls_backend_info->backend,
TEXT("curl-ca-bundle.crt"));
@@ -2622,9 +2719,10 @@ CURLcode operate(struct GlobalConfig *global, int argc, argv_item_t argv[])
CURLcode result = CURLE_OK;
char *first_arg = argc > 1 ? curlx_convert_tchar_to_UTF8(argv[1]) : NULL;
- /* Setup proper locale from environment */
#ifdef HAVE_SETLOCALE
+ /* Override locale for number parsing (only) */
setlocale(LC_ALL, "");
+ setlocale(LC_NUMERIC, "C");
#endif
/* Parse .curlrc if necessary */
@@ -2635,7 +2733,7 @@ CURLcode operate(struct GlobalConfig *global, int argc, argv_item_t argv[])
/* If we had no arguments then make sure a url was specified in .curlrc */
if((argc < 2) && (!global->first->url_list)) {
- helpf(global->errors, NULL);
+ helpf(tool_stderr, NULL);
result = CURLE_FAILED_INIT;
}
}
@@ -2683,41 +2781,47 @@ CURLcode operate(struct GlobalConfig *global, int argc, argv_item_t argv[])
/* Cleanup the libcurl source output */
easysrc_cleanup();
}
- return CURLE_OUT_OF_MEMORY;
+ result = CURLE_OUT_OF_MEMORY;
}
- curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
- curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
- curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_SSL_SESSION);
- curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_CONNECT);
- curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_PSL);
+ if(!result) {
+ curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
+ curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
+ curl_share_setopt(share, CURLSHOPT_SHARE,
+ CURL_LOCK_DATA_SSL_SESSION);
+ curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_CONNECT);
+ curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_PSL);
+ curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_HSTS);
- /* Get the required arguments for each operation */
- do {
- result = get_args(operation, count++);
+ /* Get the required arguments for each operation */
+ do {
+ result = get_args(operation, count++);
- operation = operation->next;
- } while(!result && operation);
+ operation = operation->next;
+ } while(!result && operation);
- /* Set the current operation pointer */
- global->current = global->first;
+ /* Set the current operation pointer */
+ global->current = global->first;
- /* now run! */
- result = run_all_transfers(global, share, result);
+ /* now run! */
+ result = run_all_transfers(global, share, result);
- curl_share_cleanup(share);
- if(global->libcurl) {
- /* Cleanup the libcurl source output */
- easysrc_cleanup();
+ curl_share_cleanup(share);
+ if(global->libcurl) {
+ /* Cleanup the libcurl source output */
+ easysrc_cleanup();
- /* Dump the libcurl code if previously enabled */
- dumpeasysrc(global);
+ /* Dump the libcurl code if previously enabled */
+ dumpeasysrc(global);
+ }
}
}
else
- errorf(global, "out of memory\n");
+ errorf(global, "out of memory");
}
}
+ varcleanup(global);
+
return result;
}
diff --git a/src/tool_operate.h b/src/tool_operate.h
index c714da1bc..4993b1c96 100644
--- a/src/tool_operate.h
+++ b/src/tool_operate.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -33,10 +33,12 @@ struct per_transfer {
struct per_transfer *next;
struct per_transfer *prev;
struct OperationConfig *config; /* for this transfer */
+ struct curl_certinfo *certinfo;
CURL *curl;
long retry_numretries;
long retry_sleep_default;
long retry_sleep;
+ struct timeval start; /* start of this transfer */
struct timeval retrystart;
char *this_url;
unsigned int urlnum; /* the index of the given URL */
@@ -48,7 +50,6 @@ struct per_transfer {
struct OutStruct outs;
struct OutStruct heads;
struct OutStruct etag_save;
- struct InStruct input;
struct HdrCbData hdrcbdata;
long num_headers;
bool was_last_header_empty;
@@ -66,12 +67,14 @@ struct per_transfer {
curl_off_t dlnow;
curl_off_t ultotal;
curl_off_t ulnow;
+ curl_off_t uploadfilesize; /* expected total amount */
+ curl_off_t uploadedsofar; /* amount delivered from the callback */
bool dltotal_added; /* if the total has been added from this */
bool ultotal_added;
/* NULL or malloced */
char *uploadfile;
- char *errorbuffer; /* alloced and assigned while this is used for a
+ char *errorbuffer; /* allocated and assigned while this is used for a
transfer */
};
diff --git a/src/tool_operhlp.c b/src/tool_operhlp.c
index eb58772fb..d1e8352d8 100644
--- a/src/tool_operhlp.c
+++ b/src/tool_operhlp.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -71,23 +71,51 @@ bool stdin_upload(const char *uploadfile)
!strcmp(uploadfile, ".")) ? TRUE : FALSE;
}
+/* Convert a CURLUcode into a CURLcode */
+CURLcode urlerr_cvt(CURLUcode ucode)
+{
+ if(ucode == CURLUE_OUT_OF_MEMORY)
+ return CURLE_OUT_OF_MEMORY;
+ else if(ucode == CURLUE_UNSUPPORTED_SCHEME)
+ return CURLE_UNSUPPORTED_PROTOCOL;
+ else if(ucode == CURLUE_LACKS_IDN)
+ return CURLE_NOT_BUILT_IN;
+ else if(ucode == CURLUE_BAD_HANDLE)
+ return CURLE_BAD_FUNCTION_ARGUMENT;
+ return CURLE_URL_MALFORMAT;
+}
+
/*
* Adds the file name to the URL if it doesn't already have one.
* url will be freed before return if the returned pointer is different
*/
CURLcode add_file_name_to_url(CURL *curl, char **inurlp, const char *filename)
{
- CURLcode result = CURLE_OUT_OF_MEMORY;
+ CURLcode result = CURLE_URL_MALFORMAT;
+ CURLUcode uerr;
CURLU *uh = curl_url();
char *path = NULL;
+ char *query = NULL;
if(uh) {
char *ptr;
- if(curl_url_set(uh, CURLUPART_URL, *inurlp,
- CURLU_GUESS_SCHEME|CURLU_NON_SUPPORT_SCHEME))
+ uerr = curl_url_set(uh, CURLUPART_URL, *inurlp,
+ CURLU_GUESS_SCHEME|CURLU_NON_SUPPORT_SCHEME);
+ if(uerr) {
+ result = urlerr_cvt(uerr);
goto fail;
- if(curl_url_get(uh, CURLUPART_PATH, &path, 0))
+ }
+ uerr = curl_url_get(uh, CURLUPART_PATH, &path, 0);
+ if(uerr) {
+ result = urlerr_cvt(uerr);
goto fail;
-
+ }
+ uerr = curl_url_get(uh, CURLUPART_QUERY, &query, 0);
+ if(!uerr && query) {
+ curl_free(query);
+ curl_free(path);
+ curl_url_cleanup(uh);
+ return CURLE_OK;
+ }
ptr = strrchr(path, '/');
if(!ptr || !*++ptr) {
/* The URL path has no file name part, add the local file name. In order
@@ -111,7 +139,6 @@ CURLcode add_file_name_to_url(CURL *curl, char **inurlp, const char *filename)
if(encfile) {
char *newpath;
char *newurl;
- CURLUcode uerr;
if(ptr)
/* there is a trailing slash on the path */
newpath = aprintf("%s%s", path, encfile);
@@ -125,10 +152,15 @@ CURLcode add_file_name_to_url(CURL *curl, char **inurlp, const char *filename)
goto fail;
uerr = curl_url_set(uh, CURLUPART_PATH, newpath, 0);
free(newpath);
- if(uerr)
+ if(uerr) {
+ result = urlerr_cvt(uerr);
goto fail;
- if(curl_url_get(uh, CURLUPART_URL, &newurl, CURLU_DEFAULT_SCHEME))
+ }
+ uerr = curl_url_get(uh, CURLUPART_URL, &newurl, CURLU_DEFAULT_SCHEME);
+ if(uerr) {
+ result = urlerr_cvt(uerr);
goto fail;
+ }
free(*inurlp);
*inurlp = newurl;
result = CURLE_OK;
@@ -138,7 +170,7 @@ CURLcode add_file_name_to_url(CURL *curl, char **inurlp, const char *filename)
/* nothing to do */
result = CURLE_OK;
}
- fail:
+fail:
curl_url_cleanup(uh);
curl_free(path);
return result;
@@ -153,63 +185,70 @@ CURLcode get_url_file_name(char **filename, const char *url)
const char *pc, *pc2;
CURLU *uh = curl_url();
char *path = NULL;
+ CURLUcode uerr;
if(!uh)
return CURLE_OUT_OF_MEMORY;
*filename = NULL;
- if(!curl_url_set(uh, CURLUPART_URL, url, CURLU_GUESS_SCHEME) &&
- !curl_url_get(uh, CURLUPART_PATH, &path, 0)) {
- curl_url_cleanup(uh);
+ uerr = curl_url_set(uh, CURLUPART_URL, url, CURLU_GUESS_SCHEME);
+ if(!uerr) {
+ uerr = curl_url_get(uh, CURLUPART_PATH, &path, 0);
+ if(!uerr) {
+ curl_url_cleanup(uh);
- pc = strrchr(path, '/');
- pc2 = strrchr(pc ? pc + 1 : path, '\\');
- if(pc2)
- pc = pc2;
+ pc = strrchr(path, '/');
+ pc2 = strrchr(pc ? pc + 1 : path, '\\');
+ if(pc2)
+ pc = pc2;
- if(pc)
- /* duplicate the string beyond the slash */
- pc++;
- else
- /* no slash => empty string */
- pc = "";
-
- *filename = strdup(pc);
- curl_free(path);
- if(!*filename)
- return CURLE_OUT_OF_MEMORY;
-
-#if defined(MSDOS) || defined(WIN32)
- {
- char *sanitized;
- SANITIZEcode sc = sanitize_file_name(&sanitized, *filename, 0);
- Curl_safefree(*filename);
- if(sc)
- return CURLE_URL_MALFORMAT;
- *filename = sanitized;
- }
-#endif /* MSDOS || WIN32 */
+ if(pc)
+ /* duplicate the string beyond the slash */
+ pc++;
+ else
+ /* no slash => empty string */
+ pc = "";
+
+ *filename = strdup(pc);
+ curl_free(path);
+ if(!*filename)
+ return CURLE_OUT_OF_MEMORY;
+
+#if defined(_WIN32) || defined(MSDOS)
+ {
+ char *sanitized;
+ SANITIZEcode sc = sanitize_file_name(&sanitized, *filename, 0);
+ Curl_safefree(*filename);
+ if(sc) {
+ if(sc == SANITIZE_ERR_OUT_OF_MEMORY)
+ return CURLE_OUT_OF_MEMORY;
+ return CURLE_URL_MALFORMAT;
+ }
+ *filename = sanitized;
+ }
+#endif /* _WIN32 || MSDOS */
- /* in case we built debug enabled, we allow an environment variable
- * named CURL_TESTDIR to prefix the given file name to put it into a
- * specific directory
- */
+ /* in case we built debug enabled, we allow an environment variable
+ * named CURL_TESTDIR to prefix the given file name to put it into a
+ * specific directory
+ */
#ifdef DEBUGBUILD
- {
- char *tdir = curlx_getenv("CURL_TESTDIR");
- if(tdir) {
- char *alt = aprintf("%s/%s", tdir, *filename);
- Curl_safefree(*filename);
- *filename = alt;
- curl_free(tdir);
- if(!*filename)
- return CURLE_OUT_OF_MEMORY;
+ {
+ char *tdir = curlx_getenv("CURL_TESTDIR");
+ if(tdir) {
+ char *alt = aprintf("%s/%s", tdir, *filename);
+ Curl_safefree(*filename);
+ *filename = alt;
+ curl_free(tdir);
+ if(!*filename)
+ return CURLE_OUT_OF_MEMORY;
+ }
}
- }
#endif
- return CURLE_OK;
+ return CURLE_OK;
+ }
}
curl_url_cleanup(uh);
- return CURLE_URL_MALFORMAT;
+ return urlerr_cvt(uerr);
}
diff --git a/src/tool_operhlp.h b/src/tool_operhlp.h
index 8018d1a67..1d56fa040 100644
--- a/src/tool_operhlp.h
+++ b/src/tool_operhlp.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -37,4 +37,6 @@ CURLcode add_file_name_to_url(CURL *curl, char **inurlp, const char *filename);
CURLcode get_url_file_name(char **filename, const char *url);
+CURLcode urlerr_cvt(CURLUcode ucode);
+
#endif /* HEADER_CURL_TOOL_OPERHLP_H */
diff --git a/src/tool_paramhlp.c b/src/tool_paramhlp.c
index 05afb8d3a..d70e80db4 100644
--- a/src/tool_paramhlp.c
+++ b/src/tool_paramhlp.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -138,7 +138,7 @@ static ParameterError getnum(long *val, const char *str, int base)
num = strtol(str, &endptr, base);
if(errno == ERANGE)
return PARAM_NUMBER_TOO_LARGE;
- if((endptr != str) && (endptr == str + strlen(str))) {
+ if((endptr != str) && (*endptr == '\0')) {
*val = num;
return PARAM_OK; /* Ok */
}
@@ -240,8 +240,9 @@ static ParameterError str2double(double *val, const char *str, double max)
}
/*
- * Parse the string and write the double in the given address. Return PARAM_OK
- * on success, otherwise a parameter error enum. ONLY ACCEPTS POSITIVE NUMBERS!
+ * Parse the string as seconds with decimals, and write the number of
+ * milliseconds that corresponds in the given address. Return PARAM_OK on
+ * success, otherwise a parameter error enum. ONLY ACCEPTS POSITIVE NUMBERS!
*
* The 'max' argument is the maximum value allowed, as the numbers are often
* multiplied when later used.
@@ -251,16 +252,16 @@ static ParameterError str2double(double *val, const char *str, double max)
* data.
*/
-ParameterError str2udouble(double *valp, const char *str, double max)
+ParameterError secs2ms(long *valp, const char *str)
{
double value;
- ParameterError result = str2double(&value, str, max);
+ ParameterError result = str2double(&value, str, (double)LONG_MAX/1000);
if(result != PARAM_OK)
return result;
if(value < 0)
return PARAM_NEGATIVE_NUMERIC;
- *valp = value;
+ *valp = (long)(value*1000);
return PARAM_OK;
}
@@ -368,7 +369,7 @@ ParameterError proto2num(struct OperationConfig *config,
/* Process token modifiers */
while(!ISALNUM(*token)) { /* may be NULL if token is all modifiers */
- switch (*token++) {
+ switch(*token++) {
case '=':
action = set;
break;
@@ -417,7 +418,7 @@ ParameterError proto2num(struct OperationConfig *config,
if no protocols are allowed */
if(action == set)
protoset[0] = NULL;
- warnf(config->global, "unrecognized protocol '%s'\n", token);
+ warnf(config->global, "unrecognized protocol '%s'", token);
}
}
}
@@ -432,6 +433,7 @@ ParameterError proto2num(struct OperationConfig *config,
result = curlx_dyn_addf(&obuf, "%s,", protoset[proto]);
free((char *) protoset);
curlx_dyn_setlen(&obuf, curlx_dyn_len(&obuf) - 1);
+ free(*ostr);
*ostr = curlx_dyn_ptr(&obuf);
return *ostr ? PARAM_OK : PARAM_NO_MEM;
@@ -472,7 +474,7 @@ ParameterError str2offset(curl_off_t *val, const char *str)
#if(SIZEOF_CURL_OFF_T > SIZEOF_LONG)
{
- CURLofft offt = curlx_strtoofft(str, &endptr, 0, val);
+ CURLofft offt = curlx_strtoofft(str, &endptr, 10, val);
if(CURL_OFFT_FLOW == offt)
return PARAM_NUMBER_TOO_LARGE;
else if(CURL_OFFT_INVAL == offt)
@@ -564,7 +566,7 @@ int ftpfilemethod(struct OperationConfig *config, const char *str)
if(curl_strequal("multicwd", str))
return CURLFTPMETHOD_MULTICWD;
- warnf(config->global, "unrecognized ftp file method '%s', using default\n",
+ warnf(config->global, "unrecognized ftp file method '%s', using default",
str);
return CURLFTPMETHOD_MULTICWD;
@@ -577,7 +579,7 @@ int ftpcccmethod(struct OperationConfig *config, const char *str)
if(curl_strequal("active", str))
return CURLFTPSSL_CCC_ACTIVE;
- warnf(config->global, "unrecognized ftp CCC method '%s', using default\n",
+ warnf(config->global, "unrecognized ftp CCC method '%s', using default",
str);
return CURLFTPSSL_CCC_PASSIVE;
@@ -592,7 +594,7 @@ long delegation(struct OperationConfig *config, const char *str)
if(curl_strequal("always", str))
return CURLGSSAPI_DELEGATION_FLAG;
- warnf(config->global, "unrecognized delegation method '%s', using none\n",
+ warnf(config->global, "unrecognized delegation method '%s', using none",
str);
return CURLGSSAPI_DELEGATION_NONE;
@@ -663,7 +665,7 @@ CURLcode get_args(struct OperationConfig *config, const size_t i)
if(!config->useragent) {
config->useragent = my_useragent();
if(!config->useragent) {
- errorf(config->global, "out of memory\n");
+ errorf(config->global, "out of memory");
result = CURLE_OUT_OF_MEMORY;
}
}
diff --git a/src/tool_paramhlp.h b/src/tool_paramhlp.h
index 7d68583e6..edb878195 100644
--- a/src/tool_paramhlp.h
+++ b/src/tool_paramhlp.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -36,7 +36,7 @@ ParameterError str2num(long *val, const char *str);
ParameterError str2unum(long *val, const char *str);
ParameterError oct2nummax(long *val, const char *str, long max);
ParameterError str2unummax(long *val, const char *str, long max);
-ParameterError str2udouble(double *val, const char *str, double max);
+ParameterError secs2ms(long *val, const char *str);
ParameterError proto2num(struct OperationConfig *config,
const char * const *val, char **obuf,
diff --git a/src/tool_parsecfg.c b/src/tool_parsecfg.c
index a166757f8..da4870066 100644
--- a/src/tool_parsecfg.c
+++ b/src/tool_parsecfg.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -43,10 +43,10 @@
static const char *unslashquote(const char *line, char *param);
-#define MAX_CONFIG_LINE_LENGTH (100*1024)
+#define MAX_CONFIG_LINE_LENGTH (10*1024*1024)
static bool my_get_line(FILE *fp, struct curlx_dynbuf *, bool *error);
-#ifdef WIN32
+#ifdef _WIN32
static FILE *execpath(const char *filename, char **pathp)
{
static char filebuffer[512];
@@ -98,7 +98,7 @@ int parseconfig(const char *filename, struct GlobalConfig *global)
}
filename = pathalloc = curlrc;
}
-#ifdef WIN32 /* Windows */
+#ifdef _WIN32 /* Windows */
else {
char *fullp;
/* check for .curlrc then _curlrc in the dir of the executable */
@@ -168,7 +168,7 @@ int parseconfig(const char *filename, struct GlobalConfig *global)
*line++ = '\0'; /* null-terminate, we have a local copy of the data */
#ifdef DEBUG_CONFIG
- fprintf(stderr, "GOT: %s\n", option);
+ fprintf(tool_stderr, "GOT: %s\n", option);
#endif
/* pass spaces and separator(s) */
@@ -210,8 +210,9 @@ int parseconfig(const char *filename, struct GlobalConfig *global)
break;
default:
warnf(operation->global, "%s:%d: warning: '%s' uses unquoted "
- "whitespace in the line that may cause side-effects!\n",
- filename, lineno, option);
+ "whitespace", filename, lineno, option);
+ warnf(operation->global, "This may cause side-effects. "
+ "Consider using double quotes?");
}
}
if(!*param)
@@ -221,9 +222,9 @@ int parseconfig(const char *filename, struct GlobalConfig *global)
}
#ifdef DEBUG_CONFIG
- fprintf(stderr, "PARAM: \"%s\"\n",(param ? param : "(null)"));
+ fprintf(tool_stderr, "PARAM: \"%s\"\n",(param ? param : "(null)"));
#endif
- res = getparameter(option, param, &usedarg, global, operation);
+ res = getparameter(option, param, NULL, &usedarg, global, operation);
operation = global->last;
if(!res && param && *param && !usedarg)
@@ -263,7 +264,7 @@ int parseconfig(const char *filename, struct GlobalConfig *global)
res != PARAM_VERSION_INFO_REQUESTED &&
res != PARAM_ENGINES_REQUESTED) {
const char *reason = param2text(res);
- warnf(operation->global, "%s:%d: warning: '%s' %s\n",
+ warnf(operation->global, "%s:%d: warning: '%s' %s",
filename, lineno, option, reason);
}
}
diff --git a/src/tool_parsecfg.h b/src/tool_parsecfg.h
index 90af61961..75f9127ee 100644
--- a/src/tool_parsecfg.h
+++ b/src/tool_parsecfg.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/src/tool_progress.c b/src/tool_progress.c
index 266177b6e..db8679deb 100644
--- a/src/tool_progress.c
+++ b/src/tool_progress.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -53,8 +53,6 @@ static char *max5data(curl_off_t bytes, char *max5)
CURL_FORMAT_CURL_OFF_T "M", bytes/ONE_MEGABYTE,
(bytes%ONE_MEGABYTE) / (ONE_MEGABYTE/CURL_OFF_T_C(10)) );
-#if (SIZEOF_CURL_OFF_T > 4)
-
else if(bytes < CURL_OFF_T_C(10000) * ONE_MEGABYTE)
/* 'XXXXM' is good until we're at 10000MB or above */
msnprintf(max5, 6, "%4" CURL_FORMAT_CURL_OFF_T "M", bytes/ONE_MEGABYTE);
@@ -77,16 +75,8 @@ static char *max5data(curl_off_t bytes, char *max5)
/* up to 10000PB, display without decimal: XXXXP */
msnprintf(max5, 6, "%4" CURL_FORMAT_CURL_OFF_T "P", bytes/ONE_PETABYTE);
- /* 16384 petabytes (16 exabytes) is the maximum a 64 bit unsigned number
- can hold, but our data type is signed so 8192PB will be the maximum. */
-
-#else
-
- else
- msnprintf(max5, 6, "%4" CURL_FORMAT_CURL_OFF_T "M", bytes/ONE_MEGABYTE);
-
-#endif
-
+ /* 16384 petabytes (16 exabytes) is the maximum a 64 bit unsigned number can
+ hold, but our data type is signed so 8192PB will be the maximum. */
return max5;
}
@@ -173,7 +163,7 @@ bool progress_meter(struct GlobalConfig *global,
struct timeval now;
long diff;
- if(global->noprogress)
+ if(global->noprogress || global->silent)
return FALSE;
now = tvnow();
@@ -183,7 +173,7 @@ bool progress_meter(struct GlobalConfig *global,
header = TRUE;
fputs("DL% UL% Dled Uled Xfers Live "
"Total Current Left Speed\n",
- global->errors);
+ tool_stderr);
}
if(final || (diff > 500)) {
char time_left[10];
@@ -285,7 +275,7 @@ bool progress_meter(struct GlobalConfig *global,
}
time2str(time_spent, spent);
- fprintf(global->errors,
+ fprintf(tool_stderr,
"\r"
"%-3s " /* percent downloaded */
"%-3s " /* percent uploaded */
diff --git a/src/tool_progress.h b/src/tool_progress.h
index 5f68474ff..4c869a0ac 100644
--- a/src/tool_progress.h
+++ b/src/tool_progress.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/src/tool_sdecls.h b/src/tool_sdecls.h
index 70e44d4ed..b93c32462 100644
--- a/src/tool_sdecls.h
+++ b/src/tool_sdecls.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -57,6 +57,9 @@
* 'init' member holds original file size or offset at which truncation is
* taking place. Always zero unless appending to a non-empty regular file.
*
+ * [Windows]
+ * 'utf8seq' member holds an incomplete UTF-8 sequence destined for the console
+ * until it can be completed (1-4 bytes) + NUL.
*/
struct OutStruct {
@@ -68,25 +71,11 @@ struct OutStruct {
FILE *stream;
curl_off_t bytes;
curl_off_t init;
+#ifdef _WIN32
+ unsigned char utf8seq[5];
+#endif
};
-
-/*
- * InStruct variables keep track of information relative to curl's
- * input reading, which may take place from stdin or from some file.
- *
- * 'fd' member is either 'stdin' file descriptor number STDIN_FILENO
- * or a file descriptor as returned from an 'open' call for some file.
- *
- * 'config' member is a pointer to associated 'OperationConfig' struct.
- */
-
-struct InStruct {
- int fd;
- struct OperationConfig *config;
-};
-
-
/*
* A linked list of these 'getout' nodes contain URL's to fetch,
* as well as information relative to where URL contents should
diff --git a/src/tool_setopt.c b/src/tool_setopt.c
index 3db2fe3c6..de3b78fab 100644
--- a/src/tool_setopt.c
+++ b/src/tool_setopt.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -91,6 +91,7 @@ const struct NameValue setopt_nv_CURL_HTTP_VERSION[] = {
NV(CURL_HTTP_VERSION_2_0),
NV(CURL_HTTP_VERSION_2TLS),
NV(CURL_HTTP_VERSION_3),
+ NV(CURL_HTTP_VERSION_3ONLY),
NVEND,
};
@@ -293,51 +294,9 @@ CURLcode tool_setopt_enum(CURL *curl, struct GlobalConfig *config,
#ifdef DEBUGBUILD
if(ret)
- warnf(config, "option %s returned error (%d)\n", name, (int)ret);
+ warnf(config, "option %s returned error (%d)", name, (int)ret);
#endif
- nomem:
- return ret;
-}
-
-/* setopt wrapper for flags */
-CURLcode tool_setopt_flags(CURL *curl, struct GlobalConfig *config,
- const char *name, CURLoption tag,
- const struct NameValue *nvlist, long lval)
-{
- CURLcode ret = CURLE_OK;
- bool skip = FALSE;
-
- ret = curl_easy_setopt(curl, tag, lval);
- if(!lval)
- skip = TRUE;
-
- if(config->libcurl && !skip && !ret) {
- /* we only use this for real if --libcurl was used */
- char preamble[80]; /* should accommodate any symbol name */
- long rest = lval; /* bits not handled yet */
- const struct NameValue *nv = NULL;
- msnprintf(preamble, sizeof(preamble),
- "curl_easy_setopt(hnd, %s, ", name);
- for(nv = nvlist; nv->name; nv++) {
- if((nv->value & ~ rest) == 0) {
- /* all value flags contained in rest */
- rest &= ~ nv->value; /* remove bits handled here */
- CODE3("%s(long)%s%s",
- preamble, nv->name, rest ? " |" : ");");
- if(!rest)
- break; /* handled them all */
- /* replace with all spaces for continuation line */
- msnprintf(preamble, sizeof(preamble), "%*s", strlen(preamble), "");
- }
- }
- /* If any bits have no definition, output an explicit value.
- * This could happen if new bits are defined and used
- * but the NameValue list is not updated. */
- if(rest)
- CODE2("%s%ldL);", preamble, rest);
- }
-
- nomem:
+nomem:
return ret;
}
@@ -370,7 +329,8 @@ CURLcode tool_setopt_bitmask(CURL *curl, struct GlobalConfig *config,
if(!rest)
break; /* handled them all */
/* replace with all spaces for continuation line */
- msnprintf(preamble, sizeof(preamble), "%*s", strlen(preamble), "");
+ msnprintf(preamble, sizeof(preamble), "%*s", (int)strlen(preamble),
+ "");
}
}
/* If any bits have no definition, output an explicit value.
@@ -380,7 +340,7 @@ CURLcode tool_setopt_bitmask(CURL *curl, struct GlobalConfig *config,
CODE2("%s%luUL);", preamble, rest);
}
- nomem:
+nomem:
return ret;
}
@@ -406,7 +366,7 @@ static CURLcode libcurl_generate_slist(struct curl_slist *slist, int *slistno)
*slistno, *slistno, escaped);
}
- nomem:
+nomem:
Curl_safefree(escaped);
return ret;
}
@@ -589,7 +549,7 @@ CURLcode tool_setopt_slist(CURL *curl, struct GlobalConfig *config,
CODE2("curl_easy_setopt(hnd, %s, slist%d);", name, i);
}
- nomem:
+nomem:
return ret;
}
@@ -703,14 +663,11 @@ CURLcode tool_setopt(CURL *curl, bool str, struct GlobalConfig *global,
}
}
- nomem:
+nomem:
Curl_safefree(escaped);
return ret;
}
#else /* CURL_DISABLE_LIBCURL_OPTION */
-#include "tool_cfgable.h"
-#include "tool_setopt.h"
-
#endif /* CURL_DISABLE_LIBCURL_OPTION */
diff --git a/src/tool_setopt.h b/src/tool_setopt.h
index bc5afe9bc..cd59a74cd 100644
--- a/src/tool_setopt.h
+++ b/src/tool_setopt.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -106,9 +106,6 @@ CURLcode tool_setopt(CURL *curl, bool str, struct GlobalConfig *global,
#define my_setopt_enum(x,y,z) \
SETOPT_CHECK(tool_setopt_enum(x, global, #y, y, setopt_nv_ ## y, z), y)
-#define my_setopt_flags(x,y,z) \
- SETOPT_CHECK(tool_setopt_flags(x, global, #y, y, setopt_nv_ ## y, z), y)
-
#define my_setopt_bitmask(x,y,z) \
SETOPT_CHECK(tool_setopt_bitmask(x, global, #y, y, setopt_nv_ ## y, z), y)
@@ -135,9 +132,6 @@ CURLcode tool_setopt(CURL *curl, bool str, struct GlobalConfig *global,
#define my_setopt_enum(x,y,z) \
SETOPT_CHECK(curl_easy_setopt(x, y, z), y)
-#define my_setopt_flags(x,y,z) \
- SETOPT_CHECK(curl_easy_setopt(x, y, z), y)
-
#define my_setopt_bitmask(x,y,z) \
SETOPT_CHECK(curl_easy_setopt(x, y, z), y)
diff --git a/src/tool_setup.h b/src/tool_setup.h
index 16fa00e7d..c69859ea6 100644
--- a/src/tool_setup.h
+++ b/src/tool_setup.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -37,6 +37,8 @@
#include "curl_setup.h" /* from the lib directory */
+extern FILE *tool_stderr;
+
/*
* curl tool certainly uses libcurl's external interface.
*/
@@ -47,7 +49,7 @@
* Platform specific stuff.
*/
-#if defined(macintosh) && defined(__MRC__)
+#ifdef macintosh
# define main(x,y) curl_main(x,y)
#endif
@@ -64,4 +66,12 @@
# include "tool_strdup.h"
#endif
+#if defined(_WIN32)
+/* set in win32_init() */
+extern LARGE_INTEGER tool_freq;
+extern bool tool_isVistaOrGreater;
+/* set in init_terminal() */
+extern bool tool_term_has_bold;
+#endif
+
#endif /* HEADER_CURL_TOOL_SETUP_H */
diff --git a/src/tool_sleep.c b/src/tool_sleep.c
index c52425f9a..c24f73729 100644
--- a/src/tool_sleep.c
+++ b/src/tool_sleep.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -47,7 +47,7 @@ void tool_go_sleep(long ms)
{
#if defined(MSDOS)
delay(ms);
-#elif defined(WIN32)
+#elif defined(_WIN32)
Sleep(ms);
#elif defined(HAVE_POLL_FINE)
(void)poll((void *)0, 0, (int)ms);
diff --git a/src/tool_sleep.h b/src/tool_sleep.h
index d84b467a4..de1d7e256 100644
--- a/src/tool_sleep.h
+++ b/src/tool_sleep.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/src/tool_stderr.c b/src/tool_stderr.c
new file mode 100644
index 000000000..4ab5516ae
--- /dev/null
+++ b/src/tool_stderr.c
@@ -0,0 +1,71 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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_stderr.h"
+#include "tool_msgs.h"
+
+#include "memdebug.h" /* keep this as LAST include */
+
+FILE *tool_stderr;
+
+void tool_init_stderr(void)
+{
+ /* !checksrc! disable STDERR 1 */
+ tool_stderr = stderr;
+}
+
+void tool_set_stderr_file(struct GlobalConfig *global, char *filename)
+{
+ FILE *fp;
+
+ if(!filename)
+ return;
+
+ if(!strcmp(filename, "-")) {
+ tool_stderr = stdout;
+ return;
+ }
+
+ /* precheck that filename is accessible to lessen the chance that the
+ subsequent freopen will fail. */
+ fp = fopen(filename, FOPEN_WRITETEXT);
+ if(!fp) {
+ warnf(global, "Warning: Failed to open %s", filename);
+ return;
+ }
+ fclose(fp);
+
+ /* freopen the actual stderr (stdio.h stderr) instead of tool_stderr since
+ the latter may be set to stdout. */
+ /* !checksrc! disable STDERR 1 */
+ fp = freopen(filename, FOPEN_WRITETEXT, stderr);
+ if(!fp) {
+ /* stderr may have been closed by freopen. there is nothing to be done. */
+ DEBUGASSERT(0);
+ return;
+ }
+ /* !checksrc! disable STDERR 1 */
+ tool_stderr = stderr;
+}
diff --git a/src/tool_panykey.h b/src/tool_stderr.h
index c5cc32260..c887275fc 100644
--- a/src/tool_panykey.h
+++ b/src/tool_stderr.h
@@ -1,5 +1,5 @@
-#ifndef HEADER_CURL_TOOL_PANYKEY_H
-#define HEADER_CURL_TOOL_PANYKEY_H
+#ifndef HEADER_CURL_TOOL_STDERR_H
+#define HEADER_CURL_TOOL_STDERR_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,11 +24,9 @@
*
***************************************************************************/
#include "tool_setup.h"
+#include "tool_cfgable.h"
-#if defined(NETWARE)
-void tool_pressanykey(void);
-#else
-#define tool_pressanykey() Curl_nop_stmt
-#endif
+void tool_init_stderr(void);
+void tool_set_stderr_file(struct GlobalConfig *global, char *filename);
-#endif /* HEADER_CURL_TOOL_PANYKEY_H */
+#endif /* HEADER_CURL_TOOL_STDERR_H */
diff --git a/src/tool_strdup.c b/src/tool_strdup.c
index 402f1c982..a5725d6d4 100644
--- a/src/tool_strdup.c
+++ b/src/tool_strdup.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/src/tool_strdup.h b/src/tool_strdup.h
index c31c04652..9b2161896 100644
--- a/src/tool_strdup.h
+++ b/src/tool_strdup.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/src/tool_urlglob.c b/src/tool_urlglob.c
index fae8b131f..e45c7d10b 100644
--- a/src/tool_urlglob.c
+++ b/src/tool_urlglob.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -64,21 +64,31 @@ static CURLcode glob_fixed(struct URLGlob *glob, char *fixed, size_t len)
*
* Multiplies and checks for overflow.
*/
-static int multiply(unsigned long *amount, long with)
+static int multiply(curl_off_t *amount, curl_off_t with)
{
- unsigned long sum = *amount * with;
- if(!with) {
- *amount = 0;
- return 0;
+ curl_off_t sum;
+ DEBUGASSERT(*amount >= 0);
+ DEBUGASSERT(with >= 0);
+ if((with <= 0) || (*amount <= 0)) {
+ sum = 0;
+ }
+ else {
+#if defined(__GNUC__) && \
+ ((__GNUC__ > 5) || ((__GNUC__ == 5) && (__GNUC_MINOR__ >= 1)))
+ if(__builtin_mul_overflow(*amount, with, &sum))
+ return 1;
+#else
+ sum = *amount * with;
+ if(sum/with != *amount)
+ return 1; /* didn't fit, bail out */
+#endif
}
- if(sum/with != *amount)
- return 1; /* didn't fit, bail out */
*amount = sum;
return 0;
}
static CURLcode glob_set(struct URLGlob *glob, char **patternp,
- size_t *posp, unsigned long *amount,
+ size_t *posp, curl_off_t *amount,
int globindex)
{
/* processes a set expression with the point behind the opening '{'
@@ -100,7 +110,7 @@ static CURLcode glob_set(struct URLGlob *glob, char **patternp,
pat->globindex = globindex;
while(!done) {
- switch (*pattern) {
+ switch(*pattern) {
case '\0': /* URL ended while set was still open */
return GLOBERROR("unmatched brace", opos, CURLE_URL_MALFORMAT);
@@ -123,7 +133,8 @@ static CURLcode glob_set(struct URLGlob *glob, char **patternp,
*buf = '\0';
if(pat->content.Set.elements) {
char **new_arr = realloc(pat->content.Set.elements,
- (pat->content.Set.size + 1) * sizeof(char *));
+ (size_t)(pat->content.Set.size + 1) *
+ sizeof(char *));
if(!new_arr)
return GLOBERROR("out of memory", 0, CURLE_OUT_OF_MEMORY);
@@ -172,7 +183,7 @@ static CURLcode glob_set(struct URLGlob *glob, char **patternp,
}
static CURLcode glob_range(struct URLGlob *glob, char **patternp,
- size_t *posp, unsigned long *amount,
+ size_t *posp, curl_off_t *amount,
int globindex)
{
/* processes a range expression with the point behind the opening '['
@@ -295,7 +306,7 @@ static CURLcode glob_range(struct URLGlob *glob, char **patternp,
}
}
- fail:
+fail:
*posp += (pattern - *patternp);
if(!endp || !step_n ||
@@ -350,7 +361,7 @@ static bool peek_ipv6(const char *str, size_t *skip)
memcpy(hostname, str, hlen);
hostname[hlen] = 0;
- /* ask to "guess scheme" as then it works without a https:// prefix */
+ /* ask to "guess scheme" as then it works without an https:// prefix */
rc = curl_url_set(u, CURLUPART_URL, hostname, CURLU_GUESS_SCHEME);
curl_url_cleanup(u);
@@ -360,7 +371,7 @@ static bool peek_ipv6(const char *str, size_t *skip)
}
static CURLcode glob_parse(struct URLGlob *glob, char *pattern,
- size_t pos, unsigned long *amount)
+ size_t pos, curl_off_t *amount)
{
/* processes a literal string component of a URL
special characters '{' and '[' branch to set/range processing functions
@@ -411,7 +422,7 @@ static CURLcode glob_parse(struct URLGlob *glob, char *pattern,
res = glob_fixed(glob, glob->glob_buffer, sublen);
}
else {
- switch (*pattern) {
+ switch(*pattern) {
case '\0': /* done */
break;
@@ -437,7 +448,7 @@ static CURLcode glob_parse(struct URLGlob *glob, char *pattern,
return res;
}
-CURLcode glob_url(struct URLGlob **glob, char *url, unsigned long *urlnum,
+CURLcode glob_url(struct URLGlob **glob, char *url, curl_off_t *urlnum,
FILE *error)
{
/*
@@ -445,7 +456,7 @@ CURLcode glob_url(struct URLGlob **glob, char *url, unsigned long *urlnum,
* as the specified URL!
*/
struct URLGlob *glob_expand;
- unsigned long amount = 0;
+ curl_off_t amount = 0;
char *glob_buffer;
CURLcode res;
@@ -496,7 +507,7 @@ CURLcode glob_url(struct URLGlob **glob, char *url, unsigned long *urlnum,
void glob_cleanup(struct URLGlob *glob)
{
size_t i;
- int elem;
+ curl_off_t elem;
if(!glob)
return;
@@ -590,7 +601,7 @@ CURLcode glob_next_url(char **globbed, struct URLGlob *glob)
}
break;
case UPTNumRange:
- msnprintf(buf, buflen, "%0*lu",
+ msnprintf(buf, buflen, "%0*" CURL_FORMAT_CURL_OFF_T,
pat->content.NumRange.padlength,
pat->content.NumRange.ptr_n);
len = strlen(buf);
@@ -660,14 +671,14 @@ CURLcode glob_match_url(char **result, char *filename, struct URLGlob *glob)
appendlen = 1;
break;
case UPTNumRange:
- msnprintf(numbuf, sizeof(numbuf), "%0*lu",
+ msnprintf(numbuf, sizeof(numbuf), "%0*" CURL_FORMAT_CURL_OFF_T,
pat->content.NumRange.padlength,
pat->content.NumRange.ptr_n);
appendthis = numbuf;
appendlen = strlen(numbuf);
break;
default:
- fprintf(stderr, "internal error: invalid pattern type (%d)\n",
+ fprintf(tool_stderr, "internal error: invalid pattern type (%d)\n",
(int)pat->type);
curlx_dyn_free(&dyn);
return CURLE_FAILED_INIT;
@@ -691,7 +702,7 @@ CURLcode glob_match_url(char **result, char *filename, struct URLGlob *glob)
if(curlx_dyn_addn(&dyn, "", 0))
return CURLE_OUT_OF_MEMORY;
-#if defined(MSDOS) || defined(WIN32)
+#if defined(_WIN32) || defined(MSDOS)
{
char *sanitized;
SANITIZEcode sc = sanitize_file_name(&sanitized, curlx_dyn_ptr(&dyn),
@@ -706,5 +717,5 @@ CURLcode glob_match_url(char **result, char *filename, struct URLGlob *glob)
#else
*result = curlx_dyn_ptr(&dyn);
return CURLE_OK;
-#endif /* MSDOS || WIN32 */
+#endif /* _WIN32 || MSDOS */
}
diff --git a/src/tool_urlglob.h b/src/tool_urlglob.h
index 80c1537f9..c38f9d92e 100644
--- a/src/tool_urlglob.h
+++ b/src/tool_urlglob.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -38,7 +38,7 @@ struct URLPattern {
union {
struct {
char **elements;
- int size;
+ curl_off_t size;
int ptr_s;
} Set;
struct {
@@ -48,11 +48,11 @@ struct URLPattern {
int step;
} CharRange;
struct {
- unsigned long min_n;
- unsigned long max_n;
+ curl_off_t min_n;
+ curl_off_t max_n;
int padlength;
- unsigned long ptr_n;
- unsigned long step;
+ curl_off_t ptr_n;
+ curl_off_t step;
} NumRange;
} content;
};
@@ -70,7 +70,7 @@ struct URLGlob {
size_t pos; /* column position of error or 0 */
};
-CURLcode glob_url(struct URLGlob**, char *, unsigned long *, FILE *);
+CURLcode glob_url(struct URLGlob**, char *, curl_off_t *, FILE *);
CURLcode glob_next_url(char **, struct URLGlob *);
CURLcode glob_match_url(char **, char *, struct URLGlob *);
void glob_cleanup(struct URLGlob *glob);
diff --git a/src/tool_util.c b/src/tool_util.c
index fb4829f84..812a689d0 100644
--- a/src/tool_util.c
+++ b/src/tool_util.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -31,11 +31,7 @@
#include "memdebug.h" /* keep this as LAST include */
-#if defined(WIN32) && !defined(MSDOS)
-
-/* set in win32_init() */
-extern LARGE_INTEGER tool_freq;
-extern bool tool_isVistaOrGreater;
+#if defined(_WIN32)
/* In case of bug fix this function has a counterpart in timeval.c */
struct timeval tvnow(void)
diff --git a/src/tool_util.h b/src/tool_util.h
index 72b355e68..d68867265 100644
--- a/src/tool_util.h
+++ b/src/tool_util.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/src/tool_version.h b/src/tool_version.h
index 0bbb9a509..2eca403c4 100644
--- a/src/tool_version.h
+++ b/src/tool_version.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -27,7 +27,7 @@
#define CURL_NAME "curl"
#define CURL_COPYRIGHT LIBCURL_COPYRIGHT
-#define CURL_VERSION "7.86.0"
+#define CURL_VERSION "8.5.0"
#define CURL_VERSION_MAJOR LIBCURL_VERSION_MAJOR
#define CURL_VERSION_MINOR LIBCURL_VERSION_MINOR
#define CURL_VERSION_PATCH LIBCURL_VERSION_PATCH
diff --git a/src/tool_vms.c b/src/tool_vms.c
index 7d45d5f10..940257420 100644
--- a/src/tool_vms.c
+++ b/src/tool_vms.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/src/tool_vms.h b/src/tool_vms.h
index 949206dc5..cc2d31d05 100644
--- a/src/tool_vms.h
+++ b/src/tool_vms.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/src/tool_writeout.c b/src/tool_writeout.c
index 2789ee20b..981065c9e 100644
--- a/src/tool_writeout.c
+++ b/src/tool_writeout.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -28,6 +28,7 @@
#include "tool_cfgable.h"
#include "tool_writeout.h"
#include "tool_writeout_json.h"
+#include "dynbuf.h"
#include "memdebug.h" /* keep this as LAST include */
@@ -72,7 +73,9 @@ static const struct httpmap http_version[] = {
Variable names should be in alphabetical order.
*/
static const struct writeoutvar variables[] = {
+ {"certs", VAR_CERT, CURLINFO_NONE, writeString},
{"content_type", VAR_CONTENT_TYPE, CURLINFO_CONTENT_TYPE, writeString},
+ {"conn_id", VAR_CONN_ID, CURLINFO_CONN_ID, writeOffset},
{"errormsg", VAR_ERRORMSG, CURLINFO_NONE, writeString},
{"exitcode", VAR_EXITCODE, CURLINFO_NONE, writeLong},
{"filename_effective", VAR_EFFECTIVE_FILENAME, CURLINFO_NONE, writeString},
@@ -85,6 +88,7 @@ static const struct writeoutvar variables[] = {
{"local_ip", VAR_LOCAL_IP, CURLINFO_LOCAL_IP, writeString},
{"local_port", VAR_LOCAL_PORT, CURLINFO_LOCAL_PORT, writeLong},
{"method", VAR_EFFECTIVE_METHOD, CURLINFO_EFFECTIVE_METHOD, writeString},
+ {"num_certs", VAR_NUM_CERTS, CURLINFO_NONE, writeLong},
{"num_connects", VAR_NUM_CONNECTS, CURLINFO_NUM_CONNECTS, writeLong},
{"num_headers", VAR_NUM_HEADERS, CURLINFO_NONE, writeLong},
{"num_redirects", VAR_REDIRECT_COUNT, CURLINFO_REDIRECT_COUNT, writeLong},
@@ -120,8 +124,29 @@ static const struct writeoutvar variables[] = {
writeTime},
{"time_total", VAR_TOTAL_TIME, CURLINFO_TOTAL_TIME_T, writeTime},
{"url", VAR_INPUT_URL, CURLINFO_NONE, writeString},
+ {"url.scheme", VAR_INPUT_URLSCHEME, CURLINFO_NONE, writeString},
+ {"url.user", VAR_INPUT_URLUSER, CURLINFO_NONE, writeString},
+ {"url.password", VAR_INPUT_URLPASSWORD, CURLINFO_NONE, writeString},
+ {"url.options", VAR_INPUT_URLOPTIONS, CURLINFO_NONE, writeString},
+ {"url.host", VAR_INPUT_URLHOST, CURLINFO_NONE, writeString},
+ {"url.port", VAR_INPUT_URLPORT, CURLINFO_NONE, writeString},
+ {"url.path", VAR_INPUT_URLPATH, CURLINFO_NONE, writeString},
+ {"url.query", VAR_INPUT_URLQUERY, CURLINFO_NONE, writeString},
+ {"url.fragment", VAR_INPUT_URLFRAGMENT, CURLINFO_NONE, writeString},
+ {"url.zoneid", VAR_INPUT_URLZONEID, CURLINFO_NONE, writeString},
+ {"urle.scheme", VAR_INPUT_URLESCHEME, CURLINFO_NONE, writeString},
+ {"urle.user", VAR_INPUT_URLEUSER, CURLINFO_NONE, writeString},
+ {"urle.password", VAR_INPUT_URLEPASSWORD, CURLINFO_NONE, writeString},
+ {"urle.options", VAR_INPUT_URLEOPTIONS, CURLINFO_NONE, writeString},
+ {"urle.host", VAR_INPUT_URLEHOST, CURLINFO_NONE, writeString},
+ {"urle.port", VAR_INPUT_URLEPORT, CURLINFO_NONE, writeString},
+ {"urle.path", VAR_INPUT_URLEPATH, CURLINFO_NONE, writeString},
+ {"urle.query", VAR_INPUT_URLEQUERY, CURLINFO_NONE, writeString},
+ {"urle.fragment", VAR_INPUT_URLEFRAGMENT, CURLINFO_NONE, writeString},
+ {"urle.zoneid", VAR_INPUT_URLEZONEID, CURLINFO_NONE, writeString},
{"url_effective", VAR_EFFECTIVE_URL, CURLINFO_EFFECTIVE_URL, writeString},
{"urlnum", VAR_URLNUM, CURLINFO_NONE, writeLong},
+ {"xfer_id", VAR_EASY_ID, CURLINFO_XFER_ID, writeOffset},
{NULL, VAR_NONE, CURLINFO_NONE, NULL}
};
@@ -162,12 +187,96 @@ static int writeTime(FILE *stream, const struct writeoutvar *wovar,
return 1; /* return 1 if anything was written */
}
+static int urlpart(struct per_transfer *per, writeoutid vid,
+ const char **contentp)
+{
+ CURLU *uh = curl_url();
+ int rc = 0;
+ if(uh) {
+ CURLUPart cpart = CURLUPART_HOST;
+ char *part = NULL;
+ const char *url = NULL;
+
+ if(vid >= VAR_INPUT_URLEHOST) {
+ if(curl_easy_getinfo(per->curl, CURLINFO_EFFECTIVE_URL, &url))
+ rc = 5;
+ }
+ else
+ url = per->this_url;
+
+ if(!rc) {
+ switch(vid) {
+ case VAR_INPUT_URLSCHEME:
+ case VAR_INPUT_URLESCHEME:
+ cpart = CURLUPART_SCHEME;
+ break;
+ case VAR_INPUT_URLUSER:
+ case VAR_INPUT_URLEUSER:
+ cpart = CURLUPART_USER;
+ break;
+ case VAR_INPUT_URLPASSWORD:
+ case VAR_INPUT_URLEPASSWORD:
+ cpart = CURLUPART_PASSWORD;
+ break;
+ case VAR_INPUT_URLOPTIONS:
+ case VAR_INPUT_URLEOPTIONS:
+ cpart = CURLUPART_OPTIONS;
+ break;
+ case VAR_INPUT_URLHOST:
+ case VAR_INPUT_URLEHOST:
+ cpart = CURLUPART_HOST;
+ break;
+ case VAR_INPUT_URLPORT:
+ case VAR_INPUT_URLEPORT:
+ cpart = CURLUPART_PORT;
+ break;
+ case VAR_INPUT_URLPATH:
+ case VAR_INPUT_URLEPATH:
+ cpart = CURLUPART_PATH;
+ break;
+ case VAR_INPUT_URLQUERY:
+ case VAR_INPUT_URLEQUERY:
+ cpart = CURLUPART_QUERY;
+ break;
+ case VAR_INPUT_URLFRAGMENT:
+ case VAR_INPUT_URLEFRAGMENT:
+ cpart = CURLUPART_FRAGMENT;
+ break;
+ case VAR_INPUT_URLZONEID:
+ case VAR_INPUT_URLEZONEID:
+ cpart = CURLUPART_ZONEID;
+ break;
+ default:
+ /* not implemented */
+ rc = 4;
+ break;
+ }
+ }
+ if(!rc && curl_url_set(uh, CURLUPART_URL, url,
+ CURLU_GUESS_SCHEME|CURLU_NON_SUPPORT_SCHEME))
+ rc = 2;
+
+ if(!rc && curl_url_get(uh, cpart, &part, CURLU_DEFAULT_PORT))
+ rc = 3;
+
+ if(!rc && part)
+ *contentp = part;
+ curl_url_cleanup(uh);
+ }
+ else
+ return 1;
+ return rc;
+}
+
static int writeString(FILE *stream, const struct writeoutvar *wovar,
struct per_transfer *per, CURLcode per_result,
bool use_json)
{
bool valid = false;
const char *strinfo = NULL;
+ const char *freestr = NULL;
+ struct dynbuf buf;
+ curlx_dyn_init(&buf, 256*1024);
DEBUGASSERT(wovar->writefunc == writeString);
@@ -193,6 +302,51 @@ static int writeString(FILE *stream, const struct writeoutvar *wovar,
}
else {
switch(wovar->id) {
+ case VAR_CERT:
+ if(per->certinfo) {
+ int i;
+ bool error = FALSE;
+ for(i = 0; (i < per->certinfo->num_of_certs) && !error; i++) {
+ struct curl_slist *slist;
+
+ for(slist = per->certinfo->certinfo[i]; slist; slist = slist->next) {
+ size_t len;
+ if(curl_strnequal(slist->data, "cert:", 5)) {
+ if(curlx_dyn_add(&buf, &slist->data[5])) {
+ error = TRUE;
+ break;
+ }
+ }
+ else {
+ if(curlx_dyn_add(&buf, slist->data)) {
+ error = TRUE;
+ break;
+ }
+ }
+ len = curlx_dyn_len(&buf);
+ if(len) {
+ char *ptr = curlx_dyn_ptr(&buf);
+ if(ptr[len -1] != '\n') {
+ /* add a newline to make things look better */
+ if(curlx_dyn_addn(&buf, "\n", 1)) {
+ error = TRUE;
+ break;
+ }
+ }
+ }
+ }
+ }
+ if(!error) {
+ strinfo = curlx_dyn_ptr(&buf);
+ if(!strinfo)
+ /* maybe not a TLS protocol */
+ strinfo = "";
+ valid = true;
+ }
+ }
+ else
+ strinfo = ""; /* no cert info */
+ break;
case VAR_ERRORMSG:
if(per_result) {
strinfo = (per->errorbuffer && per->errorbuffer[0]) ?
@@ -212,6 +366,33 @@ static int writeString(FILE *stream, const struct writeoutvar *wovar,
valid = true;
}
break;
+ case VAR_INPUT_URLSCHEME:
+ case VAR_INPUT_URLUSER:
+ case VAR_INPUT_URLPASSWORD:
+ case VAR_INPUT_URLOPTIONS:
+ case VAR_INPUT_URLHOST:
+ case VAR_INPUT_URLPORT:
+ case VAR_INPUT_URLPATH:
+ case VAR_INPUT_URLQUERY:
+ case VAR_INPUT_URLFRAGMENT:
+ case VAR_INPUT_URLZONEID:
+ case VAR_INPUT_URLESCHEME:
+ case VAR_INPUT_URLEUSER:
+ case VAR_INPUT_URLEPASSWORD:
+ case VAR_INPUT_URLEOPTIONS:
+ case VAR_INPUT_URLEHOST:
+ case VAR_INPUT_URLEPORT:
+ case VAR_INPUT_URLEPATH:
+ case VAR_INPUT_URLEQUERY:
+ case VAR_INPUT_URLEFRAGMENT:
+ case VAR_INPUT_URLEZONEID:
+ if(per->this_url) {
+ if(!urlpart(per, wovar->id, &strinfo)) {
+ freestr = strinfo;
+ valid = true;
+ }
+ }
+ break;
default:
DEBUGASSERT(0);
break;
@@ -231,7 +412,9 @@ static int writeString(FILE *stream, const struct writeoutvar *wovar,
if(use_json)
fprintf(stream, "\"%s\":null", wovar->name);
}
+ curl_free((char *)freestr);
+ curlx_dyn_free(&buf);
return 1; /* return 1 if anything was written */
}
@@ -250,6 +433,10 @@ static int writeLong(FILE *stream, const struct writeoutvar *wovar,
}
else {
switch(wovar->id) {
+ case VAR_NUM_CERTS:
+ longinfo = per->certinfo ? per->certinfo->num_of_certs : 0;
+ valid = true;
+ break;
case VAR_NUM_HEADERS:
longinfo = per->num_headers;
valid = true;
@@ -321,12 +508,22 @@ static int writeOffset(FILE *stream, const struct writeoutvar *wovar,
return 1; /* return 1 if anything was written */
}
-void ourWriteOut(const char *writeinfo, struct per_transfer *per,
+void ourWriteOut(struct OperationConfig *config, struct per_transfer *per,
CURLcode per_result)
{
FILE *stream = stdout;
+ const char *writeinfo = config->writeout;
const char *ptr = writeinfo;
bool done = FALSE;
+ struct curl_certinfo *certinfo;
+ CURLcode res = curl_easy_getinfo(per->curl, CURLINFO_CERTINFO, &certinfo);
+ bool fclose_stream = FALSE;
+
+ if(!writeinfo)
+ return;
+
+ if(!res && certinfo)
+ per->certinfo = certinfo;
while(ptr && *ptr && !done) {
if('%' == *ptr && ptr[1]) {
@@ -360,10 +557,16 @@ void ourWriteOut(const char *writeinfo, struct per_transfer *per,
done = TRUE;
break;
case VAR_STDOUT:
+ if(fclose_stream)
+ fclose(stream);
+ fclose_stream = FALSE;
stream = stdout;
break;
case VAR_STDERR:
- stream = stderr;
+ if(fclose_stream)
+ fclose(stream);
+ fclose_stream = FALSE;
+ stream = tool_stderr;
break;
case VAR_JSON:
ourWriteOutJSON(stream, variables, per, per_result);
@@ -380,7 +583,8 @@ void ourWriteOut(const char *writeinfo, struct per_transfer *per,
}
}
if(!match) {
- fprintf(stderr, "curl: unknown --write-out variable: '%.*s'\n",
+ fprintf(tool_stderr,
+ "curl: unknown --write-out variable: '%.*s'\n",
(int)vlen, ptr);
}
ptr = end + 1; /* pass the end */
@@ -404,6 +608,36 @@ void ourWriteOut(const char *writeinfo, struct per_transfer *per,
else
fputs("%header{", stream);
}
+ else if(!strncmp("output{", &ptr[1], 7)) {
+ bool append = FALSE;
+ ptr += 8;
+ if((ptr[0] == '>') && (ptr[1] == '>')) {
+ append = TRUE;
+ ptr += 2;
+ }
+ end = strchr(ptr, '}');
+ if(end) {
+ char fname[512]; /* holds the longest file name */
+ size_t flen = end - ptr;
+ if(flen < sizeof(fname)) {
+ FILE *stream2;
+ memcpy(fname, ptr, flen);
+ fname[flen] = 0;
+ stream2 = fopen(fname, append? FOPEN_APPENDTEXT :
+ FOPEN_WRITETEXT);
+ if(stream2) {
+ /* only change if the open worked */
+ if(fclose_stream)
+ fclose(stream);
+ stream = stream2;
+ fclose_stream = TRUE;
+ }
+ }
+ ptr = end + 1;
+ }
+ else
+ fputs("%output{", stream);
+ }
else {
/* illegal syntax, then just output the characters that are used */
fputc('%', stream);
@@ -436,4 +670,6 @@ void ourWriteOut(const char *writeinfo, struct per_transfer *per,
ptr++;
}
}
+ if(fclose_stream)
+ fclose(stream);
}
diff --git a/src/tool_writeout.h b/src/tool_writeout.h
index c7cdb9771..4e690a65c 100644
--- a/src/tool_writeout.h
+++ b/src/tool_writeout.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -29,8 +29,11 @@
typedef enum {
VAR_NONE, /* must be the first */
VAR_APPCONNECT_TIME,
+ VAR_CERT,
VAR_CONNECT_TIME,
VAR_CONTENT_TYPE,
+ VAR_CONN_ID,
+ VAR_EASY_ID,
VAR_EFFECTIVE_FILENAME,
VAR_EFFECTIVE_METHOD,
VAR_EFFECTIVE_URL,
@@ -43,10 +46,32 @@ typedef enum {
VAR_HTTP_CODE_PROXY,
VAR_HTTP_VERSION,
VAR_INPUT_URL,
+ VAR_INPUT_URLSCHEME,
+ VAR_INPUT_URLUSER,
+ VAR_INPUT_URLPASSWORD,
+ VAR_INPUT_URLOPTIONS,
+ VAR_INPUT_URLHOST,
+ VAR_INPUT_URLPORT,
+ VAR_INPUT_URLPATH,
+ VAR_INPUT_URLQUERY,
+ VAR_INPUT_URLFRAGMENT,
+ VAR_INPUT_URLZONEID,
+ /* the same ones again for url *effective* */
+ VAR_INPUT_URLESCHEME,
+ VAR_INPUT_URLEUSER,
+ VAR_INPUT_URLEPASSWORD,
+ VAR_INPUT_URLEOPTIONS,
+ VAR_INPUT_URLEHOST,
+ VAR_INPUT_URLEPORT,
+ VAR_INPUT_URLEPATH,
+ VAR_INPUT_URLEQUERY,
+ VAR_INPUT_URLEFRAGMENT,
+ VAR_INPUT_URLEZONEID,
VAR_JSON,
VAR_LOCAL_IP,
VAR_LOCAL_PORT,
VAR_NAMELOOKUP_TIME,
+ VAR_NUM_CERTS,
VAR_NUM_CONNECTS,
VAR_NUM_HEADERS,
VAR_ONERROR,
@@ -82,7 +107,7 @@ struct writeoutvar {
bool use_json);
};
-void ourWriteOut(const char *writeinfo, struct per_transfer *per,
+void ourWriteOut(struct OperationConfig *config, struct per_transfer *per,
CURLcode per_result);
#endif /* HEADER_CURL_TOOL_WRITEOUT_H */
diff --git a/src/tool_writeout_json.c b/src/tool_writeout_json.c
index a36d60c4f..4ed6b93fb 100644
--- a/src/tool_writeout_json.c
+++ b/src/tool_writeout_json.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -31,50 +31,73 @@
#include "tool_writeout_json.h"
#include "tool_writeout.h"
-void jsonWriteString(FILE *stream, const char *in, bool lowercase)
+#define MAX_JSON_STRING 100000
+
+/* provide the given string in dynbuf as a quoted json string, but without the
+ outer quotes. The buffer is not inited by this function.
+
+ Return 0 on success, non-zero on error.
+*/
+int jsonquoted(const char *in, size_t len,
+ struct curlx_dynbuf *out, bool lowercase)
{
- const char *i = in;
- const char *in_end = in + strlen(in);
+ const unsigned char *i = (unsigned char *)in;
+ const unsigned char *in_end = &i[len];
+ CURLcode result = CURLE_OK;
- fputc('\"', stream);
- for(; i < in_end; i++) {
+ for(; (i < in_end) && !result; i++) {
switch(*i) {
case '\\':
- fputs("\\\\", stream);
+ result = curlx_dyn_addn(out, "\\\\", 2);
break;
case '\"':
- fputs("\\\"", stream);
+ result = curlx_dyn_addn(out, "\\\"", 2);
break;
case '\b':
- fputs("\\b", stream);
+ result = curlx_dyn_addn(out, "\\b", 2);
break;
case '\f':
- fputs("\\f", stream);
+ result = curlx_dyn_addn(out, "\\f", 2);
break;
case '\n':
- fputs("\\n", stream);
+ result = curlx_dyn_addn(out, "\\n", 2);
break;
case '\r':
- fputs("\\r", stream);
+ result = curlx_dyn_addn(out, "\\r", 2);
break;
case '\t':
- fputs("\\t", stream);
+ result = curlx_dyn_addn(out, "\\t", 2);
break;
default:
- if (*i < 32) {
- fprintf(stream, "u%04x", *i);
- }
+ if(*i < 32)
+ result = curlx_dyn_addf(out, "\\u%04x", *i);
else {
- char out = *i;
- if(lowercase && (out >= 'A' && out <= 'Z'))
+ char o = *i;
+ if(lowercase && (o >= 'A' && o <= 'Z'))
/* do not use tolower() since that's locale specific */
- out |= ('a' - 'A');
- fputc(out, stream);
+ o |= ('a' - 'A');
+ result = curlx_dyn_addn(out, &o, 1);
}
break;
}
}
- fputc('\"', stream);
+ if(result)
+ return (int)result;
+ return 0;
+}
+
+void jsonWriteString(FILE *stream, const char *in, bool lowercase)
+{
+ struct curlx_dynbuf out;
+ curlx_dyn_init(&out, MAX_JSON_STRING);
+
+ if(!jsonquoted(in, strlen(in), &out, lowercase)) {
+ fputc('\"', stream);
+ if(curlx_dyn_len(&out))
+ fputs(curlx_dyn_ptr(&out), stream);
+ fputc('\"', stream);
+ }
+ curlx_dyn_free(&out);
}
void ourWriteOutJSON(FILE *stream, const struct writeoutvar mappings[],
@@ -110,11 +133,6 @@ void headerJSON(FILE *stream, struct per_transfer *per)
fputc('{', stream);
while((header = curl_easy_nextheader(per->curl, CURLH_HEADER, -1,
prev))) {
- if(prev)
- fputs(",\n", stream);
- jsonWriteString(stream, header->name, TRUE);
- fputc(':', stream);
- prev = header;
if(header->amount > 1) {
if(!header->index) {
/* act on the 0-index entry and pull the others in, then output in a
@@ -122,6 +140,11 @@ void headerJSON(FILE *stream, struct per_transfer *per)
size_t a = header->amount;
size_t i = 0;
char *name = header->name;
+ if(prev)
+ fputs(",\n", stream);
+ jsonWriteString(stream, header->name, TRUE);
+ fputc(':', stream);
+ prev = header;
fputc('[', stream);
do {
jsonWriteString(stream, header->value, FALSE);
@@ -132,13 +155,18 @@ void headerJSON(FILE *stream, struct per_transfer *per)
-1, &header))
break;
} while(1);
+ fputc(']', stream);
}
- fputc(']', stream);
}
else {
+ if(prev)
+ fputs(",\n", stream);
+ jsonWriteString(stream, header->name, TRUE);
+ fputc(':', stream);
fputc('[', stream);
jsonWriteString(stream, header->value, FALSE);
fputc(']', stream);
+ prev = header;
}
}
fputs("\n}", stream);
diff --git a/src/tool_writeout_json.h b/src/tool_writeout_json.h
index d8466051c..49a28194f 100644
--- a/src/tool_writeout_json.h
+++ b/src/tool_writeout_json.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -26,6 +26,9 @@
#include "tool_setup.h"
#include "tool_writeout.h"
+int jsonquoted(const char *in, size_t len,
+ struct curlx_dynbuf *out, bool lowercase);
+
void ourWriteOutJSON(FILE *stream, const struct writeoutvar mappings[],
struct per_transfer *per, CURLcode per_result);
void headerJSON(FILE *stream, struct per_transfer *per);
diff --git a/src/tool_xattr.c b/src/tool_xattr.c
index bd0574996..9472194fa 100644
--- a/src/tool_xattr.c
+++ b/src/tool_xattr.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -75,7 +75,7 @@ char *stripcredentials(const char *url)
return nurl;
}
- error:
+error:
curl_url_cleanup(u);
return NULL;
}
@@ -87,11 +87,12 @@ static int xattr(int fd,
int err = 0;
if(value) {
#ifdef DEBUGBUILD
+ (void)fd;
if(getenv("CURL_FAKE_XATTR")) {
printf("%s => %s\n", attr, value);
}
return 0;
-#endif
+#else
#ifdef HAVE_FSETXATTR_6
err = fsetxattr(fd, attr, value, strlen(value), 0, 0);
#elif defined(HAVE_FSETXATTR_5)
@@ -105,6 +106,7 @@ static int xattr(int fd,
err = (rc < 0 ? -1 : 0);
}
#endif
+#endif
}
return err;
}
diff --git a/src/tool_xattr.h b/src/tool_xattr.h
index e85d4cded..2ffffd275 100644
--- a/src/tool_xattr.h
+++ b/src/tool_xattr.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/src/var.c b/src/var.c
new file mode 100644
index 000000000..388d45592
--- /dev/null
+++ b/src/var.c
@@ -0,0 +1,464 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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"
+
+#define ENABLE_CURLX_PRINTF
+/* use our own printf() functions */
+#include "curlx.h"
+
+#include "tool_cfgable.h"
+#include "tool_getparam.h"
+#include "tool_helpers.h"
+#include "tool_findfile.h"
+#include "tool_msgs.h"
+#include "tool_parsecfg.h"
+#include "dynbuf.h"
+#include "curl_base64.h"
+#include "tool_paramhlp.h"
+#include "tool_writeout_json.h"
+#include "var.h"
+
+#include "memdebug.h" /* keep this as LAST include */
+
+#define MAX_EXPAND_CONTENT 10000000
+
+static char *Memdup(const char *data, size_t len)
+{
+ char *p = malloc(len + 1);
+ if(!p)
+ return NULL;
+ if(len)
+ memcpy(p, data, len);
+ p[len] = 0;
+ return p;
+}
+
+/* free everything */
+void varcleanup(struct GlobalConfig *global)
+{
+ struct var *list = global->variables;
+ while(list) {
+ struct var *t = list;
+ list = list->next;
+ free((char *)t->content);
+ free((char *)t->name);
+ free(t);
+ }
+}
+
+static const struct var *varcontent(struct GlobalConfig *global,
+ const char *name, size_t nlen)
+{
+ struct var *list = global->variables;
+ while(list) {
+ if((strlen(list->name) == nlen) &&
+ !strncmp(name, list->name, nlen)) {
+ return list;
+ }
+ list = list->next;
+ }
+ return NULL;
+}
+
+#define ENDOFFUNC(x) (((x) == '}') || ((x) == ':'))
+#define FUNCMATCH(ptr,name,len) \
+ (!strncmp(ptr, name, len) && ENDOFFUNC(ptr[len]))
+
+#define FUNC_TRIM "trim"
+#define FUNC_TRIM_LEN (sizeof(FUNC_TRIM) - 1)
+#define FUNC_JSON "json"
+#define FUNC_JSON_LEN (sizeof(FUNC_JSON) - 1)
+#define FUNC_URL "url"
+#define FUNC_URL_LEN (sizeof(FUNC_URL) - 1)
+#define FUNC_B64 "b64"
+#define FUNC_B64_LEN (sizeof(FUNC_B64) - 1)
+
+static ParameterError varfunc(struct GlobalConfig *global,
+ char *c, /* content */
+ size_t clen, /* content length */
+ char *f, /* functions */
+ size_t flen, /* function string length */
+ struct curlx_dynbuf *out)
+{
+ bool alloc = FALSE;
+ ParameterError err = PARAM_OK;
+ const char *finput = f;
+
+ /* The functions are independent and runs left to right */
+ while(*f && !err) {
+ if(*f == '}')
+ /* end of functions */
+ break;
+ /* On entry, this is known to be a colon already. In subsequent laps, it
+ is also known to be a colon since that is part of the FUNCMATCH()
+ checks */
+ f++;
+ if(FUNCMATCH(f, FUNC_TRIM, FUNC_TRIM_LEN)) {
+ size_t len = clen;
+ f += FUNC_TRIM_LEN;
+ if(clen) {
+ /* skip leading white space, including CRLF */
+ while(*c && ISSPACE(*c)) {
+ c++;
+ len--;
+ }
+ while(len && ISSPACE(c[len-1]))
+ len--;
+ }
+ /* put it in the output */
+ curlx_dyn_reset(out);
+ if(curlx_dyn_addn(out, c, len)) {
+ err = PARAM_NO_MEM;
+ break;
+ }
+ }
+ else if(FUNCMATCH(f, FUNC_JSON, FUNC_JSON_LEN)) {
+ f += FUNC_JSON_LEN;
+ curlx_dyn_reset(out);
+ if(clen) {
+ if(jsonquoted(c, clen, out, FALSE)) {
+ err = PARAM_NO_MEM;
+ break;
+ }
+ }
+ }
+ else if(FUNCMATCH(f, FUNC_URL, FUNC_URL_LEN)) {
+ f += FUNC_URL_LEN;
+ curlx_dyn_reset(out);
+ if(clen) {
+ char *enc = curl_easy_escape(NULL, c, (int)clen);
+ if(!enc) {
+ err = PARAM_NO_MEM;
+ break;
+ }
+
+ /* put it in the output */
+ if(curlx_dyn_add(out, enc))
+ err = PARAM_NO_MEM;
+ curl_free(enc);
+ if(err)
+ break;
+ }
+ }
+ else if(FUNCMATCH(f, FUNC_B64, FUNC_B64_LEN)) {
+ f += FUNC_B64_LEN;
+ curlx_dyn_reset(out);
+ if(clen) {
+ char *enc;
+ size_t elen;
+ CURLcode result = curlx_base64_encode(c, clen, &enc, &elen);
+ if(result) {
+ err = PARAM_NO_MEM;
+ break;
+ }
+
+ /* put it in the output */
+ if(curlx_dyn_addn(out, enc, elen))
+ err = PARAM_NO_MEM;
+ curl_free(enc);
+ if(err)
+ break;
+ }
+ }
+ else {
+ /* unsupported function */
+ errorf(global, "unknown variable function in '%.*s'",
+ (int)flen, finput);
+ err = PARAM_EXPAND_ERROR;
+ break;
+ }
+ if(alloc)
+ free(c);
+
+ clen = curlx_dyn_len(out);
+ c = Memdup(curlx_dyn_ptr(out), clen);
+ if(!c) {
+ err = PARAM_NO_MEM;
+ break;
+ }
+ alloc = TRUE;
+ }
+ if(alloc)
+ free(c);
+ if(err)
+ curlx_dyn_free(out);
+ return err;
+}
+
+ParameterError varexpand(struct GlobalConfig *global,
+ const char *line, struct curlx_dynbuf *out,
+ bool *replaced)
+{
+ CURLcode result;
+ char *envp;
+ bool added = FALSE;
+ const char *input = line;
+ *replaced = FALSE;
+ curlx_dyn_init(out, MAX_EXPAND_CONTENT);
+ do {
+ envp = strstr(line, "{{");
+ if((envp > line) && envp[-1] == '\\') {
+ /* preceding backslash, we want this verbatim */
+
+ /* insert the text up to this point, minus the backslash */
+ result = curlx_dyn_addn(out, line, envp - line - 1);
+ if(result)
+ return PARAM_NO_MEM;
+
+ /* output '{{' then continue from here */
+ result = curlx_dyn_addn(out, "{{", 2);
+ if(result)
+ return PARAM_NO_MEM;
+ line = &envp[2];
+ }
+ else if(envp) {
+ char name[128];
+ size_t nlen;
+ size_t i;
+ char *funcp;
+ char *clp = strstr(envp, "}}");
+ size_t prefix;
+
+ if(!clp) {
+ /* uneven braces */
+ warnf(global, "missing close '}}' in '%s'", input);
+ break;
+ }
+
+ prefix = 2;
+ envp += 2; /* move over the {{ */
+
+ /* if there is a function, it ends the name with a colon */
+ funcp = memchr(envp, ':', clp - envp);
+ if(funcp)
+ nlen = funcp - envp;
+ else
+ nlen = clp - envp;
+ if(!nlen || (nlen >= sizeof(name))) {
+ warnf(global, "bad variable name length '%s'", input);
+ /* insert the text as-is since this is not an env variable */
+ result = curlx_dyn_addn(out, line, clp - line + prefix);
+ if(result)
+ return PARAM_NO_MEM;
+ }
+ else {
+ /* insert the text up to this point */
+ result = curlx_dyn_addn(out, line, envp - prefix - line);
+ if(result)
+ return PARAM_NO_MEM;
+
+ /* copy the name to separate buffer */
+ memcpy(name, envp, nlen);
+ name[nlen] = 0;
+
+ /* verify that the name looks sensible */
+ for(i = 0; (i < nlen) &&
+ (ISALNUM(name[i]) || (name[i] == '_')); i++);
+ if(i != nlen) {
+ warnf(global, "bad variable name: %s", name);
+ /* insert the text as-is since this is not an env variable */
+ result = curlx_dyn_addn(out, envp - prefix,
+ clp - envp + prefix + 2);
+ if(result)
+ return PARAM_NO_MEM;
+ }
+ else {
+ char *value;
+ size_t vlen = 0;
+ struct curlx_dynbuf buf;
+ const struct var *v = varcontent(global, name, nlen);
+ if(v) {
+ value = (char *)v->content;
+ vlen = v->clen;
+ }
+ else
+ value = NULL;
+
+ curlx_dyn_init(&buf, MAX_EXPAND_CONTENT);
+ if(funcp) {
+ /* apply the list of functions on the value */
+ size_t flen = clp - funcp;
+ ParameterError err = varfunc(global, value, vlen, funcp, flen,
+ &buf);
+ if(err)
+ return err;
+ value = curlx_dyn_ptr(&buf);
+ vlen = curlx_dyn_len(&buf);
+ }
+
+ if(value && vlen > 0) {
+ /* A variable might contain null bytes. Such bytes cannot be shown
+ using normal means, this is an error. */
+ char *nb = memchr(value, '\0', vlen);
+ if(nb) {
+ errorf(global, "variable contains null byte");
+ return PARAM_EXPAND_ERROR;
+ }
+ }
+ /* insert the value */
+ result = curlx_dyn_addn(out, value, vlen);
+ curlx_dyn_free(&buf);
+ if(result)
+ return PARAM_NO_MEM;
+
+ added = true;
+ }
+ }
+ line = &clp[2];
+ }
+
+ } while(envp);
+ if(added && *line) {
+ /* add the "suffix" as well */
+ result = curlx_dyn_add(out, line);
+ if(result)
+ return PARAM_NO_MEM;
+ }
+ *replaced = added;
+ if(!added)
+ curlx_dyn_free(out);
+ return PARAM_OK;
+}
+
+/*
+ * Created in a way that is not revealing how variables is actually stored so
+ * that we can improve this if we want better performance when managing many
+ * at a later point.
+ */
+static ParameterError addvariable(struct GlobalConfig *global,
+ const char *name,
+ size_t nlen,
+ const char *content,
+ size_t clen,
+ bool contalloc)
+{
+ struct var *p;
+ const struct var *check = varcontent(global, name, nlen);
+ if(check)
+ notef(global, "Overwriting variable '%s'", check->name);
+
+ p = calloc(1, sizeof(struct var));
+ if(!p)
+ return PARAM_NO_MEM;
+
+ p->name = Memdup(name, nlen);
+ if(!p->name)
+ goto err;
+
+ p->content = contalloc ? content: Memdup(content, clen);
+ if(!p->content)
+ goto err;
+ p->clen = clen;
+
+ p->next = global->variables;
+ global->variables = p;
+ return PARAM_OK;
+err:
+ free((char *)p->content);
+ free((char *)p->name);
+ free(p);
+ return PARAM_NO_MEM;
+}
+
+ParameterError setvariable(struct GlobalConfig *global,
+ const char *input)
+{
+ const char *name;
+ size_t nlen;
+ char *content = NULL;
+ size_t clen = 0;
+ bool contalloc = FALSE;
+ const char *line = input;
+ ParameterError err = PARAM_OK;
+ bool import = FALSE;
+ char *ge = NULL;
+
+ if(*input == '%') {
+ import = TRUE;
+ line++;
+ }
+ name = line;
+ while(*line && (ISALNUM(*line) || (*line == '_')))
+ line++;
+ nlen = line - name;
+ if(!nlen || (nlen > 128)) {
+ warnf(global, "Bad variable name length (%zd), skipping", nlen);
+ return PARAM_OK;
+ }
+ if(import) {
+ ge = curl_getenv(name);
+ if(!*line && !ge) {
+ /* no assign, no variable, fail */
+ errorf(global, "Variable '%s' import fail, not set", name);
+ return PARAM_EXPAND_ERROR;
+ }
+ else if(ge) {
+ /* there is a value to use */
+ content = ge;
+ clen = strlen(ge);
+ }
+ }
+ if(content)
+ ;
+ else if(*line == '@') {
+ /* read from file or stdin */
+ FILE *file;
+ bool use_stdin;
+ line++;
+ use_stdin = !strcmp(line, "-");
+ if(use_stdin)
+ file = stdin;
+ else {
+ file = fopen(line, "rb");
+ if(!file) {
+ errorf(global, "Failed to open %s", line);
+ return PARAM_READ_ERROR;
+ }
+ }
+ err = file2memory(&content, &clen, file);
+ /* in case of out of memory, this should fail the entire operation */
+ contalloc = TRUE;
+ if(!use_stdin)
+ fclose(file);
+ if(err)
+ return err;
+ }
+ else if(*line == '=') {
+ line++;
+ /* this is the exact content */
+ content = (char *)line;
+ clen = strlen(line);
+ }
+ else {
+ warnf(global, "Bad --variable syntax, skipping: %s", input);
+ return PARAM_OK;
+ }
+ err = addvariable(global, name, nlen, content, clen, contalloc);
+ if(err) {
+ if(contalloc)
+ free(content);
+ }
+ curl_free(ge);
+ return err;
+}
diff --git a/src/var.h b/src/var.h
new file mode 100644
index 000000000..4a71943a3
--- /dev/null
+++ b/src/var.h
@@ -0,0 +1,47 @@
+#ifndef HEADER_CURL_VAR_H
+#define HEADER_CURL_VAR_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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_getparam.h"
+#include "dynbuf.h"
+
+struct var {
+ struct var *next;
+ const char *name;
+ const char *content;
+ size_t clen; /* content length */
+};
+
+struct GlobalConfig;
+
+ParameterError setvariable(struct GlobalConfig *global, const char *input);
+ParameterError varexpand(struct GlobalConfig *global,
+ const char *line, struct curlx_dynbuf *out,
+ bool *replaced);
+
+/* free everything */
+void varcleanup(struct GlobalConfig *global);
+
+#endif /* HEADER_CURL_VAR_H */
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 8ce7610f9..82c651167 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -21,6 +21,8 @@
# SPDX-License-Identifier: curl
#
###########################################################################
+set(CMAKE_UNITY_BUILD OFF)
+
add_custom_target(testdeps)
add_subdirectory(data)
add_subdirectory(libtest)
@@ -46,8 +48,8 @@ endfunction()
add_runtests(test-quiet "-a -s")
add_runtests(test-am "-a -am")
add_runtests(test-full "-a -p -r")
-# !flaky means that it'll skip all tests using the flaky keyword
-add_runtests(test-nonflaky "-a -p !flaky")
-add_runtests(test-ci "-a -p !flaky -r -rm")
+# ~flaky means that it'll ignore results of tests using the flaky keyword
+add_runtests(test-nonflaky "-a -p ~flaky ~timing-dependent")
+add_runtests(test-ci "-a -p ~flaky ~timing-dependent -r -rm")
add_runtests(test-torture "-a -t")
add_runtests(test-event "-a -e")
diff --git a/tests/FILEFORMAT.md b/tests/FILEFORMAT.md
index 464c2eb5e..665d93eb8 100644
--- a/tests/FILEFORMAT.md
+++ b/tests/FILEFORMAT.md
@@ -1,5 +1,5 @@
<!--
-Copyright (C) 1998 - 2022 Daniel Stenberg, <daniel@haxx.se>, et al.
+Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
-->
@@ -23,9 +23,9 @@ with a `testcase` tag, which encompasses the remainder of the file.
# Preprocessing
When a test is to be executed, the source file is first preprocessed and
-variables are substituted by the their respective contents and the output
-version of the test file is stored as `log/testNUM`. That version is what will
-be read and used by the test servers.
+variables are substituted by their respective contents and the output
+version of the test file is stored as `%LOGDIR/testNUM`. That version is what
+will be read and used by the test servers.
## Base64 Encoding
@@ -70,7 +70,7 @@ string may contain `%HH` hexadecimal codes:
%repeat[<number> x <string>]%
-For example, to insert the word hello a 100 times:
+For example, to insert the word hello 100 times:
%repeat[100 x hello]%
@@ -101,8 +101,7 @@ like:
Accept-Encoding: nothing
%endif
-**Note** that there can be no nested conditions. You can only do one
-conditional at a time and you can only check for a single feature in it.
+Nested conditions are supported.
# Variables
@@ -114,7 +113,7 @@ Available substitute variables include:
- `%CLIENT6IP` - IPv6 address of the client running curl
- `%CLIENTIP` - IPv4 address of the client running curl
- `%CURL` - Path to the curl executable
-- `%FILE_PWD` - Current directory, on windows prefixed with a slash
+- `%FILE_PWD` - Current directory, on Windows prefixed with a slash
- `%FTP6PORT` - IPv6 port number of the FTP server
- `%FTPPORT` - Port number of the FTP server
- `%FTPSPORT` - Port number of the FTPS server
@@ -134,9 +133,10 @@ Available substitute variables include:
- `%HTTPTLS6PORT` - IPv6 port number of the HTTP TLS server
- `%HTTPTLSPORT` - Port number of the HTTP TLS server
- `%HTTPUNIXPATH` - Path to the Unix socket of the HTTP server
-- `%SOCKSUNIXPATH` - Absolute Path to the Unix socket of the SOCKS server
+- `%SOCKSUNIXPATH` - Path to the Unix socket of the SOCKS server
- `%IMAP6PORT` - IPv6 port number of the IMAP server
- `%IMAPPORT` - Port number of the IMAP server
+- `%LOGDIR` - Log directory relative to %PWD
- `%MQTTPORT` - Port number of the MQTT server
- `%TELNETPORT` - Port number of the telnet server
- `%NOLISTENPORT` - Port number where no service is listening
@@ -177,7 +177,7 @@ requests curl sends
- **client** defines how the client should behave
- **verify** defines how to verify that the data stored after a command has
-been run ended up correctly
+been run ended up correct
Each main section has a number of available subsections that can be specified,
that will be checked/used if specified.
@@ -190,20 +190,33 @@ tests. Try to use already used keywords. These keywords will be used for
statistical/informational purposes and for choosing or skipping classes of
tests. Keywords must begin with an alphabetic character, `-`, `[` or `{` and
may actually consist of multiple words separated by spaces which are treated
-together as a single identifier.
+together as a single identifier. Most keywords are only there to provide a way
+for users to skip certain classes of tests, if desired, but a few are treated
+specially by the test harness or build system.
+
+When using curl built with Hyper, the keywords must include `HTTP` or `HTTPS`
+for 'hyper mode' to kick in and make line ending checks work for tests.
+
+When running a unit test and the keywords include `unittest`, the `<tool>`
+section can be left empty to use the standard unit test tool name `unitN` where
+`N` is the test number.
+
+The `text-ci` make target automatically skips test with the `flaky` keyword.
+
+Tests that have strict timing dependencies have the `timing-dependent` keyword.
+These are intended to eventually be treated specially on CI builds which are
+often run on overloaded machines with unpredictable timing.
-When using curl built with Hyper, the keywords must include HTTP or HTTPS for
-'hyper mode' to kick in and make line ending checks work for tests.
## `<reply>`
-### `<data [nocheck="yes"] [sendzero="yes"] [base64="yes"] [hex="yes"] [nonewline="yes"]>`
+### `<data [nocheck="yes"] [sendzero="yes"] [base64="yes"] [hex="yes"] [nonewline="yes"] [crlf="yes"]>`
data to be sent to the client on its request and later verified that it
arrived safely. Set `nocheck="yes"` to prevent the test script from verifying
the arrival of this data.
If the data contains `swsclose` anywhere within the start and end tag, and
-this is a HTTP test, then the connection will be closed by the server after
+this is an HTTP test, then the connection will be closed by the server after
this response is sent. If not, the connection will be kept persistent.
If the data contains `swsbounce` anywhere within the start and end tag, the
@@ -225,22 +238,26 @@ and used as "raw" data.
`nonewline=yes` means that the last byte (the trailing newline character)
should be cut off from the data before sending or comparing it.
+`crlf=yes` forces *header* newlines to become CRLF even if not written so in
+the source file. Note that this makes runtests.pl parse and "guess" what is a
+header and what is not in order to apply the CRLF line endings appropriately.
+
For FTP file listings, the `<data>` section will be used *only* if you make
sure that there has been a CWD done first to a directory named `test-[NUM]`
where `NUM` is the test case number. Otherwise the ftp server can't know from
which test file to load the list content.
-### `<dataNUM>`
+### `<dataNUM [crlf="yes"]>`
-Send back this contents instead of the <data> one. The `NUM` is set by:
+Send back this contents instead of the `<data>` one. The `NUM` is set by:
- The test number in the request line is >10000 and this is the remainder
of [test case number]%10000.
- The request was HTTP and included digest details, which adds 1000 to `NUM`
- - If a HTTP request is NTLM type-1, it adds 1001 to `NUM`
- - If a HTTP request is NTLM type-3, it adds 1002 to `NUM`
- - If a HTTP request is Basic and `NUM` is already >=1000, it adds 1 to `NUM`
- - If a HTTP request is Negotiate, `NUM` gets incremented by one for each
+ - If an HTTP request is NTLM type-1, it adds 1001 to `NUM`
+ - If an HTTP request is NTLM type-3, it adds 1002 to `NUM`
+ - If an HTTP request is Basic and `NUM` is already >=1000, it adds 1 to `NUM`
+ - If an HTTP request is Negotiate, `NUM` gets incremented by one for each
request with Negotiate authorization header on the same test case.
Dynamically changing `NUM` in this way allows the test harness to be used to
@@ -257,7 +274,7 @@ a connect prefix.
### `<socks>`
Address type and address details as logged by the SOCKS proxy.
-### `<datacheck [mode="text"] [nonewline="yes"]>`
+### `<datacheck [mode="text"] [nonewline="yes"] [crlf="yes"]>`
if the data is sent but this is what should be checked afterwards. If
`nonewline=yes` is set, runtests will cut off the trailing newline from the
data before comparing with the one actually received by the client.
@@ -265,7 +282,7 @@ data before comparing with the one actually received by the client.
Use the `mode="text"` attribute if the output is in text mode on platforms
that have a text/binary difference.
-### `<datacheckNUM [nonewline="yes"] [mode="text"]>`
+### `<datacheckNUM [nonewline="yes"] [mode="text"] [crlf="yes"]>`
The contents of numbered `datacheck` sections are appended to the non-numbered
one.
@@ -307,6 +324,7 @@ about to issue.
appear at once when a file is transferred
- `RETRNOSIZE` - Make sure the RETR response doesn't contain the size of the
file
+- `RETRSIZE [size]` - Force RETR response to contain the specified size
- `NOSAVE` - Don't actually save what is received
- `SLOWDOWN` - Send FTP responses with 0.01 sec delay between each byte
- `PASVBADIP` - makes PASV send back an illegal IP in its 227 response
@@ -321,6 +339,7 @@ about to issue.
- `auth_required` if this is set and a POST/PUT is made without auth, the
server will NOT wait for the full request body to get sent
+- `delay: [msecs]` - delay this amount after connection
- `idle` - do nothing after receiving the request, just "sit idle"
- `stream` - continuously send data to the client, never-ending
- `writedelay: [msecs]` delay this amount between reply packets
@@ -395,7 +414,9 @@ Features testable here are:
- `alt-svc`
- `bearssl`
+- `brotli`
- `c-ares`
+- `CharConv`
- `cookies`
- `crypto`
- `debug`
@@ -404,24 +425,31 @@ Features testable here are:
- `GnuTLS`
- `GSS-API`
- `h2c`
+- `headers-api`
- `HSTS`
- `HTTP-auth`
- `http/2`
+- `http/3`
+- `https-proxy`
- `hyper`
- `idn`
- `ipv6`
- `Kerberos`
- `large_file`
+- `large-time` (time_t is larger than 32 bit)
- `ld_preload`
- `libssh2`
- `libssh`
- `oldlibssh` (versions before 0.9.4)
- `libz`
- `manual`
+- `mbedtls`
- `Mime`
- `netrc`
-- `NSS`
+- `nghttpx`
+- `nghttpx-h3`
- `NTLM`
+- `NTLM_WB`
- `OpenSSL`
- `parsedate`
- `proxy`
@@ -439,6 +467,7 @@ Features testable here are:
- `TLS-SRP`
- `TrackMemory`
- `typecheck`
+- `threadsafe`
- `Unicode`
- `unittest`
- `unix-sockets`
@@ -448,6 +477,7 @@ Features testable here are:
- `wolfssh`
- `wolfssl`
- `xattr`
+- `zstd`
as well as each protocol that curl supports. A protocol only needs to be
specified if it is different from the server (useful when the server is
@@ -533,7 +563,7 @@ parameter is the not negative integer number of seconds for the delay. This
'delay' attribute is intended for specific test cases, and normally not
needed.
-### `<file name="log/filename" [nonewline="yes"]>`
+### `<file name="%LOGDIR/filename" [nonewline="yes"]>`
This creates the named file with this content before the test case is run,
which is useful if the test case needs a file to act on.
@@ -561,16 +591,19 @@ changing protocol data such as port numbers or user-agent strings.
One perl op per line that operates on the protocol dump. This is pretty
advanced. Example: `s/^EPRT .*/EPRT stripped/`.
-### `<protocol [nonewline="yes"]>`
+### `<protocol [nonewline="yes"][crlf="yes"]>`
the protocol dump curl should transmit, if `nonewline` is set, we will cut off
the trailing newline of this given data before comparing with the one actually
sent by the client The `<strip>` and `<strippart>` rules are applied before
comparisons are made.
-### `<proxy [nonewline="yes"]>`
+`crlf=yes` forces the newlines to become CRLF even if not written so in the
+test.
+
+### `<proxy [nonewline="yes"][crlf="yes"]>`
-The protocol dump curl should transmit to a HTTP proxy (when the http-proxy
+The protocol dump curl should transmit to an HTTP proxy (when the http-proxy
server is used), if `nonewline` is set, we will cut off the trailing newline
of this given data before comparing with the one actually sent by the client
The `<strip>` and `<strippart>` rules are applied before comparisons are made.
@@ -584,7 +617,7 @@ have a text/binary difference.
If `nonewline` is set, we will cut off the trailing newline of this given data
before comparing with the one actually received by the client
-### `<stdout [mode="text"] [nonewline="yes"]>`
+### `<stdout [mode="text"] [nonewline="yes"] [crlf="yes"] [loadfile="filename"]>`
This verifies that this data was passed to stdout.
Use the mode="text" attribute if the output is in text mode on platforms that
@@ -593,7 +626,12 @@ have a text/binary difference.
If `nonewline` is set, we will cut off the trailing newline of this given data
before comparing with the one actually received by the client
-### `<file name="log/filename" [mode="text"]>`
+`crlf=yes` forces the newlines to become CRLF even if not written so in the
+test.
+
+`loadfile="filename"` makes loading the data from an external file.
+
+### `<file name="%LOGDIR/filename" [mode="text"]>`
The file's contents must be identical to this after the test is complete. Use
the mode="text" attribute if the output is in text mode on platforms that have
a text/binary difference.
@@ -613,7 +651,7 @@ compared with what is stored in the test file. This is pretty
advanced. Example: "s/^EPRT .*/EPRT stripped/"
### `<stripfile1>`
-1 to 4 can be appended to `stripfile` to strip the corresponding <fileN>
+1 to 4 can be appended to `stripfile` to strip the corresponding `<fileN>`
content
### `<stripfile2>`
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 829e125d2..17e9ad049 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -26,15 +26,15 @@ HTMLPAGES = testcurl.html runtests.html
PDFPAGES = testcurl.pdf runtests.pdf
MANDISTPAGES = runtests.1.dist testcurl.1.dist
-EXTRA_DIST = ftpserver.pl httpserver.pl secureserver.pl runtests.pl \
- getpart.pm FILEFORMAT.md README.md stunnel.pem memanalyze.pl testcurl.pl \
- valgrind.pm ftp.pm sshserver.pl sshhelp.pm pathhelp.pm testcurl.1 runtests.1 \
- serverhelp.pm tftpserver.pl rtspserver.pl directories.pm symbol-scan.pl \
- CMakeLists.txt mem-include-scan.pl valgrind.supp extern-scan.pl \
- manpage-scan.pl nroff-scan.pl http2-server.pl dictserver.py \
- negtelnetserver.py smbserver.py util.py \
- disable-scan.pl manpage-syntax.pl error-codes.pl badsymbols.pl \
- azure.pm appveyor.pm version-scan.pl options-scan.pl markdown-uppercase.pl
+EXTRA_DIST = appveyor.pm azure.pm badsymbols.pl check-deprecated.pl CMakeLists.txt \
+ devtest.pl dictserver.py directories.pm disable-scan.pl error-codes.pl extern-scan.pl FILEFORMAT.md \
+ processhelp.pm ftpserver.pl getpart.pm globalconfig.pm http-server.pl http2-server.pl \
+ http3-server.pl manpage-scan.pl manpage-syntax.pl markdown-uppercase.pl mem-include-scan.pl \
+ memanalyze.pl negtelnetserver.py nroff-scan.pl option-check.pl options-scan.pl \
+ pathhelp.pm README.md rtspserver.pl runner.pm runtests.1 runtests.pl secureserver.pl \
+ serverhelp.pm servers.pm smbserver.py sshhelp.pm sshserver.pl stunnel.pem symbol-scan.pl \
+ testcurl.1 testcurl.pl testutil.pm tftpserver.pl util.py valgrind.pm \
+ valgrind.supp version-scan.pl check-translatable-options.pl
DISTCLEANFILES = configurehelp.pm
@@ -49,7 +49,7 @@ BUILD_UNIT =
DIST_UNIT = unit
endif
-SUBDIRS = certs data server libtest $(BUILD_UNIT)
+SUBDIRS = certs data server libtest http $(BUILD_UNIT)
DIST_SUBDIRS = $(SUBDIRS) $(DIST_UNIT)
PERLFLAGS = -I$(srcdir)
@@ -71,8 +71,9 @@ TEST_F = -a -p -r
TEST_T = -a -t
TEST_E = -a -e
-# !flaky means that it'll skip all tests using the flaky keyword
-TEST_NF = -a -p !flaky
+# ~<keyword> means that it will run all tests matching the keyword, but will
+# ignore their results (since these ones are likely to fail for no good reason)
+TEST_NF = -a -p ~flaky ~timing-dependent
# special CI target derived from nonflaky with CI-specific flags
TEST_CI = $(TEST_NF) -rm
@@ -117,9 +118,10 @@ event-test: perlcheck all
echo "converted $< to $@")
checksrc:
- cd libtest && $(MAKE) checksrc
- cd unit && $(MAKE) checksrc
- cd server && $(MAKE) checksrc
+ (cd libtest && $(MAKE) checksrc)
+ (cd unit && $(MAKE) checksrc)
+ (cd server && $(MAKE) checksrc)
+ (cd http && $(MAKE) checksrc)
if CURLDEBUG
# for debug builds, we scan the sources on all regular make invokes
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 1e4575f54..9c751be52 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -21,7 +21,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -119,7 +119,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.m4 \
$(top_srcdir)/m4/curl-confopts.m4 \
$(top_srcdir)/m4/curl-functions.m4 \
$(top_srcdir)/m4/curl-gnutls.m4 \
- $(top_srcdir)/m4/curl-mbedtls.m4 $(top_srcdir)/m4/curl-nss.m4 \
+ $(top_srcdir)/m4/curl-mbedtls.m4 \
$(top_srcdir)/m4/curl-openssl.m4 \
$(top_srcdir)/m4/curl-override.m4 \
$(top_srcdir)/m4/curl-reentrant.m4 \
@@ -144,7 +144,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/lib/curl_config.h
-CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_FILES = config
CONFIG_CLEAN_VPATH_FILES =
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
@@ -198,7 +198,7 @@ am__define_uniq_tagged_files = \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
-am__DIST_COMMON = $(srcdir)/Makefile.in README.md
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.in README.md
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
dir0=`pwd`; \
@@ -228,6 +228,8 @@ am__relativize = \
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APACHECTL = @APACHECTL@
+APXS = @APXS@
AR = @AR@
AR_FLAGS = @AR_FLAGS@
AS = @AS@
@@ -236,6 +238,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@
+CADDY = @CADDY@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -297,6 +300,8 @@ HAVE_LIBZ = @HAVE_LIBZ@
HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
HAVE_PROTO_BSDSOCKET_H = @HAVE_PROTO_BSDSOCKET_H@
HAVE_ZSTD = @HAVE_ZSTD@
+HTTPD = @HTTPD@
+HTTPD_NGHTTPX = @HTTPD_NGHTTPX@
IDN_ENABLED = @IDN_ENABLED@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -324,7 +329,6 @@ MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
NROFF = @NROFF@
-NSS_LIBS = @NSS_LIBS@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
@@ -355,6 +359,7 @@ SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@
SUPPORT_FEATURES = @SUPPORT_FEATURES@
SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_NGHTTPX = @TEST_NGHTTPX@
USE_ARES = @USE_ARES@
USE_BEARSSL = @USE_BEARSSL@
USE_GNUTLS = @USE_GNUTLS@
@@ -368,9 +373,8 @@ USE_NGHTTP2 = @USE_NGHTTP2@
USE_NGHTTP3 = @USE_NGHTTP3@
USE_NGTCP2 = @USE_NGTCP2@
USE_NGTCP2_CRYPTO_GNUTLS = @USE_NGTCP2_CRYPTO_GNUTLS@
-USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@
+USE_NGTCP2_CRYPTO_QUICTLS = @USE_NGTCP2_CRYPTO_QUICTLS@
USE_NGTCP2_CRYPTO_WOLFSSL = @USE_NGTCP2_CRYPTO_WOLFSSL@
-USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_RUSTLS = @USE_RUSTLS@
@@ -444,15 +448,15 @@ top_srcdir = @top_srcdir@
HTMLPAGES = testcurl.html runtests.html
PDFPAGES = testcurl.pdf runtests.pdf
MANDISTPAGES = runtests.1.dist testcurl.1.dist
-EXTRA_DIST = ftpserver.pl httpserver.pl secureserver.pl runtests.pl \
- getpart.pm FILEFORMAT.md README.md stunnel.pem memanalyze.pl testcurl.pl \
- valgrind.pm ftp.pm sshserver.pl sshhelp.pm pathhelp.pm testcurl.1 runtests.1 \
- serverhelp.pm tftpserver.pl rtspserver.pl directories.pm symbol-scan.pl \
- CMakeLists.txt mem-include-scan.pl valgrind.supp extern-scan.pl \
- manpage-scan.pl nroff-scan.pl http2-server.pl dictserver.py \
- negtelnetserver.py smbserver.py util.py \
- disable-scan.pl manpage-syntax.pl error-codes.pl badsymbols.pl \
- azure.pm appveyor.pm version-scan.pl options-scan.pl markdown-uppercase.pl
+EXTRA_DIST = appveyor.pm azure.pm badsymbols.pl check-deprecated.pl CMakeLists.txt \
+ devtest.pl dictserver.py directories.pm disable-scan.pl error-codes.pl extern-scan.pl FILEFORMAT.md \
+ processhelp.pm ftpserver.pl getpart.pm globalconfig.pm http-server.pl http2-server.pl \
+ http3-server.pl manpage-scan.pl manpage-syntax.pl markdown-uppercase.pl mem-include-scan.pl \
+ memanalyze.pl negtelnetserver.py nroff-scan.pl option-check.pl options-scan.pl \
+ pathhelp.pm README.md rtspserver.pl runner.pm runtests.1 runtests.pl secureserver.pl \
+ serverhelp.pm servers.pm smbserver.py sshhelp.pm sshserver.pl stunnel.pem symbol-scan.pl \
+ testcurl.1 testcurl.pl testutil.pm tftpserver.pl util.py valgrind.pm \
+ valgrind.supp version-scan.pl check-translatable-options.pl
DISTCLEANFILES = configurehelp.pm
@BUILD_UNITTESTS_FALSE@BUILD_UNIT =
@@ -463,7 +467,7 @@ DISTCLEANFILES = configurehelp.pm
@BUILD_UNITTESTS_TRUE@BUILD_UNIT = unit
@BUILD_UNITTESTS_FALSE@DIST_UNIT = unit
@BUILD_UNITTESTS_TRUE@DIST_UNIT =
-SUBDIRS = certs data server libtest $(BUILD_UNIT)
+SUBDIRS = certs data server libtest http $(BUILD_UNIT)
DIST_SUBDIRS = $(SUBDIRS) $(DIST_UNIT)
PERLFLAGS = -I$(srcdir)
CLEANFILES = .http.pid .https.pid .ftp.pid .ftps.pid $(MANDISTPAGES)
@@ -476,8 +480,9 @@ MAN2HTML = roffit $< >$@
@CROSSCOMPILING_FALSE@TEST_T = -a -t
@CROSSCOMPILING_FALSE@TEST_E = -a -e
-# !flaky means that it'll skip all tests using the flaky keyword
-@CROSSCOMPILING_FALSE@TEST_NF = -a -p !flaky
+# ~<keyword> means that it will run all tests matching the keyword, but will
+# ignore their results (since these ones are likely to fail for no good reason)
+@CROSSCOMPILING_FALSE@TEST_NF = -a -p ~flaky ~timing-dependent
# special CI target derived from nonflaky with CI-specific flags
@CROSSCOMPILING_FALSE@TEST_CI = $(TEST_NF) -rm
@@ -514,6 +519,8 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+config: $(top_builddir)/config.status $(srcdir)/config.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
mostlyclean-libtool:
-rm -f *.lo
@@ -841,9 +848,10 @@ event-test: perlcheck all
echo "converted $< to $@")
checksrc:
- cd libtest && $(MAKE) checksrc
- cd unit && $(MAKE) checksrc
- cd server && $(MAKE) checksrc
+ (cd libtest && $(MAKE) checksrc)
+ (cd unit && $(MAKE) checksrc)
+ (cd server && $(MAKE) checksrc)
+ (cd http && $(MAKE) checksrc)
# for debug builds, we scan the sources on all regular make invokes
@CURLDEBUG_TRUE@all-local: checksrc
diff --git a/tests/README.md b/tests/README.md
index 7fff0a534..1464eacdc 100644
--- a/tests/README.md
+++ b/tests/README.md
@@ -1,5 +1,5 @@
<!--
-Copyright (C) 1998 - 2022 Daniel Stenberg, <daniel@haxx.se>, et al.
+Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
-->
@@ -8,6 +8,41 @@ SPDX-License-Identifier: curl
# Running
+ See the "Requires to run" section for prerequisites.
+
+ In the root of the curl repository:
+
+ ./configure && make && make test
+
+ To run a specific set of tests (e.g. 303 and 410):
+
+ make test TFLAGS="303 410"
+
+ To run the tests faster, pass the -j (parallelism) flag:
+
+ make test TFLAGS="-j10"
+
+ "make test" builds the test suite support code and invokes the 'runtests.pl'
+ perl script to run all the tests. The value of `TFLAGS` is passed
+ directly to 'runtests.pl'.
+
+ When you run tests via make, the flags `-a` and `-s` are passed, meaning
+ to continue running tests even after one fails, and to emit short output.
+
+ If you'd like to not use those flags, you can run 'runtests.pl' directly.
+ You must `chdir` into the tests directory, then you can run it like so:
+
+ ./runtests.pl 303 410
+
+ You must have run `make test` at least once first to build the support code.
+
+ To see what flags are available for runtests.pl, and what output it emits, run:
+
+ man ./tests/runtests.1
+
+ After a test fails, examine the tests/log directory for stdout, stderr, and
+ output from the servers used in the test.
+
## Requires to run
- perl (and a unix-style shell)
@@ -15,8 +50,8 @@ SPDX-License-Identifier: curl
- python-impacket (for SMB tests)
- diff (when a test fails, a diff is shown)
- stunnel (for HTTPS and FTPS tests)
- - OpenSSH or SunSSH (for SCP, SFTP and SOCKS4/5 tests)
- - nghttpx (for HTTP/2 tests)
+ - OpenSSH or SunSSH (for SCP and SFTP tests)
+ - nghttpx (for HTTP/2 and HTTP/3 tests)
- nroff (for --manual tests)
- An available `en_US.UTF-8` locale
@@ -59,9 +94,7 @@ SPDX-License-Identifier: curl
The test suite runs stand-alone servers on random ports to which it makes
requests. For SSL tests, it runs stunnel to handle encryption to the regular
- servers. For SSH, it runs a standard OpenSSH server. For SOCKS4/5 tests SSH
- is used to perform the SOCKS functionality and requires a SSH client and
- server.
+ servers. For SSH, it runs a standard OpenSSH server.
The listen port numbers for the test servers are picked randomly to allow
users to run multiple test cases concurrently and to not collide with other
@@ -70,47 +103,14 @@ SPDX-License-Identifier: curl
The HTTP server supports listening on a Unix domain socket, the default
location is 'http.sock'.
-### Run
-
- `./configure && make && make test`. This builds the test suite support code
- and invokes the 'runtests.pl' perl script to run all the tests. Edit the top
- variables of that script in case you have some specific needs, or run the
- script manually (after the support code has been built).
-
- The script breaks on the first test that doesn't do OK. Use `-a` to prevent
- the script from aborting on the first error. Run the script with `-v` for
- more verbose output. Use `-d` to run the test servers with debug output
- enabled as well. Specifying `-k` keeps all the log files generated by the
- test intact.
-
- Use `-s` for shorter output, or pass test numbers to run specific tests only
- (like `./runtests.pl 3 4` to test 3 and 4 only). It also supports test case
- ranges with 'to', as in `./runtests.pl 3 to 9` which runs the seven tests
- from 3 to 9. Any test numbers starting with ! are disabled, as are any test
- numbers found in the files `data/DISABLED` or `data/DISABLED.local` (one per
- line). The latter is meant for local temporary disables and will be ignored
- by git.
-
- Test cases mentioned in `DISABLED` can still be run if `-f` is provided.
-
- When `-s` is not present, each successful test will display on one line the
- test number and description and on the next line a set of flags, the test
- result, current test sequence, total number of tests to be run and an
- estimated amount of time to complete the test run. The flags consist of
- these letters describing what is checked in this test:
-
- s stdout
- d data
- u upload
- p protocol
- o output
- e exit code
- m memory
- v valgrind
+ For HTTP/2 and HTTP/3 testing an installed `nghttpx` is used. HTTP/3
+ tests check if nghttpx supports the protocol. To override the nghttpx
+ used, set the environment variable `NGHTTPX`. The default can also be
+ changed by specifying `--with-test-nghttpx=<path>` as argument to `configure`.
### Shell startup scripts
- Tests which use the ssh test server, SCP/SFTP/SOCKS tests, might be badly
+ Tests which use the ssh test server, SCP/SFTP tests, might be badly
influenced by the output of system wide or user specific shell startup
scripts, .bashrc, .profile, /etc/csh.cshrc, .login, /etc/bashrc, etc. which
output text messages or escape sequences on user login. When these shell
@@ -154,6 +154,35 @@ SPDX-License-Identifier: curl
All logs are generated in the log/ subdirectory (it is emptied first in the
runtests.pl script). They remain in there after a test run.
+### Log Verbosity
+
+ A curl build with `--enable-debug` offers more verbose output in the logs.
+ This applies not only for test cases, but also when running it standalone
+ with `curl -v`. While a curl debug built is
+ ***not suitable for production***, it is often helpful in tracking down
+ problems.
+
+ Sometimes, one needs detailed logging of operations, but does not want
+ to drown in output. The newly introduced *connection filters* allows one to
+ dynamically increase log verbosity for a particular *filter type*. Example:
+
+ CURL_DEBUG=ssl curl -v https://curl.se
+
+ will make the `ssl` connection filter log more details. One may do that for
+ every filter type and also use a combination of names, separated by `,` or
+ space.
+
+ CURL_DEBUG=ssl,http/2 curl -v https://curl.se
+
+ The order of filter type names is not relevant. Names used here are
+ case insensitive. Note that these names are implementation internals and
+ subject to change.
+
+ Some, likely stable names are `tcp`, `ssl`, `http/2`. For a current list,
+ one may search the sources for `struct Curl_cftype` definitions and find
+ the names there. Also, some filters are only available with certain build
+ options, of course.
+
### Test input files
All test cases are put in the `data/` subdirectory. Each test is stored in
diff --git a/tests/appveyor.pm b/tests/appveyor.pm
index 182153464..2a6a5d58c 100644
--- a/tests/appveyor.pm
+++ b/tests/appveyor.pm
@@ -5,8 +5,8 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2020-2022, Daniel Stenberg, <daniel@haxx.se>, et al.
-# Copyright (C) 2020-2022, Marc Hoersken, <info@marc-hoersken.de>
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Marc Hoersken, <info@marc-hoersken.de>
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -23,10 +23,23 @@
#
###########################################################################
+package appveyor;
+
use strict;
use warnings;
-my %APPVEYOR_TEST_NAMES;
+BEGIN {
+ use base qw(Exporter);
+
+ our @EXPORT = qw(
+ appveyor_check_environment
+ appveyor_create_test_result
+ appveyor_update_test_result
+ );
+}
+
+
+my %APPVEYOR_TEST_NAMES; # JSON and shell-quoted test names by test number
sub appveyor_check_environment {
if(defined $ENV{'APPVEYOR_API_URL'} && $ENV{'APPVEYOR_API_URL'}) {
@@ -38,20 +51,20 @@ sub appveyor_check_environment {
sub appveyor_create_test_result {
my ($curl, $testnum, $testname)=@_;
$testname =~ s/\\/\\\\/g;
- $testname =~ s/\'/\\\'/g;
$testname =~ s/\"/\\\"/g;
+ $testname =~ s/\'/'"'"'/g;
my $appveyor_baseurl="$ENV{'APPVEYOR_API_URL'}";
- my $appveyor_result=`$curl --silent --noproxy "*" \\
- --header "Content-Type: application/json" \\
- --data "
+ my $appveyor_result=`$curl --silent --noproxy '*' \\
+ --header 'Content-Type: application/json' \\
+ --data '
{
- 'testName': '$testname',
- 'testFramework': 'runtests.pl',
- 'fileName': 'tests/data/test$testnum',
- 'outcome': 'Running'
+ "testName": "$testname",
+ "testFramework": "runtests.pl",
+ "fileName": "tests/data/test$testnum",
+ "outcome": "Running"
}
- " \\
- "$appveyor_baseurl/api/tests"`;
+ ' \\
+ '$appveyor_baseurl/api/tests'`;
print "AppVeyor API result: $appveyor_result\n" if ($appveyor_result);
$APPVEYOR_TEST_NAMES{$testnum}=$testname;
}
@@ -85,31 +98,31 @@ sub appveyor_update_test_result {
$appveyor_category = 'Error';
}
my $appveyor_baseurl="$ENV{'APPVEYOR_API_URL'}";
- my $appveyor_result=`$curl --silent --noproxy "*" --request PUT \\
- --header "Content-Type: application/json" \\
- --data "
+ my $appveyor_result=`$curl --silent --noproxy '*' --request PUT \\
+ --header 'Content-Type: application/json' \\
+ --data '
{
- 'testName': '$testname',
- 'testFramework': 'runtests.pl',
- 'fileName': 'tests/data/test$testnum',
- 'outcome': '$appveyor_outcome',
- 'durationMilliseconds': $appveyor_duration,
- 'ErrorMessage': 'Test $testnum $appveyor_outcome'
+ "testName": "$testname",
+ "testFramework": "runtests.pl",
+ "fileName": "tests/data/test$testnum",
+ "outcome": "$appveyor_outcome",
+ "durationMilliseconds": $appveyor_duration,
+ "ErrorMessage": "Test $testnum $appveyor_outcome"
}
- " \\
- "$appveyor_baseurl/api/tests"`;
+ ' \\
+ '$appveyor_baseurl/api/tests'`;
print "AppVeyor API result: $appveyor_result\n" if ($appveyor_result);
if($appveyor_category eq 'Error') {
- $appveyor_result=`$curl --silent --noproxy "*" \\
- --header "Content-Type: application/json" \\
- --data "
+ $appveyor_result=`$curl --silent --noproxy '*' \\
+ --header 'Content-Type: application/json' \\
+ --data '
{
- 'message': '$appveyor_outcome: $testname',
- 'category': '$appveyor_category',
- 'details': 'Test $testnum $appveyor_outcome'
+ "message": "$appveyor_outcome: $testname",
+ "category": "$appveyor_category",
+ "details": "Test $testnum $appveyor_outcome"
}
- " \\
- "$appveyor_baseurl/api/build/messages"`;
+ ' \\
+ '$appveyor_baseurl/api/build/messages'`;
print "AppVeyor API result: $appveyor_result\n" if ($appveyor_result);
}
}
diff --git a/tests/azure.pm b/tests/azure.pm
index e6d3bf8f7..2810f48e1 100644
--- a/tests/azure.pm
+++ b/tests/azure.pm
@@ -5,8 +5,8 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2020-2022, Daniel Stenberg, <daniel@haxx.se>, et al.
-# Copyright (C) 2020-2022, Marc Hoersken, <info@marc-hoersken.de>
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Marc Hoersken, <info@marc-hoersken.de>
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -23,9 +23,23 @@
#
###########################################################################
+package azure;
+
use strict;
use warnings;
+BEGIN {
+ use base qw(Exporter);
+
+ our @EXPORT = qw(
+ azure_check_environment
+ azure_create_test_run
+ azure_create_test_result
+ azure_update_test_result
+ azure_update_test_run
+ );
+}
+
use POSIX qw(strftime);
sub azure_check_environment {
@@ -61,26 +75,26 @@ sub azure_create_test_run {
sub azure_create_test_result {
my ($curl, $azure_run_id, $testnum, $testname)=@_;
$testname =~ s/\\/\\\\/g;
- $testname =~ s/\'/\\\'/g;
$testname =~ s/\"/\\\"/g;
+ $testname =~ s/\'/'"'"'/g;
my $title_testnum=sprintf("%04d", $testnum);
my $azure_baseurl="$ENV{'SYSTEM_TEAMFOUNDATIONCOLLECTIONURI'}$ENV{'SYSTEM_TEAMPROJECTID'}";
- my $azure_result=`$curl --silent --noproxy "*" \\
+ my $azure_result=`$curl --silent --noproxy '*' \\
--header "Authorization: Bearer $ENV{'AZURE_ACCESS_TOKEN'}" \\
- --header "Content-Type: application/json" \\
- --data "
+ --header 'Content-Type: application/json' \\
+ --data '
[
{
- 'build': {'id': '$ENV{'BUILD_BUILDID'}'},
- 'testCase': {'id': $testnum},
- 'testCaseTitle': '$title_testnum: $testname',
- 'testCaseRevision': 2,
- 'automatedTestName': 'curl.tests.$testnum',
- 'outcome': 'InProgress'
+ "build": {"id": "$ENV{'BUILD_BUILDID'}"},
+ "testCase": {"id": $testnum},
+ "testCaseTitle": "$title_testnum: $testname",
+ "testCaseRevision": 2,
+ "automatedTestName": "curl.tests.$testnum",
+ "outcome": "InProgress"
}
]
- " \\
- "$azure_baseurl/_apis/test/runs/$azure_run_id/results?api-version=5.1"`;
+ ' \\
+ '$azure_baseurl/_apis/test/runs/$azure_run_id/results?api-version=5.1'`;
if($azure_result =~ /\[\{"id":(\d+)/) {
return $1;
}
@@ -109,21 +123,21 @@ sub azure_update_test_result {
$azure_outcome = 'Failed';
}
my $azure_baseurl="$ENV{'SYSTEM_TEAMFOUNDATIONCOLLECTIONURI'}$ENV{'SYSTEM_TEAMPROJECTID'}";
- my $azure_result=`$curl --silent --noproxy "*" --request PATCH \\
+ my $azure_result=`$curl --silent --noproxy '*' --request PATCH \\
--header "Authorization: Bearer $ENV{'AZURE_ACCESS_TOKEN'}" \\
--header "Content-Type: application/json" \\
- --data "
+ --data '
[
{
- 'id': $azure_result_id,
- 'outcome': '$azure_outcome',
- 'startedDate': '$azure_start',
- 'completedDate': '$azure_complete',
- 'durationInMs': $azure_duration
+ "id": $azure_result_id,
+ "outcome": "$azure_outcome",
+ "startedDate": "$azure_start",
+ "completedDate": "$azure_complete",
+ "durationInMs": $azure_duration
}
]
- " \\
- "$azure_baseurl/_apis/test/runs/$azure_run_id/results?api-version=5.1"`;
+ ' \\
+ '$azure_baseurl/_apis/test/runs/$azure_run_id/results?api-version=5.1'`;
if($azure_result =~ /\[\{"id":(\d+)/) {
return $1;
}
@@ -133,15 +147,15 @@ sub azure_update_test_result {
sub azure_update_test_run {
my ($curl, $azure_run_id)=@_;
my $azure_baseurl="$ENV{'SYSTEM_TEAMFOUNDATIONCOLLECTIONURI'}$ENV{'SYSTEM_TEAMPROJECTID'}";
- my $azure_run=`$curl --silent --noproxy "*" --request PATCH \\
+ my $azure_run=`$curl --silent --noproxy '*' --request PATCH \\
--header "Authorization: Bearer $ENV{'AZURE_ACCESS_TOKEN'}" \\
- --header "Content-Type: application/json" \\
- --data "
+ --header 'Content-Type: application/json' \\
+ --data '
{
- 'state': 'Completed'
+ "state": "Completed"
}
- " \\
- "$azure_baseurl/_apis/test/runs/$azure_run_id?api-version=5.1"`;
+ ' \\
+ '$azure_baseurl/_apis/test/runs/$azure_run_id?api-version=5.1'`;
if($azure_run =~ /"id":(\d+)/) {
return $1;
}
diff --git a/tests/badsymbols.pl b/tests/badsymbols.pl
index 392b190f8..a3a39d420 100755
--- a/tests/badsymbols.pl
+++ b/tests/badsymbols.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2010-2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -74,7 +74,8 @@ sub scanenums {
my ($file)=@_;
my $skipit = 0;
- open H_IN, "-|", "$Cpreprocessor $i$file" || die "Cannot preprocess $file";
+ open H_IN, "-|", "$Cpreprocessor -DCURL_DISABLE_DEPRECATION $i$file" ||
+ die "Cannot preprocess $file";
while ( <H_IN> ) {
my ($line, $linenum) = ($_, $.);
if( /^#(line|) (\d+) \"(.*)\"/) {
@@ -102,6 +103,7 @@ sub scanenums {
if(($_ !~ /\}(;|)/) &&
($_ ne "typedef") &&
($_ ne "enum") &&
+ ($_ ne "=") &&
($_ !~ /^[ \t]*$/)) {
if($verbose) {
print "Source: $Cpreprocessor $i$file\n";
diff --git a/tests/certs/EdelCurlRoot-ca.cacert b/tests/certs/EdelCurlRoot-ca.cacert
index ac46717a0..4e191f5e6 100644
--- a/tests/certs/EdelCurlRoot-ca.cacert
+++ b/tests/certs/EdelCurlRoot-ca.cacert
@@ -1,41 +1,41 @@
Certificate:
Data:
Version: 3 (0x2)
- Serial Number: 15373408817751 (0xdfb66925257)
+ Serial Number: 16717980969522 (0xf3475512a32)
Signature Algorithm: sha256WithRSAEncryption
Issuer:
countryName = NN
organizationName = Edel Curl Arctic Illudium Research Cloud
commonName = Northern Nowhere Trust Anchor
Validity
- Not Before: Sep 19 07:08:01 2018 GMT
- Not After : Feb 22 07:08:01 2035 GMT
+ Not Before: Dec 23 12:21:36 2022 GMT
+ Not After : May 28 12:21:36 2039 GMT
Subject:
countryName = NN
organizationName = Edel Curl Arctic Illudium Research Cloud
commonName = Northern Nowhere Trust Anchor
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
- RSA Public-Key: (2048 bit)
+ Public-Key: (2048 bit)
Modulus:
- 00:e1:4c:d9:74:1a:a4:a3:42:57:a4:7a:2e:74:02:
- 08:49:6a:6a:1d:db:de:c3:43:d6:48:60:12:30:ed:
- d6:6e:74:16:81:16:4e:50:b9:6c:b9:36:0d:19:a4:
- f7:85:99:40:46:26:46:33:86:ce:0c:27:71:e4:8f:
- 0f:b4:3a:99:6d:af:78:48:b7:cb:c4:d3:60:7d:d0:
- 17:6f:23:bc:89:c0:bc:16:b8:94:f0:b2:10:8d:c8:
- e0:35:97:ed:8f:c6:db:9b:cd:aa:f6:8c:45:dc:0f:
- ee:a0:78:12:be:f6:7d:f4:f7:b6:8c:4e:e5:7d:32:
- e8:f7:f7:1e:04:46:9e:08:cd:cb:ec:e2:9a:c3:35:
- 3f:ce:a1:01:e3:10:0a:ec:d9:ab:13:09:eb:e6:39:
- 6b:92:30:c7:08:bd:8a:32:ef:0b:b2:61:6f:11:43:
- 95:cf:31:ea:19:01:cc:1a:6d:d2:d5:57:35:da:c0:
- ae:46:39:d3:33:ed:f8:c0:1e:ad:3d:68:6f:a8:53:
- 24:ac:d6:f9:dd:2b:51:50:77:e4:b7:5d:ad:48:80:
- 5d:65:57:e5:eb:07:82:7d:cb:72:4f:06:6a:34:d4:
- 38:c8:6b:ed:8a:3a:68:5e:35:e3:78:14:da:5d:86:
- 9f:e5:d4:1c:dd:90:c2:7c:a2:00:d4:95:65:04:85:
- ff:83
+ 00:a1:d8:60:15:d1:5b:09:3b:d1:4e:79:40:0a:03:
+ 81:07:60:ba:6b:03:f4:87:4e:1e:e9:77:b1:ea:83:
+ 66:56:c4:6c:19:5e:cf:64:23:44:03:f5:d0:27:e1:
+ 1d:a5:05:dd:a5:f2:c1:9a:28:e2:31:66:a2:7b:e0:
+ 3b:bb:f3:b4:06:b4:43:97:7b:80:3c:96:1b:ed:85:
+ 7c:8b:2e:0f:62:b9:53:69:3d:2b:19:af:16:d3:e2:
+ a9:d3:2d:f2:ec:b1:31:76:2d:d9:78:67:91:ce:16:
+ 52:e3:68:34:f1:bc:f0:5e:99:bf:28:cf:91:88:31:
+ a6:48:cc:fb:84:a1:87:85:8b:08:18:eb:39:e9:34:
+ ee:1b:3a:a3:bd:2a:77:63:50:c8:88:6b:f1:d3:c4:
+ b7:25:db:7f:eb:b9:84:73:a8:86:8a:69:7d:40:5a:
+ c3:24:81:10:8d:97:ae:ce:45:eb:5d:fb:14:31:5b:
+ a1:c2:d1:aa:2f:44:a0:42:28:38:16:c7:42:1e:dd:
+ db:0f:a9:d9:70:25:cc:da:be:e9:8c:8c:84:48:a3:
+ ab:af:20:7a:7e:b3:09:a9:05:0d:ce:f8:9b:c2:77:
+ e8:82:f8:6a:56:21:db:92:a7:0a:3c:f1:0c:a0:d4:
+ 9c:8c:c0:62:2b:62:bc:5e:c4:ba:5e:3a:fc:1a:05:
+ 49:ef
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints: critical
@@ -43,42 +43,53 @@ Certificate:
X509v3 Key Usage: critical
Certificate Sign, CRL Sign
X509v3 Subject Key Identifier:
- 12:CA:BA:4B:46:04:A7:75:8A:2C:E8:0E:54:94:BC:12:65:A6:7B:CE
+ 87:CB:B1:33:2E:C1:67:7E:71:E3:E5:2B:4C:4D:A4:B3:6E:D2:5B:A9
+ X509v3 Authority Key Identifier:
+ 87:CB:B1:33:2E:C1:67:7E:71:E3:E5:2B:4C:4D:A4:B3:6E:D2:5B:A9
+ Authority Information Access:
+ CA Issuers - URI:http://test.curl.se/ca/EdelCurlRoot.cer
+ X509v3 CRL Distribution Points:
+ Full Name:
+ URI:http://test.curl.se/ca/EdelCurlRoot.crl
Signature Algorithm: sha256WithRSAEncryption
- 2c:82:a4:ff:21:f3:fc:ba:6a:7a:11:b1:56:d4:9a:8f:4d:bf:
- 23:cf:d0:0b:d4:e2:6f:7a:a7:40:1a:c6:39:fa:db:ae:32:ab:
- 3d:bb:9f:45:d1:46:a5:95:27:3c:d4:89:d2:43:84:4c:43:70:
- ff:16:3c:a8:8c:e6:5c:0a:fb:20:1d:a7:c3:90:66:41:ef:be:
- 91:de:9d:9b:5d:1b:f1:59:44:d3:77:32:a3:6c:6e:24:a4:2d:
- a8:50:5f:86:81:47:fa:d7:80:a7:e7:fd:f2:00:bd:b8:cc:b5:
- 2f:cc:50:c7:46:74:3a:05:12:cc:e2:c4:d0:e6:b0:59:a1:16:
- 73:ff:3d:12:f5:89:be:95:cd:cc:43:22:3b:28:63:0d:9b:69:
- da:d3:28:75:55:97:3a:5d:be:2c:7d:30:67:77:4f:51:a0:b9:
- 07:18:9f:47:23:d6:73:dc:12:7f:0d:fa:2d:5a:d0:2a:89:0b:
- 29:dd:a6:ba:a0:a1:f5:13:e2:dd:48:e4:16:c7:d6:c3:68:2f:
- 4f:40:e5:da:cf:04:13:86:b5:10:83:fe:45:59:4d:92:3f:20:
- be:45:ca:b6:f7:cc:91:12:92:df:00:11:13:14:0b:61:9a:64:
- 92:50:f4:3f:74:5f:9e:24:ba:ff:cf:d7:16:51:c9:75:95:e9:
- 65:e9:8d:b4
+ Signature Value:
+ 86:19:bd:3d:12:4f:6b:8c:8e:1b:72:db:8f:9b:67:68:96:f8:
+ f4:ad:d9:a0:b5:48:0e:19:f6:34:09:92:a5:b8:ab:70:c6:6b:
+ 44:be:f7:fd:a4:75:ad:16:c4:ad:54:aa:c4:36:e6:86:87:84:
+ 0d:d9:1f:ea:b5:95:3a:69:60:02:2f:5c:a2:a3:1d:c9:28:f6:
+ 78:22:cd:e3:1d:47:37:a0:a0:a4:8a:3b:da:50:a9:12:e0:e4:
+ e7:1f:b6:bc:7e:e8:b6:a1:b7:99:9f:98:2c:c1:70:db:32:ea:
+ 82:45:ff:71:ea:36:34:65:bd:ad:cd:c5:2b:a2:a1:6b:2e:a3:
+ 30:b2:95:ea:77:a9:17:cf:bf:e4:df:4f:ef:6d:72:d0:a1:95:
+ c6:ef:e5:b8:70:0f:d2:82:b3:a7:54:4b:f7:2d:b9:2f:dc:37:
+ ff:f7:4d:26:b4:4b:6a:46:a3:f9:2c:ad:58:8c:96:e8:e6:a4:
+ aa:d0:c1:2d:35:db:b5:2f:ac:34:40:e3:7f:da:f7:34:f8:a2:
+ fd:6f:61:46:69:f0:24:20:32:f3:ad:e2:72:27:1a:58:a3:aa:
+ 77:4e:fa:06:5e:34:40:d3:50:39:66:29:f6:a6:f5:40:3a:af:
+ 97:23:19:cf:58:27:c9:8f:c4:b3:58:9e:87:78:2f:a7:24:9e:
+ 3e:5d:d1:52
-----BEGIN CERTIFICATE-----
-MIIDkjCCAnqgAwIBAgIGDftmklJXMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
+MIIENDCCAxygAwIBAgIGDzR1USoyMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
Ak5OMTEwLwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNo
IENsb3VkMSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjAe
-Fw0xODA5MTkwNzA4MDFaFw0zNTAyMjIwNzA4MDFaMGgxCzAJBgNVBAYTAk5OMTEw
+Fw0yMjEyMjMxMjIxMzZaFw0zOTA1MjgxMjIxMzZaMGgxCzAJBgNVBAYTAk5OMTEw
LwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3Vk
MSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBAOFM2XQapKNCV6R6LnQCCElqah3b3sND
-1khgEjDt1m50FoEWTlC5bLk2DRmk94WZQEYmRjOGzgwnceSPD7Q6mW2veEi3y8TT
-YH3QF28jvInAvBa4lPCyEI3I4DWX7Y/G25vNqvaMRdwP7qB4Er72ffT3toxO5X0y
-6Pf3HgRGngjNy+zimsM1P86hAeMQCuzZqxMJ6+Y5a5Iwxwi9ijLvC7JhbxFDlc8x
-6hkBzBpt0tVXNdrArkY50zPt+MAerT1ob6hTJKzW+d0rUVB35LddrUiAXWVX5esH
-gn3Lck8GajTUOMhr7Yo6aF4143gU2l2Gn+XUHN2QwnyiANSVZQSF/4MCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLK
-uktGBKd1iizoDlSUvBJlpnvOMA0GCSqGSIb3DQEBCwUAA4IBAQAsgqT/IfP8ump6
-EbFW1JqPTb8jz9AL1OJveqdAGsY5+tuuMqs9u59F0UallSc81InSQ4RMQ3D/Fjyo
-jOZcCvsgHafDkGZB776R3p2bXRvxWUTTdzKjbG4kpC2oUF+GgUf614Cn5/3yAL24
-zLUvzFDHRnQ6BRLM4sTQ5rBZoRZz/z0S9Ym+lc3MQyI7KGMNm2na0yh1VZc6Xb4s
-fTBnd09RoLkHGJ9HI9Zz3BJ/DfotWtAqiQsp3aa6oKH1E+LdSOQWx9bDaC9PQOXa
-zwQThrUQg/5FWU2SPyC+Rcq298yREpLfABETFAthmmSSUPQ/dF+eJLr/z9cWUcl1
-lell6Y20
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBAKHYYBXRWwk70U55QAoDgQdgumsD9IdO
+Hul3seqDZlbEbBlez2QjRAP10CfhHaUF3aXywZoo4jFmonvgO7vztAa0Q5d7gDyW
+G+2FfIsuD2K5U2k9KxmvFtPiqdMt8uyxMXYt2Xhnkc4WUuNoNPG88F6ZvyjPkYgx
+pkjM+4Shh4WLCBjrOek07hs6o70qd2NQyIhr8dPEtyXbf+u5hHOohoppfUBawySB
+EI2Xrs5F6137FDFbocLRqi9EoEIoOBbHQh7d2w+p2XAlzNq+6YyMhEijq68gen6z
+CakFDc74m8J36IL4alYh25KnCjzxDKDUnIzAYitivF7Eul46/BoFSe8CAwEAAaOB
+4zCB4DAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
+h8uxMy7BZ35x4+UrTE2ks27SW6kwHwYDVR0jBBgwFoAUh8uxMy7BZ35x4+UrTE2k
+s27SW6kwQwYIKwYBBQUHAQEENzA1MDMGCCsGAQUFBzAChidodHRwOi8vdGVzdC5j
+dXJsLnNlL2NhL0VkZWxDdXJsUm9vdC5jZXIwOAYDVR0fBDEwLzAtoCugKYYnaHR0
+cDovL3Rlc3QuY3VybC5zZS9jYS9FZGVsQ3VybFJvb3QuY3JsMA0GCSqGSIb3DQEB
+CwUAA4IBAQCGGb09Ek9rjI4bctuPm2dolvj0rdmgtUgOGfY0CZKluKtwxmtEvvf9
+pHWtFsStVKrENuaGh4QN2R/qtZU6aWACL1yiox3JKPZ4Is3jHUc3oKCkijvaUKkS
+4OTnH7a8fui2obeZn5gswXDbMuqCRf9x6jY0Zb2tzcUroqFrLqMwspXqd6kXz7/k
+30/vbXLQoZXG7+W4cA/SgrOnVEv3Lbkv3Df/900mtEtqRqP5LK1YjJbo5qSq0MEt
+Ndu1L6w0QON/2vc0+KL9b2FGafAkIDLzreJyJxpYo6p3TvoGXjRA01A5Zin2pvVA
+Oq+XIxnPWCfJj8SzWJ6HeC+nJJ4+XdFS
-----END CERTIFICATE-----
diff --git a/tests/certs/EdelCurlRoot-ca.cnf b/tests/certs/EdelCurlRoot-ca.cnf
index ba998817e..b8c630b5d 100644
--- a/tests/certs/EdelCurlRoot-ca.cnf
+++ b/tests/certs/EdelCurlRoot-ca.cnf
@@ -6,6 +6,6 @@ database = EdelCurlRoot-ca.db
certificate = EdelCurlRoot-ca.crt
private_key = EdelCurlRoot-ca.key
crlnumber = EdelCurlRoot-ca.cnt
-default_md = sha1
+default_md = sha256
default_days = 365
default_crl_days = 30
diff --git a/tests/certs/EdelCurlRoot-ca.crt b/tests/certs/EdelCurlRoot-ca.crt
index ac46717a0..4e191f5e6 100644
--- a/tests/certs/EdelCurlRoot-ca.crt
+++ b/tests/certs/EdelCurlRoot-ca.crt
@@ -1,41 +1,41 @@
Certificate:
Data:
Version: 3 (0x2)
- Serial Number: 15373408817751 (0xdfb66925257)
+ Serial Number: 16717980969522 (0xf3475512a32)
Signature Algorithm: sha256WithRSAEncryption
Issuer:
countryName = NN
organizationName = Edel Curl Arctic Illudium Research Cloud
commonName = Northern Nowhere Trust Anchor
Validity
- Not Before: Sep 19 07:08:01 2018 GMT
- Not After : Feb 22 07:08:01 2035 GMT
+ Not Before: Dec 23 12:21:36 2022 GMT
+ Not After : May 28 12:21:36 2039 GMT
Subject:
countryName = NN
organizationName = Edel Curl Arctic Illudium Research Cloud
commonName = Northern Nowhere Trust Anchor
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
- RSA Public-Key: (2048 bit)
+ Public-Key: (2048 bit)
Modulus:
- 00:e1:4c:d9:74:1a:a4:a3:42:57:a4:7a:2e:74:02:
- 08:49:6a:6a:1d:db:de:c3:43:d6:48:60:12:30:ed:
- d6:6e:74:16:81:16:4e:50:b9:6c:b9:36:0d:19:a4:
- f7:85:99:40:46:26:46:33:86:ce:0c:27:71:e4:8f:
- 0f:b4:3a:99:6d:af:78:48:b7:cb:c4:d3:60:7d:d0:
- 17:6f:23:bc:89:c0:bc:16:b8:94:f0:b2:10:8d:c8:
- e0:35:97:ed:8f:c6:db:9b:cd:aa:f6:8c:45:dc:0f:
- ee:a0:78:12:be:f6:7d:f4:f7:b6:8c:4e:e5:7d:32:
- e8:f7:f7:1e:04:46:9e:08:cd:cb:ec:e2:9a:c3:35:
- 3f:ce:a1:01:e3:10:0a:ec:d9:ab:13:09:eb:e6:39:
- 6b:92:30:c7:08:bd:8a:32:ef:0b:b2:61:6f:11:43:
- 95:cf:31:ea:19:01:cc:1a:6d:d2:d5:57:35:da:c0:
- ae:46:39:d3:33:ed:f8:c0:1e:ad:3d:68:6f:a8:53:
- 24:ac:d6:f9:dd:2b:51:50:77:e4:b7:5d:ad:48:80:
- 5d:65:57:e5:eb:07:82:7d:cb:72:4f:06:6a:34:d4:
- 38:c8:6b:ed:8a:3a:68:5e:35:e3:78:14:da:5d:86:
- 9f:e5:d4:1c:dd:90:c2:7c:a2:00:d4:95:65:04:85:
- ff:83
+ 00:a1:d8:60:15:d1:5b:09:3b:d1:4e:79:40:0a:03:
+ 81:07:60:ba:6b:03:f4:87:4e:1e:e9:77:b1:ea:83:
+ 66:56:c4:6c:19:5e:cf:64:23:44:03:f5:d0:27:e1:
+ 1d:a5:05:dd:a5:f2:c1:9a:28:e2:31:66:a2:7b:e0:
+ 3b:bb:f3:b4:06:b4:43:97:7b:80:3c:96:1b:ed:85:
+ 7c:8b:2e:0f:62:b9:53:69:3d:2b:19:af:16:d3:e2:
+ a9:d3:2d:f2:ec:b1:31:76:2d:d9:78:67:91:ce:16:
+ 52:e3:68:34:f1:bc:f0:5e:99:bf:28:cf:91:88:31:
+ a6:48:cc:fb:84:a1:87:85:8b:08:18:eb:39:e9:34:
+ ee:1b:3a:a3:bd:2a:77:63:50:c8:88:6b:f1:d3:c4:
+ b7:25:db:7f:eb:b9:84:73:a8:86:8a:69:7d:40:5a:
+ c3:24:81:10:8d:97:ae:ce:45:eb:5d:fb:14:31:5b:
+ a1:c2:d1:aa:2f:44:a0:42:28:38:16:c7:42:1e:dd:
+ db:0f:a9:d9:70:25:cc:da:be:e9:8c:8c:84:48:a3:
+ ab:af:20:7a:7e:b3:09:a9:05:0d:ce:f8:9b:c2:77:
+ e8:82:f8:6a:56:21:db:92:a7:0a:3c:f1:0c:a0:d4:
+ 9c:8c:c0:62:2b:62:bc:5e:c4:ba:5e:3a:fc:1a:05:
+ 49:ef
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints: critical
@@ -43,42 +43,53 @@ Certificate:
X509v3 Key Usage: critical
Certificate Sign, CRL Sign
X509v3 Subject Key Identifier:
- 12:CA:BA:4B:46:04:A7:75:8A:2C:E8:0E:54:94:BC:12:65:A6:7B:CE
+ 87:CB:B1:33:2E:C1:67:7E:71:E3:E5:2B:4C:4D:A4:B3:6E:D2:5B:A9
+ X509v3 Authority Key Identifier:
+ 87:CB:B1:33:2E:C1:67:7E:71:E3:E5:2B:4C:4D:A4:B3:6E:D2:5B:A9
+ Authority Information Access:
+ CA Issuers - URI:http://test.curl.se/ca/EdelCurlRoot.cer
+ X509v3 CRL Distribution Points:
+ Full Name:
+ URI:http://test.curl.se/ca/EdelCurlRoot.crl
Signature Algorithm: sha256WithRSAEncryption
- 2c:82:a4:ff:21:f3:fc:ba:6a:7a:11:b1:56:d4:9a:8f:4d:bf:
- 23:cf:d0:0b:d4:e2:6f:7a:a7:40:1a:c6:39:fa:db:ae:32:ab:
- 3d:bb:9f:45:d1:46:a5:95:27:3c:d4:89:d2:43:84:4c:43:70:
- ff:16:3c:a8:8c:e6:5c:0a:fb:20:1d:a7:c3:90:66:41:ef:be:
- 91:de:9d:9b:5d:1b:f1:59:44:d3:77:32:a3:6c:6e:24:a4:2d:
- a8:50:5f:86:81:47:fa:d7:80:a7:e7:fd:f2:00:bd:b8:cc:b5:
- 2f:cc:50:c7:46:74:3a:05:12:cc:e2:c4:d0:e6:b0:59:a1:16:
- 73:ff:3d:12:f5:89:be:95:cd:cc:43:22:3b:28:63:0d:9b:69:
- da:d3:28:75:55:97:3a:5d:be:2c:7d:30:67:77:4f:51:a0:b9:
- 07:18:9f:47:23:d6:73:dc:12:7f:0d:fa:2d:5a:d0:2a:89:0b:
- 29:dd:a6:ba:a0:a1:f5:13:e2:dd:48:e4:16:c7:d6:c3:68:2f:
- 4f:40:e5:da:cf:04:13:86:b5:10:83:fe:45:59:4d:92:3f:20:
- be:45:ca:b6:f7:cc:91:12:92:df:00:11:13:14:0b:61:9a:64:
- 92:50:f4:3f:74:5f:9e:24:ba:ff:cf:d7:16:51:c9:75:95:e9:
- 65:e9:8d:b4
+ Signature Value:
+ 86:19:bd:3d:12:4f:6b:8c:8e:1b:72:db:8f:9b:67:68:96:f8:
+ f4:ad:d9:a0:b5:48:0e:19:f6:34:09:92:a5:b8:ab:70:c6:6b:
+ 44:be:f7:fd:a4:75:ad:16:c4:ad:54:aa:c4:36:e6:86:87:84:
+ 0d:d9:1f:ea:b5:95:3a:69:60:02:2f:5c:a2:a3:1d:c9:28:f6:
+ 78:22:cd:e3:1d:47:37:a0:a0:a4:8a:3b:da:50:a9:12:e0:e4:
+ e7:1f:b6:bc:7e:e8:b6:a1:b7:99:9f:98:2c:c1:70:db:32:ea:
+ 82:45:ff:71:ea:36:34:65:bd:ad:cd:c5:2b:a2:a1:6b:2e:a3:
+ 30:b2:95:ea:77:a9:17:cf:bf:e4:df:4f:ef:6d:72:d0:a1:95:
+ c6:ef:e5:b8:70:0f:d2:82:b3:a7:54:4b:f7:2d:b9:2f:dc:37:
+ ff:f7:4d:26:b4:4b:6a:46:a3:f9:2c:ad:58:8c:96:e8:e6:a4:
+ aa:d0:c1:2d:35:db:b5:2f:ac:34:40:e3:7f:da:f7:34:f8:a2:
+ fd:6f:61:46:69:f0:24:20:32:f3:ad:e2:72:27:1a:58:a3:aa:
+ 77:4e:fa:06:5e:34:40:d3:50:39:66:29:f6:a6:f5:40:3a:af:
+ 97:23:19:cf:58:27:c9:8f:c4:b3:58:9e:87:78:2f:a7:24:9e:
+ 3e:5d:d1:52
-----BEGIN CERTIFICATE-----
-MIIDkjCCAnqgAwIBAgIGDftmklJXMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
+MIIENDCCAxygAwIBAgIGDzR1USoyMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
Ak5OMTEwLwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNo
IENsb3VkMSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjAe
-Fw0xODA5MTkwNzA4MDFaFw0zNTAyMjIwNzA4MDFaMGgxCzAJBgNVBAYTAk5OMTEw
+Fw0yMjEyMjMxMjIxMzZaFw0zOTA1MjgxMjIxMzZaMGgxCzAJBgNVBAYTAk5OMTEw
LwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3Vk
MSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBAOFM2XQapKNCV6R6LnQCCElqah3b3sND
-1khgEjDt1m50FoEWTlC5bLk2DRmk94WZQEYmRjOGzgwnceSPD7Q6mW2veEi3y8TT
-YH3QF28jvInAvBa4lPCyEI3I4DWX7Y/G25vNqvaMRdwP7qB4Er72ffT3toxO5X0y
-6Pf3HgRGngjNy+zimsM1P86hAeMQCuzZqxMJ6+Y5a5Iwxwi9ijLvC7JhbxFDlc8x
-6hkBzBpt0tVXNdrArkY50zPt+MAerT1ob6hTJKzW+d0rUVB35LddrUiAXWVX5esH
-gn3Lck8GajTUOMhr7Yo6aF4143gU2l2Gn+XUHN2QwnyiANSVZQSF/4MCAwEAAaNC
-MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLK
-uktGBKd1iizoDlSUvBJlpnvOMA0GCSqGSIb3DQEBCwUAA4IBAQAsgqT/IfP8ump6
-EbFW1JqPTb8jz9AL1OJveqdAGsY5+tuuMqs9u59F0UallSc81InSQ4RMQ3D/Fjyo
-jOZcCvsgHafDkGZB776R3p2bXRvxWUTTdzKjbG4kpC2oUF+GgUf614Cn5/3yAL24
-zLUvzFDHRnQ6BRLM4sTQ5rBZoRZz/z0S9Ym+lc3MQyI7KGMNm2na0yh1VZc6Xb4s
-fTBnd09RoLkHGJ9HI9Zz3BJ/DfotWtAqiQsp3aa6oKH1E+LdSOQWx9bDaC9PQOXa
-zwQThrUQg/5FWU2SPyC+Rcq298yREpLfABETFAthmmSSUPQ/dF+eJLr/z9cWUcl1
-lell6Y20
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBAKHYYBXRWwk70U55QAoDgQdgumsD9IdO
+Hul3seqDZlbEbBlez2QjRAP10CfhHaUF3aXywZoo4jFmonvgO7vztAa0Q5d7gDyW
+G+2FfIsuD2K5U2k9KxmvFtPiqdMt8uyxMXYt2Xhnkc4WUuNoNPG88F6ZvyjPkYgx
+pkjM+4Shh4WLCBjrOek07hs6o70qd2NQyIhr8dPEtyXbf+u5hHOohoppfUBawySB
+EI2Xrs5F6137FDFbocLRqi9EoEIoOBbHQh7d2w+p2XAlzNq+6YyMhEijq68gen6z
+CakFDc74m8J36IL4alYh25KnCjzxDKDUnIzAYitivF7Eul46/BoFSe8CAwEAAaOB
+4zCB4DAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
+h8uxMy7BZ35x4+UrTE2ks27SW6kwHwYDVR0jBBgwFoAUh8uxMy7BZ35x4+UrTE2k
+s27SW6kwQwYIKwYBBQUHAQEENzA1MDMGCCsGAQUFBzAChidodHRwOi8vdGVzdC5j
+dXJsLnNlL2NhL0VkZWxDdXJsUm9vdC5jZXIwOAYDVR0fBDEwLzAtoCugKYYnaHR0
+cDovL3Rlc3QuY3VybC5zZS9jYS9FZGVsQ3VybFJvb3QuY3JsMA0GCSqGSIb3DQEB
+CwUAA4IBAQCGGb09Ek9rjI4bctuPm2dolvj0rdmgtUgOGfY0CZKluKtwxmtEvvf9
+pHWtFsStVKrENuaGh4QN2R/qtZU6aWACL1yiox3JKPZ4Is3jHUc3oKCkijvaUKkS
+4OTnH7a8fui2obeZn5gswXDbMuqCRf9x6jY0Zb2tzcUroqFrLqMwspXqd6kXz7/k
+30/vbXLQoZXG7+W4cA/SgrOnVEv3Lbkv3Df/900mtEtqRqP5LK1YjJbo5qSq0MEt
+Ndu1L6w0QON/2vc0+KL9b2FGafAkIDLzreJyJxpYo6p3TvoGXjRA01A5Zin2pvVA
+Oq+XIxnPWCfJj8SzWJ6HeC+nJJ4+XdFS
-----END CERTIFICATE-----
diff --git a/tests/certs/EdelCurlRoot-ca.csr b/tests/certs/EdelCurlRoot-ca.csr
index 7d5e3001a..2eeb6f055 100644
--- a/tests/certs/EdelCurlRoot-ca.csr
+++ b/tests/certs/EdelCurlRoot-ca.csr
@@ -2,16 +2,16 @@
MIICrTCCAZUCAQAwaDELMAkGA1UEBhMCTk4xMTAvBgNVBAoMKEVkZWwgQ3VybCBB
cmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQxJjAkBgNVBAMMHU5vcnRoZXJu
IE5vd2hlcmUgVHJ1c3QgQW5jaG9yMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEA4UzZdBqko0JXpHoudAIISWpqHdvew0PWSGASMO3WbnQWgRZOULlsuTYN
-GaT3hZlARiZGM4bODCdx5I8PtDqZba94SLfLxNNgfdAXbyO8icC8FriU8LIQjcjg
-NZftj8bbm82q9oxF3A/uoHgSvvZ99Pe2jE7lfTLo9/ceBEaeCM3L7OKawzU/zqEB
-4xAK7NmrEwnr5jlrkjDHCL2KMu8LsmFvEUOVzzHqGQHMGm3S1Vc12sCuRjnTM+34
-wB6tPWhvqFMkrNb53StRUHfkt12tSIBdZVfl6weCfctyTwZqNNQ4yGvtijpoXjXj
-eBTaXYaf5dQc3ZDCfKIA1JVlBIX/gwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEB
-ANpolqnyNQ2zhqURf1ImBOTKLqN77neGe01rdkMrQfNP+ZSr5pxcoOZgMjUGrhyQ
-C6RWexcjwMFvr+16bsEyiBgw/PxTziw6ozvJZkDVQanKZet9+6o8P6AzfjOfwIiU
-8OkLYDaNJ0M807fTNFWdt/yDY1WNfNAxIX3gMMJ1dRvvLvgIJVE4RRAaW/pEMHky
-sQTfExs99Xooqh3E6CWyR1bVHWuid0a02LcD2Q0bKTBmi3xyBjEaq3vXxS6j1fDs
-aWpwznwuuX+J7K+MHYJH9DQIg/QY6rQzxokZ92wJGFdzL3m+kou6++OAPu1plpTL
-im5n/e87gdjerEJgCqoP4S8=
+CgKCAQEAodhgFdFbCTvRTnlACgOBB2C6awP0h04e6Xex6oNmVsRsGV7PZCNEA/XQ
+J+EdpQXdpfLBmijiMWaie+A7u/O0BrRDl3uAPJYb7YV8iy4PYrlTaT0rGa8W0+Kp
+0y3y7LExdi3ZeGeRzhZS42g08bzwXpm/KM+RiDGmSMz7hKGHhYsIGOs56TTuGzqj
+vSp3Y1DIiGvx08S3Jdt/67mEc6iGiml9QFrDJIEQjZeuzkXrXfsUMVuhwtGqL0Sg
+Qig4FsdCHt3bD6nZcCXM2r7pjIyESKOrryB6frMJqQUNzvibwnfogvhqViHbkqcK
+PPEMoNScjMBiK2K8XsS6Xjr8GgVJ7wIDAQABoAAwDQYJKoZIhvcNAQELBQADggEB
+AGRzOAmRFC2HX9tV94v7PxAPLY8LC5IsCdk2E07gQ76kWU8B0qd3Okx970O6d9Iw
+jy27At8CIFmCwdiNpOfLv1uqtbBgitxRX6FfciN5Lu0D1wxICc2gX7tDgqLhrT8E
+fp8q7/F//UPT04l5B6b+2h210Rkzjs/EmjQt2cFGjQpGSy8nb1ey3/W91NAej7Aq
+Hrp3/64hC+0QZMpgYQpYx65LYOST+U8lnDbrlcRUQqkUmGidwbYqGQMv+Tk5TKjL
+zMOjuu/I6stoGSJGJvhrfToZazG0u9tT+sXQdbi3emXVP1tMVpkhOYvKaaCno9QR
+RREL1l6yq15NUoT030u7pvs=
-----END CERTIFICATE REQUEST-----
diff --git a/tests/certs/EdelCurlRoot-ca.der b/tests/certs/EdelCurlRoot-ca.der
index f95f7e843..9a4e2ef89 100644
--- a/tests/certs/EdelCurlRoot-ca.der
+++ b/tests/certs/EdelCurlRoot-ca.der
Binary files differ
diff --git a/tests/certs/EdelCurlRoot-ca.key b/tests/certs/EdelCurlRoot-ca.key
index bf46d1ec5..624ab3f54 100644
--- a/tests/certs/EdelCurlRoot-ca.key
+++ b/tests/certs/EdelCurlRoot-ca.key
@@ -1,27 +1,28 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEA4UzZdBqko0JXpHoudAIISWpqHdvew0PWSGASMO3WbnQWgRZO
-ULlsuTYNGaT3hZlARiZGM4bODCdx5I8PtDqZba94SLfLxNNgfdAXbyO8icC8FriU
-8LIQjcjgNZftj8bbm82q9oxF3A/uoHgSvvZ99Pe2jE7lfTLo9/ceBEaeCM3L7OKa
-wzU/zqEB4xAK7NmrEwnr5jlrkjDHCL2KMu8LsmFvEUOVzzHqGQHMGm3S1Vc12sCu
-RjnTM+34wB6tPWhvqFMkrNb53StRUHfkt12tSIBdZVfl6weCfctyTwZqNNQ4yGvt
-ijpoXjXjeBTaXYaf5dQc3ZDCfKIA1JVlBIX/gwIDAQABAoIBAQDGGcWGgjrLVnUr
-qUcZOARDUW9XK9IWjZpn7xlvrmECo8552Lwp3LDNtcoVB2mhLhxG0jad7eVU6IYL
-ewNK7M+lk0lHX1yrh1Trq0I/tgN8eFyp+cj0Tw2hLcR/O0RmTGsi9tdhi/uNQPEI
-ZivNf31HHVyEyIae7FnOVpotFk6022EElQd8F8GeeKpo9pQs8sHAVOUVC8Mf2sr+
-bFyo9nzU0XkSay72ozU9O5Iw2d5aVrN5f3NS+JG9OpzvouNwkaAMOUsLVvZlUTqY
-0ve5CY2rB3D72h4GJfM2aHi8hwj56yBOsyIhBSXNYJM8nXKEbJaK5ulVv/a7KKTk
-KzSdk/mJAoGBAPXPLLJgx0mZKXNXqSvSsvgVzcpLrJh8figoF4rMzq8+5bN9Y6KU
-Lvb2ODIm/oGCIiGDdFTYqBJ0/EpauaAJgdzIwYnMZXmVB97pmwni9KrDPDwWTOqS
-3Yzh0t4C8DAgwZE4X6Ad/fmn7V06dfJZZJynL9exPp8RF7ptJ2yOnlbdAoGBAOqk
-AfRWuPGeZL9rFkd45+j03MDHglE2xKhsbRobHANItHo7r26D/Ov7QkM+lGlqdrNg
-tTPPtHs50Ek+Sb0X31/Fj45IqQroxctpbZAaJchVl88tvKXA8fkk14a9GLiow3Bk
-UGA5DFRmsIMXEengzRJoxcHAbbciGWdeSneH49nfAoGAVMypHcyXU8Ob8ieuu+iP
-R1i2SvC6VUy1dQMHxCGNuBVZxwcd5Ut7vEUK8/pR2LndLnScIF0x9lQXaUtNOHGv
-NEypv/EcnMoWEgfDLbD3OSXrVMtYs6ABAIYzadXXqLLUNFYfXyyZnpQZJg1x/S5r
-sENZFO8XrGaIKg9YB3JYG50CgYBUQweMpmQOKNKHRz6d9hZaOyzXcg4jeiaPUTiw
-6lFaAI8HYk2yw2VdnUKDgYKshJYR/sWz0IBAzFc3Jk42wM7vxrOx5fgGuebmEHtP
-B4TP96TnusYHRE3hKdDYSyoIjlp5Dx0qIPKDkMkMmolNUvRyCvwRgzgjTvSOgXb+
-i+dQQwKBgQCKn04xYbhkMOiHxNP/DUf6+XmV1V7KbpjIySychbxcTKCV98c9q491
-YjF8FJgi2JdV5XOHWaKti2Qg/tYz7CBtqkQdeNjtfKkOUA8ZyZeiNZdPIza9tzmr
-t6mCthH1oT3jyiddhSYxyfUBW3olPhBPj8YBblmq1QHE8y2j3CNjvw==
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCh2GAV0VsJO9FO
+eUAKA4EHYLprA/SHTh7pd7Hqg2ZWxGwZXs9kI0QD9dAn4R2lBd2l8sGaKOIxZqJ7
+4Du787QGtEOXe4A8lhvthXyLLg9iuVNpPSsZrxbT4qnTLfLssTF2Ldl4Z5HOFlLj
+aDTxvPBemb8oz5GIMaZIzPuEoYeFiwgY6znpNO4bOqO9KndjUMiIa/HTxLcl23/r
+uYRzqIaKaX1AWsMkgRCNl67ORetd+xQxW6HC0aovRKBCKDgWx0Ie3dsPqdlwJcza
+vumMjIRIo6uvIHp+swmpBQ3O+JvCd+iC+GpWIduSpwo88Qyg1JyMwGIrYrxexLpe
+OvwaBUnvAgMBAAECggEADFrjQucfhv3tBYuWCu2njPOiZ4b+xNF+5J3BlECBsIAA
+LJOjS2axy4eZY2H5DF79Q6zbgLQ8SD8oikJc7QU2qgha3JaN/JINAb3d+xYCEKxL
+JM6JmsVV/cjg5AEu+UixmO75Ggr2A4CKxVdwK0AcLWyZPjlSR85aflY/oSlfmh8a
+txULdID0fH+/tIVQE/xlS9M8xfHxqQQyoBsWkwPPcxhgPRgPpTxo/a12iZk2z+lV
+F/1TZxyb0MWRktVgHQwhmXSnEguosspjk6fqDXwM14WJLQA1XdFdblI3aiHmlc5h
+qanreSsaUgYsV1WvVxh1qfoljm6pUzoYvOChdz62SQKBgQDiavOlubV+kgFU4he+
+LzdaZJUlq6JO4dbbcgE4lZBnoJp2Ga5V1OvBnBcrdtiHO46V2Durq66YHa/tZfTN
+6RlA6GyPVLb6qlwbCYUnpSfuwIVJx7Zty7FrnOn9oRlwLpQQMG4AOsS3E+JY1vQZ
+9+8htuT9OprjY2Mx6wLm2EuZ3QKBgQC2/aZll+nRMerAsZLsTm1idkvxztvDPyoQ
+yQwGlDy79OvezjzXEAczGk/XDSRnGIptZQacxw5z/Lw8IHaaTp7GPFBrD7Lr84dc
+QopdLqqeQJ2n7WGjmJ3gLJCp7NHHP+xDkipc2Xq+nFGlS+PxVzB0hOq3wQdPV54e
+h+x9CNDkOwKBgA3TfiFmn8Ck5dPrIowIkhbBAaKVQooSnG42HgD4kSLi2cvQcabo
+I6VlBL0wurQ3XNOlqq8nArhjR7T1fud8DoC6MLbn82yHLqyv/iOXoEKiGwGQYoF9
+6M2rfVZxmf4RuhTrACyfahfL7QyDw9A6Ja4nXwBfrcmo7gvEUB8MokE5AoGBAKbY
+sZ5SG/wE4oGdp1PU0oGDUQ2CSfhFIGq7lT5ubM4HrASz0N9amuXqaL+xGO7zfkvu
+YFAUY0Y4O70q8FkTtEsVdVGYt8/RdSsW9KevxBuU2OrjUzJiFhjvKVv2NPPSge6+
+V+fe177yMrNfdc94axLimky/MJYUUnSOBH+gyS4/AoGBALJt7WqFnb3iazOgVUDd
+ZGOJUuBnlgS6MK/YxP+8csq+MPnGVVGruXx72hzWe3bJ8QM16QvHUPC9RNgnclXB
+Ekx45SNSG1g//rxHwCJAgcTlnhiTZQ21Fn3V2EckjOa/Z4udk/7PxFRto1beNznK
+nW2eB0xvsK+qq5yc3TQClWgc
+-----END PRIVATE KEY-----
diff --git a/tests/certs/EdelCurlRoot-ca.prm b/tests/certs/EdelCurlRoot-ca.prm
index 2e8104730..c8e248b3e 100644
--- a/tests/certs/EdelCurlRoot-ca.prm
+++ b/tests/certs/EdelCurlRoot-ca.prm
@@ -15,3 +15,16 @@ commonName_value = Northern Nowhere Trust Anchor
basicConstraints = critical,CA:true
keyUsage = critical,keyCertSign,cRLSign
subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid:always
+authorityInfoAccess = @issuer_info
+crlDistributionPoints = @crl_info
+
+[ crl_ext ]
+authorityKeyIdentifier = keyid:always
+authorityInfoAccess = @issuer_info
+
+[ issuer_info ]
+caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer
+
+[ crl_info ]
+URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl \ No newline at end of file
diff --git a/tests/certs/Makefile.am b/tests/certs/Makefile.am
index 0563e079e..e21cdd5c4 100644
--- a/tests/certs/Makefile.am
+++ b/tests/certs/Makefile.am
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -30,7 +30,10 @@ CERTCONFIGS = \
EdelCurlRoot-ca.cnf \
Server-localhost-sv.prm \
Server-localhost.nn-sv.prm \
- Server-localhost0h-sv.prm
+ Server-localhost0h-sv.prm \
+ Server-localhost-firstSAN-sv.prm \
+ Server-localhost-lastSAN-sv.prm \
+ stunnel-sv.prm
GENERATEDCERTS = \
EdelCurlRoot-ca.cacert \
@@ -82,7 +85,16 @@ GENERATEDCERTS = \
Server-localhost-lastSAN-sv.key \
Server-localhost-lastSAN-sv.pem \
Server-localhost-lastSAN-sv.pub.der \
- Server-localhost-lastSAN-sv.pub.pem
+ Server-localhost-lastSAN-sv.pub.pem \
+ stunnel-sv.crl \
+ stunnel-sv.crt \
+ stunnel-sv.csr \
+ stunnel-sv.der \
+ stunnel-sv.dhp \
+ stunnel-sv.key \
+ stunnel-sv.pem \
+ stunnel-sv.der \
+ stunnel-sv.pub.pem
SRPFILES = \
srp-verifier-conf \
@@ -97,7 +109,8 @@ clean-certs:
build-certs: $(srcdir)/EdelCurlRoot-ca.cacert $(srcdir)/Server-localhost-sv.pem \
$(srcdir)/Server-localhost.nn-sv.pem $(srcdir)/Server-localhost0h-sv.pem \
- $(srcdir)/Server-localhost-firstSAN-sv.pem $(srcdir)/Server-localhost-lastSAN-sv.pem
+ $(srcdir)/Server-localhost-firstSAN-sv.pem $(srcdir)/Server-localhost-lastSAN-sv.pem \
+ $(srcdir)/stunnel-sv.pem ../stunnel.pem
$(srcdir)/EdelCurlRoot-ca.cacert:
cd $(srcdir); scripts/genroot.sh EdelCurlRoot
@@ -115,4 +128,10 @@ $(srcdir)/Server-localhost-firstSAN-sv.pem: $(srcdir)/EdelCurlRoot-ca.cacert
cd $(srcdir); scripts/genserv.sh Server-localhost-firstSAN EdelCurlRoot
$(srcdir)/Server-localhost-lastSAN-sv.pem: $(srcdir)/EdelCurlRoot-ca.cacert
- cd $(srcdir); scripts/genserv.sh Server-localhost-firstSAN EdelCurlRoot
+ cd $(srcdir); scripts/genserv.sh Server-localhost-lastSAN EdelCurlRoot
+
+$(srcdir)/stunnel-sv.pem: $(srcdir)/EdelCurlRoot-ca.cacert
+ cd $(srcdir); scripts/genserv.sh stunnel EdelCurlRoot
+
+../stunnel.pem: $(srcdir)/stunnel-sv.pem
+ cp $< $@
diff --git a/tests/certs/Makefile.in b/tests/certs/Makefile.in
index a631c1b51..58acb3c1e 100644
--- a/tests/certs/Makefile.in
+++ b/tests/certs/Makefile.in
@@ -95,7 +95,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.m4 \
$(top_srcdir)/m4/curl-confopts.m4 \
$(top_srcdir)/m4/curl-functions.m4 \
$(top_srcdir)/m4/curl-gnutls.m4 \
- $(top_srcdir)/m4/curl-mbedtls.m4 $(top_srcdir)/m4/curl-nss.m4 \
+ $(top_srcdir)/m4/curl-mbedtls.m4 \
$(top_srcdir)/m4/curl-openssl.m4 \
$(top_srcdir)/m4/curl-override.m4 \
$(top_srcdir)/m4/curl-reentrant.m4 \
@@ -205,6 +205,8 @@ am__relativize = \
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APACHECTL = @APACHECTL@
+APXS = @APXS@
AR = @AR@
AR_FLAGS = @AR_FLAGS@
AS = @AS@
@@ -213,6 +215,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@
+CADDY = @CADDY@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -274,6 +277,8 @@ HAVE_LIBZ = @HAVE_LIBZ@
HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
HAVE_PROTO_BSDSOCKET_H = @HAVE_PROTO_BSDSOCKET_H@
HAVE_ZSTD = @HAVE_ZSTD@
+HTTPD = @HTTPD@
+HTTPD_NGHTTPX = @HTTPD_NGHTTPX@
IDN_ENABLED = @IDN_ENABLED@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -301,7 +306,6 @@ MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
NROFF = @NROFF@
-NSS_LIBS = @NSS_LIBS@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
@@ -332,6 +336,7 @@ SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@
SUPPORT_FEATURES = @SUPPORT_FEATURES@
SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_NGHTTPX = @TEST_NGHTTPX@
USE_ARES = @USE_ARES@
USE_BEARSSL = @USE_BEARSSL@
USE_GNUTLS = @USE_GNUTLS@
@@ -345,9 +350,8 @@ USE_NGHTTP2 = @USE_NGHTTP2@
USE_NGHTTP3 = @USE_NGHTTP3@
USE_NGTCP2 = @USE_NGTCP2@
USE_NGTCP2_CRYPTO_GNUTLS = @USE_NGTCP2_CRYPTO_GNUTLS@
-USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@
+USE_NGTCP2_CRYPTO_QUICTLS = @USE_NGTCP2_CRYPTO_QUICTLS@
USE_NGTCP2_CRYPTO_WOLFSSL = @USE_NGTCP2_CRYPTO_WOLFSSL@
-USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_RUSTLS = @USE_RUSTLS@
@@ -426,7 +430,7 @@ top_srcdir = @top_srcdir@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -449,7 +453,10 @@ CERTCONFIGS = \
EdelCurlRoot-ca.cnf \
Server-localhost-sv.prm \
Server-localhost.nn-sv.prm \
- Server-localhost0h-sv.prm
+ Server-localhost0h-sv.prm \
+ Server-localhost-firstSAN-sv.prm \
+ Server-localhost-lastSAN-sv.prm \
+ stunnel-sv.prm
GENERATEDCERTS = \
EdelCurlRoot-ca.cacert \
@@ -501,7 +508,16 @@ GENERATEDCERTS = \
Server-localhost-lastSAN-sv.key \
Server-localhost-lastSAN-sv.pem \
Server-localhost-lastSAN-sv.pub.der \
- Server-localhost-lastSAN-sv.pub.pem
+ Server-localhost-lastSAN-sv.pub.pem \
+ stunnel-sv.crl \
+ stunnel-sv.crt \
+ stunnel-sv.csr \
+ stunnel-sv.der \
+ stunnel-sv.dhp \
+ stunnel-sv.key \
+ stunnel-sv.pem \
+ stunnel-sv.der \
+ stunnel-sv.pub.pem
SRPFILES = \
srp-verifier-conf \
@@ -829,7 +845,8 @@ clean-certs:
build-certs: $(srcdir)/EdelCurlRoot-ca.cacert $(srcdir)/Server-localhost-sv.pem \
$(srcdir)/Server-localhost.nn-sv.pem $(srcdir)/Server-localhost0h-sv.pem \
- $(srcdir)/Server-localhost-firstSAN-sv.pem $(srcdir)/Server-localhost-lastSAN-sv.pem
+ $(srcdir)/Server-localhost-firstSAN-sv.pem $(srcdir)/Server-localhost-lastSAN-sv.pem \
+ $(srcdir)/stunnel-sv.pem ../stunnel.pem
$(srcdir)/EdelCurlRoot-ca.cacert:
cd $(srcdir); scripts/genroot.sh EdelCurlRoot
@@ -847,7 +864,13 @@ $(srcdir)/Server-localhost-firstSAN-sv.pem: $(srcdir)/EdelCurlRoot-ca.cacert
cd $(srcdir); scripts/genserv.sh Server-localhost-firstSAN EdelCurlRoot
$(srcdir)/Server-localhost-lastSAN-sv.pem: $(srcdir)/EdelCurlRoot-ca.cacert
- cd $(srcdir); scripts/genserv.sh Server-localhost-firstSAN EdelCurlRoot
+ cd $(srcdir); scripts/genserv.sh Server-localhost-lastSAN EdelCurlRoot
+
+$(srcdir)/stunnel-sv.pem: $(srcdir)/EdelCurlRoot-ca.cacert
+ cd $(srcdir); scripts/genserv.sh stunnel EdelCurlRoot
+
+../stunnel.pem: $(srcdir)/stunnel-sv.pem
+ cp $< $@
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/tests/certs/Server-localhost-firstSAN-sv.crl b/tests/certs/Server-localhost-firstSAN-sv.crl
index 66b2ad48d..1944a4a03 100644
--- a/tests/certs/Server-localhost-firstSAN-sv.crl
+++ b/tests/certs/Server-localhost-firstSAN-sv.crl
@@ -1,15 +1,14 @@
-----BEGIN X509 CRL-----
-MIICQTCCASkCAQEwDQYJKoZIhvcNAQEFBQAwaDELMAkGA1UEBhMCTk4xMTAvBgNV
+MIICKDCCARACAQEwDQYJKoZIhvcNAQELBQAwaDELMAkGA1UEBhMCTk4xMTAvBgNV
BAoMKEVkZWwgQ3VybCBBcmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQxJjAk
-BgNVBAMMHU5vcnRoZXJuIE5vd2hlcmUgVHJ1c3QgQW5jaG9yFw0xODA5MTkwNzE0
-NDhaFw0xODEwMTkwNzE0NDhaMH0wFwIGDftmwfBTFw0xODA5MTkwNzEzMTRaMBcC
-Bg37ZsrxnhcNMTgwOTE5MDcxNDEyWjAXAgYN+2bMn24XDTE4MDkxOTA3MTQyM1ow
-FwIGDftmzumEFw0xODA5MTkwNzE0MzhaMBcCBg37ZtBwRBcNMTgwOTE5MDcxNDQ4
-WqAOMAwwCgYDVR0UBAMCAQEwDQYJKoZIhvcNAQEFBQADggEBAA0CKirTrPR1TyFP
-60Z0iW6b7zZFRIiRt+HBOntYdWLFUin1TpbDAGh3ddUPgQ0eGNuvnDA2FZLP787S
-JhXr65bonMEe7p17Cbh2swycdAuQsMYP6lFg1aIdjXB9/g+unG7KsB16BGYzalOs
-4crSfP6Z11JnFFmVp9jOOwL65to/3GQwVxfWamEKDFOMrPba6dkTAU9+OCV1CZYd
-anEjWrewmTj8nD7nb5fZ3fRQPVvwLbtkoGFmSHg8Qy9uDBGdRrw0V2w+ntkQMIJ9
-ILhQZDcaIN4MsnBTn/esrfvFVKomf9i78SCEhRvmTWmpYasI4oJzfmlLb1Dh6JPG
-59JdagI=
+BgNVBAMMHU5vcnRoZXJuIE5vd2hlcmUgVHJ1c3QgQW5jaG9yFw0yMjEyMjMxMjIx
+MzhaFw0yMzAxMjIxMjIxMzhaMGQwFwIGDzR1USo8Fw0yMjEyMjMxMjIxMzZaMBcC
+Bg80dVFRYRcNMjIxMjIzMTIyMTM3WjAXAgYPNHVRUXUXDTIyMTIyMzEyMjEzN1ow
+FwIGDzR1UVGJFw0yMjEyMjMxMjIxMzhaoA4wDDAKBgNVHRQEAwIBATANBgkqhkiG
+9w0BAQsFAAOCAQEANTZwNcoHukPV2Wf9ykTUELJtpH3OCzinsOBm/h0LRWp06NAm
+0YJcStMclU7syd6izwPZPI9HT5tPQKHaxJDa8rZH4XRE8bSIAHQacj+22mcLV1EB
+5TdRRRHA6UvhebO8f6cf32SQIJ821LDW1FeFj3VvJqRfM6P9E0BNiCGvxJCFAE4K
++/uN5v/x12kKDl3+7wqh1q36qM99QRbNbWh+3ndxG5Gm8Zl2MWLstMLVDI0SjipZ
+mnMpQ0py5IdiStCY8iYiTk48QUqQ9Jki+bmjNwG05HQUVdUiwwtJhlYhyTpNIBE8
+MB+39cFiwpJ7YbFC8Quhppg/isJ2ZaBmTg7zpA==
-----END X509 CRL-----
diff --git a/tests/certs/Server-localhost-firstSAN-sv.crt b/tests/certs/Server-localhost-firstSAN-sv.crt
index ba53c28c1..6eadce2ca 100644
--- a/tests/certs/Server-localhost-firstSAN-sv.crt
+++ b/tests/certs/Server-localhost-firstSAN-sv.crt
@@ -1,41 +1,41 @@
Certificate:
Data:
Version: 3 (0x2)
- Serial Number: 15373412888644 (0xdfb66d07044)
+ Serial Number: 16717980979593 (0xf3475515189)
Signature Algorithm: sha256WithRSAEncryption
Issuer:
countryName = NN
organizationName = Edel Curl Arctic Illudium Research Cloud
commonName = Northern Nowhere Trust Anchor
Validity
- Not Before: Sep 19 07:14:48 2018 GMT
- Not After : Dec 6 07:14:48 2026 GMT
+ Not Before: Dec 23 12:21:38 2022 GMT
+ Not After : Mar 11 12:21:38 2031 GMT
Subject:
countryName = NN
organizationName = Edel Curl Arctic Illudium Research Cloud
commonName = localhost.nn
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
- RSA Public-Key: (2048 bit)
+ Public-Key: (2048 bit)
Modulus:
- 00:b5:a0:56:65:ff:1a:1d:9a:4d:f1:17:be:14:c7:
- 32:fe:51:a0:a3:22:26:59:6c:d5:0c:74:a9:6c:26:
- 1c:a6:92:66:1d:96:0e:59:cb:7d:05:01:b0:31:13:
- dc:db:e6:81:f1:79:43:80:08:37:74:2e:51:82:b6:
- 87:7c:fd:87:2d:fd:d0:d3:42:32:c9:a8:d1:cc:e0:
- 37:7f:e2:3e:65:92:d2:4d:fd:79:ed:ef:23:d5:31:
- 2f:fb:ef:5f:03:68:49:6a:7c:aa:e9:70:23:6b:43:
- 95:bd:5e:d1:f8:16:a7:d5:e0:bd:7f:63:44:a4:2c:
- 4d:34:16:32:11:12:ce:df:16:a4:d8:06:a5:cb:d4:
- 4c:cf:29:ac:67:c1:82:26:c1:0b:ff:44:af:f3:b2:
- 89:31:a2:10:fd:a5:32:f8:04:4e:6b:32:1d:24:5e:
- 83:89:3d:49:9c:34:24:5a:13:dd:2c:0b:2c:5c:b3:
- 5f:be:fc:6d:db:be:c3:c4:40:6d:e8:51:bf:e1:fe:
- 3b:f0:28:42:24:f5:68:c4:2e:00:fa:21:34:f0:d1:
- 94:3f:65:50:19:8d:be:cf:07:2a:08:4f:68:70:77:
- f6:14:78:45:2f:70:da:47:26:51:73:1d:bb:b2:93:
- e1:23:77:6d:a0:47:4e:34:c7:af:fd:a9:53:41:ea:
- e7:73
+ 00:aa:14:6e:3d:82:1c:28:cd:8f:80:af:50:ed:17:
+ 97:6d:e6:a8:61:3e:ac:a8:ac:13:ce:99:eb:29:2c:
+ 49:73:f9:12:40:35:c4:79:84:0d:9e:b0:28:c4:9f:
+ 64:e3:c1:6d:2d:71:11:5d:4b:14:61:20:4b:18:a1:
+ cb:21:6d:9e:78:1b:11:d2:83:1c:89:75:d5:77:3d:
+ ca:c8:83:17:74:5c:44:b2:1f:ac:f3:8b:c5:6a:34:
+ 7a:86:ab:08:f5:3d:79:72:ab:36:48:23:de:2b:ba:
+ 4c:e0:ef:18:91:64:97:c6:09:92:ed:26:d2:a7:0d:
+ a2:21:1f:34:06:c7:99:17:b2:50:96:b6:0f:9b:ed:
+ 45:ff:be:81:47:29:e5:f3:49:db:21:65:44:de:8d:
+ 2b:12:07:12:0d:59:cc:bb:4d:1a:33:c0:7a:7e:e5:
+ 5b:06:50:62:b2:7f:8f:5c:6d:91:cb:6a:5c:e3:e4:
+ ae:b9:ab:0d:36:ef:0a:d5:6d:07:5b:25:58:20:0d:
+ d2:4b:25:0f:e8:11:f5:ce:19:b1:29:c6:d3:49:d7:
+ f2:4a:78:52:d2:c5:fc:4f:11:63:f1:4e:77:ae:0a:
+ 87:65:45:49:b6:ac:21:1b:c8:94:c1:0c:e7:13:e6:
+ be:f3:ff:a2:bd:68:4c:c6:34:04:2b:fc:ff:c3:e8:
+ 23:57
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Alternative Name:
@@ -45,48 +45,56 @@ Certificate:
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Subject Key Identifier:
- 70:FA:B9:27:7B:97:78:48:80:FC:D7:D7:31:90:12:ED:E5:4F:90:35
+ DB:7A:18:5E:83:AC:D3:48:C9:00:99:3C:EB:BF:A6:21:F0:39:80:CC
X509v3 Authority Key Identifier:
- keyid:12:CA:BA:4B:46:04:A7:75:8A:2C:E8:0E:54:94:BC:12:65:A6:7B:CE
-
+ 87:CB:B1:33:2E:C1:67:7E:71:E3:E5:2B:4C:4D:A4:B3:6E:D2:5B:A9
X509v3 Basic Constraints:
CA:FALSE
+ Authority Information Access:
+ CA Issuers - URI:http://test.curl.se/ca/EdelCurlRoot.cer
+ X509v3 CRL Distribution Points:
+ Full Name:
+ URI:http://test.curl.se/ca/EdelCurlRoot.crl
Signature Algorithm: sha256WithRSAEncryption
- 8f:e0:79:cb:0a:9d:dd:a3:9b:56:6f:74:75:01:31:ec:01:94:
- c1:6b:76:69:34:da:db:a6:1f:50:07:2f:2a:eb:44:83:23:f4:
- 01:81:f1:aa:f9:65:fe:8c:08:4a:ef:75:36:17:d2:ce:81:f1:
- 2a:ca:cc:5b:2c:c5:fc:30:c2:cf:bc:29:1f:82:17:d4:9f:2a:
- e9:a6:23:9c:19:36:86:e9:46:a2:10:86:65:9a:b5:60:d5:8b:
- ec:05:d3:73:6d:50:a1:38:43:0f:0f:ea:1b:0d:ba:c0:36:2e:
- d4:bd:f7:4e:1d:df:fc:24:8e:50:f2:40:a5:c7:3c:7e:5a:8a:
- 88:1d:f9:28:49:57:42:07:55:1e:ca:94:7c:d9:56:b1:3b:38:
- 62:56:58:6a:ea:fd:30:47:1e:e9:2a:35:e2:d3:57:85:29:6e:
- 06:b3:ad:e9:6a:6e:d1:06:9c:c5:d4:1f:62:fb:fa:1c:e9:f5:
- a7:18:c0:67:29:e0:25:fc:c6:ff:82:76:e3:2f:d6:b2:5f:54:
- a0:8a:93:e4:b2:13:60:f7:96:45:f5:db:b8:95:99:34:62:14:
- cd:e6:58:a3:5c:d6:92:21:f4:ce:dd:da:02:67:12:e7:f6:50:
- 51:e1:8e:9b:84:2f:e6:57:21:81:6a:00:bb:14:bb:29:37:c9:
- 80:c3:74:a2
+ Signature Value:
+ 75:0d:9b:eb:8a:df:ca:a7:7c:9d:9e:6a:eb:30:10:24:12:1b:
+ 81:f6:cd:b0:a0:f8:de:10:f1:6e:b8:57:3a:3a:b0:a4:8c:1d:
+ c1:8f:95:22:e3:1f:8b:3a:21:89:e5:96:08:3d:83:33:37:66:
+ 48:03:f7:98:dd:2f:6d:09:7a:82:26:c1:eb:16:b9:5e:5b:f5:
+ 67:4c:a0:e7:93:e7:2e:d4:53:b8:77:5f:5e:6a:3a:d9:06:19:
+ ca:85:ca:7c:09:61:0d:08:8b:6a:b3:e2:03:8c:ea:b1:55:b2:
+ 30:9b:aa:66:0e:6e:d7:0a:0a:22:ca:6d:8d:d8:53:a8:bc:df:
+ 13:29:d3:b6:1e:9f:3e:a1:8d:f3:8c:48:bf:71:e9:4e:f4:76:
+ ed:77:97:3f:59:27:ca:bb:5b:7c:58:23:82:e7:b5:2d:39:02:
+ 9f:52:07:2f:7b:17:6d:c8:af:90:f5:ed:81:99:a9:cf:80:fb:
+ eb:ba:9c:bc:9a:df:c5:04:78:2c:73:73:bf:95:23:cf:fb:c9:
+ 3e:fa:5b:ee:02:39:8e:09:78:ca:89:08:fd:83:77:37:72:01:
+ 6c:dd:fb:eb:70:20:df:87:28:b3:0f:a0:c5:b3:70:fb:5d:38:
+ 72:23:46:7f:f5:d8:fc:b6:67:72:82:e5:ce:29:f5:b5:34:db:
+ a3:d5:fe:20
-----BEGIN CERTIFICATE-----
-MIID3jCCAsagAwIBAgIGDftm0HBEMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
+MIIEXzCCA0egAwIBAgIGDzR1UVGJMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
Ak5OMTEwLwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNo
IENsb3VkMSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjAe
-Fw0xODA5MTkwNzE0NDhaFw0yNjEyMDYwNzE0NDhaMFcxCzAJBgNVBAYTAk5OMTEw
+Fw0yMjEyMjMxMjIxMzhaFw0zMTAzMTExMjIxMzhaMFcxCzAJBgNVBAYTAk5OMTEw
LwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3Vk
MRUwEwYDVQQDDAxsb2NhbGhvc3Qubm4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQC1oFZl/xodmk3xF74UxzL+UaCjIiZZbNUMdKlsJhymkmYdlg5Zy30F
-AbAxE9zb5oHxeUOACDd0LlGCtod8/Yct/dDTQjLJqNHM4Dd/4j5lktJN/Xnt7yPV
-MS/7718DaElqfKrpcCNrQ5W9XtH4FqfV4L1/Y0SkLE00FjIREs7fFqTYBqXL1EzP
-KaxnwYImwQv/RK/zsokxohD9pTL4BE5rMh0kXoOJPUmcNCRaE90sCyxcs1++/G3b
-vsPEQG3oUb/h/jvwKEIk9WjELgD6ITTw0ZQ/ZVAZjb7PByoIT2hwd/YUeEUvcNpH
-JlFzHbuyk+Ejd22gR040x6/9qVNB6udzAgMBAAGjgZ4wgZswLAYDVR0RBCUwI4IJ
-bG9jYWxob3N0ggpsb2NhbGhvc3Qxggpsb2NhbGhvc3QyMAsGA1UdDwQEAwIDqDAT
-BgNVHSUEDDAKBggrBgEFBQcDATAdBgNVHQ4EFgQUcPq5J3uXeEiA/NfXMZAS7eVP
-kDUwHwYDVR0jBBgwFoAUEsq6S0YEp3WKLOgOVJS8EmWme84wCQYDVR0TBAIwADAN
-BgkqhkiG9w0BAQsFAAOCAQEAj+B5ywqd3aObVm90dQEx7AGUwWt2aTTa26YfUAcv
-KutEgyP0AYHxqvll/owISu91NhfSzoHxKsrMWyzF/DDCz7wpH4IX1J8q6aYjnBk2
-hulGohCGZZq1YNWL7AXTc21QoThDDw/qGw26wDYu1L33Th3f/CSOUPJApcc8flqK
-iB35KElXQgdVHsqUfNlWsTs4YlZYaur9MEce6So14tNXhSluBrOt6Wpu0QacxdQf
-Yvv6HOn1pxjAZyngJfzG/4J24y/Wsl9UoIqT5LITYPeWRfXbuJWZNGIUzeZYo1zW
-kiH0zt3aAmcS5/ZQUeGOm4Qv5lchgWoAuxS7KTfJgMN0og==
+ggEKAoIBAQCqFG49ghwozY+Ar1DtF5dt5qhhPqyorBPOmespLElz+RJANcR5hA2e
+sCjEn2TjwW0tcRFdSxRhIEsYocshbZ54GxHSgxyJddV3PcrIgxd0XESyH6zzi8Vq
+NHqGqwj1PXlyqzZII94rukzg7xiRZJfGCZLtJtKnDaIhHzQGx5kXslCWtg+b7UX/
+voFHKeXzSdshZUTejSsSBxINWcy7TRozwHp+5VsGUGKyf49cbZHLalzj5K65qw02
+7wrVbQdbJVggDdJLJQ/oEfXOGbEpxtNJ1/JKeFLSxfxPEWPxTneuCodlRUm2rCEb
+yJTBDOcT5r7z/6K9aEzGNAQr/P/D6CNXAgMBAAGjggEeMIIBGjAsBgNVHREEJTAj
+gglsb2NhbGhvc3SCCmxvY2FsaG9zdDGCCmxvY2FsaG9zdDIwCwYDVR0PBAQDAgOo
+MBMGA1UdJQQMMAoGCCsGAQUFBwMBMB0GA1UdDgQWBBTbehheg6zTSMkAmTzrv6Yh
+8DmAzDAfBgNVHSMEGDAWgBSHy7EzLsFnfnHj5StMTaSzbtJbqTAJBgNVHRMEAjAA
+MEMGCCsGAQUFBwEBBDcwNTAzBggrBgEFBQcwAoYnaHR0cDovL3Rlc3QuY3VybC5z
+ZS9jYS9FZGVsQ3VybFJvb3QuY2VyMDgGA1UdHwQxMC8wLaAroCmGJ2h0dHA6Ly90
+ZXN0LmN1cmwuc2UvY2EvRWRlbEN1cmxSb290LmNybDANBgkqhkiG9w0BAQsFAAOC
+AQEAdQ2b64rfyqd8nZ5q6zAQJBIbgfbNsKD43hDxbrhXOjqwpIwdwY+VIuMfizoh
+ieWWCD2DMzdmSAP3mN0vbQl6gibB6xa5Xlv1Z0yg55PnLtRTuHdfXmo62QYZyoXK
+fAlhDQiLarPiA4zqsVWyMJuqZg5u1woKIsptjdhTqLzfEynTth6fPqGN84xIv3Hp
+TvR27XeXP1knyrtbfFgjgue1LTkCn1IHL3sXbcivkPXtgZmpz4D767qcvJrfxQR4
+LHNzv5Ujz/vJPvpb7gI5jgl4yokI/YN3N3IBbN3763Ag34cosw+gxbNw+104ciNG
+f/XY/LZncoLlzin1tTTbo9X+IA==
-----END CERTIFICATE-----
diff --git a/tests/certs/Server-localhost-firstSAN-sv.csr b/tests/certs/Server-localhost-firstSAN-sv.csr
index d8aa70bd1..031639c5a 100644
--- a/tests/certs/Server-localhost-firstSAN-sv.csr
+++ b/tests/certs/Server-localhost-firstSAN-sv.csr
@@ -1,16 +1,16 @@
-----BEGIN CERTIFICATE REQUEST-----
MIICnDCCAYQCAQAwVzELMAkGA1UEBhMCTk4xMTAvBgNVBAoMKEVkZWwgQ3VybCBB
cmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQxFTATBgNVBAMMDGxvY2FsaG9z
-dC5ubjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWgVmX/Gh2aTfEX
-vhTHMv5RoKMiJlls1Qx0qWwmHKaSZh2WDlnLfQUBsDET3NvmgfF5Q4AIN3QuUYK2
-h3z9hy390NNCMsmo0czgN3/iPmWS0k39ee3vI9UxL/vvXwNoSWp8qulwI2tDlb1e
-0fgWp9XgvX9jRKQsTTQWMhESzt8WpNgGpcvUTM8prGfBgibBC/9Er/OyiTGiEP2l
-MvgETmsyHSReg4k9SZw0JFoT3SwLLFyzX778bdu+w8RAbehRv+H+O/AoQiT1aMQu
-APohNPDRlD9lUBmNvs8HKghPaHB39hR4RS9w2kcmUXMdu7KT4SN3baBHTjTHr/2p
-U0Hq53MCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQBt9eE5YhGU2bhKrDvnOlCW
-2/5QFLzKYgZQHf3v+bK4DzhPFZSLHkls5oV+MbAms/CdU1t4uA9J63DIlfDEe302
-k5m4NJ/v4NvpQtHVheMi6BkK+BQWnV/BVTv85N550wi2BtkxRqtEPyJu6XDbIgPp
-nUP9TCVPjgM1/njekHLD2fm8NBFwFaKBLsw2GSSm7mpdwyhOxTdwOHbwpei5xR/9
-U0OtS2NJv0KIiZS0GyGoBK2VN6iwUTPBEuxTUNfpRoboknwtY0f0RfRXeYZzAelx
-OL7UNvFt1njk4pY8YOAVKqHszWGV46c5XalMQDJpwP7xzc52W+q9x4psx3br4J3u
+dC5ubjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKoUbj2CHCjNj4Cv
+UO0Xl23mqGE+rKisE86Z6yksSXP5EkA1xHmEDZ6wKMSfZOPBbS1xEV1LFGEgSxih
+yyFtnngbEdKDHIl11Xc9ysiDF3RcRLIfrPOLxWo0eoarCPU9eXKrNkgj3iu6TODv
+GJFkl8YJku0m0qcNoiEfNAbHmReyUJa2D5vtRf++gUcp5fNJ2yFlRN6NKxIHEg1Z
+zLtNGjPAen7lWwZQYrJ/j1xtkctqXOPkrrmrDTbvCtVtB1slWCAN0kslD+gR9c4Z
+sSnG00nX8kp4UtLF/E8RY/FOd64Kh2VFSbasIRvIlMEM5xPmvvP/or1oTMY0BCv8
+/8PoI1cCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQBRfTSEtMHj/52TYk5kUHlY
+gTBoePcTVfRCBRfqlGGDAokBrvXq/dFU+5Z/CyulXWnqPji+qw6GDG8KPX0oA6wj
+4Yi2z0Dy4BYaRO4PWTGPZ6zsSXAtv0CVtf995O8Ko8axhYQhjDb54G8oMOr5XOHz
+GV4LolrlsgxNM0m/KJ2FPVnnfN78qbRO8DpqjFwDOS+ZCIHh+59X34Jyi1HCse+Y
+XJ4/YIV5Aw5rGabRproxESwV01Eq4HsXEKP9TtdNDFMkrObWisb7g2M40i4QTR9/
+BNCt3d5vcnAxi2rf+CEvHQDGROZ0tTOZ20HowBA4ahMbYsfC9U+pFkq08auaoe6n
-----END CERTIFICATE REQUEST-----
diff --git a/tests/certs/Server-localhost-firstSAN-sv.der b/tests/certs/Server-localhost-firstSAN-sv.der
index 3294af0e4..2c17c0f93 100644
--- a/tests/certs/Server-localhost-firstSAN-sv.der
+++ b/tests/certs/Server-localhost-firstSAN-sv.der
Binary files differ
diff --git a/tests/certs/Server-localhost-firstSAN-sv.key b/tests/certs/Server-localhost-firstSAN-sv.key
index dd9e7141b..0b6bbaa90 100644
--- a/tests/certs/Server-localhost-firstSAN-sv.key
+++ b/tests/certs/Server-localhost-firstSAN-sv.key
@@ -1,27 +1,28 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEAtaBWZf8aHZpN8Re+FMcy/lGgoyImWWzVDHSpbCYcppJmHZYO
-Wct9BQGwMRPc2+aB8XlDgAg3dC5RgraHfP2HLf3Q00IyyajRzOA3f+I+ZZLSTf15
-7e8j1TEv++9fA2hJanyq6XAja0OVvV7R+Ban1eC9f2NEpCxNNBYyERLO3xak2Aal
-y9RMzymsZ8GCJsEL/0Sv87KJMaIQ/aUy+AROazIdJF6DiT1JnDQkWhPdLAssXLNf
-vvxt277DxEBt6FG/4f478ChCJPVoxC4A+iE08NGUP2VQGY2+zwcqCE9ocHf2FHhF
-L3DaRyZRcx27spPhI3dtoEdONMev/alTQerncwIDAQABAoIBAD6smIPT1tg2QgUb
-E02qO4+E7XC9vQwIwS/uJfSa5jIYvMIi4MrdrEOJBJq65vC/B0IjfUZ2D2S5Awmf
-IPvhpL8bIe90nX/3EIapLJ2lnbCBTK769BNF/VB5C7zdKiVL3GGxqWyqdJ50EPzq
-9nusnbfxOJL311zrqKx7qEU5/0b9vYtCW+o7P90pHK7VAMJfzXT28lJepn3RW2OW
-vSMqfF5VjlSzjq+0Xlbu3tOk+I3zBhv1dcZCYCCdUNj18XOmhIKgsqjfgMGAeA77
-e6h/9pn8O/rxM4PwU4vJbtfsiEQa5ekNWR+jyoeOu5XfyYFHSDtKEiRkD2zq6K1V
-+O5gBYECgYEA2b/xjuT8cJM/OAt9jP/6yC2YyIX/2EmzbsyH1XfRY7Xhy63qidza
-wBVCxdlguEGte05x6k2z3S7QUFU/LQKs0aOm2j9WHpnw9LlZ1mE1PtFPJPEaKzfP
-dlUibC/mQ6Qh8dWli8aMXUOj9/o4QxKFC64Q1D/xk/h+h0ExNusJw7MCgYEA1Yfy
-aiFjUhTCsH4R/wHAgUcLDlfCpHLiymO2mylVhu+/frScqn+3RC2JJjyljtwKLC7C
-k6iXRKaqoMcwf4jmhxsoGzqjmHSCxvpucDcN0XJ2uBRg9rTOFIoAg3bocgbbrpl1
-dRsAScO1BvRY4oLSLQjLRguOxUizL6N6kGjvbUECgYACEDSMwxS1SF/n+wvkgyRw
-MyZoeASVmxUtLpj259y/EiEimfJH/iTAfzMTxtyIwm6PZY3kx3m11dS5fiVMGuNi
-VSeml8UMIy9KUltMkb08bCVQ10wFLtEzcNkTp1yKNYrwzLJ14ZrA43wxRFi2If3K
-v4p/SF/UpB0m0PJTb+S2ywKBgF1onA37TxRwCn7kl4DDRnAHIPoEQBxqOXWpyw7z
-NPvTUyTdY49eUVBczxtP+miVL0oGpo2reYjJk+jDWh7gR2Ag7BmFPF2L0k2y7a7f
-FodiGDcMiyJBE8l+WR0pXiPLhjxJ200AI88g8sb5Cw0Dh2e16h5ZHfqFhAU58XrM
-vLhBAoGBAIwabHuf+Q058c6KdInkgwQ97xOuL6iqgXztl77zo3v9v8Uyvbed57Y5
-hohvGXHwdvBP0J4w5SYcH3C7ZXF8k9MK+AownCeq7wruvcliCmWmo9dvhcD0nBPL
-XZP1GEqNHpVQ+KzObbzQpZmZkIo6Ttg50jbLdoAn24kTdR2PVb2Q
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCqFG49ghwozY+A
+r1DtF5dt5qhhPqyorBPOmespLElz+RJANcR5hA2esCjEn2TjwW0tcRFdSxRhIEsY
+ocshbZ54GxHSgxyJddV3PcrIgxd0XESyH6zzi8VqNHqGqwj1PXlyqzZII94rukzg
+7xiRZJfGCZLtJtKnDaIhHzQGx5kXslCWtg+b7UX/voFHKeXzSdshZUTejSsSBxIN
+Wcy7TRozwHp+5VsGUGKyf49cbZHLalzj5K65qw027wrVbQdbJVggDdJLJQ/oEfXO
+GbEpxtNJ1/JKeFLSxfxPEWPxTneuCodlRUm2rCEbyJTBDOcT5r7z/6K9aEzGNAQr
+/P/D6CNXAgMBAAECggEABTfYrgT/xHXbOkOmuvieLp5ODH7joPLldvX3+FpqxxSL
+EhdB7qNaaVYftYLrkaVNvKS/3BDBfk+nwr+Qmy4X8wH5m0sdpSqWfDDLAPAss53y
+zi8ZLcBJ6v3TMa5AQolfBPPFzrfzAA8GNao3IuSLoK5BqMFMmhjr+8kGS8CrGn0c
+PaMd+zNUaCo0ml7dsO+14qjeLSSzKaYl7mOHeEq02B3UDa5twvkyVQiCHV7CThF0
+0oxJ+DOFzBefPB8pIurh6X0WwaDumEQVnEaaaOWEa1IayscTSrkLcNwkZC55/23M
+k9qaR/qGnfUSpu34NTlyy7ifbJOeHp+rZDEFKgBoWQKBgQDalQKzRAjpXn9sSBQS
+aTvP293zxP5ueJnv0TmViUfadDDPZ/VX6W0n7mGuOmNKaWnjM1rvMGpqo6e65eir
+obuUe7GfJAqexUK6VDFOIzFSBqWpquyjjHWa6C4zgL+BVDGItIhQI/6wYsQ0HgLV
+R/n3nqCcYAc/a131GDGdfshbwwKBgQDHMePvhNBZo3p1vUG5l3HiTQRmeDmhlOmT
+qU5XRBPDnh5Hdkq3G34QVwaLEDapyQOnbrylVlE0a+uaB+llzw4GrFOVcRi0K8M5
+wcwI8sSgfoOyv6WKH5780I9T1EiNBDmS5XFr+dkI16+GO1LJdI5JuMoio+0WBKHk
+m3He1rik3QKBgQC1ds/vE6RyWclfk9dWEZdeUSJKpli0Tds+hWxRAM9uRNfg2GWO
+vnOomvbtNfwIYstNm+z6di9iqMsvFn+7PWIFO0uS2tEWTp2/IvZr8DuZ5XrTCNu8
+S3e3StpQV6qlK8iTvY0NO1TOCrDos6GWf1K+iCq+p9pchD5Uo+lM31xnEQKBgHSL
++0pkEiewX/FNp4v4UTjQSTfPNiEVaMjtsZmbiljVRfAYBUU3f739vSVWejVDGLE5
+OIUgiOi8ECCSanwX9qPu5gS1JHgedt5vRnsh1+vzugi22xuCvto7CPFKbpybkTgi
+qQc9K0BiOh+2zAx09t+pkBNOiGRul26TiL+SMHy9AoGABbo9jk6Je4fcLmB9YtHT
+O8L+e2S88r/KuXGrqECD5c/FZL33oTrP9pzvL4Be2W8489DM2UMMD4w0uiUIq/Iu
+5Hp/Lsj8ha2OHoU2TbFaNFoS3fvaOz9zQ0GySjpMngZOKIoYtR9R4ZNI/hlmhAqq
+usJ3GDPcvFSsedJr8gP52QU=
+-----END PRIVATE KEY-----
diff --git a/tests/certs/Server-localhost-firstSAN-sv.pem b/tests/certs/Server-localhost-firstSAN-sv.pem
index 8294d91fd..3751e7b60 100644
--- a/tests/certs/Server-localhost-firstSAN-sv.pem
+++ b/tests/certs/Server-localhost-firstSAN-sv.pem
@@ -6,11 +6,25 @@ extendedKeyUsage = serverAuth
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid
basicConstraints = CA:false
+authorityInfoAccess = @issuer_info
+crlDistributionPoints = @crl_info
+
+[ crl_ext ]
+authorityKeyIdentifier = keyid:always
+authorityInfoAccess = @issuer_info
+
+[ issuer_info ]
+caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer
+
+[ crl_info ]
+URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl
+
[ req ]
default_bits = 1024
distinguished_name = req_DN
default_md = sha256
string_mask = utf8only
+
[ req_DN ]
countryName = "Country Name is Northern Nowhere"
countryName_value = NN
@@ -23,71 +37,72 @@ commonName_value = localhost.nn
# The key
# the certificate
# some dhparam
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEAtaBWZf8aHZpN8Re+FMcy/lGgoyImWWzVDHSpbCYcppJmHZYO
-Wct9BQGwMRPc2+aB8XlDgAg3dC5RgraHfP2HLf3Q00IyyajRzOA3f+I+ZZLSTf15
-7e8j1TEv++9fA2hJanyq6XAja0OVvV7R+Ban1eC9f2NEpCxNNBYyERLO3xak2Aal
-y9RMzymsZ8GCJsEL/0Sv87KJMaIQ/aUy+AROazIdJF6DiT1JnDQkWhPdLAssXLNf
-vvxt277DxEBt6FG/4f478ChCJPVoxC4A+iE08NGUP2VQGY2+zwcqCE9ocHf2FHhF
-L3DaRyZRcx27spPhI3dtoEdONMev/alTQerncwIDAQABAoIBAD6smIPT1tg2QgUb
-E02qO4+E7XC9vQwIwS/uJfSa5jIYvMIi4MrdrEOJBJq65vC/B0IjfUZ2D2S5Awmf
-IPvhpL8bIe90nX/3EIapLJ2lnbCBTK769BNF/VB5C7zdKiVL3GGxqWyqdJ50EPzq
-9nusnbfxOJL311zrqKx7qEU5/0b9vYtCW+o7P90pHK7VAMJfzXT28lJepn3RW2OW
-vSMqfF5VjlSzjq+0Xlbu3tOk+I3zBhv1dcZCYCCdUNj18XOmhIKgsqjfgMGAeA77
-e6h/9pn8O/rxM4PwU4vJbtfsiEQa5ekNWR+jyoeOu5XfyYFHSDtKEiRkD2zq6K1V
-+O5gBYECgYEA2b/xjuT8cJM/OAt9jP/6yC2YyIX/2EmzbsyH1XfRY7Xhy63qidza
-wBVCxdlguEGte05x6k2z3S7QUFU/LQKs0aOm2j9WHpnw9LlZ1mE1PtFPJPEaKzfP
-dlUibC/mQ6Qh8dWli8aMXUOj9/o4QxKFC64Q1D/xk/h+h0ExNusJw7MCgYEA1Yfy
-aiFjUhTCsH4R/wHAgUcLDlfCpHLiymO2mylVhu+/frScqn+3RC2JJjyljtwKLC7C
-k6iXRKaqoMcwf4jmhxsoGzqjmHSCxvpucDcN0XJ2uBRg9rTOFIoAg3bocgbbrpl1
-dRsAScO1BvRY4oLSLQjLRguOxUizL6N6kGjvbUECgYACEDSMwxS1SF/n+wvkgyRw
-MyZoeASVmxUtLpj259y/EiEimfJH/iTAfzMTxtyIwm6PZY3kx3m11dS5fiVMGuNi
-VSeml8UMIy9KUltMkb08bCVQ10wFLtEzcNkTp1yKNYrwzLJ14ZrA43wxRFi2If3K
-v4p/SF/UpB0m0PJTb+S2ywKBgF1onA37TxRwCn7kl4DDRnAHIPoEQBxqOXWpyw7z
-NPvTUyTdY49eUVBczxtP+miVL0oGpo2reYjJk+jDWh7gR2Ag7BmFPF2L0k2y7a7f
-FodiGDcMiyJBE8l+WR0pXiPLhjxJ200AI88g8sb5Cw0Dh2e16h5ZHfqFhAU58XrM
-vLhBAoGBAIwabHuf+Q058c6KdInkgwQ97xOuL6iqgXztl77zo3v9v8Uyvbed57Y5
-hohvGXHwdvBP0J4w5SYcH3C7ZXF8k9MK+AownCeq7wruvcliCmWmo9dvhcD0nBPL
-XZP1GEqNHpVQ+KzObbzQpZmZkIo6Ttg50jbLdoAn24kTdR2PVb2Q
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCqFG49ghwozY+A
+r1DtF5dt5qhhPqyorBPOmespLElz+RJANcR5hA2esCjEn2TjwW0tcRFdSxRhIEsY
+ocshbZ54GxHSgxyJddV3PcrIgxd0XESyH6zzi8VqNHqGqwj1PXlyqzZII94rukzg
+7xiRZJfGCZLtJtKnDaIhHzQGx5kXslCWtg+b7UX/voFHKeXzSdshZUTejSsSBxIN
+Wcy7TRozwHp+5VsGUGKyf49cbZHLalzj5K65qw027wrVbQdbJVggDdJLJQ/oEfXO
+GbEpxtNJ1/JKeFLSxfxPEWPxTneuCodlRUm2rCEbyJTBDOcT5r7z/6K9aEzGNAQr
+/P/D6CNXAgMBAAECggEABTfYrgT/xHXbOkOmuvieLp5ODH7joPLldvX3+FpqxxSL
+EhdB7qNaaVYftYLrkaVNvKS/3BDBfk+nwr+Qmy4X8wH5m0sdpSqWfDDLAPAss53y
+zi8ZLcBJ6v3TMa5AQolfBPPFzrfzAA8GNao3IuSLoK5BqMFMmhjr+8kGS8CrGn0c
+PaMd+zNUaCo0ml7dsO+14qjeLSSzKaYl7mOHeEq02B3UDa5twvkyVQiCHV7CThF0
+0oxJ+DOFzBefPB8pIurh6X0WwaDumEQVnEaaaOWEa1IayscTSrkLcNwkZC55/23M
+k9qaR/qGnfUSpu34NTlyy7ifbJOeHp+rZDEFKgBoWQKBgQDalQKzRAjpXn9sSBQS
+aTvP293zxP5ueJnv0TmViUfadDDPZ/VX6W0n7mGuOmNKaWnjM1rvMGpqo6e65eir
+obuUe7GfJAqexUK6VDFOIzFSBqWpquyjjHWa6C4zgL+BVDGItIhQI/6wYsQ0HgLV
+R/n3nqCcYAc/a131GDGdfshbwwKBgQDHMePvhNBZo3p1vUG5l3HiTQRmeDmhlOmT
+qU5XRBPDnh5Hdkq3G34QVwaLEDapyQOnbrylVlE0a+uaB+llzw4GrFOVcRi0K8M5
+wcwI8sSgfoOyv6WKH5780I9T1EiNBDmS5XFr+dkI16+GO1LJdI5JuMoio+0WBKHk
+m3He1rik3QKBgQC1ds/vE6RyWclfk9dWEZdeUSJKpli0Tds+hWxRAM9uRNfg2GWO
+vnOomvbtNfwIYstNm+z6di9iqMsvFn+7PWIFO0uS2tEWTp2/IvZr8DuZ5XrTCNu8
+S3e3StpQV6qlK8iTvY0NO1TOCrDos6GWf1K+iCq+p9pchD5Uo+lM31xnEQKBgHSL
++0pkEiewX/FNp4v4UTjQSTfPNiEVaMjtsZmbiljVRfAYBUU3f739vSVWejVDGLE5
+OIUgiOi8ECCSanwX9qPu5gS1JHgedt5vRnsh1+vzugi22xuCvto7CPFKbpybkTgi
+qQc9K0BiOh+2zAx09t+pkBNOiGRul26TiL+SMHy9AoGABbo9jk6Je4fcLmB9YtHT
+O8L+e2S88r/KuXGrqECD5c/FZL33oTrP9pzvL4Be2W8489DM2UMMD4w0uiUIq/Iu
+5Hp/Lsj8ha2OHoU2TbFaNFoS3fvaOz9zQ0GySjpMngZOKIoYtR9R4ZNI/hlmhAqq
+usJ3GDPcvFSsedJr8gP52QU=
+-----END PRIVATE KEY-----
Certificate:
Data:
Version: 3 (0x2)
- Serial Number: 15373412888644 (0xdfb66d07044)
+ Serial Number: 16717980979593 (0xf3475515189)
Signature Algorithm: sha256WithRSAEncryption
Issuer:
countryName = NN
organizationName = Edel Curl Arctic Illudium Research Cloud
commonName = Northern Nowhere Trust Anchor
Validity
- Not Before: Sep 19 07:14:48 2018 GMT
- Not After : Dec 6 07:14:48 2026 GMT
+ Not Before: Dec 23 12:21:38 2022 GMT
+ Not After : Mar 11 12:21:38 2031 GMT
Subject:
countryName = NN
organizationName = Edel Curl Arctic Illudium Research Cloud
commonName = localhost.nn
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
- RSA Public-Key: (2048 bit)
+ Public-Key: (2048 bit)
Modulus:
- 00:b5:a0:56:65:ff:1a:1d:9a:4d:f1:17:be:14:c7:
- 32:fe:51:a0:a3:22:26:59:6c:d5:0c:74:a9:6c:26:
- 1c:a6:92:66:1d:96:0e:59:cb:7d:05:01:b0:31:13:
- dc:db:e6:81:f1:79:43:80:08:37:74:2e:51:82:b6:
- 87:7c:fd:87:2d:fd:d0:d3:42:32:c9:a8:d1:cc:e0:
- 37:7f:e2:3e:65:92:d2:4d:fd:79:ed:ef:23:d5:31:
- 2f:fb:ef:5f:03:68:49:6a:7c:aa:e9:70:23:6b:43:
- 95:bd:5e:d1:f8:16:a7:d5:e0:bd:7f:63:44:a4:2c:
- 4d:34:16:32:11:12:ce:df:16:a4:d8:06:a5:cb:d4:
- 4c:cf:29:ac:67:c1:82:26:c1:0b:ff:44:af:f3:b2:
- 89:31:a2:10:fd:a5:32:f8:04:4e:6b:32:1d:24:5e:
- 83:89:3d:49:9c:34:24:5a:13:dd:2c:0b:2c:5c:b3:
- 5f:be:fc:6d:db:be:c3:c4:40:6d:e8:51:bf:e1:fe:
- 3b:f0:28:42:24:f5:68:c4:2e:00:fa:21:34:f0:d1:
- 94:3f:65:50:19:8d:be:cf:07:2a:08:4f:68:70:77:
- f6:14:78:45:2f:70:da:47:26:51:73:1d:bb:b2:93:
- e1:23:77:6d:a0:47:4e:34:c7:af:fd:a9:53:41:ea:
- e7:73
+ 00:aa:14:6e:3d:82:1c:28:cd:8f:80:af:50:ed:17:
+ 97:6d:e6:a8:61:3e:ac:a8:ac:13:ce:99:eb:29:2c:
+ 49:73:f9:12:40:35:c4:79:84:0d:9e:b0:28:c4:9f:
+ 64:e3:c1:6d:2d:71:11:5d:4b:14:61:20:4b:18:a1:
+ cb:21:6d:9e:78:1b:11:d2:83:1c:89:75:d5:77:3d:
+ ca:c8:83:17:74:5c:44:b2:1f:ac:f3:8b:c5:6a:34:
+ 7a:86:ab:08:f5:3d:79:72:ab:36:48:23:de:2b:ba:
+ 4c:e0:ef:18:91:64:97:c6:09:92:ed:26:d2:a7:0d:
+ a2:21:1f:34:06:c7:99:17:b2:50:96:b6:0f:9b:ed:
+ 45:ff:be:81:47:29:e5:f3:49:db:21:65:44:de:8d:
+ 2b:12:07:12:0d:59:cc:bb:4d:1a:33:c0:7a:7e:e5:
+ 5b:06:50:62:b2:7f:8f:5c:6d:91:cb:6a:5c:e3:e4:
+ ae:b9:ab:0d:36:ef:0a:d5:6d:07:5b:25:58:20:0d:
+ d2:4b:25:0f:e8:11:f5:ce:19:b1:29:c6:d3:49:d7:
+ f2:4a:78:52:d2:c5:fc:4f:11:63:f1:4e:77:ae:0a:
+ 87:65:45:49:b6:ac:21:1b:c8:94:c1:0c:e7:13:e6:
+ be:f3:ff:a2:bd:68:4c:c6:34:04:2b:fc:ff:c3:e8:
+ 23:57
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Alternative Name:
@@ -97,48 +112,56 @@ Certificate:
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Subject Key Identifier:
- 70:FA:B9:27:7B:97:78:48:80:FC:D7:D7:31:90:12:ED:E5:4F:90:35
+ DB:7A:18:5E:83:AC:D3:48:C9:00:99:3C:EB:BF:A6:21:F0:39:80:CC
X509v3 Authority Key Identifier:
- keyid:12:CA:BA:4B:46:04:A7:75:8A:2C:E8:0E:54:94:BC:12:65:A6:7B:CE
-
+ 87:CB:B1:33:2E:C1:67:7E:71:E3:E5:2B:4C:4D:A4:B3:6E:D2:5B:A9
X509v3 Basic Constraints:
CA:FALSE
+ Authority Information Access:
+ CA Issuers - URI:http://test.curl.se/ca/EdelCurlRoot.cer
+ X509v3 CRL Distribution Points:
+ Full Name:
+ URI:http://test.curl.se/ca/EdelCurlRoot.crl
Signature Algorithm: sha256WithRSAEncryption
- 8f:e0:79:cb:0a:9d:dd:a3:9b:56:6f:74:75:01:31:ec:01:94:
- c1:6b:76:69:34:da:db:a6:1f:50:07:2f:2a:eb:44:83:23:f4:
- 01:81:f1:aa:f9:65:fe:8c:08:4a:ef:75:36:17:d2:ce:81:f1:
- 2a:ca:cc:5b:2c:c5:fc:30:c2:cf:bc:29:1f:82:17:d4:9f:2a:
- e9:a6:23:9c:19:36:86:e9:46:a2:10:86:65:9a:b5:60:d5:8b:
- ec:05:d3:73:6d:50:a1:38:43:0f:0f:ea:1b:0d:ba:c0:36:2e:
- d4:bd:f7:4e:1d:df:fc:24:8e:50:f2:40:a5:c7:3c:7e:5a:8a:
- 88:1d:f9:28:49:57:42:07:55:1e:ca:94:7c:d9:56:b1:3b:38:
- 62:56:58:6a:ea:fd:30:47:1e:e9:2a:35:e2:d3:57:85:29:6e:
- 06:b3:ad:e9:6a:6e:d1:06:9c:c5:d4:1f:62:fb:fa:1c:e9:f5:
- a7:18:c0:67:29:e0:25:fc:c6:ff:82:76:e3:2f:d6:b2:5f:54:
- a0:8a:93:e4:b2:13:60:f7:96:45:f5:db:b8:95:99:34:62:14:
- cd:e6:58:a3:5c:d6:92:21:f4:ce:dd:da:02:67:12:e7:f6:50:
- 51:e1:8e:9b:84:2f:e6:57:21:81:6a:00:bb:14:bb:29:37:c9:
- 80:c3:74:a2
+ Signature Value:
+ 75:0d:9b:eb:8a:df:ca:a7:7c:9d:9e:6a:eb:30:10:24:12:1b:
+ 81:f6:cd:b0:a0:f8:de:10:f1:6e:b8:57:3a:3a:b0:a4:8c:1d:
+ c1:8f:95:22:e3:1f:8b:3a:21:89:e5:96:08:3d:83:33:37:66:
+ 48:03:f7:98:dd:2f:6d:09:7a:82:26:c1:eb:16:b9:5e:5b:f5:
+ 67:4c:a0:e7:93:e7:2e:d4:53:b8:77:5f:5e:6a:3a:d9:06:19:
+ ca:85:ca:7c:09:61:0d:08:8b:6a:b3:e2:03:8c:ea:b1:55:b2:
+ 30:9b:aa:66:0e:6e:d7:0a:0a:22:ca:6d:8d:d8:53:a8:bc:df:
+ 13:29:d3:b6:1e:9f:3e:a1:8d:f3:8c:48:bf:71:e9:4e:f4:76:
+ ed:77:97:3f:59:27:ca:bb:5b:7c:58:23:82:e7:b5:2d:39:02:
+ 9f:52:07:2f:7b:17:6d:c8:af:90:f5:ed:81:99:a9:cf:80:fb:
+ eb:ba:9c:bc:9a:df:c5:04:78:2c:73:73:bf:95:23:cf:fb:c9:
+ 3e:fa:5b:ee:02:39:8e:09:78:ca:89:08:fd:83:77:37:72:01:
+ 6c:dd:fb:eb:70:20:df:87:28:b3:0f:a0:c5:b3:70:fb:5d:38:
+ 72:23:46:7f:f5:d8:fc:b6:67:72:82:e5:ce:29:f5:b5:34:db:
+ a3:d5:fe:20
-----BEGIN CERTIFICATE-----
-MIID3jCCAsagAwIBAgIGDftm0HBEMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
+MIIEXzCCA0egAwIBAgIGDzR1UVGJMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
Ak5OMTEwLwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNo
IENsb3VkMSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjAe
-Fw0xODA5MTkwNzE0NDhaFw0yNjEyMDYwNzE0NDhaMFcxCzAJBgNVBAYTAk5OMTEw
+Fw0yMjEyMjMxMjIxMzhaFw0zMTAzMTExMjIxMzhaMFcxCzAJBgNVBAYTAk5OMTEw
LwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3Vk
MRUwEwYDVQQDDAxsb2NhbGhvc3Qubm4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQC1oFZl/xodmk3xF74UxzL+UaCjIiZZbNUMdKlsJhymkmYdlg5Zy30F
-AbAxE9zb5oHxeUOACDd0LlGCtod8/Yct/dDTQjLJqNHM4Dd/4j5lktJN/Xnt7yPV
-MS/7718DaElqfKrpcCNrQ5W9XtH4FqfV4L1/Y0SkLE00FjIREs7fFqTYBqXL1EzP
-KaxnwYImwQv/RK/zsokxohD9pTL4BE5rMh0kXoOJPUmcNCRaE90sCyxcs1++/G3b
-vsPEQG3oUb/h/jvwKEIk9WjELgD6ITTw0ZQ/ZVAZjb7PByoIT2hwd/YUeEUvcNpH
-JlFzHbuyk+Ejd22gR040x6/9qVNB6udzAgMBAAGjgZ4wgZswLAYDVR0RBCUwI4IJ
-bG9jYWxob3N0ggpsb2NhbGhvc3Qxggpsb2NhbGhvc3QyMAsGA1UdDwQEAwIDqDAT
-BgNVHSUEDDAKBggrBgEFBQcDATAdBgNVHQ4EFgQUcPq5J3uXeEiA/NfXMZAS7eVP
-kDUwHwYDVR0jBBgwFoAUEsq6S0YEp3WKLOgOVJS8EmWme84wCQYDVR0TBAIwADAN
-BgkqhkiG9w0BAQsFAAOCAQEAj+B5ywqd3aObVm90dQEx7AGUwWt2aTTa26YfUAcv
-KutEgyP0AYHxqvll/owISu91NhfSzoHxKsrMWyzF/DDCz7wpH4IX1J8q6aYjnBk2
-hulGohCGZZq1YNWL7AXTc21QoThDDw/qGw26wDYu1L33Th3f/CSOUPJApcc8flqK
-iB35KElXQgdVHsqUfNlWsTs4YlZYaur9MEce6So14tNXhSluBrOt6Wpu0QacxdQf
-Yvv6HOn1pxjAZyngJfzG/4J24y/Wsl9UoIqT5LITYPeWRfXbuJWZNGIUzeZYo1zW
-kiH0zt3aAmcS5/ZQUeGOm4Qv5lchgWoAuxS7KTfJgMN0og==
+ggEKAoIBAQCqFG49ghwozY+Ar1DtF5dt5qhhPqyorBPOmespLElz+RJANcR5hA2e
+sCjEn2TjwW0tcRFdSxRhIEsYocshbZ54GxHSgxyJddV3PcrIgxd0XESyH6zzi8Vq
+NHqGqwj1PXlyqzZII94rukzg7xiRZJfGCZLtJtKnDaIhHzQGx5kXslCWtg+b7UX/
+voFHKeXzSdshZUTejSsSBxINWcy7TRozwHp+5VsGUGKyf49cbZHLalzj5K65qw02
+7wrVbQdbJVggDdJLJQ/oEfXOGbEpxtNJ1/JKeFLSxfxPEWPxTneuCodlRUm2rCEb
+yJTBDOcT5r7z/6K9aEzGNAQr/P/D6CNXAgMBAAGjggEeMIIBGjAsBgNVHREEJTAj
+gglsb2NhbGhvc3SCCmxvY2FsaG9zdDGCCmxvY2FsaG9zdDIwCwYDVR0PBAQDAgOo
+MBMGA1UdJQQMMAoGCCsGAQUFBwMBMB0GA1UdDgQWBBTbehheg6zTSMkAmTzrv6Yh
+8DmAzDAfBgNVHSMEGDAWgBSHy7EzLsFnfnHj5StMTaSzbtJbqTAJBgNVHRMEAjAA
+MEMGCCsGAQUFBwEBBDcwNTAzBggrBgEFBQcwAoYnaHR0cDovL3Rlc3QuY3VybC5z
+ZS9jYS9FZGVsQ3VybFJvb3QuY2VyMDgGA1UdHwQxMC8wLaAroCmGJ2h0dHA6Ly90
+ZXN0LmN1cmwuc2UvY2EvRWRlbEN1cmxSb290LmNybDANBgkqhkiG9w0BAQsFAAOC
+AQEAdQ2b64rfyqd8nZ5q6zAQJBIbgfbNsKD43hDxbrhXOjqwpIwdwY+VIuMfizoh
+ieWWCD2DMzdmSAP3mN0vbQl6gibB6xa5Xlv1Z0yg55PnLtRTuHdfXmo62QYZyoXK
+fAlhDQiLarPiA4zqsVWyMJuqZg5u1woKIsptjdhTqLzfEynTth6fPqGN84xIv3Hp
+TvR27XeXP1knyrtbfFgjgue1LTkCn1IHL3sXbcivkPXtgZmpz4D767qcvJrfxQR4
+LHNzv5Ujz/vJPvpb7gI5jgl4yokI/YN3N3IBbN3763Ag34cosw+gxbNw+104ciNG
+f/XY/LZncoLlzin1tTTbo9X+IA==
-----END CERTIFICATE-----
diff --git a/tests/certs/Server-localhost-firstSAN-sv.prm b/tests/certs/Server-localhost-firstSAN-sv.prm
new file mode 100644
index 000000000..911f4ce54
--- /dev/null
+++ b/tests/certs/Server-localhost-firstSAN-sv.prm
@@ -0,0 +1,39 @@
+extensions = x509v3
+[ x509v3 ]
+subjectAltName = DNS:localhost,DNS:localhost1,DNS:localhost2
+keyUsage = keyEncipherment,digitalSignature,keyAgreement
+extendedKeyUsage = serverAuth
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid
+basicConstraints = CA:false
+authorityInfoAccess = @issuer_info
+crlDistributionPoints = @crl_info
+
+[ crl_ext ]
+authorityKeyIdentifier = keyid:always
+authorityInfoAccess = @issuer_info
+
+[ issuer_info ]
+caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer
+
+[ crl_info ]
+URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl
+
+[ req ]
+default_bits = 1024
+distinguished_name = req_DN
+default_md = sha256
+string_mask = utf8only
+
+[ req_DN ]
+countryName = "Country Name is Northern Nowhere"
+countryName_value = NN
+organizationName = "Organization Name"
+organizationName_value = Edel Curl Arctic Illudium Research Cloud
+commonName = "Common Name"
+commonName_value = localhost.nn
+
+[something]
+# The key
+# the certificate
+# some dhparam
diff --git a/tests/certs/Server-localhost-firstSAN-sv.pub.der b/tests/certs/Server-localhost-firstSAN-sv.pub.der
index 24f0794d0..0bb787737 100644
--- a/tests/certs/Server-localhost-firstSAN-sv.pub.der
+++ b/tests/certs/Server-localhost-firstSAN-sv.pub.der
Binary files differ
diff --git a/tests/certs/Server-localhost-firstSAN-sv.pub.pem b/tests/certs/Server-localhost-firstSAN-sv.pub.pem
index fa6513515..4bc6c6936 100644
--- a/tests/certs/Server-localhost-firstSAN-sv.pub.pem
+++ b/tests/certs/Server-localhost-firstSAN-sv.pub.pem
@@ -1,9 +1,9 @@
-----BEGIN PUBLIC KEY-----
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtaBWZf8aHZpN8Re+FMcy
-/lGgoyImWWzVDHSpbCYcppJmHZYOWct9BQGwMRPc2+aB8XlDgAg3dC5RgraHfP2H
-Lf3Q00IyyajRzOA3f+I+ZZLSTf157e8j1TEv++9fA2hJanyq6XAja0OVvV7R+Ban
-1eC9f2NEpCxNNBYyERLO3xak2Aaly9RMzymsZ8GCJsEL/0Sv87KJMaIQ/aUy+ARO
-azIdJF6DiT1JnDQkWhPdLAssXLNfvvxt277DxEBt6FG/4f478ChCJPVoxC4A+iE0
-8NGUP2VQGY2+zwcqCE9ocHf2FHhFL3DaRyZRcx27spPhI3dtoEdONMev/alTQern
-cwIDAQAB
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqhRuPYIcKM2PgK9Q7ReX
+beaoYT6sqKwTzpnrKSxJc/kSQDXEeYQNnrAoxJ9k48FtLXERXUsUYSBLGKHLIW2e
+eBsR0oMciXXVdz3KyIMXdFxEsh+s84vFajR6hqsI9T15cqs2SCPeK7pM4O8YkWSX
+xgmS7SbSpw2iIR80BseZF7JQlrYPm+1F/76BRynl80nbIWVE3o0rEgcSDVnMu00a
+M8B6fuVbBlBisn+PXG2Ry2pc4+SuuasNNu8K1W0HWyVYIA3SSyUP6BH1zhmxKcbT
+SdfySnhS0sX8TxFj8U53rgqHZUVJtqwhG8iUwQznE+a+8/+ivWhMxjQEK/z/w+gj
+VwIDAQAB
-----END PUBLIC KEY-----
diff --git a/tests/certs/Server-localhost-lastSAN-sv.crl b/tests/certs/Server-localhost-lastSAN-sv.crl
index f87677487..e47a90cfd 100644
--- a/tests/certs/Server-localhost-lastSAN-sv.crl
+++ b/tests/certs/Server-localhost-lastSAN-sv.crl
@@ -1,12 +1,15 @@
-----BEGIN X509 CRL-----
-MIIB3DCBxQIBATANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJOTjExMC8GA1UE
-CgwoRWRlbCBDdXJsIEFyY3RpYyBJbGx1ZGl1bSBSZXNlYXJjaCBDbG91ZDEmMCQG
-A1UEAwwdTm9ydGhlcm4gTm93aGVyZSBUcnVzdCBBbmNob3IXDTE5MTEwMjEyNTMy
-N1oXDTE5MTIwMjEyNTMyN1owGTAXAgYOTbnGJLAXDTE5MTEwMjEyNTMyNlqgDjAM
-MAoGA1UdFAQDAgEBMA0GCSqGSIb3DQEBBQUAA4IBAQClxELmQvUD2S0UcNFbjMe/
-vv80HtpnwhTK356DUggVBh+EjvIXT4EakBbxxgDZMkaxJYH70RQ0UPLtB41pfmg3
-BS6Gl/0Vn+cAk8w/+dG4DHibdeqSPjIHCaAlkKqHV89Lp7IS6qrD0Bn/L7De6O7c
-4xLvRiDvx/cO5uAkX8vOtzKsOU/0U06QSSGK09dRL2mHbaH4FQj2PFMgcDd1GxAQ
-saii0bWZ6qLiYkQRtJGAplD+uqOaSSsioqVFy/NjaIip0axNtCG9sBhvp6lTpeiR
-Phl04I+WyKoP5f/NTU+fKbWarWka4evPSpRM2o9QYrYb/vj0TMK8lJ3JqgwlLrJ+
+MIICQTCCASkCAQEwDQYJKoZIhvcNAQELBQAwaDELMAkGA1UEBhMCTk4xMTAvBgNV
+BAoMKEVkZWwgQ3VybCBBcmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQxJjAk
+BgNVBAMMHU5vcnRoZXJuIE5vd2hlcmUgVHJ1c3QgQW5jaG9yFw0yMjEyMjMxMjIx
+MzhaFw0yMzAxMjIxMjIxMzhaMH0wFwIGDzR1USo8Fw0yMjEyMjMxMjIxMzZaMBcC
+Bg80dVFRYRcNMjIxMjIzMTIyMTM3WjAXAgYPNHVRUXUXDTIyMTIyMzEyMjEzN1ow
+FwIGDzR1UVGJFw0yMjEyMjMxMjIxMzhaMBcCBg80dVF4rhcNMjIxMjIzMTIyMTM4
+WqAOMAwwCgYDVR0UBAMCAQEwDQYJKoZIhvcNAQELBQADggEBADZeuue7woDyqDdc
+DCxuNE94pNl78cTedT+V9svX0gbMExAI0WRovb9FudimX+CRofFTwZ4RSDF7AdHw
+PqbVSMjZtGTlQrKrMAZ5kBMs9ZI1tWGpGVJNxv4hKMt2VITLPJ22CP8j3yZahNpw
+/kgJQx+7aIRKTC1n6UEAsOsLyDsrFDvdXU2euU0NIx6KudeRUagdgyOntwrLaeeW
++g18IZTewQWefx4iA6eW6y3E9CM0n3d4n7VAxLb95TysLAUoxOeVxtUSa+wm8jWt
+gjm/2UkFxX79dDhDMc5LsL9mBDL3dasunhcUCtI5CTL1aX2Fg2YkztsyQiO0lNx/
+meUHDNM=
-----END X509 CRL-----
diff --git a/tests/certs/Server-localhost-lastSAN-sv.crt b/tests/certs/Server-localhost-lastSAN-sv.crt
index 578fff753..ec37cf15a 100644
--- a/tests/certs/Server-localhost-lastSAN-sv.crt
+++ b/tests/certs/Server-localhost-lastSAN-sv.crt
@@ -1,42 +1,41 @@
Certificate:
Data:
Version: 3 (0x2)
- Serial Number:
- 0e:4d:b9:c6:24:b0
+ Serial Number: 16717980989614 (0xf34755178ae)
Signature Algorithm: sha256WithRSAEncryption
Issuer:
countryName = NN
organizationName = Edel Curl Arctic Illudium Research Cloud
commonName = Northern Nowhere Trust Anchor
Validity
- Not Before: Nov 2 12:53:25 2019 GMT
- Not After : Jan 19 12:53:25 2028 GMT
+ Not Before: Dec 23 12:21:38 2022 GMT
+ Not After : Mar 11 12:21:38 2031 GMT
Subject:
countryName = NN
organizationName = Edel Curl Arctic Illudium Research Cloud
commonName = localhost.nn
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
- RSA Public-Key: (2048 bit)
+ Public-Key: (2048 bit)
Modulus:
- 00:bd:97:0e:a7:6d:b6:73:8c:d0:21:6b:f3:36:74:
- 5d:0a:aa:3a:f0:fa:6e:b1:5c:1c:13:74:ca:67:2b:
- 22:03:d1:a6:3c:25:ef:87:4f:e8:38:9f:21:1d:2e:
- 88:12:36:66:82:03:02:4c:f8:17:35:02:95:31:b1:
- 53:40:21:24:2f:00:f0:bf:80:58:16:b1:92:b3:d3:
- 78:bf:78:cb:0a:91:0c:d2:6d:5d:b2:1f:41:73:16:
- 02:7c:1a:cd:16:25:c9:e1:1b:81:bd:84:93:4c:63:
- ce:38:f4:3e:ad:98:6b:00:89:a8:ba:f5:7e:08:83:
- f3:9a:f5:98:b8:9f:d6:d8:c7:d4:f3:07:1c:8f:ef:
- bc:29:10:60:8c:85:8b:4c:7a:73:c7:9f:a8:23:2f:
- c4:47:f5:18:85:98:fb:27:de:58:93:4b:08:a5:66:
- c9:df:db:f0:22:f8:64:9f:a1:56:89:97:ab:02:2c:
- 5a:99:f2:6f:bf:72:31:90:22:32:ae:86:25:6b:13:
- c6:72:ec:df:2e:c8:12:00:c1:e3:38:b4:a0:40:ba:
- 01:61:c2:d7:b1:ef:7d:4b:29:18:e2:fe:28:d0:98:
- e4:65:3f:4c:34:39:e4:82:a9:ca:b2:3d:c4:91:8f:
- a0:94:bf:e3:f8:b3:73:48:b7:fe:fa:04:43:e7:b5:
- bc:bd
+ 00:c8:84:fe:69:64:33:c3:dc:b5:74:8a:c7:b2:bb:
+ d9:69:e2:a9:95:6d:5f:b7:25:e6:82:00:2b:f5:53:
+ 21:e7:28:ae:66:b6:38:fd:15:b1:91:88:52:31:29:
+ bb:73:e2:e0:99:62:95:44:35:51:d7:54:c8:d2:6d:
+ 25:3c:f0:2e:03:1b:a8:a1:25:e1:83:9a:5c:bd:65:
+ 57:93:44:7e:a3:cc:dd:ac:59:69:60:01:e0:80:b9:
+ d0:c4:70:63:cf:17:a0:c6:13:0f:21:3b:c8:c1:46:
+ 4e:18:fd:6a:36:76:24:4a:57:d8:73:2f:13:42:a0:
+ 2e:90:1f:bf:84:9d:81:e7:bd:f8:75:53:f3:fa:52:
+ e1:f0:aa:f6:23:d7:0d:61:17:0c:e5:9a:ab:e2:d5:
+ e8:c3:c9:6b:2a:a6:da:f9:cb:f6:4d:1d:40:53:7e:
+ 68:2f:51:9f:d3:17:95:34:21:32:0d:47:d6:a9:4d:
+ 28:bb:e0:50:13:2f:5b:76:a1:90:5a:51:48:2f:ce:
+ db:d9:da:2e:d1:3a:0f:fb:80:61:24:0b:0b:79:b2:
+ 45:cd:1d:2d:66:ee:4a:96:5d:08:b7:c4:80:95:2d:
+ 4e:8e:ac:0e:15:fa:2c:06:0c:49:74:49:81:77:17:
+ a5:b2:01:de:aa:88:2b:9a:66:13:bb:06:b4:89:fb:
+ e4:91
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Alternative Name:
@@ -46,48 +45,56 @@ Certificate:
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Subject Key Identifier:
- 4E:54:63:95:A1:58:0C:FA:BD:3E:58:26:AF:AF:A4:F3:66:1A:CB:25
+ B3:77:93:C4:CA:9A:B3:62:CF:51:0D:17:1D:8E:87:F6:C2:3E:17:75
X509v3 Authority Key Identifier:
- keyid:12:CA:BA:4B:46:04:A7:75:8A:2C:E8:0E:54:94:BC:12:65:A6:7B:CE
-
+ 87:CB:B1:33:2E:C1:67:7E:71:E3:E5:2B:4C:4D:A4:B3:6E:D2:5B:A9
X509v3 Basic Constraints:
CA:FALSE
+ Authority Information Access:
+ CA Issuers - URI:http://test.curl.se/ca/EdelCurlRoot.cer
+ X509v3 CRL Distribution Points:
+ Full Name:
+ URI:http://test.curl.se/ca/EdelCurlRoot.crl
Signature Algorithm: sha256WithRSAEncryption
- 2c:f9:48:33:7c:93:ca:3c:9c:58:92:8c:2b:87:61:9f:0d:9c:
- 9d:e8:43:43:12:d6:a3:40:71:ec:cb:31:76:80:68:b1:54:d1:
- 86:f4:b3:9e:c8:50:62:b4:87:12:be:9b:d6:3c:2b:cf:22:0e:
- 66:26:c2:31:dd:1f:c6:97:1e:61:a4:51:ea:68:75:81:66:b9:
- 3b:a6:1f:f6:80:ec:6b:aa:65:66:0c:02:ab:c9:57:bd:6a:4e:
- 6d:24:30:13:7b:65:17:60:9a:14:37:57:f7:22:66:55:7d:1a:
- 1a:5b:27:43:3b:d4:88:bc:2f:d3:d7:bb:d5:3f:9b:25:26:5d:
- 39:a0:4c:8a:84:2c:db:04:87:8a:df:49:7d:4b:d2:85:7a:09:
- 5e:df:6b:1b:b5:6e:9c:bb:2b:f6:c5:01:19:5a:87:d0:cf:16:
- 67:8b:54:41:87:c1:33:c3:21:f6:e5:84:d2:84:5d:da:82:cd:
- 39:4d:50:97:f3:83:37:9e:e5:04:0e:dc:c6:20:d1:b3:f6:c7:
- 3d:dd:95:be:8c:b9:72:72:7a:71:66:aa:4a:8e:cf:37:38:e8:
- c8:06:69:68:8d:d8:d6:8b:4c:23:50:27:fa:e9:bb:2a:a6:89:
- 56:ad:be:4d:bd:be:0c:d7:55:b4:f4:b9:f7:6a:b5:2c:7f:5f:
- 9f:df:f6:61
+ Signature Value:
+ 10:22:60:56:f6:14:b7:03:18:c4:01:ba:06:c7:65:49:98:d7:
+ 64:64:d4:2a:2b:19:16:d1:0e:e9:b0:04:86:01:fb:ae:37:e4:
+ c9:19:37:d5:02:27:63:da:6f:de:a2:d0:23:36:7f:2f:3e:55:
+ d2:b5:ef:23:5d:f7:ac:71:3f:95:77:bc:74:d3:1e:51:d9:7d:
+ 7e:0d:8e:03:f3:82:95:3e:88:dd:3c:ed:3a:aa:b4:e1:85:fb:
+ d8:ea:3f:6a:7d:34:b7:b3:df:b1:fe:2b:ec:af:e0:1c:9c:ec:
+ 43:63:80:17:3a:32:ca:13:35:2d:c7:3d:3e:ac:aa:55:d6:1a:
+ 6d:3f:f0:ff:23:4f:e0:88:a1:42:d9:91:1c:a5:6b:87:14:1b:
+ 0b:4d:24:a8:33:36:7a:21:f7:e2:86:9c:65:36:f3:7c:0c:4d:
+ be:f1:98:45:c3:27:e4:11:4a:7d:8a:e3:70:ae:fb:ac:9f:a6:
+ f4:0d:dc:a7:83:39:50:c3:1e:1a:95:68:0d:b0:56:8f:64:d2:
+ db:a1:a7:97:d1:2c:ea:7a:f9:9b:2f:5f:4d:ed:7c:f9:df:74:
+ 1a:81:73:79:f8:00:2a:78:18:23:72:7a:4b:66:6b:61:da:95:
+ 29:85:7c:4d:42:76:2e:43:70:6d:ac:0c:dc:98:d5:47:da:e1:
+ 54:0c:71:bf
-----BEGIN CERTIFICATE-----
-MIID3jCCAsagAwIBAgIGDk25xiSwMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
+MIIEXzCCA0egAwIBAgIGDzR1UXiuMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
Ak5OMTEwLwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNo
IENsb3VkMSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjAe
-Fw0xOTExMDIxMjUzMjVaFw0yODAxMTkxMjUzMjVaMFcxCzAJBgNVBAYTAk5OMTEw
+Fw0yMjEyMjMxMjIxMzhaFw0zMTAzMTExMjIxMzhaMFcxCzAJBgNVBAYTAk5OMTEw
LwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3Vk
MRUwEwYDVQQDDAxsb2NhbGhvc3Qubm4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQC9lw6nbbZzjNAha/M2dF0Kqjrw+m6xXBwTdMpnKyID0aY8Je+HT+g4
-nyEdLogSNmaCAwJM+Bc1ApUxsVNAISQvAPC/gFgWsZKz03i/eMsKkQzSbV2yH0Fz
-FgJ8Gs0WJcnhG4G9hJNMY8449D6tmGsAiai69X4Ig/Oa9Zi4n9bYx9TzBxyP77wp
-EGCMhYtMenPHn6gjL8RH9RiFmPsn3liTSwilZsnf2/Ai+GSfoVaJl6sCLFqZ8m+/
-cjGQIjKuhiVrE8Zy7N8uyBIAweM4tKBAugFhwtex731LKRji/ijQmORlP0w0OeSC
-qcqyPcSRj6CUv+P4s3NIt/76BEPntby9AgMBAAGjgZ4wgZswLAYDVR0RBCUwI4IK
-bG9jYWxob3N0MYIKbG9jYWxob3N0MoIJbG9jYWxob3N0MAsGA1UdDwQEAwIDqDAT
-BgNVHSUEDDAKBggrBgEFBQcDATAdBgNVHQ4EFgQUTlRjlaFYDPq9Plgmr6+k82Ya
-yyUwHwYDVR0jBBgwFoAUEsq6S0YEp3WKLOgOVJS8EmWme84wCQYDVR0TBAIwADAN
-BgkqhkiG9w0BAQsFAAOCAQEALPlIM3yTyjycWJKMK4dhnw2cnehDQxLWo0Bx7Msx
-doBosVTRhvSznshQYrSHEr6b1jwrzyIOZibCMd0fxpceYaRR6mh1gWa5O6Yf9oDs
-a6plZgwCq8lXvWpObSQwE3tlF2CaFDdX9yJmVX0aGlsnQzvUiLwv09e71T+bJSZd
-OaBMioQs2wSHit9JfUvShXoJXt9rG7VunLsr9sUBGVqH0M8WZ4tUQYfBM8Mh9uWE
-0oRd2oLNOU1Ql/ODN57lBA7cxiDRs/bHPd2Vvoy5cnJ6cWaqSo7PNzjoyAZpaI3Y
-1otMI1An+um7KqaJVq2+Tb2+DNdVtPS592q1LH9fn9/2YQ==
+ggEKAoIBAQDIhP5pZDPD3LV0iseyu9lp4qmVbV+3JeaCACv1UyHnKK5mtjj9FbGR
+iFIxKbtz4uCZYpVENVHXVMjSbSU88C4DG6ihJeGDmly9ZVeTRH6jzN2sWWlgAeCA
+udDEcGPPF6DGEw8hO8jBRk4Y/Wo2diRKV9hzLxNCoC6QH7+EnYHnvfh1U/P6UuHw
+qvYj1w1hFwzlmqvi1ejDyWsqptr5y/ZNHUBTfmgvUZ/TF5U0ITINR9apTSi74FAT
+L1t2oZBaUUgvztvZ2i7ROg/7gGEkCwt5skXNHS1m7kqWXQi3xICVLU6OrA4V+iwG
+DEl0SYF3F6WyAd6qiCuaZhO7BrSJ++SRAgMBAAGjggEeMIIBGjAsBgNVHREEJTAj
+ggpsb2NhbGhvc3Qxggpsb2NhbGhvc3Qygglsb2NhbGhvc3QwCwYDVR0PBAQDAgOo
+MBMGA1UdJQQMMAoGCCsGAQUFBwMBMB0GA1UdDgQWBBSzd5PEypqzYs9RDRcdjof2
+wj4XdTAfBgNVHSMEGDAWgBSHy7EzLsFnfnHj5StMTaSzbtJbqTAJBgNVHRMEAjAA
+MEMGCCsGAQUFBwEBBDcwNTAzBggrBgEFBQcwAoYnaHR0cDovL3Rlc3QuY3VybC5z
+ZS9jYS9FZGVsQ3VybFJvb3QuY2VyMDgGA1UdHwQxMC8wLaAroCmGJ2h0dHA6Ly90
+ZXN0LmN1cmwuc2UvY2EvRWRlbEN1cmxSb290LmNybDANBgkqhkiG9w0BAQsFAAOC
+AQEAECJgVvYUtwMYxAG6BsdlSZjXZGTUKisZFtEO6bAEhgH7rjfkyRk31QInY9pv
+3qLQIzZ/Lz5V0rXvI133rHE/lXe8dNMeUdl9fg2OA/OClT6I3TztOqq04YX72Oo/
+an00t7Pfsf4r7K/gHJzsQ2OAFzoyyhM1Lcc9PqyqVdYabT/w/yNP4IihQtmRHKVr
+hxQbC00kqDM2eiH34oacZTbzfAxNvvGYRcMn5BFKfYrjcK77rJ+m9A3cp4M5UMMe
+GpVoDbBWj2TS26Gnl9Es6nr5my9fTe18+d90GoFzefgAKngYI3J6S2ZrYdqVKYV8
+TUJ2LkNwbawM3JjVR9rhVAxxvw==
-----END CERTIFICATE-----
diff --git a/tests/certs/Server-localhost-lastSAN-sv.csr b/tests/certs/Server-localhost-lastSAN-sv.csr
index a113db635..ec930784d 100644
--- a/tests/certs/Server-localhost-lastSAN-sv.csr
+++ b/tests/certs/Server-localhost-lastSAN-sv.csr
@@ -1,16 +1,16 @@
-----BEGIN CERTIFICATE REQUEST-----
MIICnDCCAYQCAQAwVzELMAkGA1UEBhMCTk4xMTAvBgNVBAoMKEVkZWwgQ3VybCBB
cmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQxFTATBgNVBAMMDGxvY2FsaG9z
-dC5ubjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL2XDqdttnOM0CFr
-8zZ0XQqqOvD6brFcHBN0ymcrIgPRpjwl74dP6DifIR0uiBI2ZoIDAkz4FzUClTGx
-U0AhJC8A8L+AWBaxkrPTeL94ywqRDNJtXbIfQXMWAnwazRYlyeEbgb2Ek0xjzjj0
-Pq2YawCJqLr1fgiD85r1mLif1tjH1PMHHI/vvCkQYIyFi0x6c8efqCMvxEf1GIWY
-+yfeWJNLCKVmyd/b8CL4ZJ+hVomXqwIsWpnyb79yMZAiMq6GJWsTxnLs3y7IEgDB
-4zi0oEC6AWHC17HvfUspGOL+KNCY5GU/TDQ55IKpyrI9xJGPoJS/4/izc0i3/voE
-Q+e1vL0CAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQCpqiSx7VjqeQ2g8lpHF0Nb
-/10H1DqaK7Z3y49xFK3xxKWdxKUdq3Nf7JYlhKpWDYokrkw5W+nhGQILYt6ZD8tN
-tBZphyp3rvmTcewEFtbBne5N7OsAaanlBxeCLhnCICGhd+QCqYJKWe+zw8Oc5dCp
-SRmWEL5FTu9AavBc0LDx1gNBupDiXGhF+BptOzgfDbijd0aRgy9cYwAQ9kXo4H+y
-TH1ZYcSfB0gs7sShiY5FvuGr54Vv0czn+HqrdyWKDGLp7ilPYCT4WXBWfTon9j1H
-9NDomhrVme9IGKItYHg+p59WpevklW900X4NZCVspePgNeBOvXYbGqDEN01o1xIG
+dC5ubjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMiE/mlkM8PctXSK
+x7K72WniqZVtX7cl5oIAK/VTIecorma2OP0VsZGIUjEpu3Pi4JlilUQ1UddUyNJt
+JTzwLgMbqKEl4YOaXL1lV5NEfqPM3axZaWAB4IC50MRwY88XoMYTDyE7yMFGThj9
+ajZ2JEpX2HMvE0KgLpAfv4Sdgee9+HVT8/pS4fCq9iPXDWEXDOWaq+LV6MPJayqm
+2vnL9k0dQFN+aC9Rn9MXlTQhMg1H1qlNKLvgUBMvW3ahkFpRSC/O29naLtE6D/uA
+YSQLC3myRc0dLWbuSpZdCLfEgJUtTo6sDhX6LAYMSXRJgXcXpbIB3qqIK5pmE7sG
+tIn75JECAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQCeDxLX9uy0Fv7yaY/gqL/G
+x+TFx7xoKOJwqu3NqrGiTfs6SeXvmxIj5oOE2gBi9cjc184TUa/zHSW+iYug2RVO
+f18zO3sOUXeFLN10f1OEgkOEm6k9I4MuWhEJuCY0FePAl6i71b4iy2O6n0CxLNKB
+D+IM8MBOjx18Ev+BETXmf2R6zyQaVY+VP541XRtcCwcMU9IV92CilhfHjPJy3g4V
+7mQIcvgdpQMuQLsBvMY+yFRUwRpWiPjOOot5q6bQKgA5pcRU7UtraqLzT7gG9cF2
+SDN2y9A05EWYZB7/hlg+URdJKjrCLn20i5BR52VVepLDWUOCBafkdCOp1O6JTRK2
-----END CERTIFICATE REQUEST-----
diff --git a/tests/certs/Server-localhost-lastSAN-sv.der b/tests/certs/Server-localhost-lastSAN-sv.der
index c72bcb95d..c4706a58e 100644
--- a/tests/certs/Server-localhost-lastSAN-sv.der
+++ b/tests/certs/Server-localhost-lastSAN-sv.der
Binary files differ
diff --git a/tests/certs/Server-localhost-lastSAN-sv.key b/tests/certs/Server-localhost-lastSAN-sv.key
index dae48284a..7a5d854fb 100644
--- a/tests/certs/Server-localhost-lastSAN-sv.key
+++ b/tests/certs/Server-localhost-lastSAN-sv.key
@@ -1,27 +1,28 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEAvZcOp222c4zQIWvzNnRdCqo68PpusVwcE3TKZysiA9GmPCXv
-h0/oOJ8hHS6IEjZmggMCTPgXNQKVMbFTQCEkLwDwv4BYFrGSs9N4v3jLCpEM0m1d
-sh9BcxYCfBrNFiXJ4RuBvYSTTGPOOPQ+rZhrAImouvV+CIPzmvWYuJ/W2MfU8wcc
-j++8KRBgjIWLTHpzx5+oIy/ER/UYhZj7J95Yk0sIpWbJ39vwIvhkn6FWiZerAixa
-mfJvv3IxkCIyroYlaxPGcuzfLsgSAMHjOLSgQLoBYcLXse99SykY4v4o0JjkZT9M
-NDnkgqnKsj3EkY+glL/j+LNzSLf++gRD57W8vQIDAQABAoIBAQCC0wTKpdtbmtRX
-66y1a9B0NolblgPiISRCjLnKPSpIpldmc+r4XTxqLexkvaIppx5PIpJo2FzzOGgJ
-FUrUGspkIOr/yil+52PK8OcGgOziyrqlTdB0xDqelpZ6WuggG01WJ2v8gco+0TQR
-ewDxOxbDFTq4YARrDdqAmG6dH7baeMDvh6IVe/dkJOVlyh0MA2QP+VR6fDv73jUe
-3yW6G+hql9mjZK6Cgz2lWoeW7YXAvWtTXT68/bcZLO64oLyCjBmsbSrBRQN5m9M9
-dWJV5B0h02P+uMF5H+EAD3qN5I670iSY3d+FWBpd3cA2arRGWlUXNmCGG3CjLYUS
-wGw1lbFhAoGBAPG6JhdXAaH3DN9khp54plbFSIanvjWK8RAEaQgkurwDUL3o1LmC
-ObqiCmMTU25HRlwWkwlCxejHfzOEqFdwiX5QuNmYBE6TYHtmnWSJ5ebMG7SOtlIS
-9Z4dLNZz8j95OGKb3XI9qR0ItxsmuLgWvrJUayd0UXcU7BTzHCXGx99JAoGBAMjI
-0z5+DeTwBhDY1mIUY081FmhrT9PhFHGtRy2OIENW0ZhJ5yE+ygVQssnR+Lr/yl1p
-zGC+CM//5wmJ774Xx0reMsh/rgK4Z0Wq47JJFGo0RMfYVmlod0OndtdobDc7ds7t
-Q3wIGt2ZXW6BtzMo8KVUuuHL8QwZoZqJNe/7QE3VAoGAGGrRRjJHu/CUoEwrPP66
-7rDm7pMrJ4VtbEzFv0jWg/9hvI00T7jT1AJiQjfFibIxbUPqflj8XNMqCi4wQwTf
-Hp9QzMoKRVWlvVFUPL+hNXsQoWB5EjlQDjSsPs1ffwHjrDJKYCvSVVh4BooWxqGl
-iaX1XPrm77xxTHxyL26w6eECgYA176S3g9stpcCrY+RrInju/R7Q3Arsquj4BIk7
-VpOaI0dYdnnNN3XDacMtbec4LKBq6ZHKZyIs5dxldpVdZjvWA8x2ib3v4yNy1o4m
-BXWjdfkICjhkRnjLRsAo61cumx22Row7VF4LKzirB9NzvcqvTwyIvWU6T+RWhAdm
-OQM0JQKBgC+gmBGfnQShTRYlfpb4RVnDijPpC34AdEO7wdeMcdQK9KfWsLZT5y0w
-qoZhW9IPlu1dNRhwHqGHWu2CmQVwFpy5/ccpukCJfyZw7edbb9dIqzKlUWw8Jmmg
-C7WKz4z3mKkZrwptFxDu0dpQ644yOP/gnRaLLyP0zn/brmnYz09X
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDIhP5pZDPD3LV0
+iseyu9lp4qmVbV+3JeaCACv1UyHnKK5mtjj9FbGRiFIxKbtz4uCZYpVENVHXVMjS
+bSU88C4DG6ihJeGDmly9ZVeTRH6jzN2sWWlgAeCAudDEcGPPF6DGEw8hO8jBRk4Y
+/Wo2diRKV9hzLxNCoC6QH7+EnYHnvfh1U/P6UuHwqvYj1w1hFwzlmqvi1ejDyWsq
+ptr5y/ZNHUBTfmgvUZ/TF5U0ITINR9apTSi74FATL1t2oZBaUUgvztvZ2i7ROg/7
+gGEkCwt5skXNHS1m7kqWXQi3xICVLU6OrA4V+iwGDEl0SYF3F6WyAd6qiCuaZhO7
+BrSJ++SRAgMBAAECggEAApUDLABsPI6EGqj/1dDJRa2zcSxm92DfpUG9zytVIYN6
+rXFqw0g10LyF5xf/uogLzDCCtg25YlG3QqMWVUDNguDmt2kutycJddnkemMUfg+m
+X3CzpJbEQ+bApgrsH2+micPB5d5odnlX35wByQuVP4zT3sssJGc+JOvNEkwvRE3o
+0x+B7qnW5YWDA9X67Sb9Kgcg9xExC7lbUqQoDetpa6x36LVx2OCqmomIKf8CQqHr
+FOOTKNkTs6mal3jxxxwvLmj7Bkz+InSIRK0VE9d5G2VWliwcRMVjB9c5oh/P6Le3
+/jCyi18omkMgQK0Hm6CJBjsT+PdJu09hbo1TXD8cbQKBgQD8CwQNzHSolSUoKMpd
+SfsAIB5gjILns7xAAtemkHEn15ga6p7510wtvkWAzOqBtt3RrTqb/AoWKUkHwfRd
+AYFE1RrGVUA0Yohuf4eJFjAXuEQXNKx2uuHIpwEf0UpfiyAFLzDyUmTjMHLw15ZP
+OrhIHJBRfWiU9nWIScNZC4/A7QKBgQDLquZxndjls3h/LotU62CcjZSqU59Wbhfs
+VoGDgvj5jxxdcy4u7BntYYBKsaIL7k/Q6vyrNWnQoUgazhIqJ3RJ2p3OzaCLjKY8
+7+vf8F1bSZL+VbHTJZfuPKKShGlIfZ0ixjuP0vEUh+xblEwsmgNN4XOc/M/mVyid
+qek2xFPRtQKBgA8SXZCxrDw0hv9KyScg+Gh+gzKE1IMkhVpSkTC9rHaUdt0NMKqC
+DGUj3qYgGtnc5JDYSgvv226N03cqSwGQyHkkQTChAnDff4cUCzfQYtnYRAIbPUDw
+VfYYvoF3k3n5KNYGh2fGM5A+YnEygyODwGdXhe3JkQpvXoHi31Kg1VzVAoGBAKGa
+JCmopq50PjskElg6P7lYucqAeaCZ0I+tgCx6otVZ0ZbwyodevZ/WSnZ6BetTl69c
+lUnAIwrwvgbO1ijuj13+glLSY/32hv05Hb7duSWy9liqZGP2o1vcbt61A9kKGsG5
+6w7OwI2a4Fc2D08gkVideB/rlYbeR5L6e9sB4sQ1AoGAcLMiz2/cF40/pMhqq/C/
+SyFDa1OAquW00PujVrTbgIHY+2HdjaIlzwNVFWIY/K7LCJtLvK6mVCVbo1n7/Agp
+qYZZzPEUwJ84ZY1ZNxC0Z89dBFmJeFvyNSan9zGujye7Kx8QctCvn5DzjoWtA52k
+MvALyxOMqzvGI5bC4r1o3Hw=
+-----END PRIVATE KEY-----
diff --git a/tests/certs/Server-localhost-lastSAN-sv.pem b/tests/certs/Server-localhost-lastSAN-sv.pem
index 42e4a1155..b1cbd4b6b 100644
--- a/tests/certs/Server-localhost-lastSAN-sv.pem
+++ b/tests/certs/Server-localhost-lastSAN-sv.pem
@@ -6,6 +6,19 @@ extendedKeyUsage = serverAuth
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid
basicConstraints = CA:false
+authorityInfoAccess = @issuer_info
+crlDistributionPoints = @crl_info
+
+[ crl_ext ]
+authorityKeyIdentifier = keyid:always
+authorityInfoAccess = @issuer_info
+
+[ issuer_info ]
+caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer
+
+[ crl_info ]
+URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl
+
[ req ]
default_bits = 1024
distinguished_name = req_DN
@@ -23,72 +36,72 @@ commonName_value = localhost.nn
# The key
# the certificate
# some dhparam
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEAvZcOp222c4zQIWvzNnRdCqo68PpusVwcE3TKZysiA9GmPCXv
-h0/oOJ8hHS6IEjZmggMCTPgXNQKVMbFTQCEkLwDwv4BYFrGSs9N4v3jLCpEM0m1d
-sh9BcxYCfBrNFiXJ4RuBvYSTTGPOOPQ+rZhrAImouvV+CIPzmvWYuJ/W2MfU8wcc
-j++8KRBgjIWLTHpzx5+oIy/ER/UYhZj7J95Yk0sIpWbJ39vwIvhkn6FWiZerAixa
-mfJvv3IxkCIyroYlaxPGcuzfLsgSAMHjOLSgQLoBYcLXse99SykY4v4o0JjkZT9M
-NDnkgqnKsj3EkY+glL/j+LNzSLf++gRD57W8vQIDAQABAoIBAQCC0wTKpdtbmtRX
-66y1a9B0NolblgPiISRCjLnKPSpIpldmc+r4XTxqLexkvaIppx5PIpJo2FzzOGgJ
-FUrUGspkIOr/yil+52PK8OcGgOziyrqlTdB0xDqelpZ6WuggG01WJ2v8gco+0TQR
-ewDxOxbDFTq4YARrDdqAmG6dH7baeMDvh6IVe/dkJOVlyh0MA2QP+VR6fDv73jUe
-3yW6G+hql9mjZK6Cgz2lWoeW7YXAvWtTXT68/bcZLO64oLyCjBmsbSrBRQN5m9M9
-dWJV5B0h02P+uMF5H+EAD3qN5I670iSY3d+FWBpd3cA2arRGWlUXNmCGG3CjLYUS
-wGw1lbFhAoGBAPG6JhdXAaH3DN9khp54plbFSIanvjWK8RAEaQgkurwDUL3o1LmC
-ObqiCmMTU25HRlwWkwlCxejHfzOEqFdwiX5QuNmYBE6TYHtmnWSJ5ebMG7SOtlIS
-9Z4dLNZz8j95OGKb3XI9qR0ItxsmuLgWvrJUayd0UXcU7BTzHCXGx99JAoGBAMjI
-0z5+DeTwBhDY1mIUY081FmhrT9PhFHGtRy2OIENW0ZhJ5yE+ygVQssnR+Lr/yl1p
-zGC+CM//5wmJ774Xx0reMsh/rgK4Z0Wq47JJFGo0RMfYVmlod0OndtdobDc7ds7t
-Q3wIGt2ZXW6BtzMo8KVUuuHL8QwZoZqJNe/7QE3VAoGAGGrRRjJHu/CUoEwrPP66
-7rDm7pMrJ4VtbEzFv0jWg/9hvI00T7jT1AJiQjfFibIxbUPqflj8XNMqCi4wQwTf
-Hp9QzMoKRVWlvVFUPL+hNXsQoWB5EjlQDjSsPs1ffwHjrDJKYCvSVVh4BooWxqGl
-iaX1XPrm77xxTHxyL26w6eECgYA176S3g9stpcCrY+RrInju/R7Q3Arsquj4BIk7
-VpOaI0dYdnnNN3XDacMtbec4LKBq6ZHKZyIs5dxldpVdZjvWA8x2ib3v4yNy1o4m
-BXWjdfkICjhkRnjLRsAo61cumx22Row7VF4LKzirB9NzvcqvTwyIvWU6T+RWhAdm
-OQM0JQKBgC+gmBGfnQShTRYlfpb4RVnDijPpC34AdEO7wdeMcdQK9KfWsLZT5y0w
-qoZhW9IPlu1dNRhwHqGHWu2CmQVwFpy5/ccpukCJfyZw7edbb9dIqzKlUWw8Jmmg
-C7WKz4z3mKkZrwptFxDu0dpQ644yOP/gnRaLLyP0zn/brmnYz09X
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDIhP5pZDPD3LV0
+iseyu9lp4qmVbV+3JeaCACv1UyHnKK5mtjj9FbGRiFIxKbtz4uCZYpVENVHXVMjS
+bSU88C4DG6ihJeGDmly9ZVeTRH6jzN2sWWlgAeCAudDEcGPPF6DGEw8hO8jBRk4Y
+/Wo2diRKV9hzLxNCoC6QH7+EnYHnvfh1U/P6UuHwqvYj1w1hFwzlmqvi1ejDyWsq
+ptr5y/ZNHUBTfmgvUZ/TF5U0ITINR9apTSi74FATL1t2oZBaUUgvztvZ2i7ROg/7
+gGEkCwt5skXNHS1m7kqWXQi3xICVLU6OrA4V+iwGDEl0SYF3F6WyAd6qiCuaZhO7
+BrSJ++SRAgMBAAECggEAApUDLABsPI6EGqj/1dDJRa2zcSxm92DfpUG9zytVIYN6
+rXFqw0g10LyF5xf/uogLzDCCtg25YlG3QqMWVUDNguDmt2kutycJddnkemMUfg+m
+X3CzpJbEQ+bApgrsH2+micPB5d5odnlX35wByQuVP4zT3sssJGc+JOvNEkwvRE3o
+0x+B7qnW5YWDA9X67Sb9Kgcg9xExC7lbUqQoDetpa6x36LVx2OCqmomIKf8CQqHr
+FOOTKNkTs6mal3jxxxwvLmj7Bkz+InSIRK0VE9d5G2VWliwcRMVjB9c5oh/P6Le3
+/jCyi18omkMgQK0Hm6CJBjsT+PdJu09hbo1TXD8cbQKBgQD8CwQNzHSolSUoKMpd
+SfsAIB5gjILns7xAAtemkHEn15ga6p7510wtvkWAzOqBtt3RrTqb/AoWKUkHwfRd
+AYFE1RrGVUA0Yohuf4eJFjAXuEQXNKx2uuHIpwEf0UpfiyAFLzDyUmTjMHLw15ZP
+OrhIHJBRfWiU9nWIScNZC4/A7QKBgQDLquZxndjls3h/LotU62CcjZSqU59Wbhfs
+VoGDgvj5jxxdcy4u7BntYYBKsaIL7k/Q6vyrNWnQoUgazhIqJ3RJ2p3OzaCLjKY8
+7+vf8F1bSZL+VbHTJZfuPKKShGlIfZ0ixjuP0vEUh+xblEwsmgNN4XOc/M/mVyid
+qek2xFPRtQKBgA8SXZCxrDw0hv9KyScg+Gh+gzKE1IMkhVpSkTC9rHaUdt0NMKqC
+DGUj3qYgGtnc5JDYSgvv226N03cqSwGQyHkkQTChAnDff4cUCzfQYtnYRAIbPUDw
+VfYYvoF3k3n5KNYGh2fGM5A+YnEygyODwGdXhe3JkQpvXoHi31Kg1VzVAoGBAKGa
+JCmopq50PjskElg6P7lYucqAeaCZ0I+tgCx6otVZ0ZbwyodevZ/WSnZ6BetTl69c
+lUnAIwrwvgbO1ijuj13+glLSY/32hv05Hb7duSWy9liqZGP2o1vcbt61A9kKGsG5
+6w7OwI2a4Fc2D08gkVideB/rlYbeR5L6e9sB4sQ1AoGAcLMiz2/cF40/pMhqq/C/
+SyFDa1OAquW00PujVrTbgIHY+2HdjaIlzwNVFWIY/K7LCJtLvK6mVCVbo1n7/Agp
+qYZZzPEUwJ84ZY1ZNxC0Z89dBFmJeFvyNSan9zGujye7Kx8QctCvn5DzjoWtA52k
+MvALyxOMqzvGI5bC4r1o3Hw=
+-----END PRIVATE KEY-----
Certificate:
Data:
Version: 3 (0x2)
- Serial Number:
- 0e:4d:b9:c6:24:b0
+ Serial Number: 16717980989614 (0xf34755178ae)
Signature Algorithm: sha256WithRSAEncryption
Issuer:
countryName = NN
organizationName = Edel Curl Arctic Illudium Research Cloud
commonName = Northern Nowhere Trust Anchor
Validity
- Not Before: Nov 2 12:53:25 2019 GMT
- Not After : Jan 19 12:53:25 2028 GMT
+ Not Before: Dec 23 12:21:38 2022 GMT
+ Not After : Mar 11 12:21:38 2031 GMT
Subject:
countryName = NN
organizationName = Edel Curl Arctic Illudium Research Cloud
commonName = localhost.nn
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
- RSA Public-Key: (2048 bit)
+ Public-Key: (2048 bit)
Modulus:
- 00:bd:97:0e:a7:6d:b6:73:8c:d0:21:6b:f3:36:74:
- 5d:0a:aa:3a:f0:fa:6e:b1:5c:1c:13:74:ca:67:2b:
- 22:03:d1:a6:3c:25:ef:87:4f:e8:38:9f:21:1d:2e:
- 88:12:36:66:82:03:02:4c:f8:17:35:02:95:31:b1:
- 53:40:21:24:2f:00:f0:bf:80:58:16:b1:92:b3:d3:
- 78:bf:78:cb:0a:91:0c:d2:6d:5d:b2:1f:41:73:16:
- 02:7c:1a:cd:16:25:c9:e1:1b:81:bd:84:93:4c:63:
- ce:38:f4:3e:ad:98:6b:00:89:a8:ba:f5:7e:08:83:
- f3:9a:f5:98:b8:9f:d6:d8:c7:d4:f3:07:1c:8f:ef:
- bc:29:10:60:8c:85:8b:4c:7a:73:c7:9f:a8:23:2f:
- c4:47:f5:18:85:98:fb:27:de:58:93:4b:08:a5:66:
- c9:df:db:f0:22:f8:64:9f:a1:56:89:97:ab:02:2c:
- 5a:99:f2:6f:bf:72:31:90:22:32:ae:86:25:6b:13:
- c6:72:ec:df:2e:c8:12:00:c1:e3:38:b4:a0:40:ba:
- 01:61:c2:d7:b1:ef:7d:4b:29:18:e2:fe:28:d0:98:
- e4:65:3f:4c:34:39:e4:82:a9:ca:b2:3d:c4:91:8f:
- a0:94:bf:e3:f8:b3:73:48:b7:fe:fa:04:43:e7:b5:
- bc:bd
+ 00:c8:84:fe:69:64:33:c3:dc:b5:74:8a:c7:b2:bb:
+ d9:69:e2:a9:95:6d:5f:b7:25:e6:82:00:2b:f5:53:
+ 21:e7:28:ae:66:b6:38:fd:15:b1:91:88:52:31:29:
+ bb:73:e2:e0:99:62:95:44:35:51:d7:54:c8:d2:6d:
+ 25:3c:f0:2e:03:1b:a8:a1:25:e1:83:9a:5c:bd:65:
+ 57:93:44:7e:a3:cc:dd:ac:59:69:60:01:e0:80:b9:
+ d0:c4:70:63:cf:17:a0:c6:13:0f:21:3b:c8:c1:46:
+ 4e:18:fd:6a:36:76:24:4a:57:d8:73:2f:13:42:a0:
+ 2e:90:1f:bf:84:9d:81:e7:bd:f8:75:53:f3:fa:52:
+ e1:f0:aa:f6:23:d7:0d:61:17:0c:e5:9a:ab:e2:d5:
+ e8:c3:c9:6b:2a:a6:da:f9:cb:f6:4d:1d:40:53:7e:
+ 68:2f:51:9f:d3:17:95:34:21:32:0d:47:d6:a9:4d:
+ 28:bb:e0:50:13:2f:5b:76:a1:90:5a:51:48:2f:ce:
+ db:d9:da:2e:d1:3a:0f:fb:80:61:24:0b:0b:79:b2:
+ 45:cd:1d:2d:66:ee:4a:96:5d:08:b7:c4:80:95:2d:
+ 4e:8e:ac:0e:15:fa:2c:06:0c:49:74:49:81:77:17:
+ a5:b2:01:de:aa:88:2b:9a:66:13:bb:06:b4:89:fb:
+ e4:91
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Alternative Name:
@@ -98,48 +111,56 @@ Certificate:
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Subject Key Identifier:
- 4E:54:63:95:A1:58:0C:FA:BD:3E:58:26:AF:AF:A4:F3:66:1A:CB:25
+ B3:77:93:C4:CA:9A:B3:62:CF:51:0D:17:1D:8E:87:F6:C2:3E:17:75
X509v3 Authority Key Identifier:
- keyid:12:CA:BA:4B:46:04:A7:75:8A:2C:E8:0E:54:94:BC:12:65:A6:7B:CE
-
+ 87:CB:B1:33:2E:C1:67:7E:71:E3:E5:2B:4C:4D:A4:B3:6E:D2:5B:A9
X509v3 Basic Constraints:
CA:FALSE
+ Authority Information Access:
+ CA Issuers - URI:http://test.curl.se/ca/EdelCurlRoot.cer
+ X509v3 CRL Distribution Points:
+ Full Name:
+ URI:http://test.curl.se/ca/EdelCurlRoot.crl
Signature Algorithm: sha256WithRSAEncryption
- 2c:f9:48:33:7c:93:ca:3c:9c:58:92:8c:2b:87:61:9f:0d:9c:
- 9d:e8:43:43:12:d6:a3:40:71:ec:cb:31:76:80:68:b1:54:d1:
- 86:f4:b3:9e:c8:50:62:b4:87:12:be:9b:d6:3c:2b:cf:22:0e:
- 66:26:c2:31:dd:1f:c6:97:1e:61:a4:51:ea:68:75:81:66:b9:
- 3b:a6:1f:f6:80:ec:6b:aa:65:66:0c:02:ab:c9:57:bd:6a:4e:
- 6d:24:30:13:7b:65:17:60:9a:14:37:57:f7:22:66:55:7d:1a:
- 1a:5b:27:43:3b:d4:88:bc:2f:d3:d7:bb:d5:3f:9b:25:26:5d:
- 39:a0:4c:8a:84:2c:db:04:87:8a:df:49:7d:4b:d2:85:7a:09:
- 5e:df:6b:1b:b5:6e:9c:bb:2b:f6:c5:01:19:5a:87:d0:cf:16:
- 67:8b:54:41:87:c1:33:c3:21:f6:e5:84:d2:84:5d:da:82:cd:
- 39:4d:50:97:f3:83:37:9e:e5:04:0e:dc:c6:20:d1:b3:f6:c7:
- 3d:dd:95:be:8c:b9:72:72:7a:71:66:aa:4a:8e:cf:37:38:e8:
- c8:06:69:68:8d:d8:d6:8b:4c:23:50:27:fa:e9:bb:2a:a6:89:
- 56:ad:be:4d:bd:be:0c:d7:55:b4:f4:b9:f7:6a:b5:2c:7f:5f:
- 9f:df:f6:61
+ Signature Value:
+ 10:22:60:56:f6:14:b7:03:18:c4:01:ba:06:c7:65:49:98:d7:
+ 64:64:d4:2a:2b:19:16:d1:0e:e9:b0:04:86:01:fb:ae:37:e4:
+ c9:19:37:d5:02:27:63:da:6f:de:a2:d0:23:36:7f:2f:3e:55:
+ d2:b5:ef:23:5d:f7:ac:71:3f:95:77:bc:74:d3:1e:51:d9:7d:
+ 7e:0d:8e:03:f3:82:95:3e:88:dd:3c:ed:3a:aa:b4:e1:85:fb:
+ d8:ea:3f:6a:7d:34:b7:b3:df:b1:fe:2b:ec:af:e0:1c:9c:ec:
+ 43:63:80:17:3a:32:ca:13:35:2d:c7:3d:3e:ac:aa:55:d6:1a:
+ 6d:3f:f0:ff:23:4f:e0:88:a1:42:d9:91:1c:a5:6b:87:14:1b:
+ 0b:4d:24:a8:33:36:7a:21:f7:e2:86:9c:65:36:f3:7c:0c:4d:
+ be:f1:98:45:c3:27:e4:11:4a:7d:8a:e3:70:ae:fb:ac:9f:a6:
+ f4:0d:dc:a7:83:39:50:c3:1e:1a:95:68:0d:b0:56:8f:64:d2:
+ db:a1:a7:97:d1:2c:ea:7a:f9:9b:2f:5f:4d:ed:7c:f9:df:74:
+ 1a:81:73:79:f8:00:2a:78:18:23:72:7a:4b:66:6b:61:da:95:
+ 29:85:7c:4d:42:76:2e:43:70:6d:ac:0c:dc:98:d5:47:da:e1:
+ 54:0c:71:bf
-----BEGIN CERTIFICATE-----
-MIID3jCCAsagAwIBAgIGDk25xiSwMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
+MIIEXzCCA0egAwIBAgIGDzR1UXiuMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
Ak5OMTEwLwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNo
IENsb3VkMSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjAe
-Fw0xOTExMDIxMjUzMjVaFw0yODAxMTkxMjUzMjVaMFcxCzAJBgNVBAYTAk5OMTEw
+Fw0yMjEyMjMxMjIxMzhaFw0zMTAzMTExMjIxMzhaMFcxCzAJBgNVBAYTAk5OMTEw
LwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3Vk
MRUwEwYDVQQDDAxsb2NhbGhvc3Qubm4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQC9lw6nbbZzjNAha/M2dF0Kqjrw+m6xXBwTdMpnKyID0aY8Je+HT+g4
-nyEdLogSNmaCAwJM+Bc1ApUxsVNAISQvAPC/gFgWsZKz03i/eMsKkQzSbV2yH0Fz
-FgJ8Gs0WJcnhG4G9hJNMY8449D6tmGsAiai69X4Ig/Oa9Zi4n9bYx9TzBxyP77wp
-EGCMhYtMenPHn6gjL8RH9RiFmPsn3liTSwilZsnf2/Ai+GSfoVaJl6sCLFqZ8m+/
-cjGQIjKuhiVrE8Zy7N8uyBIAweM4tKBAugFhwtex731LKRji/ijQmORlP0w0OeSC
-qcqyPcSRj6CUv+P4s3NIt/76BEPntby9AgMBAAGjgZ4wgZswLAYDVR0RBCUwI4IK
-bG9jYWxob3N0MYIKbG9jYWxob3N0MoIJbG9jYWxob3N0MAsGA1UdDwQEAwIDqDAT
-BgNVHSUEDDAKBggrBgEFBQcDATAdBgNVHQ4EFgQUTlRjlaFYDPq9Plgmr6+k82Ya
-yyUwHwYDVR0jBBgwFoAUEsq6S0YEp3WKLOgOVJS8EmWme84wCQYDVR0TBAIwADAN
-BgkqhkiG9w0BAQsFAAOCAQEALPlIM3yTyjycWJKMK4dhnw2cnehDQxLWo0Bx7Msx
-doBosVTRhvSznshQYrSHEr6b1jwrzyIOZibCMd0fxpceYaRR6mh1gWa5O6Yf9oDs
-a6plZgwCq8lXvWpObSQwE3tlF2CaFDdX9yJmVX0aGlsnQzvUiLwv09e71T+bJSZd
-OaBMioQs2wSHit9JfUvShXoJXt9rG7VunLsr9sUBGVqH0M8WZ4tUQYfBM8Mh9uWE
-0oRd2oLNOU1Ql/ODN57lBA7cxiDRs/bHPd2Vvoy5cnJ6cWaqSo7PNzjoyAZpaI3Y
-1otMI1An+um7KqaJVq2+Tb2+DNdVtPS592q1LH9fn9/2YQ==
+ggEKAoIBAQDIhP5pZDPD3LV0iseyu9lp4qmVbV+3JeaCACv1UyHnKK5mtjj9FbGR
+iFIxKbtz4uCZYpVENVHXVMjSbSU88C4DG6ihJeGDmly9ZVeTRH6jzN2sWWlgAeCA
+udDEcGPPF6DGEw8hO8jBRk4Y/Wo2diRKV9hzLxNCoC6QH7+EnYHnvfh1U/P6UuHw
+qvYj1w1hFwzlmqvi1ejDyWsqptr5y/ZNHUBTfmgvUZ/TF5U0ITINR9apTSi74FAT
+L1t2oZBaUUgvztvZ2i7ROg/7gGEkCwt5skXNHS1m7kqWXQi3xICVLU6OrA4V+iwG
+DEl0SYF3F6WyAd6qiCuaZhO7BrSJ++SRAgMBAAGjggEeMIIBGjAsBgNVHREEJTAj
+ggpsb2NhbGhvc3Qxggpsb2NhbGhvc3Qygglsb2NhbGhvc3QwCwYDVR0PBAQDAgOo
+MBMGA1UdJQQMMAoGCCsGAQUFBwMBMB0GA1UdDgQWBBSzd5PEypqzYs9RDRcdjof2
+wj4XdTAfBgNVHSMEGDAWgBSHy7EzLsFnfnHj5StMTaSzbtJbqTAJBgNVHRMEAjAA
+MEMGCCsGAQUFBwEBBDcwNTAzBggrBgEFBQcwAoYnaHR0cDovL3Rlc3QuY3VybC5z
+ZS9jYS9FZGVsQ3VybFJvb3QuY2VyMDgGA1UdHwQxMC8wLaAroCmGJ2h0dHA6Ly90
+ZXN0LmN1cmwuc2UvY2EvRWRlbEN1cmxSb290LmNybDANBgkqhkiG9w0BAQsFAAOC
+AQEAECJgVvYUtwMYxAG6BsdlSZjXZGTUKisZFtEO6bAEhgH7rjfkyRk31QInY9pv
+3qLQIzZ/Lz5V0rXvI133rHE/lXe8dNMeUdl9fg2OA/OClT6I3TztOqq04YX72Oo/
+an00t7Pfsf4r7K/gHJzsQ2OAFzoyyhM1Lcc9PqyqVdYabT/w/yNP4IihQtmRHKVr
+hxQbC00kqDM2eiH34oacZTbzfAxNvvGYRcMn5BFKfYrjcK77rJ+m9A3cp4M5UMMe
+GpVoDbBWj2TS26Gnl9Es6nr5my9fTe18+d90GoFzefgAKngYI3J6S2ZrYdqVKYV8
+TUJ2LkNwbawM3JjVR9rhVAxxvw==
-----END CERTIFICATE-----
diff --git a/tests/certs/Server-localhost-lastSAN-sv.prm b/tests/certs/Server-localhost-lastSAN-sv.prm
new file mode 100644
index 000000000..c5e72f454
--- /dev/null
+++ b/tests/certs/Server-localhost-lastSAN-sv.prm
@@ -0,0 +1,38 @@
+extensions = x509v3
+[ x509v3 ]
+subjectAltName = DNS:localhost1,DNS:localhost2,DNS:localhost
+keyUsage = keyEncipherment,digitalSignature,keyAgreement
+extendedKeyUsage = serverAuth
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid
+basicConstraints = CA:false
+authorityInfoAccess = @issuer_info
+crlDistributionPoints = @crl_info
+
+[ crl_ext ]
+authorityKeyIdentifier = keyid:always
+authorityInfoAccess = @issuer_info
+
+[ issuer_info ]
+caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer
+
+[ crl_info ]
+URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl
+
+[ req ]
+default_bits = 1024
+distinguished_name = req_DN
+default_md = sha256
+string_mask = utf8only
+[ req_DN ]
+countryName = "Country Name is Northern Nowhere"
+countryName_value = NN
+organizationName = "Organization Name"
+organizationName_value = Edel Curl Arctic Illudium Research Cloud
+commonName = "Common Name"
+commonName_value = localhost.nn
+
+[something]
+# The key
+# the certificate
+# some dhparam
diff --git a/tests/certs/Server-localhost-lastSAN-sv.pub.der b/tests/certs/Server-localhost-lastSAN-sv.pub.der
index 480ee31a9..fc61b6de9 100644
--- a/tests/certs/Server-localhost-lastSAN-sv.pub.der
+++ b/tests/certs/Server-localhost-lastSAN-sv.pub.der
Binary files differ
diff --git a/tests/certs/Server-localhost-lastSAN-sv.pub.pem b/tests/certs/Server-localhost-lastSAN-sv.pub.pem
index 5c1d3330f..3644fd9a9 100644
--- a/tests/certs/Server-localhost-lastSAN-sv.pub.pem
+++ b/tests/certs/Server-localhost-lastSAN-sv.pub.pem
@@ -1,9 +1,9 @@
-----BEGIN PUBLIC KEY-----
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvZcOp222c4zQIWvzNnRd
-Cqo68PpusVwcE3TKZysiA9GmPCXvh0/oOJ8hHS6IEjZmggMCTPgXNQKVMbFTQCEk
-LwDwv4BYFrGSs9N4v3jLCpEM0m1dsh9BcxYCfBrNFiXJ4RuBvYSTTGPOOPQ+rZhr
-AImouvV+CIPzmvWYuJ/W2MfU8wccj++8KRBgjIWLTHpzx5+oIy/ER/UYhZj7J95Y
-k0sIpWbJ39vwIvhkn6FWiZerAixamfJvv3IxkCIyroYlaxPGcuzfLsgSAMHjOLSg
-QLoBYcLXse99SykY4v4o0JjkZT9MNDnkgqnKsj3EkY+glL/j+LNzSLf++gRD57W8
-vQIDAQAB
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyIT+aWQzw9y1dIrHsrvZ
+aeKplW1ftyXmggAr9VMh5yiuZrY4/RWxkYhSMSm7c+LgmWKVRDVR11TI0m0lPPAu
+AxuooSXhg5pcvWVXk0R+o8zdrFlpYAHggLnQxHBjzxegxhMPITvIwUZOGP1qNnYk
+SlfYcy8TQqAukB+/hJ2B5734dVPz+lLh8Kr2I9cNYRcM5Zqr4tXow8lrKqba+cv2
+TR1AU35oL1Gf0xeVNCEyDUfWqU0ou+BQEy9bdqGQWlFIL87b2dou0ToP+4BhJAsL
+ebJFzR0tZu5Kll0It8SAlS1OjqwOFfosBgxJdEmBdxelsgHeqogrmmYTuwa0ifvk
+kQIDAQAB
-----END PUBLIC KEY-----
diff --git a/tests/certs/Server-localhost-sv.crl b/tests/certs/Server-localhost-sv.crl
index 5b52c607b..d10b90c4c 100644
--- a/tests/certs/Server-localhost-sv.crl
+++ b/tests/certs/Server-localhost-sv.crl
@@ -1,12 +1,12 @@
-----BEGIN X509 CRL-----
-MIIB3DCBxQIBATANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJOTjExMC8GA1UE
+MIIB3DCBxQIBATANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJOTjExMC8GA1UE
CgwoRWRlbCBDdXJsIEFyY3RpYyBJbGx1ZGl1bSBSZXNlYXJjaCBDbG91ZDEmMCQG
-A1UEAwwdTm9ydGhlcm4gTm93aGVyZSBUcnVzdCBBbmNob3IXDTE4MDkxOTA3MTMx
-NFoXDTE4MTAxOTA3MTMxNFowGTAXAgYN+2bB8FMXDTE4MDkxOTA3MTMxNFqgDjAM
-MAoGA1UdFAQDAgEBMA0GCSqGSIb3DQEBBQUAA4IBAQCllmWJK8FzgV2ebqeiXzxv
-OHnz3E4pgz40qB66ry6PAlbXpYWwjAdpRaG/G4tN8q3q6iloHdkPK6Ed5coB3UXU
-kRy/rojSTxzRYqt15sndz9943URJW4EGZNKf64DKq7yQL4B19ik2x7CcWNqdfsx9
-w7R/ypqTxK3+L5bcLgXMTVZEAWwez9aTAnNl3bL2pN16fC15SU9vS8HOl0R5GQeO
-dl9dZRVwKg119PUAngLeEmQcTZcHr5aOMDBJTgTKybOHJCgkC/1mICISU5JAxvc7
-03ohKy5ZzzTzi7wJyfT3QOgC8EDc/6+wa3AjJMAccEth4USC4ABlX1ja2aZLa1L5
+A1UEAwwdTm9ydGhlcm4gTm93aGVyZSBUcnVzdCBBbmNob3IXDTIyMTIyMzEyMjEz
+NloXDTIzMDEyMjEyMjEzNlowGTAXAgYPNHVRKjwXDTIyMTIyMzEyMjEzNlqgDjAM
+MAoGA1UdFAQDAgEBMA0GCSqGSIb3DQEBCwUAA4IBAQBU6nAPnIyD/G6eK21pfHeh
+myCoBy+B9b8R1Ed1Y3YDoWS6KFXAoPJxWmy0gdo0sbhzVvC4iSb1iZzWjki/rAVL
+lkYdJr+r/D5y7A80+Kngf18j77oLvtRkNiVT4Kac1kHg7h9oznO42T+DI90PPd33
+puX+J/aH9V51NUyZcQWQjY7ZiOMbMUnCjozwhidVPL65pK/ggrTFy08WorHpx4Ew
+i1oT5qD478+/4alUxs+EFJMvVTBPrKbpBYq2fr1n1L1/XdRGLi4U3M9B4jsXdmXd
+JyHPVlMNNBPTM8S95vNko4Q94UuZrCQv0TlPJtQI1B0KDDWCJxuyA/3+hYRFglBe
-----END X509 CRL-----
diff --git a/tests/certs/Server-localhost-sv.crt b/tests/certs/Server-localhost-sv.crt
index e3fc42a98..06355e3e6 100644
--- a/tests/certs/Server-localhost-sv.crt
+++ b/tests/certs/Server-localhost-sv.crt
@@ -1,41 +1,41 @@
Certificate:
Data:
Version: 3 (0x2)
- Serial Number: 15373411938387 (0xdfb66c1f053)
+ Serial Number: 16717980969532 (0xf3475512a3c)
Signature Algorithm: sha256WithRSAEncryption
Issuer:
countryName = NN
organizationName = Edel Curl Arctic Illudium Research Cloud
commonName = Northern Nowhere Trust Anchor
Validity
- Not Before: Sep 19 07:13:14 2018 GMT
- Not After : Dec 6 07:13:14 2026 GMT
+ Not Before: Dec 23 12:21:36 2022 GMT
+ Not After : Mar 11 12:21:36 2031 GMT
Subject:
countryName = NN
organizationName = Edel Curl Arctic Illudium Research Cloud
commonName = localhost
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
- RSA Public-Key: (2048 bit)
+ Public-Key: (2048 bit)
Modulus:
- 00:9f:a9:30:50:f9:70:bc:33:7f:1f:aa:c6:5e:5a:
- 0a:f6:cf:99:22:cd:bc:3a:41:e7:76:bc:05:01:85:
- 24:cd:22:79:47:26:4d:6a:9d:41:cf:31:80:20:1f:
- 5f:3a:87:2f:4f:ff:5c:23:ac:67:0b:f4:14:58:a7:
- 47:d7:76:03:53:fe:b3:0d:23:08:19:ff:b4:ac:47:
- bd:60:90:c8:04:94:05:cb:cf:1b:10:aa:bb:08:46:
- 54:42:a8:2b:cc:35:f9:6a:b9:46:9e:82:47:18:77:
- cf:c0:48:1f:5c:d2:9b:ed:fd:8d:3d:29:0b:20:b7:
- dd:02:60:27:62:18:73:1c:0c:b1:82:2d:3c:9c:1e:
- b6:3e:86:f4:0e:d3:02:50:f1:f8:01:87:32:8a:2d:
- c5:61:0b:aa:94:f0:b3:29:3f:49:a7:f6:4a:dd:75:
- 30:c0:62:97:14:6b:de:4d:71:44:40:39:8e:08:f5:
- b9:73:41:d5:eb:12:d8:ce:5d:be:29:76:ea:6b:94:
- 18:d7:2c:43:5e:89:12:f1:50:f2:2d:c0:6d:19:07:
- 99:96:f3:a8:46:f3:3b:e8:c8:1d:0d:fa:54:96:a0:
- 26:2c:4f:c0:60:84:a9:21:39:0f:44:28:e4:e3:11:
- 79:e4:a3:44:e2:20:e1:9d:65:54:a2:27:56:67:94:
- 02:27
+ 00:c6:b8:04:3d:d6:fa:31:a0:d7:f7:e9:88:4b:5a:
+ 5e:6f:6f:db:f4:c9:4b:7e:6c:2a:cf:34:7b:2a:ba:
+ 1a:71:ad:7f:78:6c:f7:1e:ca:07:d0:29:03:49:e4:
+ 63:86:4c:f6:67:3f:bd:32:69:cb:b8:15:e7:0e:cf:
+ 28:3d:9e:96:91:8e:4f:73:a9:27:77:4c:26:61:cd:
+ d6:e7:4e:3c:64:c3:13:ba:8e:ec:03:0f:bc:d4:83:
+ b3:94:f2:be:d0:18:30:c5:52:49:cb:9a:60:cf:f3:
+ b9:ca:2f:63:9d:34:ee:87:3a:58:e7:a1:99:dd:dc:
+ 56:87:e1:a0:d7:6b:37:ae:bb:13:db:7d:fa:2a:3d:
+ 9c:39:79:f6:01:a6:e3:3a:e7:18:14:cb:c7:57:b9:
+ 83:d1:ba:b8:2c:5a:c4:97:2f:ee:8d:68:48:37:f8:
+ 17:db:32:b9:ea:25:4f:28:57:01:39:13:dc:c0:f7:
+ d0:cc:65:f9:2b:b8:4c:a1:5b:11:ce:44:e2:28:b9:
+ 63:62:fd:08:fa:b6:cd:49:d5:b9:fe:9e:68:9c:9a:
+ b5:1a:3e:cc:bf:0e:74:db:52:3f:25:30:cd:7d:02:
+ 41:c7:c9:8a:58:12:35:25:21:95:c4:6b:c3:f5:79:
+ c2:00:cb:ef:7f:d7:9f:89:c9:ff:c0:b9:72:59:4c:
+ 33:47
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Alternative Name:
@@ -45,48 +45,55 @@ Certificate:
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Subject Key Identifier:
- D2:36:0A:53:12:B2:99:64:47:05:53:D2:17:69:12:FC:8E:DB:D7:07
+ 4A:F1:79:1B:13:71:A4:0F:F9:06:CC:B6:2C:CD:24:46:DF:E6:08:2D
X509v3 Authority Key Identifier:
- keyid:12:CA:BA:4B:46:04:A7:75:8A:2C:E8:0E:54:94:BC:12:65:A6:7B:CE
-
+ 87:CB:B1:33:2E:C1:67:7E:71:E3:E5:2B:4C:4D:A4:B3:6E:D2:5B:A9
X509v3 Basic Constraints:
CA:FALSE
+ Authority Information Access:
+ CA Issuers - URI:http://test.curl.se/ca/EdelCurlRoot.cer
+ X509v3 CRL Distribution Points:
+ Full Name:
+ URI:http://test.curl.se/ca/EdelCurlRoot.crl
Signature Algorithm: sha256WithRSAEncryption
- 2a:cc:91:d3:be:49:63:2f:84:f2:cf:e8:43:e7:fa:fc:c5:b9:
- d7:6b:d7:40:2b:ee:89:58:98:24:57:cd:eb:51:a0:8b:22:18:
- 7d:57:81:f5:0c:06:14:d1:81:90:78:59:34:23:d6:68:19:c7:
- 8b:13:1c:b2:76:65:a1:9b:24:c8:b6:43:04:a5:2b:2e:c4:4b:
- c9:69:03:1f:ca:86:54:53:e5:25:a1:5d:a3:22:11:d9:2e:c8:
- 1a:e0:dd:04:3b:6f:3c:ea:a6:73:5f:80:bd:6c:3b:41:be:3b:
- 1e:fa:68:be:91:9f:85:c0:81:28:cb:38:23:eb:b4:16:bf:81:
- 1c:eb:67:9e:b3:03:84:b0:a1:2d:76:ba:7a:55:77:31:49:2d:
- 40:7a:bf:3f:e3:d2:50:11:ad:3a:06:fd:b5:75:36:50:29:5c:
- 26:e4:45:43:1d:25:78:f1:de:81:f1:d9:39:70:70:46:77:48:
- ca:64:7a:19:57:5f:4d:9b:0b:0d:57:bb:c1:b5:1f:d9:ab:26:
- fb:4b:54:2d:01:2a:f3:e4:6f:e7:b3:4a:05:4c:f3:0b:a6:d1:
- 10:5a:27:e4:15:6c:80:55:2c:63:50:f1:36:0d:eb:ff:e1:eb:
- 68:20:7e:a5:98:7c:0e:d0:1e:f5:68:7f:4f:3e:b9:b8:e0:0f:
- ea:34:a6:b1
+ Signature Value:
+ 67:ef:ad:8f:fa:ee:f1:fd:33:67:62:06:5f:09:55:7c:cf:82:
+ 1a:e8:fc:f5:97:ba:63:bd:d0:a0:8b:85:2c:fc:f0:34:4a:97:
+ b2:18:d7:63:34:63:f4:1f:50:c7:0e:13:d9:bc:3b:73:3d:41:
+ 93:16:b3:30:95:88:cd:75:c8:8c:58:4b:ab:96:e6:78:68:15:
+ 0f:84:e7:8e:17:94:1a:b3:f3:12:ab:26:fd:fa:73:31:33:36:
+ 85:83:2d:e3:3a:f2:a6:29:c6:37:30:3d:17:d2:39:31:d1:56:
+ 1b:8d:df:fb:07:ad:81:0b:91:e5:bd:7b:37:a0:a0:5a:2c:33:
+ 2b:8d:69:8b:d7:c1:45:61:85:ef:32:45:dd:00:a2:81:98:44:
+ 0d:eb:01:95:fc:ac:0f:b5:34:a4:5f:35:5c:68:63:50:5a:69:
+ 56:f3:99:c4:67:70:89:13:30:c0:64:ff:f1:a6:77:68:69:63:
+ 9e:6f:f8:3c:6f:cd:af:7f:de:0d:87:55:ae:39:b3:b2:f5:4f:
+ 47:79:1f:32:ee:ae:8f:32:dc:88:30:cd:38:6c:4b:28:55:c3:
+ 7d:74:6b:de:d0:49:c9:05:ea:62:71:a6:f8:1e:76:da:3c:a7:
+ 17:cd:1a:92:a3:c4:e8:85:d1:ad:34:0c:71:37:3f:6c:d3:7f:
+ 9a:d6:ca:de
-----BEGIN CERTIFICATE-----
-MIIDwzCCAqugAwIBAgIGDftmwfBTMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
+MIIERDCCAyygAwIBAgIGDzR1USo8MA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
Ak5OMTEwLwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNo
IENsb3VkMSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjAe
-Fw0xODA5MTkwNzEzMTRaFw0yNjEyMDYwNzEzMTRaMFQxCzAJBgNVBAYTAk5OMTEw
+Fw0yMjEyMjMxMjIxMzZaFw0zMTAzMTExMjIxMzZaMFQxCzAJBgNVBAYTAk5OMTEw
LwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3Vk
MRIwEAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
-AoIBAQCfqTBQ+XC8M38fqsZeWgr2z5kizbw6Qed2vAUBhSTNInlHJk1qnUHPMYAg
-H186hy9P/1wjrGcL9BRYp0fXdgNT/rMNIwgZ/7SsR71gkMgElAXLzxsQqrsIRlRC
-qCvMNflquUaegkcYd8/ASB9c0pvt/Y09KQsgt90CYCdiGHMcDLGCLTycHrY+hvQO
-0wJQ8fgBhzKKLcVhC6qU8LMpP0mn9krddTDAYpcUa95NcURAOY4I9blzQdXrEtjO
-Xb4pduprlBjXLENeiRLxUPItwG0ZB5mW86hG8zvoyB0N+lSWoCYsT8BghKkhOQ9E
-KOTjEXnko0TiIOGdZVSiJ1ZnlAInAgMBAAGjgYYwgYMwFAYDVR0RBA0wC4IJbG9j
-YWxob3N0MAsGA1UdDwQEAwIDqDATBgNVHSUEDDAKBggrBgEFBQcDATAdBgNVHQ4E
-FgQU0jYKUxKymWRHBVPSF2kS/I7b1wcwHwYDVR0jBBgwFoAUEsq6S0YEp3WKLOgO
-VJS8EmWme84wCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAKsyR075JYy+E
-8s/oQ+f6/MW512vXQCvuiViYJFfN61GgiyIYfVeB9QwGFNGBkHhZNCPWaBnHixMc
-snZloZskyLZDBKUrLsRLyWkDH8qGVFPlJaFdoyIR2S7IGuDdBDtvPOqmc1+AvWw7
-Qb47HvpovpGfhcCBKMs4I+u0Fr+BHOtnnrMDhLChLXa6elV3MUktQHq/P+PSUBGt
-Ogb9tXU2UClcJuRFQx0lePHegfHZOXBwRndIymR6GVdfTZsLDVe7wbUf2asm+0tU
-LQEq8+Rv57NKBUzzC6bREFon5BVsgFUsY1DxNg3r/+HraCB+pZh8DtAe9Wh/Tz65
-uOAP6jSmsQ==
+AoIBAQDGuAQ91voxoNf36YhLWl5vb9v0yUt+bCrPNHsquhpxrX94bPceygfQKQNJ
+5GOGTPZnP70yacu4FecOzyg9npaRjk9zqSd3TCZhzdbnTjxkwxO6juwDD7zUg7OU
+8r7QGDDFUknLmmDP87nKL2OdNO6HOljnoZnd3FaH4aDXazeuuxPbffoqPZw5efYB
+puM65xgUy8dXuYPRurgsWsSXL+6NaEg3+BfbMrnqJU8oVwE5E9zA99DMZfkruEyh
+WxHOROIouWNi/Qj6ts1J1bn+nmicmrUaPsy/DnTbUj8lMM19AkHHyYpYEjUlIZXE
+a8P1ecIAy+9/15+Jyf/AuXJZTDNHAgMBAAGjggEGMIIBAjAUBgNVHREEDTALggls
+b2NhbGhvc3QwCwYDVR0PBAQDAgOoMBMGA1UdJQQMMAoGCCsGAQUFBwMBMB0GA1Ud
+DgQWBBRK8XkbE3GkD/kGzLYszSRG3+YILTAfBgNVHSMEGDAWgBSHy7EzLsFnfnHj
+5StMTaSzbtJbqTAJBgNVHRMEAjAAMEMGCCsGAQUFBwEBBDcwNTAzBggrBgEFBQcw
+AoYnaHR0cDovL3Rlc3QuY3VybC5zZS9jYS9FZGVsQ3VybFJvb3QuY2VyMDgGA1Ud
+HwQxMC8wLaAroCmGJ2h0dHA6Ly90ZXN0LmN1cmwuc2UvY2EvRWRlbEN1cmxSb290
+LmNybDANBgkqhkiG9w0BAQsFAAOCAQEAZ++tj/ru8f0zZ2IGXwlVfM+CGuj89Ze6
+Y73QoIuFLPzwNEqXshjXYzRj9B9Qxw4T2bw7cz1BkxazMJWIzXXIjFhLq5bmeGgV
+D4TnjheUGrPzEqsm/fpzMTM2hYMt4zrypinGNzA9F9I5MdFWG43f+wetgQuR5b17
+N6CgWiwzK41pi9fBRWGF7zJF3QCigZhEDesBlfysD7U0pF81XGhjUFppVvOZxGdw
+iRMwwGT/8aZ3aGljnm/4PG/Nr3/eDYdVrjmzsvVPR3kfMu6ujzLciDDNOGxLKFXD
+fXRr3tBJyQXqYnGm+B522jynF80akqPE6IXRrTQMcTc/bNN/mtbK3g==
-----END CERTIFICATE-----
diff --git a/tests/certs/Server-localhost-sv.csr b/tests/certs/Server-localhost-sv.csr
index d75cafa92..aa3dc8ccc 100644
--- a/tests/certs/Server-localhost-sv.csr
+++ b/tests/certs/Server-localhost-sv.csr
@@ -1,16 +1,16 @@
-----BEGIN CERTIFICATE REQUEST-----
MIICmTCCAYECAQAwVDELMAkGA1UEBhMCTk4xMTAvBgNVBAoMKEVkZWwgQ3VybCBB
cmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQxEjAQBgNVBAMMCWxvY2FsaG9z
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ+pMFD5cLwzfx+qxl5a
-CvbPmSLNvDpB53a8BQGFJM0ieUcmTWqdQc8xgCAfXzqHL0//XCOsZwv0FFinR9d2
-A1P+sw0jCBn/tKxHvWCQyASUBcvPGxCquwhGVEKoK8w1+Wq5Rp6CRxh3z8BIH1zS
-m+39jT0pCyC33QJgJ2IYcxwMsYItPJwetj6G9A7TAlDx+AGHMootxWELqpTwsyk/
-Saf2St11MMBilxRr3k1xREA5jgj1uXNB1esS2M5dvil26muUGNcsQ16JEvFQ8i3A
-bRkHmZbzqEbzO+jIHQ36VJagJixPwGCEqSE5D0Qo5OMReeSjROIg4Z1lVKInVmeU
-AicCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQAH9pAANaXZsKkkYwwsQx7tJHeL
-dP9WFMg4Cs6EV5QoAju3E4SocylEA213VbBlEmCjXZXgD9c7uR1NPpO5MIMN3ohA
-+5OQ8pGN9N0MIBWlMhJnaqCYIRga4Ajh8gL9qo6Su4FmlPWFLNMnAdwf5zm5ji3V
-4QpDkOWqB/GyFVqYpsPma9VJgDp9ktc09reVzHRkhlLtWei4OOpfiDcDFuG+1IPj
-nlE13kcRBJ+TyVaVTcRc/3eBs1QUHvwFoAwLtG1Bbkzf6VhtjDSV5gyqDHedG/N5
-PNlNt3eF5Cq5i4rnC+jHuYZslWmwzXT8fM7VdHpXE9Awq6Wp6nqJ8K7+6/oX
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMa4BD3W+jGg1/fpiEta
+Xm9v2/TJS35sKs80eyq6GnGtf3hs9x7KB9ApA0nkY4ZM9mc/vTJpy7gV5w7PKD2e
+lpGOT3OpJ3dMJmHN1udOPGTDE7qO7AMPvNSDs5TyvtAYMMVSScuaYM/zucovY500
+7oc6WOehmd3cVofhoNdrN667E9t9+io9nDl59gGm4zrnGBTLx1e5g9G6uCxaxJcv
+7o1oSDf4F9syueolTyhXATkT3MD30Mxl+Su4TKFbEc5E4ii5Y2L9CPq2zUnVuf6e
+aJyatRo+zL8OdNtSPyUwzX0CQcfJilgSNSUhlcRrw/V5wgDL73/Xn4nJ/8C5cllM
+M0cCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQBtz8OLB7+70UnIZ1s3VNIoYetH
+yqnBkNQusZrWmv4kHrIUP4K8zq0HCTGTWdxOAp23aU+yZyceu75aD8WosZoT0Q71
+zTLMMjo+ZRkeWuTo+xyLYoSdlkmyQN9xaj0owQ6UycL07aainnf2+n/ybaMFtUYB
+g1LVOwSvtyLQTxByZZ7mJvl+fczSN+E4AuNA8feECXh3oZ/MmWKFGIhkJ36Q4DYD
+PZ9J2RAV11KeHXLAKjnxsetQRiEdlvKetRknMCptgjVO23qIV62EbyL5mKrlz9Kx
+lTzM788YjSx+u2PTWJi4gduTcsirVel3yFJyHjvSEhMPTPuSDfD1fXSvp22G
-----END CERTIFICATE REQUEST-----
diff --git a/tests/certs/Server-localhost-sv.der b/tests/certs/Server-localhost-sv.der
index 255d29380..2e56bd991 100644
--- a/tests/certs/Server-localhost-sv.der
+++ b/tests/certs/Server-localhost-sv.der
Binary files differ
diff --git a/tests/certs/Server-localhost-sv.key b/tests/certs/Server-localhost-sv.key
index cda47c109..a2c95eea9 100644
--- a/tests/certs/Server-localhost-sv.key
+++ b/tests/certs/Server-localhost-sv.key
@@ -1,27 +1,28 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEpQIBAAKCAQEAn6kwUPlwvDN/H6rGXloK9s+ZIs28OkHndrwFAYUkzSJ5RyZN
-ap1BzzGAIB9fOocvT/9cI6xnC/QUWKdH13YDU/6zDSMIGf+0rEe9YJDIBJQFy88b
-EKq7CEZUQqgrzDX5arlGnoJHGHfPwEgfXNKb7f2NPSkLILfdAmAnYhhzHAyxgi08
-nB62Pob0DtMCUPH4AYcyii3FYQuqlPCzKT9Jp/ZK3XUwwGKXFGveTXFEQDmOCPW5
-c0HV6xLYzl2+KXbqa5QY1yxDXokS8VDyLcBtGQeZlvOoRvM76MgdDfpUlqAmLE/A
-YISpITkPRCjk4xF55KNE4iDhnWVUoidWZ5QCJwIDAQABAoIBAQCHqDWJV6fWANtO
-iMere049jv5KeAwqY7zLQc3vELXIJjZtobm9kIhOB30Zzg4XqK0mh44+MUoM+gIf
-oWKFS5xgTdTMoKtNi9pzVzEtT1bjrPGPzhTtAGOSEE+fo0wzYtjdOTcrjv3haEt4
-0M71C225tOnAwZLW5eI/Fnvf+W40sayHnWb4S04i6hd89kqHAjtr2xDbGdd8XDJD
-3auwEqXiycpBKntrZUVBQqCPWXKCkQSrb2yftVdPwed0dnOhaLqKnnLFkdiQq6Db
-SyKcb960SGhZj+jlIraJnYvBWRZpHejBBZf/yTJrav9kAx38K/UJrLTUpRQEi0p8
-XRTOTAehAoGBANGzRhZBi0PSZ2KCKErwNUu0inBGqy9SNeTm5SbgG5vtT2gSmb2Q
-ev0DVz2qfYii0Jd9sC3BANwBGrvSJY7Rsk09JWa2skLaZa/lFDFQmlSvyEUMfKCj
-ZuCK3rO20YjzSJQamKAROAeS+u61LJgv/RngvVUUQ7o4HfJFeAV48io7AoGBAMLp
-k8KQjplvRFFuAN+W9s82d5jqCGm19ctqxtQbZNw/dlU3cZjunm1U9Opn8ws9xLrn
-pEBSYWIMbO1Fo9FyYD6SCy8VVGdy7L6mmUMZo4iyVM5mIEsyb7UkjfkBEwX/Ax4S
-wLPS6Em0zIW99YqexMeh6TeJCqoxS4IHw6GSqZ0FAoGBALkqMNAELkHD7zBHt+Z7
-9sOTds6vSAcv85Dc5SkPqLFlucEu83w0sLTrF0THX7Of+Mpb3I56JxUdEIsag7l5
-ppSXUohA+GUZzcKkZ9En2C7BTPjTjtSVlIjfdsh/vMPN9p94YJ6utafSfCr95ZO4
-hCguj2Ap1agAV0kPWGyUoFjzAoGABU8JWD5JtAIk0Tb2zSA2frRUE5UkP4TWOgEh
-gztvxtPvrCiDbo/pPr8WoJ/OLdsz1YdjoODdiCcgfGHuMVE1L98YcOLa1qp5qkOt
-Xvd+zcVVq/16GbI4+q0RNNwDoaEte481MnCnJQLIo0fmPS1P3MQbLwkLglEvZk5B
-1M/C0OUCgYEAnevGxuXS49nIwcCZQpSrAQj2DoFj0ffd3ZWeqzlFvEV0ac48YjmF
-irDzOf5uuboHom++On4MqXNAWnZVQcY6thkR/KiJp+bqfgtu01jWn9dbRCd62lAt
-09hB+Da3Z3TZ0GnXerPwYT27enP/w6hh/G4Mn73Auf6Tz1cFdwzvSNg=
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDGuAQ91voxoNf3
+6YhLWl5vb9v0yUt+bCrPNHsquhpxrX94bPceygfQKQNJ5GOGTPZnP70yacu4FecO
+zyg9npaRjk9zqSd3TCZhzdbnTjxkwxO6juwDD7zUg7OU8r7QGDDFUknLmmDP87nK
+L2OdNO6HOljnoZnd3FaH4aDXazeuuxPbffoqPZw5efYBpuM65xgUy8dXuYPRurgs
+WsSXL+6NaEg3+BfbMrnqJU8oVwE5E9zA99DMZfkruEyhWxHOROIouWNi/Qj6ts1J
+1bn+nmicmrUaPsy/DnTbUj8lMM19AkHHyYpYEjUlIZXEa8P1ecIAy+9/15+Jyf/A
+uXJZTDNHAgMBAAECggEAH48J3WhOw6LvqYeFBbKMXNY+8FknjCRRiCaliNuVZ4hO
+PinP9SvQodZhl1KWG7YNS8hrm54BpHKWB1wO3/pXnzYimBO9GM0XK2EtR/68yKPS
+dkZMZRASxQ1Fb9o9Q38T/8JZxeP2jBAA6YMtJsJJP2Cczex0Ky/a7il/CbcVWMJF
+VCqHEWCBge59xZifsKiAiK/Yw5W6uyi9OZ9a2D7bzJh0sojPIY90d7EhW4u/QCzk
+aXn78RbgxDkQyz5AQrIQzEMcOYr+AxiVT5S1v15FoaoWlm1IrNpEmf63PvwRKPZM
+ZW1cqR8onTQBndzAdwn9qHjtuRvhoHMe5RWs4rzDAQKBgQDTq2NGbkNdK14oSu7/
+t+z4Z3nGhHmY9pI1jF5/s3ialO/7YD4ul5MXaJt6dbklkPqsN0vmhPeeavAy6tsG
+iU4SdTuptKg5aZMZnDa9zu9lM4raJpDf9AuncffjVFqy9EDII5Wi1UIRDTD8D1gp
+LBYuFUTpo7R+JD3yqLXvbOw8UQKBgQDwVkgTqbAwbx35sKhpFo0VOAj3GVZkC6zt
+nFS03MmHPjge69u3B3I6oavYtwROq+6S9rj3MLuj4DhVbO5Yxi+XqY5wXhFUPPSp
+1ejXF8aAwWtZEeMTTsaN8jl3nfzdNul8G5mVfpY/VmZMhuAXclsAR9ke/x+FcmrQ
+Furd0lxIFwKBgQDSXVobzEf817YLW3WuBbBorAY1ysFCyYND3s6oIcjx8KWU8fC6
+w3+3WwpyqX8pm63V7Frtriaede9k2050b498/rAeGGK8NHWylTM+buQzcwdDieKg
+AN54Ouc/Mj217tRXVC5KF6JCahbN274lpSAiCpdjkIQ4fXJnsU6ntlwOEQKBgQDr
+rCAHsAkGpZ+mPlYWnreADC+2ZtExT8WmRvtFU5AHH7sWj0An7ZRU7D5AR89gefZ7
+hJaCRvZpTzDOi//5a3Y16V200Hl7uj5M4GbvrO/JSGHEuOaMA15uyQ0TQAg6wGMa
+gVIMp1IcD9RGzKeoNkoIL2w4mgJF8JnPLfnnxSUaxwKBgQCXP6btCbX7fryeIfUB
+PC1TOtyNvNWeoPJNT9eeNHxPC5VW2AC78XKxbHsVec16KJsOgj4Elc3h8/+X0wAU
+7Zo9CD7M2i1Tm5sKh90yBsZsU6jBWOBorLQnatDKVPXHLblVAEgK0qTJTAW8hLDn
+myYsFbt36qBXf1dVvo+5yhCxAw==
+-----END PRIVATE KEY-----
diff --git a/tests/certs/Server-localhost-sv.pem b/tests/certs/Server-localhost-sv.pem
index 55cf4a3c8..583831f8f 100644
--- a/tests/certs/Server-localhost-sv.pem
+++ b/tests/certs/Server-localhost-sv.pem
@@ -6,6 +6,19 @@ extendedKeyUsage = serverAuth
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid
basicConstraints = CA:false
+authorityInfoAccess = @issuer_info
+crlDistributionPoints = @crl_info
+
+[ crl_ext ]
+authorityKeyIdentifier = keyid:always
+authorityInfoAccess = @issuer_info
+
+[ issuer_info ]
+caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer
+
+[ crl_info ]
+URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl
+
[ req ]
default_bits = 1024
distinguished_name = req_DN
@@ -23,71 +36,72 @@ commonName_value = localhost
# The key
# the certificate
# some dhparam
------BEGIN RSA PRIVATE KEY-----
-MIIEpQIBAAKCAQEAn6kwUPlwvDN/H6rGXloK9s+ZIs28OkHndrwFAYUkzSJ5RyZN
-ap1BzzGAIB9fOocvT/9cI6xnC/QUWKdH13YDU/6zDSMIGf+0rEe9YJDIBJQFy88b
-EKq7CEZUQqgrzDX5arlGnoJHGHfPwEgfXNKb7f2NPSkLILfdAmAnYhhzHAyxgi08
-nB62Pob0DtMCUPH4AYcyii3FYQuqlPCzKT9Jp/ZK3XUwwGKXFGveTXFEQDmOCPW5
-c0HV6xLYzl2+KXbqa5QY1yxDXokS8VDyLcBtGQeZlvOoRvM76MgdDfpUlqAmLE/A
-YISpITkPRCjk4xF55KNE4iDhnWVUoidWZ5QCJwIDAQABAoIBAQCHqDWJV6fWANtO
-iMere049jv5KeAwqY7zLQc3vELXIJjZtobm9kIhOB30Zzg4XqK0mh44+MUoM+gIf
-oWKFS5xgTdTMoKtNi9pzVzEtT1bjrPGPzhTtAGOSEE+fo0wzYtjdOTcrjv3haEt4
-0M71C225tOnAwZLW5eI/Fnvf+W40sayHnWb4S04i6hd89kqHAjtr2xDbGdd8XDJD
-3auwEqXiycpBKntrZUVBQqCPWXKCkQSrb2yftVdPwed0dnOhaLqKnnLFkdiQq6Db
-SyKcb960SGhZj+jlIraJnYvBWRZpHejBBZf/yTJrav9kAx38K/UJrLTUpRQEi0p8
-XRTOTAehAoGBANGzRhZBi0PSZ2KCKErwNUu0inBGqy9SNeTm5SbgG5vtT2gSmb2Q
-ev0DVz2qfYii0Jd9sC3BANwBGrvSJY7Rsk09JWa2skLaZa/lFDFQmlSvyEUMfKCj
-ZuCK3rO20YjzSJQamKAROAeS+u61LJgv/RngvVUUQ7o4HfJFeAV48io7AoGBAMLp
-k8KQjplvRFFuAN+W9s82d5jqCGm19ctqxtQbZNw/dlU3cZjunm1U9Opn8ws9xLrn
-pEBSYWIMbO1Fo9FyYD6SCy8VVGdy7L6mmUMZo4iyVM5mIEsyb7UkjfkBEwX/Ax4S
-wLPS6Em0zIW99YqexMeh6TeJCqoxS4IHw6GSqZ0FAoGBALkqMNAELkHD7zBHt+Z7
-9sOTds6vSAcv85Dc5SkPqLFlucEu83w0sLTrF0THX7Of+Mpb3I56JxUdEIsag7l5
-ppSXUohA+GUZzcKkZ9En2C7BTPjTjtSVlIjfdsh/vMPN9p94YJ6utafSfCr95ZO4
-hCguj2Ap1agAV0kPWGyUoFjzAoGABU8JWD5JtAIk0Tb2zSA2frRUE5UkP4TWOgEh
-gztvxtPvrCiDbo/pPr8WoJ/OLdsz1YdjoODdiCcgfGHuMVE1L98YcOLa1qp5qkOt
-Xvd+zcVVq/16GbI4+q0RNNwDoaEte481MnCnJQLIo0fmPS1P3MQbLwkLglEvZk5B
-1M/C0OUCgYEAnevGxuXS49nIwcCZQpSrAQj2DoFj0ffd3ZWeqzlFvEV0ac48YjmF
-irDzOf5uuboHom++On4MqXNAWnZVQcY6thkR/KiJp+bqfgtu01jWn9dbRCd62lAt
-09hB+Da3Z3TZ0GnXerPwYT27enP/w6hh/G4Mn73Auf6Tz1cFdwzvSNg=
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDGuAQ91voxoNf3
+6YhLWl5vb9v0yUt+bCrPNHsquhpxrX94bPceygfQKQNJ5GOGTPZnP70yacu4FecO
+zyg9npaRjk9zqSd3TCZhzdbnTjxkwxO6juwDD7zUg7OU8r7QGDDFUknLmmDP87nK
+L2OdNO6HOljnoZnd3FaH4aDXazeuuxPbffoqPZw5efYBpuM65xgUy8dXuYPRurgs
+WsSXL+6NaEg3+BfbMrnqJU8oVwE5E9zA99DMZfkruEyhWxHOROIouWNi/Qj6ts1J
+1bn+nmicmrUaPsy/DnTbUj8lMM19AkHHyYpYEjUlIZXEa8P1ecIAy+9/15+Jyf/A
+uXJZTDNHAgMBAAECggEAH48J3WhOw6LvqYeFBbKMXNY+8FknjCRRiCaliNuVZ4hO
+PinP9SvQodZhl1KWG7YNS8hrm54BpHKWB1wO3/pXnzYimBO9GM0XK2EtR/68yKPS
+dkZMZRASxQ1Fb9o9Q38T/8JZxeP2jBAA6YMtJsJJP2Cczex0Ky/a7il/CbcVWMJF
+VCqHEWCBge59xZifsKiAiK/Yw5W6uyi9OZ9a2D7bzJh0sojPIY90d7EhW4u/QCzk
+aXn78RbgxDkQyz5AQrIQzEMcOYr+AxiVT5S1v15FoaoWlm1IrNpEmf63PvwRKPZM
+ZW1cqR8onTQBndzAdwn9qHjtuRvhoHMe5RWs4rzDAQKBgQDTq2NGbkNdK14oSu7/
+t+z4Z3nGhHmY9pI1jF5/s3ialO/7YD4ul5MXaJt6dbklkPqsN0vmhPeeavAy6tsG
+iU4SdTuptKg5aZMZnDa9zu9lM4raJpDf9AuncffjVFqy9EDII5Wi1UIRDTD8D1gp
+LBYuFUTpo7R+JD3yqLXvbOw8UQKBgQDwVkgTqbAwbx35sKhpFo0VOAj3GVZkC6zt
+nFS03MmHPjge69u3B3I6oavYtwROq+6S9rj3MLuj4DhVbO5Yxi+XqY5wXhFUPPSp
+1ejXF8aAwWtZEeMTTsaN8jl3nfzdNul8G5mVfpY/VmZMhuAXclsAR9ke/x+FcmrQ
+Furd0lxIFwKBgQDSXVobzEf817YLW3WuBbBorAY1ysFCyYND3s6oIcjx8KWU8fC6
+w3+3WwpyqX8pm63V7Frtriaede9k2050b498/rAeGGK8NHWylTM+buQzcwdDieKg
+AN54Ouc/Mj217tRXVC5KF6JCahbN274lpSAiCpdjkIQ4fXJnsU6ntlwOEQKBgQDr
+rCAHsAkGpZ+mPlYWnreADC+2ZtExT8WmRvtFU5AHH7sWj0An7ZRU7D5AR89gefZ7
+hJaCRvZpTzDOi//5a3Y16V200Hl7uj5M4GbvrO/JSGHEuOaMA15uyQ0TQAg6wGMa
+gVIMp1IcD9RGzKeoNkoIL2w4mgJF8JnPLfnnxSUaxwKBgQCXP6btCbX7fryeIfUB
+PC1TOtyNvNWeoPJNT9eeNHxPC5VW2AC78XKxbHsVec16KJsOgj4Elc3h8/+X0wAU
+7Zo9CD7M2i1Tm5sKh90yBsZsU6jBWOBorLQnatDKVPXHLblVAEgK0qTJTAW8hLDn
+myYsFbt36qBXf1dVvo+5yhCxAw==
+-----END PRIVATE KEY-----
Certificate:
Data:
Version: 3 (0x2)
- Serial Number: 15373411938387 (0xdfb66c1f053)
+ Serial Number: 16717980969532 (0xf3475512a3c)
Signature Algorithm: sha256WithRSAEncryption
Issuer:
countryName = NN
organizationName = Edel Curl Arctic Illudium Research Cloud
commonName = Northern Nowhere Trust Anchor
Validity
- Not Before: Sep 19 07:13:14 2018 GMT
- Not After : Dec 6 07:13:14 2026 GMT
+ Not Before: Dec 23 12:21:36 2022 GMT
+ Not After : Mar 11 12:21:36 2031 GMT
Subject:
countryName = NN
organizationName = Edel Curl Arctic Illudium Research Cloud
commonName = localhost
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
- RSA Public-Key: (2048 bit)
+ Public-Key: (2048 bit)
Modulus:
- 00:9f:a9:30:50:f9:70:bc:33:7f:1f:aa:c6:5e:5a:
- 0a:f6:cf:99:22:cd:bc:3a:41:e7:76:bc:05:01:85:
- 24:cd:22:79:47:26:4d:6a:9d:41:cf:31:80:20:1f:
- 5f:3a:87:2f:4f:ff:5c:23:ac:67:0b:f4:14:58:a7:
- 47:d7:76:03:53:fe:b3:0d:23:08:19:ff:b4:ac:47:
- bd:60:90:c8:04:94:05:cb:cf:1b:10:aa:bb:08:46:
- 54:42:a8:2b:cc:35:f9:6a:b9:46:9e:82:47:18:77:
- cf:c0:48:1f:5c:d2:9b:ed:fd:8d:3d:29:0b:20:b7:
- dd:02:60:27:62:18:73:1c:0c:b1:82:2d:3c:9c:1e:
- b6:3e:86:f4:0e:d3:02:50:f1:f8:01:87:32:8a:2d:
- c5:61:0b:aa:94:f0:b3:29:3f:49:a7:f6:4a:dd:75:
- 30:c0:62:97:14:6b:de:4d:71:44:40:39:8e:08:f5:
- b9:73:41:d5:eb:12:d8:ce:5d:be:29:76:ea:6b:94:
- 18:d7:2c:43:5e:89:12:f1:50:f2:2d:c0:6d:19:07:
- 99:96:f3:a8:46:f3:3b:e8:c8:1d:0d:fa:54:96:a0:
- 26:2c:4f:c0:60:84:a9:21:39:0f:44:28:e4:e3:11:
- 79:e4:a3:44:e2:20:e1:9d:65:54:a2:27:56:67:94:
- 02:27
+ 00:c6:b8:04:3d:d6:fa:31:a0:d7:f7:e9:88:4b:5a:
+ 5e:6f:6f:db:f4:c9:4b:7e:6c:2a:cf:34:7b:2a:ba:
+ 1a:71:ad:7f:78:6c:f7:1e:ca:07:d0:29:03:49:e4:
+ 63:86:4c:f6:67:3f:bd:32:69:cb:b8:15:e7:0e:cf:
+ 28:3d:9e:96:91:8e:4f:73:a9:27:77:4c:26:61:cd:
+ d6:e7:4e:3c:64:c3:13:ba:8e:ec:03:0f:bc:d4:83:
+ b3:94:f2:be:d0:18:30:c5:52:49:cb:9a:60:cf:f3:
+ b9:ca:2f:63:9d:34:ee:87:3a:58:e7:a1:99:dd:dc:
+ 56:87:e1:a0:d7:6b:37:ae:bb:13:db:7d:fa:2a:3d:
+ 9c:39:79:f6:01:a6:e3:3a:e7:18:14:cb:c7:57:b9:
+ 83:d1:ba:b8:2c:5a:c4:97:2f:ee:8d:68:48:37:f8:
+ 17:db:32:b9:ea:25:4f:28:57:01:39:13:dc:c0:f7:
+ d0:cc:65:f9:2b:b8:4c:a1:5b:11:ce:44:e2:28:b9:
+ 63:62:fd:08:fa:b6:cd:49:d5:b9:fe:9e:68:9c:9a:
+ b5:1a:3e:cc:bf:0e:74:db:52:3f:25:30:cd:7d:02:
+ 41:c7:c9:8a:58:12:35:25:21:95:c4:6b:c3:f5:79:
+ c2:00:cb:ef:7f:d7:9f:89:c9:ff:c0:b9:72:59:4c:
+ 33:47
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Alternative Name:
@@ -97,48 +111,55 @@ Certificate:
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Subject Key Identifier:
- D2:36:0A:53:12:B2:99:64:47:05:53:D2:17:69:12:FC:8E:DB:D7:07
+ 4A:F1:79:1B:13:71:A4:0F:F9:06:CC:B6:2C:CD:24:46:DF:E6:08:2D
X509v3 Authority Key Identifier:
- keyid:12:CA:BA:4B:46:04:A7:75:8A:2C:E8:0E:54:94:BC:12:65:A6:7B:CE
-
+ 87:CB:B1:33:2E:C1:67:7E:71:E3:E5:2B:4C:4D:A4:B3:6E:D2:5B:A9
X509v3 Basic Constraints:
CA:FALSE
+ Authority Information Access:
+ CA Issuers - URI:http://test.curl.se/ca/EdelCurlRoot.cer
+ X509v3 CRL Distribution Points:
+ Full Name:
+ URI:http://test.curl.se/ca/EdelCurlRoot.crl
Signature Algorithm: sha256WithRSAEncryption
- 2a:cc:91:d3:be:49:63:2f:84:f2:cf:e8:43:e7:fa:fc:c5:b9:
- d7:6b:d7:40:2b:ee:89:58:98:24:57:cd:eb:51:a0:8b:22:18:
- 7d:57:81:f5:0c:06:14:d1:81:90:78:59:34:23:d6:68:19:c7:
- 8b:13:1c:b2:76:65:a1:9b:24:c8:b6:43:04:a5:2b:2e:c4:4b:
- c9:69:03:1f:ca:86:54:53:e5:25:a1:5d:a3:22:11:d9:2e:c8:
- 1a:e0:dd:04:3b:6f:3c:ea:a6:73:5f:80:bd:6c:3b:41:be:3b:
- 1e:fa:68:be:91:9f:85:c0:81:28:cb:38:23:eb:b4:16:bf:81:
- 1c:eb:67:9e:b3:03:84:b0:a1:2d:76:ba:7a:55:77:31:49:2d:
- 40:7a:bf:3f:e3:d2:50:11:ad:3a:06:fd:b5:75:36:50:29:5c:
- 26:e4:45:43:1d:25:78:f1:de:81:f1:d9:39:70:70:46:77:48:
- ca:64:7a:19:57:5f:4d:9b:0b:0d:57:bb:c1:b5:1f:d9:ab:26:
- fb:4b:54:2d:01:2a:f3:e4:6f:e7:b3:4a:05:4c:f3:0b:a6:d1:
- 10:5a:27:e4:15:6c:80:55:2c:63:50:f1:36:0d:eb:ff:e1:eb:
- 68:20:7e:a5:98:7c:0e:d0:1e:f5:68:7f:4f:3e:b9:b8:e0:0f:
- ea:34:a6:b1
+ Signature Value:
+ 67:ef:ad:8f:fa:ee:f1:fd:33:67:62:06:5f:09:55:7c:cf:82:
+ 1a:e8:fc:f5:97:ba:63:bd:d0:a0:8b:85:2c:fc:f0:34:4a:97:
+ b2:18:d7:63:34:63:f4:1f:50:c7:0e:13:d9:bc:3b:73:3d:41:
+ 93:16:b3:30:95:88:cd:75:c8:8c:58:4b:ab:96:e6:78:68:15:
+ 0f:84:e7:8e:17:94:1a:b3:f3:12:ab:26:fd:fa:73:31:33:36:
+ 85:83:2d:e3:3a:f2:a6:29:c6:37:30:3d:17:d2:39:31:d1:56:
+ 1b:8d:df:fb:07:ad:81:0b:91:e5:bd:7b:37:a0:a0:5a:2c:33:
+ 2b:8d:69:8b:d7:c1:45:61:85:ef:32:45:dd:00:a2:81:98:44:
+ 0d:eb:01:95:fc:ac:0f:b5:34:a4:5f:35:5c:68:63:50:5a:69:
+ 56:f3:99:c4:67:70:89:13:30:c0:64:ff:f1:a6:77:68:69:63:
+ 9e:6f:f8:3c:6f:cd:af:7f:de:0d:87:55:ae:39:b3:b2:f5:4f:
+ 47:79:1f:32:ee:ae:8f:32:dc:88:30:cd:38:6c:4b:28:55:c3:
+ 7d:74:6b:de:d0:49:c9:05:ea:62:71:a6:f8:1e:76:da:3c:a7:
+ 17:cd:1a:92:a3:c4:e8:85:d1:ad:34:0c:71:37:3f:6c:d3:7f:
+ 9a:d6:ca:de
-----BEGIN CERTIFICATE-----
-MIIDwzCCAqugAwIBAgIGDftmwfBTMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
+MIIERDCCAyygAwIBAgIGDzR1USo8MA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
Ak5OMTEwLwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNo
IENsb3VkMSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjAe
-Fw0xODA5MTkwNzEzMTRaFw0yNjEyMDYwNzEzMTRaMFQxCzAJBgNVBAYTAk5OMTEw
+Fw0yMjEyMjMxMjIxMzZaFw0zMTAzMTExMjIxMzZaMFQxCzAJBgNVBAYTAk5OMTEw
LwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3Vk
MRIwEAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
-AoIBAQCfqTBQ+XC8M38fqsZeWgr2z5kizbw6Qed2vAUBhSTNInlHJk1qnUHPMYAg
-H186hy9P/1wjrGcL9BRYp0fXdgNT/rMNIwgZ/7SsR71gkMgElAXLzxsQqrsIRlRC
-qCvMNflquUaegkcYd8/ASB9c0pvt/Y09KQsgt90CYCdiGHMcDLGCLTycHrY+hvQO
-0wJQ8fgBhzKKLcVhC6qU8LMpP0mn9krddTDAYpcUa95NcURAOY4I9blzQdXrEtjO
-Xb4pduprlBjXLENeiRLxUPItwG0ZB5mW86hG8zvoyB0N+lSWoCYsT8BghKkhOQ9E
-KOTjEXnko0TiIOGdZVSiJ1ZnlAInAgMBAAGjgYYwgYMwFAYDVR0RBA0wC4IJbG9j
-YWxob3N0MAsGA1UdDwQEAwIDqDATBgNVHSUEDDAKBggrBgEFBQcDATAdBgNVHQ4E
-FgQU0jYKUxKymWRHBVPSF2kS/I7b1wcwHwYDVR0jBBgwFoAUEsq6S0YEp3WKLOgO
-VJS8EmWme84wCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAKsyR075JYy+E
-8s/oQ+f6/MW512vXQCvuiViYJFfN61GgiyIYfVeB9QwGFNGBkHhZNCPWaBnHixMc
-snZloZskyLZDBKUrLsRLyWkDH8qGVFPlJaFdoyIR2S7IGuDdBDtvPOqmc1+AvWw7
-Qb47HvpovpGfhcCBKMs4I+u0Fr+BHOtnnrMDhLChLXa6elV3MUktQHq/P+PSUBGt
-Ogb9tXU2UClcJuRFQx0lePHegfHZOXBwRndIymR6GVdfTZsLDVe7wbUf2asm+0tU
-LQEq8+Rv57NKBUzzC6bREFon5BVsgFUsY1DxNg3r/+HraCB+pZh8DtAe9Wh/Tz65
-uOAP6jSmsQ==
+AoIBAQDGuAQ91voxoNf36YhLWl5vb9v0yUt+bCrPNHsquhpxrX94bPceygfQKQNJ
+5GOGTPZnP70yacu4FecOzyg9npaRjk9zqSd3TCZhzdbnTjxkwxO6juwDD7zUg7OU
+8r7QGDDFUknLmmDP87nKL2OdNO6HOljnoZnd3FaH4aDXazeuuxPbffoqPZw5efYB
+puM65xgUy8dXuYPRurgsWsSXL+6NaEg3+BfbMrnqJU8oVwE5E9zA99DMZfkruEyh
+WxHOROIouWNi/Qj6ts1J1bn+nmicmrUaPsy/DnTbUj8lMM19AkHHyYpYEjUlIZXE
+a8P1ecIAy+9/15+Jyf/AuXJZTDNHAgMBAAGjggEGMIIBAjAUBgNVHREEDTALggls
+b2NhbGhvc3QwCwYDVR0PBAQDAgOoMBMGA1UdJQQMMAoGCCsGAQUFBwMBMB0GA1Ud
+DgQWBBRK8XkbE3GkD/kGzLYszSRG3+YILTAfBgNVHSMEGDAWgBSHy7EzLsFnfnHj
+5StMTaSzbtJbqTAJBgNVHRMEAjAAMEMGCCsGAQUFBwEBBDcwNTAzBggrBgEFBQcw
+AoYnaHR0cDovL3Rlc3QuY3VybC5zZS9jYS9FZGVsQ3VybFJvb3QuY2VyMDgGA1Ud
+HwQxMC8wLaAroCmGJ2h0dHA6Ly90ZXN0LmN1cmwuc2UvY2EvRWRlbEN1cmxSb290
+LmNybDANBgkqhkiG9w0BAQsFAAOCAQEAZ++tj/ru8f0zZ2IGXwlVfM+CGuj89Ze6
+Y73QoIuFLPzwNEqXshjXYzRj9B9Qxw4T2bw7cz1BkxazMJWIzXXIjFhLq5bmeGgV
+D4TnjheUGrPzEqsm/fpzMTM2hYMt4zrypinGNzA9F9I5MdFWG43f+wetgQuR5b17
+N6CgWiwzK41pi9fBRWGF7zJF3QCigZhEDesBlfysD7U0pF81XGhjUFppVvOZxGdw
+iRMwwGT/8aZ3aGljnm/4PG/Nr3/eDYdVrjmzsvVPR3kfMu6ujzLciDDNOGxLKFXD
+fXRr3tBJyQXqYnGm+B522jynF80akqPE6IXRrTQMcTc/bNN/mtbK3g==
-----END CERTIFICATE-----
diff --git a/tests/certs/Server-localhost-sv.prm b/tests/certs/Server-localhost-sv.prm
index 50ccfd858..f58710406 100644
--- a/tests/certs/Server-localhost-sv.prm
+++ b/tests/certs/Server-localhost-sv.prm
@@ -6,6 +6,19 @@ extendedKeyUsage = serverAuth
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid
basicConstraints = CA:false
+authorityInfoAccess = @issuer_info
+crlDistributionPoints = @crl_info
+
+[ crl_ext ]
+authorityKeyIdentifier = keyid:always
+authorityInfoAccess = @issuer_info
+
+[ issuer_info ]
+caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer
+
+[ crl_info ]
+URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl
+
[ req ]
default_bits = 1024
distinguished_name = req_DN
diff --git a/tests/certs/Server-localhost-sv.pub.der b/tests/certs/Server-localhost-sv.pub.der
index 5cc9ce87c..000c72163 100644
--- a/tests/certs/Server-localhost-sv.pub.der
+++ b/tests/certs/Server-localhost-sv.pub.der
Binary files differ
diff --git a/tests/certs/Server-localhost-sv.pub.pem b/tests/certs/Server-localhost-sv.pub.pem
index ef279914a..24fe14454 100644
--- a/tests/certs/Server-localhost-sv.pub.pem
+++ b/tests/certs/Server-localhost-sv.pub.pem
@@ -1,9 +1,9 @@
-----BEGIN PUBLIC KEY-----
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn6kwUPlwvDN/H6rGXloK
-9s+ZIs28OkHndrwFAYUkzSJ5RyZNap1BzzGAIB9fOocvT/9cI6xnC/QUWKdH13YD
-U/6zDSMIGf+0rEe9YJDIBJQFy88bEKq7CEZUQqgrzDX5arlGnoJHGHfPwEgfXNKb
-7f2NPSkLILfdAmAnYhhzHAyxgi08nB62Pob0DtMCUPH4AYcyii3FYQuqlPCzKT9J
-p/ZK3XUwwGKXFGveTXFEQDmOCPW5c0HV6xLYzl2+KXbqa5QY1yxDXokS8VDyLcBt
-GQeZlvOoRvM76MgdDfpUlqAmLE/AYISpITkPRCjk4xF55KNE4iDhnWVUoidWZ5QC
-JwIDAQAB
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrgEPdb6MaDX9+mIS1pe
+b2/b9MlLfmwqzzR7Kroaca1/eGz3HsoH0CkDSeRjhkz2Zz+9MmnLuBXnDs8oPZ6W
+kY5Pc6knd0wmYc3W5048ZMMTuo7sAw+81IOzlPK+0BgwxVJJy5pgz/O5yi9jnTTu
+hzpY56GZ3dxWh+Gg12s3rrsT2336Kj2cOXn2AabjOucYFMvHV7mD0bq4LFrEly/u
+jWhIN/gX2zK56iVPKFcBORPcwPfQzGX5K7hMoVsRzkTiKLljYv0I+rbNSdW5/p5o
+nJq1Gj7Mvw5021I/JTDNfQJBx8mKWBI1JSGVxGvD9XnCAMvvf9eficn/wLlyWUwz
+RwIDAQAB
-----END PUBLIC KEY-----
diff --git a/tests/certs/Server-localhost.nn-sv.crl b/tests/certs/Server-localhost.nn-sv.crl
index 6616a7334..a944c3375 100644
--- a/tests/certs/Server-localhost.nn-sv.crl
+++ b/tests/certs/Server-localhost.nn-sv.crl
@@ -1,13 +1,13 @@
-----BEGIN X509 CRL-----
-MIIB9TCB3gIBATANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJOTjExMC8GA1UE
+MIIB9TCB3gIBATANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJOTjExMC8GA1UE
CgwoRWRlbCBDdXJsIEFyY3RpYyBJbGx1ZGl1bSBSZXNlYXJjaCBDbG91ZDEmMCQG
-A1UEAwwdTm9ydGhlcm4gTm93aGVyZSBUcnVzdCBBbmNob3IXDTE4MDkxOTA3MTQx
-MloXDTE4MTAxOTA3MTQxMlowMjAXAgYN+2bB8FMXDTE4MDkxOTA3MTMxNFowFwIG
-DftmyvGeFw0xODA5MTkwNzE0MTJaoA4wDDAKBgNVHRQEAwIBATANBgkqhkiG9w0B
-AQUFAAOCAQEAO28TB22Aen+HvwiNx9L6ordY5DD04ObE4D15D05T2XpSAZ0PQput
-tlLiiMGyEaBznFFyXv9AqdAEndfxWLhS3VosQxOrrv99mkug22il4mAc4V35QlrP
-EmHhvqFh1T2Wpyd6hYMbctg/9EBe7evadrVZT79AFo9piWTkuiLyq+npC2A9tPiH
-Q/q2Bg1t1qZBDM0O5wHaxtl1sz5CfDokfAT41Fju5p74mYOd50gIXOniWZVtIsfO
-bDwpZuG+R++MrYSsdaMicVDN9cwYAv+fAvrDQvMMd/ThU2H43pJLiCW7AzD6mQ3J
-3fuuhz8WAW7WVemqVrDOPuKku8t4+3fdDw==
+A1UEAwwdTm9ydGhlcm4gTm93aGVyZSBUcnVzdCBBbmNob3IXDTIyMTIyMzEyMjEz
+N1oXDTIzMDEyMjEyMjEzN1owMjAXAgYPNHVRKjwXDTIyMTIyMzEyMjEzNlowFwIG
+DzR1UVFhFw0yMjEyMjMxMjIxMzdaoA4wDDAKBgNVHRQEAwIBATANBgkqhkiG9w0B
+AQsFAAOCAQEAii+pMstYDtBKHc84kkIEwV+zwGAAJo+jf/AHnqbagpoPKn61ci74
+74Q8BlrYTOksAJhVA/DwFnB8rwGHtGpnDvXtjpVMpvrQSGwi6D6FdjwUkq1aTQrF
+AZEHps1FCWYrOprz3YF49xQAKuq6yX+UxJXdUOqXZPgbtdGZBHNAdVK3Hu45C25e
+7U1CWKOHRMLyGJ4ynzysf3cUiSqHZG1A+WB6BeSz6guOVyb8I8/VZ+e3whcxAa5+
+YORoKFRS24bO/c9/XBsSC3E6i3kuPg/UVdI726DQwOXBYwtrkESzMsMMgeEXrNFm
+j3IyctWm2G/i/WkCNrt3bfTKV4th8tHdlA==
-----END X509 CRL-----
diff --git a/tests/certs/Server-localhost.nn-sv.crt b/tests/certs/Server-localhost.nn-sv.crt
index 6769c2741..7738e5ba6 100644
--- a/tests/certs/Server-localhost.nn-sv.crt
+++ b/tests/certs/Server-localhost.nn-sv.crt
@@ -1,41 +1,41 @@
Certificate:
Data:
Version: 3 (0x2)
- Serial Number: 15373412528542 (0xdfb66caf19e)
+ Serial Number: 16717980979553 (0xf3475515161)
Signature Algorithm: sha256WithRSAEncryption
Issuer:
countryName = NN
organizationName = Edel Curl Arctic Illudium Research Cloud
commonName = Northern Nowhere Trust Anchor
Validity
- Not Before: Sep 19 07:14:12 2018 GMT
- Not After : Dec 6 07:14:12 2026 GMT
+ Not Before: Dec 23 12:21:37 2022 GMT
+ Not After : Mar 11 12:21:37 2031 GMT
Subject:
countryName = NN
organizationName = Edel Curl Arctic Illudium Research Cloud
commonName = localhost.nn
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
- RSA Public-Key: (2048 bit)
+ Public-Key: (2048 bit)
Modulus:
- 00:f4:1e:5e:4c:8c:87:9e:09:f8:d7:62:3d:38:fb:
- 5e:9b:62:5b:02:2e:95:f5:0a:14:82:d4:07:fc:e7:
- f3:96:c3:12:1a:b9:24:fa:f4:41:7f:76:56:3d:8d:
- 72:21:2a:49:cf:54:42:09:87:16:02:98:b0:a9:c5:
- c6:d3:f2:60:ad:bb:61:17:a2:ea:35:31:1c:df:bb:
- 27:fe:9d:f9:f7:ff:6a:72:10:a3:44:75:3b:b5:3e:
- 76:1b:f7:60:a6:31:ca:4f:62:0e:7e:6d:99:9c:8e:
- 30:61:ff:37:e6:c1:91:65:0c:a1:a3:61:01:ef:75:
- dc:8f:52:9c:5b:39:45:35:63:ca:fb:ca:dd:76:4a:
- 02:78:c4:b0:2c:ec:e2:c8:de:27:9f:d6:b9:eb:39:
- de:a1:23:99:d5:65:97:78:e2:7c:08:55:97:91:84:
- 70:f4:88:c0:59:9c:f2:f0:fe:5c:71:78:bf:86:8e:
- 12:92:85:1f:15:ed:d3:83:fc:25:50:f4:86:04:cd:
- 77:7b:0c:9a:eb:ab:e9:cb:43:98:c4:1e:6e:de:d2:
- 26:9d:8e:a1:c8:df:4f:a6:66:bf:29:3b:6e:7a:b9:
- d2:be:74:16:c6:b4:c3:46:9b:09:19:42:9b:05:75:
- ae:b5:9c:5b:a3:d5:e1:76:65:59:39:bc:99:5d:00:
- 90:87
+ 00:a3:9a:e4:0f:e0:bd:93:a9:5a:a7:5e:ad:85:5e:
+ d6:e0:98:b4:e9:22:e0:62:90:c3:d9:57:37:16:5d:
+ 57:3d:68:ca:e2:cf:2f:46:67:1a:0c:af:0e:89:86:
+ 01:06:df:d6:c9:80:15:0a:43:85:40:3f:da:ee:ee:
+ 78:09:7c:90:e4:89:63:92:40:0b:22:1c:e2:d3:16:
+ a9:93:62:e4:04:7a:b0:ab:25:3a:74:02:44:ea:f1:
+ 31:89:94:29:74:a0:e2:bb:ae:e7:0f:f1:38:6a:87:
+ 1e:dd:5b:e6:a4:cc:97:ac:d3:01:9a:71:27:a3:22:
+ 6d:d8:4a:c7:49:5c:16:ae:61:a7:06:3a:90:b4:df:
+ 71:af:a5:fd:51:46:75:cd:78:e0:0c:52:99:41:4f:
+ 56:29:a6:a2:a3:dd:d9:7e:29:3e:68:a5:af:c0:34:
+ b5:73:52:12:04:90:07:1b:f5:8b:a3:71:56:c5:95:
+ 4e:62:18:d4:ec:e9:4e:90:1b:91:25:bb:32:15:db:
+ 15:38:59:14:c9:c5:c6:0a:08:aa:2d:f5:67:aa:2f:
+ eb:97:74:8a:8b:3e:5f:09:27:b0:bf:b3:a3:85:e9:
+ 7a:f5:39:dc:1d:c7:f4:34:73:d8:f2:ed:b0:c9:1d:
+ 2a:85:ee:e2:fb:51:09:5e:ff:bf:bc:79:c3:6d:30:
+ 89:b9
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Alternative Name:
@@ -45,48 +45,55 @@ Certificate:
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Subject Key Identifier:
- DA:FC:ED:BF:82:CB:15:D8:7E:A1:4B:98:23:8E:83:2A:11:6E:49:C9
+ 85:A2:1D:76:BD:C6:8B:D6:D2:2D:05:77:24:EC:78:7B:70:71:77:C1
X509v3 Authority Key Identifier:
- keyid:12:CA:BA:4B:46:04:A7:75:8A:2C:E8:0E:54:94:BC:12:65:A6:7B:CE
-
+ 87:CB:B1:33:2E:C1:67:7E:71:E3:E5:2B:4C:4D:A4:B3:6E:D2:5B:A9
X509v3 Basic Constraints:
CA:FALSE
+ Authority Information Access:
+ CA Issuers - URI:http://test.curl.se/ca/EdelCurlRoot.cer
+ X509v3 CRL Distribution Points:
+ Full Name:
+ URI:http://test.curl.se/ca/EdelCurlRoot.crl
Signature Algorithm: sha256WithRSAEncryption
- 98:27:7a:85:b6:39:0f:9f:ca:0f:68:ca:4a:f6:8b:11:2f:df:
- 52:e4:47:5f:30:09:9c:2c:d8:2c:62:3b:24:0a:3d:37:58:0e:
- be:7b:8b:c6:2d:3c:be:ad:49:1f:63:3a:8e:81:34:0e:9a:80:
- f0:f4:c2:7b:fd:6c:66:be:68:d9:27:a6:61:60:08:65:aa:f9:
- 66:89:fc:99:43:07:3c:57:d9:d4:1a:29:93:e3:b8:a4:54:57:
- 42:7c:15:6f:b4:92:af:9f:3e:d0:80:62:49:61:e3:d0:e2:0c:
- 21:c7:49:9e:eb:42:1c:04:bb:ed:e3:6a:25:d1:79:42:03:75:
- 1f:41:06:c4:cd:42:06:96:df:37:c6:c2:52:13:20:a3:98:b1:
- 1c:df:5a:47:08:08:f4:b4:d8:35:db:bf:69:07:12:29:dc:17:
- 30:11:2d:1b:d9:33:af:38:ab:35:f9:f4:9b:f9:a8:3b:d4:fe:
- 50:7d:19:82:5e:a3:92:ff:bb:59:76:74:42:83:ab:29:49:4c:
- 10:83:99:12:0f:8d:24:3e:b0:c4:e3:96:d3:a7:73:5f:7e:fb:
- a8:b6:74:53:46:af:82:93:6d:c0:99:62:0f:03:df:e9:1d:10:
- ab:f7:92:f9:52:cb:44:f3:f6:9e:49:21:e8:81:7b:fc:78:55:
- 5b:e2:18:90
+ Signature Value:
+ 66:8f:f5:ea:6a:5d:58:b6:50:b0:5b:7b:1f:c1:54:d9:a3:bb:
+ 36:1b:eb:19:4a:0e:1c:26:43:32:84:de:cb:c9:eb:08:9a:ee:
+ 9d:d5:a6:62:3e:70:de:61:89:a9:d0:11:20:2a:a6:5c:19:ab:
+ 91:71:78:f6:5f:ab:e6:03:94:b3:94:42:7b:42:c6:37:f0:4c:
+ b7:49:5d:90:c5:e3:24:2c:a0:ce:fe:be:71:11:3e:e6:0b:13:
+ 85:8d:36:e6:db:82:8b:fd:51:a3:3d:42:4c:0d:fd:cf:0b:d8:
+ 37:ab:f2:e5:53:15:3f:01:d7:a9:78:d5:99:fe:33:88:d7:c6:
+ 31:dd:bf:b1:d2:e6:31:17:6e:28:91:19:26:36:d7:bc:98:04:
+ 4c:30:cb:58:ec:b3:c9:1d:22:bf:28:bc:17:6d:2d:5d:36:c3:
+ e5:12:80:5d:02:4c:61:48:95:a8:77:96:49:e2:17:87:fd:3b:
+ cc:55:15:0d:b8:13:5e:31:97:05:78:78:7b:0d:8e:3d:ac:25:
+ 99:81:61:77:c4:a4:a2:25:f1:70:34:17:40:f7:cb:f3:fd:da:
+ ad:bd:6d:f1:dc:85:0f:dd:4d:21:9e:19:6a:97:b3:43:44:71:
+ db:74:3f:bf:8a:8d:06:54:48:fd:9e:88:e8:5d:d2:be:ee:b4:
+ 69:1b:63:11
-----BEGIN CERTIFICATE-----
-MIIDyTCCArGgAwIBAgIGDftmyvGeMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
+MIIESjCCAzKgAwIBAgIGDzR1UVFhMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
Ak5OMTEwLwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNo
IENsb3VkMSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjAe
-Fw0xODA5MTkwNzE0MTJaFw0yNjEyMDYwNzE0MTJaMFcxCzAJBgNVBAYTAk5OMTEw
+Fw0yMjEyMjMxMjIxMzdaFw0zMTAzMTExMjIxMzdaMFcxCzAJBgNVBAYTAk5OMTEw
LwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3Vk
MRUwEwYDVQQDDAxsb2NhbGhvc3Qubm4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQD0Hl5MjIeeCfjXYj04+16bYlsCLpX1ChSC1Af85/OWwxIauST69EF/
-dlY9jXIhKknPVEIJhxYCmLCpxcbT8mCtu2EXouo1MRzfuyf+nfn3/2pyEKNEdTu1
-PnYb92CmMcpPYg5+bZmcjjBh/zfmwZFlDKGjYQHvddyPUpxbOUU1Y8r7yt12SgJ4
-xLAs7OLI3ief1rnrOd6hI5nVZZd44nwIVZeRhHD0iMBZnPLw/lxxeL+GjhKShR8V
-7dOD/CVQ9IYEzXd7DJrrq+nLQ5jEHm7e0iadjqHI30+mZr8pO256udK+dBbGtMNG
-mwkZQpsFda61nFuj1eF2ZVk5vJldAJCHAgMBAAGjgYkwgYYwFwYDVR0RBBAwDoIM
-bG9jYWxob3N0Lm5uMAsGA1UdDwQEAwIDqDATBgNVHSUEDDAKBggrBgEFBQcDATAd
-BgNVHQ4EFgQU2vztv4LLFdh+oUuYI46DKhFuSckwHwYDVR0jBBgwFoAUEsq6S0YE
-p3WKLOgOVJS8EmWme84wCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAmCd6
-hbY5D5/KD2jKSvaLES/fUuRHXzAJnCzYLGI7JAo9N1gOvnuLxi08vq1JH2M6joE0
-DpqA8PTCe/1sZr5o2SemYWAIZar5Zon8mUMHPFfZ1Bopk+O4pFRXQnwVb7SSr58+
-0IBiSWHj0OIMIcdJnutCHAS77eNqJdF5QgN1H0EGxM1CBpbfN8bCUhMgo5ixHN9a
-RwgI9LTYNdu/aQcSKdwXMBEtG9kzrzirNfn0m/moO9T+UH0Zgl6jkv+7WXZ0QoOr
-KUlMEIOZEg+NJD6wxOOW06dzX377qLZ0U0avgpNtwJliDwPf6R0Qq/eS+VLLRPP2
-nkkh6IF7/HhVW+IYkA==
+ggEKAoIBAQCjmuQP4L2TqVqnXq2FXtbgmLTpIuBikMPZVzcWXVc9aMrizy9GZxoM
+rw6JhgEG39bJgBUKQ4VAP9ru7ngJfJDkiWOSQAsiHOLTFqmTYuQEerCrJTp0AkTq
+8TGJlCl0oOK7rucP8Thqhx7dW+akzJes0wGacSejIm3YSsdJXBauYacGOpC033Gv
+pf1RRnXNeOAMUplBT1YppqKj3dl+KT5opa/ANLVzUhIEkAcb9YujcVbFlU5iGNTs
+6U6QG5EluzIV2xU4WRTJxcYKCKot9WeqL+uXdIqLPl8JJ7C/s6OF6Xr1Odwdx/Q0
+c9jy7bDJHSqF7uL7UQle/7+8ecNtMIm5AgMBAAGjggEJMIIBBTAXBgNVHREEEDAO
+ggxsb2NhbGhvc3Qubm4wCwYDVR0PBAQDAgOoMBMGA1UdJQQMMAoGCCsGAQUFBwMB
+MB0GA1UdDgQWBBSFoh12vcaL1tItBXck7Hh7cHF3wTAfBgNVHSMEGDAWgBSHy7Ez
+LsFnfnHj5StMTaSzbtJbqTAJBgNVHRMEAjAAMEMGCCsGAQUFBwEBBDcwNTAzBggr
+BgEFBQcwAoYnaHR0cDovL3Rlc3QuY3VybC5zZS9jYS9FZGVsQ3VybFJvb3QuY2Vy
+MDgGA1UdHwQxMC8wLaAroCmGJ2h0dHA6Ly90ZXN0LmN1cmwuc2UvY2EvRWRlbEN1
+cmxSb290LmNybDANBgkqhkiG9w0BAQsFAAOCAQEAZo/16mpdWLZQsFt7H8FU2aO7
+NhvrGUoOHCZDMoTey8nrCJrundWmYj5w3mGJqdARICqmXBmrkXF49l+r5gOUs5RC
+e0LGN/BMt0ldkMXjJCygzv6+cRE+5gsThY025tuCi/1Roz1CTA39zwvYN6vy5VMV
+PwHXqXjVmf4ziNfGMd2/sdLmMRduKJEZJjbXvJgETDDLWOyzyR0ivyi8F20tXTbD
+5RKAXQJMYUiVqHeWSeIXh/07zFUVDbgTXjGXBXh4ew2OPawlmYFhd8SkoiXxcDQX
+QPfL8/3arb1t8dyFD91NIZ4ZapezQ0Rx23Q/v4qNBlRI/Z6I6F3Svu60aRtjEQ==
-----END CERTIFICATE-----
diff --git a/tests/certs/Server-localhost.nn-sv.csr b/tests/certs/Server-localhost.nn-sv.csr
index eb4c85b2c..af0d1c485 100644
--- a/tests/certs/Server-localhost.nn-sv.csr
+++ b/tests/certs/Server-localhost.nn-sv.csr
@@ -1,16 +1,16 @@
-----BEGIN CERTIFICATE REQUEST-----
MIICnDCCAYQCAQAwVzELMAkGA1UEBhMCTk4xMTAvBgNVBAoMKEVkZWwgQ3VybCBB
cmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQxFTATBgNVBAMMDGxvY2FsaG9z
-dC5ubjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPQeXkyMh54J+Ndi
-PTj7XptiWwIulfUKFILUB/zn85bDEhq5JPr0QX92Vj2NciEqSc9UQgmHFgKYsKnF
-xtPyYK27YRei6jUxHN+7J/6d+ff/anIQo0R1O7U+dhv3YKYxyk9iDn5tmZyOMGH/
-N+bBkWUMoaNhAe913I9SnFs5RTVjyvvK3XZKAnjEsCzs4sjeJ5/Wues53qEjmdVl
-l3jifAhVl5GEcPSIwFmc8vD+XHF4v4aOEpKFHxXt04P8JVD0hgTNd3sMmuur6ctD
-mMQebt7SJp2OocjfT6Zmvyk7bnq50r50Fsa0w0abCRlCmwV1rrWcW6PV4XZlWTm8
-mV0AkIcCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQAqoMuYYIZCrbVy+UJpkz4u
-AH3zBRsDepyJ/J2JVG9RANyKves0uD84x0m7kIntxvZR78vmCVlE4IMIeUb0lT8Z
-jVh0GkC9ppiY5X5Ro0pqtSaEZeGJVcP6/3rz4j7XzcHs8wLgBQ/11Guqjb9Zzr5a
-w+g0LpL9ebRRDWiYAqcnReqL5dYy1OEVzNHmYyMqKxfF4d1cyl7+rZoz2MmjwZH9
-3k+DKTIURtSr8TxPXO77CAfmRRGxo06zHhi9zMFV8Tb8e9B7GNINUAli92fmXWPo
-ISBxWL7+YE7fvertPLmA9qQZJPJDSdpAOdDaKr7c3gNKpbUTrie1AzZHsq+/IFzq
+dC5ubjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKOa5A/gvZOpWqde
+rYVe1uCYtOki4GKQw9lXNxZdVz1oyuLPL0ZnGgyvDomGAQbf1smAFQpDhUA/2u7u
+eAl8kOSJY5JACyIc4tMWqZNi5AR6sKslOnQCROrxMYmUKXSg4ruu5w/xOGqHHt1b
+5qTMl6zTAZpxJ6MibdhKx0lcFq5hpwY6kLTfca+l/VFGdc144AxSmUFPVimmoqPd
+2X4pPmilr8A0tXNSEgSQBxv1i6NxVsWVTmIY1OzpTpAbkSW7MhXbFThZFMnFxgoI
+qi31Z6ov65d0ios+XwknsL+zo4XpevU53B3H9DRz2PLtsMkdKoXu4vtRCV7/v7x5
+w20wibkCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQArdsmGDGMvCUZ4dOwsUDdP
+C0RCBrgwRM7jQf1f4u2avePF/sl0RYhNLYhGUT2KUqLNs5+j7wKErthD32lWSPpa
+orPnibZkEKaO7ZVFUtcN7EOmluXFXsapKilYPDCEeSsHwM5Aaofl8Mkb5e5H+idf
+Vea2DuEKFQfumczzaD9JK9tPzsVbJ6FwiPeI46XpH7vrf1DZmauDp83GfAXc1Mrm
+dd8QdoGhdNjTi7H+36l1jY+7xnZ+s1vwqxIt4BCf6p6iBy4GHApFaD7bP6dizEUq
+weTUXHllb2bgz4cHHvV5n3NXzC6oE9sVw0nLdnfPFiZpGn8VnUW1ZvE3pGcWkAzC
-----END CERTIFICATE REQUEST-----
diff --git a/tests/certs/Server-localhost.nn-sv.der b/tests/certs/Server-localhost.nn-sv.der
index c9f50a340..10b7e3558 100644
--- a/tests/certs/Server-localhost.nn-sv.der
+++ b/tests/certs/Server-localhost.nn-sv.der
Binary files differ
diff --git a/tests/certs/Server-localhost.nn-sv.key b/tests/certs/Server-localhost.nn-sv.key
index cf6f3ce5b..3e4af202e 100644
--- a/tests/certs/Server-localhost.nn-sv.key
+++ b/tests/certs/Server-localhost.nn-sv.key
@@ -1,27 +1,28 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEA9B5eTIyHngn412I9OPtem2JbAi6V9QoUgtQH/OfzlsMSGrkk
-+vRBf3ZWPY1yISpJz1RCCYcWApiwqcXG0/JgrbthF6LqNTEc37sn/p359/9qchCj
-RHU7tT52G/dgpjHKT2IOfm2ZnI4wYf835sGRZQyho2EB73Xcj1KcWzlFNWPK+8rd
-dkoCeMSwLOziyN4nn9a56zneoSOZ1WWXeOJ8CFWXkYRw9IjAWZzy8P5ccXi/ho4S
-koUfFe3Tg/wlUPSGBM13ewya66vpy0OYxB5u3tImnY6hyN9Ppma/KTtuernSvnQW
-xrTDRpsJGUKbBXWutZxbo9XhdmVZObyZXQCQhwIDAQABAoIBABjku+L8dZvlEm4M
-Q4f7AiPAPN2VGI+bTookywe8M3fNPpxhAudgXwl7bMHsGZZONKaixfUoxFLRdTpq
-w6K7VaaBtB3v7AgukO4zrJlnTKVAc39cOPnzJnqN+wdRC5cG/sVnj2jPDloLmd10
-ZCPw2z29swHxE3xyvWIUH4Oh7G/MIVr4BKooTuFEZ8yYqDYWLTmXW+p6aqMgdDwU
-18Bpqc6I8m74Ax8n4aHj74ZrFi73UNjOC4a68r5x4IRE/dRyIlXB1YLNdt2d8yZv
-LFoKBVe+5yw80qEDHVI3mr7C1kFdry41hDFxMSvSqNuQCRYH2B58/iB3CIOGIM9a
-eTyHRlECgYEA/Kg3xIF7S7IzGma9WTC158tt0/XzL7H8Js9qn9H7E0Tw2G34ftV1
-wS3sAa3o66uRQLkxL6zk1oFBu3xJjjdCU5WhIrGy5MGJmXMuAhIQdNLk+p5eXnRR
-SAPkKJZgud3R+C5DxYJrixGW9uoiB2I0f9dFYGrmMjsoLEj2vPZgu0kCgYEA91k6
-xw0OamjSlopLsyqWNt/+gK7RgBpvwencVDCZQZtVsYscAwIJvBr3yvsLdTbtNck6
-25bP6w91Pa3tRX3Uaa0H9+h0uulTvNnGzRUF/pNeGfzQT6vTd1KlBt+PKkgZIgIf
-coSgJqmMuKdzckVBBiy1uik5gFLFzQDjkFzznU8CgYEAmeYdkiUM5V72oe5TCDET
-nM3daG84YqUX4swVNqTBO0uTKUJTS27a+4DtcVhtuKAZKkOkIlY+TisNzxY199rR
-G/jY3jk/rvf0yPPP4pL+UyrjL4WoFgDkQemc4Nw4rv7fFz2XKof22g8s1dpoP/ch
-431NVR3IenBuWAtZwGCTK4ECgYEA879728IzDYuk0vMP7EywYP1VqOwdyhbDQR27
-oT+PF4cC6IZEoXY1r6gHvoCsZuMs2Y8nMFQrKuI9z/2Az7VTSJxaOORbfAIJIhae
-AWWRVbFVz1hC0/Bo4LKRq/dM9wa7tbbP1KN7yv3Ujfd+HgK/NF2E7CJJ5voqsH4K
-wy3GaKMCgYAvYH8jKQVlxVpjVR0AW4X5WNTlCaV4jOY+1185IsJHkvzG4v50yQNS
-m/9Z/hexWxJ2k6uVm3rdAaOL522JJLmE08uibNU47Lv/uHwQ579hVrC5VG3rd32X
-nJ6hR/J47yStnrLhb+uj2zAawqeODrAMRjvss/UOVJ/aN93YST1nJw==
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCjmuQP4L2TqVqn
+Xq2FXtbgmLTpIuBikMPZVzcWXVc9aMrizy9GZxoMrw6JhgEG39bJgBUKQ4VAP9ru
+7ngJfJDkiWOSQAsiHOLTFqmTYuQEerCrJTp0AkTq8TGJlCl0oOK7rucP8Thqhx7d
+W+akzJes0wGacSejIm3YSsdJXBauYacGOpC033Gvpf1RRnXNeOAMUplBT1YppqKj
+3dl+KT5opa/ANLVzUhIEkAcb9YujcVbFlU5iGNTs6U6QG5EluzIV2xU4WRTJxcYK
+CKot9WeqL+uXdIqLPl8JJ7C/s6OF6Xr1Odwdx/Q0c9jy7bDJHSqF7uL7UQle/7+8
+ecNtMIm5AgMBAAECggEATTaCwAOfNRtOT4NdfX5fByzK5OSy5ZHQ/LgupX1z+OWG
+KzkA5McwAiB0Se9WeLoXko3CYE+xibsZRn6BZGjHsTQuLA3Rs03StzEQ4yBe4MZO
+rtcpGSsg/4jJilbEoeh0WYOYRWvg5lXS+UGwPsLYKpaDQTJ6NIHBOb1BBJxTkASA
+ti7+uGn5DvRlOgFICBpNzRl83akeV8oLOJAqMZAlGI54jZa+cHkGfkJp+JyMbtjA
+zML+oen1BYGHP++uM8fg4bn9bpixpg784qiJJsjzjQVofpZc1CaTJ32hzBCvEYrw
+kQS5zhFsEP6fn278VWijFd2QOnxoyergumVOvBbNCQKBgQC+hB56kNGVuPcfSekW
+xa5BytDlfAiAvo34N5VhHHNbe/RDtJ2w5z2ZqKg2AL0efWPb4kCMaiXZf9my0Kjm
+iRv4LQA/hj1M7W33ubg93LZ9gnVdZSzuslR6CgXoIkmP4GZPF6n7+HxKStmeqBiE
+TMc80OVE1ogXbPGcKOjxHvglawKBgQDb1tECQ9TFQtVveys69ycFSjQAFt569mQT
+PBnVLtJ8RT3JX5rTKHLmYSl7kNylIzqO43+R8HZLGj09euRjTcKpatNkg7l74/PM
+YUDQki8voWfXchpbN9pbRVhuw9TBNUvMiL9pEdoBl85MyDhydD/gC9809ljZyo+y
+q8RCrP4yawKBgBXI+cs+IBkky21SgErQU/rF/Fkhc791CrrlcDlojXBanjXXw2hl
+KNAXTxTNxNJluDN+ja8AvE9ApV4jKg0ihIY+bxbUfNH9HGQFYqIASQXVEyKY3Sh2
+T96cosxGj27aVBibNh7P7TZ5lKTlx9fpB6dWo8DZXzp+hKo8q1ZXGjz9AoGAdNuy
+zKZr8tO9Cv6JE1YPqvMvwyBk8S4KMmNPRBAYmTBhUKr+bOJieW4KlAGEGFAqr4vk
+4xnUd8Wh6g1qXBMYt9/uMM8IiP+6N9k2j+g1JveAcHjZ48VD0CKDiJWWgYGoIjhK
+rzprDU+5vPztbIG49oq5Ark0r8jKK+q8b8jvcrMCgYB/eTv2L5ReL99Hvrtm5oVE
+BkkLS4dr8hnA7QJyo84yy8yq1w5KzOiMpnnK7v6N9NkGMn7Ia8HMqFyGuqaINzlY
+NdYt+qoxLXdIDzKTSS91GAwfF25iyptx2DsdY2j2Smhp4put1/QygAbvlwXZy+kG
+T8c+FOuI1h2Bg0bSSoTfIQ==
+-----END PRIVATE KEY-----
diff --git a/tests/certs/Server-localhost.nn-sv.pem b/tests/certs/Server-localhost.nn-sv.pem
index 978242615..29dc52ce0 100644
--- a/tests/certs/Server-localhost.nn-sv.pem
+++ b/tests/certs/Server-localhost.nn-sv.pem
@@ -6,6 +6,19 @@ extendedKeyUsage = serverAuth
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid
basicConstraints = CA:false
+authorityInfoAccess = @issuer_info
+crlDistributionPoints = @crl_info
+
+[ crl_ext ]
+authorityKeyIdentifier = keyid:always
+authorityInfoAccess = @issuer_info
+
+[ issuer_info ]
+caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer
+
+[ crl_info ]
+URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl
+
[ req ]
default_bits = 1024
distinguished_name = req_DN
@@ -23,71 +36,72 @@ commonName_value = localhost.nn
# The key
# the certificate
# some dhparam
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEA9B5eTIyHngn412I9OPtem2JbAi6V9QoUgtQH/OfzlsMSGrkk
-+vRBf3ZWPY1yISpJz1RCCYcWApiwqcXG0/JgrbthF6LqNTEc37sn/p359/9qchCj
-RHU7tT52G/dgpjHKT2IOfm2ZnI4wYf835sGRZQyho2EB73Xcj1KcWzlFNWPK+8rd
-dkoCeMSwLOziyN4nn9a56zneoSOZ1WWXeOJ8CFWXkYRw9IjAWZzy8P5ccXi/ho4S
-koUfFe3Tg/wlUPSGBM13ewya66vpy0OYxB5u3tImnY6hyN9Ppma/KTtuernSvnQW
-xrTDRpsJGUKbBXWutZxbo9XhdmVZObyZXQCQhwIDAQABAoIBABjku+L8dZvlEm4M
-Q4f7AiPAPN2VGI+bTookywe8M3fNPpxhAudgXwl7bMHsGZZONKaixfUoxFLRdTpq
-w6K7VaaBtB3v7AgukO4zrJlnTKVAc39cOPnzJnqN+wdRC5cG/sVnj2jPDloLmd10
-ZCPw2z29swHxE3xyvWIUH4Oh7G/MIVr4BKooTuFEZ8yYqDYWLTmXW+p6aqMgdDwU
-18Bpqc6I8m74Ax8n4aHj74ZrFi73UNjOC4a68r5x4IRE/dRyIlXB1YLNdt2d8yZv
-LFoKBVe+5yw80qEDHVI3mr7C1kFdry41hDFxMSvSqNuQCRYH2B58/iB3CIOGIM9a
-eTyHRlECgYEA/Kg3xIF7S7IzGma9WTC158tt0/XzL7H8Js9qn9H7E0Tw2G34ftV1
-wS3sAa3o66uRQLkxL6zk1oFBu3xJjjdCU5WhIrGy5MGJmXMuAhIQdNLk+p5eXnRR
-SAPkKJZgud3R+C5DxYJrixGW9uoiB2I0f9dFYGrmMjsoLEj2vPZgu0kCgYEA91k6
-xw0OamjSlopLsyqWNt/+gK7RgBpvwencVDCZQZtVsYscAwIJvBr3yvsLdTbtNck6
-25bP6w91Pa3tRX3Uaa0H9+h0uulTvNnGzRUF/pNeGfzQT6vTd1KlBt+PKkgZIgIf
-coSgJqmMuKdzckVBBiy1uik5gFLFzQDjkFzznU8CgYEAmeYdkiUM5V72oe5TCDET
-nM3daG84YqUX4swVNqTBO0uTKUJTS27a+4DtcVhtuKAZKkOkIlY+TisNzxY199rR
-G/jY3jk/rvf0yPPP4pL+UyrjL4WoFgDkQemc4Nw4rv7fFz2XKof22g8s1dpoP/ch
-431NVR3IenBuWAtZwGCTK4ECgYEA879728IzDYuk0vMP7EywYP1VqOwdyhbDQR27
-oT+PF4cC6IZEoXY1r6gHvoCsZuMs2Y8nMFQrKuI9z/2Az7VTSJxaOORbfAIJIhae
-AWWRVbFVz1hC0/Bo4LKRq/dM9wa7tbbP1KN7yv3Ujfd+HgK/NF2E7CJJ5voqsH4K
-wy3GaKMCgYAvYH8jKQVlxVpjVR0AW4X5WNTlCaV4jOY+1185IsJHkvzG4v50yQNS
-m/9Z/hexWxJ2k6uVm3rdAaOL522JJLmE08uibNU47Lv/uHwQ579hVrC5VG3rd32X
-nJ6hR/J47yStnrLhb+uj2zAawqeODrAMRjvss/UOVJ/aN93YST1nJw==
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCjmuQP4L2TqVqn
+Xq2FXtbgmLTpIuBikMPZVzcWXVc9aMrizy9GZxoMrw6JhgEG39bJgBUKQ4VAP9ru
+7ngJfJDkiWOSQAsiHOLTFqmTYuQEerCrJTp0AkTq8TGJlCl0oOK7rucP8Thqhx7d
+W+akzJes0wGacSejIm3YSsdJXBauYacGOpC033Gvpf1RRnXNeOAMUplBT1YppqKj
+3dl+KT5opa/ANLVzUhIEkAcb9YujcVbFlU5iGNTs6U6QG5EluzIV2xU4WRTJxcYK
+CKot9WeqL+uXdIqLPl8JJ7C/s6OF6Xr1Odwdx/Q0c9jy7bDJHSqF7uL7UQle/7+8
+ecNtMIm5AgMBAAECggEATTaCwAOfNRtOT4NdfX5fByzK5OSy5ZHQ/LgupX1z+OWG
+KzkA5McwAiB0Se9WeLoXko3CYE+xibsZRn6BZGjHsTQuLA3Rs03StzEQ4yBe4MZO
+rtcpGSsg/4jJilbEoeh0WYOYRWvg5lXS+UGwPsLYKpaDQTJ6NIHBOb1BBJxTkASA
+ti7+uGn5DvRlOgFICBpNzRl83akeV8oLOJAqMZAlGI54jZa+cHkGfkJp+JyMbtjA
+zML+oen1BYGHP++uM8fg4bn9bpixpg784qiJJsjzjQVofpZc1CaTJ32hzBCvEYrw
+kQS5zhFsEP6fn278VWijFd2QOnxoyergumVOvBbNCQKBgQC+hB56kNGVuPcfSekW
+xa5BytDlfAiAvo34N5VhHHNbe/RDtJ2w5z2ZqKg2AL0efWPb4kCMaiXZf9my0Kjm
+iRv4LQA/hj1M7W33ubg93LZ9gnVdZSzuslR6CgXoIkmP4GZPF6n7+HxKStmeqBiE
+TMc80OVE1ogXbPGcKOjxHvglawKBgQDb1tECQ9TFQtVveys69ycFSjQAFt569mQT
+PBnVLtJ8RT3JX5rTKHLmYSl7kNylIzqO43+R8HZLGj09euRjTcKpatNkg7l74/PM
+YUDQki8voWfXchpbN9pbRVhuw9TBNUvMiL9pEdoBl85MyDhydD/gC9809ljZyo+y
+q8RCrP4yawKBgBXI+cs+IBkky21SgErQU/rF/Fkhc791CrrlcDlojXBanjXXw2hl
+KNAXTxTNxNJluDN+ja8AvE9ApV4jKg0ihIY+bxbUfNH9HGQFYqIASQXVEyKY3Sh2
+T96cosxGj27aVBibNh7P7TZ5lKTlx9fpB6dWo8DZXzp+hKo8q1ZXGjz9AoGAdNuy
+zKZr8tO9Cv6JE1YPqvMvwyBk8S4KMmNPRBAYmTBhUKr+bOJieW4KlAGEGFAqr4vk
+4xnUd8Wh6g1qXBMYt9/uMM8IiP+6N9k2j+g1JveAcHjZ48VD0CKDiJWWgYGoIjhK
+rzprDU+5vPztbIG49oq5Ark0r8jKK+q8b8jvcrMCgYB/eTv2L5ReL99Hvrtm5oVE
+BkkLS4dr8hnA7QJyo84yy8yq1w5KzOiMpnnK7v6N9NkGMn7Ia8HMqFyGuqaINzlY
+NdYt+qoxLXdIDzKTSS91GAwfF25iyptx2DsdY2j2Smhp4put1/QygAbvlwXZy+kG
+T8c+FOuI1h2Bg0bSSoTfIQ==
+-----END PRIVATE KEY-----
Certificate:
Data:
Version: 3 (0x2)
- Serial Number: 15373412528542 (0xdfb66caf19e)
+ Serial Number: 16717980979553 (0xf3475515161)
Signature Algorithm: sha256WithRSAEncryption
Issuer:
countryName = NN
organizationName = Edel Curl Arctic Illudium Research Cloud
commonName = Northern Nowhere Trust Anchor
Validity
- Not Before: Sep 19 07:14:12 2018 GMT
- Not After : Dec 6 07:14:12 2026 GMT
+ Not Before: Dec 23 12:21:37 2022 GMT
+ Not After : Mar 11 12:21:37 2031 GMT
Subject:
countryName = NN
organizationName = Edel Curl Arctic Illudium Research Cloud
commonName = localhost.nn
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
- RSA Public-Key: (2048 bit)
+ Public-Key: (2048 bit)
Modulus:
- 00:f4:1e:5e:4c:8c:87:9e:09:f8:d7:62:3d:38:fb:
- 5e:9b:62:5b:02:2e:95:f5:0a:14:82:d4:07:fc:e7:
- f3:96:c3:12:1a:b9:24:fa:f4:41:7f:76:56:3d:8d:
- 72:21:2a:49:cf:54:42:09:87:16:02:98:b0:a9:c5:
- c6:d3:f2:60:ad:bb:61:17:a2:ea:35:31:1c:df:bb:
- 27:fe:9d:f9:f7:ff:6a:72:10:a3:44:75:3b:b5:3e:
- 76:1b:f7:60:a6:31:ca:4f:62:0e:7e:6d:99:9c:8e:
- 30:61:ff:37:e6:c1:91:65:0c:a1:a3:61:01:ef:75:
- dc:8f:52:9c:5b:39:45:35:63:ca:fb:ca:dd:76:4a:
- 02:78:c4:b0:2c:ec:e2:c8:de:27:9f:d6:b9:eb:39:
- de:a1:23:99:d5:65:97:78:e2:7c:08:55:97:91:84:
- 70:f4:88:c0:59:9c:f2:f0:fe:5c:71:78:bf:86:8e:
- 12:92:85:1f:15:ed:d3:83:fc:25:50:f4:86:04:cd:
- 77:7b:0c:9a:eb:ab:e9:cb:43:98:c4:1e:6e:de:d2:
- 26:9d:8e:a1:c8:df:4f:a6:66:bf:29:3b:6e:7a:b9:
- d2:be:74:16:c6:b4:c3:46:9b:09:19:42:9b:05:75:
- ae:b5:9c:5b:a3:d5:e1:76:65:59:39:bc:99:5d:00:
- 90:87
+ 00:a3:9a:e4:0f:e0:bd:93:a9:5a:a7:5e:ad:85:5e:
+ d6:e0:98:b4:e9:22:e0:62:90:c3:d9:57:37:16:5d:
+ 57:3d:68:ca:e2:cf:2f:46:67:1a:0c:af:0e:89:86:
+ 01:06:df:d6:c9:80:15:0a:43:85:40:3f:da:ee:ee:
+ 78:09:7c:90:e4:89:63:92:40:0b:22:1c:e2:d3:16:
+ a9:93:62:e4:04:7a:b0:ab:25:3a:74:02:44:ea:f1:
+ 31:89:94:29:74:a0:e2:bb:ae:e7:0f:f1:38:6a:87:
+ 1e:dd:5b:e6:a4:cc:97:ac:d3:01:9a:71:27:a3:22:
+ 6d:d8:4a:c7:49:5c:16:ae:61:a7:06:3a:90:b4:df:
+ 71:af:a5:fd:51:46:75:cd:78:e0:0c:52:99:41:4f:
+ 56:29:a6:a2:a3:dd:d9:7e:29:3e:68:a5:af:c0:34:
+ b5:73:52:12:04:90:07:1b:f5:8b:a3:71:56:c5:95:
+ 4e:62:18:d4:ec:e9:4e:90:1b:91:25:bb:32:15:db:
+ 15:38:59:14:c9:c5:c6:0a:08:aa:2d:f5:67:aa:2f:
+ eb:97:74:8a:8b:3e:5f:09:27:b0:bf:b3:a3:85:e9:
+ 7a:f5:39:dc:1d:c7:f4:34:73:d8:f2:ed:b0:c9:1d:
+ 2a:85:ee:e2:fb:51:09:5e:ff:bf:bc:79:c3:6d:30:
+ 89:b9
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Alternative Name:
@@ -97,48 +111,55 @@ Certificate:
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Subject Key Identifier:
- DA:FC:ED:BF:82:CB:15:D8:7E:A1:4B:98:23:8E:83:2A:11:6E:49:C9
+ 85:A2:1D:76:BD:C6:8B:D6:D2:2D:05:77:24:EC:78:7B:70:71:77:C1
X509v3 Authority Key Identifier:
- keyid:12:CA:BA:4B:46:04:A7:75:8A:2C:E8:0E:54:94:BC:12:65:A6:7B:CE
-
+ 87:CB:B1:33:2E:C1:67:7E:71:E3:E5:2B:4C:4D:A4:B3:6E:D2:5B:A9
X509v3 Basic Constraints:
CA:FALSE
+ Authority Information Access:
+ CA Issuers - URI:http://test.curl.se/ca/EdelCurlRoot.cer
+ X509v3 CRL Distribution Points:
+ Full Name:
+ URI:http://test.curl.se/ca/EdelCurlRoot.crl
Signature Algorithm: sha256WithRSAEncryption
- 98:27:7a:85:b6:39:0f:9f:ca:0f:68:ca:4a:f6:8b:11:2f:df:
- 52:e4:47:5f:30:09:9c:2c:d8:2c:62:3b:24:0a:3d:37:58:0e:
- be:7b:8b:c6:2d:3c:be:ad:49:1f:63:3a:8e:81:34:0e:9a:80:
- f0:f4:c2:7b:fd:6c:66:be:68:d9:27:a6:61:60:08:65:aa:f9:
- 66:89:fc:99:43:07:3c:57:d9:d4:1a:29:93:e3:b8:a4:54:57:
- 42:7c:15:6f:b4:92:af:9f:3e:d0:80:62:49:61:e3:d0:e2:0c:
- 21:c7:49:9e:eb:42:1c:04:bb:ed:e3:6a:25:d1:79:42:03:75:
- 1f:41:06:c4:cd:42:06:96:df:37:c6:c2:52:13:20:a3:98:b1:
- 1c:df:5a:47:08:08:f4:b4:d8:35:db:bf:69:07:12:29:dc:17:
- 30:11:2d:1b:d9:33:af:38:ab:35:f9:f4:9b:f9:a8:3b:d4:fe:
- 50:7d:19:82:5e:a3:92:ff:bb:59:76:74:42:83:ab:29:49:4c:
- 10:83:99:12:0f:8d:24:3e:b0:c4:e3:96:d3:a7:73:5f:7e:fb:
- a8:b6:74:53:46:af:82:93:6d:c0:99:62:0f:03:df:e9:1d:10:
- ab:f7:92:f9:52:cb:44:f3:f6:9e:49:21:e8:81:7b:fc:78:55:
- 5b:e2:18:90
+ Signature Value:
+ 66:8f:f5:ea:6a:5d:58:b6:50:b0:5b:7b:1f:c1:54:d9:a3:bb:
+ 36:1b:eb:19:4a:0e:1c:26:43:32:84:de:cb:c9:eb:08:9a:ee:
+ 9d:d5:a6:62:3e:70:de:61:89:a9:d0:11:20:2a:a6:5c:19:ab:
+ 91:71:78:f6:5f:ab:e6:03:94:b3:94:42:7b:42:c6:37:f0:4c:
+ b7:49:5d:90:c5:e3:24:2c:a0:ce:fe:be:71:11:3e:e6:0b:13:
+ 85:8d:36:e6:db:82:8b:fd:51:a3:3d:42:4c:0d:fd:cf:0b:d8:
+ 37:ab:f2:e5:53:15:3f:01:d7:a9:78:d5:99:fe:33:88:d7:c6:
+ 31:dd:bf:b1:d2:e6:31:17:6e:28:91:19:26:36:d7:bc:98:04:
+ 4c:30:cb:58:ec:b3:c9:1d:22:bf:28:bc:17:6d:2d:5d:36:c3:
+ e5:12:80:5d:02:4c:61:48:95:a8:77:96:49:e2:17:87:fd:3b:
+ cc:55:15:0d:b8:13:5e:31:97:05:78:78:7b:0d:8e:3d:ac:25:
+ 99:81:61:77:c4:a4:a2:25:f1:70:34:17:40:f7:cb:f3:fd:da:
+ ad:bd:6d:f1:dc:85:0f:dd:4d:21:9e:19:6a:97:b3:43:44:71:
+ db:74:3f:bf:8a:8d:06:54:48:fd:9e:88:e8:5d:d2:be:ee:b4:
+ 69:1b:63:11
-----BEGIN CERTIFICATE-----
-MIIDyTCCArGgAwIBAgIGDftmyvGeMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
+MIIESjCCAzKgAwIBAgIGDzR1UVFhMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
Ak5OMTEwLwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNo
IENsb3VkMSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjAe
-Fw0xODA5MTkwNzE0MTJaFw0yNjEyMDYwNzE0MTJaMFcxCzAJBgNVBAYTAk5OMTEw
+Fw0yMjEyMjMxMjIxMzdaFw0zMTAzMTExMjIxMzdaMFcxCzAJBgNVBAYTAk5OMTEw
LwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3Vk
MRUwEwYDVQQDDAxsb2NhbGhvc3Qubm4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQD0Hl5MjIeeCfjXYj04+16bYlsCLpX1ChSC1Af85/OWwxIauST69EF/
-dlY9jXIhKknPVEIJhxYCmLCpxcbT8mCtu2EXouo1MRzfuyf+nfn3/2pyEKNEdTu1
-PnYb92CmMcpPYg5+bZmcjjBh/zfmwZFlDKGjYQHvddyPUpxbOUU1Y8r7yt12SgJ4
-xLAs7OLI3ief1rnrOd6hI5nVZZd44nwIVZeRhHD0iMBZnPLw/lxxeL+GjhKShR8V
-7dOD/CVQ9IYEzXd7DJrrq+nLQ5jEHm7e0iadjqHI30+mZr8pO256udK+dBbGtMNG
-mwkZQpsFda61nFuj1eF2ZVk5vJldAJCHAgMBAAGjgYkwgYYwFwYDVR0RBBAwDoIM
-bG9jYWxob3N0Lm5uMAsGA1UdDwQEAwIDqDATBgNVHSUEDDAKBggrBgEFBQcDATAd
-BgNVHQ4EFgQU2vztv4LLFdh+oUuYI46DKhFuSckwHwYDVR0jBBgwFoAUEsq6S0YE
-p3WKLOgOVJS8EmWme84wCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAQEAmCd6
-hbY5D5/KD2jKSvaLES/fUuRHXzAJnCzYLGI7JAo9N1gOvnuLxi08vq1JH2M6joE0
-DpqA8PTCe/1sZr5o2SemYWAIZar5Zon8mUMHPFfZ1Bopk+O4pFRXQnwVb7SSr58+
-0IBiSWHj0OIMIcdJnutCHAS77eNqJdF5QgN1H0EGxM1CBpbfN8bCUhMgo5ixHN9a
-RwgI9LTYNdu/aQcSKdwXMBEtG9kzrzirNfn0m/moO9T+UH0Zgl6jkv+7WXZ0QoOr
-KUlMEIOZEg+NJD6wxOOW06dzX377qLZ0U0avgpNtwJliDwPf6R0Qq/eS+VLLRPP2
-nkkh6IF7/HhVW+IYkA==
+ggEKAoIBAQCjmuQP4L2TqVqnXq2FXtbgmLTpIuBikMPZVzcWXVc9aMrizy9GZxoM
+rw6JhgEG39bJgBUKQ4VAP9ru7ngJfJDkiWOSQAsiHOLTFqmTYuQEerCrJTp0AkTq
+8TGJlCl0oOK7rucP8Thqhx7dW+akzJes0wGacSejIm3YSsdJXBauYacGOpC033Gv
+pf1RRnXNeOAMUplBT1YppqKj3dl+KT5opa/ANLVzUhIEkAcb9YujcVbFlU5iGNTs
+6U6QG5EluzIV2xU4WRTJxcYKCKot9WeqL+uXdIqLPl8JJ7C/s6OF6Xr1Odwdx/Q0
+c9jy7bDJHSqF7uL7UQle/7+8ecNtMIm5AgMBAAGjggEJMIIBBTAXBgNVHREEEDAO
+ggxsb2NhbGhvc3Qubm4wCwYDVR0PBAQDAgOoMBMGA1UdJQQMMAoGCCsGAQUFBwMB
+MB0GA1UdDgQWBBSFoh12vcaL1tItBXck7Hh7cHF3wTAfBgNVHSMEGDAWgBSHy7Ez
+LsFnfnHj5StMTaSzbtJbqTAJBgNVHRMEAjAAMEMGCCsGAQUFBwEBBDcwNTAzBggr
+BgEFBQcwAoYnaHR0cDovL3Rlc3QuY3VybC5zZS9jYS9FZGVsQ3VybFJvb3QuY2Vy
+MDgGA1UdHwQxMC8wLaAroCmGJ2h0dHA6Ly90ZXN0LmN1cmwuc2UvY2EvRWRlbEN1
+cmxSb290LmNybDANBgkqhkiG9w0BAQsFAAOCAQEAZo/16mpdWLZQsFt7H8FU2aO7
+NhvrGUoOHCZDMoTey8nrCJrundWmYj5w3mGJqdARICqmXBmrkXF49l+r5gOUs5RC
+e0LGN/BMt0ldkMXjJCygzv6+cRE+5gsThY025tuCi/1Roz1CTA39zwvYN6vy5VMV
+PwHXqXjVmf4ziNfGMd2/sdLmMRduKJEZJjbXvJgETDDLWOyzyR0ivyi8F20tXTbD
+5RKAXQJMYUiVqHeWSeIXh/07zFUVDbgTXjGXBXh4ew2OPawlmYFhd8SkoiXxcDQX
+QPfL8/3arb1t8dyFD91NIZ4ZapezQ0Rx23Q/v4qNBlRI/Z6I6F3Svu60aRtjEQ==
-----END CERTIFICATE-----
diff --git a/tests/certs/Server-localhost.nn-sv.prm b/tests/certs/Server-localhost.nn-sv.prm
index 093d47561..5e93bf8b7 100644
--- a/tests/certs/Server-localhost.nn-sv.prm
+++ b/tests/certs/Server-localhost.nn-sv.prm
@@ -6,6 +6,19 @@ extendedKeyUsage = serverAuth
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid
basicConstraints = CA:false
+authorityInfoAccess = @issuer_info
+crlDistributionPoints = @crl_info
+
+[ crl_ext ]
+authorityKeyIdentifier = keyid:always
+authorityInfoAccess = @issuer_info
+
+[ issuer_info ]
+caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer
+
+[ crl_info ]
+URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl
+
[ req ]
default_bits = 1024
distinguished_name = req_DN
diff --git a/tests/certs/Server-localhost.nn-sv.pub.der b/tests/certs/Server-localhost.nn-sv.pub.der
index 8dabd3420..af9bcfa47 100644
--- a/tests/certs/Server-localhost.nn-sv.pub.der
+++ b/tests/certs/Server-localhost.nn-sv.pub.der
Binary files differ
diff --git a/tests/certs/Server-localhost.nn-sv.pub.pem b/tests/certs/Server-localhost.nn-sv.pub.pem
index 1ac1e43a5..85636ddd5 100644
--- a/tests/certs/Server-localhost.nn-sv.pub.pem
+++ b/tests/certs/Server-localhost.nn-sv.pub.pem
@@ -1,9 +1,9 @@
-----BEGIN PUBLIC KEY-----
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9B5eTIyHngn412I9OPte
-m2JbAi6V9QoUgtQH/OfzlsMSGrkk+vRBf3ZWPY1yISpJz1RCCYcWApiwqcXG0/Jg
-rbthF6LqNTEc37sn/p359/9qchCjRHU7tT52G/dgpjHKT2IOfm2ZnI4wYf835sGR
-ZQyho2EB73Xcj1KcWzlFNWPK+8rddkoCeMSwLOziyN4nn9a56zneoSOZ1WWXeOJ8
-CFWXkYRw9IjAWZzy8P5ccXi/ho4SkoUfFe3Tg/wlUPSGBM13ewya66vpy0OYxB5u
-3tImnY6hyN9Ppma/KTtuernSvnQWxrTDRpsJGUKbBXWutZxbo9XhdmVZObyZXQCQ
-hwIDAQAB
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo5rkD+C9k6lap16thV7W
+4Ji06SLgYpDD2Vc3Fl1XPWjK4s8vRmcaDK8OiYYBBt/WyYAVCkOFQD/a7u54CXyQ
+5IljkkALIhzi0xapk2LkBHqwqyU6dAJE6vExiZQpdKDiu67nD/E4aoce3VvmpMyX
+rNMBmnEnoyJt2ErHSVwWrmGnBjqQtN9xr6X9UUZ1zXjgDFKZQU9WKaaio93Zfik+
+aKWvwDS1c1ISBJAHG/WLo3FWxZVOYhjU7OlOkBuRJbsyFdsVOFkUycXGCgiqLfVn
+qi/rl3SKiz5fCSewv7Ojhel69TncHcf0NHPY8u2wyR0qhe7i+1EJXv+/vHnDbTCJ
+uQIDAQAB
-----END PUBLIC KEY-----
diff --git a/tests/certs/Server-localhost0h-sv.crl b/tests/certs/Server-localhost0h-sv.crl
index d0a69829b..f1d440149 100644
--- a/tests/certs/Server-localhost0h-sv.crl
+++ b/tests/certs/Server-localhost0h-sv.crl
@@ -1,14 +1,14 @@
-----BEGIN X509 CRL-----
-MIICDjCB9wIBATANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJOTjExMC8GA1UE
+MIICDjCB9wIBATANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwJOTjExMC8GA1UE
CgwoRWRlbCBDdXJsIEFyY3RpYyBJbGx1ZGl1bSBSZXNlYXJjaCBDbG91ZDEmMCQG
-A1UEAwwdTm9ydGhlcm4gTm93aGVyZSBUcnVzdCBBbmNob3IXDTE4MDkxOTA3MTQy
-M1oXDTE4MTAxOTA3MTQyM1owSzAXAgYN+2bB8FMXDTE4MDkxOTA3MTMxNFowFwIG
-DftmyvGeFw0xODA5MTkwNzE0MTJaMBcCBg37ZsyfbhcNMTgwOTE5MDcxNDIzWqAO
-MAwwCgYDVR0UBAMCAQEwDQYJKoZIhvcNAQEFBQADggEBACbgkZUTmz5Uxff0KX1n
-havsvHZbQ97BQcI2n5QP34+lwEZTQrjKy9Zx1Hj4KV7ID7j5zS+4VdZIjSBfb5TI
-mkH3d1EAYkwLJ2YW/CyVTiEht5ewh02QIlWKf6SiwvYkT50tbf1Wwu/ADeqF0JVW
-Cc6TlSPRKWokkcPz3VYLrvZ3TsJbevLQ1eT0aRHjvItZ3FAzOZpDmpWZ8vONL6nB
-Npb2/zUQ+kmd+9OVB3qq6ok+sLl7s+gdQxjw7ZAEn4pPI2J1AjCJTCDD2ZfiZB0o
-Z5LNIemkbVF56lWPTgf8s6ZKjNEaF3MsBX6JX+oI6XG7V+0JQ9HcklqZ0d2VFbjK
-WGc=
+A1UEAwwdTm9ydGhlcm4gTm93aGVyZSBUcnVzdCBBbmNob3IXDTIyMTIyMzEyMjEz
+N1oXDTIzMDEyMjEyMjEzN1owSzAXAgYPNHVRKjwXDTIyMTIyMzEyMjEzNlowFwIG
+DzR1UVFhFw0yMjEyMjMxMjIxMzdaMBcCBg80dVFRdRcNMjIxMjIzMTIyMTM3WqAO
+MAwwCgYDVR0UBAMCAQEwDQYJKoZIhvcNAQELBQADggEBAEYPECPj+TzlRKUcYBwN
+SWqSBzua1dBket0sNYYnm2Jvst27guK10XwGcD4Jei7VDdTXfxLiXMQahWO/SIUE
+ZGrFhU6vdq7rSk179acREDYFgYDNxgSKgyU4SjzTJ+VantWs+ky0lsyiu2Sh8B4G
+bDmG4mEPXPykHufpbmkUCLqFd89JiuhNTripOUzJfAWLDPPYf4gn2ktenz/hFwJA
+o5CSWsn13iO+9NRVJ/5ErIuoLEdGzRVoCfDNKAJ2XE0ZhRPclmRHThaoxRnBeQFg
+AVGB+xLd3BSZQuOw3pxn4smGXg/9BW3qEba5W24P4WA4ldw2j4q8WviOygvUVBQ7
+pCw=
-----END X509 CRL-----
diff --git a/tests/certs/Server-localhost0h-sv.crt b/tests/certs/Server-localhost0h-sv.crt
index 4aabb4533..e9892d043 100644
--- a/tests/certs/Server-localhost0h-sv.crt
+++ b/tests/certs/Server-localhost0h-sv.crt
@@ -1,92 +1,99 @@
Certificate:
Data:
Version: 3 (0x2)
- Serial Number: 15373412638574 (0xdfb66cc9f6e)
+ Serial Number: 16717980979573 (0xf3475515175)
Signature Algorithm: sha256WithRSAEncryption
Issuer:
countryName = NN
organizationName = Edel Curl Arctic Illudium Research Cloud
commonName = Northern Nowhere Trust Anchor
Validity
- Not Before: Sep 19 07:14:23 2018 GMT
- Not After : Dec 6 07:14:23 2026 GMT
+ Not Before: Dec 23 12:21:37 2022 GMT
+ Not After : Mar 11 12:21:37 2031 GMT
Subject:
countryName = NN
organizationName = Edel Curl Arctic Illudium Research Cloud
commonName = localhost
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
- RSA Public-Key: (2048 bit)
+ Public-Key: (2048 bit)
Modulus:
- 00:b8:fe:6a:b8:8a:0e:bb:34:90:cf:48:e7:dd:0d:
- 26:32:67:0a:4e:aa:9c:4c:fd:eb:6f:e1:b8:98:5d:
- b1:43:d4:09:4f:62:d8:4d:7c:d6:0b:36:93:57:fb:
- 61:02:b9:8d:35:20:9b:de:7d:a3:d5:0d:8e:44:98:
- d4:91:31:a2:1e:9a:84:cc:00:52:4b:78:c3:57:57:
- 6b:d7:25:29:bf:14:50:20:6f:1a:ee:3c:fc:bb:bf:
- 1e:1f:cd:a8:b7:fd:8d:ae:cc:78:07:c0:03:86:fd:
- ed:db:86:c1:2b:81:55:45:4a:50:07:fd:8d:85:a4:
- e9:29:dc:bb:e2:d5:dd:dd:3a:f8:62:21:3c:30:d0:
- 5a:88:71:67:53:af:78:ea:7e:08:40:32:65:16:7c:
- bf:c9:ba:f5:06:1e:02:f2:f8:b7:39:c8:85:c0:78:
- 14:d2:d9:fd:2b:8b:0c:3f:da:83:48:2f:26:24:34:
- 1b:fa:70:07:46:b4:01:ea:0d:cc:d7:81:a9:f1:66:
- c5:4e:3d:7e:b4:b3:b4:64:a3:ea:0f:ff:01:54:c1:
- 8b:1f:e9:65:d5:fc:bc:71:43:69:2e:50:f4:03:12:
- a5:91:95:20:36:dc:91:eb:aa:ab:8f:30:6c:66:22:
- 20:de:1d:b8:59:d1:16:a8:71:55:4a:66:fe:76:9c:
- 9e:e9
+ 00:df:29:93:58:82:1d:a2:b8:07:2a:b2:8f:93:0e:
+ df:15:49:72:06:93:19:4a:2d:c5:bd:56:92:5a:da:
+ f4:d3:9a:01:1c:ee:47:57:0e:9e:d8:d7:0d:c4:ce:
+ 4b:a2:f0:fc:07:ec:91:e9:95:08:f4:e9:5d:f2:49:
+ f3:0b:98:f0:d8:c7:d4:67:2f:fb:f2:94:3b:14:c8:
+ 06:da:39:70:8a:f9:4b:70:a8:74:6b:3f:5b:d1:a4:
+ 1c:ea:bd:f1:9e:c1:e2:e7:98:88:4f:e9:4b:b6:c8:
+ d6:9e:01:f3:b7:c9:ee:cd:e2:d7:96:68:14:d7:44:
+ c6:11:13:9f:6c:06:4e:57:98:53:c8:40:de:9d:44:
+ 1f:6a:f4:01:b0:56:47:5e:3b:b5:3c:29:9b:96:f3:
+ 9a:5a:78:d1:11:51:25:0e:43:82:4a:d3:df:54:5a:
+ 46:00:de:b0:a2:2e:65:54:44:40:9c:64:d3:e8:3f:
+ e8:ac:e3:0c:fb:36:0a:c5:79:37:a9:a2:ef:06:14:
+ 43:ac:9e:20:de:30:d2:ea:79:7d:ef:f2:0c:93:70:
+ 8d:bb:14:ff:4c:56:41:e4:2a:de:92:0a:ce:65:2c:
+ d3:fb:29:0f:4f:f9:16:d7:62:54:4e:4c:a8:05:34:
+ 5d:e6:20:e3:89:bc:7b:1f:df:21:57:66:a9:20:ce:
+ e6:b3
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Alternative Name:
- DNS:localhost
+ 0 ..localhost.h
X509v3 Key Usage:
Digital Signature, Key Encipherment, Key Agreement
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Subject Key Identifier:
- 19:D0:5D:AA:0F:E0:68:EF:E0:62:65:20:D3:A5:B7:1A:94:90:A9:26
+ 6B:56:00:F3:01:BC:16:8B:EB:CF:75:A1:89:DB:26:B1:C4:ED:71:64
X509v3 Authority Key Identifier:
- keyid:12:CA:BA:4B:46:04:A7:75:8A:2C:E8:0E:54:94:BC:12:65:A6:7B:CE
-
+ 87:CB:B1:33:2E:C1:67:7E:71:E3:E5:2B:4C:4D:A4:B3:6E:D2:5B:A9
X509v3 Basic Constraints:
CA:FALSE
+ Authority Information Access:
+ CA Issuers - URI:http://test.curl.se/ca/EdelCurlRoot.cer
+ X509v3 CRL Distribution Points:
+ Full Name:
+ URI:http://test.curl.se/ca/EdelCurlRoot.crl
Signature Algorithm: sha256WithRSAEncryption
- 4d:5c:e6:91:e2:35:48:aa:84:b3:45:97:bd:5c:36:e7:37:d1:
- 5e:33:17:2a:c1:5b:d2:18:70:3d:f5:8f:66:cb:49:b0:14:ee:
- 5b:4b:c5:dd:51:75:2d:94:10:b4:5e:61:91:08:cf:35:71:36:
- be:1b:c1:da:26:df:63:8b:cb:2c:35:74:8e:7c:9f:12:90:09:
- 81:65:a8:b5:fa:e7:2d:cc:33:55:f4:c4:ed:c8:ac:93:92:2d:
- 1c:db:5c:4d:d3:ca:75:68:c6:66:83:98:a1:6b:01:91:fb:e0:
- 04:59:95:6a:5a:7a:8f:5d:55:bf:ff:20:77:49:ad:10:be:7e:
- 12:3d:60:23:f3:94:cf:6a:d1:2b:d9:84:d9:57:0b:c1:b6:fb:
- 2d:4f:64:cf:d9:8f:8a:b0:2b:d2:34:fc:b4:58:b0:6d:f3:31:
- 36:42:3b:e3:6e:cd:19:77:4d:49:29:99:b1:42:27:ae:da:93:
- 0c:d6:fb:bf:ad:c1:39:ec:7c:b9:94:27:60:75:e2:d3:3c:83:
- 62:a8:68:d3:ce:7c:a4:e8:f0:b6:04:93:82:3f:8f:71:ea:60:
- 19:73:50:2e:f3:8c:09:6f:6f:3b:c4:01:b6:c8:0a:b2:19:89:
- 42:f4:6a:76:e0:0e:59:c4:20:0a:d3:50:e1:9f:b1:9b:a2:d2:
- d1:cd:65:a5
+ Signature Value:
+ 5a:b2:83:c0:94:ce:25:aa:a0:f4:b6:71:fb:16:b4:e0:10:3c:
+ 9c:a0:db:2a:fc:b7:f8:97:64:cc:19:92:56:63:a9:e6:50:d6:
+ 6d:79:b6:a3:62:23:d2:48:21:37:46:46:3e:9d:cd:1f:55:18:
+ 77:fd:7f:35:ea:d8:68:9c:1c:2f:c8:23:43:a2:cd:77:3c:5c:
+ 21:94:93:80:84:d0:6a:8a:5b:ae:11:be:79:3e:80:17:32:9e:
+ 73:0b:dd:0d:f5:f6:4f:3f:1b:a3:eb:aa:21:06:a7:ef:c7:bf:
+ e5:87:67:2c:38:a3:c1:d4:f2:b4:ce:72:9d:2e:f8:b9:91:cb:
+ 83:1a:c9:be:74:bb:ac:78:5c:d9:3e:fd:1f:9d:ac:19:5e:b3:
+ 00:66:38:71:7e:06:2e:fe:1a:c0:ad:f7:82:1d:85:6d:3d:3c:
+ 9d:62:66:cd:1e:6d:f1:67:7a:05:4a:58:6e:7a:a7:1f:2f:7c:
+ 5f:c0:2c:19:df:de:c6:2d:13:c6:3b:ea:6d:98:d0:55:98:4c:
+ 00:a7:e2:2f:7d:86:24:49:2d:86:c3:75:d0:71:41:16:8c:7b:
+ 49:25:eb:d2:cd:9b:08:b4:5f:6e:aa:4a:2d:6c:5b:89:67:7f:
+ 3f:0c:43:43:bd:83:f7:ef:1e:ee:e7:6a:e7:3a:c1:c7:aa:1d:
+ 5b:34:1b:d1
-----BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIGDftmzJ9uMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
+MIIERjCCAy6gAwIBAgIGDzR1UVF1MA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
Ak5OMTEwLwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNo
IENsb3VkMSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjAe
-Fw0xODA5MTkwNzE0MjNaFw0yNjEyMDYwNzE0MjNaMFQxCzAJBgNVBAYTAk5OMTEw
+Fw0yMjEyMjMxMjIxMzdaFw0zMTAzMTExMjIxMzdaMFQxCzAJBgNVBAYTAk5OMTEw
LwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3Vk
MRIwEAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
-AoIBAQC4/mq4ig67NJDPSOfdDSYyZwpOqpxM/etv4biYXbFD1AlPYthNfNYLNpNX
-+2ECuY01IJvefaPVDY5EmNSRMaIemoTMAFJLeMNXV2vXJSm/FFAgbxruPPy7vx4f
-zai3/Y2uzHgHwAOG/e3bhsErgVVFSlAH/Y2FpOkp3Lvi1d3dOvhiITww0FqIcWdT
-r3jqfghAMmUWfL/JuvUGHgLy+Lc5yIXAeBTS2f0riww/2oNILyYkNBv6cAdGtAHq
-DczXganxZsVOPX60s7Rko+oP/wFUwYsf6WXV/LxxQ2kuUPQDEqWRlSA23JHrqquP
-MGxmIiDeHbhZ0RaocVVKZv52nJ7pAgMBAAGjgYgwgYUwFgYDVR0RBA8wDYILbG9j
-YWxob3N0AGgwCwYDVR0PBAQDAgOoMBMGA1UdJQQMMAoGCCsGAQUFBwMBMB0GA1Ud
-DgQWBBQZ0F2qD+Bo7+BiZSDTpbcalJCpJjAfBgNVHSMEGDAWgBQSyrpLRgSndYos
-6A5UlLwSZaZ7zjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBNXOaR4jVI
-qoSzRZe9XDbnN9FeMxcqwVvSGHA99Y9my0mwFO5bS8XdUXUtlBC0XmGRCM81cTa+
-G8HaJt9ji8ssNXSOfJ8SkAmBZai1+uctzDNV9MTtyKyTki0c21xN08p1aMZmg5ih
-awGR++AEWZVqWnqPXVW//yB3Sa0Qvn4SPWAj85TPatEr2YTZVwvBtvstT2TP2Y+K
-sCvSNPy0WLBt8zE2Qjvjbs0Zd01JKZmxQieu2pMM1vu/rcE57Hy5lCdgdeLTPINi
-qGjTznyk6PC2BJOCP49x6mAZc1Au84wJb287xAG2yAqyGYlC9Gp24A5ZxCAK01Dh
-n7GbotLRzWWl
+AoIBAQDfKZNYgh2iuAcqso+TDt8VSXIGkxlKLcW9VpJa2vTTmgEc7kdXDp7Y1w3E
+zkui8PwH7JHplQj06V3ySfMLmPDYx9RnL/vylDsUyAbaOXCK+UtwqHRrP1vRpBzq
+vfGeweLnmIhP6Uu2yNaeAfO3ye7N4teWaBTXRMYRE59sBk5XmFPIQN6dRB9q9AGw
+VkdeO7U8KZuW85paeNERUSUOQ4JK099UWkYA3rCiLmVURECcZNPoP+is4wz7NgrF
+eTepou8GFEOsniDeMNLqeX3v8gyTcI27FP9MVkHkKt6SCs5lLNP7KQ9P+RbXYlRO
+TKgFNF3mIOOJvHsf3yFXZqkgzuazAgMBAAGjggEIMIIBBDAWBgNVHREEDzANggts
+b2NhbGhvc3QAaDALBgNVHQ8EBAMCA6gwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHQYD
+VR0OBBYEFGtWAPMBvBaL6891oYnbJrHE7XFkMB8GA1UdIwQYMBaAFIfLsTMuwWd+
+cePlK0xNpLNu0lupMAkGA1UdEwQCMAAwQwYIKwYBBQUHAQEENzA1MDMGCCsGAQUF
+BzAChidodHRwOi8vdGVzdC5jdXJsLnNlL2NhL0VkZWxDdXJsUm9vdC5jZXIwOAYD
+VR0fBDEwLzAtoCugKYYnaHR0cDovL3Rlc3QuY3VybC5zZS9jYS9FZGVsQ3VybFJv
+b3QuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQBasoPAlM4lqqD0tnH7FrTgEDycoNsq
+/Lf4l2TMGZJWY6nmUNZtebajYiPSSCE3RkY+nc0fVRh3/X816thonBwvyCNDos13
+PFwhlJOAhNBqiluuEb55PoAXMp5zC90N9fZPPxuj66ohBqfvx7/lh2csOKPB1PK0
+znKdLvi5kcuDGsm+dLuseFzZPv0fnawZXrMAZjhxfgYu/hrArfeCHYVtPTydYmbN
+Hm3xZ3oFSlhueqcfL3xfwCwZ397GLRPGO+ptmNBVmEwAp+IvfYYkSS2Gw3XQcUEW
+jHtJJevSzZsItF9uqkotbFuJZ38/DENDvYP37x7u52rnOsHHqh1bNBvR
-----END CERTIFICATE-----
diff --git a/tests/certs/Server-localhost0h-sv.csr b/tests/certs/Server-localhost0h-sv.csr
index 5f3cae734..d2a021e58 100644
--- a/tests/certs/Server-localhost0h-sv.csr
+++ b/tests/certs/Server-localhost0h-sv.csr
@@ -1,16 +1,16 @@
-----BEGIN CERTIFICATE REQUEST-----
MIICmTCCAYECAQAwVDELMAkGA1UEBhMCTk4xMTAvBgNVBAoMKEVkZWwgQ3VybCBB
cmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQxEjAQBgNVBAMMCWxvY2FsaG9z
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALj+ariKDrs0kM9I590N
-JjJnCk6qnEz962/huJhdsUPUCU9i2E181gs2k1f7YQK5jTUgm959o9UNjkSY1JEx
-oh6ahMwAUkt4w1dXa9clKb8UUCBvGu48/Lu/Hh/NqLf9ja7MeAfAA4b97duGwSuB
-VUVKUAf9jYWk6Sncu+LV3d06+GIhPDDQWohxZ1OveOp+CEAyZRZ8v8m69QYeAvL4
-tznIhcB4FNLZ/SuLDD/ag0gvJiQ0G/pwB0a0AeoNzNeBqfFmxU49frSztGSj6g//
-AVTBix/pZdX8vHFDaS5Q9AMSpZGVIDbckeuqq48wbGYiIN4duFnRFqhxVUpm/nac
-nukCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQCKLiSdRDn5ep/4kzMMQkSQv5Ys
-o/uj7HiJWw0IokMcgvTQWBMZ4TJzCDGmgfJ2C4y1qgfJOmFeae4mMUpNzzucZSaH
-ZlEyPk3gCj+EdcSADnxHq/2nD+19j2CGu/P/SIUSfGSLl103OIf+pYb97FxN3cN3
-2hqEJsFDQi4YAIsW+rBT+fcW35MZ+akJagLFVfq0cPbyQFIgtBu6ytnZlZBJCZYC
-u7y0yoCxikZdOQEGp6w0Nk0BvGh9SGYxkuV7oMgfNW3vzS1ay7wbjBlrhYBfLQFw
-LVu31CS6bi33f7QhjZf0yH+lEPV2B+Lqq5d4eqvwe1/pBuaS2aqfqjjCLdEd
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN8pk1iCHaK4Byqyj5MO
+3xVJcgaTGUotxb1Wklra9NOaARzuR1cOntjXDcTOS6Lw/AfskemVCPTpXfJJ8wuY
+8NjH1Gcv+/KUOxTIBto5cIr5S3CodGs/W9GkHOq98Z7B4ueYiE/pS7bI1p4B87fJ
+7s3i15ZoFNdExhETn2wGTleYU8hA3p1EH2r0AbBWR147tTwpm5bzmlp40RFRJQ5D
+gkrT31RaRgDesKIuZVREQJxk0+g/6KzjDPs2CsV5N6mi7wYUQ6yeIN4w0up5fe/y
+DJNwjbsU/0xWQeQq3pIKzmUs0/spD0/5FtdiVE5MqAU0XeYg44m8ex/fIVdmqSDO
+5rMCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQAMIFsOpe5YFYwa7F2qr1CoBYhR
+XNOEK5Yc6pY4ND+/1hbsSkT285Ar7yIA4+fFwYa4F4DkpzfZ0DLwHPqQE85pQf2M
+YyjwMIU97xwNKLHrrObpgVJ+hs8cDj0zYJVGnIWiK1556I5lotupuzzig7Fyo0XY
+OSbg+NxaXMHil4eLWIs8CapWAU4gHcZnDpkYL86aWfeFAYixB/FkcAzZJR+fOSif
+KYTc0kKR34nDpJVN1pck03tCvRY48SRliHnNpAP/Enf57BLSJvA15f64Iz3hthxL
+47xJsj2zs+CkHvfYnaLhDpTlOxr73uK4dhWcyynufvjElO2G+MOMcFRduWU6
-----END CERTIFICATE REQUEST-----
diff --git a/tests/certs/Server-localhost0h-sv.der b/tests/certs/Server-localhost0h-sv.der
index d4d7b0767..cdadd76bb 100644
--- a/tests/certs/Server-localhost0h-sv.der
+++ b/tests/certs/Server-localhost0h-sv.der
Binary files differ
diff --git a/tests/certs/Server-localhost0h-sv.key b/tests/certs/Server-localhost0h-sv.key
index fc39dead3..0e0533ec3 100644
--- a/tests/certs/Server-localhost0h-sv.key
+++ b/tests/certs/Server-localhost0h-sv.key
@@ -1,27 +1,28 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEAuP5quIoOuzSQz0jn3Q0mMmcKTqqcTP3rb+G4mF2xQ9QJT2LY
-TXzWCzaTV/thArmNNSCb3n2j1Q2ORJjUkTGiHpqEzABSS3jDV1dr1yUpvxRQIG8a
-7jz8u78eH82ot/2Nrsx4B8ADhv3t24bBK4FVRUpQB/2NhaTpKdy74tXd3Tr4YiE8
-MNBaiHFnU6946n4IQDJlFny/ybr1Bh4C8vi3OciFwHgU0tn9K4sMP9qDSC8mJDQb
-+nAHRrQB6g3M14Gp8WbFTj1+tLO0ZKPqD/8BVMGLH+ll1fy8cUNpLlD0AxKlkZUg
-NtyR66qrjzBsZiIg3h24WdEWqHFVSmb+dpye6QIDAQABAoIBAQCTb/GOcjmbaiGf
-kvN4cepncUf9umwn0Je766I7jTCiZnOlGZpa54uQFEcKcAa5LTklhn+zq17PhqZE
-dam0rmIPEgeUrwznqa/GBJ6mMbA74eyabPKBvYmP+JoBrt8xBJvPHJbtVlN5Wxgf
-Rh7elY1oU/nE5IfOY8iQ3KPB/cF9dw85EafIrQ/4neucBvV/I16XjhmNrOTOBdWS
-y1m0V3oj1238GlaWICdm1fhu8xfWiGbbUt7Lloj9Z2pm77eZwdSDF4Sa68BIyi3Z
-5xT6guXsoz2H59obzd0jardb60QjyQ93Bv8QhYHu4vHP3htlWeydwFYYE8LqoDlo
-HsLVbvwhAoGBAOElERBVjkWeI6VySeY2LfuOGLdkzp2QrXedr5yJzxaGeR1Zjcad
-TmzIMTgxk/lwmRxOaEKklRDhdgwsQVPEYjN/aknCjomsfPcYjsYVIIzOAJxL/1XB
-zDKuMIAwIiSKfp1LapKnawBKmG0SSL8T8zQMBZPUDR01REgpF9M+YpcbAoGBANJY
-s6HdvmmUkABA5iJWtwZ8ekkkVkCsq0qMxisglGcz6QW7r1w0ag1Gn4HtNFnhdzt+
-3CZZyhRzMt1SZJ0Z5i+RufH8ct9JpIiAPxmy/4vHrd3LnVvabxKtCerhtCmKUJNj
-vOSRp/rYr5bQQ+HYVS8gNwVjVJCmfG5eUZXZcq5LAoGAaoObwAuJ5Hu9R397YLNP
-K8x8+v5xFXAl8Qoj074KwBBcajs87LLtMF/BkWE7LW5MsWySvLyaXUMdEwM44MVu
-5Agqo7ysrItzD3+JxEKohJTNCySVJuApl+x6u5qJ/Jmc7xOH1tvnrlqcJDXbPrLU
-g1IQrXBLx/60UCNIx0KjZ/MCgYBLAGXMqYxjiR1vebSVOeY44dmYiuRWWzsYcemX
-Jx7DTbcg3DNC5U2LPktRwIqSIdqp1CobYpizgf/4+o/1lG6HN6bdqe4rv85y/YeC
-WljUNnbARwHs5o4EUr7eiWv8A92HMGEB/w2uW+UAGXKa7NAy5YG44hodGb/0ep0M
-mWRS0QKBgQDG5Zdh+MLMsGgujtCnp8z96IK0I1M5G7V0BWe9Rg2QpjcVCGqmucxB
-GCQwUdn8LL0kXKueC6v7GsQvOWsx+GLbLuQsAF+r4tHh+IQAQyPleLfs5bis/Kqf
-GiSMt5ahOx9q/n5HD9GK/sGjvmqJucVQ45mnZqdnhTGnS/htzQGWmw==
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDfKZNYgh2iuAcq
+so+TDt8VSXIGkxlKLcW9VpJa2vTTmgEc7kdXDp7Y1w3Ezkui8PwH7JHplQj06V3y
+SfMLmPDYx9RnL/vylDsUyAbaOXCK+UtwqHRrP1vRpBzqvfGeweLnmIhP6Uu2yNae
+AfO3ye7N4teWaBTXRMYRE59sBk5XmFPIQN6dRB9q9AGwVkdeO7U8KZuW85paeNER
+USUOQ4JK099UWkYA3rCiLmVURECcZNPoP+is4wz7NgrFeTepou8GFEOsniDeMNLq
+eX3v8gyTcI27FP9MVkHkKt6SCs5lLNP7KQ9P+RbXYlROTKgFNF3mIOOJvHsf3yFX
+ZqkgzuazAgMBAAECggEAa31sIpKx0aHQmeleLJhaLbetu6r44HkBqPxdDHQwvweM
+B7JiHHXHX2zejfBMEFUBIJP7iEYoBUeu37hs4CYvxEskbPt44NQzTQQ4AL7wDZCc
+nMwXH11qTaU95HfPPQfo0mLvLYaS2J0Oexc3nEwgwXzFGQZTG4ld2fXYsUCsVZX8
+PoHbkKWEHveQEFDmGezguc2UG3DrXaZv5gbMhVik048zX3P5cn0ic9TK9yEFZDXS
+8Qiq/SHTHEnkZV5J8s12pcDyQdi1cN96MVZ1/feeg1Pc06q7PN7xvkmZHCQ1tOdl
+b7STXNPrJ0P7OwbeB0Q3xNwqI25wicN1oaBvdR/PAQKBgQD4gN6+sR74FNC4q99T
+fuFqwJ36W8GG0jc9joJTbITXGSdArQHm838Mippp0P3MrUTLqXI0nhjH8ePjF83R
+KRWGoUvSc2Xe7LjzzEmg9CmtB+QD97Qir0468izqnlP1Ef16kbbIMLsoVgIht6YY
+klUYs7x3AtDBvHV7EKlP63kUgQKBgQDl5QDW+KZRvQU/G7tWsOZ6iQ3Ed8Zt4uRk
+EshPeCoz0S0ks8pzpa+YaAAUKsHvgiL7oLMFquuVHn7TctYBoe2/bwdj0/IW/1pP
+oDJqRJIbamjYj6qKG7Ihx0yx+z7f7vbKCgC5ifzy0Xl60E9fRIf3/dVopU+3qtwG
+qOphkrNRMwKBgQCrEixFIjGrnsjBGLC5DhOoJcmbXCcx5O1aVwyo2X/pg8td3rv8
+fYvs2k3KorDVgkJl4dRZHKz6mC7FWtG5N4s2DzvfOMncWSJJ00ysnOlD0LbLdG5x
+ojU8pxL8wNoTT7sr8bvevI1bCzqUc5TIPZSPWMxZMXr8o/xMKAAmoHfOAQKBgDBH
+VlTO5Qa3XlmxdjcvcUd8bsK6sJY1FueZNi3SO3KkVAmoJDUDL4wfEx0pGY810ijr
+x4zCJzUqsVGwhRbUrbwNEg053lZMC+g66Tt96P0O7LPF//d+93q2gvnBnKOkaHln
+fl14iAFqUkujYXfNSYyf5uhSBxq4K/rOEGKrTzMXAoGBAL3Hz3s5Gvy44SMV0UHl
+18gEqR0y9mXfgON9Rk0yE+fFYFRnFf4iHIxhodXPIGeu1CpqtXjEcG8JXVXniaao
+qNGbVs2QoBUVW81sHG9h/ulHCAwjFvZhFYgDiRQPcVd3lNJM4gigjRyw/nRnQH+2
+MVCJe5htDEMM58h8LepU4T8M
+-----END PRIVATE KEY-----
diff --git a/tests/certs/Server-localhost0h-sv.pem b/tests/certs/Server-localhost0h-sv.pem
index 869a70b8c..72f326dfb 100644
--- a/tests/certs/Server-localhost0h-sv.pem
+++ b/tests/certs/Server-localhost0h-sv.pem
@@ -7,6 +7,19 @@ extendedKeyUsage = serverAuth
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid
basicConstraints = CA:false
+authorityInfoAccess = @issuer_info
+crlDistributionPoints = @crl_info
+
+[ crl_ext ]
+authorityKeyIdentifier = keyid:always
+authorityInfoAccess = @issuer_info
+
+[ issuer_info ]
+caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer
+
+[ crl_info ]
+URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl
+
[ req ]
default_bits = 1024
distinguished_name = req_DN
@@ -24,122 +37,130 @@ commonName_value = localhost
# The key
# the certificate
# some dhparam
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEAuP5quIoOuzSQz0jn3Q0mMmcKTqqcTP3rb+G4mF2xQ9QJT2LY
-TXzWCzaTV/thArmNNSCb3n2j1Q2ORJjUkTGiHpqEzABSS3jDV1dr1yUpvxRQIG8a
-7jz8u78eH82ot/2Nrsx4B8ADhv3t24bBK4FVRUpQB/2NhaTpKdy74tXd3Tr4YiE8
-MNBaiHFnU6946n4IQDJlFny/ybr1Bh4C8vi3OciFwHgU0tn9K4sMP9qDSC8mJDQb
-+nAHRrQB6g3M14Gp8WbFTj1+tLO0ZKPqD/8BVMGLH+ll1fy8cUNpLlD0AxKlkZUg
-NtyR66qrjzBsZiIg3h24WdEWqHFVSmb+dpye6QIDAQABAoIBAQCTb/GOcjmbaiGf
-kvN4cepncUf9umwn0Je766I7jTCiZnOlGZpa54uQFEcKcAa5LTklhn+zq17PhqZE
-dam0rmIPEgeUrwznqa/GBJ6mMbA74eyabPKBvYmP+JoBrt8xBJvPHJbtVlN5Wxgf
-Rh7elY1oU/nE5IfOY8iQ3KPB/cF9dw85EafIrQ/4neucBvV/I16XjhmNrOTOBdWS
-y1m0V3oj1238GlaWICdm1fhu8xfWiGbbUt7Lloj9Z2pm77eZwdSDF4Sa68BIyi3Z
-5xT6guXsoz2H59obzd0jardb60QjyQ93Bv8QhYHu4vHP3htlWeydwFYYE8LqoDlo
-HsLVbvwhAoGBAOElERBVjkWeI6VySeY2LfuOGLdkzp2QrXedr5yJzxaGeR1Zjcad
-TmzIMTgxk/lwmRxOaEKklRDhdgwsQVPEYjN/aknCjomsfPcYjsYVIIzOAJxL/1XB
-zDKuMIAwIiSKfp1LapKnawBKmG0SSL8T8zQMBZPUDR01REgpF9M+YpcbAoGBANJY
-s6HdvmmUkABA5iJWtwZ8ekkkVkCsq0qMxisglGcz6QW7r1w0ag1Gn4HtNFnhdzt+
-3CZZyhRzMt1SZJ0Z5i+RufH8ct9JpIiAPxmy/4vHrd3LnVvabxKtCerhtCmKUJNj
-vOSRp/rYr5bQQ+HYVS8gNwVjVJCmfG5eUZXZcq5LAoGAaoObwAuJ5Hu9R397YLNP
-K8x8+v5xFXAl8Qoj074KwBBcajs87LLtMF/BkWE7LW5MsWySvLyaXUMdEwM44MVu
-5Agqo7ysrItzD3+JxEKohJTNCySVJuApl+x6u5qJ/Jmc7xOH1tvnrlqcJDXbPrLU
-g1IQrXBLx/60UCNIx0KjZ/MCgYBLAGXMqYxjiR1vebSVOeY44dmYiuRWWzsYcemX
-Jx7DTbcg3DNC5U2LPktRwIqSIdqp1CobYpizgf/4+o/1lG6HN6bdqe4rv85y/YeC
-WljUNnbARwHs5o4EUr7eiWv8A92HMGEB/w2uW+UAGXKa7NAy5YG44hodGb/0ep0M
-mWRS0QKBgQDG5Zdh+MLMsGgujtCnp8z96IK0I1M5G7V0BWe9Rg2QpjcVCGqmucxB
-GCQwUdn8LL0kXKueC6v7GsQvOWsx+GLbLuQsAF+r4tHh+IQAQyPleLfs5bis/Kqf
-GiSMt5ahOx9q/n5HD9GK/sGjvmqJucVQ45mnZqdnhTGnS/htzQGWmw==
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDfKZNYgh2iuAcq
+so+TDt8VSXIGkxlKLcW9VpJa2vTTmgEc7kdXDp7Y1w3Ezkui8PwH7JHplQj06V3y
+SfMLmPDYx9RnL/vylDsUyAbaOXCK+UtwqHRrP1vRpBzqvfGeweLnmIhP6Uu2yNae
+AfO3ye7N4teWaBTXRMYRE59sBk5XmFPIQN6dRB9q9AGwVkdeO7U8KZuW85paeNER
+USUOQ4JK099UWkYA3rCiLmVURECcZNPoP+is4wz7NgrFeTepou8GFEOsniDeMNLq
+eX3v8gyTcI27FP9MVkHkKt6SCs5lLNP7KQ9P+RbXYlROTKgFNF3mIOOJvHsf3yFX
+ZqkgzuazAgMBAAECggEAa31sIpKx0aHQmeleLJhaLbetu6r44HkBqPxdDHQwvweM
+B7JiHHXHX2zejfBMEFUBIJP7iEYoBUeu37hs4CYvxEskbPt44NQzTQQ4AL7wDZCc
+nMwXH11qTaU95HfPPQfo0mLvLYaS2J0Oexc3nEwgwXzFGQZTG4ld2fXYsUCsVZX8
+PoHbkKWEHveQEFDmGezguc2UG3DrXaZv5gbMhVik048zX3P5cn0ic9TK9yEFZDXS
+8Qiq/SHTHEnkZV5J8s12pcDyQdi1cN96MVZ1/feeg1Pc06q7PN7xvkmZHCQ1tOdl
+b7STXNPrJ0P7OwbeB0Q3xNwqI25wicN1oaBvdR/PAQKBgQD4gN6+sR74FNC4q99T
+fuFqwJ36W8GG0jc9joJTbITXGSdArQHm838Mippp0P3MrUTLqXI0nhjH8ePjF83R
+KRWGoUvSc2Xe7LjzzEmg9CmtB+QD97Qir0468izqnlP1Ef16kbbIMLsoVgIht6YY
+klUYs7x3AtDBvHV7EKlP63kUgQKBgQDl5QDW+KZRvQU/G7tWsOZ6iQ3Ed8Zt4uRk
+EshPeCoz0S0ks8pzpa+YaAAUKsHvgiL7oLMFquuVHn7TctYBoe2/bwdj0/IW/1pP
+oDJqRJIbamjYj6qKG7Ihx0yx+z7f7vbKCgC5ifzy0Xl60E9fRIf3/dVopU+3qtwG
+qOphkrNRMwKBgQCrEixFIjGrnsjBGLC5DhOoJcmbXCcx5O1aVwyo2X/pg8td3rv8
+fYvs2k3KorDVgkJl4dRZHKz6mC7FWtG5N4s2DzvfOMncWSJJ00ysnOlD0LbLdG5x
+ojU8pxL8wNoTT7sr8bvevI1bCzqUc5TIPZSPWMxZMXr8o/xMKAAmoHfOAQKBgDBH
+VlTO5Qa3XlmxdjcvcUd8bsK6sJY1FueZNi3SO3KkVAmoJDUDL4wfEx0pGY810ijr
+x4zCJzUqsVGwhRbUrbwNEg053lZMC+g66Tt96P0O7LPF//d+93q2gvnBnKOkaHln
+fl14iAFqUkujYXfNSYyf5uhSBxq4K/rOEGKrTzMXAoGBAL3Hz3s5Gvy44SMV0UHl
+18gEqR0y9mXfgON9Rk0yE+fFYFRnFf4iHIxhodXPIGeu1CpqtXjEcG8JXVXniaao
+qNGbVs2QoBUVW81sHG9h/ulHCAwjFvZhFYgDiRQPcVd3lNJM4gigjRyw/nRnQH+2
+MVCJe5htDEMM58h8LepU4T8M
+-----END PRIVATE KEY-----
Certificate:
Data:
Version: 3 (0x2)
- Serial Number: 15373412638574 (0xdfb66cc9f6e)
+ Serial Number: 16717980979573 (0xf3475515175)
Signature Algorithm: sha256WithRSAEncryption
Issuer:
countryName = NN
organizationName = Edel Curl Arctic Illudium Research Cloud
commonName = Northern Nowhere Trust Anchor
Validity
- Not Before: Sep 19 07:14:23 2018 GMT
- Not After : Dec 6 07:14:23 2026 GMT
+ Not Before: Dec 23 12:21:37 2022 GMT
+ Not After : Mar 11 12:21:37 2031 GMT
Subject:
countryName = NN
organizationName = Edel Curl Arctic Illudium Research Cloud
commonName = localhost
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
- RSA Public-Key: (2048 bit)
+ Public-Key: (2048 bit)
Modulus:
- 00:b8:fe:6a:b8:8a:0e:bb:34:90:cf:48:e7:dd:0d:
- 26:32:67:0a:4e:aa:9c:4c:fd:eb:6f:e1:b8:98:5d:
- b1:43:d4:09:4f:62:d8:4d:7c:d6:0b:36:93:57:fb:
- 61:02:b9:8d:35:20:9b:de:7d:a3:d5:0d:8e:44:98:
- d4:91:31:a2:1e:9a:84:cc:00:52:4b:78:c3:57:57:
- 6b:d7:25:29:bf:14:50:20:6f:1a:ee:3c:fc:bb:bf:
- 1e:1f:cd:a8:b7:fd:8d:ae:cc:78:07:c0:03:86:fd:
- ed:db:86:c1:2b:81:55:45:4a:50:07:fd:8d:85:a4:
- e9:29:dc:bb:e2:d5:dd:dd:3a:f8:62:21:3c:30:d0:
- 5a:88:71:67:53:af:78:ea:7e:08:40:32:65:16:7c:
- bf:c9:ba:f5:06:1e:02:f2:f8:b7:39:c8:85:c0:78:
- 14:d2:d9:fd:2b:8b:0c:3f:da:83:48:2f:26:24:34:
- 1b:fa:70:07:46:b4:01:ea:0d:cc:d7:81:a9:f1:66:
- c5:4e:3d:7e:b4:b3:b4:64:a3:ea:0f:ff:01:54:c1:
- 8b:1f:e9:65:d5:fc:bc:71:43:69:2e:50:f4:03:12:
- a5:91:95:20:36:dc:91:eb:aa:ab:8f:30:6c:66:22:
- 20:de:1d:b8:59:d1:16:a8:71:55:4a:66:fe:76:9c:
- 9e:e9
+ 00:df:29:93:58:82:1d:a2:b8:07:2a:b2:8f:93:0e:
+ df:15:49:72:06:93:19:4a:2d:c5:bd:56:92:5a:da:
+ f4:d3:9a:01:1c:ee:47:57:0e:9e:d8:d7:0d:c4:ce:
+ 4b:a2:f0:fc:07:ec:91:e9:95:08:f4:e9:5d:f2:49:
+ f3:0b:98:f0:d8:c7:d4:67:2f:fb:f2:94:3b:14:c8:
+ 06:da:39:70:8a:f9:4b:70:a8:74:6b:3f:5b:d1:a4:
+ 1c:ea:bd:f1:9e:c1:e2:e7:98:88:4f:e9:4b:b6:c8:
+ d6:9e:01:f3:b7:c9:ee:cd:e2:d7:96:68:14:d7:44:
+ c6:11:13:9f:6c:06:4e:57:98:53:c8:40:de:9d:44:
+ 1f:6a:f4:01:b0:56:47:5e:3b:b5:3c:29:9b:96:f3:
+ 9a:5a:78:d1:11:51:25:0e:43:82:4a:d3:df:54:5a:
+ 46:00:de:b0:a2:2e:65:54:44:40:9c:64:d3:e8:3f:
+ e8:ac:e3:0c:fb:36:0a:c5:79:37:a9:a2:ef:06:14:
+ 43:ac:9e:20:de:30:d2:ea:79:7d:ef:f2:0c:93:70:
+ 8d:bb:14:ff:4c:56:41:e4:2a:de:92:0a:ce:65:2c:
+ d3:fb:29:0f:4f:f9:16:d7:62:54:4e:4c:a8:05:34:
+ 5d:e6:20:e3:89:bc:7b:1f:df:21:57:66:a9:20:ce:
+ e6:b3
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Alternative Name:
- DNS:localhost
+ 0 ..localhost.h
X509v3 Key Usage:
Digital Signature, Key Encipherment, Key Agreement
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Subject Key Identifier:
- 19:D0:5D:AA:0F:E0:68:EF:E0:62:65:20:D3:A5:B7:1A:94:90:A9:26
+ 6B:56:00:F3:01:BC:16:8B:EB:CF:75:A1:89:DB:26:B1:C4:ED:71:64
X509v3 Authority Key Identifier:
- keyid:12:CA:BA:4B:46:04:A7:75:8A:2C:E8:0E:54:94:BC:12:65:A6:7B:CE
-
+ 87:CB:B1:33:2E:C1:67:7E:71:E3:E5:2B:4C:4D:A4:B3:6E:D2:5B:A9
X509v3 Basic Constraints:
CA:FALSE
+ Authority Information Access:
+ CA Issuers - URI:http://test.curl.se/ca/EdelCurlRoot.cer
+ X509v3 CRL Distribution Points:
+ Full Name:
+ URI:http://test.curl.se/ca/EdelCurlRoot.crl
Signature Algorithm: sha256WithRSAEncryption
- 4d:5c:e6:91:e2:35:48:aa:84:b3:45:97:bd:5c:36:e7:37:d1:
- 5e:33:17:2a:c1:5b:d2:18:70:3d:f5:8f:66:cb:49:b0:14:ee:
- 5b:4b:c5:dd:51:75:2d:94:10:b4:5e:61:91:08:cf:35:71:36:
- be:1b:c1:da:26:df:63:8b:cb:2c:35:74:8e:7c:9f:12:90:09:
- 81:65:a8:b5:fa:e7:2d:cc:33:55:f4:c4:ed:c8:ac:93:92:2d:
- 1c:db:5c:4d:d3:ca:75:68:c6:66:83:98:a1:6b:01:91:fb:e0:
- 04:59:95:6a:5a:7a:8f:5d:55:bf:ff:20:77:49:ad:10:be:7e:
- 12:3d:60:23:f3:94:cf:6a:d1:2b:d9:84:d9:57:0b:c1:b6:fb:
- 2d:4f:64:cf:d9:8f:8a:b0:2b:d2:34:fc:b4:58:b0:6d:f3:31:
- 36:42:3b:e3:6e:cd:19:77:4d:49:29:99:b1:42:27:ae:da:93:
- 0c:d6:fb:bf:ad:c1:39:ec:7c:b9:94:27:60:75:e2:d3:3c:83:
- 62:a8:68:d3:ce:7c:a4:e8:f0:b6:04:93:82:3f:8f:71:ea:60:
- 19:73:50:2e:f3:8c:09:6f:6f:3b:c4:01:b6:c8:0a:b2:19:89:
- 42:f4:6a:76:e0:0e:59:c4:20:0a:d3:50:e1:9f:b1:9b:a2:d2:
- d1:cd:65:a5
+ Signature Value:
+ 5a:b2:83:c0:94:ce:25:aa:a0:f4:b6:71:fb:16:b4:e0:10:3c:
+ 9c:a0:db:2a:fc:b7:f8:97:64:cc:19:92:56:63:a9:e6:50:d6:
+ 6d:79:b6:a3:62:23:d2:48:21:37:46:46:3e:9d:cd:1f:55:18:
+ 77:fd:7f:35:ea:d8:68:9c:1c:2f:c8:23:43:a2:cd:77:3c:5c:
+ 21:94:93:80:84:d0:6a:8a:5b:ae:11:be:79:3e:80:17:32:9e:
+ 73:0b:dd:0d:f5:f6:4f:3f:1b:a3:eb:aa:21:06:a7:ef:c7:bf:
+ e5:87:67:2c:38:a3:c1:d4:f2:b4:ce:72:9d:2e:f8:b9:91:cb:
+ 83:1a:c9:be:74:bb:ac:78:5c:d9:3e:fd:1f:9d:ac:19:5e:b3:
+ 00:66:38:71:7e:06:2e:fe:1a:c0:ad:f7:82:1d:85:6d:3d:3c:
+ 9d:62:66:cd:1e:6d:f1:67:7a:05:4a:58:6e:7a:a7:1f:2f:7c:
+ 5f:c0:2c:19:df:de:c6:2d:13:c6:3b:ea:6d:98:d0:55:98:4c:
+ 00:a7:e2:2f:7d:86:24:49:2d:86:c3:75:d0:71:41:16:8c:7b:
+ 49:25:eb:d2:cd:9b:08:b4:5f:6e:aa:4a:2d:6c:5b:89:67:7f:
+ 3f:0c:43:43:bd:83:f7:ef:1e:ee:e7:6a:e7:3a:c1:c7:aa:1d:
+ 5b:34:1b:d1
-----BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIGDftmzJ9uMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
+MIIERjCCAy6gAwIBAgIGDzR1UVF1MA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
Ak5OMTEwLwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNo
IENsb3VkMSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjAe
-Fw0xODA5MTkwNzE0MjNaFw0yNjEyMDYwNzE0MjNaMFQxCzAJBgNVBAYTAk5OMTEw
+Fw0yMjEyMjMxMjIxMzdaFw0zMTAzMTExMjIxMzdaMFQxCzAJBgNVBAYTAk5OMTEw
LwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3Vk
MRIwEAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
-AoIBAQC4/mq4ig67NJDPSOfdDSYyZwpOqpxM/etv4biYXbFD1AlPYthNfNYLNpNX
-+2ECuY01IJvefaPVDY5EmNSRMaIemoTMAFJLeMNXV2vXJSm/FFAgbxruPPy7vx4f
-zai3/Y2uzHgHwAOG/e3bhsErgVVFSlAH/Y2FpOkp3Lvi1d3dOvhiITww0FqIcWdT
-r3jqfghAMmUWfL/JuvUGHgLy+Lc5yIXAeBTS2f0riww/2oNILyYkNBv6cAdGtAHq
-DczXganxZsVOPX60s7Rko+oP/wFUwYsf6WXV/LxxQ2kuUPQDEqWRlSA23JHrqquP
-MGxmIiDeHbhZ0RaocVVKZv52nJ7pAgMBAAGjgYgwgYUwFgYDVR0RBA8wDYILbG9j
-YWxob3N0AGgwCwYDVR0PBAQDAgOoMBMGA1UdJQQMMAoGCCsGAQUFBwMBMB0GA1Ud
-DgQWBBQZ0F2qD+Bo7+BiZSDTpbcalJCpJjAfBgNVHSMEGDAWgBQSyrpLRgSndYos
-6A5UlLwSZaZ7zjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBNXOaR4jVI
-qoSzRZe9XDbnN9FeMxcqwVvSGHA99Y9my0mwFO5bS8XdUXUtlBC0XmGRCM81cTa+
-G8HaJt9ji8ssNXSOfJ8SkAmBZai1+uctzDNV9MTtyKyTki0c21xN08p1aMZmg5ih
-awGR++AEWZVqWnqPXVW//yB3Sa0Qvn4SPWAj85TPatEr2YTZVwvBtvstT2TP2Y+K
-sCvSNPy0WLBt8zE2Qjvjbs0Zd01JKZmxQieu2pMM1vu/rcE57Hy5lCdgdeLTPINi
-qGjTznyk6PC2BJOCP49x6mAZc1Au84wJb287xAG2yAqyGYlC9Gp24A5ZxCAK01Dh
-n7GbotLRzWWl
+AoIBAQDfKZNYgh2iuAcqso+TDt8VSXIGkxlKLcW9VpJa2vTTmgEc7kdXDp7Y1w3E
+zkui8PwH7JHplQj06V3ySfMLmPDYx9RnL/vylDsUyAbaOXCK+UtwqHRrP1vRpBzq
+vfGeweLnmIhP6Uu2yNaeAfO3ye7N4teWaBTXRMYRE59sBk5XmFPIQN6dRB9q9AGw
+VkdeO7U8KZuW85paeNERUSUOQ4JK099UWkYA3rCiLmVURECcZNPoP+is4wz7NgrF
+eTepou8GFEOsniDeMNLqeX3v8gyTcI27FP9MVkHkKt6SCs5lLNP7KQ9P+RbXYlRO
+TKgFNF3mIOOJvHsf3yFXZqkgzuazAgMBAAGjggEIMIIBBDAWBgNVHREEDzANggts
+b2NhbGhvc3QAaDALBgNVHQ8EBAMCA6gwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHQYD
+VR0OBBYEFGtWAPMBvBaL6891oYnbJrHE7XFkMB8GA1UdIwQYMBaAFIfLsTMuwWd+
+cePlK0xNpLNu0lupMAkGA1UdEwQCMAAwQwYIKwYBBQUHAQEENzA1MDMGCCsGAQUF
+BzAChidodHRwOi8vdGVzdC5jdXJsLnNlL2NhL0VkZWxDdXJsUm9vdC5jZXIwOAYD
+VR0fBDEwLzAtoCugKYYnaHR0cDovL3Rlc3QuY3VybC5zZS9jYS9FZGVsQ3VybFJv
+b3QuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQBasoPAlM4lqqD0tnH7FrTgEDycoNsq
+/Lf4l2TMGZJWY6nmUNZtebajYiPSSCE3RkY+nc0fVRh3/X816thonBwvyCNDos13
+PFwhlJOAhNBqiluuEb55PoAXMp5zC90N9fZPPxuj66ohBqfvx7/lh2csOKPB1PK0
+znKdLvi5kcuDGsm+dLuseFzZPv0fnawZXrMAZjhxfgYu/hrArfeCHYVtPTydYmbN
+Hm3xZ3oFSlhueqcfL3xfwCwZ397GLRPGO+ptmNBVmEwAp+IvfYYkSS2Gw3XQcUEW
+jHtJJevSzZsItF9uqkotbFuJZ38/DENDvYP37x7u52rnOsHHqh1bNBvR
-----END CERTIFICATE-----
diff --git a/tests/certs/Server-localhost0h-sv.prm b/tests/certs/Server-localhost0h-sv.prm
index 619d82552..439aefb9e 100644
--- a/tests/certs/Server-localhost0h-sv.prm
+++ b/tests/certs/Server-localhost0h-sv.prm
@@ -7,6 +7,19 @@ extendedKeyUsage = serverAuth
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid
basicConstraints = CA:false
+authorityInfoAccess = @issuer_info
+crlDistributionPoints = @crl_info
+
+[ crl_ext ]
+authorityKeyIdentifier = keyid:always
+authorityInfoAccess = @issuer_info
+
+[ issuer_info ]
+caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer
+
+[ crl_info ]
+URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl
+
[ req ]
default_bits = 1024
distinguished_name = req_DN
diff --git a/tests/certs/Server-localhost0h-sv.pub.der b/tests/certs/Server-localhost0h-sv.pub.der
index 743471b97..5c0e00d05 100644
--- a/tests/certs/Server-localhost0h-sv.pub.der
+++ b/tests/certs/Server-localhost0h-sv.pub.der
Binary files differ
diff --git a/tests/certs/Server-localhost0h-sv.pub.pem b/tests/certs/Server-localhost0h-sv.pub.pem
index 8462ae8b4..b8a1ee9e2 100644
--- a/tests/certs/Server-localhost0h-sv.pub.pem
+++ b/tests/certs/Server-localhost0h-sv.pub.pem
@@ -1,9 +1,9 @@
-----BEGIN PUBLIC KEY-----
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuP5quIoOuzSQz0jn3Q0m
-MmcKTqqcTP3rb+G4mF2xQ9QJT2LYTXzWCzaTV/thArmNNSCb3n2j1Q2ORJjUkTGi
-HpqEzABSS3jDV1dr1yUpvxRQIG8a7jz8u78eH82ot/2Nrsx4B8ADhv3t24bBK4FV
-RUpQB/2NhaTpKdy74tXd3Tr4YiE8MNBaiHFnU6946n4IQDJlFny/ybr1Bh4C8vi3
-OciFwHgU0tn9K4sMP9qDSC8mJDQb+nAHRrQB6g3M14Gp8WbFTj1+tLO0ZKPqD/8B
-VMGLH+ll1fy8cUNpLlD0AxKlkZUgNtyR66qrjzBsZiIg3h24WdEWqHFVSmb+dpye
-6QIDAQAB
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3ymTWIIdorgHKrKPkw7f
+FUlyBpMZSi3FvVaSWtr005oBHO5HVw6e2NcNxM5LovD8B+yR6ZUI9Old8knzC5jw
+2MfUZy/78pQ7FMgG2jlwivlLcKh0az9b0aQc6r3xnsHi55iIT+lLtsjWngHzt8nu
+zeLXlmgU10TGEROfbAZOV5hTyEDenUQfavQBsFZHXju1PCmblvOaWnjREVElDkOC
+StPfVFpGAN6woi5lVERAnGTT6D/orOMM+zYKxXk3qaLvBhRDrJ4g3jDS6nl97/IM
+k3CNuxT/TFZB5CrekgrOZSzT+ykPT/kW12JUTkyoBTRd5iDjibx7H98hV2apIM7m
+swIDAQAB
-----END PUBLIC KEY-----
diff --git a/tests/certs/scripts/Makefile.am b/tests/certs/scripts/Makefile.am
index c7e8a16c2..82b5f277e 100644
--- a/tests/certs/scripts/Makefile.am
+++ b/tests/certs/scripts/Makefile.am
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/tests/certs/scripts/Makefile.in b/tests/certs/scripts/Makefile.in
index c1d63cc94..fb998db72 100644
--- a/tests/certs/scripts/Makefile.in
+++ b/tests/certs/scripts/Makefile.in
@@ -95,7 +95,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.m4 \
$(top_srcdir)/m4/curl-confopts.m4 \
$(top_srcdir)/m4/curl-functions.m4 \
$(top_srcdir)/m4/curl-gnutls.m4 \
- $(top_srcdir)/m4/curl-mbedtls.m4 $(top_srcdir)/m4/curl-nss.m4 \
+ $(top_srcdir)/m4/curl-mbedtls.m4 \
$(top_srcdir)/m4/curl-openssl.m4 \
$(top_srcdir)/m4/curl-override.m4 \
$(top_srcdir)/m4/curl-reentrant.m4 \
@@ -147,6 +147,8 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APACHECTL = @APACHECTL@
+APXS = @APXS@
AR = @AR@
AR_FLAGS = @AR_FLAGS@
AS = @AS@
@@ -155,6 +157,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@
+CADDY = @CADDY@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -216,6 +219,8 @@ HAVE_LIBZ = @HAVE_LIBZ@
HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
HAVE_PROTO_BSDSOCKET_H = @HAVE_PROTO_BSDSOCKET_H@
HAVE_ZSTD = @HAVE_ZSTD@
+HTTPD = @HTTPD@
+HTTPD_NGHTTPX = @HTTPD_NGHTTPX@
IDN_ENABLED = @IDN_ENABLED@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -243,7 +248,6 @@ MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
NROFF = @NROFF@
-NSS_LIBS = @NSS_LIBS@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
@@ -274,6 +278,7 @@ SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@
SUPPORT_FEATURES = @SUPPORT_FEATURES@
SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_NGHTTPX = @TEST_NGHTTPX@
USE_ARES = @USE_ARES@
USE_BEARSSL = @USE_BEARSSL@
USE_GNUTLS = @USE_GNUTLS@
@@ -287,9 +292,8 @@ USE_NGHTTP2 = @USE_NGHTTP2@
USE_NGHTTP3 = @USE_NGHTTP3@
USE_NGTCP2 = @USE_NGTCP2@
USE_NGTCP2_CRYPTO_GNUTLS = @USE_NGTCP2_CRYPTO_GNUTLS@
-USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@
+USE_NGTCP2_CRYPTO_QUICTLS = @USE_NGTCP2_CRYPTO_QUICTLS@
USE_NGTCP2_CRYPTO_WOLFSSL = @USE_NGTCP2_CRYPTO_WOLFSSL@
-USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_RUSTLS = @USE_RUSTLS@
@@ -368,7 +372,7 @@ top_srcdir = @top_srcdir@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/tests/certs/scripts/genroot.sh b/tests/certs/scripts/genroot.sh
index cca09c7e3..17fd30887 100755
--- a/tests/certs/scripts/genroot.sh
+++ b/tests/certs/scripts/genroot.sh
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2000 - 2022, EdelWeb for EdelKey and OpenEvidence
+# Copyright (C) EdelWeb for EdelKey and OpenEvidence
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -58,10 +58,13 @@ fi
GETSERIAL="\$t = time ;\$d = \$t . substr(\$t+$$ ,-4,4)-1;print \$d"
SERIAL=`/usr/bin/env perl -e "$GETSERIAL"`
+# exit on first fail
+set -e
+
echo SERIAL=$SERIAL PREFIX=$PREFIX DURATION=$DURATION KEYSIZE=$KEYSIZE
-echo "openssl genrsa -out $PREFIX-ca.key $KEYSIZE -passout XXX"
-openssl genrsa -out $PREFIX-ca.key $KEYSIZE -passout pass:secret
+echo "openssl genrsa -out $PREFIX-ca.key -passout XXX $KEYSIZE"
+openssl genrsa -out $PREFIX-ca.key -passout pass:secret $KEYSIZE
echo "openssl req -config $PREFIX-ca.prm -new -key $PREFIX-ca.key -out $PREFIX-ca.csr"
$OPENSSL req -config $PREFIX-ca.prm -new -key $PREFIX-ca.key -out $PREFIX-ca.csr -passin pass:secret
diff --git a/tests/certs/scripts/genserv.sh b/tests/certs/scripts/genserv.sh
index 24fb395f6..7e0b4429c 100755
--- a/tests/certs/scripts/genserv.sh
+++ b/tests/certs/scripts/genserv.sh
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2000 - 2022, EdelWeb for EdelKey and OpenEvidence
+# Copyright (C) EdelWeb for EdelKey and OpenEvidence
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -30,6 +30,9 @@ fi
USAGE="echo Usage is genserv.sh <prefix> <caprefix>"
+# exit on first fail
+set -e
+
HOME=`pwd`
cd $HOME
@@ -133,4 +136,8 @@ touch $PREFIX-sv.dhp
cat $PREFIX-sv.prm $PREFIX-sv.key $PREFIX-sv.crt $PREFIX-sv.dhp >$PREFIX-sv.pem
chmod o-r $PREFIX-sv.prm
+$OPENSSL x509 -in $PREFIX-sv.pem -pubkey -noout | \
+$OPENSSL pkey -pubin -outform der | $OPENSSL dgst -sha256 -binary | \
+$OPENSSL enc -base64 >$PREFIX-sv.pubkey-pinned
+
echo "$PREFIX-sv.pem done"
diff --git a/tests/certs/stunnel-sv.crl b/tests/certs/stunnel-sv.crl
new file mode 100644
index 000000000..494ce7358
--- /dev/null
+++ b/tests/certs/stunnel-sv.crl
@@ -0,0 +1,15 @@
+-----BEGIN X509 CRL-----
+MIICWzCCAUMCAQEwDQYJKoZIhvcNAQELBQAwaDELMAkGA1UEBhMCTk4xMTAvBgNV
+BAoMKEVkZWwgQ3VybCBBcmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQxJjAk
+BgNVBAMMHU5vcnRoZXJuIE5vd2hlcmUgVHJ1c3QgQW5jaG9yFw0yMjEyMjMxMjIx
+MzlaFw0yMzAxMjIxMjIxMzlaMIGWMBcCBg80dVEqPBcNMjIxMjIzMTIyMTM2WjAX
+AgYPNHVRUWEXDTIyMTIyMzEyMjEzN1owFwIGDzR1UVF1Fw0yMjEyMjMxMjIxMzda
+MBcCBg80dVFRiRcNMjIxMjIzMTIyMTM4WjAXAgYPNHVReK4XDTIyMTIyMzEyMjEz
+OFowFwIGDzR1UZ/TFw0yMjEyMjMxMjIxMzlaoA4wDDAKBgNVHRQEAwIBATANBgkq
+hkiG9w0BAQsFAAOCAQEAMcVpjkRfr71+8t8qMGDR7jNycVDsEw8H+t4wXq44EkVu
+Z3uB7IPa5KQJ4HNZ5U/5yfWrLQ14YsOHEPIWaDyXG+MYKa82t/VGSzkWdiPE/onz
+Y3PBkclURacEZ5NHWTDGJXGttO7cHPPN4FsKxAsS7EWPRSCCKBGIxY3L+4QcziZV
+G9zsrzn0B7NI11E9+VGm0HbhSxXUthayPvHeUmjpeJ+711R22ANNTV2jAMqFn2ZP
+i6PNenZXC3xt1cZd4/T6343TT5jd0QB1JUiSFGYWZw3sSga6d57Mf5WTOCAfJsWL
+X1Wds0WsQ/XbsGySCLXPWfOaxrfhk3FJHSwIDjKoAg==
+-----END X509 CRL-----
diff --git a/tests/certs/stunnel-sv.crt b/tests/certs/stunnel-sv.crt
new file mode 100644
index 000000000..82285808c
--- /dev/null
+++ b/tests/certs/stunnel-sv.crt
@@ -0,0 +1,99 @@
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 16717980999635 (0xf3475519fd3)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer:
+ countryName = NN
+ organizationName = Edel Curl Arctic Illudium Research Cloud
+ commonName = Northern Nowhere Trust Anchor
+ Validity
+ Not Before: Dec 23 12:21:39 2022 GMT
+ Not After : Mar 11 12:21:39 2031 GMT
+ Subject:
+ countryName = NN
+ organizationName = Edel Curl Arctic Illudium Research Cloud
+ commonName = localhost
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (2048 bit)
+ Modulus:
+ 00:ab:0a:b0:03:d0:76:fe:5e:ce:15:de:61:d5:e3:
+ 91:6f:7c:d6:bb:ca:26:8e:78:be:26:35:d1:a6:59:
+ f1:d5:3c:55:3e:09:2c:ec:a0:d4:af:0e:3c:5a:a2:
+ b5:b0:78:51:95:62:80:80:71:c8:4e:9f:59:59:93:
+ 40:12:b2:a9:ce:b2:cd:17:8b:9f:27:f3:e3:cf:23:
+ 78:06:d2:06:23:5f:9b:20:ec:42:77:66:ad:a4:5e:
+ 82:b4:4d:94:72:ea:13:64:72:fc:cb:83:2c:d7:a1:
+ 8b:f5:2e:4c:d3:c1:88:b2:c8:98:19:5f:ef:98:fc:
+ 62:80:b3:67:cc:1f:23:fc:5f:38:cd:82:6e:2d:96:
+ d9:35:93:fe:29:a2:69:65:c0:df:45:ab:3f:ac:17:
+ 18:00:80:4a:b7:c9:ba:b8:5f:29:bb:c4:ac:16:97:
+ cc:57:34:10:c9:36:65:6c:3e:d8:89:45:c8:a5:42:
+ 84:7c:5e:cd:1a:e8:f1:3e:55:b3:21:0f:d0:36:13:
+ f2:c4:2f:b9:73:41:fa:87:aa:dc:44:d6:64:96:e4:
+ 5a:50:f9:4a:9f:e0:a2:e7:69:f4:ad:5a:cf:3a:20:
+ e5:a7:09:e2:cf:e8:19:a1:00:ae:a8:bb:22:02:34:
+ 5c:b3:cf:b5:24:4c:76:bf:ad:e9:f1:b8:d3:86:ba:
+ 7d:93
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Subject Alternative Name:
+ DNS:localhost
+ X509v3 Key Usage:
+ Digital Signature, Key Encipherment, Key Agreement
+ X509v3 Extended Key Usage:
+ TLS Web Server Authentication
+ X509v3 Subject Key Identifier:
+ 9C:97:B0:3D:B3:50:B1:F6:D4:71:E2:EB:CB:80:EA:93:7C:98:CC:72
+ X509v3 Authority Key Identifier:
+ 87:CB:B1:33:2E:C1:67:7E:71:E3:E5:2B:4C:4D:A4:B3:6E:D2:5B:A9
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Authority Information Access:
+ CA Issuers - URI:http://test.curl.se/ca/EdelCurlRoot.cer
+ X509v3 CRL Distribution Points:
+ Full Name:
+ URI:http://test.curl.se/ca/EdelCurlRoot.crl
+ Signature Algorithm: sha256WithRSAEncryption
+ Signature Value:
+ 0b:8a:ed:6a:87:fa:71:15:88:25:58:85:1b:4a:09:bf:43:00:
+ 35:93:78:0d:72:14:30:51:e2:93:83:a1:da:1b:2f:a9:31:ae:
+ b7:c7:4c:72:c2:5e:32:24:f1:96:93:70:d5:3f:b5:85:80:13:
+ 75:32:cf:0e:f8:5d:c4:a2:29:84:43:2c:75:81:26:12:6a:a0:
+ cb:7b:57:c1:92:78:85:08:fa:64:50:c2:7b:83:02:4d:79:13:
+ bc:61:64:4d:b8:6b:d5:f1:84:6b:12:5c:69:90:ad:40:47:c0:
+ ed:dd:ea:8a:66:7e:87:85:19:aa:89:d3:3c:08:72:08:a1:4d:
+ 63:60:5b:9b:17:9e:00:12:a1:00:52:ca:78:01:88:18:c7:ed:
+ 5b:c7:e4:d9:eb:bd:3f:af:92:53:3f:fe:58:57:0d:fc:f4:7b:
+ 7b:a2:4f:e9:b9:5c:b5:a4:52:50:b4:56:5a:44:8e:d9:d0:ed:
+ de:8f:7e:ac:1c:58:76:5b:a8:79:c9:95:ab:85:1d:db:4c:13:
+ 82:4a:a5:41:1b:29:f5:d3:96:df:80:d1:1e:00:7d:ba:35:94:
+ 57:81:e1:08:2a:81:6b:1c:30:50:37:01:1a:0e:26:4f:6b:ed:
+ c9:50:17:37:2b:33:3f:68:fe:c6:f0:21:8c:e7:b2:79:55:f2:
+ 42:bd:2f:b0
+-----BEGIN CERTIFICATE-----
+MIIERDCCAyygAwIBAgIGDzR1UZ/TMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
+Ak5OMTEwLwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNo
+IENsb3VkMSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjAe
+Fw0yMjEyMjMxMjIxMzlaFw0zMTAzMTExMjIxMzlaMFQxCzAJBgNVBAYTAk5OMTEw
+LwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3Vk
+MRIwEAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQCrCrAD0Hb+Xs4V3mHV45FvfNa7yiaOeL4mNdGmWfHVPFU+CSzsoNSvDjxa
+orWweFGVYoCAcchOn1lZk0ASsqnOss0Xi58n8+PPI3gG0gYjX5sg7EJ3Zq2kXoK0
+TZRy6hNkcvzLgyzXoYv1LkzTwYiyyJgZX++Y/GKAs2fMHyP8XzjNgm4tltk1k/4p
+omllwN9Fqz+sFxgAgEq3ybq4Xym7xKwWl8xXNBDJNmVsPtiJRcilQoR8Xs0a6PE+
+VbMhD9A2E/LEL7lzQfqHqtxE1mSW5FpQ+Uqf4KLnafStWs86IOWnCeLP6BmhAK6o
+uyICNFyzz7UkTHa/renxuNOGun2TAgMBAAGjggEGMIIBAjAUBgNVHREEDTALggls
+b2NhbGhvc3QwCwYDVR0PBAQDAgOoMBMGA1UdJQQMMAoGCCsGAQUFBwMBMB0GA1Ud
+DgQWBBScl7A9s1Cx9tRx4uvLgOqTfJjMcjAfBgNVHSMEGDAWgBSHy7EzLsFnfnHj
+5StMTaSzbtJbqTAJBgNVHRMEAjAAMEMGCCsGAQUFBwEBBDcwNTAzBggrBgEFBQcw
+AoYnaHR0cDovL3Rlc3QuY3VybC5zZS9jYS9FZGVsQ3VybFJvb3QuY2VyMDgGA1Ud
+HwQxMC8wLaAroCmGJ2h0dHA6Ly90ZXN0LmN1cmwuc2UvY2EvRWRlbEN1cmxSb290
+LmNybDANBgkqhkiG9w0BAQsFAAOCAQEAC4rtaof6cRWIJViFG0oJv0MANZN4DXIU
+MFHik4Oh2hsvqTGut8dMcsJeMiTxlpNw1T+1hYATdTLPDvhdxKIphEMsdYEmEmqg
+y3tXwZJ4hQj6ZFDCe4MCTXkTvGFkTbhr1fGEaxJcaZCtQEfA7d3qimZ+h4UZqonT
+PAhyCKFNY2BbmxeeABKhAFLKeAGIGMftW8fk2eu9P6+SUz/+WFcN/PR7e6JP6blc
+taRSULRWWkSO2dDt3o9+rBxYdluoecmVq4Ud20wTgkqlQRsp9dOW34DRHgB9ujWU
+V4HhCCqBaxwwUDcBGg4mT2vtyVAXNyszP2j+xvAhjOeyeVXyQr0vsA==
+-----END CERTIFICATE-----
diff --git a/tests/certs/stunnel-sv.csr b/tests/certs/stunnel-sv.csr
new file mode 100644
index 000000000..739cd68eb
--- /dev/null
+++ b/tests/certs/stunnel-sv.csr
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE REQUEST-----
+MIICmTCCAYECAQAwVDELMAkGA1UEBhMCTk4xMTAvBgNVBAoMKEVkZWwgQ3VybCBB
+cmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQxEjAQBgNVBAMMCWxvY2FsaG9z
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKsKsAPQdv5ezhXeYdXj
+kW981rvKJo54viY10aZZ8dU8VT4JLOyg1K8OPFqitbB4UZVigIBxyE6fWVmTQBKy
+qc6yzReLnyfz488jeAbSBiNfmyDsQndmraRegrRNlHLqE2Ry/MuDLNehi/UuTNPB
+iLLImBlf75j8YoCzZ8wfI/xfOM2Cbi2W2TWT/imiaWXA30WrP6wXGACASrfJurhf
+KbvErBaXzFc0EMk2ZWw+2IlFyKVChHxezRro8T5VsyEP0DYT8sQvuXNB+oeq3ETW
+ZJbkWlD5Sp/goudp9K1azzog5acJ4s/oGaEArqi7IgI0XLPPtSRMdr+t6fG404a6
+fZMCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQAauiYRPParSazzDjwG98G8YzZk
+1V/Q3rOzPN5a4veBMVO0kTxrTLImX/+BU6Bj6YgbpUGzIUqbkEunCQ5vtbFTrooD
+uT2tZtENXrj6i1fR3BArnLiP1Pg+PO1ONvTuY+384v2CIeE7AP6V0wZw5W9OJSkP
+eM8RU5OJn5zJkxhmUdREg5d3VuIE67ABcbCsxqMAhJuPw6mFgN6ffZl06nZ2cR5k
+TeOmze7EL8UCNByTtwqBdgryPQu3UEsBq0GxQJcBzcmB3vfClLhnTLic4sRHGdTO
+Ql+6CFqNnP5+bEMWqExPmWsdogFtwJsiQvr2nk/i2ogKAoRs+T0siTcF1+RM
+-----END CERTIFICATE REQUEST-----
diff --git a/tests/certs/stunnel-sv.der b/tests/certs/stunnel-sv.der
new file mode 100644
index 000000000..9c015f8fc
--- /dev/null
+++ b/tests/certs/stunnel-sv.der
Binary files differ
diff --git a/tests/certs/stunnel-sv.dhp b/tests/certs/stunnel-sv.dhp
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/certs/stunnel-sv.dhp
diff --git a/tests/certs/stunnel-sv.key b/tests/certs/stunnel-sv.key
new file mode 100644
index 000000000..84c86c2ee
--- /dev/null
+++ b/tests/certs/stunnel-sv.key
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCrCrAD0Hb+Xs4V
+3mHV45FvfNa7yiaOeL4mNdGmWfHVPFU+CSzsoNSvDjxaorWweFGVYoCAcchOn1lZ
+k0ASsqnOss0Xi58n8+PPI3gG0gYjX5sg7EJ3Zq2kXoK0TZRy6hNkcvzLgyzXoYv1
+LkzTwYiyyJgZX++Y/GKAs2fMHyP8XzjNgm4tltk1k/4pomllwN9Fqz+sFxgAgEq3
+ybq4Xym7xKwWl8xXNBDJNmVsPtiJRcilQoR8Xs0a6PE+VbMhD9A2E/LEL7lzQfqH
+qtxE1mSW5FpQ+Uqf4KLnafStWs86IOWnCeLP6BmhAK6ouyICNFyzz7UkTHa/renx
+uNOGun2TAgMBAAECggEAH0BsKb5Ax7h90jwYRzL141d9isFkaxq/r46c2FbN24bT
+EmstxKycP8ILoAnjxbMuQOvHC/D+RvNRqY7Aocn4Qdakp50wvuWOpc3Ww/RC/9qb
+pxfUCyn9Jy/HlPcp3RdM5MknzG2S13Fid7F2gyh0+CmztMs1JZBT1S0ylXbJJfbY
+1pdlHcf9oEbYo36vGd9rtJHAFzsFfwua0idl76XYuOnR3bpOkHl1B5cJ8jpOliPv
+VTmzn0cIgAmk7IByHHqGQ0u30PFiElI9kEbkKWoxAM1hq1pFU58jQhvp0ZkjVENL
+bSFB2B4DbyosxPlbUgvJCN4B7nclqzYqBdrrk6/ZLQKBgQC1lDrPSGIGXLwvkZYS
+xc0wtaCC7u6m7zV8rzh5HGcEoVvtmya/VyoZR8KGIpSor8COIkZqFtan6C77C3MH
+wClbu2Kn3FkGb76D5U2Xwl38zepzjn8Z5qXc3bZfccrsDY1gXPicgsmcKUY9xV5/
+T0RjESDKB+xxkJpCjia6klm2NQKBgQDxJNuqB6frDYKaj7mW/rvyHqkeT94J6eDY
+BcMZVKeHRNWcBMOvJDChVmpsCjJPOWHhHOlAE755NxWn8wpgyiUcac3BiysMgvTT
+pyH8UVWaP/DWYOfpuhtcLPkIjKnPijOvshpyWBxfXNIejiovoT6E3IXKOxr5g5yq
+U/9a5+I9pwKBgDyJG4YpkoyedBrDxa2ihkL7+nRMZgH/c+yKmiA+aNXxWa2AcU2P
+KLje5KpFcxw948s/AAy0aoH19Vu6uHHYDbHIah6eZouvy2s7kj/LC/yRRd2anyMq
+cxeMTxXI4ScLaZu7wyKis8Y9OG61k0iMS7dfaXgRZjGCTPttWtoOmpwVAoGAd2k+
+EXuLDl15UBpd18S6wxGlw2nfVN9oxPBNhUyjTNusP38oe6EbJ7mIJ4oBEbQjoPrV
+EjL0vkelxK4YdIeFSwWlqvLEVYS/wdNgg/auwhxpoW8JSHctNz7Z7v7g0/Hm2FkE
+uZyiKCLptdHGWCGruNUOt27/U5F10e6YY6ayJL8CgYEAoE/ddHIlrKFzcZ0cu47R
+ky4D4x32ceC2au4eGPLMDItPjceXe8I6zgB5P8/U5U3PRw5oWabpAf5lAcRwa12c
+23xgy9O5QNlyps/rAdnVjwxqGwEd5E2LrZ2+JDflPRGunx2VO5v9CxXvsxu9F3Rj
+tREtebHe2H7u5jNsIQArnRI=
+-----END PRIVATE KEY-----
diff --git a/tests/certs/stunnel-sv.pem b/tests/certs/stunnel-sv.pem
new file mode 100644
index 000000000..b7dd1e879
--- /dev/null
+++ b/tests/certs/stunnel-sv.pem
@@ -0,0 +1,165 @@
+extensions = x509v3
+[ x509v3 ]
+subjectAltName = DNS:localhost
+keyUsage = keyEncipherment,digitalSignature,keyAgreement
+extendedKeyUsage = serverAuth
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid
+basicConstraints = CA:false
+authorityInfoAccess = @issuer_info
+crlDistributionPoints = @crl_info
+
+[ crl_ext ]
+authorityKeyIdentifier = keyid:always
+authorityInfoAccess = @issuer_info
+
+[ issuer_info ]
+caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer
+
+[ crl_info ]
+URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl
+
+[ req ]
+default_bits = 12048
+distinguished_name = req_DN
+default_md = sha256
+string_mask = utf8only
+[ req_DN ]
+countryName = "Country Name is Northern Nowhere"
+countryName_value = NN
+organizationName = "Organization Name"
+organizationName_value = Edel Curl Arctic Illudium Research Cloud
+commonName = "Common Name"
+commonName_value = localhost
+
+[something]
+# The key
+# the certificate
+# some dhparam
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCrCrAD0Hb+Xs4V
+3mHV45FvfNa7yiaOeL4mNdGmWfHVPFU+CSzsoNSvDjxaorWweFGVYoCAcchOn1lZ
+k0ASsqnOss0Xi58n8+PPI3gG0gYjX5sg7EJ3Zq2kXoK0TZRy6hNkcvzLgyzXoYv1
+LkzTwYiyyJgZX++Y/GKAs2fMHyP8XzjNgm4tltk1k/4pomllwN9Fqz+sFxgAgEq3
+ybq4Xym7xKwWl8xXNBDJNmVsPtiJRcilQoR8Xs0a6PE+VbMhD9A2E/LEL7lzQfqH
+qtxE1mSW5FpQ+Uqf4KLnafStWs86IOWnCeLP6BmhAK6ouyICNFyzz7UkTHa/renx
+uNOGun2TAgMBAAECggEAH0BsKb5Ax7h90jwYRzL141d9isFkaxq/r46c2FbN24bT
+EmstxKycP8ILoAnjxbMuQOvHC/D+RvNRqY7Aocn4Qdakp50wvuWOpc3Ww/RC/9qb
+pxfUCyn9Jy/HlPcp3RdM5MknzG2S13Fid7F2gyh0+CmztMs1JZBT1S0ylXbJJfbY
+1pdlHcf9oEbYo36vGd9rtJHAFzsFfwua0idl76XYuOnR3bpOkHl1B5cJ8jpOliPv
+VTmzn0cIgAmk7IByHHqGQ0u30PFiElI9kEbkKWoxAM1hq1pFU58jQhvp0ZkjVENL
+bSFB2B4DbyosxPlbUgvJCN4B7nclqzYqBdrrk6/ZLQKBgQC1lDrPSGIGXLwvkZYS
+xc0wtaCC7u6m7zV8rzh5HGcEoVvtmya/VyoZR8KGIpSor8COIkZqFtan6C77C3MH
+wClbu2Kn3FkGb76D5U2Xwl38zepzjn8Z5qXc3bZfccrsDY1gXPicgsmcKUY9xV5/
+T0RjESDKB+xxkJpCjia6klm2NQKBgQDxJNuqB6frDYKaj7mW/rvyHqkeT94J6eDY
+BcMZVKeHRNWcBMOvJDChVmpsCjJPOWHhHOlAE755NxWn8wpgyiUcac3BiysMgvTT
+pyH8UVWaP/DWYOfpuhtcLPkIjKnPijOvshpyWBxfXNIejiovoT6E3IXKOxr5g5yq
+U/9a5+I9pwKBgDyJG4YpkoyedBrDxa2ihkL7+nRMZgH/c+yKmiA+aNXxWa2AcU2P
+KLje5KpFcxw948s/AAy0aoH19Vu6uHHYDbHIah6eZouvy2s7kj/LC/yRRd2anyMq
+cxeMTxXI4ScLaZu7wyKis8Y9OG61k0iMS7dfaXgRZjGCTPttWtoOmpwVAoGAd2k+
+EXuLDl15UBpd18S6wxGlw2nfVN9oxPBNhUyjTNusP38oe6EbJ7mIJ4oBEbQjoPrV
+EjL0vkelxK4YdIeFSwWlqvLEVYS/wdNgg/auwhxpoW8JSHctNz7Z7v7g0/Hm2FkE
+uZyiKCLptdHGWCGruNUOt27/U5F10e6YY6ayJL8CgYEAoE/ddHIlrKFzcZ0cu47R
+ky4D4x32ceC2au4eGPLMDItPjceXe8I6zgB5P8/U5U3PRw5oWabpAf5lAcRwa12c
+23xgy9O5QNlyps/rAdnVjwxqGwEd5E2LrZ2+JDflPRGunx2VO5v9CxXvsxu9F3Rj
+tREtebHe2H7u5jNsIQArnRI=
+-----END PRIVATE KEY-----
+Certificate:
+ Data:
+ Version: 3 (0x2)
+ Serial Number: 16717980999635 (0xf3475519fd3)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer:
+ countryName = NN
+ organizationName = Edel Curl Arctic Illudium Research Cloud
+ commonName = Northern Nowhere Trust Anchor
+ Validity
+ Not Before: Dec 23 12:21:39 2022 GMT
+ Not After : Mar 11 12:21:39 2031 GMT
+ Subject:
+ countryName = NN
+ organizationName = Edel Curl Arctic Illudium Research Cloud
+ commonName = localhost
+ Subject Public Key Info:
+ Public Key Algorithm: rsaEncryption
+ Public-Key: (2048 bit)
+ Modulus:
+ 00:ab:0a:b0:03:d0:76:fe:5e:ce:15:de:61:d5:e3:
+ 91:6f:7c:d6:bb:ca:26:8e:78:be:26:35:d1:a6:59:
+ f1:d5:3c:55:3e:09:2c:ec:a0:d4:af:0e:3c:5a:a2:
+ b5:b0:78:51:95:62:80:80:71:c8:4e:9f:59:59:93:
+ 40:12:b2:a9:ce:b2:cd:17:8b:9f:27:f3:e3:cf:23:
+ 78:06:d2:06:23:5f:9b:20:ec:42:77:66:ad:a4:5e:
+ 82:b4:4d:94:72:ea:13:64:72:fc:cb:83:2c:d7:a1:
+ 8b:f5:2e:4c:d3:c1:88:b2:c8:98:19:5f:ef:98:fc:
+ 62:80:b3:67:cc:1f:23:fc:5f:38:cd:82:6e:2d:96:
+ d9:35:93:fe:29:a2:69:65:c0:df:45:ab:3f:ac:17:
+ 18:00:80:4a:b7:c9:ba:b8:5f:29:bb:c4:ac:16:97:
+ cc:57:34:10:c9:36:65:6c:3e:d8:89:45:c8:a5:42:
+ 84:7c:5e:cd:1a:e8:f1:3e:55:b3:21:0f:d0:36:13:
+ f2:c4:2f:b9:73:41:fa:87:aa:dc:44:d6:64:96:e4:
+ 5a:50:f9:4a:9f:e0:a2:e7:69:f4:ad:5a:cf:3a:20:
+ e5:a7:09:e2:cf:e8:19:a1:00:ae:a8:bb:22:02:34:
+ 5c:b3:cf:b5:24:4c:76:bf:ad:e9:f1:b8:d3:86:ba:
+ 7d:93
+ Exponent: 65537 (0x10001)
+ X509v3 extensions:
+ X509v3 Subject Alternative Name:
+ DNS:localhost
+ X509v3 Key Usage:
+ Digital Signature, Key Encipherment, Key Agreement
+ X509v3 Extended Key Usage:
+ TLS Web Server Authentication
+ X509v3 Subject Key Identifier:
+ 9C:97:B0:3D:B3:50:B1:F6:D4:71:E2:EB:CB:80:EA:93:7C:98:CC:72
+ X509v3 Authority Key Identifier:
+ 87:CB:B1:33:2E:C1:67:7E:71:E3:E5:2B:4C:4D:A4:B3:6E:D2:5B:A9
+ X509v3 Basic Constraints:
+ CA:FALSE
+ Authority Information Access:
+ CA Issuers - URI:http://test.curl.se/ca/EdelCurlRoot.cer
+ X509v3 CRL Distribution Points:
+ Full Name:
+ URI:http://test.curl.se/ca/EdelCurlRoot.crl
+ Signature Algorithm: sha256WithRSAEncryption
+ Signature Value:
+ 0b:8a:ed:6a:87:fa:71:15:88:25:58:85:1b:4a:09:bf:43:00:
+ 35:93:78:0d:72:14:30:51:e2:93:83:a1:da:1b:2f:a9:31:ae:
+ b7:c7:4c:72:c2:5e:32:24:f1:96:93:70:d5:3f:b5:85:80:13:
+ 75:32:cf:0e:f8:5d:c4:a2:29:84:43:2c:75:81:26:12:6a:a0:
+ cb:7b:57:c1:92:78:85:08:fa:64:50:c2:7b:83:02:4d:79:13:
+ bc:61:64:4d:b8:6b:d5:f1:84:6b:12:5c:69:90:ad:40:47:c0:
+ ed:dd:ea:8a:66:7e:87:85:19:aa:89:d3:3c:08:72:08:a1:4d:
+ 63:60:5b:9b:17:9e:00:12:a1:00:52:ca:78:01:88:18:c7:ed:
+ 5b:c7:e4:d9:eb:bd:3f:af:92:53:3f:fe:58:57:0d:fc:f4:7b:
+ 7b:a2:4f:e9:b9:5c:b5:a4:52:50:b4:56:5a:44:8e:d9:d0:ed:
+ de:8f:7e:ac:1c:58:76:5b:a8:79:c9:95:ab:85:1d:db:4c:13:
+ 82:4a:a5:41:1b:29:f5:d3:96:df:80:d1:1e:00:7d:ba:35:94:
+ 57:81:e1:08:2a:81:6b:1c:30:50:37:01:1a:0e:26:4f:6b:ed:
+ c9:50:17:37:2b:33:3f:68:fe:c6:f0:21:8c:e7:b2:79:55:f2:
+ 42:bd:2f:b0
+-----BEGIN CERTIFICATE-----
+MIIERDCCAyygAwIBAgIGDzR1UZ/TMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
+Ak5OMTEwLwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNo
+IENsb3VkMSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjAe
+Fw0yMjEyMjMxMjIxMzlaFw0zMTAzMTExMjIxMzlaMFQxCzAJBgNVBAYTAk5OMTEw
+LwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3Vk
+MRIwEAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQCrCrAD0Hb+Xs4V3mHV45FvfNa7yiaOeL4mNdGmWfHVPFU+CSzsoNSvDjxa
+orWweFGVYoCAcchOn1lZk0ASsqnOss0Xi58n8+PPI3gG0gYjX5sg7EJ3Zq2kXoK0
+TZRy6hNkcvzLgyzXoYv1LkzTwYiyyJgZX++Y/GKAs2fMHyP8XzjNgm4tltk1k/4p
+omllwN9Fqz+sFxgAgEq3ybq4Xym7xKwWl8xXNBDJNmVsPtiJRcilQoR8Xs0a6PE+
+VbMhD9A2E/LEL7lzQfqHqtxE1mSW5FpQ+Uqf4KLnafStWs86IOWnCeLP6BmhAK6o
+uyICNFyzz7UkTHa/renxuNOGun2TAgMBAAGjggEGMIIBAjAUBgNVHREEDTALggls
+b2NhbGhvc3QwCwYDVR0PBAQDAgOoMBMGA1UdJQQMMAoGCCsGAQUFBwMBMB0GA1Ud
+DgQWBBScl7A9s1Cx9tRx4uvLgOqTfJjMcjAfBgNVHSMEGDAWgBSHy7EzLsFnfnHj
+5StMTaSzbtJbqTAJBgNVHRMEAjAAMEMGCCsGAQUFBwEBBDcwNTAzBggrBgEFBQcw
+AoYnaHR0cDovL3Rlc3QuY3VybC5zZS9jYS9FZGVsQ3VybFJvb3QuY2VyMDgGA1Ud
+HwQxMC8wLaAroCmGJ2h0dHA6Ly90ZXN0LmN1cmwuc2UvY2EvRWRlbEN1cmxSb290
+LmNybDANBgkqhkiG9w0BAQsFAAOCAQEAC4rtaof6cRWIJViFG0oJv0MANZN4DXIU
+MFHik4Oh2hsvqTGut8dMcsJeMiTxlpNw1T+1hYATdTLPDvhdxKIphEMsdYEmEmqg
+y3tXwZJ4hQj6ZFDCe4MCTXkTvGFkTbhr1fGEaxJcaZCtQEfA7d3qimZ+h4UZqonT
+PAhyCKFNY2BbmxeeABKhAFLKeAGIGMftW8fk2eu9P6+SUz/+WFcN/PR7e6JP6blc
+taRSULRWWkSO2dDt3o9+rBxYdluoecmVq4Ud20wTgkqlQRsp9dOW34DRHgB9ujWU
+V4HhCCqBaxwwUDcBGg4mT2vtyVAXNyszP2j+xvAhjOeyeVXyQr0vsA==
+-----END CERTIFICATE-----
diff --git a/tests/certs/stunnel-sv.prm b/tests/certs/stunnel-sv.prm
new file mode 100644
index 000000000..3803da375
--- /dev/null
+++ b/tests/certs/stunnel-sv.prm
@@ -0,0 +1,38 @@
+extensions = x509v3
+[ x509v3 ]
+subjectAltName = DNS:localhost
+keyUsage = keyEncipherment,digitalSignature,keyAgreement
+extendedKeyUsage = serverAuth
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid
+basicConstraints = CA:false
+authorityInfoAccess = @issuer_info
+crlDistributionPoints = @crl_info
+
+[ crl_ext ]
+authorityKeyIdentifier = keyid:always
+authorityInfoAccess = @issuer_info
+
+[ issuer_info ]
+caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer
+
+[ crl_info ]
+URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl
+
+[ req ]
+default_bits = 12048
+distinguished_name = req_DN
+default_md = sha256
+string_mask = utf8only
+[ req_DN ]
+countryName = "Country Name is Northern Nowhere"
+countryName_value = NN
+organizationName = "Organization Name"
+organizationName_value = Edel Curl Arctic Illudium Research Cloud
+commonName = "Common Name"
+commonName_value = localhost
+
+[something]
+# The key
+# the certificate
+# some dhparam
diff --git a/tests/certs/stunnel-sv.pub.pem b/tests/certs/stunnel-sv.pub.pem
new file mode 100644
index 000000000..5458d6573
--- /dev/null
+++ b/tests/certs/stunnel-sv.pub.pem
@@ -0,0 +1,9 @@
+-----BEGIN PUBLIC KEY-----
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqwqwA9B2/l7OFd5h1eOR
+b3zWu8omjni+JjXRplnx1TxVPgks7KDUrw48WqK1sHhRlWKAgHHITp9ZWZNAErKp
+zrLNF4ufJ/PjzyN4BtIGI1+bIOxCd2atpF6CtE2UcuoTZHL8y4Ms16GL9S5M08GI
+ssiYGV/vmPxigLNnzB8j/F84zYJuLZbZNZP+KaJpZcDfRas/rBcYAIBKt8m6uF8p
+u8SsFpfMVzQQyTZlbD7YiUXIpUKEfF7NGujxPlWzIQ/QNhPyxC+5c0H6h6rcRNZk
+luRaUPlKn+Ci52n0rVrPOiDlpwniz+gZoQCuqLsiAjRcs8+1JEx2v63p8bjThrp9
+kwIDAQAB
+-----END PUBLIC KEY-----
diff --git a/tests/check-deprecated.pl b/tests/check-deprecated.pl
new file mode 100755
index 000000000..b26aea872
--- /dev/null
+++ b/tests/check-deprecated.pl
@@ -0,0 +1,329 @@
+#!/usr/bin/env perl
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed 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
+#
+#
+###########################################################################
+#
+# Check that the deprecated statuses of functions and enum values in header
+# files, man pages and symbols-in-versions are in sync.
+
+use strict;
+use warnings;
+
+use File::Basename;
+
+my $root=$ARGV[0] || ".";
+my $incdir = "$root/include/curl";
+my $docdir = "$root/docs";
+my $libdocdir = "$docdir/libcurl";
+my $errcode = 0;
+
+# Symbol-indexed hashes.
+# Values are:
+# X Not deprecated
+# ? Deprecated in unknown version
+# x.yy.z Deprecated in version x.yy.z
+my %syminver; # Symbols-in-versions deprecations.
+my %hdr; # Public header files deprecations.
+my %funcman; # Function man pages deprecations.
+my %optman; # Option man pages deprecations.
+
+
+# Scan header file for public function and enum values. Flag them with
+# the version they are deprecated in, if some.
+sub scan_header {
+ my ($f)=@_;
+ my $line = "";
+ my $incomment = 0;
+ my $inenum = 0;
+
+ open(my $h, "<", "$f");
+ while(<$h>) {
+ s/^\s*(.*?)\s*$/$1/; # Trim.
+ # Remove multi-line comment trail.
+ if($incomment) {
+ if($_ !~ /.*?\*\/\s*(.*)$/) {
+ next;
+ }
+ $_ = $1;
+ $incomment = 0;
+ }
+ if($line ne "") {
+ # Unfold line.
+ $_ = "$line $1";
+ $line = "";
+ }
+ # Remove comments.
+ while($_ =~ /^(.*?)\/\*.*?\*\/(.*)$/) {
+ $_ = "$1 $2";
+ }
+ if($_ =~ /^(.*)\/\*/) {
+ $_ = "$1 ";
+ $incomment = 1;
+ }
+ s/^\s*(.*?)\s*$/$1/; # Trim again.
+ # Ignore preprocessor directives and blank lines.
+ if($_ =~ /^(?:#|$)/) {
+ next;
+ }
+ # Handle lines that may be continued as if they were folded.
+ if($_ !~ /[;,{}]$/) {
+ # Folded line.
+ $line = $_;
+ next;
+ }
+ if($_ =~ /CURLOPTDEPRECATED\(/) {
+ # Handle deprecated CURLOPT_* option.
+ if($_ !~ /CURLOPTDEPRECATED\(\s*(\S+)\s*,(?:.*?,){2}\s*(.*?)\s*,.*"\)/) {
+ # Folded line.
+ $line = $_;
+ next;
+ }
+ $hdr{$1} = $2;
+ }
+ elsif($_ =~ /CURLOPT\(/) {
+ # Handle non-deprecated CURLOPT_* option.
+ if($_ !~ /CURLOPT\(\s*(\S+)\s*(?:,.*?){2}\)/) {
+ # Folded line.
+ $line = $_;
+ next;
+ }
+ $hdr{$1} = "X";
+ }
+ else {
+ my $version = "X";
+
+ # Get other kind of deprecation from this line.
+ if($_ =~ /CURL_DEPRECATED\(/) {
+ if($_ !~ /^(.*)CURL_DEPRECATED\(\s*(\S+?)\s*,.*?"\)(.*)$/) {
+ # Folded line.
+ $line = $_;
+ next;
+ }
+ $version = $2;
+ $_ = "$1 $3";
+ }
+ if($_ =~ /^CURL_EXTERN\s+.*\s+(\S+?)\s*\(/) {
+ # Flag public function.
+ $hdr{$1} = $version;
+ }
+ elsif($inenum && $_ =~ /(\w+)\s*[,=}]/) {
+ # Flag enum value.
+ $hdr{$1} = $version;
+ }
+ }
+ # Remember if we are in an enum definition.
+ $inenum |= ($_ =~ /\benum\b/);
+ if($_ =~ /}/) {
+ $inenum = 0;
+ }
+ }
+ close $h;
+}
+
+# Scan function man page for options.
+# Each option has to be declared as ".IP <option>" where <option> starts with
+# the prefix. Flag each option with its deprecation version, if some.
+sub scan_man_for_opts {
+ my ($f, $prefix)=@_;
+ my $opt = "";
+ my $line = "";
+
+ open(my $m, "<", "$f");
+ while(<$m>) {
+ if($_ =~ /^\./) {
+ # roff directive found: end current option paragraph.
+ my $o = $opt;
+ $opt = "";
+ if($_ =~ /^\.IP\s+((?:$prefix)_\w+)/) {
+ # A new option has been found.
+ $opt = $1;
+ }
+ $_ = $line; # Get full paragraph.
+ $line = "";
+ s/\\f.//g; # Remove font formatting.
+ s/\s+/ /g; # One line with single space only.
+ if($o) {
+ $funcman{$o} = "X";
+ # Check if paragraph is mentioning deprecation.
+ while($_ =~ /(?:deprecated|obsoleted?)\b\s*(?:in\b|since\b)?\s*(?:version\b|curl\b|libcurl\b)?\s*(\d[0-9.]*\d)?\b\s*(.*)$/i) {
+ $funcman{$o} = $1 || "?";
+ $_ = $2;
+ }
+ }
+ }
+ else {
+ # Text line: accumulate.
+ $line .= $_;
+ }
+ }
+ close $m;
+}
+
+# Scan man page for deprecation in DESCRIPTION and/or AVAILABILITY sections.
+sub scan_man_page {
+ my ($path, $sym, $table)=@_;
+ my $version = "X";
+
+ if(open(my $fh, "<", "$path")) {
+ my $section = "";
+ my $line = "";
+
+ while(<$fh>) {
+ if($_ =~ /\.so\s+man3\/(.*\.3\b)/) {
+ # Handle man page inclusion.
+ scan_man_page(dirname($path) . "/$1", $sym, $table);
+ $version = exists($$table{$sym})? $$table{$sym}: $version;
+ }
+ elsif($_ =~ /^\./) {
+ # Line is a roff directive.
+ if($_ =~ /^\.SH\b\s*(\w*)/) {
+ # Section starts. End previous one.
+ my $sh = $section;
+
+ $section = $1;
+ $_ = $line; # Previous section text.
+ $line = "";
+ s/\\f.//g;
+ s/\s+/ /g;
+ s/\\f.//g; # Remove font formatting.
+ s/\s+/ /g; # One line with single space only.
+ if($sh =~ /DESCRIPTION|AVAILABILITY/) {
+ while($_ =~ /(?:deprecated|obsoleted?)\b\s*(?:in\b|since\b)?\s*(?:version\b|curl\b|libcurl\b)?\s*(\d[0-9.]*\d)?\b\s*(.*)$/i) {
+ # Flag deprecation status.
+ if($version ne "X" && $version ne "?") {
+ if($1 && $1 ne $version) {
+ print "error: $sym man page lists unmatching deprecation versions $version and $1\n";
+ $errcode++;
+ }
+ }
+ else {
+ $version = $1 || "?";
+ }
+ $_ = $2;
+ }
+ }
+ }
+ }
+ else {
+ # Text line: accumulate.
+ $line .= $_;
+ }
+ }
+ close $fh;
+ $$table{$sym} = $version;
+ }
+}
+
+
+# Read symbols-in-versions.
+open(my $fh, "<", "$libdocdir/symbols-in-versions") ||
+ die "$libdocdir/symbols-in-versions";
+while(<$fh>) {
+ if($_ =~ /^((?:CURL|LIBCURL)\S+)\s+\S+\s*(\S*)\s*(\S*)$/) {
+ if($3 eq "") {
+ $syminver{$1} = "X";
+ if($2 ne "" && $2 ne ".") {
+ $syminver{$1} = $2;
+ }
+ }
+ }
+}
+close($fh);
+
+# Get header file names,
+opendir(my $dh, $incdir) || die "Can't opendir $incdir";
+my @hfiles = grep { /\.h$/ } readdir($dh);
+closedir $dh;
+
+# Get functions and enum symbols from header files.
+for(@hfiles) {
+ scan_header("$incdir/$_");
+}
+
+# Get function statuses from man pages.
+foreach my $sym (keys %hdr) {
+ if($sym =~/^(?:curl|curlx)_\w/) {
+ scan_man_page("$libdocdir/$sym.3", $sym, \%funcman);
+ }
+}
+
+# Get options from function man pages.
+scan_man_for_opts("$libdocdir/curl_easy_setopt.3", "CURLOPT");
+scan_man_for_opts("$libdocdir/curl_easy_getinfo.3", "CURLINFO");
+
+# Get deprecation status from option man pages.
+foreach my $sym (keys %syminver) {
+ if($sym =~ /^(?:CURLOPT|CURLINFO)_\w+$/) {
+ scan_man_page("$libdocdir/opts/$sym.3", $sym, \%optman);
+ }
+}
+
+# Print results.
+my %keys = (%syminver, %funcman, %optman, %hdr);
+my $leader = <<HEADER
+Legend:
+<empty> Not listed
+X Not deprecated
+? Deprecated in unknown version
+x.yy.z Deprecated in version x.yy.z
+
+Symbol symbols-in func man opt man .h
+ -versions
+HEADER
+ ;
+foreach my $sym (sort {$a cmp $b} keys %keys) {
+ if($sym =~ /^(?:CURLOPT|CURLINFO|curl|curlx)_\w/) {
+ my $s = exists($syminver{$sym})? $syminver{$sym}: " ";
+ my $f = exists($funcman{$sym})? $funcman{$sym}: " ";
+ my $o = exists($optman{$sym})? $optman{$sym}: " ";
+ my $h = exists($hdr{$sym})? $hdr{$sym}: " ";
+ my $r = " ";
+
+ # There are deprecated symbols in symbols-in-versions that are aliases
+ # and thus not listed anywhere else. Ignore them.
+ "$f$o$h" =~ /[X ]{3}/ && next;
+
+ # Check for inconsistencies between deprecations from the different sources.
+ foreach my $k ($s, $f, $o, $h) {
+ $r = $r eq " "? $k: $r;
+ if($k ne " " && $r ne $k) {
+ if($r eq "?") {
+ $r = $k ne "X"? $k: "!";
+ }
+ elsif($r eq "X" || $k ne "?") {
+ $r = "!";
+ }
+ }
+ }
+
+ if($r eq "!") {
+ print $leader;
+ $leader = "";
+ printf("%-38s %-11s %-9s %-9s %s\n", $sym, $s, $f, $o, $h);
+ $errcode++;
+ }
+ }
+}
+
+exit $errcode;
diff --git a/tests/check-translatable-options.pl b/tests/check-translatable-options.pl
new file mode 100755
index 000000000..64d036d27
--- /dev/null
+++ b/tests/check-translatable-options.pl
@@ -0,0 +1,147 @@
+#!/usr/bin/env perl
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed 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
+#
+#
+###########################################################################
+#
+# Check the OS/400 translating wrapper properly handles all translatable
+# string options.
+
+use strict;
+use warnings;
+
+my $root=$ARGV[0] || ".";
+my $incdir = "$root/include/curl";
+my $os400dir = "$root/packages/OS400";
+my $errcount = 0;
+
+# Scan header file for string option definitions.
+sub scan_header {
+ my ($f)=@_;
+ my $line = "";
+ my $incomment = 0;
+ my @stringopts;
+
+ open(my $h, "<", "$f");
+ while(<$h>) {
+ s/^\s*(.*?)\s*$/$1/; # Trim.
+ # Remove multi-line comment trail.
+ if($incomment) {
+ if($_ !~ /.*?\*\/\s*(.*)$/) {
+ next;
+ }
+ $_ = $1;
+ $incomment = 0;
+ }
+ if($line ne "") {
+ # Unfold line.
+ $_ = "$line $1";
+ $line = "";
+ }
+ if($_ =~ /^(.*)\\$/) {
+ $line = "$1 ";
+ next;
+ }
+ # Remove comments.
+ while($_ =~ /^(.*?)\/\*.*?\*\/(.*)$/) {
+ $_ = "$1 $2";
+ }
+ if($_ =~ /^(.*)\/\*/) {
+ $_ = "$1 ";
+ $incomment = 1;
+ }
+ s/^\s*(.*?)\s*$/$1/; # Trim again.
+ # Ignore preprocessor directives and blank lines.
+ if($_ =~ /^(?:#|$)/) {
+ next;
+ }
+ # Handle lines that may be continued as if they were folded.
+ if($_ !~ /[;,{}]$/ || $_ =~ /[^)],$/) {
+ # Folded line.
+ $line = $_;
+ next;
+ }
+ # Keep string options only.
+ if($_ =~ /CURLOPT(?:DEPRECATED)?\s*\(\s*([^, \t]+)\s*,\s*CURLOPTTYPE_STRINGPOINT/) {
+ push(@stringopts, $1);
+ }
+ }
+ close $h;
+ return @stringopts;
+}
+
+# Scan packages/OS400/ccsidcurl.c for translatable string option cases.
+sub scan_wrapper_for_strings {
+ my ($f)=@_;
+ my $inarmor = 0;
+ my @stringopts;
+
+ open(my $h, "<", "$f");
+ while(<$h>) {
+ if($_ =~ /(BEGIN|END) TRANSLATABLE STRING OPTIONS/) {
+ $inarmor = $1 eq "BEGIN";
+ }
+ elsif($inarmor && $_ =~ /case\s+([^:]+):/) {
+ push(@stringopts, $1);
+ }
+ }
+ close $h;
+ return @stringopts;
+}
+
+# Get translatable string options from header file.
+my @stringdefs = scan_header("$incdir/curl.h");
+
+# Get translated string options.
+my @stringrefs = scan_wrapper_for_strings("$os400dir/ccsidcurl.c");
+
+# Lists should be equal: check differences.
+my %diff;
+@diff{@stringdefs} = 0..$#stringdefs;
+delete @diff{@stringrefs};
+
+foreach(keys %diff) {
+ print "$_ is not translated\n";
+ delete $diff{$_};
+ $errcount++;
+}
+
+@diff{@stringrefs} = 0..$#stringrefs;
+delete @diff{@stringdefs};
+
+foreach(keys %diff) {
+ print "translated option $_ does not exist\n";
+ $errcount++;
+}
+
+# Check translated string option cases are sorted alphanumerically.
+foreach(my $i = 1; $i < $#stringrefs; $i++) {
+ if($stringrefs[$i] lt $stringrefs[$i - 1]) {
+ print("Translated string options are not sorted (" . $stringrefs[$i - 1] .
+ "/" . $stringrefs[$i] . ")\n");
+ $errcount++;
+ last;
+ }
+}
+
+exit !!$errcount;
diff --git a/tests/config.in b/tests/config.in
new file mode 100644
index 000000000..f5aa9862a
--- /dev/null
+++ b/tests/config.in
@@ -0,0 +1,24 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed 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
+#
+###########################################################################
+NGHTTPX: @TEST_NGHTTPX@
diff --git a/tests/data/CMakeLists.txt b/tests/data/CMakeLists.txt
index dfe0fe2f8..ed0b88f18 100644
--- a/tests/data/CMakeLists.txt
+++ b/tests/data/CMakeLists.txt
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/tests/data/DISABLED b/tests/data/DISABLED
index d4a451b1d..b077c67a0 100644
--- a/tests/data/DISABLED
+++ b/tests/data/DISABLED
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -63,10 +63,11 @@
#
# hyper support remains EXPERIMENTAL as long as there's a test number
# listed below
+#
+# Several tests fail due to hyper's lack of trailers support: 266, 1417, 1540,
+# 1591, 1943. See https://github.com/hyperium/hyper/issues/2699 for details.
%if hyper
-265
266
-565
579
587
# 1021 re-added here due to flakiness
@@ -76,16 +77,18 @@
1533
1540
1591
-1941
-1942
1943
2301
2302
+2305
%endif
2043
-# Tests that are disabled here for rustls are SUPPOSED to work
+# The CRL test (313) doesn't work with rustls because rustls doesn't support
+# CRLs.
+# Tests that rely on connecting to an IP address over TLS don't work because
+# rustls doesn't support IP address certificates yet. That's the 400 series of
+# tests listed here, plus 1112 and 1272
%if rustls
-312
313
400
401
@@ -95,6 +98,9 @@
407
408
409
+987
+988
+989
1112
1272
%endif
diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am
index e627f16c5..68148c1f9 100644
--- a/tests/data/Makefile.am
+++ b/tests/data/Makefile.am
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/tests/data/Makefile.in b/tests/data/Makefile.in
index f16966f9a..4a0937e2f 100644
--- a/tests/data/Makefile.in
+++ b/tests/data/Makefile.in
@@ -21,7 +21,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -119,7 +119,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.m4 \
$(top_srcdir)/m4/curl-confopts.m4 \
$(top_srcdir)/m4/curl-functions.m4 \
$(top_srcdir)/m4/curl-gnutls.m4 \
- $(top_srcdir)/m4/curl-mbedtls.m4 $(top_srcdir)/m4/curl-nss.m4 \
+ $(top_srcdir)/m4/curl-mbedtls.m4 \
$(top_srcdir)/m4/curl-openssl.m4 \
$(top_srcdir)/m4/curl-override.m4 \
$(top_srcdir)/m4/curl-reentrant.m4 \
@@ -171,6 +171,8 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APACHECTL = @APACHECTL@
+APXS = @APXS@
AR = @AR@
AR_FLAGS = @AR_FLAGS@
AS = @AS@
@@ -179,6 +181,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@
+CADDY = @CADDY@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -240,6 +243,8 @@ HAVE_LIBZ = @HAVE_LIBZ@
HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
HAVE_PROTO_BSDSOCKET_H = @HAVE_PROTO_BSDSOCKET_H@
HAVE_ZSTD = @HAVE_ZSTD@
+HTTPD = @HTTPD@
+HTTPD_NGHTTPX = @HTTPD_NGHTTPX@
IDN_ENABLED = @IDN_ENABLED@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -267,7 +272,6 @@ MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
NROFF = @NROFF@
-NSS_LIBS = @NSS_LIBS@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
@@ -298,6 +302,7 @@ SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@
SUPPORT_FEATURES = @SUPPORT_FEATURES@
SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_NGHTTPX = @TEST_NGHTTPX@
USE_ARES = @USE_ARES@
USE_BEARSSL = @USE_BEARSSL@
USE_GNUTLS = @USE_GNUTLS@
@@ -311,9 +316,8 @@ USE_NGHTTP2 = @USE_NGHTTP2@
USE_NGHTTP3 = @USE_NGHTTP3@
USE_NGTCP2 = @USE_NGTCP2@
USE_NGTCP2_CRYPTO_GNUTLS = @USE_NGTCP2_CRYPTO_GNUTLS@
-USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@
+USE_NGTCP2_CRYPTO_QUICTLS = @USE_NGTCP2_CRYPTO_QUICTLS@
USE_NGTCP2_CRYPTO_WOLFSSL = @USE_NGTCP2_CRYPTO_WOLFSSL@
-USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_RUSTLS = @USE_RUSTLS@
@@ -430,13 +434,14 @@ test370 test371 test372 test373 test374 test375 test376 test378 test379 \
test380 test381 test383 test384 test385 test386 test387 test388 test389 \
test390 test391 test392 test393 test394 test395 test396 test397 test398 \
test399 test400 test401 test402 test403 test404 test405 test406 test407 \
-test408 test409 test410 test411 test412 test413 test414 test415 \
+test408 test409 test410 test411 test412 test413 test414 test415 test416 \
+test417 test418 test419 test420 test421 test422 test423 test424 test425 \
+test426 test427 test428 test429 test430 test431 test432 test433 test434 \
+test435 test436 test437 test438 test439 test440 test441 test442 test443 \
+test444 test445 test446 test447 test448 test449 test450 test451 test452 \
+test453 test454 test455 test456 test457 test458 test459 \
\
-test430 test431 test432 test433 test434 test435 test436 \
-\
-test440 test441 test442 test443 test444 test445 \
-\
-test490 test491 test492 test493 test494 test495 test496 \
+test490 test491 test492 test493 test494 test495 test496 test497 test498 \
\
test500 test501 test502 test503 test504 test505 test506 test507 test508 \
test509 test510 test511 test512 test513 test514 test515 test516 test517 \
@@ -453,40 +458,41 @@ test599 test600 test601 test602 test603 test604 test605 test606 test607 \
test608 test609 test610 test611 test612 test613 test614 test615 test616 \
test617 test618 test619 test620 test621 test622 test623 test624 test625 \
test626 test627 test628 test629 test630 test631 test632 test633 test634 \
-test635 test636 test637 test638 test639 test640 test641 test642 \
-test643 test644 test645 test646 test647 test648 test649 test650 test651 \
-test652 test653 test654 test655 test656 test658 test659 test660 test661 \
-test662 test663 test664 test665 test666 test667 test668 test669 \
-test670 test671 test672 test673 test674 test675 test676 test677 test678 \
-test679 test680 test681 test682 test683 test684 test685 \
+test635 test636 test637 test638 test639 test640 test641 test642 test643 \
+test644 test645 test646 test647 test648 test649 test650 test651 test652 \
+test653 test654 test655 test656 test658 test659 test660 test661 test662 \
+test663 test664 test665 test666 test667 test668 test669 test670 test671 \
+test672 test673 test674 test675 test676 test677 test678 test679 test680 \
+test681 test682 test683 test684 test685 test686 test687 test688 \
\
test700 test701 test702 test703 test704 test705 test706 test707 test708 \
test709 test710 test711 test712 test713 test714 test715 test716 test717 \
-test718 test719 test720 test721 \
-\
-test800 test801 test802 test803 test804 test805 test806 test807 test808 \
-test809 test810 test811 test812 test813 test814 test815 test816 test817 \
-test818 test819 test820 test821 test822 test823 test824 test825 test826 \
-test827 test828 test829 test830 test831 test832 test833 test834 test835 \
-test836 test837 test838 test839 test840 test841 test842 test843 test844 \
-test845 test846 test847 test848 test849 test850 test851 test852 test853 \
-test854 test855 test856 test857 test858 test859 test860 test861 test862 \
-test863 test864 test865 test866 test867 test868 test869 test870 test871 \
-test872 test873 test874 test875 test876 test877 test878 test879 test880 \
-test881 test882 test883 test884 test885 test886 test887 test888 test889 \
-test890 test891 test892 test893 test894 test895 test896 test897 test898 \
+test718 test719 test720 test721 test722 test723 test724 test725 test726 \
+test727 test728 test729 test730 test731 test732 test733 test734 test735 \
+test736 test737 test738 test739 test740 test741 \
\
-test900 test901 test902 test903 test904 test905 test906 test907 test908 \
-test909 test910 test911 test912 test913 test914 test915 test916 test917 \
-test918 test919 test920 test921 test922 test923 test924 test925 test926 \
-test927 test928 test929 test930 test931 test932 test933 test934 test935 \
-test936 test937 test938 test939 test940 test941 test942 test943 test944 \
-test945 test946 test947 test948 test949 test950 test951 test952 test953 \
-test954 test955 test956 test957 test958 test959 test960 test961 test962 \
-test963 test964 test965 test966 test967 test968 test969 test970 test971 \
-test972 test973 test974 test975 test976 test977 \
-\
-test980 test981 test982 test983 test984 test985 test986 \
+test799 test800 test801 test802 test803 test804 test805 test806 test807 \
+test808 test809 test810 test811 test812 test813 test814 test815 test816 \
+test817 test818 test819 test820 test821 test822 test823 test824 test825 \
+test826 test827 test828 test829 test830 test831 test832 test833 test834 \
+test835 test836 test837 test838 test839 test840 test841 test842 test843 \
+test844 test845 test846 test847 test848 test849 test850 test851 test852 \
+test853 test854 test855 test856 test857 test858 test859 test860 test861 \
+test862 test863 test864 test865 test866 test867 test868 test869 test870 \
+test871 test872 test873 test874 test875 test876 test877 test878 test879 \
+test880 test881 test882 test883 test884 test885 test886 test887 test888 \
+test889 test890 test891 test892 test893 test894 test895 test896 test897 \
+test898 test899 test900 test901 test902 test903 test904 test905 test906 \
+test907 test908 test909 test910 test911 test912 test913 test914 test915 \
+test916 test917 test918 test919 test920 test921 test922 test923 test924 \
+test925 test926 test927 test928 test929 test930 test931 test932 test933 \
+test934 test935 test936 test937 test938 test939 test940 test941 test942 \
+test943 test944 test945 test946 test947 test948 test949 test950 test951 \
+test952 test953 test954 test955 test956 test957 test958 test959 test960 \
+test961 test962 test963 test964 test965 test966 test967 test968 test969 \
+test970 test971 test972 test973 test974 test975 test976 test977 test978 \
+test979 test980 test981 test982 test983 test984 test985 test986 test987 \
+test988 test989 test990 test991 \
\
test1000 test1001 test1002 test1003 test1004 test1005 test1006 test1007 \
test1008 test1009 test1010 test1011 test1012 test1013 test1014 test1015 \
@@ -511,52 +517,50 @@ test1152 test1153 test1154 test1155 test1156 test1157 test1158 test1159 \
test1160 test1161 test1162 test1163 test1164 test1165 test1166 test1167 \
test1168 test1169 test1170 test1171 test1172 test1173 test1174 test1175 \
test1176 test1177 test1178 test1179 test1180 test1181 test1182 test1183 \
-test1184 test1185 test1186 test1187 test1188 test1189 \
-\
-test1190 test1191 test1192 test1193 test1194 test1195 test1196 test1197 \
-test1198 test1199 \
-test1200 test1201 test1202 test1203 test1204 test1205 test1206 test1207 \
-test1208 test1209 test1210 test1211 test1212 test1213 test1214 test1215 \
-test1216 test1217 test1218 test1219 test1220 test1223 \
-test1224 test1225 test1226 test1227 test1228 test1229 test1230 test1231 \
-test1232 test1233 test1234 test1235 test1236 test1237 test1238 test1239 \
-test1240 test1241 test1242 test1243 test1244 test1245 test1246 test1247 \
-test1248 test1249 test1250 test1251 test1252 test1253 test1254 test1255 \
-test1256 test1257 test1258 test1259 test1260 test1261 test1262 test1263 \
-test1264 test1265 test1266 test1267 test1268 test1269 test1270 test1271 \
-test1272 test1273 test1274 test1275 \
-\
-test1280 test1281 test1282 test1283 test1284 test1285 test1286 test1287 \
-test1288 test1289 test1290 test1291 test1292 test1293 test1294 test1295 \
-test1296 test1297 test1298 test1299 test1300 test1301 test1302 test1303 \
-test1304 test1305 test1306 test1307 test1308 test1309 test1310 test1311 \
-test1312 test1313 test1314 test1315 test1316 test1317 test1318 test1319 \
-test1320 test1321 test1322 test1323 test1324 test1325 test1326 test1327 \
-test1328 test1329 test1330 test1331 test1332 test1333 test1334 test1335 \
-test1336 test1337 test1338 test1339 test1340 test1341 test1342 test1343 \
-test1344 test1345 test1346 test1347 test1348 test1349 test1350 test1351 \
-test1352 test1353 test1354 test1355 test1356 test1357 test1358 test1359 \
-test1360 test1361 test1362 test1363 test1364 test1365 test1366 test1367 \
-test1368 test1369 test1370 test1371 test1372 test1373 test1374 test1375 \
-test1376 test1377 test1378 test1379 test1380 test1381 test1382 test1383 \
-test1384 test1385 test1386 test1387 test1388 test1389 test1390 test1391 \
-test1392 test1393 test1394 test1395 test1396 test1397 test1398 test1399 \
-test1400 test1401 test1402 test1403 test1404 test1405 test1406 test1407 \
-test1408 test1409 test1410 test1411 test1412 test1413 test1414 test1415 \
-test1416 test1417 test1418 test1419 test1420 test1421 test1422 test1423 \
-test1424 test1425 test1426 test1427 test1428 test1429 test1430 test1431 \
-test1432 test1433 test1434 test1435 test1436 test1437 test1438 test1439 \
-test1440 test1441 test1442 test1443 test1444 test1445 test1446 test1447 \
-test1448 test1449 test1450 test1451 test1452 test1453 test1454 test1455 \
-test1456 test1457 test1458 test1459 test1460 test1461 test1462 test1463 \
-test1464 test1465 test1466 test1467 test1468 \
+test1184 test1185 test1186 test1187 test1188 test1189 test1190 test1190 \
+test1191 test1192 test1193 test1194 test1195 test1196 test1197 test1198 \
+test1199 test1200 test1201 test1202 test1203 test1204 test1205 test1206 \
+test1207 test1208 test1209 test1210 test1211 test1212 test1213 test1214 \
+test1215 test1216 test1217 test1218 test1219 test1220 test1221 test1222 \
+test1223 test1224 test1225 test1226 test1227 test1228 test1229 test1230 \
+test1231 test1232 test1233 test1234 test1235 test1236 test1237 test1238 \
+test1239 test1240 test1241 test1242 test1243 test1244 test1245 test1246 \
+test1247 test1248 test1249 test1250 test1251 test1252 test1253 test1254 \
+test1255 test1256 test1257 test1258 test1259 test1260 test1261 test1262 \
+test1263 test1264 test1265 test1266 test1267 test1268 test1269 test1270 \
+test1271 test1272 test1273 test1274 test1275 test1276 test1277 test1278 \
+test1279 test1280 test1281 test1282 test1283 test1284 test1285 test1286 \
+test1287 test1288 test1289 test1290 test1291 test1292 test1293 test1294 \
+test1295 test1296 test1297 test1298 test1299 test1300 test1301 test1302 \
+test1303 test1304 test1305 test1306 test1307 test1308 test1309 test1310 \
+test1311 test1312 test1313 test1314 test1315 test1316 test1317 test1318 \
+test1319 test1320 test1321 test1322 test1323 test1324 test1325 test1326 \
+test1327 test1328 test1329 test1330 test1331 test1332 test1333 test1334 \
+test1335 test1336 test1337 test1338 test1339 test1340 test1341 test1342 \
+test1343 test1344 test1345 test1346 test1347 test1348 test1349 test1350 \
+test1351 test1352 test1353 test1354 test1355 test1356 test1357 test1358 \
+test1359 test1360 test1361 test1362 test1363 test1364 test1365 test1366 \
+test1367 test1368 test1369 test1370 test1371 test1372 test1373 test1374 \
+test1375 test1376 test1377 test1378 test1379 test1380 test1381 test1382 \
+test1383 test1384 test1385 test1386 test1387 test1388 test1389 test1390 \
+test1391 test1392 test1393 test1394 test1395 test1396 test1397 test1398 \
+test1399 test1400 test1401 test1402 test1403 test1404 test1405 test1406 \
+test1407 test1408 test1409 test1410 test1411 test1412 test1413 test1414 \
+test1415 test1416 test1417 test1418 test1419 test1420 test1421 test1422 \
+test1423 test1424 test1425 test1426 test1427 test1428 test1429 test1430 \
+test1431 test1432 test1433 test1434 test1435 test1436 test1437 test1438 \
+test1439 test1440 test1441 test1442 test1443 test1444 test1445 test1446 \
+test1447 test1448 test1449 test1450 test1451 test1452 test1453 test1454 \
+test1455 test1456 test1457 test1458 test1459 test1460 test1461 test1462 \
+test1463 test1464 test1465 test1466 test1467 test1468 test1469 test1470 \
+test1471 test1472 test1473 test1474 test1475 test1476 test1477 \
\
test1500 test1501 test1502 test1503 test1504 test1505 test1506 test1507 \
test1508 test1509 test1510 test1511 test1512 test1513 test1514 test1515 \
test1516 test1517 test1518 test1519 test1520 test1521 test1522 test1523 \
test1524 test1525 test1526 test1527 test1528 test1529 test1530 test1531 \
test1532 test1533 test1534 test1535 test1536 test1537 test1538 test1539 \
-test1540 test1542 test1543 \
+test1540 test1542 test1543 test1544 test1545 \
\
test1550 test1551 test1552 test1553 test1554 test1555 test1556 test1557 \
test1558 test1559 test1560 test1561 test1562 test1563 test1564 test1565 \
@@ -572,7 +576,7 @@ test1620 test1621 \
test1630 test1631 test1632 test1633 test1634 test1635 \
\
test1650 test1651 test1652 test1653 test1654 test1655 \
-test1660 test1661 \
+test1660 test1661 test1662 \
\
test1670 test1671 \
\
@@ -582,13 +586,14 @@ test1700 test1701 test1702 test1703 \
\
test1800 test1801 \
\
- test1904 test1905 test1906 test1907 \
+test1900 test1903 test1904 test1905 test1906 test1907 \
test1908 test1909 test1910 test1911 test1912 test1913 test1914 test1915 \
test1916 test1917 test1918 test1919 \
\
test1933 test1934 test1935 test1936 test1937 test1938 test1939 test1940 \
test1941 test1942 test1943 test1944 test1945 test1946 test1947 test1948 \
-test1955 \
+test1955 test1956 test1957 test1958 test1959 test1960 test1964 \
+test1970 test1971 test1972 test1973 test1974 test1975 \
\
test2000 test2001 test2002 test2003 test2004 \
\
@@ -606,12 +611,22 @@ test2100 \
\
test2200 test2201 test2202 test2203 test2204 test2205 \
\
-test2300 test2301 test2302 test2303 \
+test2300 test2301 test2302 test2303 test2304 test2305 test2306 \
+\
+test2400 test2401 test2402 test2403 test2404 \
+\
+test2500 test2501 test2502 test2503 \
+\
+test2600 test2601 test2602 test2603 \
\
test3000 test3001 test3002 test3003 test3004 test3005 test3006 test3007 \
test3008 test3009 test3010 test3011 test3012 test3013 test3014 test3015 \
test3016 test3017 test3018 test3019 test3020 test3021 test3022 test3023 \
-test3024 test3025 test3026 test3027
+test3024 test3025 test3026 test3027 test3028 test3029 test3030 \
+\
+test3100 test3101 test3102 test3103 \
+test3200 \
+test3201 test3202
# TESTCASES are taken from Makefile.inc
@@ -817,7 +832,7 @@ uninstall-am:
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/tests/data/Makefile.inc b/tests/data/Makefile.inc
index cbb27973c..de13c525e 100644
--- a/tests/data/Makefile.inc
+++ b/tests/data/Makefile.inc
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -67,13 +67,14 @@ test370 test371 test372 test373 test374 test375 test376 test378 test379 \
test380 test381 test383 test384 test385 test386 test387 test388 test389 \
test390 test391 test392 test393 test394 test395 test396 test397 test398 \
test399 test400 test401 test402 test403 test404 test405 test406 test407 \
-test408 test409 test410 test411 test412 test413 test414 test415 \
+test408 test409 test410 test411 test412 test413 test414 test415 test416 \
+test417 test418 test419 test420 test421 test422 test423 test424 test425 \
+test426 test427 test428 test429 test430 test431 test432 test433 test434 \
+test435 test436 test437 test438 test439 test440 test441 test442 test443 \
+test444 test445 test446 test447 test448 test449 test450 test451 test452 \
+test453 test454 test455 test456 test457 test458 test459 \
\
-test430 test431 test432 test433 test434 test435 test436 \
-\
-test440 test441 test442 test443 test444 test445 \
-\
-test490 test491 test492 test493 test494 test495 test496 \
+test490 test491 test492 test493 test494 test495 test496 test497 test498 \
\
test500 test501 test502 test503 test504 test505 test506 test507 test508 \
test509 test510 test511 test512 test513 test514 test515 test516 test517 \
@@ -90,40 +91,41 @@ test599 test600 test601 test602 test603 test604 test605 test606 test607 \
test608 test609 test610 test611 test612 test613 test614 test615 test616 \
test617 test618 test619 test620 test621 test622 test623 test624 test625 \
test626 test627 test628 test629 test630 test631 test632 test633 test634 \
-test635 test636 test637 test638 test639 test640 test641 test642 \
-test643 test644 test645 test646 test647 test648 test649 test650 test651 \
-test652 test653 test654 test655 test656 test658 test659 test660 test661 \
-test662 test663 test664 test665 test666 test667 test668 test669 \
-test670 test671 test672 test673 test674 test675 test676 test677 test678 \
-test679 test680 test681 test682 test683 test684 test685 \
+test635 test636 test637 test638 test639 test640 test641 test642 test643 \
+test644 test645 test646 test647 test648 test649 test650 test651 test652 \
+test653 test654 test655 test656 test658 test659 test660 test661 test662 \
+test663 test664 test665 test666 test667 test668 test669 test670 test671 \
+test672 test673 test674 test675 test676 test677 test678 test679 test680 \
+test681 test682 test683 test684 test685 test686 test687 test688 \
\
test700 test701 test702 test703 test704 test705 test706 test707 test708 \
test709 test710 test711 test712 test713 test714 test715 test716 test717 \
-test718 test719 test720 test721 \
-\
-test800 test801 test802 test803 test804 test805 test806 test807 test808 \
-test809 test810 test811 test812 test813 test814 test815 test816 test817 \
-test818 test819 test820 test821 test822 test823 test824 test825 test826 \
-test827 test828 test829 test830 test831 test832 test833 test834 test835 \
-test836 test837 test838 test839 test840 test841 test842 test843 test844 \
-test845 test846 test847 test848 test849 test850 test851 test852 test853 \
-test854 test855 test856 test857 test858 test859 test860 test861 test862 \
-test863 test864 test865 test866 test867 test868 test869 test870 test871 \
-test872 test873 test874 test875 test876 test877 test878 test879 test880 \
-test881 test882 test883 test884 test885 test886 test887 test888 test889 \
-test890 test891 test892 test893 test894 test895 test896 test897 test898 \
-\
-test900 test901 test902 test903 test904 test905 test906 test907 test908 \
-test909 test910 test911 test912 test913 test914 test915 test916 test917 \
-test918 test919 test920 test921 test922 test923 test924 test925 test926 \
-test927 test928 test929 test930 test931 test932 test933 test934 test935 \
-test936 test937 test938 test939 test940 test941 test942 test943 test944 \
-test945 test946 test947 test948 test949 test950 test951 test952 test953 \
-test954 test955 test956 test957 test958 test959 test960 test961 test962 \
-test963 test964 test965 test966 test967 test968 test969 test970 test971 \
-test972 test973 test974 test975 test976 test977 \
-\
-test980 test981 test982 test983 test984 test985 test986 \
+test718 test719 test720 test721 test722 test723 test724 test725 test726 \
+test727 test728 test729 test730 test731 test732 test733 test734 test735 \
+test736 test737 test738 test739 test740 test741 \
+\
+test799 test800 test801 test802 test803 test804 test805 test806 test807 \
+test808 test809 test810 test811 test812 test813 test814 test815 test816 \
+test817 test818 test819 test820 test821 test822 test823 test824 test825 \
+test826 test827 test828 test829 test830 test831 test832 test833 test834 \
+test835 test836 test837 test838 test839 test840 test841 test842 test843 \
+test844 test845 test846 test847 test848 test849 test850 test851 test852 \
+test853 test854 test855 test856 test857 test858 test859 test860 test861 \
+test862 test863 test864 test865 test866 test867 test868 test869 test870 \
+test871 test872 test873 test874 test875 test876 test877 test878 test879 \
+test880 test881 test882 test883 test884 test885 test886 test887 test888 \
+test889 test890 test891 test892 test893 test894 test895 test896 test897 \
+test898 test899 test900 test901 test902 test903 test904 test905 test906 \
+test907 test908 test909 test910 test911 test912 test913 test914 test915 \
+test916 test917 test918 test919 test920 test921 test922 test923 test924 \
+test925 test926 test927 test928 test929 test930 test931 test932 test933 \
+test934 test935 test936 test937 test938 test939 test940 test941 test942 \
+test943 test944 test945 test946 test947 test948 test949 test950 test951 \
+test952 test953 test954 test955 test956 test957 test958 test959 test960 \
+test961 test962 test963 test964 test965 test966 test967 test968 test969 \
+test970 test971 test972 test973 test974 test975 test976 test977 test978 \
+test979 test980 test981 test982 test983 test984 test985 test986 test987 \
+test988 test989 test990 test991 \
\
test1000 test1001 test1002 test1003 test1004 test1005 test1006 test1007 \
test1008 test1009 test1010 test1011 test1012 test1013 test1014 test1015 \
@@ -148,52 +150,50 @@ test1152 test1153 test1154 test1155 test1156 test1157 test1158 test1159 \
test1160 test1161 test1162 test1163 test1164 test1165 test1166 test1167 \
test1168 test1169 test1170 test1171 test1172 test1173 test1174 test1175 \
test1176 test1177 test1178 test1179 test1180 test1181 test1182 test1183 \
-test1184 test1185 test1186 test1187 test1188 test1189 \
-\
-test1190 test1191 test1192 test1193 test1194 test1195 test1196 test1197 \
-test1198 test1199 \
-test1200 test1201 test1202 test1203 test1204 test1205 test1206 test1207 \
-test1208 test1209 test1210 test1211 test1212 test1213 test1214 test1215 \
-test1216 test1217 test1218 test1219 test1220 test1223 \
-test1224 test1225 test1226 test1227 test1228 test1229 test1230 test1231 \
-test1232 test1233 test1234 test1235 test1236 test1237 test1238 test1239 \
-test1240 test1241 test1242 test1243 test1244 test1245 test1246 test1247 \
-test1248 test1249 test1250 test1251 test1252 test1253 test1254 test1255 \
-test1256 test1257 test1258 test1259 test1260 test1261 test1262 test1263 \
-test1264 test1265 test1266 test1267 test1268 test1269 test1270 test1271 \
-test1272 test1273 test1274 test1275 \
-\
-test1280 test1281 test1282 test1283 test1284 test1285 test1286 test1287 \
-test1288 test1289 test1290 test1291 test1292 test1293 test1294 test1295 \
-test1296 test1297 test1298 test1299 test1300 test1301 test1302 test1303 \
-test1304 test1305 test1306 test1307 test1308 test1309 test1310 test1311 \
-test1312 test1313 test1314 test1315 test1316 test1317 test1318 test1319 \
-test1320 test1321 test1322 test1323 test1324 test1325 test1326 test1327 \
-test1328 test1329 test1330 test1331 test1332 test1333 test1334 test1335 \
-test1336 test1337 test1338 test1339 test1340 test1341 test1342 test1343 \
-test1344 test1345 test1346 test1347 test1348 test1349 test1350 test1351 \
-test1352 test1353 test1354 test1355 test1356 test1357 test1358 test1359 \
-test1360 test1361 test1362 test1363 test1364 test1365 test1366 test1367 \
-test1368 test1369 test1370 test1371 test1372 test1373 test1374 test1375 \
-test1376 test1377 test1378 test1379 test1380 test1381 test1382 test1383 \
-test1384 test1385 test1386 test1387 test1388 test1389 test1390 test1391 \
-test1392 test1393 test1394 test1395 test1396 test1397 test1398 test1399 \
-test1400 test1401 test1402 test1403 test1404 test1405 test1406 test1407 \
-test1408 test1409 test1410 test1411 test1412 test1413 test1414 test1415 \
-test1416 test1417 test1418 test1419 test1420 test1421 test1422 test1423 \
-test1424 test1425 test1426 test1427 test1428 test1429 test1430 test1431 \
-test1432 test1433 test1434 test1435 test1436 test1437 test1438 test1439 \
-test1440 test1441 test1442 test1443 test1444 test1445 test1446 test1447 \
-test1448 test1449 test1450 test1451 test1452 test1453 test1454 test1455 \
-test1456 test1457 test1458 test1459 test1460 test1461 test1462 test1463 \
-test1464 test1465 test1466 test1467 test1468 \
+test1184 test1185 test1186 test1187 test1188 test1189 test1190 test1190 \
+test1191 test1192 test1193 test1194 test1195 test1196 test1197 test1198 \
+test1199 test1200 test1201 test1202 test1203 test1204 test1205 test1206 \
+test1207 test1208 test1209 test1210 test1211 test1212 test1213 test1214 \
+test1215 test1216 test1217 test1218 test1219 test1220 test1221 test1222 \
+test1223 test1224 test1225 test1226 test1227 test1228 test1229 test1230 \
+test1231 test1232 test1233 test1234 test1235 test1236 test1237 test1238 \
+test1239 test1240 test1241 test1242 test1243 test1244 test1245 test1246 \
+test1247 test1248 test1249 test1250 test1251 test1252 test1253 test1254 \
+test1255 test1256 test1257 test1258 test1259 test1260 test1261 test1262 \
+test1263 test1264 test1265 test1266 test1267 test1268 test1269 test1270 \
+test1271 test1272 test1273 test1274 test1275 test1276 test1277 test1278 \
+test1279 test1280 test1281 test1282 test1283 test1284 test1285 test1286 \
+test1287 test1288 test1289 test1290 test1291 test1292 test1293 test1294 \
+test1295 test1296 test1297 test1298 test1299 test1300 test1301 test1302 \
+test1303 test1304 test1305 test1306 test1307 test1308 test1309 test1310 \
+test1311 test1312 test1313 test1314 test1315 test1316 test1317 test1318 \
+test1319 test1320 test1321 test1322 test1323 test1324 test1325 test1326 \
+test1327 test1328 test1329 test1330 test1331 test1332 test1333 test1334 \
+test1335 test1336 test1337 test1338 test1339 test1340 test1341 test1342 \
+test1343 test1344 test1345 test1346 test1347 test1348 test1349 test1350 \
+test1351 test1352 test1353 test1354 test1355 test1356 test1357 test1358 \
+test1359 test1360 test1361 test1362 test1363 test1364 test1365 test1366 \
+test1367 test1368 test1369 test1370 test1371 test1372 test1373 test1374 \
+test1375 test1376 test1377 test1378 test1379 test1380 test1381 test1382 \
+test1383 test1384 test1385 test1386 test1387 test1388 test1389 test1390 \
+test1391 test1392 test1393 test1394 test1395 test1396 test1397 test1398 \
+test1399 test1400 test1401 test1402 test1403 test1404 test1405 test1406 \
+test1407 test1408 test1409 test1410 test1411 test1412 test1413 test1414 \
+test1415 test1416 test1417 test1418 test1419 test1420 test1421 test1422 \
+test1423 test1424 test1425 test1426 test1427 test1428 test1429 test1430 \
+test1431 test1432 test1433 test1434 test1435 test1436 test1437 test1438 \
+test1439 test1440 test1441 test1442 test1443 test1444 test1445 test1446 \
+test1447 test1448 test1449 test1450 test1451 test1452 test1453 test1454 \
+test1455 test1456 test1457 test1458 test1459 test1460 test1461 test1462 \
+test1463 test1464 test1465 test1466 test1467 test1468 test1469 test1470 \
+test1471 test1472 test1473 test1474 test1475 test1476 test1477 \
\
test1500 test1501 test1502 test1503 test1504 test1505 test1506 test1507 \
test1508 test1509 test1510 test1511 test1512 test1513 test1514 test1515 \
test1516 test1517 test1518 test1519 test1520 test1521 test1522 test1523 \
test1524 test1525 test1526 test1527 test1528 test1529 test1530 test1531 \
test1532 test1533 test1534 test1535 test1536 test1537 test1538 test1539 \
-test1540 test1542 test1543 \
+test1540 test1542 test1543 test1544 test1545 \
\
test1550 test1551 test1552 test1553 test1554 test1555 test1556 test1557 \
test1558 test1559 test1560 test1561 test1562 test1563 test1564 test1565 \
@@ -209,7 +209,7 @@ test1620 test1621 \
test1630 test1631 test1632 test1633 test1634 test1635 \
\
test1650 test1651 test1652 test1653 test1654 test1655 \
-test1660 test1661 \
+test1660 test1661 test1662 \
\
test1670 test1671 \
\
@@ -219,13 +219,14 @@ test1700 test1701 test1702 test1703 \
\
test1800 test1801 \
\
- test1904 test1905 test1906 test1907 \
+test1900 test1903 test1904 test1905 test1906 test1907 \
test1908 test1909 test1910 test1911 test1912 test1913 test1914 test1915 \
test1916 test1917 test1918 test1919 \
\
test1933 test1934 test1935 test1936 test1937 test1938 test1939 test1940 \
test1941 test1942 test1943 test1944 test1945 test1946 test1947 test1948 \
-test1955 \
+test1955 test1956 test1957 test1958 test1959 test1960 test1964 \
+test1970 test1971 test1972 test1973 test1974 test1975 \
\
test2000 test2001 test2002 test2003 test2004 \
\
@@ -243,9 +244,19 @@ test2100 \
\
test2200 test2201 test2202 test2203 test2204 test2205 \
\
-test2300 test2301 test2302 test2303 \
+test2300 test2301 test2302 test2303 test2304 test2305 test2306 \
+\
+test2400 test2401 test2402 test2403 test2404 \
+\
+test2500 test2501 test2502 test2503 \
+\
+test2600 test2601 test2602 test2603 \
\
test3000 test3001 test3002 test3003 test3004 test3005 test3006 test3007 \
test3008 test3009 test3010 test3011 test3012 test3013 test3014 test3015 \
test3016 test3017 test3018 test3019 test3020 test3021 test3022 test3023 \
-test3024 test3025 test3026 test3027
+test3024 test3025 test3026 test3027 test3028 test3029 test3030 \
+\
+test3100 test3101 test3102 test3103 \
+test3200 \
+test3201 test3202
diff --git a/tests/data/test1 b/tests/data/test1
index f39a08b19..4aa4d1b81 100644
--- a/tests/data/test1
+++ b/tests/data/test1
@@ -9,7 +9,7 @@ HTTP GET
#
# Server-side
<reply>
-<data>
+<data crlf="yes">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -31,10 +31,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP GET
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
@@ -42,12 +42,12 @@ http://%HOSTIP:%HTTPPORT/%TESTNUMBER
#
# Verify data after the test has been "shot"
<verify>
-<protocol>
-GET /%TESTNUMBER HTTP/1.1
-Host: %HOSTIP:%HTTPPORT
-User-Agent: curl/%VERSION
-Accept: */*
-
+<protocol crlf="yes">
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
</protocol>
</verify>
</testcase>
diff --git a/tests/data/test10 b/tests/data/test10
index 5b5534b67..ac1486ec0 100644
--- a/tests/data/test10
+++ b/tests/data/test10
@@ -22,13 +22,13 @@ blablabla
<server>
http
</server>
- <name>
+<name>
simple HTTP PUT from file
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -T log/test%TESTNUMBER.txt
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -T %LOGDIR/test%TESTNUMBER.txt
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
Weird
file
to
@@ -49,7 +49,6 @@ Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 78
-Expect: 100-continue
Weird
file
diff --git a/tests/data/test100 b/tests/data/test100
index e680a7b4a..de6a82bda 100644
--- a/tests/data/test100
+++ b/tests/data/test100
@@ -32,10 +32,10 @@ dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
<server>
ftp
</server>
- <name>
+<name>
FTP dir list PASV
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/test-%TESTNUMBER/
</command>
</client>
diff --git a/tests/data/test1000 b/tests/data/test1000
index 37f210ed8..fe94010ac 100644
--- a/tests/data/test1000
+++ b/tests/data/test1000
@@ -20,10 +20,10 @@ NOBODY
<server>
ftp
</server>
- <name>
+<name>
FTP dir list PASV with -I
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER/ -I
</command>
</client>
diff --git a/tests/data/test1001 b/tests/data/test1001
index df42f7134..4220ab675 100644
--- a/tests/data/test1001
+++ b/tests/data/test1001
@@ -68,13 +68,13 @@ http
crypto
proxy
</features>
- <name>
+<name>
HTTP POST --digest with PUT and resumed upload and modified method
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u auser:apasswd --digest -T log/%TESTNUMBER -x http://%HOSTIP:%HTTPPORT -C 2 -X GET
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u auser:apasswd --digest -T %LOGDIR/%TESTNUMBER -x http://%HOSTIP:%HTTPPORT -C 2 -X GET
</command>
-<file name="log/%TESTNUMBER">
+<file name="%LOGDIR/%TESTNUMBER">
test
</file>
</client>
@@ -98,7 +98,6 @@ User-Agent: curl/%VERSION
Accept: */*
Proxy-Connection: Keep-Alive
Content-Length: 3
-Expect: 100-continue
st
</protocol>
diff --git a/tests/data/test1002 b/tests/data/test1002
index ca58be6f4..92cb5e158 100644
--- a/tests/data/test1002
+++ b/tests/data/test1002
@@ -67,13 +67,13 @@ http
crypto
proxy
</features>
- <name>
+<name>
HTTP PUT with Digest auth, resumed upload and modified method, twice
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER.upload1 -T log/%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER.upload2 -T log/%TESTNUMBER -u auser:apasswd --digest -x http://%HOSTIP:%HTTPPORT -C 2 -X GET
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER.upload1 -T %LOGDIR/%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER.upload2 -T %LOGDIR/%TESTNUMBER -u auser:apasswd --digest -x http://%HOSTIP:%HTTPPORT -C 2 -X GET
</command>
-<file name="log/%TESTNUMBER">
+<file name="%LOGDIR/%TESTNUMBER">
test
</file>
</client>
@@ -97,7 +97,6 @@ User-Agent: curl/%VERSION
Accept: */*
Proxy-Connection: Keep-Alive
Content-Length: 3
-Expect: 100-continue
st
GET http://%HOSTIP:%HTTPPORT/%TESTNUMBER.upload2 HTTP/1.1
@@ -116,7 +115,6 @@ User-Agent: curl/%VERSION
Accept: */*
Proxy-Connection: Keep-Alive
Content-Length: 3
-Expect: 100-continue
st
</protocol>
diff --git a/tests/data/test1003 b/tests/data/test1003
index 9adc996a9..06cfbb61b 100644
--- a/tests/data/test1003
+++ b/tests/data/test1003
@@ -23,10 +23,10 @@ REPLY CWD 250 CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
<server>
ftp
</server>
- <name>
+<name>
FTP with excessively large server command response line
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1004 b/tests/data/test1004
index 3b75081bd..d176a1658 100644
--- a/tests/data/test1004
+++ b/tests/data/test1004
@@ -35,10 +35,10 @@ proxy
<server>
http
</server>
- <name>
+<name>
HTTP GET with empty proxy
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --proxy ""
</command>
</client>
diff --git a/tests/data/test1005 b/tests/data/test1005
index 59d98cc65..28af85f40 100644
--- a/tests/data/test1005
+++ b/tests/data/test1005
@@ -23,10 +23,10 @@ REPLY CWD 250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
<server>
ftp
</server>
- <name>
+<name>
FTP with excessively large number of server command response lines
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1006 b/tests/data/test1006
index 08f7247c1..394b5563b 100644
--- a/tests/data/test1006
+++ b/tests/data/test1006
@@ -24,10 +24,10 @@ REPLY CWD 250-AAAAAAAAAAAAAAAAAAAAAAAAA\r\n250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
<server>
ftp
</server>
- <name>
+<name>
FTP with excessively large number of server command response lines (boundary condition)
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1007 b/tests/data/test1007
index c50e97d51..603d4c639 100644
--- a/tests/data/test1007
+++ b/tests/data/test1007
@@ -13,13 +13,13 @@ FAILURE
<server>
tftp
</server>
- <name>
+<name>
TFTP send with invalid permission on server
- </name>
- <command>
--T log/test%TESTNUMBER.txt tftp://%HOSTIP:%TFTPPORT//invalid-file
+</name>
+<command>
+-T %LOGDIR/test%TESTNUMBER.txt tftp://%HOSTIP:%TFTPPORT//invalid-file -sS
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
This data will not be sent
</file>
</client>
@@ -30,13 +30,18 @@ This data will not be sent
<errorcode>
69
</errorcode>
+<strip>
+^timeout = [5-6]$
+</strip>
<protocol>
opcode = 2
mode = octet
tsize = 27
blksize = 512
-timeout = 6
filename = /invalid-file
</protocol>
+<stderr mode="text">
+curl: (69) TFTP: Access Violation
+</stderr>
</verify>
</testcase>
diff --git a/tests/data/test1009 b/tests/data/test1009
index 9e1fa55f5..0282dca2e 100644
--- a/tests/data/test1009
+++ b/tests/data/test1009
@@ -24,10 +24,10 @@ returned
<server>
tftp
</server>
- <name>
+<name>
TFTP retrieve with --local-port
- </name>
- <command>
+</name>
+<command>
tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER --local-port 44444-45444
</command>
</client>
@@ -35,12 +35,14 @@ tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER --local-port 44444-45444
#
# Verify pseudo protocol after the test has been "shot"
<verify>
+<strip>
+^timeout = [5-6]$
+</strip>
<protocol>
opcode = 1
mode = octet
tsize = 0
blksize = 512
-timeout = 6
filename = /%TESTNUMBER
</protocol>
</verify>
diff --git a/tests/data/test101 b/tests/data/test101
index 09faade2d..26824c741 100644
--- a/tests/data/test101
+++ b/tests/data/test101
@@ -30,10 +30,10 @@ dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
<server>
ftp
</server>
- <name>
+<name>
FTP dir list, PORT with specified IP
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/ -P %CLIENTIP
</command>
</client>
diff --git a/tests/data/test1010 b/tests/data/test1010
index 9314ca66e..d1eee918a 100644
--- a/tests/data/test1010
+++ b/tests/data/test1010
@@ -32,10 +32,10 @@ dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
<server>
ftp
</server>
- <name>
+<name>
FTP dir list nocwd
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT//list/this/path/%TESTNUMBER/ ftp://%HOSTIP:%FTPPORT//list/this/path/%TESTNUMBER/ --ftp-method nocwd
</command>
</client>
diff --git a/tests/data/test1011 b/tests/data/test1011
index 1ff01ca6b..d6a3d1aa7 100644
--- a/tests/data/test1011
+++ b/tests/data/test1011
@@ -45,10 +45,10 @@ body
<server>
http
</server>
- <name>
+<name>
HTTP POST with 301 redirect
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/blah/%TESTNUMBER -L -d "moo"
</command>
</client>
diff --git a/tests/data/test1012 b/tests/data/test1012
index af17bb818..da6ec6192 100644
--- a/tests/data/test1012
+++ b/tests/data/test1012
@@ -45,10 +45,10 @@ body
<server>
http
</server>
- <name>
+<name>
HTTP POST with 301 redirect and --post301
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/blah/%TESTNUMBER -L -d "moo" --post301
</command>
</client>
diff --git a/tests/data/test1013 b/tests/data/test1013
index 17a3371f1..d748657b5 100644
--- a/tests/data/test1013
+++ b/tests/data/test1013
@@ -16,14 +16,14 @@ curl-config
<server>
none
</server>
- <name>
+<name>
Compare curl --version with curl-config --protocols
- </name>
- <command>
+</name>
+<command>
--version
</command>
<postcheck>
-%SRCDIR/libtest/test%TESTNUMBER.pl ../curl-config log/stdout%TESTNUMBER protocols
+%SRCDIR/libtest/test%TESTNUMBER.pl ../curl-config %LOGDIR/stdout%TESTNUMBER protocols
</postcheck>
</client>
diff --git a/tests/data/test1014 b/tests/data/test1014
index 875fa7762..f03ac859d 100644
--- a/tests/data/test1014
+++ b/tests/data/test1014
@@ -16,14 +16,14 @@ curl-config
<server>
none
</server>
- <name>
+<name>
Compare curl --version with curl-config --features
- </name>
- <command>
+</name>
+<command>
--version
</command>
<postcheck>
-%SRCDIR/libtest/test1013.pl ../curl-config log/stdout%TESTNUMBER features
+%SRCDIR/libtest/test1013.pl ../curl-config %LOGDIR/stdout%TESTNUMBER features
</postcheck>
</client>
diff --git a/tests/data/test1015 b/tests/data/test1015
index 28412c2f7..fc2614912 100644
--- a/tests/data/test1015
+++ b/tests/data/test1015
@@ -24,13 +24,13 @@ Content-Length: 0
<server>
http
</server>
- <name>
+<name>
--data-urlencode
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER --data-urlencode "my name is moo[]" --data-urlencode "y e s=s_i_r" --data-urlencode "v_alue@log/%TESTNUMBER.txt" --data-urlencode @log/%TESTNUMBER.txt
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --data-urlencode "my name is moo[]" --data-urlencode "y e s=s_i_r" --data-urlencode "v_alue@%LOGDIR/%TESTNUMBER.txt" --data-urlencode @%LOGDIR/%TESTNUMBER.txt
</command>
-<file name="log/%TESTNUMBER.txt">
+<file name="%LOGDIR/%TESTNUMBER.txt">
content to _?!#$'|<>
</file>
</client>
diff --git a/tests/data/test1016 b/tests/data/test1016
index 340dd969b..452d11c8a 100644
--- a/tests/data/test1016
+++ b/tests/data/test1016
@@ -19,13 +19,13 @@ none
<features>
file
</features>
- <name>
+<name>
X-Y range on a file:// URL to stdout
- </name>
+</name>
<command option="no-include">
--r 1-4 file://localhost%FILE_PWD/log/test%TESTNUMBER.txt
+-r 1-4 file://localhost%FILE_PWD/%LOGDIR/test%TESTNUMBER.txt
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
1234567890
</file>
</client>
diff --git a/tests/data/test1017 b/tests/data/test1017
index 034c87a7f..ceb32f20e 100644
--- a/tests/data/test1017
+++ b/tests/data/test1017
@@ -20,13 +20,13 @@ none
<features>
file
</features>
- <name>
+<name>
0-Y range on a file:// URL to stdout
- </name>
+</name>
<command option="no-include">
--r 0-3 file://localhost%FILE_PWD/log/test%TESTNUMBER.txt
+-r 0-3 file://localhost%FILE_PWD/%LOGDIR/test%TESTNUMBER.txt
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
1234567890
</file>
</client>
diff --git a/tests/data/test1018 b/tests/data/test1018
index 25d8cb180..210f1d386 100644
--- a/tests/data/test1018
+++ b/tests/data/test1018
@@ -19,13 +19,13 @@ none
<features>
file
</features>
- <name>
+<name>
X-X range on a file:// URL to stdout
- </name>
+</name>
<command option="no-include">
--r 4-4 file://localhost%FILE_PWD/log/test%TESTNUMBER.txt
+-r 4-4 file://localhost%FILE_PWD/%LOGDIR/test%TESTNUMBER.txt
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
1234567890
</file>
</client>
diff --git a/tests/data/test1019 b/tests/data/test1019
index 02732b483..73d6cb061 100644
--- a/tests/data/test1019
+++ b/tests/data/test1019
@@ -20,13 +20,13 @@ none
<features>
file
</features>
- <name>
+<name>
X- range on a file:// URL to stdout
- </name>
+</name>
<command option="no-include">
--r 7- file://localhost%FILE_PWD/log/test%TESTNUMBER.txt
+-r 7- file://localhost%FILE_PWD/%LOGDIR/test%TESTNUMBER.txt
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
1234567890
1234567890
</file>
diff --git a/tests/data/test102 b/tests/data/test102
index 19be93564..7037986f4 100644
--- a/tests/data/test102
+++ b/tests/data/test102
@@ -26,10 +26,10 @@ REPLY EPSV 500 no such command
<server>
ftp
</server>
- <name>
+<name>
FTP RETR PASV
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
diff --git a/tests/data/test1020 b/tests/data/test1020
index 91c9b6389..c2cd7f2d2 100644
--- a/tests/data/test1020
+++ b/tests/data/test1020
@@ -20,13 +20,13 @@ none
<features>
file
</features>
- <name>
+<name>
-Y range on a file:// URL to stdout
- </name>
+</name>
<command option="no-include">
--r -9 file://localhost%FILE_PWD/log/test%TESTNUMBER.txt
+-r -9 file://localhost%FILE_PWD/%LOGDIR/test%TESTNUMBER.txt
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
1234567890
1234567890
</file>
diff --git a/tests/data/test1022 b/tests/data/test1022
index e55b51ffe..6a5dd2180 100644
--- a/tests/data/test1022
+++ b/tests/data/test1022
@@ -16,14 +16,14 @@ curl-config
<server>
none
</server>
- <name>
+<name>
Compare curl --version with curl-config --version
- </name>
- <command>
+</name>
+<command>
--version
</command>
<postcheck>
-%SRCDIR/libtest/test%TESTNUMBER.pl ../curl-config log/stdout%TESTNUMBER version
+%SRCDIR/libtest/test%TESTNUMBER.pl ../curl-config %LOGDIR/stdout%TESTNUMBER version
</postcheck>
</client>
diff --git a/tests/data/test1023 b/tests/data/test1023
index 18071c6da..1d8cbfb4c 100644
--- a/tests/data/test1023
+++ b/tests/data/test1023
@@ -16,14 +16,14 @@ curl-config
<server>
none
</server>
- <name>
+<name>
Compare curl --version with curl-config --vernum
- </name>
- <command>
+</name>
+<command>
--version
</command>
<postcheck>
-%SRCDIR/libtest/test1022.pl ../curl-config log/stdout%TESTNUMBER vernum
+%SRCDIR/libtest/test1022.pl ../curl-config %LOGDIR/stdout%TESTNUMBER vernum
</postcheck>
</client>
diff --git a/tests/data/test1024 b/tests/data/test1024
index 5fba9d325..55deec98b 100644
--- a/tests/data/test1024
+++ b/tests/data/test1024
@@ -71,12 +71,15 @@ If this is received, the location following worked
<server>
http
</server>
- <name>
+<name>
HTTP Location: following with cookies
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -L -c log/jar%TESTNUMBER
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -L -c %LOGDIR/jar%TESTNUMBER
</command>
+<features>
+cookies
+</features>
</client>
# Verify data after the test has been "shot"
diff --git a/tests/data/test1025 b/tests/data/test1025
index 5f96e1123..762e34a83 100644
--- a/tests/data/test1025
+++ b/tests/data/test1025
@@ -71,12 +71,15 @@ If this is received, the location following worked
<server>
http
</server>
- <name>
+<name>
HTTP Location: following with command-line and server cookies
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -L -c log/jar%TESTNUMBER -b forcedcookie=yes
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -L -c %LOGDIR/jar%TESTNUMBER -b forcedcookie=yes
</command>
+<features>
+cookies
+</features>
</client>
# Verify data after the test has been "shot"
diff --git a/tests/data/test1026 b/tests/data/test1026
index a702a1d6d..d565f24d5 100644
--- a/tests/data/test1026
+++ b/tests/data/test1026
@@ -19,16 +19,16 @@ manual
<server>
none
</server>
- <name>
-curl --manual
- </name>
- <command>
+<name>
+curl --manual
+</name>
+<command>
--manual
</command>
# Search for these two sentinel lines in the manual output; if they are found,
# then chances are good the entire manual is there.
<postcheck>
-perl -e 'open(IN,$ARGV[0]); my $lines=grep(/(curl\s*-\s*transfer\sa\s*URL)|(CONTRIBUTORS)/, <IN>); exit ($lines != 2); # Let this file pass an XML syntax check: </IN>' log/stdout%TESTNUMBER
+perl -e 'open(IN,$ARGV[0]); my $lines=grep(/(curl\s*-\s*transfer\sa\s*URL)|(CONTRIBUTORS)/, <IN>); exit ($lines != 2); # Let this file pass an XML syntax check: </IN>' %LOGDIR/stdout%TESTNUMBER
</postcheck>
</client>
diff --git a/tests/data/test1027 b/tests/data/test1027
index 7574203e2..1d076000b 100644
--- a/tests/data/test1027
+++ b/tests/data/test1027
@@ -16,16 +16,16 @@
<server>
none
</server>
- <name>
+<name>
curl --help
- </name>
- <command>
+</name>
+<command>
--help
</command>
# Search for these two sentinel lines in the help output; if they are found,
# then chances are good the entire help is there.
<postcheck>
-perl -e 'open(IN,$ARGV[0]); my $lines=grep(/(Usage: curl )|(--version\s*Show version)/, <IN>); exit ($lines != 2); # Let this file pass an XML syntax check: </IN>' log/stdout%TESTNUMBER
+perl -e 'open(IN,$ARGV[0]); my $lines=grep(/(Usage: curl )|(--version\s*Show version)/, <IN>); exit ($lines != 2); # Let this file pass an XML syntax check: </IN>' %LOGDIR/stdout%TESTNUMBER
</postcheck>
</client>
diff --git a/tests/data/test1028 b/tests/data/test1028
index cff302815..3e3659732 100644
--- a/tests/data/test1028
+++ b/tests/data/test1028
@@ -41,10 +41,10 @@ works
http
ftp
</server>
- <name>
+<name>
HTTP Location: redirect to FTP URL
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER0001 -L
</command>
</client>
diff --git a/tests/data/test1029 b/tests/data/test1029
index f39ac6ed4..da393cb41 100644
--- a/tests/data/test1029
+++ b/tests/data/test1029
@@ -26,9 +26,9 @@ This server reply is for testing a simple Location: following
<server>
http
</server>
- <name>
+<name>
HTTP Location: and 'redirect_url' check
- </name>
+</name>
<command>
http://%HOSTIP:%HTTPPORT/we/want/our/%TESTNUMBER -w '%{redirect_url} %{url} %{exitcode} %{errormsg}\n'
</command>
diff --git a/tests/data/test103 b/tests/data/test103
index 308c15491..52e5645bc 100644
--- a/tests/data/test103
+++ b/tests/data/test103
@@ -23,10 +23,10 @@ works
<server>
ftp
</server>
- <name>
+<name>
FTP RETR PORT with CWD
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/a/path/%TESTNUMBER -P -
</command>
</client>
diff --git a/tests/data/test1030 b/tests/data/test1030
index bd4e18f1a..1421e769b 100644
--- a/tests/data/test1030
+++ b/tests/data/test1030
@@ -63,13 +63,13 @@ http
!SSPI
crypto
</features>
- <name>
+<name>
HTTP PUT with --anyauth authorization (picking Digest)
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T log/put%TESTNUMBER -u testuser:testpass --anyauth
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T %LOGDIR/put%TESTNUMBER -u testuser:testpass --anyauth
</command>
-<file name="log/put%TESTNUMBER">
+<file name="%LOGDIR/put%TESTNUMBER">
This is data we upload with PUT
a second line
line three
@@ -85,7 +85,6 @@ Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 85
-Expect: 100-continue
This is data we upload with PUT
a second line
@@ -97,7 +96,6 @@ Authorization: Digest username="testuser", realm="gimme all yer s3cr3ts", nonce=
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 85
-Expect: 100-continue
This is data we upload with PUT
a second line
diff --git a/tests/data/test1031 b/tests/data/test1031
index c6e479588..305a0f7eb 100644
--- a/tests/data/test1031
+++ b/tests/data/test1031
@@ -49,10 +49,10 @@ If this is received, the location following worked
<server>
http
</server>
- <name>
+<name>
HTTP Location: following to a query string
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/this/%TESTNUMBER -L
</command>
</client>
diff --git a/tests/data/test1032 b/tests/data/test1032
index 8af07dc78..5456542ae 100644
--- a/tests/data/test1032
+++ b/tests/data/test1032
@@ -31,10 +31,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP HEAD with --range
- </name>
- <command>
+</name>
+<command>
--range 1-3 --head http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1033 b/tests/data/test1033
index 7d9ff0364..b19bf1ce9 100644
--- a/tests/data/test1033
+++ b/tests/data/test1033
@@ -36,10 +36,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP GET with 102 response!
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1034 b/tests/data/test1034
index ec41651a2..2a8170487 100644
--- a/tests/data/test1034
+++ b/tests/data/test1034
@@ -34,16 +34,16 @@ LC_CTYPE=en_US.UTF-8
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
- <name>
+<name>
HTTP over proxy with malformatted IDN host name
- </name>
+</name>
# This host name contains an invalid UTF-8 byte sequence that can't be
# converted into an IDN name
<stdin>
url = "http://invalid-utf8-â.local/page/%TESTNUMBER"
</stdin>
- <command>
+<command>
-K - -x %HOSTIP:%NOLISTENPORT
</command>
</client>
diff --git a/tests/data/test1035 b/tests/data/test1035
index 73d8aefed..1ace9428d 100644
--- a/tests/data/test1035
+++ b/tests/data/test1035
@@ -32,10 +32,10 @@ LC_CTYPE=en_US.UTF-8
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
- <name>
+<name>
HTTP over proxy with too long IDN host name
- </name>
- <command>
+</name>
+<command>
http://too-long-IDN-name-cürl-rüles-la-la-la-dee-da-flooby-nooby.local/page/%TESTNUMBER -x %HOSTIP:%NOLISTENPORT
</command>
</client>
diff --git a/tests/data/test1036 b/tests/data/test1036
index 4ab61a278..f777a6ff7 100644
--- a/tests/data/test1036
+++ b/tests/data/test1036
@@ -27,13 +27,13 @@ REPLY EPSV 500 no such command
<server>
ftp
</server>
- <name>
+<name>
FTP download resume from end of file
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -C -
</command>
-<file name="log/curl%TESTNUMBER.out">
+<file name="%LOGDIR/curl%TESTNUMBER.out">
This is the start!!
</file>
</client>
@@ -52,7 +52,7 @@ REST 20
RETR %TESTNUMBER
QUIT
</protocol>
-<file name="log/curl%TESTNUMBER.out">
+<file name="%LOGDIR/curl%TESTNUMBER.out">
This is the start!!
expected to be a file without the first part
but we emulate that
diff --git a/tests/data/test1037 b/tests/data/test1037
index d9cacb233..18c9e5266 100644
--- a/tests/data/test1037
+++ b/tests/data/test1037
@@ -27,13 +27,13 @@ REPLY EPSV 500 no such command
<server>
ftp
</server>
- <name>
+<name>
FTP download resume from end of empty file
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -C -
</command>
-<file name="log/curl%TESTNUMBER.out">
+<file name="%LOGDIR/curl%TESTNUMBER.out">
</file>
</client>
diff --git a/tests/data/test1038 b/tests/data/test1038
index acac84a29..c2e60a0a4 100644
--- a/tests/data/test1038
+++ b/tests/data/test1038
@@ -19,13 +19,13 @@ Resume
<server>
ftp
</server>
- <name>
+<name>
FTP PASV upload resume from end of file
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T log/upload%TESTNUMBER -C -
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T %LOGDIR/upload%TESTNUMBER -C -
</command>
-<file name="log/upload%TESTNUMBER">
+<file name="%LOGDIR/upload%TESTNUMBER">
this is the *****cr@p******** that we're gonna upload
worx?
diff --git a/tests/data/test1039 b/tests/data/test1039
index 53d7cb5cb..a032c2f9a 100644
--- a/tests/data/test1039
+++ b/tests/data/test1039
@@ -19,13 +19,13 @@ Resume
<server>
ftp
</server>
- <name>
+<name>
FTP PASV upload resume from end of empty file
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T log/upload%TESTNUMBER -C -
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T %LOGDIR/upload%TESTNUMBER -C -
</command>
-<file name="log/upload%TESTNUMBER">
+<file name="%LOGDIR/upload%TESTNUMBER">
this is the *****cr@p******** that we're gonna upload
worx?
diff --git a/tests/data/test104 b/tests/data/test104
index 8b44911de..3674f1da0 100644
--- a/tests/data/test104
+++ b/tests/data/test104
@@ -17,10 +17,10 @@ NOBODY
<server>
ftp
</server>
- <name>
+<name>
FTP --head to get file size only
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/a/path/%TESTNUMBER --head
</command>
</client>
diff --git a/tests/data/test1040 b/tests/data/test1040
index 8899c5b06..bd1e5b0e3 100644
--- a/tests/data/test1040
+++ b/tests/data/test1040
@@ -43,13 +43,13 @@ Content-Length: 0
<server>
http
</server>
- <name>
+<name>
HTTP GET with resume from end of entirely-downloaded file
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -C -
</command>
-<file name="log/curl%TESTNUMBER.out">
+<file name="%LOGDIR/curl%TESTNUMBER.out">
012345678
012345678
012345678
diff --git a/tests/data/test1041 b/tests/data/test1041
index 5580b9589..bb793d51e 100644
--- a/tests/data/test1041
+++ b/tests/data/test1041
@@ -28,10 +28,10 @@ Content-Type: text/html
<server>
http
</server>
- <name>
+<name>
HTTP PUT with resume from end of already-uploaded file
- </name>
-<file name="log/test%TESTNUMBER.txt">
+</name>
+<file name="%LOGDIR/test%TESTNUMBER.txt">
012345678
012345678
012345678
@@ -43,8 +43,8 @@ HTTP PUT with resume from end of already-uploaded file
012345678
012345678
</file>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -Tlog/test%TESTNUMBER.txt -C -
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T%LOGDIR/test%TESTNUMBER.txt -C -
</command>
</client>
@@ -59,7 +59,6 @@ Content-Range: bytes 0-99/100
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 100
-Expect: 100-continue
012345678
012345678
diff --git a/tests/data/test1042 b/tests/data/test1042
index 4a33ae826..a2a5c62f3 100644
--- a/tests/data/test1042
+++ b/tests/data/test1042
@@ -55,13 +55,13 @@ Content-Type: text/plain
<server>
http
</server>
- <name>
+<name>
HTTP GET beyond end of entirely-downloaded file, no server resume
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -C 200
</command>
-<file name="log/curl%TESTNUMBER.out">
+<file name="%LOGDIR/curl%TESTNUMBER.out">
012345678
012345678
012345678
diff --git a/tests/data/test1043 b/tests/data/test1043
index c728b9688..ea850a1f9 100644
--- a/tests/data/test1043
+++ b/tests/data/test1043
@@ -54,13 +54,13 @@ Content-Range: bytes 40-99/100
<server>
http
</server>
- <name>
+<name>
HTTP GET with resume from end of file
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -C -
</command>
-<file name="log/curl%TESTNUMBER.out">
+<file name="%LOGDIR/curl%TESTNUMBER.out">
012345678
012345678
012345678
diff --git a/tests/data/test1044 b/tests/data/test1044
index c5f3a2925..96a4f48c2 100644
--- a/tests/data/test1044
+++ b/tests/data/test1044
@@ -28,10 +28,10 @@ large_file
<server>
ftp
</server>
- <name>
+<name>
FTP download large file info with -I
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/blalbla/%TESTNUMBER -I
</command>
</client>
diff --git a/tests/data/test1045 b/tests/data/test1045
index c2c7df7f6..e8745bf2d 100644
--- a/tests/data/test1045
+++ b/tests/data/test1045
@@ -28,10 +28,10 @@ Content-Type: text/plain
<server>
http
</server>
- <name>
+<name>
HTTP GET with numeric localhost --interface
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --interface %CLIENTIP
</command>
</client>
diff --git a/tests/data/test1046 b/tests/data/test1046
index f78109893..c6bdcbb24 100644
--- a/tests/data/test1046
+++ b/tests/data/test1046
@@ -32,10 +32,10 @@ ipv6
<server>
http-ipv6
</server>
- <name>
+<name>
HTTP-IPv6 GET with numeric localhost --interface
- </name>
- <command>
+</name>
+<command>
-g "http://%HOST6IP:%HTTP6PORT/%TESTNUMBER" --interface ::1
</command>
# --interface doesn't accept an address surrounded by [] so %CLIENT6IP is out
diff --git a/tests/data/test1047 b/tests/data/test1047
index 028a8a6cc..d54a8494d 100644
--- a/tests/data/test1047
+++ b/tests/data/test1047
@@ -34,10 +34,10 @@ dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
<server>
ftp
</server>
- <name>
+<name>
FTP dir list PASV with localhost --interface
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/ --interface %CLIENTIP
</command>
</client>
diff --git a/tests/data/test1048 b/tests/data/test1048
index e81e19f26..56f19c4af 100644
--- a/tests/data/test1048
+++ b/tests/data/test1048
@@ -39,10 +39,10 @@ ipv6
<server>
ftp-ipv6
</server>
- <name>
+<name>
FTP-IPv6 dir list PASV with localhost --interface
- </name>
- <command>
+</name>
+<command>
-g "ftp://%HOST6IP:%FTP6PORT/" --interface ::1
</command>
# --interface doesn't accept an address surrounded by [] so %CLIENT6IP is out
diff --git a/tests/data/test1049 b/tests/data/test1049
index 54d23903a..e59741f51 100644
--- a/tests/data/test1049
+++ b/tests/data/test1049
@@ -24,10 +24,10 @@ returned
<server>
tftp
</server>
- <name>
+<name>
TFTP retrieve with localhost --interface
- </name>
- <command>
+</name>
+<command>
tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER --interface %CLIENTIP
</command>
</client>
@@ -35,12 +35,14 @@ tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER --interface %CLIENTIP
#
# Verify pseudo protocol after the test has been "shot"
<verify>
+<strip>
+^timeout = [5-6]$
+</strip>
<protocol>
opcode = 1
mode = octet
tsize = 0
blksize = 512
-timeout = 6
filename = /%TESTNUMBER
</protocol>
</verify>
diff --git a/tests/data/test105 b/tests/data/test105
index 74922d559..2a26ac7ec 100644
--- a/tests/data/test105
+++ b/tests/data/test105
@@ -27,10 +27,10 @@ REPLY EPSV 500 no such command
<server>
ftp
</server>
- <name>
+<name>
FTP user+password in URL and ASCII transfer
- </name>
- <command>
+</name>
+<command>
ftp://userdude:passfellow@%HOSTIP:%FTPPORT/%TESTNUMBER --use-ascii
</command>
</client>
diff --git a/tests/data/test1050 b/tests/data/test1050
index 281936bfe..ff179c637 100644
--- a/tests/data/test1050
+++ b/tests/data/test1050
@@ -35,10 +35,10 @@ ipv6
<server>
ftp-ipv6
</server>
- <name>
+<name>
FTP-IPv6 dir list, EPRT with specified IP
- </name>
- <command>
+</name>
+<command>
-g "ftp://%HOST6IP:%FTP6PORT/" -P ::1
</command>
# --interface doesn't accept an address surrounded by [] so %CLIENT6IP is out
diff --git a/tests/data/test1051 b/tests/data/test1051
index 5a1cf34c6..921aaeb78 100644
--- a/tests/data/test1051
+++ b/tests/data/test1051
@@ -52,13 +52,13 @@ If this is received, the location following worked
<server>
http
</server>
- <name>
+<name>
HTTP PUT with Location: following
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -L -T log/test%TESTNUMBER.txt
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -L -T %LOGDIR/test%TESTNUMBER.txt
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
Weird
file
to
@@ -85,7 +85,6 @@ Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 78
-Expect: 100-continue
Weird
file
@@ -101,7 +100,6 @@ Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 78
-Expect: 100-continue
Weird
file
diff --git a/tests/data/test1052 b/tests/data/test1052
index 8f8ee61bc..ade77bde5 100644
--- a/tests/data/test1052
+++ b/tests/data/test1052
@@ -48,13 +48,13 @@ If this is received, the location following worked
<server>
http
</server>
- <name>
+<name>
HTTP 1.0 PUT with Location: following
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -0 -L -T log/test%TESTNUMBER.txt
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -0 -L -T %LOGDIR/test%TESTNUMBER.txt
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
Weird
file
to
diff --git a/tests/data/test1053 b/tests/data/test1053
index 06abcf1fb..30ca83ab2 100644
--- a/tests/data/test1053
+++ b/tests/data/test1053
@@ -57,14 +57,14 @@ Mime
<server>
http
</server>
- <name>
+<name>
HTTP RFC1867-type formposting from file with Location: following
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -L -F name=daniel -F tool=curl -F file=@log/test%TESTNUMBER.txt
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -L -F name=daniel -F tool=curl -F file=@%LOGDIR/test%TESTNUMBER.txt
</command>
# We create this file before the command is invoked!
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
foo-
This is a moo-
bar
@@ -81,7 +81,7 @@ POST /we/want/%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 410
+Content-Length: 434
Content-Type: multipart/form-data; boundary=----------------------------9ef8d6205763
------------------------------9ef8d6205763
@@ -105,7 +105,7 @@ POST /we/want/data/%TESTNUMBER0002.txt?coolsite=yes HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 410
+Content-Length: 434
Content-Type: multipart/form-data; boundary=----------------------------9ef8d6205763
------------------------------9ef8d6205763
diff --git a/tests/data/test1054 b/tests/data/test1054
index d8b1d452c..b0425e545 100644
--- a/tests/data/test1054
+++ b/tests/data/test1054
@@ -44,14 +44,14 @@ body
<server>
http
</server>
- <name>
+<name>
HTTP POST from file with 301 redirect and --post301
- </name>
-<file name="log/test%TESTNUMBER.txt">
+</name>
+<file name="%LOGDIR/test%TESTNUMBER.txt">
field=data
</file>
- <command>
-http://%HOSTIP:%HTTPPORT/blah/%TESTNUMBER -L -d @log/test%TESTNUMBER.txt --post301
+<command>
+http://%HOSTIP:%HTTPPORT/blah/%TESTNUMBER -L -d @%LOGDIR/test%TESTNUMBER.txt --post301
</command>
</client>
diff --git a/tests/data/test1055 b/tests/data/test1055
index f6f37531f..2d1c604b4 100644
--- a/tests/data/test1055
+++ b/tests/data/test1055
@@ -32,13 +32,13 @@ Connection: close
http
ftp
</server>
- <name>
+<name>
HTTP PUT Location: redirect to FTP URL
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -L -T log/test%TESTNUMBER.txt
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -L -T %LOGDIR/test%TESTNUMBER.txt
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
Weird
file
to
@@ -60,7 +60,6 @@ Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 78
-Expect: 100-continue
Weird
file
diff --git a/tests/data/test1056 b/tests/data/test1056
index 2bf70ccfe..40879662a 100644
--- a/tests/data/test1056
+++ b/tests/data/test1056
@@ -42,19 +42,28 @@ body
#
# Client-side
<client>
+# This test relies on the IPv6 scope field being ignored when connecting to
+# ipv6-localhost (i.e. [::1%259999] is treated as [::1]). Maybe this is a bit
+# dodgy, but it happens on all our test platforms but Windows so skip this
+# test there. This feature doesn't work on msys or Cygwin, so use a precheck
+# to skip those.
<features>
ipv6
+!win32
</features>
<server>
http
http-ipv6
</server>
- <name>
+<name>
HTTP follow redirect from IPv4 to IPv6 with scope
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/we/are/all/twits/%TESTNUMBER -L
</command>
+<precheck>
+perl -e "print 'Test is not supported on the Windows kernel' if ($^O eq 'MSWin32' || $^O eq 'msys' || $^O eq 'cygwin');"
+</precheck>
</client>
#
diff --git a/tests/data/test1057 b/tests/data/test1057
index ce3fc0b61..a7cb3bc61 100644
--- a/tests/data/test1057
+++ b/tests/data/test1057
@@ -26,10 +26,10 @@ Range
<server>
ftp
</server>
- <name>
+<name>
FTP retrieve a byte-range relative to end of file
- </name>
- <command>
+</name>
+<command>
-r -12 ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1058 b/tests/data/test1058
index ee6c300c1..794d2ef22 100644
--- a/tests/data/test1058
+++ b/tests/data/test1058
@@ -29,10 +29,10 @@ in the request
<server>
http
</server>
- <name>
+<name>
HTTP range relative to end of file
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -r -101
</command>
</client>
diff --git a/tests/data/test1059 b/tests/data/test1059
index 95d4b95cd..5da753e59 100644
--- a/tests/data/test1059
+++ b/tests/data/test1059
@@ -31,10 +31,10 @@ proxy
<server>
http
</server>
- <name>
+<name>
HTTP CONNECT with proxytunnel to unsupported FTP URL
- </name>
- <command>
+</name>
+<command>
ftp://test-number:%TESTNUMBER/wanted/page -p -x %HOSTIP:%HTTPPORT
</command>
</client>
diff --git a/tests/data/test106 b/tests/data/test106
index 981e9dfa9..b5e1e6929 100644
--- a/tests/data/test106
+++ b/tests/data/test106
@@ -25,10 +25,10 @@ works
<server>
ftp
</server>
- <name>
+<name>
FTP GET with type=A style ASCII URL using %20 codes
- </name>
- <command>
+</name>
+<command>
"ftp://%HOSTIP:%FTPPORT//path%20with%20%20spaces//and%20things2/%TESTNUMBER;type=A"
</command>
</client>
diff --git a/tests/data/test1060 b/tests/data/test1060
index 7eab061e6..c1ad6c667 100644
--- a/tests/data/test1060
+++ b/tests/data/test1060
@@ -871,10 +871,10 @@ http
crypto
proxy
</features>
- <name>
+<name>
HTTP proxy CONNECT auth Digest, large headers and data
- </name>
- <command>
+</name>
+<command>
http://test.remote.haxx.se.%TESTNUMBER:8990/path/%TESTNUMBER0002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-digest --proxytunnel
</command>
</client>
diff --git a/tests/data/test1061 b/tests/data/test1061
index c7fcedbc9..76241142c 100644
--- a/tests/data/test1061
+++ b/tests/data/test1061
@@ -876,10 +876,10 @@ http
crypto
proxy
</features>
- <name>
+<name>
HTTP proxy CONNECT auth Digest, large headers and chunked data
- </name>
- <command>
+</name>
+<command>
http://test.remote.haxx.se.%TESTNUMBER:8990/path/%TESTNUMBER0002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-digest --proxytunnel
</command>
</client>
diff --git a/tests/data/test1062 b/tests/data/test1062
index df72e6622..31a27a947 100644
--- a/tests/data/test1062
+++ b/tests/data/test1062
@@ -24,10 +24,10 @@ REPLY CWD 250-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
<server>
ftp
</server>
- <name>
+<name>
FTP with excessively long server command response lines, boundary condition
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1063 b/tests/data/test1063
index ca1ba14a8..fcbc4b883 100644
--- a/tests/data/test1063
+++ b/tests/data/test1063
@@ -22,15 +22,15 @@ none
file
large_file
</features>
- <name>
+<name>
Invalid large X- range on a file://
- </name>
+</name>
# This range value is 2**32+7, which will be truncated to the valid value 7
# if the large file support is not working correctly
- <command>
--r 4294967303- file://localhost%FILE_PWD/log/test%TESTNUMBER.txt
+<command>
+-r 4294967303- file://localhost%FILE_PWD/%LOGDIR/test%TESTNUMBER.txt
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
1234567890
1234567890
</file>
diff --git a/tests/data/test1064 b/tests/data/test1064
index 1f5b4526f..55eeb38da 100644
--- a/tests/data/test1064
+++ b/tests/data/test1064
@@ -31,13 +31,13 @@ still ok
<server>
http
</server>
- <name>
+<name>
HTTP PUT twice
- </name>
- <command>
--H "Expect:" -T log/%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER.upload1 -T log/%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER0002.upload2
+</name>
+<command>
+-H "Expect:" -T %LOGDIR/%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER.upload1 -T %LOGDIR/%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER0002.upload2
</command>
-<file name="log/%TESTNUMBER">
+<file name="%LOGDIR/%TESTNUMBER">
test
</file>
</client>
diff --git a/tests/data/test1065 b/tests/data/test1065
index 02e9a8565..3b1c652b5 100644
--- a/tests/data/test1065
+++ b/tests/data/test1065
@@ -32,13 +32,13 @@ still ok
<server>
http
</server>
- <name>
+<name>
HTTP PUT with one file but two URLs
- </name>
- <command>
--H "Expect:" -T log/%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER.upload1 http://%HOSTIP:%HTTPPORT/%TESTNUMBER0002.url2
+</name>
+<command>
+-H "Expect:" -T %LOGDIR/%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER.upload1 http://%HOSTIP:%HTTPPORT/%TESTNUMBER0002.url2
</command>
-<file name="log/%TESTNUMBER">
+<file name="%LOGDIR/%TESTNUMBER">
test
</file>
</client>
diff --git a/tests/data/test1066 b/tests/data/test1066
index 1fbd7dc08..5b2b178f0 100644
--- a/tests/data/test1066
+++ b/tests/data/test1066
@@ -31,10 +31,10 @@ second
<server>
http
</server>
- <name>
+<name>
HTTP --dump-header - with two URLs
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER0001 --dump-header -
</command>
</client>
diff --git a/tests/data/test1067 b/tests/data/test1067
index e5023f58f..8bb2233e3 100644
--- a/tests/data/test1067
+++ b/tests/data/test1067
@@ -49,10 +49,10 @@ If this is received, the location following worked
<server>
http
</server>
- <name>
+<name>
HTTP Location: following with auto-referer
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER --silent --location --referer "firstone.html;auto" --write-out "%{stderr}|%{referer}|"
</command>
</client>
diff --git a/tests/data/test1068 b/tests/data/test1068
index bf3ae4ee0..982385400 100644
--- a/tests/data/test1068
+++ b/tests/data/test1068
@@ -28,7 +28,7 @@ http
<name>
HTTP PUT from stdin
</name>
- <command>
+<command>
http://%HOSTIP:%HTTPPORT/bzz/%TESTNUMBER -T -
</command>
<stdin>
diff --git a/tests/data/test1069 b/tests/data/test1069
index 2eb665922..515694183 100644
--- a/tests/data/test1069
+++ b/tests/data/test1069
@@ -19,7 +19,7 @@ http
<name>
HTTP 1.0 PUT from stdin with no content length
</name>
- <command>
+<command>
http://%HOSTIP:%HTTPPORT/bzz/%TESTNUMBER -T - -0
</command>
<stdin>
diff --git a/tests/data/test107 b/tests/data/test107
index 911de45bd..a741b7667 100644
--- a/tests/data/test107
+++ b/tests/data/test107
@@ -12,10 +12,10 @@ STOR
<server>
ftp
</server>
- <name>
+<name>
FTP PASV upload file
- </name>
-<file name="log/test%TESTNUMBER.txt">
+</name>
+<file name="%LOGDIR/test%TESTNUMBER.txt">
data
to
see
@@ -23,8 +23,8 @@ that FTP
works
so does it?
</file>
- <command>
-ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T log/test%TESTNUMBER.txt
+<command>
+ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T %LOGDIR/test%TESTNUMBER.txt
</command>
</client>
diff --git a/tests/data/test1070 b/tests/data/test1070
index 3e4d37a52..18c2df3ad 100644
--- a/tests/data/test1070
+++ b/tests/data/test1070
@@ -28,13 +28,13 @@ skip: 2300
<server>
http
</server>
- <name>
+<name>
HTTP POST with server closing connection before (all) data is received
- </name>
- <command>
- -d @log/input%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER -H "Expect: 100-continue"
+</name>
+<command>
+-d @%LOGDIR/input%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER -H "Expect: 100-continue"
</command>
-<file name="log/input%TESTNUMBER">
+<file name="%LOGDIR/input%TESTNUMBER">
This creates the named file with this content before the test case is run,
which is useful if the test case needs a file to act on. We create this file
rather large (larger than your typical TCP packet) so that not all of it can nor
diff --git a/tests/data/test1071 b/tests/data/test1071
index 6c6947227..180c467b1 100644
--- a/tests/data/test1071
+++ b/tests/data/test1071
@@ -69,13 +69,13 @@ http
!SSPI
crypto
</features>
- <name>
+<name>
Downgraded HTTP PUT to HTTP 1.0 with authorization
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T log/put%TESTNUMBER -u testuser:testpass --anyauth
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T %LOGDIR/put%TESTNUMBER -u testuser:testpass --anyauth
</command>
-<file name="log/put%TESTNUMBER">
+<file name="%LOGDIR/put%TESTNUMBER">
This is data we upload with PUT
a second line
line three
@@ -91,7 +91,6 @@ Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 85
-Expect: 100-continue
This is data we upload with PUT
a second line
diff --git a/tests/data/test1072 b/tests/data/test1072
index c0d4c18d4..f0390fb7f 100644
--- a/tests/data/test1072
+++ b/tests/data/test1072
@@ -36,10 +36,10 @@ http
<features>
crypto
</features>
- <name>
+<name>
HTTP chunked PUT to HTTP 1.0 server with authorization
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T - -u testuser:testpass --anyauth
</command>
<stdin>
diff --git a/tests/data/test1073 b/tests/data/test1073
index 3f6d70317..2bc40f057 100644
--- a/tests/data/test1073
+++ b/tests/data/test1073
@@ -30,10 +30,10 @@ Connection: close
<server>
http
</server>
- <name>
+<name>
HTTP chunked PUT to HTTP 1.0 server with redirect
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T - -L
</command>
<stdin>
diff --git a/tests/data/test1074 b/tests/data/test1074
index 55a956ec9..183d51a57 100644
--- a/tests/data/test1074
+++ b/tests/data/test1074
@@ -4,6 +4,7 @@
HTTP
HTTP GET
HTTP/1.0
+DELAY
</keywords>
</info>
@@ -35,10 +36,10 @@ wait 1
<server>
http
</server>
- <name>
+<name>
HTTP downgrade to HTTP/1.0 on second request
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER http://%HOSTIP:%HTTPPORT/wantmore/%TESTNUMBER0001
</command>
</client>
diff --git a/tests/data/test1075 b/tests/data/test1075
index 2d111f284..15d92988c 100644
--- a/tests/data/test1075
+++ b/tests/data/test1075
@@ -48,13 +48,13 @@ Content-Length: 0
<server>
http
</server>
- <name>
+<name>
HTTP PUT with --anyauth authorization (picking Basic)
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T log/put%TESTNUMBER -u testuser:testpass --anyauth
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T %LOGDIR/put%TESTNUMBER -u testuser:testpass --anyauth
</command>
-<file name="log/put%TESTNUMBER">
+<file name="%LOGDIR/put%TESTNUMBER">
This is data we upload with PUT
a second line
line three
@@ -70,7 +70,6 @@ Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 85
-Expect: 100-continue
This is data we upload with PUT
a second line
@@ -82,7 +81,6 @@ Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 85
-Expect: 100-continue
This is data we upload with PUT
a second line
diff --git a/tests/data/test1076 b/tests/data/test1076
index 017a7d11e..258d14e6a 100644
--- a/tests/data/test1076
+++ b/tests/data/test1076
@@ -45,10 +45,10 @@ body
<server>
http
</server>
- <name>
+<name>
HTTP POST with 302 redirect and --post302
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/blah/%TESTNUMBER -L -d "moo" --post302
</command>
</client>
diff --git a/tests/data/test1077 b/tests/data/test1077
index 28af6e978..5162eb342 100644
--- a/tests/data/test1077
+++ b/tests/data/test1077
@@ -46,10 +46,10 @@ http
ftp
proxy
</features>
- <name>
+<name>
FTP over HTTP proxy with downgrade to HTTP 1.0
- </name>
- <command>
+</name>
+<command>
-x %HOSTIP:%HTTPPORT ftp://%HOSTIP:%HTTPPORT/we/want/that/page/%TESTNUMBER ftp://%HOSTIP:%HTTPPORT/we/want/that/page/%TESTNUMBER0002
</command>
</client>
diff --git a/tests/data/test1078 b/tests/data/test1078
index 6f303d0bc..97b30853f 100644
--- a/tests/data/test1078
+++ b/tests/data/test1078
@@ -39,11 +39,11 @@ contents
http
http-proxy
</server>
- <name>
+<name>
HTTP 1.0 CONNECT with proxytunnel and downgrade GET to HTTP/1.0
- </name>
- <command>
---proxy1.0 %HOSTIP:%PROXYPORT -p http://%HOSTIP.%TESTNUMBER:%HTTPPORT/we/want/that/page/%TESTNUMBER http://%HOSTIP.%TESTNUMBER:%HTTPPORT/we/want/that/page/%TESTNUMBER
+</name>
+<command>
+--proxy1.0 %HOSTIP:%PROXYPORT -p http://%HOSTIP:%HTTPPORT/we/want/that/page/%TESTNUMBER http://%HOSTIP:%HTTPPORT/we/want/that/page/%TESTNUMBER
</command>
<features>
proxy
@@ -54,20 +54,20 @@ proxy
# Verify data after the test has been "shot"
<verify>
<proxy>
-CONNECT %HOSTIP.%TESTNUMBER:%HTTPPORT HTTP/1.0
-Host: %HOSTIP.%TESTNUMBER:%HTTPPORT
+CONNECT %HOSTIP:%HTTPPORT HTTP/1.0
+Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Proxy-Connection: Keep-Alive
</proxy>
<protocol>
GET /we/want/that/page/%TESTNUMBER HTTP/1.1
-Host: %HOSTIP.%TESTNUMBER:%HTTPPORT
+Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
GET /we/want/that/page/%TESTNUMBER HTTP/1.0
-Host: %HOSTIP.%TESTNUMBER:%HTTPPORT
+Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
diff --git a/tests/data/test1079 b/tests/data/test1079
index 361c4bd0d..180c48316 100644
--- a/tests/data/test1079
+++ b/tests/data/test1079
@@ -45,10 +45,10 @@ http
!SSPI
crypto
</features>
- <name>
+<name>
HTTP retry after closed connection and empty response
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u testuser:testpass --digest
</command>
</client>
diff --git a/tests/data/test108 b/tests/data/test108
index 6f6e3c83c..20ef6577e 100644
--- a/tests/data/test108
+++ b/tests/data/test108
@@ -17,13 +17,13 @@ STOR
<server>
ftp
</server>
- <name>
+<name>
FTP PORT upload with CWD
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/CWD/STOR/RETR/%TESTNUMBER -T log/upload%TESTNUMBER -P -
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/CWD/STOR/RETR/%TESTNUMBER -T %LOGDIR/upload%TESTNUMBER -P -
</command>
-<file name="log/upload%TESTNUMBER">
+<file name="%LOGDIR/upload%TESTNUMBER">
Moooooooooooo
upload this
</file>
diff --git a/tests/data/test1080 b/tests/data/test1080
index bc7249a93..6b9dd5a13 100644
--- a/tests/data/test1080
+++ b/tests/data/test1080
@@ -26,10 +26,10 @@ This server reply is for testing a simple Location: following
<server>
http
</server>
- <name>
+<name>
HTTP Location: on two URLs 'redirect_url' check
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/we/want/our/%TESTNUMBER http://%HOSTIP:%HTTPPORT/we/want/our/%TESTNUMBER -w '%{redirect_url}\n'
</command>
</client>
diff --git a/tests/data/test1081 b/tests/data/test1081
index 9f5a192e7..557be4fe6 100644
--- a/tests/data/test1081
+++ b/tests/data/test1081
@@ -34,10 +34,10 @@ This second URL does not have a location
<server>
http
</server>
- <name>
+<name>
HTTP no Location: on second URL 'redirect_url' check
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/we/want/our/%TESTNUMBER http://%HOSTIP:%HTTPPORT/we/want/our/%TESTNUMBER0002 -w '%{redirect_url}\n'
</command>
</client>
diff --git a/tests/data/test1082 b/tests/data/test1082
index d4dd0e9b5..606df1c86 100644
--- a/tests/data/test1082
+++ b/tests/data/test1082
@@ -28,10 +28,10 @@ Content-Type: text/plain
<server>
http
</server>
- <name>
+<name>
HTTP GET with localhost --interface
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -4 --interface 127.0.0.1
</command>
<precheck>
diff --git a/tests/data/test1083 b/tests/data/test1083
index d7713b1cf..8728d6183 100644
--- a/tests/data/test1083
+++ b/tests/data/test1083
@@ -32,10 +32,10 @@ ipv6
<server>
http-ipv6
</server>
- <name>
+<name>
HTTP-IPv6 GET with ip6-localhost --interface
- </name>
- <command>
+</name>
+<command>
-g "http://%HOST6IP:%HTTP6PORT/%TESTNUMBER" --interface ip6-localhost
</command>
<precheck>
diff --git a/tests/data/test1084 b/tests/data/test1084
index 7a6292b88..1e311a8b1 100644
--- a/tests/data/test1084
+++ b/tests/data/test1084
@@ -23,10 +23,10 @@ http
<server>
none
</server>
- <name>
+<name>
HTTP GET with invalid --interface
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%NOLISTENPORT/%TESTNUMBER --interface non-existing-host.haxx.se.
</command>
</client>
diff --git a/tests/data/test1085 b/tests/data/test1085
index 582fdb085..b63b0f033 100644
--- a/tests/data/test1085
+++ b/tests/data/test1085
@@ -25,10 +25,10 @@ ipv6
<server>
none
</server>
- <name>
+<name>
HTTP-IPv6 GET with invalid --interface
- </name>
- <command>
+</name>
+<command>
-g "http://%HOST6IP:%NOLISTENPORT/%TESTNUMBER" --interface non-existing-host.haxx.se.
</command>
# Ensure the IPv6 stack is operational before running this test (other tests
diff --git a/tests/data/test1086 b/tests/data/test1086
index f081ebddb..0b4b875d9 100644
--- a/tests/data/test1086
+++ b/tests/data/test1086
@@ -6,7 +6,9 @@ EPSV
RETR
timeout
FAILURE
+SLOWDOWN
flaky
+timing-dependent
</keywords>
</info>
@@ -16,6 +18,7 @@ flaky
# to avoid wasting time waiting for the data phase to start
<servercmd>
SLOWDOWN
+REPLY welcome 220 Hey
REPLY USER 331 OK
REPLY PASS 230 OK
REPLY PWD 257 "/"
@@ -83,10 +86,10 @@ ftp
<killserver>
ftp
</killserver>
- <name>
+<name>
FTP download with strict timeout and slow data transfer
- </name>
- <command timeout="1">
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -m 7
</command>
</client>
diff --git a/tests/data/test1087 b/tests/data/test1087
index b084c9b64..f28b62106 100644
--- a/tests/data/test1087
+++ b/tests/data/test1087
@@ -74,10 +74,10 @@ contents
<server>
http
</server>
- <name>
+<name>
HTTP, proxy with --anyauth and Location: to new host
- </name>
- <command>
+</name>
+<command>
http://first.host.it.is/we/want/that/page/%TESTNUMBER1000 -x %HOSTIP:%HTTPPORT --user iam:myself --location --anyauth
</command>
<features>
diff --git a/tests/data/test1088 b/tests/data/test1088
index 9f12f25ab..e5ae3c2c1 100644
--- a/tests/data/test1088
+++ b/tests/data/test1088
@@ -75,10 +75,10 @@ contents
<server>
http
</server>
- <name>
+<name>
HTTP, proxy with --anyauth and Location: to new host using location-trusted
- </name>
- <command>
+</name>
+<command>
http://first.host.it.is/we/want/that/page/%TESTNUMBER1000 -x %HOSTIP:%HTTPPORT --user iam:myself --location-trusted --anyauth
</command>
<features>
diff --git a/tests/data/test1089 b/tests/data/test1089
index c8c5307aa..c36f21cbb 100644
--- a/tests/data/test1089
+++ b/tests/data/test1089
@@ -39,10 +39,10 @@ bigger monster
<server>
http
</server>
- <name>
+<name>
HTTP GET --write-out with redirected fetch
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -w "%{num_connects}\n%{num_redirects}\n%{size_download}\n%{url_effective}\n%{content_type}\n%{response_code}\n" -L
</command>
</client>
diff --git a/tests/data/test109 b/tests/data/test109
index 739e90b1c..d466437f2 100644
--- a/tests/data/test109
+++ b/tests/data/test109
@@ -17,13 +17,13 @@ APPE
<server>
ftp
</server>
- <name>
+<name>
FTP PASV upload append
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T log/upload%TESTNUMBER --append
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T %LOGDIR/upload%TESTNUMBER --append
</command>
-<file name="log/upload%TESTNUMBER">
+<file name="%LOGDIR/upload%TESTNUMBER">
Moooooooooooo
upload this
</file>
diff --git a/tests/data/test1090 b/tests/data/test1090
index 0551519fb..ffd81bc61 100644
--- a/tests/data/test1090
+++ b/tests/data/test1090
@@ -46,10 +46,10 @@ monster
<server>
http
</server>
- <name>
+<name>
HTTP GET --write-out with redirected fetch and chunked reply
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -w "%{num_connects}\n%{num_redirects}\n%{size_download}\n%{url_effective}\n%{content_type}\n%{response_code}\n" -L
</command>
</client>
diff --git a/tests/data/test1091 b/tests/data/test1091
index 788f2dc27..445d31655 100644
--- a/tests/data/test1091
+++ b/tests/data/test1091
@@ -20,10 +20,10 @@ bla bla bla
<server>
ftp
</server>
- <name>
+<name>
FTP URL with type=i
- </name>
- <command>
+</name>
+<command>
"ftp://%HOSTIP:%FTPPORT/%2ftmp/moo/%TESTNUMBER;type=i" --use-ascii
</command>
</client>
diff --git a/tests/data/test1092 b/tests/data/test1092
index 1c3c4696f..3d7b741ea 100644
--- a/tests/data/test1092
+++ b/tests/data/test1092
@@ -32,10 +32,10 @@ http
ftp
proxy
</features>
- <name>
+<name>
FTP with type=i over HTTP proxy
- </name>
- <command>
+</name>
+<command>
"ftp://%HOSTIP:%HTTPPORT/we/want/that/page/%TESTNUMBER;type=i" --use-ascii -x %HOSTIP:%HTTPPORT
</command>
</client>
diff --git a/tests/data/test1093 b/tests/data/test1093
index 4fbc7b81b..1bed99bec 100644
--- a/tests/data/test1093
+++ b/tests/data/test1093
@@ -24,10 +24,10 @@ returned
<server>
tftp
</server>
- <name>
+<name>
TFTP retrieve with mode=i
- </name>
- <command>
+</name>
+<command>
"tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER;mode=i" --use-ascii
</command>
</client>
@@ -35,12 +35,14 @@ TFTP retrieve with mode=i
#
# Verify pseudo protocol after the test has been "shot"
<verify>
+<strip>
+^timeout = [5-6]$
+</strip>
<protocol>
opcode = 1
mode = octet
tsize = 0
blksize = 512
-timeout = 6
filename = /%TESTNUMBER
</protocol>
</verify>
diff --git a/tests/data/test1094 b/tests/data/test1094
index dd1452bb5..ec1728976 100644
--- a/tests/data/test1094
+++ b/tests/data/test1094
@@ -30,10 +30,10 @@ returned
<server>
tftp
</server>
- <name>
+<name>
TFTP retrieve with mode=netascii
- </name>
- <command>
+</name>
+<command>
"tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER;mode=netascii"
</command>
</client>
@@ -41,12 +41,14 @@ TFTP retrieve with mode=netascii
#
# Verify pseudo protocol after the test has been "shot"
<verify>
+<strip>
+^timeout = [5-6]$
+</strip>
<protocol>
opcode = 1
mode = netascii
tsize = 0
blksize = 512
-timeout = 6
filename = /%TESTNUMBER
</protocol>
</verify>
diff --git a/tests/data/test1095 b/tests/data/test1095
index d4cc082d1..8480c8a47 100644
--- a/tests/data/test1095
+++ b/tests/data/test1095
@@ -55,10 +55,10 @@ http
!SSPI
crypto
</features>
- <name>
+<name>
HTTP with Digest and realm with quoted quotes
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u testuser:testpass --digest
</command>
</client>
diff --git a/tests/data/test1096 b/tests/data/test1096
index 2eb9d1f9f..e7b163924 100644
--- a/tests/data/test1096
+++ b/tests/data/test1096
@@ -20,10 +20,10 @@ REPLY SIZE 500 command not understood
<server>
ftp
</server>
- <name>
-Two FTP downloads, with failed RETR but re-used control connection
- </name>
- <command>
+<name>
+Two FTP downloads, with failed RETR but reused control connection
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/dir/%TESTNUMBER ftp://%HOSTIP:%FTPPORT/dir/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1097 b/tests/data/test1097
index 5a73e89b4..106a8537b 100644
--- a/tests/data/test1097
+++ b/tests/data/test1097
@@ -49,10 +49,10 @@ SSL
!SSPI
proxy
</features>
- <name>
+<name>
HTTP POST using CONNECT with --proxy-ntlm but no auth is required
- </name>
- <command>
+</name>
+<command>
http://test.a.galaxy.far.far.away.%TESTNUMBER:%HTTPPORT/%TESTNUMBER --proxy http://%HOSTIP:%HTTPPORT --proxy-user foo:bar --proxy-ntlm -d "dummy=value" -p
</command>
</client>
diff --git a/tests/data/test1098 b/tests/data/test1098
index 8e31c32b6..dac208949 100644
--- a/tests/data/test1098
+++ b/tests/data/test1098
@@ -31,11 +31,11 @@ http
ftp
proxy
</features>
- <name>
+<name>
FTP RETR twice over proxy confirming persistent connection
- </name>
+</name>
- <command>
+<command>
ftp://ftp-site/moo/%TESTNUMBER ftp://ftp-site/moo/%TESTNUMBER --proxy http://%HOSTIP:%HTTPPORT
</command>
</client>
diff --git a/tests/data/test1099 b/tests/data/test1099
index 77099916f..2a97f6863 100644
--- a/tests/data/test1099
+++ b/tests/data/test1099
@@ -19,10 +19,10 @@ data for %TESTNUMBER
<server>
tftp
</server>
- <name>
+<name>
TFTP get first a non-existing file then an existing
- </name>
- <command>
+</name>
+<command>
tftp://%HOSTIP:%TFTPPORT/an/invalid-file tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER
</command>
</client>
@@ -30,18 +30,19 @@ tftp://%HOSTIP:%TFTPPORT/an/invalid-file tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER
#
# Verify pseudo protocol after the test has been "shot"
<verify>
+<strip>
+^timeout = [5-6]$
+</strip>
<protocol>
opcode = 1
mode = octet
tsize = 0
blksize = 512
-timeout = 6
filename = an/invalid-file
opcode = 1
mode = octet
tsize = 0
blksize = 512
-timeout = 6
filename = /%TESTNUMBER
</protocol>
<stdout>
diff --git a/tests/data/test11 b/tests/data/test11
index 89844ea14..5affc6bde 100644
--- a/tests/data/test11
+++ b/tests/data/test11
@@ -49,10 +49,10 @@ If this is received, the location following worked
<server>
http
</server>
- <name>
+<name>
simple HTTP Location: following
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -L
</command>
</client>
diff --git a/tests/data/test110 b/tests/data/test110
index 6c892ed2a..e53fcd137 100644
--- a/tests/data/test110
+++ b/tests/data/test110
@@ -26,10 +26,10 @@ REPLY EPSV 500 no such command
<server>
ftp
</server>
- <name>
+<name>
FTP download resume with set limit
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -C 20
</command>
</client>
diff --git a/tests/data/test1100 b/tests/data/test1100
index d6e101b13..1148a79f7 100644
--- a/tests/data/test1100
+++ b/tests/data/test1100
@@ -70,17 +70,17 @@ debug
<server>
http
</server>
- <name>
+<name>
HTTP POST with NTLM authorization and following a 302 redirect
- </name>
+</name>
<setenv>
# we force our own host name, in order to make the test machine independent
CURL_GETHOSTNAME=curlhost
# we try to use the LD_PRELOAD hack, if not a debug build
LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
</setenv>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u testuser:testpass --ntlm -L -d "stuff to send away"
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u testuser:testpass --ntlm -L -d "stuff to send away"
</command>
<precheck>
chkhostname curlhost
diff --git a/tests/data/test1101 b/tests/data/test1101
index f7e504f91..02aced8ce 100644
--- a/tests/data/test1101
+++ b/tests/data/test1101
@@ -25,15 +25,15 @@ boo
<server>
http
</server>
- <name>
+<name>
NO_PROXY test, with user name in URL
- </name>
+</name>
<setenv>
no_proxy=%HOSTIP
http_proxy=http://non-existing-host.haxx.se:3128/
</setenv>
- <command>
+<command>
http://user:secret@%HOSTIP:%HTTPPORT/gimme/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1102 b/tests/data/test1102
index c2fd03438..16994d953 100644
--- a/tests/data/test1102
+++ b/tests/data/test1102
@@ -24,10 +24,10 @@ REPLY SITE 250 Name format set to 1
<server>
ftp
</server>
- <name>
+<name>
FTP OS/400 server name format check
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1103 b/tests/data/test1103
index 4624c9d21..a53b504bd 100644
--- a/tests/data/test1103
+++ b/tests/data/test1103
@@ -23,10 +23,10 @@ REPLY SYST 215 unknown-OS runs this server
<server>
ftp
</server>
- <name>
+<name>
FTP non-OS/400 server
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1104 b/tests/data/test1104
index 27c43009e..9c5d659bc 100644
--- a/tests/data/test1104
+++ b/tests/data/test1104
@@ -16,7 +16,7 @@ Date: Tue, 09 Nov 2010 14:49:00 GMT
Location: /want/data/%TESTNUMBER0002
Server: test-server/fake
Set-Cookie: test=true; domain=127.0.0.1; path=/; expires=Thu Jan 1 00:00:00 GMT 1970;
-Set-Cookie: test2=true; domain=127.0.0.1; path=/; expires=Fri Feb 13 11:56:27 GMT 2037;
+Set-Cookie: test2=true; domain=127.0.0.1; path=/; expires=Fri Feb 13 11:56:27 GMT 2525;
Connection: close
This server reply is for testing a set-cookie
@@ -37,7 +37,7 @@ Date: Tue, 09 Nov 2010 14:49:00 GMT
Location: /want/data/%TESTNUMBER0002
Server: test-server/fake
Set-Cookie: test=true; domain=127.0.0.1; path=/; expires=Thu Jan 1 00:00:00 GMT 1970;
-Set-Cookie: test2=true; domain=127.0.0.1; path=/; expires=Fri Feb 13 11:56:27 GMT 2037;
+Set-Cookie: test2=true; domain=127.0.0.1; path=/; expires=Fri Feb 13 11:56:27 GMT 2525;
Connection: close
HTTP/1.1 200 Followed here fine swsclose
@@ -55,13 +55,14 @@ If this is received, the location following worked
<server>
http
</server>
- <name>
+<name>
HTTP cookie expiry date at Jan 1 00:00:00 GMT 1970
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -L -x %HOSTIP:%HTTPPORT -c log/cookies%TESTNUMBER.jar
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -L -x %HOSTIP:%HTTPPORT -c %LOGDIR/cookies%TESTNUMBER.jar
</command>
<features>
+cookies
proxy
</features>
</client>
diff --git a/tests/data/test1105 b/tests/data/test1105
index 396933838..afe621bb0 100644
--- a/tests/data/test1105
+++ b/tests/data/test1105
@@ -31,15 +31,18 @@ Set-Cookie: bar=foo bar
<server>
http
</server>
- <name>
+<name>
HTTP with cookie parser and header recording
- </name>
- <command>
-"http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER?parm1=this*that/other/thing&parm2=foobar/%TESTNUMBER" -c log/cookie%TESTNUMBER.txt -d "userid=myname&password=mypassword"
+</name>
+<command>
+"http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER?parm1=this*that/other/thing&parm2=foobar/%TESTNUMBER" -c %LOGDIR/cookie%TESTNUMBER.txt -d "userid=myname&password=mypassword"
</command>
<precheck>
perl -e "print 'Test requires default test server host' if ( '%HOSTIP' ne '127.0.0.1' );"
</precheck>
+<features>
+cookies
+</features>
</client>
# Verify data after the test has been "shot"
@@ -54,7 +57,7 @@ Content-Type: application/x-www-form-urlencoded
userid=myname&password=mypassword
</protocol>
-<file name="log/cookie%TESTNUMBER.txt" mode="text">
+<file name="%LOGDIR/cookie%TESTNUMBER.txt" mode="text">
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
diff --git a/tests/data/test1106 b/tests/data/test1106
index f6e589302..e3acdac16 100644
--- a/tests/data/test1106
+++ b/tests/data/test1106
@@ -29,14 +29,14 @@ proxy
<server>
http
</server>
- <name>
+<name>
FTP URL and with ftp_proxy environment variable set
- </name>
+</name>
<setenv>
ftp_proxy=http://%HOSTIP:%HTTPPORT/
</setenv>
- <command>
+<command>
ftp://%HOSTIP:23456/%TESTNUMBER
</command>
diff --git a/tests/data/test1107 b/tests/data/test1107
index 4946e8937..8b31c76f8 100644
--- a/tests/data/test1107
+++ b/tests/data/test1107
@@ -27,10 +27,10 @@ REPLY PRET 200 fine
<server>
ftp
</server>
- <name>
+<name>
FTP RETR PASV with PRET
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER --ftp-pret
</command>
diff --git a/tests/data/test1108 b/tests/data/test1108
index 3667b118b..c6008af30 100644
--- a/tests/data/test1108
+++ b/tests/data/test1108
@@ -20,10 +20,10 @@ REPLY PRET 550 unknown command
<server>
ftp
</server>
- <name>
+<name>
FTP RETR PASV with PRET not supported
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER --ftp-pret
</command>
diff --git a/tests/data/test1109 b/tests/data/test1109
index eb209a5d6..93aa9e4db 100644
--- a/tests/data/test1109
+++ b/tests/data/test1109
@@ -22,10 +22,10 @@ hello
<server>
http
</server>
- <name>
+<name>
HTTP GET with URL that contains fragment after the path
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER#test
</command>
</client>
diff --git a/tests/data/test111 b/tests/data/test111
index 25df3aee5..a46f7aef1 100644
--- a/tests/data/test111
+++ b/tests/data/test111
@@ -19,10 +19,10 @@ FAILURE
<server>
ftp
</server>
- <name>
+<name>
FTP download resume beyond file size
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -C 2000
</command>
</client>
diff --git a/tests/data/test1110 b/tests/data/test1110
index a363fef9c..165a8acd8 100644
--- a/tests/data/test1110
+++ b/tests/data/test1110
@@ -23,10 +23,10 @@ hello
<server>
http
</server>
- <name>
+<name>
HTTP GET with URL that contains a fragment after the query part
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER?q=foobar#fragment
</command>
</client>
diff --git a/tests/data/test1111 b/tests/data/test1111
index 1e9203a45..157cd2751 100644
--- a/tests/data/test1111
+++ b/tests/data/test1111
@@ -23,10 +23,10 @@ hello
<server>
http
</server>
- <name>
+<name>
HTTP GET with URL whose fragment contains a # (which is illegal)
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER?q=foobar#fragment#fragment2
</command>
</client>
diff --git a/tests/data/test1112 b/tests/data/test1112
index b918c7310..b0a610660 100644
--- a/tests/data/test1112
+++ b/tests/data/test1112
@@ -1,4 +1,5 @@
<testcase>
+# This is the ftps equivalent of test1086
<info>
<keywords>
FTPS
@@ -6,6 +7,8 @@ EPSV
RETR
timeout
FAILURE
+SLOWDOWN
+timing-dependent
</keywords>
</info>
@@ -15,6 +18,7 @@ FAILURE
# to avoid wasting time waiting for the data phase to start
<servercmd>
SLOWDOWN
+REPLY welcome 220 Hey
REPLY USER 331 OK
REPLY PASS 230 OK
REPLY PWD 257 "/"
@@ -85,10 +89,10 @@ ftps
<killserver>
ftps
</killserver>
- <name>
+<name>
FTPS download with strict timeout and slow data transfer
- </name>
- <command timeout="1">
+</name>
+<command>
-k --ftp-ssl-control ftps://%HOSTIP:%FTPSPORT/%TESTNUMBER -m 16
</command>
</client>
diff --git a/tests/data/test1114 b/tests/data/test1114
index 573eda4d2..e8a87ab11 100644
--- a/tests/data/test1114
+++ b/tests/data/test1114
@@ -21,10 +21,10 @@ ftp
<tool>
lib576
</tool>
- <name>
+<name>
FTP wildcard download - skip/parser_correctness/CURLOPT_FNMATCH_FUNCTION (DOS)
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/fully_simulated/DOS/*
</command>
</client>
diff --git a/tests/data/test1115 b/tests/data/test1115
index f14182c87..40ce7c15e 100644
--- a/tests/data/test1115
+++ b/tests/data/test1115
@@ -29,10 +29,10 @@ Content-Length: 0
<server>
http
</server>
- <name>
+<name>
HTTP GET with unexpected 1xx response
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1116 b/tests/data/test1116
index 3543e751b..af323fad6 100644
--- a/tests/data/test1116
+++ b/tests/data/test1116
@@ -4,6 +4,7 @@
HTTP
HTTP GET
chunked Transfer-Encoding
+DELAY
</keywords>
</info>
#
@@ -52,11 +53,11 @@ writedelay: 10
<server>
http
</server>
- <name>
+<name>
HTTP GET with chunked trailer without Trailer:
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -D log/heads%TESTNUMBER
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -D %LOGDIR/heads%TESTNUMBER
</command>
</client>
@@ -70,7 +71,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/heads%TESTNUMBER">
+<file name="%LOGDIR/heads%TESTNUMBER">
HTTP/1.1 200 funky chunky!
Server: fakeit/0.9 fakeitbad/1.0
Transfer-Encoding: chunked
diff --git a/tests/data/test1117 b/tests/data/test1117
index 405aa861e..4399d7d21 100644
--- a/tests/data/test1117
+++ b/tests/data/test1117
@@ -4,6 +4,7 @@
HTTP
HTTP GET
Range
+DELAY
</keywords>
</info>
@@ -40,10 +41,10 @@ writedelay: 1000
<server>
http
</server>
- <name>
+<name>
HTTP with invalid range then another URL
- </name>
- <command>
+</name>
+<command>
-r 10-22 http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER http://%HOSTIP:%HTTPPORT/wantmore/%TESTNUMBER0001
</command>
</client>
diff --git a/tests/data/test1118 b/tests/data/test1118
index 9024e0864..3daa8a63e 100644
--- a/tests/data/test1118
+++ b/tests/data/test1118
@@ -31,10 +31,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
URL without slash and @-letter in query
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT?email=name@example.com/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1119 b/tests/data/test1119
index 2f1b54c23..41f6dba2c 100644
--- a/tests/data/test1119
+++ b/tests/data/test1119
@@ -13,9 +13,9 @@ symbols-in-versions
none
</server>
- <name>
+<name>
Verify that symbols-in-versions and headers are in sync
- </name>
+</name>
<command type="perl">
%SRCDIR/symbol-scan.pl %SRCDIR/.. ../include/curl
diff --git a/tests/data/test112 b/tests/data/test112
index 6d23c4457..41bbc025d 100644
--- a/tests/data/test112
+++ b/tests/data/test112
@@ -16,13 +16,13 @@ Resume
<server>
ftp
</server>
- <name>
+<name>
FTP PASV upload resume
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T log/upload%TESTNUMBER -C 40
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T %LOGDIR/upload%TESTNUMBER -C 40
</command>
-<file name="log/upload%TESTNUMBER">
+<file name="%LOGDIR/upload%TESTNUMBER">
this is the *****crap******** that we're gonna upload
worx?
diff --git a/tests/data/test1120 b/tests/data/test1120
index c7cd27568..464b8ac09 100644
--- a/tests/data/test1120
+++ b/tests/data/test1120
@@ -5,6 +5,8 @@ FTP
PORT
RETR
421
+timeout
+FAILURE
</keywords>
</info>
# Server-side
@@ -19,10 +21,10 @@ REPLY CWD 421 Timeout!
<server>
ftp
</server>
- <name>
+<name>
FTP with 421 timeout response
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/a/path/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1121 b/tests/data/test1121
index 823a52e7a..3eec862d6 100644
--- a/tests/data/test1121
+++ b/tests/data/test1121
@@ -23,10 +23,10 @@ blaha
<server>
http
</server>
- <name>
+<name>
HTTP multiple provided Host: headers
- </name>
- <command>
+</name>
+<command>
-H "Host: host1" -H "Host: host2" -H "Host: host3" http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1122 b/tests/data/test1122
index a9f6c434f..478bafb3c 100644
--- a/tests/data/test1122
+++ b/tests/data/test1122
@@ -45,10 +45,10 @@ libz
<server>
http
</server>
- <name>
+<name>
HTTP GET gzip transfer-encoded content
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --tr-encoding
</command>
</client>
diff --git a/tests/data/test1123 b/tests/data/test1123
index 036c78d8c..bfa8abc06 100644
--- a/tests/data/test1123
+++ b/tests/data/test1123
@@ -174,10 +174,10 @@ libz
<server>
http
</server>
- <name>
+<name>
HTTP GET deflate transfer-encoded content
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --tr-encoding
</command>
</client>
diff --git a/tests/data/test1124 b/tests/data/test1124
index fc3c9cf69..0b198c638 100644
--- a/tests/data/test1124
+++ b/tests/data/test1124
@@ -43,10 +43,10 @@ libz
<server>
http
</server>
- <name>
+<name>
HTTP GET gzip+chunked transfer-encoded content
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --tr-encoding
</command>
</client>
diff --git a/tests/data/test1125 b/tests/data/test1125
index 43e00a5f0..62e56e6e7 100644
--- a/tests/data/test1125
+++ b/tests/data/test1125
@@ -43,10 +43,10 @@ libz
<server>
http
</server>
- <name>
+<name>
HTTP GET transfer-encoding with custom Connection:
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --tr-encoding -H "Connection: close"
</command>
</client>
diff --git a/tests/data/test1126 b/tests/data/test1126
index d45f40dad..b25820b0c 100644
--- a/tests/data/test1126
+++ b/tests/data/test1126
@@ -27,10 +27,10 @@ Content-Type: text/html
<server>
http
</server>
- <name>
+<name>
HTTP 200 If-Modified-Since with newer document
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -z "dec 12 12:00:00 1999 GMT"
</command>
</client>
diff --git a/tests/data/test1127 b/tests/data/test1127
index 968f80bf1..fa3ee85fe 100644
--- a/tests/data/test1127
+++ b/tests/data/test1127
@@ -36,10 +36,10 @@ Content-Type: text/html
<server>
http
</server>
- <name>
+<name>
HTTP 200 If-Modified-Since with older document
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -z "dec 12 12:00:00 1999 GMT"
</command>
</client>
diff --git a/tests/data/test1128 b/tests/data/test1128
index 193ee40da..37b5b522e 100644
--- a/tests/data/test1128
+++ b/tests/data/test1128
@@ -37,10 +37,10 @@ Content-Type: text/html
<server>
http
</server>
- <name>
+<name>
HTTP 200 If-Modified-Since with old+new documents
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER0001 -z "dec 12 12:00:00 1999 GMT"
</command>
</client>
diff --git a/tests/data/test1129 b/tests/data/test1129
index df4a9b0f9..41b295563 100644
--- a/tests/data/test1129
+++ b/tests/data/test1129
@@ -31,7 +31,7 @@ Content-Type: text/html
</data1>
# we use skip to make the test server never read the full payload off
-# the socket and instead return the response at once
+# the socket and instead return the response at once
<servercmd>
skip: 1053700
</servercmd>
@@ -41,17 +41,17 @@ skip: 1053700
# Client-side
<client>
# 1053700 x 'x'
-<file name="log/file%TESTNUMBER">
+<file name="%LOGDIR/file%TESTNUMBER">
%repeat[1053700 x x]%
</file>
<server>
http
</server>
- <name>
+<name>
HTTP POST expect 100-continue with a 404
- </name>
+</name>
<command option="no-output">
--d @log/file%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER0001
+-d @%LOGDIR/file%TESTNUMBER --expect100-timeout 99 http://%HOSTIP:%HTTPPORT/%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER0001
</command>
</client>
diff --git a/tests/data/test113 b/tests/data/test113
index 8264a6f2d..1c0a8b246 100644
--- a/tests/data/test113
+++ b/tests/data/test113
@@ -17,10 +17,10 @@ REPLY USER 314 bluah you fewl!
<server>
ftp
</server>
- <name>
+<name>
FTP download, failed login: USER not valid
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1130 b/tests/data/test1130
index 50ebeddc8..bdab216d8 100644
--- a/tests/data/test1130
+++ b/tests/data/test1130
@@ -30,8 +30,9 @@ Content-Type: text/html
-foo-
</data1>
-# we use skip to make the test server never read the full payload off
-# the socket and instead return the response at once
+# We use skip to make the test server never read the full payload off
+# the socket and instead return the response at once. In actuality, the
+# long --expect100-timeout means that it will never get a chance to read this.
<servercmd>
skip: 100
</servercmd>
@@ -41,17 +42,17 @@ skip: 100
# Client-side
<client>
# 100 x 'x'
-<file name="log/file%TESTNUMBER">
+<file name="%LOGDIR/file%TESTNUMBER">
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
</file>
<server>
http
</server>
- <name>
+<name>
HTTP POST forced expect 100-continue with a 404
- </name>
+</name>
<command option="no-output">
--d @log/file%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER0001 -H "Expect: 100-continue"
+-d @%LOGDIR/file%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER0001 -H "Expect: 100-continue" --expect100-timeout 99
</command>
</client>
diff --git a/tests/data/test1131 b/tests/data/test1131
index 8ead289c5..20ad5cfd8 100644
--- a/tests/data/test1131
+++ b/tests/data/test1131
@@ -30,8 +30,9 @@ Content-Type: text/html
FAILURE2
</data1>
-# we use skip to make the test server never read the full payload off
-# the socket and instead return the response at once
+# We use skip to make the test server never read the full payload off
+# the socket and instead return the response at once. In actuality, the
+# long --expect100-timeout means that it will never get a chance to read this.
<servercmd>
skip: 100
</servercmd>
@@ -41,17 +42,17 @@ skip: 100
# Client-side
<client>
# 100 x 'x'
-<file name="log/file%TESTNUMBER">
+<file name="%LOGDIR/file%TESTNUMBER">
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
</file>
<server>
http
</server>
- <name>
+<name>
HTTP PUT expect 100-continue with a 400
- </name>
+</name>
<command option="no-output">
--T log/file%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T log/file%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER0001
+-H "Expect: 100-continue" -T %LOGDIR/file%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T %LOGDIR/file%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER0001 --expect100-timeout 99
</command>
</client>
@@ -79,15 +80,15 @@ PUT /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 100
Expect: 100-continue
+Content-Length: 100
PUT /%TESTNUMBER0001 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 100
Expect: 100-continue
+Content-Length: 100
</protocol>
</verify>
diff --git a/tests/data/test1132 b/tests/data/test1132
index 8aa643224..613031bac 100644
--- a/tests/data/test1132
+++ b/tests/data/test1132
@@ -13,9 +13,9 @@ memory-includes
none
</server>
- <name>
+<name>
Verify memory #include files in libcurl's C source files
- </name>
+</name>
<command type="perl">
%SRCDIR/mem-include-scan.pl %SRCDIR/../lib
diff --git a/tests/data/test1133 b/tests/data/test1133
index ae6c323ac..9582fc4d0 100644
--- a/tests/data/test1133
+++ b/tests/data/test1133
@@ -25,14 +25,14 @@ Mime
<server>
http
</server>
- <name>
+<name>
HTTP RFC1867-type formposting with filename/data contains ',', ';', '"'
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -F "file=@\"log/test%TESTNUMBER,and;.txt\";type=mo/foo;filename=\"faker,and;.txt\"" -F 'file2=@"log/test%TESTNUMBER,and;.txt"' -F 'file3=@"log/test%TESTNUMBER,and;.txt";type=m/f,"log/test%TESTNUMBER,and;.txt"' -F a="{\"field1\":\"value1\",\"field2\":\"value2\"}" -F 'b=" \\value1;type=\"whatever\" "; type=text/foo; charset=utf-8 ; filename=param_b'
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -F "file=@\"%LOGDIR/test%TESTNUMBER,and;.txt\";type=mo/foo;filename=\"faker,and;.txt\"" -F 'file2=@"%LOGDIR/test%TESTNUMBER,and;.txt"' -F 'file3=@"%LOGDIR/test%TESTNUMBER,and;.txt";type=m/f,"%LOGDIR/test%TESTNUMBER,and;.txt"' -F a="{\"field1\":\"value1\",\"field2\":\"value2\"}" -F 'b=" \\value1;type=\"whatever\" "; type=text/foo; charset=utf-8 ; filename=param_b'
</command>
# We create this file before the command is invoked!
-<file name="log/test%TESTNUMBER,and;.txt">
+<file name="%LOGDIR/test%TESTNUMBER,and;.txt">
foo bar
This is a bar foo
bar
@@ -50,7 +50,7 @@ POST /we/want/%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 1264
+Content-Length: 1324
Content-Type: multipart/form-data; boundary=----------------------------24e78000bd32
------------------------------24e78000bd32
diff --git a/tests/data/test1134 b/tests/data/test1134
index 01ceba1f6..09aea5224 100644
--- a/tests/data/test1134
+++ b/tests/data/test1134
@@ -34,10 +34,10 @@ contents2
<server>
http
</server>
- <name>
-HTTP connection re-use with different credentials
- </name>
- <command>
+<name>
+HTTP connection reuse with different credentials
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u user1:password1 --next http://%HOSTIP:%HTTPPORT/%TESTNUMBER0001 -u 2user:password2
</command>
</client>
diff --git a/tests/data/test1135 b/tests/data/test1135
index e0aae514f..d188989ed 100644
--- a/tests/data/test1135
+++ b/tests/data/test1135
@@ -17,9 +17,9 @@ none
# the build. We break binary compatibility by changing order. Only add
# new entries last or bump the SONAME.
#
- <name>
+<name>
Verify CURL_EXTERN order
- </name>
+</name>
<command type="perl">
%SRCDIR/extern-scan.pl %SRCDIR/..
@@ -28,94 +28,99 @@ Verify CURL_EXTERN order
<verify>
<stdout>
-CURL_EXTERN int curl_strequal
-CURL_EXTERN int curl_strnequal
-CURL_EXTERN curl_mime *curl_mime_init
-CURL_EXTERN void curl_mime_free
-CURL_EXTERN curl_mimepart *curl_mime_addpart
-CURL_EXTERN CURLcode curl_mime_name
-CURL_EXTERN CURLcode curl_mime_filename
-CURL_EXTERN CURLcode curl_mime_type
-CURL_EXTERN CURLcode curl_mime_encoder
-CURL_EXTERN CURLcode curl_mime_data
-CURL_EXTERN CURLcode curl_mime_filedata
-CURL_EXTERN CURLcode curl_mime_data_cb
-CURL_EXTERN CURLcode curl_mime_subparts
-CURL_EXTERN CURLcode curl_mime_headers
-CURL_EXTERN CURLFORMcode curl_formadd
-CURL_EXTERN int curl_formget
-CURL_EXTERN void curl_formfree
-CURL_EXTERN char *curl_getenv
-CURL_EXTERN char *curl_version
-CURL_EXTERN char *curl_easy_escape
-CURL_EXTERN char *curl_escape
-CURL_EXTERN char *curl_easy_unescape
-CURL_EXTERN char *curl_unescape
-CURL_EXTERN void curl_free
-CURL_EXTERN CURLcode curl_global_init
-CURL_EXTERN CURLcode curl_global_init_mem
-CURL_EXTERN void curl_global_cleanup
-CURL_EXTERN CURLsslset curl_global_sslset
-CURL_EXTERN struct curl_slist *curl_slist_append
-CURL_EXTERN void curl_slist_free_all
-CURL_EXTERN time_t curl_getdate
-CURL_EXTERN CURLSH *curl_share_init
-CURL_EXTERN CURLSHcode curl_share_setopt
-CURL_EXTERN CURLSHcode curl_share_cleanup
-CURL_EXTERN curl_version_info_data *curl_version_info
-CURL_EXTERN const char *curl_easy_strerror
-CURL_EXTERN const char *curl_share_strerror
-CURL_EXTERN CURLcode curl_easy_pause
-CURL_EXTERN CURL *curl_easy_init
-CURL_EXTERN CURLcode curl_easy_setopt
-CURL_EXTERN CURLcode curl_easy_perform
-CURL_EXTERN void curl_easy_cleanup
-CURL_EXTERN CURLcode curl_easy_getinfo
-CURL_EXTERN CURL *curl_easy_duphandle
-CURL_EXTERN void curl_easy_reset
-CURL_EXTERN CURLcode curl_easy_recv
-CURL_EXTERN CURLcode curl_easy_send
-CURL_EXTERN CURLcode curl_easy_upkeep
-CURL_EXTERN int curl_mprintf
-CURL_EXTERN int curl_mfprintf
-CURL_EXTERN int curl_msprintf
-CURL_EXTERN int curl_msnprintf
-CURL_EXTERN int curl_mvprintf
-CURL_EXTERN int curl_mvfprintf
-CURL_EXTERN int curl_mvsprintf
-CURL_EXTERN int curl_mvsnprintf
-CURL_EXTERN char *curl_maprintf
-CURL_EXTERN char *curl_mvaprintf
-CURL_EXTERN CURLM *curl_multi_init
-CURL_EXTERN CURLMcode curl_multi_add_handle
-CURL_EXTERN CURLMcode curl_multi_remove_handle
-CURL_EXTERN CURLMcode curl_multi_fdset
-CURL_EXTERN CURLMcode curl_multi_wait
-CURL_EXTERN CURLMcode curl_multi_poll
-CURL_EXTERN CURLMcode curl_multi_wakeup
-CURL_EXTERN CURLMcode curl_multi_perform
-CURL_EXTERN CURLMcode curl_multi_cleanup
-CURL_EXTERN CURLMsg *curl_multi_info_read
-CURL_EXTERN const char *curl_multi_strerror
-CURL_EXTERN CURLMcode curl_multi_socket
-CURL_EXTERN CURLMcode curl_multi_socket_action
-CURL_EXTERN CURLMcode curl_multi_socket_all
-CURL_EXTERN CURLMcode curl_multi_timeout
-CURL_EXTERN CURLMcode curl_multi_setopt
-CURL_EXTERN CURLMcode curl_multi_assign
-CURL_EXTERN char *curl_pushheader_bynum
-CURL_EXTERN char *curl_pushheader_byname
-CURL_EXTERN CURLU *curl_url
-CURL_EXTERN void curl_url_cleanup
-CURL_EXTERN CURLU *curl_url_dup
-CURL_EXTERN CURLUcode curl_url_get
-CURL_EXTERN CURLUcode curl_url_set
-CURL_EXTERN const char *curl_url_strerror
-CURL_EXTERN const struct curl_easyoption *curl_easy_option_by_name
-CURL_EXTERN const struct curl_easyoption *curl_easy_option_by_id
-CURL_EXTERN const struct curl_easyoption *curl_easy_option_next
-CURL_EXTERN CURLHcode curl_easy_header
-CURL_EXTERN struct curl_header *curl_easy_nextheader
+curl_strequal
+curl_strnequal
+curl_mime_init
+curl_mime_free
+curl_mime_addpart
+curl_mime_name
+curl_mime_filename
+curl_mime_type
+curl_mime_encoder
+curl_mime_data
+curl_mime_filedata
+curl_mime_data_cb
+curl_mime_subparts
+curl_mime_headers
+curl_formadd
+curl_formget
+curl_formfree
+curl_getenv
+curl_version
+curl_easy_escape
+curl_escape
+curl_easy_unescape
+curl_unescape
+curl_free
+curl_global_init
+curl_global_init_mem
+curl_global_cleanup
+curl_global_trace
+curl_global_sslset
+curl_slist_append
+curl_slist_free_all
+curl_getdate
+curl_share_init
+curl_share_setopt
+curl_share_cleanup
+curl_version_info
+curl_easy_strerror
+curl_share_strerror
+curl_easy_pause
+curl_easy_init
+curl_easy_setopt
+curl_easy_perform
+curl_easy_cleanup
+curl_easy_getinfo
+curl_easy_duphandle
+curl_easy_reset
+curl_easy_recv
+curl_easy_send
+curl_easy_upkeep
+curl_easy_header
+curl_easy_nextheader
+curl_mprintf
+curl_mfprintf
+curl_msprintf
+curl_msnprintf
+curl_mvprintf
+curl_mvfprintf
+curl_mvsprintf
+curl_mvsnprintf
+curl_maprintf
+curl_mvaprintf
+curl_multi_init
+curl_multi_add_handle
+curl_multi_remove_handle
+curl_multi_fdset
+curl_multi_wait
+curl_multi_poll
+curl_multi_wakeup
+curl_multi_perform
+curl_multi_cleanup
+curl_multi_info_read
+curl_multi_strerror
+curl_multi_socket
+curl_multi_socket_action
+curl_multi_socket_all
+curl_multi_timeout
+curl_multi_setopt
+curl_multi_assign
+curl_multi_get_handles
+curl_pushheader_bynum
+curl_pushheader_byname
+curl_easy_option_by_name
+curl_easy_option_by_id
+curl_easy_option_next
+curl_url
+curl_url_cleanup
+curl_url_dup
+curl_url_get
+curl_url_set
+curl_url_strerror
+curl_ws_recv
+curl_ws_send
+curl_ws_meta
</stdout>
</verify>
diff --git a/tests/data/test1136 b/tests/data/test1136
index 1ce533622..1836f66ea 100644
--- a/tests/data/test1136
+++ b/tests/data/test1136
@@ -34,6 +34,7 @@ boo
<features>
PSL
proxy
+cookies
</features>
<server>
http
@@ -45,14 +46,14 @@ Check cookies against PSL
TZ=GMT
</setenv>
<command>
-http://www.example.ck/%TESTNUMBER http://www.ck/%TESTNUMBER http://z-1.compute-1.amazonaws.com/%TESTNUMBER -b none -c log/jar%TESTNUMBER.txt -x %HOSTIP:%HTTPPORT
+http://www.example.ck/%TESTNUMBER http://www.ck/%TESTNUMBER http://z-1.compute-1.amazonaws.com/%TESTNUMBER -b none -c %LOGDIR/jar%TESTNUMBER.txt -x %HOSTIP:%HTTPPORT
</command>
</client>
# Verify data after the test has been "shot"
<verify>
-<file name="log/jar%TESTNUMBER.txt" mode="text">
+<file name="%LOGDIR/jar%TESTNUMBER.txt" mode="text">
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
diff --git a/tests/data/test1137 b/tests/data/test1137
index aa37325a7..cb20aee31 100644
--- a/tests/data/test1137
+++ b/tests/data/test1137
@@ -27,10 +27,10 @@ REPLY EPSV 500 no such command
<server>
ftp
</server>
- <name>
+<name>
FTP RETR --ignore-content-length
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER --ignore-content-length
</command>
diff --git a/tests/data/test1138 b/tests/data/test1138
index c98258394..9afe8d7fb 100644
--- a/tests/data/test1138
+++ b/tests/data/test1138
@@ -45,10 +45,10 @@ body
<server>
http
</server>
- <name>
+<name>
HTTP redirect with UTF-8 characters
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/we/are/all/twits/%TESTNUMBER -L
</command>
</client>
diff --git a/tests/data/test114 b/tests/data/test114
index 8d8cc86b1..8a545f2a8 100644
--- a/tests/data/test114
+++ b/tests/data/test114
@@ -17,10 +17,10 @@ REPLY PASS 314 bluah you f00l!
<server>
ftp
</server>
- <name>
+<name>
FTP download, failed login: PASS not valid
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1140 b/tests/data/test1140
index f083eec39..5aa997e78 100644
--- a/tests/data/test1140
+++ b/tests/data/test1140
@@ -14,9 +14,9 @@ documentation
none
</server>
- <name>
+<name>
Verify the nroff of man pages
- </name>
+</name>
<command type="perl">
%SRCDIR/nroff-scan.pl %SRCDIR/../docs/ %SRCDIR/../docs/libcurl/*.3 %SRCDIR/../docs/libcurl/opts/*.3 %SRCDIR/../docs/*.1
diff --git a/tests/data/test1141 b/tests/data/test1141
index 97faec45c..727cbcd56 100644
--- a/tests/data/test1141
+++ b/tests/data/test1141
@@ -41,10 +41,10 @@ hej
<server>
http
</server>
- <name>
+<name>
HTTP redirect to http:/// (three slashes!)
- </name>
- <command>
+</name>
+<command>
%HOSTIP:%HTTPPORT/want/%TESTNUMBER -L -x http://%HOSTIP:%HTTPPORT
</command>
<features>
diff --git a/tests/data/test1142 b/tests/data/test1142
index b8dc33e47..c35190006 100644
--- a/tests/data/test1142
+++ b/tests/data/test1142
@@ -36,10 +36,10 @@ Location: http:////foo.example.com/want/%TESTNUMBER0001
<server>
http
</server>
- <name>
+<name>
HTTP redirect to http://// (four slashes!)
- </name>
- <command>
+</name>
+<command>
%HOSTIP:%HTTPPORT/want/%TESTNUMBER -L -x http://%HOSTIP:%HTTPPORT
</command>
<features>
diff --git a/tests/data/test1143 b/tests/data/test1143
index a3b97402e..e9053b179 100644
--- a/tests/data/test1143
+++ b/tests/data/test1143
@@ -22,10 +22,10 @@ hej
<server>
http
</server>
- <name>
+<name>
HTTP URL with http:/ (one slash!)
- </name>
- <command>
+</name>
+<command>
http:/%HOSTIP:%HTTPPORT/want/%TESTNUMBER
</command>
<setenv>
diff --git a/tests/data/test1144 b/tests/data/test1144
index 7e2242be8..1881a5190 100644
--- a/tests/data/test1144
+++ b/tests/data/test1144
@@ -47,10 +47,10 @@ verify
<server>
http
</server>
- <name>
+<name>
HTTP HEAD, receive no headers only body
- </name>
- <command>
+</name>
+<command>
-I http://%HOSTIP:%HTTPPORT/%TESTNUMBER --http0.9
</command>
</client>
diff --git a/tests/data/test1145 b/tests/data/test1145
index ce855524f..570197ee9 100644
--- a/tests/data/test1145
+++ b/tests/data/test1145
@@ -19,9 +19,9 @@ file:// bad host
# This command should not succeed since we only accept
# file:/// file://localhost/ file://127.0.0.1/
<command>
-file://bad-host%PWD/log/test%TESTNUMBER.txt
+file://bad-host%PWD/%LOGDIR/test%TESTNUMBER.txt
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
foo
bar
bar
diff --git a/tests/data/test1146 b/tests/data/test1146
index 0278ab895..55245bc52 100644
--- a/tests/data/test1146
+++ b/tests/data/test1146
@@ -25,9 +25,9 @@ file
--proto-default file
</name>
<command option="no-include">
---proto-default file %PWD/log/test%TESTNUMBER.txt
+--proto-default file %PWD/%LOGDIR/test%TESTNUMBER.txt
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
foo
bar
bar
diff --git a/tests/data/test1147 b/tests/data/test1147
index 78cf49ad4..a85aeddb9 100644
--- a/tests/data/test1147
+++ b/tests/data/test1147
@@ -32,10 +32,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
Get -H headers from a file
- </name>
-<file name="log/heads%TESTNUMBER.txt">
+</name>
+<file name="%LOGDIR/heads%TESTNUMBER.txt">
One: 1
Two: 2
no-colon
@@ -45,8 +45,8 @@ no-colon
%endif
User-Agent:
</file>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -H @log/heads%TESTNUMBER.txt
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -H @%LOGDIR/heads%TESTNUMBER.txt
</command>
</client>
diff --git a/tests/data/test1148 b/tests/data/test1148
index 658cfcab8..f5333534a 100644
--- a/tests/data/test1148
+++ b/tests/data/test1148
@@ -31,11 +31,11 @@ zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
<server>
http
</server>
- <name>
+<name>
progress-bar
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -# --stderr log/stderrlog%TESTNUMBER
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -# --stderr %LOGDIR/stderrlog%TESTNUMBER
</command>
<setenv>
LC_ALL=
@@ -56,7 +56,7 @@ Accept: */*
# Check that the progress finished at 100% and has the right bar width.
# Note the dot in 100.0% is regex to match any character since different
# locales use different separators.
-<file name="log/stderrlog%TESTNUMBER" mode="text">
+<file name="%LOGDIR/stderrlog%TESTNUMBER" mode="text">
correct
</file>
<stripfile>
diff --git a/tests/data/test1149 b/tests/data/test1149
index ac4d1c10f..7686ef10b 100644
--- a/tests/data/test1149
+++ b/tests/data/test1149
@@ -33,10 +33,10 @@ dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
<server>
ftp
</server>
- <name>
+<name>
FTP dir list multicwd then again nocwd
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/list/this/path/%TESTNUMBER/ --ftp-method multicwd --next ftp://%HOSTIP:%FTPPORT/list/this/path/%TESTNUMBER/ --ftp-method nocwd
</command>
</client>
diff --git a/tests/data/test115 b/tests/data/test115
index 869027884..22f75c0b6 100644
--- a/tests/data/test115
+++ b/tests/data/test115
@@ -19,10 +19,10 @@ REPLY EPSV 314 bluah you f00l!
<server>
ftp
</server>
- <name>
+<name>
FTP download, failed PASV
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1150 b/tests/data/test1150
index 6a07b73df..cafc00cd0 100644
--- a/tests/data/test1150
+++ b/tests/data/test1150
@@ -26,10 +26,10 @@ daniel
<server>
http
</server>
- <name>
+<name>
HTTP proxy with URLs using different ports
- </name>
- <command>
+</name>
+<command>
--proxy http://%HOSTIP:%HTTPPORT http://test.remote.example.com.%TESTNUMBER:150/path http://test.remote.example.com.%TESTNUMBER:1234/path/
</command>
<features>
diff --git a/tests/data/test1151 b/tests/data/test1151
index c31382c9e..2da611ebf 100644
--- a/tests/data/test1151
+++ b/tests/data/test1151
@@ -35,12 +35,15 @@ Set-Cookie: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
<server>
http
</server>
- <name>
+<name>
HTTP with too long cookies
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -c log/cookies%TESTNUMBER.txt
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -c %LOGDIR/cookies%TESTNUMBER.txt
</command>
+<features>
+cookies
+</features>
</client>
# Verify data after the test has been "shot"
@@ -52,7 +55,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/cookies%TESTNUMBER.txt" mode="text">
+<file name="%LOGDIR/cookies%TESTNUMBER.txt" mode="text">
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
diff --git a/tests/data/test1152 b/tests/data/test1152
index 870215d9f..490fde3b7 100644
--- a/tests/data/test1152
+++ b/tests/data/test1152
@@ -36,10 +36,10 @@ dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
<server>
ftp
</server>
- <name>
+<name>
FTP with uneven quote in PWD response
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/test-%TESTNUMBER/
</command>
</client>
diff --git a/tests/data/test1153 b/tests/data/test1153
index b48143132..36c76693a 100644
--- a/tests/data/test1153
+++ b/tests/data/test1153
@@ -36,10 +36,10 @@ dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
<server>
ftp
</server>
- <name>
+<name>
FTP with quoted double quotes
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/test-%TESTNUMBER/
</command>
</client>
diff --git a/tests/data/test1154 b/tests/data/test1154
index ab1addec6..b7349e17d 100644
--- a/tests/data/test1154
+++ b/tests/data/test1154
@@ -29,10 +29,10 @@ Long: %repeat[102400 x A]%
<server>
http
</server>
- <name>
+<name>
HTTP GET with 100K (too long) response header
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1155 b/tests/data/test1155
index 65d76b6f5..579328d92 100644
--- a/tests/data/test1155
+++ b/tests/data/test1155
@@ -24,12 +24,15 @@ Set-Cookie: domain=value;path=/
<server>
http
</server>
- <name>
+<name>
HTTP cookie with parameter word as name
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -c log/cookies%TESTNUMBER.txt
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -c %LOGDIR/cookies%TESTNUMBER.txt
</command>
+<features>
+cookies
+</features>
</client>
# Verify data after the test has been "shot"
@@ -41,7 +44,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/cookies%TESTNUMBER.txt" mode="text">
+<file name="%LOGDIR/cookies%TESTNUMBER.txt" mode="text">
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
diff --git a/tests/data/test1156 b/tests/data/test1156
index d638274b5..94fa469dc 100644
--- a/tests/data/test1156
+++ b/tests/data/test1156
@@ -54,10 +54,10 @@ http
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
HTTP resume/range fail range-error content-range combinations
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1157 b/tests/data/test1157
index 8c0bcc346..4e246e703 100644
--- a/tests/data/test1157
+++ b/tests/data/test1157
@@ -32,13 +32,13 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
Get -H headers from empty file
- </name>
-<file name="log/heads%TESTNUMBER.txt">
+</name>
+<file name="%LOGDIR/heads%TESTNUMBER.txt">
</file>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -H @log/heads%TESTNUMBER.txt
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -H @%LOGDIR/heads%TESTNUMBER.txt
</command>
</client>
diff --git a/tests/data/test1158 b/tests/data/test1158
index 3352ba058..1a29bd84b 100644
--- a/tests/data/test1158
+++ b/tests/data/test1158
@@ -29,13 +29,13 @@ http
HTTP RFC1867-type formposting with filename containing '"'
</name>
<command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -F "file=@\"log/test%TESTNUMBER\\\".txt\";type=mo/foo;filename=\"test%TESTNUMBER\\\".txt\"" -F 'file2=@"log/test%TESTNUMBER\".txt"' -F 'file3=@"log/test%TESTNUMBER\".txt";type=m/f,"log/test%TESTNUMBER\".txt"'
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -F "file=@\"%LOGDIR/test%TESTNUMBER\\\".txt\";type=mo/foo;filename=\"test%TESTNUMBER\\\".txt\"" -F 'file2=@"%LOGDIR/test%TESTNUMBER\".txt"' -F 'file3=@"%LOGDIR/test%TESTNUMBER\".txt";type=m/f,"%LOGDIR/test%TESTNUMBER\".txt"'
</command>
<precheck>
perl -e "print 'Test requires a system supporting double quotes in file names' if ($^O eq 'msys');"
</precheck>
# We create this file before the command is invoked!
-<file name=log/test%TESTNUMBER".txt>
+<file name=%LOGDIR/test%TESTNUMBER".txt>
foo bar
This is a bar foo
bar
@@ -53,7 +53,7 @@ POST /we/want/%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 958
+Content-Length: 1006
Content-Type: multipart/form-data; boundary=----------------------------24e78000bd32
------------------------------24e78000bd32
diff --git a/tests/data/test1159 b/tests/data/test1159
index b09aff0e3..6ef2e4ad6 100644
--- a/tests/data/test1159
+++ b/tests/data/test1159
@@ -26,9 +26,9 @@ This server reply is for testing a simple Location: following
<server>
http
</server>
- <name>
+<name>
HTTP Location: and 'redirect_url' with non-supported scheme
- </name>
+</name>
<command>
http://%HOSTIP:%HTTPPORT/we/want/our/%TESTNUMBER -w '%{redirect_url}\n'
</command>
diff --git a/tests/data/test116 b/tests/data/test116
index f05c1bd2f..37aed2ceb 100644
--- a/tests/data/test116
+++ b/tests/data/test116
@@ -25,10 +25,10 @@ ftp
<features>
ipv6
</features>
- <name>
+<name>
FTP download, failed PORT
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -P 1.2.3.4
</command>
</client>
diff --git a/tests/data/test1160 b/tests/data/test1160
index e24ce93e1..0e946b34b 100644
--- a/tests/data/test1160
+++ b/tests/data/test1160
@@ -25,12 +25,15 @@ Set-Cookie: ____________ÿ= ;
<server>
http
</server>
- <name>
+<name>
HTTP with long funny format cookie
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -c log/cookies%TESTNUMBER.txt
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -c %LOGDIR/cookies%TESTNUMBER.txt
</command>
+<features>
+cookies
+</features>
</client>
# Verify data after the test has been "shot"
@@ -42,7 +45,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/cookies%TESTNUMBER.txt" mode="text">
+<file name="%LOGDIR/cookies%TESTNUMBER.txt" mode="text">
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
diff --git a/tests/data/test1161 b/tests/data/test1161
index 89c1e657c..dd8f9c9eb 100644
--- a/tests/data/test1161
+++ b/tests/data/test1161
@@ -24,12 +24,15 @@ Set-Cookie: ckyPersistent=permanent;path=;path=/
<server>
http
</server>
- <name>
+<name>
HTTP cookie with path set twice
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -c log/cookies%TESTNUMBER.txt
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -c %LOGDIR/cookies%TESTNUMBER.txt
</command>
+<features>
+cookies
+</features>
</client>
# Verify data after the test has been "shot"
@@ -41,7 +44,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/cookies%TESTNUMBER.txt" mode="text">
+<file name="%LOGDIR/cookies%TESTNUMBER.txt" mode="text">
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
diff --git a/tests/data/test1164 b/tests/data/test1164
index aedd6c97d..d16b98bbf 100644
--- a/tests/data/test1164
+++ b/tests/data/test1164
@@ -29,9 +29,9 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
<server>
http
</server>
- <name>
+<name>
HTTP/0.9 GET and all zeroes
- </name>
+</name>
<command option="force-output">
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -w '%{size_download}\n' --http0.9
</command>
diff --git a/tests/data/test1165 b/tests/data/test1165
index 24c1c3eb1..de4283af2 100644
--- a/tests/data/test1165
+++ b/tests/data/test1165
@@ -13,9 +13,9 @@ CURL_DISABLE
none
</server>
- <name>
+<name>
Verify configure.ac and source code CURL_DISABLE_-sync
- </name>
+</name>
<command type="perl">
%SRCDIR/disable-scan.pl %SRCDIR/..
diff --git a/tests/data/test1166 b/tests/data/test1166
index 609939f29..92e8ff404 100644
--- a/tests/data/test1166
+++ b/tests/data/test1166
@@ -26,10 +26,10 @@ This server reply is for testing a Location: following with cookies
<server>
http
</server>
- <name>
+<name>
HTTP response with cookies but not receiving!
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1167 b/tests/data/test1167
index 9eebe1c4e..3c2fb1a5f 100644
--- a/tests/data/test1167
+++ b/tests/data/test1167
@@ -12,9 +12,9 @@ source analysis
none
</server>
- <name>
+<name>
Verify curl prefix of public symbols in header files
- </name>
+</name>
<command type="perl">
%SRCDIR/badsymbols.pl %SRCDIR/..
diff --git a/tests/data/test1168 b/tests/data/test1168
index 5d0ed3a67..13dd56617 100644
--- a/tests/data/test1168
+++ b/tests/data/test1168
@@ -49,10 +49,10 @@ If this is received, the location following worked
<server>
http
</server>
- <name>
+<name>
HTTP redirect with credentials using # in user and password
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -L -u "catmai#d:#DZaRJYrixKE*gFY"
</command>
</client>
diff --git a/tests/data/test1169 b/tests/data/test1169
index e7f7df466..bba5d131e 100644
--- a/tests/data/test1169
+++ b/tests/data/test1169
@@ -16,14 +16,13 @@ Verify that runtests.pl accepts an -L option
</name>
<command type="perl">
-%SRCDIR/runtests.pl -L %SRCDIR/log/test1196-library.pl
+%SRCDIR/runtests.pl -L %PWD/%LOGDIR/test%TESTNUMBER-library.pl
</command>
# Create a simple perl snippet that lets runtests.pl
# exit with a code we can check.
-<precheck>
-echo 'exit 123' > %SRCDIR/log/test1196-library.pl
-</precheck>
-
+<file name="%LOGDIR/test%TESTNUMBER-library.pl">
+exit 123
+</file>
</client>
<verify>
diff --git a/tests/data/test117 b/tests/data/test117
index b9c4b2eba..3bd5cb57f 100644
--- a/tests/data/test117
+++ b/tests/data/test117
@@ -18,10 +18,10 @@ REPLY TYPE 314 bluah you f00l!
<server>
ftp
</server>
- <name>
+<name>
FTP download, failed TYPE
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1170 b/tests/data/test1170
index fd718f32c..16dc6908d 100644
--- a/tests/data/test1170
+++ b/tests/data/test1170
@@ -43,10 +43,10 @@ libz
<server>
http
</server>
- <name>
+<name>
HTTP GET transfer-encoding with removed Connection:
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --tr-encoding -H "Connection:"
</command>
</client>
diff --git a/tests/data/test1171 b/tests/data/test1171
index e66f87cf9..d866c75a2 100644
--- a/tests/data/test1171
+++ b/tests/data/test1171
@@ -43,10 +43,10 @@ libz
<server>
http
</server>
- <name>
+<name>
HTTP GET transfer-encoding with blanked Connection:
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --tr-encoding -H "Connection;"
</command>
</client>
diff --git a/tests/data/test1172 b/tests/data/test1172
index 53179623d..0de4713d3 100644
--- a/tests/data/test1172
+++ b/tests/data/test1172
@@ -22,10 +22,10 @@ HTTP/0.9
<server>
http
</server>
- <name>
+<name>
HTTP/0.9 GET response denied
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --no-http0.9
</command>
</client>
diff --git a/tests/data/test1173 b/tests/data/test1173
index f52afa6bb..b5dafbb3b 100644
--- a/tests/data/test1173
+++ b/tests/data/test1173
@@ -14,9 +14,9 @@ documentation
none
</server>
- <name>
+<name>
Man page syntax checks
- </name>
+</name>
<command type="perl">
%SRCDIR/manpage-syntax.pl %SRCDIR/../docs/libcurl/symbols-in-versions %SRCDIR/../docs/*.1 %SRCDIR/../docs/libcurl/*.3 %SRCDIR/../docs/libcurl/opts/*.3
diff --git a/tests/data/test1174 b/tests/data/test1174
index 5f45bb862..48938a7be 100644
--- a/tests/data/test1174
+++ b/tests/data/test1174
@@ -22,10 +22,10 @@ HTTP/0.9
<server>
http
</server>
- <name>
+<name>
HTTP/0.9 GET response denied by default
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1175 b/tests/data/test1175
index 61f068915..5190dbe2a 100644
--- a/tests/data/test1175
+++ b/tests/data/test1175
@@ -13,9 +13,9 @@ symbols-in-versions
none
</server>
- <name>
+<name>
Verify that symbols-in-versions and libcurl-errors.3 are in sync
- </name>
+</name>
<command type="perl">
%SRCDIR/error-codes.pl %SRCDIR
diff --git a/tests/data/test1176 b/tests/data/test1176
index d2471e168..86d23a2cc 100644
--- a/tests/data/test1176
+++ b/tests/data/test1176
@@ -30,11 +30,11 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
--output using #0
- </name>
+</name>
<command option="no-output">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o 'log/base-#0'
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o '%LOGDIR/base-#0'
</command>
</client>
@@ -48,7 +48,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/base-#0">
+<file name="%LOGDIR/base-#0">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
diff --git a/tests/data/test1177 b/tests/data/test1177
index 85b520ce0..66fe49767 100644
--- a/tests/data/test1177
+++ b/tests/data/test1177
@@ -13,12 +13,12 @@ CURL_VERSION
none
</server>
- <name>
-Verify that CURL_VERSION_* in headers and docs are in sync
- </name>
+<name>
+Verify that feature names and CURL_VERSION_* in lib and docs are in sync
+</name>
<command type="perl">
-%SRCDIR/version-scan.pl %SRCDIR/../docs/libcurl/curl_version_info.3 %SRCDIR/../include/curl/curl.h
+%SRCDIR/version-scan.pl %SRCDIR/../docs/libcurl/curl_version_info.3 %SRCDIR/../include/curl/curl.h %SRCDIR/../lib/version.c
</command>
</client>
diff --git a/tests/data/test1178 b/tests/data/test1178
index f8fa1ca1c..db6a745e6 100644
--- a/tests/data/test1178
+++ b/tests/data/test1178
@@ -25,11 +25,11 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP proxy auth with credentials longer than 256 bytes
- </name>
+</name>
# 400 x 'A' : 600 x 'B' ...
- <command>
+<command>
http://%HOSTIP:%HTTPPORT/we/want/that/page/%TESTNUMBER -x http://%HOSTIP:%HTTPPORT -U AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA:BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
</command>
<features>
diff --git a/tests/data/test118 b/tests/data/test118
index 4d47282af..9b5b8708e 100644
--- a/tests/data/test118
+++ b/tests/data/test118
@@ -21,10 +21,10 @@ REPLY SIZE 500 command not understood
<server>
ftp
</server>
- <name>
+<name>
FTP download, failed RETR
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1180 b/tests/data/test1180
index 1eb9ed69b..d04542ef9 100644
--- a/tests/data/test1180
+++ b/tests/data/test1180
@@ -27,10 +27,10 @@ http
<features>
proxy
</features>
- <name>
+<name>
HTTP GET request with proxy and -H "Proxy-Connection: keep-alive"
- </name>
- <command>
+</name>
+<command>
--proxy http://%HOSTIP:%HTTPPORT -H "Proxy-Connection: Keep-Alive" http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1181 b/tests/data/test1181
index 367265c80..8f744669e 100644
--- a/tests/data/test1181
+++ b/tests/data/test1181
@@ -27,10 +27,10 @@ http
<features>
proxy
</features>
- <name>
+<name>
HTTP GET request with proxy and --proxy-header "Proxy-Connection: Keep-Alive"
- </name>
- <command>
+</name>
+<command>
--proxy http://%HOSTIP:%HTTPPORT --proxy-header "Proxy-Connection: Keep-Alive" http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1182 b/tests/data/test1182
index 105d3d1f4..d1b8fb07b 100644
--- a/tests/data/test1182
+++ b/tests/data/test1182
@@ -16,13 +16,13 @@ Verify that runtests.pl accepts an exclude file with the -E option
</name>
<command type="perl">
-%SRCDIR/runtests.pl -o TESTDIR=%SRCDIR/log/data -o LOGDIR=%SRCDIR/log/log -E %SRCDIR/log/test%TESTNUMBER-exclude-file 1
+%SRCDIR/runtests.pl -o TESTDIR=%LOGDIR/data -o LOGDIR=%LOGDIR/log -E %LOGDIR/test%TESTNUMBER-exclude-file 1
</command>
<precheck>
-mkdir %SRCDIR/log/data ; mkdir %SRCDIR/log/log; cp %SRCDIR/data/test1 %SRCDIR/log/data; echo 'test:1:Test should not run for unit test %TESTNUMBER' > %SRCDIR/log/test%TESTNUMBER-exclude-file
+mkdir %LOGDIR/data ; mkdir %LOGDIR/log; cp %SRCDIR/data/test1 %LOGDIR/data; echo 'test:1:Test should not run for unit test %TESTNUMBER' > %LOGDIR/test%TESTNUMBER-exclude-file
</precheck>
<postcheck>
-grep -q "Test should not run for unit test %TESTNUMBER" %SRCDIR/log/stdout%TESTNUMBER
+grep -q "Test should not run for unit test %TESTNUMBER" %LOGDIR/stdout%TESTNUMBER
</postcheck>
</client>
diff --git a/tests/data/test1183 b/tests/data/test1183
index 2955bdcc4..5f795ed66 100644
--- a/tests/data/test1183
+++ b/tests/data/test1183
@@ -27,10 +27,10 @@ http
<features>
proxy
</features>
- <name>
+<name>
%TESTNUMBER used instead of actual test number
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1184 b/tests/data/test1184
index feac348ef..268da350f 100644
--- a/tests/data/test1184
+++ b/tests/data/test1184
@@ -45,10 +45,10 @@ second
http
http-proxy
</server>
- <name>
+<name>
HTTP 1.1 CONNECT with redirect and set -H user-agent
- </name>
- <command>
+</name>
+<command>
-x %HOSTIP:%PROXYPORT -p http://%HOSTIP.%TESTNUMBER:%HTTPPORT/we/want/that/page/%TESTNUMBER -L -H "User-Agent: %TESTNUMBER-agent"
</command>
<features>
diff --git a/tests/data/test1185 b/tests/data/test1185
index eb672efa4..94c3be10c 100644
--- a/tests/data/test1185
+++ b/tests/data/test1185
@@ -16,9 +16,9 @@ checksrc
</name>
<command type="perl">
-%SRCDIR/../scripts/checksrc.pl log/code%TESTNUMBER.c
+%SRCDIR/../scripts/checksrc.pl %LOGDIR/code%TESTNUMBER.c
</command>
-<file name="log/code%TESTNUMBER.c">
+<file name="%LOGDIR/code%TESTNUMBER.c">
/* test source code
* Violate each rule at least once.
**/
@@ -86,93 +86,93 @@ void startfunc(int a, int b) {
# Verify data after the test has been "shot"
<verify>
<stdout>
-./log/code1185.c:4:82: warning: Longer than 79 columns (LONGLINE)
+./%LOGDIR/code1185.c:4:82: warning: Longer than 79 columns (LONGLINE)
int hello; /*------------------------------------------------------------------*/
-./log/code1185.c:5:4: error: Contains TAB character (TABS)
+./%LOGDIR/code1185.c:5:4: error: Contains TAB character (TABS)
int tab;
^
-./log/code1185.c:7:13: warning: func with space (SPACEBEFOREPAREN)
+./%LOGDIR/code1185.c:7:13: warning: func with space (SPACEBEFOREPAREN)
int a = func ();
^
-./log/code1185.c:8:14: warning: space after open parenthesis (SPACEAFTERPAREN)
+./%LOGDIR/code1185.c:8:14: warning: space after open parenthesis (SPACEAFTERPAREN)
int b = func( b);
^
-./log/code1185.c:9:16: warning: space before close parenthesis (SPACEBEFORECLOSE)
+./%LOGDIR/code1185.c:9:16: warning: space before close parenthesis (SPACEBEFORECLOSE)
int b = func(b );
^
-./log/code1185.c:10:11: warning: space before comma (SPACEBEFORECOMMA)
+./%LOGDIR/code1185.c:10:11: warning: space before comma (SPACEBEFORECOMMA)
func(a, b , c);
^
-./log/code1185.c:14:9: warning: return without space before paren (RETURNNOSPACE)
+./%LOGDIR/code1185.c:14:9: warning: return without space before paren (RETURNNOSPACE)
return(2);
^
-./log/code1185.c:16:11: warning: comma without following space (COMMANOSPACE)
+./%LOGDIR/code1185.c:16:11: warning: comma without following space (COMMANOSPACE)
func(a, b,c);
^
-./log/code1185.c:18:12: warning: wrongly placed open brace (BRACEPOS)
+./%LOGDIR/code1185.c:18:12: warning: wrongly placed open brace (BRACEPOS)
if(a == 2) {
^
-./log/code1185.c:20:1: warning: else after closing brace on same line (BRACEELSE)
+./%LOGDIR/code1185.c:20:1: warning: else after closing brace on same line (BRACEELSE)
} else {
^
-./log/code1185.c:24:11: warning: missing space after close paren (PARENBRACE)
+./%LOGDIR/code1185.c:24:11: warning: missing space after close paren (PARENBRACE)
if(a == 2){
^
-./log/code1185.c:28:7: warning: no space before semicolon (SPACESEMICOLON)
+./%LOGDIR/code1185.c:28:7: warning: no space before semicolon (SPACESEMICOLON)
func() ;
^
-./log/code1185.c:30:5: warning: use of sprintf is banned (BANNEDFUNC)
+./%LOGDIR/code1185.c:30:5: warning: use of sprintf is banned (BANNEDFUNC)
a = sprintf(buffer, "%s", moo);
^
-./log/code1185.c:32:11: warning: use of non-binary fopen without FOPEN_* macro: r (FOPENMODE)
+./%LOGDIR/code1185.c:32:11: warning: use of non-binary fopen without FOPEN_* macro: r (FOPENMODE)
FILE *f = fopen("filename", "r");
^
-./log/code1185.c:34:30: warning: wrongly placed open brace (BRACEPOS)
+./%LOGDIR/code1185.c:34:30: warning: wrongly placed open brace (BRACEPOS)
void startfunc(int a, int b) {
^
-./log/code1185.c:39:6: warning: not indented 2 steps (uses 4) (INDENTATION)
+./%LOGDIR/code1185.c:39:6: warning: not indented 2 steps (uses 4) (INDENTATION)
func(1);
^
-./log/code1185.c:42:8: warning: space after declarative asterisk (ASTERISKSPACE)
+./%LOGDIR/code1185.c:42:8: warning: space after declarative asterisk (ASTERISKSPACE)
char * name = "hello";
^
-./log/code1185.c:43:7: warning: space after declarative asterisk (ASTERISKSPACE)
+./%LOGDIR/code1185.c:43:7: warning: space after declarative asterisk (ASTERISKSPACE)
char* name = "hello";
^
-./log/code1185.c:43:6: warning: no space before asterisk (ASTERISKNOSPACE)
+./%LOGDIR/code1185.c:43:6: warning: no space before asterisk (ASTERISKNOSPACE)
char* name = "hello";
^
-./log/code1185.c:45:10: warning: no space after equals sign (EQUALSNOSPACE)
+./%LOGDIR/code1185.c:45:10: warning: no space after equals sign (EQUALSNOSPACE)
int foo=bar;
^
-./log/code1185.c:46:9: warning: no space before equals sign (NOSPACEEQUALS)
+./%LOGDIR/code1185.c:46:9: warning: no space before equals sign (NOSPACEEQUALS)
int foo= bar;
^
-./log/code1185.c:48:16: warning: no space after semicolon (SEMINOSPACE)
+./%LOGDIR/code1185.c:48:16: warning: no space after semicolon (SEMINOSPACE)
int foo = bar;foo++;
^
-./log/code1185.c:49:10: warning: multiple spaces (MULTISPACE)
+./%LOGDIR/code1185.c:49:10: warning: multiple spaces (MULTISPACE)
for(;;) {
^
-./log/code1185.c:50:2: warning: not indented 2 steps (uses 0) (INDENTATION)
+./%LOGDIR/code1185.c:50:2: warning: not indented 2 steps (uses 0) (INDENTATION)
}
^
-./log/code1185.c:52:16: warning: sizeof without parenthesis (SIZEOFNOPAREN)
+./%LOGDIR/code1185.c:52:16: warning: sizeof without parenthesis (SIZEOFNOPAREN)
int a = sizeof int;
^
-./log/code1185.c:53:10: warning: use of snprintf is banned (SNPRINTF)
+./%LOGDIR/code1185.c:53:10: warning: use of snprintf is banned (SNPRINTF)
int a = snprintf(buffer, sizeof(buffer), "%d", 99);
^
-./log/code1185.c:55:7: warning: conditional block on the same line (ONELINECONDITION)
+./%LOGDIR/code1185.c:55:7: warning: conditional block on the same line (ONELINECONDITION)
if(a) b++;
^
-./log/code1185.c:57:2: warning: // comment (CPPCOMMENTS)
+./%LOGDIR/code1185.c:57:2: warning: // comment (CPPCOMMENTS)
// CPP comment?
^
-./log/code1185.c:1:1: error: Missing copyright statement (COPYRIGHT)
+./%LOGDIR/code1185.c:1:1: error: Missing copyright statement (COPYRIGHT)
^
-./log/code1185.c:1:1: error: Missing closing comment (OPENCOMMENT)
+./%LOGDIR/code1185.c:1:1: error: Missing closing comment (OPENCOMMENT)
^
checksrc: 0 errors and 30 warnings
diff --git a/tests/data/test1186 b/tests/data/test1186
index 8b3834cda..35be0e10d 100644
--- a/tests/data/test1186
+++ b/tests/data/test1186
@@ -29,13 +29,13 @@ http
Multipart formposting with backslash-escaping filename containing '"'
</name>
<command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER --form-escape -F "file=@\"log/test%TESTNUMBER\\\".txt\";type=mo/foo;filename=\"test%TESTNUMBER\\\".txt\"" -F 'file2=@"log/test%TESTNUMBER\".txt"' -F 'file3=@"log/test%TESTNUMBER\".txt";type=m/f,"log/test%TESTNUMBER\".txt"'
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER --form-escape -F "file=@\"%LOGDIR/test%TESTNUMBER\\\".txt\";type=mo/foo;filename=\"test%TESTNUMBER\\\".txt\"" -F 'file2=@"%LOGDIR/test%TESTNUMBER\".txt"' -F 'file3=@"%LOGDIR/test%TESTNUMBER\".txt";type=m/f,"%LOGDIR/test%TESTNUMBER\".txt"'
</command>
<precheck>
perl -e "print 'Test requires a system supporting double quotes in file names' if ($^O eq 'msys');"
</precheck>
# We create this file before the command is invoked!
-<file name=log/test%TESTNUMBER".txt>
+<file name=%LOGDIR/test%TESTNUMBER".txt>
foo bar
This is a bar foo
bar
@@ -53,7 +53,7 @@ POST /we/want/%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 954
+Content-Length: 1002
Content-Type: multipart/form-data; boundary=----------------------------24e78000bd32
------------------------------24e78000bd32
diff --git a/tests/data/test1187 b/tests/data/test1187
index a8be5c1e4..aaa8d107b 100644
--- a/tests/data/test1187
+++ b/tests/data/test1187
@@ -20,16 +20,16 @@ Mime
<server>
smtp
</server>
- <name>
+<name>
SMTP multipart with file name escaping
- </name>
+</name>
<stdin>
From: different
To: another
body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -F "=This is the mail text" -F '=File content;filename="strange\file\"name"'
</command>
</client>
@@ -38,8 +38,8 @@ smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-fr
# Verify data after the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/------------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/
+s/^--------------------------[A-Za-z0-9]*/------------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=----------------------------/
</strippart>
<protocol>
EHLO %TESTNUMBER
diff --git a/tests/data/test1188 b/tests/data/test1188
index 0cbaaeb04..702856245 100644
--- a/tests/data/test1188
+++ b/tests/data/test1188
@@ -22,9 +22,9 @@ Connection: close
<server>
http
</server>
- <name>
+<name>
--write-out with %{onerror} and %{urlnum} to stderr
- </name>
+</name>
<command>
-f -s -w '%{onerror}%{stderr}%{urlnum} says %{exitcode} %{errormsg}\n' http://%HOSTIP:%HTTPPORT/we/want/our/%TESTNUMBER http://%HOSTIP:%HTTPPORT/we/want/our/%TESTNUMBER
</command>
diff --git a/tests/data/test1189 b/tests/data/test1189
index c7f21d6f8..0c19e70f7 100644
--- a/tests/data/test1189
+++ b/tests/data/test1189
@@ -25,14 +25,14 @@ Mime
<server>
http
</server>
- <name>
+<name>
Multipart formposting with backslash-escaping of name= and filename=
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER --form-escape -F name=daniel -F tool=curl --form-string "str1=@literal" --form-string "str2=<verbatim;type=xxx/yyy" -F "file=@log/test%TESTNUMBER.txt;type=moo/foobar;filename=fakerfile" -F file2=@log/test%TESTNUMBER.txt -F "file3=@\"log/test%TESTNUMBER.txt\";type=mo/foo;filename=\"f\\\\\\\\ak\\\\\\er,\\\\an\\d;.t\\\"xt\"" -F 'file4=@"log/test%TESTNUMBER.txt"; filename="A\\AA\"\"\\\"ZZZ"'
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER --form-escape -F name=daniel -F tool=curl --form-string "str1=@literal" --form-string "str2=<verbatim;type=xxx/yyy" -F "file=@%LOGDIR/test%TESTNUMBER.txt;type=moo/foobar;filename=fakerfile" -F file2=@%LOGDIR/test%TESTNUMBER.txt -F "file3=@\"%LOGDIR/test%TESTNUMBER.txt\";type=mo/foo;filename=\"f\\\\\\\\ak\\\\\\er,\\\\an\\d;.t\\\"xt\"" -F 'file4=@"%LOGDIR/test%TESTNUMBER.txt"; filename="A\\AA\"\"\\\"ZZZ"'
</command>
# We create this file before the command is invoked!
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
foo bar
This is a bar foo
bar
@@ -50,7 +50,7 @@ POST /we/want/%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 1186
+Content-Length: 1240
Content-Type: multipart/form-data; boundary=----------------------------24e78000bd32
------------------------------24e78000bd32
diff --git a/tests/data/test119 b/tests/data/test119
index 6999e0da7..4426def0b 100644
--- a/tests/data/test119
+++ b/tests/data/test119
@@ -20,10 +20,10 @@ REPLY SIZE 500 command not understood
<server>
ftp
</server>
- <name>
+<name>
FTP download, failed RETR with PORT
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -P -
</command>
</client>
diff --git a/tests/data/test1193 b/tests/data/test1193
index bed10b241..531efa259 100644
--- a/tests/data/test1193
+++ b/tests/data/test1193
@@ -26,9 +26,9 @@ mqtt
MQTT PUBLISH 2k payload
</name>
<command option="binary-trace">
-mqtt://%HOSTIP:%MQTTPORT/%TESTNUMBER -d @log/payload%TESTNUMBER
+mqtt://%HOSTIP:%MQTTPORT/%TESTNUMBER -d @%LOGDIR/payload%TESTNUMBER
</command>
-<file name="log/payload%TESTNUMBER">
+<file name="%LOGDIR/payload%TESTNUMBER">
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
diff --git a/tests/data/test1197 b/tests/data/test1197
index 8b882c714..22bf8dbbe 100644
--- a/tests/data/test1197
+++ b/tests/data/test1197
@@ -39,10 +39,10 @@ bigger monster
<server>
http
</server>
- <name>
+<name>
HTTP POST redirected to GET and --write-out method
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -w "%{method}\n" -L -d "twinkle twinkle little star"
</command>
</client>
diff --git a/tests/data/test12 b/tests/data/test12
index a7c30d220..48380a1e9 100644
--- a/tests/data/test12
+++ b/tests/data/test12
@@ -32,10 +32,10 @@ in the request
<server>
http
</server>
- <name>
+<name>
HTTP range support
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -r 100-200
</command>
</client>
diff --git a/tests/data/test120 b/tests/data/test120
index 45e11a63e..64628b659 100644
--- a/tests/data/test120
+++ b/tests/data/test120
@@ -27,10 +27,10 @@ REPLY EPSV 314 bluah you f00l!
<server>
ftp
</server>
- <name>
+<name>
ftp download with post-quote delete operation
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -Q "-DELE file"
</command>
</client>
diff --git a/tests/data/test1200 b/tests/data/test1200
index 886fa166f..342077b8a 100644
--- a/tests/data/test1200
+++ b/tests/data/test1200
@@ -21,10 +21,10 @@ iMenu results error.host 1
<server>
gopher
</server>
- <name>
+<name>
Gopher index
- </name>
- <command>
+</name>
+<command>
gopher://%HOSTIP:%GOPHERPORT/1/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1201 b/tests/data/test1201
index 9f1ba664b..296e7fa6a 100644
--- a/tests/data/test1201
+++ b/tests/data/test1201
@@ -21,10 +21,10 @@ iMenu results error.host 1
<server>
gopher
</server>
- <name>
+<name>
Gopher selector
- </name>
- <command>
+</name>
+<command>
gopher://%HOSTIP:%GOPHERPORT/1/selector/SELECTOR/%TESTNUMBER?
</command>
</client>
diff --git a/tests/data/test1202 b/tests/data/test1202
index aefb6d008..ab1d51c0f 100644
--- a/tests/data/test1202
+++ b/tests/data/test1202
@@ -22,10 +22,10 @@ iSearch results error.host 1
<server>
gopher
</server>
- <name>
+<name>
Gopher query
- </name>
- <command>
+</name>
+<command>
"gopher://%HOSTIP:%GOPHERPORT/7/the/search/engine%09query%20succeeded/%TESTNUMBER"
</command>
</client>
diff --git a/tests/data/test1203 b/tests/data/test1203
index 9f4648e27..b4c70e9cb 100644
--- a/tests/data/test1203
+++ b/tests/data/test1203
@@ -25,10 +25,10 @@ ipv6
<server>
gopher-ipv6
</server>
- <name>
+<name>
Gopher IPv6 index
- </name>
- <command>
+</name>
+<command>
-g gopher://%HOST6IP:%GOPHER6PORT/1/moo/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1204 b/tests/data/test1204
index 9e8c2b6a0..0aac591b7 100644
--- a/tests/data/test1204
+++ b/tests/data/test1204
@@ -51,10 +51,10 @@ This IS the real page!
<server>
http
</server>
- <name>
+<name>
HTTP with WWW-Authenticate and multiple auths in a single line
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u testuser:testpass --anyauth
</command>
</client>
diff --git a/tests/data/test1205 b/tests/data/test1205
index df77175d6..5a7fb7dc5 100644
--- a/tests/data/test1205
+++ b/tests/data/test1205
@@ -26,10 +26,10 @@ Funny-head: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
<server>
http
</server>
- <name>
+<name>
HTTP GET with 18K HTTP header
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1206 b/tests/data/test1206
index b19259270..228df4adb 100644
--- a/tests/data/test1206
+++ b/tests/data/test1206
@@ -22,10 +22,10 @@ NODATACONN425
<server>
ftp
</server>
- <name>
+<name>
FTP PORT and 425 on download
- </name>
- <command>
+</name>
+<command>
--max-time %FTPTIME2 ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -P -
</command>
@@ -46,6 +46,7 @@ SIZE %TESTNUMBER
RETR %TESTNUMBER
QUIT
</protocol>
+10 is CURLE_FTP_ACCEPT_FAILED
<errorcode>
10
</errorcode>
diff --git a/tests/data/test1207 b/tests/data/test1207
index f105df54c..612c42b0d 100644
--- a/tests/data/test1207
+++ b/tests/data/test1207
@@ -22,10 +22,10 @@ NODATACONN421
<server>
ftp
</server>
- <name>
+<name>
FTP PORT and 421 on download
- </name>
- <command>
+</name>
+<command>
--max-time %FTPTIME2 ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -P -
</command>
diff --git a/tests/data/test1208 b/tests/data/test1208
index 47ceb64d4..055a0a58c 100644
--- a/tests/data/test1208
+++ b/tests/data/test1208
@@ -5,7 +5,10 @@ FTP
PORT
RETR
NODATACONN150
+timeout
+FAILURE
flaky
+timing-dependent
</keywords>
</info>
# Server-side
@@ -23,10 +26,10 @@ NODATACONN150
<server>
ftp
</server>
- <name>
+<name>
FTP PORT download, no data conn and no transient negative reply
- </name>
- <command>
+</name>
+<command>
--max-time %FTPTIME2 ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -P -
</command>
@@ -51,6 +54,7 @@ TYPE I
SIZE %TESTNUMBER
RETR %TESTNUMBER
</protocol>
+# 28 is CURLE_OPERATION_TIMEDOUT
<errorcode>
28
</errorcode>
diff --git a/tests/data/test1209 b/tests/data/test1209
index 4d442d177..38e1003c9 100644
--- a/tests/data/test1209
+++ b/tests/data/test1209
@@ -5,6 +5,8 @@ FTP
PORT
RETR
NODATACONN
+timeout
+FAILURE
</keywords>
</info>
# Server-side
@@ -22,10 +24,10 @@ NODATACONN
<server>
ftp
</server>
- <name>
+<name>
FTP PORT download, no data conn and no positive preliminary reply
- </name>
- <command>
+</name>
+<command>
--max-time %FTPTIME2 ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -P -
</command>
diff --git a/tests/data/test121 b/tests/data/test121
index b8ec70136..3625d0e3e 100644
--- a/tests/data/test121
+++ b/tests/data/test121
@@ -25,10 +25,10 @@ works
<server>
ftp
</server>
- <name>
+<name>
ftp download with post- and pre-transfer delete operations
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -Q "-DELE after_transfer" -Q "DELE before_transfer"
</command>
</client>
diff --git a/tests/data/test1210 b/tests/data/test1210
index 89cfe61ea..4a07147f9 100644
--- a/tests/data/test1210
+++ b/tests/data/test1210
@@ -36,7 +36,7 @@ http
HTTP GET with -J without Content-Disposition
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
http://%HOSTIP:%HTTPPORT/%TESTNUMBER?junk -J -O
@@ -53,7 +53,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/%TESTNUMBER">
+<file name="%LOGDIR/%TESTNUMBER">
12345
</file>
diff --git a/tests/data/test1211 b/tests/data/test1211
index 6d31357df..6ca7eaea9 100644
--- a/tests/data/test1211
+++ b/tests/data/test1211
@@ -5,6 +5,8 @@ FTP
PORT
RETR
NODATACONN425
+timeout
+FAILURE
</keywords>
</info>
# Server-side
@@ -22,10 +24,10 @@ NODATACONN425
<server>
ftp
</server>
- <name>
+<name>
FTP PORT and 425 on download
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -P -
</command>
diff --git a/tests/data/test1212 b/tests/data/test1212
index d445f9376..56b189c9d 100644
--- a/tests/data/test1212
+++ b/tests/data/test1212
@@ -29,9 +29,9 @@ proxy
<server>
http
</server>
- <name>
+<name>
noproxy setting together with socks proxy
- </name>
+</name>
<command>
http://user:secret@%HOSTIP:%HTTPPORT/ulion/%TESTNUMBER --socks5 non-existing-host.haxx.se:1080 --noproxy %HOSTIP --max-time 5
diff --git a/tests/data/test1213 b/tests/data/test1213
index 6bd4d2c36..195329ecb 100644
--- a/tests/data/test1213
+++ b/tests/data/test1213
@@ -26,13 +26,13 @@ the content goes here
<server>
http
</server>
- <name>
+<name>
HTTP with proxy and host-only URL
- </name>
+</name>
# the thing here is that this sloppy form is accepted and we convert it
# for normal server use, and we need to make sure it gets converted to
# RFC style even for proxies
- <command>
+<command>
-x %HOSTIP:%HTTPPORT we.want.that.site.com.%TESTNUMBER
</command>
<features>
diff --git a/tests/data/test1214 b/tests/data/test1214
index 175869397..fc8a94eaf 100644
--- a/tests/data/test1214
+++ b/tests/data/test1214
@@ -26,13 +26,13 @@ the content goes here
<server>
http
</server>
- <name>
+<name>
HTTP with proxy and URL with ? and no slash separator
- </name>
+</name>
# the thing here is that this sloppy form is accepted and we convert it
# for normal server use, and we need to make sure it gets converted to
# RFC style even for proxies
- <command>
+<command>
-x %HOSTIP:%HTTPPORT http://we.want.that.site.com.%TESTNUMBER?moo=foo
</command>
<features>
diff --git a/tests/data/test1215 b/tests/data/test1215
index 6fc59d38b..31c872391 100644
--- a/tests/data/test1215
+++ b/tests/data/test1215
@@ -1,6 +1,6 @@
<testcase>
<info>
-# This test is a copy of test 67, modified to use a HTTP proxy.
+# This test is a copy of test 67, modified to use an HTTP proxy.
<keywords>
HTTP
HTTP GET
diff --git a/tests/data/test1216 b/tests/data/test1216
index 6686c758a..6341ba473 100644
--- a/tests/data/test1216
+++ b/tests/data/test1216
@@ -27,19 +27,20 @@ This server says moo
<server>
http
</server>
- <name>
+<name>
HTTP cookie domains tailmatching the host name
- </name>
- <command>
-http://example.fake/c/%TESTNUMBER http://bexample.fake/c/%TESTNUMBER -b log/injar%TESTNUMBER -x %HOSTIP:%HTTPPORT
+</name>
+<command>
+http://example.fake/c/%TESTNUMBER http://bexample.fake/c/%TESTNUMBER -b %LOGDIR/injar%TESTNUMBER -x %HOSTIP:%HTTPPORT
</command>
-<file name="log/injar%TESTNUMBER">
-example.fake FALSE /a FALSE 2139150993 mooo indeed
+<file name="%LOGDIR/injar%TESTNUMBER">
+example.fake FALSE /a FALSE 22139150993 mooo indeed
example.fake FALSE /b FALSE 0 moo1 indeed
-example.fake FALSE /c FALSE 2139150993 moo2 indeed
-example.fake TRUE /c FALSE 2139150993 moo3 indeed
+example.fake FALSE /c FALSE 22139150993 moo2 indeed
+example.fake TRUE /c FALSE 22139150993 moo3 indeed
</file>
<features>
+cookies
proxy
</features>
</client>
diff --git a/tests/data/test1217 b/tests/data/test1217
index 0f4772d97..691c88e73 100644
--- a/tests/data/test1217
+++ b/tests/data/test1217
@@ -22,10 +22,10 @@ REPLY PWD 257 there is rubbish all over "/this/is/the/path"
<server>
ftp
</server>
- <name>
+<name>
FTP with rubbish before name in 257-response
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/get/file/%TESTNUMBER ftp://%HOSTIP:%FTPPORT/get/file/again/%TESTNUMBER --ftp-method singlecwd
</command>
</client>
diff --git a/tests/data/test1218 b/tests/data/test1218
index ff8023348..afbc2b564 100644
--- a/tests/data/test1218
+++ b/tests/data/test1218
@@ -26,13 +26,14 @@ This server says moo
<server>
http
</server>
- <name>
+<name>
HTTP cookies and domains with same prefix
- </name>
- <command>
+</name>
+<command>
http://example.fake/c/%TESTNUMBER http://example.fake/c/%TESTNUMBER http://bexample.fake/c/%TESTNUMBER -b nonexisting -x %HOSTIP:%HTTPPORT
</command>
<features>
+cookies
proxy
</features>
</client>
diff --git a/tests/data/test1219 b/tests/data/test1219
index f579859fd..454654399 100644
--- a/tests/data/test1219
+++ b/tests/data/test1219
@@ -26,10 +26,10 @@ REPLY welcome 230 welcome without password
<server>
ftp
</server>
- <name>
+<name>
FTP with no user+password required (230 response)
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
diff --git a/tests/data/test122 b/tests/data/test122
index 8d636af47..1f007c1ce 100644
--- a/tests/data/test122
+++ b/tests/data/test122
@@ -21,10 +21,10 @@ REPLY EPSV 500 no such command
<server>
ftp
</server>
- <name>
+<name>
FTP download resume with whole file already downloaded
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -C 5
</command>
</client>
diff --git a/tests/data/test1220 b/tests/data/test1220
index 49cbf2c49..38e5b8876 100644
--- a/tests/data/test1220
+++ b/tests/data/test1220
@@ -17,13 +17,13 @@ URL
<server>
file
</server>
- <name>
+<name>
file:// URLs with query string
- </name>
+</name>
<command option="no-include">
-file://localhost%FILE_PWD/log/test%TESTNUMBER.txt?a_query=foobar#afragment
+file://localhost%FILE_PWD/%LOGDIR/test%TESTNUMBER.txt?a_query=foobar#afragment
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
contents in a single file
</file>
</client>
diff --git a/tests/data/test1221 b/tests/data/test1221
new file mode 100644
index 000000000..c2fd7a5dd
--- /dev/null
+++ b/tests/data/test1221
@@ -0,0 +1,53 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+--data-urlencode
+--url-query
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 I am cool swsclose
+Server: Cool server/10.0
+Content-Length: 0
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+--url-query with --data-urlencode
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --url-query "my name is moo[]" --url-query "yes=s i r" --url-query "v_alue@%LOGDIR/%TESTNUMBER.txt" --url-query @%LOGDIR/%TESTNUMBER.txt --url-query "+%3d%3d" --data-urlencode "start=once upon the time"
+</command>
+<file name="%LOGDIR/%TESTNUMBER.txt">
+content to _?!#$'|<>
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol nonewline="yes">
+POST /%TESTNUMBER?my+name+is+moo%5b%5d&yes=s+i+r&v_alue=content+to+_%3f%21%23%24%27%7c%3c%3e%0a&content+to+_%3f%21%23%24%27%7c%3c%3e%0a&%3d%3d HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+Content-Length: 24
+Content-Type: application/x-www-form-urlencoded
+
+start=once+upon+the+time
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1222 b/tests/data/test1222
new file mode 100644
index 000000000..b56cf6879
--- /dev/null
+++ b/tests/data/test1222
@@ -0,0 +1,24 @@
+<testcase>
+<info>
+<keywords>
+source analysis
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+
+<name>
+Verify deprecation statuses and versions
+</name>
+
+<command type="perl">
+%SRCDIR/check-deprecated.pl %SRCDIR/..
+</command>
+</client>
+
+</testcase>
diff --git a/tests/data/test1223 b/tests/data/test1223
index 9404adf6f..6c1ee0018 100644
--- a/tests/data/test1223
+++ b/tests/data/test1223
@@ -26,10 +26,10 @@ hej
<server>
http
</server>
- <name>
+<name>
HTTP GET -w remote_ip and -w remote_port
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -w 'IP %{remote_ip} and PORT %{remote_port}\n'
</command>
</client>
diff --git a/tests/data/test1224 b/tests/data/test1224
index fc898a7a1..64ba4482c 100644
--- a/tests/data/test1224
+++ b/tests/data/test1224
@@ -23,10 +23,10 @@ works
<server>
ftp
</server>
- <name>
+<name>
FTP fetch a file from the root directory
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT//%TESTNUMBER
</command>
diff --git a/tests/data/test1225 b/tests/data/test1225
index 7e4f39b01..b20363c3e 100644
--- a/tests/data/test1225
+++ b/tests/data/test1225
@@ -23,10 +23,10 @@ works
<server>
ftp
</server>
- <name>
+<name>
FTP fetch two files using absolute paths
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT//foo/%TESTNUMBER ftp://%HOSTIP:%FTPPORT//foo/bar/%TESTNUMBER
</command>
diff --git a/tests/data/test1226 b/tests/data/test1226
index a22776eac..08e706b9b 100644
--- a/tests/data/test1226
+++ b/tests/data/test1226
@@ -23,10 +23,10 @@ works
<server>
ftp
</server>
- <name>
+<name>
FTP fetch a file from the root directory with singlecwd
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT//%TESTNUMBER --ftp-method singlecwd
</command>
diff --git a/tests/data/test1227 b/tests/data/test1227
index 1cd9bf24f..30477a46a 100644
--- a/tests/data/test1227
+++ b/tests/data/test1227
@@ -23,10 +23,10 @@ works
<server>
ftp
</server>
- <name>
+<name>
FTP fetch a file from the root directory with nocwd
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT//%TESTNUMBER --ftp-method nocwd
</command>
diff --git a/tests/data/test1228 b/tests/data/test1228
index 2a7faff48..a4df51c46 100644
--- a/tests/data/test1228
+++ b/tests/data/test1228
@@ -25,13 +25,14 @@ This server says cookie path test
<server>
http
</server>
- <name>
+<name>
HTTP cookie path match
- </name>
- <command>
+</name>
+<command>
http://example.fake/hoge/%TESTNUMBER http://example.fake/hogege/ -b nonexisting -x %HOSTIP:%HTTPPORT
</command>
<features>
+cookies
proxy
</features>
</client>
diff --git a/tests/data/test1229 b/tests/data/test1229
index 06d81758e..96cdbfe13 100644
--- a/tests/data/test1229
+++ b/tests/data/test1229
@@ -55,10 +55,10 @@ http
!SSPI
crypto
</features>
- <name>
+<name>
HTTP with Digest authorization with user name needing escape
- </name>
- <command>
+</name>
+<command>
http://%5cuser%22:password@%HOSTIP:%HTTPPORT/%TESTNUMBER --digest
</command>
</client>
diff --git a/tests/data/test123 b/tests/data/test123
index 1604f0b0c..8ccd69cf6 100644
--- a/tests/data/test123
+++ b/tests/data/test123
@@ -15,13 +15,13 @@ Resume
<server>
ftp
</server>
- <name>
+<name>
FTP upload resume with whole file already downloaded
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T log/upload%TESTNUMBER -C 51
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T %LOGDIR/upload%TESTNUMBER -C 51
</command>
-<file name="log/upload%TESTNUMBER">
+<file name="%LOGDIR/upload%TESTNUMBER">
--------------------------------------------------
</file>
</client>
diff --git a/tests/data/test1230 b/tests/data/test1230
index ef841d095..5cdf1643f 100644
--- a/tests/data/test1230
+++ b/tests/data/test1230
@@ -50,11 +50,11 @@ http-proxy
http-ipv6
http
</server>
- <name>
+<name>
HTTP CONNECT to IPv6 numerical address
- </name>
+</name>
# 0x4ce == %TESTNUMBER, the test number
- <command>
+<command>
http://[1234:1234:1234::4ce]:%HTTPPORT/wanted/page/%TESTNUMBER -p -x %HOSTIP:%HTTPPORT
</command>
</client>
diff --git a/tests/data/test1231 b/tests/data/test1231
index c37f50915..2c7c8bb00 100644
--- a/tests/data/test1231
+++ b/tests/data/test1231
@@ -33,10 +33,10 @@ Connection: close
<server>
http
</server>
- <name>
+<name>
HTTP URL with dotdot removal from path
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/../../hej/but/who/../%TESTNUMBER?stupid=me/../%TESTNUMBER#soo/../%TESTNUMBER http://%HOSTIP:%HTTPPORT/../../hej/but/who/../%TESTNUMBER0001#/../%TESTNUMBER0001
</command>
</client>
diff --git a/tests/data/test1232 b/tests/data/test1232
index 3f91ecf5c..28d2eee73 100644
--- a/tests/data/test1232
+++ b/tests/data/test1232
@@ -1,6 +1,6 @@
<testcase>
<info>
-# This test is a copy of test 1231, modified to use a HTTP proxy.
+# This test is a copy of test 1231, modified to use an HTTP proxy.
<keywords>
HTTP
HTTP GET
@@ -35,10 +35,10 @@ Connection: close
<server>
http
</server>
- <name>
+<name>
HTTP URL with dotdot removal from path using an HTTP proxy
- </name>
- <command>
+</name>
+<command>
--proxy http://%HOSTIP:%HTTPPORT http://test.remote.haxx.se.%TESTNUMBER:8990/../../hej/but/who/../%TESTNUMBER?stupid=me/../%TESTNUMBER#soo/../%TESTNUMBER http://test.remote.haxx.se.%TESTNUMBER:8990/../../hej/but/who/../%TESTNUMBER0001#/../%TESTNUMBER0001
</command>
<features>
diff --git a/tests/data/test1233 b/tests/data/test1233
index b5dedca09..79e641d36 100644
--- a/tests/data/test1233
+++ b/tests/data/test1233
@@ -22,10 +22,10 @@ here are some bytes
<server>
ftp
</server>
- <name>
+<name>
FTP failing to connect to EPSV port, switching to PASV
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1234 b/tests/data/test1234
index c20b3b4a3..5676a809c 100644
--- a/tests/data/test1234
+++ b/tests/data/test1234
@@ -15,10 +15,10 @@ FAILURE
<server>
none
</server>
- <name>
+<name>
abusing {}-globbing
- </name>
- <command>
+</name>
+<command>
"%HOSTIP:%NOLISTENPORT/%TESTNUMBER[0-1]{" "%HOSTIP:%NOLISTENPORT/{}{}{}{"
</command>
</client>
diff --git a/tests/data/test1235 b/tests/data/test1235
index 24e7f7391..56664f3f0 100644
--- a/tests/data/test1235
+++ b/tests/data/test1235
@@ -30,10 +30,10 @@ two is nice too
<server>
http
</server>
- <name>
+<name>
multiple requests using {}{} in the URL
- </name>
- <command>
+</name>
+<command>
"%HOSTIP:%HTTPPORT/{%TESTNUMBER,%TESTNUMBER}{0001,0002}"
</command>
</client>
diff --git a/tests/data/test1236 b/tests/data/test1236
index 7408a7bae..286bb0a02 100644
--- a/tests/data/test1236
+++ b/tests/data/test1236
@@ -14,11 +14,11 @@ FAILURE
<server>
none
</server>
- <name>
+<name>
[] globbing overflowing the range counter
- </name>
+</name>
# 2^62 == 4611686018427387904
- <command>
+<command>
"%HOSTIP:%NOLISTENPORT/1234[0-1]{" "%HOSTIP:%NOLISTENPORT/[1-4611686018427387904][1-4611686018427387904]"
</command>
</client>
diff --git a/tests/data/test1237 b/tests/data/test1237
index 8e9590e24..7e49f830d 100644
--- a/tests/data/test1237
+++ b/tests/data/test1237
@@ -23,10 +23,10 @@ Content-Type: text/html
<server>
http
</server>
- <name>
+<name>
URL with 1000+ letter user name + password
- </name>
- <command>
+</name>
+<command>
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA:BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB@%HOSTIP:%HTTPPORT/%TESTNUMBER"
</command>
</client>
diff --git a/tests/data/test1238 b/tests/data/test1238
index 5fbf640e8..49b9e65e5 100644
--- a/tests/data/test1238
+++ b/tests/data/test1238
@@ -3,6 +3,9 @@
<keywords>
TFTP
TFTP RRQ
+timeout
+FAILURE
+DELAY
</keywords>
</info>
@@ -32,11 +35,11 @@ tftp
<killserver>
tftp
</killserver>
- <name>
+<name>
slow TFTP retrieve cancel due to -Y and -y
- </name>
+</name>
# if less than 1000 bytes/sec within 2 seconds, abort!
- <command>
+<command>
tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER -Y1000 -y2
</command>
</client>
@@ -44,12 +47,14 @@ tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER -Y1000 -y2
#
# Verify pseudo protocol after the test has been "shot"
<verify>
+<strip>
+^timeout = [5-6]$
+</strip>
<protocol>
opcode = 1
mode = octet
tsize = 0
blksize = 512
-timeout = 6
filename = /%TESTNUMBER
</protocol>
# 28 = CURLE_OPERATION_TIMEDOUT
diff --git a/tests/data/test1239 b/tests/data/test1239
index 1679ce5b3..601f45459 100644
--- a/tests/data/test1239
+++ b/tests/data/test1239
@@ -30,10 +30,10 @@ Content-Type: text/html
<server>
http
</server>
- <name>
+<name>
HTTP with -z + -w response_code and simulated 304
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -z "-dec 12 12:00:00 1999 GMT" -w '%{response_code}'
</command>
</client>
diff --git a/tests/data/test124 b/tests/data/test124
index f21c28f05..d2717949c 100644
--- a/tests/data/test124
+++ b/tests/data/test124
@@ -22,10 +22,10 @@ REPLY EPSV 314 bluah you f00l!
<server>
ftp
</server>
- <name>
+<name>
FTP download, failed PWD
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1240 b/tests/data/test1240
index 11a7e0f89..5e99f8aff 100644
--- a/tests/data/test1240
+++ b/tests/data/test1240
@@ -21,10 +21,10 @@ Connection: close
<server>
http
</server>
- <name>
+<name>
glob [0-1] with stuff after range (7.33.0 regression)
- </name>
- <command>
+</name>
+<command>
"%HOSTIP:%HTTPPORT/0[0-1]/%TESTNUMBER"
</command>
</client>
diff --git a/tests/data/test1241 b/tests/data/test1241
index 952fa2355..e114ad326 100644
--- a/tests/data/test1241
+++ b/tests/data/test1241
@@ -34,10 +34,10 @@ Connection: close
<server>
http
</server>
- <name>
+<name>
HTTP _without_ dotdot removal
- </name>
- <command>
+</name>
+<command>
--path-as-is --proxy http://%HOSTIP:%HTTPPORT http://test.remote.haxx.se.%TESTNUMBER:8990/../../hej/but/who/../%TESTNUMBER?stupid=me/../%TESTNUMBER#soo/../%TESTNUMBER http://test.remote.haxx.se.%TESTNUMBER:8990/../../hej/but/who/../%TESTNUMBER0001#/../%TESTNUMBER0001
</command>
<features>
diff --git a/tests/data/test1242 b/tests/data/test1242
index 61938a041..03d527c32 100644
--- a/tests/data/test1242
+++ b/tests/data/test1242
@@ -23,10 +23,10 @@ returned
<server>
tftp
</server>
- <name>
+<name>
TFTP retrieve without TFTP options requests
- </name>
- <command>
+</name>
+<command>
tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER --tftp-no-options
</command>
</client>
diff --git a/tests/data/test1243 b/tests/data/test1243
index ba08a837f..4a8daf584 100644
--- a/tests/data/test1243
+++ b/tests/data/test1243
@@ -12,13 +12,13 @@ TFTP WRQ
<server>
tftp
</server>
- <name>
+<name>
TFTP send without TFTP options requests
- </name>
- <command>
--T log/test%TESTNUMBER.txt tftp://%HOSTIP:%TFTPPORT// --tftp-no-options
+</name>
+<command>
+-T %LOGDIR/test%TESTNUMBER.txt tftp://%HOSTIP:%TFTPPORT// --tftp-no-options
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
a chunk of
data
sent
diff --git a/tests/data/test1246 b/tests/data/test1246
index 4cb0c3a16..7723192fa 100644
--- a/tests/data/test1246
+++ b/tests/data/test1246
@@ -34,10 +34,10 @@ Connection: close
<server>
http
</server>
- <name>
+<name>
URL with '#' at end of host name instead of '/'
- </name>
- <command>
+</name>
+<command>
--proxy http://%HOSTIP:%HTTPPORT http://test.remote.haxx.se.%TESTNUMBER:%HTTPPORT#@127.0.0.1/tricked.html no-scheme-url.com.%TESTNUMBER:%HTTPPORT#@127.127.127.127/again.html
</command>
<features>
diff --git a/tests/data/test1247 b/tests/data/test1247
index 02c695cd6..917deac3e 100644
--- a/tests/data/test1247
+++ b/tests/data/test1247
@@ -19,10 +19,10 @@ HTTP
<server>
http
</server>
- <name>
+<name>
--fail-early
- </name>
- <command>
+</name>
+<command>
--fail-early h1234://%HOSTIP:%HTTPPORT/%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test125 b/tests/data/test125
index 39b2b32ce..8de97c14e 100644
--- a/tests/data/test125
+++ b/tests/data/test125
@@ -17,10 +17,10 @@ REPLY CWD 314 bluah you f00l!
<server>
ftp
</server>
- <name>
+<name>
FTP download, failed CWD
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/path/to/file/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1258 b/tests/data/test1258
index a4cef156c..ae4a33e4b 100644
--- a/tests/data/test1258
+++ b/tests/data/test1258
@@ -26,12 +26,15 @@ boo
<server>
http
</server>
- <name>
+<name>
HTTP, use cookies with localhost
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER http://%HOSTIP:%HTTPPORT/we/want?hoge=fuga -b non-existing -H "Host: localhost"
</command>
+<features>
+cookies
+</features>
</client>
# Verify data after the test has been "shot"
diff --git a/tests/data/test1259 b/tests/data/test1259
index 4e0c6d495..3ef77ac81 100644
--- a/tests/data/test1259
+++ b/tests/data/test1259
@@ -23,10 +23,10 @@ boo
<server>
http
</server>
- <name>
+<name>
HTTP URL with semicolon in password
- </name>
- <command>
+</name>
+<command>
"http://user:pass;word@%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER"
</command>
</client>
diff --git a/tests/data/test126 b/tests/data/test126
index f1b252734..b830fc778 100644
--- a/tests/data/test126
+++ b/tests/data/test126
@@ -22,10 +22,10 @@ RETRWEIRDO
<server>
ftp
</server>
- <name>
+<name>
FTP download with multiple replies at once in RETR
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/blalbla/lululul/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1260 b/tests/data/test1260
index cff79e298..11cc13dfc 100644
--- a/tests/data/test1260
+++ b/tests/data/test1260
@@ -18,10 +18,10 @@ none
<features>
http
</features>
- <name>
+<name>
HTTP URL with rubbish after port number
- </name>
- <command>
+</name>
+<command>
-g "http://[%HOSTIP]:%NOLISTENPORT:80/we/want/%TESTNUMBER" "http://%HOSTIP:%NOLISTENPORT:80/we/want/%TESTNUMBER" "http://user@example.com:80@localhost"
</command>
</client>
diff --git a/tests/data/test1261 b/tests/data/test1261
index 0fc3833a0..17a8af82c 100644
--- a/tests/data/test1261
+++ b/tests/data/test1261
@@ -26,10 +26,10 @@ This server reply is for testing a simple Location: following
<server>
http
</server>
- <name>
+<name>
'redirect_url' with --location and --max-redirs
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/we/want/our/%TESTNUMBER -w '%{redirect_url}\n' --location --max-redirs 0
</command>
</client>
diff --git a/tests/data/test1262 b/tests/data/test1262
index 63abe8b8f..0a7046ce9 100644
--- a/tests/data/test1262
+++ b/tests/data/test1262
@@ -19,10 +19,10 @@ RETR
<server>
ftp
</server>
- <name>
+<name>
FTP request and denied to download an older file with -z
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/blalbla/%TESTNUMBER -z "-1 jan 2001"
</command>
</client>
diff --git a/tests/data/test1263 b/tests/data/test1263
index ef42f20e0..bed3b35ef 100644
--- a/tests/data/test1263
+++ b/tests/data/test1263
@@ -19,10 +19,10 @@ none
<features>
http
</features>
- <name>
+<name>
HTTP URL with rubbish after IPv6 bracket
- </name>
- <command>
+</name>
+<command>
-g "http://[%HOSTIP]test:%NOLISTENPORT/we/want/%TESTNUMBER" "http://[%HOSTIP][%HOSTIP]:%NOLISTENPORT/we/want/%TESTNUMBER" "http://user@[::1]@localhost"
</command>
</client>
diff --git a/tests/data/test1264 b/tests/data/test1264
index 54fb6ffa3..e9ae4b508 100644
--- a/tests/data/test1264
+++ b/tests/data/test1264
@@ -18,10 +18,10 @@ none
<features>
http
</features>
- <name>
+<name>
HTTP URL with space in host name
- </name>
- <command>
+</name>
+<command>
-g "http://127.0.0.1 www.example.com/we/want/%TESTNUMBER"
</command>
</client>
diff --git a/tests/data/test1266 b/tests/data/test1266
index 2e72ae486..913c96cd5 100644
--- a/tests/data/test1266
+++ b/tests/data/test1266
@@ -26,10 +26,10 @@ swsclose
<server>
http
</server>
- <name>
+<name>
HTTP GET with a single-byte HTTP/0.9 response
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --http0.9
</command>
</client>
diff --git a/tests/data/test1267 b/tests/data/test1267
index 920fc577f..11b53650c 100644
--- a/tests/data/test1267
+++ b/tests/data/test1267
@@ -26,10 +26,10 @@ swsclose
<server>
http
</server>
- <name>
+<name>
HTTP GET with a invalid HTTP/1 response line start
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --http0.9
</command>
</client>
diff --git a/tests/data/test1268 b/tests/data/test1268
index 562f376a3..806592fb8 100644
--- a/tests/data/test1268
+++ b/tests/data/test1268
@@ -19,16 +19,16 @@ none
<features>
unix-sockets
</features>
- <name>
+<name>
file name argument looks like a flag
- </name>
- <command>
---stderr log/moo%TESTNUMBER --unix-socket -k hej://moo
+</name>
+<command>
+--stderr %LOGDIR/moo%TESTNUMBER --unix-socket -k hej://moo
</command>
</client>
<verify>
-<file name="log/moo%TESTNUMBER" mode="text">
+<file name="%LOGDIR/moo%TESTNUMBER" mode="text">
Warning: The file name argument '-k' looks like a flag.
curl: (1) Protocol "hej" not supported or disabled in libcurl
</file>
diff --git a/tests/data/test1269 b/tests/data/test1269
index f68cf9c09..6cc68e0f0 100644
--- a/tests/data/test1269
+++ b/tests/data/test1269
@@ -16,10 +16,10 @@
<server>
none
</server>
- <name>
+<name>
too large --retry-delay value
- </name>
- <command>
+</name>
+<command>
--retry 3 --retry-delay 9223372036854776 http://%HOSTIP:%NOLISTENPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test127 b/tests/data/test127
index 0b0f4f598..ebf122d01 100644
--- a/tests/data/test127
+++ b/tests/data/test127
@@ -19,10 +19,10 @@ moooooooo
<server>
ftp
</server>
- <name>
+<name>
FTP --disable-epsv
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/path/to/file/%TESTNUMBER --disable-epsv
</command>
</client>
diff --git a/tests/data/test1270 b/tests/data/test1270
index 0c289d0cf..1e1fa67bb 100644
--- a/tests/data/test1270
+++ b/tests/data/test1270
@@ -31,10 +31,10 @@ Connection: close
<server>
http
</server>
- <name>
+<name>
Basic 'redirect_url'
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/we/want/our/%TESTNUMBER -w '%{redirect_url}\n' -s
</command>
</client>
diff --git a/tests/data/test1271 b/tests/data/test1271
index 184fd87f1..3cc994b71 100644
--- a/tests/data/test1271
+++ b/tests/data/test1271
@@ -23,13 +23,13 @@ Moo
<server>
http
</server>
- <name>
+<name>
--write-out from file with empty file
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/our/%TESTNUMBER -w @log/blank%TESTNUMBER
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/our/%TESTNUMBER -w @%LOGDIR/blank%TESTNUMBER
</command>
-<file name="log/blank%TESTNUMBER">
+<file name="%LOGDIR/blank%TESTNUMBER">
</file>
</client>
diff --git a/tests/data/test1272 b/tests/data/test1272
index 39c62901e..921242892 100644
--- a/tests/data/test1272
+++ b/tests/data/test1272
@@ -25,10 +25,10 @@ gophers
<killserver>
gophers
</killserver>
- <name>
+<name>
Gophers index
- </name>
- <command>
+</name>
+<command>
-k gophers://%HOSTIP:%GOPHERSPORT/1/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1273 b/tests/data/test1273
index 0c076cb96..fb5d47b2d 100644
--- a/tests/data/test1273
+++ b/tests/data/test1273
@@ -47,13 +47,13 @@ http
<killserver>
http
</killserver>
- <name>
+<name>
-f and resume transfer of an entirely-downloaded file
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -C - -f
</command>
-<file name="log/curl%TESTNUMBER.out">
+<file name="%LOGDIR/curl%TESTNUMBER.out">
012345678
012345678
012345678
diff --git a/tests/data/test1274 b/tests/data/test1274
index f640a69f6..db37f656d 100644
--- a/tests/data/test1274
+++ b/tests/data/test1274
@@ -32,11 +32,11 @@ Connection:
<server>
http
</server>
- <name>
+<name>
HTTP header line folding
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -D log/out%TESTNUMBER
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -D %LOGDIR/out%TESTNUMBER
</command>
</client>
@@ -50,7 +50,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/out%TESTNUMBER">
+<file name="%LOGDIR/out%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
%if hyper
diff --git a/tests/data/test1276 b/tests/data/test1276
new file mode 100644
index 000000000..3961bf4cb
--- /dev/null
+++ b/tests/data/test1276
@@ -0,0 +1,25 @@
+<testcase>
+<info>
+<keywords>
+source analysis
+documentation
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+
+<name>
+Verify lib/optiontable.pl
+</name>
+
+<command type="perl">
+%SRCDIR/option-check.pl %SRCDIR/..
+</command>
+</client>
+
+</testcase>
diff --git a/tests/data/test1277 b/tests/data/test1277
new file mode 100644
index 000000000..d80f671fa
--- /dev/null
+++ b/tests/data/test1277
@@ -0,0 +1,206 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+compressed
+Transfer-Encoding
+Content-Encoding
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data base64="yes">
+SFRUUC8xLjEgMjAwIE9LDQpEYXRlOiBNb24sIDI5IE5vdiAyMDA0IDIxOjU2OjUzIEdNVA0KU2Vy
+dmVyOiBBcGFjaGUvMS4zLjMxIChEZWJpYW4gR05VL0xpbnV4KSBtb2RfZ3ppcC8xLjMuMjYuMWEg
+UEhQLzQuMy45LTEgbW9kX3NzbC8yLjguMjAgT3BlblNTTC8wLjkuN2QgbW9kX3BlcmwvMS4yOQ0K
+VmFyeTogQWNjZXB0LUVuY29kaW5nDQpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1J
+U08tODg1OS0xDQpUcmFuc2Zlci1FbmNvZGluZzogZ3ppcCwgY2h1bmtlZA0KQ29udGVudC1FbmNv
+ZGluZzogZGVmbGF0ZQ0KDQo1MjINCh+LCAAHgbBjAv8BCwX0+nja3VjbbuM2EH03kH9g/dQCtm62
+EzlwtChy2QTNNsHaBbpPBi3RNhtJFEjKuTz02zuUKImxHK93g74ESGJy5pzD4QxJk5l8ekpitCFc
+UJaedV3L6SKShiyi6eqsezO96/v+aNx3u5+CzuSXi7vz2bf7S5Rx9g8JZT+mQgIQTb9NZ5dfUHct
+ZXZq20tOxDohWFopkfYChw8kjexl0tc80XesoRXJqAuiW1pBB6HKptpNb06jwD12vYltGEpEhCWZ
+4ygigBiP/b7j9z0XOcNTxz31xhPb8BuEPFMfUeA5zrDvOn3XR4536sHPQFMqxKs4UpyQuVgzLoMw
+53EdjmFv45d5HBdwhNMIxXTRphYQHR4RoZY6Z0lSUlKCJGO1AMf8GS0ZR2FMSSr7gkYE/fX1FkmO
+U7GEilowi0bIUN4ZDKIC4XIEpVqpcFXfJY2JOOrkQnXUGOI5lfjJQjcSiTzLQF+g69nsvlf8nfbQ
+FbSPOldF++LmfNZDs8vbPy/h8/bid4Bd3dxe9orhP9/dX19+hTYM8EhiiKmU6mdMyJ5u5tAKGXug
+RBTaKM9ihiMYApZanpComXUPZViIR8Yj1YTI0jxZFPbp9PaoExIu6ZKGUFcw/UE4+JgoQ4FqPMEI
+xbQgGxl7JJxER53Fc5WkHpJr8mbGq7JYR53ZGqgIw++CpmozCUhtnWqVYAabDnnOUSfG6SrHKyKK
+GEi6oZylCQwgQEeX0FgbGypxTOXzXISMk2B04g+t0cnE3rJvgTPCQ5AMBpZ7bGAr8xYa5vMAe21s
+IAuTXtcsy2PMm7GOR2OIYQjLedvTIlQDugPLd18RXodiOMpgnNErtBEOx8W54VsjZ2LrjumZhywH
+Xc+tvNrwClMO4g9qjDGAyBci5DSTcESKYKBOh9emEgalT8P1XO3l4IIscR7LiW0aSxjUf14dYBmU
+Pdh5aFYnpa3Wiz2xW6xGbM0S8rYQLGDKSxV1eNomQ+vWAo2mXL0cLgdgraRojcjixTtcBMBaRNEa
+kReaHS4CYC2iaI1IuIY9RmK2OlyqpmjBRqKR5VlyuCCAtZSiNSIRWRwuAmAtomiNCBNPh4sAWIso
+mlEvEanz8gdqVhKqumm6scxzDmkTJNDrt+oahdmIHyjJRlTF2AhDRN0cDldRaC1TEBudhHLO+OFK
+JV5rabJZ14QFVa2gWXpiCoccpODLzcz+G53D6QEpo3mCbkvHxK4QGq++p+Sck5jUmWuZ5/r+FpxY
+rmfBBekN9xtsda86OXb8UYtYXbDaHHUv2n1x2gUs52LvmswEzlECE14zOZdr+KqGnLVMJRLnEm4y
+og6p7Ffd2qBPYJxSEqOpJCl8w68mtulsUaBKu+v+7wKvIqKKbCBbdM5iEtw9poTXuMJURWqboVY9
+YVzJOE1oiqU5O8nhhlDUBgpad1pezzve5x7s5e5zur6/l+vuHReWxv6o97rd4+E+93gv2R/v9Tp7
+3e7oO3F/J7D9kQ1aY5f3u+3yw5rI4MkEDzG4jtY6tfEZyeeMnHU5CeF1oGzqJVUvygZnbmRHDbXL
+sZOo7y3gPhmqYux07WQaj7MWdfvh9hZXUqk2FNjhzo5+1bep33Zqldh6pzWIt/PGinsbjv+/pDk/
+nbHh4J0ZU++rj58o1xuM3Hdk6gWeYh8/SwPPGZ68I0vXhCYRjj9+oobD0cB7R6LCPjz1xc/kybDo
+s77+r1DQqZvNf8f+A904jtHT7+gYCwUAAA0KMA0KDQo=
+</data>
+
+
+<datacheck>
+HTTP/1.1 200 OK
+Date: Mon, 29 Nov 2004 21:56:53 GMT
+Server: Apache/1.3.31 (Debian GNU/Linux) mod_gzip/1.3.26.1a PHP/4.3.9-1 mod_ssl/2.8.20 OpenSSL/0.9.7d mod_perl/1.29
+Vary: Accept-Encoding
+Content-Type: text/html; charset=ISO-8859-1
+Transfer-Encoding: gzip, chunked
+Content-Encoding: deflate
+
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE project-listing SYSTEM "http://freshmeat.net/backend/fm-projects-0.4.dtd">
+<project-listing>
+ <project>
+ <project_id>1612</project_id>
+ <date_added>1998-08-21 04:01:29</date_added>
+ <date_updated>2004-10-18 02:22:23</date_updated>
+ <projectname_short>curl</projectname_short>
+ <projectname_full>curl and libcurl</projectname_full>
+ <desc_short>Command line tool and library for client-side URL transfers.</desc_short>
+ <desc_full>curl and libcurl is a tool for transferring files
+using URL syntax. It supports HTTP, HTTPS, FTP,
+FTPS, DICT, TELNET, LDAP, FILE, and GOPHER, as
+well as HTTP-post, HTTP-put, cookies, FTP upload,
+resumed transfers, passwords, portnumbers, SSL
+certificates, Kerberos, and proxies. It is powered
+by libcurl, the client-side URL transfer library.
+There are bindings to libcurl for over 20
+languages and environments.
+</desc_full>
+ <vitality_score>5784.57</vitality_score>
+ <vitality_percent>3.16</vitality_percent>
+ <vitality_rank>169</vitality_rank>
+ <popularity_score>6594.54</popularity_score>
+ <popularity_percent>13.81</popularity_percent>
+ <popularity_rank>105</popularity_rank>
+ <rating>8.50</rating>
+ <rating_count>21</rating_count>
+ <rating_rank>183</rating_rank>
+ <subscriptions>323</subscriptions>
+ <branch_name>Default</branch_name>
+ <url_project_page>http://freshmeat.net/projects/curl/</url_project_page>
+ <url_homepage>http://freshmeat.net/redir/curl/1612/url_homepage/</url_homepage>
+ <url_tgz>http://freshmeat.net/redir/curl/1612/url_tgz/</url_tgz>
+ <url_bz2>http://freshmeat.net/redir/curl/1612/url_bz2/</url_bz2>
+ <url_zip>http://freshmeat.net/redir/curl/1612/url_zip/</url_zip>
+ <url_changelog>http://freshmeat.net/redir/curl/1612/url_changelog/</url_changelog>
+ <url_rpm>http://freshmeat.net/redir/curl/1612/url_rpm/</url_rpm>
+ <url_deb>http://freshmeat.net/redir/curl/1612/url_deb/</url_deb>
+ <url_osx>http://freshmeat.net/redir/curl/1612/url_osx/</url_osx>
+ <url_bsdport>http://freshmeat.net/redir/curl/1612/url_bsdport/</url_bsdport>
+ <url_purchase></url_purchase>
+ <url_cvs>http://freshmeat.net/redir/curl/1612/url_cvs/</url_cvs>
+ <url_list>http://freshmeat.net/redir/curl/1612/url_list/</url_list>
+ <url_mirror>http://freshmeat.net/redir/curl/1612/url_mirror/</url_mirror>
+ <url_demo></url_demo>
+ <license>MIT/X Consortium License</license>
+ <latest_release>
+ <latest_release_version>7.12.2</latest_release_version>
+ <latest_release_id>176085</latest_release_id>
+ <latest_release_date>2004-10-18 02:22:23</latest_release_date>
+ </latest_release>
+ <screenshot_thumb></screenshot_thumb>
+ <authors>
+ <author>
+ <author_name>Daniel Stenberg</author_name>
+ <author_url>http://freshmeat.net/~bagder/</author_url>
+ <author_role>Owner</author_role>
+ </author>
+ </authors>
+ <descriminators>
+ <trove_id>12</trove_id>
+ <trove_id>226</trove_id>
+ <trove_id>3</trove_id>
+ <trove_id>2</trove_id>
+ <trove_id>188</trove_id>
+ <trove_id>216</trove_id>
+ <trove_id>200</trove_id>
+ <trove_id>220</trove_id>
+ <trove_id>164</trove_id>
+ <trove_id>90</trove_id>
+ <trove_id>89</trove_id>
+ <trove_id>809</trove_id>
+ <trove_id>150</trove_id>
+ <trove_id>224</trove_id>
+ <trove_id>900</trove_id>
+ <trove_id>839</trove_id>
+ </descriminators>
+ <dependencies>
+ <dependency type="recommended">
+ <dependency_release_id>0</dependency_release_id>
+ <dependency_branch_id>7464</dependency_branch_id>
+ <dependency_project_id>7464</dependency_project_id>
+ <dependency_project_title>OpenSSL (Default)</dependency_project_title>
+ </dependency>
+ <dependency type="optional">
+ <dependency_release_id>0</dependency_release_id>
+ <dependency_branch_id>0</dependency_branch_id>
+ <dependency_project_id>7443</dependency_project_id>
+ <dependency_project_title>OpenLDAP</dependency_project_title>
+ </dependency>
+ <dependency type="optional">
+ <dependency_release_id>0</dependency_release_id>
+ <dependency_branch_id>0</dependency_branch_id>
+ <dependency_project_id>12351</dependency_project_id>
+ <dependency_project_title>zlib</dependency_project_title>
+ </dependency>
+ <dependency type="optional">
+ <dependency_release_id>0</dependency_release_id>
+ <dependency_branch_id>0</dependency_branch_id>
+ <dependency_project_id>32047</dependency_project_id>
+ <dependency_project_title>Heimdal</dependency_project_title>
+ </dependency>
+ <dependency type="optional">
+ <dependency_release_id>0</dependency_release_id>
+ <dependency_branch_id>0</dependency_branch_id>
+ <dependency_project_id>44532</dependency_project_id>
+ <dependency_project_title>c-ares</dependency_project_title>
+ </dependency>
+ </dependencies>
+ </project>
+</project-listing>
+</datacheck>
+
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+libz
+</features>
+<server>
+http
+</server>
+<name>
+HTTP GET with both content and transfer encoding
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --tr-encoding --compressed
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strippart>
+s/^Accept-Encoding: [a-zA-Z, ]*/Accept-Encoding: xxx/
+</strippart>
+<protocol>
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+Connection: TE
+TE: gzip
+Accept-Encoding: xxx
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1278 b/tests/data/test1278
new file mode 100644
index 000000000..951644637
--- /dev/null
+++ b/tests/data/test1278
@@ -0,0 +1,48 @@
+<testcase>
+<info>
+<keywords>
+--no-remote-name
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data crlf="yes" nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+verify extra --no-remote-name
+</name>
+<command option="no-output">
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --no-progress-meter -o %LOGDIR/out%TESTNUMBER --no-remote-name -w '%{stderr}yes\n'
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<stderr mode="text">
+yes
+</stderr>
+</verify>
+</testcase>
diff --git a/tests/data/test1279 b/tests/data/test1279
new file mode 100644
index 000000000..fd3b34bd3
--- /dev/null
+++ b/tests/data/test1279
@@ -0,0 +1,31 @@
+<testcase>
+<info>
+<keywords>
+source analysis
+CURL_EXTERN
+libcurl.def
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+
+<name>
+Verify libcurl.def against CURL_EXTERN declarations
+</name>
+
+<command type="perl">
+%SRCDIR/extern-scan.pl --heading=EXPORTS --sort %SRCDIR/..
+</command>
+</client>
+
+<verify>
+<stdout loadfile="%SRCDIR/../libcurl.def">
+</stdout>
+</verify>
+
+</testcase>
diff --git a/tests/data/test128 b/tests/data/test128
index c9429c5fe..d1a5d2acf 100644
--- a/tests/data/test128
+++ b/tests/data/test128
@@ -16,13 +16,13 @@ STOR
<server>
ftp
</server>
- <name>
+<name>
FTP upload with --crlf
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T log/upload%TESTNUMBER --crlf
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T %LOGDIR/upload%TESTNUMBER --crlf
</command>
-<file name="log/upload%TESTNUMBER">
+<file name="%LOGDIR/upload%TESTNUMBER">
file
with unix newlines
meant to be
diff --git a/tests/data/test1280 b/tests/data/test1280
index 3f5bdd5bb..081cbbe54 100644
--- a/tests/data/test1280
+++ b/tests/data/test1280
@@ -23,10 +23,10 @@ bytes
<server>
http
</server>
- <name>
+<name>
simple [a-d] globbing
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/[a-d]/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1281 b/tests/data/test1281
index f6781d460..a0bca73ea 100644
--- a/tests/data/test1281
+++ b/tests/data/test1281
@@ -20,10 +20,10 @@ none
<features>
http
</features>
- <name>
+<name>
reject non-numerical port number in URL
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:alpha/beta/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1282 b/tests/data/test1282
index 76e7a000e..f57275187 100644
--- a/tests/data/test1282
+++ b/tests/data/test1282
@@ -21,10 +21,10 @@ ftp
<features>
GSS-API
</features>
- <name>
+<name>
FTP with 633 response before gss initialized
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
diff --git a/tests/data/test1283 b/tests/data/test1283
index df0458cc5..1e8e9d447 100644
--- a/tests/data/test1283
+++ b/tests/data/test1283
@@ -30,7 +30,7 @@ http
globbing range with same start and stop
</name>
<command option="no-output">
-http://%HOSTIP:%HTTPPORT/[a-a][1-1][b-b:1][2-2:1]/%TESTNUMBER -o "log/outfile%TESTNUMBER_#1#2#3#4.dump"
+http://%HOSTIP:%HTTPPORT/[a-a][1-1][b-b:1][2-2:1]/%TESTNUMBER -o "%LOGDIR/outfile%TESTNUMBER_#1#2#3#4.dump"
</command>
</client>
@@ -43,7 +43,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/outfile%TESTNUMBER_a1b2.dump">
+<file name="%LOGDIR/outfile%TESTNUMBER_a1b2.dump">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Content-Length: 6
diff --git a/tests/data/test1285 b/tests/data/test1285
index e5a38e071..986cb92cc 100644
--- a/tests/data/test1285
+++ b/tests/data/test1285
@@ -60,9 +60,9 @@ HTTP PUT --digest with user-specified Content-Length header
# even when there is a user-specified Content-Length header.
# https://github.com/curl/curl/pull/1242
<command>
--H "Content-Length: 85" -u auser:apasswd --digest -T log/put%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER
+-H "Content-Length: 85" -u auser:apasswd --digest -T %LOGDIR/put%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
-<file name="log/put%TESTNUMBER">
+<file name="%LOGDIR/put%TESTNUMBER">
This is data we upload with PUT
a second line
line three
@@ -85,7 +85,6 @@ Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", u
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 85
-Expect: 100-continue
This is data we upload with PUT
a second line
diff --git a/tests/data/test1287 b/tests/data/test1287
index 0d0ad47d0..c4815314b 100644
--- a/tests/data/test1287
+++ b/tests/data/test1287
@@ -82,7 +82,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/stderr%TESTNUMBER" mode="text">
+<file name="%LOGDIR/stderr%TESTNUMBER" mode="text">
%if !hyper
* Ignoring Content-Length in CONNECT 200 response
* Ignoring Transfer-Encoding in CONNECT 200 response
diff --git a/tests/data/test1288 b/tests/data/test1288
index 583fc42f3..e94bd5104 100644
--- a/tests/data/test1288
+++ b/tests/data/test1288
@@ -42,7 +42,7 @@ http-proxy
Suppress proxy CONNECT response headers
</name>
<command>
---proxytunnel --suppress-connect-headers --dump-header - --include --write-out "\nCONNECT CODE: %{http_connect}\nRECEIVED HEADER BYTE TOTAL: %{size_header}\n" --proxy %HOSTIP:%PROXYPORT http://%HOSTIP.%TESTNUMBER:%HTTPPORT/we/want/that/page/%TESTNUMBER
+--proxytunnel --suppress-connect-headers --dump-header - --include --write-out "\nCONNECT CODE: %{http_connect}\nRECEIVED HEADER BYTE TOTAL: %{size_header}\n" --proxy %HOSTIP:%PROXYPORT http://%HOSTIP:%HTTPPORT/we/want/that/page/%TESTNUMBER
</command>
<features>
proxy
@@ -53,15 +53,15 @@ proxy
# Verify data after the test has been "shot"
<verify>
<proxy>
-CONNECT %HOSTIP.%TESTNUMBER:%HTTPPORT HTTP/1.1
-Host: %HOSTIP.%TESTNUMBER:%HTTPPORT
+CONNECT %HOSTIP:%HTTPPORT HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Proxy-Connection: Keep-Alive
</proxy>
<protocol>
GET /we/want/that/page/%TESTNUMBER HTTP/1.1
-Host: %HOSTIP.%TESTNUMBER:%HTTPPORT
+Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
diff --git a/tests/data/test1289 b/tests/data/test1289
index d679cc0bc..14a41458a 100644
--- a/tests/data/test1289
+++ b/tests/data/test1289
@@ -27,7 +27,7 @@ http://ur%20[0-60000000000000000000
# Verify data after the test has been "shot"
<verify>
-# curl: (3) [globbing] bad range in column
+# curl: (3) [globbing] bad range in column
<errorcode>
3
</errorcode>
diff --git a/tests/data/test129 b/tests/data/test129
index 6da58be2d..22e071d3e 100644
--- a/tests/data/test129
+++ b/tests/data/test129
@@ -31,10 +31,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP/1.2 is rejected
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1291 b/tests/data/test1291
index 5997dcc3b..ea9a0c6ab 100644
--- a/tests/data/test1291
+++ b/tests/data/test1291
@@ -24,14 +24,14 @@ none
Attempt to upload 1000 files but fail immediately
</name>
<command>
--K log/cmd%TESTNUMBER --fail-early
+-K %LOGDIR/cmd%TESTNUMBER --fail-early
</command>
-<file name="log/upload-this">
+<file name="%LOGDIR/upload-this">
XXXXXXXx
</file>
# generate the config file
<precheck>
-perl -e 'for(1 .. 1000) { printf("upload-file=log/upload-this\nurl=htttttp://non-existing-host.haxx.se/upload/%TESTNUMBER\n", $_);}' > log/cmd%TESTNUMBER;
+perl -e 'for(1 .. 1000) { printf("upload-file=%LOGDIR/upload-this\nurl=htttttp://non-existing-host.haxx.se/upload/%TESTNUMBER\n", $_);}' > %LOGDIR/cmd%TESTNUMBER;
</precheck>
</client>
diff --git a/tests/data/test1292 b/tests/data/test1292
index 8b8806e41..e674bfd89 100644
--- a/tests/data/test1292
+++ b/tests/data/test1292
@@ -26,10 +26,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
Replaced internal headers with a blank one
- </name>
- <command>
+</name>
+<command>
-H "Host;" -H "Accept;" http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1293 b/tests/data/test1293
index fb39ebcd0..afecfaf2f 100644
--- a/tests/data/test1293
+++ b/tests/data/test1293
@@ -35,10 +35,10 @@ Mime
<server>
http
</server>
- <name>
+<name>
Multipart formpost to two URLs, the first failing
- </name>
- <command>
+</name>
+<command>
http://0 http://%HOSTIP:%HTTPPORT/%TESTNUMBER -F=
</command>
</client>
@@ -47,15 +47,15 @@ http://0 http://%HOSTIP:%HTTPPORT/%TESTNUMBER -F=
# Verify data after the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/------------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/
+s/^--------------------------[A-Za-z0-9]*/------------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=----------------------------/
</strippart>
<protocol>
POST /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 126
+Content-Length: 138
Content-Type: multipart/form-data; boundary=----------------------------
------------------------------
diff --git a/tests/data/test1297 b/tests/data/test1297
index f41036223..386154af3 100644
--- a/tests/data/test1297
+++ b/tests/data/test1297
@@ -33,7 +33,7 @@ http-proxy
CONNECT to peer that returns nothing
</name>
<command>
---proxytunnel --proxy %HOSTIP:%PROXYPORT http://%HOSTIP.%TESTNUMBER:%HTTPPORT/we/want/that/page/%TESTNUMBER
+--proxytunnel --proxy %HOSTIP:%PROXYPORT http://%HOSTIP:%HTTPPORT/we/want/that/page/%TESTNUMBER
</command>
<features>
proxy
@@ -44,15 +44,15 @@ proxy
# Verify data after the test has been "shot"
<verify>
<proxy>
-CONNECT %HOSTIP.%TESTNUMBER:%HTTPPORT HTTP/1.1
-Host: %HOSTIP.%TESTNUMBER:%HTTPPORT
+CONNECT %HOSTIP:%HTTPPORT HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Proxy-Connection: Keep-Alive
</proxy>
<protocol>
GET /we/want/that/page/%TESTNUMBER HTTP/1.1
-Host: %HOSTIP.%TESTNUMBER:%HTTPPORT
+Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
diff --git a/tests/data/test1298 b/tests/data/test1298
index 2afefac5d..cebe4a9f7 100644
--- a/tests/data/test1298
+++ b/tests/data/test1298
@@ -31,10 +31,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP GET special path with --request-target
- </name>
- <command>
+</name>
+<command>
--request-target "XXX" "http://%HOSTIP:%HTTPPORT/" -H "Testno: %TESTNUMBER"
</command>
</client>
diff --git a/tests/data/test1299 b/tests/data/test1299
index 7f3e80e0c..11ac0c41f 100644
--- a/tests/data/test1299
+++ b/tests/data/test1299
@@ -30,10 +30,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
Send "OPTIONS *" with --request-target
- </name>
- <command>
+</name>
+<command>
--request-target '*' -X OPTIONS http://%HOSTIP:%HTTPPORT/ -H "Testno: %TESTNUMBER"
</command>
</client>
diff --git a/tests/data/test13 b/tests/data/test13
index 72dd19100..b8bcf1649 100644
--- a/tests/data/test13
+++ b/tests/data/test13
@@ -21,10 +21,10 @@ blabla custom request result
<server>
http
</server>
- <name>
+<name>
HTTP custom request 'DELETE'
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -X DELETE
</command>
</client>
diff --git a/tests/data/test130 b/tests/data/test130
index 31447cbbe..d6fed3367 100644
--- a/tests/data/test130
+++ b/tests/data/test130
@@ -33,13 +33,13 @@ dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
<server>
ftp
</server>
- <name>
+<name>
FTP (optional .netrc; no user/pass) dir list PASV
- </name>
- <command>
---netrc-optional --netrc-file log/netrc%TESTNUMBER ftp://%HOSTIP:%FTPPORT/
+</name>
+<command>
+--netrc-optional --netrc-file %LOGDIR/netrc%TESTNUMBER ftp://%HOSTIP:%FTPPORT/
</command>
-<file name="log/netrc%TESTNUMBER" >
+<file name="%LOGDIR/netrc%TESTNUMBER" >
# the following two lines were created while testing curl
# machine %HOSTIP login user1 password commented
machine %HOSTIP login user1 password passwd1
diff --git a/tests/data/test1300 b/tests/data/test1300
index 118341213..1c1ec7bf8 100644
--- a/tests/data/test1300
+++ b/tests/data/test1300
@@ -15,8 +15,8 @@ none
<features>
unittest
</features>
- <name>
+<name>
llist unit tests
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test1301 b/tests/data/test1301
index 5aea24b65..ad6113e56 100644
--- a/tests/data/test1301
+++ b/tests/data/test1301
@@ -1,8 +1,7 @@
<testcase>
<info>
<keywords>
-unittest
-curl_strcasecompare
+curl_strequal
</keywords>
</info>
@@ -12,11 +11,11 @@ curl_strcasecompare
<server>
none
</server>
-<features>
-unittest
-</features>
- <name>
-curl_strcasecompare unit tests
- </name>
+<tool>
+lib%TESTNUMBER
+</tool>
+<name>
+curl_strequal tests
+</name>
</client>
</testcase>
diff --git a/tests/data/test1302 b/tests/data/test1302
index 9e9039cac..22102413b 100644
--- a/tests/data/test1302
+++ b/tests/data/test1302
@@ -15,8 +15,8 @@ none
<features>
unittest
</features>
- <name>
+<name>
base64 encode/decode unit tests
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test1303 b/tests/data/test1303
index bb23352df..2e12ae43f 100644
--- a/tests/data/test1303
+++ b/tests/data/test1303
@@ -15,8 +15,8 @@ none
<features>
unittest
</features>
- <name>
+<name>
Curl_timeleft unit tests
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test1304 b/tests/data/test1304
index 699a2e43f..da36ed1a0 100644
--- a/tests/data/test1304
+++ b/tests/data/test1304
@@ -14,11 +14,15 @@ none
</server>
<features>
unittest
+netrc
</features>
- <name>
+<name>
netrc parsing unit tests
- </name>
-<file name="log/netrc%TESTNUMBER">
+</name>
+<command>
+%LOGDIR/netrc%TESTNUMBER
+</command>
+<file name="%LOGDIR/netrc%TESTNUMBER">
machine example.com login admin password passwd
machine curl.example.com login none password none
</file>
diff --git a/tests/data/test1305 b/tests/data/test1305
index 7d14aa849..3765f80a0 100644
--- a/tests/data/test1305
+++ b/tests/data/test1305
@@ -16,9 +16,9 @@ none
<features>
unittest
</features>
- <name>
+<name>
internal hash create/destroy testing
- </name>
+</name>
<command>
%TESTNUMBER
</command>
diff --git a/tests/data/test1306 b/tests/data/test1306
index 7ed450324..6588fe7fc 100644
--- a/tests/data/test1306
+++ b/tests/data/test1306
@@ -16,9 +16,9 @@ none
<features>
unittest
</features>
- <name>
+<name>
internal hash create/add/destroy testing
- </name>
+</name>
<tool>
unit1305
</tool>
diff --git a/tests/data/test1307 b/tests/data/test1307
index f0e96bfa0..cf4a4ac1a 100644
--- a/tests/data/test1307
+++ b/tests/data/test1307
@@ -17,8 +17,8 @@ none
unittest
ftp
</features>
- <name>
+<name>
internal Curl_fnmatch() testing
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test1308 b/tests/data/test1308
index 3e827365c..d05e3bdfb 100644
--- a/tests/data/test1308
+++ b/tests/data/test1308
@@ -4,24 +4,28 @@
unittest
curl_formadd
curl_formget
+FORM
</keywords>
</info>
#
# Client-side
<client>
-<server>
-none
-</server>
<features>
unittest
http
-Mime
+form-api
</features>
- <name>
+<server>
+none
+</server>
+<name>
formpost unit tests
- </name>
-<file name="log/test-%TESTNUMBER">
+</name>
+<command>
+%LOGDIR/test-%TESTNUMBER
+</command>
+<file name="%LOGDIR/test-%TESTNUMBER">
Piece of the file that is to uploaded as a formpost
</file>
</client>
diff --git a/tests/data/test1309 b/tests/data/test1309
index 7005d5f13..4b86377fb 100644
--- a/tests/data/test1309
+++ b/tests/data/test1309
@@ -15,9 +15,9 @@ none
<features>
unittest
</features>
- <name>
+<name>
splay unit tests
- </name>
+</name>
</client>
<verify>
diff --git a/tests/data/test131 b/tests/data/test131
index 63bd02194..c48931175 100644
--- a/tests/data/test131
+++ b/tests/data/test131
@@ -34,13 +34,13 @@ dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
<server>
ftp
</server>
- <name>
+<name>
FTP (optional .netrc; user/no pass) dir list PASV
- </name>
- <command>
---netrc-optional --netrc-file log/netrc%TESTNUMBER ftp://user2@%HOSTIP:%FTPPORT/
+</name>
+<command>
+--netrc-optional --netrc-file %LOGDIR/netrc%TESTNUMBER ftp://user2@%HOSTIP:%FTPPORT/
</command>
-<file name="log/netrc%TESTNUMBER" >
+<file name="%LOGDIR/netrc%TESTNUMBER" >
# the following two lines were created while testing curl
machine %HOSTIP login user1 password passwd1
machine %HOSTIP login user2 password passwd2
diff --git a/tests/data/test1310 b/tests/data/test1310
index 11dcfef0c..12fdbb158 100644
--- a/tests/data/test1310
+++ b/tests/data/test1310
@@ -61,9 +61,9 @@ debug
<server>
http
</server>
- <name>
+<name>
HTTP with NTLM delegation to winbind helper
- </name>
+</name>
<setenv>
# we force our own host name, in order to make the test machine independent
CURL_GETHOSTNAME=curlhost
@@ -73,10 +73,12 @@ LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
CURL_NTLM_WB_FILE=%PWD/server/fake_ntlm
# set source directory so fake_ntlm can find the test files
CURL_NTLM_AUTH_SRCDIR=%SRCDIR
+# set source directory so fake_ntlm can find the test and log files
+CURL_NTLM_LOGDIR=%LOGDIR
# set the test number
CURL_NTLM_AUTH_TESTNUM=%TESTNUMBER
</setenv>
- <command>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u testuser:anypasswd --ntlm-wb
</command>
<precheck>
diff --git a/tests/data/test1311 b/tests/data/test1311
index 6d5496f0c..8e48794a0 100644
--- a/tests/data/test1311
+++ b/tests/data/test1311
@@ -37,7 +37,7 @@ http
HTTP GET with -J and Content-Disposition
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -J -O
@@ -54,7 +54,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/name%TESTNUMBER">
+<file name="%LOGDIR/name%TESTNUMBER">
12345
</file>
diff --git a/tests/data/test1312 b/tests/data/test1312
index 2d4891458..c8170a8af 100644
--- a/tests/data/test1312
+++ b/tests/data/test1312
@@ -37,7 +37,7 @@ http
HTTP GET with -J, Content-Disposition and ; in filename
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
%HOSTIP:%HTTPPORT/%TESTNUMBER -J -O
@@ -54,7 +54,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/name%TESTNUMBER;weird">
+<file name="%LOGDIR/name%TESTNUMBER;weird">
12345
</file>
diff --git a/tests/data/test1313 b/tests/data/test1313
index b1ac1fcea..8a2859744 100644
--- a/tests/data/test1313
+++ b/tests/data/test1313
@@ -37,7 +37,7 @@ http
HTTP GET with -J, Content-Disposition, uneven quotes
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -J -O
@@ -54,7 +54,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/name%TESTNUMBER">
+<file name="%LOGDIR/name%TESTNUMBER">
12345
</file>
diff --git a/tests/data/test1314 b/tests/data/test1314
index 343a1c240..40cd18971 100644
--- a/tests/data/test1314
+++ b/tests/data/test1314
@@ -50,10 +50,10 @@ moo
<server>
http
</server>
- <name>
+<name>
HTTP Location: following a // prefixed url
- </name>
- <command>
+</name>
+<command>
http://firstplace.example.com/want/%TESTNUMBER -L -x http://%HOSTIP:%HTTPPORT
</command>
<features>
diff --git a/tests/data/test1315 b/tests/data/test1315
index dd66df71a..94b3c4897 100644
--- a/tests/data/test1315
+++ b/tests/data/test1315
@@ -28,14 +28,14 @@ Mime
<server>
http
</server>
- <name>
+<name>
HTTP RFC1867-type formposting - -F with three files, one with explicit type
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -F name=value -F 'file=@log/test%TESTNUMBER.txt,log/test%TESTNUMBER.txt;type=magic/content,log/test%TESTNUMBER.txt'
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -F name=value -F 'file=@%LOGDIR/test%TESTNUMBER.txt,%LOGDIR/test%TESTNUMBER.txt;type=magic/content,%LOGDIR/test%TESTNUMBER.txt'
</command>
# We create this file before the command is invoked!
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
dummy data
</file>
</client>
@@ -50,7 +50,7 @@ POST /we/want/%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 797
+Content-Length: 845
Content-Type: multipart/form-data; boundary=----------------------------9ef8d6205763
------------------------------9ef8d6205763
diff --git a/tests/data/test1316 b/tests/data/test1316
index 935c46798..b6b8a1896 100644
--- a/tests/data/test1316
+++ b/tests/data/test1316
@@ -57,10 +57,10 @@ http-proxy
<features>
http
</features>
- <name>
+<name>
FTP LIST tunneled through HTTP proxy
- </name>
- <command>
+</name>
+<command>
ftp://ftp.%TESTNUMBER:%FTPPORT/ -p -x %HOSTIP:%PROXYPORT
</command>
</client>
diff --git a/tests/data/test1318 b/tests/data/test1318
index 0844852e9..b7cc434eb 100644
--- a/tests/data/test1318
+++ b/tests/data/test1318
@@ -32,10 +32,10 @@ Content-Length: 0
<server>
http
</server>
- <name>
+<name>
HTTP with --resolve and same host name using different cases
- </name>
- <command>
+</name>
+<command>
--resolve MiXeDcAsE.cOm:%HTTPPORT:%HOSTIP http://MiXeDcAsE.cOm:%HTTPPORT/%TESTNUMBER http://mixedcase.com:%HTTPPORT/%TESTNUMBER0001
</command>
</client>
diff --git a/tests/data/test1319 b/tests/data/test1319
index ea1192524..2dd887095 100644
--- a/tests/data/test1319
+++ b/tests/data/test1319
@@ -52,10 +52,10 @@ http-proxy
http
proxy
</features>
- <name>
+<name>
POP3 fetch tunneled through HTTP proxy
- </name>
- <command>
+</name>
+<command>
pop3://pop.%TESTNUMBER:%POP3PORT/%TESTNUMBER -p -x %HOSTIP:%PROXYPORT -u user:secret
</command>
</client>
diff --git a/tests/data/test132 b/tests/data/test132
index d33980fa7..8aa2f7906 100644
--- a/tests/data/test132
+++ b/tests/data/test132
@@ -33,13 +33,13 @@ dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
<server>
ftp
</server>
- <name>
+<name>
FTP (optional .netrc; user/passwd supplied) dir list PASV
- </name>
- <command>
---netrc-optional --netrc-file log/netrc%TESTNUMBER ftp://mary:mark@%HOSTIP:%FTPPORT/
+</name>
+<command>
+--netrc-optional --netrc-file %LOGDIR/netrc%TESTNUMBER ftp://mary:mark@%HOSTIP:%FTPPORT/
</command>
-<file name="log/netrc%TESTNUMBER" >
+<file name="%LOGDIR/netrc%TESTNUMBER" >
# the following two lines were created while testing curl
machine %HOSTIP login user1 password passwd1
machine %HOSTIP login user2 password passwd2
diff --git a/tests/data/test1320 b/tests/data/test1320
index 7b43382b9..9237ea572 100644
--- a/tests/data/test1320
+++ b/tests/data/test1320
@@ -29,16 +29,16 @@ http-proxy
http
proxy
</features>
- <name>
+<name>
SMTP send tunneled through HTTP proxy
- </name>
+</name>
<stdin>
From: different
To: another
body
</stdin>
- <command>
+<command>
smtp://smtp.%TESTNUMBER:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -T - -p -x %HOSTIP:%PROXYPORT
</command>
</client>
diff --git a/tests/data/test1321 b/tests/data/test1321
index 88d865e7b..4fe83fefb 100644
--- a/tests/data/test1321
+++ b/tests/data/test1321
@@ -48,10 +48,10 @@ http-proxy
http
proxy
</features>
- <name>
+<name>
IMAP FETCH tunneled through HTTP proxy
- </name>
- <command>
+</name>
+<command>
'imap://imap.%TESTNUMBER:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u user:secret -p -x %HOSTIP:%PROXYPORT
</command>
</client>
diff --git a/tests/data/test1325 b/tests/data/test1325
index dea2b2a11..67b31d58f 100644
--- a/tests/data/test1325
+++ b/tests/data/test1325
@@ -47,10 +47,10 @@ body
<server>
http
</server>
- <name>
+<name>
HTTP 308-redirect with POST
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/we/%TESTNUMBER -L -d "moo"
</command>
</client>
diff --git a/tests/data/test1326 b/tests/data/test1326
index 22c49cf47..89e5a79c7 100644
--- a/tests/data/test1326
+++ b/tests/data/test1326
@@ -25,14 +25,14 @@ http
<features>
telnet
</features>
- <name>
+<name>
TELNET to HTTP server
- </name>
+</name>
<stdin>
GET /we/want/%TESTNUMBER HTTP/1.0
</stdin>
- <command>
+<command>
telnet://%HOSTIP:%HTTPPORT --upload-file -
</command>
</client>
diff --git a/tests/data/test1327 b/tests/data/test1327
index 791189b90..c54f2a889 100644
--- a/tests/data/test1327
+++ b/tests/data/test1327
@@ -20,19 +20,19 @@ http
<features>
telnet
</features>
- <name>
+<name>
TELNET check of upload with stdout redirected
- </name>
+</name>
<stdin>
GET /ignore/for/%TESTNUMBER HTTP/1.0
</stdin>
-<file name="log/%TESTNUMBER.txt">
+<file name="%LOGDIR/%TESTNUMBER.txt">
GET /we/want/%TESTNUMBER HTTP/1.0
</file>
<command option="no-output">
-telnet://%HOSTIP:%HTTPPORT -T log/%TESTNUMBER.txt
+telnet://%HOSTIP:%HTTPPORT -T %LOGDIR/%TESTNUMBER.txt
</command>
</client>
diff --git a/tests/data/test1328 b/tests/data/test1328
index b7b3e3247..8466abde6 100644
--- a/tests/data/test1328
+++ b/tests/data/test1328
@@ -10,7 +10,7 @@ globbing
<reply>
<data>
-HTTP/1.1 404 OK
+HTTP/1.1 404 NOT OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Content-Length: 6
Funny-head: yesyes
@@ -43,11 +43,11 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP GET a globbed range with -f
- </name>
- <command>
--f 'http://%HOSTIP:%HTTPPORT/[%TESTNUMBER0000-%TESTNUMBER0001]' -o log/#1
+</name>
+<command>
+-f 'http://%HOSTIP:%HTTPPORT/[%TESTNUMBER0000-%TESTNUMBER0001]' -o %LOGDIR/#1
</command>
</client>
diff --git a/tests/data/test1329 b/tests/data/test1329
index 0ca5b5aae..8f1740bb7 100644
--- a/tests/data/test1329
+++ b/tests/data/test1329
@@ -11,10 +11,10 @@ HTTP proxy
<server>
http
</server>
- <name>
+<name>
/-prefixed proxy name
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/we/want/that/page/%TESTNUMBER -x "/server"
</command>
<features>
diff --git a/tests/data/test133 b/tests/data/test133
index ad0d2def7..c8d2f9039 100644
--- a/tests/data/test133
+++ b/tests/data/test133
@@ -33,13 +33,13 @@ dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
<server>
ftp
</server>
- <name>
+<name>
FTP compulsory .netrc; ignore passwd in URL
- </name>
- <command>
--n --netrc-file log/netrc%TESTNUMBER ftp://mary:mark@%HOSTIP:%FTPPORT/
+</name>
+<command>
+-n --netrc-file %LOGDIR/netrc%TESTNUMBER ftp://mary:mark@%HOSTIP:%FTPPORT/
</command>
-<file name="log/netrc%TESTNUMBER" >
+<file name="%LOGDIR/netrc%TESTNUMBER" >
# the following two lines were created while testing curl
machine %HOSTIP login user1 password passwd1
machine %HOSTIP login mary password drfrank
diff --git a/tests/data/test1330 b/tests/data/test1330
index 2cc5aedd7..0dd8f7d26 100644
--- a/tests/data/test1330
+++ b/tests/data/test1330
@@ -31,7 +31,7 @@ nothing
#
# Verify data after the test has been "shot"
<verify>
-<file name="log/memdump">
+<file name="%LOGDIR/memdump">
MEM unit%TESTNUMBER.c: malloc()
MEM unit%TESTNUMBER.c: free()
</file>
diff --git a/tests/data/test1331 b/tests/data/test1331
index 4ef0c14df..35598960e 100644
--- a/tests/data/test1331
+++ b/tests/data/test1331
@@ -58,13 +58,14 @@ hello
<server>
http
</server>
- <name>
+<name>
HTTP --proxy-anyauth and 407 with cookies
- </name>
- <command>
--U myname:mypassword -x %HOSTIP:%HTTPPORT http://z.x.com/%TESTNUMBER --proxy-anyauth -c log/dump%TESTNUMBER
+</name>
+<command>
+-U myname:mypassword -x %HOSTIP:%HTTPPORT http://z.x.com/%TESTNUMBER --proxy-anyauth -c %LOGDIR/dump%TESTNUMBER
</command>
<features>
+cookies
proxy
</features>
</client>
diff --git a/tests/data/test1332 b/tests/data/test1332
index b7d201be0..835294082 100644
--- a/tests/data/test1332
+++ b/tests/data/test1332
@@ -46,10 +46,10 @@ body
<server>
http
</server>
- <name>
+<name>
HTTP POST with 303 redirect and --post303
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/blah/%TESTNUMBER -L -d "moo" --post303
</command>
</client>
diff --git a/tests/data/test1333 b/tests/data/test1333
index 0a991e48b..e6dbb73a6 100644
--- a/tests/data/test1333
+++ b/tests/data/test1333
@@ -27,10 +27,10 @@ Connection: close
<server>
http
</server>
- <name>
+<name>
HTTP POST zero length, chunked-encoded
- </name>
- <command>
+</name>
+<command>
-d "" --header "Transfer-Encoding: chunked" http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1334 b/tests/data/test1334
index b19155923..88a41d8b2 100644
--- a/tests/data/test1334
+++ b/tests/data/test1334
@@ -35,10 +35,10 @@ http
HTTP GET with -O without Content-Disposition, -D file
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -O -D log/heads%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -O -D %LOGDIR/heads%TESTNUMBER
</command>
</client>
@@ -53,11 +53,11 @@ Accept: */*
</protocol>
-<file1 name="log/%TESTNUMBER">
+<file1 name="%LOGDIR/%TESTNUMBER">
12345
</file1>
-<file2 name="log/heads%TESTNUMBER">
+<file2 name="%LOGDIR/heads%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -67,7 +67,7 @@ Content-Type: text/html
</file2>
-<file3 name="log/stdout%TESTNUMBER">
+<file3 name="%LOGDIR/stdout%TESTNUMBER">
</file3>
</verify>
diff --git a/tests/data/test1335 b/tests/data/test1335
index e3507603b..4d64ea877 100644
--- a/tests/data/test1335
+++ b/tests/data/test1335
@@ -35,7 +35,7 @@ http
HTTP GET with -O without Content-Disposition, -D stdout
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -O -D -
@@ -53,11 +53,11 @@ Accept: */*
</protocol>
-<file1 name="log/%TESTNUMBER">
+<file1 name="%LOGDIR/%TESTNUMBER">
12345
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
diff --git a/tests/data/test1336 b/tests/data/test1336
index 631f204e8..993d8c6f8 100644
--- a/tests/data/test1336
+++ b/tests/data/test1336
@@ -36,13 +36,13 @@ http
HTTP GET with -O and Content-Disposition, -D file
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -O -D log/heads%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -O -D %LOGDIR/heads%TESTNUMBER
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -57,11 +57,11 @@ Accept: */*
</protocol>
-<file1 name="log/%TESTNUMBER">
+<file1 name="%LOGDIR/%TESTNUMBER">
12345
</file1>
-<file2 name="log/heads%TESTNUMBER">
+<file2 name="%LOGDIR/heads%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -72,7 +72,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
</file2>
-<file3 name="log/stdout%TESTNUMBER">
+<file3 name="%LOGDIR/stdout%TESTNUMBER">
</file3>
</verify>
diff --git a/tests/data/test1337 b/tests/data/test1337
index 808c8a2a4..4b954d063 100644
--- a/tests/data/test1337
+++ b/tests/data/test1337
@@ -36,13 +36,13 @@ http
HTTP GET with -O and Content-Disposition, -D stdout
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -O -D -
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -57,11 +57,11 @@ Accept: */*
</protocol>
-<file1 name="log/%TESTNUMBER">
+<file1 name="%LOGDIR/%TESTNUMBER">
12345
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
diff --git a/tests/data/test1338 b/tests/data/test1338
index 672e9aea8..c1c271a95 100644
--- a/tests/data/test1338
+++ b/tests/data/test1338
@@ -36,10 +36,10 @@ http
HTTP GET with -O -J without Content-Disposition, -D file
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -J -O -D log/heads%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -J -O -D %LOGDIR/heads%TESTNUMBER
</command>
</client>
@@ -54,11 +54,11 @@ Accept: */*
</protocol>
-<file1 name="log/%TESTNUMBER">
+<file1 name="%LOGDIR/%TESTNUMBER">
12345
</file1>
-<file2 name="log/heads%TESTNUMBER">
+<file2 name="%LOGDIR/heads%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -68,7 +68,7 @@ Content-Type: text/html
</file2>
-<file3 name="log/stdout%TESTNUMBER">
+<file3 name="%LOGDIR/stdout%TESTNUMBER">
</file3>
</verify>
diff --git a/tests/data/test1339 b/tests/data/test1339
index 4bc77e976..a46934d3a 100644
--- a/tests/data/test1339
+++ b/tests/data/test1339
@@ -36,7 +36,7 @@ http
HTTP GET with -O -J without Content-Disposition, -D stdout
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -J -O -D -
@@ -54,11 +54,11 @@ Accept: */*
</protocol>
-<file1 name="log/%TESTNUMBER">
+<file1 name="%LOGDIR/%TESTNUMBER">
12345
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
diff --git a/tests/data/test134 b/tests/data/test134
index 00d1732df..d0716c3d1 100644
--- a/tests/data/test134
+++ b/tests/data/test134
@@ -39,9 +39,9 @@ FTP (optional .netrc; programmatic user/passwd) dir list PASV
# -u overrides netrc which overrides the URL
<command>
---netrc-optional --netrc-file log/netrc%TESTNUMBER -u romulus:rhemus ftp://mary:mark@%HOSTIP:%FTPPORT/
+--netrc-optional --netrc-file %LOGDIR/netrc%TESTNUMBER -u romulus:rhemus ftp://mary:mark@%HOSTIP:%FTPPORT/
</command>
-<file name="log/netrc%TESTNUMBER" >
+<file name="%LOGDIR/netrc%TESTNUMBER" >
# the following two lines were created while testing curl
machine %HOSTIP login user1 password passwd1
machine %HOSTIP login user2 password passwd2
diff --git a/tests/data/test1340 b/tests/data/test1340
index e48907bb4..ebec701a6 100644
--- a/tests/data/test1340
+++ b/tests/data/test1340
@@ -37,10 +37,10 @@ http
HTTP GET with -O -J and Content-Disposition, -D file
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%PWD/%LOGDIR
</setenv>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -J -O -D log/heads%TESTNUMBER -w "curl saved to filename %{filename_effective}\n"
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -J -O -D %LOGDIR/heads%TESTNUMBER -w "curl saved to filename %{filename_effective}\n"
</command>
</client>
@@ -55,11 +55,11 @@ Accept: */*
</protocol>
-<file1 name="log/name%TESTNUMBER">
+<file1 name="%LOGDIR/name%TESTNUMBER">
12345
</file1>
-<file2 name="log/heads%TESTNUMBER">
+<file2 name="%LOGDIR/heads%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -70,8 +70,8 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
</file2>
-<file3 name="log/stdout%TESTNUMBER" mode="text">
-curl saved to filename %PWD/log/name%TESTNUMBER
+<file3 name="%LOGDIR/stdout%TESTNUMBER" mode="text">
+curl saved to filename %PWD/%LOGDIR/name%TESTNUMBER
</file3>
</verify>
diff --git a/tests/data/test1341 b/tests/data/test1341
index cf13a1fec..75d9daae7 100644
--- a/tests/data/test1341
+++ b/tests/data/test1341
@@ -37,7 +37,7 @@ http
HTTP GET with -O -J and Content-Disposition, -D stdout
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%PWD/%LOGDIR
</setenv>
<command option="no-output,no-include">
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -J -O -D - -w "curl saved to filename %{filename_effective}\n"
@@ -55,11 +55,11 @@ Accept: */*
</protocol>
-<file1 name="log/name%TESTNUMBER">
+<file1 name="%LOGDIR/name%TESTNUMBER">
12345
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -68,7 +68,7 @@ Connection: close
Content-Type: text/html
Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
-curl saved to filename %PWD/log/name%TESTNUMBER
+curl saved to filename %PWD/%LOGDIR/name%TESTNUMBER
</file2>
</verify>
diff --git a/tests/data/test1342 b/tests/data/test1342
index 6bab2831e..39dbfab57 100644
--- a/tests/data/test1342
+++ b/tests/data/test1342
@@ -35,10 +35,10 @@ http
HTTP GET with -O -i without Content-Disposition, -D file
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -i -O -D log/heads%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -i -O -D %LOGDIR/heads%TESTNUMBER
</command>
</client>
@@ -53,7 +53,7 @@ Accept: */*
</protocol>
-<file1 name="log/%TESTNUMBER">
+<file1 name="%LOGDIR/%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -64,7 +64,7 @@ Content-Type: text/html
12345
</file1>
-<file2 name="log/heads%TESTNUMBER">
+<file2 name="%LOGDIR/heads%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -74,7 +74,7 @@ Content-Type: text/html
</file2>
-<file3 name="log/stdout%TESTNUMBER">
+<file3 name="%LOGDIR/stdout%TESTNUMBER">
</file3>
</verify>
diff --git a/tests/data/test1343 b/tests/data/test1343
index 3f0d63059..6a9eb7dc8 100644
--- a/tests/data/test1343
+++ b/tests/data/test1343
@@ -35,7 +35,7 @@ http
HTTP GET with -O -i without Content-Disposition, -D stdout
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -i -O -D -
@@ -53,7 +53,7 @@ Accept: */*
</protocol>
-<file1 name="log/%TESTNUMBER">
+<file1 name="%LOGDIR/%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -64,7 +64,7 @@ Content-Type: text/html
12345
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
diff --git a/tests/data/test1344 b/tests/data/test1344
index bb3361679..ba4b38976 100644
--- a/tests/data/test1344
+++ b/tests/data/test1344
@@ -36,13 +36,13 @@ http
HTTP GET with -O -i and Content-Disposition, -D file
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -i -O -D log/heads%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -i -O -D %LOGDIR/heads%TESTNUMBER
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -57,7 +57,7 @@ Accept: */*
</protocol>
-<file1 name="log/%TESTNUMBER">
+<file1 name="%LOGDIR/%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -69,7 +69,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
12345
</file1>
-<file2 name="log/heads%TESTNUMBER">
+<file2 name="%LOGDIR/heads%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -80,7 +80,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
</file2>
-<file3 name="log/stdout%TESTNUMBER">
+<file3 name="%LOGDIR/stdout%TESTNUMBER">
</file3>
</verify>
diff --git a/tests/data/test1345 b/tests/data/test1345
index bd9470c14..a9298e4e2 100644
--- a/tests/data/test1345
+++ b/tests/data/test1345
@@ -36,13 +36,13 @@ http
HTTP GET with -O -i and Content-Disposition, -D stdout
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -i -O -D -
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -57,7 +57,7 @@ Accept: */*
</protocol>
-<file1 name="log/%TESTNUMBER">
+<file1 name="%LOGDIR/%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -69,7 +69,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
12345
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
diff --git a/tests/data/test1346 b/tests/data/test1346
index 32d434d03..bab67cb63 100644
--- a/tests/data/test1346
+++ b/tests/data/test1346
@@ -35,7 +35,7 @@ http
HTTP GET with -O -i without Content-Disposition, without -D
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -i -O
@@ -53,7 +53,7 @@ Accept: */*
</protocol>
-<file1 name="log/%TESTNUMBER">
+<file1 name="%LOGDIR/%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -64,7 +64,7 @@ Content-Type: text/html
12345
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
</file2>
</verify>
diff --git a/tests/data/test1347 b/tests/data/test1347
index 46e1ae608..868e2611c 100644
--- a/tests/data/test1347
+++ b/tests/data/test1347
@@ -36,13 +36,13 @@ http
HTTP GET with -O -i and Content-Disposition, without -D
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -i -O
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -57,7 +57,7 @@ Accept: */*
</protocol>
-<file1 name="log/%TESTNUMBER">
+<file1 name="%LOGDIR/%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -69,7 +69,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
12345
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
</file2>
</verify>
diff --git a/tests/data/test1348 b/tests/data/test1348
index df7a620c3..3de0b4a93 100644
--- a/tests/data/test1348
+++ b/tests/data/test1348
@@ -28,7 +28,7 @@ ftp
FTP download, file without Content-Disposition inside, using -O
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -O
@@ -49,12 +49,12 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/file%TESTNUMBER">
+<file1 name="%LOGDIR/file%TESTNUMBER">
fooo
mooo
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
</file2>
</verify>
diff --git a/tests/data/test1349 b/tests/data/test1349
index 10ba0bddc..d2565496c 100644
--- a/tests/data/test1349
+++ b/tests/data/test1349
@@ -28,10 +28,10 @@ ftp
FTP download, file without C-D inside, using -O -D file
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
-ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -O -D log/heads%TESTNUMBER
+ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -O -D %LOGDIR/heads%TESTNUMBER
</command>
</client>
@@ -49,14 +49,14 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/file%TESTNUMBER">
+<file1 name="%LOGDIR/file%TESTNUMBER">
fooo
mooo
</file1>
# The final "221 bye bye baby" response to QUIT will not be recorded
# since that is not considered part of this particular transfer!
-<file2 name="log/heads%TESTNUMBER">
+<file2 name="%LOGDIR/heads%TESTNUMBER">
220- _ _ ____ _
220- ___| | | | _ \| |
220- / __| | | | |_) | |
@@ -76,7 +76,7 @@ mooo
s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/
</stripfile2>
-<file3 name="log/stdout%TESTNUMBER">
+<file3 name="%LOGDIR/stdout%TESTNUMBER">
</file3>
</verify>
diff --git a/tests/data/test135 b/tests/data/test135
index 353735d6a..3dc1d531f 100644
--- a/tests/data/test135
+++ b/tests/data/test135
@@ -28,10 +28,10 @@ Range
<server>
ftp
</server>
- <name>
+<name>
FTP retrieve a byte-range
- </name>
- <command>
+</name>
+<command>
-r 4-16 ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1350 b/tests/data/test1350
index e9ea522ba..b5568f536 100644
--- a/tests/data/test1350
+++ b/tests/data/test1350
@@ -28,7 +28,7 @@ ftp
FTP download, file without C-D inside, using -O -D stdout
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -O -D -
@@ -49,14 +49,14 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/file%TESTNUMBER">
+<file1 name="%LOGDIR/file%TESTNUMBER">
fooo
mooo
</file1>
# The final "221 bye bye baby" response to QUIT will not be recorded
# since that is not considered part of this particular transfer!
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
220- _ _ ____ _
220- ___| | | | _ \| |
220- / __| | | | |_) | |
diff --git a/tests/data/test1351 b/tests/data/test1351
index 4c8ed4caa..93232d55c 100644
--- a/tests/data/test1351
+++ b/tests/data/test1351
@@ -29,10 +29,10 @@ ftp
FTP download, file without C-D inside, using -O -J -D file
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
-ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -O -J -D log/heads%TESTNUMBER
+ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -O -J -D %LOGDIR/heads%TESTNUMBER
</command>
</client>
@@ -50,14 +50,14 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/file%TESTNUMBER">
+<file1 name="%LOGDIR/file%TESTNUMBER">
fooo
mooo
</file1>
# The final "221 bye bye baby" response to QUIT will not be recorded
# since that is not considered part of this particular transfer!
-<file2 name="log/heads%TESTNUMBER">
+<file2 name="%LOGDIR/heads%TESTNUMBER">
220- _ _ ____ _
220- ___| | | | _ \| |
220- / __| | | | |_) | |
@@ -77,7 +77,7 @@ mooo
s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/
</stripfile2>
-<file3 name="log/stdout%TESTNUMBER">
+<file3 name="%LOGDIR/stdout%TESTNUMBER">
</file3>
</verify>
diff --git a/tests/data/test1352 b/tests/data/test1352
index 3af12a801..0649289b6 100644
--- a/tests/data/test1352
+++ b/tests/data/test1352
@@ -29,7 +29,7 @@ ftp
FTP download, file without C-D inside, using -O -J -D stdout
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -O -J -D -
@@ -50,14 +50,14 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/file%TESTNUMBER">
+<file1 name="%LOGDIR/file%TESTNUMBER">
fooo
mooo
</file1>
# The final "221 bye bye baby" response to QUIT will not be recorded
# since that is not considered part of this particular transfer!
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
220- _ _ ____ _
220- ___| | | | _ \| |
220- / __| | | | |_) | |
diff --git a/tests/data/test1353 b/tests/data/test1353
index 34049706d..8e0ad50e4 100644
--- a/tests/data/test1353
+++ b/tests/data/test1353
@@ -28,10 +28,10 @@ ftp
FTP download, file without C-D inside, using -O -i -D file
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
-ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -O -i -D log/heads%TESTNUMBER
+ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -O -i -D %LOGDIR/heads%TESTNUMBER
</command>
</client>
@@ -49,14 +49,14 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/file%TESTNUMBER">
+<file1 name="%LOGDIR/file%TESTNUMBER">
fooo
mooo
</file1>
# The final "221 bye bye baby" response to QUIT will not be recorded
# since that is not considered part of this particular transfer!
-<file2 name="log/heads%TESTNUMBER">
+<file2 name="%LOGDIR/heads%TESTNUMBER">
220- _ _ ____ _
220- ___| | | | _ \| |
220- / __| | | | |_) | |
@@ -76,7 +76,7 @@ mooo
s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/
</stripfile2>
-<file3 name="log/stdout%TESTNUMBER">
+<file3 name="%LOGDIR/stdout%TESTNUMBER">
</file3>
</verify>
diff --git a/tests/data/test1354 b/tests/data/test1354
index e5d15635a..506ec90e4 100644
--- a/tests/data/test1354
+++ b/tests/data/test1354
@@ -28,7 +28,7 @@ ftp
FTP download, file without C-D inside, using -O -i -D stdout
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -O -i -D -
@@ -49,12 +49,12 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/file%TESTNUMBER">
+<file1 name="%LOGDIR/file%TESTNUMBER">
fooo
mooo
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
220- _ _ ____ _
220- ___| | | | _ \| |
220- / __| | | | |_) | |
diff --git a/tests/data/test1355 b/tests/data/test1355
index f008803e6..fa19fabc4 100644
--- a/tests/data/test1355
+++ b/tests/data/test1355
@@ -28,7 +28,7 @@ ftp
FTP download, file without C-D inside, using -O -i, without -D
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -O -i
@@ -49,12 +49,12 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/file%TESTNUMBER">
+<file1 name="%LOGDIR/file%TESTNUMBER">
fooo
mooo
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
</file2>
</verify>
diff --git a/tests/data/test1356 b/tests/data/test1356
index 7be22473a..0c326f48c 100644
--- a/tests/data/test1356
+++ b/tests/data/test1356
@@ -36,13 +36,13 @@ ftp
FTP download, file with Content-Disposition inside, using -O
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -O
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -60,7 +60,7 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/file%TESTNUMBER">
+<file1 name="%LOGDIR/file%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -72,7 +72,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
MOOOO
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
</file2>
</verify>
diff --git a/tests/data/test1357 b/tests/data/test1357
index ebb102c95..9d395a875 100644
--- a/tests/data/test1357
+++ b/tests/data/test1357
@@ -36,13 +36,13 @@ ftp
FTP download, file with C-D inside, using -O -D file
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
-ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -O -D log/heads%TESTNUMBER
+ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -O -D %LOGDIR/heads%TESTNUMBER
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -60,7 +60,7 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/file%TESTNUMBER">
+<file1 name="%LOGDIR/file%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -72,7 +72,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
MOOOO
</file1>
-<file2 name="log/heads%TESTNUMBER">
+<file2 name="%LOGDIR/heads%TESTNUMBER">
220- _ _ ____ _
220- ___| | | | _ \| |
220- / __| | | | |_) | |
@@ -92,7 +92,7 @@ MOOOO
s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/
</stripfile2>
-<file3 name="log/stdout%TESTNUMBER">
+<file3 name="%LOGDIR/stdout%TESTNUMBER">
</file3>
</verify>
diff --git a/tests/data/test1358 b/tests/data/test1358
index 983e1cdc0..973ef7cf4 100644
--- a/tests/data/test1358
+++ b/tests/data/test1358
@@ -36,13 +36,13 @@ ftp
FTP download, file with C-D inside, using -O -D stdout
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -O -D -
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -60,7 +60,7 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/file%TESTNUMBER">
+<file1 name="%LOGDIR/file%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -72,7 +72,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
MOOOO
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
220- _ _ ____ _
220- ___| | | | _ \| |
220- / __| | | | |_) | |
diff --git a/tests/data/test1359 b/tests/data/test1359
index c4fb2eec4..fc1eb3728 100644
--- a/tests/data/test1359
+++ b/tests/data/test1359
@@ -37,13 +37,13 @@ ftp
FTP download, file with C-D inside, using -O -J -D file
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
-ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -O -J -D log/heads%TESTNUMBER
+ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -O -J -D %LOGDIR/heads%TESTNUMBER
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -61,7 +61,7 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/file%TESTNUMBER">
+<file1 name="%LOGDIR/file%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -73,7 +73,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
MOOOO
</file1>
-<file2 name="log/heads%TESTNUMBER">
+<file2 name="%LOGDIR/heads%TESTNUMBER">
220- _ _ ____ _
220- ___| | | | _ \| |
220- / __| | | | |_) | |
@@ -93,7 +93,7 @@ MOOOO
s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/
</stripfile2>
-<file3 name="log/stdout%TESTNUMBER">
+<file3 name="%LOGDIR/stdout%TESTNUMBER">
</file3>
</verify>
diff --git a/tests/data/test136 b/tests/data/test136
index 63d936b54..ef0b2c49a 100644
--- a/tests/data/test136
+++ b/tests/data/test136
@@ -18,10 +18,10 @@ RETR
<server>
ftp
</server>
- <name>
+<name>
FTP with user and no password
- </name>
- <command>
+</name>
+<command>
-u user: ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1360 b/tests/data/test1360
index 3f7b43535..1fb80eecd 100644
--- a/tests/data/test1360
+++ b/tests/data/test1360
@@ -37,13 +37,13 @@ ftp
FTP download, file with C-D inside, using -O -J -D stdout
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -O -J -D -
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -61,7 +61,7 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/file%TESTNUMBER">
+<file1 name="%LOGDIR/file%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -73,7 +73,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
MOOOO
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
220- _ _ ____ _
220- ___| | | | _ \| |
220- / __| | | | |_) | |
diff --git a/tests/data/test1361 b/tests/data/test1361
index 3f1f37893..6b9af1ad8 100644
--- a/tests/data/test1361
+++ b/tests/data/test1361
@@ -36,13 +36,13 @@ ftp
FTP download, file with C-D inside, using -O -i -D file
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
-ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -O -i -D log/heads%TESTNUMBER
+ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -O -i -D %LOGDIR/heads%TESTNUMBER
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -60,7 +60,7 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/file%TESTNUMBER">
+<file1 name="%LOGDIR/file%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -72,7 +72,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
MOOOO
</file1>
-<file2 name="log/heads%TESTNUMBER">
+<file2 name="%LOGDIR/heads%TESTNUMBER">
220- _ _ ____ _
220- ___| | | | _ \| |
220- / __| | | | |_) | |
@@ -92,7 +92,7 @@ MOOOO
s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/
</stripfile2>
-<file3 name="log/stdout%TESTNUMBER">
+<file3 name="%LOGDIR/stdout%TESTNUMBER">
</file3>
</verify>
diff --git a/tests/data/test1362 b/tests/data/test1362
index c5a09cbe8..03d99047b 100644
--- a/tests/data/test1362
+++ b/tests/data/test1362
@@ -36,13 +36,13 @@ ftp
FTP download, file with C-D inside, using -O -i -D stdout
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -O -i -D -
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -60,7 +60,7 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/file%TESTNUMBER">
+<file1 name="%LOGDIR/file%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -72,7 +72,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
MOOOO
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
220- _ _ ____ _
220- ___| | | | _ \| |
220- / __| | | | |_) | |
diff --git a/tests/data/test1363 b/tests/data/test1363
index e48074b46..009f68cae 100644
--- a/tests/data/test1363
+++ b/tests/data/test1363
@@ -36,13 +36,13 @@ ftp
FTP download, file with C-D inside, using -O -i, without -D
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -O -i
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -60,7 +60,7 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/file%TESTNUMBER">
+<file1 name="%LOGDIR/file%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -72,7 +72,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
MOOOO
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
</file2>
</verify>
diff --git a/tests/data/test1364 b/tests/data/test1364
index ac2c423d2..0ea1e2b12 100644
--- a/tests/data/test1364
+++ b/tests/data/test1364
@@ -30,10 +30,10 @@ http
HTTP GET -o fname without Content-Disposition, -D file
</name>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o log/outfile%TESTNUMBER -D log/heads%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o %LOGDIR/outfile%TESTNUMBER -D %LOGDIR/heads%TESTNUMBER
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/%TESTNUMBER
</postcheck>
</client>
@@ -48,11 +48,11 @@ Accept: */*
</protocol>
-<file1 name="log/outfile%TESTNUMBER">
+<file1 name="%LOGDIR/outfile%TESTNUMBER">
12345
</file1>
-<file2 name="log/heads%TESTNUMBER">
+<file2 name="%LOGDIR/heads%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -62,7 +62,7 @@ Content-Type: text/html
</file2>
-<file3 name="log/stdout%TESTNUMBER">
+<file3 name="%LOGDIR/stdout%TESTNUMBER">
</file3>
</verify>
diff --git a/tests/data/test1365 b/tests/data/test1365
index cee54b3a7..abd371c01 100644
--- a/tests/data/test1365
+++ b/tests/data/test1365
@@ -30,10 +30,10 @@ http
HTTP GET -o fname without Content-Disposition, -D stdout
</name>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o log/outfile%TESTNUMBER -D -
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o %LOGDIR/outfile%TESTNUMBER -D -
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/%TESTNUMBER
</postcheck>
</client>
@@ -48,11 +48,11 @@ Accept: */*
</protocol>
-<file1 name="log/outfile%TESTNUMBER">
+<file1 name="%LOGDIR/outfile%TESTNUMBER">
12345
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
diff --git a/tests/data/test1366 b/tests/data/test1366
index ae634cf65..78f5573ea 100644
--- a/tests/data/test1366
+++ b/tests/data/test1366
@@ -31,10 +31,10 @@ http
HTTP GET -o fname and Content-Disposition, -D file
</name>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o log/outfile%TESTNUMBER -D log/heads%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o %LOGDIR/outfile%TESTNUMBER -D %LOGDIR/heads%TESTNUMBER
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/%TESTNUMBER %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -49,11 +49,11 @@ Accept: */*
</protocol>
-<file1 name="log/outfile%TESTNUMBER">
+<file1 name="%LOGDIR/outfile%TESTNUMBER">
12345
</file1>
-<file2 name="log/heads%TESTNUMBER">
+<file2 name="%LOGDIR/heads%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -64,7 +64,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
</file2>
-<file3 name="log/stdout%TESTNUMBER">
+<file3 name="%LOGDIR/stdout%TESTNUMBER">
</file3>
</verify>
diff --git a/tests/data/test1367 b/tests/data/test1367
index a74a4c423..24929365a 100644
--- a/tests/data/test1367
+++ b/tests/data/test1367
@@ -31,10 +31,10 @@ http
HTTP GET -o fname and Content-Disposition, -D stdout
</name>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o log/outfile%TESTNUMBER -D -
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o %LOGDIR/outfile%TESTNUMBER -D -
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/%TESTNUMBER %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -49,11 +49,11 @@ Accept: */*
</protocol>
-<file1 name="log/outfile%TESTNUMBER">
+<file1 name="%LOGDIR/outfile%TESTNUMBER">
12345
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
diff --git a/tests/data/test1368 b/tests/data/test1368
index 629a635d9..1d6d181b0 100644
--- a/tests/data/test1368
+++ b/tests/data/test1368
@@ -31,10 +31,10 @@ http
HTTP GET -o fname -J without Content-Disposition, -D file
</name>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -J -o log/outfile%TESTNUMBER -D log/heads%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -J -o %LOGDIR/outfile%TESTNUMBER -D %LOGDIR/heads%TESTNUMBER
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/%TESTNUMBER
</postcheck>
</client>
@@ -49,11 +49,11 @@ Accept: */*
</protocol>
-<file1 name="log/outfile%TESTNUMBER">
+<file1 name="%LOGDIR/outfile%TESTNUMBER">
12345
</file1>
-<file2 name="log/heads%TESTNUMBER">
+<file2 name="%LOGDIR/heads%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -63,7 +63,7 @@ Content-Type: text/html
</file2>
-<file3 name="log/stdout%TESTNUMBER">
+<file3 name="%LOGDIR/stdout%TESTNUMBER">
</file3>
</verify>
diff --git a/tests/data/test1369 b/tests/data/test1369
index 08665d12d..48fd31806 100644
--- a/tests/data/test1369
+++ b/tests/data/test1369
@@ -31,10 +31,10 @@ http
HTTP GET -o fname -J without Content-Disposition, -D stdout
</name>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -J -o log/outfile%TESTNUMBER -D -
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -J -o %LOGDIR/outfile%TESTNUMBER -D -
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/%TESTNUMBER
</postcheck>
</client>
@@ -49,11 +49,11 @@ Accept: */*
</protocol>
-<file1 name="log/outfile%TESTNUMBER">
+<file1 name="%LOGDIR/outfile%TESTNUMBER">
12345
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
diff --git a/tests/data/test137 b/tests/data/test137
index 7766f09ff..33b93589e 100644
--- a/tests/data/test137
+++ b/tests/data/test137
@@ -21,10 +21,10 @@ RETRNOSIZE
<server>
ftp
</server>
- <name>
+<name>
FTP download without size in RETR string
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/blalbla/lululul/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1370 b/tests/data/test1370
index 96e7e7457..d76940143 100644
--- a/tests/data/test1370
+++ b/tests/data/test1370
@@ -32,10 +32,10 @@ http
HTTP GET -o fname -J and Content-Disposition, -D file
</name>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -J -o log/outfile%TESTNUMBER -D log/heads%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -J -o %LOGDIR/outfile%TESTNUMBER -D %LOGDIR/heads%TESTNUMBER
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/%TESTNUMBER %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -50,11 +50,11 @@ Accept: */*
</protocol>
-<file1 name="log/outfile%TESTNUMBER">
+<file1 name="%LOGDIR/outfile%TESTNUMBER">
12345
</file1>
-<file2 name="log/heads%TESTNUMBER">
+<file2 name="%LOGDIR/heads%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -65,7 +65,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
</file2>
-<file3 name="log/stdout%TESTNUMBER">
+<file3 name="%LOGDIR/stdout%TESTNUMBER">
</file3>
</verify>
diff --git a/tests/data/test1371 b/tests/data/test1371
index aa5c69a75..8565363b9 100644
--- a/tests/data/test1371
+++ b/tests/data/test1371
@@ -32,10 +32,10 @@ http
HTTP GET -o fname -J and Content-Disposition, -D stdout
</name>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -J -o log/outfile%TESTNUMBER -D -
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -J -o %LOGDIR/outfile%TESTNUMBER -D -
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/%TESTNUMBER %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -50,11 +50,11 @@ Accept: */*
</protocol>
-<file1 name="log/outfile%TESTNUMBER">
+<file1 name="%LOGDIR/outfile%TESTNUMBER">
12345
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
diff --git a/tests/data/test1372 b/tests/data/test1372
index 29c478cdf..76b367132 100644
--- a/tests/data/test1372
+++ b/tests/data/test1372
@@ -30,10 +30,10 @@ http
HTTP GET -o fname -i without Content-Disposition, -D file
</name>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -i -o log/outfile%TESTNUMBER -D log/heads%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -i -o %LOGDIR/outfile%TESTNUMBER -D %LOGDIR/heads%TESTNUMBER
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/%TESTNUMBER
</postcheck>
</client>
@@ -48,7 +48,7 @@ Accept: */*
</protocol>
-<file1 name="log/outfile%TESTNUMBER">
+<file1 name="%LOGDIR/outfile%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -59,7 +59,7 @@ Content-Type: text/html
12345
</file1>
-<file2 name="log/heads%TESTNUMBER">
+<file2 name="%LOGDIR/heads%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -69,7 +69,7 @@ Content-Type: text/html
</file2>
-<file3 name="log/stdout%TESTNUMBER">
+<file3 name="%LOGDIR/stdout%TESTNUMBER">
</file3>
</verify>
diff --git a/tests/data/test1373 b/tests/data/test1373
index b4c737d68..c475deb9f 100644
--- a/tests/data/test1373
+++ b/tests/data/test1373
@@ -30,10 +30,10 @@ http
HTTP GET -o fname -i without Content-Disposition, -D stdout
</name>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -i -o log/outfile%TESTNUMBER -D -
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -i -o %LOGDIR/outfile%TESTNUMBER -D -
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/%TESTNUMBER
</postcheck>
</client>
@@ -48,7 +48,7 @@ Accept: */*
</protocol>
-<file1 name="log/outfile%TESTNUMBER">
+<file1 name="%LOGDIR/outfile%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -59,7 +59,7 @@ Content-Type: text/html
12345
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
diff --git a/tests/data/test1374 b/tests/data/test1374
index 07bd3bb5a..aa2b3e346 100644
--- a/tests/data/test1374
+++ b/tests/data/test1374
@@ -31,10 +31,10 @@ http
HTTP GET -o fname -i and Content-Disposition, -D file
</name>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -i -o log/outfile%TESTNUMBER -D log/heads%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -i -o %LOGDIR/outfile%TESTNUMBER -D %LOGDIR/heads%TESTNUMBER
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/%TESTNUMBER %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -49,7 +49,7 @@ Accept: */*
</protocol>
-<file1 name="log/outfile%TESTNUMBER">
+<file1 name="%LOGDIR/outfile%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -61,7 +61,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
12345
</file1>
-<file2 name="log/heads%TESTNUMBER">
+<file2 name="%LOGDIR/heads%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -72,7 +72,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
</file2>
-<file3 name="log/stdout%TESTNUMBER">
+<file3 name="%LOGDIR/stdout%TESTNUMBER">
</file3>
</verify>
diff --git a/tests/data/test1375 b/tests/data/test1375
index 2acdb54a1..6df552636 100644
--- a/tests/data/test1375
+++ b/tests/data/test1375
@@ -31,10 +31,10 @@ http
HTTP GET -o fname -i and Content-Disposition, -D stdout
</name>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -i -o log/outfile%TESTNUMBER -D -
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -i -o %LOGDIR/outfile%TESTNUMBER -D -
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/%TESTNUMBER %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -49,7 +49,7 @@ Accept: */*
</protocol>
-<file1 name="log/outfile%TESTNUMBER">
+<file1 name="%LOGDIR/outfile%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -61,7 +61,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
12345
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
diff --git a/tests/data/test1376 b/tests/data/test1376
index f81f35fe3..f3d36e0af 100644
--- a/tests/data/test1376
+++ b/tests/data/test1376
@@ -30,10 +30,10 @@ http
HTTP GET -o fname -i without Content-Disposition, without -D
</name>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -i -o log/outfile%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -i -o %LOGDIR/outfile%TESTNUMBER
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/%TESTNUMBER
</postcheck>
</client>
@@ -48,7 +48,7 @@ Accept: */*
</protocol>
-<file1 name="log/outfile%TESTNUMBER">
+<file1 name="%LOGDIR/outfile%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -59,7 +59,7 @@ Content-Type: text/html
12345
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
</file2>
</verify>
diff --git a/tests/data/test1377 b/tests/data/test1377
index 745f08f48..d1a6b7213 100644
--- a/tests/data/test1377
+++ b/tests/data/test1377
@@ -31,10 +31,10 @@ http
HTTP GET -o fname -i and Content-Disposition, without -D
</name>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -i -o log/outfile%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -i -o %LOGDIR/outfile%TESTNUMBER
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/%TESTNUMBER %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -49,7 +49,7 @@ Accept: */*
</protocol>
-<file1 name="log/outfile%TESTNUMBER">
+<file1 name="%LOGDIR/outfile%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -61,7 +61,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
12345
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
</file2>
</verify>
diff --git a/tests/data/test1378 b/tests/data/test1378
index d04e740bf..7348a3f17 100644
--- a/tests/data/test1378
+++ b/tests/data/test1378
@@ -23,10 +23,10 @@ ftp
FTP DL, file without Content-Disposition inside, using -o fname
</name>
<command option="no-output,no-include">
-ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o log/download%TESTNUMBER
+ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o %LOGDIR/download%TESTNUMBER
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/file%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/file%TESTNUMBER
</postcheck>
</client>
@@ -44,12 +44,12 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/download%TESTNUMBER">
+<file1 name="%LOGDIR/download%TESTNUMBER">
fooo
mooo
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
</file2>
</verify>
diff --git a/tests/data/test1379 b/tests/data/test1379
index e611ac6b8..0b8d20ae0 100644
--- a/tests/data/test1379
+++ b/tests/data/test1379
@@ -23,10 +23,10 @@ ftp
FTP DL, file without C-D inside, using -o fname -D file
</name>
<command option="no-output,no-include">
-ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o log/download%TESTNUMBER -D log/heads%TESTNUMBER
+ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o %LOGDIR/download%TESTNUMBER -D %LOGDIR/heads%TESTNUMBER
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/file%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/file%TESTNUMBER
</postcheck>
</client>
@@ -44,12 +44,12 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/download%TESTNUMBER">
+<file1 name="%LOGDIR/download%TESTNUMBER">
fooo
mooo
</file1>
-<file2 name="log/heads%TESTNUMBER">
+<file2 name="%LOGDIR/heads%TESTNUMBER">
220- _ _ ____ _
220- ___| | | | _ \| |
220- / __| | | | |_) | |
@@ -69,7 +69,7 @@ mooo
s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/
</stripfile2>
-<file3 name="log/stdout%TESTNUMBER">
+<file3 name="%LOGDIR/stdout%TESTNUMBER">
</file3>
</verify>
diff --git a/tests/data/test138 b/tests/data/test138
index f70eb078e..db3b6ec7d 100644
--- a/tests/data/test138
+++ b/tests/data/test138
@@ -24,10 +24,10 @@ REPLY SIZE 500 command not understood
<server>
ftp
</server>
- <name>
+<name>
FTP download without size in RETR string and no SIZE command
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/blalbla/lululul/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1380 b/tests/data/test1380
index 3cc52613b..187dd8cdb 100644
--- a/tests/data/test1380
+++ b/tests/data/test1380
@@ -23,10 +23,10 @@ ftp
FTP DL, file without C-D inside, using -o fname -D stdout
</name>
<command option="no-output,no-include">
-ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o log/download%TESTNUMBER -D -
+ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o %LOGDIR/download%TESTNUMBER -D -
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/file%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/file%TESTNUMBER
</postcheck>
</client>
@@ -44,12 +44,12 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/download%TESTNUMBER">
+<file1 name="%LOGDIR/download%TESTNUMBER">
fooo
mooo
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
220- _ _ ____ _
220- ___| | | | _ \| |
220- / __| | | | |_) | |
diff --git a/tests/data/test1381 b/tests/data/test1381
index a62ee4748..4ba20eb3e 100644
--- a/tests/data/test1381
+++ b/tests/data/test1381
@@ -24,10 +24,10 @@ ftp
FTP DL, file without C-D inside, using -o fname -J -D file
</name>
<command option="no-output,no-include">
-ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o log/download%TESTNUMBER -J -D log/heads%TESTNUMBER
+ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o %LOGDIR/download%TESTNUMBER -J -D %LOGDIR/heads%TESTNUMBER
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/file%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/file%TESTNUMBER
</postcheck>
</client>
@@ -45,12 +45,12 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/download%TESTNUMBER">
+<file1 name="%LOGDIR/download%TESTNUMBER">
fooo
mooo
</file1>
-<file2 name="log/heads%TESTNUMBER">
+<file2 name="%LOGDIR/heads%TESTNUMBER">
220- _ _ ____ _
220- ___| | | | _ \| |
220- / __| | | | |_) | |
@@ -70,7 +70,7 @@ mooo
s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/
</stripfile2>
-<file3 name="log/stdout%TESTNUMBER">
+<file3 name="%LOGDIR/stdout%TESTNUMBER">
</file3>
</verify>
diff --git a/tests/data/test1382 b/tests/data/test1382
index 8c49877b1..26ff7acbe 100644
--- a/tests/data/test1382
+++ b/tests/data/test1382
@@ -24,10 +24,10 @@ ftp
FTP DL, file without C-D inside, using -o fname -J -D stdout
</name>
<command option="no-output,no-include">
-ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o log/download%TESTNUMBER -J -D -
+ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o %LOGDIR/download%TESTNUMBER -J -D -
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/file%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/file%TESTNUMBER
</postcheck>
</client>
@@ -45,12 +45,12 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/download%TESTNUMBER">
+<file1 name="%LOGDIR/download%TESTNUMBER">
fooo
mooo
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
220- _ _ ____ _
220- ___| | | | _ \| |
220- / __| | | | |_) | |
diff --git a/tests/data/test1383 b/tests/data/test1383
index 34f3cf6bc..d4c5c8285 100644
--- a/tests/data/test1383
+++ b/tests/data/test1383
@@ -23,10 +23,10 @@ ftp
FTP DL, file without C-D inside, using -o fname -i -D file
</name>
<command option="no-output,no-include">
-ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o log/download%TESTNUMBER -i -D log/heads%TESTNUMBER
+ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o %LOGDIR/download%TESTNUMBER -i -D %LOGDIR/heads%TESTNUMBER
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/file%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/file%TESTNUMBER
</postcheck>
</client>
@@ -44,12 +44,12 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/download%TESTNUMBER">
+<file1 name="%LOGDIR/download%TESTNUMBER">
fooo
mooo
</file1>
-<file2 name="log/heads%TESTNUMBER">
+<file2 name="%LOGDIR/heads%TESTNUMBER">
220- _ _ ____ _
220- ___| | | | _ \| |
220- / __| | | | |_) | |
@@ -69,7 +69,7 @@ mooo
s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/
</stripfile2>
-<file3 name="log/stdout%TESTNUMBER">
+<file3 name="%LOGDIR/stdout%TESTNUMBER">
</file3>
</verify>
diff --git a/tests/data/test1384 b/tests/data/test1384
index f27d59a75..af7afdf76 100644
--- a/tests/data/test1384
+++ b/tests/data/test1384
@@ -23,10 +23,10 @@ ftp
FTP DL, file without C-D inside, using -o fname -i -D stdout
</name>
<command option="no-output,no-include">
-ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o log/download%TESTNUMBER -i -D -
+ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o %LOGDIR/download%TESTNUMBER -i -D -
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/file%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/file%TESTNUMBER
</postcheck>
</client>
@@ -44,12 +44,12 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/download%TESTNUMBER">
+<file1 name="%LOGDIR/download%TESTNUMBER">
fooo
mooo
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
220- _ _ ____ _
220- ___| | | | _ \| |
220- / __| | | | |_) | |
diff --git a/tests/data/test1385 b/tests/data/test1385
index e35c674b3..d2038ee92 100644
--- a/tests/data/test1385
+++ b/tests/data/test1385
@@ -23,10 +23,10 @@ ftp
FTP DL, file without C-D inside, using -o fname -i, without -D
</name>
<command option="no-output,no-include">
-ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o log/download%TESTNUMBER -i
+ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o %LOGDIR/download%TESTNUMBER -i
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/file%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/file%TESTNUMBER
</postcheck>
</client>
@@ -44,12 +44,12 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/download%TESTNUMBER">
+<file1 name="%LOGDIR/download%TESTNUMBER">
fooo
mooo
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
</file2>
</verify>
diff --git a/tests/data/test1386 b/tests/data/test1386
index 471493b44..0aaf66419 100644
--- a/tests/data/test1386
+++ b/tests/data/test1386
@@ -31,10 +31,10 @@ ftp
FTP DL, file with Content-Disposition inside, using -o fname
</name>
<command option="no-output,no-include">
-ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o log/download%TESTNUMBER
+ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o %LOGDIR/download%TESTNUMBER
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/file%TESTNUMBER log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/file%TESTNUMBER %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -52,7 +52,7 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/download%TESTNUMBER">
+<file1 name="%LOGDIR/download%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -64,7 +64,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
MOOOO
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
</file2>
</verify>
diff --git a/tests/data/test1387 b/tests/data/test1387
index c8f5ae6d7..0f124d870 100644
--- a/tests/data/test1387
+++ b/tests/data/test1387
@@ -31,10 +31,10 @@ ftp
FTP DL, file with C-D inside, using -o fname -D file
</name>
<command option="no-output,no-include">
-ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o log/download%TESTNUMBER -D log/heads%TESTNUMBER
+ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o %LOGDIR/download%TESTNUMBER -D %LOGDIR/heads%TESTNUMBER
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/file%TESTNUMBER log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/file%TESTNUMBER %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -52,7 +52,7 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/download%TESTNUMBER">
+<file1 name="%LOGDIR/download%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -64,7 +64,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
MOOOO
</file1>
-<file2 name="log/heads%TESTNUMBER">
+<file2 name="%LOGDIR/heads%TESTNUMBER">
220- _ _ ____ _
220- ___| | | | _ \| |
220- / __| | | | |_) | |
@@ -84,7 +84,7 @@ MOOOO
s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/
</stripfile2>
-<file3 name="log/stdout%TESTNUMBER">
+<file3 name="%LOGDIR/stdout%TESTNUMBER">
</file3>
</verify>
diff --git a/tests/data/test1388 b/tests/data/test1388
index 479ca42f0..d78844e77 100644
--- a/tests/data/test1388
+++ b/tests/data/test1388
@@ -31,10 +31,10 @@ ftp
FTP DL, file with C-D inside, using -o fname -D stdout
</name>
<command option="no-output,no-include">
-ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o log/download%TESTNUMBER -D -
+ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o %LOGDIR/download%TESTNUMBER -D -
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/file%TESTNUMBER log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/file%TESTNUMBER %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -52,7 +52,7 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/download%TESTNUMBER">
+<file1 name="%LOGDIR/download%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -64,7 +64,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
MOOOO
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
220- _ _ ____ _
220- ___| | | | _ \| |
220- / __| | | | |_) | |
diff --git a/tests/data/test1389 b/tests/data/test1389
index eb35d39f5..0863a4013 100644
--- a/tests/data/test1389
+++ b/tests/data/test1389
@@ -32,10 +32,10 @@ ftp
FTP DL, file with C-D inside, using -o fname -J -D file
</name>
<command option="no-output,no-include">
-ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o log/download%TESTNUMBER -J -D log/heads%TESTNUMBER
+ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o %LOGDIR/download%TESTNUMBER -J -D %LOGDIR/heads%TESTNUMBER
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/file%TESTNUMBER log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/file%TESTNUMBER %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -53,7 +53,7 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/download%TESTNUMBER">
+<file1 name="%LOGDIR/download%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -65,7 +65,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
MOOOO
</file1>
-<file2 name="log/heads%TESTNUMBER">
+<file2 name="%LOGDIR/heads%TESTNUMBER">
220- _ _ ____ _
220- ___| | | | _ \| |
220- / __| | | | |_) | |
@@ -85,7 +85,7 @@ MOOOO
s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/
</stripfile2>
-<file3 name="log/stdout%TESTNUMBER">
+<file3 name="%LOGDIR/stdout%TESTNUMBER">
</file3>
</verify>
diff --git a/tests/data/test139 b/tests/data/test139
index ab04953c5..160f628e2 100644
--- a/tests/data/test139
+++ b/tests/data/test139
@@ -21,10 +21,10 @@ this is file contents
<server>
ftp
</server>
- <name>
+<name>
FTP download a newer file with -z
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/blalbla/%TESTNUMBER -z "1 jan 1989"
</command>
</client>
diff --git a/tests/data/test1390 b/tests/data/test1390
index fc30849d3..a856d1e8d 100644
--- a/tests/data/test1390
+++ b/tests/data/test1390
@@ -32,10 +32,10 @@ ftp
FTP DL, file with C-D inside, using -o fname -J -D stdout
</name>
<command option="no-output,no-include">
-ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o log/download%TESTNUMBER -J -D -
+ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o %LOGDIR/download%TESTNUMBER -J -D -
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/file%TESTNUMBER log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/file%TESTNUMBER %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -53,7 +53,7 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/download%TESTNUMBER">
+<file1 name="%LOGDIR/download%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -65,7 +65,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
MOOOO
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
220- _ _ ____ _
220- ___| | | | _ \| |
220- / __| | | | |_) | |
diff --git a/tests/data/test1391 b/tests/data/test1391
index ce28e5aa7..ae1495eec 100644
--- a/tests/data/test1391
+++ b/tests/data/test1391
@@ -31,10 +31,10 @@ ftp
FTP DL, file with C-D inside, using -o fname -i -D file
</name>
<command option="no-output,no-include">
-ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o log/download%TESTNUMBER -i -D log/heads%TESTNUMBER
+ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o %LOGDIR/download%TESTNUMBER -i -D %LOGDIR/heads%TESTNUMBER
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/file%TESTNUMBER log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/file%TESTNUMBER %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -52,7 +52,7 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/download%TESTNUMBER">
+<file1 name="%LOGDIR/download%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -64,7 +64,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
MOOOO
</file1>
-<file2 name="log/heads%TESTNUMBER">
+<file2 name="%LOGDIR/heads%TESTNUMBER">
220- _ _ ____ _
220- ___| | | | _ \| |
220- / __| | | | |_) | |
@@ -84,7 +84,7 @@ MOOOO
s/^(229 Entering Passive Mode \().*(\).*)/${1}stripped${2}/
</stripfile2>
-<file3 name="log/stdout%TESTNUMBER">
+<file3 name="%LOGDIR/stdout%TESTNUMBER">
</file3>
</verify>
diff --git a/tests/data/test1392 b/tests/data/test1392
index 99e13c349..f715fe8b3 100644
--- a/tests/data/test1392
+++ b/tests/data/test1392
@@ -31,10 +31,10 @@ ftp
FTP DL, file with C-D inside, using -o fname -i -D stdout
</name>
<command option="no-output,no-include">
-ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o log/download%TESTNUMBER -i -D -
+ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o %LOGDIR/download%TESTNUMBER -i -D -
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/file%TESTNUMBER log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/file%TESTNUMBER %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -52,7 +52,7 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/download%TESTNUMBER">
+<file1 name="%LOGDIR/download%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -64,7 +64,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
MOOOO
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
220- _ _ ____ _
220- ___| | | | _ \| |
220- / __| | | | |_) | |
diff --git a/tests/data/test1393 b/tests/data/test1393
index 1402eaf4c..dc7a6f934 100644
--- a/tests/data/test1393
+++ b/tests/data/test1393
@@ -31,10 +31,10 @@ ftp
FTP DL, file with C-D inside, using -o fname -i, without -D
</name>
<command option="no-output,no-include">
-ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o log/download%TESTNUMBER -i
+ftp://%HOSTIP:%FTPPORT/path/file%TESTNUMBER -o %LOGDIR/download%TESTNUMBER -i
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/file%TESTNUMBER log/name%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/file%TESTNUMBER %LOGDIR/name%TESTNUMBER
</postcheck>
</client>
@@ -52,7 +52,7 @@ RETR file%TESTNUMBER
QUIT
</protocol>
-<file1 name="log/download%TESTNUMBER">
+<file1 name="%LOGDIR/download%TESTNUMBER">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -64,7 +64,7 @@ Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange
MOOOO
</file1>
-<file2 name="log/stdout%TESTNUMBER">
+<file2 name="%LOGDIR/stdout%TESTNUMBER">
</file2>
</verify>
diff --git a/tests/data/test1394 b/tests/data/test1394
index d3ffb2d33..30be0c85a 100644
--- a/tests/data/test1394
+++ b/tests/data/test1394
@@ -14,9 +14,9 @@ none
<features>
unittest
</features>
- <name>
+<name>
unit test for parse_cert_parameter()
- </name>
+</name>
</client>
<verify>
diff --git a/tests/data/test1395 b/tests/data/test1395
index 409e0d631..a73e043ca 100644
--- a/tests/data/test1395
+++ b/tests/data/test1395
@@ -14,8 +14,8 @@ none
<features>
unittest
</features>
- <name>
+<name>
Curl_dedotdotify
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test1396 b/tests/data/test1396
index d8b432d8b..d65ab2552 100644
--- a/tests/data/test1396
+++ b/tests/data/test1396
@@ -16,9 +16,9 @@ none
<features>
unittest
</features>
- <name>
+<name>
curl_easy_escape and curl_easy_unescape
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test1397 b/tests/data/test1397
index 84f962abe..f31b2c2a3 100644
--- a/tests/data/test1397
+++ b/tests/data/test1397
@@ -2,8 +2,7 @@
<info>
<keywords>
unittest
-ssl
-wildcard
+Curl_cert_hostcheck
</keywords>
</info>
@@ -16,9 +15,8 @@ none
<features>
unittest
</features>
- <name>
-Check wildcard certificate matching function Curl_cert_hostcheck
- </name>
+<name>
+Curl_cert_hostcheck unit tests
+</name>
</client>
-
</testcase>
diff --git a/tests/data/test1398 b/tests/data/test1398
index 436cac82d..f77e32174 100644
--- a/tests/data/test1398
+++ b/tests/data/test1398
@@ -15,9 +15,9 @@ none
<features>
unittest
</features>
- <name>
+<name>
curl_msnprintf unit tests
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test1399 b/tests/data/test1399
index 6d6ec7a5b..f8a7c19bb 100644
--- a/tests/data/test1399
+++ b/tests/data/test1399
@@ -15,8 +15,8 @@ none
<features>
unittest
</features>
- <name>
+<name>
Curl_pgrsTime unit tests
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test14 b/tests/data/test14
index f2bf61004..1bffda78d 100644
--- a/tests/data/test14
+++ b/tests/data/test14
@@ -20,10 +20,10 @@ Connection: close
<server>
http
</server>
- <name>
+<name>
HTTP HEAD with Connection: close
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -i --head
</command>
</client>
diff --git a/tests/data/test140 b/tests/data/test140
index 36a01cc1c..5e29f5c7c 100644
--- a/tests/data/test140
+++ b/tests/data/test140
@@ -20,10 +20,10 @@ FTP
<server>
ftp
</server>
- <name>
+<name>
FTP download file with -z, expected to not transfer
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/blalbla/%TESTNUMBER -z "1 jan 2004"
</command>
</client>
diff --git a/tests/data/test1400 b/tests/data/test1400
index a92b2f22e..226477160 100644
--- a/tests/data/test1400
+++ b/tests/data/test1400
@@ -24,14 +24,14 @@ Connection: close
<server>
http
</server>
- <name>
+<name>
--libcurl for simple HTTP GET
- </name>
+</name>
<setenv>
SSL_CERT_FILE=
</setenv>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER --libcurl log/test%TESTNUMBER.c
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER --libcurl %LOGDIR/test%TESTNUMBER.c
</command>
</client>
@@ -55,7 +55,7 @@ $_ = '' if /CURLOPT_HTTP_VERSION/
$_ = '' if /CURLOPT_HTTP09_ALLOWED/
$_ = '' if /CURLOPT_INTERLEAVEDATA/
</stripfile>
-<file name="log/test%TESTNUMBER.c" mode="text">
+<file name="%LOGDIR/test%TESTNUMBER.c" mode="text">
/********* Sample code generated by the curl command line tool **********
* All curl_easy_setopt() options are documented at:
* https://curl.se/libcurl/c/curl_easy_setopt.html
diff --git a/tests/data/test1401 b/tests/data/test1401
index bbd3e7b64..166d444f9 100644
--- a/tests/data/test1401
+++ b/tests/data/test1401
@@ -28,19 +28,20 @@ Connection: close
<server>
http
</server>
- <name>
+<name>
--libcurl for GET with various options
- </name>
+</name>
<features>
http
ftp
file
+cookies
</features>
<setenv>
SSL_CERT_FILE=
</setenv>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER --libcurl log/test%TESTNUMBER.c --basic -u fake:user -H "X-Files: Mulder" -H "X-Men: cyclops, iceman" -A MyUA -b chocolate=chip --proto "=http,ftp,file"
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER --libcurl %LOGDIR/test%TESTNUMBER.c --basic -u fake:user -H "X-Files: Mulder" -H "X-Men: cyclops, iceman" -A MyUA -b chocolate=chip --proto "=http,ftp,file"
</command>
</client>
@@ -65,7 +66,7 @@ $_ = '' if /CURLOPT_SSH_KNOWNHOSTS/
$_ = '' if /CURLOPT_HTTP_VERSION/
$_ = '' if /CURLOPT_INTERLEAVEDATA/
</stripfile>
-<file name="log/test%TESTNUMBER.c" mode="text">
+<file name="%LOGDIR/test%TESTNUMBER.c" mode="text">
/********* Sample code generated by the curl command line tool **********
* All curl_easy_setopt() options are documented at:
* https://curl.se/libcurl/c/curl_easy_setopt.html
diff --git a/tests/data/test1402 b/tests/data/test1402
index 667be124c..6332fa168 100644
--- a/tests/data/test1402
+++ b/tests/data/test1402
@@ -25,14 +25,14 @@ Connection: close
<server>
http
</server>
- <name>
+<name>
--libcurl for simple POST
- </name>
+</name>
<setenv>
SSL_CERT_FILE=
</setenv>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER --libcurl log/test%TESTNUMBER.c -d "foo=bar" -d "baz=quux"
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER --libcurl %LOGDIR/test%TESTNUMBER.c -d "foo=bar" -d "baz=quux"
</command>
</client>
@@ -58,7 +58,7 @@ $_ = '' if /CURLOPT_SSH_KNOWNHOSTS/
$_ = '' if /CURLOPT_HTTP_VERSION/
$_ = '' if /CURLOPT_INTERLEAVEDATA/
</stripfile>
-<file name="log/test%TESTNUMBER.c" mode="text">
+<file name="%LOGDIR/test%TESTNUMBER.c" mode="text">
/********* Sample code generated by the curl command line tool **********
* All curl_easy_setopt() options are documented at:
* https://curl.se/libcurl/c/curl_easy_setopt.html
diff --git a/tests/data/test1403 b/tests/data/test1403
index 5ecf2d28c..fb4882c63 100644
--- a/tests/data/test1403
+++ b/tests/data/test1403
@@ -25,14 +25,14 @@ Connection: close
<server>
http
</server>
- <name>
+<name>
--libcurl for GET with query
- </name>
+</name>
<setenv>
SSL_CERT_FILE=
</setenv>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER --libcurl log/test%TESTNUMBER.c -G -d "foo=bar" -d "baz=quux"
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER --libcurl %LOGDIR/test%TESTNUMBER.c -G -d "foo=bar" -d "baz=quux"
</command>
</client>
@@ -55,7 +55,7 @@ $_ = '' if /CURLOPT_SSH_KNOWNHOSTS/
$_ = '' if /CURLOPT_HTTP_VERSION/
$_ = '' if /CURLOPT_INTERLEAVEDATA/
</stripfile>
-<file name="log/test%TESTNUMBER.c" mode="text">
+<file name="%LOGDIR/test%TESTNUMBER.c" mode="text">
/********* Sample code generated by the curl command line tool **********
* All curl_easy_setopt() options are documented at:
* https://curl.se/libcurl/c/curl_easy_setopt.html
diff --git a/tests/data/test1404 b/tests/data/test1404
index ae37c3065..648b7b283 100644
--- a/tests/data/test1404
+++ b/tests/data/test1404
@@ -29,17 +29,17 @@ Mime
<server>
http
</server>
- <name>
+<name>
--libcurl for HTTP RFC1867-type formposting - -F with 3 files, one with explicit type & encoder
- </name>
+</name>
<setenv>
SSL_CERT_FILE=
</setenv>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -F name=value -F 'file=@log/test%TESTNUMBER.txt,log/test%TESTNUMBER.txt;type=magic/content;encoder=8bit,log/test%TESTNUMBER.txt;headers=X-testheader-1: header 1;headers=X-testheader-2: header 2' --libcurl log/test%TESTNUMBER.c
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -F name=value -F 'file=@%LOGDIR/test%TESTNUMBER.txt,%LOGDIR/test%TESTNUMBER.txt;type=magic/content;encoder=8bit,%LOGDIR/test%TESTNUMBER.txt;headers=X-testheader-1: header 1;headers=X-testheader-2: header 2' --libcurl %LOGDIR/test%TESTNUMBER.c
</command>
# We create this file before the command is invoked!
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
dummy data
</file>
</client>
@@ -54,7 +54,7 @@ POST /we/want/%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 882
+Content-Length: 930
Content-Type: multipart/form-data; boundary=----------------------------9ef8d6205763
------------------------------9ef8d6205763
@@ -101,7 +101,7 @@ $_ = '' if /CURLOPT_INTERLEAVEDATA/
# CURL_DOES_CONVERSION generates an extra comment.
$_ = '' if /\/\* "value" \*\//
</stripfile>
-<file name="log/test%TESTNUMBER.c" mode="text">
+<file name="%LOGDIR/test%TESTNUMBER.c" mode="text">
/********* Sample code generated by the curl command line tool **********
* All curl_easy_setopt() options are documented at:
* https://curl.se/libcurl/c/curl_easy_setopt.html
@@ -134,13 +134,13 @@ int main(int argc, char *argv[])
part1 = curl_mime_addpart(mime1);
mime2 = curl_mime_init(hnd);
part2 = curl_mime_addpart(mime2);
- curl_mime_filedata(part2, "log/test%TESTNUMBER.txt");
+ curl_mime_filedata(part2, "%LOGDIR/test%TESTNUMBER.txt");
part2 = curl_mime_addpart(mime2);
- curl_mime_filedata(part2, "log/test%TESTNUMBER.txt");
+ curl_mime_filedata(part2, "%LOGDIR/test%TESTNUMBER.txt");
curl_mime_encoder(part2, "8bit");
curl_mime_type(part2, "magic/content");
part2 = curl_mime_addpart(mime2);
- curl_mime_filedata(part2, "log/test%TESTNUMBER.txt");
+ curl_mime_filedata(part2, "%LOGDIR/test%TESTNUMBER.txt");
curl_mime_headers(part2, slist1, 1);
slist1 = NULL;
curl_mime_subparts(part1, mime2);
diff --git a/tests/data/test1405 b/tests/data/test1405
index 31b7d6971..8a13a688a 100644
--- a/tests/data/test1405
+++ b/tests/data/test1405
@@ -29,14 +29,14 @@ REPLY FAIL 500 this might not be a failure!
<server>
ftp
</server>
- <name>
+<name>
--libcurl for FTP with quote ops
- </name>
+</name>
<setenv>
SSL_CERT_FILE=
</setenv>
- <command>
-ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -Q "NOOP 1" -Q "+NOOP 2" -Q "-NOOP 3" -Q "*FAIL" -Q "+*FAIL HARD" --libcurl log/test%TESTNUMBER.c
+<command>
+ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -Q "NOOP 1" -Q "+NOOP 2" -Q "-NOOP 3" -Q "*FAIL" -Q "+*FAIL HARD" --libcurl %LOGDIR/test%TESTNUMBER.c
</command>
</client>
@@ -58,7 +58,7 @@ RETR %TESTNUMBER
NOOP 3
QUIT
</protocol>
-<file name="log/test%TESTNUMBER.c" mode="text">
+<file name="%LOGDIR/test%TESTNUMBER.c" mode="text">
/********* Sample code generated by the curl command line tool **********
* All curl_easy_setopt() options are documented at:
* https://curl.se/libcurl/c/curl_easy_setopt.html
diff --git a/tests/data/test1406 b/tests/data/test1406
index 0be9bfa61..6207dfcae 100644
--- a/tests/data/test1406
+++ b/tests/data/test1406
@@ -22,21 +22,25 @@ CAPA SIZE
<server>
smtp
</server>
- <name>
+<name>
--libcurl for SMTP
- </name>
+</name>
<setenv>
SSL_CERT_FILE=
</setenv>
-<file name="log/test%TESTNUMBER.eml">
+<file name="%LOGDIR/test%TESTNUMBER.eml">
From: different
To: another
body
</file>
- <command>
-smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient.one@example.com --mail-rcpt recipient.two@example.com --mail-from sender@example.com -T log/test%TESTNUMBER.eml --libcurl log/test%TESTNUMBER.c
+<command>
+smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient.one@example.com --mail-rcpt recipient.two@example.com --mail-from sender@example.com -T %LOGDIR/test%TESTNUMBER.eml --libcurl %LOGDIR/test%TESTNUMBER.c
</command>
+# Need ftp so the FTP options are written in the --libcurl template
+<features>
+ftp
+</features>
</client>
#
@@ -57,7 +61,7 @@ To: another
body
.
</upload>
-<file name="log/test%TESTNUMBER.c" mode="text">
+<file name="%LOGDIR/test%TESTNUMBER.c" mode="text">
/********* Sample code generated by the curl command line tool **********
* All curl_easy_setopt() options are documented at:
* https://curl.se/libcurl/c/curl_easy_setopt.html
diff --git a/tests/data/test1407 b/tests/data/test1407
index d5bfb7f5d..aa8078726 100644
--- a/tests/data/test1407
+++ b/tests/data/test1407
@@ -23,15 +23,19 @@ REPLY LIST +OK %TESTNUMBER 100\r\n.
<server>
pop3
</server>
- <name>
+<name>
--libcurl for POP3 LIST one message
- </name>
+</name>
<setenv>
SSL_CERT_FILE=
</setenv>
<command>
-pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -l -u user:secret --libcurl log/test%TESTNUMBER.c
+pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -l -u user:secret --libcurl %LOGDIR/test%TESTNUMBER.c
</command>
+# Need ftp so the FTP options are written in the --libcurl template
+<features>
+ftp
+</features>
</client>
#
@@ -44,7 +48,7 @@ PASS secret
LIST %TESTNUMBER
QUIT
</protocol>
-<file name="log/test%TESTNUMBER.c" mode="text">
+<file name="%LOGDIR/test%TESTNUMBER.c" mode="text">
/********* Sample code generated by the curl command line tool **********
* All curl_easy_setopt() options are documented at:
* https://curl.se/libcurl/c/curl_easy_setopt.html
diff --git a/tests/data/test1408 b/tests/data/test1408
index d4f40f72e..925be875b 100644
--- a/tests/data/test1408
+++ b/tests/data/test1408
@@ -39,16 +39,17 @@ Set-Cookie: time=2
# Client-side
<client>
<features>
+cookies
ipv6
</features>
<server>
http-ipv6
</server>
- <name>
+<name>
HTTP receive cookies over IPV6
- </name>
- <command>
--c log/jar%TESTNUMBER -g http://%HOST6IP:%HTTP6PORT/path/%TESTNUMBER0001 http://%HOST6IP:%HTTP6PORT/path/%TESTNUMBER0002
+</name>
+<command>
+-c %LOGDIR/jar%TESTNUMBER -g http://%HOST6IP:%HTTP6PORT/path/%TESTNUMBER0001 http://%HOST6IP:%HTTP6PORT/path/%TESTNUMBER0002
</command>
</client>
diff --git a/tests/data/test1409 b/tests/data/test1409
index 120bf3cf3..6e248ca10 100644
--- a/tests/data/test1409
+++ b/tests/data/test1409
@@ -13,10 +13,10 @@ FAILURE
<server>
none
</server>
- <name>
+<name>
Pass in string to -C
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%NOLISTENPORT/%TESTNUMBER -C wrong
</command>
</client>
diff --git a/tests/data/test141 b/tests/data/test141
index 3fff42d9b..425a98f2a 100644
--- a/tests/data/test141
+++ b/tests/data/test141
@@ -22,10 +22,10 @@ NOBODY
<server>
ftp
</server>
- <name>
+<name>
FTP download info with -I
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/blalbla/%TESTNUMBER -I
</command>
</client>
diff --git a/tests/data/test1410 b/tests/data/test1410
index 65e52d406..0a9f4878b 100644
--- a/tests/data/test1410
+++ b/tests/data/test1410
@@ -13,10 +13,10 @@ FAILURE
<server>
none
</server>
- <name>
+<name>
Pass in negative number to --max-time
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%NOLISTENPORT/%TESTNUMBER --max-time -4
</command>
</client>
diff --git a/tests/data/test1411 b/tests/data/test1411
index a7d23ee2f..bd8a8dd68 100644
--- a/tests/data/test1411
+++ b/tests/data/test1411
@@ -32,14 +32,14 @@ http
</server>
# make sure there's no Expect: 100-continue when there's no file to send!
- <name>
+<name>
HTTP with zero size file PUT
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T log/empty%TESTNUMBER
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T %LOGDIR/empty%TESTNUMBER
</command>
# create an empty file
-<file name="log/empty%TESTNUMBER">
+<file name="%LOGDIR/empty%TESTNUMBER">
</file>
</client>
diff --git a/tests/data/test1412 b/tests/data/test1412
index 20521704c..e4720dcdc 100644
--- a/tests/data/test1412
+++ b/tests/data/test1412
@@ -90,18 +90,12 @@ http
!SSPI
crypto
</features>
- <name>
-HTTP GET with --anyauth with two URLs (picking Digest)
- </name>
- <command>
+<name>
+HTTP GET with --anyauth with two URLs (picking Digest)
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u testuser:testpass --anyauth http://%HOSTIP:%HTTPPORT/%TESTNUMBER0001
</command>
-<file name="log/put%TESTNUMBER">
-This is data we upload with PUT
-a second line
-line three
-four is the number of lines
-</file>
</client>
# Verify data after the test has been "shot"
diff --git a/tests/data/test1413 b/tests/data/test1413
index 920417bae..1ab4c1a81 100644
--- a/tests/data/test1413
+++ b/tests/data/test1413
@@ -45,10 +45,10 @@ body
<server>
http
</server>
- <name>
+<name>
HTTP redirect with fragment in new URL
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/this/%TESTNUMBER -L
</command>
</client>
diff --git a/tests/data/test1414 b/tests/data/test1414
index 33214b04f..4be9b5422 100644
--- a/tests/data/test1414
+++ b/tests/data/test1414
@@ -28,10 +28,10 @@ REPLY EPRT 502 no such command
<server>
ftp
</server>
- <name>
+<name>
FTP PORT without SIZE or EPRT support
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -P -
</command>
</client>
diff --git a/tests/data/test1415 b/tests/data/test1415
index 79b14e6bd..ae07d76f4 100644
--- a/tests/data/test1415
+++ b/tests/data/test1415
@@ -20,6 +20,15 @@ Content-Length: 4
Content-Type: text/html
Funny-head: yesyes
Set-Cookie: test1value=test1; domain=example.com; path=/;
+%if large-time
+Set-Cookie: test2value=test2; expires=Thursday, 31-Dec-2525 00:00:00 GMT; domain=example.com; path=/;
+Set-Cookie: test3value=test3; expires=Monday, 13-Jun-1988 03:04:55 GMT; domain=example.com; path=/;
+Set-Cookie: test4value=test4; expires=Thursday, 31-Dec-2525 00:00:00 GMT; domain=example.com; path=/;
+Set-Cookie: test5value=test5; expires=Monday, 13-Jun-1988 03:04:55 GMT; domain=example.com; path=/;
+Set-Cookie: test6value=test6; expires=Monday, 13-Jun-1988 03:04:55 GMT; domain=example.com; path=/;
+Set-Cookie: test7value=test7; expires=Thursday, 31-Dec-2525 00:00:00 GMT; domain=example.com; path=/;
+Set-Cookie: test8value=test8; expires=Monday, 13-Jun-1988 03:04:55 GMT; domain=example.com; path=/;
+%else
Set-Cookie: test2value=test2; expires=Thursday, 31-Dec-2037 00:00:00 GMT; domain=example.com; path=/;
Set-Cookie: test3value=test3; expires=Monday, 13-Jun-1988 03:04:55 GMT; domain=example.com; path=/;
Set-Cookie: test4value=test4; expires=Thursday, 31-Dec-2037 00:00:00 GMT; domain=example.com; path=/;
@@ -27,6 +36,7 @@ Set-Cookie: test5value=test5; expires=Monday, 13-Jun-1988 03:04:55 GMT; domain=e
Set-Cookie: test6value=test6; expires=Monday, 13-Jun-1988 03:04:55 GMT; domain=example.com; path=/;
Set-Cookie: test7value=test7; expires=Thursday, 31-Dec-2037 00:00:00 GMT; domain=example.com; path=/;
Set-Cookie: test8value=test8; expires=Monday, 13-Jun-1988 03:04:55 GMT; domain=example.com; path=/;
+%endif
boo
</data>
@@ -44,9 +54,10 @@ Delete expired cookies
TZ=GMT
</setenv>
<command>
-http://example.com/we/want/%TESTNUMBER -b none -c log/jar%TESTNUMBER.txt -x %HOSTIP:%HTTPPORT
+http://example.com/we/want/%TESTNUMBER -b none -c %LOGDIR/jar%TESTNUMBER.txt -x %HOSTIP:%HTTPPORT
</command>
<features>
+cookies
proxy
</features>
</client>
@@ -62,14 +73,20 @@ Proxy-Connection: Keep-Alive
</protocol>
-<file name="log/jar%TESTNUMBER.txt" mode="text">
+<file name="%LOGDIR/jar%TESTNUMBER.txt" mode="text">
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
+%if large-time
+.example.com TRUE / FALSE 17545593600 test7value test7
+.example.com TRUE / FALSE 17545593600 test4value test4
+.example.com TRUE / FALSE 17545593600 test2value test2
+%else
.example.com TRUE / FALSE 2145830400 test7value test7
.example.com TRUE / FALSE 2145830400 test4value test4
.example.com TRUE / FALSE 2145830400 test2value test2
+%endif
.example.com TRUE / FALSE 0 test1value test1
</file>
</verify>
diff --git a/tests/data/test1416 b/tests/data/test1416
index f3c6ba590..1af3b61f0 100644
--- a/tests/data/test1416
+++ b/tests/data/test1416
@@ -33,10 +33,10 @@ cccccccccccccccccccccccccccccccc
<server>
http
</server>
- <name>
+<name>
HTTP GET with chunked Transfer-Encoding overflowed chunked size
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1417 b/tests/data/test1417
index a0dd086d5..7c9be16b6 100644
--- a/tests/data/test1417
+++ b/tests/data/test1417
@@ -45,11 +45,11 @@ chunky-trailer: header data
<server>
http
</server>
- <name>
+<name>
HTTP GET with chunked encoding and chunked trailer without CRs
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -D log/heads%TESTNUMBER
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -D %LOGDIR/heads%TESTNUMBER
</command>
</client>
@@ -63,7 +63,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/heads%TESTNUMBER">
+<file name="%LOGDIR/heads%TESTNUMBER">
HTTP/1.1 200 funky chunky!
Server: fakeit/0.9 fakeitbad/1.0
Transfer-Encoding: chunked
diff --git a/tests/data/test1418 b/tests/data/test1418
index 83c38b0f3..748040811 100644
--- a/tests/data/test1418
+++ b/tests/data/test1418
@@ -4,7 +4,7 @@
HTTP
HTTP GET
HTTP NTLM auth
-connection re-use
+connection reuse
</keywords>
</info>
# Server-side
@@ -83,10 +83,10 @@ http
!SSPI
crypto
</features>
- <name>
-HTTP with --anyauth and connection re-use
- </name>
- <command>
+<name>
+HTTP with --anyauth and connection reuse
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u testuser:testpass --anyauth http://%HOSTIP:%HTTPPORT/%TESTNUMBER0003
</command>
</client>
diff --git a/tests/data/test1419 b/tests/data/test1419
index 6be31498a..aada395f8 100644
--- a/tests/data/test1419
+++ b/tests/data/test1419
@@ -4,7 +4,7 @@
HTTP
HTTP GET
HTTP NTLM auth
-connection re-use
+connection reuse
</keywords>
</info>
# Server-side
@@ -41,10 +41,10 @@ Feel free to get it
<server>
http
</server>
- <name>
-HTTP with --anyauth (but no auth!) and connection re-use
- </name>
- <command>
+<name>
+HTTP with --anyauth (but no auth!) and connection reuse
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --anyauth http://%HOSTIP:%HTTPPORT/%TESTNUMBER0003
</command>
</client>
diff --git a/tests/data/test142 b/tests/data/test142
index f64dddb59..c4ad11a6d 100644
--- a/tests/data/test142
+++ b/tests/data/test142
@@ -16,10 +16,10 @@ many parts there are
<server>
ftp
</server>
- <name>
+<name>
FTP URL with 150 dir levels
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/part1/part2/part3/part4/part5/part6/part7/part8/part9/part10/part11/part12/part13/part14/part15/part16/part17/part18/part19/part20/part21/part22/part23/part24/part25/part26/part27/part28/part29/part30/part31/part32/part33/part34/part35/part36/part37/part38/part39/part40/part41/part42/part43/part44/part45/part46/part47/part48/part49/part50/part51/part52/part53/part54/part55/part56/part57/part58/part59/part60/part61/part62/part63/part64/part65/part66/part67/part68/part69/part70/part71/part72/part73/part74/part75/part76/part77/part78/part79/part80/part81/part82/part83/part84/part85/part86/part87/part88/part89/part90/part91/part92/part93/part94/part95/part96/part97/part98/part99/part100/part101/part102/part103/part104/part105/part106/part107/part108/part109/part110/part111/part112/part113/part114/part115/part116/part117/part118/part119/part120/part121/part122/part123/part124/part125/part126/part127/part128/part129/part130/part131/part132/part133/part134/part135/part136/part137/part138/part139/part140/part141/part142/part143/part144/part145/part146/part147/part148/part149/part150/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1420 b/tests/data/test1420
index 415e35902..4df7aa7c2 100644
--- a/tests/data/test1420
+++ b/tests/data/test1420
@@ -29,15 +29,19 @@ body
<server>
imap
</server>
- <name>
+<name>
--libcurl for IMAP FETCH message
- </name>
+</name>
<setenv>
SSL_CERT_FILE=
</setenv>
<command>
-'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u user:secret --libcurl log/test%TESTNUMBER.c
+'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u user:secret --libcurl %LOGDIR/test%TESTNUMBER.c
</command>
+# Need ftp so the FTP options are written in the --libcurl template
+<features>
+ftp
+</features>
</client>
#
@@ -50,7 +54,7 @@ A003 SELECT %TESTNUMBER
A004 FETCH 1 BODY[]
A005 LOGOUT
</protocol>
-<file name="log/test%TESTNUMBER.c" mode="text">
+<file name="%LOGDIR/test%TESTNUMBER.c" mode="text">
/********* Sample code generated by the curl command line tool **********
* All curl_easy_setopt() options are documented at:
* https://curl.se/libcurl/c/curl_easy_setopt.html
diff --git a/tests/data/test1421 b/tests/data/test1421
index 5b55547ce..d62adfb04 100644
--- a/tests/data/test1421
+++ b/tests/data/test1421
@@ -12,7 +12,7 @@ HTTP proxy
<reply>
<data nocheck="yes">
HTTP/1.1 200 OK
-Uknown-header: blrub
+Unknown-header: blrub
Content-Length: 6
-foo-
@@ -29,10 +29,10 @@ connection-monitor
<server>
http
</server>
- <name>
+<name>
Re-using HTTP proxy connection for two different host names
- </name>
- <command>
+</name>
+<command>
--proxy http://%HOSTIP:%HTTPPORT http://test.remote.haxx.se.%TESTNUMBER:8990/ http://different.remote.haxx.se.%TESTNUMBER:8990
</command>
<features>
@@ -45,12 +45,12 @@ proxy
<verify>
<stdout>
HTTP/1.1 200 OK
-Uknown-header: blrub
+Unknown-header: blrub
Content-Length: 6
-foo-
HTTP/1.1 200 OK
-Uknown-header: blrub
+Unknown-header: blrub
Content-Length: 6
-foo-
diff --git a/tests/data/test1422 b/tests/data/test1422
index 7cd1d1345..c62c2cbda 100644
--- a/tests/data/test1422
+++ b/tests/data/test1422
@@ -37,10 +37,10 @@ http
HTTP GET with -O -J and Content-Disposition (empty file)
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -J -O file://%PWD/log/name%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -J -O file://%PWD/%LOGDIR/name%TESTNUMBER
</command>
</client>
@@ -55,7 +55,7 @@ Accept: */*
</protocol>
-<file1 name="log/name%TESTNUMBER">
+<file1 name="%LOGDIR/name%TESTNUMBER">
</file1>
</verify>
diff --git a/tests/data/test1423 b/tests/data/test1423
index 2eb1d8003..f269cc0b0 100644
--- a/tests/data/test1423
+++ b/tests/data/test1423
@@ -30,10 +30,10 @@ file
HTTP GET -o fname without Content-Disposition (empty file)
</name>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o log/outfile%TESTNUMBER file://%PWD/log/outfile%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o %LOGDIR/outfile%TESTNUMBER file://%PWD/%LOGDIR/outfile%TESTNUMBER
</command>
<postcheck>
-perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER
+perl %SRCDIR/libtest/notexists.pl %LOGDIR/%TESTNUMBER
</postcheck>
</client>
@@ -48,7 +48,7 @@ Accept: */*
</protocol>
-<file1 name="log/outfile%TESTNUMBER">
+<file1 name="%LOGDIR/outfile%TESTNUMBER">
</file1>
</verify>
diff --git a/tests/data/test1424 b/tests/data/test1424
index ebe5f5213..640582549 100644
--- a/tests/data/test1424
+++ b/tests/data/test1424
@@ -46,11 +46,11 @@ http
<name>
HTTP GET -o fname without Content-Disposition (unmet time condition)
</name>
-<file name="log/outfile%TESTNUMBER">
+<file name="%LOGDIR/outfile%TESTNUMBER">
original contents
</file>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -z "dec 12 11:00:00 1999 GMT" -o log/outfile%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -z "dec 12 11:00:00 1999 GMT" -o %LOGDIR/outfile%TESTNUMBER
</command>
</client>
@@ -66,7 +66,7 @@ If-Modified-Since: Sun, 12 Dec 1999 11:00:00 GMT
</protocol>
-<file1 name="log/outfile%TESTNUMBER">
+<file1 name="%LOGDIR/outfile%TESTNUMBER">
original contents
</file1>
diff --git a/tests/data/test1425 b/tests/data/test1425
index 2bd6d8437..f51483dd0 100644
--- a/tests/data/test1425
+++ b/tests/data/test1425
Binary files differ
diff --git a/tests/data/test1426 b/tests/data/test1426
index 9ed994a56..d53138afa 100644
--- a/tests/data/test1426
+++ b/tests/data/test1426
Binary files differ
diff --git a/tests/data/test1427 b/tests/data/test1427
index adce46a84..ce5cbd15a 100644
--- a/tests/data/test1427
+++ b/tests/data/test1427
@@ -11,10 +11,10 @@ integer overflow
<server>
none
</server>
- <name>
+<name>
too large -m timeout value
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%NOLISTENPORT/%TESTNUMBER -m 184467440737095510
</command>
</client>
diff --git a/tests/data/test1428 b/tests/data/test1428
index ac91fd2f5..9e7164454 100644
--- a/tests/data/test1428
+++ b/tests/data/test1428
@@ -46,10 +46,10 @@ contents
http
http-proxy
</server>
- <name>
+<name>
HTTP over proxy-tunnel with --proxy-header and --header
- </name>
- <command>
+</name>
+<command>
http://test.%TESTNUMBER:%HTTPPORT/we/want/that/page/%TESTNUMBER -p -x %HOSTIP:%PROXYPORT --user 'iam:my:;self' --header "header-type: server" --proxy-header "header-type: proxy"
</command>
<features>
diff --git a/tests/data/test1429 b/tests/data/test1429
index 2f9dfb931..3d8dce1a9 100644
--- a/tests/data/test1429
+++ b/tests/data/test1429
@@ -33,8 +33,8 @@ http
<name>
HTTP GET with 999 response code
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --write-out '%{response_code}'
</command>
</client>
diff --git a/tests/data/test143 b/tests/data/test143
index be5b33571..ed89e70de 100644
--- a/tests/data/test143
+++ b/tests/data/test143
@@ -18,10 +18,10 @@ bla bla bla
<server>
ftp
</server>
- <name>
+<name>
FTP URL with type=a
- </name>
- <command>
+</name>
+<command>
"ftp://%HOSTIP:%FTPPORT/%2ftmp/moo/%TESTNUMBER;type=a"
</command>
</client>
diff --git a/tests/data/test1430 b/tests/data/test1430
index 8ed513c60..11db3ccbf 100644
--- a/tests/data/test1430
+++ b/tests/data/test1430
@@ -29,10 +29,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP GET with negative response code
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1431 b/tests/data/test1431
index 26cf4aaf7..3f396a4a2 100644
--- a/tests/data/test1431
+++ b/tests/data/test1431
@@ -29,10 +29,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP GET with single-digit response code
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1432 b/tests/data/test1432
index d134688a3..4789057a1 100644
--- a/tests/data/test1432
+++ b/tests/data/test1432
@@ -32,8 +32,8 @@ http
<name>
HTTP GET with 100-digit response code and survive
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1433 b/tests/data/test1433
index ac5081635..aec6181a1 100644
--- a/tests/data/test1433
+++ b/tests/data/test1433
@@ -32,8 +32,8 @@ http
<name>
HTTP GET with 100-digit subversion number in response
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1434 b/tests/data/test1434
index 4801ee2c0..b6f775e0f 100644
--- a/tests/data/test1434
+++ b/tests/data/test1434
@@ -54,13 +54,13 @@ Content-Type: text/plain
<server>
http
</server>
- <name>
+<name>
HTTP GET resume at exactly the existing file size is fine
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -C 100
</command>
-<file name="log/curl%TESTNUMBER.out">
+<file name="%LOGDIR/curl%TESTNUMBER.out">
012345678
012345678
012345678
diff --git a/tests/data/test1435 b/tests/data/test1435
index 5e91f0289..0e1e34f55 100644
--- a/tests/data/test1435
+++ b/tests/data/test1435
@@ -24,10 +24,10 @@ unix-sockets
<server>
http-unix
</server>
- <name>
+<name>
simple HTTP GET over Unix socket
- </name>
- <command>
+</name>
+<command>
--unix-socket %HTTPUNIXPATH http://server-interpreted.example.com/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1436 b/tests/data/test1436
index 38190f4a8..352ef34e0 100644
--- a/tests/data/test1436
+++ b/tests/data/test1436
@@ -38,10 +38,10 @@ unix-sockets
<server>
http-unix
</server>
- <name>
+<name>
HTTP requests with multiple connections over Unix socket
- </name>
- <command>
+</name>
+<command>
--unix-socket %HTTPUNIXPATH http://one.example.com/%TESTNUMBER0001 http://two.example.com/%TESTNUMBER0002 http://one.example.com/%TESTNUMBER0003
</command>
</client>
diff --git a/tests/data/test1437 b/tests/data/test1437
index 87a36d565..29e800a43 100644
--- a/tests/data/test1437
+++ b/tests/data/test1437
@@ -55,10 +55,10 @@ http
!SSPI
crypto
</features>
- <name>
+<name>
HTTP with duplicated WWW-Authenticate parameters
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u testuser:testpass --digest
</command>
</client>
diff --git a/tests/data/test144 b/tests/data/test144
index 4419b09f5..be2ca5c8c 100644
--- a/tests/data/test144
+++ b/tests/data/test144
@@ -21,10 +21,10 @@ REPLY NLST 450 No files found
<server>
ftp
</server>
- <name>
+<name>
FTP NLST dir list without contents, using PORT
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/ -P - -l
</command>
</client>
diff --git a/tests/data/test1440 b/tests/data/test1440
index e87cafb08..dbdfc7361 100644
--- a/tests/data/test1440
+++ b/tests/data/test1440
@@ -19,7 +19,7 @@ file
Check --write-out with trailing %{
</name>
<command>
-file://localhost/%PWD/log/non-existent-file.txt --write-out '%{'
+file://localhost/%PWD/%LOGDIR/non-existent-file.txt --write-out '%{'
</command>
</client>
diff --git a/tests/data/test1441 b/tests/data/test1441
index 8d841df5d..2ff6be036 100644
--- a/tests/data/test1441
+++ b/tests/data/test1441
@@ -19,7 +19,7 @@ file
Check --write-out with trailing %
</name>
<command>
-file://localhost/%PWD/log/non-existent-file.txt --write-out '%'
+file://localhost/%PWD/%LOGDIR/non-existent-file.txt --write-out '%'
</command>
</client>
diff --git a/tests/data/test1442 b/tests/data/test1442
index 255a4c9ff..02ecea67f 100644
--- a/tests/data/test1442
+++ b/tests/data/test1442
@@ -19,7 +19,7 @@ file
Check --write-out with trailing \
</name>
<command>
-file://localhost/%PWD/log/non-existent-file.txt --write-out '\'
+file://localhost/%PWD/%LOGDIR/non-existent-file.txt --write-out '\'
</command>
</client>
diff --git a/tests/data/test1443 b/tests/data/test1443
index a59958ae7..bbfaf7f1b 100644
--- a/tests/data/test1443
+++ b/tests/data/test1443
@@ -37,7 +37,7 @@ http
HTTP GET with -O and --remote-time
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -O --remote-time
@@ -45,7 +45,7 @@ http://%HOSTIP:%HTTPPORT/%TESTNUMBER -O --remote-time
# Verify the mtime of the file. The mtime is specifically chosen to be an even
# number so that it can be represented exactly on a FAT filesystem.
<postcheck>
-perl -e 'exit((stat("log/%TESTNUMBER"))[9] != 960898200)'
+perl -e 'exit((stat("%LOGDIR/%TESTNUMBER"))[9] != 960898200)'
</postcheck>
</client>
@@ -59,7 +59,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/%TESTNUMBER">
+<file name="%LOGDIR/%TESTNUMBER">
12345
</file>
</verify>
diff --git a/tests/data/test1444 b/tests/data/test1444
index 71b5f0ea0..61b3a29f4 100644
--- a/tests/data/test1444
+++ b/tests/data/test1444
@@ -22,16 +22,16 @@ file data
<server>
ftp
</server>
- <name>
+<name>
FTP with --remote-time
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER --remote-time
</command>
# Verify the mtime of the file. The mtime is specifically chosen to be an even
# number so that it can be represented exactly on a FAT filesystem.
<postcheck>
-perl -e 'exit((stat("log/curl%TESTNUMBER.out"))[9] != 1234567890)'
+perl -e 'exit((stat("%LOGDIR/curl%TESTNUMBER.out"))[9] != 1234567890)'
</postcheck>
</client>
diff --git a/tests/data/test1445 b/tests/data/test1445
index 1811e071f..fee8932f1 100644
--- a/tests/data/test1445
+++ b/tests/data/test1445
@@ -15,17 +15,17 @@ FILE
file
</server>
<precheck>
-perl %SRCDIR/libtest/test613.pl prepare %PWD/log/test%TESTNUMBER.dir
+perl %SRCDIR/libtest/test613.pl prepare %PWD/%LOGDIR/test%TESTNUMBER.dir
</precheck>
- <name>
+<name>
file:// with --remote-time
- </name>
- <command>
-file://localhost%FILE_PWD/log/test%TESTNUMBER.dir/plainfile.txt --remote-time
+</name>
+<command>
+file://localhost%FILE_PWD/%LOGDIR/test%TESTNUMBER.dir/plainfile.txt --remote-time
</command>
<postcheck>
-perl %SRCDIR/libtest/test613.pl postprocess %PWD/log/test%TESTNUMBER.dir && \
-perl -e 'exit((stat("log/curl%TESTNUMBER.out"))[9] != 946728000)'
+perl %SRCDIR/libtest/test613.pl postprocess %PWD/%LOGDIR/test%TESTNUMBER.dir && \
+perl -e 'exit((stat("%LOGDIR/curl%TESTNUMBER.out"))[9] != 946728000)'
</postcheck>
</client>
diff --git a/tests/data/test1446 b/tests/data/test1446
index 0088375b4..f633ac17a 100644
--- a/tests/data/test1446
+++ b/tests/data/test1446
@@ -18,17 +18,17 @@ SFTP
sftp
</server>
<precheck>
-perl %SRCDIR/libtest/test613.pl prepare %PWD/log/test%TESTNUMBER.dir
+perl %SRCDIR/libtest/test613.pl prepare %PWD/%LOGDIR/test%TESTNUMBER.dir
</precheck>
- <name>
+<name>
SFTP with --remote-time
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/test%TESTNUMBER.dir/rofile.txt --insecure --remote-time
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/test%TESTNUMBER.dir/rofile.txt --insecure --remote-time
</command>
<postcheck>
-perl %SRCDIR/libtest/test613.pl postprocess %PWD/log/test%TESTNUMBER.dir && \
-perl -e 'exit((stat("log/curl%TESTNUMBER.out"))[9] != 978264000)'
+perl %SRCDIR/libtest/test613.pl postprocess %PWD/%LOGDIR/test%TESTNUMBER.dir && \
+perl -e 'exit((stat("%LOGDIR/curl%TESTNUMBER.out"))[9] != 978264000)'
</postcheck>
</client>
diff --git a/tests/data/test1447 b/tests/data/test1447
index 8a651f009..0b0e4e65c 100644
--- a/tests/data/test1447
+++ b/tests/data/test1447
@@ -20,10 +20,10 @@ none
http
proxy
</features>
- <name>
-Provide illegal proxy name
- </name>
- <command>
+<name>
+Provide illegal proxy name
+</name>
+<command>
--proxy "http://a:b@/x" http://%HOSTIP:%NOLISTENPORT
</command>
</client>
diff --git a/tests/data/test1448 b/tests/data/test1448
index 600f72415..6a9ba5212 100644
--- a/tests/data/test1448
+++ b/tests/data/test1448
@@ -48,11 +48,11 @@ LC_CTYPE=en_US.UTF-8
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
- <name>
+<name>
Redirect following to UTF-8 IDN host name
- </name>
+</name>
- <command>
+<command>
http://åäö.se:%HTTPPORT/%TESTNUMBER --resolve xn--4cab6c.se:%HTTPPORT:%HOSTIP -L --connect-to %HOSTIP:%HTTPPORT:%HOSTIP:%HTTPPORT
</command>
</client>
diff --git a/tests/data/test1449 b/tests/data/test1449
index ba24ef912..0b9de0192 100644
--- a/tests/data/test1449
+++ b/tests/data/test1449
@@ -17,10 +17,10 @@ Resume
<server>
ftp
</server>
- <name>
+<name>
FTP download range with integer overflow
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -r 36893488147419103232-
</command>
</client>
diff --git a/tests/data/test145 b/tests/data/test145
index 1e80cf8ce..53f3f631d 100644
--- a/tests/data/test145
+++ b/tests/data/test145
@@ -20,10 +20,10 @@ REPLY NLST 550 Have a taste on this!
<server>
ftp
</server>
- <name>
+<name>
FTP NLST dir list with weird reply code, using PORT
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/ -P - -l
</command>
</client>
diff --git a/tests/data/test1450 b/tests/data/test1450
index ca3ac8849..5d7e568bc 100644
--- a/tests/data/test1450
+++ b/tests/data/test1450
@@ -19,10 +19,10 @@ dict
<features>
dict
</features>
- <name>
+<name>
Basic DICT lookup
- </name>
- <command>
+</name>
+<command>
dict://%HOSTIP:%DICTPORT/d:basic
</command>
</client>
diff --git a/tests/data/test1452 b/tests/data/test1452
index d1b7fa9cd..6763265b7 100644
--- a/tests/data/test1452
+++ b/tests/data/test1452
@@ -22,13 +22,13 @@ telnet
<features>
telnet
</features>
- <name>
+<name>
Basic TELNET negotiation
- </name>
+</name>
<stdin>
test%TESTNUMBER
</stdin>
- <command>
+<command>
telnet://%HOSTIP:%TELNETPORT --upload-file -
</command>
</client>
diff --git a/tests/data/test1453 b/tests/data/test1453
index 76b5acda4..aa0878efa 100644
--- a/tests/data/test1453
+++ b/tests/data/test1453
@@ -19,10 +19,10 @@ none
<features>
tftp
</features>
- <name>
+<name>
Too long tftp filename
- </name>
- <command>
+</name>
+<command>
tftp://%HOSTIP:%NOLISTENPORT/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaz
</command>
</client>
diff --git a/tests/data/test1454 b/tests/data/test1454
index 36e28e49a..4908a178d 100644
--- a/tests/data/test1454
+++ b/tests/data/test1454
@@ -19,9 +19,9 @@
<server>
http
</server>
- <name>
+<name>
--connect-to with IPv6 address w/o IPv6 support!
- </name>
+</name>
<command>
--connect-to localhost:80:[::1]:80 localhost
</command>
diff --git a/tests/data/test1456 b/tests/data/test1456
index 4aca9ca4e..3f3a74783 100644
--- a/tests/data/test1456
+++ b/tests/data/test1456
@@ -36,10 +36,10 @@ ipv6
<server>
http-ipv6
</server>
- <name>
+<name>
HTTP-IPv6 GET with PROXY protocol
- </name>
- <command>
+</name>
+<command>
-g "http://%HOST6IP:%HTTP6PORT/%TESTNUMBER" --haproxy-protocol
</command>
<features>
diff --git a/tests/data/test1459 b/tests/data/test1459
index e8c2b00c5..c05da3cb5 100644
--- a/tests/data/test1459
+++ b/tests/data/test1459
@@ -13,24 +13,24 @@ known_hosts
sftp
</server>
<precheck>
-mkdir -p %PWD/log/test%TESTNUMBER.dir/.ssh
+mkdir -p %PWD/%LOGDIR/test%TESTNUMBER.dir/.ssh
</precheck>
<features>
sftp
!oldlibssh
</features>
- <name>
+<name>
SFTP with corrupted known_hosts
- </name>
- <command>
+</name>
+<command>
-u : sftp://%HOSTIP:%SSHPORT/ -l
</command>
-<file name="log/test%TESTNUMBER.dir/.ssh/known_hosts">
+<file name="%LOGDIR/test%TESTNUMBER.dir/.ssh/known_hosts">
|1|qy29Y1x/+/F39AzdG5515YSSw+c=|iB2WX5jrU3ZTWc+ZfGau7HHEvBc= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAynDN8cDJ3xNzRjTNNGciSHSxpubxhZ6YnkLdp1TkrGW8n\
R93Ey5VtBeBblYTRlFXBWJgKFcTKBRJ/O4qBZwbUgt10AHj31i6h8NehfT19tR8wG/YCmj3KtYLHmwdzmW1edEL9G2NdX2KiKYv7/zuly3QvmP0QA0NhWkAz0KdWNM=
</file>
<setenv>
-CURL_HOME=%PWD/log/test%TESTNUMBER.dir
+CURL_HOME=%PWD/%LOGDIR/test%TESTNUMBER.dir
</setenv>
</client>
diff --git a/tests/data/test146 b/tests/data/test146
index f9f01174f..803fbfc4d 100644
--- a/tests/data/test146
+++ b/tests/data/test146
@@ -19,10 +19,10 @@ this is file contents
<server>
ftp
</server>
- <name>
+<name>
persistent FTP with different paths
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/first/dir/here/%TESTNUMBER ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1460 b/tests/data/test1460
index 8f6b5f293..c3180ff92 100644
--- a/tests/data/test1460
+++ b/tests/data/test1460
@@ -34,12 +34,12 @@ http
HTTP GET with -Ji and Content-Disposition with existing file
</name>
<setenv>
-CURL_TESTDIR=%PWD/log
+CURL_TESTDIR=%LOGDIR
</setenv>
<command option="no-output,no-include">
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -Ji -O
</command>
-<file name="log/name%TESTNUMBER">
+<file name="%LOGDIR/name%TESTNUMBER">
initial content
</file>
</client>
@@ -51,7 +51,7 @@ initial content
<errorcode>
2
</errorcode>
-<file name="log/name%TESTNUMBER">
+<file name="%LOGDIR/name%TESTNUMBER">
initial content
</file>
diff --git a/tests/data/test1461 b/tests/data/test1461
index 65797a405..e25e29f39 100644
--- a/tests/data/test1461
+++ b/tests/data/test1461
@@ -16,10 +16,10 @@
<server>
none
</server>
- <name>
+<name>
curl important --help
- </name>
- <command>
+</name>
+<command>
--help
</command>
</client>
diff --git a/tests/data/test1462 b/tests/data/test1462
index ce9902946..654e44344 100644
--- a/tests/data/test1462
+++ b/tests/data/test1462
@@ -16,10 +16,10 @@
<server>
none
</server>
- <name>
+<name>
curl invalid category --help
- </name>
- <command>
+</name>
+<command>
--help sdfafdsfadsfsd
</command>
</client>
diff --git a/tests/data/test1463 b/tests/data/test1463
index 3904324c7..c59ac552b 100644
--- a/tests/data/test1463
+++ b/tests/data/test1463
@@ -20,10 +20,10 @@ none
<features>
file
</features>
- <name>
+<name>
curl file category --help
- </name>
- <command>
+</name>
+<command>
--help file
</command>
</client>
diff --git a/tests/data/test1464 b/tests/data/test1464
index 44a7adcf0..091933df2 100644
--- a/tests/data/test1464
+++ b/tests/data/test1464
@@ -20,10 +20,10 @@ none
<features>
file
</features>
- <name>
+<name>
curl file category --help with lower/upper mix
- </name>
- <command>
+</name>
+<command>
--help fIlE
</command>
</client>
diff --git a/tests/data/test1465 b/tests/data/test1465
index 1a28fb1c3..380943d92 100644
--- a/tests/data/test1465
+++ b/tests/data/test1465
@@ -25,17 +25,17 @@ Connection: close
<server>
http
</server>
- <name>
+<name>
--libcurl for POST with binary content
- </name>
+</name>
<setenv>
SSL_CERT_FILE=
</setenv>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER --libcurl log/test%TESTNUMBER.c --data-binary @log/%TESTNUMBER-upload
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER --libcurl %LOGDIR/test%TESTNUMBER.c --data-binary @%LOGDIR/%TESTNUMBER-upload
</command>
# "ab\x81""cd\0e\\\"?\r\n\t\x01""fghi%x1Ajklm%xFD"
-<file name="log/%TESTNUMBER-upload" nonewline="yes">
+<file name="%LOGDIR/%TESTNUMBER-upload" nonewline="yes">
%hex[ab%81cd%00e\"?%0D%0A%09%01fghi%1Ajklm%FD]hex%
</file>
</client>
@@ -61,7 +61,7 @@ $_ = '' if /CURLOPT_SSH_KNOWNHOSTS/
$_ = '' if /CURLOPT_HTTP_VERSION/
$_ = '' if /CURLOPT_INTERLEAVEDATA/
</stripfile>
-<file name="log/test%TESTNUMBER.c" mode="text">
+<file name="%LOGDIR/test%TESTNUMBER.c" mode="text">
/********* Sample code generated by the curl command line tool **********
* All curl_easy_setopt() options are documented at:
* https://curl.se/libcurl/c/curl_easy_setopt.html
diff --git a/tests/data/test1466 b/tests/data/test1466
index 0955d660c..315974ad4 100644
--- a/tests/data/test1466
+++ b/tests/data/test1466
@@ -25,8 +25,8 @@ http
<name>
HTTP GET with 3-digit response and only digits in reason
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1467 b/tests/data/test1467
index 1be4c2c76..bf6ed8f38 100644
--- a/tests/data/test1467
+++ b/tests/data/test1467
@@ -4,6 +4,7 @@
HTTP
HTTP GET
SOCKS5
+unix sockets
</keywords>
</info>
@@ -37,10 +38,10 @@ unix-sockets
http
socks5unix
</server>
- <name>
+<name>
HTTP GET via SOCKS5 proxy via unix sockets
- </name>
- <command>
+</name>
+<command>
--socks5 localhost%SOCKSUNIXPATH http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1468 b/tests/data/test1468
index 1ff6ada4d..dad25df12 100644
--- a/tests/data/test1468
+++ b/tests/data/test1468
@@ -5,6 +5,7 @@ HTTP
HTTP GET
SOCKS5
SOCKS5h
+unix sockets
</keywords>
</info>
@@ -38,10 +39,10 @@ unix-sockets
http
socks5unix
</server>
- <name>
+<name>
HTTP GET with host name using SOCKS5h via unix sockets
- </name>
- <command>
+</name>
+<command>
http://this.is.a.host.name:%HTTPPORT/%TESTNUMBER --proxy socks5h://localhost%SOCKSUNIXPATH
</command>
</client>
diff --git a/tests/data/test1469 b/tests/data/test1469
new file mode 100644
index 000000000..1aa512e50
--- /dev/null
+++ b/tests/data/test1469
@@ -0,0 +1,30 @@
+<testcase>
+<info>
+<keywords>
+FTP
+URL
+FAILURE
+</keywords>
+</info>
+
+# Client-side
+<client>
+<server>
+none
+</server>
+<name>
+Space in FTP upload URL
+</name>
+<command>
+"ftp://%HOSTIP:%NOLISTENPORT/%TESTNUMBER%/with space/" -T %LOGDIR/irrelevant-file
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+# 3 == CURLE_URL_MALFORMAT
+<errorcode>
+3
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test147 b/tests/data/test147
index 066118648..769043d48 100644
--- a/tests/data/test147
+++ b/tests/data/test147
@@ -21,10 +21,10 @@ COUNT CWD 1
<server>
ftp
</server>
- <name>
+<name>
FTP with --ftp-create-dirs (failing CWD)
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/first/dir/here/%TESTNUMBER --ftp-create-dirs
</command>
</client>
diff --git a/tests/data/test1470 b/tests/data/test1470
new file mode 100644
index 000000000..ad4fb711a
--- /dev/null
+++ b/tests/data/test1470
@@ -0,0 +1,65 @@
+<testcase>
+<info>
+<keywords>
+HTTPS
+HTTP
+HTTP GET
+SOCKS5
+SOCKS5h
+unix sockets
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+proxy
+unix-sockets
+</features>
+<server>
+https
+socks5unix
+</server>
+<name>
+HTTPS GET with host name using SOCKS5h via unix sockets
+</name>
+<command>
+https://this.is.a.host.name:%HTTPSPORT/%TESTNUMBER -k --proxy socks5h://localhost%SOCKSUNIXPATH
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+GET /%TESTNUMBER HTTP/1.1
+Host: this.is.a.host.name:%HTTPSPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+<socks>
+atyp 3 => this.is.a.host.name
+</socks>
+</verify>
+</testcase>
diff --git a/tests/data/test1471 b/tests/data/test1471
new file mode 100644
index 000000000..e8e41430d
--- /dev/null
+++ b/tests/data/test1471
@@ -0,0 +1,42 @@
+<testcase>
+<info>
+<keywords>
+Onion
+Tor
+FAILURE
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+http
+</features>
+<name>
+Fail to resolve .onion TLD
+</name>
+<command>
+red.onion
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+# Couldn't resolve host name
+<errorcode>
+6
+</errorcode>
+<stderr mode="text">
+curl: (6) Not resolving .onion address (RFC 7686)
+</stderr>
+</verify>
+</testcase>
diff --git a/tests/data/test1472 b/tests/data/test1472
new file mode 100644
index 000000000..07f0620c9
--- /dev/null
+++ b/tests/data/test1472
@@ -0,0 +1,42 @@
+<testcase>
+<info>
+<keywords>
+Onion
+Tor
+FAILURE
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+http
+</features>
+<name>
+Fail to resolve .onion. TLD
+</name>
+<command>
+tasty.onion.
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+# Couldn't resolve host name
+<errorcode>
+6
+</errorcode>
+<stderr mode="text">
+curl: (6) Not resolving .onion address (RFC 7686)
+</stderr>
+</verify>
+</testcase>
diff --git a/tests/data/test1473 b/tests/data/test1473
new file mode 100644
index 000000000..5e4d18348
--- /dev/null
+++ b/tests/data/test1473
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+header line folding
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+ Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Content-Length: 6
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+first HTTP header starts with white space
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+%if hyper
+# curl: (1) Hyper: [6] invalid HTTP header parsed
+<errorcode>
+1
+</errorcode>
+%endif
+</verify>
+</testcase>
diff --git a/tests/data/test1474 b/tests/data/test1474
new file mode 100644
index 000000000..a87044d1a
--- /dev/null
+++ b/tests/data/test1474
@@ -0,0 +1,121 @@
+<testcase>
+# This test is quite timing dependent and tricky to set up. The time line of
+# test operations looks like this:
+#
+# 1. curl sends a PUT request with Expect: 100-continue and waits only 1 msec
+# for a 100 response.
+# 2. The HTTP server accepts the connection but waits 500 msec before acting
+# on the request.
+# 3. curl doesn't receive the expected 100 response before its timeout expires,
+# so it starts sending the body. It is throttled by a --limit-rate, so it
+# sends the first 64 KiB then stops for 1000 msec due to this
+# throttling.
+# 4. The server sends its 417 response while curl is throttled.
+# 5. curl responds to this 417 response by closing the connection (because it
+# has a half-completed response outstanding) and starting a new one. This
+# new request does not have an Expect: header so it is sent without delay.
+# It's still throttled, however, so it takes about 16 seconds to finish
+# sending.
+# 6. The server receives the response and this time acks it with 200.
+#
+# Because of the timing sensitivity (scheduling delays of 500 msec can cause
+# the test to fail), this test is marked flaky to avoid it being run in the CI
+# builds which are often run on overloaded servers.
+# Increasing the --limit-rate would decrease the test time, but at the cost of
+# becoming even more sensitive to delays (going from 500 msec to 250 msec or
+# less of accepted delay before failure). Adding a --speed-time would increase
+# the 1 second delay between writes to longer, but it would also increase the
+# total time needed by the test, which is already quite high.
+#
+# The assumption in step 3 is also broken on NetBSD 9.3, OpenBSD 7.3 and
+# Solaris 10 as they only usually send about half the requested amount of data
+# (see https://curl.se/mail/lib-2023-09/0021.html).
+<info>
+<keywords>
+HTTP
+HTTP PUT
+Expect
+flaky
+timing-dependent
+</keywords>
+</info>
+# Server-side
+<reply>
+# 417 means the server didn't like the Expect header
+<data>
+HTTP/1.1 417 BAD swsbounce
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 0
+
+</data>
+<data1>
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 10
+
+blablabla
+</data1>
+<datacheck>
+HTTP/1.1 417 BAD swsbounce
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 0
+
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 10
+
+blablabla
+</datacheck>
+<servercmd>
+no-expect
+delay: 500
+connection-monitor
+</servercmd>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+HTTP PUT with Expect: 100-continue and 417 response during upload
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -T %LOGDIR/test%TESTNUMBER.txt --limit-rate 64K --expect100-timeout 0.001
+</command>
+<precheck>
+perl -e "print 'Test does not work on this BSD system' if ( $^O eq 'netbsd' || $^O eq 'openbsd' || ($^O eq 'solaris' && qx/uname -r/ * 100 <= 510));"
+</precheck>
+# Must be large enough to trigger curl's automatic 100-continue behaviour
+<file name="%LOGDIR/test%TESTNUMBER.txt">
+%repeat[132 x S]%%repeat[16462 x xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0a]%
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+PUT /we/want/%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+Content-Length: 1053701
+Expect: 100-continue
+
+%repeat[132 x S]%%repeat[1021 x xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0a]%%repeat[60 x x]%[DISCONNECT]
+PUT /we/want/%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+Content-Length: 1053701
+
+%repeat[132 x S]%%repeat[16462 x xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0a]%
+[DISCONNECT]
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1475 b/tests/data/test1475
new file mode 100644
index 000000000..f88ef74ee
--- /dev/null
+++ b/tests/data/test1475
@@ -0,0 +1,83 @@
+<testcase>
+# also verified by 1156 in libcurl API terms
+
+<info>
+<keywords>
+HTTP
+HTTP GET
+Resume
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 416 Invalid range
+Connection: close
+Content-Length: 0
+Content-Range: */100
+
+</data>
+
+# The file data that exists at the start of the test must be included in
+# the verification.
+<datacheck>
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+HTTP/1.1 416 Invalid range
+Connection: close
+Content-Length: 0
+Content-Range: */100
+
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<killserver>
+http
+</killserver>
+<name>
+-f and 416 with Content-Range: */size
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -C - -f
+</command>
+<file name="%LOGDIR/curl%TESTNUMBER.out">
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+012345678
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Range: bytes=100-
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1476 b/tests/data/test1476
new file mode 100644
index 000000000..101fa95b0
--- /dev/null
+++ b/tests/data/test1476
@@ -0,0 +1,59 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+cookies
+</keywords>
+</info>
+
+# Server-side
+<reply>
+
+<data crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Content-Length: 0
+Set-Cookie: super=oops; domain=co.UK; path=/
+Set-Cookie: fine=yesyes; domain=CURL.CO.UK; path=/
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+PSL violating cookie with mixed case domain and cookie domain property
+</name>
+<command>
+-x http://%HOSTIP:%HTTPPORT/%TESTNUMBER http://curl.co.UK -c %LOGDIR/cookies%TESTNUMBER.txt
+</command>
+<features>
+proxy
+PSL
+cookies
+</features>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET http://curl.co.UK/ HTTP/1.1
+Host: curl.co.UK
+User-Agent: curl/%VERSION
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</protocol>
+<file name="%LOGDIR/cookies%TESTNUMBER.txt" mode="text">
+# Netscape HTTP Cookie File
+# https://curl.se/docs/http-cookies.html
+# This file was generated by libcurl! Edit at your own risk.
+
+.CURL.CO.UK TRUE / FALSE 0 fine yesyes
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test1477 b/tests/data/test1477
new file mode 100644
index 000000000..2771d7f1d
--- /dev/null
+++ b/tests/data/test1477
@@ -0,0 +1,30 @@
+<testcase>
+<info>
+<keywords>
+documentation
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+
+<name>
+Verify that error codes in headers and libcurl-errors.3 are in sync
+</name>
+
+<command type="perl">
+%SRCDIR/errorcodes.pl %SRCDIR/..
+</command>
+</client>
+
+<verify>
+<stdout>
+Result
+</stdout>
+</verify>
+
+</testcase>
diff --git a/tests/data/test148 b/tests/data/test148
index 8e9f842d8..051d31a9d 100644
--- a/tests/data/test148
+++ b/tests/data/test148
@@ -18,10 +18,10 @@ REPLY MKD 550 We will have no such thing
<server>
ftp
</server>
- <name>
+<name>
FTP with --ftp-create-dirs (failing MKD)
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/attempt/to/get/this/%TESTNUMBER --ftp-create-dirs
</command>
</client>
diff --git a/tests/data/test149 b/tests/data/test149
index 94ca5f793..404922b29 100644
--- a/tests/data/test149
+++ b/tests/data/test149
@@ -14,13 +14,13 @@ FTP
<server>
ftp
</server>
- <name>
+<name>
FTP with multiple uploads
- </name>
- <command>
--T log/upload%TESTNUMBER ftp://%HOSTIP:%FTPPORT/dir1/%TESTNUMBER -T log/upload%TESTNUMBER ftp://%HOSTIP:%FTPPORT/dir2/%TESTNUMBER
+</name>
+<command>
+-T %LOGDIR/upload%TESTNUMBER ftp://%HOSTIP:%FTPPORT/dir1/%TESTNUMBER -T %LOGDIR/upload%TESTNUMBER ftp://%HOSTIP:%FTPPORT/dir2/%TESTNUMBER
</command>
-<file name="log/upload%TESTNUMBER">
+<file name="%LOGDIR/upload%TESTNUMBER">
send away this contents
</file>
</client>
@@ -46,7 +46,7 @@ EPSV
STOR %TESTNUMBER
QUIT
</protocol>
-<file name="log/upload%TESTNUMBER">
+<file name="%LOGDIR/upload%TESTNUMBER">
send away this contents
</file>
</verify>
diff --git a/tests/data/test15 b/tests/data/test15
index ad7c06cb3..ba24d2e0b 100644
--- a/tests/data/test15
+++ b/tests/data/test15
@@ -24,10 +24,10 @@ Repeated nonsense-headers
<server>
http
</server>
- <name>
+<name>
--write-out test
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER --write-out "%{url_effective} %{http_code} %{size_download}\n"
</command>
</client>
diff --git a/tests/data/test1500 b/tests/data/test1500
index 241f227f9..0454f8ecb 100644
--- a/tests/data/test1500
+++ b/tests/data/test1500
@@ -34,10 +34,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
curl_multi_wait
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1501 b/tests/data/test1501
index 9d9263a56..195c17998 100644
--- a/tests/data/test1501
+++ b/tests/data/test1501
@@ -5,6 +5,7 @@ FTP
RETR
multi
LIST
+DELAY
</keywords>
</info>
@@ -29,10 +30,10 @@ lib%TESTNUMBER
<killserver>
ftp
</killserver>
- <name>
+<name>
FTP with multi interface and slow LIST response
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER/
</command>
</client>
diff --git a/tests/data/test1502 b/tests/data/test1502
index 859a98fc8..e2639f404 100644
--- a/tests/data/test1502
+++ b/tests/data/test1502
@@ -34,10 +34,10 @@ http
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
HTTP multi with CURLOPT_RESOLVE, cleanup sequence UA
- </name>
- <command>
+</name>
+<command>
http://google.com:%HTTPPORT/%TESTNUMBER %HTTPPORT %HOSTIP
</command>
</client>
diff --git a/tests/data/test1503 b/tests/data/test1503
index a093ac3bb..9c746c74e 100644
--- a/tests/data/test1503
+++ b/tests/data/test1503
@@ -34,10 +34,10 @@ http
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
HTTP multi with CURLOPT_RESOLVE, cleanup sequence PA
- </name>
- <command>
+</name>
+<command>
http://google.com:%HTTPPORT/%TESTNUMBER %HTTPPORT %HOSTIP
</command>
</client>
diff --git a/tests/data/test1504 b/tests/data/test1504
index 8dc4f1856..663e25e27 100644
--- a/tests/data/test1504
+++ b/tests/data/test1504
@@ -34,10 +34,10 @@ http
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
HTTP multi with CURLOPT_RESOLVE, cleanup sequence UB
- </name>
- <command>
+</name>
+<command>
http://google.com:%HTTPPORT/%TESTNUMBER %HTTPPORT %HOSTIP
</command>
</client>
diff --git a/tests/data/test1505 b/tests/data/test1505
index 9ddac46b8..666e4d984 100644
--- a/tests/data/test1505
+++ b/tests/data/test1505
@@ -34,10 +34,10 @@ http
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
HTTP multi with CURLOPT_RESOLVE, cleanup sequence PB
- </name>
- <command>
+</name>
+<command>
http://google.com:%HTTPPORT/%TESTNUMBER %HTTPPORT %HOSTIP
</command>
</client>
diff --git a/tests/data/test1506 b/tests/data/test1506
index 07d3aac99..0a62c0c2a 100644
--- a/tests/data/test1506
+++ b/tests/data/test1506
@@ -51,10 +51,10 @@ http
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
HTTP GET connection cache limit (CURLMOPT_MAXCONNECTS)
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/path/%TESTNUMBER %HOSTIP %HTTPPORT
</command>
</client>
@@ -82,11 +82,10 @@ Accept: */*
<strip>
^Host:.*
</strip>
-<file name="log/stderr%TESTNUMBER" mode="text">
+<file name="%LOGDIR/stderr%TESTNUMBER" mode="text">
* Connection #0 to host server1.example.com left intact
* Connection #1 to host server2.example.com left intact
* Connection #2 to host server3.example.com left intact
-* Closing connection 0
* Connection #3 to host server4.example.com left intact
</file>
<stripfile>
diff --git a/tests/data/test1507 b/tests/data/test1507
index 8208752ad..e1eb12bc3 100644
--- a/tests/data/test1507
+++ b/tests/data/test1507
@@ -22,16 +22,16 @@ lib%TESTNUMBER
</tool>
# based on bug report #1184
- <name>
+<name>
SMTP with multi interface and CURLE_ABORTED_BY_CALLBACK
- </name>
+</name>
<stdin>
From: different
To: another
body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1508 b/tests/data/test1508
index 02cb90a67..9b210ec0f 100644
--- a/tests/data/test1508
+++ b/tests/data/test1508
@@ -14,17 +14,17 @@ none
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
Close a multi handle without using it
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%NOLISTENPORT/path/%TESTNUMBER
</command>
</client>
# Verify data after the test has been "shot"
<verify>
-<file name="log/stdout%TESTNUMBER">
+<file name="%LOGDIR/stdout%TESTNUMBER">
We are done
</file>
</verify>
diff --git a/tests/data/test1509 b/tests/data/test1509
index baa0a30ca..d7a7519c0 100644
--- a/tests/data/test1509
+++ b/tests/data/test1509
@@ -56,13 +56,13 @@ lib%TESTNUMBER
<features>
proxy
</features>
- <name>
+<name>
simple multi http:// through proxytunnel with authentication info
- </name>
- <command>
+</name>
+<command>
http://the.old.moo.%TESTNUMBER:%HTTPPORT/%TESTNUMBER %HOSTIP:%PROXYPORT
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
foo
bar
bar
@@ -78,6 +78,7 @@ CONNECT the.old.moo.%TESTNUMBER:%HTTPPORT HTTP/1.1
Host: the.old.moo.%TESTNUMBER:%HTTPPORT
Proxy-Connection: Keep-Alive
+[DISCONNECT]
</proxy>
<protocol>
GET /%TESTNUMBER HTTP/1.1
diff --git a/tests/data/test151 b/tests/data/test151
index d05c7a000..98035f8b4 100644
--- a/tests/data/test151
+++ b/tests/data/test151
@@ -24,10 +24,10 @@ authentication so we should still fail.
<server>
http
</server>
- <name>
+<name>
HTTP GET with an error code that might trick authentication
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1510 b/tests/data/test1510
index d021dfee6..41a5b29c3 100644
--- a/tests/data/test1510
+++ b/tests/data/test1510
@@ -51,10 +51,10 @@ http
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
HTTP GET connection cache limit (CURLOPT_MAXCONNECTS)
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/path/%TESTNUMBER %HOSTIP %HTTPPORT
</command>
</client>
@@ -82,7 +82,7 @@ Accept: */*
<strip>
^Host:.*
</strip>
-<file name="log/stderr%TESTNUMBER" mode="text">
+<file name="%LOGDIR/stderr%TESTNUMBER" mode="text">
* Connection #0 to host server1.example.com left intact
* Connection #1 to host server2.example.com left intact
* Connection #2 to host server3.example.com left intact
diff --git a/tests/data/test1512 b/tests/data/test1512
index 7c04660fe..c3a532c96 100644
--- a/tests/data/test1512
+++ b/tests/data/test1512
@@ -50,10 +50,10 @@ http
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
GLOBAL CACHE test over two easy performs
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/path/%TESTNUMBER %HOSTIP %HTTPPORT
</command>
</client>
diff --git a/tests/data/test1513 b/tests/data/test1513
index 189d3e394..90c32229f 100644
--- a/tests/data/test1513
+++ b/tests/data/test1513
@@ -2,6 +2,7 @@
<info>
<keywords>
PROGRESSFUNCTION
+DELAY
</keywords>
</info>
@@ -24,12 +25,12 @@ http
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
return failure immediately from progress callback
- </name>
+</name>
# this server/host won't be used for real
- <command>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1517 b/tests/data/test1517
index 5150ff6ed..c9b5e2e8c 100644
--- a/tests/data/test1517
+++ b/tests/data/test1517
@@ -9,7 +9,11 @@ early response
</keywords>
</info>
#
-# This reproduces issue #657, fixed with PR #668 - on Windows
+# This test checks to make sure curl can call recv() without failing after a
+# send() fails on the same socket (#657). Most OSes should support this
+# natively. On Windows there were reported problems and a workaround via
+# define USE_RECV_BEFORE_SEND_WORKAROUND was added.
+# This proved problematic in other cases and was removed again.
#
# Server-side
<reply>
@@ -39,11 +43,16 @@ http
<tool>
lib%TESTNUMBER
</tool>
+# precheck is a command line to run before the test, to see if we can execute
+# the test or not
+<precheck>
+./libtest/lib%TESTNUMBER check
+</precheck>
- <name>
+<name>
HTTP POST, server responds before completed send
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1518 b/tests/data/test1518
index 9b3f6be60..ea5304d1b 100644
--- a/tests/data/test1518
+++ b/tests/data/test1518
@@ -32,10 +32,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
Extract Location: with broken URL
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1519 b/tests/data/test1519
index 2eadb1706..f57f68544 100644
--- a/tests/data/test1519
+++ b/tests/data/test1519
@@ -32,10 +32,10 @@ http
lib1518
</tool>
- <name>
+<name>
Extract Location: with broken absolute URL
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test152 b/tests/data/test152
index a558ed596..31c236019 100644
--- a/tests/data/test152
+++ b/tests/data/test152
@@ -25,10 +25,10 @@ authentication so we should still fail.
<server>
http
</server>
- <name>
+<name>
HTTP GET with an error code that might trick authentication and --fail
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --fail
</command>
</client>
diff --git a/tests/data/test1520 b/tests/data/test1520
index fc031ad00..c360cabc7 100644
--- a/tests/data/test1520
+++ b/tests/data/test1520
@@ -16,9 +16,9 @@ smtp
lib%TESTNUMBER
</tool>
- <name>
+<name>
SMTP with CRLF-dot-CRLF in data
- </name>
+</name>
<stdin>
From: different
To: another
@@ -31,7 +31,7 @@ To: another
body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1521 b/tests/data/test1521
index f086243e4..21d51fdca 100644
--- a/tests/data/test1521
+++ b/tests/data/test1521
@@ -15,10 +15,10 @@ none
lib%TESTNUMBER
</tool>
- <name>
+<name>
Test all curl_easy_setopt and curl_easy_getinfo options
- </name>
- <command>
+</name>
+<command>
unused
</command>
</client>
diff --git a/tests/data/test1523 b/tests/data/test1523
index a22b0765e..7cc94ba47 100644
--- a/tests/data/test1523
+++ b/tests/data/test1523
@@ -2,6 +2,7 @@
<info>
<keywords>
CURLINFO_LOW_SPEED_LIMIT
+DELAY
</keywords>
</info>
diff --git a/tests/data/test1524 b/tests/data/test1524
index 39da646f5..8756ec630 100644
--- a/tests/data/test1524
+++ b/tests/data/test1524
@@ -41,13 +41,13 @@ body
<server>
http
</server>
- <name>
+<name>
HTTP PUT with 303 redirect
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/blah/%TESTNUMBER -L -T log/upload%TESTNUMBER.txt
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/blah/%TESTNUMBER -L -T %LOGDIR/upload%TESTNUMBER.txt
</command>
-<file name="log/upload%TESTNUMBER.txt">
+<file name="%LOGDIR/upload%TESTNUMBER.txt">
moo
</file>
</client>
@@ -61,7 +61,6 @@ Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 4
-Expect: 100-continue
moo
GET /blah/moo.html&testcase=/%TESTNUMBER0002 HTTP/1.1
diff --git a/tests/data/test1525 b/tests/data/test1525
index 7870bdbaa..2778c3f56 100644
--- a/tests/data/test1525
+++ b/tests/data/test1525
@@ -2,7 +2,7 @@
<info>
<keywords>
HTTP
-HTTP GET
+HTTP PUT
HTTP CONNECT
HTTP proxy
proxytunnel
@@ -45,10 +45,10 @@ http-proxy
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
CURLOPT_PROXYHEADER is ignored CURLHEADER_UNIFIED
- </name>
- <command>
+</name>
+<command>
http://the.old.moo.%TESTNUMBER:%HTTPPORT/%TESTNUMBER %HOSTIP:%PROXYPORT
</command>
<features>
@@ -71,7 +71,6 @@ Host: the.old.moo.%TESTNUMBER:%HTTPPORT
Accept: */*
User-Agent: Http Agent
Content-Length: 13
-Expect: 100-continue
Hello Cloud!
</protocol>
diff --git a/tests/data/test1526 b/tests/data/test1526
index c3e3dda4d..cd4a4f48b 100644
--- a/tests/data/test1526
+++ b/tests/data/test1526
@@ -2,7 +2,7 @@
<info>
<keywords>
HTTP
-HTTP GET
+HTTP PUT
HTTP CONNECT
HTTP proxy
proxytunnel
@@ -47,10 +47,10 @@ http-proxy
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
CURLOPT_PROXYHEADER: separate host/proxy headers
- </name>
- <command>
+</name>
+<command>
http://the.old.moo.%TESTNUMBER:%HTTPPORT/%TESTNUMBER %HOSTIP:%PROXYPORT
</command>
<features>
@@ -73,7 +73,6 @@ Host: the.old.moo.%TESTNUMBER:%HTTPPORT
Accept: */*
User-Agent: Http Agent
Content-Length: 13
-Expect: 100-continue
Hello Cloud!
</protocol>
diff --git a/tests/data/test1527 b/tests/data/test1527
index d8b6a590a..bf377d826 100644
--- a/tests/data/test1527
+++ b/tests/data/test1527
@@ -2,7 +2,7 @@
<info>
<keywords>
HTTP
-HTTP GET
+HTTP PUT
HTTP CONNECT
HTTP proxy
proxytunnel
@@ -46,10 +46,10 @@ http-proxy
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
Check same headers are generated with CURLOPT_HEADEROPT == CURLHEADER_UNIFIED
- </name>
- <command>
+</name>
+<command>
http://the.old.moo.%TESTNUMBER:%HTTPPORT/%TESTNUMBER %HOSTIP:%PROXYPORT
</command>
<features>
diff --git a/tests/data/test1528 b/tests/data/test1528
index 8bd056656..8c0209ce8 100644
--- a/tests/data/test1528
+++ b/tests/data/test1528
@@ -37,10 +37,10 @@ http-proxy
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
Separately specified proxy/server headers sent in a proxy GET
- </name>
- <command>
+</name>
+<command>
http://the.old.moo:%HTTPPORT/%TESTNUMBER %HOSTIP:%PROXYPORT
</command>
<features>
diff --git a/tests/data/test1529 b/tests/data/test1529
index 68136aae3..a06ce75db 100644
--- a/tests/data/test1529
+++ b/tests/data/test1529
@@ -25,10 +25,10 @@ http-proxy
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
HTTP request-injection in URL sent over proxy
- </name>
- <command>
+</name>
+<command>
"http://the.old.moo:%HTTPPORT/%TESTNUMBER" %HOSTIP:%PROXYPORT
</command>
<features>
diff --git a/tests/data/test153 b/tests/data/test153
index c51824fe7..b55a70a03 100644
--- a/tests/data/test153
+++ b/tests/data/test153
@@ -77,10 +77,10 @@ http
!SSPI
crypto
</features>
- <name>
+<name>
HTTP with Digest authorization with stale=true
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER0001 -u testuser:testpass --digest http://%HOSTIP:%HTTPPORT/%TESTNUMBER0002
</command>
</client>
diff --git a/tests/data/test1530 b/tests/data/test1530
index 0fbd21cf0..2475c1417 100644
--- a/tests/data/test1530
+++ b/tests/data/test1530
@@ -15,9 +15,9 @@ http
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
CURLOPT_OPENSOCKETFUNCTION returns bad socket
- </name>
+</name>
</client>
# it should be detected and an error should be reported
diff --git a/tests/data/test1531 b/tests/data/test1531
index e590af08b..00801bb97 100644
--- a/tests/data/test1531
+++ b/tests/data/test1531
Binary files differ
diff --git a/tests/data/test1538 b/tests/data/test1538
index ba5cf29ce..59cd1628e 100644
--- a/tests/data/test1538
+++ b/tests/data/test1538
@@ -185,7 +185,8 @@ u26: Bad query
u27: Bad scheme
u28: Unsupported number of slashes following scheme
u29: Bad user
-u30: CURLUcode unknown
+u30: libcurl lacks IDN support
+u31: CURLUcode unknown
</stdout>
</verify>
diff --git a/tests/data/test154 b/tests/data/test154
index c0f76514d..4f818f00f 100644
--- a/tests/data/test154
+++ b/tests/data/test154
@@ -10,9 +10,6 @@ HTTP Digest auth
# Server-side
<reply>
-<servercmd>
-auth_required
-</servercmd>
<data>
HTTP/1.1 401 Authorization Required swsclose
Server: Apache/1.3.27 (Darwin) PHP/4.1.2
@@ -66,13 +63,13 @@ http
!SSPI
crypto
</features>
- <name>
+<name>
HTTP PUT with --anyauth authorization (picking Digest)
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T log/put%TESTNUMBER -u testuser:testpass --anyauth
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T %LOGDIR/put%TESTNUMBER -u testuser:testpass --anyauth
</command>
-<file name="log/put%TESTNUMBER">
+<file name="%LOGDIR/put%TESTNUMBER">
This is data we upload with PUT
a second line
line three
@@ -88,15 +85,17 @@ Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 85
-Expect: 100-continue
+This is data we upload with PUT
+a second line
+line three
+four is the number of lines
PUT /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: Digest username="testuser", realm="gimme all yer s3cr3ts", nonce="11223344", uri="/%TESTNUMBER", response="b71551e12d1c456e47d8388ecb2edeca"
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 85
-Expect: 100-continue
This is data we upload with PUT
a second line
diff --git a/tests/data/test1540 b/tests/data/test1540
index 2dc826555..dc1aa7011 100644
--- a/tests/data/test1540
+++ b/tests/data/test1540
@@ -6,6 +6,7 @@ HTTP GET
CURLPAUSE_RECV
chunked Transfer-Encoding
Trailer:
+DELAY
</keywords>
</info>
@@ -30,7 +31,7 @@ HTTP/1.1 200 OK swsclose
Transfer-Encoding: chunked
Trailer: MyCoolTrailerHeader
-Got 4 bytes but pausing!
+Got bytes but pausing!
datad474
MyCoolTrailerHeader: amazingtrailer
</datacheck>
@@ -46,10 +47,10 @@ http
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
chunked with trailers and pausing the receive
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1542 b/tests/data/test1542
index cead5a0e8..f9806cda8 100644
--- a/tests/data/test1542
+++ b/tests/data/test1542
@@ -2,7 +2,7 @@
<info>
<keywords>
HTTP
-connection re-use
+connection reuse
persistent connection
CURLOPT_MAXLIFETIME_CONN
verbose logs
@@ -26,10 +26,10 @@ http
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
connection reuse with CURLOPT_MAXLIFETIME_CONN
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
@@ -54,11 +54,11 @@ Host: %HOSTIP:%HTTPPORT
Accept: */*
</protocol>
-<file name="log/stderr%TESTNUMBER" mode="text">
+<file name="%LOGDIR/stderr%TESTNUMBER" mode="text">
== Info: Connection #0 to host %HOSTIP left intact
== Info: Connection #0 to host %HOSTIP left intact
== Info: Connection #0 to host %HOSTIP left intact
-== Info: Closing connection 0
+== Info: Closing connection
== Info: Connection #1 to host %HOSTIP left intact
</file>
<stripfile>
diff --git a/tests/data/test1544 b/tests/data/test1544
new file mode 100644
index 000000000..f658f5a74
--- /dev/null
+++ b/tests/data/test1544
@@ -0,0 +1,24 @@
+<testcase>
+<info>
+<keywords>
+source analysis
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+
+<name>
+Verify all string options are translated by OS/400 wrapper
+</name>
+
+<command type="perl">
+%SRCDIR/check-translatable-options.pl %SRCDIR/..
+</command>
+</client>
+
+</testcase>
diff --git a/tests/data/test1545 b/tests/data/test1545
new file mode 100644
index 000000000..477b5bf44
--- /dev/null
+++ b/tests/data/test1545
@@ -0,0 +1,38 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+<features>
+form-api
+</features>
+<server>
+http
+</server>
+# tool is what to use instead of 'curl'
+<tool>
+lib%TESTNUMBER
+</tool>
+
+<name>
+use curl_formadd() data twice with unreadable file
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+</verify>
+</testcase>
diff --git a/tests/data/test155 b/tests/data/test155
index 2d916c975..83aed115f 100644
--- a/tests/data/test155
+++ b/tests/data/test155
@@ -10,9 +10,6 @@ NTLM
# Server-side
<reply>
-<servercmd>
-auth_required
-</servercmd>
<data>
HTTP/1.1 401 NTLM Authorization Required swsclose
Server: Apache/1.3.27 (Darwin) PHP/4.1.2
@@ -87,9 +84,9 @@ http
HTTP PUT with --anyauth authorization (picking NTLM)
</name>
<command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T log/put%TESTNUMBER -u testuser:testpass --anyauth
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T %LOGDIR/put%TESTNUMBER -u testuser:testpass --anyauth
</command>
-<file name="log/put%TESTNUMBER">
+<file name="%LOGDIR/put%TESTNUMBER">
This is data we upload with PUT
a second line
line three
@@ -105,8 +102,11 @@ Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 85
-Expect: 100-continue
+This is data we upload with PUT
+a second line
+line three
+four is the number of lines
PUT /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
@@ -120,7 +120,6 @@ Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAL
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 85
-Expect: 100-continue
This is data we upload with PUT
a second line
diff --git a/tests/data/test1550 b/tests/data/test1550
index bfb80a1ca..2d297a47a 100644
--- a/tests/data/test1550
+++ b/tests/data/test1550
@@ -19,10 +19,10 @@ none
lib%TESTNUMBER
</tool>
- <name>
+<name>
verify setting pipeling blocklisting options
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%NOLISTENPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1551 b/tests/data/test1551
index 4c60db85d..8af8d6641 100644
--- a/tests/data/test1551
+++ b/tests/data/test1551
@@ -38,10 +38,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
re-run redirected transfer without setting URL again
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1552 b/tests/data/test1552
index 9468f4133..fd35ca1f6 100644
--- a/tests/data/test1552
+++ b/tests/data/test1552
@@ -31,14 +31,14 @@ body
<server>
imap
</server>
- <name>
+<name>
IMAP multi transfer error without curl_multi_remove_handle
- </name>
+</name>
# tool is what to use instead of 'curl'
<tool>
lib%TESTNUMBER
</tool>
- <command>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1'
</command>
</client>
diff --git a/tests/data/test1553 b/tests/data/test1553
index 595eb5ba5..0c01ab3e6 100644
--- a/tests/data/test1553
+++ b/tests/data/test1553
@@ -34,9 +34,9 @@ Mime
<server>
imap
</server>
- <name>
+<name>
IMAP cleanup before a connection was created
- </name>
+</name>
# tool is what to use instead of 'curl'
<tool>
lib%TESTNUMBER
diff --git a/tests/data/test1554 b/tests/data/test1554
index 812a2c8c0..c16195c17 100644
--- a/tests/data/test1554
+++ b/tests/data/test1554
@@ -69,12 +69,6 @@ run 1: foobar and so on fun!
<- Mutex unlock
-> Mutex lock
<- Mutex unlock
-%if hyper
--> Mutex lock
-<- Mutex unlock
--> Mutex lock
-<- Mutex unlock
-%endif
run 1: foobar and so on fun!
-> Mutex lock
<- Mutex unlock
diff --git a/tests/data/test1555 b/tests/data/test1555
index 547ec39e4..e3c7e55c6 100644
--- a/tests/data/test1555
+++ b/tests/data/test1555
@@ -2,6 +2,7 @@
<info>
<keywords>
RECURSIVE_API_CALL
+DELAY
</keywords>
</info>
@@ -24,12 +25,12 @@ http
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
verify api is protected against calls from callbacks
- </name>
+</name>
# this server/host won't be used for real
- <command>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1556 b/tests/data/test1556
index 08951a8d2..80254da2d 100644
--- a/tests/data/test1556
+++ b/tests/data/test1556
@@ -35,10 +35,10 @@ http
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
send long HTTP headers to header callback
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1558 b/tests/data/test1558
index 26854c2dd..46332d198 100644
--- a/tests/data/test1558
+++ b/tests/data/test1558
@@ -24,9 +24,9 @@ lib%TESTNUMBER
CURLINFO_PROTOCOL for file:// transfer
</name>
<command>
-file://%FILE_PWD/log/data%TESTNUMBER
+file://%FILE_PWD/%LOGDIR/data%TESTNUMBER
</command>
-<file name="log/data%TESTNUMBER">
+<file name="%LOGDIR/data%TESTNUMBER">
hello
</file>
</client>
diff --git a/tests/data/test1559 b/tests/data/test1559
index 863a89e5a..c307f6447 100644
--- a/tests/data/test1559
+++ b/tests/data/test1559
@@ -37,7 +37,7 @@ Set excessive URL lengths
CURLOPT_URL 10000000 bytes URL == 43
CURLOPT_POSTFIELDS 10000000 bytes data == 0
CURLUPART_URL 10000000 bytes URL == 3 (Malformed input to a URL function)
-CURLUPART_SCHEME 10000000 bytes scheme == 27 (Bad scheme)
+CURLUPART_SCHEME 10000000 bytes scheme == 3 (Malformed input to a URL function)
CURLUPART_USER 10000000 bytes user == 3 (Malformed input to a URL function)
</stdout>
</verify>
diff --git a/tests/data/test156 b/tests/data/test156
index 94bb3393f..877c215b9 100644
--- a/tests/data/test156
+++ b/tests/data/test156
@@ -24,13 +24,13 @@ PUT received fine. Thank you very much
<server>
http
</server>
- <name>
+<name>
HTTP PUT with --anyauth (when the server requires none)
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T log/put%TESTNUMBER -u testuser:testpass --anyauth
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T %LOGDIR/put%TESTNUMBER -u testuser:testpass --anyauth
</command>
-<file name="log/put%TESTNUMBER">
+<file name="%LOGDIR/put%TESTNUMBER">
This is data we upload with PUT
a second line
line three
@@ -46,7 +46,6 @@ Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 85
-Expect: 100-continue
This is data we upload with PUT
a second line
diff --git a/tests/data/test1560 b/tests/data/test1560
index f6722fd41..fc27000d1 100644
--- a/tests/data/test1560
+++ b/tests/data/test1560
@@ -12,6 +12,9 @@ URLAPI
<server>
none
</server>
+<setenv>
+LANG=en_US.UTF-8
+</setenv>
<features>
file
https
@@ -22,11 +25,10 @@ imap
ldap
dict
ftp
-ipv6
</features>
- <name>
+<name>
URL API
- </name>
+</name>
<tool>
lib%TESTNUMBER
</tool>
@@ -34,13 +36,6 @@ lib%TESTNUMBER
<verify>
<stdout>
-we got [fe80::20c:29ff:fe9c:409b]
-we got https://[::1]/hello.html
-we got https://example.com/hello.html
-we got https://[fe80::20c:29ff:fe9c:409b%25eth0]/hello.html
-we got [fe80::20c:29ff:fe9c:409b]
-we got eth0
-we got https://[fe80::20c:29ff:fe9c:409b%25clown]/hello.html
success
</stdout>
</verify>
diff --git a/tests/data/test1561 b/tests/data/test1561
index 882b25780..7dbce1108 100644
--- a/tests/data/test1561
+++ b/tests/data/test1561
@@ -19,7 +19,7 @@ Server: test-server/fake
Set-Cookie: super=secret; domain=example.com; path=/%TESTNUMBER; secure;
Set-Cookie: supersuper=secret; domain=example.com; path=/%TESTNUMBER/login/; secure;
Set-Cookie: __Secure-SID=12345; Domain=example.com
-Set-Cookie: __Secure-SID=12346; Secure; Domain=example.com
+Set-Cookie: __SecURE-SID=12346; Secure; Domain=example.com
Set-Cookie: supersupersuper=secret; __Secure-SID=12346; Secure; Domain=example.com
Set-Cookie: __Host-SID=22345
Set-Cookie: __Host-SID=22346; Secure
@@ -43,7 +43,7 @@ Set-Cookie: supersuper=plain; domain=example.com; path=/%TESTNUMBER/login/en;
Set-Cookie: supersuper=plain; domain=example.com; path=/%TESTNUMBER/login;
Set-Cookie: secureoverhttp=yes; domain=example.com; path=/%TESTNUMBER; secure;
Set-Cookie: __Secure-SID=22345; Domain=example.com
-Set-Cookie: __Secure-SID=22346; Secure; Domain=example.com
+Set-Cookie: __SecuRE-SID=22346; Secure; Domain=example.com
Set-Cookie: __Host-SID=32345
Set-Cookie: __Host-SID=32346; Secure
Set-Cookie: __Host-SID=32347; Domain=example.com
@@ -72,7 +72,7 @@ https
Cookies set over HTTP can't override secure ones
</name>
<command>
--k https://%HOSTIP:%HTTPSPORT/%TESTNUMBER0001 -L -c log/jar%TESTNUMBER.txt -H "Host: www.example.com" http://%HOSTIP:%HTTPPORT/%TESTNUMBER0002 -L -c log/jar%TESTNUMBER.txt -H "Host: www.example.com"
+-k https://%HOSTIP:%HTTPSPORT/%TESTNUMBER0001 -L -c %LOGDIR/jar%TESTNUMBER.txt -H "Host: www.example.com" http://%HOSTIP:%HTTPPORT/%TESTNUMBER0002 -L -c %LOGDIR/jar%TESTNUMBER.txt -H "Host: www.example.com"
</command>
</client>
<verify>
@@ -88,7 +88,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/jar%TESTNUMBER.txt" mode="text">
+<file name="%LOGDIR/jar%TESTNUMBER.txt" mode="text">
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
@@ -97,7 +97,7 @@ Accept: */*
#HttpOnly_.example.com TRUE /15 FALSE 0 super plain
www.example.com FALSE / TRUE 0 __Host-SID 12346
.example.com TRUE / TRUE 0 supersupersuper secret
-.example.com TRUE / TRUE 0 __Secure-SID 12346
+.example.com TRUE / TRUE 0 __SecURE-SID 12346
.example.com TRUE /%TESTNUMBER/login/ TRUE 0 supersuper secret
.example.com TRUE /1561 TRUE 0 super secret
</file>
diff --git a/tests/data/test1566 b/tests/data/test1566
index b954c2aea..be047dceb 100644
--- a/tests/data/test1566
+++ b/tests/data/test1566
@@ -32,12 +32,12 @@ http
--etag-compare that gets a 304 back shouldn't overwrite the file
</name>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o log/output%TESTNUMBER --etag-compare log/etag%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o %LOGDIR/output%TESTNUMBER --etag-compare %LOGDIR/etag%TESTNUMBER
</command>
-<file name="log/etag%TESTNUMBER">
+<file name="%LOGDIR/etag%TESTNUMBER">
"123456"
</file>
-<file1 name="log/output%TESTNUMBER">
+<file1 name="%LOGDIR/output%TESTNUMBER">
downloaded already
</file1>
@@ -56,7 +56,7 @@ If-None-Match: "123456"
</protocol>
# verify that the target file is untouched
-<file name="log/output%TESTNUMBER">
+<file name="%LOGDIR/output%TESTNUMBER">
downloaded already
</file>
</verify>
diff --git a/tests/data/test1567 b/tests/data/test1567
index 3e6ce8812..68b1fe211 100644
--- a/tests/data/test1567
+++ b/tests/data/test1567
@@ -39,10 +39,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
re-run redirected transfer without setting CURLU URL again
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1569 b/tests/data/test1569
index 3342f84fc..159a81391 100644
--- a/tests/data/test1569
+++ b/tests/data/test1569
@@ -26,9 +26,9 @@ REPLY EPSV 500 no such command
<server>
ftp
</server>
- <name>
+<name>
FTP first type=A then regular URL
- </name>
+</name>
<tool>
lib%TESTNUMBER
</tool>
diff --git a/tests/data/test157 b/tests/data/test157
index 63e611c78..5ab45ec05 100644
--- a/tests/data/test157
+++ b/tests/data/test157
@@ -24,10 +24,10 @@ GET received and served just fine. Thank you very much
<server>
http
</server>
- <name>
+<name>
HTTP GET with --anyauth (when the server requires none)
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u testuser:testpass --anyauth
</command>
</client>
diff --git a/tests/data/test1570 b/tests/data/test1570
index 40c87ef40..713ab5ea7 100644
--- a/tests/data/test1570
+++ b/tests/data/test1570
@@ -26,9 +26,9 @@ REPLY EPSV 500 no such command
<server>
ftp
</server>
- <name>
+<name>
FTP first type=D then regular URL
- </name>
+</name>
<tool>
lib1569
</tool>
diff --git a/tests/data/test158 b/tests/data/test158
index 23861365e..db3a49b7f 100644
--- a/tests/data/test158
+++ b/tests/data/test158
@@ -23,10 +23,10 @@ Mime
<server>
http
</server>
- <name>
+<name>
HTTP multipart formpost with only a 100 reply
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -F name=daniel
</command>
</client>
@@ -42,7 +42,7 @@ POST /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 145
+Content-Length: 157
Content-Type: multipart/form-data; boundary=----------------------------4f12fcdaa3bc
------------------------------4f12fcdaa3bc
diff --git a/tests/data/test159 b/tests/data/test159
index 05968eb10..fabcb4f98 100644
--- a/tests/data/test159
+++ b/tests/data/test159
@@ -50,16 +50,16 @@ debug
<server>
http
</server>
- <name>
+<name>
HTTP with NTLM authorization when talking HTTP/1.0 (known to fail)
- </name>
+</name>
<setenv>
# we force our own host name, in order to make the test machine independent
CURL_GETHOSTNAME=curlhost
# we try to use the LD_PRELOAD hack, if not a debug build
LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
</setenv>
- <command>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u testuser:testpass --ntlm -0
</command>
<precheck>
diff --git a/tests/data/test1590 b/tests/data/test1590
index dbb81cc29..ea860215f 100644
--- a/tests/data/test1590
+++ b/tests/data/test1590
@@ -34,9 +34,9 @@ Mime
<server>
imap
</server>
- <name>
+<name>
IMAP cleanup before a connection was created
- </name>
+</name>
# tool is what to use instead of 'curl'
<tool>
lib1553
diff --git a/tests/data/test1592 b/tests/data/test1592
index a2c0f1ca7..e0adc0efc 100644
--- a/tests/data/test1592
+++ b/tests/data/test1592
@@ -5,6 +5,8 @@ HTTP
multi
resolve
speedcheck
+flaky
+timing-dependent
</keywords>
</info>
@@ -16,11 +18,11 @@ none
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
HTTP request, remove handle while resolving, don't block
- </name>
+</name>
- <command>
+<command>
http://a-site-never-accessed.example.org/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test16 b/tests/data/test16
index 240fd379c..86fb55fb8 100644
--- a/tests/data/test16
+++ b/tests/data/test16
@@ -27,10 +27,10 @@ the content goes here
<server>
http
</server>
- <name>
+<name>
HTTP with proxy authorization
- </name>
- <command>
+</name>
+<command>
-U fake@user:loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong -x %HOSTIP:%HTTPPORT http://we.want.that.site.com/%TESTNUMBER
</command>
<features>
diff --git a/tests/data/test160 b/tests/data/test160
index 778787e69..e74a40b66 100644
--- a/tests/data/test160
+++ b/tests/data/test160
@@ -3,6 +3,7 @@
<keywords>
HTTP
HTTP GET
+DELAY
</keywords>
</info>
@@ -33,10 +34,10 @@ wait 1
<server>
http
</server>
- <name>
+<name>
HTTP with delayed close, conn reuse, connection reset and retry
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER http://%HOSTIP:%HTTPPORT/wantmore/%TESTNUMBER0001
</command>
</client>
diff --git a/tests/data/test1600 b/tests/data/test1600
index 33413d7c3..0705a0df3 100644
--- a/tests/data/test1600
+++ b/tests/data/test1600
@@ -16,8 +16,8 @@ none
unittest
NTLM
</features>
- <name>
+<name>
NTLM unit tests
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test1601 b/tests/data/test1601
index 2065fdd1d..935f4e236 100644
--- a/tests/data/test1601
+++ b/tests/data/test1601
@@ -15,8 +15,8 @@ none
<features>
unittest
</features>
- <name>
+<name>
MD5 unit tests
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test1602 b/tests/data/test1602
index 56e243ff8..546e8cbbd 100644
--- a/tests/data/test1602
+++ b/tests/data/test1602
@@ -15,8 +15,8 @@ none
<features>
unittest
</features>
- <name>
+<name>
Internal hash create/add/destroy testing, exercising clean functions
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test1603 b/tests/data/test1603
index 406d197ee..43cd3849d 100644
--- a/tests/data/test1603
+++ b/tests/data/test1603
@@ -15,8 +15,8 @@ none
<features>
unittest
</features>
- <name>
+<name>
Internal hash add, retrieval, deletion testing
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test1604 b/tests/data/test1604
index 39daf9ddc..33e4e26c4 100644
--- a/tests/data/test1604
+++ b/tests/data/test1604
@@ -14,8 +14,8 @@ none
<features>
unittest
</features>
- <name>
+<name>
Test WIN32/MSDOS filename sanitization
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test1605 b/tests/data/test1605
index a123b01a1..d97c85178 100644
--- a/tests/data/test1605
+++ b/tests/data/test1605
@@ -14,8 +14,8 @@ none
<features>
unittest
</features>
- <name>
+<name>
Test negative data lengths as input to libcurl functions
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test1606 b/tests/data/test1606
index 83e984427..99104def2 100644
--- a/tests/data/test1606
+++ b/tests/data/test1606
@@ -15,8 +15,8 @@ none
<features>
unittest
</features>
- <name>
+<name>
verify speedcheck
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test1607 b/tests/data/test1607
index 6d28d6eb4..17f8a8159 100644
--- a/tests/data/test1607
+++ b/tests/data/test1607
@@ -15,8 +15,8 @@ none
<features>
unittest
</features>
- <name>
+<name>
CURLOPT_RESOLVE parsing
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test1608 b/tests/data/test1608
index fbc623895..c7d6a0a90 100644
--- a/tests/data/test1608
+++ b/tests/data/test1608
@@ -14,9 +14,10 @@ none
</server>
<features>
unittest
+shuffle-dns
</features>
- <name>
+<name>
verify DNS shuffling
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test1609 b/tests/data/test1609
index 6d28d6eb4..17f8a8159 100644
--- a/tests/data/test1609
+++ b/tests/data/test1609
@@ -15,8 +15,8 @@ none
<features>
unittest
</features>
- <name>
+<name>
CURLOPT_RESOLVE parsing
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test161 b/tests/data/test161
index 53508e4b5..d8d779376 100644
--- a/tests/data/test161
+++ b/tests/data/test161
@@ -21,10 +21,10 @@ PASV
<server>
ftp
</server>
- <name>
+<name>
FTP RETR PASV
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1610 b/tests/data/test1610
index fff973371..8ee68d43c 100644
--- a/tests/data/test1610
+++ b/tests/data/test1610
@@ -15,8 +15,8 @@ none
<features>
unittest
</features>
- <name>
+<name>
SHA256 unit tests
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test1611 b/tests/data/test1611
index 008aea7ec..ffd9de3cf 100644
--- a/tests/data/test1611
+++ b/tests/data/test1611
@@ -15,8 +15,8 @@ none
<features>
unittest
</features>
- <name>
+<name>
MD4 unit tests
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test1612 b/tests/data/test1612
index 3e92b6791..e186a4a56 100644
--- a/tests/data/test1612
+++ b/tests/data/test1612
@@ -15,8 +15,8 @@ none
<features>
unittest
</features>
- <name>
+<name>
HMAC unit tests
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test1614 b/tests/data/test1614
index 4a9d54eb6..2c4d6abe9 100644
--- a/tests/data/test1614
+++ b/tests/data/test1614
@@ -15,9 +15,9 @@ none
unittest
proxy
</features>
- <name>
-cidr comparisons
- </name>
+<name>
+noproxy and cidr comparisons
+</name>
</client>
<errorcode>
0
diff --git a/tests/data/test162 b/tests/data/test162
index 3fa291de5..ec0cd2545 100644
--- a/tests/data/test162
+++ b/tests/data/test162
@@ -34,10 +34,10 @@ proxy
<server>
http
</server>
- <name>
+<name>
HTTP GET asking for --proxy-ntlm when some other authentication is required
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --proxy http://%HOSTIP:%HTTPPORT --proxy-user foo:bar --proxy-ntlm --fail
</command>
</client>
diff --git a/tests/data/test1620 b/tests/data/test1620
index 038bbcc1b..32f50994f 100644
--- a/tests/data/test1620
+++ b/tests/data/test1620
@@ -15,8 +15,8 @@ none
<features>
unittest
</features>
- <name>
+<name>
unit tests for url.c
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test1621 b/tests/data/test1621
index 62c81052f..953440f29 100644
--- a/tests/data/test1621
+++ b/tests/data/test1621
@@ -16,8 +16,8 @@ none
unittest
https
</features>
- <name>
+<name>
unit tests for stripcredentials from URL
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test163 b/tests/data/test163
index b763c3ca8..a3bf37530 100644
--- a/tests/data/test163
+++ b/tests/data/test163
@@ -26,14 +26,14 @@ Mime
<server>
http
</server>
- <name>
+<name>
HTTP multipart formpost with contents from a file
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -F "name=<log/field%TESTNUMBER" -F tool=curl
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -F "name=<%LOGDIR/field%TESTNUMBER" -F tool=curl
</command>
# We create this file before the command is invoked!
-<file name="log/field%TESTNUMBER">
+<file name="%LOGDIR/field%TESTNUMBER">
contents
from
a
@@ -56,7 +56,7 @@ POST /we/want/%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 304
+Content-Length: 322
Content-Type: multipart/form-data; boundary=----------------------------c2d1767eb6ac
------------------------------c2d1767eb6ac
diff --git a/tests/data/test1630 b/tests/data/test1630
index 4a983a9d5..35bc53fd4 100644
--- a/tests/data/test1630
+++ b/tests/data/test1630
@@ -28,10 +28,10 @@ the content goes here
http
https-proxy
</server>
- <name>
+<name>
HTTPS-proxy with Basic auth to HTTP without auth
- </name>
- <command>
+</name>
+<command>
-U fake@user:loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong -x https://%HOSTIP:%HTTPSPROXYPORT http://we.want.that.site.com/%TESTNUMBER --proxy-insecure
</command>
<features>
diff --git a/tests/data/test1631 b/tests/data/test1631
index 4c0598706..83bc83e42 100644
--- a/tests/data/test1631
+++ b/tests/data/test1631
@@ -39,10 +39,10 @@ companions always called me.
ftp
https-proxy
</server>
- <name>
+<name>
FTP through HTTPS-proxy
- </name>
- <command>
+</name>
+<command>
-p -x https://%HOSTIP:%HTTPSPROXYPORT ftp://ftp.site.thru.https.proxy:%FTPPORT/%TESTNUMBER --proxy-insecure
</command>
<features>
diff --git a/tests/data/test1632 b/tests/data/test1632
index eceb6c550..18674d21b 100644
--- a/tests/data/test1632
+++ b/tests/data/test1632
@@ -48,10 +48,10 @@ mother knew what became of me.
ftp
https-proxy
</server>
- <name>
-FTP through HTTPS-proxy, with connection re-use
- </name>
- <command>
+<name>
+FTP through HTTPS-proxy, with connection reuse
+</name>
+<command>
-p -x https://%HOSTIP:%HTTPSPROXYPORT ftp://ftp.site.thru.https.proxy:%FTPPORT/%TESTNUMBER --proxy-insecure ftp://ftp.site.thru.https.proxy:%FTPPORT/%TESTNUMBER0002
</command>
<features>
diff --git a/tests/data/test164 b/tests/data/test164
index 09310a0c2..83f7a107a 100644
--- a/tests/data/test164
+++ b/tests/data/test164
@@ -44,10 +44,10 @@ Content-range: bytes 12-15/3781
<server>
http
</server>
- <name>
+<name>
HTTP range with multiple ranges
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -r 0-10,12-15
</command>
</client>
diff --git a/tests/data/test165 b/tests/data/test165
index dfd213157..d0353946a 100644
--- a/tests/data/test165
+++ b/tests/data/test165
@@ -38,10 +38,10 @@ LC_CTYPE=en_US.UTF-8
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
- <name>
+<name>
HTTP over proxy with IDN host name
- </name>
- <command>
+</name>
+<command>
http://www.åäö.se/page/%TESTNUMBER -x %HOSTIP:%HTTPPORT http://www.große.de/page/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1650 b/tests/data/test1650
index 6248b9814..57a06f05e 100644
--- a/tests/data/test1650
+++ b/tests/data/test1650
@@ -16,8 +16,8 @@ none
unittest
DoH
</features>
- <name>
+<name>
DOH
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test1651 b/tests/data/test1651
index d29974bf2..e552a8ad3 100644
--- a/tests/data/test1651
+++ b/tests/data/test1651
@@ -15,8 +15,8 @@ none
<features>
unittest
</features>
- <name>
+<name>
x509 parsing
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test1654 b/tests/data/test1654
index ef6657494..3bd6f65c0 100644
--- a/tests/data/test1654
+++ b/tests/data/test1654
@@ -24,9 +24,9 @@ CURL_TIME=1548369261
alt-svc
</name>
<command>
-log/%TESTNUMBER
+%LOGDIR/%TESTNUMBER
</command>
-<file name="log/%TESTNUMBER" mode="text">
+<file name="%LOGDIR/%TESTNUMBER" mode="text">
h2 example.com 443 h3 shiny.example.com 8443 "20191231 00:00:00" 0 1
# a comment
h2 foo.example.com 443 h3 shiny.example.com 8443 "20291231 23:30:00" 0 1
@@ -38,7 +38,7 @@ rubbish
</file>
</client>
<verify>
-<file name="log/%TESTNUMBER-out" mode="text">
+<file name="%LOGDIR/%TESTNUMBER-out" mode="text">
# Your alt-svc cache. https://curl.se/docs/alt-svc.html
# This file was generated by libcurl! Edit at your own risk.
h2 example.com 443 h3 shiny.example.com 8443 "20191231 00:00:00" 0 1
diff --git a/tests/data/test1655 b/tests/data/test1655
index e161fb662..c5ec09129 100644
--- a/tests/data/test1655
+++ b/tests/data/test1655
@@ -16,8 +16,8 @@ none
unittest
DoH
</features>
- <name>
+<name>
unit test for doh_encode
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test166 b/tests/data/test166
index bcbf37755..0951b2359 100644
--- a/tests/data/test166
+++ b/tests/data/test166
@@ -26,14 +26,14 @@ Mime
<server>
http
</server>
- <name>
+<name>
HTTP formpost a file with spaces in name
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -F "name=@log/fie ld %TESTNUMBER"
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -F "name=@%LOGDIR/fie ld %TESTNUMBER"
</command>
# We create this file before the command is invoked!
-<file name="log/fie ld %TESTNUMBER">
+<file name="%LOGDIR/fie ld %TESTNUMBER">
data inside the file
</file>
</client>
@@ -48,7 +48,7 @@ POST /we/want/%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 223
+Content-Length: 235
Content-Type: multipart/form-data; boundary=----------------------------b0b3d6d23991
------------------------------b0b3d6d23991
diff --git a/tests/data/test1660 b/tests/data/test1660
index cbbcf7587..f86126d19 100644
--- a/tests/data/test1660
+++ b/tests/data/test1660
@@ -15,7 +15,7 @@ unittest
HSTS
</features>
-<file name="log/input%TESTNUMBER">
+<file name="%LOGDIR/hsts%TESTNUMBER">
# Your HSTS cache. https://curl.se/docs/hsts.html
# This file was generated by libcurl! Edit at your own risk.
.readfrom.example "20211001 04:47:41"
@@ -31,7 +31,7 @@ CURL_TIME=1548369261
HSTS
</name>
<command>
--
+%LOGDIR/hsts%TESTNUMBER
</command>
</client>
@@ -72,7 +72,7 @@ expire.example [expire.example]: 1548369268
'expire.example' is not HSTS
'expire.example' is not HSTS
</stdout>
-<file name="log/hsts%TESTNUMBER" mode="text">
+<file name="%LOGDIR/hsts%TESTNUMBER.save" mode="text">
# Your HSTS cache. https://curl.se/docs/hsts.html
# This file was generated by libcurl! Edit at your own risk.
.new.example "unlimited"
diff --git a/tests/data/test1661 b/tests/data/test1661
index 0e02d78d0..5a648e515 100644
--- a/tests/data/test1661
+++ b/tests/data/test1661
@@ -15,8 +15,8 @@ none
<features>
unittest
</features>
- <name>
+<name>
bufref unit tests
- </name>
+</name>
</client>
</testcase>
diff --git a/tests/data/test1662 b/tests/data/test1662
new file mode 100644
index 000000000..b2fbcce8b
--- /dev/null
+++ b/tests/data/test1662
@@ -0,0 +1,67 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 301 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Location: %TESTNUMBER0002
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+<data2 nocheck="yes">
+HTTP/1.1 200 OK
+Content-Length: 6
+Connection: close
+Funny-head: nono
+
+-bar-
+</data2>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+Mime
+debug
+</features>
+<server>
+http
+</server>
+<name>
+HTTP formpost from callback and a redirect and switch to GET
+</name>
+<tool>
+lib%TESTNUMBER
+</tool>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+
+# This does not verify the protocol because the sending of data might be
+# aborted early making it hard to check properly.
+<stdout>
+-bar-
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test167 b/tests/data/test167
index 832cc35a6..031b92077 100644
--- a/tests/data/test167
+++ b/tests/data/test167
@@ -47,10 +47,10 @@ http
crypto
proxy
</features>
- <name>
+<name>
HTTP with proxy-requiring-Basic to site-requiring-Digest
- </name>
- <command>
+</name>
+<command>
http://data.from.server.requiring.digest.hohoho.com/%TESTNUMBER --proxy http://%HOSTIP:%HTTPPORT --proxy-user foo:bar --digest --user digest:alot
</command>
</client>
diff --git a/tests/data/test1670 b/tests/data/test1670
index 6d8722f61..34d79f766 100644
--- a/tests/data/test1670
+++ b/tests/data/test1670
@@ -40,7 +40,7 @@ http
-w individual header output
</name>
<command option="no-output">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -w '%header{etag} %header{nope} %header{DATE}\n' -o log/%TESTNUMBER.out
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -w '%header{etag} %header{nope} %header{DATE}\n' -o %LOGDIR/%TESTNUMBER.out
</command>
</client>
diff --git a/tests/data/test1671 b/tests/data/test1671
index e45ea784d..43753b527 100644
--- a/tests/data/test1671
+++ b/tests/data/test1671
@@ -43,7 +43,7 @@ http
-w header JSON output
</name>
<command option="no-output">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -w '%{header_json}\n' -o log/%TESTNUMBER.out
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -w '%{header_json}\n' -o %LOGDIR/%TESTNUMBER.out
</command>
</client>
@@ -64,6 +64,8 @@ Accept: */*
"etag":["\"21025-dc7-39462498\""],
"accept-ranges":["bytes"],
"set-cookie":["firstcookie=want1; path=/","2cookie=want2; path=/","cookie3=want3; path=/"],
+"funny-head":["yesyes"],
+"content-type":["text/html"],
"content-length":["6"],
"connection":["close"]
}
diff --git a/tests/data/test168 b/tests/data/test168
index d552a7133..d6d4e895c 100644
--- a/tests/data/test168
+++ b/tests/data/test168
@@ -61,10 +61,10 @@ http
crypto
proxy
</features>
- <name>
+<name>
HTTP with proxy-requiring-Digest to site-requiring-Digest
- </name>
- <command>
+</name>
+<command>
http://data.from.server.requiring.digest.hohoho.com/%TESTNUMBER --proxy http://%HOSTIP:%HTTPPORT --proxy-user foo:bar --proxy-digest --digest --user digest:alot
</command>
</client>
diff --git a/tests/data/test1680 b/tests/data/test1680
index 7d8167c0e..4775a411b 100644
--- a/tests/data/test1680
+++ b/tests/data/test1680
@@ -33,9 +33,9 @@ http
http
</features>
<command option="no-output">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o log/exist%TESTNUMBER --clobber
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o %LOGDIR/exist%TESTNUMBER --clobber
</command>
-<file name="log/exist%TESTNUMBER">
+<file name="%LOGDIR/exist%TESTNUMBER">
to be overwritten
</file>
</client>
@@ -43,7 +43,7 @@ to be overwritten
#
# Verify data after the test has been "shot"
<verify>
-<file name="log/exist%TESTNUMBER">
+<file name="%LOGDIR/exist%TESTNUMBER">
HTTP/1.0 200 OK
Connection: close
Content-Type: text/plain
diff --git a/tests/data/test1681 b/tests/data/test1681
index cfc8a5db8..16c0d8c50 100644
--- a/tests/data/test1681
+++ b/tests/data/test1681
@@ -33,9 +33,9 @@ http
http
</features>
<command option="no-output">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o log/exist%TESTNUMBER --no-clobber -w '%{filename_effective}\n'
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o %LOGDIR/exist%TESTNUMBER --no-clobber -w '%{filename_effective}\n'
</command>
-<file name="log/exist%TESTNUMBER">
+<file name="%LOGDIR/exist%TESTNUMBER">
to stay the same
</file>
</client>
@@ -43,10 +43,10 @@ to stay the same
#
# Verify data after the test has been "shot"
<verify>
-<file name="log/exist%TESTNUMBER">
+<file name="%LOGDIR/exist%TESTNUMBER">
to stay the same
</file>
-<file1 name="log/exist%TESTNUMBER.1">
+<file1 name="%LOGDIR/exist%TESTNUMBER.1">
HTTP/1.0 200 OK
Connection: close
Content-Type: text/plain
@@ -55,7 +55,7 @@ Content-Length: 4
foo
</file1>
<stdout mode="text">
-log/exist%TESTNUMBER.1
+%LOGDIR/exist%TESTNUMBER.1
</stdout>
</verify>
</testcase>
diff --git a/tests/data/test1682 b/tests/data/test1682
index e981c20e9..b5462ab05 100644
--- a/tests/data/test1682
+++ b/tests/data/test1682
@@ -33,9 +33,9 @@ http
http
</features>
<command option="no-output">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER --output-dir log -o exist%TESTNUMBER --no-clobber
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --output-dir %LOGDIR -o exist%TESTNUMBER --no-clobber
</command>
-<file name="log/exist%TESTNUMBER">
+<file name="%LOGDIR/exist%TESTNUMBER">
to stay the same
</file>
</client>
@@ -43,10 +43,10 @@ to stay the same
#
# Verify data after the test has been "shot"
<verify>
-<file name="log/exist%TESTNUMBER">
+<file name="%LOGDIR/exist%TESTNUMBER">
to stay the same
</file>
-<file1 name="log/exist%TESTNUMBER.1">
+<file1 name="%LOGDIR/exist%TESTNUMBER.1">
HTTP/1.0 200 OK
Connection: close
Content-Type: text/plain
diff --git a/tests/data/test1683 b/tests/data/test1683
index 93d27d73c..581470dfc 100644
--- a/tests/data/test1683
+++ b/tests/data/test1683
@@ -33,18 +33,16 @@ http
http
</features>
<command option="no-output">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o log/exist%TESTNUMBER --no-clobber
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o %LOGDIR/exist%TESTNUMBER --no-clobber
</command>
-<file name="log/exist%TESTNUMBER">
+<file name="%LOGDIR/exist%TESTNUMBER">
to stay the same
</file>
<precheck>
-perl -e 'for my $i ((1..100)) { my $filename = "log/exist%TESTNUMBER.$i"; open(FH, ">", $filename) or die $!; print FH "to stay the same" ; close(FH) }'
-# python3 -c 'for i in range(1, 101): open("log/exist%TESTNUMBER.{}".format(i), mode="w").write("to stay the same")'
+perl -e 'for my $i ((1..100)) { my $filename = "%LOGDIR/exist%TESTNUMBER.$i"; open(FH, ">", $filename) or die $!; print FH "to stay the same" ; close(FH) }'
</precheck>
<postcheck>
-perl -e 'for my $i ((1..100)) { my $filename = "log/exist%TESTNUMBER.$i"; open(FH, "<", $filename) or die $!; (<FH> eq "to stay the same" and <FH> eq "") or die "incorrect $filename" ; close(FH) }'
-# python3 -c 'for i in range(1, 101): assert open("log/exist%TESTNUMBER.{}".format(i), mode="r").read(17) == "to stay the same"'
+perl -e 'for my $i ((1..100)) { my $filename = "%LOGDIR/exist%TESTNUMBER.$i"; open(FH, "<", $filename) or die $!; (<FH> eq "to stay the same" and <FH> eq "") or die "incorrect $filename" ; close(FH) }'
</postcheck>
</client>
@@ -54,7 +52,7 @@ perl -e 'for my $i ((1..100)) { my $filename = "log/exist%TESTNUMBER.$i"; open(F
<errorcode>
23
</errorcode>
-<file name="log/exist%TESTNUMBER">
+<file name="%LOGDIR/exist%TESTNUMBER">
to stay the same
</file>
</verify>
diff --git a/tests/data/test17 b/tests/data/test17
index 8e5bf8267..67d2a9fcc 100644
--- a/tests/data/test17
+++ b/tests/data/test17
@@ -22,9 +22,9 @@ This is the proof it works
<server>
http
</server>
- <name>
+<name>
HTTP with config file on stdin
- </name>
+</name>
<stdin>
#
# Use a silly request without '--':
@@ -36,7 +36,7 @@ request MOOO
# long option *with* '--':
--max-time 180
</stdin>
- <command>
+<command>
-K - %HOSTIP:%HTTPPORT/that.site.com/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test170 b/tests/data/test170
index 22767cb5a..f8c7357e6 100644
--- a/tests/data/test170
+++ b/tests/data/test170
@@ -24,10 +24,10 @@ SSL
!SSPI
proxy
</features>
- <name>
+<name>
HTTP POST with --proxy-ntlm and no SSL with no response
- </name>
- <command>
+</name>
+<command>
http://a.galaxy.far.far.away/%TESTNUMBER --proxy http://%HOSTIP:%HTTPPORT --proxy-user foo:bar --proxy-ntlm -F "dummy=value"
</command>
</client>
diff --git a/tests/data/test1700 b/tests/data/test1700
index 7f78bcf5f..8d1fff580 100644
--- a/tests/data/test1700
+++ b/tests/data/test1700
@@ -45,10 +45,10 @@ h2c
http
http/2
</server>
- <name>
+<name>
HTTP/2 GET with Upgrade:
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTP2PORT/%TESTNUMBER --http2 http://%HOSTIP:%HTTP2PORT/%TESTNUMBER0001
</command>
</client>
diff --git a/tests/data/test1701 b/tests/data/test1701
index 22f6147d0..c81862aeb 100644
--- a/tests/data/test1701
+++ b/tests/data/test1701
@@ -36,10 +36,10 @@ h2c
http
http/2
</server>
- <name>
+<name>
HTTP/2 POST with Upgrade:
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTP2PORT/%TESTNUMBER --http2 -d "datatosend"
</command>
</client>
diff --git a/tests/data/test1702 b/tests/data/test1702
index 1da9bc6b5..ced2ca06c 100644
--- a/tests/data/test1702
+++ b/tests/data/test1702
@@ -35,10 +35,10 @@ h2c
http
http/2
</server>
- <name>
+<name>
HTTP/2 HEAD with Upgrade:
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTP2PORT/%TESTNUMBER --http2 --head
</command>
</client>
diff --git a/tests/data/test1703 b/tests/data/test1703
index a6a4d9fe1..bdc647632 100644
--- a/tests/data/test1703
+++ b/tests/data/test1703
@@ -28,9 +28,9 @@ win32
basic file:// file with UTF-8 characters
</name>
<command option="no-include">
-file://localhost%FILE_PWD/log/%E3%83%86%E3%82%B9%E3%83%88%TESTNUMBER.txt
+file://localhost%FILE_PWD/%LOGDIR/%E3%83%86%E3%82%B9%E3%83%88%TESTNUMBER.txt
</command>
-<file name="log/テスト%TESTNUMBER.txt">
+<file name="%LOGDIR/テスト%TESTNUMBER.txt">
foo
bar
bar
diff --git a/tests/data/test171 b/tests/data/test171
index c4f5b6c40..a03ec8a68 100644
--- a/tests/data/test171
+++ b/tests/data/test171
@@ -27,13 +27,14 @@ This server reply is for testing a simple cookie test case...
<server>
http
</server>
- <name>
+<name>
HTTP, get cookie with dot prefixed full domain
- </name>
- <command>
--c log/jar%TESTNUMBER -x %HOSTIP:%HTTPPORT http://z.x.com/%TESTNUMBER
+</name>
+<command>
+-c %LOGDIR/jar%TESTNUMBER -x %HOSTIP:%HTTPPORT http://z.x.com/%TESTNUMBER
</command>
<features>
+cookies
proxy
</features>
</client>
@@ -48,7 +49,7 @@ Accept: */*
Proxy-Connection: Keep-Alive
</protocol>
-<file name="log/jar%TESTNUMBER" mode="text">
+<file name="%LOGDIR/jar%TESTNUMBER" mode="text">
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
diff --git a/tests/data/test172 b/tests/data/test172
index 9dbe64c23..3a9a9ed66 100644
--- a/tests/data/test172
+++ b/tests/data/test172
@@ -23,21 +23,24 @@ boo
<server>
http
</server>
- <name>
+<name>
HTTP with cookies file and custom added cookie
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -b log/jar%TESTNUMBER.txt -b "tool=curl; name=fool"
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -b %LOGDIR/jar%TESTNUMBER.txt -b "tool=curl; name=fool"
</command>
-<file name="log/jar%TESTNUMBER.txt">
+<file name="%LOGDIR/jar%TESTNUMBER.txt">
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
.%HOSTIP TRUE /silly/ FALSE 0 ismatch this
.%HOSTIP TRUE / FALSE 0 partmatch present
-%HOSTIP FALSE /we/want/ FALSE 2139150993 nodomain value
+%HOSTIP FALSE /we/want/ FALSE 22139150993 nodomain value
</file>
+<features>
+cookies
+</features>
</client>
# Verify data after the test has been "shot"
diff --git a/tests/data/test173 b/tests/data/test173
index a3356c976..a4bffcd9a 100644
--- a/tests/data/test173
+++ b/tests/data/test173
@@ -27,10 +27,10 @@ Mime
<server>
http
</server>
- <name>
+<name>
HTTP RFC1867-formpost a file from stdin with "faked" filename
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -F field1=contents1 -F "fileupload=@-;filename=/dev/null;type=text/x-null;format=x-curl"
</command>
@@ -56,7 +56,7 @@ POST /we/want/%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 360
+Content-Length: 378
Content-Type: multipart/form-data; boundary=----------------------------5dbea401cd8c
------------------------------5dbea401cd8c
diff --git a/tests/data/test174 b/tests/data/test174
index b0b7c5f7a..a3d1d080a 100644
--- a/tests/data/test174
+++ b/tests/data/test174
@@ -25,10 +25,10 @@ This is not the real page
<server>
http
</server>
- <name>
+<name>
HTTP POST --anyauth to server not requiring any auth at all
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u testuser:testpass --anyauth -d "junkelijunk"
</command>
</client>
diff --git a/tests/data/test175 b/tests/data/test175
index 382e1a70b..19537ebf3 100644
--- a/tests/data/test175
+++ b/tests/data/test175
@@ -52,10 +52,10 @@ http
<features>
crypto
</features>
- <name>
+<name>
HTTP POST --digest to server not requiring any auth at all
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u auser:apasswd --digest -d "junkelijunk"
</command>
</client>
diff --git a/tests/data/test176 b/tests/data/test176
index 07ace476d..eba8fef78 100644
--- a/tests/data/test176
+++ b/tests/data/test176
@@ -54,10 +54,10 @@ SSL
<server>
http
</server>
- <name>
+<name>
HTTP POST --ntlm to server not requiring any auth at all
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u auser:apasswd --ntlm -d "junkelijunk"
</command>
</client>
diff --git a/tests/data/test177 b/tests/data/test177
index 6ee5fd06e..528b722d6 100644
--- a/tests/data/test177
+++ b/tests/data/test177
@@ -28,10 +28,10 @@ http
<features>
crypto
</features>
- <name>
+<name>
HTTP POST --digest to server doing a 302-location response
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u auser:apasswd --digest -d "junkelijunk"
</command>
</client>
diff --git a/tests/data/test178 b/tests/data/test178
index ca59e9df0..94ea47ecb 100644
--- a/tests/data/test178
+++ b/tests/data/test178
@@ -33,10 +33,10 @@ Date: Tue, 09 Nov 2010 14:49:00 GMT
<server>
http
</server>
- <name>
+<name>
HTTP response with negative Content-Length
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
@@ -53,7 +53,7 @@ Accept: */*
</protocol>
# Hyper curl returns unsupported protocol
-# bullt-in curl returns weird_server_reply
+# built-in curl returns weird_server_reply
<errorcode>
%if hyper
1
diff --git a/tests/data/test179 b/tests/data/test179
index b5aaec2f4..e3869b7fb 100644
--- a/tests/data/test179
+++ b/tests/data/test179
@@ -27,18 +27,19 @@ This server says moo
<server>
http
</server>
- <name>
+<name>
HTTP using proxy and cookies with path checks
- </name>
- <command>
-http://supertrooper.fake/c/%TESTNUMBER -b log/injar%TESTNUMBER -x %HOSTIP:%HTTPPORT
+</name>
+<command>
+http://supertrooper.fake/c/%TESTNUMBER -b %LOGDIR/injar%TESTNUMBER -x %HOSTIP:%HTTPPORT
</command>
-<file name="log/injar%TESTNUMBER">
-supertrooper.fake FALSE /a FALSE 2139150993 mooo indeed
+<file name="%LOGDIR/injar%TESTNUMBER">
+supertrooper.fake FALSE /a FALSE 22139150993 mooo indeed
supertrooper.fake FALSE /b FALSE 0 moo1 indeed
-supertrooper.fake FALSE /c FALSE 2139150993 moo2 indeed
+supertrooper.fake FALSE /c FALSE 22139150993 moo2 indeed
</file>
<features>
+cookies
proxy
</features>
</client>
diff --git a/tests/data/test18 b/tests/data/test18
index 888745889..ae31da29e 100644
--- a/tests/data/test18
+++ b/tests/data/test18
@@ -37,10 +37,10 @@ hoo
<server>
http
</server>
- <name>
+<name>
multiple requests using {} in URL
- </name>
- <command>
+</name>
+<command>
"%HOSTIP:%HTTPPORT/{%TESTNUMBER,%TESTNUMBER0002,%TESTNUMBER0003}"
</command>
</client>
diff --git a/tests/data/test180 b/tests/data/test180
index 32ecd00a9..62a505d5f 100644
--- a/tests/data/test180
+++ b/tests/data/test180
@@ -23,13 +23,13 @@ blablabla
<server>
http
</server>
- <name>
+<name>
HTTP 1.0 PUT
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -T log/test%TESTNUMBER.txt --http1.0
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -T %LOGDIR/test%TESTNUMBER.txt --http1.0
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
Weird
file
to
diff --git a/tests/data/test1800 b/tests/data/test1800
index d7cc73af4..de315d063 100644
--- a/tests/data/test1800
+++ b/tests/data/test1800
@@ -32,10 +32,10 @@ http
<features>
http/2
</features>
- <name>
+<name>
HTTP/2 upgrade refused
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --http2
</command>
@@ -49,7 +49,7 @@ User-Agent: curl/%VERSION
Accept: */*
Connection: Upgrade, HTTP2-Settings
Upgrade: %H2CVER
-HTTP2-Settings: AAMAAABkAAQCAAAAAAIAAAAA
+HTTP2-Settings: AAMAAABkAAQAoAAAAAIAAAAA
</protocol>
</verify>
diff --git a/tests/data/test1801 b/tests/data/test1801
index 9494e92d8..a65a2d5d4 100644
--- a/tests/data/test1801
+++ b/tests/data/test1801
@@ -39,10 +39,10 @@ http
<features>
http/2
</features>
- <name>
+<name>
HTTP/2 upgrade with lying server
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --http2
</command>
diff --git a/tests/data/test181 b/tests/data/test181
index f496c2946..685b24412 100644
--- a/tests/data/test181
+++ b/tests/data/test181
@@ -23,13 +23,13 @@ blablabla
<server>
http
</server>
- <name>
+<name>
HTTP 1.0 POST
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER --data-binary @log/test%TESTNUMBER.txt --http1.0
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER --data-binary @%LOGDIR/test%TESTNUMBER.txt --http1.0
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
Weird
file
to
diff --git a/tests/data/test183 b/tests/data/test183
index 77d9d04f7..ba0df8c2f 100644
--- a/tests/data/test183
+++ b/tests/data/test183
@@ -24,10 +24,10 @@ moo
<server>
http
</server>
- <name>
+<name>
HTTP GET two URLs over a single proxy with persistent connection
- </name>
- <command>
+</name>
+<command>
http://deathstar.another.galaxy/%TESTNUMBER http://a.galaxy.far.far.away/%TESTNUMBER --proxy http://%HOSTIP:%HTTPPORT
</command>
<features>
diff --git a/tests/data/test184 b/tests/data/test184
index 9c795a288..95c9e288b 100644
--- a/tests/data/test184
+++ b/tests/data/test184
@@ -44,10 +44,10 @@ moo
<server>
http
</server>
- <name>
+<name>
HTTP replace Host: when following Location: to new host
- </name>
- <command>
+</name>
+<command>
http://deathstar.another.galaxy/%TESTNUMBER -L -H "Host: another.visitor.stay.a.while.stay.foreeeeeever" --proxy http://%HOSTIP:%HTTPPORT
</command>
<features>
diff --git a/tests/data/test185 b/tests/data/test185
index d614c1040..81093d2b0 100644
--- a/tests/data/test185
+++ b/tests/data/test185
@@ -44,10 +44,10 @@ moo
<server>
http
</server>
- <name>
+<name>
HTTP replace Host: when following Location: on the same host
- </name>
- <command>
+</name>
+<command>
http://deathstar.another.galaxy/%TESTNUMBER -L -H "Host: another.visitor.stay.a.while.stay.foreeeeeever" --proxy http://%HOSTIP:%HTTPPORT
</command>
<features>
diff --git a/tests/data/test186 b/tests/data/test186
index 0f0c91cc8..f5c071946 100644
--- a/tests/data/test186
+++ b/tests/data/test186
@@ -27,10 +27,10 @@ Mime
<server>
http
</server>
- <name>
+<name>
HTTP RFC1867-type formposting with types on text fields
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -F "name=daniel;type=moo/foo" -F "html= <body>hello</body>;type=text/html;charset=verymoo"
</command>
# We create this file before the command is invoked!
@@ -46,7 +46,7 @@ POST /we/want/%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 320
+Content-Length: 338
Content-Type: multipart/form-data; boundary=----------------------------212d9006ceb5
------------------------------212d9006ceb5
diff --git a/tests/data/test187 b/tests/data/test187
index 2d5d0a883..aff3a9d1a 100644
--- a/tests/data/test187
+++ b/tests/data/test187
@@ -50,10 +50,10 @@ If this is received, the location following worked
<server>
http
</server>
- <name>
+<name>
HTTP redirect with bad host name separation and slash in parameters
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT?oh=what-weird=test/%TESTNUMBER -L
</command>
</client>
diff --git a/tests/data/test188 b/tests/data/test188
index 8e8848e65..00d29990f 100644
--- a/tests/data/test188
+++ b/tests/data/test188
@@ -47,10 +47,10 @@ Actual content
<server>
http
</server>
- <name>
+<name>
HTTP GET with resume and redirect
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -C 50 -L
</command>
</client>
diff --git a/tests/data/test189 b/tests/data/test189
index e747d3526..f4ff1fa36 100644
--- a/tests/data/test189
+++ b/tests/data/test189
@@ -41,10 +41,10 @@ Content-Length: 15
<server>
http
</server>
- <name>
+<name>
HTTP GET with resume and redirect (to a page that doesn't resume)
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -C 50 -L
</command>
</client>
diff --git a/tests/data/test19 b/tests/data/test19
index f053baf08..265a74ad8 100644
--- a/tests/data/test19
+++ b/tests/data/test19
@@ -20,10 +20,10 @@ none
<features>
http
</features>
- <name>
+<name>
attempt connect to non-listening socket
- </name>
- <command>
+</name>
+<command>
%HOSTIP:%NOLISTENPORT
</command>
</client>
diff --git a/tests/data/test190 b/tests/data/test190
index 3a20ba26a..b0328fdcb 100644
--- a/tests/data/test190
+++ b/tests/data/test190
@@ -2,6 +2,9 @@
<info>
<keywords>
FTP
+timeout
+FAILURE
+DELAY
</keywords>
</info>
@@ -20,10 +23,10 @@ ftp
<killserver>
ftp
</killserver>
- <name>
+<name>
FTP download with strict timeout and slow CWD
- </name>
- <command timeout="1">
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/path/to/file/%TESTNUMBER -m %FTPTIME2
</command>
</client>
diff --git a/tests/data/test1900 b/tests/data/test1900
new file mode 100644
index 000000000..f04e7e2af
--- /dev/null
+++ b/tests/data/test1900
@@ -0,0 +1,38 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HSTS
+</keywords>
+</info>
+
+# Server-side
+<reply>
+</reply>
+
+# Client-side
+<client>
+<features>
+HSTS
+http
+</features>
+<server>
+none
+</server>
+
+<name>
+HSTS curl_easy_duphandle
+</name>
+<tool>
+lib%TESTNUMBER
+</tool>
+
+<command>
+http://%HOSTIP:%NOLISTENPORT/not-there/%TESTNUMBER
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+</verify>
+</testcase>
diff --git a/tests/data/test1903 b/tests/data/test1903
new file mode 100644
index 000000000..6c879de96
--- /dev/null
+++ b/tests/data/test1903
@@ -0,0 +1,62 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+cookies
+CURLOPT_COOKIEFILE
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="yes" crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Funny-head: yesyes swsclose
+Set-Cookie: foobar=name;
+Set-Cookie: secondcookie=present;
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+CURLOPT_COOKIEFILE then reset then set again
+</name>
+<tool>
+lib%TESTNUMBER
+</tool>
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER %LOGDIR/cookies%TESTNUMBER %LOGDIR/cookiesout%TESTNUMBER
+</command>
+<features>
+cookies
+</features>
+<file name="%LOGDIR/cookies%TESTNUMBER" mode="text">
+# Netscape HTTP Cookie File
+# https://curl.se/docs/http-cookies.html
+# This file was generated by libcurl! Edit at your own risk.
+
+%HOSTIP FALSE /we/want/ FALSE 0 secondcookie present
+%HOSTIP FALSE /we/want/ FALSE 0 foobar name
+</file>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<file name="%LOGDIR/cookiesout%TESTNUMBER" mode="text">
+# Netscape HTTP Cookie File
+# https://curl.se/docs/http-cookies.html
+# This file was generated by libcurl! Edit at your own risk.
+
+%HOSTIP FALSE /we/want/ FALSE 0 foobar name
+%HOSTIP FALSE /we/want/ FALSE 0 secondcookie present
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test1904 b/tests/data/test1904
index 5254c6379..8f005365f 100644
--- a/tests/data/test1904
+++ b/tests/data/test1904
@@ -47,10 +47,10 @@ contents
http
http-proxy
</server>
- <name>
+<name>
HTTP CONNECT with 204 response
- </name>
- <command>
+</name>
+<command>
http://test.%TESTNUMBER:%HTTPPORT/we/want/that/page/%TESTNUMBER -p --proxy %HOSTIP:%PROXYPORT
</command>
<features>
diff --git a/tests/data/test1905 b/tests/data/test1905
index 4d04f8183..a17425e42 100644
--- a/tests/data/test1905
+++ b/tests/data/test1905
@@ -26,15 +26,18 @@ Set-Cookie: secondcookie=present;
<server>
http
</server>
- <name>
+<name>
CURLOPT_COOKIELIST set to "FLUSH" of a shared cookie object
- </name>
+</name>
<tool>
lib%TESTNUMBER
</tool>
<command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER %LOGDIR/cookies%TESTNUMBER
</command>
+<features>
+cookies
+</features>
</client>
# Verify data after the test has been "shot"
@@ -45,7 +48,7 @@ Host: %HOSTIP:%HTTPPORT
Accept: */*
</protocol>
-<file name="log/cookies%TESTNUMBER" mode="text">
+<file name="%LOGDIR/cookies%TESTNUMBER" mode="text">
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
diff --git a/tests/data/test1906 b/tests/data/test1906
index c43b0a9be..6769d0cdb 100644
--- a/tests/data/test1906
+++ b/tests/data/test1906
@@ -23,14 +23,14 @@ Funny-head: yesyes swsclose
<server>
http
</server>
- <name>
+<name>
CURLOPT_CURLU and CURLOPT_PORT
- </name>
+</name>
<tool>
lib%TESTNUMBER
</tool>
-# The tool does two requesets, the first sets CURLOPT_PORT to 1
+# The tool does two requests, the first sets CURLOPT_PORT to 1
# the second resets the port again and expects that request to work.
<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
diff --git a/tests/data/test1907 b/tests/data/test1907
index 8536addde..31a4cbc2d 100644
--- a/tests/data/test1907
+++ b/tests/data/test1907
@@ -23,9 +23,9 @@ Content-Length: 0
<server>
http
</server>
- <name>
+<name>
CURLINFO_EFFECTIVE_URL with non-scheme URL
- </name>
+</name>
<tool>
lib%TESTNUMBER
</tool>
diff --git a/tests/data/test1908 b/tests/data/test1908
index 0ac0e8626..4ec55ed23 100644
--- a/tests/data/test1908
+++ b/tests/data/test1908
@@ -51,7 +51,7 @@ lib%TESTNUMBER
</tool>
<command>
-%HOSTIP:%HTTPPORT/%TESTNUMBER
+%HOSTIP:%HTTPPORT/%TESTNUMBER %LOGDIR/altsvc-%TESTNUMBER
</command>
</client>
@@ -72,7 +72,7 @@ Accept: */*
# matches
s/\"([^\"]*)\"/TIMESTAMP/
</stripfile>
-<file name="log/altsvc-%TESTNUMBER" mode="text">
+<file name="%LOGDIR/altsvc-%TESTNUMBER" mode="text">
# Your alt-svc cache. https://curl.se/docs/alt-svc.html
# This file was generated by libcurl! Edit at your own risk.
h1 127.0.0.1 %HTTPPORT h2 3dbbdetxoyw4nsp6c3cc456oj2ays6s43ezxzsfxxri3h5xqd.example 443 TIMESTAMP 1 0
diff --git a/tests/data/test1909 b/tests/data/test1909
index 64e7b0526..2d868cc0b 100644
--- a/tests/data/test1909
+++ b/tests/data/test1909
@@ -32,11 +32,11 @@ data
<server>
http
</server>
- <name>
+<name>
HTTP GET --retry-all-errors to overcome partial transfer
- </name>
+</name>
<command option="no-output,no-include">
---retry 1 --retry-all-errors -o log/outfile%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER
+--retry 1 --retry-all-errors -o %LOGDIR/outfile%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
@@ -56,7 +56,7 @@ Accept: */*
</protocol>
-<file1 name="log/outfile%TESTNUMBER">
+<file1 name="%LOGDIR/outfile%TESTNUMBER">
data
</file1>
diff --git a/tests/data/test191 b/tests/data/test191
index 1fde76873..029369363 100644
--- a/tests/data/test191
+++ b/tests/data/test191
@@ -17,10 +17,10 @@ data in file
<server>
ftp
</server>
- <name>
-FTP URL with ?-letters in username and password
- </name>
- <command>
+<name>
+FTP URL with ?-letters in username and password
+</name>
+<command>
"ftp://use%3fr:pass%3fword@%HOSTIP:%FTPPORT/%TESTNUMBER"
</command>
</client>
diff --git a/tests/data/test1915 b/tests/data/test1915
index 544dd4f41..0af542114 100644
--- a/tests/data/test1915
+++ b/tests/data/test1915
@@ -42,9 +42,15 @@ http://%HOSTIP:%NOLISTENPORT/not-there/%TESTNUMBER
42
</errorcode>
<stdout>
+%if large-time
+[0/4] 1.example.com 25250320 01:02:03
+[1/4] 2.example.com 25250320 03:02:01
+[2/4] 3.example.com 25250319 01:02:03
+%else
[0/4] 1.example.com 20370320 01:02:03
[1/4] 2.example.com 20370320 03:02:01
[2/4] 3.example.com 20370319 01:02:03
+%endif
[3/4] 4.example.com unlimited
First request returned 7
Second request returned 42
diff --git a/tests/data/test192 b/tests/data/test192
index 7edf31686..12ed68db6 100644
--- a/tests/data/test192
+++ b/tests/data/test192
@@ -25,10 +25,10 @@ monster
<server>
http
</server>
- <name>
+<name>
HTTP GET -w num_connects with one simple connect
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -w "%{num_connects}\n"
</command>
</client>
diff --git a/tests/data/test193 b/tests/data/test193
index 4403b2c5e..9e4dac044 100644
--- a/tests/data/test193
+++ b/tests/data/test193
@@ -37,10 +37,10 @@ monster
<server>
http
</server>
- <name>
+<name>
HTTP GET -w num_connects with redirected fetch (2 connects)
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -w "%{num_connects}\n" -L
</command>
</client>
diff --git a/tests/data/test194 b/tests/data/test194
index 924e9a940..074348950 100644
--- a/tests/data/test194
+++ b/tests/data/test194
@@ -46,10 +46,10 @@ Connection: close
<server>
http
</server>
- <name>
+<name>
HTTP resume transfer with the whole file already downloaded and --fail
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -C 87 --fail
</command>
</client>
@@ -64,9 +64,8 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-# CURLE_HTTP_RETURNED_ERROR
<errorcode>
-22
+0
</errorcode>
</verify>
</testcase>
diff --git a/tests/data/test1948 b/tests/data/test1948
index 639523d99..4c50b02ac 100644
--- a/tests/data/test1948
+++ b/tests/data/test1948
@@ -58,7 +58,6 @@ PUT /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
Content-Length: 22
-Expect: 100-continue
This is test PUT data
POST /1948 HTTP/1.1
diff --git a/tests/data/test195 b/tests/data/test195
index 920ab8af3..be0c206d6 100644
--- a/tests/data/test195
+++ b/tests/data/test195
@@ -17,10 +17,10 @@ REPLY PASS 530 temporarily not available
<server>
ftp
</server>
- <name>
+<name>
FTP response 530 after PASS, temporarily not allowed access
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test1955 b/tests/data/test1955
index 5ebbc54bc..27bb466c7 100644
--- a/tests/data/test1955
+++ b/tests/data/test1955
@@ -43,14 +43,14 @@ CURL_FORCEHOST=1
</setenv>
<name>
-HTTP AWS_SIGV4 with X-Xxx-Content-Sha256
+HTTP AWS_SIGV4 without X-Xxx-Content-Sha256
</name>
<tool>
lib%TESTNUMBER
</tool>
<command>
-http://exam.ple.com:9000/%TESTNUMBER/testapi/test exam.ple.com:9000:%HOSTIP:%HTTPPORT
+http://exam.ple.com:9000/aws_sigv4/testapi/test exam.ple.com:9000:%HOSTIP:%HTTPPORT
</command>
</client>
@@ -62,11 +62,12 @@ http://exam.ple.com:9000/%TESTNUMBER/testapi/test exam.ple.com:9000:%HOSTIP:%HTT
^Accept:.*
</strip>
<protocol>
-GET /%TESTNUMBER/testapi/test HTTP/1.1
+GET /aws_sigv4/testapi/test HTTP/1.1
Host: exam.ple.com:9000
-Authorization: XXX4-HMAC-SHA256 Credential=xxx/19700101/ple/exam/xxx4_request, SignedHeaders=content-type;host;tesmixcase;test0;test1;test2;test_space;x-xxx-date, Signature=819251feec8de52dfaa992320241f23d27cefa979c93e039ae7df03ac486ed16
+Authorization: XXX4-HMAC-SHA256 Credential=xxx/19700101/ple/exam/xxx4_request, SignedHeaders=content-type;host;tesmixcase;test2;test3;test_space;x-xxx-date, Signature=dd39202e9fb7b836ebf2abb83b114cae11ff3b6a169f0c64b290a774a873db9d
X-Xxx-Date: 19700101T000000Z
-test2: 1234
+test3: 1234
+test2:
test_space: t s m end
tesMixCase: MixCase
diff --git a/tests/data/test1956 b/tests/data/test1956
new file mode 100644
index 000000000..76aaa93ab
--- /dev/null
+++ b/tests/data/test1956
@@ -0,0 +1,73 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+CURLOPT_AWS_SIGV4
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 302 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+Location: /%TESTNUMBER
+
+</data>
+<data2>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+
+</data2>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# this relies on the debug feature which allow to set the time
+<features>
+SSL
+debug
+crypto
+</features>
+<setenv>
+CURL_FORCEHOST=1
+</setenv>
+
+<name>
+HTTP AWS_SIGV4 with X-Xxx-Content-Sha256 of empty payload
+</name>
+<tool>
+lib%TESTNUMBER
+</tool>
+
+<command>
+http://exam.ple.com:9000/aws_sigv4/testapi/test exam.ple.com:9000:%HOSTIP:%HTTPPORT
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+^Content-Type:.*
+^Accept:.*
+</strip>
+<protocol>
+GET /aws_sigv4/testapi/test HTTP/1.1
+Host: exam.ple.com:9000
+Authorization: XXX4-HMAC-SHA256 Credential=xxx/19700101/ple/exam/xxx4_request, SignedHeaders=content-type;host;x-xxx-content-sha256;x-xxx-date, Signature=dfe78c8846a9b7d65d1eb4c1d6ea7bc886650d03f3568088cb8d5b4c3778287f
+X-Xxx-Date: 19700101T000000Z
+X-Xxx-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1957 b/tests/data/test1957
new file mode 100644
index 000000000..add27db0f
--- /dev/null
+++ b/tests/data/test1957
@@ -0,0 +1,73 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+CURLOPT_AWS_SIGV4
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 302 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+Location: /%TESTNUMBER
+
+</data>
+<data2>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+
+</data2>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# this relies on the debug feature which allow to set the time
+<features>
+SSL
+debug
+crypto
+</features>
+<setenv>
+CURL_FORCEHOST=1
+</setenv>
+
+<name>
+HTTP AWS_SIGV4 with X-Xxx-Content-Sha256 of arbitrary payload
+</name>
+<tool>
+lib%TESTNUMBER
+</tool>
+
+<command>
+http://exam.ple.com:9000/aws_sigv4/testapi/test exam.ple.com:9000:%HOSTIP:%HTTPPORT
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+^Content-Type:.*
+^Accept:.*
+</strip>
+<protocol>
+GET /aws_sigv4/testapi/test HTTP/1.1
+Host: exam.ple.com:9000
+Authorization: XXX4-HMAC-SHA256 Credential=xxx/19700101/ple/exam/xxx4_request, SignedHeaders=content-type;host;x-xxx-content-sha256;x-xxx-date, Signature=25b4cac711ea8f65010c485d3778885f5f3870d0b8ff0b3ab58a8d7eeab991ff
+X-Xxx-Date: 19700101T000000Z
+X-Xxx-Content-Sha256: arbitrary
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1958 b/tests/data/test1958
new file mode 100644
index 000000000..c54b17962
--- /dev/null
+++ b/tests/data/test1958
@@ -0,0 +1,73 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+CURLOPT_AWS_SIGV4
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 302 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+Location: /%TESTNUMBER
+
+</data>
+<data2>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+
+</data2>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# this relies on the debug feature which allow to set the time
+<features>
+SSL
+debug
+crypto
+</features>
+<setenv>
+CURL_FORCEHOST=1
+</setenv>
+
+<name>
+HTTP AWS_SIGV4 with X-Xxx-Content-Sha256 of arbitrary payload with whitespace
+</name>
+<tool>
+lib%TESTNUMBER
+</tool>
+
+<command>
+http://exam.ple.com:9000/aws_sigv4/testapi/test exam.ple.com:9000:%HOSTIP:%HTTPPORT
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+^Content-Type:.*
+^Accept:.*
+</strip>
+<protocol>
+GET /aws_sigv4/testapi/test HTTP/1.1
+Host: exam.ple.com:9000
+Authorization: XXX4-HMAC-SHA256 Credential=xxx/19700101/ple/exam/xxx4_request, SignedHeaders=content-type;host;x-xxx-content-sha256;x-xxx-date, Signature=25b4cac711ea8f65010c485d3778885f5f3870d0b8ff0b3ab58a8d7eeab991ff
+X-Xxx-Date: 19700101T000000Z
+X-Xxx-Content-Sha256: arbitrary
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1959 b/tests/data/test1959
new file mode 100644
index 000000000..2be813b08
--- /dev/null
+++ b/tests/data/test1959
@@ -0,0 +1,73 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+CURLOPT_AWS_SIGV4
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 302 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+Location: /%TESTNUMBER
+
+</data>
+<data2>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+
+</data2>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# this relies on the debug feature which allow to set the time
+<features>
+SSL
+debug
+crypto
+</features>
+<setenv>
+CURL_FORCEHOST=1
+</setenv>
+
+<name>
+HTTP AWS_SIGV4 with long value for X-Xxx-Content-Sha256
+</name>
+<tool>
+lib%TESTNUMBER
+</tool>
+
+<command>
+http://exam.ple.com:9000/aws_sigv4/testapi/test exam.ple.com:9000:%HOSTIP:%HTTPPORT
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+^Content-Type:.*
+^Accept:.*
+</strip>
+<protocol>
+GET /aws_sigv4/testapi/test HTTP/1.1
+Host: exam.ple.com:9000
+Authorization: XXX4-HMAC-SHA256 Credential=xxx/19700101/ple/exam/xxx4_request, SignedHeaders=content-type;host;x-xxx-content-sha256;x-xxx-date, Signature=7b343a4aa55d73ffc05005d84480bc705a3367373ed8cae1a1c0fbd2b3aa0483
+X-Xxx-Date: 19700101T000000Z
+X-Xxx-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test196 b/tests/data/test196
index 715a6ce67..b1a684f10 100644
--- a/tests/data/test196
+++ b/tests/data/test196
@@ -18,10 +18,10 @@ REPLY PASS 430 temporarily not available
<server>
ftp
</server>
- <name>
+<name>
FTP transient error, retry request once
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER --retry 1
</command>
</client>
diff --git a/tests/data/test1960 b/tests/data/test1960
new file mode 100644
index 000000000..1ab180c52
--- /dev/null
+++ b/tests/data/test1960
@@ -0,0 +1,52 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+CURLOPT_SOCKOPTFUNCTION
+CURL_SOCKOPT_ALREADY_CONNECTED
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data crlf="yes">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<precheck>
+./libtest/lib%TESTNUMBER check
+</precheck>
+<server>
+http
+</server>
+
+<name>
+application hands over already connected socket
+</name>
+<tool>
+lib%TESTNUMBER
+</tool>
+
+<command>
+http://%HOSTIP:%HTTPPORT/file %HOSTIP %HTTPPORT
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /file HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1964 b/tests/data/test1964
new file mode 100644
index 000000000..43e56e297
--- /dev/null
+++ b/tests/data/test1964
@@ -0,0 +1,68 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+CURLOPT_AWS_SIGV4
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 302 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+Location: /%TESTNUMBER0002
+
+</data>
+<data2>
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+
+</data2>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# this relies on the debug feature which allow to set the time
+<features>
+SSL
+crypto
+</features>
+
+<name>
+HTTP AWS_SIGV4 with one provider and auth cred via URL, but X-Xxx-Date header set manually
+</name>
+<tool>
+lib%TESTNUMBER
+</tool>
+
+<command>
+http://xxx:yyy@127.0.0.1:9000/%TESTNUMBER/testapi/test 127.0.0.1:9000:%HOSTIP:%HTTPPORT
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+^Content-Type:.*
+^Accept:.*
+</strip>
+<protocol>
+GET /%TESTNUMBER/testapi/test HTTP/1.1
+Host: 127.0.0.1:9000
+Authorization: XXX4-HMAC-SHA256 Credential=xxx/19700101/0/127/xxx4_request, SignedHeaders=content-type;host;x-xxx-date, Signature=35da102c1df68f2ef85ade08ecc212fa663a66e3a973146f6578a5c5426e9669
+X-Xxx-Date: 19700101T000000Z
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test197 b/tests/data/test197
index 70198732a..d940b0dc3 100644
--- a/tests/data/test197
+++ b/tests/data/test197
@@ -10,7 +10,7 @@ retry
# Server-side
<reply>
<data nocheck="yes">
-HTTP/1.1 503 OK swsbounce
+HTTP/1.1 503 BAD swsbounce
Date: Tue, 09 Nov 2010 14:49:00 GMT
Content-Length: 21
@@ -33,10 +33,10 @@ ok
<server>
http
</server>
- <name>
+<name>
HTTP GET --retry on 503 error with output to stdout
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --retry 1000
</command>
</client>
@@ -58,7 +58,7 @@ Accept: */*
</protocol>
<stdout>
-HTTP/1.1 503 OK swsbounce
+HTTP/1.1 503 BAD swsbounce
Date: Tue, 09 Nov 2010 14:49:00 GMT
Content-Length: 21
diff --git a/tests/data/test1970 b/tests/data/test1970
new file mode 100644
index 000000000..1fbe60b45
--- /dev/null
+++ b/tests/data/test1970
@@ -0,0 +1,74 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+CURLOPT_AWS_SIGV4
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 302 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+Location: /%TESTNUMBER0002
+
+</data>
+<data2>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+
+</data2>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# this relies on the debug feature which allow to set the time
+<features>
+SSL
+debug
+crypto
+</features>
+<setenv>
+CURL_FORCEHOST=1
+</setenv>
+
+<name>
+HTTP AWS_SIGV4 for AWS S3: UPLOAD with INFILESIZE=0
+</name>
+<tool>
+lib%TESTNUMBER
+</tool>
+
+<command>
+http://exam.ple.com:9000/aws_sigv4/testapi/test exam.ple.com:9000:%HOSTIP:%HTTPPORT
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+^Content-Type:.*
+^Accept:.*
+</strip>
+<protocol>
+PUT /aws_sigv4/testapi/test HTTP/1.1
+Host: exam.ple.com:9000
+Authorization: AWS4-HMAC-SHA256 Credential=xxx/19700101/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=a028756f42a859122e9609c1f90cae4b272d6b03bf60d9fd354138176dfa2260
+X-Amz-Date: 19700101T000000Z
+x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+Content-Length: 0
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1971 b/tests/data/test1971
new file mode 100644
index 000000000..c311d176f
--- /dev/null
+++ b/tests/data/test1971
@@ -0,0 +1,70 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+CURLOPT_AWS_SIGV4
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 100 Continue
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# this relies on the debug feature which allow to set the time
+<features>
+SSL
+debug
+crypto
+</features>
+<setenv>
+CURL_FORCEHOST=1
+</setenv>
+
+<name>
+HTTP AWS_SIGV4 for AWS S3: UPLOAD with unknown INFILESIZE
+</name>
+<tool>
+lib%TESTNUMBER
+</tool>
+
+<command>
+http://exam.ple.com:9000/aws_sigv4/testapi/test exam.ple.com:9000:%HOSTIP:%HTTPPORT
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+^Content-Type:.*
+^Accept:.*
+</strip>
+<protocol>
+PUT /aws_sigv4/testapi/test HTTP/1.1
+Host: exam.ple.com:9000
+Authorization: AWS4-HMAC-SHA256 Credential=xxx/19700101/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=4a6e9b4af0542ffb83744c6852f8e1bfec14f2a67e6f6f037b39f172f79d62af
+X-Amz-Date: 19700101T000000Z
+x-amz-content-sha256: UNSIGNED-PAYLOAD
+Transfer-Encoding: chunked
+Expect: 100-continue
+
+0
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1972 b/tests/data/test1972
new file mode 100644
index 000000000..39e574747
--- /dev/null
+++ b/tests/data/test1972
@@ -0,0 +1,79 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+CURLOPT_AWS_SIGV4
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 302 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+Location: /%TESTNUMBER0002
+
+</data>
+<data2>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+
+</data2>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# this relies on the debug feature which allow to set the time
+<features>
+SSL
+debug
+crypto
+</features>
+<setenv>
+CURL_FORCEHOST=1
+</setenv>
+
+<name>
+HTTP AWS_SIGV4 for AWS S3: MIMEPOST
+</name>
+<tool>
+lib%TESTNUMBER
+</tool>
+
+<command>
+http://exam.ple.com:9000/aws_sigv4/testapi/test exam.ple.com:9000:%HOSTIP:%HTTPPORT
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+^Content-Type:.*
+^Accept:.*
+</strip>
+<protocol>
+POST /aws_sigv4/testapi/test HTTP/1.1
+Host: exam.ple.com:9000
+Authorization: AWS4-HMAC-SHA256 Credential=xxx/19700101/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=eaee0f1c5984ad5d81c8bc7805f28c7b83b35322de654b2ace18cb8cf6d5a9cb
+X-Amz-Date: 19700101T000000Z
+x-amz-content-sha256: UNSIGNED-PAYLOAD
+Content-Length: 154
+
+--------------------------qrstuvwxyz0123456789AB
+Content-Disposition: attachment; name="foo"
+
+bar
+--------------------------qrstuvwxyz0123456789AB--
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1973 b/tests/data/test1973
new file mode 100644
index 000000000..559fd5fc7
--- /dev/null
+++ b/tests/data/test1973
@@ -0,0 +1,75 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+CURLOPT_AWS_SIGV4
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 302 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+Location: /%TESTNUMBER0002
+
+</data>
+<data2>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+
+</data2>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# this relies on the debug feature which allow to set the time
+<features>
+SSL
+debug
+crypto
+</features>
+<setenv>
+CURL_FORCEHOST=1
+</setenv>
+
+<name>
+HTTP AWS_SIGV4 for AWS S3: POSTFIELDS
+</name>
+<tool>
+lib%TESTNUMBER
+</tool>
+
+<command>
+http://exam.ple.com:9000/aws_sigv4/testapi/test exam.ple.com:9000:%HOSTIP:%HTTPPORT
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+^Content-Type:.*
+^Accept:.*
+</strip>
+<protocol>
+POST /aws_sigv4/testapi/test HTTP/1.1
+Host: exam.ple.com:9000
+Authorization: AWS4-HMAC-SHA256 Credential=xxx/19700101/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=7eb34202214384872221b99a9c671b7517891ac6af56b0aff24ec51adf62b10a
+X-Amz-Date: 19700101T000000Z
+x-amz-content-sha256: 4b02e333ccf7cf530ddee3e10ebe54e935500b5e570e68650d63d743e8bbc045
+Content-Length: 12
+
+post fields
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1974 b/tests/data/test1974
new file mode 100644
index 000000000..9b5bb8475
--- /dev/null
+++ b/tests/data/test1974
@@ -0,0 +1,73 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+CURLOPT_AWS_SIGV4
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 302 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+Location: /%TESTNUMBER0002
+
+</data>
+<data2>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+
+</data2>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# this relies on the debug feature which allow to set the time
+<features>
+SSL
+debug
+crypto
+</features>
+<setenv>
+CURL_FORCEHOST=1
+</setenv>
+
+<name>
+HTTP AWS_SIGV4 for AWS S3: GET
+</name>
+<tool>
+lib%TESTNUMBER
+</tool>
+
+<command>
+http://exam.ple.com:9000/aws_sigv4/testapi/test exam.ple.com:9000:%HOSTIP:%HTTPPORT
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+^Content-Type:.*
+^Accept:.*
+</strip>
+<protocol>
+GET /aws_sigv4/testapi/test HTTP/1.1
+Host: exam.ple.com:9000
+Authorization: AWS4-HMAC-SHA256 Credential=xxx/19700101/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=e6270423932feafe9b00ca5d60c9ed566be649f9ca9676144288273945153021
+X-Amz-Date: 19700101T000000Z
+x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1975 b/tests/data/test1975
new file mode 100644
index 000000000..09256de04
--- /dev/null
+++ b/tests/data/test1975
@@ -0,0 +1,70 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+CURLOPT_AWS_SIGV4
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 100 Continue
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Type: text/html
+Content-Length: 0
+
+</data>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# this relies on the debug feature which allow to set the time
+<features>
+SSL
+debug
+crypto
+</features>
+<setenv>
+CURL_FORCEHOST=1
+</setenv>
+
+<name>
+HTTP AWS_SIGV4 for AWS S3: UPLOAD with given x-amz-content-sha256
+</name>
+<tool>
+lib%TESTNUMBER
+</tool>
+
+<command>
+http://exam.ple.com:9000/aws_sigv4/testapi/test exam.ple.com:9000:%HOSTIP:%HTTPPORT
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+^Content-Type:.*
+^Accept:.*
+</strip>
+<protocol>
+PUT /aws_sigv4/testapi/test HTTP/1.1
+Host: exam.ple.com:9000
+Authorization: AWS4-HMAC-SHA256 Credential=xxx/19700101/us-east-1/s3/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=a028756f42a859122e9609c1f90cae4b272d6b03bf60d9fd354138176dfa2260
+X-Amz-Date: 19700101T000000Z
+Transfer-Encoding: chunked
+X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+Expect: 100-continue
+
+0
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test198 b/tests/data/test198
index 08fafde6c..95b1f99e1 100644
--- a/tests/data/test198
+++ b/tests/data/test198
@@ -42,10 +42,10 @@ ok
<server>
http
</server>
- <name>
+<name>
HTTP GET --retry on 503 error with output to file
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --retry 1000
</command>
</client>
diff --git a/tests/data/test199 b/tests/data/test199
index b997c5c4b..1289fd2d9 100644
--- a/tests/data/test199
+++ b/tests/data/test199
@@ -31,10 +31,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP with -d, -G and {}
- </name>
- <command>
+</name>
+<command>
-d "foo=moo&moo=poo" "http://%HOSTIP:%HTTPPORT/{%TESTNUMBER,%TESTNUMBER}" -G
</command>
</client>
diff --git a/tests/data/test2 b/tests/data/test2
index 80e47b082..f9cef90a7 100644
--- a/tests/data/test2
+++ b/tests/data/test2
@@ -25,10 +25,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP GET with user and password
- </name>
- <command>
+</name>
+<command>
-u fake:user http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test20 b/tests/data/test20
index 910cb54c2..238448806 100644
--- a/tests/data/test20
+++ b/tests/data/test20
@@ -21,10 +21,10 @@ none
<features>
http
</features>
- <name>
+<name>
attempt connect to non-existing host name
- </name>
- <command>
+</name>
+<command>
--ipv4 non-existing-host.haxx.se.
</command>
</client>
diff --git a/tests/data/test200 b/tests/data/test200
index e7c5146f7..1a81ac825 100644
--- a/tests/data/test200
+++ b/tests/data/test200
@@ -20,13 +20,13 @@ moo
<server>
file
</server>
- <name>
+<name>
basic file:// file
- </name>
+</name>
<command option="no-include">
-file://localhost%FILE_PWD/log/test%TESTNUMBER.txt
+file://localhost%FILE_PWD/%LOGDIR/test%TESTNUMBER.txt
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
foo
bar
bar
diff --git a/tests/data/test2000 b/tests/data/test2000
index 32604c6f3..032bf5b1b 100644
--- a/tests/data/test2000
+++ b/tests/data/test2000
@@ -28,13 +28,13 @@ works
ftp
file
</server>
- <name>
+<name>
FTP RETR followed by FILE
- </name>
+</name>
<command option="no-include">
-ftp://%HOSTIP:%FTPPORT/%TESTNUMBER file://localhost%FILE_PWD/log/test%TESTNUMBER.txt
+ftp://%HOSTIP:%FTPPORT/%TESTNUMBER file://localhost%FILE_PWD/%LOGDIR/test%TESTNUMBER.txt
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
foo
bar
bar
diff --git a/tests/data/test2001 b/tests/data/test2001
index e85fd1ffc..de1673531 100644
--- a/tests/data/test2001
+++ b/tests/data/test2001
@@ -45,13 +45,13 @@ http
ftp
file
</server>
- <name>
+<name>
HTTP GET followed by FTP RETR followed by FILE
- </name>
+</name>
<command option="no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER0001 ftp://%HOSTIP:%FTPPORT/%TESTNUMBER0002 file://localhost%FILE_PWD/log/test%TESTNUMBER.txt
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER0001 ftp://%HOSTIP:%FTPPORT/%TESTNUMBER0002 file://localhost%FILE_PWD/%LOGDIR/test%TESTNUMBER.txt
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
foo
bar
bar
diff --git a/tests/data/test2002 b/tests/data/test2002
index 2cd28016b..4b2b4fef6 100644
--- a/tests/data/test2002
+++ b/tests/data/test2002
@@ -54,13 +54,13 @@ ftp
file
tftp
</server>
- <name>
+<name>
HTTP GET followed by FTP RETR followed by FILE followed by TFTP RRQ
- </name>
+</name>
<command option="no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER0001 ftp://%HOSTIP:%FTPPORT/%TESTNUMBER0002 file://localhost%FILE_PWD/log/test%TESTNUMBER.txt tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER0003
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER0001 ftp://%HOSTIP:%FTPPORT/%TESTNUMBER0002 file://localhost%FILE_PWD/%LOGDIR/test%TESTNUMBER.txt tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER0003
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
foo
bar
bar
@@ -72,6 +72,9 @@ moo
#
# Verify data after the test has been "shot"
<verify>
+<strip>
+^timeout = [5-6]$
+</strip>
<protocol>
GET /%TESTNUMBER0001 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
@@ -89,7 +92,6 @@ opcode = 1
mode = octet
tsize = 0
blksize = 512
-timeout = 6
filename = /%TESTNUMBER0003
QUIT
</protocol>
diff --git a/tests/data/test2003 b/tests/data/test2003
index a1d5a9fc2..dcd862178 100644
--- a/tests/data/test2003
+++ b/tests/data/test2003
@@ -54,13 +54,13 @@ ftp
file
tftp
</server>
- <name>
+<name>
HTTP GET followed by FTP RETR followed by FILE followed by TFTP RRQ then again in reverse order
- </name>
+</name>
<command option="no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER0001 ftp://%HOSTIP:%FTPPORT/%TESTNUMBER0002 file://localhost%FILE_PWD/log/test%TESTNUMBER.txt tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER0003 tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER0003 file://localhost%FILE_PWD/log/test%TESTNUMBER.txt ftp://%HOSTIP:%FTPPORT/%TESTNUMBER0002 http://%HOSTIP:%HTTPPORT/%TESTNUMBER0001
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER0001 ftp://%HOSTIP:%FTPPORT/%TESTNUMBER0002 file://localhost%FILE_PWD/%LOGDIR/test%TESTNUMBER.txt tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER0003 tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER0003 file://localhost%FILE_PWD/%LOGDIR/test%TESTNUMBER.txt ftp://%HOSTIP:%FTPPORT/%TESTNUMBER0002 http://%HOSTIP:%HTTPPORT/%TESTNUMBER0001
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
foo
bar
bar
@@ -72,6 +72,9 @@ moo
#
# Verify data after the test has been "shot"
<verify>
+<strip>
+^timeout = [5-6]$
+</strip>
<protocol>
GET /%TESTNUMBER0001 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
@@ -89,13 +92,11 @@ opcode = 1
mode = octet
tsize = 0
blksize = 512
-timeout = 6
filename = /%TESTNUMBER0003
opcode = 1
mode = octet
tsize = 0
blksize = 512
-timeout = 6
filename = /%TESTNUMBER0003
EPSV
SIZE %TESTNUMBER0002
diff --git a/tests/data/test2004 b/tests/data/test2004
index 17a73167a..404b354ce 100644
--- a/tests/data/test2004
+++ b/tests/data/test2004
@@ -26,13 +26,13 @@ for tftp test
tftp
sftp
</server>
- <name>
+<name>
TFTP RRQ followed by SFTP retrieval followed by FILE followed by SCP retrieval then again in reverse order
- </name>
+</name>
<command option="no-include">
---key curl_client_key --pubkey curl_client_key.pub -u %USER: tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/test%TESTNUMBER.txt file://localhost%FILE_PWD/log/test%TESTNUMBER.txt scp://%HOSTIP:%SSHPORT%SSH_PWD/log/test%TESTNUMBER.txt file://localhost%FILE_PWD/log/test%TESTNUMBER.txt sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/test%TESTNUMBER.txt tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER --insecure
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/test%TESTNUMBER.txt file://localhost%FILE_PWD/%LOGDIR/test%TESTNUMBER.txt scp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/test%TESTNUMBER.txt file://localhost%FILE_PWD/%LOGDIR/test%TESTNUMBER.txt sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/test%TESTNUMBER.txt tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER --insecure
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
This is test data
for several protocols
</file>
@@ -41,18 +41,19 @@ for several protocols
#
# Verify data after the test has been "shot"
<verify>
+<strip>
+^timeout = [5-6]$
+</strip>
<protocol>
opcode = 1
mode = octet
tsize = 0
blksize = 512
-timeout = 6
filename = /%TESTNUMBER
opcode = 1
mode = octet
tsize = 0
blksize = 512
-timeout = 6
filename = /%TESTNUMBER
</protocol>
<stdout>
diff --git a/tests/data/test201 b/tests/data/test201
index 8e9f190b7..aff9ca2b8 100644
--- a/tests/data/test201
+++ b/tests/data/test201
@@ -17,11 +17,11 @@ FAILURE
<server>
file
</server>
- <name>
+<name>
missing file:// file
- </name>
- <command>
-file://localhost/%PWD/log/non-existent-file.txt
+</name>
+<command>
+file://localhost/%PWD/%LOGDIR/non-existent-file.txt
</command>
</client>
diff --git a/tests/data/test202 b/tests/data/test202
index f5efc0732..8c1f9964a 100644
--- a/tests/data/test202
+++ b/tests/data/test202
@@ -16,13 +16,13 @@ FILE
<server>
file
</server>
- <name>
+<name>
two file:// URLs to stdout
- </name>
+</name>
<command option="no-include">
-file://localhost%FILE_PWD/log/test%TESTNUMBER.txt FILE://localhost%FILE_PWD/log/test%TESTNUMBER.txt
+file://localhost%FILE_PWD/%LOGDIR/test%TESTNUMBER.txt FILE://localhost%FILE_PWD/%LOGDIR/test%TESTNUMBER.txt
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
contents in a single file
</file>
</client>
diff --git a/tests/data/test2023 b/tests/data/test2023
index 08fb5cc00..e395ece9d 100644
--- a/tests/data/test2023
+++ b/tests/data/test2023
@@ -109,16 +109,16 @@ http
libauthretry
</tool>
- <name>
+<name>
HTTP authorization retry (Basic)
- </name>
+</name>
<setenv>
# we force our own host name, in order to make the test machine independent
CURL_GETHOSTNAME=curlhost
# we try to use the LD_PRELOAD hack, if not a debug build
LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
</setenv>
- <command>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER basic basic
</command>
<precheck>
diff --git a/tests/data/test2024 b/tests/data/test2024
index d371e5dcb..07bf931a2 100644
--- a/tests/data/test2024
+++ b/tests/data/test2024
@@ -123,16 +123,16 @@ crypto
libauthretry
</tool>
- <name>
+<name>
HTTP authorization retry (Basic switching to Digest)
- </name>
+</name>
<setenv>
# we force our own host name, in order to make the test machine independent
CURL_GETHOSTNAME=curlhost
# we try to use the LD_PRELOAD hack, if not a debug build
LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
</setenv>
- <command>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER basic digest
</command>
<precheck>
diff --git a/tests/data/test2026 b/tests/data/test2026
index 963587ef2..81d252a30 100644
--- a/tests/data/test2026
+++ b/tests/data/test2026
@@ -159,16 +159,16 @@ crypto
libauthretry
</tool>
- <name>
+<name>
HTTP authorization retry (Digest switching to Basic)
- </name>
+</name>
<setenv>
# we force our own host name, in order to make the test machine independent
CURL_GETHOSTNAME=curlhost
# we try to use the LD_PRELOAD hack, if not a debug build
LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
</setenv>
- <command>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER digest basic
</command>
<precheck>
diff --git a/tests/data/test2027 b/tests/data/test2027
index ecc5a63d8..0a9338777 100644
--- a/tests/data/test2027
+++ b/tests/data/test2027
@@ -182,16 +182,16 @@ crypto
libauthretry
</tool>
- <name>
+<name>
HTTP authorization retry (Digest)
- </name>
+</name>
<setenv>
# we force our own host name, in order to make the test machine independent
CURL_GETHOSTNAME=curlhost
# we try to use the LD_PRELOAD hack, if not a debug build
LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
</setenv>
- <command>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER digest digest
</command>
<precheck>
diff --git a/tests/data/test203 b/tests/data/test203
index d19356384..ed388f615 100644
--- a/tests/data/test203
+++ b/tests/data/test203
@@ -21,17 +21,17 @@ moo
<server>
file
</server>
- <name>
+<name>
file:/path URL with a single slash
- </name>
+</name>
<setenv>
# Needed for MSYS2 to not convert
MSYS2_ARG_CONV_EXCL=file:
</setenv>
<command option="no-include">
-file:%FILE_PWD/log/test%TESTNUMBER.txt
+file:%FILE_PWD/%LOGDIR/test%TESTNUMBER.txt
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
foo
bar
bar
diff --git a/tests/data/test2032 b/tests/data/test2032
index 72c7cc4d2..d3d199c14 100644
--- a/tests/data/test2032
+++ b/tests/data/test2032
@@ -5,8 +5,9 @@ HTTP
HTTP GET
HTTP Basic auth
HTTP NTLM auth
-flaky
NTLM
+flaky
+timing-dependent
</keywords>
</info>
# Server-side
diff --git a/tests/data/test2033 b/tests/data/test2033
index 0645932a4..2a9f90091 100644
--- a/tests/data/test2033
+++ b/tests/data/test2033
@@ -31,14 +31,14 @@ Schannel
<server>
https Server-localhost-sv.pem
</server>
- <name>
+<name>
simple HTTPS GET with DER public key pinning (Schannel variant)
- </name>
+</name>
<setenv>
# This test is pointless if we're not using the schannel backend
CURL_SSL_BACKEND=schannel
</setenv>
- <command>
+<command>
--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt --pinnedpubkey %SRCDIR/certs/Server-localhost-sv.pub.der --ssl-revoke-best-effort https://localhost:%HTTPSPORT/%TESTNUMBER
</command>
# Ensure that we're running on localhost because we're checking the host name
diff --git a/tests/data/test2034 b/tests/data/test2034
index 83f984a1d..5192cb73e 100644
--- a/tests/data/test2034
+++ b/tests/data/test2034
@@ -31,10 +31,10 @@ SSLpinning
<server>
https Server-localhost-sv.pem
</server>
- <name>
+<name>
simple HTTPS GET with DER public key pinning
- </name>
- <command>
+</name>
+<command>
--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt --pinnedpubkey %SRCDIR/certs/Server-localhost-sv.pub.der https://localhost:%HTTPSPORT/%TESTNUMBER
</command>
# Ensure that we're running on localhost because we're checking the host name
diff --git a/tests/data/test2035 b/tests/data/test2035
index 8380022aa..b17cddd56 100644
--- a/tests/data/test2035
+++ b/tests/data/test2035
@@ -22,10 +22,10 @@ SSLpinning
<server>
https Server-localhost-sv.pem
</server>
- <name>
+<name>
HTTPS wrong DER pinnedpubkey but right CN
- </name>
- <command>
+</name>
+<command>
--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt --pinnedpubkey %SRCDIR/certs/Server-localhost-sv.der https://localhost:%HTTPSPORT/%TESTNUMBER
</command>
# Ensure that we're running on localhost because we're checking the host name
diff --git a/tests/data/test2036 b/tests/data/test2036
index f022d1444..9fd89a2ac 100644
--- a/tests/data/test2036
+++ b/tests/data/test2036
@@ -18,9 +18,9 @@ none
<features>
http
</features>
- <name>
+<name>
HTTP, -O with no slash at all in the URL
- </name>
+</name>
<command option="no-output">
%HOSTIP:%NOLISTENPORT -O
</command>
diff --git a/tests/data/test2037 b/tests/data/test2037
index 2b17e5383..96406410a 100644
--- a/tests/data/test2037
+++ b/tests/data/test2037
@@ -31,10 +31,10 @@ SSLpinning
<server>
https Server-localhost-sv.pem
</server>
- <name>
+<name>
simple HTTPS GET with PEM public key pinning
- </name>
- <command>
+</name>
+<command>
--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt --pinnedpubkey %SRCDIR/certs/Server-localhost-sv.pub.pem https://localhost:%HTTPSPORT/%TESTNUMBER
</command>
# Ensure that we're running on localhost because we're checking the host name
diff --git a/tests/data/test2038 b/tests/data/test2038
index d9bf7c643..6cd91d623 100644
--- a/tests/data/test2038
+++ b/tests/data/test2038
@@ -22,10 +22,10 @@ SSLpinning
<server>
https Server-localhost-sv.pem
</server>
- <name>
+<name>
HTTPS wrong PEM pinnedpubkey but right CN
- </name>
- <command>
+</name>
+<command>
--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt --pinnedpubkey %SRCDIR/certs/Server-localhost-sv.pem https://localhost:%HTTPSPORT/%TESTNUMBER
</command>
# Ensure that we're running on localhost because we're checking the host name
diff --git a/tests/data/test2039 b/tests/data/test2039
index a10852a7f..fdb61ed02 100644
--- a/tests/data/test2039
+++ b/tests/data/test2039
@@ -33,13 +33,13 @@ dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
<server>
ftp
</server>
- <name>
+<name>
FTP (optional .netrc with 'default' override; no user/pass) dir list PASV
- </name>
- <command>
---netrc-optional --netrc-file log/netrc%TESTNUMBER ftp://%HOSTIP:%FTPPORT/
+</name>
+<command>
+--netrc-optional --netrc-file %LOGDIR/netrc%TESTNUMBER ftp://%HOSTIP:%FTPPORT/
</command>
-<file name="log/netrc%TESTNUMBER" >
+<file name="%LOGDIR/netrc%TESTNUMBER" >
# the following two lines were created while testing curl
default login userdef password passwddef
machine %HOSTIP login user1 password passwd1
diff --git a/tests/data/test204 b/tests/data/test204
index dcf0bb5bd..ffe4657a7 100644
--- a/tests/data/test204
+++ b/tests/data/test204
@@ -12,13 +12,13 @@ FILE
<server>
file
</server>
- <name>
+<name>
"upload" with file://
- </name>
+</name>
<command option="no-include">
-file://localhost%FILE_PWD/log/result%TESTNUMBER.txt -T log/upload%TESTNUMBER.txt
+file://localhost%FILE_PWD/%LOGDIR/result%TESTNUMBER.txt -T %LOGDIR/upload%TESTNUMBER.txt
</command>
-<file name="log/upload%TESTNUMBER.txt">
+<file name="%LOGDIR/upload%TESTNUMBER.txt">
data
in
file
@@ -29,7 +29,7 @@ write
# Verify data after the test has been "shot"
<verify>
-<file name="log/result%TESTNUMBER.txt">
+<file name="%LOGDIR/result%TESTNUMBER.txt">
data
in
file
diff --git a/tests/data/test2041 b/tests/data/test2041
index 1958bb7fd..b7b461e0d 100644
--- a/tests/data/test2041
+++ b/tests/data/test2041
@@ -31,11 +31,11 @@ SSLpinning
<server>
https Server-localhost-sv.pem
</server>
- <name>
+<name>
simple HTTPS GET with base64-sha256 public key pinning
- </name>
- <command>
---cacert %SRCDIR/certs/EdelCurlRoot-ca.crt --pinnedpubkey sha256//+JYNkp2GTGRgrvZMUkOxbFJQQqYpwNE6toGmBjz00D8= https://localhost:%HTTPSPORT/%TESTNUMBER
+</name>
+<command>
+--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt --pinnedpubkey sha256//AAUDLk4c98xcFUDvA9i/MnA9HuO03IPi15r+Cx9OXnc= https://localhost:%HTTPSPORT/%TESTNUMBER
</command>
# Ensure that we're running on localhost because we're checking the host name
<precheck>
diff --git a/tests/data/test2042 b/tests/data/test2042
index b6b9bcc5a..594a7e460 100644
--- a/tests/data/test2042
+++ b/tests/data/test2042
@@ -22,10 +22,10 @@ SSLpinning
<server>
https Server-localhost-sv.pem
</server>
- <name>
+<name>
HTTPS wrong base64-sha256 pinnedpubkey but right CN
- </name>
- <command>
+</name>
+<command>
--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt --pinnedpubkey sha256//bSIggTf+ikMG0CtmDlpMVBd7yi7H1md4URogRPqerso= https://localhost:%HTTPSPORT/%TESTNUMBER
</command>
# Ensure that we're running on localhost because we're checking the host name
diff --git a/tests/data/test2043 b/tests/data/test2043
index 754a9b92e..eb4387667 100644
--- a/tests/data/test2043
+++ b/tests/data/test2043
@@ -15,10 +15,10 @@ Schannel
<server>
none
</server>
- <name>
+<name>
Disable certificate revocation checks
- </name>
- <command>
+</name>
+<command>
--ssl-no-revoke -I https://revoked.badssl.com/
</command>
</client>
diff --git a/tests/data/test2046 b/tests/data/test2046
index 8845326e8..fc5ddca84 100644
--- a/tests/data/test2046
+++ b/tests/data/test2046
@@ -48,11 +48,11 @@ LC_CTYPE=en_US.UTF-8
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
- <name>
-Connection re-use with IDN host name
- </name>
+<name>
+Connection reuse with IDN host name
+</name>
- <command>
+<command>
http://åäö.se:%HTTPPORT/%TESTNUMBER --resolve xn--4cab6c.se:%HTTPPORT:%HOSTIP -w "%{num_connects}\n%{num_redirects}\n%{size_download}\n%{url_effective}\n%{content_type}\n%{response_code}\n" -L
</command>
</client>
diff --git a/tests/data/test2047 b/tests/data/test2047
index a4ab3911d..76bed3cc9 100644
--- a/tests/data/test2047
+++ b/tests/data/test2047
@@ -49,11 +49,11 @@ LC_CTYPE=en_US.UTF-8
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
- <name>
-Connection re-use with IDN host name over HTTP proxy
- </name>
+<name>
+Connection reuse with IDN host name over HTTP proxy
+</name>
- <command>
+<command>
http://åäö.se/%TESTNUMBER -x %HOSTIP:%HTTPPORT -w "%{num_connects}\n%{num_redirects}\n%{size_download}\n%{url_effective}\n%{content_type}\n%{response_code}\n" -L
</command>
</client>
diff --git a/tests/data/test2049 b/tests/data/test2049
index 2b0c64508..98be38bee 100644
--- a/tests/data/test2049
+++ b/tests/data/test2049
@@ -26,11 +26,11 @@ OK
<server>
http
</server>
- <name>
+<name>
Connect to specific host
- </name>
+</name>
- <command>
+<command>
http://www1.example.com:8081/%TESTNUMBER --connect-to ::%HOSTIP:%HTTPPORT --next http://www2.example.com:8082/%TESTNUMBER --connect-to :8082:%HOSTIP:%HTTPPORT --next http://www3.example.com:8083/%TESTNUMBER --connect-to www3.example.com::%HOSTIP:%HTTPPORT --next http://www4.example.com:8084/%TESTNUMBER --connect-to www4.example.com:8084:%HOSTIP:%HTTPPORT
</command>
</client>
diff --git a/tests/data/test205 b/tests/data/test205
index de04997c3..8239f6322 100644
--- a/tests/data/test205
+++ b/tests/data/test205
@@ -13,13 +13,13 @@ FAILURE
<server>
file
</server>
- <name>
+<name>
"upload" with file://
- </name>
+</name>
<command option="no-include">
-file://localhost/%PWD/log/nonexisting/result%TESTNUMBER.txt -T log/upload%TESTNUMBER.txt
+file://localhost/%PWD/%LOGDIR/nonexisting/result%TESTNUMBER.txt -T %LOGDIR/upload%TESTNUMBER.txt
</command>
-<file name="log/upload%TESTNUMBER.txt">
+<file name="%LOGDIR/upload%TESTNUMBER.txt">
data
in
file
diff --git a/tests/data/test2050 b/tests/data/test2050
index 8d63a8d4b..3363fe55f 100644
--- a/tests/data/test2050
+++ b/tests/data/test2050
@@ -46,11 +46,11 @@ OK
http
http-proxy
</server>
- <name>
+<name>
Connect to specific host via HTTP proxy (switch to tunnel mode automatically)
- </name>
+</name>
- <command>
+<command>
http://www.example.com.%TESTNUMBER/%TESTNUMBER --connect-to ::connect.example.com.%TESTNUMBER:%HTTPPORT -x %HOSTIP:%PROXYPORT
</command>
<features>
diff --git a/tests/data/test2051 b/tests/data/test2051
index bd823bfff..ce76cc93c 100644
--- a/tests/data/test2051
+++ b/tests/data/test2051
@@ -26,11 +26,11 @@ OK
<server>
http
</server>
- <name>
-Connect to specific host: Re-use existing connections if possible
- </name>
+<name>
+Connect to specific host: Reuse existing connections if possible
+</name>
- <command>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -w "%{num_connects}\n" --next --connect-to ::%HOSTIP:%HTTPPORT http://%HOSTIP:%HTTPPORT/%TESTNUMBER -w "%{num_connects}\n" --next http://%HOSTIP:%HTTPPORT/%TESTNUMBER -w "%{num_connects}\n"
</command>
</client>
diff --git a/tests/data/test2052 b/tests/data/test2052
index dd04f3260..a2a73e8ad 100644
--- a/tests/data/test2052
+++ b/tests/data/test2052
@@ -27,11 +27,11 @@ OK
<server>
http
</server>
- <name>
+<name>
Connect to specific host: Do not mix connections with and without a "connect to host"
- </name>
+</name>
- <command>
+<command>
http://www.example.com:%HTTPPORT/%TESTNUMBER --resolve www.example.com:%HTTPPORT:%HOSTIP -w "%{num_connects}\n" --next --resolve -www.example.com:%HTTPPORT --connect-to ::%HOSTIP:%HTTPPORT http://www.example.com:%HTTPPORT/%TESTNUMBER -w "%{num_connects}\n"
</command>
</client>
diff --git a/tests/data/test2053 b/tests/data/test2053
index 41035eb59..a416d5286 100644
--- a/tests/data/test2053
+++ b/tests/data/test2053
@@ -26,11 +26,11 @@ OK
<server>
http
</server>
- <name>
+<name>
Connect to specific host with IP addresses
- </name>
+</name>
- <command>
+<command>
http://10.0.0.1:8081/%TESTNUMBER --connect-to 10.0.0.1:8081:%HOSTIP:%HTTPPORT --next http://[fc00::1]:8082/%TESTNUMBER --connect-to [fc00::1]:8082:%HOSTIP:%HTTPPORT
</command>
</client>
diff --git a/tests/data/test2054 b/tests/data/test2054
index 022d13229..8217444e5 100644
--- a/tests/data/test2054
+++ b/tests/data/test2054
@@ -26,11 +26,11 @@ OK
<server>
http
</server>
- <name>
+<name>
Connect to specific host: use the first "connect-to" string that matches
- </name>
+</name>
- <command>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --connect-to foo::bar: --connect-to :123::456 --next http://www.example.com:%HTTPPORT/%TESTNUMBER --connect-to www.example.com::%HOSTIP: --connect-to www.example.com::foo: --next http://%HOSTIP:8083/%TESTNUMBER --connect-to :8083::%HTTPPORT --connect-to :8083::123 --next http://www.example.com:8084/%TESTNUMBER --connect-to www.example.com:8084:%HOSTIP:%HTTPPORT --connect-to www.example.com:8084:foo:123
</command>
</client>
diff --git a/tests/data/test2055 b/tests/data/test2055
index 2c62b259b..66ddb084f 100644
--- a/tests/data/test2055
+++ b/tests/data/test2055
@@ -48,13 +48,13 @@ http
http-proxy
socks5
</server>
- <name>
+<name>
Connect to specific host via SOCKS proxy and HTTP proxy (switch to tunnel mode automatically)
- </name>
+</name>
<features>
proxy
</features>
- <command>
+<command>
http://www.example.com.%TESTNUMBER/%TESTNUMBER --connect-to ::connect.example.com.%TESTNUMBER:%HTTPPORT -x %HOSTIP:%PROXYPORT --preproxy socks5://%HOSTIP:%SOCKSPORT
</command>
</client>
diff --git a/tests/data/test2056 b/tests/data/test2056
index d262e097d..008f137df 100644
--- a/tests/data/test2056
+++ b/tests/data/test2056
@@ -47,7 +47,7 @@ LD_PRELOAD=%PWD/libtest/.libs/libstubgss.so
CURL_STUB_GSS_CREDS="KRB5_Alice"
</setenv>
<command>
--u: --negotiate http://%HOSTIP:%HTTPPORT/%TESTNUMBER
+--negotiate http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test2057 b/tests/data/test2057
index c5443cc60..dfc7798f6 100644
--- a/tests/data/test2057
+++ b/tests/data/test2057
@@ -63,7 +63,7 @@ LD_PRELOAD=%PWD/libtest/.libs/libstubgss.so
CURL_STUB_GSS_CREDS="NTLM_Alice"
</setenv>
<command>
--u: --negotiate http://%HOSTIP:%HTTPPORT/%TESTNUMBER
+--negotiate http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test2058 b/tests/data/test2058
index c400f2630..4dfac74b7 100644
--- a/tests/data/test2058
+++ b/tests/data/test2058
@@ -68,13 +68,13 @@ http
crypto
proxy
</features>
- <name>
+<name>
HTTP POST --digest with PUT, resumed upload, modified method and SHA-256
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u auser:apasswd --digest -T log/%TESTNUMBER -x http://%HOSTIP:%HTTPPORT -C 2 -X GET
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u auser:apasswd --digest -T %LOGDIR/%TESTNUMBER -x http://%HOSTIP:%HTTPPORT -C 2 -X GET
</command>
-<file name="log/%TESTNUMBER">
+<file name="%LOGDIR/%TESTNUMBER">
test
</file>
</client>
@@ -98,7 +98,6 @@ User-Agent: curl/%VERSION
Accept: */*
Proxy-Connection: Keep-Alive
Content-Length: 3
-Expect: 100-continue
st
</protocol>
diff --git a/tests/data/test2059 b/tests/data/test2059
index 3170c99a1..e2957bce5 100644
--- a/tests/data/test2059
+++ b/tests/data/test2059
@@ -68,13 +68,13 @@ http
crypto
proxy
</features>
- <name>
+<name>
HTTP POST --digest with PUT, resumed upload, modified method, SHA-256 and userhash=true
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u auser:apasswd --digest -T log/%TESTNUMBER -x http://%HOSTIP:%HTTPPORT -C 2 -X GET
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u auser:apasswd --digest -T %LOGDIR/%TESTNUMBER -x http://%HOSTIP:%HTTPPORT -C 2 -X GET
</command>
-<file name="log/%TESTNUMBER">
+<file name="%LOGDIR/%TESTNUMBER">
test
</file>
</client>
@@ -98,7 +98,6 @@ User-Agent: curl/%VERSION
Accept: */*
Proxy-Connection: Keep-Alive
Content-Length: 3
-Expect: 100-continue
st
</protocol>
diff --git a/tests/data/test206 b/tests/data/test206
index f92ff8357..19fbbfb4a 100644
--- a/tests/data/test206
+++ b/tests/data/test206
@@ -75,10 +75,10 @@ http
crypto
proxy
</features>
- <name>
+<name>
HTTP proxy CONNECT auth Digest
- </name>
- <command>
+</name>
+<command>
http://test.remote.haxx.se.%TESTNUMBER:8990/path/%TESTNUMBER0002 --proxy http://%HOSTIP:%HTTPPORT --proxy-user silly:person --proxy-digest --proxytunnel
</command>
</client>
diff --git a/tests/data/test2060 b/tests/data/test2060
index 11dd15526..dc4223ec6 100644
--- a/tests/data/test2060
+++ b/tests/data/test2060
@@ -68,13 +68,13 @@ http
crypto
proxy
</features>
- <name>
+<name>
HTTP POST --digest with PUT, resumed upload, modified method, SHA-512-256 and userhash=false
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u auser:apasswd --digest -T log/%TESTNUMBER -x http://%HOSTIP:%HTTPPORT -C 2 -X GET
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u auser:apasswd --digest -T %LOGDIR/%TESTNUMBER -x http://%HOSTIP:%HTTPPORT -C 2 -X GET
</command>
-<file name="log/%TESTNUMBER">
+<file name="%LOGDIR/%TESTNUMBER">
test
</file>
</client>
@@ -98,7 +98,6 @@ User-Agent: curl/%VERSION
Accept: */*
Proxy-Connection: Keep-Alive
Content-Length: 3
-Expect: 100-continue
st
</protocol>
diff --git a/tests/data/test2061 b/tests/data/test2061
index 702bc64dd..d232f6251 100644
--- a/tests/data/test2061
+++ b/tests/data/test2061
@@ -55,10 +55,10 @@ http
!SSPI
crypto
</features>
- <name>
+<name>
HTTP with RFC7616 SHA256 Digest authorization
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u testuser:testpass --digest
</command>
</client>
diff --git a/tests/data/test2062 b/tests/data/test2062
index e05a42f66..b6a1e01f9 100644
--- a/tests/data/test2062
+++ b/tests/data/test2062
@@ -55,10 +55,10 @@ http
!SSPI
crypto
</features>
- <name>
+<name>
HTTP with RFC7616 SHA-512-256 Digest authorization and userhash=false
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u testuser:testpass --digest
</command>
</client>
diff --git a/tests/data/test2063 b/tests/data/test2063
index 986a6ef6a..f769428a9 100644
--- a/tests/data/test2063
+++ b/tests/data/test2063
@@ -55,10 +55,10 @@ http
!SSPI
crypto
</features>
- <name>
+<name>
HTTP with RFC7616 SHA-256 Digest authorization and userhash=true
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u testuser:testpass --digest
</command>
</client>
diff --git a/tests/data/test2064 b/tests/data/test2064
index 77810ec1d..6d6fb14ac 100644
--- a/tests/data/test2064
+++ b/tests/data/test2064
@@ -55,10 +55,10 @@ http
!SSPI
crypto
</features>
- <name>
+<name>
HTTP with RFC7616 Digest authorization with bad password and SHA256
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u testuser:test2pass --digest
</command>
</client>
diff --git a/tests/data/test2065 b/tests/data/test2065
index 3d7afea25..0b794302d 100644
--- a/tests/data/test2065
+++ b/tests/data/test2065
@@ -55,10 +55,10 @@ http
!SSPI
crypto
</features>
- <name>
+<name>
HTTP with RFC7616 Digest authorization with bad password, SHA-512-256 and userhash=false
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u testuser:test2pass --digest
</command>
</client>
diff --git a/tests/data/test2066 b/tests/data/test2066
index 4352afaf3..999f55ae4 100644
--- a/tests/data/test2066
+++ b/tests/data/test2066
@@ -55,10 +55,10 @@ http
!SSPI
crypto
</features>
- <name>
+<name>
HTTP with RFC7616 Digest authorization with bad password, SHA-256 and userhash=true
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u testuser:test2pass --digest
</command>
</client>
diff --git a/tests/data/test207 b/tests/data/test207
index 3719201ee..0c9bcaeb6 100644
--- a/tests/data/test207
+++ b/tests/data/test207
@@ -37,10 +37,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
<server>
http
</server>
- <name>
+<name>
HTTP GET with chunked Transfer-Encoding closed prematurely
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test2070 b/tests/data/test2070
index 74cdd7d8c..38b6ca89d 100644
--- a/tests/data/test2070
+++ b/tests/data/test2070
@@ -30,14 +30,14 @@ Schannel
<server>
https Server-localhost-sv.pem
</server>
- <name>
+<name>
Ignore certificate revocation "best effort" strategy
- </name>
+</name>
<setenv>
# This test is pointless if we're not using the schannel backend
CURL_SSL_BACKEND=schannel
</setenv>
- <command>
+<command>
--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt --ssl-revoke-best-effort https://localhost:%HTTPSPORT/%TESTNUMBER
</command>
# Ensure that we're running on localhost because we're checking the host name
diff --git a/tests/data/test2071 b/tests/data/test2071
index 900f0d5a8..544893af5 100644
--- a/tests/data/test2071
+++ b/tests/data/test2071
@@ -20,13 +20,13 @@ moo
<server>
file
</server>
- <name>
+<name>
basic file:// file with "127.0.0.1" hostname
- </name>
+</name>
<command option="no-include">
-file://127.0.0.1%FILE_PWD/log/test2070.txt
+file://127.0.0.1%FILE_PWD/%LOGDIR/test2070.txt
</command>
-<file name="log/test2070.txt">
+<file name="%LOGDIR/test2070.txt">
foo
bar
bar
diff --git a/tests/data/test2072 b/tests/data/test2072
index 179167068..50cb4b60a 100644
--- a/tests/data/test2072
+++ b/tests/data/test2072
@@ -24,12 +24,12 @@ file
file:// with unix path resolution behavior for the case of extra slashes
</name>
<command option="no-include">
-file:////%PWD/log/test%TESTNUMBER.txt
+file:////%PWD/%LOGDIR/test%TESTNUMBER.txt
</command>
<precheck>
perl -e "print 'Test requires a unix system' if ( $^O eq 'MSWin32' || $^O eq 'cygwin' || $^O eq 'dos' || $^O eq 'msys');"
</precheck>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
foo
bar
bar
diff --git a/tests/data/test2073 b/tests/data/test2073
index c6b3dee5a..8eea26553 100644
--- a/tests/data/test2073
+++ b/tests/data/test2073
@@ -33,10 +33,10 @@ Mime
<server>
http
</server>
- <name>
+<name>
HTTP form posts with handle reset
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -F 'name=a;filename=a.pdf' --next http://%HOSTIP:%HTTPPORT/%TESTNUMBER -F 'name=b;filename=b.jpg'
</command>
</client>
@@ -52,7 +52,7 @@ POST /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 189
+Content-Length: 201
Content-Disposition: form-data; name="name"; filename="a.pdf"
Content-Type: application/pdf
@@ -62,7 +62,7 @@ POST /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 184
+Content-Length: 196
Content-Disposition: form-data; name="name"; filename="b.jpg"
Content-Type: image/jpeg
diff --git a/tests/data/test2074 b/tests/data/test2074
index e7b600338..1ef3480b5 100644
--- a/tests/data/test2074
+++ b/tests/data/test2074
@@ -32,10 +32,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP GET
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --oauth2-bearer mF_9.B5f-4.1JqM
</command>
</client>
diff --git a/tests/data/test2077 b/tests/data/test2077
index 44a197481..b244b9466 100644
--- a/tests/data/test2077
+++ b/tests/data/test2077
@@ -29,7 +29,7 @@ GSS-API
curl --fail --negotiate to unauthenticated service fails
</name>
<command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u : --fail --negotiate
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --fail --negotiate
</command>
</client>
diff --git a/tests/data/test2078 b/tests/data/test2078
index 387352afa..ec1277e5e 100644
--- a/tests/data/test2078
+++ b/tests/data/test2078
@@ -29,7 +29,7 @@ GSS-API
curl --negotiate should not send empty POST request only
</name>
<command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u : --negotiate --data name=value
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --negotiate --data name=value
</command>
</client>
diff --git a/tests/data/test2079 b/tests/data/test2079
index 67ffa1656..0164d1b3b 100644
--- a/tests/data/test2079
+++ b/tests/data/test2079
@@ -31,14 +31,14 @@ Schannel
<server>
https Server-localhost-sv.pem
</server>
- <name>
+<name>
simple HTTPS GET with PEM public key pinning (Schannel variant)
- </name>
+</name>
<setenv>
# This test is pointless if we're not using the schannel backend
CURL_SSL_BACKEND=schannel
</setenv>
- <command>
+<command>
--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt --pinnedpubkey %SRCDIR/certs/Server-localhost-sv.pub.pem --ssl-revoke-best-effort https://localhost:%HTTPSPORT/%TESTNUMBER
</command>
# Ensure that we're running on localhost because we're checking the host name
diff --git a/tests/data/test208 b/tests/data/test208
index d081b5131..d2b3e1599 100644
--- a/tests/data/test208
+++ b/tests/data/test208
@@ -29,13 +29,13 @@ http
ftp
proxy
</features>
- <name>
+<name>
HTTP PUT to a FTP URL with username+password - over HTTP proxy
- </name>
- <command>
--x http://%HOSTIP:%HTTPPORT ftp://daniel:mysecret@host.com/we/want/%TESTNUMBER -T log/test%TESTNUMBER.txt
+</name>
+<command>
+-x http://%HOSTIP:%HTTPPORT ftp://daniel:mysecret@host.com/we/want/%TESTNUMBER -T %LOGDIR/test%TESTNUMBER.txt
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
Weird
file
to
@@ -58,7 +58,6 @@ User-Agent: curl/%VERSION
Accept: */*
Proxy-Connection: Keep-Alive
Content-Length: 78
-Expect: 100-continue
Weird
file
diff --git a/tests/data/test2080 b/tests/data/test2080
index 9c8d538fc..7f08385b6 100644
--- a/tests/data/test2080
+++ b/tests/data/test2080
Binary files differ
diff --git a/tests/data/test2081 b/tests/data/test2081
index add929252..0a95fb881 100644
--- a/tests/data/test2081
+++ b/tests/data/test2081
@@ -32,10 +32,10 @@ Thanks for following.
<server>
http
</server>
- <name>
+<name>
Automatic referrer credential and anchor stripping check
- </name>
- <command>
+</name>
+<command>
http://user:pass@%HOSTIP:%HTTPPORT/we/want/our/%TESTNUMBER#anchor --location --referer ';auto' --write-out '%{referer}\n'
</command>
</client>
diff --git a/tests/data/test2087 b/tests/data/test2087
index 78751ea62..eb8d3bad8 100644
--- a/tests/data/test2087
+++ b/tests/data/test2087
@@ -31,15 +31,15 @@ Schannel
<server>
https Server-localhost-sv.pem
</server>
- <name>
+<name>
simple HTTPS GET with base64-sha256 public key pinning (Schannel variant)
- </name>
+</name>
<setenv>
# This test is pointless if we're not using the schannel backend
CURL_SSL_BACKEND=schannel
</setenv>
- <command>
---cacert %SRCDIR/certs/EdelCurlRoot-ca.crt --pinnedpubkey sha256//+JYNkp2GTGRgrvZMUkOxbFJQQqYpwNE6toGmBjz00D8= --ssl-revoke-best-effort https://localhost:%HTTPSPORT/%TESTNUMBER
+<command>
+--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt --pinnedpubkey sha256//AAUDLk4c98xcFUDvA9i/MnA9HuO03IPi15r+Cx9OXnc= --ssl-revoke-best-effort https://localhost:%HTTPSPORT/%TESTNUMBER
</command>
# Ensure that we're running on localhost because we're checking the host name
<precheck>
diff --git a/tests/data/test21 b/tests/data/test21
index 5c099cf34..d98830e1d 100644
--- a/tests/data/test21
+++ b/tests/data/test21
@@ -19,10 +19,10 @@ Mime
<server>
http
</server>
- <name>
+<name>
use curl with multiple request methods
- </name>
- <command>
+</name>
+<command>
-I -d FOOO -F moo=moo localhost
</command>
</client>
diff --git a/tests/data/test210 b/tests/data/test210
index 170316425..1ee313d76 100644
--- a/tests/data/test210
+++ b/tests/data/test210
@@ -19,9 +19,9 @@ data blobb
<server>
ftp
</server>
- <name>
+<name>
Get two FTP files from the same remote dir: no second CWD
- </name>
+</name>
<command option="no-include">
ftp://%HOSTIP:%FTPPORT/a/path/%TESTNUMBER ftp://%HOSTIP:%FTPPORT/a/path/%TESTNUMBER
</command>
diff --git a/tests/data/test2100 b/tests/data/test2100
index 1fa0f23bf..120a6af7a 100644
--- a/tests/data/test2100
+++ b/tests/data/test2100
@@ -51,10 +51,10 @@ debug
DoH
ipv6
</features>
- <name>
+<name>
HTTP GET using DoH
- </name>
- <command>
+</name>
+<command>
http://foo.example.com:%HTTPPORT/%TESTNUMBER --doh-url http://%HOSTIP:%HTTPPORT/%TESTNUMBER0001
</command>
</client>
diff --git a/tests/data/test211 b/tests/data/test211
index 0fe6e6f96..6830727ab 100644
--- a/tests/data/test211
+++ b/tests/data/test211
@@ -20,10 +20,10 @@ REPLY EPSV 500 no such command
<server>
ftp
</server>
- <name>
+<name>
Get two FTP files with no remote EPSV support
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/a/path/%TESTNUMBER ftp://%HOSTIP:%FTPPORT/a/path/%TESTNUMBER
</command>
<stdout>
diff --git a/tests/data/test212 b/tests/data/test212
index 175759a86..db0201e15 100644
--- a/tests/data/test212
+++ b/tests/data/test212
@@ -25,10 +25,10 @@ ftp
<features>
ipv6
</features>
- <name>
+<name>
Get two FTP files with no remote EPRT support
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/a/path/%TESTNUMBER ftp://%HOSTIP:%FTPPORT/a/path/%TESTNUMBER -P -
</command>
<stdout>
diff --git a/tests/data/test214 b/tests/data/test214
index bb3390f61..846b46458 100644
--- a/tests/data/test214
+++ b/tests/data/test214
@@ -25,9 +25,9 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP URL with escaped { and }
- </name>
+</name>
<command>
"http://%HOSTIP:%HTTPPORT/\{\}\/%TESTNUMBER"
</command>
diff --git a/tests/data/test215 b/tests/data/test215
index 5fd8fc656..cead9c742 100644
--- a/tests/data/test215
+++ b/tests/data/test215
@@ -30,10 +30,10 @@ dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
<server>
ftp
</server>
- <name>
+<name>
Get two FTP dir listings from the same remote dir: no second CWD
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/a/path/%TESTNUMBER/ ftp://%HOSTIP:%FTPPORT/a/path/%TESTNUMBER/
</command>
</client>
diff --git a/tests/data/test216 b/tests/data/test216
index 0e74110b1..1be87c0d1 100644
--- a/tests/data/test216
+++ b/tests/data/test216
@@ -14,13 +14,13 @@ FTP
<server>
ftp
</server>
- <name>
+<name>
FTP upload two files to the same dir
- </name>
- <command>
--T log/upload.%TESTNUMBER ftp://%HOSTIP:%FTPPORT/a/path/%TESTNUMBER/ -T log/upload.%TESTNUMBER ftp://%HOSTIP:%FTPPORT/a/path/%TESTNUMBER/%2e%2eanotherup.%TESTNUMBER
+</name>
+<command>
+-T %LOGDIR/upload.%TESTNUMBER ftp://%HOSTIP:%FTPPORT/a/path/%TESTNUMBER/ -T %LOGDIR/upload.%TESTNUMBER ftp://%HOSTIP:%FTPPORT/a/path/%TESTNUMBER/%2e%2eanotherup.%TESTNUMBER
</command>
-<file name="log/upload.%TESTNUMBER">
+<file name="%LOGDIR/upload.%TESTNUMBER">
upload this file twice
</file>
</client>
diff --git a/tests/data/test217 b/tests/data/test217
index d791416b0..cb6c6738b 100644
--- a/tests/data/test217
+++ b/tests/data/test217
@@ -28,10 +28,10 @@ And you should ignore this data.
<server>
http
</server>
- <name>
+<name>
HTTP proxy CONNECT to proxy returning 405
- </name>
- <command>
+</name>
+<command>
http://test.remote.example.com.%TESTNUMBER:%HTTPPORT/path/%TESTNUMBER0002 --proxy http://%HOSTIP:%HTTPPORT --proxytunnel -w "%{http_code} %{http_connect}\n"
</command>
<features>
diff --git a/tests/data/test218 b/tests/data/test218
index dc71442e8..cf9c41ad4 100644
--- a/tests/data/test218
+++ b/tests/data/test218
@@ -25,13 +25,13 @@ blaha
<server>
http
</server>
- <name>
+<name>
HTTP PUT from a file but enforce chunked transfer-encoding
- </name>
- <command>
- -T log/file%TESTNUMBER -H "Transfer-Encoding: chunked" http://%HOSTIP:%HTTPPORT/%TESTNUMBER
+</name>
+<command>
+ -T %LOGDIR/file%TESTNUMBER -H "Transfer-Encoding: chunked" http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
-<file name="log/file%TESTNUMBER">
+<file name="%LOGDIR/file%TESTNUMBER">
just some tiny teeny contents
</file>
</client>
@@ -45,7 +45,6 @@ Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
Transfer-Encoding: chunked
-Expect: 100-continue
%if hyper
1E
diff --git a/tests/data/test219 b/tests/data/test219
index 74a8551da..2e965f366 100644
--- a/tests/data/test219
+++ b/tests/data/test219
@@ -20,10 +20,10 @@ none
http
proxy
</features>
- <name>
+<name>
try using proxy with unsupported scheme
- </name>
- <command>
+</name>
+<command>
-x foo://%HOSTIP:%NOLISTENPORT/%TESTNUMBER http://%HOSTIP:%NOLISTENPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test22 b/tests/data/test22
index f5593c435..b594a9cf7 100644
--- a/tests/data/test22
+++ b/tests/data/test22
@@ -2,7 +2,6 @@
<info>
<keywords>
HTTP
-HTTP PUT
long URL
</keywords>
</info>
@@ -22,10 +21,10 @@ This is the proof it works
<server>
http
</server>
- <name>
+<name>
get HTTP with URL > 10000 bytes
- </name>
- <command>
+</name>
+<command>
%HOSTIP:%HTTPPORT/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test220 b/tests/data/test220
index 844bb0239..8b28ec0a3 100644
--- a/tests/data/test220
+++ b/tests/data/test220
@@ -43,10 +43,10 @@ libz
<server>
http
</server>
- <name>
+<name>
HTTP GET gzip compressed content
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --compressed
</command>
</client>
diff --git a/tests/data/test2205 b/tests/data/test2205
index 9bc8d3207..da6f1ddaf 100644
--- a/tests/data/test2205
+++ b/tests/data/test2205
@@ -25,11 +25,11 @@ mqtt
<name>
MQTT with very long user name
</name>
-<file name="log/input%TESTNUMBER">
+<file name="%LOGDIR/input%TESTNUMBER">
user = %repeat[65536 x a]%:fakepasswd
</file>
<command option="binary-trace">
-mqtt://%HOSTIP:%MQTTPORT/%TESTNUMBER -K log/input%TESTNUMBER
+mqtt://%HOSTIP:%MQTTPORT/%TESTNUMBER -K %LOGDIR/input%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test221 b/tests/data/test221
index 2d769bcc7..79731628c 100644
--- a/tests/data/test221
+++ b/tests/data/test221
@@ -43,10 +43,10 @@ libz
<server>
http
</server>
- <name>
+<name>
HTTP GET gzip compressed content with broken gzip header
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --compressed
</command>
</client>
diff --git a/tests/data/test222 b/tests/data/test222
index 3f6e7c97f..d5744ea80 100644
--- a/tests/data/test222
+++ b/tests/data/test222
@@ -174,10 +174,10 @@ libz
<server>
http
</server>
- <name>
+<name>
HTTP GET deflate compressed content
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --compressed
</command>
</client>
diff --git a/tests/data/test223 b/tests/data/test223
index 4d0dddc11..3a2cf0405 100644
--- a/tests/data/test223
+++ b/tests/data/test223
@@ -64,10 +64,10 @@ libz
<server>
http
</server>
- <name>
+<name>
HTTP GET deflate compressed content with broken deflate header
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --compressed
</command>
</client>
diff --git a/tests/data/test224 b/tests/data/test224
index 4fc84207c..0b654c2e8 100644
--- a/tests/data/test224
+++ b/tests/data/test224
@@ -79,10 +79,10 @@ libz
<server>
http
</server>
- <name>
+<name>
HTTP GET gzip compressed content with huge comment and extra field
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --compressed
</command>
</client>
diff --git a/tests/data/test225 b/tests/data/test225
index 5c8efd9d9..36fb2ef8c 100644
--- a/tests/data/test225
+++ b/tests/data/test225
@@ -10,10 +10,10 @@ FAILURE
<server>
ftp
</server>
- <name>
+<name>
FTP %0a-code in URL's name part
- </name>
- <command>
+</name>
+<command>
ftp://bad%0auser:passwd@%HOSTIP:%FTPPORT/%TESTNUMBER%0a
</command>
</client>
diff --git a/tests/data/test226 b/tests/data/test226
index 939545766..df0c4ac6f 100644
--- a/tests/data/test226
+++ b/tests/data/test226
@@ -11,10 +11,10 @@ FAILURE
<server>
ftp
</server>
- <name>
+<name>
FTP %0d-code in URL's CWD part
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER%0d
</command>
</client>
diff --git a/tests/data/test227 b/tests/data/test227
index 18622df58..f7b445185 100644
--- a/tests/data/test227
+++ b/tests/data/test227
@@ -27,10 +27,10 @@ REPLY FAIL 500 this might not be a failure!
<server>
ftp
</server>
- <name>
+<name>
FTP with quote ops
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -Q "NOOP 1" -Q "+NOOP 2" -Q "-NOOP 3" -Q "*FAIL" -Q "+*FAIL HARD"
</command>
</client>
diff --git a/tests/data/test228 b/tests/data/test228
index 7ac4ca49a..8e7d73ff0 100644
--- a/tests/data/test228
+++ b/tests/data/test228
@@ -26,10 +26,10 @@ REPLY ACCT 230 thank you
<server>
ftp
</server>
- <name>
+<name>
FTP RETR with ACCT
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER --ftp-account "one count"
</command>
</client>
diff --git a/tests/data/test229 b/tests/data/test229
index 75dc10335..71da135fc 100644
--- a/tests/data/test229
+++ b/tests/data/test229
@@ -19,10 +19,10 @@ REPLY ACCT 532 bluah!
<server>
ftp
</server>
- <name>
+<name>
FTP RETR with bad ACCT
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER --ftp-account "one count"
</command>
</client>
diff --git a/tests/data/test23 b/tests/data/test23
index 46872e82e..1f15b218e 100644
--- a/tests/data/test23
+++ b/tests/data/test23
@@ -16,10 +16,10 @@ FAILURE
<server>
http
</server>
- <name>
+<name>
unsupported protocol:// URL
- </name>
- <command>
+</name>
+<command>
htfp://%HOSTIP:%HTTPPORT/none.htfml
</command>
</client>
diff --git a/tests/data/test230 b/tests/data/test230
index a8c04be68..32b28e5b5 100644
--- a/tests/data/test230
+++ b/tests/data/test230
@@ -175,10 +175,10 @@ libz
<server>
http
</server>
- <name>
+<name>
HTTP GET multiply compressed content
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --compressed
</command>
</client>
diff --git a/tests/data/test2300 b/tests/data/test2300
index 997acfad2..fa620a1b1 100644
--- a/tests/data/test2300
+++ b/tests/data/test2300
@@ -33,10 +33,10 @@ ws
<server>
http
</server>
- <name>
+<name>
WebSockets upgrade only
- </name>
- <command>
+</name>
+<command>
ws://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test2304 b/tests/data/test2304
new file mode 100644
index 000000000..895518fb4
--- /dev/null
+++ b/tests/data/test2304
@@ -0,0 +1,69 @@
+<testcase>
+<info>
+<keywords>
+WebSockets
+</keywords>
+</info>
+
+#
+# Sends a PING + a 5 byte hello TEXT
+<reply>
+<data nocheck="yes" nonewline="yes">
+HTTP/1.1 101 Switching to WebSockets swsclose
+Server: test-server/fake
+Upgrade: websocket
+Connection: Upgrade
+Something: else
+Sec-WebSocket-Accept: HkPsVga7+8LuxM4RGQ5p9tZHeYs=
+
+%hex[%89%00%81%05hello]hex%
+</data>
+# allow upgrade
+<servercmd>
+upgrade
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+# require debug for the forced CURL_ENTROPY
+<features>
+debug
+ws
+</features>
+<server>
+http
+</server>
+<name>
+WebSockets curl_ws_recv() with closed connection
+</name>
+<tool>
+lib%TESTNUMBER
+</tool>
+<command>
+ws://%HOSTIP:%HTTPPORT/%TESTNUMBER
+</command>
+</client>
+
+#
+# PONG with no data and the 32 bit mask
+#
+<verify>
+<protocol nocheck="yes" crlf="yes">
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: websocket/2304
+Accept: */*
+Upgrade: websocket
+Connection: Upgrade
+Sec-WebSocket-Version: 13
+Sec-WebSocket-Key: NDMyMTUzMjE2MzIxNzMyMQ==
+
+</protocol>
+
+# This test used to check that "connection closed" was output, but
+# that is flaky since the outgoing PING just before might fail already
+# and then the test exists before the output gets to be written
+</verify>
+</testcase>
diff --git a/tests/data/test2305 b/tests/data/test2305
new file mode 100644
index 000000000..869f6d36b
--- /dev/null
+++ b/tests/data/test2305
@@ -0,0 +1,59 @@
+<testcase>
+<info>
+<keywords>
+WebSockets
+</keywords>
+</info>
+
+#
+# Sends three 4097 bytes TEXT frames, as one single message
+<reply>
+<data nocheck="yes">
+HTTP/1.1 101 Switching to WebSockets
+Server: test-server/fake
+Upgrade: websocket
+Connection: Upgrade
+Something: else
+Sec-WebSocket-Accept: HkPsVga7+8LuxM4RGQ5p9tZHeYs=
+
+%hex[%01%7e%10%01]hex%%repeat[256 x helothisisdaniel]%
+%hex[%01%7e%10%01]hex%%repeat[256 x helothisisdaniel]%
+%hex[%81%7e%10%01]hex%%repeat[256 x helothisisdaniel]%
+</data>
+# allow upgrade
+<servercmd>
+upgrade
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+# require debug for the forced CURL_ENTROPY
+<features>
+debug
+ws
+</features>
+<server>
+http
+</server>
+<name>
+WebSocket curl_ws_recv() loop reading three larger frames
+</name>
+<tool>
+lib%TESTNUMBER
+</tool>
+<command>
+ws://%HOSTIP:%HTTPPORT/%TESTNUMBER %LOGDIR/save%TESTNUMBER
+</command>
+</client>
+
+#
+<verify>
+<file name="%LOGDIR/save%TESTNUMBER">
+%repeat[256 x helothisisdaniel]%
+%repeat[256 x helothisisdaniel]%
+%repeat[256 x helothisisdaniel]%
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test2306 b/tests/data/test2306
new file mode 100644
index 000000000..da2f25a21
--- /dev/null
+++ b/tests/data/test2306
@@ -0,0 +1,76 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+</keywords>
+</info>
+#
+# This reproduces the #11101 issue, when the second response comes back
+# with the first header being "folded"
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+<data2 nocheck="yes">
+HTTP/1.1 200 OK swsclose
+ Access-Control-Allow-Origin: *
+Connection: Keep-Alive
+Content-Type: text/html; charset=utf-8
+Date: Wed, 10 May 2023 14:58:08 GMT
+
+-foo-
+</data2>
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+# tool to run
+<tool>
+lib%TESTNUMBER
+</tool>
+
+<name>
+HTTP GET reused handle with first header folded
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER0002
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+# hyper doesn't like the bad header in the second request
+<errorcode>
+%if hyper
+1
+%else
+0
+%endif
+</errorcode>
+<protocol>
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /%TESTNUMBER0002 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test231 b/tests/data/test231
index c925eb151..e89346614 100644
--- a/tests/data/test231
+++ b/tests/data/test231
@@ -19,13 +19,13 @@ C01234567
<server>
file
</server>
- <name>
+<name>
file:// with resume
- </name>
+</name>
<command option="no-include">
-file://localhost%FILE_PWD/log/test%TESTNUMBER.txt -C 10
+file://localhost%FILE_PWD/%LOGDIR/test%TESTNUMBER.txt -C 10
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
A01234567
B01234567
C01234567
diff --git a/tests/data/test232 b/tests/data/test232
index 32fdc6a35..025ce9f62 100644
--- a/tests/data/test232
+++ b/tests/data/test232
@@ -174,10 +174,10 @@ libz
<server>
http
</server>
- <name>
+<name>
HTTP GET deflate raw-compressed content
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --compressed
</command>
</client>
diff --git a/tests/data/test233 b/tests/data/test233
index d08997586..e02be2a86 100644
--- a/tests/data/test233
+++ b/tests/data/test233
@@ -61,10 +61,10 @@ contents
<server>
http
</server>
- <name>
+<name>
HTTP, proxy, site+proxy auth and Location: to new host
- </name>
- <command>
+</name>
+<command>
http://first.host.it.is/we/want/that/page/%TESTNUMBER -x %HOSTIP:%HTTPPORT --user iam:myself --proxy-user testing:this --location
</command>
<features>
diff --git a/tests/data/test234 b/tests/data/test234
index 5e9258f50..f37d492b5 100644
--- a/tests/data/test234
+++ b/tests/data/test234
@@ -63,10 +63,10 @@ contents
<server>
http
</server>
- <name>
+<name>
HTTP, proxy, site+proxy auth and Location: to new host using location-trusted
- </name>
- <command>
+</name>
+<command>
http://first.host.it.is/we/want/that/page/%TESTNUMBER -x %HOSTIP:%HTTPPORT --user iam:myself --proxy-user testing:this --location-trusted
</command>
<features>
diff --git a/tests/data/test235 b/tests/data/test235
index e1f2a2f1e..4bfe7497e 100644
--- a/tests/data/test235
+++ b/tests/data/test235
@@ -17,13 +17,13 @@ REPLY SIZE 500 command not understood
<server>
ftp
</server>
- <name>
+<name>
FTP resumed upload but no file present remotely
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T log/upload%TESTNUMBER -C -
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T %LOGDIR/upload%TESTNUMBER -C -
</command>
-<file name="log/upload%TESTNUMBER">
+<file name="%LOGDIR/upload%TESTNUMBER">
this is the *****crap******** that we're gonna upload
worx?
diff --git a/tests/data/test236 b/tests/data/test236
index 3a89add7f..a66fa046d 100644
--- a/tests/data/test236
+++ b/tests/data/test236
@@ -20,13 +20,13 @@ REPLY SIZE 500 command not understood
<server>
ftp
</server>
- <name>
+<name>
FTP resume upload but denied access to remote file
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T log/file%TESTNUMBER.txt -C -
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T %LOGDIR/file%TESTNUMBER.txt -C -
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test data
</file>
</client>
diff --git a/tests/data/test237 b/tests/data/test237
index 18ee6d951..9e6865118 100644
--- a/tests/data/test237
+++ b/tests/data/test237
@@ -17,10 +17,10 @@ REPLY PASV 227 Entering Passiv Mode (1216,256,2,127,127,127)
<server>
ftp
</server>
- <name>
+<name>
FTP getting bad host in 227-response to PASV
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER --disable-epsv
</command>
</client>
diff --git a/tests/data/test238 b/tests/data/test238
index 748ad46bf..3c0db0441 100644
--- a/tests/data/test238
+++ b/tests/data/test238
@@ -17,10 +17,10 @@ REPLY EPSV 229 Entering Passiv Mode (|||1000000|)
<server>
ftp
</server>
- <name>
+<name>
FTP getting bad port in response to EPSV
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test24 b/tests/data/test24
index bbd5f0394..888c63573 100644
--- a/tests/data/test24
+++ b/tests/data/test24
@@ -21,10 +21,10 @@ This silly page doesn't reaaaaaly exist so you should not get it.
<server>
http
</server>
- <name>
+<name>
HTTP GET fail silently on HTTP error return
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --fail --silent --show-error
</command>
</client>
@@ -41,7 +41,7 @@ Accept: */*
<errorcode>
22
</errorcode>
-<file2 name="log/stderr%TESTNUMBER" mode="text">
+<file2 name="%LOGDIR/stderr%TESTNUMBER" mode="text">
curl: (22) The requested URL returned error: 404
</file2>
</verify>
diff --git a/tests/data/test240 b/tests/data/test240
index 068a2eb60..d033ae35c 100644
--- a/tests/data/test240
+++ b/tests/data/test240
@@ -34,10 +34,10 @@ ipv6
<server>
http-ipv6
</server>
- <name>
+<name>
HTTP-IPv6 GET
- </name>
- <command>
+</name>
+<command>
-g "http://%HOST6IP:%HTTP6PORT/%TESTNUMBER"
</command>
</client>
diff --git a/tests/data/test2400 b/tests/data/test2400
new file mode 100644
index 000000000..e920f4f16
--- /dev/null
+++ b/tests/data/test2400
@@ -0,0 +1,64 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP/2
+HTTPS
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+debug
+h2c
+SSL
+</features>
+<server>
+http
+http/2
+</server>
+<name>
+HTTP/2 GET
+</name>
+<setenv>
+</setenv>
+<command>
+-k --http2 "https://%HOSTIP:%HTTP2TLSPORT/%TESTNUMBER"
+</command>
+
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<stdout crlf="yes">
+HTTP/2 200
+date: Tue, 09 Nov 2010 14:49:00 GMT
+content-length: 6
+content-type: text/html
+funny-head: yesyes
+server: nghttpx
+via: 1.1 nghttpx
+
+-foo-
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test2401 b/tests/data/test2401
new file mode 100644
index 000000000..ef5fbb181
--- /dev/null
+++ b/tests/data/test2401
@@ -0,0 +1,72 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+HTTP/2
+HTTPS
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 201 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Connection: close
+Content-Length: 0
+Funny-head: yesyes
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+debug
+h2c
+SSL
+</features>
+<server>
+http
+http/2
+</server>
+<name>
+HTTP/2 GET
+</name>
+<setenv>
+</setenv>
+<command>
+-k --http2 "https://%HOSTIP:%HTTP2TLSPORT/%TESTNUMBER" -d "moo"
+</command>
+
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<stdout>
+HTTP/2 201
+date: Tue, 09 Nov 2010 14:49:00 GMT
+content-length: 0
+funny-head: yesyes
+server: nghttpx
+via: 1.1 nghttpx
+
+</stdout>
+<protocol nonewline="yes">
+POST /2401 HTTP/1.1
+Host: %HOSTIP:%HTTP2TLSPORT
+User-Agent: curl/%VERSION
+Accept: */*
+Content-Length: 3
+Content-Type: application/x-www-form-urlencoded
+X-Forwarded-Proto: https
+Via: 2 nghttpx
+
+moo
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test2402 b/tests/data/test2402
new file mode 100644
index 000000000..44d48f85f
--- /dev/null
+++ b/tests/data/test2402
@@ -0,0 +1,109 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP/2
+multi
+verbose logs
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data1 crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: server.example.com
+Content-Length: 47
+
+file contents should appear once for each file
+</data1>
+<data2>
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: server.example.com
+Content-Length: 47
+
+file contents should appear once for each file
+</data2>
+<data3>
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: server.example.com
+Content-Length: 47
+
+file contents should appear once for each file
+</data3>
+<data4>
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: server.example.com
+Content-Length: 47
+
+file contents should appear once for each file
+</data4>
+</reply>
+
+# Client-side
+<client>
+<features>
+h2c
+SSL
+</features>
+<server>
+http
+http/2
+</server>
+<tool>
+lib%TESTNUMBER
+</tool>
+<name>
+HTTP GET multiple over HTTP/2
+</name>
+<command>
+https://%HOSTIP:%HTTP2TLSPORT/path/%TESTNUMBER %HOSTIP %HTTP2TLSPORT
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /path/%TESTNUMBER0001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+X-Forwarded-Proto: https
+Via: 2 nghttpx
+
+GET /path/%TESTNUMBER0002 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+X-Forwarded-Proto: https
+Via: 2 nghttpx
+
+GET /path/%TESTNUMBER0003 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+X-Forwarded-Proto: https
+Via: 2 nghttpx
+
+GET /path/%TESTNUMBER0004 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+X-Forwarded-Proto: https
+Via: 2 nghttpx
+
+</protocol>
+<strip>
+^Host:.*
+</strip>
+<file name="%LOGDIR/stderr%TESTNUMBER" mode="text">
+* Connection #0 to host localhost left intact
+* Connection #0 to host localhost left intact
+* Connection #0 to host localhost left intact
+* Connection #0 to host localhost left intact
+</file>
+<stripfile>
+$_ = '' if (($_ !~ /left intact/) && ($_ !~ /Closing connection/))
+</stripfile>
+</verify>
+</testcase>
diff --git a/tests/data/test2403 b/tests/data/test2403
new file mode 100644
index 000000000..7a993d731
--- /dev/null
+++ b/tests/data/test2403
@@ -0,0 +1,73 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP/2
+HTTPS
+-w
+%header
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes" crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+h2c
+SSL
+headers-api
+</features>
+<server>
+http
+http/2
+</server>
+<name>
+HTTP/2 GET
+</name>
+<setenv>
+</setenv>
+<command>
+-k --http2 -w '%{header_json}\n' "https://%HOSTIP:%HTTP2TLSPORT/%TESTNUMBER"
+</command>
+
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<stdout crlf="yes">
+HTTP/2 200
+date: Tue, 09 Nov 2010 14:49:00 GMT
+content-length: 6
+content-type: text/html
+funny-head: yesyes
+server: nghttpx
+via: 1.1 nghttpx
+
+-foo-
+{"date":["Tue, 09 Nov 2010 14:49:00 GMT"],
+"content-length":["6"],
+"content-type":["text/html"],
+"funny-head":["yesyes"],
+"server":["nghttpx"],
+"via":["1.1 nghttpx"]
+}
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test2404 b/tests/data/test2404
new file mode 100644
index 000000000..bcf1035aa
--- /dev/null
+++ b/tests/data/test2404
@@ -0,0 +1,109 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP/2
+multi
+verbose logs
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data1 crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: server.example.com
+Content-Length: 47
+
+file contents should appear once for each file
+</data1>
+<data2>
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: server.example.com
+Content-Length: 47
+
+file contents should appear once for each file
+</data2>
+<data3>
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: server.example.com
+Content-Length: 47
+
+file contents should appear once for each file
+</data3>
+<data4>
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: server.example.com
+Content-Length: 47
+
+file contents should appear once for each file
+</data4>
+</reply>
+
+# Client-side
+<client>
+<features>
+h2c
+SSL
+</features>
+<server>
+http
+http/2
+</server>
+<tool>
+lib%TESTNUMBER
+</tool>
+<name>
+HTTP/2 using STREAM_WEIGHTs
+</name>
+<command>
+https://%HOSTIP:%HTTP2TLSPORT/path/%TESTNUMBER %HOSTIP %HTTP2TLSPORT
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /path/%TESTNUMBER0001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+X-Forwarded-Proto: https
+Via: 2 nghttpx
+
+GET /path/%TESTNUMBER0002 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+X-Forwarded-Proto: https
+Via: 2 nghttpx
+
+GET /path/%TESTNUMBER0003 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+X-Forwarded-Proto: https
+Via: 2 nghttpx
+
+GET /path/%TESTNUMBER0004 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+X-Forwarded-Proto: https
+Via: 2 nghttpx
+
+</protocol>
+<strip>
+^Host:.*
+</strip>
+<file name="%LOGDIR/stderr%TESTNUMBER" mode="text">
+* Connection #0 to host localhost left intact
+* Connection #0 to host localhost left intact
+* Connection #0 to host localhost left intact
+* Connection #0 to host localhost left intact
+</file>
+<stripfile>
+$_ = '' if (($_ !~ /left intact/) && ($_ !~ /Closing connection/))
+</stripfile>
+</verify>
+</testcase>
diff --git a/tests/data/test241 b/tests/data/test241
index 8fb619cac..92a431420 100644
--- a/tests/data/test241
+++ b/tests/data/test241
@@ -29,10 +29,10 @@ ipv6
<server>
http-ipv6
</server>
- <name>
+<name>
HTTP-IPv6 GET (using ip6-localhost)
- </name>
- <command>
+</name>
+<command>
-g "http://ip6-localhost:%HTTP6PORT/%TESTNUMBER"
</command>
<precheck>
diff --git a/tests/data/test242 b/tests/data/test242
index 504555923..a498ab29b 100644
--- a/tests/data/test242
+++ b/tests/data/test242
@@ -29,10 +29,10 @@ ipv6
<server>
http-ipv6
</server>
- <name>
+<name>
HTTP-IPv6 GET with username+password in URL
- </name>
- <command>
+</name>
+<command>
-g "http://foobar:barfoo@%HOST6IP:%HTTP6PORT/%TESTNUMBER"
</command>
</client>
diff --git a/tests/data/test244 b/tests/data/test244
index 6755994d5..782be2be4 100644
--- a/tests/data/test244
+++ b/tests/data/test244
@@ -31,10 +31,10 @@ dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
<server>
ftp
</server>
- <name>
+<name>
FTP dir listing with nocwd and URL encoded path
- </name>
- <command>
+</name>
+<command>
--ftp-method nocwd ftp://%HOSTIP:%FTPPORT/fir%23t/th%69rd/%TESTNUMBER/
</command>
</client>
diff --git a/tests/data/test245 b/tests/data/test245
index 569b4107d..78893f028 100644
--- a/tests/data/test245
+++ b/tests/data/test245
@@ -53,10 +53,10 @@ http
!SSPI
crypto
</features>
- <name>
+<name>
HTTP POST --digest
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u auser:apasswd --digest -d "junkelijunk"
</command>
</client>
diff --git a/tests/data/test246 b/tests/data/test246
index 383d07d9a..a756028b9 100644
--- a/tests/data/test246
+++ b/tests/data/test246
@@ -63,10 +63,10 @@ http
!SSPI
crypto
</features>
- <name>
+<name>
HTTP POST --digest with server doing a 100 before 401 response
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u auser:apasswd --digest -d "junkelijunk"
</command>
</client>
diff --git a/tests/data/test247 b/tests/data/test247
index 7e79d3911..40f42e7d0 100644
--- a/tests/data/test247
+++ b/tests/data/test247
@@ -16,10 +16,10 @@ FTP
<server>
ftp
</server>
- <name>
+<name>
FTP upload time condition evaluates TRUE => skip upload
- </name>
-<file name="log/test%TESTNUMBER.txt">
+</name>
+<file name="%LOGDIR/test%TESTNUMBER.txt">
data
to
see
@@ -27,8 +27,8 @@ that FTP
works
so does it?
</file>
- <command>
-ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T log/test%TESTNUMBER.txt -z "apr 1 2005 08:00:00"
+<command>
+ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T %LOGDIR/test%TESTNUMBER.txt -z "apr 1 2005 08:00:00"
</command>
</client>
diff --git a/tests/data/test248 b/tests/data/test248
index 8881c99d5..097e1e583 100644
--- a/tests/data/test248
+++ b/tests/data/test248
@@ -16,10 +16,10 @@ FTP
<server>
ftp
</server>
- <name>
+<name>
FTP upload time condition evaluates FALSE => upload anyway
- </name>
-<file name="log/test%TESTNUMBER.txt">
+</name>
+<file name="%LOGDIR/test%TESTNUMBER.txt">
data
to
see
@@ -27,8 +27,8 @@ that FTP
works
so does it?
</file>
- <command>
-ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T log/test%TESTNUMBER.txt -z "apr 1 2005 08:00:00"
+<command>
+ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T %LOGDIR/test%TESTNUMBER.txt -z "apr 1 2005 08:00:00"
</command>
</client>
diff --git a/tests/data/test249 b/tests/data/test249
index 6a2dd2c87..82b0a1406 100644
--- a/tests/data/test249
+++ b/tests/data/test249
@@ -29,10 +29,10 @@ Content-Type: text/html
<server>
http
</server>
- <name>
+<name>
HTTP 304 response with "illegal" Content-Length: header
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -z "dec 12 12:00:00 1999 GMT"
</command>
</client>
diff --git a/tests/data/test25 b/tests/data/test25
index 61080ca39..b00ef84ec 100644
--- a/tests/data/test25
+++ b/tests/data/test25
@@ -63,10 +63,10 @@ Connection: close
<server>
http
</server>
- <name>
+<name>
looping HTTP Location: following with --max-redirs
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -L --max-redirs 5
</command>
</client>
diff --git a/tests/data/test250 b/tests/data/test250
index 3d0a8f3a0..3c16fcd7b 100644
--- a/tests/data/test250
+++ b/tests/data/test250
@@ -2,6 +2,7 @@
<info>
<keywords>
FTP
+SLOWDOWN
</keywords>
</info>
@@ -34,10 +35,10 @@ SLOWDOWN
<server>
ftp
</server>
- <name>
+<name>
FTP dir list PASV with slow response
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/
</command>
</client>
diff --git a/tests/data/test2500 b/tests/data/test2500
new file mode 100644
index 000000000..6ec739d1a
--- /dev/null
+++ b/tests/data/test2500
@@ -0,0 +1,78 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP/3
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes" crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+http/3
+nghttpx-h3
+</features>
+<server>
+http
+http/3
+</server>
+<name>
+HTTP/3 GET:
+</name>
+<command>
+--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt --http3 --resolve localhost:%HTTP3PORT:%HOSTIP https://localhost:%HTTP3PORT/%TESTNUMBER
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^X-Forwarded-Proto:.*
+^Via:.*
+</strip>
+<protocol crlf="yes">
+GET https://localhost:%HTTP3PORT/%TESTNUMBER HTTP/1.1
+Host: localhost:%HTTP3PORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+<stdout crlf="yes">
+HTTP/3 200
+date: Tue, 09 Nov 2010 14:49:00 GMT
+last-modified: Tue, 13 Jun 2000 12:10:00 GMT
+etag: "21025-dc7-39462498"
+accept-ranges: bytes
+content-length: 6
+content-type: text/html
+funny-head: yesyes
+via: 1.1 nghttpx
+
+-foo-
+</stdout>
+<stripfile>
+s/^server: nghttpx.*\r?\n//
+</stripfile>
+</verify>
+</testcase>
diff --git a/tests/data/test2501 b/tests/data/test2501
new file mode 100644
index 000000000..4db52ecf6
--- /dev/null
+++ b/tests/data/test2501
@@ -0,0 +1,70 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+HTTP/3
+HTTPS
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 201 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Connection: close
+Content-Length: 0
+Funny-head: yesyes
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+debug
+http
+http/3
+</features>
+<server>
+http
+http/3
+</server>
+<name>
+HTTP/3 POST
+</name>
+<setenv>
+</setenv>
+<command>
+-k --http3 "https://%HOSTIP:%HTTP3PORT/%TESTNUMBER" -d "moo"
+</command>
+
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<stdout>
+HTTP/3 201
+date: Tue, 09 Nov 2010 14:49:00 GMT
+content-length: 0
+funny-head: yesyes
+via: 1.1 nghttpx
+
+</stdout>
+<protocol nonewline="yes">
+POST https://%HOSTIP:%HTTP3PORT/2501 HTTP/1.1
+Host: %HOSTIP:%HTTP3PORT
+User-Agent: curl/%VERSION
+Accept: */*
+Content-Length: 3
+Content-Type: application/x-www-form-urlencoded
+Via: 3 nghttpx
+
+moo
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test2502 b/tests/data/test2502
new file mode 100644
index 000000000..aae65e1cc
--- /dev/null
+++ b/tests/data/test2502
@@ -0,0 +1,104 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP/3
+multi
+verbose logs
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data1 crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: server.example.com
+Content-Length: 47
+
+file contents should appear once for each file
+</data1>
+<data2>
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: server.example.com
+Content-Length: 47
+
+file contents should appear once for each file
+</data2>
+<data3>
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: server.example.com
+Content-Length: 47
+
+file contents should appear once for each file
+</data3>
+<data4>
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: server.example.com
+Content-Length: 47
+
+file contents should appear once for each file
+</data4>
+</reply>
+
+# Client-side
+<client>
+<features>
+http/3
+</features>
+<server>
+http
+http/3
+</server>
+<tool>
+lib%TESTNUMBER
+</tool>
+<name>
+HTTP GET multiple over HTTP/3
+</name>
+<command>
+https://%HOSTIP:%HTTP3PORT/path/%TESTNUMBER %HOSTIP %HTTP3PORT
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET https://localhost:%HTTP3PORT/path/%TESTNUMBER0001 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Via: 3 nghttpx
+
+GET https://localhost:%HTTP3PORT/path/%TESTNUMBER0002 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Via: 3 nghttpx
+
+GET https://localhost:%HTTP3PORT/path/%TESTNUMBER0003 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Via: 3 nghttpx
+
+GET https://localhost:%HTTP3PORT/path/%TESTNUMBER0004 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Via: 3 nghttpx
+
+</protocol>
+<strip>
+^Host:.*
+</strip>
+<file name="%LOGDIR/stderr%TESTNUMBER" mode="text">
+* Connection #0 to host localhost left intact
+* Connection #0 to host localhost left intact
+* Connection #0 to host localhost left intact
+* Connection #0 to host localhost left intact
+</file>
+<stripfile>
+$_ = '' if (($_ !~ /left intact/) && ($_ !~ /Closing connection/))
+</stripfile>
+</verify>
+</testcase>
diff --git a/tests/data/test2503 b/tests/data/test2503
new file mode 100644
index 000000000..9877ee4c1
--- /dev/null
+++ b/tests/data/test2503
@@ -0,0 +1,70 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP/3
+HTTPS
+-w
+%header
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes" crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+http/3
+nghttpx-h3
+headers-api
+</features>
+<server>
+http
+http/3
+</server>
+<name>
+HTTP/3 header-api
+</name>
+<setenv>
+</setenv>
+<command>
+-w '%{header_json}\n' --http3-only --cacert %SRCDIR/certs/EdelCurlRoot-ca.crt --resolve localhost:%HTTP3PORT:%HOSTIP https://localhost:%HTTP3PORT/%TESTNUMBER
+</command>
+
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<stdout crlf="yes">
+HTTP/3 200
+date: Tue, 09 Nov 2010 14:49:00 GMT
+content-length: 6
+content-type: text/html
+funny-head: yesyes
+via: 1.1 nghttpx
+
+-foo-
+{"date":["Tue, 09 Nov 2010 14:49:00 GMT"],
+"content-length":["6"],
+"content-type":["text/html"],
+"funny-head":["yesyes"],
+"via":["1.1 nghttpx"]
+}
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test251 b/tests/data/test251
index cc8cbfa0a..46124bfec 100644
--- a/tests/data/test251
+++ b/tests/data/test251
@@ -2,6 +2,7 @@
<info>
<keywords>
FTP
+SLOWDOWN
</keywords>
</info>
@@ -32,10 +33,10 @@ SLOWDOWN
<server>
ftp
</server>
- <name>
+<name>
FTP dir list, PORT with specified IP and slow response
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/ -P %CLIENTIP
</command>
</client>
diff --git a/tests/data/test252 b/tests/data/test252
index 559ece0c9..220cda189 100644
--- a/tests/data/test252
+++ b/tests/data/test252
@@ -36,10 +36,10 @@ ipv6
<server>
ftp-ipv6
</server>
- <name>
+<name>
FTP IPv6 dir list PASV
- </name>
- <command>
+</name>
+<command>
-g "ftp://%HOST6IP:%FTP6PORT/"
</command>
</client>
diff --git a/tests/data/test253 b/tests/data/test253
index 8974a8b07..2c1008d7e 100644
--- a/tests/data/test253
+++ b/tests/data/test253
@@ -36,10 +36,10 @@ ipv6
<server>
ftp-ipv6
</server>
- <name>
+<name>
FTP IPv6 dir list with EPRT
- </name>
- <command>
+</name>
+<command>
-g "ftp://%HOST6IP:%FTP6PORT/" -P -
</command>
</client>
diff --git a/tests/data/test254 b/tests/data/test254
index a9ea0ccee..30978758f 100644
--- a/tests/data/test254
+++ b/tests/data/test254
@@ -37,10 +37,10 @@ ipv6
<server>
ftp-ipv6
</server>
- <name>
+<name>
FTP IPv6 dir list PASV and --disable-epsv
- </name>
- <command>
+</name>
+<command>
-g "ftp://%HOST6IP:%FTP6PORT/" --disable-epsv
</command>
</client>
diff --git a/tests/data/test255 b/tests/data/test255
index 79d43af7c..37b9da2ac 100644
--- a/tests/data/test255
+++ b/tests/data/test255
@@ -37,10 +37,10 @@ ipv6
<server>
ftp-ipv6
</server>
- <name>
+<name>
FTP IPv6 dir list with EPRT and --disable-eprt
- </name>
- <command>
+</name>
+<command>
-g "ftp://%HOST6IP:%FTP6PORT/" -P - --disable-eprt
</command>
</client>
diff --git a/tests/data/test256 b/tests/data/test256
index 6816bb768..f370d73ab 100644
--- a/tests/data/test256
+++ b/tests/data/test256
@@ -25,13 +25,13 @@ todelooooo lalalala yada yada, we know nothing about ranges ;-)
<server>
http
</server>
- <name>
+<name>
HTTP resume request over proxy with auth without server supporting it
- </name>
+</name>
<command option="no-output">
--x http://%HOSTIP:%HTTPPORT http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -C - --no-include -o log/fewl%TESTNUMBER.txt -U daniel:stenberg
+-x http://%HOSTIP:%HTTPPORT http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -C - --no-include -o %LOGDIR/fewl%TESTNUMBER.txt -U daniel:stenberg
</command>
-<file name="log/fewl%TESTNUMBER.txt">
+<file name="%LOGDIR/fewl%TESTNUMBER.txt">
This text is here to simulate a partly downloaded file to resume
download on.
</file>
@@ -57,7 +57,7 @@ Proxy-Connection: Keep-Alive
</protocol>
# the download target file must remain untouched
-<file name="log/fewl%TESTNUMBER.txt">
+<file name="%LOGDIR/fewl%TESTNUMBER.txt">
This text is here to simulate a partly downloaded file to resume
download on.
</file>
diff --git a/tests/data/test257 b/tests/data/test257
index 701abb777..5eabf363a 100644
--- a/tests/data/test257
+++ b/tests/data/test257
@@ -67,17 +67,17 @@ If this is received, the location following worked
<server>
http
</server>
- <name>
+<name>
HTTP Location: following with --netrc-optional
- </name>
- <command>
-http://supersite.com/want/%TESTNUMBER -L -x http://%HOSTIP:%HTTPPORT --netrc-optional --netrc-file log/netrc%TESTNUMBER
+</name>
+<command>
+http://supersite.com/want/%TESTNUMBER -L -x http://%HOSTIP:%HTTPPORT --netrc-optional --netrc-file %LOGDIR/netrc%TESTNUMBER
</command>
<features>
proxy
</features>
# netrc auth for two out of three sites:
-<file name="log/netrc%TESTNUMBER">
+<file name="%LOGDIR/netrc%TESTNUMBER">
machine supersite.com login user1 password passwd1
machine anotherone.com login user2 password passwd2
</file>
diff --git a/tests/data/test258 b/tests/data/test258
index 748980007..69f2613f5 100644
--- a/tests/data/test258
+++ b/tests/data/test258
@@ -61,14 +61,14 @@ Mime
crypto
proxy
</features>
- <name>
+<name>
HTTP POST multipart without Expect: header using proxy anyauth (Digest)
- </name>
- <command>
--x http://%HOSTIP:%HTTPPORT http://remotehost:54321/we/want/%TESTNUMBER -F name=daniel -F tool=curl -F file=@log/test%TESTNUMBER.txt -H "Expect:" -U uuuser:pppassword --proxy-anyauth
+</name>
+<command>
+-x http://%HOSTIP:%HTTPPORT http://remotehost:54321/we/want/%TESTNUMBER -F name=daniel -F tool=curl -F file=@%LOGDIR/test%TESTNUMBER.txt -H "Expect:" -U uuuser:pppassword --proxy-anyauth
</command>
# We create this file before the command is invoked!
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
foo-
This is a moo-
bar
@@ -86,7 +86,7 @@ Host: remotehost:54321
User-Agent: curl/%VERSION
Accept: */*
Proxy-Connection: Keep-Alive
-Content-Length: 409
+Content-Length: 433
Content-Type: multipart/form-data; boundary=----------------------------7c633d5c27ce
------------------------------7c633d5c27ce
@@ -112,7 +112,7 @@ Proxy-Authorization: Digest username="uuuser", realm="many secrets", nonce="911"
User-Agent: curl/%VERSION
Accept: */*
Proxy-Connection: Keep-Alive
-Content-Length: 409
+Content-Length: 433
Content-Type: multipart/form-data; boundary=----------------------------7c633d5c27ce
------------------------------7c633d5c27ce
diff --git a/tests/data/test259 b/tests/data/test259
index 9f64cca12..b3796cef3 100644
--- a/tests/data/test259
+++ b/tests/data/test259
@@ -57,14 +57,14 @@ Mime
crypto
proxy
</features>
- <name>
+<name>
HTTP POST multipart with Expect: header using proxy anyauth (Digest)
- </name>
- <command>
--x http://%HOSTIP:%HTTPPORT http://remotehost:54321/we/want/%TESTNUMBER -F name=daniel -F tool=curl -F file=@log/test%TESTNUMBER.txt -U uuuser:pppassword --proxy-anyauth -H "Expect: 100-continue"
+</name>
+<command>
+-x http://%HOSTIP:%HTTPPORT http://remotehost:54321/we/want/%TESTNUMBER -F name=daniel -F tool=curl -F file=@%LOGDIR/test%TESTNUMBER.txt -U uuuser:pppassword --proxy-anyauth -H "Expect: 100-continue"
</command>
# We create this file before the command is invoked!
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
foo-
This is a moo-
bar
@@ -83,7 +83,7 @@ User-Agent: curl/%VERSION
Accept: */*
Proxy-Connection: Keep-Alive
Expect: 100-continue
-Content-Length: 409
+Content-Length: 433
Content-Type: multipart/form-data; boundary=----------------------------7c633d5c27ce
------------------------------7c633d5c27ce
@@ -110,7 +110,7 @@ User-Agent: curl/%VERSION
Accept: */*
Proxy-Connection: Keep-Alive
Expect: 100-continue
-Content-Length: 409
+Content-Length: 433
Content-Type: multipart/form-data; boundary=----------------------------7c633d5c27ce
------------------------------7c633d5c27ce
diff --git a/tests/data/test26 b/tests/data/test26
index cd8ba426c..9e334bc5b 100644
--- a/tests/data/test26
+++ b/tests/data/test26
@@ -21,10 +21,10 @@ Connection: close
<server>
http
</server>
- <name>
+<name>
specify more -o than URLs
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -o - -o -
</command>
</client>
diff --git a/tests/data/test260 b/tests/data/test260
index b706e60b5..7793b7646 100644
--- a/tests/data/test260
+++ b/tests/data/test260
@@ -31,10 +31,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP GET URL without slash but with questionmark
- </name>
- <command>
+</name>
+<command>
"http://%HOSTIP:%HTTPPORT?%TESTNUMBER"
</command>
</client>
diff --git a/tests/data/test2600 b/tests/data/test2600
new file mode 100644
index 000000000..5b88aedb7
--- /dev/null
+++ b/tests/data/test2600
@@ -0,0 +1,25 @@
+<testcase>
+<info>
+<keywords>
+unittest
+cfilter
+timing-dependent
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+unittest
+debug
+http
+</features>
+<name>
+connection filter connect/destroy unit tests
+</name>
+</client>
+</testcase>
diff --git a/tests/data/test2601 b/tests/data/test2601
new file mode 100644
index 000000000..778f6c54a
--- /dev/null
+++ b/tests/data/test2601
@@ -0,0 +1,22 @@
+<testcase>
+<info>
+<keywords>
+unittest
+bufq
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+unittest
+</features>
+<name>
+bufq unit tests
+</name>
+</client>
+</testcase>
diff --git a/tests/data/test2602 b/tests/data/test2602
new file mode 100644
index 000000000..798cd02c0
--- /dev/null
+++ b/tests/data/test2602
@@ -0,0 +1,22 @@
+<testcase>
+<info>
+<keywords>
+unittest
+dynhds
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+unittest
+</features>
+<name>
+dynhds unit tests
+</name>
+</client>
+</testcase>
diff --git a/tests/data/test2603 b/tests/data/test2603
new file mode 100644
index 000000000..c8845bb2e
--- /dev/null
+++ b/tests/data/test2603
@@ -0,0 +1,22 @@
+<testcase>
+<info>
+<keywords>
+unittest
+http1
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+unittest
+</features>
+<name>
+http1 parser unit tests
+</name>
+</client>
+</testcase>
diff --git a/tests/data/test261 b/tests/data/test261
index 8a68ba9cd..d5f940372 100644
--- a/tests/data/test261
+++ b/tests/data/test261
@@ -23,10 +23,10 @@ REPLY TYPE 226 Kind of on the positive side!
<server>
ftp
</server>
- <name>
+<name>
FTP RETR with 226 response code to TYPE
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test262 b/tests/data/test262
index d119d6672..ef9c731f5 100644
--- a/tests/data/test262
+++ b/tests/data/test262
Binary files differ
diff --git a/tests/data/test263 b/tests/data/test263
index 7a2bff9ec..93e98a197 100644
--- a/tests/data/test263
+++ b/tests/data/test263
@@ -30,10 +30,10 @@ proxy
<server>
http-ipv6
</server>
- <name>
+<name>
HTTP-IPv6 GET with proxy specified using IPv6-numerical address
- </name>
- <command>
+</name>
+<command>
-g -x "http://%HOST6IP:%HTTP6PORT" http://veryveryremotesite.com/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test264 b/tests/data/test264
index c4c365299..a4ce25152 100644
--- a/tests/data/test264
+++ b/tests/data/test264
@@ -24,10 +24,10 @@ the content would go here
<server>
http
</server>
- <name>
+<name>
HTTP with proxy string including http:// and user+password
- </name>
- <command>
+</name>
+<command>
http://we.want.that.site.com/%TESTNUMBER -x http://f%61ke:user@%HOSTIP:%HTTPPORT
</command>
<features>
diff --git a/tests/data/test265 b/tests/data/test265
index c6db8964e..fd0a09717 100644
--- a/tests/data/test265
+++ b/tests/data/test265
@@ -17,6 +17,7 @@ NTLM
<connect1001>
HTTP/1.0 407 Authorization Required to proxy me my dear
Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAACGggEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Connection: Keep-Alive
Content-Length: 1033
And you should ignore this data.
@@ -55,6 +56,7 @@ Nice proxy auth sir!
<datacheck>
HTTP/1.0 407 Authorization Required to proxy me my dear
Proxy-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAACGggEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==
+Connection: Keep-Alive
Content-Length: 1033
HTTP/1.1 200 Things are fine in proxy land
diff --git a/tests/data/test266 b/tests/data/test266
index 4f5f359d8..8604c609b 100644
--- a/tests/data/test266
+++ b/tests/data/test266
@@ -4,6 +4,7 @@
HTTP
HTTP GET
chunked Transfer-Encoding
+DELAY
</keywords>
</info>
#
@@ -48,11 +49,11 @@ writedelay: 10
<server>
http
</server>
- <name>
+<name>
HTTP GET with chunked Transfer-Encoding and chunked trailer
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -D log/heads%TESTNUMBER
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -D %LOGDIR/heads%TESTNUMBER
</command>
</client>
@@ -66,7 +67,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/heads%TESTNUMBER">
+<file name="%LOGDIR/heads%TESTNUMBER">
HTTP/1.1 200 funky chunky!
Server: fakeit/0.9 fakeitbad/1.0
Transfer-Encoding: chunked
diff --git a/tests/data/test268 b/tests/data/test268
index 851af4133..3a1ab6a9b 100644
--- a/tests/data/test268
+++ b/tests/data/test268
@@ -2,27 +2,27 @@
<info>
<keywords>
HTTP
-HTTP POST
+variables
</keywords>
</info>
+
#
# Server-side
<reply>
-<data>
-HTTP/1.0 200 OK
-Server: test-server/fake
-Content-Type: text/html
-Content-Length: 0
-
-this is data even though Content-Length is set to zero
+<data crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
</data>
-<datacheck>
-HTTP/1.0 200 OK
-Server: test-server/fake
-Content-Type: text/html
-Content-Length: 0
-
-</datacheck>
</reply>
#
@@ -31,25 +31,29 @@ Content-Length: 0
<server>
http
</server>
- <name>
-HTTP POST a non-existing file
- </name>
- <command>
- -d @nonesuchfile http://%HOSTIP:%HTTPPORT/%TESTNUMBER
+<name>
+JSON encoding of unicode string
+</name>
+<file name="%LOGDIR/junk" nonewline="yes">
+%hex[%e2%80%9c]hex%
+</file>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --variable hello@%LOGDIR/junk --expand-data {{hello:json}}
</command>
</client>
#
# Verify data after the test has been "shot"
<verify>
-<protocol>
-POST /%TESTNUMBER HTTP/1.1
-Host: %HOSTIP:%HTTPPORT
-User-Agent: curl/%VERSION
-Accept: */*
-Content-Length: 0
-Content-Type: application/x-www-form-urlencoded
-
+<protocol crlf="yes" nonewline="yes">
+POST /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+Content-Length: 3
+Content-Type: application/x-www-form-urlencoded
+
+%hex[%e2%80%9c]hex%
</protocol>
</verify>
</testcase>
diff --git a/tests/data/test269 b/tests/data/test269
index 36014c808..724fa4dc9 100644
--- a/tests/data/test269
+++ b/tests/data/test269
@@ -32,10 +32,10 @@ muahahaha
<server>
http
</server>
- <name>
+<name>
HTTP --ignore-content-length
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --ignore-content-length
</command>
</client>
diff --git a/tests/data/test27 b/tests/data/test27
index 414741363..75c73acc2 100644
--- a/tests/data/test27
+++ b/tests/data/test27
@@ -23,12 +23,15 @@ Content-Length: 8
<server>
http
</server>
- <name>
+<name>
Get same cookie page several times
- </name>
- <command>
+</name>
+<command>
"http://%HOSTIP:%HTTPPORT/want/{%TESTNUMBER,%TESTNUMBER,%TESTNUMBER}" -b none
</command>
+<features>
+cookies
+</features>
</client>
# Verify data after the test has been "shot"
diff --git a/tests/data/test270 b/tests/data/test270
index 983e0d2b7..efa183f15 100644
--- a/tests/data/test270
+++ b/tests/data/test270
@@ -26,10 +26,10 @@ PASVBADIP
<server>
ftp
</server>
- <name>
+<name>
FTP RETR PASV --ftp-skip-pasv-ip
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER --ftp-skip-pasv-ip --disable-epsv
</command>
</client>
diff --git a/tests/data/test271 b/tests/data/test271
index f6d5ad7b5..2903ccf23 100644
--- a/tests/data/test271
+++ b/tests/data/test271
@@ -23,10 +23,10 @@ returned
<server>
tftp
</server>
- <name>
+<name>
TFTP retrieve
- </name>
- <command>
+</name>
+<command>
tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER
</command>
</client>
@@ -34,12 +34,14 @@ tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER
#
# Verify pseudo protocol after the test has been "shot"
<verify>
+<strip>
+^timeout = [5-6]$
+</strip>
<protocol>
opcode = 1
mode = octet
tsize = 0
blksize = 512
-timeout = 6
filename = /%TESTNUMBER
</protocol>
</verify>
diff --git a/tests/data/test272 b/tests/data/test272
index c959ff3ae..2857c3eac 100644
--- a/tests/data/test272
+++ b/tests/data/test272
@@ -18,10 +18,10 @@ RETR
<server>
ftp
</server>
- <name>
-FTP timed conditioned get file with identical time stamp
- </name>
- <command>
+<name>
+FTP timed conditioned get file with identical time stamp
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -z "2004 jan 1 12:12:12 UTC"
</command>
diff --git a/tests/data/test273 b/tests/data/test273
index b2b023a60..4dc23e0dd 100644
--- a/tests/data/test273
+++ b/tests/data/test273
@@ -55,10 +55,10 @@ http
!SSPI
crypto
</features>
- <name>
+<name>
HTTP with two Digest authorization headers
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u testuser:testpass --digest
</command>
</client>
diff --git a/tests/data/test274 b/tests/data/test274
index b0f74b494..bb7200614 100644
--- a/tests/data/test274
+++ b/tests/data/test274
@@ -24,10 +24,10 @@ Connection: close
<server>
http
</server>
- <name>
+<name>
HTTP Location: following with --max-redirs 0
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -L --max-redirs 0
</command>
</client>
diff --git a/tests/data/test275 b/tests/data/test275
index c6b6b566e..d0abcac18 100644
--- a/tests/data/test275
+++ b/tests/data/test275
@@ -50,10 +50,10 @@ contents
http
http-proxy
</server>
- <name>
+<name>
HTTP CONNECT with proxytunnel getting two URLs from the same host
- </name>
- <command>
+</name>
+<command>
http://remotesite.com.%TESTNUMBER:%HTTPPORT/we/want/that/page/%TESTNUMBER -p -x %HOSTIP:%PROXYPORT --user iam:myself --proxy-user youare:yourself http://remotesite.com.%TESTNUMBER:%HTTPPORT/we/want/that/page/%TESTNUMBER
</command>
<features>
diff --git a/tests/data/test276 b/tests/data/test276
index 07a1aaed1..6814f9ed7 100644
--- a/tests/data/test276
+++ b/tests/data/test276
@@ -49,10 +49,10 @@ If this is received, the location following worked
<server>
http
</server>
- <name>
+<name>
HTTP Location: following with multiple question marks in URLs
- </name>
- <command>
+</name>
+<command>
"http://%HOSTIP:%HTTPPORT/want?uri=http://anything/%TESTNUMBER?secondq/%TESTNUMBER" -L
</command>
</client>
diff --git a/tests/data/test277 b/tests/data/test277
index 62d264fa3..69a17fea5 100644
--- a/tests/data/test277
+++ b/tests/data/test277
@@ -26,10 +26,10 @@ Mime
<server>
http
</server>
- <name>
+<name>
HTTP RFC1867-type formposting with custom Content-Type
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -F name=daniel -H "Content-Type: text/info"
</command>
</client>
@@ -37,15 +37,15 @@ http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -F name=daniel -H "Content-Type: text/
# Verify data after the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/--------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=------------------------/
+s/^--------------------------[A-Za-z0-9]*/--------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=------------------------/
</strippart>
<protocol>
POST /want/%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 146
+Content-Length: 158
Content-Type: text/info; boundary=------------------------
--------------------------
diff --git a/tests/data/test278 b/tests/data/test278
index 7cbd4704b..e2daab39f 100644
--- a/tests/data/test278
+++ b/tests/data/test278
@@ -24,10 +24,10 @@ the content would go here
<server>
http
</server>
- <name>
+<name>
HTTP with proxy string including http:// and user+empty password
- </name>
- <command>
+</name>
+<command>
http://we.want.that.site.com/%TESTNUMBER -x http://f%61ke:@%HOSTIP:%HTTPPORT
</command>
<features>
diff --git a/tests/data/test279 b/tests/data/test279
index cc919224d..740e351de 100644
--- a/tests/data/test279
+++ b/tests/data/test279
@@ -25,10 +25,10 @@ the content would go here
<server>
http
</server>
- <name>
+<name>
HTTP with proxy string including http:// and user only
- </name>
- <command>
+</name>
+<command>
http://we.want.that.site.com/%TESTNUMBER -x http://f%61ke@%HOSTIP:%HTTPPORT
</command>
<features>
diff --git a/tests/data/test28 b/tests/data/test28
index 1966cc863..24815a2c2 100644
--- a/tests/data/test28
+++ b/tests/data/test28
@@ -52,10 +52,10 @@ If this is received, the location following worked
<server>
http
</server>
- <name>
+<name>
HTTP Location: following with extra spaces in header
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -L
</command>
</client>
diff --git a/tests/data/test280 b/tests/data/test280
index 71c147ce4..1ed41e652 100644
--- a/tests/data/test280
+++ b/tests/data/test280
@@ -37,10 +37,10 @@ COUNT USER 1
<server>
ftp
</server>
- <name>
+<name>
FTP --ftp-alternative-to-user on USER failure
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER/ --ftp-alternative-to-user "USER replacement"
</command>
</client>
diff --git a/tests/data/test281 b/tests/data/test281
index 4210f7b8f..23af513a0 100644
--- a/tests/data/test281
+++ b/tests/data/test281
@@ -24,13 +24,13 @@ Server: test-server/fake
<server>
http
</server>
- <name>
+<name>
HTTP PUT from file with 100 + 401 responses and -f without auth given
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -f -T log/test%TESTNUMBER.txt
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -f -T %LOGDIR/test%TESTNUMBER.txt
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
Weird
file
to
@@ -49,7 +49,6 @@ Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 38
-Expect: 100-continue
Weird
file
diff --git a/tests/data/test282 b/tests/data/test282
index 4fb9e598e..68d3b428c 100644
--- a/tests/data/test282
+++ b/tests/data/test282
@@ -21,10 +21,10 @@ HTTP/1.1 200 OK swsclose
<server>
http
</server>
- <name>
+<name>
HTTP GET with no response body or headers
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test283 b/tests/data/test283
index 2c1ebd249..bf8cc3a91 100644
--- a/tests/data/test283
+++ b/tests/data/test283
@@ -13,10 +13,10 @@ FAILURE
<server>
tftp
</server>
- <name>
+<name>
TFTP retrieve on invalid file
- </name>
- <command>
+</name>
+<command>
tftp://%HOSTIP:%TFTPPORT//invalid-file --tftp-blksize 1024
</command>
</client>
@@ -27,12 +27,14 @@ tftp://%HOSTIP:%TFTPPORT//invalid-file --tftp-blksize 1024
<errorcode>
69
</errorcode>
+<strip>
+^timeout = [5-6]$
+</strip>
<protocol>
opcode = 1
mode = octet
tsize = 0
blksize = 1024
-timeout = 6
filename = /invalid-file
</protocol>
</verify>
diff --git a/tests/data/test284 b/tests/data/test284
index 2f4ea4317..9681e5695 100644
--- a/tests/data/test284
+++ b/tests/data/test284
@@ -47,10 +47,10 @@ condition in the TFTP receive code.
<server>
tftp
</server>
- <name>
+<name>
TFTP retrieve of boundary case 512 byte file
- </name>
- <command>
+</name>
+<command>
tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER
</command>
</client>
@@ -58,12 +58,14 @@ tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER
#
# Verify pseudo protocol after the test has been "shot"
<verify>
+<strip>
+^timeout = [5-6]$
+</strip>
<protocol>
opcode = 1
mode = octet
tsize = 0
blksize = 512
-timeout = 6
filename = /%TESTNUMBER
</protocol>
</verify>
diff --git a/tests/data/test285 b/tests/data/test285
index ab055e416..7968e1a34 100644
--- a/tests/data/test285
+++ b/tests/data/test285
@@ -12,13 +12,13 @@ TFTP WRQ
<server>
tftp
</server>
- <name>
+<name>
TFTP send
- </name>
- <command>
--T log/test%TESTNUMBER.txt tftp://%HOSTIP:%TFTPPORT//
+</name>
+<command>
+-T %LOGDIR/test%TESTNUMBER.txt tftp://%HOSTIP:%TFTPPORT// --connect-time 549
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
a chunk of
data
sent
@@ -40,7 +40,7 @@ opcode = 2
mode = octet
tsize = 32
blksize = 512
-timeout = 6
+timeout = 10
filename = /test%TESTNUMBER.txt
</protocol>
</verify>
diff --git a/tests/data/test286 b/tests/data/test286
index febd5e3fb..e5f09bfd5 100644
--- a/tests/data/test286
+++ b/tests/data/test286
@@ -12,13 +12,13 @@ TFTP WRQ
<server>
tftp
</server>
- <name>
+<name>
TFTP send of boundary case 512 byte file
- </name>
- <command>
--T log/test%TESTNUMBER.txt tftp://%HOSTIP:%TFTPPORT//
+</name>
+<command>
+-T %LOGDIR/test%TESTNUMBER.txt tftp://%HOSTIP:%TFTPPORT//
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
A chunk of data which exactly fits into
a 512 byte TFTP block, testing a boundary
condition in the TFTP transmit code.
@@ -83,12 +83,14 @@ condition in the TFTP transmit code.
123456789ABCDEF
123456789ABCDEF
</upload>
+<strip>
+^timeout = [5-6]$
+</strip>
<protocol>
opcode = 2
mode = octet
tsize = 512
blksize = 512
-timeout = 6
filename = /test%TESTNUMBER.txt
</protocol>
</verify>
diff --git a/tests/data/test287 b/tests/data/test287
index 71ab8d527..85d557ec9 100644
--- a/tests/data/test287
+++ b/tests/data/test287
@@ -24,10 +24,10 @@ And you should ignore this data.
<server>
http
</server>
- <name>
+<name>
HTTP proxy CONNECT with custom User-Agent header
- </name>
- <command>
+</name>
+<command>
http://test.remote.example.com.%TESTNUMBER:%HTTPPORT/path/%TESTNUMBER -H "User-Agent: looser/2015" --proxy http://%HOSTIP:%HTTPPORT --proxytunnel --proxy-header "User-Agent: looser/2007"
</command>
<features>
diff --git a/tests/data/test288 b/tests/data/test288
index 6ee19d41d..a341df61f 100644
--- a/tests/data/test288
+++ b/tests/data/test288
@@ -24,16 +24,16 @@ none
<features>
file
</features>
- <name>
+<name>
file:// with (unsupported) proxy, authentication and range
- </name>
+</name>
<setenv>
all_proxy=http://fake:user@%HOSTIP:%NOLISTENPORT/
</setenv>
<command option="no-include">
-file://localhost%FILE_PWD/log/test%TESTNUMBER.txt
+file://localhost%FILE_PWD/%LOGDIR/test%TESTNUMBER.txt
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
foo
bar
bar
diff --git a/tests/data/test289 b/tests/data/test289
index 481eacf81..dff384bfe 100644
--- a/tests/data/test289
+++ b/tests/data/test289
@@ -13,11 +13,11 @@ FAILURE
<server>
ftp
</server>
- <name>
+<name>
FTP resume upload but denied access to local file
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T log/illegal-nonexistent-file -C -
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T %LOGDIR/illegal-nonexistent-file -C -
</command>
</client>
diff --git a/tests/data/test29 b/tests/data/test29
index bb9916e83..64d5e6c6b 100644
--- a/tests/data/test29
+++ b/tests/data/test29
@@ -26,10 +26,10 @@ wait 10
<server>
http
</server>
- <name>
+<name>
HTTP with 2 secs timeout
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -m 2
</command>
</client>
diff --git a/tests/data/test290 b/tests/data/test290
index 9e5931152..e7048a538 100644
--- a/tests/data/test290
+++ b/tests/data/test290
@@ -17,10 +17,10 @@ FTP
<server>
ftp
</server>
- <name>
+<name>
FTP download maximum filesize exceeded
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER --max-filesize 30
</command>
</client>
diff --git a/tests/data/test291 b/tests/data/test291
index 45f041e2e..05cc2b444 100644
--- a/tests/data/test291
+++ b/tests/data/test291
@@ -23,10 +23,10 @@ works
<server>
ftp
</server>
- <name>
+<name>
FTP download maximum filesize not exceeded
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER --max-filesize 100
</command>
</client>
diff --git a/tests/data/test292 b/tests/data/test292
index 91e2d6670..0ae74a9bc 100644
--- a/tests/data/test292
+++ b/tests/data/test292
@@ -32,10 +32,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP GET with maximum filesize not exceeded
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --max-filesize 1000
</command>
</client>
diff --git a/tests/data/test293 b/tests/data/test293
index aaeefc457..04f989991 100644
--- a/tests/data/test293
+++ b/tests/data/test293
@@ -33,10 +33,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP GET with maximum filesize exceeded
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --max-filesize 2
</command>
</client>
diff --git a/tests/data/test294 b/tests/data/test294
index 4dc90e368..b840b8c70 100644
--- a/tests/data/test294
+++ b/tests/data/test294
@@ -38,10 +38,10 @@ REPLY ACCT 230 Thank-you for the ACCT
<server>
ftp
</server>
- <name>
+<name>
FTP --ftp-account on ACCT request
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER/ --ftp-account "data for acct"
</command>
</client>
diff --git a/tests/data/test295 b/tests/data/test295
index 206c1ab74..ebb1a3697 100644
--- a/tests/data/test295
+++ b/tests/data/test295
@@ -23,10 +23,10 @@ REPLY PWD 530 No ACCT, go away
<server>
ftp
</server>
- <name>
+<name>
FTP ACCT request without --ftp-account
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER/
</command>
</client>
diff --git a/tests/data/test296 b/tests/data/test296
index 3c36a1608..c88ec99bf 100644
--- a/tests/data/test296
+++ b/tests/data/test296
@@ -21,10 +21,10 @@ bla bla bla
<server>
ftp
</server>
- <name>
+<name>
FTP CWD with --ftp-method multicwd
- </name>
- <command>
+</name>
+<command>
--ftp-method multicwd ftp://%HOSTIP:%FTPPORT/first/second/third/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test297 b/tests/data/test297
index e4cdd856c..99c10d3e1 100644
--- a/tests/data/test297
+++ b/tests/data/test297
@@ -21,10 +21,10 @@ bla bla bla
<server>
ftp
</server>
- <name>
+<name>
FTP CWD with --ftp-method singlecwd
- </name>
- <command>
+</name>
+<command>
--ftp-method singlecwd ftp://%HOSTIP:%FTPPORT/first/second/third/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test298 b/tests/data/test298
index 20c8eccf2..5188c8547 100644
--- a/tests/data/test298
+++ b/tests/data/test298
@@ -21,10 +21,10 @@ bla bla bla
<server>
ftp
</server>
- <name>
+<name>
FTP CWD with --ftp-method nocwd
- </name>
- <command>
+</name>
+<command>
--ftp-method nocwd ftp://%HOSTIP:%FTPPORT/first/second/th%69rd/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test299 b/tests/data/test299
index 9b3fd0c30..fc80c6296 100644
--- a/tests/data/test299
+++ b/tests/data/test299
@@ -29,10 +29,10 @@ http
ftp
proxy
</features>
- <name>
+<name>
FTP over HTTP proxy with user:pass not in url
- </name>
- <command>
+</name>
+<command>
-x http://%HOSTIP:%HTTPPORT -u michal:aybabtu ftp://host.com/we/want/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test3 b/tests/data/test3
index f28d0ccd4..6c5eb6b71 100644
--- a/tests/data/test3
+++ b/tests/data/test3
@@ -32,10 +32,10 @@ Content-Length: 0
<server>
http
</server>
- <name>
+<name>
HTTP POST with auth and contents but with content-length set to 0
- </name>
- <command>
+</name>
+<command>
-d "fooo=mooo&pooo=clue&doo=%20%20%20++++" -u "fake:-user" http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test30 b/tests/data/test30
index 2a84b4c36..6d6a7f645 100644
--- a/tests/data/test30
+++ b/tests/data/test30
@@ -17,10 +17,10 @@ FAILURE
<server>
http
</server>
- <name>
+<name>
HTTP with no data in server reply
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test300 b/tests/data/test300
index efbf97fe3..2eb5f11a6 100644
--- a/tests/data/test300
+++ b/tests/data/test300
@@ -28,10 +28,10 @@ SSL
<server>
https
</server>
- <name>
+<name>
simple HTTPS GET
- </name>
- <command>
+</name>
+<command>
-k https://%HOSTIP:%HTTPSPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test3002 b/tests/data/test3002
index b6c94ec3c..a956913a2 100644
--- a/tests/data/test3002
+++ b/tests/data/test3002
@@ -16,16 +16,16 @@ SMTP
<server>
smtp
</server>
- <name>
+<name>
SMTP with multiple and invalid (first) --mail-rcpt and --mail-rcpt-allowfails
- </name>
+</name>
<stdin>
From: different
To: another
body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt-allowfails --mail-rcpt invalid.one --mail-rcpt recipient.two@example.com --mail-rcpt recipient.three@example.com --mail-rcpt recipient.four@example.com --mail-rcpt recipient.five@example.com --mail-from sender@example.com -T -
</command>
</client>
diff --git a/tests/data/test3003 b/tests/data/test3003
index 23e86c05e..28dd7f808 100644
--- a/tests/data/test3003
+++ b/tests/data/test3003
@@ -16,16 +16,16 @@ SMTP
<server>
smtp
</server>
- <name>
+<name>
SMTP with multiple and invalid (last) --mail-rcpt and --mail-rcpt-allowfails
- </name>
+</name>
<stdin>
From: different
To: another
body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt-allowfails --mail-rcpt recipient.one@example.com --mail-rcpt recipient.two@example.com --mail-rcpt recipient.three@example.com --mail-rcpt recipient.four@example.com --mail-rcpt invalid.five --mail-from sender@example.com -T -
</command>
</client>
diff --git a/tests/data/test3004 b/tests/data/test3004
index 1f646eeab..d46ba6ccc 100644
--- a/tests/data/test3004
+++ b/tests/data/test3004
@@ -16,16 +16,16 @@ SMTP
<server>
smtp
</server>
- <name>
+<name>
SMTP with multiple and invalid (middle) --mail-rcpt and --mail-rcpt-allowfails
- </name>
+</name>
<stdin>
From: different
To: another
body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt-allowfails --mail-rcpt recipient.one@example.com --mail-rcpt recipient.two@example.com --mail-rcpt invalid.three --mail-rcpt recipient.four@example.com --mail-rcpt recipient.five@example.com --mail-from sender@example.com -T -
</command>
</client>
diff --git a/tests/data/test3005 b/tests/data/test3005
index ffaa475bd..2f829f446 100644
--- a/tests/data/test3005
+++ b/tests/data/test3005
@@ -16,16 +16,16 @@ SMTP
<server>
smtp
</server>
- <name>
+<name>
SMTP with multiple and invalid (all but one) --mail-rcpt and --mail-rcpt-allowfails
- </name>
+</name>
<stdin>
From: different
To: another
body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt-allowfails --mail-rcpt invalid.one --mail-rcpt recipient.two@example.com --mail-rcpt invalid.three --mail-rcpt invalid.four --mail-rcpt invalid.five --mail-from sender@example.com -T -
</command>
</client>
diff --git a/tests/data/test3006 b/tests/data/test3006
index 9753d74fc..5ebf0bdf1 100644
--- a/tests/data/test3006
+++ b/tests/data/test3006
@@ -16,16 +16,16 @@ SMTP
<server>
smtp
</server>
- <name>
+<name>
SMTP with multiple invalid (all) --mail-rcpt and --mail-rcpt-allowfails
- </name>
+</name>
<stdin>
From: different
To: another
body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt-allowfails --mail-rcpt invalid.one --mail-rcpt invalid.two --mail-rcpt invalid.three --mail-rcpt invalid.four --mail-rcpt invalid.five --mail-from sender@example.com -T -
</command>
</client>
diff --git a/tests/data/test3007 b/tests/data/test3007
index 74497ed12..9a4aede6f 100644
--- a/tests/data/test3007
+++ b/tests/data/test3007
@@ -16,16 +16,16 @@ SMTP
<server>
smtp
</server>
- <name>
+<name>
SMTP with invalid --mail-rcpt and --mail-rcpt-allowfails
- </name>
+</name>
<stdin>
From: different
To: another
body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt-allowfails --mail-rcpt invalid.one --mail-from sender@example.com -T -
</command>
</client>
diff --git a/tests/data/test3008 b/tests/data/test3008
index 31aa4f766..51afb047e 100644
--- a/tests/data/test3008
+++ b/tests/data/test3008
@@ -36,7 +36,7 @@ http
--output-dir
</name>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/this/is/the/%TESTNUMBER -O --output-dir %PWD/log
+http://%HOSTIP:%HTTPPORT/this/is/the/%TESTNUMBER -O --output-dir %PWD/%LOGDIR
</command>
</client>
@@ -50,7 +50,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/%TESTNUMBER">
+<file name="%LOGDIR/%TESTNUMBER">
-foo-
</file>
</verify>
diff --git a/tests/data/test301 b/tests/data/test301
index 167a718ab..a07301181 100644
--- a/tests/data/test301
+++ b/tests/data/test301
@@ -29,10 +29,10 @@ SSL
<server>
https
</server>
- <name>
+<name>
HTTPS GET with user and password
- </name>
- <command>
+</name>
+<command>
-k -u fake:user https://%HOSTIP:%HTTPSPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test3011 b/tests/data/test3011
index c282cdb78..f5b2f1d8c 100644
--- a/tests/data/test3011
+++ b/tests/data/test3011
@@ -36,7 +36,7 @@ http
--output-dir with --create-dirs
</name>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/this/is/the/%TESTNUMBER -O --output-dir %PWD/log/tmp --create-dirs
+http://%HOSTIP:%HTTPPORT/this/is/the/%TESTNUMBER -O --output-dir %PWD/%LOGDIR/tmp --create-dirs
</command>
</client>
@@ -50,7 +50,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/tmp/%TESTNUMBER">
+<file name="%LOGDIR/tmp/%TESTNUMBER">
-foo-
</file>
</verify>
diff --git a/tests/data/test3012 b/tests/data/test3012
index 1889c937e..2bd329455 100644
--- a/tests/data/test3012
+++ b/tests/data/test3012
@@ -39,7 +39,7 @@ http
--output-dir with -J
</name>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/this/is/the/%TESTNUMBER -OJ --output-dir %PWD/log
+http://%HOSTIP:%HTTPPORT/this/is/the/%TESTNUMBER -OJ --output-dir %PWD/%LOGDIR
</command>
</client>
@@ -53,7 +53,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/MMM%TESTNUMBERMMM">
+<file name="%LOGDIR/MMM%TESTNUMBERMMM">
-foo-
</file>
</verify>
diff --git a/tests/data/test3013 b/tests/data/test3013
index 9c0ce445c..183667e68 100644
--- a/tests/data/test3013
+++ b/tests/data/test3013
@@ -39,7 +39,7 @@ http
Two --output-dir with --next in between
</name>
<command option="no-output,no-include">
-http://%HOSTIP:%HTTPPORT/this/is/the/%TESTNUMBER -O --output-dir %PWD/log http://%HOSTIP:%HTTPPORT/another/%TESTNUMBER -o second%TESTNUMBER --output-dir %PWD/log
+http://%HOSTIP:%HTTPPORT/this/is/the/%TESTNUMBER -O --output-dir %PWD/%LOGDIR http://%HOSTIP:%HTTPPORT/another/%TESTNUMBER -o second%TESTNUMBER --output-dir %PWD/%LOGDIR
</command>
</client>
@@ -58,10 +58,10 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/%TESTNUMBER">
+<file name="%LOGDIR/%TESTNUMBER">
-foo-
</file>
-<file2 name="log/second%TESTNUMBER">
+<file2 name="%LOGDIR/second%TESTNUMBER">
-foo-
</file2>
</verify>
diff --git a/tests/data/test3015 b/tests/data/test3015
index 523d06a08..5b59bba32 100644
--- a/tests/data/test3015
+++ b/tests/data/test3015
@@ -46,10 +46,10 @@ monster
<server>
http
</server>
- <name>
+<name>
HTTP GET -w num_headers with redirected fetch (2 connects)
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -w "%{num_headers}\n" -L -o/dev/null
</command>
</client>
diff --git a/tests/data/test302 b/tests/data/test302
index 755d4b224..f6f33c276 100644
--- a/tests/data/test302
+++ b/tests/data/test302
@@ -29,10 +29,10 @@ proxy
<server>
https
</server>
- <name>
+<name>
HTTPS GET over HTTP proxy fails
- </name>
- <command>
+</name>
+<command>
-k -U fake:user -x %HOSTIP:%HTTPPORT https://bad.fakeurl-to.test:%TESTNUMBER/slash/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test3021 b/tests/data/test3021
index 775dd91f8..bdf8f375c 100644
--- a/tests/data/test3021
+++ b/tests/data/test3021
@@ -24,18 +24,18 @@ libssh2
<server>
sftp
</server>
- <name>
+<name>
SFTP correct sha256 host key
- </name>
- <command>
---hostpubsha256 %SSHSRVSHA256 --key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt
+</name>
+<command>
+--hostpubsha256 %SSHSRVSHA256 --key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt
</command>
<setenv>
# Needed for MSYS2 to not treat the argument as a POSIX path list
# that has to be converted to Windows paths
MSYS2_ARG_CONV_EXCL=*
</setenv>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
test
</file>
</client>
diff --git a/tests/data/test3022 b/tests/data/test3022
index a9dbcb0f2..d76e5f493 100644
--- a/tests/data/test3022
+++ b/tests/data/test3022
@@ -24,18 +24,18 @@ libssh2
<server>
scp
</server>
- <name>
+<name>
SCP correct sha256 host key
- </name>
- <command>
---hostpubsha256 %SSHSRVSHA256 --key curl_client_key --pubkey curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt
+</name>
+<command>
+--hostpubsha256 %SSHSRVSHA256 --key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt
</command>
<setenv>
# Needed for MSYS2 to not treat the argument as a POSIX path list
# that has to be converted to Windows paths
MSYS2_ARG_CONV_EXCL=*
</setenv>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
test
</file>
</client>
diff --git a/tests/data/test3027 b/tests/data/test3027
index 6d7aeb620..05a811f4e 100644
--- a/tests/data/test3027
+++ b/tests/data/test3027
@@ -24,9 +24,9 @@ data blobb
<server>
ftp
</server>
- <name>
+<name>
Get a file via FTP but 550 after MDTM command
- </name>
+</name>
<tool>
lib3027
</tool>
diff --git a/tests/data/test3028 b/tests/data/test3028
new file mode 100644
index 000000000..bc69e862a
--- /dev/null
+++ b/tests/data/test3028
@@ -0,0 +1,73 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP CONNECT
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<connect>
+HTTP/1.1 200 Mighty fine indeed
+
+</connect>
+
+<data nocheck="yes">
+HTTP/1.1 404 Not Found
+Server: nginx/1.23.2
+Date: Wed, 09 Nov 2022 09:44:58 GMT
+Content-Type: text/plain; charset=utf-8
+Content-Length: 4
+Connection: keep-alive
+X-Content-Type-Options: nosniff
+
+haha
+</data>
+
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+http-proxy
+</server>
+<name>
+HTTP GET when PROXY Protocol enabled behind a proxy
+</name>
+<command>
+--haproxy-protocol http://%HOSTIP:%HTTPPORT/page --proxytunnel -x %HOSTIP:%PROXYPORT
+</command>
+<features>
+proxy
+</features>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strippart>
+s/^PROXY TCP4 %CLIENTIP %HOSTIP (\d*) %PROXYPORT/proxy-line/
+</strippart>
+
+<proxy>
+CONNECT %HOSTIP:%HTTPPORT HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Proxy-Connection: Keep-Alive
+
+</proxy>
+
+<protocol>
+proxy-line
+GET /page HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+
+</verify>
+</testcase>
diff --git a/tests/data/test3029 b/tests/data/test3029
new file mode 100644
index 000000000..2e51bbeaf
--- /dev/null
+++ b/tests/data/test3029
@@ -0,0 +1,39 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+</keywords>
+</info>
+
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Content-Length: 6
+
+-foo-
+</data>
+</reply>
+
+<client>
+<server>
+http
+</server>
+<name>
+HTTP with multiple -D
+</name>
+<command>
+-D %LOGDIR/heads%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER --next -D %LOGDIR/heads%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER
+</command>
+</client>
+
+<verify>
+<file name="%LOGDIR/heads%TESTNUMBER">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Content-Length: 6
+
+</file>
+</verify>
+
+</testcase> \ No newline at end of file
diff --git a/tests/data/test303 b/tests/data/test303
index 318cbe672..9b656a795 100644
--- a/tests/data/test303
+++ b/tests/data/test303
@@ -4,6 +4,7 @@
HTTPS
HTTP GET
timeout
+FAILURE
</keywords>
</info>
@@ -29,10 +30,13 @@ SSL
<server>
https
</server>
- <name>
+<killserver>
+https
+</killserver>
+<name>
HTTPS with 8 secs timeout
- </name>
- <command>
+</name>
+<command>
-k https://%HOSTIP:%HTTPSPORT/want/%TESTNUMBER -m 8
</command>
</client>
diff --git a/tests/data/test3030 b/tests/data/test3030
new file mode 100644
index 000000000..7e169cf43
--- /dev/null
+++ b/tests/data/test3030
@@ -0,0 +1,43 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+</keywords>
+</info>
+
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Content-Length: 6
+
+-foo-
+</data>
+</reply>
+
+<client>
+<server>
+http
+</server>
+<name>
+HTTP with multiple transfers in one -D
+</name>
+<command>
+-D %LOGDIR/heads%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER
+</command>
+</client>
+
+<verify>
+<file name="%LOGDIR/heads%TESTNUMBER">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Content-Length: 6
+
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Content-Length: 6
+
+</file>
+</verify>
+
+</testcase> \ No newline at end of file
diff --git a/tests/data/test304 b/tests/data/test304
index b632af74f..f5ba5153c 100644
--- a/tests/data/test304
+++ b/tests/data/test304
@@ -27,14 +27,14 @@ SSL
<server>
https
</server>
- <name>
+<name>
HTTPS multipart formpost
- </name>
- <command>
--k https://%HOSTIP:%HTTPSPORT/we/want/%TESTNUMBER -F name=daniel -F tool=curl -F file=@log/test%TESTNUMBER.txt
+</name>
+<command>
+-k https://%HOSTIP:%HTTPSPORT/we/want/%TESTNUMBER -F name=daniel -F tool=curl -F file=@%LOGDIR/test%TESTNUMBER.txt
</command>
# We create this file before the command is invoked!
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
</file>
</client>
@@ -49,24 +49,24 @@ POST /we/want/%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPSPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 1386
-Content-Type: multipart/form-data; boundary=----------------------------c3b2ef7f0bb8
+Content-Length: 1410
+Content-Type: multipart/form-data; boundary=----------------------------qrstuvwxyz0123456789AB
-------------------------------c3b2ef7f0bb8
+------------------------------qrstuvwxyz0123456789AB
Content-Disposition: form-data; name="name"
daniel
-------------------------------c3b2ef7f0bb8
+------------------------------qrstuvwxyz0123456789AB
Content-Disposition: form-data; name="tool"
curl
-------------------------------c3b2ef7f0bb8
+------------------------------qrstuvwxyz0123456789AB
Content-Disposition: form-data; name="file"; filename="test%TESTNUMBER.txt"
Content-Type: text/plain
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-------------------------------c3b2ef7f0bb8--
+------------------------------qrstuvwxyz0123456789AB--
</protocol>
</verify>
</testcase>
diff --git a/tests/data/test305 b/tests/data/test305
index 4ca5789ed..9e7dc8dcb 100644
--- a/tests/data/test305
+++ b/tests/data/test305
@@ -15,10 +15,10 @@ SSL
<server>
https
</server>
- <name>
+<name>
insecure HTTPS without permission
- </name>
- <command>
+</name>
+<command>
https://%HOSTIP:%HTTPSPORT/want/%TESTNUMBER --cacert moooo
</command>
</client>
diff --git a/tests/data/test306 b/tests/data/test306
index ee8870241..a7e477e4d 100644
--- a/tests/data/test306
+++ b/tests/data/test306
@@ -42,10 +42,10 @@ SSL
<server>
https
</server>
- <name>
+<name>
HTTPS GET, receive no headers only data!
- </name>
- <command>
+</name>
+<command>
-k https://%HOSTIP:%HTTPSPORT/%TESTNUMBER --http0.9
</command>
</client>
diff --git a/tests/data/test307 b/tests/data/test307
index 4c004ae1c..ce3232ac7 100644
--- a/tests/data/test307
+++ b/tests/data/test307
@@ -32,10 +32,10 @@ https
perl %SRCDIR/libtest/test%TESTNUMBER.pl %CURL
</precheck>
- <name>
+<name>
simple HTTPS GET with openssl engine
- </name>
- <command>
+</name>
+<command>
--engine openssl -k https://%HOSTIP:%HTTPSPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test308 b/tests/data/test308
index 7534ed6ba..39803d3b0 100644
--- a/tests/data/test308
+++ b/tests/data/test308
@@ -17,10 +17,10 @@ OpenSSL
<server>
https
</server>
- <name>
+<name>
simple HTTPS GET with invalid crypto engine
- </name>
- <command>
+</name>
+<command>
--engine invalid-crypto-engine-xyzzy -k https://%HOSTIP:%HTTPSPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test309 b/tests/data/test309
index 0a3b52965..29b3e3061 100644
--- a/tests/data/test309
+++ b/tests/data/test309
@@ -55,10 +55,10 @@ SSL
http
https
</server>
- <name>
+<name>
HTTP Location: redirect to HTTPS URL
- </name>
- <command>
+</name>
+<command>
-k http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -L
</command>
</client>
diff --git a/tests/data/test31 b/tests/data/test31
index 6dfd2d268..3ceaad0f9 100644
--- a/tests/data/test31
+++ b/tests/data/test31
@@ -11,7 +11,7 @@ cookiejar
#
# The cookies set come in two versions. This is because when curl is built
# with Hyper, the API provides the headers already "sanitized" so we cannot
-# compapare with the exact server contents unlesss it too sends the data
+# compare with the exact server contents unless it too sends the data
# "clean".
<reply>
@@ -54,10 +54,17 @@ Set-Cookie: partmatch=present; domain=test31.curl ; path=/;
Set-Cookie:eat=this; domain=moo.foo.moo;
Set-Cookie: eat=this-too; domain=.foo.moo;
Set-Cookie: nodomainnovalue
+%if large-time
+Set-Cookie: nodomain=value; expires=Fri Feb 13 11:56:27 GMT 2525
+Set-Cookie: novalue; domain=reallysilly
+Set-Cookie: test=yes; domain=foo.com; expires=Sat Feb 2 11:56:27 GMT 2525
+Set-Cookie: test2=yes; domain=se; expires=Sat Feb 2 11:56:27 GMT 2525
+%else
Set-Cookie: nodomain=value; expires=Fri Feb 13 11:56:27 GMT 2037
Set-Cookie: novalue; domain=reallysilly
Set-Cookie: test=yes; domain=foo.com; expires=Sat Feb 2 11:56:27 GMT 2030
Set-Cookie: test2=yes; domain=se; expires=Sat Feb 2 11:56:27 GMT 2030
+%endif
Set-Cookie: magic=yessir; path=/silly/; HttpOnly
Set-Cookie: blexp=yesyes; domain=test31.curl; domain=test31.curl; expiry=totally bad;
Set-Cookie: partialip=nono; domain=.0.0.1;
@@ -96,10 +103,17 @@ Set-Cookie: partmatch=present; domain=test31.curl ; path=/;
Set-Cookie: eat=this; domain=moo.foo.moo;
Set-Cookie: eat=this-too; domain=.foo.moo;
Set-Cookie: nodomainnovalue
+%if large-time
+Set-Cookie: nodomain=value; expires=Fri Feb 13 11:56:27 GMT 2525
+Set-Cookie: novalue; domain=reallysilly
+Set-Cookie: test=yes; domain=foo.com; expires=Sat Feb 2 11:56:27 GMT 2525
+Set-Cookie: test2=yes; domain=se; expires=Sat Feb 2 11:56:27 GMT 2525
+%else
Set-Cookie: nodomain=value; expires=Fri Feb 13 11:56:27 GMT 2037
Set-Cookie: novalue; domain=reallysilly
Set-Cookie: test=yes; domain=foo.com; expires=Sat Feb 2 11:56:27 GMT 2030
Set-Cookie: test2=yes; domain=se; expires=Sat Feb 2 11:56:27 GMT 2030
+%endif
Set-Cookie: magic=yessir; path=/silly/; HttpOnly
Set-Cookie: blexp=yesyes; domain=test31.curl; domain=test31.curl; expiry=totally bad;
Set-Cookie: partialip=nono; domain=.0.0.1;
@@ -118,21 +132,24 @@ boo
<server>
http
</server>
- <name>
+<name>
HTTP with weirdly formatted cookies and cookiejar storage
- </name>
+</name>
# Explicitly set the time zone to a known good one, in case the user is
# using one of the 'right' zones that take into account leap seconds
# which causes the cookie expiry times to be different.
<setenv>
TZ=GMT
</setenv>
- <command>
-http://test31.curl:%HTTPPORT/we/want/%TESTNUMBER -b none -c log/jar%TESTNUMBER.txt --resolve test31.curl:%HTTPPORT:127.0.0.1
+<command>
+http://test31.curl:%HTTPPORT/we/want/%TESTNUMBER -b none -c %LOGDIR/jar%TESTNUMBER.txt --resolve test31.curl:%HTTPPORT:127.0.0.1
</command>
<precheck>
perl -e "print 'Test requires default test server host' if ( '%HOSTIP' ne '127.0.0.1' );"
</precheck>
+<features>
+cookies
+</features>
</client>
# Verify data after the test has been "shot"
@@ -144,7 +161,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/jar%TESTNUMBER.txt" mode="text">
+<file name="%LOGDIR/jar%TESTNUMBER.txt" mode="text">
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
@@ -154,7 +171,11 @@ test31.curl FALSE /we/want/ FALSE 0 withspaces2 before equals
test31.curl FALSE /we/want/ FALSE 0 withspaces yes within and around
.test31.curl TRUE /we/want/ FALSE 0 blexp yesyes
#HttpOnly_test31.curl FALSE /silly/ FALSE 0 magic yessir
+%if large-time
+test31.curl FALSE /we/want/ FALSE 17517902187 nodomain value
+%else
test31.curl FALSE /we/want/ FALSE 2118138987 nodomain value
+%endif
.test31.curl TRUE / FALSE 0 partmatch present
#HttpOnly_.test31.curl TRUE /p4/ FALSE 0 httponly myvalue1
#HttpOnly_.test31.curl TRUE /p4/ FALSE 0 httpo4 value4
diff --git a/tests/data/test310 b/tests/data/test310
index 6b6f63a66..b9f1850ea 100644
--- a/tests/data/test310
+++ b/tests/data/test310
@@ -30,10 +30,10 @@ SSL
<server>
https Server-localhost-sv.pem
</server>
- <name>
+<name>
simple HTTPS GET
- </name>
- <command>
+</name>
+<command>
--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt https://localhost:%HTTPSPORT/%TESTNUMBER
</command>
# Ensure that we're running on localhost because we're checking the host name
diff --git a/tests/data/test3100 b/tests/data/test3100
new file mode 100644
index 000000000..23ec41790
--- /dev/null
+++ b/tests/data/test3100
@@ -0,0 +1,85 @@
+<testcase>
+
+#Informational
+<info>
+<keywords>
+RTSP
+RTSP Basic auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+RTSP/1.0 401 Unauthorized please swsbounce
+Server: RTSPD/libcurl-test
+CSeq: 1
+WWW-Authenticate: Basic realm="please-auth-me"
+
+</data>
+<data1>
+RTSP/1.0 200 OK
+Server: RTSPD/libcurl-test
+CSeq: 2
+Content-Base: rtsp://%HOSTIP:%RTSPPORT/%TESTNUMBER
+Content-Length: 80
+Curl-private: swsclose
+
+v=0
+s=rtspd SDP
+i=A fake SDP reply
+u=http://www.curl.example.com/fakesdp.ps
+</data1>
+<datacheck>
+RTSP/1.0 401 Unauthorized please swsbounce
+Server: RTSPD/libcurl-test
+CSeq: 1
+WWW-Authenticate: Basic realm="please-auth-me"
+
+RTSP/1.0 200 OK
+Server: RTSPD/libcurl-test
+CSeq: 2
+Content-Base: rtsp://%HOSTIP:%RTSPPORT/%TESTNUMBER
+Content-Length: 80
+Curl-private: swsclose
+
+v=0
+s=rtspd SDP
+i=A fake SDP reply
+u=http://www.curl.example.com/fakesdp.ps
+</datacheck>
+</reply>
+
+# Client-Side
+<client>
+<server>
+rtsp
+</server>
+<tool>
+lib%TESTNUMBER
+</tool>
+
+<name>
+RTSP Authentication check
+</name>
+<command>
+rtsp://%HOSTIP:%RTSPPORT/%TESTNUMBER
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+DESCRIBE rtsp://%HOSTIP:%RTSPPORT/%TESTNUMBER RTSP/1.0
+CSeq: 1
+Accept: application/sdp
+
+DESCRIBE rtsp://%HOSTIP:%RTSPPORT/%TESTNUMBER RTSP/1.0
+CSeq: 2
+Accept: application/sdp
+Authorization: Basic dXNlcjpwYXNzd29yZA==
+
+</protocol>
+</verify>
+
+</testcase>
diff --git a/tests/data/test3101 b/tests/data/test3101
new file mode 100644
index 000000000..8e3d41f3a
--- /dev/null
+++ b/tests/data/test3101
@@ -0,0 +1,88 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP Basic auth
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data>
+HTTP/1.1 401 Authorization Required swsbounce
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+Content-Length: 26
+Content-Type: text/html; charset=iso-8859-1
+
+This is not the real page
+</data>
+
+# This is supposed to be returned when the server gets a
+# Authorization: Digest line passed-in from the client
+<data1>
+HTTP/1.1 200 OK
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+Connection: close
+
+This IS the real page!
+</data1>
+
+<datacheck>
+HTTP/1.1 401 Authorization Required swsbounce
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+WWW-Authenticate: Blackmagic realm="gimme all yer s3cr3ts"
+WWW-Authenticate: Basic realm="gimme all yer s3cr3ts"
+Content-Length: 26
+Content-Type: text/html; charset=iso-8859-1
+
+HTTP/1.1 200 OK
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 23
+Connection: close
+
+This IS the real page!
+</datacheck>
+</reply>
+
+# Client-Side
+<client>
+# require https because the code sets that as an acceptable redirect proto
+<features>
+https
+</features>
+<server>
+http
+</server>
+<tool>
+lib%TESTNUMBER
+</tool>
+
+<name>
+HTTP auth without redirection protocols
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Authorization: Basic dXNlcjpwYXNzd29yZA==
+Accept: */*
+
+</protocol>
+</verify>
+
+</testcase>
diff --git a/tests/data/test3102 b/tests/data/test3102
new file mode 100644
index 000000000..4df7ba9c1
--- /dev/null
+++ b/tests/data/test3102
@@ -0,0 +1,51 @@
+<testcase>
+<info>
+<keywords>
+HTTPS
+HTTP GET
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+# SSL with libraries supporting CURLOPT_CERTINFO
+<features>
+SSL
+!bearssl
+!mbedtls
+!rustls
+!wolfssl
+</features>
+<server>
+https
+</server>
+<tool>
+lib%TESTNUMBER
+</tool>
+<name>
+verify certificate chain order with simple HTTPS GET
+</name>
+<command>
+https://%HOSTIP:%HTTPSPORT/%TESTNUMBER
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPSPORT
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test3103 b/tests/data/test3103
new file mode 100644
index 000000000..423c4adaa
--- /dev/null
+++ b/tests/data/test3103
@@ -0,0 +1,60 @@
+<testcase>
+<info>
+<keywords>
+cookies
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+cookies
+proxy
+</features>
+<server>
+http
+</server>
+<tool>
+lib%TESTNUMBER
+</tool>
+<name>
+CURLOPT_COOKIELIST without expiry
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET http://localhost/ HTTP/1.1
+Host: localhost
+Accept: */*
+Proxy-Connection: Keep-Alive
+Cookie: c1=v1
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test311 b/tests/data/test311
index 0e05b63c0..a3f9ed0e2 100644
--- a/tests/data/test311
+++ b/tests/data/test311
@@ -21,10 +21,10 @@ SSL
<server>
https Server-localhost0h-sv.pem
</server>
- <name>
+<name>
HTTPS wrong subjectAltName but right CN
- </name>
- <command>
+</name>
+<command>
--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt https://localhost:%HTTPSPORT/%TESTNUMBER
</command>
# Ensure that we're running on localhost because we're checking the host name
diff --git a/tests/data/test312 b/tests/data/test312
index f013a7cfd..c8c46b821 100644
--- a/tests/data/test312
+++ b/tests/data/test312
@@ -21,10 +21,10 @@ SSL
<server>
https Server-localhost.nn-sv.pem
</server>
- <name>
+<name>
HTTPS GET to localhost and null-prefixed CN cert
- </name>
- <command>
+</name>
+<command>
--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt https://localhost:%HTTPSPORT/%TESTNUMBER
</command>
# Ensure that we're running on localhost because we're checking the host name
diff --git a/tests/data/test313 b/tests/data/test313
index d87a46491..12f91f965 100644
--- a/tests/data/test313
+++ b/tests/data/test313
@@ -17,10 +17,10 @@ SSL
<server>
https Server-localhost-sv.pem
</server>
- <name>
+<name>
CRL test
- </name>
- <command>
+</name>
+<command>
--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt --crlfile %SRCDIR/certs/Server-localhost-sv.crl https://localhost:%HTTPSPORT/%TESTNUMBER
</command>
# Ensure that we're running on localhost because we're checking the host name
diff --git a/tests/data/test314 b/tests/data/test314
index cdc36af21..d8e596bd4 100644
--- a/tests/data/test314
+++ b/tests/data/test314
@@ -170,10 +170,10 @@ brotli
<server>
http
</server>
- <name>
+<name>
HTTP GET brotli compressed content
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --compressed
</command>
</client>
diff --git a/tests/data/test315 b/tests/data/test315
index 3073251e2..fbadac63c 100644
--- a/tests/data/test315
+++ b/tests/data/test315
@@ -60,10 +60,10 @@ brotli
<server>
http
</server>
- <name>
+<name>
HTTP GET brotli compressed content with broken header
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --compressed
</command>
</client>
diff --git a/tests/data/test316 b/tests/data/test316
index be7de17be..d2216ad06 100644
--- a/tests/data/test316
+++ b/tests/data/test316
@@ -170,10 +170,10 @@ brotli
<server>
http
</server>
- <name>
+<name>
HTTP GET brotli compressed content of size more than CURL_MAX_WRITE_SIZE
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --compressed
</command>
</client>
diff --git a/tests/data/test317 b/tests/data/test317
index a8cfd6112..10f0b8817 100644
--- a/tests/data/test317
+++ b/tests/data/test317
@@ -61,10 +61,10 @@ contents
<server>
http
</server>
- <name>
+<name>
HTTP with custom Authorization: and redirect to new host
- </name>
- <command>
+</name>
+<command>
http://first.host.it.is/we/want/that/page/%TESTNUMBER -x %HOSTIP:%HTTPPORT -H "Authorization: s3cr3t" --proxy-user testing:this --location
</command>
<features>
diff --git a/tests/data/test318 b/tests/data/test318
index 94a53e8bc..6577db5f9 100644
--- a/tests/data/test318
+++ b/tests/data/test318
@@ -61,10 +61,10 @@ contents
<server>
http
</server>
- <name>
+<name>
HTTP with custom Authorization: and redirect to new host
- </name>
- <command>
+</name>
+<command>
http://first.host.it.is/we/want/that/page/%TESTNUMBER -x %HOSTIP:%HTTPPORT -H "Authorization: s3cr3t" --proxy-user testing:this --location-trusted
</command>
<features>
diff --git a/tests/data/test319 b/tests/data/test319
index d2e35ea32..81ef74719 100644
--- a/tests/data/test319
+++ b/tests/data/test319
@@ -34,9 +34,9 @@ libz
<server>
http
</server>
- <name>
+<name>
HTTP GET gzip transfer-encoded data in raw mode
- </name>
+</name>
<command option="no-include">
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --raw
</command>
diff --git a/tests/data/test32 b/tests/data/test32
index d5762f4e2..f61369304 100644
--- a/tests/data/test32
+++ b/tests/data/test32
@@ -31,10 +31,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP with -d and -G
- </name>
- <command>
+</name>
+<command>
-d "foo=moo&moo=poo" http://%HOSTIP:%HTTPPORT/%TESTNUMBER -G
</command>
</client>
diff --git a/tests/data/test320 b/tests/data/test320
index 88f99ccde..edf74bc58 100644
--- a/tests/data/test320
+++ b/tests/data/test320
@@ -46,9 +46,9 @@ httptls+srp
<features>
TLS-SRP
</features>
- <name>
+<name>
simple TLS-SRP HTTPS GET, check user in response
- </name>
+</name>
<command>
--insecure --tlsauthtype SRP --tlsuser jsmith --tlspassword abc -A curl-test-suite https://%HOSTIP:%HTTPTLSPORT
</command>
@@ -58,7 +58,7 @@ simple TLS-SRP HTTPS GET, check user in response
<verify>
<protocol>
</protocol>
-<file name="log/curl%TESTNUMBER.out">
+<file name="%LOGDIR/curl%TESTNUMBER.out">
HTTP/1.0 200 OK
Content-type: text/html
diff --git a/tests/data/test3200 b/tests/data/test3200
new file mode 100644
index 000000000..b2206fef3
--- /dev/null
+++ b/tests/data/test3200
@@ -0,0 +1,25 @@
+<testcase>
+<info>
+<keywords>
+unittest
+curl_get_line
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+unittest
+</features>
+<name>
+curl_get_line unit tests
+</name>
+<command>
+%LOGDIR/curl_get_line%TESTNUMBER
+</command>
+</client>
+</testcase>
diff --git a/tests/data/test3201 b/tests/data/test3201
new file mode 100644
index 000000000..730da8d93
--- /dev/null
+++ b/tests/data/test3201
@@ -0,0 +1,63 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+proxy
+haproxy
+</keywords>
+</info>
+
+#
+# Server-side
+<reply name="%TESTNUMBER">
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: barkbark
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+HTTP GET when PROXY Protocol enabled and spoofed client IP
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --haproxy-clientip "192.168.1.1" -H "Testno: %TESTNUMBER"
+</command>
+<features>
+proxy
+</features>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strippart>
+s/^PROXY TCP4 192.168.1.1 %HOSTIP (\d*) %HTTPPORT/proxy-line/
+</strippart>
+<protocol>
+proxy-line
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+Testno: %TESTNUMBER
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test3202 b/tests/data/test3202
new file mode 100644
index 000000000..25ec6073b
--- /dev/null
+++ b/tests/data/test3202
@@ -0,0 +1,67 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+proxy
+haproxy
+IPv6
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+These data aren't actually sent to the client
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+ipv6
+</features>
+<server>
+http-ipv6
+</server>
+<name>
+HTTP-IPv6 GET with PROXY protocol with spoofed client IP
+</name>
+<command>
+-g "http://%HOST6IP:%HTTP6PORT/%TESTNUMBER" --haproxy-clientip "2001:db8::"
+</command>
+<features>
+proxy
+</features>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+# Strip off the (random) local port number. This test used to use a fixed
+# local port number that frequently causes the test to fail
+<strippart>
+s/^PROXY TCP6 2001:db8:: ::1 (\d*) %HTTP6PORT/proxy-line/
+</strippart>
+<protocol>
+proxy-line
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOST6IP:%HTTP6PORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test321 b/tests/data/test321
index c6b208b2a..7d9395cc0 100644
--- a/tests/data/test321
+++ b/tests/data/test321
@@ -15,9 +15,9 @@ httptls+srp
<features>
TLS-SRP
</features>
- <name>
+<name>
TLS-SRP with bad username and password
- </name>
+</name>
<command>
--insecure --tlsauthtype SRP --tlsuser baduser --tlspassword badpass https://%HOSTIP:%HTTPTLSPORT
</command>
diff --git a/tests/data/test322 b/tests/data/test322
index f7f82790f..02cefba92 100644
--- a/tests/data/test322
+++ b/tests/data/test322
@@ -15,9 +15,9 @@ httptls+srp
<features>
TLS-SRP
</features>
- <name>
+<name>
TLS-SRP with bad password
- </name>
+</name>
<command>
--insecure --tlsauthtype SRP --tlsuser jsmith --tlspassword badpass https://%HOSTIP:%HTTPTLSPORT
</command>
diff --git a/tests/data/test323 b/tests/data/test323
index c46c02a38..72320a66e 100644
--- a/tests/data/test323
+++ b/tests/data/test323
@@ -15,9 +15,9 @@ https
<features>
TLS-SRP
</features>
- <name>
+<name>
TLS-SRP to non-TLS-SRP server
- </name>
+</name>
<command>
--insecure --tlsauthtype SRP --tlsuser jsmith --tlspassword badpass https://%HOSTIP:%HTTPSPORT/want/%TESTNUMBER
</command>
diff --git a/tests/data/test324 b/tests/data/test324
index 159f36b84..aefd25e10 100644
--- a/tests/data/test324
+++ b/tests/data/test324
@@ -15,9 +15,9 @@ httptls+srp
<features>
TLS-SRP
</features>
- <name>
+<name>
TLS-SRP with server cert checking
- </name>
+</name>
<command> # no --insecure
--tlsauthtype SRP --tlsuser jsmith --tlspassword abc https://%HOSTIP:%HTTPTLSPORT/want/fails
</command>
diff --git a/tests/data/test325 b/tests/data/test325
index 4bdf2aa31..0baed5c04 100644
--- a/tests/data/test325
+++ b/tests/data/test325
@@ -38,10 +38,10 @@ SSL
<server>
https
</server>
- <name>
+<name>
HTTPS with attempted redirect to denied HTTP
- </name>
- <command>
+</name>
+<command>
-k https://%HOSTIP:%HTTPSPORT/%TESTNUMBER --proto-redir -http --location
</command>
</client>
diff --git a/tests/data/test326 b/tests/data/test326
index 56d4dcb35..f2f25ef34 100644
--- a/tests/data/test326
+++ b/tests/data/test326
@@ -45,9 +45,9 @@ line 1
<server>
http
</server>
- <name>
+<name>
HTTP GET chunked data in raw mode
- </name>
+</name>
<command option="no-include">
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --raw
</command>
diff --git a/tests/data/test327 b/tests/data/test327
index 73cedb657..6e86c3722 100644
--- a/tests/data/test327
+++ b/tests/data/test327
@@ -20,7 +20,7 @@ Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Content-Type: text/html
Funny-head: yesyes swsclose
-Set-Cookie: foobar=name; expires=Thu, 22 Nov 2037 10:54:11 GMT;
+Set-Cookie: foobar=name; expires=Thu, 22 Nov 2525 10:54:11 GMT;
</data>
<data2>
@@ -39,12 +39,15 @@ Set-Cookie: foobar=name; expires=Thu, 01 Jan 1970 00:00:00 GMT;
<server>
http
</server>
- <name>
+<name>
HTTP with cookiejar without cookies left
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -b none -c log/cookies%TESTNUMBER http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER0002
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -b none -c %LOGDIR/cookies%TESTNUMBER http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER0002
</command>
+<features>
+cookies
+</features>
</client>
# Verify data after the test has been "shot"
@@ -62,7 +65,7 @@ Accept: */*
Cookie: foobar=name
</protocol>
-<file name="log/cookies%TESTNUMBER" mode="text">
+<file name="%LOGDIR/cookies%TESTNUMBER" mode="text">
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
diff --git a/tests/data/test328 b/tests/data/test328
index f17af3cc9..cb891b044 100644
--- a/tests/data/test328
+++ b/tests/data/test328
@@ -31,10 +31,10 @@ http
<features>
libz
</features>
- <name>
+<name>
HTTP with "Content-Encoding: none
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/hello/%TESTNUMBER --compressed
</command>
</client>
diff --git a/tests/data/test329 b/tests/data/test329
index d25f96890..93135c5ec 100644
--- a/tests/data/test329
+++ b/tests/data/test329
@@ -14,6 +14,7 @@ Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Content-Type: text/html
Funny-head: yesyes
+Set-Cookie: testn1=yes; path=/we/want/; domain=.host.foo.com; Max-Age=-1;
Set-Cookie: test=yes; path=/we/want/; domain=.host.foo.com; Max-Age=0;
Content-Length: 4
@@ -30,27 +31,30 @@ moo
# Client-side
<client>
-<file name="log/jar%TESTNUMBER.txt" mode="text">
-.host.foo.com TRUE /we/want/ FALSE 2147483647 test no
+<file name="%LOGDIR/jar%TESTNUMBER.txt" mode="text">
+.host.foo.com TRUE /we/want/ FALSE 22147483647 test no
</file>
-<file name="log/jar%TESTNUMBER-2.txt" mode="text">
-.host.foo.com TRUE /we/want/ FALSE 2147483647 tester yes
+<file name="%LOGDIR/jar%TESTNUMBER-2.txt" mode="text">
+.host.foo.com TRUE /we/want/ FALSE 22147483647 tester yes
</file>
<server>
http
</server>
- <name>
+<name>
HTTP cookie with Max-Age=0
- </name>
+</name>
# Explicitly set the time zone to a known good one, in case the user is
# using one of the 'right' zones that take into account leap seconds
# which causes the cookie expiry times to be different.
<setenv>
TZ=GMT
</setenv>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -b log/jar%TESTNUMBER.txt -b log/jar%TESTNUMBER-2.txt -H "Host: host.foo.com" http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER0002
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -b %LOGDIR/jar%TESTNUMBER.txt -b %LOGDIR/jar%TESTNUMBER-2.txt -H "Host: host.foo.com" http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER0002
</command>
+<features>
+cookies
+</features>
</client>
# Verify data after the test has been "shot"
diff --git a/tests/data/test33 b/tests/data/test33
index 1b9c898ef..34afff35b 100644
--- a/tests/data/test33
+++ b/tests/data/test33
@@ -20,10 +20,10 @@ HTTP/1.1 200 OK swsclose
<server>
http
</server>
- <name>
+<name>
HTTP PUT with resume
- </name>
-<file name="log/test%TESTNUMBER.txt">
+</name>
+<file name="%LOGDIR/test%TESTNUMBER.txt">
012345678
012345678
012345678
@@ -35,8 +35,8 @@ HTTP PUT with resume
012345678
012345678
</file>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -Tlog/test%TESTNUMBER.txt -C 50
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T%LOGDIR/test%TESTNUMBER.txt -C 50
</command>
</client>
@@ -49,7 +49,6 @@ Content-Range: bytes 50-99/100
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 50
-Expect: 100-continue
012345678
012345678
diff --git a/tests/data/test330 b/tests/data/test330
index d145fc07a..4344e2d4b 100644
--- a/tests/data/test330
+++ b/tests/data/test330
@@ -60,10 +60,10 @@ contents
<server>
http
</server>
- <name>
+<name>
HTTP with custom Cookie: and redirect to new host
- </name>
- <command>
+</name>
+<command>
http://first.host.it.is/we/want/that/page/%TESTNUMBER -x %HOSTIP:%HTTPPORT -H "Cookie: test=yes" --location
</command>
<features>
diff --git a/tests/data/test331 b/tests/data/test331
index 8fc68984e..8ab268203 100644
--- a/tests/data/test331
+++ b/tests/data/test331
@@ -36,13 +36,14 @@ Funny-head: yesyes swsclose
<server>
http
</server>
- <name>
+<name>
HTTP with cookie using host name 'moo'
- </name>
- <command>
+</name>
+<command>
-x http://%HOSTIP:%HTTPPORT http://moo/we/want/%TESTNUMBER -b none http://moo/we/want/%TESTNUMBER0002
</command>
<features>
+cookies
proxy
</features>
</client>
diff --git a/tests/data/test332 b/tests/data/test332
index d2bd8bb6e..e00f77231 100644
--- a/tests/data/test332
+++ b/tests/data/test332
@@ -22,10 +22,10 @@ returned
<server>
tftp
</server>
- <name>
+<name>
TFTP retrieve with blksize 400
- </name>
- <command>
+</name>
+<command>
tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER --tftp-blksize 400
</command>
</client>
@@ -33,12 +33,14 @@ tftp://%HOSTIP:%TFTPPORT//%TESTNUMBER --tftp-blksize 400
#
# Verify pseudo protocol after the test has been "shot"
<verify>
+<strip>
+^timeout = [5-6]$
+</strip>
<protocol>
opcode = 1
mode = octet
tsize = 0
blksize = 400
-timeout = 6
filename = /%TESTNUMBER
</protocol>
</verify>
diff --git a/tests/data/test333 b/tests/data/test333
index e0fc450d5..8f048e6cb 100644
--- a/tests/data/test333
+++ b/tests/data/test333
@@ -16,10 +16,10 @@ command-line
<server>
none
</server>
- <name>
+<name>
Try a non-boolean command line option with --no-
- </name>
- <command>
+</name>
+<command>
--no-proxy "hey" http://%HOSTIP:%NOLISTENPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test335 b/tests/data/test335
index 558d2ca77..a376f4018 100644
--- a/tests/data/test335
+++ b/tests/data/test335
@@ -63,10 +63,10 @@ http
crypto
proxy
</features>
- <name>
+<name>
HTTP with proxy Digest and site Digest with creds in URLs
- </name>
- <command>
+</name>
+<command>
http://digest:alot@data.from.server.requiring.digest.hohoho.com/%TESTNUMBER --proxy http://foo:bar@%HOSTIP:%HTTPPORT --proxy-digest --digest
</command>
</client>
diff --git a/tests/data/test336 b/tests/data/test336
index 89e9bffc0..f50b42adb 100644
--- a/tests/data/test336
+++ b/tests/data/test336
@@ -31,10 +31,10 @@ REPLY SIZE 500 no such command
<server>
ftp
</server>
- <name>
+<name>
FTP range download when SIZE doesn't work
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER --range 3-6
</command>
</client>
diff --git a/tests/data/test337 b/tests/data/test337
index f8ca6856e..d44a712fb 100644
--- a/tests/data/test337
+++ b/tests/data/test337
@@ -31,10 +31,10 @@ REPLY SIZE 213 file: 213, Size =51
<server>
ftp
</server>
- <name>
+<name>
FTP range download with SIZE returning extra crap
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER --range 3-6
</command>
</client>
diff --git a/tests/data/test338 b/tests/data/test338
index 4de597042..d3acd5f09 100644
--- a/tests/data/test338
+++ b/tests/data/test338
@@ -34,10 +34,10 @@ connection-monitor
<server>
http
</server>
- <name>
+<name>
ANYAUTH connection reuse of non-authed connection
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --next http://%HOSTIP:%HTTPPORT/%TESTNUMBER --anyauth -u foo:moo
</command>
</client>
diff --git a/tests/data/test339 b/tests/data/test339
index 8d5b90bdb..8c4340275 100644
--- a/tests/data/test339
+++ b/tests/data/test339
@@ -39,7 +39,7 @@ http
Check if --etag-save saved correct etag to a file
</name>
<command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER --etag-save log/etag%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --etag-save %LOGDIR/etag%TESTNUMBER
</command>
</client>
@@ -53,7 +53,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/etag%TESTNUMBER">
+<file name="%LOGDIR/etag%TESTNUMBER">
W/"asdf"
</file>
</verify>
diff --git a/tests/data/test34 b/tests/data/test34
index 3119ce22a..5d81a5a8f 100644
--- a/tests/data/test34
+++ b/tests/data/test34
@@ -41,10 +41,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbb
<server>
http
</server>
- <name>
+<name>
HTTP GET with chunked Transfer-Encoding
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test340 b/tests/data/test340
index 6c15dc190..c003e42af 100644
--- a/tests/data/test340
+++ b/tests/data/test340
@@ -18,10 +18,10 @@ singlecwd
<server>
ftp
</server>
- <name>
+<name>
FTP using %00 in path with singlecwd
- </name>
- <command>
+</name>
+<command>
--ftp-method singlecwd ftp://%HOSTIP:%FTPPORT/%00first/second/third/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test341 b/tests/data/test341
index 3c9f72ae5..4ebee11fc 100644
--- a/tests/data/test341
+++ b/tests/data/test341
@@ -39,7 +39,7 @@ http
Try to open a non existing file with --etag-compare should return an error
</name>
<command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER --etag-compare log/etag%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --etag-compare %LOGDIR/etag%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test342 b/tests/data/test342
index ca8957a5f..79f602563 100644
--- a/tests/data/test342
+++ b/tests/data/test342
@@ -33,11 +33,11 @@ http
<name>
Check if --etag-compare set correct etag in header
</name>
-<file name="log/etag%TESTNUMBER">
+<file name="%LOGDIR/etag%TESTNUMBER">
"21025-dc7-39462498"
</file>
<command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER --etag-compare log/etag%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --etag-compare %LOGDIR/etag%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test343 b/tests/data/test343
index faf6c9a5e..dd13708ce 100644
--- a/tests/data/test343
+++ b/tests/data/test343
@@ -33,11 +33,11 @@ http
<name>
Both --etag-compare and --etag-save to save new Etag
</name>
-<file name="log/etag%TESTNUMBER">
+<file name="%LOGDIR/etag%TESTNUMBER">
"21025-dc7-39462498"
</file>
<command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER --etag-compare log/etag%TESTNUMBER --etag-save log/out%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --etag-compare %LOGDIR/etag%TESTNUMBER --etag-save %LOGDIR/out%TESTNUMBER
</command>
</client>
@@ -52,7 +52,7 @@ Accept: */*
If-None-Match: "21025-dc7-39462498"
</protocol>
-<file name="log/out%TESTNUMBER">
+<file name="%LOGDIR/out%TESTNUMBER">
"21025-dc7-11111"
</file>
</verify>
diff --git a/tests/data/test344 b/tests/data/test344
index ec671d492..197c00489 100644
--- a/tests/data/test344
+++ b/tests/data/test344
@@ -34,7 +34,7 @@ http
Both --etag-compare and -save store new Etag using non-existing file
</name>
<command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER --etag-compare log/etag%TESTNUMBER --etag-save log/etag%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --etag-compare %LOGDIR/etag%TESTNUMBER --etag-save %LOGDIR/etag%TESTNUMBER
</command>
</client>
@@ -49,7 +49,7 @@ Accept: */*
If-None-Match: ""
</protocol>
-<file name="log/etag%TESTNUMBER">
+<file name="%LOGDIR/etag%TESTNUMBER">
"21025-dc7-11111"
</file>
</verify>
diff --git a/tests/data/test345 b/tests/data/test345
index 5619d4475..c6da676a8 100644
--- a/tests/data/test345
+++ b/tests/data/test345
@@ -33,11 +33,11 @@ http
<name>
Both --etag-compare and -save store new Etag using one pre-existing file
</name>
-<file name="log/etag%TESTNUMBER">
+<file name="%LOGDIR/etag%TESTNUMBER">
"21025-dc7-39462498"
</file>
<command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER --etag-compare log/etag%TESTNUMBER --etag-save log/etag%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --etag-compare %LOGDIR/etag%TESTNUMBER --etag-save %LOGDIR/etag%TESTNUMBER
</command>
</client>
@@ -52,7 +52,7 @@ Accept: */*
If-None-Match: "21025-dc7-39462498"
</protocol>
-<file name="log/etag%TESTNUMBER">
+<file name="%LOGDIR/etag%TESTNUMBER">
"21025-dc7-11111"
</file>
</verify>
diff --git a/tests/data/test347 b/tests/data/test347
index ef85d9d2c..606335c0d 100644
--- a/tests/data/test347
+++ b/tests/data/test347
@@ -39,7 +39,7 @@ http
--etag-save with blank incoming header
</name>
<command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER --etag-save log/etag%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --etag-save %LOGDIR/etag%TESTNUMBER
</command>
</client>
@@ -53,7 +53,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/etag%TESTNUMBER">
+<file name="%LOGDIR/etag%TESTNUMBER">
</file>
</verify>
diff --git a/tests/data/test348 b/tests/data/test348
index 8832a3810..55e9d608d 100644
--- a/tests/data/test348
+++ b/tests/data/test348
@@ -18,10 +18,10 @@ STOR 552 disk full
<server>
ftp
</server>
- <name>
+<name>
FTP upload file with 552 disk full response
- </name>
-<file name="log/test%TESTNUMBER.txt">
+</name>
+<file name="%LOGDIR/test%TESTNUMBER.txt">
data
to
see
@@ -29,8 +29,8 @@ that FTP
works
so does it?
</file>
- <command>
-ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T log/test%TESTNUMBER.txt
+<command>
+ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T %LOGDIR/test%TESTNUMBER.txt
</command>
</client>
diff --git a/tests/data/test349 b/tests/data/test349
index 7abd05797..c1106f2ac 100644
--- a/tests/data/test349
+++ b/tests/data/test349
@@ -21,10 +21,10 @@ This silly page doesn't reaaaaaly exist so you should not get it.
<server>
http
</server>
- <name>
+<name>
HTTP GET --fail-with-body on HTTP error return
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --fail-with-body
</command>
</client>
diff --git a/tests/data/test35 b/tests/data/test35
index b5feb1998..a098769aa 100644
--- a/tests/data/test35
+++ b/tests/data/test35
Binary files differ
diff --git a/tests/data/test350 b/tests/data/test350
index 6cb53fa11..6830d704d 100644
--- a/tests/data/test350
+++ b/tests/data/test350
@@ -32,10 +32,10 @@ dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
<server>
ftp
</server>
- <name>
+<name>
FTP root dir list multicwd
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT// --ftp-method multicwd
</command>
</client>
diff --git a/tests/data/test351 b/tests/data/test351
index 219677f78..ef21364ad 100644
--- a/tests/data/test351
+++ b/tests/data/test351
@@ -32,10 +32,10 @@ dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
<server>
ftp
</server>
- <name>
+<name>
FTP root dir list nocwd
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT// --ftp-method nocwd
</command>
</client>
diff --git a/tests/data/test352 b/tests/data/test352
index 5f498a23b..cfcdc1f10 100644
--- a/tests/data/test352
+++ b/tests/data/test352
@@ -32,10 +32,10 @@ dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
<server>
ftp
</server>
- <name>
+<name>
FTP root dir list singlecwd
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT// --ftp-method singlecwd
</command>
</client>
diff --git a/tests/data/test353 b/tests/data/test353
index 1adee379b..26115d675 100644
--- a/tests/data/test353
+++ b/tests/data/test353
@@ -32,10 +32,10 @@ dr-xr-xr-x 5 0 1 512 Oct 1 1997 usr
<server>
ftp
</server>
- <name>
+<name>
FTP home dir list singlecwd
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/ --ftp-method singlecwd
</command>
</client>
diff --git a/tests/data/test354 b/tests/data/test354
index cdd827051..dc6d732d8 100644
--- a/tests/data/test354
+++ b/tests/data/test354
@@ -26,10 +26,10 @@ REPLY USER 200 fine, proceed without password
<server>
ftp
</server>
- <name>
+<name>
FTP without password
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
diff --git a/tests/data/test355 b/tests/data/test355
index 98e59079a..67f7777ff 100644
--- a/tests/data/test355
+++ b/tests/data/test355
@@ -30,13 +30,13 @@ alt-svc
<server>
http
</server>
- <name>
+<name>
load Alt-Svc from file and use
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --alt-svc ""
</command>
-<file name="log/altsvc-%TESTNUMBER">
+<file name="%LOGDIR/altsvc-%TESTNUMBER">
h1 example.com 80 h1 %HOSTIP %HTTPPORT "20290222 22:19:28" 0 0
</file>
</client>
diff --git a/tests/data/test356 b/tests/data/test356
index 9f6459487..3fb001c58 100644
--- a/tests/data/test356
+++ b/tests/data/test356
@@ -17,6 +17,7 @@ Connection: close
Content-Type: text/html
Funny-head: yesyes
Alt-Svc: h1="nowhere.foo:-1"
+Alt-Svc: h1="nowhere.foo:-18446744073709551614"
Alt-Svc: h1="nowhere.foo:81", un-kno22!wn=":82"
Alt-Svc: h1="nowhere.foo:70000"
@@ -34,15 +35,15 @@ alt-svc
<server>
http
</server>
- <name>
+<name>
parse incoming Alt-Svc and save to file
- </name>
+</name>
<setenv>
# make debug-curl accept Alt-Svc over plain HTTP
CURL_ALTSVC_HTTP="yeah"
</setenv>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER --alt-svc "log/altsvc-%TESTNUMBER"
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --alt-svc "%LOGDIR/altsvc-%TESTNUMBER"
</command>
</client>
@@ -61,7 +62,7 @@ Accept: */*
# matches
s/\"([^\"]*)\"/TIMESTAMP/
</stripfile>
-<file name="log/altsvc-%TESTNUMBER" mode="text">
+<file name="%LOGDIR/altsvc-%TESTNUMBER" mode="text">
# Your alt-svc cache. https://curl.se/docs/alt-svc.html
# This file was generated by libcurl! Edit at your own risk.
h1 %HOSTIP %HTTPPORT h1 nowhere.foo 81 TIMESTAMP 0 0
diff --git a/tests/data/test357 b/tests/data/test357
index 8ddcdc90d..e7e4e6160 100644
--- a/tests/data/test357
+++ b/tests/data/test357
@@ -10,7 +10,7 @@ Expect
<reply>
# 417 means the server didn't like the Expect header
<data>
-HTTP/1.1 417 OK swsbounce
+HTTP/1.1 417 BAD swsbounce
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Content-Length: 0
@@ -25,7 +25,7 @@ Content-Length: 10
blablabla
</data1>
<datacheck>
-HTTP/1.1 417 OK swsbounce
+HTTP/1.1 417 BAD swsbounce
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Content-Length: 0
@@ -47,22 +47,15 @@ no-expect
<server>
http
</server>
- <name>
+<name>
HTTP PUT with Expect: 100-continue and 417 response
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -T log/test%TESTNUMBER.txt
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -T %LOGDIR/test%TESTNUMBER.txt --expect100-timeout 99
</command>
-<file name="log/test%TESTNUMBER.txt">
-Weird
- file
- to
- upload
-for
- testing
-the
- PUT
- feature
+# 1053700 x 'x', large enough to invoke the 100-continue behaviour
+<file name="%LOGDIR/test%TESTNUMBER.txt">
+%repeat[1053700 x x]%
</file>
</client>
@@ -73,24 +66,16 @@ PUT /we/want/%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 78
+Content-Length: 1053701
Expect: 100-continue
PUT /we/want/%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 78
+Content-Length: 1053701
-Weird
- file
- to
- upload
-for
- testing
-the
- PUT
- feature
+%repeat[1053700 x x]%
</protocol>
</verify>
</testcase>
diff --git a/tests/data/test358 b/tests/data/test358
index 0f8a9801b..5df596de0 100644
--- a/tests/data/test358
+++ b/tests/data/test358
@@ -36,17 +36,17 @@ h2c
http
http/2
</server>
- <name>
+<name>
HTTPS GET translated by alt-svc lookup to HTTP/2 GET
- </name>
+</name>
<setenv>
# make debug-curl accept Alt-Svc over plain HTTP
CURL_ALTSVC_HTTP="yeah"
</setenv>
- <command>
---http2 --alt-svc "log/altsvc-%TESTNUMBER" "http://%HOSTIP:%HTTPPORT/%TESTNUMBER" "http://%HOSTIP:%HTTPPORT/%TESTNUMBER"
+<command>
+--http2 --alt-svc "%LOGDIR/altsvc-%TESTNUMBER" "http://%HOSTIP:%HTTPPORT/%TESTNUMBER" "http://%HOSTIP:%HTTPPORT/%TESTNUMBER"
</command>
-<file name="log/altsvc-%TESTNUMBER">
+<file name="%LOGDIR/altsvc-%TESTNUMBER">
h2 %HOSTIP %HTTPPORT h2 %HOSTIP %HTTP2PORT "20290222 22:19:28" 0 0
</file>
@@ -85,7 +85,7 @@ s/^server: nghttpx.*\r?\n//
# matches
s/\"2([^\"]*)\"/TIMESTAMP/
</stripfile>
-<file name="log/altsvc-%TESTNUMBER" mode="text">
+<file name="%LOGDIR/altsvc-%TESTNUMBER" mode="text">
# Your alt-svc cache. https://curl.se/docs/alt-svc.html
# This file was generated by libcurl! Edit at your own risk.
h2 %HOSTIP %HTTPPORT h2 %HOSTIP %HTTP2PORT TIMESTAMP 0 0
diff --git a/tests/data/test359 b/tests/data/test359
index 0e684e39e..117b4defe 100644
--- a/tests/data/test359
+++ b/tests/data/test359
@@ -36,17 +36,17 @@ h2c
https
http/2
</server>
- <name>
+<name>
HTTPS GET translated by alt-svc lookup to HTTP/2 GET
- </name>
+</name>
<setenv>
# make debug-curl accept Alt-Svc over plain HTTP
CURL_ALTSVC_HTTP="yeah"
</setenv>
- <command>
---http2 --alt-svc "log/altsvc-%TESTNUMBER" "http://%HOSTIP:%HTTPSPORT/%TESTNUMBER" "http://%HOSTIP:%HTTPSPORT/%TESTNUMBER"
+<command>
+--http2 --alt-svc "%LOGDIR/altsvc-%TESTNUMBER" "http://%HOSTIP:%HTTPSPORT/%TESTNUMBER" "http://%HOSTIP:%HTTPSPORT/%TESTNUMBER"
</command>
-<file name="log/altsvc-%TESTNUMBER">
+<file name="%LOGDIR/altsvc-%TESTNUMBER">
h2 %HOSTIP %HTTPSPORT h2 %HOSTIP %HTTP2PORT "20290222 22:19:28" 0 0
</file>
@@ -85,7 +85,7 @@ s/^server: nghttpx.*\r?\n//
# matches
s/\"2([^\"]*)\"/TIMESTAMP/
</stripfile>
-<file name="log/altsvc-%TESTNUMBER" mode="text">
+<file name="%LOGDIR/altsvc-%TESTNUMBER" mode="text">
# Your alt-svc cache. https://curl.se/docs/alt-svc.html
# This file was generated by libcurl! Edit at your own risk.
h2 %HOSTIP %HTTPSPORT h2 %HOSTIP %HTTP2PORT TIMESTAMP 0 0
diff --git a/tests/data/test36 b/tests/data/test36
index fb4c885eb..1f055726b 100644
--- a/tests/data/test36
+++ b/tests/data/test36
@@ -38,10 +38,10 @@ a
<server>
http
</server>
- <name>
+<name>
HTTP GET with bad chunked Transfer-Encoding
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test360 b/tests/data/test360
index e67c847ed..b7d570d7b 100644
--- a/tests/data/test360
+++ b/tests/data/test360
@@ -11,10 +11,10 @@
<server>
http
</server>
- <name>
+<name>
Error on both --fail-with-body and --fail
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --fail-with-body --fail
</command>
</client>
diff --git a/tests/data/test361 b/tests/data/test361
index ec135866a..4fbf3d5ea 100644
--- a/tests/data/test361
+++ b/tests/data/test361
@@ -21,10 +21,10 @@ This silly page doesn't reaaaaaly exist so you should not get it.
<server>
http
</server>
- <name>
+<name>
HTTP GET --fail-with-body on HTTP error return - twice
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER --fail-with-body
</command>
</client>
diff --git a/tests/data/test362 b/tests/data/test362
index ad852c224..e8ce9731e 100644
--- a/tests/data/test362
+++ b/tests/data/test362
@@ -12,10 +12,10 @@ STOR
<server>
ftp
</server>
- <name>
+<name>
FTP resume upload file with nothing to start from
- </name>
-<file name="log/test%TESTNUMBER.txt">
+</name>
+<file name="%LOGDIR/test%TESTNUMBER.txt">
data
to
see
@@ -23,8 +23,8 @@ that FTP
works
so does it?
</file>
- <command>
-ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T log/test%TESTNUMBER.txt --continue-at -
+<command>
+ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T %LOGDIR/test%TESTNUMBER.txt --continue-at -
</command>
</client>
diff --git a/tests/data/test363 b/tests/data/test363
index cd8fc435c..7cc7dad99 100644
--- a/tests/data/test363
+++ b/tests/data/test363
@@ -50,16 +50,16 @@ proxy
http
http-proxy
</server>
- <name>
+<name>
CONNECT with short sends
- </name>
+</name>
<setenv>
# make the first send cut off after this amount of data
-CURL_SMALLREQSEND=48
+CURL_SMALLREQSEND=8
# make repeated sends small too
-CURL_SMALLSENDS=40
+CURL_SMALLSENDS=8
</setenv>
- <command>
+<command>
http://test.%TESTNUMBER:%HTTPPORT/we/want/that/page/%TESTNUMBER -p -x %HOSTIP:%PROXYPORT -d "datatopost=ohthatsfunyesyes"
</command>
</client>
diff --git a/tests/data/test364 b/tests/data/test364
index 5afb8c96d..0e2ccd151 100644
--- a/tests/data/test364
+++ b/tests/data/test364
@@ -24,13 +24,13 @@ SSL
<server>
https
</server>
- <name>
+<name>
HTTPS PUT of small file
- </name>
- <command>
--k https://%HOSTIP:%HTTPSPORT/we/want/%TESTNUMBER -T log/test%TESTNUMBER.txt
+</name>
+<command>
+-k https://%HOSTIP:%HTTPSPORT/we/want/%TESTNUMBER -T %LOGDIR/test%TESTNUMBER.txt
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
%repeat[200 x banana]%
</file>
</client>
@@ -43,7 +43,6 @@ Host: %HOSTIP:%HTTPSPORT
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 1201
-Expect: 100-continue
%repeat[200 x banana]%
</protocol>
diff --git a/tests/data/test365 b/tests/data/test365
index add760f6c..05ab8faa3 100644
--- a/tests/data/test365
+++ b/tests/data/test365
@@ -43,10 +43,10 @@ chunked data fun
<server>
http
</server>
- <name>
+<name>
HTTP/1.1 with chunked AND Content-Length headers
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test366 b/tests/data/test366
index 748ef4a0d..d2193ff14 100644
--- a/tests/data/test366
+++ b/tests/data/test366
@@ -10,7 +10,7 @@ retry
# Server-side
<reply>
<data>
-HTTP/1.1 503 OK
+HTTP/1.1 503 BAD
Date: Tue, 09 Nov 2010 14:49:00 GMT
Content-Length: 21
Retry-After: 200
@@ -26,10 +26,10 @@ server not available
<server>
http
</server>
- <name>
+<name>
HTTP --retry-max-time with too long Retry-After
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --retry 2 --retry-max-time 10
</command>
</client>
diff --git a/tests/data/test368 b/tests/data/test368
index 505ce34ea..69b63e94f 100644
--- a/tests/data/test368
+++ b/tests/data/test368
@@ -26,10 +26,10 @@ Connection: close
<server>
http
</server>
- <name>
+<name>
Append dash if -r range specified without one
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -r 4
</command>
</client>
diff --git a/tests/data/test369 b/tests/data/test369
index e1e2b32da..17a6b4480 100644
--- a/tests/data/test369
+++ b/tests/data/test369
@@ -29,7 +29,7 @@ http
--etag-save with bad path then working transfer
</name>
<command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER --etag-save log/nowhere/etag%TESTNUMBER --next http://%HOSTIP:%HTTPPORT/%TESTNUMBER --include --output log/curl%TESTNUMBER.out
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --etag-save %LOGDIR/nowhere/etag%TESTNUMBER --next http://%HOSTIP:%HTTPPORT/%TESTNUMBER --include --output %LOGDIR/curl%TESTNUMBER.out
</command>
</client>
diff --git a/tests/data/test37 b/tests/data/test37
index f87985962..d5e79824c 100644
--- a/tests/data/test37
+++ b/tests/data/test37
@@ -19,10 +19,10 @@ FAILURE
<server>
http
</server>
- <name>
+<name>
HTTP GET with nothing returned from server
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test370 b/tests/data/test370
index 8a5af1e05..671e35f63 100644
--- a/tests/data/test370
+++ b/tests/data/test370
@@ -22,7 +22,7 @@ none
--etag-save with bad path - no transfer
</name>
<command>
-http://%HOSTIP:%NOLISTENPORT/%TESTNUMBER --etag-save log/nowhere/etag%TESTNUMBER
+http://%HOSTIP:%NOLISTENPORT/%TESTNUMBER --etag-save %LOGDIR/nowhere/etag%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test371 b/tests/data/test371
index 3a44db575..b58237f35 100644
--- a/tests/data/test371
+++ b/tests/data/test371
@@ -31,11 +31,11 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
using more -o than URLs in the command line
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o log/dump -o log/dump2 --no-progress-meter
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o %LOGDIR/dump -o %LOGDIR/dump2 --no-progress-meter
</command>
</client>
diff --git a/tests/data/test376 b/tests/data/test376
index 34924c7ec..991077caf 100644
--- a/tests/data/test376
+++ b/tests/data/test376
@@ -31,11 +31,11 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
--remove-on-error
- </name>
+</name>
<command option="no-output">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o log/save-%TESTNUMBER --remove-on-error
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o %LOGDIR/save-%TESTNUMBER --remove-on-error
</command>
</client>
@@ -58,7 +58,7 @@ Accept: */*
</protocol>
# the file should be empty now
-<file name="log/save-%TESTNUMBER">
+<file name="%LOGDIR/save-%TESTNUMBER">
</file>
</verify>
</testcase>
diff --git a/tests/data/test378 b/tests/data/test378
index 650e7d4e1..ef77225be 100644
--- a/tests/data/test378
+++ b/tests/data/test378
@@ -17,11 +17,11 @@ HTTP POST
<server>
none
</server>
- <name>
+<name>
Reject using -T and -d at once
- </name>
- <command>
--T log/%TESTNUMBER -d input http://never-accessed
+</name>
+<command>
+-T %LOGDIR/%TESTNUMBER -d input http://never-accessed
</command>
</client>
diff --git a/tests/data/test379 b/tests/data/test379
index c7ffc1714..964cbdf05 100644
--- a/tests/data/test379
+++ b/tests/data/test379
@@ -28,17 +28,17 @@ Funny-head: yesyes
#
# Client-side
<client>
-<file name="log/save">
+<file name="%LOGDIR/save">
exists before command runs
</file>
<server>
http
</server>
- <name>
+<name>
--remove-on-error with --no-clobber and an added number
- </name>
+</name>
<command option="no-output">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o log/save --remove-on-error --no-clobber
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o %LOGDIR/save --remove-on-error --no-clobber
</command>
</client>
@@ -61,11 +61,11 @@ Accept: */*
</protocol>
# this file should be untouched
-<file name="log/save">
+<file name="%LOGDIR/save">
exists before command runs
</file>
# the file should be empty now
-<file2 name="log/save.1">
+<file2 name="%LOGDIR/save.1">
</file2>
</verify>
</testcase>
diff --git a/tests/data/test38 b/tests/data/test38
index 0558700d1..abd2d3e36 100644
--- a/tests/data/test38
+++ b/tests/data/test38
@@ -24,13 +24,13 @@ todelooooo lalalala yada yada, we know nothing about ranges ;-)
<server>
http
</server>
- <name>
+<name>
HTTP resume request without server supporting it
- </name>
+</name>
<command option="no-output">
-http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -C - --no-include -o log/fewl%TESTNUMBER.txt
+http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -C - --no-include -o %LOGDIR/fewl%TESTNUMBER.txt
</command>
-<file name="log/fewl%TESTNUMBER.txt">
+<file name="%LOGDIR/fewl%TESTNUMBER.txt">
This text is here to simulate a partly downloaded file to resume
download on.
</file>
@@ -51,7 +51,7 @@ Accept: */*
</protocol>
# the download target file must remain untouched
-<file name="log/fewl%TESTNUMBER.txt">
+<file name="%LOGDIR/fewl%TESTNUMBER.txt">
This text is here to simulate a partly downloaded file to resume
download on.
</file>
diff --git a/tests/data/test380 b/tests/data/test380
index a1849c178..bd0c69765 100644
--- a/tests/data/test380
+++ b/tests/data/test380
@@ -38,9 +38,9 @@ pick netrc password based on user name in URL
</name>
<command>
---netrc --netrc-file log/netrc%TESTNUMBER ftp://mary@%HOSTIP:%FTPPORT/
+--netrc --netrc-file %LOGDIR/netrc%TESTNUMBER ftp://mary@%HOSTIP:%FTPPORT/
</command>
-<file name="log/netrc%TESTNUMBER" >
+<file name="%LOGDIR/netrc%TESTNUMBER" >
# the following two lines were created while testing curl
machine %HOSTIP login frankenstein password wrongone
machine %HOSTIP login mary password yram
diff --git a/tests/data/test381 b/tests/data/test381
index c44fa74bc..902cc91d1 100644
--- a/tests/data/test381
+++ b/tests/data/test381
@@ -42,9 +42,9 @@ netrc-optional lets URL creds override netrc
</name>
<command>
---netrc-optional --netrc-file log/netrc%TESTNUMBER ftp://mary:drfrank@%HOSTIP:%FTPPORT/
+--netrc-optional --netrc-file %LOGDIR/netrc%TESTNUMBER ftp://mary:drfrank@%HOSTIP:%FTPPORT/
</command>
-<file name="log/netrc%TESTNUMBER" >
+<file name="%LOGDIR/netrc%TESTNUMBER" >
# the following two lines were created while testing curl
machine %HOSTIP login frankenstein password wrongone
machine %HOSTIP login mary password yram
diff --git a/tests/data/test383 b/tests/data/test383
index 6ba8f5e2d..bb8cb666d 100644
--- a/tests/data/test383
+++ b/tests/data/test383
@@ -31,10 +31,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP with --json
- </name>
- <command>
+</name>
+<command>
--json '{ "drink": "coffe" }' http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test384 b/tests/data/test384
index 9651f9f95..6148ef40d 100644
--- a/tests/data/test384
+++ b/tests/data/test384
@@ -31,9 +31,9 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP with --json from stdin
- </name>
+</name>
<stdin>
{ "drink": "coffe" }
</stdin>
diff --git a/tests/data/test385 b/tests/data/test385
index ee543fa64..b2e3c4d8c 100644
--- a/tests/data/test385
+++ b/tests/data/test385
@@ -31,10 +31,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP with --json x 2
- </name>
- <command>
+</name>
+<command>
--json '{ "drink": "coffe",' --json ' "crunch": "cookie" }' http://%HOSTIP:%HTTPPORT/%TESTNUMBER -H "Content-Type: drinks/hot"
</command>
</client>
diff --git a/tests/data/test386 b/tests/data/test386
index 5e2fd6adf..ed20f5e45 100644
--- a/tests/data/test386
+++ b/tests/data/test386
@@ -45,10 +45,10 @@ hello
<server>
http
</server>
- <name>
+<name>
HTTP with --json + --next
- </name>
- <command>
+</name>
+<command>
--json '{ "drink": "coffe" }' http://%HOSTIP:%HTTPPORT/%TESTNUMBER --next http://%HOSTIP:%HTTPPORT/%TESTNUMBER0002
</command>
</client>
diff --git a/tests/data/test387 b/tests/data/test387
index 015ec25f1..d0e5c95ed 100644
--- a/tests/data/test387
+++ b/tests/data/test387
@@ -9,10 +9,11 @@ gzip
#
# Server-side
<reply>
-<data nocheck="yes">
-HTTP/1.1 200 OK
-Transfer-Encoding: gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip
-
+<data nocheck="yes" crlf="yes">
+HTTP/1.1 200 OK
+Content-Length: 6
+Transfer-Encoding: gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip
+
-foo-
</data>
</reply>
@@ -23,11 +24,14 @@ Transfer-Encoding: gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,gzip,g
<server>
http
</server>
- <name>
+<features>
+libz
+</features>
+<name>
Response with overly long compression chain
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -sS
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -sS --tr-encoding
</command>
</client>
@@ -39,6 +43,8 @@ GET /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
+Connection: TE
+TE: gzip
</protocol>
@@ -47,7 +53,7 @@ Accept: */*
61
</errorcode>
<stderr mode="text">
-curl: (61) Reject response due to 5 content encodings
+curl: (61) Reject response due to more than 5 content encodings
</stderr>
</verify>
</testcase>
diff --git a/tests/data/test388 b/tests/data/test388
index 3a0214a0b..300c88f75 100644
--- a/tests/data/test388
+++ b/tests/data/test388
@@ -77,10 +77,10 @@ http
!SSPI
crypto
</features>
- <name>
+<name>
HTTP with Digest and multiple qop values with leading space
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER0001 -u testuser:testpass --digest http://%HOSTIP:%HTTPPORT/%TESTNUMBER0002
</command>
</client>
diff --git a/tests/data/test389 b/tests/data/test389
index f805bc277..fcb29f5b8 100644
--- a/tests/data/test389
+++ b/tests/data/test389
@@ -31,10 +31,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
*.localhost is a local host
- </name>
- <command>
+</name>
+<command>
http://curlmachine.localhost:%HTTPPORT/%TESTNUMBER
</command>
# Ensure that we're running on localhost
diff --git a/tests/data/test39 b/tests/data/test39
index f48e639f8..182961749 100644
--- a/tests/data/test39
+++ b/tests/data/test39
@@ -25,14 +25,14 @@ Mime
<server>
http
</server>
- <name>
+<name>
HTTP RFC1867-type formposting with filename= and type=
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -F name=daniel -F tool=curl --form-string "str1=@literal" --form-string "str2=<verbatim;type=xxx/yyy" -F "file=@log/test%TESTNUMBER.txt;type=moo/foobar;filename=fakerfile" -F file2=@log/test%TESTNUMBER.txt -F "file3=@\"log/test%TESTNUMBER.txt\";type=mo/foo;filename=\"f\\\\\\\\ak\\\\\\er,\\\\an\\d;.t\\\"xt\"" -F 'file4=@"log/test%TESTNUMBER.txt"; filename="A\\AA\"\"\\\"ZZZ"'
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -F name=daniel -F tool=curl --form-string "str1=@literal" --form-string "str2=<verbatim;type=xxx/yyy" -F "file=@%LOGDIR/test%TESTNUMBER.txt;type=moo/foobar;filename=fakerfile" -F file2=@%LOGDIR/test%TESTNUMBER.txt -F "file3=@\"%LOGDIR/test%TESTNUMBER.txt\";type=mo/foo;filename=\"f\\\\\\\\ak\\\\\\er,\\\\an\\d;.t\\\"xt\"" -F 'file4=@"%LOGDIR/test%TESTNUMBER.txt"; filename="A\\AA\"\"\\\"ZZZ"'
</command>
# We create this file before the command is invoked!
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
foo bar
This is a bar foo
bar
@@ -50,7 +50,7 @@ POST /we/want/%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 1180
+Content-Length: 1234
Content-Type: multipart/form-data; boundary=----------------------------24e78000bd32
------------------------------24e78000bd32
diff --git a/tests/data/test390 b/tests/data/test390
index 80e8c2b70..83f1cec42 100644
--- a/tests/data/test390
+++ b/tests/data/test390
@@ -27,7 +27,7 @@ Content-Type: text/html
#
# Client-side
<client>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
%repeat[1000 x hellofile!]%
</file>
<server>
@@ -38,7 +38,7 @@ ftp
curl HTTP, FILE and FTP in parallel
</name>
<command option="no-output">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER file://localhost%FILE_PWD/log/test%TESTNUMBER.txt ftp://%HOSTIP:%FTPPORT/%TESTNUMBER0002 --parallel -o log/%TESTNUMBER.a -o log/%TESTNUMBER.b -o log/%TESTNUMBER.c
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER file://localhost%FILE_PWD/%LOGDIR/test%TESTNUMBER.txt ftp://%HOSTIP:%FTPPORT/%TESTNUMBER0002 --parallel -o %LOGDIR/%TESTNUMBER.a -o %LOGDIR/%TESTNUMBER.b -o %LOGDIR/%TESTNUMBER.c
</command>
</client>
diff --git a/tests/data/test391 b/tests/data/test391
index 1eff2ef3e..24428a08f 100644
--- a/tests/data/test391
+++ b/tests/data/test391
@@ -45,10 +45,10 @@ Content-Type: text/html
<server>
http
</server>
- <name>
+<name>
--path-as-is with redirect, keeping dotdots
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/../../%TESTNUMBER --path-as-is -L
</command>
</client>
diff --git a/tests/data/test392 b/tests/data/test392
index 24430c131..5c1076c82 100644
--- a/tests/data/test392
+++ b/tests/data/test392
@@ -27,19 +27,22 @@ boo
<server>
http
</server>
- <name>
+<name>
HTTP secure cookies over localhost
- </name>
+</name>
<setenv>
TZ=GMT
</setenv>
- <command>
+<command>
http://localhost:%HTTPPORT/%TESTNUMBER -b none http://localhost:%HTTPPORT/%TESTNUMBER
</command>
<precheck>
perl -e "print 'Test requires default test server host' if ( '%HOSTIP' ne '127.0.0.1' );"
</precheck>
+<features>
+cookies
+</features>
</client>
# Verify data after the test has been "shot"
diff --git a/tests/data/test393 b/tests/data/test393
index 797b4f1eb..0cbbf2d2d 100644
--- a/tests/data/test393
+++ b/tests/data/test393
@@ -37,10 +37,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP max-filesize and out-of-range Content-Length
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --max-filesize 2000000
</command>
</client>
diff --git a/tests/data/test394 b/tests/data/test394
index 9d2779d89..2154297d2 100644
--- a/tests/data/test394
+++ b/tests/data/test394
@@ -32,10 +32,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP with rubbish in Content-Length
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test395 b/tests/data/test395
index 541b66b50..9bdb2e24a 100644
--- a/tests/data/test395
+++ b/tests/data/test395
@@ -31,10 +31,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP and out-of-range Content-Length
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test396 b/tests/data/test396
index 11dd1a901..4454184ea 100644
--- a/tests/data/test396
+++ b/tests/data/test396
@@ -174,10 +174,10 @@ zstd
<server>
http
</server>
- <name>
+<name>
HTTP GET zstd compressed content
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --compressed
</command>
</client>
diff --git a/tests/data/test397 b/tests/data/test397
index 4ad130a76..956bb83e6 100644
--- a/tests/data/test397
+++ b/tests/data/test397
@@ -170,10 +170,10 @@ zstd
<server>
http
</server>
- <name>
+<name>
HTTP GET zstd compressed content of size more than CURL_MAX_WRITE_SIZE
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --compressed
</command>
</client>
diff --git a/tests/data/test398 b/tests/data/test398
index b949064d2..227478b5b 100644
--- a/tests/data/test398
+++ b/tests/data/test398
@@ -35,10 +35,10 @@ Date: Tue, 09 Nov 2010 14:49:00 GMT
<server>
http
</server>
- <name>
+<name>
Reject HTTP/1.1 response with colon-less header
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test399 b/tests/data/test399
index da4bae5fd..da4b3f7cf 100644
--- a/tests/data/test399
+++ b/tests/data/test399
@@ -15,11 +15,11 @@ http
<name>
65536 bytes long host name in URL
</name>
-<file name="log/input%TESTNUM">
+<file name="%LOGDIR/input%TESTNUM">
url = http://%repeat[65536 x a]%/399
</file>
<command>
--K log/input%TESTNUM
+-K %LOGDIR/input%TESTNUM
</command>
</client>
diff --git a/tests/data/test4 b/tests/data/test4
index c0b4f05d3..58e1650b0 100644
--- a/tests/data/test4
+++ b/tests/data/test4
@@ -26,10 +26,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
Replaced internal and added custom HTTP headers
- </name>
- <command>
+</name>
+<command>
-H "extra-header: here" -H "Accept: replaced" -H "X-Custom-Header;" -H "X-Test: foo; " -H "X-Test:" -H "X-Test2: foo;" -H "X-Test3: " -H "X-Test4; " -H "X-Test5;ignored" http://%HOSTIP:%HTTPPORT/%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test40 b/tests/data/test40
index ad437d07d..3f5695658 100644
--- a/tests/data/test40
+++ b/tests/data/test40
@@ -49,10 +49,10 @@ body
<server>
http
</server>
- <name>
+<name>
HTTP redirect with whitespace after ? (and conversion)
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/we/are/all/twits/%TESTNUMBER -L
</command>
</client>
diff --git a/tests/data/test400 b/tests/data/test400
index f2d326382..db774bf12 100644
--- a/tests/data/test400
+++ b/tests/data/test400
@@ -36,10 +36,10 @@ SSL
<server>
ftps
</server>
- <name>
+<name>
FTPS dir list PASV unencrypted data
- </name>
- <command>
+</name>
+<command>
-k --ftp-ssl-control ftps://%HOSTIP:%FTPSPORT/
</command>
</client>
diff --git a/tests/data/test401 b/tests/data/test401
index ac4af9772..5124447d8 100644
--- a/tests/data/test401
+++ b/tests/data/test401
@@ -16,10 +16,10 @@ SSL
<server>
ftps
</server>
- <name>
+<name>
FTPS PASV upload file
- </name>
-<file name="log/test%TESTNUMBER.txt">
+</name>
+<file name="%LOGDIR/test%TESTNUMBER.txt">
data
to
see
@@ -27,8 +27,8 @@ that FTPS
works
so does it?
</file>
- <command>
--k --ftp-ssl-control ftps://%HOSTIP:%FTPSPORT/%TESTNUMBER -T log/test%TESTNUMBER.txt
+<command>
+-k --ftp-ssl-control ftps://%HOSTIP:%FTPSPORT/%TESTNUMBER -T %LOGDIR/test%TESTNUMBER.txt
</command>
</client>
diff --git a/tests/data/test402 b/tests/data/test402
index 5c7bc678e..86283749a 100644
--- a/tests/data/test402
+++ b/tests/data/test402
@@ -15,10 +15,10 @@ SSL
<server>
ftp
</server>
- <name>
+<name>
FTP SSL required on non-SSL server
- </name>
- <command>
+</name>
+<command>
-k --ftp-ssl-reqd ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test403 b/tests/data/test403
index 7e4d2bff5..7c2904afb 100644
--- a/tests/data/test403
+++ b/tests/data/test403
@@ -38,10 +38,10 @@ SSL
<server>
ftps
</server>
- <name>
+<name>
FTPS with CCC not supported by server
- </name>
- <command>
+</name>
+<command>
-k --ftp-ssl-control --ftp-ssl-ccc ftps://%HOSTIP:%FTPSPORT/
</command>
</client>
diff --git a/tests/data/test404 b/tests/data/test404
index 0f73325eb..8461abfc0 100644
--- a/tests/data/test404
+++ b/tests/data/test404
@@ -15,10 +15,10 @@ SSL
<server>
ftps
</server>
- <name>
+<name>
FTPS with invalid cacert
- </name>
- <command>
+</name>
+<command>
--ftp-ssl-control --cacert moooo ftps://%HOSTIP:%FTPSPORT/
</command>
</client>
diff --git a/tests/data/test405 b/tests/data/test405
index fc291d1ab..90369b8ad 100644
--- a/tests/data/test405
+++ b/tests/data/test405
@@ -15,10 +15,10 @@ SSL
<server>
ftp
</server>
- <name>
+<name>
FTPS operation to FTP port
- </name>
- <command>
+</name>
+<command>
-m 5 -k ftps://%HOSTIP:%FTPPORT/path/to/file/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test406 b/tests/data/test406
index 01d83dc95..eca49d0d3 100644
--- a/tests/data/test406
+++ b/tests/data/test406
@@ -36,10 +36,10 @@ SSL
<server>
ftps
</server>
- <name>
+<name>
FTPS dir list, PORT with specified IP
- </name>
- <command>
+</name>
+<command>
-k --ftp-ssl-control -P %CLIENTIP ftps://%HOSTIP:%FTPSPORT/
</command>
</client>
diff --git a/tests/data/test407 b/tests/data/test407
index 4f2591e98..8b35a9f2b 100644
--- a/tests/data/test407
+++ b/tests/data/test407
@@ -25,10 +25,10 @@ SSL
<server>
ftps
</server>
- <name>
+<name>
Get two FTPS files from the same remote dir: no second CWD
- </name>
- <command>
+</name>
+<command>
-k --ftp-ssl-control ftps://%HOSTIP:%FTPSPORT/a/path/%TESTNUMBER ftps://%HOSTIP:%FTPSPORT/a/path/%TESTNUMBER
</command>
<stdout>
diff --git a/tests/data/test408 b/tests/data/test408
index 2516fc332..594eb01aa 100644
--- a/tests/data/test408
+++ b/tests/data/test408
@@ -21,13 +21,13 @@ SSL
<server>
ftps
</server>
- <name>
+<name>
FTPS PORT upload with CWD
- </name>
- <command>
--k --ftp-ssl-control ftps://%HOSTIP:%FTPSPORT/CWD/STOR/RETR/%TESTNUMBER -T log/upload%TESTNUMBER -P -
+</name>
+<command>
+-k --ftp-ssl-control ftps://%HOSTIP:%FTPSPORT/CWD/STOR/RETR/%TESTNUMBER -T %LOGDIR/upload%TESTNUMBER -P -
</command>
-<file name="log/upload%TESTNUMBER">
+<file name="%LOGDIR/upload%TESTNUMBER">
Moooooooooooo
upload this
</file>
diff --git a/tests/data/test409 b/tests/data/test409
index ea6e79560..a1f902933 100644
--- a/tests/data/test409
+++ b/tests/data/test409
@@ -16,10 +16,10 @@ SSL
<server>
ftps
</server>
- <name>
+<name>
FTPS PASV upload file
- </name>
-<file name="log/test%TESTNUMBER.txt">
+</name>
+<file name="%LOGDIR/test%TESTNUMBER.txt">
data
to
see
@@ -27,8 +27,8 @@ that FTP
works
so does it?
</file>
- <command>
--k --ftp-ssl-control ftps://%HOSTIP:%FTPSPORT/%TESTNUMBER -T log/test%TESTNUMBER.txt
+<command>
+-k --ftp-ssl-control ftps://%HOSTIP:%FTPSPORT/%TESTNUMBER -T %LOGDIR/test%TESTNUMBER.txt
</command>
</client>
diff --git a/tests/data/test41 b/tests/data/test41
index 7a133307d..4e5fa84ad 100644
--- a/tests/data/test41
+++ b/tests/data/test41
@@ -18,10 +18,10 @@ Mime
<server>
http
</server>
- <name>
+<name>
HTTP formpost with missing file
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -F moo=@boo
</command>
</client>
diff --git a/tests/data/test410 b/tests/data/test410
index 06999fbaa..79d12def6 100644
--- a/tests/data/test410
+++ b/tests/data/test410
@@ -28,15 +28,15 @@ SSL
<server>
https
</server>
- <name>
+<name>
HTTPS GET with very long request header
- </name>
+</name>
# 14 characters repeated 3500 times makes 49000 bytes
-<file name="log/file%TESTNUMBER">
+<file name="%LOGDIR/file%TESTNUMBER">
Long: %repeat[3500 x header content]%
</file>
- <command>
--k https://%HOSTIP:%HTTPSPORT/%TESTNUMBER -H @log/file%TESTNUMBER
+<command>
+-k https://%HOSTIP:%HTTPSPORT/%TESTNUMBER -H @%LOGDIR/file%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test411 b/tests/data/test411
index 912f07c6c..cdfdd46b4 100644
--- a/tests/data/test411
+++ b/tests/data/test411
@@ -16,11 +16,11 @@
<server>
none
</server>
- <name>
+<name>
-K with missing file causes error
- </name>
- <command>
--K log/missing http://localhost
+</name>
+<command>
+-K %LOGDIR/missing http://localhost
</command>
</client>
@@ -28,7 +28,7 @@ none
# Verify data after the test has been "shot"
<verify>
<stderr mode="text">
-curl: cannot read config from 'log/missing'
+curl: cannot read config from '%LOGDIR/missing'
curl: option -K: error encountered when reading a file
%if manual
curl: try 'curl --help' or 'curl --manual' for more information
diff --git a/tests/data/test412 b/tests/data/test412
index 0dbc0cea2..de607baa2 100644
--- a/tests/data/test412
+++ b/tests/data/test412
@@ -33,17 +33,17 @@ debug
<server>
http
</server>
- <name>
+<name>
alt-svc using host name with trailing dot in URL
- </name>
+</name>
<setenv>
# make debug-curl accept Alt-Svc over plain HTTP
CURL_ALTSVC_HTTP="yeah"
</setenv>
- <command>
---alt-svc "log/altsvc-%TESTNUMBER" "http://whohoo.:12345/%TESTNUMBER"
+<command>
+--alt-svc "%LOGDIR/altsvc-%TESTNUMBER" "http://whohoo.:12345/%TESTNUMBER"
</command>
-<file name="log/altsvc-%TESTNUMBER">
+<file name="%LOGDIR/altsvc-%TESTNUMBER">
h1 whohoo 12345 h1 %HOSTIP %HTTPPORT "20290222 22:19:28" 0 0
</file>
diff --git a/tests/data/test413 b/tests/data/test413
index 975b3e37c..8639306e0 100644
--- a/tests/data/test413
+++ b/tests/data/test413
@@ -33,17 +33,17 @@ debug
<server>
http
</server>
- <name>
+<name>
alt-svc using host name with trailing dot on host from file
- </name>
+</name>
<setenv>
# make debug-curl accept Alt-Svc over plain HTTP
CURL_ALTSVC_HTTP="yeah"
</setenv>
- <command>
---alt-svc "log/altsvc-%TESTNUMBER" "http://whohoo:12345/%TESTNUMBER"
+<command>
+--alt-svc "%LOGDIR/altsvc-%TESTNUMBER" "http://whohoo:12345/%TESTNUMBER"
</command>
-<file name="log/altsvc-%TESTNUMBER">
+<file name="%LOGDIR/altsvc-%TESTNUMBER">
h1 whohoo. 12345 h1 %HOSTIP %HTTPPORT "20290222 22:19:28" 0 0
</file>
diff --git a/tests/data/test414 b/tests/data/test414
index 2211d0f40..391ed0d06 100644
--- a/tests/data/test414
+++ b/tests/data/test414
@@ -55,7 +55,7 @@ https
HTTPS sec-cookie, HTTP redirect, same name cookie, redirect back
</name>
<command>
-https://attack.invalid:%HTTPSPORT/a/b/%TESTNUMBER -k -c log/cookie%TESTNUMBER --resolve attack.invalid:%HTTPSPORT:%HOSTIP --resolve attack.invalid:%HTTPPORT:%HOSTIP -L
+https://attack.invalid:%HTTPSPORT/a/b/%TESTNUMBER -k -c %LOGDIR/cookie%TESTNUMBER --resolve attack.invalid:%HTTPSPORT:%HOSTIP --resolve attack.invalid:%HTTPPORT:%HOSTIP -L
</command>
</client>
diff --git a/tests/data/test415 b/tests/data/test415
index e65968043..08d60482d 100644
--- a/tests/data/test415
+++ b/tests/data/test415
@@ -33,10 +33,10 @@ Date: Tue, 09 Nov 2010 14:49:00 GMT
<server>
http
</server>
- <name>
+<name>
HTTP response with control code then negative Content-Length
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
@@ -53,7 +53,7 @@ Accept: */*
</protocol>
# Hyper curl returns unsupported protocol
-# bullt-in curl returns weird_server_reply
+# built-in curl returns weird_server_reply
<errorcode>
%if hyper
1
diff --git a/tests/data/test416 b/tests/data/test416
new file mode 100644
index 000000000..b6b10b3df
--- /dev/null
+++ b/tests/data/test416
@@ -0,0 +1,51 @@
+<testcase>
+<info>
+<keywords>
+FTP
+EPSV
+RETR
+Range
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+0123456789abcdef0123456789abcdef0123456789abcdef
+</data>
+<datacheck>
+0123456789abcdef0123456789abcdef0123456789abcdef
+</datacheck>
+<servercmd>
+RETRSIZE 7
+</servercmd>
+<size>
+8
+</size>
+</reply>
+
+# Client-side
+<client>
+<server>
+ftp
+</server>
+<name>
+FTP growing file support
+</name>
+<command>
+--ignore-content-length ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS ftp@example.com
+PWD
+EPSV
+TYPE I
+RETR %TESTNUMBER
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test417 b/tests/data/test417
new file mode 100644
index 000000000..9061f8332
--- /dev/null
+++ b/tests/data/test417
@@ -0,0 +1,83 @@
+<testcase>
+<info>
+<keywords>
+HTTPS
+%{certs}
+</keywords>
+</info>
+
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 7
+
+nomnom
+</data>
+</reply>
+
+# Client-side
+<client>
+<features>
+SSL
+!wolfssl
+!bearssl
+!mbedtls
+!rustls
+</features>
+<server>
+http
+https
+</server>
+<name>
+%{certs}
+</name>
+<command option="no-include">
+--insecure https://%HOSTIP:%HTTPSPORT/%TESTNUMBER -w '%{certs}'
+</command>
+</client>
+<verify>
+<protocol>
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPSPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+<stripfile>
+s/^(.*):(.*)[\r\n]*//
+</stripfile>
+<stdout>
+nomnom
+-----BEGIN CERTIFICATE-----
+MIIERDCCAyygAwIBAgIGDzR1UZ/TMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
+Ak5OMTEwLwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNo
+IENsb3VkMSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjAe
+Fw0yMjEyMjMxMjIxMzlaFw0zMTAzMTExMjIxMzlaMFQxCzAJBgNVBAYTAk5OMTEw
+LwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3Vk
+MRIwEAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQCrCrAD0Hb+Xs4V3mHV45FvfNa7yiaOeL4mNdGmWfHVPFU+CSzsoNSvDjxa
+orWweFGVYoCAcchOn1lZk0ASsqnOss0Xi58n8+PPI3gG0gYjX5sg7EJ3Zq2kXoK0
+TZRy6hNkcvzLgyzXoYv1LkzTwYiyyJgZX++Y/GKAs2fMHyP8XzjNgm4tltk1k/4p
+omllwN9Fqz+sFxgAgEq3ybq4Xym7xKwWl8xXNBDJNmVsPtiJRcilQoR8Xs0a6PE+
+VbMhD9A2E/LEL7lzQfqHqtxE1mSW5FpQ+Uqf4KLnafStWs86IOWnCeLP6BmhAK6o
+uyICNFyzz7UkTHa/renxuNOGun2TAgMBAAGjggEGMIIBAjAUBgNVHREEDTALggls
+b2NhbGhvc3QwCwYDVR0PBAQDAgOoMBMGA1UdJQQMMAoGCCsGAQUFBwMBMB0GA1Ud
+DgQWBBScl7A9s1Cx9tRx4uvLgOqTfJjMcjAfBgNVHSMEGDAWgBSHy7EzLsFnfnHj
+5StMTaSzbtJbqTAJBgNVHRMEAjAAMEMGCCsGAQUFBwEBBDcwNTAzBggrBgEFBQcw
+AoYnaHR0cDovL3Rlc3QuY3VybC5zZS9jYS9FZGVsQ3VybFJvb3QuY2VyMDgGA1Ud
+HwQxMC8wLaAroCmGJ2h0dHA6Ly90ZXN0LmN1cmwuc2UvY2EvRWRlbEN1cmxSb290
+LmNybDANBgkqhkiG9w0BAQsFAAOCAQEAC4rtaof6cRWIJViFG0oJv0MANZN4DXIU
+MFHik4Oh2hsvqTGut8dMcsJeMiTxlpNw1T+1hYATdTLPDvhdxKIphEMsdYEmEmqg
+y3tXwZJ4hQj6ZFDCe4MCTXkTvGFkTbhr1fGEaxJcaZCtQEfA7d3qimZ+h4UZqonT
+PAhyCKFNY2BbmxeeABKhAFLKeAGIGMftW8fk2eu9P6+SUz/+WFcN/PR7e6JP6blc
+taRSULRWWkSO2dDt3o9+rBxYdluoecmVq4Ud20wTgkqlQRsp9dOW34DRHgB9ujWU
+V4HhCCqBaxwwUDcBGg4mT2vtyVAXNyszP2j+xvAhjOeyeVXyQr0vsA==
+-----END CERTIFICATE-----
+</stdout>
+
+</verify>
+
+</testcase>
diff --git a/tests/data/test418 b/tests/data/test418
new file mode 100644
index 000000000..6031b867b
--- /dev/null
+++ b/tests/data/test418
@@ -0,0 +1,67 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+gzip
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 swsclose OK
+Content-Length: 6
+Transfer-Encoding: gzip
+Transfer-Encoding: gzip
+Transfer-Encoding: gzip
+Transfer-Encoding: gzip
+Transfer-Encoding: gzip
+Transfer-Encoding: gzip
+Transfer-Encoding: gzip
+Transfer-Encoding: gzip
+Transfer-Encoding: gzip
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+libz
+</features>
+<name>
+Response with multiple Transfer-Encoding headers
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -sS --tr-encoding
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+Connection: TE
+TE: gzip
+
+</protocol>
+
+# CURLE_BAD_CONTENT_ENCODING is 61
+<errorcode>
+61
+</errorcode>
+<stderr mode="text">
+curl: (61) Reject response due to more than 5 content encodings
+</stderr>
+</verify>
+</testcase>
diff --git a/tests/data/test419 b/tests/data/test419
new file mode 100644
index 000000000..f8ec82522
--- /dev/null
+++ b/tests/data/test419
@@ -0,0 +1,35 @@
+<testcase>
+<info>
+<keywords>
+--dump-header
+failure
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+--dump-header to file that cannot be created
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -D loggg/save-here/fails
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+23
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test42 b/tests/data/test42
index 835f18185..50e501806 100644
--- a/tests/data/test42
+++ b/tests/data/test42
@@ -49,10 +49,10 @@ body
<server>
http
</server>
- <name>
+<name>
HTTP redirect with whitespace in path (and conversion)
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/we/are/all/twits/%TESTNUMBER -L
</command>
</client>
diff --git a/tests/data/test420 b/tests/data/test420
new file mode 100644
index 000000000..c635264da
--- /dev/null
+++ b/tests/data/test420
@@ -0,0 +1,75 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+cookies
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Accept-Ranges: bytes
+Content-Length: 6
+Content-Type: text/html
+Set-Cookie: mycookie=; Max-Age=-1; Expires=Thu, 01 Jan 1970 00:00:00 GMT
+Set-Cookie: mycookie3=; Path=/func_test; Max-Age=-1; Expires=Thu, 01 Jan 1970 00:00:00 GMT
+Set-Cookie: mycookie4=; Path=/func_test; Max-Age=-1; Expires=Thu, 01 Jan 1970 00:00:
+Set-Cookie: mycookie5=; Path=/func_test; Max-Age=-1; Expires=Thu, 01 Jan 1970 00:00:00 GMT
+Set-Cookie: mycookie6=; Path=/func_test; Max-Age=-1; Expires=Thu, 01 Jan 1970 00:00:00 GMT
+Set-Cookie: mycookie1=; Path=/; Max-Age=-1; Expires=Thu, 01 Jan 1970 00:00:00 GMT
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+Setting cookies set with expired dates that were loaded from jar
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/func_test/del_cookie -b %LOGDIR/cookie%TESTNUMBER -c %LOGDIR/save%TESTNUMBER
+</command>
+<file name="%LOGDIR/cookie%TESTNUMBER" mode="text">
+%HOSTIP FALSE /func_test FALSE 21709598616 mycookie6 991
+#HttpOnly_%HOSTIP FALSE /func_test FALSE 21709598616 mycookie5 990
+#HttpOnly_%HOSTIP FALSE /func_test FALSE 21709598616 mycookie4 950
+#HttpOnly_%HOSTIP FALSE /func_test FALSE 21709598616 mycookie3 900
+#HttpOnly_%HOSTIP FALSE /func_test/ FALSE 21709598616 mycookie2 5900
+#HttpOnly_%HOSTIP FALSE / FALSE 21709598616 mycookie1 4900
+#HttpOnly_%HOSTIP FALSE /func_test/ FALSE 0 mycookie 1200
+</file>
+<features>
+cookies
+</features>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /func_test/del_cookie HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+Cookie: mycookie2=5900; mycookie=1200; mycookie3=900; mycookie4=950; mycookie5=990; mycookie6=991; mycookie1=4900
+
+</protocol>
+<file name="%LOGDIR/save%TESTNUMBER" mode="text">
+# Netscape HTTP Cookie File
+# https://curl.se/docs/http-cookies.html
+# This file was generated by libcurl! Edit at your own risk.
+
+#HttpOnly_127.0.0.1 FALSE /func_test/ FALSE 21709598616 mycookie2 5900
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test421 b/tests/data/test421
new file mode 100644
index 000000000..0e4130b06
--- /dev/null
+++ b/tests/data/test421
@@ -0,0 +1,85 @@
+<testcase>
+<info>
+<keywords>
+header_json
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data crlf="yes">
+HTTP/1.1 200 OK
+server: nginx
+date: Tue, 07 Mar 2023 15:14:41 GMT
+content-type: application/json
+content-length: 6
+vary: Accept-Encoding
+access-control-allow-origin: *
+vary: Accept-Encoding
+referrer-policy: strict-origin-when-cross-origin
+access-control-allow-methods: GET, POST, PUT, DELETE, OPTIONS
+access-control-max-age: 1728000
+access-control-allow-headers: Authorization, Content-Type, AuthorizationOauth, X-EARLY-ACCESS
+access-control-expose-headers:
+vary: Accept
+etag: W/"2678f9ab2ba550d164e7cc014aefd31e"
+cache-control: max-age=0, private, must-revalidate
+x-request-id: 375b343b3d2ecf9b442c0daf00fc4a9a
+strict-transport-security: max-age=31536000; includeSubDomains
+x-content-type-options: nosniff
+x-xss-protection: 1; mode=block
+referrer-policy: strict-origin-when-cross-origin
+feature-policy: accelerometer 'none'; camera 'none'; geolocation 'none'; gyroscope 'none'; magnetometer 'none'; microphone 'none'; payment 'none'; usb 'none'
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+HTTP GET multiple headers and %{header_json}
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -w '%{stderr}%{header_json}\n' -s
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+<stderr mode="text">
+{"server":["nginx"],
+"date":["Tue, 07 Mar 2023 15:14:41 GMT"],
+"content-type":["application/json"],
+"content-length":["6"],
+"vary":["Accept-Encoding","Accept-Encoding","Accept"],
+"access-control-allow-origin":["*"],
+"referrer-policy":["strict-origin-when-cross-origin","strict-origin-when-cross-origin"],
+"access-control-allow-methods":["GET, POST, PUT, DELETE, OPTIONS"],
+"access-control-max-age":["1728000"],
+"access-control-allow-headers":["Authorization, Content-Type, AuthorizationOauth, X-EARLY-ACCESS"],
+"access-control-expose-headers":["\r"],
+"etag":["W/\"2678f9ab2ba550d164e7cc014aefd31e\""],
+"cache-control":["max-age=0, private, must-revalidate"],
+"x-request-id":["375b343b3d2ecf9b442c0daf00fc4a9a"],
+"strict-transport-security":["max-age=31536000; includeSubDomains"],
+"x-content-type-options":["nosniff"],
+"x-xss-protection":["1; mode=block"],
+"feature-policy":["accelerometer 'none'; camera 'none'; geolocation 'none'; gyroscope 'none'; magnetometer 'none'; microphone 'none'; payment 'none'; usb 'none'"]
+}
+</stderr>
+</verify>
+</testcase>
diff --git a/tests/data/test422 b/tests/data/test422
new file mode 100644
index 000000000..2caaa4915
--- /dev/null
+++ b/tests/data/test422
@@ -0,0 +1,44 @@
+<testcase>
+<info>
+<keywords>
+cmdline
+--next
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+<name>
+use --next with missing URL before it
+</name>
+<command>
+-O -I --next http://%HOSTIP:%HTTPPORT/%TESTNUMBER
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<stderr mode="text">
+curl: missing URL before --next
+curl: option --next: is badly used here
+%if manual
+curl: try 'curl --help' or 'curl --manual' for more information
+%else
+curl: try 'curl --help' for more information
+%endif
+</stderr>
+<errorcode>
+2
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test423 b/tests/data/test423
new file mode 100644
index 000000000..6c6e725b0
--- /dev/null
+++ b/tests/data/test423
@@ -0,0 +1,51 @@
+<testcase>
+<info>
+<keywords>
+-w
+--write-out
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data crlf="yes" nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 0
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+-w with url.* variables
+</name>
+<command option="no-include">
+"http://uuuu:pppp@%HOSTIP:%HTTPPORT/%TESTNUMBER?qqqq#ffff" "h55p://hello2000:1/%TESTNUMBER?qqqq#ffff" "local host" "http://u22u:p22p@%HOSTIP:%HTTPPORT/%TESTNUMBER?qqqq#ffff" -w '%{url.host}+%{url.path}+%{url.scheme}+%{url.user}+%{url.password}+%{url.port}+%{url.query}+%{url.fragment}\n'
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<stdout>
+%HOSTIP+/%TESTNUMBER+http+uuuu+pppp+%HTTPPORT+qqqq+ffff
+hello2000+/%TESTNUMBER+h55p+++1+qqqq+ffff
++++++++
+%HOSTIP+/%TESTNUMBER+http+u22u+p22p+%HTTPPORT+qqqq+ffff
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test424 b/tests/data/test424
new file mode 100644
index 000000000..36ba8c4b7
--- /dev/null
+++ b/tests/data/test424
@@ -0,0 +1,68 @@
+<testcase>
+<info>
+<keywords>
+-w
+--write-out
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data crlf="yes" nocheck="yes">
+HTTP/1.1 301 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 0
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+Location: http://anotherhost.example:2023/%TESTNUMBER0002?moo.html
+
+</data>
+<data2 crlf="yes" nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 0
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+</data2>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+proxy
+</features>
+<server>
+http
+</server>
+<name>
+-w with urle.* variables
+</name>
+<command option="no-include">
+"http://uuuu:pppp@%HOSTIP:%HTTPPORT/%TESTNUMBER?qqqq#ffff" "h55p://hello2000:1/%TESTNUMBER?qqqq#ffff" "local host" "http://u22u:p22p@%HOSTIP:%HTTPPORT/%TESTNUMBER?qqqq#ffff" -w '%{urle.host}+%{urle.path}+%{urle.scheme}+%{urle.user}+%{urle.password}+%{urle.port}+%{urle.query}+%{urle.fragment}\n' -x http://%HOSTIP:%HTTPPORT/ -L
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<stdout>
+anotherhost.example+/%TESTNUMBER0002+http+uuuu+pppp+2023+moo.html+
+hello2000+/%TESTNUMBER+h55p+++1+qqqq+ffff
++++++++
+anotherhost.example+/%TESTNUMBER0002+http+u22u+p22p+2023+moo.html+
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test425 b/tests/data/test425
new file mode 100644
index 000000000..399ca1983
--- /dev/null
+++ b/tests/data/test425
@@ -0,0 +1,53 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP PUT
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+HTTP PUT with path ending with slash + query
+</name>
+<command>
+-T %LOGDIR/up%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER/?fullpath
+</command>
+<file name="%LOGDIR/up%TESTNUMBER">
+content
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+PUT /%TESTNUMBER/?fullpath HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+Content-Length: 8
+
+content
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test426 b/tests/data/test426
new file mode 100644
index 000000000..34c80c6aa
--- /dev/null
+++ b/tests/data/test426
@@ -0,0 +1,34 @@
+<testcase>
+<info>
+<keywords>
+error detection
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+try --data with --continue-at
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -d foobar -C 3
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+2
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test427 b/tests/data/test427
new file mode 100644
index 000000000..1e08810eb
--- /dev/null
+++ b/tests/data/test427
@@ -0,0 +1,76 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+cookies
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data crlf="yes" nocheck="yes">
+HTTP/1.1 301 move along
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Set-Cookie: long1=%repeat[400 x abcdefgh]%; path="/"
+Set-Cookie: long2=%repeat[400 x abcdefgh]%; path="/"
+Set-Cookie: long3=%repeat[400 x abcdefgh]%; path="/"
+Location: %TESTNUMBER0002
+
+-foo-
+</data>
+
+<data2 crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+
+-foo-
+</data2>
+
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+Keep Cookie: header within 8190 bytes
+</name>
+
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -c %LOGDIR/cookies%TESTNUMBER -L
+</command>
+<features>
+cookies
+</features>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+GET /%TESTNUMBER0002 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+Cookie: long3=%repeat[400 x abcdefgh]%; long2=%repeat[400 x abcdefgh]%
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test428 b/tests/data/test428
new file mode 100644
index 000000000..c06f2f9df
--- /dev/null
+++ b/tests/data/test428
@@ -0,0 +1,68 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+variables
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<setenv>
+FUNVALUE=contents
+VALUE2=curl
+BLANK=
+</setenv>
+<name>
+Expand environment variables within config file
+</name>
+<file name="%LOGDIR/cmd">
+--variable %FUNVALUE
+--variable %VALUE2
+--variable %BLANK
+--variable %curl_NOT_SET=default
+--expand-data 1{{FUNVALUE}}2{{VALUE2}}3{{curl_NOT_SET}}4{{BLANK}}5\{{verbatim}}6{{not.good}}7{{}}
+</file>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -K %LOGDIR/cmd
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes" nonewline="yes">
+POST /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+Content-Length: 54
+Content-Type: application/x-www-form-urlencoded
+
+1contents2curl3default45{{verbatim}}6{{not.good}}7{{}}
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test429 b/tests/data/test429
new file mode 100644
index 000000000..4091d1be0
--- /dev/null
+++ b/tests/data/test429
@@ -0,0 +1,63 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP POST
+variables
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<setenv>
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF=contents2023
+</setenv>
+<name>
+Expand environment variable in config file - too long name
+</name>
+<file name="%LOGDIR/cmd">
+--expand-data {{FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}}
+</file>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -K %LOGDIR/cmd
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes" nonewline="yes">
+POST /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+Content-Length: 133
+Content-Type: application/x-www-form-urlencoded
+
+{{FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}}
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test43 b/tests/data/test43
index 4e7408be1..1c36f1c60 100644
--- a/tests/data/test43
+++ b/tests/data/test43
@@ -50,10 +50,10 @@ If this is received, the location following worked
<server>
http
</server>
- <name>
+<name>
HTTP Location: following over HTTP proxy
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -L -x %HOSTIP:%HTTPPORT
</command>
<features>
diff --git a/tests/data/test430 b/tests/data/test430
index e3aae0bef..377c2d48b 100644
--- a/tests/data/test430
+++ b/tests/data/test430
@@ -37,19 +37,19 @@ Content-Type: text/3
#
# Client-side
<client>
-<file1 name="log/config%TESTNUMBER-a">
+<file1 name="%LOGDIR/config%TESTNUMBER-a">
--next
url = %HOSTIP:%HTTPPORT/%TESTNUMBER0001
header = "a: a"
data = "a"
</file1>
-<file2 name="log/config%TESTNUMBER-b">
+<file2 name="%LOGDIR/config%TESTNUMBER-b">
--next
url = %HOSTIP:%HTTPPORT/%TESTNUMBER0002
header = "b: b"
data = "b"
</file2>
-<file3 name="log/config%TESTNUMBER-c">
+<file3 name="%LOGDIR/config%TESTNUMBER-c">
--next
url = %HOSTIP:%HTTPPORT/%TESTNUMBER0003
header = "c: c"
@@ -59,11 +59,11 @@ data = "c"
<server>
http
</server>
- <name>
+<name>
Three -K uses with --next and --data in each
- </name>
- <command>
--K log/config%TESTNUMBER-a -K log/config%TESTNUMBER-b -K log/config%TESTNUMBER-c
+</name>
+<command>
+-K %LOGDIR/config%TESTNUMBER-a -K %LOGDIR/config%TESTNUMBER-b -K %LOGDIR/config%TESTNUMBER-c
</command>
</client>
diff --git a/tests/data/test431 b/tests/data/test431
index bebe62017..9622d64e1 100644
--- a/tests/data/test431
+++ b/tests/data/test431
@@ -37,13 +37,13 @@ Content-Type: text/3
#
# Client-side
<client>
-<file1 name="log/config%TESTNUMBER-a">
+<file1 name="%LOGDIR/config%TESTNUMBER-a">
--next
url = %HOSTIP:%HTTPPORT/%TESTNUMBER0001
header = "a: a"
data = "a"
</file1>
-<file2 name="log/config%TESTNUMBER-b">
+<file2 name="%LOGDIR/config%TESTNUMBER-b">
--next
url = %HOSTIP:%HTTPPORT/%TESTNUMBER0002
header = "b: b"
@@ -53,11 +53,11 @@ data = "b"
<server>
http
</server>
- <name>
+<name>
Two -K uses with --next and then one on cmdline
- </name>
- <command>
--K log/config%TESTNUMBER-a -K log/config%TESTNUMBER-b --next -d c %HOSTIP:%HTTPPORT/%TESTNUMBER0003 -H "c: c"
+</name>
+<command>
+-K %LOGDIR/config%TESTNUMBER-a -K %LOGDIR/config%TESTNUMBER-b --next -d c %HOSTIP:%HTTPPORT/%TESTNUMBER0003 -H "c: c"
</command>
</client>
diff --git a/tests/data/test432 b/tests/data/test432
index e7fe45b37..02a46111d 100644
--- a/tests/data/test432
+++ b/tests/data/test432
@@ -37,7 +37,7 @@ Content-Type: text/3
#
# Client-side
<client>
-<file1 name="log/config%TESTNUMBER">
+<file1 name="%LOGDIR/config%TESTNUMBER">
--next
url = %HOSTIP:%HTTPPORT/%TESTNUMBER0001
header = "a: a"
@@ -46,9 +46,9 @@ data = "a"
url = %HOSTIP:%HTTPPORT/%TESTNUMBER0002
header = "b: b"
data = "b"
-config = "log/config%TESTNUMBER-c"
+config = "%LOGDIR/config%TESTNUMBER-c"
</file1>
-<file2 name="log/config%TESTNUMBER-c">
+<file2 name="%LOGDIR/config%TESTNUMBER-c">
--next
url = %HOSTIP:%HTTPPORT/%TESTNUMBER0003
header = "c: c"
@@ -58,11 +58,11 @@ data = "c"
<server>
http
</server>
- <name>
+<name>
Use -K with --next and --config from within
- </name>
- <command>
--K log/config%TESTNUMBER
+</name>
+<command>
+-K %LOGDIR/config%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test433 b/tests/data/test433
index 34ea4a79c..e86f3deae 100644
--- a/tests/data/test433
+++ b/tests/data/test433
@@ -20,7 +20,7 @@ Content-Type: text/1
#
# Client-side
<client>
-<file1 name="log/.curlrc">
+<file1 name="%LOGDIR/.curlrc">
--next
header = "a: a"
data = "curlrc read"
@@ -29,7 +29,7 @@ data = "curlrc read"
http
</server>
<setenv>
-XDG_CONFIG_HOME=%PWD/log
+XDG_CONFIG_HOME=%PWD/%LOGDIR
HOME=
CURL_HOME=
</setenv>
diff --git a/tests/data/test434 b/tests/data/test434
index d411b161b..63d8ce7c6 100644
--- a/tests/data/test434
+++ b/tests/data/test434
@@ -19,7 +19,7 @@ Content-Type: text/1
#
<client>
-<file name="log/config%TESTNUMBER" nonewline="yes">
+<file name="%LOGDIR/config%TESTNUMBER" nonewline="yes">
url = %HOSTIP:%HTTPPORT/%TESTNUMBER
</file>
<server>
@@ -29,7 +29,7 @@ http
-K with a single line without newline
</name>
<command>
--K log/config%TESTNUMBER
+-K %LOGDIR/config%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test435 b/tests/data/test435
index cfcca66dc..4d13ebb81 100644
--- a/tests/data/test435
+++ b/tests/data/test435
@@ -23,7 +23,7 @@ Content-Length: 0
http
</server>
<name>
-verify -w local/remote port+ip after connection re-use
+verify -w local/remote port+ip after connection reuse
</name>
<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER -w 'local port == %{local_port}\nlocal ip == %{local_ip}\nremote_ip == %{remote_ip}\nremote_port == %{remote_port}\n'
diff --git a/tests/data/test436 b/tests/data/test436
index 0a62cfb97..d435b5110 100644
--- a/tests/data/test436
+++ b/tests/data/test436
@@ -20,7 +20,7 @@ Content-Type: text/1
#
# Client-side
<client>
-<file1 name="log/.config/curlrc">
+<file1 name="%LOGDIR/.config/curlrc">
--next
header = "a: a"
data = "curlrc read"
@@ -29,7 +29,7 @@ data = "curlrc read"
http
</server>
<setenv>
-CURL_HOME=%PWD/log
+CURL_HOME=%PWD/%LOGDIR
XDG_CONFIG_HOME=
</setenv>
<name>
diff --git a/tests/data/test437 b/tests/data/test437
new file mode 100644
index 000000000..f12052d24
--- /dev/null
+++ b/tests/data/test437
@@ -0,0 +1,68 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+Alt-Svc
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+Alt-Svc: h1="[ffff::1]:8181"
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+debug
+alt-svc
+</features>
+<server>
+http
+</server>
+<name>
+Alt-Svc to numerical IPv6 address
+</name>
+<setenv>
+# make debug-curl accept Alt-Svc over plain HTTP
+CURL_ALTSVC_HTTP="yeah"
+</setenv>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --alt-svc "%LOGDIR/altsvc-%TESTNUMBER"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+<stripfile>
+# strip out the (dynamic) expire date from the file so that the rest
+# matches
+s/\"([^\"]*)\"/TIMESTAMP/
+</stripfile>
+<file name="%LOGDIR/altsvc-%TESTNUMBER" mode="text">
+# Your alt-svc cache. https://curl.se/docs/alt-svc.html
+# This file was generated by libcurl! Edit at your own risk.
+h1 %HOSTIP %HTTPPORT h1 [ffff::1] 8181 TIMESTAMP 0 0
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test438 b/tests/data/test438
new file mode 100644
index 000000000..4dd3b82c8
--- /dev/null
+++ b/tests/data/test438
@@ -0,0 +1,90 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+Alt-Svc
+HTTP/2
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-Head: yesyes
+Alt-Svc: h1="%HOST6IP:%HTTP6PORT", ma=315360000; persist=0
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+alt-svc
+debug
+ipv6
+</features>
+<server>
+http
+http-ipv6
+</server>
+<name>
+HTTPS IPv4 GET translated by alt-svc to IPv6 address
+</name>
+<setenv>
+# make debug-curl accept Alt-Svc over plain HTTP
+CURL_ALTSVC_HTTP="yeah"
+</setenv>
+<command>
+--alt-svc "%LOGDIR/altsvc-%TESTNUMBER" "http://%HOSTIP:%HTTPPORT/%TESTNUMBER" "http://%HOSTIP:%HTTPPORT/%TESTNUMBER"
+</command>
+<file name="%LOGDIR/altsvc-%TESTNUMBER">
+h1 %HOSTIP %HTTPPORT h1 %HOST6IP %HTTP6PORT "20290222 22:19:28" 0 0
+</file>
+
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<stdout>
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-Head: yesyes
+Alt-Svc: h1="%HOST6IP:%HTTP6PORT", ma=315360000; persist=0
+
+-foo-
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-Head: yesyes
+Alt-Svc: h1="%HOST6IP:%HTTP6PORT", ma=315360000; persist=0
+
+-foo-
+</stdout>
+<stripfile>
+s/^server: nghttpx.*\r?\n//
+# strip out the (dynamic) expire date from the file so that the rest
+# matches
+s/\"2([^\"]*)\"/TIMESTAMP/
+</stripfile>
+<file name="%LOGDIR/altsvc-%TESTNUMBER" mode="text">
+# Your alt-svc cache. https://curl.se/docs/alt-svc.html
+# This file was generated by libcurl! Edit at your own risk.
+h1 %HOSTIP %HTTPPORT h1 %HOST6IP %HTTP6PORT TIMESTAMP 0 0
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test439 b/tests/data/test439
new file mode 100644
index 000000000..c997a397a
--- /dev/null
+++ b/tests/data/test439
@@ -0,0 +1,58 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+aws-sigv4
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+debug
+</features>
+<name>
+aws-sigv4 with query
+</name>
+<command>
+"http://fake.fake.fake:8000/%TESTNUMBER/?name=me%&noval&aim=b%aad&&&weirdo=*.//-" -u user:secret --aws-sigv4 "aws:amz:us-east-2:es" --connect-to fake.fake.fake:8000:%HOSTIP:%HTTPPORT
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /439/?name=me%&noval&aim=b%aad&&&weirdo=*.//- HTTP/1.1
+Host: fake.fake.fake:8000
+Authorization: AWS4-HMAC-SHA256 Credential=user/19700101/us-east-2/es/aws4_request, SignedHeaders=host;x-amz-date, Signature=cbbf4a72764e27e396730f5e56cea046d4ce862a2d91db4856fb086b92f49270
+X-Amz-Date: 19700101T000000Z
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test44 b/tests/data/test44
index 4f39bc1eb..bc103e031 100644
--- a/tests/data/test44
+++ b/tests/data/test44
@@ -26,14 +26,14 @@ Mime
<server>
http
</server>
- <name>
+<name>
HTTP RFC1867-type formposting without Expect: header
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -F name=daniel -F tool=curl -F file=@log/test%TESTNUMBER.txt -H "Expect:"
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -F name=daniel -F tool=curl -F file=@%LOGDIR/test%TESTNUMBER.txt -H "Expect:"
</command>
# We create this file before the command is invoked!
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
foo-
This is a moo-
bar
@@ -50,7 +50,7 @@ POST /we/want/%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 408
+Content-Length: 432
Content-Type: multipart/form-data; boundary=----------------------------7c633d5c27ce
------------------------------7c633d5c27ce
diff --git a/tests/data/test440 b/tests/data/test440
index 0986cda1a..a77ef606d 100644
--- a/tests/data/test440
+++ b/tests/data/test440
@@ -34,7 +34,7 @@ https
</features>
# no trailing dot in the file only in the URL
-<file name="log/input%TESTNUMBER">
+<file name="%LOGDIR/input%TESTNUMBER">
this.hsts.example "99991001 04:47:41"
</file>
@@ -42,7 +42,7 @@ this.hsts.example "99991001 04:47:41"
HSTS with trailing-dot host name in URL but none in hsts file
</name>
<command>
--x http://%HOSTIP:%HTTPPORT http://this.hsts.example./%TESTNUMBER --hsts log/input%TESTNUMBER -w '%{url_effective}\n'
+-x http://%HOSTIP:%HTTPPORT http://this.hsts.example./%TESTNUMBER --hsts %LOGDIR/input%TESTNUMBER -w '%{url_effective}\n'
</command>
</client>
diff --git a/tests/data/test441 b/tests/data/test441
index 6fbf7be3b..29b990b89 100644
--- a/tests/data/test441
+++ b/tests/data/test441
@@ -34,7 +34,7 @@ https
</features>
# no trailing dot in the file only in the URL
-<file name="log/input%TESTNUMBER">
+<file name="%LOGDIR/input%TESTNUMBER">
this.hsts.example. "99991001 04:47:41"
</file>
@@ -42,7 +42,7 @@ this.hsts.example. "99991001 04:47:41"
HSTS with no t-dot host name in URL but t-dot in file
</name>
<command>
--x http://%HOSTIP:%HTTPPORT http://this.hsts.example/%TESTNUMBER --hsts log/input%TESTNUMBER -w '%{url_effective}\n'
+-x http://%HOSTIP:%HTTPPORT http://this.hsts.example/%TESTNUMBER --hsts %LOGDIR/input%TESTNUMBER -w '%{url_effective}\n'
</command>
</client>
diff --git a/tests/data/test442 b/tests/data/test442
index baab4aade..2787c02b6 100644
--- a/tests/data/test442
+++ b/tests/data/test442
@@ -38,9 +38,9 @@ http
Send capped huge number of matching cookies
</name>
<command>
-http://attack.invalid:%HTTPPORT/a/b/%TESTNUMBER -b log/cookie%TESTNUMBER --resolve attack.invalid:%HTTPPORT:%HOSTIP -L
+http://attack.invalid:%HTTPPORT/a/b/%TESTNUMBER -b %LOGDIR/cookie%TESTNUMBER --resolve attack.invalid:%HTTPPORT:%HOSTIP -L
</command>
-<file name="log/cookie%TESTNUMBER" mode="text">
+<file name="%LOGDIR/cookie%TESTNUMBER" mode="text">
attack.invalid TRUE / FALSE 0 name1 could-be-large-1
attack.invalid TRUE / FALSE 0 name2 could-be-large-2
attack.invalid TRUE / FALSE 0 name3 could-be-large-3
@@ -193,6 +193,9 @@ attack.invalid TRUE / FALSE 0 name149 could-be-large-149
attack.invalid TRUE / FALSE 0 name150 could-be-large-150
attack.invalid TRUE / FALSE 0 name151 could-be-large-151
</file>
+<features>
+cookies
+</features>
</client>
#
diff --git a/tests/data/test443 b/tests/data/test443
index f984e7397..975d8fdae 100644
--- a/tests/data/test443
+++ b/tests/data/test443
@@ -38,9 +38,9 @@ http
Cookie header in request no longer than 8K
</name>
<command>
-http://attack.invalid:%HTTPPORT/a/b/%TESTNUMBER -b log/cookie%TESTNUMBER --resolve attack.invalid:%HTTPPORT:%HOSTIP -L
+http://attack.invalid:%HTTPPORT/a/b/%TESTNUMBER -b %LOGDIR/cookie%TESTNUMBER --resolve attack.invalid:%HTTPPORT:%HOSTIP -L
</command>
-<file name="log/cookie%TESTNUMBER" mode="text">
+<file name="%LOGDIR/cookie%TESTNUMBER" mode="text">
attack.invalid TRUE / FALSE 0 huge-1 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-1
attack.invalid TRUE / FALSE 0 huge-2 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-2
attack.invalid TRUE / FALSE 0 huge-3 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-3
@@ -62,6 +62,9 @@ attack.invalid TRUE / FALSE 0 huge-18 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
attack.invalid TRUE / FALSE 0 huge-19 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-19
attack.invalid TRUE / FALSE 0 huge-20 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-20
</file>
+<features>
+cookies
+</features>
</client>
#
diff --git a/tests/data/test444 b/tests/data/test444
index 89d671c72..8df990280 100644
--- a/tests/data/test444
+++ b/tests/data/test444
@@ -116,8 +116,11 @@ http
Many Set-Cookie response headers
</name>
<command>
-http://attack.invalid:%HTTPPORT/a/b/%TESTNUMBER -c log/cookie%TESTNUMBER --resolve attack.invalid:%HTTPPORT:%HOSTIP
+http://attack.invalid:%HTTPPORT/a/b/%TESTNUMBER -c %LOGDIR/cookie%TESTNUMBER --resolve attack.invalid:%HTTPPORT:%HOSTIP
</command>
+<features>
+cookies
+</features>
</client>
#
@@ -130,7 +133,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/cookie%TESTNUMBER" mode="text">
+<file name="%LOGDIR/cookie%TESTNUMBER" mode="text">
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
diff --git a/tests/data/test445 b/tests/data/test445
index 0406c0f9a..dbdcfe6ba 100644
--- a/tests/data/test445
+++ b/tests/data/test445
@@ -42,10 +42,10 @@ smtp
<server>
http-proxy
</server>
- <name>
+<name>
Refuse tunneling protocols through HTTP proxy
- </name>
- <command>
+</name>
+<command>
-x http://%HOSTIP:%PROXYPORT/%TESTNUMBER -p gopher://127.0.0.1 dict://127.0.0.1 http://moo https://example telnet://another ftp://yes ftps://again imap://more ldap://perhaps mqtt://yes pop3://mail rtsp://harder scp://copy sftp://files smb://wird smtp://send
</command>
</client>
diff --git a/tests/data/test446 b/tests/data/test446
new file mode 100644
index 000000000..b8e719dd7
--- /dev/null
+++ b/tests/data/test446
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP proxy
+HSTS
+trailing-dot
+</keywords>
+</info>
+
+<reply>
+
+# we use this as response to a CONNECT
+<connect nocheck="yes">
+HTTP/1.1 200 OK
+
+</connect>
+<data crlf="yes">
+HTTP/1.1 200 OK
+Content-Length: 6
+Strict-Transport-Security: max-age=604800
+
+-foo-
+</data>
+<data2 crlf="yes">
+HTTP/1.1 200 OK
+Content-Length: 6
+Strict-Transport-Security: max-age=6048000
+
+-baa-
+</data2>
+</reply>
+
+<client>
+<server>
+https
+http-proxy
+</server>
+<features>
+HSTS
+proxy
+https
+debug
+</features>
+<setenv>
+CURL_HSTS_HTTP=yes
+CURL_TIME=2000000000
+</setenv>
+
+<name>
+HSTS with two URLs
+</name>
+<command>
+-x http://%HOSTIP:%PROXYPORT --hsts %LOGDIR/hsts%TESTNUMBER http://this.hsts.example./%TESTNUMBER http://another.example.com/%TESTNUMBER0002
+</command>
+</client>
+
+<verify>
+# we let it CONNECT to the server to confirm HSTS but deny from there
+<proxy crlf="yes">
+GET http://this.hsts.example./%TESTNUMBER HTTP/1.1
+Host: this.hsts.example.
+User-Agent: curl/%VERSION
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+GET http://another.example.com/%TESTNUMBER0002 HTTP/1.1
+Host: another.example.com
+User-Agent: curl/%VERSION
+Accept: */*
+Proxy-Connection: Keep-Alive
+
+</proxy>
+
+<file name="%LOGDIR/hsts%TESTNUMBER" mode="text">
+# Your HSTS cache. https://curl.se/docs/hsts.html
+# This file was generated by libcurl! Edit at your own risk.
+this.hsts.example "20330525 03:33:20"
+another.example.com "20330727 03:33:20"
+</file>
+
+</verify>
+</testcase>
diff --git a/tests/data/test447 b/tests/data/test447
new file mode 100644
index 000000000..f514a130e
--- /dev/null
+++ b/tests/data/test447
@@ -0,0 +1,65 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP PUT
+growing file
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+debug
+</features>
+<server>
+http
+</server>
+<name>
+HTTP PUT with growing file
+</name>
+<setenv>
+CURL_UPLOAD_SIZE=498
+</setenv>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T %LOGDIR/upload%TESTNUMBER
+</command>
+<file name="%LOGDIR/upload%TESTNUMBER">
+%repeat[100 x hello]%
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes" nonewline="yes">
+PUT /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+Content-Length: 498
+
+%repeat[99 x hello]%hel
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test448 b/tests/data/test448
new file mode 100644
index 000000000..0e257e704
--- /dev/null
+++ b/tests/data/test448
@@ -0,0 +1,67 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+variables
+--config
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<setenv>
+FUNVALUE=contents
+VALUE2=curl
+BLANK=
+</setenv>
+<name>
+Environment variables within config file, unbalanced braces
+</name>
+<file name="%LOGDIR/cmd">
+--variable %FUNVALUE
+--variable %VALUE2
+--expand-data 1{{FUNVALUE}}2{{VALUE2}}3{{curl_NOT_SET}}4{{AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA}}5{{broken
+</file>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -K %LOGDIR/cmd
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes" nonewline="yes">
+POST /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+Content-Length: 157
+Content-Type: application/x-www-form-urlencoded
+
+1contents2curl34{{AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA}}5{{broken
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test449 b/tests/data/test449
new file mode 100644
index 000000000..598199602
--- /dev/null
+++ b/tests/data/test449
@@ -0,0 +1,65 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+variables
+--config
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<setenv>
+FUNVALUE=contents
+VALUE2=curl
+BLANK=
+</setenv>
+<name>
+Environment variables in config file w/o [expand]
+</name>
+<file name="%LOGDIR/cmd">
+-d 1{{FUNVALUE}}2{{VALUE2}}3{{CURL_NOT_SET}}4{{BLANK}}5\{{verbatim}}6{{not.good}}7{{}}
+</file>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -K %LOGDIR/cmd
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes" nonewline="yes">
+POST /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+Content-Length: 83
+Content-Type: application/x-www-form-urlencoded
+
+1{{FUNVALUE}}2{{VALUE2}}3{{CURL_NOT_SET}}4{{BLANK}}5\{{verbatim}}6{{not.good}}7{{}}
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test45 b/tests/data/test45
index 0368882d6..e7c3b6592 100644
--- a/tests/data/test45
+++ b/tests/data/test45
@@ -49,10 +49,10 @@ If this is received, the location following worked
<server>
http
</server>
- <name>
+<name>
simple HTTP Location: without protocol in initial URL
- </name>
- <command>
+</name>
+<command>
%HOSTIP:%HTTPPORT/want/%TESTNUMBER -L
</command>
</client>
diff --git a/tests/data/test450 b/tests/data/test450
new file mode 100644
index 000000000..a6fa64103
--- /dev/null
+++ b/tests/data/test450
@@ -0,0 +1,60 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+--config
+variables
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+Variable from file that is trimmed and URL encoded
+</name>
+<file name="%LOGDIR/junk">
+ space with space
+</file>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --variable what@%LOGDIR/junk --expand-data "{{what:trim:url}}"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes" nonewline="yes">
+POST /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+Content-Length: 20
+Content-Type: application/x-www-form-urlencoded
+
+space%20with%20space
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test451 b/tests/data/test451
new file mode 100644
index 000000000..7c8fe7d93
--- /dev/null
+++ b/tests/data/test451
@@ -0,0 +1,59 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+variables
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+Variable from file that is JSON and URL encoded (with null byte)
+</name>
+<file name="%LOGDIR/junk">
+%hex[%01%02%03%00%04%05%06]hex%
+</file>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --variable what@%LOGDIR/junk --variable second=hello --variable second=again --expand-data "--{{what:trim:json}}22{{none}}--{{second}}{{what:trim:url}}"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes" nonewline="yes">
+POST /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+Content-Length: 74
+Content-Type: application/x-www-form-urlencoded
+
+--\u0001\u0002\u0003\u0000\u0004\u0005\u000622--again%01%02%03%00%04%05%06
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test452 b/tests/data/test452
new file mode 100644
index 000000000..39f0460da
--- /dev/null
+++ b/tests/data/test452
@@ -0,0 +1,34 @@
+<testcase>
+<info>
+<keywords>
+variables
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+Variable using illegal function in expansion
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --variable what=hello --expand-data "--{{what:trim:super}}"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+2
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test453 b/tests/data/test453
new file mode 100644
index 000000000..c1b27d03e
--- /dev/null
+++ b/tests/data/test453
@@ -0,0 +1,33 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+variables
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+Variable output containing null byte
+</name>
+<file name="%LOGDIR/junk">
+%hex[%01%02%03%00%04%05%06]hex%
+</file>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --variable what@%LOGDIR/junk --expand-data "{{what}}"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+2
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test454 b/tests/data/test454
new file mode 100644
index 000000000..85fc779bf
--- /dev/null
+++ b/tests/data/test454
@@ -0,0 +1,34 @@
+<testcase>
+<info>
+<keywords>
+variables
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+Variable using illegal function separator
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --variable what=hello --expand-data "--{{what:trim,url}}"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+2
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test455 b/tests/data/test455
new file mode 100644
index 000000000..ffe6bd14c
--- /dev/null
+++ b/tests/data/test455
@@ -0,0 +1,52 @@
+<testcase>
+<info>
+<keywords>
+variables
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+Variable using base64
+</name>
+<command>
+--variable moby="Call me Ishmael" --expand-url "http://%HOSTIP:%HTTPPORT/{{moby:b64}}/%TESTNUMBER"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /%b64[Call me Ishmael]b64%/%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test456 b/tests/data/test456
new file mode 100644
index 000000000..1623aecaf
--- /dev/null
+++ b/tests/data/test456
@@ -0,0 +1,33 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+variables
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+Variable output starting with null byte
+</name>
+<file name="%LOGDIR/junk">
+%hex[%00]hex%hello
+</file>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --variable what@%LOGDIR/junk --expand-data "{{what}}"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+2
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test457 b/tests/data/test457
new file mode 100644
index 000000000..aa391d7fd
--- /dev/null
+++ b/tests/data/test457
@@ -0,0 +1,69 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+chunked Transfer-Encoding
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 funky chunky!
+Server: fakeit/0.9 fakeitbad/1.0
+Transfer-Encoding: chunked
+Connection: mooo
+
+40
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+30
+bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+21;heresatest=moooo
+cccccccccccccccccccccccccccccc
+c
+
+0
+
+</data>
+<datacheck>
+HTTP/1.1 200 funky chunky!
+Server: fakeit/0.9 fakeitbad/1.0
+Transfer-Encoding: chunked
+Connection: mooo
+
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccc
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+chunked Transfer-Encoding with --max-filesize
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --max-filesize 143
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+# curl: (63) Exceeded the maximum allowed file size (143)
+<errorcode>
+63
+</errorcode>
+</verify>
+
+</testcase>
diff --git a/tests/data/test458 b/tests/data/test458
new file mode 100644
index 000000000..ce3794541
--- /dev/null
+++ b/tests/data/test458
@@ -0,0 +1,76 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+variables
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data crlf="yes" nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<setenv>
+FUNVALUE=contents%TESTNUMBER
+VALUE2=curl
+BLANK=
+</setenv>
+<name>
+variable expand the file name with --expand-output
+</name>
+<file name="%LOGDIR/cmd">
+--variable %FUNVALUE
+--expand-output %LOGDIR/{{FUNVALUE}}
+</file>
+<command option="no-output">
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -K %LOGDIR/cmd
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+<file name="%LOGDIR/contents%TESTNUMBER" crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test459 b/tests/data/test459
new file mode 100644
index 000000000..e46d02973
--- /dev/null
+++ b/tests/data/test459
@@ -0,0 +1,63 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+--config
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+config file with argument using whitespace missing quotes
+</name>
+<file name="%LOGDIR/config">
+data = arg with space
+</file>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --config %LOGDIR/config --silent
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes" nonewline="yes">
+POST /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+Content-Length: 3
+Content-Type: application/x-www-form-urlencoded
+
+arg
+</protocol>
+<stderr mode="text">
+Warning: %LOGDIR/config:1: warning: 'data' uses unquoted whitespace
+Warning: This may cause side-effects. Consider using double quotes?
+</stderr>
+</verify>
+</testcase>
diff --git a/tests/data/test46 b/tests/data/test46
index 91e24cbaf..042af7e6e 100644
--- a/tests/data/test46
+++ b/tests/data/test46
@@ -16,7 +16,11 @@ HTTP/1.1 200 OK
Server: Microsoft-IIS/4.0
Date: Tue, 25 Sep 2001 19:37:44 GMT
Content-Type: text/html
+%if large-time
+Set-Cookie: ckyPersistent=permanent; expires=Fri, 13-Feb-2525 11:56:27 GMT; path=/
+%else
Set-Cookie: ckyPersistent=permanent; expires=Fri, 13-Feb-2037 11:56:27 GMT; path=/
+%endif
Set-Cookie: ckySession=temporary; path=/
Set-Cookie: ASPSESSIONIDQGGQQSJJ=GKNBDIFAAOFDPDAIEAKDIBKE; path=/
Set-Cookie: justaname=; path=/;
@@ -33,29 +37,39 @@ This server reply is for testing cookies
<server>
http
</server>
- <name>
+<name>
HTTP with bad domain name, get cookies and store in cookie jar
- </name>
+</name>
# Explicitly set the time zone to a known good one, in case the user is
# using one of the 'right' zones that take into account leap seconds
# which causes the cookie expiry times to be different from what we expect.
<setenv>
TZ=GMT
</setenv>
- <command>
-domain..tld:%HTTPPORT/want/%TESTNUMBER --resolve domain..tld:%HTTPPORT:%HOSTIP -c log/jar%TESTNUMBER -b log/injar%TESTNUMBER
+<command>
+domain..tld:%HTTPPORT/want/%TESTNUMBER --resolve domain..tld:%HTTPPORT:%HOSTIP -c %LOGDIR/jar%TESTNUMBER -b %LOGDIR/injar%TESTNUMBER
</command>
-<file name="log/injar%TESTNUMBER">
+<file name="%LOGDIR/injar%TESTNUMBER">
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This is generated by libcurl! Do not edit.
+%if large-time
+www.fake.come FALSE / FALSE 22147483647 cookiecliente si
+www.loser.com FALSE / FALSE 22139150993 UID 99
+domain..tld FALSE / FALSE 22139150993 mooo indeed
+#HttpOnly_domain..tld FALSE /want FALSE 22139150993 mooo2 indeed2
+%else
www.fake.come FALSE / FALSE 2147483647 cookiecliente si
www.loser.com FALSE / FALSE 2139150993 UID 99
domain..tld FALSE / FALSE 2139150993 mooo indeed
#HttpOnly_domain..tld FALSE /want FALSE 2139150993 mooo2 indeed2
+%endif
domain..tld FALSE /want FALSE 0 empty
</file>
+<features>
+cookies
+</features>
</client>
# Verify data after the test has been "shot"
@@ -68,7 +82,7 @@ Accept: */*
Cookie: empty=; mooo2=indeed2; mooo=indeed
</protocol>
-<file name="log/jar%TESTNUMBER" mode="text">
+<file name="%LOGDIR/jar%TESTNUMBER" mode="text">
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
@@ -77,12 +91,21 @@ domain..tld FALSE /want/ FALSE 0 simplyhuge zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
domain..tld FALSE / FALSE 0 justaname
domain..tld FALSE / FALSE 0 ASPSESSIONIDQGGQQSJJ GKNBDIFAAOFDPDAIEAKDIBKE
domain..tld FALSE / FALSE 0 ckySession temporary
+%if large-time
+domain..tld FALSE / FALSE 17517902187 ckyPersistent permanent
+domain..tld FALSE /want FALSE 0 empty
+#HttpOnly_domain..tld FALSE /want FALSE 22139150993 mooo2 indeed2
+domain..tld FALSE / FALSE 22139150993 mooo indeed
+www.loser.com FALSE / FALSE 22139150993 UID 99
+www.fake.come FALSE / FALSE 22147483647 cookiecliente si
+%else
domain..tld FALSE / FALSE 2118138987 ckyPersistent permanent
domain..tld FALSE /want FALSE 0 empty
#HttpOnly_domain..tld FALSE /want FALSE 2139150993 mooo2 indeed2
domain..tld FALSE / FALSE 2139150993 mooo indeed
www.loser.com FALSE / FALSE 2139150993 UID 99
www.fake.come FALSE / FALSE 2147483647 cookiecliente si
+%endif
</file>
</verify>
</testcase>
diff --git a/tests/data/test47 b/tests/data/test47
index e506b346b..42086999b 100644
--- a/tests/data/test47
+++ b/tests/data/test47
@@ -24,10 +24,10 @@ Server: test-server/fake
<server>
http
</server>
- <name>
+<name>
simple HTTP 1.0 GET
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -0
</command>
</client>
diff --git a/tests/data/test48 b/tests/data/test48
index c98376834..24fa0abbb 100644
--- a/tests/data/test48
+++ b/tests/data/test48
@@ -25,10 +25,10 @@ Date: Tue, 09 Nov 2010 14:49:00 GMT
<server>
http
</server>
- <name>
+<name>
HTTP with -d and -G and -I
- </name>
- <command>
+</name>
+<command>
-d "foo=moo&moo=poo" http://%HOSTIP:%HTTPPORT/%TESTNUMBER -G -I http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test49 b/tests/data/test49
index 79890d68b..996cf018b 100644
--- a/tests/data/test49
+++ b/tests/data/test49
@@ -45,10 +45,10 @@ body
<server>
http
</server>
- <name>
+<name>
HTTP follow redirect with ../
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/we/are/all/twits/%TESTNUMBER -L
</command>
</client>
diff --git a/tests/data/test490 b/tests/data/test490
index 2d4cf1604..a0bc8f353 100644
--- a/tests/data/test490
+++ b/tests/data/test490
@@ -31,13 +31,13 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
Two globbed HTTP PUTs
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T '{log/in%TESTNUMBER,log/in%TESTNUMBER}'
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T '{%LOGDIR/in%TESTNUMBER,%LOGDIR/in%TESTNUMBER}'
</command>
-<file name="log/in%TESTNUMBER">
+<file name="%LOGDIR/in%TESTNUMBER">
surprise!
</file>
</client>
@@ -51,7 +51,6 @@ Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 10
-Expect: 100-continue
surprise!
PUT /%TESTNUMBER HTTP/1.1
@@ -59,7 +58,6 @@ Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 10
-Expect: 100-continue
surprise!
</protocol>
diff --git a/tests/data/test491 b/tests/data/test491
index 5f2c27d6a..15bb756b5 100644
--- a/tests/data/test491
+++ b/tests/data/test491
@@ -31,13 +31,13 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
Two globbed HTTP PUTs, the second upload file is missing
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T '{log/in%TESTNUMBER,log/bad%TESTNUMBER}'
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T '{%LOGDIR/in%TESTNUMBER,%LOGDIR/bad%TESTNUMBER}'
</command>
-<file name="log/in%TESTNUMBER">
+<file name="%LOGDIR/in%TESTNUMBER">
surprise!
</file>
</client>
@@ -51,7 +51,6 @@ Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 10
-Expect: 100-continue
surprise!
</protocol>
diff --git a/tests/data/test492 b/tests/data/test492
index aedaf5b8a..d576cca1c 100644
--- a/tests/data/test492
+++ b/tests/data/test492
@@ -31,16 +31,16 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
Two globbed HTTP PUTs to two globbed URLs
- </name>
- <command>
-'http://%HOSTIP:%HTTPPORT/{one,two}/' -T '{log/first%TESTNUMBER,log/second%TESTNUMBER}' -H "Testno: %TESTNUMBER"
+</name>
+<command>
+'http://%HOSTIP:%HTTPPORT/{one,two}/' -T '{%LOGDIR/first%TESTNUMBER,%LOGDIR/second%TESTNUMBER}' -H "Testno: %TESTNUMBER"
</command>
-<file name="log/first%TESTNUMBER">
+<file name="%LOGDIR/first%TESTNUMBER">
first %TESTNUMBER contents
</file>
-<file1 name="log/second%TESTNUMBER">
+<file1 name="%LOGDIR/second%TESTNUMBER">
second %TESTNUMBER contents
</file1>
</client>
@@ -55,7 +55,6 @@ User-Agent: curl/%VERSION
Accept: */*
Testno: %TESTNUMBER
Content-Length: 19
-Expect: 100-continue
first %TESTNUMBER contents
PUT /two/first%TESTNUMBER HTTP/1.1
@@ -64,7 +63,6 @@ User-Agent: curl/%VERSION
Accept: */*
Testno: %TESTNUMBER
Content-Length: 19
-Expect: 100-continue
first %TESTNUMBER contents
PUT /one/second%TESTNUMBER HTTP/1.1
@@ -73,7 +71,6 @@ User-Agent: curl/%VERSION
Accept: */*
Testno: %TESTNUMBER
Content-Length: 20
-Expect: 100-continue
second %TESTNUMBER contents
PUT /two/second%TESTNUMBER HTTP/1.1
@@ -82,7 +79,6 @@ User-Agent: curl/%VERSION
Accept: */*
Testno: %TESTNUMBER
Content-Length: 20
-Expect: 100-continue
second %TESTNUMBER contents
</protocol>
diff --git a/tests/data/test493 b/tests/data/test493
index f0c41105b..1a677d329 100644
--- a/tests/data/test493
+++ b/tests/data/test493
@@ -33,7 +33,7 @@ proxy
https
</features>
-<file name="log/input%TESTNUMBER">
+<file name="%LOGDIR/input%TESTNUMBER">
.hsts.example "99991001 04:47:41"
</file>
@@ -41,7 +41,7 @@ https
HSTS and %{url_effective} after upgrade
</name>
<command>
--x http://%HOSTIP:%HTTPPORT http://this.hsts.example/%TESTNUMBER --hsts log/input%TESTNUMBER -w '%{url_effective}\n'
+-x http://%HOSTIP:%HTTPPORT http://this.hsts.example/%TESTNUMBER --hsts %LOGDIR/input%TESTNUMBER -w '%{url_effective}\n'
</command>
</client>
diff --git a/tests/data/test494 b/tests/data/test494
index 441744619..648318729 100644
--- a/tests/data/test494
+++ b/tests/data/test494
@@ -21,13 +21,13 @@ blipp
<server>
ftp
</server>
- <name>
+<name>
skip 'macdef' when parsing netrc
- </name>
- <command>
---netrc --netrc-file log/netrc%TESTNUMBER ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
+</name>
+<command>
+--netrc --netrc-file %LOGDIR/netrc%TESTNUMBER ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
-<file name="log/netrc%TESTNUMBER" >
+<file name="%LOGDIR/netrc%TESTNUMBER" >
macdef testmacro
bin
diff --git a/tests/data/test496 b/tests/data/test496
index 19050f377..aa729c66a 100644
--- a/tests/data/test496
+++ b/tests/data/test496
@@ -21,7 +21,7 @@ none
<name>
parallel upload missing file
</name>
- <command>
+<command>
0 -Z -Tz
</command>
</client>
diff --git a/tests/data/test497 b/tests/data/test497
new file mode 100644
index 000000000..4935d3e50
--- /dev/null
+++ b/tests/data/test497
@@ -0,0 +1,62 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+%repeat[1750 x Repeat-this-Header-a-large-number-of-times: Dorothy lived in the midst of the great Kansas prairies, with Uncle Henry, who was a farmer, and Aunt Em, who was the farmer’s wife.%0a]%
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+Reject too large accumulated HTTP response headers
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+# curl: (56) Too large response headers: 307215 > 307200
+# hyper returns a generic error that libcurl converts to an even more
+# generic error
+<errorcode>
+%if hyper
+1
+%else
+56
+%endif
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test498 b/tests/data/test498
new file mode 100644
index 000000000..457c28043
--- /dev/null
+++ b/tests/data/test498
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 301 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Location: /
+Connection: close
+Content-Type: text/html
+%repeat[1700 x Repeat-this-Header-a-large-number-of-times: Dorothy lived in the midst of the great Kansas prairies, with Uncle Henry, who was a farmer, and Aunt Em, who was the farmer’s wife.%0a]%
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+Reject too large HTTP response headers on endless redirects
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --max-redir 400 --location
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+# curl: (56) Too large response headers: 6144086 > 6144000
+# hyper returns a generic error that libcurl converts to an even more
+# generic error
+<errorcode>
+%if hyper
+1
+%else
+56
+%endif
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test5 b/tests/data/test5
index 4e8cd46ee..8d4078fb7 100644
--- a/tests/data/test5
+++ b/tests/data/test5
@@ -25,10 +25,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP over proxy
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/we/want/that/page/%TESTNUMBER#5 -x %HOSTIP:%HTTPPORT
</command>
<features>
diff --git a/tests/data/test50 b/tests/data/test50
index 308095e38..ce4fd1660 100644
--- a/tests/data/test50
+++ b/tests/data/test50
@@ -45,10 +45,10 @@ body
<server>
http
</server>
- <name>
+<name>
HTTP follow redirect with ../../
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/we/are/all/twits/%TESTNUMBER -L
</command>
</client>
diff --git a/tests/data/test500 b/tests/data/test500
index 514d0b974..c215318bc 100644
--- a/tests/data/test500
+++ b/tests/data/test500
@@ -34,18 +34,18 @@ http
lib500
</tool>
- <name>
+<name>
simple libcurl HTTP GET tool
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER log/ip%TESTNUMBER
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER %LOGDIR/ip%TESTNUMBER
</command>
</client>
#
# Verify data after the test has been "shot"
<verify>
-<file name="log/ip%TESTNUMBER">
+<file name="%LOGDIR/ip%TESTNUMBER">
IP %HOSTIP
</file>
<protocol>
diff --git a/tests/data/test501 b/tests/data/test501
index b86642f6a..fb115cba6 100644
--- a/tests/data/test501
+++ b/tests/data/test501
@@ -22,10 +22,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
simple libcurl attempt operation without URL set
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%NOLISTENPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test502 b/tests/data/test502
index 11212572d..0bca19c62 100644
--- a/tests/data/test502
+++ b/tests/data/test502
@@ -26,13 +26,13 @@ file
lib%TESTNUMBER
</tool>
- <name>
+<name>
simple multi file:// get
- </name>
- <command>
-file://%PWD/log/test%TESTNUMBER.txt
+</name>
+<command>
+file://%PWD/%LOGDIR/test%TESTNUMBER.txt
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
foo
bar swsclose
bar
diff --git a/tests/data/test503 b/tests/data/test503
index 1ad7a552d..0690ad340 100644
--- a/tests/data/test503
+++ b/tests/data/test503
@@ -53,13 +53,13 @@ lib%TESTNUMBER
<features>
proxy
</features>
- <name>
+<name>
simple multi http:// through proxytunnel with authentication info
- </name>
- <command>
+</name>
+<command>
http://machine.%TESTNUMBER:%HTTPPORT/%TESTNUMBER %HOSTIP:%PROXYPORT
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
foo
bar
bar
@@ -76,6 +76,7 @@ Host: machine.%TESTNUMBER:%HTTPPORT
Proxy-Authorization: Basic dGVzdDppbmc=
Proxy-Connection: Keep-Alive
+[DISCONNECT]
</proxy>
<protocol>
GET /%TESTNUMBER HTTP/1.1
diff --git a/tests/data/test504 b/tests/data/test504
index 05061e2a8..917c4aee1 100644
--- a/tests/data/test504
+++ b/tests/data/test504
@@ -28,10 +28,10 @@ proxy
lib%TESTNUMBER
</tool>
- <name>
+<name>
simple multi through local proxy without listener
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%NOLISTENPORT/%TESTNUMBER %HOSTIP:%NOLISTENPORT
</command>
</client>
diff --git a/tests/data/test505 b/tests/data/test505
index 13ddc62d7..6eba48936 100644
--- a/tests/data/test505
+++ b/tests/data/test505
@@ -19,13 +19,13 @@ ftp
lib%TESTNUMBER
</tool>
- <name>
+<name>
FTP upload with rename after transfer
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/%TESTNUMBER log/upload%TESTNUMBER
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/%TESTNUMBER %LOGDIR/upload%TESTNUMBER
</command>
-<file name="log/upload%TESTNUMBER">
+<file name="%LOGDIR/upload%TESTNUMBER">
Contents
of
a file
diff --git a/tests/data/test506 b/tests/data/test506
index 44f3afd22..30d4c6215 100644
--- a/tests/data/test506
+++ b/tests/data/test506
@@ -74,7 +74,7 @@ TZ=GMT
lib%TESTNUMBER
</tool>
<command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER %LOGDIR/jar%TESTNUMBER
</command>
</client>
@@ -233,7 +233,7 @@ lock: share [Pigs in space]: 98
unlock: share [Pigs in space]: 99
GLOBAL_CLEANUP
</stdout>
-<file name="log/jar%TESTNUMBER" mode="text">
+<file name="%LOGDIR/jar%TESTNUMBER" mode="text">
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
diff --git a/tests/data/test508 b/tests/data/test508
index 143fe3171..06cdba75f 100644
--- a/tests/data/test508
+++ b/tests/data/test508
@@ -30,10 +30,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
send HTTP POST using read callback
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test51 b/tests/data/test51
index 9bb28654c..277da000f 100644
--- a/tests/data/test51
+++ b/tests/data/test51
@@ -45,10 +45,10 @@ body
<server>
http
</server>
- <name>
+<name>
HTTP follow redirect with excessive ../
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/we/are/all/twits/%TESTNUMBER -L
</command>
</client>
diff --git a/tests/data/test510 b/tests/data/test510
index b673fa11b..36d6c1f13 100644
--- a/tests/data/test510
+++ b/tests/data/test510
@@ -31,10 +31,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
send HTTP POST using read callback, using chunked transfer-encoding
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test511 b/tests/data/test511
index 6bcf25de5..adcabe8bd 100644
--- a/tests/data/test511
+++ b/tests/data/test511
@@ -24,10 +24,10 @@ ftp
lib%TESTNUMBER
</tool>
- <name>
+<name>
FTP with FILETIME and NOBODY but missing file
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test512 b/tests/data/test512
index 6598d3162..8935a12c7 100644
--- a/tests/data/test512
+++ b/tests/data/test512
@@ -29,10 +29,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
simple curl_easy_duplicate() test
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test513 b/tests/data/test513
index df0a96260..ae413bbc9 100644
--- a/tests/data/test513
+++ b/tests/data/test513
@@ -21,9 +21,9 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
send HTTP POST using read callback that returns CURL_READFUNC_ABORT
- </name>
+</name>
# the 1s post-command delay helps to prevent a spurious failure on s390
<command delay="1">
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
diff --git a/tests/data/test514 b/tests/data/test514
index 1d5f38050..fcf1a07ca 100644
--- a/tests/data/test514
+++ b/tests/data/test514
@@ -32,9 +32,9 @@ http
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
First set options to POST and then to make HEAD
- </name>
+</name>
# the 1s post-command delay helps to prevent a spurious failure on s390
<command delay="1">
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
diff --git a/tests/data/test515 b/tests/data/test515
index 42d153b03..9bf6131ed 100644
--- a/tests/data/test515
+++ b/tests/data/test515
@@ -28,10 +28,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
make a POSTFIELDS set to NULL with POSTFIELDSIZE set to zero
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test516 b/tests/data/test516
index 5f7d210a5..e8b522c32 100644
--- a/tests/data/test516
+++ b/tests/data/test516
@@ -3,6 +3,7 @@
<keywords>
HTTP
HTTP POST
+FORM
</keywords>
</info>
@@ -22,7 +23,7 @@ OK
# Client-side
<client>
<features>
-Mime
+form-api
</features>
<server>
http
@@ -32,10 +33,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
-make a HTTPPOST set to NULL
- </name>
- <command>
+<name>
+make an HTTPPOST set to NULL
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test517 b/tests/data/test517
index 0152c0f29..bd197cb5b 100644
--- a/tests/data/test517
+++ b/tests/data/test517
@@ -20,10 +20,10 @@ none
lib%TESTNUMBER
</tool>
- <name>
+<name>
curl_getdate() testing
- </name>
- <command>
+</name>
+<command>
nothing
</command>
</client>
diff --git a/tests/data/test518 b/tests/data/test518
index 042b6d767..05a809bf3 100644
--- a/tests/data/test518
+++ b/tests/data/test518
@@ -43,10 +43,10 @@ lib%TESTNUMBER
./libtest/lib%TESTNUMBER check
</precheck>
- <name>
+<name>
HTTP GET with more than FD_SETSIZE descriptors open
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test519 b/tests/data/test519
index 9b47ed28c..08e56a2ea 100644
--- a/tests/data/test519
+++ b/tests/data/test519
@@ -51,10 +51,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
GET same URL twice with different users
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test52 b/tests/data/test52
index 662a4ef33..e636ed959 100644
--- a/tests/data/test52
+++ b/tests/data/test52
@@ -45,10 +45,10 @@ body
<server>
http
</server>
- <name>
+<name>
HTTP follow redirect with ./-prefix
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/we/are/all/twits/%TESTNUMBER -L
</command>
</client>
diff --git a/tests/data/test520 b/tests/data/test520
index 755caebeb..6a27bb3f8 100644
--- a/tests/data/test520
+++ b/tests/data/test520
@@ -26,10 +26,10 @@ ftp
lib520
</tool>
- <name>
+<name>
FTP RETR with FILETIME
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/520
</command>
</client>
diff --git a/tests/data/test521 b/tests/data/test521
index b8b7896a5..1eec1bb2c 100644
--- a/tests/data/test521
+++ b/tests/data/test521
@@ -35,10 +35,10 @@ ftp
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
FTP dir list PASV with CURLOPT_PORT
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP/%TESTNUMBER/ %FTPPORT
</command>
</client>
diff --git a/tests/data/test522 b/tests/data/test522
index 6691a29a1..3aa053a58 100644
--- a/tests/data/test522
+++ b/tests/data/test522
@@ -32,10 +32,10 @@ http
<tool>
lib521
</tool>
- <name>
+<name>
HTTP GET with CURLOPT_PORT
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP/%TESTNUMBER %HTTPPORT
</command>
</client>
diff --git a/tests/data/test523 b/tests/data/test523
index 88cda7a2c..2bd5a9819 100644
--- a/tests/data/test523
+++ b/tests/data/test523
@@ -34,11 +34,11 @@ http
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
HTTP GET with proxy and CURLOPT_PORT
- </name>
+</name>
# first URL then proxy
- <command>
+<command>
http://www.example.com:999/%TESTNUMBER http://%HOSTIP:%HTTPPORT
</command>
<features>
diff --git a/tests/data/test524 b/tests/data/test524
index 13246e235..3b383003f 100644
--- a/tests/data/test524
+++ b/tests/data/test524
@@ -20,11 +20,11 @@ ftp
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
FTP upload with target URL ending with slash
- </name>
+</name>
# first URL then proxy
- <command>
+<command>
ftp://%HOSTIP:%FTPPORT/path/to/
</command>
</client>
diff --git a/tests/data/test525 b/tests/data/test525
index ce37399fc..2b96a7fd9 100644
--- a/tests/data/test525
+++ b/tests/data/test525
@@ -22,13 +22,13 @@ ftp
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
FTP PORT upload using multi interface
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER log/upload%TESTNUMBER
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER %LOGDIR/upload%TESTNUMBER
</command>
-<file name="log/upload%TESTNUMBER">
+<file name="%LOGDIR/upload%TESTNUMBER">
Moooooooooooo
upload this
</file>
diff --git a/tests/data/test526 b/tests/data/test526
index be2e4be80..85b24d5db 100644
--- a/tests/data/test526
+++ b/tests/data/test526
@@ -29,10 +29,10 @@ ftp
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
FTP RETR same file using different handles but same connection
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test527 b/tests/data/test527
index be2e4be80..85b24d5db 100644
--- a/tests/data/test527
+++ b/tests/data/test527
@@ -29,10 +29,10 @@ ftp
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
FTP RETR same file using different handles but same connection
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test528 b/tests/data/test528
index a55768b33..7cb9e8b11 100644
--- a/tests/data/test528
+++ b/tests/data/test528
@@ -33,10 +33,10 @@ http
<tool>
lib526
</tool>
- <name>
+<name>
HTTP GET same file using different handles but same connection
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/path/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test529 b/tests/data/test529
index 141166c02..737e5018f 100644
--- a/tests/data/test529
+++ b/tests/data/test529
@@ -22,13 +22,13 @@ ftp
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
FTP PORT upload using multi interface (weird cleanup function sequence)
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER log/upload%TESTNUMBER
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER %LOGDIR/upload%TESTNUMBER
</command>
-<file name="log/upload%TESTNUMBER">
+<file name="%LOGDIR/upload%TESTNUMBER">
Moooooooooooo
upload this
</file>
diff --git a/tests/data/test53 b/tests/data/test53
index e3b9ec962..0bbc5d637 100644
--- a/tests/data/test53
+++ b/tests/data/test53
@@ -25,17 +25,20 @@ This server says moo
<server>
http
</server>
- <name>
+<name>
HTTP, junk session cookies
- </name>
- <command>
-%HOSTIP:%HTTPPORT/want/%TESTNUMBER -b log/injar%TESTNUMBER -j
+</name>
+<command>
+%HOSTIP:%HTTPPORT/want/%TESTNUMBER -b %LOGDIR/injar%TESTNUMBER -j
</command>
-<file name="log/injar%TESTNUMBER">
-%HOSTIP FALSE / FALSE 2139150993 mooo indeed
+<file name="%LOGDIR/injar%TESTNUMBER">
+%HOSTIP FALSE / FALSE 22139150993 mooo indeed
%HOSTIP FALSE / FALSE 0 moo1 indeed
%HOSTIP FALSE / FALSE 1 moo2 indeed
</file>
+<features>
+cookies
+</features>
</client>
# Verify data after the test has been "shot"
diff --git a/tests/data/test531 b/tests/data/test531
index 17ccf68e2..59501d5ea 100644
--- a/tests/data/test531
+++ b/tests/data/test531
@@ -25,13 +25,13 @@ ftp
<tool>
lib525
</tool>
- <name>
+<name>
FTP PORT upload using multi interface and get 425 response
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER log/upload%TESTNUMBER
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER %LOGDIR/upload%TESTNUMBER
</command>
-<file name="log/upload%TESTNUMBER">
+<file name="%LOGDIR/upload%TESTNUMBER">
Moooooooooooo
don't upload this
</file>
diff --git a/tests/data/test532 b/tests/data/test532
index f36d0440c..c1d3b0b0c 100644
--- a/tests/data/test532
+++ b/tests/data/test532
@@ -29,10 +29,10 @@ ftp
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
FTP RETR same file using reset handles between each transfer
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test533 b/tests/data/test533
index 4e94f88eb..1dbceb6dd 100644
--- a/tests/data/test533
+++ b/tests/data/test533
@@ -27,10 +27,10 @@ ftp
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
FTP RETR a non-existing file twice using the multi interface
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test534 b/tests/data/test534
index 764fe6647..0e0f35abd 100644
--- a/tests/data/test534
+++ b/tests/data/test534
@@ -28,10 +28,10 @@ ftp
<tool>
lib533
</tool>
- <name>
+<name>
FTP RETR twice using multi: non-existing host and non-existing file
- </name>
- <command>
+</name>
+<command>
ftp://non-existing-host.haxx.se/path/%TESTNUMBER ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test535 b/tests/data/test535
index f9e6c390a..aa5219776 100644
--- a/tests/data/test535
+++ b/tests/data/test535
@@ -44,10 +44,10 @@ http
lib533
</tool>
- <name>
+<name>
HTTP GET multi two files with FAILONERROR
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER http://%HOSTIP:%HTTPPORT/%TESTNUMBER0001
</command>
</client>
diff --git a/tests/data/test537 b/tests/data/test537
index ab718fd29..79678c38e 100644
--- a/tests/data/test537
+++ b/tests/data/test537
@@ -43,10 +43,10 @@ lib%TESTNUMBER
./libtest/lib%TESTNUMBER check
</precheck>
- <name>
+<name>
HTTP GET with a HUGE number of file descriptors open
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test538 b/tests/data/test538
index ff53a8ed6..a269cdf1a 100644
--- a/tests/data/test538
+++ b/tests/data/test538
@@ -23,10 +23,10 @@ ftp
<tool>
lib504
</tool>
- <name>
+<name>
FTP multi-interface download, failed login: PASS not valid
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test539 b/tests/data/test539
index 12f04e921..1fb4e1255 100644
--- a/tests/data/test539
+++ b/tests/data/test539
@@ -40,10 +40,10 @@ ftp
lib%TESTNUMBER
</tool>
- <name>
+<name>
Two FTP fetches using different CURLOPT_FTP_FILEMETHOD
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/path/to/the/file/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test54 b/tests/data/test54
index a9efc2929..8a463118c 100644
--- a/tests/data/test54
+++ b/tests/data/test54
@@ -22,10 +22,10 @@ This server reply is for testing
<server>
http
</server>
- <name>
+<name>
HTTP with blank Location:
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -L
</command>
</client>
diff --git a/tests/data/test540 b/tests/data/test540
index 3e240488e..ef13108b1 100644
--- a/tests/data/test540
+++ b/tests/data/test540
@@ -69,10 +69,10 @@ lib%TESTNUMBER
crypto
proxy
</features>
- <name>
+<name>
HTTP proxy auth Digest multi API re-using connection
- </name>
- <command>
+</name>
+<command>
http://test.remote.example.com/path/%TESTNUMBER http://%HOSTIP:%HTTPPORT silly:person custom.set.host.name
</command>
</client>
diff --git a/tests/data/test541 b/tests/data/test541
index 2dc75f8a4..c0677d8ea 100644
--- a/tests/data/test541
+++ b/tests/data/test541
@@ -19,13 +19,13 @@ ftp
lib%TESTNUMBER
</tool>
- <name>
+<name>
FTP upload and upload same file again without rewind
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/%TESTNUMBER log/upload%TESTNUMBER
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/%TESTNUMBER %LOGDIR/upload%TESTNUMBER
</command>
-<file name="log/upload%TESTNUMBER">
+<file name="%LOGDIR/upload%TESTNUMBER">
Contents
of
a file
diff --git a/tests/data/test542 b/tests/data/test542
index 0d918fbcd..b39b1b30d 100644
--- a/tests/data/test542
+++ b/tests/data/test542
@@ -30,10 +30,10 @@ ftp
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
FTP a file with NOBODY yes and HEADER no
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
diff --git a/tests/data/test543 b/tests/data/test543
index 2abaa6962..e3ac13bd2 100644
--- a/tests/data/test543
+++ b/tests/data/test543
@@ -14,10 +14,10 @@ none
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
curl_easy_escape
- </name>
- <command>
+</name>
+<command>
-
</command>
diff --git a/tests/data/test544 b/tests/data/test544
index 390489706..a35c9cf70 100644
--- a/tests/data/test544
+++ b/tests/data/test544
@@ -29,10 +29,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
HTTP POST text data using CURLOPT_COPYPOSTFIELDS
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test545 b/tests/data/test545
index a06b8ebb6..3827cb9de 100644
--- a/tests/data/test545
+++ b/tests/data/test545
Binary files differ
diff --git a/tests/data/test546 b/tests/data/test546
index 6db456f16..f8f01641a 100644
--- a/tests/data/test546
+++ b/tests/data/test546
@@ -34,10 +34,10 @@ ftp
<tool>
lib533
</tool>
- <name>
+<name>
FTP RETR a non-existing file then a found one using the multi interface
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test549 b/tests/data/test549
index 9f6ade6fd..95b2def5c 100644
--- a/tests/data/test549
+++ b/tests/data/test549
@@ -37,12 +37,12 @@ proxy
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
FTP RETR over proxy with CURLOPT_PROXY_TRANSFER_MODE
- </name>
+</name>
# first URL then proxy
- <command>
-ftp://www.example.com/moo/%TESTNUMBER http://%HOSTIP:%HTTPPORT
+<command>
+ftp://www.example.com/moo/%TESTNUMBER http://%HOSTIP:%HTTPPORT
</command>
</client>
diff --git a/tests/data/test55 b/tests/data/test55
index 8786d40b2..ea014f4aa 100644
--- a/tests/data/test55
+++ b/tests/data/test55
@@ -39,10 +39,10 @@ body
<server>
http
</server>
- <name>
+<name>
HTTP follow redirect with single slash in path
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -L
</command>
</client>
diff --git a/tests/data/test550 b/tests/data/test550
index 233546b6a..a4ee2b49b 100644
--- a/tests/data/test550
+++ b/tests/data/test550
@@ -37,11 +37,11 @@ proxy
<tool>
lib549
</tool>
- <name>
+<name>
FTP RETR over proxy with CURLOPT_PROXY_TRANSFER_MODE and ASCII transfer
- </name>
+</name>
# first URL then proxy
- <command>
+<command>
ftp://www.example.com/moo/%TESTNUMBER http://%HOSTIP:%HTTPPORT ascii
</command>
</client>
diff --git a/tests/data/test551 b/tests/data/test551
index 2a6b1f5d5..452da3927 100644
--- a/tests/data/test551
+++ b/tests/data/test551
@@ -65,10 +65,10 @@ lib547
crypto
proxy
</features>
- <name>
+<name>
HTTP proxy auth Digest with POST data from read callback
- </name>
- <command>
+</name>
+<command>
http://test.remote.example.com/path/%TESTNUMBER http://%HOSTIP:%HTTPPORT s1lly:pers0n
</command>
</client>
diff --git a/tests/data/test552 b/tests/data/test552
index 99202fc22..2658e73e6 100644
--- a/tests/data/test552
+++ b/tests/data/test552
@@ -58,10 +58,10 @@ lib%TESTNUMBER
crypto
proxy
</features>
- <name>
+<name>
HTTP proxy auth Digest with 70K POST data from read callback
- </name>
- <command>
+</name>
+<command>
http://test.remote.example.com/path/%TESTNUMBER http://s1lly:pers0n@%HOSTIP:%HTTPPORT/
</command>
</client>
diff --git a/tests/data/test553 b/tests/data/test553
index f640ba4d0..4500751a1 100644
--- a/tests/data/test553
+++ b/tests/data/test553
@@ -31,10 +31,10 @@ lib%TESTNUMBER
</tool>
<features>
</features>
- <name>
+<name>
HTTP post with huge request headers and post data from callback
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/path/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test554 b/tests/data/test554
index cee616427..1e2fc5f6b 100644
--- a/tests/data/test554
+++ b/tests/data/test554
@@ -3,6 +3,7 @@
<keywords>
HTTP
HTTP POST
+FORM
</keywords>
</info>
@@ -39,7 +40,7 @@ hello
# Client-side
<client>
<features>
-Mime
+form-api
</features>
<server>
http
@@ -49,10 +50,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
HTTP multi-part formpost using read callback for the file part
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
@@ -61,8 +62,8 @@ http://%HOSTIP:%HTTPPORT/%TESTNUMBER
# Verify data after the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/------------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/
+s/^--------------------------[A-Za-z0-9]*/------------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=----------------------------/
</strippart>
# Note that the stripping above removes 12 bytes from every occurrence of the
# boundary string and since 5 of them are in the body contents, we see
@@ -71,7 +72,7 @@ s/boundary=------------------------[a-z0-9]*/boundary=--------------------------
POST /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
-Content-Length: 744
+Content-Length: 780
Content-Type: multipart/form-data; boundary=----------------------------
------------------------------
@@ -102,7 +103,7 @@ blah blah
POST /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
-Content-Length: 758
+Content-Length: 794
Content-Type: multipart/form-data; boundary=----------------------------
------------------------------
diff --git a/tests/data/test556 b/tests/data/test556
index 6384084d4..e531f012e 100644
--- a/tests/data/test556
+++ b/tests/data/test556
@@ -27,10 +27,10 @@ http
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
send and recv HTTP
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT
</command>
</client>
diff --git a/tests/data/test558 b/tests/data/test558
index 6df79887a..06b772816 100644
--- a/tests/data/test558
+++ b/tests/data/test558
@@ -35,7 +35,7 @@ nothing
#
# Verify data after the test has been "shot"
<verify>
-<file name="log/memdump">
+<file name="%LOGDIR/memdump">
MEM easy.c: malloc()
MEM lib%TESTNUMBER.c: malloc()
MEM lib%TESTNUMBER.c: free()
diff --git a/tests/data/test56 b/tests/data/test56
index b0701194d..8e4a12a90 100644
--- a/tests/data/test56
+++ b/tests/data/test56
@@ -23,9 +23,9 @@ This is the proof it works
<server>
http
</server>
- <name>
+<name>
HTTP POST with *HUGE* request and chunked transfer-encoding
- </name>
+</name>
<stdin>
#
data "we post this"
@@ -37,7 +37,7 @@ header "Transfer-Encoding: chunked"
-A "%repeat[99999 x a]%"
#
</stdin>
- <command>
+<command>
-K - %HOSTIP:%HTTPPORT/that.site.com/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test560 b/tests/data/test560
index 0f9befb54..30641a166 100644
--- a/tests/data/test560
+++ b/tests/data/test560
@@ -32,10 +32,10 @@ https
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
simple HTTPS GET with multi interface
- </name>
- <command>
+</name>
+<command>
https://%HOSTIP:%HTTPSPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test561 b/tests/data/test561
index a630185b4..09e381745 100644
--- a/tests/data/test561
+++ b/tests/data/test561
@@ -38,11 +38,11 @@ proxy
<tool>
lib549
</tool>
- <name>
+<name>
FTP RETR with CURLOPT_PROXY_TRANSFER_MODE, ASCII transfer and type=i
- </name>
+</name>
# first URL then proxy
- <command>
+<command>
"ftp://www.example.com/moo/%TESTNUMBER;type=i" http://%HOSTIP:%HTTPPORT ascii
</command>
</client>
diff --git a/tests/data/test562 b/tests/data/test562
index f442a63e5..d1793891d 100644
--- a/tests/data/test562
+++ b/tests/data/test562
@@ -22,13 +22,13 @@ ftp
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
FTP a type=A URL and CURLOPT_PORT set
- </name>
+</name>
# note that we need quotes around the URL below to make sure the shell doesn't
# treat the semicolon as a separator!
- <command>
+<command>
'ftp://%HOSTIP:23456/%TESTNUMBER;type=A' %FTPPORT
</command>
diff --git a/tests/data/test563 b/tests/data/test563
index c19b9026a..b7c61db76 100644
--- a/tests/data/test563
+++ b/tests/data/test563
@@ -29,9 +29,9 @@ ftp
<tool>
lib562
</tool>
- <name>
+<name>
FTP type=A URL and CURLOPT_PORT set and proxy
- </name>
+</name>
<features>
proxy
</features>
@@ -40,7 +40,7 @@ ftp_proxy=http://%HOSTIP:%HTTPPORT/
</setenv>
# note that we need quotes around the URL below to make sure the shell doesn't
# treat the semicolon as a separator!
- <command>
+<command>
"ftp://%HOSTIP:23456/%TESTNUMBER;type=A" %FTPPORT
</command>
diff --git a/tests/data/test564 b/tests/data/test564
index 3d866f283..96a6f9b1a 100644
--- a/tests/data/test564
+++ b/tests/data/test564
@@ -32,9 +32,9 @@ socks4
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
FTP RETR a file over a SOCKS proxy using the multi interface
- </name>
+</name>
<command>
ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER %HOSTIP:%SOCKSPORT
</command>
diff --git a/tests/data/test565 b/tests/data/test565
index 92a7a702b..2587c68d6 100644
--- a/tests/data/test565
+++ b/tests/data/test565
@@ -66,10 +66,10 @@ crypto
lib%TESTNUMBER
</tool>
- <name>
+<name>
send HTTP POST using read callback, chunked transfer-encoding and Digest
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test566 b/tests/data/test566
index 09144f5d9..1ff92f4e2 100644
--- a/tests/data/test566
+++ b/tests/data/test566
@@ -33,18 +33,18 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
HTTP GET with CURLINFO_CONTENT_LENGTH_DOWNLOAD and 0 bytes transfer
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER log/ip%TESTNUMBER
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER %LOGDIR/ip%TESTNUMBER
</command>
</client>
#
# Verify data after the test has been "shot"
<verify>
-<file name="log/ip%TESTNUMBER">
+<file name="%LOGDIR/ip%TESTNUMBER">
CL 0
</file>
<protocol>
diff --git a/tests/data/test568 b/tests/data/test568
index 7dd23ca48..700fd44bf 100644
--- a/tests/data/test568
+++ b/tests/data/test568
@@ -58,10 +58,10 @@ lib%TESTNUMBER
RTSP Announce (PUT and POST style) test
</name>
<command>
-rtsp://%HOSTIP:%RTSPPORT/%TESTNUMBER
+rtsp://%HOSTIP:%RTSPPORT/%TESTNUMBER %LOGDIR/file%TESTNUMBER.txt
</command>
# file written before test command runs
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
v=0
o=mhandley 2890844526 2890845468 IN IP4 126.16.64.4
s=SDP Seminar
diff --git a/tests/data/test569 b/tests/data/test569
index 043c2445d..b70e9083c 100644
--- a/tests/data/test569
+++ b/tests/data/test569
@@ -66,7 +66,7 @@ lib%TESTNUMBER
RTSP Session ID parsing
</name>
<command>
-rtsp://%HOSTIP:%RTSPPORT/%TESTNUMBER log/idfile%TESTNUMBER.txt
+rtsp://%HOSTIP:%RTSPPORT/%TESTNUMBER %LOGDIR/idfile%TESTNUMBER.txt
</command>
</client>
@@ -100,7 +100,7 @@ CSeq: 6
Session: A
</protocol>
-<file name="log/idfile%TESTNUMBER.txt">
+<file name="%LOGDIR/idfile%TESTNUMBER.txt">
Got Session ID: [00.+1-am-aSe55ion_id\$yes-i-am\$]
Got Session ID: [\$extraspaces]
Got Session ID: [A]
diff --git a/tests/data/test57 b/tests/data/test57
index f379d7488..f177f08eb 100644
--- a/tests/data/test57
+++ b/tests/data/test57
@@ -22,11 +22,11 @@ Content-Type: text/html; charset=ISO-8859-4
<server>
http
</server>
- <name>
+<name>
HTTP content-type with spaces in
- </name>
- <command>
--w "%{content_type}\n" http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o log/out%TESTNUMBER
+</name>
+<command>
+-w "%{content_type}\n" http://%HOSTIP:%HTTPPORT/%TESTNUMBER -o %LOGDIR/out%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test571 b/tests/data/test571
index 3cc1b98b5..bae97d418 100644
--- a/tests/data/test571
+++ b/tests/data/test571
@@ -19,6 +19,7 @@ RTSP/1.0 200 OK
Server: RTSPD/libcurl-test
Session: asdf
CSeq: 1
+Transport: RTP/AVP/TCP;unicast;interleaved=0-1
</data1>
@@ -54,6 +55,7 @@ rtp: part 2 channel 0 size 500
rtp: part 2 channel 0 size 196
rtp: part 2 channel 0 size 124
rtp: part 2 channel 0 size 824
+rtp: part 2 channel 0 size 18 size_err -6
rtp: part 3 channel 1 size 10
rtp: part 3 channel 0 size 50
rtp: part 4 channel 0 size 798
@@ -62,6 +64,12 @@ rtp: part 4 channel 1 size 30
rtp: part 4 channel 0 size 2048
rtp: part 4 channel 0 size 85
rtp: part 4 channel 1 size 24
+rtp: part 4 channel 0 size 17 size_err -4
+rtp: part 4 channel 0 size 33
+rtp: part 4 channel 0 size 127
+rtp: part 4 channel 1 size 24 size_err 11
+rtp: part 4 channel 0 size 37
+rtp: part 4 channel 0 size 63
</servercmd>
</reply>
@@ -78,7 +86,7 @@ lib%TESTNUMBER
RTSP RTP Interleaving Test
</name>
<command>
-rtsp://%HOSTIP:%RTSPPORT/%TESTNUMBER log/protofile%TESTNUMBER.txt
+rtsp://%HOSTIP:%RTSPPORT/%TESTNUMBER %LOGDIR/protofile%TESTNUMBER.txt
</command>
</client>
@@ -89,6 +97,7 @@ RTP: message size 500, channel 0
RTP: message size 196, channel 0
RTP: message size 124, channel 0
RTP: message size 824, channel 0
+RTP: message size 12, channel 0
RTP: message size 10, channel 1
RTP: message size 50, channel 0
RTP: message size 798, channel 0
@@ -97,9 +106,15 @@ RTP: message size 30, channel 1
RTP: message size 2048, channel 0
RTP: message size 85, channel 0
RTP: message size 24, channel 1
+RTP: message size 13, channel 0
+RTP: message size 33, channel 0
+RTP: message size 127, channel 0
+RTP: message size 35, channel 1
+RTP PAYLOAD END CORRUPTED (11), [$]
+RTP: message size 63, channel 0
</stdout>
-<file name="log/protofile%TESTNUMBER.txt">
+<file name="%LOGDIR/protofile%TESTNUMBER.txt">
$99
</file>
</verify>
diff --git a/tests/data/test572 b/tests/data/test572
index 0a470559b..4ac86bc9b 100644
--- a/tests/data/test572
+++ b/tests/data/test572
@@ -73,10 +73,10 @@ lib%TESTNUMBER
RTSP GET_PARAMETER (Put/Heartbeat/Post)
</name>
<command>
-rtsp://%HOSTIP:%RTSPPORT/%TESTNUMBER
+rtsp://%HOSTIP:%RTSPPORT/%TESTNUMBER %LOGDIR/file%TESTNUMBER.txt
</command>
# file written before test command runs
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
scale
speed
</file>
diff --git a/tests/data/test573 b/tests/data/test573
index cab270bb6..67e806dcd 100644
--- a/tests/data/test573
+++ b/tests/data/test573
@@ -35,10 +35,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
verify connect time with multi interface
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test575 b/tests/data/test575
index e84a39f05..d51c5a08d 100644
--- a/tests/data/test575
+++ b/tests/data/test575
@@ -23,10 +23,10 @@ ftp
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
FTP wildcard download - dup_handle and multi interface
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/fully_simulated/UNIX/*
</command>
</client>
diff --git a/tests/data/test576 b/tests/data/test576
index 2a1b9419c..e8f190156 100644
--- a/tests/data/test576
+++ b/tests/data/test576
@@ -21,10 +21,10 @@ ftp
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
FTP wildcard download - skip/parser_correctness/CURLOPT_FNMATCH_FUNCTION (Unix)
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/fully_simulated/UNIX/*
</command>
</client>
diff --git a/tests/data/test578 b/tests/data/test578
index 2ff8a1f1b..d909de87b 100644
--- a/tests/data/test578
+++ b/tests/data/test578
@@ -34,18 +34,18 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
HTTP POST lower than MAX_INITIAL_POST_SIZE with progress callback
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER log/ip%TESTNUMBER
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER %LOGDIR/ip%TESTNUMBER
</command>
</client>
#
# Verify data after the test has been "shot"
<verify>
-<file name="log/ip%TESTNUMBER">
+<file name="%LOGDIR/ip%TESTNUMBER">
PASSED, UL data matched data size
</file>
</verify>
diff --git a/tests/data/test579 b/tests/data/test579
index e4b072bc2..476499ff0 100644
--- a/tests/data/test579
+++ b/tests/data/test579
@@ -64,18 +64,18 @@ crypto
lib%TESTNUMBER
</tool>
- <name>
+<name>
small chunked HTTP POSTs with digest auth. and progress callback
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER log/ip%TESTNUMBER
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER %LOGDIR/ip%TESTNUMBER
</command>
</client>
#
# Verify data after the test has been "shot"
<verify>
-<file name="log/ip%TESTNUMBER">
+<file name="%LOGDIR/ip%TESTNUMBER">
Progress callback called with UL 0 out of 0
Progress callback called with UL 8 out of 0
Progress callback called with UL 16 out of 0
diff --git a/tests/data/test58 b/tests/data/test58
index 75765b224..fd4beac00 100644
--- a/tests/data/test58
+++ b/tests/data/test58
@@ -25,10 +25,10 @@ http
<name>
HTTP PUT from file with weird letters
</name>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/ -T log/%TESTNUMBERte[]st.txt -g
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/ -T %LOGDIR/%TESTNUMBERte[]st.txt -g
</command>
-<file name="log/%TESTNUMBERte[]st.txt">
+<file name="%LOGDIR/%TESTNUMBERte[]st.txt">
a few bytes
</file>
</client>
@@ -41,7 +41,6 @@ Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 12
-Expect: 100-continue
a few bytes
</protocol>
diff --git a/tests/data/test580 b/tests/data/test580
index c19a52a30..63cd0ca0d 100644
--- a/tests/data/test580
+++ b/tests/data/test580
@@ -35,10 +35,10 @@ http
lib507
</tool>
- <name>
+<name>
multi interface, multiple Location: headers
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test581 b/tests/data/test581
index 50b99e391..e784e72ea 100644
--- a/tests/data/test581
+++ b/tests/data/test581
@@ -35,10 +35,10 @@ http
lib507
</tool>
- <name>
+<name>
multi interface, multiple Content-Type: headers
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test582 b/tests/data/test582
index ddf17e3e3..194591b53 100644
--- a/tests/data/test582
+++ b/tests/data/test582
@@ -20,13 +20,13 @@ sftp
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
SFTP upload using multi interface
- </name>
- <command>
-Sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/upload%TESTNUMBER.txt %PWD/log/file%TESTNUMBER.txt %USER:
+</name>
+<command>
+Sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/upload%TESTNUMBER.txt %PWD/%LOGDIR/file%TESTNUMBER.txt %USER: %LOGDIR/server/curl_client_key.pub %LOGDIR/server/curl_client_key
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Moooooooooooo
upload this
</file>
@@ -41,7 +41,7 @@ disable
</strip>
<protocol>
</protocol>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Moooooooooooo
upload this
</file>
diff --git a/tests/data/test583 b/tests/data/test583
index 029cdac32..0f49cd995 100644
--- a/tests/data/test583
+++ b/tests/data/test583
@@ -20,16 +20,16 @@ sftp
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
SFTP with multi interface, remove handle early
- </name>
+</name>
# The command here uses 'localhost' just to make sure that curl_multi_perform
# won't reach too far in the first invoke. When using c-ares at least, the
# name resolve will cause it to return rather quickly and thus we could trigger
# the problem we're looking to verify.
- <command>
-sftp://localhost:%SSHPORT%SSH_PWD/log/upload%TESTNUMBER.txt %USER:
+<command>
+sftp://localhost:%SSHPORT%SSH_PWD/%LOGDIR/upload%TESTNUMBER.txt %USER: %LOGDIR/server/curl_client_key.pub %LOGDIR/server/curl_client_key
</command>
</client>
diff --git a/tests/data/test584 b/tests/data/test584
index 7a7d2499c..a263e7187 100644
--- a/tests/data/test584
+++ b/tests/data/test584
@@ -47,10 +47,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
CURLOPT_MIMEPOST first set then set to NULL
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
@@ -59,14 +59,14 @@ http://%HOSTIP:%HTTPPORT/%TESTNUMBER
# Verify data after the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/--------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=------------------------/
+s/^--------------------------[A-Za-z0-9]*/--------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=------------------------/
</strippart>
<protocol>
POST /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
-Content-Length: 144
+Content-Length: 156
Content-Type: multipart/form-data; boundary=------------------------
--------------------------
diff --git a/tests/data/test585 b/tests/data/test585
index 213edef2c..393498c61 100644
--- a/tests/data/test585
+++ b/tests/data/test585
@@ -46,10 +46,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
socket open/close callbacks
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test586 b/tests/data/test586
index 18d614b5d..b17a702a6 100644
--- a/tests/data/test586
+++ b/tests/data/test586
@@ -34,10 +34,10 @@ ftp
<tool>
lib585
</tool>
- <name>
+<name>
FTP and open/close socket callbacks
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test587 b/tests/data/test587
index 6af7d9936..541df4546 100644
--- a/tests/data/test587
+++ b/tests/data/test587
@@ -3,6 +3,7 @@
<keywords>
HTTP
HTTP POST
+FORM
flaky
</keywords>
</info>
@@ -17,7 +18,7 @@ flaky
# Client-side
<client>
<features>
-Mime
+form-api
</features>
<server>
http
@@ -27,10 +28,12 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
HTTP multi-part formpost with aborted read callback
- </name>
- <command>
+</name>
+# Add a delay to give server time to write its output since we otherwise might
+# not even give it enough time to write its lock file.
+ <command delay="1">
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
@@ -39,14 +42,14 @@ http://%HOSTIP:%HTTPPORT/%TESTNUMBER
# Verify data after the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/------------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/
+s/^--------------------------[A-Za-z0-9]*/------------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=----------------------------/
</strippart>
<protocol>
POST /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
-Content-Length: 744
+Content-Length: 780
Content-Type: multipart/form-data; boundary=----------------------------
------------------------------
diff --git a/tests/data/test588 b/tests/data/test588
index 1eb262f5c..9c8c5f320 100644
--- a/tests/data/test588
+++ b/tests/data/test588
@@ -31,13 +31,13 @@ ftp
<tool>
lib525
</tool>
- <name>
+<name>
FTP PORT upload using multi interface, EPRT doesn't work
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER log/upload%TESTNUMBER
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER %LOGDIR/upload%TESTNUMBER
</command>
-<file name="log/upload%TESTNUMBER">
+<file name="%LOGDIR/upload%TESTNUMBER">
Moooooooooooo
upload this
</file>
diff --git a/tests/data/test589 b/tests/data/test589
index 6f4597877..c798c0eed 100644
--- a/tests/data/test589
+++ b/tests/data/test589
@@ -33,10 +33,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
-make a HTTP MIME POST set to NULL
- </name>
- <command>
+<name>
+make an HTTP MIME POST set to NULL
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test59 b/tests/data/test59
index 809e4723d..b86b02d3d 100644
--- a/tests/data/test59
+++ b/tests/data/test59
@@ -23,10 +23,10 @@ hej
<server>
http
</server>
- <name>
+<name>
HTTP URL with slash but with "parameter"
- </name>
- <command>
+</name>
+<command>
"http://%HOSTIP:%HTTPPORT?mooo/%TESTNUMBER"
</command>
</client>
diff --git a/tests/data/test591 b/tests/data/test591
index 843ddb397..d1cbf082a 100644
--- a/tests/data/test591
+++ b/tests/data/test591
@@ -33,13 +33,13 @@ ftp
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
FTP multi PORT and 425 on upload
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER %FTPTIME2 log/upload%TESTNUMBER
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER %FTPTIME2 %LOGDIR/upload%TESTNUMBER
</command>
-<file name="log/upload%TESTNUMBER">
+<file name="%LOGDIR/upload%TESTNUMBER">
Moooooooooooo for %TESTNUMBER
upload this
</file>
diff --git a/tests/data/test592 b/tests/data/test592
index fc9f15d1d..f77eb9a87 100644
--- a/tests/data/test592
+++ b/tests/data/test592
@@ -33,13 +33,13 @@ ftp
<tool>
lib591
</tool>
- <name>
+<name>
FTP multi PORT and 421 on upload
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER %FTPTIME2 log/upload%TESTNUMBER
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER %FTPTIME2 %LOGDIR/upload%TESTNUMBER
</command>
-<file name="log/upload%TESTNUMBER">
+<file name="%LOGDIR/upload%TESTNUMBER">
Moooooooooooo for %TESTNUMBER
upload this
</file>
diff --git a/tests/data/test593 b/tests/data/test593
index 47c1d9434..9a15a5184 100644
--- a/tests/data/test593
+++ b/tests/data/test593
@@ -33,13 +33,13 @@ ftp
<tool>
lib591
</tool>
- <name>
+<name>
FTP multi PORT upload, no data conn and no transient neg. reply
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER %FTPTIME2 log/upload%TESTNUMBER
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER %FTPTIME2 %LOGDIR/upload%TESTNUMBER
</command>
-<file name="log/upload%TESTNUMBER">
+<file name="%LOGDIR/upload%TESTNUMBER">
Moooooooooooo for %TESTNUMBER
upload this
</file>
diff --git a/tests/data/test594 b/tests/data/test594
index 5a4645092..cd98f0b9d 100644
--- a/tests/data/test594
+++ b/tests/data/test594
@@ -12,6 +12,8 @@ STOR
multi
EPRT refused
NODATACONN
+timeout
+FAILURE
</keywords>
</info>
@@ -33,13 +35,13 @@ ftp
<tool>
lib591
</tool>
- <name>
+<name>
FTP multi PORT upload, no data conn and no positive prelim. reply
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER %FTPTIME2 log/upload%TESTNUMBER
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/path/%TESTNUMBER %FTPTIME2 %LOGDIR/upload%TESTNUMBER
</command>
-<file name="log/upload%TESTNUMBER">
+<file name="%LOGDIR/upload%TESTNUMBER">
Moooooooooooo for %TESTNUMBER
upload this
</file>
diff --git a/tests/data/test595 b/tests/data/test595
index 4d2f62b6d..40ace13d5 100644
--- a/tests/data/test595
+++ b/tests/data/test595
@@ -32,11 +32,11 @@ ftp
lib585
</tool>
- <name>
+<name>
verify close callbacks with passive FTP
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/%TESTNUMBER log/ip%TESTNUMBER
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/%TESTNUMBER %LOGDIR/ip%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test596 b/tests/data/test596
index 64bd52b57..7175c63f8 100644
--- a/tests/data/test596
+++ b/tests/data/test596
@@ -32,11 +32,11 @@ ftp
lib585
</tool>
- <name>
+<name>
verify close callbacks with active FTP
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/%TESTNUMBER log/ip%TESTNUMBER activeftp
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/%TESTNUMBER %LOGDIR/ip%TESTNUMBER activeftp
</command>
</client>
diff --git a/tests/data/test597 b/tests/data/test597
index 6ab578877..5402d29b1 100644
--- a/tests/data/test597
+++ b/tests/data/test597
@@ -14,9 +14,9 @@ ftp
<tool>
lib%TESTNUMBER
</tool>
- <name>
+<name>
FTP connect only option
- </name>
+</name>
<command>
ftp://%HOSTIP:%FTPPORT
diff --git a/tests/data/test598 b/tests/data/test598
index 5e52315eb..7a6601b9a 100644
--- a/tests/data/test598
+++ b/tests/data/test598
@@ -52,12 +52,15 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
curl_easy_reset with referer and other strings set
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
+<features>
+cookies
+</features>
</client>
#
diff --git a/tests/data/test599 b/tests/data/test599
index 5911b96ef..5d334e070 100644
--- a/tests/data/test599
+++ b/tests/data/test599
@@ -68,18 +68,18 @@ lib%TESTNUMBER
# Bug 3510057 pointed out that when following a location to a larger chunked
# encoded page, the first size would still be used in the progress callback
- <name>
+<name>
HTTP GET with progress callback and redirects changing content sizes
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER log/ip%TESTNUMBER
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER %LOGDIR/ip%TESTNUMBER
</command>
</client>
#
# Verify data after the test has been "shot"
<verify>
-<file name="log/ip%TESTNUMBER">
+<file name="%LOGDIR/ip%TESTNUMBER">
CL -1
</file>
</verify>
diff --git a/tests/data/test6 b/tests/data/test6
index d8231cbdb..9c5db36d9 100644
--- a/tests/data/test6
+++ b/tests/data/test6
@@ -25,12 +25,15 @@ swsclose: booo
<server>
http
</server>
- <name>
+<name>
HTTP with simple cookie send
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/we/want/that/page/%TESTNUMBER -b "name=contents;name2=content2" -b name3=content3
</command>
+<features>
+cookies
+</features>
</client>
# Verify data after the test has been "shot"
diff --git a/tests/data/test60 b/tests/data/test60
index d23918ba8..14338b440 100644
--- a/tests/data/test60
+++ b/tests/data/test60
@@ -27,7 +27,7 @@ http
<name>
HTTP PUT from stdin with wrong content-length
</name>
- <command>
+<command>
http://%HOSTIP:%HTTPPORT/bzz/%TESTNUMBER -T - -H "Content-Length: 1"
</command>
<stdin>
diff --git a/tests/data/test600 b/tests/data/test600
index 88a6055c3..f2d6510ab 100644
--- a/tests/data/test600
+++ b/tests/data/test600
@@ -20,13 +20,13 @@ for ssh test
<server>
sftp
</server>
- <name>
+<name>
SFTP retrieval
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt --insecure
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test data
for ssh test
</file>
diff --git a/tests/data/test601 b/tests/data/test601
index cadeeafe0..1f01ffd87 100644
--- a/tests/data/test601
+++ b/tests/data/test601
@@ -20,13 +20,13 @@ for ssh test
<server>
scp
</server>
- <name>
+<name>
SCP retrieval
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt --insecure
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test data
for ssh test
</file>
diff --git a/tests/data/test602 b/tests/data/test602
index 56d2747f2..8894c096c 100644
--- a/tests/data/test602
+++ b/tests/data/test602
@@ -17,13 +17,13 @@ SFTP put
<server>
sftp
</server>
- <name>
+<name>
SFTP put
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: -T log/file%TESTNUMBER.txt sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/upload.%TESTNUMBER --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: -T %LOGDIR/file%TESTNUMBER.txt sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/upload.%TESTNUMBER --insecure
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test data
for ssh upload test
</file>
diff --git a/tests/data/test603 b/tests/data/test603
index b873f1587..e98b73d11 100644
--- a/tests/data/test603
+++ b/tests/data/test603
@@ -17,13 +17,13 @@ SCP upload
<server>
scp
</server>
- <name>
+<name>
SCP upload
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: -T log/file%TESTNUMBER.txt scp://%HOSTIP:%SSHPORT%SSH_PWD/log/upload.%TESTNUMBER --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: -T %LOGDIR/file%TESTNUMBER.txt scp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/upload.%TESTNUMBER --insecure
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test data
for ssh upload test
</file>
diff --git a/tests/data/test604 b/tests/data/test604
index f503e669e..9e129ae5a 100644
--- a/tests/data/test604
+++ b/tests/data/test604
@@ -12,11 +12,11 @@ FAILURE
<server>
sftp
</server>
- <name>
+<name>
SFTP retrieval of nonexistent file
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/not-a-valid-file-moooo --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/not-a-valid-file-moooo --insecure
</command>
</client>
diff --git a/tests/data/test605 b/tests/data/test605
index 29555fa82..380b77a75 100644
--- a/tests/data/test605
+++ b/tests/data/test605
@@ -12,11 +12,11 @@ FAILURE
<server>
scp
</server>
- <name>
+<name>
SCP retrieval of nonexistent file
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%SSH_PWD/not-a-valid-file-moooo --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%SSH_PWD/not-a-valid-file-moooo --insecure
</command>
</client>
diff --git a/tests/data/test606 b/tests/data/test606
index c790bd685..85c462f0f 100644
--- a/tests/data/test606
+++ b/tests/data/test606
@@ -12,11 +12,11 @@ FAILURE
<server>
sftp
</server>
- <name>
+<name>
SFTP invalid user login
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u not-a-valid-user: sftp://%HOSTIP:%SSHPORT%SSH_PWD/not-a-valid-file-moooo --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u not-a-valid-user: sftp://%HOSTIP:%SSHPORT%SSH_PWD/not-a-valid-file-moooo --insecure
</command>
</client>
diff --git a/tests/data/test607 b/tests/data/test607
index 8c13e5844..091a73e4c 100644
--- a/tests/data/test607
+++ b/tests/data/test607
@@ -12,11 +12,11 @@ FAILURE
<server>
scp
</server>
- <name>
+<name>
SCP invalid user login
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u not-a-valid-user: scp://%HOSTIP:%SSHPORT%SSH_PWD/not-a-valid-file-moooo --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u not-a-valid-user: scp://%HOSTIP:%SSHPORT%SSH_PWD/not-a-valid-file-moooo --insecure
</command>
</client>
diff --git a/tests/data/test608 b/tests/data/test608
index f919e9c73..157713e37 100644
--- a/tests/data/test608
+++ b/tests/data/test608
@@ -20,18 +20,18 @@ Test file for rename test
<server>
sftp
</server>
- <name>
+<name>
SFTP post-quote rename
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: -Q "-rename %PWD/log/file%TESTNUMBER.txt %PWD/log/file%TESTNUMBER-renamed.txt" sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: -Q "-rename %PWD/%LOGDIR/file%TESTNUMBER.txt %PWD/%LOGDIR/file%TESTNUMBER-renamed.txt" sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt --insecure
</command>
# Verify that the file was renamed properly, then rename the file back to what
# it was so the verify section works and the file can be cleaned up.
<postcheck>
-perl %SRCDIR/libtest/test610.pl gone %PWD/log/file%TESTNUMBER.txt move %PWD/log/file%TESTNUMBER-renamed.txt %PWD/log/file%TESTNUMBER.txt
+perl %SRCDIR/libtest/test610.pl gone %PWD/%LOGDIR/file%TESTNUMBER.txt move %PWD/%LOGDIR/file%TESTNUMBER-renamed.txt %PWD/%LOGDIR/file%TESTNUMBER.txt
</postcheck>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test file for rename test
</file>
</client>
@@ -39,7 +39,7 @@ Test file for rename test
#
# Verify data after the test has been "shot"
<verify>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test file for rename test
</file>
<valgrind>
diff --git a/tests/data/test609 b/tests/data/test609
index 66057d255..3b9668552 100644
--- a/tests/data/test609
+++ b/tests/data/test609
@@ -21,13 +21,13 @@ Test file for mkdir test
<server>
sftp
</server>
- <name>
+<name>
SFTP post-quote mkdir failure
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: -Q "-mkdir %PWD/log/file%TESTNUMBER.txt" sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: -Q "-mkdir %PWD/%LOGDIR/file%TESTNUMBER.txt" sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt --insecure
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test file for mkdir test
</file>
</client>
diff --git a/tests/data/test61 b/tests/data/test61
index 6d98ba770..43a8598ba 100644
--- a/tests/data/test61
+++ b/tests/data/test61
@@ -17,8 +17,13 @@ Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Content-Type: text/html
Funny-head: yesyes
+%if large-time
+Set-Cookie: test=yes; httponly; domain=foo.com; expires=Fri Feb 13 11:56:27 GMT 2525
+SET-COOKIE: test2=yes; domain=host.foo.com; expires=Fri Feb 13 11:56:27 GMT 2525
+%else
Set-Cookie: test=yes; httponly; domain=foo.com; expires=Fri Feb 13 11:56:27 GMT 2037
SET-COOKIE: test2=yes; domain=host.foo.com; expires=Fri Feb 13 11:56:27 GMT 2037
+%endif
Set-Cookie: test3=maybe; domain=foo.com; path=/moo; secure
Set-Cookie: test4=no; domain=nope.foo.com; path=/moo; secure
Set-Cookie: test5=name; domain=anything.com; path=/ ; secure
@@ -35,18 +40,21 @@ boo
<server>
http
</server>
- <name>
+<name>
HTTP with various cookies and custom Host:
- </name>
+</name>
# Explicitly set the time zone to a known good one, in case the user is
# using one of the 'right' zones that take into account leap seconds
# which causes the cookie expiry times to be different.
<setenv>
TZ=GMT
</setenv>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -c log/jar%TESTNUMBER.txt -H "Host: www.host.foo.com"
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -c %LOGDIR/jar%TESTNUMBER.txt -H "Host: www.host.foo.com"
</command>
+<features>
+cookies
+</features>
</client>
# Verify data after the test has been "shot"
@@ -58,13 +66,18 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/jar%TESTNUMBER.txt" mode="text">
+<file name="%LOGDIR/jar%TESTNUMBER.txt" mode="text">
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
+%if large-time
+.host.foo.com TRUE /we/want/ FALSE 17517902187 test2 yes
+#HttpOnly_.foo.com TRUE /we/want/ FALSE 17517902187 test yes
+%else
.host.foo.com TRUE /we/want/ FALSE 2118138987 test2 yes
#HttpOnly_.foo.com TRUE /we/want/ FALSE 2118138987 test yes
+%endif
</file>
</verify>
</testcase>
diff --git a/tests/data/test610 b/tests/data/test610
index d9eb2e6be..0ca51f73c 100644
--- a/tests/data/test610
+++ b/tests/data/test610
@@ -21,18 +21,18 @@ Dummy test file for rmdir test
sftp
</server>
<precheck>
-perl %SRCDIR/libtest/test%TESTNUMBER.pl mkdir %PWD/log/test%TESTNUMBER.dir
+perl %SRCDIR/libtest/test%TESTNUMBER.pl mkdir %PWD/%LOGDIR/test%TESTNUMBER.dir
</precheck>
- <name>
+<name>
SFTP post-quote rmdir
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: -Q "-rmdir %PWD/log/test%TESTNUMBER.dir" sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: -Q "-rmdir %PWD/%LOGDIR/test%TESTNUMBER.dir" sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt --insecure
</command>
<postcheck>
-perl %SRCDIR/libtest/test%TESTNUMBER.pl gone %PWD/log/test%TESTNUMBER.dir
+perl %SRCDIR/libtest/test%TESTNUMBER.pl gone %PWD/%LOGDIR/test%TESTNUMBER.dir
</postcheck>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Dummy test file for rmdir test
</file>
</client>
diff --git a/tests/data/test611 b/tests/data/test611
index ee2a185b1..dc75e20d4 100644
--- a/tests/data/test611
+++ b/tests/data/test611
@@ -21,18 +21,18 @@ Dummy test file for rename test
sftp
</server>
<precheck>
-perl %SRCDIR/libtest/test610.pl mkdir %PWD/log/test%TESTNUMBER.dir
+perl %SRCDIR/libtest/test610.pl mkdir %PWD/%LOGDIR/test%TESTNUMBER.dir
</precheck>
- <name>
+<name>
SFTP post-quote rename
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: -Q "-rename %PWD/log/test%TESTNUMBER.dir %PWD/log/test%TESTNUMBER.new" sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: -Q "-rename %PWD/%LOGDIR/test%TESTNUMBER.dir %PWD/%LOGDIR/test%TESTNUMBER.new" sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt --insecure
</command>
<postcheck>
-perl %SRCDIR/libtest/test610.pl rmdir %PWD/log/test%TESTNUMBER.new
+perl %SRCDIR/libtest/test610.pl rmdir %PWD/%LOGDIR/test%TESTNUMBER.new
</postcheck>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Dummy test file for rename test
</file>
</client>
diff --git a/tests/data/test612 b/tests/data/test612
index 1d6fadec8..2c43f6a0d 100644
--- a/tests/data/test612
+++ b/tests/data/test612
@@ -20,16 +20,16 @@ Dummy test file for remove test
<server>
sftp
</server>
- <name>
+<name>
SFTP post-quote remove file
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: -T log/file%TESTNUMBER.txt -Q "-rm %PWD/log/file%TESTNUMBER.txt" sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/upload.%TESTNUMBER --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: -T %LOGDIR/file%TESTNUMBER.txt -Q "-rm %PWD/%LOGDIR/file%TESTNUMBER.txt" sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/upload.%TESTNUMBER --insecure
</command>
<postcheck>
-perl %SRCDIR/libtest/test610.pl gone %PWD/log/test%TESTNUMBER.txt
+perl %SRCDIR/libtest/test610.pl gone %PWD/%LOGDIR/test%TESTNUMBER.txt
</postcheck>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Dummy test file for remove test
</file>
</client>
diff --git a/tests/data/test613 b/tests/data/test613
index d02e3bbec..f8443efa3 100644
--- a/tests/data/test613
+++ b/tests/data/test613
@@ -23,16 +23,16 @@ d????????? N U U N ??? N NN:NN asubdir
sftp
</server>
<precheck>
-perl %SRCDIR/libtest/test%TESTNUMBER.pl prepare %PWD/log/test%TESTNUMBER.dir
+perl %SRCDIR/libtest/test%TESTNUMBER.pl prepare %PWD/%LOGDIR/test%TESTNUMBER.dir
</precheck>
- <name>
+<name>
SFTP directory retrieval
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/test%TESTNUMBER.dir/ --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/test%TESTNUMBER.dir/ --insecure
</command>
<postcheck>
-perl %SRCDIR/libtest/test%TESTNUMBER.pl postprocess %PWD/log/test%TESTNUMBER.dir %PWD/log/curl%TESTNUMBER.out
+perl %SRCDIR/libtest/test%TESTNUMBER.pl postprocess %PWD/%LOGDIR/test%TESTNUMBER.dir %PWD/%LOGDIR/curl%TESTNUMBER.out
</postcheck>
</client>
diff --git a/tests/data/test614 b/tests/data/test614
index c0af2630a..012d6ceec 100644
--- a/tests/data/test614
+++ b/tests/data/test614
@@ -24,16 +24,16 @@ d????????? N U U N ??? N NN:NN asubdir
sftp
</server>
<precheck>
-perl %SRCDIR/libtest/test613.pl prepare %PWD/log/test%TESTNUMBER.dir
+perl %SRCDIR/libtest/test613.pl prepare %PWD/%LOGDIR/test%TESTNUMBER.dir
</precheck>
- <name>
+<name>
SFTP pre-quote chmod
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: -Q "chmod 444 %PWD/log/test%TESTNUMBER.dir/plainfile.txt" sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/test%TESTNUMBER.dir/ --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: -Q "chmod 444 %PWD/%LOGDIR/test%TESTNUMBER.dir/plainfile.txt" sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/test%TESTNUMBER.dir/ --insecure
</command>
<postcheck>
-perl %SRCDIR/libtest/test613.pl postprocess %PWD/log/test%TESTNUMBER.dir %PWD/log/curl%TESTNUMBER.out
+perl %SRCDIR/libtest/test613.pl postprocess %PWD/%LOGDIR/test%TESTNUMBER.dir %PWD/%LOGDIR/curl%TESTNUMBER.out
</postcheck>
</client>
diff --git a/tests/data/test615 b/tests/data/test615
index 09a825b03..4626d3f1e 100644
--- a/tests/data/test615
+++ b/tests/data/test615
@@ -14,18 +14,18 @@ FAILURE
sftp
</server>
<precheck>
-perl %SRCDIR/libtest/test613.pl prepare %PWD/log/test%TESTNUMBER.dir
+perl %SRCDIR/libtest/test613.pl prepare %PWD/%LOGDIR/test%TESTNUMBER.dir
</precheck>
- <name>
+<name>
SFTP put remote failure
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: -T log/file%TESTNUMBER.txt sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/test%TESTNUMBER.dir/rofile.txt --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: -T %LOGDIR/file%TESTNUMBER.txt sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/test%TESTNUMBER.dir/rofile.txt --insecure
</command>
<postcheck>
-perl %SRCDIR/libtest/test613.pl postprocess %PWD/log/test%TESTNUMBER.dir
+perl %SRCDIR/libtest/test613.pl postprocess %PWD/%LOGDIR/test%TESTNUMBER.dir
</postcheck>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test data
for ssh upload test
</file>
diff --git a/tests/data/test616 b/tests/data/test616
index ec03c31ba..0ebc73434 100644
--- a/tests/data/test616
+++ b/tests/data/test616
@@ -19,13 +19,13 @@ zero-length
<server>
sftp
</server>
- <name>
+<name>
SFTP retrieval of empty file
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt --insecure
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
</file>
</client>
diff --git a/tests/data/test617 b/tests/data/test617
index 3c067e399..0ab6ced01 100644
--- a/tests/data/test617
+++ b/tests/data/test617
@@ -19,13 +19,13 @@ zero-length
<server>
scp
</server>
- <name>
+<name>
SCP retrieval of empty file
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt --insecure
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
</file>
</client>
diff --git a/tests/data/test618 b/tests/data/test618
index f5e2c7b33..2094768f3 100644
--- a/tests/data/test618
+++ b/tests/data/test618
@@ -11,13 +11,13 @@ SFTP
<server>
sftp
</server>
- <name>
+<name>
SFTP retrieval of two files
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt --insecure
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test data
for ssh test
</file>
diff --git a/tests/data/test619 b/tests/data/test619
index 0f86d8a54..6c3296c92 100644
--- a/tests/data/test619
+++ b/tests/data/test619
@@ -11,13 +11,13 @@ SCP
<server>
scp
</server>
- <name>
+<name>
SCP retrieval of two files
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt scp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt scp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt --insecure
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test data
for ssh test
</file>
diff --git a/tests/data/test62 b/tests/data/test62
index 92396d9f6..97cef4afa 100644
--- a/tests/data/test62
+++ b/tests/data/test62
@@ -25,23 +25,26 @@ boo
<server>
http
</server>
- <name>
+<name>
HTTP, send cookies when using custom Host:
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER?hoge=fuga -b log/jar%TESTNUMBER.txt -H "Host: www.host.foo.com"
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER?hoge=fuga -b %LOGDIR/jar%TESTNUMBER.txt -H "Host: www.host.foo.com"
</command>
-<file name="log/jar%TESTNUMBER.txt">
+<file name="%LOGDIR/jar%TESTNUMBER.txt">
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
-#HttpOnly_.foo.com TRUE /we/want/ FALSE 2147483647 test yes
-.host.foo.com TRUE /we/want/ FALSE 2147483647 test2 yes
-.fake.host.foo.com TRUE /we/want/ FALSE 2147483647 test4 yes
+#HttpOnly_.foo.com TRUE /we/want/ FALSE 22147483647 test yes
+.host.foo.com TRUE /we/want/ FALSE 22147483647 test2 yes
+.fake.host.foo.com TRUE /we/want/ FALSE 22147483647 test4 yes
.foo.com TRUE /moo TRUE 0 test3 maybe
</file>
+<features>
+cookies
+</features>
</client>
# Verify data after the test has been "shot"
diff --git a/tests/data/test620 b/tests/data/test620
index fea44acf3..0f32d6fdf 100644
--- a/tests/data/test620
+++ b/tests/data/test620
@@ -12,13 +12,13 @@ FAILURE
<server>
sftp
</server>
- <name>
+<name>
SFTP retrieval of missing file followed by good file
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/not-a-valid-file-moooo sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/not-a-valid-file-moooo sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt --insecure
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test data
for ssh test
</file>
diff --git a/tests/data/test621 b/tests/data/test621
index 368baf6a0..cafd80895 100644
--- a/tests/data/test621
+++ b/tests/data/test621
@@ -12,13 +12,13 @@ FAILURE
<server>
scp
</server>
- <name>
+<name>
SCP retrieval of missing file followed by good file
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%SSH_PWD/log/not-a-valid-file-moooo scp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/not-a-valid-file-moooo scp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt --insecure
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test data
for ssh test
</file>
diff --git a/tests/data/test622 b/tests/data/test622
index c4f8508d3..014ea96d9 100644
--- a/tests/data/test622
+++ b/tests/data/test622
@@ -18,13 +18,13 @@ FAILURE
<server>
sftp
</server>
- <name>
+<name>
SFTP put failure
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: -T log/file%TESTNUMBER.txt sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/nonexistent-directory/nonexistent-file --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: -T %LOGDIR/file%TESTNUMBER.txt sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/nonexistent-directory/nonexistent-file --insecure
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test data
for ssh upload test
</file>
diff --git a/tests/data/test623 b/tests/data/test623
index d1afb405f..945079b3f 100644
--- a/tests/data/test623
+++ b/tests/data/test623
@@ -18,13 +18,13 @@ FAILURE
<server>
scp
</server>
- <name>
+<name>
SCP upload failure
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: -T log/file%TESTNUMBER.txt scp://%HOSTIP:%SSHPORT%SSH_PWD/log/nonexistent-directory/nonexistent-file --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: -T %LOGDIR/file%TESTNUMBER.txt scp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/nonexistent-directory/nonexistent-file --insecure
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test data
for ssh upload test
</file>
diff --git a/tests/data/test624 b/tests/data/test624
index 8daa93530..3a4ca4b32 100644
--- a/tests/data/test624
+++ b/tests/data/test624
@@ -18,16 +18,16 @@ SFTP put
<server>
sftp
</server>
- <name>
+<name>
SFTP put with --ftp-create-dirs
- </name>
- <command>
---ftp-create-dirs --key curl_client_key --pubkey curl_client_key.pub -u %USER: -T log/file%TESTNUMBER.txt sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/test%TESTNUMBER.dir/upload.%TESTNUMBER --insecure
+</name>
+<command>
+--ftp-create-dirs --key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: -T %LOGDIR/file%TESTNUMBER.txt sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/test%TESTNUMBER.dir/upload.%TESTNUMBER --insecure
</command>
<postcheck>
-perl %SRCDIR/libtest/test610.pl move %PWD/log/test%TESTNUMBER.dir/upload.%TESTNUMBER %PWD/log/upload.%TESTNUMBER rmdir %PWD/log/test%TESTNUMBER.dir
+perl %SRCDIR/libtest/test610.pl move %PWD/%LOGDIR/test%TESTNUMBER.dir/upload.%TESTNUMBER %PWD/%LOGDIR/upload.%TESTNUMBER rmdir %PWD/%LOGDIR/test%TESTNUMBER.dir
</postcheck>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test data
for ssh upload test
</file>
diff --git a/tests/data/test625 b/tests/data/test625
index e6f0d77f0..ff7549477 100644
--- a/tests/data/test625
+++ b/tests/data/test625
@@ -18,16 +18,16 @@ SFTP put
<server>
sftp
</server>
- <name>
+<name>
SFTP put with --ftp-create-dirs twice
- </name>
- <command>
---ftp-create-dirs --key curl_client_key --pubkey curl_client_key.pub -u %USER: -T log/file%TESTNUMBER.txt sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/test%TESTNUMBER.a/upload.%TESTNUMBER -T log/file%TESTNUMBER.txt sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/test%TESTNUMBER.b/upload.%TESTNUMBER --insecure
+</name>
+<command>
+--ftp-create-dirs --key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: -T %LOGDIR/file%TESTNUMBER.txt sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/test%TESTNUMBER.a/upload.%TESTNUMBER -T %LOGDIR/file%TESTNUMBER.txt sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/test%TESTNUMBER.b/upload.%TESTNUMBER --insecure
</command>
<postcheck>
-perl %SRCDIR/libtest/test610.pl move %PWD/log/test%TESTNUMBER.a/upload.%TESTNUMBER %PWD/log/upload.%TESTNUMBER rmdir %PWD/log/test%TESTNUMBER.a rm %PWD/log/test%TESTNUMBER.b/upload.%TESTNUMBER rmdir %PWD/log/test%TESTNUMBER.b
+perl %SRCDIR/libtest/test610.pl move %PWD/%LOGDIR/test%TESTNUMBER.a/upload.%TESTNUMBER %PWD/%LOGDIR/upload.%TESTNUMBER rmdir %PWD/%LOGDIR/test%TESTNUMBER.a rm %PWD/%LOGDIR/test%TESTNUMBER.b/upload.%TESTNUMBER rmdir %PWD/%LOGDIR/test%TESTNUMBER.b
</postcheck>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test data
for ssh upload test
</file>
diff --git a/tests/data/test626 b/tests/data/test626
index 0580f535b..b963b6ded 100644
--- a/tests/data/test626
+++ b/tests/data/test626
@@ -18,13 +18,13 @@ FAILURE
<server>
sftp
</server>
- <name>
+<name>
SFTP invalid quote command
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: -Q "invalid-command foo bar" sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: -Q "invalid-command foo bar" sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt --insecure
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test file for rename test
</file>
</client>
diff --git a/tests/data/test627 b/tests/data/test627
index 60b830e92..8ebdc123c 100644
--- a/tests/data/test627
+++ b/tests/data/test627
@@ -20,16 +20,16 @@ NOBODY
<server>
sftp
</server>
- <name>
+<name>
SFTP quote remove file with NOBODY
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: -I -Q "rm %PWD/log/file%TESTNUMBER.txt" sftp://%HOSTIP:%SSHPORT --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: -I -Q "rm %PWD/%LOGDIR/file%TESTNUMBER.txt" sftp://%HOSTIP:%SSHPORT --insecure
</command>
<postcheck>
-perl %SRCDIR/libtest/test610.pl gone %PWD/log/test%TESTNUMBER.txt
+perl %SRCDIR/libtest/test610.pl gone %PWD/%LOGDIR/test%TESTNUMBER.txt
</postcheck>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Dummy test file for remove test
</file>
</client>
diff --git a/tests/data/test628 b/tests/data/test628
index 86c00f16d..755181e31 100644
--- a/tests/data/test628
+++ b/tests/data/test628
@@ -12,10 +12,10 @@ FAILURE
<server>
sftp
</server>
- <name>
+<name>
SFTP invalid user login (password authentication)
- </name>
- <command>
+</name>
+<command>
-u not-a-valid-user: sftp://%HOSTIP:%SSHPORT%SSH_PWD/irrelevant-file --insecure
</command>
</client>
diff --git a/tests/data/test629 b/tests/data/test629
index 07ac767ab..6bf42f4a6 100644
--- a/tests/data/test629
+++ b/tests/data/test629
@@ -12,10 +12,10 @@ FAILURE
<server>
scp
</server>
- <name>
+<name>
SCP invalid user login (password authentication)
- </name>
- <command>
+</name>
+<command>
-u not-a-valid-user: scp://%HOSTIP:%SSHPORT%SSH_PWD/irrelevant-file --insecure
</command>
</client>
diff --git a/tests/data/test63 b/tests/data/test63
index bf8ebfcf8..3a7e015fd 100644
--- a/tests/data/test63
+++ b/tests/data/test63
@@ -24,13 +24,13 @@ the content would go here
<server>
http
</server>
- <name>
+<name>
HTTP with proxy authorization set in environment
- </name>
+</name>
<setenv>
http_proxy=http://fake:user@%HOSTIP:%HTTPPORT/
</setenv>
- <command>
+<command>
http://we.want.that.site.com/%TESTNUMBER
</command>
<features>
diff --git a/tests/data/test630 b/tests/data/test630
index f678528b0..8a5c44388 100644
--- a/tests/data/test630
+++ b/tests/data/test630
@@ -13,11 +13,11 @@ server key check
<server>
sftp
</server>
- <name>
+<name>
SFTP incorrect host key
- </name>
- <command>
---hostpubmd5 00000000000000000000000000000000 --key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/irrelevant-file --insecure
+</name>
+<command>
+--hostpubmd5 00000000000000000000000000000000 --key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/irrelevant-file --insecure
</command>
</client>
diff --git a/tests/data/test631 b/tests/data/test631
index 720f3716f..ebf661440 100644
--- a/tests/data/test631
+++ b/tests/data/test631
@@ -13,11 +13,11 @@ server key check
<server>
scp
</server>
- <name>
+<name>
SCP incorrect host key
- </name>
- <command>
---hostpubmd5 00000000000000000000000000000000 --key curl_client_key --pubkey curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%SSH_PWD/log/irrelevant-file --insecure
+</name>
+<command>
+--hostpubmd5 00000000000000000000000000000000 --key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/irrelevant-file --insecure
</command>
</client>
diff --git a/tests/data/test632 b/tests/data/test632
index 70cfe515a..475ab2728 100644
--- a/tests/data/test632
+++ b/tests/data/test632
@@ -16,11 +16,11 @@ none
<features>
sftp
</features>
- <name>
+<name>
SFTP syntactically invalid host key
- </name>
- <command>
---hostpubmd5 00 --key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%NOLISTENPORT%SSH_PWD/log/irrelevant-file --insecure
+</name>
+<command>
+--hostpubmd5 00 --key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: sftp://%HOSTIP:%NOLISTENPORT%SSH_PWD/%LOGDIR/irrelevant-file --insecure
</command>
</client>
diff --git a/tests/data/test633 b/tests/data/test633
index f9ad869f1..8f8c4352d 100644
--- a/tests/data/test633
+++ b/tests/data/test633
@@ -20,13 +20,13 @@ data
<server>
sftp
</server>
- <name>
+<name>
SFTP retrieval with byte range
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt -r 5-9 --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt -r 5-9 --insecure
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test data
for ssh test
</file>
diff --git a/tests/data/test634 b/tests/data/test634
index 9cf9320fe..3669a8bf9 100644
--- a/tests/data/test634
+++ b/tests/data/test634
@@ -21,13 +21,13 @@ for ssh test
<server>
sftp
</server>
- <name>
+<name>
SFTP retrieval with byte range past end of file
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt -r 5-99 --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt -r 5-99 --insecure
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test data
for ssh test
</file>
diff --git a/tests/data/test635 b/tests/data/test635
index 5974ee8d3..b07b5c823 100644
--- a/tests/data/test635
+++ b/tests/data/test635
@@ -20,13 +20,13 @@ ssh test
<server>
sftp
</server>
- <name>
+<name>
SFTP retrieval with byte range relative to end of file
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt -r -9 --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt -r -9 --insecure
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test data
for ssh test
</file>
diff --git a/tests/data/test636 b/tests/data/test636
index 6bce35b90..96ffc0c13 100644
--- a/tests/data/test636
+++ b/tests/data/test636
@@ -21,13 +21,13 @@ for ssh test
<server>
sftp
</server>
- <name>
+<name>
SFTP retrieval with X- byte range
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt -r 5- --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt -r 5- --insecure
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test data
for ssh test
</file>
diff --git a/tests/data/test637 b/tests/data/test637
index 542506749..df80c483a 100644
--- a/tests/data/test637
+++ b/tests/data/test637
@@ -19,13 +19,13 @@ Range
<server>
sftp
</server>
- <name>
+<name>
SFTP retrieval with invalid X- range
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt -r 99- --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt -r 99- --insecure
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test data
for ssh test
</file>
diff --git a/tests/data/test638 b/tests/data/test638
index 85d59096f..b41a3aecf 100644
--- a/tests/data/test638
+++ b/tests/data/test638
@@ -23,18 +23,18 @@ Dummy test file for rename test
sftp
</server>
<precheck>
-perl %SRCDIR/libtest/test610.pl mkdir %PWD/log/test%TESTNUMBER.dir
+perl %SRCDIR/libtest/test610.pl mkdir %PWD/%LOGDIR/test%TESTNUMBER.dir
</precheck>
- <name>
+<name>
SFTP post-quote rename * asterisk accept-fail
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: -Q "-*rename %PWD/log/test%TESTNUMBER.dir %PWD/log/test%TESTNUMBER.new" sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: -Q "-*rename %PWD/%LOGDIR/test%TESTNUMBER.dir %PWD/%LOGDIR/test%TESTNUMBER.new" sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt --insecure
</command>
<postcheck>
-perl %SRCDIR/libtest/test610.pl rmdir %PWD/log/test%TESTNUMBER.new
+perl %SRCDIR/libtest/test610.pl rmdir %PWD/%LOGDIR/test%TESTNUMBER.new
</postcheck>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Dummy test file for rename test
</file>
</client>
diff --git a/tests/data/test639 b/tests/data/test639
index e63cdf61f..8105798fd 100644
--- a/tests/data/test639
+++ b/tests/data/test639
@@ -23,18 +23,18 @@ Dummy test file for rename test
sftp
</server>
<precheck>
-perl %SRCDIR/libtest/test610.pl mkdir %PWD/log/test%TESTNUMBER.dir
+perl %SRCDIR/libtest/test610.pl mkdir %PWD/%LOGDIR/test%TESTNUMBER.dir
</precheck>
- <name>
+<name>
SFTP post-quote rename * asterisk accept-fail
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: -Q "-*rename %PWD/log/test%TESTNUMBER-not-exists-dir %PWD/log/test%TESTNUMBER.new" sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: -Q "-*rename %PWD/%LOGDIR/test%TESTNUMBER-not-exists-dir %PWD/%LOGDIR/test%TESTNUMBER.new" sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt --insecure
</command>
<postcheck>
-perl %SRCDIR/libtest/test610.pl rmdir %PWD/log/test%TESTNUMBER.dir
+perl %SRCDIR/libtest/test610.pl rmdir %PWD/%LOGDIR/test%TESTNUMBER.dir
</postcheck>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Dummy test file for rename test
</file>
</client>
diff --git a/tests/data/test64 b/tests/data/test64
index 8067f1a85..0f0516ea4 100644
--- a/tests/data/test64
+++ b/tests/data/test64
@@ -55,10 +55,10 @@ http
!SSPI
crypto
</features>
- <name>
+<name>
HTTP with Digest authorization
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u testuser:testpass --digest
</command>
</client>
diff --git a/tests/data/test640 b/tests/data/test640
index 2046dabd8..ecfc0934f 100644
--- a/tests/data/test640
+++ b/tests/data/test640
@@ -19,13 +19,13 @@ NOBODY
<server>
sftp
</server>
- <name>
+<name>
SFTP --head retrieval
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt --insecure --head
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt --insecure --head
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test data
for ssh test
</file>
diff --git a/tests/data/test641 b/tests/data/test641
index df1788a0b..828198b44 100644
--- a/tests/data/test641
+++ b/tests/data/test641
@@ -19,13 +19,13 @@ NOBODY
<server>
scp
</server>
- <name>
+<name>
SCP --head retrieval
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt --insecure --head
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt --insecure --head
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test data
for ssh test
</file>
diff --git a/tests/data/test642 b/tests/data/test642
index 4fa5282c9..ccb0c605d 100644
--- a/tests/data/test642
+++ b/tests/data/test642
@@ -20,13 +20,13 @@ for ssh test
<server>
sftp
</server>
- <name>
+<name>
SFTP retrieval
- </name>
- <command>
---key curl_client_key --pubkey curl_client_key.pub -u %USER: --compressed-ssh sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt --insecure
+</name>
+<command>
+--key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: --compressed-ssh sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt --insecure
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
Test data
for ssh test
</file>
diff --git a/tests/data/test643 b/tests/data/test643
index ca6c5416a..400d1b9ca 100644
--- a/tests/data/test643
+++ b/tests/data/test643
@@ -50,10 +50,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
HTTP multi-part mimepost using read callback for the file part
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
@@ -62,8 +62,8 @@ http://%HOSTIP:%HTTPPORT/%TESTNUMBER
# Verify data after the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/------------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/
+s/^--------------------------[A-Za-z0-9]*/------------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=----------------------------/
</strippart>
# Note that the stripping above removes 12 bytes from every occurrence of the
# boundary string and since 5 of them are in the body contents, we see
@@ -72,7 +72,7 @@ s/boundary=------------------------[a-z0-9]*/boundary=--------------------------
POST /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
-Content-Length: 640
+Content-Length: 676
Content-Type: multipart/form-data; boundary=----------------------------
------------------------------
@@ -102,7 +102,7 @@ blah blah
POST /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
-Content-Length: 654
+Content-Length: 690
Content-Type: multipart/form-data; boundary=----------------------------
------------------------------
diff --git a/tests/data/test644 b/tests/data/test644
index c067d034c..fc670756c 100644
--- a/tests/data/test644
+++ b/tests/data/test644
@@ -58,7 +58,7 @@ CURL_FAKE_XATTR=1
--xattr with redirect
</name>
<command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER --xattr -L -o log/out%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --xattr -L -o %LOGDIR/out%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test645 b/tests/data/test645
index 523097222..82ee1d0a2 100644
--- a/tests/data/test645
+++ b/tests/data/test645
@@ -50,10 +50,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
HTTP multi-part chunked mimepost using read callback for the file part
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
@@ -62,8 +62,8 @@ http://%HOSTIP:%HTTPPORT/%TESTNUMBER
# Verify data after the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/------------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/
+s/^--------------------------[A-Za-z0-9]*/------------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=----------------------------/
</strippart>
# Note that the stripping above removes 12 bytes from every occurrence of the
# boundary string and since 5 of them are in the body contents, we see
@@ -76,7 +76,11 @@ Transfer-Encoding: chunked
Content-Type: multipart/form-data; boundary=----------------------------
Expect: 100-continue
-76
+%if hyper
+7C
+%else
+7c
+%endif
------------------------------
Content-Disposition: form-data; name="sendfile"; filename="postit2.c"
@@ -92,7 +96,11 @@ y
1
-65
+%if hyper
+6B
+%else
+6b
+%endif
------------------------------
Content-Disposition: form-data; name="callbackdata"
@@ -112,9 +120,9 @@ y
%if hyper
-19A
+1B2
%else
-19a
+1b2
%endif
------------------------------
@@ -141,7 +149,11 @@ Transfer-Encoding: chunked
Content-Type: multipart/form-data; boundary=----------------------------
Expect: 100-continue
-84
+%if hyper
+8A
+%else
+8a
+%endif
------------------------------
Content-Disposition: form-data; name="sendfile alternative"; filename="file name 2"
@@ -157,7 +169,11 @@ y
1
-65
+%if hyper
+6B
+%else
+6b
+%endif
------------------------------
Content-Disposition: form-data; name="callbackdata"
@@ -177,9 +193,9 @@ y
%if hyper
-19A
+1B2
%else
-19a
+1b2
%endif
------------------------------
diff --git a/tests/data/test646 b/tests/data/test646
index 3418fa24c..4f26dbdf9 100644
--- a/tests/data/test646
+++ b/tests/data/test646
@@ -20,24 +20,24 @@ Mime
<server>
smtp
</server>
- <name>
+<name>
SMTP multipart using mime API
- </name>
+</name>
<stdin>
From: different
To: another
body
</stdin>
- <command>
-smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -F "=(;type=multipart/alternative" -F "= <body>This is the html version</body>;headers=X-test1: this is a header;type=text/html;headers=X-test2: this is another header " -F "=This is the plain text version;headers=@log/headers%TESTNUMBER" -F "=)" -F "=@log/test%TESTNUMBER.txt;headers=<log/headers%TESTNUMBER" -H "From: different" -H "To: another" -H "Reply-To: <followup@example.com>"
+<command>
+smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -F "=(;type=multipart/alternative" -F "= <body>This is the html version</body>;headers=X-test1: this is a header;type=text/html;headers=X-test2: this is another header " -F "=This is the plain text version;headers=@%LOGDIR/headers%TESTNUMBER" -F "=)" -F "=@%LOGDIR/test%TESTNUMBER.txt;headers=<%LOGDIR/headers%TESTNUMBER" -H "From: different" -H "To: another" -H "Reply-To: <followup@example.com>"
</command>
-<file1 name="log/test%TESTNUMBER.txt">
+<file1 name="%LOGDIR/test%TESTNUMBER.txt">
This is an attached file.
It may contain any type of data.
</file1>
-<file2 name="log/headers%TESTNUMBER">
+<file2 name="%LOGDIR/headers%TESTNUMBER">
# This line is a comment
X-fileheader1: This is a header from a file
@@ -51,8 +51,8 @@ X-fileheader2: This is #a
# Verify data after the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/------------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/
+s/^--------------------------[A-Za-z0-9]*/------------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=----------------------------/
</strippart>
<protocol>
EHLO %TESTNUMBER
diff --git a/tests/data/test647 b/tests/data/test647
index 90d44c2c4..d34fe21f7 100644
--- a/tests/data/test647
+++ b/tests/data/test647
@@ -21,13 +21,13 @@ Mime
<server>
imap
</server>
- <name>
+<name>
IMAP APPEND multipart using mime API
- </name>
- <command>
-imap://%HOSTIP:%IMAPPORT/%TESTNUMBER -F "=(;type=multipart/alternative" -F "= <body>This is the html version</body>;type=text/html" -F "=This is the plain text version" -F "=)" -F "=@log/test%TESTNUMBER.txt" -H "Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)" -H "From: Fred Foobar <foobar@example.com>" -H "To: joe@example.com" -H "Message-Id: <B27397-0100000@example.com>" -H "Subject: afternoon meeting" -u user:secret
+</name>
+<command>
+imap://%HOSTIP:%IMAPPORT/%TESTNUMBER -F "=(;type=multipart/alternative" -F "= <body>This is the html version</body>;type=text/html" -F "=This is the plain text version" -F "=)" -F "=@%LOGDIR/test%TESTNUMBER.txt" -H "Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)" -H "From: Fred Foobar <foobar@example.com>" -H "To: joe@example.com" -H "Message-Id: <B27397-0100000@example.com>" -H "Subject: afternoon meeting" -u user:secret
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
This is an attached file.
It may contain any type of data.
@@ -38,13 +38,13 @@ It may contain any type of data.
# Verify data after the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/------------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/
+s/^--------------------------[A-Za-z0-9]*/------------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=----------------------------/
</strippart>
<protocol>
A001 CAPABILITY
A002 LOGIN user secret
-A003 APPEND %TESTNUMBER (\Seen) {892}
+A003 APPEND %TESTNUMBER (\Seen) {940}
A004 LOGOUT
</protocol>
<upload>
diff --git a/tests/data/test648 b/tests/data/test648
index fe32cd5ee..992a3dbc5 100644
--- a/tests/data/test648
+++ b/tests/data/test648
@@ -20,19 +20,19 @@ Mime
<server>
smtp
</server>
- <name>
+<name>
SMTP multipart with transfer content encoders
- </name>
+</name>
<stdin>
From: different
To: another
body
</stdin>
- <command>
-smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -F '=This is the email inline text with a very long line containing the special character = and that should be split by encoder.;headers=Content-disposition: "inline";encoder=quoted-printable' -F "=@log/test%TESTNUMBER.txt;encoder=base64" -H "From: different" -H "To: another"
+<command>
+smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -F '=This is the email inline text with a very long line containing the special character = and that should be split by encoder.;headers=Content-disposition: "inline";encoder=quoted-printable' -F "=@%LOGDIR/test%TESTNUMBER.txt;encoder=base64" -H "From: different" -H "To: another"
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
This is an attached file.
It may contain any type of data and will be encoded in base64 for transfer.
@@ -43,8 +43,8 @@ It may contain any type of data and will be encoded in base64 for transfer.
# Verify data after the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/------------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/
+s/^--------------------------[A-Za-z0-9]*/------------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=----------------------------/
</strippart>
<protocol>
EHLO %TESTNUMBER
diff --git a/tests/data/test649 b/tests/data/test649
index 668cdc75a..7751e38f1 100644
--- a/tests/data/test649
+++ b/tests/data/test649
@@ -20,19 +20,19 @@ Mime
<server>
smtp
</server>
- <name>
+<name>
SMTP multipart with 7bit encoder error
- </name>
+</name>
<stdin>
From: different
To: another
body
</stdin>
- <command>
-smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -F '=This is valid;encoder=7bit' -F "=@log/test%TESTNUMBER.txt;encoder=7bit" -H "From: different" -H "To: another"
+<command>
+smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -F '=This is valid;encoder=7bit' -F "=@%LOGDIR/test%TESTNUMBER.txt;encoder=7bit" -H "From: different" -H "To: another"
</command>
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
This is an attached file (in french: pièce jointe).
It contains at least an 8-bit byte value.
@@ -43,8 +43,8 @@ It contains at least an 8-bit byte value.
# Verify data after the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/------------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/
+s/^--------------------------[A-Za-z0-9]*/------------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=----------------------------/
</strippart>
<protocol>
EHLO %TESTNUMBER
diff --git a/tests/data/test65 b/tests/data/test65
index f1ce72bb2..fcf43563f 100644
--- a/tests/data/test65
+++ b/tests/data/test65
@@ -55,10 +55,10 @@ http
!SSPI
crypto
</features>
- <name>
+<name>
HTTP with Digest authorization with bad password
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u testuser:test2pass --digest
</command>
</client>
diff --git a/tests/data/test650 b/tests/data/test650
index e2626b752..02876fbca 100644
--- a/tests/data/test650
+++ b/tests/data/test650
@@ -10,21 +10,32 @@ FORM
#
# Server-side
<reply>
-<data>
-HTTP/1.1 200 OK
+<data nocheck="yes">
+HTTP/1.1 301 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake swsclose
Connection: close
Content-Type: text/html
+Location: /%TESTNUMBER0002
hello
</data>
+<data2 crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+
+-foo-
+</data2>
</reply>
# Client-side
<client>
<features>
-Mime
+form-api
</features>
<server>
http
@@ -34,26 +45,26 @@ http
lib%TESTNUMBER
</tool>
- <name>
-HTTP formpost using form API
- </name>
+<name>
+HTTP formpost using form API - with redirect and re-POST
+</name>
<stdin>
Some data from stdin
</stdin>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER log/test%TESTNUMBER.filedata
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER %LOGDIR/test%TESTNUMBER.filedata
</command>
-<file name="log/test%TESTNUMBER.filedata">
+<file name="%LOGDIR/test%TESTNUMBER.filedata">
This is data from a file.
</file>
</client>
#
-# Verify data after the test has been "shot"
+# Verify data bbter the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/------------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/
+s/^--------------------------[A-Za-z0-9]*/------------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=----------------------------/
</strippart>
# Note that the stripping above removes 12 bytes from every occurrence of the
# boundary string and since 5 of them are in the body contents, we see
@@ -66,7 +77,91 @@ Transfer-Encoding: chunked
Content-Type: multipart/form-data; boundary=----------------------------
Expect: 100-continue
-361
+385
+------------------------------
+Content-Disposition: form-data; name="fieldname"
+Content-Type: text/plain
+X-customheader-1: Header 1 data
+X-customheader-2: Header 2 data
+
+this is what we post to the silly web server
+------------------------------
+Content-Disposition: form-data; name="fieldnam"
+
+uhis is what we post to the silly web serve
+------------------------------
+Content-Disposition: form-data; name="multifile"
+Content-Type: multipart/mixed; boundary=----------------------------
+
+------------------------------
+Content-Disposition: attachment; filename="test%TESTNUMBER.filedata"
+Content-Type: application/octet-stream
+
+This is data from a file.
+
+------------------------------
+Content-Disposition: attachment; filename="test%TESTNUMBER.filedata"
+Content-Type: text/whatever
+
+
+%if hyper
+AB
+%else
+ab
+%endif
+This is data from a file.
+
+------------------------------
+Content-Disposition: attachment; filename="test%TESTNUMBER.filedata"
+Content-Type: text/whatever
+
+
+%if hyper
+BB
+%else
+bb
+%endif
+This is data from a file.
+
+--------------------------------
+
+------------------------------
+Content-Disposition: form-data; name="filecontents"
+
+
+%if hyper
+11B
+%else
+11b
+%endif
+This is data from a file.
+
+------------------------------
+Content-Disposition: form-data; name="formlength"
+
+1433
+------------------------------
+Content-Disposition: form-data; name="standardinput"
+Content-Type: application/octet-stream
+
+
+16
+ Some data from stdin
+
+36
+
+--------------------------------
+
+0
+
+POST /%TESTNUMBER0002 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Accept: */*
+Transfer-Encoding: chunked
+Content-Type: multipart/form-data; boundary=----------------------------
+Expect: 100-continue
+
+385
------------------------------
Content-Disposition: form-data; name="fieldname"
Content-Type: text/plain
@@ -94,9 +189,9 @@ Content-Type: text/whatever
%if hyper
-A5
+AB
%else
-a5
+ab
%endif
This is data from a file.
@@ -106,9 +201,9 @@ Content-Type: text/whatever
%if hyper
-AF
+BB
%else
-af
+bb
%endif
This is data from a file.
@@ -119,16 +214,16 @@ Content-Disposition: form-data; name="filecontents"
%if hyper
-10F
+11B
%else
-10f
+11b
%endif
This is data from a file.
------------------------------
Content-Disposition: form-data; name="formlength"
-1367
+1433
------------------------------
Content-Disposition: form-data; name="standardinput"
Content-Type: application/octet-stream
@@ -137,7 +232,7 @@ Content-Type: application/octet-stream
16
Some data from stdin
-30
+36
--------------------------------
diff --git a/tests/data/test651 b/tests/data/test651
index 38f21c3ad..48e42df61 100644
--- a/tests/data/test651
+++ b/tests/data/test651
@@ -24,7 +24,7 @@ hello
# Client-side
<client>
<features>
-Mime
+form-api
</features>
<server>
http
@@ -34,16 +34,16 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
curl_formadd with huge COPYCONTENTS
- </name>
+</name>
<stdin>
Some data from stdin
</stdin>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER log/test%TESTNUMBER.filedata
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER %LOGDIR/test%TESTNUMBER.filedata
</command>
-<file name="log/test%TESTNUMBER.filedata">
+<file name="%LOGDIR/test%TESTNUMBER.filedata">
This is data from a file.
</file>
</client>
@@ -52,8 +52,8 @@ This is data from a file.
# Verify data after the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/------------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/
+s/^--------------------------[A-Za-z0-9]*/------------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=----------------------------/
</strippart>
# Note that the stripping above removes 12 bytes from every occurrence of the
# boundary string and since 5 of them are in the body contents, we see
@@ -62,7 +62,7 @@ s/boundary=------------------------[a-z0-9]*/boundary=--------------------------
POST /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
-Content-Length: 17139
+Content-Length: 17151
Content-Type: multipart/form-data; boundary=----------------------------
------------------------------
diff --git a/tests/data/test652 b/tests/data/test652
index d3ff7a0f7..31ec7b821 100644
--- a/tests/data/test652
+++ b/tests/data/test652
@@ -24,10 +24,10 @@ smtp
lib%TESTNUMBER
</tool>
- <name>
+<name>
SMTP with encoded huge mime data contents
- </name>
- <command>
+</name>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER
</command>
</client>
@@ -36,8 +36,8 @@ smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER
# Verify data after the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/------------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/
+s/^--------------------------[A-Za-z0-9]*/------------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=----------------------------/
</strippart>
<protocol>
EHLO %TESTNUMBER
diff --git a/tests/data/test653 b/tests/data/test653
index fa018be25..33885f17f 100644
--- a/tests/data/test653
+++ b/tests/data/test653
@@ -50,10 +50,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
Reuse of handle after altering mime data
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
@@ -62,8 +62,8 @@ http://%HOSTIP:%HTTPPORT/%TESTNUMBER
# Verify data after the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/------------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/
+s/^--------------------------[A-Za-z0-9]*/------------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=----------------------------/
</strippart>
# Note that the stripping above removes 12 bytes from every occurrence of the
# boundary string and since 5 of them are in the body contents, we see
@@ -72,7 +72,7 @@ s/boundary=------------------------[a-z0-9]*/boundary=--------------------------
POST /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
-Content-Length: 150
+Content-Length: 162
Content-Type: multipart/form-data; boundary=----------------------------
------------------------------
@@ -83,7 +83,7 @@ short value
POST /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
-Content-Length: 167
+Content-Length: 179
Content-Type: multipart/form-data; boundary=----------------------------
------------------------------
diff --git a/tests/data/test654 b/tests/data/test654
index 5716a0ba6..47415e209 100644
--- a/tests/data/test654
+++ b/tests/data/test654
@@ -50,13 +50,13 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
HTTP duplicate easy handle with mime data
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER %LOGDIR/file%TESTNUMBER.txt
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
This is data from a file
</file>
</client>
@@ -65,8 +65,8 @@ This is data from a file
# Verify data after the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/------------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/
+s/^--------------------------[A-Za-z0-9]*/------------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=----------------------------/
</strippart>
# Note that the stripping above removes 12 bytes from every occurrence of the
# boundary string and since 5 of them are in the body contents, we see
@@ -85,9 +85,9 @@ Content-Type: multipart/form-data; boundary=----------------------------
Expect: 100-continue
%if hyper
-1AF
+1C1
%else
-1af
+1c1
%endif
------------------------------
Content-Disposition: form-data; name="greeting"
@@ -119,7 +119,7 @@ y
1
-30
+36
--------------------------------
diff --git a/tests/data/test655 b/tests/data/test655
index 3f9bc785f..583e7c0a0 100644
--- a/tests/data/test655
+++ b/tests/data/test655
@@ -32,10 +32,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
resolver start callback
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test656 b/tests/data/test656
index fb0f27fb9..9478757d5 100644
--- a/tests/data/test656
+++ b/tests/data/test656
@@ -12,11 +12,11 @@ FAILURE
<server>
sftp
</server>
- <name>
+<name>
SFTP retrieval with nonexistent private key file
- </name>
- <command>
---key DOES_NOT_EXIST --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/not-a-valid-file-moooo --insecure --connect-timeout 8
+</name>
+<command>
+--key DOES_NOT_EXIST --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/not-a-valid-file-moooo --insecure --connect-timeout 8
</command>
</client>
diff --git a/tests/data/test658 b/tests/data/test658
index df5be763f..32ca29db4 100644
--- a/tests/data/test658
+++ b/tests/data/test658
@@ -31,8 +31,8 @@ lib%TESTNUMBER
</tool>
<name>
Pass URL to libcurl with CURLOPT_CURLU
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test659 b/tests/data/test659
index ef7cf12ef..5cad5eadc 100644
--- a/tests/data/test659
+++ b/tests/data/test659
@@ -32,8 +32,8 @@ lib%TESTNUMBER
</tool>
<name>
CURLOPT_CURLU without the path set - over proxy
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT
</command>
<features>
diff --git a/tests/data/test66 b/tests/data/test66
index 0e66289bb..13aa08384 100644
--- a/tests/data/test66
+++ b/tests/data/test66
@@ -21,10 +21,10 @@ no headers swsclose
<server>
http
</server>
- <name>
+<name>
HTTP GET without headers in the response
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --http0.9
</command>
</client>
diff --git a/tests/data/test660 b/tests/data/test660
index b53d47bce..8fdf879d9 100644
--- a/tests/data/test660
+++ b/tests/data/test660
@@ -14,9 +14,9 @@ imap
<tool>
lib597
</tool>
- <name>
+<name>
IMAP CONNECT_ONLY option
- </name>
+</name>
<command>
imap://%HOSTIP:%IMAPPORT/%TESTNUMBER
diff --git a/tests/data/test661 b/tests/data/test661
index ccfdf41ff..5965bd8ae 100644
--- a/tests/data/test661
+++ b/tests/data/test661
@@ -22,10 +22,10 @@ ftp
lib%TESTNUMBER
</tool>
- <name>
+<name>
Avoid redundant CWDs
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/
</command>
</client>
diff --git a/tests/data/test662 b/tests/data/test662
index 5edaf05e7..a1d501fd2 100644
--- a/tests/data/test662
+++ b/tests/data/test662
@@ -46,10 +46,10 @@ body
<server>
http
</server>
- <name>
+<name>
HTTP redirect with whitespace in absolute Location: URL
- </name>
- <command>
+</name>
+<command>
http://example.com/please/gimme/%TESTNUMBER -L -x http://%HOSTIP:%HTTPPORT
</command>
<features>
diff --git a/tests/data/test663 b/tests/data/test663
index 72692585f..313910aa6 100644
--- a/tests/data/test663
+++ b/tests/data/test663
@@ -50,10 +50,10 @@ body
<server>
http
</server>
- <name>
+<name>
HTTP redirect with dotdots and whitespaces in absolute Location: URL
- </name>
- <command>
+</name>
+<command>
http://example.com/please/../gimme/%TESTNUMBER?foobar#hello -L -x http://%HOSTIP:%HTTPPORT
</command>
<features>
diff --git a/tests/data/test664 b/tests/data/test664
index 69a75df3f..6ef1d90cb 100644
--- a/tests/data/test664
+++ b/tests/data/test664
@@ -20,13 +20,13 @@ test
<server>
sftp
</server>
- <name>
+<name>
SFTP correct host key
- </name>
- <command>
---hostpubmd5 %SSHSRVMD5 --key curl_client_key --pubkey curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt
+</name>
+<command>
+--hostpubmd5 %SSHSRVMD5 --key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: sftp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
test
</file>
</client>
diff --git a/tests/data/test665 b/tests/data/test665
index aa20bbfe1..bdab82945 100644
--- a/tests/data/test665
+++ b/tests/data/test665
@@ -20,13 +20,13 @@ test
<server>
scp
</server>
- <name>
+<name>
SCP correct host key
- </name>
- <command>
---hostpubmd5 %SSHSRVMD5 --key curl_client_key --pubkey curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%SSH_PWD/log/file%TESTNUMBER.txt
+</name>
+<command>
+--hostpubmd5 %SSHSRVMD5 --key %LOGDIR/server/curl_client_key --pubkey %LOGDIR/server/curl_client_key.pub -u %USER: scp://%HOSTIP:%SSHPORT%SSH_PWD/%LOGDIR/file%TESTNUMBER.txt
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
test
</file>
</client>
diff --git a/tests/data/test666 b/tests/data/test666
index 14fbe4933..ecb35ec37 100644
--- a/tests/data/test666
+++ b/tests/data/test666
@@ -42,10 +42,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
HTTP mime post with binary-encoded huge data contents
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
@@ -54,14 +54,14 @@ http://%HOSTIP:%HTTPPORT/%TESTNUMBER
# Verify data after the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/------------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/
+s/^--------------------------[A-Za-z0-9]*/------------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=----------------------------/
</strippart>
<protocol>
POST /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
-Content-Length: 17225
+Content-Length: 17237
Content-Type: multipart/form-data; boundary=----------------------------
------------------------------
diff --git a/tests/data/test667 b/tests/data/test667
index 754645394..d62a81d0f 100644
--- a/tests/data/test667
+++ b/tests/data/test667
@@ -43,10 +43,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
HTTP chunked mimepost using single-byte read callback with encoder
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
@@ -55,8 +55,8 @@ http://%HOSTIP:%HTTPPORT/%TESTNUMBER
# Verify data after the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/------------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/
+s/^--------------------------[A-Za-z0-9]*/------------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=----------------------------/
</strippart>
# Note that the stripping above removes 12 bytes from every occurrence of the
# boundary string and since 5 of them are in the body contents, we see
@@ -69,11 +69,7 @@ Transfer-Encoding: chunked
Content-Type: multipart/form-data; boundary=----------------------------
Expect: 100-continue
-%if hyper
-7F
-%else
-7f
-%endif
+85
------------------------------
Content-Disposition: form-data; name="field"
Content-Transfer-Encoding: base64
@@ -81,7 +77,11 @@ Content-Transfer-Encoding: base64
4
ZHVt
-34
+%if hyper
+3A
+%else
+3a
+%endif
bXk=
--------------------------------
diff --git a/tests/data/test668 b/tests/data/test668
index c1a0f8f19..14905ddc6 100644
--- a/tests/data/test668
+++ b/tests/data/test668
@@ -12,7 +12,7 @@ HTTP MIME POST
<reply>
<data>
HTTP/1.1 200 OK
-Date: Tue, 09 Nov 2010 14:49:00 GMT
+Date: Tue, 09 Nov 2010 14:4f:00 GMT
Server: test-server/fake swsclose
Connection: close
Content-Type: text/html
@@ -21,7 +21,7 @@ hello
</data>
<datacheck>
HTTP/1.1 200 OK
-Date: Tue, 09 Nov 2010 14:49:00 GMT
+Date: Tue, 09 Nov 2010 14:4f:00 GMT
Server: test-server/fake swsclose
Connection: close
Content-Type: text/html
@@ -43,13 +43,13 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
HTTP mimepost early end of data detection
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER %LOGDIR/file%TESTNUMBER.txt
</command>
-<file name="log/file%TESTNUMBER.txt">
+<file name="%LOGDIR/file%TESTNUMBER.txt">
This is data from a file
</file>
</client>
@@ -58,8 +58,8 @@ This is data from a file
# Verify data after the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/------------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/
+s/^--------------------------[A-Za-z0-9]*/------------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=----------------------------/
</strippart>
# Note that the stripping above removes 12 bytes from every occurrence of the
# boundary string and since 5 of them are in the body contents, we see
@@ -73,9 +73,9 @@ Content-Type: multipart/form-data; boundary=----------------------------
Expect: 100-continue
%if hyper
-C1
+CD
%else
-c1
+cd
%endif
------------------------------
Content-Disposition: form-data; name="field1"
@@ -87,14 +87,18 @@ Content-Disposition: form-data; name="field2"
5
dummy
-91
+97
------------------------------
Content-Disposition: form-data; name="field3"; filename="file%TESTNUMBER.txt"
Content-Type: text/plain
-49
+%if hyper
+4F
+%else
+4f
+%endif
This is data from a file
--------------------------------
diff --git a/tests/data/test669 b/tests/data/test669
index 7f1be86b3..620aa3393 100644
--- a/tests/data/test669
+++ b/tests/data/test669
@@ -27,10 +27,10 @@ Mime
<server>
http
</server>
- <name>
+<name>
HTTP custom Content-Type with parameter
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -H 'Content-type: multipart/form-data; charset=utf-8' -F name=daniel -F tool=curl
</command>
</client>
@@ -38,15 +38,15 @@ http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -H 'Content-type: multipart/form-da
# Verify data after the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/------------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/
+s/^--------------------------[A-Za-z0-9]*/------------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=----------------------------/
</strippart>
<protocol>
POST /we/want/%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 242
+Content-Length: 260
Content-Type: multipart/form-data; charset=utf-8; boundary=----------------------------
------------------------------
diff --git a/tests/data/test670 b/tests/data/test670
index b7b5a90cb..94910b536 100644
--- a/tests/data/test670
+++ b/tests/data/test670
@@ -43,10 +43,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
Request pause from mime read callback: multi
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
@@ -55,14 +55,14 @@ http://%HOSTIP:%HTTPPORT/%TESTNUMBER
# Verify data after the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/------------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/
+s/^--------------------------[A-Za-z0-9]*/------------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=----------------------------/
</strippart>
<protocol>
POST /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
-Content-Length: 142
+Content-Length: 154
Content-Type: multipart/form-data; boundary=----------------------------
------------------------------
diff --git a/tests/data/test671 b/tests/data/test671
index 110038298..e49aacd51 100644
--- a/tests/data/test671
+++ b/tests/data/test671
@@ -43,10 +43,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
Request pause from mime read callback: easy
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
@@ -55,14 +55,14 @@ http://%HOSTIP:%HTTPPORT/%TESTNUMBER
# Verify data after the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/------------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/
+s/^--------------------------[A-Za-z0-9]*/------------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=----------------------------/
</strippart>
<protocol>
POST /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
-Content-Length: 142
+Content-Length: 154
Content-Type: multipart/form-data; boundary=----------------------------
------------------------------
diff --git a/tests/data/test672 b/tests/data/test672
index d7f1cccb0..387058d89 100644
--- a/tests/data/test672
+++ b/tests/data/test672
@@ -33,7 +33,7 @@ hello
# Client-side
<client>
<features>
-Mime
+form-api
</features>
<server>
http
@@ -43,10 +43,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
Request pause from form read callback: multi
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
@@ -55,14 +55,14 @@ http://%HOSTIP:%HTTPPORT/%TESTNUMBER
# Verify data after the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/------------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/
+s/^--------------------------[A-Za-z0-9]*/------------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=----------------------------/
</strippart>
<protocol>
POST /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
-Content-Length: 142
+Content-Length: 154
Content-Type: multipart/form-data; boundary=----------------------------
------------------------------
diff --git a/tests/data/test673 b/tests/data/test673
index 0fd3f3732..5cc3e015a 100644
--- a/tests/data/test673
+++ b/tests/data/test673
@@ -33,7 +33,7 @@ hello
# Client-side
<client>
<features>
-Mime
+form-api
</features>
<server>
http
@@ -43,10 +43,10 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
Request pause from form read callback: easy
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
@@ -55,14 +55,14 @@ http://%HOSTIP:%HTTPPORT/%TESTNUMBER
# Verify data after the test has been "shot"
<verify>
<strippart>
-s/^--------------------------[a-z0-9]*/------------------------------/
-s/boundary=------------------------[a-z0-9]*/boundary=----------------------------/
+s/^--------------------------[A-Za-z0-9]*/------------------------------/
+s/boundary=------------------------[A-Za-z0-9]*/boundary=----------------------------/
</strippart>
<protocol>
POST /%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
-Content-Length: 142
+Content-Length: 154
Content-Type: multipart/form-data; boundary=----------------------------
------------------------------
diff --git a/tests/data/test674 b/tests/data/test674
index 1afe1f695..2043b3d4a 100644
--- a/tests/data/test674
+++ b/tests/data/test674
@@ -32,8 +32,8 @@ lib%TESTNUMBER
</tool>
<name>
Set CURLOPT_CURLU and dupe the handle
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test675 b/tests/data/test675
index fdc5a7631..82ae14031 100644
--- a/tests/data/test675
+++ b/tests/data/test675
@@ -23,9 +23,9 @@ the content would go here
<server>
http
</server>
- <name>
-HTTP connection re-use and different credentials
- </name>
+<name>
+HTTP connection reuse and different credentials
+</name>
<command>
http://user1:foo1@%HOSTIP:%HTTPPORT/user1/%TESTNUMBER http://user2:foo2@%HOSTIP:%HTTPPORT/user2/%TESTNUMBER
diff --git a/tests/data/test676 b/tests/data/test676
index a3916e526..031395eb8 100644
--- a/tests/data/test676
+++ b/tests/data/test676
@@ -44,8 +44,8 @@ Content-Type: text/html
# Client-side
<client>
-<file name="log/cookies676">
-%HOSTIP TRUE /we/want/ FALSE 2118138987 proven yes
+<file name="%LOGDIR/cookies%TESTNUMBER">
+%HOSTIP TRUE /we/want/ FALSE 22118138987 proven yes
</file>
<server>
http
@@ -55,12 +55,15 @@ http
lib%TESTNUMBER
</tool>
- <name>
+<name>
verify setting CURLOPT_COOKIEFILE to NULL again
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER %LOGDIR/cookies676
</command>
+<features>
+cookies
+</features>
</client>
#
diff --git a/tests/data/test677 b/tests/data/test677
index e3d9041fd..166be8954 100644
--- a/tests/data/test677
+++ b/tests/data/test677
@@ -19,9 +19,9 @@ CONNECT_ONLY
<server>
imap
</server>
- <name>
+<name>
IMAP with CONNECT_ONLY, custom command then exit
- </name>
+</name>
<tool>
lib%TESTNUMBER
</tool>
diff --git a/tests/data/test678 b/tests/data/test678
index 69ae232b3..42bc70eac 100644
--- a/tests/data/test678
+++ b/tests/data/test678
@@ -29,9 +29,9 @@ SSL
<server>
https Server-localhost-sv.pem
</server>
- <name>
+<name>
HTTPS GET using CURLOPT_CAINFO_BLOB
- </name>
+</name>
<tool>
lib%TESTNUMBER
</tool>
diff --git a/tests/data/test679 b/tests/data/test679
index 53b20c6e0..1ad174704 100644
--- a/tests/data/test679
+++ b/tests/data/test679
@@ -30,13 +30,13 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
netrc with quoted password
- </name>
- <command>
---netrc-optional --netrc-file log/netrc%TESTNUMBER http://%HOSTIP:%HTTPPORT/
+</name>
+<command>
+--netrc-optional --netrc-file %LOGDIR/netrc%TESTNUMBER http://%HOSTIP:%HTTPPORT/
</command>
-<file name="log/netrc%TESTNUMBER" >
+<file name="%LOGDIR/netrc%TESTNUMBER" >
machine %HOSTIP login user1 password "with spaces and \"\n\r\t\a"
</file>
</client>
diff --git a/tests/data/test680 b/tests/data/test680
index 23e194daa..5ea3eaa64 100644
--- a/tests/data/test680
+++ b/tests/data/test680
@@ -19,13 +19,13 @@ none
<features>
http
</features>
- <name>
+<name>
netrc with quoted password but missing end quote
- </name>
- <command>
---netrc --netrc-file log/netrc%TESTNUMBER http://user1@http.example/
+</name>
+<command>
+--netrc --netrc-file %LOGDIR/netrc%TESTNUMBER http://user1@http.example/
</command>
-<file name="log/netrc%TESTNUMBER" >
+<file name="%LOGDIR/netrc%TESTNUMBER" >
machine %HOSTIP login user1 password "with spaces and \"\n\r\t\a
</file>
</client>
diff --git a/tests/data/test682 b/tests/data/test682
index dfe076e5e..fc2189918 100644
--- a/tests/data/test682
+++ b/tests/data/test682
@@ -26,13 +26,13 @@ Connection: close
<server>
http
</server>
- <name>
+<name>
netrc with multiple logins - pick first
- </name>
- <command>
---netrc-optional --netrc-file log/netrc%TESTNUMBER http://user1@%HOSTIP:%HTTPPORT/
+</name>
+<command>
+--netrc-optional --netrc-file %LOGDIR/netrc%TESTNUMBER http://user1@%HOSTIP:%HTTPPORT/
</command>
-<file name="log/netrc%TESTNUMBER" >
+<file name="%LOGDIR/netrc%TESTNUMBER" >
machine %HOSTIP login user1 password passwd1
machine %HOSTIP login user2 password passwd2
</file>
diff --git a/tests/data/test683 b/tests/data/test683
index cf6ea4473..9eb250fbd 100644
--- a/tests/data/test683
+++ b/tests/data/test683
@@ -26,13 +26,13 @@ Connection: close
<server>
http
</server>
- <name>
+<name>
netrc with multiple logins - pick second
- </name>
- <command>
---netrc-optional --netrc-file log/netrc%TESTNUMBER http://user2@%HOSTIP:%HTTPPORT/
+</name>
+<command>
+--netrc-optional --netrc-file %LOGDIR/netrc%TESTNUMBER http://user2@%HOSTIP:%HTTPPORT/
</command>
-<file name="log/netrc%TESTNUMBER" >
+<file name="%LOGDIR/netrc%TESTNUMBER" >
machine %HOSTIP login user1 password passwd1
machine %HOSTIP login user2 password passwd2
</file>
diff --git a/tests/data/test684 b/tests/data/test684
index d7391a131..a63424e25 100644
--- a/tests/data/test684
+++ b/tests/data/test684
@@ -26,13 +26,13 @@ Connection: close
<server>
http
</server>
- <name>
+<name>
netrc with no login
- </name>
- <command>
---netrc-optional --netrc-file log/netrc%TESTNUMBER http://%HOSTIP:%HTTPPORT/
+</name>
+<command>
+--netrc-optional --netrc-file %LOGDIR/netrc%TESTNUMBER http://%HOSTIP:%HTTPPORT/
</command>
-<file name="log/netrc%TESTNUMBER" >
+<file name="%LOGDIR/netrc%TESTNUMBER" >
machine %HOSTIP password 5up3r53cr37
</file>
</client>
diff --git a/tests/data/test685 b/tests/data/test685
index ba520bd54..bdb2124b4 100644
--- a/tests/data/test685
+++ b/tests/data/test685
@@ -26,13 +26,13 @@ Connection: close
<server>
http
</server>
- <name>
+<name>
netrc with no login - provided user
- </name>
- <command>
---netrc-optional --netrc-file log/netrc%TESTNUMBER http://user@%HOSTIP:%HTTPPORT/
+</name>
+<command>
+--netrc-optional --netrc-file %LOGDIR/netrc%TESTNUMBER http://user@%HOSTIP:%HTTPPORT/
</command>
-<file name="log/netrc%TESTNUMBER" >
+<file name="%LOGDIR/netrc%TESTNUMBER" >
machine %HOSTIP password 5up3r53cr37
</file>
</client>
diff --git a/tests/data/test686 b/tests/data/test686
new file mode 100644
index 000000000..6189d7a17
--- /dev/null
+++ b/tests/data/test686
@@ -0,0 +1,34 @@
+<testcase>
+<info>
+<keywords>
+errorcode
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+<name>
+verify return code for missing URL after --next
+</name>
+<command>
+htdhdhdtp://localhost --next
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+2
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test687 b/tests/data/test687
new file mode 100644
index 000000000..500a1dfb2
--- /dev/null
+++ b/tests/data/test687
@@ -0,0 +1,62 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+xattr
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: fake/data
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+debug
+xattr
+</features>
+# simulate the xattr operations
+<setenv>
+CURL_FAKE_XATTR=1
+</setenv>
+<name>
+basic --xattr with -o
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --xattr -o %LOGDIR/out%TESTNUMBER
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+<stdout mode="text">
+user.mime_type => fake/data
+user.xdg.origin.url => http://%HOSTIP:%HTTPPORT/%TESTNUMBER
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test688 b/tests/data/test688
new file mode 100644
index 000000000..c545c4704
--- /dev/null
+++ b/tests/data/test688
@@ -0,0 +1,62 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+xattr
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: fake/data
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+debug
+xattr
+</features>
+# simulate the xattr operations
+<setenv>
+CURL_FAKE_XATTR=1
+</setenv>
+<name>
+basic --xattr with -O
+</name>
+<command>
+--xattr -O --output-dir %LOGDIR http://%HOSTIP:%HTTPPORT/%TESTNUMBER
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+<stdout mode="text">
+user.mime_type => fake/data
+user.xdg.origin.url => http://%HOSTIP:%HTTPPORT/%TESTNUMBER
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test7 b/tests/data/test7
index 06df71d3c..e98d5f5b1 100644
--- a/tests/data/test7
+++ b/tests/data/test7
@@ -28,11 +28,11 @@ Set-Cookie: partmatch=present; domain=.0.0.1; path=/;
<server>
http
</server>
- <name>
+<name>
HTTP with cookie parser and header recording
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -b none -D log/heads%TESTNUMBER.txt
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -b none -D %LOGDIR/heads%TESTNUMBER.txt
</command>
</client>
@@ -45,7 +45,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/heads%TESTNUMBER.txt">
+<file name="%LOGDIR/heads%TESTNUMBER.txt">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
diff --git a/tests/data/test70 b/tests/data/test70
index 622b9a9c5..69cba7da4 100644
--- a/tests/data/test70
+++ b/tests/data/test70
@@ -58,10 +58,10 @@ NTLM
<server>
http
</server>
- <name>
+<name>
HTTP with Digest *OR* NTLM authorization
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u testuser:testpass --anyauth
</command>
</client>
diff --git a/tests/data/test700 b/tests/data/test700
index e2a0d3320..fb5909835 100644
--- a/tests/data/test700
+++ b/tests/data/test700
@@ -36,10 +36,10 @@ proxy
http
socks4
</server>
- <name>
+<name>
HTTP GET via SOCKS4 proxy
- </name>
- <command>
+</name>
+<command>
--socks4 %HOSTIP:%SOCKSPORT http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test701 b/tests/data/test701
index f4cd7f14b..b7a9091a9 100644
--- a/tests/data/test701
+++ b/tests/data/test701
@@ -36,10 +36,10 @@ proxy
http
socks5
</server>
- <name>
+<name>
HTTP GET via SOCKS5 proxy
- </name>
- <command>
+</name>
+<command>
--socks5 %HOSTIP:%SOCKSPORT http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test702 b/tests/data/test702
index 4e06f8889..559636d36 100644
--- a/tests/data/test702
+++ b/tests/data/test702
@@ -30,10 +30,10 @@ socks4
http
proxy
</features>
- <name>
+<name>
Attempt connect to non-listening HTTP server via SOCKS4 proxy
- </name>
- <command>
+</name>
+<command>
--socks4 %HOSTIP:%SOCKSPORT http://%HOSTIP:%NOLISTENPORT
</command>
</client>
diff --git a/tests/data/test703 b/tests/data/test703
index 3c3487aee..67bf99876 100644
--- a/tests/data/test703
+++ b/tests/data/test703
@@ -27,10 +27,10 @@ socks5
http
proxy
</features>
- <name>
+<name>
Attempt connect to non-listening HTTP server via SOCKS5 proxy
- </name>
- <command>
+</name>
+<command>
--socks5 %HOSTIP:%SOCKSPORT http://%HOSTIP:%NOLISTENPORT
</command>
</client>
diff --git a/tests/data/test704 b/tests/data/test704
index b9abc45e1..67bee39c1 100644
--- a/tests/data/test704
+++ b/tests/data/test704
@@ -19,10 +19,10 @@ FAILURE
<server>
http
</server>
- <name>
+<name>
Attempt connect to non-listening SOCKS4 proxy
- </name>
- <command>
+</name>
+<command>
--socks4 %HOSTIP:%NOLISTENPORT http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
<features>
diff --git a/tests/data/test705 b/tests/data/test705
index 5d3692dc4..ed23bafe7 100644
--- a/tests/data/test705
+++ b/tests/data/test705
@@ -19,10 +19,10 @@ FAILURE
<server>
http
</server>
- <name>
+<name>
Attempt connect to non-listening SOCKS5 proxy
- </name>
- <command>
+</name>
+<command>
--socks5 %HOSTIP:%NOLISTENPORT http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
<features>
diff --git a/tests/data/test706 b/tests/data/test706
index 873f12989..656b3dd8b 100644
--- a/tests/data/test706
+++ b/tests/data/test706
@@ -38,10 +38,10 @@ proxy
ftp
socks4
</server>
- <name>
+<name>
FTP dir list PASV via SOCKS4
- </name>
- <command>
+</name>
+<command>
--socks4 %HOSTIP:%SOCKSPORT ftp://%HOSTIP:%FTPPORT/
</command>
</client>
diff --git a/tests/data/test707 b/tests/data/test707
index e58919345..3ed89ec62 100644
--- a/tests/data/test707
+++ b/tests/data/test707
@@ -38,10 +38,10 @@ proxy
ftp
socks5
</server>
- <name>
+<name>
FTP dir list PASV via SOCKS5
- </name>
- <command>
+</name>
+<command>
--socks5 %HOSTIP:%SOCKSPORT ftp://%HOSTIP:%FTPPORT/
</command>
</client>
diff --git a/tests/data/test708 b/tests/data/test708
index 72f4dcec8..d6797dc65 100644
--- a/tests/data/test708
+++ b/tests/data/test708
@@ -39,10 +39,10 @@ socks4
<setenv>
all_proxy=socks4://%HOSTIP:%SOCKSPORT
</setenv>
- <name>
+<name>
HTTP GET via SOCKS4 proxy
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test709 b/tests/data/test709
index d6380aff2..656675395 100644
--- a/tests/data/test709
+++ b/tests/data/test709
@@ -39,10 +39,10 @@ socks5
<setenv>
http_proxy=socks5://%HOSTIP:%SOCKSPORT
</setenv>
- <name>
+<name>
HTTP GET via SOCKS5 set in http_proxy environment variable
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test71 b/tests/data/test71
index 56c36e1b6..f47879a3f 100644
--- a/tests/data/test71
+++ b/tests/data/test71
@@ -27,20 +27,20 @@ Mime
<server>
http
</server>
- <name>
+<name>
HTTP and -F upload in config file
- </name>
+</name>
<stdin>
-F name=daniel
-F tool=curl
--F file=@log/test%TESTNUMBER.txt
+-F file=@%LOGDIR/test%TESTNUMBER.txt
user-agent = ""
</stdin>
- <command>
+<command>
http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -K -
</command>
# We create this file before the command is invoked!
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
foo-
This is a moo-
bar
@@ -56,7 +56,7 @@ bar
POST /we/want/%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*
-Content-Length: 408
+Content-Length: 432
Content-Type: multipart/form-data; boundary=----------------------------9ef8d6205763
------------------------------9ef8d6205763
diff --git a/tests/data/test710 b/tests/data/test710
index 6400eefb3..02033831b 100644
--- a/tests/data/test710
+++ b/tests/data/test710
@@ -36,11 +36,11 @@ proxy
http
socks5
</server>
- <name>
+<name>
HTTP GET via SOCKS5 set with --proxy
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER --proxy socks5://%HOSTIP:%SOCKSPORT
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --proxy socks5://%HOSTIP:%SOCKSPORT
</command>
</client>
diff --git a/tests/data/test711 b/tests/data/test711
index e5f1c39fd..355ca0e51 100644
--- a/tests/data/test711
+++ b/tests/data/test711
@@ -32,10 +32,10 @@ socks5
<setenv>
all_proxy=socks5://%HOSTIP:%SOCKSPORT
</setenv>
- <name>
+<name>
FTP fetch with all_proxy set to socks5
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%FTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test712 b/tests/data/test712
index dbdf1adbe..7bcc2a1bb 100644
--- a/tests/data/test712
+++ b/tests/data/test712
@@ -26,11 +26,11 @@ proxy
ftp
socks5
</server>
- <name>
+<name>
FTP fetch with --proxy set to socks5://
- </name>
- <command>
-ftp://%HOSTIP:%FTPPORT/%TESTNUMBER --proxy socks5://%HOSTIP:%SOCKSPORT
+</name>
+<command>
+ftp://%HOSTIP:%FTPPORT/%TESTNUMBER --proxy socks5://%HOSTIP:%SOCKSPORT
</command>
</client>
diff --git a/tests/data/test713 b/tests/data/test713
index 8c94a9cc1..44820a78f 100644
--- a/tests/data/test713
+++ b/tests/data/test713
@@ -27,11 +27,11 @@ proxy
ftp
socks5
</server>
- <name>
+<name>
FTP fetch with --proxy set to socks5:// and with --connect-to
- </name>
- <command>
-ftp://ftp.example.com/%TESTNUMBER --connect-to ::%HOSTIP:%FTPPORT --proxy socks5://%HOSTIP:%SOCKSPORT
+</name>
+<command>
+ftp://ftp.example.com/%TESTNUMBER --connect-to ::%HOSTIP:%FTPPORT --proxy socks5://%HOSTIP:%SOCKSPORT
</command>
</client>
diff --git a/tests/data/test714 b/tests/data/test714
index 1e042404e..a38400bb8 100644
--- a/tests/data/test714
+++ b/tests/data/test714
@@ -46,11 +46,11 @@ http-proxy
http
proxy
</features>
- <name>
+<name>
FTP fetch with --proxy set to http:// and with --connect-to
- </name>
- <command>
-ftp://ftp.example.com.%TESTNUMBER/%TESTNUMBER --connect-to ::connect.example.com.%TESTNUMBER:%FTPPORT --proxytunnel --proxy http://%HOSTIP:%PROXYPORT
+</name>
+<command>
+ftp://ftp.example.com.%TESTNUMBER/%TESTNUMBER --connect-to ::connect.example.com.%TESTNUMBER:%FTPPORT --proxytunnel --proxy http://%HOSTIP:%PROXYPORT
</command>
</client>
diff --git a/tests/data/test715 b/tests/data/test715
index d3d89d514..6f9670af5 100644
--- a/tests/data/test715
+++ b/tests/data/test715
@@ -48,11 +48,11 @@ socks5
http
proxy
</features>
- <name>
+<name>
FTP fetch with --preproxy, --proxy and --connect-to
- </name>
- <command>
-ftp://ftp.example.com.%TESTNUMBER/%TESTNUMBER --connect-to ::connect.example.com.%TESTNUMBER:%FTPPORT --proxytunnel --proxy %HOSTIP:%PROXYPORT --preproxy socks5://%HOSTIP:%SOCKSPORT
+</name>
+<command>
+ftp://ftp.example.com.%TESTNUMBER/%TESTNUMBER --connect-to ::connect.example.com.%TESTNUMBER:%FTPPORT --proxytunnel --proxy %HOSTIP:%PROXYPORT --preproxy socks5://%HOSTIP:%SOCKSPORT
</command>
</client>
diff --git a/tests/data/test716 b/tests/data/test716
index 4de1cd95f..5c20b45a7 100644
--- a/tests/data/test716
+++ b/tests/data/test716
@@ -30,7 +30,7 @@ SOCKS5 proxy with too long user name
</name>
# it should never connect to the target server
- <command>
+<command>
http://hohoho.example.com:99/%TESTNUMBER -x socks5://AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA:b@%HOSTIP:%SOCKSPORT
</command>
</client>
diff --git a/tests/data/test717 b/tests/data/test717
index bbbc9ed3f..54ab95568 100644
--- a/tests/data/test717
+++ b/tests/data/test717
@@ -44,7 +44,7 @@ SOCKS5 proxy auth
</name>
# target a port that won't work without the SOCKS magic
- <command>
+<command>
http://%HOSTIP:1/%TESTNUMBER -x socks5://uz3r:p4ssworm@%HOSTIP:%SOCKSPORT
</command>
<features>
diff --git a/tests/data/test718 b/tests/data/test718
index 613647aa0..dcbf7d77a 100644
--- a/tests/data/test718
+++ b/tests/data/test718
@@ -37,10 +37,10 @@ http
crypto
proxy
</features>
- <name>
+<name>
HTTP proxy CONNECT (no auth) with proxy returning 407 and closing
- </name>
- <command>
+</name>
+<command>
http://test.remote.haxx.se.%TESTNUMBER:8990/path/%TESTNUMBER0002 --proxy http://%HOSTIP:%HTTPPORT --proxytunnel
</command>
</client>
diff --git a/tests/data/test719 b/tests/data/test719
index 9aea9f08d..63cb88886 100644
--- a/tests/data/test719
+++ b/tests/data/test719
@@ -38,11 +38,11 @@ proxy
http
socks5
</server>
- <name>
+<name>
HTTP GET with IPv6 numerical via SOCKS5h
- </name>
- <command>
-http://[2200::33]:%HTTPPORT/%TESTNUMBER --proxy socks5h://%HOSTIP:%SOCKSPORT
+</name>
+<command>
+http://[2200::33]:%HTTPPORT/%TESTNUMBER --proxy socks5h://%HOSTIP:%SOCKSPORT
</command>
</client>
diff --git a/tests/data/test72 b/tests/data/test72
index 00c4c6421..176d0dff8 100644
--- a/tests/data/test72
+++ b/tests/data/test72
@@ -57,10 +57,10 @@ http
!SSPI
crypto
</features>
- <name>
+<name>
HTTP with Digest *OR* Basic authorization
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -u testuser:testpass --anyauth
</command>
</client>
diff --git a/tests/data/test720 b/tests/data/test720
index 59dfeed4e..709656a28 100644
--- a/tests/data/test720
+++ b/tests/data/test720
@@ -37,11 +37,11 @@ proxy
http
socks5
</server>
- <name>
+<name>
HTTP GET with IPv4 numerical via SOCKS5h
- </name>
- <command>
-http://12.34.56.78:%HTTPPORT/%TESTNUMBER --proxy socks5h://%HOSTIP:%SOCKSPORT
+</name>
+<command>
+http://12.34.56.78:%HTTPPORT/%TESTNUMBER --proxy socks5h://%HOSTIP:%SOCKSPORT
</command>
</client>
diff --git a/tests/data/test721 b/tests/data/test721
index 3092eaac6..db63a8f6b 100644
--- a/tests/data/test721
+++ b/tests/data/test721
@@ -37,10 +37,10 @@ proxy
http
socks5
</server>
- <name>
+<name>
HTTP GET with host name using SOCKS5h
- </name>
- <command>
+</name>
+<command>
http://this.is.a.host.name:%HTTPPORT/%TESTNUMBER --proxy socks5h://%HOSTIP:%SOCKSPORT
</command>
</client>
diff --git a/tests/data/test722 b/tests/data/test722
new file mode 100644
index 000000000..c5b8d8610
--- /dev/null
+++ b/tests/data/test722
@@ -0,0 +1,52 @@
+<testcase>
+<info>
+<keywords>
+IPFS
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 21
+Connection: close
+Content-Type: text/plain
+Funny-head: yesyes
+
+Hello curl from IPFS
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+IPFS
+</name>
+<command>
+--ipfs-gateway http://%HOSTIP:%HTTPPORT ipfs://bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /ipfs/bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test723 b/tests/data/test723
new file mode 100644
index 000000000..dac78fc54
--- /dev/null
+++ b/tests/data/test723
@@ -0,0 +1,35 @@
+<testcase>
+<info>
+<keywords>
+IPFS
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+IPFS with malformed gateway URL (bad function argument error)
+</name>
+<command>
+--ipfs-gateway http://nonexisting,local:8080 ipfs://bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+# malformed gateway URL (bad function argument error)
+<errorcode>
+43
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test724 b/tests/data/test724
new file mode 100644
index 000000000..c97354b0d
--- /dev/null
+++ b/tests/data/test724
@@ -0,0 +1,58 @@
+<testcase>
+<info>
+<keywords>
+IPFS
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 21
+Connection: close
+Content-Type: text/plain
+Funny-head: yesyes
+
+Hello curl from IPFS
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<setenv>
+HOME=%PWD/%LOGDIR
+</setenv>
+<name>
+IPFS with gateway URL from gateway file
+</name>
+<command>
+ipfs://bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u
+</command>
+<file name="%LOGDIR/.ipfs/gateway" >
+http://%HOSTIP:%HTTPPORT
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /ipfs/bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test725 b/tests/data/test725
new file mode 100644
index 000000000..de7c39493
--- /dev/null
+++ b/tests/data/test725
@@ -0,0 +1,40 @@
+<testcase>
+<info>
+<keywords>
+IPFS
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<setenv>
+HOME=%PWD/%LOGDIR
+</setenv>
+<name>
+IPFS with malformed gateway URL from gateway file
+</name>
+<command>
+ipfs://bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u
+</command>
+<file name="%LOGDIR/.ipfs/gateway" >
+http://nonexisting,local:8080
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+3
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test726 b/tests/data/test726
new file mode 100644
index 000000000..f51adf594
--- /dev/null
+++ b/tests/data/test726
@@ -0,0 +1,40 @@
+<testcase>
+<info>
+<keywords>
+IPFS
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<setenv>
+#
+# Set a home that doesn't have a ".ipfs" folder. %PWD should be good.
+# This is to prevent the automatic gateway detection from finding a gateway file in your home folder.
+HOME=%PWD
+</setenv>
+<name>
+IPFS with no gateway URL (no environment or home file either)
+</name>
+<command>
+ipfs://bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u
+</command>
+</client>
+
+#
+# Verify with no gateway url and no auto detection
+<verify>
+<errorcode>
+37
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test727 b/tests/data/test727
new file mode 100644
index 000000000..aa2c84fbc
--- /dev/null
+++ b/tests/data/test727
@@ -0,0 +1,52 @@
+<testcase>
+<info>
+<keywords>
+IPNS
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 21
+Connection: close
+Content-Type: text/plain
+Funny-head: yesyes
+
+Hello curl from IPNS
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+IPNS
+</name>
+<command>
+--ipfs-gateway http://%HOSTIP:%HTTPPORT ipns://bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /ipns/bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test728 b/tests/data/test728
new file mode 100644
index 000000000..05bcf2883
--- /dev/null
+++ b/tests/data/test728
@@ -0,0 +1,64 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+SOCKS5
+SOCKS5h
+followlocation
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+# The hostname in this redirect is 256 characters and too long (> 255) for
+# SOCKS5 remote resolve. curl must return error CURLE_PROXY in this case.
+<data>
+HTTP/1.1 301 Moved Permanently
+Location: http://AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/
+Content-Length: 0
+Connection: close
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+proxy
+</features>
+<server>
+http
+socks5
+</server>
+ <name>
+SOCKS5h with HTTP redirect to hostname too long
+ </name>
+ <command>
+--no-progress-meter --location --proxy socks5h://%HOSTIP:%SOCKSPORT http://%HOSTIP:%HTTPPORT/%TESTNUMBER
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+<errorcode>
+97
+</errorcode>
+# the error message is verified because error code CURLE_PROXY (97) may be
+# returned for any number of reasons and we need to make sure it is
+# specifically for the reason below so that we know the check is working.
+<stderr mode="text">
+curl: (97) SOCKS5: the destination hostname is too long to be resolved remotely by the proxy.
+</stderr>
+</verify>
+</testcase>
diff --git a/tests/data/test729 b/tests/data/test729
new file mode 100644
index 000000000..805758921
--- /dev/null
+++ b/tests/data/test729
@@ -0,0 +1,41 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+SOCKS4
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+proxy
+</features>
+<server>
+http
+socks4
+</server>
+<name>
+SOCKS4 with very long proxy user name
+</name>
+<command>
+http://fake --limit-rate 1 -x socks4a://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@%HOSTIP:%SOCKSPORT
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+# CURLE_PROXY
+<errorcode>
+97
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test73 b/tests/data/test73
index e211f2148..1edcbdcb9 100644
--- a/tests/data/test73
+++ b/tests/data/test73
@@ -25,12 +25,15 @@ boo
<server>
http
</server>
- <name>
+<name>
HTTP, receive cookies when using custom Host:, domain using only two dots
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -c log/jar%TESTNUMBER.txt -H "Host: host.NOT_DISCLOSED.se"
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -c %LOGDIR/jar%TESTNUMBER.txt -H "Host: host.NOT_DISCLOSED.se"
</command>
+<features>
+cookies
+</features>
</client>
# Verify data after the test has been "shot"
@@ -42,7 +45,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/jar%TESTNUMBER.txt" mode="text">
+<file name="%LOGDIR/jar%TESTNUMBER.txt" mode="text">
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
diff --git a/tests/data/test730 b/tests/data/test730
new file mode 100644
index 000000000..138f85086
--- /dev/null
+++ b/tests/data/test730
@@ -0,0 +1,52 @@
+<testcase>
+<info>
+<keywords>
+IPFS
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 21
+Connection: close
+Content-Type: text/plain
+Funny-head: yesyes
+
+Hello curl from IPFS
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+IPFS arg gateway with path
+</name>
+<command>
+--ipfs-gateway http://%HOSTIP:%HTTPPORT/foo/bar ipfs://bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /foo/bar/ipfs/bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test731 b/tests/data/test731
new file mode 100644
index 000000000..9e135dbec
--- /dev/null
+++ b/tests/data/test731
@@ -0,0 +1,58 @@
+<testcase>
+<info>
+<keywords>
+IPFS
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 21
+Connection: close
+Content-Type: text/plain
+Funny-head: yesyes
+
+Hello curl from IPFS
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<setenv>
+HOME=%PWD/%LOGDIR
+</setenv>
+<name>
+IPFS with gateway URL and path from gateway file
+</name>
+<command>
+ipfs://bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u
+</command>
+<file name="%LOGDIR/.ipfs/gateway" >
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /%TESTNUMBER/ipfs/bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test732 b/tests/data/test732
new file mode 100644
index 000000000..9adaedb93
--- /dev/null
+++ b/tests/data/test732
@@ -0,0 +1,52 @@
+<testcase>
+<info>
+<keywords>
+IPFS
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 21
+Connection: close
+Content-Type: text/plain
+Funny-head: yesyes
+
+Hello curl from IPFS
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+IPFS with path
+</name>
+<command>
+--ipfs-gateway http://%HOSTIP:%HTTPPORT "ipfs://bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u/a/b"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /ipfs/bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u/a/b HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test733 b/tests/data/test733
new file mode 100644
index 000000000..ad17cd4bf
--- /dev/null
+++ b/tests/data/test733
@@ -0,0 +1,52 @@
+<testcase>
+<info>
+<keywords>
+IPFS
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 21
+Connection: close
+Content-Type: text/plain
+Funny-head: yesyes
+
+Hello curl from IPFS
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+IPFS with path and query args
+</name>
+<command>
+--ipfs-gateway http://%HOSTIP:%HTTPPORT "ipfs://bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u/a/b?foo=bar&aaa=bbb"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /ipfs/bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u/a/b?foo=bar&aaa=bbb HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test734 b/tests/data/test734
new file mode 100644
index 000000000..03f571cc6
--- /dev/null
+++ b/tests/data/test734
@@ -0,0 +1,52 @@
+<testcase>
+<info>
+<keywords>
+IPFS
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 21
+Connection: close
+Content-Type: text/plain
+Funny-head: yesyes
+
+Hello curl from IPFS
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+IPFS with path, query args and gateway with path
+</name>
+<command>
+--ipfs-gateway http://%HOSTIP:%HTTPPORT/some/path "ipfs://bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u/a/b?foo=bar&aaa=bbb"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /some/path/ipfs/bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u/a/b?foo=bar&aaa=bbb HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test735 b/tests/data/test735
new file mode 100644
index 000000000..da1aac4dd
--- /dev/null
+++ b/tests/data/test735
@@ -0,0 +1,52 @@
+<testcase>
+<info>
+<keywords>
+IPFS
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 21
+Connection: close
+Content-Type: text/plain
+Funny-head: yesyes
+
+Hello curl from IPFS
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+IPNS with path, query args and gateway with path
+</name>
+<command>
+--ipfs-gateway http://%HOSTIP:%HTTPPORT/some/path "ipns://fancy.tld/a/b?foo=bar&aaa=bbb"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /some/path/ipns/fancy.tld/a/b?foo=bar&aaa=bbb HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test736 b/tests/data/test736
new file mode 100644
index 000000000..45d9a055a
--- /dev/null
+++ b/tests/data/test736
@@ -0,0 +1,58 @@
+<testcase>
+<info>
+<keywords>
+IPFS
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 21
+Connection: close
+Content-Type: text/plain
+Funny-head: yesyes
+
+Hello curl from IPFS
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<setenv>
+IPFS_PATH=%LOGDIR/.ipfs
+</setenv>
+<name>
+IPFS with IPFS_PATH set, no trailing slash
+</name>
+<command>
+ipfs://bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u
+</command>
+<file name="%LOGDIR/.ipfs/gateway" >
+http://%HOSTIP:%HTTPPORT
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /ipfs/bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test737 b/tests/data/test737
new file mode 100644
index 000000000..bc6e8576a
--- /dev/null
+++ b/tests/data/test737
@@ -0,0 +1,58 @@
+<testcase>
+<info>
+<keywords>
+IPFS
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 21
+Connection: close
+Content-Type: text/plain
+Funny-head: yesyes
+
+Hello curl from IPFS
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<setenv>
+IPFS_PATH=%LOGDIR/.ipfs/
+</setenv>
+<name>
+IPFS with IPFS_PATH set, with trailing slash
+</name>
+<command>
+ipfs://bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u
+</command>
+<file name="%LOGDIR/.ipfs/gateway" >
+http://%HOSTIP:%HTTPPORT
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /ipfs/bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test738 b/tests/data/test738
new file mode 100644
index 000000000..5c05137dc
--- /dev/null
+++ b/tests/data/test738
@@ -0,0 +1,37 @@
+<testcase>
+<info>
+<keywords>
+IPFS
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<setenv>
+IPFS_PATH=%LOGDIR/.ipfs/
+</setenv>
+<name>
+IPFS with IPFS_PATH, no gateway file
+</name>
+<command>
+ipfs://bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u
+</command>
+</client>
+
+#
+# Verify error code with no gateway file (detection fails)
+<verify>
+<errorcode>
+37
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test739 b/tests/data/test739
new file mode 100644
index 000000000..fe78c41bb
--- /dev/null
+++ b/tests/data/test739
@@ -0,0 +1,34 @@
+<testcase>
+<info>
+<keywords>
+IPFS
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+IPNS path and query args for gateway and IPFS url (malformed gateway url)
+</name>
+<command>
+--ipfs-gateway "http://%HOSTIP:%HTTPPORT/some/path?biz=baz" "ipns://fancy.tld/a/b?foo=bar&aaa=bbb"
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+3
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test74 b/tests/data/test74
index 524a70eb8..d9316f0e6 100644
--- a/tests/data/test74
+++ b/tests/data/test74
@@ -39,11 +39,11 @@ crap data
<server>
http
</server>
- <name>
+<name>
HTTP, urlglob {}-retrieval and -o #[num] usage
- </name>
+</name>
<command option="no-output">
-"http://%HOSTIP:%HTTPPORT/{%TESTNUMBER,%TESTNUMBER0001}" -o "log/dumpit#1.dump"
+"http://%HOSTIP:%HTTPPORT/{%TESTNUMBER,%TESTNUMBER0001}" -o "%LOGDIR/dumpit#1.dump"
</command>
</client>
@@ -62,7 +62,7 @@ User-Agent: curl/%VERSION
Accept: */*
</protocol>
-<file name="log/dumpit%TESTNUMBER0001.dump">
+<file name="%LOGDIR/dumpit%TESTNUMBER0001.dump">
HTTP/1.0 200 OK
Content-Type: text/html
Funny-head: swsclose
diff --git a/tests/data/test740 b/tests/data/test740
new file mode 100644
index 000000000..97258d384
--- /dev/null
+++ b/tests/data/test740
@@ -0,0 +1,60 @@
+<testcase>
+<info>
+<keywords>
+IPFS
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 21
+Connection: close
+Content-Type: text/plain
+Funny-head: yesyes
+
+Hello curl from IPFS
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<setenv>
+HOME=%PWD/%LOGDIR
+</setenv>
+<name>
+IPFS with gateway URL from multiline gateway file
+</name>
+<command>
+ipfs://bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u
+</command>
+<file name="%LOGDIR/.ipfs/gateway" >
+http://%HOSTIP:%HTTPPORT
+foo
+bar
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /ipfs/bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test741 b/tests/data/test741
new file mode 100644
index 000000000..e773cd08a
--- /dev/null
+++ b/tests/data/test741
@@ -0,0 +1,42 @@
+<testcase>
+<info>
+<keywords>
+IPFS
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<setenv>
+HOME=%PWD/%LOGDIR
+</setenv>
+<name>
+IPFS with malformed gateway URL from multiline gateway file, first line no url
+</name>
+<command>
+ipfs://bafybeidecnvkrygux6uoukouzps5ofkeevoqland7kopseiod6pzqvjg7u
+</command>
+<file name="%LOGDIR/.ipfs/gateway" >
+foo
+bar
+</file>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+# malformed gateway URL, first line in file must be a gateway URL
+<errorcode>
+3
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test75 b/tests/data/test75
index 7bee04443..dc8b49979 100644
--- a/tests/data/test75
+++ b/tests/data/test75
@@ -21,11 +21,11 @@ none
<features>
http
</features>
- <name>
+<name>
HTTP, urlglob retrieval with bad range
- </name>
+</name>
<command option="no-output">
-"http://a-site-never-accessed.example.org/[2-1]" -o "log/weee#1.dump" --stderr -
+"http://a-site-never-accessed.example.org/[2-1]" -o "%LOGDIR/weee#1.dump" --stderr -
</command>
</client>
diff --git a/tests/data/test76 b/tests/data/test76
index 8aae75aec..4c83566dd 100644
--- a/tests/data/test76
+++ b/tests/data/test76
@@ -18,9 +18,9 @@ none
<features>
http
</features>
- <name>
+<name>
HTTP, -O with no file name part in the URL
- </name>
+</name>
<command option="no-output">
http://%HOSTIP:%NOLISTENPORT/%TESTNUMBER/ -O
</command>
diff --git a/tests/data/test77 b/tests/data/test77
index d7cce4035..baa9bfc36 100644
--- a/tests/data/test77
+++ b/tests/data/test77
@@ -31,10 +31,10 @@ Content-Type: text/html
<server>
http
</server>
- <name>
+<name>
HTTP with -z "older date"
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -z "dec 12 12:00:00 1999 GMT"
</command>
</client>
diff --git a/tests/data/test78 b/tests/data/test78
index 60c4029b7..d52fb1554 100644
--- a/tests/data/test78
+++ b/tests/data/test78
@@ -43,10 +43,10 @@ Funny-head: yesyes
<server>
http
</server>
- <name>
+<name>
HTTP with -z "newer date"
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -z "dec 12 11:00:00 1999 GMT"
</command>
</client>
diff --git a/tests/data/test79 b/tests/data/test79
index 88e9b78e4..e836b3bf5 100644
--- a/tests/data/test79
+++ b/tests/data/test79
@@ -31,10 +31,10 @@ http
ftp
proxy
</features>
- <name>
+<name>
FTP over HTTP proxy
- </name>
- <command>
+</name>
+<command>
ftp://%HOSTIP:%HTTPPORT/we/want/that/page/%TESTNUMBER -x %HOSTIP:%HTTPPORT
</command>
</client>
diff --git a/tests/data/test799 b/tests/data/test799
new file mode 100644
index 000000000..e8563a598
--- /dev/null
+++ b/tests/data/test799
@@ -0,0 +1,53 @@
+<testcase>
+<info>
+<keywords>
+IMAP
+Clear Text
+SASL AUTH +LOGIN
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH PLAIN
+REPLY LOGIN A002 OK LOGIN completed
+</servercmd>
+<data>
+From: me@somewhere
+To: fake@nowhere
+
+body
+
+--
+ yours sincerely
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+imap
+</server>
+<name>
+IMAP with --login-options 'AUTH=+LOGIN'
+</name>
+<command>
+'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u user:secret --login-options AUTH=+LOGIN
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+A001 CAPABILITY
+A002 LOGIN user secret
+A003 SELECT %TESTNUMBER
+A004 FETCH 1 BODY[]
+A005 LOGOUT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test8 b/tests/data/test8
index fa44a5a6a..9e5818815 100644
--- a/tests/data/test8
+++ b/tests/data/test8
@@ -21,15 +21,15 @@ Server: test-server/fake
<server>
http
</server>
- <name>
+<name>
HTTP with cookie parsing from header file
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -b log/heads%TESTNUMBER.txt
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -b %LOGDIR/heads%TESTNUMBER.txt
</command>
# We create this file before the command is invoked!
-<file name="log/heads%TESTNUMBER.txt">
+<file name="%LOGDIR/heads%TESTNUMBER.txt">
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
@@ -81,6 +81,9 @@ Set-Cookie: cookie31=%hex[%7f-junk]hex%
<precheck>
perl -e 'if ("%HOSTIP" !~ /\.0\.0\.1$/) {print "Test only works for HOSTIPs ending with .0.0.1"; exit(1)}'
</precheck>
+<features>
+cookies
+</features>
</client>
# Verify data after the test has been "shot"
diff --git a/tests/data/test80 b/tests/data/test80
index ef62f5228..21d9fd2ea 100644
--- a/tests/data/test80
+++ b/tests/data/test80
@@ -49,10 +49,10 @@ contents
http
http-proxy
</server>
- <name>
+<name>
HTTP 1.0 CONNECT with proxytunnel and proxy+host Basic authentication
- </name>
- <command>
+</name>
+<command>
http://test.%TESTNUMBER:%HTTPPORT/we/want/that/page/%TESTNUMBER -p --proxy1.0 %HOSTIP:%PROXYPORT --user iam:myself --proxy-user youare:yourself
</command>
<features>
diff --git a/tests/data/test800 b/tests/data/test800
index 9f961ebc9..a2daf240a 100644
--- a/tests/data/test800
+++ b/tests/data/test800
@@ -27,10 +27,10 @@ body
<server>
imap
</server>
- <name>
+<name>
IMAP FETCH message
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u '"user:sec"ret{'
</command>
</client>
diff --git a/tests/data/test801 b/tests/data/test801
index dcfa18cf6..9b68d62a8 100644
--- a/tests/data/test801
+++ b/tests/data/test801
@@ -24,10 +24,10 @@ body
<server>
imap
</server>
- <name>
+<name>
IMAP FETCH message by MAILINDEX and SECTION
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=123/;SECTION=1' -u user:secret
</command>
</client>
diff --git a/tests/data/test802 b/tests/data/test802
index 76ede9e9d..1e2e35bfa 100644
--- a/tests/data/test802
+++ b/tests/data/test802
@@ -25,10 +25,10 @@ body
<server>
imap
</server>
- <name>
+<name>
IMAP SELECT UIDVALIDITY Success
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER;UIDVALIDITY=3857529045/;MAILINDEX=123/;SECTION=TEXT' -u user:secret
</command>
</client>
diff --git a/tests/data/test803 b/tests/data/test803
index f16a419aa..6fb00eb0a 100644
--- a/tests/data/test803
+++ b/tests/data/test803
@@ -20,10 +20,10 @@ FAILURE
<server>
imap
</server>
- <name>
+<name>
IMAP SELECT UIDVALIDITY Failure
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER;UIDVALIDITY=12345/;MAILINDEX=123' -u user:secret
</command>
</client>
diff --git a/tests/data/test804 b/tests/data/test804
index 1626cf88c..420dfb70c 100644
--- a/tests/data/test804
+++ b/tests/data/test804
@@ -24,10 +24,10 @@ body
<server>
imap
</server>
- <name>
+<name>
IMAP doesn't perform SELECT if re-using the same mailbox
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=123/;SECTION=1' 'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=456/;SECTION=2.3' -u user:secret
</command>
</client>
diff --git a/tests/data/test805 b/tests/data/test805
index 5ce64a791..7370e6360 100644
--- a/tests/data/test805
+++ b/tests/data/test805
@@ -19,13 +19,13 @@ UPLOAD
<server>
imap
</server>
- <name>
+<name>
IMAP APPEND message
- </name>
- <command>
-imap://%HOSTIP:%IMAPPORT/%TESTNUMBER -T log/upload%TESTNUMBER -u user:secret
+</name>
+<command>
+imap://%HOSTIP:%IMAPPORT/%TESTNUMBER -T %LOGDIR/upload%TESTNUMBER -u user:secret
</command>
-<file name="log/upload%TESTNUMBER">
+<file name="%LOGDIR/upload%TESTNUMBER">
Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)
From: Fred Foobar <foobar@example.COM>
Subject: afternoon meeting
diff --git a/tests/data/test806 b/tests/data/test806
index 128ad85bc..adfbc1121 100644
--- a/tests/data/test806
+++ b/tests/data/test806
@@ -23,10 +23,10 @@ LIST
<server>
imap
</server>
- <name>
+<name>
IMAP LIST mailbox
- </name>
- <command>
+</name>
+<command>
imap://%HOSTIP:%IMAPPORT/%TESTNUMBER -u user:secret
</command>
</client>
diff --git a/tests/data/test807 b/tests/data/test807
index 59c12eb28..80a1044da 100644
--- a/tests/data/test807
+++ b/tests/data/test807
@@ -24,10 +24,10 @@ CUSTOMREQUEST
<server>
imap
</server>
- <name>
+<name>
IMAP LSUB mailbox
- </name>
- <command>
+</name>
+<command>
imap://%HOSTIP:%IMAPPORT -u user:secret -X 'LSUB "%TESTNUMBER" *'
</command>
</client>
diff --git a/tests/data/test808 b/tests/data/test808
index a77589a7c..542f87e6d 100644
--- a/tests/data/test808
+++ b/tests/data/test808
@@ -28,10 +28,10 @@ CUSTOMREQUEST
<server>
imap
</server>
- <name>
+<name>
IMAP EXAMINE mailbox (CUSTOMREQUEST)
- </name>
- <command>
+</name>
+<command>
imap://%HOSTIP:%IMAPPORT -u user:secret -X 'EXAMINE %TESTNUMBER'
</command>
</client>
diff --git a/tests/data/test809 b/tests/data/test809
index 8122eaf69..25635d21f 100644
--- a/tests/data/test809
+++ b/tests/data/test809
@@ -22,10 +22,10 @@ CUSTOMREQUEST
<server>
imap
</server>
- <name>
+<name>
IMAP mailbox STATUS (CUSTOMREQUEST)
- </name>
- <command>
+</name>
+<command>
imap://%HOSTIP:%IMAPPORT -u user:secret -X 'STATUS %TESTNUMBER (UIDNEXT MESSAGES)'
</command>
</client>
diff --git a/tests/data/test810 b/tests/data/test810
index 80aac560e..37d76f6ba 100644
--- a/tests/data/test810
+++ b/tests/data/test810
@@ -21,10 +21,10 @@ SEARCH
<server>
imap
</server>
- <name>
+<name>
IMAP SEARCH for NEW messages
- </name>
- <command>
+</name>
+<command>
imap://%HOSTIP:%IMAPPORT/%TESTNUMBER?NEW -u user:secret
</command>
</client>
diff --git a/tests/data/test811 b/tests/data/test811
index f0938be11..e2520c331 100644
--- a/tests/data/test811
+++ b/tests/data/test811
@@ -19,10 +19,10 @@ CUSTOMREQUEST
<server>
imap
</server>
- <name>
+<name>
IMAP CREATE mailbox (CUSTOMREQUEST)
- </name>
- <command>
+</name>
+<command>
imap://%HOSTIP:%IMAPPORT -u user:secret -X 'CREATE %TESTNUMBER'
</command>
</client>
diff --git a/tests/data/test812 b/tests/data/test812
index 8374ea093..0180e023e 100644
--- a/tests/data/test812
+++ b/tests/data/test812
@@ -19,10 +19,10 @@ CUSTOMREQUEST
<server>
imap
</server>
- <name>
+<name>
IMAP DELETE mailbox (CUSTOMREQUEST)
- </name>
- <command>
+</name>
+<command>
imap://%HOSTIP:%IMAPPORT -u user:secret -X 'DELETE %TESTNUMBER'
</command>
</client>
diff --git a/tests/data/test813 b/tests/data/test813
index 2e8c42d0c..674d308fd 100644
--- a/tests/data/test813
+++ b/tests/data/test813
@@ -19,10 +19,10 @@ CUSTOMREQUEST
<server>
imap
</server>
- <name>
+<name>
IMAP RENAME mailbox (CUSTOMREQUEST)
- </name>
- <command>
+</name>
+<command>
imap://%HOSTIP:%IMAPPORT -u user:secret -X 'RENAME 666 %TESTNUMBER'
</command>
</client>
diff --git a/tests/data/test814 b/tests/data/test814
index c673c4355..e73b0e894 100644
--- a/tests/data/test814
+++ b/tests/data/test814
@@ -19,10 +19,10 @@ CUSTOMREQUEST
<server>
imap
</server>
- <name>
+<name>
IMAP CHECK mailbox (CUSTOMREQUEST)
- </name>
- <command>
+</name>
+<command>
imap://%HOSTIP:%IMAPPORT/%TESTNUMBER -u user:secret -X 'CHECK'
</command>
</client>
diff --git a/tests/data/test815 b/tests/data/test815
index 4ac24f3ad..04daef90f 100644
--- a/tests/data/test815
+++ b/tests/data/test815
@@ -23,10 +23,10 @@ CUSTOMREQUEST
<server>
imap
</server>
- <name>
+<name>
IMAP STORE - delete message (CUSTOMREQUEST)
- </name>
- <command>
+</name>
+<command>
imap://%HOSTIP:%IMAPPORT/%TESTNUMBER -X 'STORE 123 +Flags \Deleted' -u user:secret -: imap://%HOSTIP:%IMAPPORT/%TESTNUMBER -X CLOSE -u user:secret
</command>
</client>
diff --git a/tests/data/test816 b/tests/data/test816
index cf4702d14..b6054cacf 100644
--- a/tests/data/test816
+++ b/tests/data/test816
@@ -26,10 +26,10 @@ CUSTOMREQUEST
<server>
imap
</server>
- <name>
+<name>
IMAP STORE - delete message with confirmation (CUSTOMREQUEST)
- </name>
- <command>
+</name>
+<command>
imap://%HOSTIP:%IMAPPORT/%TESTNUMBER -X 'STORE 123 +Flags \Deleted' -u user:secret -: imap://%HOSTIP:%IMAPPORT/%TESTNUMBER -X EXPUNGE -u user:secret
</command>
</client>
diff --git a/tests/data/test817 b/tests/data/test817
index 9efa06d46..c608f65b0 100644
--- a/tests/data/test817
+++ b/tests/data/test817
@@ -19,10 +19,10 @@ CUSTOMREQUEST
<server>
imap
</server>
- <name>
+<name>
IMAP COPY message to mailbox (CUSTOMREQUEST)
- </name>
- <command>
+</name>
+<command>
imap://%HOSTIP:%IMAPPORT -u user:secret -X 'COPY 123 %TESTNUMBER'
</command>
</client>
diff --git a/tests/data/test818 b/tests/data/test818
index 95282c4e3..dd917ea39 100644
--- a/tests/data/test818
+++ b/tests/data/test818
@@ -25,10 +25,10 @@ CUSTOMREQUEST
<server>
imap
</server>
- <name>
+<name>
IMAP NOOP (CUSTOMREQUEST)
- </name>
- <command>
+</name>
+<command>
imap://%HOSTIP:%IMAPPORT -X NOOP -u user:secret
</command>
</client>
diff --git a/tests/data/test819 b/tests/data/test819
index d2f0db201..50ff22669 100644
--- a/tests/data/test819
+++ b/tests/data/test819
@@ -33,10 +33,10 @@ body
<server>
imap
</server>
- <name>
+<name>
IMAP plain authentication
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u user:secret
</command>
</client>
diff --git a/tests/data/test82 b/tests/data/test82
index 913983323..a4286ad09 100644
--- a/tests/data/test82
+++ b/tests/data/test82
@@ -31,10 +31,10 @@ proxy
<server>
http
</server>
- <name>
+<name>
HTTP with proxy requiring NTLM, but we send Basic
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --proxy-user testuser:testpass -x http://%HOSTIP:%HTTPPORT
</command>
</client>
diff --git a/tests/data/test820 b/tests/data/test820
index 8b684acad..80ac25f27 100644
--- a/tests/data/test820
+++ b/tests/data/test820
@@ -33,10 +33,10 @@ body
<server>
imap
</server>
- <name>
+<name>
IMAP login authentication
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u user:secret
</command>
</client>
diff --git a/tests/data/test821 b/tests/data/test821
index 179574bee..101c40084 100644
--- a/tests/data/test821
+++ b/tests/data/test821
@@ -36,10 +36,10 @@ imap
<features>
crypto
</features>
- <name>
+<name>
IMAP CRAM-MD5 authentication
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u user:secret
</command>
</client>
diff --git a/tests/data/test823 b/tests/data/test823
index b179a1807..18ed5fa67 100644
--- a/tests/data/test823
+++ b/tests/data/test823
@@ -14,7 +14,7 @@ RFC2831
<servercmd>
AUTH DIGEST-MD5
REPLY AUTHENTICATE + cmVhbG09ImN1cmwiLG5vbmNlPSI1MzAwZDE3YTFkNjk1YmQ0MTFlNGNkZjk2Zjk1NDhjMjNjZWQ2MTc1IixhbGdvcml0aG09bWQ1LXNlc3MscW9wPSJhdXRoIg==
-REPLY dXNlcm5hbWU9InVzZXIiLHJlYWxtPSJjdXJsIixub25jZT0iNTMwMGQxN2ExZDY5NWJkNDExZTRjZGY5NmY5NTQ4YzIzY2VkNjE3NSIsY25vbmNlPSIzNDMzMzIzMTM1MzMzMjMxMzYzMzMyMzEzNzMzMzIzMSIsbmM9IjAwMDAwMDAxIixkaWdlc3QtdXJpPSJpbWFwL2N1cmwiLHJlc3BvbnNlPTVlNzk5N2ZhZDZjMzNiZWJmZjk3OWJkY2I4ZmU3MTZiLHFvcD1hdXRo +
+REPLY dXNlcm5hbWU9InVzZXIiLHJlYWxtPSJjdXJsIixub25jZT0iNTMwMGQxN2ExZDY5NWJkNDExZTRjZGY5NmY5NTQ4YzIzY2VkNjE3NSIsY25vbmNlPSIzNDMzMzIzMTM1MzMzMjMxMzYzMzMyMzEzNzMzMzIzMSIsbmM9IjAwMDAwMDAxIixkaWdlc3QtdXJpPSJpbWFwLzEyNy4wLjAuMSIscmVzcG9uc2U9YmU2MzgyNDkzNjJkN2FhMGUzNTM4NTA3Njc1MWFiNDgscW9wPWF1dGg= + cnNwYXV0aD04MWY5MDNlYjQ4MjNhZTkyMmRiNWYwNGNiNThjY2RlYg==
REPLY A002 OK AUTHENTICATE completed
</servercmd>
<data>
@@ -39,10 +39,10 @@ imap
debug
crypto
</features>
- <name>
+<name>
IMAP DIGEST-MD5 authentication
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u user:secret
</command>
</client>
@@ -53,7 +53,7 @@ IMAP DIGEST-MD5 authentication
<protocol>
A001 CAPABILITY
A002 AUTHENTICATE DIGEST-MD5
-dXNlcm5hbWU9InVzZXIiLHJlYWxtPSJjdXJsIixub25jZT0iNTMwMGQxN2ExZDY5NWJkNDExZTRjZGY5NmY5NTQ4YzIzY2VkNjE3NSIsY25vbmNlPSIzNDMzMzIzMTM1MzMzMjMxMzYzMzMyMzEzNzMzMzIzMSIsbmM9IjAwMDAwMDAxIixkaWdlc3QtdXJpPSJpbWFwL2N1cmwiLHJlc3BvbnNlPTVlNzk5N2ZhZDZjMzNiZWJmZjk3OWJkY2I4ZmU3MTZiLHFvcD1hdXRo
+dXNlcm5hbWU9InVzZXIiLHJlYWxtPSJjdXJsIixub25jZT0iNTMwMGQxN2ExZDY5NWJkNDExZTRjZGY5NmY5NTQ4YzIzY2VkNjE3NSIsY25vbmNlPSIzNDMzMzIzMTM1MzMzMjMxMzYzMzMyMzEzNzMzMzIzMSIsbmM9IjAwMDAwMDAxIixkaWdlc3QtdXJpPSJpbWFwLzEyNy4wLjAuMSIscmVzcG9uc2U9YmU2MzgyNDkzNjJkN2FhMGUzNTM4NTA3Njc1MWFiNDgscW9wPWF1dGg=
A003 SELECT %TESTNUMBER
A004 FETCH 1 BODY[]
diff --git a/tests/data/test824 b/tests/data/test824
index 28630e480..0abda22b0 100644
--- a/tests/data/test824
+++ b/tests/data/test824
@@ -33,10 +33,10 @@ body
<server>
imap
</server>
- <name>
+<name>
IMAP OAuth 2.0 (XOAUTH2) authentication
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM
</command>
</client>
diff --git a/tests/data/test825 b/tests/data/test825
index fd4e047a3..64d57f5fe 100644
--- a/tests/data/test825
+++ b/tests/data/test825
@@ -34,10 +34,10 @@ body
<server>
imap
</server>
- <name>
+<name>
IMAP plain authentication with initial response
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u user:secret
</command>
</client>
diff --git a/tests/data/test826 b/tests/data/test826
index 19247f0ec..b3b0dc335 100644
--- a/tests/data/test826
+++ b/tests/data/test826
@@ -34,10 +34,10 @@ body
<server>
imap
</server>
- <name>
+<name>
IMAP login authentication with initial response
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u user:secret
</command>
</client>
diff --git a/tests/data/test828 b/tests/data/test828
index 40f2b1252..a3548464e 100644
--- a/tests/data/test828
+++ b/tests/data/test828
@@ -34,10 +34,10 @@ body
<server>
imap
</server>
- <name>
+<name>
IMAP OAuth 2.0 (XOAUTH2) authentication with initial response
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM
</command>
</client>
diff --git a/tests/data/test829 b/tests/data/test829
index 46ff4e165..b9f7da03c 100644
--- a/tests/data/test829
+++ b/tests/data/test829
@@ -11,10 +11,10 @@ CRLF-in-URL
<server>
imap
</server>
- <name>
+<name>
IMAP with URL-encoded CR LF in the URL
- </name>
- <command>
+</name>
+<command>
imap://%HOSTIP:%IMAPPORT/%0d%0a/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test83 b/tests/data/test83
index dffdb92a5..51a3e3b68 100644
--- a/tests/data/test83
+++ b/tests/data/test83
@@ -46,10 +46,10 @@ contents
http
http-proxy
</server>
- <name>
+<name>
HTTP over proxy-tunnel with site authentication
- </name>
- <command>
+</name>
+<command>
http://test.%TESTNUMBER:%HTTPPORT/we/want/that/page/%TESTNUMBER -p -x %HOSTIP:%PROXYPORT --user 'iam:my:;self'
</command>
<features>
diff --git a/tests/data/test830 b/tests/data/test830
index d02ed6b08..64172f1b5 100644
--- a/tests/data/test830
+++ b/tests/data/test830
@@ -29,10 +29,10 @@ imap
<features>
crypto
</features>
- <name>
+<name>
IMAP CRAM-MD5 graceful cancellation
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u user:secret
</command>
</client>
diff --git a/tests/data/test831 b/tests/data/test831
index 99e0fa4b2..382432368 100644
--- a/tests/data/test831
+++ b/tests/data/test831
@@ -31,16 +31,16 @@ NTLM
SSL
!SSPI
</features>
- <name>
+<name>
IMAP NTLM graceful cancellation
- </name>
+</name>
<setenv>
# we force our own host name, in order to make the test machine independent
CURL_GETHOSTNAME=curlhost
# we try to use the LD_PRELOAD hack, if not a debug build
LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
</setenv>
- <command>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u testuser:testpass
</command>
<precheck>
diff --git a/tests/data/test832 b/tests/data/test832
index dc15aa716..6001c1d45 100644
--- a/tests/data/test832
+++ b/tests/data/test832
@@ -31,10 +31,10 @@ imap
debug
crypto
</features>
- <name>
+<name>
IMAP DIGEST-MD5 graceful cancellation
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u user:secret
</command>
</client>
diff --git a/tests/data/test833 b/tests/data/test833
index 5784c4164..f958df4cb 100644
--- a/tests/data/test833
+++ b/tests/data/test833
@@ -40,10 +40,10 @@ imap
<features>
crypto
</features>
- <name>
+<name>
IMAP CRAM-MD5 authentication with SASL downgrade
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u user:secret
</command>
</client>
diff --git a/tests/data/test834 b/tests/data/test834
index f99d9dd5d..e142ca219 100644
--- a/tests/data/test834
+++ b/tests/data/test834
@@ -42,16 +42,16 @@ NTLM
SSL
!SSPI
</features>
- <name>
+<name>
IMAP NTLM authentication with SASL downgrade
- </name>
+</name>
<setenv>
# we force our own host name, in order to make the test machine independent
CURL_GETHOSTNAME=curlhost
# we try to use the LD_PRELOAD hack, if not a debug build
LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
</setenv>
- <command>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u user:secret
</command>
<precheck>
diff --git a/tests/data/test835 b/tests/data/test835
index fd6badde1..ee6ed31d1 100644
--- a/tests/data/test835
+++ b/tests/data/test835
@@ -42,10 +42,10 @@ imap
debug
crypto
</features>
- <name>
+<name>
IMAP DIGEST-MD5 authentication with SASL downgrade
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u user:secret
</command>
</client>
diff --git a/tests/data/test836 b/tests/data/test836
index 36c5166e5..821d5392b 100644
--- a/tests/data/test836
+++ b/tests/data/test836
@@ -4,7 +4,7 @@
IMAP
Clear Text
FETCH
-connection re-use
+connection reuse
</keywords>
</info>
@@ -32,10 +32,10 @@ body
<server>
imap
</server>
- <name>
+<name>
IMAP multiple connection authentication
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u user.one:secret -: 'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;UID=2' -u user.two:secret
</command>
</client>
diff --git a/tests/data/test837 b/tests/data/test837
index 2e46be622..74b575a6e 100644
--- a/tests/data/test837
+++ b/tests/data/test837
@@ -33,10 +33,10 @@ body
<server>
imap
</server>
- <name>
+<name>
IMAP external authentication
- </name>
- <command>
+</name>
+<command>
'imap://user;AUTH=EXTERNAL@%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1'
</command>
</client>
diff --git a/tests/data/test838 b/tests/data/test838
index 11ed7aaf0..c6081fb63 100644
--- a/tests/data/test838
+++ b/tests/data/test838
@@ -33,10 +33,10 @@ body
<server>
imap
</server>
- <name>
+<name>
IMAP external authentication without credentials
- </name>
- <command>
+</name>
+<command>
'imap://;AUTH=EXTERNAL@%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1'
</command>
</client>
diff --git a/tests/data/test839 b/tests/data/test839
index 8240bf397..9f443b42a 100644
--- a/tests/data/test839
+++ b/tests/data/test839
@@ -34,10 +34,10 @@ body
<server>
imap
</server>
- <name>
+<name>
IMAP external authentication with initial response
- </name>
- <command>
+</name>
+<command>
'imap://user;AUTH=EXTERNAL@%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1'
</command>
</client>
diff --git a/tests/data/test84 b/tests/data/test84
index cc7626294..3b842eaff 100644
--- a/tests/data/test84
+++ b/tests/data/test84
@@ -27,10 +27,10 @@ contents
<server>
http
</server>
- <name>
+<name>
HTTP over proxy with site authentication
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/we/want/that/page/%TESTNUMBER -x %HOSTIP:%HTTPPORT --user iam:myself
</command>
<features>
diff --git a/tests/data/test840 b/tests/data/test840
index 551005359..48fd32a34 100644
--- a/tests/data/test840
+++ b/tests/data/test840
@@ -34,10 +34,10 @@ body
<server>
imap
</server>
- <name>
+<name>
IMAP external authentication with initial response without credentials
- </name>
- <command>
+</name>
+<command>
'imap://;AUTH=EXTERNAL@%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1'
</command>
</client>
diff --git a/tests/data/test841 b/tests/data/test841
index c5258c920..cc1d075fb 100644
--- a/tests/data/test841
+++ b/tests/data/test841
@@ -29,10 +29,10 @@ body
<server>
imap
</server>
- <name>
+<name>
IMAP custom request doesn't check continuation data
- </name>
- <command>
+</name>
+<command>
imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/ -u user:secret -X 'FETCH 123 BODY[1]'
</command>
</client>
diff --git a/tests/data/test842 b/tests/data/test842
index 42148d03e..1cea6e39d 100644
--- a/tests/data/test842
+++ b/tests/data/test842
@@ -34,10 +34,10 @@ body
<server>
imap
</server>
- <name>
+<name>
IMAP OAuth 2.0 (OAUTHBEARER) authentication
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM
</command>
# The protocol section doesn't support ways of specifying the raw data in the
diff --git a/tests/data/test843 b/tests/data/test843
index dcf5c1be4..774c4c5e7 100644
--- a/tests/data/test843
+++ b/tests/data/test843
@@ -35,10 +35,10 @@ body
<server>
imap
</server>
- <name>
+<name>
IMAP OAuth 2.0 (OAUTHBEARER) authentication with initial response
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM
</command>
</client>
diff --git a/tests/data/test844 b/tests/data/test844
index 83dff8e59..fd65d750c 100644
--- a/tests/data/test844
+++ b/tests/data/test844
@@ -25,10 +25,10 @@ REPLY %b64[n,a=user,%01host=127.0.0.1%01port=%IMAPPORT%01auth=Bearer mF_9.B5f-4.
<server>
imap
</server>
- <name>
+<name>
IMAP OAuth 2.0 (OAUTHBEARER) failure as continuation
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM
</command>
</client>
diff --git a/tests/data/test845 b/tests/data/test845
index d622f0cdc..b03cd315c 100644
--- a/tests/data/test845
+++ b/tests/data/test845
@@ -27,10 +27,10 @@ REPLY AQ== A002 NO Authentication failed
<server>
imap
</server>
- <name>
+<name>
IMAP OAuth 2.0 (OAUTHBEARER) failure as continuation with initial response
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM
</command>
</client>
diff --git a/tests/data/test846 b/tests/data/test846
index b04561b89..49c391ffe 100644
--- a/tests/data/test846
+++ b/tests/data/test846
@@ -29,10 +29,10 @@ body
<server>
imap
</server>
- <name>
+<name>
IMAP PREAUTH response
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u notused:still-provided
</command>
</client>
diff --git a/tests/data/test847 b/tests/data/test847
index 5a68f1c6e..6972f45fb 100644
--- a/tests/data/test847
+++ b/tests/data/test847
@@ -27,10 +27,10 @@ body
<server>
imap
</server>
- <name>
+<name>
IMAP FETCH message
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;UID=1' -u '"user:sec"ret{'
</command>
</client>
diff --git a/tests/data/test848 b/tests/data/test848
index 27efe8ae0..a0d5a29e7 100644
--- a/tests/data/test848
+++ b/tests/data/test848
@@ -33,10 +33,10 @@ body
<server>
imap
</server>
- <name>
+<name>
IMAP plain authentication with alternative authorization identity
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u user:secret --sasl-authzid shared-mailbox
</command>
</client>
diff --git a/tests/data/test849 b/tests/data/test849
index 20fca6b94..d0dcb45e4 100644
--- a/tests/data/test849
+++ b/tests/data/test849
@@ -24,10 +24,10 @@ REPLY dXJzZWwAa3VydAB4aXBqM3BsbXE= A002 NO Not authorized
<server>
imap
</server>
- <name>
+<name>
IMAP plain authentication with alternative authorization identity (Not authorized)
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u kurt:xipj3plmq --sasl-authzid ursel
</command>
</client>
diff --git a/tests/data/test85 b/tests/data/test85
index afddd9ca6..b70dbb818 100644
--- a/tests/data/test85
+++ b/tests/data/test85
@@ -30,10 +30,10 @@ contents
<server>
http
</server>
- <name>
+<name>
HTTP over proxy with site and proxy authentication
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/we/want/that/page/%TESTNUMBER -x %HOSTIP:%HTTPPORT --user iam:myself --proxy-user testing:this
</command>
<features>
diff --git a/tests/data/test850 b/tests/data/test850
index 5b6a20f1c..f0a9f17d6 100644
--- a/tests/data/test850
+++ b/tests/data/test850
@@ -27,10 +27,10 @@ body
<server>
pop3
</server>
- <name>
+<name>
POP3 RETR message
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user:secret
</command>
</client>
diff --git a/tests/data/test851 b/tests/data/test851
index e47517f36..3f24c14b3 100644
--- a/tests/data/test851
+++ b/tests/data/test851
@@ -22,10 +22,10 @@ REPLY LIST +OK %TESTNUMBER 100\r\n.
<server>
pop3
</server>
- <name>
+<name>
POP3 LIST one message
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -l -u user:secret
</command>
</client>
diff --git a/tests/data/test852 b/tests/data/test852
index 2234087ee..ed433862b 100644
--- a/tests/data/test852
+++ b/tests/data/test852
@@ -22,10 +22,10 @@ REPLY LIST -ERR no such message
<server>
pop3
</server>
- <name>
+<name>
POP3 LIST invalid message
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -l -u user:secret
</command>
</client>
diff --git a/tests/data/test853 b/tests/data/test853
index a3b968809..de5236420 100644
--- a/tests/data/test853
+++ b/tests/data/test853
@@ -4,6 +4,7 @@
POP3
Clear Text
LIST
+SLOWDOWN
</keywords>
</info>
@@ -30,10 +31,10 @@ SLOWDOWN
<server>
pop3
</server>
- <name>
+<name>
POP3 LIST messages from *SLOW* server
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/ -u user:secret
</command>
</client>
diff --git a/tests/data/test854 b/tests/data/test854
index a8a18b689..acb32b01f 100644
--- a/tests/data/test854
+++ b/tests/data/test854
@@ -23,10 +23,10 @@ REPLY LIST +OK but no messages\r\n.
<server>
pop3
</server>
- <name>
+<name>
POP3 LIST no messages available
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/ -u user:secret
</command>
</client>
diff --git a/tests/data/test855 b/tests/data/test855
index 0ab1ab397..c7c10be65 100644
--- a/tests/data/test855
+++ b/tests/data/test855
@@ -22,10 +22,10 @@ REPLY RETR -ERR no such message
<server>
pop3
</server>
- <name>
+<name>
POP3 RETR invalid message
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user:secret
</command>
</client>
diff --git a/tests/data/test856 b/tests/data/test856
index efff9d0aa..c107612de 100644
--- a/tests/data/test856
+++ b/tests/data/test856
@@ -21,10 +21,10 @@ REPLY PASS -ERR Login failure
<server>
pop3
</server>
- <name>
+<name>
POP3 invalid login
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user:wrong
</command>
</client>
diff --git a/tests/data/test857 b/tests/data/test857
index 15cc4c805..5868a2d57 100644
--- a/tests/data/test857
+++ b/tests/data/test857
@@ -38,10 +38,10 @@ To: fake@nowhere
<server>
pop3
</server>
- <name>
+<name>
POP3 RETR message with dot-prefixed line
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user:secret
</command>
</client>
diff --git a/tests/data/test858 b/tests/data/test858
index c4af2f7dd..f119100ec 100644
--- a/tests/data/test858
+++ b/tests/data/test858
@@ -19,10 +19,10 @@ CUSTOMREQUEST
<server>
pop3
</server>
- <name>
+<name>
POP3 DELE message (CUSTOMREQUEST)
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user:secret -X DELE -I
</command>
</client>
diff --git a/tests/data/test859 b/tests/data/test859
index 3d2e1c766..11ffc068e 100644
--- a/tests/data/test859
+++ b/tests/data/test859
@@ -19,10 +19,10 @@ CUSTOMREQUEST
<server>
pop3
</server>
- <name>
+<name>
POP3 STAT (CUSTOMREQUEST)
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT -u user:secret -X STAT -I
</command>
</client>
diff --git a/tests/data/test86 b/tests/data/test86
index 5d4399c71..ba9c90d7a 100644
--- a/tests/data/test86
+++ b/tests/data/test86
@@ -53,11 +53,11 @@ crap data
<server>
http
</server>
- <name>
+<name>
HTTP, urlglob []-retrieval and -o #[num] usage
- </name>
+</name>
<command option="no-output">
-"http://%HOSTIP:%HTTPPORT/[%TESTNUMBER0001-%TESTNUMBER0003]" -o "log/dumpit#1.dump"
+"http://%HOSTIP:%HTTPPORT/[%TESTNUMBER0001-%TESTNUMBER0003]" -o "%LOGDIR/dumpit#1.dump"
</command>
</client>
@@ -83,7 +83,7 @@ Accept: */*
</protocol>
# we check the second file
-<file name="log/dumpit%TESTNUMBER0002.dump">
+<file name="%LOGDIR/dumpit%TESTNUMBER0002.dump">
HTTP/1.0 200 OK
Content-Type: text/html
Funny-head: swsclose
diff --git a/tests/data/test860 b/tests/data/test860
index 26809bf34..5e1f3f611 100644
--- a/tests/data/test860
+++ b/tests/data/test860
@@ -19,10 +19,10 @@ CUSTOMREQUEST
<server>
pop3
</server>
- <name>
+<name>
POP3 NOOP (CUSTOMREQUEST)
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT -u user:secret -X NOOP -I
</command>
</client>
diff --git a/tests/data/test861 b/tests/data/test861
index 4cc398742..65b44c1cc 100644
--- a/tests/data/test861
+++ b/tests/data/test861
@@ -30,10 +30,10 @@ CAPA UIDL USER
<server>
pop3
</server>
- <name>
+<name>
POP3 UIDL (CUSTOMREQUEST)
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT -u user:secret -X UIDL
</command>
</client>
diff --git a/tests/data/test862 b/tests/data/test862
index 47b37bba7..ab0feaa48 100644
--- a/tests/data/test862
+++ b/tests/data/test862
@@ -28,10 +28,10 @@ To: fake@nowhere
<server>
pop3
</server>
- <name>
+<name>
POP3 retrieve message header (CUSTOMREQUEST)
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT -u user:secret -X 'TOP %TESTNUMBER 0'
</command>
</client>
diff --git a/tests/data/test863 b/tests/data/test863
index 940045f69..f7b288baa 100644
--- a/tests/data/test863
+++ b/tests/data/test863
@@ -19,10 +19,10 @@ CUSTOMREQUEST
<server>
pop3
</server>
- <name>
+<name>
POP3 RSET (CUSTOMREQUEST)
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT -u user:secret -X RSET -I
</command>
</client>
diff --git a/tests/data/test864 b/tests/data/test864
index 9f2ba125b..4f40a52ab 100644
--- a/tests/data/test864
+++ b/tests/data/test864
@@ -33,10 +33,10 @@ pop3
<features>
crypto
</features>
- <name>
+<name>
POP3 APOP authentication
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user:secret
</command>
</client>
diff --git a/tests/data/test865 b/tests/data/test865
index 9d931b53a..59bf1c154 100644
--- a/tests/data/test865
+++ b/tests/data/test865
@@ -35,10 +35,10 @@ body
<server>
pop3
</server>
- <name>
+<name>
POP3 plain authentication
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user:secret
</command>
</client>
diff --git a/tests/data/test866 b/tests/data/test866
index 72e5c0339..adab0d896 100644
--- a/tests/data/test866
+++ b/tests/data/test866
@@ -35,10 +35,10 @@ body
<server>
pop3
</server>
- <name>
+<name>
POP3 login authentication
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user:secret
</command>
</client>
diff --git a/tests/data/test867 b/tests/data/test867
index 5d59aa97c..5be5ad6fb 100644
--- a/tests/data/test867
+++ b/tests/data/test867
@@ -38,10 +38,10 @@ pop3
<features>
crypto
</features>
- <name>
+<name>
POP3 CRAM-MD5 authentication
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user:secret
</command>
</client>
diff --git a/tests/data/test869 b/tests/data/test869
index 96d8c837a..59900df08 100644
--- a/tests/data/test869
+++ b/tests/data/test869
@@ -16,7 +16,7 @@ RFC5034
<servercmd>
AUTH DIGEST-MD5
REPLY AUTH + cmVhbG09ImN1cmwiLG5vbmNlPSI1MzAwZDE3YTFkNjk1YmQ0MTFlNGNkZjk2Zjk1NDhjMjNjZWQ2MTc1IixhbGdvcml0aG09bWQ1LXNlc3MscW9wPSJhdXRoIg==
-REPLY dXNlcm5hbWU9InVzZXIiLHJlYWxtPSJjdXJsIixub25jZT0iNTMwMGQxN2ExZDY5NWJkNDExZTRjZGY5NmY5NTQ4YzIzY2VkNjE3NSIsY25vbmNlPSIzNDMzMzIzMTM1MzMzMjMxMzYzMzMyMzEzNzMzMzIzMSIsbmM9IjAwMDAwMDAxIixkaWdlc3QtdXJpPSJwb3AvY3VybCIscmVzcG9uc2U9YzNhMGFiZTc5NDYyNTIyNGY5Njg3YTYzMTc3ZmRhNWIscW9wPWF1dGg= +
+REPLY dXNlcm5hbWU9InVzZXIiLHJlYWxtPSJjdXJsIixub25jZT0iNTMwMGQxN2ExZDY5NWJkNDExZTRjZGY5NmY5NTQ4YzIzY2VkNjE3NSIsY25vbmNlPSIzNDMzMzIzMTM1MzMzMjMxMzYzMzMyMzEzNzMzMzIzMSIsbmM9IjAwMDAwMDAxIixkaWdlc3QtdXJpPSJwb3AvMTI3LjAuMC4xIixyZXNwb25zZT0xODMxNTU0OGM3ZjNhMzdlNzE2ZmE4ZTkwZGZhYjliNixxb3A9YXV0aA== + cnNwYXV0aD1mZWNiMzZiNzA4NmUwYjk1ZDkwNjQ1OWVmYThjYzI5ZQ==
REPLY +OK Login successful
</servercmd>
<data>
@@ -41,10 +41,10 @@ pop3
debug
crypto
</features>
- <name>
+<name>
POP3 DIGEST-MD5 authentication
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user:secret
</command>
</client>
@@ -55,7 +55,7 @@ pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user:secret
<protocol>
CAPA
AUTH DIGEST-MD5
-dXNlcm5hbWU9InVzZXIiLHJlYWxtPSJjdXJsIixub25jZT0iNTMwMGQxN2ExZDY5NWJkNDExZTRjZGY5NmY5NTQ4YzIzY2VkNjE3NSIsY25vbmNlPSIzNDMzMzIzMTM1MzMzMjMxMzYzMzMyMzEzNzMzMzIzMSIsbmM9IjAwMDAwMDAxIixkaWdlc3QtdXJpPSJwb3AvY3VybCIscmVzcG9uc2U9YzNhMGFiZTc5NDYyNTIyNGY5Njg3YTYzMTc3ZmRhNWIscW9wPWF1dGg=
+dXNlcm5hbWU9InVzZXIiLHJlYWxtPSJjdXJsIixub25jZT0iNTMwMGQxN2ExZDY5NWJkNDExZTRjZGY5NmY5NTQ4YzIzY2VkNjE3NSIsY25vbmNlPSIzNDMzMzIzMTM1MzMzMjMxMzYzMzMyMzEzNzMzMzIzMSIsbmM9IjAwMDAwMDAxIixkaWdlc3QtdXJpPSJwb3AvMTI3LjAuMC4xIixyZXNwb25zZT0xODMxNTU0OGM3ZjNhMzdlNzE2ZmE4ZTkwZGZhYjliNixxb3A9YXV0aA==
RETR %TESTNUMBER
QUIT
diff --git a/tests/data/test87 b/tests/data/test87
index ff702dc47..f5d689d45 100644
--- a/tests/data/test87
+++ b/tests/data/test87
@@ -36,11 +36,11 @@ http
<features>
http
</features>
- <name>
+<name>
urlglob with out of range -o #[num] usage
- </name>
+</name>
<command option="no-output">
-"http://%HOSTIP:%HTTPPORT/[%TESTNUMBER0001-%TESTNUMBER0002]" -o "log/dumpit%TESTNUMBER-#2.dump"
+"http://%HOSTIP:%HTTPPORT/[%TESTNUMBER0001-%TESTNUMBER0002]" -o "%LOGDIR/dumpit%TESTNUMBER-#2.dump"
</command>
</client>
@@ -50,7 +50,7 @@ urlglob with out of range -o #[num] usage
# survives
#
<verify>
-<file name="log/dumpit%TESTNUMBER-#2.dump">
+<file name="%LOGDIR/dumpit%TESTNUMBER-#2.dump">
HTTP/1.1 200 OK
Funny-head: yesyes
Content-Length: 16
diff --git a/tests/data/test870 b/tests/data/test870
index 30f3586c8..b1329da9a 100644
--- a/tests/data/test870
+++ b/tests/data/test870
@@ -35,10 +35,10 @@ body
<server>
pop3
</server>
- <name>
+<name>
POP3 OAuth 2.0 (XOAUTH2) authentication
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user --oauth2-bearer mF_9.B5f-4.1JqM
</command>
</client>
diff --git a/tests/data/test871 b/tests/data/test871
index 00adefd38..38335177d 100644
--- a/tests/data/test871
+++ b/tests/data/test871
@@ -35,10 +35,10 @@ body
<server>
pop3
</server>
- <name>
+<name>
POP3 plain authentication with initial response
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user:secret --sasl-ir
</command>
</client>
diff --git a/tests/data/test872 b/tests/data/test872
index 19cd49a97..f6c597426 100644
--- a/tests/data/test872
+++ b/tests/data/test872
@@ -35,10 +35,10 @@ body
<server>
pop3
</server>
- <name>
+<name>
POP3 login authentication with initial response
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user:secret --sasl-ir
</command>
</client>
diff --git a/tests/data/test874 b/tests/data/test874
index 1f19c5c0f..810bc49d1 100644
--- a/tests/data/test874
+++ b/tests/data/test874
@@ -35,10 +35,10 @@ body
<server>
pop3
</server>
- <name>
+<name>
POP3 OAuth 2.0 (XOAUTH2) authentication with initial response
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user --oauth2-bearer mF_9.B5f-4.1JqM --sasl-ir
</command>
</client>
diff --git a/tests/data/test875 b/tests/data/test875
index 8850fab05..88dfbc2d0 100644
--- a/tests/data/test875
+++ b/tests/data/test875
@@ -11,10 +11,10 @@ CRLF-in-URL
<server>
pop3
</server>
- <name>
+<name>
POP3 with URL-encoded CR LF in the URL
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%0d%0a/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test876 b/tests/data/test876
index ae5ea07a1..a34b97a9d 100644
--- a/tests/data/test876
+++ b/tests/data/test876
@@ -30,10 +30,10 @@ pop3
<features>
crypto
</features>
- <name>
+<name>
POP3 CRAM-MD5 graceful cancellation
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user:secret
</command>
</client>
diff --git a/tests/data/test877 b/tests/data/test877
index 65070d099..250237062 100644
--- a/tests/data/test877
+++ b/tests/data/test877
@@ -32,16 +32,16 @@ NTLM
SSL
!SSPI
</features>
- <name>
+<name>
POP3 NTLM graceful cancellation
- </name>
+</name>
<setenv>
# we force our own host name, in order to make the test machine independent
CURL_GETHOSTNAME=curlhost
# we try to use the LD_PRELOAD hack, if not a debug build
LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
</setenv>
- <command>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u testuser:testpass
</command>
<precheck>
diff --git a/tests/data/test878 b/tests/data/test878
index 28bd44a7b..58c2e3007 100644
--- a/tests/data/test878
+++ b/tests/data/test878
@@ -32,10 +32,10 @@ pop3
debug
crypto
</features>
- <name>
+<name>
POP3 DIGEST-MD5 graceful cancellation
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user:secret
</command>
</client>
diff --git a/tests/data/test879 b/tests/data/test879
index 1b7ca564b..c7b99efb8 100644
--- a/tests/data/test879
+++ b/tests/data/test879
@@ -42,10 +42,10 @@ pop3
<features>
crypto
</features>
- <name>
+<name>
POP3 CRAM-MD5 authentication with SASL downgrade
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user:secret
</command>
</client>
diff --git a/tests/data/test88 b/tests/data/test88
index b7c620762..e3f68c0ee 100644
--- a/tests/data/test88
+++ b/tests/data/test88
@@ -59,13 +59,13 @@ http
!SSPI
crypto
</features>
- <name>
+<name>
HTTP PUT with Digest authorization
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T log/put%TESTNUMBER -u testuser:testpass --digest
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -T %LOGDIR/put%TESTNUMBER -u testuser:testpass --digest
</command>
-<file name="log/put%TESTNUMBER">
+<file name="%LOGDIR/put%TESTNUMBER">
This is data we upload with PUT
a second line
line three
@@ -88,7 +88,6 @@ Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145"
User-Agent: curl/%VERSION
Accept: */*
Content-Length: 85
-Expect: 100-continue
This is data we upload with PUT
a second line
diff --git a/tests/data/test880 b/tests/data/test880
index 9dc00c0f6..dfa2e688c 100644
--- a/tests/data/test880
+++ b/tests/data/test880
@@ -44,16 +44,16 @@ NTLM
SSL
!SSPI
</features>
- <name>
+<name>
POP3 NTLM authentication with SASL downgrade
- </name>
+</name>
<setenv>
# we force our own host name, in order to make the test machine independent
CURL_GETHOSTNAME=curlhost
# we try to use the LD_PRELOAD hack, if not a debug build
LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
</setenv>
- <command>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user:secret
</command>
<precheck>
diff --git a/tests/data/test881 b/tests/data/test881
index 69e31a431..7cbdf64ba 100644
--- a/tests/data/test881
+++ b/tests/data/test881
@@ -44,10 +44,10 @@ pop3
debug
crypto
</features>
- <name>
+<name>
POP3 DIGEST-MD5 authentication with SASL downgrade
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user:secret
</command>
</client>
diff --git a/tests/data/test882 b/tests/data/test882
index 77a57c89c..b4fa46534 100644
--- a/tests/data/test882
+++ b/tests/data/test882
@@ -4,7 +4,7 @@
POP3
Clear Text
RETR
-connection re-use
+connection reuse
</keywords>
</info>
@@ -31,10 +31,10 @@ body
<server>
pop3
</server>
- <name>
+<name>
POP3 multiple connection authentication
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER001 -u user.one:secret -: pop3://%HOSTIP:%POP3PORT/%TESTNUMBER002 -u user.two:secret
</command>
</client>
diff --git a/tests/data/test883 b/tests/data/test883
index 6d5900c20..943d27824 100644
--- a/tests/data/test883
+++ b/tests/data/test883
@@ -35,10 +35,10 @@ body
<server>
pop3
</server>
- <name>
+<name>
POP3 external authentication
- </name>
- <command>
+</name>
+<command>
'pop3://user;AUTH=EXTERNAL@%HOSTIP:%POP3PORT/%TESTNUMBER'
</command>
</client>
diff --git a/tests/data/test884 b/tests/data/test884
index f0744bf28..611649c2d 100644
--- a/tests/data/test884
+++ b/tests/data/test884
@@ -35,10 +35,10 @@ body
<server>
pop3
</server>
- <name>
+<name>
POP3 external authentication without credentials
- </name>
- <command>
+</name>
+<command>
'pop3://;AUTH=EXTERNAL@%HOSTIP:%POP3PORT/%TESTNUMBER'
</command>
</client>
diff --git a/tests/data/test885 b/tests/data/test885
index 7131f16b1..6d2383874 100644
--- a/tests/data/test885
+++ b/tests/data/test885
@@ -35,10 +35,10 @@ body
<server>
pop3
</server>
- <name>
+<name>
POP3 external authentication with initial response
- </name>
- <command>
+</name>
+<command>
'pop3://user;AUTH=EXTERNAL@%HOSTIP:%POP3PORT/%TESTNUMBER' --sasl-ir
</command>
</client>
diff --git a/tests/data/test886 b/tests/data/test886
index f777abbae..e926fe21a 100644
--- a/tests/data/test886
+++ b/tests/data/test886
@@ -35,10 +35,10 @@ body
<server>
pop3
</server>
- <name>
+<name>
POP3 external authentication with initial response without credentials
- </name>
- <command>
+</name>
+<command>
'pop3://;AUTH=EXTERNAL@%HOSTIP:%POP3PORT/%TESTNUMBER' --sasl-ir
</command>
</client>
diff --git a/tests/data/test887 b/tests/data/test887
index 2d0f535df..ada1ce1a6 100644
--- a/tests/data/test887
+++ b/tests/data/test887
@@ -36,10 +36,10 @@ body
<server>
pop3
</server>
- <name>
+<name>
POP3 OAuth 2.0 (OAUTHBEARER) authentication
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user --oauth2-bearer mF_9.B5f-4.1JqM
</command>
</client>
diff --git a/tests/data/test888 b/tests/data/test888
index b35b9d61c..289f8137e 100644
--- a/tests/data/test888
+++ b/tests/data/test888
@@ -36,10 +36,10 @@ body
<server>
pop3
</server>
- <name>
+<name>
POP3 OAuth 2.0 (OAUTHBEARER) authentication with initial response
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user --oauth2-bearer mF_9.B5f-4.1JqM --sasl-ir
</command>
</client>
diff --git a/tests/data/test889 b/tests/data/test889
index 155268b98..5abba0e4e 100644
--- a/tests/data/test889
+++ b/tests/data/test889
@@ -28,10 +28,10 @@ REPLY AQ== -ERR Authentication failed
<server>
pop3
</server>
- <name>
+<name>
POP3 OAuth 2.0 (OAUTHBEARER) failure as continuation
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user --oauth2-bearer mF_9.B5f-4.1JqM
</command>
</client>
diff --git a/tests/data/test890 b/tests/data/test890
index e625fcac1..2c396143a 100644
--- a/tests/data/test890
+++ b/tests/data/test890
@@ -28,10 +28,10 @@ REPLY AQ== -ERR Authentication failed
<server>
pop3
</server>
- <name>
+<name>
POP3 OAuth 2.0 (OAUTHBEARER) failure as continuation with initial response
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user --oauth2-bearer mF_9.B5f-4.1JqM --sasl-ir
</command>
</client>
diff --git a/tests/data/test891 b/tests/data/test891
index b2496f816..f022db96a 100644
--- a/tests/data/test891
+++ b/tests/data/test891
@@ -23,10 +23,10 @@ pop3
<features>
crypto
</features>
- <name>
+<name>
POP3 with short authentication response
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user:secret
</command>
</client>
diff --git a/tests/data/test892 b/tests/data/test892
index 5a6a7fd7c..c77b35da8 100644
--- a/tests/data/test892
+++ b/tests/data/test892
@@ -35,10 +35,10 @@ body
<server>
pop3
</server>
- <name>
+<name>
POP3 plain authentication with alternative authorization identity
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user:secret --sasl-authzid shared-mailbox
</command>
</client>
diff --git a/tests/data/test893 b/tests/data/test893
index ca68dd042..dacd1bc86 100644
--- a/tests/data/test893
+++ b/tests/data/test893
@@ -26,10 +26,10 @@ REPLY dXJzZWwAa3VydAB4aXBqM3BsbXE= -ERR Not authorized
<server>
pop3
</server>
- <name>
+<name>
POP3 plain authentication with alternative authorization identity (Not authorized)
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u kurt:xipj3plmq --sasl-authzid ursel
</command>
</client>
diff --git a/tests/data/test894 b/tests/data/test894
index f9866580b..5582066a6 100644
--- a/tests/data/test894
+++ b/tests/data/test894
@@ -18,10 +18,10 @@ RETR
<server>
pop3
</server>
- <name>
+<name>
POP3 with CR in username
- </name>
- <command>
+</name>
+<command>
pop3://user%0dFRIGGING_cmd:secret@%HOSTIP:%POP3PORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test895 b/tests/data/test895
index 520e09410..dbf17fdc4 100644
--- a/tests/data/test895
+++ b/tests/data/test895
@@ -28,10 +28,10 @@ body
<server>
imap
</server>
- <name>
+<name>
IMAP with --login-options 'AUTH=*'
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=1' -u '"user:sec"ret{' --login-options 'AUTH=*'
</command>
</client>
diff --git a/tests/data/test896 b/tests/data/test896
index c972906a4..f9e0ff701 100644
--- a/tests/data/test896
+++ b/tests/data/test896
@@ -19,10 +19,10 @@ FETCH
<server>
imap
</server>
- <name>
+<name>
IMAP with --login-options 'AUTH=dummy' (failing)
- </name>
- <command>
+</name>
+<command>
'imap://%HOSTIP:%IMAPPORT/895/;MAILINDEX=1' -u '"user:sec"ret{' --login-options 'AUTH=dummy'
</command>
</client>
diff --git a/tests/data/test897 b/tests/data/test897
index 1a537ea60..fe7e1e70a 100644
--- a/tests/data/test897
+++ b/tests/data/test897
@@ -27,11 +27,11 @@ POSTFETCH extra stuff sent in the envelope after the body
<server>
imap
</server>
- <name>
+<name>
IMAP and envelope meta data after body transfer
- </name>
- <command>
-'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=123/;SECTION=1' -u user:secret -D log/head-%TESTNUMBER
+</name>
+<command>
+'imap://%HOSTIP:%IMAPPORT/%TESTNUMBER/;MAILINDEX=123/;SECTION=1' -u user:secret -D %LOGDIR/head-%TESTNUMBER
</command>
</client>
@@ -45,7 +45,7 @@ A003 SELECT %TESTNUMBER
A004 FETCH 123 BODY[1]
A005 LOGOUT
</protocol>
-<file name="log/head-%TESTNUMBER">
+<file name="%LOGDIR/head-%TESTNUMBER">
_ _ ____ _
___| | | | _ \| |
/ __| | | | |_) | |
diff --git a/tests/data/test898 b/tests/data/test898
index 33bcb2912..c6dba52d6 100644
--- a/tests/data/test898
+++ b/tests/data/test898
@@ -63,10 +63,10 @@ proxy
<server>
http
</server>
- <name>
+<name>
HTTP with custom auth and cookies redirected to HTTP on a diff port
- </name>
- <command>
+</name>
+<command>
-x http://%HOSTIP:%HTTPPORT http://firsthost.com -L -H "Authorization: Basic am9lOnNlY3JldA==" -H "Cookie: userpwd=am9lOnNlY3JldA=="
</command>
</client>
diff --git a/tests/data/test899 b/tests/data/test899
new file mode 100644
index 000000000..d1f1936fc
--- /dev/null
+++ b/tests/data/test899
@@ -0,0 +1,64 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+Basic
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data crlf="yes" nocheck="yes">
+HTTP/1.1 302 go go go
+Content-Length: 8
+Location: http://user:pass@%HOSTIP:%HTTPPORT/basic-auth/user/%TESTNUMBER0002
+Content-Type: text/html
+Funny-head: yesyes
+
+notreal
+</data>
+<data2 crlf="yes">
+HTTP/1.1 200 OK
+Content-Length: 6
+Content-Type: text/html
+Funny-head: yesyes
+
+final
+</data2>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+URL with credentials redirects to URL with different credentials
+</name>
+<command>
+http://first:secret@%HOSTIP:%HTTPPORT/%TESTNUMBER -L
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Authorization: Basic Zmlyc3Q6c2VjcmV0
+User-Agent: curl/%VERSION
+Accept: */*
+
+GET /basic-auth/user/%TESTNUMBER0002 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Authorization: Basic dXNlcjpwYXNz
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test9 b/tests/data/test9
index fc53b7043..90b146e75 100644
--- a/tests/data/test9
+++ b/tests/data/test9
@@ -26,14 +26,14 @@ Mime
<server>
http
</server>
- <name>
+<name>
HTTP RFC1867-type formposting
- </name>
- <command>
-http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -F name=daniel -F tool=curl -F file=@log/test%TESTNUMBER.txt
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/we/want/%TESTNUMBER -F name=daniel -F tool=curl -F file=@%LOGDIR/test%TESTNUMBER.txt
</command>
# We create this file before the command is invoked!
-<file name="log/test%TESTNUMBER.txt">
+<file name="%LOGDIR/test%TESTNUMBER.txt">
foo-
This is a moo-
bar
@@ -50,7 +50,7 @@ POST /we/want/%TESTNUMBER HTTP/1.1
Host: %HOSTIP:%HTTPPORT
User-Agent: curl/%VERSION
Accept: */*
-Content-Length: 407
+Content-Length: 431
Content-Type: multipart/form-data; boundary=----------------------------9ef8d6205763
------------------------------9ef8d6205763
diff --git a/tests/data/test900 b/tests/data/test900
index a4fc8aa03..371544b76 100644
--- a/tests/data/test900
+++ b/tests/data/test900
@@ -16,16 +16,16 @@ SMTP
<server>
smtp
</server>
- <name>
+<name>
SMTP
- </name>
+</name>
<stdin>
From: different
To: another
body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -T -
</command>
</client>
diff --git a/tests/data/test901 b/tests/data/test901
index 787365bf0..a97233d87 100644
--- a/tests/data/test901
+++ b/tests/data/test901
@@ -16,9 +16,9 @@ SMTP
<server>
smtp
</server>
- <name>
+<name>
SMTP with CRLF-dot-CRLF in data
- </name>
+</name>
<stdin>
From: different
To: another
@@ -31,7 +31,7 @@ To: another
body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -T -
</command>
</client>
diff --git a/tests/data/test902 b/tests/data/test902
index 4f651a83b..961fc7bfb 100644
--- a/tests/data/test902
+++ b/tests/data/test902
@@ -21,16 +21,16 @@ REPLY EHLO 500 Command unrecognized
<server>
smtp
</server>
- <name>
+<name>
RFC821-only SMTP server (EHLO not supported)
- </name>
+</name>
<stdin>
From: different
To: another
body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -T -
</command>
</client>
diff --git a/tests/data/test903 b/tests/data/test903
index 8fe3174d3..f4d616ec6 100644
--- a/tests/data/test903
+++ b/tests/data/test903
@@ -25,13 +25,13 @@ REPLY AHVzZXIAc2VjcmV0 235 Authenticated
<server>
smtp
</server>
- <name>
+<name>
SMTP plain authentication
- </name>
+</name>
<stdin>
mail body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -u user:secret -T -
</command>
</client>
diff --git a/tests/data/test904 b/tests/data/test904
index 07914970d..b5916ef41 100644
--- a/tests/data/test904
+++ b/tests/data/test904
@@ -25,13 +25,13 @@ REPLY c2VjcmV0 235 Authenticated
<server>
smtp
</server>
- <name>
+<name>
SMTP login authentication
- </name>
+</name>
<stdin>
mail body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -u user:secret -T -
</command>
</client>
diff --git a/tests/data/test905 b/tests/data/test905
index d29e9a835..de0b08ac3 100644
--- a/tests/data/test905
+++ b/tests/data/test905
@@ -28,13 +28,13 @@ smtp
<features>
crypto
</features>
- <name>
+<name>
SMTP CRAM-MD5 authentication
- </name>
+</name>
<stdin>
mail body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -u user:secret -T -
</command>
</client>
diff --git a/tests/data/test907 b/tests/data/test907
index b2af26b23..12d6e8289 100644
--- a/tests/data/test907
+++ b/tests/data/test907
@@ -15,7 +15,7 @@ RFC4954
<servercmd>
AUTH DIGEST-MD5
REPLY AUTH 334 cmVhbG09ImN1cmwiLG5vbmNlPSI1MzAwZDE3YTFkNjk1YmQ0MTFlNGNkZjk2Zjk1NDhjMjNjZWQ2MTc1IixhbGdvcml0aG09bWQ1LXNlc3MscW9wPSJhdXRoIg==
-REPLY dXNlcm5hbWU9InVzZXIiLHJlYWxtPSJjdXJsIixub25jZT0iNTMwMGQxN2ExZDY5NWJkNDExZTRjZGY5NmY5NTQ4YzIzY2VkNjE3NSIsY25vbmNlPSIzNDMzMzIzMTM1MzMzMjMxMzYzMzMyMzEzNzMzMzIzMSIsbmM9IjAwMDAwMDAxIixkaWdlc3QtdXJpPSJzbXRwL2N1cmwiLHJlc3BvbnNlPTk0M2YxNjk1OWYxY2M2ZjA3ZTZmMDk0ZjVkYmQ0NzNlLHFvcD1hdXRo 334
+REPLY dXNlcm5hbWU9InVzZXIiLHJlYWxtPSJjdXJsIixub25jZT0iNTMwMGQxN2ExZDY5NWJkNDExZTRjZGY5NmY5NTQ4YzIzY2VkNjE3NSIsY25vbmNlPSIzNDMzMzIzMTM1MzMzMjMxMzYzMzMyMzEzNzMzMzIzMSIsbmM9IjAwMDAwMDAxIixkaWdlc3QtdXJpPSJzbXRwLzEyNy4wLjAuMSIscmVzcG9uc2U9YTI3YzQzOTVmMzM4Njc0M2JlMTIyMDdiN2QxMTIxYzUscW9wPWF1dGg= 334 cnNwYXV0aD05ZWE4NTljYjlkOTBjMzdjYTMwZDQ5ZDM1Mzc4NjMwYw==
REPLY 235 Authenticated
</servercmd>
</reply>
@@ -31,13 +31,13 @@ smtp
debug
crypto
</features>
- <name>
+<name>
SMTP DIGEST-MD5 authentication
- </name>
+</name>
<stdin>
mail body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -u user:secret -T -
</command>
</client>
@@ -48,7 +48,7 @@ smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-fr
<protocol>
EHLO %TESTNUMBER
AUTH DIGEST-MD5
-dXNlcm5hbWU9InVzZXIiLHJlYWxtPSJjdXJsIixub25jZT0iNTMwMGQxN2ExZDY5NWJkNDExZTRjZGY5NmY5NTQ4YzIzY2VkNjE3NSIsY25vbmNlPSIzNDMzMzIzMTM1MzMzMjMxMzYzMzMyMzEzNzMzMzIzMSIsbmM9IjAwMDAwMDAxIixkaWdlc3QtdXJpPSJzbXRwL2N1cmwiLHJlc3BvbnNlPTk0M2YxNjk1OWYxY2M2ZjA3ZTZmMDk0ZjVkYmQ0NzNlLHFvcD1hdXRo
+dXNlcm5hbWU9InVzZXIiLHJlYWxtPSJjdXJsIixub25jZT0iNTMwMGQxN2ExZDY5NWJkNDExZTRjZGY5NmY5NTQ4YzIzY2VkNjE3NSIsY25vbmNlPSIzNDMzMzIzMTM1MzMzMjMxMzYzMzMyMzEzNzMzMzIzMSIsbmM9IjAwMDAwMDAxIixkaWdlc3QtdXJpPSJzbXRwLzEyNy4wLjAuMSIscmVzcG9uc2U9YTI3YzQzOTVmMzM4Njc0M2JlMTIyMDdiN2QxMTIxYzUscW9wPWF1dGg=
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@example.com>
diff --git a/tests/data/test908 b/tests/data/test908
index b87c4387b..202977a64 100644
--- a/tests/data/test908
+++ b/tests/data/test908
@@ -25,13 +25,13 @@ REPLY dXNlcj11c2VyAWF1dGg9QmVhcmVyIG1GXzkuQjVmLTQuMUpxTQEB 235 Authenticated
<server>
smtp
</server>
- <name>
+<name>
SMTP OAuth 2.0 (XOAUTH2) authentication
- </name>
+</name>
<stdin>
mail body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -u user --oauth2-bearer mF_9.B5f-4.1JqM -T -
</command>
</client>
diff --git a/tests/data/test909 b/tests/data/test909
index d50ab8131..e054e4935 100644
--- a/tests/data/test909
+++ b/tests/data/test909
@@ -16,17 +16,17 @@ SMTP
<server>
smtp
</server>
- <name>
+<name>
SMTP without SIZE support
- </name>
-<file name="log/test%TESTNUMBER.eml">
+</name>
+<file name="%LOGDIR/test%TESTNUMBER.eml">
From: different
To: another
body
</file>
- <command>
-smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -T log/test%TESTNUMBER.eml
+<command>
+smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -T %LOGDIR/test%TESTNUMBER.eml
</command>
</client>
diff --git a/tests/data/test91 b/tests/data/test91
index 2fc020128..37d8e4e36 100644
--- a/tests/data/test91
+++ b/tests/data/test91
@@ -80,9 +80,9 @@ SSL
<server>
http
</server>
- <name>
+<name>
HTTP with NTLM/Negotiate/Basic, anyauth and user with domain, with size 0
- </name>
+</name>
<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --anyauth -u mydomain\\myself:secret
</command>
diff --git a/tests/data/test910 b/tests/data/test910
index 8787cc060..521318ace 100644
--- a/tests/data/test910
+++ b/tests/data/test910
@@ -16,16 +16,16 @@ SMTP
<server>
smtp
</server>
- <name>
+<name>
SMTP without terminating CRLF
- </name>
+</name>
<stdin nonewline="yes">
From: different
To: another
body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -T -
</command>
</client>
diff --git a/tests/data/test911 b/tests/data/test911
index 88631cd3d..b0c5d0eb8 100644
--- a/tests/data/test911
+++ b/tests/data/test911
@@ -16,15 +16,15 @@ SMTP
<server>
smtp
</server>
- <name>
+<name>
SMTP with no mail data
- </name>
+</name>
<stdin nonewline="yes">
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -T -
</command>
</client>
diff --git a/tests/data/test912 b/tests/data/test912
index 4a3f6d16f..4977a4e82 100644
--- a/tests/data/test912
+++ b/tests/data/test912
@@ -20,17 +20,17 @@ CAPA SIZE
<server>
smtp
</server>
- <name>
+<name>
SMTP with SIZE support
- </name>
-<file name="log/test%TESTNUMBER.eml">
+</name>
+<file name="%LOGDIR/test%TESTNUMBER.eml">
From: different
To: another
body
</file>
- <command>
-smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -T log/test%TESTNUMBER.eml
+<command>
+smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -T %LOGDIR/test%TESTNUMBER.eml
</command>
</client>
diff --git a/tests/data/test913 b/tests/data/test913
index 9c19eb2dc..a0aed0072 100644
--- a/tests/data/test913
+++ b/tests/data/test913
@@ -20,17 +20,17 @@ CAPA "SIZE 32"
<server>
smtp
</server>
- <name>
+<name>
SMTP with large message SIZE
- </name>
-<file name="log/test%TESTNUMBER.eml">
+</name>
+<file name="%LOGDIR/test%TESTNUMBER.eml">
From: different
To: another
body
</file>
- <command>
-smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -T log/test%TESTNUMBER.eml
+<command>
+smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -T %LOGDIR/test%TESTNUMBER.eml
</command>
</client>
diff --git a/tests/data/test914 b/tests/data/test914
index ab895d2cd..56ae524b0 100644
--- a/tests/data/test914
+++ b/tests/data/test914
@@ -19,17 +19,17 @@ REPLY MAIL 501 not fine enough
<server>
smtp
</server>
- <name>
+<name>
SMTP invalid --mail-from
- </name>
-<file name="log/test%TESTNUMBER.eml">
+</name>
+<file name="%LOGDIR/test%TESTNUMBER.eml">
From: different
To: another
body
</file>
- <command>
-smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from invalid -T log/test%TESTNUMBER.eml
+<command>
+smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from invalid -T %LOGDIR/test%TESTNUMBER.eml
</command>
</client>
diff --git a/tests/data/test915 b/tests/data/test915
index 5d8944221..9211c3407 100644
--- a/tests/data/test915
+++ b/tests/data/test915
@@ -16,16 +16,16 @@ SMTP
<server>
smtp
</server>
- <name>
+<name>
SMTP without --mail-from
- </name>
+</name>
<stdin>
From: different
To: another
body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com -T -
</command>
</client>
diff --git a/tests/data/test916 b/tests/data/test916
index 2c375ee2e..677a647fd 100644
--- a/tests/data/test916
+++ b/tests/data/test916
@@ -16,16 +16,16 @@ SMTP
<server>
smtp
</server>
- <name>
+<name>
SMTP with invalid --mail-rcpt
- </name>
+</name>
<stdin>
From: different
To: another
body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt invalid --mail-from sender@example.com -T -
</command>
</client>
diff --git a/tests/data/test917 b/tests/data/test917
index fcf21ddac..d53fbd10c 100644
--- a/tests/data/test917
+++ b/tests/data/test917
@@ -16,16 +16,16 @@ SMTP
<server>
smtp
</server>
- <name>
+<name>
SMTP with multiple --mail-rcpt
- </name>
+</name>
<stdin>
From: different
To: another
body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient.one@example.com --mail-rcpt recipient.two@example.com --mail-rcpt recipient.three@example.com --mail-rcpt recipient.four@example.com --mail-rcpt recipient.five@example.com --mail-from sender@example.com -T -
</command>
</client>
diff --git a/tests/data/test918 b/tests/data/test918
index 817674fb8..c49128fa9 100644
--- a/tests/data/test918
+++ b/tests/data/test918
@@ -16,16 +16,16 @@ SMTP
<server>
smtp
</server>
- <name>
+<name>
SMTP with multiple and invalid --mail-rcpt
- </name>
+</name>
<stdin>
From: different
To: another
body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient.one@example.com --mail-rcpt invalid --mail-rcpt recipient.three@example.com --mail-rcpt sTrAnGe --mail-rcpt recipient.five@example.com --mail-from sender@example.com -T -
</command>
</client>
diff --git a/tests/data/test919 b/tests/data/test919
index 8c49abd26..833a67c97 100644
--- a/tests/data/test919
+++ b/tests/data/test919
@@ -25,13 +25,13 @@ REPLY AUTH 235 Authenticated
<server>
smtp
</server>
- <name>
+<name>
SMTP plain authentication with initial response
- </name>
+</name>
<stdin>
mail body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -u user:secret --sasl-ir -T -
</command>
</client>
diff --git a/tests/data/test92 b/tests/data/test92
index 1c09e97bf..f6250d196 100644
--- a/tests/data/test92
+++ b/tests/data/test92
@@ -44,10 +44,10 @@ Content-Type: image/gif
<server>
http
</server>
- <name>
+<name>
HTTP resume transfer with the whole file already downloaded
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/want/%TESTNUMBER -C 87
</command>
</client>
diff --git a/tests/data/test920 b/tests/data/test920
index 26255188f..ac9af7d7b 100644
--- a/tests/data/test920
+++ b/tests/data/test920
@@ -25,13 +25,13 @@ REPLY c2VjcmV0 235 Authenticated
<server>
smtp
</server>
- <name>
+<name>
SMTP login authentication with initial response
- </name>
+</name>
<stdin>
mail body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -u user:secret --sasl-ir -T -
</command>
</client>
diff --git a/tests/data/test922 b/tests/data/test922
index 8c16e4311..554c0965a 100644
--- a/tests/data/test922
+++ b/tests/data/test922
@@ -25,13 +25,13 @@ REPLY AUTH 235 Authenticated
<server>
smtp
</server>
- <name>
+<name>
SMTP OAuth 2.0 (XOAUTH2) authentication with initial response
- </name>
+</name>
<stdin>
mail body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -u user --oauth2-bearer mF_9.B5f-4.1JqM --sasl-ir -T -
</command>
</client>
diff --git a/tests/data/test923 b/tests/data/test923
index 68a013839..19cdd9667 100644
--- a/tests/data/test923
+++ b/tests/data/test923
@@ -17,10 +17,10 @@ VRFY
<server>
smtp
</server>
- <name>
+<name>
SMTP VRFY
- </name>
- <command>
+</name>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient
</command>
</client>
diff --git a/tests/data/test924 b/tests/data/test924
index c87b2a9d5..3a37a5e3c 100644
--- a/tests/data/test924
+++ b/tests/data/test924
@@ -23,10 +23,10 @@ VRFY
<server>
smtp
</server>
- <name>
+<name>
SMTP ambiguous VRFY
- </name>
- <command>
+</name>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt smith
</command>
</client>
diff --git a/tests/data/test925 b/tests/data/test925
index 3b1801b0c..073f1e3a9 100644
--- a/tests/data/test925
+++ b/tests/data/test925
@@ -20,10 +20,10 @@ VRFY
<server>
smtp
</server>
- <name>
+<name>
SMTP external VRFY
- </name>
- <command>
+</name>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt user@example.net
</command>
</client>
diff --git a/tests/data/test926 b/tests/data/test926
index 248cce9a7..4e9623ceb 100644
--- a/tests/data/test926
+++ b/tests/data/test926
@@ -20,10 +20,10 @@ REPLY VRFY 550 Unknown user
<server>
smtp
</server>
- <name>
+<name>
SMTP unknown user VRFY
- </name>
- <command>
+</name>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient
</command>
</client>
diff --git a/tests/data/test927 b/tests/data/test927
index a982d147a..fb86a1940 100644
--- a/tests/data/test927
+++ b/tests/data/test927
@@ -23,10 +23,10 @@ CUSTOMREQUEST
<server>
smtp
</server>
- <name>
+<name>
SMTP mailing list EXPN (CUSTOMREQUEST)
- </name>
- <command>
+</name>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt Friends -X EXPN
</command>
</client>
diff --git a/tests/data/test928 b/tests/data/test928
index 3ed097957..4c5ab9eaf 100644
--- a/tests/data/test928
+++ b/tests/data/test928
@@ -21,10 +21,10 @@ HELP
<server>
smtp
</server>
- <name>
+<name>
SMTP HELP
- </name>
- <command>
+</name>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test929 b/tests/data/test929
index be2632829..1274921f9 100644
--- a/tests/data/test929
+++ b/tests/data/test929
@@ -18,10 +18,10 @@ CUSTOMREQUEST
<server>
smtp
</server>
- <name>
+<name>
SMTP NOOP (CUSTOMREQUEST)
- </name>
- <command>
+</name>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER -X NOOP -I
</command>
</client>
diff --git a/tests/data/test93 b/tests/data/test93
index e0266e68c..83d2b6102 100644
--- a/tests/data/test93
+++ b/tests/data/test93
@@ -25,10 +25,10 @@ bing
<server>
http
</server>
- <name>
+<name>
HTTP GET with failed proxy auth
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -x %HOSTIP:%HTTPPORT
</command>
<features>
diff --git a/tests/data/test930 b/tests/data/test930
index ebde938c5..94a925776 100644
--- a/tests/data/test930
+++ b/tests/data/test930
@@ -18,10 +18,10 @@ CUSTOMREQUEST
<server>
smtp
</server>
- <name>
+<name>
SMTP RSET (CUSTOMREQUEST)
- </name>
- <command>
+</name>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER -X RSET -I
</command>
</client>
diff --git a/tests/data/test931 b/tests/data/test931
index 226f2dd2d..2b6a686c5 100644
--- a/tests/data/test931
+++ b/tests/data/test931
@@ -11,10 +11,10 @@ CRLF-in-URL
<server>
smtp
</server>
- <name>
+<name>
SMTP with URL-encoded CR LF in the URL
- </name>
- <command>
+</name>
+<command>
smtp://%HOSTIP:%SMTPPORT/%0d%0a/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test932 b/tests/data/test932
index b6f828cfb..e814cc0f7 100644
--- a/tests/data/test932
+++ b/tests/data/test932
@@ -29,10 +29,10 @@ smtp
<features>
crypto
</features>
- <name>
+<name>
SMTP CRAM-MD5 graceful cancellation
- </name>
- <command>
+</name>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -u user:secret -T -
</command>
</client>
diff --git a/tests/data/test933 b/tests/data/test933
index 518a9b157..71f389300 100644
--- a/tests/data/test933
+++ b/tests/data/test933
@@ -31,16 +31,16 @@ NTLM
SSL
!SSPI
</features>
- <name>
+<name>
SMTP NTLM graceful cancellation
- </name>
+</name>
<setenv>
# we force our own host name, in order to make the test machine independent
CURL_GETHOSTNAME=curlhost
# we try to use the LD_PRELOAD hack, if not a debug build
LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
</setenv>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -u testuser:testpass -T -
</command>
<precheck>
diff --git a/tests/data/test934 b/tests/data/test934
index 87b8571d7..8fd444e91 100644
--- a/tests/data/test934
+++ b/tests/data/test934
@@ -31,10 +31,10 @@ smtp
debug
crypto
</features>
- <name>
+<name>
SMTP DIGEST-MD5 graceful cancellation
- </name>
- <command>
+</name>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -u user:secret -T -
</command>
</client>
diff --git a/tests/data/test935 b/tests/data/test935
index fe106f8bd..bbd4d9475 100644
--- a/tests/data/test935
+++ b/tests/data/test935
@@ -32,13 +32,13 @@ smtp
<features>
crypto
</features>
- <name>
+<name>
SMTP CRAM-MD5 authentication with SASL downgrade
- </name>
+</name>
<stdin>
mail body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -u user:secret -T -
</command>
</client>
diff --git a/tests/data/test936 b/tests/data/test936
index 6d8074f2e..f57f63ec8 100644
--- a/tests/data/test936
+++ b/tests/data/test936
@@ -34,9 +34,9 @@ NTLM
SSL
!SSPI
</features>
- <name>
+<name>
SMTP NTLM authentication with SASL downgrade
- </name>
+</name>
<stdin>
mail body
</stdin>
@@ -46,7 +46,7 @@ CURL_GETHOSTNAME=curlhost
# we try to use the LD_PRELOAD hack, if not a debug build
LD_PRELOAD=%PWD/libtest/.libs/libhostname.so
</setenv>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -u user:secret -T -
</command>
<precheck>
diff --git a/tests/data/test937 b/tests/data/test937
index c2a195ab1..6c361b738 100644
--- a/tests/data/test937
+++ b/tests/data/test937
@@ -34,13 +34,13 @@ smtp
debug
crypto
</features>
- <name>
+<name>
SMTP DIGEST-MD5 authentication with SASL downgrade
- </name>
+</name>
<stdin>
mail body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -u user:secret -T -
</command>
</client>
diff --git a/tests/data/test938 b/tests/data/test938
index ec19998c0..475572b07 100644
--- a/tests/data/test938
+++ b/tests/data/test938
@@ -4,7 +4,7 @@
SMTP
SASL
SASL AUTH PLAIN
-connection re-use
+connection reuse
RFC4616
RFC4954
</keywords>
@@ -27,14 +27,14 @@ REPLY dXNlci50d28AdXNlci50d28Ac2VjcmV0 235 Authenticated
<server>
smtp
</server>
- <name>
+<name>
SMTP multiple connection authentication
- </name>
-<file name="log/upload%TESTNUMBER">
+</name>
+<file name="%LOGDIR/upload%TESTNUMBER">
mail body
</file>
- <command>
-smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER001 --mail-rcpt recipient@example.com --mail-from sender@example.com -u user.one:secret -T log/upload%TESTNUMBER -: smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER002 --mail-rcpt recipient@example.com --mail-from sender@example.com -u user.two:secret -T log/upload%TESTNUMBER
+<command>
+smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER001 --mail-rcpt recipient@example.com --mail-from sender@example.com -u user.one:secret -T %LOGDIR/upload%TESTNUMBER -: smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER002 --mail-rcpt recipient@example.com --mail-from sender@example.com -u user.two:secret -T %LOGDIR/upload%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test939 b/tests/data/test939
index b385798b6..e1424d2dd 100644
--- a/tests/data/test939
+++ b/tests/data/test939
@@ -20,13 +20,13 @@ REPLY EHLO 500 Command unrecognized
<server>
smtp
</server>
- <name>
+<name>
RFC821-only SMTP with username and password
- </name>
+</name>
<stdin>
mail body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -u user:secret -T -
</command>
</client>
diff --git a/tests/data/test94 b/tests/data/test94
index 87b65d13a..eb745d1df 100644
--- a/tests/data/test94
+++ b/tests/data/test94
@@ -31,10 +31,10 @@ http
SSL
proxy
</features>
- <name>
+<name>
HTTPS GET with failed proxy auth (CONNECT 1.0)
- </name>
- <command>
+</name>
+<command>
https://test.anything.really.com:%TESTNUMBER --proxy1.0 %HOSTIP:%HTTPPORT
</command>
</client>
diff --git a/tests/data/test940 b/tests/data/test940
index baa0c9894..afc9da0c9 100644
--- a/tests/data/test940
+++ b/tests/data/test940
@@ -16,13 +16,13 @@ SMTP
<server>
smtp
</server>
- <name>
+<name>
SMTP with username and password but no AUTH capability
- </name>
+</name>
<stdin>
mail body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -u user:secret -T -
</command>
</client>
diff --git a/tests/data/test941 b/tests/data/test941
index f4dc34fae..7c87f5028 100644
--- a/tests/data/test941
+++ b/tests/data/test941
@@ -17,10 +17,10 @@ SMTP
<server>
smtp
</server>
- <name>
+<name>
SMTP with --crlf
- </name>
-<file name="log/upload%TESTNUMBER">
+</name>
+<file name="%LOGDIR/upload%TESTNUMBER">
From: different
To: another
@@ -33,8 +33,8 @@ with
the
--crlf option
</file>
- <command>
-smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -T log/upload%TESTNUMBER --crlf
+<command>
+smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -T %LOGDIR/upload%TESTNUMBER --crlf
</command>
</client>
diff --git a/tests/data/test942 b/tests/data/test942
index ae30a9c6e..2286c20e6 100644
--- a/tests/data/test942
+++ b/tests/data/test942
@@ -25,13 +25,13 @@ REPLY dXNlcg== 235 Authenticated
<server>
smtp
</server>
- <name>
+<name>
SMTP external authentication
- </name>
+</name>
<stdin>
mail body
</stdin>
- <command>
+<command>
'smtp://user;AUTH=EXTERNAL@%HOSTIP:%SMTPPORT/%TESTNUMBER' --mail-rcpt recipient@example.com --mail-from sender@example.com -T -
</command>
</client>
diff --git a/tests/data/test943 b/tests/data/test943
index 4f403cdff..80e935fed 100644
--- a/tests/data/test943
+++ b/tests/data/test943
@@ -25,13 +25,13 @@ REPLY = 235 Authenticated
<server>
smtp
</server>
- <name>
+<name>
SMTP external authentication without credentials
- </name>
+</name>
<stdin>
mail body
</stdin>
- <command>
+<command>
'smtp://;AUTH=EXTERNAL@%HOSTIP:%SMTPPORT/%TESTNUMBER' --mail-rcpt recipient@example.com --mail-from sender@example.com -T -
</command>
</client>
diff --git a/tests/data/test944 b/tests/data/test944
index 0539a8ae1..0dfaefb71 100644
--- a/tests/data/test944
+++ b/tests/data/test944
@@ -25,13 +25,13 @@ REPLY AUTH 235 Authenticated
<server>
smtp
</server>
- <name>
+<name>
SMTP external authentication with initial response
- </name>
+</name>
<stdin>
mail body
</stdin>
- <command>
+<command>
'smtp://user;AUTH=EXTERNAL@%HOSTIP:%SMTPPORT/%TESTNUMBER' --mail-rcpt recipient@example.com --mail-from sender@example.com --sasl-ir -T -
</command>
</client>
diff --git a/tests/data/test945 b/tests/data/test945
index 5a3fb4937..5b6412764 100644
--- a/tests/data/test945
+++ b/tests/data/test945
@@ -25,13 +25,13 @@ REPLY AUTH 235 Authenticated
<server>
smtp
</server>
- <name>
+<name>
SMTP external authentication with initial response without credentials
- </name>
+</name>
<stdin>
mail body
</stdin>
- <command>
+<command>
'smtp://;AUTH=EXTERNAL@%HOSTIP:%SMTPPORT/%TESTNUMBER' --mail-rcpt recipient@example.com --mail-from sender@example.com --sasl-ir -T -
</command>
</client>
diff --git a/tests/data/test946 b/tests/data/test946
index ea6569380..b306180aa 100644
--- a/tests/data/test946
+++ b/tests/data/test946
@@ -26,13 +26,13 @@ REPLY %b64[n,a=user,%01host=127.0.0.1%01port=%SMTPPORT%01auth=Bearer mF_9.B5f-4.
<server>
smtp
</server>
- <name>
+<name>
SMTP OAuth 2.0 (OAUTHBEARER) authentication
- </name>
+</name>
<stdin>
mail body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -u user --oauth2-bearer mF_9.B5f-4.1JqM -T -
</command>
</client>
diff --git a/tests/data/test947 b/tests/data/test947
index 290da7114..5ca2be671 100644
--- a/tests/data/test947
+++ b/tests/data/test947
@@ -26,13 +26,13 @@ REPLY AUTH 235 Authenticated
<server>
smtp
</server>
- <name>
+<name>
SMTP OAuth 2.0 (OAUTHBEARER) authentication with initial response
- </name>
+</name>
<stdin>
mail body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -u user --oauth2-bearer mF_9.B5f-4.1JqM --sasl-ir -T -
</command>
</client>
diff --git a/tests/data/test948 b/tests/data/test948
index 59a492f17..a765fba3d 100644
--- a/tests/data/test948
+++ b/tests/data/test948
@@ -27,13 +27,13 @@ REPLY AQ== 535 Username and Password not accepted. Learn more at\r\n535 http://s
<server>
smtp
</server>
- <name>
+<name>
SMTP OAuth 2.0 (OAUTHBEARER) failure as continuation
- </name>
+</name>
<stdin>
mail body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -u user --oauth2-bearer mF_9.B5f-4.1JqM -T -
</command>
</client>
diff --git a/tests/data/test949 b/tests/data/test949
index 0c9007495..136baf4ef 100644
--- a/tests/data/test949
+++ b/tests/data/test949
@@ -27,13 +27,13 @@ REPLY AQ== 535 Username and Password not accepted. Learn more at\r\n535 http://s
<server>
smtp
</server>
- <name>
+<name>
SMTP OAuth 2.0 (OAUTHBEARER) failure as continuation with initial response
- </name>
+</name>
<stdin>
mail body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -u user --oauth2-bearer mF_9.B5f-4.1JqM --sasl-ir -T -
</command>
</client>
diff --git a/tests/data/test95 b/tests/data/test95
index bc82f162f..339c02ae4 100644
--- a/tests/data/test95
+++ b/tests/data/test95
@@ -46,10 +46,10 @@ contents
http
http-proxy
</server>
- <name>
+<name>
HTTP over proxytunnel using POST
- </name>
- <command>
+</name>
+<command>
http://test.%TESTNUMBER:%HTTPPORT/we/want/that/page/%TESTNUMBER -p -x %HOSTIP:%PROXYPORT -d "datatopost=ohthatsfunyesyes"
</command>
<features>
diff --git a/tests/data/test950 b/tests/data/test950
index 3198ab214..6628f0043 100644
--- a/tests/data/test950
+++ b/tests/data/test950
@@ -21,9 +21,9 @@ VRFY
<server>
smtp
</server>
- <name>
+<name>
SMTP VRFY with custom request
- </name>
+</name>
# the custom request just does it lowercase to remain the same command
<command>
diff --git a/tests/data/test951 b/tests/data/test951
index 3a3626f7e..2b9315047 100644
--- a/tests/data/test951
+++ b/tests/data/test951
@@ -16,9 +16,9 @@ SMTP
<server>
smtp
</server>
- <name>
+<name>
SMTP data with dot as first character
- </name>
+</name>
<stdin>
.This first line starts with a dot
</stdin>
diff --git a/tests/data/test952 b/tests/data/test952
index 39b9f7608..716310df6 100644
--- a/tests/data/test952
+++ b/tests/data/test952
@@ -16,9 +16,9 @@ SMTP
<server>
smtp
</server>
- <name>
+<name>
SMTP data with single dot-only line
- </name>
+</name>
<stdin>
.
</stdin>
diff --git a/tests/data/test953 b/tests/data/test953
index e4d0328a6..f293f896e 100644
--- a/tests/data/test953
+++ b/tests/data/test953
@@ -25,13 +25,13 @@ REPLY dXJzZWwAa3VydAB4aXBqM3BsbXE= 235 Authenticated
<server>
smtp
</server>
- <name>
+<name>
SMTP plain authentication with alternative authorization identity
- </name>
+</name>
<stdin>
mail body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -u kurt:xipj3plmq --sasl-authzid ursel -T -
</command>
</client>
diff --git a/tests/data/test954 b/tests/data/test954
index fa2d59185..698786b4d 100644
--- a/tests/data/test954
+++ b/tests/data/test954
@@ -25,13 +25,13 @@ REPLY dXJzZWwAa3VydAB4aXBqM3BsbXE= 501 Not authorized
<server>
smtp
</server>
- <name>
+<name>
SMTP plain authentication with alternative authorization identity (Not authorized)
- </name>
+</name>
<stdin>
mail body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -u kurt:xipj3plmq --sasl-authzid ursel -T -
</command>
</client>
diff --git a/tests/data/test955 b/tests/data/test955
index 6525baab3..24cc2b7e4 100644
--- a/tests/data/test955
+++ b/tests/data/test955
@@ -29,9 +29,9 @@ LC_CTYPE=en_US.UTF-8
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
- <name>
+<name>
SMTP without SMTPUTF8 support - UTF-8 based sender (local part only)
- </name>
+</name>
<stdin>
From: different
To: another
diff --git a/tests/data/test956 b/tests/data/test956
index 52d2454a2..1180523bb 100644
--- a/tests/data/test956
+++ b/tests/data/test956
@@ -26,9 +26,9 @@ LC_CTYPE=en_US.UTF-8
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
- <name>
+<name>
SMTP without SMTPUTF8 support - UTF-8 based recipient (local part only)
- </name>
+</name>
<stdin>
From: different
To: another
diff --git a/tests/data/test957 b/tests/data/test957
index 097385fe2..1b01b7e53 100644
--- a/tests/data/test957
+++ b/tests/data/test957
@@ -27,9 +27,9 @@ LC_CTYPE=en_US.UTF-8
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
- <name>
+<name>
SMTP VRFY without SMTPUTF8 support - UTF-8 based recipient (local part only)
- </name>
+</name>
<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt Användaren
</command>
diff --git a/tests/data/test958 b/tests/data/test958
index 1df158084..3ad77fe10 100644
--- a/tests/data/test958
+++ b/tests/data/test958
@@ -27,9 +27,9 @@ LC_CTYPE=en_US.UTF-8
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
- <name>
+<name>
SMTP external VRFY without SMTPUTF8 support - UTF-8 based recipient (local part only)
- </name>
+</name>
<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt Användaren@example.com
</command>
diff --git a/tests/data/test959 b/tests/data/test959
index 8bebe40ad..143708df8 100644
--- a/tests/data/test959
+++ b/tests/data/test959
@@ -30,9 +30,9 @@ LC_CTYPE=en_US.UTF-8
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
- <name>
+<name>
SMTP without SMTPUTF8 support - UTF-8 based sender (host part only)
- </name>
+</name>
<stdin>
From: different
To: another
diff --git a/tests/data/test96 b/tests/data/test96
index 27044bc99..2bf68cc4b 100644
--- a/tests/data/test96
+++ b/tests/data/test96
@@ -30,7 +30,7 @@ curl memory tracking operational
#
# Verify data after the test has been "shot"
<verify>
-<file name="log/memdump">
+<file name="%LOGDIR/memdump">
MEM tool_paramhlp.c
MEM tool_cfgable.c
MEM tool_cfgable.c
diff --git a/tests/data/test960 b/tests/data/test960
index 68d8eda72..bcb9bf44c 100644
--- a/tests/data/test960
+++ b/tests/data/test960
@@ -27,9 +27,9 @@ LC_CTYPE=en_US.UTF-8
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
- <name>
+<name>
SMTP without SMTPUTF8 support - UTF-8 based recipient (host part only)
- </name>
+</name>
<stdin>
From: different
To: another
diff --git a/tests/data/test961 b/tests/data/test961
index 9cd10f574..750943ab4 100644
--- a/tests/data/test961
+++ b/tests/data/test961
@@ -28,9 +28,9 @@ LC_CTYPE=en_US.UTF-8
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
- <name>
+<name>
SMTP external VRFY without SMTPUTF8 support - UTF-8 based recipient (host part only)
- </name>
+</name>
<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt user@åäö.se
</command>
diff --git a/tests/data/test962 b/tests/data/test962
index 0977ab326..503761b46 100644
--- a/tests/data/test962
+++ b/tests/data/test962
@@ -28,9 +28,9 @@ LC_CTYPE=en_US.UTF-8
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
- <name>
+<name>
SMTP without SMTPUTF8 support - UTF-8 based sender (host part only)
- </name>
+</name>
<stdin>
From: different
To: another
diff --git a/tests/data/test963 b/tests/data/test963
index 4ddc87162..1b977f007 100644
--- a/tests/data/test963
+++ b/tests/data/test963
@@ -28,9 +28,9 @@ LC_CTYPE=en_US.UTF-8
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
- <name>
+<name>
SMTP without SMTPUTF8 support (IDN Enabled) - UTF-8 based recipient (host part only)
- </name>
+</name>
<stdin>
From: different
To: another
diff --git a/tests/data/test964 b/tests/data/test964
index 7901e0aeb..e2d69881a 100644
--- a/tests/data/test964
+++ b/tests/data/test964
@@ -29,9 +29,9 @@ LC_CTYPE=en_US.UTF-8
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
- <name>
+<name>
SMTP external VRFY without SMTPUTF8 support (IDN Enabled) - UTF-8 based recipient (host part only)
- </name>
+</name>
<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt user@åäö.se
</command>
diff --git a/tests/data/test965 b/tests/data/test965
index ada2d8e70..71adef8f6 100644
--- a/tests/data/test965
+++ b/tests/data/test965
@@ -31,9 +31,9 @@ LC_CTYPE=en_US.UTF-8
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
- <name>
+<name>
SMTP with SMTPUTF8 support - UTF-8 based sender
- </name>
+</name>
<stdin>
From: different
To: another
diff --git a/tests/data/test966 b/tests/data/test966
index d2eb7c17c..acc248a57 100644
--- a/tests/data/test966
+++ b/tests/data/test966
@@ -31,9 +31,9 @@ LC_CTYPE=en_US.UTF-8
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
- <name>
+<name>
SMTP with SMTPUTF8 support - UTF-8 based recipient
- </name>
+</name>
<stdin>
From: different
To: another
diff --git a/tests/data/test967 b/tests/data/test967
index 87a37ae05..95fb153bd 100644
--- a/tests/data/test967
+++ b/tests/data/test967
@@ -35,9 +35,9 @@ LC_CTYPE=en_US.UTF-8
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
- <name>
+<name>
SMTP external VRFY with SMTPUTF8 support
- </name>
+</name>
<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt Användaren@åäö.se
</command>
diff --git a/tests/data/test968 b/tests/data/test968
index 89b543ae4..099f6fd29 100644
--- a/tests/data/test968
+++ b/tests/data/test968
@@ -32,9 +32,9 @@ LC_CTYPE=en_US.UTF-8
<precheck>
perl -MI18N::Langinfo=langinfo,CODESET -e 'die "Needs a UTF-8 locale" if (lc(langinfo(CODESET())) ne "utf-8");'
</precheck>
- <name>
+<name>
SMTP VRFY with SMTPUTF8 support
- </name>
+</name>
<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt Användaren
</command>
diff --git a/tests/data/test969 b/tests/data/test969
index 860c9d47b..bb4cc316e 100644
--- a/tests/data/test969
+++ b/tests/data/test969
@@ -31,10 +31,10 @@ smtp
idn
!win32
</features>
- <name>
+<name>
SMTP mailing list EXPN (CUSTOMREQUEST) with SMTPUTF8 support
- </name>
- <command>
+</name>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt Friends -X EXPN
</command>
</client>
diff --git a/tests/data/test97 b/tests/data/test97
index db36eeb70..cc0cf676b 100644
--- a/tests/data/test97
+++ b/tests/data/test97
@@ -25,10 +25,10 @@ blaha
<server>
http
</server>
- <name>
+<name>
HTTP POST with custom content-type
- </name>
- <command>
+</name>
+<command>
-d "hejsanallabarn" -H "Content-Type: silly/type" http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
</client>
diff --git a/tests/data/test970 b/tests/data/test970
index ee0a3e9ae..88ab79612 100644
--- a/tests/data/test970
+++ b/tests/data/test970
@@ -44,7 +44,7 @@ CURL_VERSION=curl-unit-test-fake-version
HTTP GET with JSON output
</name>
<command option="no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER --write-out '%{json}' -o log/out%TESTNUMBER
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --write-out '%{json}' -o %LOGDIR/out%TESTNUMBER
</command>
</client>
@@ -59,7 +59,7 @@ Accept: */*
</protocol>
<stdout nonewline="yes">
-{"content_type":"text/html","errormsg":null,"exitcode":0,"filename_effective":"log/out%TESTNUMBER","ftp_entry_path":null,"http_code":200,"http_connect":0,"http_version":"1.1","local_ip":"127.0.0.1","local_port":13,"method":"GET","num_connects":1,"num_headers":9,"num_redirects":0,"proxy_ssl_verify_result":0,"redirect_url":null,"referer":null,"remote_ip":"%HOSTIP","remote_port":%HTTPPORT,"response_code":200,"scheme":"HTTP","size_download":445,"size_header":4019,"size_request":4019,"size_upload":0,"speed_download":13,"speed_upload":13,"ssl_verify_result":0,"time_appconnect":0.000013,"time_connect":0.000013,"time_namelookup":0.000013,"time_pretransfer":0.000013,"time_redirect":0.000013,"time_starttransfer":0.000013,"time_total":0.000013,"url":"http://%HOSTIP:%HTTPPORT/%TESTNUMBER","url_effective":"http://%HOSTIP:%HTTPPORT/%TESTNUMBER","urlnum":0,"curl_version":"curl-unit-test-fake-version"}
+{"certs":"","content_type":"text/html","conn_id":0,"errormsg":null,"exitcode":0,"filename_effective":"%LOGDIR/out%TESTNUMBER","ftp_entry_path":null,"http_code":200,"http_connect":0,"http_version":"1.1","local_ip":"127.0.0.1","local_port":13,"method":"GET","num_certs":0,"num_connects":1,"num_headers":9,"num_redirects":0,"proxy_ssl_verify_result":0,"redirect_url":null,"referer":null,"remote_ip":"%HOSTIP","remote_port":%HTTPPORT,"response_code":200,"scheme":"HTTP","size_download":445,"size_header":4019,"size_request":4019,"size_upload":0,"speed_download":13,"speed_upload":13,"ssl_verify_result":0,"time_appconnect":0.000013,"time_connect":0.000013,"time_namelookup":0.000013,"time_pretransfer":0.000013,"time_redirect":0.000013,"time_starttransfer":0.000013,"time_total":0.000013,"url":"http://%HOSTIP:%HTTPPORT/%TESTNUMBER","url.scheme":"http","url.user":null,"url.password":null,"url.options":null,"url.host":"%HOSTIP","url.port":"%HTTPPORT","url.path":"/%TESTNUMBER","url.query":null,"url.fragment":null,"url.zoneid":null,"urle.scheme":"http","urle.user":null,"urle.password":null,"urle.options":null,"urle.host":"%HOSTIP","urle.port":"%HTTPPORT","urle.path":"/%TESTNUMBER","urle.query":null,"urle.fragment":null,"urle.zoneid":null,"url_effective":"http://%HOSTIP:%HTTPPORT/%TESTNUMBER","urlnum":0,"xfer_id":0,"curl_version":"curl-unit-test-fake-version"}
</stdout>
</verify>
</testcase>
diff --git a/tests/data/test971 b/tests/data/test971
index dada92001..19260dfdf 100644
--- a/tests/data/test971
+++ b/tests/data/test971
@@ -13,9 +13,9 @@ options-in-versions
none
</server>
- <name>
+<name>
Verify that options-in-versions and docs/cmdline-opts are in sync
- </name>
+</name>
<command type="perl">
%SRCDIR/options-scan.pl %SRCDIR/../docs/options-in-versions %SRCDIR/../docs/cmdline-opts
diff --git a/tests/data/test972 b/tests/data/test972
index 0bcf04e39..1dc2eca34 100644
--- a/tests/data/test972
+++ b/tests/data/test972
@@ -45,7 +45,7 @@ CURL_VERSION=curl-unit-test-fake-version
Verify JSON output
</name>
<command option="no-include">
-http://%HOSTIP:%HTTPPORT/%TESTNUMBER -s --write-out '%{json}\n' -o log/out972
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -s --write-out '%{json}\n' -o %LOGDIR/out972
</command>
</client>
@@ -60,7 +60,7 @@ Accept: */*
</protocol>
<stdout mode="text">
-{"content_type":"text/html","errormsg":null,"exitcode":0,"filename_effective":"log/out972","ftp_entry_path":null,"http_code":200,"http_connect":0,"http_version":"1.1","local_ip":"%HOSTIP","local_port":13,"method":"GET","num_connects":1,"num_headers":9,"num_redirects":0,"proxy_ssl_verify_result":0,"redirect_url":null,"referer":null,"remote_ip":"%HOSTIP","remote_port":%HTTPPORT,"response_code":200,"scheme":"HTTP","size_download":445,"size_header":4019,"size_request":4019,"size_upload":0,"speed_download":13,"speed_upload":13,"ssl_verify_result":0,"time_appconnect":0.000013,"time_connect":0.000013,"time_namelookup":0.000013,"time_pretransfer":0.000013,"time_redirect":0.000013,"time_starttransfer":0.000013,"time_total":0.000013,"url":"http://%HOSTIP:%HTTPPORT/%TESTNUMBER","url_effective":"http://%HOSTIP:%HTTPPORT/%TESTNUMBER","urlnum":0,"curl_version":"curl-unit-test-fake-version"}
+{"certs":"","content_type":"text/html","conn_id":0,"errormsg":null,"exitcode":0,"filename_effective":"%LOGDIR/out972","ftp_entry_path":null,"http_code":200,"http_connect":0,"http_version":"1.1","local_ip":"%HOSTIP","local_port":13,"method":"GET","num_certs":0,"num_connects":1,"num_headers":9,"num_redirects":0,"proxy_ssl_verify_result":0,"redirect_url":null,"referer":null,"remote_ip":"%HOSTIP","remote_port":%HTTPPORT,"response_code":200,"scheme":"HTTP","size_download":445,"size_header":4019,"size_request":4019,"size_upload":0,"speed_download":13,"speed_upload":13,"ssl_verify_result":0,"time_appconnect":0.000013,"time_connect":0.000013,"time_namelookup":0.000013,"time_pretransfer":0.000013,"time_redirect":0.000013,"time_starttransfer":0.000013,"time_total":0.000013,"url":"http://%HOSTIP:%HTTPPORT/%TESTNUMBER","url.scheme":"http","url.user":null,"url.password":null,"url.options":null,"url.host":"%HOSTIP","url.port":"%HTTPPORT","url.path":"/%TESTNUMBER","url.query":null,"url.fragment":null,"url.zoneid":null,"urle.scheme":"http","urle.user":null,"urle.password":null,"urle.options":null,"urle.host":"%HOSTIP","urle.port":"%HTTPPORT","urle.path":"/%TESTNUMBER","urle.query":null,"urle.fragment":null,"urle.zoneid":null,"url_effective":"http://%HOSTIP:%HTTPPORT/%TESTNUMBER","urlnum":0,"xfer_id":0,"curl_version":"curl-unit-test-fake-version"}
</stdout>
</verify>
</testcase>
diff --git a/tests/data/test973 b/tests/data/test973
index 6ced10789..17748ea73 100644
--- a/tests/data/test973
+++ b/tests/data/test973
@@ -55,10 +55,10 @@ works
http
ftp
</server>
- <name>
+<name>
HTTP with auth redirected to FTP w/o auth
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -L -u joe:secret
</command>
</client>
diff --git a/tests/data/test974 b/tests/data/test974
index 5a834ac25..1e7919c14 100644
--- a/tests/data/test974
+++ b/tests/data/test974
@@ -61,10 +61,10 @@ proxy
<server>
http
</server>
- <name>
+<name>
HTTP with auth redirected to HTTP on a diff port w/o auth
- </name>
- <command>
+</name>
+<command>
-x http://%HOSTIP:%HTTPPORT http://firsthost.com -L -u joe:secret
</command>
</client>
diff --git a/tests/data/test975 b/tests/data/test975
index 85e03e4f2..33f2559c6 100644
--- a/tests/data/test975
+++ b/tests/data/test975
@@ -55,10 +55,10 @@ works
http
ftp
</server>
- <name>
+<name>
HTTP with auth redirected to FTP allowing auth to continue
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --location-trusted -u joe:secret
</command>
</client>
diff --git a/tests/data/test976 b/tests/data/test976
index b2d948830..35c890145 100644
--- a/tests/data/test976
+++ b/tests/data/test976
@@ -61,10 +61,10 @@ proxy
<server>
http
</server>
- <name>
+<name>
HTTP with auth redirected to HTTP on a diff port --location-trusted
- </name>
- <command>
+</name>
+<command>
-x http://%HOSTIP:%HTTPPORT http://firsthost.com --location-trusted -u joe:secret
</command>
</client>
diff --git a/tests/data/test977 b/tests/data/test977
index cecfd13f0..4f52850a0 100644
--- a/tests/data/test977
+++ b/tests/data/test977
@@ -27,16 +27,17 @@ Set-Cookie: a=b; Domain=.me.;
# Client-side
<client>
<features>
+cookies
proxy
</features>
<server>
http
</server>
- <name>
+<name>
URL with trailing dot and receiving a cookie for the TLD with dot
- </name>
- <command>
--x http://%HOSTIP:%HTTPPORT http://firsthost.me. -c log/cookies%TESTNUMBER
+</name>
+<command>
+-x http://%HOSTIP:%HTTPPORT http://firsthost.me. -c %LOGDIR/cookies%TESTNUMBER
</command>
</client>
@@ -51,7 +52,7 @@ Accept: */*
Proxy-Connection: Keep-Alive
</protocol>
-<file name="log/cookies%TESTNUMBER" mode="text">
+<file name="%LOGDIR/cookies%TESTNUMBER" mode="text">
# Netscape HTTP Cookie File
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
diff --git a/tests/data/test978 b/tests/data/test978
new file mode 100644
index 000000000..810ffbb04
--- /dev/null
+++ b/tests/data/test978
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+--stderr
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+verify that --stderr works for -w's stderr as well
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER --stderr %LOGDIR/redir --silent -w '%{stderr}nonsense\n'
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+<file name="%LOGDIR/redir" mode="text">
+nonsense
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test979 b/tests/data/test979
new file mode 100644
index 000000000..40cc35044
--- /dev/null
+++ b/tests/data/test979
@@ -0,0 +1,64 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+Basic
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data crlf="yes" nocheck="yes">
+HTTP/1.1 302 go go go
+Content-Length: 8
+Location: http://%HOSTIP:%HTTPPORT/user/%TESTNUMBER0002
+Content-Type: text/html
+Funny-head: yesyes
+
+notreal
+</data>
+<data2 crlf="yes">
+HTTP/1.1 200 OK
+Content-Length: 6
+Content-Type: text/html
+Funny-head: yesyes
+
+final
+</data2>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+-u with redirect to absolute URL using same origin and auth
+</name>
+<command>
+http://first:secret@%HOSTIP:%HTTPPORT/%TESTNUMBER -L -u smith:doggie
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Authorization: Basic c21pdGg6ZG9nZ2ll
+User-Agent: curl/%VERSION
+Accept: */*
+
+GET /user/%TESTNUMBER0002 HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+Authorization: Basic c21pdGg6ZG9nZ2ll
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test98 b/tests/data/test98
index 1d89c34fe..ced184b39 100644
--- a/tests/data/test98
+++ b/tests/data/test98
@@ -25,10 +25,10 @@ blaha
<server>
http
</server>
- <name>
+<name>
HTTP PUT from stdin with set size, disabling chunked transfer-encoding
- </name>
- <command>
+</name>
+<command>
-T - -H "Transfer-Encoding:" -H "Content-Length: 14" http://%HOSTIP:%HTTPPORT/%TESTNUMBER
</command>
<stdin>
diff --git a/tests/data/test980 b/tests/data/test980
index 97567f856..5811b437d 100644
--- a/tests/data/test980
+++ b/tests/data/test980
@@ -26,13 +26,13 @@ SSL
<server>
smtp
</server>
- <name>
+<name>
SMTP STARTTLS pipelined server response
- </name>
+</name>
<stdin>
mail body
</stdin>
- <command>
+<command>
smtp://%HOSTIP:%SMTPPORT/%TESTNUMBER --mail-rcpt recipient@example.com --mail-from sender@example.com -u user:secret --ssl --sasl-ir -T -
</command>
</client>
diff --git a/tests/data/test981 b/tests/data/test981
index 2b98ce42a..02a03fd2f 100644
--- a/tests/data/test981
+++ b/tests/data/test981
@@ -25,13 +25,13 @@ SSL
<server>
imap
</server>
- <name>
+<name>
IMAP STARTTLS pipelined server response
- </name>
- <command>
-imap://%HOSTIP:%IMAPPORT/%TESTNUMBER -T log/upload%TESTNUMBER -u user:secret --ssl
+</name>
+<command>
+imap://%HOSTIP:%IMAPPORT/%TESTNUMBER -T %LOGDIR/upload%TESTNUMBER -u user:secret --ssl
</command>
-<file name="log/upload%TESTNUMBER">
+<file name="%LOGDIR/upload%TESTNUMBER">
Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)
From: Fred Foobar <foobar@example.COM>
Subject: afternoon meeting
diff --git a/tests/data/test982 b/tests/data/test982
index 9e07cc0b3..2f5eccc0a 100644
--- a/tests/data/test982
+++ b/tests/data/test982
@@ -34,10 +34,10 @@ SSL
<server>
pop3
</server>
- <name>
+<name>
POP3 STARTTLS pipelined server response
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user:secret --ssl
</command>
</client>
diff --git a/tests/data/test983 b/tests/data/test983
index 300ec459c..a4294495d 100644
--- a/tests/data/test983
+++ b/tests/data/test983
@@ -23,10 +23,10 @@ SSL
<server>
ftp
</server>
- <name>
+<name>
FTP STARTTLS pipelined server response
- </name>
-<file name="log/test%TESTNUMBER.txt">
+</name>
+<file name="%LOGDIR/test%TESTNUMBER.txt">
data
to
see
@@ -34,8 +34,8 @@ that FTPS
works
so does it?
</file>
- <command>
---ssl --ftp-ssl-control ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T log/test%TESTNUMBER.txt -u user:secret -P %CLIENTIP
+<command>
+--ssl --ftp-ssl-control ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T %LOGDIR/test%TESTNUMBER.txt -u user:secret -P %CLIENTIP
</command>
</client>
diff --git a/tests/data/test984 b/tests/data/test984
index e573f23c1..314a24e6c 100644
--- a/tests/data/test984
+++ b/tests/data/test984
@@ -23,13 +23,13 @@ SSL
<server>
imap
</server>
- <name>
+<name>
IMAP require STARTTLS with failing capabilities
- </name>
- <command>
-imap://%HOSTIP:%IMAPPORT/%TESTNUMBER -T log/upload%TESTNUMBER -u user:secret --ssl-reqd
+</name>
+<command>
+imap://%HOSTIP:%IMAPPORT/%TESTNUMBER -T %LOGDIR/upload%TESTNUMBER -u user:secret --ssl-reqd
</command>
-<file name="log/upload%TESTNUMBER">
+<file name="%LOGDIR/upload%TESTNUMBER">
Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)
From: Fred Foobar <foobar@example.COM>
Subject: afternoon meeting
diff --git a/tests/data/test985 b/tests/data/test985
index d0db4aadf..0b3cd29ff 100644
--- a/tests/data/test985
+++ b/tests/data/test985
@@ -32,10 +32,10 @@ SSL
<server>
pop3
</server>
- <name>
+<name>
POP3 require STARTTLS with failing capabilities
- </name>
- <command>
+</name>
+<command>
pop3://%HOSTIP:%POP3PORT/%TESTNUMBER -u user:secret --ssl-reqd
</command>
</client>
diff --git a/tests/data/test986 b/tests/data/test986
index a709437a4..0ed30452a 100644
--- a/tests/data/test986
+++ b/tests/data/test986
@@ -23,10 +23,10 @@ SSL
<server>
ftp
</server>
- <name>
+<name>
FTP require STARTTLS while preauthenticated
- </name>
-<file name="log/test%TESTNUMBER.txt">
+</name>
+<file name="%LOGDIR/test%TESTNUMBER.txt">
data
to
see
@@ -34,8 +34,8 @@ that FTPS
works
so does it?
</file>
- <command>
---ssl-reqd --ftp-ssl-control ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T log/test%TESTNUMBER.txt -u user:secret
+<command>
+--ssl-reqd --ftp-ssl-control ftp://%HOSTIP:%FTPPORT/%TESTNUMBER -T %LOGDIR/test%TESTNUMBER.txt -u user:secret
</command>
</client>
diff --git a/tests/data/test987 b/tests/data/test987
new file mode 100644
index 000000000..bf926b7fe
--- /dev/null
+++ b/tests/data/test987
@@ -0,0 +1,51 @@
+<testcase>
+<info>
+<keywords>
+SMTPS
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+smtps
+</server>
+<name>
+SMTPS with redundant explicit SSL request
+</name>
+<stdin>
+From: different
+To: another
+
+body
+</stdin>
+<command>
+-k --ssl-reqd --mail-rcpt recipient@example.com --mail-from sender@example.com -T - smtps://%HOSTIP:%SMTPSPORT/%TESTNUMBER
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+EHLO %TESTNUMBER
+MAIL FROM:<sender@example.com>
+RCPT TO:<recipient@example.com>
+DATA
+QUIT
+</protocol>
+<upload>
+From: different
+To: another
+
+body
+.
+</upload>
+</verify>
+</testcase>
diff --git a/tests/data/test988 b/tests/data/test988
new file mode 100644
index 000000000..31e1c8711
--- /dev/null
+++ b/tests/data/test988
@@ -0,0 +1,48 @@
+<testcase>
+<info>
+<keywords>
+IMAPS
+FETCH
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+From: me@somewhere
+To: fake@nowhere
+
+body
+
+--
+ yours sincerely
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+imaps
+</server>
+<name>
+IMAPS FETCH with redundant explicit SSL request
+</name>
+<command>
+-k --ssl-reqd -u '"user:sec"ret{' 'imaps://%HOSTIP:%IMAPSPORT/%TESTNUMBER/;MAILINDEX=1'
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+A001 CAPABILITY
+A002 LOGIN "\"user" "sec\"ret{"
+A003 SELECT %TESTNUMBER
+A004 FETCH 1 BODY[]
+A005 LOGOUT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test989 b/tests/data/test989
new file mode 100644
index 000000000..fa41240a2
--- /dev/null
+++ b/tests/data/test989
@@ -0,0 +1,48 @@
+<testcase>
+<info>
+<keywords>
+POP3S
+RETR
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+From: me@somewhere
+To: fake@nowhere
+
+body
+
+--
+ yours sincerely
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+pop3s
+</server>
+<name>
+POP3S RETR with redundant explicit SSL request
+</name>
+<command>
+-k --ssl-reqd -u user:secret pop3s://%HOSTIP:%POP3SPORT/%TESTNUMBER
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+CAPA
+USER user
+PASS secret
+RETR %TESTNUMBER
+QUIT
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test99 b/tests/data/test99
index 1ed74b0ba..db11a059b 100644
--- a/tests/data/test99
+++ b/tests/data/test99
@@ -40,10 +40,10 @@ large_file
<server>
http
</server>
- <name>
+<name>
HTTP GET with large-file resume point and failed resume
- </name>
- <command>
+</name>
+<command>
http://%HOSTIP:%HTTPPORT/%TESTNUMBER -C 9999999999
</command>
</client>
diff --git a/tests/data/test990 b/tests/data/test990
new file mode 100644
index 000000000..5ddb57f3d
--- /dev/null
+++ b/tests/data/test990
@@ -0,0 +1,57 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+-w
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+use -w %output{}
+</name>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -w '%output{%LOGDIR/output}%{http_code}\n'
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+<file name="%LOGDIR/output" mode="text">
+200
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test991 b/tests/data/test991
new file mode 100644
index 000000000..5a2cc62f3
--- /dev/null
+++ b/tests/data/test991
@@ -0,0 +1,60 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+-w
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data crlf="yes">
+HTTP/1.1 200 OK
+Date: Tue, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+-foo-
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+use -w %output{} append
+</name>
+<file name="%LOGDIR/output" nonewline="yes">
+line one
+</file>
+<command>
+http://%HOSTIP:%HTTPPORT/%TESTNUMBER -w '%output{>>%LOGDIR/output}%{http_code}'
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol crlf="yes">
+GET /%TESTNUMBER HTTP/1.1
+Host: %HOSTIP:%HTTPPORT
+User-Agent: curl/%VERSION
+Accept: */*
+
+</protocol>
+<file name="%LOGDIR/output" nonewline="yes">
+line one200
+</file>
+</verify>
+</testcase>
diff --git a/tests/devtest.pl b/tests/devtest.pl
new file mode 100755
index 000000000..99a25ab66
--- /dev/null
+++ b/tests/devtest.pl
@@ -0,0 +1,202 @@
+#!/usr/bin/env perl
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) Daniel Fandrich, et al.
+#
+# This software is licensed 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 is intended for developers to test some internals of the
+# runtests.pl harness. Don't try to use this unless you know what you're
+# doing!
+
+# An example command-line that starts a test http server for test 11 and waits
+# for the user before stopping it:
+# ./devtest.pl --verbose serverfortest https echo "Started https" protoport https preprocess 11 pause echo Stopping stopservers echo Done
+# curl can connect to the server while it's running like this:
+# curl -vkL https://localhost:<protoport>/11
+
+use strict;
+use warnings;
+use 5.006;
+
+BEGIN {
+ # Define srcdir to the location of the tests source directory. This is
+ # usually set by the Makefile, but for out-of-tree builds with direct
+ # invocation of runtests.pl, it may not be set.
+ if(!defined $ENV{'srcdir'}) {
+ use File::Basename;
+ $ENV{'srcdir'} = dirname(__FILE__);
+ }
+ push(@INC, $ENV{'srcdir'});
+}
+
+use globalconfig;
+use servers qw(
+ initserverconfig
+ protoport
+ serverfortest
+ stopservers
+);
+use runner qw(
+ readtestkeywords
+ singletest_preprocess
+);
+use testutil qw(
+ setlogfunc
+);
+use getpart;
+
+
+#######################################################################
+# logmsg is our general message logging subroutine.
+# This function is currently required to be here by servers.pm
+# This is copied from runtests.pl
+#
+my $uname_release = `uname -r`;
+my $is_wsl = $uname_release =~ /Microsoft$/;
+sub logmsg {
+ for(@_) {
+ my $line = $_;
+ if ($is_wsl) {
+ # use \r\n for WSL shell
+ $line =~ s/\r?\n$/\r\n/g;
+ }
+ print "$line";
+ }
+}
+
+#######################################################################
+# Parse and store the protocols in curl's Protocols: line
+# This is copied from runtests.pl
+#
+sub parseprotocols {
+ my ($line)=@_;
+
+ @protocols = split(' ', lc($line));
+
+ # Generate a "proto-ipv6" version of each protocol to match the
+ # IPv6 <server> name and a "proto-unix" to match the variant which
+ # uses Unix domain sockets. This works even if support isn't
+ # compiled in because the <features> test will fail.
+ push @protocols, map(("$_-ipv6", "$_-unix"), @protocols);
+
+ # 'http-proxy' is used in test cases to do CONNECT through
+ push @protocols, 'http-proxy';
+
+ # 'none' is used in test cases to mean no server
+ push @protocols, 'none';
+}
+
+
+#######################################################################
+# Initialize @protocols from the curl binary under test
+#
+sub init_protocols {
+ for (`$CURL -V 2>/dev/null`) {
+ if(m/^Protocols: (.*)$/) {
+ parseprotocols($1);
+ }
+ }
+}
+
+
+#######################################################################
+# Initialize the test harness to run tests
+#
+sub init_tests {
+ setlogfunc(\&logmsg);
+ init_protocols();
+ initserverconfig();
+}
+
+#######################################################################
+# Main test loop
+
+init_tests();
+
+#***************************************************************************
+# Parse command-line options and commands
+#
+while(@ARGV) {
+ if($ARGV[0] eq "-h") {
+ print "Usage: devtest.pl [--verbose] [command [arg]...]\n";
+ print "command is one of:\n";
+ print " echo X\n";
+ print " pause\n";
+ print " preprocess\n";
+ print " protocols *|X[,Y...]\n";
+ print " protoport X\n";
+ print " serverfortest X[,Y...]\n";
+ print " stopservers\n";
+ print " sleep N\n";
+ exit 0;
+ }
+ elsif($ARGV[0] eq "--verbose") {
+ $verbose = 1;
+ }
+ elsif($ARGV[0] eq "sleep") {
+ shift @ARGV;
+ sleep $ARGV[0];
+ }
+ elsif($ARGV[0] eq "echo") {
+ shift @ARGV;
+ print $ARGV[0] . "\n";
+ }
+ elsif($ARGV[0] eq "pause") {
+ print "Press Enter to continue: ";
+ readline STDIN;
+ }
+ elsif($ARGV[0] eq "protocols") {
+ shift @ARGV;
+ if($ARGV[0] eq "*") {
+ init_protocols();
+ }
+ else {
+ @protocols = split(",", $ARGV[0]);
+ }
+ print "Set " . scalar @protocols . " protocols\n";
+ }
+ elsif($ARGV[0] eq "preprocess") {
+ shift @ARGV;
+ loadtest("${TESTDIR}/test${ARGV[0]}");
+ readtestkeywords();
+ singletest_preprocess($ARGV[0]);
+ }
+ elsif($ARGV[0] eq "protoport") {
+ shift @ARGV;
+ my $port = protoport($ARGV[0]);
+ print "protoport: $port\n";
+ }
+ elsif($ARGV[0] eq "serverfortest") {
+ shift @ARGV;
+ my ($why, $e) = serverfortest(split(/,/, $ARGV[0]));
+ print "serverfortest: $e $why\n";
+ }
+ elsif($ARGV[0] eq "stopservers") {
+ my $err = stopservers();
+ print "stopservers: $err\n";
+ }
+ else {
+ print "Error: Unknown command: $ARGV[0]\n";
+ print "Continuing anyway\n";
+ }
+ shift @ARGV;
+}
diff --git a/tests/dictserver.py b/tests/dictserver.py
index 5e38ffa07..0a08522f4 100755
--- a/tests/dictserver.py
+++ b/tests/dictserver.py
@@ -7,7 +7,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2008 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/tests/directories.pm b/tests/directories.pm
index 641c6af24..238f7e03e 100644
--- a/tests/directories.pm
+++ b/tests/directories.pm
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -21,7 +21,24 @@
# SPDX-License-Identifier: curl
#
###########################################################################
-%file_chmod1 = (
+
+package directories;
+
+use strict;
+use warnings;
+
+BEGIN {
+ use base qw(Exporter);
+
+ our @EXPORT = qw(
+ ftp_contentlist
+ wildcard_filesize
+ wildcard_getfile
+ );
+}
+
+
+my %file_chmod1 = (
'name' => 'chmod1',
'content' => "This file should have permissions 444\n",
'perm' => 'r--r--r--',
@@ -29,7 +46,7 @@
'dostime' => '01-11-10 10:00AM',
);
-%file_chmod2 = (
+my %file_chmod2 = (
'name' => 'chmod2',
'content' => "This file should have permissions 666\n",
'perm' => 'rw-rw-rw-',
@@ -37,7 +54,7 @@
'dostime' => '02-01-10 08:00AM',
);
-%file_chmod3 = (
+my %file_chmod3 = (
'name' => 'chmod3',
'content' => "This file should have permissions 777\n",
'perm' => 'rwxrwxrwx',
@@ -45,7 +62,7 @@
'dostime' => '02-01-10 08:00AM',
);
-%file_chmod4 = (
+my %file_chmod4 = (
'type' => 'd',
'name' => 'chmod4',
'content' => "This file should have permissions 001\n",
@@ -54,7 +71,7 @@
'dostime' => '05-04-10 04:31AM'
);
-%file_chmod5 = (
+my %file_chmod5 = (
'type' => 'd',
'name' => 'chmod5',
'content' => "This file should have permissions 110\n",
@@ -63,7 +80,7 @@
'dostime' => '05-04-10 04:31AM'
);
-%link_link = (
+my %link_link = (
'type' => 'l',
'name' => 'link -> file.txt',
'size' => '8',
@@ -71,7 +88,7 @@
'time' => 'Jan 6 4:42'
);
-%link_link_absolute = (
+my %link_link_absolute = (
'type' => 'l',
'name' => 'link_absolute -> /data/ftp/file.txt',
'size' => '15',
@@ -79,7 +96,7 @@
'time' => 'Jan 6 4:45'
);
-%dir_dot = (
+my %dir_dot = (
'type' => "d",
'name' => ".",
'hlink' => "4",
@@ -89,7 +106,7 @@
'perm' => "rwxrwxrwx"
);
-%dir_ddot = (
+my %dir_ddot = (
'type' => "d",
'name' => "..",
'hlink' => "4",
@@ -99,7 +116,7 @@
'perm' => "rwxrwxrwx"
);
-%dir_weirddir_txt = (
+my %dir_weirddir_txt = (
'type' => "d",
'name' => "weirddir.txt",
'hlink' => "2",
@@ -109,7 +126,7 @@
'perm' => "rwxr-xrwx"
);
-%dir_UNIX = (
+my %dir_UNIX = (
'type' => "d",
'name' => "UNIX",
'hlink' => "11",
@@ -119,7 +136,7 @@
'perm' => "rwx--x--x"
);
-%dir_DOS = (
+my %dir_DOS = (
'type' => "d",
'name' => "DOS",
'hlink' => "11",
@@ -129,7 +146,7 @@
'perm' => "rwx--x--x"
);
-%dir_dot_NeXT = (
+my %dir_dot_NeXT = (
'type' => "d",
'name' => ".NeXT",
'hlink' => "4",
@@ -139,7 +156,7 @@
'perm' => "rwxrwxrwx"
);
-%file_empty_file_dat = (
+my %file_empty_file_dat = (
'name' => "empty_file.dat",
'content' => "",
'perm' => "rw-r--r--",
@@ -147,7 +164,7 @@
'dostime' => "04-27-10 11:01AM"
);
-%file_file_txt = (
+my %file_file_txt = (
'name' => "file.txt",
'content' => "This is content of file \"file.txt\"\n",
'time' => "Apr 27 11:01",
@@ -155,7 +172,7 @@
'perm' => "rw-r--r--"
);
-%file_someothertext_txt = (
+my %file_someothertext_txt = (
'name' => "someothertext.txt",
'content' => "Some junk ;-) This file does not really exist.\n",
'time' => "Apr 27 11:01",
@@ -163,7 +180,7 @@
'perm' => "rw-r--r--"
);
-%lists = (
+my %lists = (
'/fully_simulated/' => {
'files' => [ \%dir_dot, \%dir_ddot, \%dir_DOS, \%dir_UNIX ],
'eol' => "\r\n",
@@ -188,12 +205,12 @@
}
);
-sub ftp_createcontent($) {
- my (%list) = @_;
+sub ftp_createcontent {
+ my ($list) = $_[0];
- $type = $$list{'type'};
- $eol = $$list{'eol'};
- $list_ref = $$list{'files'};
+ my $type = $$list{'type'};
+ my $eol = $$list{'eol'};
+ my $list_ref = $$list{'files'};
my @diroutput;
my @contentlist;
@@ -206,11 +223,11 @@ sub ftp_createcontent($) {
my $fuser = $file{'user'} ? sprintf("%15s", $file{'user'}) : "ftp-default";
my $fgroup = $file{'group'} ? sprintf("%15s", $file{'group'}) : "ftp-default";
my $fsize = "";
- if($file{'type'} eq "d") {
+ if(exists($file{'type'}) && $file{'type'} eq "d") {
$fsize = $file{'size'} ? sprintf("%7s", $file{'size'}) : sprintf("%7d", 4096);
}
else {
- $fsize = sprintf("%7d", length $file{'content'});
+ $fsize = sprintf("%7d", exists($file{'content'}) ? length $file{'content'} : 0);
}
my $fhlink = $file{'hlink'} ? sprintf("%4d", $file{'hlink'}) : " 1";
my $ftime = $file{'time'} ? sprintf("%10s", $file{'time'}) : "Jan 9 1933";
@@ -225,7 +242,7 @@ sub ftp_createcontent($) {
my $line = "";
my $time = $file{'dostime'} ? $file{'dostime'} : "06-25-97 09:12AM";
my $size_or_dir;
- if($file{'type'} =~ /^d$/) {
+ if(exists($file{'type'}) && $file{'type'} =~ /^d$/) {
$size_or_dir = " <DIR> ";
}
else {
@@ -237,9 +254,9 @@ sub ftp_createcontent($) {
}
}
-sub wildcard_filesize($$) {
+sub wildcard_filesize {
my ($list_type, $file) = @_;
- $list = $lists{$list_type};
+ my $list = $lists{$list_type};
if($list) {
my $files = $list->{'files'};
for(@$files) {
@@ -259,9 +276,10 @@ sub wildcard_filesize($$) {
}
return -1;
}
-sub wildcard_getfile($$) {
+
+sub wildcard_getfile {
my ($list_type, $file) = @_;
- $list = $lists{$list_type};
+ my $list = $lists{$list_type};
if($list) {
my $files = $list->{'files'};
for(@$files) {
@@ -270,7 +288,7 @@ sub wildcard_getfile($$) {
if($f{'content'}) {
return (length $f{'content'}, $f{'content'});
}
- elsif ($f{'type'} ne "d"){
+ elsif (!exists($f{'type'}) or $f{'type'} ne "d"){
return (0, "");
}
else {
@@ -284,6 +302,6 @@ sub wildcard_getfile($$) {
sub ftp_contentlist {
my $listname = $_[0];
- $list = $lists{$listname};
- return ftp_createcontent(\$list);
+ my $list = $lists{$listname};
+ return ftp_createcontent($list);
}
diff --git a/tests/disable-scan.pl b/tests/disable-scan.pl
index 5d09bff27..b6f3179cf 100755
--- a/tests/disable-scan.pl
+++ b/tests/disable-scan.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2010 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -29,6 +29,8 @@ use warnings;
# the DISABLE options that can be set by configure
my %disable;
+# the DISABLE options that can be set by CMakeLists.txt
+my %disable_cmake;
# the DISABLE options that are used in C files
my %file;
# the DISABLE options that are documented
@@ -61,6 +63,24 @@ sub scan_configure {
}
}
+sub scanconf_cmake {
+ my ($f)=@_;
+ open S, "<$f";
+ while(<S>) {
+ if(/(CURL_DISABLE_[A-Z_]+)/g) {
+ my ($sym)=($1);
+ if(not $sym =~ /(CURL_DISABLE_INSTALL|CURL_DISABLE_TESTS|CURL_DISABLE_SRP)/) {
+ $disable_cmake{$sym} = 1;
+ }
+ }
+ }
+ close S;
+}
+
+sub scan_cmake {
+ scanconf_cmake("$root/CMakeLists.txt");
+}
+
sub scan_file {
my ($source)=@_;
open F, "<$source";
@@ -104,6 +124,7 @@ sub scan_docs {
}
scan_configure();
+scan_cmake();
scan_sources();
scan_docs();
@@ -121,12 +142,28 @@ for my $s (sort keys %disable) {
}
}
+# Check the CMakeLists.txt symbols for use in code
+for my $s (sort keys %disable_cmake) {
+ if(!$file{$s}) {
+ printf "Present in CMakeLists.txt, not used by code: %s\n", $s;
+ $error++;
+ }
+ if(!$docs{$s}) {
+ printf "Present in CMakeLists.txt, not documented in $DOCS: %s\n", $s;
+ $error++;
+ }
+}
+
# Check the code symbols for use in configure
for my $s (sort keys %file) {
if(!$disable{$s}) {
printf "Not set by configure: %s (%s)\n", $s, $file{$s};
$error++;
}
+ if(!$disable_cmake{$s}) {
+ printf "Not set by CMakeLists.txt: %s (%s)\n", $s, $file{$s};
+ $error++;
+ }
if(!$docs{$s}) {
printf "Used in code, not documented in $DOCS: %s\n", $s;
$error++;
@@ -139,6 +176,10 @@ for my $s (sort keys %docs) {
printf "Documented but not in configure: %s\n", $s;
$error++;
}
+ if(!$disable_cmake{$s}) {
+ printf "Documented but not in CMakeLists.txt: %s\n", $s;
+ $error++;
+ }
if(!$file{$s}) {
printf "Documented, but not used by code: %s\n", $s;
$error++;
diff --git a/tests/error-codes.pl b/tests/error-codes.pl
index 5d28886cf..8147ef6d0 100644..100755
--- a/tests/error-codes.pl
+++ b/tests/error-codes.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2010 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -35,8 +35,8 @@ my %error; # from the include file
my %docs; # from libcurl-errors.3
sub getdocserrors {
- open(F, "<$root/docs/libcurl/libcurl-errors.3");
- while(<F>) {
+ open(my $f, "<", "$root/docs/libcurl/libcurl-errors.3");
+ while(<$f>) {
if($_ =~ /^.IP \"(CURL[EM]_[^ \t\"]*)/) {
my ($symbol) = ($1);
if($symbol =~ /OBSOLETE/) {
@@ -47,12 +47,12 @@ sub getdocserrors {
}
}
}
- close(F);
+ close($f);
}
sub getincludeerrors {
- open(F, "<$root/docs/libcurl/symbols-in-versions");
- while(<F>) {
+ open(my $f, "<", "$root/docs/libcurl/symbols-in-versions");
+ while(<$f>) {
if($_ =~ /^(CURL[EM]_[^ \t]*)[ \t]*([0-9.]+)[ \t]*(.*)/) {
my ($symbol, $added, $rest) = ($1,$2,$3);
if($rest =~ /^([0-9.]+)/) {
@@ -63,7 +63,7 @@ sub getincludeerrors {
}
}
}
- close(F);
+ close($f);
}
getincludeerrors();
diff --git a/tests/extern-scan.pl b/tests/extern-scan.pl
index ac089f75f..d8f46ee3b 100755
--- a/tests/extern-scan.pl
+++ b/tests/extern-scan.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2010 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -28,18 +28,41 @@
use strict;
use warnings;
+my $sort = 0;
+
# we may get the dir root pointed out
-my $root=$ARGV[0] || ".";
+my $root = shift @ARGV;
+while(defined $root) {
+
+ if($root =~ /--heading=(.*)/) {
+ print "$1\n";
+ $root = shift @ARGV;
+ next;
+ }
+ elsif($root =~ /--sort/) {
+ $sort = 1;
+ $root = shift @ARGV;
+ next;
+ }
-my @incs = (
- "$root/include/curl/curl.h",
- "$root/include/curl/easy.h",
- "$root/include/curl/mprintf.h",
- "$root/include/curl/multi.h",
- "$root/include/curl/urlapi.h",
- "$root/include/curl/options.h",
- "$root/include/curl/header.h",
- );
+ last;
+}
+
+if(!defined $root) {
+ $root = ".";
+}
+
+$root = "$root/include/curl";
+opendir(D, "$root") || die "Cannot open directory $root: $!\n";
+my @dir = readdir(D);
+closedir(D);
+
+my @incs;
+foreach (sort(@dir)) {
+ if($_ =~ /\.h$/) {
+ push(@incs, "$root/$_");
+ }
+}
my $verbose=0;
my $summary=0;
@@ -49,15 +72,18 @@ my @syms;
my %doc;
my %rem;
-sub scanheader {
- my ($f)=@_;
+my @out;
+foreach my $f (@incs) {
open H, "<$f" || die;
my $first = "";
while(<H>) {
- if (/^(^CURL_EXTERN .*)\(/) {
+ s/CURL_DEPRECATED\(.*"\)//;
+ s/ */ /g;
+ if (/^(^CURL_EXTERN .*?)\(/) {
my $decl = $1;
$decl =~ s/\r$//;
- print "$decl\n";
+ $decl =~ /([a-z_]+)$/;
+ push(@out, "$1");
}
elsif (/^(^CURL_EXTERN .*)/) {
# handle two-line declarations
@@ -66,11 +92,12 @@ sub scanheader {
$first = $decl;
}
elsif($first) {
- if (/^(.*)\(/) {
+ if (/^ *(.*)\(/) {
my $decl = $1;
$decl =~ s/\r$//;
$first .= $decl;
- print "$first\n";
+ $first =~ /([a-z_]+)$/;
+ push(@out, "$1");
}
$first = "";
}
@@ -78,6 +105,10 @@ sub scanheader {
close H;
}
-foreach my $i (@incs) {
- scanheader($i);
+if($sort) {
+ @out = sort(@out);
+}
+
+foreach (@out) {
+ print("$_\n");
}
diff --git a/tests/ftpserver.pl b/tests/ftpserver.pl
index 422fdc2cc..d0be36f15 100755
--- a/tests/ftpserver.pl
+++ b/tests/ftpserver.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -40,27 +40,31 @@
# All socket/network/TCP related stuff is done by the 'sockfilt' program.
#
+use strict;
+use warnings;
+
BEGIN {
push(@INC, $ENV{'srcdir'}) if(defined $ENV{'srcdir'});
push(@INC, ".");
- # sub second timestamping needs Time::HiRes
- eval {
- no warnings "all";
- require Time::HiRes;
- import Time::HiRes qw( gettimeofday );
- }
}
-use strict;
-use warnings;
use IPC::Open2;
use Digest::MD5;
+use File::Basename;
-require "getpart.pm";
-require "ftp.pm";
-require "directories.pm";
+use directories;
+
+use getpart qw(
+ getpartattr
+ getpart
+ loadtest
+ );
+
+use processhelp;
use serverhelp qw(
+ logmsg
+ $logfile
servername_str
server_pidfilename
server_logfilename
@@ -70,10 +74,15 @@ use serverhelp qw(
datasockf_logfilename
);
-use sshhelp qw(
+use pathhelp qw(
exe_ext
);
+use globalconfig qw(
+ $SERVERCMD
+ $LOCKDIR
+ );
+
#**********************************************************************
# global vars...
#
@@ -85,9 +94,10 @@ my $proto = 'ftp'; # default server protocol
my $srcdir; # directory where ftpserver.pl is located
my $srvrname; # server name for presentation purposes
my $cwd_testno; # test case numbers extracted from CWD command
-my $testno = 0; # test case number (read from ftpserver.cmd)
+my $testno = 0; # test case number (read from server.cmd)
my $path = '.';
my $logdir = $path .'/log';
+my $piddir;
#**********************************************************************
# global vars used for server address and primary listener port
@@ -98,9 +108,9 @@ my $listenaddr = '127.0.0.1'; # default address for listener port
#**********************************************************************
# global vars used for file names
#
+my $PORTFILE="ftpserver.port"; # server port file name
+my $portfile; # server port file path
my $pidfile; # server pid file name
-my $portfile=".ftpserver.port"; # server port file name
-my $logfile; # server log file name
my $mainsockf_pidfile; # pid file for primary connection sockfilt process
my $mainsockf_logfile; # log file for primary connection sockfilt process
my $datasockf_pidfile; # pid file for secondary connection sockfilt process
@@ -109,7 +119,7 @@ my $datasockf_logfile; # log file for secondary connection sockfilt process
#**********************************************************************
# global vars used for server logs advisor read lock handling
#
-my $SERVERLOGS_LOCK = 'log/serverlogs.lock';
+my $serverlogs_lockfile;
my $serverlogslocked = 0;
#**********************************************************************
@@ -141,6 +151,7 @@ my $ctrldelay; # set if server should throttle ctrl stream
my $datadelay; # set if server should throttle data stream
my $retrweirdo; # set if ftp server should use RETRWEIRDO
my $retrnosize; # set if ftp server should use RETRNOSIZE
+my $retrsize; # set if ftp server should use RETRSIZE
my $pasvbadip; # set if ftp server should use PASVBADIP
my $nosave; # set if ftp server should not save uploaded data
my $nodataconn; # set if ftp srvr doesn't establish or accepts data channel
@@ -195,48 +206,23 @@ my $POP3_TIMESTAMP = "<1972.987654321\@curl>";
sub exit_signal_handler {
my $signame = shift;
# For now, simply mimic old behavior.
- killsockfilters($proto, $ipvnum, $idnum, $verbose);
+ killsockfilters($piddir, $proto, $ipvnum, $idnum, $verbose);
unlink($pidfile);
unlink($portfile);
if($serverlogslocked) {
$serverlogslocked = 0;
- clear_advisor_read_lock($SERVERLOGS_LOCK);
+ clear_advisor_read_lock($serverlogs_lockfile);
}
exit;
}
-#**********************************************************************
-# logmsg is general message logging subroutine for our test servers.
-#
-sub logmsg {
- my $now;
- # sub second timestamping needs Time::HiRes
- if($Time::HiRes::VERSION) {
- my ($seconds, $usec) = gettimeofday();
- my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
- localtime($seconds);
- $now = sprintf("%02d:%02d:%02d.%06d ", $hour, $min, $sec, $usec);
- }
- else {
- my $seconds = time();
- my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
- localtime($seconds);
- $now = sprintf("%02d:%02d:%02d ", $hour, $min, $sec);
- }
- if(open(LOGFILEFH, ">>$logfile")) {
- print LOGFILEFH $now;
- print LOGFILEFH @_;
- close(LOGFILEFH);
- }
-}
-
sub ftpmsg {
# append to the server.input file
- open(INPUT, ">>log/server$idstr.input") ||
- logmsg "failed to open log/server$idstr.input\n";
+ open(my $input, ">>", "$logdir/server$idstr.input") ||
+ logmsg "failed to open $logdir/server$idstr.input\n";
- print INPUT @_;
- close(INPUT);
+ print $input @_;
+ close($input);
# use this, open->print->close system only to make the file
# open as little as possible, to make the test suite run
@@ -395,12 +381,12 @@ sub sysread_or_die {
logmsg "Error: $srvrname server, sysread error: $!\n";
logmsg "Exited from sysread_or_die() at $fcaller " .
"line $lcaller. $srvrname server, sysread error: $!\n";
- killsockfilters($proto, $ipvnum, $idnum, $verbose);
+ killsockfilters($piddir, $proto, $ipvnum, $idnum, $verbose);
unlink($pidfile);
unlink($portfile);
if($serverlogslocked) {
$serverlogslocked = 0;
- clear_advisor_read_lock($SERVERLOGS_LOCK);
+ clear_advisor_read_lock($serverlogs_lockfile);
}
exit;
}
@@ -410,12 +396,12 @@ sub sysread_or_die {
logmsg "Error: $srvrname server, read zero\n";
logmsg "Exited from sysread_or_die() at $fcaller " .
"line $lcaller. $srvrname server, read zero\n";
- killsockfilters($proto, $ipvnum, $idnum, $verbose);
+ killsockfilters($piddir, $proto, $ipvnum, $idnum, $verbose);
unlink($pidfile);
unlink($portfile);
if($serverlogslocked) {
$serverlogslocked = 0;
- clear_advisor_read_lock($SERVERLOGS_LOCK);
+ clear_advisor_read_lock($serverlogs_lockfile);
}
exit;
}
@@ -424,27 +410,28 @@ sub sysread_or_die {
}
sub startsf {
- my $mainsockfcmd = "./server/sockfilt".exe_ext('SRV')." " .
- "--ipv$ipvnum --port $port " .
- "--pidfile \"$mainsockf_pidfile\" " .
- "--portfile \"$portfile\" " .
- "--logfile \"$mainsockf_logfile\"";
- $sfpid = open2(*SFREAD, *SFWRITE, $mainsockfcmd);
+ my @mainsockfcmd = ("./server/sockfilt".exe_ext('SRV'),
+ "--ipv$ipvnum",
+ "--port", $port,
+ "--pidfile", $mainsockf_pidfile,
+ "--portfile", $portfile,
+ "--logfile", $mainsockf_logfile);
+ $sfpid = open2(*SFREAD, *SFWRITE, @mainsockfcmd);
- print STDERR "$mainsockfcmd\n" if($verbose);
+ print STDERR "@mainsockfcmd\n" if($verbose);
print SFWRITE "PING\n";
my $pong;
sysread_or_die(\*SFREAD, \$pong, 5);
if($pong !~ /^PONG/) {
- logmsg "Failed sockfilt command: $mainsockfcmd\n";
- killsockfilters($proto, $ipvnum, $idnum, $verbose);
+ logmsg "Failed sockfilt command: @mainsockfcmd\n";
+ killsockfilters($piddir, $proto, $ipvnum, $idnum, $verbose);
unlink($pidfile);
unlink($portfile);
if($serverlogslocked) {
$serverlogslocked = 0;
- clear_advisor_read_lock($SERVERLOGS_LOCK);
+ clear_advisor_read_lock($serverlogs_lockfile);
}
die "Failed to start sockfilt!";
}
@@ -683,6 +670,51 @@ sub protocolsetup {
}
}
+# Perform the disconnecgt handshake with sockfilt on the secondary connection
+# (the only connection we actively disconnect).
+# This involves waiting for the disconnect acknowledgmeent after the DISC
+# command, while throwing away anything else that might come in before
+# that.
+sub disc_handshake {
+ print DWRITE "DISC\n";
+ my $line;
+ my $nr;
+ while (5 == ($nr = sysread DREAD, $line, 5)) {
+ if($line eq "DATA\n") {
+ # Must read the data bytes to stay in sync
+ my $i;
+ sysread DREAD, $i, 5;
+
+ my $size = 0;
+ if($i =~ /^([0-9a-fA-F]{4})\n/) {
+ $size = hex($1);
+ }
+
+ read_datasockf(\$line, $size);
+
+ logmsg "> Throwing away $size bytes on closed connection\n";
+ }
+ elsif($line eq "DISC\n") {
+ logmsg "Fancy that; client wants to DISC, too\n";
+ printf DWRITE "ACKD\n";
+ }
+ elsif($line eq "ACKD\n") {
+ # Got the ack we were waiting for
+ last;
+ }
+ else {
+ logmsg "Ignoring: $line";
+ # sockfilt should not be sending us any other commands
+ }
+ }
+ if(!defined($nr)) {
+ logmsg "Error: pipe read error ($!) while waiting for ACKD";
+ }
+ elsif($nr <= 0) {
+ logmsg "Error: pipe EOF while waiting for ACKD";
+ }
+}
+
sub close_dataconn {
my ($closed)=@_; # non-zero if already disconnected
@@ -693,9 +725,7 @@ sub close_dataconn {
if(!$closed) {
if($datapid > 0) {
logmsg "Server disconnects $datasockf_mode DATA connection\n";
- print DWRITE "DISC\n";
- my $i;
- sysread DREAD, $i, 5;
+ disc_handshake();
logmsg "Server disconnected $datasockf_mode DATA connection\n";
}
else {
@@ -887,7 +917,7 @@ sub RCPT_smtp {
/^<([a-zA-Z0-9._%+-]+)\@(([a-zA-Z0-9-]+)\.)+([a-zA-Z]{2,4})>$/) ||
($smtputf8 && $to =~
/^<([a-zA-Z0-9\x{80}-\x{ff}._%+-]+)\@(([a-zA-Z0-9\x{80}-\x{ff}-]+)\.)+([a-zA-Z]{2,4})>$/)) {
- sendcontrol "250 Recipient OK\r\n";
+ sendcontrol "250 Recipient OK\r\n";
}
else {
sendcontrol "501 Invalid address\r\n";
@@ -910,11 +940,11 @@ sub DATA_smtp {
sendcontrol "354 Show me the mail\r\n";
my $testno = $smtp_client;
- my $filename = "log/upload.$testno";
+ my $filename = "$logdir/upload.$testno";
logmsg "Store test number $testno in $filename\n";
- open(FILE, ">$filename") ||
+ open(my $file, ">", "$filename") ||
return 0; # failed to open output
my $line;
@@ -935,7 +965,7 @@ sub DATA_smtp {
read_mainsockf(\$line, $size);
$ulsize += $size;
- print FILE $line if(!$nosave);
+ print $file $line if(!$nosave);
$raw .= $line;
if($raw =~ /(?:^|\x0d\x0a)\x2e\x0d\x0a/) {
@@ -953,6 +983,7 @@ sub DATA_smtp {
elsif($line eq "DISC\n") {
# disconnect!
$disc=1;
+ printf SFWRITE "ACKD\n";
last;
}
else {
@@ -962,10 +993,10 @@ sub DATA_smtp {
}
if($nosave) {
- print FILE "$ulsize bytes would've been stored here\n";
+ print $file "$ulsize bytes would've been stored here\n";
}
- close(FILE);
+ close($file);
logmsg "received $ulsize bytes upload\n";
@@ -1259,11 +1290,11 @@ sub APPEND_imap {
sendcontrol "+ Ready for literal data\r\n";
my $testno = $mailbox;
- my $filename = "log/upload.$testno";
+ my $filename = "$logdir/upload.$testno";
logmsg "Store test number $testno in $filename\n";
- open(FILE, ">$filename") ||
+ open(my $file, ">", "$filename") ||
return 0; # failed to open output
my $received = 0;
@@ -1284,7 +1315,7 @@ sub APPEND_imap {
if($datasize > 0) {
logmsg "> Appending $datasize bytes to file\n";
- print FILE substr($line, 0, $datasize) if(!$nosave);
+ print $file substr($line, 0, $datasize) if(!$nosave);
$line = substr($line, $datasize);
$received += $datasize;
@@ -1299,6 +1330,7 @@ sub APPEND_imap {
}
elsif($line eq "DISC\n") {
logmsg "Unexpected disconnect!\n";
+ printf SFWRITE "ACKD\n";
last;
}
else {
@@ -1308,10 +1340,10 @@ sub APPEND_imap {
}
if($nosave) {
- print FILE "$size bytes would've been stored here\n";
+ print $file "$size bytes would've been stored here\n";
}
- close(FILE);
+ close($file);
logmsg "received $size bytes upload\n";
@@ -1834,7 +1866,7 @@ sub LIST_pop3 {
# This is a built-in fake-message list
my @data = (
"1 100\r\n",
- "2 4294967400\r\n", # > 4 GB
+ "2 4294967400\r\n", # > 4 GB
"3 200\r\n",
);
@@ -2343,6 +2375,9 @@ sub RETR_ftp {
if($retrnosize) {
$sz = "size?";
}
+ elsif($retrsize > 0) {
+ $sz = "($retrsize bytes)";
+ }
sendcontrol "150 Binary data connection for $testno () $sz.\r\n";
@@ -2363,7 +2398,7 @@ sub RETR_ftp {
sub STOR_ftp {
my $testno=$_[0];
- my $filename = "log/upload.$testno";
+ my $filename = "$logdir/upload.$testno";
if($datasockf_conn eq 'no') {
if($nodataconn425) {
@@ -2388,7 +2423,7 @@ sub STOR_ftp {
sendcontrol "125 Gimme gimme gimme!\r\n";
- open(FILE, ">$filename") ||
+ open(my $file, ">", "$filename") ||
return 0; # failed to open output
my $line;
@@ -2409,12 +2444,13 @@ sub STOR_ftp {
#print STDERR " GOT: $size bytes\n";
$ulsize += $size;
- print FILE $line if(!$nosave);
+ print $file $line if(!$nosave);
logmsg "> Appending $size bytes to file\n";
}
elsif($line eq "DISC\n") {
# disconnect!
$disc=1;
+ printf DWRITE "ACKD\n";
last;
}
else {
@@ -2427,9 +2463,9 @@ sub STOR_ftp {
}
}
if($nosave) {
- print FILE "$ulsize bytes would've been stored here\n";
+ print $file "$ulsize bytes would've been stored here\n";
}
- close(FILE);
+ close($file);
close_dataconn($disc);
logmsg "received $ulsize bytes upload\n";
if($storeresp) {
@@ -2444,11 +2480,10 @@ sub STOR_ftp {
sub PASV_ftp {
my ($arg, $cmd)=@_;
my $pasvport;
- my $bindonly = ($nodataconn) ? '--bindonly' : '';
# kill previous data connection sockfilt when alive
if($datasockf_runs eq 'yes') {
- killsockfilters($proto, $ipvnum, $idnum, $verbose, 'data');
+ killsockfilters($piddir, $proto, $ipvnum, $idnum, $verbose, 'data');
logmsg "DATA sockfilt for $datasockf_mode data channel killed\n";
}
datasockf_state('STOPPED');
@@ -2458,11 +2493,14 @@ sub PASV_ftp {
logmsg "DATA sockfilt for passive data channel starting...\n";
# We fire up a new sockfilt to do the data transfer for us.
- my $datasockfcmd = "./server/sockfilt".exe_ext('SRV')." " .
- "--ipv$ipvnum $bindonly --port 0 " .
- "--pidfile \"$datasockf_pidfile\" " .
- "--logfile \"$datasockf_logfile\"";
- $slavepid = open2(\*DREAD, \*DWRITE, $datasockfcmd);
+ my @datasockfcmd = ("./server/sockfilt".exe_ext('SRV'),
+ "--ipv$ipvnum", "--port", 0,
+ "--pidfile", $datasockf_pidfile,
+ "--logfile", $datasockf_logfile);
+ if($nodataconn) {
+ push(@datasockfcmd, '--bindonly');
+ }
+ $slavepid = open2(\*DREAD, \*DWRITE, @datasockfcmd);
if($nodataconn) {
datasockf_state('PASSIVE_NODATACONN');
@@ -2471,7 +2509,7 @@ sub PASV_ftp {
datasockf_state('PASSIVE');
}
- print STDERR "$datasockfcmd\n" if($verbose);
+ print STDERR "@datasockfcmd\n" if($verbose);
print DWRITE "PING\n";
my $pong;
@@ -2489,7 +2527,7 @@ sub PASV_ftp {
logmsg "DATA sockfilt unexpected response: $pong\n";
logmsg "DATA sockfilt for passive data channel failed\n";
logmsg "DATA sockfilt killed now\n";
- killsockfilters($proto, $ipvnum, $idnum, $verbose, 'data');
+ killsockfilters($piddir, $proto, $ipvnum, $idnum, $verbose, 'data');
logmsg "DATA sockfilt not running\n";
datasockf_state('STOPPED');
sendcontrol "500 no free ports!\r\n";
@@ -2528,7 +2566,7 @@ sub PASV_ftp {
logmsg "DATA sockfilt unknown listener port\n";
logmsg "DATA sockfilt for passive data channel failed\n";
logmsg "DATA sockfilt killed now\n";
- killsockfilters($proto, $ipvnum, $idnum, $verbose, 'data');
+ killsockfilters($piddir, $proto, $ipvnum, $idnum, $verbose, 'data');
logmsg "DATA sockfilt not running\n";
datasockf_state('STOPPED');
sendcontrol "500 no free ports!\r\n";
@@ -2573,7 +2611,7 @@ sub PASV_ftp {
local $SIG{ALRM} = sub { die "alarm\n" };
# assume swift operations unless explicitly slow
- alarm ($datadelay?20:10);
+ alarm ($datadelay?20:2);
# Wait for 'CNCT'
my $input;
@@ -2598,7 +2636,7 @@ sub PASV_ftp {
"on port $pasvport\n";
logmsg "accept failed or connection not even attempted\n";
logmsg "DATA sockfilt killed now\n";
- killsockfilters($proto, $ipvnum, $idnum, $verbose, 'data');
+ killsockfilters($piddir, $proto, $ipvnum, $idnum, $verbose, 'data');
logmsg "DATA sockfilt not running\n";
datasockf_state('STOPPED');
return;
@@ -2622,7 +2660,7 @@ sub PORT_ftp {
# kill previous data connection sockfilt when alive
if($datasockf_runs eq 'yes') {
- killsockfilters($proto, $ipvnum, $idnum, $verbose, 'data');
+ killsockfilters($piddir, $proto, $ipvnum, $idnum, $verbose, 'data');
logmsg "DATA sockfilt for $datasockf_mode data channel killed\n";
}
datasockf_state('STOPPED');
@@ -2677,15 +2715,15 @@ sub PORT_ftp {
logmsg "DATA sockfilt for active data channel starting...\n";
# We fire up a new sockfilt to do the data transfer for us.
- my $datasockfcmd = "./server/sockfilt".exe_ext('SRV')." " .
- "--ipv$ipvnum --connect $port --addr \"$addr\" " .
- "--pidfile \"$datasockf_pidfile\" " .
- "--logfile \"$datasockf_logfile\"";
- $slavepid = open2(\*DREAD, \*DWRITE, $datasockfcmd);
+ my @datasockfcmd = ("./server/sockfilt".exe_ext('SRV'),
+ "--ipv$ipvnum", "--connect", $port, "--addr", $addr,
+ "--pidfile", $datasockf_pidfile,
+ "--logfile", $datasockf_logfile);
+ $slavepid = open2(\*DREAD, \*DWRITE, @datasockfcmd);
datasockf_state('ACTIVE');
- print STDERR "$datasockfcmd\n" if($verbose);
+ print STDERR "@datasockfcmd\n" if($verbose);
print DWRITE "PING\n";
my $pong;
@@ -2703,7 +2741,7 @@ sub PORT_ftp {
logmsg "DATA sockfilt unexpected response: $pong\n";
logmsg "DATA sockfilt for active data channel failed\n";
logmsg "DATA sockfilt killed now\n";
- killsockfilters($proto, $ipvnum, $idnum, $verbose, 'data');
+ killsockfilters($piddir, $proto, $ipvnum, $idnum, $verbose, 'data');
logmsg "DATA sockfilt not running\n";
datasockf_state('STOPPED');
# client shall timeout awaiting connection from server
@@ -2795,6 +2833,7 @@ sub customize {
$datadelay = 0; # default is no throttling of the data stream
$retrweirdo = 0; # default is no use of RETRWEIRDO
$retrnosize = 0; # default is no use of RETRNOSIZE
+ $retrsize = 0; # default is no use of RETRSIZE
$pasvbadip = 0; # default is no use of PASVBADIP
$nosave = 0; # default is to actually save uploaded data to file
$nodataconn = 0; # default is to establish or accept data channel
@@ -2810,12 +2849,12 @@ sub customize {
%customcount = (); #
%delayreply = (); #
- open(CUSTOM, "<log/ftpserver.cmd") ||
+ open(my $custom, "<", "$logdir/$SERVERCMD") ||
return 1;
- logmsg "FTPD: Getting commands from log/ftpserver.cmd\n";
+ logmsg "FTPD: Getting commands from $logdir/$SERVERCMD\n";
- while(<CUSTOM>) {
+ while(<$custom>) {
if($_ =~ /REPLY \"([A-Z]+ [A-Za-z0-9+-\/=\*. ]+)\" (.*)/) {
$fulltextreply{$1}=eval "qq{$2}";
logmsg "FTPD: set custom reply for $1\n";
@@ -2862,6 +2901,10 @@ sub customize {
logmsg "FTPD: instructed to use RETRNOSIZE\n";
$retrnosize=1;
}
+ elsif($_ =~ /RETRSIZE (\d+)/) {
+ $retrsize= $1;
+ logmsg "FTPD: instructed to use RETRSIZE = $1\n";
+ }
elsif($_ =~ /PASVBADIP/) {
logmsg "FTPD: instructed to use PASVBADIP\n";
$pasvbadip=1;
@@ -2915,7 +2958,7 @@ sub customize {
logmsg "FTPD: run test case number: $testno\n";
}
}
- close(CUSTOM);
+ close($custom);
}
#----------------------------------------------------------------------
@@ -2936,6 +2979,7 @@ sub customize {
# --pidfile # server pid file
# --portfile # server port file
# --logfile # server log file
+# --logdir # server log directory
# --ipv4 # server IP version 4
# --ipv6 # server IP version 6
# --port # server listener port
@@ -2984,6 +3028,12 @@ while(@ARGV) {
shift @ARGV;
}
}
+ elsif($ARGV[0] eq '--logdir') {
+ if($ARGV[1]) {
+ $logdir = $ARGV[1];
+ shift @ARGV;
+ }
+ }
elsif($ARGV[0] eq '--ipv4') {
$ipvnum = 4;
$listenaddr = '127.0.0.1' if($listenaddr eq '::1');
@@ -3021,29 +3071,37 @@ while(@ARGV) {
# Initialize command line option dependent variables
#
+if($pidfile) {
+ # Use our pidfile directory to store the other pidfiles
+ $piddir = dirname($pidfile);
+}
+else {
+ # Use the current directory to store all the pidfiles
+ $piddir = $path;
+ $pidfile = server_pidfilename($piddir, $proto, $ipvnum, $idnum);
+}
+if(!$portfile) {
+ $portfile = $piddir . "/" . $PORTFILE;
+}
if(!$srcdir) {
$srcdir = $ENV{'srcdir'} || '.';
}
-if(!$pidfile) {
- $pidfile = "$path/". server_pidfilename($proto, $ipvnum, $idnum);
-}
if(!$logfile) {
$logfile = server_logfilename($logdir, $proto, $ipvnum, $idnum);
}
-$mainsockf_pidfile = "$path/".
- mainsockf_pidfilename($proto, $ipvnum, $idnum);
+$mainsockf_pidfile = mainsockf_pidfilename($piddir, $proto, $ipvnum, $idnum);
$mainsockf_logfile =
mainsockf_logfilename($logdir, $proto, $ipvnum, $idnum);
if($proto eq 'ftp') {
- $datasockf_pidfile = "$path/".
- datasockf_pidfilename($proto, $ipvnum, $idnum);
+ $datasockf_pidfile = datasockf_pidfilename($piddir, $proto, $ipvnum, $idnum);
$datasockf_logfile =
datasockf_logfilename($logdir, $proto, $ipvnum, $idnum);
}
$srvrname = servername_str($proto, $ipvnum, $idnum);
+$serverlogs_lockfile = "$logdir/$LOCKDIR/${srvrname}.lock";
$idstr = "$idnum" if($idnum > 1);
@@ -3057,17 +3115,17 @@ startsf();
# actual port
if($portfile && !$port) {
my $aport;
- open(P, "<$portfile");
- $aport = <P>;
- close(P);
+ open(my $p, "<", "$portfile");
+ $aport = <$p>;
+ close($p);
$port = 0 + $aport;
}
logmsg sprintf("%s server listens on port IPv${ipvnum}/${port}\n", uc($proto));
-open(PID, ">$pidfile");
-print PID $$."\n";
-close(PID);
+open(my $pid, ">", "$pidfile");
+print $pid $$."\n";
+close($pid);
logmsg("logged pid $$ in $pidfile\n");
@@ -3075,7 +3133,7 @@ while(1) {
# kill previous data connection sockfilt when alive
if($datasockf_runs eq 'yes') {
- killsockfilters($proto, $ipvnum, $idnum, $verbose, 'data');
+ killsockfilters($piddir, $proto, $ipvnum, $idnum, $verbose, 'data');
logmsg "DATA sockfilt for $datasockf_mode data channel killed now\n";
}
datasockf_state('STOPPED');
@@ -3095,7 +3153,7 @@ while(1) {
}
logmsg "====> Client connect\n";
- set_advisor_read_lock($SERVERLOGS_LOCK);
+ set_advisor_read_lock($serverlogs_lockfile);
$serverlogslocked = 1;
# flush data:
@@ -3144,6 +3202,7 @@ while(1) {
logmsg "MAIN sockfilt said $i";
if($i =~ /^DISC/) {
# disconnect
+ printf SFWRITE "ACKD\n";
last;
}
next;
@@ -3318,15 +3377,15 @@ while(1) {
if($serverlogslocked) {
$serverlogslocked = 0;
- clear_advisor_read_lock($SERVERLOGS_LOCK);
+ clear_advisor_read_lock($serverlogs_lockfile);
}
}
-killsockfilters($proto, $ipvnum, $idnum, $verbose);
+killsockfilters($piddir, $proto, $ipvnum, $idnum, $verbose);
unlink($pidfile);
if($serverlogslocked) {
$serverlogslocked = 0;
- clear_advisor_read_lock($SERVERLOGS_LOCK);
+ clear_advisor_read_lock($serverlogs_lockfile);
}
exit;
diff --git a/tests/getpart.pm b/tests/getpart.pm
index f8cb6effc..ed60feca5 100644
--- a/tests/getpart.pm
+++ b/tests/getpart.pm
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -22,15 +22,45 @@
#
###########################################################################
-#use strict;
+package getpart;
+
+use strict;
+use warnings;
+
+BEGIN {
+ use base qw(Exporter);
+
+ our @EXPORT = qw(
+ compareparts
+ fulltest
+ getpart
+ getpartattr
+ loadarray
+ loadtest
+ partexists
+ striparray
+ writearray
+ );
+}
+
+use Memoize;
+use MIME::Base64;
-my @xml;
-my $xmlfile;
+my @xml; # test data file contents
+my $xmlfile; # test data file name
my $warning=0;
my $trace=0;
-use MIME::Base64;
+# Normalize the part function arguments for proper caching. This includes the
+# file name in the arguments since that is an implied parameter that affects the
+# return value. Any error messages will only be displayed the first time, but
+# those are disabled by default anyway, so should never been seen outside
+# development.
+sub normalize_part {
+ push @_, $xmlfile;
+ return join("\t", @_);
+}
sub decode_hex {
my $s = $_;
@@ -41,6 +71,21 @@ sub decode_hex {
return $s;
}
+sub testcaseattr {
+ my %hash;
+ for(@xml) {
+ if(($_ =~ /^ *\<testcase ([^>]*)/)) {
+ my $attr=$1;
+ while($attr =~ s/ *([^=]*)= *(\"([^\"]*)\"|([^\> ]*))//) {
+ my ($var, $cont)=($1, $2);
+ $cont =~ s/^\"(.*)\"$/$1/;
+ $hash{$var}=$cont;
+ }
+ }
+ }
+ return %hash;
+}
+
sub getpartattr {
# if $part is undefined (ie only one argument) then
# return the attributes of the section
@@ -80,6 +125,7 @@ sub getpartattr {
}
return %hash;
}
+memoize('getpartattr', NORMALIZER => 'normalize_part'); # cache each result
sub getpart {
my ($section, $part)=@_;
@@ -158,6 +204,7 @@ sub getpart {
}
return @this;
}
+memoize('getpart', NORMALIZER => 'normalize_part'); # cache each result
sub partexists {
my ($section, $part)=@_;
@@ -177,24 +224,27 @@ sub partexists {
}
return 0; # does not exist
}
-
-# Return entire document as list of lines
-sub getall {
- return @xml;
-}
+# The code currently never calls this more than once per part per file, so
+# caching a result that will never be used again just slows things down.
+# memoize('partexists', NORMALIZER => 'normalize_part'); # cache each result
sub loadtest {
my ($file)=@_;
+ if(defined $xmlfile && $file eq $xmlfile) {
+ # This test is already loaded
+ return
+ }
+
undef @xml;
- $xmlfile = $file;
+ $xmlfile = "";
- if(open(XML, "<$file")) {
- binmode XML; # for crapage systems, use binary
- while(<XML>) {
+ if(open(my $xmlh, "<", "$file")) {
+ binmode $xmlh; # for crapage systems, use binary
+ while(<$xmlh>) {
push @xml, $_;
}
- close(XML);
+ close($xmlh);
}
else {
# failure
@@ -203,9 +253,12 @@ sub loadtest {
}
return 1;
}
+ $xmlfile = $file;
return 0;
}
+
+# Return entire document as list of lines
sub fulltest {
return @xml;
}
@@ -214,12 +267,12 @@ sub fulltest {
sub savetest {
my ($file)=@_;
- if(open(XML, ">$file")) {
- binmode XML; # for crapage systems, use binary
+ if(open(my $xmlh, ">", "$file")) {
+ binmode $xmlh; # for crapage systems, use binary
for(@xml) {
- print XML $_;
+ print $xmlh $_;
}
- close(XML);
+ close($xmlh);
}
else {
# failure
@@ -278,12 +331,12 @@ sub compareparts {
sub writearray {
my ($filename, $arrayref)=@_;
- open(TEMP, ">$filename");
- binmode(TEMP,":raw"); # cygwin fix by Kevin Roth
+ open(my $temp, ">", "$filename") || die "Failure writing file";
+ binmode($temp,":raw"); # cygwin fix by Kevin Roth
for(@$arrayref) {
- print TEMP $_;
+ print $temp $_;
}
- close(TEMP);
+ close($temp) || die "Failure writing file";
}
#
@@ -293,52 +346,14 @@ sub loadarray {
my ($filename)=@_;
my @array;
- open(TEMP, "<$filename");
- while(<TEMP>) {
- push @array, $_;
+ if (open(my $temp, "<", "$filename")) {
+ while(<$temp>) {
+ push @array, $_;
+ }
+ close($temp);
}
- close(TEMP);
return @array;
}
-# Given two array references, this function will store them in two temporary
-# files, run 'diff' on them, store the result and return the diff output!
-
-sub showdiff {
- my ($logdir, $firstref, $secondref)=@_;
-
- my $file1="$logdir/check-generated";
- my $file2="$logdir/check-expected";
-
- open(TEMP, ">$file1");
- for(@$firstref) {
- my $l = $_;
- $l =~ s/\r/[CR]/g;
- $l =~ s/\n/[LF]/g;
- $l =~ s/([^\x20-\x7f])/sprintf "%%%02x", ord $1/eg;
- print TEMP $l;
- print TEMP "\n";
- }
- close(TEMP);
-
- open(TEMP, ">$file2");
- for(@$secondref) {
- my $l = $_;
- $l =~ s/\r/[CR]/g;
- $l =~ s/\n/[LF]/g;
- $l =~ s/([^\x20-\x7f])/sprintf "%%%02x", ord $1/eg;
- print TEMP $l;
- print TEMP "\n";
- }
- close(TEMP);
- my @out = `diff -u $file2 $file1 2>/dev/null`;
-
- if(!$out[0]) {
- @out = `diff -c $file2 $file1 2>/dev/null`;
- }
-
- return @out;
-}
-
1;
diff --git a/tests/globalconfig.pm b/tests/globalconfig.pm
new file mode 100644
index 000000000..5aad483eb
--- /dev/null
+++ b/tests/globalconfig.pm
@@ -0,0 +1,117 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed 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 module contains global variables used in multiple modules in the test
+# harness but not really "owned" by any one.
+
+package globalconfig;
+
+use strict;
+use warnings;
+
+BEGIN {
+ use base qw(Exporter);
+
+ our @EXPORT = qw(
+ $anyway
+ $automakestyle
+ $CURL
+ $CURLVERSION
+ $has_shared
+ $LIBDIR
+ $listonly
+ $LOCKDIR
+ $LOGDIR
+ $memanalyze
+ $MEMDUMP
+ $perl
+ $PIDDIR
+ $proxy_address
+ $PROXYIN
+ $pwd
+ $randseed
+ $run_event_based
+ $SERVERCMD
+ $SERVERIN
+ $srcdir
+ $TESTDIR
+ $torture
+ $valgrind
+ $VCURL
+ $verbose
+ %feature
+ %keywords
+ @protocols
+ );
+}
+use pathhelp qw(exe_ext);
+use Cwd qw(getcwd);
+
+
+#######################################################################
+# global configuration variables
+#
+
+# config variables overridden by command-line options
+our $verbose; # 1 to show verbose test output
+our $torture; # 1 to enable torture testing
+our $proxy_address; # external HTTP proxy address
+our $listonly; # only list the tests
+our $run_event_based; # run curl with --test-event to test the event API
+our $automakestyle; # use automake-like test status output format
+our $anyway; # continue anyway, even if a test fail
+our $CURLVERSION=""; # curl's reported version number
+our $randseed = 0; # random number seed
+
+# paths
+our $pwd = getcwd(); # current working directory
+our $srcdir = $ENV{'srcdir'} || '.'; # root of the test source code
+our $perl="perl -I$srcdir"; # invoke perl like this
+our $LOGDIR="log"; # root of the log directory; this will be different for
+ # each runner in multiprocess mode
+our $LIBDIR="./libtest";
+our $TESTDIR="$srcdir/data";
+our $CURL="../src/curl".exe_ext('TOOL'); # what curl binary to run on the tests
+our $VCURL=$CURL; # what curl binary to use to verify the servers with
+ # VCURL is handy to set to the system one when the one you
+ # just built hangs or crashes and thus prevent verification
+# the path to the script that analyzes the memory debug output file
+our $memanalyze="$perl $srcdir/memanalyze.pl";
+our $valgrind; # path to valgrind, or empty if disabled
+
+# paths in $LOGDIR
+our $LOCKDIR = "lock"; # root of the server directory with lock files
+our $PIDDIR = "server"; # root of the server directory with PID files
+our $SERVERIN="server.input"; # what curl sent the server
+our $PROXYIN="proxy.input"; # what curl sent the proxy
+our $MEMDUMP="memdump"; # file that the memory debugging creates
+our $SERVERCMD="server.cmd"; # copy server instructions here
+
+# other config variables
+our @protocols; # array of lowercase supported protocol servers
+our %feature; # hash of enabled features
+our $has_shared; # built as a shared library
+our %keywords; # hash of keywords from the test spec
+
+1;
diff --git a/tests/httpserver.pl b/tests/http-server.pl
index 64573aa43..526ec319b 100755
--- a/tests/httpserver.pl
+++ b/tests/http-server.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -23,20 +23,22 @@
#
#***************************************************************************
+use strict;
+use warnings;
+
BEGIN {
push(@INC, $ENV{'srcdir'}) if(defined $ENV{'srcdir'});
push(@INC, ".");
}
-use strict;
-use warnings;
+use File::Basename;
use serverhelp qw(
server_pidfilename
server_logfilename
);
-use sshhelp qw(
+use pathhelp qw(
exe_ext
);
@@ -49,13 +51,16 @@ my $proto = 'http'; # protocol the http server speaks
my $pidfile; # pid file
my $portfile; # port number file
my $logfile; # log file
+my $cmdfile; # command file
my $connect; # IP to connect to on CONNECT
+my $keepalive_secs; # number of seconds to keep idle connections
my $srcdir;
my $gopher = 0;
my $flags = "";
my $path = '.';
my $logdir = $path .'/log';
+my $piddir;
while(@ARGV) {
if($ARGV[0] eq '--pidfile') {
@@ -70,12 +75,24 @@ while(@ARGV) {
shift @ARGV;
}
}
+ elsif($ARGV[0] eq '--config') {
+ if($ARGV[1]) {
+ $cmdfile = $ARGV[1];
+ shift @ARGV;
+ }
+ }
elsif($ARGV[0] eq '--logfile') {
if($ARGV[1]) {
$logfile = $ARGV[1];
shift @ARGV;
}
}
+ elsif($ARGV[0] eq '--logdir') {
+ if($ARGV[1]) {
+ $logdir = $ARGV[1];
+ shift @ARGV;
+ }
+ }
elsif($ARGV[0] eq '--srcdir') {
if($ARGV[1]) {
$srcdir = $ARGV[1];
@@ -110,6 +127,12 @@ while(@ARGV) {
shift @ARGV;
}
}
+ elsif($ARGV[0] eq '--keepalive') {
+ if($ARGV[1]) {
+ $keepalive_secs = $ARGV[1];
+ shift @ARGV;
+ }
+ }
elsif($ARGV[0] eq '--id') {
if($ARGV[1] =~ /^(\d+)$/) {
$idnum = $1 if($1 > 0);
@@ -120,29 +143,42 @@ while(@ARGV) {
$verbose = 1;
}
else {
- print STDERR "\nWarning: httpserver.pl unknown parameter: $ARGV[0]\n";
+ print STDERR "\nWarning: http-server.pl unknown parameter: $ARGV[0]\n";
}
shift @ARGV;
}
-if(!$srcdir) {
- $srcdir = $ENV{'srcdir'} || '.';
+#***************************************************************************
+# Initialize command line option dependent variables
+#
+
+if($pidfile) {
+ # Use our pidfile directory to store the other pidfiles
+ $piddir = dirname($pidfile);
}
-if(!$pidfile) {
- $pidfile = "$path/". server_pidfilename($proto, $ipvnum, $idnum);
+else {
+ # Use the current directory to store all the pidfiles
+ $piddir = $path;
+ $pidfile = server_pidfilename($piddir, $proto, $ipvnum, $idnum);
}
if(!$portfile) {
- $portfile = "$path/". server_portfilename($proto, $ipvnum, $idnum);
+ $portfile = server_portfilename($piddir, $proto, $ipvnum, $idnum);
+}
+if(!$srcdir) {
+ $srcdir = $ENV{'srcdir'} || '.';
}
if(!$logfile) {
$logfile = server_logfilename($logdir, $proto, $ipvnum, $idnum);
}
$flags .= "--pidfile \"$pidfile\" ".
+ "--cmdfile \"$cmdfile\" ".
"--logfile \"$logfile\" ".
+ "--logdir \"$logdir\" ".
"--portfile \"$portfile\" ";
$flags .= "--gopher " if($gopher);
$flags .= "--connect $connect " if($connect);
+$flags .= "--keepalive $keepalive_secs " if($keepalive_secs);
if($ipvnum eq 'unix') {
$flags .= "--unix-socket '$unix_socket' ";
} else {
diff --git a/CMake/FindNSS.cmake b/tests/http/Makefile.am
index 6742dda83..cce66daf8 100644
--- a/CMake/FindNSS.cmake
+++ b/tests/http/Makefile.am
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -21,20 +21,17 @@
# SPDX-License-Identifier: curl
#
###########################################################################
-if(UNIX)
- find_package(PkgConfig QUIET)
- pkg_search_module(PC_NSS nss)
-endif()
-if(NOT PC_NSS_FOUND)
- return()
-endif()
-set(NSS_LIBRARIES ${PC_NSS_LINK_LIBRARIES})
-set(NSS_INCLUDE_DIRS ${PC_NSS_INCLUDE_DIRS})
+SUBDIRS = clients
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(NSS
- REQUIRED_VARS NSS_LIBRARIES NSS_INCLUDE_DIRS
- VERSION_VAR PC_NSS_VERSION)
+clean-local:
+ rm -rf *.pyc __pycache__
+ rm -rf gen
-mark_as_advanced(NSS_INCLUDE_DIRS NSS_LIBRARIES)
+check: clients
+
+clients:
+ @(cd clients; $(MAKE) check)
+
+checksrc:
+ cd clients && $(MAKE) checksrc
diff --git a/tests/http/Makefile.in b/tests/http/Makefile.in
new file mode 100644
index 000000000..b2cd618a7
--- /dev/null
+++ b/tests/http/Makefile.in
@@ -0,0 +1,782 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed 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
+#
+###########################################################################
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = tests/http
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.m4 \
+ $(top_srcdir)/m4/curl-bearssl.m4 \
+ $(top_srcdir)/m4/curl-compilers.m4 \
+ $(top_srcdir)/m4/curl-confopts.m4 \
+ $(top_srcdir)/m4/curl-functions.m4 \
+ $(top_srcdir)/m4/curl-gnutls.m4 \
+ $(top_srcdir)/m4/curl-mbedtls.m4 \
+ $(top_srcdir)/m4/curl-openssl.m4 \
+ $(top_srcdir)/m4/curl-override.m4 \
+ $(top_srcdir)/m4/curl-reentrant.m4 \
+ $(top_srcdir)/m4/curl-rustls.m4 \
+ $(top_srcdir)/m4/curl-schannel.m4 \
+ $(top_srcdir)/m4/curl-sectransp.m4 \
+ $(top_srcdir)/m4/curl-sysconfig.m4 \
+ $(top_srcdir)/m4/curl-wolfssl.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/xc-am-iface.m4 \
+ $(top_srcdir)/m4/xc-cc-check.m4 \
+ $(top_srcdir)/m4/xc-lt-iface.m4 \
+ $(top_srcdir)/m4/xc-translit.m4 \
+ $(top_srcdir)/m4/xc-val-flgs.m4 \
+ $(top_srcdir)/m4/zz40-xc-ovr.m4 \
+ $(top_srcdir)/m4/zz50-xc-ovr.m4 \
+ $(top_srcdir)/m4/zz60-xc-ovr.m4 $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/curl_config.h
+CONFIG_CLEAN_FILES = config.ini
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.ini.in \
+ README.md
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APACHECTL = @APACHECTL@
+APXS = @APXS@
+AR = @AR@
+AR_FLAGS = @AR_FLAGS@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@
+CADDY = @CADDY@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_CURL_SYMBOL_HIDING = @CFLAG_CURL_SYMBOL_HIDING@
+CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPPFLAG_CURL_STATICLIB = @CPPFLAG_CURL_STATICLIB@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CURLVERSION = @CURLVERSION@
+CURL_CA_BUNDLE = @CURL_CA_BUNDLE@
+CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@
+CURL_DISABLE_DICT = @CURL_DISABLE_DICT@
+CURL_DISABLE_FILE = @CURL_DISABLE_FILE@
+CURL_DISABLE_FTP = @CURL_DISABLE_FTP@
+CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@
+CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@
+CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@
+CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@
+CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@
+CURL_DISABLE_MQTT = @CURL_DISABLE_MQTT@
+CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@
+CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@
+CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@
+CURL_DISABLE_SMB = @CURL_DISABLE_SMB@
+CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
+CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
+CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
+CURL_LT_SHLIB_VERSIONED_FLAVOUR = @CURL_LT_SHLIB_VERSIONED_FLAVOUR@
+CURL_NETWORK_AND_TIME_LIBS = @CURL_NETWORK_AND_TIME_LIBS@
+CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
+CURL_PLIST_VERSION = @CURL_PLIST_VERSION@
+CURL_WITH_MULTI_SSL = @CURL_WITH_MULTI_SSL@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_SSL_BACKEND = @DEFAULT_SSL_BACKEND@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SHARED = @ENABLE_SHARED@
+ENABLE_STATIC = @ENABLE_STATIC@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+FISH_FUNCTIONS_DIR = @FISH_FUNCTIONS_DIR@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_BROTLI = @HAVE_BROTLI@
+HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
+HAVE_LIBZ = @HAVE_LIBZ@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
+HAVE_PROTO_BSDSOCKET_H = @HAVE_PROTO_BSDSOCKET_H@
+HAVE_ZSTD = @HAVE_ZSTD@
+HTTPD = @HTTPD@
+HTTPD_NGHTTPX = @HTTPD_NGHTTPX@
+IDN_ENABLED = @IDN_ENABLED@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBCURL_NO_SHARED = @LIBCURL_NO_SHARED@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MANOPT = @MANOPT@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+PKGCONFIG = @PKGCONFIG@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+RC = @RC@
+REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SSL_BACKENDS = @SSL_BACKENDS@
+SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
+STRIP = @STRIP@
+SUPPORT_FEATURES = @SUPPORT_FEATURES@
+SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_NGHTTPX = @TEST_NGHTTPX@
+USE_ARES = @USE_ARES@
+USE_BEARSSL = @USE_BEARSSL@
+USE_GNUTLS = @USE_GNUTLS@
+USE_HYPER = @USE_HYPER@
+USE_LIBRTMP = @USE_LIBRTMP@
+USE_LIBSSH = @USE_LIBSSH@
+USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
+USE_MSH3 = @USE_MSH3@
+USE_NGHTTP2 = @USE_NGHTTP2@
+USE_NGHTTP3 = @USE_NGHTTP3@
+USE_NGTCP2 = @USE_NGTCP2@
+USE_NGTCP2_CRYPTO_GNUTLS = @USE_NGTCP2_CRYPTO_GNUTLS@
+USE_NGTCP2_CRYPTO_QUICTLS = @USE_NGTCP2_CRYPTO_QUICTLS@
+USE_NGTCP2_CRYPTO_WOLFSSL = @USE_NGTCP2_CRYPTO_WOLFSSL@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_QUICHE = @USE_QUICHE@
+USE_RUSTLS = @USE_RUSTLS@
+USE_SCHANNEL = @USE_SCHANNEL@
+USE_SECTRANSP = @USE_SECTRANSP@
+USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
+USE_WIN32_CRYPTO = @USE_WIN32_CRYPTO@
+USE_WIN32_LARGE_FILES = @USE_WIN32_LARGE_FILES@
+USE_WIN32_SMALL_FILES = @USE_WIN32_SMALL_FILES@
+USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
+USE_WOLFSSH = @USE_WOLFSSH@
+USE_WOLFSSL = @USE_WOLFSSL@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libext = @libext@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = clients
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/http/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign tests/http/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+config.ini: $(top_builddir)/config.status $(srcdir)/config.ini.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ check-am clean clean-generic clean-libtool clean-local \
+ cscopelist-am ctags ctags-am distclean distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+ uninstall-am
+
+.PRECIOUS: Makefile
+
+
+clean-local:
+ rm -rf *.pyc __pycache__
+ rm -rf gen
+
+check: clients
+
+clients:
+ @(cd clients; $(MAKE) check)
+
+checksrc:
+ cd clients && $(MAKE) checksrc
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/http/README.md b/tests/http/README.md
new file mode 100644
index 000000000..3a4b26394
--- /dev/null
+++ b/tests/http/README.md
@@ -0,0 +1,128 @@
+<!--
+Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+
+SPDX-License-Identifier: curl
+-->
+
+# The curl HTTP Test Suite
+
+This is an additional test suite using a combination of Apache httpd and nghttpx servers to perform various tests beyond the capabilities of the standard curl test suite.
+
+# Usage
+
+The test cases and necessary files are in `tests/http`. You can invoke `pytest` from there or from the top level curl checkout and it will find all tests.
+
+```
+curl> pytest
+platform darwin -- Python 3.9.15, pytest-6.2.0, py-1.10.0, pluggy-0.13.1
+rootdir: /Users/sei/projects/curl
+collected 5 items
+
+tests/http/test_01_basic.py .....
+```
+
+Pytest takes arguments. `-v` increases its verbosity and can be used several times. `-k <expr>` can be used to run only matching test cases. The `expr` can be something resembling a python test or just a string that needs to match test cases in their names.
+
+```
+curl> pytest -vv -k test_01_02
+```
+
+runs all test cases that have `test_01_02` in their name. This does not have to be the start of the name.
+
+Depending on your setup, some test cases may be skipped and appear as `s` in the output. If you run pytest verbose, it will also give you the reason for skipping.
+
+
+# Prerequisites
+
+You will need:
+
+1. a recent Python, the `cryptography` module and, of course, `pytest`
+2. a apache httpd development version. On Debian/Ubuntu, the package `apache2-dev` has this.
+3. a local `curl` project build
+3. optionally, a `nghttpx` with HTTP/3 enabled or h3 test cases will be skipped.
+
+### Configuration
+
+Via curl's `configure` script you may specify:
+
+ * `--with-test-nghttpx=<path-of-nghttpx>` if you have nghttpx to use somewhere outside your `$PATH`.
+ * `--with-test-httpd=<httpd-install-path>` if you have an Apache httpd installed somewhere else. On Debian/Ubuntu it will otherwise look into `/usr/bin` and `/usr/sbin` to find those.
+
+## Usage Tips
+
+Several test cases are parameterized, for example with the HTTP version to use. If you want to run a test with a particular protocol only, use a command line like:
+
+```
+curl> pytest -k "test_02_06 and h2"
+```
+
+Several test cases can be repeated, they all have the `repeat` parameter. To make this work, you have to start `pytest` in the test directory itself (for some unknown reason). Like in:
+
+```
+curl/tests/http> pytest -k "test_02_06 and h2" --repeat=100
+```
+
+which then runs this test case a hundred times. In case of flaky tests, you can make pytest stop on the first one with:
+
+```
+curl/tests/http> pytest -k "test_02_06 and h2" --repeat=100 --maxfail=1
+```
+
+which allow you to inspect output and log files for the failed run. Speaking of log files, the verbosity of pytest is also used to collect curl trace output. If you specify `-v` three times, the `curl` command is started with `--trace`:
+
+```
+curl/tests/http> pytest -vvv -k "test_02_06 and h2" --repeat=100 --maxfail=1
+```
+
+all of curl's output and trace file are found in `tests/http/gen/curl`.
+
+## Writing Tests
+
+There is a lot of [`pytest` documentation](https://docs.pytest.org/) with examples. No use in repeating that here. Assuming you are somewhat familiar with it, it is useful how *this* general test suite is setup. Especially if you want to add test cases.
+
+### Servers
+
+In `conftest.py` 3 "fixtures" are defined that are used by all test cases:
+
+1. `env`: the test environment. It is an instance of class `testenv/env.py:Env`. It holds all information about paths, availability of features (HTTP/3!), port numbers to use, domains and SSL certificates for those.
+2. `httpd`: the Apache httpd instance, configured and started, then stopped at the end of the test suite. It has sites configured for the domains from `env`. It also loads a local module `mod_curltest?` and makes it available in certain locations. (more on mod_curltest below).
+3. `nghttpx`: an instance of nghttpx that provides HTTP/3 support. `nghttpx` proxies those requests to the `httpd` server. In a direct mapping, so you may access all the resources under the same path as with HTTP/2. Only the port number used for HTTP/3 requests will be different.
+
+`pytest` manages these fixture so that they are created once and terminated before exit. This means you can `Ctrl-C` a running pytest and the server will shutdown. Only when you brutally chop its head off, might there be servers left
+behind.
+
+### Test Cases
+
+Tests making use of these fixtures have them in their parameter list. This tells pytest that a particular test needs them, so it has to create them. Since one can invoke pytest for just a single test, it is important that a test references the ones it needs.
+
+All test cases start with `test_` in their name. We use a double number scheme to group them. This makes it ease to run only specific tests and also give a short mnemonic to communicate trouble with others in the project. Otherwise you are free to name test cases as you think fitting.
+
+Tests are grouped thematically in a file with a single Python test class. This is convenient if you need a special "fixture" for several tests. "fixtures" can have "class" scope.
+
+There is a curl helper class that knows how to invoke curl and interpret its output. Among other things, it does add the local CA to the command line, so that SSL connections to the test servers are verified. Nothing prevents anyone from running curl directly, for specific uses not covered by the `CurlClient` class.
+
+### mod_curltest
+
+The module source code is found in `testenv/mod_curltest`. It is compiled using the `apxs` command, commonly provided via the `apache2-dev` package. Compilation is quick and done once at the start of a test run.
+
+The module adds 2 "handlers" to the Apache server (right now). Handler are pieces of code that receive HTTP requests and generate the response. Those handlers are:
+
+* `curltest-echo`: hooked up on the path `/curltest/echo`. This one echoes a request and copies all data from the request body to the response body. Useful for simulating upload and checking that the data arrived as intended.
+* `curltest-tweak`: hooked up on the path `/curltest/tweak`. This handler is more of a Swiss army knife. It interprets parameters from the URL query string to drive its behavior.
+ * `status=nnn`: generate a response with HTTP status code `nnn`.
+ * `chunks=n`: generate `n` chunks of data in the response body, defaults to 3.
+ * `chunk_size=nnn`: each chunk should contain `nnn` bytes of data. Maximum is 16KB right now.
+ * `chunkd_delay=duration`: wait `duration` time between writing chunks
+ * `delay=duration`: wait `duration` time to send the response headers
+ * `body_error=(timeout|reset)`: produce an error after the first chunk in the response body
+ * `id=str`: add `str` in the response header `request-id`
+
+`duration` values are integers, optionally followed by a unit. Units are:
+
+ * `d`: days (probably not useful here)
+ * `h`: hours
+ * `mi`: minutes
+ * `s`: seconds (the default)
+ * `ms`: milliseconds
+
+As you can see, `mod_curltest`'s tweak handler allow to simulate many kinds of responses. An example of its use is `test_03_01` where responses are delayed using `chunk_delay`. This gives the response a defined duration and the test uses that to reload `httpd` in the middle of the first request. A graceful reload in httpd lets ongoing requests finish, but will close the connection afterwards and tear down the serving process. The following request need then to open a new connection. This is verified by the test case.
diff --git a/tests/http/clients/Makefile.am b/tests/http/clients/Makefile.am
new file mode 100644
index 000000000..8fdc190b9
--- /dev/null
+++ b/tests/http/clients/Makefile.am
@@ -0,0 +1,73 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed 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 nostdinc
+
+
+# Specify our include paths here, and do it relative to $(top_srcdir) and
+# $(top_builddir), to ensure that these paths which belong to the library
+# being currently built and tested are searched before the library which
+# might possibly already be installed in the system.
+#
+# $(top_srcdir)/include is for libcurl's external include files
+
+AM_CPPFLAGS = -I$(top_srcdir)/include \
+ -I$(top_builddir)/lib \
+ -I$(top_srcdir)/lib \
+ -DCURL_DISABLE_DEPRECATION
+
+LIBDIR = $(top_builddir)/lib
+
+# Avoid libcurl obsolete stuff
+AM_CPPFLAGS += -DCURL_NO_OLDIES
+
+if USE_CPPFLAG_CURL_STATICLIB
+AM_CPPFLAGS += -DCURL_STATICLIB
+endif
+
+# Prevent LIBS from being used for all link targets
+LIBS = $(BLANK_AT_MAKETIME)
+
+# Dependencies
+if USE_EXPLICIT_LIB_DEPS
+LDADD = $(LIBDIR)/libcurl.la @LIBCURL_LIBS@
+else
+LDADD = $(LIBDIR)/libcurl.la
+endif
+
+# This might hold -Werror
+CFLAGS += @CURL_CFLAG_EXTRAS@
+
+# Makefile.inc provides the check_PROGRAMS and COMPLICATED_EXAMPLES defines
+include Makefile.inc
+
+all: $(check_PROGRAMS)
+
+CHECKSRC = $(CS_$(V))
+CS_0 = @echo " RUN " $@;
+CS_1 =
+CS_ = $(CS_0)
+
+checksrc:
+ $(CHECKSRC)(@PERL@ $(top_srcdir)/scripts/checksrc.pl -D$(srcdir) $(srcdir)/*.c)
diff --git a/tests/http/clients/Makefile.in b/tests/http/clients/Makefile.in
new file mode 100644
index 000000000..356a2b8f8
--- /dev/null
+++ b/tests/http/clients/Makefile.in
@@ -0,0 +1,899 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed 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
+#
+###########################################################################
+
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed 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
+#
+###########################################################################
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@USE_CPPFLAG_CURL_STATICLIB_TRUE@am__append_1 = -DCURL_STATICLIB
+check_PROGRAMS = h2-serverpush$(EXEEXT) h2-download$(EXEEXT) \
+ ws-data$(EXEEXT) ws-pingpong$(EXEEXT) \
+ h2-upgrade-extreme$(EXEEXT) tls-session-reuse$(EXEEXT) \
+ h2-pausing$(EXEEXT)
+subdir = tests/http/clients
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.m4 \
+ $(top_srcdir)/m4/curl-bearssl.m4 \
+ $(top_srcdir)/m4/curl-compilers.m4 \
+ $(top_srcdir)/m4/curl-confopts.m4 \
+ $(top_srcdir)/m4/curl-functions.m4 \
+ $(top_srcdir)/m4/curl-gnutls.m4 \
+ $(top_srcdir)/m4/curl-mbedtls.m4 \
+ $(top_srcdir)/m4/curl-openssl.m4 \
+ $(top_srcdir)/m4/curl-override.m4 \
+ $(top_srcdir)/m4/curl-reentrant.m4 \
+ $(top_srcdir)/m4/curl-rustls.m4 \
+ $(top_srcdir)/m4/curl-schannel.m4 \
+ $(top_srcdir)/m4/curl-sectransp.m4 \
+ $(top_srcdir)/m4/curl-sysconfig.m4 \
+ $(top_srcdir)/m4/curl-wolfssl.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/xc-am-iface.m4 \
+ $(top_srcdir)/m4/xc-cc-check.m4 \
+ $(top_srcdir)/m4/xc-lt-iface.m4 \
+ $(top_srcdir)/m4/xc-translit.m4 \
+ $(top_srcdir)/m4/xc-val-flgs.m4 \
+ $(top_srcdir)/m4/zz40-xc-ovr.m4 \
+ $(top_srcdir)/m4/zz50-xc-ovr.m4 \
+ $(top_srcdir)/m4/zz60-xc-ovr.m4 $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/curl_config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+h2_download_SOURCES = h2-download.c
+h2_download_OBJECTS = h2-download.$(OBJEXT)
+h2_download_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@h2_download_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@h2_download_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+h2_pausing_SOURCES = h2-pausing.c
+h2_pausing_OBJECTS = h2-pausing.$(OBJEXT)
+h2_pausing_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@h2_pausing_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@h2_pausing_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
+h2_serverpush_SOURCES = h2-serverpush.c
+h2_serverpush_OBJECTS = h2-serverpush.$(OBJEXT)
+h2_serverpush_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@h2_serverpush_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@h2_serverpush_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
+h2_upgrade_extreme_SOURCES = h2-upgrade-extreme.c
+h2_upgrade_extreme_OBJECTS = h2-upgrade-extreme.$(OBJEXT)
+h2_upgrade_extreme_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@h2_upgrade_extreme_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@h2_upgrade_extreme_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
+tls_session_reuse_SOURCES = tls-session-reuse.c
+tls_session_reuse_OBJECTS = tls-session-reuse.$(OBJEXT)
+tls_session_reuse_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@tls_session_reuse_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@tls_session_reuse_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
+ws_data_SOURCES = ws-data.c
+ws_data_OBJECTS = ws-data.$(OBJEXT)
+ws_data_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@ws_data_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@ws_data_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
+ws_pingpong_SOURCES = ws-pingpong.c
+ws_pingpong_OBJECTS = ws-pingpong.$(OBJEXT)
+ws_pingpong_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@ws_pingpong_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_FALSE@ $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@ws_pingpong_DEPENDENCIES = \
+@USE_EXPLICIT_LIB_DEPS_TRUE@ $(LIBDIR)/libcurl.la
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES =
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/h2-download.Po \
+ ./$(DEPDIR)/h2-pausing.Po ./$(DEPDIR)/h2-serverpush.Po \
+ ./$(DEPDIR)/h2-upgrade-extreme.Po \
+ ./$(DEPDIR)/tls-session-reuse.Po ./$(DEPDIR)/ws-data.Po \
+ ./$(DEPDIR)/ws-pingpong.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = h2-download.c h2-pausing.c h2-serverpush.c \
+ h2-upgrade-extreme.c tls-session-reuse.c ws-data.c \
+ ws-pingpong.c
+DIST_SOURCES = h2-download.c h2-pausing.c h2-serverpush.c \
+ h2-upgrade-extreme.c tls-session-reuse.c ws-data.c \
+ ws-pingpong.c
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.inc \
+ $(top_srcdir)/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APACHECTL = @APACHECTL@
+APXS = @APXS@
+AR = @AR@
+AR_FLAGS = @AR_FLAGS@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@
+CADDY = @CADDY@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+
+# This might hold -Werror
+CFLAGS = @CFLAGS@ @CURL_CFLAG_EXTRAS@
+CFLAG_CURL_SYMBOL_HIDING = @CFLAG_CURL_SYMBOL_HIDING@
+CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPPFLAG_CURL_STATICLIB = @CPPFLAG_CURL_STATICLIB@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CURLVERSION = @CURLVERSION@
+CURL_CA_BUNDLE = @CURL_CA_BUNDLE@
+CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@
+CURL_DISABLE_DICT = @CURL_DISABLE_DICT@
+CURL_DISABLE_FILE = @CURL_DISABLE_FILE@
+CURL_DISABLE_FTP = @CURL_DISABLE_FTP@
+CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@
+CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@
+CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@
+CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@
+CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@
+CURL_DISABLE_MQTT = @CURL_DISABLE_MQTT@
+CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@
+CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@
+CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@
+CURL_DISABLE_SMB = @CURL_DISABLE_SMB@
+CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
+CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
+CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
+CURL_LT_SHLIB_VERSIONED_FLAVOUR = @CURL_LT_SHLIB_VERSIONED_FLAVOUR@
+CURL_NETWORK_AND_TIME_LIBS = @CURL_NETWORK_AND_TIME_LIBS@
+CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@
+CURL_PLIST_VERSION = @CURL_PLIST_VERSION@
+CURL_WITH_MULTI_SSL = @CURL_WITH_MULTI_SSL@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_SSL_BACKEND = @DEFAULT_SSL_BACKEND@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_SHARED = @ENABLE_SHARED@
+ENABLE_STATIC = @ENABLE_STATIC@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+FISH_FUNCTIONS_DIR = @FISH_FUNCTIONS_DIR@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_BROTLI = @HAVE_BROTLI@
+HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
+HAVE_LIBZ = @HAVE_LIBZ@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
+HAVE_PROTO_BSDSOCKET_H = @HAVE_PROTO_BSDSOCKET_H@
+HAVE_ZSTD = @HAVE_ZSTD@
+HTTPD = @HTTPD@
+HTTPD_NGHTTPX = @HTTPD_NGHTTPX@
+IDN_ENABLED = @IDN_ENABLED@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+LCOV = @LCOV@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBCURL_NO_SHARED = @LIBCURL_NO_SHARED@
+LIBOBJS = @LIBOBJS@
+
+# Prevent LIBS from being used for all link targets
+LIBS = $(BLANK_AT_MAKETIME)
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MANOPT = @MANOPT@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NROFF = @NROFF@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKGADD_NAME = @PKGADD_NAME@
+PKGADD_PKG = @PKGADD_PKG@
+PKGADD_VENDOR = @PKGADD_VENDOR@
+PKGCONFIG = @PKGCONFIG@
+RANDOM_FILE = @RANDOM_FILE@
+RANLIB = @RANLIB@
+RC = @RC@
+REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SSL_BACKENDS = @SSL_BACKENDS@
+SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
+STRIP = @STRIP@
+SUPPORT_FEATURES = @SUPPORT_FEATURES@
+SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_NGHTTPX = @TEST_NGHTTPX@
+USE_ARES = @USE_ARES@
+USE_BEARSSL = @USE_BEARSSL@
+USE_GNUTLS = @USE_GNUTLS@
+USE_HYPER = @USE_HYPER@
+USE_LIBRTMP = @USE_LIBRTMP@
+USE_LIBSSH = @USE_LIBSSH@
+USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
+USE_MSH3 = @USE_MSH3@
+USE_NGHTTP2 = @USE_NGHTTP2@
+USE_NGHTTP3 = @USE_NGHTTP3@
+USE_NGTCP2 = @USE_NGTCP2@
+USE_NGTCP2_CRYPTO_GNUTLS = @USE_NGTCP2_CRYPTO_GNUTLS@
+USE_NGTCP2_CRYPTO_QUICTLS = @USE_NGTCP2_CRYPTO_QUICTLS@
+USE_NGTCP2_CRYPTO_WOLFSSL = @USE_NGTCP2_CRYPTO_WOLFSSL@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_QUICHE = @USE_QUICHE@
+USE_RUSTLS = @USE_RUSTLS@
+USE_SCHANNEL = @USE_SCHANNEL@
+USE_SECTRANSP = @USE_SECTRANSP@
+USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
+USE_WIN32_CRYPTO = @USE_WIN32_CRYPTO@
+USE_WIN32_LARGE_FILES = @USE_WIN32_LARGE_FILES@
+USE_WIN32_SMALL_FILES = @USE_WIN32_SMALL_FILES@
+USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
+USE_WOLFSSH = @USE_WOLFSSH@
+USE_WOLFSSL = @USE_WOLFSSL@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libext = @libext@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AUTOMAKE_OPTIONS = foreign nostdinc
+
+# Specify our include paths here, and do it relative to $(top_srcdir) and
+# $(top_builddir), to ensure that these paths which belong to the library
+# being currently built and tested are searched before the library which
+# might possibly already be installed in the system.
+#
+# $(top_srcdir)/include is for libcurl's external include files
+
+# Avoid libcurl obsolete stuff
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/lib \
+ -I$(top_srcdir)/lib -DCURL_DISABLE_DEPRECATION \
+ -DCURL_NO_OLDIES $(am__append_1)
+LIBDIR = $(top_builddir)/lib
+@USE_EXPLICIT_LIB_DEPS_FALSE@LDADD = $(LIBDIR)/libcurl.la
+
+# Dependencies
+@USE_EXPLICIT_LIB_DEPS_TRUE@LDADD = $(LIBDIR)/libcurl.la @LIBCURL_LIBS@
+CHECKSRC = $(CS_$(V))
+CS_0 = @echo " RUN " $@;
+CS_1 =
+CS_ = $(CS_0)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Makefile.inc $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/http/clients/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign tests/http/clients/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/Makefile.inc $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+h2-download$(EXEEXT): $(h2_download_OBJECTS) $(h2_download_DEPENDENCIES) $(EXTRA_h2_download_DEPENDENCIES)
+ @rm -f h2-download$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(h2_download_OBJECTS) $(h2_download_LDADD) $(LIBS)
+
+h2-pausing$(EXEEXT): $(h2_pausing_OBJECTS) $(h2_pausing_DEPENDENCIES) $(EXTRA_h2_pausing_DEPENDENCIES)
+ @rm -f h2-pausing$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(h2_pausing_OBJECTS) $(h2_pausing_LDADD) $(LIBS)
+
+h2-serverpush$(EXEEXT): $(h2_serverpush_OBJECTS) $(h2_serverpush_DEPENDENCIES) $(EXTRA_h2_serverpush_DEPENDENCIES)
+ @rm -f h2-serverpush$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(h2_serverpush_OBJECTS) $(h2_serverpush_LDADD) $(LIBS)
+
+h2-upgrade-extreme$(EXEEXT): $(h2_upgrade_extreme_OBJECTS) $(h2_upgrade_extreme_DEPENDENCIES) $(EXTRA_h2_upgrade_extreme_DEPENDENCIES)
+ @rm -f h2-upgrade-extreme$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(h2_upgrade_extreme_OBJECTS) $(h2_upgrade_extreme_LDADD) $(LIBS)
+
+tls-session-reuse$(EXEEXT): $(tls_session_reuse_OBJECTS) $(tls_session_reuse_DEPENDENCIES) $(EXTRA_tls_session_reuse_DEPENDENCIES)
+ @rm -f tls-session-reuse$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(tls_session_reuse_OBJECTS) $(tls_session_reuse_LDADD) $(LIBS)
+
+ws-data$(EXEEXT): $(ws_data_OBJECTS) $(ws_data_DEPENDENCIES) $(EXTRA_ws_data_DEPENDENCIES)
+ @rm -f ws-data$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(ws_data_OBJECTS) $(ws_data_LDADD) $(LIBS)
+
+ws-pingpong$(EXEEXT): $(ws_pingpong_OBJECTS) $(ws_pingpong_DEPENDENCIES) $(EXTRA_ws_pingpong_DEPENDENCIES)
+ @rm -f ws-pingpong$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(ws_pingpong_OBJECTS) $(ws_pingpong_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h2-download.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h2-pausing.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h2-serverpush.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h2-upgrade-extreme.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tls-session-reuse.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ws-data.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ws-pingpong.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/h2-download.Po
+ -rm -f ./$(DEPDIR)/h2-pausing.Po
+ -rm -f ./$(DEPDIR)/h2-serverpush.Po
+ -rm -f ./$(DEPDIR)/h2-upgrade-extreme.Po
+ -rm -f ./$(DEPDIR)/tls-session-reuse.Po
+ -rm -f ./$(DEPDIR)/ws-data.Po
+ -rm -f ./$(DEPDIR)/ws-pingpong.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/h2-download.Po
+ -rm -f ./$(DEPDIR)/h2-pausing.Po
+ -rm -f ./$(DEPDIR)/h2-serverpush.Po
+ -rm -f ./$(DEPDIR)/h2-upgrade-extreme.Po
+ -rm -f ./$(DEPDIR)/tls-session-reuse.Po
+ -rm -f ./$(DEPDIR)/ws-data.Po
+ -rm -f ./$(DEPDIR)/ws-pingpong.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+ ctags ctags-am distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Makefile.inc provides the check_PROGRAMS and COMPLICATED_EXAMPLES defines
+
+all: $(check_PROGRAMS)
+
+checksrc:
+ $(CHECKSRC)(@PERL@ $(top_srcdir)/scripts/checksrc.pl -D$(srcdir) $(srcdir)/*.c)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/makefile.amiga b/tests/http/clients/Makefile.inc
index 9aac7a0fb..ce7a1b6a0 100644
--- a/src/makefile.amiga
+++ b/tests/http/clients/Makefile.inc
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -21,32 +21,13 @@
# SPDX-License-Identifier: curl
#
###########################################################################
-#
-# curl Makefile for AmigaOS ...
-#
-
-# change the follow to where you have the AmiTCP SDK v4.3 includes:
-
-ATCPSDKI= /GG/netinclude
-
-
-CC = m68k-amigaos-gcc
-CFLAGS = -I$(ATCPSDKI) -m68020-60 -O2 -msoft-float -noixemul -g -I. -I../include -W -Wall -DUSE_OPENSSL -DHAVE_LIBZ
-LIBS = ../lib/libcurl.a -lssl -lcrypto -lz
-MANPAGE = ../docs/curl.1
-README = ../docs/MANUAL
-MKHELP = ../src/mkhelp.pl
-
-include Makefile.inc
-
-OBJS = $(CURL_CFILES:.c=.o) $(CURLX_CFILES:.c=.o)
-
-all: tool_hugehelp.c $(OBJS)
- $(CC) $(CFLAGS) -o curl $(OBJS) $(LIBS) -Wl,-Map,curl.map,--cref
-
-tool_hugehelp.c: $(README) $(MANPAGE) mkhelp.pl
- rm -f tool_hugehelp.c
- /bin/nroff -man $(MANPAGE) | /bin/perl $(MKHELP) -c $(README) > tool_hugehelp.c
-install:
- $(INSTALL) -c curl /c/curl
+# These are all libcurl example programs to be test compiled
+check_PROGRAMS = \
+ h2-serverpush \
+ h2-download \
+ ws-data \
+ ws-pingpong \
+ h2-upgrade-extreme \
+ tls-session-reuse \
+ h2-pausing
diff --git a/tests/http/clients/h2-download.c b/tests/http/clients/h2-download.c
new file mode 100644
index 000000000..53f3ac0d0
--- /dev/null
+++ b/tests/http/clients/h2-download.c
@@ -0,0 +1,351 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ ***************************************************************************/
+/* <DESC>
+ * HTTP/2 server push
+ * </DESC>
+ */
+
+/* curl stuff */
+#include <curl/curl.h>
+#include <curl/mprintf.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* somewhat unix-specific */
+#include <sys/time.h>
+#include <unistd.h>
+
+#ifndef CURLPIPE_MULTIPLEX
+#error "too old libcurl, cannot do HTTP/2 server push!"
+#endif
+
+static int verbose = 1;
+
+static
+int my_trace(CURL *handle, curl_infotype type,
+ char *data, size_t size,
+ void *userp)
+{
+ const char *text;
+ (void)handle; /* prevent compiler warning */
+ (void)userp;
+
+ switch(type) {
+ case CURLINFO_TEXT:
+ fprintf(stderr, "== Info: %s", data);
+ /* FALLTHROUGH */
+ default: /* in case a new one is introduced to shock us */
+ return 0;
+
+ case CURLINFO_HEADER_OUT:
+ text = "=> Send header";
+ break;
+ case CURLINFO_DATA_OUT:
+ if(verbose <= 1)
+ return 0;
+ text = "=> Send data";
+ break;
+ case CURLINFO_HEADER_IN:
+ text = "<= Recv header";
+ break;
+ case CURLINFO_DATA_IN:
+ if(verbose <= 1)
+ return 0;
+ text = "<= Recv data";
+ break;
+ }
+
+ fprintf(stderr, "%s, %lu bytes (0x%lx)\n",
+ text, (unsigned long)size, (unsigned long)size);
+ return 0;
+}
+
+struct transfer {
+ int idx;
+ CURL *easy;
+ char filename[128];
+ FILE *out;
+ curl_off_t recv_size;
+ curl_off_t pause_at;
+ int started;
+ int paused;
+ int resumed;
+ int done;
+};
+
+static size_t transfer_count = 1;
+static struct transfer *transfers;
+
+static struct transfer *get_transfer_for_easy(CURL *easy)
+{
+ size_t i;
+ for(i = 0; i < transfer_count; ++i) {
+ if(easy == transfers[i].easy)
+ return &transfers[i];
+ }
+ return NULL;
+}
+
+static size_t my_write_cb(char *buf, size_t nitems, size_t buflen,
+ void *userdata)
+{
+ struct transfer *t = userdata;
+ ssize_t nwritten;
+
+ if(!t->resumed &&
+ t->recv_size < t->pause_at &&
+ ((curl_off_t)(t->recv_size + (nitems * buflen)) >= t->pause_at)) {
+ fprintf(stderr, "[t-%d] PAUSE\n", t->idx);
+ t->paused = 1;
+ return CURL_WRITEFUNC_PAUSE;
+ }
+
+ if(!t->out) {
+ curl_msnprintf(t->filename, sizeof(t->filename)-1, "download_%u.data",
+ t->idx);
+ t->out = fopen(t->filename, "wb");
+ if(!t->out)
+ return 0;
+ }
+
+ nwritten = fwrite(buf, nitems, buflen, t->out);
+ if(nwritten < 0) {
+ fprintf(stderr, "[t-%d] write failure\n", t->idx);
+ return 0;
+ }
+ t->recv_size += nwritten;
+ return (size_t)nwritten;
+}
+
+static int setup(CURL *hnd, const char *url, struct transfer *t)
+{
+ curl_easy_setopt(hnd, CURLOPT_URL, url);
+ curl_easy_setopt(hnd, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
+ curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYPEER, 0L);
+ curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYHOST, 0L);
+
+ curl_easy_setopt(hnd, CURLOPT_WRITEFUNCTION, my_write_cb);
+ curl_easy_setopt(hnd, CURLOPT_WRITEDATA, t);
+
+ /* please be verbose */
+ if(verbose) {
+ curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
+ curl_easy_setopt(hnd, CURLOPT_DEBUGFUNCTION, my_trace);
+ }
+
+#if (CURLPIPE_MULTIPLEX > 0)
+ /* wait for pipe connection to confirm */
+ curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L);
+#endif
+ return 0; /* all is good */
+}
+
+static void usage(const char *msg)
+{
+ if(msg)
+ fprintf(stderr, "%s\n", msg);
+ fprintf(stderr,
+ "usage: [options] url\n"
+ " download a url with following options:\n"
+ " -m number max parallel downloads\n"
+ " -n number total downloads\n"
+ " -p number pause transfer after `number` response bytes\n"
+ );
+}
+
+/*
+ * Download a file over HTTP/2, take care of server push.
+ */
+int main(int argc, char *argv[])
+{
+ CURLM *multi_handle;
+ struct CURLMsg *m;
+ const char *url;
+ size_t i, n, max_parallel = 1;
+ size_t active_transfers;
+ long pause_offset = 0;
+ int abort_paused = 0;
+ struct transfer *t;
+ int ch;
+
+ while((ch = getopt(argc, argv, "ahm:n:P:")) != -1) {
+ switch(ch) {
+ case 'h':
+ usage(NULL);
+ return 2;
+ case 'a':
+ abort_paused = 1;
+ break;
+ case 'm':
+ max_parallel = (size_t)strtol(optarg, NULL, 10);
+ break;
+ case 'n':
+ transfer_count = (size_t)strtol(optarg, NULL, 10);
+ break;
+ case 'P':
+ pause_offset = strtol(optarg, NULL, 10);
+ break;
+ default:
+ usage("invalid option");
+ return 1;
+ }
+ }
+ argc -= optind;
+ argv += optind;
+
+ if(argc != 1) {
+ usage("not enough arguments");
+ return 2;
+ }
+ url = argv[0];
+
+ transfers = calloc(transfer_count, sizeof(*transfers));
+ if(!transfers) {
+ fprintf(stderr, "error allocating transfer structs\n");
+ return 1;
+ }
+
+ multi_handle = curl_multi_init();
+ curl_multi_setopt(multi_handle, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX);
+
+ active_transfers = 0;
+ for(i = 0; i < transfer_count; ++i) {
+ t = &transfers[i];
+ t->idx = (int)i;
+ t->pause_at = (curl_off_t)pause_offset * i;
+ }
+
+ n = (max_parallel < transfer_count)? max_parallel : transfer_count;
+ for(i = 0; i < n; ++i) {
+ t = &transfers[i];
+ t->easy = curl_easy_init();
+ if(!t->easy || setup(t->easy, url, t)) {
+ fprintf(stderr, "[t-%d] FAILED setup\n", (int)i);
+ return 1;
+ }
+ curl_multi_add_handle(multi_handle, t->easy);
+ t->started = 1;
+ ++active_transfers;
+ fprintf(stderr, "[t-%d] STARTED\n", t->idx);
+ }
+
+ do {
+ int still_running; /* keep number of running handles */
+ CURLMcode mc = curl_multi_perform(multi_handle, &still_running);
+
+ if(still_running) {
+ /* wait for activity, timeout or "nothing" */
+ mc = curl_multi_poll(multi_handle, NULL, 0, 1000, NULL);
+ fprintf(stderr, "curl_multi_poll() -> %d\n", mc);
+ }
+
+ if(mc)
+ break;
+
+ do {
+ int msgq = 0;
+ m = curl_multi_info_read(multi_handle, &msgq);
+ if(m && (m->msg == CURLMSG_DONE)) {
+ CURL *e = m->easy_handle;
+ active_transfers--;
+ curl_multi_remove_handle(multi_handle, e);
+ t = get_transfer_for_easy(e);
+ if(t) {
+ t->done = 1;
+ }
+ else
+ curl_easy_cleanup(e);
+ }
+ else {
+ /* nothing happening, maintenance */
+ if(abort_paused) {
+ /* abort paused transfers */
+ for(i = 0; i < transfer_count; ++i) {
+ t = &transfers[i];
+ if(!t->done && t->paused && t->easy) {
+ curl_multi_remove_handle(multi_handle, t->easy);
+ t->done = 1;
+ active_transfers--;
+ fprintf(stderr, "[t-%d] ABORTED\n", t->idx);
+ }
+ }
+ }
+ else {
+ /* resume one paused transfer */
+ for(i = 0; i < transfer_count; ++i) {
+ t = &transfers[i];
+ if(!t->done && t->paused) {
+ t->resumed = 1;
+ t->paused = 0;
+ curl_easy_pause(t->easy, CURLPAUSE_CONT);
+ fprintf(stderr, "[t-%d] RESUMED\n", t->idx);
+ break;
+ }
+ }
+ }
+
+ while(active_transfers < max_parallel) {
+ for(i = 0; i < transfer_count; ++i) {
+ t = &transfers[i];
+ if(!t->started) {
+ t->easy = curl_easy_init();
+ if(!t->easy || setup(t->easy, url, t)) {
+ fprintf(stderr, "[t-%d] FAILEED setup\n", (int)i);
+ return 1;
+ }
+ curl_multi_add_handle(multi_handle, t->easy);
+ t->started = 1;
+ ++active_transfers;
+ fprintf(stderr, "[t-%d] STARTED\n", t->idx);
+ break;
+ }
+ }
+ /* all started */
+ if(i == transfer_count)
+ break;
+ }
+ }
+ } while(m);
+
+ } while(active_transfers); /* as long as we have transfers going */
+
+ for(i = 0; i < transfer_count; ++i) {
+ t = &transfers[i];
+ if(t->out) {
+ fclose(t->out);
+ t->out = NULL;
+ }
+ if(t->easy) {
+ curl_easy_cleanup(t->easy);
+ t->easy = NULL;
+ }
+ }
+ free(transfers);
+
+ curl_multi_cleanup(multi_handle);
+
+ return 0;
+}
diff --git a/tests/http/clients/h2-pausing.c b/tests/http/clients/h2-pausing.c
new file mode 100644
index 000000000..40ae361f1
--- /dev/null
+++ b/tests/http/clients/h2-pausing.c
@@ -0,0 +1,339 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ ***************************************************************************/
+/* <DESC>
+ * HTTP/2 download pausing
+ * </DESC>
+ */
+/* This is based on the poc client of issue #11982
+ */
+#include <stdio.h>
+#include <string.h>
+#include <sys/time.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <curl/curl.h>
+#include <curl/mprintf.h>
+
+#define HANDLECOUNT 2
+
+static void log_line_start(FILE *log, const char *idsbuf, curl_infotype type)
+{
+ /*
+ * This is the trace look that is similar to what libcurl makes on its
+ * own.
+ */
+ static const char * const s_infotype[] = {
+ "* ", "< ", "> ", "{ ", "} ", "{ ", "} "
+ };
+ if(idsbuf && *idsbuf)
+ fprintf(log, "%s%s", idsbuf, s_infotype[type]);
+ else
+ fputs(s_infotype[type], log);
+}
+
+#define TRC_IDS_FORMAT_IDS_1 "[%" CURL_FORMAT_CURL_OFF_T "-x] "
+#define TRC_IDS_FORMAT_IDS_2 "[%" CURL_FORMAT_CURL_OFF_T "-%" \
+ CURL_FORMAT_CURL_OFF_T "] "
+/*
+** callback for CURLOPT_DEBUGFUNCTION
+*/
+static int debug_cb(CURL *handle, curl_infotype type,
+ char *data, size_t size,
+ void *userdata)
+{
+ FILE *output = stderr;
+ static int newl = 0;
+ static int traced_data = 0;
+ char idsbuf[60];
+ curl_off_t xfer_id, conn_id;
+
+ (void)handle; /* not used */
+ (void)userdata;
+
+ if(!curl_easy_getinfo(handle, CURLINFO_XFER_ID, &xfer_id) && xfer_id >= 0) {
+ if(!curl_easy_getinfo(handle, CURLINFO_CONN_ID, &conn_id) &&
+ conn_id >= 0) {
+ curl_msnprintf(idsbuf, sizeof(idsbuf), TRC_IDS_FORMAT_IDS_2,
+ xfer_id, conn_id);
+ }
+ else {
+ curl_msnprintf(idsbuf, sizeof(idsbuf), TRC_IDS_FORMAT_IDS_1, xfer_id);
+ }
+ }
+ else
+ idsbuf[0] = 0;
+
+ switch(type) {
+ case CURLINFO_HEADER_OUT:
+ if(size > 0) {
+ size_t st = 0;
+ size_t i;
+ for(i = 0; i < size - 1; i++) {
+ if(data[i] == '\n') { /* LF */
+ if(!newl) {
+ log_line_start(output, idsbuf, type);
+ }
+ (void)fwrite(data + st, i - st + 1, 1, output);
+ st = i + 1;
+ newl = 0;
+ }
+ }
+ if(!newl)
+ log_line_start(output, idsbuf, type);
+ (void)fwrite(data + st, i - st + 1, 1, output);
+ }
+ newl = (size && (data[size - 1] != '\n')) ? 1 : 0;
+ traced_data = 0;
+ break;
+ case CURLINFO_TEXT:
+ case CURLINFO_HEADER_IN:
+ if(!newl)
+ log_line_start(output, idsbuf, type);
+ (void)fwrite(data, size, 1, output);
+ newl = (size && (data[size - 1] != '\n')) ? 1 : 0;
+ traced_data = 0;
+ break;
+ case CURLINFO_DATA_OUT:
+ case CURLINFO_DATA_IN:
+ case CURLINFO_SSL_DATA_IN:
+ case CURLINFO_SSL_DATA_OUT:
+ if(!traced_data) {
+ if(!newl)
+ log_line_start(output, idsbuf, type);
+ fprintf(output, "[%ld bytes data]\n", (long)size);
+ newl = 0;
+ traced_data = 1;
+ }
+ break;
+ default: /* nada */
+ newl = 0;
+ traced_data = 1;
+ break;
+ }
+
+ return 0;
+}
+
+static int err(void)
+{
+ fprintf(stderr, "something unexpected went wrong - bailing out!\n");
+ exit(2);
+}
+
+struct handle
+{
+ int idx;
+ int paused;
+ int resumed;
+ CURL *h;
+};
+
+static size_t cb(void *data, size_t size, size_t nmemb, void *clientp)
+{
+ size_t realsize = size * nmemb;
+ struct handle *handle = (struct handle *) clientp;
+ curl_off_t totalsize;
+
+ (void)data;
+ if(curl_easy_getinfo(handle->h, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T,
+ &totalsize) == CURLE_OK)
+ fprintf(stderr, "INFO: [%d] write, Content-Length %"CURL_FORMAT_CURL_OFF_T
+ "\n", handle->idx, totalsize);
+
+ if(!handle->resumed) {
+ ++handle->paused;
+ fprintf(stderr, "INFO: [%d] write, PAUSING %d time on %lu bytes\n",
+ handle->idx, handle->paused, (long)realsize);
+ return CURL_WRITEFUNC_PAUSE;
+ }
+ fprintf(stderr, "INFO: [%d] write, accepting %lu bytes\n",
+ handle->idx, (long)realsize);
+ return realsize;
+}
+
+int main(int argc, char *argv[])
+{
+ struct handle handles[HANDLECOUNT];
+ CURLM *multi_handle;
+ int i, still_running = 1, msgs_left, numfds;
+ CURLMsg *msg;
+ int rounds = 0;
+ int rc = 0;
+ CURLU *cu;
+ struct curl_slist *resolve = NULL;
+ char resolve_buf[1024];
+ char *url, *host = NULL, *port = NULL;
+ int all_paused = 0;
+ int resume_round = -1;
+
+ if(argc != 2) {
+ fprintf(stderr, "ERROR: need URL as argument\n");
+ return 2;
+ }
+ url = argv[1];
+
+ curl_global_init(CURL_GLOBAL_DEFAULT);
+ curl_global_trace("ids,time,http/2");
+
+ cu = curl_url();
+ if(!cu) {
+ fprintf(stderr, "out of memory\n");
+ exit(1);
+ }
+ if(curl_url_set(cu, CURLUPART_URL, url, 0)) {
+ fprintf(stderr, "not a URL: '%s'\n", url);
+ exit(1);
+ }
+ if(curl_url_get(cu, CURLUPART_HOST, &host, 0)) {
+ fprintf(stderr, "could not get host of '%s'\n", url);
+ exit(1);
+ }
+ if(curl_url_get(cu, CURLUPART_PORT, &port, 0)) {
+ fprintf(stderr, "could not get port of '%s'\n", url);
+ exit(1);
+ }
+ memset(&resolve, 0, sizeof(resolve));
+ curl_msnprintf(resolve_buf, sizeof(resolve_buf)-1,
+ "%s:%s:127.0.0.1", host, port);
+ resolve = curl_slist_append(resolve, resolve_buf);
+
+ for(i = 0; i<HANDLECOUNT; i++) {
+ handles[i].idx = i;
+ handles[i].paused = 0;
+ handles[i].resumed = 0;
+ handles[i].h = curl_easy_init();
+ if(!handles[i].h ||
+ curl_easy_setopt(handles[i].h, CURLOPT_WRITEFUNCTION, cb) != CURLE_OK ||
+ curl_easy_setopt(handles[i].h, CURLOPT_WRITEDATA, &handles[i])
+ != CURLE_OK ||
+ curl_easy_setopt(handles[i].h, CURLOPT_FOLLOWLOCATION, 1L) != CURLE_OK ||
+ curl_easy_setopt(handles[i].h, CURLOPT_VERBOSE, 1L) != CURLE_OK ||
+ curl_easy_setopt(handles[i].h, CURLOPT_DEBUGFUNCTION, debug_cb)
+ != CURLE_OK ||
+ curl_easy_setopt(handles[i].h, CURLOPT_SSL_VERIFYPEER, 0L) != CURLE_OK ||
+ curl_easy_setopt(handles[i].h, CURLOPT_RESOLVE, resolve) != CURLE_OK ||
+ curl_easy_setopt(handles[i].h, CURLOPT_URL, url) != CURLE_OK) {
+ err();
+ }
+ }
+
+ multi_handle = curl_multi_init();
+ if(!multi_handle)
+ err();
+
+ for(i = 0; i<HANDLECOUNT; i++) {
+ if(curl_multi_add_handle(multi_handle, handles[i].h) != CURLM_OK)
+ err();
+ }
+
+ for(rounds = 0;; rounds++) {
+ fprintf(stderr, "INFO: multi_perform round %d\n", rounds);
+ if(curl_multi_perform(multi_handle, &still_running) != CURLM_OK)
+ err();
+
+ if(!still_running) {
+ int as_expected = 1;
+ fprintf(stderr, "INFO: no more handles running\n");
+ for(i = 0; i<HANDLECOUNT; i++) {
+ if(!handles[i].paused) {
+ fprintf(stderr, "ERROR: [%d] NOT PAUSED\n", i);
+ as_expected = 0;
+ }
+ else if(handles[i].paused != 1) {
+ fprintf(stderr, "ERROR: [%d] PAUSED %d times!\n",
+ i, handles[i].paused);
+ as_expected = 0;
+ }
+ else if(!handles[i].resumed) {
+ fprintf(stderr, "ERROR: [%d] NOT resumed!\n", i);
+ as_expected = 0;
+ }
+ }
+ if(!as_expected) {
+ fprintf(stderr, "ERROR: handles not in expected state "
+ "after %d rounds\n", rounds);
+ rc = 1;
+ }
+ break;
+ }
+
+ if(curl_multi_poll(multi_handle, NULL, 0, 100, &numfds) != CURLM_OK)
+ err();
+
+ while((msg = curl_multi_info_read(multi_handle, &msgs_left))) {
+ if(msg->msg == CURLMSG_DONE) {
+ for(i = 0; i<HANDLECOUNT; i++) {
+ if(msg->easy_handle == handles[i].h) {
+ if(handles[i].paused != 1 || !handles[i].resumed) {
+ fprintf(stderr, "ERROR: [%d] done, pauses=%d, resumed=%d, "
+ "result %d - wtf?\n", i, handles[i].paused,
+ handles[i].resumed, msg->data.result);
+ rc = 1;
+ goto out;
+ }
+ }
+ }
+ }
+ }
+
+ /* Successfully paused? */
+ if(!all_paused) {
+ for(i = 0; i<HANDLECOUNT; i++) {
+ if(!handles[i].paused) {
+ break;
+ }
+ }
+ all_paused = (i == HANDLECOUNT);
+ if(all_paused) {
+ fprintf(stderr, "INFO: all transfers paused\n");
+ /* give transfer some rounds to mess things up */
+ resume_round = rounds + 3;
+ }
+ }
+ if(resume_round > 0 && rounds == resume_round) {
+ /* time to resume */
+ for(i = 0; i<HANDLECOUNT; i++) {
+ fprintf(stderr, "INFO: [%d] resumed\n", i);
+ handles[i].resumed = 1;
+ curl_easy_pause(handles[i].h, CURLPAUSE_CONT);
+ }
+ }
+ }
+
+out:
+ for(i = 0; i<HANDLECOUNT; i++) {
+ curl_multi_remove_handle(multi_handle, handles[i].h);
+ curl_easy_cleanup(handles[i].h);
+ }
+
+
+ curl_slist_free_all(resolve);
+ curl_free(host);
+ curl_free(port);
+ curl_url_cleanup(cu);
+ curl_multi_cleanup(multi_handle);
+ curl_global_cleanup();
+
+ return rc;
+}
diff --git a/tests/http/clients/h2-serverpush.c b/tests/http/clients/h2-serverpush.c
new file mode 100644
index 000000000..742a67e59
--- /dev/null
+++ b/tests/http/clients/h2-serverpush.c
@@ -0,0 +1,272 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ ***************************************************************************/
+/* <DESC>
+ * HTTP/2 server push
+ * </DESC>
+ */
+
+/* curl stuff */
+#include <curl/curl.h>
+#include <curl/mprintf.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* somewhat unix-specific */
+#include <sys/time.h>
+#include <unistd.h>
+
+#ifndef CURLPIPE_MULTIPLEX
+#error "too old libcurl, cannot do HTTP/2 server push!"
+#endif
+
+static
+void dump(const char *text, unsigned char *ptr, size_t size,
+ char nohex)
+{
+ size_t i;
+ size_t c;
+
+ unsigned int width = 0x10;
+
+ if(nohex)
+ /* without the hex output, we can fit more on screen */
+ width = 0x40;
+
+ fprintf(stderr, "%s, %lu bytes (0x%lx)\n",
+ text, (unsigned long)size, (unsigned long)size);
+
+ for(i = 0; i<size; i += width) {
+
+ fprintf(stderr, "%4.4lx: ", (unsigned long)i);
+
+ if(!nohex) {
+ /* hex not disabled, show it */
+ for(c = 0; c < width; c++)
+ if(i + c < size)
+ fprintf(stderr, "%02x ", ptr[i + c]);
+ else
+ fputs(" ", stderr);
+ }
+
+ for(c = 0; (c < width) && (i + c < size); c++) {
+ /* check for 0D0A; if found, skip past and start a new line of output */
+ if(nohex && (i + c + 1 < size) && ptr[i + c] == 0x0D &&
+ ptr[i + c + 1] == 0x0A) {
+ i += (c + 2 - width);
+ break;
+ }
+ fprintf(stderr, "%c",
+ (ptr[i + c] >= 0x20) && (ptr[i + c]<0x80)?ptr[i + c]:'.');
+ /* check again for 0D0A, to avoid an extra \n if it's at width */
+ if(nohex && (i + c + 2 < size) && ptr[i + c + 1] == 0x0D &&
+ ptr[i + c + 2] == 0x0A) {
+ i += (c + 3 - width);
+ break;
+ }
+ }
+ fputc('\n', stderr); /* newline */
+ }
+}
+
+static
+int my_trace(CURL *handle, curl_infotype type,
+ char *data, size_t size,
+ void *userp)
+{
+ const char *text;
+ (void)handle; /* prevent compiler warning */
+ (void)userp;
+ switch(type) {
+ case CURLINFO_TEXT:
+ fprintf(stderr, "== Info: %s", data);
+ /* FALLTHROUGH */
+ default: /* in case a new one is introduced to shock us */
+ return 0;
+
+ case CURLINFO_HEADER_OUT:
+ text = "=> Send header";
+ break;
+ case CURLINFO_DATA_OUT:
+ text = "=> Send data";
+ break;
+ case CURLINFO_SSL_DATA_OUT:
+ text = "=> Send SSL data";
+ break;
+ case CURLINFO_HEADER_IN:
+ text = "<= Recv header";
+ break;
+ case CURLINFO_DATA_IN:
+ text = "<= Recv data";
+ break;
+ case CURLINFO_SSL_DATA_IN:
+ text = "<= Recv SSL data";
+ break;
+ }
+
+ dump(text, (unsigned char *)data, size, 1);
+ return 0;
+}
+
+#define OUTPUTFILE "download_0.data"
+
+static int setup(CURL *hnd, const char *url)
+{
+ FILE *out = fopen(OUTPUTFILE, "wb");
+ if(!out)
+ /* failed */
+ return 1;
+
+ curl_easy_setopt(hnd, CURLOPT_URL, url);
+ curl_easy_setopt(hnd, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
+ curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYPEER, 0L);
+ curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYHOST, 0L);
+
+ curl_easy_setopt(hnd, CURLOPT_WRITEDATA, out);
+
+ /* please be verbose */
+ curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
+ curl_easy_setopt(hnd, CURLOPT_DEBUGFUNCTION, my_trace);
+
+#if (CURLPIPE_MULTIPLEX > 0)
+ /* wait for pipe connection to confirm */
+ curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L);
+#endif
+ return 0; /* all is good */
+}
+
+/* called when there's an incoming push */
+static int server_push_callback(CURL *parent,
+ CURL *easy,
+ size_t num_headers,
+ struct curl_pushheaders *headers,
+ void *userp)
+{
+ char *headp;
+ size_t i;
+ int *transfers = (int *)userp;
+ char filename[128];
+ FILE *out;
+ static unsigned int count = 0;
+ int rv;
+
+ (void)parent; /* we have no use for this */
+ curl_msnprintf(filename, sizeof(filename)-1, "push%u", count++);
+
+ /* here's a new stream, save it in a new file for each new push */
+ out = fopen(filename, "wb");
+ if(!out) {
+ /* if we cannot save it, deny it */
+ fprintf(stderr, "Failed to create output file for push\n");
+ rv = CURL_PUSH_DENY;
+ goto out;
+ }
+
+ /* write to this file */
+ curl_easy_setopt(easy, CURLOPT_WRITEDATA, out);
+
+ fprintf(stderr, "**** push callback approves stream %u, got %lu headers!\n",
+ count, (unsigned long)num_headers);
+
+ for(i = 0; i<num_headers; i++) {
+ headp = curl_pushheader_bynum(headers, i);
+ fprintf(stderr, "**** header %lu: %s\n", (unsigned long)i, headp);
+ }
+
+ headp = curl_pushheader_byname(headers, ":path");
+ if(headp) {
+ fprintf(stderr, "**** The PATH is %s\n", headp /* skip :path + colon */);
+ }
+
+ (*transfers)++; /* one more */
+ rv = CURL_PUSH_OK;
+
+out:
+ return rv;
+}
+
+
+/*
+ * Download a file over HTTP/2, take care of server push.
+ */
+int main(int argc, char *argv[])
+{
+ CURL *easy;
+ CURLM *multi_handle;
+ int transfers = 1; /* we start with one */
+ struct CURLMsg *m;
+ const char *url;
+
+ if(argc != 2) {
+ fprintf(stderr, "need URL as argument\n");
+ return 2;
+ }
+ url = argv[1];
+
+ multi_handle = curl_multi_init();
+ curl_multi_setopt(multi_handle, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX);
+ curl_multi_setopt(multi_handle, CURLMOPT_PUSHFUNCTION, server_push_callback);
+ curl_multi_setopt(multi_handle, CURLMOPT_PUSHDATA, &transfers);
+
+ easy = curl_easy_init();
+ if(setup(easy, url)) {
+ fprintf(stderr, "failed\n");
+ return 1;
+ }
+
+ curl_multi_add_handle(multi_handle, easy);
+ do {
+ int still_running; /* keep number of running handles */
+ CURLMcode mc = curl_multi_perform(multi_handle, &still_running);
+
+ if(still_running)
+ /* wait for activity, timeout or "nothing" */
+ mc = curl_multi_poll(multi_handle, NULL, 0, 1000, NULL);
+
+ if(mc)
+ break;
+
+ /*
+ * A little caution when doing server push is that libcurl itself has
+ * created and added one or more easy handles but we need to clean them up
+ * when we are done.
+ */
+ do {
+ int msgq = 0;
+ m = curl_multi_info_read(multi_handle, &msgq);
+ if(m && (m->msg == CURLMSG_DONE)) {
+ CURL *e = m->easy_handle;
+ transfers--;
+ curl_multi_remove_handle(multi_handle, e);
+ curl_easy_cleanup(e);
+ }
+ } while(m);
+
+ } while(transfers); /* as long as we have transfers going */
+
+ curl_multi_cleanup(multi_handle);
+
+ return 0;
+}
diff --git a/tests/http/clients/h2-upgrade-extreme.c b/tests/http/clients/h2-upgrade-extreme.c
new file mode 100644
index 000000000..e15e34ce0
--- /dev/null
+++ b/tests/http/clients/h2-upgrade-extreme.c
@@ -0,0 +1,249 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ ***************************************************************************/
+/* <DESC>
+ * HTTP/2 Upgrade test
+ * </DESC>
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <inttypes.h>
+/* #include <error.h> */
+#include <errno.h>
+#include <curl/curl.h>
+#include <curl/mprintf.h>
+
+
+static void log_line_start(FILE *log, const char *idsbuf, curl_infotype type)
+{
+ /*
+ * This is the trace look that is similar to what libcurl makes on its
+ * own.
+ */
+ static const char * const s_infotype[] = {
+ "* ", "< ", "> ", "{ ", "} ", "{ ", "} "
+ };
+ if(idsbuf && *idsbuf)
+ fprintf(log, "%s%s", idsbuf, s_infotype[type]);
+ else
+ fputs(s_infotype[type], log);
+}
+
+#define TRC_IDS_FORMAT_IDS_1 "[%" CURL_FORMAT_CURL_OFF_T "-x] "
+#define TRC_IDS_FORMAT_IDS_2 "[%" CURL_FORMAT_CURL_OFF_T "-%" \
+ CURL_FORMAT_CURL_OFF_T "] "
+/*
+** callback for CURLOPT_DEBUGFUNCTION
+*/
+static int debug_cb(CURL *handle, curl_infotype type,
+ char *data, size_t size,
+ void *userdata)
+{
+ FILE *output = stderr;
+ static int newl = 0;
+ static int traced_data = 0;
+ char idsbuf[60];
+ curl_off_t xfer_id, conn_id;
+
+ (void)handle; /* not used */
+ (void)userdata;
+
+ if(!curl_easy_getinfo(handle, CURLINFO_XFER_ID, &xfer_id) && xfer_id >= 0) {
+ if(!curl_easy_getinfo(handle, CURLINFO_CONN_ID, &conn_id) &&
+ conn_id >= 0) {
+ curl_msnprintf(idsbuf, sizeof(idsbuf), TRC_IDS_FORMAT_IDS_2,
+ xfer_id, conn_id);
+ }
+ else {
+ curl_msnprintf(idsbuf, sizeof(idsbuf), TRC_IDS_FORMAT_IDS_1, xfer_id);
+ }
+ }
+ else
+ idsbuf[0] = 0;
+
+ switch(type) {
+ case CURLINFO_HEADER_OUT:
+ if(size > 0) {
+ size_t st = 0;
+ size_t i;
+ for(i = 0; i < size - 1; i++) {
+ if(data[i] == '\n') { /* LF */
+ if(!newl) {
+ log_line_start(output, idsbuf, type);
+ }
+ (void)fwrite(data + st, i - st + 1, 1, output);
+ st = i + 1;
+ newl = 0;
+ }
+ }
+ if(!newl)
+ log_line_start(output, idsbuf, type);
+ (void)fwrite(data + st, i - st + 1, 1, output);
+ }
+ newl = (size && (data[size - 1] != '\n')) ? 1 : 0;
+ traced_data = 0;
+ break;
+ case CURLINFO_TEXT:
+ case CURLINFO_HEADER_IN:
+ if(!newl)
+ log_line_start(output, idsbuf, type);
+ (void)fwrite(data, size, 1, output);
+ newl = (size && (data[size - 1] != '\n')) ? 1 : 0;
+ traced_data = 0;
+ break;
+ case CURLINFO_DATA_OUT:
+ case CURLINFO_DATA_IN:
+ case CURLINFO_SSL_DATA_IN:
+ case CURLINFO_SSL_DATA_OUT:
+ if(!traced_data) {
+ if(!newl)
+ log_line_start(output, idsbuf, type);
+ fprintf(output, "[%ld bytes data]\n", (long)size);
+ newl = 0;
+ traced_data = 1;
+ }
+ break;
+ default: /* nada */
+ newl = 0;
+ traced_data = 1;
+ break;
+ }
+
+ return 0;
+}
+
+static size_t write_cb(char *ptr, size_t size, size_t nmemb, void *opaque)
+{
+ (void)ptr;
+ (void)opaque;
+ return size * nmemb;
+}
+
+int main(int argc, char *argv[])
+{
+ const char *url;
+ CURLM *multi;
+ CURL *easy;
+ CURLMcode mc;
+ int running_handles = 0, start_count, numfds;
+ CURLMsg *msg;
+ int msgs_in_queue;
+ char range[128];
+
+ if(argc != 2) {
+ fprintf(stderr, "%s URL\n", argv[0]);
+ exit(2);
+ }
+
+ url = argv[1];
+ multi = curl_multi_init();
+ if(!multi) {
+ fprintf(stderr, "curl_multi_init failed\n");
+ exit(1);
+ }
+
+ start_count = 200;
+ do {
+ if(start_count) {
+ easy = curl_easy_init();
+ if(!easy) {
+ fprintf(stderr, "curl_easy_init failed\n");
+ exit(1);
+ }
+ curl_easy_setopt(easy, CURLOPT_VERBOSE, 1L);
+ curl_easy_setopt(easy, CURLOPT_DEBUGFUNCTION, debug_cb);
+ curl_easy_setopt(easy, CURLOPT_URL, url);
+ curl_easy_setopt(easy, CURLOPT_NOSIGNAL, 1L);
+ curl_easy_setopt(easy, CURLOPT_AUTOREFERER, 1L);
+ curl_easy_setopt(easy, CURLOPT_FAILONERROR, 1L);
+ curl_easy_setopt(easy, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
+ curl_easy_setopt(easy, CURLOPT_WRITEFUNCTION, write_cb);
+ curl_easy_setopt(easy, CURLOPT_WRITEDATA, NULL);
+ curl_easy_setopt(easy, CURLOPT_HTTPGET, 1L);
+ curl_msnprintf(range, sizeof(range), "%" PRIu64 "-%" PRIu64,
+ UINT64_C(0), UINT64_C(16384));
+ curl_easy_setopt(easy, CURLOPT_RANGE, range);
+
+ mc = curl_multi_add_handle(multi, easy);
+ if(mc != CURLM_OK) {
+ fprintf(stderr, "curl_multi_add_handle: %s\n",
+ curl_multi_strerror(mc));
+ exit(1);
+ }
+ --start_count;
+ }
+
+ mc = curl_multi_perform(multi, &running_handles);
+ if(mc != CURLM_OK) {
+ fprintf(stderr, "curl_multi_perform: %s\n",
+ curl_multi_strerror(mc));
+ exit(1);
+ }
+
+ if(running_handles) {
+ mc = curl_multi_poll(multi, NULL, 0, 1000000, &numfds);
+ if(mc != CURLM_OK) {
+ fprintf(stderr, "curl_multi_poll: %s\n",
+ curl_multi_strerror(mc));
+ exit(1);
+ }
+ }
+
+ /* Check for finished handles and remove. */
+ while((msg = curl_multi_info_read(multi, &msgs_in_queue))) {
+ if(msg->msg == CURLMSG_DONE) {
+ long status = 0;
+ curl_off_t xfer_id;
+ curl_easy_getinfo(msg->easy_handle, CURLINFO_XFER_ID, &xfer_id);
+ curl_easy_getinfo(msg->easy_handle, CURLINFO_RESPONSE_CODE, &status);
+ if(msg->data.result == CURLE_SEND_ERROR ||
+ msg->data.result == CURLE_RECV_ERROR) {
+ /* We get these if the server had a GOAWAY in transit on
+ * re-using a connection */
+ }
+ else if(msg->data.result) {
+ fprintf(stderr, "transfer #%" CURL_FORMAT_CURL_OFF_T
+ ": failed with %d\n", xfer_id, msg->data.result);
+ exit(1);
+ }
+ else if(status != 206) {
+ fprintf(stderr, "transfer #%" CURL_FORMAT_CURL_OFF_T
+ ": wrong http status %ld (expected 206)\n", xfer_id, status);
+ exit(1);
+ }
+ curl_multi_remove_handle(multi, msg->easy_handle);
+ curl_easy_cleanup(msg->easy_handle);
+ fprintf(stderr, "transfer #%" CURL_FORMAT_CURL_OFF_T" retiring "
+ "(%d now running)\n", xfer_id, running_handles);
+ }
+ }
+
+ fprintf(stderr, "running_handles=%d, yet_to_start=%d\n",
+ running_handles, start_count);
+
+ } while(running_handles > 0 || start_count);
+
+ fprintf(stderr, "exiting\n");
+ exit(EXIT_SUCCESS);
+}
diff --git a/tests/http/clients/tls-session-reuse.c b/tests/http/clients/tls-session-reuse.c
new file mode 100644
index 000000000..0309276cf
--- /dev/null
+++ b/tests/http/clients/tls-session-reuse.c
@@ -0,0 +1,306 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ ***************************************************************************/
+/* <DESC>
+ * TLS session reuse
+ * </DESC>
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <inttypes.h>
+/* #include <error.h> */
+#include <errno.h>
+#include <curl/curl.h>
+#include <curl/mprintf.h>
+
+
+static void log_line_start(FILE *log, const char *idsbuf, curl_infotype type)
+{
+ /*
+ * This is the trace look that is similar to what libcurl makes on its
+ * own.
+ */
+ static const char * const s_infotype[] = {
+ "* ", "< ", "> ", "{ ", "} ", "{ ", "} "
+ };
+ if(idsbuf && *idsbuf)
+ fprintf(log, "%s%s", idsbuf, s_infotype[type]);
+ else
+ fputs(s_infotype[type], log);
+}
+
+#define TRC_IDS_FORMAT_IDS_1 "[%" CURL_FORMAT_CURL_OFF_T "-x] "
+#define TRC_IDS_FORMAT_IDS_2 "[%" CURL_FORMAT_CURL_OFF_T "-%" \
+ CURL_FORMAT_CURL_OFF_T "] "
+/*
+** callback for CURLOPT_DEBUGFUNCTION
+*/
+static int debug_cb(CURL *handle, curl_infotype type,
+ char *data, size_t size,
+ void *userdata)
+{
+ FILE *output = stderr;
+ static int newl = 0;
+ static int traced_data = 0;
+ char idsbuf[60];
+ curl_off_t xfer_id, conn_id;
+
+ (void)handle; /* not used */
+ (void)userdata;
+
+ if(!curl_easy_getinfo(handle, CURLINFO_XFER_ID, &xfer_id) && xfer_id >= 0) {
+ if(!curl_easy_getinfo(handle, CURLINFO_CONN_ID, &conn_id) &&
+ conn_id >= 0) {
+ curl_msnprintf(idsbuf, sizeof(idsbuf), TRC_IDS_FORMAT_IDS_2,
+ xfer_id, conn_id);
+ }
+ else {
+ curl_msnprintf(idsbuf, sizeof(idsbuf), TRC_IDS_FORMAT_IDS_1, xfer_id);
+ }
+ }
+ else
+ idsbuf[0] = 0;
+
+ switch(type) {
+ case CURLINFO_HEADER_OUT:
+ if(size > 0) {
+ size_t st = 0;
+ size_t i;
+ for(i = 0; i < size - 1; i++) {
+ if(data[i] == '\n') { /* LF */
+ if(!newl) {
+ log_line_start(output, idsbuf, type);
+ }
+ (void)fwrite(data + st, i - st + 1, 1, output);
+ st = i + 1;
+ newl = 0;
+ }
+ }
+ if(!newl)
+ log_line_start(output, idsbuf, type);
+ (void)fwrite(data + st, i - st + 1, 1, output);
+ }
+ newl = (size && (data[size - 1] != '\n')) ? 1 : 0;
+ traced_data = 0;
+ break;
+ case CURLINFO_TEXT:
+ case CURLINFO_HEADER_IN:
+ if(!newl)
+ log_line_start(output, idsbuf, type);
+ (void)fwrite(data, size, 1, output);
+ newl = (size && (data[size - 1] != '\n')) ? 1 : 0;
+ traced_data = 0;
+ break;
+ case CURLINFO_DATA_OUT:
+ case CURLINFO_DATA_IN:
+ case CURLINFO_SSL_DATA_IN:
+ case CURLINFO_SSL_DATA_OUT:
+ if(!traced_data) {
+ if(!newl)
+ log_line_start(output, idsbuf, type);
+ fprintf(output, "[%ld bytes data]\n", (long)size);
+ newl = 0;
+ traced_data = 1;
+ }
+ break;
+ default: /* nada */
+ newl = 0;
+ traced_data = 1;
+ break;
+ }
+
+ return 0;
+}
+
+static size_t write_cb(char *ptr, size_t size, size_t nmemb, void *opaque)
+{
+ (void)ptr;
+ (void)opaque;
+ return size * nmemb;
+}
+
+static void add_transfer(CURLM *multi, CURLSH *share,
+ struct curl_slist *resolve, const char *url)
+{
+ CURL *easy;
+ CURLMcode mc;
+
+ easy = curl_easy_init();
+ if(!easy) {
+ fprintf(stderr, "curl_easy_init failed\n");
+ exit(1);
+ }
+ curl_easy_setopt(easy, CURLOPT_VERBOSE, 1L);
+ curl_easy_setopt(easy, CURLOPT_DEBUGFUNCTION, debug_cb);
+ curl_easy_setopt(easy, CURLOPT_URL, url);
+ curl_easy_setopt(easy, CURLOPT_SHARE, share);
+ curl_easy_setopt(easy, CURLOPT_NOSIGNAL, 1L);
+ curl_easy_setopt(easy, CURLOPT_AUTOREFERER, 1L);
+ curl_easy_setopt(easy, CURLOPT_FAILONERROR, 1L);
+ curl_easy_setopt(easy, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
+ curl_easy_setopt(easy, CURLOPT_WRITEFUNCTION, write_cb);
+ curl_easy_setopt(easy, CURLOPT_WRITEDATA, NULL);
+ curl_easy_setopt(easy, CURLOPT_HTTPGET, 1L);
+ curl_easy_setopt(easy, CURLOPT_SSL_VERIFYPEER, 0L);
+ if(resolve)
+ curl_easy_setopt(easy, CURLOPT_RESOLVE, resolve);
+
+
+ mc = curl_multi_add_handle(multi, easy);
+ if(mc != CURLM_OK) {
+ fprintf(stderr, "curl_multi_add_handle: %s\n",
+ curl_multi_strerror(mc));
+ exit(1);
+ }
+}
+
+int main(int argc, char *argv[])
+{
+ const char *url;
+ CURLM *multi;
+ CURLMcode mc;
+ int running_handles = 0, numfds;
+ CURLMsg *msg;
+ CURLSH *share;
+ CURLU *cu;
+ struct curl_slist resolve;
+ char resolve_buf[1024];
+ int msgs_in_queue;
+ int add_more, waits, ongoing = 0;
+ char *host, *port;
+
+ if(argc != 2) {
+ fprintf(stderr, "%s URL\n", argv[0]);
+ exit(2);
+ }
+
+ url = argv[1];
+ cu = curl_url();
+ if(!cu) {
+ fprintf(stderr, "out of memory\n");
+ exit(1);
+ }
+ if(curl_url_set(cu, CURLUPART_URL, url, 0)) {
+ fprintf(stderr, "not a URL: '%s'\n", url);
+ exit(1);
+ }
+ if(curl_url_get(cu, CURLUPART_HOST, &host, 0)) {
+ fprintf(stderr, "could not get host of '%s'\n", url);
+ exit(1);
+ }
+ if(curl_url_get(cu, CURLUPART_PORT, &port, 0)) {
+ fprintf(stderr, "could not get port of '%s'\n", url);
+ exit(1);
+ }
+
+ memset(&resolve, 0, sizeof(resolve));
+ curl_msnprintf(resolve_buf, sizeof(resolve_buf)-1,
+ "%s:%s:127.0.0.1", host, port);
+ curl_slist_append(&resolve, resolve_buf);
+
+ multi = curl_multi_init();
+ if(!multi) {
+ fprintf(stderr, "curl_multi_init failed\n");
+ exit(1);
+ }
+
+ share = curl_share_init();
+ if(!share) {
+ fprintf(stderr, "curl_share_init failed\n");
+ exit(1);
+ }
+ curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_SSL_SESSION);
+
+
+ add_transfer(multi, share, &resolve, url);
+ ++ongoing;
+ add_more = 6;
+ waits = 3;
+ do {
+ mc = curl_multi_perform(multi, &running_handles);
+ if(mc != CURLM_OK) {
+ fprintf(stderr, "curl_multi_perform: %s\n",
+ curl_multi_strerror(mc));
+ exit(1);
+ }
+
+ if(running_handles) {
+ mc = curl_multi_poll(multi, NULL, 0, 1000000, &numfds);
+ if(mc != CURLM_OK) {
+ fprintf(stderr, "curl_multi_poll: %s\n",
+ curl_multi_strerror(mc));
+ exit(1);
+ }
+ }
+
+ if(waits) {
+ --waits;
+ }
+ else {
+ while(add_more) {
+ add_transfer(multi, share, &resolve, url);
+ ++ongoing;
+ --add_more;
+ }
+ }
+
+ /* Check for finished handles and remove. */
+ while((msg = curl_multi_info_read(multi, &msgs_in_queue))) {
+ if(msg->msg == CURLMSG_DONE) {
+ long status = 0;
+ curl_off_t xfer_id;
+ curl_easy_getinfo(msg->easy_handle, CURLINFO_XFER_ID, &xfer_id);
+ curl_easy_getinfo(msg->easy_handle, CURLINFO_RESPONSE_CODE, &status);
+ if(msg->data.result == CURLE_SEND_ERROR ||
+ msg->data.result == CURLE_RECV_ERROR) {
+ /* We get these if the server had a GOAWAY in transit on
+ * re-using a connection */
+ }
+ else if(msg->data.result) {
+ fprintf(stderr, "transfer #%" CURL_FORMAT_CURL_OFF_T
+ ": failed with %d\n", xfer_id, msg->data.result);
+ exit(1);
+ }
+ else if(status != 200) {
+ fprintf(stderr, "transfer #%" CURL_FORMAT_CURL_OFF_T
+ ": wrong http status %ld (expected 200)\n", xfer_id, status);
+ exit(1);
+ }
+ curl_multi_remove_handle(multi, msg->easy_handle);
+ curl_easy_cleanup(msg->easy_handle);
+ --ongoing;
+ fprintf(stderr, "transfer #%" CURL_FORMAT_CURL_OFF_T" retiring "
+ "(%d now running)\n", xfer_id, running_handles);
+ }
+ }
+
+ fprintf(stderr, "running_handles=%d, yet_to_start=%d\n",
+ running_handles, add_more);
+
+ } while(ongoing || add_more);
+
+ fprintf(stderr, "exiting\n");
+ exit(EXIT_SUCCESS);
+}
diff --git a/tests/http/clients/ws-data.c b/tests/http/clients/ws-data.c
new file mode 100644
index 000000000..487d109ef
--- /dev/null
+++ b/tests/http/clients/ws-data.c
@@ -0,0 +1,263 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ ***************************************************************************/
+/* <DESC>
+ * Websockets data echos
+ * </DESC>
+ */
+
+/* curl stuff */
+#include "curl_setup.h"
+#include <curl/curl.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* somewhat unix-specific */
+#include <sys/time.h>
+#include <unistd.h>
+
+#ifdef USE_WEBSOCKETS
+
+static
+void dump(const char *text, unsigned char *ptr, size_t size,
+ char nohex)
+{
+ size_t i;
+ size_t c;
+
+ unsigned int width = 0x10;
+
+ if(nohex)
+ /* without the hex output, we can fit more on screen */
+ width = 0x40;
+
+ fprintf(stderr, "%s, %lu bytes (0x%lx)\n",
+ text, (unsigned long)size, (unsigned long)size);
+
+ for(i = 0; i<size; i += width) {
+
+ fprintf(stderr, "%4.4lx: ", (unsigned long)i);
+
+ if(!nohex) {
+ /* hex not disabled, show it */
+ for(c = 0; c < width; c++)
+ if(i + c < size)
+ fprintf(stderr, "%02x ", ptr[i + c]);
+ else
+ fputs(" ", stderr);
+ }
+
+ for(c = 0; (c < width) && (i + c < size); c++) {
+ /* check for 0D0A; if found, skip past and start a new line of output */
+ if(nohex && (i + c + 1 < size) && ptr[i + c] == 0x0D &&
+ ptr[i + c + 1] == 0x0A) {
+ i += (c + 2 - width);
+ break;
+ }
+ fprintf(stderr, "%c",
+ (ptr[i + c] >= 0x20) && (ptr[i + c]<0x80)?ptr[i + c]:'.');
+ /* check again for 0D0A, to avoid an extra \n if it's at width */
+ if(nohex && (i + c + 2 < size) && ptr[i + c + 1] == 0x0D &&
+ ptr[i + c + 2] == 0x0A) {
+ i += (c + 3 - width);
+ break;
+ }
+ }
+ fputc('\n', stderr); /* newline */
+ }
+}
+
+static CURLcode send_binary(CURL *curl, char *buf, size_t buflen)
+{
+ size_t nwritten;
+ CURLcode result =
+ curl_ws_send(curl, buf, buflen, &nwritten, 0, CURLWS_BINARY);
+ fprintf(stderr, "ws: send_binary(len=%ld) -> %d, %ld\n",
+ (long)buflen, result, (long)nwritten);
+ return result;
+}
+
+static CURLcode recv_binary(CURL *curl, char *exp_data, size_t exp_len)
+{
+ const struct curl_ws_frame *frame;
+ char recvbuf[256];
+ size_t r_offset, nread;
+ CURLcode result;
+
+ fprintf(stderr, "recv_binary: expected payload %ld bytes\n", (long)exp_len);
+ r_offset = 0;
+ while(1) {
+ result = curl_ws_recv(curl, recvbuf, sizeof(recvbuf), &nread, &frame);
+ if(result == CURLE_AGAIN) {
+ fprintf(stderr, "EAGAIN, sleep, try again\n");
+ usleep(100*1000);
+ continue;
+ }
+ fprintf(stderr, "ws: curl_ws_recv(offset=%ld, len=%ld) -> %d, %ld\n",
+ (long)r_offset, (long)sizeof(recvbuf), result, (long)nread);
+ if(result) {
+ return result;
+ }
+ if(!(frame->flags & CURLWS_BINARY)) {
+ fprintf(stderr, "recv_data: wrong frame, got %ld bytes rflags %x\n",
+ (long)nread, frame->flags);
+ return CURLE_RECV_ERROR;
+ }
+ if(frame->offset != (curl_off_t)r_offset) {
+ fprintf(stderr, "recv_data: frame offset, expected %ld, got %ld\n",
+ (long)r_offset, (long)frame->offset);
+ return CURLE_RECV_ERROR;
+ }
+ if(frame->bytesleft != (curl_off_t)(exp_len - r_offset - nread)) {
+ fprintf(stderr, "recv_data: frame bytesleft, expected %ld, got %ld\n",
+ (long)(exp_len - r_offset - nread), (long)frame->bytesleft);
+ return CURLE_RECV_ERROR;
+ }
+ if(r_offset + nread > exp_len) {
+ fprintf(stderr, "recv_data: data length, expected %ld, now at %ld\n",
+ (long)exp_len, (long)(r_offset + nread));
+ return CURLE_RECV_ERROR;
+ }
+ if(memcmp(exp_data + r_offset, recvbuf, nread)) {
+ fprintf(stderr, "recv_data: data differs, offset=%ld, len=%ld\n",
+ (long)r_offset, (long)nread);
+ dump("expected:", (unsigned char *)exp_data + r_offset, nread, 0);
+ dump("received:", (unsigned char *)recvbuf, nread, 0);
+ return CURLE_RECV_ERROR;
+ }
+ r_offset += nread;
+ if(r_offset >= exp_len) {
+ fprintf(stderr, "recv_data: frame complete\n");
+ break;
+ }
+ }
+ return CURLE_OK;
+}
+
+/* just close the connection */
+static void websocket_close(CURL *curl)
+{
+ size_t sent;
+ CURLcode result =
+ curl_ws_send(curl, "", 0, &sent, 0, CURLWS_CLOSE);
+ fprintf(stderr,
+ "ws: curl_ws_send returned %u, sent %u\n", (int)result, (int)sent);
+}
+
+static CURLcode data_echo(CURL *curl, size_t plen_min, size_t plen_max)
+{
+ CURLcode res;
+ size_t len;
+ char *send_buf;
+ size_t i;
+
+ send_buf = calloc(1, plen_max);
+ if(!send_buf)
+ return CURLE_OUT_OF_MEMORY;
+ for(i = 0; i < plen_max; ++i) {
+ send_buf[i] = (char)('0' + ((int)i % 10));
+ }
+
+ for(len = plen_min; len <= plen_max; ++len) {
+ res = send_binary(curl, send_buf, len);
+ if(res)
+ goto out;
+ res = recv_binary(curl, send_buf, len);
+ if(res) {
+ fprintf(stderr, "recv_data(len=%ld) -> %d\n", (long)len, res);
+ goto out;
+ }
+ }
+
+out:
+ if(!res)
+ websocket_close(curl);
+ free(send_buf);
+ return res;
+}
+
+#endif
+
+int main(int argc, char *argv[])
+{
+#ifdef USE_WEBSOCKETS
+ CURL *curl;
+ CURLcode res = CURLE_OK;
+ const char *url;
+ long l1, l2;
+ size_t plen_min, plen_max;
+
+
+ if(argc != 4) {
+ fprintf(stderr, "usage: ws-data url minlen maxlen\n");
+ return 2;
+ }
+ url = argv[1];
+ l1 = strtol(argv[2], NULL, 10);
+ if(l1 < 0) {
+ fprintf(stderr, "minlen must be >= 0, got %ld\n", l1);
+ return 2;
+ }
+ l2 = strtol(argv[3], NULL, 10);
+ if(l2 < 0) {
+ fprintf(stderr, "maxlen must be >= 0, got %ld\n", l2);
+ return 2;
+ }
+ plen_min = l1;
+ plen_max = l2;
+ if(plen_max < plen_min) {
+ fprintf(stderr, "maxlen must be >= minlen, got %ld-%ld\n",
+ (long)plen_min, (long)plen_max);
+ return 2;
+ }
+
+ curl_global_init(CURL_GLOBAL_ALL);
+
+ curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, url);
+
+ /* use the callback style */
+ curl_easy_setopt(curl, CURLOPT_USERAGENT, "ws-data");
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+ curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 2L); /* websocket style */
+ res = curl_easy_perform(curl);
+ fprintf(stderr, "curl_easy_perform() returned %u\n", (int)res);
+ if(res == CURLE_OK)
+ res = data_echo(curl, plen_min, plen_max);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ curl_global_cleanup();
+ return (int)res;
+
+#else /* USE_WEBSOCKETS */
+ (void)argc;
+ (void)argv;
+ fprintf(stderr, "websockets not enabled in libcurl\n");
+ return 1;
+#endif /* !USE_WEBSOCKETS */
+}
diff --git a/tests/http/clients/ws-pingpong.c b/tests/http/clients/ws-pingpong.c
new file mode 100644
index 000000000..dc36d4548
--- /dev/null
+++ b/tests/http/clients/ws-pingpong.c
@@ -0,0 +1,158 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ ***************************************************************************/
+/* <DESC>
+ * Websockets pingpong
+ * </DESC>
+ */
+
+/* curl stuff */
+#include "curl_setup.h"
+#include <curl/curl.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* somewhat unix-specific */
+#include <sys/time.h>
+#include <unistd.h>
+
+#ifdef USE_WEBSOCKETS
+
+static CURLcode ping(CURL *curl, const char *send_payload)
+{
+ size_t sent;
+ CURLcode result =
+ curl_ws_send(curl, send_payload, strlen(send_payload), &sent, 0,
+ CURLWS_PING);
+ fprintf(stderr,
+ "ws: curl_ws_send returned %u, sent %u\n", (int)result, (int)sent);
+
+ return result;
+}
+
+static CURLcode recv_pong(CURL *curl, const char *expected_payload)
+{
+ size_t rlen;
+ const struct curl_ws_frame *meta;
+ char buffer[256];
+ CURLcode result = curl_ws_recv(curl, buffer, sizeof(buffer), &rlen, &meta);
+ if(result) {
+ fprintf(stderr, "ws: curl_ws_recv returned %u, received %ld\n",
+ (int)result, (long)rlen);
+ return result;
+ }
+
+ if(!(meta->flags & CURLWS_PONG)) {
+ fprintf(stderr, "recv_pong: wrong frame, got %d bytes rflags %x\n",
+ (int)rlen, meta->flags);
+ return CURLE_RECV_ERROR;
+ }
+
+ fprintf(stderr, "ws: got PONG back\n");
+ if(rlen == strlen(expected_payload) &&
+ !memcmp(expected_payload, buffer, rlen)) {
+ fprintf(stderr, "ws: got the same payload back\n");
+ return CURLE_OK;
+ }
+ fprintf(stderr, "ws: did NOT get the same payload back\n");
+ return CURLE_RECV_ERROR;
+}
+
+/* just close the connection */
+static void websocket_close(CURL *curl)
+{
+ size_t sent;
+ CURLcode result =
+ curl_ws_send(curl, "", 0, &sent, 0, CURLWS_CLOSE);
+ fprintf(stderr,
+ "ws: curl_ws_send returned %u, sent %u\n", (int)result, (int)sent);
+}
+
+static CURLcode pingpong(CURL *curl, const char *payload)
+{
+ CURLcode res;
+ int i;
+
+ res = ping(curl, payload);
+ if(res)
+ return res;
+ for(i = 0; i < 10; ++i) {
+ fprintf(stderr, "Receive pong\n");
+ res = recv_pong(curl, payload);
+ if(res == CURLE_AGAIN) {
+ usleep(100*1000);
+ continue;
+ }
+ websocket_close(curl);
+ return res;
+ }
+ websocket_close(curl);
+ return CURLE_RECV_ERROR;
+}
+
+#endif
+
+int main(int argc, char *argv[])
+{
+#ifdef USE_WEBSOCKETS
+ CURL *curl;
+ CURLcode res = CURLE_OK;
+ const char *url, *payload;
+
+ if(argc != 3) {
+ fprintf(stderr, "usage: ws-pingpong url payload\n");
+ return 2;
+ }
+ url = argv[1];
+ payload = argv[2];
+
+ curl_global_init(CURL_GLOBAL_ALL);
+
+ curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, url);
+
+ /* use the callback style */
+ curl_easy_setopt(curl, CURLOPT_USERAGENT, "ws-pingpong");
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+ curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 2L); /* websocket style */
+ res = curl_easy_perform(curl);
+ fprintf(stderr, "curl_easy_perform() returned %u\n", (int)res);
+ if(res == CURLE_OK)
+ res = pingpong(curl, payload);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ curl_global_cleanup();
+ return (int)res;
+
+#else /* USE_WEBSOCKETS */
+ (void)argc;
+ (void)argv;
+ fprintf(stderr, "websockets not enabled in libcurl\n");
+ return 1;
+#endif /* !USE_WEBSOCKETS */
+}
diff --git a/lib/makefile.amiga b/tests/http/config.ini.in
index d5c8fe615..42a967906 100644
--- a/lib/makefile.amiga
+++ b/tests/http/config.ini.in
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
#***************************************************************************
# _ _ ____ _
# Project ___| | | | _ \| |
@@ -5,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -22,23 +23,15 @@
#
###########################################################################
#
-# libcurl Makefile for AmigaOS ...
-#
-
-# change the follow to where you have the AmiTCP SDK v4.3 includes:
-
-ATCPSDKI= /GG/netinclude
-
-
-CC = m68k-amigaos-gcc
-CFLAGS = -I$(ATCPSDKI) -m68020-60 -O2 -msoft-float -noixemul -g -I. -I../include -W -Wall -DUSE_OPENSSL -DHAVE_LIBZ
+[global]
-include Makefile.inc
-OBJS = $(CSOURCES:.c=.o)
+[httpd]
+apxs = @APXS@
+httpd = @HTTPD@
+apachectl = @APACHECTL@
-all: $(OBJS)
- ar cru libcurl.a $(OBJS)
- ranlib libcurl.a
+[nghttpx]
+nghttpx = @HTTPD_NGHTTPX@
-install:
- $(INSTALL) -c ./libcurl.a /lib/libcurl.a
+[caddy]
+caddy = @CADDY@
diff --git a/tests/http2-server.pl b/tests/http2-server.pl
index 09ada660b..52c5284c0 100755
--- a/tests/http2-server.pl
+++ b/tests/http2-server.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2016 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -25,12 +25,19 @@
# This script invokes nghttpx properly to have it serve HTTP/2 for us.
# nghttpx runs as a proxy in front of our "actual" HTTP/1 server.
+use Cwd;
+use Cwd 'abs_path';
+use File::Basename;
-my $pidfile = "log/nghttpx.pid";
-my $logfile = "log/http2.log";
+my $logdir = "log";
+my $pidfile = "$logdir/nghttpx.pid";
+my $logfile = "$logdir/http2.log";
my $nghttpx = "nghttpx";
my $listenport = 9015;
+my $listenport2 = 9016;
my $connect = "127.0.0.1,8990";
+my $conf = "nghttpx.conf";
+my $cert = "Server-localhost-sv";
#***************************************************************************
# Process command line options
@@ -57,6 +64,12 @@ while(@ARGV) {
shift @ARGV;
}
}
+ elsif($ARGV[0] eq '--port2') {
+ if($ARGV[1]) {
+ $listenport2 = $ARGV[1];
+ shift @ARGV;
+ }
+ }
elsif($ARGV[0] eq '--connect') {
if($ARGV[1]) {
$connect = $ARGV[1];
@@ -70,16 +83,37 @@ while(@ARGV) {
shift @ARGV;
}
}
+ elsif($ARGV[0] eq '--logdir') {
+ if($ARGV[1]) {
+ $logdir = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--conf') {
+ if($ARGV[1]) {
+ $conf = $ARGV[1];
+ shift @ARGV;
+ }
+ }
else {
print STDERR "\nWarning: http2-server.pl unknown parameter: $ARGV[0]\n";
}
shift @ARGV;
}
+my $srcdir = dirname(__FILE__);
+$certfile = "$srcdir/certs/$cert.pem";
+$keyfile = "$srcdir/certs/$cert.key";
+$certfile = abs_path($certfile);
+$keyfile = abs_path($keyfile);
+
my $cmdline="$nghttpx --backend=$connect ".
"--frontend=\"*,$listenport;no-tls\" ".
+ "--frontend=\"*,$listenport2\" ".
"--log-level=INFO ".
"--pid-file=$pidfile ".
- "--errorlog-file=$logfile";
+ "--conf=$conf ".
+ "--errorlog-file=$logfile ".
+ "$keyfile $certfile";
print "RUN: $cmdline\n" if($verbose);
system("$cmdline 2>/dev/null");
diff --git a/tests/http3-server.pl b/tests/http3-server.pl
new file mode 100755
index 000000000..bc9e98ad1
--- /dev/null
+++ b/tests/http3-server.pl
@@ -0,0 +1,119 @@
+#!/usr/bin/env perl
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed 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 invokes nghttpx properly to have it serve HTTP/3 for us.
+# nghttpx runs as a proxy in front of our "actual" HTTP/1 server.
+
+use Cwd;
+use Cwd 'abs_path';
+use File::Basename;
+
+my $logdir = "log";
+my $pidfile = "$logdir/nghttpx.pid";
+my $logfile = "$logdir/http3.log";
+my $nghttpx = "nghttpx";
+my $listenport = 9017;
+my $connect = "127.0.0.1,8990";
+my $cert = "Server-localhost-sv";
+my $conf = "nghttpx.conf";
+
+#***************************************************************************
+# Process command line options
+#
+while(@ARGV) {
+ if($ARGV[0] eq '--verbose') {
+ $verbose = 1;
+ }
+ elsif($ARGV[0] eq '--pidfile') {
+ if($ARGV[1]) {
+ $pidfile = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--nghttpx') {
+ if($ARGV[1]) {
+ $nghttpx = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--port') {
+ if($ARGV[1]) {
+ $listenport = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--connect') {
+ if($ARGV[1]) {
+ $connect = $ARGV[1];
+ $connect =~ s/:/,/;
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--cert') {
+ if($ARGV[1]) {
+ $cert = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--logfile') {
+ if($ARGV[1]) {
+ $logfile = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--logdir') {
+ if($ARGV[1]) {
+ $logdir = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ elsif($ARGV[0] eq '--conf') {
+ if($ARGV[1]) {
+ $conf = $ARGV[1];
+ shift @ARGV;
+ }
+ }
+ else {
+ print STDERR "\nWarning: http3-server.pl unknown parameter: $ARGV[0]\n";
+ }
+ shift @ARGV;
+}
+
+my $srcdir = dirname(__FILE__);
+$certfile = "$srcdir/certs/$cert.pem";
+$keyfile = "$srcdir/certs/$cert.key";
+$certfile = abs_path($certfile);
+$keyfile = abs_path($keyfile);
+
+my $cmdline="$nghttpx --http2-proxy --backend=$connect ".
+ "--frontend=\"*,$listenport\" ".
+ "--frontend=\"*,$listenport;quic\" ".
+ "--log-level=INFO ".
+ "--pid-file=$pidfile ".
+ "--errorlog-file=$logfile ".
+ "--conf=$conf ".
+ "$keyfile $certfile";
+print "RUN: $cmdline\n" if($verbose);
+system("$cmdline 2>/dev/null");
diff --git a/tests/libtest/CMakeLists.txt b/tests/libtest/CMakeLists.txt
index e547c6a64..b6450ff3a 100644
--- a/tests/libtest/CMakeLists.txt
+++ b/tests/libtest/CMakeLists.txt
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -24,6 +24,12 @@
set(TARGET_LABEL_PREFIX "Test ")
function(setup_test TEST_NAME) # ARGN are the files in the test
+
+ if(LIB_SELECTED STREQUAL LIB_STATIC)
+ # These are part of the libcurl static lib. Do not compile/link them again.
+ list(REMOVE_ITEM ARGN ${WARNLESS} ${MULTIBYTE} ${TIMEDIFF})
+ endif()
+
add_executable(${TEST_NAME} EXCLUDE_FROM_ALL ${ARGN})
add_dependencies(testdeps ${TEST_NAME})
string(TOUPPER ${TEST_NAME} UPPER_TEST_NAME)
@@ -38,7 +44,7 @@ function(setup_test TEST_NAME) # ARGN are the files in the test
include_directories(${CARES_INCLUDE_DIR})
endif()
- target_link_libraries(${TEST_NAME} libcurl ${CURL_LIBS})
+ target_link_libraries(${TEST_NAME} ${LIB_SELECTED} ${CURL_LIBS})
set_target_properties(${TEST_NAME}
PROPERTIES COMPILE_DEFINITIONS ${UPPER_TEST_NAME})
@@ -61,7 +67,7 @@ endforeach()
# Allows for hostname override to make tests machine independent.
# TODO this cmake build assumes a shared build, detect static linking here!
if(NOT WIN32)
- add_library(hostname MODULE EXCLUDE_FROM_ALL sethostname.c sethostname.h)
+ add_library(hostname MODULE EXCLUDE_FROM_ALL sethostname.c)
add_dependencies(testdeps hostname)
# Output to .libs for compatibility with autotools, the test data expects a
# library at (tests)/libtest/.libs/libhostname.so
@@ -80,6 +86,3 @@ add_custom_command(
"${CMAKE_CURRENT_SOURCE_DIR}/mk-lib1521.pl"
"${CURL_SOURCE_DIR}/include/curl/curl.h"
VERBATIM)
-
-set_property(TARGET chkdecimalpoint
- APPEND PROPERTY COMPILE_DEFINITIONS "CURLX_NO_MEMORY_CALLBACKS;CURL_STATICLIB")
diff --git a/tests/libtest/Makefile.am b/tests/libtest/Makefile.am
index 4a22f5282..8ae972a24 100644
--- a/tests/libtest/Makefile.am
+++ b/tests/libtest/Makefile.am
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -52,8 +52,8 @@ if USE_EXPLICIT_LIB_DEPS
SUPPORTFILES_LIBS = $(top_builddir)/lib/libcurl.la @LIBCURL_LIBS@
TESTUTIL_LIBS = $(top_builddir)/lib/libcurl.la @LIBCURL_LIBS@
else
-SUPPORTFILES_LIBS = $(top_builddir)/lib/libcurl.la @CURL_NETWORK_LIBS@ @NSS_LIBS@
-TESTUTIL_LIBS = $(top_builddir)/lib/libcurl.la @CURL_NETWORK_AND_TIME_LIBS@ @NSS_LIBS@
+SUPPORTFILES_LIBS = $(top_builddir)/lib/libcurl.la @CURL_NETWORK_LIBS@
+TESTUTIL_LIBS = $(top_builddir)/lib/libcurl.la @CURL_NETWORK_AND_TIME_LIBS@
endif
# Dependencies (may need to be overridden)
@@ -103,7 +103,7 @@ libhostname_la_CPPFLAGS = $(AM_CPPFLAGS) $(libhostname_la_CPPFLAGS_EXTRA)
libhostname_la_LDFLAGS = $(AM_LDFLAGS) $(libhostname_la_LDFLAGS_EXTRA)
libhostname_la_CFLAGS = $(AM_CFLAGS) $(libhostname_la_CFLAGS_EXTRA)
-libhostname_la_SOURCES = sethostname.c sethostname.h
+libhostname_la_SOURCES = sethostname.c
libhostname_la_LIBADD =
libhostname_la_DEPENDENCIES =
diff --git a/tests/libtest/Makefile.in b/tests/libtest/Makefile.in
index b7b036105..ebc9a8c60 100644
--- a/tests/libtest/Makefile.in
+++ b/tests/libtest/Makefile.in
@@ -90,55 +90,55 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
noinst_PROGRAMS = chkhostname$(EXEEXT) libauthretry$(EXEEXT) \
- libntlmconnect$(EXEEXT) chkdecimalpoint$(EXEEXT) \
- libprereq$(EXEEXT) lib500$(EXEEXT) lib501$(EXEEXT) \
- lib502$(EXEEXT) lib503$(EXEEXT) lib504$(EXEEXT) \
- lib505$(EXEEXT) lib506$(EXEEXT) lib507$(EXEEXT) \
- lib508$(EXEEXT) lib509$(EXEEXT) lib510$(EXEEXT) \
- lib511$(EXEEXT) lib512$(EXEEXT) lib513$(EXEEXT) \
- lib514$(EXEEXT) lib515$(EXEEXT) lib516$(EXEEXT) \
- lib517$(EXEEXT) lib518$(EXEEXT) lib519$(EXEEXT) \
- lib520$(EXEEXT) lib521$(EXEEXT) lib523$(EXEEXT) \
- lib524$(EXEEXT) lib525$(EXEEXT) lib526$(EXEEXT) \
- lib527$(EXEEXT) lib529$(EXEEXT) lib530$(EXEEXT) \
- lib532$(EXEEXT) lib533$(EXEEXT) lib537$(EXEEXT) \
- lib539$(EXEEXT) lib540$(EXEEXT) lib541$(EXEEXT) \
- lib542$(EXEEXT) lib543$(EXEEXT) lib544$(EXEEXT) \
- lib545$(EXEEXT) lib547$(EXEEXT) lib548$(EXEEXT) \
- lib549$(EXEEXT) lib552$(EXEEXT) lib553$(EXEEXT) \
- lib554$(EXEEXT) lib555$(EXEEXT) lib556$(EXEEXT) \
- lib557$(EXEEXT) lib558$(EXEEXT) lib559$(EXEEXT) \
- lib560$(EXEEXT) lib562$(EXEEXT) lib564$(EXEEXT) \
- lib565$(EXEEXT) lib566$(EXEEXT) lib567$(EXEEXT) \
- lib568$(EXEEXT) lib569$(EXEEXT) lib570$(EXEEXT) \
- lib571$(EXEEXT) lib572$(EXEEXT) lib573$(EXEEXT) \
- lib574$(EXEEXT) lib575$(EXEEXT) lib576$(EXEEXT) \
- lib578$(EXEEXT) lib579$(EXEEXT) lib582$(EXEEXT) \
- lib583$(EXEEXT) lib584$(EXEEXT) lib585$(EXEEXT) \
- lib586$(EXEEXT) lib587$(EXEEXT) lib589$(EXEEXT) \
- lib590$(EXEEXT) lib591$(EXEEXT) lib597$(EXEEXT) \
- lib598$(EXEEXT) lib599$(EXEEXT) lib643$(EXEEXT) \
- lib645$(EXEEXT) lib650$(EXEEXT) lib651$(EXEEXT) \
- lib652$(EXEEXT) lib653$(EXEEXT) lib654$(EXEEXT) \
- lib655$(EXEEXT) lib658$(EXEEXT) lib659$(EXEEXT) \
- lib661$(EXEEXT) lib666$(EXEEXT) lib667$(EXEEXT) \
- lib668$(EXEEXT) lib670$(EXEEXT) lib671$(EXEEXT) \
- lib672$(EXEEXT) lib673$(EXEEXT) lib674$(EXEEXT) \
- lib676$(EXEEXT) lib677$(EXEEXT) lib678$(EXEEXT) \
- lib1156$(EXEEXT) lib1500$(EXEEXT) lib1501$(EXEEXT) \
- lib1502$(EXEEXT) lib1503$(EXEEXT) lib1504$(EXEEXT) \
- lib1505$(EXEEXT) lib1506$(EXEEXT) lib1507$(EXEEXT) \
- lib1508$(EXEEXT) lib1509$(EXEEXT) lib1510$(EXEEXT) \
- lib1511$(EXEEXT) lib1512$(EXEEXT) lib1513$(EXEEXT) \
- lib1514$(EXEEXT) lib1515$(EXEEXT) lib1517$(EXEEXT) \
- lib1518$(EXEEXT) lib1520$(EXEEXT) lib1521$(EXEEXT) \
- lib1522$(EXEEXT) lib1523$(EXEEXT) lib1525$(EXEEXT) \
- lib1526$(EXEEXT) lib1527$(EXEEXT) lib1528$(EXEEXT) \
- lib1529$(EXEEXT) lib1530$(EXEEXT) lib1531$(EXEEXT) \
- lib1532$(EXEEXT) lib1533$(EXEEXT) lib1534$(EXEEXT) \
- lib1535$(EXEEXT) lib1536$(EXEEXT) lib1537$(EXEEXT) \
- lib1538$(EXEEXT) lib1539$(EXEEXT) lib1540$(EXEEXT) \
- lib1542$(EXEEXT) lib1543$(EXEEXT) lib1550$(EXEEXT) \
+ libntlmconnect$(EXEEXT) libprereq$(EXEEXT) lib500$(EXEEXT) \
+ lib501$(EXEEXT) lib502$(EXEEXT) lib503$(EXEEXT) \
+ lib504$(EXEEXT) lib505$(EXEEXT) lib506$(EXEEXT) \
+ lib507$(EXEEXT) lib508$(EXEEXT) lib509$(EXEEXT) \
+ lib510$(EXEEXT) lib511$(EXEEXT) lib512$(EXEEXT) \
+ lib513$(EXEEXT) lib514$(EXEEXT) lib515$(EXEEXT) \
+ lib516$(EXEEXT) lib517$(EXEEXT) lib518$(EXEEXT) \
+ lib519$(EXEEXT) lib520$(EXEEXT) lib521$(EXEEXT) \
+ lib523$(EXEEXT) lib524$(EXEEXT) lib525$(EXEEXT) \
+ lib526$(EXEEXT) lib527$(EXEEXT) lib529$(EXEEXT) \
+ lib530$(EXEEXT) lib532$(EXEEXT) lib533$(EXEEXT) \
+ lib537$(EXEEXT) lib539$(EXEEXT) lib540$(EXEEXT) \
+ lib541$(EXEEXT) lib542$(EXEEXT) lib543$(EXEEXT) \
+ lib544$(EXEEXT) lib545$(EXEEXT) lib547$(EXEEXT) \
+ lib548$(EXEEXT) lib549$(EXEEXT) lib552$(EXEEXT) \
+ lib553$(EXEEXT) lib554$(EXEEXT) lib555$(EXEEXT) \
+ lib556$(EXEEXT) lib557$(EXEEXT) lib558$(EXEEXT) \
+ lib559$(EXEEXT) lib560$(EXEEXT) lib562$(EXEEXT) \
+ lib564$(EXEEXT) lib565$(EXEEXT) lib566$(EXEEXT) \
+ lib567$(EXEEXT) lib568$(EXEEXT) lib569$(EXEEXT) \
+ lib570$(EXEEXT) lib571$(EXEEXT) lib572$(EXEEXT) \
+ lib573$(EXEEXT) lib574$(EXEEXT) lib575$(EXEEXT) \
+ lib576$(EXEEXT) lib578$(EXEEXT) lib579$(EXEEXT) \
+ lib582$(EXEEXT) lib583$(EXEEXT) lib584$(EXEEXT) \
+ lib585$(EXEEXT) lib586$(EXEEXT) lib587$(EXEEXT) \
+ lib589$(EXEEXT) lib590$(EXEEXT) lib591$(EXEEXT) \
+ lib597$(EXEEXT) lib598$(EXEEXT) lib599$(EXEEXT) \
+ lib643$(EXEEXT) lib645$(EXEEXT) lib650$(EXEEXT) \
+ lib651$(EXEEXT) lib652$(EXEEXT) lib653$(EXEEXT) \
+ lib654$(EXEEXT) lib655$(EXEEXT) lib658$(EXEEXT) \
+ lib659$(EXEEXT) lib661$(EXEEXT) lib666$(EXEEXT) \
+ lib667$(EXEEXT) lib668$(EXEEXT) lib670$(EXEEXT) \
+ lib671$(EXEEXT) lib672$(EXEEXT) lib673$(EXEEXT) \
+ lib674$(EXEEXT) lib676$(EXEEXT) lib677$(EXEEXT) \
+ lib678$(EXEEXT) lib1156$(EXEEXT) lib1301$(EXEEXT) \
+ lib1500$(EXEEXT) lib1501$(EXEEXT) lib1502$(EXEEXT) \
+ lib1503$(EXEEXT) lib1504$(EXEEXT) lib1505$(EXEEXT) \
+ lib1506$(EXEEXT) lib1507$(EXEEXT) lib1508$(EXEEXT) \
+ lib1509$(EXEEXT) lib1510$(EXEEXT) lib1511$(EXEEXT) \
+ lib1512$(EXEEXT) lib1513$(EXEEXT) lib1514$(EXEEXT) \
+ lib1515$(EXEEXT) lib1517$(EXEEXT) lib1518$(EXEEXT) \
+ lib1520$(EXEEXT) lib1521$(EXEEXT) lib1522$(EXEEXT) \
+ lib1523$(EXEEXT) lib1525$(EXEEXT) lib1526$(EXEEXT) \
+ lib1527$(EXEEXT) lib1528$(EXEEXT) lib1529$(EXEEXT) \
+ lib1530$(EXEEXT) lib1531$(EXEEXT) lib1532$(EXEEXT) \
+ lib1533$(EXEEXT) lib1534$(EXEEXT) lib1535$(EXEEXT) \
+ lib1536$(EXEEXT) lib1537$(EXEEXT) lib1538$(EXEEXT) \
+ lib1539$(EXEEXT) lib1540$(EXEEXT) lib1542$(EXEEXT) \
+ lib1543$(EXEEXT) lib1545$(EXEEXT) lib1550$(EXEEXT) \
lib1551$(EXEEXT) lib1552$(EXEEXT) lib1553$(EXEEXT) \
lib1554$(EXEEXT) lib1555$(EXEEXT) lib1556$(EXEEXT) \
lib1557$(EXEEXT) lib1558$(EXEEXT) lib1559$(EXEEXT) \
@@ -146,6 +146,7 @@ noinst_PROGRAMS = chkhostname$(EXEEXT) libauthretry$(EXEEXT) \
lib1567$(EXEEXT) lib1568$(EXEEXT) lib1569$(EXEEXT) \
lib1591$(EXEEXT) lib1592$(EXEEXT) lib1593$(EXEEXT) \
lib1594$(EXEEXT) lib1596$(EXEEXT) lib1597$(EXEEXT) \
+ lib1662$(EXEEXT) lib1900$(EXEEXT) lib1903$(EXEEXT) \
lib1905$(EXEEXT) lib1906$(EXEEXT) lib1907$(EXEEXT) \
lib1908$(EXEEXT) lib1910$(EXEEXT) lib1911$(EXEEXT) \
lib1912$(EXEEXT) lib1913$(EXEEXT) lib1915$(EXEEXT) \
@@ -154,9 +155,16 @@ noinst_PROGRAMS = chkhostname$(EXEEXT) libauthretry$(EXEEXT) \
lib1935$(EXEEXT) lib1936$(EXEEXT) lib1937$(EXEEXT) \
lib1938$(EXEEXT) lib1939$(EXEEXT) lib1940$(EXEEXT) \
lib1945$(EXEEXT) lib1946$(EXEEXT) lib1947$(EXEEXT) \
- lib1948$(EXEEXT) lib1955$(EXEEXT) lib2301$(EXEEXT) \
- lib2302$(EXEEXT) lib3010$(EXEEXT) lib3025$(EXEEXT) \
- lib3026$(EXEEXT) lib3027$(EXEEXT)
+ lib1948$(EXEEXT) lib1955$(EXEEXT) lib1956$(EXEEXT) \
+ lib1957$(EXEEXT) lib1958$(EXEEXT) lib1959$(EXEEXT) \
+ lib1960$(EXEEXT) lib1964$(EXEEXT) lib1970$(EXEEXT) \
+ lib1971$(EXEEXT) lib1972$(EXEEXT) lib1973$(EXEEXT) \
+ lib1974$(EXEEXT) lib1975$(EXEEXT) lib2301$(EXEEXT) \
+ lib2302$(EXEEXT) lib2304$(EXEEXT) lib2305$(EXEEXT) \
+ lib2306$(EXEEXT) lib2402$(EXEEXT) lib2404$(EXEEXT) \
+ lib2502$(EXEEXT) lib3010$(EXEEXT) lib3025$(EXEEXT) \
+ lib3026$(EXEEXT) lib3027$(EXEEXT) lib3100$(EXEEXT) \
+ lib3101$(EXEEXT) lib3102$(EXEEXT) lib3103$(EXEEXT)
@USE_CPPFLAG_CURL_STATICLIB_TRUE@am__append_1 = -DCURL_STATICLIB
@CURL_LT_SHLIB_USE_NO_UNDEFINED_TRUE@am__append_2 = -no-undefined
@CURL_LT_SHLIB_USE_NO_UNDEFINED_TRUE@am__append_3 = -no-undefined
@@ -175,7 +183,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.m4 \
$(top_srcdir)/m4/curl-confopts.m4 \
$(top_srcdir)/m4/curl-functions.m4 \
$(top_srcdir)/m4/curl-gnutls.m4 \
- $(top_srcdir)/m4/curl-mbedtls.m4 $(top_srcdir)/m4/curl-nss.m4 \
+ $(top_srcdir)/m4/curl-mbedtls.m4 \
$(top_srcdir)/m4/curl-openssl.m4 \
$(top_srcdir)/m4/curl-override.m4 \
$(top_srcdir)/m4/curl-reentrant.m4 \
@@ -225,1434 +233,1004 @@ libstubgss_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
@BUILD_LIBHOSTNAME_FALSE@@BUILD_STUB_GSS_TRUE@am_libstubgss_la_rpath =
@BUILD_LIBHOSTNAME_TRUE@@BUILD_STUB_GSS_TRUE@am_libstubgss_la_rpath =
am__dirstamp = $(am__leading_dot)dirstamp
-am_chkdecimalpoint_OBJECTS = \
- chkdecimalpoint-chkdecimalpoint.$(OBJEXT) \
- ../../lib/chkdecimalpoint-mprintf.$(OBJEXT) \
- ../../lib/chkdecimalpoint-dynbuf.$(OBJEXT) \
- ../../lib/chkdecimalpoint-strdup.$(OBJEXT)
-chkdecimalpoint_OBJECTS = $(am_chkdecimalpoint_OBJECTS)
-chkdecimalpoint_DEPENDENCIES =
-am_chkhostname_OBJECTS = chkhostname-chkhostname.$(OBJEXT) \
- ../../lib/chkhostname-curl_gethostname.$(OBJEXT)
+am_chkhostname_OBJECTS = chkhostname.$(OBJEXT) \
+ ../../lib/curl_gethostname.$(OBJEXT)
chkhostname_OBJECTS = $(am_chkhostname_OBJECTS)
-am__objects_1 = ../../lib/lib1156-timediff.$(OBJEXT) \
- lib1156-first.$(OBJEXT)
-am__objects_2 = lib1156-testutil.$(OBJEXT)
-am__objects_3 = ../../lib/lib1156-warnless.$(OBJEXT)
-am_lib1156_OBJECTS = lib1156-lib1156.$(OBJEXT) $(am__objects_1) \
- $(am__objects_2) $(am__objects_3)
+am__objects_1 = ../../lib/timediff.$(OBJEXT)
+am__objects_2 = $(am__objects_1) first.$(OBJEXT)
+am__objects_3 = testutil.$(OBJEXT)
+am__objects_4 = ../../lib/warnless.$(OBJEXT)
+am_lib1156_OBJECTS = lib1156.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1156_OBJECTS = $(am_lib1156_OBJECTS)
@USE_EXPLICIT_LIB_DEPS_FALSE@am__DEPENDENCIES_1 = \
@USE_EXPLICIT_LIB_DEPS_FALSE@ $(top_builddir)/lib/libcurl.la
@USE_EXPLICIT_LIB_DEPS_TRUE@am__DEPENDENCIES_1 = \
@USE_EXPLICIT_LIB_DEPS_TRUE@ $(top_builddir)/lib/libcurl.la
lib1156_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_4 = ../../lib/lib1500-timediff.$(OBJEXT) \
- lib1500-first.$(OBJEXT)
-am__objects_5 = lib1500-testutil.$(OBJEXT)
-am_lib1500_OBJECTS = lib1500-lib1500.$(OBJEXT) $(am__objects_4) \
- $(am__objects_5)
+am_lib1301_OBJECTS = lib1301.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3)
+lib1301_OBJECTS = $(am_lib1301_OBJECTS)
+lib1301_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib1500_OBJECTS = lib1500.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3)
lib1500_OBJECTS = $(am_lib1500_OBJECTS)
lib1500_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_6 = ../../lib/lib1501-timediff.$(OBJEXT) \
- lib1501-first.$(OBJEXT)
-am__objects_7 = lib1501-testutil.$(OBJEXT)
-am__objects_8 = ../../lib/lib1501-warnless.$(OBJEXT)
-am_lib1501_OBJECTS = lib1501-lib1501.$(OBJEXT) $(am__objects_6) \
- $(am__objects_7) $(am__objects_8)
+am_lib1501_OBJECTS = lib1501.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1501_OBJECTS = $(am_lib1501_OBJECTS)
lib1501_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_9 = ../../lib/lib1502-timediff.$(OBJEXT) \
- lib1502-first.$(OBJEXT)
-am__objects_10 = lib1502-testutil.$(OBJEXT)
-am__objects_11 = ../../lib/lib1502-warnless.$(OBJEXT)
-am_lib1502_OBJECTS = lib1502-lib1502.$(OBJEXT) $(am__objects_9) \
- $(am__objects_10) $(am__objects_11)
+am__objects_5 = ../../lib/lib1502-timediff.$(OBJEXT)
+am__objects_6 = $(am__objects_5) lib1502-first.$(OBJEXT)
+am__objects_7 = lib1502-testutil.$(OBJEXT)
+am__objects_8 = ../../lib/lib1502-warnless.$(OBJEXT)
+am_lib1502_OBJECTS = lib1502-lib1502.$(OBJEXT) $(am__objects_6) \
+ $(am__objects_7) $(am__objects_8)
lib1502_OBJECTS = $(am_lib1502_OBJECTS)
lib1502_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_12 = ../../lib/lib1503-timediff.$(OBJEXT) \
- lib1503-first.$(OBJEXT)
-am__objects_13 = lib1503-testutil.$(OBJEXT)
-am__objects_14 = ../../lib/lib1503-warnless.$(OBJEXT)
-am_lib1503_OBJECTS = lib1503-lib1502.$(OBJEXT) $(am__objects_12) \
- $(am__objects_13) $(am__objects_14)
+am__objects_9 = ../../lib/lib1503-timediff.$(OBJEXT)
+am__objects_10 = $(am__objects_9) lib1503-first.$(OBJEXT)
+am__objects_11 = lib1503-testutil.$(OBJEXT)
+am__objects_12 = ../../lib/lib1503-warnless.$(OBJEXT)
+am_lib1503_OBJECTS = lib1503-lib1502.$(OBJEXT) $(am__objects_10) \
+ $(am__objects_11) $(am__objects_12)
lib1503_OBJECTS = $(am_lib1503_OBJECTS)
lib1503_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_15 = ../../lib/lib1504-timediff.$(OBJEXT) \
- lib1504-first.$(OBJEXT)
-am__objects_16 = lib1504-testutil.$(OBJEXT)
-am__objects_17 = ../../lib/lib1504-warnless.$(OBJEXT)
-am_lib1504_OBJECTS = lib1504-lib1502.$(OBJEXT) $(am__objects_15) \
- $(am__objects_16) $(am__objects_17)
+am__objects_13 = ../../lib/lib1504-timediff.$(OBJEXT)
+am__objects_14 = $(am__objects_13) lib1504-first.$(OBJEXT)
+am__objects_15 = lib1504-testutil.$(OBJEXT)
+am__objects_16 = ../../lib/lib1504-warnless.$(OBJEXT)
+am_lib1504_OBJECTS = lib1504-lib1502.$(OBJEXT) $(am__objects_14) \
+ $(am__objects_15) $(am__objects_16)
lib1504_OBJECTS = $(am_lib1504_OBJECTS)
lib1504_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_18 = ../../lib/lib1505-timediff.$(OBJEXT) \
- lib1505-first.$(OBJEXT)
+am__objects_17 = ../../lib/lib1505-timediff.$(OBJEXT)
+am__objects_18 = $(am__objects_17) lib1505-first.$(OBJEXT)
am__objects_19 = lib1505-testutil.$(OBJEXT)
am__objects_20 = ../../lib/lib1505-warnless.$(OBJEXT)
am_lib1505_OBJECTS = lib1505-lib1502.$(OBJEXT) $(am__objects_18) \
$(am__objects_19) $(am__objects_20)
lib1505_OBJECTS = $(am_lib1505_OBJECTS)
lib1505_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_21 = ../../lib/lib1506-timediff.$(OBJEXT) \
- lib1506-first.$(OBJEXT)
-am__objects_22 = lib1506-testutil.$(OBJEXT)
-am__objects_23 = ../../lib/lib1506-warnless.$(OBJEXT)
-am_lib1506_OBJECTS = lib1506-lib1506.$(OBJEXT) $(am__objects_21) \
- $(am__objects_22) $(am__objects_23)
+am_lib1506_OBJECTS = lib1506.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1506_OBJECTS = $(am_lib1506_OBJECTS)
lib1506_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_24 = ../../lib/lib1507-timediff.$(OBJEXT) \
- lib1507-first.$(OBJEXT)
-am__objects_25 = lib1507-testutil.$(OBJEXT)
-am__objects_26 = ../../lib/lib1507-warnless.$(OBJEXT)
-am_lib1507_OBJECTS = lib1507-lib1507.$(OBJEXT) $(am__objects_24) \
- $(am__objects_25) $(am__objects_26)
+am_lib1507_OBJECTS = lib1507.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1507_OBJECTS = $(am_lib1507_OBJECTS)
lib1507_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_27 = ../../lib/lib1508-timediff.$(OBJEXT) \
- lib1508-first.$(OBJEXT)
-am__objects_28 = lib1508-testutil.$(OBJEXT)
-am__objects_29 = ../../lib/lib1508-warnless.$(OBJEXT)
-am_lib1508_OBJECTS = lib1508-lib1508.$(OBJEXT) $(am__objects_27) \
- $(am__objects_28) $(am__objects_29)
+am_lib1508_OBJECTS = lib1508.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1508_OBJECTS = $(am_lib1508_OBJECTS)
lib1508_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_30 = ../../lib/lib1509-timediff.$(OBJEXT) \
- lib1509-first.$(OBJEXT)
-am__objects_31 = lib1509-testutil.$(OBJEXT)
-am__objects_32 = ../../lib/lib1509-warnless.$(OBJEXT)
-am_lib1509_OBJECTS = lib1509-lib1509.$(OBJEXT) $(am__objects_30) \
- $(am__objects_31) $(am__objects_32)
+am_lib1509_OBJECTS = lib1509.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1509_OBJECTS = $(am_lib1509_OBJECTS)
lib1509_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_33 = ../../lib/lib1510-timediff.$(OBJEXT) \
- lib1510-first.$(OBJEXT)
-am__objects_34 = lib1510-testutil.$(OBJEXT)
-am__objects_35 = ../../lib/lib1510-warnless.$(OBJEXT)
-am_lib1510_OBJECTS = lib1510-lib1510.$(OBJEXT) $(am__objects_33) \
- $(am__objects_34) $(am__objects_35)
+am_lib1510_OBJECTS = lib1510.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1510_OBJECTS = $(am_lib1510_OBJECTS)
lib1510_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_36 = ../../lib/lib1511-timediff.$(OBJEXT) \
- lib1511-first.$(OBJEXT)
-am__objects_37 = lib1511-testutil.$(OBJEXT)
-am__objects_38 = ../../lib/lib1511-warnless.$(OBJEXT)
-am_lib1511_OBJECTS = lib1511-lib1511.$(OBJEXT) $(am__objects_36) \
- $(am__objects_37) $(am__objects_38)
+am_lib1511_OBJECTS = lib1511.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1511_OBJECTS = $(am_lib1511_OBJECTS)
lib1511_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_39 = ../../lib/lib1512-timediff.$(OBJEXT) \
- lib1512-first.$(OBJEXT)
-am__objects_40 = lib1512-testutil.$(OBJEXT)
-am__objects_41 = ../../lib/lib1512-warnless.$(OBJEXT)
-am_lib1512_OBJECTS = lib1512-lib1512.$(OBJEXT) $(am__objects_39) \
- $(am__objects_40) $(am__objects_41)
+am_lib1512_OBJECTS = lib1512.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1512_OBJECTS = $(am_lib1512_OBJECTS)
lib1512_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_42 = ../../lib/lib1513-timediff.$(OBJEXT) \
- lib1513-first.$(OBJEXT)
-am__objects_43 = lib1513-testutil.$(OBJEXT)
-am__objects_44 = ../../lib/lib1513-warnless.$(OBJEXT)
-am_lib1513_OBJECTS = lib1513-lib1513.$(OBJEXT) $(am__objects_42) \
- $(am__objects_43) $(am__objects_44)
+am_lib1513_OBJECTS = lib1513.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1513_OBJECTS = $(am_lib1513_OBJECTS)
lib1513_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_45 = ../../lib/lib1514-timediff.$(OBJEXT) \
- lib1514-first.$(OBJEXT)
-am__objects_46 = lib1514-testutil.$(OBJEXT)
-am__objects_47 = ../../lib/lib1514-warnless.$(OBJEXT)
-am_lib1514_OBJECTS = lib1514-lib1514.$(OBJEXT) $(am__objects_45) \
- $(am__objects_46) $(am__objects_47)
+am_lib1514_OBJECTS = lib1514.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1514_OBJECTS = $(am_lib1514_OBJECTS)
lib1514_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_48 = ../../lib/lib1515-timediff.$(OBJEXT) \
- lib1515-first.$(OBJEXT)
-am__objects_49 = lib1515-testutil.$(OBJEXT)
-am__objects_50 = ../../lib/lib1515-warnless.$(OBJEXT)
-am_lib1515_OBJECTS = lib1515-lib1515.$(OBJEXT) $(am__objects_48) \
- $(am__objects_49) $(am__objects_50)
+am_lib1515_OBJECTS = lib1515.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1515_OBJECTS = $(am_lib1515_OBJECTS)
lib1515_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_51 = ../../lib/lib1517-timediff.$(OBJEXT) \
- lib1517-first.$(OBJEXT)
-am_lib1517_OBJECTS = lib1517-lib1517.$(OBJEXT) $(am__objects_51)
+am_lib1517_OBJECTS = lib1517.$(OBJEXT) $(am__objects_2)
lib1517_OBJECTS = $(am_lib1517_OBJECTS)
lib1517_LDADD = $(LDADD)
lib1517_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_52 = ../../lib/lib1518-timediff.$(OBJEXT) \
- lib1518-first.$(OBJEXT)
-am_lib1518_OBJECTS = lib1518-lib1518.$(OBJEXT) $(am__objects_52)
+am_lib1518_OBJECTS = lib1518.$(OBJEXT) $(am__objects_2)
lib1518_OBJECTS = $(am_lib1518_OBJECTS)
lib1518_LDADD = $(LDADD)
lib1518_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_53 = ../../lib/lib1520-timediff.$(OBJEXT) \
- lib1520-first.$(OBJEXT)
-am_lib1520_OBJECTS = lib1520-lib1520.$(OBJEXT) $(am__objects_53)
+am_lib1520_OBJECTS = lib1520.$(OBJEXT) $(am__objects_2)
lib1520_OBJECTS = $(am_lib1520_OBJECTS)
lib1520_LDADD = $(LDADD)
lib1520_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_54 = ../../lib/lib1521-timediff.$(OBJEXT) \
- lib1521-first.$(OBJEXT)
-nodist_lib1521_OBJECTS = lib1521-lib1521.$(OBJEXT) $(am__objects_54)
+am__objects_21 = ../../lib/lib1521-timediff.$(OBJEXT)
+am__objects_22 = $(am__objects_21) lib1521-first.$(OBJEXT)
+nodist_lib1521_OBJECTS = lib1521-lib1521.$(OBJEXT) $(am__objects_22)
lib1521_OBJECTS = $(nodist_lib1521_OBJECTS)
lib1521_LDADD = $(LDADD)
lib1521_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_55 = ../../lib/lib1522-timediff.$(OBJEXT) \
- lib1522-first.$(OBJEXT)
-am__objects_56 = lib1522-testutil.$(OBJEXT)
-am__objects_57 = lib1522-testtrace.$(OBJEXT)
-am_lib1522_OBJECTS = lib1522-lib1522.$(OBJEXT) $(am__objects_55) \
- $(am__objects_56) $(am__objects_57)
+am__objects_23 = testtrace.$(OBJEXT)
+am_lib1522_OBJECTS = lib1522.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_23)
lib1522_OBJECTS = $(am_lib1522_OBJECTS)
lib1522_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_58 = ../../lib/lib1523-timediff.$(OBJEXT) \
- lib1523-first.$(OBJEXT)
-am_lib1523_OBJECTS = lib1523-lib1523.$(OBJEXT) $(am__objects_58)
+am_lib1523_OBJECTS = lib1523.$(OBJEXT) $(am__objects_2)
lib1523_OBJECTS = $(am_lib1523_OBJECTS)
lib1523_LDADD = $(LDADD)
lib1523_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_59 = ../../lib/lib1525-timediff.$(OBJEXT) \
- lib1525-first.$(OBJEXT)
-am__objects_60 = lib1525-testutil.$(OBJEXT)
-am__objects_61 = ../../lib/lib1525-warnless.$(OBJEXT)
-am_lib1525_OBJECTS = lib1525-lib1525.$(OBJEXT) $(am__objects_59) \
- $(am__objects_60) $(am__objects_61)
+am_lib1525_OBJECTS = lib1525.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1525_OBJECTS = $(am_lib1525_OBJECTS)
lib1525_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_62 = ../../lib/lib1526-timediff.$(OBJEXT) \
- lib1526-first.$(OBJEXT)
-am__objects_63 = lib1526-testutil.$(OBJEXT)
-am__objects_64 = ../../lib/lib1526-warnless.$(OBJEXT)
-am_lib1526_OBJECTS = lib1526-lib1526.$(OBJEXT) $(am__objects_62) \
- $(am__objects_63) $(am__objects_64)
+am_lib1526_OBJECTS = lib1526.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1526_OBJECTS = $(am_lib1526_OBJECTS)
lib1526_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_65 = ../../lib/lib1527-timediff.$(OBJEXT) \
- lib1527-first.$(OBJEXT)
-am__objects_66 = lib1527-testutil.$(OBJEXT)
-am__objects_67 = ../../lib/lib1527-warnless.$(OBJEXT)
-am_lib1527_OBJECTS = lib1527-lib1527.$(OBJEXT) $(am__objects_65) \
- $(am__objects_66) $(am__objects_67)
+am_lib1527_OBJECTS = lib1527.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1527_OBJECTS = $(am_lib1527_OBJECTS)
lib1527_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_68 = ../../lib/lib1528-timediff.$(OBJEXT) \
- lib1528-first.$(OBJEXT)
-am__objects_69 = lib1528-testutil.$(OBJEXT)
-am__objects_70 = ../../lib/lib1528-warnless.$(OBJEXT)
-am_lib1528_OBJECTS = lib1528-lib1528.$(OBJEXT) $(am__objects_68) \
- $(am__objects_69) $(am__objects_70)
+am_lib1528_OBJECTS = lib1528.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1528_OBJECTS = $(am_lib1528_OBJECTS)
lib1528_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_71 = ../../lib/lib1529-timediff.$(OBJEXT) \
- lib1529-first.$(OBJEXT)
-am__objects_72 = lib1529-testutil.$(OBJEXT)
-am__objects_73 = ../../lib/lib1529-warnless.$(OBJEXT)
-am_lib1529_OBJECTS = lib1529-lib1529.$(OBJEXT) $(am__objects_71) \
- $(am__objects_72) $(am__objects_73)
+am_lib1529_OBJECTS = lib1529.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1529_OBJECTS = $(am_lib1529_OBJECTS)
lib1529_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_74 = ../../lib/lib1530-timediff.$(OBJEXT) \
- lib1530-first.$(OBJEXT)
-am__objects_75 = lib1530-testutil.$(OBJEXT)
-am__objects_76 = ../../lib/lib1530-warnless.$(OBJEXT)
-am_lib1530_OBJECTS = lib1530-lib1530.$(OBJEXT) $(am__objects_74) \
- $(am__objects_75) $(am__objects_76)
+am_lib1530_OBJECTS = lib1530.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1530_OBJECTS = $(am_lib1530_OBJECTS)
lib1530_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_77 = ../../lib/lib1531-timediff.$(OBJEXT) \
- lib1531-first.$(OBJEXT)
-am__objects_78 = lib1531-testutil.$(OBJEXT)
-am__objects_79 = ../../lib/lib1531-warnless.$(OBJEXT)
-am_lib1531_OBJECTS = lib1531-lib1531.$(OBJEXT) $(am__objects_77) \
- $(am__objects_78) $(am__objects_79)
+am_lib1531_OBJECTS = lib1531.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1531_OBJECTS = $(am_lib1531_OBJECTS)
lib1531_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_80 = ../../lib/lib1532-timediff.$(OBJEXT) \
- lib1532-first.$(OBJEXT)
-am__objects_81 = lib1532-testutil.$(OBJEXT)
-am__objects_82 = ../../lib/lib1532-warnless.$(OBJEXT)
-am_lib1532_OBJECTS = lib1532-lib1532.$(OBJEXT) $(am__objects_80) \
- $(am__objects_81) $(am__objects_82)
+am_lib1532_OBJECTS = lib1532.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1532_OBJECTS = $(am_lib1532_OBJECTS)
lib1532_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_83 = ../../lib/lib1533-timediff.$(OBJEXT) \
- lib1533-first.$(OBJEXT)
-am__objects_84 = lib1533-testutil.$(OBJEXT)
-am__objects_85 = ../../lib/lib1533-warnless.$(OBJEXT)
-am_lib1533_OBJECTS = lib1533-lib1533.$(OBJEXT) $(am__objects_83) \
- $(am__objects_84) $(am__objects_85)
+am_lib1533_OBJECTS = lib1533.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1533_OBJECTS = $(am_lib1533_OBJECTS)
lib1533_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_86 = ../../lib/lib1534-timediff.$(OBJEXT) \
- lib1534-first.$(OBJEXT)
-am__objects_87 = lib1534-testutil.$(OBJEXT)
-am__objects_88 = ../../lib/lib1534-warnless.$(OBJEXT)
-am_lib1534_OBJECTS = lib1534-lib1534.$(OBJEXT) $(am__objects_86) \
- $(am__objects_87) $(am__objects_88)
+am_lib1534_OBJECTS = lib1534.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1534_OBJECTS = $(am_lib1534_OBJECTS)
lib1534_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_89 = ../../lib/lib1535-timediff.$(OBJEXT) \
- lib1535-first.$(OBJEXT)
-am__objects_90 = lib1535-testutil.$(OBJEXT)
-am__objects_91 = ../../lib/lib1535-warnless.$(OBJEXT)
-am_lib1535_OBJECTS = lib1535-lib1535.$(OBJEXT) $(am__objects_89) \
- $(am__objects_90) $(am__objects_91)
+am_lib1535_OBJECTS = lib1535.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1535_OBJECTS = $(am_lib1535_OBJECTS)
lib1535_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_92 = ../../lib/lib1536-timediff.$(OBJEXT) \
- lib1536-first.$(OBJEXT)
-am__objects_93 = lib1536-testutil.$(OBJEXT)
-am__objects_94 = ../../lib/lib1536-warnless.$(OBJEXT)
-am_lib1536_OBJECTS = lib1536-lib1536.$(OBJEXT) $(am__objects_92) \
- $(am__objects_93) $(am__objects_94)
+am_lib1536_OBJECTS = lib1536.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1536_OBJECTS = $(am_lib1536_OBJECTS)
lib1536_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_95 = ../../lib/lib1537-timediff.$(OBJEXT) \
- lib1537-first.$(OBJEXT)
-am__objects_96 = lib1537-testutil.$(OBJEXT)
-am__objects_97 = ../../lib/lib1537-warnless.$(OBJEXT)
-am_lib1537_OBJECTS = lib1537-lib1537.$(OBJEXT) $(am__objects_95) \
- $(am__objects_96) $(am__objects_97)
+am_lib1537_OBJECTS = lib1537.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1537_OBJECTS = $(am_lib1537_OBJECTS)
lib1537_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_98 = ../../lib/lib1538-timediff.$(OBJEXT) \
- lib1538-first.$(OBJEXT)
-am__objects_99 = lib1538-testutil.$(OBJEXT)
-am__objects_100 = ../../lib/lib1538-warnless.$(OBJEXT)
-am_lib1538_OBJECTS = lib1538-lib1538.$(OBJEXT) $(am__objects_98) \
- $(am__objects_99) $(am__objects_100)
+am_lib1538_OBJECTS = lib1538.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1538_OBJECTS = $(am_lib1538_OBJECTS)
lib1538_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_101 = ../../lib/lib1539-timediff.$(OBJEXT) \
- lib1539-first.$(OBJEXT)
-am__objects_102 = lib1539-testutil.$(OBJEXT)
-am__objects_103 = ../../lib/lib1539-warnless.$(OBJEXT)
-am_lib1539_OBJECTS = lib1539-lib1514.$(OBJEXT) $(am__objects_101) \
- $(am__objects_102) $(am__objects_103)
+am__objects_24 = ../../lib/lib1539-timediff.$(OBJEXT)
+am__objects_25 = $(am__objects_24) lib1539-first.$(OBJEXT)
+am__objects_26 = lib1539-testutil.$(OBJEXT)
+am__objects_27 = ../../lib/lib1539-warnless.$(OBJEXT)
+am_lib1539_OBJECTS = lib1539-lib1514.$(OBJEXT) $(am__objects_25) \
+ $(am__objects_26) $(am__objects_27)
lib1539_OBJECTS = $(am_lib1539_OBJECTS)
lib1539_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_104 = ../../lib/lib1540-timediff.$(OBJEXT) \
- lib1540-first.$(OBJEXT)
-am__objects_105 = lib1540-testutil.$(OBJEXT)
-am__objects_106 = ../../lib/lib1540-warnless.$(OBJEXT)
-am_lib1540_OBJECTS = lib1540-lib1540.$(OBJEXT) $(am__objects_104) \
- $(am__objects_105) $(am__objects_106)
+am_lib1540_OBJECTS = lib1540.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1540_OBJECTS = $(am_lib1540_OBJECTS)
lib1540_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_107 = ../../lib/lib1542-timediff.$(OBJEXT) \
- lib1542-first.$(OBJEXT)
-am__objects_108 = lib1542-testutil.$(OBJEXT)
-am__objects_109 = lib1542-testtrace.$(OBJEXT)
-am__objects_110 = ../../lib/lib1542-warnless.$(OBJEXT)
-am_lib1542_OBJECTS = lib1542-lib1542.$(OBJEXT) $(am__objects_107) \
- $(am__objects_108) $(am__objects_109) $(am__objects_110)
+am_lib1542_OBJECTS = lib1542.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_23) $(am__objects_4)
lib1542_OBJECTS = $(am_lib1542_OBJECTS)
lib1542_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_111 = ../../lib/lib1543-timediff.$(OBJEXT) \
- lib1543-first.$(OBJEXT)
-am_lib1543_OBJECTS = lib1543-lib1518.$(OBJEXT) $(am__objects_111)
+am__objects_28 = ../../lib/lib1543-timediff.$(OBJEXT)
+am__objects_29 = $(am__objects_28) lib1543-first.$(OBJEXT)
+am_lib1543_OBJECTS = lib1543-lib1518.$(OBJEXT) $(am__objects_29)
lib1543_OBJECTS = $(am_lib1543_OBJECTS)
lib1543_LDADD = $(LDADD)
lib1543_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_112 = ../../lib/lib1550-timediff.$(OBJEXT) \
- lib1550-first.$(OBJEXT)
-am_lib1550_OBJECTS = lib1550-lib1550.$(OBJEXT) $(am__objects_112)
+am__objects_30 = ../../lib/lib1545-timediff.$(OBJEXT)
+am__objects_31 = $(am__objects_30) lib1545-first.$(OBJEXT)
+am_lib1545_OBJECTS = lib1545-lib1545.$(OBJEXT) $(am__objects_31)
+lib1545_OBJECTS = $(am_lib1545_OBJECTS)
+lib1545_LDADD = $(LDADD)
+lib1545_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib1550_OBJECTS = lib1550.$(OBJEXT) $(am__objects_2)
lib1550_OBJECTS = $(am_lib1550_OBJECTS)
lib1550_LDADD = $(LDADD)
lib1550_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_113 = ../../lib/lib1551-timediff.$(OBJEXT) \
- lib1551-first.$(OBJEXT)
-am_lib1551_OBJECTS = lib1551-lib1551.$(OBJEXT) $(am__objects_113)
+am_lib1551_OBJECTS = lib1551.$(OBJEXT) $(am__objects_2)
lib1551_OBJECTS = $(am_lib1551_OBJECTS)
lib1551_LDADD = $(LDADD)
lib1551_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_114 = ../../lib/lib1552-timediff.$(OBJEXT) \
- lib1552-first.$(OBJEXT)
-am__objects_115 = lib1552-testutil.$(OBJEXT)
-am_lib1552_OBJECTS = lib1552-lib1552.$(OBJEXT) $(am__objects_114) \
- $(am__objects_115)
+am_lib1552_OBJECTS = lib1552.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3)
lib1552_OBJECTS = $(am_lib1552_OBJECTS)
lib1552_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_116 = ../../lib/lib1553-timediff.$(OBJEXT) \
- lib1553-first.$(OBJEXT)
-am__objects_117 = lib1553-testutil.$(OBJEXT)
-am_lib1553_OBJECTS = lib1553-lib1553.$(OBJEXT) $(am__objects_116) \
- $(am__objects_117)
+am_lib1553_OBJECTS = lib1553.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3)
lib1553_OBJECTS = $(am_lib1553_OBJECTS)
lib1553_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_118 = ../../lib/lib1554-timediff.$(OBJEXT) \
- lib1554-first.$(OBJEXT)
-am_lib1554_OBJECTS = lib1554-lib1554.$(OBJEXT) $(am__objects_118)
+am_lib1554_OBJECTS = lib1554.$(OBJEXT) $(am__objects_2)
lib1554_OBJECTS = $(am_lib1554_OBJECTS)
lib1554_LDADD = $(LDADD)
lib1554_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_119 = ../../lib/lib1555-timediff.$(OBJEXT) \
- lib1555-first.$(OBJEXT)
-am__objects_120 = lib1555-testutil.$(OBJEXT)
-am__objects_121 = ../../lib/lib1555-warnless.$(OBJEXT)
-am_lib1555_OBJECTS = lib1555-lib1555.$(OBJEXT) $(am__objects_119) \
- $(am__objects_120) $(am__objects_121)
+am_lib1555_OBJECTS = lib1555.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1555_OBJECTS = $(am_lib1555_OBJECTS)
lib1555_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_122 = ../../lib/lib1556-timediff.$(OBJEXT) \
- lib1556-first.$(OBJEXT)
-am__objects_123 = lib1556-testutil.$(OBJEXT)
-am__objects_124 = ../../lib/lib1556-warnless.$(OBJEXT)
-am_lib1556_OBJECTS = lib1556-lib1556.$(OBJEXT) $(am__objects_122) \
- $(am__objects_123) $(am__objects_124)
+am_lib1556_OBJECTS = lib1556.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1556_OBJECTS = $(am_lib1556_OBJECTS)
lib1556_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_125 = ../../lib/lib1557-timediff.$(OBJEXT) \
- lib1557-first.$(OBJEXT)
-am__objects_126 = lib1557-testutil.$(OBJEXT)
-am__objects_127 = ../../lib/lib1557-warnless.$(OBJEXT)
-am_lib1557_OBJECTS = lib1557-lib1557.$(OBJEXT) $(am__objects_125) \
- $(am__objects_126) $(am__objects_127)
+am_lib1557_OBJECTS = lib1557.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1557_OBJECTS = $(am_lib1557_OBJECTS)
lib1557_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_128 = ../../lib/timediff.$(OBJEXT) first.$(OBJEXT)
-am__objects_129 = testutil.$(OBJEXT)
-am__objects_130 = ../../lib/warnless.$(OBJEXT)
-am_lib1558_OBJECTS = lib1558.$(OBJEXT) $(am__objects_128) \
- $(am__objects_129) $(am__objects_130)
+am_lib1558_OBJECTS = lib1558.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1558_OBJECTS = $(am_lib1558_OBJECTS)
lib1558_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am_lib1559_OBJECTS = lib1559.$(OBJEXT) $(am__objects_128) \
- $(am__objects_129) $(am__objects_130)
+am_lib1559_OBJECTS = lib1559.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1559_OBJECTS = $(am_lib1559_OBJECTS)
lib1559_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am_lib1560_OBJECTS = lib1560.$(OBJEXT) $(am__objects_128) \
- $(am__objects_129) $(am__objects_130)
+am_lib1560_OBJECTS = lib1560.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1560_OBJECTS = $(am_lib1560_OBJECTS)
lib1560_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_131 = ../../lib/lib1564-timediff.$(OBJEXT) \
- lib1564-first.$(OBJEXT)
-am__objects_132 = lib1564-testutil.$(OBJEXT)
-am__objects_133 = ../../lib/lib1564-warnless.$(OBJEXT)
-am_lib1564_OBJECTS = lib1564-lib1564.$(OBJEXT) $(am__objects_131) \
- $(am__objects_132) $(am__objects_133)
+am_lib1564_OBJECTS = lib1564.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1564_OBJECTS = $(am_lib1564_OBJECTS)
lib1564_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_134 = ../../lib/lib1565-timediff.$(OBJEXT) \
- lib1565-first.$(OBJEXT)
-am__objects_135 = lib1565-testutil.$(OBJEXT)
-am__objects_136 = ../../lib/lib1565-warnless.$(OBJEXT)
-am_lib1565_OBJECTS = lib1565-lib1565.$(OBJEXT) $(am__objects_134) \
- $(am__objects_135) $(am__objects_136)
+am_lib1565_OBJECTS = lib1565.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1565_OBJECTS = $(am_lib1565_OBJECTS)
lib1565_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_137 = ../../lib/lib1567-timediff.$(OBJEXT) \
- lib1567-first.$(OBJEXT)
-am_lib1567_OBJECTS = lib1567-lib1567.$(OBJEXT) $(am__objects_137)
+am_lib1567_OBJECTS = lib1567.$(OBJEXT) $(am__objects_2)
lib1567_OBJECTS = $(am_lib1567_OBJECTS)
lib1567_LDADD = $(LDADD)
lib1567_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_138 = ../../lib/lib1568-timediff.$(OBJEXT) \
- lib1568-first.$(OBJEXT)
-am_lib1568_OBJECTS = lib1568-lib1568.$(OBJEXT) $(am__objects_138)
+am_lib1568_OBJECTS = lib1568.$(OBJEXT) $(am__objects_2)
lib1568_OBJECTS = $(am_lib1568_OBJECTS)
lib1568_LDADD = $(LDADD)
lib1568_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_139 = ../../lib/lib1569-timediff.$(OBJEXT) \
- lib1569-first.$(OBJEXT)
-am_lib1569_OBJECTS = lib1569-lib1569.$(OBJEXT) $(am__objects_139)
+am_lib1569_OBJECTS = lib1569.$(OBJEXT) $(am__objects_2)
lib1569_OBJECTS = $(am_lib1569_OBJECTS)
lib1569_LDADD = $(LDADD)
lib1569_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_140 = ../../lib/lib1591-timediff.$(OBJEXT) \
- lib1591-first.$(OBJEXT)
-am__objects_141 = lib1591-testutil.$(OBJEXT)
-am__objects_142 = ../../lib/lib1591-warnless.$(OBJEXT)
-am_lib1591_OBJECTS = lib1591-lib1591.$(OBJEXT) $(am__objects_140) \
- $(am__objects_141) $(am__objects_142)
+am_lib1591_OBJECTS = lib1591.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1591_OBJECTS = $(am_lib1591_OBJECTS)
lib1591_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_143 = ../../lib/lib1592-timediff.$(OBJEXT) \
- lib1592-first.$(OBJEXT)
-am__objects_144 = lib1592-testutil.$(OBJEXT)
-am__objects_145 = ../../lib/lib1592-warnless.$(OBJEXT)
-am_lib1592_OBJECTS = lib1592-lib1592.$(OBJEXT) $(am__objects_143) \
- $(am__objects_144) $(am__objects_145)
+am_lib1592_OBJECTS = lib1592.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1592_OBJECTS = $(am_lib1592_OBJECTS)
lib1592_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am_lib1593_OBJECTS = lib1593.$(OBJEXT) $(am__objects_128) \
- $(am__objects_129) $(am__objects_130)
+am_lib1593_OBJECTS = lib1593.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1593_OBJECTS = $(am_lib1593_OBJECTS)
lib1593_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am_lib1594_OBJECTS = lib1594.$(OBJEXT) $(am__objects_128) \
- $(am__objects_129) $(am__objects_130)
+am_lib1594_OBJECTS = lib1594.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1594_OBJECTS = $(am_lib1594_OBJECTS)
lib1594_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_146 = ../../lib/lib1596-timediff.$(OBJEXT) \
- lib1596-first.$(OBJEXT)
-am__objects_147 = lib1596-testutil.$(OBJEXT)
-am__objects_148 = ../../lib/lib1596-warnless.$(OBJEXT)
-am_lib1596_OBJECTS = lib1596-lib1594.$(OBJEXT) $(am__objects_146) \
- $(am__objects_147) $(am__objects_148)
+am__objects_32 = ../../lib/lib1596-timediff.$(OBJEXT)
+am__objects_33 = $(am__objects_32) lib1596-first.$(OBJEXT)
+am__objects_34 = lib1596-testutil.$(OBJEXT)
+am__objects_35 = ../../lib/lib1596-warnless.$(OBJEXT)
+am_lib1596_OBJECTS = lib1596-lib1594.$(OBJEXT) $(am__objects_33) \
+ $(am__objects_34) $(am__objects_35)
lib1596_OBJECTS = $(am_lib1596_OBJECTS)
lib1596_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am_lib1597_OBJECTS = lib1597.$(OBJEXT) $(am__objects_128) \
- $(am__objects_129) $(am__objects_130)
+am_lib1597_OBJECTS = lib1597.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1597_OBJECTS = $(am_lib1597_OBJECTS)
lib1597_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_149 = ../../lib/lib1905-timediff.$(OBJEXT) \
- lib1905-first.$(OBJEXT)
-am__objects_150 = lib1905-testutil.$(OBJEXT)
-am__objects_151 = ../../lib/lib1905-warnless.$(OBJEXT)
-am_lib1905_OBJECTS = lib1905-lib1905.$(OBJEXT) $(am__objects_149) \
- $(am__objects_150) $(am__objects_151)
+am_lib1662_OBJECTS = lib1662.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
+lib1662_OBJECTS = $(am_lib1662_OBJECTS)
+lib1662_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib1900_OBJECTS = lib1900.$(OBJEXT) $(am__objects_2)
+lib1900_OBJECTS = $(am_lib1900_OBJECTS)
+lib1900_LDADD = $(LDADD)
+lib1900_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib1903_OBJECTS = lib1903.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
+lib1903_OBJECTS = $(am_lib1903_OBJECTS)
+lib1903_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib1905_OBJECTS = lib1905.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1905_OBJECTS = $(am_lib1905_OBJECTS)
lib1905_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_152 = ../../lib/lib1906-timediff.$(OBJEXT) \
- lib1906-first.$(OBJEXT)
-am__objects_153 = lib1906-testutil.$(OBJEXT)
-am__objects_154 = ../../lib/lib1906-warnless.$(OBJEXT)
-am_lib1906_OBJECTS = lib1906-lib1906.$(OBJEXT) $(am__objects_152) \
- $(am__objects_153) $(am__objects_154)
+am_lib1906_OBJECTS = lib1906.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1906_OBJECTS = $(am_lib1906_OBJECTS)
lib1906_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_155 = ../../lib/lib1907-timediff.$(OBJEXT) \
- lib1907-first.$(OBJEXT)
-am__objects_156 = lib1907-testutil.$(OBJEXT)
-am__objects_157 = ../../lib/lib1907-warnless.$(OBJEXT)
-am_lib1907_OBJECTS = lib1907-lib1907.$(OBJEXT) $(am__objects_155) \
- $(am__objects_156) $(am__objects_157)
+am_lib1907_OBJECTS = lib1907.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1907_OBJECTS = $(am_lib1907_OBJECTS)
lib1907_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_158 = ../../lib/lib1908-timediff.$(OBJEXT) \
- lib1908-first.$(OBJEXT)
-am__objects_159 = lib1908-testutil.$(OBJEXT)
-am__objects_160 = ../../lib/lib1908-warnless.$(OBJEXT)
-am_lib1908_OBJECTS = lib1908-lib1908.$(OBJEXT) $(am__objects_158) \
- $(am__objects_159) $(am__objects_160)
+am_lib1908_OBJECTS = lib1908.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1908_OBJECTS = $(am_lib1908_OBJECTS)
lib1908_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_161 = ../../lib/lib1910-timediff.$(OBJEXT) \
- lib1910-first.$(OBJEXT)
-am__objects_162 = lib1910-testutil.$(OBJEXT)
-am__objects_163 = ../../lib/lib1910-warnless.$(OBJEXT)
-am_lib1910_OBJECTS = lib1910-lib1910.$(OBJEXT) $(am__objects_161) \
- $(am__objects_162) $(am__objects_163)
+am_lib1910_OBJECTS = lib1910.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1910_OBJECTS = $(am_lib1910_OBJECTS)
lib1910_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_164 = ../../lib/lib1911-timediff.$(OBJEXT) \
- lib1911-first.$(OBJEXT)
-am__objects_165 = lib1911-testutil.$(OBJEXT)
-am__objects_166 = ../../lib/lib1911-warnless.$(OBJEXT)
-am_lib1911_OBJECTS = lib1911-lib1911.$(OBJEXT) $(am__objects_164) \
- $(am__objects_165) $(am__objects_166)
+am_lib1911_OBJECTS = lib1911.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1911_OBJECTS = $(am_lib1911_OBJECTS)
lib1911_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_167 = ../../lib/lib1912-timediff.$(OBJEXT) \
- lib1912-first.$(OBJEXT)
-am__objects_168 = lib1912-testutil.$(OBJEXT)
-am__objects_169 = ../../lib/lib1912-warnless.$(OBJEXT)
-am_lib1912_OBJECTS = lib1912-lib1912.$(OBJEXT) $(am__objects_167) \
- $(am__objects_168) $(am__objects_169)
+am_lib1912_OBJECTS = lib1912.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1912_OBJECTS = $(am_lib1912_OBJECTS)
lib1912_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_170 = ../../lib/lib1913-timediff.$(OBJEXT) \
- lib1913-first.$(OBJEXT)
-am__objects_171 = lib1913-testutil.$(OBJEXT)
-am__objects_172 = ../../lib/lib1913-warnless.$(OBJEXT)
-am_lib1913_OBJECTS = lib1913-lib1913.$(OBJEXT) $(am__objects_170) \
- $(am__objects_171) $(am__objects_172)
+am_lib1913_OBJECTS = lib1913.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1913_OBJECTS = $(am_lib1913_OBJECTS)
lib1913_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_173 = ../../lib/lib1915-timediff.$(OBJEXT) \
- lib1915-first.$(OBJEXT)
-am__objects_174 = lib1915-testutil.$(OBJEXT)
-am__objects_175 = ../../lib/lib1915-warnless.$(OBJEXT)
-am_lib1915_OBJECTS = lib1915-lib1915.$(OBJEXT) $(am__objects_173) \
- $(am__objects_174) $(am__objects_175)
+am_lib1915_OBJECTS = lib1915.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1915_OBJECTS = $(am_lib1915_OBJECTS)
lib1915_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_176 = ../../lib/lib1916-timediff.$(OBJEXT) \
- lib1916-first.$(OBJEXT)
-am__objects_177 = ../../lib/lib1916-warnless.$(OBJEXT)
-am_lib1916_OBJECTS = lib1916-lib1916.$(OBJEXT) $(am__objects_176) \
- $(am__objects_177)
+am_lib1916_OBJECTS = lib1916.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_4)
lib1916_OBJECTS = $(am_lib1916_OBJECTS)
lib1916_LDADD = $(LDADD)
lib1916_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_178 = ../../lib/lib1917-timediff.$(OBJEXT) \
- lib1917-first.$(OBJEXT)
-am__objects_179 = ../../lib/lib1917-warnless.$(OBJEXT)
-am_lib1917_OBJECTS = lib1917-lib1916.$(OBJEXT) $(am__objects_178) \
- $(am__objects_179)
+am__objects_36 = ../../lib/lib1917-timediff.$(OBJEXT)
+am__objects_37 = $(am__objects_36) lib1917-first.$(OBJEXT)
+am__objects_38 = ../../lib/lib1917-warnless.$(OBJEXT)
+am_lib1917_OBJECTS = lib1917-lib1916.$(OBJEXT) $(am__objects_37) \
+ $(am__objects_38)
lib1917_OBJECTS = $(am_lib1917_OBJECTS)
lib1917_LDADD = $(LDADD)
lib1917_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_180 = ../../lib/lib1918-timediff.$(OBJEXT) \
- lib1918-first.$(OBJEXT)
-am__objects_181 = ../../lib/lib1918-warnless.$(OBJEXT)
-am_lib1918_OBJECTS = lib1918-lib1918.$(OBJEXT) $(am__objects_180) \
- $(am__objects_181)
+am_lib1918_OBJECTS = lib1918.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_4)
lib1918_OBJECTS = $(am_lib1918_OBJECTS)
lib1918_LDADD = $(LDADD)
lib1918_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_182 = ../../lib/lib1919-timediff.$(OBJEXT) \
- lib1919-first.$(OBJEXT)
-am__objects_183 = ../../lib/lib1919-warnless.$(OBJEXT)
-am_lib1919_OBJECTS = lib1919-lib1919.$(OBJEXT) $(am__objects_182) \
- $(am__objects_183)
+am_lib1919_OBJECTS = lib1919.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_4)
lib1919_OBJECTS = $(am_lib1919_OBJECTS)
lib1919_LDADD = $(LDADD)
lib1919_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_184 = ../../lib/lib1933-timediff.$(OBJEXT) \
- lib1933-first.$(OBJEXT)
-am__objects_185 = lib1933-testutil.$(OBJEXT)
-am__objects_186 = ../../lib/lib1933-warnless.$(OBJEXT)
-am_lib1933_OBJECTS = lib1933-lib1933.$(OBJEXT) $(am__objects_184) \
- $(am__objects_185) $(am__objects_186)
+am_lib1933_OBJECTS = lib1933.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1933_OBJECTS = $(am_lib1933_OBJECTS)
lib1933_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_187 = ../../lib/lib1934-timediff.$(OBJEXT) \
- lib1934-first.$(OBJEXT)
-am__objects_188 = lib1934-testutil.$(OBJEXT)
-am__objects_189 = ../../lib/lib1934-warnless.$(OBJEXT)
-am_lib1934_OBJECTS = lib1934-lib1934.$(OBJEXT) $(am__objects_187) \
- $(am__objects_188) $(am__objects_189)
+am_lib1934_OBJECTS = lib1934.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1934_OBJECTS = $(am_lib1934_OBJECTS)
lib1934_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_190 = ../../lib/lib1935-timediff.$(OBJEXT) \
- lib1935-first.$(OBJEXT)
-am__objects_191 = lib1935-testutil.$(OBJEXT)
-am__objects_192 = ../../lib/lib1935-warnless.$(OBJEXT)
-am_lib1935_OBJECTS = lib1935-lib1935.$(OBJEXT) $(am__objects_190) \
- $(am__objects_191) $(am__objects_192)
+am_lib1935_OBJECTS = lib1935.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1935_OBJECTS = $(am_lib1935_OBJECTS)
lib1935_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_193 = ../../lib/lib1936-timediff.$(OBJEXT) \
- lib1936-first.$(OBJEXT)
-am__objects_194 = lib1936-testutil.$(OBJEXT)
-am__objects_195 = ../../lib/lib1936-warnless.$(OBJEXT)
-am_lib1936_OBJECTS = lib1936-lib1936.$(OBJEXT) $(am__objects_193) \
- $(am__objects_194) $(am__objects_195)
+am_lib1936_OBJECTS = lib1936.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1936_OBJECTS = $(am_lib1936_OBJECTS)
lib1936_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_196 = ../../lib/lib1937-timediff.$(OBJEXT) \
- lib1937-first.$(OBJEXT)
-am_lib1937_OBJECTS = lib1937-lib1937.$(OBJEXT) $(am__objects_196)
+am_lib1937_OBJECTS = lib1937.$(OBJEXT) $(am__objects_2)
lib1937_OBJECTS = $(am_lib1937_OBJECTS)
lib1937_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_197 = ../../lib/lib1938-timediff.$(OBJEXT) \
- lib1938-first.$(OBJEXT)
-am_lib1938_OBJECTS = lib1938-lib1938.$(OBJEXT) $(am__objects_197)
+am_lib1938_OBJECTS = lib1938.$(OBJEXT) $(am__objects_2)
lib1938_OBJECTS = $(am_lib1938_OBJECTS)
lib1938_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_198 = ../../lib/lib1939-timediff.$(OBJEXT) \
- lib1939-first.$(OBJEXT)
-am_lib1939_OBJECTS = lib1939-lib1939.$(OBJEXT) $(am__objects_198)
+am_lib1939_OBJECTS = lib1939.$(OBJEXT) $(am__objects_2)
lib1939_OBJECTS = $(am_lib1939_OBJECTS)
lib1939_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_199 = ../../lib/lib1940-timediff.$(OBJEXT) \
- lib1940-first.$(OBJEXT)
-am_lib1940_OBJECTS = lib1940-lib1940.$(OBJEXT) $(am__objects_199)
+am_lib1940_OBJECTS = lib1940.$(OBJEXT) $(am__objects_2)
lib1940_OBJECTS = $(am_lib1940_OBJECTS)
lib1940_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_200 = ../../lib/lib1945-timediff.$(OBJEXT) \
- lib1945-first.$(OBJEXT)
-am_lib1945_OBJECTS = lib1945-lib1945.$(OBJEXT) $(am__objects_200)
+am_lib1945_OBJECTS = lib1945.$(OBJEXT) $(am__objects_2)
lib1945_OBJECTS = $(am_lib1945_OBJECTS)
lib1945_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_201 = ../../lib/lib1946-timediff.$(OBJEXT) \
- lib1946-first.$(OBJEXT)
-am_lib1946_OBJECTS = lib1946-lib1940.$(OBJEXT) $(am__objects_201)
+am__objects_39 = ../../lib/lib1946-timediff.$(OBJEXT)
+am__objects_40 = $(am__objects_39) lib1946-first.$(OBJEXT)
+am_lib1946_OBJECTS = lib1946-lib1940.$(OBJEXT) $(am__objects_40)
lib1946_OBJECTS = $(am_lib1946_OBJECTS)
lib1946_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_202 = ../../lib/lib1947-timediff.$(OBJEXT) \
- lib1947-first.$(OBJEXT)
-am_lib1947_OBJECTS = lib1947-lib1947.$(OBJEXT) $(am__objects_202)
+am_lib1947_OBJECTS = lib1947.$(OBJEXT) $(am__objects_2)
lib1947_OBJECTS = $(am_lib1947_OBJECTS)
lib1947_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_203 = ../../lib/lib1948-timediff.$(OBJEXT) \
- lib1948-first.$(OBJEXT)
-am_lib1948_OBJECTS = lib1948-lib1948.$(OBJEXT) $(am__objects_203)
+am_lib1948_OBJECTS = lib1948.$(OBJEXT) $(am__objects_2)
lib1948_OBJECTS = $(am_lib1948_OBJECTS)
lib1948_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_204 = ../../lib/lib1955-timediff.$(OBJEXT) \
- lib1955-first.$(OBJEXT)
-am__objects_205 = lib1955-testutil.$(OBJEXT)
-am__objects_206 = ../../lib/lib1955-warnless.$(OBJEXT)
-am_lib1955_OBJECTS = lib1955-lib1955.$(OBJEXT) $(am__objects_204) \
- $(am__objects_205) $(am__objects_206)
+am_lib1955_OBJECTS = lib1955.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib1955_OBJECTS = $(am_lib1955_OBJECTS)
lib1955_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am_lib2301_OBJECTS = lib2301.$(OBJEXT) $(am__objects_128)
+am_lib1956_OBJECTS = lib1956.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
+lib1956_OBJECTS = $(am_lib1956_OBJECTS)
+lib1956_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib1957_OBJECTS = lib1957.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
+lib1957_OBJECTS = $(am_lib1957_OBJECTS)
+lib1957_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib1958_OBJECTS = lib1958.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
+lib1958_OBJECTS = $(am_lib1958_OBJECTS)
+lib1958_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib1959_OBJECTS = lib1959.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
+lib1959_OBJECTS = $(am_lib1959_OBJECTS)
+lib1959_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib1960_OBJECTS = lib1960.$(OBJEXT) $(am__objects_2)
+lib1960_OBJECTS = $(am_lib1960_OBJECTS)
+lib1960_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib1964_OBJECTS = lib1964.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
+lib1964_OBJECTS = $(am_lib1964_OBJECTS)
+lib1964_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib1970_OBJECTS = lib1970.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
+lib1970_OBJECTS = $(am_lib1970_OBJECTS)
+lib1970_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib1971_OBJECTS = lib1971.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
+lib1971_OBJECTS = $(am_lib1971_OBJECTS)
+lib1971_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib1972_OBJECTS = lib1972.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
+lib1972_OBJECTS = $(am_lib1972_OBJECTS)
+lib1972_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib1973_OBJECTS = lib1973.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
+lib1973_OBJECTS = $(am_lib1973_OBJECTS)
+lib1973_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib1974_OBJECTS = lib1974.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
+lib1974_OBJECTS = $(am_lib1974_OBJECTS)
+lib1974_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib1975_OBJECTS = lib1975.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
+lib1975_OBJECTS = $(am_lib1975_OBJECTS)
+lib1975_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib2301_OBJECTS = lib2301.$(OBJEXT) $(am__objects_2)
lib2301_OBJECTS = $(am_lib2301_OBJECTS)
lib2301_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am_lib2302_OBJECTS = lib2302.$(OBJEXT) $(am__objects_128)
+am_lib2302_OBJECTS = lib2302.$(OBJEXT) $(am__objects_2)
lib2302_OBJECTS = $(am_lib2302_OBJECTS)
lib2302_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_207 = ../../lib/lib3010-timediff.$(OBJEXT) \
- lib3010-first.$(OBJEXT)
-am__objects_208 = lib3010-testutil.$(OBJEXT)
-am__objects_209 = ../../lib/lib3010-warnless.$(OBJEXT)
-am_lib3010_OBJECTS = lib3010-lib3010.$(OBJEXT) $(am__objects_207) \
- $(am__objects_208) $(am__objects_209)
+am_lib2304_OBJECTS = lib2304.$(OBJEXT) $(am__objects_2)
+lib2304_OBJECTS = $(am_lib2304_OBJECTS)
+lib2304_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am__objects_41 = ../../lib/curl_multibyte.$(OBJEXT)
+am_lib2305_OBJECTS = lib2305.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_23) $(am__objects_41)
+lib2305_OBJECTS = $(am_lib2305_OBJECTS)
+lib2305_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib2306_OBJECTS = lib2306.$(OBJEXT) $(am__objects_2)
+lib2306_OBJECTS = $(am_lib2306_OBJECTS)
+lib2306_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib2402_OBJECTS = lib2402.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
+lib2402_OBJECTS = $(am_lib2402_OBJECTS)
+lib2402_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib2404_OBJECTS = lib2404.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
+lib2404_OBJECTS = $(am_lib2404_OBJECTS)
+lib2404_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib2502_OBJECTS = lib2502.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
+lib2502_OBJECTS = $(am_lib2502_OBJECTS)
+lib2502_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib3010_OBJECTS = lib3010.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib3010_OBJECTS = $(am_lib3010_OBJECTS)
lib3010_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_210 = ../../lib/lib3025-timediff.$(OBJEXT) \
- lib3025-first.$(OBJEXT)
-am__objects_211 = lib3025-testutil.$(OBJEXT)
-am__objects_212 = ../../lib/lib3025-warnless.$(OBJEXT)
-am_lib3025_OBJECTS = lib3025-lib3025.$(OBJEXT) $(am__objects_210) \
- $(am__objects_211) $(am__objects_212)
+am_lib3025_OBJECTS = lib3025.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib3025_OBJECTS = $(am_lib3025_OBJECTS)
lib3025_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_213 = ../../lib/lib3026-timediff.$(OBJEXT) \
- lib3026-first.$(OBJEXT)
-am__objects_214 = lib3026-testutil.$(OBJEXT)
-am__objects_215 = ../../lib/lib3026-warnless.$(OBJEXT)
-am_lib3026_OBJECTS = lib3026-lib3026.$(OBJEXT) $(am__objects_213) \
- $(am__objects_214) $(am__objects_215)
+am_lib3026_OBJECTS = lib3026.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib3026_OBJECTS = $(am_lib3026_OBJECTS)
lib3026_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_216 = ../../lib/lib3027-timediff.$(OBJEXT) \
- lib3027-first.$(OBJEXT)
-am__objects_217 = lib3027-testutil.$(OBJEXT)
-am__objects_218 = ../../lib/lib3027-warnless.$(OBJEXT)
-am_lib3027_OBJECTS = lib3027-lib3027.$(OBJEXT) $(am__objects_216) \
- $(am__objects_217) $(am__objects_218)
+am_lib3027_OBJECTS = lib3027.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
lib3027_OBJECTS = $(am_lib3027_OBJECTS)
lib3027_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_219 = ../../lib/lib500-timediff.$(OBJEXT) \
- lib500-first.$(OBJEXT)
-am__objects_220 = lib500-testutil.$(OBJEXT)
-am__objects_221 = lib500-testtrace.$(OBJEXT)
-am__objects_222 = ../../lib/lib500-curl_multibyte.$(OBJEXT)
-am_lib500_OBJECTS = lib500-lib500.$(OBJEXT) $(am__objects_219) \
- $(am__objects_220) $(am__objects_221) $(am__objects_222)
+am_lib3100_OBJECTS = lib3100.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
+lib3100_OBJECTS = $(am_lib3100_OBJECTS)
+lib3100_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib3101_OBJECTS = lib3101.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
+lib3101_OBJECTS = $(am_lib3101_OBJECTS)
+lib3101_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib3102_OBJECTS = lib3102.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
+lib3102_OBJECTS = $(am_lib3102_OBJECTS)
+lib3102_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib3103_OBJECTS = lib3103.$(OBJEXT) $(am__objects_2)
+lib3103_OBJECTS = $(am_lib3103_OBJECTS)
+lib3103_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_lib500_OBJECTS = lib500.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_23) $(am__objects_41)
lib500_OBJECTS = $(am_lib500_OBJECTS)
lib500_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_223 = ../../lib/lib501-timediff.$(OBJEXT) \
- lib501-first.$(OBJEXT)
-am_lib501_OBJECTS = lib501-lib501.$(OBJEXT) $(am__objects_223)
+am_lib501_OBJECTS = lib501.$(OBJEXT) $(am__objects_2)
lib501_OBJECTS = $(am_lib501_OBJECTS)
lib501_LDADD = $(LDADD)
lib501_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_224 = ../../lib/lib502-timediff.$(OBJEXT) \
- lib502-first.$(OBJEXT)
-am__objects_225 = lib502-testutil.$(OBJEXT)
-am__objects_226 = ../../lib/lib502-warnless.$(OBJEXT)
-am_lib502_OBJECTS = lib502-lib502.$(OBJEXT) $(am__objects_224) \
- $(am__objects_225) $(am__objects_226)
+am_lib502_OBJECTS = lib502.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4)
lib502_OBJECTS = $(am_lib502_OBJECTS)
lib502_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_227 = ../../lib/lib503-timediff.$(OBJEXT) \
- lib503-first.$(OBJEXT)
-am__objects_228 = lib503-testutil.$(OBJEXT)
-am__objects_229 = ../../lib/lib503-warnless.$(OBJEXT)
-am_lib503_OBJECTS = lib503-lib503.$(OBJEXT) $(am__objects_227) \
- $(am__objects_228) $(am__objects_229)
+am_lib503_OBJECTS = lib503.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4)
lib503_OBJECTS = $(am_lib503_OBJECTS)
lib503_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_230 = ../../lib/lib504-timediff.$(OBJEXT) \
- lib504-first.$(OBJEXT)
-am__objects_231 = lib504-testutil.$(OBJEXT)
-am__objects_232 = ../../lib/lib504-warnless.$(OBJEXT)
-am_lib504_OBJECTS = lib504-lib504.$(OBJEXT) $(am__objects_230) \
- $(am__objects_231) $(am__objects_232)
+am_lib504_OBJECTS = lib504.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4)
lib504_OBJECTS = $(am_lib504_OBJECTS)
lib504_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_233 = ../../lib/lib505-timediff.$(OBJEXT) \
- lib505-first.$(OBJEXT)
-am__objects_234 = ../../lib/lib505-curl_multibyte.$(OBJEXT)
-am_lib505_OBJECTS = lib505-lib505.$(OBJEXT) $(am__objects_233) \
- $(am__objects_234)
+am_lib505_OBJECTS = lib505.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_41)
lib505_OBJECTS = $(am_lib505_OBJECTS)
lib505_LDADD = $(LDADD)
lib505_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_235 = ../../lib/lib506-timediff.$(OBJEXT) \
- lib506-first.$(OBJEXT)
-am_lib506_OBJECTS = lib506-lib506.$(OBJEXT) $(am__objects_235)
+am_lib506_OBJECTS = lib506.$(OBJEXT) $(am__objects_2)
lib506_OBJECTS = $(am_lib506_OBJECTS)
lib506_LDADD = $(LDADD)
lib506_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_236 = ../../lib/lib507-timediff.$(OBJEXT) \
- lib507-first.$(OBJEXT)
-am__objects_237 = lib507-testutil.$(OBJEXT)
-am__objects_238 = ../../lib/lib507-warnless.$(OBJEXT)
-am_lib507_OBJECTS = lib507-lib507.$(OBJEXT) $(am__objects_236) \
- $(am__objects_237) $(am__objects_238)
+am_lib507_OBJECTS = lib507.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4)
lib507_OBJECTS = $(am_lib507_OBJECTS)
lib507_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_239 = ../../lib/lib508-timediff.$(OBJEXT) \
- lib508-first.$(OBJEXT)
-am_lib508_OBJECTS = lib508-lib508.$(OBJEXT) $(am__objects_239)
+am_lib508_OBJECTS = lib508.$(OBJEXT) $(am__objects_2)
lib508_OBJECTS = $(am_lib508_OBJECTS)
lib508_LDADD = $(LDADD)
lib508_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_240 = ../../lib/lib509-timediff.$(OBJEXT) \
- lib509-first.$(OBJEXT)
-am_lib509_OBJECTS = lib509-lib509.$(OBJEXT) $(am__objects_240)
+am_lib509_OBJECTS = lib509.$(OBJEXT) $(am__objects_2)
lib509_OBJECTS = $(am_lib509_OBJECTS)
lib509_LDADD = $(LDADD)
lib509_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_241 = ../../lib/lib510-timediff.$(OBJEXT) \
- lib510-first.$(OBJEXT)
-am_lib510_OBJECTS = lib510-lib510.$(OBJEXT) $(am__objects_241)
+am_lib510_OBJECTS = lib510.$(OBJEXT) $(am__objects_2)
lib510_OBJECTS = $(am_lib510_OBJECTS)
lib510_LDADD = $(LDADD)
lib510_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_242 = ../../lib/lib511-timediff.$(OBJEXT) \
- lib511-first.$(OBJEXT)
-am_lib511_OBJECTS = lib511-lib511.$(OBJEXT) $(am__objects_242)
+am_lib511_OBJECTS = lib511.$(OBJEXT) $(am__objects_2)
lib511_OBJECTS = $(am_lib511_OBJECTS)
lib511_LDADD = $(LDADD)
lib511_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_243 = ../../lib/lib512-timediff.$(OBJEXT) \
- lib512-first.$(OBJEXT)
-am_lib512_OBJECTS = lib512-lib512.$(OBJEXT) $(am__objects_243)
+am_lib512_OBJECTS = lib512.$(OBJEXT) $(am__objects_2)
lib512_OBJECTS = $(am_lib512_OBJECTS)
lib512_LDADD = $(LDADD)
lib512_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_244 = ../../lib/lib513-timediff.$(OBJEXT) \
- lib513-first.$(OBJEXT)
-am_lib513_OBJECTS = lib513-lib513.$(OBJEXT) $(am__objects_244)
+am_lib513_OBJECTS = lib513.$(OBJEXT) $(am__objects_2)
lib513_OBJECTS = $(am_lib513_OBJECTS)
lib513_LDADD = $(LDADD)
lib513_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_245 = ../../lib/lib514-timediff.$(OBJEXT) \
- lib514-first.$(OBJEXT)
-am_lib514_OBJECTS = lib514-lib514.$(OBJEXT) $(am__objects_245)
+am_lib514_OBJECTS = lib514.$(OBJEXT) $(am__objects_2)
lib514_OBJECTS = $(am_lib514_OBJECTS)
lib514_LDADD = $(LDADD)
lib514_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_246 = ../../lib/lib515-timediff.$(OBJEXT) \
- lib515-first.$(OBJEXT)
-am_lib515_OBJECTS = lib515-lib515.$(OBJEXT) $(am__objects_246)
+am_lib515_OBJECTS = lib515.$(OBJEXT) $(am__objects_2)
lib515_OBJECTS = $(am_lib515_OBJECTS)
lib515_LDADD = $(LDADD)
lib515_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_247 = ../../lib/lib516-timediff.$(OBJEXT) \
- lib516-first.$(OBJEXT)
-am_lib516_OBJECTS = lib516-lib516.$(OBJEXT) $(am__objects_247)
+am_lib516_OBJECTS = lib516.$(OBJEXT) $(am__objects_2)
lib516_OBJECTS = $(am_lib516_OBJECTS)
lib516_LDADD = $(LDADD)
lib516_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_248 = ../../lib/lib517-timediff.$(OBJEXT) \
- lib517-first.$(OBJEXT)
-am_lib517_OBJECTS = lib517-lib517.$(OBJEXT) $(am__objects_248)
+am_lib517_OBJECTS = lib517.$(OBJEXT) $(am__objects_2)
lib517_OBJECTS = $(am_lib517_OBJECTS)
lib517_LDADD = $(LDADD)
lib517_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_249 = ../../lib/lib518-timediff.$(OBJEXT) \
- lib518-first.$(OBJEXT)
-am__objects_250 = ../../lib/lib518-warnless.$(OBJEXT)
-am__objects_251 = ../../lib/lib518-curl_multibyte.$(OBJEXT)
-am_lib518_OBJECTS = lib518-lib518.$(OBJEXT) $(am__objects_249) \
- $(am__objects_250) $(am__objects_251)
+am_lib518_OBJECTS = lib518.$(OBJEXT) $(am__objects_2) $(am__objects_4) \
+ $(am__objects_41)
lib518_OBJECTS = $(am_lib518_OBJECTS)
lib518_LDADD = $(LDADD)
lib518_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_252 = ../../lib/lib519-timediff.$(OBJEXT) \
- lib519-first.$(OBJEXT)
-am_lib519_OBJECTS = lib519-lib519.$(OBJEXT) $(am__objects_252)
+am_lib519_OBJECTS = lib519.$(OBJEXT) $(am__objects_2)
lib519_OBJECTS = $(am_lib519_OBJECTS)
lib519_LDADD = $(LDADD)
lib519_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_253 = ../../lib/lib520-timediff.$(OBJEXT) \
- lib520-first.$(OBJEXT)
-am_lib520_OBJECTS = lib520-lib520.$(OBJEXT) $(am__objects_253)
+am_lib520_OBJECTS = lib520.$(OBJEXT) $(am__objects_2)
lib520_OBJECTS = $(am_lib520_OBJECTS)
lib520_LDADD = $(LDADD)
lib520_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_254 = ../../lib/lib521-timediff.$(OBJEXT) \
- lib521-first.$(OBJEXT)
-am_lib521_OBJECTS = lib521-lib521.$(OBJEXT) $(am__objects_254)
+am_lib521_OBJECTS = lib521.$(OBJEXT) $(am__objects_2)
lib521_OBJECTS = $(am_lib521_OBJECTS)
lib521_LDADD = $(LDADD)
lib521_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_255 = ../../lib/lib523-timediff.$(OBJEXT) \
- lib523-first.$(OBJEXT)
-am_lib523_OBJECTS = lib523-lib523.$(OBJEXT) $(am__objects_255)
+am_lib523_OBJECTS = lib523.$(OBJEXT) $(am__objects_2)
lib523_OBJECTS = $(am_lib523_OBJECTS)
lib523_LDADD = $(LDADD)
lib523_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_256 = ../../lib/lib524-timediff.$(OBJEXT) \
- lib524-first.$(OBJEXT)
-am_lib524_OBJECTS = lib524-lib524.$(OBJEXT) $(am__objects_256)
+am_lib524_OBJECTS = lib524.$(OBJEXT) $(am__objects_2)
lib524_OBJECTS = $(am_lib524_OBJECTS)
lib524_LDADD = $(LDADD)
lib524_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_257 = ../../lib/lib525-timediff.$(OBJEXT) \
- lib525-first.$(OBJEXT)
-am__objects_258 = lib525-testutil.$(OBJEXT)
-am__objects_259 = ../../lib/lib525-warnless.$(OBJEXT)
-am__objects_260 = ../../lib/lib525-curl_multibyte.$(OBJEXT)
-am_lib525_OBJECTS = lib525-lib525.$(OBJEXT) $(am__objects_257) \
- $(am__objects_258) $(am__objects_259) $(am__objects_260)
+am_lib525_OBJECTS = lib525.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4) $(am__objects_41)
lib525_OBJECTS = $(am_lib525_OBJECTS)
lib525_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_261 = ../../lib/lib526-timediff.$(OBJEXT) \
- lib526-first.$(OBJEXT)
-am__objects_262 = lib526-testutil.$(OBJEXT)
-am__objects_263 = ../../lib/lib526-warnless.$(OBJEXT)
-am_lib526_OBJECTS = lib526-lib526.$(OBJEXT) $(am__objects_261) \
- $(am__objects_262) $(am__objects_263)
+am__objects_42 = ../../lib/lib526-timediff.$(OBJEXT)
+am__objects_43 = $(am__objects_42) lib526-first.$(OBJEXT)
+am__objects_44 = lib526-testutil.$(OBJEXT)
+am__objects_45 = ../../lib/lib526-warnless.$(OBJEXT)
+am_lib526_OBJECTS = lib526-lib526.$(OBJEXT) $(am__objects_43) \
+ $(am__objects_44) $(am__objects_45)
lib526_OBJECTS = $(am_lib526_OBJECTS)
lib526_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_264 = ../../lib/lib527-timediff.$(OBJEXT) \
- lib527-first.$(OBJEXT)
-am__objects_265 = lib527-testutil.$(OBJEXT)
-am__objects_266 = ../../lib/lib527-warnless.$(OBJEXT)
-am_lib527_OBJECTS = lib527-lib526.$(OBJEXT) $(am__objects_264) \
- $(am__objects_265) $(am__objects_266)
+am__objects_46 = ../../lib/lib527-timediff.$(OBJEXT)
+am__objects_47 = $(am__objects_46) lib527-first.$(OBJEXT)
+am__objects_48 = lib527-testutil.$(OBJEXT)
+am__objects_49 = ../../lib/lib527-warnless.$(OBJEXT)
+am_lib527_OBJECTS = lib527-lib526.$(OBJEXT) $(am__objects_47) \
+ $(am__objects_48) $(am__objects_49)
lib527_OBJECTS = $(am_lib527_OBJECTS)
lib527_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_267 = ../../lib/lib529-timediff.$(OBJEXT) \
- lib529-first.$(OBJEXT)
-am__objects_268 = lib529-testutil.$(OBJEXT)
-am__objects_269 = ../../lib/lib529-warnless.$(OBJEXT)
-am__objects_270 = ../../lib/lib529-curl_multibyte.$(OBJEXT)
-am_lib529_OBJECTS = lib529-lib525.$(OBJEXT) $(am__objects_267) \
- $(am__objects_268) $(am__objects_269) $(am__objects_270)
+am__objects_50 = ../../lib/lib529-timediff.$(OBJEXT)
+am__objects_51 = $(am__objects_50) lib529-first.$(OBJEXT)
+am__objects_52 = lib529-testutil.$(OBJEXT)
+am__objects_53 = ../../lib/lib529-warnless.$(OBJEXT)
+am__objects_54 = ../../lib/lib529-curl_multibyte.$(OBJEXT)
+am_lib529_OBJECTS = lib529-lib525.$(OBJEXT) $(am__objects_51) \
+ $(am__objects_52) $(am__objects_53) $(am__objects_54)
lib529_OBJECTS = $(am_lib529_OBJECTS)
lib529_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_271 = ../../lib/lib530-timediff.$(OBJEXT) \
- lib530-first.$(OBJEXT)
-am__objects_272 = lib530-testutil.$(OBJEXT)
-am__objects_273 = ../../lib/lib530-warnless.$(OBJEXT)
-am_lib530_OBJECTS = lib530-lib530.$(OBJEXT) $(am__objects_271) \
- $(am__objects_272) $(am__objects_273)
+am_lib530_OBJECTS = lib530.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4)
lib530_OBJECTS = $(am_lib530_OBJECTS)
lib530_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_274 = ../../lib/lib532-timediff.$(OBJEXT) \
- lib532-first.$(OBJEXT)
-am__objects_275 = lib532-testutil.$(OBJEXT)
-am__objects_276 = ../../lib/lib532-warnless.$(OBJEXT)
-am_lib532_OBJECTS = lib532-lib526.$(OBJEXT) $(am__objects_274) \
- $(am__objects_275) $(am__objects_276)
+am__objects_55 = ../../lib/lib532-timediff.$(OBJEXT)
+am__objects_56 = $(am__objects_55) lib532-first.$(OBJEXT)
+am__objects_57 = lib532-testutil.$(OBJEXT)
+am__objects_58 = ../../lib/lib532-warnless.$(OBJEXT)
+am_lib532_OBJECTS = lib532-lib526.$(OBJEXT) $(am__objects_56) \
+ $(am__objects_57) $(am__objects_58)
lib532_OBJECTS = $(am_lib532_OBJECTS)
lib532_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_277 = ../../lib/lib533-timediff.$(OBJEXT) \
- lib533-first.$(OBJEXT)
-am__objects_278 = lib533-testutil.$(OBJEXT)
-am__objects_279 = ../../lib/lib533-warnless.$(OBJEXT)
-am_lib533_OBJECTS = lib533-lib533.$(OBJEXT) $(am__objects_277) \
- $(am__objects_278) $(am__objects_279)
+am_lib533_OBJECTS = lib533.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4)
lib533_OBJECTS = $(am_lib533_OBJECTS)
lib533_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_280 = ../../lib/lib537-timediff.$(OBJEXT) \
- lib537-first.$(OBJEXT)
-am__objects_281 = ../../lib/lib537-warnless.$(OBJEXT)
-am__objects_282 = ../../lib/lib537-curl_multibyte.$(OBJEXT)
-am_lib537_OBJECTS = lib537-lib537.$(OBJEXT) $(am__objects_280) \
- $(am__objects_281) $(am__objects_282)
+am_lib537_OBJECTS = lib537.$(OBJEXT) $(am__objects_2) $(am__objects_4) \
+ $(am__objects_41)
lib537_OBJECTS = $(am_lib537_OBJECTS)
lib537_LDADD = $(LDADD)
lib537_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_283 = ../../lib/lib539-timediff.$(OBJEXT) \
- lib539-first.$(OBJEXT)
-am_lib539_OBJECTS = lib539-lib539.$(OBJEXT) $(am__objects_283)
+am_lib539_OBJECTS = lib539.$(OBJEXT) $(am__objects_2)
lib539_OBJECTS = $(am_lib539_OBJECTS)
lib539_LDADD = $(LDADD)
lib539_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_284 = ../../lib/lib540-timediff.$(OBJEXT) \
- lib540-first.$(OBJEXT)
-am__objects_285 = lib540-testutil.$(OBJEXT)
-am__objects_286 = ../../lib/lib540-warnless.$(OBJEXT)
-am_lib540_OBJECTS = lib540-lib540.$(OBJEXT) $(am__objects_284) \
- $(am__objects_285) $(am__objects_286)
+am_lib540_OBJECTS = lib540.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4)
lib540_OBJECTS = $(am_lib540_OBJECTS)
lib540_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_287 = ../../lib/lib541-timediff.$(OBJEXT) \
- lib541-first.$(OBJEXT)
-am__objects_288 = ../../lib/lib541-curl_multibyte.$(OBJEXT)
-am_lib541_OBJECTS = lib541-lib541.$(OBJEXT) $(am__objects_287) \
- $(am__objects_288)
+am_lib541_OBJECTS = lib541.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_41)
lib541_OBJECTS = $(am_lib541_OBJECTS)
lib541_LDADD = $(LDADD)
lib541_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_289 = ../../lib/lib542-timediff.$(OBJEXT) \
- lib542-first.$(OBJEXT)
-am_lib542_OBJECTS = lib542-lib542.$(OBJEXT) $(am__objects_289)
+am_lib542_OBJECTS = lib542.$(OBJEXT) $(am__objects_2)
lib542_OBJECTS = $(am_lib542_OBJECTS)
lib542_LDADD = $(LDADD)
lib542_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_290 = ../../lib/lib543-timediff.$(OBJEXT) \
- lib543-first.$(OBJEXT)
-am_lib543_OBJECTS = lib543-lib543.$(OBJEXT) $(am__objects_290)
+am_lib543_OBJECTS = lib543.$(OBJEXT) $(am__objects_2)
lib543_OBJECTS = $(am_lib543_OBJECTS)
lib543_LDADD = $(LDADD)
lib543_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_291 = ../../lib/lib544-timediff.$(OBJEXT) \
- lib544-first.$(OBJEXT)
-am_lib544_OBJECTS = lib544-lib544.$(OBJEXT) $(am__objects_291)
+am_lib544_OBJECTS = lib544.$(OBJEXT) $(am__objects_2)
lib544_OBJECTS = $(am_lib544_OBJECTS)
lib544_LDADD = $(LDADD)
lib544_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_292 = ../../lib/lib545-timediff.$(OBJEXT) \
- lib545-first.$(OBJEXT)
-am_lib545_OBJECTS = lib545-lib544.$(OBJEXT) $(am__objects_292)
+am__objects_59 = ../../lib/lib545-timediff.$(OBJEXT)
+am__objects_60 = $(am__objects_59) lib545-first.$(OBJEXT)
+am_lib545_OBJECTS = lib545-lib544.$(OBJEXT) $(am__objects_60)
lib545_OBJECTS = $(am_lib545_OBJECTS)
lib545_LDADD = $(LDADD)
lib545_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_293 = ../../lib/lib547-timediff.$(OBJEXT) \
- lib547-first.$(OBJEXT)
-am_lib547_OBJECTS = lib547-lib547.$(OBJEXT) $(am__objects_293)
+am_lib547_OBJECTS = lib547.$(OBJEXT) $(am__objects_2)
lib547_OBJECTS = $(am_lib547_OBJECTS)
lib547_LDADD = $(LDADD)
lib547_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_294 = ../../lib/lib548-timediff.$(OBJEXT) \
- lib548-first.$(OBJEXT)
-am_lib548_OBJECTS = lib548-lib547.$(OBJEXT) $(am__objects_294)
+am__objects_61 = ../../lib/lib548-timediff.$(OBJEXT)
+am__objects_62 = $(am__objects_61) lib548-first.$(OBJEXT)
+am_lib548_OBJECTS = lib548-lib547.$(OBJEXT) $(am__objects_62)
lib548_OBJECTS = $(am_lib548_OBJECTS)
lib548_LDADD = $(LDADD)
lib548_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_295 = ../../lib/lib549-timediff.$(OBJEXT) \
- lib549-first.$(OBJEXT)
-am_lib549_OBJECTS = lib549-lib549.$(OBJEXT) $(am__objects_295)
+am_lib549_OBJECTS = lib549.$(OBJEXT) $(am__objects_2)
lib549_OBJECTS = $(am_lib549_OBJECTS)
lib549_LDADD = $(LDADD)
lib549_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_296 = ../../lib/lib552-timediff.$(OBJEXT) \
- lib552-first.$(OBJEXT)
-am__objects_297 = ../../lib/lib552-warnless.$(OBJEXT)
-am_lib552_OBJECTS = lib552-lib552.$(OBJEXT) $(am__objects_296) \
- $(am__objects_297)
+am_lib552_OBJECTS = lib552.$(OBJEXT) $(am__objects_2) $(am__objects_4)
lib552_OBJECTS = $(am_lib552_OBJECTS)
lib552_LDADD = $(LDADD)
lib552_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_298 = ../../lib/lib553-timediff.$(OBJEXT) \
- lib553-first.$(OBJEXT)
-am_lib553_OBJECTS = lib553-lib553.$(OBJEXT) $(am__objects_298)
+am_lib553_OBJECTS = lib553.$(OBJEXT) $(am__objects_2)
lib553_OBJECTS = $(am_lib553_OBJECTS)
lib553_LDADD = $(LDADD)
lib553_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_299 = ../../lib/lib554-timediff.$(OBJEXT) \
- lib554-first.$(OBJEXT)
-am_lib554_OBJECTS = lib554-lib554.$(OBJEXT) $(am__objects_299)
+am_lib554_OBJECTS = lib554.$(OBJEXT) $(am__objects_2)
lib554_OBJECTS = $(am_lib554_OBJECTS)
lib554_LDADD = $(LDADD)
lib554_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_300 = ../../lib/lib555-timediff.$(OBJEXT) \
- lib555-first.$(OBJEXT)
-am__objects_301 = lib555-testutil.$(OBJEXT)
-am__objects_302 = ../../lib/lib555-warnless.$(OBJEXT)
-am_lib555_OBJECTS = lib555-lib555.$(OBJEXT) $(am__objects_300) \
- $(am__objects_301) $(am__objects_302)
+am_lib555_OBJECTS = lib555.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4)
lib555_OBJECTS = $(am_lib555_OBJECTS)
lib555_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_303 = ../../lib/lib556-timediff.$(OBJEXT) \
- lib556-first.$(OBJEXT)
-am__objects_304 = ../../lib/lib556-warnless.$(OBJEXT)
-am_lib556_OBJECTS = lib556-lib556.$(OBJEXT) $(am__objects_303) \
- $(am__objects_304)
+am_lib556_OBJECTS = lib556.$(OBJEXT) $(am__objects_2) $(am__objects_4)
lib556_OBJECTS = $(am_lib556_OBJECTS)
lib556_LDADD = $(LDADD)
lib556_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_305 = ../../lib/lib557-timediff.$(OBJEXT) \
- lib557-first.$(OBJEXT)
-am_lib557_OBJECTS = lib557-lib557.$(OBJEXT) $(am__objects_305)
+am_lib557_OBJECTS = lib557.$(OBJEXT) $(am__objects_2)
lib557_OBJECTS = $(am_lib557_OBJECTS)
lib557_LDADD = $(LDADD)
lib557_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_306 = ../../lib/lib558-timediff.$(OBJEXT) \
- lib558-first.$(OBJEXT)
-am_lib558_OBJECTS = lib558-lib558.$(OBJEXT) $(am__objects_306)
+am_lib558_OBJECTS = lib558.$(OBJEXT) $(am__objects_2)
lib558_OBJECTS = $(am_lib558_OBJECTS)
lib558_LDADD = $(LDADD)
lib558_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_307 = ../../lib/lib559-timediff.$(OBJEXT) \
- lib559-first.$(OBJEXT)
-am_lib559_OBJECTS = lib559-lib559.$(OBJEXT) $(am__objects_307)
+am_lib559_OBJECTS = lib559.$(OBJEXT) $(am__objects_2)
lib559_OBJECTS = $(am_lib559_OBJECTS)
lib559_LDADD = $(LDADD)
lib559_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_308 = ../../lib/lib560-timediff.$(OBJEXT) \
- lib560-first.$(OBJEXT)
-am__objects_309 = lib560-testutil.$(OBJEXT)
-am__objects_310 = ../../lib/lib560-warnless.$(OBJEXT)
-am_lib560_OBJECTS = lib560-lib560.$(OBJEXT) $(am__objects_308) \
- $(am__objects_309) $(am__objects_310)
+am_lib560_OBJECTS = lib560.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4)
lib560_OBJECTS = $(am_lib560_OBJECTS)
lib560_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_311 = ../../lib/lib562-timediff.$(OBJEXT) \
- lib562-first.$(OBJEXT)
-am_lib562_OBJECTS = lib562-lib562.$(OBJEXT) $(am__objects_311)
+am_lib562_OBJECTS = lib562.$(OBJEXT) $(am__objects_2)
lib562_OBJECTS = $(am_lib562_OBJECTS)
lib562_LDADD = $(LDADD)
lib562_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_312 = ../../lib/lib564-timediff.$(OBJEXT) \
- lib564-first.$(OBJEXT)
-am__objects_313 = lib564-testutil.$(OBJEXT)
-am__objects_314 = ../../lib/lib564-warnless.$(OBJEXT)
-am_lib564_OBJECTS = lib564-lib564.$(OBJEXT) $(am__objects_312) \
- $(am__objects_313) $(am__objects_314)
+am_lib564_OBJECTS = lib564.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4)
lib564_OBJECTS = $(am_lib564_OBJECTS)
lib564_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_315 = ../../lib/lib565-timediff.$(OBJEXT) \
- lib565-first.$(OBJEXT)
-am_lib565_OBJECTS = lib565-lib510.$(OBJEXT) $(am__objects_315)
+am__objects_63 = ../../lib/lib565-timediff.$(OBJEXT)
+am__objects_64 = $(am__objects_63) lib565-first.$(OBJEXT)
+am_lib565_OBJECTS = lib565-lib510.$(OBJEXT) $(am__objects_64)
lib565_OBJECTS = $(am_lib565_OBJECTS)
lib565_LDADD = $(LDADD)
lib565_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_316 = ../../lib/lib566-timediff.$(OBJEXT) \
- lib566-first.$(OBJEXT)
-am__objects_317 = ../../lib/lib566-curl_multibyte.$(OBJEXT)
-am_lib566_OBJECTS = lib566-lib566.$(OBJEXT) $(am__objects_316) \
- $(am__objects_317)
+am_lib566_OBJECTS = lib566.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_41)
lib566_OBJECTS = $(am_lib566_OBJECTS)
lib566_LDADD = $(LDADD)
lib566_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_318 = ../../lib/lib567-timediff.$(OBJEXT) \
- lib567-first.$(OBJEXT)
-am_lib567_OBJECTS = lib567-lib567.$(OBJEXT) $(am__objects_318)
+am_lib567_OBJECTS = lib567.$(OBJEXT) $(am__objects_2)
lib567_OBJECTS = $(am_lib567_OBJECTS)
lib567_LDADD = $(LDADD)
lib567_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_319 = ../../lib/lib568-timediff.$(OBJEXT) \
- lib568-first.$(OBJEXT)
-am__objects_320 = ../../lib/lib568-curl_multibyte.$(OBJEXT)
-am_lib568_OBJECTS = lib568-lib568.$(OBJEXT) $(am__objects_319) \
- $(am__objects_320)
+am_lib568_OBJECTS = lib568.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_41)
lib568_OBJECTS = $(am_lib568_OBJECTS)
lib568_LDADD = $(LDADD)
lib568_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_321 = ../../lib/lib569-timediff.$(OBJEXT) \
- lib569-first.$(OBJEXT)
-am__objects_322 = ../../lib/lib569-curl_multibyte.$(OBJEXT)
-am_lib569_OBJECTS = lib569-lib569.$(OBJEXT) $(am__objects_321) \
- $(am__objects_322)
+am_lib569_OBJECTS = lib569.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_41)
lib569_OBJECTS = $(am_lib569_OBJECTS)
lib569_LDADD = $(LDADD)
lib569_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_323 = ../../lib/lib570-timediff.$(OBJEXT) \
- lib570-first.$(OBJEXT)
-am_lib570_OBJECTS = lib570-lib570.$(OBJEXT) $(am__objects_323)
+am_lib570_OBJECTS = lib570.$(OBJEXT) $(am__objects_2)
lib570_OBJECTS = $(am_lib570_OBJECTS)
lib570_LDADD = $(LDADD)
lib570_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_324 = ../../lib/lib571-timediff.$(OBJEXT) \
- lib571-first.$(OBJEXT)
-am__objects_325 = ../../lib/lib571-warnless.$(OBJEXT)
-am__objects_326 = ../../lib/lib571-curl_multibyte.$(OBJEXT)
-am_lib571_OBJECTS = lib571-lib571.$(OBJEXT) $(am__objects_324) \
- $(am__objects_325) $(am__objects_326)
+am_lib571_OBJECTS = lib571.$(OBJEXT) $(am__objects_2) $(am__objects_4) \
+ $(am__objects_41)
lib571_OBJECTS = $(am_lib571_OBJECTS)
lib571_LDADD = $(LDADD)
lib571_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_327 = ../../lib/lib572-timediff.$(OBJEXT) \
- lib572-first.$(OBJEXT)
-am__objects_328 = ../../lib/lib572-curl_multibyte.$(OBJEXT)
-am_lib572_OBJECTS = lib572-lib572.$(OBJEXT) $(am__objects_327) \
- $(am__objects_328)
+am_lib572_OBJECTS = lib572.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_41)
lib572_OBJECTS = $(am_lib572_OBJECTS)
lib572_LDADD = $(LDADD)
lib572_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_329 = ../../lib/lib573-timediff.$(OBJEXT) \
- lib573-first.$(OBJEXT)
-am__objects_330 = lib573-testutil.$(OBJEXT)
-am__objects_331 = ../../lib/lib573-warnless.$(OBJEXT)
-am__objects_332 = lib573-testtrace.$(OBJEXT)
-am_lib573_OBJECTS = lib573-lib573.$(OBJEXT) $(am__objects_329) \
- $(am__objects_330) $(am__objects_331) $(am__objects_332)
+am_lib573_OBJECTS = lib573.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4) $(am__objects_23)
lib573_OBJECTS = $(am_lib573_OBJECTS)
lib573_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_333 = ../../lib/lib574-timediff.$(OBJEXT) \
- lib574-first.$(OBJEXT)
-am_lib574_OBJECTS = lib574-lib574.$(OBJEXT) $(am__objects_333)
+am_lib574_OBJECTS = lib574.$(OBJEXT) $(am__objects_2)
lib574_OBJECTS = $(am_lib574_OBJECTS)
lib574_LDADD = $(LDADD)
lib574_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_334 = ../../lib/lib575-timediff.$(OBJEXT) \
- lib575-first.$(OBJEXT)
-am__objects_335 = lib575-testutil.$(OBJEXT)
-am__objects_336 = ../../lib/lib575-warnless.$(OBJEXT)
-am_lib575_OBJECTS = lib575-lib575.$(OBJEXT) $(am__objects_334) \
- $(am__objects_335) $(am__objects_336)
+am_lib575_OBJECTS = lib575.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4)
lib575_OBJECTS = $(am_lib575_OBJECTS)
lib575_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_337 = ../../lib/lib576-timediff.$(OBJEXT) \
- lib576-first.$(OBJEXT)
-am_lib576_OBJECTS = lib576-lib576.$(OBJEXT) $(am__objects_337)
+am_lib576_OBJECTS = lib576.$(OBJEXT) $(am__objects_2)
lib576_OBJECTS = $(am_lib576_OBJECTS)
lib576_LDADD = $(LDADD)
lib576_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_338 = ../../lib/lib578-timediff.$(OBJEXT) \
- lib578-first.$(OBJEXT)
-am__objects_339 = ../../lib/lib578-curl_multibyte.$(OBJEXT)
-am_lib578_OBJECTS = lib578-lib578.$(OBJEXT) $(am__objects_338) \
- $(am__objects_339)
+am_lib578_OBJECTS = lib578.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_41)
lib578_OBJECTS = $(am_lib578_OBJECTS)
lib578_LDADD = $(LDADD)
lib578_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_340 = ../../lib/lib579-timediff.$(OBJEXT) \
- lib579-first.$(OBJEXT)
-am__objects_341 = ../../lib/lib579-curl_multibyte.$(OBJEXT)
-am_lib579_OBJECTS = lib579-lib579.$(OBJEXT) $(am__objects_340) \
- $(am__objects_341)
+am_lib579_OBJECTS = lib579.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_41)
lib579_OBJECTS = $(am_lib579_OBJECTS)
lib579_LDADD = $(LDADD)
lib579_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_342 = ../../lib/lib582-timediff.$(OBJEXT) \
- lib582-first.$(OBJEXT)
-am__objects_343 = lib582-testutil.$(OBJEXT)
-am__objects_344 = ../../lib/lib582-warnless.$(OBJEXT)
-am__objects_345 = ../../lib/lib582-curl_multibyte.$(OBJEXT)
-am_lib582_OBJECTS = lib582-lib582.$(OBJEXT) $(am__objects_342) \
- $(am__objects_343) $(am__objects_344) $(am__objects_345)
+am_lib582_OBJECTS = lib582.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4) $(am__objects_41)
lib582_OBJECTS = $(am_lib582_OBJECTS)
lib582_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_346 = ../../lib/lib583-timediff.$(OBJEXT) \
- lib583-first.$(OBJEXT)
-am_lib583_OBJECTS = lib583-lib583.$(OBJEXT) $(am__objects_346)
+am_lib583_OBJECTS = lib583.$(OBJEXT) $(am__objects_2)
lib583_OBJECTS = $(am_lib583_OBJECTS)
lib583_LDADD = $(LDADD)
lib583_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_347 = ../../lib/lib584-timediff.$(OBJEXT) \
- lib584-first.$(OBJEXT)
-am_lib584_OBJECTS = lib584-lib589.$(OBJEXT) $(am__objects_347)
+am__objects_65 = ../../lib/lib584-timediff.$(OBJEXT)
+am__objects_66 = $(am__objects_65) lib584-first.$(OBJEXT)
+am_lib584_OBJECTS = lib584-lib589.$(OBJEXT) $(am__objects_66)
lib584_OBJECTS = $(am_lib584_OBJECTS)
lib584_LDADD = $(LDADD)
lib584_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_348 = ../../lib/lib585-timediff.$(OBJEXT) \
- lib585-first.$(OBJEXT)
-am__objects_349 = lib585-testutil.$(OBJEXT)
-am__objects_350 = lib585-testtrace.$(OBJEXT)
-am__objects_351 = ../../lib/lib585-curl_multibyte.$(OBJEXT)
-am_lib585_OBJECTS = lib585-lib500.$(OBJEXT) $(am__objects_348) \
- $(am__objects_349) $(am__objects_350) $(am__objects_351)
+am__objects_67 = ../../lib/lib585-timediff.$(OBJEXT)
+am__objects_68 = $(am__objects_67) lib585-first.$(OBJEXT)
+am__objects_69 = lib585-testutil.$(OBJEXT)
+am__objects_70 = lib585-testtrace.$(OBJEXT)
+am__objects_71 = ../../lib/lib585-curl_multibyte.$(OBJEXT)
+am_lib585_OBJECTS = lib585-lib500.$(OBJEXT) $(am__objects_68) \
+ $(am__objects_69) $(am__objects_70) $(am__objects_71)
lib585_OBJECTS = $(am_lib585_OBJECTS)
lib585_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_352 = ../../lib/lib586-timediff.$(OBJEXT) \
- lib586-first.$(OBJEXT)
-am_lib586_OBJECTS = lib586-lib586.$(OBJEXT) $(am__objects_352)
+am_lib586_OBJECTS = lib586.$(OBJEXT) $(am__objects_2)
lib586_OBJECTS = $(am_lib586_OBJECTS)
lib586_LDADD = $(LDADD)
lib586_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_353 = ../../lib/lib587-timediff.$(OBJEXT) \
- lib587-first.$(OBJEXT)
-am_lib587_OBJECTS = lib587-lib554.$(OBJEXT) $(am__objects_353)
+am__objects_72 = ../../lib/lib587-timediff.$(OBJEXT)
+am__objects_73 = $(am__objects_72) lib587-first.$(OBJEXT)
+am_lib587_OBJECTS = lib587-lib554.$(OBJEXT) $(am__objects_73)
lib587_OBJECTS = $(am_lib587_OBJECTS)
lib587_LDADD = $(LDADD)
lib587_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_354 = ../../lib/lib589-timediff.$(OBJEXT) \
- lib589-first.$(OBJEXT)
-am_lib589_OBJECTS = lib589-lib589.$(OBJEXT) $(am__objects_354)
+am_lib589_OBJECTS = lib589.$(OBJEXT) $(am__objects_2)
lib589_OBJECTS = $(am_lib589_OBJECTS)
lib589_LDADD = $(LDADD)
lib589_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_355 = ../../lib/lib590-timediff.$(OBJEXT) \
- lib590-first.$(OBJEXT)
-am_lib590_OBJECTS = lib590-lib590.$(OBJEXT) $(am__objects_355)
+am_lib590_OBJECTS = lib590.$(OBJEXT) $(am__objects_2)
lib590_OBJECTS = $(am_lib590_OBJECTS)
lib590_LDADD = $(LDADD)
lib590_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_356 = ../../lib/lib591-timediff.$(OBJEXT) \
- lib591-first.$(OBJEXT)
-am__objects_357 = lib591-testutil.$(OBJEXT)
-am__objects_358 = ../../lib/lib591-warnless.$(OBJEXT)
-am__objects_359 = ../../lib/lib591-curl_multibyte.$(OBJEXT)
-am_lib591_OBJECTS = lib591-lib591.$(OBJEXT) $(am__objects_356) \
- $(am__objects_357) $(am__objects_358) $(am__objects_359)
+am_lib591_OBJECTS = lib591.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4) $(am__objects_41)
lib591_OBJECTS = $(am_lib591_OBJECTS)
lib591_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_360 = ../../lib/lib597-timediff.$(OBJEXT) \
- lib597-first.$(OBJEXT)
-am__objects_361 = lib597-testutil.$(OBJEXT)
-am__objects_362 = ../../lib/lib597-warnless.$(OBJEXT)
-am_lib597_OBJECTS = lib597-lib597.$(OBJEXT) $(am__objects_360) \
- $(am__objects_361) $(am__objects_362)
+am_lib597_OBJECTS = lib597.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4)
lib597_OBJECTS = $(am_lib597_OBJECTS)
lib597_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_363 = ../../lib/lib598-timediff.$(OBJEXT) \
- lib598-first.$(OBJEXT)
-am_lib598_OBJECTS = lib598-lib598.$(OBJEXT) $(am__objects_363)
+am_lib598_OBJECTS = lib598.$(OBJEXT) $(am__objects_2)
lib598_OBJECTS = $(am_lib598_OBJECTS)
lib598_LDADD = $(LDADD)
lib598_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_364 = ../../lib/lib599-timediff.$(OBJEXT) \
- lib599-first.$(OBJEXT)
-am__objects_365 = ../../lib/lib599-curl_multibyte.$(OBJEXT)
-am_lib599_OBJECTS = lib599-lib599.$(OBJEXT) $(am__objects_364) \
- $(am__objects_365)
+am_lib599_OBJECTS = lib599.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_41)
lib599_OBJECTS = $(am_lib599_OBJECTS)
lib599_LDADD = $(LDADD)
lib599_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_366 = ../../lib/lib643-timediff.$(OBJEXT) \
- lib643-first.$(OBJEXT)
-am_lib643_OBJECTS = lib643-lib643.$(OBJEXT) $(am__objects_366)
+am_lib643_OBJECTS = lib643.$(OBJEXT) $(am__objects_2)
lib643_OBJECTS = $(am_lib643_OBJECTS)
lib643_LDADD = $(LDADD)
lib643_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_367 = ../../lib/lib645-timediff.$(OBJEXT) \
- lib645-first.$(OBJEXT)
-am_lib645_OBJECTS = lib645-lib643.$(OBJEXT) $(am__objects_367)
+am__objects_74 = ../../lib/lib645-timediff.$(OBJEXT)
+am__objects_75 = $(am__objects_74) lib645-first.$(OBJEXT)
+am_lib645_OBJECTS = lib645-lib643.$(OBJEXT) $(am__objects_75)
lib645_OBJECTS = $(am_lib645_OBJECTS)
lib645_LDADD = $(LDADD)
lib645_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_368 = ../../lib/lib650-timediff.$(OBJEXT) \
- lib650-first.$(OBJEXT)
-am_lib650_OBJECTS = lib650-lib650.$(OBJEXT) $(am__objects_368)
+am_lib650_OBJECTS = lib650.$(OBJEXT) $(am__objects_2)
lib650_OBJECTS = $(am_lib650_OBJECTS)
lib650_LDADD = $(LDADD)
lib650_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_369 = ../../lib/lib651-timediff.$(OBJEXT) \
- lib651-first.$(OBJEXT)
-am_lib651_OBJECTS = lib651-lib651.$(OBJEXT) $(am__objects_369)
+am_lib651_OBJECTS = lib651.$(OBJEXT) $(am__objects_2)
lib651_OBJECTS = $(am_lib651_OBJECTS)
lib651_LDADD = $(LDADD)
lib651_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_370 = ../../lib/lib652-timediff.$(OBJEXT) \
- lib652-first.$(OBJEXT)
-am_lib652_OBJECTS = lib652-lib652.$(OBJEXT) $(am__objects_370)
+am_lib652_OBJECTS = lib652.$(OBJEXT) $(am__objects_2)
lib652_OBJECTS = $(am_lib652_OBJECTS)
lib652_LDADD = $(LDADD)
lib652_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_371 = ../../lib/lib653-timediff.$(OBJEXT) \
- lib653-first.$(OBJEXT)
-am_lib653_OBJECTS = lib653-lib653.$(OBJEXT) $(am__objects_371)
+am_lib653_OBJECTS = lib653.$(OBJEXT) $(am__objects_2)
lib653_OBJECTS = $(am_lib653_OBJECTS)
lib653_LDADD = $(LDADD)
lib653_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_372 = ../../lib/lib654-timediff.$(OBJEXT) \
- lib654-first.$(OBJEXT)
-am_lib654_OBJECTS = lib654-lib654.$(OBJEXT) $(am__objects_372)
+am_lib654_OBJECTS = lib654.$(OBJEXT) $(am__objects_2)
lib654_OBJECTS = $(am_lib654_OBJECTS)
lib654_LDADD = $(LDADD)
lib654_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_373 = ../../lib/lib655-timediff.$(OBJEXT) \
- lib655-first.$(OBJEXT)
-am_lib655_OBJECTS = lib655-lib655.$(OBJEXT) $(am__objects_373)
+am_lib655_OBJECTS = lib655.$(OBJEXT) $(am__objects_2)
lib655_OBJECTS = $(am_lib655_OBJECTS)
lib655_LDADD = $(LDADD)
lib655_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_374 = ../../lib/lib658-timediff.$(OBJEXT) \
- lib658-first.$(OBJEXT)
-am__objects_375 = lib658-testutil.$(OBJEXT)
-am__objects_376 = ../../lib/lib658-warnless.$(OBJEXT)
-am_lib658_OBJECTS = lib658-lib658.$(OBJEXT) $(am__objects_374) \
- $(am__objects_375) $(am__objects_376)
+am_lib658_OBJECTS = lib658.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4)
lib658_OBJECTS = $(am_lib658_OBJECTS)
lib658_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_377 = ../../lib/lib659-timediff.$(OBJEXT) \
- lib659-first.$(OBJEXT)
-am__objects_378 = lib659-testutil.$(OBJEXT)
-am__objects_379 = ../../lib/lib659-warnless.$(OBJEXT)
-am_lib659_OBJECTS = lib659-lib659.$(OBJEXT) $(am__objects_377) \
- $(am__objects_378) $(am__objects_379)
+am_lib659_OBJECTS = lib659.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4)
lib659_OBJECTS = $(am_lib659_OBJECTS)
lib659_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_380 = ../../lib/lib661-timediff.$(OBJEXT) \
- lib661-first.$(OBJEXT)
-am_lib661_OBJECTS = lib661-lib661.$(OBJEXT) $(am__objects_380)
+am_lib661_OBJECTS = lib661.$(OBJEXT) $(am__objects_2)
lib661_OBJECTS = $(am_lib661_OBJECTS)
lib661_LDADD = $(LDADD)
lib661_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_381 = ../../lib/lib666-timediff.$(OBJEXT) \
- lib666-first.$(OBJEXT)
-am_lib666_OBJECTS = lib666-lib666.$(OBJEXT) $(am__objects_381)
+am_lib666_OBJECTS = lib666.$(OBJEXT) $(am__objects_2)
lib666_OBJECTS = $(am_lib666_OBJECTS)
lib666_LDADD = $(LDADD)
lib666_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_382 = ../../lib/lib667-timediff.$(OBJEXT) \
- lib667-first.$(OBJEXT)
-am__objects_383 = lib667-testutil.$(OBJEXT)
-am__objects_384 = ../../lib/lib667-warnless.$(OBJEXT)
-am_lib667_OBJECTS = lib667-lib667.$(OBJEXT) $(am__objects_382) \
- $(am__objects_383) $(am__objects_384)
+am_lib667_OBJECTS = lib667.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4)
lib667_OBJECTS = $(am_lib667_OBJECTS)
lib667_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_385 = ../../lib/lib668-timediff.$(OBJEXT) \
- lib668-first.$(OBJEXT)
-am__objects_386 = lib668-testutil.$(OBJEXT)
-am__objects_387 = ../../lib/lib668-warnless.$(OBJEXT)
-am_lib668_OBJECTS = lib668-lib668.$(OBJEXT) $(am__objects_385) \
- $(am__objects_386) $(am__objects_387)
+am_lib668_OBJECTS = lib668.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4)
lib668_OBJECTS = $(am_lib668_OBJECTS)
lib668_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_388 = ../../lib/lib670-timediff.$(OBJEXT) \
- lib670-first.$(OBJEXT)
-am__objects_389 = lib670-testutil.$(OBJEXT)
-am__objects_390 = ../../lib/lib670-warnless.$(OBJEXT)
-am_lib670_OBJECTS = lib670-lib670.$(OBJEXT) $(am__objects_388) \
- $(am__objects_389) $(am__objects_390)
+am__objects_76 = ../../lib/lib670-timediff.$(OBJEXT)
+am__objects_77 = $(am__objects_76) lib670-first.$(OBJEXT)
+am__objects_78 = lib670-testutil.$(OBJEXT)
+am__objects_79 = ../../lib/lib670-warnless.$(OBJEXT)
+am_lib670_OBJECTS = lib670-lib670.$(OBJEXT) $(am__objects_77) \
+ $(am__objects_78) $(am__objects_79)
lib670_OBJECTS = $(am_lib670_OBJECTS)
lib670_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_391 = ../../lib/lib671-timediff.$(OBJEXT) \
- lib671-first.$(OBJEXT)
-am__objects_392 = lib671-testutil.$(OBJEXT)
-am__objects_393 = ../../lib/lib671-warnless.$(OBJEXT)
-am_lib671_OBJECTS = lib671-lib670.$(OBJEXT) $(am__objects_391) \
- $(am__objects_392) $(am__objects_393)
+am__objects_80 = ../../lib/lib671-timediff.$(OBJEXT)
+am__objects_81 = $(am__objects_80) lib671-first.$(OBJEXT)
+am__objects_82 = lib671-testutil.$(OBJEXT)
+am__objects_83 = ../../lib/lib671-warnless.$(OBJEXT)
+am_lib671_OBJECTS = lib671-lib670.$(OBJEXT) $(am__objects_81) \
+ $(am__objects_82) $(am__objects_83)
lib671_OBJECTS = $(am_lib671_OBJECTS)
lib671_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_394 = ../../lib/lib672-timediff.$(OBJEXT) \
- lib672-first.$(OBJEXT)
-am__objects_395 = lib672-testutil.$(OBJEXT)
-am__objects_396 = ../../lib/lib672-warnless.$(OBJEXT)
-am_lib672_OBJECTS = lib672-lib670.$(OBJEXT) $(am__objects_394) \
- $(am__objects_395) $(am__objects_396)
+am__objects_84 = ../../lib/lib672-timediff.$(OBJEXT)
+am__objects_85 = $(am__objects_84) lib672-first.$(OBJEXT)
+am__objects_86 = lib672-testutil.$(OBJEXT)
+am__objects_87 = ../../lib/lib672-warnless.$(OBJEXT)
+am_lib672_OBJECTS = lib672-lib670.$(OBJEXT) $(am__objects_85) \
+ $(am__objects_86) $(am__objects_87)
lib672_OBJECTS = $(am_lib672_OBJECTS)
lib672_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_397 = ../../lib/lib673-timediff.$(OBJEXT) \
- lib673-first.$(OBJEXT)
-am__objects_398 = lib673-testutil.$(OBJEXT)
-am__objects_399 = ../../lib/lib673-warnless.$(OBJEXT)
-am_lib673_OBJECTS = lib673-lib670.$(OBJEXT) $(am__objects_397) \
- $(am__objects_398) $(am__objects_399)
+am_lib673_OBJECTS = lib670.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4)
lib673_OBJECTS = $(am_lib673_OBJECTS)
lib673_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_400 = ../../lib/lib674-timediff.$(OBJEXT) \
- lib674-first.$(OBJEXT)
-am__objects_401 = lib674-testutil.$(OBJEXT)
-am__objects_402 = ../../lib/lib674-warnless.$(OBJEXT)
-am_lib674_OBJECTS = lib674-lib674.$(OBJEXT) $(am__objects_400) \
- $(am__objects_401) $(am__objects_402)
+am_lib674_OBJECTS = lib674.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4)
lib674_OBJECTS = $(am_lib674_OBJECTS)
lib674_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_403 = ../../lib/lib676-timediff.$(OBJEXT) \
- lib676-first.$(OBJEXT)
-am__objects_404 = lib676-testutil.$(OBJEXT)
-am__objects_405 = ../../lib/lib676-warnless.$(OBJEXT)
-am_lib676_OBJECTS = lib676-lib676.$(OBJEXT) $(am__objects_403) \
- $(am__objects_404) $(am__objects_405)
+am_lib676_OBJECTS = lib676.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4)
lib676_OBJECTS = $(am_lib676_OBJECTS)
lib676_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_406 = ../../lib/lib677-timediff.$(OBJEXT) \
- lib677-first.$(OBJEXT)
-am__objects_407 = lib677-testutil.$(OBJEXT)
-am__objects_408 = ../../lib/lib677-warnless.$(OBJEXT)
-am__objects_409 = ../../lib/lib677-curl_multibyte.$(OBJEXT)
-am_lib677_OBJECTS = lib677-lib677.$(OBJEXT) $(am__objects_406) \
- $(am__objects_407) $(am__objects_408) $(am__objects_409)
+am_lib677_OBJECTS = lib677.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4) $(am__objects_41)
lib677_OBJECTS = $(am_lib677_OBJECTS)
lib677_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_410 = ../../lib/lib678-timediff.$(OBJEXT) \
- lib678-first.$(OBJEXT)
-am__objects_411 = lib678-testutil.$(OBJEXT)
-am__objects_412 = ../../lib/lib678-warnless.$(OBJEXT)
-am__objects_413 = ../../lib/lib678-curl_multibyte.$(OBJEXT)
-am_lib678_OBJECTS = lib678-lib678.$(OBJEXT) $(am__objects_410) \
- $(am__objects_411) $(am__objects_412) $(am__objects_413)
+am_lib678_OBJECTS = lib678.$(OBJEXT) $(am__objects_2) $(am__objects_3) \
+ $(am__objects_4) $(am__objects_41)
lib678_OBJECTS = $(am_lib678_OBJECTS)
lib678_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_414 = ../../lib/libauthretry-timediff.$(OBJEXT) \
- libauthretry-first.$(OBJEXT)
-am_libauthretry_OBJECTS = libauthretry-libauthretry.$(OBJEXT) \
- $(am__objects_414)
+am_libauthretry_OBJECTS = libauthretry.$(OBJEXT) $(am__objects_2)
libauthretry_OBJECTS = $(am_libauthretry_OBJECTS)
libauthretry_LDADD = $(LDADD)
libauthretry_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_415 = ../../lib/libntlmconnect-timediff.$(OBJEXT) \
- libntlmconnect-first.$(OBJEXT)
-am__objects_416 = libntlmconnect-testutil.$(OBJEXT)
-am__objects_417 = ../../lib/libntlmconnect-warnless.$(OBJEXT)
-am_libntlmconnect_OBJECTS = libntlmconnect-libntlmconnect.$(OBJEXT) \
- $(am__objects_415) $(am__objects_416) $(am__objects_417)
+am_libntlmconnect_OBJECTS = libntlmconnect.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
libntlmconnect_OBJECTS = $(am_libntlmconnect_OBJECTS)
libntlmconnect_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_418 = ../../lib/libprereq-timediff.$(OBJEXT) \
- libprereq-first.$(OBJEXT)
-am__objects_419 = libprereq-testutil.$(OBJEXT)
-am__objects_420 = ../../lib/libprereq-warnless.$(OBJEXT)
-am_libprereq_OBJECTS = libprereq-libprereq.$(OBJEXT) \
- $(am__objects_418) $(am__objects_419) $(am__objects_420)
+am_libprereq_OBJECTS = libprereq.$(OBJEXT) $(am__objects_2) \
+ $(am__objects_3) $(am__objects_4)
libprereq_OBJECTS = $(am_libprereq_OBJECTS)
libprereq_DEPENDENCIES = $(am__DEPENDENCIES_1)
AM_V_P = $(am__v_P_@AM_V@)
@@ -1670,15 +1248,8 @@ am__v_at_1 =
DEFAULT_INCLUDES =
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__maybe_remake_depfiles = depfiles
-am__depfiles_remade = ../../lib/$(DEPDIR)/chkdecimalpoint-dynbuf.Po \
- ../../lib/$(DEPDIR)/chkdecimalpoint-mprintf.Po \
- ../../lib/$(DEPDIR)/chkdecimalpoint-strdup.Po \
- ../../lib/$(DEPDIR)/chkhostname-curl_gethostname.Po \
- ../../lib/$(DEPDIR)/lib1156-timediff.Po \
- ../../lib/$(DEPDIR)/lib1156-warnless.Po \
- ../../lib/$(DEPDIR)/lib1500-timediff.Po \
- ../../lib/$(DEPDIR)/lib1501-timediff.Po \
- ../../lib/$(DEPDIR)/lib1501-warnless.Po \
+am__depfiles_remade = ../../lib/$(DEPDIR)/curl_gethostname.Po \
+ ../../lib/$(DEPDIR)/curl_multibyte.Po \
../../lib/$(DEPDIR)/lib1502-timediff.Po \
../../lib/$(DEPDIR)/lib1502-warnless.Po \
../../lib/$(DEPDIR)/lib1503-timediff.Po \
@@ -1687,178 +1258,16 @@ am__depfiles_remade = ../../lib/$(DEPDIR)/chkdecimalpoint-dynbuf.Po \
../../lib/$(DEPDIR)/lib1504-warnless.Po \
../../lib/$(DEPDIR)/lib1505-timediff.Po \
../../lib/$(DEPDIR)/lib1505-warnless.Po \
- ../../lib/$(DEPDIR)/lib1506-timediff.Po \
- ../../lib/$(DEPDIR)/lib1506-warnless.Po \
- ../../lib/$(DEPDIR)/lib1507-timediff.Po \
- ../../lib/$(DEPDIR)/lib1507-warnless.Po \
- ../../lib/$(DEPDIR)/lib1508-timediff.Po \
- ../../lib/$(DEPDIR)/lib1508-warnless.Po \
- ../../lib/$(DEPDIR)/lib1509-timediff.Po \
- ../../lib/$(DEPDIR)/lib1509-warnless.Po \
- ../../lib/$(DEPDIR)/lib1510-timediff.Po \
- ../../lib/$(DEPDIR)/lib1510-warnless.Po \
- ../../lib/$(DEPDIR)/lib1511-timediff.Po \
- ../../lib/$(DEPDIR)/lib1511-warnless.Po \
- ../../lib/$(DEPDIR)/lib1512-timediff.Po \
- ../../lib/$(DEPDIR)/lib1512-warnless.Po \
- ../../lib/$(DEPDIR)/lib1513-timediff.Po \
- ../../lib/$(DEPDIR)/lib1513-warnless.Po \
- ../../lib/$(DEPDIR)/lib1514-timediff.Po \
- ../../lib/$(DEPDIR)/lib1514-warnless.Po \
- ../../lib/$(DEPDIR)/lib1515-timediff.Po \
- ../../lib/$(DEPDIR)/lib1515-warnless.Po \
- ../../lib/$(DEPDIR)/lib1517-timediff.Po \
- ../../lib/$(DEPDIR)/lib1518-timediff.Po \
- ../../lib/$(DEPDIR)/lib1520-timediff.Po \
../../lib/$(DEPDIR)/lib1521-timediff.Po \
- ../../lib/$(DEPDIR)/lib1522-timediff.Po \
- ../../lib/$(DEPDIR)/lib1523-timediff.Po \
- ../../lib/$(DEPDIR)/lib1525-timediff.Po \
- ../../lib/$(DEPDIR)/lib1525-warnless.Po \
- ../../lib/$(DEPDIR)/lib1526-timediff.Po \
- ../../lib/$(DEPDIR)/lib1526-warnless.Po \
- ../../lib/$(DEPDIR)/lib1527-timediff.Po \
- ../../lib/$(DEPDIR)/lib1527-warnless.Po \
- ../../lib/$(DEPDIR)/lib1528-timediff.Po \
- ../../lib/$(DEPDIR)/lib1528-warnless.Po \
- ../../lib/$(DEPDIR)/lib1529-timediff.Po \
- ../../lib/$(DEPDIR)/lib1529-warnless.Po \
- ../../lib/$(DEPDIR)/lib1530-timediff.Po \
- ../../lib/$(DEPDIR)/lib1530-warnless.Po \
- ../../lib/$(DEPDIR)/lib1531-timediff.Po \
- ../../lib/$(DEPDIR)/lib1531-warnless.Po \
- ../../lib/$(DEPDIR)/lib1532-timediff.Po \
- ../../lib/$(DEPDIR)/lib1532-warnless.Po \
- ../../lib/$(DEPDIR)/lib1533-timediff.Po \
- ../../lib/$(DEPDIR)/lib1533-warnless.Po \
- ../../lib/$(DEPDIR)/lib1534-timediff.Po \
- ../../lib/$(DEPDIR)/lib1534-warnless.Po \
- ../../lib/$(DEPDIR)/lib1535-timediff.Po \
- ../../lib/$(DEPDIR)/lib1535-warnless.Po \
- ../../lib/$(DEPDIR)/lib1536-timediff.Po \
- ../../lib/$(DEPDIR)/lib1536-warnless.Po \
- ../../lib/$(DEPDIR)/lib1537-timediff.Po \
- ../../lib/$(DEPDIR)/lib1537-warnless.Po \
- ../../lib/$(DEPDIR)/lib1538-timediff.Po \
- ../../lib/$(DEPDIR)/lib1538-warnless.Po \
../../lib/$(DEPDIR)/lib1539-timediff.Po \
../../lib/$(DEPDIR)/lib1539-warnless.Po \
- ../../lib/$(DEPDIR)/lib1540-timediff.Po \
- ../../lib/$(DEPDIR)/lib1540-warnless.Po \
- ../../lib/$(DEPDIR)/lib1542-timediff.Po \
- ../../lib/$(DEPDIR)/lib1542-warnless.Po \
../../lib/$(DEPDIR)/lib1543-timediff.Po \
- ../../lib/$(DEPDIR)/lib1550-timediff.Po \
- ../../lib/$(DEPDIR)/lib1551-timediff.Po \
- ../../lib/$(DEPDIR)/lib1552-timediff.Po \
- ../../lib/$(DEPDIR)/lib1553-timediff.Po \
- ../../lib/$(DEPDIR)/lib1554-timediff.Po \
- ../../lib/$(DEPDIR)/lib1555-timediff.Po \
- ../../lib/$(DEPDIR)/lib1555-warnless.Po \
- ../../lib/$(DEPDIR)/lib1556-timediff.Po \
- ../../lib/$(DEPDIR)/lib1556-warnless.Po \
- ../../lib/$(DEPDIR)/lib1557-timediff.Po \
- ../../lib/$(DEPDIR)/lib1557-warnless.Po \
- ../../lib/$(DEPDIR)/lib1564-timediff.Po \
- ../../lib/$(DEPDIR)/lib1564-warnless.Po \
- ../../lib/$(DEPDIR)/lib1565-timediff.Po \
- ../../lib/$(DEPDIR)/lib1565-warnless.Po \
- ../../lib/$(DEPDIR)/lib1567-timediff.Po \
- ../../lib/$(DEPDIR)/lib1568-timediff.Po \
- ../../lib/$(DEPDIR)/lib1569-timediff.Po \
- ../../lib/$(DEPDIR)/lib1591-timediff.Po \
- ../../lib/$(DEPDIR)/lib1591-warnless.Po \
- ../../lib/$(DEPDIR)/lib1592-timediff.Po \
- ../../lib/$(DEPDIR)/lib1592-warnless.Po \
+ ../../lib/$(DEPDIR)/lib1545-timediff.Po \
../../lib/$(DEPDIR)/lib1596-timediff.Po \
../../lib/$(DEPDIR)/lib1596-warnless.Po \
- ../../lib/$(DEPDIR)/lib1905-timediff.Po \
- ../../lib/$(DEPDIR)/lib1905-warnless.Po \
- ../../lib/$(DEPDIR)/lib1906-timediff.Po \
- ../../lib/$(DEPDIR)/lib1906-warnless.Po \
- ../../lib/$(DEPDIR)/lib1907-timediff.Po \
- ../../lib/$(DEPDIR)/lib1907-warnless.Po \
- ../../lib/$(DEPDIR)/lib1908-timediff.Po \
- ../../lib/$(DEPDIR)/lib1908-warnless.Po \
- ../../lib/$(DEPDIR)/lib1910-timediff.Po \
- ../../lib/$(DEPDIR)/lib1910-warnless.Po \
- ../../lib/$(DEPDIR)/lib1911-timediff.Po \
- ../../lib/$(DEPDIR)/lib1911-warnless.Po \
- ../../lib/$(DEPDIR)/lib1912-timediff.Po \
- ../../lib/$(DEPDIR)/lib1912-warnless.Po \
- ../../lib/$(DEPDIR)/lib1913-timediff.Po \
- ../../lib/$(DEPDIR)/lib1913-warnless.Po \
- ../../lib/$(DEPDIR)/lib1915-timediff.Po \
- ../../lib/$(DEPDIR)/lib1915-warnless.Po \
- ../../lib/$(DEPDIR)/lib1916-timediff.Po \
- ../../lib/$(DEPDIR)/lib1916-warnless.Po \
../../lib/$(DEPDIR)/lib1917-timediff.Po \
../../lib/$(DEPDIR)/lib1917-warnless.Po \
- ../../lib/$(DEPDIR)/lib1918-timediff.Po \
- ../../lib/$(DEPDIR)/lib1918-warnless.Po \
- ../../lib/$(DEPDIR)/lib1919-timediff.Po \
- ../../lib/$(DEPDIR)/lib1919-warnless.Po \
- ../../lib/$(DEPDIR)/lib1933-timediff.Po \
- ../../lib/$(DEPDIR)/lib1933-warnless.Po \
- ../../lib/$(DEPDIR)/lib1934-timediff.Po \
- ../../lib/$(DEPDIR)/lib1934-warnless.Po \
- ../../lib/$(DEPDIR)/lib1935-timediff.Po \
- ../../lib/$(DEPDIR)/lib1935-warnless.Po \
- ../../lib/$(DEPDIR)/lib1936-timediff.Po \
- ../../lib/$(DEPDIR)/lib1936-warnless.Po \
- ../../lib/$(DEPDIR)/lib1937-timediff.Po \
- ../../lib/$(DEPDIR)/lib1938-timediff.Po \
- ../../lib/$(DEPDIR)/lib1939-timediff.Po \
- ../../lib/$(DEPDIR)/lib1940-timediff.Po \
- ../../lib/$(DEPDIR)/lib1945-timediff.Po \
../../lib/$(DEPDIR)/lib1946-timediff.Po \
- ../../lib/$(DEPDIR)/lib1947-timediff.Po \
- ../../lib/$(DEPDIR)/lib1948-timediff.Po \
- ../../lib/$(DEPDIR)/lib1955-timediff.Po \
- ../../lib/$(DEPDIR)/lib1955-warnless.Po \
- ../../lib/$(DEPDIR)/lib3010-timediff.Po \
- ../../lib/$(DEPDIR)/lib3010-warnless.Po \
- ../../lib/$(DEPDIR)/lib3025-timediff.Po \
- ../../lib/$(DEPDIR)/lib3025-warnless.Po \
- ../../lib/$(DEPDIR)/lib3026-timediff.Po \
- ../../lib/$(DEPDIR)/lib3026-warnless.Po \
- ../../lib/$(DEPDIR)/lib3027-timediff.Po \
- ../../lib/$(DEPDIR)/lib3027-warnless.Po \
- ../../lib/$(DEPDIR)/lib500-curl_multibyte.Po \
- ../../lib/$(DEPDIR)/lib500-timediff.Po \
- ../../lib/$(DEPDIR)/lib501-timediff.Po \
- ../../lib/$(DEPDIR)/lib502-timediff.Po \
- ../../lib/$(DEPDIR)/lib502-warnless.Po \
- ../../lib/$(DEPDIR)/lib503-timediff.Po \
- ../../lib/$(DEPDIR)/lib503-warnless.Po \
- ../../lib/$(DEPDIR)/lib504-timediff.Po \
- ../../lib/$(DEPDIR)/lib504-warnless.Po \
- ../../lib/$(DEPDIR)/lib505-curl_multibyte.Po \
- ../../lib/$(DEPDIR)/lib505-timediff.Po \
- ../../lib/$(DEPDIR)/lib506-timediff.Po \
- ../../lib/$(DEPDIR)/lib507-timediff.Po \
- ../../lib/$(DEPDIR)/lib507-warnless.Po \
- ../../lib/$(DEPDIR)/lib508-timediff.Po \
- ../../lib/$(DEPDIR)/lib509-timediff.Po \
- ../../lib/$(DEPDIR)/lib510-timediff.Po \
- ../../lib/$(DEPDIR)/lib511-timediff.Po \
- ../../lib/$(DEPDIR)/lib512-timediff.Po \
- ../../lib/$(DEPDIR)/lib513-timediff.Po \
- ../../lib/$(DEPDIR)/lib514-timediff.Po \
- ../../lib/$(DEPDIR)/lib515-timediff.Po \
- ../../lib/$(DEPDIR)/lib516-timediff.Po \
- ../../lib/$(DEPDIR)/lib517-timediff.Po \
- ../../lib/$(DEPDIR)/lib518-curl_multibyte.Po \
- ../../lib/$(DEPDIR)/lib518-timediff.Po \
- ../../lib/$(DEPDIR)/lib518-warnless.Po \
- ../../lib/$(DEPDIR)/lib519-timediff.Po \
- ../../lib/$(DEPDIR)/lib520-timediff.Po \
- ../../lib/$(DEPDIR)/lib521-timediff.Po \
- ../../lib/$(DEPDIR)/lib523-timediff.Po \
- ../../lib/$(DEPDIR)/lib524-timediff.Po \
- ../../lib/$(DEPDIR)/lib525-curl_multibyte.Po \
- ../../lib/$(DEPDIR)/lib525-timediff.Po \
- ../../lib/$(DEPDIR)/lib525-warnless.Po \
../../lib/$(DEPDIR)/lib526-timediff.Po \
../../lib/$(DEPDIR)/lib526-warnless.Po \
../../lib/$(DEPDIR)/lib527-timediff.Po \
@@ -1866,387 +1275,161 @@ am__depfiles_remade = ../../lib/$(DEPDIR)/chkdecimalpoint-dynbuf.Po \
../../lib/$(DEPDIR)/lib529-curl_multibyte.Po \
../../lib/$(DEPDIR)/lib529-timediff.Po \
../../lib/$(DEPDIR)/lib529-warnless.Po \
- ../../lib/$(DEPDIR)/lib530-timediff.Po \
- ../../lib/$(DEPDIR)/lib530-warnless.Po \
../../lib/$(DEPDIR)/lib532-timediff.Po \
../../lib/$(DEPDIR)/lib532-warnless.Po \
- ../../lib/$(DEPDIR)/lib533-timediff.Po \
- ../../lib/$(DEPDIR)/lib533-warnless.Po \
- ../../lib/$(DEPDIR)/lib537-curl_multibyte.Po \
- ../../lib/$(DEPDIR)/lib537-timediff.Po \
- ../../lib/$(DEPDIR)/lib537-warnless.Po \
- ../../lib/$(DEPDIR)/lib539-timediff.Po \
- ../../lib/$(DEPDIR)/lib540-timediff.Po \
- ../../lib/$(DEPDIR)/lib540-warnless.Po \
- ../../lib/$(DEPDIR)/lib541-curl_multibyte.Po \
- ../../lib/$(DEPDIR)/lib541-timediff.Po \
- ../../lib/$(DEPDIR)/lib542-timediff.Po \
- ../../lib/$(DEPDIR)/lib543-timediff.Po \
- ../../lib/$(DEPDIR)/lib544-timediff.Po \
../../lib/$(DEPDIR)/lib545-timediff.Po \
- ../../lib/$(DEPDIR)/lib547-timediff.Po \
../../lib/$(DEPDIR)/lib548-timediff.Po \
- ../../lib/$(DEPDIR)/lib549-timediff.Po \
- ../../lib/$(DEPDIR)/lib552-timediff.Po \
- ../../lib/$(DEPDIR)/lib552-warnless.Po \
- ../../lib/$(DEPDIR)/lib553-timediff.Po \
- ../../lib/$(DEPDIR)/lib554-timediff.Po \
- ../../lib/$(DEPDIR)/lib555-timediff.Po \
- ../../lib/$(DEPDIR)/lib555-warnless.Po \
- ../../lib/$(DEPDIR)/lib556-timediff.Po \
- ../../lib/$(DEPDIR)/lib556-warnless.Po \
- ../../lib/$(DEPDIR)/lib557-timediff.Po \
- ../../lib/$(DEPDIR)/lib558-timediff.Po \
- ../../lib/$(DEPDIR)/lib559-timediff.Po \
- ../../lib/$(DEPDIR)/lib560-timediff.Po \
- ../../lib/$(DEPDIR)/lib560-warnless.Po \
- ../../lib/$(DEPDIR)/lib562-timediff.Po \
- ../../lib/$(DEPDIR)/lib564-timediff.Po \
- ../../lib/$(DEPDIR)/lib564-warnless.Po \
../../lib/$(DEPDIR)/lib565-timediff.Po \
- ../../lib/$(DEPDIR)/lib566-curl_multibyte.Po \
- ../../lib/$(DEPDIR)/lib566-timediff.Po \
- ../../lib/$(DEPDIR)/lib567-timediff.Po \
- ../../lib/$(DEPDIR)/lib568-curl_multibyte.Po \
- ../../lib/$(DEPDIR)/lib568-timediff.Po \
- ../../lib/$(DEPDIR)/lib569-curl_multibyte.Po \
- ../../lib/$(DEPDIR)/lib569-timediff.Po \
- ../../lib/$(DEPDIR)/lib570-timediff.Po \
- ../../lib/$(DEPDIR)/lib571-curl_multibyte.Po \
- ../../lib/$(DEPDIR)/lib571-timediff.Po \
- ../../lib/$(DEPDIR)/lib571-warnless.Po \
- ../../lib/$(DEPDIR)/lib572-curl_multibyte.Po \
- ../../lib/$(DEPDIR)/lib572-timediff.Po \
- ../../lib/$(DEPDIR)/lib573-timediff.Po \
- ../../lib/$(DEPDIR)/lib573-warnless.Po \
- ../../lib/$(DEPDIR)/lib574-timediff.Po \
- ../../lib/$(DEPDIR)/lib575-timediff.Po \
- ../../lib/$(DEPDIR)/lib575-warnless.Po \
- ../../lib/$(DEPDIR)/lib576-timediff.Po \
- ../../lib/$(DEPDIR)/lib578-curl_multibyte.Po \
- ../../lib/$(DEPDIR)/lib578-timediff.Po \
- ../../lib/$(DEPDIR)/lib579-curl_multibyte.Po \
- ../../lib/$(DEPDIR)/lib579-timediff.Po \
- ../../lib/$(DEPDIR)/lib582-curl_multibyte.Po \
- ../../lib/$(DEPDIR)/lib582-timediff.Po \
- ../../lib/$(DEPDIR)/lib582-warnless.Po \
- ../../lib/$(DEPDIR)/lib583-timediff.Po \
../../lib/$(DEPDIR)/lib584-timediff.Po \
../../lib/$(DEPDIR)/lib585-curl_multibyte.Po \
../../lib/$(DEPDIR)/lib585-timediff.Po \
- ../../lib/$(DEPDIR)/lib586-timediff.Po \
../../lib/$(DEPDIR)/lib587-timediff.Po \
- ../../lib/$(DEPDIR)/lib589-timediff.Po \
- ../../lib/$(DEPDIR)/lib590-timediff.Po \
- ../../lib/$(DEPDIR)/lib591-curl_multibyte.Po \
- ../../lib/$(DEPDIR)/lib591-timediff.Po \
- ../../lib/$(DEPDIR)/lib591-warnless.Po \
- ../../lib/$(DEPDIR)/lib597-timediff.Po \
- ../../lib/$(DEPDIR)/lib597-warnless.Po \
- ../../lib/$(DEPDIR)/lib598-timediff.Po \
- ../../lib/$(DEPDIR)/lib599-curl_multibyte.Po \
- ../../lib/$(DEPDIR)/lib599-timediff.Po \
- ../../lib/$(DEPDIR)/lib643-timediff.Po \
../../lib/$(DEPDIR)/lib645-timediff.Po \
- ../../lib/$(DEPDIR)/lib650-timediff.Po \
- ../../lib/$(DEPDIR)/lib651-timediff.Po \
- ../../lib/$(DEPDIR)/lib652-timediff.Po \
- ../../lib/$(DEPDIR)/lib653-timediff.Po \
- ../../lib/$(DEPDIR)/lib654-timediff.Po \
- ../../lib/$(DEPDIR)/lib655-timediff.Po \
- ../../lib/$(DEPDIR)/lib658-timediff.Po \
- ../../lib/$(DEPDIR)/lib658-warnless.Po \
- ../../lib/$(DEPDIR)/lib659-timediff.Po \
- ../../lib/$(DEPDIR)/lib659-warnless.Po \
- ../../lib/$(DEPDIR)/lib661-timediff.Po \
- ../../lib/$(DEPDIR)/lib666-timediff.Po \
- ../../lib/$(DEPDIR)/lib667-timediff.Po \
- ../../lib/$(DEPDIR)/lib667-warnless.Po \
- ../../lib/$(DEPDIR)/lib668-timediff.Po \
- ../../lib/$(DEPDIR)/lib668-warnless.Po \
../../lib/$(DEPDIR)/lib670-timediff.Po \
../../lib/$(DEPDIR)/lib670-warnless.Po \
../../lib/$(DEPDIR)/lib671-timediff.Po \
../../lib/$(DEPDIR)/lib671-warnless.Po \
../../lib/$(DEPDIR)/lib672-timediff.Po \
../../lib/$(DEPDIR)/lib672-warnless.Po \
- ../../lib/$(DEPDIR)/lib673-timediff.Po \
- ../../lib/$(DEPDIR)/lib673-warnless.Po \
- ../../lib/$(DEPDIR)/lib674-timediff.Po \
- ../../lib/$(DEPDIR)/lib674-warnless.Po \
- ../../lib/$(DEPDIR)/lib676-timediff.Po \
- ../../lib/$(DEPDIR)/lib676-warnless.Po \
- ../../lib/$(DEPDIR)/lib677-curl_multibyte.Po \
- ../../lib/$(DEPDIR)/lib677-timediff.Po \
- ../../lib/$(DEPDIR)/lib677-warnless.Po \
- ../../lib/$(DEPDIR)/lib678-curl_multibyte.Po \
- ../../lib/$(DEPDIR)/lib678-timediff.Po \
- ../../lib/$(DEPDIR)/lib678-warnless.Po \
- ../../lib/$(DEPDIR)/libauthretry-timediff.Po \
- ../../lib/$(DEPDIR)/libntlmconnect-timediff.Po \
- ../../lib/$(DEPDIR)/libntlmconnect-warnless.Po \
- ../../lib/$(DEPDIR)/libprereq-timediff.Po \
- ../../lib/$(DEPDIR)/libprereq-warnless.Po \
../../lib/$(DEPDIR)/timediff.Po \
- ../../lib/$(DEPDIR)/warnless.Po \
- ./$(DEPDIR)/chkdecimalpoint-chkdecimalpoint.Po \
- ./$(DEPDIR)/chkhostname-chkhostname.Po ./$(DEPDIR)/first.Po \
- ./$(DEPDIR)/lib1156-first.Po ./$(DEPDIR)/lib1156-lib1156.Po \
- ./$(DEPDIR)/lib1156-testutil.Po ./$(DEPDIR)/lib1500-first.Po \
- ./$(DEPDIR)/lib1500-lib1500.Po ./$(DEPDIR)/lib1500-testutil.Po \
- ./$(DEPDIR)/lib1501-first.Po ./$(DEPDIR)/lib1501-lib1501.Po \
- ./$(DEPDIR)/lib1501-testutil.Po ./$(DEPDIR)/lib1502-first.Po \
+ ../../lib/$(DEPDIR)/warnless.Po ./$(DEPDIR)/chkhostname.Po \
+ ./$(DEPDIR)/first.Po ./$(DEPDIR)/lib1156.Po \
+ ./$(DEPDIR)/lib1301.Po ./$(DEPDIR)/lib1500.Po \
+ ./$(DEPDIR)/lib1501.Po ./$(DEPDIR)/lib1502-first.Po \
./$(DEPDIR)/lib1502-lib1502.Po ./$(DEPDIR)/lib1502-testutil.Po \
./$(DEPDIR)/lib1503-first.Po ./$(DEPDIR)/lib1503-lib1502.Po \
./$(DEPDIR)/lib1503-testutil.Po ./$(DEPDIR)/lib1504-first.Po \
./$(DEPDIR)/lib1504-lib1502.Po ./$(DEPDIR)/lib1504-testutil.Po \
./$(DEPDIR)/lib1505-first.Po ./$(DEPDIR)/lib1505-lib1502.Po \
- ./$(DEPDIR)/lib1505-testutil.Po ./$(DEPDIR)/lib1506-first.Po \
- ./$(DEPDIR)/lib1506-lib1506.Po ./$(DEPDIR)/lib1506-testutil.Po \
- ./$(DEPDIR)/lib1507-first.Po ./$(DEPDIR)/lib1507-lib1507.Po \
- ./$(DEPDIR)/lib1507-testutil.Po ./$(DEPDIR)/lib1508-first.Po \
- ./$(DEPDIR)/lib1508-lib1508.Po ./$(DEPDIR)/lib1508-testutil.Po \
- ./$(DEPDIR)/lib1509-first.Po ./$(DEPDIR)/lib1509-lib1509.Po \
- ./$(DEPDIR)/lib1509-testutil.Po ./$(DEPDIR)/lib1510-first.Po \
- ./$(DEPDIR)/lib1510-lib1510.Po ./$(DEPDIR)/lib1510-testutil.Po \
- ./$(DEPDIR)/lib1511-first.Po ./$(DEPDIR)/lib1511-lib1511.Po \
- ./$(DEPDIR)/lib1511-testutil.Po ./$(DEPDIR)/lib1512-first.Po \
- ./$(DEPDIR)/lib1512-lib1512.Po ./$(DEPDIR)/lib1512-testutil.Po \
- ./$(DEPDIR)/lib1513-first.Po ./$(DEPDIR)/lib1513-lib1513.Po \
- ./$(DEPDIR)/lib1513-testutil.Po ./$(DEPDIR)/lib1514-first.Po \
- ./$(DEPDIR)/lib1514-lib1514.Po ./$(DEPDIR)/lib1514-testutil.Po \
- ./$(DEPDIR)/lib1515-first.Po ./$(DEPDIR)/lib1515-lib1515.Po \
- ./$(DEPDIR)/lib1515-testutil.Po ./$(DEPDIR)/lib1517-first.Po \
- ./$(DEPDIR)/lib1517-lib1517.Po ./$(DEPDIR)/lib1518-first.Po \
- ./$(DEPDIR)/lib1518-lib1518.Po ./$(DEPDIR)/lib1520-first.Po \
- ./$(DEPDIR)/lib1520-lib1520.Po ./$(DEPDIR)/lib1521-first.Po \
- ./$(DEPDIR)/lib1521-lib1521.Po ./$(DEPDIR)/lib1522-first.Po \
- ./$(DEPDIR)/lib1522-lib1522.Po \
- ./$(DEPDIR)/lib1522-testtrace.Po \
- ./$(DEPDIR)/lib1522-testutil.Po ./$(DEPDIR)/lib1523-first.Po \
- ./$(DEPDIR)/lib1523-lib1523.Po ./$(DEPDIR)/lib1525-first.Po \
- ./$(DEPDIR)/lib1525-lib1525.Po ./$(DEPDIR)/lib1525-testutil.Po \
- ./$(DEPDIR)/lib1526-first.Po ./$(DEPDIR)/lib1526-lib1526.Po \
- ./$(DEPDIR)/lib1526-testutil.Po ./$(DEPDIR)/lib1527-first.Po \
- ./$(DEPDIR)/lib1527-lib1527.Po ./$(DEPDIR)/lib1527-testutil.Po \
- ./$(DEPDIR)/lib1528-first.Po ./$(DEPDIR)/lib1528-lib1528.Po \
- ./$(DEPDIR)/lib1528-testutil.Po ./$(DEPDIR)/lib1529-first.Po \
- ./$(DEPDIR)/lib1529-lib1529.Po ./$(DEPDIR)/lib1529-testutil.Po \
- ./$(DEPDIR)/lib1530-first.Po ./$(DEPDIR)/lib1530-lib1530.Po \
- ./$(DEPDIR)/lib1530-testutil.Po ./$(DEPDIR)/lib1531-first.Po \
- ./$(DEPDIR)/lib1531-lib1531.Po ./$(DEPDIR)/lib1531-testutil.Po \
- ./$(DEPDIR)/lib1532-first.Po ./$(DEPDIR)/lib1532-lib1532.Po \
- ./$(DEPDIR)/lib1532-testutil.Po ./$(DEPDIR)/lib1533-first.Po \
- ./$(DEPDIR)/lib1533-lib1533.Po ./$(DEPDIR)/lib1533-testutil.Po \
- ./$(DEPDIR)/lib1534-first.Po ./$(DEPDIR)/lib1534-lib1534.Po \
- ./$(DEPDIR)/lib1534-testutil.Po ./$(DEPDIR)/lib1535-first.Po \
- ./$(DEPDIR)/lib1535-lib1535.Po ./$(DEPDIR)/lib1535-testutil.Po \
- ./$(DEPDIR)/lib1536-first.Po ./$(DEPDIR)/lib1536-lib1536.Po \
- ./$(DEPDIR)/lib1536-testutil.Po ./$(DEPDIR)/lib1537-first.Po \
- ./$(DEPDIR)/lib1537-lib1537.Po ./$(DEPDIR)/lib1537-testutil.Po \
- ./$(DEPDIR)/lib1538-first.Po ./$(DEPDIR)/lib1538-lib1538.Po \
- ./$(DEPDIR)/lib1538-testutil.Po ./$(DEPDIR)/lib1539-first.Po \
- ./$(DEPDIR)/lib1539-lib1514.Po ./$(DEPDIR)/lib1539-testutil.Po \
- ./$(DEPDIR)/lib1540-first.Po ./$(DEPDIR)/lib1540-lib1540.Po \
- ./$(DEPDIR)/lib1540-testutil.Po ./$(DEPDIR)/lib1542-first.Po \
- ./$(DEPDIR)/lib1542-lib1542.Po \
- ./$(DEPDIR)/lib1542-testtrace.Po \
- ./$(DEPDIR)/lib1542-testutil.Po ./$(DEPDIR)/lib1543-first.Po \
- ./$(DEPDIR)/lib1543-lib1518.Po ./$(DEPDIR)/lib1550-first.Po \
- ./$(DEPDIR)/lib1550-lib1550.Po ./$(DEPDIR)/lib1551-first.Po \
- ./$(DEPDIR)/lib1551-lib1551.Po ./$(DEPDIR)/lib1552-first.Po \
- ./$(DEPDIR)/lib1552-lib1552.Po ./$(DEPDIR)/lib1552-testutil.Po \
- ./$(DEPDIR)/lib1553-first.Po ./$(DEPDIR)/lib1553-lib1553.Po \
- ./$(DEPDIR)/lib1553-testutil.Po ./$(DEPDIR)/lib1554-first.Po \
- ./$(DEPDIR)/lib1554-lib1554.Po ./$(DEPDIR)/lib1555-first.Po \
- ./$(DEPDIR)/lib1555-lib1555.Po ./$(DEPDIR)/lib1555-testutil.Po \
- ./$(DEPDIR)/lib1556-first.Po ./$(DEPDIR)/lib1556-lib1556.Po \
- ./$(DEPDIR)/lib1556-testutil.Po ./$(DEPDIR)/lib1557-first.Po \
- ./$(DEPDIR)/lib1557-lib1557.Po ./$(DEPDIR)/lib1557-testutil.Po \
- ./$(DEPDIR)/lib1558.Po ./$(DEPDIR)/lib1559.Po \
- ./$(DEPDIR)/lib1560.Po ./$(DEPDIR)/lib1564-first.Po \
- ./$(DEPDIR)/lib1564-lib1564.Po ./$(DEPDIR)/lib1564-testutil.Po \
- ./$(DEPDIR)/lib1565-first.Po ./$(DEPDIR)/lib1565-lib1565.Po \
- ./$(DEPDIR)/lib1565-testutil.Po ./$(DEPDIR)/lib1567-first.Po \
- ./$(DEPDIR)/lib1567-lib1567.Po ./$(DEPDIR)/lib1568-first.Po \
- ./$(DEPDIR)/lib1568-lib1568.Po ./$(DEPDIR)/lib1569-first.Po \
- ./$(DEPDIR)/lib1569-lib1569.Po ./$(DEPDIR)/lib1591-first.Po \
- ./$(DEPDIR)/lib1591-lib1591.Po ./$(DEPDIR)/lib1591-testutil.Po \
- ./$(DEPDIR)/lib1592-first.Po ./$(DEPDIR)/lib1592-lib1592.Po \
- ./$(DEPDIR)/lib1592-testutil.Po ./$(DEPDIR)/lib1593.Po \
+ ./$(DEPDIR)/lib1505-testutil.Po ./$(DEPDIR)/lib1506.Po \
+ ./$(DEPDIR)/lib1507.Po ./$(DEPDIR)/lib1508.Po \
+ ./$(DEPDIR)/lib1509.Po ./$(DEPDIR)/lib1510.Po \
+ ./$(DEPDIR)/lib1511.Po ./$(DEPDIR)/lib1512.Po \
+ ./$(DEPDIR)/lib1513.Po ./$(DEPDIR)/lib1514.Po \
+ ./$(DEPDIR)/lib1515.Po ./$(DEPDIR)/lib1517.Po \
+ ./$(DEPDIR)/lib1518.Po ./$(DEPDIR)/lib1520.Po \
+ ./$(DEPDIR)/lib1521-first.Po ./$(DEPDIR)/lib1521-lib1521.Po \
+ ./$(DEPDIR)/lib1522.Po ./$(DEPDIR)/lib1523.Po \
+ ./$(DEPDIR)/lib1525.Po ./$(DEPDIR)/lib1526.Po \
+ ./$(DEPDIR)/lib1527.Po ./$(DEPDIR)/lib1528.Po \
+ ./$(DEPDIR)/lib1529.Po ./$(DEPDIR)/lib1530.Po \
+ ./$(DEPDIR)/lib1531.Po ./$(DEPDIR)/lib1532.Po \
+ ./$(DEPDIR)/lib1533.Po ./$(DEPDIR)/lib1534.Po \
+ ./$(DEPDIR)/lib1535.Po ./$(DEPDIR)/lib1536.Po \
+ ./$(DEPDIR)/lib1537.Po ./$(DEPDIR)/lib1538.Po \
+ ./$(DEPDIR)/lib1539-first.Po ./$(DEPDIR)/lib1539-lib1514.Po \
+ ./$(DEPDIR)/lib1539-testutil.Po ./$(DEPDIR)/lib1540.Po \
+ ./$(DEPDIR)/lib1542.Po ./$(DEPDIR)/lib1543-first.Po \
+ ./$(DEPDIR)/lib1543-lib1518.Po ./$(DEPDIR)/lib1545-first.Po \
+ ./$(DEPDIR)/lib1545-lib1545.Po ./$(DEPDIR)/lib1550.Po \
+ ./$(DEPDIR)/lib1551.Po ./$(DEPDIR)/lib1552.Po \
+ ./$(DEPDIR)/lib1553.Po ./$(DEPDIR)/lib1554.Po \
+ ./$(DEPDIR)/lib1555.Po ./$(DEPDIR)/lib1556.Po \
+ ./$(DEPDIR)/lib1557.Po ./$(DEPDIR)/lib1558.Po \
+ ./$(DEPDIR)/lib1559.Po ./$(DEPDIR)/lib1560.Po \
+ ./$(DEPDIR)/lib1564.Po ./$(DEPDIR)/lib1565.Po \
+ ./$(DEPDIR)/lib1567.Po ./$(DEPDIR)/lib1568.Po \
+ ./$(DEPDIR)/lib1569.Po ./$(DEPDIR)/lib1591.Po \
+ ./$(DEPDIR)/lib1592.Po ./$(DEPDIR)/lib1593.Po \
./$(DEPDIR)/lib1594.Po ./$(DEPDIR)/lib1596-first.Po \
./$(DEPDIR)/lib1596-lib1594.Po ./$(DEPDIR)/lib1596-testutil.Po \
- ./$(DEPDIR)/lib1597.Po ./$(DEPDIR)/lib1905-first.Po \
- ./$(DEPDIR)/lib1905-lib1905.Po ./$(DEPDIR)/lib1905-testutil.Po \
- ./$(DEPDIR)/lib1906-first.Po ./$(DEPDIR)/lib1906-lib1906.Po \
- ./$(DEPDIR)/lib1906-testutil.Po ./$(DEPDIR)/lib1907-first.Po \
- ./$(DEPDIR)/lib1907-lib1907.Po ./$(DEPDIR)/lib1907-testutil.Po \
- ./$(DEPDIR)/lib1908-first.Po ./$(DEPDIR)/lib1908-lib1908.Po \
- ./$(DEPDIR)/lib1908-testutil.Po ./$(DEPDIR)/lib1910-first.Po \
- ./$(DEPDIR)/lib1910-lib1910.Po ./$(DEPDIR)/lib1910-testutil.Po \
- ./$(DEPDIR)/lib1911-first.Po ./$(DEPDIR)/lib1911-lib1911.Po \
- ./$(DEPDIR)/lib1911-testutil.Po ./$(DEPDIR)/lib1912-first.Po \
- ./$(DEPDIR)/lib1912-lib1912.Po ./$(DEPDIR)/lib1912-testutil.Po \
- ./$(DEPDIR)/lib1913-first.Po ./$(DEPDIR)/lib1913-lib1913.Po \
- ./$(DEPDIR)/lib1913-testutil.Po ./$(DEPDIR)/lib1915-first.Po \
- ./$(DEPDIR)/lib1915-lib1915.Po ./$(DEPDIR)/lib1915-testutil.Po \
- ./$(DEPDIR)/lib1916-first.Po ./$(DEPDIR)/lib1916-lib1916.Po \
+ ./$(DEPDIR)/lib1597.Po ./$(DEPDIR)/lib1662.Po \
+ ./$(DEPDIR)/lib1900.Po ./$(DEPDIR)/lib1903.Po \
+ ./$(DEPDIR)/lib1905.Po ./$(DEPDIR)/lib1906.Po \
+ ./$(DEPDIR)/lib1907.Po ./$(DEPDIR)/lib1908.Po \
+ ./$(DEPDIR)/lib1910.Po ./$(DEPDIR)/lib1911.Po \
+ ./$(DEPDIR)/lib1912.Po ./$(DEPDIR)/lib1913.Po \
+ ./$(DEPDIR)/lib1915.Po ./$(DEPDIR)/lib1916.Po \
./$(DEPDIR)/lib1917-first.Po ./$(DEPDIR)/lib1917-lib1916.Po \
- ./$(DEPDIR)/lib1918-first.Po ./$(DEPDIR)/lib1918-lib1918.Po \
- ./$(DEPDIR)/lib1919-first.Po ./$(DEPDIR)/lib1919-lib1919.Po \
- ./$(DEPDIR)/lib1933-first.Po ./$(DEPDIR)/lib1933-lib1933.Po \
- ./$(DEPDIR)/lib1933-testutil.Po ./$(DEPDIR)/lib1934-first.Po \
- ./$(DEPDIR)/lib1934-lib1934.Po ./$(DEPDIR)/lib1934-testutil.Po \
- ./$(DEPDIR)/lib1935-first.Po ./$(DEPDIR)/lib1935-lib1935.Po \
- ./$(DEPDIR)/lib1935-testutil.Po ./$(DEPDIR)/lib1936-first.Po \
- ./$(DEPDIR)/lib1936-lib1936.Po ./$(DEPDIR)/lib1936-testutil.Po \
- ./$(DEPDIR)/lib1937-first.Po ./$(DEPDIR)/lib1937-lib1937.Po \
- ./$(DEPDIR)/lib1938-first.Po ./$(DEPDIR)/lib1938-lib1938.Po \
- ./$(DEPDIR)/lib1939-first.Po ./$(DEPDIR)/lib1939-lib1939.Po \
- ./$(DEPDIR)/lib1940-first.Po ./$(DEPDIR)/lib1940-lib1940.Po \
- ./$(DEPDIR)/lib1945-first.Po ./$(DEPDIR)/lib1945-lib1945.Po \
- ./$(DEPDIR)/lib1946-first.Po ./$(DEPDIR)/lib1946-lib1940.Po \
- ./$(DEPDIR)/lib1947-first.Po ./$(DEPDIR)/lib1947-lib1947.Po \
- ./$(DEPDIR)/lib1948-first.Po ./$(DEPDIR)/lib1948-lib1948.Po \
- ./$(DEPDIR)/lib1955-first.Po ./$(DEPDIR)/lib1955-lib1955.Po \
- ./$(DEPDIR)/lib1955-testutil.Po ./$(DEPDIR)/lib2301.Po \
- ./$(DEPDIR)/lib2302.Po ./$(DEPDIR)/lib3010-first.Po \
- ./$(DEPDIR)/lib3010-lib3010.Po ./$(DEPDIR)/lib3010-testutil.Po \
- ./$(DEPDIR)/lib3025-first.Po ./$(DEPDIR)/lib3025-lib3025.Po \
- ./$(DEPDIR)/lib3025-testutil.Po ./$(DEPDIR)/lib3026-first.Po \
- ./$(DEPDIR)/lib3026-lib3026.Po ./$(DEPDIR)/lib3026-testutil.Po \
- ./$(DEPDIR)/lib3027-first.Po ./$(DEPDIR)/lib3027-lib3027.Po \
- ./$(DEPDIR)/lib3027-testutil.Po ./$(DEPDIR)/lib500-first.Po \
- ./$(DEPDIR)/lib500-lib500.Po ./$(DEPDIR)/lib500-testtrace.Po \
- ./$(DEPDIR)/lib500-testutil.Po ./$(DEPDIR)/lib501-first.Po \
- ./$(DEPDIR)/lib501-lib501.Po ./$(DEPDIR)/lib502-first.Po \
- ./$(DEPDIR)/lib502-lib502.Po ./$(DEPDIR)/lib502-testutil.Po \
- ./$(DEPDIR)/lib503-first.Po ./$(DEPDIR)/lib503-lib503.Po \
- ./$(DEPDIR)/lib503-testutil.Po ./$(DEPDIR)/lib504-first.Po \
- ./$(DEPDIR)/lib504-lib504.Po ./$(DEPDIR)/lib504-testutil.Po \
- ./$(DEPDIR)/lib505-first.Po ./$(DEPDIR)/lib505-lib505.Po \
- ./$(DEPDIR)/lib506-first.Po ./$(DEPDIR)/lib506-lib506.Po \
- ./$(DEPDIR)/lib507-first.Po ./$(DEPDIR)/lib507-lib507.Po \
- ./$(DEPDIR)/lib507-testutil.Po ./$(DEPDIR)/lib508-first.Po \
- ./$(DEPDIR)/lib508-lib508.Po ./$(DEPDIR)/lib509-first.Po \
- ./$(DEPDIR)/lib509-lib509.Po ./$(DEPDIR)/lib510-first.Po \
- ./$(DEPDIR)/lib510-lib510.Po ./$(DEPDIR)/lib511-first.Po \
- ./$(DEPDIR)/lib511-lib511.Po ./$(DEPDIR)/lib512-first.Po \
- ./$(DEPDIR)/lib512-lib512.Po ./$(DEPDIR)/lib513-first.Po \
- ./$(DEPDIR)/lib513-lib513.Po ./$(DEPDIR)/lib514-first.Po \
- ./$(DEPDIR)/lib514-lib514.Po ./$(DEPDIR)/lib515-first.Po \
- ./$(DEPDIR)/lib515-lib515.Po ./$(DEPDIR)/lib516-first.Po \
- ./$(DEPDIR)/lib516-lib516.Po ./$(DEPDIR)/lib517-first.Po \
- ./$(DEPDIR)/lib517-lib517.Po ./$(DEPDIR)/lib518-first.Po \
- ./$(DEPDIR)/lib518-lib518.Po ./$(DEPDIR)/lib519-first.Po \
- ./$(DEPDIR)/lib519-lib519.Po ./$(DEPDIR)/lib520-first.Po \
- ./$(DEPDIR)/lib520-lib520.Po ./$(DEPDIR)/lib521-first.Po \
- ./$(DEPDIR)/lib521-lib521.Po ./$(DEPDIR)/lib523-first.Po \
- ./$(DEPDIR)/lib523-lib523.Po ./$(DEPDIR)/lib524-first.Po \
- ./$(DEPDIR)/lib524-lib524.Po ./$(DEPDIR)/lib525-first.Po \
- ./$(DEPDIR)/lib525-lib525.Po ./$(DEPDIR)/lib525-testutil.Po \
- ./$(DEPDIR)/lib526-first.Po ./$(DEPDIR)/lib526-lib526.Po \
- ./$(DEPDIR)/lib526-testutil.Po ./$(DEPDIR)/lib527-first.Po \
- ./$(DEPDIR)/lib527-lib526.Po ./$(DEPDIR)/lib527-testutil.Po \
- ./$(DEPDIR)/lib529-first.Po ./$(DEPDIR)/lib529-lib525.Po \
- ./$(DEPDIR)/lib529-testutil.Po ./$(DEPDIR)/lib530-first.Po \
- ./$(DEPDIR)/lib530-lib530.Po ./$(DEPDIR)/lib530-testutil.Po \
- ./$(DEPDIR)/lib532-first.Po ./$(DEPDIR)/lib532-lib526.Po \
- ./$(DEPDIR)/lib532-testutil.Po ./$(DEPDIR)/lib533-first.Po \
- ./$(DEPDIR)/lib533-lib533.Po ./$(DEPDIR)/lib533-testutil.Po \
- ./$(DEPDIR)/lib537-first.Po ./$(DEPDIR)/lib537-lib537.Po \
- ./$(DEPDIR)/lib539-first.Po ./$(DEPDIR)/lib539-lib539.Po \
- ./$(DEPDIR)/lib540-first.Po ./$(DEPDIR)/lib540-lib540.Po \
- ./$(DEPDIR)/lib540-testutil.Po ./$(DEPDIR)/lib541-first.Po \
- ./$(DEPDIR)/lib541-lib541.Po ./$(DEPDIR)/lib542-first.Po \
- ./$(DEPDIR)/lib542-lib542.Po ./$(DEPDIR)/lib543-first.Po \
- ./$(DEPDIR)/lib543-lib543.Po ./$(DEPDIR)/lib544-first.Po \
- ./$(DEPDIR)/lib544-lib544.Po ./$(DEPDIR)/lib545-first.Po \
- ./$(DEPDIR)/lib545-lib544.Po ./$(DEPDIR)/lib547-first.Po \
- ./$(DEPDIR)/lib547-lib547.Po ./$(DEPDIR)/lib548-first.Po \
- ./$(DEPDIR)/lib548-lib547.Po ./$(DEPDIR)/lib549-first.Po \
- ./$(DEPDIR)/lib549-lib549.Po ./$(DEPDIR)/lib552-first.Po \
- ./$(DEPDIR)/lib552-lib552.Po ./$(DEPDIR)/lib553-first.Po \
- ./$(DEPDIR)/lib553-lib553.Po ./$(DEPDIR)/lib554-first.Po \
- ./$(DEPDIR)/lib554-lib554.Po ./$(DEPDIR)/lib555-first.Po \
- ./$(DEPDIR)/lib555-lib555.Po ./$(DEPDIR)/lib555-testutil.Po \
- ./$(DEPDIR)/lib556-first.Po ./$(DEPDIR)/lib556-lib556.Po \
- ./$(DEPDIR)/lib557-first.Po ./$(DEPDIR)/lib557-lib557.Po \
- ./$(DEPDIR)/lib558-first.Po ./$(DEPDIR)/lib558-lib558.Po \
- ./$(DEPDIR)/lib559-first.Po ./$(DEPDIR)/lib559-lib559.Po \
- ./$(DEPDIR)/lib560-first.Po ./$(DEPDIR)/lib560-lib560.Po \
- ./$(DEPDIR)/lib560-testutil.Po ./$(DEPDIR)/lib562-first.Po \
- ./$(DEPDIR)/lib562-lib562.Po ./$(DEPDIR)/lib564-first.Po \
- ./$(DEPDIR)/lib564-lib564.Po ./$(DEPDIR)/lib564-testutil.Po \
- ./$(DEPDIR)/lib565-first.Po ./$(DEPDIR)/lib565-lib510.Po \
- ./$(DEPDIR)/lib566-first.Po ./$(DEPDIR)/lib566-lib566.Po \
- ./$(DEPDIR)/lib567-first.Po ./$(DEPDIR)/lib567-lib567.Po \
- ./$(DEPDIR)/lib568-first.Po ./$(DEPDIR)/lib568-lib568.Po \
- ./$(DEPDIR)/lib569-first.Po ./$(DEPDIR)/lib569-lib569.Po \
- ./$(DEPDIR)/lib570-first.Po ./$(DEPDIR)/lib570-lib570.Po \
- ./$(DEPDIR)/lib571-first.Po ./$(DEPDIR)/lib571-lib571.Po \
- ./$(DEPDIR)/lib572-first.Po ./$(DEPDIR)/lib572-lib572.Po \
- ./$(DEPDIR)/lib573-first.Po ./$(DEPDIR)/lib573-lib573.Po \
- ./$(DEPDIR)/lib573-testtrace.Po ./$(DEPDIR)/lib573-testutil.Po \
- ./$(DEPDIR)/lib574-first.Po ./$(DEPDIR)/lib574-lib574.Po \
- ./$(DEPDIR)/lib575-first.Po ./$(DEPDIR)/lib575-lib575.Po \
- ./$(DEPDIR)/lib575-testutil.Po ./$(DEPDIR)/lib576-first.Po \
- ./$(DEPDIR)/lib576-lib576.Po ./$(DEPDIR)/lib578-first.Po \
- ./$(DEPDIR)/lib578-lib578.Po ./$(DEPDIR)/lib579-first.Po \
- ./$(DEPDIR)/lib579-lib579.Po ./$(DEPDIR)/lib582-first.Po \
- ./$(DEPDIR)/lib582-lib582.Po ./$(DEPDIR)/lib582-testutil.Po \
- ./$(DEPDIR)/lib583-first.Po ./$(DEPDIR)/lib583-lib583.Po \
+ ./$(DEPDIR)/lib1918.Po ./$(DEPDIR)/lib1919.Po \
+ ./$(DEPDIR)/lib1933.Po ./$(DEPDIR)/lib1934.Po \
+ ./$(DEPDIR)/lib1935.Po ./$(DEPDIR)/lib1936.Po \
+ ./$(DEPDIR)/lib1937.Po ./$(DEPDIR)/lib1938.Po \
+ ./$(DEPDIR)/lib1939.Po ./$(DEPDIR)/lib1940.Po \
+ ./$(DEPDIR)/lib1945.Po ./$(DEPDIR)/lib1946-first.Po \
+ ./$(DEPDIR)/lib1946-lib1940.Po ./$(DEPDIR)/lib1947.Po \
+ ./$(DEPDIR)/lib1948.Po ./$(DEPDIR)/lib1955.Po \
+ ./$(DEPDIR)/lib1956.Po ./$(DEPDIR)/lib1957.Po \
+ ./$(DEPDIR)/lib1958.Po ./$(DEPDIR)/lib1959.Po \
+ ./$(DEPDIR)/lib1960.Po ./$(DEPDIR)/lib1964.Po \
+ ./$(DEPDIR)/lib1970.Po ./$(DEPDIR)/lib1971.Po \
+ ./$(DEPDIR)/lib1972.Po ./$(DEPDIR)/lib1973.Po \
+ ./$(DEPDIR)/lib1974.Po ./$(DEPDIR)/lib1975.Po \
+ ./$(DEPDIR)/lib2301.Po ./$(DEPDIR)/lib2302.Po \
+ ./$(DEPDIR)/lib2304.Po ./$(DEPDIR)/lib2305.Po \
+ ./$(DEPDIR)/lib2306.Po ./$(DEPDIR)/lib2402.Po \
+ ./$(DEPDIR)/lib2404.Po ./$(DEPDIR)/lib2502.Po \
+ ./$(DEPDIR)/lib3010.Po ./$(DEPDIR)/lib3025.Po \
+ ./$(DEPDIR)/lib3026.Po ./$(DEPDIR)/lib3027.Po \
+ ./$(DEPDIR)/lib3100.Po ./$(DEPDIR)/lib3101.Po \
+ ./$(DEPDIR)/lib3102.Po ./$(DEPDIR)/lib3103.Po \
+ ./$(DEPDIR)/lib500.Po ./$(DEPDIR)/lib501.Po \
+ ./$(DEPDIR)/lib502.Po ./$(DEPDIR)/lib503.Po \
+ ./$(DEPDIR)/lib504.Po ./$(DEPDIR)/lib505.Po \
+ ./$(DEPDIR)/lib506.Po ./$(DEPDIR)/lib507.Po \
+ ./$(DEPDIR)/lib508.Po ./$(DEPDIR)/lib509.Po \
+ ./$(DEPDIR)/lib510.Po ./$(DEPDIR)/lib511.Po \
+ ./$(DEPDIR)/lib512.Po ./$(DEPDIR)/lib513.Po \
+ ./$(DEPDIR)/lib514.Po ./$(DEPDIR)/lib515.Po \
+ ./$(DEPDIR)/lib516.Po ./$(DEPDIR)/lib517.Po \
+ ./$(DEPDIR)/lib518.Po ./$(DEPDIR)/lib519.Po \
+ ./$(DEPDIR)/lib520.Po ./$(DEPDIR)/lib521.Po \
+ ./$(DEPDIR)/lib523.Po ./$(DEPDIR)/lib524.Po \
+ ./$(DEPDIR)/lib525.Po ./$(DEPDIR)/lib526-first.Po \
+ ./$(DEPDIR)/lib526-lib526.Po ./$(DEPDIR)/lib526-testutil.Po \
+ ./$(DEPDIR)/lib527-first.Po ./$(DEPDIR)/lib527-lib526.Po \
+ ./$(DEPDIR)/lib527-testutil.Po ./$(DEPDIR)/lib529-first.Po \
+ ./$(DEPDIR)/lib529-lib525.Po ./$(DEPDIR)/lib529-testutil.Po \
+ ./$(DEPDIR)/lib530.Po ./$(DEPDIR)/lib532-first.Po \
+ ./$(DEPDIR)/lib532-lib526.Po ./$(DEPDIR)/lib532-testutil.Po \
+ ./$(DEPDIR)/lib533.Po ./$(DEPDIR)/lib537.Po \
+ ./$(DEPDIR)/lib539.Po ./$(DEPDIR)/lib540.Po \
+ ./$(DEPDIR)/lib541.Po ./$(DEPDIR)/lib542.Po \
+ ./$(DEPDIR)/lib543.Po ./$(DEPDIR)/lib544.Po \
+ ./$(DEPDIR)/lib545-first.Po ./$(DEPDIR)/lib545-lib544.Po \
+ ./$(DEPDIR)/lib547.Po ./$(DEPDIR)/lib548-first.Po \
+ ./$(DEPDIR)/lib548-lib547.Po ./$(DEPDIR)/lib549.Po \
+ ./$(DEPDIR)/lib552.Po ./$(DEPDIR)/lib553.Po \
+ ./$(DEPDIR)/lib554.Po ./$(DEPDIR)/lib555.Po \
+ ./$(DEPDIR)/lib556.Po ./$(DEPDIR)/lib557.Po \
+ ./$(DEPDIR)/lib558.Po ./$(DEPDIR)/lib559.Po \
+ ./$(DEPDIR)/lib560.Po ./$(DEPDIR)/lib562.Po \
+ ./$(DEPDIR)/lib564.Po ./$(DEPDIR)/lib565-first.Po \
+ ./$(DEPDIR)/lib565-lib510.Po ./$(DEPDIR)/lib566.Po \
+ ./$(DEPDIR)/lib567.Po ./$(DEPDIR)/lib568.Po \
+ ./$(DEPDIR)/lib569.Po ./$(DEPDIR)/lib570.Po \
+ ./$(DEPDIR)/lib571.Po ./$(DEPDIR)/lib572.Po \
+ ./$(DEPDIR)/lib573.Po ./$(DEPDIR)/lib574.Po \
+ ./$(DEPDIR)/lib575.Po ./$(DEPDIR)/lib576.Po \
+ ./$(DEPDIR)/lib578.Po ./$(DEPDIR)/lib579.Po \
+ ./$(DEPDIR)/lib582.Po ./$(DEPDIR)/lib583.Po \
./$(DEPDIR)/lib584-first.Po ./$(DEPDIR)/lib584-lib589.Po \
./$(DEPDIR)/lib585-first.Po ./$(DEPDIR)/lib585-lib500.Po \
./$(DEPDIR)/lib585-testtrace.Po ./$(DEPDIR)/lib585-testutil.Po \
- ./$(DEPDIR)/lib586-first.Po ./$(DEPDIR)/lib586-lib586.Po \
- ./$(DEPDIR)/lib587-first.Po ./$(DEPDIR)/lib587-lib554.Po \
- ./$(DEPDIR)/lib589-first.Po ./$(DEPDIR)/lib589-lib589.Po \
- ./$(DEPDIR)/lib590-first.Po ./$(DEPDIR)/lib590-lib590.Po \
- ./$(DEPDIR)/lib591-first.Po ./$(DEPDIR)/lib591-lib591.Po \
- ./$(DEPDIR)/lib591-testutil.Po ./$(DEPDIR)/lib597-first.Po \
- ./$(DEPDIR)/lib597-lib597.Po ./$(DEPDIR)/lib597-testutil.Po \
- ./$(DEPDIR)/lib598-first.Po ./$(DEPDIR)/lib598-lib598.Po \
- ./$(DEPDIR)/lib599-first.Po ./$(DEPDIR)/lib599-lib599.Po \
- ./$(DEPDIR)/lib643-first.Po ./$(DEPDIR)/lib643-lib643.Po \
+ ./$(DEPDIR)/lib586.Po ./$(DEPDIR)/lib587-first.Po \
+ ./$(DEPDIR)/lib587-lib554.Po ./$(DEPDIR)/lib589.Po \
+ ./$(DEPDIR)/lib590.Po ./$(DEPDIR)/lib591.Po \
+ ./$(DEPDIR)/lib597.Po ./$(DEPDIR)/lib598.Po \
+ ./$(DEPDIR)/lib599.Po ./$(DEPDIR)/lib643.Po \
./$(DEPDIR)/lib645-first.Po ./$(DEPDIR)/lib645-lib643.Po \
- ./$(DEPDIR)/lib650-first.Po ./$(DEPDIR)/lib650-lib650.Po \
- ./$(DEPDIR)/lib651-first.Po ./$(DEPDIR)/lib651-lib651.Po \
- ./$(DEPDIR)/lib652-first.Po ./$(DEPDIR)/lib652-lib652.Po \
- ./$(DEPDIR)/lib653-first.Po ./$(DEPDIR)/lib653-lib653.Po \
- ./$(DEPDIR)/lib654-first.Po ./$(DEPDIR)/lib654-lib654.Po \
- ./$(DEPDIR)/lib655-first.Po ./$(DEPDIR)/lib655-lib655.Po \
- ./$(DEPDIR)/lib658-first.Po ./$(DEPDIR)/lib658-lib658.Po \
- ./$(DEPDIR)/lib658-testutil.Po ./$(DEPDIR)/lib659-first.Po \
- ./$(DEPDIR)/lib659-lib659.Po ./$(DEPDIR)/lib659-testutil.Po \
- ./$(DEPDIR)/lib661-first.Po ./$(DEPDIR)/lib661-lib661.Po \
- ./$(DEPDIR)/lib666-first.Po ./$(DEPDIR)/lib666-lib666.Po \
- ./$(DEPDIR)/lib667-first.Po ./$(DEPDIR)/lib667-lib667.Po \
- ./$(DEPDIR)/lib667-testutil.Po ./$(DEPDIR)/lib668-first.Po \
- ./$(DEPDIR)/lib668-lib668.Po ./$(DEPDIR)/lib668-testutil.Po \
+ ./$(DEPDIR)/lib650.Po ./$(DEPDIR)/lib651.Po \
+ ./$(DEPDIR)/lib652.Po ./$(DEPDIR)/lib653.Po \
+ ./$(DEPDIR)/lib654.Po ./$(DEPDIR)/lib655.Po \
+ ./$(DEPDIR)/lib658.Po ./$(DEPDIR)/lib659.Po \
+ ./$(DEPDIR)/lib661.Po ./$(DEPDIR)/lib666.Po \
+ ./$(DEPDIR)/lib667.Po ./$(DEPDIR)/lib668.Po \
./$(DEPDIR)/lib670-first.Po ./$(DEPDIR)/lib670-lib670.Po \
- ./$(DEPDIR)/lib670-testutil.Po ./$(DEPDIR)/lib671-first.Po \
- ./$(DEPDIR)/lib671-lib670.Po ./$(DEPDIR)/lib671-testutil.Po \
- ./$(DEPDIR)/lib672-first.Po ./$(DEPDIR)/lib672-lib670.Po \
- ./$(DEPDIR)/lib672-testutil.Po ./$(DEPDIR)/lib673-first.Po \
- ./$(DEPDIR)/lib673-lib670.Po ./$(DEPDIR)/lib673-testutil.Po \
- ./$(DEPDIR)/lib674-first.Po ./$(DEPDIR)/lib674-lib674.Po \
- ./$(DEPDIR)/lib674-testutil.Po ./$(DEPDIR)/lib676-first.Po \
- ./$(DEPDIR)/lib676-lib676.Po ./$(DEPDIR)/lib676-testutil.Po \
- ./$(DEPDIR)/lib677-first.Po ./$(DEPDIR)/lib677-lib677.Po \
- ./$(DEPDIR)/lib677-testutil.Po ./$(DEPDIR)/lib678-first.Po \
- ./$(DEPDIR)/lib678-lib678.Po ./$(DEPDIR)/lib678-testutil.Po \
- ./$(DEPDIR)/libauthretry-first.Po \
- ./$(DEPDIR)/libauthretry-libauthretry.Po \
+ ./$(DEPDIR)/lib670-testutil.Po ./$(DEPDIR)/lib670.Po \
+ ./$(DEPDIR)/lib671-first.Po ./$(DEPDIR)/lib671-lib670.Po \
+ ./$(DEPDIR)/lib671-testutil.Po ./$(DEPDIR)/lib672-first.Po \
+ ./$(DEPDIR)/lib672-lib670.Po ./$(DEPDIR)/lib672-testutil.Po \
+ ./$(DEPDIR)/lib674.Po ./$(DEPDIR)/lib676.Po \
+ ./$(DEPDIR)/lib677.Po ./$(DEPDIR)/lib678.Po \
+ ./$(DEPDIR)/libauthretry.Po \
./$(DEPDIR)/libhostname_la-sethostname.Plo \
- ./$(DEPDIR)/libntlmconnect-first.Po \
- ./$(DEPDIR)/libntlmconnect-libntlmconnect.Po \
- ./$(DEPDIR)/libntlmconnect-testutil.Po \
- ./$(DEPDIR)/libprereq-first.Po \
- ./$(DEPDIR)/libprereq-libprereq.Po \
- ./$(DEPDIR)/libprereq-testutil.Po \
+ ./$(DEPDIR)/libntlmconnect.Po ./$(DEPDIR)/libprereq.Po \
./$(DEPDIR)/libstubgss_la-stub_gssapi.Plo \
- ./$(DEPDIR)/testutil.Po
+ ./$(DEPDIR)/testtrace.Po ./$(DEPDIR)/testutil.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -2267,40 +1450,48 @@ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(libhostname_la_SOURCES) $(libstubgss_la_SOURCES) \
- $(chkdecimalpoint_SOURCES) $(chkhostname_SOURCES) \
- $(lib1156_SOURCES) $(lib1500_SOURCES) $(lib1501_SOURCES) \
- $(lib1502_SOURCES) $(lib1503_SOURCES) $(lib1504_SOURCES) \
- $(lib1505_SOURCES) $(lib1506_SOURCES) $(lib1507_SOURCES) \
- $(lib1508_SOURCES) $(lib1509_SOURCES) $(lib1510_SOURCES) \
- $(lib1511_SOURCES) $(lib1512_SOURCES) $(lib1513_SOURCES) \
- $(lib1514_SOURCES) $(lib1515_SOURCES) $(lib1517_SOURCES) \
- $(lib1518_SOURCES) $(lib1520_SOURCES) \
- $(nodist_lib1521_SOURCES) $(lib1522_SOURCES) \
- $(lib1523_SOURCES) $(lib1525_SOURCES) $(lib1526_SOURCES) \
- $(lib1527_SOURCES) $(lib1528_SOURCES) $(lib1529_SOURCES) \
- $(lib1530_SOURCES) $(lib1531_SOURCES) $(lib1532_SOURCES) \
- $(lib1533_SOURCES) $(lib1534_SOURCES) $(lib1535_SOURCES) \
- $(lib1536_SOURCES) $(lib1537_SOURCES) $(lib1538_SOURCES) \
- $(lib1539_SOURCES) $(lib1540_SOURCES) $(lib1542_SOURCES) \
- $(lib1543_SOURCES) $(lib1550_SOURCES) $(lib1551_SOURCES) \
- $(lib1552_SOURCES) $(lib1553_SOURCES) $(lib1554_SOURCES) \
- $(lib1555_SOURCES) $(lib1556_SOURCES) $(lib1557_SOURCES) \
- $(lib1558_SOURCES) $(lib1559_SOURCES) $(lib1560_SOURCES) \
- $(lib1564_SOURCES) $(lib1565_SOURCES) $(lib1567_SOURCES) \
- $(lib1568_SOURCES) $(lib1569_SOURCES) $(lib1591_SOURCES) \
- $(lib1592_SOURCES) $(lib1593_SOURCES) $(lib1594_SOURCES) \
- $(lib1596_SOURCES) $(lib1597_SOURCES) $(lib1905_SOURCES) \
- $(lib1906_SOURCES) $(lib1907_SOURCES) $(lib1908_SOURCES) \
- $(lib1910_SOURCES) $(lib1911_SOURCES) $(lib1912_SOURCES) \
- $(lib1913_SOURCES) $(lib1915_SOURCES) $(lib1916_SOURCES) \
- $(lib1917_SOURCES) $(lib1918_SOURCES) $(lib1919_SOURCES) \
- $(lib1933_SOURCES) $(lib1934_SOURCES) $(lib1935_SOURCES) \
- $(lib1936_SOURCES) $(lib1937_SOURCES) $(lib1938_SOURCES) \
- $(lib1939_SOURCES) $(lib1940_SOURCES) $(lib1945_SOURCES) \
- $(lib1946_SOURCES) $(lib1947_SOURCES) $(lib1948_SOURCES) \
- $(lib1955_SOURCES) $(lib2301_SOURCES) $(lib2302_SOURCES) \
- $(lib3010_SOURCES) $(lib3025_SOURCES) $(lib3026_SOURCES) \
- $(lib3027_SOURCES) $(lib500_SOURCES) $(lib501_SOURCES) \
+ $(chkhostname_SOURCES) $(lib1156_SOURCES) $(lib1301_SOURCES) \
+ $(lib1500_SOURCES) $(lib1501_SOURCES) $(lib1502_SOURCES) \
+ $(lib1503_SOURCES) $(lib1504_SOURCES) $(lib1505_SOURCES) \
+ $(lib1506_SOURCES) $(lib1507_SOURCES) $(lib1508_SOURCES) \
+ $(lib1509_SOURCES) $(lib1510_SOURCES) $(lib1511_SOURCES) \
+ $(lib1512_SOURCES) $(lib1513_SOURCES) $(lib1514_SOURCES) \
+ $(lib1515_SOURCES) $(lib1517_SOURCES) $(lib1518_SOURCES) \
+ $(lib1520_SOURCES) $(nodist_lib1521_SOURCES) \
+ $(lib1522_SOURCES) $(lib1523_SOURCES) $(lib1525_SOURCES) \
+ $(lib1526_SOURCES) $(lib1527_SOURCES) $(lib1528_SOURCES) \
+ $(lib1529_SOURCES) $(lib1530_SOURCES) $(lib1531_SOURCES) \
+ $(lib1532_SOURCES) $(lib1533_SOURCES) $(lib1534_SOURCES) \
+ $(lib1535_SOURCES) $(lib1536_SOURCES) $(lib1537_SOURCES) \
+ $(lib1538_SOURCES) $(lib1539_SOURCES) $(lib1540_SOURCES) \
+ $(lib1542_SOURCES) $(lib1543_SOURCES) $(lib1545_SOURCES) \
+ $(lib1550_SOURCES) $(lib1551_SOURCES) $(lib1552_SOURCES) \
+ $(lib1553_SOURCES) $(lib1554_SOURCES) $(lib1555_SOURCES) \
+ $(lib1556_SOURCES) $(lib1557_SOURCES) $(lib1558_SOURCES) \
+ $(lib1559_SOURCES) $(lib1560_SOURCES) $(lib1564_SOURCES) \
+ $(lib1565_SOURCES) $(lib1567_SOURCES) $(lib1568_SOURCES) \
+ $(lib1569_SOURCES) $(lib1591_SOURCES) $(lib1592_SOURCES) \
+ $(lib1593_SOURCES) $(lib1594_SOURCES) $(lib1596_SOURCES) \
+ $(lib1597_SOURCES) $(lib1662_SOURCES) $(lib1900_SOURCES) \
+ $(lib1903_SOURCES) $(lib1905_SOURCES) $(lib1906_SOURCES) \
+ $(lib1907_SOURCES) $(lib1908_SOURCES) $(lib1910_SOURCES) \
+ $(lib1911_SOURCES) $(lib1912_SOURCES) $(lib1913_SOURCES) \
+ $(lib1915_SOURCES) $(lib1916_SOURCES) $(lib1917_SOURCES) \
+ $(lib1918_SOURCES) $(lib1919_SOURCES) $(lib1933_SOURCES) \
+ $(lib1934_SOURCES) $(lib1935_SOURCES) $(lib1936_SOURCES) \
+ $(lib1937_SOURCES) $(lib1938_SOURCES) $(lib1939_SOURCES) \
+ $(lib1940_SOURCES) $(lib1945_SOURCES) $(lib1946_SOURCES) \
+ $(lib1947_SOURCES) $(lib1948_SOURCES) $(lib1955_SOURCES) \
+ $(lib1956_SOURCES) $(lib1957_SOURCES) $(lib1958_SOURCES) \
+ $(lib1959_SOURCES) $(lib1960_SOURCES) $(lib1964_SOURCES) \
+ $(lib1970_SOURCES) $(lib1971_SOURCES) $(lib1972_SOURCES) \
+ $(lib1973_SOURCES) $(lib1974_SOURCES) $(lib1975_SOURCES) \
+ $(lib2301_SOURCES) $(lib2302_SOURCES) $(lib2304_SOURCES) \
+ $(lib2305_SOURCES) $(lib2306_SOURCES) $(lib2402_SOURCES) \
+ $(lib2404_SOURCES) $(lib2502_SOURCES) $(lib3010_SOURCES) \
+ $(lib3025_SOURCES) $(lib3026_SOURCES) $(lib3027_SOURCES) \
+ $(lib3100_SOURCES) $(lib3101_SOURCES) $(lib3102_SOURCES) \
+ $(lib3103_SOURCES) $(lib500_SOURCES) $(lib501_SOURCES) \
$(lib502_SOURCES) $(lib503_SOURCES) $(lib504_SOURCES) \
$(lib505_SOURCES) $(lib506_SOURCES) $(lib507_SOURCES) \
$(lib508_SOURCES) $(lib509_SOURCES) $(lib510_SOURCES) \
@@ -2337,8 +1528,8 @@ SOURCES = $(libhostname_la_SOURCES) $(libstubgss_la_SOURCES) \
$(libauthretry_SOURCES) $(libntlmconnect_SOURCES) \
$(libprereq_SOURCES)
DIST_SOURCES = $(libhostname_la_SOURCES) \
- $(am__libstubgss_la_SOURCES_DIST) $(chkdecimalpoint_SOURCES) \
- $(chkhostname_SOURCES) $(lib1156_SOURCES) $(lib1500_SOURCES) \
+ $(am__libstubgss_la_SOURCES_DIST) $(chkhostname_SOURCES) \
+ $(lib1156_SOURCES) $(lib1301_SOURCES) $(lib1500_SOURCES) \
$(lib1501_SOURCES) $(lib1502_SOURCES) $(lib1503_SOURCES) \
$(lib1504_SOURCES) $(lib1505_SOURCES) $(lib1506_SOURCES) \
$(lib1507_SOURCES) $(lib1508_SOURCES) $(lib1509_SOURCES) \
@@ -2351,60 +1542,69 @@ DIST_SOURCES = $(libhostname_la_SOURCES) \
$(lib1532_SOURCES) $(lib1533_SOURCES) $(lib1534_SOURCES) \
$(lib1535_SOURCES) $(lib1536_SOURCES) $(lib1537_SOURCES) \
$(lib1538_SOURCES) $(lib1539_SOURCES) $(lib1540_SOURCES) \
- $(lib1542_SOURCES) $(lib1543_SOURCES) $(lib1550_SOURCES) \
- $(lib1551_SOURCES) $(lib1552_SOURCES) $(lib1553_SOURCES) \
- $(lib1554_SOURCES) $(lib1555_SOURCES) $(lib1556_SOURCES) \
- $(lib1557_SOURCES) $(lib1558_SOURCES) $(lib1559_SOURCES) \
- $(lib1560_SOURCES) $(lib1564_SOURCES) $(lib1565_SOURCES) \
- $(lib1567_SOURCES) $(lib1568_SOURCES) $(lib1569_SOURCES) \
- $(lib1591_SOURCES) $(lib1592_SOURCES) $(lib1593_SOURCES) \
- $(lib1594_SOURCES) $(lib1596_SOURCES) $(lib1597_SOURCES) \
- $(lib1905_SOURCES) $(lib1906_SOURCES) $(lib1907_SOURCES) \
- $(lib1908_SOURCES) $(lib1910_SOURCES) $(lib1911_SOURCES) \
- $(lib1912_SOURCES) $(lib1913_SOURCES) $(lib1915_SOURCES) \
- $(lib1916_SOURCES) $(lib1917_SOURCES) $(lib1918_SOURCES) \
- $(lib1919_SOURCES) $(lib1933_SOURCES) $(lib1934_SOURCES) \
- $(lib1935_SOURCES) $(lib1936_SOURCES) $(lib1937_SOURCES) \
- $(lib1938_SOURCES) $(lib1939_SOURCES) $(lib1940_SOURCES) \
- $(lib1945_SOURCES) $(lib1946_SOURCES) $(lib1947_SOURCES) \
- $(lib1948_SOURCES) $(lib1955_SOURCES) $(lib2301_SOURCES) \
- $(lib2302_SOURCES) $(lib3010_SOURCES) $(lib3025_SOURCES) \
- $(lib3026_SOURCES) $(lib3027_SOURCES) $(lib500_SOURCES) \
- $(lib501_SOURCES) $(lib502_SOURCES) $(lib503_SOURCES) \
- $(lib504_SOURCES) $(lib505_SOURCES) $(lib506_SOURCES) \
- $(lib507_SOURCES) $(lib508_SOURCES) $(lib509_SOURCES) \
- $(lib510_SOURCES) $(lib511_SOURCES) $(lib512_SOURCES) \
- $(lib513_SOURCES) $(lib514_SOURCES) $(lib515_SOURCES) \
- $(lib516_SOURCES) $(lib517_SOURCES) $(lib518_SOURCES) \
- $(lib519_SOURCES) $(lib520_SOURCES) $(lib521_SOURCES) \
- $(lib523_SOURCES) $(lib524_SOURCES) $(lib525_SOURCES) \
- $(lib526_SOURCES) $(lib527_SOURCES) $(lib529_SOURCES) \
- $(lib530_SOURCES) $(lib532_SOURCES) $(lib533_SOURCES) \
- $(lib537_SOURCES) $(lib539_SOURCES) $(lib540_SOURCES) \
- $(lib541_SOURCES) $(lib542_SOURCES) $(lib543_SOURCES) \
- $(lib544_SOURCES) $(lib545_SOURCES) $(lib547_SOURCES) \
- $(lib548_SOURCES) $(lib549_SOURCES) $(lib552_SOURCES) \
- $(lib553_SOURCES) $(lib554_SOURCES) $(lib555_SOURCES) \
- $(lib556_SOURCES) $(lib557_SOURCES) $(lib558_SOURCES) \
- $(lib559_SOURCES) $(lib560_SOURCES) $(lib562_SOURCES) \
- $(lib564_SOURCES) $(lib565_SOURCES) $(lib566_SOURCES) \
- $(lib567_SOURCES) $(lib568_SOURCES) $(lib569_SOURCES) \
- $(lib570_SOURCES) $(lib571_SOURCES) $(lib572_SOURCES) \
- $(lib573_SOURCES) $(lib574_SOURCES) $(lib575_SOURCES) \
- $(lib576_SOURCES) $(lib578_SOURCES) $(lib579_SOURCES) \
- $(lib582_SOURCES) $(lib583_SOURCES) $(lib584_SOURCES) \
- $(lib585_SOURCES) $(lib586_SOURCES) $(lib587_SOURCES) \
- $(lib589_SOURCES) $(lib590_SOURCES) $(lib591_SOURCES) \
- $(lib597_SOURCES) $(lib598_SOURCES) $(lib599_SOURCES) \
- $(lib643_SOURCES) $(lib645_SOURCES) $(lib650_SOURCES) \
- $(lib651_SOURCES) $(lib652_SOURCES) $(lib653_SOURCES) \
- $(lib654_SOURCES) $(lib655_SOURCES) $(lib658_SOURCES) \
- $(lib659_SOURCES) $(lib661_SOURCES) $(lib666_SOURCES) \
- $(lib667_SOURCES) $(lib668_SOURCES) $(lib670_SOURCES) \
- $(lib671_SOURCES) $(lib672_SOURCES) $(lib673_SOURCES) \
- $(lib674_SOURCES) $(lib676_SOURCES) $(lib677_SOURCES) \
- $(lib678_SOURCES) $(libauthretry_SOURCES) \
- $(libntlmconnect_SOURCES) $(libprereq_SOURCES)
+ $(lib1542_SOURCES) $(lib1543_SOURCES) $(lib1545_SOURCES) \
+ $(lib1550_SOURCES) $(lib1551_SOURCES) $(lib1552_SOURCES) \
+ $(lib1553_SOURCES) $(lib1554_SOURCES) $(lib1555_SOURCES) \
+ $(lib1556_SOURCES) $(lib1557_SOURCES) $(lib1558_SOURCES) \
+ $(lib1559_SOURCES) $(lib1560_SOURCES) $(lib1564_SOURCES) \
+ $(lib1565_SOURCES) $(lib1567_SOURCES) $(lib1568_SOURCES) \
+ $(lib1569_SOURCES) $(lib1591_SOURCES) $(lib1592_SOURCES) \
+ $(lib1593_SOURCES) $(lib1594_SOURCES) $(lib1596_SOURCES) \
+ $(lib1597_SOURCES) $(lib1662_SOURCES) $(lib1900_SOURCES) \
+ $(lib1903_SOURCES) $(lib1905_SOURCES) $(lib1906_SOURCES) \
+ $(lib1907_SOURCES) $(lib1908_SOURCES) $(lib1910_SOURCES) \
+ $(lib1911_SOURCES) $(lib1912_SOURCES) $(lib1913_SOURCES) \
+ $(lib1915_SOURCES) $(lib1916_SOURCES) $(lib1917_SOURCES) \
+ $(lib1918_SOURCES) $(lib1919_SOURCES) $(lib1933_SOURCES) \
+ $(lib1934_SOURCES) $(lib1935_SOURCES) $(lib1936_SOURCES) \
+ $(lib1937_SOURCES) $(lib1938_SOURCES) $(lib1939_SOURCES) \
+ $(lib1940_SOURCES) $(lib1945_SOURCES) $(lib1946_SOURCES) \
+ $(lib1947_SOURCES) $(lib1948_SOURCES) $(lib1955_SOURCES) \
+ $(lib1956_SOURCES) $(lib1957_SOURCES) $(lib1958_SOURCES) \
+ $(lib1959_SOURCES) $(lib1960_SOURCES) $(lib1964_SOURCES) \
+ $(lib1970_SOURCES) $(lib1971_SOURCES) $(lib1972_SOURCES) \
+ $(lib1973_SOURCES) $(lib1974_SOURCES) $(lib1975_SOURCES) \
+ $(lib2301_SOURCES) $(lib2302_SOURCES) $(lib2304_SOURCES) \
+ $(lib2305_SOURCES) $(lib2306_SOURCES) $(lib2402_SOURCES) \
+ $(lib2404_SOURCES) $(lib2502_SOURCES) $(lib3010_SOURCES) \
+ $(lib3025_SOURCES) $(lib3026_SOURCES) $(lib3027_SOURCES) \
+ $(lib3100_SOURCES) $(lib3101_SOURCES) $(lib3102_SOURCES) \
+ $(lib3103_SOURCES) $(lib500_SOURCES) $(lib501_SOURCES) \
+ $(lib502_SOURCES) $(lib503_SOURCES) $(lib504_SOURCES) \
+ $(lib505_SOURCES) $(lib506_SOURCES) $(lib507_SOURCES) \
+ $(lib508_SOURCES) $(lib509_SOURCES) $(lib510_SOURCES) \
+ $(lib511_SOURCES) $(lib512_SOURCES) $(lib513_SOURCES) \
+ $(lib514_SOURCES) $(lib515_SOURCES) $(lib516_SOURCES) \
+ $(lib517_SOURCES) $(lib518_SOURCES) $(lib519_SOURCES) \
+ $(lib520_SOURCES) $(lib521_SOURCES) $(lib523_SOURCES) \
+ $(lib524_SOURCES) $(lib525_SOURCES) $(lib526_SOURCES) \
+ $(lib527_SOURCES) $(lib529_SOURCES) $(lib530_SOURCES) \
+ $(lib532_SOURCES) $(lib533_SOURCES) $(lib537_SOURCES) \
+ $(lib539_SOURCES) $(lib540_SOURCES) $(lib541_SOURCES) \
+ $(lib542_SOURCES) $(lib543_SOURCES) $(lib544_SOURCES) \
+ $(lib545_SOURCES) $(lib547_SOURCES) $(lib548_SOURCES) \
+ $(lib549_SOURCES) $(lib552_SOURCES) $(lib553_SOURCES) \
+ $(lib554_SOURCES) $(lib555_SOURCES) $(lib556_SOURCES) \
+ $(lib557_SOURCES) $(lib558_SOURCES) $(lib559_SOURCES) \
+ $(lib560_SOURCES) $(lib562_SOURCES) $(lib564_SOURCES) \
+ $(lib565_SOURCES) $(lib566_SOURCES) $(lib567_SOURCES) \
+ $(lib568_SOURCES) $(lib569_SOURCES) $(lib570_SOURCES) \
+ $(lib571_SOURCES) $(lib572_SOURCES) $(lib573_SOURCES) \
+ $(lib574_SOURCES) $(lib575_SOURCES) $(lib576_SOURCES) \
+ $(lib578_SOURCES) $(lib579_SOURCES) $(lib582_SOURCES) \
+ $(lib583_SOURCES) $(lib584_SOURCES) $(lib585_SOURCES) \
+ $(lib586_SOURCES) $(lib587_SOURCES) $(lib589_SOURCES) \
+ $(lib590_SOURCES) $(lib591_SOURCES) $(lib597_SOURCES) \
+ $(lib598_SOURCES) $(lib599_SOURCES) $(lib643_SOURCES) \
+ $(lib645_SOURCES) $(lib650_SOURCES) $(lib651_SOURCES) \
+ $(lib652_SOURCES) $(lib653_SOURCES) $(lib654_SOURCES) \
+ $(lib655_SOURCES) $(lib658_SOURCES) $(lib659_SOURCES) \
+ $(lib661_SOURCES) $(lib666_SOURCES) $(lib667_SOURCES) \
+ $(lib668_SOURCES) $(lib670_SOURCES) $(lib671_SOURCES) \
+ $(lib672_SOURCES) $(lib673_SOURCES) $(lib674_SOURCES) \
+ $(lib676_SOURCES) $(lib677_SOURCES) $(lib678_SOURCES) \
+ $(libauthretry_SOURCES) $(libntlmconnect_SOURCES) \
+ $(libprereq_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -2433,6 +1633,8 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APACHECTL = @APACHECTL@
+APXS = @APXS@
AR = @AR@
AR_FLAGS = @AR_FLAGS@
AS = @AS@
@@ -2441,6 +1643,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@
+CADDY = @CADDY@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@ @CURL_CFLAG_EXTRAS@
@@ -2502,6 +1705,8 @@ HAVE_LIBZ = @HAVE_LIBZ@
HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
HAVE_PROTO_BSDSOCKET_H = @HAVE_PROTO_BSDSOCKET_H@
HAVE_ZSTD = @HAVE_ZSTD@
+HTTPD = @HTTPD@
+HTTPD_NGHTTPX = @HTTPD_NGHTTPX@
IDN_ENABLED = @IDN_ENABLED@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -2531,7 +1736,6 @@ MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
NROFF = @NROFF@
-NSS_LIBS = @NSS_LIBS@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
@@ -2562,6 +1766,7 @@ SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@
SUPPORT_FEATURES = @SUPPORT_FEATURES@
SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_NGHTTPX = @TEST_NGHTTPX@
USE_ARES = @USE_ARES@
USE_BEARSSL = @USE_BEARSSL@
USE_GNUTLS = @USE_GNUTLS@
@@ -2575,9 +1780,8 @@ USE_NGHTTP2 = @USE_NGHTTP2@
USE_NGHTTP3 = @USE_NGHTTP3@
USE_NGTCP2 = @USE_NGTCP2@
USE_NGTCP2_CRYPTO_GNUTLS = @USE_NGTCP2_CRYPTO_GNUTLS@
-USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@
+USE_NGTCP2_CRYPTO_QUICTLS = @USE_NGTCP2_CRYPTO_QUICTLS@
USE_NGTCP2_CRYPTO_WOLFSSL = @USE_NGTCP2_CRYPTO_WOLFSSL@
-USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_RUSTLS = @USE_RUSTLS@
@@ -2656,7 +1860,7 @@ top_srcdir = @top_srcdir@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -2688,9 +1892,9 @@ EXTRA_DIST = test307.pl test610.pl test613.pl test1013.pl test1022.pl \
Makefile.inc notexists.pl CMakeLists.txt mk-lib1521.pl .checksrc
CLEANFILES = lib1521.c
-@USE_EXPLICIT_LIB_DEPS_FALSE@SUPPORTFILES_LIBS = $(top_builddir)/lib/libcurl.la @CURL_NETWORK_LIBS@ @NSS_LIBS@
+@USE_EXPLICIT_LIB_DEPS_FALSE@SUPPORTFILES_LIBS = $(top_builddir)/lib/libcurl.la @CURL_NETWORK_LIBS@
@USE_EXPLICIT_LIB_DEPS_TRUE@SUPPORTFILES_LIBS = $(top_builddir)/lib/libcurl.la @LIBCURL_LIBS@
-@USE_EXPLICIT_LIB_DEPS_FALSE@TESTUTIL_LIBS = $(top_builddir)/lib/libcurl.la @CURL_NETWORK_AND_TIME_LIBS@ @NSS_LIBS@
+@USE_EXPLICIT_LIB_DEPS_FALSE@TESTUTIL_LIBS = $(top_builddir)/lib/libcurl.la @CURL_NETWORK_AND_TIME_LIBS@
@USE_EXPLICIT_LIB_DEPS_TRUE@TESTUTIL_LIBS = $(top_builddir)/lib/libcurl.la @LIBCURL_LIBS@
# Dependencies (may need to be overridden)
@@ -2703,7 +1907,7 @@ LDADD = $(SUPPORTFILES_LIBS)
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -2732,82 +1936,47 @@ WARNLESS = ../../lib/warnless.c ../../lib/warnless.h
MULTIBYTE = ../../lib/curl_multibyte.c ../../lib/curl_multibyte.h
# these files are used in every single test program below
-SUPPORTFILES = ../../lib/timediff.c ../../lib/timediff.h first.c test.h
-chkdecimalpoint_SOURCES = chkdecimalpoint.c ../../lib/mprintf.c \
- ../../lib/dynbuf.c ../../lib/strdup.c
-
-chkdecimalpoint_LDADD =
-chkdecimalpoint_CPPFLAGS = $(AM_CPPFLAGS) -DCURL_STATICLIB \
- -DCURLX_NO_MEMORY_CALLBACKS -DBUILDING_LIBCURL
-
+TIMEDIFF = ../../lib/timediff.c ../../lib/timediff.h
+SUPPORTFILES = $(TIMEDIFF) first.c test.h
chkhostname_SOURCES = chkhostname.c ../../lib/curl_gethostname.c
chkhostname_LDADD = @CURL_NETWORK_LIBS@
chkhostname_DEPENDENCIES =
-chkhostname_CPPFLAGS = $(AM_CPPFLAGS)
libntlmconnect_SOURCES = libntlmconnect.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
libntlmconnect_LDADD = $(TESTUTIL_LIBS)
-libntlmconnect_CPPFLAGS = $(AM_CPPFLAGS)
libauthretry_SOURCES = libauthretry.c $(SUPPORTFILES)
-libauthretry_CPPFLAGS = $(AM_CPPFLAGS)
libprereq_SOURCES = libprereq.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
libprereq_LDADD = $(TESTUTIL_LIBS)
-libprereq_CPPFLAGS = $(AM_CPPFLAGS)
lib500_SOURCES = lib500.c $(SUPPORTFILES) $(TESTUTIL) $(TSTTRACE) $(MULTIBYTE)
lib500_LDADD = $(TESTUTIL_LIBS)
-lib500_CPPFLAGS = $(AM_CPPFLAGS)
lib501_SOURCES = lib501.c $(SUPPORTFILES)
-lib501_CPPFLAGS = $(AM_CPPFLAGS)
lib502_SOURCES = lib502.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib502_LDADD = $(TESTUTIL_LIBS)
-lib502_CPPFLAGS = $(AM_CPPFLAGS)
lib503_SOURCES = lib503.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib503_LDADD = $(TESTUTIL_LIBS)
-lib503_CPPFLAGS = $(AM_CPPFLAGS)
lib504_SOURCES = lib504.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib504_LDADD = $(TESTUTIL_LIBS)
-lib504_CPPFLAGS = $(AM_CPPFLAGS)
lib505_SOURCES = lib505.c $(SUPPORTFILES) $(MULTIBYTE)
-lib505_CPPFLAGS = $(AM_CPPFLAGS)
lib506_SOURCES = lib506.c $(SUPPORTFILES)
-lib506_CPPFLAGS = $(AM_CPPFLAGS)
lib507_SOURCES = lib507.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib507_LDADD = $(TESTUTIL_LIBS)
-lib507_CPPFLAGS = $(AM_CPPFLAGS)
lib508_SOURCES = lib508.c $(SUPPORTFILES)
-lib508_CPPFLAGS = $(AM_CPPFLAGS)
lib509_SOURCES = lib509.c $(SUPPORTFILES)
-lib509_CPPFLAGS = $(AM_CPPFLAGS)
lib510_SOURCES = lib510.c $(SUPPORTFILES)
-lib510_CPPFLAGS = $(AM_CPPFLAGS)
lib511_SOURCES = lib511.c $(SUPPORTFILES)
-lib511_CPPFLAGS = $(AM_CPPFLAGS)
lib512_SOURCES = lib512.c $(SUPPORTFILES)
-lib512_CPPFLAGS = $(AM_CPPFLAGS)
lib513_SOURCES = lib513.c $(SUPPORTFILES)
-lib513_CPPFLAGS = $(AM_CPPFLAGS)
lib514_SOURCES = lib514.c $(SUPPORTFILES)
-lib514_CPPFLAGS = $(AM_CPPFLAGS)
lib515_SOURCES = lib515.c $(SUPPORTFILES)
-lib515_CPPFLAGS = $(AM_CPPFLAGS)
lib516_SOURCES = lib516.c $(SUPPORTFILES)
-lib516_CPPFLAGS = $(AM_CPPFLAGS)
lib517_SOURCES = lib517.c $(SUPPORTFILES)
-lib517_CPPFLAGS = $(AM_CPPFLAGS)
lib518_SOURCES = lib518.c $(SUPPORTFILES) $(WARNLESS) $(MULTIBYTE)
-lib518_CPPFLAGS = $(AM_CPPFLAGS)
lib519_SOURCES = lib519.c $(SUPPORTFILES)
-lib519_CPPFLAGS = $(AM_CPPFLAGS)
lib520_SOURCES = lib520.c $(SUPPORTFILES)
-lib520_CPPFLAGS = $(AM_CPPFLAGS)
lib521_SOURCES = lib521.c $(SUPPORTFILES)
-lib521_CPPFLAGS = $(AM_CPPFLAGS)
lib523_SOURCES = lib523.c $(SUPPORTFILES)
-lib523_CPPFLAGS = $(AM_CPPFLAGS)
lib524_SOURCES = lib524.c $(SUPPORTFILES)
-lib524_CPPFLAGS = $(AM_CPPFLAGS)
lib525_SOURCES = lib525.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) $(MULTIBYTE)
lib525_LDADD = $(TESTUTIL_LIBS)
-lib525_CPPFLAGS = $(AM_CPPFLAGS)
lib526_SOURCES = lib526.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib526_LDADD = $(TESTUTIL_LIBS)
lib526_CPPFLAGS = $(AM_CPPFLAGS) -DLIB526
@@ -2819,151 +1988,94 @@ lib529_LDADD = $(TESTUTIL_LIBS)
lib529_CPPFLAGS = $(AM_CPPFLAGS) -DLIB529
lib530_SOURCES = lib530.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib530_LDADD = $(TESTUTIL_LIBS)
-lib530_CPPFLAGS = $(AM_CPPFLAGS)
lib532_SOURCES = lib526.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib532_LDADD = $(TESTUTIL_LIBS)
lib532_CPPFLAGS = $(AM_CPPFLAGS) -DLIB532
lib533_SOURCES = lib533.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib533_LDADD = $(TESTUTIL_LIBS)
-lib533_CPPFLAGS = $(AM_CPPFLAGS)
lib537_SOURCES = lib537.c $(SUPPORTFILES) $(WARNLESS) $(MULTIBYTE)
-lib537_CPPFLAGS = $(AM_CPPFLAGS)
lib539_SOURCES = lib539.c $(SUPPORTFILES)
-lib539_CPPFLAGS = $(AM_CPPFLAGS)
lib540_SOURCES = lib540.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib540_LDADD = $(TESTUTIL_LIBS)
-lib540_CPPFLAGS = $(AM_CPPFLAGS)
lib541_SOURCES = lib541.c $(SUPPORTFILES) $(MULTIBYTE)
-lib541_CPPFLAGS = $(AM_CPPFLAGS)
lib542_SOURCES = lib542.c $(SUPPORTFILES)
-lib542_CPPFLAGS = $(AM_CPPFLAGS)
lib543_SOURCES = lib543.c $(SUPPORTFILES)
-lib543_CPPFLAGS = $(AM_CPPFLAGS)
lib544_SOURCES = lib544.c $(SUPPORTFILES)
-lib544_CPPFLAGS = $(AM_CPPFLAGS)
lib545_SOURCES = lib544.c $(SUPPORTFILES)
lib545_CPPFLAGS = $(AM_CPPFLAGS) -DLIB545
lib547_SOURCES = lib547.c $(SUPPORTFILES)
-lib547_CPPFLAGS = $(AM_CPPFLAGS)
lib548_SOURCES = lib547.c $(SUPPORTFILES)
lib548_CPPFLAGS = $(AM_CPPFLAGS) -DLIB548
lib549_SOURCES = lib549.c $(SUPPORTFILES)
-lib549_CPPFLAGS = $(AM_CPPFLAGS)
lib552_SOURCES = lib552.c $(SUPPORTFILES) $(WARNLESS)
-lib552_CPPFLAGS = $(AM_CPPFLAGS)
lib553_SOURCES = lib553.c $(SUPPORTFILES)
-lib553_CPPFLAGS = $(AM_CPPFLAGS)
lib554_SOURCES = lib554.c $(SUPPORTFILES)
-lib554_CPPFLAGS = $(AM_CPPFLAGS)
lib555_SOURCES = lib555.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib555_LDADD = $(TESTUTIL_LIBS)
-lib555_CPPFLAGS = $(AM_CPPFLAGS)
lib556_SOURCES = lib556.c $(SUPPORTFILES) $(WARNLESS)
-lib556_CPPFLAGS = $(AM_CPPFLAGS)
lib557_SOURCES = lib557.c $(SUPPORTFILES)
-lib557_CPPFLAGS = $(AM_CPPFLAGS)
lib558_SOURCES = lib558.c $(SUPPORTFILES)
-lib558_CPPFLAGS = $(AM_CPPFLAGS)
lib559_SOURCES = lib559.c $(SUPPORTFILES)
-lib559_CPPFLAGS = $(AM_CPPFLAGS)
lib560_SOURCES = lib560.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib560_LDADD = $(TESTUTIL_LIBS)
-lib560_CPPFLAGS = $(AM_CPPFLAGS)
lib562_SOURCES = lib562.c $(SUPPORTFILES)
-lib562_CPPFLAGS = $(AM_CPPFLAGS)
lib564_SOURCES = lib564.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib564_LDADD = $(TESTUTIL_LIBS)
-lib564_CPPFLAGS = $(AM_CPPFLAGS)
lib565_SOURCES = lib510.c $(SUPPORTFILES)
lib565_CPPFLAGS = $(AM_CPPFLAGS) -DLIB565
lib566_SOURCES = lib566.c $(SUPPORTFILES) $(MULTIBYTE)
-lib566_CPPFLAGS = $(AM_CPPFLAGS)
lib567_SOURCES = lib567.c $(SUPPORTFILES)
-lib567_CPPFLAGS = $(AM_CPPFLAGS)
lib568_SOURCES = lib568.c $(SUPPORTFILES) $(MULTIBYTE)
-lib568_CPPFLAGS = $(AM_CPPFLAGS)
lib569_SOURCES = lib569.c $(SUPPORTFILES) $(MULTIBYTE)
-lib569_CPPFLAGS = $(AM_CPPFLAGS)
lib570_SOURCES = lib570.c $(SUPPORTFILES)
-lib570_CPPFLAGS = $(AM_CPPFLAGS)
lib571_SOURCES = lib571.c $(SUPPORTFILES) $(WARNLESS) $(MULTIBYTE)
-lib571_CPPFLAGS = $(AM_CPPFLAGS)
lib572_SOURCES = lib572.c $(SUPPORTFILES) $(MULTIBYTE)
-lib572_CPPFLAGS = $(AM_CPPFLAGS)
lib573_SOURCES = lib573.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) $(TSTTRACE)
lib573_LDADD = $(TESTUTIL_LIBS)
-lib573_CPPFLAGS = $(AM_CPPFLAGS)
lib574_SOURCES = lib574.c $(SUPPORTFILES)
-lib574_CPPFLAGS = $(AM_CPPFLAGS)
lib575_SOURCES = lib575.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib575_LDADD = $(TESTUTIL_LIBS)
-lib575_CPPFLAGS = $(AM_CPPFLAGS)
lib576_SOURCES = lib576.c $(SUPPORTFILES)
-lib576_CPPFLAGS = $(AM_CPPFLAGS)
lib578_SOURCES = lib578.c $(SUPPORTFILES) $(MULTIBYTE)
-lib578_CPPFLAGS = $(AM_CPPFLAGS)
lib579_SOURCES = lib579.c $(SUPPORTFILES) $(MULTIBYTE)
-lib579_CPPFLAGS = $(AM_CPPFLAGS)
lib582_SOURCES = lib582.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) $(MULTIBYTE)
lib582_LDADD = $(TESTUTIL_LIBS)
-lib582_CPPFLAGS = $(AM_CPPFLAGS)
lib583_SOURCES = lib583.c $(SUPPORTFILES)
-lib583_CPPFLAGS = $(AM_CPPFLAGS)
lib584_SOURCES = lib589.c $(SUPPORTFILES)
lib584_CPPFLAGS = $(AM_CPPFLAGS) -DLIB584
lib585_SOURCES = lib500.c $(SUPPORTFILES) $(TESTUTIL) $(TSTTRACE) $(MULTIBYTE)
lib585_LDADD = $(TESTUTIL_LIBS)
lib585_CPPFLAGS = $(AM_CPPFLAGS) -DLIB585
lib586_SOURCES = lib586.c $(SUPPORTFILES)
-lib586_CPPFLAGS = $(AM_CPPFLAGS)
lib587_SOURCES = lib554.c $(SUPPORTFILES)
lib587_CPPFLAGS = $(AM_CPPFLAGS) -DLIB587
lib589_SOURCES = lib589.c $(SUPPORTFILES)
-lib589_CPPFLAGS = $(AM_CPPFLAGS)
lib590_SOURCES = lib590.c $(SUPPORTFILES)
-lib590_CPPFLAGS = $(AM_CPPFLAGS)
lib591_SOURCES = lib591.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) $(MULTIBYTE)
lib591_LDADD = $(TESTUTIL_LIBS)
-lib591_CPPFLAGS = $(AM_CPPFLAGS)
lib597_SOURCES = lib597.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib597_LDADD = $(TESTUTIL_LIBS)
-lib597_CPPFLAGS = $(AM_CPPFLAGS)
lib598_SOURCES = lib598.c $(SUPPORTFILES)
-lib598_CPPFLAGS = $(AM_CPPFLAGS)
lib599_SOURCES = lib599.c $(SUPPORTFILES) $(MULTIBYTE)
-lib599_CPPFLAGS = $(AM_CPPFLAGS)
lib643_SOURCES = lib643.c $(SUPPORTFILES)
-lib643_CPPFLAGS = $(AM_CPPFLAGS)
lib645_SOURCES = lib643.c $(SUPPORTFILES)
lib645_CPPFLAGS = $(AM_CPPFLAGS) -DLIB645
lib650_SOURCES = lib650.c $(SUPPORTFILES)
-lib650_CPPFLAGS = $(AM_CPPFLAGS)
lib651_SOURCES = lib651.c $(SUPPORTFILES)
-lib651_CPPFLAGS = $(AM_CPPFLAGS)
lib652_SOURCES = lib652.c $(SUPPORTFILES)
-lib652_CPPFLAGS = $(AM_CPPFLAGS)
lib653_SOURCES = lib653.c $(SUPPORTFILES)
-lib653_CPPFLAGS = $(AM_CPPFLAGS)
lib654_SOURCES = lib654.c $(SUPPORTFILES)
-lib654_CPPFLAGS = $(AM_CPPFLAGS)
lib655_SOURCES = lib655.c $(SUPPORTFILES)
-lib655_CPPFLAGS = $(AM_CPPFLAGS)
lib658_SOURCES = lib658.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib658_LDADD = $(TESTUTIL_LIBS)
-lib658_CPPFLAGS = $(AM_CPPFLAGS)
lib659_SOURCES = lib659.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib659_LDADD = $(TESTUTIL_LIBS)
-lib659_CPPFLAGS = $(AM_CPPFLAGS)
lib661_SOURCES = lib661.c $(SUPPORTFILES)
-lib661_CPPFLAGS = $(AM_CPPFLAGS)
lib666_SOURCES = lib666.c $(SUPPORTFILES)
-lib666_CPPFLAGS = $(AM_CPPFLAGS)
lib667_SOURCES = lib667.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib667_LDADD = $(TESTUTIL_LIBS)
-lib667_CPPFLAGS = $(AM_CPPFLAGS)
lib668_SOURCES = lib668.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib668_LDADD = $(TESTUTIL_LIBS)
-lib668_CPPFLAGS = $(AM_CPPFLAGS)
lib670_SOURCES = lib670.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib670_LDADD = $(TESTUTIL_LIBS)
lib670_CPPFLAGS = $(AM_CPPFLAGS) -DLIB670
@@ -2975,25 +2087,20 @@ lib672_LDADD = $(TESTUTIL_LIBS)
lib672_CPPFLAGS = $(AM_CPPFLAGS) -DLIB672
lib673_SOURCES = lib670.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib673_LDADD = $(TESTUTIL_LIBS)
-lib673_CPPFLAGS = $(AM_CPPFLAGS) -DLIB673
lib674_SOURCES = lib674.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib674_LDADD = $(TESTUTIL_LIBS)
-lib674_CPPFLAGS = $(AM_CPPFLAGS)
lib676_SOURCES = lib676.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib676_LDADD = $(TESTUTIL_LIBS)
-lib676_CPPFLAGS = $(AM_CPPFLAGS)
lib677_SOURCES = lib677.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) $(MULTIBYTE)
lib677_LDADD = $(TESTUTIL_LIBS)
-lib677_CPPFLAGS = $(AM_CPPFLAGS)
lib678_SOURCES = lib678.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) $(MULTIBYTE)
lib678_LDADD = $(TESTUTIL_LIBS)
-lib678_CPPFLAGS = $(AM_CPPFLAGS)
+lib1301_SOURCES = lib1301.c $(SUPPORTFILES) $(TESTUTIL)
+lib1301_LDADD = $(TESTUTIL_LIBS)
lib1500_SOURCES = lib1500.c $(SUPPORTFILES) $(TESTUTIL)
lib1500_LDADD = $(TESTUTIL_LIBS)
-lib1500_CPPFLAGS = $(AM_CPPFLAGS)
lib1501_SOURCES = lib1501.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1501_LDADD = $(TESTUTIL_LIBS)
-lib1501_CPPFLAGS = $(AM_CPPFLAGS)
lib1502_SOURCES = lib1502.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1502_LDADD = $(TESTUTIL_LIBS)
lib1502_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1502
@@ -3008,124 +2115,86 @@ lib1505_LDADD = $(TESTUTIL_LIBS)
lib1505_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1505
lib1506_SOURCES = lib1506.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1506_LDADD = $(TESTUTIL_LIBS)
-lib1506_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1506
lib1156_SOURCES = lib1156.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1156_LDADD = $(TESTUTIL_LIBS)
-lib1156_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1156
lib1507_SOURCES = lib1507.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1507_LDADD = $(TESTUTIL_LIBS)
-lib1507_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1507
lib1508_SOURCES = lib1508.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1508_LDADD = $(TESTUTIL_LIBS)
-lib1508_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1508
lib1509_SOURCES = lib1509.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1509_LDADD = $(TESTUTIL_LIBS)
-lib1509_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1509
lib1510_SOURCES = lib1510.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1510_LDADD = $(TESTUTIL_LIBS)
-lib1510_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1510
lib1511_SOURCES = lib1511.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1511_LDADD = $(TESTUTIL_LIBS)
-lib1511_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1511
lib1512_SOURCES = lib1512.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1512_LDADD = $(TESTUTIL_LIBS)
-lib1512_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1512
lib1513_SOURCES = lib1513.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1513_LDADD = $(TESTUTIL_LIBS)
-lib1513_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1513
lib1514_SOURCES = lib1514.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1514_LDADD = $(TESTUTIL_LIBS)
-lib1514_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1514
lib1515_SOURCES = lib1515.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1515_LDADD = $(TESTUTIL_LIBS)
-lib1515_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1515
lib1517_SOURCES = lib1517.c $(SUPPORTFILES)
-lib1517_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1517
lib1518_SOURCES = lib1518.c $(SUPPORTFILES)
-lib1518_CPPFLAGS = $(AM_CPPFLAGS)
lib1520_SOURCES = lib1520.c $(SUPPORTFILES)
-lib1520_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1520
nodist_lib1521_SOURCES = lib1521.c $(SUPPORTFILES)
lib1521_CPPFLAGS = $(AM_CPPFLAGS) -I$(srcdir)
lib1522_SOURCES = lib1522.c $(SUPPORTFILES) $(TESTUTIL) $(TSTTRACE)
lib1522_LDADD = $(TESTUTIL_LIBS)
-lib1522_CPPFLAGS = $(AM_CPPFLAGS)
lib1523_SOURCES = lib1523.c $(SUPPORTFILES)
-lib1523_CPPFLAGS = $(AM_CPPFLAGS)
lib1525_SOURCES = lib1525.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1525_LDADD = $(TESTUTIL_LIBS)
-lib1525_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1525
lib1526_SOURCES = lib1526.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1526_LDADD = $(TESTUTIL_LIBS)
-lib1526_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1526
lib1527_SOURCES = lib1527.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1527_LDADD = $(TESTUTIL_LIBS)
-lib1527_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1527
lib1528_SOURCES = lib1528.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1528_LDADD = $(TESTUTIL_LIBS)
-lib1528_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1528
lib1529_SOURCES = lib1529.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1529_LDADD = $(TESTUTIL_LIBS)
-lib1529_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1529
lib1530_SOURCES = lib1530.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1530_LDADD = $(TESTUTIL_LIBS)
-lib1530_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1530
lib1531_SOURCES = lib1531.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1531_LDADD = $(TESTUTIL_LIBS)
-lib1531_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1531
lib1532_SOURCES = lib1532.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1532_LDADD = $(TESTUTIL_LIBS)
-lib1532_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1532
lib1533_SOURCES = lib1533.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1533_LDADD = $(TESTUTIL_LIBS)
-lib1533_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1533
lib1534_SOURCES = lib1534.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1534_LDADD = $(TESTUTIL_LIBS)
-lib1534_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1534
lib1535_SOURCES = lib1535.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1535_LDADD = $(TESTUTIL_LIBS)
-lib1535_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1535
lib1536_SOURCES = lib1536.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1536_LDADD = $(TESTUTIL_LIBS)
-lib1536_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1536
lib1537_SOURCES = lib1537.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1537_LDADD = $(TESTUTIL_LIBS)
-lib1537_CPPFLAGS = $(AM_CPPFLAGS)
lib1538_SOURCES = lib1538.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1538_LDADD = $(TESTUTIL_LIBS)
-lib1538_CPPFLAGS = $(AM_CPPFLAGS)
lib1539_SOURCES = lib1514.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1539_LDADD = $(TESTUTIL_LIBS)
lib1539_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1539
lib1540_SOURCES = lib1540.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1540_LDADD = $(TESTUTIL_LIBS)
-lib1540_CPPFLAGS = $(AM_CPPFLAGS)
lib1542_SOURCES = lib1542.c $(SUPPORTFILES) $(TESTUTIL) $(TSTTRACE) $(WARNLESS)
lib1542_LDADD = $(TESTUTIL_LIBS)
-lib1542_CPPFLAGS = $(AM_CPPFLAGS)
lib1543_SOURCES = lib1518.c $(SUPPORTFILES)
lib1543_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1543
+lib1545_SOURCES = lib1545.c $(SUPPORTFILES)
+lib1545_CPPFLAGS = $(AM_CPPFLAGS) -DCURL_DISABLE_DEPRECATION
lib1550_SOURCES = lib1550.c $(SUPPORTFILES)
-lib1550_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1517
lib1551_SOURCES = lib1551.c $(SUPPORTFILES)
-lib1551_CPPFLAGS = $(AM_CPPFLAGS)
lib1552_SOURCES = lib1552.c $(SUPPORTFILES) $(TESTUTIL)
lib1552_LDADD = $(TESTUTIL_LIBS)
-lib1552_CPPFLAGS = $(AM_CPPFLAGS)
lib1553_SOURCES = lib1553.c $(SUPPORTFILES) $(TESTUTIL)
lib1553_LDADD = $(TESTUTIL_LIBS)
-lib1553_CPPFLAGS = $(AM_CPPFLAGS)
lib1554_SOURCES = lib1554.c $(SUPPORTFILES)
-lib1554_CPPFLAGS = $(AM_CPPFLAGS)
lib1555_SOURCES = lib1555.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1555_LDADD = $(TESTUTIL_LIBS)
-lib1555_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1555
lib1556_SOURCES = lib1556.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1556_LDADD = $(TESTUTIL_LIBS)
-lib1556_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1556
lib1557_SOURCES = lib1557.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1557_LDADD = $(TESTUTIL_LIBS)
-lib1557_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1557
lib1558_SOURCES = lib1558.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1558_LDADD = $(TESTUTIL_LIBS)
lib1559_SOURCES = lib1559.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
@@ -3134,22 +2203,15 @@ lib1560_SOURCES = lib1560.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1560_LDADD = $(TESTUTIL_LIBS)
lib1564_SOURCES = lib1564.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1564_LDADD = $(TESTUTIL_LIBS)
-lib1564_CPPFLAGS = $(AM_CPPFLAGS)
lib1565_SOURCES = lib1565.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1565_LDADD = $(TESTUTIL_LIBS)
-lib1565_CPPFLAGS = $(AM_CPPFLAGS)
lib1567_SOURCES = lib1567.c $(SUPPORTFILES)
-lib1567_CPPFLAGS = $(AM_CPPFLAGS)
lib1568_SOURCES = lib1568.c $(SUPPORTFILES)
-lib1568_CPPFLAGS = $(AM_CPPFLAGS)
lib1569_SOURCES = lib1569.c $(SUPPORTFILES)
-lib1569_CPPFLAGS = $(AM_CPPFLAGS)
lib1591_SOURCES = lib1591.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1591_LDADD = $(TESTUTIL_LIBS)
-lib1591_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1591
lib1592_SOURCES = lib1592.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1592_LDADD = $(TESTUTIL_LIBS)
-lib1592_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1592
lib1593_SOURCES = lib1593.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1593_LDADD = $(TESTUTIL_LIBS)
lib1594_SOURCES = lib1594.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
@@ -3159,96 +2221,117 @@ lib1596_LDADD = $(TESTUTIL_LIBS)
lib1596_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1596
lib1597_SOURCES = lib1597.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1597_LDADD = $(TESTUTIL_LIBS)
+lib1662_SOURCES = lib1662.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1662_LDADD = $(TESTUTIL_LIBS)
+lib1900_SOURCES = lib1900.c $(SUPPORTFILES)
+lib1903_SOURCES = lib1903.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1903_LDADD = $(TESTUTIL_LIBS)
lib1905_SOURCES = lib1905.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1905_LDADD = $(TESTUTIL_LIBS)
-lib1905_CPPFLAGS = $(AM_CPPFLAGS)
lib1906_SOURCES = lib1906.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1906_LDADD = $(TESTUTIL_LIBS)
-lib1906_CPPFLAGS = $(AM_CPPFLAGS)
lib1907_SOURCES = lib1907.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1907_LDADD = $(TESTUTIL_LIBS)
-lib1907_CPPFLAGS = $(AM_CPPFLAGS)
lib1908_SOURCES = lib1908.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1908_LDADD = $(TESTUTIL_LIBS)
-lib1908_CPPFLAGS = $(AM_CPPFLAGS)
lib1910_SOURCES = lib1910.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1910_LDADD = $(TESTUTIL_LIBS)
-lib1910_CPPFLAGS = $(AM_CPPFLAGS)
lib1911_SOURCES = lib1911.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1911_LDADD = $(TESTUTIL_LIBS)
-lib1911_CPPFLAGS = $(AM_CPPFLAGS)
lib1912_SOURCES = lib1912.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1912_LDADD = $(TESTUTIL_LIBS)
-lib1912_CPPFLAGS = $(AM_CPPFLAGS)
lib1913_SOURCES = lib1913.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1913_LDADD = $(TESTUTIL_LIBS)
-lib1913_CPPFLAGS = $(AM_CPPFLAGS)
lib1915_SOURCES = lib1915.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1915_LDADD = $(TESTUTIL_LIBS)
-lib1915_CPPFLAGS = $(AM_CPPFLAGS)
lib1916_SOURCES = lib1916.c $(SUPPORTFILES) $(WARNLESS)
-lib1916_CPPFLAGS = $(AM_CPPFLAGS)
lib1917_SOURCES = lib1916.c $(SUPPORTFILES) $(WARNLESS)
lib1917_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1917
lib1918_SOURCES = lib1918.c $(SUPPORTFILES) $(WARNLESS)
-lib1918_CPPFLAGS = $(AM_CPPFLAGS)
lib1919_SOURCES = lib1919.c $(SUPPORTFILES) $(WARNLESS)
-lib1919_CPPFLAGS = $(AM_CPPFLAGS)
lib1933_SOURCES = lib1933.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1933_LDADD = $(TESTUTIL_LIBS)
-lib1933_CPPFLAGS = $(AM_CPPFLAGS)
lib1934_SOURCES = lib1934.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1934_LDADD = $(TESTUTIL_LIBS)
-lib1934_CPPFLAGS = $(AM_CPPFLAGS)
lib1935_SOURCES = lib1935.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1935_LDADD = $(TESTUTIL_LIBS)
-lib1935_CPPFLAGS = $(AM_CPPFLAGS)
lib1936_SOURCES = lib1936.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1936_LDADD = $(TESTUTIL_LIBS)
-lib1936_CPPFLAGS = $(AM_CPPFLAGS)
lib1937_SOURCES = lib1937.c $(SUPPORTFILES)
lib1937_LDADD = $(TESTUTIL_LIBS)
-lib1937_CPPFLAGS = $(AM_CPPFLAGS)
lib1938_SOURCES = lib1938.c $(SUPPORTFILES)
lib1938_LDADD = $(TESTUTIL_LIBS)
-lib1938_CPPFLAGS = $(AM_CPPFLAGS)
lib1939_SOURCES = lib1939.c $(SUPPORTFILES)
lib1939_LDADD = $(TESTUTIL_LIBS)
-lib1939_CPPFLAGS = $(AM_CPPFLAGS)
lib1940_SOURCES = lib1940.c $(SUPPORTFILES)
lib1940_LDADD = $(TESTUTIL_LIBS)
-lib1940_CPPFLAGS = $(AM_CPPFLAGS)
lib1945_SOURCES = lib1945.c $(SUPPORTFILES)
lib1945_LDADD = $(TESTUTIL_LIBS)
-lib1945_CPPFLAGS = $(AM_CPPFLAGS)
lib1946_SOURCES = lib1940.c $(SUPPORTFILES)
lib1946_LDADD = $(TESTUTIL_LIBS)
lib1946_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1946
lib1947_SOURCES = lib1947.c $(SUPPORTFILES)
lib1947_LDADD = $(TESTUTIL_LIBS)
-lib1947_CPPFLAGS = $(AM_CPPFLAGS)
lib1948_SOURCES = lib1948.c $(SUPPORTFILES)
lib1948_LDADD = $(TESTUTIL_LIBS)
-lib1948_CPPFLAGS = $(AM_CPPFLAGS)
lib1955_SOURCES = lib1955.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1955_LDADD = $(TESTUTIL_LIBS)
-lib1955_CPPFLAGS = $(AM_CPPFLAGS)
+lib1956_SOURCES = lib1956.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1956_LDADD = $(TESTUTIL_LIBS)
+lib1957_SOURCES = lib1957.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1957_LDADD = $(TESTUTIL_LIBS)
+lib1958_SOURCES = lib1958.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1958_LDADD = $(TESTUTIL_LIBS)
+lib1959_SOURCES = lib1959.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1959_LDADD = $(TESTUTIL_LIBS)
+lib1960_SOURCES = lib1960.c $(SUPPORTFILES)
+lib1960_LDADD = $(TESTUTIL_LIBS)
+lib1964_SOURCES = lib1964.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1964_LDADD = $(TESTUTIL_LIBS)
+lib1970_SOURCES = lib1970.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1970_LDADD = $(TESTUTIL_LIBS)
+lib1971_SOURCES = lib1971.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1971_LDADD = $(TESTUTIL_LIBS)
+lib1972_SOURCES = lib1972.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1972_LDADD = $(TESTUTIL_LIBS)
+lib1973_SOURCES = lib1973.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1973_LDADD = $(TESTUTIL_LIBS)
+lib1974_SOURCES = lib1974.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1974_LDADD = $(TESTUTIL_LIBS)
+lib1975_SOURCES = lib1975.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1975_LDADD = $(TESTUTIL_LIBS)
lib2301_SOURCES = lib2301.c $(SUPPORTFILES)
lib2301_LDADD = $(TESTUTIL_LIBS)
lib2302_SOURCES = lib2302.c $(SUPPORTFILES)
lib2302_LDADD = $(TESTUTIL_LIBS)
+lib2304_SOURCES = lib2304.c $(SUPPORTFILES)
+lib2304_LDADD = $(TESTUTIL_LIBS)
+lib2305_SOURCES = lib2305.c $(SUPPORTFILES) $(TESTUTIL) $(TSTTRACE) $(MULTIBYTE)
+lib2305_LDADD = $(TESTUTIL_LIBS)
+lib2306_SOURCES = lib2306.c $(SUPPORTFILES)
+lib2306_LDADD = $(TESTUTIL_LIBS)
+lib2402_SOURCES = lib2402.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib2402_LDADD = $(TESTUTIL_LIBS)
+lib2404_SOURCES = lib2404.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib2404_LDADD = $(TESTUTIL_LIBS)
+lib2502_SOURCES = lib2502.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib2502_LDADD = $(TESTUTIL_LIBS)
lib3010_SOURCES = lib3010.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib3010_LDADD = $(TESTUTIL_LIBS)
-lib3010_CPPFLAGS = $(AM_CPPFLAGS)
lib3025_SOURCES = lib3025.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib3025_LDADD = $(TESTUTIL_LIBS)
-lib3025_CPPFLAGS = $(AM_CPPFLAGS)
lib3026_SOURCES = lib3026.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib3026_LDADD = $(TESTUTIL_LIBS)
-lib3026_CPPFLAGS = $(AM_CPPFLAGS)
lib3027_SOURCES = lib3027.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib3027_LDADD = $(TESTUTIL_LIBS)
-lib3027_CPPFLAGS = $(AM_CPPFLAGS)
+lib3100_SOURCES = lib3100.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib3100_LDADD = $(TESTUTIL_LIBS)
+lib3101_SOURCES = lib3101.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib3101_LDADD = $(TESTUTIL_LIBS)
+lib3102_SOURCES = lib3102.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib3102_LDADD = $(TESTUTIL_LIBS)
+lib3103_SOURCES = lib3103.c $(SUPPORTFILES)
+lib3103_LDADD = $(TESTUTIL_LIBS)
@BUILD_LIBHOSTNAME_FALSE@noinst_LTLIBRARIES = $(am__append_7)
# Makefile.inc provides the source defines (TESTUTIL, SUPPORTFILES,
@@ -3268,7 +2351,7 @@ libstubgss_la_LDFLAGS_EXTRA = $(am__append_3)
libhostname_la_CPPFLAGS = $(AM_CPPFLAGS) $(libhostname_la_CPPFLAGS_EXTRA)
libhostname_la_LDFLAGS = $(AM_LDFLAGS) $(libhostname_la_LDFLAGS_EXTRA)
libhostname_la_CFLAGS = $(AM_CFLAGS) $(libhostname_la_CFLAGS_EXTRA)
-libhostname_la_SOURCES = sethostname.c sethostname.h
+libhostname_la_SOURCES = sethostname.c
libhostname_la_LIBADD =
libhostname_la_DEPENDENCIES =
@BUILD_STUB_GSS_TRUE@libstubgss_la_CPPFLAGS = $(AM_CPPFLAGS)
@@ -3347,40 +2430,28 @@ libstubgss.la: $(libstubgss_la_OBJECTS) $(libstubgss_la_DEPENDENCIES) $(EXTRA_li
../../lib/$(DEPDIR)/$(am__dirstamp):
@$(MKDIR_P) ../../lib/$(DEPDIR)
@: > ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/chkdecimalpoint-mprintf.$(OBJEXT): \
- ../../lib/$(am__dirstamp) ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/chkdecimalpoint-dynbuf.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/chkdecimalpoint-strdup.$(OBJEXT): ../../lib/$(am__dirstamp) \
+../../lib/curl_gethostname.$(OBJEXT): ../../lib/$(am__dirstamp) \
../../lib/$(DEPDIR)/$(am__dirstamp)
-chkdecimalpoint$(EXEEXT): $(chkdecimalpoint_OBJECTS) $(chkdecimalpoint_DEPENDENCIES) $(EXTRA_chkdecimalpoint_DEPENDENCIES)
- @rm -f chkdecimalpoint$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(chkdecimalpoint_OBJECTS) $(chkdecimalpoint_LDADD) $(LIBS)
-../../lib/chkhostname-curl_gethostname.$(OBJEXT): \
- ../../lib/$(am__dirstamp) ../../lib/$(DEPDIR)/$(am__dirstamp)
-
chkhostname$(EXEEXT): $(chkhostname_OBJECTS) $(chkhostname_DEPENDENCIES) $(EXTRA_chkhostname_DEPENDENCIES)
@rm -f chkhostname$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(chkhostname_OBJECTS) $(chkhostname_LDADD) $(LIBS)
-../../lib/lib1156-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
+../../lib/timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1156-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
+../../lib/warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
../../lib/$(DEPDIR)/$(am__dirstamp)
lib1156$(EXEEXT): $(lib1156_OBJECTS) $(lib1156_DEPENDENCIES) $(EXTRA_lib1156_DEPENDENCIES)
@rm -f lib1156$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1156_OBJECTS) $(lib1156_LDADD) $(LIBS)
-../../lib/lib1500-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
+
+lib1301$(EXEEXT): $(lib1301_OBJECTS) $(lib1301_DEPENDENCIES) $(EXTRA_lib1301_DEPENDENCIES)
+ @rm -f lib1301$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib1301_OBJECTS) $(lib1301_LDADD) $(LIBS)
lib1500$(EXEEXT): $(lib1500_OBJECTS) $(lib1500_DEPENDENCIES) $(EXTRA_lib1500_DEPENDENCIES)
@rm -f lib1500$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1500_OBJECTS) $(lib1500_LDADD) $(LIBS)
-../../lib/lib1501-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1501-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1501$(EXEEXT): $(lib1501_OBJECTS) $(lib1501_DEPENDENCIES) $(EXTRA_lib1501_DEPENDENCIES)
@rm -f lib1501$(EXEEXT)
@@ -3417,100 +2488,54 @@ lib1504$(EXEEXT): $(lib1504_OBJECTS) $(lib1504_DEPENDENCIES) $(EXTRA_lib1504_DEP
lib1505$(EXEEXT): $(lib1505_OBJECTS) $(lib1505_DEPENDENCIES) $(EXTRA_lib1505_DEPENDENCIES)
@rm -f lib1505$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1505_OBJECTS) $(lib1505_LDADD) $(LIBS)
-../../lib/lib1506-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1506-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1506$(EXEEXT): $(lib1506_OBJECTS) $(lib1506_DEPENDENCIES) $(EXTRA_lib1506_DEPENDENCIES)
@rm -f lib1506$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1506_OBJECTS) $(lib1506_LDADD) $(LIBS)
-../../lib/lib1507-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1507-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1507$(EXEEXT): $(lib1507_OBJECTS) $(lib1507_DEPENDENCIES) $(EXTRA_lib1507_DEPENDENCIES)
@rm -f lib1507$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1507_OBJECTS) $(lib1507_LDADD) $(LIBS)
-../../lib/lib1508-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1508-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1508$(EXEEXT): $(lib1508_OBJECTS) $(lib1508_DEPENDENCIES) $(EXTRA_lib1508_DEPENDENCIES)
@rm -f lib1508$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1508_OBJECTS) $(lib1508_LDADD) $(LIBS)
-../../lib/lib1509-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1509-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1509$(EXEEXT): $(lib1509_OBJECTS) $(lib1509_DEPENDENCIES) $(EXTRA_lib1509_DEPENDENCIES)
@rm -f lib1509$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1509_OBJECTS) $(lib1509_LDADD) $(LIBS)
-../../lib/lib1510-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1510-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1510$(EXEEXT): $(lib1510_OBJECTS) $(lib1510_DEPENDENCIES) $(EXTRA_lib1510_DEPENDENCIES)
@rm -f lib1510$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1510_OBJECTS) $(lib1510_LDADD) $(LIBS)
-../../lib/lib1511-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1511-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1511$(EXEEXT): $(lib1511_OBJECTS) $(lib1511_DEPENDENCIES) $(EXTRA_lib1511_DEPENDENCIES)
@rm -f lib1511$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1511_OBJECTS) $(lib1511_LDADD) $(LIBS)
-../../lib/lib1512-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1512-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1512$(EXEEXT): $(lib1512_OBJECTS) $(lib1512_DEPENDENCIES) $(EXTRA_lib1512_DEPENDENCIES)
@rm -f lib1512$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1512_OBJECTS) $(lib1512_LDADD) $(LIBS)
-../../lib/lib1513-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1513-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1513$(EXEEXT): $(lib1513_OBJECTS) $(lib1513_DEPENDENCIES) $(EXTRA_lib1513_DEPENDENCIES)
@rm -f lib1513$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1513_OBJECTS) $(lib1513_LDADD) $(LIBS)
-../../lib/lib1514-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1514-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1514$(EXEEXT): $(lib1514_OBJECTS) $(lib1514_DEPENDENCIES) $(EXTRA_lib1514_DEPENDENCIES)
@rm -f lib1514$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1514_OBJECTS) $(lib1514_LDADD) $(LIBS)
-../../lib/lib1515-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1515-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1515$(EXEEXT): $(lib1515_OBJECTS) $(lib1515_DEPENDENCIES) $(EXTRA_lib1515_DEPENDENCIES)
@rm -f lib1515$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1515_OBJECTS) $(lib1515_LDADD) $(LIBS)
-../../lib/lib1517-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1517$(EXEEXT): $(lib1517_OBJECTS) $(lib1517_DEPENDENCIES) $(EXTRA_lib1517_DEPENDENCIES)
@rm -f lib1517$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1517_OBJECTS) $(lib1517_LDADD) $(LIBS)
-../../lib/lib1518-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1518$(EXEEXT): $(lib1518_OBJECTS) $(lib1518_DEPENDENCIES) $(EXTRA_lib1518_DEPENDENCIES)
@rm -f lib1518$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1518_OBJECTS) $(lib1518_LDADD) $(LIBS)
-../../lib/lib1520-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1520$(EXEEXT): $(lib1520_OBJECTS) $(lib1520_DEPENDENCIES) $(EXTRA_lib1520_DEPENDENCIES)
@rm -f lib1520$(EXEEXT)
@@ -3521,126 +2546,66 @@ lib1520$(EXEEXT): $(lib1520_OBJECTS) $(lib1520_DEPENDENCIES) $(EXTRA_lib1520_DEP
lib1521$(EXEEXT): $(lib1521_OBJECTS) $(lib1521_DEPENDENCIES) $(EXTRA_lib1521_DEPENDENCIES)
@rm -f lib1521$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1521_OBJECTS) $(lib1521_LDADD) $(LIBS)
-../../lib/lib1522-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1522$(EXEEXT): $(lib1522_OBJECTS) $(lib1522_DEPENDENCIES) $(EXTRA_lib1522_DEPENDENCIES)
@rm -f lib1522$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1522_OBJECTS) $(lib1522_LDADD) $(LIBS)
-../../lib/lib1523-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1523$(EXEEXT): $(lib1523_OBJECTS) $(lib1523_DEPENDENCIES) $(EXTRA_lib1523_DEPENDENCIES)
@rm -f lib1523$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1523_OBJECTS) $(lib1523_LDADD) $(LIBS)
-../../lib/lib1525-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1525-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1525$(EXEEXT): $(lib1525_OBJECTS) $(lib1525_DEPENDENCIES) $(EXTRA_lib1525_DEPENDENCIES)
@rm -f lib1525$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1525_OBJECTS) $(lib1525_LDADD) $(LIBS)
-../../lib/lib1526-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1526-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1526$(EXEEXT): $(lib1526_OBJECTS) $(lib1526_DEPENDENCIES) $(EXTRA_lib1526_DEPENDENCIES)
@rm -f lib1526$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1526_OBJECTS) $(lib1526_LDADD) $(LIBS)
-../../lib/lib1527-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1527-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1527$(EXEEXT): $(lib1527_OBJECTS) $(lib1527_DEPENDENCIES) $(EXTRA_lib1527_DEPENDENCIES)
@rm -f lib1527$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1527_OBJECTS) $(lib1527_LDADD) $(LIBS)
-../../lib/lib1528-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1528-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1528$(EXEEXT): $(lib1528_OBJECTS) $(lib1528_DEPENDENCIES) $(EXTRA_lib1528_DEPENDENCIES)
@rm -f lib1528$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1528_OBJECTS) $(lib1528_LDADD) $(LIBS)
-../../lib/lib1529-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1529-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1529$(EXEEXT): $(lib1529_OBJECTS) $(lib1529_DEPENDENCIES) $(EXTRA_lib1529_DEPENDENCIES)
@rm -f lib1529$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1529_OBJECTS) $(lib1529_LDADD) $(LIBS)
-../../lib/lib1530-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1530-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1530$(EXEEXT): $(lib1530_OBJECTS) $(lib1530_DEPENDENCIES) $(EXTRA_lib1530_DEPENDENCIES)
@rm -f lib1530$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1530_OBJECTS) $(lib1530_LDADD) $(LIBS)
-../../lib/lib1531-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1531-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1531$(EXEEXT): $(lib1531_OBJECTS) $(lib1531_DEPENDENCIES) $(EXTRA_lib1531_DEPENDENCIES)
@rm -f lib1531$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1531_OBJECTS) $(lib1531_LDADD) $(LIBS)
-../../lib/lib1532-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1532-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1532$(EXEEXT): $(lib1532_OBJECTS) $(lib1532_DEPENDENCIES) $(EXTRA_lib1532_DEPENDENCIES)
@rm -f lib1532$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1532_OBJECTS) $(lib1532_LDADD) $(LIBS)
-../../lib/lib1533-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1533-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1533$(EXEEXT): $(lib1533_OBJECTS) $(lib1533_DEPENDENCIES) $(EXTRA_lib1533_DEPENDENCIES)
@rm -f lib1533$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1533_OBJECTS) $(lib1533_LDADD) $(LIBS)
-../../lib/lib1534-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1534-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1534$(EXEEXT): $(lib1534_OBJECTS) $(lib1534_DEPENDENCIES) $(EXTRA_lib1534_DEPENDENCIES)
@rm -f lib1534$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1534_OBJECTS) $(lib1534_LDADD) $(LIBS)
-../../lib/lib1535-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1535-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1535$(EXEEXT): $(lib1535_OBJECTS) $(lib1535_DEPENDENCIES) $(EXTRA_lib1535_DEPENDENCIES)
@rm -f lib1535$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1535_OBJECTS) $(lib1535_LDADD) $(LIBS)
-../../lib/lib1536-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1536-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1536$(EXEEXT): $(lib1536_OBJECTS) $(lib1536_DEPENDENCIES) $(EXTRA_lib1536_DEPENDENCIES)
@rm -f lib1536$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1536_OBJECTS) $(lib1536_LDADD) $(LIBS)
-../../lib/lib1537-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1537-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1537$(EXEEXT): $(lib1537_OBJECTS) $(lib1537_DEPENDENCIES) $(EXTRA_lib1537_DEPENDENCIES)
@rm -f lib1537$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1537_OBJECTS) $(lib1537_LDADD) $(LIBS)
-../../lib/lib1538-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1538-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1538$(EXEEXT): $(lib1538_OBJECTS) $(lib1538_DEPENDENCIES) $(EXTRA_lib1538_DEPENDENCIES)
@rm -f lib1538$(EXEEXT)
@@ -3653,18 +2618,10 @@ lib1538$(EXEEXT): $(lib1538_OBJECTS) $(lib1538_DEPENDENCIES) $(EXTRA_lib1538_DEP
lib1539$(EXEEXT): $(lib1539_OBJECTS) $(lib1539_DEPENDENCIES) $(EXTRA_lib1539_DEPENDENCIES)
@rm -f lib1539$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1539_OBJECTS) $(lib1539_LDADD) $(LIBS)
-../../lib/lib1540-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1540-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1540$(EXEEXT): $(lib1540_OBJECTS) $(lib1540_DEPENDENCIES) $(EXTRA_lib1540_DEPENDENCIES)
@rm -f lib1540$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1540_OBJECTS) $(lib1540_LDADD) $(LIBS)
-../../lib/lib1542-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1542-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1542$(EXEEXT): $(lib1542_OBJECTS) $(lib1542_DEPENDENCIES) $(EXTRA_lib1542_DEPENDENCIES)
@rm -f lib1542$(EXEEXT)
@@ -3675,64 +2632,44 @@ lib1542$(EXEEXT): $(lib1542_OBJECTS) $(lib1542_DEPENDENCIES) $(EXTRA_lib1542_DEP
lib1543$(EXEEXT): $(lib1543_OBJECTS) $(lib1543_DEPENDENCIES) $(EXTRA_lib1543_DEPENDENCIES)
@rm -f lib1543$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1543_OBJECTS) $(lib1543_LDADD) $(LIBS)
-../../lib/lib1550-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
+../../lib/lib1545-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
../../lib/$(DEPDIR)/$(am__dirstamp)
+lib1545$(EXEEXT): $(lib1545_OBJECTS) $(lib1545_DEPENDENCIES) $(EXTRA_lib1545_DEPENDENCIES)
+ @rm -f lib1545$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib1545_OBJECTS) $(lib1545_LDADD) $(LIBS)
+
lib1550$(EXEEXT): $(lib1550_OBJECTS) $(lib1550_DEPENDENCIES) $(EXTRA_lib1550_DEPENDENCIES)
@rm -f lib1550$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1550_OBJECTS) $(lib1550_LDADD) $(LIBS)
-../../lib/lib1551-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1551$(EXEEXT): $(lib1551_OBJECTS) $(lib1551_DEPENDENCIES) $(EXTRA_lib1551_DEPENDENCIES)
@rm -f lib1551$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1551_OBJECTS) $(lib1551_LDADD) $(LIBS)
-../../lib/lib1552-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1552$(EXEEXT): $(lib1552_OBJECTS) $(lib1552_DEPENDENCIES) $(EXTRA_lib1552_DEPENDENCIES)
@rm -f lib1552$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1552_OBJECTS) $(lib1552_LDADD) $(LIBS)
-../../lib/lib1553-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1553$(EXEEXT): $(lib1553_OBJECTS) $(lib1553_DEPENDENCIES) $(EXTRA_lib1553_DEPENDENCIES)
@rm -f lib1553$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1553_OBJECTS) $(lib1553_LDADD) $(LIBS)
-../../lib/lib1554-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1554$(EXEEXT): $(lib1554_OBJECTS) $(lib1554_DEPENDENCIES) $(EXTRA_lib1554_DEPENDENCIES)
@rm -f lib1554$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1554_OBJECTS) $(lib1554_LDADD) $(LIBS)
-../../lib/lib1555-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1555-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1555$(EXEEXT): $(lib1555_OBJECTS) $(lib1555_DEPENDENCIES) $(EXTRA_lib1555_DEPENDENCIES)
@rm -f lib1555$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1555_OBJECTS) $(lib1555_LDADD) $(LIBS)
-../../lib/lib1556-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1556-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1556$(EXEEXT): $(lib1556_OBJECTS) $(lib1556_DEPENDENCIES) $(EXTRA_lib1556_DEPENDENCIES)
@rm -f lib1556$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1556_OBJECTS) $(lib1556_LDADD) $(LIBS)
-../../lib/lib1557-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1557-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1557$(EXEEXT): $(lib1557_OBJECTS) $(lib1557_DEPENDENCIES) $(EXTRA_lib1557_DEPENDENCIES)
@rm -f lib1557$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1557_OBJECTS) $(lib1557_LDADD) $(LIBS)
-../../lib/timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1558$(EXEEXT): $(lib1558_OBJECTS) $(lib1558_DEPENDENCIES) $(EXTRA_lib1558_DEPENDENCIES)
@rm -f lib1558$(EXEEXT)
@@ -3745,52 +2682,30 @@ lib1559$(EXEEXT): $(lib1559_OBJECTS) $(lib1559_DEPENDENCIES) $(EXTRA_lib1559_DEP
lib1560$(EXEEXT): $(lib1560_OBJECTS) $(lib1560_DEPENDENCIES) $(EXTRA_lib1560_DEPENDENCIES)
@rm -f lib1560$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1560_OBJECTS) $(lib1560_LDADD) $(LIBS)
-../../lib/lib1564-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1564-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1564$(EXEEXT): $(lib1564_OBJECTS) $(lib1564_DEPENDENCIES) $(EXTRA_lib1564_DEPENDENCIES)
@rm -f lib1564$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1564_OBJECTS) $(lib1564_LDADD) $(LIBS)
-../../lib/lib1565-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1565-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1565$(EXEEXT): $(lib1565_OBJECTS) $(lib1565_DEPENDENCIES) $(EXTRA_lib1565_DEPENDENCIES)
@rm -f lib1565$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1565_OBJECTS) $(lib1565_LDADD) $(LIBS)
-../../lib/lib1567-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1567$(EXEEXT): $(lib1567_OBJECTS) $(lib1567_DEPENDENCIES) $(EXTRA_lib1567_DEPENDENCIES)
@rm -f lib1567$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1567_OBJECTS) $(lib1567_LDADD) $(LIBS)
-../../lib/lib1568-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1568$(EXEEXT): $(lib1568_OBJECTS) $(lib1568_DEPENDENCIES) $(EXTRA_lib1568_DEPENDENCIES)
@rm -f lib1568$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1568_OBJECTS) $(lib1568_LDADD) $(LIBS)
-../../lib/lib1569-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1569$(EXEEXT): $(lib1569_OBJECTS) $(lib1569_DEPENDENCIES) $(EXTRA_lib1569_DEPENDENCIES)
@rm -f lib1569$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1569_OBJECTS) $(lib1569_LDADD) $(LIBS)
-../../lib/lib1591-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1591-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1591$(EXEEXT): $(lib1591_OBJECTS) $(lib1591_DEPENDENCIES) $(EXTRA_lib1591_DEPENDENCIES)
@rm -f lib1591$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1591_OBJECTS) $(lib1591_LDADD) $(LIBS)
-../../lib/lib1592-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1592-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1592$(EXEEXT): $(lib1592_OBJECTS) $(lib1592_DEPENDENCIES) $(EXTRA_lib1592_DEPENDENCIES)
@rm -f lib1592$(EXEEXT)
@@ -3815,82 +2730,54 @@ lib1596$(EXEEXT): $(lib1596_OBJECTS) $(lib1596_DEPENDENCIES) $(EXTRA_lib1596_DEP
lib1597$(EXEEXT): $(lib1597_OBJECTS) $(lib1597_DEPENDENCIES) $(EXTRA_lib1597_DEPENDENCIES)
@rm -f lib1597$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1597_OBJECTS) $(lib1597_LDADD) $(LIBS)
-../../lib/lib1905-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1905-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
+
+lib1662$(EXEEXT): $(lib1662_OBJECTS) $(lib1662_DEPENDENCIES) $(EXTRA_lib1662_DEPENDENCIES)
+ @rm -f lib1662$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib1662_OBJECTS) $(lib1662_LDADD) $(LIBS)
+
+lib1900$(EXEEXT): $(lib1900_OBJECTS) $(lib1900_DEPENDENCIES) $(EXTRA_lib1900_DEPENDENCIES)
+ @rm -f lib1900$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib1900_OBJECTS) $(lib1900_LDADD) $(LIBS)
+
+lib1903$(EXEEXT): $(lib1903_OBJECTS) $(lib1903_DEPENDENCIES) $(EXTRA_lib1903_DEPENDENCIES)
+ @rm -f lib1903$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib1903_OBJECTS) $(lib1903_LDADD) $(LIBS)
lib1905$(EXEEXT): $(lib1905_OBJECTS) $(lib1905_DEPENDENCIES) $(EXTRA_lib1905_DEPENDENCIES)
@rm -f lib1905$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1905_OBJECTS) $(lib1905_LDADD) $(LIBS)
-../../lib/lib1906-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1906-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1906$(EXEEXT): $(lib1906_OBJECTS) $(lib1906_DEPENDENCIES) $(EXTRA_lib1906_DEPENDENCIES)
@rm -f lib1906$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1906_OBJECTS) $(lib1906_LDADD) $(LIBS)
-../../lib/lib1907-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1907-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1907$(EXEEXT): $(lib1907_OBJECTS) $(lib1907_DEPENDENCIES) $(EXTRA_lib1907_DEPENDENCIES)
@rm -f lib1907$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1907_OBJECTS) $(lib1907_LDADD) $(LIBS)
-../../lib/lib1908-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1908-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1908$(EXEEXT): $(lib1908_OBJECTS) $(lib1908_DEPENDENCIES) $(EXTRA_lib1908_DEPENDENCIES)
@rm -f lib1908$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1908_OBJECTS) $(lib1908_LDADD) $(LIBS)
-../../lib/lib1910-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1910-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1910$(EXEEXT): $(lib1910_OBJECTS) $(lib1910_DEPENDENCIES) $(EXTRA_lib1910_DEPENDENCIES)
@rm -f lib1910$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1910_OBJECTS) $(lib1910_LDADD) $(LIBS)
-../../lib/lib1911-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1911-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1911$(EXEEXT): $(lib1911_OBJECTS) $(lib1911_DEPENDENCIES) $(EXTRA_lib1911_DEPENDENCIES)
@rm -f lib1911$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1911_OBJECTS) $(lib1911_LDADD) $(LIBS)
-../../lib/lib1912-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1912-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1912$(EXEEXT): $(lib1912_OBJECTS) $(lib1912_DEPENDENCIES) $(EXTRA_lib1912_DEPENDENCIES)
@rm -f lib1912$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1912_OBJECTS) $(lib1912_LDADD) $(LIBS)
-../../lib/lib1913-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1913-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1913$(EXEEXT): $(lib1913_OBJECTS) $(lib1913_DEPENDENCIES) $(EXTRA_lib1913_DEPENDENCIES)
@rm -f lib1913$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1913_OBJECTS) $(lib1913_LDADD) $(LIBS)
-../../lib/lib1915-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1915-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1915$(EXEEXT): $(lib1915_OBJECTS) $(lib1915_DEPENDENCIES) $(EXTRA_lib1915_DEPENDENCIES)
@rm -f lib1915$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1915_OBJECTS) $(lib1915_LDADD) $(LIBS)
-../../lib/lib1916-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1916-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1916$(EXEEXT): $(lib1916_OBJECTS) $(lib1916_DEPENDENCIES) $(EXTRA_lib1916_DEPENDENCIES)
@rm -f lib1916$(EXEEXT)
@@ -3903,80 +2790,46 @@ lib1916$(EXEEXT): $(lib1916_OBJECTS) $(lib1916_DEPENDENCIES) $(EXTRA_lib1916_DEP
lib1917$(EXEEXT): $(lib1917_OBJECTS) $(lib1917_DEPENDENCIES) $(EXTRA_lib1917_DEPENDENCIES)
@rm -f lib1917$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1917_OBJECTS) $(lib1917_LDADD) $(LIBS)
-../../lib/lib1918-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1918-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1918$(EXEEXT): $(lib1918_OBJECTS) $(lib1918_DEPENDENCIES) $(EXTRA_lib1918_DEPENDENCIES)
@rm -f lib1918$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1918_OBJECTS) $(lib1918_LDADD) $(LIBS)
-../../lib/lib1919-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1919-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1919$(EXEEXT): $(lib1919_OBJECTS) $(lib1919_DEPENDENCIES) $(EXTRA_lib1919_DEPENDENCIES)
@rm -f lib1919$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1919_OBJECTS) $(lib1919_LDADD) $(LIBS)
-../../lib/lib1933-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1933-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1933$(EXEEXT): $(lib1933_OBJECTS) $(lib1933_DEPENDENCIES) $(EXTRA_lib1933_DEPENDENCIES)
@rm -f lib1933$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1933_OBJECTS) $(lib1933_LDADD) $(LIBS)
-../../lib/lib1934-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1934-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1934$(EXEEXT): $(lib1934_OBJECTS) $(lib1934_DEPENDENCIES) $(EXTRA_lib1934_DEPENDENCIES)
@rm -f lib1934$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1934_OBJECTS) $(lib1934_LDADD) $(LIBS)
-../../lib/lib1935-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1935-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1935$(EXEEXT): $(lib1935_OBJECTS) $(lib1935_DEPENDENCIES) $(EXTRA_lib1935_DEPENDENCIES)
@rm -f lib1935$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1935_OBJECTS) $(lib1935_LDADD) $(LIBS)
-../../lib/lib1936-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1936-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1936$(EXEEXT): $(lib1936_OBJECTS) $(lib1936_DEPENDENCIES) $(EXTRA_lib1936_DEPENDENCIES)
@rm -f lib1936$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1936_OBJECTS) $(lib1936_LDADD) $(LIBS)
-../../lib/lib1937-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1937$(EXEEXT): $(lib1937_OBJECTS) $(lib1937_DEPENDENCIES) $(EXTRA_lib1937_DEPENDENCIES)
@rm -f lib1937$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1937_OBJECTS) $(lib1937_LDADD) $(LIBS)
-../../lib/lib1938-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1938$(EXEEXT): $(lib1938_OBJECTS) $(lib1938_DEPENDENCIES) $(EXTRA_lib1938_DEPENDENCIES)
@rm -f lib1938$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1938_OBJECTS) $(lib1938_LDADD) $(LIBS)
-../../lib/lib1939-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1939$(EXEEXT): $(lib1939_OBJECTS) $(lib1939_DEPENDENCIES) $(EXTRA_lib1939_DEPENDENCIES)
@rm -f lib1939$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1939_OBJECTS) $(lib1939_LDADD) $(LIBS)
-../../lib/lib1940-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1940$(EXEEXT): $(lib1940_OBJECTS) $(lib1940_DEPENDENCIES) $(EXTRA_lib1940_DEPENDENCIES)
@rm -f lib1940$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1940_OBJECTS) $(lib1940_LDADD) $(LIBS)
-../../lib/lib1945-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1945$(EXEEXT): $(lib1945_OBJECTS) $(lib1945_DEPENDENCIES) $(EXTRA_lib1945_DEPENDENCIES)
@rm -f lib1945$(EXEEXT)
@@ -3987,27 +2840,67 @@ lib1945$(EXEEXT): $(lib1945_OBJECTS) $(lib1945_DEPENDENCIES) $(EXTRA_lib1945_DEP
lib1946$(EXEEXT): $(lib1946_OBJECTS) $(lib1946_DEPENDENCIES) $(EXTRA_lib1946_DEPENDENCIES)
@rm -f lib1946$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1946_OBJECTS) $(lib1946_LDADD) $(LIBS)
-../../lib/lib1947-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1947$(EXEEXT): $(lib1947_OBJECTS) $(lib1947_DEPENDENCIES) $(EXTRA_lib1947_DEPENDENCIES)
@rm -f lib1947$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1947_OBJECTS) $(lib1947_LDADD) $(LIBS)
-../../lib/lib1948-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1948$(EXEEXT): $(lib1948_OBJECTS) $(lib1948_DEPENDENCIES) $(EXTRA_lib1948_DEPENDENCIES)
@rm -f lib1948$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1948_OBJECTS) $(lib1948_LDADD) $(LIBS)
-../../lib/lib1955-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib1955-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib1955$(EXEEXT): $(lib1955_OBJECTS) $(lib1955_DEPENDENCIES) $(EXTRA_lib1955_DEPENDENCIES)
@rm -f lib1955$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib1955_OBJECTS) $(lib1955_LDADD) $(LIBS)
+lib1956$(EXEEXT): $(lib1956_OBJECTS) $(lib1956_DEPENDENCIES) $(EXTRA_lib1956_DEPENDENCIES)
+ @rm -f lib1956$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib1956_OBJECTS) $(lib1956_LDADD) $(LIBS)
+
+lib1957$(EXEEXT): $(lib1957_OBJECTS) $(lib1957_DEPENDENCIES) $(EXTRA_lib1957_DEPENDENCIES)
+ @rm -f lib1957$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib1957_OBJECTS) $(lib1957_LDADD) $(LIBS)
+
+lib1958$(EXEEXT): $(lib1958_OBJECTS) $(lib1958_DEPENDENCIES) $(EXTRA_lib1958_DEPENDENCIES)
+ @rm -f lib1958$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib1958_OBJECTS) $(lib1958_LDADD) $(LIBS)
+
+lib1959$(EXEEXT): $(lib1959_OBJECTS) $(lib1959_DEPENDENCIES) $(EXTRA_lib1959_DEPENDENCIES)
+ @rm -f lib1959$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib1959_OBJECTS) $(lib1959_LDADD) $(LIBS)
+
+lib1960$(EXEEXT): $(lib1960_OBJECTS) $(lib1960_DEPENDENCIES) $(EXTRA_lib1960_DEPENDENCIES)
+ @rm -f lib1960$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib1960_OBJECTS) $(lib1960_LDADD) $(LIBS)
+
+lib1964$(EXEEXT): $(lib1964_OBJECTS) $(lib1964_DEPENDENCIES) $(EXTRA_lib1964_DEPENDENCIES)
+ @rm -f lib1964$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib1964_OBJECTS) $(lib1964_LDADD) $(LIBS)
+
+lib1970$(EXEEXT): $(lib1970_OBJECTS) $(lib1970_DEPENDENCIES) $(EXTRA_lib1970_DEPENDENCIES)
+ @rm -f lib1970$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib1970_OBJECTS) $(lib1970_LDADD) $(LIBS)
+
+lib1971$(EXEEXT): $(lib1971_OBJECTS) $(lib1971_DEPENDENCIES) $(EXTRA_lib1971_DEPENDENCIES)
+ @rm -f lib1971$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib1971_OBJECTS) $(lib1971_LDADD) $(LIBS)
+
+lib1972$(EXEEXT): $(lib1972_OBJECTS) $(lib1972_DEPENDENCIES) $(EXTRA_lib1972_DEPENDENCIES)
+ @rm -f lib1972$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib1972_OBJECTS) $(lib1972_LDADD) $(LIBS)
+
+lib1973$(EXEEXT): $(lib1973_OBJECTS) $(lib1973_DEPENDENCIES) $(EXTRA_lib1973_DEPENDENCIES)
+ @rm -f lib1973$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib1973_OBJECTS) $(lib1973_LDADD) $(LIBS)
+
+lib1974$(EXEEXT): $(lib1974_OBJECTS) $(lib1974_DEPENDENCIES) $(EXTRA_lib1974_DEPENDENCIES)
+ @rm -f lib1974$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib1974_OBJECTS) $(lib1974_LDADD) $(LIBS)
+
+lib1975$(EXEEXT): $(lib1975_OBJECTS) $(lib1975_DEPENDENCIES) $(EXTRA_lib1975_DEPENDENCIES)
+ @rm -f lib1975$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib1975_OBJECTS) $(lib1975_LDADD) $(LIBS)
+
lib2301$(EXEEXT): $(lib2301_OBJECTS) $(lib2301_DEPENDENCIES) $(EXTRA_lib2301_DEPENDENCIES)
@rm -f lib2301$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib2301_OBJECTS) $(lib2301_LDADD) $(LIBS)
@@ -4015,204 +2908,160 @@ lib2301$(EXEEXT): $(lib2301_OBJECTS) $(lib2301_DEPENDENCIES) $(EXTRA_lib2301_DEP
lib2302$(EXEEXT): $(lib2302_OBJECTS) $(lib2302_DEPENDENCIES) $(EXTRA_lib2302_DEPENDENCIES)
@rm -f lib2302$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib2302_OBJECTS) $(lib2302_LDADD) $(LIBS)
-../../lib/lib3010-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib3010-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
+
+lib2304$(EXEEXT): $(lib2304_OBJECTS) $(lib2304_DEPENDENCIES) $(EXTRA_lib2304_DEPENDENCIES)
+ @rm -f lib2304$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib2304_OBJECTS) $(lib2304_LDADD) $(LIBS)
+../../lib/curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
../../lib/$(DEPDIR)/$(am__dirstamp)
+lib2305$(EXEEXT): $(lib2305_OBJECTS) $(lib2305_DEPENDENCIES) $(EXTRA_lib2305_DEPENDENCIES)
+ @rm -f lib2305$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib2305_OBJECTS) $(lib2305_LDADD) $(LIBS)
+
+lib2306$(EXEEXT): $(lib2306_OBJECTS) $(lib2306_DEPENDENCIES) $(EXTRA_lib2306_DEPENDENCIES)
+ @rm -f lib2306$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib2306_OBJECTS) $(lib2306_LDADD) $(LIBS)
+
+lib2402$(EXEEXT): $(lib2402_OBJECTS) $(lib2402_DEPENDENCIES) $(EXTRA_lib2402_DEPENDENCIES)
+ @rm -f lib2402$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib2402_OBJECTS) $(lib2402_LDADD) $(LIBS)
+
+lib2404$(EXEEXT): $(lib2404_OBJECTS) $(lib2404_DEPENDENCIES) $(EXTRA_lib2404_DEPENDENCIES)
+ @rm -f lib2404$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib2404_OBJECTS) $(lib2404_LDADD) $(LIBS)
+
+lib2502$(EXEEXT): $(lib2502_OBJECTS) $(lib2502_DEPENDENCIES) $(EXTRA_lib2502_DEPENDENCIES)
+ @rm -f lib2502$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib2502_OBJECTS) $(lib2502_LDADD) $(LIBS)
+
lib3010$(EXEEXT): $(lib3010_OBJECTS) $(lib3010_DEPENDENCIES) $(EXTRA_lib3010_DEPENDENCIES)
@rm -f lib3010$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib3010_OBJECTS) $(lib3010_LDADD) $(LIBS)
-../../lib/lib3025-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib3025-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib3025$(EXEEXT): $(lib3025_OBJECTS) $(lib3025_DEPENDENCIES) $(EXTRA_lib3025_DEPENDENCIES)
@rm -f lib3025$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib3025_OBJECTS) $(lib3025_LDADD) $(LIBS)
-../../lib/lib3026-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib3026-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib3026$(EXEEXT): $(lib3026_OBJECTS) $(lib3026_DEPENDENCIES) $(EXTRA_lib3026_DEPENDENCIES)
@rm -f lib3026$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib3026_OBJECTS) $(lib3026_LDADD) $(LIBS)
-../../lib/lib3027-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib3027-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib3027$(EXEEXT): $(lib3027_OBJECTS) $(lib3027_DEPENDENCIES) $(EXTRA_lib3027_DEPENDENCIES)
@rm -f lib3027$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib3027_OBJECTS) $(lib3027_LDADD) $(LIBS)
-../../lib/lib500-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib500-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
+
+lib3100$(EXEEXT): $(lib3100_OBJECTS) $(lib3100_DEPENDENCIES) $(EXTRA_lib3100_DEPENDENCIES)
+ @rm -f lib3100$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib3100_OBJECTS) $(lib3100_LDADD) $(LIBS)
+
+lib3101$(EXEEXT): $(lib3101_OBJECTS) $(lib3101_DEPENDENCIES) $(EXTRA_lib3101_DEPENDENCIES)
+ @rm -f lib3101$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib3101_OBJECTS) $(lib3101_LDADD) $(LIBS)
+
+lib3102$(EXEEXT): $(lib3102_OBJECTS) $(lib3102_DEPENDENCIES) $(EXTRA_lib3102_DEPENDENCIES)
+ @rm -f lib3102$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib3102_OBJECTS) $(lib3102_LDADD) $(LIBS)
+
+lib3103$(EXEEXT): $(lib3103_OBJECTS) $(lib3103_DEPENDENCIES) $(EXTRA_lib3103_DEPENDENCIES)
+ @rm -f lib3103$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(lib3103_OBJECTS) $(lib3103_LDADD) $(LIBS)
lib500$(EXEEXT): $(lib500_OBJECTS) $(lib500_DEPENDENCIES) $(EXTRA_lib500_DEPENDENCIES)
@rm -f lib500$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib500_OBJECTS) $(lib500_LDADD) $(LIBS)
-../../lib/lib501-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib501$(EXEEXT): $(lib501_OBJECTS) $(lib501_DEPENDENCIES) $(EXTRA_lib501_DEPENDENCIES)
@rm -f lib501$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib501_OBJECTS) $(lib501_LDADD) $(LIBS)
-../../lib/lib502-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib502-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib502$(EXEEXT): $(lib502_OBJECTS) $(lib502_DEPENDENCIES) $(EXTRA_lib502_DEPENDENCIES)
@rm -f lib502$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib502_OBJECTS) $(lib502_LDADD) $(LIBS)
-../../lib/lib503-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib503-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib503$(EXEEXT): $(lib503_OBJECTS) $(lib503_DEPENDENCIES) $(EXTRA_lib503_DEPENDENCIES)
@rm -f lib503$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib503_OBJECTS) $(lib503_LDADD) $(LIBS)
-../../lib/lib504-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib504-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib504$(EXEEXT): $(lib504_OBJECTS) $(lib504_DEPENDENCIES) $(EXTRA_lib504_DEPENDENCIES)
@rm -f lib504$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib504_OBJECTS) $(lib504_LDADD) $(LIBS)
-../../lib/lib505-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib505-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib505$(EXEEXT): $(lib505_OBJECTS) $(lib505_DEPENDENCIES) $(EXTRA_lib505_DEPENDENCIES)
@rm -f lib505$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib505_OBJECTS) $(lib505_LDADD) $(LIBS)
-../../lib/lib506-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib506$(EXEEXT): $(lib506_OBJECTS) $(lib506_DEPENDENCIES) $(EXTRA_lib506_DEPENDENCIES)
@rm -f lib506$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib506_OBJECTS) $(lib506_LDADD) $(LIBS)
-../../lib/lib507-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib507-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib507$(EXEEXT): $(lib507_OBJECTS) $(lib507_DEPENDENCIES) $(EXTRA_lib507_DEPENDENCIES)
@rm -f lib507$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib507_OBJECTS) $(lib507_LDADD) $(LIBS)
-../../lib/lib508-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib508$(EXEEXT): $(lib508_OBJECTS) $(lib508_DEPENDENCIES) $(EXTRA_lib508_DEPENDENCIES)
@rm -f lib508$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib508_OBJECTS) $(lib508_LDADD) $(LIBS)
-../../lib/lib509-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib509$(EXEEXT): $(lib509_OBJECTS) $(lib509_DEPENDENCIES) $(EXTRA_lib509_DEPENDENCIES)
@rm -f lib509$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib509_OBJECTS) $(lib509_LDADD) $(LIBS)
-../../lib/lib510-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib510$(EXEEXT): $(lib510_OBJECTS) $(lib510_DEPENDENCIES) $(EXTRA_lib510_DEPENDENCIES)
@rm -f lib510$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib510_OBJECTS) $(lib510_LDADD) $(LIBS)
-../../lib/lib511-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib511$(EXEEXT): $(lib511_OBJECTS) $(lib511_DEPENDENCIES) $(EXTRA_lib511_DEPENDENCIES)
@rm -f lib511$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib511_OBJECTS) $(lib511_LDADD) $(LIBS)
-../../lib/lib512-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib512$(EXEEXT): $(lib512_OBJECTS) $(lib512_DEPENDENCIES) $(EXTRA_lib512_DEPENDENCIES)
@rm -f lib512$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib512_OBJECTS) $(lib512_LDADD) $(LIBS)
-../../lib/lib513-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib513$(EXEEXT): $(lib513_OBJECTS) $(lib513_DEPENDENCIES) $(EXTRA_lib513_DEPENDENCIES)
@rm -f lib513$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib513_OBJECTS) $(lib513_LDADD) $(LIBS)
-../../lib/lib514-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib514$(EXEEXT): $(lib514_OBJECTS) $(lib514_DEPENDENCIES) $(EXTRA_lib514_DEPENDENCIES)
@rm -f lib514$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib514_OBJECTS) $(lib514_LDADD) $(LIBS)
-../../lib/lib515-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib515$(EXEEXT): $(lib515_OBJECTS) $(lib515_DEPENDENCIES) $(EXTRA_lib515_DEPENDENCIES)
@rm -f lib515$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib515_OBJECTS) $(lib515_LDADD) $(LIBS)
-../../lib/lib516-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib516$(EXEEXT): $(lib516_OBJECTS) $(lib516_DEPENDENCIES) $(EXTRA_lib516_DEPENDENCIES)
@rm -f lib516$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib516_OBJECTS) $(lib516_LDADD) $(LIBS)
-../../lib/lib517-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib517$(EXEEXT): $(lib517_OBJECTS) $(lib517_DEPENDENCIES) $(EXTRA_lib517_DEPENDENCIES)
@rm -f lib517$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib517_OBJECTS) $(lib517_LDADD) $(LIBS)
-../../lib/lib518-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib518-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib518-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib518$(EXEEXT): $(lib518_OBJECTS) $(lib518_DEPENDENCIES) $(EXTRA_lib518_DEPENDENCIES)
@rm -f lib518$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib518_OBJECTS) $(lib518_LDADD) $(LIBS)
-../../lib/lib519-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib519$(EXEEXT): $(lib519_OBJECTS) $(lib519_DEPENDENCIES) $(EXTRA_lib519_DEPENDENCIES)
@rm -f lib519$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib519_OBJECTS) $(lib519_LDADD) $(LIBS)
-../../lib/lib520-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib520$(EXEEXT): $(lib520_OBJECTS) $(lib520_DEPENDENCIES) $(EXTRA_lib520_DEPENDENCIES)
@rm -f lib520$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib520_OBJECTS) $(lib520_LDADD) $(LIBS)
-../../lib/lib521-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib521$(EXEEXT): $(lib521_OBJECTS) $(lib521_DEPENDENCIES) $(EXTRA_lib521_DEPENDENCIES)
@rm -f lib521$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib521_OBJECTS) $(lib521_LDADD) $(LIBS)
-../../lib/lib523-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib523$(EXEEXT): $(lib523_OBJECTS) $(lib523_DEPENDENCIES) $(EXTRA_lib523_DEPENDENCIES)
@rm -f lib523$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib523_OBJECTS) $(lib523_LDADD) $(LIBS)
-../../lib/lib524-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib524$(EXEEXT): $(lib524_OBJECTS) $(lib524_DEPENDENCIES) $(EXTRA_lib524_DEPENDENCIES)
@rm -f lib524$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib524_OBJECTS) $(lib524_LDADD) $(LIBS)
-../../lib/lib525-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib525-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib525-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib525$(EXEEXT): $(lib525_OBJECTS) $(lib525_DEPENDENCIES) $(EXTRA_lib525_DEPENDENCIES)
@rm -f lib525$(EXEEXT)
@@ -4243,10 +3092,6 @@ lib527$(EXEEXT): $(lib527_OBJECTS) $(lib527_DEPENDENCIES) $(EXTRA_lib527_DEPENDE
lib529$(EXEEXT): $(lib529_OBJECTS) $(lib529_DEPENDENCIES) $(EXTRA_lib529_DEPENDENCIES)
@rm -f lib529$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib529_OBJECTS) $(lib529_LDADD) $(LIBS)
-../../lib/lib530-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib530-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib530$(EXEEXT): $(lib530_OBJECTS) $(lib530_DEPENDENCIES) $(EXTRA_lib530_DEPENDENCIES)
@rm -f lib530$(EXEEXT)
@@ -4259,60 +3104,34 @@ lib530$(EXEEXT): $(lib530_OBJECTS) $(lib530_DEPENDENCIES) $(EXTRA_lib530_DEPENDE
lib532$(EXEEXT): $(lib532_OBJECTS) $(lib532_DEPENDENCIES) $(EXTRA_lib532_DEPENDENCIES)
@rm -f lib532$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib532_OBJECTS) $(lib532_LDADD) $(LIBS)
-../../lib/lib533-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib533-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib533$(EXEEXT): $(lib533_OBJECTS) $(lib533_DEPENDENCIES) $(EXTRA_lib533_DEPENDENCIES)
@rm -f lib533$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib533_OBJECTS) $(lib533_LDADD) $(LIBS)
-../../lib/lib537-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib537-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib537-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib537$(EXEEXT): $(lib537_OBJECTS) $(lib537_DEPENDENCIES) $(EXTRA_lib537_DEPENDENCIES)
@rm -f lib537$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib537_OBJECTS) $(lib537_LDADD) $(LIBS)
-../../lib/lib539-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib539$(EXEEXT): $(lib539_OBJECTS) $(lib539_DEPENDENCIES) $(EXTRA_lib539_DEPENDENCIES)
@rm -f lib539$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib539_OBJECTS) $(lib539_LDADD) $(LIBS)
-../../lib/lib540-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib540-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib540$(EXEEXT): $(lib540_OBJECTS) $(lib540_DEPENDENCIES) $(EXTRA_lib540_DEPENDENCIES)
@rm -f lib540$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib540_OBJECTS) $(lib540_LDADD) $(LIBS)
-../../lib/lib541-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib541-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib541$(EXEEXT): $(lib541_OBJECTS) $(lib541_DEPENDENCIES) $(EXTRA_lib541_DEPENDENCIES)
@rm -f lib541$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib541_OBJECTS) $(lib541_LDADD) $(LIBS)
-../../lib/lib542-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib542$(EXEEXT): $(lib542_OBJECTS) $(lib542_DEPENDENCIES) $(EXTRA_lib542_DEPENDENCIES)
@rm -f lib542$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib542_OBJECTS) $(lib542_LDADD) $(LIBS)
-../../lib/lib543-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib543$(EXEEXT): $(lib543_OBJECTS) $(lib543_DEPENDENCIES) $(EXTRA_lib543_DEPENDENCIES)
@rm -f lib543$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib543_OBJECTS) $(lib543_LDADD) $(LIBS)
-../../lib/lib544-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib544$(EXEEXT): $(lib544_OBJECTS) $(lib544_DEPENDENCIES) $(EXTRA_lib544_DEPENDENCIES)
@rm -f lib544$(EXEEXT)
@@ -4323,8 +3142,6 @@ lib544$(EXEEXT): $(lib544_OBJECTS) $(lib544_DEPENDENCIES) $(EXTRA_lib544_DEPENDE
lib545$(EXEEXT): $(lib545_OBJECTS) $(lib545_DEPENDENCIES) $(EXTRA_lib545_DEPENDENCIES)
@rm -f lib545$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib545_OBJECTS) $(lib545_LDADD) $(LIBS)
-../../lib/lib547-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib547$(EXEEXT): $(lib547_OBJECTS) $(lib547_DEPENDENCIES) $(EXTRA_lib547_DEPENDENCIES)
@rm -f lib547$(EXEEXT)
@@ -4335,84 +3152,50 @@ lib547$(EXEEXT): $(lib547_OBJECTS) $(lib547_DEPENDENCIES) $(EXTRA_lib547_DEPENDE
lib548$(EXEEXT): $(lib548_OBJECTS) $(lib548_DEPENDENCIES) $(EXTRA_lib548_DEPENDENCIES)
@rm -f lib548$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib548_OBJECTS) $(lib548_LDADD) $(LIBS)
-../../lib/lib549-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib549$(EXEEXT): $(lib549_OBJECTS) $(lib549_DEPENDENCIES) $(EXTRA_lib549_DEPENDENCIES)
@rm -f lib549$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib549_OBJECTS) $(lib549_LDADD) $(LIBS)
-../../lib/lib552-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib552-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib552$(EXEEXT): $(lib552_OBJECTS) $(lib552_DEPENDENCIES) $(EXTRA_lib552_DEPENDENCIES)
@rm -f lib552$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib552_OBJECTS) $(lib552_LDADD) $(LIBS)
-../../lib/lib553-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib553$(EXEEXT): $(lib553_OBJECTS) $(lib553_DEPENDENCIES) $(EXTRA_lib553_DEPENDENCIES)
@rm -f lib553$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib553_OBJECTS) $(lib553_LDADD) $(LIBS)
-../../lib/lib554-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib554$(EXEEXT): $(lib554_OBJECTS) $(lib554_DEPENDENCIES) $(EXTRA_lib554_DEPENDENCIES)
@rm -f lib554$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib554_OBJECTS) $(lib554_LDADD) $(LIBS)
-../../lib/lib555-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib555-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib555$(EXEEXT): $(lib555_OBJECTS) $(lib555_DEPENDENCIES) $(EXTRA_lib555_DEPENDENCIES)
@rm -f lib555$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib555_OBJECTS) $(lib555_LDADD) $(LIBS)
-../../lib/lib556-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib556-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib556$(EXEEXT): $(lib556_OBJECTS) $(lib556_DEPENDENCIES) $(EXTRA_lib556_DEPENDENCIES)
@rm -f lib556$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib556_OBJECTS) $(lib556_LDADD) $(LIBS)
-../../lib/lib557-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib557$(EXEEXT): $(lib557_OBJECTS) $(lib557_DEPENDENCIES) $(EXTRA_lib557_DEPENDENCIES)
@rm -f lib557$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib557_OBJECTS) $(lib557_LDADD) $(LIBS)
-../../lib/lib558-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib558$(EXEEXT): $(lib558_OBJECTS) $(lib558_DEPENDENCIES) $(EXTRA_lib558_DEPENDENCIES)
@rm -f lib558$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib558_OBJECTS) $(lib558_LDADD) $(LIBS)
-../../lib/lib559-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib559$(EXEEXT): $(lib559_OBJECTS) $(lib559_DEPENDENCIES) $(EXTRA_lib559_DEPENDENCIES)
@rm -f lib559$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib559_OBJECTS) $(lib559_LDADD) $(LIBS)
-../../lib/lib560-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib560-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib560$(EXEEXT): $(lib560_OBJECTS) $(lib560_DEPENDENCIES) $(EXTRA_lib560_DEPENDENCIES)
@rm -f lib560$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib560_OBJECTS) $(lib560_LDADD) $(LIBS)
-../../lib/lib562-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib562$(EXEEXT): $(lib562_OBJECTS) $(lib562_DEPENDENCIES) $(EXTRA_lib562_DEPENDENCIES)
@rm -f lib562$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib562_OBJECTS) $(lib562_LDADD) $(LIBS)
-../../lib/lib564-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib564-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib564$(EXEEXT): $(lib564_OBJECTS) $(lib564_DEPENDENCIES) $(EXTRA_lib564_DEPENDENCIES)
@rm -f lib564$(EXEEXT)
@@ -4423,116 +3206,62 @@ lib564$(EXEEXT): $(lib564_OBJECTS) $(lib564_DEPENDENCIES) $(EXTRA_lib564_DEPENDE
lib565$(EXEEXT): $(lib565_OBJECTS) $(lib565_DEPENDENCIES) $(EXTRA_lib565_DEPENDENCIES)
@rm -f lib565$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib565_OBJECTS) $(lib565_LDADD) $(LIBS)
-../../lib/lib566-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib566-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib566$(EXEEXT): $(lib566_OBJECTS) $(lib566_DEPENDENCIES) $(EXTRA_lib566_DEPENDENCIES)
@rm -f lib566$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib566_OBJECTS) $(lib566_LDADD) $(LIBS)
-../../lib/lib567-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib567$(EXEEXT): $(lib567_OBJECTS) $(lib567_DEPENDENCIES) $(EXTRA_lib567_DEPENDENCIES)
@rm -f lib567$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib567_OBJECTS) $(lib567_LDADD) $(LIBS)
-../../lib/lib568-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib568-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib568$(EXEEXT): $(lib568_OBJECTS) $(lib568_DEPENDENCIES) $(EXTRA_lib568_DEPENDENCIES)
@rm -f lib568$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib568_OBJECTS) $(lib568_LDADD) $(LIBS)
-../../lib/lib569-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib569-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib569$(EXEEXT): $(lib569_OBJECTS) $(lib569_DEPENDENCIES) $(EXTRA_lib569_DEPENDENCIES)
@rm -f lib569$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib569_OBJECTS) $(lib569_LDADD) $(LIBS)
-../../lib/lib570-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib570$(EXEEXT): $(lib570_OBJECTS) $(lib570_DEPENDENCIES) $(EXTRA_lib570_DEPENDENCIES)
@rm -f lib570$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib570_OBJECTS) $(lib570_LDADD) $(LIBS)
-../../lib/lib571-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib571-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib571-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib571$(EXEEXT): $(lib571_OBJECTS) $(lib571_DEPENDENCIES) $(EXTRA_lib571_DEPENDENCIES)
@rm -f lib571$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib571_OBJECTS) $(lib571_LDADD) $(LIBS)
-../../lib/lib572-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib572-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib572$(EXEEXT): $(lib572_OBJECTS) $(lib572_DEPENDENCIES) $(EXTRA_lib572_DEPENDENCIES)
@rm -f lib572$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib572_OBJECTS) $(lib572_LDADD) $(LIBS)
-../../lib/lib573-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib573-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib573$(EXEEXT): $(lib573_OBJECTS) $(lib573_DEPENDENCIES) $(EXTRA_lib573_DEPENDENCIES)
@rm -f lib573$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib573_OBJECTS) $(lib573_LDADD) $(LIBS)
-../../lib/lib574-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib574$(EXEEXT): $(lib574_OBJECTS) $(lib574_DEPENDENCIES) $(EXTRA_lib574_DEPENDENCIES)
@rm -f lib574$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib574_OBJECTS) $(lib574_LDADD) $(LIBS)
-../../lib/lib575-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib575-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib575$(EXEEXT): $(lib575_OBJECTS) $(lib575_DEPENDENCIES) $(EXTRA_lib575_DEPENDENCIES)
@rm -f lib575$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib575_OBJECTS) $(lib575_LDADD) $(LIBS)
-../../lib/lib576-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib576$(EXEEXT): $(lib576_OBJECTS) $(lib576_DEPENDENCIES) $(EXTRA_lib576_DEPENDENCIES)
@rm -f lib576$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib576_OBJECTS) $(lib576_LDADD) $(LIBS)
-../../lib/lib578-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib578-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib578$(EXEEXT): $(lib578_OBJECTS) $(lib578_DEPENDENCIES) $(EXTRA_lib578_DEPENDENCIES)
@rm -f lib578$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib578_OBJECTS) $(lib578_LDADD) $(LIBS)
-../../lib/lib579-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib579-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib579$(EXEEXT): $(lib579_OBJECTS) $(lib579_DEPENDENCIES) $(EXTRA_lib579_DEPENDENCIES)
@rm -f lib579$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib579_OBJECTS) $(lib579_LDADD) $(LIBS)
-../../lib/lib582-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib582-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib582-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib582$(EXEEXT): $(lib582_OBJECTS) $(lib582_DEPENDENCIES) $(EXTRA_lib582_DEPENDENCIES)
@rm -f lib582$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib582_OBJECTS) $(lib582_LDADD) $(LIBS)
-../../lib/lib583-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib583$(EXEEXT): $(lib583_OBJECTS) $(lib583_DEPENDENCIES) $(EXTRA_lib583_DEPENDENCIES)
@rm -f lib583$(EXEEXT)
@@ -4551,8 +3280,6 @@ lib584$(EXEEXT): $(lib584_OBJECTS) $(lib584_DEPENDENCIES) $(EXTRA_lib584_DEPENDE
lib585$(EXEEXT): $(lib585_OBJECTS) $(lib585_DEPENDENCIES) $(EXTRA_lib585_DEPENDENCIES)
@rm -f lib585$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib585_OBJECTS) $(lib585_LDADD) $(LIBS)
-../../lib/lib586-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib586$(EXEEXT): $(lib586_OBJECTS) $(lib586_DEPENDENCIES) $(EXTRA_lib586_DEPENDENCIES)
@rm -f lib586$(EXEEXT)
@@ -4563,52 +3290,30 @@ lib586$(EXEEXT): $(lib586_OBJECTS) $(lib586_DEPENDENCIES) $(EXTRA_lib586_DEPENDE
lib587$(EXEEXT): $(lib587_OBJECTS) $(lib587_DEPENDENCIES) $(EXTRA_lib587_DEPENDENCIES)
@rm -f lib587$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib587_OBJECTS) $(lib587_LDADD) $(LIBS)
-../../lib/lib589-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib589$(EXEEXT): $(lib589_OBJECTS) $(lib589_DEPENDENCIES) $(EXTRA_lib589_DEPENDENCIES)
@rm -f lib589$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib589_OBJECTS) $(lib589_LDADD) $(LIBS)
-../../lib/lib590-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib590$(EXEEXT): $(lib590_OBJECTS) $(lib590_DEPENDENCIES) $(EXTRA_lib590_DEPENDENCIES)
@rm -f lib590$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib590_OBJECTS) $(lib590_LDADD) $(LIBS)
-../../lib/lib591-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib591-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib591-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib591$(EXEEXT): $(lib591_OBJECTS) $(lib591_DEPENDENCIES) $(EXTRA_lib591_DEPENDENCIES)
@rm -f lib591$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib591_OBJECTS) $(lib591_LDADD) $(LIBS)
-../../lib/lib597-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib597-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib597$(EXEEXT): $(lib597_OBJECTS) $(lib597_DEPENDENCIES) $(EXTRA_lib597_DEPENDENCIES)
@rm -f lib597$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib597_OBJECTS) $(lib597_LDADD) $(LIBS)
-../../lib/lib598-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib598$(EXEEXT): $(lib598_OBJECTS) $(lib598_DEPENDENCIES) $(EXTRA_lib598_DEPENDENCIES)
@rm -f lib598$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib598_OBJECTS) $(lib598_LDADD) $(LIBS)
-../../lib/lib599-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib599-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib599$(EXEEXT): $(lib599_OBJECTS) $(lib599_DEPENDENCIES) $(EXTRA_lib599_DEPENDENCIES)
@rm -f lib599$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib599_OBJECTS) $(lib599_LDADD) $(LIBS)
-../../lib/lib643-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib643$(EXEEXT): $(lib643_OBJECTS) $(lib643_DEPENDENCIES) $(EXTRA_lib643_DEPENDENCIES)
@rm -f lib643$(EXEEXT)
@@ -4619,82 +3324,50 @@ lib643$(EXEEXT): $(lib643_OBJECTS) $(lib643_DEPENDENCIES) $(EXTRA_lib643_DEPENDE
lib645$(EXEEXT): $(lib645_OBJECTS) $(lib645_DEPENDENCIES) $(EXTRA_lib645_DEPENDENCIES)
@rm -f lib645$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib645_OBJECTS) $(lib645_LDADD) $(LIBS)
-../../lib/lib650-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib650$(EXEEXT): $(lib650_OBJECTS) $(lib650_DEPENDENCIES) $(EXTRA_lib650_DEPENDENCIES)
@rm -f lib650$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib650_OBJECTS) $(lib650_LDADD) $(LIBS)
-../../lib/lib651-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib651$(EXEEXT): $(lib651_OBJECTS) $(lib651_DEPENDENCIES) $(EXTRA_lib651_DEPENDENCIES)
@rm -f lib651$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib651_OBJECTS) $(lib651_LDADD) $(LIBS)
-../../lib/lib652-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib652$(EXEEXT): $(lib652_OBJECTS) $(lib652_DEPENDENCIES) $(EXTRA_lib652_DEPENDENCIES)
@rm -f lib652$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib652_OBJECTS) $(lib652_LDADD) $(LIBS)
-../../lib/lib653-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib653$(EXEEXT): $(lib653_OBJECTS) $(lib653_DEPENDENCIES) $(EXTRA_lib653_DEPENDENCIES)
@rm -f lib653$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib653_OBJECTS) $(lib653_LDADD) $(LIBS)
-../../lib/lib654-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib654$(EXEEXT): $(lib654_OBJECTS) $(lib654_DEPENDENCIES) $(EXTRA_lib654_DEPENDENCIES)
@rm -f lib654$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib654_OBJECTS) $(lib654_LDADD) $(LIBS)
-../../lib/lib655-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib655$(EXEEXT): $(lib655_OBJECTS) $(lib655_DEPENDENCIES) $(EXTRA_lib655_DEPENDENCIES)
@rm -f lib655$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib655_OBJECTS) $(lib655_LDADD) $(LIBS)
-../../lib/lib658-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib658-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib658$(EXEEXT): $(lib658_OBJECTS) $(lib658_DEPENDENCIES) $(EXTRA_lib658_DEPENDENCIES)
@rm -f lib658$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib658_OBJECTS) $(lib658_LDADD) $(LIBS)
-../../lib/lib659-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib659-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib659$(EXEEXT): $(lib659_OBJECTS) $(lib659_DEPENDENCIES) $(EXTRA_lib659_DEPENDENCIES)
@rm -f lib659$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib659_OBJECTS) $(lib659_LDADD) $(LIBS)
-../../lib/lib661-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib661$(EXEEXT): $(lib661_OBJECTS) $(lib661_DEPENDENCIES) $(EXTRA_lib661_DEPENDENCIES)
@rm -f lib661$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib661_OBJECTS) $(lib661_LDADD) $(LIBS)
-../../lib/lib666-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib666$(EXEEXT): $(lib666_OBJECTS) $(lib666_DEPENDENCIES) $(EXTRA_lib666_DEPENDENCIES)
@rm -f lib666$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib666_OBJECTS) $(lib666_LDADD) $(LIBS)
-../../lib/lib667-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib667-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib667$(EXEEXT): $(lib667_OBJECTS) $(lib667_DEPENDENCIES) $(EXTRA_lib667_DEPENDENCIES)
@rm -f lib667$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib667_OBJECTS) $(lib667_LDADD) $(LIBS)
-../../lib/lib668-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib668-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib668$(EXEEXT): $(lib668_OBJECTS) $(lib668_DEPENDENCIES) $(EXTRA_lib668_DEPENDENCIES)
@rm -f lib668$(EXEEXT)
@@ -4723,68 +3396,34 @@ lib671$(EXEEXT): $(lib671_OBJECTS) $(lib671_DEPENDENCIES) $(EXTRA_lib671_DEPENDE
lib672$(EXEEXT): $(lib672_OBJECTS) $(lib672_DEPENDENCIES) $(EXTRA_lib672_DEPENDENCIES)
@rm -f lib672$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib672_OBJECTS) $(lib672_LDADD) $(LIBS)
-../../lib/lib673-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib673-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib673$(EXEEXT): $(lib673_OBJECTS) $(lib673_DEPENDENCIES) $(EXTRA_lib673_DEPENDENCIES)
@rm -f lib673$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib673_OBJECTS) $(lib673_LDADD) $(LIBS)
-../../lib/lib674-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib674-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib674$(EXEEXT): $(lib674_OBJECTS) $(lib674_DEPENDENCIES) $(EXTRA_lib674_DEPENDENCIES)
@rm -f lib674$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib674_OBJECTS) $(lib674_LDADD) $(LIBS)
-../../lib/lib676-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib676-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib676$(EXEEXT): $(lib676_OBJECTS) $(lib676_DEPENDENCIES) $(EXTRA_lib676_DEPENDENCIES)
@rm -f lib676$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib676_OBJECTS) $(lib676_LDADD) $(LIBS)
-../../lib/lib677-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib677-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib677-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib677$(EXEEXT): $(lib677_OBJECTS) $(lib677_DEPENDENCIES) $(EXTRA_lib677_DEPENDENCIES)
@rm -f lib677$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib677_OBJECTS) $(lib677_LDADD) $(LIBS)
-../../lib/lib678-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib678-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/lib678-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
lib678$(EXEEXT): $(lib678_OBJECTS) $(lib678_DEPENDENCIES) $(EXTRA_lib678_DEPENDENCIES)
@rm -f lib678$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(lib678_OBJECTS) $(lib678_LDADD) $(LIBS)
-../../lib/libauthretry-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
libauthretry$(EXEEXT): $(libauthretry_OBJECTS) $(libauthretry_DEPENDENCIES) $(EXTRA_libauthretry_DEPENDENCIES)
@rm -f libauthretry$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(libauthretry_OBJECTS) $(libauthretry_LDADD) $(LIBS)
-../../lib/libntlmconnect-timediff.$(OBJEXT): \
- ../../lib/$(am__dirstamp) ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/libntlmconnect-warnless.$(OBJEXT): \
- ../../lib/$(am__dirstamp) ../../lib/$(DEPDIR)/$(am__dirstamp)
libntlmconnect$(EXEEXT): $(libntlmconnect_OBJECTS) $(libntlmconnect_DEPENDENCIES) $(EXTRA_libntlmconnect_DEPENDENCIES)
@rm -f libntlmconnect$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(libntlmconnect_OBJECTS) $(libntlmconnect_LDADD) $(LIBS)
-../../lib/libprereq-timediff.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
-../../lib/libprereq-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
- ../../lib/$(DEPDIR)/$(am__dirstamp)
libprereq$(EXEEXT): $(libprereq_OBJECTS) $(libprereq_DEPENDENCIES) $(EXTRA_libprereq_DEPENDENCIES)
@rm -f libprereq$(EXEEXT)
@@ -4797,15 +3436,8 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/chkdecimalpoint-dynbuf.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/chkdecimalpoint-mprintf.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/chkdecimalpoint-strdup.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/chkhostname-curl_gethostname.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1156-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1156-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1500-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1501-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1501-warnless.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/curl_gethostname.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/curl_multibyte.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1502-timediff.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1502-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1503-timediff.Po@am__quote@ # am--include-marker
@@ -4814,178 +3446,16 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1504-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1505-timediff.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1505-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1506-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1506-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1507-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1507-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1508-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1508-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1509-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1509-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1510-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1510-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1511-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1511-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1512-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1512-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1513-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1513-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1514-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1514-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1515-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1515-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1517-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1518-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1520-timediff.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1521-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1522-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1523-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1525-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1525-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1526-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1526-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1527-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1527-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1528-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1528-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1529-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1529-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1530-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1530-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1531-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1531-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1532-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1532-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1533-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1533-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1534-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1534-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1535-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1535-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1536-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1536-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1537-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1537-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1538-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1538-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1539-timediff.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1539-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1540-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1540-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1542-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1542-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1543-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1550-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1551-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1552-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1553-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1554-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1555-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1555-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1556-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1556-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1557-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1557-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1564-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1564-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1565-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1565-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1567-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1568-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1569-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1591-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1591-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1592-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1592-warnless.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1545-timediff.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1596-timediff.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1596-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1905-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1905-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1906-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1906-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1907-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1907-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1908-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1908-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1910-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1910-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1911-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1911-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1912-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1912-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1913-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1913-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1915-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1915-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1916-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1916-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1917-timediff.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1917-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1918-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1918-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1919-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1919-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1933-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1933-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1934-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1934-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1935-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1935-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1936-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1936-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1937-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1938-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1939-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1940-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1945-timediff.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1946-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1947-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1948-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1955-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1955-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib3010-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib3010-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib3025-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib3025-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib3026-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib3026-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib3027-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib3027-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib500-curl_multibyte.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib500-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib501-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib502-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib502-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib503-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib503-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib504-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib504-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib505-curl_multibyte.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib505-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib506-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib507-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib507-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib508-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib509-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib510-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib511-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib512-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib513-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib514-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib515-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib516-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib517-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib518-curl_multibyte.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib518-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib518-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib519-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib520-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib521-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib523-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib524-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib525-curl_multibyte.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib525-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib525-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib526-timediff.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib526-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib527-timediff.Po@am__quote@ # am--include-marker
@@ -4993,141 +3463,30 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib529-curl_multibyte.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib529-timediff.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib529-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib530-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib530-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib532-timediff.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib532-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib533-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib533-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib537-curl_multibyte.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib537-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib537-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib539-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib540-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib540-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib541-curl_multibyte.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib541-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib542-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib543-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib544-timediff.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib545-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib547-timediff.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib548-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib549-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib552-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib552-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib553-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib554-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib555-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib555-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib556-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib556-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib557-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib558-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib559-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib560-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib560-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib562-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib564-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib564-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib565-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib566-curl_multibyte.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib566-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib567-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib568-curl_multibyte.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib568-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib569-curl_multibyte.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib569-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib570-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib571-curl_multibyte.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib571-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib571-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib572-curl_multibyte.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib572-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib573-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib573-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib574-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib575-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib575-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib576-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib578-curl_multibyte.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib578-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib579-curl_multibyte.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib579-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib582-curl_multibyte.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib582-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib582-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib583-timediff.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib584-timediff.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib585-curl_multibyte.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib585-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib586-timediff.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib587-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib589-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib590-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib591-curl_multibyte.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib591-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib591-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib597-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib597-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib598-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib599-curl_multibyte.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib599-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib643-timediff.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib645-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib650-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib651-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib652-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib653-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib654-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib655-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib658-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib658-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib659-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib659-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib661-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib666-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib667-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib667-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib668-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib668-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib670-timediff.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib670-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib671-timediff.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib671-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib672-timediff.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib672-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib673-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib673-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib674-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib674-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib676-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib676-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib677-curl_multibyte.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib677-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib677-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib678-curl_multibyte.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib678-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib678-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/libauthretry-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/libntlmconnect-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/libntlmconnect-warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/libprereq-timediff.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/libprereq-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/timediff.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/warnless.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chkdecimalpoint-chkdecimalpoint.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chkhostname-chkhostname.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chkhostname.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1156-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1156-lib1156.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1156-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1500-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1500-lib1500.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1500-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1501-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1501-lib1501.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1501-testutil.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1156.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1301.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1500.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1501.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1502-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1502-lib1502.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1502-testutil.Po@am__quote@ # am--include-marker
@@ -5140,289 +3499,154 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1505-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1505-lib1502.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1505-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1506-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1506-lib1506.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1506-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1507-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1507-lib1507.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1507-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1508-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1508-lib1508.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1508-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1509-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1509-lib1509.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1509-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1510-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1510-lib1510.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1510-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1511-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1511-lib1511.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1511-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1512-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1512-lib1512.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1512-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1513-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1513-lib1513.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1513-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1514-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1514-lib1514.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1514-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1515-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1515-lib1515.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1515-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1517-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1517-lib1517.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1518-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1518-lib1518.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1520-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1520-lib1520.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1506.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1507.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1508.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1509.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1510.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1511.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1512.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1513.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1514.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1515.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1517.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1518.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1520.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1521-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1521-lib1521.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1522-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1522-lib1522.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1522-testtrace.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1522-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1523-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1523-lib1523.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1525-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1525-lib1525.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1525-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1526-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1526-lib1526.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1526-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1527-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1527-lib1527.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1527-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1528-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1528-lib1528.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1528-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1529-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1529-lib1529.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1529-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1530-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1530-lib1530.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1530-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1531-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1531-lib1531.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1531-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1532-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1532-lib1532.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1532-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1533-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1533-lib1533.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1533-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1534-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1534-lib1534.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1534-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1535-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1535-lib1535.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1535-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1536-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1536-lib1536.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1536-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1537-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1537-lib1537.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1537-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1538-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1538-lib1538.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1538-testutil.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1522.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1523.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1525.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1526.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1527.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1528.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1529.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1530.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1531.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1532.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1533.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1534.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1535.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1536.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1537.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1538.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1539-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1539-lib1514.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1539-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1540-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1540-lib1540.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1540-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1542-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1542-lib1542.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1542-testtrace.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1542-testutil.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1540.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1542.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1543-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1543-lib1518.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1550-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1550-lib1550.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1551-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1551-lib1551.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1552-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1552-lib1552.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1552-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1553-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1553-lib1553.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1553-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1554-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1554-lib1554.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1555-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1555-lib1555.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1555-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1556-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1556-lib1556.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1556-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1557-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1557-lib1557.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1557-testutil.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1545-first.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1545-lib1545.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1550.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1551.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1552.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1553.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1554.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1555.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1556.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1557.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1558.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1559.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1560.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1564-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1564-lib1564.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1564-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1565-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1565-lib1565.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1565-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1567-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1567-lib1567.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1568-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1568-lib1568.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1569-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1569-lib1569.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1591-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1591-lib1591.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1591-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1592-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1592-lib1592.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1592-testutil.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1564.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1565.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1567.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1568.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1569.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1591.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1592.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1593.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1594.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1596-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1596-lib1594.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1596-testutil.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1597.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1905-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1905-lib1905.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1905-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1906-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1906-lib1906.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1906-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1907-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1907-lib1907.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1907-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1908-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1908-lib1908.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1908-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1910-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1910-lib1910.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1910-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1911-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1911-lib1911.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1911-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1912-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1912-lib1912.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1912-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1913-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1913-lib1913.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1913-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1915-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1915-lib1915.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1915-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1916-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1916-lib1916.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1662.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1900.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1903.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1905.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1906.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1907.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1908.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1910.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1911.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1912.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1913.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1915.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1916.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1917-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1917-lib1916.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1918-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1918-lib1918.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1919-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1919-lib1919.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1933-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1933-lib1933.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1933-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1934-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1934-lib1934.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1934-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1935-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1935-lib1935.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1935-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1936-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1936-lib1936.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1936-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1937-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1937-lib1937.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1938-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1938-lib1938.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1939-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1939-lib1939.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1940-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1940-lib1940.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1945-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1945-lib1945.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1918.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1919.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1933.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1934.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1935.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1936.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1937.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1938.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1939.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1940.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1945.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1946-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1946-lib1940.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1947-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1947-lib1947.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1948-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1948-lib1948.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1955-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1955-lib1955.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1955-testutil.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1947.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1948.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1955.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1956.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1957.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1958.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1959.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1960.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1964.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1970.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1971.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1972.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1973.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1974.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1975.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib2301.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib2302.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib3010-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib3010-lib3010.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib3010-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib3025-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib3025-lib3025.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib3025-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib3026-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib3026-lib3026.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib3026-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib3027-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib3027-lib3027.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib3027-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib500-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib500-lib500.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib500-testtrace.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib500-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib501-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib501-lib501.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib502-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib502-lib502.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib502-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib503-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib503-lib503.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib503-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib504-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib504-lib504.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib504-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib505-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib505-lib505.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib506-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib506-lib506.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib507-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib507-lib507.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib507-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib508-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib508-lib508.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib509-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib509-lib509.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib510-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib510-lib510.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib511-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib511-lib511.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib512-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib512-lib512.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib513-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib513-lib513.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib514-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib514-lib514.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib515-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib515-lib515.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib516-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib516-lib516.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib517-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib517-lib517.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib518-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib518-lib518.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib519-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib519-lib519.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib520-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib520-lib520.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib521-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib521-lib521.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib523-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib523-lib523.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib524-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib524-lib524.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib525-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib525-lib525.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib525-testutil.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib2304.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib2305.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib2306.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib2402.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib2404.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib2502.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib3010.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib3025.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib3026.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib3027.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib3100.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib3101.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib3102.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib3103.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib500.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib501.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib502.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib503.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib504.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib505.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib506.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib507.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib508.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib509.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib510.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib511.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib512.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib513.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib514.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib515.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib516.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib517.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib518.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib519.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib520.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib521.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib523.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib524.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib525.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib526-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib526-lib526.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib526-testutil.Po@am__quote@ # am--include-marker
@@ -5432,189 +3656,102 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib529-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib529-lib525.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib529-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib530-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib530-lib530.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib530-testutil.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib530.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib532-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib532-lib526.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib532-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib533-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib533-lib533.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib533-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib537-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib537-lib537.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib539-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib539-lib539.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib540-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib540-lib540.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib540-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib541-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib541-lib541.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib542-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib542-lib542.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib543-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib543-lib543.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib544-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib544-lib544.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib533.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib537.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib539.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib540.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib541.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib542.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib543.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib544.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib545-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib545-lib544.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib547-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib547-lib547.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib547.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib548-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib548-lib547.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib549-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib549-lib549.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib552-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib552-lib552.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib553-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib553-lib553.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib554-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib554-lib554.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib555-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib555-lib555.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib555-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib556-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib556-lib556.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib557-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib557-lib557.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib558-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib558-lib558.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib559-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib559-lib559.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib560-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib560-lib560.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib560-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib562-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib562-lib562.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib564-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib564-lib564.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib564-testutil.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib549.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib552.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib553.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib554.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib555.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib556.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib557.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib558.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib559.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib560.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib562.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib564.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib565-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib565-lib510.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib566-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib566-lib566.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib567-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib567-lib567.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib568-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib568-lib568.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib569-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib569-lib569.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib570-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib570-lib570.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib571-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib571-lib571.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib572-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib572-lib572.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib573-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib573-lib573.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib573-testtrace.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib573-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib574-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib574-lib574.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib575-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib575-lib575.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib575-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib576-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib576-lib576.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib578-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib578-lib578.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib579-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib579-lib579.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib582-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib582-lib582.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib582-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib583-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib583-lib583.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib566.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib567.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib568.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib569.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib570.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib571.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib572.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib573.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib574.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib575.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib576.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib578.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib579.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib582.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib583.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib584-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib584-lib589.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib585-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib585-lib500.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib585-testtrace.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib585-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib586-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib586-lib586.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib586.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib587-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib587-lib554.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib589-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib589-lib589.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib590-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib590-lib590.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib591-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib591-lib591.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib591-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib597-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib597-lib597.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib597-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib598-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib598-lib598.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib599-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib599-lib599.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib643-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib643-lib643.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib589.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib590.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib591.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib597.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib598.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib599.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib643.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib645-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib645-lib643.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib650-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib650-lib650.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib651-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib651-lib651.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib652-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib652-lib652.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib653-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib653-lib653.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib654-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib654-lib654.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib655-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib655-lib655.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib658-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib658-lib658.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib658-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib659-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib659-lib659.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib659-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib661-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib661-lib661.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib666-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib666-lib666.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib667-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib667-lib667.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib667-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib668-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib668-lib668.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib668-testutil.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib650.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib651.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib652.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib653.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib654.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib655.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib658.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib659.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib661.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib666.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib667.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib668.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib670-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib670-lib670.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib670-testutil.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib670.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib671-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib671-lib670.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib671-testutil.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib672-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib672-lib670.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib672-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib673-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib673-lib670.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib673-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib674-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib674-lib674.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib674-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib676-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib676-lib676.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib676-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib677-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib677-lib677.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib677-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib678-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib678-lib678.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib678-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libauthretry-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libauthretry-libauthretry.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib674.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib676.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib677.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib678.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libauthretry.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhostname_la-sethostname.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libntlmconnect-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libntlmconnect-libntlmconnect.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libntlmconnect-testutil.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libprereq-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libprereq-libprereq.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libprereq-testutil.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libntlmconnect.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libprereq.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libstubgss_la-stub_gssapi.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testtrace.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testutil.Po@am__quote@ # am--include-marker
$(am__depfiles_remade):
@@ -5661,286 +3798,6 @@ libstubgss_la-stub_gssapi.lo: stub_gssapi.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstubgss_la_CPPFLAGS) $(CPPFLAGS) $(libstubgss_la_CFLAGS) $(CFLAGS) -c -o libstubgss_la-stub_gssapi.lo `test -f 'stub_gssapi.c' || echo '$(srcdir)/'`stub_gssapi.c
-chkdecimalpoint-chkdecimalpoint.o: chkdecimalpoint.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chkdecimalpoint_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT chkdecimalpoint-chkdecimalpoint.o -MD -MP -MF $(DEPDIR)/chkdecimalpoint-chkdecimalpoint.Tpo -c -o chkdecimalpoint-chkdecimalpoint.o `test -f 'chkdecimalpoint.c' || echo '$(srcdir)/'`chkdecimalpoint.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/chkdecimalpoint-chkdecimalpoint.Tpo $(DEPDIR)/chkdecimalpoint-chkdecimalpoint.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='chkdecimalpoint.c' object='chkdecimalpoint-chkdecimalpoint.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chkdecimalpoint_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o chkdecimalpoint-chkdecimalpoint.o `test -f 'chkdecimalpoint.c' || echo '$(srcdir)/'`chkdecimalpoint.c
-
-chkdecimalpoint-chkdecimalpoint.obj: chkdecimalpoint.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chkdecimalpoint_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT chkdecimalpoint-chkdecimalpoint.obj -MD -MP -MF $(DEPDIR)/chkdecimalpoint-chkdecimalpoint.Tpo -c -o chkdecimalpoint-chkdecimalpoint.obj `if test -f 'chkdecimalpoint.c'; then $(CYGPATH_W) 'chkdecimalpoint.c'; else $(CYGPATH_W) '$(srcdir)/chkdecimalpoint.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/chkdecimalpoint-chkdecimalpoint.Tpo $(DEPDIR)/chkdecimalpoint-chkdecimalpoint.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='chkdecimalpoint.c' object='chkdecimalpoint-chkdecimalpoint.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chkdecimalpoint_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o chkdecimalpoint-chkdecimalpoint.obj `if test -f 'chkdecimalpoint.c'; then $(CYGPATH_W) 'chkdecimalpoint.c'; else $(CYGPATH_W) '$(srcdir)/chkdecimalpoint.c'; fi`
-
-../../lib/chkdecimalpoint-mprintf.o: ../../lib/mprintf.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chkdecimalpoint_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/chkdecimalpoint-mprintf.o -MD -MP -MF ../../lib/$(DEPDIR)/chkdecimalpoint-mprintf.Tpo -c -o ../../lib/chkdecimalpoint-mprintf.o `test -f '../../lib/mprintf.c' || echo '$(srcdir)/'`../../lib/mprintf.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/chkdecimalpoint-mprintf.Tpo ../../lib/$(DEPDIR)/chkdecimalpoint-mprintf.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/mprintf.c' object='../../lib/chkdecimalpoint-mprintf.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chkdecimalpoint_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/chkdecimalpoint-mprintf.o `test -f '../../lib/mprintf.c' || echo '$(srcdir)/'`../../lib/mprintf.c
-
-../../lib/chkdecimalpoint-mprintf.obj: ../../lib/mprintf.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chkdecimalpoint_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/chkdecimalpoint-mprintf.obj -MD -MP -MF ../../lib/$(DEPDIR)/chkdecimalpoint-mprintf.Tpo -c -o ../../lib/chkdecimalpoint-mprintf.obj `if test -f '../../lib/mprintf.c'; then $(CYGPATH_W) '../../lib/mprintf.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/mprintf.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/chkdecimalpoint-mprintf.Tpo ../../lib/$(DEPDIR)/chkdecimalpoint-mprintf.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/mprintf.c' object='../../lib/chkdecimalpoint-mprintf.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chkdecimalpoint_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/chkdecimalpoint-mprintf.obj `if test -f '../../lib/mprintf.c'; then $(CYGPATH_W) '../../lib/mprintf.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/mprintf.c'; fi`
-
-../../lib/chkdecimalpoint-dynbuf.o: ../../lib/dynbuf.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chkdecimalpoint_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/chkdecimalpoint-dynbuf.o -MD -MP -MF ../../lib/$(DEPDIR)/chkdecimalpoint-dynbuf.Tpo -c -o ../../lib/chkdecimalpoint-dynbuf.o `test -f '../../lib/dynbuf.c' || echo '$(srcdir)/'`../../lib/dynbuf.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/chkdecimalpoint-dynbuf.Tpo ../../lib/$(DEPDIR)/chkdecimalpoint-dynbuf.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/dynbuf.c' object='../../lib/chkdecimalpoint-dynbuf.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chkdecimalpoint_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/chkdecimalpoint-dynbuf.o `test -f '../../lib/dynbuf.c' || echo '$(srcdir)/'`../../lib/dynbuf.c
-
-../../lib/chkdecimalpoint-dynbuf.obj: ../../lib/dynbuf.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chkdecimalpoint_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/chkdecimalpoint-dynbuf.obj -MD -MP -MF ../../lib/$(DEPDIR)/chkdecimalpoint-dynbuf.Tpo -c -o ../../lib/chkdecimalpoint-dynbuf.obj `if test -f '../../lib/dynbuf.c'; then $(CYGPATH_W) '../../lib/dynbuf.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/dynbuf.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/chkdecimalpoint-dynbuf.Tpo ../../lib/$(DEPDIR)/chkdecimalpoint-dynbuf.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/dynbuf.c' object='../../lib/chkdecimalpoint-dynbuf.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chkdecimalpoint_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/chkdecimalpoint-dynbuf.obj `if test -f '../../lib/dynbuf.c'; then $(CYGPATH_W) '../../lib/dynbuf.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/dynbuf.c'; fi`
-
-../../lib/chkdecimalpoint-strdup.o: ../../lib/strdup.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chkdecimalpoint_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/chkdecimalpoint-strdup.o -MD -MP -MF ../../lib/$(DEPDIR)/chkdecimalpoint-strdup.Tpo -c -o ../../lib/chkdecimalpoint-strdup.o `test -f '../../lib/strdup.c' || echo '$(srcdir)/'`../../lib/strdup.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/chkdecimalpoint-strdup.Tpo ../../lib/$(DEPDIR)/chkdecimalpoint-strdup.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/strdup.c' object='../../lib/chkdecimalpoint-strdup.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chkdecimalpoint_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/chkdecimalpoint-strdup.o `test -f '../../lib/strdup.c' || echo '$(srcdir)/'`../../lib/strdup.c
-
-../../lib/chkdecimalpoint-strdup.obj: ../../lib/strdup.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chkdecimalpoint_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/chkdecimalpoint-strdup.obj -MD -MP -MF ../../lib/$(DEPDIR)/chkdecimalpoint-strdup.Tpo -c -o ../../lib/chkdecimalpoint-strdup.obj `if test -f '../../lib/strdup.c'; then $(CYGPATH_W) '../../lib/strdup.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strdup.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/chkdecimalpoint-strdup.Tpo ../../lib/$(DEPDIR)/chkdecimalpoint-strdup.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/strdup.c' object='../../lib/chkdecimalpoint-strdup.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chkdecimalpoint_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/chkdecimalpoint-strdup.obj `if test -f '../../lib/strdup.c'; then $(CYGPATH_W) '../../lib/strdup.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strdup.c'; fi`
-
-chkhostname-chkhostname.o: chkhostname.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chkhostname_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT chkhostname-chkhostname.o -MD -MP -MF $(DEPDIR)/chkhostname-chkhostname.Tpo -c -o chkhostname-chkhostname.o `test -f 'chkhostname.c' || echo '$(srcdir)/'`chkhostname.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/chkhostname-chkhostname.Tpo $(DEPDIR)/chkhostname-chkhostname.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='chkhostname.c' object='chkhostname-chkhostname.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chkhostname_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o chkhostname-chkhostname.o `test -f 'chkhostname.c' || echo '$(srcdir)/'`chkhostname.c
-
-chkhostname-chkhostname.obj: chkhostname.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chkhostname_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT chkhostname-chkhostname.obj -MD -MP -MF $(DEPDIR)/chkhostname-chkhostname.Tpo -c -o chkhostname-chkhostname.obj `if test -f 'chkhostname.c'; then $(CYGPATH_W) 'chkhostname.c'; else $(CYGPATH_W) '$(srcdir)/chkhostname.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/chkhostname-chkhostname.Tpo $(DEPDIR)/chkhostname-chkhostname.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='chkhostname.c' object='chkhostname-chkhostname.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chkhostname_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o chkhostname-chkhostname.obj `if test -f 'chkhostname.c'; then $(CYGPATH_W) 'chkhostname.c'; else $(CYGPATH_W) '$(srcdir)/chkhostname.c'; fi`
-
-../../lib/chkhostname-curl_gethostname.o: ../../lib/curl_gethostname.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chkhostname_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/chkhostname-curl_gethostname.o -MD -MP -MF ../../lib/$(DEPDIR)/chkhostname-curl_gethostname.Tpo -c -o ../../lib/chkhostname-curl_gethostname.o `test -f '../../lib/curl_gethostname.c' || echo '$(srcdir)/'`../../lib/curl_gethostname.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/chkhostname-curl_gethostname.Tpo ../../lib/$(DEPDIR)/chkhostname-curl_gethostname.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_gethostname.c' object='../../lib/chkhostname-curl_gethostname.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chkhostname_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/chkhostname-curl_gethostname.o `test -f '../../lib/curl_gethostname.c' || echo '$(srcdir)/'`../../lib/curl_gethostname.c
-
-../../lib/chkhostname-curl_gethostname.obj: ../../lib/curl_gethostname.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chkhostname_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/chkhostname-curl_gethostname.obj -MD -MP -MF ../../lib/$(DEPDIR)/chkhostname-curl_gethostname.Tpo -c -o ../../lib/chkhostname-curl_gethostname.obj `if test -f '../../lib/curl_gethostname.c'; then $(CYGPATH_W) '../../lib/curl_gethostname.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_gethostname.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/chkhostname-curl_gethostname.Tpo ../../lib/$(DEPDIR)/chkhostname-curl_gethostname.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_gethostname.c' object='../../lib/chkhostname-curl_gethostname.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(chkhostname_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/chkhostname-curl_gethostname.obj `if test -f '../../lib/curl_gethostname.c'; then $(CYGPATH_W) '../../lib/curl_gethostname.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_gethostname.c'; fi`
-
-lib1156-lib1156.o: lib1156.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1156_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1156-lib1156.o -MD -MP -MF $(DEPDIR)/lib1156-lib1156.Tpo -c -o lib1156-lib1156.o `test -f 'lib1156.c' || echo '$(srcdir)/'`lib1156.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1156-lib1156.Tpo $(DEPDIR)/lib1156-lib1156.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1156.c' object='lib1156-lib1156.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1156_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1156-lib1156.o `test -f 'lib1156.c' || echo '$(srcdir)/'`lib1156.c
-
-lib1156-lib1156.obj: lib1156.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1156_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1156-lib1156.obj -MD -MP -MF $(DEPDIR)/lib1156-lib1156.Tpo -c -o lib1156-lib1156.obj `if test -f 'lib1156.c'; then $(CYGPATH_W) 'lib1156.c'; else $(CYGPATH_W) '$(srcdir)/lib1156.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1156-lib1156.Tpo $(DEPDIR)/lib1156-lib1156.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1156.c' object='lib1156-lib1156.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1156_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1156-lib1156.obj `if test -f 'lib1156.c'; then $(CYGPATH_W) 'lib1156.c'; else $(CYGPATH_W) '$(srcdir)/lib1156.c'; fi`
-
-../../lib/lib1156-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1156_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1156-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1156-timediff.Tpo -c -o ../../lib/lib1156-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1156-timediff.Tpo ../../lib/$(DEPDIR)/lib1156-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1156-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1156_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1156-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1156-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1156_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1156-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1156-timediff.Tpo -c -o ../../lib/lib1156-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1156-timediff.Tpo ../../lib/$(DEPDIR)/lib1156-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1156-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1156_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1156-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1156-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1156_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1156-first.o -MD -MP -MF $(DEPDIR)/lib1156-first.Tpo -c -o lib1156-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1156-first.Tpo $(DEPDIR)/lib1156-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1156-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1156_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1156-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1156-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1156_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1156-first.obj -MD -MP -MF $(DEPDIR)/lib1156-first.Tpo -c -o lib1156-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1156-first.Tpo $(DEPDIR)/lib1156-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1156-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1156_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1156-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1156-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1156_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1156-testutil.o -MD -MP -MF $(DEPDIR)/lib1156-testutil.Tpo -c -o lib1156-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1156-testutil.Tpo $(DEPDIR)/lib1156-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1156-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1156_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1156-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1156-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1156_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1156-testutil.obj -MD -MP -MF $(DEPDIR)/lib1156-testutil.Tpo -c -o lib1156-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1156-testutil.Tpo $(DEPDIR)/lib1156-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1156-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1156_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1156-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1156-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1156_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1156-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1156-warnless.Tpo -c -o ../../lib/lib1156-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1156-warnless.Tpo ../../lib/$(DEPDIR)/lib1156-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1156-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1156_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1156-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1156-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1156_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1156-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1156-warnless.Tpo -c -o ../../lib/lib1156-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1156-warnless.Tpo ../../lib/$(DEPDIR)/lib1156-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1156-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1156_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1156-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1500-lib1500.o: lib1500.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1500-lib1500.o -MD -MP -MF $(DEPDIR)/lib1500-lib1500.Tpo -c -o lib1500-lib1500.o `test -f 'lib1500.c' || echo '$(srcdir)/'`lib1500.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1500-lib1500.Tpo $(DEPDIR)/lib1500-lib1500.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1500.c' object='lib1500-lib1500.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1500-lib1500.o `test -f 'lib1500.c' || echo '$(srcdir)/'`lib1500.c
-
-lib1500-lib1500.obj: lib1500.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1500-lib1500.obj -MD -MP -MF $(DEPDIR)/lib1500-lib1500.Tpo -c -o lib1500-lib1500.obj `if test -f 'lib1500.c'; then $(CYGPATH_W) 'lib1500.c'; else $(CYGPATH_W) '$(srcdir)/lib1500.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1500-lib1500.Tpo $(DEPDIR)/lib1500-lib1500.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1500.c' object='lib1500-lib1500.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1500-lib1500.obj `if test -f 'lib1500.c'; then $(CYGPATH_W) 'lib1500.c'; else $(CYGPATH_W) '$(srcdir)/lib1500.c'; fi`
-
-../../lib/lib1500-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1500-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1500-timediff.Tpo -c -o ../../lib/lib1500-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1500-timediff.Tpo ../../lib/$(DEPDIR)/lib1500-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1500-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1500-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1500-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1500-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1500-timediff.Tpo -c -o ../../lib/lib1500-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1500-timediff.Tpo ../../lib/$(DEPDIR)/lib1500-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1500-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1500-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1500-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1500-first.o -MD -MP -MF $(DEPDIR)/lib1500-first.Tpo -c -o lib1500-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1500-first.Tpo $(DEPDIR)/lib1500-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1500-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1500-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1500-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1500-first.obj -MD -MP -MF $(DEPDIR)/lib1500-first.Tpo -c -o lib1500-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1500-first.Tpo $(DEPDIR)/lib1500-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1500-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1500-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1500-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1500-testutil.o -MD -MP -MF $(DEPDIR)/lib1500-testutil.Tpo -c -o lib1500-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1500-testutil.Tpo $(DEPDIR)/lib1500-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1500-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1500-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1500-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1500-testutil.obj -MD -MP -MF $(DEPDIR)/lib1500-testutil.Tpo -c -o lib1500-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1500-testutil.Tpo $(DEPDIR)/lib1500-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1500-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1500-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-lib1501-lib1501.o: lib1501.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1501-lib1501.o -MD -MP -MF $(DEPDIR)/lib1501-lib1501.Tpo -c -o lib1501-lib1501.o `test -f 'lib1501.c' || echo '$(srcdir)/'`lib1501.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1501-lib1501.Tpo $(DEPDIR)/lib1501-lib1501.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1501.c' object='lib1501-lib1501.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1501-lib1501.o `test -f 'lib1501.c' || echo '$(srcdir)/'`lib1501.c
-
-lib1501-lib1501.obj: lib1501.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1501-lib1501.obj -MD -MP -MF $(DEPDIR)/lib1501-lib1501.Tpo -c -o lib1501-lib1501.obj `if test -f 'lib1501.c'; then $(CYGPATH_W) 'lib1501.c'; else $(CYGPATH_W) '$(srcdir)/lib1501.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1501-lib1501.Tpo $(DEPDIR)/lib1501-lib1501.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1501.c' object='lib1501-lib1501.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1501-lib1501.obj `if test -f 'lib1501.c'; then $(CYGPATH_W) 'lib1501.c'; else $(CYGPATH_W) '$(srcdir)/lib1501.c'; fi`
-
-../../lib/lib1501-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1501-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1501-timediff.Tpo -c -o ../../lib/lib1501-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1501-timediff.Tpo ../../lib/$(DEPDIR)/lib1501-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1501-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1501-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1501-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1501-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1501-timediff.Tpo -c -o ../../lib/lib1501-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1501-timediff.Tpo ../../lib/$(DEPDIR)/lib1501-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1501-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1501-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1501-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1501-first.o -MD -MP -MF $(DEPDIR)/lib1501-first.Tpo -c -o lib1501-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1501-first.Tpo $(DEPDIR)/lib1501-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1501-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1501-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1501-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1501-first.obj -MD -MP -MF $(DEPDIR)/lib1501-first.Tpo -c -o lib1501-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1501-first.Tpo $(DEPDIR)/lib1501-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1501-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1501-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1501-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1501-testutil.o -MD -MP -MF $(DEPDIR)/lib1501-testutil.Tpo -c -o lib1501-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1501-testutil.Tpo $(DEPDIR)/lib1501-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1501-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1501-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1501-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1501-testutil.obj -MD -MP -MF $(DEPDIR)/lib1501-testutil.Tpo -c -o lib1501-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1501-testutil.Tpo $(DEPDIR)/lib1501-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1501-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1501-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1501-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1501-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1501-warnless.Tpo -c -o ../../lib/lib1501-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1501-warnless.Tpo ../../lib/$(DEPDIR)/lib1501-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1501-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1501-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1501-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1501-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1501-warnless.Tpo -c -o ../../lib/lib1501-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1501-warnless.Tpo ../../lib/$(DEPDIR)/lib1501-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1501-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1501-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
lib1502-lib1502.o: lib1502.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1502_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1502-lib1502.o -MD -MP -MF $(DEPDIR)/lib1502-lib1502.Tpo -c -o lib1502-lib1502.o `test -f 'lib1502.c' || echo '$(srcdir)/'`lib1502.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1502-lib1502.Tpo $(DEPDIR)/lib1502-lib1502.Po
@@ -6221,832 +4078,6 @@ lib1505-testutil.obj: testutil.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1505_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1505-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-lib1506-lib1506.o: lib1506.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1506-lib1506.o -MD -MP -MF $(DEPDIR)/lib1506-lib1506.Tpo -c -o lib1506-lib1506.o `test -f 'lib1506.c' || echo '$(srcdir)/'`lib1506.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1506-lib1506.Tpo $(DEPDIR)/lib1506-lib1506.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1506.c' object='lib1506-lib1506.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1506-lib1506.o `test -f 'lib1506.c' || echo '$(srcdir)/'`lib1506.c
-
-lib1506-lib1506.obj: lib1506.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1506-lib1506.obj -MD -MP -MF $(DEPDIR)/lib1506-lib1506.Tpo -c -o lib1506-lib1506.obj `if test -f 'lib1506.c'; then $(CYGPATH_W) 'lib1506.c'; else $(CYGPATH_W) '$(srcdir)/lib1506.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1506-lib1506.Tpo $(DEPDIR)/lib1506-lib1506.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1506.c' object='lib1506-lib1506.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1506-lib1506.obj `if test -f 'lib1506.c'; then $(CYGPATH_W) 'lib1506.c'; else $(CYGPATH_W) '$(srcdir)/lib1506.c'; fi`
-
-../../lib/lib1506-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1506-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1506-timediff.Tpo -c -o ../../lib/lib1506-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1506-timediff.Tpo ../../lib/$(DEPDIR)/lib1506-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1506-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1506-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1506-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1506-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1506-timediff.Tpo -c -o ../../lib/lib1506-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1506-timediff.Tpo ../../lib/$(DEPDIR)/lib1506-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1506-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1506-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1506-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1506-first.o -MD -MP -MF $(DEPDIR)/lib1506-first.Tpo -c -o lib1506-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1506-first.Tpo $(DEPDIR)/lib1506-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1506-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1506-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1506-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1506-first.obj -MD -MP -MF $(DEPDIR)/lib1506-first.Tpo -c -o lib1506-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1506-first.Tpo $(DEPDIR)/lib1506-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1506-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1506-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1506-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1506-testutil.o -MD -MP -MF $(DEPDIR)/lib1506-testutil.Tpo -c -o lib1506-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1506-testutil.Tpo $(DEPDIR)/lib1506-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1506-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1506-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1506-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1506-testutil.obj -MD -MP -MF $(DEPDIR)/lib1506-testutil.Tpo -c -o lib1506-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1506-testutil.Tpo $(DEPDIR)/lib1506-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1506-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1506-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1506-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1506-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1506-warnless.Tpo -c -o ../../lib/lib1506-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1506-warnless.Tpo ../../lib/$(DEPDIR)/lib1506-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1506-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1506-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1506-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1506-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1506-warnless.Tpo -c -o ../../lib/lib1506-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1506-warnless.Tpo ../../lib/$(DEPDIR)/lib1506-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1506-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1506-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1507-lib1507.o: lib1507.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1507-lib1507.o -MD -MP -MF $(DEPDIR)/lib1507-lib1507.Tpo -c -o lib1507-lib1507.o `test -f 'lib1507.c' || echo '$(srcdir)/'`lib1507.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1507-lib1507.Tpo $(DEPDIR)/lib1507-lib1507.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1507.c' object='lib1507-lib1507.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1507-lib1507.o `test -f 'lib1507.c' || echo '$(srcdir)/'`lib1507.c
-
-lib1507-lib1507.obj: lib1507.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1507-lib1507.obj -MD -MP -MF $(DEPDIR)/lib1507-lib1507.Tpo -c -o lib1507-lib1507.obj `if test -f 'lib1507.c'; then $(CYGPATH_W) 'lib1507.c'; else $(CYGPATH_W) '$(srcdir)/lib1507.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1507-lib1507.Tpo $(DEPDIR)/lib1507-lib1507.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1507.c' object='lib1507-lib1507.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1507-lib1507.obj `if test -f 'lib1507.c'; then $(CYGPATH_W) 'lib1507.c'; else $(CYGPATH_W) '$(srcdir)/lib1507.c'; fi`
-
-../../lib/lib1507-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1507-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1507-timediff.Tpo -c -o ../../lib/lib1507-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1507-timediff.Tpo ../../lib/$(DEPDIR)/lib1507-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1507-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1507-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1507-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1507-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1507-timediff.Tpo -c -o ../../lib/lib1507-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1507-timediff.Tpo ../../lib/$(DEPDIR)/lib1507-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1507-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1507-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1507-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1507-first.o -MD -MP -MF $(DEPDIR)/lib1507-first.Tpo -c -o lib1507-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1507-first.Tpo $(DEPDIR)/lib1507-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1507-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1507-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1507-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1507-first.obj -MD -MP -MF $(DEPDIR)/lib1507-first.Tpo -c -o lib1507-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1507-first.Tpo $(DEPDIR)/lib1507-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1507-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1507-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1507-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1507-testutil.o -MD -MP -MF $(DEPDIR)/lib1507-testutil.Tpo -c -o lib1507-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1507-testutil.Tpo $(DEPDIR)/lib1507-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1507-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1507-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1507-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1507-testutil.obj -MD -MP -MF $(DEPDIR)/lib1507-testutil.Tpo -c -o lib1507-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1507-testutil.Tpo $(DEPDIR)/lib1507-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1507-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1507-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1507-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1507-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1507-warnless.Tpo -c -o ../../lib/lib1507-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1507-warnless.Tpo ../../lib/$(DEPDIR)/lib1507-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1507-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1507-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1507-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1507-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1507-warnless.Tpo -c -o ../../lib/lib1507-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1507-warnless.Tpo ../../lib/$(DEPDIR)/lib1507-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1507-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1507-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1508-lib1508.o: lib1508.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1508-lib1508.o -MD -MP -MF $(DEPDIR)/lib1508-lib1508.Tpo -c -o lib1508-lib1508.o `test -f 'lib1508.c' || echo '$(srcdir)/'`lib1508.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1508-lib1508.Tpo $(DEPDIR)/lib1508-lib1508.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1508.c' object='lib1508-lib1508.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1508-lib1508.o `test -f 'lib1508.c' || echo '$(srcdir)/'`lib1508.c
-
-lib1508-lib1508.obj: lib1508.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1508-lib1508.obj -MD -MP -MF $(DEPDIR)/lib1508-lib1508.Tpo -c -o lib1508-lib1508.obj `if test -f 'lib1508.c'; then $(CYGPATH_W) 'lib1508.c'; else $(CYGPATH_W) '$(srcdir)/lib1508.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1508-lib1508.Tpo $(DEPDIR)/lib1508-lib1508.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1508.c' object='lib1508-lib1508.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1508-lib1508.obj `if test -f 'lib1508.c'; then $(CYGPATH_W) 'lib1508.c'; else $(CYGPATH_W) '$(srcdir)/lib1508.c'; fi`
-
-../../lib/lib1508-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1508-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1508-timediff.Tpo -c -o ../../lib/lib1508-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1508-timediff.Tpo ../../lib/$(DEPDIR)/lib1508-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1508-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1508-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1508-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1508-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1508-timediff.Tpo -c -o ../../lib/lib1508-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1508-timediff.Tpo ../../lib/$(DEPDIR)/lib1508-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1508-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1508-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1508-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1508-first.o -MD -MP -MF $(DEPDIR)/lib1508-first.Tpo -c -o lib1508-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1508-first.Tpo $(DEPDIR)/lib1508-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1508-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1508-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1508-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1508-first.obj -MD -MP -MF $(DEPDIR)/lib1508-first.Tpo -c -o lib1508-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1508-first.Tpo $(DEPDIR)/lib1508-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1508-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1508-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1508-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1508-testutil.o -MD -MP -MF $(DEPDIR)/lib1508-testutil.Tpo -c -o lib1508-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1508-testutil.Tpo $(DEPDIR)/lib1508-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1508-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1508-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1508-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1508-testutil.obj -MD -MP -MF $(DEPDIR)/lib1508-testutil.Tpo -c -o lib1508-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1508-testutil.Tpo $(DEPDIR)/lib1508-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1508-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1508-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1508-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1508-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1508-warnless.Tpo -c -o ../../lib/lib1508-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1508-warnless.Tpo ../../lib/$(DEPDIR)/lib1508-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1508-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1508-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1508-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1508-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1508-warnless.Tpo -c -o ../../lib/lib1508-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1508-warnless.Tpo ../../lib/$(DEPDIR)/lib1508-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1508-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1508-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1509-lib1509.o: lib1509.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1509-lib1509.o -MD -MP -MF $(DEPDIR)/lib1509-lib1509.Tpo -c -o lib1509-lib1509.o `test -f 'lib1509.c' || echo '$(srcdir)/'`lib1509.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1509-lib1509.Tpo $(DEPDIR)/lib1509-lib1509.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1509.c' object='lib1509-lib1509.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1509-lib1509.o `test -f 'lib1509.c' || echo '$(srcdir)/'`lib1509.c
-
-lib1509-lib1509.obj: lib1509.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1509-lib1509.obj -MD -MP -MF $(DEPDIR)/lib1509-lib1509.Tpo -c -o lib1509-lib1509.obj `if test -f 'lib1509.c'; then $(CYGPATH_W) 'lib1509.c'; else $(CYGPATH_W) '$(srcdir)/lib1509.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1509-lib1509.Tpo $(DEPDIR)/lib1509-lib1509.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1509.c' object='lib1509-lib1509.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1509-lib1509.obj `if test -f 'lib1509.c'; then $(CYGPATH_W) 'lib1509.c'; else $(CYGPATH_W) '$(srcdir)/lib1509.c'; fi`
-
-../../lib/lib1509-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1509-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1509-timediff.Tpo -c -o ../../lib/lib1509-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1509-timediff.Tpo ../../lib/$(DEPDIR)/lib1509-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1509-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1509-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1509-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1509-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1509-timediff.Tpo -c -o ../../lib/lib1509-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1509-timediff.Tpo ../../lib/$(DEPDIR)/lib1509-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1509-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1509-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1509-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1509-first.o -MD -MP -MF $(DEPDIR)/lib1509-first.Tpo -c -o lib1509-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1509-first.Tpo $(DEPDIR)/lib1509-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1509-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1509-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1509-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1509-first.obj -MD -MP -MF $(DEPDIR)/lib1509-first.Tpo -c -o lib1509-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1509-first.Tpo $(DEPDIR)/lib1509-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1509-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1509-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1509-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1509-testutil.o -MD -MP -MF $(DEPDIR)/lib1509-testutil.Tpo -c -o lib1509-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1509-testutil.Tpo $(DEPDIR)/lib1509-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1509-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1509-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1509-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1509-testutil.obj -MD -MP -MF $(DEPDIR)/lib1509-testutil.Tpo -c -o lib1509-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1509-testutil.Tpo $(DEPDIR)/lib1509-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1509-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1509-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1509-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1509-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1509-warnless.Tpo -c -o ../../lib/lib1509-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1509-warnless.Tpo ../../lib/$(DEPDIR)/lib1509-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1509-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1509-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1509-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1509-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1509-warnless.Tpo -c -o ../../lib/lib1509-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1509-warnless.Tpo ../../lib/$(DEPDIR)/lib1509-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1509-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1509-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1510-lib1510.o: lib1510.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1510-lib1510.o -MD -MP -MF $(DEPDIR)/lib1510-lib1510.Tpo -c -o lib1510-lib1510.o `test -f 'lib1510.c' || echo '$(srcdir)/'`lib1510.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1510-lib1510.Tpo $(DEPDIR)/lib1510-lib1510.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1510.c' object='lib1510-lib1510.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1510-lib1510.o `test -f 'lib1510.c' || echo '$(srcdir)/'`lib1510.c
-
-lib1510-lib1510.obj: lib1510.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1510-lib1510.obj -MD -MP -MF $(DEPDIR)/lib1510-lib1510.Tpo -c -o lib1510-lib1510.obj `if test -f 'lib1510.c'; then $(CYGPATH_W) 'lib1510.c'; else $(CYGPATH_W) '$(srcdir)/lib1510.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1510-lib1510.Tpo $(DEPDIR)/lib1510-lib1510.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1510.c' object='lib1510-lib1510.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1510-lib1510.obj `if test -f 'lib1510.c'; then $(CYGPATH_W) 'lib1510.c'; else $(CYGPATH_W) '$(srcdir)/lib1510.c'; fi`
-
-../../lib/lib1510-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1510-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1510-timediff.Tpo -c -o ../../lib/lib1510-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1510-timediff.Tpo ../../lib/$(DEPDIR)/lib1510-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1510-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1510-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1510-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1510-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1510-timediff.Tpo -c -o ../../lib/lib1510-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1510-timediff.Tpo ../../lib/$(DEPDIR)/lib1510-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1510-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1510-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1510-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1510-first.o -MD -MP -MF $(DEPDIR)/lib1510-first.Tpo -c -o lib1510-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1510-first.Tpo $(DEPDIR)/lib1510-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1510-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1510-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1510-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1510-first.obj -MD -MP -MF $(DEPDIR)/lib1510-first.Tpo -c -o lib1510-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1510-first.Tpo $(DEPDIR)/lib1510-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1510-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1510-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1510-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1510-testutil.o -MD -MP -MF $(DEPDIR)/lib1510-testutil.Tpo -c -o lib1510-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1510-testutil.Tpo $(DEPDIR)/lib1510-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1510-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1510-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1510-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1510-testutil.obj -MD -MP -MF $(DEPDIR)/lib1510-testutil.Tpo -c -o lib1510-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1510-testutil.Tpo $(DEPDIR)/lib1510-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1510-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1510-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1510-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1510-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1510-warnless.Tpo -c -o ../../lib/lib1510-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1510-warnless.Tpo ../../lib/$(DEPDIR)/lib1510-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1510-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1510-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1510-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1510-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1510-warnless.Tpo -c -o ../../lib/lib1510-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1510-warnless.Tpo ../../lib/$(DEPDIR)/lib1510-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1510-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1510-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1511-lib1511.o: lib1511.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1511-lib1511.o -MD -MP -MF $(DEPDIR)/lib1511-lib1511.Tpo -c -o lib1511-lib1511.o `test -f 'lib1511.c' || echo '$(srcdir)/'`lib1511.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1511-lib1511.Tpo $(DEPDIR)/lib1511-lib1511.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1511.c' object='lib1511-lib1511.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1511-lib1511.o `test -f 'lib1511.c' || echo '$(srcdir)/'`lib1511.c
-
-lib1511-lib1511.obj: lib1511.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1511-lib1511.obj -MD -MP -MF $(DEPDIR)/lib1511-lib1511.Tpo -c -o lib1511-lib1511.obj `if test -f 'lib1511.c'; then $(CYGPATH_W) 'lib1511.c'; else $(CYGPATH_W) '$(srcdir)/lib1511.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1511-lib1511.Tpo $(DEPDIR)/lib1511-lib1511.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1511.c' object='lib1511-lib1511.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1511-lib1511.obj `if test -f 'lib1511.c'; then $(CYGPATH_W) 'lib1511.c'; else $(CYGPATH_W) '$(srcdir)/lib1511.c'; fi`
-
-../../lib/lib1511-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1511-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1511-timediff.Tpo -c -o ../../lib/lib1511-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1511-timediff.Tpo ../../lib/$(DEPDIR)/lib1511-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1511-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1511-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1511-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1511-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1511-timediff.Tpo -c -o ../../lib/lib1511-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1511-timediff.Tpo ../../lib/$(DEPDIR)/lib1511-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1511-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1511-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1511-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1511-first.o -MD -MP -MF $(DEPDIR)/lib1511-first.Tpo -c -o lib1511-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1511-first.Tpo $(DEPDIR)/lib1511-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1511-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1511-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1511-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1511-first.obj -MD -MP -MF $(DEPDIR)/lib1511-first.Tpo -c -o lib1511-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1511-first.Tpo $(DEPDIR)/lib1511-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1511-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1511-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1511-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1511-testutil.o -MD -MP -MF $(DEPDIR)/lib1511-testutil.Tpo -c -o lib1511-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1511-testutil.Tpo $(DEPDIR)/lib1511-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1511-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1511-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1511-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1511-testutil.obj -MD -MP -MF $(DEPDIR)/lib1511-testutil.Tpo -c -o lib1511-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1511-testutil.Tpo $(DEPDIR)/lib1511-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1511-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1511-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1511-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1511-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1511-warnless.Tpo -c -o ../../lib/lib1511-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1511-warnless.Tpo ../../lib/$(DEPDIR)/lib1511-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1511-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1511-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1511-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1511-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1511-warnless.Tpo -c -o ../../lib/lib1511-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1511-warnless.Tpo ../../lib/$(DEPDIR)/lib1511-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1511-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1511-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1512-lib1512.o: lib1512.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1512-lib1512.o -MD -MP -MF $(DEPDIR)/lib1512-lib1512.Tpo -c -o lib1512-lib1512.o `test -f 'lib1512.c' || echo '$(srcdir)/'`lib1512.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1512-lib1512.Tpo $(DEPDIR)/lib1512-lib1512.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1512.c' object='lib1512-lib1512.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1512-lib1512.o `test -f 'lib1512.c' || echo '$(srcdir)/'`lib1512.c
-
-lib1512-lib1512.obj: lib1512.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1512-lib1512.obj -MD -MP -MF $(DEPDIR)/lib1512-lib1512.Tpo -c -o lib1512-lib1512.obj `if test -f 'lib1512.c'; then $(CYGPATH_W) 'lib1512.c'; else $(CYGPATH_W) '$(srcdir)/lib1512.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1512-lib1512.Tpo $(DEPDIR)/lib1512-lib1512.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1512.c' object='lib1512-lib1512.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1512-lib1512.obj `if test -f 'lib1512.c'; then $(CYGPATH_W) 'lib1512.c'; else $(CYGPATH_W) '$(srcdir)/lib1512.c'; fi`
-
-../../lib/lib1512-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1512-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1512-timediff.Tpo -c -o ../../lib/lib1512-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1512-timediff.Tpo ../../lib/$(DEPDIR)/lib1512-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1512-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1512-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1512-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1512-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1512-timediff.Tpo -c -o ../../lib/lib1512-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1512-timediff.Tpo ../../lib/$(DEPDIR)/lib1512-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1512-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1512-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1512-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1512-first.o -MD -MP -MF $(DEPDIR)/lib1512-first.Tpo -c -o lib1512-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1512-first.Tpo $(DEPDIR)/lib1512-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1512-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1512-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1512-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1512-first.obj -MD -MP -MF $(DEPDIR)/lib1512-first.Tpo -c -o lib1512-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1512-first.Tpo $(DEPDIR)/lib1512-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1512-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1512-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1512-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1512-testutil.o -MD -MP -MF $(DEPDIR)/lib1512-testutil.Tpo -c -o lib1512-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1512-testutil.Tpo $(DEPDIR)/lib1512-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1512-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1512-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1512-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1512-testutil.obj -MD -MP -MF $(DEPDIR)/lib1512-testutil.Tpo -c -o lib1512-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1512-testutil.Tpo $(DEPDIR)/lib1512-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1512-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1512-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1512-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1512-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1512-warnless.Tpo -c -o ../../lib/lib1512-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1512-warnless.Tpo ../../lib/$(DEPDIR)/lib1512-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1512-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1512-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1512-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1512-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1512-warnless.Tpo -c -o ../../lib/lib1512-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1512-warnless.Tpo ../../lib/$(DEPDIR)/lib1512-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1512-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1512-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1513-lib1513.o: lib1513.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1513-lib1513.o -MD -MP -MF $(DEPDIR)/lib1513-lib1513.Tpo -c -o lib1513-lib1513.o `test -f 'lib1513.c' || echo '$(srcdir)/'`lib1513.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1513-lib1513.Tpo $(DEPDIR)/lib1513-lib1513.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1513.c' object='lib1513-lib1513.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1513-lib1513.o `test -f 'lib1513.c' || echo '$(srcdir)/'`lib1513.c
-
-lib1513-lib1513.obj: lib1513.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1513-lib1513.obj -MD -MP -MF $(DEPDIR)/lib1513-lib1513.Tpo -c -o lib1513-lib1513.obj `if test -f 'lib1513.c'; then $(CYGPATH_W) 'lib1513.c'; else $(CYGPATH_W) '$(srcdir)/lib1513.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1513-lib1513.Tpo $(DEPDIR)/lib1513-lib1513.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1513.c' object='lib1513-lib1513.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1513-lib1513.obj `if test -f 'lib1513.c'; then $(CYGPATH_W) 'lib1513.c'; else $(CYGPATH_W) '$(srcdir)/lib1513.c'; fi`
-
-../../lib/lib1513-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1513-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1513-timediff.Tpo -c -o ../../lib/lib1513-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1513-timediff.Tpo ../../lib/$(DEPDIR)/lib1513-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1513-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1513-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1513-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1513-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1513-timediff.Tpo -c -o ../../lib/lib1513-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1513-timediff.Tpo ../../lib/$(DEPDIR)/lib1513-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1513-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1513-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1513-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1513-first.o -MD -MP -MF $(DEPDIR)/lib1513-first.Tpo -c -o lib1513-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1513-first.Tpo $(DEPDIR)/lib1513-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1513-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1513-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1513-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1513-first.obj -MD -MP -MF $(DEPDIR)/lib1513-first.Tpo -c -o lib1513-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1513-first.Tpo $(DEPDIR)/lib1513-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1513-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1513-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1513-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1513-testutil.o -MD -MP -MF $(DEPDIR)/lib1513-testutil.Tpo -c -o lib1513-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1513-testutil.Tpo $(DEPDIR)/lib1513-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1513-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1513-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1513-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1513-testutil.obj -MD -MP -MF $(DEPDIR)/lib1513-testutil.Tpo -c -o lib1513-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1513-testutil.Tpo $(DEPDIR)/lib1513-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1513-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1513-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1513-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1513-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1513-warnless.Tpo -c -o ../../lib/lib1513-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1513-warnless.Tpo ../../lib/$(DEPDIR)/lib1513-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1513-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1513-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1513-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1513-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1513-warnless.Tpo -c -o ../../lib/lib1513-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1513-warnless.Tpo ../../lib/$(DEPDIR)/lib1513-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1513-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1513-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1514-lib1514.o: lib1514.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1514-lib1514.o -MD -MP -MF $(DEPDIR)/lib1514-lib1514.Tpo -c -o lib1514-lib1514.o `test -f 'lib1514.c' || echo '$(srcdir)/'`lib1514.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1514-lib1514.Tpo $(DEPDIR)/lib1514-lib1514.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1514.c' object='lib1514-lib1514.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1514-lib1514.o `test -f 'lib1514.c' || echo '$(srcdir)/'`lib1514.c
-
-lib1514-lib1514.obj: lib1514.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1514-lib1514.obj -MD -MP -MF $(DEPDIR)/lib1514-lib1514.Tpo -c -o lib1514-lib1514.obj `if test -f 'lib1514.c'; then $(CYGPATH_W) 'lib1514.c'; else $(CYGPATH_W) '$(srcdir)/lib1514.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1514-lib1514.Tpo $(DEPDIR)/lib1514-lib1514.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1514.c' object='lib1514-lib1514.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1514-lib1514.obj `if test -f 'lib1514.c'; then $(CYGPATH_W) 'lib1514.c'; else $(CYGPATH_W) '$(srcdir)/lib1514.c'; fi`
-
-../../lib/lib1514-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1514-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1514-timediff.Tpo -c -o ../../lib/lib1514-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1514-timediff.Tpo ../../lib/$(DEPDIR)/lib1514-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1514-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1514-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1514-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1514-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1514-timediff.Tpo -c -o ../../lib/lib1514-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1514-timediff.Tpo ../../lib/$(DEPDIR)/lib1514-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1514-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1514-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1514-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1514-first.o -MD -MP -MF $(DEPDIR)/lib1514-first.Tpo -c -o lib1514-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1514-first.Tpo $(DEPDIR)/lib1514-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1514-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1514-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1514-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1514-first.obj -MD -MP -MF $(DEPDIR)/lib1514-first.Tpo -c -o lib1514-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1514-first.Tpo $(DEPDIR)/lib1514-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1514-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1514-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1514-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1514-testutil.o -MD -MP -MF $(DEPDIR)/lib1514-testutil.Tpo -c -o lib1514-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1514-testutil.Tpo $(DEPDIR)/lib1514-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1514-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1514-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1514-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1514-testutil.obj -MD -MP -MF $(DEPDIR)/lib1514-testutil.Tpo -c -o lib1514-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1514-testutil.Tpo $(DEPDIR)/lib1514-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1514-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1514-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1514-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1514-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1514-warnless.Tpo -c -o ../../lib/lib1514-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1514-warnless.Tpo ../../lib/$(DEPDIR)/lib1514-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1514-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1514-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1514-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1514-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1514-warnless.Tpo -c -o ../../lib/lib1514-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1514-warnless.Tpo ../../lib/$(DEPDIR)/lib1514-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1514-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1514-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1515-lib1515.o: lib1515.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1515-lib1515.o -MD -MP -MF $(DEPDIR)/lib1515-lib1515.Tpo -c -o lib1515-lib1515.o `test -f 'lib1515.c' || echo '$(srcdir)/'`lib1515.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1515-lib1515.Tpo $(DEPDIR)/lib1515-lib1515.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1515.c' object='lib1515-lib1515.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1515-lib1515.o `test -f 'lib1515.c' || echo '$(srcdir)/'`lib1515.c
-
-lib1515-lib1515.obj: lib1515.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1515-lib1515.obj -MD -MP -MF $(DEPDIR)/lib1515-lib1515.Tpo -c -o lib1515-lib1515.obj `if test -f 'lib1515.c'; then $(CYGPATH_W) 'lib1515.c'; else $(CYGPATH_W) '$(srcdir)/lib1515.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1515-lib1515.Tpo $(DEPDIR)/lib1515-lib1515.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1515.c' object='lib1515-lib1515.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1515-lib1515.obj `if test -f 'lib1515.c'; then $(CYGPATH_W) 'lib1515.c'; else $(CYGPATH_W) '$(srcdir)/lib1515.c'; fi`
-
-../../lib/lib1515-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1515-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1515-timediff.Tpo -c -o ../../lib/lib1515-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1515-timediff.Tpo ../../lib/$(DEPDIR)/lib1515-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1515-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1515-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1515-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1515-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1515-timediff.Tpo -c -o ../../lib/lib1515-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1515-timediff.Tpo ../../lib/$(DEPDIR)/lib1515-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1515-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1515-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1515-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1515-first.o -MD -MP -MF $(DEPDIR)/lib1515-first.Tpo -c -o lib1515-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1515-first.Tpo $(DEPDIR)/lib1515-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1515-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1515-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1515-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1515-first.obj -MD -MP -MF $(DEPDIR)/lib1515-first.Tpo -c -o lib1515-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1515-first.Tpo $(DEPDIR)/lib1515-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1515-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1515-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1515-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1515-testutil.o -MD -MP -MF $(DEPDIR)/lib1515-testutil.Tpo -c -o lib1515-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1515-testutil.Tpo $(DEPDIR)/lib1515-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1515-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1515-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1515-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1515-testutil.obj -MD -MP -MF $(DEPDIR)/lib1515-testutil.Tpo -c -o lib1515-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1515-testutil.Tpo $(DEPDIR)/lib1515-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1515-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1515-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1515-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1515-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1515-warnless.Tpo -c -o ../../lib/lib1515-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1515-warnless.Tpo ../../lib/$(DEPDIR)/lib1515-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1515-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1515-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1515-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1515-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1515-warnless.Tpo -c -o ../../lib/lib1515-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1515-warnless.Tpo ../../lib/$(DEPDIR)/lib1515-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1515-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1515-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1517-lib1517.o: lib1517.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1517_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1517-lib1517.o -MD -MP -MF $(DEPDIR)/lib1517-lib1517.Tpo -c -o lib1517-lib1517.o `test -f 'lib1517.c' || echo '$(srcdir)/'`lib1517.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1517-lib1517.Tpo $(DEPDIR)/lib1517-lib1517.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1517.c' object='lib1517-lib1517.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1517_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1517-lib1517.o `test -f 'lib1517.c' || echo '$(srcdir)/'`lib1517.c
-
-lib1517-lib1517.obj: lib1517.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1517_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1517-lib1517.obj -MD -MP -MF $(DEPDIR)/lib1517-lib1517.Tpo -c -o lib1517-lib1517.obj `if test -f 'lib1517.c'; then $(CYGPATH_W) 'lib1517.c'; else $(CYGPATH_W) '$(srcdir)/lib1517.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1517-lib1517.Tpo $(DEPDIR)/lib1517-lib1517.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1517.c' object='lib1517-lib1517.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1517_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1517-lib1517.obj `if test -f 'lib1517.c'; then $(CYGPATH_W) 'lib1517.c'; else $(CYGPATH_W) '$(srcdir)/lib1517.c'; fi`
-
-../../lib/lib1517-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1517_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1517-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1517-timediff.Tpo -c -o ../../lib/lib1517-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1517-timediff.Tpo ../../lib/$(DEPDIR)/lib1517-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1517-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1517_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1517-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1517-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1517_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1517-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1517-timediff.Tpo -c -o ../../lib/lib1517-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1517-timediff.Tpo ../../lib/$(DEPDIR)/lib1517-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1517-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1517_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1517-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1517-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1517_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1517-first.o -MD -MP -MF $(DEPDIR)/lib1517-first.Tpo -c -o lib1517-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1517-first.Tpo $(DEPDIR)/lib1517-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1517-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1517_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1517-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1517-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1517_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1517-first.obj -MD -MP -MF $(DEPDIR)/lib1517-first.Tpo -c -o lib1517-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1517-first.Tpo $(DEPDIR)/lib1517-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1517-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1517_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1517-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1518-lib1518.o: lib1518.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1518-lib1518.o -MD -MP -MF $(DEPDIR)/lib1518-lib1518.Tpo -c -o lib1518-lib1518.o `test -f 'lib1518.c' || echo '$(srcdir)/'`lib1518.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1518-lib1518.Tpo $(DEPDIR)/lib1518-lib1518.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1518.c' object='lib1518-lib1518.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1518-lib1518.o `test -f 'lib1518.c' || echo '$(srcdir)/'`lib1518.c
-
-lib1518-lib1518.obj: lib1518.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1518-lib1518.obj -MD -MP -MF $(DEPDIR)/lib1518-lib1518.Tpo -c -o lib1518-lib1518.obj `if test -f 'lib1518.c'; then $(CYGPATH_W) 'lib1518.c'; else $(CYGPATH_W) '$(srcdir)/lib1518.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1518-lib1518.Tpo $(DEPDIR)/lib1518-lib1518.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1518.c' object='lib1518-lib1518.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1518-lib1518.obj `if test -f 'lib1518.c'; then $(CYGPATH_W) 'lib1518.c'; else $(CYGPATH_W) '$(srcdir)/lib1518.c'; fi`
-
-../../lib/lib1518-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1518-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1518-timediff.Tpo -c -o ../../lib/lib1518-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1518-timediff.Tpo ../../lib/$(DEPDIR)/lib1518-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1518-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1518-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1518-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1518-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1518-timediff.Tpo -c -o ../../lib/lib1518-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1518-timediff.Tpo ../../lib/$(DEPDIR)/lib1518-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1518-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1518-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1518-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1518-first.o -MD -MP -MF $(DEPDIR)/lib1518-first.Tpo -c -o lib1518-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1518-first.Tpo $(DEPDIR)/lib1518-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1518-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1518-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1518-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1518-first.obj -MD -MP -MF $(DEPDIR)/lib1518-first.Tpo -c -o lib1518-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1518-first.Tpo $(DEPDIR)/lib1518-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1518-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1518-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1520-lib1520.o: lib1520.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1520_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1520-lib1520.o -MD -MP -MF $(DEPDIR)/lib1520-lib1520.Tpo -c -o lib1520-lib1520.o `test -f 'lib1520.c' || echo '$(srcdir)/'`lib1520.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1520-lib1520.Tpo $(DEPDIR)/lib1520-lib1520.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1520.c' object='lib1520-lib1520.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1520_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1520-lib1520.o `test -f 'lib1520.c' || echo '$(srcdir)/'`lib1520.c
-
-lib1520-lib1520.obj: lib1520.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1520_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1520-lib1520.obj -MD -MP -MF $(DEPDIR)/lib1520-lib1520.Tpo -c -o lib1520-lib1520.obj `if test -f 'lib1520.c'; then $(CYGPATH_W) 'lib1520.c'; else $(CYGPATH_W) '$(srcdir)/lib1520.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1520-lib1520.Tpo $(DEPDIR)/lib1520-lib1520.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1520.c' object='lib1520-lib1520.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1520_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1520-lib1520.obj `if test -f 'lib1520.c'; then $(CYGPATH_W) 'lib1520.c'; else $(CYGPATH_W) '$(srcdir)/lib1520.c'; fi`
-
-../../lib/lib1520-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1520_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1520-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1520-timediff.Tpo -c -o ../../lib/lib1520-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1520-timediff.Tpo ../../lib/$(DEPDIR)/lib1520-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1520-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1520_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1520-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1520-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1520_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1520-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1520-timediff.Tpo -c -o ../../lib/lib1520-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1520-timediff.Tpo ../../lib/$(DEPDIR)/lib1520-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1520-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1520_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1520-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1520-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1520_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1520-first.o -MD -MP -MF $(DEPDIR)/lib1520-first.Tpo -c -o lib1520-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1520-first.Tpo $(DEPDIR)/lib1520-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1520-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1520_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1520-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1520-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1520_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1520-first.obj -MD -MP -MF $(DEPDIR)/lib1520-first.Tpo -c -o lib1520-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1520-first.Tpo $(DEPDIR)/lib1520-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1520-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1520_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1520-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
lib1521-lib1521.o: lib1521.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1521_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1521-lib1521.o -MD -MP -MF $(DEPDIR)/lib1521-lib1521.Tpo -c -o lib1521-lib1521.o `test -f 'lib1521.c' || echo '$(srcdir)/'`lib1521.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1521-lib1521.Tpo $(DEPDIR)/lib1521-lib1521.Po
@@ -7089,1098 +4120,6 @@ lib1521-first.obj: first.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1521_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1521-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-lib1522-lib1522.o: lib1522.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1522_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1522-lib1522.o -MD -MP -MF $(DEPDIR)/lib1522-lib1522.Tpo -c -o lib1522-lib1522.o `test -f 'lib1522.c' || echo '$(srcdir)/'`lib1522.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1522-lib1522.Tpo $(DEPDIR)/lib1522-lib1522.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1522.c' object='lib1522-lib1522.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1522_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1522-lib1522.o `test -f 'lib1522.c' || echo '$(srcdir)/'`lib1522.c
-
-lib1522-lib1522.obj: lib1522.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1522_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1522-lib1522.obj -MD -MP -MF $(DEPDIR)/lib1522-lib1522.Tpo -c -o lib1522-lib1522.obj `if test -f 'lib1522.c'; then $(CYGPATH_W) 'lib1522.c'; else $(CYGPATH_W) '$(srcdir)/lib1522.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1522-lib1522.Tpo $(DEPDIR)/lib1522-lib1522.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1522.c' object='lib1522-lib1522.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1522_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1522-lib1522.obj `if test -f 'lib1522.c'; then $(CYGPATH_W) 'lib1522.c'; else $(CYGPATH_W) '$(srcdir)/lib1522.c'; fi`
-
-../../lib/lib1522-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1522_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1522-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1522-timediff.Tpo -c -o ../../lib/lib1522-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1522-timediff.Tpo ../../lib/$(DEPDIR)/lib1522-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1522-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1522_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1522-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1522-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1522_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1522-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1522-timediff.Tpo -c -o ../../lib/lib1522-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1522-timediff.Tpo ../../lib/$(DEPDIR)/lib1522-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1522-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1522_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1522-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1522-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1522_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1522-first.o -MD -MP -MF $(DEPDIR)/lib1522-first.Tpo -c -o lib1522-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1522-first.Tpo $(DEPDIR)/lib1522-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1522-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1522_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1522-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1522-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1522_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1522-first.obj -MD -MP -MF $(DEPDIR)/lib1522-first.Tpo -c -o lib1522-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1522-first.Tpo $(DEPDIR)/lib1522-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1522-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1522_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1522-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1522-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1522_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1522-testutil.o -MD -MP -MF $(DEPDIR)/lib1522-testutil.Tpo -c -o lib1522-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1522-testutil.Tpo $(DEPDIR)/lib1522-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1522-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1522_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1522-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1522-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1522_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1522-testutil.obj -MD -MP -MF $(DEPDIR)/lib1522-testutil.Tpo -c -o lib1522-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1522-testutil.Tpo $(DEPDIR)/lib1522-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1522-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1522_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1522-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-lib1522-testtrace.o: testtrace.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1522_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1522-testtrace.o -MD -MP -MF $(DEPDIR)/lib1522-testtrace.Tpo -c -o lib1522-testtrace.o `test -f 'testtrace.c' || echo '$(srcdir)/'`testtrace.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1522-testtrace.Tpo $(DEPDIR)/lib1522-testtrace.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testtrace.c' object='lib1522-testtrace.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1522_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1522-testtrace.o `test -f 'testtrace.c' || echo '$(srcdir)/'`testtrace.c
-
-lib1522-testtrace.obj: testtrace.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1522_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1522-testtrace.obj -MD -MP -MF $(DEPDIR)/lib1522-testtrace.Tpo -c -o lib1522-testtrace.obj `if test -f 'testtrace.c'; then $(CYGPATH_W) 'testtrace.c'; else $(CYGPATH_W) '$(srcdir)/testtrace.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1522-testtrace.Tpo $(DEPDIR)/lib1522-testtrace.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testtrace.c' object='lib1522-testtrace.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1522_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1522-testtrace.obj `if test -f 'testtrace.c'; then $(CYGPATH_W) 'testtrace.c'; else $(CYGPATH_W) '$(srcdir)/testtrace.c'; fi`
-
-lib1523-lib1523.o: lib1523.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1523_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1523-lib1523.o -MD -MP -MF $(DEPDIR)/lib1523-lib1523.Tpo -c -o lib1523-lib1523.o `test -f 'lib1523.c' || echo '$(srcdir)/'`lib1523.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1523-lib1523.Tpo $(DEPDIR)/lib1523-lib1523.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1523.c' object='lib1523-lib1523.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1523_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1523-lib1523.o `test -f 'lib1523.c' || echo '$(srcdir)/'`lib1523.c
-
-lib1523-lib1523.obj: lib1523.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1523_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1523-lib1523.obj -MD -MP -MF $(DEPDIR)/lib1523-lib1523.Tpo -c -o lib1523-lib1523.obj `if test -f 'lib1523.c'; then $(CYGPATH_W) 'lib1523.c'; else $(CYGPATH_W) '$(srcdir)/lib1523.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1523-lib1523.Tpo $(DEPDIR)/lib1523-lib1523.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1523.c' object='lib1523-lib1523.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1523_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1523-lib1523.obj `if test -f 'lib1523.c'; then $(CYGPATH_W) 'lib1523.c'; else $(CYGPATH_W) '$(srcdir)/lib1523.c'; fi`
-
-../../lib/lib1523-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1523_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1523-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1523-timediff.Tpo -c -o ../../lib/lib1523-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1523-timediff.Tpo ../../lib/$(DEPDIR)/lib1523-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1523-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1523_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1523-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1523-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1523_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1523-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1523-timediff.Tpo -c -o ../../lib/lib1523-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1523-timediff.Tpo ../../lib/$(DEPDIR)/lib1523-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1523-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1523_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1523-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1523-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1523_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1523-first.o -MD -MP -MF $(DEPDIR)/lib1523-first.Tpo -c -o lib1523-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1523-first.Tpo $(DEPDIR)/lib1523-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1523-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1523_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1523-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1523-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1523_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1523-first.obj -MD -MP -MF $(DEPDIR)/lib1523-first.Tpo -c -o lib1523-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1523-first.Tpo $(DEPDIR)/lib1523-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1523-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1523_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1523-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1525-lib1525.o: lib1525.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1525-lib1525.o -MD -MP -MF $(DEPDIR)/lib1525-lib1525.Tpo -c -o lib1525-lib1525.o `test -f 'lib1525.c' || echo '$(srcdir)/'`lib1525.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1525-lib1525.Tpo $(DEPDIR)/lib1525-lib1525.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1525.c' object='lib1525-lib1525.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1525-lib1525.o `test -f 'lib1525.c' || echo '$(srcdir)/'`lib1525.c
-
-lib1525-lib1525.obj: lib1525.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1525-lib1525.obj -MD -MP -MF $(DEPDIR)/lib1525-lib1525.Tpo -c -o lib1525-lib1525.obj `if test -f 'lib1525.c'; then $(CYGPATH_W) 'lib1525.c'; else $(CYGPATH_W) '$(srcdir)/lib1525.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1525-lib1525.Tpo $(DEPDIR)/lib1525-lib1525.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1525.c' object='lib1525-lib1525.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1525-lib1525.obj `if test -f 'lib1525.c'; then $(CYGPATH_W) 'lib1525.c'; else $(CYGPATH_W) '$(srcdir)/lib1525.c'; fi`
-
-../../lib/lib1525-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1525-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1525-timediff.Tpo -c -o ../../lib/lib1525-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1525-timediff.Tpo ../../lib/$(DEPDIR)/lib1525-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1525-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1525-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1525-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1525-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1525-timediff.Tpo -c -o ../../lib/lib1525-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1525-timediff.Tpo ../../lib/$(DEPDIR)/lib1525-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1525-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1525-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1525-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1525-first.o -MD -MP -MF $(DEPDIR)/lib1525-first.Tpo -c -o lib1525-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1525-first.Tpo $(DEPDIR)/lib1525-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1525-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1525-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1525-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1525-first.obj -MD -MP -MF $(DEPDIR)/lib1525-first.Tpo -c -o lib1525-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1525-first.Tpo $(DEPDIR)/lib1525-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1525-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1525-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1525-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1525-testutil.o -MD -MP -MF $(DEPDIR)/lib1525-testutil.Tpo -c -o lib1525-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1525-testutil.Tpo $(DEPDIR)/lib1525-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1525-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1525-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1525-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1525-testutil.obj -MD -MP -MF $(DEPDIR)/lib1525-testutil.Tpo -c -o lib1525-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1525-testutil.Tpo $(DEPDIR)/lib1525-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1525-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1525-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1525-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1525-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1525-warnless.Tpo -c -o ../../lib/lib1525-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1525-warnless.Tpo ../../lib/$(DEPDIR)/lib1525-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1525-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1525-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1525-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1525-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1525-warnless.Tpo -c -o ../../lib/lib1525-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1525-warnless.Tpo ../../lib/$(DEPDIR)/lib1525-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1525-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1525-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1526-lib1526.o: lib1526.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1526_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1526-lib1526.o -MD -MP -MF $(DEPDIR)/lib1526-lib1526.Tpo -c -o lib1526-lib1526.o `test -f 'lib1526.c' || echo '$(srcdir)/'`lib1526.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1526-lib1526.Tpo $(DEPDIR)/lib1526-lib1526.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1526.c' object='lib1526-lib1526.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1526_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1526-lib1526.o `test -f 'lib1526.c' || echo '$(srcdir)/'`lib1526.c
-
-lib1526-lib1526.obj: lib1526.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1526_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1526-lib1526.obj -MD -MP -MF $(DEPDIR)/lib1526-lib1526.Tpo -c -o lib1526-lib1526.obj `if test -f 'lib1526.c'; then $(CYGPATH_W) 'lib1526.c'; else $(CYGPATH_W) '$(srcdir)/lib1526.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1526-lib1526.Tpo $(DEPDIR)/lib1526-lib1526.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1526.c' object='lib1526-lib1526.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1526_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1526-lib1526.obj `if test -f 'lib1526.c'; then $(CYGPATH_W) 'lib1526.c'; else $(CYGPATH_W) '$(srcdir)/lib1526.c'; fi`
-
-../../lib/lib1526-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1526_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1526-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1526-timediff.Tpo -c -o ../../lib/lib1526-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1526-timediff.Tpo ../../lib/$(DEPDIR)/lib1526-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1526-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1526_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1526-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1526-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1526_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1526-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1526-timediff.Tpo -c -o ../../lib/lib1526-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1526-timediff.Tpo ../../lib/$(DEPDIR)/lib1526-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1526-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1526_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1526-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1526-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1526_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1526-first.o -MD -MP -MF $(DEPDIR)/lib1526-first.Tpo -c -o lib1526-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1526-first.Tpo $(DEPDIR)/lib1526-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1526-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1526_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1526-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1526-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1526_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1526-first.obj -MD -MP -MF $(DEPDIR)/lib1526-first.Tpo -c -o lib1526-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1526-first.Tpo $(DEPDIR)/lib1526-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1526-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1526_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1526-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1526-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1526_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1526-testutil.o -MD -MP -MF $(DEPDIR)/lib1526-testutil.Tpo -c -o lib1526-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1526-testutil.Tpo $(DEPDIR)/lib1526-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1526-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1526_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1526-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1526-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1526_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1526-testutil.obj -MD -MP -MF $(DEPDIR)/lib1526-testutil.Tpo -c -o lib1526-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1526-testutil.Tpo $(DEPDIR)/lib1526-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1526-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1526_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1526-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1526-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1526_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1526-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1526-warnless.Tpo -c -o ../../lib/lib1526-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1526-warnless.Tpo ../../lib/$(DEPDIR)/lib1526-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1526-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1526_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1526-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1526-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1526_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1526-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1526-warnless.Tpo -c -o ../../lib/lib1526-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1526-warnless.Tpo ../../lib/$(DEPDIR)/lib1526-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1526-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1526_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1526-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1527-lib1527.o: lib1527.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1527_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1527-lib1527.o -MD -MP -MF $(DEPDIR)/lib1527-lib1527.Tpo -c -o lib1527-lib1527.o `test -f 'lib1527.c' || echo '$(srcdir)/'`lib1527.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1527-lib1527.Tpo $(DEPDIR)/lib1527-lib1527.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1527.c' object='lib1527-lib1527.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1527_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1527-lib1527.o `test -f 'lib1527.c' || echo '$(srcdir)/'`lib1527.c
-
-lib1527-lib1527.obj: lib1527.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1527_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1527-lib1527.obj -MD -MP -MF $(DEPDIR)/lib1527-lib1527.Tpo -c -o lib1527-lib1527.obj `if test -f 'lib1527.c'; then $(CYGPATH_W) 'lib1527.c'; else $(CYGPATH_W) '$(srcdir)/lib1527.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1527-lib1527.Tpo $(DEPDIR)/lib1527-lib1527.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1527.c' object='lib1527-lib1527.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1527_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1527-lib1527.obj `if test -f 'lib1527.c'; then $(CYGPATH_W) 'lib1527.c'; else $(CYGPATH_W) '$(srcdir)/lib1527.c'; fi`
-
-../../lib/lib1527-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1527_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1527-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1527-timediff.Tpo -c -o ../../lib/lib1527-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1527-timediff.Tpo ../../lib/$(DEPDIR)/lib1527-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1527-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1527_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1527-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1527-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1527_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1527-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1527-timediff.Tpo -c -o ../../lib/lib1527-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1527-timediff.Tpo ../../lib/$(DEPDIR)/lib1527-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1527-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1527_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1527-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1527-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1527_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1527-first.o -MD -MP -MF $(DEPDIR)/lib1527-first.Tpo -c -o lib1527-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1527-first.Tpo $(DEPDIR)/lib1527-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1527-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1527_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1527-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1527-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1527_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1527-first.obj -MD -MP -MF $(DEPDIR)/lib1527-first.Tpo -c -o lib1527-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1527-first.Tpo $(DEPDIR)/lib1527-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1527-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1527_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1527-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1527-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1527_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1527-testutil.o -MD -MP -MF $(DEPDIR)/lib1527-testutil.Tpo -c -o lib1527-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1527-testutil.Tpo $(DEPDIR)/lib1527-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1527-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1527_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1527-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1527-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1527_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1527-testutil.obj -MD -MP -MF $(DEPDIR)/lib1527-testutil.Tpo -c -o lib1527-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1527-testutil.Tpo $(DEPDIR)/lib1527-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1527-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1527_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1527-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1527-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1527_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1527-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1527-warnless.Tpo -c -o ../../lib/lib1527-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1527-warnless.Tpo ../../lib/$(DEPDIR)/lib1527-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1527-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1527_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1527-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1527-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1527_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1527-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1527-warnless.Tpo -c -o ../../lib/lib1527-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1527-warnless.Tpo ../../lib/$(DEPDIR)/lib1527-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1527-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1527_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1527-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1528-lib1528.o: lib1528.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1528_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1528-lib1528.o -MD -MP -MF $(DEPDIR)/lib1528-lib1528.Tpo -c -o lib1528-lib1528.o `test -f 'lib1528.c' || echo '$(srcdir)/'`lib1528.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1528-lib1528.Tpo $(DEPDIR)/lib1528-lib1528.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1528.c' object='lib1528-lib1528.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1528_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1528-lib1528.o `test -f 'lib1528.c' || echo '$(srcdir)/'`lib1528.c
-
-lib1528-lib1528.obj: lib1528.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1528_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1528-lib1528.obj -MD -MP -MF $(DEPDIR)/lib1528-lib1528.Tpo -c -o lib1528-lib1528.obj `if test -f 'lib1528.c'; then $(CYGPATH_W) 'lib1528.c'; else $(CYGPATH_W) '$(srcdir)/lib1528.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1528-lib1528.Tpo $(DEPDIR)/lib1528-lib1528.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1528.c' object='lib1528-lib1528.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1528_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1528-lib1528.obj `if test -f 'lib1528.c'; then $(CYGPATH_W) 'lib1528.c'; else $(CYGPATH_W) '$(srcdir)/lib1528.c'; fi`
-
-../../lib/lib1528-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1528_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1528-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1528-timediff.Tpo -c -o ../../lib/lib1528-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1528-timediff.Tpo ../../lib/$(DEPDIR)/lib1528-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1528-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1528_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1528-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1528-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1528_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1528-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1528-timediff.Tpo -c -o ../../lib/lib1528-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1528-timediff.Tpo ../../lib/$(DEPDIR)/lib1528-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1528-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1528_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1528-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1528-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1528_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1528-first.o -MD -MP -MF $(DEPDIR)/lib1528-first.Tpo -c -o lib1528-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1528-first.Tpo $(DEPDIR)/lib1528-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1528-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1528_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1528-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1528-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1528_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1528-first.obj -MD -MP -MF $(DEPDIR)/lib1528-first.Tpo -c -o lib1528-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1528-first.Tpo $(DEPDIR)/lib1528-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1528-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1528_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1528-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1528-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1528_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1528-testutil.o -MD -MP -MF $(DEPDIR)/lib1528-testutil.Tpo -c -o lib1528-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1528-testutil.Tpo $(DEPDIR)/lib1528-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1528-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1528_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1528-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1528-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1528_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1528-testutil.obj -MD -MP -MF $(DEPDIR)/lib1528-testutil.Tpo -c -o lib1528-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1528-testutil.Tpo $(DEPDIR)/lib1528-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1528-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1528_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1528-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1528-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1528_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1528-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1528-warnless.Tpo -c -o ../../lib/lib1528-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1528-warnless.Tpo ../../lib/$(DEPDIR)/lib1528-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1528-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1528_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1528-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1528-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1528_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1528-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1528-warnless.Tpo -c -o ../../lib/lib1528-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1528-warnless.Tpo ../../lib/$(DEPDIR)/lib1528-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1528-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1528_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1528-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1529-lib1529.o: lib1529.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1529_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1529-lib1529.o -MD -MP -MF $(DEPDIR)/lib1529-lib1529.Tpo -c -o lib1529-lib1529.o `test -f 'lib1529.c' || echo '$(srcdir)/'`lib1529.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1529-lib1529.Tpo $(DEPDIR)/lib1529-lib1529.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1529.c' object='lib1529-lib1529.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1529_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1529-lib1529.o `test -f 'lib1529.c' || echo '$(srcdir)/'`lib1529.c
-
-lib1529-lib1529.obj: lib1529.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1529_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1529-lib1529.obj -MD -MP -MF $(DEPDIR)/lib1529-lib1529.Tpo -c -o lib1529-lib1529.obj `if test -f 'lib1529.c'; then $(CYGPATH_W) 'lib1529.c'; else $(CYGPATH_W) '$(srcdir)/lib1529.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1529-lib1529.Tpo $(DEPDIR)/lib1529-lib1529.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1529.c' object='lib1529-lib1529.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1529_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1529-lib1529.obj `if test -f 'lib1529.c'; then $(CYGPATH_W) 'lib1529.c'; else $(CYGPATH_W) '$(srcdir)/lib1529.c'; fi`
-
-../../lib/lib1529-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1529_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1529-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1529-timediff.Tpo -c -o ../../lib/lib1529-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1529-timediff.Tpo ../../lib/$(DEPDIR)/lib1529-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1529-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1529_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1529-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1529-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1529_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1529-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1529-timediff.Tpo -c -o ../../lib/lib1529-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1529-timediff.Tpo ../../lib/$(DEPDIR)/lib1529-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1529-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1529_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1529-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1529-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1529_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1529-first.o -MD -MP -MF $(DEPDIR)/lib1529-first.Tpo -c -o lib1529-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1529-first.Tpo $(DEPDIR)/lib1529-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1529-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1529_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1529-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1529-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1529_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1529-first.obj -MD -MP -MF $(DEPDIR)/lib1529-first.Tpo -c -o lib1529-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1529-first.Tpo $(DEPDIR)/lib1529-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1529-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1529_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1529-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1529-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1529_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1529-testutil.o -MD -MP -MF $(DEPDIR)/lib1529-testutil.Tpo -c -o lib1529-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1529-testutil.Tpo $(DEPDIR)/lib1529-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1529-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1529_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1529-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1529-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1529_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1529-testutil.obj -MD -MP -MF $(DEPDIR)/lib1529-testutil.Tpo -c -o lib1529-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1529-testutil.Tpo $(DEPDIR)/lib1529-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1529-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1529_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1529-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1529-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1529_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1529-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1529-warnless.Tpo -c -o ../../lib/lib1529-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1529-warnless.Tpo ../../lib/$(DEPDIR)/lib1529-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1529-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1529_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1529-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1529-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1529_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1529-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1529-warnless.Tpo -c -o ../../lib/lib1529-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1529-warnless.Tpo ../../lib/$(DEPDIR)/lib1529-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1529-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1529_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1529-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1530-lib1530.o: lib1530.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1530-lib1530.o -MD -MP -MF $(DEPDIR)/lib1530-lib1530.Tpo -c -o lib1530-lib1530.o `test -f 'lib1530.c' || echo '$(srcdir)/'`lib1530.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1530-lib1530.Tpo $(DEPDIR)/lib1530-lib1530.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1530.c' object='lib1530-lib1530.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1530-lib1530.o `test -f 'lib1530.c' || echo '$(srcdir)/'`lib1530.c
-
-lib1530-lib1530.obj: lib1530.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1530-lib1530.obj -MD -MP -MF $(DEPDIR)/lib1530-lib1530.Tpo -c -o lib1530-lib1530.obj `if test -f 'lib1530.c'; then $(CYGPATH_W) 'lib1530.c'; else $(CYGPATH_W) '$(srcdir)/lib1530.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1530-lib1530.Tpo $(DEPDIR)/lib1530-lib1530.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1530.c' object='lib1530-lib1530.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1530-lib1530.obj `if test -f 'lib1530.c'; then $(CYGPATH_W) 'lib1530.c'; else $(CYGPATH_W) '$(srcdir)/lib1530.c'; fi`
-
-../../lib/lib1530-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1530-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1530-timediff.Tpo -c -o ../../lib/lib1530-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1530-timediff.Tpo ../../lib/$(DEPDIR)/lib1530-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1530-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1530-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1530-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1530-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1530-timediff.Tpo -c -o ../../lib/lib1530-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1530-timediff.Tpo ../../lib/$(DEPDIR)/lib1530-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1530-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1530-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1530-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1530-first.o -MD -MP -MF $(DEPDIR)/lib1530-first.Tpo -c -o lib1530-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1530-first.Tpo $(DEPDIR)/lib1530-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1530-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1530-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1530-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1530-first.obj -MD -MP -MF $(DEPDIR)/lib1530-first.Tpo -c -o lib1530-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1530-first.Tpo $(DEPDIR)/lib1530-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1530-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1530-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1530-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1530-testutil.o -MD -MP -MF $(DEPDIR)/lib1530-testutil.Tpo -c -o lib1530-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1530-testutil.Tpo $(DEPDIR)/lib1530-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1530-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1530-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1530-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1530-testutil.obj -MD -MP -MF $(DEPDIR)/lib1530-testutil.Tpo -c -o lib1530-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1530-testutil.Tpo $(DEPDIR)/lib1530-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1530-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1530-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1530-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1530-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1530-warnless.Tpo -c -o ../../lib/lib1530-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1530-warnless.Tpo ../../lib/$(DEPDIR)/lib1530-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1530-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1530-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1530-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1530-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1530-warnless.Tpo -c -o ../../lib/lib1530-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1530-warnless.Tpo ../../lib/$(DEPDIR)/lib1530-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1530-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1530-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1531-lib1531.o: lib1531.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1531-lib1531.o -MD -MP -MF $(DEPDIR)/lib1531-lib1531.Tpo -c -o lib1531-lib1531.o `test -f 'lib1531.c' || echo '$(srcdir)/'`lib1531.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1531-lib1531.Tpo $(DEPDIR)/lib1531-lib1531.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1531.c' object='lib1531-lib1531.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1531-lib1531.o `test -f 'lib1531.c' || echo '$(srcdir)/'`lib1531.c
-
-lib1531-lib1531.obj: lib1531.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1531-lib1531.obj -MD -MP -MF $(DEPDIR)/lib1531-lib1531.Tpo -c -o lib1531-lib1531.obj `if test -f 'lib1531.c'; then $(CYGPATH_W) 'lib1531.c'; else $(CYGPATH_W) '$(srcdir)/lib1531.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1531-lib1531.Tpo $(DEPDIR)/lib1531-lib1531.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1531.c' object='lib1531-lib1531.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1531-lib1531.obj `if test -f 'lib1531.c'; then $(CYGPATH_W) 'lib1531.c'; else $(CYGPATH_W) '$(srcdir)/lib1531.c'; fi`
-
-../../lib/lib1531-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1531-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1531-timediff.Tpo -c -o ../../lib/lib1531-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1531-timediff.Tpo ../../lib/$(DEPDIR)/lib1531-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1531-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1531-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1531-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1531-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1531-timediff.Tpo -c -o ../../lib/lib1531-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1531-timediff.Tpo ../../lib/$(DEPDIR)/lib1531-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1531-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1531-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1531-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1531-first.o -MD -MP -MF $(DEPDIR)/lib1531-first.Tpo -c -o lib1531-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1531-first.Tpo $(DEPDIR)/lib1531-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1531-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1531-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1531-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1531-first.obj -MD -MP -MF $(DEPDIR)/lib1531-first.Tpo -c -o lib1531-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1531-first.Tpo $(DEPDIR)/lib1531-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1531-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1531-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1531-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1531-testutil.o -MD -MP -MF $(DEPDIR)/lib1531-testutil.Tpo -c -o lib1531-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1531-testutil.Tpo $(DEPDIR)/lib1531-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1531-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1531-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1531-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1531-testutil.obj -MD -MP -MF $(DEPDIR)/lib1531-testutil.Tpo -c -o lib1531-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1531-testutil.Tpo $(DEPDIR)/lib1531-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1531-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1531-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1531-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1531-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1531-warnless.Tpo -c -o ../../lib/lib1531-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1531-warnless.Tpo ../../lib/$(DEPDIR)/lib1531-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1531-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1531-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1531-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1531-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1531-warnless.Tpo -c -o ../../lib/lib1531-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1531-warnless.Tpo ../../lib/$(DEPDIR)/lib1531-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1531-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1531-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1532-lib1532.o: lib1532.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1532-lib1532.o -MD -MP -MF $(DEPDIR)/lib1532-lib1532.Tpo -c -o lib1532-lib1532.o `test -f 'lib1532.c' || echo '$(srcdir)/'`lib1532.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1532-lib1532.Tpo $(DEPDIR)/lib1532-lib1532.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1532.c' object='lib1532-lib1532.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1532-lib1532.o `test -f 'lib1532.c' || echo '$(srcdir)/'`lib1532.c
-
-lib1532-lib1532.obj: lib1532.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1532-lib1532.obj -MD -MP -MF $(DEPDIR)/lib1532-lib1532.Tpo -c -o lib1532-lib1532.obj `if test -f 'lib1532.c'; then $(CYGPATH_W) 'lib1532.c'; else $(CYGPATH_W) '$(srcdir)/lib1532.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1532-lib1532.Tpo $(DEPDIR)/lib1532-lib1532.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1532.c' object='lib1532-lib1532.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1532-lib1532.obj `if test -f 'lib1532.c'; then $(CYGPATH_W) 'lib1532.c'; else $(CYGPATH_W) '$(srcdir)/lib1532.c'; fi`
-
-../../lib/lib1532-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1532-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1532-timediff.Tpo -c -o ../../lib/lib1532-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1532-timediff.Tpo ../../lib/$(DEPDIR)/lib1532-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1532-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1532-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1532-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1532-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1532-timediff.Tpo -c -o ../../lib/lib1532-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1532-timediff.Tpo ../../lib/$(DEPDIR)/lib1532-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1532-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1532-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1532-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1532-first.o -MD -MP -MF $(DEPDIR)/lib1532-first.Tpo -c -o lib1532-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1532-first.Tpo $(DEPDIR)/lib1532-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1532-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1532-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1532-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1532-first.obj -MD -MP -MF $(DEPDIR)/lib1532-first.Tpo -c -o lib1532-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1532-first.Tpo $(DEPDIR)/lib1532-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1532-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1532-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1532-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1532-testutil.o -MD -MP -MF $(DEPDIR)/lib1532-testutil.Tpo -c -o lib1532-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1532-testutil.Tpo $(DEPDIR)/lib1532-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1532-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1532-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1532-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1532-testutil.obj -MD -MP -MF $(DEPDIR)/lib1532-testutil.Tpo -c -o lib1532-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1532-testutil.Tpo $(DEPDIR)/lib1532-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1532-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1532-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1532-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1532-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1532-warnless.Tpo -c -o ../../lib/lib1532-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1532-warnless.Tpo ../../lib/$(DEPDIR)/lib1532-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1532-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1532-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1532-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1532-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1532-warnless.Tpo -c -o ../../lib/lib1532-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1532-warnless.Tpo ../../lib/$(DEPDIR)/lib1532-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1532-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1532-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1533-lib1533.o: lib1533.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1533-lib1533.o -MD -MP -MF $(DEPDIR)/lib1533-lib1533.Tpo -c -o lib1533-lib1533.o `test -f 'lib1533.c' || echo '$(srcdir)/'`lib1533.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1533-lib1533.Tpo $(DEPDIR)/lib1533-lib1533.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1533.c' object='lib1533-lib1533.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1533-lib1533.o `test -f 'lib1533.c' || echo '$(srcdir)/'`lib1533.c
-
-lib1533-lib1533.obj: lib1533.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1533-lib1533.obj -MD -MP -MF $(DEPDIR)/lib1533-lib1533.Tpo -c -o lib1533-lib1533.obj `if test -f 'lib1533.c'; then $(CYGPATH_W) 'lib1533.c'; else $(CYGPATH_W) '$(srcdir)/lib1533.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1533-lib1533.Tpo $(DEPDIR)/lib1533-lib1533.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1533.c' object='lib1533-lib1533.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1533-lib1533.obj `if test -f 'lib1533.c'; then $(CYGPATH_W) 'lib1533.c'; else $(CYGPATH_W) '$(srcdir)/lib1533.c'; fi`
-
-../../lib/lib1533-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1533-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1533-timediff.Tpo -c -o ../../lib/lib1533-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1533-timediff.Tpo ../../lib/$(DEPDIR)/lib1533-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1533-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1533-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1533-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1533-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1533-timediff.Tpo -c -o ../../lib/lib1533-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1533-timediff.Tpo ../../lib/$(DEPDIR)/lib1533-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1533-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1533-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1533-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1533-first.o -MD -MP -MF $(DEPDIR)/lib1533-first.Tpo -c -o lib1533-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1533-first.Tpo $(DEPDIR)/lib1533-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1533-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1533-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1533-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1533-first.obj -MD -MP -MF $(DEPDIR)/lib1533-first.Tpo -c -o lib1533-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1533-first.Tpo $(DEPDIR)/lib1533-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1533-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1533-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1533-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1533-testutil.o -MD -MP -MF $(DEPDIR)/lib1533-testutil.Tpo -c -o lib1533-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1533-testutil.Tpo $(DEPDIR)/lib1533-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1533-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1533-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1533-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1533-testutil.obj -MD -MP -MF $(DEPDIR)/lib1533-testutil.Tpo -c -o lib1533-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1533-testutil.Tpo $(DEPDIR)/lib1533-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1533-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1533-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1533-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1533-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1533-warnless.Tpo -c -o ../../lib/lib1533-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1533-warnless.Tpo ../../lib/$(DEPDIR)/lib1533-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1533-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1533-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1533-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1533-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1533-warnless.Tpo -c -o ../../lib/lib1533-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1533-warnless.Tpo ../../lib/$(DEPDIR)/lib1533-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1533-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1533-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1534-lib1534.o: lib1534.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1534-lib1534.o -MD -MP -MF $(DEPDIR)/lib1534-lib1534.Tpo -c -o lib1534-lib1534.o `test -f 'lib1534.c' || echo '$(srcdir)/'`lib1534.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1534-lib1534.Tpo $(DEPDIR)/lib1534-lib1534.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1534.c' object='lib1534-lib1534.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1534-lib1534.o `test -f 'lib1534.c' || echo '$(srcdir)/'`lib1534.c
-
-lib1534-lib1534.obj: lib1534.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1534-lib1534.obj -MD -MP -MF $(DEPDIR)/lib1534-lib1534.Tpo -c -o lib1534-lib1534.obj `if test -f 'lib1534.c'; then $(CYGPATH_W) 'lib1534.c'; else $(CYGPATH_W) '$(srcdir)/lib1534.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1534-lib1534.Tpo $(DEPDIR)/lib1534-lib1534.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1534.c' object='lib1534-lib1534.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1534-lib1534.obj `if test -f 'lib1534.c'; then $(CYGPATH_W) 'lib1534.c'; else $(CYGPATH_W) '$(srcdir)/lib1534.c'; fi`
-
-../../lib/lib1534-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1534-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1534-timediff.Tpo -c -o ../../lib/lib1534-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1534-timediff.Tpo ../../lib/$(DEPDIR)/lib1534-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1534-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1534-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1534-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1534-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1534-timediff.Tpo -c -o ../../lib/lib1534-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1534-timediff.Tpo ../../lib/$(DEPDIR)/lib1534-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1534-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1534-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1534-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1534-first.o -MD -MP -MF $(DEPDIR)/lib1534-first.Tpo -c -o lib1534-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1534-first.Tpo $(DEPDIR)/lib1534-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1534-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1534-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1534-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1534-first.obj -MD -MP -MF $(DEPDIR)/lib1534-first.Tpo -c -o lib1534-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1534-first.Tpo $(DEPDIR)/lib1534-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1534-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1534-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1534-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1534-testutil.o -MD -MP -MF $(DEPDIR)/lib1534-testutil.Tpo -c -o lib1534-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1534-testutil.Tpo $(DEPDIR)/lib1534-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1534-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1534-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1534-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1534-testutil.obj -MD -MP -MF $(DEPDIR)/lib1534-testutil.Tpo -c -o lib1534-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1534-testutil.Tpo $(DEPDIR)/lib1534-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1534-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1534-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1534-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1534-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1534-warnless.Tpo -c -o ../../lib/lib1534-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1534-warnless.Tpo ../../lib/$(DEPDIR)/lib1534-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1534-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1534-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1534-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1534-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1534-warnless.Tpo -c -o ../../lib/lib1534-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1534-warnless.Tpo ../../lib/$(DEPDIR)/lib1534-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1534-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1534_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1534-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1535-lib1535.o: lib1535.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1535-lib1535.o -MD -MP -MF $(DEPDIR)/lib1535-lib1535.Tpo -c -o lib1535-lib1535.o `test -f 'lib1535.c' || echo '$(srcdir)/'`lib1535.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1535-lib1535.Tpo $(DEPDIR)/lib1535-lib1535.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1535.c' object='lib1535-lib1535.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1535-lib1535.o `test -f 'lib1535.c' || echo '$(srcdir)/'`lib1535.c
-
-lib1535-lib1535.obj: lib1535.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1535-lib1535.obj -MD -MP -MF $(DEPDIR)/lib1535-lib1535.Tpo -c -o lib1535-lib1535.obj `if test -f 'lib1535.c'; then $(CYGPATH_W) 'lib1535.c'; else $(CYGPATH_W) '$(srcdir)/lib1535.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1535-lib1535.Tpo $(DEPDIR)/lib1535-lib1535.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1535.c' object='lib1535-lib1535.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1535-lib1535.obj `if test -f 'lib1535.c'; then $(CYGPATH_W) 'lib1535.c'; else $(CYGPATH_W) '$(srcdir)/lib1535.c'; fi`
-
-../../lib/lib1535-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1535-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1535-timediff.Tpo -c -o ../../lib/lib1535-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1535-timediff.Tpo ../../lib/$(DEPDIR)/lib1535-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1535-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1535-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1535-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1535-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1535-timediff.Tpo -c -o ../../lib/lib1535-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1535-timediff.Tpo ../../lib/$(DEPDIR)/lib1535-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1535-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1535-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1535-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1535-first.o -MD -MP -MF $(DEPDIR)/lib1535-first.Tpo -c -o lib1535-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1535-first.Tpo $(DEPDIR)/lib1535-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1535-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1535-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1535-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1535-first.obj -MD -MP -MF $(DEPDIR)/lib1535-first.Tpo -c -o lib1535-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1535-first.Tpo $(DEPDIR)/lib1535-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1535-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1535-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1535-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1535-testutil.o -MD -MP -MF $(DEPDIR)/lib1535-testutil.Tpo -c -o lib1535-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1535-testutil.Tpo $(DEPDIR)/lib1535-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1535-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1535-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1535-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1535-testutil.obj -MD -MP -MF $(DEPDIR)/lib1535-testutil.Tpo -c -o lib1535-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1535-testutil.Tpo $(DEPDIR)/lib1535-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1535-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1535-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1535-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1535-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1535-warnless.Tpo -c -o ../../lib/lib1535-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1535-warnless.Tpo ../../lib/$(DEPDIR)/lib1535-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1535-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1535-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1535-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1535-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1535-warnless.Tpo -c -o ../../lib/lib1535-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1535-warnless.Tpo ../../lib/$(DEPDIR)/lib1535-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1535-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1535_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1535-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1536-lib1536.o: lib1536.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1536-lib1536.o -MD -MP -MF $(DEPDIR)/lib1536-lib1536.Tpo -c -o lib1536-lib1536.o `test -f 'lib1536.c' || echo '$(srcdir)/'`lib1536.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1536-lib1536.Tpo $(DEPDIR)/lib1536-lib1536.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1536.c' object='lib1536-lib1536.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1536-lib1536.o `test -f 'lib1536.c' || echo '$(srcdir)/'`lib1536.c
-
-lib1536-lib1536.obj: lib1536.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1536-lib1536.obj -MD -MP -MF $(DEPDIR)/lib1536-lib1536.Tpo -c -o lib1536-lib1536.obj `if test -f 'lib1536.c'; then $(CYGPATH_W) 'lib1536.c'; else $(CYGPATH_W) '$(srcdir)/lib1536.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1536-lib1536.Tpo $(DEPDIR)/lib1536-lib1536.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1536.c' object='lib1536-lib1536.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1536-lib1536.obj `if test -f 'lib1536.c'; then $(CYGPATH_W) 'lib1536.c'; else $(CYGPATH_W) '$(srcdir)/lib1536.c'; fi`
-
-../../lib/lib1536-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1536-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1536-timediff.Tpo -c -o ../../lib/lib1536-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1536-timediff.Tpo ../../lib/$(DEPDIR)/lib1536-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1536-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1536-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1536-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1536-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1536-timediff.Tpo -c -o ../../lib/lib1536-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1536-timediff.Tpo ../../lib/$(DEPDIR)/lib1536-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1536-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1536-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1536-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1536-first.o -MD -MP -MF $(DEPDIR)/lib1536-first.Tpo -c -o lib1536-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1536-first.Tpo $(DEPDIR)/lib1536-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1536-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1536-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1536-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1536-first.obj -MD -MP -MF $(DEPDIR)/lib1536-first.Tpo -c -o lib1536-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1536-first.Tpo $(DEPDIR)/lib1536-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1536-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1536-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1536-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1536-testutil.o -MD -MP -MF $(DEPDIR)/lib1536-testutil.Tpo -c -o lib1536-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1536-testutil.Tpo $(DEPDIR)/lib1536-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1536-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1536-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1536-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1536-testutil.obj -MD -MP -MF $(DEPDIR)/lib1536-testutil.Tpo -c -o lib1536-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1536-testutil.Tpo $(DEPDIR)/lib1536-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1536-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1536-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1536-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1536-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1536-warnless.Tpo -c -o ../../lib/lib1536-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1536-warnless.Tpo ../../lib/$(DEPDIR)/lib1536-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1536-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1536-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1536-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1536-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1536-warnless.Tpo -c -o ../../lib/lib1536-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1536-warnless.Tpo ../../lib/$(DEPDIR)/lib1536-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1536-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1536-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1537-lib1537.o: lib1537.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1537-lib1537.o -MD -MP -MF $(DEPDIR)/lib1537-lib1537.Tpo -c -o lib1537-lib1537.o `test -f 'lib1537.c' || echo '$(srcdir)/'`lib1537.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1537-lib1537.Tpo $(DEPDIR)/lib1537-lib1537.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1537.c' object='lib1537-lib1537.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1537-lib1537.o `test -f 'lib1537.c' || echo '$(srcdir)/'`lib1537.c
-
-lib1537-lib1537.obj: lib1537.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1537-lib1537.obj -MD -MP -MF $(DEPDIR)/lib1537-lib1537.Tpo -c -o lib1537-lib1537.obj `if test -f 'lib1537.c'; then $(CYGPATH_W) 'lib1537.c'; else $(CYGPATH_W) '$(srcdir)/lib1537.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1537-lib1537.Tpo $(DEPDIR)/lib1537-lib1537.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1537.c' object='lib1537-lib1537.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1537-lib1537.obj `if test -f 'lib1537.c'; then $(CYGPATH_W) 'lib1537.c'; else $(CYGPATH_W) '$(srcdir)/lib1537.c'; fi`
-
-../../lib/lib1537-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1537-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1537-timediff.Tpo -c -o ../../lib/lib1537-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1537-timediff.Tpo ../../lib/$(DEPDIR)/lib1537-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1537-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1537-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1537-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1537-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1537-timediff.Tpo -c -o ../../lib/lib1537-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1537-timediff.Tpo ../../lib/$(DEPDIR)/lib1537-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1537-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1537-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1537-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1537-first.o -MD -MP -MF $(DEPDIR)/lib1537-first.Tpo -c -o lib1537-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1537-first.Tpo $(DEPDIR)/lib1537-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1537-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1537-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1537-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1537-first.obj -MD -MP -MF $(DEPDIR)/lib1537-first.Tpo -c -o lib1537-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1537-first.Tpo $(DEPDIR)/lib1537-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1537-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1537-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1537-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1537-testutil.o -MD -MP -MF $(DEPDIR)/lib1537-testutil.Tpo -c -o lib1537-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1537-testutil.Tpo $(DEPDIR)/lib1537-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1537-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1537-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1537-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1537-testutil.obj -MD -MP -MF $(DEPDIR)/lib1537-testutil.Tpo -c -o lib1537-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1537-testutil.Tpo $(DEPDIR)/lib1537-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1537-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1537-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1537-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1537-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1537-warnless.Tpo -c -o ../../lib/lib1537-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1537-warnless.Tpo ../../lib/$(DEPDIR)/lib1537-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1537-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1537-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1537-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1537-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1537-warnless.Tpo -c -o ../../lib/lib1537-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1537-warnless.Tpo ../../lib/$(DEPDIR)/lib1537-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1537-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1537-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1538-lib1538.o: lib1538.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1538_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1538-lib1538.o -MD -MP -MF $(DEPDIR)/lib1538-lib1538.Tpo -c -o lib1538-lib1538.o `test -f 'lib1538.c' || echo '$(srcdir)/'`lib1538.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1538-lib1538.Tpo $(DEPDIR)/lib1538-lib1538.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1538.c' object='lib1538-lib1538.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1538_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1538-lib1538.o `test -f 'lib1538.c' || echo '$(srcdir)/'`lib1538.c
-
-lib1538-lib1538.obj: lib1538.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1538_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1538-lib1538.obj -MD -MP -MF $(DEPDIR)/lib1538-lib1538.Tpo -c -o lib1538-lib1538.obj `if test -f 'lib1538.c'; then $(CYGPATH_W) 'lib1538.c'; else $(CYGPATH_W) '$(srcdir)/lib1538.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1538-lib1538.Tpo $(DEPDIR)/lib1538-lib1538.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1538.c' object='lib1538-lib1538.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1538_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1538-lib1538.obj `if test -f 'lib1538.c'; then $(CYGPATH_W) 'lib1538.c'; else $(CYGPATH_W) '$(srcdir)/lib1538.c'; fi`
-
-../../lib/lib1538-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1538_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1538-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1538-timediff.Tpo -c -o ../../lib/lib1538-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1538-timediff.Tpo ../../lib/$(DEPDIR)/lib1538-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1538-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1538_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1538-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1538-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1538_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1538-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1538-timediff.Tpo -c -o ../../lib/lib1538-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1538-timediff.Tpo ../../lib/$(DEPDIR)/lib1538-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1538-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1538_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1538-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1538-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1538_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1538-first.o -MD -MP -MF $(DEPDIR)/lib1538-first.Tpo -c -o lib1538-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1538-first.Tpo $(DEPDIR)/lib1538-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1538-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1538_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1538-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1538-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1538_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1538-first.obj -MD -MP -MF $(DEPDIR)/lib1538-first.Tpo -c -o lib1538-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1538-first.Tpo $(DEPDIR)/lib1538-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1538-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1538_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1538-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1538-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1538_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1538-testutil.o -MD -MP -MF $(DEPDIR)/lib1538-testutil.Tpo -c -o lib1538-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1538-testutil.Tpo $(DEPDIR)/lib1538-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1538-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1538_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1538-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1538-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1538_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1538-testutil.obj -MD -MP -MF $(DEPDIR)/lib1538-testutil.Tpo -c -o lib1538-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1538-testutil.Tpo $(DEPDIR)/lib1538-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1538-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1538_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1538-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1538-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1538_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1538-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1538-warnless.Tpo -c -o ../../lib/lib1538-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1538-warnless.Tpo ../../lib/$(DEPDIR)/lib1538-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1538-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1538_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1538-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1538-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1538_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1538-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1538-warnless.Tpo -c -o ../../lib/lib1538-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1538-warnless.Tpo ../../lib/$(DEPDIR)/lib1538-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1538-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1538_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1538-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
lib1539-lib1514.o: lib1514.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1539_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1539-lib1514.o -MD -MP -MF $(DEPDIR)/lib1539-lib1514.Tpo -c -o lib1539-lib1514.o `test -f 'lib1514.c' || echo '$(srcdir)/'`lib1514.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1539-lib1514.Tpo $(DEPDIR)/lib1539-lib1514.Po
@@ -8251,160 +4190,6 @@ lib1539-testutil.obj: testutil.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1539_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1539-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-lib1540-lib1540.o: lib1540.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1540-lib1540.o -MD -MP -MF $(DEPDIR)/lib1540-lib1540.Tpo -c -o lib1540-lib1540.o `test -f 'lib1540.c' || echo '$(srcdir)/'`lib1540.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1540-lib1540.Tpo $(DEPDIR)/lib1540-lib1540.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1540.c' object='lib1540-lib1540.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1540-lib1540.o `test -f 'lib1540.c' || echo '$(srcdir)/'`lib1540.c
-
-lib1540-lib1540.obj: lib1540.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1540-lib1540.obj -MD -MP -MF $(DEPDIR)/lib1540-lib1540.Tpo -c -o lib1540-lib1540.obj `if test -f 'lib1540.c'; then $(CYGPATH_W) 'lib1540.c'; else $(CYGPATH_W) '$(srcdir)/lib1540.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1540-lib1540.Tpo $(DEPDIR)/lib1540-lib1540.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1540.c' object='lib1540-lib1540.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1540-lib1540.obj `if test -f 'lib1540.c'; then $(CYGPATH_W) 'lib1540.c'; else $(CYGPATH_W) '$(srcdir)/lib1540.c'; fi`
-
-../../lib/lib1540-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1540-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1540-timediff.Tpo -c -o ../../lib/lib1540-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1540-timediff.Tpo ../../lib/$(DEPDIR)/lib1540-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1540-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1540-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1540-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1540-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1540-timediff.Tpo -c -o ../../lib/lib1540-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1540-timediff.Tpo ../../lib/$(DEPDIR)/lib1540-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1540-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1540-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1540-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1540-first.o -MD -MP -MF $(DEPDIR)/lib1540-first.Tpo -c -o lib1540-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1540-first.Tpo $(DEPDIR)/lib1540-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1540-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1540-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1540-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1540-first.obj -MD -MP -MF $(DEPDIR)/lib1540-first.Tpo -c -o lib1540-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1540-first.Tpo $(DEPDIR)/lib1540-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1540-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1540-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1540-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1540-testutil.o -MD -MP -MF $(DEPDIR)/lib1540-testutil.Tpo -c -o lib1540-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1540-testutil.Tpo $(DEPDIR)/lib1540-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1540-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1540-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1540-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1540-testutil.obj -MD -MP -MF $(DEPDIR)/lib1540-testutil.Tpo -c -o lib1540-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1540-testutil.Tpo $(DEPDIR)/lib1540-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1540-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1540-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1540-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1540-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1540-warnless.Tpo -c -o ../../lib/lib1540-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1540-warnless.Tpo ../../lib/$(DEPDIR)/lib1540-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1540-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1540-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1540-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1540-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1540-warnless.Tpo -c -o ../../lib/lib1540-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1540-warnless.Tpo ../../lib/$(DEPDIR)/lib1540-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1540-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1540-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1542-lib1542.o: lib1542.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1542-lib1542.o -MD -MP -MF $(DEPDIR)/lib1542-lib1542.Tpo -c -o lib1542-lib1542.o `test -f 'lib1542.c' || echo '$(srcdir)/'`lib1542.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1542-lib1542.Tpo $(DEPDIR)/lib1542-lib1542.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1542.c' object='lib1542-lib1542.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1542-lib1542.o `test -f 'lib1542.c' || echo '$(srcdir)/'`lib1542.c
-
-lib1542-lib1542.obj: lib1542.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1542-lib1542.obj -MD -MP -MF $(DEPDIR)/lib1542-lib1542.Tpo -c -o lib1542-lib1542.obj `if test -f 'lib1542.c'; then $(CYGPATH_W) 'lib1542.c'; else $(CYGPATH_W) '$(srcdir)/lib1542.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1542-lib1542.Tpo $(DEPDIR)/lib1542-lib1542.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1542.c' object='lib1542-lib1542.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1542-lib1542.obj `if test -f 'lib1542.c'; then $(CYGPATH_W) 'lib1542.c'; else $(CYGPATH_W) '$(srcdir)/lib1542.c'; fi`
-
-../../lib/lib1542-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1542-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1542-timediff.Tpo -c -o ../../lib/lib1542-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1542-timediff.Tpo ../../lib/$(DEPDIR)/lib1542-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1542-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1542-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1542-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1542-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1542-timediff.Tpo -c -o ../../lib/lib1542-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1542-timediff.Tpo ../../lib/$(DEPDIR)/lib1542-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1542-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1542-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1542-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1542-first.o -MD -MP -MF $(DEPDIR)/lib1542-first.Tpo -c -o lib1542-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1542-first.Tpo $(DEPDIR)/lib1542-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1542-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1542-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1542-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1542-first.obj -MD -MP -MF $(DEPDIR)/lib1542-first.Tpo -c -o lib1542-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1542-first.Tpo $(DEPDIR)/lib1542-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1542-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1542-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1542-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1542-testutil.o -MD -MP -MF $(DEPDIR)/lib1542-testutil.Tpo -c -o lib1542-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1542-testutil.Tpo $(DEPDIR)/lib1542-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1542-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1542-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1542-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1542-testutil.obj -MD -MP -MF $(DEPDIR)/lib1542-testutil.Tpo -c -o lib1542-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1542-testutil.Tpo $(DEPDIR)/lib1542-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1542-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1542-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-lib1542-testtrace.o: testtrace.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1542-testtrace.o -MD -MP -MF $(DEPDIR)/lib1542-testtrace.Tpo -c -o lib1542-testtrace.o `test -f 'testtrace.c' || echo '$(srcdir)/'`testtrace.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1542-testtrace.Tpo $(DEPDIR)/lib1542-testtrace.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testtrace.c' object='lib1542-testtrace.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1542-testtrace.o `test -f 'testtrace.c' || echo '$(srcdir)/'`testtrace.c
-
-lib1542-testtrace.obj: testtrace.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1542-testtrace.obj -MD -MP -MF $(DEPDIR)/lib1542-testtrace.Tpo -c -o lib1542-testtrace.obj `if test -f 'testtrace.c'; then $(CYGPATH_W) 'testtrace.c'; else $(CYGPATH_W) '$(srcdir)/testtrace.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1542-testtrace.Tpo $(DEPDIR)/lib1542-testtrace.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testtrace.c' object='lib1542-testtrace.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1542-testtrace.obj `if test -f 'testtrace.c'; then $(CYGPATH_W) 'testtrace.c'; else $(CYGPATH_W) '$(srcdir)/testtrace.c'; fi`
-
-../../lib/lib1542-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1542-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1542-warnless.Tpo -c -o ../../lib/lib1542-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1542-warnless.Tpo ../../lib/$(DEPDIR)/lib1542-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1542-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1542-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1542-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1542-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1542-warnless.Tpo -c -o ../../lib/lib1542-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1542-warnless.Tpo ../../lib/$(DEPDIR)/lib1542-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1542-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1542-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
lib1543-lib1518.o: lib1518.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1543_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1543-lib1518.o -MD -MP -MF $(DEPDIR)/lib1543-lib1518.Tpo -c -o lib1543-lib1518.o `test -f 'lib1518.c' || echo '$(srcdir)/'`lib1518.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1543-lib1518.Tpo $(DEPDIR)/lib1543-lib1518.Po
@@ -8447,859 +4232,47 @@ lib1543-first.obj: first.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1543_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1543-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-lib1550-lib1550.o: lib1550.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1550_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1550-lib1550.o -MD -MP -MF $(DEPDIR)/lib1550-lib1550.Tpo -c -o lib1550-lib1550.o `test -f 'lib1550.c' || echo '$(srcdir)/'`lib1550.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1550-lib1550.Tpo $(DEPDIR)/lib1550-lib1550.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1550.c' object='lib1550-lib1550.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1550_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1550-lib1550.o `test -f 'lib1550.c' || echo '$(srcdir)/'`lib1550.c
-
-lib1550-lib1550.obj: lib1550.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1550_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1550-lib1550.obj -MD -MP -MF $(DEPDIR)/lib1550-lib1550.Tpo -c -o lib1550-lib1550.obj `if test -f 'lib1550.c'; then $(CYGPATH_W) 'lib1550.c'; else $(CYGPATH_W) '$(srcdir)/lib1550.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1550-lib1550.Tpo $(DEPDIR)/lib1550-lib1550.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1550.c' object='lib1550-lib1550.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1550_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1550-lib1550.obj `if test -f 'lib1550.c'; then $(CYGPATH_W) 'lib1550.c'; else $(CYGPATH_W) '$(srcdir)/lib1550.c'; fi`
-
-../../lib/lib1550-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1550_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1550-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1550-timediff.Tpo -c -o ../../lib/lib1550-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1550-timediff.Tpo ../../lib/$(DEPDIR)/lib1550-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1550-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1550_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1550-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1550-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1550_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1550-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1550-timediff.Tpo -c -o ../../lib/lib1550-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1550-timediff.Tpo ../../lib/$(DEPDIR)/lib1550-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1550-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1550_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1550-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1550-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1550_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1550-first.o -MD -MP -MF $(DEPDIR)/lib1550-first.Tpo -c -o lib1550-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1550-first.Tpo $(DEPDIR)/lib1550-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1550-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1550_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1550-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1550-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1550_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1550-first.obj -MD -MP -MF $(DEPDIR)/lib1550-first.Tpo -c -o lib1550-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1550-first.Tpo $(DEPDIR)/lib1550-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1550-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1550_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1550-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1551-lib1551.o: lib1551.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1551_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1551-lib1551.o -MD -MP -MF $(DEPDIR)/lib1551-lib1551.Tpo -c -o lib1551-lib1551.o `test -f 'lib1551.c' || echo '$(srcdir)/'`lib1551.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1551-lib1551.Tpo $(DEPDIR)/lib1551-lib1551.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1551.c' object='lib1551-lib1551.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1551_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1551-lib1551.o `test -f 'lib1551.c' || echo '$(srcdir)/'`lib1551.c
-
-lib1551-lib1551.obj: lib1551.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1551_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1551-lib1551.obj -MD -MP -MF $(DEPDIR)/lib1551-lib1551.Tpo -c -o lib1551-lib1551.obj `if test -f 'lib1551.c'; then $(CYGPATH_W) 'lib1551.c'; else $(CYGPATH_W) '$(srcdir)/lib1551.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1551-lib1551.Tpo $(DEPDIR)/lib1551-lib1551.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1551.c' object='lib1551-lib1551.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1551_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1551-lib1551.obj `if test -f 'lib1551.c'; then $(CYGPATH_W) 'lib1551.c'; else $(CYGPATH_W) '$(srcdir)/lib1551.c'; fi`
-
-../../lib/lib1551-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1551_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1551-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1551-timediff.Tpo -c -o ../../lib/lib1551-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1551-timediff.Tpo ../../lib/$(DEPDIR)/lib1551-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1551-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1551_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1551-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1551-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1551_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1551-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1551-timediff.Tpo -c -o ../../lib/lib1551-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1551-timediff.Tpo ../../lib/$(DEPDIR)/lib1551-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1551-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1551_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1551-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1551-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1551_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1551-first.o -MD -MP -MF $(DEPDIR)/lib1551-first.Tpo -c -o lib1551-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1551-first.Tpo $(DEPDIR)/lib1551-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1551-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1551_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1551-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1551-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1551_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1551-first.obj -MD -MP -MF $(DEPDIR)/lib1551-first.Tpo -c -o lib1551-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1551-first.Tpo $(DEPDIR)/lib1551-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1551-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1551_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1551-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1552-lib1552.o: lib1552.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1552-lib1552.o -MD -MP -MF $(DEPDIR)/lib1552-lib1552.Tpo -c -o lib1552-lib1552.o `test -f 'lib1552.c' || echo '$(srcdir)/'`lib1552.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1552-lib1552.Tpo $(DEPDIR)/lib1552-lib1552.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1552.c' object='lib1552-lib1552.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1552-lib1552.o `test -f 'lib1552.c' || echo '$(srcdir)/'`lib1552.c
-
-lib1552-lib1552.obj: lib1552.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1552-lib1552.obj -MD -MP -MF $(DEPDIR)/lib1552-lib1552.Tpo -c -o lib1552-lib1552.obj `if test -f 'lib1552.c'; then $(CYGPATH_W) 'lib1552.c'; else $(CYGPATH_W) '$(srcdir)/lib1552.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1552-lib1552.Tpo $(DEPDIR)/lib1552-lib1552.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1552.c' object='lib1552-lib1552.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1552-lib1552.obj `if test -f 'lib1552.c'; then $(CYGPATH_W) 'lib1552.c'; else $(CYGPATH_W) '$(srcdir)/lib1552.c'; fi`
-
-../../lib/lib1552-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1552-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1552-timediff.Tpo -c -o ../../lib/lib1552-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1552-timediff.Tpo ../../lib/$(DEPDIR)/lib1552-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1552-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1552-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1552-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1552-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1552-timediff.Tpo -c -o ../../lib/lib1552-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1552-timediff.Tpo ../../lib/$(DEPDIR)/lib1552-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1552-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1552-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1552-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1552-first.o -MD -MP -MF $(DEPDIR)/lib1552-first.Tpo -c -o lib1552-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1552-first.Tpo $(DEPDIR)/lib1552-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1552-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1552-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1552-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1552-first.obj -MD -MP -MF $(DEPDIR)/lib1552-first.Tpo -c -o lib1552-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1552-first.Tpo $(DEPDIR)/lib1552-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1552-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1552-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1552-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1552-testutil.o -MD -MP -MF $(DEPDIR)/lib1552-testutil.Tpo -c -o lib1552-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1552-testutil.Tpo $(DEPDIR)/lib1552-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1552-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1552-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1552-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1552-testutil.obj -MD -MP -MF $(DEPDIR)/lib1552-testutil.Tpo -c -o lib1552-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1552-testutil.Tpo $(DEPDIR)/lib1552-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1552-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1552-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-lib1553-lib1553.o: lib1553.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1553-lib1553.o -MD -MP -MF $(DEPDIR)/lib1553-lib1553.Tpo -c -o lib1553-lib1553.o `test -f 'lib1553.c' || echo '$(srcdir)/'`lib1553.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1553-lib1553.Tpo $(DEPDIR)/lib1553-lib1553.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1553.c' object='lib1553-lib1553.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1553-lib1553.o `test -f 'lib1553.c' || echo '$(srcdir)/'`lib1553.c
-
-lib1553-lib1553.obj: lib1553.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1553-lib1553.obj -MD -MP -MF $(DEPDIR)/lib1553-lib1553.Tpo -c -o lib1553-lib1553.obj `if test -f 'lib1553.c'; then $(CYGPATH_W) 'lib1553.c'; else $(CYGPATH_W) '$(srcdir)/lib1553.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1553-lib1553.Tpo $(DEPDIR)/lib1553-lib1553.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1553.c' object='lib1553-lib1553.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1553-lib1553.obj `if test -f 'lib1553.c'; then $(CYGPATH_W) 'lib1553.c'; else $(CYGPATH_W) '$(srcdir)/lib1553.c'; fi`
-
-../../lib/lib1553-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1553-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1553-timediff.Tpo -c -o ../../lib/lib1553-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1553-timediff.Tpo ../../lib/$(DEPDIR)/lib1553-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1553-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1553-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1553-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1553-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1553-timediff.Tpo -c -o ../../lib/lib1553-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1553-timediff.Tpo ../../lib/$(DEPDIR)/lib1553-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1553-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1553-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1553-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1553-first.o -MD -MP -MF $(DEPDIR)/lib1553-first.Tpo -c -o lib1553-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1553-first.Tpo $(DEPDIR)/lib1553-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1553-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1553-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1553-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1553-first.obj -MD -MP -MF $(DEPDIR)/lib1553-first.Tpo -c -o lib1553-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1553-first.Tpo $(DEPDIR)/lib1553-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1553-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1553-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1553-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1553-testutil.o -MD -MP -MF $(DEPDIR)/lib1553-testutil.Tpo -c -o lib1553-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1553-testutil.Tpo $(DEPDIR)/lib1553-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1553-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1553-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1553-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1553-testutil.obj -MD -MP -MF $(DEPDIR)/lib1553-testutil.Tpo -c -o lib1553-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1553-testutil.Tpo $(DEPDIR)/lib1553-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1553-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1553-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-lib1554-lib1554.o: lib1554.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1554_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1554-lib1554.o -MD -MP -MF $(DEPDIR)/lib1554-lib1554.Tpo -c -o lib1554-lib1554.o `test -f 'lib1554.c' || echo '$(srcdir)/'`lib1554.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1554-lib1554.Tpo $(DEPDIR)/lib1554-lib1554.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1554.c' object='lib1554-lib1554.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1554_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1554-lib1554.o `test -f 'lib1554.c' || echo '$(srcdir)/'`lib1554.c
-
-lib1554-lib1554.obj: lib1554.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1554_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1554-lib1554.obj -MD -MP -MF $(DEPDIR)/lib1554-lib1554.Tpo -c -o lib1554-lib1554.obj `if test -f 'lib1554.c'; then $(CYGPATH_W) 'lib1554.c'; else $(CYGPATH_W) '$(srcdir)/lib1554.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1554-lib1554.Tpo $(DEPDIR)/lib1554-lib1554.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1554.c' object='lib1554-lib1554.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1554_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1554-lib1554.obj `if test -f 'lib1554.c'; then $(CYGPATH_W) 'lib1554.c'; else $(CYGPATH_W) '$(srcdir)/lib1554.c'; fi`
-
-../../lib/lib1554-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1554_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1554-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1554-timediff.Tpo -c -o ../../lib/lib1554-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1554-timediff.Tpo ../../lib/$(DEPDIR)/lib1554-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1554-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1554_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1554-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1554-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1554_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1554-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1554-timediff.Tpo -c -o ../../lib/lib1554-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1554-timediff.Tpo ../../lib/$(DEPDIR)/lib1554-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1554-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1554_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1554-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1554-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1554_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1554-first.o -MD -MP -MF $(DEPDIR)/lib1554-first.Tpo -c -o lib1554-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1554-first.Tpo $(DEPDIR)/lib1554-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1554-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1554_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1554-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1554-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1554_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1554-first.obj -MD -MP -MF $(DEPDIR)/lib1554-first.Tpo -c -o lib1554-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1554-first.Tpo $(DEPDIR)/lib1554-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1554-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1554_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1554-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1555-lib1555.o: lib1555.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1555-lib1555.o -MD -MP -MF $(DEPDIR)/lib1555-lib1555.Tpo -c -o lib1555-lib1555.o `test -f 'lib1555.c' || echo '$(srcdir)/'`lib1555.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1555-lib1555.Tpo $(DEPDIR)/lib1555-lib1555.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1555.c' object='lib1555-lib1555.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1555-lib1555.o `test -f 'lib1555.c' || echo '$(srcdir)/'`lib1555.c
-
-lib1555-lib1555.obj: lib1555.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1555-lib1555.obj -MD -MP -MF $(DEPDIR)/lib1555-lib1555.Tpo -c -o lib1555-lib1555.obj `if test -f 'lib1555.c'; then $(CYGPATH_W) 'lib1555.c'; else $(CYGPATH_W) '$(srcdir)/lib1555.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1555-lib1555.Tpo $(DEPDIR)/lib1555-lib1555.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1555.c' object='lib1555-lib1555.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1555-lib1555.obj `if test -f 'lib1555.c'; then $(CYGPATH_W) 'lib1555.c'; else $(CYGPATH_W) '$(srcdir)/lib1555.c'; fi`
-
-../../lib/lib1555-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1555-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1555-timediff.Tpo -c -o ../../lib/lib1555-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1555-timediff.Tpo ../../lib/$(DEPDIR)/lib1555-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1555-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1555-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1555-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1555-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1555-timediff.Tpo -c -o ../../lib/lib1555-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1555-timediff.Tpo ../../lib/$(DEPDIR)/lib1555-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1555-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1555-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1555-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1555-first.o -MD -MP -MF $(DEPDIR)/lib1555-first.Tpo -c -o lib1555-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1555-first.Tpo $(DEPDIR)/lib1555-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1555-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1555-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1555-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1555-first.obj -MD -MP -MF $(DEPDIR)/lib1555-first.Tpo -c -o lib1555-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1555-first.Tpo $(DEPDIR)/lib1555-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1555-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1555-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1555-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1555-testutil.o -MD -MP -MF $(DEPDIR)/lib1555-testutil.Tpo -c -o lib1555-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1555-testutil.Tpo $(DEPDIR)/lib1555-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1555-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1555-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1555-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1555-testutil.obj -MD -MP -MF $(DEPDIR)/lib1555-testutil.Tpo -c -o lib1555-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1555-testutil.Tpo $(DEPDIR)/lib1555-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1555-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1555-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1555-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1555-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1555-warnless.Tpo -c -o ../../lib/lib1555-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1555-warnless.Tpo ../../lib/$(DEPDIR)/lib1555-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1555-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1555-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1555-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1555-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1555-warnless.Tpo -c -o ../../lib/lib1555-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1555-warnless.Tpo ../../lib/$(DEPDIR)/lib1555-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1555-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1555-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1556-lib1556.o: lib1556.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1556-lib1556.o -MD -MP -MF $(DEPDIR)/lib1556-lib1556.Tpo -c -o lib1556-lib1556.o `test -f 'lib1556.c' || echo '$(srcdir)/'`lib1556.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1556-lib1556.Tpo $(DEPDIR)/lib1556-lib1556.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1556.c' object='lib1556-lib1556.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1556-lib1556.o `test -f 'lib1556.c' || echo '$(srcdir)/'`lib1556.c
-
-lib1556-lib1556.obj: lib1556.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1556-lib1556.obj -MD -MP -MF $(DEPDIR)/lib1556-lib1556.Tpo -c -o lib1556-lib1556.obj `if test -f 'lib1556.c'; then $(CYGPATH_W) 'lib1556.c'; else $(CYGPATH_W) '$(srcdir)/lib1556.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1556-lib1556.Tpo $(DEPDIR)/lib1556-lib1556.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1556.c' object='lib1556-lib1556.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1556-lib1556.obj `if test -f 'lib1556.c'; then $(CYGPATH_W) 'lib1556.c'; else $(CYGPATH_W) '$(srcdir)/lib1556.c'; fi`
-
-../../lib/lib1556-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1556-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1556-timediff.Tpo -c -o ../../lib/lib1556-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1556-timediff.Tpo ../../lib/$(DEPDIR)/lib1556-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1556-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1556-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1556-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1556-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1556-timediff.Tpo -c -o ../../lib/lib1556-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1556-timediff.Tpo ../../lib/$(DEPDIR)/lib1556-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1556-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1556-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1556-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1556-first.o -MD -MP -MF $(DEPDIR)/lib1556-first.Tpo -c -o lib1556-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1556-first.Tpo $(DEPDIR)/lib1556-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1556-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1556-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1556-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1556-first.obj -MD -MP -MF $(DEPDIR)/lib1556-first.Tpo -c -o lib1556-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1556-first.Tpo $(DEPDIR)/lib1556-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1556-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1556-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1556-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1556-testutil.o -MD -MP -MF $(DEPDIR)/lib1556-testutil.Tpo -c -o lib1556-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1556-testutil.Tpo $(DEPDIR)/lib1556-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1556-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1556-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1556-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1556-testutil.obj -MD -MP -MF $(DEPDIR)/lib1556-testutil.Tpo -c -o lib1556-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1556-testutil.Tpo $(DEPDIR)/lib1556-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1556-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1556-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1556-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1556-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1556-warnless.Tpo -c -o ../../lib/lib1556-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1556-warnless.Tpo ../../lib/$(DEPDIR)/lib1556-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1556-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1556-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1556-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1556-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1556-warnless.Tpo -c -o ../../lib/lib1556-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1556-warnless.Tpo ../../lib/$(DEPDIR)/lib1556-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1556-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1556-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1557-lib1557.o: lib1557.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1557-lib1557.o -MD -MP -MF $(DEPDIR)/lib1557-lib1557.Tpo -c -o lib1557-lib1557.o `test -f 'lib1557.c' || echo '$(srcdir)/'`lib1557.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1557-lib1557.Tpo $(DEPDIR)/lib1557-lib1557.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1557.c' object='lib1557-lib1557.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1557-lib1557.o `test -f 'lib1557.c' || echo '$(srcdir)/'`lib1557.c
-
-lib1557-lib1557.obj: lib1557.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1557-lib1557.obj -MD -MP -MF $(DEPDIR)/lib1557-lib1557.Tpo -c -o lib1557-lib1557.obj `if test -f 'lib1557.c'; then $(CYGPATH_W) 'lib1557.c'; else $(CYGPATH_W) '$(srcdir)/lib1557.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1557-lib1557.Tpo $(DEPDIR)/lib1557-lib1557.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1557.c' object='lib1557-lib1557.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1557-lib1557.obj `if test -f 'lib1557.c'; then $(CYGPATH_W) 'lib1557.c'; else $(CYGPATH_W) '$(srcdir)/lib1557.c'; fi`
-
-../../lib/lib1557-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1557-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1557-timediff.Tpo -c -o ../../lib/lib1557-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1557-timediff.Tpo ../../lib/$(DEPDIR)/lib1557-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1557-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1557-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1557-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1557-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1557-timediff.Tpo -c -o ../../lib/lib1557-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1557-timediff.Tpo ../../lib/$(DEPDIR)/lib1557-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1557-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1557-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1557-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1557-first.o -MD -MP -MF $(DEPDIR)/lib1557-first.Tpo -c -o lib1557-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1557-first.Tpo $(DEPDIR)/lib1557-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1557-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1557-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1557-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1557-first.obj -MD -MP -MF $(DEPDIR)/lib1557-first.Tpo -c -o lib1557-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1557-first.Tpo $(DEPDIR)/lib1557-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1557-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1557-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1557-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1557-testutil.o -MD -MP -MF $(DEPDIR)/lib1557-testutil.Tpo -c -o lib1557-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1557-testutil.Tpo $(DEPDIR)/lib1557-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1557-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1557-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1557-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1557-testutil.obj -MD -MP -MF $(DEPDIR)/lib1557-testutil.Tpo -c -o lib1557-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1557-testutil.Tpo $(DEPDIR)/lib1557-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1557-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1557-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1557-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1557-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1557-warnless.Tpo -c -o ../../lib/lib1557-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1557-warnless.Tpo ../../lib/$(DEPDIR)/lib1557-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1557-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1557-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1557-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1557-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1557-warnless.Tpo -c -o ../../lib/lib1557-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1557-warnless.Tpo ../../lib/$(DEPDIR)/lib1557-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1557-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1557-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1564-lib1564.o: lib1564.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1564-lib1564.o -MD -MP -MF $(DEPDIR)/lib1564-lib1564.Tpo -c -o lib1564-lib1564.o `test -f 'lib1564.c' || echo '$(srcdir)/'`lib1564.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1564-lib1564.Tpo $(DEPDIR)/lib1564-lib1564.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1564.c' object='lib1564-lib1564.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1564-lib1564.o `test -f 'lib1564.c' || echo '$(srcdir)/'`lib1564.c
-
-lib1564-lib1564.obj: lib1564.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1564-lib1564.obj -MD -MP -MF $(DEPDIR)/lib1564-lib1564.Tpo -c -o lib1564-lib1564.obj `if test -f 'lib1564.c'; then $(CYGPATH_W) 'lib1564.c'; else $(CYGPATH_W) '$(srcdir)/lib1564.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1564-lib1564.Tpo $(DEPDIR)/lib1564-lib1564.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1564.c' object='lib1564-lib1564.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1564-lib1564.obj `if test -f 'lib1564.c'; then $(CYGPATH_W) 'lib1564.c'; else $(CYGPATH_W) '$(srcdir)/lib1564.c'; fi`
-
-../../lib/lib1564-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1564-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1564-timediff.Tpo -c -o ../../lib/lib1564-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1564-timediff.Tpo ../../lib/$(DEPDIR)/lib1564-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1564-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1564-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1564-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1564-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1564-timediff.Tpo -c -o ../../lib/lib1564-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1564-timediff.Tpo ../../lib/$(DEPDIR)/lib1564-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1564-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1564-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1564-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1564-first.o -MD -MP -MF $(DEPDIR)/lib1564-first.Tpo -c -o lib1564-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1564-first.Tpo $(DEPDIR)/lib1564-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1564-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1564-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1564-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1564-first.obj -MD -MP -MF $(DEPDIR)/lib1564-first.Tpo -c -o lib1564-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1564-first.Tpo $(DEPDIR)/lib1564-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1564-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1564-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1564-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1564-testutil.o -MD -MP -MF $(DEPDIR)/lib1564-testutil.Tpo -c -o lib1564-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1564-testutil.Tpo $(DEPDIR)/lib1564-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1564-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1564-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1564-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1564-testutil.obj -MD -MP -MF $(DEPDIR)/lib1564-testutil.Tpo -c -o lib1564-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1564-testutil.Tpo $(DEPDIR)/lib1564-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1564-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1564-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1564-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1564-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1564-warnless.Tpo -c -o ../../lib/lib1564-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1564-warnless.Tpo ../../lib/$(DEPDIR)/lib1564-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1564-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1564-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1564-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1564-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1564-warnless.Tpo -c -o ../../lib/lib1564-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1564-warnless.Tpo ../../lib/$(DEPDIR)/lib1564-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1564-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1564-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1565-lib1565.o: lib1565.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1565_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1565-lib1565.o -MD -MP -MF $(DEPDIR)/lib1565-lib1565.Tpo -c -o lib1565-lib1565.o `test -f 'lib1565.c' || echo '$(srcdir)/'`lib1565.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1565-lib1565.Tpo $(DEPDIR)/lib1565-lib1565.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1565.c' object='lib1565-lib1565.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1565_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1565-lib1565.o `test -f 'lib1565.c' || echo '$(srcdir)/'`lib1565.c
-
-lib1565-lib1565.obj: lib1565.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1565_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1565-lib1565.obj -MD -MP -MF $(DEPDIR)/lib1565-lib1565.Tpo -c -o lib1565-lib1565.obj `if test -f 'lib1565.c'; then $(CYGPATH_W) 'lib1565.c'; else $(CYGPATH_W) '$(srcdir)/lib1565.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1565-lib1565.Tpo $(DEPDIR)/lib1565-lib1565.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1565.c' object='lib1565-lib1565.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1565_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1565-lib1565.obj `if test -f 'lib1565.c'; then $(CYGPATH_W) 'lib1565.c'; else $(CYGPATH_W) '$(srcdir)/lib1565.c'; fi`
-
-../../lib/lib1565-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1565_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1565-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1565-timediff.Tpo -c -o ../../lib/lib1565-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1565-timediff.Tpo ../../lib/$(DEPDIR)/lib1565-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1565-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1565_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1565-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1565-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1565_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1565-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1565-timediff.Tpo -c -o ../../lib/lib1565-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1565-timediff.Tpo ../../lib/$(DEPDIR)/lib1565-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1565-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1565_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1565-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1565-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1565_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1565-first.o -MD -MP -MF $(DEPDIR)/lib1565-first.Tpo -c -o lib1565-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1565-first.Tpo $(DEPDIR)/lib1565-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1565-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1565_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1565-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1565-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1565_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1565-first.obj -MD -MP -MF $(DEPDIR)/lib1565-first.Tpo -c -o lib1565-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1565-first.Tpo $(DEPDIR)/lib1565-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1565-first.obj' libtool=no @AMDEPBACKSLASH@
+lib1545-lib1545.o: lib1545.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1545_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1545-lib1545.o -MD -MP -MF $(DEPDIR)/lib1545-lib1545.Tpo -c -o lib1545-lib1545.o `test -f 'lib1545.c' || echo '$(srcdir)/'`lib1545.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1545-lib1545.Tpo $(DEPDIR)/lib1545-lib1545.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1545.c' object='lib1545-lib1545.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1565_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1565-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1545_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1545-lib1545.o `test -f 'lib1545.c' || echo '$(srcdir)/'`lib1545.c
-lib1565-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1565_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1565-testutil.o -MD -MP -MF $(DEPDIR)/lib1565-testutil.Tpo -c -o lib1565-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1565-testutil.Tpo $(DEPDIR)/lib1565-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1565-testutil.o' libtool=no @AMDEPBACKSLASH@
+lib1545-lib1545.obj: lib1545.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1545_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1545-lib1545.obj -MD -MP -MF $(DEPDIR)/lib1545-lib1545.Tpo -c -o lib1545-lib1545.obj `if test -f 'lib1545.c'; then $(CYGPATH_W) 'lib1545.c'; else $(CYGPATH_W) '$(srcdir)/lib1545.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1545-lib1545.Tpo $(DEPDIR)/lib1545-lib1545.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1545.c' object='lib1545-lib1545.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1565_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1565-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1545_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1545-lib1545.obj `if test -f 'lib1545.c'; then $(CYGPATH_W) 'lib1545.c'; else $(CYGPATH_W) '$(srcdir)/lib1545.c'; fi`
-lib1565-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1565_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1565-testutil.obj -MD -MP -MF $(DEPDIR)/lib1565-testutil.Tpo -c -o lib1565-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1565-testutil.Tpo $(DEPDIR)/lib1565-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1565-testutil.obj' libtool=no @AMDEPBACKSLASH@
+../../lib/lib1545-timediff.o: ../../lib/timediff.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1545_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1545-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1545-timediff.Tpo -c -o ../../lib/lib1545-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1545-timediff.Tpo ../../lib/$(DEPDIR)/lib1545-timediff.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1545-timediff.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1565_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1565-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1545_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1545-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-../../lib/lib1565-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1565_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1565-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1565-warnless.Tpo -c -o ../../lib/lib1565-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1565-warnless.Tpo ../../lib/$(DEPDIR)/lib1565-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1565-warnless.o' libtool=no @AMDEPBACKSLASH@
+../../lib/lib1545-timediff.obj: ../../lib/timediff.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1545_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1545-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1545-timediff.Tpo -c -o ../../lib/lib1545-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1545-timediff.Tpo ../../lib/$(DEPDIR)/lib1545-timediff.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1545-timediff.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1565_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1565-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1545_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1545-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-../../lib/lib1565-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1565_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1565-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1565-warnless.Tpo -c -o ../../lib/lib1565-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1565-warnless.Tpo ../../lib/$(DEPDIR)/lib1565-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1565-warnless.obj' libtool=no @AMDEPBACKSLASH@
+lib1545-first.o: first.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1545_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1545-first.o -MD -MP -MF $(DEPDIR)/lib1545-first.Tpo -c -o lib1545-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1545-first.Tpo $(DEPDIR)/lib1545-first.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1545-first.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1565_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1565-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1545_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1545-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-lib1567-lib1567.o: lib1567.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1567_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1567-lib1567.o -MD -MP -MF $(DEPDIR)/lib1567-lib1567.Tpo -c -o lib1567-lib1567.o `test -f 'lib1567.c' || echo '$(srcdir)/'`lib1567.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1567-lib1567.Tpo $(DEPDIR)/lib1567-lib1567.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1567.c' object='lib1567-lib1567.o' libtool=no @AMDEPBACKSLASH@
+lib1545-first.obj: first.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1545_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1545-first.obj -MD -MP -MF $(DEPDIR)/lib1545-first.Tpo -c -o lib1545-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1545-first.Tpo $(DEPDIR)/lib1545-first.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1545-first.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1567_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1567-lib1567.o `test -f 'lib1567.c' || echo '$(srcdir)/'`lib1567.c
-
-lib1567-lib1567.obj: lib1567.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1567_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1567-lib1567.obj -MD -MP -MF $(DEPDIR)/lib1567-lib1567.Tpo -c -o lib1567-lib1567.obj `if test -f 'lib1567.c'; then $(CYGPATH_W) 'lib1567.c'; else $(CYGPATH_W) '$(srcdir)/lib1567.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1567-lib1567.Tpo $(DEPDIR)/lib1567-lib1567.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1567.c' object='lib1567-lib1567.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1567_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1567-lib1567.obj `if test -f 'lib1567.c'; then $(CYGPATH_W) 'lib1567.c'; else $(CYGPATH_W) '$(srcdir)/lib1567.c'; fi`
-
-../../lib/lib1567-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1567_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1567-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1567-timediff.Tpo -c -o ../../lib/lib1567-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1567-timediff.Tpo ../../lib/$(DEPDIR)/lib1567-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1567-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1567_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1567-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1567-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1567_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1567-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1567-timediff.Tpo -c -o ../../lib/lib1567-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1567-timediff.Tpo ../../lib/$(DEPDIR)/lib1567-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1567-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1567_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1567-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1567-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1567_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1567-first.o -MD -MP -MF $(DEPDIR)/lib1567-first.Tpo -c -o lib1567-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1567-first.Tpo $(DEPDIR)/lib1567-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1567-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1567_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1567-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1567-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1567_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1567-first.obj -MD -MP -MF $(DEPDIR)/lib1567-first.Tpo -c -o lib1567-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1567-first.Tpo $(DEPDIR)/lib1567-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1567-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1567_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1567-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1568-lib1568.o: lib1568.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1568-lib1568.o -MD -MP -MF $(DEPDIR)/lib1568-lib1568.Tpo -c -o lib1568-lib1568.o `test -f 'lib1568.c' || echo '$(srcdir)/'`lib1568.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1568-lib1568.Tpo $(DEPDIR)/lib1568-lib1568.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1568.c' object='lib1568-lib1568.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1568-lib1568.o `test -f 'lib1568.c' || echo '$(srcdir)/'`lib1568.c
-
-lib1568-lib1568.obj: lib1568.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1568-lib1568.obj -MD -MP -MF $(DEPDIR)/lib1568-lib1568.Tpo -c -o lib1568-lib1568.obj `if test -f 'lib1568.c'; then $(CYGPATH_W) 'lib1568.c'; else $(CYGPATH_W) '$(srcdir)/lib1568.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1568-lib1568.Tpo $(DEPDIR)/lib1568-lib1568.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1568.c' object='lib1568-lib1568.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1568-lib1568.obj `if test -f 'lib1568.c'; then $(CYGPATH_W) 'lib1568.c'; else $(CYGPATH_W) '$(srcdir)/lib1568.c'; fi`
-
-../../lib/lib1568-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1568-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1568-timediff.Tpo -c -o ../../lib/lib1568-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1568-timediff.Tpo ../../lib/$(DEPDIR)/lib1568-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1568-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1568-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1568-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1568-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1568-timediff.Tpo -c -o ../../lib/lib1568-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1568-timediff.Tpo ../../lib/$(DEPDIR)/lib1568-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1568-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1568-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1568-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1568-first.o -MD -MP -MF $(DEPDIR)/lib1568-first.Tpo -c -o lib1568-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1568-first.Tpo $(DEPDIR)/lib1568-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1568-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1568-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1568-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1568-first.obj -MD -MP -MF $(DEPDIR)/lib1568-first.Tpo -c -o lib1568-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1568-first.Tpo $(DEPDIR)/lib1568-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1568-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1568-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1569-lib1569.o: lib1569.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1569-lib1569.o -MD -MP -MF $(DEPDIR)/lib1569-lib1569.Tpo -c -o lib1569-lib1569.o `test -f 'lib1569.c' || echo '$(srcdir)/'`lib1569.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1569-lib1569.Tpo $(DEPDIR)/lib1569-lib1569.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1569.c' object='lib1569-lib1569.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1569-lib1569.o `test -f 'lib1569.c' || echo '$(srcdir)/'`lib1569.c
-
-lib1569-lib1569.obj: lib1569.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1569-lib1569.obj -MD -MP -MF $(DEPDIR)/lib1569-lib1569.Tpo -c -o lib1569-lib1569.obj `if test -f 'lib1569.c'; then $(CYGPATH_W) 'lib1569.c'; else $(CYGPATH_W) '$(srcdir)/lib1569.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1569-lib1569.Tpo $(DEPDIR)/lib1569-lib1569.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1569.c' object='lib1569-lib1569.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1569-lib1569.obj `if test -f 'lib1569.c'; then $(CYGPATH_W) 'lib1569.c'; else $(CYGPATH_W) '$(srcdir)/lib1569.c'; fi`
-
-../../lib/lib1569-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1569-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1569-timediff.Tpo -c -o ../../lib/lib1569-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1569-timediff.Tpo ../../lib/$(DEPDIR)/lib1569-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1569-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1569-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1569-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1569-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1569-timediff.Tpo -c -o ../../lib/lib1569-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1569-timediff.Tpo ../../lib/$(DEPDIR)/lib1569-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1569-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1569-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1569-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1569-first.o -MD -MP -MF $(DEPDIR)/lib1569-first.Tpo -c -o lib1569-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1569-first.Tpo $(DEPDIR)/lib1569-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1569-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1569-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1569-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1569-first.obj -MD -MP -MF $(DEPDIR)/lib1569-first.Tpo -c -o lib1569-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1569-first.Tpo $(DEPDIR)/lib1569-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1569-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1569-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1591-lib1591.o: lib1591.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1591-lib1591.o -MD -MP -MF $(DEPDIR)/lib1591-lib1591.Tpo -c -o lib1591-lib1591.o `test -f 'lib1591.c' || echo '$(srcdir)/'`lib1591.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1591-lib1591.Tpo $(DEPDIR)/lib1591-lib1591.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1591.c' object='lib1591-lib1591.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1591-lib1591.o `test -f 'lib1591.c' || echo '$(srcdir)/'`lib1591.c
-
-lib1591-lib1591.obj: lib1591.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1591-lib1591.obj -MD -MP -MF $(DEPDIR)/lib1591-lib1591.Tpo -c -o lib1591-lib1591.obj `if test -f 'lib1591.c'; then $(CYGPATH_W) 'lib1591.c'; else $(CYGPATH_W) '$(srcdir)/lib1591.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1591-lib1591.Tpo $(DEPDIR)/lib1591-lib1591.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1591.c' object='lib1591-lib1591.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1591-lib1591.obj `if test -f 'lib1591.c'; then $(CYGPATH_W) 'lib1591.c'; else $(CYGPATH_W) '$(srcdir)/lib1591.c'; fi`
-
-../../lib/lib1591-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1591-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1591-timediff.Tpo -c -o ../../lib/lib1591-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1591-timediff.Tpo ../../lib/$(DEPDIR)/lib1591-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1591-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1591-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1591-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1591-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1591-timediff.Tpo -c -o ../../lib/lib1591-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1591-timediff.Tpo ../../lib/$(DEPDIR)/lib1591-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1591-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1591-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1591-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1591-first.o -MD -MP -MF $(DEPDIR)/lib1591-first.Tpo -c -o lib1591-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1591-first.Tpo $(DEPDIR)/lib1591-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1591-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1591-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1591-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1591-first.obj -MD -MP -MF $(DEPDIR)/lib1591-first.Tpo -c -o lib1591-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1591-first.Tpo $(DEPDIR)/lib1591-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1591-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1591-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1591-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1591-testutil.o -MD -MP -MF $(DEPDIR)/lib1591-testutil.Tpo -c -o lib1591-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1591-testutil.Tpo $(DEPDIR)/lib1591-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1591-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1591-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1591-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1591-testutil.obj -MD -MP -MF $(DEPDIR)/lib1591-testutil.Tpo -c -o lib1591-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1591-testutil.Tpo $(DEPDIR)/lib1591-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1591-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1591-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1591-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1591-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1591-warnless.Tpo -c -o ../../lib/lib1591-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1591-warnless.Tpo ../../lib/$(DEPDIR)/lib1591-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1591-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1591-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1591-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1591-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1591-warnless.Tpo -c -o ../../lib/lib1591-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1591-warnless.Tpo ../../lib/$(DEPDIR)/lib1591-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1591-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1591-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1592-lib1592.o: lib1592.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1592_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1592-lib1592.o -MD -MP -MF $(DEPDIR)/lib1592-lib1592.Tpo -c -o lib1592-lib1592.o `test -f 'lib1592.c' || echo '$(srcdir)/'`lib1592.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1592-lib1592.Tpo $(DEPDIR)/lib1592-lib1592.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1592.c' object='lib1592-lib1592.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1592_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1592-lib1592.o `test -f 'lib1592.c' || echo '$(srcdir)/'`lib1592.c
-
-lib1592-lib1592.obj: lib1592.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1592_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1592-lib1592.obj -MD -MP -MF $(DEPDIR)/lib1592-lib1592.Tpo -c -o lib1592-lib1592.obj `if test -f 'lib1592.c'; then $(CYGPATH_W) 'lib1592.c'; else $(CYGPATH_W) '$(srcdir)/lib1592.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1592-lib1592.Tpo $(DEPDIR)/lib1592-lib1592.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1592.c' object='lib1592-lib1592.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1592_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1592-lib1592.obj `if test -f 'lib1592.c'; then $(CYGPATH_W) 'lib1592.c'; else $(CYGPATH_W) '$(srcdir)/lib1592.c'; fi`
-
-../../lib/lib1592-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1592_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1592-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1592-timediff.Tpo -c -o ../../lib/lib1592-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1592-timediff.Tpo ../../lib/$(DEPDIR)/lib1592-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1592-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1592_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1592-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1592-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1592_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1592-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1592-timediff.Tpo -c -o ../../lib/lib1592-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1592-timediff.Tpo ../../lib/$(DEPDIR)/lib1592-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1592-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1592_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1592-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1592-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1592_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1592-first.o -MD -MP -MF $(DEPDIR)/lib1592-first.Tpo -c -o lib1592-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1592-first.Tpo $(DEPDIR)/lib1592-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1592-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1592_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1592-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1592-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1592_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1592-first.obj -MD -MP -MF $(DEPDIR)/lib1592-first.Tpo -c -o lib1592-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1592-first.Tpo $(DEPDIR)/lib1592-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1592-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1592_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1592-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1592-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1592_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1592-testutil.o -MD -MP -MF $(DEPDIR)/lib1592-testutil.Tpo -c -o lib1592-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1592-testutil.Tpo $(DEPDIR)/lib1592-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1592-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1592_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1592-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1592-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1592_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1592-testutil.obj -MD -MP -MF $(DEPDIR)/lib1592-testutil.Tpo -c -o lib1592-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1592-testutil.Tpo $(DEPDIR)/lib1592-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1592-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1592_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1592-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1592-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1592_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1592-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1592-warnless.Tpo -c -o ../../lib/lib1592-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1592-warnless.Tpo ../../lib/$(DEPDIR)/lib1592-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1592-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1592_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1592-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1592-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1592_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1592-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1592-warnless.Tpo -c -o ../../lib/lib1592-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1592-warnless.Tpo ../../lib/$(DEPDIR)/lib1592-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1592-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1592_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1592-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1545_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1545-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
lib1596-lib1594.o: lib1594.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1596_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1596-lib1594.o -MD -MP -MF $(DEPDIR)/lib1596-lib1594.Tpo -c -o lib1596-lib1594.o `test -f 'lib1594.c' || echo '$(srcdir)/'`lib1594.c
@@ -9371,692 +4344,6 @@ lib1596-testutil.obj: testutil.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1596_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1596-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-lib1905-lib1905.o: lib1905.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1905_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1905-lib1905.o -MD -MP -MF $(DEPDIR)/lib1905-lib1905.Tpo -c -o lib1905-lib1905.o `test -f 'lib1905.c' || echo '$(srcdir)/'`lib1905.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1905-lib1905.Tpo $(DEPDIR)/lib1905-lib1905.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1905.c' object='lib1905-lib1905.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1905_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1905-lib1905.o `test -f 'lib1905.c' || echo '$(srcdir)/'`lib1905.c
-
-lib1905-lib1905.obj: lib1905.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1905_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1905-lib1905.obj -MD -MP -MF $(DEPDIR)/lib1905-lib1905.Tpo -c -o lib1905-lib1905.obj `if test -f 'lib1905.c'; then $(CYGPATH_W) 'lib1905.c'; else $(CYGPATH_W) '$(srcdir)/lib1905.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1905-lib1905.Tpo $(DEPDIR)/lib1905-lib1905.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1905.c' object='lib1905-lib1905.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1905_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1905-lib1905.obj `if test -f 'lib1905.c'; then $(CYGPATH_W) 'lib1905.c'; else $(CYGPATH_W) '$(srcdir)/lib1905.c'; fi`
-
-../../lib/lib1905-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1905_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1905-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1905-timediff.Tpo -c -o ../../lib/lib1905-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1905-timediff.Tpo ../../lib/$(DEPDIR)/lib1905-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1905-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1905_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1905-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1905-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1905_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1905-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1905-timediff.Tpo -c -o ../../lib/lib1905-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1905-timediff.Tpo ../../lib/$(DEPDIR)/lib1905-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1905-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1905_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1905-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1905-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1905_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1905-first.o -MD -MP -MF $(DEPDIR)/lib1905-first.Tpo -c -o lib1905-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1905-first.Tpo $(DEPDIR)/lib1905-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1905-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1905_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1905-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1905-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1905_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1905-first.obj -MD -MP -MF $(DEPDIR)/lib1905-first.Tpo -c -o lib1905-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1905-first.Tpo $(DEPDIR)/lib1905-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1905-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1905_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1905-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1905-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1905_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1905-testutil.o -MD -MP -MF $(DEPDIR)/lib1905-testutil.Tpo -c -o lib1905-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1905-testutil.Tpo $(DEPDIR)/lib1905-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1905-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1905_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1905-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1905-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1905_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1905-testutil.obj -MD -MP -MF $(DEPDIR)/lib1905-testutil.Tpo -c -o lib1905-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1905-testutil.Tpo $(DEPDIR)/lib1905-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1905-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1905_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1905-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1905-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1905_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1905-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1905-warnless.Tpo -c -o ../../lib/lib1905-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1905-warnless.Tpo ../../lib/$(DEPDIR)/lib1905-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1905-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1905_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1905-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1905-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1905_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1905-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1905-warnless.Tpo -c -o ../../lib/lib1905-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1905-warnless.Tpo ../../lib/$(DEPDIR)/lib1905-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1905-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1905_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1905-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1906-lib1906.o: lib1906.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1906-lib1906.o -MD -MP -MF $(DEPDIR)/lib1906-lib1906.Tpo -c -o lib1906-lib1906.o `test -f 'lib1906.c' || echo '$(srcdir)/'`lib1906.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1906-lib1906.Tpo $(DEPDIR)/lib1906-lib1906.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1906.c' object='lib1906-lib1906.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1906-lib1906.o `test -f 'lib1906.c' || echo '$(srcdir)/'`lib1906.c
-
-lib1906-lib1906.obj: lib1906.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1906-lib1906.obj -MD -MP -MF $(DEPDIR)/lib1906-lib1906.Tpo -c -o lib1906-lib1906.obj `if test -f 'lib1906.c'; then $(CYGPATH_W) 'lib1906.c'; else $(CYGPATH_W) '$(srcdir)/lib1906.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1906-lib1906.Tpo $(DEPDIR)/lib1906-lib1906.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1906.c' object='lib1906-lib1906.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1906-lib1906.obj `if test -f 'lib1906.c'; then $(CYGPATH_W) 'lib1906.c'; else $(CYGPATH_W) '$(srcdir)/lib1906.c'; fi`
-
-../../lib/lib1906-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1906-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1906-timediff.Tpo -c -o ../../lib/lib1906-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1906-timediff.Tpo ../../lib/$(DEPDIR)/lib1906-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1906-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1906-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1906-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1906-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1906-timediff.Tpo -c -o ../../lib/lib1906-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1906-timediff.Tpo ../../lib/$(DEPDIR)/lib1906-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1906-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1906-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1906-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1906-first.o -MD -MP -MF $(DEPDIR)/lib1906-first.Tpo -c -o lib1906-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1906-first.Tpo $(DEPDIR)/lib1906-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1906-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1906-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1906-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1906-first.obj -MD -MP -MF $(DEPDIR)/lib1906-first.Tpo -c -o lib1906-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1906-first.Tpo $(DEPDIR)/lib1906-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1906-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1906-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1906-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1906-testutil.o -MD -MP -MF $(DEPDIR)/lib1906-testutil.Tpo -c -o lib1906-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1906-testutil.Tpo $(DEPDIR)/lib1906-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1906-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1906-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1906-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1906-testutil.obj -MD -MP -MF $(DEPDIR)/lib1906-testutil.Tpo -c -o lib1906-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1906-testutil.Tpo $(DEPDIR)/lib1906-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1906-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1906-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1906-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1906-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1906-warnless.Tpo -c -o ../../lib/lib1906-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1906-warnless.Tpo ../../lib/$(DEPDIR)/lib1906-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1906-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1906-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1906-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1906-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1906-warnless.Tpo -c -o ../../lib/lib1906-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1906-warnless.Tpo ../../lib/$(DEPDIR)/lib1906-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1906-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1906-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1907-lib1907.o: lib1907.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1907_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1907-lib1907.o -MD -MP -MF $(DEPDIR)/lib1907-lib1907.Tpo -c -o lib1907-lib1907.o `test -f 'lib1907.c' || echo '$(srcdir)/'`lib1907.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1907-lib1907.Tpo $(DEPDIR)/lib1907-lib1907.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1907.c' object='lib1907-lib1907.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1907_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1907-lib1907.o `test -f 'lib1907.c' || echo '$(srcdir)/'`lib1907.c
-
-lib1907-lib1907.obj: lib1907.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1907_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1907-lib1907.obj -MD -MP -MF $(DEPDIR)/lib1907-lib1907.Tpo -c -o lib1907-lib1907.obj `if test -f 'lib1907.c'; then $(CYGPATH_W) 'lib1907.c'; else $(CYGPATH_W) '$(srcdir)/lib1907.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1907-lib1907.Tpo $(DEPDIR)/lib1907-lib1907.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1907.c' object='lib1907-lib1907.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1907_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1907-lib1907.obj `if test -f 'lib1907.c'; then $(CYGPATH_W) 'lib1907.c'; else $(CYGPATH_W) '$(srcdir)/lib1907.c'; fi`
-
-../../lib/lib1907-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1907_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1907-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1907-timediff.Tpo -c -o ../../lib/lib1907-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1907-timediff.Tpo ../../lib/$(DEPDIR)/lib1907-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1907-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1907_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1907-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1907-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1907_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1907-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1907-timediff.Tpo -c -o ../../lib/lib1907-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1907-timediff.Tpo ../../lib/$(DEPDIR)/lib1907-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1907-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1907_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1907-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1907-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1907_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1907-first.o -MD -MP -MF $(DEPDIR)/lib1907-first.Tpo -c -o lib1907-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1907-first.Tpo $(DEPDIR)/lib1907-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1907-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1907_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1907-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1907-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1907_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1907-first.obj -MD -MP -MF $(DEPDIR)/lib1907-first.Tpo -c -o lib1907-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1907-first.Tpo $(DEPDIR)/lib1907-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1907-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1907_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1907-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1907-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1907_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1907-testutil.o -MD -MP -MF $(DEPDIR)/lib1907-testutil.Tpo -c -o lib1907-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1907-testutil.Tpo $(DEPDIR)/lib1907-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1907-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1907_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1907-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1907-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1907_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1907-testutil.obj -MD -MP -MF $(DEPDIR)/lib1907-testutil.Tpo -c -o lib1907-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1907-testutil.Tpo $(DEPDIR)/lib1907-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1907-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1907_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1907-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1907-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1907_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1907-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1907-warnless.Tpo -c -o ../../lib/lib1907-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1907-warnless.Tpo ../../lib/$(DEPDIR)/lib1907-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1907-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1907_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1907-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1907-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1907_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1907-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1907-warnless.Tpo -c -o ../../lib/lib1907-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1907-warnless.Tpo ../../lib/$(DEPDIR)/lib1907-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1907-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1907_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1907-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1908-lib1908.o: lib1908.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1908-lib1908.o -MD -MP -MF $(DEPDIR)/lib1908-lib1908.Tpo -c -o lib1908-lib1908.o `test -f 'lib1908.c' || echo '$(srcdir)/'`lib1908.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1908-lib1908.Tpo $(DEPDIR)/lib1908-lib1908.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1908.c' object='lib1908-lib1908.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1908-lib1908.o `test -f 'lib1908.c' || echo '$(srcdir)/'`lib1908.c
-
-lib1908-lib1908.obj: lib1908.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1908-lib1908.obj -MD -MP -MF $(DEPDIR)/lib1908-lib1908.Tpo -c -o lib1908-lib1908.obj `if test -f 'lib1908.c'; then $(CYGPATH_W) 'lib1908.c'; else $(CYGPATH_W) '$(srcdir)/lib1908.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1908-lib1908.Tpo $(DEPDIR)/lib1908-lib1908.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1908.c' object='lib1908-lib1908.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1908-lib1908.obj `if test -f 'lib1908.c'; then $(CYGPATH_W) 'lib1908.c'; else $(CYGPATH_W) '$(srcdir)/lib1908.c'; fi`
-
-../../lib/lib1908-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1908-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1908-timediff.Tpo -c -o ../../lib/lib1908-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1908-timediff.Tpo ../../lib/$(DEPDIR)/lib1908-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1908-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1908-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1908-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1908-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1908-timediff.Tpo -c -o ../../lib/lib1908-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1908-timediff.Tpo ../../lib/$(DEPDIR)/lib1908-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1908-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1908-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1908-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1908-first.o -MD -MP -MF $(DEPDIR)/lib1908-first.Tpo -c -o lib1908-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1908-first.Tpo $(DEPDIR)/lib1908-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1908-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1908-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1908-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1908-first.obj -MD -MP -MF $(DEPDIR)/lib1908-first.Tpo -c -o lib1908-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1908-first.Tpo $(DEPDIR)/lib1908-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1908-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1908-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1908-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1908-testutil.o -MD -MP -MF $(DEPDIR)/lib1908-testutil.Tpo -c -o lib1908-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1908-testutil.Tpo $(DEPDIR)/lib1908-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1908-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1908-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1908-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1908-testutil.obj -MD -MP -MF $(DEPDIR)/lib1908-testutil.Tpo -c -o lib1908-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1908-testutil.Tpo $(DEPDIR)/lib1908-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1908-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1908-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1908-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1908-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1908-warnless.Tpo -c -o ../../lib/lib1908-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1908-warnless.Tpo ../../lib/$(DEPDIR)/lib1908-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1908-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1908-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1908-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1908-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1908-warnless.Tpo -c -o ../../lib/lib1908-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1908-warnless.Tpo ../../lib/$(DEPDIR)/lib1908-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1908-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1908_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1908-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1910-lib1910.o: lib1910.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1910_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1910-lib1910.o -MD -MP -MF $(DEPDIR)/lib1910-lib1910.Tpo -c -o lib1910-lib1910.o `test -f 'lib1910.c' || echo '$(srcdir)/'`lib1910.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1910-lib1910.Tpo $(DEPDIR)/lib1910-lib1910.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1910.c' object='lib1910-lib1910.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1910_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1910-lib1910.o `test -f 'lib1910.c' || echo '$(srcdir)/'`lib1910.c
-
-lib1910-lib1910.obj: lib1910.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1910_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1910-lib1910.obj -MD -MP -MF $(DEPDIR)/lib1910-lib1910.Tpo -c -o lib1910-lib1910.obj `if test -f 'lib1910.c'; then $(CYGPATH_W) 'lib1910.c'; else $(CYGPATH_W) '$(srcdir)/lib1910.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1910-lib1910.Tpo $(DEPDIR)/lib1910-lib1910.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1910.c' object='lib1910-lib1910.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1910_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1910-lib1910.obj `if test -f 'lib1910.c'; then $(CYGPATH_W) 'lib1910.c'; else $(CYGPATH_W) '$(srcdir)/lib1910.c'; fi`
-
-../../lib/lib1910-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1910_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1910-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1910-timediff.Tpo -c -o ../../lib/lib1910-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1910-timediff.Tpo ../../lib/$(DEPDIR)/lib1910-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1910-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1910_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1910-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1910-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1910_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1910-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1910-timediff.Tpo -c -o ../../lib/lib1910-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1910-timediff.Tpo ../../lib/$(DEPDIR)/lib1910-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1910-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1910_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1910-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1910-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1910_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1910-first.o -MD -MP -MF $(DEPDIR)/lib1910-first.Tpo -c -o lib1910-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1910-first.Tpo $(DEPDIR)/lib1910-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1910-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1910_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1910-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1910-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1910_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1910-first.obj -MD -MP -MF $(DEPDIR)/lib1910-first.Tpo -c -o lib1910-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1910-first.Tpo $(DEPDIR)/lib1910-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1910-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1910_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1910-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1910-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1910_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1910-testutil.o -MD -MP -MF $(DEPDIR)/lib1910-testutil.Tpo -c -o lib1910-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1910-testutil.Tpo $(DEPDIR)/lib1910-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1910-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1910_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1910-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1910-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1910_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1910-testutil.obj -MD -MP -MF $(DEPDIR)/lib1910-testutil.Tpo -c -o lib1910-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1910-testutil.Tpo $(DEPDIR)/lib1910-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1910-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1910_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1910-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1910-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1910_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1910-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1910-warnless.Tpo -c -o ../../lib/lib1910-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1910-warnless.Tpo ../../lib/$(DEPDIR)/lib1910-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1910-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1910_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1910-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1910-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1910_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1910-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1910-warnless.Tpo -c -o ../../lib/lib1910-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1910-warnless.Tpo ../../lib/$(DEPDIR)/lib1910-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1910-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1910_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1910-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1911-lib1911.o: lib1911.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1911_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1911-lib1911.o -MD -MP -MF $(DEPDIR)/lib1911-lib1911.Tpo -c -o lib1911-lib1911.o `test -f 'lib1911.c' || echo '$(srcdir)/'`lib1911.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1911-lib1911.Tpo $(DEPDIR)/lib1911-lib1911.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1911.c' object='lib1911-lib1911.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1911_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1911-lib1911.o `test -f 'lib1911.c' || echo '$(srcdir)/'`lib1911.c
-
-lib1911-lib1911.obj: lib1911.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1911_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1911-lib1911.obj -MD -MP -MF $(DEPDIR)/lib1911-lib1911.Tpo -c -o lib1911-lib1911.obj `if test -f 'lib1911.c'; then $(CYGPATH_W) 'lib1911.c'; else $(CYGPATH_W) '$(srcdir)/lib1911.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1911-lib1911.Tpo $(DEPDIR)/lib1911-lib1911.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1911.c' object='lib1911-lib1911.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1911_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1911-lib1911.obj `if test -f 'lib1911.c'; then $(CYGPATH_W) 'lib1911.c'; else $(CYGPATH_W) '$(srcdir)/lib1911.c'; fi`
-
-../../lib/lib1911-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1911_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1911-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1911-timediff.Tpo -c -o ../../lib/lib1911-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1911-timediff.Tpo ../../lib/$(DEPDIR)/lib1911-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1911-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1911_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1911-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1911-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1911_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1911-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1911-timediff.Tpo -c -o ../../lib/lib1911-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1911-timediff.Tpo ../../lib/$(DEPDIR)/lib1911-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1911-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1911_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1911-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1911-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1911_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1911-first.o -MD -MP -MF $(DEPDIR)/lib1911-first.Tpo -c -o lib1911-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1911-first.Tpo $(DEPDIR)/lib1911-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1911-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1911_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1911-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1911-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1911_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1911-first.obj -MD -MP -MF $(DEPDIR)/lib1911-first.Tpo -c -o lib1911-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1911-first.Tpo $(DEPDIR)/lib1911-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1911-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1911_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1911-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1911-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1911_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1911-testutil.o -MD -MP -MF $(DEPDIR)/lib1911-testutil.Tpo -c -o lib1911-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1911-testutil.Tpo $(DEPDIR)/lib1911-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1911-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1911_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1911-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1911-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1911_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1911-testutil.obj -MD -MP -MF $(DEPDIR)/lib1911-testutil.Tpo -c -o lib1911-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1911-testutil.Tpo $(DEPDIR)/lib1911-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1911-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1911_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1911-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1911-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1911_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1911-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1911-warnless.Tpo -c -o ../../lib/lib1911-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1911-warnless.Tpo ../../lib/$(DEPDIR)/lib1911-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1911-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1911_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1911-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1911-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1911_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1911-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1911-warnless.Tpo -c -o ../../lib/lib1911-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1911-warnless.Tpo ../../lib/$(DEPDIR)/lib1911-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1911-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1911_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1911-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1912-lib1912.o: lib1912.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1912_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1912-lib1912.o -MD -MP -MF $(DEPDIR)/lib1912-lib1912.Tpo -c -o lib1912-lib1912.o `test -f 'lib1912.c' || echo '$(srcdir)/'`lib1912.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1912-lib1912.Tpo $(DEPDIR)/lib1912-lib1912.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1912.c' object='lib1912-lib1912.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1912_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1912-lib1912.o `test -f 'lib1912.c' || echo '$(srcdir)/'`lib1912.c
-
-lib1912-lib1912.obj: lib1912.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1912_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1912-lib1912.obj -MD -MP -MF $(DEPDIR)/lib1912-lib1912.Tpo -c -o lib1912-lib1912.obj `if test -f 'lib1912.c'; then $(CYGPATH_W) 'lib1912.c'; else $(CYGPATH_W) '$(srcdir)/lib1912.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1912-lib1912.Tpo $(DEPDIR)/lib1912-lib1912.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1912.c' object='lib1912-lib1912.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1912_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1912-lib1912.obj `if test -f 'lib1912.c'; then $(CYGPATH_W) 'lib1912.c'; else $(CYGPATH_W) '$(srcdir)/lib1912.c'; fi`
-
-../../lib/lib1912-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1912_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1912-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1912-timediff.Tpo -c -o ../../lib/lib1912-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1912-timediff.Tpo ../../lib/$(DEPDIR)/lib1912-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1912-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1912_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1912-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1912-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1912_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1912-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1912-timediff.Tpo -c -o ../../lib/lib1912-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1912-timediff.Tpo ../../lib/$(DEPDIR)/lib1912-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1912-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1912_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1912-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1912-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1912_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1912-first.o -MD -MP -MF $(DEPDIR)/lib1912-first.Tpo -c -o lib1912-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1912-first.Tpo $(DEPDIR)/lib1912-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1912-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1912_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1912-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1912-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1912_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1912-first.obj -MD -MP -MF $(DEPDIR)/lib1912-first.Tpo -c -o lib1912-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1912-first.Tpo $(DEPDIR)/lib1912-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1912-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1912_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1912-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1912-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1912_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1912-testutil.o -MD -MP -MF $(DEPDIR)/lib1912-testutil.Tpo -c -o lib1912-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1912-testutil.Tpo $(DEPDIR)/lib1912-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1912-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1912_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1912-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1912-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1912_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1912-testutil.obj -MD -MP -MF $(DEPDIR)/lib1912-testutil.Tpo -c -o lib1912-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1912-testutil.Tpo $(DEPDIR)/lib1912-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1912-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1912_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1912-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1912-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1912_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1912-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1912-warnless.Tpo -c -o ../../lib/lib1912-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1912-warnless.Tpo ../../lib/$(DEPDIR)/lib1912-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1912-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1912_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1912-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1912-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1912_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1912-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1912-warnless.Tpo -c -o ../../lib/lib1912-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1912-warnless.Tpo ../../lib/$(DEPDIR)/lib1912-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1912-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1912_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1912-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1913-lib1913.o: lib1913.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1913_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1913-lib1913.o -MD -MP -MF $(DEPDIR)/lib1913-lib1913.Tpo -c -o lib1913-lib1913.o `test -f 'lib1913.c' || echo '$(srcdir)/'`lib1913.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1913-lib1913.Tpo $(DEPDIR)/lib1913-lib1913.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1913.c' object='lib1913-lib1913.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1913_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1913-lib1913.o `test -f 'lib1913.c' || echo '$(srcdir)/'`lib1913.c
-
-lib1913-lib1913.obj: lib1913.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1913_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1913-lib1913.obj -MD -MP -MF $(DEPDIR)/lib1913-lib1913.Tpo -c -o lib1913-lib1913.obj `if test -f 'lib1913.c'; then $(CYGPATH_W) 'lib1913.c'; else $(CYGPATH_W) '$(srcdir)/lib1913.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1913-lib1913.Tpo $(DEPDIR)/lib1913-lib1913.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1913.c' object='lib1913-lib1913.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1913_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1913-lib1913.obj `if test -f 'lib1913.c'; then $(CYGPATH_W) 'lib1913.c'; else $(CYGPATH_W) '$(srcdir)/lib1913.c'; fi`
-
-../../lib/lib1913-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1913_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1913-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1913-timediff.Tpo -c -o ../../lib/lib1913-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1913-timediff.Tpo ../../lib/$(DEPDIR)/lib1913-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1913-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1913_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1913-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1913-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1913_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1913-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1913-timediff.Tpo -c -o ../../lib/lib1913-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1913-timediff.Tpo ../../lib/$(DEPDIR)/lib1913-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1913-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1913_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1913-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1913-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1913_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1913-first.o -MD -MP -MF $(DEPDIR)/lib1913-first.Tpo -c -o lib1913-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1913-first.Tpo $(DEPDIR)/lib1913-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1913-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1913_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1913-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1913-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1913_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1913-first.obj -MD -MP -MF $(DEPDIR)/lib1913-first.Tpo -c -o lib1913-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1913-first.Tpo $(DEPDIR)/lib1913-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1913-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1913_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1913-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1913-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1913_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1913-testutil.o -MD -MP -MF $(DEPDIR)/lib1913-testutil.Tpo -c -o lib1913-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1913-testutil.Tpo $(DEPDIR)/lib1913-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1913-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1913_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1913-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1913-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1913_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1913-testutil.obj -MD -MP -MF $(DEPDIR)/lib1913-testutil.Tpo -c -o lib1913-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1913-testutil.Tpo $(DEPDIR)/lib1913-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1913-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1913_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1913-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1913-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1913_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1913-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1913-warnless.Tpo -c -o ../../lib/lib1913-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1913-warnless.Tpo ../../lib/$(DEPDIR)/lib1913-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1913-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1913_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1913-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1913-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1913_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1913-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1913-warnless.Tpo -c -o ../../lib/lib1913-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1913-warnless.Tpo ../../lib/$(DEPDIR)/lib1913-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1913-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1913_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1913-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1915-lib1915.o: lib1915.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1915_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1915-lib1915.o -MD -MP -MF $(DEPDIR)/lib1915-lib1915.Tpo -c -o lib1915-lib1915.o `test -f 'lib1915.c' || echo '$(srcdir)/'`lib1915.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1915-lib1915.Tpo $(DEPDIR)/lib1915-lib1915.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1915.c' object='lib1915-lib1915.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1915_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1915-lib1915.o `test -f 'lib1915.c' || echo '$(srcdir)/'`lib1915.c
-
-lib1915-lib1915.obj: lib1915.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1915_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1915-lib1915.obj -MD -MP -MF $(DEPDIR)/lib1915-lib1915.Tpo -c -o lib1915-lib1915.obj `if test -f 'lib1915.c'; then $(CYGPATH_W) 'lib1915.c'; else $(CYGPATH_W) '$(srcdir)/lib1915.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1915-lib1915.Tpo $(DEPDIR)/lib1915-lib1915.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1915.c' object='lib1915-lib1915.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1915_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1915-lib1915.obj `if test -f 'lib1915.c'; then $(CYGPATH_W) 'lib1915.c'; else $(CYGPATH_W) '$(srcdir)/lib1915.c'; fi`
-
-../../lib/lib1915-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1915_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1915-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1915-timediff.Tpo -c -o ../../lib/lib1915-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1915-timediff.Tpo ../../lib/$(DEPDIR)/lib1915-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1915-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1915_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1915-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1915-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1915_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1915-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1915-timediff.Tpo -c -o ../../lib/lib1915-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1915-timediff.Tpo ../../lib/$(DEPDIR)/lib1915-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1915-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1915_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1915-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1915-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1915_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1915-first.o -MD -MP -MF $(DEPDIR)/lib1915-first.Tpo -c -o lib1915-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1915-first.Tpo $(DEPDIR)/lib1915-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1915-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1915_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1915-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1915-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1915_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1915-first.obj -MD -MP -MF $(DEPDIR)/lib1915-first.Tpo -c -o lib1915-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1915-first.Tpo $(DEPDIR)/lib1915-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1915-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1915_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1915-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1915-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1915_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1915-testutil.o -MD -MP -MF $(DEPDIR)/lib1915-testutil.Tpo -c -o lib1915-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1915-testutil.Tpo $(DEPDIR)/lib1915-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1915-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1915_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1915-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1915-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1915_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1915-testutil.obj -MD -MP -MF $(DEPDIR)/lib1915-testutil.Tpo -c -o lib1915-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1915-testutil.Tpo $(DEPDIR)/lib1915-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1915-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1915_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1915-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1915-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1915_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1915-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1915-warnless.Tpo -c -o ../../lib/lib1915-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1915-warnless.Tpo ../../lib/$(DEPDIR)/lib1915-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1915-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1915_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1915-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1915-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1915_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1915-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1915-warnless.Tpo -c -o ../../lib/lib1915-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1915-warnless.Tpo ../../lib/$(DEPDIR)/lib1915-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1915-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1915_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1915-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1916-lib1916.o: lib1916.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1916_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1916-lib1916.o -MD -MP -MF $(DEPDIR)/lib1916-lib1916.Tpo -c -o lib1916-lib1916.o `test -f 'lib1916.c' || echo '$(srcdir)/'`lib1916.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1916-lib1916.Tpo $(DEPDIR)/lib1916-lib1916.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1916.c' object='lib1916-lib1916.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1916_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1916-lib1916.o `test -f 'lib1916.c' || echo '$(srcdir)/'`lib1916.c
-
-lib1916-lib1916.obj: lib1916.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1916_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1916-lib1916.obj -MD -MP -MF $(DEPDIR)/lib1916-lib1916.Tpo -c -o lib1916-lib1916.obj `if test -f 'lib1916.c'; then $(CYGPATH_W) 'lib1916.c'; else $(CYGPATH_W) '$(srcdir)/lib1916.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1916-lib1916.Tpo $(DEPDIR)/lib1916-lib1916.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1916.c' object='lib1916-lib1916.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1916_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1916-lib1916.obj `if test -f 'lib1916.c'; then $(CYGPATH_W) 'lib1916.c'; else $(CYGPATH_W) '$(srcdir)/lib1916.c'; fi`
-
-../../lib/lib1916-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1916_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1916-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1916-timediff.Tpo -c -o ../../lib/lib1916-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1916-timediff.Tpo ../../lib/$(DEPDIR)/lib1916-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1916-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1916_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1916-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1916-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1916_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1916-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1916-timediff.Tpo -c -o ../../lib/lib1916-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1916-timediff.Tpo ../../lib/$(DEPDIR)/lib1916-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1916-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1916_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1916-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1916-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1916_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1916-first.o -MD -MP -MF $(DEPDIR)/lib1916-first.Tpo -c -o lib1916-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1916-first.Tpo $(DEPDIR)/lib1916-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1916-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1916_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1916-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1916-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1916_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1916-first.obj -MD -MP -MF $(DEPDIR)/lib1916-first.Tpo -c -o lib1916-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1916-first.Tpo $(DEPDIR)/lib1916-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1916-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1916_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1916-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-../../lib/lib1916-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1916_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1916-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1916-warnless.Tpo -c -o ../../lib/lib1916-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1916-warnless.Tpo ../../lib/$(DEPDIR)/lib1916-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1916-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1916_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1916-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1916-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1916_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1916-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1916-warnless.Tpo -c -o ../../lib/lib1916-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1916-warnless.Tpo ../../lib/$(DEPDIR)/lib1916-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1916-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1916_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1916-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
lib1917-lib1916.o: lib1916.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1917_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1917-lib1916.o -MD -MP -MF $(DEPDIR)/lib1917-lib1916.Tpo -c -o lib1917-lib1916.o `test -f 'lib1916.c' || echo '$(srcdir)/'`lib1916.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1917-lib1916.Tpo $(DEPDIR)/lib1917-lib1916.Po
@@ -10113,608 +4400,6 @@ lib1917-first.obj: first.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1917_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1917-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-lib1918-lib1918.o: lib1918.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1918_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1918-lib1918.o -MD -MP -MF $(DEPDIR)/lib1918-lib1918.Tpo -c -o lib1918-lib1918.o `test -f 'lib1918.c' || echo '$(srcdir)/'`lib1918.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1918-lib1918.Tpo $(DEPDIR)/lib1918-lib1918.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1918.c' object='lib1918-lib1918.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1918_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1918-lib1918.o `test -f 'lib1918.c' || echo '$(srcdir)/'`lib1918.c
-
-lib1918-lib1918.obj: lib1918.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1918_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1918-lib1918.obj -MD -MP -MF $(DEPDIR)/lib1918-lib1918.Tpo -c -o lib1918-lib1918.obj `if test -f 'lib1918.c'; then $(CYGPATH_W) 'lib1918.c'; else $(CYGPATH_W) '$(srcdir)/lib1918.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1918-lib1918.Tpo $(DEPDIR)/lib1918-lib1918.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1918.c' object='lib1918-lib1918.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1918_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1918-lib1918.obj `if test -f 'lib1918.c'; then $(CYGPATH_W) 'lib1918.c'; else $(CYGPATH_W) '$(srcdir)/lib1918.c'; fi`
-
-../../lib/lib1918-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1918_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1918-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1918-timediff.Tpo -c -o ../../lib/lib1918-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1918-timediff.Tpo ../../lib/$(DEPDIR)/lib1918-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1918-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1918_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1918-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1918-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1918_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1918-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1918-timediff.Tpo -c -o ../../lib/lib1918-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1918-timediff.Tpo ../../lib/$(DEPDIR)/lib1918-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1918-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1918_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1918-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1918-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1918_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1918-first.o -MD -MP -MF $(DEPDIR)/lib1918-first.Tpo -c -o lib1918-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1918-first.Tpo $(DEPDIR)/lib1918-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1918-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1918_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1918-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1918-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1918_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1918-first.obj -MD -MP -MF $(DEPDIR)/lib1918-first.Tpo -c -o lib1918-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1918-first.Tpo $(DEPDIR)/lib1918-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1918-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1918_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1918-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-../../lib/lib1918-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1918_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1918-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1918-warnless.Tpo -c -o ../../lib/lib1918-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1918-warnless.Tpo ../../lib/$(DEPDIR)/lib1918-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1918-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1918_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1918-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1918-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1918_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1918-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1918-warnless.Tpo -c -o ../../lib/lib1918-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1918-warnless.Tpo ../../lib/$(DEPDIR)/lib1918-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1918-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1918_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1918-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1919-lib1919.o: lib1919.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1919_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1919-lib1919.o -MD -MP -MF $(DEPDIR)/lib1919-lib1919.Tpo -c -o lib1919-lib1919.o `test -f 'lib1919.c' || echo '$(srcdir)/'`lib1919.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1919-lib1919.Tpo $(DEPDIR)/lib1919-lib1919.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1919.c' object='lib1919-lib1919.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1919_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1919-lib1919.o `test -f 'lib1919.c' || echo '$(srcdir)/'`lib1919.c
-
-lib1919-lib1919.obj: lib1919.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1919_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1919-lib1919.obj -MD -MP -MF $(DEPDIR)/lib1919-lib1919.Tpo -c -o lib1919-lib1919.obj `if test -f 'lib1919.c'; then $(CYGPATH_W) 'lib1919.c'; else $(CYGPATH_W) '$(srcdir)/lib1919.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1919-lib1919.Tpo $(DEPDIR)/lib1919-lib1919.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1919.c' object='lib1919-lib1919.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1919_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1919-lib1919.obj `if test -f 'lib1919.c'; then $(CYGPATH_W) 'lib1919.c'; else $(CYGPATH_W) '$(srcdir)/lib1919.c'; fi`
-
-../../lib/lib1919-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1919_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1919-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1919-timediff.Tpo -c -o ../../lib/lib1919-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1919-timediff.Tpo ../../lib/$(DEPDIR)/lib1919-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1919-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1919_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1919-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1919-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1919_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1919-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1919-timediff.Tpo -c -o ../../lib/lib1919-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1919-timediff.Tpo ../../lib/$(DEPDIR)/lib1919-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1919-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1919_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1919-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1919-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1919_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1919-first.o -MD -MP -MF $(DEPDIR)/lib1919-first.Tpo -c -o lib1919-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1919-first.Tpo $(DEPDIR)/lib1919-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1919-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1919_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1919-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1919-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1919_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1919-first.obj -MD -MP -MF $(DEPDIR)/lib1919-first.Tpo -c -o lib1919-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1919-first.Tpo $(DEPDIR)/lib1919-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1919-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1919_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1919-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-../../lib/lib1919-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1919_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1919-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1919-warnless.Tpo -c -o ../../lib/lib1919-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1919-warnless.Tpo ../../lib/$(DEPDIR)/lib1919-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1919-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1919_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1919-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1919-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1919_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1919-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1919-warnless.Tpo -c -o ../../lib/lib1919-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1919-warnless.Tpo ../../lib/$(DEPDIR)/lib1919-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1919-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1919_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1919-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1933-lib1933.o: lib1933.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1933_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1933-lib1933.o -MD -MP -MF $(DEPDIR)/lib1933-lib1933.Tpo -c -o lib1933-lib1933.o `test -f 'lib1933.c' || echo '$(srcdir)/'`lib1933.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1933-lib1933.Tpo $(DEPDIR)/lib1933-lib1933.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1933.c' object='lib1933-lib1933.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1933_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1933-lib1933.o `test -f 'lib1933.c' || echo '$(srcdir)/'`lib1933.c
-
-lib1933-lib1933.obj: lib1933.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1933_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1933-lib1933.obj -MD -MP -MF $(DEPDIR)/lib1933-lib1933.Tpo -c -o lib1933-lib1933.obj `if test -f 'lib1933.c'; then $(CYGPATH_W) 'lib1933.c'; else $(CYGPATH_W) '$(srcdir)/lib1933.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1933-lib1933.Tpo $(DEPDIR)/lib1933-lib1933.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1933.c' object='lib1933-lib1933.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1933_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1933-lib1933.obj `if test -f 'lib1933.c'; then $(CYGPATH_W) 'lib1933.c'; else $(CYGPATH_W) '$(srcdir)/lib1933.c'; fi`
-
-../../lib/lib1933-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1933_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1933-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1933-timediff.Tpo -c -o ../../lib/lib1933-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1933-timediff.Tpo ../../lib/$(DEPDIR)/lib1933-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1933-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1933_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1933-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1933-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1933_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1933-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1933-timediff.Tpo -c -o ../../lib/lib1933-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1933-timediff.Tpo ../../lib/$(DEPDIR)/lib1933-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1933-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1933_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1933-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1933-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1933_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1933-first.o -MD -MP -MF $(DEPDIR)/lib1933-first.Tpo -c -o lib1933-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1933-first.Tpo $(DEPDIR)/lib1933-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1933-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1933_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1933-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1933-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1933_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1933-first.obj -MD -MP -MF $(DEPDIR)/lib1933-first.Tpo -c -o lib1933-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1933-first.Tpo $(DEPDIR)/lib1933-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1933-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1933_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1933-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1933-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1933_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1933-testutil.o -MD -MP -MF $(DEPDIR)/lib1933-testutil.Tpo -c -o lib1933-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1933-testutil.Tpo $(DEPDIR)/lib1933-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1933-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1933_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1933-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1933-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1933_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1933-testutil.obj -MD -MP -MF $(DEPDIR)/lib1933-testutil.Tpo -c -o lib1933-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1933-testutil.Tpo $(DEPDIR)/lib1933-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1933-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1933_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1933-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1933-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1933_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1933-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1933-warnless.Tpo -c -o ../../lib/lib1933-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1933-warnless.Tpo ../../lib/$(DEPDIR)/lib1933-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1933-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1933_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1933-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1933-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1933_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1933-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1933-warnless.Tpo -c -o ../../lib/lib1933-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1933-warnless.Tpo ../../lib/$(DEPDIR)/lib1933-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1933-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1933_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1933-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1934-lib1934.o: lib1934.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1934_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1934-lib1934.o -MD -MP -MF $(DEPDIR)/lib1934-lib1934.Tpo -c -o lib1934-lib1934.o `test -f 'lib1934.c' || echo '$(srcdir)/'`lib1934.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1934-lib1934.Tpo $(DEPDIR)/lib1934-lib1934.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1934.c' object='lib1934-lib1934.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1934_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1934-lib1934.o `test -f 'lib1934.c' || echo '$(srcdir)/'`lib1934.c
-
-lib1934-lib1934.obj: lib1934.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1934_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1934-lib1934.obj -MD -MP -MF $(DEPDIR)/lib1934-lib1934.Tpo -c -o lib1934-lib1934.obj `if test -f 'lib1934.c'; then $(CYGPATH_W) 'lib1934.c'; else $(CYGPATH_W) '$(srcdir)/lib1934.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1934-lib1934.Tpo $(DEPDIR)/lib1934-lib1934.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1934.c' object='lib1934-lib1934.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1934_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1934-lib1934.obj `if test -f 'lib1934.c'; then $(CYGPATH_W) 'lib1934.c'; else $(CYGPATH_W) '$(srcdir)/lib1934.c'; fi`
-
-../../lib/lib1934-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1934_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1934-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1934-timediff.Tpo -c -o ../../lib/lib1934-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1934-timediff.Tpo ../../lib/$(DEPDIR)/lib1934-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1934-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1934_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1934-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1934-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1934_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1934-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1934-timediff.Tpo -c -o ../../lib/lib1934-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1934-timediff.Tpo ../../lib/$(DEPDIR)/lib1934-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1934-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1934_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1934-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1934-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1934_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1934-first.o -MD -MP -MF $(DEPDIR)/lib1934-first.Tpo -c -o lib1934-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1934-first.Tpo $(DEPDIR)/lib1934-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1934-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1934_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1934-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1934-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1934_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1934-first.obj -MD -MP -MF $(DEPDIR)/lib1934-first.Tpo -c -o lib1934-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1934-first.Tpo $(DEPDIR)/lib1934-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1934-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1934_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1934-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1934-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1934_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1934-testutil.o -MD -MP -MF $(DEPDIR)/lib1934-testutil.Tpo -c -o lib1934-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1934-testutil.Tpo $(DEPDIR)/lib1934-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1934-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1934_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1934-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1934-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1934_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1934-testutil.obj -MD -MP -MF $(DEPDIR)/lib1934-testutil.Tpo -c -o lib1934-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1934-testutil.Tpo $(DEPDIR)/lib1934-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1934-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1934_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1934-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1934-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1934_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1934-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1934-warnless.Tpo -c -o ../../lib/lib1934-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1934-warnless.Tpo ../../lib/$(DEPDIR)/lib1934-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1934-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1934_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1934-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1934-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1934_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1934-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1934-warnless.Tpo -c -o ../../lib/lib1934-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1934-warnless.Tpo ../../lib/$(DEPDIR)/lib1934-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1934-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1934_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1934-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1935-lib1935.o: lib1935.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1935_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1935-lib1935.o -MD -MP -MF $(DEPDIR)/lib1935-lib1935.Tpo -c -o lib1935-lib1935.o `test -f 'lib1935.c' || echo '$(srcdir)/'`lib1935.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1935-lib1935.Tpo $(DEPDIR)/lib1935-lib1935.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1935.c' object='lib1935-lib1935.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1935_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1935-lib1935.o `test -f 'lib1935.c' || echo '$(srcdir)/'`lib1935.c
-
-lib1935-lib1935.obj: lib1935.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1935_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1935-lib1935.obj -MD -MP -MF $(DEPDIR)/lib1935-lib1935.Tpo -c -o lib1935-lib1935.obj `if test -f 'lib1935.c'; then $(CYGPATH_W) 'lib1935.c'; else $(CYGPATH_W) '$(srcdir)/lib1935.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1935-lib1935.Tpo $(DEPDIR)/lib1935-lib1935.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1935.c' object='lib1935-lib1935.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1935_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1935-lib1935.obj `if test -f 'lib1935.c'; then $(CYGPATH_W) 'lib1935.c'; else $(CYGPATH_W) '$(srcdir)/lib1935.c'; fi`
-
-../../lib/lib1935-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1935_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1935-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1935-timediff.Tpo -c -o ../../lib/lib1935-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1935-timediff.Tpo ../../lib/$(DEPDIR)/lib1935-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1935-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1935_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1935-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1935-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1935_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1935-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1935-timediff.Tpo -c -o ../../lib/lib1935-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1935-timediff.Tpo ../../lib/$(DEPDIR)/lib1935-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1935-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1935_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1935-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1935-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1935_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1935-first.o -MD -MP -MF $(DEPDIR)/lib1935-first.Tpo -c -o lib1935-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1935-first.Tpo $(DEPDIR)/lib1935-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1935-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1935_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1935-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1935-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1935_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1935-first.obj -MD -MP -MF $(DEPDIR)/lib1935-first.Tpo -c -o lib1935-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1935-first.Tpo $(DEPDIR)/lib1935-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1935-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1935_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1935-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1935-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1935_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1935-testutil.o -MD -MP -MF $(DEPDIR)/lib1935-testutil.Tpo -c -o lib1935-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1935-testutil.Tpo $(DEPDIR)/lib1935-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1935-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1935_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1935-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1935-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1935_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1935-testutil.obj -MD -MP -MF $(DEPDIR)/lib1935-testutil.Tpo -c -o lib1935-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1935-testutil.Tpo $(DEPDIR)/lib1935-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1935-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1935_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1935-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1935-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1935_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1935-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1935-warnless.Tpo -c -o ../../lib/lib1935-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1935-warnless.Tpo ../../lib/$(DEPDIR)/lib1935-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1935-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1935_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1935-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1935-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1935_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1935-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1935-warnless.Tpo -c -o ../../lib/lib1935-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1935-warnless.Tpo ../../lib/$(DEPDIR)/lib1935-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1935-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1935_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1935-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1936-lib1936.o: lib1936.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1936_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1936-lib1936.o -MD -MP -MF $(DEPDIR)/lib1936-lib1936.Tpo -c -o lib1936-lib1936.o `test -f 'lib1936.c' || echo '$(srcdir)/'`lib1936.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1936-lib1936.Tpo $(DEPDIR)/lib1936-lib1936.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1936.c' object='lib1936-lib1936.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1936_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1936-lib1936.o `test -f 'lib1936.c' || echo '$(srcdir)/'`lib1936.c
-
-lib1936-lib1936.obj: lib1936.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1936_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1936-lib1936.obj -MD -MP -MF $(DEPDIR)/lib1936-lib1936.Tpo -c -o lib1936-lib1936.obj `if test -f 'lib1936.c'; then $(CYGPATH_W) 'lib1936.c'; else $(CYGPATH_W) '$(srcdir)/lib1936.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1936-lib1936.Tpo $(DEPDIR)/lib1936-lib1936.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1936.c' object='lib1936-lib1936.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1936_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1936-lib1936.obj `if test -f 'lib1936.c'; then $(CYGPATH_W) 'lib1936.c'; else $(CYGPATH_W) '$(srcdir)/lib1936.c'; fi`
-
-../../lib/lib1936-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1936_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1936-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1936-timediff.Tpo -c -o ../../lib/lib1936-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1936-timediff.Tpo ../../lib/$(DEPDIR)/lib1936-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1936-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1936_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1936-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1936-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1936_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1936-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1936-timediff.Tpo -c -o ../../lib/lib1936-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1936-timediff.Tpo ../../lib/$(DEPDIR)/lib1936-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1936-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1936_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1936-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1936-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1936_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1936-first.o -MD -MP -MF $(DEPDIR)/lib1936-first.Tpo -c -o lib1936-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1936-first.Tpo $(DEPDIR)/lib1936-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1936-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1936_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1936-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1936-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1936_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1936-first.obj -MD -MP -MF $(DEPDIR)/lib1936-first.Tpo -c -o lib1936-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1936-first.Tpo $(DEPDIR)/lib1936-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1936-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1936_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1936-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1936-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1936_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1936-testutil.o -MD -MP -MF $(DEPDIR)/lib1936-testutil.Tpo -c -o lib1936-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1936-testutil.Tpo $(DEPDIR)/lib1936-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1936-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1936_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1936-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1936-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1936_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1936-testutil.obj -MD -MP -MF $(DEPDIR)/lib1936-testutil.Tpo -c -o lib1936-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1936-testutil.Tpo $(DEPDIR)/lib1936-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1936-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1936_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1936-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1936-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1936_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1936-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1936-warnless.Tpo -c -o ../../lib/lib1936-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1936-warnless.Tpo ../../lib/$(DEPDIR)/lib1936-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1936-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1936_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1936-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1936-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1936_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1936-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1936-warnless.Tpo -c -o ../../lib/lib1936-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1936-warnless.Tpo ../../lib/$(DEPDIR)/lib1936-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1936-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1936_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1936-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib1937-lib1937.o: lib1937.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1937_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1937-lib1937.o -MD -MP -MF $(DEPDIR)/lib1937-lib1937.Tpo -c -o lib1937-lib1937.o `test -f 'lib1937.c' || echo '$(srcdir)/'`lib1937.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1937-lib1937.Tpo $(DEPDIR)/lib1937-lib1937.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1937.c' object='lib1937-lib1937.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1937_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1937-lib1937.o `test -f 'lib1937.c' || echo '$(srcdir)/'`lib1937.c
-
-lib1937-lib1937.obj: lib1937.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1937_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1937-lib1937.obj -MD -MP -MF $(DEPDIR)/lib1937-lib1937.Tpo -c -o lib1937-lib1937.obj `if test -f 'lib1937.c'; then $(CYGPATH_W) 'lib1937.c'; else $(CYGPATH_W) '$(srcdir)/lib1937.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1937-lib1937.Tpo $(DEPDIR)/lib1937-lib1937.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1937.c' object='lib1937-lib1937.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1937_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1937-lib1937.obj `if test -f 'lib1937.c'; then $(CYGPATH_W) 'lib1937.c'; else $(CYGPATH_W) '$(srcdir)/lib1937.c'; fi`
-
-../../lib/lib1937-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1937_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1937-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1937-timediff.Tpo -c -o ../../lib/lib1937-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1937-timediff.Tpo ../../lib/$(DEPDIR)/lib1937-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1937-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1937_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1937-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1937-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1937_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1937-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1937-timediff.Tpo -c -o ../../lib/lib1937-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1937-timediff.Tpo ../../lib/$(DEPDIR)/lib1937-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1937-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1937_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1937-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1937-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1937_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1937-first.o -MD -MP -MF $(DEPDIR)/lib1937-first.Tpo -c -o lib1937-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1937-first.Tpo $(DEPDIR)/lib1937-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1937-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1937_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1937-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1937-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1937_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1937-first.obj -MD -MP -MF $(DEPDIR)/lib1937-first.Tpo -c -o lib1937-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1937-first.Tpo $(DEPDIR)/lib1937-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1937-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1937_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1937-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1938-lib1938.o: lib1938.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1938_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1938-lib1938.o -MD -MP -MF $(DEPDIR)/lib1938-lib1938.Tpo -c -o lib1938-lib1938.o `test -f 'lib1938.c' || echo '$(srcdir)/'`lib1938.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1938-lib1938.Tpo $(DEPDIR)/lib1938-lib1938.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1938.c' object='lib1938-lib1938.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1938_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1938-lib1938.o `test -f 'lib1938.c' || echo '$(srcdir)/'`lib1938.c
-
-lib1938-lib1938.obj: lib1938.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1938_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1938-lib1938.obj -MD -MP -MF $(DEPDIR)/lib1938-lib1938.Tpo -c -o lib1938-lib1938.obj `if test -f 'lib1938.c'; then $(CYGPATH_W) 'lib1938.c'; else $(CYGPATH_W) '$(srcdir)/lib1938.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1938-lib1938.Tpo $(DEPDIR)/lib1938-lib1938.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1938.c' object='lib1938-lib1938.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1938_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1938-lib1938.obj `if test -f 'lib1938.c'; then $(CYGPATH_W) 'lib1938.c'; else $(CYGPATH_W) '$(srcdir)/lib1938.c'; fi`
-
-../../lib/lib1938-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1938_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1938-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1938-timediff.Tpo -c -o ../../lib/lib1938-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1938-timediff.Tpo ../../lib/$(DEPDIR)/lib1938-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1938-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1938_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1938-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1938-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1938_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1938-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1938-timediff.Tpo -c -o ../../lib/lib1938-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1938-timediff.Tpo ../../lib/$(DEPDIR)/lib1938-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1938-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1938_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1938-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1938-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1938_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1938-first.o -MD -MP -MF $(DEPDIR)/lib1938-first.Tpo -c -o lib1938-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1938-first.Tpo $(DEPDIR)/lib1938-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1938-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1938_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1938-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1938-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1938_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1938-first.obj -MD -MP -MF $(DEPDIR)/lib1938-first.Tpo -c -o lib1938-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1938-first.Tpo $(DEPDIR)/lib1938-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1938-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1938_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1938-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1939-lib1939.o: lib1939.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1939_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1939-lib1939.o -MD -MP -MF $(DEPDIR)/lib1939-lib1939.Tpo -c -o lib1939-lib1939.o `test -f 'lib1939.c' || echo '$(srcdir)/'`lib1939.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1939-lib1939.Tpo $(DEPDIR)/lib1939-lib1939.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1939.c' object='lib1939-lib1939.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1939_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1939-lib1939.o `test -f 'lib1939.c' || echo '$(srcdir)/'`lib1939.c
-
-lib1939-lib1939.obj: lib1939.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1939_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1939-lib1939.obj -MD -MP -MF $(DEPDIR)/lib1939-lib1939.Tpo -c -o lib1939-lib1939.obj `if test -f 'lib1939.c'; then $(CYGPATH_W) 'lib1939.c'; else $(CYGPATH_W) '$(srcdir)/lib1939.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1939-lib1939.Tpo $(DEPDIR)/lib1939-lib1939.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1939.c' object='lib1939-lib1939.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1939_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1939-lib1939.obj `if test -f 'lib1939.c'; then $(CYGPATH_W) 'lib1939.c'; else $(CYGPATH_W) '$(srcdir)/lib1939.c'; fi`
-
-../../lib/lib1939-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1939_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1939-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1939-timediff.Tpo -c -o ../../lib/lib1939-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1939-timediff.Tpo ../../lib/$(DEPDIR)/lib1939-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1939-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1939_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1939-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1939-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1939_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1939-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1939-timediff.Tpo -c -o ../../lib/lib1939-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1939-timediff.Tpo ../../lib/$(DEPDIR)/lib1939-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1939-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1939_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1939-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1939-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1939_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1939-first.o -MD -MP -MF $(DEPDIR)/lib1939-first.Tpo -c -o lib1939-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1939-first.Tpo $(DEPDIR)/lib1939-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1939-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1939_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1939-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1939-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1939_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1939-first.obj -MD -MP -MF $(DEPDIR)/lib1939-first.Tpo -c -o lib1939-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1939-first.Tpo $(DEPDIR)/lib1939-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1939-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1939_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1939-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1940-lib1940.o: lib1940.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1940_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1940-lib1940.o -MD -MP -MF $(DEPDIR)/lib1940-lib1940.Tpo -c -o lib1940-lib1940.o `test -f 'lib1940.c' || echo '$(srcdir)/'`lib1940.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1940-lib1940.Tpo $(DEPDIR)/lib1940-lib1940.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1940.c' object='lib1940-lib1940.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1940_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1940-lib1940.o `test -f 'lib1940.c' || echo '$(srcdir)/'`lib1940.c
-
-lib1940-lib1940.obj: lib1940.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1940_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1940-lib1940.obj -MD -MP -MF $(DEPDIR)/lib1940-lib1940.Tpo -c -o lib1940-lib1940.obj `if test -f 'lib1940.c'; then $(CYGPATH_W) 'lib1940.c'; else $(CYGPATH_W) '$(srcdir)/lib1940.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1940-lib1940.Tpo $(DEPDIR)/lib1940-lib1940.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1940.c' object='lib1940-lib1940.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1940_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1940-lib1940.obj `if test -f 'lib1940.c'; then $(CYGPATH_W) 'lib1940.c'; else $(CYGPATH_W) '$(srcdir)/lib1940.c'; fi`
-
-../../lib/lib1940-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1940_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1940-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1940-timediff.Tpo -c -o ../../lib/lib1940-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1940-timediff.Tpo ../../lib/$(DEPDIR)/lib1940-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1940-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1940_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1940-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1940-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1940_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1940-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1940-timediff.Tpo -c -o ../../lib/lib1940-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1940-timediff.Tpo ../../lib/$(DEPDIR)/lib1940-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1940-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1940_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1940-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1940-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1940_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1940-first.o -MD -MP -MF $(DEPDIR)/lib1940-first.Tpo -c -o lib1940-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1940-first.Tpo $(DEPDIR)/lib1940-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1940-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1940_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1940-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1940-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1940_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1940-first.obj -MD -MP -MF $(DEPDIR)/lib1940-first.Tpo -c -o lib1940-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1940-first.Tpo $(DEPDIR)/lib1940-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1940-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1940_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1940-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1945-lib1945.o: lib1945.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1945_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1945-lib1945.o -MD -MP -MF $(DEPDIR)/lib1945-lib1945.Tpo -c -o lib1945-lib1945.o `test -f 'lib1945.c' || echo '$(srcdir)/'`lib1945.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1945-lib1945.Tpo $(DEPDIR)/lib1945-lib1945.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1945.c' object='lib1945-lib1945.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1945_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1945-lib1945.o `test -f 'lib1945.c' || echo '$(srcdir)/'`lib1945.c
-
-lib1945-lib1945.obj: lib1945.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1945_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1945-lib1945.obj -MD -MP -MF $(DEPDIR)/lib1945-lib1945.Tpo -c -o lib1945-lib1945.obj `if test -f 'lib1945.c'; then $(CYGPATH_W) 'lib1945.c'; else $(CYGPATH_W) '$(srcdir)/lib1945.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1945-lib1945.Tpo $(DEPDIR)/lib1945-lib1945.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1945.c' object='lib1945-lib1945.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1945_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1945-lib1945.obj `if test -f 'lib1945.c'; then $(CYGPATH_W) 'lib1945.c'; else $(CYGPATH_W) '$(srcdir)/lib1945.c'; fi`
-
-../../lib/lib1945-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1945_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1945-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1945-timediff.Tpo -c -o ../../lib/lib1945-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1945-timediff.Tpo ../../lib/$(DEPDIR)/lib1945-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1945-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1945_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1945-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1945-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1945_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1945-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1945-timediff.Tpo -c -o ../../lib/lib1945-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1945-timediff.Tpo ../../lib/$(DEPDIR)/lib1945-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1945-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1945_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1945-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1945-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1945_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1945-first.o -MD -MP -MF $(DEPDIR)/lib1945-first.Tpo -c -o lib1945-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1945-first.Tpo $(DEPDIR)/lib1945-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1945-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1945_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1945-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1945-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1945_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1945-first.obj -MD -MP -MF $(DEPDIR)/lib1945-first.Tpo -c -o lib1945-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1945-first.Tpo $(DEPDIR)/lib1945-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1945-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1945_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1945-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
lib1946-lib1940.o: lib1940.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1946_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1946-lib1940.o -MD -MP -MF $(DEPDIR)/lib1946-lib1940.Tpo -c -o lib1946-lib1940.o `test -f 'lib1940.c' || echo '$(srcdir)/'`lib1940.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1946-lib1940.Tpo $(DEPDIR)/lib1946-lib1940.Po
@@ -10757,1728 +4442,6 @@ lib1946-first.obj: first.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1946_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1946-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-lib1947-lib1947.o: lib1947.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1947_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1947-lib1947.o -MD -MP -MF $(DEPDIR)/lib1947-lib1947.Tpo -c -o lib1947-lib1947.o `test -f 'lib1947.c' || echo '$(srcdir)/'`lib1947.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1947-lib1947.Tpo $(DEPDIR)/lib1947-lib1947.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1947.c' object='lib1947-lib1947.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1947_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1947-lib1947.o `test -f 'lib1947.c' || echo '$(srcdir)/'`lib1947.c
-
-lib1947-lib1947.obj: lib1947.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1947_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1947-lib1947.obj -MD -MP -MF $(DEPDIR)/lib1947-lib1947.Tpo -c -o lib1947-lib1947.obj `if test -f 'lib1947.c'; then $(CYGPATH_W) 'lib1947.c'; else $(CYGPATH_W) '$(srcdir)/lib1947.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1947-lib1947.Tpo $(DEPDIR)/lib1947-lib1947.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1947.c' object='lib1947-lib1947.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1947_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1947-lib1947.obj `if test -f 'lib1947.c'; then $(CYGPATH_W) 'lib1947.c'; else $(CYGPATH_W) '$(srcdir)/lib1947.c'; fi`
-
-../../lib/lib1947-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1947_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1947-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1947-timediff.Tpo -c -o ../../lib/lib1947-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1947-timediff.Tpo ../../lib/$(DEPDIR)/lib1947-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1947-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1947_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1947-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1947-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1947_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1947-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1947-timediff.Tpo -c -o ../../lib/lib1947-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1947-timediff.Tpo ../../lib/$(DEPDIR)/lib1947-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1947-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1947_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1947-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1947-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1947_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1947-first.o -MD -MP -MF $(DEPDIR)/lib1947-first.Tpo -c -o lib1947-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1947-first.Tpo $(DEPDIR)/lib1947-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1947-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1947_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1947-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1947-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1947_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1947-first.obj -MD -MP -MF $(DEPDIR)/lib1947-first.Tpo -c -o lib1947-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1947-first.Tpo $(DEPDIR)/lib1947-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1947-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1947_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1947-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1948-lib1948.o: lib1948.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1948_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1948-lib1948.o -MD -MP -MF $(DEPDIR)/lib1948-lib1948.Tpo -c -o lib1948-lib1948.o `test -f 'lib1948.c' || echo '$(srcdir)/'`lib1948.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1948-lib1948.Tpo $(DEPDIR)/lib1948-lib1948.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1948.c' object='lib1948-lib1948.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1948_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1948-lib1948.o `test -f 'lib1948.c' || echo '$(srcdir)/'`lib1948.c
-
-lib1948-lib1948.obj: lib1948.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1948_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1948-lib1948.obj -MD -MP -MF $(DEPDIR)/lib1948-lib1948.Tpo -c -o lib1948-lib1948.obj `if test -f 'lib1948.c'; then $(CYGPATH_W) 'lib1948.c'; else $(CYGPATH_W) '$(srcdir)/lib1948.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1948-lib1948.Tpo $(DEPDIR)/lib1948-lib1948.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1948.c' object='lib1948-lib1948.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1948_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1948-lib1948.obj `if test -f 'lib1948.c'; then $(CYGPATH_W) 'lib1948.c'; else $(CYGPATH_W) '$(srcdir)/lib1948.c'; fi`
-
-../../lib/lib1948-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1948_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1948-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1948-timediff.Tpo -c -o ../../lib/lib1948-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1948-timediff.Tpo ../../lib/$(DEPDIR)/lib1948-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1948-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1948_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1948-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1948-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1948_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1948-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1948-timediff.Tpo -c -o ../../lib/lib1948-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1948-timediff.Tpo ../../lib/$(DEPDIR)/lib1948-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1948-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1948_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1948-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1948-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1948_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1948-first.o -MD -MP -MF $(DEPDIR)/lib1948-first.Tpo -c -o lib1948-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1948-first.Tpo $(DEPDIR)/lib1948-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1948-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1948_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1948-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1948-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1948_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1948-first.obj -MD -MP -MF $(DEPDIR)/lib1948-first.Tpo -c -o lib1948-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1948-first.Tpo $(DEPDIR)/lib1948-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1948-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1948_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1948-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1955-lib1955.o: lib1955.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1955_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1955-lib1955.o -MD -MP -MF $(DEPDIR)/lib1955-lib1955.Tpo -c -o lib1955-lib1955.o `test -f 'lib1955.c' || echo '$(srcdir)/'`lib1955.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1955-lib1955.Tpo $(DEPDIR)/lib1955-lib1955.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1955.c' object='lib1955-lib1955.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1955_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1955-lib1955.o `test -f 'lib1955.c' || echo '$(srcdir)/'`lib1955.c
-
-lib1955-lib1955.obj: lib1955.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1955_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1955-lib1955.obj -MD -MP -MF $(DEPDIR)/lib1955-lib1955.Tpo -c -o lib1955-lib1955.obj `if test -f 'lib1955.c'; then $(CYGPATH_W) 'lib1955.c'; else $(CYGPATH_W) '$(srcdir)/lib1955.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1955-lib1955.Tpo $(DEPDIR)/lib1955-lib1955.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib1955.c' object='lib1955-lib1955.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1955_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1955-lib1955.obj `if test -f 'lib1955.c'; then $(CYGPATH_W) 'lib1955.c'; else $(CYGPATH_W) '$(srcdir)/lib1955.c'; fi`
-
-../../lib/lib1955-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1955_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1955-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1955-timediff.Tpo -c -o ../../lib/lib1955-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1955-timediff.Tpo ../../lib/$(DEPDIR)/lib1955-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1955-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1955_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1955-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib1955-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1955_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1955-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1955-timediff.Tpo -c -o ../../lib/lib1955-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1955-timediff.Tpo ../../lib/$(DEPDIR)/lib1955-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib1955-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1955_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1955-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib1955-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1955_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1955-first.o -MD -MP -MF $(DEPDIR)/lib1955-first.Tpo -c -o lib1955-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1955-first.Tpo $(DEPDIR)/lib1955-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1955-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1955_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1955-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib1955-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1955_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1955-first.obj -MD -MP -MF $(DEPDIR)/lib1955-first.Tpo -c -o lib1955-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1955-first.Tpo $(DEPDIR)/lib1955-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib1955-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1955_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1955-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib1955-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1955_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1955-testutil.o -MD -MP -MF $(DEPDIR)/lib1955-testutil.Tpo -c -o lib1955-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1955-testutil.Tpo $(DEPDIR)/lib1955-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1955-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1955_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1955-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib1955-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1955_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1955-testutil.obj -MD -MP -MF $(DEPDIR)/lib1955-testutil.Tpo -c -o lib1955-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib1955-testutil.Tpo $(DEPDIR)/lib1955-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib1955-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1955_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1955-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib1955-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1955_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1955-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1955-warnless.Tpo -c -o ../../lib/lib1955-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1955-warnless.Tpo ../../lib/$(DEPDIR)/lib1955-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1955-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1955_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1955-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib1955-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1955_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1955-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1955-warnless.Tpo -c -o ../../lib/lib1955-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1955-warnless.Tpo ../../lib/$(DEPDIR)/lib1955-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1955-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1955_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1955-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib3010-lib3010.o: lib3010.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3010_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib3010-lib3010.o -MD -MP -MF $(DEPDIR)/lib3010-lib3010.Tpo -c -o lib3010-lib3010.o `test -f 'lib3010.c' || echo '$(srcdir)/'`lib3010.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib3010-lib3010.Tpo $(DEPDIR)/lib3010-lib3010.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib3010.c' object='lib3010-lib3010.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3010_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib3010-lib3010.o `test -f 'lib3010.c' || echo '$(srcdir)/'`lib3010.c
-
-lib3010-lib3010.obj: lib3010.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3010_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib3010-lib3010.obj -MD -MP -MF $(DEPDIR)/lib3010-lib3010.Tpo -c -o lib3010-lib3010.obj `if test -f 'lib3010.c'; then $(CYGPATH_W) 'lib3010.c'; else $(CYGPATH_W) '$(srcdir)/lib3010.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib3010-lib3010.Tpo $(DEPDIR)/lib3010-lib3010.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib3010.c' object='lib3010-lib3010.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3010_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib3010-lib3010.obj `if test -f 'lib3010.c'; then $(CYGPATH_W) 'lib3010.c'; else $(CYGPATH_W) '$(srcdir)/lib3010.c'; fi`
-
-../../lib/lib3010-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3010_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib3010-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib3010-timediff.Tpo -c -o ../../lib/lib3010-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib3010-timediff.Tpo ../../lib/$(DEPDIR)/lib3010-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib3010-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3010_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib3010-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib3010-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3010_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib3010-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib3010-timediff.Tpo -c -o ../../lib/lib3010-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib3010-timediff.Tpo ../../lib/$(DEPDIR)/lib3010-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib3010-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3010_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib3010-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib3010-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3010_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib3010-first.o -MD -MP -MF $(DEPDIR)/lib3010-first.Tpo -c -o lib3010-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib3010-first.Tpo $(DEPDIR)/lib3010-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib3010-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3010_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib3010-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib3010-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3010_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib3010-first.obj -MD -MP -MF $(DEPDIR)/lib3010-first.Tpo -c -o lib3010-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib3010-first.Tpo $(DEPDIR)/lib3010-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib3010-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3010_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib3010-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib3010-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3010_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib3010-testutil.o -MD -MP -MF $(DEPDIR)/lib3010-testutil.Tpo -c -o lib3010-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib3010-testutil.Tpo $(DEPDIR)/lib3010-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib3010-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3010_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib3010-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib3010-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3010_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib3010-testutil.obj -MD -MP -MF $(DEPDIR)/lib3010-testutil.Tpo -c -o lib3010-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib3010-testutil.Tpo $(DEPDIR)/lib3010-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib3010-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3010_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib3010-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib3010-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3010_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib3010-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib3010-warnless.Tpo -c -o ../../lib/lib3010-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib3010-warnless.Tpo ../../lib/$(DEPDIR)/lib3010-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib3010-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3010_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib3010-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib3010-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3010_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib3010-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib3010-warnless.Tpo -c -o ../../lib/lib3010-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib3010-warnless.Tpo ../../lib/$(DEPDIR)/lib3010-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib3010-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3010_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib3010-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib3025-lib3025.o: lib3025.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3025_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib3025-lib3025.o -MD -MP -MF $(DEPDIR)/lib3025-lib3025.Tpo -c -o lib3025-lib3025.o `test -f 'lib3025.c' || echo '$(srcdir)/'`lib3025.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib3025-lib3025.Tpo $(DEPDIR)/lib3025-lib3025.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib3025.c' object='lib3025-lib3025.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3025_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib3025-lib3025.o `test -f 'lib3025.c' || echo '$(srcdir)/'`lib3025.c
-
-lib3025-lib3025.obj: lib3025.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3025_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib3025-lib3025.obj -MD -MP -MF $(DEPDIR)/lib3025-lib3025.Tpo -c -o lib3025-lib3025.obj `if test -f 'lib3025.c'; then $(CYGPATH_W) 'lib3025.c'; else $(CYGPATH_W) '$(srcdir)/lib3025.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib3025-lib3025.Tpo $(DEPDIR)/lib3025-lib3025.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib3025.c' object='lib3025-lib3025.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3025_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib3025-lib3025.obj `if test -f 'lib3025.c'; then $(CYGPATH_W) 'lib3025.c'; else $(CYGPATH_W) '$(srcdir)/lib3025.c'; fi`
-
-../../lib/lib3025-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3025_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib3025-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib3025-timediff.Tpo -c -o ../../lib/lib3025-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib3025-timediff.Tpo ../../lib/$(DEPDIR)/lib3025-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib3025-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3025_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib3025-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib3025-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3025_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib3025-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib3025-timediff.Tpo -c -o ../../lib/lib3025-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib3025-timediff.Tpo ../../lib/$(DEPDIR)/lib3025-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib3025-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3025_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib3025-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib3025-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3025_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib3025-first.o -MD -MP -MF $(DEPDIR)/lib3025-first.Tpo -c -o lib3025-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib3025-first.Tpo $(DEPDIR)/lib3025-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib3025-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3025_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib3025-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib3025-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3025_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib3025-first.obj -MD -MP -MF $(DEPDIR)/lib3025-first.Tpo -c -o lib3025-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib3025-first.Tpo $(DEPDIR)/lib3025-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib3025-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3025_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib3025-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib3025-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3025_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib3025-testutil.o -MD -MP -MF $(DEPDIR)/lib3025-testutil.Tpo -c -o lib3025-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib3025-testutil.Tpo $(DEPDIR)/lib3025-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib3025-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3025_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib3025-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib3025-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3025_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib3025-testutil.obj -MD -MP -MF $(DEPDIR)/lib3025-testutil.Tpo -c -o lib3025-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib3025-testutil.Tpo $(DEPDIR)/lib3025-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib3025-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3025_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib3025-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib3025-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3025_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib3025-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib3025-warnless.Tpo -c -o ../../lib/lib3025-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib3025-warnless.Tpo ../../lib/$(DEPDIR)/lib3025-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib3025-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3025_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib3025-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib3025-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3025_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib3025-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib3025-warnless.Tpo -c -o ../../lib/lib3025-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib3025-warnless.Tpo ../../lib/$(DEPDIR)/lib3025-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib3025-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3025_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib3025-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib3026-lib3026.o: lib3026.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3026_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib3026-lib3026.o -MD -MP -MF $(DEPDIR)/lib3026-lib3026.Tpo -c -o lib3026-lib3026.o `test -f 'lib3026.c' || echo '$(srcdir)/'`lib3026.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib3026-lib3026.Tpo $(DEPDIR)/lib3026-lib3026.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib3026.c' object='lib3026-lib3026.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3026_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib3026-lib3026.o `test -f 'lib3026.c' || echo '$(srcdir)/'`lib3026.c
-
-lib3026-lib3026.obj: lib3026.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3026_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib3026-lib3026.obj -MD -MP -MF $(DEPDIR)/lib3026-lib3026.Tpo -c -o lib3026-lib3026.obj `if test -f 'lib3026.c'; then $(CYGPATH_W) 'lib3026.c'; else $(CYGPATH_W) '$(srcdir)/lib3026.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib3026-lib3026.Tpo $(DEPDIR)/lib3026-lib3026.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib3026.c' object='lib3026-lib3026.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3026_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib3026-lib3026.obj `if test -f 'lib3026.c'; then $(CYGPATH_W) 'lib3026.c'; else $(CYGPATH_W) '$(srcdir)/lib3026.c'; fi`
-
-../../lib/lib3026-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3026_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib3026-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib3026-timediff.Tpo -c -o ../../lib/lib3026-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib3026-timediff.Tpo ../../lib/$(DEPDIR)/lib3026-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib3026-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3026_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib3026-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib3026-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3026_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib3026-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib3026-timediff.Tpo -c -o ../../lib/lib3026-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib3026-timediff.Tpo ../../lib/$(DEPDIR)/lib3026-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib3026-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3026_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib3026-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib3026-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3026_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib3026-first.o -MD -MP -MF $(DEPDIR)/lib3026-first.Tpo -c -o lib3026-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib3026-first.Tpo $(DEPDIR)/lib3026-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib3026-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3026_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib3026-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib3026-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3026_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib3026-first.obj -MD -MP -MF $(DEPDIR)/lib3026-first.Tpo -c -o lib3026-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib3026-first.Tpo $(DEPDIR)/lib3026-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib3026-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3026_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib3026-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib3026-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3026_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib3026-testutil.o -MD -MP -MF $(DEPDIR)/lib3026-testutil.Tpo -c -o lib3026-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib3026-testutil.Tpo $(DEPDIR)/lib3026-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib3026-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3026_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib3026-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib3026-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3026_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib3026-testutil.obj -MD -MP -MF $(DEPDIR)/lib3026-testutil.Tpo -c -o lib3026-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib3026-testutil.Tpo $(DEPDIR)/lib3026-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib3026-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3026_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib3026-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib3026-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3026_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib3026-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib3026-warnless.Tpo -c -o ../../lib/lib3026-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib3026-warnless.Tpo ../../lib/$(DEPDIR)/lib3026-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib3026-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3026_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib3026-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib3026-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3026_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib3026-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib3026-warnless.Tpo -c -o ../../lib/lib3026-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib3026-warnless.Tpo ../../lib/$(DEPDIR)/lib3026-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib3026-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3026_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib3026-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib3027-lib3027.o: lib3027.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3027_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib3027-lib3027.o -MD -MP -MF $(DEPDIR)/lib3027-lib3027.Tpo -c -o lib3027-lib3027.o `test -f 'lib3027.c' || echo '$(srcdir)/'`lib3027.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib3027-lib3027.Tpo $(DEPDIR)/lib3027-lib3027.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib3027.c' object='lib3027-lib3027.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3027_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib3027-lib3027.o `test -f 'lib3027.c' || echo '$(srcdir)/'`lib3027.c
-
-lib3027-lib3027.obj: lib3027.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3027_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib3027-lib3027.obj -MD -MP -MF $(DEPDIR)/lib3027-lib3027.Tpo -c -o lib3027-lib3027.obj `if test -f 'lib3027.c'; then $(CYGPATH_W) 'lib3027.c'; else $(CYGPATH_W) '$(srcdir)/lib3027.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib3027-lib3027.Tpo $(DEPDIR)/lib3027-lib3027.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib3027.c' object='lib3027-lib3027.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3027_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib3027-lib3027.obj `if test -f 'lib3027.c'; then $(CYGPATH_W) 'lib3027.c'; else $(CYGPATH_W) '$(srcdir)/lib3027.c'; fi`
-
-../../lib/lib3027-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3027_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib3027-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib3027-timediff.Tpo -c -o ../../lib/lib3027-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib3027-timediff.Tpo ../../lib/$(DEPDIR)/lib3027-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib3027-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3027_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib3027-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib3027-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3027_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib3027-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib3027-timediff.Tpo -c -o ../../lib/lib3027-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib3027-timediff.Tpo ../../lib/$(DEPDIR)/lib3027-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib3027-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3027_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib3027-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib3027-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3027_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib3027-first.o -MD -MP -MF $(DEPDIR)/lib3027-first.Tpo -c -o lib3027-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib3027-first.Tpo $(DEPDIR)/lib3027-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib3027-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3027_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib3027-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib3027-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3027_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib3027-first.obj -MD -MP -MF $(DEPDIR)/lib3027-first.Tpo -c -o lib3027-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib3027-first.Tpo $(DEPDIR)/lib3027-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib3027-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3027_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib3027-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib3027-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3027_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib3027-testutil.o -MD -MP -MF $(DEPDIR)/lib3027-testutil.Tpo -c -o lib3027-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib3027-testutil.Tpo $(DEPDIR)/lib3027-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib3027-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3027_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib3027-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib3027-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3027_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib3027-testutil.obj -MD -MP -MF $(DEPDIR)/lib3027-testutil.Tpo -c -o lib3027-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib3027-testutil.Tpo $(DEPDIR)/lib3027-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib3027-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3027_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib3027-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib3027-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3027_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib3027-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib3027-warnless.Tpo -c -o ../../lib/lib3027-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib3027-warnless.Tpo ../../lib/$(DEPDIR)/lib3027-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib3027-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3027_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib3027-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib3027-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3027_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib3027-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib3027-warnless.Tpo -c -o ../../lib/lib3027-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib3027-warnless.Tpo ../../lib/$(DEPDIR)/lib3027-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib3027-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib3027_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib3027-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib500-lib500.o: lib500.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib500-lib500.o -MD -MP -MF $(DEPDIR)/lib500-lib500.Tpo -c -o lib500-lib500.o `test -f 'lib500.c' || echo '$(srcdir)/'`lib500.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib500-lib500.Tpo $(DEPDIR)/lib500-lib500.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib500.c' object='lib500-lib500.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib500-lib500.o `test -f 'lib500.c' || echo '$(srcdir)/'`lib500.c
-
-lib500-lib500.obj: lib500.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib500-lib500.obj -MD -MP -MF $(DEPDIR)/lib500-lib500.Tpo -c -o lib500-lib500.obj `if test -f 'lib500.c'; then $(CYGPATH_W) 'lib500.c'; else $(CYGPATH_W) '$(srcdir)/lib500.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib500-lib500.Tpo $(DEPDIR)/lib500-lib500.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib500.c' object='lib500-lib500.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib500-lib500.obj `if test -f 'lib500.c'; then $(CYGPATH_W) 'lib500.c'; else $(CYGPATH_W) '$(srcdir)/lib500.c'; fi`
-
-../../lib/lib500-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib500-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib500-timediff.Tpo -c -o ../../lib/lib500-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib500-timediff.Tpo ../../lib/$(DEPDIR)/lib500-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib500-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib500-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib500-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib500-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib500-timediff.Tpo -c -o ../../lib/lib500-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib500-timediff.Tpo ../../lib/$(DEPDIR)/lib500-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib500-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib500-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib500-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib500-first.o -MD -MP -MF $(DEPDIR)/lib500-first.Tpo -c -o lib500-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib500-first.Tpo $(DEPDIR)/lib500-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib500-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib500-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib500-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib500-first.obj -MD -MP -MF $(DEPDIR)/lib500-first.Tpo -c -o lib500-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib500-first.Tpo $(DEPDIR)/lib500-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib500-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib500-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib500-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib500-testutil.o -MD -MP -MF $(DEPDIR)/lib500-testutil.Tpo -c -o lib500-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib500-testutil.Tpo $(DEPDIR)/lib500-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib500-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib500-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib500-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib500-testutil.obj -MD -MP -MF $(DEPDIR)/lib500-testutil.Tpo -c -o lib500-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib500-testutil.Tpo $(DEPDIR)/lib500-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib500-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib500-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-lib500-testtrace.o: testtrace.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib500-testtrace.o -MD -MP -MF $(DEPDIR)/lib500-testtrace.Tpo -c -o lib500-testtrace.o `test -f 'testtrace.c' || echo '$(srcdir)/'`testtrace.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib500-testtrace.Tpo $(DEPDIR)/lib500-testtrace.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testtrace.c' object='lib500-testtrace.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib500-testtrace.o `test -f 'testtrace.c' || echo '$(srcdir)/'`testtrace.c
-
-lib500-testtrace.obj: testtrace.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib500-testtrace.obj -MD -MP -MF $(DEPDIR)/lib500-testtrace.Tpo -c -o lib500-testtrace.obj `if test -f 'testtrace.c'; then $(CYGPATH_W) 'testtrace.c'; else $(CYGPATH_W) '$(srcdir)/testtrace.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib500-testtrace.Tpo $(DEPDIR)/lib500-testtrace.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testtrace.c' object='lib500-testtrace.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib500-testtrace.obj `if test -f 'testtrace.c'; then $(CYGPATH_W) 'testtrace.c'; else $(CYGPATH_W) '$(srcdir)/testtrace.c'; fi`
-
-../../lib/lib500-curl_multibyte.o: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib500-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/lib500-curl_multibyte.Tpo -c -o ../../lib/lib500-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib500-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib500-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib500-curl_multibyte.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib500-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-
-../../lib/lib500-curl_multibyte.obj: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib500-curl_multibyte.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib500-curl_multibyte.Tpo -c -o ../../lib/lib500-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib500-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib500-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib500-curl_multibyte.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib500_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib500-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-
-lib501-lib501.o: lib501.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib501-lib501.o -MD -MP -MF $(DEPDIR)/lib501-lib501.Tpo -c -o lib501-lib501.o `test -f 'lib501.c' || echo '$(srcdir)/'`lib501.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib501-lib501.Tpo $(DEPDIR)/lib501-lib501.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib501.c' object='lib501-lib501.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib501-lib501.o `test -f 'lib501.c' || echo '$(srcdir)/'`lib501.c
-
-lib501-lib501.obj: lib501.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib501-lib501.obj -MD -MP -MF $(DEPDIR)/lib501-lib501.Tpo -c -o lib501-lib501.obj `if test -f 'lib501.c'; then $(CYGPATH_W) 'lib501.c'; else $(CYGPATH_W) '$(srcdir)/lib501.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib501-lib501.Tpo $(DEPDIR)/lib501-lib501.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib501.c' object='lib501-lib501.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib501-lib501.obj `if test -f 'lib501.c'; then $(CYGPATH_W) 'lib501.c'; else $(CYGPATH_W) '$(srcdir)/lib501.c'; fi`
-
-../../lib/lib501-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib501-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib501-timediff.Tpo -c -o ../../lib/lib501-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib501-timediff.Tpo ../../lib/$(DEPDIR)/lib501-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib501-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib501-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib501-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib501-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib501-timediff.Tpo -c -o ../../lib/lib501-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib501-timediff.Tpo ../../lib/$(DEPDIR)/lib501-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib501-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib501-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib501-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib501-first.o -MD -MP -MF $(DEPDIR)/lib501-first.Tpo -c -o lib501-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib501-first.Tpo $(DEPDIR)/lib501-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib501-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib501-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib501-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib501-first.obj -MD -MP -MF $(DEPDIR)/lib501-first.Tpo -c -o lib501-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib501-first.Tpo $(DEPDIR)/lib501-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib501-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib501_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib501-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib502-lib502.o: lib502.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib502_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib502-lib502.o -MD -MP -MF $(DEPDIR)/lib502-lib502.Tpo -c -o lib502-lib502.o `test -f 'lib502.c' || echo '$(srcdir)/'`lib502.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib502-lib502.Tpo $(DEPDIR)/lib502-lib502.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib502.c' object='lib502-lib502.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib502_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib502-lib502.o `test -f 'lib502.c' || echo '$(srcdir)/'`lib502.c
-
-lib502-lib502.obj: lib502.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib502_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib502-lib502.obj -MD -MP -MF $(DEPDIR)/lib502-lib502.Tpo -c -o lib502-lib502.obj `if test -f 'lib502.c'; then $(CYGPATH_W) 'lib502.c'; else $(CYGPATH_W) '$(srcdir)/lib502.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib502-lib502.Tpo $(DEPDIR)/lib502-lib502.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib502.c' object='lib502-lib502.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib502_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib502-lib502.obj `if test -f 'lib502.c'; then $(CYGPATH_W) 'lib502.c'; else $(CYGPATH_W) '$(srcdir)/lib502.c'; fi`
-
-../../lib/lib502-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib502_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib502-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib502-timediff.Tpo -c -o ../../lib/lib502-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib502-timediff.Tpo ../../lib/$(DEPDIR)/lib502-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib502-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib502_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib502-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib502-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib502_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib502-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib502-timediff.Tpo -c -o ../../lib/lib502-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib502-timediff.Tpo ../../lib/$(DEPDIR)/lib502-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib502-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib502_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib502-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib502-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib502_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib502-first.o -MD -MP -MF $(DEPDIR)/lib502-first.Tpo -c -o lib502-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib502-first.Tpo $(DEPDIR)/lib502-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib502-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib502_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib502-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib502-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib502_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib502-first.obj -MD -MP -MF $(DEPDIR)/lib502-first.Tpo -c -o lib502-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib502-first.Tpo $(DEPDIR)/lib502-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib502-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib502_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib502-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib502-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib502_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib502-testutil.o -MD -MP -MF $(DEPDIR)/lib502-testutil.Tpo -c -o lib502-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib502-testutil.Tpo $(DEPDIR)/lib502-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib502-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib502_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib502-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib502-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib502_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib502-testutil.obj -MD -MP -MF $(DEPDIR)/lib502-testutil.Tpo -c -o lib502-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib502-testutil.Tpo $(DEPDIR)/lib502-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib502-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib502_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib502-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib502-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib502_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib502-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib502-warnless.Tpo -c -o ../../lib/lib502-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib502-warnless.Tpo ../../lib/$(DEPDIR)/lib502-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib502-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib502_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib502-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib502-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib502_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib502-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib502-warnless.Tpo -c -o ../../lib/lib502-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib502-warnless.Tpo ../../lib/$(DEPDIR)/lib502-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib502-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib502_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib502-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib503-lib503.o: lib503.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib503_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib503-lib503.o -MD -MP -MF $(DEPDIR)/lib503-lib503.Tpo -c -o lib503-lib503.o `test -f 'lib503.c' || echo '$(srcdir)/'`lib503.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib503-lib503.Tpo $(DEPDIR)/lib503-lib503.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib503.c' object='lib503-lib503.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib503_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib503-lib503.o `test -f 'lib503.c' || echo '$(srcdir)/'`lib503.c
-
-lib503-lib503.obj: lib503.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib503_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib503-lib503.obj -MD -MP -MF $(DEPDIR)/lib503-lib503.Tpo -c -o lib503-lib503.obj `if test -f 'lib503.c'; then $(CYGPATH_W) 'lib503.c'; else $(CYGPATH_W) '$(srcdir)/lib503.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib503-lib503.Tpo $(DEPDIR)/lib503-lib503.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib503.c' object='lib503-lib503.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib503_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib503-lib503.obj `if test -f 'lib503.c'; then $(CYGPATH_W) 'lib503.c'; else $(CYGPATH_W) '$(srcdir)/lib503.c'; fi`
-
-../../lib/lib503-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib503_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib503-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib503-timediff.Tpo -c -o ../../lib/lib503-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib503-timediff.Tpo ../../lib/$(DEPDIR)/lib503-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib503-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib503_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib503-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib503-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib503_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib503-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib503-timediff.Tpo -c -o ../../lib/lib503-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib503-timediff.Tpo ../../lib/$(DEPDIR)/lib503-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib503-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib503_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib503-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib503-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib503_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib503-first.o -MD -MP -MF $(DEPDIR)/lib503-first.Tpo -c -o lib503-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib503-first.Tpo $(DEPDIR)/lib503-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib503-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib503_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib503-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib503-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib503_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib503-first.obj -MD -MP -MF $(DEPDIR)/lib503-first.Tpo -c -o lib503-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib503-first.Tpo $(DEPDIR)/lib503-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib503-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib503_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib503-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib503-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib503_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib503-testutil.o -MD -MP -MF $(DEPDIR)/lib503-testutil.Tpo -c -o lib503-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib503-testutil.Tpo $(DEPDIR)/lib503-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib503-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib503_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib503-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib503-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib503_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib503-testutil.obj -MD -MP -MF $(DEPDIR)/lib503-testutil.Tpo -c -o lib503-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib503-testutil.Tpo $(DEPDIR)/lib503-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib503-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib503_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib503-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib503-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib503_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib503-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib503-warnless.Tpo -c -o ../../lib/lib503-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib503-warnless.Tpo ../../lib/$(DEPDIR)/lib503-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib503-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib503_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib503-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib503-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib503_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib503-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib503-warnless.Tpo -c -o ../../lib/lib503-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib503-warnless.Tpo ../../lib/$(DEPDIR)/lib503-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib503-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib503_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib503-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib504-lib504.o: lib504.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib504_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib504-lib504.o -MD -MP -MF $(DEPDIR)/lib504-lib504.Tpo -c -o lib504-lib504.o `test -f 'lib504.c' || echo '$(srcdir)/'`lib504.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib504-lib504.Tpo $(DEPDIR)/lib504-lib504.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib504.c' object='lib504-lib504.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib504_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib504-lib504.o `test -f 'lib504.c' || echo '$(srcdir)/'`lib504.c
-
-lib504-lib504.obj: lib504.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib504_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib504-lib504.obj -MD -MP -MF $(DEPDIR)/lib504-lib504.Tpo -c -o lib504-lib504.obj `if test -f 'lib504.c'; then $(CYGPATH_W) 'lib504.c'; else $(CYGPATH_W) '$(srcdir)/lib504.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib504-lib504.Tpo $(DEPDIR)/lib504-lib504.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib504.c' object='lib504-lib504.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib504_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib504-lib504.obj `if test -f 'lib504.c'; then $(CYGPATH_W) 'lib504.c'; else $(CYGPATH_W) '$(srcdir)/lib504.c'; fi`
-
-../../lib/lib504-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib504_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib504-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib504-timediff.Tpo -c -o ../../lib/lib504-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib504-timediff.Tpo ../../lib/$(DEPDIR)/lib504-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib504-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib504_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib504-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib504-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib504_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib504-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib504-timediff.Tpo -c -o ../../lib/lib504-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib504-timediff.Tpo ../../lib/$(DEPDIR)/lib504-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib504-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib504_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib504-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib504-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib504_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib504-first.o -MD -MP -MF $(DEPDIR)/lib504-first.Tpo -c -o lib504-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib504-first.Tpo $(DEPDIR)/lib504-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib504-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib504_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib504-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib504-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib504_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib504-first.obj -MD -MP -MF $(DEPDIR)/lib504-first.Tpo -c -o lib504-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib504-first.Tpo $(DEPDIR)/lib504-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib504-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib504_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib504-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib504-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib504_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib504-testutil.o -MD -MP -MF $(DEPDIR)/lib504-testutil.Tpo -c -o lib504-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib504-testutil.Tpo $(DEPDIR)/lib504-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib504-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib504_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib504-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib504-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib504_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib504-testutil.obj -MD -MP -MF $(DEPDIR)/lib504-testutil.Tpo -c -o lib504-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib504-testutil.Tpo $(DEPDIR)/lib504-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib504-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib504_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib504-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib504-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib504_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib504-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib504-warnless.Tpo -c -o ../../lib/lib504-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib504-warnless.Tpo ../../lib/$(DEPDIR)/lib504-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib504-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib504_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib504-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib504-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib504_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib504-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib504-warnless.Tpo -c -o ../../lib/lib504-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib504-warnless.Tpo ../../lib/$(DEPDIR)/lib504-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib504-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib504_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib504-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib505-lib505.o: lib505.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib505_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib505-lib505.o -MD -MP -MF $(DEPDIR)/lib505-lib505.Tpo -c -o lib505-lib505.o `test -f 'lib505.c' || echo '$(srcdir)/'`lib505.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib505-lib505.Tpo $(DEPDIR)/lib505-lib505.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib505.c' object='lib505-lib505.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib505_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib505-lib505.o `test -f 'lib505.c' || echo '$(srcdir)/'`lib505.c
-
-lib505-lib505.obj: lib505.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib505_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib505-lib505.obj -MD -MP -MF $(DEPDIR)/lib505-lib505.Tpo -c -o lib505-lib505.obj `if test -f 'lib505.c'; then $(CYGPATH_W) 'lib505.c'; else $(CYGPATH_W) '$(srcdir)/lib505.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib505-lib505.Tpo $(DEPDIR)/lib505-lib505.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib505.c' object='lib505-lib505.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib505_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib505-lib505.obj `if test -f 'lib505.c'; then $(CYGPATH_W) 'lib505.c'; else $(CYGPATH_W) '$(srcdir)/lib505.c'; fi`
-
-../../lib/lib505-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib505_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib505-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib505-timediff.Tpo -c -o ../../lib/lib505-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib505-timediff.Tpo ../../lib/$(DEPDIR)/lib505-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib505-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib505_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib505-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib505-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib505_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib505-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib505-timediff.Tpo -c -o ../../lib/lib505-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib505-timediff.Tpo ../../lib/$(DEPDIR)/lib505-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib505-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib505_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib505-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib505-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib505_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib505-first.o -MD -MP -MF $(DEPDIR)/lib505-first.Tpo -c -o lib505-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib505-first.Tpo $(DEPDIR)/lib505-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib505-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib505_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib505-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib505-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib505_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib505-first.obj -MD -MP -MF $(DEPDIR)/lib505-first.Tpo -c -o lib505-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib505-first.Tpo $(DEPDIR)/lib505-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib505-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib505_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib505-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-../../lib/lib505-curl_multibyte.o: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib505_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib505-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/lib505-curl_multibyte.Tpo -c -o ../../lib/lib505-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib505-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib505-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib505-curl_multibyte.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib505_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib505-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-
-../../lib/lib505-curl_multibyte.obj: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib505_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib505-curl_multibyte.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib505-curl_multibyte.Tpo -c -o ../../lib/lib505-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib505-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib505-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib505-curl_multibyte.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib505_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib505-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-
-lib506-lib506.o: lib506.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib506-lib506.o -MD -MP -MF $(DEPDIR)/lib506-lib506.Tpo -c -o lib506-lib506.o `test -f 'lib506.c' || echo '$(srcdir)/'`lib506.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib506-lib506.Tpo $(DEPDIR)/lib506-lib506.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib506.c' object='lib506-lib506.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib506-lib506.o `test -f 'lib506.c' || echo '$(srcdir)/'`lib506.c
-
-lib506-lib506.obj: lib506.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib506-lib506.obj -MD -MP -MF $(DEPDIR)/lib506-lib506.Tpo -c -o lib506-lib506.obj `if test -f 'lib506.c'; then $(CYGPATH_W) 'lib506.c'; else $(CYGPATH_W) '$(srcdir)/lib506.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib506-lib506.Tpo $(DEPDIR)/lib506-lib506.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib506.c' object='lib506-lib506.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib506-lib506.obj `if test -f 'lib506.c'; then $(CYGPATH_W) 'lib506.c'; else $(CYGPATH_W) '$(srcdir)/lib506.c'; fi`
-
-../../lib/lib506-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib506-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib506-timediff.Tpo -c -o ../../lib/lib506-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib506-timediff.Tpo ../../lib/$(DEPDIR)/lib506-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib506-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib506-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib506-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib506-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib506-timediff.Tpo -c -o ../../lib/lib506-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib506-timediff.Tpo ../../lib/$(DEPDIR)/lib506-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib506-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib506-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib506-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib506-first.o -MD -MP -MF $(DEPDIR)/lib506-first.Tpo -c -o lib506-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib506-first.Tpo $(DEPDIR)/lib506-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib506-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib506-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib506-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib506-first.obj -MD -MP -MF $(DEPDIR)/lib506-first.Tpo -c -o lib506-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib506-first.Tpo $(DEPDIR)/lib506-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib506-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib506_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib506-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib507-lib507.o: lib507.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib507-lib507.o -MD -MP -MF $(DEPDIR)/lib507-lib507.Tpo -c -o lib507-lib507.o `test -f 'lib507.c' || echo '$(srcdir)/'`lib507.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib507-lib507.Tpo $(DEPDIR)/lib507-lib507.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib507.c' object='lib507-lib507.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib507-lib507.o `test -f 'lib507.c' || echo '$(srcdir)/'`lib507.c
-
-lib507-lib507.obj: lib507.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib507-lib507.obj -MD -MP -MF $(DEPDIR)/lib507-lib507.Tpo -c -o lib507-lib507.obj `if test -f 'lib507.c'; then $(CYGPATH_W) 'lib507.c'; else $(CYGPATH_W) '$(srcdir)/lib507.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib507-lib507.Tpo $(DEPDIR)/lib507-lib507.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib507.c' object='lib507-lib507.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib507-lib507.obj `if test -f 'lib507.c'; then $(CYGPATH_W) 'lib507.c'; else $(CYGPATH_W) '$(srcdir)/lib507.c'; fi`
-
-../../lib/lib507-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib507-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib507-timediff.Tpo -c -o ../../lib/lib507-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib507-timediff.Tpo ../../lib/$(DEPDIR)/lib507-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib507-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib507-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib507-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib507-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib507-timediff.Tpo -c -o ../../lib/lib507-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib507-timediff.Tpo ../../lib/$(DEPDIR)/lib507-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib507-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib507-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib507-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib507-first.o -MD -MP -MF $(DEPDIR)/lib507-first.Tpo -c -o lib507-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib507-first.Tpo $(DEPDIR)/lib507-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib507-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib507-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib507-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib507-first.obj -MD -MP -MF $(DEPDIR)/lib507-first.Tpo -c -o lib507-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib507-first.Tpo $(DEPDIR)/lib507-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib507-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib507-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib507-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib507-testutil.o -MD -MP -MF $(DEPDIR)/lib507-testutil.Tpo -c -o lib507-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib507-testutil.Tpo $(DEPDIR)/lib507-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib507-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib507-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib507-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib507-testutil.obj -MD -MP -MF $(DEPDIR)/lib507-testutil.Tpo -c -o lib507-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib507-testutil.Tpo $(DEPDIR)/lib507-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib507-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib507-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib507-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib507-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib507-warnless.Tpo -c -o ../../lib/lib507-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib507-warnless.Tpo ../../lib/$(DEPDIR)/lib507-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib507-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib507-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib507-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib507-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib507-warnless.Tpo -c -o ../../lib/lib507-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib507-warnless.Tpo ../../lib/$(DEPDIR)/lib507-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib507-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib507_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib507-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib508-lib508.o: lib508.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib508-lib508.o -MD -MP -MF $(DEPDIR)/lib508-lib508.Tpo -c -o lib508-lib508.o `test -f 'lib508.c' || echo '$(srcdir)/'`lib508.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib508-lib508.Tpo $(DEPDIR)/lib508-lib508.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib508.c' object='lib508-lib508.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib508-lib508.o `test -f 'lib508.c' || echo '$(srcdir)/'`lib508.c
-
-lib508-lib508.obj: lib508.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib508-lib508.obj -MD -MP -MF $(DEPDIR)/lib508-lib508.Tpo -c -o lib508-lib508.obj `if test -f 'lib508.c'; then $(CYGPATH_W) 'lib508.c'; else $(CYGPATH_W) '$(srcdir)/lib508.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib508-lib508.Tpo $(DEPDIR)/lib508-lib508.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib508.c' object='lib508-lib508.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib508-lib508.obj `if test -f 'lib508.c'; then $(CYGPATH_W) 'lib508.c'; else $(CYGPATH_W) '$(srcdir)/lib508.c'; fi`
-
-../../lib/lib508-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib508-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib508-timediff.Tpo -c -o ../../lib/lib508-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib508-timediff.Tpo ../../lib/$(DEPDIR)/lib508-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib508-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib508-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib508-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib508-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib508-timediff.Tpo -c -o ../../lib/lib508-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib508-timediff.Tpo ../../lib/$(DEPDIR)/lib508-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib508-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib508-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib508-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib508-first.o -MD -MP -MF $(DEPDIR)/lib508-first.Tpo -c -o lib508-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib508-first.Tpo $(DEPDIR)/lib508-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib508-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib508-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib508-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib508-first.obj -MD -MP -MF $(DEPDIR)/lib508-first.Tpo -c -o lib508-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib508-first.Tpo $(DEPDIR)/lib508-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib508-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib508_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib508-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib509-lib509.o: lib509.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib509-lib509.o -MD -MP -MF $(DEPDIR)/lib509-lib509.Tpo -c -o lib509-lib509.o `test -f 'lib509.c' || echo '$(srcdir)/'`lib509.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib509-lib509.Tpo $(DEPDIR)/lib509-lib509.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib509.c' object='lib509-lib509.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib509-lib509.o `test -f 'lib509.c' || echo '$(srcdir)/'`lib509.c
-
-lib509-lib509.obj: lib509.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib509-lib509.obj -MD -MP -MF $(DEPDIR)/lib509-lib509.Tpo -c -o lib509-lib509.obj `if test -f 'lib509.c'; then $(CYGPATH_W) 'lib509.c'; else $(CYGPATH_W) '$(srcdir)/lib509.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib509-lib509.Tpo $(DEPDIR)/lib509-lib509.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib509.c' object='lib509-lib509.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib509-lib509.obj `if test -f 'lib509.c'; then $(CYGPATH_W) 'lib509.c'; else $(CYGPATH_W) '$(srcdir)/lib509.c'; fi`
-
-../../lib/lib509-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib509-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib509-timediff.Tpo -c -o ../../lib/lib509-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib509-timediff.Tpo ../../lib/$(DEPDIR)/lib509-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib509-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib509-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib509-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib509-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib509-timediff.Tpo -c -o ../../lib/lib509-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib509-timediff.Tpo ../../lib/$(DEPDIR)/lib509-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib509-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib509-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib509-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib509-first.o -MD -MP -MF $(DEPDIR)/lib509-first.Tpo -c -o lib509-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib509-first.Tpo $(DEPDIR)/lib509-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib509-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib509-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib509-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib509-first.obj -MD -MP -MF $(DEPDIR)/lib509-first.Tpo -c -o lib509-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib509-first.Tpo $(DEPDIR)/lib509-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib509-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib509_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib509-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib510-lib510.o: lib510.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib510-lib510.o -MD -MP -MF $(DEPDIR)/lib510-lib510.Tpo -c -o lib510-lib510.o `test -f 'lib510.c' || echo '$(srcdir)/'`lib510.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib510-lib510.Tpo $(DEPDIR)/lib510-lib510.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib510.c' object='lib510-lib510.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib510-lib510.o `test -f 'lib510.c' || echo '$(srcdir)/'`lib510.c
-
-lib510-lib510.obj: lib510.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib510-lib510.obj -MD -MP -MF $(DEPDIR)/lib510-lib510.Tpo -c -o lib510-lib510.obj `if test -f 'lib510.c'; then $(CYGPATH_W) 'lib510.c'; else $(CYGPATH_W) '$(srcdir)/lib510.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib510-lib510.Tpo $(DEPDIR)/lib510-lib510.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib510.c' object='lib510-lib510.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib510-lib510.obj `if test -f 'lib510.c'; then $(CYGPATH_W) 'lib510.c'; else $(CYGPATH_W) '$(srcdir)/lib510.c'; fi`
-
-../../lib/lib510-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib510-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib510-timediff.Tpo -c -o ../../lib/lib510-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib510-timediff.Tpo ../../lib/$(DEPDIR)/lib510-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib510-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib510-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib510-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib510-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib510-timediff.Tpo -c -o ../../lib/lib510-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib510-timediff.Tpo ../../lib/$(DEPDIR)/lib510-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib510-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib510-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib510-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib510-first.o -MD -MP -MF $(DEPDIR)/lib510-first.Tpo -c -o lib510-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib510-first.Tpo $(DEPDIR)/lib510-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib510-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib510-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib510-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib510-first.obj -MD -MP -MF $(DEPDIR)/lib510-first.Tpo -c -o lib510-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib510-first.Tpo $(DEPDIR)/lib510-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib510-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib510_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib510-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib511-lib511.o: lib511.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib511-lib511.o -MD -MP -MF $(DEPDIR)/lib511-lib511.Tpo -c -o lib511-lib511.o `test -f 'lib511.c' || echo '$(srcdir)/'`lib511.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib511-lib511.Tpo $(DEPDIR)/lib511-lib511.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib511.c' object='lib511-lib511.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib511-lib511.o `test -f 'lib511.c' || echo '$(srcdir)/'`lib511.c
-
-lib511-lib511.obj: lib511.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib511-lib511.obj -MD -MP -MF $(DEPDIR)/lib511-lib511.Tpo -c -o lib511-lib511.obj `if test -f 'lib511.c'; then $(CYGPATH_W) 'lib511.c'; else $(CYGPATH_W) '$(srcdir)/lib511.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib511-lib511.Tpo $(DEPDIR)/lib511-lib511.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib511.c' object='lib511-lib511.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib511-lib511.obj `if test -f 'lib511.c'; then $(CYGPATH_W) 'lib511.c'; else $(CYGPATH_W) '$(srcdir)/lib511.c'; fi`
-
-../../lib/lib511-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib511-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib511-timediff.Tpo -c -o ../../lib/lib511-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib511-timediff.Tpo ../../lib/$(DEPDIR)/lib511-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib511-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib511-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib511-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib511-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib511-timediff.Tpo -c -o ../../lib/lib511-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib511-timediff.Tpo ../../lib/$(DEPDIR)/lib511-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib511-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib511-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib511-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib511-first.o -MD -MP -MF $(DEPDIR)/lib511-first.Tpo -c -o lib511-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib511-first.Tpo $(DEPDIR)/lib511-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib511-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib511-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib511-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib511-first.obj -MD -MP -MF $(DEPDIR)/lib511-first.Tpo -c -o lib511-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib511-first.Tpo $(DEPDIR)/lib511-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib511-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib511_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib511-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib512-lib512.o: lib512.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib512-lib512.o -MD -MP -MF $(DEPDIR)/lib512-lib512.Tpo -c -o lib512-lib512.o `test -f 'lib512.c' || echo '$(srcdir)/'`lib512.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib512-lib512.Tpo $(DEPDIR)/lib512-lib512.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib512.c' object='lib512-lib512.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib512-lib512.o `test -f 'lib512.c' || echo '$(srcdir)/'`lib512.c
-
-lib512-lib512.obj: lib512.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib512-lib512.obj -MD -MP -MF $(DEPDIR)/lib512-lib512.Tpo -c -o lib512-lib512.obj `if test -f 'lib512.c'; then $(CYGPATH_W) 'lib512.c'; else $(CYGPATH_W) '$(srcdir)/lib512.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib512-lib512.Tpo $(DEPDIR)/lib512-lib512.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib512.c' object='lib512-lib512.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib512-lib512.obj `if test -f 'lib512.c'; then $(CYGPATH_W) 'lib512.c'; else $(CYGPATH_W) '$(srcdir)/lib512.c'; fi`
-
-../../lib/lib512-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib512-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib512-timediff.Tpo -c -o ../../lib/lib512-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib512-timediff.Tpo ../../lib/$(DEPDIR)/lib512-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib512-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib512-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib512-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib512-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib512-timediff.Tpo -c -o ../../lib/lib512-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib512-timediff.Tpo ../../lib/$(DEPDIR)/lib512-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib512-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib512-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib512-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib512-first.o -MD -MP -MF $(DEPDIR)/lib512-first.Tpo -c -o lib512-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib512-first.Tpo $(DEPDIR)/lib512-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib512-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib512-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib512-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib512-first.obj -MD -MP -MF $(DEPDIR)/lib512-first.Tpo -c -o lib512-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib512-first.Tpo $(DEPDIR)/lib512-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib512-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib512_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib512-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib513-lib513.o: lib513.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib513-lib513.o -MD -MP -MF $(DEPDIR)/lib513-lib513.Tpo -c -o lib513-lib513.o `test -f 'lib513.c' || echo '$(srcdir)/'`lib513.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib513-lib513.Tpo $(DEPDIR)/lib513-lib513.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib513.c' object='lib513-lib513.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib513-lib513.o `test -f 'lib513.c' || echo '$(srcdir)/'`lib513.c
-
-lib513-lib513.obj: lib513.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib513-lib513.obj -MD -MP -MF $(DEPDIR)/lib513-lib513.Tpo -c -o lib513-lib513.obj `if test -f 'lib513.c'; then $(CYGPATH_W) 'lib513.c'; else $(CYGPATH_W) '$(srcdir)/lib513.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib513-lib513.Tpo $(DEPDIR)/lib513-lib513.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib513.c' object='lib513-lib513.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib513-lib513.obj `if test -f 'lib513.c'; then $(CYGPATH_W) 'lib513.c'; else $(CYGPATH_W) '$(srcdir)/lib513.c'; fi`
-
-../../lib/lib513-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib513-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib513-timediff.Tpo -c -o ../../lib/lib513-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib513-timediff.Tpo ../../lib/$(DEPDIR)/lib513-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib513-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib513-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib513-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib513-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib513-timediff.Tpo -c -o ../../lib/lib513-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib513-timediff.Tpo ../../lib/$(DEPDIR)/lib513-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib513-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib513-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib513-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib513-first.o -MD -MP -MF $(DEPDIR)/lib513-first.Tpo -c -o lib513-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib513-first.Tpo $(DEPDIR)/lib513-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib513-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib513-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib513-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib513-first.obj -MD -MP -MF $(DEPDIR)/lib513-first.Tpo -c -o lib513-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib513-first.Tpo $(DEPDIR)/lib513-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib513-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib513_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib513-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib514-lib514.o: lib514.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib514-lib514.o -MD -MP -MF $(DEPDIR)/lib514-lib514.Tpo -c -o lib514-lib514.o `test -f 'lib514.c' || echo '$(srcdir)/'`lib514.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib514-lib514.Tpo $(DEPDIR)/lib514-lib514.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib514.c' object='lib514-lib514.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib514-lib514.o `test -f 'lib514.c' || echo '$(srcdir)/'`lib514.c
-
-lib514-lib514.obj: lib514.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib514-lib514.obj -MD -MP -MF $(DEPDIR)/lib514-lib514.Tpo -c -o lib514-lib514.obj `if test -f 'lib514.c'; then $(CYGPATH_W) 'lib514.c'; else $(CYGPATH_W) '$(srcdir)/lib514.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib514-lib514.Tpo $(DEPDIR)/lib514-lib514.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib514.c' object='lib514-lib514.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib514-lib514.obj `if test -f 'lib514.c'; then $(CYGPATH_W) 'lib514.c'; else $(CYGPATH_W) '$(srcdir)/lib514.c'; fi`
-
-../../lib/lib514-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib514-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib514-timediff.Tpo -c -o ../../lib/lib514-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib514-timediff.Tpo ../../lib/$(DEPDIR)/lib514-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib514-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib514-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib514-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib514-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib514-timediff.Tpo -c -o ../../lib/lib514-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib514-timediff.Tpo ../../lib/$(DEPDIR)/lib514-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib514-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib514-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib514-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib514-first.o -MD -MP -MF $(DEPDIR)/lib514-first.Tpo -c -o lib514-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib514-first.Tpo $(DEPDIR)/lib514-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib514-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib514-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib514-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib514-first.obj -MD -MP -MF $(DEPDIR)/lib514-first.Tpo -c -o lib514-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib514-first.Tpo $(DEPDIR)/lib514-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib514-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib514_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib514-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib515-lib515.o: lib515.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib515-lib515.o -MD -MP -MF $(DEPDIR)/lib515-lib515.Tpo -c -o lib515-lib515.o `test -f 'lib515.c' || echo '$(srcdir)/'`lib515.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib515-lib515.Tpo $(DEPDIR)/lib515-lib515.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib515.c' object='lib515-lib515.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib515-lib515.o `test -f 'lib515.c' || echo '$(srcdir)/'`lib515.c
-
-lib515-lib515.obj: lib515.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib515-lib515.obj -MD -MP -MF $(DEPDIR)/lib515-lib515.Tpo -c -o lib515-lib515.obj `if test -f 'lib515.c'; then $(CYGPATH_W) 'lib515.c'; else $(CYGPATH_W) '$(srcdir)/lib515.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib515-lib515.Tpo $(DEPDIR)/lib515-lib515.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib515.c' object='lib515-lib515.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib515-lib515.obj `if test -f 'lib515.c'; then $(CYGPATH_W) 'lib515.c'; else $(CYGPATH_W) '$(srcdir)/lib515.c'; fi`
-
-../../lib/lib515-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib515-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib515-timediff.Tpo -c -o ../../lib/lib515-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib515-timediff.Tpo ../../lib/$(DEPDIR)/lib515-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib515-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib515-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib515-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib515-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib515-timediff.Tpo -c -o ../../lib/lib515-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib515-timediff.Tpo ../../lib/$(DEPDIR)/lib515-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib515-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib515-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib515-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib515-first.o -MD -MP -MF $(DEPDIR)/lib515-first.Tpo -c -o lib515-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib515-first.Tpo $(DEPDIR)/lib515-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib515-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib515-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib515-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib515-first.obj -MD -MP -MF $(DEPDIR)/lib515-first.Tpo -c -o lib515-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib515-first.Tpo $(DEPDIR)/lib515-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib515-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib515_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib515-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib516-lib516.o: lib516.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib516_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib516-lib516.o -MD -MP -MF $(DEPDIR)/lib516-lib516.Tpo -c -o lib516-lib516.o `test -f 'lib516.c' || echo '$(srcdir)/'`lib516.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib516-lib516.Tpo $(DEPDIR)/lib516-lib516.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib516.c' object='lib516-lib516.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib516_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib516-lib516.o `test -f 'lib516.c' || echo '$(srcdir)/'`lib516.c
-
-lib516-lib516.obj: lib516.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib516_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib516-lib516.obj -MD -MP -MF $(DEPDIR)/lib516-lib516.Tpo -c -o lib516-lib516.obj `if test -f 'lib516.c'; then $(CYGPATH_W) 'lib516.c'; else $(CYGPATH_W) '$(srcdir)/lib516.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib516-lib516.Tpo $(DEPDIR)/lib516-lib516.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib516.c' object='lib516-lib516.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib516_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib516-lib516.obj `if test -f 'lib516.c'; then $(CYGPATH_W) 'lib516.c'; else $(CYGPATH_W) '$(srcdir)/lib516.c'; fi`
-
-../../lib/lib516-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib516_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib516-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib516-timediff.Tpo -c -o ../../lib/lib516-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib516-timediff.Tpo ../../lib/$(DEPDIR)/lib516-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib516-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib516_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib516-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib516-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib516_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib516-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib516-timediff.Tpo -c -o ../../lib/lib516-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib516-timediff.Tpo ../../lib/$(DEPDIR)/lib516-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib516-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib516_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib516-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib516-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib516_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib516-first.o -MD -MP -MF $(DEPDIR)/lib516-first.Tpo -c -o lib516-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib516-first.Tpo $(DEPDIR)/lib516-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib516-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib516_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib516-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib516-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib516_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib516-first.obj -MD -MP -MF $(DEPDIR)/lib516-first.Tpo -c -o lib516-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib516-first.Tpo $(DEPDIR)/lib516-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib516-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib516_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib516-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib517-lib517.o: lib517.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib517_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib517-lib517.o -MD -MP -MF $(DEPDIR)/lib517-lib517.Tpo -c -o lib517-lib517.o `test -f 'lib517.c' || echo '$(srcdir)/'`lib517.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib517-lib517.Tpo $(DEPDIR)/lib517-lib517.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib517.c' object='lib517-lib517.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib517_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib517-lib517.o `test -f 'lib517.c' || echo '$(srcdir)/'`lib517.c
-
-lib517-lib517.obj: lib517.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib517_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib517-lib517.obj -MD -MP -MF $(DEPDIR)/lib517-lib517.Tpo -c -o lib517-lib517.obj `if test -f 'lib517.c'; then $(CYGPATH_W) 'lib517.c'; else $(CYGPATH_W) '$(srcdir)/lib517.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib517-lib517.Tpo $(DEPDIR)/lib517-lib517.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib517.c' object='lib517-lib517.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib517_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib517-lib517.obj `if test -f 'lib517.c'; then $(CYGPATH_W) 'lib517.c'; else $(CYGPATH_W) '$(srcdir)/lib517.c'; fi`
-
-../../lib/lib517-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib517_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib517-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib517-timediff.Tpo -c -o ../../lib/lib517-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib517-timediff.Tpo ../../lib/$(DEPDIR)/lib517-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib517-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib517_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib517-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib517-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib517_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib517-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib517-timediff.Tpo -c -o ../../lib/lib517-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib517-timediff.Tpo ../../lib/$(DEPDIR)/lib517-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib517-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib517_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib517-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib517-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib517_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib517-first.o -MD -MP -MF $(DEPDIR)/lib517-first.Tpo -c -o lib517-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib517-first.Tpo $(DEPDIR)/lib517-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib517-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib517_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib517-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib517-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib517_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib517-first.obj -MD -MP -MF $(DEPDIR)/lib517-first.Tpo -c -o lib517-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib517-first.Tpo $(DEPDIR)/lib517-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib517-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib517_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib517-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib518-lib518.o: lib518.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib518-lib518.o -MD -MP -MF $(DEPDIR)/lib518-lib518.Tpo -c -o lib518-lib518.o `test -f 'lib518.c' || echo '$(srcdir)/'`lib518.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib518-lib518.Tpo $(DEPDIR)/lib518-lib518.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib518.c' object='lib518-lib518.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib518-lib518.o `test -f 'lib518.c' || echo '$(srcdir)/'`lib518.c
-
-lib518-lib518.obj: lib518.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib518-lib518.obj -MD -MP -MF $(DEPDIR)/lib518-lib518.Tpo -c -o lib518-lib518.obj `if test -f 'lib518.c'; then $(CYGPATH_W) 'lib518.c'; else $(CYGPATH_W) '$(srcdir)/lib518.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib518-lib518.Tpo $(DEPDIR)/lib518-lib518.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib518.c' object='lib518-lib518.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib518-lib518.obj `if test -f 'lib518.c'; then $(CYGPATH_W) 'lib518.c'; else $(CYGPATH_W) '$(srcdir)/lib518.c'; fi`
-
-../../lib/lib518-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib518-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib518-timediff.Tpo -c -o ../../lib/lib518-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib518-timediff.Tpo ../../lib/$(DEPDIR)/lib518-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib518-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib518-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib518-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib518-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib518-timediff.Tpo -c -o ../../lib/lib518-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib518-timediff.Tpo ../../lib/$(DEPDIR)/lib518-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib518-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib518-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib518-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib518-first.o -MD -MP -MF $(DEPDIR)/lib518-first.Tpo -c -o lib518-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib518-first.Tpo $(DEPDIR)/lib518-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib518-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib518-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib518-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib518-first.obj -MD -MP -MF $(DEPDIR)/lib518-first.Tpo -c -o lib518-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib518-first.Tpo $(DEPDIR)/lib518-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib518-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib518-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-../../lib/lib518-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib518-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib518-warnless.Tpo -c -o ../../lib/lib518-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib518-warnless.Tpo ../../lib/$(DEPDIR)/lib518-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib518-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib518-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib518-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib518-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib518-warnless.Tpo -c -o ../../lib/lib518-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib518-warnless.Tpo ../../lib/$(DEPDIR)/lib518-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib518-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib518-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-../../lib/lib518-curl_multibyte.o: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib518-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/lib518-curl_multibyte.Tpo -c -o ../../lib/lib518-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib518-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib518-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib518-curl_multibyte.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib518-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-
-../../lib/lib518-curl_multibyte.obj: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib518-curl_multibyte.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib518-curl_multibyte.Tpo -c -o ../../lib/lib518-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib518-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib518-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib518-curl_multibyte.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib518_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib518-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-
-lib519-lib519.o: lib519.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib519_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib519-lib519.o -MD -MP -MF $(DEPDIR)/lib519-lib519.Tpo -c -o lib519-lib519.o `test -f 'lib519.c' || echo '$(srcdir)/'`lib519.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib519-lib519.Tpo $(DEPDIR)/lib519-lib519.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib519.c' object='lib519-lib519.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib519_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib519-lib519.o `test -f 'lib519.c' || echo '$(srcdir)/'`lib519.c
-
-lib519-lib519.obj: lib519.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib519_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib519-lib519.obj -MD -MP -MF $(DEPDIR)/lib519-lib519.Tpo -c -o lib519-lib519.obj `if test -f 'lib519.c'; then $(CYGPATH_W) 'lib519.c'; else $(CYGPATH_W) '$(srcdir)/lib519.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib519-lib519.Tpo $(DEPDIR)/lib519-lib519.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib519.c' object='lib519-lib519.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib519_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib519-lib519.obj `if test -f 'lib519.c'; then $(CYGPATH_W) 'lib519.c'; else $(CYGPATH_W) '$(srcdir)/lib519.c'; fi`
-
-../../lib/lib519-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib519_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib519-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib519-timediff.Tpo -c -o ../../lib/lib519-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib519-timediff.Tpo ../../lib/$(DEPDIR)/lib519-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib519-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib519_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib519-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib519-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib519_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib519-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib519-timediff.Tpo -c -o ../../lib/lib519-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib519-timediff.Tpo ../../lib/$(DEPDIR)/lib519-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib519-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib519_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib519-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib519-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib519_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib519-first.o -MD -MP -MF $(DEPDIR)/lib519-first.Tpo -c -o lib519-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib519-first.Tpo $(DEPDIR)/lib519-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib519-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib519_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib519-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib519-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib519_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib519-first.obj -MD -MP -MF $(DEPDIR)/lib519-first.Tpo -c -o lib519-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib519-first.Tpo $(DEPDIR)/lib519-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib519-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib519_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib519-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib520-lib520.o: lib520.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib520_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib520-lib520.o -MD -MP -MF $(DEPDIR)/lib520-lib520.Tpo -c -o lib520-lib520.o `test -f 'lib520.c' || echo '$(srcdir)/'`lib520.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib520-lib520.Tpo $(DEPDIR)/lib520-lib520.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib520.c' object='lib520-lib520.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib520_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib520-lib520.o `test -f 'lib520.c' || echo '$(srcdir)/'`lib520.c
-
-lib520-lib520.obj: lib520.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib520_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib520-lib520.obj -MD -MP -MF $(DEPDIR)/lib520-lib520.Tpo -c -o lib520-lib520.obj `if test -f 'lib520.c'; then $(CYGPATH_W) 'lib520.c'; else $(CYGPATH_W) '$(srcdir)/lib520.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib520-lib520.Tpo $(DEPDIR)/lib520-lib520.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib520.c' object='lib520-lib520.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib520_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib520-lib520.obj `if test -f 'lib520.c'; then $(CYGPATH_W) 'lib520.c'; else $(CYGPATH_W) '$(srcdir)/lib520.c'; fi`
-
-../../lib/lib520-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib520_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib520-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib520-timediff.Tpo -c -o ../../lib/lib520-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib520-timediff.Tpo ../../lib/$(DEPDIR)/lib520-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib520-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib520_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib520-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib520-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib520_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib520-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib520-timediff.Tpo -c -o ../../lib/lib520-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib520-timediff.Tpo ../../lib/$(DEPDIR)/lib520-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib520-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib520_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib520-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib520-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib520_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib520-first.o -MD -MP -MF $(DEPDIR)/lib520-first.Tpo -c -o lib520-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib520-first.Tpo $(DEPDIR)/lib520-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib520-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib520_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib520-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib520-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib520_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib520-first.obj -MD -MP -MF $(DEPDIR)/lib520-first.Tpo -c -o lib520-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib520-first.Tpo $(DEPDIR)/lib520-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib520-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib520_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib520-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib521-lib521.o: lib521.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib521_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib521-lib521.o -MD -MP -MF $(DEPDIR)/lib521-lib521.Tpo -c -o lib521-lib521.o `test -f 'lib521.c' || echo '$(srcdir)/'`lib521.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib521-lib521.Tpo $(DEPDIR)/lib521-lib521.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib521.c' object='lib521-lib521.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib521_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib521-lib521.o `test -f 'lib521.c' || echo '$(srcdir)/'`lib521.c
-
-lib521-lib521.obj: lib521.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib521_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib521-lib521.obj -MD -MP -MF $(DEPDIR)/lib521-lib521.Tpo -c -o lib521-lib521.obj `if test -f 'lib521.c'; then $(CYGPATH_W) 'lib521.c'; else $(CYGPATH_W) '$(srcdir)/lib521.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib521-lib521.Tpo $(DEPDIR)/lib521-lib521.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib521.c' object='lib521-lib521.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib521_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib521-lib521.obj `if test -f 'lib521.c'; then $(CYGPATH_W) 'lib521.c'; else $(CYGPATH_W) '$(srcdir)/lib521.c'; fi`
-
-../../lib/lib521-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib521_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib521-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib521-timediff.Tpo -c -o ../../lib/lib521-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib521-timediff.Tpo ../../lib/$(DEPDIR)/lib521-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib521-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib521_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib521-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib521-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib521_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib521-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib521-timediff.Tpo -c -o ../../lib/lib521-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib521-timediff.Tpo ../../lib/$(DEPDIR)/lib521-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib521-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib521_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib521-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib521-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib521_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib521-first.o -MD -MP -MF $(DEPDIR)/lib521-first.Tpo -c -o lib521-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib521-first.Tpo $(DEPDIR)/lib521-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib521-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib521_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib521-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib521-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib521_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib521-first.obj -MD -MP -MF $(DEPDIR)/lib521-first.Tpo -c -o lib521-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib521-first.Tpo $(DEPDIR)/lib521-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib521-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib521_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib521-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib523-lib523.o: lib523.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib523_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib523-lib523.o -MD -MP -MF $(DEPDIR)/lib523-lib523.Tpo -c -o lib523-lib523.o `test -f 'lib523.c' || echo '$(srcdir)/'`lib523.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib523-lib523.Tpo $(DEPDIR)/lib523-lib523.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib523.c' object='lib523-lib523.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib523_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib523-lib523.o `test -f 'lib523.c' || echo '$(srcdir)/'`lib523.c
-
-lib523-lib523.obj: lib523.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib523_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib523-lib523.obj -MD -MP -MF $(DEPDIR)/lib523-lib523.Tpo -c -o lib523-lib523.obj `if test -f 'lib523.c'; then $(CYGPATH_W) 'lib523.c'; else $(CYGPATH_W) '$(srcdir)/lib523.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib523-lib523.Tpo $(DEPDIR)/lib523-lib523.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib523.c' object='lib523-lib523.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib523_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib523-lib523.obj `if test -f 'lib523.c'; then $(CYGPATH_W) 'lib523.c'; else $(CYGPATH_W) '$(srcdir)/lib523.c'; fi`
-
-../../lib/lib523-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib523_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib523-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib523-timediff.Tpo -c -o ../../lib/lib523-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib523-timediff.Tpo ../../lib/$(DEPDIR)/lib523-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib523-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib523_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib523-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib523-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib523_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib523-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib523-timediff.Tpo -c -o ../../lib/lib523-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib523-timediff.Tpo ../../lib/$(DEPDIR)/lib523-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib523-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib523_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib523-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib523-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib523_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib523-first.o -MD -MP -MF $(DEPDIR)/lib523-first.Tpo -c -o lib523-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib523-first.Tpo $(DEPDIR)/lib523-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib523-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib523_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib523-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib523-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib523_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib523-first.obj -MD -MP -MF $(DEPDIR)/lib523-first.Tpo -c -o lib523-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib523-first.Tpo $(DEPDIR)/lib523-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib523-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib523_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib523-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib524-lib524.o: lib524.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib524_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib524-lib524.o -MD -MP -MF $(DEPDIR)/lib524-lib524.Tpo -c -o lib524-lib524.o `test -f 'lib524.c' || echo '$(srcdir)/'`lib524.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib524-lib524.Tpo $(DEPDIR)/lib524-lib524.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib524.c' object='lib524-lib524.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib524_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib524-lib524.o `test -f 'lib524.c' || echo '$(srcdir)/'`lib524.c
-
-lib524-lib524.obj: lib524.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib524_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib524-lib524.obj -MD -MP -MF $(DEPDIR)/lib524-lib524.Tpo -c -o lib524-lib524.obj `if test -f 'lib524.c'; then $(CYGPATH_W) 'lib524.c'; else $(CYGPATH_W) '$(srcdir)/lib524.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib524-lib524.Tpo $(DEPDIR)/lib524-lib524.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib524.c' object='lib524-lib524.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib524_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib524-lib524.obj `if test -f 'lib524.c'; then $(CYGPATH_W) 'lib524.c'; else $(CYGPATH_W) '$(srcdir)/lib524.c'; fi`
-
-../../lib/lib524-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib524_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib524-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib524-timediff.Tpo -c -o ../../lib/lib524-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib524-timediff.Tpo ../../lib/$(DEPDIR)/lib524-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib524-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib524_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib524-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib524-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib524_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib524-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib524-timediff.Tpo -c -o ../../lib/lib524-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib524-timediff.Tpo ../../lib/$(DEPDIR)/lib524-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib524-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib524_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib524-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib524-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib524_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib524-first.o -MD -MP -MF $(DEPDIR)/lib524-first.Tpo -c -o lib524-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib524-first.Tpo $(DEPDIR)/lib524-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib524-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib524_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib524-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib524-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib524_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib524-first.obj -MD -MP -MF $(DEPDIR)/lib524-first.Tpo -c -o lib524-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib524-first.Tpo $(DEPDIR)/lib524-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib524-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib524_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib524-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib525-lib525.o: lib525.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib525-lib525.o -MD -MP -MF $(DEPDIR)/lib525-lib525.Tpo -c -o lib525-lib525.o `test -f 'lib525.c' || echo '$(srcdir)/'`lib525.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib525-lib525.Tpo $(DEPDIR)/lib525-lib525.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib525.c' object='lib525-lib525.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib525-lib525.o `test -f 'lib525.c' || echo '$(srcdir)/'`lib525.c
-
-lib525-lib525.obj: lib525.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib525-lib525.obj -MD -MP -MF $(DEPDIR)/lib525-lib525.Tpo -c -o lib525-lib525.obj `if test -f 'lib525.c'; then $(CYGPATH_W) 'lib525.c'; else $(CYGPATH_W) '$(srcdir)/lib525.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib525-lib525.Tpo $(DEPDIR)/lib525-lib525.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib525.c' object='lib525-lib525.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib525-lib525.obj `if test -f 'lib525.c'; then $(CYGPATH_W) 'lib525.c'; else $(CYGPATH_W) '$(srcdir)/lib525.c'; fi`
-
-../../lib/lib525-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib525-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib525-timediff.Tpo -c -o ../../lib/lib525-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib525-timediff.Tpo ../../lib/$(DEPDIR)/lib525-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib525-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib525-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib525-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib525-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib525-timediff.Tpo -c -o ../../lib/lib525-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib525-timediff.Tpo ../../lib/$(DEPDIR)/lib525-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib525-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib525-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib525-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib525-first.o -MD -MP -MF $(DEPDIR)/lib525-first.Tpo -c -o lib525-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib525-first.Tpo $(DEPDIR)/lib525-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib525-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib525-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib525-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib525-first.obj -MD -MP -MF $(DEPDIR)/lib525-first.Tpo -c -o lib525-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib525-first.Tpo $(DEPDIR)/lib525-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib525-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib525-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib525-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib525-testutil.o -MD -MP -MF $(DEPDIR)/lib525-testutil.Tpo -c -o lib525-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib525-testutil.Tpo $(DEPDIR)/lib525-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib525-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib525-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib525-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib525-testutil.obj -MD -MP -MF $(DEPDIR)/lib525-testutil.Tpo -c -o lib525-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib525-testutil.Tpo $(DEPDIR)/lib525-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib525-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib525-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib525-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib525-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib525-warnless.Tpo -c -o ../../lib/lib525-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib525-warnless.Tpo ../../lib/$(DEPDIR)/lib525-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib525-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib525-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib525-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib525-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib525-warnless.Tpo -c -o ../../lib/lib525-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib525-warnless.Tpo ../../lib/$(DEPDIR)/lib525-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib525-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib525-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-../../lib/lib525-curl_multibyte.o: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib525-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/lib525-curl_multibyte.Tpo -c -o ../../lib/lib525-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib525-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib525-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib525-curl_multibyte.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib525-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-
-../../lib/lib525-curl_multibyte.obj: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib525-curl_multibyte.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib525-curl_multibyte.Tpo -c -o ../../lib/lib525-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib525-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib525-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib525-curl_multibyte.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib525_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib525-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-
lib526-lib526.o: lib526.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib526_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib526-lib526.o -MD -MP -MF $(DEPDIR)/lib526-lib526.Tpo -c -o lib526-lib526.o `test -f 'lib526.c' || echo '$(srcdir)/'`lib526.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib526-lib526.Tpo $(DEPDIR)/lib526-lib526.Po
@@ -12703,76 +4666,6 @@ lib529-testutil.obj: testutil.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib529_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib529-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-lib530-lib530.o: lib530.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib530-lib530.o -MD -MP -MF $(DEPDIR)/lib530-lib530.Tpo -c -o lib530-lib530.o `test -f 'lib530.c' || echo '$(srcdir)/'`lib530.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib530-lib530.Tpo $(DEPDIR)/lib530-lib530.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib530.c' object='lib530-lib530.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib530-lib530.o `test -f 'lib530.c' || echo '$(srcdir)/'`lib530.c
-
-lib530-lib530.obj: lib530.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib530-lib530.obj -MD -MP -MF $(DEPDIR)/lib530-lib530.Tpo -c -o lib530-lib530.obj `if test -f 'lib530.c'; then $(CYGPATH_W) 'lib530.c'; else $(CYGPATH_W) '$(srcdir)/lib530.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib530-lib530.Tpo $(DEPDIR)/lib530-lib530.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib530.c' object='lib530-lib530.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib530-lib530.obj `if test -f 'lib530.c'; then $(CYGPATH_W) 'lib530.c'; else $(CYGPATH_W) '$(srcdir)/lib530.c'; fi`
-
-../../lib/lib530-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib530-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib530-timediff.Tpo -c -o ../../lib/lib530-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib530-timediff.Tpo ../../lib/$(DEPDIR)/lib530-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib530-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib530-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib530-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib530-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib530-timediff.Tpo -c -o ../../lib/lib530-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib530-timediff.Tpo ../../lib/$(DEPDIR)/lib530-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib530-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib530-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib530-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib530-first.o -MD -MP -MF $(DEPDIR)/lib530-first.Tpo -c -o lib530-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib530-first.Tpo $(DEPDIR)/lib530-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib530-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib530-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib530-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib530-first.obj -MD -MP -MF $(DEPDIR)/lib530-first.Tpo -c -o lib530-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib530-first.Tpo $(DEPDIR)/lib530-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib530-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib530-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib530-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib530-testutil.o -MD -MP -MF $(DEPDIR)/lib530-testutil.Tpo -c -o lib530-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib530-testutil.Tpo $(DEPDIR)/lib530-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib530-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib530-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib530-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib530-testutil.obj -MD -MP -MF $(DEPDIR)/lib530-testutil.Tpo -c -o lib530-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib530-testutil.Tpo $(DEPDIR)/lib530-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib530-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib530-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib530-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib530-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib530-warnless.Tpo -c -o ../../lib/lib530-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib530-warnless.Tpo ../../lib/$(DEPDIR)/lib530-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib530-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib530-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib530-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib530-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib530-warnless.Tpo -c -o ../../lib/lib530-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib530-warnless.Tpo ../../lib/$(DEPDIR)/lib530-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib530-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib530-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
lib532-lib526.o: lib526.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib532-lib526.o -MD -MP -MF $(DEPDIR)/lib532-lib526.Tpo -c -o lib532-lib526.o `test -f 'lib526.c' || echo '$(srcdir)/'`lib526.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib532-lib526.Tpo $(DEPDIR)/lib532-lib526.Po
@@ -12843,440 +4736,6 @@ lib532-testutil.obj: testutil.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib532_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib532-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-lib533-lib533.o: lib533.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib533-lib533.o -MD -MP -MF $(DEPDIR)/lib533-lib533.Tpo -c -o lib533-lib533.o `test -f 'lib533.c' || echo '$(srcdir)/'`lib533.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib533-lib533.Tpo $(DEPDIR)/lib533-lib533.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib533.c' object='lib533-lib533.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib533-lib533.o `test -f 'lib533.c' || echo '$(srcdir)/'`lib533.c
-
-lib533-lib533.obj: lib533.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib533-lib533.obj -MD -MP -MF $(DEPDIR)/lib533-lib533.Tpo -c -o lib533-lib533.obj `if test -f 'lib533.c'; then $(CYGPATH_W) 'lib533.c'; else $(CYGPATH_W) '$(srcdir)/lib533.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib533-lib533.Tpo $(DEPDIR)/lib533-lib533.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib533.c' object='lib533-lib533.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib533-lib533.obj `if test -f 'lib533.c'; then $(CYGPATH_W) 'lib533.c'; else $(CYGPATH_W) '$(srcdir)/lib533.c'; fi`
-
-../../lib/lib533-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib533-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib533-timediff.Tpo -c -o ../../lib/lib533-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib533-timediff.Tpo ../../lib/$(DEPDIR)/lib533-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib533-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib533-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib533-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib533-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib533-timediff.Tpo -c -o ../../lib/lib533-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib533-timediff.Tpo ../../lib/$(DEPDIR)/lib533-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib533-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib533-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib533-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib533-first.o -MD -MP -MF $(DEPDIR)/lib533-first.Tpo -c -o lib533-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib533-first.Tpo $(DEPDIR)/lib533-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib533-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib533-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib533-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib533-first.obj -MD -MP -MF $(DEPDIR)/lib533-first.Tpo -c -o lib533-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib533-first.Tpo $(DEPDIR)/lib533-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib533-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib533-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib533-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib533-testutil.o -MD -MP -MF $(DEPDIR)/lib533-testutil.Tpo -c -o lib533-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib533-testutil.Tpo $(DEPDIR)/lib533-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib533-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib533-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib533-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib533-testutil.obj -MD -MP -MF $(DEPDIR)/lib533-testutil.Tpo -c -o lib533-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib533-testutil.Tpo $(DEPDIR)/lib533-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib533-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib533-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib533-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib533-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib533-warnless.Tpo -c -o ../../lib/lib533-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib533-warnless.Tpo ../../lib/$(DEPDIR)/lib533-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib533-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib533-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib533-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib533-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib533-warnless.Tpo -c -o ../../lib/lib533-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib533-warnless.Tpo ../../lib/$(DEPDIR)/lib533-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib533-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib533-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib537-lib537.o: lib537.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib537-lib537.o -MD -MP -MF $(DEPDIR)/lib537-lib537.Tpo -c -o lib537-lib537.o `test -f 'lib537.c' || echo '$(srcdir)/'`lib537.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib537-lib537.Tpo $(DEPDIR)/lib537-lib537.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib537.c' object='lib537-lib537.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib537-lib537.o `test -f 'lib537.c' || echo '$(srcdir)/'`lib537.c
-
-lib537-lib537.obj: lib537.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib537-lib537.obj -MD -MP -MF $(DEPDIR)/lib537-lib537.Tpo -c -o lib537-lib537.obj `if test -f 'lib537.c'; then $(CYGPATH_W) 'lib537.c'; else $(CYGPATH_W) '$(srcdir)/lib537.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib537-lib537.Tpo $(DEPDIR)/lib537-lib537.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib537.c' object='lib537-lib537.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib537-lib537.obj `if test -f 'lib537.c'; then $(CYGPATH_W) 'lib537.c'; else $(CYGPATH_W) '$(srcdir)/lib537.c'; fi`
-
-../../lib/lib537-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib537-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib537-timediff.Tpo -c -o ../../lib/lib537-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib537-timediff.Tpo ../../lib/$(DEPDIR)/lib537-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib537-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib537-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib537-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib537-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib537-timediff.Tpo -c -o ../../lib/lib537-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib537-timediff.Tpo ../../lib/$(DEPDIR)/lib537-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib537-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib537-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib537-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib537-first.o -MD -MP -MF $(DEPDIR)/lib537-first.Tpo -c -o lib537-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib537-first.Tpo $(DEPDIR)/lib537-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib537-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib537-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib537-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib537-first.obj -MD -MP -MF $(DEPDIR)/lib537-first.Tpo -c -o lib537-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib537-first.Tpo $(DEPDIR)/lib537-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib537-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib537-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-../../lib/lib537-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib537-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib537-warnless.Tpo -c -o ../../lib/lib537-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib537-warnless.Tpo ../../lib/$(DEPDIR)/lib537-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib537-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib537-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib537-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib537-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib537-warnless.Tpo -c -o ../../lib/lib537-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib537-warnless.Tpo ../../lib/$(DEPDIR)/lib537-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib537-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib537-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-../../lib/lib537-curl_multibyte.o: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib537-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/lib537-curl_multibyte.Tpo -c -o ../../lib/lib537-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib537-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib537-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib537-curl_multibyte.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib537-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-
-../../lib/lib537-curl_multibyte.obj: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib537-curl_multibyte.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib537-curl_multibyte.Tpo -c -o ../../lib/lib537-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib537-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib537-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib537-curl_multibyte.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib537-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-
-lib539-lib539.o: lib539.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib539_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib539-lib539.o -MD -MP -MF $(DEPDIR)/lib539-lib539.Tpo -c -o lib539-lib539.o `test -f 'lib539.c' || echo '$(srcdir)/'`lib539.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib539-lib539.Tpo $(DEPDIR)/lib539-lib539.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib539.c' object='lib539-lib539.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib539_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib539-lib539.o `test -f 'lib539.c' || echo '$(srcdir)/'`lib539.c
-
-lib539-lib539.obj: lib539.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib539_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib539-lib539.obj -MD -MP -MF $(DEPDIR)/lib539-lib539.Tpo -c -o lib539-lib539.obj `if test -f 'lib539.c'; then $(CYGPATH_W) 'lib539.c'; else $(CYGPATH_W) '$(srcdir)/lib539.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib539-lib539.Tpo $(DEPDIR)/lib539-lib539.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib539.c' object='lib539-lib539.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib539_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib539-lib539.obj `if test -f 'lib539.c'; then $(CYGPATH_W) 'lib539.c'; else $(CYGPATH_W) '$(srcdir)/lib539.c'; fi`
-
-../../lib/lib539-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib539_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib539-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib539-timediff.Tpo -c -o ../../lib/lib539-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib539-timediff.Tpo ../../lib/$(DEPDIR)/lib539-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib539-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib539_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib539-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib539-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib539_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib539-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib539-timediff.Tpo -c -o ../../lib/lib539-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib539-timediff.Tpo ../../lib/$(DEPDIR)/lib539-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib539-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib539_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib539-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib539-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib539_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib539-first.o -MD -MP -MF $(DEPDIR)/lib539-first.Tpo -c -o lib539-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib539-first.Tpo $(DEPDIR)/lib539-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib539-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib539_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib539-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib539-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib539_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib539-first.obj -MD -MP -MF $(DEPDIR)/lib539-first.Tpo -c -o lib539-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib539-first.Tpo $(DEPDIR)/lib539-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib539-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib539_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib539-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib540-lib540.o: lib540.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib540-lib540.o -MD -MP -MF $(DEPDIR)/lib540-lib540.Tpo -c -o lib540-lib540.o `test -f 'lib540.c' || echo '$(srcdir)/'`lib540.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib540-lib540.Tpo $(DEPDIR)/lib540-lib540.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib540.c' object='lib540-lib540.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib540-lib540.o `test -f 'lib540.c' || echo '$(srcdir)/'`lib540.c
-
-lib540-lib540.obj: lib540.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib540-lib540.obj -MD -MP -MF $(DEPDIR)/lib540-lib540.Tpo -c -o lib540-lib540.obj `if test -f 'lib540.c'; then $(CYGPATH_W) 'lib540.c'; else $(CYGPATH_W) '$(srcdir)/lib540.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib540-lib540.Tpo $(DEPDIR)/lib540-lib540.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib540.c' object='lib540-lib540.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib540-lib540.obj `if test -f 'lib540.c'; then $(CYGPATH_W) 'lib540.c'; else $(CYGPATH_W) '$(srcdir)/lib540.c'; fi`
-
-../../lib/lib540-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib540-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib540-timediff.Tpo -c -o ../../lib/lib540-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib540-timediff.Tpo ../../lib/$(DEPDIR)/lib540-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib540-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib540-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib540-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib540-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib540-timediff.Tpo -c -o ../../lib/lib540-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib540-timediff.Tpo ../../lib/$(DEPDIR)/lib540-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib540-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib540-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib540-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib540-first.o -MD -MP -MF $(DEPDIR)/lib540-first.Tpo -c -o lib540-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib540-first.Tpo $(DEPDIR)/lib540-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib540-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib540-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib540-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib540-first.obj -MD -MP -MF $(DEPDIR)/lib540-first.Tpo -c -o lib540-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib540-first.Tpo $(DEPDIR)/lib540-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib540-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib540-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib540-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib540-testutil.o -MD -MP -MF $(DEPDIR)/lib540-testutil.Tpo -c -o lib540-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib540-testutil.Tpo $(DEPDIR)/lib540-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib540-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib540-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib540-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib540-testutil.obj -MD -MP -MF $(DEPDIR)/lib540-testutil.Tpo -c -o lib540-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib540-testutil.Tpo $(DEPDIR)/lib540-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib540-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib540-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib540-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib540-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib540-warnless.Tpo -c -o ../../lib/lib540-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib540-warnless.Tpo ../../lib/$(DEPDIR)/lib540-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib540-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib540-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib540-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib540-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib540-warnless.Tpo -c -o ../../lib/lib540-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib540-warnless.Tpo ../../lib/$(DEPDIR)/lib540-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib540-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib540_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib540-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib541-lib541.o: lib541.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib541_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib541-lib541.o -MD -MP -MF $(DEPDIR)/lib541-lib541.Tpo -c -o lib541-lib541.o `test -f 'lib541.c' || echo '$(srcdir)/'`lib541.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib541-lib541.Tpo $(DEPDIR)/lib541-lib541.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib541.c' object='lib541-lib541.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib541_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib541-lib541.o `test -f 'lib541.c' || echo '$(srcdir)/'`lib541.c
-
-lib541-lib541.obj: lib541.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib541_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib541-lib541.obj -MD -MP -MF $(DEPDIR)/lib541-lib541.Tpo -c -o lib541-lib541.obj `if test -f 'lib541.c'; then $(CYGPATH_W) 'lib541.c'; else $(CYGPATH_W) '$(srcdir)/lib541.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib541-lib541.Tpo $(DEPDIR)/lib541-lib541.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib541.c' object='lib541-lib541.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib541_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib541-lib541.obj `if test -f 'lib541.c'; then $(CYGPATH_W) 'lib541.c'; else $(CYGPATH_W) '$(srcdir)/lib541.c'; fi`
-
-../../lib/lib541-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib541_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib541-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib541-timediff.Tpo -c -o ../../lib/lib541-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib541-timediff.Tpo ../../lib/$(DEPDIR)/lib541-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib541-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib541_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib541-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib541-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib541_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib541-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib541-timediff.Tpo -c -o ../../lib/lib541-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib541-timediff.Tpo ../../lib/$(DEPDIR)/lib541-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib541-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib541_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib541-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib541-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib541_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib541-first.o -MD -MP -MF $(DEPDIR)/lib541-first.Tpo -c -o lib541-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib541-first.Tpo $(DEPDIR)/lib541-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib541-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib541_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib541-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib541-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib541_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib541-first.obj -MD -MP -MF $(DEPDIR)/lib541-first.Tpo -c -o lib541-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib541-first.Tpo $(DEPDIR)/lib541-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib541-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib541_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib541-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-../../lib/lib541-curl_multibyte.o: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib541_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib541-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/lib541-curl_multibyte.Tpo -c -o ../../lib/lib541-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib541-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib541-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib541-curl_multibyte.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib541_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib541-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-
-../../lib/lib541-curl_multibyte.obj: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib541_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib541-curl_multibyte.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib541-curl_multibyte.Tpo -c -o ../../lib/lib541-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib541-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib541-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib541-curl_multibyte.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib541_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib541-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-
-lib542-lib542.o: lib542.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib542-lib542.o -MD -MP -MF $(DEPDIR)/lib542-lib542.Tpo -c -o lib542-lib542.o `test -f 'lib542.c' || echo '$(srcdir)/'`lib542.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib542-lib542.Tpo $(DEPDIR)/lib542-lib542.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib542.c' object='lib542-lib542.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib542-lib542.o `test -f 'lib542.c' || echo '$(srcdir)/'`lib542.c
-
-lib542-lib542.obj: lib542.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib542-lib542.obj -MD -MP -MF $(DEPDIR)/lib542-lib542.Tpo -c -o lib542-lib542.obj `if test -f 'lib542.c'; then $(CYGPATH_W) 'lib542.c'; else $(CYGPATH_W) '$(srcdir)/lib542.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib542-lib542.Tpo $(DEPDIR)/lib542-lib542.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib542.c' object='lib542-lib542.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib542-lib542.obj `if test -f 'lib542.c'; then $(CYGPATH_W) 'lib542.c'; else $(CYGPATH_W) '$(srcdir)/lib542.c'; fi`
-
-../../lib/lib542-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib542-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib542-timediff.Tpo -c -o ../../lib/lib542-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib542-timediff.Tpo ../../lib/$(DEPDIR)/lib542-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib542-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib542-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib542-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib542-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib542-timediff.Tpo -c -o ../../lib/lib542-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib542-timediff.Tpo ../../lib/$(DEPDIR)/lib542-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib542-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib542-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib542-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib542-first.o -MD -MP -MF $(DEPDIR)/lib542-first.Tpo -c -o lib542-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib542-first.Tpo $(DEPDIR)/lib542-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib542-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib542-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib542-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib542-first.obj -MD -MP -MF $(DEPDIR)/lib542-first.Tpo -c -o lib542-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib542-first.Tpo $(DEPDIR)/lib542-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib542-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib542_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib542-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib543-lib543.o: lib543.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib543_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib543-lib543.o -MD -MP -MF $(DEPDIR)/lib543-lib543.Tpo -c -o lib543-lib543.o `test -f 'lib543.c' || echo '$(srcdir)/'`lib543.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib543-lib543.Tpo $(DEPDIR)/lib543-lib543.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib543.c' object='lib543-lib543.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib543_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib543-lib543.o `test -f 'lib543.c' || echo '$(srcdir)/'`lib543.c
-
-lib543-lib543.obj: lib543.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib543_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib543-lib543.obj -MD -MP -MF $(DEPDIR)/lib543-lib543.Tpo -c -o lib543-lib543.obj `if test -f 'lib543.c'; then $(CYGPATH_W) 'lib543.c'; else $(CYGPATH_W) '$(srcdir)/lib543.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib543-lib543.Tpo $(DEPDIR)/lib543-lib543.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib543.c' object='lib543-lib543.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib543_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib543-lib543.obj `if test -f 'lib543.c'; then $(CYGPATH_W) 'lib543.c'; else $(CYGPATH_W) '$(srcdir)/lib543.c'; fi`
-
-../../lib/lib543-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib543_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib543-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib543-timediff.Tpo -c -o ../../lib/lib543-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib543-timediff.Tpo ../../lib/$(DEPDIR)/lib543-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib543-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib543_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib543-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib543-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib543_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib543-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib543-timediff.Tpo -c -o ../../lib/lib543-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib543-timediff.Tpo ../../lib/$(DEPDIR)/lib543-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib543-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib543_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib543-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib543-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib543_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib543-first.o -MD -MP -MF $(DEPDIR)/lib543-first.Tpo -c -o lib543-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib543-first.Tpo $(DEPDIR)/lib543-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib543-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib543_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib543-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib543-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib543_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib543-first.obj -MD -MP -MF $(DEPDIR)/lib543-first.Tpo -c -o lib543-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib543-first.Tpo $(DEPDIR)/lib543-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib543-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib543_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib543-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib544-lib544.o: lib544.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib544_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib544-lib544.o -MD -MP -MF $(DEPDIR)/lib544-lib544.Tpo -c -o lib544-lib544.o `test -f 'lib544.c' || echo '$(srcdir)/'`lib544.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib544-lib544.Tpo $(DEPDIR)/lib544-lib544.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib544.c' object='lib544-lib544.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib544_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib544-lib544.o `test -f 'lib544.c' || echo '$(srcdir)/'`lib544.c
-
-lib544-lib544.obj: lib544.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib544_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib544-lib544.obj -MD -MP -MF $(DEPDIR)/lib544-lib544.Tpo -c -o lib544-lib544.obj `if test -f 'lib544.c'; then $(CYGPATH_W) 'lib544.c'; else $(CYGPATH_W) '$(srcdir)/lib544.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib544-lib544.Tpo $(DEPDIR)/lib544-lib544.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib544.c' object='lib544-lib544.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib544_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib544-lib544.obj `if test -f 'lib544.c'; then $(CYGPATH_W) 'lib544.c'; else $(CYGPATH_W) '$(srcdir)/lib544.c'; fi`
-
-../../lib/lib544-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib544_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib544-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib544-timediff.Tpo -c -o ../../lib/lib544-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib544-timediff.Tpo ../../lib/$(DEPDIR)/lib544-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib544-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib544_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib544-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib544-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib544_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib544-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib544-timediff.Tpo -c -o ../../lib/lib544-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib544-timediff.Tpo ../../lib/$(DEPDIR)/lib544-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib544-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib544_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib544-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib544-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib544_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib544-first.o -MD -MP -MF $(DEPDIR)/lib544-first.Tpo -c -o lib544-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib544-first.Tpo $(DEPDIR)/lib544-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib544-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib544_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib544-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib544-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib544_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib544-first.obj -MD -MP -MF $(DEPDIR)/lib544-first.Tpo -c -o lib544-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib544-first.Tpo $(DEPDIR)/lib544-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib544-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib544_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib544-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
lib545-lib544.o: lib544.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib545_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib545-lib544.o -MD -MP -MF $(DEPDIR)/lib545-lib544.Tpo -c -o lib545-lib544.o `test -f 'lib544.c' || echo '$(srcdir)/'`lib544.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib545-lib544.Tpo $(DEPDIR)/lib545-lib544.Po
@@ -13319,48 +4778,6 @@ lib545-first.obj: first.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib545_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib545-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-lib547-lib547.o: lib547.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib547_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib547-lib547.o -MD -MP -MF $(DEPDIR)/lib547-lib547.Tpo -c -o lib547-lib547.o `test -f 'lib547.c' || echo '$(srcdir)/'`lib547.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib547-lib547.Tpo $(DEPDIR)/lib547-lib547.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib547.c' object='lib547-lib547.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib547_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib547-lib547.o `test -f 'lib547.c' || echo '$(srcdir)/'`lib547.c
-
-lib547-lib547.obj: lib547.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib547_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib547-lib547.obj -MD -MP -MF $(DEPDIR)/lib547-lib547.Tpo -c -o lib547-lib547.obj `if test -f 'lib547.c'; then $(CYGPATH_W) 'lib547.c'; else $(CYGPATH_W) '$(srcdir)/lib547.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib547-lib547.Tpo $(DEPDIR)/lib547-lib547.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib547.c' object='lib547-lib547.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib547_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib547-lib547.obj `if test -f 'lib547.c'; then $(CYGPATH_W) 'lib547.c'; else $(CYGPATH_W) '$(srcdir)/lib547.c'; fi`
-
-../../lib/lib547-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib547_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib547-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib547-timediff.Tpo -c -o ../../lib/lib547-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib547-timediff.Tpo ../../lib/$(DEPDIR)/lib547-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib547-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib547_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib547-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib547-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib547_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib547-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib547-timediff.Tpo -c -o ../../lib/lib547-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib547-timediff.Tpo ../../lib/$(DEPDIR)/lib547-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib547-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib547_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib547-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib547-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib547_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib547-first.o -MD -MP -MF $(DEPDIR)/lib547-first.Tpo -c -o lib547-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib547-first.Tpo $(DEPDIR)/lib547-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib547-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib547_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib547-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib547-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib547_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib547-first.obj -MD -MP -MF $(DEPDIR)/lib547-first.Tpo -c -o lib547-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib547-first.Tpo $(DEPDIR)/lib547-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib547-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib547_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib547-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
lib548-lib547.o: lib547.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib548_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib548-lib547.o -MD -MP -MF $(DEPDIR)/lib548-lib547.Tpo -c -o lib548-lib547.o `test -f 'lib547.c' || echo '$(srcdir)/'`lib547.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib548-lib547.Tpo $(DEPDIR)/lib548-lib547.Po
@@ -13403,622 +4820,6 @@ lib548-first.obj: first.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib548_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib548-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-lib549-lib549.o: lib549.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib549_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib549-lib549.o -MD -MP -MF $(DEPDIR)/lib549-lib549.Tpo -c -o lib549-lib549.o `test -f 'lib549.c' || echo '$(srcdir)/'`lib549.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib549-lib549.Tpo $(DEPDIR)/lib549-lib549.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib549.c' object='lib549-lib549.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib549_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib549-lib549.o `test -f 'lib549.c' || echo '$(srcdir)/'`lib549.c
-
-lib549-lib549.obj: lib549.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib549_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib549-lib549.obj -MD -MP -MF $(DEPDIR)/lib549-lib549.Tpo -c -o lib549-lib549.obj `if test -f 'lib549.c'; then $(CYGPATH_W) 'lib549.c'; else $(CYGPATH_W) '$(srcdir)/lib549.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib549-lib549.Tpo $(DEPDIR)/lib549-lib549.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib549.c' object='lib549-lib549.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib549_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib549-lib549.obj `if test -f 'lib549.c'; then $(CYGPATH_W) 'lib549.c'; else $(CYGPATH_W) '$(srcdir)/lib549.c'; fi`
-
-../../lib/lib549-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib549_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib549-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib549-timediff.Tpo -c -o ../../lib/lib549-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib549-timediff.Tpo ../../lib/$(DEPDIR)/lib549-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib549-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib549_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib549-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib549-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib549_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib549-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib549-timediff.Tpo -c -o ../../lib/lib549-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib549-timediff.Tpo ../../lib/$(DEPDIR)/lib549-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib549-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib549_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib549-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib549-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib549_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib549-first.o -MD -MP -MF $(DEPDIR)/lib549-first.Tpo -c -o lib549-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib549-first.Tpo $(DEPDIR)/lib549-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib549-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib549_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib549-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib549-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib549_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib549-first.obj -MD -MP -MF $(DEPDIR)/lib549-first.Tpo -c -o lib549-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib549-first.Tpo $(DEPDIR)/lib549-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib549-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib549_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib549-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib552-lib552.o: lib552.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib552-lib552.o -MD -MP -MF $(DEPDIR)/lib552-lib552.Tpo -c -o lib552-lib552.o `test -f 'lib552.c' || echo '$(srcdir)/'`lib552.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib552-lib552.Tpo $(DEPDIR)/lib552-lib552.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib552.c' object='lib552-lib552.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib552-lib552.o `test -f 'lib552.c' || echo '$(srcdir)/'`lib552.c
-
-lib552-lib552.obj: lib552.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib552-lib552.obj -MD -MP -MF $(DEPDIR)/lib552-lib552.Tpo -c -o lib552-lib552.obj `if test -f 'lib552.c'; then $(CYGPATH_W) 'lib552.c'; else $(CYGPATH_W) '$(srcdir)/lib552.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib552-lib552.Tpo $(DEPDIR)/lib552-lib552.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib552.c' object='lib552-lib552.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib552-lib552.obj `if test -f 'lib552.c'; then $(CYGPATH_W) 'lib552.c'; else $(CYGPATH_W) '$(srcdir)/lib552.c'; fi`
-
-../../lib/lib552-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib552-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib552-timediff.Tpo -c -o ../../lib/lib552-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib552-timediff.Tpo ../../lib/$(DEPDIR)/lib552-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib552-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib552-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib552-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib552-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib552-timediff.Tpo -c -o ../../lib/lib552-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib552-timediff.Tpo ../../lib/$(DEPDIR)/lib552-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib552-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib552-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib552-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib552-first.o -MD -MP -MF $(DEPDIR)/lib552-first.Tpo -c -o lib552-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib552-first.Tpo $(DEPDIR)/lib552-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib552-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib552-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib552-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib552-first.obj -MD -MP -MF $(DEPDIR)/lib552-first.Tpo -c -o lib552-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib552-first.Tpo $(DEPDIR)/lib552-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib552-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib552-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-../../lib/lib552-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib552-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib552-warnless.Tpo -c -o ../../lib/lib552-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib552-warnless.Tpo ../../lib/$(DEPDIR)/lib552-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib552-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib552-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib552-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib552-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib552-warnless.Tpo -c -o ../../lib/lib552-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib552-warnless.Tpo ../../lib/$(DEPDIR)/lib552-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib552-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib552_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib552-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib553-lib553.o: lib553.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib553-lib553.o -MD -MP -MF $(DEPDIR)/lib553-lib553.Tpo -c -o lib553-lib553.o `test -f 'lib553.c' || echo '$(srcdir)/'`lib553.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib553-lib553.Tpo $(DEPDIR)/lib553-lib553.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib553.c' object='lib553-lib553.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib553-lib553.o `test -f 'lib553.c' || echo '$(srcdir)/'`lib553.c
-
-lib553-lib553.obj: lib553.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib553-lib553.obj -MD -MP -MF $(DEPDIR)/lib553-lib553.Tpo -c -o lib553-lib553.obj `if test -f 'lib553.c'; then $(CYGPATH_W) 'lib553.c'; else $(CYGPATH_W) '$(srcdir)/lib553.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib553-lib553.Tpo $(DEPDIR)/lib553-lib553.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib553.c' object='lib553-lib553.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib553-lib553.obj `if test -f 'lib553.c'; then $(CYGPATH_W) 'lib553.c'; else $(CYGPATH_W) '$(srcdir)/lib553.c'; fi`
-
-../../lib/lib553-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib553-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib553-timediff.Tpo -c -o ../../lib/lib553-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib553-timediff.Tpo ../../lib/$(DEPDIR)/lib553-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib553-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib553-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib553-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib553-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib553-timediff.Tpo -c -o ../../lib/lib553-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib553-timediff.Tpo ../../lib/$(DEPDIR)/lib553-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib553-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib553-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib553-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib553-first.o -MD -MP -MF $(DEPDIR)/lib553-first.Tpo -c -o lib553-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib553-first.Tpo $(DEPDIR)/lib553-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib553-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib553-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib553-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib553-first.obj -MD -MP -MF $(DEPDIR)/lib553-first.Tpo -c -o lib553-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib553-first.Tpo $(DEPDIR)/lib553-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib553-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib553_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib553-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib554-lib554.o: lib554.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib554_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib554-lib554.o -MD -MP -MF $(DEPDIR)/lib554-lib554.Tpo -c -o lib554-lib554.o `test -f 'lib554.c' || echo '$(srcdir)/'`lib554.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib554-lib554.Tpo $(DEPDIR)/lib554-lib554.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib554.c' object='lib554-lib554.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib554_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib554-lib554.o `test -f 'lib554.c' || echo '$(srcdir)/'`lib554.c
-
-lib554-lib554.obj: lib554.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib554_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib554-lib554.obj -MD -MP -MF $(DEPDIR)/lib554-lib554.Tpo -c -o lib554-lib554.obj `if test -f 'lib554.c'; then $(CYGPATH_W) 'lib554.c'; else $(CYGPATH_W) '$(srcdir)/lib554.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib554-lib554.Tpo $(DEPDIR)/lib554-lib554.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib554.c' object='lib554-lib554.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib554_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib554-lib554.obj `if test -f 'lib554.c'; then $(CYGPATH_W) 'lib554.c'; else $(CYGPATH_W) '$(srcdir)/lib554.c'; fi`
-
-../../lib/lib554-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib554_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib554-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib554-timediff.Tpo -c -o ../../lib/lib554-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib554-timediff.Tpo ../../lib/$(DEPDIR)/lib554-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib554-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib554_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib554-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib554-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib554_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib554-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib554-timediff.Tpo -c -o ../../lib/lib554-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib554-timediff.Tpo ../../lib/$(DEPDIR)/lib554-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib554-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib554_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib554-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib554-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib554_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib554-first.o -MD -MP -MF $(DEPDIR)/lib554-first.Tpo -c -o lib554-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib554-first.Tpo $(DEPDIR)/lib554-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib554-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib554_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib554-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib554-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib554_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib554-first.obj -MD -MP -MF $(DEPDIR)/lib554-first.Tpo -c -o lib554-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib554-first.Tpo $(DEPDIR)/lib554-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib554-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib554_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib554-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib555-lib555.o: lib555.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib555-lib555.o -MD -MP -MF $(DEPDIR)/lib555-lib555.Tpo -c -o lib555-lib555.o `test -f 'lib555.c' || echo '$(srcdir)/'`lib555.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib555-lib555.Tpo $(DEPDIR)/lib555-lib555.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib555.c' object='lib555-lib555.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib555-lib555.o `test -f 'lib555.c' || echo '$(srcdir)/'`lib555.c
-
-lib555-lib555.obj: lib555.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib555-lib555.obj -MD -MP -MF $(DEPDIR)/lib555-lib555.Tpo -c -o lib555-lib555.obj `if test -f 'lib555.c'; then $(CYGPATH_W) 'lib555.c'; else $(CYGPATH_W) '$(srcdir)/lib555.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib555-lib555.Tpo $(DEPDIR)/lib555-lib555.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib555.c' object='lib555-lib555.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib555-lib555.obj `if test -f 'lib555.c'; then $(CYGPATH_W) 'lib555.c'; else $(CYGPATH_W) '$(srcdir)/lib555.c'; fi`
-
-../../lib/lib555-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib555-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib555-timediff.Tpo -c -o ../../lib/lib555-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib555-timediff.Tpo ../../lib/$(DEPDIR)/lib555-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib555-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib555-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib555-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib555-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib555-timediff.Tpo -c -o ../../lib/lib555-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib555-timediff.Tpo ../../lib/$(DEPDIR)/lib555-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib555-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib555-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib555-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib555-first.o -MD -MP -MF $(DEPDIR)/lib555-first.Tpo -c -o lib555-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib555-first.Tpo $(DEPDIR)/lib555-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib555-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib555-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib555-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib555-first.obj -MD -MP -MF $(DEPDIR)/lib555-first.Tpo -c -o lib555-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib555-first.Tpo $(DEPDIR)/lib555-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib555-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib555-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib555-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib555-testutil.o -MD -MP -MF $(DEPDIR)/lib555-testutil.Tpo -c -o lib555-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib555-testutil.Tpo $(DEPDIR)/lib555-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib555-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib555-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib555-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib555-testutil.obj -MD -MP -MF $(DEPDIR)/lib555-testutil.Tpo -c -o lib555-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib555-testutil.Tpo $(DEPDIR)/lib555-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib555-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib555-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib555-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib555-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib555-warnless.Tpo -c -o ../../lib/lib555-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib555-warnless.Tpo ../../lib/$(DEPDIR)/lib555-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib555-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib555-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib555-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib555-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib555-warnless.Tpo -c -o ../../lib/lib555-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib555-warnless.Tpo ../../lib/$(DEPDIR)/lib555-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib555-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib555_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib555-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib556-lib556.o: lib556.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib556-lib556.o -MD -MP -MF $(DEPDIR)/lib556-lib556.Tpo -c -o lib556-lib556.o `test -f 'lib556.c' || echo '$(srcdir)/'`lib556.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib556-lib556.Tpo $(DEPDIR)/lib556-lib556.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib556.c' object='lib556-lib556.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib556-lib556.o `test -f 'lib556.c' || echo '$(srcdir)/'`lib556.c
-
-lib556-lib556.obj: lib556.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib556-lib556.obj -MD -MP -MF $(DEPDIR)/lib556-lib556.Tpo -c -o lib556-lib556.obj `if test -f 'lib556.c'; then $(CYGPATH_W) 'lib556.c'; else $(CYGPATH_W) '$(srcdir)/lib556.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib556-lib556.Tpo $(DEPDIR)/lib556-lib556.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib556.c' object='lib556-lib556.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib556-lib556.obj `if test -f 'lib556.c'; then $(CYGPATH_W) 'lib556.c'; else $(CYGPATH_W) '$(srcdir)/lib556.c'; fi`
-
-../../lib/lib556-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib556-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib556-timediff.Tpo -c -o ../../lib/lib556-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib556-timediff.Tpo ../../lib/$(DEPDIR)/lib556-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib556-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib556-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib556-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib556-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib556-timediff.Tpo -c -o ../../lib/lib556-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib556-timediff.Tpo ../../lib/$(DEPDIR)/lib556-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib556-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib556-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib556-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib556-first.o -MD -MP -MF $(DEPDIR)/lib556-first.Tpo -c -o lib556-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib556-first.Tpo $(DEPDIR)/lib556-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib556-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib556-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib556-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib556-first.obj -MD -MP -MF $(DEPDIR)/lib556-first.Tpo -c -o lib556-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib556-first.Tpo $(DEPDIR)/lib556-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib556-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib556-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-../../lib/lib556-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib556-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib556-warnless.Tpo -c -o ../../lib/lib556-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib556-warnless.Tpo ../../lib/$(DEPDIR)/lib556-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib556-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib556-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib556-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib556-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib556-warnless.Tpo -c -o ../../lib/lib556-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib556-warnless.Tpo ../../lib/$(DEPDIR)/lib556-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib556-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib556_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib556-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib557-lib557.o: lib557.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib557-lib557.o -MD -MP -MF $(DEPDIR)/lib557-lib557.Tpo -c -o lib557-lib557.o `test -f 'lib557.c' || echo '$(srcdir)/'`lib557.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib557-lib557.Tpo $(DEPDIR)/lib557-lib557.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib557.c' object='lib557-lib557.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib557-lib557.o `test -f 'lib557.c' || echo '$(srcdir)/'`lib557.c
-
-lib557-lib557.obj: lib557.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib557-lib557.obj -MD -MP -MF $(DEPDIR)/lib557-lib557.Tpo -c -o lib557-lib557.obj `if test -f 'lib557.c'; then $(CYGPATH_W) 'lib557.c'; else $(CYGPATH_W) '$(srcdir)/lib557.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib557-lib557.Tpo $(DEPDIR)/lib557-lib557.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib557.c' object='lib557-lib557.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib557-lib557.obj `if test -f 'lib557.c'; then $(CYGPATH_W) 'lib557.c'; else $(CYGPATH_W) '$(srcdir)/lib557.c'; fi`
-
-../../lib/lib557-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib557-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib557-timediff.Tpo -c -o ../../lib/lib557-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib557-timediff.Tpo ../../lib/$(DEPDIR)/lib557-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib557-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib557-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib557-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib557-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib557-timediff.Tpo -c -o ../../lib/lib557-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib557-timediff.Tpo ../../lib/$(DEPDIR)/lib557-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib557-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib557-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib557-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib557-first.o -MD -MP -MF $(DEPDIR)/lib557-first.Tpo -c -o lib557-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib557-first.Tpo $(DEPDIR)/lib557-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib557-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib557-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib557-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib557-first.obj -MD -MP -MF $(DEPDIR)/lib557-first.Tpo -c -o lib557-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib557-first.Tpo $(DEPDIR)/lib557-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib557-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib557_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib557-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib558-lib558.o: lib558.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib558_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib558-lib558.o -MD -MP -MF $(DEPDIR)/lib558-lib558.Tpo -c -o lib558-lib558.o `test -f 'lib558.c' || echo '$(srcdir)/'`lib558.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib558-lib558.Tpo $(DEPDIR)/lib558-lib558.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib558.c' object='lib558-lib558.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib558_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib558-lib558.o `test -f 'lib558.c' || echo '$(srcdir)/'`lib558.c
-
-lib558-lib558.obj: lib558.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib558_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib558-lib558.obj -MD -MP -MF $(DEPDIR)/lib558-lib558.Tpo -c -o lib558-lib558.obj `if test -f 'lib558.c'; then $(CYGPATH_W) 'lib558.c'; else $(CYGPATH_W) '$(srcdir)/lib558.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib558-lib558.Tpo $(DEPDIR)/lib558-lib558.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib558.c' object='lib558-lib558.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib558_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib558-lib558.obj `if test -f 'lib558.c'; then $(CYGPATH_W) 'lib558.c'; else $(CYGPATH_W) '$(srcdir)/lib558.c'; fi`
-
-../../lib/lib558-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib558_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib558-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib558-timediff.Tpo -c -o ../../lib/lib558-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib558-timediff.Tpo ../../lib/$(DEPDIR)/lib558-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib558-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib558_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib558-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib558-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib558_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib558-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib558-timediff.Tpo -c -o ../../lib/lib558-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib558-timediff.Tpo ../../lib/$(DEPDIR)/lib558-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib558-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib558_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib558-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib558-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib558_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib558-first.o -MD -MP -MF $(DEPDIR)/lib558-first.Tpo -c -o lib558-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib558-first.Tpo $(DEPDIR)/lib558-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib558-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib558_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib558-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib558-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib558_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib558-first.obj -MD -MP -MF $(DEPDIR)/lib558-first.Tpo -c -o lib558-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib558-first.Tpo $(DEPDIR)/lib558-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib558-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib558_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib558-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib559-lib559.o: lib559.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib559_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib559-lib559.o -MD -MP -MF $(DEPDIR)/lib559-lib559.Tpo -c -o lib559-lib559.o `test -f 'lib559.c' || echo '$(srcdir)/'`lib559.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib559-lib559.Tpo $(DEPDIR)/lib559-lib559.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib559.c' object='lib559-lib559.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib559_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib559-lib559.o `test -f 'lib559.c' || echo '$(srcdir)/'`lib559.c
-
-lib559-lib559.obj: lib559.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib559_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib559-lib559.obj -MD -MP -MF $(DEPDIR)/lib559-lib559.Tpo -c -o lib559-lib559.obj `if test -f 'lib559.c'; then $(CYGPATH_W) 'lib559.c'; else $(CYGPATH_W) '$(srcdir)/lib559.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib559-lib559.Tpo $(DEPDIR)/lib559-lib559.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib559.c' object='lib559-lib559.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib559_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib559-lib559.obj `if test -f 'lib559.c'; then $(CYGPATH_W) 'lib559.c'; else $(CYGPATH_W) '$(srcdir)/lib559.c'; fi`
-
-../../lib/lib559-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib559_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib559-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib559-timediff.Tpo -c -o ../../lib/lib559-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib559-timediff.Tpo ../../lib/$(DEPDIR)/lib559-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib559-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib559_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib559-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib559-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib559_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib559-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib559-timediff.Tpo -c -o ../../lib/lib559-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib559-timediff.Tpo ../../lib/$(DEPDIR)/lib559-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib559-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib559_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib559-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib559-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib559_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib559-first.o -MD -MP -MF $(DEPDIR)/lib559-first.Tpo -c -o lib559-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib559-first.Tpo $(DEPDIR)/lib559-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib559-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib559_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib559-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib559-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib559_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib559-first.obj -MD -MP -MF $(DEPDIR)/lib559-first.Tpo -c -o lib559-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib559-first.Tpo $(DEPDIR)/lib559-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib559-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib559_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib559-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib560-lib560.o: lib560.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib560_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib560-lib560.o -MD -MP -MF $(DEPDIR)/lib560-lib560.Tpo -c -o lib560-lib560.o `test -f 'lib560.c' || echo '$(srcdir)/'`lib560.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib560-lib560.Tpo $(DEPDIR)/lib560-lib560.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib560.c' object='lib560-lib560.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib560_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib560-lib560.o `test -f 'lib560.c' || echo '$(srcdir)/'`lib560.c
-
-lib560-lib560.obj: lib560.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib560_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib560-lib560.obj -MD -MP -MF $(DEPDIR)/lib560-lib560.Tpo -c -o lib560-lib560.obj `if test -f 'lib560.c'; then $(CYGPATH_W) 'lib560.c'; else $(CYGPATH_W) '$(srcdir)/lib560.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib560-lib560.Tpo $(DEPDIR)/lib560-lib560.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib560.c' object='lib560-lib560.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib560_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib560-lib560.obj `if test -f 'lib560.c'; then $(CYGPATH_W) 'lib560.c'; else $(CYGPATH_W) '$(srcdir)/lib560.c'; fi`
-
-../../lib/lib560-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib560_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib560-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib560-timediff.Tpo -c -o ../../lib/lib560-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib560-timediff.Tpo ../../lib/$(DEPDIR)/lib560-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib560-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib560_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib560-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib560-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib560_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib560-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib560-timediff.Tpo -c -o ../../lib/lib560-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib560-timediff.Tpo ../../lib/$(DEPDIR)/lib560-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib560-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib560_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib560-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib560-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib560_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib560-first.o -MD -MP -MF $(DEPDIR)/lib560-first.Tpo -c -o lib560-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib560-first.Tpo $(DEPDIR)/lib560-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib560-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib560_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib560-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib560-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib560_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib560-first.obj -MD -MP -MF $(DEPDIR)/lib560-first.Tpo -c -o lib560-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib560-first.Tpo $(DEPDIR)/lib560-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib560-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib560_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib560-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib560-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib560_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib560-testutil.o -MD -MP -MF $(DEPDIR)/lib560-testutil.Tpo -c -o lib560-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib560-testutil.Tpo $(DEPDIR)/lib560-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib560-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib560_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib560-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib560-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib560_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib560-testutil.obj -MD -MP -MF $(DEPDIR)/lib560-testutil.Tpo -c -o lib560-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib560-testutil.Tpo $(DEPDIR)/lib560-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib560-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib560_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib560-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib560-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib560_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib560-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib560-warnless.Tpo -c -o ../../lib/lib560-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib560-warnless.Tpo ../../lib/$(DEPDIR)/lib560-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib560-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib560_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib560-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib560-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib560_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib560-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib560-warnless.Tpo -c -o ../../lib/lib560-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib560-warnless.Tpo ../../lib/$(DEPDIR)/lib560-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib560-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib560_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib560-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib562-lib562.o: lib562.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib562_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib562-lib562.o -MD -MP -MF $(DEPDIR)/lib562-lib562.Tpo -c -o lib562-lib562.o `test -f 'lib562.c' || echo '$(srcdir)/'`lib562.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib562-lib562.Tpo $(DEPDIR)/lib562-lib562.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib562.c' object='lib562-lib562.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib562_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib562-lib562.o `test -f 'lib562.c' || echo '$(srcdir)/'`lib562.c
-
-lib562-lib562.obj: lib562.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib562_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib562-lib562.obj -MD -MP -MF $(DEPDIR)/lib562-lib562.Tpo -c -o lib562-lib562.obj `if test -f 'lib562.c'; then $(CYGPATH_W) 'lib562.c'; else $(CYGPATH_W) '$(srcdir)/lib562.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib562-lib562.Tpo $(DEPDIR)/lib562-lib562.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib562.c' object='lib562-lib562.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib562_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib562-lib562.obj `if test -f 'lib562.c'; then $(CYGPATH_W) 'lib562.c'; else $(CYGPATH_W) '$(srcdir)/lib562.c'; fi`
-
-../../lib/lib562-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib562_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib562-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib562-timediff.Tpo -c -o ../../lib/lib562-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib562-timediff.Tpo ../../lib/$(DEPDIR)/lib562-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib562-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib562_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib562-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib562-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib562_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib562-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib562-timediff.Tpo -c -o ../../lib/lib562-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib562-timediff.Tpo ../../lib/$(DEPDIR)/lib562-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib562-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib562_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib562-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib562-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib562_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib562-first.o -MD -MP -MF $(DEPDIR)/lib562-first.Tpo -c -o lib562-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib562-first.Tpo $(DEPDIR)/lib562-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib562-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib562_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib562-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib562-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib562_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib562-first.obj -MD -MP -MF $(DEPDIR)/lib562-first.Tpo -c -o lib562-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib562-first.Tpo $(DEPDIR)/lib562-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib562-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib562_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib562-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib564-lib564.o: lib564.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib564-lib564.o -MD -MP -MF $(DEPDIR)/lib564-lib564.Tpo -c -o lib564-lib564.o `test -f 'lib564.c' || echo '$(srcdir)/'`lib564.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib564-lib564.Tpo $(DEPDIR)/lib564-lib564.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib564.c' object='lib564-lib564.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib564-lib564.o `test -f 'lib564.c' || echo '$(srcdir)/'`lib564.c
-
-lib564-lib564.obj: lib564.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib564-lib564.obj -MD -MP -MF $(DEPDIR)/lib564-lib564.Tpo -c -o lib564-lib564.obj `if test -f 'lib564.c'; then $(CYGPATH_W) 'lib564.c'; else $(CYGPATH_W) '$(srcdir)/lib564.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib564-lib564.Tpo $(DEPDIR)/lib564-lib564.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib564.c' object='lib564-lib564.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib564-lib564.obj `if test -f 'lib564.c'; then $(CYGPATH_W) 'lib564.c'; else $(CYGPATH_W) '$(srcdir)/lib564.c'; fi`
-
-../../lib/lib564-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib564-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib564-timediff.Tpo -c -o ../../lib/lib564-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib564-timediff.Tpo ../../lib/$(DEPDIR)/lib564-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib564-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib564-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib564-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib564-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib564-timediff.Tpo -c -o ../../lib/lib564-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib564-timediff.Tpo ../../lib/$(DEPDIR)/lib564-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib564-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib564-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib564-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib564-first.o -MD -MP -MF $(DEPDIR)/lib564-first.Tpo -c -o lib564-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib564-first.Tpo $(DEPDIR)/lib564-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib564-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib564-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib564-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib564-first.obj -MD -MP -MF $(DEPDIR)/lib564-first.Tpo -c -o lib564-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib564-first.Tpo $(DEPDIR)/lib564-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib564-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib564-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib564-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib564-testutil.o -MD -MP -MF $(DEPDIR)/lib564-testutil.Tpo -c -o lib564-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib564-testutil.Tpo $(DEPDIR)/lib564-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib564-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib564-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib564-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib564-testutil.obj -MD -MP -MF $(DEPDIR)/lib564-testutil.Tpo -c -o lib564-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib564-testutil.Tpo $(DEPDIR)/lib564-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib564-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib564-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib564-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib564-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib564-warnless.Tpo -c -o ../../lib/lib564-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib564-warnless.Tpo ../../lib/$(DEPDIR)/lib564-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib564-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib564-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib564-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib564-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib564-warnless.Tpo -c -o ../../lib/lib564-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib564-warnless.Tpo ../../lib/$(DEPDIR)/lib564-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib564-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib564_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib564-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
lib565-lib510.o: lib510.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib565_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib565-lib510.o -MD -MP -MF $(DEPDIR)/lib565-lib510.Tpo -c -o lib565-lib510.o `test -f 'lib510.c' || echo '$(srcdir)/'`lib510.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib565-lib510.Tpo $(DEPDIR)/lib565-lib510.Po
@@ -14061,860 +4862,6 @@ lib565-first.obj: first.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib565_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib565-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-lib566-lib566.o: lib566.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib566_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib566-lib566.o -MD -MP -MF $(DEPDIR)/lib566-lib566.Tpo -c -o lib566-lib566.o `test -f 'lib566.c' || echo '$(srcdir)/'`lib566.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib566-lib566.Tpo $(DEPDIR)/lib566-lib566.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib566.c' object='lib566-lib566.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib566_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib566-lib566.o `test -f 'lib566.c' || echo '$(srcdir)/'`lib566.c
-
-lib566-lib566.obj: lib566.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib566_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib566-lib566.obj -MD -MP -MF $(DEPDIR)/lib566-lib566.Tpo -c -o lib566-lib566.obj `if test -f 'lib566.c'; then $(CYGPATH_W) 'lib566.c'; else $(CYGPATH_W) '$(srcdir)/lib566.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib566-lib566.Tpo $(DEPDIR)/lib566-lib566.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib566.c' object='lib566-lib566.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib566_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib566-lib566.obj `if test -f 'lib566.c'; then $(CYGPATH_W) 'lib566.c'; else $(CYGPATH_W) '$(srcdir)/lib566.c'; fi`
-
-../../lib/lib566-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib566_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib566-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib566-timediff.Tpo -c -o ../../lib/lib566-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib566-timediff.Tpo ../../lib/$(DEPDIR)/lib566-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib566-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib566_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib566-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib566-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib566_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib566-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib566-timediff.Tpo -c -o ../../lib/lib566-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib566-timediff.Tpo ../../lib/$(DEPDIR)/lib566-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib566-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib566_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib566-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib566-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib566_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib566-first.o -MD -MP -MF $(DEPDIR)/lib566-first.Tpo -c -o lib566-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib566-first.Tpo $(DEPDIR)/lib566-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib566-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib566_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib566-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib566-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib566_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib566-first.obj -MD -MP -MF $(DEPDIR)/lib566-first.Tpo -c -o lib566-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib566-first.Tpo $(DEPDIR)/lib566-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib566-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib566_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib566-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-../../lib/lib566-curl_multibyte.o: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib566_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib566-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/lib566-curl_multibyte.Tpo -c -o ../../lib/lib566-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib566-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib566-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib566-curl_multibyte.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib566_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib566-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-
-../../lib/lib566-curl_multibyte.obj: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib566_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib566-curl_multibyte.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib566-curl_multibyte.Tpo -c -o ../../lib/lib566-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib566-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib566-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib566-curl_multibyte.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib566_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib566-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-
-lib567-lib567.o: lib567.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib567_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib567-lib567.o -MD -MP -MF $(DEPDIR)/lib567-lib567.Tpo -c -o lib567-lib567.o `test -f 'lib567.c' || echo '$(srcdir)/'`lib567.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib567-lib567.Tpo $(DEPDIR)/lib567-lib567.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib567.c' object='lib567-lib567.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib567_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib567-lib567.o `test -f 'lib567.c' || echo '$(srcdir)/'`lib567.c
-
-lib567-lib567.obj: lib567.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib567_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib567-lib567.obj -MD -MP -MF $(DEPDIR)/lib567-lib567.Tpo -c -o lib567-lib567.obj `if test -f 'lib567.c'; then $(CYGPATH_W) 'lib567.c'; else $(CYGPATH_W) '$(srcdir)/lib567.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib567-lib567.Tpo $(DEPDIR)/lib567-lib567.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib567.c' object='lib567-lib567.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib567_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib567-lib567.obj `if test -f 'lib567.c'; then $(CYGPATH_W) 'lib567.c'; else $(CYGPATH_W) '$(srcdir)/lib567.c'; fi`
-
-../../lib/lib567-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib567_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib567-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib567-timediff.Tpo -c -o ../../lib/lib567-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib567-timediff.Tpo ../../lib/$(DEPDIR)/lib567-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib567-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib567_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib567-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib567-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib567_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib567-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib567-timediff.Tpo -c -o ../../lib/lib567-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib567-timediff.Tpo ../../lib/$(DEPDIR)/lib567-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib567-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib567_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib567-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib567-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib567_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib567-first.o -MD -MP -MF $(DEPDIR)/lib567-first.Tpo -c -o lib567-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib567-first.Tpo $(DEPDIR)/lib567-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib567-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib567_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib567-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib567-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib567_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib567-first.obj -MD -MP -MF $(DEPDIR)/lib567-first.Tpo -c -o lib567-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib567-first.Tpo $(DEPDIR)/lib567-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib567-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib567_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib567-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib568-lib568.o: lib568.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib568-lib568.o -MD -MP -MF $(DEPDIR)/lib568-lib568.Tpo -c -o lib568-lib568.o `test -f 'lib568.c' || echo '$(srcdir)/'`lib568.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib568-lib568.Tpo $(DEPDIR)/lib568-lib568.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib568.c' object='lib568-lib568.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib568-lib568.o `test -f 'lib568.c' || echo '$(srcdir)/'`lib568.c
-
-lib568-lib568.obj: lib568.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib568-lib568.obj -MD -MP -MF $(DEPDIR)/lib568-lib568.Tpo -c -o lib568-lib568.obj `if test -f 'lib568.c'; then $(CYGPATH_W) 'lib568.c'; else $(CYGPATH_W) '$(srcdir)/lib568.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib568-lib568.Tpo $(DEPDIR)/lib568-lib568.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib568.c' object='lib568-lib568.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib568-lib568.obj `if test -f 'lib568.c'; then $(CYGPATH_W) 'lib568.c'; else $(CYGPATH_W) '$(srcdir)/lib568.c'; fi`
-
-../../lib/lib568-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib568-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib568-timediff.Tpo -c -o ../../lib/lib568-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib568-timediff.Tpo ../../lib/$(DEPDIR)/lib568-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib568-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib568-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib568-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib568-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib568-timediff.Tpo -c -o ../../lib/lib568-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib568-timediff.Tpo ../../lib/$(DEPDIR)/lib568-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib568-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib568-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib568-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib568-first.o -MD -MP -MF $(DEPDIR)/lib568-first.Tpo -c -o lib568-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib568-first.Tpo $(DEPDIR)/lib568-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib568-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib568-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib568-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib568-first.obj -MD -MP -MF $(DEPDIR)/lib568-first.Tpo -c -o lib568-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib568-first.Tpo $(DEPDIR)/lib568-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib568-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib568-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-../../lib/lib568-curl_multibyte.o: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib568-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/lib568-curl_multibyte.Tpo -c -o ../../lib/lib568-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib568-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib568-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib568-curl_multibyte.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib568-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-
-../../lib/lib568-curl_multibyte.obj: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib568-curl_multibyte.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib568-curl_multibyte.Tpo -c -o ../../lib/lib568-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib568-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib568-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib568-curl_multibyte.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib568_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib568-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-
-lib569-lib569.o: lib569.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib569-lib569.o -MD -MP -MF $(DEPDIR)/lib569-lib569.Tpo -c -o lib569-lib569.o `test -f 'lib569.c' || echo '$(srcdir)/'`lib569.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib569-lib569.Tpo $(DEPDIR)/lib569-lib569.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib569.c' object='lib569-lib569.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib569-lib569.o `test -f 'lib569.c' || echo '$(srcdir)/'`lib569.c
-
-lib569-lib569.obj: lib569.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib569-lib569.obj -MD -MP -MF $(DEPDIR)/lib569-lib569.Tpo -c -o lib569-lib569.obj `if test -f 'lib569.c'; then $(CYGPATH_W) 'lib569.c'; else $(CYGPATH_W) '$(srcdir)/lib569.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib569-lib569.Tpo $(DEPDIR)/lib569-lib569.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib569.c' object='lib569-lib569.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib569-lib569.obj `if test -f 'lib569.c'; then $(CYGPATH_W) 'lib569.c'; else $(CYGPATH_W) '$(srcdir)/lib569.c'; fi`
-
-../../lib/lib569-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib569-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib569-timediff.Tpo -c -o ../../lib/lib569-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib569-timediff.Tpo ../../lib/$(DEPDIR)/lib569-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib569-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib569-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib569-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib569-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib569-timediff.Tpo -c -o ../../lib/lib569-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib569-timediff.Tpo ../../lib/$(DEPDIR)/lib569-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib569-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib569-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib569-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib569-first.o -MD -MP -MF $(DEPDIR)/lib569-first.Tpo -c -o lib569-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib569-first.Tpo $(DEPDIR)/lib569-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib569-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib569-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib569-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib569-first.obj -MD -MP -MF $(DEPDIR)/lib569-first.Tpo -c -o lib569-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib569-first.Tpo $(DEPDIR)/lib569-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib569-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib569-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-../../lib/lib569-curl_multibyte.o: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib569-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/lib569-curl_multibyte.Tpo -c -o ../../lib/lib569-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib569-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib569-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib569-curl_multibyte.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib569-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-
-../../lib/lib569-curl_multibyte.obj: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib569-curl_multibyte.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib569-curl_multibyte.Tpo -c -o ../../lib/lib569-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib569-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib569-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib569-curl_multibyte.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib569_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib569-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-
-lib570-lib570.o: lib570.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib570_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib570-lib570.o -MD -MP -MF $(DEPDIR)/lib570-lib570.Tpo -c -o lib570-lib570.o `test -f 'lib570.c' || echo '$(srcdir)/'`lib570.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib570-lib570.Tpo $(DEPDIR)/lib570-lib570.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib570.c' object='lib570-lib570.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib570_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib570-lib570.o `test -f 'lib570.c' || echo '$(srcdir)/'`lib570.c
-
-lib570-lib570.obj: lib570.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib570_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib570-lib570.obj -MD -MP -MF $(DEPDIR)/lib570-lib570.Tpo -c -o lib570-lib570.obj `if test -f 'lib570.c'; then $(CYGPATH_W) 'lib570.c'; else $(CYGPATH_W) '$(srcdir)/lib570.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib570-lib570.Tpo $(DEPDIR)/lib570-lib570.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib570.c' object='lib570-lib570.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib570_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib570-lib570.obj `if test -f 'lib570.c'; then $(CYGPATH_W) 'lib570.c'; else $(CYGPATH_W) '$(srcdir)/lib570.c'; fi`
-
-../../lib/lib570-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib570_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib570-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib570-timediff.Tpo -c -o ../../lib/lib570-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib570-timediff.Tpo ../../lib/$(DEPDIR)/lib570-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib570-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib570_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib570-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib570-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib570_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib570-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib570-timediff.Tpo -c -o ../../lib/lib570-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib570-timediff.Tpo ../../lib/$(DEPDIR)/lib570-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib570-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib570_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib570-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib570-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib570_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib570-first.o -MD -MP -MF $(DEPDIR)/lib570-first.Tpo -c -o lib570-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib570-first.Tpo $(DEPDIR)/lib570-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib570-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib570_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib570-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib570-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib570_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib570-first.obj -MD -MP -MF $(DEPDIR)/lib570-first.Tpo -c -o lib570-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib570-first.Tpo $(DEPDIR)/lib570-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib570-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib570_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib570-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib571-lib571.o: lib571.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib571_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib571-lib571.o -MD -MP -MF $(DEPDIR)/lib571-lib571.Tpo -c -o lib571-lib571.o `test -f 'lib571.c' || echo '$(srcdir)/'`lib571.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib571-lib571.Tpo $(DEPDIR)/lib571-lib571.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib571.c' object='lib571-lib571.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib571_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib571-lib571.o `test -f 'lib571.c' || echo '$(srcdir)/'`lib571.c
-
-lib571-lib571.obj: lib571.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib571_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib571-lib571.obj -MD -MP -MF $(DEPDIR)/lib571-lib571.Tpo -c -o lib571-lib571.obj `if test -f 'lib571.c'; then $(CYGPATH_W) 'lib571.c'; else $(CYGPATH_W) '$(srcdir)/lib571.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib571-lib571.Tpo $(DEPDIR)/lib571-lib571.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib571.c' object='lib571-lib571.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib571_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib571-lib571.obj `if test -f 'lib571.c'; then $(CYGPATH_W) 'lib571.c'; else $(CYGPATH_W) '$(srcdir)/lib571.c'; fi`
-
-../../lib/lib571-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib571_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib571-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib571-timediff.Tpo -c -o ../../lib/lib571-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib571-timediff.Tpo ../../lib/$(DEPDIR)/lib571-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib571-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib571_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib571-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib571-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib571_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib571-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib571-timediff.Tpo -c -o ../../lib/lib571-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib571-timediff.Tpo ../../lib/$(DEPDIR)/lib571-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib571-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib571_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib571-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib571-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib571_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib571-first.o -MD -MP -MF $(DEPDIR)/lib571-first.Tpo -c -o lib571-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib571-first.Tpo $(DEPDIR)/lib571-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib571-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib571_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib571-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib571-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib571_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib571-first.obj -MD -MP -MF $(DEPDIR)/lib571-first.Tpo -c -o lib571-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib571-first.Tpo $(DEPDIR)/lib571-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib571-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib571_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib571-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-../../lib/lib571-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib571_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib571-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib571-warnless.Tpo -c -o ../../lib/lib571-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib571-warnless.Tpo ../../lib/$(DEPDIR)/lib571-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib571-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib571_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib571-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib571-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib571_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib571-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib571-warnless.Tpo -c -o ../../lib/lib571-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib571-warnless.Tpo ../../lib/$(DEPDIR)/lib571-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib571-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib571_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib571-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-../../lib/lib571-curl_multibyte.o: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib571_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib571-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/lib571-curl_multibyte.Tpo -c -o ../../lib/lib571-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib571-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib571-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib571-curl_multibyte.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib571_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib571-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-
-../../lib/lib571-curl_multibyte.obj: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib571_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib571-curl_multibyte.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib571-curl_multibyte.Tpo -c -o ../../lib/lib571-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib571-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib571-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib571-curl_multibyte.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib571_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib571-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-
-lib572-lib572.o: lib572.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib572_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib572-lib572.o -MD -MP -MF $(DEPDIR)/lib572-lib572.Tpo -c -o lib572-lib572.o `test -f 'lib572.c' || echo '$(srcdir)/'`lib572.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib572-lib572.Tpo $(DEPDIR)/lib572-lib572.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib572.c' object='lib572-lib572.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib572_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib572-lib572.o `test -f 'lib572.c' || echo '$(srcdir)/'`lib572.c
-
-lib572-lib572.obj: lib572.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib572_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib572-lib572.obj -MD -MP -MF $(DEPDIR)/lib572-lib572.Tpo -c -o lib572-lib572.obj `if test -f 'lib572.c'; then $(CYGPATH_W) 'lib572.c'; else $(CYGPATH_W) '$(srcdir)/lib572.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib572-lib572.Tpo $(DEPDIR)/lib572-lib572.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib572.c' object='lib572-lib572.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib572_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib572-lib572.obj `if test -f 'lib572.c'; then $(CYGPATH_W) 'lib572.c'; else $(CYGPATH_W) '$(srcdir)/lib572.c'; fi`
-
-../../lib/lib572-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib572_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib572-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib572-timediff.Tpo -c -o ../../lib/lib572-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib572-timediff.Tpo ../../lib/$(DEPDIR)/lib572-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib572-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib572_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib572-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib572-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib572_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib572-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib572-timediff.Tpo -c -o ../../lib/lib572-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib572-timediff.Tpo ../../lib/$(DEPDIR)/lib572-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib572-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib572_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib572-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib572-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib572_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib572-first.o -MD -MP -MF $(DEPDIR)/lib572-first.Tpo -c -o lib572-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib572-first.Tpo $(DEPDIR)/lib572-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib572-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib572_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib572-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib572-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib572_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib572-first.obj -MD -MP -MF $(DEPDIR)/lib572-first.Tpo -c -o lib572-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib572-first.Tpo $(DEPDIR)/lib572-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib572-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib572_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib572-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-../../lib/lib572-curl_multibyte.o: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib572_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib572-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/lib572-curl_multibyte.Tpo -c -o ../../lib/lib572-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib572-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib572-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib572-curl_multibyte.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib572_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib572-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-
-../../lib/lib572-curl_multibyte.obj: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib572_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib572-curl_multibyte.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib572-curl_multibyte.Tpo -c -o ../../lib/lib572-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib572-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib572-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib572-curl_multibyte.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib572_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib572-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-
-lib573-lib573.o: lib573.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib573_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib573-lib573.o -MD -MP -MF $(DEPDIR)/lib573-lib573.Tpo -c -o lib573-lib573.o `test -f 'lib573.c' || echo '$(srcdir)/'`lib573.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib573-lib573.Tpo $(DEPDIR)/lib573-lib573.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib573.c' object='lib573-lib573.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib573_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib573-lib573.o `test -f 'lib573.c' || echo '$(srcdir)/'`lib573.c
-
-lib573-lib573.obj: lib573.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib573_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib573-lib573.obj -MD -MP -MF $(DEPDIR)/lib573-lib573.Tpo -c -o lib573-lib573.obj `if test -f 'lib573.c'; then $(CYGPATH_W) 'lib573.c'; else $(CYGPATH_W) '$(srcdir)/lib573.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib573-lib573.Tpo $(DEPDIR)/lib573-lib573.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib573.c' object='lib573-lib573.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib573_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib573-lib573.obj `if test -f 'lib573.c'; then $(CYGPATH_W) 'lib573.c'; else $(CYGPATH_W) '$(srcdir)/lib573.c'; fi`
-
-../../lib/lib573-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib573_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib573-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib573-timediff.Tpo -c -o ../../lib/lib573-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib573-timediff.Tpo ../../lib/$(DEPDIR)/lib573-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib573-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib573_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib573-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib573-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib573_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib573-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib573-timediff.Tpo -c -o ../../lib/lib573-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib573-timediff.Tpo ../../lib/$(DEPDIR)/lib573-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib573-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib573_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib573-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib573-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib573_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib573-first.o -MD -MP -MF $(DEPDIR)/lib573-first.Tpo -c -o lib573-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib573-first.Tpo $(DEPDIR)/lib573-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib573-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib573_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib573-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib573-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib573_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib573-first.obj -MD -MP -MF $(DEPDIR)/lib573-first.Tpo -c -o lib573-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib573-first.Tpo $(DEPDIR)/lib573-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib573-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib573_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib573-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib573-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib573_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib573-testutil.o -MD -MP -MF $(DEPDIR)/lib573-testutil.Tpo -c -o lib573-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib573-testutil.Tpo $(DEPDIR)/lib573-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib573-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib573_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib573-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib573-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib573_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib573-testutil.obj -MD -MP -MF $(DEPDIR)/lib573-testutil.Tpo -c -o lib573-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib573-testutil.Tpo $(DEPDIR)/lib573-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib573-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib573_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib573-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib573-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib573_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib573-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib573-warnless.Tpo -c -o ../../lib/lib573-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib573-warnless.Tpo ../../lib/$(DEPDIR)/lib573-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib573-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib573_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib573-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib573-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib573_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib573-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib573-warnless.Tpo -c -o ../../lib/lib573-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib573-warnless.Tpo ../../lib/$(DEPDIR)/lib573-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib573-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib573_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib573-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib573-testtrace.o: testtrace.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib573_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib573-testtrace.o -MD -MP -MF $(DEPDIR)/lib573-testtrace.Tpo -c -o lib573-testtrace.o `test -f 'testtrace.c' || echo '$(srcdir)/'`testtrace.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib573-testtrace.Tpo $(DEPDIR)/lib573-testtrace.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testtrace.c' object='lib573-testtrace.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib573_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib573-testtrace.o `test -f 'testtrace.c' || echo '$(srcdir)/'`testtrace.c
-
-lib573-testtrace.obj: testtrace.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib573_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib573-testtrace.obj -MD -MP -MF $(DEPDIR)/lib573-testtrace.Tpo -c -o lib573-testtrace.obj `if test -f 'testtrace.c'; then $(CYGPATH_W) 'testtrace.c'; else $(CYGPATH_W) '$(srcdir)/testtrace.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib573-testtrace.Tpo $(DEPDIR)/lib573-testtrace.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testtrace.c' object='lib573-testtrace.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib573_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib573-testtrace.obj `if test -f 'testtrace.c'; then $(CYGPATH_W) 'testtrace.c'; else $(CYGPATH_W) '$(srcdir)/testtrace.c'; fi`
-
-lib574-lib574.o: lib574.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib574_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib574-lib574.o -MD -MP -MF $(DEPDIR)/lib574-lib574.Tpo -c -o lib574-lib574.o `test -f 'lib574.c' || echo '$(srcdir)/'`lib574.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib574-lib574.Tpo $(DEPDIR)/lib574-lib574.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib574.c' object='lib574-lib574.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib574_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib574-lib574.o `test -f 'lib574.c' || echo '$(srcdir)/'`lib574.c
-
-lib574-lib574.obj: lib574.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib574_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib574-lib574.obj -MD -MP -MF $(DEPDIR)/lib574-lib574.Tpo -c -o lib574-lib574.obj `if test -f 'lib574.c'; then $(CYGPATH_W) 'lib574.c'; else $(CYGPATH_W) '$(srcdir)/lib574.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib574-lib574.Tpo $(DEPDIR)/lib574-lib574.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib574.c' object='lib574-lib574.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib574_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib574-lib574.obj `if test -f 'lib574.c'; then $(CYGPATH_W) 'lib574.c'; else $(CYGPATH_W) '$(srcdir)/lib574.c'; fi`
-
-../../lib/lib574-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib574_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib574-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib574-timediff.Tpo -c -o ../../lib/lib574-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib574-timediff.Tpo ../../lib/$(DEPDIR)/lib574-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib574-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib574_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib574-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib574-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib574_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib574-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib574-timediff.Tpo -c -o ../../lib/lib574-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib574-timediff.Tpo ../../lib/$(DEPDIR)/lib574-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib574-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib574_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib574-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib574-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib574_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib574-first.o -MD -MP -MF $(DEPDIR)/lib574-first.Tpo -c -o lib574-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib574-first.Tpo $(DEPDIR)/lib574-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib574-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib574_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib574-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib574-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib574_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib574-first.obj -MD -MP -MF $(DEPDIR)/lib574-first.Tpo -c -o lib574-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib574-first.Tpo $(DEPDIR)/lib574-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib574-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib574_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib574-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib575-lib575.o: lib575.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib575_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib575-lib575.o -MD -MP -MF $(DEPDIR)/lib575-lib575.Tpo -c -o lib575-lib575.o `test -f 'lib575.c' || echo '$(srcdir)/'`lib575.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib575-lib575.Tpo $(DEPDIR)/lib575-lib575.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib575.c' object='lib575-lib575.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib575_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib575-lib575.o `test -f 'lib575.c' || echo '$(srcdir)/'`lib575.c
-
-lib575-lib575.obj: lib575.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib575_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib575-lib575.obj -MD -MP -MF $(DEPDIR)/lib575-lib575.Tpo -c -o lib575-lib575.obj `if test -f 'lib575.c'; then $(CYGPATH_W) 'lib575.c'; else $(CYGPATH_W) '$(srcdir)/lib575.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib575-lib575.Tpo $(DEPDIR)/lib575-lib575.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib575.c' object='lib575-lib575.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib575_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib575-lib575.obj `if test -f 'lib575.c'; then $(CYGPATH_W) 'lib575.c'; else $(CYGPATH_W) '$(srcdir)/lib575.c'; fi`
-
-../../lib/lib575-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib575_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib575-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib575-timediff.Tpo -c -o ../../lib/lib575-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib575-timediff.Tpo ../../lib/$(DEPDIR)/lib575-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib575-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib575_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib575-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib575-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib575_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib575-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib575-timediff.Tpo -c -o ../../lib/lib575-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib575-timediff.Tpo ../../lib/$(DEPDIR)/lib575-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib575-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib575_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib575-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib575-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib575_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib575-first.o -MD -MP -MF $(DEPDIR)/lib575-first.Tpo -c -o lib575-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib575-first.Tpo $(DEPDIR)/lib575-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib575-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib575_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib575-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib575-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib575_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib575-first.obj -MD -MP -MF $(DEPDIR)/lib575-first.Tpo -c -o lib575-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib575-first.Tpo $(DEPDIR)/lib575-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib575-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib575_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib575-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib575-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib575_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib575-testutil.o -MD -MP -MF $(DEPDIR)/lib575-testutil.Tpo -c -o lib575-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib575-testutil.Tpo $(DEPDIR)/lib575-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib575-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib575_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib575-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib575-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib575_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib575-testutil.obj -MD -MP -MF $(DEPDIR)/lib575-testutil.Tpo -c -o lib575-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib575-testutil.Tpo $(DEPDIR)/lib575-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib575-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib575_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib575-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib575-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib575_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib575-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib575-warnless.Tpo -c -o ../../lib/lib575-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib575-warnless.Tpo ../../lib/$(DEPDIR)/lib575-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib575-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib575_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib575-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib575-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib575_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib575-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib575-warnless.Tpo -c -o ../../lib/lib575-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib575-warnless.Tpo ../../lib/$(DEPDIR)/lib575-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib575-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib575_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib575-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib576-lib576.o: lib576.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib576_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib576-lib576.o -MD -MP -MF $(DEPDIR)/lib576-lib576.Tpo -c -o lib576-lib576.o `test -f 'lib576.c' || echo '$(srcdir)/'`lib576.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib576-lib576.Tpo $(DEPDIR)/lib576-lib576.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib576.c' object='lib576-lib576.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib576_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib576-lib576.o `test -f 'lib576.c' || echo '$(srcdir)/'`lib576.c
-
-lib576-lib576.obj: lib576.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib576_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib576-lib576.obj -MD -MP -MF $(DEPDIR)/lib576-lib576.Tpo -c -o lib576-lib576.obj `if test -f 'lib576.c'; then $(CYGPATH_W) 'lib576.c'; else $(CYGPATH_W) '$(srcdir)/lib576.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib576-lib576.Tpo $(DEPDIR)/lib576-lib576.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib576.c' object='lib576-lib576.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib576_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib576-lib576.obj `if test -f 'lib576.c'; then $(CYGPATH_W) 'lib576.c'; else $(CYGPATH_W) '$(srcdir)/lib576.c'; fi`
-
-../../lib/lib576-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib576_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib576-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib576-timediff.Tpo -c -o ../../lib/lib576-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib576-timediff.Tpo ../../lib/$(DEPDIR)/lib576-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib576-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib576_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib576-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib576-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib576_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib576-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib576-timediff.Tpo -c -o ../../lib/lib576-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib576-timediff.Tpo ../../lib/$(DEPDIR)/lib576-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib576-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib576_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib576-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib576-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib576_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib576-first.o -MD -MP -MF $(DEPDIR)/lib576-first.Tpo -c -o lib576-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib576-first.Tpo $(DEPDIR)/lib576-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib576-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib576_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib576-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib576-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib576_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib576-first.obj -MD -MP -MF $(DEPDIR)/lib576-first.Tpo -c -o lib576-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib576-first.Tpo $(DEPDIR)/lib576-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib576-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib576_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib576-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib578-lib578.o: lib578.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib578_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib578-lib578.o -MD -MP -MF $(DEPDIR)/lib578-lib578.Tpo -c -o lib578-lib578.o `test -f 'lib578.c' || echo '$(srcdir)/'`lib578.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib578-lib578.Tpo $(DEPDIR)/lib578-lib578.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib578.c' object='lib578-lib578.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib578_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib578-lib578.o `test -f 'lib578.c' || echo '$(srcdir)/'`lib578.c
-
-lib578-lib578.obj: lib578.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib578_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib578-lib578.obj -MD -MP -MF $(DEPDIR)/lib578-lib578.Tpo -c -o lib578-lib578.obj `if test -f 'lib578.c'; then $(CYGPATH_W) 'lib578.c'; else $(CYGPATH_W) '$(srcdir)/lib578.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib578-lib578.Tpo $(DEPDIR)/lib578-lib578.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib578.c' object='lib578-lib578.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib578_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib578-lib578.obj `if test -f 'lib578.c'; then $(CYGPATH_W) 'lib578.c'; else $(CYGPATH_W) '$(srcdir)/lib578.c'; fi`
-
-../../lib/lib578-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib578_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib578-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib578-timediff.Tpo -c -o ../../lib/lib578-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib578-timediff.Tpo ../../lib/$(DEPDIR)/lib578-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib578-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib578_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib578-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib578-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib578_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib578-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib578-timediff.Tpo -c -o ../../lib/lib578-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib578-timediff.Tpo ../../lib/$(DEPDIR)/lib578-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib578-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib578_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib578-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib578-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib578_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib578-first.o -MD -MP -MF $(DEPDIR)/lib578-first.Tpo -c -o lib578-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib578-first.Tpo $(DEPDIR)/lib578-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib578-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib578_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib578-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib578-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib578_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib578-first.obj -MD -MP -MF $(DEPDIR)/lib578-first.Tpo -c -o lib578-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib578-first.Tpo $(DEPDIR)/lib578-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib578-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib578_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib578-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-../../lib/lib578-curl_multibyte.o: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib578_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib578-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/lib578-curl_multibyte.Tpo -c -o ../../lib/lib578-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib578-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib578-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib578-curl_multibyte.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib578_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib578-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-
-../../lib/lib578-curl_multibyte.obj: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib578_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib578-curl_multibyte.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib578-curl_multibyte.Tpo -c -o ../../lib/lib578-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib578-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib578-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib578-curl_multibyte.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib578_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib578-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-
-lib579-lib579.o: lib579.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib579_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib579-lib579.o -MD -MP -MF $(DEPDIR)/lib579-lib579.Tpo -c -o lib579-lib579.o `test -f 'lib579.c' || echo '$(srcdir)/'`lib579.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib579-lib579.Tpo $(DEPDIR)/lib579-lib579.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib579.c' object='lib579-lib579.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib579_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib579-lib579.o `test -f 'lib579.c' || echo '$(srcdir)/'`lib579.c
-
-lib579-lib579.obj: lib579.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib579_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib579-lib579.obj -MD -MP -MF $(DEPDIR)/lib579-lib579.Tpo -c -o lib579-lib579.obj `if test -f 'lib579.c'; then $(CYGPATH_W) 'lib579.c'; else $(CYGPATH_W) '$(srcdir)/lib579.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib579-lib579.Tpo $(DEPDIR)/lib579-lib579.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib579.c' object='lib579-lib579.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib579_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib579-lib579.obj `if test -f 'lib579.c'; then $(CYGPATH_W) 'lib579.c'; else $(CYGPATH_W) '$(srcdir)/lib579.c'; fi`
-
-../../lib/lib579-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib579_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib579-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib579-timediff.Tpo -c -o ../../lib/lib579-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib579-timediff.Tpo ../../lib/$(DEPDIR)/lib579-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib579-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib579_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib579-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib579-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib579_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib579-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib579-timediff.Tpo -c -o ../../lib/lib579-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib579-timediff.Tpo ../../lib/$(DEPDIR)/lib579-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib579-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib579_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib579-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib579-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib579_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib579-first.o -MD -MP -MF $(DEPDIR)/lib579-first.Tpo -c -o lib579-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib579-first.Tpo $(DEPDIR)/lib579-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib579-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib579_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib579-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib579-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib579_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib579-first.obj -MD -MP -MF $(DEPDIR)/lib579-first.Tpo -c -o lib579-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib579-first.Tpo $(DEPDIR)/lib579-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib579-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib579_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib579-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-../../lib/lib579-curl_multibyte.o: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib579_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib579-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/lib579-curl_multibyte.Tpo -c -o ../../lib/lib579-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib579-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib579-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib579-curl_multibyte.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib579_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib579-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-
-../../lib/lib579-curl_multibyte.obj: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib579_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib579-curl_multibyte.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib579-curl_multibyte.Tpo -c -o ../../lib/lib579-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib579-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib579-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib579-curl_multibyte.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib579_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib579-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-
-lib582-lib582.o: lib582.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib582_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib582-lib582.o -MD -MP -MF $(DEPDIR)/lib582-lib582.Tpo -c -o lib582-lib582.o `test -f 'lib582.c' || echo '$(srcdir)/'`lib582.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib582-lib582.Tpo $(DEPDIR)/lib582-lib582.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib582.c' object='lib582-lib582.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib582_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib582-lib582.o `test -f 'lib582.c' || echo '$(srcdir)/'`lib582.c
-
-lib582-lib582.obj: lib582.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib582_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib582-lib582.obj -MD -MP -MF $(DEPDIR)/lib582-lib582.Tpo -c -o lib582-lib582.obj `if test -f 'lib582.c'; then $(CYGPATH_W) 'lib582.c'; else $(CYGPATH_W) '$(srcdir)/lib582.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib582-lib582.Tpo $(DEPDIR)/lib582-lib582.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib582.c' object='lib582-lib582.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib582_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib582-lib582.obj `if test -f 'lib582.c'; then $(CYGPATH_W) 'lib582.c'; else $(CYGPATH_W) '$(srcdir)/lib582.c'; fi`
-
-../../lib/lib582-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib582_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib582-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib582-timediff.Tpo -c -o ../../lib/lib582-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib582-timediff.Tpo ../../lib/$(DEPDIR)/lib582-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib582-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib582_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib582-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib582-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib582_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib582-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib582-timediff.Tpo -c -o ../../lib/lib582-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib582-timediff.Tpo ../../lib/$(DEPDIR)/lib582-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib582-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib582_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib582-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib582-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib582_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib582-first.o -MD -MP -MF $(DEPDIR)/lib582-first.Tpo -c -o lib582-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib582-first.Tpo $(DEPDIR)/lib582-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib582-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib582_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib582-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib582-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib582_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib582-first.obj -MD -MP -MF $(DEPDIR)/lib582-first.Tpo -c -o lib582-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib582-first.Tpo $(DEPDIR)/lib582-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib582-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib582_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib582-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib582-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib582_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib582-testutil.o -MD -MP -MF $(DEPDIR)/lib582-testutil.Tpo -c -o lib582-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib582-testutil.Tpo $(DEPDIR)/lib582-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib582-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib582_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib582-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib582-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib582_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib582-testutil.obj -MD -MP -MF $(DEPDIR)/lib582-testutil.Tpo -c -o lib582-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib582-testutil.Tpo $(DEPDIR)/lib582-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib582-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib582_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib582-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib582-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib582_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib582-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib582-warnless.Tpo -c -o ../../lib/lib582-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib582-warnless.Tpo ../../lib/$(DEPDIR)/lib582-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib582-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib582_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib582-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib582-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib582_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib582-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib582-warnless.Tpo -c -o ../../lib/lib582-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib582-warnless.Tpo ../../lib/$(DEPDIR)/lib582-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib582-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib582_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib582-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-../../lib/lib582-curl_multibyte.o: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib582_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib582-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/lib582-curl_multibyte.Tpo -c -o ../../lib/lib582-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib582-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib582-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib582-curl_multibyte.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib582_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib582-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-
-../../lib/lib582-curl_multibyte.obj: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib582_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib582-curl_multibyte.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib582-curl_multibyte.Tpo -c -o ../../lib/lib582-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib582-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib582-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib582-curl_multibyte.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib582_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib582-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-
-lib583-lib583.o: lib583.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib583_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib583-lib583.o -MD -MP -MF $(DEPDIR)/lib583-lib583.Tpo -c -o lib583-lib583.o `test -f 'lib583.c' || echo '$(srcdir)/'`lib583.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib583-lib583.Tpo $(DEPDIR)/lib583-lib583.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib583.c' object='lib583-lib583.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib583_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib583-lib583.o `test -f 'lib583.c' || echo '$(srcdir)/'`lib583.c
-
-lib583-lib583.obj: lib583.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib583_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib583-lib583.obj -MD -MP -MF $(DEPDIR)/lib583-lib583.Tpo -c -o lib583-lib583.obj `if test -f 'lib583.c'; then $(CYGPATH_W) 'lib583.c'; else $(CYGPATH_W) '$(srcdir)/lib583.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib583-lib583.Tpo $(DEPDIR)/lib583-lib583.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib583.c' object='lib583-lib583.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib583_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib583-lib583.obj `if test -f 'lib583.c'; then $(CYGPATH_W) 'lib583.c'; else $(CYGPATH_W) '$(srcdir)/lib583.c'; fi`
-
-../../lib/lib583-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib583_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib583-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib583-timediff.Tpo -c -o ../../lib/lib583-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib583-timediff.Tpo ../../lib/$(DEPDIR)/lib583-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib583-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib583_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib583-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib583-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib583_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib583-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib583-timediff.Tpo -c -o ../../lib/lib583-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib583-timediff.Tpo ../../lib/$(DEPDIR)/lib583-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib583-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib583_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib583-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib583-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib583_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib583-first.o -MD -MP -MF $(DEPDIR)/lib583-first.Tpo -c -o lib583-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib583-first.Tpo $(DEPDIR)/lib583-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib583-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib583_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib583-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib583-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib583_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib583-first.obj -MD -MP -MF $(DEPDIR)/lib583-first.Tpo -c -o lib583-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib583-first.Tpo $(DEPDIR)/lib583-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib583-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib583_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib583-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
lib584-lib589.o: lib589.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib584_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib584-lib589.o -MD -MP -MF $(DEPDIR)/lib584-lib589.Tpo -c -o lib584-lib589.o `test -f 'lib589.c' || echo '$(srcdir)/'`lib589.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib584-lib589.Tpo $(DEPDIR)/lib584-lib589.Po
@@ -15041,48 +4988,6 @@ lib585-testtrace.obj: testtrace.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib585_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib585-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-lib586-lib586.o: lib586.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib586_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib586-lib586.o -MD -MP -MF $(DEPDIR)/lib586-lib586.Tpo -c -o lib586-lib586.o `test -f 'lib586.c' || echo '$(srcdir)/'`lib586.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib586-lib586.Tpo $(DEPDIR)/lib586-lib586.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib586.c' object='lib586-lib586.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib586_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib586-lib586.o `test -f 'lib586.c' || echo '$(srcdir)/'`lib586.c
-
-lib586-lib586.obj: lib586.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib586_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib586-lib586.obj -MD -MP -MF $(DEPDIR)/lib586-lib586.Tpo -c -o lib586-lib586.obj `if test -f 'lib586.c'; then $(CYGPATH_W) 'lib586.c'; else $(CYGPATH_W) '$(srcdir)/lib586.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib586-lib586.Tpo $(DEPDIR)/lib586-lib586.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib586.c' object='lib586-lib586.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib586_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib586-lib586.obj `if test -f 'lib586.c'; then $(CYGPATH_W) 'lib586.c'; else $(CYGPATH_W) '$(srcdir)/lib586.c'; fi`
-
-../../lib/lib586-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib586_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib586-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib586-timediff.Tpo -c -o ../../lib/lib586-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib586-timediff.Tpo ../../lib/$(DEPDIR)/lib586-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib586-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib586_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib586-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib586-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib586_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib586-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib586-timediff.Tpo -c -o ../../lib/lib586-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib586-timediff.Tpo ../../lib/$(DEPDIR)/lib586-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib586-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib586_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib586-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib586-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib586_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib586-first.o -MD -MP -MF $(DEPDIR)/lib586-first.Tpo -c -o lib586-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib586-first.Tpo $(DEPDIR)/lib586-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib586-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib586_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib586-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib586-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib586_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib586-first.obj -MD -MP -MF $(DEPDIR)/lib586-first.Tpo -c -o lib586-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib586-first.Tpo $(DEPDIR)/lib586-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib586-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib586_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib586-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
lib587-lib554.o: lib554.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib587_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib587-lib554.o -MD -MP -MF $(DEPDIR)/lib587-lib554.Tpo -c -o lib587-lib554.o `test -f 'lib554.c' || echo '$(srcdir)/'`lib554.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib587-lib554.Tpo $(DEPDIR)/lib587-lib554.Po
@@ -15125,384 +5030,6 @@ lib587-first.obj: first.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib587_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib587-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-lib589-lib589.o: lib589.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib589_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib589-lib589.o -MD -MP -MF $(DEPDIR)/lib589-lib589.Tpo -c -o lib589-lib589.o `test -f 'lib589.c' || echo '$(srcdir)/'`lib589.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib589-lib589.Tpo $(DEPDIR)/lib589-lib589.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib589.c' object='lib589-lib589.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib589_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib589-lib589.o `test -f 'lib589.c' || echo '$(srcdir)/'`lib589.c
-
-lib589-lib589.obj: lib589.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib589_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib589-lib589.obj -MD -MP -MF $(DEPDIR)/lib589-lib589.Tpo -c -o lib589-lib589.obj `if test -f 'lib589.c'; then $(CYGPATH_W) 'lib589.c'; else $(CYGPATH_W) '$(srcdir)/lib589.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib589-lib589.Tpo $(DEPDIR)/lib589-lib589.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib589.c' object='lib589-lib589.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib589_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib589-lib589.obj `if test -f 'lib589.c'; then $(CYGPATH_W) 'lib589.c'; else $(CYGPATH_W) '$(srcdir)/lib589.c'; fi`
-
-../../lib/lib589-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib589_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib589-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib589-timediff.Tpo -c -o ../../lib/lib589-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib589-timediff.Tpo ../../lib/$(DEPDIR)/lib589-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib589-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib589_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib589-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib589-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib589_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib589-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib589-timediff.Tpo -c -o ../../lib/lib589-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib589-timediff.Tpo ../../lib/$(DEPDIR)/lib589-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib589-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib589_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib589-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib589-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib589_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib589-first.o -MD -MP -MF $(DEPDIR)/lib589-first.Tpo -c -o lib589-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib589-first.Tpo $(DEPDIR)/lib589-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib589-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib589_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib589-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib589-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib589_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib589-first.obj -MD -MP -MF $(DEPDIR)/lib589-first.Tpo -c -o lib589-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib589-first.Tpo $(DEPDIR)/lib589-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib589-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib589_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib589-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib590-lib590.o: lib590.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib590_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib590-lib590.o -MD -MP -MF $(DEPDIR)/lib590-lib590.Tpo -c -o lib590-lib590.o `test -f 'lib590.c' || echo '$(srcdir)/'`lib590.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib590-lib590.Tpo $(DEPDIR)/lib590-lib590.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib590.c' object='lib590-lib590.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib590_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib590-lib590.o `test -f 'lib590.c' || echo '$(srcdir)/'`lib590.c
-
-lib590-lib590.obj: lib590.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib590_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib590-lib590.obj -MD -MP -MF $(DEPDIR)/lib590-lib590.Tpo -c -o lib590-lib590.obj `if test -f 'lib590.c'; then $(CYGPATH_W) 'lib590.c'; else $(CYGPATH_W) '$(srcdir)/lib590.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib590-lib590.Tpo $(DEPDIR)/lib590-lib590.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib590.c' object='lib590-lib590.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib590_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib590-lib590.obj `if test -f 'lib590.c'; then $(CYGPATH_W) 'lib590.c'; else $(CYGPATH_W) '$(srcdir)/lib590.c'; fi`
-
-../../lib/lib590-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib590_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib590-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib590-timediff.Tpo -c -o ../../lib/lib590-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib590-timediff.Tpo ../../lib/$(DEPDIR)/lib590-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib590-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib590_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib590-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib590-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib590_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib590-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib590-timediff.Tpo -c -o ../../lib/lib590-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib590-timediff.Tpo ../../lib/$(DEPDIR)/lib590-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib590-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib590_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib590-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib590-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib590_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib590-first.o -MD -MP -MF $(DEPDIR)/lib590-first.Tpo -c -o lib590-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib590-first.Tpo $(DEPDIR)/lib590-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib590-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib590_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib590-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib590-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib590_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib590-first.obj -MD -MP -MF $(DEPDIR)/lib590-first.Tpo -c -o lib590-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib590-first.Tpo $(DEPDIR)/lib590-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib590-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib590_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib590-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib591-lib591.o: lib591.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib591-lib591.o -MD -MP -MF $(DEPDIR)/lib591-lib591.Tpo -c -o lib591-lib591.o `test -f 'lib591.c' || echo '$(srcdir)/'`lib591.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib591-lib591.Tpo $(DEPDIR)/lib591-lib591.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib591.c' object='lib591-lib591.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib591-lib591.o `test -f 'lib591.c' || echo '$(srcdir)/'`lib591.c
-
-lib591-lib591.obj: lib591.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib591-lib591.obj -MD -MP -MF $(DEPDIR)/lib591-lib591.Tpo -c -o lib591-lib591.obj `if test -f 'lib591.c'; then $(CYGPATH_W) 'lib591.c'; else $(CYGPATH_W) '$(srcdir)/lib591.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib591-lib591.Tpo $(DEPDIR)/lib591-lib591.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib591.c' object='lib591-lib591.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib591-lib591.obj `if test -f 'lib591.c'; then $(CYGPATH_W) 'lib591.c'; else $(CYGPATH_W) '$(srcdir)/lib591.c'; fi`
-
-../../lib/lib591-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib591-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib591-timediff.Tpo -c -o ../../lib/lib591-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib591-timediff.Tpo ../../lib/$(DEPDIR)/lib591-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib591-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib591-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib591-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib591-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib591-timediff.Tpo -c -o ../../lib/lib591-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib591-timediff.Tpo ../../lib/$(DEPDIR)/lib591-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib591-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib591-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib591-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib591-first.o -MD -MP -MF $(DEPDIR)/lib591-first.Tpo -c -o lib591-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib591-first.Tpo $(DEPDIR)/lib591-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib591-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib591-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib591-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib591-first.obj -MD -MP -MF $(DEPDIR)/lib591-first.Tpo -c -o lib591-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib591-first.Tpo $(DEPDIR)/lib591-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib591-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib591-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib591-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib591-testutil.o -MD -MP -MF $(DEPDIR)/lib591-testutil.Tpo -c -o lib591-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib591-testutil.Tpo $(DEPDIR)/lib591-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib591-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib591-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib591-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib591-testutil.obj -MD -MP -MF $(DEPDIR)/lib591-testutil.Tpo -c -o lib591-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib591-testutil.Tpo $(DEPDIR)/lib591-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib591-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib591-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib591-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib591-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib591-warnless.Tpo -c -o ../../lib/lib591-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib591-warnless.Tpo ../../lib/$(DEPDIR)/lib591-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib591-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib591-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib591-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib591-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib591-warnless.Tpo -c -o ../../lib/lib591-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib591-warnless.Tpo ../../lib/$(DEPDIR)/lib591-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib591-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib591-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-../../lib/lib591-curl_multibyte.o: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib591-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/lib591-curl_multibyte.Tpo -c -o ../../lib/lib591-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib591-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib591-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib591-curl_multibyte.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib591-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-
-../../lib/lib591-curl_multibyte.obj: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib591-curl_multibyte.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib591-curl_multibyte.Tpo -c -o ../../lib/lib591-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib591-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib591-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib591-curl_multibyte.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib591_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib591-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-
-lib597-lib597.o: lib597.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib597_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib597-lib597.o -MD -MP -MF $(DEPDIR)/lib597-lib597.Tpo -c -o lib597-lib597.o `test -f 'lib597.c' || echo '$(srcdir)/'`lib597.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib597-lib597.Tpo $(DEPDIR)/lib597-lib597.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib597.c' object='lib597-lib597.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib597_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib597-lib597.o `test -f 'lib597.c' || echo '$(srcdir)/'`lib597.c
-
-lib597-lib597.obj: lib597.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib597_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib597-lib597.obj -MD -MP -MF $(DEPDIR)/lib597-lib597.Tpo -c -o lib597-lib597.obj `if test -f 'lib597.c'; then $(CYGPATH_W) 'lib597.c'; else $(CYGPATH_W) '$(srcdir)/lib597.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib597-lib597.Tpo $(DEPDIR)/lib597-lib597.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib597.c' object='lib597-lib597.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib597_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib597-lib597.obj `if test -f 'lib597.c'; then $(CYGPATH_W) 'lib597.c'; else $(CYGPATH_W) '$(srcdir)/lib597.c'; fi`
-
-../../lib/lib597-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib597_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib597-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib597-timediff.Tpo -c -o ../../lib/lib597-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib597-timediff.Tpo ../../lib/$(DEPDIR)/lib597-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib597-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib597_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib597-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib597-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib597_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib597-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib597-timediff.Tpo -c -o ../../lib/lib597-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib597-timediff.Tpo ../../lib/$(DEPDIR)/lib597-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib597-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib597_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib597-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib597-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib597_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib597-first.o -MD -MP -MF $(DEPDIR)/lib597-first.Tpo -c -o lib597-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib597-first.Tpo $(DEPDIR)/lib597-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib597-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib597_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib597-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib597-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib597_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib597-first.obj -MD -MP -MF $(DEPDIR)/lib597-first.Tpo -c -o lib597-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib597-first.Tpo $(DEPDIR)/lib597-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib597-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib597_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib597-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib597-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib597_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib597-testutil.o -MD -MP -MF $(DEPDIR)/lib597-testutil.Tpo -c -o lib597-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib597-testutil.Tpo $(DEPDIR)/lib597-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib597-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib597_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib597-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib597-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib597_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib597-testutil.obj -MD -MP -MF $(DEPDIR)/lib597-testutil.Tpo -c -o lib597-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib597-testutil.Tpo $(DEPDIR)/lib597-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib597-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib597_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib597-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib597-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib597_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib597-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib597-warnless.Tpo -c -o ../../lib/lib597-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib597-warnless.Tpo ../../lib/$(DEPDIR)/lib597-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib597-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib597_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib597-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib597-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib597_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib597-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib597-warnless.Tpo -c -o ../../lib/lib597-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib597-warnless.Tpo ../../lib/$(DEPDIR)/lib597-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib597-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib597_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib597-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib598-lib598.o: lib598.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib598_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib598-lib598.o -MD -MP -MF $(DEPDIR)/lib598-lib598.Tpo -c -o lib598-lib598.o `test -f 'lib598.c' || echo '$(srcdir)/'`lib598.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib598-lib598.Tpo $(DEPDIR)/lib598-lib598.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib598.c' object='lib598-lib598.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib598_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib598-lib598.o `test -f 'lib598.c' || echo '$(srcdir)/'`lib598.c
-
-lib598-lib598.obj: lib598.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib598_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib598-lib598.obj -MD -MP -MF $(DEPDIR)/lib598-lib598.Tpo -c -o lib598-lib598.obj `if test -f 'lib598.c'; then $(CYGPATH_W) 'lib598.c'; else $(CYGPATH_W) '$(srcdir)/lib598.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib598-lib598.Tpo $(DEPDIR)/lib598-lib598.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib598.c' object='lib598-lib598.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib598_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib598-lib598.obj `if test -f 'lib598.c'; then $(CYGPATH_W) 'lib598.c'; else $(CYGPATH_W) '$(srcdir)/lib598.c'; fi`
-
-../../lib/lib598-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib598_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib598-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib598-timediff.Tpo -c -o ../../lib/lib598-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib598-timediff.Tpo ../../lib/$(DEPDIR)/lib598-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib598-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib598_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib598-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib598-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib598_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib598-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib598-timediff.Tpo -c -o ../../lib/lib598-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib598-timediff.Tpo ../../lib/$(DEPDIR)/lib598-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib598-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib598_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib598-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib598-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib598_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib598-first.o -MD -MP -MF $(DEPDIR)/lib598-first.Tpo -c -o lib598-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib598-first.Tpo $(DEPDIR)/lib598-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib598-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib598_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib598-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib598-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib598_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib598-first.obj -MD -MP -MF $(DEPDIR)/lib598-first.Tpo -c -o lib598-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib598-first.Tpo $(DEPDIR)/lib598-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib598-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib598_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib598-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib599-lib599.o: lib599.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib599_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib599-lib599.o -MD -MP -MF $(DEPDIR)/lib599-lib599.Tpo -c -o lib599-lib599.o `test -f 'lib599.c' || echo '$(srcdir)/'`lib599.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib599-lib599.Tpo $(DEPDIR)/lib599-lib599.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib599.c' object='lib599-lib599.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib599_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib599-lib599.o `test -f 'lib599.c' || echo '$(srcdir)/'`lib599.c
-
-lib599-lib599.obj: lib599.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib599_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib599-lib599.obj -MD -MP -MF $(DEPDIR)/lib599-lib599.Tpo -c -o lib599-lib599.obj `if test -f 'lib599.c'; then $(CYGPATH_W) 'lib599.c'; else $(CYGPATH_W) '$(srcdir)/lib599.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib599-lib599.Tpo $(DEPDIR)/lib599-lib599.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib599.c' object='lib599-lib599.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib599_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib599-lib599.obj `if test -f 'lib599.c'; then $(CYGPATH_W) 'lib599.c'; else $(CYGPATH_W) '$(srcdir)/lib599.c'; fi`
-
-../../lib/lib599-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib599_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib599-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib599-timediff.Tpo -c -o ../../lib/lib599-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib599-timediff.Tpo ../../lib/$(DEPDIR)/lib599-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib599-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib599_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib599-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib599-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib599_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib599-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib599-timediff.Tpo -c -o ../../lib/lib599-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib599-timediff.Tpo ../../lib/$(DEPDIR)/lib599-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib599-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib599_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib599-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib599-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib599_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib599-first.o -MD -MP -MF $(DEPDIR)/lib599-first.Tpo -c -o lib599-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib599-first.Tpo $(DEPDIR)/lib599-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib599-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib599_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib599-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib599-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib599_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib599-first.obj -MD -MP -MF $(DEPDIR)/lib599-first.Tpo -c -o lib599-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib599-first.Tpo $(DEPDIR)/lib599-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib599-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib599_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib599-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-../../lib/lib599-curl_multibyte.o: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib599_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib599-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/lib599-curl_multibyte.Tpo -c -o ../../lib/lib599-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib599-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib599-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib599-curl_multibyte.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib599_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib599-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-
-../../lib/lib599-curl_multibyte.obj: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib599_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib599-curl_multibyte.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib599-curl_multibyte.Tpo -c -o ../../lib/lib599-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib599-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib599-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib599-curl_multibyte.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib599_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib599-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-
-lib643-lib643.o: lib643.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib643_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib643-lib643.o -MD -MP -MF $(DEPDIR)/lib643-lib643.Tpo -c -o lib643-lib643.o `test -f 'lib643.c' || echo '$(srcdir)/'`lib643.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib643-lib643.Tpo $(DEPDIR)/lib643-lib643.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib643.c' object='lib643-lib643.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib643_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib643-lib643.o `test -f 'lib643.c' || echo '$(srcdir)/'`lib643.c
-
-lib643-lib643.obj: lib643.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib643_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib643-lib643.obj -MD -MP -MF $(DEPDIR)/lib643-lib643.Tpo -c -o lib643-lib643.obj `if test -f 'lib643.c'; then $(CYGPATH_W) 'lib643.c'; else $(CYGPATH_W) '$(srcdir)/lib643.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib643-lib643.Tpo $(DEPDIR)/lib643-lib643.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib643.c' object='lib643-lib643.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib643_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib643-lib643.obj `if test -f 'lib643.c'; then $(CYGPATH_W) 'lib643.c'; else $(CYGPATH_W) '$(srcdir)/lib643.c'; fi`
-
-../../lib/lib643-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib643_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib643-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib643-timediff.Tpo -c -o ../../lib/lib643-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib643-timediff.Tpo ../../lib/$(DEPDIR)/lib643-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib643-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib643_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib643-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib643-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib643_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib643-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib643-timediff.Tpo -c -o ../../lib/lib643-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib643-timediff.Tpo ../../lib/$(DEPDIR)/lib643-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib643-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib643_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib643-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib643-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib643_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib643-first.o -MD -MP -MF $(DEPDIR)/lib643-first.Tpo -c -o lib643-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib643-first.Tpo $(DEPDIR)/lib643-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib643-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib643_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib643-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib643-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib643_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib643-first.obj -MD -MP -MF $(DEPDIR)/lib643-first.Tpo -c -o lib643-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib643-first.Tpo $(DEPDIR)/lib643-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib643-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib643_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib643-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
lib645-lib643.o: lib643.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib645_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib645-lib643.o -MD -MP -MF $(DEPDIR)/lib645-lib643.Tpo -c -o lib645-lib643.o `test -f 'lib643.c' || echo '$(srcdir)/'`lib643.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib645-lib643.Tpo $(DEPDIR)/lib645-lib643.Po
@@ -15545,622 +5072,6 @@ lib645-first.obj: first.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib645_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib645-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-lib650-lib650.o: lib650.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib650_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib650-lib650.o -MD -MP -MF $(DEPDIR)/lib650-lib650.Tpo -c -o lib650-lib650.o `test -f 'lib650.c' || echo '$(srcdir)/'`lib650.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib650-lib650.Tpo $(DEPDIR)/lib650-lib650.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib650.c' object='lib650-lib650.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib650_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib650-lib650.o `test -f 'lib650.c' || echo '$(srcdir)/'`lib650.c
-
-lib650-lib650.obj: lib650.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib650_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib650-lib650.obj -MD -MP -MF $(DEPDIR)/lib650-lib650.Tpo -c -o lib650-lib650.obj `if test -f 'lib650.c'; then $(CYGPATH_W) 'lib650.c'; else $(CYGPATH_W) '$(srcdir)/lib650.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib650-lib650.Tpo $(DEPDIR)/lib650-lib650.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib650.c' object='lib650-lib650.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib650_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib650-lib650.obj `if test -f 'lib650.c'; then $(CYGPATH_W) 'lib650.c'; else $(CYGPATH_W) '$(srcdir)/lib650.c'; fi`
-
-../../lib/lib650-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib650_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib650-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib650-timediff.Tpo -c -o ../../lib/lib650-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib650-timediff.Tpo ../../lib/$(DEPDIR)/lib650-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib650-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib650_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib650-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib650-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib650_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib650-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib650-timediff.Tpo -c -o ../../lib/lib650-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib650-timediff.Tpo ../../lib/$(DEPDIR)/lib650-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib650-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib650_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib650-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib650-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib650_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib650-first.o -MD -MP -MF $(DEPDIR)/lib650-first.Tpo -c -o lib650-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib650-first.Tpo $(DEPDIR)/lib650-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib650-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib650_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib650-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib650-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib650_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib650-first.obj -MD -MP -MF $(DEPDIR)/lib650-first.Tpo -c -o lib650-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib650-first.Tpo $(DEPDIR)/lib650-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib650-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib650_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib650-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib651-lib651.o: lib651.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib651_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib651-lib651.o -MD -MP -MF $(DEPDIR)/lib651-lib651.Tpo -c -o lib651-lib651.o `test -f 'lib651.c' || echo '$(srcdir)/'`lib651.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib651-lib651.Tpo $(DEPDIR)/lib651-lib651.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib651.c' object='lib651-lib651.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib651_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib651-lib651.o `test -f 'lib651.c' || echo '$(srcdir)/'`lib651.c
-
-lib651-lib651.obj: lib651.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib651_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib651-lib651.obj -MD -MP -MF $(DEPDIR)/lib651-lib651.Tpo -c -o lib651-lib651.obj `if test -f 'lib651.c'; then $(CYGPATH_W) 'lib651.c'; else $(CYGPATH_W) '$(srcdir)/lib651.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib651-lib651.Tpo $(DEPDIR)/lib651-lib651.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib651.c' object='lib651-lib651.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib651_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib651-lib651.obj `if test -f 'lib651.c'; then $(CYGPATH_W) 'lib651.c'; else $(CYGPATH_W) '$(srcdir)/lib651.c'; fi`
-
-../../lib/lib651-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib651_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib651-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib651-timediff.Tpo -c -o ../../lib/lib651-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib651-timediff.Tpo ../../lib/$(DEPDIR)/lib651-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib651-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib651_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib651-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib651-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib651_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib651-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib651-timediff.Tpo -c -o ../../lib/lib651-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib651-timediff.Tpo ../../lib/$(DEPDIR)/lib651-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib651-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib651_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib651-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib651-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib651_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib651-first.o -MD -MP -MF $(DEPDIR)/lib651-first.Tpo -c -o lib651-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib651-first.Tpo $(DEPDIR)/lib651-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib651-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib651_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib651-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib651-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib651_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib651-first.obj -MD -MP -MF $(DEPDIR)/lib651-first.Tpo -c -o lib651-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib651-first.Tpo $(DEPDIR)/lib651-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib651-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib651_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib651-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib652-lib652.o: lib652.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib652_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib652-lib652.o -MD -MP -MF $(DEPDIR)/lib652-lib652.Tpo -c -o lib652-lib652.o `test -f 'lib652.c' || echo '$(srcdir)/'`lib652.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib652-lib652.Tpo $(DEPDIR)/lib652-lib652.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib652.c' object='lib652-lib652.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib652_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib652-lib652.o `test -f 'lib652.c' || echo '$(srcdir)/'`lib652.c
-
-lib652-lib652.obj: lib652.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib652_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib652-lib652.obj -MD -MP -MF $(DEPDIR)/lib652-lib652.Tpo -c -o lib652-lib652.obj `if test -f 'lib652.c'; then $(CYGPATH_W) 'lib652.c'; else $(CYGPATH_W) '$(srcdir)/lib652.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib652-lib652.Tpo $(DEPDIR)/lib652-lib652.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib652.c' object='lib652-lib652.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib652_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib652-lib652.obj `if test -f 'lib652.c'; then $(CYGPATH_W) 'lib652.c'; else $(CYGPATH_W) '$(srcdir)/lib652.c'; fi`
-
-../../lib/lib652-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib652_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib652-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib652-timediff.Tpo -c -o ../../lib/lib652-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib652-timediff.Tpo ../../lib/$(DEPDIR)/lib652-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib652-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib652_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib652-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib652-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib652_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib652-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib652-timediff.Tpo -c -o ../../lib/lib652-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib652-timediff.Tpo ../../lib/$(DEPDIR)/lib652-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib652-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib652_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib652-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib652-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib652_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib652-first.o -MD -MP -MF $(DEPDIR)/lib652-first.Tpo -c -o lib652-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib652-first.Tpo $(DEPDIR)/lib652-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib652-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib652_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib652-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib652-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib652_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib652-first.obj -MD -MP -MF $(DEPDIR)/lib652-first.Tpo -c -o lib652-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib652-first.Tpo $(DEPDIR)/lib652-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib652-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib652_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib652-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib653-lib653.o: lib653.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib653_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib653-lib653.o -MD -MP -MF $(DEPDIR)/lib653-lib653.Tpo -c -o lib653-lib653.o `test -f 'lib653.c' || echo '$(srcdir)/'`lib653.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib653-lib653.Tpo $(DEPDIR)/lib653-lib653.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib653.c' object='lib653-lib653.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib653_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib653-lib653.o `test -f 'lib653.c' || echo '$(srcdir)/'`lib653.c
-
-lib653-lib653.obj: lib653.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib653_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib653-lib653.obj -MD -MP -MF $(DEPDIR)/lib653-lib653.Tpo -c -o lib653-lib653.obj `if test -f 'lib653.c'; then $(CYGPATH_W) 'lib653.c'; else $(CYGPATH_W) '$(srcdir)/lib653.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib653-lib653.Tpo $(DEPDIR)/lib653-lib653.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib653.c' object='lib653-lib653.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib653_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib653-lib653.obj `if test -f 'lib653.c'; then $(CYGPATH_W) 'lib653.c'; else $(CYGPATH_W) '$(srcdir)/lib653.c'; fi`
-
-../../lib/lib653-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib653_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib653-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib653-timediff.Tpo -c -o ../../lib/lib653-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib653-timediff.Tpo ../../lib/$(DEPDIR)/lib653-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib653-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib653_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib653-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib653-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib653_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib653-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib653-timediff.Tpo -c -o ../../lib/lib653-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib653-timediff.Tpo ../../lib/$(DEPDIR)/lib653-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib653-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib653_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib653-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib653-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib653_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib653-first.o -MD -MP -MF $(DEPDIR)/lib653-first.Tpo -c -o lib653-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib653-first.Tpo $(DEPDIR)/lib653-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib653-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib653_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib653-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib653-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib653_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib653-first.obj -MD -MP -MF $(DEPDIR)/lib653-first.Tpo -c -o lib653-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib653-first.Tpo $(DEPDIR)/lib653-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib653-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib653_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib653-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib654-lib654.o: lib654.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib654_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib654-lib654.o -MD -MP -MF $(DEPDIR)/lib654-lib654.Tpo -c -o lib654-lib654.o `test -f 'lib654.c' || echo '$(srcdir)/'`lib654.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib654-lib654.Tpo $(DEPDIR)/lib654-lib654.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib654.c' object='lib654-lib654.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib654_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib654-lib654.o `test -f 'lib654.c' || echo '$(srcdir)/'`lib654.c
-
-lib654-lib654.obj: lib654.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib654_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib654-lib654.obj -MD -MP -MF $(DEPDIR)/lib654-lib654.Tpo -c -o lib654-lib654.obj `if test -f 'lib654.c'; then $(CYGPATH_W) 'lib654.c'; else $(CYGPATH_W) '$(srcdir)/lib654.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib654-lib654.Tpo $(DEPDIR)/lib654-lib654.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib654.c' object='lib654-lib654.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib654_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib654-lib654.obj `if test -f 'lib654.c'; then $(CYGPATH_W) 'lib654.c'; else $(CYGPATH_W) '$(srcdir)/lib654.c'; fi`
-
-../../lib/lib654-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib654_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib654-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib654-timediff.Tpo -c -o ../../lib/lib654-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib654-timediff.Tpo ../../lib/$(DEPDIR)/lib654-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib654-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib654_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib654-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib654-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib654_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib654-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib654-timediff.Tpo -c -o ../../lib/lib654-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib654-timediff.Tpo ../../lib/$(DEPDIR)/lib654-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib654-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib654_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib654-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib654-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib654_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib654-first.o -MD -MP -MF $(DEPDIR)/lib654-first.Tpo -c -o lib654-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib654-first.Tpo $(DEPDIR)/lib654-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib654-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib654_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib654-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib654-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib654_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib654-first.obj -MD -MP -MF $(DEPDIR)/lib654-first.Tpo -c -o lib654-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib654-first.Tpo $(DEPDIR)/lib654-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib654-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib654_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib654-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib655-lib655.o: lib655.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib655_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib655-lib655.o -MD -MP -MF $(DEPDIR)/lib655-lib655.Tpo -c -o lib655-lib655.o `test -f 'lib655.c' || echo '$(srcdir)/'`lib655.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib655-lib655.Tpo $(DEPDIR)/lib655-lib655.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib655.c' object='lib655-lib655.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib655_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib655-lib655.o `test -f 'lib655.c' || echo '$(srcdir)/'`lib655.c
-
-lib655-lib655.obj: lib655.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib655_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib655-lib655.obj -MD -MP -MF $(DEPDIR)/lib655-lib655.Tpo -c -o lib655-lib655.obj `if test -f 'lib655.c'; then $(CYGPATH_W) 'lib655.c'; else $(CYGPATH_W) '$(srcdir)/lib655.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib655-lib655.Tpo $(DEPDIR)/lib655-lib655.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib655.c' object='lib655-lib655.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib655_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib655-lib655.obj `if test -f 'lib655.c'; then $(CYGPATH_W) 'lib655.c'; else $(CYGPATH_W) '$(srcdir)/lib655.c'; fi`
-
-../../lib/lib655-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib655_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib655-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib655-timediff.Tpo -c -o ../../lib/lib655-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib655-timediff.Tpo ../../lib/$(DEPDIR)/lib655-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib655-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib655_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib655-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib655-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib655_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib655-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib655-timediff.Tpo -c -o ../../lib/lib655-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib655-timediff.Tpo ../../lib/$(DEPDIR)/lib655-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib655-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib655_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib655-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib655-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib655_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib655-first.o -MD -MP -MF $(DEPDIR)/lib655-first.Tpo -c -o lib655-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib655-first.Tpo $(DEPDIR)/lib655-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib655-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib655_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib655-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib655-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib655_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib655-first.obj -MD -MP -MF $(DEPDIR)/lib655-first.Tpo -c -o lib655-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib655-first.Tpo $(DEPDIR)/lib655-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib655-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib655_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib655-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib658-lib658.o: lib658.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib658_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib658-lib658.o -MD -MP -MF $(DEPDIR)/lib658-lib658.Tpo -c -o lib658-lib658.o `test -f 'lib658.c' || echo '$(srcdir)/'`lib658.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib658-lib658.Tpo $(DEPDIR)/lib658-lib658.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib658.c' object='lib658-lib658.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib658_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib658-lib658.o `test -f 'lib658.c' || echo '$(srcdir)/'`lib658.c
-
-lib658-lib658.obj: lib658.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib658_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib658-lib658.obj -MD -MP -MF $(DEPDIR)/lib658-lib658.Tpo -c -o lib658-lib658.obj `if test -f 'lib658.c'; then $(CYGPATH_W) 'lib658.c'; else $(CYGPATH_W) '$(srcdir)/lib658.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib658-lib658.Tpo $(DEPDIR)/lib658-lib658.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib658.c' object='lib658-lib658.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib658_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib658-lib658.obj `if test -f 'lib658.c'; then $(CYGPATH_W) 'lib658.c'; else $(CYGPATH_W) '$(srcdir)/lib658.c'; fi`
-
-../../lib/lib658-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib658_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib658-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib658-timediff.Tpo -c -o ../../lib/lib658-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib658-timediff.Tpo ../../lib/$(DEPDIR)/lib658-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib658-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib658_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib658-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib658-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib658_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib658-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib658-timediff.Tpo -c -o ../../lib/lib658-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib658-timediff.Tpo ../../lib/$(DEPDIR)/lib658-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib658-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib658_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib658-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib658-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib658_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib658-first.o -MD -MP -MF $(DEPDIR)/lib658-first.Tpo -c -o lib658-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib658-first.Tpo $(DEPDIR)/lib658-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib658-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib658_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib658-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib658-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib658_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib658-first.obj -MD -MP -MF $(DEPDIR)/lib658-first.Tpo -c -o lib658-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib658-first.Tpo $(DEPDIR)/lib658-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib658-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib658_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib658-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib658-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib658_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib658-testutil.o -MD -MP -MF $(DEPDIR)/lib658-testutil.Tpo -c -o lib658-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib658-testutil.Tpo $(DEPDIR)/lib658-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib658-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib658_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib658-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib658-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib658_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib658-testutil.obj -MD -MP -MF $(DEPDIR)/lib658-testutil.Tpo -c -o lib658-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib658-testutil.Tpo $(DEPDIR)/lib658-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib658-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib658_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib658-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib658-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib658_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib658-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib658-warnless.Tpo -c -o ../../lib/lib658-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib658-warnless.Tpo ../../lib/$(DEPDIR)/lib658-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib658-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib658_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib658-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib658-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib658_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib658-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib658-warnless.Tpo -c -o ../../lib/lib658-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib658-warnless.Tpo ../../lib/$(DEPDIR)/lib658-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib658-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib658_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib658-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib659-lib659.o: lib659.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib659_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib659-lib659.o -MD -MP -MF $(DEPDIR)/lib659-lib659.Tpo -c -o lib659-lib659.o `test -f 'lib659.c' || echo '$(srcdir)/'`lib659.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib659-lib659.Tpo $(DEPDIR)/lib659-lib659.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib659.c' object='lib659-lib659.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib659_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib659-lib659.o `test -f 'lib659.c' || echo '$(srcdir)/'`lib659.c
-
-lib659-lib659.obj: lib659.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib659_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib659-lib659.obj -MD -MP -MF $(DEPDIR)/lib659-lib659.Tpo -c -o lib659-lib659.obj `if test -f 'lib659.c'; then $(CYGPATH_W) 'lib659.c'; else $(CYGPATH_W) '$(srcdir)/lib659.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib659-lib659.Tpo $(DEPDIR)/lib659-lib659.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib659.c' object='lib659-lib659.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib659_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib659-lib659.obj `if test -f 'lib659.c'; then $(CYGPATH_W) 'lib659.c'; else $(CYGPATH_W) '$(srcdir)/lib659.c'; fi`
-
-../../lib/lib659-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib659_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib659-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib659-timediff.Tpo -c -o ../../lib/lib659-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib659-timediff.Tpo ../../lib/$(DEPDIR)/lib659-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib659-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib659_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib659-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib659-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib659_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib659-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib659-timediff.Tpo -c -o ../../lib/lib659-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib659-timediff.Tpo ../../lib/$(DEPDIR)/lib659-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib659-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib659_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib659-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib659-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib659_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib659-first.o -MD -MP -MF $(DEPDIR)/lib659-first.Tpo -c -o lib659-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib659-first.Tpo $(DEPDIR)/lib659-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib659-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib659_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib659-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib659-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib659_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib659-first.obj -MD -MP -MF $(DEPDIR)/lib659-first.Tpo -c -o lib659-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib659-first.Tpo $(DEPDIR)/lib659-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib659-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib659_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib659-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib659-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib659_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib659-testutil.o -MD -MP -MF $(DEPDIR)/lib659-testutil.Tpo -c -o lib659-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib659-testutil.Tpo $(DEPDIR)/lib659-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib659-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib659_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib659-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib659-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib659_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib659-testutil.obj -MD -MP -MF $(DEPDIR)/lib659-testutil.Tpo -c -o lib659-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib659-testutil.Tpo $(DEPDIR)/lib659-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib659-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib659_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib659-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib659-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib659_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib659-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib659-warnless.Tpo -c -o ../../lib/lib659-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib659-warnless.Tpo ../../lib/$(DEPDIR)/lib659-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib659-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib659_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib659-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib659-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib659_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib659-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib659-warnless.Tpo -c -o ../../lib/lib659-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib659-warnless.Tpo ../../lib/$(DEPDIR)/lib659-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib659-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib659_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib659-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib661-lib661.o: lib661.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib661_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib661-lib661.o -MD -MP -MF $(DEPDIR)/lib661-lib661.Tpo -c -o lib661-lib661.o `test -f 'lib661.c' || echo '$(srcdir)/'`lib661.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib661-lib661.Tpo $(DEPDIR)/lib661-lib661.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib661.c' object='lib661-lib661.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib661_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib661-lib661.o `test -f 'lib661.c' || echo '$(srcdir)/'`lib661.c
-
-lib661-lib661.obj: lib661.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib661_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib661-lib661.obj -MD -MP -MF $(DEPDIR)/lib661-lib661.Tpo -c -o lib661-lib661.obj `if test -f 'lib661.c'; then $(CYGPATH_W) 'lib661.c'; else $(CYGPATH_W) '$(srcdir)/lib661.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib661-lib661.Tpo $(DEPDIR)/lib661-lib661.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib661.c' object='lib661-lib661.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib661_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib661-lib661.obj `if test -f 'lib661.c'; then $(CYGPATH_W) 'lib661.c'; else $(CYGPATH_W) '$(srcdir)/lib661.c'; fi`
-
-../../lib/lib661-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib661_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib661-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib661-timediff.Tpo -c -o ../../lib/lib661-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib661-timediff.Tpo ../../lib/$(DEPDIR)/lib661-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib661-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib661_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib661-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib661-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib661_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib661-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib661-timediff.Tpo -c -o ../../lib/lib661-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib661-timediff.Tpo ../../lib/$(DEPDIR)/lib661-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib661-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib661_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib661-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib661-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib661_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib661-first.o -MD -MP -MF $(DEPDIR)/lib661-first.Tpo -c -o lib661-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib661-first.Tpo $(DEPDIR)/lib661-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib661-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib661_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib661-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib661-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib661_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib661-first.obj -MD -MP -MF $(DEPDIR)/lib661-first.Tpo -c -o lib661-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib661-first.Tpo $(DEPDIR)/lib661-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib661-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib661_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib661-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib666-lib666.o: lib666.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib666_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib666-lib666.o -MD -MP -MF $(DEPDIR)/lib666-lib666.Tpo -c -o lib666-lib666.o `test -f 'lib666.c' || echo '$(srcdir)/'`lib666.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib666-lib666.Tpo $(DEPDIR)/lib666-lib666.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib666.c' object='lib666-lib666.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib666_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib666-lib666.o `test -f 'lib666.c' || echo '$(srcdir)/'`lib666.c
-
-lib666-lib666.obj: lib666.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib666_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib666-lib666.obj -MD -MP -MF $(DEPDIR)/lib666-lib666.Tpo -c -o lib666-lib666.obj `if test -f 'lib666.c'; then $(CYGPATH_W) 'lib666.c'; else $(CYGPATH_W) '$(srcdir)/lib666.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib666-lib666.Tpo $(DEPDIR)/lib666-lib666.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib666.c' object='lib666-lib666.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib666_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib666-lib666.obj `if test -f 'lib666.c'; then $(CYGPATH_W) 'lib666.c'; else $(CYGPATH_W) '$(srcdir)/lib666.c'; fi`
-
-../../lib/lib666-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib666_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib666-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib666-timediff.Tpo -c -o ../../lib/lib666-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib666-timediff.Tpo ../../lib/$(DEPDIR)/lib666-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib666-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib666_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib666-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib666-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib666_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib666-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib666-timediff.Tpo -c -o ../../lib/lib666-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib666-timediff.Tpo ../../lib/$(DEPDIR)/lib666-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib666-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib666_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib666-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib666-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib666_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib666-first.o -MD -MP -MF $(DEPDIR)/lib666-first.Tpo -c -o lib666-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib666-first.Tpo $(DEPDIR)/lib666-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib666-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib666_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib666-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib666-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib666_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib666-first.obj -MD -MP -MF $(DEPDIR)/lib666-first.Tpo -c -o lib666-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib666-first.Tpo $(DEPDIR)/lib666-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib666-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib666_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib666-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib667-lib667.o: lib667.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib667_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib667-lib667.o -MD -MP -MF $(DEPDIR)/lib667-lib667.Tpo -c -o lib667-lib667.o `test -f 'lib667.c' || echo '$(srcdir)/'`lib667.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib667-lib667.Tpo $(DEPDIR)/lib667-lib667.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib667.c' object='lib667-lib667.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib667_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib667-lib667.o `test -f 'lib667.c' || echo '$(srcdir)/'`lib667.c
-
-lib667-lib667.obj: lib667.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib667_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib667-lib667.obj -MD -MP -MF $(DEPDIR)/lib667-lib667.Tpo -c -o lib667-lib667.obj `if test -f 'lib667.c'; then $(CYGPATH_W) 'lib667.c'; else $(CYGPATH_W) '$(srcdir)/lib667.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib667-lib667.Tpo $(DEPDIR)/lib667-lib667.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib667.c' object='lib667-lib667.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib667_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib667-lib667.obj `if test -f 'lib667.c'; then $(CYGPATH_W) 'lib667.c'; else $(CYGPATH_W) '$(srcdir)/lib667.c'; fi`
-
-../../lib/lib667-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib667_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib667-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib667-timediff.Tpo -c -o ../../lib/lib667-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib667-timediff.Tpo ../../lib/$(DEPDIR)/lib667-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib667-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib667_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib667-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib667-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib667_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib667-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib667-timediff.Tpo -c -o ../../lib/lib667-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib667-timediff.Tpo ../../lib/$(DEPDIR)/lib667-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib667-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib667_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib667-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib667-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib667_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib667-first.o -MD -MP -MF $(DEPDIR)/lib667-first.Tpo -c -o lib667-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib667-first.Tpo $(DEPDIR)/lib667-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib667-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib667_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib667-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib667-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib667_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib667-first.obj -MD -MP -MF $(DEPDIR)/lib667-first.Tpo -c -o lib667-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib667-first.Tpo $(DEPDIR)/lib667-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib667-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib667_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib667-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib667-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib667_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib667-testutil.o -MD -MP -MF $(DEPDIR)/lib667-testutil.Tpo -c -o lib667-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib667-testutil.Tpo $(DEPDIR)/lib667-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib667-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib667_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib667-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib667-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib667_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib667-testutil.obj -MD -MP -MF $(DEPDIR)/lib667-testutil.Tpo -c -o lib667-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib667-testutil.Tpo $(DEPDIR)/lib667-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib667-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib667_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib667-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib667-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib667_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib667-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib667-warnless.Tpo -c -o ../../lib/lib667-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib667-warnless.Tpo ../../lib/$(DEPDIR)/lib667-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib667-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib667_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib667-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib667-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib667_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib667-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib667-warnless.Tpo -c -o ../../lib/lib667-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib667-warnless.Tpo ../../lib/$(DEPDIR)/lib667-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib667-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib667_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib667-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib668-lib668.o: lib668.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib668_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib668-lib668.o -MD -MP -MF $(DEPDIR)/lib668-lib668.Tpo -c -o lib668-lib668.o `test -f 'lib668.c' || echo '$(srcdir)/'`lib668.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib668-lib668.Tpo $(DEPDIR)/lib668-lib668.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib668.c' object='lib668-lib668.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib668_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib668-lib668.o `test -f 'lib668.c' || echo '$(srcdir)/'`lib668.c
-
-lib668-lib668.obj: lib668.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib668_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib668-lib668.obj -MD -MP -MF $(DEPDIR)/lib668-lib668.Tpo -c -o lib668-lib668.obj `if test -f 'lib668.c'; then $(CYGPATH_W) 'lib668.c'; else $(CYGPATH_W) '$(srcdir)/lib668.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib668-lib668.Tpo $(DEPDIR)/lib668-lib668.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib668.c' object='lib668-lib668.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib668_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib668-lib668.obj `if test -f 'lib668.c'; then $(CYGPATH_W) 'lib668.c'; else $(CYGPATH_W) '$(srcdir)/lib668.c'; fi`
-
-../../lib/lib668-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib668_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib668-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib668-timediff.Tpo -c -o ../../lib/lib668-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib668-timediff.Tpo ../../lib/$(DEPDIR)/lib668-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib668-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib668_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib668-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib668-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib668_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib668-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib668-timediff.Tpo -c -o ../../lib/lib668-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib668-timediff.Tpo ../../lib/$(DEPDIR)/lib668-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib668-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib668_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib668-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib668-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib668_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib668-first.o -MD -MP -MF $(DEPDIR)/lib668-first.Tpo -c -o lib668-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib668-first.Tpo $(DEPDIR)/lib668-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib668-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib668_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib668-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib668-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib668_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib668-first.obj -MD -MP -MF $(DEPDIR)/lib668-first.Tpo -c -o lib668-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib668-first.Tpo $(DEPDIR)/lib668-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib668-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib668_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib668-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib668-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib668_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib668-testutil.o -MD -MP -MF $(DEPDIR)/lib668-testutil.Tpo -c -o lib668-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib668-testutil.Tpo $(DEPDIR)/lib668-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib668-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib668_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib668-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib668-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib668_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib668-testutil.obj -MD -MP -MF $(DEPDIR)/lib668-testutil.Tpo -c -o lib668-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib668-testutil.Tpo $(DEPDIR)/lib668-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib668-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib668_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib668-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib668-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib668_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib668-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib668-warnless.Tpo -c -o ../../lib/lib668-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib668-warnless.Tpo ../../lib/$(DEPDIR)/lib668-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib668-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib668_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib668-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib668-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib668_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib668-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib668-warnless.Tpo -c -o ../../lib/lib668-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib668-warnless.Tpo ../../lib/$(DEPDIR)/lib668-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib668-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib668_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib668-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
lib670-lib670.o: lib670.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib670_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib670-lib670.o -MD -MP -MF $(DEPDIR)/lib670-lib670.Tpo -c -o lib670-lib670.o `test -f 'lib670.c' || echo '$(srcdir)/'`lib670.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib670-lib670.Tpo $(DEPDIR)/lib670-lib670.Po
@@ -16371,566 +5282,6 @@ lib672-testutil.obj: testutil.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib672_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib672-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-lib673-lib670.o: lib670.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib673_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib673-lib670.o -MD -MP -MF $(DEPDIR)/lib673-lib670.Tpo -c -o lib673-lib670.o `test -f 'lib670.c' || echo '$(srcdir)/'`lib670.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib673-lib670.Tpo $(DEPDIR)/lib673-lib670.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib670.c' object='lib673-lib670.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib673_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib673-lib670.o `test -f 'lib670.c' || echo '$(srcdir)/'`lib670.c
-
-lib673-lib670.obj: lib670.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib673_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib673-lib670.obj -MD -MP -MF $(DEPDIR)/lib673-lib670.Tpo -c -o lib673-lib670.obj `if test -f 'lib670.c'; then $(CYGPATH_W) 'lib670.c'; else $(CYGPATH_W) '$(srcdir)/lib670.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib673-lib670.Tpo $(DEPDIR)/lib673-lib670.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib670.c' object='lib673-lib670.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib673_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib673-lib670.obj `if test -f 'lib670.c'; then $(CYGPATH_W) 'lib670.c'; else $(CYGPATH_W) '$(srcdir)/lib670.c'; fi`
-
-../../lib/lib673-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib673_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib673-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib673-timediff.Tpo -c -o ../../lib/lib673-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib673-timediff.Tpo ../../lib/$(DEPDIR)/lib673-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib673-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib673_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib673-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib673-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib673_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib673-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib673-timediff.Tpo -c -o ../../lib/lib673-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib673-timediff.Tpo ../../lib/$(DEPDIR)/lib673-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib673-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib673_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib673-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib673-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib673_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib673-first.o -MD -MP -MF $(DEPDIR)/lib673-first.Tpo -c -o lib673-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib673-first.Tpo $(DEPDIR)/lib673-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib673-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib673_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib673-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib673-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib673_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib673-first.obj -MD -MP -MF $(DEPDIR)/lib673-first.Tpo -c -o lib673-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib673-first.Tpo $(DEPDIR)/lib673-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib673-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib673_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib673-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib673-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib673_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib673-testutil.o -MD -MP -MF $(DEPDIR)/lib673-testutil.Tpo -c -o lib673-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib673-testutil.Tpo $(DEPDIR)/lib673-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib673-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib673_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib673-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib673-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib673_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib673-testutil.obj -MD -MP -MF $(DEPDIR)/lib673-testutil.Tpo -c -o lib673-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib673-testutil.Tpo $(DEPDIR)/lib673-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib673-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib673_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib673-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib673-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib673_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib673-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib673-warnless.Tpo -c -o ../../lib/lib673-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib673-warnless.Tpo ../../lib/$(DEPDIR)/lib673-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib673-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib673_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib673-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib673-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib673_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib673-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib673-warnless.Tpo -c -o ../../lib/lib673-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib673-warnless.Tpo ../../lib/$(DEPDIR)/lib673-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib673-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib673_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib673-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib674-lib674.o: lib674.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib674_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib674-lib674.o -MD -MP -MF $(DEPDIR)/lib674-lib674.Tpo -c -o lib674-lib674.o `test -f 'lib674.c' || echo '$(srcdir)/'`lib674.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib674-lib674.Tpo $(DEPDIR)/lib674-lib674.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib674.c' object='lib674-lib674.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib674_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib674-lib674.o `test -f 'lib674.c' || echo '$(srcdir)/'`lib674.c
-
-lib674-lib674.obj: lib674.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib674_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib674-lib674.obj -MD -MP -MF $(DEPDIR)/lib674-lib674.Tpo -c -o lib674-lib674.obj `if test -f 'lib674.c'; then $(CYGPATH_W) 'lib674.c'; else $(CYGPATH_W) '$(srcdir)/lib674.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib674-lib674.Tpo $(DEPDIR)/lib674-lib674.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib674.c' object='lib674-lib674.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib674_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib674-lib674.obj `if test -f 'lib674.c'; then $(CYGPATH_W) 'lib674.c'; else $(CYGPATH_W) '$(srcdir)/lib674.c'; fi`
-
-../../lib/lib674-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib674_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib674-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib674-timediff.Tpo -c -o ../../lib/lib674-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib674-timediff.Tpo ../../lib/$(DEPDIR)/lib674-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib674-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib674_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib674-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib674-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib674_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib674-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib674-timediff.Tpo -c -o ../../lib/lib674-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib674-timediff.Tpo ../../lib/$(DEPDIR)/lib674-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib674-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib674_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib674-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib674-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib674_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib674-first.o -MD -MP -MF $(DEPDIR)/lib674-first.Tpo -c -o lib674-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib674-first.Tpo $(DEPDIR)/lib674-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib674-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib674_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib674-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib674-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib674_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib674-first.obj -MD -MP -MF $(DEPDIR)/lib674-first.Tpo -c -o lib674-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib674-first.Tpo $(DEPDIR)/lib674-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib674-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib674_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib674-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib674-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib674_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib674-testutil.o -MD -MP -MF $(DEPDIR)/lib674-testutil.Tpo -c -o lib674-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib674-testutil.Tpo $(DEPDIR)/lib674-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib674-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib674_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib674-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib674-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib674_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib674-testutil.obj -MD -MP -MF $(DEPDIR)/lib674-testutil.Tpo -c -o lib674-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib674-testutil.Tpo $(DEPDIR)/lib674-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib674-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib674_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib674-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib674-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib674_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib674-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib674-warnless.Tpo -c -o ../../lib/lib674-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib674-warnless.Tpo ../../lib/$(DEPDIR)/lib674-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib674-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib674_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib674-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib674-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib674_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib674-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib674-warnless.Tpo -c -o ../../lib/lib674-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib674-warnless.Tpo ../../lib/$(DEPDIR)/lib674-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib674-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib674_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib674-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib676-lib676.o: lib676.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib676_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib676-lib676.o -MD -MP -MF $(DEPDIR)/lib676-lib676.Tpo -c -o lib676-lib676.o `test -f 'lib676.c' || echo '$(srcdir)/'`lib676.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib676-lib676.Tpo $(DEPDIR)/lib676-lib676.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib676.c' object='lib676-lib676.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib676_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib676-lib676.o `test -f 'lib676.c' || echo '$(srcdir)/'`lib676.c
-
-lib676-lib676.obj: lib676.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib676_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib676-lib676.obj -MD -MP -MF $(DEPDIR)/lib676-lib676.Tpo -c -o lib676-lib676.obj `if test -f 'lib676.c'; then $(CYGPATH_W) 'lib676.c'; else $(CYGPATH_W) '$(srcdir)/lib676.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib676-lib676.Tpo $(DEPDIR)/lib676-lib676.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib676.c' object='lib676-lib676.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib676_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib676-lib676.obj `if test -f 'lib676.c'; then $(CYGPATH_W) 'lib676.c'; else $(CYGPATH_W) '$(srcdir)/lib676.c'; fi`
-
-../../lib/lib676-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib676_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib676-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib676-timediff.Tpo -c -o ../../lib/lib676-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib676-timediff.Tpo ../../lib/$(DEPDIR)/lib676-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib676-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib676_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib676-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib676-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib676_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib676-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib676-timediff.Tpo -c -o ../../lib/lib676-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib676-timediff.Tpo ../../lib/$(DEPDIR)/lib676-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib676-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib676_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib676-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib676-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib676_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib676-first.o -MD -MP -MF $(DEPDIR)/lib676-first.Tpo -c -o lib676-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib676-first.Tpo $(DEPDIR)/lib676-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib676-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib676_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib676-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib676-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib676_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib676-first.obj -MD -MP -MF $(DEPDIR)/lib676-first.Tpo -c -o lib676-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib676-first.Tpo $(DEPDIR)/lib676-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib676-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib676_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib676-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib676-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib676_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib676-testutil.o -MD -MP -MF $(DEPDIR)/lib676-testutil.Tpo -c -o lib676-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib676-testutil.Tpo $(DEPDIR)/lib676-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib676-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib676_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib676-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib676-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib676_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib676-testutil.obj -MD -MP -MF $(DEPDIR)/lib676-testutil.Tpo -c -o lib676-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib676-testutil.Tpo $(DEPDIR)/lib676-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib676-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib676_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib676-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib676-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib676_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib676-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib676-warnless.Tpo -c -o ../../lib/lib676-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib676-warnless.Tpo ../../lib/$(DEPDIR)/lib676-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib676-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib676_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib676-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib676-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib676_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib676-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib676-warnless.Tpo -c -o ../../lib/lib676-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib676-warnless.Tpo ../../lib/$(DEPDIR)/lib676-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib676-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib676_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib676-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-lib677-lib677.o: lib677.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib677_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib677-lib677.o -MD -MP -MF $(DEPDIR)/lib677-lib677.Tpo -c -o lib677-lib677.o `test -f 'lib677.c' || echo '$(srcdir)/'`lib677.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib677-lib677.Tpo $(DEPDIR)/lib677-lib677.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib677.c' object='lib677-lib677.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib677_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib677-lib677.o `test -f 'lib677.c' || echo '$(srcdir)/'`lib677.c
-
-lib677-lib677.obj: lib677.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib677_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib677-lib677.obj -MD -MP -MF $(DEPDIR)/lib677-lib677.Tpo -c -o lib677-lib677.obj `if test -f 'lib677.c'; then $(CYGPATH_W) 'lib677.c'; else $(CYGPATH_W) '$(srcdir)/lib677.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib677-lib677.Tpo $(DEPDIR)/lib677-lib677.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib677.c' object='lib677-lib677.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib677_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib677-lib677.obj `if test -f 'lib677.c'; then $(CYGPATH_W) 'lib677.c'; else $(CYGPATH_W) '$(srcdir)/lib677.c'; fi`
-
-../../lib/lib677-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib677_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib677-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib677-timediff.Tpo -c -o ../../lib/lib677-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib677-timediff.Tpo ../../lib/$(DEPDIR)/lib677-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib677-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib677_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib677-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib677-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib677_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib677-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib677-timediff.Tpo -c -o ../../lib/lib677-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib677-timediff.Tpo ../../lib/$(DEPDIR)/lib677-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib677-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib677_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib677-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib677-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib677_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib677-first.o -MD -MP -MF $(DEPDIR)/lib677-first.Tpo -c -o lib677-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib677-first.Tpo $(DEPDIR)/lib677-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib677-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib677_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib677-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib677-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib677_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib677-first.obj -MD -MP -MF $(DEPDIR)/lib677-first.Tpo -c -o lib677-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib677-first.Tpo $(DEPDIR)/lib677-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib677-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib677_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib677-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib677-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib677_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib677-testutil.o -MD -MP -MF $(DEPDIR)/lib677-testutil.Tpo -c -o lib677-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib677-testutil.Tpo $(DEPDIR)/lib677-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib677-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib677_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib677-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib677-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib677_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib677-testutil.obj -MD -MP -MF $(DEPDIR)/lib677-testutil.Tpo -c -o lib677-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib677-testutil.Tpo $(DEPDIR)/lib677-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib677-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib677_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib677-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib677-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib677_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib677-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib677-warnless.Tpo -c -o ../../lib/lib677-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib677-warnless.Tpo ../../lib/$(DEPDIR)/lib677-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib677-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib677_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib677-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib677-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib677_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib677-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib677-warnless.Tpo -c -o ../../lib/lib677-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib677-warnless.Tpo ../../lib/$(DEPDIR)/lib677-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib677-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib677_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib677-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-../../lib/lib677-curl_multibyte.o: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib677_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib677-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/lib677-curl_multibyte.Tpo -c -o ../../lib/lib677-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib677-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib677-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib677-curl_multibyte.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib677_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib677-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-
-../../lib/lib677-curl_multibyte.obj: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib677_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib677-curl_multibyte.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib677-curl_multibyte.Tpo -c -o ../../lib/lib677-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib677-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib677-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib677-curl_multibyte.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib677_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib677-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-
-lib678-lib678.o: lib678.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib678_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib678-lib678.o -MD -MP -MF $(DEPDIR)/lib678-lib678.Tpo -c -o lib678-lib678.o `test -f 'lib678.c' || echo '$(srcdir)/'`lib678.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib678-lib678.Tpo $(DEPDIR)/lib678-lib678.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib678.c' object='lib678-lib678.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib678_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib678-lib678.o `test -f 'lib678.c' || echo '$(srcdir)/'`lib678.c
-
-lib678-lib678.obj: lib678.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib678_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib678-lib678.obj -MD -MP -MF $(DEPDIR)/lib678-lib678.Tpo -c -o lib678-lib678.obj `if test -f 'lib678.c'; then $(CYGPATH_W) 'lib678.c'; else $(CYGPATH_W) '$(srcdir)/lib678.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib678-lib678.Tpo $(DEPDIR)/lib678-lib678.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib678.c' object='lib678-lib678.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib678_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib678-lib678.obj `if test -f 'lib678.c'; then $(CYGPATH_W) 'lib678.c'; else $(CYGPATH_W) '$(srcdir)/lib678.c'; fi`
-
-../../lib/lib678-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib678_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib678-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/lib678-timediff.Tpo -c -o ../../lib/lib678-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib678-timediff.Tpo ../../lib/$(DEPDIR)/lib678-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib678-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib678_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib678-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/lib678-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib678_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib678-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib678-timediff.Tpo -c -o ../../lib/lib678-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib678-timediff.Tpo ../../lib/$(DEPDIR)/lib678-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/lib678-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib678_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib678-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-lib678-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib678_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib678-first.o -MD -MP -MF $(DEPDIR)/lib678-first.Tpo -c -o lib678-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib678-first.Tpo $(DEPDIR)/lib678-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib678-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib678_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib678-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-lib678-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib678_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib678-first.obj -MD -MP -MF $(DEPDIR)/lib678-first.Tpo -c -o lib678-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib678-first.Tpo $(DEPDIR)/lib678-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='lib678-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib678_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib678-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-lib678-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib678_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib678-testutil.o -MD -MP -MF $(DEPDIR)/lib678-testutil.Tpo -c -o lib678-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib678-testutil.Tpo $(DEPDIR)/lib678-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib678-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib678_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib678-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-lib678-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib678_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib678-testutil.obj -MD -MP -MF $(DEPDIR)/lib678-testutil.Tpo -c -o lib678-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lib678-testutil.Tpo $(DEPDIR)/lib678-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='lib678-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib678_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib678-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/lib678-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib678_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib678-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib678-warnless.Tpo -c -o ../../lib/lib678-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib678-warnless.Tpo ../../lib/$(DEPDIR)/lib678-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib678-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib678_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib678-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/lib678-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib678_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib678-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib678-warnless.Tpo -c -o ../../lib/lib678-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib678-warnless.Tpo ../../lib/$(DEPDIR)/lib678-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib678-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib678_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib678-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-../../lib/lib678-curl_multibyte.o: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib678_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib678-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/lib678-curl_multibyte.Tpo -c -o ../../lib/lib678-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib678-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib678-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib678-curl_multibyte.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib678_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib678-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
-
-../../lib/lib678-curl_multibyte.obj: ../../lib/curl_multibyte.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib678_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib678-curl_multibyte.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib678-curl_multibyte.Tpo -c -o ../../lib/lib678-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib678-curl_multibyte.Tpo ../../lib/$(DEPDIR)/lib678-curl_multibyte.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/curl_multibyte.c' object='../../lib/lib678-curl_multibyte.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib678_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib678-curl_multibyte.obj `if test -f '../../lib/curl_multibyte.c'; then $(CYGPATH_W) '../../lib/curl_multibyte.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_multibyte.c'; fi`
-
-libauthretry-libauthretry.o: libauthretry.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libauthretry_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libauthretry-libauthretry.o -MD -MP -MF $(DEPDIR)/libauthretry-libauthretry.Tpo -c -o libauthretry-libauthretry.o `test -f 'libauthretry.c' || echo '$(srcdir)/'`libauthretry.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libauthretry-libauthretry.Tpo $(DEPDIR)/libauthretry-libauthretry.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libauthretry.c' object='libauthretry-libauthretry.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libauthretry_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libauthretry-libauthretry.o `test -f 'libauthretry.c' || echo '$(srcdir)/'`libauthretry.c
-
-libauthretry-libauthretry.obj: libauthretry.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libauthretry_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libauthretry-libauthretry.obj -MD -MP -MF $(DEPDIR)/libauthretry-libauthretry.Tpo -c -o libauthretry-libauthretry.obj `if test -f 'libauthretry.c'; then $(CYGPATH_W) 'libauthretry.c'; else $(CYGPATH_W) '$(srcdir)/libauthretry.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libauthretry-libauthretry.Tpo $(DEPDIR)/libauthretry-libauthretry.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libauthretry.c' object='libauthretry-libauthretry.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libauthretry_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libauthretry-libauthretry.obj `if test -f 'libauthretry.c'; then $(CYGPATH_W) 'libauthretry.c'; else $(CYGPATH_W) '$(srcdir)/libauthretry.c'; fi`
-
-../../lib/libauthretry-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libauthretry_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/libauthretry-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/libauthretry-timediff.Tpo -c -o ../../lib/libauthretry-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/libauthretry-timediff.Tpo ../../lib/$(DEPDIR)/libauthretry-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/libauthretry-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libauthretry_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/libauthretry-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/libauthretry-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libauthretry_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/libauthretry-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/libauthretry-timediff.Tpo -c -o ../../lib/libauthretry-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/libauthretry-timediff.Tpo ../../lib/$(DEPDIR)/libauthretry-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/libauthretry-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libauthretry_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/libauthretry-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-libauthretry-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libauthretry_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libauthretry-first.o -MD -MP -MF $(DEPDIR)/libauthretry-first.Tpo -c -o libauthretry-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libauthretry-first.Tpo $(DEPDIR)/libauthretry-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='libauthretry-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libauthretry_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libauthretry-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-libauthretry-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libauthretry_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libauthretry-first.obj -MD -MP -MF $(DEPDIR)/libauthretry-first.Tpo -c -o libauthretry-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libauthretry-first.Tpo $(DEPDIR)/libauthretry-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='libauthretry-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libauthretry_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libauthretry-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-libntlmconnect-libntlmconnect.o: libntlmconnect.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libntlmconnect_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libntlmconnect-libntlmconnect.o -MD -MP -MF $(DEPDIR)/libntlmconnect-libntlmconnect.Tpo -c -o libntlmconnect-libntlmconnect.o `test -f 'libntlmconnect.c' || echo '$(srcdir)/'`libntlmconnect.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libntlmconnect-libntlmconnect.Tpo $(DEPDIR)/libntlmconnect-libntlmconnect.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libntlmconnect.c' object='libntlmconnect-libntlmconnect.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libntlmconnect_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libntlmconnect-libntlmconnect.o `test -f 'libntlmconnect.c' || echo '$(srcdir)/'`libntlmconnect.c
-
-libntlmconnect-libntlmconnect.obj: libntlmconnect.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libntlmconnect_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libntlmconnect-libntlmconnect.obj -MD -MP -MF $(DEPDIR)/libntlmconnect-libntlmconnect.Tpo -c -o libntlmconnect-libntlmconnect.obj `if test -f 'libntlmconnect.c'; then $(CYGPATH_W) 'libntlmconnect.c'; else $(CYGPATH_W) '$(srcdir)/libntlmconnect.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libntlmconnect-libntlmconnect.Tpo $(DEPDIR)/libntlmconnect-libntlmconnect.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libntlmconnect.c' object='libntlmconnect-libntlmconnect.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libntlmconnect_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libntlmconnect-libntlmconnect.obj `if test -f 'libntlmconnect.c'; then $(CYGPATH_W) 'libntlmconnect.c'; else $(CYGPATH_W) '$(srcdir)/libntlmconnect.c'; fi`
-
-../../lib/libntlmconnect-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libntlmconnect_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/libntlmconnect-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/libntlmconnect-timediff.Tpo -c -o ../../lib/libntlmconnect-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/libntlmconnect-timediff.Tpo ../../lib/$(DEPDIR)/libntlmconnect-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/libntlmconnect-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libntlmconnect_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/libntlmconnect-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/libntlmconnect-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libntlmconnect_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/libntlmconnect-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/libntlmconnect-timediff.Tpo -c -o ../../lib/libntlmconnect-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/libntlmconnect-timediff.Tpo ../../lib/$(DEPDIR)/libntlmconnect-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/libntlmconnect-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libntlmconnect_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/libntlmconnect-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-libntlmconnect-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libntlmconnect_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libntlmconnect-first.o -MD -MP -MF $(DEPDIR)/libntlmconnect-first.Tpo -c -o libntlmconnect-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libntlmconnect-first.Tpo $(DEPDIR)/libntlmconnect-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='libntlmconnect-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libntlmconnect_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libntlmconnect-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-libntlmconnect-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libntlmconnect_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libntlmconnect-first.obj -MD -MP -MF $(DEPDIR)/libntlmconnect-first.Tpo -c -o libntlmconnect-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libntlmconnect-first.Tpo $(DEPDIR)/libntlmconnect-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='libntlmconnect-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libntlmconnect_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libntlmconnect-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-libntlmconnect-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libntlmconnect_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libntlmconnect-testutil.o -MD -MP -MF $(DEPDIR)/libntlmconnect-testutil.Tpo -c -o libntlmconnect-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libntlmconnect-testutil.Tpo $(DEPDIR)/libntlmconnect-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='libntlmconnect-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libntlmconnect_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libntlmconnect-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-libntlmconnect-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libntlmconnect_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libntlmconnect-testutil.obj -MD -MP -MF $(DEPDIR)/libntlmconnect-testutil.Tpo -c -o libntlmconnect-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libntlmconnect-testutil.Tpo $(DEPDIR)/libntlmconnect-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='libntlmconnect-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libntlmconnect_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libntlmconnect-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/libntlmconnect-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libntlmconnect_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/libntlmconnect-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/libntlmconnect-warnless.Tpo -c -o ../../lib/libntlmconnect-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/libntlmconnect-warnless.Tpo ../../lib/$(DEPDIR)/libntlmconnect-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/libntlmconnect-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libntlmconnect_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/libntlmconnect-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/libntlmconnect-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libntlmconnect_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/libntlmconnect-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/libntlmconnect-warnless.Tpo -c -o ../../lib/libntlmconnect-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/libntlmconnect-warnless.Tpo ../../lib/$(DEPDIR)/libntlmconnect-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/libntlmconnect-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libntlmconnect_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/libntlmconnect-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
-libprereq-libprereq.o: libprereq.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libprereq_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libprereq-libprereq.o -MD -MP -MF $(DEPDIR)/libprereq-libprereq.Tpo -c -o libprereq-libprereq.o `test -f 'libprereq.c' || echo '$(srcdir)/'`libprereq.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libprereq-libprereq.Tpo $(DEPDIR)/libprereq-libprereq.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libprereq.c' object='libprereq-libprereq.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libprereq_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libprereq-libprereq.o `test -f 'libprereq.c' || echo '$(srcdir)/'`libprereq.c
-
-libprereq-libprereq.obj: libprereq.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libprereq_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libprereq-libprereq.obj -MD -MP -MF $(DEPDIR)/libprereq-libprereq.Tpo -c -o libprereq-libprereq.obj `if test -f 'libprereq.c'; then $(CYGPATH_W) 'libprereq.c'; else $(CYGPATH_W) '$(srcdir)/libprereq.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libprereq-libprereq.Tpo $(DEPDIR)/libprereq-libprereq.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libprereq.c' object='libprereq-libprereq.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libprereq_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libprereq-libprereq.obj `if test -f 'libprereq.c'; then $(CYGPATH_W) 'libprereq.c'; else $(CYGPATH_W) '$(srcdir)/libprereq.c'; fi`
-
-../../lib/libprereq-timediff.o: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libprereq_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/libprereq-timediff.o -MD -MP -MF ../../lib/$(DEPDIR)/libprereq-timediff.Tpo -c -o ../../lib/libprereq-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/libprereq-timediff.Tpo ../../lib/$(DEPDIR)/libprereq-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/libprereq-timediff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libprereq_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/libprereq-timediff.o `test -f '../../lib/timediff.c' || echo '$(srcdir)/'`../../lib/timediff.c
-
-../../lib/libprereq-timediff.obj: ../../lib/timediff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libprereq_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/libprereq-timediff.obj -MD -MP -MF ../../lib/$(DEPDIR)/libprereq-timediff.Tpo -c -o ../../lib/libprereq-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/libprereq-timediff.Tpo ../../lib/$(DEPDIR)/libprereq-timediff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/timediff.c' object='../../lib/libprereq-timediff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libprereq_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/libprereq-timediff.obj `if test -f '../../lib/timediff.c'; then $(CYGPATH_W) '../../lib/timediff.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/timediff.c'; fi`
-
-libprereq-first.o: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libprereq_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libprereq-first.o -MD -MP -MF $(DEPDIR)/libprereq-first.Tpo -c -o libprereq-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libprereq-first.Tpo $(DEPDIR)/libprereq-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='libprereq-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libprereq_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libprereq-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
-
-libprereq-first.obj: first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libprereq_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libprereq-first.obj -MD -MP -MF $(DEPDIR)/libprereq-first.Tpo -c -o libprereq-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libprereq-first.Tpo $(DEPDIR)/libprereq-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='first.c' object='libprereq-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libprereq_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libprereq-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
-
-libprereq-testutil.o: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libprereq_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libprereq-testutil.o -MD -MP -MF $(DEPDIR)/libprereq-testutil.Tpo -c -o libprereq-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libprereq-testutil.Tpo $(DEPDIR)/libprereq-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='libprereq-testutil.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libprereq_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libprereq-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
-
-libprereq-testutil.obj: testutil.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libprereq_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libprereq-testutil.obj -MD -MP -MF $(DEPDIR)/libprereq-testutil.Tpo -c -o libprereq-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libprereq-testutil.Tpo $(DEPDIR)/libprereq-testutil.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='testutil.c' object='libprereq-testutil.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libprereq_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libprereq-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
-
-../../lib/libprereq-warnless.o: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libprereq_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/libprereq-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/libprereq-warnless.Tpo -c -o ../../lib/libprereq-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/libprereq-warnless.Tpo ../../lib/$(DEPDIR)/libprereq-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/libprereq-warnless.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libprereq_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/libprereq-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
-
-../../lib/libprereq-warnless.obj: ../../lib/warnless.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libprereq_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/libprereq-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/libprereq-warnless.Tpo -c -o ../../lib/libprereq-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/libprereq-warnless.Tpo ../../lib/$(DEPDIR)/libprereq-warnless.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/libprereq-warnless.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libprereq_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/libprereq-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
-
mostlyclean-libtool:
-rm -f *.lo
@@ -17065,15 +5416,8 @@ clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
clean-noinstPROGRAMS mostlyclean-am
distclean: distclean-am
- -rm -f ../../lib/$(DEPDIR)/chkdecimalpoint-dynbuf.Po
- -rm -f ../../lib/$(DEPDIR)/chkdecimalpoint-mprintf.Po
- -rm -f ../../lib/$(DEPDIR)/chkdecimalpoint-strdup.Po
- -rm -f ../../lib/$(DEPDIR)/chkhostname-curl_gethostname.Po
- -rm -f ../../lib/$(DEPDIR)/lib1156-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1156-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1500-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1501-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1501-warnless.Po
+ -rm -f ../../lib/$(DEPDIR)/curl_gethostname.Po
+ -rm -f ../../lib/$(DEPDIR)/curl_multibyte.Po
-rm -f ../../lib/$(DEPDIR)/lib1502-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib1502-warnless.Po
-rm -f ../../lib/$(DEPDIR)/lib1503-timediff.Po
@@ -17082,178 +5426,16 @@ distclean: distclean-am
-rm -f ../../lib/$(DEPDIR)/lib1504-warnless.Po
-rm -f ../../lib/$(DEPDIR)/lib1505-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib1505-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1506-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1506-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1507-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1507-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1508-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1508-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1509-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1509-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1510-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1510-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1511-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1511-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1512-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1512-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1513-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1513-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1514-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1514-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1515-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1515-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1517-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1518-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1520-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib1521-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1522-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1523-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1525-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1525-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1526-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1526-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1527-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1527-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1528-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1528-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1529-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1529-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1530-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1530-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1531-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1531-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1532-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1532-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1533-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1533-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1534-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1534-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1535-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1535-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1536-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1536-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1537-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1537-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1538-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1538-warnless.Po
-rm -f ../../lib/$(DEPDIR)/lib1539-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib1539-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1540-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1540-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1542-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1542-warnless.Po
-rm -f ../../lib/$(DEPDIR)/lib1543-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1550-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1551-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1552-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1553-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1554-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1555-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1555-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1556-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1556-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1557-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1557-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1564-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1564-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1565-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1565-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1567-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1568-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1569-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1591-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1591-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1592-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1592-warnless.Po
+ -rm -f ../../lib/$(DEPDIR)/lib1545-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib1596-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib1596-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1905-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1905-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1906-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1906-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1907-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1907-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1908-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1908-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1910-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1910-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1911-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1911-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1912-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1912-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1913-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1913-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1915-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1915-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1916-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1916-warnless.Po
-rm -f ../../lib/$(DEPDIR)/lib1917-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib1917-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1918-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1918-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1919-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1919-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1933-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1933-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1934-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1934-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1935-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1935-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1936-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1936-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1937-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1938-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1939-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1940-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1945-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib1946-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1947-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1948-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1955-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1955-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib3010-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib3010-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib3025-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib3025-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib3026-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib3026-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib3027-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib3027-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib500-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib500-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib501-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib502-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib502-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib503-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib503-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib504-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib504-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib505-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib505-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib506-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib507-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib507-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib508-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib509-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib510-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib511-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib512-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib513-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib514-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib515-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib516-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib517-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib518-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib518-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib518-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib519-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib520-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib521-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib523-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib524-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib525-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib525-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib525-warnless.Po
-rm -f ../../lib/$(DEPDIR)/lib526-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib526-warnless.Po
-rm -f ../../lib/$(DEPDIR)/lib527-timediff.Po
@@ -17261,141 +5443,30 @@ distclean: distclean-am
-rm -f ../../lib/$(DEPDIR)/lib529-curl_multibyte.Po
-rm -f ../../lib/$(DEPDIR)/lib529-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib529-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib530-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib530-warnless.Po
-rm -f ../../lib/$(DEPDIR)/lib532-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib532-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib533-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib533-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib537-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib537-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib537-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib539-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib540-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib540-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib541-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib541-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib542-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib543-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib544-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib545-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib547-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib548-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib549-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib552-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib552-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib553-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib554-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib555-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib555-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib556-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib556-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib557-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib558-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib559-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib560-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib560-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib562-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib564-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib564-warnless.Po
-rm -f ../../lib/$(DEPDIR)/lib565-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib566-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib566-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib567-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib568-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib568-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib569-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib569-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib570-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib571-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib571-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib571-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib572-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib572-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib573-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib573-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib574-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib575-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib575-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib576-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib578-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib578-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib579-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib579-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib582-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib582-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib582-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib583-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib584-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib585-curl_multibyte.Po
-rm -f ../../lib/$(DEPDIR)/lib585-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib586-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib587-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib589-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib590-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib591-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib591-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib591-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib597-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib597-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib598-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib599-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib599-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib643-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib645-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib650-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib651-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib652-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib653-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib654-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib655-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib658-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib658-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib659-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib659-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib661-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib666-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib667-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib667-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib668-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib668-warnless.Po
-rm -f ../../lib/$(DEPDIR)/lib670-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib670-warnless.Po
-rm -f ../../lib/$(DEPDIR)/lib671-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib671-warnless.Po
-rm -f ../../lib/$(DEPDIR)/lib672-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib672-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib673-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib673-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib674-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib674-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib676-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib676-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib677-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib677-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib677-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib678-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib678-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib678-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/libauthretry-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/libntlmconnect-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/libntlmconnect-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/libprereq-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/libprereq-warnless.Po
-rm -f ../../lib/$(DEPDIR)/timediff.Po
-rm -f ../../lib/$(DEPDIR)/warnless.Po
- -rm -f ./$(DEPDIR)/chkdecimalpoint-chkdecimalpoint.Po
- -rm -f ./$(DEPDIR)/chkhostname-chkhostname.Po
+ -rm -f ./$(DEPDIR)/chkhostname.Po
-rm -f ./$(DEPDIR)/first.Po
- -rm -f ./$(DEPDIR)/lib1156-first.Po
- -rm -f ./$(DEPDIR)/lib1156-lib1156.Po
- -rm -f ./$(DEPDIR)/lib1156-testutil.Po
- -rm -f ./$(DEPDIR)/lib1500-first.Po
- -rm -f ./$(DEPDIR)/lib1500-lib1500.Po
- -rm -f ./$(DEPDIR)/lib1500-testutil.Po
- -rm -f ./$(DEPDIR)/lib1501-first.Po
- -rm -f ./$(DEPDIR)/lib1501-lib1501.Po
- -rm -f ./$(DEPDIR)/lib1501-testutil.Po
+ -rm -f ./$(DEPDIR)/lib1156.Po
+ -rm -f ./$(DEPDIR)/lib1301.Po
+ -rm -f ./$(DEPDIR)/lib1500.Po
+ -rm -f ./$(DEPDIR)/lib1501.Po
-rm -f ./$(DEPDIR)/lib1502-first.Po
-rm -f ./$(DEPDIR)/lib1502-lib1502.Po
-rm -f ./$(DEPDIR)/lib1502-testutil.Po
@@ -17408,289 +5479,154 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/lib1505-first.Po
-rm -f ./$(DEPDIR)/lib1505-lib1502.Po
-rm -f ./$(DEPDIR)/lib1505-testutil.Po
- -rm -f ./$(DEPDIR)/lib1506-first.Po
- -rm -f ./$(DEPDIR)/lib1506-lib1506.Po
- -rm -f ./$(DEPDIR)/lib1506-testutil.Po
- -rm -f ./$(DEPDIR)/lib1507-first.Po
- -rm -f ./$(DEPDIR)/lib1507-lib1507.Po
- -rm -f ./$(DEPDIR)/lib1507-testutil.Po
- -rm -f ./$(DEPDIR)/lib1508-first.Po
- -rm -f ./$(DEPDIR)/lib1508-lib1508.Po
- -rm -f ./$(DEPDIR)/lib1508-testutil.Po
- -rm -f ./$(DEPDIR)/lib1509-first.Po
- -rm -f ./$(DEPDIR)/lib1509-lib1509.Po
- -rm -f ./$(DEPDIR)/lib1509-testutil.Po
- -rm -f ./$(DEPDIR)/lib1510-first.Po
- -rm -f ./$(DEPDIR)/lib1510-lib1510.Po
- -rm -f ./$(DEPDIR)/lib1510-testutil.Po
- -rm -f ./$(DEPDIR)/lib1511-first.Po
- -rm -f ./$(DEPDIR)/lib1511-lib1511.Po
- -rm -f ./$(DEPDIR)/lib1511-testutil.Po
- -rm -f ./$(DEPDIR)/lib1512-first.Po
- -rm -f ./$(DEPDIR)/lib1512-lib1512.Po
- -rm -f ./$(DEPDIR)/lib1512-testutil.Po
- -rm -f ./$(DEPDIR)/lib1513-first.Po
- -rm -f ./$(DEPDIR)/lib1513-lib1513.Po
- -rm -f ./$(DEPDIR)/lib1513-testutil.Po
- -rm -f ./$(DEPDIR)/lib1514-first.Po
- -rm -f ./$(DEPDIR)/lib1514-lib1514.Po
- -rm -f ./$(DEPDIR)/lib1514-testutil.Po
- -rm -f ./$(DEPDIR)/lib1515-first.Po
- -rm -f ./$(DEPDIR)/lib1515-lib1515.Po
- -rm -f ./$(DEPDIR)/lib1515-testutil.Po
- -rm -f ./$(DEPDIR)/lib1517-first.Po
- -rm -f ./$(DEPDIR)/lib1517-lib1517.Po
- -rm -f ./$(DEPDIR)/lib1518-first.Po
- -rm -f ./$(DEPDIR)/lib1518-lib1518.Po
- -rm -f ./$(DEPDIR)/lib1520-first.Po
- -rm -f ./$(DEPDIR)/lib1520-lib1520.Po
+ -rm -f ./$(DEPDIR)/lib1506.Po
+ -rm -f ./$(DEPDIR)/lib1507.Po
+ -rm -f ./$(DEPDIR)/lib1508.Po
+ -rm -f ./$(DEPDIR)/lib1509.Po
+ -rm -f ./$(DEPDIR)/lib1510.Po
+ -rm -f ./$(DEPDIR)/lib1511.Po
+ -rm -f ./$(DEPDIR)/lib1512.Po
+ -rm -f ./$(DEPDIR)/lib1513.Po
+ -rm -f ./$(DEPDIR)/lib1514.Po
+ -rm -f ./$(DEPDIR)/lib1515.Po
+ -rm -f ./$(DEPDIR)/lib1517.Po
+ -rm -f ./$(DEPDIR)/lib1518.Po
+ -rm -f ./$(DEPDIR)/lib1520.Po
-rm -f ./$(DEPDIR)/lib1521-first.Po
-rm -f ./$(DEPDIR)/lib1521-lib1521.Po
- -rm -f ./$(DEPDIR)/lib1522-first.Po
- -rm -f ./$(DEPDIR)/lib1522-lib1522.Po
- -rm -f ./$(DEPDIR)/lib1522-testtrace.Po
- -rm -f ./$(DEPDIR)/lib1522-testutil.Po
- -rm -f ./$(DEPDIR)/lib1523-first.Po
- -rm -f ./$(DEPDIR)/lib1523-lib1523.Po
- -rm -f ./$(DEPDIR)/lib1525-first.Po
- -rm -f ./$(DEPDIR)/lib1525-lib1525.Po
- -rm -f ./$(DEPDIR)/lib1525-testutil.Po
- -rm -f ./$(DEPDIR)/lib1526-first.Po
- -rm -f ./$(DEPDIR)/lib1526-lib1526.Po
- -rm -f ./$(DEPDIR)/lib1526-testutil.Po
- -rm -f ./$(DEPDIR)/lib1527-first.Po
- -rm -f ./$(DEPDIR)/lib1527-lib1527.Po
- -rm -f ./$(DEPDIR)/lib1527-testutil.Po
- -rm -f ./$(DEPDIR)/lib1528-first.Po
- -rm -f ./$(DEPDIR)/lib1528-lib1528.Po
- -rm -f ./$(DEPDIR)/lib1528-testutil.Po
- -rm -f ./$(DEPDIR)/lib1529-first.Po
- -rm -f ./$(DEPDIR)/lib1529-lib1529.Po
- -rm -f ./$(DEPDIR)/lib1529-testutil.Po
- -rm -f ./$(DEPDIR)/lib1530-first.Po
- -rm -f ./$(DEPDIR)/lib1530-lib1530.Po
- -rm -f ./$(DEPDIR)/lib1530-testutil.Po
- -rm -f ./$(DEPDIR)/lib1531-first.Po
- -rm -f ./$(DEPDIR)/lib1531-lib1531.Po
- -rm -f ./$(DEPDIR)/lib1531-testutil.Po
- -rm -f ./$(DEPDIR)/lib1532-first.Po
- -rm -f ./$(DEPDIR)/lib1532-lib1532.Po
- -rm -f ./$(DEPDIR)/lib1532-testutil.Po
- -rm -f ./$(DEPDIR)/lib1533-first.Po
- -rm -f ./$(DEPDIR)/lib1533-lib1533.Po
- -rm -f ./$(DEPDIR)/lib1533-testutil.Po
- -rm -f ./$(DEPDIR)/lib1534-first.Po
- -rm -f ./$(DEPDIR)/lib1534-lib1534.Po
- -rm -f ./$(DEPDIR)/lib1534-testutil.Po
- -rm -f ./$(DEPDIR)/lib1535-first.Po
- -rm -f ./$(DEPDIR)/lib1535-lib1535.Po
- -rm -f ./$(DEPDIR)/lib1535-testutil.Po
- -rm -f ./$(DEPDIR)/lib1536-first.Po
- -rm -f ./$(DEPDIR)/lib1536-lib1536.Po
- -rm -f ./$(DEPDIR)/lib1536-testutil.Po
- -rm -f ./$(DEPDIR)/lib1537-first.Po
- -rm -f ./$(DEPDIR)/lib1537-lib1537.Po
- -rm -f ./$(DEPDIR)/lib1537-testutil.Po
- -rm -f ./$(DEPDIR)/lib1538-first.Po
- -rm -f ./$(DEPDIR)/lib1538-lib1538.Po
- -rm -f ./$(DEPDIR)/lib1538-testutil.Po
+ -rm -f ./$(DEPDIR)/lib1522.Po
+ -rm -f ./$(DEPDIR)/lib1523.Po
+ -rm -f ./$(DEPDIR)/lib1525.Po
+ -rm -f ./$(DEPDIR)/lib1526.Po
+ -rm -f ./$(DEPDIR)/lib1527.Po
+ -rm -f ./$(DEPDIR)/lib1528.Po
+ -rm -f ./$(DEPDIR)/lib1529.Po
+ -rm -f ./$(DEPDIR)/lib1530.Po
+ -rm -f ./$(DEPDIR)/lib1531.Po
+ -rm -f ./$(DEPDIR)/lib1532.Po
+ -rm -f ./$(DEPDIR)/lib1533.Po
+ -rm -f ./$(DEPDIR)/lib1534.Po
+ -rm -f ./$(DEPDIR)/lib1535.Po
+ -rm -f ./$(DEPDIR)/lib1536.Po
+ -rm -f ./$(DEPDIR)/lib1537.Po
+ -rm -f ./$(DEPDIR)/lib1538.Po
-rm -f ./$(DEPDIR)/lib1539-first.Po
-rm -f ./$(DEPDIR)/lib1539-lib1514.Po
-rm -f ./$(DEPDIR)/lib1539-testutil.Po
- -rm -f ./$(DEPDIR)/lib1540-first.Po
- -rm -f ./$(DEPDIR)/lib1540-lib1540.Po
- -rm -f ./$(DEPDIR)/lib1540-testutil.Po
- -rm -f ./$(DEPDIR)/lib1542-first.Po
- -rm -f ./$(DEPDIR)/lib1542-lib1542.Po
- -rm -f ./$(DEPDIR)/lib1542-testtrace.Po
- -rm -f ./$(DEPDIR)/lib1542-testutil.Po
+ -rm -f ./$(DEPDIR)/lib1540.Po
+ -rm -f ./$(DEPDIR)/lib1542.Po
-rm -f ./$(DEPDIR)/lib1543-first.Po
-rm -f ./$(DEPDIR)/lib1543-lib1518.Po
- -rm -f ./$(DEPDIR)/lib1550-first.Po
- -rm -f ./$(DEPDIR)/lib1550-lib1550.Po
- -rm -f ./$(DEPDIR)/lib1551-first.Po
- -rm -f ./$(DEPDIR)/lib1551-lib1551.Po
- -rm -f ./$(DEPDIR)/lib1552-first.Po
- -rm -f ./$(DEPDIR)/lib1552-lib1552.Po
- -rm -f ./$(DEPDIR)/lib1552-testutil.Po
- -rm -f ./$(DEPDIR)/lib1553-first.Po
- -rm -f ./$(DEPDIR)/lib1553-lib1553.Po
- -rm -f ./$(DEPDIR)/lib1553-testutil.Po
- -rm -f ./$(DEPDIR)/lib1554-first.Po
- -rm -f ./$(DEPDIR)/lib1554-lib1554.Po
- -rm -f ./$(DEPDIR)/lib1555-first.Po
- -rm -f ./$(DEPDIR)/lib1555-lib1555.Po
- -rm -f ./$(DEPDIR)/lib1555-testutil.Po
- -rm -f ./$(DEPDIR)/lib1556-first.Po
- -rm -f ./$(DEPDIR)/lib1556-lib1556.Po
- -rm -f ./$(DEPDIR)/lib1556-testutil.Po
- -rm -f ./$(DEPDIR)/lib1557-first.Po
- -rm -f ./$(DEPDIR)/lib1557-lib1557.Po
- -rm -f ./$(DEPDIR)/lib1557-testutil.Po
+ -rm -f ./$(DEPDIR)/lib1545-first.Po
+ -rm -f ./$(DEPDIR)/lib1545-lib1545.Po
+ -rm -f ./$(DEPDIR)/lib1550.Po
+ -rm -f ./$(DEPDIR)/lib1551.Po
+ -rm -f ./$(DEPDIR)/lib1552.Po
+ -rm -f ./$(DEPDIR)/lib1553.Po
+ -rm -f ./$(DEPDIR)/lib1554.Po
+ -rm -f ./$(DEPDIR)/lib1555.Po
+ -rm -f ./$(DEPDIR)/lib1556.Po
+ -rm -f ./$(DEPDIR)/lib1557.Po
-rm -f ./$(DEPDIR)/lib1558.Po
-rm -f ./$(DEPDIR)/lib1559.Po
-rm -f ./$(DEPDIR)/lib1560.Po
- -rm -f ./$(DEPDIR)/lib1564-first.Po
- -rm -f ./$(DEPDIR)/lib1564-lib1564.Po
- -rm -f ./$(DEPDIR)/lib1564-testutil.Po
- -rm -f ./$(DEPDIR)/lib1565-first.Po
- -rm -f ./$(DEPDIR)/lib1565-lib1565.Po
- -rm -f ./$(DEPDIR)/lib1565-testutil.Po
- -rm -f ./$(DEPDIR)/lib1567-first.Po
- -rm -f ./$(DEPDIR)/lib1567-lib1567.Po
- -rm -f ./$(DEPDIR)/lib1568-first.Po
- -rm -f ./$(DEPDIR)/lib1568-lib1568.Po
- -rm -f ./$(DEPDIR)/lib1569-first.Po
- -rm -f ./$(DEPDIR)/lib1569-lib1569.Po
- -rm -f ./$(DEPDIR)/lib1591-first.Po
- -rm -f ./$(DEPDIR)/lib1591-lib1591.Po
- -rm -f ./$(DEPDIR)/lib1591-testutil.Po
- -rm -f ./$(DEPDIR)/lib1592-first.Po
- -rm -f ./$(DEPDIR)/lib1592-lib1592.Po
- -rm -f ./$(DEPDIR)/lib1592-testutil.Po
+ -rm -f ./$(DEPDIR)/lib1564.Po
+ -rm -f ./$(DEPDIR)/lib1565.Po
+ -rm -f ./$(DEPDIR)/lib1567.Po
+ -rm -f ./$(DEPDIR)/lib1568.Po
+ -rm -f ./$(DEPDIR)/lib1569.Po
+ -rm -f ./$(DEPDIR)/lib1591.Po
+ -rm -f ./$(DEPDIR)/lib1592.Po
-rm -f ./$(DEPDIR)/lib1593.Po
-rm -f ./$(DEPDIR)/lib1594.Po
-rm -f ./$(DEPDIR)/lib1596-first.Po
-rm -f ./$(DEPDIR)/lib1596-lib1594.Po
-rm -f ./$(DEPDIR)/lib1596-testutil.Po
-rm -f ./$(DEPDIR)/lib1597.Po
- -rm -f ./$(DEPDIR)/lib1905-first.Po
- -rm -f ./$(DEPDIR)/lib1905-lib1905.Po
- -rm -f ./$(DEPDIR)/lib1905-testutil.Po
- -rm -f ./$(DEPDIR)/lib1906-first.Po
- -rm -f ./$(DEPDIR)/lib1906-lib1906.Po
- -rm -f ./$(DEPDIR)/lib1906-testutil.Po
- -rm -f ./$(DEPDIR)/lib1907-first.Po
- -rm -f ./$(DEPDIR)/lib1907-lib1907.Po
- -rm -f ./$(DEPDIR)/lib1907-testutil.Po
- -rm -f ./$(DEPDIR)/lib1908-first.Po
- -rm -f ./$(DEPDIR)/lib1908-lib1908.Po
- -rm -f ./$(DEPDIR)/lib1908-testutil.Po
- -rm -f ./$(DEPDIR)/lib1910-first.Po
- -rm -f ./$(DEPDIR)/lib1910-lib1910.Po
- -rm -f ./$(DEPDIR)/lib1910-testutil.Po
- -rm -f ./$(DEPDIR)/lib1911-first.Po
- -rm -f ./$(DEPDIR)/lib1911-lib1911.Po
- -rm -f ./$(DEPDIR)/lib1911-testutil.Po
- -rm -f ./$(DEPDIR)/lib1912-first.Po
- -rm -f ./$(DEPDIR)/lib1912-lib1912.Po
- -rm -f ./$(DEPDIR)/lib1912-testutil.Po
- -rm -f ./$(DEPDIR)/lib1913-first.Po
- -rm -f ./$(DEPDIR)/lib1913-lib1913.Po
- -rm -f ./$(DEPDIR)/lib1913-testutil.Po
- -rm -f ./$(DEPDIR)/lib1915-first.Po
- -rm -f ./$(DEPDIR)/lib1915-lib1915.Po
- -rm -f ./$(DEPDIR)/lib1915-testutil.Po
- -rm -f ./$(DEPDIR)/lib1916-first.Po
- -rm -f ./$(DEPDIR)/lib1916-lib1916.Po
+ -rm -f ./$(DEPDIR)/lib1662.Po
+ -rm -f ./$(DEPDIR)/lib1900.Po
+ -rm -f ./$(DEPDIR)/lib1903.Po
+ -rm -f ./$(DEPDIR)/lib1905.Po
+ -rm -f ./$(DEPDIR)/lib1906.Po
+ -rm -f ./$(DEPDIR)/lib1907.Po
+ -rm -f ./$(DEPDIR)/lib1908.Po
+ -rm -f ./$(DEPDIR)/lib1910.Po
+ -rm -f ./$(DEPDIR)/lib1911.Po
+ -rm -f ./$(DEPDIR)/lib1912.Po
+ -rm -f ./$(DEPDIR)/lib1913.Po
+ -rm -f ./$(DEPDIR)/lib1915.Po
+ -rm -f ./$(DEPDIR)/lib1916.Po
-rm -f ./$(DEPDIR)/lib1917-first.Po
-rm -f ./$(DEPDIR)/lib1917-lib1916.Po
- -rm -f ./$(DEPDIR)/lib1918-first.Po
- -rm -f ./$(DEPDIR)/lib1918-lib1918.Po
- -rm -f ./$(DEPDIR)/lib1919-first.Po
- -rm -f ./$(DEPDIR)/lib1919-lib1919.Po
- -rm -f ./$(DEPDIR)/lib1933-first.Po
- -rm -f ./$(DEPDIR)/lib1933-lib1933.Po
- -rm -f ./$(DEPDIR)/lib1933-testutil.Po
- -rm -f ./$(DEPDIR)/lib1934-first.Po
- -rm -f ./$(DEPDIR)/lib1934-lib1934.Po
- -rm -f ./$(DEPDIR)/lib1934-testutil.Po
- -rm -f ./$(DEPDIR)/lib1935-first.Po
- -rm -f ./$(DEPDIR)/lib1935-lib1935.Po
- -rm -f ./$(DEPDIR)/lib1935-testutil.Po
- -rm -f ./$(DEPDIR)/lib1936-first.Po
- -rm -f ./$(DEPDIR)/lib1936-lib1936.Po
- -rm -f ./$(DEPDIR)/lib1936-testutil.Po
- -rm -f ./$(DEPDIR)/lib1937-first.Po
- -rm -f ./$(DEPDIR)/lib1937-lib1937.Po
- -rm -f ./$(DEPDIR)/lib1938-first.Po
- -rm -f ./$(DEPDIR)/lib1938-lib1938.Po
- -rm -f ./$(DEPDIR)/lib1939-first.Po
- -rm -f ./$(DEPDIR)/lib1939-lib1939.Po
- -rm -f ./$(DEPDIR)/lib1940-first.Po
- -rm -f ./$(DEPDIR)/lib1940-lib1940.Po
- -rm -f ./$(DEPDIR)/lib1945-first.Po
- -rm -f ./$(DEPDIR)/lib1945-lib1945.Po
+ -rm -f ./$(DEPDIR)/lib1918.Po
+ -rm -f ./$(DEPDIR)/lib1919.Po
+ -rm -f ./$(DEPDIR)/lib1933.Po
+ -rm -f ./$(DEPDIR)/lib1934.Po
+ -rm -f ./$(DEPDIR)/lib1935.Po
+ -rm -f ./$(DEPDIR)/lib1936.Po
+ -rm -f ./$(DEPDIR)/lib1937.Po
+ -rm -f ./$(DEPDIR)/lib1938.Po
+ -rm -f ./$(DEPDIR)/lib1939.Po
+ -rm -f ./$(DEPDIR)/lib1940.Po
+ -rm -f ./$(DEPDIR)/lib1945.Po
-rm -f ./$(DEPDIR)/lib1946-first.Po
-rm -f ./$(DEPDIR)/lib1946-lib1940.Po
- -rm -f ./$(DEPDIR)/lib1947-first.Po
- -rm -f ./$(DEPDIR)/lib1947-lib1947.Po
- -rm -f ./$(DEPDIR)/lib1948-first.Po
- -rm -f ./$(DEPDIR)/lib1948-lib1948.Po
- -rm -f ./$(DEPDIR)/lib1955-first.Po
- -rm -f ./$(DEPDIR)/lib1955-lib1955.Po
- -rm -f ./$(DEPDIR)/lib1955-testutil.Po
+ -rm -f ./$(DEPDIR)/lib1947.Po
+ -rm -f ./$(DEPDIR)/lib1948.Po
+ -rm -f ./$(DEPDIR)/lib1955.Po
+ -rm -f ./$(DEPDIR)/lib1956.Po
+ -rm -f ./$(DEPDIR)/lib1957.Po
+ -rm -f ./$(DEPDIR)/lib1958.Po
+ -rm -f ./$(DEPDIR)/lib1959.Po
+ -rm -f ./$(DEPDIR)/lib1960.Po
+ -rm -f ./$(DEPDIR)/lib1964.Po
+ -rm -f ./$(DEPDIR)/lib1970.Po
+ -rm -f ./$(DEPDIR)/lib1971.Po
+ -rm -f ./$(DEPDIR)/lib1972.Po
+ -rm -f ./$(DEPDIR)/lib1973.Po
+ -rm -f ./$(DEPDIR)/lib1974.Po
+ -rm -f ./$(DEPDIR)/lib1975.Po
-rm -f ./$(DEPDIR)/lib2301.Po
-rm -f ./$(DEPDIR)/lib2302.Po
- -rm -f ./$(DEPDIR)/lib3010-first.Po
- -rm -f ./$(DEPDIR)/lib3010-lib3010.Po
- -rm -f ./$(DEPDIR)/lib3010-testutil.Po
- -rm -f ./$(DEPDIR)/lib3025-first.Po
- -rm -f ./$(DEPDIR)/lib3025-lib3025.Po
- -rm -f ./$(DEPDIR)/lib3025-testutil.Po
- -rm -f ./$(DEPDIR)/lib3026-first.Po
- -rm -f ./$(DEPDIR)/lib3026-lib3026.Po
- -rm -f ./$(DEPDIR)/lib3026-testutil.Po
- -rm -f ./$(DEPDIR)/lib3027-first.Po
- -rm -f ./$(DEPDIR)/lib3027-lib3027.Po
- -rm -f ./$(DEPDIR)/lib3027-testutil.Po
- -rm -f ./$(DEPDIR)/lib500-first.Po
- -rm -f ./$(DEPDIR)/lib500-lib500.Po
- -rm -f ./$(DEPDIR)/lib500-testtrace.Po
- -rm -f ./$(DEPDIR)/lib500-testutil.Po
- -rm -f ./$(DEPDIR)/lib501-first.Po
- -rm -f ./$(DEPDIR)/lib501-lib501.Po
- -rm -f ./$(DEPDIR)/lib502-first.Po
- -rm -f ./$(DEPDIR)/lib502-lib502.Po
- -rm -f ./$(DEPDIR)/lib502-testutil.Po
- -rm -f ./$(DEPDIR)/lib503-first.Po
- -rm -f ./$(DEPDIR)/lib503-lib503.Po
- -rm -f ./$(DEPDIR)/lib503-testutil.Po
- -rm -f ./$(DEPDIR)/lib504-first.Po
- -rm -f ./$(DEPDIR)/lib504-lib504.Po
- -rm -f ./$(DEPDIR)/lib504-testutil.Po
- -rm -f ./$(DEPDIR)/lib505-first.Po
- -rm -f ./$(DEPDIR)/lib505-lib505.Po
- -rm -f ./$(DEPDIR)/lib506-first.Po
- -rm -f ./$(DEPDIR)/lib506-lib506.Po
- -rm -f ./$(DEPDIR)/lib507-first.Po
- -rm -f ./$(DEPDIR)/lib507-lib507.Po
- -rm -f ./$(DEPDIR)/lib507-testutil.Po
- -rm -f ./$(DEPDIR)/lib508-first.Po
- -rm -f ./$(DEPDIR)/lib508-lib508.Po
- -rm -f ./$(DEPDIR)/lib509-first.Po
- -rm -f ./$(DEPDIR)/lib509-lib509.Po
- -rm -f ./$(DEPDIR)/lib510-first.Po
- -rm -f ./$(DEPDIR)/lib510-lib510.Po
- -rm -f ./$(DEPDIR)/lib511-first.Po
- -rm -f ./$(DEPDIR)/lib511-lib511.Po
- -rm -f ./$(DEPDIR)/lib512-first.Po
- -rm -f ./$(DEPDIR)/lib512-lib512.Po
- -rm -f ./$(DEPDIR)/lib513-first.Po
- -rm -f ./$(DEPDIR)/lib513-lib513.Po
- -rm -f ./$(DEPDIR)/lib514-first.Po
- -rm -f ./$(DEPDIR)/lib514-lib514.Po
- -rm -f ./$(DEPDIR)/lib515-first.Po
- -rm -f ./$(DEPDIR)/lib515-lib515.Po
- -rm -f ./$(DEPDIR)/lib516-first.Po
- -rm -f ./$(DEPDIR)/lib516-lib516.Po
- -rm -f ./$(DEPDIR)/lib517-first.Po
- -rm -f ./$(DEPDIR)/lib517-lib517.Po
- -rm -f ./$(DEPDIR)/lib518-first.Po
- -rm -f ./$(DEPDIR)/lib518-lib518.Po
- -rm -f ./$(DEPDIR)/lib519-first.Po
- -rm -f ./$(DEPDIR)/lib519-lib519.Po
- -rm -f ./$(DEPDIR)/lib520-first.Po
- -rm -f ./$(DEPDIR)/lib520-lib520.Po
- -rm -f ./$(DEPDIR)/lib521-first.Po
- -rm -f ./$(DEPDIR)/lib521-lib521.Po
- -rm -f ./$(DEPDIR)/lib523-first.Po
- -rm -f ./$(DEPDIR)/lib523-lib523.Po
- -rm -f ./$(DEPDIR)/lib524-first.Po
- -rm -f ./$(DEPDIR)/lib524-lib524.Po
- -rm -f ./$(DEPDIR)/lib525-first.Po
- -rm -f ./$(DEPDIR)/lib525-lib525.Po
- -rm -f ./$(DEPDIR)/lib525-testutil.Po
+ -rm -f ./$(DEPDIR)/lib2304.Po
+ -rm -f ./$(DEPDIR)/lib2305.Po
+ -rm -f ./$(DEPDIR)/lib2306.Po
+ -rm -f ./$(DEPDIR)/lib2402.Po
+ -rm -f ./$(DEPDIR)/lib2404.Po
+ -rm -f ./$(DEPDIR)/lib2502.Po
+ -rm -f ./$(DEPDIR)/lib3010.Po
+ -rm -f ./$(DEPDIR)/lib3025.Po
+ -rm -f ./$(DEPDIR)/lib3026.Po
+ -rm -f ./$(DEPDIR)/lib3027.Po
+ -rm -f ./$(DEPDIR)/lib3100.Po
+ -rm -f ./$(DEPDIR)/lib3101.Po
+ -rm -f ./$(DEPDIR)/lib3102.Po
+ -rm -f ./$(DEPDIR)/lib3103.Po
+ -rm -f ./$(DEPDIR)/lib500.Po
+ -rm -f ./$(DEPDIR)/lib501.Po
+ -rm -f ./$(DEPDIR)/lib502.Po
+ -rm -f ./$(DEPDIR)/lib503.Po
+ -rm -f ./$(DEPDIR)/lib504.Po
+ -rm -f ./$(DEPDIR)/lib505.Po
+ -rm -f ./$(DEPDIR)/lib506.Po
+ -rm -f ./$(DEPDIR)/lib507.Po
+ -rm -f ./$(DEPDIR)/lib508.Po
+ -rm -f ./$(DEPDIR)/lib509.Po
+ -rm -f ./$(DEPDIR)/lib510.Po
+ -rm -f ./$(DEPDIR)/lib511.Po
+ -rm -f ./$(DEPDIR)/lib512.Po
+ -rm -f ./$(DEPDIR)/lib513.Po
+ -rm -f ./$(DEPDIR)/lib514.Po
+ -rm -f ./$(DEPDIR)/lib515.Po
+ -rm -f ./$(DEPDIR)/lib516.Po
+ -rm -f ./$(DEPDIR)/lib517.Po
+ -rm -f ./$(DEPDIR)/lib518.Po
+ -rm -f ./$(DEPDIR)/lib519.Po
+ -rm -f ./$(DEPDIR)/lib520.Po
+ -rm -f ./$(DEPDIR)/lib521.Po
+ -rm -f ./$(DEPDIR)/lib523.Po
+ -rm -f ./$(DEPDIR)/lib524.Po
+ -rm -f ./$(DEPDIR)/lib525.Po
-rm -f ./$(DEPDIR)/lib526-first.Po
-rm -f ./$(DEPDIR)/lib526-lib526.Po
-rm -f ./$(DEPDIR)/lib526-testutil.Po
@@ -17700,189 +5636,102 @@ distclean: distclean-am
-rm -f ./$(DEPDIR)/lib529-first.Po
-rm -f ./$(DEPDIR)/lib529-lib525.Po
-rm -f ./$(DEPDIR)/lib529-testutil.Po
- -rm -f ./$(DEPDIR)/lib530-first.Po
- -rm -f ./$(DEPDIR)/lib530-lib530.Po
- -rm -f ./$(DEPDIR)/lib530-testutil.Po
+ -rm -f ./$(DEPDIR)/lib530.Po
-rm -f ./$(DEPDIR)/lib532-first.Po
-rm -f ./$(DEPDIR)/lib532-lib526.Po
-rm -f ./$(DEPDIR)/lib532-testutil.Po
- -rm -f ./$(DEPDIR)/lib533-first.Po
- -rm -f ./$(DEPDIR)/lib533-lib533.Po
- -rm -f ./$(DEPDIR)/lib533-testutil.Po
- -rm -f ./$(DEPDIR)/lib537-first.Po
- -rm -f ./$(DEPDIR)/lib537-lib537.Po
- -rm -f ./$(DEPDIR)/lib539-first.Po
- -rm -f ./$(DEPDIR)/lib539-lib539.Po
- -rm -f ./$(DEPDIR)/lib540-first.Po
- -rm -f ./$(DEPDIR)/lib540-lib540.Po
- -rm -f ./$(DEPDIR)/lib540-testutil.Po
- -rm -f ./$(DEPDIR)/lib541-first.Po
- -rm -f ./$(DEPDIR)/lib541-lib541.Po
- -rm -f ./$(DEPDIR)/lib542-first.Po
- -rm -f ./$(DEPDIR)/lib542-lib542.Po
- -rm -f ./$(DEPDIR)/lib543-first.Po
- -rm -f ./$(DEPDIR)/lib543-lib543.Po
- -rm -f ./$(DEPDIR)/lib544-first.Po
- -rm -f ./$(DEPDIR)/lib544-lib544.Po
+ -rm -f ./$(DEPDIR)/lib533.Po
+ -rm -f ./$(DEPDIR)/lib537.Po
+ -rm -f ./$(DEPDIR)/lib539.Po
+ -rm -f ./$(DEPDIR)/lib540.Po
+ -rm -f ./$(DEPDIR)/lib541.Po
+ -rm -f ./$(DEPDIR)/lib542.Po
+ -rm -f ./$(DEPDIR)/lib543.Po
+ -rm -f ./$(DEPDIR)/lib544.Po
-rm -f ./$(DEPDIR)/lib545-first.Po
-rm -f ./$(DEPDIR)/lib545-lib544.Po
- -rm -f ./$(DEPDIR)/lib547-first.Po
- -rm -f ./$(DEPDIR)/lib547-lib547.Po
+ -rm -f ./$(DEPDIR)/lib547.Po
-rm -f ./$(DEPDIR)/lib548-first.Po
-rm -f ./$(DEPDIR)/lib548-lib547.Po
- -rm -f ./$(DEPDIR)/lib549-first.Po
- -rm -f ./$(DEPDIR)/lib549-lib549.Po
- -rm -f ./$(DEPDIR)/lib552-first.Po
- -rm -f ./$(DEPDIR)/lib552-lib552.Po
- -rm -f ./$(DEPDIR)/lib553-first.Po
- -rm -f ./$(DEPDIR)/lib553-lib553.Po
- -rm -f ./$(DEPDIR)/lib554-first.Po
- -rm -f ./$(DEPDIR)/lib554-lib554.Po
- -rm -f ./$(DEPDIR)/lib555-first.Po
- -rm -f ./$(DEPDIR)/lib555-lib555.Po
- -rm -f ./$(DEPDIR)/lib555-testutil.Po
- -rm -f ./$(DEPDIR)/lib556-first.Po
- -rm -f ./$(DEPDIR)/lib556-lib556.Po
- -rm -f ./$(DEPDIR)/lib557-first.Po
- -rm -f ./$(DEPDIR)/lib557-lib557.Po
- -rm -f ./$(DEPDIR)/lib558-first.Po
- -rm -f ./$(DEPDIR)/lib558-lib558.Po
- -rm -f ./$(DEPDIR)/lib559-first.Po
- -rm -f ./$(DEPDIR)/lib559-lib559.Po
- -rm -f ./$(DEPDIR)/lib560-first.Po
- -rm -f ./$(DEPDIR)/lib560-lib560.Po
- -rm -f ./$(DEPDIR)/lib560-testutil.Po
- -rm -f ./$(DEPDIR)/lib562-first.Po
- -rm -f ./$(DEPDIR)/lib562-lib562.Po
- -rm -f ./$(DEPDIR)/lib564-first.Po
- -rm -f ./$(DEPDIR)/lib564-lib564.Po
- -rm -f ./$(DEPDIR)/lib564-testutil.Po
+ -rm -f ./$(DEPDIR)/lib549.Po
+ -rm -f ./$(DEPDIR)/lib552.Po
+ -rm -f ./$(DEPDIR)/lib553.Po
+ -rm -f ./$(DEPDIR)/lib554.Po
+ -rm -f ./$(DEPDIR)/lib555.Po
+ -rm -f ./$(DEPDIR)/lib556.Po
+ -rm -f ./$(DEPDIR)/lib557.Po
+ -rm -f ./$(DEPDIR)/lib558.Po
+ -rm -f ./$(DEPDIR)/lib559.Po
+ -rm -f ./$(DEPDIR)/lib560.Po
+ -rm -f ./$(DEPDIR)/lib562.Po
+ -rm -f ./$(DEPDIR)/lib564.Po
-rm -f ./$(DEPDIR)/lib565-first.Po
-rm -f ./$(DEPDIR)/lib565-lib510.Po
- -rm -f ./$(DEPDIR)/lib566-first.Po
- -rm -f ./$(DEPDIR)/lib566-lib566.Po
- -rm -f ./$(DEPDIR)/lib567-first.Po
- -rm -f ./$(DEPDIR)/lib567-lib567.Po
- -rm -f ./$(DEPDIR)/lib568-first.Po
- -rm -f ./$(DEPDIR)/lib568-lib568.Po
- -rm -f ./$(DEPDIR)/lib569-first.Po
- -rm -f ./$(DEPDIR)/lib569-lib569.Po
- -rm -f ./$(DEPDIR)/lib570-first.Po
- -rm -f ./$(DEPDIR)/lib570-lib570.Po
- -rm -f ./$(DEPDIR)/lib571-first.Po
- -rm -f ./$(DEPDIR)/lib571-lib571.Po
- -rm -f ./$(DEPDIR)/lib572-first.Po
- -rm -f ./$(DEPDIR)/lib572-lib572.Po
- -rm -f ./$(DEPDIR)/lib573-first.Po
- -rm -f ./$(DEPDIR)/lib573-lib573.Po
- -rm -f ./$(DEPDIR)/lib573-testtrace.Po
- -rm -f ./$(DEPDIR)/lib573-testutil.Po
- -rm -f ./$(DEPDIR)/lib574-first.Po
- -rm -f ./$(DEPDIR)/lib574-lib574.Po
- -rm -f ./$(DEPDIR)/lib575-first.Po
- -rm -f ./$(DEPDIR)/lib575-lib575.Po
- -rm -f ./$(DEPDIR)/lib575-testutil.Po
- -rm -f ./$(DEPDIR)/lib576-first.Po
- -rm -f ./$(DEPDIR)/lib576-lib576.Po
- -rm -f ./$(DEPDIR)/lib578-first.Po
- -rm -f ./$(DEPDIR)/lib578-lib578.Po
- -rm -f ./$(DEPDIR)/lib579-first.Po
- -rm -f ./$(DEPDIR)/lib579-lib579.Po
- -rm -f ./$(DEPDIR)/lib582-first.Po
- -rm -f ./$(DEPDIR)/lib582-lib582.Po
- -rm -f ./$(DEPDIR)/lib582-testutil.Po
- -rm -f ./$(DEPDIR)/lib583-first.Po
- -rm -f ./$(DEPDIR)/lib583-lib583.Po
+ -rm -f ./$(DEPDIR)/lib566.Po
+ -rm -f ./$(DEPDIR)/lib567.Po
+ -rm -f ./$(DEPDIR)/lib568.Po
+ -rm -f ./$(DEPDIR)/lib569.Po
+ -rm -f ./$(DEPDIR)/lib570.Po
+ -rm -f ./$(DEPDIR)/lib571.Po
+ -rm -f ./$(DEPDIR)/lib572.Po
+ -rm -f ./$(DEPDIR)/lib573.Po
+ -rm -f ./$(DEPDIR)/lib574.Po
+ -rm -f ./$(DEPDIR)/lib575.Po
+ -rm -f ./$(DEPDIR)/lib576.Po
+ -rm -f ./$(DEPDIR)/lib578.Po
+ -rm -f ./$(DEPDIR)/lib579.Po
+ -rm -f ./$(DEPDIR)/lib582.Po
+ -rm -f ./$(DEPDIR)/lib583.Po
-rm -f ./$(DEPDIR)/lib584-first.Po
-rm -f ./$(DEPDIR)/lib584-lib589.Po
-rm -f ./$(DEPDIR)/lib585-first.Po
-rm -f ./$(DEPDIR)/lib585-lib500.Po
-rm -f ./$(DEPDIR)/lib585-testtrace.Po
-rm -f ./$(DEPDIR)/lib585-testutil.Po
- -rm -f ./$(DEPDIR)/lib586-first.Po
- -rm -f ./$(DEPDIR)/lib586-lib586.Po
+ -rm -f ./$(DEPDIR)/lib586.Po
-rm -f ./$(DEPDIR)/lib587-first.Po
-rm -f ./$(DEPDIR)/lib587-lib554.Po
- -rm -f ./$(DEPDIR)/lib589-first.Po
- -rm -f ./$(DEPDIR)/lib589-lib589.Po
- -rm -f ./$(DEPDIR)/lib590-first.Po
- -rm -f ./$(DEPDIR)/lib590-lib590.Po
- -rm -f ./$(DEPDIR)/lib591-first.Po
- -rm -f ./$(DEPDIR)/lib591-lib591.Po
- -rm -f ./$(DEPDIR)/lib591-testutil.Po
- -rm -f ./$(DEPDIR)/lib597-first.Po
- -rm -f ./$(DEPDIR)/lib597-lib597.Po
- -rm -f ./$(DEPDIR)/lib597-testutil.Po
- -rm -f ./$(DEPDIR)/lib598-first.Po
- -rm -f ./$(DEPDIR)/lib598-lib598.Po
- -rm -f ./$(DEPDIR)/lib599-first.Po
- -rm -f ./$(DEPDIR)/lib599-lib599.Po
- -rm -f ./$(DEPDIR)/lib643-first.Po
- -rm -f ./$(DEPDIR)/lib643-lib643.Po
+ -rm -f ./$(DEPDIR)/lib589.Po
+ -rm -f ./$(DEPDIR)/lib590.Po
+ -rm -f ./$(DEPDIR)/lib591.Po
+ -rm -f ./$(DEPDIR)/lib597.Po
+ -rm -f ./$(DEPDIR)/lib598.Po
+ -rm -f ./$(DEPDIR)/lib599.Po
+ -rm -f ./$(DEPDIR)/lib643.Po
-rm -f ./$(DEPDIR)/lib645-first.Po
-rm -f ./$(DEPDIR)/lib645-lib643.Po
- -rm -f ./$(DEPDIR)/lib650-first.Po
- -rm -f ./$(DEPDIR)/lib650-lib650.Po
- -rm -f ./$(DEPDIR)/lib651-first.Po
- -rm -f ./$(DEPDIR)/lib651-lib651.Po
- -rm -f ./$(DEPDIR)/lib652-first.Po
- -rm -f ./$(DEPDIR)/lib652-lib652.Po
- -rm -f ./$(DEPDIR)/lib653-first.Po
- -rm -f ./$(DEPDIR)/lib653-lib653.Po
- -rm -f ./$(DEPDIR)/lib654-first.Po
- -rm -f ./$(DEPDIR)/lib654-lib654.Po
- -rm -f ./$(DEPDIR)/lib655-first.Po
- -rm -f ./$(DEPDIR)/lib655-lib655.Po
- -rm -f ./$(DEPDIR)/lib658-first.Po
- -rm -f ./$(DEPDIR)/lib658-lib658.Po
- -rm -f ./$(DEPDIR)/lib658-testutil.Po
- -rm -f ./$(DEPDIR)/lib659-first.Po
- -rm -f ./$(DEPDIR)/lib659-lib659.Po
- -rm -f ./$(DEPDIR)/lib659-testutil.Po
- -rm -f ./$(DEPDIR)/lib661-first.Po
- -rm -f ./$(DEPDIR)/lib661-lib661.Po
- -rm -f ./$(DEPDIR)/lib666-first.Po
- -rm -f ./$(DEPDIR)/lib666-lib666.Po
- -rm -f ./$(DEPDIR)/lib667-first.Po
- -rm -f ./$(DEPDIR)/lib667-lib667.Po
- -rm -f ./$(DEPDIR)/lib667-testutil.Po
- -rm -f ./$(DEPDIR)/lib668-first.Po
- -rm -f ./$(DEPDIR)/lib668-lib668.Po
- -rm -f ./$(DEPDIR)/lib668-testutil.Po
+ -rm -f ./$(DEPDIR)/lib650.Po
+ -rm -f ./$(DEPDIR)/lib651.Po
+ -rm -f ./$(DEPDIR)/lib652.Po
+ -rm -f ./$(DEPDIR)/lib653.Po
+ -rm -f ./$(DEPDIR)/lib654.Po
+ -rm -f ./$(DEPDIR)/lib655.Po
+ -rm -f ./$(DEPDIR)/lib658.Po
+ -rm -f ./$(DEPDIR)/lib659.Po
+ -rm -f ./$(DEPDIR)/lib661.Po
+ -rm -f ./$(DEPDIR)/lib666.Po
+ -rm -f ./$(DEPDIR)/lib667.Po
+ -rm -f ./$(DEPDIR)/lib668.Po
-rm -f ./$(DEPDIR)/lib670-first.Po
-rm -f ./$(DEPDIR)/lib670-lib670.Po
-rm -f ./$(DEPDIR)/lib670-testutil.Po
+ -rm -f ./$(DEPDIR)/lib670.Po
-rm -f ./$(DEPDIR)/lib671-first.Po
-rm -f ./$(DEPDIR)/lib671-lib670.Po
-rm -f ./$(DEPDIR)/lib671-testutil.Po
-rm -f ./$(DEPDIR)/lib672-first.Po
-rm -f ./$(DEPDIR)/lib672-lib670.Po
-rm -f ./$(DEPDIR)/lib672-testutil.Po
- -rm -f ./$(DEPDIR)/lib673-first.Po
- -rm -f ./$(DEPDIR)/lib673-lib670.Po
- -rm -f ./$(DEPDIR)/lib673-testutil.Po
- -rm -f ./$(DEPDIR)/lib674-first.Po
- -rm -f ./$(DEPDIR)/lib674-lib674.Po
- -rm -f ./$(DEPDIR)/lib674-testutil.Po
- -rm -f ./$(DEPDIR)/lib676-first.Po
- -rm -f ./$(DEPDIR)/lib676-lib676.Po
- -rm -f ./$(DEPDIR)/lib676-testutil.Po
- -rm -f ./$(DEPDIR)/lib677-first.Po
- -rm -f ./$(DEPDIR)/lib677-lib677.Po
- -rm -f ./$(DEPDIR)/lib677-testutil.Po
- -rm -f ./$(DEPDIR)/lib678-first.Po
- -rm -f ./$(DEPDIR)/lib678-lib678.Po
- -rm -f ./$(DEPDIR)/lib678-testutil.Po
- -rm -f ./$(DEPDIR)/libauthretry-first.Po
- -rm -f ./$(DEPDIR)/libauthretry-libauthretry.Po
+ -rm -f ./$(DEPDIR)/lib674.Po
+ -rm -f ./$(DEPDIR)/lib676.Po
+ -rm -f ./$(DEPDIR)/lib677.Po
+ -rm -f ./$(DEPDIR)/lib678.Po
+ -rm -f ./$(DEPDIR)/libauthretry.Po
-rm -f ./$(DEPDIR)/libhostname_la-sethostname.Plo
- -rm -f ./$(DEPDIR)/libntlmconnect-first.Po
- -rm -f ./$(DEPDIR)/libntlmconnect-libntlmconnect.Po
- -rm -f ./$(DEPDIR)/libntlmconnect-testutil.Po
- -rm -f ./$(DEPDIR)/libprereq-first.Po
- -rm -f ./$(DEPDIR)/libprereq-libprereq.Po
- -rm -f ./$(DEPDIR)/libprereq-testutil.Po
+ -rm -f ./$(DEPDIR)/libntlmconnect.Po
+ -rm -f ./$(DEPDIR)/libprereq.Po
-rm -f ./$(DEPDIR)/libstubgss_la-stub_gssapi.Plo
+ -rm -f ./$(DEPDIR)/testtrace.Po
-rm -f ./$(DEPDIR)/testutil.Po
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
@@ -17929,15 +5778,8 @@ install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
- -rm -f ../../lib/$(DEPDIR)/chkdecimalpoint-dynbuf.Po
- -rm -f ../../lib/$(DEPDIR)/chkdecimalpoint-mprintf.Po
- -rm -f ../../lib/$(DEPDIR)/chkdecimalpoint-strdup.Po
- -rm -f ../../lib/$(DEPDIR)/chkhostname-curl_gethostname.Po
- -rm -f ../../lib/$(DEPDIR)/lib1156-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1156-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1500-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1501-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1501-warnless.Po
+ -rm -f ../../lib/$(DEPDIR)/curl_gethostname.Po
+ -rm -f ../../lib/$(DEPDIR)/curl_multibyte.Po
-rm -f ../../lib/$(DEPDIR)/lib1502-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib1502-warnless.Po
-rm -f ../../lib/$(DEPDIR)/lib1503-timediff.Po
@@ -17946,178 +5788,16 @@ maintainer-clean: maintainer-clean-am
-rm -f ../../lib/$(DEPDIR)/lib1504-warnless.Po
-rm -f ../../lib/$(DEPDIR)/lib1505-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib1505-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1506-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1506-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1507-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1507-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1508-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1508-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1509-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1509-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1510-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1510-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1511-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1511-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1512-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1512-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1513-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1513-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1514-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1514-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1515-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1515-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1517-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1518-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1520-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib1521-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1522-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1523-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1525-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1525-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1526-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1526-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1527-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1527-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1528-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1528-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1529-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1529-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1530-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1530-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1531-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1531-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1532-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1532-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1533-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1533-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1534-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1534-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1535-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1535-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1536-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1536-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1537-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1537-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1538-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1538-warnless.Po
-rm -f ../../lib/$(DEPDIR)/lib1539-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib1539-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1540-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1540-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1542-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1542-warnless.Po
-rm -f ../../lib/$(DEPDIR)/lib1543-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1550-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1551-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1552-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1553-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1554-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1555-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1555-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1556-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1556-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1557-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1557-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1564-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1564-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1565-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1565-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1567-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1568-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1569-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1591-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1591-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1592-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1592-warnless.Po
+ -rm -f ../../lib/$(DEPDIR)/lib1545-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib1596-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib1596-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1905-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1905-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1906-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1906-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1907-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1907-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1908-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1908-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1910-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1910-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1911-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1911-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1912-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1912-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1913-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1913-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1915-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1915-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1916-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1916-warnless.Po
-rm -f ../../lib/$(DEPDIR)/lib1917-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib1917-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1918-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1918-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1919-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1919-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1933-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1933-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1934-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1934-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1935-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1935-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1936-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1936-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib1937-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1938-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1939-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1940-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1945-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib1946-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1947-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1948-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1955-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib1955-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib3010-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib3010-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib3025-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib3025-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib3026-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib3026-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib3027-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib3027-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib500-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib500-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib501-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib502-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib502-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib503-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib503-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib504-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib504-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib505-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib505-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib506-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib507-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib507-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib508-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib509-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib510-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib511-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib512-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib513-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib514-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib515-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib516-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib517-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib518-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib518-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib518-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib519-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib520-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib521-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib523-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib524-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib525-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib525-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib525-warnless.Po
-rm -f ../../lib/$(DEPDIR)/lib526-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib526-warnless.Po
-rm -f ../../lib/$(DEPDIR)/lib527-timediff.Po
@@ -18125,141 +5805,30 @@ maintainer-clean: maintainer-clean-am
-rm -f ../../lib/$(DEPDIR)/lib529-curl_multibyte.Po
-rm -f ../../lib/$(DEPDIR)/lib529-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib529-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib530-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib530-warnless.Po
-rm -f ../../lib/$(DEPDIR)/lib532-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib532-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib533-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib533-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib537-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib537-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib537-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib539-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib540-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib540-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib541-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib541-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib542-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib543-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib544-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib545-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib547-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib548-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib549-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib552-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib552-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib553-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib554-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib555-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib555-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib556-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib556-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib557-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib558-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib559-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib560-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib560-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib562-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib564-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib564-warnless.Po
-rm -f ../../lib/$(DEPDIR)/lib565-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib566-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib566-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib567-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib568-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib568-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib569-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib569-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib570-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib571-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib571-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib571-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib572-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib572-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib573-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib573-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib574-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib575-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib575-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib576-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib578-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib578-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib579-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib579-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib582-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib582-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib582-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib583-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib584-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib585-curl_multibyte.Po
-rm -f ../../lib/$(DEPDIR)/lib585-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib586-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib587-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib589-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib590-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib591-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib591-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib591-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib597-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib597-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib598-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib599-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib599-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib643-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib645-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib650-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib651-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib652-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib653-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib654-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib655-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib658-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib658-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib659-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib659-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib661-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib666-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib667-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib667-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib668-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib668-warnless.Po
-rm -f ../../lib/$(DEPDIR)/lib670-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib670-warnless.Po
-rm -f ../../lib/$(DEPDIR)/lib671-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib671-warnless.Po
-rm -f ../../lib/$(DEPDIR)/lib672-timediff.Po
-rm -f ../../lib/$(DEPDIR)/lib672-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib673-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib673-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib674-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib674-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib676-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib676-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib677-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib677-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib677-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/lib678-curl_multibyte.Po
- -rm -f ../../lib/$(DEPDIR)/lib678-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/lib678-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/libauthretry-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/libntlmconnect-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/libntlmconnect-warnless.Po
- -rm -f ../../lib/$(DEPDIR)/libprereq-timediff.Po
- -rm -f ../../lib/$(DEPDIR)/libprereq-warnless.Po
-rm -f ../../lib/$(DEPDIR)/timediff.Po
-rm -f ../../lib/$(DEPDIR)/warnless.Po
- -rm -f ./$(DEPDIR)/chkdecimalpoint-chkdecimalpoint.Po
- -rm -f ./$(DEPDIR)/chkhostname-chkhostname.Po
+ -rm -f ./$(DEPDIR)/chkhostname.Po
-rm -f ./$(DEPDIR)/first.Po
- -rm -f ./$(DEPDIR)/lib1156-first.Po
- -rm -f ./$(DEPDIR)/lib1156-lib1156.Po
- -rm -f ./$(DEPDIR)/lib1156-testutil.Po
- -rm -f ./$(DEPDIR)/lib1500-first.Po
- -rm -f ./$(DEPDIR)/lib1500-lib1500.Po
- -rm -f ./$(DEPDIR)/lib1500-testutil.Po
- -rm -f ./$(DEPDIR)/lib1501-first.Po
- -rm -f ./$(DEPDIR)/lib1501-lib1501.Po
- -rm -f ./$(DEPDIR)/lib1501-testutil.Po
+ -rm -f ./$(DEPDIR)/lib1156.Po
+ -rm -f ./$(DEPDIR)/lib1301.Po
+ -rm -f ./$(DEPDIR)/lib1500.Po
+ -rm -f ./$(DEPDIR)/lib1501.Po
-rm -f ./$(DEPDIR)/lib1502-first.Po
-rm -f ./$(DEPDIR)/lib1502-lib1502.Po
-rm -f ./$(DEPDIR)/lib1502-testutil.Po
@@ -18272,289 +5841,154 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/lib1505-first.Po
-rm -f ./$(DEPDIR)/lib1505-lib1502.Po
-rm -f ./$(DEPDIR)/lib1505-testutil.Po
- -rm -f ./$(DEPDIR)/lib1506-first.Po
- -rm -f ./$(DEPDIR)/lib1506-lib1506.Po
- -rm -f ./$(DEPDIR)/lib1506-testutil.Po
- -rm -f ./$(DEPDIR)/lib1507-first.Po
- -rm -f ./$(DEPDIR)/lib1507-lib1507.Po
- -rm -f ./$(DEPDIR)/lib1507-testutil.Po
- -rm -f ./$(DEPDIR)/lib1508-first.Po
- -rm -f ./$(DEPDIR)/lib1508-lib1508.Po
- -rm -f ./$(DEPDIR)/lib1508-testutil.Po
- -rm -f ./$(DEPDIR)/lib1509-first.Po
- -rm -f ./$(DEPDIR)/lib1509-lib1509.Po
- -rm -f ./$(DEPDIR)/lib1509-testutil.Po
- -rm -f ./$(DEPDIR)/lib1510-first.Po
- -rm -f ./$(DEPDIR)/lib1510-lib1510.Po
- -rm -f ./$(DEPDIR)/lib1510-testutil.Po
- -rm -f ./$(DEPDIR)/lib1511-first.Po
- -rm -f ./$(DEPDIR)/lib1511-lib1511.Po
- -rm -f ./$(DEPDIR)/lib1511-testutil.Po
- -rm -f ./$(DEPDIR)/lib1512-first.Po
- -rm -f ./$(DEPDIR)/lib1512-lib1512.Po
- -rm -f ./$(DEPDIR)/lib1512-testutil.Po
- -rm -f ./$(DEPDIR)/lib1513-first.Po
- -rm -f ./$(DEPDIR)/lib1513-lib1513.Po
- -rm -f ./$(DEPDIR)/lib1513-testutil.Po
- -rm -f ./$(DEPDIR)/lib1514-first.Po
- -rm -f ./$(DEPDIR)/lib1514-lib1514.Po
- -rm -f ./$(DEPDIR)/lib1514-testutil.Po
- -rm -f ./$(DEPDIR)/lib1515-first.Po
- -rm -f ./$(DEPDIR)/lib1515-lib1515.Po
- -rm -f ./$(DEPDIR)/lib1515-testutil.Po
- -rm -f ./$(DEPDIR)/lib1517-first.Po
- -rm -f ./$(DEPDIR)/lib1517-lib1517.Po
- -rm -f ./$(DEPDIR)/lib1518-first.Po
- -rm -f ./$(DEPDIR)/lib1518-lib1518.Po
- -rm -f ./$(DEPDIR)/lib1520-first.Po
- -rm -f ./$(DEPDIR)/lib1520-lib1520.Po
+ -rm -f ./$(DEPDIR)/lib1506.Po
+ -rm -f ./$(DEPDIR)/lib1507.Po
+ -rm -f ./$(DEPDIR)/lib1508.Po
+ -rm -f ./$(DEPDIR)/lib1509.Po
+ -rm -f ./$(DEPDIR)/lib1510.Po
+ -rm -f ./$(DEPDIR)/lib1511.Po
+ -rm -f ./$(DEPDIR)/lib1512.Po
+ -rm -f ./$(DEPDIR)/lib1513.Po
+ -rm -f ./$(DEPDIR)/lib1514.Po
+ -rm -f ./$(DEPDIR)/lib1515.Po
+ -rm -f ./$(DEPDIR)/lib1517.Po
+ -rm -f ./$(DEPDIR)/lib1518.Po
+ -rm -f ./$(DEPDIR)/lib1520.Po
-rm -f ./$(DEPDIR)/lib1521-first.Po
-rm -f ./$(DEPDIR)/lib1521-lib1521.Po
- -rm -f ./$(DEPDIR)/lib1522-first.Po
- -rm -f ./$(DEPDIR)/lib1522-lib1522.Po
- -rm -f ./$(DEPDIR)/lib1522-testtrace.Po
- -rm -f ./$(DEPDIR)/lib1522-testutil.Po
- -rm -f ./$(DEPDIR)/lib1523-first.Po
- -rm -f ./$(DEPDIR)/lib1523-lib1523.Po
- -rm -f ./$(DEPDIR)/lib1525-first.Po
- -rm -f ./$(DEPDIR)/lib1525-lib1525.Po
- -rm -f ./$(DEPDIR)/lib1525-testutil.Po
- -rm -f ./$(DEPDIR)/lib1526-first.Po
- -rm -f ./$(DEPDIR)/lib1526-lib1526.Po
- -rm -f ./$(DEPDIR)/lib1526-testutil.Po
- -rm -f ./$(DEPDIR)/lib1527-first.Po
- -rm -f ./$(DEPDIR)/lib1527-lib1527.Po
- -rm -f ./$(DEPDIR)/lib1527-testutil.Po
- -rm -f ./$(DEPDIR)/lib1528-first.Po
- -rm -f ./$(DEPDIR)/lib1528-lib1528.Po
- -rm -f ./$(DEPDIR)/lib1528-testutil.Po
- -rm -f ./$(DEPDIR)/lib1529-first.Po
- -rm -f ./$(DEPDIR)/lib1529-lib1529.Po
- -rm -f ./$(DEPDIR)/lib1529-testutil.Po
- -rm -f ./$(DEPDIR)/lib1530-first.Po
- -rm -f ./$(DEPDIR)/lib1530-lib1530.Po
- -rm -f ./$(DEPDIR)/lib1530-testutil.Po
- -rm -f ./$(DEPDIR)/lib1531-first.Po
- -rm -f ./$(DEPDIR)/lib1531-lib1531.Po
- -rm -f ./$(DEPDIR)/lib1531-testutil.Po
- -rm -f ./$(DEPDIR)/lib1532-first.Po
- -rm -f ./$(DEPDIR)/lib1532-lib1532.Po
- -rm -f ./$(DEPDIR)/lib1532-testutil.Po
- -rm -f ./$(DEPDIR)/lib1533-first.Po
- -rm -f ./$(DEPDIR)/lib1533-lib1533.Po
- -rm -f ./$(DEPDIR)/lib1533-testutil.Po
- -rm -f ./$(DEPDIR)/lib1534-first.Po
- -rm -f ./$(DEPDIR)/lib1534-lib1534.Po
- -rm -f ./$(DEPDIR)/lib1534-testutil.Po
- -rm -f ./$(DEPDIR)/lib1535-first.Po
- -rm -f ./$(DEPDIR)/lib1535-lib1535.Po
- -rm -f ./$(DEPDIR)/lib1535-testutil.Po
- -rm -f ./$(DEPDIR)/lib1536-first.Po
- -rm -f ./$(DEPDIR)/lib1536-lib1536.Po
- -rm -f ./$(DEPDIR)/lib1536-testutil.Po
- -rm -f ./$(DEPDIR)/lib1537-first.Po
- -rm -f ./$(DEPDIR)/lib1537-lib1537.Po
- -rm -f ./$(DEPDIR)/lib1537-testutil.Po
- -rm -f ./$(DEPDIR)/lib1538-first.Po
- -rm -f ./$(DEPDIR)/lib1538-lib1538.Po
- -rm -f ./$(DEPDIR)/lib1538-testutil.Po
+ -rm -f ./$(DEPDIR)/lib1522.Po
+ -rm -f ./$(DEPDIR)/lib1523.Po
+ -rm -f ./$(DEPDIR)/lib1525.Po
+ -rm -f ./$(DEPDIR)/lib1526.Po
+ -rm -f ./$(DEPDIR)/lib1527.Po
+ -rm -f ./$(DEPDIR)/lib1528.Po
+ -rm -f ./$(DEPDIR)/lib1529.Po
+ -rm -f ./$(DEPDIR)/lib1530.Po
+ -rm -f ./$(DEPDIR)/lib1531.Po
+ -rm -f ./$(DEPDIR)/lib1532.Po
+ -rm -f ./$(DEPDIR)/lib1533.Po
+ -rm -f ./$(DEPDIR)/lib1534.Po
+ -rm -f ./$(DEPDIR)/lib1535.Po
+ -rm -f ./$(DEPDIR)/lib1536.Po
+ -rm -f ./$(DEPDIR)/lib1537.Po
+ -rm -f ./$(DEPDIR)/lib1538.Po
-rm -f ./$(DEPDIR)/lib1539-first.Po
-rm -f ./$(DEPDIR)/lib1539-lib1514.Po
-rm -f ./$(DEPDIR)/lib1539-testutil.Po
- -rm -f ./$(DEPDIR)/lib1540-first.Po
- -rm -f ./$(DEPDIR)/lib1540-lib1540.Po
- -rm -f ./$(DEPDIR)/lib1540-testutil.Po
- -rm -f ./$(DEPDIR)/lib1542-first.Po
- -rm -f ./$(DEPDIR)/lib1542-lib1542.Po
- -rm -f ./$(DEPDIR)/lib1542-testtrace.Po
- -rm -f ./$(DEPDIR)/lib1542-testutil.Po
+ -rm -f ./$(DEPDIR)/lib1540.Po
+ -rm -f ./$(DEPDIR)/lib1542.Po
-rm -f ./$(DEPDIR)/lib1543-first.Po
-rm -f ./$(DEPDIR)/lib1543-lib1518.Po
- -rm -f ./$(DEPDIR)/lib1550-first.Po
- -rm -f ./$(DEPDIR)/lib1550-lib1550.Po
- -rm -f ./$(DEPDIR)/lib1551-first.Po
- -rm -f ./$(DEPDIR)/lib1551-lib1551.Po
- -rm -f ./$(DEPDIR)/lib1552-first.Po
- -rm -f ./$(DEPDIR)/lib1552-lib1552.Po
- -rm -f ./$(DEPDIR)/lib1552-testutil.Po
- -rm -f ./$(DEPDIR)/lib1553-first.Po
- -rm -f ./$(DEPDIR)/lib1553-lib1553.Po
- -rm -f ./$(DEPDIR)/lib1553-testutil.Po
- -rm -f ./$(DEPDIR)/lib1554-first.Po
- -rm -f ./$(DEPDIR)/lib1554-lib1554.Po
- -rm -f ./$(DEPDIR)/lib1555-first.Po
- -rm -f ./$(DEPDIR)/lib1555-lib1555.Po
- -rm -f ./$(DEPDIR)/lib1555-testutil.Po
- -rm -f ./$(DEPDIR)/lib1556-first.Po
- -rm -f ./$(DEPDIR)/lib1556-lib1556.Po
- -rm -f ./$(DEPDIR)/lib1556-testutil.Po
- -rm -f ./$(DEPDIR)/lib1557-first.Po
- -rm -f ./$(DEPDIR)/lib1557-lib1557.Po
- -rm -f ./$(DEPDIR)/lib1557-testutil.Po
+ -rm -f ./$(DEPDIR)/lib1545-first.Po
+ -rm -f ./$(DEPDIR)/lib1545-lib1545.Po
+ -rm -f ./$(DEPDIR)/lib1550.Po
+ -rm -f ./$(DEPDIR)/lib1551.Po
+ -rm -f ./$(DEPDIR)/lib1552.Po
+ -rm -f ./$(DEPDIR)/lib1553.Po
+ -rm -f ./$(DEPDIR)/lib1554.Po
+ -rm -f ./$(DEPDIR)/lib1555.Po
+ -rm -f ./$(DEPDIR)/lib1556.Po
+ -rm -f ./$(DEPDIR)/lib1557.Po
-rm -f ./$(DEPDIR)/lib1558.Po
-rm -f ./$(DEPDIR)/lib1559.Po
-rm -f ./$(DEPDIR)/lib1560.Po
- -rm -f ./$(DEPDIR)/lib1564-first.Po
- -rm -f ./$(DEPDIR)/lib1564-lib1564.Po
- -rm -f ./$(DEPDIR)/lib1564-testutil.Po
- -rm -f ./$(DEPDIR)/lib1565-first.Po
- -rm -f ./$(DEPDIR)/lib1565-lib1565.Po
- -rm -f ./$(DEPDIR)/lib1565-testutil.Po
- -rm -f ./$(DEPDIR)/lib1567-first.Po
- -rm -f ./$(DEPDIR)/lib1567-lib1567.Po
- -rm -f ./$(DEPDIR)/lib1568-first.Po
- -rm -f ./$(DEPDIR)/lib1568-lib1568.Po
- -rm -f ./$(DEPDIR)/lib1569-first.Po
- -rm -f ./$(DEPDIR)/lib1569-lib1569.Po
- -rm -f ./$(DEPDIR)/lib1591-first.Po
- -rm -f ./$(DEPDIR)/lib1591-lib1591.Po
- -rm -f ./$(DEPDIR)/lib1591-testutil.Po
- -rm -f ./$(DEPDIR)/lib1592-first.Po
- -rm -f ./$(DEPDIR)/lib1592-lib1592.Po
- -rm -f ./$(DEPDIR)/lib1592-testutil.Po
+ -rm -f ./$(DEPDIR)/lib1564.Po
+ -rm -f ./$(DEPDIR)/lib1565.Po
+ -rm -f ./$(DEPDIR)/lib1567.Po
+ -rm -f ./$(DEPDIR)/lib1568.Po
+ -rm -f ./$(DEPDIR)/lib1569.Po
+ -rm -f ./$(DEPDIR)/lib1591.Po
+ -rm -f ./$(DEPDIR)/lib1592.Po
-rm -f ./$(DEPDIR)/lib1593.Po
-rm -f ./$(DEPDIR)/lib1594.Po
-rm -f ./$(DEPDIR)/lib1596-first.Po
-rm -f ./$(DEPDIR)/lib1596-lib1594.Po
-rm -f ./$(DEPDIR)/lib1596-testutil.Po
-rm -f ./$(DEPDIR)/lib1597.Po
- -rm -f ./$(DEPDIR)/lib1905-first.Po
- -rm -f ./$(DEPDIR)/lib1905-lib1905.Po
- -rm -f ./$(DEPDIR)/lib1905-testutil.Po
- -rm -f ./$(DEPDIR)/lib1906-first.Po
- -rm -f ./$(DEPDIR)/lib1906-lib1906.Po
- -rm -f ./$(DEPDIR)/lib1906-testutil.Po
- -rm -f ./$(DEPDIR)/lib1907-first.Po
- -rm -f ./$(DEPDIR)/lib1907-lib1907.Po
- -rm -f ./$(DEPDIR)/lib1907-testutil.Po
- -rm -f ./$(DEPDIR)/lib1908-first.Po
- -rm -f ./$(DEPDIR)/lib1908-lib1908.Po
- -rm -f ./$(DEPDIR)/lib1908-testutil.Po
- -rm -f ./$(DEPDIR)/lib1910-first.Po
- -rm -f ./$(DEPDIR)/lib1910-lib1910.Po
- -rm -f ./$(DEPDIR)/lib1910-testutil.Po
- -rm -f ./$(DEPDIR)/lib1911-first.Po
- -rm -f ./$(DEPDIR)/lib1911-lib1911.Po
- -rm -f ./$(DEPDIR)/lib1911-testutil.Po
- -rm -f ./$(DEPDIR)/lib1912-first.Po
- -rm -f ./$(DEPDIR)/lib1912-lib1912.Po
- -rm -f ./$(DEPDIR)/lib1912-testutil.Po
- -rm -f ./$(DEPDIR)/lib1913-first.Po
- -rm -f ./$(DEPDIR)/lib1913-lib1913.Po
- -rm -f ./$(DEPDIR)/lib1913-testutil.Po
- -rm -f ./$(DEPDIR)/lib1915-first.Po
- -rm -f ./$(DEPDIR)/lib1915-lib1915.Po
- -rm -f ./$(DEPDIR)/lib1915-testutil.Po
- -rm -f ./$(DEPDIR)/lib1916-first.Po
- -rm -f ./$(DEPDIR)/lib1916-lib1916.Po
+ -rm -f ./$(DEPDIR)/lib1662.Po
+ -rm -f ./$(DEPDIR)/lib1900.Po
+ -rm -f ./$(DEPDIR)/lib1903.Po
+ -rm -f ./$(DEPDIR)/lib1905.Po
+ -rm -f ./$(DEPDIR)/lib1906.Po
+ -rm -f ./$(DEPDIR)/lib1907.Po
+ -rm -f ./$(DEPDIR)/lib1908.Po
+ -rm -f ./$(DEPDIR)/lib1910.Po
+ -rm -f ./$(DEPDIR)/lib1911.Po
+ -rm -f ./$(DEPDIR)/lib1912.Po
+ -rm -f ./$(DEPDIR)/lib1913.Po
+ -rm -f ./$(DEPDIR)/lib1915.Po
+ -rm -f ./$(DEPDIR)/lib1916.Po
-rm -f ./$(DEPDIR)/lib1917-first.Po
-rm -f ./$(DEPDIR)/lib1917-lib1916.Po
- -rm -f ./$(DEPDIR)/lib1918-first.Po
- -rm -f ./$(DEPDIR)/lib1918-lib1918.Po
- -rm -f ./$(DEPDIR)/lib1919-first.Po
- -rm -f ./$(DEPDIR)/lib1919-lib1919.Po
- -rm -f ./$(DEPDIR)/lib1933-first.Po
- -rm -f ./$(DEPDIR)/lib1933-lib1933.Po
- -rm -f ./$(DEPDIR)/lib1933-testutil.Po
- -rm -f ./$(DEPDIR)/lib1934-first.Po
- -rm -f ./$(DEPDIR)/lib1934-lib1934.Po
- -rm -f ./$(DEPDIR)/lib1934-testutil.Po
- -rm -f ./$(DEPDIR)/lib1935-first.Po
- -rm -f ./$(DEPDIR)/lib1935-lib1935.Po
- -rm -f ./$(DEPDIR)/lib1935-testutil.Po
- -rm -f ./$(DEPDIR)/lib1936-first.Po
- -rm -f ./$(DEPDIR)/lib1936-lib1936.Po
- -rm -f ./$(DEPDIR)/lib1936-testutil.Po
- -rm -f ./$(DEPDIR)/lib1937-first.Po
- -rm -f ./$(DEPDIR)/lib1937-lib1937.Po
- -rm -f ./$(DEPDIR)/lib1938-first.Po
- -rm -f ./$(DEPDIR)/lib1938-lib1938.Po
- -rm -f ./$(DEPDIR)/lib1939-first.Po
- -rm -f ./$(DEPDIR)/lib1939-lib1939.Po
- -rm -f ./$(DEPDIR)/lib1940-first.Po
- -rm -f ./$(DEPDIR)/lib1940-lib1940.Po
- -rm -f ./$(DEPDIR)/lib1945-first.Po
- -rm -f ./$(DEPDIR)/lib1945-lib1945.Po
+ -rm -f ./$(DEPDIR)/lib1918.Po
+ -rm -f ./$(DEPDIR)/lib1919.Po
+ -rm -f ./$(DEPDIR)/lib1933.Po
+ -rm -f ./$(DEPDIR)/lib1934.Po
+ -rm -f ./$(DEPDIR)/lib1935.Po
+ -rm -f ./$(DEPDIR)/lib1936.Po
+ -rm -f ./$(DEPDIR)/lib1937.Po
+ -rm -f ./$(DEPDIR)/lib1938.Po
+ -rm -f ./$(DEPDIR)/lib1939.Po
+ -rm -f ./$(DEPDIR)/lib1940.Po
+ -rm -f ./$(DEPDIR)/lib1945.Po
-rm -f ./$(DEPDIR)/lib1946-first.Po
-rm -f ./$(DEPDIR)/lib1946-lib1940.Po
- -rm -f ./$(DEPDIR)/lib1947-first.Po
- -rm -f ./$(DEPDIR)/lib1947-lib1947.Po
- -rm -f ./$(DEPDIR)/lib1948-first.Po
- -rm -f ./$(DEPDIR)/lib1948-lib1948.Po
- -rm -f ./$(DEPDIR)/lib1955-first.Po
- -rm -f ./$(DEPDIR)/lib1955-lib1955.Po
- -rm -f ./$(DEPDIR)/lib1955-testutil.Po
+ -rm -f ./$(DEPDIR)/lib1947.Po
+ -rm -f ./$(DEPDIR)/lib1948.Po
+ -rm -f ./$(DEPDIR)/lib1955.Po
+ -rm -f ./$(DEPDIR)/lib1956.Po
+ -rm -f ./$(DEPDIR)/lib1957.Po
+ -rm -f ./$(DEPDIR)/lib1958.Po
+ -rm -f ./$(DEPDIR)/lib1959.Po
+ -rm -f ./$(DEPDIR)/lib1960.Po
+ -rm -f ./$(DEPDIR)/lib1964.Po
+ -rm -f ./$(DEPDIR)/lib1970.Po
+ -rm -f ./$(DEPDIR)/lib1971.Po
+ -rm -f ./$(DEPDIR)/lib1972.Po
+ -rm -f ./$(DEPDIR)/lib1973.Po
+ -rm -f ./$(DEPDIR)/lib1974.Po
+ -rm -f ./$(DEPDIR)/lib1975.Po
-rm -f ./$(DEPDIR)/lib2301.Po
-rm -f ./$(DEPDIR)/lib2302.Po
- -rm -f ./$(DEPDIR)/lib3010-first.Po
- -rm -f ./$(DEPDIR)/lib3010-lib3010.Po
- -rm -f ./$(DEPDIR)/lib3010-testutil.Po
- -rm -f ./$(DEPDIR)/lib3025-first.Po
- -rm -f ./$(DEPDIR)/lib3025-lib3025.Po
- -rm -f ./$(DEPDIR)/lib3025-testutil.Po
- -rm -f ./$(DEPDIR)/lib3026-first.Po
- -rm -f ./$(DEPDIR)/lib3026-lib3026.Po
- -rm -f ./$(DEPDIR)/lib3026-testutil.Po
- -rm -f ./$(DEPDIR)/lib3027-first.Po
- -rm -f ./$(DEPDIR)/lib3027-lib3027.Po
- -rm -f ./$(DEPDIR)/lib3027-testutil.Po
- -rm -f ./$(DEPDIR)/lib500-first.Po
- -rm -f ./$(DEPDIR)/lib500-lib500.Po
- -rm -f ./$(DEPDIR)/lib500-testtrace.Po
- -rm -f ./$(DEPDIR)/lib500-testutil.Po
- -rm -f ./$(DEPDIR)/lib501-first.Po
- -rm -f ./$(DEPDIR)/lib501-lib501.Po
- -rm -f ./$(DEPDIR)/lib502-first.Po
- -rm -f ./$(DEPDIR)/lib502-lib502.Po
- -rm -f ./$(DEPDIR)/lib502-testutil.Po
- -rm -f ./$(DEPDIR)/lib503-first.Po
- -rm -f ./$(DEPDIR)/lib503-lib503.Po
- -rm -f ./$(DEPDIR)/lib503-testutil.Po
- -rm -f ./$(DEPDIR)/lib504-first.Po
- -rm -f ./$(DEPDIR)/lib504-lib504.Po
- -rm -f ./$(DEPDIR)/lib504-testutil.Po
- -rm -f ./$(DEPDIR)/lib505-first.Po
- -rm -f ./$(DEPDIR)/lib505-lib505.Po
- -rm -f ./$(DEPDIR)/lib506-first.Po
- -rm -f ./$(DEPDIR)/lib506-lib506.Po
- -rm -f ./$(DEPDIR)/lib507-first.Po
- -rm -f ./$(DEPDIR)/lib507-lib507.Po
- -rm -f ./$(DEPDIR)/lib507-testutil.Po
- -rm -f ./$(DEPDIR)/lib508-first.Po
- -rm -f ./$(DEPDIR)/lib508-lib508.Po
- -rm -f ./$(DEPDIR)/lib509-first.Po
- -rm -f ./$(DEPDIR)/lib509-lib509.Po
- -rm -f ./$(DEPDIR)/lib510-first.Po
- -rm -f ./$(DEPDIR)/lib510-lib510.Po
- -rm -f ./$(DEPDIR)/lib511-first.Po
- -rm -f ./$(DEPDIR)/lib511-lib511.Po
- -rm -f ./$(DEPDIR)/lib512-first.Po
- -rm -f ./$(DEPDIR)/lib512-lib512.Po
- -rm -f ./$(DEPDIR)/lib513-first.Po
- -rm -f ./$(DEPDIR)/lib513-lib513.Po
- -rm -f ./$(DEPDIR)/lib514-first.Po
- -rm -f ./$(DEPDIR)/lib514-lib514.Po
- -rm -f ./$(DEPDIR)/lib515-first.Po
- -rm -f ./$(DEPDIR)/lib515-lib515.Po
- -rm -f ./$(DEPDIR)/lib516-first.Po
- -rm -f ./$(DEPDIR)/lib516-lib516.Po
- -rm -f ./$(DEPDIR)/lib517-first.Po
- -rm -f ./$(DEPDIR)/lib517-lib517.Po
- -rm -f ./$(DEPDIR)/lib518-first.Po
- -rm -f ./$(DEPDIR)/lib518-lib518.Po
- -rm -f ./$(DEPDIR)/lib519-first.Po
- -rm -f ./$(DEPDIR)/lib519-lib519.Po
- -rm -f ./$(DEPDIR)/lib520-first.Po
- -rm -f ./$(DEPDIR)/lib520-lib520.Po
- -rm -f ./$(DEPDIR)/lib521-first.Po
- -rm -f ./$(DEPDIR)/lib521-lib521.Po
- -rm -f ./$(DEPDIR)/lib523-first.Po
- -rm -f ./$(DEPDIR)/lib523-lib523.Po
- -rm -f ./$(DEPDIR)/lib524-first.Po
- -rm -f ./$(DEPDIR)/lib524-lib524.Po
- -rm -f ./$(DEPDIR)/lib525-first.Po
- -rm -f ./$(DEPDIR)/lib525-lib525.Po
- -rm -f ./$(DEPDIR)/lib525-testutil.Po
+ -rm -f ./$(DEPDIR)/lib2304.Po
+ -rm -f ./$(DEPDIR)/lib2305.Po
+ -rm -f ./$(DEPDIR)/lib2306.Po
+ -rm -f ./$(DEPDIR)/lib2402.Po
+ -rm -f ./$(DEPDIR)/lib2404.Po
+ -rm -f ./$(DEPDIR)/lib2502.Po
+ -rm -f ./$(DEPDIR)/lib3010.Po
+ -rm -f ./$(DEPDIR)/lib3025.Po
+ -rm -f ./$(DEPDIR)/lib3026.Po
+ -rm -f ./$(DEPDIR)/lib3027.Po
+ -rm -f ./$(DEPDIR)/lib3100.Po
+ -rm -f ./$(DEPDIR)/lib3101.Po
+ -rm -f ./$(DEPDIR)/lib3102.Po
+ -rm -f ./$(DEPDIR)/lib3103.Po
+ -rm -f ./$(DEPDIR)/lib500.Po
+ -rm -f ./$(DEPDIR)/lib501.Po
+ -rm -f ./$(DEPDIR)/lib502.Po
+ -rm -f ./$(DEPDIR)/lib503.Po
+ -rm -f ./$(DEPDIR)/lib504.Po
+ -rm -f ./$(DEPDIR)/lib505.Po
+ -rm -f ./$(DEPDIR)/lib506.Po
+ -rm -f ./$(DEPDIR)/lib507.Po
+ -rm -f ./$(DEPDIR)/lib508.Po
+ -rm -f ./$(DEPDIR)/lib509.Po
+ -rm -f ./$(DEPDIR)/lib510.Po
+ -rm -f ./$(DEPDIR)/lib511.Po
+ -rm -f ./$(DEPDIR)/lib512.Po
+ -rm -f ./$(DEPDIR)/lib513.Po
+ -rm -f ./$(DEPDIR)/lib514.Po
+ -rm -f ./$(DEPDIR)/lib515.Po
+ -rm -f ./$(DEPDIR)/lib516.Po
+ -rm -f ./$(DEPDIR)/lib517.Po
+ -rm -f ./$(DEPDIR)/lib518.Po
+ -rm -f ./$(DEPDIR)/lib519.Po
+ -rm -f ./$(DEPDIR)/lib520.Po
+ -rm -f ./$(DEPDIR)/lib521.Po
+ -rm -f ./$(DEPDIR)/lib523.Po
+ -rm -f ./$(DEPDIR)/lib524.Po
+ -rm -f ./$(DEPDIR)/lib525.Po
-rm -f ./$(DEPDIR)/lib526-first.Po
-rm -f ./$(DEPDIR)/lib526-lib526.Po
-rm -f ./$(DEPDIR)/lib526-testutil.Po
@@ -18564,189 +5998,102 @@ maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/lib529-first.Po
-rm -f ./$(DEPDIR)/lib529-lib525.Po
-rm -f ./$(DEPDIR)/lib529-testutil.Po
- -rm -f ./$(DEPDIR)/lib530-first.Po
- -rm -f ./$(DEPDIR)/lib530-lib530.Po
- -rm -f ./$(DEPDIR)/lib530-testutil.Po
+ -rm -f ./$(DEPDIR)/lib530.Po
-rm -f ./$(DEPDIR)/lib532-first.Po
-rm -f ./$(DEPDIR)/lib532-lib526.Po
-rm -f ./$(DEPDIR)/lib532-testutil.Po
- -rm -f ./$(DEPDIR)/lib533-first.Po
- -rm -f ./$(DEPDIR)/lib533-lib533.Po
- -rm -f ./$(DEPDIR)/lib533-testutil.Po
- -rm -f ./$(DEPDIR)/lib537-first.Po
- -rm -f ./$(DEPDIR)/lib537-lib537.Po
- -rm -f ./$(DEPDIR)/lib539-first.Po
- -rm -f ./$(DEPDIR)/lib539-lib539.Po
- -rm -f ./$(DEPDIR)/lib540-first.Po
- -rm -f ./$(DEPDIR)/lib540-lib540.Po
- -rm -f ./$(DEPDIR)/lib540-testutil.Po
- -rm -f ./$(DEPDIR)/lib541-first.Po
- -rm -f ./$(DEPDIR)/lib541-lib541.Po
- -rm -f ./$(DEPDIR)/lib542-first.Po
- -rm -f ./$(DEPDIR)/lib542-lib542.Po
- -rm -f ./$(DEPDIR)/lib543-first.Po
- -rm -f ./$(DEPDIR)/lib543-lib543.Po
- -rm -f ./$(DEPDIR)/lib544-first.Po
- -rm -f ./$(DEPDIR)/lib544-lib544.Po
+ -rm -f ./$(DEPDIR)/lib533.Po
+ -rm -f ./$(DEPDIR)/lib537.Po
+ -rm -f ./$(DEPDIR)/lib539.Po
+ -rm -f ./$(DEPDIR)/lib540.Po
+ -rm -f ./$(DEPDIR)/lib541.Po
+ -rm -f ./$(DEPDIR)/lib542.Po
+ -rm -f ./$(DEPDIR)/lib543.Po
+ -rm -f ./$(DEPDIR)/lib544.Po
-rm -f ./$(DEPDIR)/lib545-first.Po
-rm -f ./$(DEPDIR)/lib545-lib544.Po
- -rm -f ./$(DEPDIR)/lib547-first.Po
- -rm -f ./$(DEPDIR)/lib547-lib547.Po
+ -rm -f ./$(DEPDIR)/lib547.Po
-rm -f ./$(DEPDIR)/lib548-first.Po
-rm -f ./$(DEPDIR)/lib548-lib547.Po
- -rm -f ./$(DEPDIR)/lib549-first.Po
- -rm -f ./$(DEPDIR)/lib549-lib549.Po
- -rm -f ./$(DEPDIR)/lib552-first.Po
- -rm -f ./$(DEPDIR)/lib552-lib552.Po
- -rm -f ./$(DEPDIR)/lib553-first.Po
- -rm -f ./$(DEPDIR)/lib553-lib553.Po
- -rm -f ./$(DEPDIR)/lib554-first.Po
- -rm -f ./$(DEPDIR)/lib554-lib554.Po
- -rm -f ./$(DEPDIR)/lib555-first.Po
- -rm -f ./$(DEPDIR)/lib555-lib555.Po
- -rm -f ./$(DEPDIR)/lib555-testutil.Po
- -rm -f ./$(DEPDIR)/lib556-first.Po
- -rm -f ./$(DEPDIR)/lib556-lib556.Po
- -rm -f ./$(DEPDIR)/lib557-first.Po
- -rm -f ./$(DEPDIR)/lib557-lib557.Po
- -rm -f ./$(DEPDIR)/lib558-first.Po
- -rm -f ./$(DEPDIR)/lib558-lib558.Po
- -rm -f ./$(DEPDIR)/lib559-first.Po
- -rm -f ./$(DEPDIR)/lib559-lib559.Po
- -rm -f ./$(DEPDIR)/lib560-first.Po
- -rm -f ./$(DEPDIR)/lib560-lib560.Po
- -rm -f ./$(DEPDIR)/lib560-testutil.Po
- -rm -f ./$(DEPDIR)/lib562-first.Po
- -rm -f ./$(DEPDIR)/lib562-lib562.Po
- -rm -f ./$(DEPDIR)/lib564-first.Po
- -rm -f ./$(DEPDIR)/lib564-lib564.Po
- -rm -f ./$(DEPDIR)/lib564-testutil.Po
+ -rm -f ./$(DEPDIR)/lib549.Po
+ -rm -f ./$(DEPDIR)/lib552.Po
+ -rm -f ./$(DEPDIR)/lib553.Po
+ -rm -f ./$(DEPDIR)/lib554.Po
+ -rm -f ./$(DEPDIR)/lib555.Po
+ -rm -f ./$(DEPDIR)/lib556.Po
+ -rm -f ./$(DEPDIR)/lib557.Po
+ -rm -f ./$(DEPDIR)/lib558.Po
+ -rm -f ./$(DEPDIR)/lib559.Po
+ -rm -f ./$(DEPDIR)/lib560.Po
+ -rm -f ./$(DEPDIR)/lib562.Po
+ -rm -f ./$(DEPDIR)/lib564.Po
-rm -f ./$(DEPDIR)/lib565-first.Po
-rm -f ./$(DEPDIR)/lib565-lib510.Po
- -rm -f ./$(DEPDIR)/lib566-first.Po
- -rm -f ./$(DEPDIR)/lib566-lib566.Po
- -rm -f ./$(DEPDIR)/lib567-first.Po
- -rm -f ./$(DEPDIR)/lib567-lib567.Po
- -rm -f ./$(DEPDIR)/lib568-first.Po
- -rm -f ./$(DEPDIR)/lib568-lib568.Po
- -rm -f ./$(DEPDIR)/lib569-first.Po
- -rm -f ./$(DEPDIR)/lib569-lib569.Po
- -rm -f ./$(DEPDIR)/lib570-first.Po
- -rm -f ./$(DEPDIR)/lib570-lib570.Po
- -rm -f ./$(DEPDIR)/lib571-first.Po
- -rm -f ./$(DEPDIR)/lib571-lib571.Po
- -rm -f ./$(DEPDIR)/lib572-first.Po
- -rm -f ./$(DEPDIR)/lib572-lib572.Po
- -rm -f ./$(DEPDIR)/lib573-first.Po
- -rm -f ./$(DEPDIR)/lib573-lib573.Po
- -rm -f ./$(DEPDIR)/lib573-testtrace.Po
- -rm -f ./$(DEPDIR)/lib573-testutil.Po
- -rm -f ./$(DEPDIR)/lib574-first.Po
- -rm -f ./$(DEPDIR)/lib574-lib574.Po
- -rm -f ./$(DEPDIR)/lib575-first.Po
- -rm -f ./$(DEPDIR)/lib575-lib575.Po
- -rm -f ./$(DEPDIR)/lib575-testutil.Po
- -rm -f ./$(DEPDIR)/lib576-first.Po
- -rm -f ./$(DEPDIR)/lib576-lib576.Po
- -rm -f ./$(DEPDIR)/lib578-first.Po
- -rm -f ./$(DEPDIR)/lib578-lib578.Po
- -rm -f ./$(DEPDIR)/lib579-first.Po
- -rm -f ./$(DEPDIR)/lib579-lib579.Po
- -rm -f ./$(DEPDIR)/lib582-first.Po
- -rm -f ./$(DEPDIR)/lib582-lib582.Po
- -rm -f ./$(DEPDIR)/lib582-testutil.Po
- -rm -f ./$(DEPDIR)/lib583-first.Po
- -rm -f ./$(DEPDIR)/lib583-lib583.Po
+ -rm -f ./$(DEPDIR)/lib566.Po
+ -rm -f ./$(DEPDIR)/lib567.Po
+ -rm -f ./$(DEPDIR)/lib568.Po
+ -rm -f ./$(DEPDIR)/lib569.Po
+ -rm -f ./$(DEPDIR)/lib570.Po
+ -rm -f ./$(DEPDIR)/lib571.Po
+ -rm -f ./$(DEPDIR)/lib572.Po
+ -rm -f ./$(DEPDIR)/lib573.Po
+ -rm -f ./$(DEPDIR)/lib574.Po
+ -rm -f ./$(DEPDIR)/lib575.Po
+ -rm -f ./$(DEPDIR)/lib576.Po
+ -rm -f ./$(DEPDIR)/lib578.Po
+ -rm -f ./$(DEPDIR)/lib579.Po
+ -rm -f ./$(DEPDIR)/lib582.Po
+ -rm -f ./$(DEPDIR)/lib583.Po
-rm -f ./$(DEPDIR)/lib584-first.Po
-rm -f ./$(DEPDIR)/lib584-lib589.Po
-rm -f ./$(DEPDIR)/lib585-first.Po
-rm -f ./$(DEPDIR)/lib585-lib500.Po
-rm -f ./$(DEPDIR)/lib585-testtrace.Po
-rm -f ./$(DEPDIR)/lib585-testutil.Po
- -rm -f ./$(DEPDIR)/lib586-first.Po
- -rm -f ./$(DEPDIR)/lib586-lib586.Po
+ -rm -f ./$(DEPDIR)/lib586.Po
-rm -f ./$(DEPDIR)/lib587-first.Po
-rm -f ./$(DEPDIR)/lib587-lib554.Po
- -rm -f ./$(DEPDIR)/lib589-first.Po
- -rm -f ./$(DEPDIR)/lib589-lib589.Po
- -rm -f ./$(DEPDIR)/lib590-first.Po
- -rm -f ./$(DEPDIR)/lib590-lib590.Po
- -rm -f ./$(DEPDIR)/lib591-first.Po
- -rm -f ./$(DEPDIR)/lib591-lib591.Po
- -rm -f ./$(DEPDIR)/lib591-testutil.Po
- -rm -f ./$(DEPDIR)/lib597-first.Po
- -rm -f ./$(DEPDIR)/lib597-lib597.Po
- -rm -f ./$(DEPDIR)/lib597-testutil.Po
- -rm -f ./$(DEPDIR)/lib598-first.Po
- -rm -f ./$(DEPDIR)/lib598-lib598.Po
- -rm -f ./$(DEPDIR)/lib599-first.Po
- -rm -f ./$(DEPDIR)/lib599-lib599.Po
- -rm -f ./$(DEPDIR)/lib643-first.Po
- -rm -f ./$(DEPDIR)/lib643-lib643.Po
+ -rm -f ./$(DEPDIR)/lib589.Po
+ -rm -f ./$(DEPDIR)/lib590.Po
+ -rm -f ./$(DEPDIR)/lib591.Po
+ -rm -f ./$(DEPDIR)/lib597.Po
+ -rm -f ./$(DEPDIR)/lib598.Po
+ -rm -f ./$(DEPDIR)/lib599.Po
+ -rm -f ./$(DEPDIR)/lib643.Po
-rm -f ./$(DEPDIR)/lib645-first.Po
-rm -f ./$(DEPDIR)/lib645-lib643.Po
- -rm -f ./$(DEPDIR)/lib650-first.Po
- -rm -f ./$(DEPDIR)/lib650-lib650.Po
- -rm -f ./$(DEPDIR)/lib651-first.Po
- -rm -f ./$(DEPDIR)/lib651-lib651.Po
- -rm -f ./$(DEPDIR)/lib652-first.Po
- -rm -f ./$(DEPDIR)/lib652-lib652.Po
- -rm -f ./$(DEPDIR)/lib653-first.Po
- -rm -f ./$(DEPDIR)/lib653-lib653.Po
- -rm -f ./$(DEPDIR)/lib654-first.Po
- -rm -f ./$(DEPDIR)/lib654-lib654.Po
- -rm -f ./$(DEPDIR)/lib655-first.Po
- -rm -f ./$(DEPDIR)/lib655-lib655.Po
- -rm -f ./$(DEPDIR)/lib658-first.Po
- -rm -f ./$(DEPDIR)/lib658-lib658.Po
- -rm -f ./$(DEPDIR)/lib658-testutil.Po
- -rm -f ./$(DEPDIR)/lib659-first.Po
- -rm -f ./$(DEPDIR)/lib659-lib659.Po
- -rm -f ./$(DEPDIR)/lib659-testutil.Po
- -rm -f ./$(DEPDIR)/lib661-first.Po
- -rm -f ./$(DEPDIR)/lib661-lib661.Po
- -rm -f ./$(DEPDIR)/lib666-first.Po
- -rm -f ./$(DEPDIR)/lib666-lib666.Po
- -rm -f ./$(DEPDIR)/lib667-first.Po
- -rm -f ./$(DEPDIR)/lib667-lib667.Po
- -rm -f ./$(DEPDIR)/lib667-testutil.Po
- -rm -f ./$(DEPDIR)/lib668-first.Po
- -rm -f ./$(DEPDIR)/lib668-lib668.Po
- -rm -f ./$(DEPDIR)/lib668-testutil.Po
+ -rm -f ./$(DEPDIR)/lib650.Po
+ -rm -f ./$(DEPDIR)/lib651.Po
+ -rm -f ./$(DEPDIR)/lib652.Po
+ -rm -f ./$(DEPDIR)/lib653.Po
+ -rm -f ./$(DEPDIR)/lib654.Po
+ -rm -f ./$(DEPDIR)/lib655.Po
+ -rm -f ./$(DEPDIR)/lib658.Po
+ -rm -f ./$(DEPDIR)/lib659.Po
+ -rm -f ./$(DEPDIR)/lib661.Po
+ -rm -f ./$(DEPDIR)/lib666.Po
+ -rm -f ./$(DEPDIR)/lib667.Po
+ -rm -f ./$(DEPDIR)/lib668.Po
-rm -f ./$(DEPDIR)/lib670-first.Po
-rm -f ./$(DEPDIR)/lib670-lib670.Po
-rm -f ./$(DEPDIR)/lib670-testutil.Po
+ -rm -f ./$(DEPDIR)/lib670.Po
-rm -f ./$(DEPDIR)/lib671-first.Po
-rm -f ./$(DEPDIR)/lib671-lib670.Po
-rm -f ./$(DEPDIR)/lib671-testutil.Po
-rm -f ./$(DEPDIR)/lib672-first.Po
-rm -f ./$(DEPDIR)/lib672-lib670.Po
-rm -f ./$(DEPDIR)/lib672-testutil.Po
- -rm -f ./$(DEPDIR)/lib673-first.Po
- -rm -f ./$(DEPDIR)/lib673-lib670.Po
- -rm -f ./$(DEPDIR)/lib673-testutil.Po
- -rm -f ./$(DEPDIR)/lib674-first.Po
- -rm -f ./$(DEPDIR)/lib674-lib674.Po
- -rm -f ./$(DEPDIR)/lib674-testutil.Po
- -rm -f ./$(DEPDIR)/lib676-first.Po
- -rm -f ./$(DEPDIR)/lib676-lib676.Po
- -rm -f ./$(DEPDIR)/lib676-testutil.Po
- -rm -f ./$(DEPDIR)/lib677-first.Po
- -rm -f ./$(DEPDIR)/lib677-lib677.Po
- -rm -f ./$(DEPDIR)/lib677-testutil.Po
- -rm -f ./$(DEPDIR)/lib678-first.Po
- -rm -f ./$(DEPDIR)/lib678-lib678.Po
- -rm -f ./$(DEPDIR)/lib678-testutil.Po
- -rm -f ./$(DEPDIR)/libauthretry-first.Po
- -rm -f ./$(DEPDIR)/libauthretry-libauthretry.Po
+ -rm -f ./$(DEPDIR)/lib674.Po
+ -rm -f ./$(DEPDIR)/lib676.Po
+ -rm -f ./$(DEPDIR)/lib677.Po
+ -rm -f ./$(DEPDIR)/lib678.Po
+ -rm -f ./$(DEPDIR)/libauthretry.Po
-rm -f ./$(DEPDIR)/libhostname_la-sethostname.Plo
- -rm -f ./$(DEPDIR)/libntlmconnect-first.Po
- -rm -f ./$(DEPDIR)/libntlmconnect-libntlmconnect.Po
- -rm -f ./$(DEPDIR)/libntlmconnect-testutil.Po
- -rm -f ./$(DEPDIR)/libprereq-first.Po
- -rm -f ./$(DEPDIR)/libprereq-libprereq.Po
- -rm -f ./$(DEPDIR)/libprereq-testutil.Po
+ -rm -f ./$(DEPDIR)/libntlmconnect.Po
+ -rm -f ./$(DEPDIR)/libprereq.Po
-rm -f ./$(DEPDIR)/libstubgss_la-stub_gssapi.Plo
+ -rm -f ./$(DEPDIR)/testtrace.Po
-rm -f ./$(DEPDIR)/testutil.Po
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
diff --git a/tests/libtest/Makefile.inc b/tests/libtest/Makefile.inc
index 484ac178c..c4d36a26b 100644
--- a/tests/libtest/Makefile.inc
+++ b/tests/libtest/Makefile.inc
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -34,11 +34,11 @@ WARNLESS = ../../lib/warnless.c ../../lib/warnless.h
MULTIBYTE = ../../lib/curl_multibyte.c ../../lib/curl_multibyte.h
# these files are used in every single test program below
-SUPPORTFILES = ../../lib/timediff.c ../../lib/timediff.h first.c test.h
+TIMEDIFF = ../../lib/timediff.c ../../lib/timediff.h
+SUPPORTFILES = $(TIMEDIFF) first.c test.h
# These are all libcurl test programs
-noinst_PROGRAMS = chkhostname libauthretry libntlmconnect \
- chkdecimalpoint libprereq \
+noinst_PROGRAMS = chkhostname libauthretry libntlmconnect libprereq \
lib500 lib501 lib502 lib503 lib504 lib505 lib506 lib507 lib508 lib509 \
lib510 lib511 lib512 lib513 lib514 lib515 lib516 lib517 lib518 lib519 \
lib520 lib521 lib523 lib524 lib525 lib526 lib527 lib529 lib530 lib532 \
@@ -52,124 +52,99 @@ noinst_PROGRAMS = chkhostname libauthretry libntlmconnect \
lib659 lib661 lib666 lib667 lib668 \
lib670 lib671 lib672 lib673 lib674 lib676 lib677 lib678 \
lib1156 \
+ lib1301 \
lib1500 lib1501 lib1502 lib1503 lib1504 lib1505 lib1506 lib1507 lib1508 \
lib1509 lib1510 lib1511 lib1512 lib1513 lib1514 lib1515 lib1517 \
lib1518 lib1520 lib1521 lib1522 lib1523 \
lib1525 lib1526 lib1527 lib1528 lib1529 lib1530 lib1531 lib1532 lib1533 \
lib1534 lib1535 lib1536 lib1537 lib1538 lib1539 \
- lib1540 lib1542 lib1543 \
+ lib1540 lib1542 lib1543 lib1545 \
lib1550 lib1551 lib1552 lib1553 lib1554 lib1555 lib1556 lib1557 \
lib1558 lib1559 lib1560 lib1564 lib1565 lib1567 lib1568 lib1569 \
lib1591 lib1592 lib1593 lib1594 lib1596 lib1597 \
- lib1905 lib1906 lib1907 lib1908 lib1910 lib1911 lib1912 lib1913 \
+ \
+ lib1662 \
+ \
+ lib1900 \
+ lib1903 lib1905 lib1906 lib1907 lib1908 lib1910 lib1911 lib1912 lib1913 \
lib1915 lib1916 lib1917 lib1918 lib1919 \
lib1933 lib1934 lib1935 lib1936 lib1937 lib1938 lib1939 lib1940 \
- lib1945 lib1946 lib1947 lib1948 lib1955 \
- lib2301 lib2302 \
- lib3010 lib3025 lib3026 lib3027
-
-chkdecimalpoint_SOURCES = chkdecimalpoint.c ../../lib/mprintf.c \
- ../../lib/dynbuf.c ../../lib/strdup.c
-chkdecimalpoint_LDADD =
-chkdecimalpoint_CPPFLAGS = $(AM_CPPFLAGS) -DCURL_STATICLIB \
- -DCURLX_NO_MEMORY_CALLBACKS -DBUILDING_LIBCURL
+ lib1945 lib1946 lib1947 lib1948 lib1955 lib1956 lib1957 lib1958 lib1959 \
+ lib1960 lib1964 \
+ lib1970 lib1971 lib1972 lib1973 lib1974 lib1975 \
+ lib2301 lib2302 lib2304 lib2305 lib2306 \
+ lib2402 lib2404 \
+ lib2502 \
+ lib3010 lib3025 lib3026 lib3027 \
+ lib3100 lib3101 lib3102 lib3103
chkhostname_SOURCES = chkhostname.c ../../lib/curl_gethostname.c
chkhostname_LDADD = @CURL_NETWORK_LIBS@
chkhostname_DEPENDENCIES =
-chkhostname_CPPFLAGS = $(AM_CPPFLAGS)
libntlmconnect_SOURCES = libntlmconnect.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
libntlmconnect_LDADD = $(TESTUTIL_LIBS)
-libntlmconnect_CPPFLAGS = $(AM_CPPFLAGS)
libauthretry_SOURCES = libauthretry.c $(SUPPORTFILES)
-libauthretry_CPPFLAGS = $(AM_CPPFLAGS)
libprereq_SOURCES = libprereq.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
libprereq_LDADD = $(TESTUTIL_LIBS)
-libprereq_CPPFLAGS = $(AM_CPPFLAGS)
lib500_SOURCES = lib500.c $(SUPPORTFILES) $(TESTUTIL) $(TSTTRACE) $(MULTIBYTE)
lib500_LDADD = $(TESTUTIL_LIBS)
-lib500_CPPFLAGS = $(AM_CPPFLAGS)
lib501_SOURCES = lib501.c $(SUPPORTFILES)
-lib501_CPPFLAGS = $(AM_CPPFLAGS)
lib502_SOURCES = lib502.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib502_LDADD = $(TESTUTIL_LIBS)
-lib502_CPPFLAGS = $(AM_CPPFLAGS)
lib503_SOURCES = lib503.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib503_LDADD = $(TESTUTIL_LIBS)
-lib503_CPPFLAGS = $(AM_CPPFLAGS)
lib504_SOURCES = lib504.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib504_LDADD = $(TESTUTIL_LIBS)
-lib504_CPPFLAGS = $(AM_CPPFLAGS)
lib505_SOURCES = lib505.c $(SUPPORTFILES) $(MULTIBYTE)
-lib505_CPPFLAGS = $(AM_CPPFLAGS)
lib506_SOURCES = lib506.c $(SUPPORTFILES)
-lib506_CPPFLAGS = $(AM_CPPFLAGS)
lib507_SOURCES = lib507.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib507_LDADD = $(TESTUTIL_LIBS)
-lib507_CPPFLAGS = $(AM_CPPFLAGS)
lib508_SOURCES = lib508.c $(SUPPORTFILES)
-lib508_CPPFLAGS = $(AM_CPPFLAGS)
lib509_SOURCES = lib509.c $(SUPPORTFILES)
-lib509_CPPFLAGS = $(AM_CPPFLAGS)
lib510_SOURCES = lib510.c $(SUPPORTFILES)
-lib510_CPPFLAGS = $(AM_CPPFLAGS)
lib511_SOURCES = lib511.c $(SUPPORTFILES)
-lib511_CPPFLAGS = $(AM_CPPFLAGS)
lib512_SOURCES = lib512.c $(SUPPORTFILES)
-lib512_CPPFLAGS = $(AM_CPPFLAGS)
lib513_SOURCES = lib513.c $(SUPPORTFILES)
-lib513_CPPFLAGS = $(AM_CPPFLAGS)
lib514_SOURCES = lib514.c $(SUPPORTFILES)
-lib514_CPPFLAGS = $(AM_CPPFLAGS)
lib515_SOURCES = lib515.c $(SUPPORTFILES)
-lib515_CPPFLAGS = $(AM_CPPFLAGS)
lib516_SOURCES = lib516.c $(SUPPORTFILES)
-lib516_CPPFLAGS = $(AM_CPPFLAGS)
lib517_SOURCES = lib517.c $(SUPPORTFILES)
-lib517_CPPFLAGS = $(AM_CPPFLAGS)
lib518_SOURCES = lib518.c $(SUPPORTFILES) $(WARNLESS) $(MULTIBYTE)
-lib518_CPPFLAGS = $(AM_CPPFLAGS)
lib519_SOURCES = lib519.c $(SUPPORTFILES)
-lib519_CPPFLAGS = $(AM_CPPFLAGS)
lib520_SOURCES = lib520.c $(SUPPORTFILES)
-lib520_CPPFLAGS = $(AM_CPPFLAGS)
lib521_SOURCES = lib521.c $(SUPPORTFILES)
-lib521_CPPFLAGS = $(AM_CPPFLAGS)
lib523_SOURCES = lib523.c $(SUPPORTFILES)
-lib523_CPPFLAGS = $(AM_CPPFLAGS)
lib524_SOURCES = lib524.c $(SUPPORTFILES)
-lib524_CPPFLAGS = $(AM_CPPFLAGS)
lib525_SOURCES = lib525.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) $(MULTIBYTE)
lib525_LDADD = $(TESTUTIL_LIBS)
-lib525_CPPFLAGS = $(AM_CPPFLAGS)
lib526_SOURCES = lib526.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib526_LDADD = $(TESTUTIL_LIBS)
@@ -185,7 +160,6 @@ lib529_CPPFLAGS = $(AM_CPPFLAGS) -DLIB529
lib530_SOURCES = lib530.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib530_LDADD = $(TESTUTIL_LIBS)
-lib530_CPPFLAGS = $(AM_CPPFLAGS)
lib532_SOURCES = lib526.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib532_LDADD = $(TESTUTIL_LIBS)
@@ -193,128 +167,92 @@ lib532_CPPFLAGS = $(AM_CPPFLAGS) -DLIB532
lib533_SOURCES = lib533.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib533_LDADD = $(TESTUTIL_LIBS)
-lib533_CPPFLAGS = $(AM_CPPFLAGS)
lib537_SOURCES = lib537.c $(SUPPORTFILES) $(WARNLESS) $(MULTIBYTE)
-lib537_CPPFLAGS = $(AM_CPPFLAGS)
lib539_SOURCES = lib539.c $(SUPPORTFILES)
-lib539_CPPFLAGS = $(AM_CPPFLAGS)
lib540_SOURCES = lib540.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib540_LDADD = $(TESTUTIL_LIBS)
-lib540_CPPFLAGS = $(AM_CPPFLAGS)
lib541_SOURCES = lib541.c $(SUPPORTFILES) $(MULTIBYTE)
-lib541_CPPFLAGS = $(AM_CPPFLAGS)
lib542_SOURCES = lib542.c $(SUPPORTFILES)
-lib542_CPPFLAGS = $(AM_CPPFLAGS)
lib543_SOURCES = lib543.c $(SUPPORTFILES)
-lib543_CPPFLAGS = $(AM_CPPFLAGS)
lib544_SOURCES = lib544.c $(SUPPORTFILES)
-lib544_CPPFLAGS = $(AM_CPPFLAGS)
lib545_SOURCES = lib544.c $(SUPPORTFILES)
lib545_CPPFLAGS = $(AM_CPPFLAGS) -DLIB545
lib547_SOURCES = lib547.c $(SUPPORTFILES)
-lib547_CPPFLAGS = $(AM_CPPFLAGS)
lib548_SOURCES = lib547.c $(SUPPORTFILES)
lib548_CPPFLAGS = $(AM_CPPFLAGS) -DLIB548
lib549_SOURCES = lib549.c $(SUPPORTFILES)
-lib549_CPPFLAGS = $(AM_CPPFLAGS)
lib552_SOURCES = lib552.c $(SUPPORTFILES) $(WARNLESS)
-lib552_CPPFLAGS = $(AM_CPPFLAGS)
lib553_SOURCES = lib553.c $(SUPPORTFILES)
-lib553_CPPFLAGS = $(AM_CPPFLAGS)
lib554_SOURCES = lib554.c $(SUPPORTFILES)
-lib554_CPPFLAGS = $(AM_CPPFLAGS)
lib555_SOURCES = lib555.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib555_LDADD = $(TESTUTIL_LIBS)
-lib555_CPPFLAGS = $(AM_CPPFLAGS)
lib556_SOURCES = lib556.c $(SUPPORTFILES) $(WARNLESS)
-lib556_CPPFLAGS = $(AM_CPPFLAGS)
lib557_SOURCES = lib557.c $(SUPPORTFILES)
-lib557_CPPFLAGS = $(AM_CPPFLAGS)
lib558_SOURCES = lib558.c $(SUPPORTFILES)
-lib558_CPPFLAGS = $(AM_CPPFLAGS)
lib559_SOURCES = lib559.c $(SUPPORTFILES)
-lib559_CPPFLAGS = $(AM_CPPFLAGS)
lib560_SOURCES = lib560.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib560_LDADD = $(TESTUTIL_LIBS)
-lib560_CPPFLAGS = $(AM_CPPFLAGS)
lib562_SOURCES = lib562.c $(SUPPORTFILES)
-lib562_CPPFLAGS = $(AM_CPPFLAGS)
lib564_SOURCES = lib564.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib564_LDADD = $(TESTUTIL_LIBS)
-lib564_CPPFLAGS = $(AM_CPPFLAGS)
lib565_SOURCES = lib510.c $(SUPPORTFILES)
lib565_CPPFLAGS = $(AM_CPPFLAGS) -DLIB565
lib566_SOURCES = lib566.c $(SUPPORTFILES) $(MULTIBYTE)
-lib566_CPPFLAGS = $(AM_CPPFLAGS)
lib567_SOURCES = lib567.c $(SUPPORTFILES)
-lib567_CPPFLAGS = $(AM_CPPFLAGS)
lib568_SOURCES = lib568.c $(SUPPORTFILES) $(MULTIBYTE)
-lib568_CPPFLAGS = $(AM_CPPFLAGS)
lib569_SOURCES = lib569.c $(SUPPORTFILES) $(MULTIBYTE)
-lib569_CPPFLAGS = $(AM_CPPFLAGS)
lib570_SOURCES = lib570.c $(SUPPORTFILES)
-lib570_CPPFLAGS = $(AM_CPPFLAGS)
lib571_SOURCES = lib571.c $(SUPPORTFILES) $(WARNLESS) $(MULTIBYTE)
-lib571_CPPFLAGS = $(AM_CPPFLAGS)
lib572_SOURCES = lib572.c $(SUPPORTFILES) $(MULTIBYTE)
-lib572_CPPFLAGS = $(AM_CPPFLAGS)
lib573_SOURCES = lib573.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) $(TSTTRACE)
lib573_LDADD = $(TESTUTIL_LIBS)
-lib573_CPPFLAGS = $(AM_CPPFLAGS)
lib574_SOURCES = lib574.c $(SUPPORTFILES)
-lib574_CPPFLAGS = $(AM_CPPFLAGS)
lib575_SOURCES = lib575.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib575_LDADD = $(TESTUTIL_LIBS)
-lib575_CPPFLAGS = $(AM_CPPFLAGS)
lib576_SOURCES = lib576.c $(SUPPORTFILES)
-lib576_CPPFLAGS = $(AM_CPPFLAGS)
lib578_SOURCES = lib578.c $(SUPPORTFILES) $(MULTIBYTE)
-lib578_CPPFLAGS = $(AM_CPPFLAGS)
lib579_SOURCES = lib579.c $(SUPPORTFILES) $(MULTIBYTE)
-lib579_CPPFLAGS = $(AM_CPPFLAGS)
lib582_SOURCES = lib582.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) $(MULTIBYTE)
lib582_LDADD = $(TESTUTIL_LIBS)
-lib582_CPPFLAGS = $(AM_CPPFLAGS)
lib583_SOURCES = lib583.c $(SUPPORTFILES)
-lib583_CPPFLAGS = $(AM_CPPFLAGS)
lib584_SOURCES = lib589.c $(SUPPORTFILES)
lib584_CPPFLAGS = $(AM_CPPFLAGS) -DLIB584
@@ -324,76 +262,56 @@ lib585_LDADD = $(TESTUTIL_LIBS)
lib585_CPPFLAGS = $(AM_CPPFLAGS) -DLIB585
lib586_SOURCES = lib586.c $(SUPPORTFILES)
-lib586_CPPFLAGS = $(AM_CPPFLAGS)
lib587_SOURCES = lib554.c $(SUPPORTFILES)
lib587_CPPFLAGS = $(AM_CPPFLAGS) -DLIB587
lib589_SOURCES = lib589.c $(SUPPORTFILES)
-lib589_CPPFLAGS = $(AM_CPPFLAGS)
lib590_SOURCES = lib590.c $(SUPPORTFILES)
-lib590_CPPFLAGS = $(AM_CPPFLAGS)
lib591_SOURCES = lib591.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) $(MULTIBYTE)
lib591_LDADD = $(TESTUTIL_LIBS)
-lib591_CPPFLAGS = $(AM_CPPFLAGS)
lib597_SOURCES = lib597.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib597_LDADD = $(TESTUTIL_LIBS)
-lib597_CPPFLAGS = $(AM_CPPFLAGS)
lib598_SOURCES = lib598.c $(SUPPORTFILES)
-lib598_CPPFLAGS = $(AM_CPPFLAGS)
lib599_SOURCES = lib599.c $(SUPPORTFILES) $(MULTIBYTE)
-lib599_CPPFLAGS = $(AM_CPPFLAGS)
lib643_SOURCES = lib643.c $(SUPPORTFILES)
-lib643_CPPFLAGS = $(AM_CPPFLAGS)
lib645_SOURCES = lib643.c $(SUPPORTFILES)
lib645_CPPFLAGS = $(AM_CPPFLAGS) -DLIB645
lib650_SOURCES = lib650.c $(SUPPORTFILES)
-lib650_CPPFLAGS = $(AM_CPPFLAGS)
lib651_SOURCES = lib651.c $(SUPPORTFILES)
-lib651_CPPFLAGS = $(AM_CPPFLAGS)
lib652_SOURCES = lib652.c $(SUPPORTFILES)
-lib652_CPPFLAGS = $(AM_CPPFLAGS)
lib653_SOURCES = lib653.c $(SUPPORTFILES)
-lib653_CPPFLAGS = $(AM_CPPFLAGS)
lib654_SOURCES = lib654.c $(SUPPORTFILES)
-lib654_CPPFLAGS = $(AM_CPPFLAGS)
lib655_SOURCES = lib655.c $(SUPPORTFILES)
-lib655_CPPFLAGS = $(AM_CPPFLAGS)
lib658_SOURCES = lib658.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib658_LDADD = $(TESTUTIL_LIBS)
-lib658_CPPFLAGS = $(AM_CPPFLAGS)
lib659_SOURCES = lib659.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib659_LDADD = $(TESTUTIL_LIBS)
-lib659_CPPFLAGS = $(AM_CPPFLAGS)
lib661_SOURCES = lib661.c $(SUPPORTFILES)
-lib661_CPPFLAGS = $(AM_CPPFLAGS)
lib666_SOURCES = lib666.c $(SUPPORTFILES)
-lib666_CPPFLAGS = $(AM_CPPFLAGS)
lib667_SOURCES = lib667.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib667_LDADD = $(TESTUTIL_LIBS)
-lib667_CPPFLAGS = $(AM_CPPFLAGS)
lib668_SOURCES = lib668.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib668_LDADD = $(TESTUTIL_LIBS)
-lib668_CPPFLAGS = $(AM_CPPFLAGS)
lib670_SOURCES = lib670.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib670_LDADD = $(TESTUTIL_LIBS)
@@ -409,31 +327,27 @@ lib672_CPPFLAGS = $(AM_CPPFLAGS) -DLIB672
lib673_SOURCES = lib670.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib673_LDADD = $(TESTUTIL_LIBS)
-lib673_CPPFLAGS = $(AM_CPPFLAGS) -DLIB673
lib674_SOURCES = lib674.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib674_LDADD = $(TESTUTIL_LIBS)
-lib674_CPPFLAGS = $(AM_CPPFLAGS)
lib676_SOURCES = lib676.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib676_LDADD = $(TESTUTIL_LIBS)
-lib676_CPPFLAGS = $(AM_CPPFLAGS)
lib677_SOURCES = lib677.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) $(MULTIBYTE)
lib677_LDADD = $(TESTUTIL_LIBS)
-lib677_CPPFLAGS = $(AM_CPPFLAGS)
lib678_SOURCES = lib678.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS) $(MULTIBYTE)
lib678_LDADD = $(TESTUTIL_LIBS)
-lib678_CPPFLAGS = $(AM_CPPFLAGS)
+
+lib1301_SOURCES = lib1301.c $(SUPPORTFILES) $(TESTUTIL)
+lib1301_LDADD = $(TESTUTIL_LIBS)
lib1500_SOURCES = lib1500.c $(SUPPORTFILES) $(TESTUTIL)
lib1500_LDADD = $(TESTUTIL_LIBS)
-lib1500_CPPFLAGS = $(AM_CPPFLAGS)
lib1501_SOURCES = lib1501.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1501_LDADD = $(TESTUTIL_LIBS)
-lib1501_CPPFLAGS = $(AM_CPPFLAGS)
lib1502_SOURCES = lib1502.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1502_LDADD = $(TESTUTIL_LIBS)
@@ -453,122 +367,92 @@ lib1505_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1505
lib1506_SOURCES = lib1506.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1506_LDADD = $(TESTUTIL_LIBS)
-lib1506_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1506
lib1156_SOURCES = lib1156.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1156_LDADD = $(TESTUTIL_LIBS)
-lib1156_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1156
lib1507_SOURCES = lib1507.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1507_LDADD = $(TESTUTIL_LIBS)
-lib1507_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1507
lib1508_SOURCES = lib1508.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1508_LDADD = $(TESTUTIL_LIBS)
-lib1508_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1508
lib1509_SOURCES = lib1509.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1509_LDADD = $(TESTUTIL_LIBS)
-lib1509_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1509
lib1510_SOURCES = lib1510.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1510_LDADD = $(TESTUTIL_LIBS)
-lib1510_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1510
lib1511_SOURCES = lib1511.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1511_LDADD = $(TESTUTIL_LIBS)
-lib1511_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1511
lib1512_SOURCES = lib1512.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1512_LDADD = $(TESTUTIL_LIBS)
-lib1512_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1512
lib1513_SOURCES = lib1513.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1513_LDADD = $(TESTUTIL_LIBS)
-lib1513_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1513
lib1514_SOURCES = lib1514.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1514_LDADD = $(TESTUTIL_LIBS)
-lib1514_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1514
lib1515_SOURCES = lib1515.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1515_LDADD = $(TESTUTIL_LIBS)
-lib1515_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1515
lib1517_SOURCES = lib1517.c $(SUPPORTFILES)
-lib1517_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1517
lib1518_SOURCES = lib1518.c $(SUPPORTFILES)
-lib1518_CPPFLAGS = $(AM_CPPFLAGS)
lib1520_SOURCES = lib1520.c $(SUPPORTFILES)
-lib1520_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1520
nodist_lib1521_SOURCES = lib1521.c $(SUPPORTFILES)
lib1521_CPPFLAGS = $(AM_CPPFLAGS) -I$(srcdir)
lib1522_SOURCES = lib1522.c $(SUPPORTFILES) $(TESTUTIL) $(TSTTRACE)
lib1522_LDADD = $(TESTUTIL_LIBS)
-lib1522_CPPFLAGS = $(AM_CPPFLAGS)
lib1523_SOURCES = lib1523.c $(SUPPORTFILES)
-lib1523_CPPFLAGS = $(AM_CPPFLAGS)
lib1525_SOURCES = lib1525.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1525_LDADD = $(TESTUTIL_LIBS)
-lib1525_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1525
lib1526_SOURCES = lib1526.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1526_LDADD = $(TESTUTIL_LIBS)
-lib1526_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1526
lib1527_SOURCES = lib1527.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1527_LDADD = $(TESTUTIL_LIBS)
-lib1527_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1527
lib1528_SOURCES = lib1528.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1528_LDADD = $(TESTUTIL_LIBS)
-lib1528_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1528
lib1529_SOURCES = lib1529.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1529_LDADD = $(TESTUTIL_LIBS)
-lib1529_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1529
lib1530_SOURCES = lib1530.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1530_LDADD = $(TESTUTIL_LIBS)
-lib1530_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1530
lib1531_SOURCES = lib1531.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1531_LDADD = $(TESTUTIL_LIBS)
-lib1531_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1531
lib1532_SOURCES = lib1532.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1532_LDADD = $(TESTUTIL_LIBS)
-lib1532_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1532
lib1533_SOURCES = lib1533.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1533_LDADD = $(TESTUTIL_LIBS)
-lib1533_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1533
lib1534_SOURCES = lib1534.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1534_LDADD = $(TESTUTIL_LIBS)
-lib1534_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1534
lib1535_SOURCES = lib1535.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1535_LDADD = $(TESTUTIL_LIBS)
-lib1535_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1535
lib1536_SOURCES = lib1536.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1536_LDADD = $(TESTUTIL_LIBS)
-lib1536_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1536
lib1537_SOURCES = lib1537.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1537_LDADD = $(TESTUTIL_LIBS)
-lib1537_CPPFLAGS = $(AM_CPPFLAGS)
lib1538_SOURCES = lib1538.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1538_LDADD = $(TESTUTIL_LIBS)
-lib1538_CPPFLAGS = $(AM_CPPFLAGS)
lib1539_SOURCES = lib1514.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1539_LDADD = $(TESTUTIL_LIBS)
@@ -576,43 +460,36 @@ lib1539_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1539
lib1540_SOURCES = lib1540.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1540_LDADD = $(TESTUTIL_LIBS)
-lib1540_CPPFLAGS = $(AM_CPPFLAGS)
lib1542_SOURCES = lib1542.c $(SUPPORTFILES) $(TESTUTIL) $(TSTTRACE) $(WARNLESS)
lib1542_LDADD = $(TESTUTIL_LIBS)
-lib1542_CPPFLAGS = $(AM_CPPFLAGS)
lib1543_SOURCES = lib1518.c $(SUPPORTFILES)
lib1543_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1543
+lib1545_SOURCES = lib1545.c $(SUPPORTFILES)
+lib1545_CPPFLAGS = $(AM_CPPFLAGS) -DCURL_DISABLE_DEPRECATION
+
lib1550_SOURCES = lib1550.c $(SUPPORTFILES)
-lib1550_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1517
lib1551_SOURCES = lib1551.c $(SUPPORTFILES)
-lib1551_CPPFLAGS = $(AM_CPPFLAGS)
lib1552_SOURCES = lib1552.c $(SUPPORTFILES) $(TESTUTIL)
lib1552_LDADD = $(TESTUTIL_LIBS)
-lib1552_CPPFLAGS = $(AM_CPPFLAGS)
lib1553_SOURCES = lib1553.c $(SUPPORTFILES) $(TESTUTIL)
lib1553_LDADD = $(TESTUTIL_LIBS)
-lib1553_CPPFLAGS = $(AM_CPPFLAGS)
lib1554_SOURCES = lib1554.c $(SUPPORTFILES)
-lib1554_CPPFLAGS = $(AM_CPPFLAGS)
lib1555_SOURCES = lib1555.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1555_LDADD = $(TESTUTIL_LIBS)
-lib1555_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1555
lib1556_SOURCES = lib1556.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1556_LDADD = $(TESTUTIL_LIBS)
-lib1556_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1556
lib1557_SOURCES = lib1557.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1557_LDADD = $(TESTUTIL_LIBS)
-lib1557_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1557
lib1558_SOURCES = lib1558.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1558_LDADD = $(TESTUTIL_LIBS)
@@ -625,28 +502,21 @@ lib1560_LDADD = $(TESTUTIL_LIBS)
lib1564_SOURCES = lib1564.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1564_LDADD = $(TESTUTIL_LIBS)
-lib1564_CPPFLAGS = $(AM_CPPFLAGS)
lib1565_SOURCES = lib1565.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1565_LDADD = $(TESTUTIL_LIBS)
-lib1565_CPPFLAGS = $(AM_CPPFLAGS)
lib1567_SOURCES = lib1567.c $(SUPPORTFILES)
-lib1567_CPPFLAGS = $(AM_CPPFLAGS)
lib1568_SOURCES = lib1568.c $(SUPPORTFILES)
-lib1568_CPPFLAGS = $(AM_CPPFLAGS)
lib1569_SOURCES = lib1569.c $(SUPPORTFILES)
-lib1569_CPPFLAGS = $(AM_CPPFLAGS)
lib1591_SOURCES = lib1591.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1591_LDADD = $(TESTUTIL_LIBS)
-lib1591_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1591
lib1592_SOURCES = lib1592.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1592_LDADD = $(TESTUTIL_LIBS)
-lib1592_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1592
lib1593_SOURCES = lib1593.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1593_LDADD = $(TESTUTIL_LIBS)
@@ -661,89 +531,76 @@ lib1596_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1596
lib1597_SOURCES = lib1597.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1597_LDADD = $(TESTUTIL_LIBS)
+lib1662_SOURCES = lib1662.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1662_LDADD = $(TESTUTIL_LIBS)
+
+lib1900_SOURCES = lib1900.c $(SUPPORTFILES)
+
+lib1903_SOURCES = lib1903.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1903_LDADD = $(TESTUTIL_LIBS)
+
lib1905_SOURCES = lib1905.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1905_LDADD = $(TESTUTIL_LIBS)
-lib1905_CPPFLAGS = $(AM_CPPFLAGS)
lib1906_SOURCES = lib1906.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1906_LDADD = $(TESTUTIL_LIBS)
-lib1906_CPPFLAGS = $(AM_CPPFLAGS)
lib1907_SOURCES = lib1907.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1907_LDADD = $(TESTUTIL_LIBS)
-lib1907_CPPFLAGS = $(AM_CPPFLAGS)
lib1908_SOURCES = lib1908.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1908_LDADD = $(TESTUTIL_LIBS)
-lib1908_CPPFLAGS = $(AM_CPPFLAGS)
lib1910_SOURCES = lib1910.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1910_LDADD = $(TESTUTIL_LIBS)
-lib1910_CPPFLAGS = $(AM_CPPFLAGS)
lib1911_SOURCES = lib1911.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1911_LDADD = $(TESTUTIL_LIBS)
-lib1911_CPPFLAGS = $(AM_CPPFLAGS)
lib1912_SOURCES = lib1912.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1912_LDADD = $(TESTUTIL_LIBS)
-lib1912_CPPFLAGS = $(AM_CPPFLAGS)
lib1913_SOURCES = lib1913.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1913_LDADD = $(TESTUTIL_LIBS)
-lib1913_CPPFLAGS = $(AM_CPPFLAGS)
lib1915_SOURCES = lib1915.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1915_LDADD = $(TESTUTIL_LIBS)
-lib1915_CPPFLAGS = $(AM_CPPFLAGS)
lib1916_SOURCES = lib1916.c $(SUPPORTFILES) $(WARNLESS)
-lib1916_CPPFLAGS = $(AM_CPPFLAGS)
lib1917_SOURCES = lib1916.c $(SUPPORTFILES) $(WARNLESS)
lib1917_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1917
lib1918_SOURCES = lib1918.c $(SUPPORTFILES) $(WARNLESS)
-lib1918_CPPFLAGS = $(AM_CPPFLAGS)
lib1919_SOURCES = lib1919.c $(SUPPORTFILES) $(WARNLESS)
-lib1919_CPPFLAGS = $(AM_CPPFLAGS)
lib1933_SOURCES = lib1933.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1933_LDADD = $(TESTUTIL_LIBS)
-lib1933_CPPFLAGS = $(AM_CPPFLAGS)
lib1934_SOURCES = lib1934.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1934_LDADD = $(TESTUTIL_LIBS)
-lib1934_CPPFLAGS = $(AM_CPPFLAGS)
lib1935_SOURCES = lib1935.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1935_LDADD = $(TESTUTIL_LIBS)
-lib1935_CPPFLAGS = $(AM_CPPFLAGS)
lib1936_SOURCES = lib1936.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1936_LDADD = $(TESTUTIL_LIBS)
-lib1936_CPPFLAGS = $(AM_CPPFLAGS)
lib1937_SOURCES = lib1937.c $(SUPPORTFILES)
lib1937_LDADD = $(TESTUTIL_LIBS)
-lib1937_CPPFLAGS = $(AM_CPPFLAGS)
lib1938_SOURCES = lib1938.c $(SUPPORTFILES)
lib1938_LDADD = $(TESTUTIL_LIBS)
-lib1938_CPPFLAGS = $(AM_CPPFLAGS)
lib1939_SOURCES = lib1939.c $(SUPPORTFILES)
lib1939_LDADD = $(TESTUTIL_LIBS)
-lib1939_CPPFLAGS = $(AM_CPPFLAGS)
lib1940_SOURCES = lib1940.c $(SUPPORTFILES)
lib1940_LDADD = $(TESTUTIL_LIBS)
-lib1940_CPPFLAGS = $(AM_CPPFLAGS)
lib1945_SOURCES = lib1945.c $(SUPPORTFILES)
lib1945_LDADD = $(TESTUTIL_LIBS)
-lib1945_CPPFLAGS = $(AM_CPPFLAGS)
lib1946_SOURCES = lib1940.c $(SUPPORTFILES)
lib1946_LDADD = $(TESTUTIL_LIBS)
@@ -751,15 +608,48 @@ lib1946_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1946
lib1947_SOURCES = lib1947.c $(SUPPORTFILES)
lib1947_LDADD = $(TESTUTIL_LIBS)
-lib1947_CPPFLAGS = $(AM_CPPFLAGS)
lib1948_SOURCES = lib1948.c $(SUPPORTFILES)
lib1948_LDADD = $(TESTUTIL_LIBS)
-lib1948_CPPFLAGS = $(AM_CPPFLAGS)
lib1955_SOURCES = lib1955.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1955_LDADD = $(TESTUTIL_LIBS)
-lib1955_CPPFLAGS = $(AM_CPPFLAGS)
+
+lib1956_SOURCES = lib1956.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1956_LDADD = $(TESTUTIL_LIBS)
+
+lib1957_SOURCES = lib1957.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1957_LDADD = $(TESTUTIL_LIBS)
+
+lib1958_SOURCES = lib1958.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1958_LDADD = $(TESTUTIL_LIBS)
+
+lib1959_SOURCES = lib1959.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1959_LDADD = $(TESTUTIL_LIBS)
+
+lib1960_SOURCES = lib1960.c $(SUPPORTFILES)
+lib1960_LDADD = $(TESTUTIL_LIBS)
+
+lib1964_SOURCES = lib1964.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1964_LDADD = $(TESTUTIL_LIBS)
+
+lib1970_SOURCES = lib1970.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1970_LDADD = $(TESTUTIL_LIBS)
+
+lib1971_SOURCES = lib1971.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1971_LDADD = $(TESTUTIL_LIBS)
+
+lib1972_SOURCES = lib1972.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1972_LDADD = $(TESTUTIL_LIBS)
+
+lib1973_SOURCES = lib1973.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1973_LDADD = $(TESTUTIL_LIBS)
+
+lib1974_SOURCES = lib1974.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1974_LDADD = $(TESTUTIL_LIBS)
+
+lib1975_SOURCES = lib1975.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1975_LDADD = $(TESTUTIL_LIBS)
lib2301_SOURCES = lib2301.c $(SUPPORTFILES)
lib2301_LDADD = $(TESTUTIL_LIBS)
@@ -767,18 +657,44 @@ lib2301_LDADD = $(TESTUTIL_LIBS)
lib2302_SOURCES = lib2302.c $(SUPPORTFILES)
lib2302_LDADD = $(TESTUTIL_LIBS)
+lib2304_SOURCES = lib2304.c $(SUPPORTFILES)
+lib2304_LDADD = $(TESTUTIL_LIBS)
+
+lib2305_SOURCES = lib2305.c $(SUPPORTFILES) $(TESTUTIL) $(TSTTRACE) $(MULTIBYTE)
+lib2305_LDADD = $(TESTUTIL_LIBS)
+
+lib2306_SOURCES = lib2306.c $(SUPPORTFILES)
+lib2306_LDADD = $(TESTUTIL_LIBS)
+
+lib2402_SOURCES = lib2402.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib2402_LDADD = $(TESTUTIL_LIBS)
+
+lib2404_SOURCES = lib2404.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib2404_LDADD = $(TESTUTIL_LIBS)
+
+lib2502_SOURCES = lib2502.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib2502_LDADD = $(TESTUTIL_LIBS)
+
lib3010_SOURCES = lib3010.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib3010_LDADD = $(TESTUTIL_LIBS)
-lib3010_CPPFLAGS = $(AM_CPPFLAGS)
lib3025_SOURCES = lib3025.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib3025_LDADD = $(TESTUTIL_LIBS)
-lib3025_CPPFLAGS = $(AM_CPPFLAGS)
lib3026_SOURCES = lib3026.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib3026_LDADD = $(TESTUTIL_LIBS)
-lib3026_CPPFLAGS = $(AM_CPPFLAGS)
lib3027_SOURCES = lib3027.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib3027_LDADD = $(TESTUTIL_LIBS)
-lib3027_CPPFLAGS = $(AM_CPPFLAGS)
+
+lib3100_SOURCES = lib3100.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib3100_LDADD = $(TESTUTIL_LIBS)
+
+lib3101_SOURCES = lib3101.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib3101_LDADD = $(TESTUTIL_LIBS)
+
+lib3102_SOURCES = lib3102.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib3102_LDADD = $(TESTUTIL_LIBS)
+
+lib3103_SOURCES = lib3103.c $(SUPPORTFILES)
+lib3103_LDADD = $(TESTUTIL_LIBS)
diff --git a/tests/libtest/chkhostname.c b/tests/libtest/chkhostname.c
index 04716f93b..e49da133c 100644
--- a/tests/libtest/chkhostname.c
+++ b/tests/libtest/chkhostname.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/first.c b/tests/libtest/first.c
index 5edb49bd2..6d1380688 100644
--- a/tests/libtest/first.c
+++ b/tests/libtest/first.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -35,10 +35,6 @@
# include <fcntl.h> /* for setmode() */
#endif
-#ifdef USE_NSS
-#include <nspr.h>
-#endif
-
#ifdef CURLDEBUG
# define MEMDEBUG_NODEFINES
# include "memdebug.h"
@@ -85,9 +81,7 @@ char **test_argv;
struct timeval tv_test_start; /* for test timing */
-#ifdef UNITTESTS
int unitfail; /* for unittests */
-#endif
#ifdef CURLDEBUG
static void memory_tracking_init(void)
@@ -178,17 +172,14 @@ int main(int argc, char **argv)
fprintf(stderr, "URL: %s\n", URL);
result = test(URL);
+ fprintf(stderr, "Test ended with result %d\n", result);
-#ifdef USE_NSS
- if(PR_Initialized())
- /* prevent valgrind from reporting possibly lost memory (fd cache, ...) */
- PR_Cleanup();
-#endif
-
-#ifdef WIN32
+#ifdef _WIN32
/* flush buffers of all streams regardless of mode */
_flushall();
#endif
- return result;
+ /* Regular program status codes are limited to 0..127 and 126 and 127 have
+ * special meanings by the shell, so limit a normal return code to 125 */
+ return result <= 125 ? result : 125;
}
diff --git a/tests/libtest/lib1156.c b/tests/libtest/lib1156.c
index 23e3d941f..b512ef67a 100644
--- a/tests/libtest/lib1156.c
+++ b/tests/libtest/lib1156.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -68,7 +68,7 @@ static const struct testparams params[] = {
{ F_RESUME | F_HTTP416 | F_CONTENTRANGE | F_IGNOREBODY, CURLE_OK },
{ F_RESUME | F_HTTP416 | F_FAIL | F_IGNOREBODY, CURLE_OK },
{ F_RESUME | F_HTTP416 | F_FAIL | F_CONTENTRANGE | F_IGNOREBODY,
- CURLE_HTTP_RETURNED_ERROR }
+ CURLE_OK }
};
static int hasbody;
@@ -103,7 +103,7 @@ static int onetest(CURL *curl, const char *url, const struct testparams *p,
hasbody = 0;
res = curl_easy_perform(curl);
if(res != p->result) {
- printf("%d: bad error code (%d): resume=%s, fail=%s, http416=%s, "
+ printf("%zd: bad error code (%d): resume=%s, fail=%s, http416=%s, "
"content-range=%s, expected=%d\n", num, res,
(p->flags & F_RESUME)? "yes": "no",
(p->flags & F_FAIL)? "yes": "no",
@@ -123,13 +123,13 @@ static int onetest(CURL *curl, const char *url, const struct testparams *p,
}
return 0;
- test_cleanup:
+test_cleanup:
return 1;
}
/* for debugging: */
-/*#define SINGLETEST 9*/
+/* #define SINGLETEST 9 */
int test(char *URL)
{
@@ -164,7 +164,7 @@ int test(char *URL)
printf("%d\n", status);
return status;
- test_cleanup:
+test_cleanup:
curl_easy_cleanup(curl);
curl_global_cleanup();
diff --git a/tests/libtest/lib1301.c b/tests/libtest/lib1301.c
new file mode 100644
index 000000000..f63b94ccd
--- /dev/null
+++ b/tests/libtest/lib1301.c
@@ -0,0 +1,62 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "test.h"
+
+#define fail_unless(expr, msg) \
+ do { \
+ if(!(expr)) { \
+ fprintf(stderr, "%s:%d Assertion '%s' failed: %s\n", \
+ __FILE__, __LINE__, #expr, msg); \
+ return 1; \
+ } \
+ } while(0)
+
+int test(char *URL)
+{
+ int rc;
+ (void)URL;
+
+ rc = curl_strequal("iii", "III");
+ fail_unless(rc != 0, "return code should be non-zero");
+
+ rc = curl_strequal("iiia", "III");
+ fail_unless(rc == 0, "return code should be zero");
+
+ rc = curl_strequal("iii", "IIIa");
+ fail_unless(rc == 0, "return code should be zero");
+
+ rc = curl_strequal("iiiA", "IIIa");
+ fail_unless(rc != 0, "return code should be non-zero");
+
+ rc = curl_strnequal("iii", "III", 3);
+ fail_unless(rc != 0, "return code should be non-zero");
+
+ rc = curl_strnequal("iiiABC", "IIIcba", 3);
+ fail_unless(rc != 0, "return code should be non-zero");
+
+ rc = curl_strnequal("ii", "II", 3);
+ fail_unless(rc != 0, "return code should be non-zero");
+
+ return 0;
+}
diff --git a/tests/libtest/lib1500.c b/tests/libtest/lib1500.c
index 9e009a3e7..3f237a031 100644
--- a/tests/libtest/lib1500.c
+++ b/tests/libtest/lib1500.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1501.c b/tests/libtest/lib1501.c
index 1deb2fdef..a4816c777 100644
--- a/tests/libtest/lib1501.c
+++ b/tests/libtest/lib1501.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1502.c b/tests/libtest/lib1502.c
index 2b5ba9e2e..2e2415b72 100644
--- a/tests/libtest/lib1502.c
+++ b/tests/libtest/lib1502.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1506.c b/tests/libtest/lib1506.c
index 1acb7bc62..a1a72b2a1 100644
--- a/tests/libtest/lib1506.c
+++ b/tests/libtest/lib1506.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2013 - 2022, Linus Nielsen Feltzing <linus@haxx.se>
+ * Copyright (C) Linus Nielsen Feltzing <linus@haxx.se>
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1507.c b/tests/libtest/lib1507.c
index 0783486c6..d23e0b184 100644
--- a/tests/libtest/lib1507.c
+++ b/tests/libtest/lib1507.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1508.c b/tests/libtest/lib1508.c
index 732e10d2b..981039137 100644
--- a/tests/libtest/lib1508.c
+++ b/tests/libtest/lib1508.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2013 - 2022, Linus Nielsen Feltzing <linus@haxx.se>
+ * Copyright (C) Linus Nielsen Feltzing <linus@haxx.se>
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1509.c b/tests/libtest/lib1509.c
index e64f3a37a..2277e6cee 100644
--- a/tests/libtest/lib1509.c
+++ b/tests/libtest/lib1509.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1510.c b/tests/libtest/lib1510.c
index 130400a78..927927e49 100644
--- a/tests/libtest/lib1510.c
+++ b/tests/libtest/lib1510.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2013 - 2022, Linus Nielsen Feltzing <linus@haxx.se>
+ * Copyright (C) Linus Nielsen Feltzing <linus@haxx.se>
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -83,6 +83,8 @@ int test(char *URL)
easy_setopt(curl, CURLOPT_URL, target_url);
res = curl_easy_perform(curl);
+ if(res)
+ goto test_cleanup;
abort_on_test_timeout();
}
diff --git a/tests/libtest/lib1511.c b/tests/libtest/lib1511.c
index 26d308438..d093a5bd2 100644
--- a/tests/libtest/lib1511.c
+++ b/tests/libtest/lib1511.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1512.c b/tests/libtest/lib1512.c
index d88dd1c00..670781982 100644
--- a/tests/libtest/lib1512.c
+++ b/tests/libtest/lib1512.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2013 - 2022, Linus Nielsen Feltzing <linus@haxx.se>
+ * Copyright (C) Linus Nielsen Feltzing <linus@haxx.se>
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -71,15 +71,20 @@ int test(char *URL)
/* include headers */
easy_setopt(curl[i], CURLOPT_HEADER, 1L);
- easy_setopt(curl[i], CURLOPT_DNS_USE_GLOBAL_CACHE, 1L);
+ CURL_IGNORE_DEPRECATION(
+ easy_setopt(curl[i], CURLOPT_DNS_USE_GLOBAL_CACHE, 1L);
+ )
}
/* make the first one populate the GLOBAL cache */
easy_setopt(curl[0], CURLOPT_RESOLVE, slist);
/* run NUM_HANDLES transfers */
- for(i = 0; (i < NUM_HANDLES) && !res; i++)
+ for(i = 0; (i < NUM_HANDLES) && !res; i++) {
res = curl_easy_perform(curl[i]);
+ if(res)
+ goto test_cleanup;
+ }
test_cleanup:
diff --git a/tests/libtest/lib1513.c b/tests/libtest/lib1513.c
index 04e1ecc90..19c23c06e 100644
--- a/tests/libtest/lib1513.c
+++ b/tests/libtest/lib1513.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -59,8 +59,10 @@ int test(char *URL)
easy_setopt(curl, CURLOPT_URL, URL);
easy_setopt(curl, CURLOPT_TIMEOUT, (long)7);
easy_setopt(curl, CURLOPT_NOSIGNAL, (long)1);
- easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progressKiller);
- easy_setopt(curl, CURLOPT_PROGRESSDATA, NULL);
+ CURL_IGNORE_DEPRECATION(
+ easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progressKiller);
+ easy_setopt(curl, CURLOPT_PROGRESSDATA, NULL);
+ )
easy_setopt(curl, CURLOPT_NOPROGRESS, (long)0);
res = curl_easy_perform(curl);
diff --git a/tests/libtest/lib1514.c b/tests/libtest/lib1514.c
index a2350030e..6582b5977 100644
--- a/tests/libtest/lib1514.c
+++ b/tests/libtest/lib1514.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1515.c b/tests/libtest/lib1515.c
index 6690af4c0..d210ed3be 100644
--- a/tests/libtest/lib1515.c
+++ b/tests/libtest/lib1515.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -37,10 +37,6 @@
#define DNS_TIMEOUT 1
-#if defined(WIN32) || defined(_WIN32)
-#define sleep(sec) Sleep ((sec)*1000)
-#endif
-
static int debug_callback(CURL *curl, curl_infotype info, char *msg,
size_t len, void *ptr)
{
diff --git a/tests/libtest/lib1517.c b/tests/libtest/lib1517.c
index 85e027a93..126792017 100644
--- a/tests/libtest/lib1517.c
+++ b/tests/libtest/lib1517.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -60,6 +60,16 @@ int test(char *URL)
struct WriteThis pooh;
+ if(!strcmp(URL, "check")) {
+#if (defined(_WIN32) || defined(__CYGWIN__))
+ printf("Windows TCP does not deliver response data but reports "
+ "CONNABORTED\n");
+ return 1; /* skip since test will fail on Windows without workaround */
+#else
+ return 0; /* sure, run this! */
+#endif
+ }
+
pooh.readptr = data;
pooh.sizeleft = strlen(data);
diff --git a/tests/libtest/lib1518.c b/tests/libtest/lib1518.c
index 42a6db730..aa0de4155 100644
--- a/tests/libtest/lib1518.c
+++ b/tests/libtest/lib1518.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -81,7 +81,7 @@ int test(char *URL)
curl_easy_getinfo(curl, CURLINFO_REDIRECT_COUNT, &curlRedirectCount);
curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &effectiveUrl);
curl_easy_getinfo(curl, CURLINFO_REDIRECT_URL, &redirectUrl);
- res = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writecb);
+ test_setopt(curl, CURLOPT_WRITEFUNCTION, writecb);
printf("res %d\n"
"status %d\n"
diff --git a/tests/libtest/lib1520.c b/tests/libtest/lib1520.c
index 248620b23..5b6c3dcfb 100644
--- a/tests/libtest/lib1520.c
+++ b/tests/libtest/lib1520.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2014 - 2022, Steve Holme, <steve_holme@hotmail.com>.
+ * Copyright (C) Steve Holme, <steve_holme@hotmail.com>.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1522.c b/tests/libtest/lib1522.c
index fa4c0c8e6..f5e87e014 100644
--- a/tests/libtest/lib1522.c
+++ b/tests/libtest/lib1522.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -40,7 +40,7 @@ static int sockopt_callback(void *clientp, curl_socket_t curlfd,
(void) clientp;
(void) purpose;
setsockopt(curlfd, SOL_SOCKET, SO_SNDBUF,
- (const char *)&sndbufsize, sizeof(sndbufsize));
+ (char *)&sndbufsize, sizeof(sndbufsize));
#else
(void)clientp;
(void)curlfd;
@@ -51,7 +51,7 @@ static int sockopt_callback(void *clientp, curl_socket_t curlfd,
int test(char *URL)
{
- CURLcode code;
+ CURLcode code = TEST_ERR_MAJOR_BAD;
CURLcode res;
struct curl_slist *pHeaderList = NULL;
CURL *curl = curl_easy_init();
@@ -92,10 +92,10 @@ int test(char *URL)
else {
printf("curl_easy_perform() failed. e = %d\n", code);
}
- test_cleanup:
+test_cleanup:
curl_slist_free_all(pHeaderList);
curl_easy_cleanup(curl);
curl_global_cleanup();
- return 0;
+ return (int)code;
}
diff --git a/tests/libtest/lib1523.c b/tests/libtest/lib1523.c
index d63a58fe9..9aa9e3cb4 100644
--- a/tests/libtest/lib1523.c
+++ b/tests/libtest/lib1523.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -68,7 +68,6 @@ int test(char *URL)
curl_easy_setopt(hnd, CURLOPT_NOPROGRESS, 0L);
curl_easy_setopt(hnd, CURLOPT_XFERINFOFUNCTION, dload_progress_cb);
- printf("Start: %d\n", time(NULL));
ret = run(hnd, 1, 2);
if(ret)
fprintf(stderr, "error %d: %s\n", ret, buffer);
@@ -79,7 +78,6 @@ int test(char *URL)
else
ret = CURLE_OK;
- printf("End: %d\n", time(NULL));
curl_easy_cleanup(hnd);
curl_global_cleanup();
diff --git a/tests/libtest/lib1525.c b/tests/libtest/lib1525.c
index 44c52ff58..591eb413f 100644
--- a/tests/libtest/lib1525.c
+++ b/tests/libtest/lib1525.c
@@ -5,8 +5,8 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- * Copyright (C) 1998, Vijay Panghal, <vpanghal@maginatics.com>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Vijay Panghal, <vpanghal@maginatics.com>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -50,7 +50,7 @@ int test(char *URL)
{
CURL *curl = NULL;
CURLcode res = CURLE_FAILED_INIT;
- /* http and proxy header list*/
+ /* http and proxy header list */
struct curl_slist *hhl = NULL;
if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
diff --git a/tests/libtest/lib1526.c b/tests/libtest/lib1526.c
index d9f11f54e..c11e536eb 100644
--- a/tests/libtest/lib1526.c
+++ b/tests/libtest/lib1526.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Vijay Panghal, <vpanghal@maginatics.com>, et al.
+ * Copyright (C) Vijay Panghal, <vpanghal@maginatics.com>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -48,7 +48,7 @@ int test(char *URL)
{
CURL *curl = NULL;
CURLcode res = CURLE_FAILED_INIT;
- /* http and proxy header list*/
+ /* http and proxy header list */
struct curl_slist *hhl = NULL, *phl = NULL, *tmp = NULL;
if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
diff --git a/tests/libtest/lib1527.c b/tests/libtest/lib1527.c
index 6f4d7fec4..e59870585 100644
--- a/tests/libtest/lib1527.c
+++ b/tests/libtest/lib1527.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Vijay Panghal, <vpanghal@maginatics.com>, et al.
+ * Copyright (C) Vijay Panghal, <vpanghal@maginatics.com>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -49,7 +49,7 @@ int test(char *URL)
{
CURL *curl = NULL;
CURLcode res = CURLE_FAILED_INIT;
- /* http header list*/
+ /* http header list */
struct curl_slist *hhl = NULL, *tmp = NULL;
if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
diff --git a/tests/libtest/lib1528.c b/tests/libtest/lib1528.c
index 3401f6580..ae2360414 100644
--- a/tests/libtest/lib1528.c
+++ b/tests/libtest/lib1528.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -30,7 +30,7 @@ int test(char *URL)
{
CURL *curl = NULL;
CURLcode res = CURLE_FAILED_INIT;
- /* http header list*/
+ /* http header list */
struct curl_slist *hhl = NULL;
struct curl_slist *phl = NULL;
diff --git a/tests/libtest/lib1529.c b/tests/libtest/lib1529.c
index b2fa29a16..5b0f990fd 100644
--- a/tests/libtest/lib1529.c
+++ b/tests/libtest/lib1529.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1530.c b/tests/libtest/lib1530.c
index 39b2042c5..e45949294 100644
--- a/tests/libtest/lib1530.c
+++ b/tests/libtest/lib1530.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1531.c b/tests/libtest/lib1531.c
index c5cc54857..b64e16603 100644
--- a/tests/libtest/lib1531.c
+++ b/tests/libtest/lib1531.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -110,7 +110,7 @@ int test(char *URL)
curl_multi_fdset() doc. */
if(maxfd == -1) {
-#if defined(WIN32) || defined(_WIN32)
+#if defined(_WIN32)
Sleep(100);
rc = 0;
#else
diff --git a/tests/libtest/lib1532.c b/tests/libtest/lib1532.c
index 01ce4b445..a3ac70929 100644
--- a/tests/libtest/lib1532.c
+++ b/tests/libtest/lib1532.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1533.c b/tests/libtest/lib1533.c
index b36f3a208..0c9f8fa95 100644
--- a/tests/libtest/lib1533.c
+++ b/tests/libtest/lib1533.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -106,7 +106,7 @@ static int perform_and_check_connections(CURL *curl, const char *description,
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
- fprintf(stderr, "curl_easy_perform() failed\n");
+ fprintf(stderr, "curl_easy_perform() failed with %d\n", (int)res);
return TEST_ERR_MAJOR_BAD;
}
diff --git a/tests/libtest/lib1534.c b/tests/libtest/lib1534.c
index 7fc731dc9..620e38338 100644
--- a/tests/libtest/lib1534.c
+++ b/tests/libtest/lib1534.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1535.c b/tests/libtest/lib1535.c
index e8cf67f9c..6edf88731 100644
--- a/tests/libtest/lib1535.c
+++ b/tests/libtest/lib1535.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -40,7 +40,9 @@ int test(char *URL)
/* Test that protocol is properly initialized on curl_easy_init.
*/
- res = curl_easy_getinfo(curl, CURLINFO_PROTOCOL, &protocol);
+ CURL_IGNORE_DEPRECATION(
+ res = curl_easy_getinfo(curl, CURLINFO_PROTOCOL, &protocol);
+ )
if(res) {
fprintf(stderr, "%s:%d curl_easy_getinfo() failed with code %d (%s)\n",
__FILE__, __LINE__, res, curl_easy_strerror(res));
@@ -65,7 +67,9 @@ int test(char *URL)
/* Test that a protocol is properly set after receiving an HTTP resource.
*/
- res = curl_easy_getinfo(curl, CURLINFO_PROTOCOL, &protocol);
+ CURL_IGNORE_DEPRECATION(
+ res = curl_easy_getinfo(curl, CURLINFO_PROTOCOL, &protocol);
+ )
if(res) {
fprintf(stderr, "%s:%d curl_easy_getinfo() failed with code %d (%s)\n",
__FILE__, __LINE__, res, curl_easy_strerror(res));
@@ -90,7 +94,9 @@ int test(char *URL)
goto test_cleanup;
}
- res = curl_easy_getinfo(dupe, CURLINFO_PROTOCOL, &protocol);
+ CURL_IGNORE_DEPRECATION(
+ res = curl_easy_getinfo(dupe, CURLINFO_PROTOCOL, &protocol);
+ )
if(res) {
fprintf(stderr, "%s:%d curl_easy_getinfo() failed with code %d (%s)\n",
__FILE__, __LINE__, res, curl_easy_strerror(res));
@@ -109,7 +115,9 @@ int test(char *URL)
curl_easy_reset(curl);
- res = curl_easy_getinfo(curl, CURLINFO_PROTOCOL, &protocol);
+ CURL_IGNORE_DEPRECATION(
+ res = curl_easy_getinfo(curl, CURLINFO_PROTOCOL, &protocol);
+ )
if(res) {
fprintf(stderr, "%s:%d curl_easy_getinfo() failed with code %d (%s)\n",
__FILE__, __LINE__, res, curl_easy_strerror(res));
diff --git a/tests/libtest/lib1536.c b/tests/libtest/lib1536.c
index 018c6cff4..9ba7ec18e 100644
--- a/tests/libtest/lib1536.c
+++ b/tests/libtest/lib1536.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1537.c b/tests/libtest/lib1537.c
index 30f7be243..21252fb79 100644
--- a/tests/libtest/lib1537.c
+++ b/tests/libtest/lib1537.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1538.c b/tests/libtest/lib1538.c
index 494a4e956..cd9e3f65c 100644
--- a/tests/libtest/lib1538.c
+++ b/tests/libtest/lib1538.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1540.c b/tests/libtest/lib1540.c
index 0f74931db..ea1cb1cd1 100644
--- a/tests/libtest/lib1540.c
+++ b/tests/libtest/lib1540.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -76,7 +76,8 @@ static size_t write_callback(void *ptr, size_t size, size_t nmemb, void *userp)
fwrite(ptr, size, nmemb, stdout);
return len;
}
- printf("Got %d bytes but pausing!\n", (int)len);
+ if(len)
+ printf("Got bytes but pausing!\n");
st->halted = 1;
return CURL_WRITEFUNC_PAUSE;
}
@@ -84,7 +85,6 @@ static size_t write_callback(void *ptr, size_t size, size_t nmemb, void *userp)
int test(char *URL)
{
CURL *curls = NULL;
- int i = 0;
int res = 0;
struct transfer_status st;
@@ -114,8 +114,5 @@ test_cleanup:
curl_easy_cleanup(curls);
curl_global_cleanup();
- if(res)
- i = res;
-
- return i; /* return the final return code */
+ return (int)res; /* return the final return code */
}
diff --git a/tests/libtest/lib1542.c b/tests/libtest/lib1542.c
index 19c46b59b..2570ea3cf 100644
--- a/tests/libtest/lib1542.c
+++ b/tests/libtest/lib1542.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -36,10 +36,6 @@
#include "warnless.h"
#include "memdebug.h"
-#if defined(WIN32) || defined(_WIN32)
-#define sleep(sec) Sleep ((sec)*1000)
-#endif
-
int test(char *URL)
{
CURL *easy = NULL;
@@ -84,5 +80,5 @@ test_cleanup:
curl_easy_cleanup(easy);
curl_global_cleanup();
- return (int)res;
+ return res;
}
diff --git a/tests/libtest/lib1545.c b/tests/libtest/lib1545.c
new file mode 100644
index 000000000..f31baa0c4
--- /dev/null
+++ b/tests/libtest/lib1545.c
@@ -0,0 +1,56 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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
+ *
+ ***************************************************************************/
+#ifndef CURL_DISABLE_DEPRECATION
+#define CURL_DISABLE_DEPRECATION /* Using and testing the form api */
+#endif
+#include "test.h"
+
+int test(char *URL)
+{
+ CURL *eh = NULL;
+ int res = 0;
+ struct curl_httppost *lastptr = NULL;
+ struct curl_httppost *m_formpost = NULL;
+
+ global_init(CURL_GLOBAL_ALL);
+
+ easy_init(eh);
+
+ easy_setopt(eh, CURLOPT_URL, URL);
+ curl_formadd(&m_formpost, &lastptr, CURLFORM_COPYNAME, "file",
+ CURLFORM_FILE, "missing-file", CURLFORM_END);
+ curl_easy_setopt(eh, CURLOPT_HTTPPOST, m_formpost);
+
+ (void)curl_easy_perform(eh);
+ (void)curl_easy_perform(eh);
+
+test_cleanup:
+
+ curl_formfree(m_formpost);
+
+ curl_easy_cleanup(eh);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib1550.c b/tests/libtest/lib1550.c
index c35e293cd..4c34be865 100644
--- a/tests/libtest/lib1550.c
+++ b/tests/libtest/lib1550.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1551.c b/tests/libtest/lib1551.c
index aabb92a96..784113aaf 100644
--- a/tests/libtest/lib1551.c
+++ b/tests/libtest/lib1551.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -39,11 +39,15 @@ int test(char *URL)
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
res = curl_easy_perform(curl);
+ if(res)
+ goto test_cleanup;
fprintf(stderr, "****************************** Do it again\n");
res = curl_easy_perform(curl);
- curl_easy_cleanup(curl);
}
+
+test_cleanup:
+ curl_easy_cleanup(curl);
curl_global_cleanup();
return (int)res;
}
diff --git a/tests/libtest/lib1552.c b/tests/libtest/lib1552.c
index acab9cde1..c48d640d6 100644
--- a/tests/libtest/lib1552.c
+++ b/tests/libtest/lib1552.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1553.c b/tests/libtest/lib1553.c
index 01003c5ed..8bf15684b 100644
--- a/tests/libtest/lib1553.c
+++ b/tests/libtest/lib1553.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1554.c b/tests/libtest/lib1554.c
index 021cdc9c8..181044d05 100644
--- a/tests/libtest/lib1554.c
+++ b/tests/libtest/lib1554.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -46,7 +46,7 @@ static void my_unlock(CURL *handle, curl_lock_data data, void *useptr)
int test(char *URL)
{
CURLcode res = CURLE_OK;
- CURLSH *share;
+ CURLSH *share = NULL;
int i;
global_init(CURL_GLOBAL_ALL);
@@ -54,8 +54,7 @@ int test(char *URL)
share = curl_share_init();
if(!share) {
fprintf(stderr, "curl_share_init() failed\n");
- curl_global_cleanup();
- return TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
}
curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_CONNECT);
@@ -75,18 +74,22 @@ int test(char *URL)
/* Perform the request, res will get the return code */
res = curl_easy_perform(curl);
- /* Check for errors */
- if(res != CURLE_OK)
- fprintf(stderr, "curl_easy_perform() failed: %s\n",
- curl_easy_strerror(res));
/* always cleanup */
curl_easy_cleanup(curl);
+
+ /* Check for errors */
+ if(res != CURLE_OK) {
+ fprintf(stderr, "curl_easy_perform() failed: %s\n",
+ curl_easy_strerror(res));
+ goto test_cleanup;
+ }
}
}
+test_cleanup:
curl_share_cleanup(share);
curl_global_cleanup();
- return 0;
+ return (int)res;
}
diff --git a/tests/libtest/lib1555.c b/tests/libtest/lib1555.c
index eb39e96e6..1ff6f28d5 100644
--- a/tests/libtest/lib1555.c
+++ b/tests/libtest/lib1555.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -64,8 +64,10 @@ int test(char *URL)
easy_setopt(curl, CURLOPT_URL, URL);
easy_setopt(curl, CURLOPT_TIMEOUT, (long)7);
easy_setopt(curl, CURLOPT_NOSIGNAL, (long)1);
- easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progressCallback);
- easy_setopt(curl, CURLOPT_PROGRESSDATA, NULL);
+ CURL_IGNORE_DEPRECATION(
+ easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progressCallback);
+ easy_setopt(curl, CURLOPT_PROGRESSDATA, NULL);
+ )
easy_setopt(curl, CURLOPT_NOPROGRESS, (long)0);
res = curl_easy_perform(curl);
diff --git a/tests/libtest/lib1556.c b/tests/libtest/lib1556.c
index b59a0db60..6f8a21439 100644
--- a/tests/libtest/lib1556.c
+++ b/tests/libtest/lib1556.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1557.c b/tests/libtest/lib1557.c
index 6828d7866..2fa34ada3 100644
--- a/tests/libtest/lib1557.c
+++ b/tests/libtest/lib1557.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1558.c b/tests/libtest/lib1558.c
index 8c95b060b..d64b59801 100644
--- a/tests/libtest/lib1558.c
+++ b/tests/libtest/lib1558.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -44,7 +44,9 @@ int test(char *URL)
goto test_cleanup;
}
- res = curl_easy_getinfo(curl, CURLINFO_PROTOCOL, &protocol);
+ CURL_IGNORE_DEPRECATION(
+ res = curl_easy_getinfo(curl, CURLINFO_PROTOCOL, &protocol);
+ )
if(res) {
fprintf(stderr, "curl_easy_getinfo() returned %d (%s)\n",
res, curl_easy_strerror(res));
diff --git a/tests/libtest/lib1559.c b/tests/libtest/lib1559.c
index c941ac252..402fee3d0 100644
--- a/tests/libtest/lib1559.c
+++ b/tests/libtest/lib1559.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1560.c b/tests/libtest/lib1560.c
index 42300cfd7..87420a330 100644
--- a/tests/libtest/lib1560.c
+++ b/tests/libtest/lib1560.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -31,6 +31,9 @@
*/
#include "test.h"
+#if defined(USE_LIBIDN2) || defined(USE_WIN32_IDN)
+#define USE_IDN
+#endif
#include "testutil.h"
#include "warnless.h"
@@ -105,6 +108,16 @@ struct setcase {
CURLUcode pcode; /* for updating parts */
};
+struct setgetcase {
+ const char *in;
+ const char *set;
+ const char *out;
+ unsigned int urlflags; /* for setting the URL */
+ unsigned int setflags; /* for updating parts */
+ unsigned int getflags; /* for getting parts */
+ CURLUcode pcode; /* for updating parts */
+};
+
struct testcase {
const char *in;
const char *out;
@@ -138,6 +151,66 @@ struct clearurlcase {
};
static const struct testcase get_parts_list[] ={
+ {"https://curl.se/# ",
+ "https | [11] | [12] | [13] | curl.se | [15] | / | [16] | %20%20",
+ CURLU_URLENCODE|CURLU_ALLOW_SPACE, 0, CURLUE_OK},
+ {"", "", 0, 0, CURLUE_MALFORMED_INPUT},
+ {" ", "", 0, 0, CURLUE_MALFORMED_INPUT},
+ {"1h://example.net", "", 0, 0, CURLUE_BAD_SCHEME},
+ {"..://example.net", "", 0, 0, CURLUE_BAD_SCHEME},
+ {"-ht://example.net", "", 0, 0, CURLUE_BAD_SCHEME},
+ {"+ftp://example.net", "", 0, 0, CURLUE_BAD_SCHEME},
+ {"hej.hej://example.net",
+ "hej.hej | [11] | [12] | [13] | example.net | [15] | / | [16] | [17]",
+ CURLU_NON_SUPPORT_SCHEME, 0, CURLUE_OK},
+ {"ht-tp://example.net",
+ "ht-tp | [11] | [12] | [13] | example.net | [15] | / | [16] | [17]",
+ CURLU_NON_SUPPORT_SCHEME, 0, CURLUE_OK},
+ {"ftp+more://example.net",
+ "ftp+more | [11] | [12] | [13] | example.net | [15] | / | [16] | [17]",
+ CURLU_NON_SUPPORT_SCHEME, 0, CURLUE_OK},
+ {"f1337://example.net",
+ "f1337 | [11] | [12] | [13] | example.net | [15] | / | [16] | [17]",
+ CURLU_NON_SUPPORT_SCHEME, 0, CURLUE_OK},
+ {"https://user@example.net?hello# space ",
+ "https | user | [12] | [13] | example.net | [15] | / | hello | %20space%20",
+ CURLU_ALLOW_SPACE|CURLU_URLENCODE, 0, CURLUE_OK},
+ {"https://test%test", "", 0, 0, CURLUE_BAD_HOSTNAME},
+ {"https://example.com%252f%40@example.net",
+ "https | example.com%2f@ | [12] | [13] | example.net | [15] | / "
+ "| [16] | [17]",
+ 0, CURLU_URLDECODE, CURLUE_OK },
+#ifdef USE_IDN
+ {"https://räksmörgås.se",
+ "https | [11] | [12] | [13] | xn--rksmrgs-5wao1o.se | "
+ "[15] | / | [16] | [17]", 0, CURLU_PUNYCODE, CURLUE_OK},
+ {"https://xn--rksmrgs-5wao1o.se",
+ "https | [11] | [12] | [13] | räksmörgås.se | "
+ "[15] | / | [16] | [17]", 0, CURLU_PUNY2IDN, CURLUE_OK},
+#else
+ {"https://räksmörgås.se",
+ "https | [11] | [12] | [13] | [30] | [15] | / | [16] | [17]",
+ 0, CURLU_PUNYCODE, CURLUE_OK},
+#endif
+ /* https://ℂᵤⓇℒ。ð’🄴 */
+ {"https://"
+ "%e2%84%82%e1%b5%a4%e2%93%87%e2%84%92%e3%80%82%f0%9d%90%92%f0%9f%84%b4",
+ "https | [11] | [12] | [13] | ℂᵤⓇℒ。ð’🄴 | [15] |"
+ " / | [16] | [17]",
+ 0, 0, CURLUE_OK},
+ {"https://"
+ "%e2%84%82%e1%b5%a4%e2%93%87%e2%84%92%e3%80%82%f0%9d%90%92%f0%9f%84%b4",
+ "https | [11] | [12] | [13] | "
+ "%e2%84%82%e1%b5%a4%e2%93%87%e2%84%92%e3%80%82%f0%9d%90%92%f0%9f%84%b4 "
+ "| [15] | / | [16] | [17]",
+ 0, CURLU_URLENCODE, CURLUE_OK},
+ {"https://"
+ "\xe2\x84\x82\xe1\xb5\xa4\xe2\x93\x87\xe2\x84\x92"
+ "\xe3\x80\x82\xf0\x9d\x90\x92\xf0\x9f\x84\xb4",
+ "https | [11] | [12] | [13] | "
+ "%e2%84%82%e1%b5%a4%e2%93%87%e2%84%92%e3%80%82%f0%9d%90%92%f0%9f%84%b4 "
+ "| [15] | / | [16] | [17]",
+ 0, CURLU_URLENCODE, CURLUE_OK},
{"https://user@example.net?he l lo",
"https | user | [12] | [13] | example.net | [15] | / | he+l+lo | [17]",
CURLU_ALLOW_SPACE, CURLU_URLENCODE, CURLUE_OK},
@@ -160,6 +233,10 @@ static const struct testcase get_parts_list[] ={
{"https://exam=ple.net", "", 0, 0, CURLUE_BAD_HOSTNAME},
{"https://exam;ple.net", "", 0, 0, CURLUE_BAD_HOSTNAME},
{"https://example,net", "", 0, 0, CURLUE_BAD_HOSTNAME},
+ {"https://example&net", "", 0, 0, CURLUE_BAD_HOSTNAME},
+ {"https://example+net", "", 0, 0, CURLUE_BAD_HOSTNAME},
+ {"https://example(net", "", 0, 0, CURLUE_BAD_HOSTNAME},
+ {"https://example)net", "", 0, 0, CURLUE_BAD_HOSTNAME},
{"https://example.net/}",
"https | [11] | [12] | [13] | example.net | [15] | /} | [16] | [17]",
0, 0, CURLUE_OK},
@@ -188,17 +265,17 @@ static const struct testcase get_parts_list[] ={
#endif
{"https://user:password@example.net/get?this=and#but frag then", "",
- CURLU_DEFAULT_SCHEME, 0, CURLUE_BAD_FRAGMENT},
+ CURLU_DEFAULT_SCHEME, 0, CURLUE_MALFORMED_INPUT},
{"https://user:password@example.net/get?this=and what", "",
- CURLU_DEFAULT_SCHEME, 0, CURLUE_BAD_QUERY},
+ CURLU_DEFAULT_SCHEME, 0, CURLUE_MALFORMED_INPUT},
{"https://user:password@example.net/ge t?this=and-what", "",
- CURLU_DEFAULT_SCHEME, 0, CURLUE_BAD_PATH},
+ CURLU_DEFAULT_SCHEME, 0, CURLUE_MALFORMED_INPUT},
{"https://user:pass word@example.net/get?this=and-what", "",
- CURLU_DEFAULT_SCHEME, 0, CURLUE_BAD_PASSWORD},
+ CURLU_DEFAULT_SCHEME, 0, CURLUE_MALFORMED_INPUT},
{"https://u ser:password@example.net/get?this=and-what", "",
- CURLU_DEFAULT_SCHEME, 0, CURLUE_BAD_USER},
+ CURLU_DEFAULT_SCHEME, 0, CURLUE_MALFORMED_INPUT},
{"imap://user:pass;opt ion@server/path", "",
- CURLU_DEFAULT_SCHEME, 0, CURLUE_BAD_LOGIN},
+ CURLU_DEFAULT_SCHEME, 0, CURLUE_MALFORMED_INPUT},
/* no space allowed in scheme */
{"htt ps://user:password@example.net/get?this=and-what", "",
CURLU_NON_SUPPORT_SCHEME|CURLU_ALLOW_SPACE, 0, CURLUE_BAD_SCHEME},
@@ -242,7 +319,7 @@ static const struct testcase get_parts_list[] ={
"http | ftp.user | moo | [13] | example.com | [15] | /color/ | [16] | "
"green?no-red",
CURLU_GUESS_SCHEME, 0, CURLUE_OK },
-#ifdef WIN32
+#ifdef _WIN32
{"file:/C:\\programs\\foo",
"file | [11] | [12] | [13] | [14] | [15] | C:\\programs\\foo | [16] | [17]",
CURLU_DEFAULT_SCHEME, 0, CURLUE_OK},
@@ -360,9 +437,9 @@ static const struct testcase get_parts_list[] ={
"https | [11] | [12] | [13] | 127abc.com | [15] | / | [16] | [17]",
CURLU_DEFAULT_SCHEME, 0, CURLUE_OK},
{"https:// example.com?check", "",
- CURLU_DEFAULT_SCHEME, 0, CURLUE_BAD_HOSTNAME},
+ CURLU_DEFAULT_SCHEME, 0, CURLUE_MALFORMED_INPUT},
{"https://e x a m p l e.com?check", "",
- CURLU_DEFAULT_SCHEME, 0, CURLUE_BAD_HOSTNAME},
+ CURLU_DEFAULT_SCHEME, 0, CURLUE_MALFORMED_INPUT},
{"https://example.com?check",
"https | [11] | [12] | [13] | example.com | [15] | / | check | [17]",
CURLU_DEFAULT_SCHEME, 0, CURLUE_OK},
@@ -431,6 +508,35 @@ static const struct testcase get_parts_list[] ={
};
static const struct urltestcase get_url_list[] = {
+ {"https://1.0x1000000", "https://1.0x1000000/", 0, 0, CURLUE_OK},
+ {"https://0x7f.1", "https://127.0.0.1/", 0, 0, CURLUE_OK},
+ {"https://1.2.3.256.com", "https://1.2.3.256.com/", 0, 0, CURLUE_OK},
+ {"https://10.com", "https://10.com/", 0, 0, CURLUE_OK},
+ {"https://1.2.com", "https://1.2.com/", 0, 0, CURLUE_OK},
+ {"https://1.2.3.com", "https://1.2.3.com/", 0, 0, CURLUE_OK},
+ {"https://1.2.com.99", "https://1.2.com.99/", 0, 0, CURLUE_OK},
+ {"https://[fe80::0000:20c:29ff:fe9c:409b]:80/moo",
+ "https://[fe80::20c:29ff:fe9c:409b]:80/moo",
+ 0, 0, CURLUE_OK},
+ {"https://[fe80::020c:29ff:fe9c:409b]:80/moo",
+ "https://[fe80::20c:29ff:fe9c:409b]:80/moo",
+ 0, 0, CURLUE_OK},
+ {"https://[fe80:0000:0000:0000:020c:29ff:fe9c:409b]:80/moo",
+ "https://[fe80::20c:29ff:fe9c:409b]:80/moo",
+ 0, 0, CURLUE_OK},
+ {"https://[fe80:0:0:0:409b::]:80/moo",
+ "https://[fe80::409b:0:0:0]:80/moo",
+ 0, 0, CURLUE_OK},
+ {"https://[::%25fakeit];80/moo",
+ "",
+ 0, 0, CURLUE_BAD_PORT_NUMBER},
+ {"https://[fe80::20c:29ff:fe9c:409b]-80/moo",
+ "",
+ 0, 0, CURLUE_BAD_PORT_NUMBER},
+#ifdef USE_IDN
+ {"https://räksmörgås.se/path?q#frag",
+ "https://xn--rksmrgs-5wao1o.se/path?q#frag", 0, CURLU_PUNYCODE, CURLUE_OK},
+#endif
/* unsupported schemes with no guessing enabled */
{"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIEhUTUw+PG1ldGEgY",
"", 0, 0, CURLUE_UNSUPPORTED_SCHEME},
@@ -448,34 +554,34 @@ static const struct urltestcase get_url_list[] = {
{"http://example.com%3a127.0.0.1/", "", 0, 0, CURLUE_BAD_HOSTNAME},
{"http://example.com%09127.0.0.1/", "", 0, 0, CURLUE_BAD_HOSTNAME},
{"http://example.com%2F127.0.0.1/", "", 0, 0, CURLUE_BAD_HOSTNAME},
- {"https://%this", "https://%25this/", 0, 0, CURLUE_OK},
- {"https://h%c", "https://h%25c/", 0, 0, CURLUE_OK},
- {"https://%%%%%%", "https://%25%25%25%25%25%25/", 0, 0, CURLUE_OK},
{"https://%41", "https://A/", 0, 0, CURLUE_OK},
{"https://%20", "", 0, 0, CURLUE_BAD_HOSTNAME},
{"https://%41%0d", "", 0, 0, CURLUE_BAD_HOSTNAME},
- {"https://%25", "https://%25/", 0, 0, CURLUE_OK},
+ {"https://%25", "", 0, 0, CURLUE_BAD_HOSTNAME},
{"https://_%c0_", "https://_\xC0_/", 0, 0, CURLUE_OK},
{"https://_%c0_", "https://_%C0_/", 0, CURLU_URLENCODE, CURLUE_OK},
/* IPv4 trickeries */
{"https://16843009", "https://1.1.1.1/", 0, 0, CURLUE_OK},
- {"https://0x7f.1", "https://127.0.0.1/", 0, 0, CURLUE_OK},
{"https://0177.1", "https://127.0.0.1/", 0, 0, CURLUE_OK},
{"https://0111.02.0x3", "https://73.2.0.3/", 0, 0, CURLUE_OK},
+ {"https://0111.02.0x3.", "https://0111.02.0x3./", 0, 0, CURLUE_OK},
+ {"https://0111.02.030", "https://73.2.0.24/", 0, 0, CURLUE_OK},
+ {"https://0111.02.030.", "https://0111.02.030./", 0, 0, CURLUE_OK},
{"https://0xff.0xff.0377.255", "https://255.255.255.255/", 0, 0, CURLUE_OK},
{"https://1.0xffffff", "https://1.255.255.255/", 0, 0, CURLUE_OK},
/* IPv4 numerical overflows or syntax errors will not normalize */
- {"https://+127.0.0.1", "https://+127.0.0.1/", 0, 0, CURLUE_OK},
- {"https://+127.0.0.1", "https://%2B127.0.0.1/", 0, CURLU_URLENCODE,
+ {"https://a127.0.0.1", "https://a127.0.0.1/", 0, 0, CURLUE_OK},
+ {"https://\xff.127.0.0.1", "https://%FF.127.0.0.1/", 0, CURLU_URLENCODE,
CURLUE_OK},
{"https://127.-0.0.1", "https://127.-0.0.1/", 0, 0, CURLUE_OK},
- {"https://127.0. 1", "https://127.0.0.1/", 0, 0, CURLUE_BAD_HOSTNAME},
- {"https://1.0x1000000", "https://1.0x1000000/", 0, 0, CURLUE_OK},
+ {"https://127.0. 1", "https://127.0.0.1/", 0, 0, CURLUE_MALFORMED_INPUT},
{"https://1.2.3.256", "https://1.2.3.256/", 0, 0, CURLUE_OK},
+ {"https://1.2.3.256.", "https://1.2.3.256./", 0, 0, CURLUE_OK},
{"https://1.2.3.4.5", "https://1.2.3.4.5/", 0, 0, CURLUE_OK},
{"https://1.2.0x100.3", "https://1.2.0x100.3/", 0, 0, CURLUE_OK},
{"https://4294967296", "https://4294967296/", 0, 0, CURLUE_OK},
+ {"https://123host", "https://123host/", 0, 0, CURLUE_OK},
/* 40 bytes scheme is the max allowed */
{"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA://hostname/path",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa://hostname/path",
@@ -520,36 +626,63 @@ static const struct urltestcase get_url_list[] = {
{"example.com/path/html",
"http://example.com/path/html",
CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+ {"smtp.com/path/html",
+ "smtp://smtp.com/path/html",
+ CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+ {"dict.com/path/html",
+ "dict://dict.com/path/html",
+ CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+ {"pop3.com/path/html",
+ "pop3://pop3.com/path/html",
+ CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+ {"ldap.com/path/html",
+ "ldap://ldap.com/path/html",
+ CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+ {"imap.com/path/html",
+ "imap://imap.com/path/html",
+ CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+ {"ftp.com/path/html",
+ "ftp://ftp.com/path/html",
+ CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+ {"smtp/path/html",
+ "http://smtp/path/html",
+ CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+ {"dict/path/html",
+ "http://dict/path/html",
+ CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+ {"pop3/path/html",
+ "http://pop3/path/html",
+ CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+ {"ldap/path/html",
+ "http://ldap/path/html",
+ CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+ {"imap/path/html",
+ "http://imap/path/html",
+ CURLU_GUESS_SCHEME, 0, CURLUE_OK},
+ {"ftp/path/html",
+ "http://ftp/path/html",
+ CURLU_GUESS_SCHEME, 0, CURLUE_OK},
{"HTTP://test/", "http://test/", 0, 0, CURLUE_OK},
{"http://HO0_-st..~./", "http://HO0_-st..~./", 0, 0, CURLUE_OK},
- {"http:/@example.com: 123/", "", 0, 0, CURLUE_BAD_PORT_NUMBER},
- {"http:/@example.com:123 /", "", 0, 0, CURLUE_BAD_PORT_NUMBER},
+ {"http:/@example.com: 123/", "", 0, 0, CURLUE_MALFORMED_INPUT},
+ {"http:/@example.com:123 /", "", 0, 0, CURLUE_MALFORMED_INPUT},
{"http:/@example.com:123a/", "", 0, 0, CURLUE_BAD_PORT_NUMBER},
- {"http://host/file\r", "", 0, 0, CURLUE_BAD_PATH},
- {"http://host/file\n\x03", "", 0, 0, CURLUE_BAD_PATH},
+ {"http://host/file\r", "", 0, 0, CURLUE_MALFORMED_INPUT},
+ {"http://host/file\n\x03", "", 0, 0, CURLUE_MALFORMED_INPUT},
{"htt\x02://host/file", "",
- CURLU_NON_SUPPORT_SCHEME, 0, CURLUE_BAD_SCHEME},
- {" http://host/file", "", 0, 0, CURLUE_BAD_SCHEME},
+ CURLU_NON_SUPPORT_SCHEME, 0, CURLUE_MALFORMED_INPUT},
+ {" http://host/file", "", 0, 0, CURLUE_MALFORMED_INPUT},
/* here the password ends at the semicolon and options is 'word' */
{"imap://user:pass;word@host/file",
"imap://user:pass;word@host/file",
0, 0, CURLUE_OK},
/* here the password has the semicolon */
{"http://user:pass;word@host/file",
- "http://user:pass;word@host/file",
- 0, 0, CURLUE_OK},
- {"file:///file.txt#moo",
- "file:///file.txt#moo",
- 0, 0, CURLUE_OK},
- {"file:////file.txt",
- "file:////file.txt",
- 0, 0, CURLUE_OK},
- {"file:///file.txt",
- "file:///file.txt",
- 0, 0, CURLUE_OK},
- {"file:./",
- "file://",
- 0, 0, CURLUE_BAD_SCHEME},
+ "http://user:pass;word@host/file", 0, 0, CURLUE_OK},
+ {"file:///file.txt#moo", "file:///file.txt#moo", 0, 0, CURLUE_OK},
+ {"file:////file.txt", "file:////file.txt", 0, 0, CURLUE_OK},
+ {"file:///file.txt", "file:///file.txt", 0, 0, CURLUE_OK},
+ {"file:./", "file://", 0, 0, CURLUE_OK},
{"http://example.com/hello/../here",
"http://example.com/hello/../here",
CURLU_PATH_AS_IS, 0, CURLUE_OK},
@@ -619,22 +752,110 @@ static const struct urltestcase get_url_list[] = {
{NULL, NULL, 0, 0, CURLUE_OK}
};
-static int checkurl(const char *url, const char *out)
+static int checkurl(const char *org, const char *url, const char *out)
{
if(strcmp(out, url)) {
- fprintf(stderr, "Wanted: %s\nGot : %s\n",
- out, url);
+ fprintf(stderr,
+ "Org: %s\n"
+ "Wanted: %s\n"
+ "Got : %s\n",
+ org, out, url);
return 1;
}
return 0;
}
+/* 1. Set the URL
+ 2. Set components
+ 3. Extract all components (not URL)
+*/
+static const struct setgetcase setget_parts_list[] = {
+ {"https://example.com",
+ "path=get,",
+ "https | [11] | [12] | [13] | example.com | [15] | /get | [16] | [17]",
+ 0, 0, 0, CURLUE_OK},
+ {"https://example.com",
+ "path=/get,",
+ "https | [11] | [12] | [13] | example.com | [15] | /get | [16] | [17]",
+ 0, 0, 0, CURLUE_OK},
+ {"https://example.com",
+ "path=g e t,",
+ "https | [11] | [12] | [13] | example.com | [15] | /g%20e%20t | "
+ "[16] | [17]",
+ 0, CURLU_URLENCODE, 0, CURLUE_OK},
+ {NULL, NULL, NULL, 0, 0, 0, CURLUE_OK}
+};
+
/* !checksrc! disable SPACEBEFORECOMMA 1 */
static const struct setcase set_parts_list[] = {
+ {"https://example.com/?param=value",
+ "query=\"\",",
+ "https://example.com/",
+ 0, CURLU_APPENDQUERY | CURLU_URLENCODE, CURLUE_OK, CURLUE_OK},
+ {"https://example.com/",
+ "host=\"\",",
+ "https://example.com/",
+ 0, CURLU_URLENCODE, CURLUE_OK, CURLUE_BAD_HOSTNAME},
+ {"https://example.com/",
+ "host=\"\",",
+ "https://example.com/",
+ 0, 0, CURLUE_OK, CURLUE_BAD_HOSTNAME},
+ {"https://example.com",
+ "path=get,",
+ "https://example.com/get",
+ 0, 0, CURLUE_OK, CURLUE_OK},
+ {"https://example.com/",
+ "scheme=ftp+-.123,",
+ "ftp+-.123://example.com/",
+ 0, CURLU_NON_SUPPORT_SCHEME, CURLUE_OK, CURLUE_OK},
+ {"https://example.com/",
+ "scheme=1234,",
+ "https://example.com/",
+ 0, CURLU_NON_SUPPORT_SCHEME, CURLUE_OK, CURLUE_BAD_SCHEME},
+ {"https://example.com/",
+ "scheme=1http,",
+ "https://example.com/",
+ 0, CURLU_NON_SUPPORT_SCHEME, CURLUE_OK, CURLUE_BAD_SCHEME},
+ {"https://example.com/",
+ "scheme=-ftp,",
+ "https://example.com/",
+ 0, CURLU_NON_SUPPORT_SCHEME, CURLUE_OK, CURLUE_BAD_SCHEME},
+ {"https://example.com/",
+ "scheme=+ftp,",
+ "https://example.com/",
+ 0, CURLU_NON_SUPPORT_SCHEME, CURLUE_OK, CURLUE_BAD_SCHEME},
+ {"https://example.com/",
+ "scheme=.ftp,",
+ "https://example.com/",
+ 0, CURLU_NON_SUPPORT_SCHEME, CURLUE_OK, CURLUE_BAD_SCHEME},
+ {"https://example.com/",
+ "host=example.com%2fmoo,",
+ "",
+ 0, /* get */
+ 0, /* set */
+ CURLUE_OK, CURLUE_BAD_HOSTNAME},
+ {"https://example.com/",
+ "host=http://fake,",
+ "",
+ 0, /* get */
+ 0, /* set */
+ CURLUE_OK, CURLUE_BAD_HOSTNAME},
+ {"https://example.com/",
+ "host=test%,",
+ "",
+ 0, /* get */
+ 0, /* set */
+ CURLUE_OK, CURLUE_BAD_HOSTNAME},
+ {"https://example.com/",
+ "host=te st,",
+ "",
+ 0, /* get */
+ 0, /* set */
+ CURLUE_OK, CURLUE_BAD_HOSTNAME},
{"https://example.com/",
- "host=++,", /* '++' there's no automatic URL decode when settin this
+ "host=0xff,", /* '++' there's no automatic URL decode when setting this
part */
- "https://++/",
+ "https://0xff/",
0, /* get */
0, /* set */
CURLUE_OK, CURLUE_OK},
@@ -647,6 +868,11 @@ static const struct setcase set_parts_list[] = {
CURLUE_OK, CURLUE_OK},
{"https://example.com/",
+ /* Set a bad scheme *including* :// */
+ "scheme=https://,",
+ "https://example.com/",
+ 0, CURLU_NON_SUPPORT_SCHEME, CURLUE_OK, CURLUE_BAD_SCHEME},
+ {"https://example.com/",
/* Set a 41 bytes scheme. That's too long so the old scheme remains set. */
"scheme=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbc,",
"https://example.com/",
@@ -895,6 +1121,10 @@ static const struct redircase set_url_list[] = {
"../newpage",
"http://user:foo@example.com/newpage",
0, 0, CURLUE_OK},
+ {"http://user:foo@example.com/path?query#frag",
+ "http://?hi",
+ "http:///?hi",
+ 0, CURLU_NO_AUTHORITY, CURLUE_OK},
{NULL, NULL, NULL, 0, 0, CURLUE_OK}
};
@@ -928,7 +1158,7 @@ static int set_url(void)
error++;
}
else {
- if(checkurl(url, set_url_list[i].out)) {
+ if(checkurl(set_url_list[i].in, url, set_url_list[i].out)) {
error++;
}
}
@@ -945,6 +1175,54 @@ static int set_url(void)
return error;
}
+/* 1. Set a URL
+ 2. Set one or more parts
+ 3. Extract and compare all parts - not the URL
+*/
+static int setget_parts(void)
+{
+ int i;
+ int error = 0;
+
+ for(i = 0; setget_parts_list[i].set && !error; i++) {
+ CURLUcode rc;
+ CURLU *urlp = curl_url();
+ if(!urlp) {
+ error++;
+ break;
+ }
+ if(setget_parts_list[i].in)
+ rc = curl_url_set(urlp, CURLUPART_URL, setget_parts_list[i].in,
+ setget_parts_list[i].urlflags);
+ else
+ rc = CURLUE_OK;
+ if(!rc) {
+ char *url = NULL;
+ CURLUcode uc = updateurl(urlp, setget_parts_list[i].set,
+ setget_parts_list[i].setflags);
+
+ if(uc != setget_parts_list[i].pcode) {
+ fprintf(stderr, "updateurl\nin: %s\nreturned %d (expected %d)\n",
+ setget_parts_list[i].set, (int)uc, setget_parts_list[i].pcode);
+ error++;
+ }
+ if(!uc) {
+ if(checkparts(urlp, setget_parts_list[i].set, setget_parts_list[i].out,
+ setget_parts_list[i].getflags))
+ error++; /* add */
+ }
+ curl_free(url);
+ }
+ else if(rc != CURLUE_OK) {
+ fprintf(stderr, "Set parts\nin: %s\nreturned %d (expected %d)\n",
+ setget_parts_list[i].in, (int)rc, 0);
+ error++;
+ }
+ curl_url_cleanup(urlp);
+ }
+ return error;
+}
+
static int set_parts(void)
{
int i;
@@ -981,7 +1259,7 @@ static int set_parts(void)
__FILE__, __LINE__, (int)rc, curl_url_strerror(rc));
error++;
}
- else if(checkurl(url, set_parts_list[i].out)) {
+ else if(checkurl(set_parts_list[i].in, url, set_parts_list[i].out)) {
error++;
}
}
@@ -1021,13 +1299,13 @@ static int get_url(void)
error++;
}
else {
- if(checkurl(url, get_url_list[i].out)) {
+ if(checkurl(get_url_list[i].in, url, get_url_list[i].out)) {
error++;
}
}
curl_free(url);
}
- else if(rc != get_url_list[i].ucode) {
+ if(rc != get_url_list[i].ucode) {
fprintf(stderr, "Get URL\nin: %s\nreturned %d (expected %d)\n",
get_url_list[i].in, (int)rc, get_url_list[i].ucode);
error++;
@@ -1124,7 +1402,7 @@ static int append(void)
error++;
}
else {
- if(checkurl(url, append_list[i].out)) {
+ if(checkurl(append_list[i].in, url, append_list[i].out)) {
error++;
}
curl_free(url);
@@ -1157,7 +1435,6 @@ static int scopeid(void)
error++;
}
else {
- printf("we got %s\n", url);
curl_free(url);
}
@@ -1175,7 +1452,6 @@ static int scopeid(void)
error++;
}
else {
- printf("we got %s\n", url);
curl_free(url);
}
@@ -1193,7 +1469,6 @@ static int scopeid(void)
error++;
}
else {
- printf("we got %s\n", url);
curl_free(url);
}
@@ -1212,7 +1487,6 @@ static int scopeid(void)
error++;
}
else {
- printf("we got %s\n", url);
curl_free(url);
}
@@ -1223,7 +1497,6 @@ static int scopeid(void)
error++;
}
else {
- printf("we got %s\n", url);
curl_free(url);
}
@@ -1234,7 +1507,6 @@ static int scopeid(void)
error++;
}
else {
- printf("we got %s\n", url);
curl_free(url);
}
@@ -1252,7 +1524,6 @@ static int scopeid(void)
error++;
}
else {
- printf("we got %s\n", url);
curl_free(url);
}
@@ -1360,10 +1631,147 @@ static int clear_url(void)
return error;
}
+static char total[128000];
+static char bigpart[120000];
+
+/*
+ * verify ridiculous URL part sizes
+ */
+static int huge(void)
+{
+ const char *url = "%s://%s:%s@%s/%s?%s#%s";
+ const char *smallpart = "c";
+ int i;
+ CURLU *urlp = curl_url();
+ CURLUcode rc;
+ CURLUPart part[]= {
+ CURLUPART_SCHEME,
+ CURLUPART_USER,
+ CURLUPART_PASSWORD,
+ CURLUPART_HOST,
+ CURLUPART_PATH,
+ CURLUPART_QUERY,
+ CURLUPART_FRAGMENT
+ };
+ int error = 0;
+ if(!urlp)
+ return 1;
+ bigpart[0] = '/'; /* for the path */
+ memset(&bigpart[1], 'a', sizeof(bigpart) - 2);
+ bigpart[sizeof(bigpart) - 1] = 0;
+
+ for(i = 0; i < 7; i++) {
+ char *partp;
+ msnprintf(total, sizeof(total),
+ url,
+ (i == 0)? &bigpart[1] : smallpart,
+ (i == 1)? &bigpart[1] : smallpart,
+ (i == 2)? &bigpart[1] : smallpart,
+ (i == 3)? &bigpart[1] : smallpart,
+ (i == 4)? &bigpart[1] : smallpart,
+ (i == 5)? &bigpart[1] : smallpart,
+ (i == 6)? &bigpart[1] : smallpart);
+ rc = curl_url_set(urlp, CURLUPART_URL, total, CURLU_NON_SUPPORT_SCHEME);
+ if((!i && (rc != CURLUE_BAD_SCHEME)) ||
+ (i && rc)) {
+ printf("URL %u: failed to parse [%s]\n", i, total);
+ error++;
+ }
+
+ /* only extract if the parse worked */
+ if(!rc) {
+ curl_url_get(urlp, part[i], &partp, 0);
+ if(!partp || strcmp(partp, &bigpart[1 - (i == 4)])) {
+ printf("URL %u part %u: failure\n", i, part[i]);
+ error++;
+ }
+ curl_free(partp);
+ }
+ }
+ curl_url_cleanup(urlp);
+ return error;
+}
+
+static int urldup(void)
+{
+ const char *url[] = {
+ "http://"
+ "user:pwd@"
+ "[2a04:4e42:e00::347%25eth0]"
+ ":80"
+ "/path"
+ "?query"
+ "#fraggie",
+ "https://example.com",
+ "https://user@example.com",
+ "https://user.pwd@example.com",
+ "https://user.pwd@example.com:1234",
+ "https://example.com:1234",
+ "example.com:1234",
+ "https://user.pwd@example.com:1234/path?query#frag",
+ NULL
+ };
+ CURLU *copy = NULL;
+ char *h_str = NULL, *copy_str = NULL;
+ CURLU *h = curl_url();
+ int i;
+
+ if(!h)
+ goto err;
+
+ for(i = 0; url[i]; i++) {
+ CURLUcode rc = curl_url_set(h, CURLUPART_URL, url[i],
+ CURLU_GUESS_SCHEME);
+ if(rc)
+ goto err;
+ copy = curl_url_dup(h);
+
+ rc = curl_url_get(h, CURLUPART_URL, &h_str, 0);
+ if(rc)
+ goto err;
+
+ rc = curl_url_get(copy, CURLUPART_URL, &copy_str, 0);
+ if(rc)
+ goto err;
+
+ if(strcmp(h_str, copy_str)) {
+ printf("Original: %s\nParsed: %s\nCopy: %s\n",
+ url[i], h_str, copy_str);
+ goto err;
+ }
+ curl_free(copy_str);
+ curl_free(h_str);
+ curl_url_cleanup(copy);
+ copy_str = NULL;
+ h_str = NULL;
+ copy = NULL;
+ }
+ curl_url_cleanup(h);
+ return 0;
+err:
+ curl_free(copy_str);
+ curl_free(h_str);
+ curl_url_cleanup(copy);
+ curl_url_cleanup(h);
+ return 1;
+}
+
int test(char *URL)
{
(void)URL; /* not used */
+ if(urldup())
+ return 11;
+
+ if(setget_parts())
+ return 10;
+
+ if(get_url())
+ return 3;
+
+ if(huge())
+ return 9;
+
if(get_nothing())
return 7;
@@ -1379,9 +1787,6 @@ int test(char *URL)
if(set_parts())
return 2;
- if(get_url())
- return 3;
-
if(get_parts())
return 4;
diff --git a/tests/libtest/lib1564.c b/tests/libtest/lib1564.c
index d03ffa97d..b10d03441 100644
--- a/tests/libtest/lib1564.c
+++ b/tests/libtest/lib1564.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1565.c b/tests/libtest/lib1565.c
index f21ec0929..900395147 100644
--- a/tests/libtest/lib1565.c
+++ b/tests/libtest/lib1565.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1567.c b/tests/libtest/lib1567.c
index ecf5c9e43..26b438dd0 100644
--- a/tests/libtest/lib1567.c
+++ b/tests/libtest/lib1567.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -29,26 +29,31 @@
int test(char *URL)
{
- CURL *curl;
+ CURL *curl = NULL;
CURLcode res = CURLE_OK;
+ CURLU *u = NULL;
global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
if(curl) {
- CURLU *u = curl_url();
+ u = curl_url();
if(u) {
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
curl_url_set(u, CURLUPART_URL, URL, 0);
curl_easy_setopt(curl, CURLOPT_CURLU, u);
res = curl_easy_perform(curl);
+ if(res)
+ goto test_cleanup;
fprintf(stderr, "****************************** Do it again\n");
res = curl_easy_perform(curl);
- curl_url_cleanup(u);
}
- curl_easy_cleanup(curl);
}
+
+test_cleanup:
+ curl_url_cleanup(u);
+ curl_easy_cleanup(curl);
curl_global_cleanup();
return (int)res;
}
diff --git a/tests/libtest/lib1568.c b/tests/libtest/lib1568.c
index 7e68b5f49..78e7e6b8a 100644
--- a/tests/libtest/lib1568.c
+++ b/tests/libtest/lib1568.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2021 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -40,7 +40,7 @@ int test(char *URL)
curl_easy_setopt(hnd, CURLOPT_USERAGENT, "lib1568");
curl_easy_setopt(hnd, CURLOPT_HTTPAUTH, (long)CURLAUTH_DIGEST);
curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L);
- curl_easy_setopt(hnd, CURLOPT_PORT, (long)atoi(libtest_arg2));
+ curl_easy_setopt(hnd, CURLOPT_PORT, strtol(libtest_arg2, NULL, 10));
ret = curl_easy_perform(hnd);
diff --git a/tests/libtest/lib1569.c b/tests/libtest/lib1569.c
index b7da426eb..e24a387e3 100644
--- a/tests/libtest/lib1569.c
+++ b/tests/libtest/lib1569.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2021 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -28,21 +28,24 @@
int test(char *URL)
{
- CURLcode ret;
+ CURLcode res = CURLE_OK;
CURL *hnd;
- curl_global_init(CURL_GLOBAL_ALL);
+ global_init(CURL_GLOBAL_ALL);
- hnd = curl_easy_init();
- curl_easy_setopt(hnd, CURLOPT_URL, URL);
- curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
- curl_easy_setopt(hnd, CURLOPT_HEADER, 1L);
+ easy_init(hnd);
+ easy_setopt(hnd, CURLOPT_URL, URL);
+ easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
+ easy_setopt(hnd, CURLOPT_HEADER, 1L);
- ret = curl_easy_perform(hnd);
+ res = curl_easy_perform(hnd);
+ if(res)
+ goto test_cleanup;
curl_easy_setopt(hnd, CURLOPT_URL, libtest_arg2);
- ret = curl_easy_perform(hnd);
- curl_easy_cleanup(hnd);
+ res = curl_easy_perform(hnd);
+test_cleanup:
+ curl_easy_cleanup(hnd);
curl_global_cleanup();
- return (int)ret;
+ return (int)res;
}
diff --git a/tests/libtest/lib1591.c b/tests/libtest/lib1591.c
index 1a6f7c29f..5701e10a9 100644
--- a/tests/libtest/lib1591.c
+++ b/tests/libtest/lib1591.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -77,7 +77,7 @@ int test(char *URL)
{
CURL *curl = NULL;
CURLcode res = CURLE_FAILED_INIT;
- /* http and proxy header list*/
+ /* http and proxy header list */
struct curl_slist *hhl = NULL;
if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
@@ -101,7 +101,7 @@ int test(char *URL)
test_setopt(curl, CURLOPT_URL, URL);
test_setopt(curl, CURLOPT_HTTPHEADER, hhl);
- test_setopt(curl, CURLOPT_PUT, 1L);
+ test_setopt(curl, CURLOPT_UPLOAD, 1L);
test_setopt(curl, CURLOPT_READFUNCTION, read_callback);
test_setopt(curl, CURLOPT_TRAILERFUNCTION, trailers_callback);
test_setopt(curl, CURLOPT_TRAILERDATA, NULL);
diff --git a/tests/libtest/lib1592.c b/tests/libtest/lib1592.c
index 3e839412d..974dd256c 100644
--- a/tests/libtest/lib1592.c
+++ b/tests/libtest/lib1592.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -32,8 +32,9 @@
/* We're willing to wait a very generous two seconds for the removal. This is
as low as we can go while still easily supporting SIGALRM timing for the
non-threaded blocking resolver. It doesn't matter that much because when
- the test passes, we never wait this long. */
-#define TEST_HANG_TIMEOUT 2 * 1000
+ the test passes, we never wait this long. We set it much higher to avoid
+ issues when running on overloaded CI machines. */
+#define TEST_HANG_TIMEOUT 60 * 1000
#include "test.h"
#include "testutil.h"
diff --git a/tests/libtest/lib1593.c b/tests/libtest/lib1593.c
index 01a7e2e56..b0a91b9fd 100644
--- a/tests/libtest/lib1593.c
+++ b/tests/libtest/lib1593.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1594.c b/tests/libtest/lib1594.c
index 9411f05c1..5346c662a 100644
--- a/tests/libtest/lib1594.c
+++ b/tests/libtest/lib1594.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1597.c b/tests/libtest/lib1597.c
index cf2effaa1..44769f9cf 100644
--- a/tests/libtest/lib1597.c
+++ b/tests/libtest/lib1597.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -107,7 +107,7 @@ int test(char *URL)
printf("Tested %u strings\n", i);
res = (int)result;
- test_cleanup:
+test_cleanup:
curl_easy_cleanup(curl);
curl_global_cleanup();
diff --git a/tests/libtest/lib1662.c b/tests/libtest/lib1662.c
new file mode 100644
index 000000000..93c080033
--- /dev/null
+++ b/tests/libtest/lib1662.c
@@ -0,0 +1,90 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "test.h"
+
+static char data[]="mooaaa";
+
+struct WriteThis {
+ size_t sizeleft;
+};
+
+static size_t read_callback(char *ptr, size_t size, size_t nmemb, void *userp)
+{
+ struct WriteThis *pooh = (struct WriteThis *)userp;
+ size_t len = strlen(data);
+
+ if(size*nmemb < len)
+ return 0;
+
+ if(pooh->sizeleft) {
+ memcpy(ptr, data, strlen(data));
+ pooh->sizeleft = 0;
+ return len;
+ }
+
+ return 0; /* no more data left to deliver */
+}
+
+
+int test(char *URL)
+{
+ CURLcode res = CURLE_OK;
+ CURL *hnd;
+ curl_mime *mime1;
+ curl_mimepart *part1;
+ struct WriteThis pooh = { 1 };
+
+ mime1 = NULL;
+
+ global_init(CURL_GLOBAL_ALL);
+
+ hnd = curl_easy_init();
+ if(hnd) {
+ curl_easy_setopt(hnd, CURLOPT_BUFFERSIZE, 102400L);
+ curl_easy_setopt(hnd, CURLOPT_URL, URL);
+ curl_easy_setopt(hnd, CURLOPT_NOPROGRESS, 1L);
+ mime1 = curl_mime_init(hnd);
+ if(mime1) {
+ part1 = curl_mime_addpart(mime1);
+ curl_mime_data_cb(part1, -1, read_callback, NULL, NULL, &pooh);
+ curl_mime_filename(part1, "poetry.txt");
+ curl_mime_name(part1, "content");
+ curl_easy_setopt(hnd, CURLOPT_MIMEPOST, mime1);
+ curl_easy_setopt(hnd, CURLOPT_USERAGENT, "curl/2000");
+ curl_easy_setopt(hnd, CURLOPT_FOLLOWLOCATION, 1L);
+ curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L);
+ curl_easy_setopt(hnd, CURLOPT_HTTP_VERSION,
+ (long)CURL_HTTP_VERSION_2TLS);
+ curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
+ curl_easy_setopt(hnd, CURLOPT_FTP_SKIP_PASV_IP, 1L);
+ curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L);
+ res = curl_easy_perform(hnd);
+ }
+ }
+
+ curl_easy_cleanup(hnd);
+ curl_mime_free(mime1);
+ curl_global_cleanup();
+ return (int)res;
+}
diff --git a/tests/libtest/lib1900.c b/tests/libtest/lib1900.c
new file mode 100644
index 000000000..92f89c4c4
--- /dev/null
+++ b/tests/libtest/lib1900.c
@@ -0,0 +1,55 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "test.h"
+
+#include "testutil.h"
+#include "warnless.h"
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURLcode res = CURLE_OK;
+ CURL *hnd = NULL;
+ CURL *second = NULL;
+
+ global_init(CURL_GLOBAL_ALL);
+
+ easy_init(hnd);
+ easy_setopt(hnd, CURLOPT_URL, URL);
+ easy_setopt(hnd, CURLOPT_HSTS, "first-hsts.txt");
+ easy_setopt(hnd, CURLOPT_HSTS, "second-hsts.txt");
+
+ second = curl_easy_duphandle(hnd);
+
+ curl_easy_cleanup(hnd);
+ curl_easy_cleanup(second);
+ curl_global_cleanup();
+ return 0;
+
+test_cleanup:
+ curl_easy_cleanup(hnd);
+ curl_easy_cleanup(second);
+ curl_global_cleanup();
+ return (int)res;
+}
diff --git a/tests/libtest/lib1903.c b/tests/libtest/lib1903.c
new file mode 100644
index 000000000..3c4ae3073
--- /dev/null
+++ b/tests/libtest/lib1903.c
@@ -0,0 +1,57 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "test.h"
+
+#include "testutil.h"
+#include "timediff.h"
+#include "warnless.h"
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURLcode res = CURLE_OK;
+ CURL *ch = NULL;
+ global_init(CURL_GLOBAL_ALL);
+
+ easy_init(ch);
+
+ easy_setopt(ch, CURLOPT_URL, URL);
+ easy_setopt(ch, CURLOPT_COOKIEFILE, libtest_arg2);
+ res = curl_easy_perform(ch);
+ if(res)
+ goto test_cleanup;
+
+ curl_easy_reset(ch);
+
+ easy_setopt(ch, CURLOPT_URL, URL);
+ easy_setopt(ch, CURLOPT_COOKIEFILE, libtest_arg2);
+ easy_setopt(ch, CURLOPT_COOKIEJAR, libtest_arg3);
+ res = curl_easy_perform(ch);
+
+test_cleanup:
+ curl_easy_cleanup(ch);
+ curl_global_cleanup();
+
+ return (int)res;
+}
diff --git a/tests/libtest/lib1905.c b/tests/libtest/lib1905.c
index 162dea268..62b9c60cd 100644
--- a/tests/libtest/lib1905.c
+++ b/tests/libtest/lib1905.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2019 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -55,8 +55,8 @@ int test(char *URL)
curl_easy_setopt(ch, CURLOPT_SHARE, sh);
curl_easy_setopt(ch, CURLOPT_URL, URL);
- curl_easy_setopt(ch, CURLOPT_COOKIEFILE, "log/cookies1905");
- curl_easy_setopt(ch, CURLOPT_COOKIEJAR, "log/cookies1905");
+ curl_easy_setopt(ch, CURLOPT_COOKIEFILE, libtest_arg2);
+ curl_easy_setopt(ch, CURLOPT_COOKIEJAR, libtest_arg2);
curl_multi_add_handle(cm, ch);
@@ -90,7 +90,7 @@ int test(char *URL)
curl_easy_setopt(ch, CURLOPT_SHARE, NULL);
curl_multi_remove_handle(cm, ch);
- cleanup:
+cleanup:
curl_easy_cleanup(ch);
curl_share_cleanup(sh);
curl_multi_cleanup(cm);
diff --git a/tests/libtest/lib1906.c b/tests/libtest/lib1906.c
index 3e237e2d4..b60587f8f 100644
--- a/tests/libtest/lib1906.c
+++ b/tests/libtest/lib1906.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2019 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -29,46 +29,57 @@
int test(char *URL)
{
- char *url_after;
+ CURLcode res = CURLE_OK;
+ char *url_after = NULL;
CURLU *curlu = curl_url();
- CURL *curl = curl_easy_init();
- CURLcode curl_code;
char error_buffer[CURL_ERROR_SIZE] = "";
+ CURL *curl;
+
+ easy_init(curl);
curl_url_set(curlu, CURLUPART_URL, URL, CURLU_DEFAULT_SCHEME);
- curl_easy_setopt(curl, CURLOPT_CURLU, curlu);
- curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, error_buffer);
- curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+ easy_setopt(curl, CURLOPT_CURLU, curlu);
+ easy_setopt(curl, CURLOPT_ERRORBUFFER, error_buffer);
+ easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+ /* msys2 times out instead of CURLE_COULDNT_CONNECT, so make it faster */
+ easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, 5000L);
/* set a port number that makes this request fail */
- curl_easy_setopt(curl, CURLOPT_PORT, 1L);
- curl_code = curl_easy_perform(curl);
- if(!curl_code)
+ easy_setopt(curl, CURLOPT_PORT, 1L);
+ res = curl_easy_perform(curl);
+ if(res != CURLE_COULDNT_CONNECT && res != CURLE_OPERATION_TIMEDOUT) {
fprintf(stderr, "failure expected, "
- "curl_easy_perform returned %ld: <%s>, <%s>\n",
- (long) curl_code, curl_easy_strerror(curl_code), error_buffer);
+ "curl_easy_perform returned %d: <%s>, <%s>\n",
+ (int) res, curl_easy_strerror(res), error_buffer);
+ if(res == CURLE_OK)
+ res = TEST_ERR_MAJOR_BAD; /* force an error return */
+ goto test_cleanup;
+ }
+ res = CURLE_OK; /* reset for next use */
/* print the used url */
curl_url_get(curlu, CURLUPART_URL, &url_after, 0);
fprintf(stderr, "curlu now: <%s>\n", url_after);
curl_free(url_after);
+ url_after = NULL;
/* now reset CURLOP_PORT to go back to originally set port number */
- curl_easy_setopt(curl, CURLOPT_PORT, 0L);
+ easy_setopt(curl, CURLOPT_PORT, 0L);
- curl_code = curl_easy_perform(curl);
- if(curl_code)
+ res = curl_easy_perform(curl);
+ if(res)
fprintf(stderr, "success expected, "
"curl_easy_perform returned %ld: <%s>, <%s>\n",
- (long) curl_code, curl_easy_strerror(curl_code), error_buffer);
+ (long) res, curl_easy_strerror(res), error_buffer);
/* print url */
curl_url_get(curlu, CURLUPART_URL, &url_after, 0);
fprintf(stderr, "curlu now: <%s>\n", url_after);
- curl_free(url_after);
+test_cleanup:
+ curl_free(url_after);
curl_easy_cleanup(curl);
curl_url_cleanup(curlu);
curl_global_cleanup();
- return 0;
+ return (int)res;
}
diff --git a/tests/libtest/lib1907.c b/tests/libtest/lib1907.c
index f0d035a95..41cea379e 100644
--- a/tests/libtest/lib1907.c
+++ b/tests/libtest/lib1907.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2019 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -31,7 +31,7 @@ int test(char *URL)
{
char *url_after;
CURL *curl;
- CURLcode curl_code;
+ CURLcode res = CURLE_OK;
char error_buffer[CURL_ERROR_SIZE] = "";
curl_global_init(CURL_GLOBAL_DEFAULT);
@@ -39,11 +39,11 @@ int test(char *URL)
curl_easy_setopt(curl, CURLOPT_URL, URL);
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, error_buffer);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
- curl_code = curl_easy_perform(curl);
- if(!curl_code)
+ res = curl_easy_perform(curl);
+ if(!res)
fprintf(stderr, "failure expected, "
"curl_easy_perform returned %ld: <%s>, <%s>\n",
- (long) curl_code, curl_easy_strerror(curl_code), error_buffer);
+ (long) res, curl_easy_strerror(res), error_buffer);
/* print the used url */
if(!curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &url_after))
@@ -52,5 +52,5 @@ int test(char *URL)
curl_easy_cleanup(curl);
curl_global_cleanup();
- return 0;
+ return (int)res;
}
diff --git a/tests/libtest/lib1908.c b/tests/libtest/lib1908.c
index 17d0e3f6a..ff92dafb4 100644
--- a/tests/libtest/lib1908.c
+++ b/tests/libtest/lib1908.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2013 - 2022, Linus Nielsen Feltzing, <linus@haxx.se>
+ * Copyright (C) Linus Nielsen Feltzing, <linus@haxx.se>
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -39,7 +39,7 @@ int test(char *URL)
if(hnd) {
curl_easy_setopt(hnd, CURLOPT_URL, URL);
curl_easy_setopt(hnd, CURLOPT_NOPROGRESS, 1L);
- curl_easy_setopt(hnd, CURLOPT_ALTSVC, "log/altsvc-1908");
+ curl_easy_setopt(hnd, CURLOPT_ALTSVC, libtest_arg2);
ret = curl_easy_perform(hnd);
if(!ret) {
diff --git a/tests/libtest/lib1910.c b/tests/libtest/lib1910.c
index 8bb319d96..fed1ca22b 100644
--- a/tests/libtest/lib1910.c
+++ b/tests/libtest/lib1910.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2013 - 2022, Linus Nielsen Feltzing, <linus@haxx.se>
+ * Copyright (C) Linus Nielsen Feltzing, <linus@haxx.se>
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1911.c b/tests/libtest/lib1911.c
index a346bb0f7..b7c50fc5e 100644
--- a/tests/libtest/lib1911.c
+++ b/tests/libtest/lib1911.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -61,16 +61,18 @@ int test(char *URL)
/*
* Whitelist string options that are safe for abuse
*/
- switch(o->id) {
- case CURLOPT_PROXY_TLSAUTH_TYPE:
- case CURLOPT_TLSAUTH_TYPE:
- case CURLOPT_RANDOM_FILE:
- case CURLOPT_EGDSOCKET:
- continue;
- default:
- /* check this */
- break;
- }
+ CURL_IGNORE_DEPRECATION(
+ switch(o->id) {
+ case CURLOPT_PROXY_TLSAUTH_TYPE:
+ case CURLOPT_TLSAUTH_TYPE:
+ case CURLOPT_RANDOM_FILE:
+ case CURLOPT_EGDSOCKET:
+ continue;
+ default:
+ /* check this */
+ break;
+ }
+ )
/* This is a string. Make sure that passing in a string longer
CURL_MAX_INPUT_LENGTH returns an error */
diff --git a/tests/libtest/lib1912.c b/tests/libtest/lib1912.c
index d42f80fe3..13f25bc99 100644
--- a/tests/libtest/lib1912.c
+++ b/tests/libtest/lib1912.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -39,42 +39,44 @@ int test(char *URL)
for(o = curl_easy_option_next(NULL);
o;
o = curl_easy_option_next(o)) {
- /* Test for mismatch OR missing typecheck macros */
- if(curlcheck_long_option(o->id) !=
- (o->type == CURLOT_LONG || o->type == CURLOT_VALUES)) {
- print_err(o->name, "CURLOT_LONG or CURLOT_VALUES");
- error++;
- }
- if(curlcheck_off_t_option(o->id) != (o->type == CURLOT_OFF_T)) {
- print_err(o->name, "CURLOT_OFF_T");
- error++;
- }
- if(curlcheck_string_option(o->id) != (o->type == CURLOT_STRING)) {
- print_err(o->name, "CURLOT_STRING");
- error++;
- }
- if(curlcheck_slist_option(o->id) != (o->type == CURLOT_SLIST)) {
- print_err(o->name, "CURLOT_SLIST");
- error++;
- }
- if(curlcheck_cb_data_option(o->id) != (o->type == CURLOT_CBPTR)) {
- print_err(o->name, "CURLOT_CBPTR");
- error++;
- }
- /* From here: only test that the type matches if macro is known */
- if(curlcheck_write_cb_option(o->id) && (o->type != CURLOT_FUNCTION)) {
- print_err(o->name, "CURLOT_FUNCTION");
- error++;
- }
- if(curlcheck_conv_cb_option(o->id) && (o->type != CURLOT_FUNCTION)) {
- print_err(o->name, "CURLOT_FUNCTION");
- error++;
- }
- if(curlcheck_postfields_option(o->id) && (o->type != CURLOT_OBJECT)) {
- print_err(o->name, "CURLOT_OBJECT");
- error++;
- }
- /* Todo: no gcc typecheck for CURLOPTTYPE_BLOB types? */
+ CURL_IGNORE_DEPRECATION(
+ /* Test for mismatch OR missing typecheck macros */
+ if(curlcheck_long_option(o->id) !=
+ (o->type == CURLOT_LONG || o->type == CURLOT_VALUES)) {
+ print_err(o->name, "CURLOT_LONG or CURLOT_VALUES");
+ error++;
+ }
+ if(curlcheck_off_t_option(o->id) != (o->type == CURLOT_OFF_T)) {
+ print_err(o->name, "CURLOT_OFF_T");
+ error++;
+ }
+ if(curlcheck_string_option(o->id) != (o->type == CURLOT_STRING)) {
+ print_err(o->name, "CURLOT_STRING");
+ error++;
+ }
+ if(curlcheck_slist_option(o->id) != (o->type == CURLOT_SLIST)) {
+ print_err(o->name, "CURLOT_SLIST");
+ error++;
+ }
+ if(curlcheck_cb_data_option(o->id) != (o->type == CURLOT_CBPTR)) {
+ print_err(o->name, "CURLOT_CBPTR");
+ error++;
+ }
+ /* From here: only test that the type matches if macro is known */
+ if(curlcheck_write_cb_option(o->id) && (o->type != CURLOT_FUNCTION)) {
+ print_err(o->name, "CURLOT_FUNCTION");
+ error++;
+ }
+ if(curlcheck_conv_cb_option(o->id) && (o->type != CURLOT_FUNCTION)) {
+ print_err(o->name, "CURLOT_FUNCTION");
+ error++;
+ }
+ if(curlcheck_postfields_option(o->id) && (o->type != CURLOT_OBJECT)) {
+ print_err(o->name, "CURLOT_OBJECT");
+ error++;
+ }
+ /* Todo: no gcc typecheck for CURLOPTTYPE_BLOB types? */
+ )
}
#endif
(void)URL;
diff --git a/tests/libtest/lib1913.c b/tests/libtest/lib1913.c
index 3662f9835..a28386368 100644
--- a/tests/libtest/lib1913.c
+++ b/tests/libtest/lib1913.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2020 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1915.c b/tests/libtest/lib1915.c
index 5e5aace13..0672c70d6 100644
--- a/tests/libtest/lib1915.c
+++ b/tests/libtest/lib1915.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2020 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -33,10 +33,15 @@ struct entry {
};
static const struct entry preload_hosts[] = {
- /* curl turns 39 that day just before 31-bit time_t overflow */
+#if (SIZEOF_TIME_T < 5)
{ "1.example.com", "20370320 01:02:03" },
{ "2.example.com", "20370320 03:02:01" },
{ "3.example.com", "20370319 01:02:03" },
+#else
+ { "1.example.com", "25250320 01:02:03" },
+ { "2.example.com", "25250320 03:02:01" },
+ { "3.example.com", "25250319 01:02:03" },
+#endif
{ "4.example.com", "" },
{ NULL, NULL } /* end of list marker */
};
@@ -93,36 +98,39 @@ static CURLSTScode hstswrite(CURL *easy, struct curl_hstsentry *e,
int test(char *URL)
{
- CURLcode ret = CURLE_OK;
+ CURLcode res = CURLE_OK;
CURL *hnd;
struct state st = {0};
- curl_global_init(CURL_GLOBAL_ALL);
+ global_init(CURL_GLOBAL_ALL);
- hnd = curl_easy_init();
- if(hnd) {
- curl_easy_setopt(hnd, CURLOPT_URL, URL);
- curl_easy_setopt(hnd, CURLOPT_HSTSREADFUNCTION, hstsread);
- curl_easy_setopt(hnd, CURLOPT_HSTSREADDATA, &st);
- curl_easy_setopt(hnd, CURLOPT_HSTSWRITEFUNCTION, hstswrite);
- curl_easy_setopt(hnd, CURLOPT_HSTSWRITEDATA, &st);
- curl_easy_setopt(hnd, CURLOPT_HSTS_CTRL, CURLHSTS_ENABLE);
- ret = curl_easy_perform(hnd);
- curl_easy_cleanup(hnd);
- printf("First request returned %d\n", (int)ret);
- }
- hnd = curl_easy_init();
- if(hnd) {
- curl_easy_setopt(hnd, CURLOPT_URL, URL);
- curl_easy_setopt(hnd, CURLOPT_HSTSREADFUNCTION, hstsreadfail);
- curl_easy_setopt(hnd, CURLOPT_HSTSREADDATA, &st);
- curl_easy_setopt(hnd, CURLOPT_HSTSWRITEFUNCTION, hstswrite);
- curl_easy_setopt(hnd, CURLOPT_HSTSWRITEDATA, &st);
- curl_easy_setopt(hnd, CURLOPT_HSTS_CTRL, CURLHSTS_ENABLE);
- ret = curl_easy_perform(hnd);
- curl_easy_cleanup(hnd);
- printf("Second request returned %d\n", (int)ret);
- }
+ easy_init(hnd);
+ easy_setopt(hnd, CURLOPT_URL, URL);
+ easy_setopt(hnd, CURLOPT_HSTSREADFUNCTION, hstsread);
+ easy_setopt(hnd, CURLOPT_HSTSREADDATA, &st);
+ easy_setopt(hnd, CURLOPT_HSTSWRITEFUNCTION, hstswrite);
+ easy_setopt(hnd, CURLOPT_HSTSWRITEDATA, &st);
+ easy_setopt(hnd, CURLOPT_HSTS_CTRL, CURLHSTS_ENABLE);
+ res = curl_easy_perform(hnd);
+ curl_easy_cleanup(hnd);
+ hnd = NULL;
+ printf("First request returned %d\n", (int)res);
+ res = CURLE_OK;
+
+ easy_init(hnd);
+ easy_setopt(hnd, CURLOPT_URL, URL);
+ easy_setopt(hnd, CURLOPT_HSTSREADFUNCTION, hstsreadfail);
+ easy_setopt(hnd, CURLOPT_HSTSREADDATA, &st);
+ easy_setopt(hnd, CURLOPT_HSTSWRITEFUNCTION, hstswrite);
+ easy_setopt(hnd, CURLOPT_HSTSWRITEDATA, &st);
+ easy_setopt(hnd, CURLOPT_HSTS_CTRL, CURLHSTS_ENABLE);
+ res = curl_easy_perform(hnd);
+ curl_easy_cleanup(hnd);
+ hnd = NULL;
+ printf("Second request returned %d\n", (int)res);
+
+test_cleanup:
+ curl_easy_cleanup(hnd);
curl_global_cleanup();
- return (int)ret;
+ return (int)res;
}
diff --git a/tests/libtest/lib1916.c b/tests/libtest/lib1916.c
index 7a251bf12..b97263c2e 100644
--- a/tests/libtest/lib1916.c
+++ b/tests/libtest/lib1916.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2020 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1918.c b/tests/libtest/lib1918.c
index 209eef58f..34c360889 100644
--- a/tests/libtest/lib1918.c
+++ b/tests/libtest/lib1918.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1919.c b/tests/libtest/lib1919.c
index fce4cb03b..37457c068 100644
--- a/tests/libtest/lib1919.c
+++ b/tests/libtest/lib1919.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -29,25 +29,28 @@
int test(char *URL)
{
+ CURLcode res = CURLE_OK;
CURL *curl;
- curl_global_init(CURL_GLOBAL_ALL);
+ int i;
- curl = curl_easy_init();
- if(curl) {
- int i;
- curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_BEARER);
- curl_easy_setopt(curl, CURLOPT_XOAUTH2_BEARER,
- "c4e448d652a961fda0ab64f882c8c161d5985f805d45d80c9ddca1");
- curl_easy_setopt(curl, CURLOPT_SASL_AUTHZID,
- "c4e448d652a961fda0ab64f882c8c161d5985f805d45d80c9ddca2");
- curl_easy_setopt(curl, CURLOPT_URL, URL);
+ global_init(CURL_GLOBAL_ALL);
+ easy_init(curl);
+ easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_BEARER);
+ easy_setopt(curl, CURLOPT_XOAUTH2_BEARER,
+ "c4e448d652a961fda0ab64f882c8c161d5985f805d45d80c9ddca1");
+ easy_setopt(curl, CURLOPT_SASL_AUTHZID,
+ "c4e448d652a961fda0ab64f882c8c161d5985f805d45d80c9ddca2");
+ easy_setopt(curl, CURLOPT_URL, URL);
- for(i = 0; i < 2; i++)
- /* the second request needs to do connection reuse */
- curl_easy_perform(curl);
-
- curl_easy_cleanup(curl);
+ for(i = 0; i < 2; i++) {
+ /* the second request needs to do connection reuse */
+ res = curl_easy_perform(curl);
+ if(res)
+ goto test_cleanup;
}
+
+test_cleanup:
+ curl_easy_cleanup(curl);
curl_global_cleanup();
- return 0;
+ return (int)res;
}
diff --git a/tests/libtest/lib1933.c b/tests/libtest/lib1933.c
index 39459d001..cc3af078f 100644
--- a/tests/libtest/lib1933.c
+++ b/tests/libtest/lib1933.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1934.c b/tests/libtest/lib1934.c
index 917f6e681..36fc8f703 100644
--- a/tests/libtest/lib1934.c
+++ b/tests/libtest/lib1934.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1935.c b/tests/libtest/lib1935.c
index 459ead393..ee52d4415 100644
--- a/tests/libtest/lib1935.c
+++ b/tests/libtest/lib1935.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1936.c b/tests/libtest/lib1936.c
index e522e3817..b86eee7bd 100644
--- a/tests/libtest/lib1936.c
+++ b/tests/libtest/lib1936.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1937.c b/tests/libtest/lib1937.c
index 14b968743..74249666e 100644
--- a/tests/libtest/lib1937.c
+++ b/tests/libtest/lib1937.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1938.c b/tests/libtest/lib1938.c
index 79dc6cc0e..4b5218bdb 100644
--- a/tests/libtest/lib1938.c
+++ b/tests/libtest/lib1938.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1939.c b/tests/libtest/lib1939.c
index 1c88f68a8..4adc87669 100644
--- a/tests/libtest/lib1939.c
+++ b/tests/libtest/lib1939.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib1940.c b/tests/libtest/lib1940.c
index c2c91b541..8bc094362 100644
--- a/tests/libtest/lib1940.c
+++ b/tests/libtest/lib1940.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -83,37 +83,36 @@ static size_t write_cb(char *data, size_t n, size_t l, void *userp)
}
int test(char *URL)
{
- CURL *easy;
+ CURL *easy = NULL;
+ CURLcode res = CURLE_OK;
- curl_global_init(CURL_GLOBAL_DEFAULT);
+ global_init(CURL_GLOBAL_DEFAULT);
+ easy_init(easy);
+ easy_setopt(easy, CURLOPT_URL, URL);
+ easy_setopt(easy, CURLOPT_VERBOSE, 1L);
+ easy_setopt(easy, CURLOPT_FOLLOWLOCATION, 1L);
+ /* ignores any content */
+ easy_setopt(easy, CURLOPT_WRITEFUNCTION, write_cb);
- easy = curl_easy_init();
- if(easy) {
- CURLcode res;
- curl_easy_setopt(easy, CURLOPT_URL, URL);
- curl_easy_setopt(easy, CURLOPT_VERBOSE, 1L);
- curl_easy_setopt(easy, CURLOPT_FOLLOWLOCATION, 1L);
- /* ignores any content */
- curl_easy_setopt(easy, CURLOPT_WRITEFUNCTION, write_cb);
+ /* if there's a proxy set, use it */
+ if(libtest_arg2 && *libtest_arg2) {
+ easy_setopt(easy, CURLOPT_PROXY, libtest_arg2);
+ easy_setopt(easy, CURLOPT_HTTPPROXYTUNNEL, 1L);
+ }
+ res = curl_easy_perform(easy);
+ if(res)
+ goto test_cleanup;
- /* if there's a proxy set, use it */
- if(libtest_arg2 && *libtest_arg2) {
- curl_easy_setopt(easy, CURLOPT_PROXY, libtest_arg2);
- curl_easy_setopt(easy, CURLOPT_HTTPPROXYTUNNEL, 1L);
- }
- res = curl_easy_perform(easy);
- if(res) {
- printf("badness: %d\n", (int)res);
- }
- showem(easy, CURLH_HEADER);
- if(libtest_arg2 && *libtest_arg2) {
- /* now show connect headers only */
- showem(easy, CURLH_CONNECT);
- }
- showem(easy, CURLH_1XX);
- showem(easy, CURLH_TRAILER);
- curl_easy_cleanup(easy);
+ showem(easy, CURLH_HEADER);
+ if(libtest_arg2 && *libtest_arg2) {
+ /* now show connect headers only */
+ showem(easy, CURLH_CONNECT);
}
+ showem(easy, CURLH_1XX);
+ showem(easy, CURLH_TRAILER);
+
+test_cleanup:
+ curl_easy_cleanup(easy);
curl_global_cleanup();
- return 0;
+ return (int)res;
}
diff --git a/tests/libtest/lib1945.c b/tests/libtest/lib1945.c
index fad99bae4..2483402f4 100644
--- a/tests/libtest/lib1945.c
+++ b/tests/libtest/lib1945.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -52,30 +52,30 @@ static size_t write_cb(char *data, size_t n, size_t l, void *userp)
int test(char *URL)
{
CURL *easy;
+ CURLcode res = CURLE_OK;
- curl_global_init(CURL_GLOBAL_DEFAULT);
+ global_init(CURL_GLOBAL_DEFAULT);
- easy = curl_easy_init();
- if(easy) {
- CURLcode res;
- curl_easy_setopt(easy, CURLOPT_URL, URL);
- curl_easy_setopt(easy, CURLOPT_VERBOSE, 1L);
- curl_easy_setopt(easy, CURLOPT_FOLLOWLOCATION, 1L);
- /* ignores any content */
- curl_easy_setopt(easy, CURLOPT_WRITEFUNCTION, write_cb);
+ easy_init(easy);
+ curl_easy_setopt(easy, CURLOPT_URL, URL);
+ curl_easy_setopt(easy, CURLOPT_VERBOSE, 1L);
+ curl_easy_setopt(easy, CURLOPT_FOLLOWLOCATION, 1L);
+ /* ignores any content */
+ curl_easy_setopt(easy, CURLOPT_WRITEFUNCTION, write_cb);
- /* if there's a proxy set, use it */
- if(libtest_arg2 && *libtest_arg2) {
- curl_easy_setopt(easy, CURLOPT_PROXY, libtest_arg2);
- curl_easy_setopt(easy, CURLOPT_HTTPPROXYTUNNEL, 1L);
- }
- res = curl_easy_perform(easy);
- if(res) {
- printf("badness: %d\n", (int)res);
- }
- showem(easy, CURLH_CONNECT|CURLH_HEADER|CURLH_TRAILER|CURLH_1XX);
- curl_easy_cleanup(easy);
+ /* if there's a proxy set, use it */
+ if(libtest_arg2 && *libtest_arg2) {
+ curl_easy_setopt(easy, CURLOPT_PROXY, libtest_arg2);
+ curl_easy_setopt(easy, CURLOPT_HTTPPROXYTUNNEL, 1L);
}
+ res = curl_easy_perform(easy);
+ if(res) {
+ printf("badness: %d\n", (int)res);
+ }
+ showem(easy, CURLH_CONNECT|CURLH_HEADER|CURLH_TRAILER|CURLH_1XX);
+
+test_cleanup:
+ curl_easy_cleanup(easy);
curl_global_cleanup();
- return 0;
+ return (int)res;
}
diff --git a/tests/libtest/lib1947.c b/tests/libtest/lib1947.c
index f7bd91fb3..b7a013127 100644
--- a/tests/libtest/lib1947.c
+++ b/tests/libtest/lib1947.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -36,54 +36,57 @@ static size_t writecb(char *data, size_t n, size_t l, void *userp)
int test(char *URL)
{
CURL *curl;
- CURLcode res;
+ CURLcode res = CURLE_OK;
+ struct curl_header *h;
+ int count = 0;
+ int origins;
- curl_global_init(CURL_GLOBAL_DEFAULT);
+ global_init(CURL_GLOBAL_DEFAULT);
- curl = curl_easy_init();
- if(curl) {
- struct curl_header *h;
- int count = 0;
- int origins;
+ easy_init(curl);
- /* perform a request that involves redirection */
- curl_easy_setopt(curl, CURLOPT_URL, URL);
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writecb);
- curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
- res = curl_easy_perform(curl);
- if(res)
- fprintf(stderr, "curl_easy_perform() failed: %s\n",
- curl_easy_strerror(res));
-
- /* count the number of requests by reading the first header of each
- request. */
- origins = (CURLH_HEADER|CURLH_TRAILER|CURLH_CONNECT|
- CURLH_1XX|CURLH_PSEUDO);
- do {
- h = curl_easy_nextheader(curl, origins, count, NULL);
- if(h)
- count++;
- } while(h);
- printf("count = %u\n", count);
+ /* perform a request that involves redirection */
+ easy_setopt(curl, CURLOPT_URL, URL);
+ easy_setopt(curl, CURLOPT_WRITEFUNCTION, writecb);
+ easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
+ res = curl_easy_perform(curl);
+ if(res) {
+ fprintf(stderr, "curl_easy_perform() failed: %s\n",
+ curl_easy_strerror(res));
+ goto test_cleanup;
+ }
- /* perform another request - without redirect */
- curl_easy_setopt(curl, CURLOPT_URL, libtest_arg2);
- res = curl_easy_perform(curl);
- if(res)
- fprintf(stderr, "curl_easy_perform() failed: %s\n",
- curl_easy_strerror(res));
+ /* count the number of requests by reading the first header of each
+ request. */
+ origins = (CURLH_HEADER|CURLH_TRAILER|CURLH_CONNECT|
+ CURLH_1XX|CURLH_PSEUDO);
+ do {
+ h = curl_easy_nextheader(curl, origins, count, NULL);
+ if(h)
+ count++;
+ } while(h);
+ printf("count = %u\n", count);
- /* count the number of requests again. */
- count = 0;
- do {
- h = curl_easy_nextheader(curl, origins, count, NULL);
- if(h)
- count++;
- } while(h);
- printf("count = %u\n", count);
- curl_easy_cleanup(curl);
+ /* perform another request - without redirect */
+ easy_setopt(curl, CURLOPT_URL, libtest_arg2);
+ res = curl_easy_perform(curl);
+ if(res) {
+ fprintf(stderr, "curl_easy_perform() failed: %s\n",
+ curl_easy_strerror(res));
+ goto test_cleanup;
}
+ /* count the number of requests again. */
+ count = 0;
+ do {
+ h = curl_easy_nextheader(curl, origins, count, NULL);
+ if(h)
+ count++;
+ } while(h);
+ printf("count = %u\n", count);
+
+test_cleanup:
+ curl_easy_cleanup(curl);
curl_global_cleanup();
- return 0;
+ return (int)res;
}
diff --git a/tests/libtest/lib1948.c b/tests/libtest/lib1948.c
index 7c891a2ca..a30244c27 100644
--- a/tests/libtest/lib1948.c
+++ b/tests/libtest/lib1948.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -44,36 +44,35 @@ static size_t put_callback(char *ptr, size_t size, size_t nmemb, void *stream)
int test(char *URL)
{
CURL *curl;
- CURLcode res = CURLE_OUT_OF_MEMORY;
+ CURLcode res = CURLE_OK;
+ const char *testput = "This is test PUT data\n";
+ put_buffer pbuf;
curl_global_init(CURL_GLOBAL_DEFAULT);
- curl = curl_easy_init();
- if(curl) {
- const char *testput = "This is test PUT data\n";
- put_buffer pbuf;
+ easy_init(curl);
- /* PUT */
- curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
- curl_easy_setopt(curl, CURLOPT_HEADER, 1L);
- curl_easy_setopt(curl, CURLOPT_READFUNCTION, put_callback);
- pbuf.buf = (char *)testput;
- pbuf.len = strlen(testput);
- curl_easy_setopt(curl, CURLOPT_READDATA, &pbuf);
- curl_easy_setopt(curl, CURLOPT_INFILESIZE, (long)strlen(testput));
- res = curl_easy_setopt(curl, CURLOPT_URL, URL);
- if(!res)
- res = curl_easy_perform(curl);
- if(!res) {
- /* POST */
- curl_easy_setopt(curl, CURLOPT_POST, 1L);
- curl_easy_setopt(curl, CURLOPT_POSTFIELDS, testput);
- curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)strlen(testput));
- res = curl_easy_perform(curl);
- }
- curl_easy_cleanup(curl);
- }
+ /* PUT */
+ easy_setopt(curl, CURLOPT_UPLOAD, 1L);
+ easy_setopt(curl, CURLOPT_HEADER, 1L);
+ easy_setopt(curl, CURLOPT_READFUNCTION, put_callback);
+ pbuf.buf = (char *)testput;
+ pbuf.len = strlen(testput);
+ easy_setopt(curl, CURLOPT_READDATA, &pbuf);
+ easy_setopt(curl, CURLOPT_INFILESIZE, (long)strlen(testput));
+ easy_setopt(curl, CURLOPT_URL, URL);
+ res = curl_easy_perform(curl);
+ if(res)
+ goto test_cleanup;
+ /* POST */
+ easy_setopt(curl, CURLOPT_POST, 1L);
+ easy_setopt(curl, CURLOPT_POSTFIELDS, testput);
+ easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)strlen(testput));
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+ curl_easy_cleanup(curl);
curl_global_cleanup();
return (int)res;
}
diff --git a/tests/libtest/lib1955.c b/tests/libtest/lib1955.c
index 053c3e1ae..3328d7ef1 100644
--- a/tests/libtest/lib1955.c
+++ b/tests/libtest/lib1955.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -49,7 +49,7 @@ int test(char *URL)
test_setopt(curl, CURLOPT_USERPWD, "xxx");
test_setopt(curl, CURLOPT_HEADER, 0L);
test_setopt(curl, CURLOPT_URL, URL);
- list = curl_slist_append(list, "test2: 1234");
+ list = curl_slist_append(list, "test3: 1234");
if(!list)
goto test_cleanup;
if(libtest_arg2) {
@@ -57,8 +57,22 @@ int test(char *URL)
}
test_setopt(curl, CURLOPT_CONNECT_TO, connect_to);
curl_slist_append(list, "Content-Type: application/json");
+
+ /* 'name;' user headers with no value are used to send an empty header in the
+ format 'name:' (note the semi-colon becomes a colon). this entry should
+ show in SignedHeaders without an additional semi-colon, as any other
+ header would. eg 'foo;test2;test3' and not 'foo;test2;;test3'. */
+ curl_slist_append(list, "test2;");
+
+ /* 'name:' user headers with no value are used to signal an internal header
+ of that name should be removed and are not sent as a header. this entry
+ should not show in SignedHeaders. */
curl_slist_append(list, "test1:");
+
+ /* 'name' user headers with no separator or value are invalid and ignored.
+ this entry should not show in SignedHeaders. */
curl_slist_append(list, "test0");
+
curl_slist_append(list, "test_space: t\ts m\t end ");
curl_slist_append(list, "tesMixCase: MixCase");
test_setopt(curl, CURLOPT_HTTPHEADER, list);
diff --git a/tests/libtest/lib1956.c b/tests/libtest/lib1956.c
new file mode 100644
index 000000000..105418dc8
--- /dev/null
+++ b/tests/libtest/lib1956.c
@@ -0,0 +1,73 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at https://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * SPDX-License-Identifier: curl
+ *
+ ***************************************************************************/
+#include "test.h"
+
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res = TEST_ERR_MAJOR_BAD;
+ struct curl_slist *list = NULL;
+ struct curl_slist *connect_to = NULL;
+
+ if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ curl = curl_easy_init();
+ if(!curl) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+ test_setopt(curl, CURLOPT_AWS_SIGV4, "xxx");
+ test_setopt(curl, CURLOPT_USERPWD, "xxx");
+ test_setopt(curl, CURLOPT_HEADER, 0L);
+ test_setopt(curl, CURLOPT_URL, URL);
+ list = curl_slist_append(list, "Content-Type: application/json");
+ if(!list)
+ goto test_cleanup;
+ if(libtest_arg2) {
+ connect_to = curl_slist_append(connect_to, libtest_arg2);
+ }
+ test_setopt(curl, CURLOPT_CONNECT_TO, connect_to);
+ curl_slist_append(list, "X-Xxx-Content-Sha256: "
+ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");
+ test_setopt(curl, CURLOPT_HTTPHEADER, list);
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ curl_slist_free_all(connect_to);
+ curl_slist_free_all(list);
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib1957.c b/tests/libtest/lib1957.c
new file mode 100644
index 000000000..8397d9d24
--- /dev/null
+++ b/tests/libtest/lib1957.c
@@ -0,0 +1,72 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at https://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * SPDX-License-Identifier: curl
+ *
+ ***************************************************************************/
+#include "test.h"
+
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res = TEST_ERR_MAJOR_BAD;
+ struct curl_slist *list = NULL;
+ struct curl_slist *connect_to = NULL;
+
+ if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ curl = curl_easy_init();
+ if(!curl) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+ test_setopt(curl, CURLOPT_AWS_SIGV4, "xxx");
+ test_setopt(curl, CURLOPT_USERPWD, "xxx");
+ test_setopt(curl, CURLOPT_HEADER, 0L);
+ test_setopt(curl, CURLOPT_URL, URL);
+ list = curl_slist_append(list, "Content-Type: application/json");
+ if(!list)
+ goto test_cleanup;
+ if(libtest_arg2) {
+ connect_to = curl_slist_append(connect_to, libtest_arg2);
+ }
+ test_setopt(curl, CURLOPT_CONNECT_TO, connect_to);
+ curl_slist_append(list, "X-Xxx-Content-Sha256: arbitrary");
+ test_setopt(curl, CURLOPT_HTTPHEADER, list);
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ curl_slist_free_all(connect_to);
+ curl_slist_free_all(list);
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib1958.c b/tests/libtest/lib1958.c
new file mode 100644
index 000000000..66b8d5dfd
--- /dev/null
+++ b/tests/libtest/lib1958.c
@@ -0,0 +1,72 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at https://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * SPDX-License-Identifier: curl
+ *
+ ***************************************************************************/
+#include "test.h"
+
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res = TEST_ERR_MAJOR_BAD;
+ struct curl_slist *list = NULL;
+ struct curl_slist *connect_to = NULL;
+
+ if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ curl = curl_easy_init();
+ if(!curl) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+ test_setopt(curl, CURLOPT_AWS_SIGV4, "xxx");
+ test_setopt(curl, CURLOPT_USERPWD, "xxx");
+ test_setopt(curl, CURLOPT_HEADER, 0L);
+ test_setopt(curl, CURLOPT_URL, URL);
+ list = curl_slist_append(list, "Content-Type: application/json");
+ if(!list)
+ goto test_cleanup;
+ if(libtest_arg2) {
+ connect_to = curl_slist_append(connect_to, libtest_arg2);
+ }
+ test_setopt(curl, CURLOPT_CONNECT_TO, connect_to);
+ curl_slist_append(list, "X-Xxx-Content-Sha256: \tarbitrary ");
+ test_setopt(curl, CURLOPT_HTTPHEADER, list);
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ curl_slist_free_all(connect_to);
+ curl_slist_free_all(list);
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib1959.c b/tests/libtest/lib1959.c
new file mode 100644
index 000000000..5eee4f012
--- /dev/null
+++ b/tests/libtest/lib1959.c
@@ -0,0 +1,74 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at https://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * SPDX-License-Identifier: curl
+ *
+ ***************************************************************************/
+#include "test.h"
+
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res = TEST_ERR_MAJOR_BAD;
+ struct curl_slist *list = NULL;
+ struct curl_slist *connect_to = NULL;
+
+ if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ curl = curl_easy_init();
+ if(!curl) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+ test_setopt(curl, CURLOPT_AWS_SIGV4, "xxx");
+ test_setopt(curl, CURLOPT_USERPWD, "xxx");
+ test_setopt(curl, CURLOPT_HEADER, 0L);
+ test_setopt(curl, CURLOPT_URL, URL);
+ list = curl_slist_append(list, "Content-Type: application/json");
+ if(!list)
+ goto test_cleanup;
+ if(libtest_arg2) {
+ connect_to = curl_slist_append(connect_to, libtest_arg2);
+ }
+ test_setopt(curl, CURLOPT_CONNECT_TO, connect_to);
+ curl_slist_append(list, "X-Xxx-Content-Sha256: "
+ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");
+ test_setopt(curl, CURLOPT_HTTPHEADER, list);
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ curl_slist_free_all(connect_to);
+ curl_slist_free_all(list);
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib1960.c b/tests/libtest/lib1960.c
new file mode 100644
index 000000000..b01370e6e
--- /dev/null
+++ b/tests/libtest/lib1960.c
@@ -0,0 +1,155 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at https://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * SPDX-License-Identifier: curl
+ *
+ ***************************************************************************/
+#include "test.h"
+
+#ifdef HAVE_INET_PTON
+
+#ifdef _WIN32
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#include <windows.h>
+#endif
+
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+
+#include "memdebug.h"
+
+/* to prevent libcurl from closing our socket */
+static int closesocket_cb(void *clientp, curl_socket_t item)
+{
+ (void)clientp;
+ (void)item;
+ return 0;
+}
+
+/* provide our own socket */
+static curl_socket_t socket_cb(void *clientp,
+ curlsocktype purpose,
+ struct curl_sockaddr *address)
+{
+ int s = *(int *)clientp;
+ (void)purpose;
+ (void)address;
+ return (curl_socket_t)s;
+}
+
+/* tell libcurl the socket is connected */
+static int sockopt_cb(void *clientp,
+ curl_socket_t curlfd,
+ curlsocktype purpose)
+{
+ (void)clientp;
+ (void)curlfd;
+ (void)purpose;
+ return CURL_SOCKOPT_ALREADY_CONNECTED;
+}
+
+/* Expected args: URL IP PORT */
+int test(char *URL)
+{
+ CURL *curl = NULL;
+ CURLcode res = TEST_ERR_MAJOR_BAD;
+ int status;
+ curl_socket_t client_fd = CURL_SOCKET_BAD;
+ struct sockaddr_in serv_addr;
+ unsigned short port;
+
+ if(!strcmp("check", URL))
+ return 0; /* no output makes it not skipped */
+
+ port = (unsigned short)atoi(libtest_arg3);
+
+ if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /*
+ * This code connects to the TCP port "manually" so that we then can hand
+ * over this socket as "already connected" to libcurl and make sure that
+ * this works.
+ */
+ client_fd = socket(AF_INET, SOCK_STREAM, 0);
+ if(client_fd == CURL_SOCKET_BAD) {
+ fprintf(stderr, "socket creation error\n");
+ goto test_cleanup;
+ }
+
+ serv_addr.sin_family = AF_INET;
+ serv_addr.sin_port = htons(port);
+
+ if(inet_pton(AF_INET, libtest_arg2, &serv_addr.sin_addr) <= 0) {
+ fprintf(stderr, "inet_pton failed\n");
+ goto test_cleanup;
+ }
+
+ status = connect(client_fd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
+ if(status < 0) {
+ fprintf(stderr, "connection failed\n");
+ goto test_cleanup;
+ }
+
+ curl = curl_easy_init();
+ if(!curl) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ goto test_cleanup;
+ }
+
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+ test_setopt(curl, CURLOPT_OPENSOCKETFUNCTION, socket_cb);
+ test_setopt(curl, CURLOPT_OPENSOCKETDATA, &client_fd);
+ test_setopt(curl, CURLOPT_SOCKOPTFUNCTION, sockopt_cb);
+ test_setopt(curl, CURLOPT_SOCKOPTDATA, NULL);
+ test_setopt(curl, CURLOPT_CLOSESOCKETFUNCTION, closesocket_cb);
+ test_setopt(curl, CURLOPT_CLOSESOCKETDATA, NULL);
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+ test_setopt(curl, CURLOPT_HEADER, 1L);
+ test_setopt(curl, CURLOPT_URL, URL);
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+ if(client_fd != CURL_SOCKET_BAD)
+ sclose(client_fd);
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
+#else
+int test(char *URL)
+{
+ (void)URL;
+ printf("lacks inet_pton\n");
+ return 0;
+}
+#endif
diff --git a/tests/libtest/lib1964.c b/tests/libtest/lib1964.c
new file mode 100644
index 000000000..a9881e98d
--- /dev/null
+++ b/tests/libtest/lib1964.c
@@ -0,0 +1,68 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at https://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * SPDX-License-Identifier: curl
+ *
+ ***************************************************************************/
+#include "test.h"
+
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res = CURLE_OK;
+ struct curl_slist *connect_to = NULL;
+ struct curl_slist *list = NULL, *tmp;
+
+ global_init(CURL_GLOBAL_ALL);
+ easy_init(curl);
+
+ easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+ easy_setopt(curl, CURLOPT_AWS_SIGV4, "xxx");
+ easy_setopt(curl, CURLOPT_URL, URL);
+ if(libtest_arg2) {
+ connect_to = curl_slist_append(connect_to, libtest_arg2);
+ if(!connect_to) {
+ res = CURLE_FAILED_INIT;
+ goto test_cleanup;
+ }
+ }
+ easy_setopt(curl, CURLOPT_CONNECT_TO, connect_to);
+ list = curl_slist_append(list, "Content-Type: application/json");
+ tmp = curl_slist_append(list, "X-Xxx-Date: 19700101T000000Z");
+ if(!list || !tmp) {
+ res = CURLE_FAILED_INIT;
+ goto test_cleanup;
+ }
+ list = tmp;
+ easy_setopt(curl, CURLOPT_HTTPHEADER, list);
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ curl_slist_free_all(connect_to);
+ curl_slist_free_all(list);
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib1970.c b/tests/libtest/lib1970.c
new file mode 100644
index 000000000..ff86fdd2c
--- /dev/null
+++ b/tests/libtest/lib1970.c
@@ -0,0 +1,73 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at https://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * SPDX-License-Identifier: curl
+ *
+ ***************************************************************************/
+#include "test.h"
+
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res = TEST_ERR_MAJOR_BAD;
+ struct curl_slist *list = NULL;
+ struct curl_slist *connect_to = NULL;
+
+ if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ curl = curl_easy_init();
+ if(!curl) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_UPLOAD, 1L);
+ test_setopt(curl, CURLOPT_INFILESIZE, 0L);
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+ test_setopt(curl, CURLOPT_AWS_SIGV4, "aws:amz:us-east-1:s3");
+ test_setopt(curl, CURLOPT_USERPWD, "xxx");
+ test_setopt(curl, CURLOPT_HEADER, 0L);
+ test_setopt(curl, CURLOPT_URL, URL);
+ list = curl_slist_append(list, "Content-Type: application/json");
+ if(!list)
+ goto test_cleanup;
+ test_setopt(curl, CURLOPT_HTTPHEADER, list);
+ if(libtest_arg2) {
+ connect_to = curl_slist_append(connect_to, libtest_arg2);
+ }
+ test_setopt(curl, CURLOPT_CONNECT_TO, connect_to);
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ curl_slist_free_all(connect_to);
+ curl_slist_free_all(list);
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib1971.c b/tests/libtest/lib1971.c
new file mode 100644
index 000000000..173fc2f12
--- /dev/null
+++ b/tests/libtest/lib1971.c
@@ -0,0 +1,83 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at https://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * SPDX-License-Identifier: curl
+ *
+ ***************************************************************************/
+#include "test.h"
+
+#include "memdebug.h"
+
+static size_t read_callback(char *buffer, size_t size, size_t nitems,
+ void *userdata)
+{
+ (void)buffer; /* unused */
+ (void)size; /* unused */
+ (void)nitems; /* unused */
+ (void)userdata; /* unused */
+ return 0;
+}
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res = TEST_ERR_MAJOR_BAD;
+ struct curl_slist *list = NULL;
+ struct curl_slist *connect_to = NULL;
+
+ if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ curl = curl_easy_init();
+ if(!curl) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_UPLOAD, 1L);
+ test_setopt(curl, CURLOPT_READFUNCTION, read_callback);
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+ test_setopt(curl, CURLOPT_AWS_SIGV4, "aws:amz:us-east-1:s3");
+ test_setopt(curl, CURLOPT_USERPWD, "xxx");
+ test_setopt(curl, CURLOPT_HEADER, 0L);
+ test_setopt(curl, CURLOPT_URL, URL);
+ list = curl_slist_append(list, "Content-Type: application/json");
+ if(!list)
+ goto test_cleanup;
+ test_setopt(curl, CURLOPT_HTTPHEADER, list);
+ if(libtest_arg2) {
+ connect_to = curl_slist_append(connect_to, libtest_arg2);
+ }
+ test_setopt(curl, CURLOPT_CONNECT_TO, connect_to);
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ curl_slist_free_all(connect_to);
+ curl_slist_free_all(list);
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib1972.c b/tests/libtest/lib1972.c
new file mode 100644
index 000000000..c21e8da93
--- /dev/null
+++ b/tests/libtest/lib1972.c
@@ -0,0 +1,84 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at https://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * SPDX-License-Identifier: curl
+ *
+ ***************************************************************************/
+#include "test.h"
+
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURL *curl;
+ curl_mime *mime = NULL;
+ curl_mimepart *part = NULL;
+ CURLcode res = TEST_ERR_MAJOR_BAD;
+ struct curl_slist *list = NULL;
+ struct curl_slist *connect_to = NULL;
+
+ if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ curl = curl_easy_init();
+ if(!curl) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ mime = curl_mime_init(curl);
+ if(!mime)
+ goto test_cleanup;
+ part = curl_mime_addpart(mime);
+ if(!part)
+ goto test_cleanup;
+ curl_mime_name(part, "foo");
+ curl_mime_data(part, "bar", CURL_ZERO_TERMINATED);
+
+ test_setopt(curl, CURLOPT_MIMEPOST, mime);
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+ test_setopt(curl, CURLOPT_AWS_SIGV4, "aws:amz:us-east-1:s3");
+ test_setopt(curl, CURLOPT_USERPWD, "xxx");
+ test_setopt(curl, CURLOPT_HEADER, 0L);
+ test_setopt(curl, CURLOPT_URL, URL);
+ list = curl_slist_append(list, "Content-Type: application/json");
+ if(!list)
+ goto test_cleanup;
+ test_setopt(curl, CURLOPT_HTTPHEADER, list);
+ if(libtest_arg2) {
+ connect_to = curl_slist_append(connect_to, libtest_arg2);
+ }
+ test_setopt(curl, CURLOPT_CONNECT_TO, connect_to);
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ curl_slist_free_all(connect_to);
+ curl_slist_free_all(list);
+ curl_easy_cleanup(curl);
+ curl_mime_free(mime);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib1973.c b/tests/libtest/lib1973.c
new file mode 100644
index 000000000..d95744fcb
--- /dev/null
+++ b/tests/libtest/lib1973.c
@@ -0,0 +1,72 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at https://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * SPDX-License-Identifier: curl
+ *
+ ***************************************************************************/
+#include "test.h"
+
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res = TEST_ERR_MAJOR_BAD;
+ struct curl_slist *list = NULL;
+ struct curl_slist *connect_to = NULL;
+
+ if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ curl = curl_easy_init();
+ if(!curl) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_POSTFIELDS, "post fields\n");
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+ test_setopt(curl, CURLOPT_AWS_SIGV4, "aws:amz:us-east-1:s3");
+ test_setopt(curl, CURLOPT_USERPWD, "xxx");
+ test_setopt(curl, CURLOPT_HEADER, 0L);
+ test_setopt(curl, CURLOPT_URL, URL);
+ list = curl_slist_append(list, "Content-Type: application/json");
+ if(!list)
+ goto test_cleanup;
+ test_setopt(curl, CURLOPT_HTTPHEADER, list);
+ if(libtest_arg2) {
+ connect_to = curl_slist_append(connect_to, libtest_arg2);
+ }
+ test_setopt(curl, CURLOPT_CONNECT_TO, connect_to);
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ curl_slist_free_all(connect_to);
+ curl_slist_free_all(list);
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib1974.c b/tests/libtest/lib1974.c
new file mode 100644
index 000000000..948d44df9
--- /dev/null
+++ b/tests/libtest/lib1974.c
@@ -0,0 +1,65 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at https://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * SPDX-License-Identifier: curl
+ *
+ ***************************************************************************/
+#include "test.h"
+
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res = TEST_ERR_MAJOR_BAD;
+ struct curl_slist *connect_to = NULL;
+
+ if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ curl = curl_easy_init();
+ if(!curl) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+ test_setopt(curl, CURLOPT_AWS_SIGV4, "aws:amz:us-east-1:s3");
+ test_setopt(curl, CURLOPT_USERPWD, "xxx");
+ test_setopt(curl, CURLOPT_HEADER, 0L);
+ test_setopt(curl, CURLOPT_URL, URL);
+ if(libtest_arg2) {
+ connect_to = curl_slist_append(connect_to, libtest_arg2);
+ }
+ test_setopt(curl, CURLOPT_CONNECT_TO, connect_to);
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ curl_slist_free_all(connect_to);
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib1975.c b/tests/libtest/lib1975.c
new file mode 100644
index 000000000..bca0c763f
--- /dev/null
+++ b/tests/libtest/lib1975.c
@@ -0,0 +1,85 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at https://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * SPDX-License-Identifier: curl
+ *
+ ***************************************************************************/
+#include "test.h"
+
+#include "memdebug.h"
+
+static size_t read_callback(char *buffer, size_t size, size_t nitems,
+ void *userdata)
+{
+ (void)buffer; /* unused */
+ (void)size; /* unused */
+ (void)nitems; /* unused */
+ (void)userdata; /* unused */
+ return 0;
+}
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res = TEST_ERR_MAJOR_BAD;
+ struct curl_slist *list = NULL;
+ struct curl_slist *connect_to = NULL;
+
+ if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ curl = curl_easy_init();
+ if(!curl) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_UPLOAD, 1L);
+ test_setopt(curl, CURLOPT_READFUNCTION, read_callback);
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+ test_setopt(curl, CURLOPT_AWS_SIGV4, "aws:amz:us-east-1:s3");
+ test_setopt(curl, CURLOPT_USERPWD, "xxx");
+ test_setopt(curl, CURLOPT_HEADER, 0L);
+ test_setopt(curl, CURLOPT_URL, URL);
+ list = curl_slist_append(list, "Content-Type: application/json");
+ if(!list)
+ goto test_cleanup;
+ curl_slist_append(list, "X-Amz-Content-Sha256: "
+ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");
+ test_setopt(curl, CURLOPT_HTTPHEADER, list);
+ if(libtest_arg2) {
+ connect_to = curl_slist_append(connect_to, libtest_arg2);
+ }
+ test_setopt(curl, CURLOPT_CONNECT_TO, connect_to);
+
+ res = curl_easy_perform(curl);
+
+test_cleanup:
+
+ curl_slist_free_all(connect_to);
+ curl_slist_free_all(list);
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib2301.c b/tests/libtest/lib2301.c
index 90f240e86..e654f8166 100644
--- a/tests/libtest/lib2301.c
+++ b/tests/libtest/lib2301.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -38,7 +38,7 @@ static int ping(CURL *curl, const char *send_payload)
return (int)result;
}
-static int recv_pong(CURL *curl, const char *exected_payload)
+static int recv_pong(CURL *curl, const char *expected_payload)
{
size_t rlen;
unsigned int rflags;
@@ -48,8 +48,8 @@ static int recv_pong(CURL *curl, const char *exected_payload)
if(rflags & CURLWS_PONG) {
int same = 0;
fprintf(stderr, "ws: got PONG back\n");
- if(rlen == strlen(exected_payload)) {
- if(!memcmp(exected_payload, buffer, rlen)) {
+ if(rlen == strlen(expected_payload)) {
+ if(!memcmp(expected_payload, buffer, rlen)) {
fprintf(stderr, "ws: got the same payload back\n");
same = 1;
}
diff --git a/tests/libtest/lib2302.c b/tests/libtest/lib2302.c
index cb4ac3531..9e2b80044 100644
--- a/tests/libtest/lib2302.c
+++ b/tests/libtest/lib2302.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -26,98 +26,66 @@
#ifdef USE_WEBSOCKETS
-#if 0
+struct ws_data {
+ CURL *easy;
+ char buf[1024*1024];
+ size_t blen;
+ size_t nwrites;
+ int has_meta;
+ int meta_flags;
+};
-static int ping(CURL *curl, const char *send_payload)
+static void flush_data(struct ws_data *wd)
{
- size_t sent;
- CURLcode result =
- curl_ws_send(curl, send_payload, strlen(send_payload), &sent, CURLWS_PING);
- fprintf(stderr,
- "ws: curl_ws_send returned %u, sent %u\n", (int)result, (int)sent);
+ size_t i;
- return (int)result;
-}
+ if(!wd->nwrites)
+ return;
-static int recv_pong(CURL *curl, const char *exected_payload)
-{
- size_t rlen;
- unsigned int rflags;
- char buffer[256];
- CURLcode result =
- curl_ws_recv(curl, buffer, sizeof(buffer), &rlen, &rflags);
- if(rflags & CURLWS_PONG) {
- int same = 0;
- fprintf(stderr, "ws: got PONG back\n");
- if(rlen == strlen(exected_payload)) {
- if(!memcmp(exected_payload, buffer, rlen)) {
- fprintf(stderr, "ws: got the same payload back\n");
- same = 1;
- }
- }
- if(!same)
- fprintf(stderr, "ws: did NOT get the same payload back\n");
- }
- else {
- fprintf(stderr, "recv_pong: got %u bytes rflags %x\n", (int)rlen, rflags);
- }
- fprintf(stderr, "ws: curl_ws_recv returned %u, received %u\n", (int)result,
- rlen);
- return (int)result;
-}
+ for(i = 0; i < wd->blen; ++i)
+ printf("%02x ", (unsigned char)wd->buf[i]);
-/* just close the connection */
-static void websocket_close(CURL *curl)
-{
- size_t sent;
- CURLcode result =
- curl_ws_send(curl, "", 0, &sent, CURLWS_CLOSE);
- fprintf(stderr,
- "ws: curl_ws_send returned %u, sent %u\n", (int)result, (int)sent);
+ printf("\n");
+ if(wd->has_meta)
+ printf("RECFLAGS: %x\n", wd->meta_flags);
+ else
+ fprintf(stderr, "RECFLAGS: NULL\n");
+ wd->blen = 0;
+ wd->nwrites = 0;
}
-static void websocket(CURL *curl)
+static size_t add_data(struct ws_data *wd, const char *buf, size_t blen,
+ const struct curl_ws_frame *meta)
{
- int i = 0;
- fprintf(stderr, "ws: websocket() starts\n");
- do {
- if(ping(curl, "foobar"))
- return;
- if(recv_pong(curl, "foobar"))
- return;
- sleep(2);
- } while(i++ < 10);
- websocket_close(curl);
+ if((wd->nwrites == 0) ||
+ (!!meta != !!wd->has_meta) ||
+ (meta && meta->flags != wd->meta_flags)) {
+ if(wd->nwrites > 0)
+ flush_data(wd);
+ wd->has_meta = (meta != NULL);
+ wd->meta_flags = meta? meta->flags : 0;
+ }
+
+ if(wd->blen + blen > sizeof(wd->buf)) {
+ return 0;
+ }
+ memcpy(wd->buf + wd->blen, buf, blen);
+ wd->blen += blen;
+ wd->nwrites++;
+ return blen;
}
-#endif
static size_t writecb(char *buffer, size_t size, size_t nitems, void *p)
{
- CURL *easy = p;
- size_t i;
+ struct ws_data *ws_data = p;
size_t incoming = nitems;
- struct curl_ws_frame *meta;
+ const struct curl_ws_frame *meta;
(void)size;
- for(i = 0; i < nitems; i++)
- printf("%02x ", (unsigned char)buffer[i]);
- printf("\n");
- meta = curl_ws_meta(easy);
- if(meta)
- printf("RECFLAGS: %x\n", meta->flags);
- else
- fprintf(stderr, "RECFLAGS: NULL\n");
+ meta = curl_ws_meta(ws_data->easy);
+ incoming = add_data(ws_data, buffer, incoming, meta);
- /* this assumes we get a simple TEXT frame first */
- {
- CURLcode result = CURLE_OK;
- fprintf(stderr, "send back a TEXT\n");
- (void)easy;
- /*result = curl_ws_send(easy, pong, 2, &sent, 0);*/
- if(result)
- nitems = 0;
- }
if(nitems != incoming)
fprintf(stderr, "returns error from callback\n");
return nitems;
@@ -127,26 +95,27 @@ int test(char *URL)
{
CURL *curl;
CURLcode res = CURLE_OK;
+ struct ws_data ws_data;
+
global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
if(curl) {
- curl_easy_setopt(curl, CURLOPT_URL, URL);
+ memset(&ws_data, 0, sizeof(ws_data));
+ ws_data.easy = curl;
+ curl_easy_setopt(curl, CURLOPT_URL, URL);
/* use the callback style */
curl_easy_setopt(curl, CURLOPT_USERAGENT, "webbie-sox/3");
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writecb);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, curl);
+ curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ws_data);
res = curl_easy_perform(curl);
fprintf(stderr, "curl_easy_perform() returned %u\n", (int)res);
-#if 0
- if(res == CURLE_OK)
- websocket(curl);
-#endif
/* always cleanup */
curl_easy_cleanup(curl);
+ flush_data(&ws_data);
}
curl_global_cleanup();
return (int)res;
diff --git a/tests/libtest/lib2304.c b/tests/libtest/lib2304.c
new file mode 100644
index 000000000..a8ee87548
--- /dev/null
+++ b/tests/libtest/lib2304.c
@@ -0,0 +1,142 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "test.h"
+
+#ifdef USE_WEBSOCKETS
+
+static int ping(CURL *curl, const char *send_payload)
+{
+ size_t sent;
+ CURLcode result =
+ curl_ws_send(curl, send_payload, strlen(send_payload), &sent, 0,
+ CURLWS_PING);
+ fprintf(stderr,
+ "ws: curl_ws_send returned %u, sent %u\n", (int)result, (int)sent);
+
+ return (int)result;
+}
+
+static int recv_pong(CURL *curl, const char *expected_payload)
+{
+ size_t rlen;
+ const struct curl_ws_frame *meta;
+ char buffer[256];
+ CURLcode result = curl_ws_recv(curl, buffer, sizeof(buffer), &rlen, &meta);
+ if(!result) {
+ if(meta->flags & CURLWS_PONG) {
+ int same = 0;
+ fprintf(stderr, "ws: got PONG back\n");
+ if(rlen == strlen(expected_payload)) {
+ if(!memcmp(expected_payload, buffer, rlen)) {
+ fprintf(stderr, "ws: got the same payload back\n");
+ same = 1;
+ }
+ }
+ if(!same)
+ fprintf(stderr, "ws: did NOT get the same payload back\n");
+ }
+ else {
+ fprintf(stderr, "recv_pong: got %u bytes rflags %x\n", (int)rlen,
+ meta->flags);
+ }
+ }
+ fprintf(stderr, "ws: curl_ws_recv returned %u, received %u\n", (int)result,
+ (int)rlen);
+ return (int)result;
+}
+
+static int recv_any(CURL *curl)
+{
+ size_t rlen;
+ const struct curl_ws_frame *meta;
+ char buffer[256];
+ CURLcode result = curl_ws_recv(curl, buffer, sizeof(buffer), &rlen, &meta);
+ if(result)
+ return result;
+
+ fprintf(stderr, "recv_any: got %u bytes rflags %x\n", (int)rlen,
+ meta->flags);
+ return 0;
+}
+
+/* just close the connection */
+static void websocket_close(CURL *curl)
+{
+ size_t sent;
+ CURLcode result =
+ curl_ws_send(curl, "", 0, &sent, 0, CURLWS_CLOSE);
+ fprintf(stderr,
+ "ws: curl_ws_send returned %u, sent %u\n", (int)result, (int)sent);
+}
+
+static void websocket(CURL *curl)
+{
+ int i = 0;
+ fprintf(stderr, "ws: websocket() starts\n");
+ do {
+ recv_any(curl);
+ fprintf(stderr, "Send ping\n");
+ if(ping(curl, "foobar"))
+ return;
+ fprintf(stderr, "Receive pong\n");
+ if(recv_pong(curl, "foobar")) {
+ printf("Connection closed\n");
+ return;
+ }
+ sleep(2);
+ } while(i++ < 10);
+ websocket_close(curl);
+}
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res = CURLE_OK;
+
+ global_init(CURL_GLOBAL_ALL);
+
+ curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, URL);
+
+ /* use the callback style */
+ curl_easy_setopt(curl, CURLOPT_USERAGENT, "websocket/2304");
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+ curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 2L); /* websocket style */
+ res = curl_easy_perform(curl);
+ fprintf(stderr, "curl_easy_perform() returned %u\n", (int)res);
+ if(res == CURLE_OK)
+ websocket(curl);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ curl_global_cleanup();
+ return (int)res;
+}
+
+#else
+NO_SUPPORT_BUILT_IN
+#endif
diff --git a/tests/libtest/lib2305.c b/tests/libtest/lib2305.c
new file mode 100644
index 000000000..374423f0f
--- /dev/null
+++ b/tests/libtest/lib2305.c
@@ -0,0 +1,107 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "test.h"
+#include "testtrace.h"
+
+#ifdef USE_WEBSOCKETS
+
+/* just close the connection */
+static void websocket_close(CURL *curl)
+{
+ size_t sent;
+ CURLcode result =
+ curl_ws_send(curl, "", 0, &sent, 0, CURLWS_CLOSE);
+ fprintf(stderr,
+ "ws: curl_ws_send returned %u, sent %u\n", (int)result, (int)sent);
+}
+
+static void websocket(CURL *curl)
+{
+ char buffer[256];
+ const struct curl_ws_frame *meta;
+ size_t nread;
+ size_t i = 0;
+ FILE *save = fopen(libtest_arg2, FOPEN_WRITETEXT);
+ if(!save)
+ return;
+
+ /* Three 4097-bytes frames are expected, 12291 bytes */
+ while(i < 12291) {
+ CURLcode result =
+ curl_ws_recv(curl, buffer, sizeof(buffer), &nread, &meta);
+ if(result) {
+ if(result == CURLE_AGAIN)
+ /* crude busy-loop */
+ continue;
+ printf("curl_ws_recv returned %d\n", (int)result);
+ return;
+ }
+ printf("%u: nread %zu Age %u Flags %x "
+ "Offset %" CURL_FORMAT_CURL_OFF_T " "
+ "Bytesleft %" CURL_FORMAT_CURL_OFF_T "\n",
+ (int)i,
+ nread, meta->age, meta->flags, meta->offset, meta->bytesleft);
+ i += meta->len;
+ fwrite(buffer, 1, nread, save);
+ }
+ fclose(save);
+
+ websocket_close(curl);
+}
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res = CURLE_OK;
+
+ global_init(CURL_GLOBAL_ALL);
+
+ curl = curl_easy_init();
+ if(curl) {
+ curl_easy_setopt(curl, CURLOPT_URL, URL);
+
+ /* use the callback style */
+ curl_easy_setopt(curl, CURLOPT_USERAGENT, "websocket/2304");
+ libtest_debug_config.nohex = 1;
+ libtest_debug_config.tracetime = 1;
+ curl_easy_setopt(curl, CURLOPT_DEBUGDATA, &libtest_debug_config);
+ curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, libtest_debug_cb);
+ curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+ curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 2L); /* websocket style */
+ res = curl_easy_perform(curl);
+ fprintf(stderr, "curl_easy_perform() returned %u\n", (int)res);
+ if(res == CURLE_OK)
+ websocket(curl);
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ }
+ curl_global_cleanup();
+ return (int)res;
+}
+
+#else
+NO_SUPPORT_BUILT_IN
+#endif
diff --git a/tests/libtest/lib2306.c b/tests/libtest/lib2306.c
new file mode 100644
index 000000000..839bdcc0a
--- /dev/null
+++ b/tests/libtest/lib2306.c
@@ -0,0 +1,55 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "test.h"
+#include "testtrace.h"
+
+#include <curl/curl.h>
+
+#define URL2 libtest_arg2
+
+int test(char *URL)
+{
+ /* first a fine GET response, then a bad one */
+ CURL *cl;
+ CURLcode res = CURLE_OK;
+
+ global_init(CURL_GLOBAL_ALL);
+
+ easy_init(cl);
+ easy_setopt(cl, CURLOPT_URL, URL);
+ easy_setopt(cl, CURLOPT_VERBOSE, 1L);
+ res = curl_easy_perform(cl);
+ if(res)
+ goto test_cleanup;
+
+ /* reuse handle, do a second transfer */
+ easy_setopt(cl, CURLOPT_URL, URL2);
+ res = curl_easy_perform(cl);
+
+test_cleanup:
+ curl_easy_cleanup(cl);
+ curl_global_cleanup();
+ return res;
+}
diff --git a/tests/libtest/lib2402.c b/tests/libtest/lib2402.c
new file mode 100644
index 000000000..ab20f92c0
--- /dev/null
+++ b/tests/libtest/lib2402.c
@@ -0,0 +1,142 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Linus Nielsen Feltzing <linus@haxx.se>
+ *
+ * This software is licensed 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 "test.h"
+
+#include "testutil.h"
+#include "warnless.h"
+#include "memdebug.h"
+
+#define TEST_HANG_TIMEOUT 60 * 1000
+
+#define NUM_HANDLES 4
+
+int test(char *URL)
+{
+ int res = 0;
+ CURL *curl[NUM_HANDLES] = {0};
+ int running;
+ CURLM *m = NULL;
+ int i;
+ char target_url[256];
+ char dnsentry[256];
+ struct curl_slist *slist = NULL;
+ char *port = libtest_arg3;
+ char *address = libtest_arg2;
+
+ (void)URL;
+
+ msnprintf(dnsentry, sizeof(dnsentry), "localhost:%s:%s",
+ port, address);
+ printf("%s\n", dnsentry);
+ slist = curl_slist_append(slist, dnsentry);
+ if(!slist) {
+ fprintf(stderr, "curl_slist_append() failed\n");
+ goto test_cleanup;
+ }
+
+ start_test_timing();
+
+ global_init(CURL_GLOBAL_ALL);
+
+ multi_init(m);
+
+ multi_setopt(m, CURLMOPT_MAXCONNECTS, 1L);
+
+ /* get NUM_HANDLES easy handles */
+ for(i = 0; i < NUM_HANDLES; i++) {
+ /* get an easy handle */
+ easy_init(curl[i]);
+ /* specify target */
+ msnprintf(target_url, sizeof(target_url),
+ "https://localhost:%s/path/2402%04i",
+ port, i + 1);
+ target_url[sizeof(target_url) - 1] = '\0';
+ easy_setopt(curl[i], CURLOPT_URL, target_url);
+ /* go http2 */
+ easy_setopt(curl[i], CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
+ /* no peer verify */
+ easy_setopt(curl[i], CURLOPT_SSL_VERIFYPEER, 0L);
+ easy_setopt(curl[i], CURLOPT_SSL_VERIFYHOST, 0L);
+ /* wait for first connection established to see if we can share it */
+ easy_setopt(curl[i], CURLOPT_PIPEWAIT, 1L);
+ /* go verbose */
+ easy_setopt(curl[i], CURLOPT_VERBOSE, 1L);
+ /* include headers */
+ easy_setopt(curl[i], CURLOPT_HEADER, 1L);
+
+ easy_setopt(curl[i], CURLOPT_RESOLVE, slist);
+ }
+
+ fprintf(stderr, "Start at URL 0\n");
+
+ for(i = 0; i < NUM_HANDLES; i++) {
+ /* add handle to multi */
+ multi_add_handle(m, curl[i]);
+
+ for(;;) {
+ struct timeval interval;
+ fd_set rd, wr, exc;
+ int maxfd = -99;
+
+ interval.tv_sec = 1;
+ interval.tv_usec = 0;
+
+ multi_perform(m, &running);
+
+ abort_on_test_timeout();
+
+ if(!running)
+ break; /* done */
+
+ FD_ZERO(&rd);
+ FD_ZERO(&wr);
+ FD_ZERO(&exc);
+
+ multi_fdset(m, &rd, &wr, &exc, &maxfd);
+
+ /* At this point, maxfd is guaranteed to be greater or equal than -1. */
+
+ select_test(maxfd + 1, &rd, &wr, &exc, &interval);
+
+ abort_on_test_timeout();
+ }
+ wait_ms(1); /* to ensure different end times */
+ }
+
+test_cleanup:
+
+ /* proper cleanup sequence - type PB */
+
+ for(i = 0; i < NUM_HANDLES; i++) {
+ curl_multi_remove_handle(m, curl[i]);
+ curl_easy_cleanup(curl[i]);
+ }
+
+ curl_slist_free_all(slist);
+
+ curl_multi_cleanup(m);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib2404.c b/tests/libtest/lib2404.c
new file mode 100644
index 000000000..1a282ffe2
--- /dev/null
+++ b/tests/libtest/lib2404.c
@@ -0,0 +1,144 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Linus Nielsen Feltzing <linus@haxx.se>
+ *
+ * This software is licensed 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 "test.h"
+
+#include "testutil.h"
+#include "warnless.h"
+#include "memdebug.h"
+
+#define TEST_HANG_TIMEOUT 60 * 1000
+
+#define NUM_HANDLES 4
+
+int test(char *URL)
+{
+ int res = 0;
+ CURL *curl[NUM_HANDLES] = {0};
+ int running;
+ CURLM *m = NULL;
+ int i;
+ char target_url[256];
+ char dnsentry[256];
+ struct curl_slist *slist = NULL;
+ char *port = libtest_arg3;
+ char *address = libtest_arg2;
+
+ (void)URL;
+
+ msnprintf(dnsentry, sizeof(dnsentry), "localhost:%s:%s",
+ port, address);
+ printf("%s\n", dnsentry);
+ slist = curl_slist_append(slist, dnsentry);
+ if(!slist) {
+ fprintf(stderr, "curl_slist_append() failed\n");
+ goto test_cleanup;
+ }
+
+ start_test_timing();
+
+ global_init(CURL_GLOBAL_ALL);
+
+ multi_init(m);
+
+ multi_setopt(m, CURLMOPT_MAXCONNECTS, 1L);
+
+ /* get NUM_HANDLES easy handles */
+ for(i = 0; i < NUM_HANDLES; i++) {
+ /* get an easy handle */
+ easy_init(curl[i]);
+ /* specify target */
+ msnprintf(target_url, sizeof(target_url),
+ "https://localhost:%s/path/2404%04i",
+ port, i + 1);
+ target_url[sizeof(target_url) - 1] = '\0';
+ easy_setopt(curl[i], CURLOPT_URL, target_url);
+ /* go http2 */
+ easy_setopt(curl[i], CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
+ /* no peer verify */
+ easy_setopt(curl[i], CURLOPT_SSL_VERIFYPEER, 0L);
+ easy_setopt(curl[i], CURLOPT_SSL_VERIFYHOST, 0L);
+ /* wait for first connection established to see if we can share it */
+ easy_setopt(curl[i], CURLOPT_PIPEWAIT, 1L);
+ /* go verbose */
+ easy_setopt(curl[i], CURLOPT_VERBOSE, 1L);
+ /* include headers */
+ easy_setopt(curl[i], CURLOPT_HEADER, 1L);
+
+ easy_setopt(curl[i], CURLOPT_RESOLVE, slist);
+
+ easy_setopt(curl[i], CURLOPT_STREAM_WEIGHT, (long)128 + i);
+ }
+
+ fprintf(stderr, "Start at URL 0\n");
+
+ for(i = 0; i < NUM_HANDLES; i++) {
+ /* add handle to multi */
+ multi_add_handle(m, curl[i]);
+
+ for(;;) {
+ struct timeval interval;
+ fd_set rd, wr, exc;
+ int maxfd = -99;
+
+ interval.tv_sec = 1;
+ interval.tv_usec = 0;
+
+ multi_perform(m, &running);
+
+ abort_on_test_timeout();
+
+ if(!running)
+ break; /* done */
+
+ FD_ZERO(&rd);
+ FD_ZERO(&wr);
+ FD_ZERO(&exc);
+
+ multi_fdset(m, &rd, &wr, &exc, &maxfd);
+
+ /* At this point, maxfd is guaranteed to be greater or equal than -1. */
+
+ select_test(maxfd + 1, &rd, &wr, &exc, &interval);
+
+ abort_on_test_timeout();
+ }
+ wait_ms(1); /* to ensure different end times */
+ }
+
+test_cleanup:
+
+ /* proper cleanup sequence - type PB */
+
+ for(i = 0; i < NUM_HANDLES; i++) {
+ curl_multi_remove_handle(m, curl[i]);
+ curl_easy_cleanup(curl[i]);
+ }
+
+ curl_slist_free_all(slist);
+
+ curl_multi_cleanup(m);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib2502.c b/tests/libtest/lib2502.c
new file mode 100644
index 000000000..e5a7061b0
--- /dev/null
+++ b/tests/libtest/lib2502.c
@@ -0,0 +1,141 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Linus Nielsen Feltzing <linus@haxx.se>
+ *
+ * This software is licensed 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 "test.h"
+
+#include "testutil.h"
+#include "warnless.h"
+#include "memdebug.h"
+
+#define TEST_HANG_TIMEOUT 60 * 1000
+
+#define NUM_HANDLES 4
+
+int test(char *URL)
+{
+ int res = 0;
+ CURL *curl[NUM_HANDLES] = {0};
+ int running;
+ CURLM *m = NULL;
+ int i;
+ char target_url[256];
+ char dnsentry[256];
+ struct curl_slist *slist = NULL;
+ char *port = libtest_arg3;
+ char *address = libtest_arg2;
+
+ (void)URL;
+
+ msnprintf(dnsentry, sizeof(dnsentry), "localhost:%s:%s",
+ port, address);
+ printf("%s\n", dnsentry);
+ slist = curl_slist_append(slist, dnsentry);
+ if(!slist) {
+ fprintf(stderr, "curl_slist_append() failed\n");
+ goto test_cleanup;
+ }
+
+ start_test_timing();
+
+ global_init(CURL_GLOBAL_ALL);
+
+ multi_init(m);
+
+ multi_setopt(m, CURLMOPT_MAXCONNECTS, 1L);
+
+ /* get NUM_HANDLES easy handles */
+ for(i = 0; i < NUM_HANDLES; i++) {
+ /* get an easy handle */
+ easy_init(curl[i]);
+ /* specify target */
+ msnprintf(target_url, sizeof(target_url),
+ "https://localhost:%s/path/2502%04i",
+ port, i + 1);
+ target_url[sizeof(target_url) - 1] = '\0';
+ easy_setopt(curl[i], CURLOPT_URL, target_url);
+ /* go http2 */
+ easy_setopt(curl[i], CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_3ONLY);
+ easy_setopt(curl[i], CURLOPT_CONNECTTIMEOUT_MS, (long)5000);
+ easy_setopt(curl[i], CURLOPT_CAINFO, "./certs/EdelCurlRoot-ca.cacert");
+ /* wait for first connection established to see if we can share it */
+ easy_setopt(curl[i], CURLOPT_PIPEWAIT, 1L);
+ /* go verbose */
+ easy_setopt(curl[i], CURLOPT_VERBOSE, 1L);
+ /* include headers */
+ easy_setopt(curl[i], CURLOPT_HEADER, 1L);
+
+ easy_setopt(curl[i], CURLOPT_RESOLVE, slist);
+ }
+
+ fprintf(stderr, "Start at URL 0\n");
+
+ for(i = 0; i < NUM_HANDLES; i++) {
+ /* add handle to multi */
+ multi_add_handle(m, curl[i]);
+
+ for(;;) {
+ struct timeval interval;
+ fd_set rd, wr, exc;
+ int maxfd = -99;
+
+ interval.tv_sec = 1;
+ interval.tv_usec = 0;
+
+ multi_perform(m, &running);
+
+ abort_on_test_timeout();
+
+ if(!running)
+ break; /* done */
+
+ FD_ZERO(&rd);
+ FD_ZERO(&wr);
+ FD_ZERO(&exc);
+
+ multi_fdset(m, &rd, &wr, &exc, &maxfd);
+
+ /* At this point, maxfd is guaranteed to be greater or equal than -1. */
+
+ select_test(maxfd + 1, &rd, &wr, &exc, &interval);
+
+ abort_on_test_timeout();
+ }
+ wait_ms(1); /* to ensure different end times */
+ }
+
+test_cleanup:
+
+ /* proper cleanup sequence - type PB */
+
+ for(i = 0; i < NUM_HANDLES; i++) {
+ curl_multi_remove_handle(m, curl[i]);
+ curl_easy_cleanup(curl[i]);
+ }
+
+ curl_slist_free_all(slist);
+
+ curl_multi_cleanup(m);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib3010.c b/tests/libtest/lib3010.c
index aa5ef2a25..598b79fcc 100644
--- a/tests/libtest/lib3010.c
+++ b/tests/libtest/lib3010.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2020 - 2022, Nicolas Sterchele, <nicolas@sterchelen.net>
+ * Copyright (C) Nicolas Sterchele, <nicolas@sterchelen.net>
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -65,4 +65,3 @@ test_cleanup:
return ret;
}
-
diff --git a/tests/libtest/lib3025.c b/tests/libtest/lib3025.c
index 0e1b3df60..f3e3f9208 100644
--- a/tests/libtest/lib3025.c
+++ b/tests/libtest/lib3025.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib3026.c b/tests/libtest/lib3026.c
index 8ad7e9490..34dcafc50 100644
--- a/tests/libtest/lib3026.c
+++ b/tests/libtest/lib3026.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -28,7 +28,7 @@
#define NUM_THREADS 100
-#ifdef WIN32
+#ifdef _WIN32
#ifdef _WIN32_WCE
static DWORD WINAPI run_thread(LPVOID ptr)
#else
@@ -49,8 +49,6 @@ int test(char *URL)
{
#ifdef _WIN32_WCE
typedef HANDLE curl_win_thread_handle_t;
-#elif defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)
- typedef unsigned long curl_win_thread_handle_t;
#else
typedef uintptr_t curl_win_thread_handle_t;
#endif
@@ -69,6 +67,14 @@ int test(char *URL)
return -1;
}
+ /* On Windows libcurl global init/cleanup calls LoadLibrary/FreeLibrary for
+ secur32.dll and iphlpapi.dll. Here we load them beforehand so that when
+ libcurl calls LoadLibrary/FreeLibrary it only increases/decreases the
+ library's refcount rather than actually loading/unloading the library,
+ which would affect the test runtime. */
+ (void)win32_load_system_library(TEXT("secur32.dll"));
+ (void)win32_load_system_library(TEXT("iphlpapi.dll"));
+
for(i = 0; i < tid_count; i++) {
curl_win_thread_handle_t th;
results[i] = CURL_LAST; /* initialize with invalid value */
diff --git a/tests/libtest/lib3027.c b/tests/libtest/lib3027.c
index 2b1d8dc44..6808f29fd 100644
--- a/tests/libtest/lib3027.c
+++ b/tests/libtest/lib3027.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2020 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib3100.c b/tests/libtest/lib3100.c
new file mode 100644
index 000000000..a508d5c7a
--- /dev/null
+++ b/tests/libtest/lib3100.c
@@ -0,0 +1,68 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "test.h"
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ int res;
+ CURL *curl;
+
+ if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ curl = curl_easy_init();
+ if(!curl) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_HEADERDATA, stdout);
+ test_setopt(curl, CURLOPT_WRITEDATA, stdout);
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+
+ test_setopt(curl, CURLOPT_URL, URL);
+ test_setopt(curl, CURLOPT_RTSP_STREAM_URI, URL);
+
+ test_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
+ test_setopt(curl, CURLOPT_USERNAME, "user");
+ test_setopt(curl, CURLOPT_PASSWORD, "password");
+ test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_DESCRIBE);
+
+ res = curl_easy_perform(curl);
+ if(res != (int)CURLE_OK) {
+ fprintf(stderr, "Failed to send DESCRIBE: %d\n", res);
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+
+test_cleanup:
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib3101.c b/tests/libtest/lib3101.c
new file mode 100644
index 000000000..dbcf3a6c7
--- /dev/null
+++ b/tests/libtest/lib3101.c
@@ -0,0 +1,64 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "test.h"
+#include "memdebug.h"
+
+int test(char *URL)
+{
+ int res;
+ CURL *curl;
+
+ if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ curl = curl_easy_init();
+ if(!curl) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ test_setopt(curl, CURLOPT_HEADERDATA, stdout);
+ test_setopt(curl, CURLOPT_WRITEDATA, stdout);
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+ test_setopt(curl, CURLOPT_URL, URL);
+ test_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
+ test_setopt(curl, CURLOPT_USERNAME, "user");
+ test_setopt(curl, CURLOPT_PASSWORD, "password");
+ test_setopt(curl, CURLOPT_REDIR_PROTOCOLS_STR, "https");
+
+ res = curl_easy_perform(curl);
+ if(res != (int)CURLE_OK) {
+ res = TEST_ERR_MAJOR_BAD;
+ goto test_cleanup;
+ }
+
+test_cleanup:
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/tests/libtest/lib3102.c b/tests/libtest/lib3102.c
new file mode 100644
index 000000000..abc0a27ea
--- /dev/null
+++ b/tests/libtest/lib3102.c
@@ -0,0 +1,141 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "test.h"
+
+#include "memdebug.h"
+
+/*
+ * Verify correct order of certificates in the chain by comparing the
+ * subject and issuer attributes of each certificate.
+ */
+static bool is_chain_in_order(struct curl_certinfo *cert_info)
+{
+ char *last_issuer = NULL;
+ int cert;
+
+ /* Chains with only a single certificate are always in order */
+ if(cert_info->num_of_certs <= 1)
+ return 1;
+
+ /* Enumerate each certificate in the chain */
+ for(cert = 0; cert < cert_info->num_of_certs; cert++) {
+ struct curl_slist *slist = cert_info->certinfo[cert];
+ char *issuer = NULL;
+ char *subject = NULL;
+
+ /* Find the certificate issuer and subject by enumerating each field */
+ for(; slist && (!issuer || !subject); slist = slist->next) {
+ const char issuer_prefix[] = "Issuer:";
+ const char subject_prefix[] = "Subject:";
+
+ if(!strncmp(slist->data, issuer_prefix, sizeof(issuer_prefix)-1)) {
+ issuer = slist->data + sizeof(issuer_prefix)-1;
+ }
+ if(!strncmp(slist->data, subject_prefix, sizeof(subject_prefix)-1)) {
+ subject = slist->data + sizeof(subject_prefix)-1;
+ }
+ }
+
+ if(subject && issuer) {
+ printf("cert %d\n", cert);
+ printf(" subject: %s\n", subject);
+ printf(" issuer: %s\n", issuer);
+
+ if(last_issuer) {
+ /* If the last certificate's issuer matches the current certificate's
+ * subject, then the chain is in order */
+ if(strcmp(last_issuer, subject) != 0) {
+ fprintf(stderr, "cert %d issuer does not match cert %d subject\n",
+ cert - 1, cert);
+ fprintf(stderr, "certificate chain is not in order\n");
+ return false;
+ }
+ }
+ }
+
+ last_issuer = issuer;
+ }
+
+ printf("certificate chain is in order\n");
+ return true;
+}
+
+static size_t wrfu(void *ptr, size_t size, size_t nmemb, void *stream)
+{
+ (void)stream;
+ (void)ptr;
+ return size * nmemb;
+}
+
+int test(char *URL)
+{
+ CURL *curl;
+ CURLcode res = CURLE_OK;
+
+ if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+ fprintf(stderr, "curl_global_init() failed\n");
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ curl = curl_easy_init();
+ if(!curl) {
+ fprintf(stderr, "curl_easy_init() failed\n");
+ curl_global_cleanup();
+ return TEST_ERR_MAJOR_BAD;
+ }
+
+ /* Set the HTTPS url to retrieve. */
+ test_setopt(curl, CURLOPT_URL, URL);
+
+ /* Capture certificate information */
+ test_setopt(curl, CURLOPT_CERTINFO, 1L);
+
+ /* Ignore output */
+ test_setopt(curl, CURLOPT_WRITEFUNCTION, wrfu);
+
+ /* No peer verify */
+ test_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
+ test_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
+
+ /* Perform the request, res will get the return code */
+ res = curl_easy_perform(curl);
+ if(!res || res == CURLE_GOT_NOTHING) {
+ struct curl_certinfo *cert_info = NULL;
+ /* Get the certificate information */
+ res = curl_easy_getinfo(curl, CURLINFO_CERTINFO, &cert_info);
+ if(!res) {
+ /* Check to see if the certificate chain is ordered correctly */
+ if(!is_chain_in_order(cert_info))
+ res = TEST_ERR_FAILURE;
+ }
+ }
+
+test_cleanup:
+
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ curl_global_cleanup();
+
+ return res;
+}
diff --git a/lib/wildcard.c b/tests/libtest/lib3103.c
index a3e24b678..01d62f658 100644
--- a/lib/wildcard.c
+++ b/tests/libtest/lib3103.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -21,55 +21,46 @@
* SPDX-License-Identifier: curl
*
***************************************************************************/
+#include "test.h"
-#include "curl_setup.h"
-
-#ifndef CURL_DISABLE_FTP
-
-#include "wildcard.h"
-#include "llist.h"
-#include "fileinfo.h"
-/* The last 3 #include files should be in this order */
-#include "curl_printf.h"
-#include "curl_memory.h"
#include "memdebug.h"
-static void fileinfo_dtor(void *user, void *element)
+int test(char *URL)
{
- (void)user;
- Curl_fileinfo_cleanup(element);
-}
+ CURLcode res = CURLE_OK;
+ CURLSH *share;
+ CURL *curl;
-CURLcode Curl_wildcard_init(struct WildcardData *wc)
-{
- Curl_llist_init(&wc->filelist, fileinfo_dtor);
- wc->state = CURLWC_INIT;
+ curl_global_init(CURL_GLOBAL_ALL);
- return CURLE_OK;
-}
+ share = curl_share_init();
+ curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
-void Curl_wildcard_dtor(struct WildcardData *wc)
-{
- if(!wc)
- return;
+ curl = curl_easy_init();
+ test_setopt(curl, CURLOPT_SHARE, share);
- if(wc->dtor) {
- wc->dtor(wc->protdata);
- wc->dtor = ZERO_NULL;
- wc->protdata = NULL;
- }
- DEBUGASSERT(wc->protdata == NULL);
+ test_setopt(curl, CURLOPT_VERBOSE, 1L);
+ test_setopt(curl, CURLOPT_HEADER, 1L);
+ test_setopt(curl, CURLOPT_PROXY, URL);
+ test_setopt(curl, CURLOPT_URL, "http://localhost/");
- Curl_llist_destroy(&wc->filelist, NULL);
+ test_setopt(curl, CURLOPT_COOKIEFILE, "");
+ /* Set a cookie without Max-age or Expires */
+ test_setopt(curl, CURLOPT_COOKIELIST, "Set-Cookie: c1=v1; domain=localhost");
- free(wc->path);
- wc->path = NULL;
- free(wc->pattern);
- wc->pattern = NULL;
+ res = curl_easy_perform(curl);
+ if(res) {
+ fprintf(stderr, "curl_easy_perform() failed: %s\n",
+ curl_easy_strerror(res));
+ }
- wc->customptr = NULL;
- wc->state = CURLWC_INIT;
-}
+test_cleanup:
-#endif /* if disabled */
+ /* always cleanup */
+ curl_easy_cleanup(curl);
+ curl_share_cleanup(share);
+ curl_global_cleanup();
+
+ return (int)res;
+}
diff --git a/tests/libtest/lib500.c b/tests/libtest/lib500.c
index 37cd4b24a..f99b244b4 100644
--- a/tests/libtest/lib500.c
+++ b/tests/libtest/lib500.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib501.c b/tests/libtest/lib501.c
index 544be2b81..7ef850110 100644
--- a/tests/libtest/lib501.c
+++ b/tests/libtest/lib501.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib502.c b/tests/libtest/lib502.c
index 4509d1a01..91f96e6f5 100644
--- a/tests/libtest/lib502.c
+++ b/tests/libtest/lib502.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib503.c b/tests/libtest/lib503.c
index 86dce97cc..15b09476e 100644
--- a/tests/libtest/lib503.c
+++ b/tests/libtest/lib503.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib504.c b/tests/libtest/lib504.c
index a4bfe3589..cbe1d5773 100644
--- a/tests/libtest/lib504.c
+++ b/tests/libtest/lib504.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib505.c b/tests/libtest/lib505.c
index afa8950ed..6c67ed901 100644
--- a/tests/libtest/lib505.c
+++ b/tests/libtest/lib505.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib506.c b/tests/libtest/lib506.c
index b44a275b9..dd4759ac4 100644
--- a/tests/libtest/lib506.c
+++ b/tests/libtest/lib506.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,8 +24,8 @@
#include "test.h"
#include "memdebug.h"
-static const char *HOSTHEADER = "Host: www.host.foo.com";
-static const char *JAR = "log/jar506";
+static const char * const HOSTHEADER = "Host: www.host.foo.com";
+#define JAR libtest_arg2
#define THREADS 2
/* struct containing data of a thread */
@@ -349,7 +349,7 @@ int test(char *URL)
printf("-----------------\n");
curl_slist_free_all(cookies);
- /* try to free share, expect to fail because share is in use*/
+ /* try to free share, expect to fail because share is in use */
printf("try SHARE_CLEANUP...\n");
scode = curl_share_cleanup(share);
if(scode == CURLSHE_OK) {
diff --git a/tests/libtest/lib507.c b/tests/libtest/lib507.c
index c57a612b0..be6dd7eee 100644
--- a/tests/libtest/lib507.c
+++ b/tests/libtest/lib507.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib508.c b/tests/libtest/lib508.c
index f16e2d7a4..b793731b3 100644
--- a/tests/libtest/lib508.c
+++ b/tests/libtest/lib508.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib509.c b/tests/libtest/lib509.c
index 63fb12fbc..cb510ef21 100644
--- a/tests/libtest/lib509.c
+++ b/tests/libtest/lib509.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib510.c b/tests/libtest/lib510.c
index 068cdd7a8..87a85a557 100644
--- a/tests/libtest/lib510.c
+++ b/tests/libtest/lib510.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib511.c b/tests/libtest/lib511.c
index 1262a6b2e..c53224801 100644
--- a/tests/libtest/lib511.c
+++ b/tests/libtest/lib511.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib512.c b/tests/libtest/lib512.c
index 309d0ac59..706acb2e1 100644
--- a/tests/libtest/lib512.c
+++ b/tests/libtest/lib512.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib513.c b/tests/libtest/lib513.c
index f757bac6d..b381098fb 100644
--- a/tests/libtest/lib513.c
+++ b/tests/libtest/lib513.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib514.c b/tests/libtest/lib514.c
index 138bd69df..0f31c8c4c 100644
--- a/tests/libtest/lib514.c
+++ b/tests/libtest/lib514.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib515.c b/tests/libtest/lib515.c
index 661bf6f0f..3c744fb95 100644
--- a/tests/libtest/lib515.c
+++ b/tests/libtest/lib515.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib516.c b/tests/libtest/lib516.c
index b7c9349d0..59abb091a 100644
--- a/tests/libtest/lib516.c
+++ b/tests/libtest/lib516.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -44,7 +44,9 @@ int test(char *URL)
/* First set the URL that is about to receive our POST. */
test_setopt(curl, CURLOPT_URL, URL);
- test_setopt(curl, CURLOPT_HTTPPOST, NULL);
+ CURL_IGNORE_DEPRECATION(
+ test_setopt(curl, CURLOPT_HTTPPOST, NULL);
+ )
test_setopt(curl, CURLOPT_VERBOSE, 1L); /* show verbose for debug */
test_setopt(curl, CURLOPT_HEADER, 1L); /* include header */
diff --git a/tests/libtest/lib517.c b/tests/libtest/lib517.c
index 3726efdfd..7c65a659c 100644
--- a/tests/libtest/lib517.c
+++ b/tests/libtest/lib517.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -34,6 +34,10 @@ static const struct dcheck dates[] = {
{"Sun, 06 Nov 1994 08:49:37 GMT", 784111777 },
{"Sunday, 06-Nov-94 08:49:37 GMT", 784111777 },
{"Sun Nov 6 08:49:37 1994", 784111777 },
+ {"Sun Nov 6 8:49:37 1994", 784111777 },
+ {"Sun Nov 6 8:9:37 1994", 784109377 },
+ {"Sun Nov 6 008:09:37 1994", -1 },
+ {"Nov Sun 6 8:9:7 1994", 784109347 },
{"06 Nov 1994 08:49:37 GMT", 784111777 },
{"06-Nov-94 08:49:37 GMT", 784111777 },
{"Nov 6 08:49:37 1994", 784111777 },
@@ -116,6 +120,9 @@ static const struct dcheck dates[] = {
{"20111323 12:34:56", -1 },
{"20110623 12:34:79", -1 },
{"Wed, 31 Dec 2008 23:59:60 GMT", 1230768000 },
+ {"Wed, 31 Dec 2008 23:59:61 GMT", -1 },
+ {"Wed, 31 Dec 2008 24:00:00 GMT", -1 },
+ {"Wed, 31 Dec 2008 23:60:59 GMT", -1 },
{"20110623 12:3", 1308830580 },
{"20110623 1:3", 1308790980 },
{"20110623 1:30", 1308792600 },
diff --git a/tests/libtest/lib518.c b/tests/libtest/lib518.c
index 22f727a5a..e61d80a6f 100644
--- a/tests/libtest/lib518.c
+++ b/tests/libtest/lib518.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -42,7 +42,7 @@
#define NUM_OPEN (FD_SETSIZE + 10)
#define NUM_NEEDED (NUM_OPEN + SAFETY_MARGIN)
-#if defined(WIN32) || defined(_WIN32) || defined(MSDOS)
+#if defined(_WIN32) || defined(MSDOS)
#define DEV_NULL "NUL"
#else
#define DEV_NULL "/dev/null"
diff --git a/tests/libtest/lib519.c b/tests/libtest/lib519.c
index fecaa9844..bf950bd45 100644
--- a/tests/libtest/lib519.c
+++ b/tests/libtest/lib519.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -49,6 +49,8 @@ int test(char *URL)
/* get first page */
res = curl_easy_perform(curl);
+ if(res)
+ goto test_cleanup;
test_setopt(curl, CURLOPT_USERPWD, "anothermonster:inwardrobe");
diff --git a/tests/libtest/lib520.c b/tests/libtest/lib520.c
index ef7c59442..7e5d0abd7 100644
--- a/tests/libtest/lib520.c
+++ b/tests/libtest/lib520.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib521.c b/tests/libtest/lib521.c
index 8385da6d8..e3611685b 100644
--- a/tests/libtest/lib521.c
+++ b/tests/libtest/lib521.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib523.c b/tests/libtest/lib523.c
index 04285bbee..86128e6c0 100644
--- a/tests/libtest/lib523.c
+++ b/tests/libtest/lib523.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib524.c b/tests/libtest/lib524.c
index af1d5cc70..6b8cc207d 100644
--- a/tests/libtest/lib524.c
+++ b/tests/libtest/lib524.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib525.c b/tests/libtest/lib525.c
index 51ed6581c..3f8abeef1 100644
--- a/tests/libtest/lib525.c
+++ b/tests/libtest/lib525.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib526.c b/tests/libtest/lib526.c
index 0153d984f..12b65c023 100644
--- a/tests/libtest/lib526.c
+++ b/tests/libtest/lib526.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -109,7 +109,7 @@ int test(char *URL)
/* first remove the only handle we use */
curl_multi_remove_handle(m, curl[0]);
- /* make us re-use the same handle all the time, and try resetting
+ /* make us reuse the same handle all the time, and try resetting
the handle first too */
curl_easy_reset(curl[0]);
easy_setopt(curl[0], CURLOPT_URL, URL);
diff --git a/tests/libtest/lib530.c b/tests/libtest/lib530.c
index 22577275c..0173dd978 100644
--- a/tests/libtest/lib530.c
+++ b/tests/libtest/lib530.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -162,7 +162,7 @@ static int curlTimerCallback(CURLM *multi, long timeout_ms, void *userp)
}
if(timeout_ms != -1) {
*timeout = tutil_tvnow();
- timeout->tv_usec += timeout_ms * 1000;
+ timeout->tv_usec += (int)timeout_ms * 1000;
}
else {
timeout->tv_sec = -1;
diff --git a/tests/libtest/lib533.c b/tests/libtest/lib533.c
index ddc96f762..0f6a89c2f 100644
--- a/tests/libtest/lib533.c
+++ b/tests/libtest/lib533.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -75,7 +75,7 @@ int test(char *URL)
/* remove the handle we use */
curl_multi_remove_handle(m, curl);
- /* make us re-use the same handle all the time, and try resetting
+ /* make us reuse the same handle all the time, and try resetting
the handle first too */
curl_easy_reset(curl);
easy_setopt(curl, CURLOPT_URL, libtest_arg2);
diff --git a/tests/libtest/lib537.c b/tests/libtest/lib537.c
index dbced98dc..8735947cf 100644
--- a/tests/libtest/lib537.c
+++ b/tests/libtest/lib537.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -42,7 +42,7 @@
#define SAFETY_MARGIN (11)
-#if defined(WIN32) || defined(_WIN32) || defined(MSDOS)
+#if defined(_WIN32) || defined(MSDOS)
#define DEV_NULL "NUL"
#else
#define DEV_NULL "/dev/null"
diff --git a/tests/libtest/lib539.c b/tests/libtest/lib539.c
index 9450963dc..75f146c00 100644
--- a/tests/libtest/lib539.c
+++ b/tests/libtest/lib539.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -70,7 +70,7 @@ int test(char *URL)
slist = curl_slist_append(NULL, "SYST");
if(!slist) {
- free(newURL);
+ curl_free(newURL);
curl_easy_cleanup(curl);
curl_global_cleanup();
return TEST_ERR_MAJOR_BAD;
@@ -85,7 +85,7 @@ int test(char *URL)
test_cleanup:
curl_slist_free_all(slist);
- free(newURL);
+ curl_free(newURL);
curl_easy_cleanup(curl);
curl_global_cleanup();
diff --git a/tests/libtest/lib540.c b/tests/libtest/lib540.c
index d8b7a0d84..ab9fef9b4 100644
--- a/tests/libtest/lib540.c
+++ b/tests/libtest/lib540.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -143,7 +143,12 @@ static int loop(int num, CURLM *cm, const char *url, const char *userpwd,
/* At this point, L is guaranteed to be greater or equal than -1. */
if(L != -1) {
- int itimeout = (L > (long)INT_MAX) ? INT_MAX : (int)L;
+ int itimeout;
+#if LONG_MAX > INT_MAX
+ itimeout = (L > INT_MAX) ? INT_MAX : (int)L;
+#else
+ itimeout = (int)L;
+#endif
T.tv_sec = itimeout/1000;
T.tv_usec = (itimeout%1000)*1000;
}
diff --git a/tests/libtest/lib541.c b/tests/libtest/lib541.c
index 20d11e2dd..75c74fbff 100644
--- a/tests/libtest/lib541.c
+++ b/tests/libtest/lib541.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -99,7 +99,9 @@ int test(char *URL)
test_setopt(curl, CURLOPT_READDATA, hd_src);
/* Now run off and do what you've been told! */
- curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
+ if(res)
+ goto test_cleanup;
/* and now upload the exact same again, but without rewinding so it already
is at end of file */
diff --git a/tests/libtest/lib542.c b/tests/libtest/lib542.c
index d762b13c2..27429fd6c 100644
--- a/tests/libtest/lib542.c
+++ b/tests/libtest/lib542.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib543.c b/tests/libtest/lib543.c
index cea6dc9a5..2bec2f1a6 100644
--- a/tests/libtest/lib543.c
+++ b/tests/libtest/lib543.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib544.c b/tests/libtest/lib544.c
index 42710e1b9..a58fa05e3 100644
--- a/tests/libtest/lib544.c
+++ b/tests/libtest/lib544.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -63,7 +63,6 @@ int test(char *URL)
/* Update the original data to detect non-copy. */
strcpy(teststring, "FAIL");
-#ifdef LIB545
{
CURL *handle2;
handle2 = curl_easy_duphandle(curl);
@@ -71,7 +70,6 @@ int test(char *URL)
curl = handle2;
}
-#endif
/* Now, this is a POST request with binary 0 embedded in POST data. */
res = curl_easy_perform(curl);
diff --git a/tests/libtest/lib547.c b/tests/libtest/lib547.c
index 647afc63d..dbe657e9d 100644
--- a/tests/libtest/lib547.c
+++ b/tests/libtest/lib547.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -100,8 +100,10 @@ int test(char *URL)
test_setopt(curl, CURLOPT_POSTFIELDS, UPLOADTHIS);
#else
/* 547 style, which means reading the POST data from a callback */
- test_setopt(curl, CURLOPT_IOCTLFUNCTION, ioctlcallback);
- test_setopt(curl, CURLOPT_IOCTLDATA, &counter);
+ CURL_IGNORE_DEPRECATION(
+ test_setopt(curl, CURLOPT_IOCTLFUNCTION, ioctlcallback);
+ test_setopt(curl, CURLOPT_IOCTLDATA, &counter);
+ )
test_setopt(curl, CURLOPT_READFUNCTION, readcallback);
test_setopt(curl, CURLOPT_READDATA, &counter);
/* We CANNOT do the POST fine without setting the size (or choose
diff --git a/tests/libtest/lib549.c b/tests/libtest/lib549.c
index d4861d885..8e91d9356 100644
--- a/tests/libtest/lib549.c
+++ b/tests/libtest/lib549.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib552.c b/tests/libtest/lib552.c
index 764e861fb..13726c6b4 100644
--- a/tests/libtest/lib552.c
+++ b/tests/libtest/lib552.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -200,7 +200,9 @@ int test(char *URL)
test_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
/* Ioctl function */
- test_setopt(curl, CURLOPT_IOCTLFUNCTION, ioctl_callback);
+ CURL_IGNORE_DEPRECATION(
+ test_setopt(curl, CURLOPT_IOCTLFUNCTION, ioctl_callback);
+ )
test_setopt(curl, CURLOPT_PROXY, libtest_arg2);
@@ -211,7 +213,6 @@ int test(char *URL)
test_setopt(curl, CURLOPT_PROXYAUTH, (long)CURLAUTH_ANY);
res = curl_easy_perform(curl);
- fprintf(stderr, "curl_easy_perform = %d\n", (int)res);
test_cleanup:
diff --git a/tests/libtest/lib553.c b/tests/libtest/lib553.c
index 0ab0e3e50..f282c8950 100644
--- a/tests/libtest/lib553.c
+++ b/tests/libtest/lib553.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib554.c b/tests/libtest/lib554.c
index 3e6f511a2..1d049815c 100644
--- a/tests/libtest/lib554.c
+++ b/tests/libtest/lib554.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -21,6 +21,7 @@
* SPDX-License-Identifier: curl
*
***************************************************************************/
+#define CURL_DISABLE_DEPRECATION /* Using and testing the form api */
#include "test.h"
#include "memdebug.h"
diff --git a/tests/libtest/lib555.c b/tests/libtest/lib555.c
index 29e43f8f0..6e3e30b13 100644
--- a/tests/libtest/lib555.c
+++ b/tests/libtest/lib555.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -95,8 +95,10 @@ int test(char *URL)
easy_setopt(curl, CURLOPT_HEADER, 1L);
/* read the POST data from a callback */
- easy_setopt(curl, CURLOPT_IOCTLFUNCTION, ioctlcallback);
- easy_setopt(curl, CURLOPT_IOCTLDATA, &counter);
+ CURL_IGNORE_DEPRECATION(
+ easy_setopt(curl, CURLOPT_IOCTLFUNCTION, ioctlcallback);
+ easy_setopt(curl, CURLOPT_IOCTLDATA, &counter);
+ )
easy_setopt(curl, CURLOPT_READFUNCTION, readcallback);
easy_setopt(curl, CURLOPT_READDATA, &counter);
/* We CANNOT do the POST fine without setting the size (or choose
diff --git a/tests/libtest/lib556.c b/tests/libtest/lib556.c
index a391d5a00..ead6529ea 100644
--- a/tests/libtest/lib556.c
+++ b/tests/libtest/lib556.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -61,7 +61,7 @@ int test(char *URL)
res = curl_easy_perform(curl);
if(!res) {
- /* we are connected, now get a HTTP document the raw way */
+ /* we are connected, now get an HTTP document the raw way */
const char *request =
"GET /556 HTTP/1.1\r\n"
"Host: ninja\r\n\r\n";
diff --git a/tests/libtest/lib557.c b/tests/libtest/lib557.c
index 578ab713b..6f96668da 100644
--- a/tests/libtest/lib557.c
+++ b/tests/libtest/lib557.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -27,6 +27,8 @@
* curl_m*printf formatting capabilities and handling of some data types.
*/
+#define CURL_NO_FMT_CHECKS /* disable compiler *printf format checks */
+
#include "test.h"
#include <limits.h>
@@ -1008,118 +1010,6 @@ static int test_curl_off_t_formatting(void)
int num_cofft_tests = 0;
int failed = 0;
-#if (SIZEOF_CURL_OFF_T == 2)
-
- i = 1; co_test[i].num = MPRNT_OFF_T_C(0x7FFF); co_test[i].expected = "32767";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFE); co_test[i].expected = "32766";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFD); co_test[i].expected = "32765";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x7F00); co_test[i].expected = "32512";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x07F0); co_test[i].expected = "2032";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x007F); co_test[i].expected = "127";
-
- i++; co_test[i].num = MPRNT_OFF_T_C(0x7000); co_test[i].expected = "28672";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x0700); co_test[i].expected = "1792";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x0070); co_test[i].expected = "112";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x0007); co_test[i].expected = "7";
-
- i++; co_test[i].num = MPRNT_OFF_T_C(0x5000); co_test[i].expected = "20480";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x0500); co_test[i].expected = "1280";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x0050); co_test[i].expected = "80";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x0005); co_test[i].expected = "5";
-
- i++; co_test[i].num = MPRNT_OFF_T_C(0x0001); co_test[i].expected = "1";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x0000); co_test[i].expected = "0";
-
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFF) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32768";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFE) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32767";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFD) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32766";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x7F00) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32513";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x07F0) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2033";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x007F) -MPRNT_OFF_T_C(1); co_test[i].expected = "-128";
-
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x7000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-28673";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x0700) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1793";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x0070) -MPRNT_OFF_T_C(1); co_test[i].expected = "-113";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x0007) -MPRNT_OFF_T_C(1); co_test[i].expected = "-8";
-
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x5000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-20481";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x0500) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1281";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x0050) -MPRNT_OFF_T_C(1); co_test[i].expected = "-81";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x0005) -MPRNT_OFF_T_C(1); co_test[i].expected = "-6";
-
- i++; co_test[i].num = MPRNT_OFF_T_C(0x0000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1";
-
- num_cofft_tests = i;
-
-#elif (SIZEOF_CURL_OFF_T == 4)
-
- i = 1; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFF); co_test[i].expected = "2147483647";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFE); co_test[i].expected = "2147483646";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFD); co_test[i].expected = "2147483645";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFF0000); co_test[i].expected = "2147418112";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x00007FFF); co_test[i].expected = "32767";
-
- i++; co_test[i].num = MPRNT_OFF_T_C(0x7F000000); co_test[i].expected = "2130706432";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x007F0000); co_test[i].expected = "8323072";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x00007F00); co_test[i].expected = "32512";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x0000007F); co_test[i].expected = "127";
-
- i++; co_test[i].num = MPRNT_OFF_T_C(0x70000000); co_test[i].expected = "1879048192";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x07000000); co_test[i].expected = "117440512";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x00700000); co_test[i].expected = "7340032";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x00070000); co_test[i].expected = "458752";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x00007000); co_test[i].expected = "28672";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x00000700); co_test[i].expected = "1792";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x00000070); co_test[i].expected = "112";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x00000007); co_test[i].expected = "7";
-
- i++; co_test[i].num = MPRNT_OFF_T_C(0x50000000); co_test[i].expected = "1342177280";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x05000000); co_test[i].expected = "83886080";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x00500000); co_test[i].expected = "5242880";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x00050000); co_test[i].expected = "327680";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x00005000); co_test[i].expected = "20480";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x00000500); co_test[i].expected = "1280";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x00000050); co_test[i].expected = "80";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x00000005); co_test[i].expected = "5";
-
- i++; co_test[i].num = MPRNT_OFF_T_C(0x00000001); co_test[i].expected = "1";
- i++; co_test[i].num = MPRNT_OFF_T_C(0x00000000); co_test[i].expected = "0";
-
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFFFFFF) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2147483648";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFFFFFE) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2147483647";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFFFFFD) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2147483646";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFF0000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2147418113";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x00007FFF) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32768";
-
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x7F000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2130706433";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x007F0000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-8323073";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x00007F00) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32513";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000007F) -MPRNT_OFF_T_C(1); co_test[i].expected = "-128";
-
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x70000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1879048193";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x07000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-117440513";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x00700000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-7340033";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x00070000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-458753";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x00007000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-28673";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000700) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1793";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000070) -MPRNT_OFF_T_C(1); co_test[i].expected = "-113";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000007) -MPRNT_OFF_T_C(1); co_test[i].expected = "-8";
-
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x50000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1342177281";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x05000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-83886081";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x00500000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-5242881";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x00050000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-327681";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x00005000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-20481";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000500) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1281";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000050) -MPRNT_OFF_T_C(1); co_test[i].expected = "-81";
- i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000005) -MPRNT_OFF_T_C(1); co_test[i].expected = "-6";
-
- i++; co_test[i].num = MPRNT_OFF_T_C(0x00000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1";
-
- num_cofft_tests = i;
-
-#elif (SIZEOF_CURL_OFF_T == 8)
-
i = 1; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFFFFFFFFFF); co_test[i].expected = "9223372036854775807";
i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFFFFFFFFFE); co_test[i].expected = "9223372036854775806";
i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFFFFFFFFFD); co_test[i].expected = "9223372036854775805";
@@ -1201,8 +1091,6 @@ static int test_curl_off_t_formatting(void)
num_cofft_tests = i;
-#endif
-
for(i = 1; i <= num_cofft_tests; i++) {
for(j = 0; j<BUFSZ; j++)
@@ -1345,7 +1233,7 @@ static int test_weird_arguments(void)
"0123456789" /* 10 7 */
"0123456789" /* 10 8 */
"0123456789" /* 10 9 */
- "0123456789" /* 10 10*/
+ "0123456789" /* 10 10 */
"0123456789" /* 10 11 */
"01234567" /* 8 */
);
diff --git a/tests/libtest/lib558.c b/tests/libtest/lib558.c
index 30792c99d..1f42aa3b7 100644
--- a/tests/libtest/lib558.c
+++ b/tests/libtest/lib558.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib559.c b/tests/libtest/lib559.c
index 89dbc2d26..8b06fb451 100644
--- a/tests/libtest/lib559.c
+++ b/tests/libtest/lib559.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib560.c b/tests/libtest/lib560.c
index 7dd48e4b5..d643b7e76 100644
--- a/tests/libtest/lib560.c
+++ b/tests/libtest/lib560.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -30,7 +30,7 @@
#define TEST_HANG_TIMEOUT 60 * 1000
/*
- * Simply download a HTTPS file!
+ * Simply download an HTTPS file!
*
* This test was added after the HTTPS-using-multi-interface with OpenSSL
* regression of 7.19.1 to hopefully prevent this embarrassing mistake from
diff --git a/tests/libtest/lib562.c b/tests/libtest/lib562.c
index d99010820..8b9807e37 100644
--- a/tests/libtest/lib562.c
+++ b/tests/libtest/lib562.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib564.c b/tests/libtest/lib564.c
index 9516a2575..6c785feac 100644
--- a/tests/libtest/lib564.c
+++ b/tests/libtest/lib564.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib566.c b/tests/libtest/lib566.c
index ea3ec42ae..7d695ad5e 100644
--- a/tests/libtest/lib566.c
+++ b/tests/libtest/lib566.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -51,8 +51,10 @@ int test(char *URL)
if(!res) {
FILE *moo;
- res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD,
- &content_length);
+ CURL_IGNORE_DEPRECATION(
+ res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD,
+ &content_length);
+ )
moo = fopen(libtest_arg2, "wb");
if(moo) {
fprintf(moo, "CL %.0f\n", content_length);
diff --git a/tests/libtest/lib567.c b/tests/libtest/lib567.c
index de03f5ef2..00937e71d 100644
--- a/tests/libtest/lib567.c
+++ b/tests/libtest/lib567.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib568.c b/tests/libtest/lib568.c
index 271738b0c..97304fa58 100644
--- a/tests/libtest/lib568.c
+++ b/tests/libtest/lib568.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -75,16 +75,16 @@ int test(char *URL)
goto test_cleanup;
}
test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
- free(stream_uri);
+ curl_free(stream_uri);
stream_uri = NULL;
- sdp = open("log/file568.txt", O_RDONLY);
+ sdp = open(libtest_arg2, O_RDONLY);
fstat(sdp, &file_info);
close(sdp);
- sdpf = fopen("log/file568.txt", "rb");
+ sdpf = fopen(libtest_arg2, "rb");
if(!sdpf) {
- fprintf(stderr, "can't open log/file568.txt\n");
+ fprintf(stderr, "can't open %s\n", libtest_arg2);
res = TEST_ERR_MAJOR_BAD;
goto test_cleanup;
}
@@ -110,7 +110,7 @@ int test(char *URL)
goto test_cleanup;
}
test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
- free(stream_uri);
+ curl_free(stream_uri);
stream_uri = NULL;
test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_DESCRIBE);
@@ -126,7 +126,7 @@ int test(char *URL)
goto test_cleanup;
}
test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
- free(stream_uri);
+ curl_free(stream_uri);
stream_uri = NULL;
custom_headers = curl_slist_append(custom_headers,
@@ -156,7 +156,7 @@ int test(char *URL)
goto test_cleanup;
}
test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
- free(stream_uri);
+ curl_free(stream_uri);
stream_uri = NULL;
test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_OPTIONS);
@@ -167,7 +167,7 @@ test_cleanup:
if(sdpf)
fclose(sdpf);
- free(stream_uri);
+ curl_free(stream_uri);
if(custom_headers)
curl_slist_free_all(custom_headers);
diff --git a/tests/libtest/lib569.c b/tests/libtest/lib569.c
index 7daea8470..da95bb955 100644
--- a/tests/libtest/lib569.c
+++ b/tests/libtest/lib569.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -85,7 +85,7 @@ int test(char *URL)
goto test_cleanup;
}
test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
- free(stream_uri);
+ curl_free(stream_uri);
stream_uri = NULL;
test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_SETUP);
@@ -105,7 +105,7 @@ int test(char *URL)
goto test_cleanup;
}
test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
- free(stream_uri);
+ curl_free(stream_uri);
stream_uri = NULL;
test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_TEARDOWN);
@@ -120,7 +120,7 @@ test_cleanup:
if(idfile)
fclose(idfile);
- free(stream_uri);
+ curl_free(stream_uri);
curl_easy_cleanup(curl);
curl_global_cleanup();
diff --git a/tests/libtest/lib570.c b/tests/libtest/lib570.c
index ccd152b8d..392c398a8 100644
--- a/tests/libtest/lib570.c
+++ b/tests/libtest/lib570.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -63,7 +63,7 @@ int test(char *URL)
goto test_cleanup;
}
test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
- free(stream_uri);
+ curl_free(stream_uri);
stream_uri = NULL;
res = curl_easy_perform(curl);
@@ -84,7 +84,7 @@ int test(char *URL)
goto test_cleanup;
}
test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
- free(stream_uri);
+ curl_free(stream_uri);
stream_uri = NULL;
res = curl_easy_perform(curl);
@@ -99,7 +99,7 @@ int test(char *URL)
goto test_cleanup;
}
test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
- free(stream_uri);
+ curl_free(stream_uri);
stream_uri = NULL;
res = curl_easy_perform(curl);
@@ -112,7 +112,7 @@ int test(char *URL)
}
test_cleanup:
- free(stream_uri);
+ curl_free(stream_uri);
curl_easy_cleanup(curl);
curl_global_cleanup();
diff --git a/tests/libtest/lib571.c b/tests/libtest/lib571.c
index 8027c90d5..c4ae67d4b 100644
--- a/tests/libtest/lib571.c
+++ b/tests/libtest/lib571.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -48,7 +48,7 @@
((int)((unsigned char)((p)[3]))))
#define RTP_DATA_SIZE 12
-static const char *RTP_DATA = "$_1234\n\0asdf";
+static const char *RTP_DATA = "$_1234\n\0Rsdf";
static int rtp_packet_count = 0;
@@ -76,14 +76,14 @@ static size_t rtp_write(void *ptr, size_t size, size_t nmemb, void *stream)
if(message_size - i > RTP_DATA_SIZE) {
if(memcmp(RTP_DATA, data + i, RTP_DATA_SIZE) != 0) {
printf("RTP PAYLOAD CORRUPTED [%s]\n", data + i);
- return failure;
+ /* return failure; */
}
}
else {
if(memcmp(RTP_DATA, data + i, message_size - i) != 0) {
printf("RTP PAYLOAD END CORRUPTED (%d), [%s]\n",
message_size - i, data + i);
- return failure;
+ /* return failure; */
}
}
}
@@ -134,11 +134,11 @@ int test(char *URL)
goto test_cleanup;
}
test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
- free(stream_uri);
+ curl_free(stream_uri);
stream_uri = NULL;
test_setopt(curl, CURLOPT_INTERLEAVEFUNCTION, rtp_write);
- test_setopt(curl, CURLOPT_TIMEOUT, 3L);
+ test_setopt(curl, CURLOPT_TIMEOUT, 30L);
test_setopt(curl, CURLOPT_VERBOSE, 1L);
test_setopt(curl, CURLOPT_WRITEDATA, protofile);
@@ -156,7 +156,7 @@ int test(char *URL)
goto test_cleanup;
}
test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
- free(stream_uri);
+ curl_free(stream_uri);
stream_uri = NULL;
test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_PLAY);
@@ -171,7 +171,7 @@ int test(char *URL)
goto test_cleanup;
}
test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
- free(stream_uri);
+ curl_free(stream_uri);
stream_uri = NULL;
test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_DESCRIBE);
@@ -185,7 +185,7 @@ int test(char *URL)
goto test_cleanup;
}
test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
- free(stream_uri);
+ curl_free(stream_uri);
stream_uri = NULL;
test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_PLAY);
@@ -196,14 +196,14 @@ int test(char *URL)
fprintf(stderr, "PLAY COMPLETE\n");
/* Use Receive to get the rest of the data */
- while(!res && rtp_packet_count < 13) {
+ while(!res && rtp_packet_count < 19) {
fprintf(stderr, "LOOPY LOOP!\n");
test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_RECEIVE);
res = curl_easy_perform(curl);
}
test_cleanup:
- free(stream_uri);
+ curl_free(stream_uri);
if(protofile)
fclose(protofile);
diff --git a/tests/libtest/lib572.c b/tests/libtest/lib572.c
index 0cc56eed4..b199c4895 100644
--- a/tests/libtest/lib572.c
+++ b/tests/libtest/lib572.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -78,7 +78,7 @@ int test(char *URL)
goto test_cleanup;
}
test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
- free(stream_uri);
+ curl_free(stream_uri);
stream_uri = NULL;
test_setopt(curl, CURLOPT_RTSP_TRANSPORT, "Planes/Trains/Automobiles");
@@ -93,17 +93,17 @@ int test(char *URL)
goto test_cleanup;
}
test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
- free(stream_uri);
+ curl_free(stream_uri);
stream_uri = NULL;
/* PUT style GET_PARAMETERS */
- params = open("log/file572.txt", O_RDONLY);
+ params = open(libtest_arg2, O_RDONLY);
fstat(params, &file_info);
close(params);
- paramsf = fopen("log/file572.txt", "rb");
+ paramsf = fopen(libtest_arg2, "rb");
if(!paramsf) {
- fprintf(stderr, "can't open log/file572.txt\n");
+ fprintf(stderr, "can't open %s\n", libtest_arg2);
res = TEST_ERR_MAJOR_BAD;
goto test_cleanup;
}
@@ -128,7 +128,7 @@ int test(char *URL)
goto test_cleanup;
}
test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
- free(stream_uri);
+ curl_free(stream_uri);
stream_uri = NULL;
res = curl_easy_perform(curl);
@@ -143,7 +143,7 @@ int test(char *URL)
goto test_cleanup;
}
test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
- free(stream_uri);
+ curl_free(stream_uri);
stream_uri = NULL;
test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_GET_PARAMETER);
@@ -162,7 +162,7 @@ int test(char *URL)
goto test_cleanup;
}
test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);
- free(stream_uri);
+ curl_free(stream_uri);
stream_uri = NULL;
test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_OPTIONS);
@@ -173,7 +173,7 @@ test_cleanup:
if(paramsf)
fclose(paramsf);
- free(stream_uri);
+ curl_free(stream_uri);
if(custom_headers)
curl_slist_free_all(custom_headers);
diff --git a/tests/libtest/lib573.c b/tests/libtest/lib573.c
index 02b0aa74c..af140e2db 100644
--- a/tests/libtest/lib573.c
+++ b/tests/libtest/lib573.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib574.c b/tests/libtest/lib574.c
index dbe5c9458..79a9b167e 100644
--- a/tests/libtest/lib574.c
+++ b/tests/libtest/lib574.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -25,6 +25,8 @@
#include "memdebug.h"
+#define TEST_HANG_TIMEOUT (60 * 1000)
+
static int new_fnmatch(void *ptr,
const char *pattern, const char *string)
{
@@ -54,6 +56,7 @@ int test(char *URL)
test_setopt(curl, CURLOPT_URL, URL);
test_setopt(curl, CURLOPT_WILDCARDMATCH, 1L);
test_setopt(curl, CURLOPT_FNMATCH_FUNCTION, new_fnmatch);
+ test_setopt(curl, CURLOPT_TIMEOUT_MS, (long) TEST_HANG_TIMEOUT);
res = curl_easy_perform(curl);
if(res) {
diff --git a/tests/libtest/lib575.c b/tests/libtest/lib575.c
index 1c0475075..1de6e3284 100644
--- a/tests/libtest/lib575.c
+++ b/tests/libtest/lib575.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib576.c b/tests/libtest/lib576.c
index 34677b1c5..7bc475087 100644
--- a/tests/libtest/lib576.c
+++ b/tests/libtest/lib576.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -32,11 +32,6 @@ struct chunk_data {
};
static
-long chunk_bgn(const struct curl_fileinfo *finfo, void *ptr, int remains);
-static
-long chunk_end(void *ptr);
-
-static
long chunk_bgn(const struct curl_fileinfo *finfo, void *ptr, int remains)
{
struct chunk_data *ch_d = ptr;
@@ -76,8 +71,8 @@ long chunk_bgn(const struct curl_fileinfo *finfo, void *ptr, int remains)
}
if(finfo->filetype == CURLFILETYPE_FILE) {
ch_d->print_content = 1;
- printf("Content:\n-----------------------"
- "--------------------------------------\n");
+ printf("Content:\n"
+ "-------------------------------------------------------------\n");
}
if(strcmp(finfo->filename, "someothertext.txt") == 0) {
printf("# THIS CONTENT WAS SKIPPED IN CHUNK_BGN CALLBACK #\n");
diff --git a/tests/libtest/lib578.c b/tests/libtest/lib578.c
index 89c5bf7c6..7c6af9945 100644
--- a/tests/libtest/lib578.c
+++ b/tests/libtest/lib578.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -78,10 +78,10 @@ int test(char *URL)
test_setopt(curl, CURLOPT_POSTFIELDS, data);
/* we want to use our own progress function */
- test_setopt(curl, CURLOPT_NOPROGRESS, 0L);
- test_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_callback);
-
- /* pointer to pass to our read function */
+ CURL_IGNORE_DEPRECATION(
+ test_setopt(curl, CURLOPT_NOPROGRESS, 0L);
+ test_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_callback);
+ )
/* get verbose debug output please */
test_setopt(curl, CURLOPT_VERBOSE, 1L);
diff --git a/tests/libtest/lib579.c b/tests/libtest/lib579.c
index f8f1ae31d..5f962179a 100644
--- a/tests/libtest/lib579.c
+++ b/tests/libtest/lib579.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -139,7 +139,9 @@ int test(char *URL)
/* we want to use our own progress function */
test_setopt(curl, CURLOPT_NOPROGRESS, 0L);
- test_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_callback);
+ CURL_IGNORE_DEPRECATION(
+ test_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_callback);
+ )
/* Perform the request, res will get the return code */
res = curl_easy_perform(curl);
diff --git a/tests/libtest/lib582.c b/tests/libtest/lib582.c
index 3af6e73ae..a50f8a429 100644
--- a/tests/libtest/lib582.c
+++ b/tests/libtest/lib582.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -136,7 +136,7 @@ static int curlTimerCallback(CURLM *multi, long timeout_ms, void *userp)
(void)multi; /* unused */
if(timeout_ms != -1) {
*timeout = tutil_tvnow();
- timeout->tv_usec += timeout_ms * 1000;
+ timeout->tv_usec += (int)timeout_ms * 1000;
}
else {
timeout->tv_sec = -1;
@@ -238,6 +238,8 @@ int test(char *URL)
struct timeval timeout = {-1, 0};
int success = 0;
+ assert(test_argc >= 5);
+
start_test_timing();
if(!libtest_arg3) {
@@ -286,8 +288,8 @@ int test(char *URL)
easy_setopt(curl, CURLOPT_READDATA, hd_src);
easy_setopt(curl, CURLOPT_USERPWD, libtest_arg3);
- easy_setopt(curl, CURLOPT_SSH_PUBLIC_KEYFILE, "curl_client_key.pub");
- easy_setopt(curl, CURLOPT_SSH_PRIVATE_KEYFILE, "curl_client_key");
+ easy_setopt(curl, CURLOPT_SSH_PUBLIC_KEYFILE, test_argv[4]);
+ easy_setopt(curl, CURLOPT_SSH_PRIVATE_KEYFILE, test_argv[5]);
easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t)file_info.st_size);
diff --git a/tests/libtest/lib583.c b/tests/libtest/lib583.c
index 65a2fc48c..ba44b5d25 100644
--- a/tests/libtest/lib583.c
+++ b/tests/libtest/lib583.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -40,6 +40,8 @@ int test(char *URL)
CURLcode res = CURLE_OK;
CURLMcode mres;
+ assert(test_argc >= 4);
+
global_init(CURL_GLOBAL_ALL);
multi_init(multiHandle);
@@ -47,8 +49,8 @@ int test(char *URL)
easy_init(curl);
easy_setopt(curl, CURLOPT_USERPWD, libtest_arg2);
- easy_setopt(curl, CURLOPT_SSH_PUBLIC_KEYFILE, "curl_client_key.pub");
- easy_setopt(curl, CURLOPT_SSH_PRIVATE_KEYFILE, "curl_client_key");
+ easy_setopt(curl, CURLOPT_SSH_PUBLIC_KEYFILE, test_argv[3]);
+ easy_setopt(curl, CURLOPT_SSH_PRIVATE_KEYFILE, test_argv[4]);
easy_setopt(curl, CURLOPT_UPLOAD, 1L);
easy_setopt(curl, CURLOPT_VERBOSE, 1L);
diff --git a/tests/libtest/lib586.c b/tests/libtest/lib586.c
index 8f14869e2..f6e607737 100644
--- a/tests/libtest/lib586.c
+++ b/tests/libtest/lib586.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -131,7 +131,7 @@ static void *fire(void *ptr)
/* test function */
int test(char *URL)
{
- int res;
+ CURLcode res = CURLE_OK;
CURLSHcode scode = CURLSHE_OK;
char *url;
struct Tdata tdata;
@@ -184,8 +184,6 @@ int test(char *URL)
}
- res = 0;
-
/* start treads */
for(i = 1; i <= THREADS; i++) {
@@ -215,9 +213,9 @@ int test(char *URL)
test_setopt(curl, CURLOPT_SHARE, share);
printf("PERFORM\n");
- curl_easy_perform(curl);
+ res = curl_easy_perform(curl);
- /* try to free share, expect to fail because share is in use*/
+ /* try to free share, expect to fail because share is in use */
printf("try SHARE_CLEANUP...\n");
scode = curl_share_cleanup(share);
if(scode == CURLSHE_OK) {
diff --git a/tests/libtest/lib589.c b/tests/libtest/lib589.c
index 017b7dfd7..3a17e31c6 100644
--- a/tests/libtest/lib589.c
+++ b/tests/libtest/lib589.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -56,6 +56,8 @@ int test(char *URL)
test_setopt(curl, CURLOPT_MIMEPOST, mime);
res = curl_easy_perform(curl);
curl_mime_free(mime);
+ if(res)
+ goto test_cleanup;
}
#endif
diff --git a/tests/libtest/lib590.c b/tests/libtest/lib590.c
index 1a885406d..babcd1952 100644
--- a/tests/libtest/lib590.c
+++ b/tests/libtest/lib590.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -64,7 +64,7 @@ int test(char *URL)
res = curl_easy_perform(curl);
- test_cleanup:
+test_cleanup:
curl_easy_cleanup(curl);
curl_global_cleanup();
diff --git a/tests/libtest/lib591.c b/tests/libtest/lib591.c
index 93e30be75..445bb0a9d 100644
--- a/tests/libtest/lib591.c
+++ b/tests/libtest/lib591.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -114,7 +114,12 @@ int test(char *URL)
/* At this point, timeout is guaranteed to be greater or equal than -1. */
if(timeout != -1L) {
- int itimeout = (timeout > (long)INT_MAX) ? INT_MAX : (int)timeout;
+ int itimeout;
+#if LONG_MAX > INT_MAX
+ itimeout = (timeout > (long)INT_MAX) ? INT_MAX : (int)timeout;
+#else
+ itimeout = (int)timeout;
+#endif
interval.tv_sec = itimeout/1000;
interval.tv_usec = (itimeout%1000)*1000;
}
diff --git a/tests/libtest/lib597.c b/tests/libtest/lib597.c
index 4dcf2639d..77ab89413 100644
--- a/tests/libtest/lib597.c
+++ b/tests/libtest/lib597.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -29,7 +29,7 @@
#include "warnless.h"
#include "memdebug.h"
-#define TEST_HANG_TIMEOUT 5 * 1000
+#define TEST_HANG_TIMEOUT 60 * 1000
/*
* Test case for below scenario:
@@ -96,12 +96,17 @@ int test(char *URL)
-1. */
if(timeout != -1L) {
- int itimeout = (timeout > (long)INT_MAX) ? INT_MAX : (int)timeout;
+ int itimeout;
+#if LONG_MAX > INT_MAX
+ itimeout = (timeout > (long)INT_MAX) ? INT_MAX : (int)timeout;
+#else
+ itimeout = (int)timeout;
+#endif
interval.tv_sec = itimeout/1000;
interval.tv_usec = (itimeout%1000)*1000;
}
else {
- interval.tv_sec = TEST_HANG_TIMEOUT/1000 + 1;
+ interval.tv_sec = TEST_HANG_TIMEOUT/1000 - 1;
interval.tv_usec = 0;
}
diff --git a/tests/libtest/lib598.c b/tests/libtest/lib598.c
index e75cad06c..62b365514 100644
--- a/tests/libtest/lib598.c
+++ b/tests/libtest/lib598.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib599.c b/tests/libtest/lib599.c
index 5b35cca03..6002e0fb0 100644
--- a/tests/libtest/lib599.c
+++ b/tests/libtest/lib599.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -64,7 +64,9 @@ int test(char *URL)
/* we want to use our own progress function */
test_setopt(curl, CURLOPT_NOPROGRESS, 0L);
- test_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_callback);
+ CURL_IGNORE_DEPRECATION(
+ test_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_callback);
+ )
/* get verbose debug output please */
test_setopt(curl, CURLOPT_VERBOSE, 1L);
@@ -80,8 +82,10 @@ int test(char *URL)
if(!res) {
FILE *moo;
- res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD,
+ CURL_IGNORE_DEPRECATION(
+ res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD,
&content_length);
+ )
moo = fopen(libtest_arg2, "wb");
if(moo) {
fprintf(moo, "CL %.0f\n", content_length);
diff --git a/tests/libtest/lib643.c b/tests/libtest/lib643.c
index 5326d6d4b..efd508f8d 100644
--- a/tests/libtest/lib643.c
+++ b/tests/libtest/lib643.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -35,23 +35,6 @@ struct WriteThis {
static size_t read_callback(char *ptr, size_t size, size_t nmemb, void *userp)
{
-#ifdef LIB644
- static int count = 0;
- (void)ptr;
- (void)size;
- (void)nmemb;
- (void)userp;
- switch(count++) {
- case 0: /* Return a single byte. */
- *ptr = '\n';
- return 1;
- case 1: /* Request abort. */
- return CURL_READFUNC_ABORT;
- }
- printf("Wrongly called >2 times\n");
- exit(1); /* trigger major failure */
-#else
-
struct WriteThis *pooh = (struct WriteThis *)userp;
int eof = !*pooh->readptr;
@@ -71,7 +54,6 @@ static size_t read_callback(char *ptr, size_t size, size_t nmemb, void *userp)
}
return 0; /* no more data left to deliver */
-#endif
}
static int once(char *URL, bool oldstyle)
diff --git a/tests/libtest/lib650.c b/tests/libtest/lib650.c
index cc2c0edd3..14c79e94b 100644
--- a/tests/libtest/lib650.c
+++ b/tests/libtest/lib650.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -21,6 +21,7 @@
* SPDX-License-Identifier: curl
*
***************************************************************************/
+#define CURL_DISABLE_DEPRECATION /* Using and testing the form api */
#include "test.h"
#include "memdebug.h"
@@ -188,6 +189,9 @@ int test(char *URL)
/* get verbose debug output please */
test_setopt(curl, CURLOPT_VERBOSE, 1L);
+ test_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
+ test_setopt(curl, CURLOPT_POSTREDIR, (long)CURL_REDIR_POST_301);
+
/* include headers in the output */
test_setopt(curl, CURLOPT_HEADER, 1L);
diff --git a/tests/libtest/lib651.c b/tests/libtest/lib651.c
index 8b2d23b47..2e45ccc21 100644
--- a/tests/libtest/lib651.c
+++ b/tests/libtest/lib651.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -21,6 +21,7 @@
* SPDX-License-Identifier: curl
*
***************************************************************************/
+#define CURL_DISABLE_DEPRECATION /* Using and testing the form api */
#include "test.h"
#include "memdebug.h"
diff --git a/tests/libtest/lib652.c b/tests/libtest/lib652.c
index ff5cb3fbf..7a100b731 100644
--- a/tests/libtest/lib652.c
+++ b/tests/libtest/lib652.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib653.c b/tests/libtest/lib653.c
index 46348ae38..8a6fff341 100644
--- a/tests/libtest/lib653.c
+++ b/tests/libtest/lib653.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib654.c b/tests/libtest/lib654.c
index 0d99dd66f..96551637d 100644
--- a/tests/libtest/lib654.c
+++ b/tests/libtest/lib654.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -109,7 +109,7 @@ int test(char *URL)
hdrs = curl_slist_append(hdrs, "X-Test-Number: 654");
curl_mime_headers(part, hdrs, TRUE);
part = curl_mime_addpart(mime);
- curl_mime_filedata(part, "log/file654.txt");
+ curl_mime_filedata(part, libtest_arg2);
part = curl_mime_addpart(mime);
curl_mime_data_cb(part, (curl_off_t) -1, read_callback, NULL, free_callback,
&pooh);
diff --git a/tests/libtest/lib655.c b/tests/libtest/lib655.c
index 7f4053bd1..83525e57d 100644
--- a/tests/libtest/lib655.c
+++ b/tests/libtest/lib655.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib658.c b/tests/libtest/lib658.c
index d6b9935dd..5be239f67 100644
--- a/tests/libtest/lib658.c
+++ b/tests/libtest/lib658.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib659.c b/tests/libtest/lib659.c
index 0b6dddff1..97efbec65 100644
--- a/tests/libtest/lib659.c
+++ b/tests/libtest/lib659.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib661.c b/tests/libtest/lib661.c
index f12a98068..5145937ac 100644
--- a/tests/libtest/lib661.c
+++ b/tests/libtest/lib661.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -51,11 +51,15 @@ int test(char *URL)
test_setopt(curl, CURLOPT_IGNORE_CONTENT_LENGTH, 1L);
test_setopt(curl, CURLOPT_FTP_FILEMETHOD, (long) CURLFTPMETHOD_SINGLECWD);
res = curl_easy_perform(curl);
+ if(res != CURLE_REMOTE_FILE_NOT_FOUND)
+ goto test_cleanup;
- free(newURL);
+ curl_free(newURL);
newURL = aprintf("%s/folderB/661", URL);
test_setopt(curl, CURLOPT_URL, newURL);
res = curl_easy_perform(curl);
+ if(res != CURLE_REMOTE_FILE_NOT_FOUND)
+ goto test_cleanup;
/* test: CURLFTPMETHOD_NOCWD with absolute path should
never emit CWD (for both new and reused easy handle) */
@@ -67,26 +71,32 @@ int test(char *URL)
goto test_cleanup;
}
- free(newURL);
+ curl_free(newURL);
newURL = aprintf("%s/folderA/661", URL);
test_setopt(curl, CURLOPT_URL, newURL);
test_setopt(curl, CURLOPT_VERBOSE, 1L);
test_setopt(curl, CURLOPT_IGNORE_CONTENT_LENGTH, 1L);
test_setopt(curl, CURLOPT_FTP_FILEMETHOD, (long) CURLFTPMETHOD_NOCWD);
res = curl_easy_perform(curl);
+ if(res != CURLE_REMOTE_FILE_NOT_FOUND)
+ goto test_cleanup;
/* curve ball: CWD /folderB before reusing connection with _NOCWD */
- free(newURL);
+ curl_free(newURL);
newURL = aprintf("%s/folderB/661", URL);
test_setopt(curl, CURLOPT_URL, newURL);
test_setopt(curl, CURLOPT_FTP_FILEMETHOD, (long) CURLFTPMETHOD_SINGLECWD);
res = curl_easy_perform(curl);
+ if(res != CURLE_REMOTE_FILE_NOT_FOUND)
+ goto test_cleanup;
- free(newURL);
+ curl_free(newURL);
newURL = aprintf("%s/folderA/661", URL);
test_setopt(curl, CURLOPT_URL, newURL);
test_setopt(curl, CURLOPT_FTP_FILEMETHOD, (long) CURLFTPMETHOD_NOCWD);
res = curl_easy_perform(curl);
+ if(res != CURLE_REMOTE_FILE_NOT_FOUND)
+ goto test_cleanup;
/* test: CURLFTPMETHOD_NOCWD with home-relative path should
not emit CWD for first FTP access after login */
@@ -111,6 +121,8 @@ int test(char *URL)
test_setopt(curl, CURLOPT_FTP_FILEMETHOD, (long) CURLFTPMETHOD_NOCWD);
test_setopt(curl, CURLOPT_QUOTE, slist);
res = curl_easy_perform(curl);
+ if(res)
+ goto test_cleanup;
/* test: CURLFTPMETHOD_SINGLECWD with home-relative path should
not emit CWD for first FTP access after login */
@@ -128,6 +140,8 @@ int test(char *URL)
test_setopt(curl, CURLOPT_FTP_FILEMETHOD, (long) CURLFTPMETHOD_SINGLECWD);
test_setopt(curl, CURLOPT_QUOTE, slist);
res = curl_easy_perform(curl);
+ if(res)
+ goto test_cleanup;
/* test: CURLFTPMETHOD_NOCWD with home-relative path should
not emit CWD for second FTP access when not needed +
@@ -143,8 +157,10 @@ int test(char *URL)
test_cleanup:
+ if(res)
+ fprintf(stderr, "test encountered error %d\n", res);
curl_slist_free_all(slist);
- free(newURL);
+ curl_free(newURL);
curl_easy_cleanup(curl);
curl_global_cleanup();
diff --git a/tests/libtest/lib666.c b/tests/libtest/lib666.c
index 29ddb50a4..62590702e 100644
--- a/tests/libtest/lib666.c
+++ b/tests/libtest/lib666.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib667.c b/tests/libtest/lib667.c
index d8c14da9e..076361add 100644
--- a/tests/libtest/lib667.c
+++ b/tests/libtest/lib667.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib668.c b/tests/libtest/lib668.c
index e58f49de9..35ab758f3 100644
--- a/tests/libtest/lib668.c
+++ b/tests/libtest/lib668.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -98,7 +98,7 @@ int test(char *URL)
curl_mime_name(part, "field3");
/* Regular file part sources early end of data can be detected because
the file size is known. In addition, and EOF test is performed. */
- curl_mime_filedata(part, "log/file668.txt");
+ curl_mime_filedata(part, libtest_arg2);
/* Bind mime data to its easy handle. */
test_setopt(easy, CURLOPT_MIMEPOST, mime);
diff --git a/tests/libtest/lib670.c b/tests/libtest/lib670.c
index 0e6d52500..b348343c2 100644
--- a/tests/libtest/lib670.c
+++ b/tests/libtest/lib670.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -22,13 +22,17 @@
*
***************************************************************************/
-#include <time.h>
+#if !defined(LIB670) && !defined(LIB671)
+#define CURL_DISABLE_DEPRECATION /* Using and testing the form api */
+#endif
#include "test.h"
+#include <time.h>
+
#include "memdebug.h"
-#define PAUSE_TIME 2
+#define PAUSE_TIME 5
static const char name[] = "field";
@@ -211,7 +215,7 @@ int test(char *URL)
mres = curl_multi_fdset(multi, &fdread, &fdwrite, &fdexcept, &maxfd);
if(mres)
break;
-#if defined(WIN32) || defined(_WIN32)
+#if defined(_WIN32)
if(maxfd == -1)
Sleep(100);
else
diff --git a/tests/libtest/lib674.c b/tests/libtest/lib674.c
index 454d5c023..1a01d9c18 100644
--- a/tests/libtest/lib674.c
+++ b/tests/libtest/lib674.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/lib676.c b/tests/libtest/lib676.c
index aac034a05..478d5f3a1 100644
--- a/tests/libtest/lib676.c
+++ b/tests/libtest/lib676.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -45,7 +45,7 @@ int test(char *URL)
test_setopt(curl, CURLOPT_URL, URL);
test_setopt(curl, CURLOPT_HEADER, 1L);
test_setopt(curl, CURLOPT_USERAGENT, "the-moo agent next generation");
- test_setopt(curl, CURLOPT_COOKIEFILE, "log/cookies676");
+ test_setopt(curl, CURLOPT_COOKIEFILE, libtest_arg2);
test_setopt(curl, CURLOPT_VERBOSE, 1L);
res = curl_easy_perform(curl);
diff --git a/tests/libtest/lib677.c b/tests/libtest/lib677.c
index 4102677c5..6dc7e8e17 100644
--- a/tests/libtest/lib677.c
+++ b/tests/libtest/lib677.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -39,27 +39,22 @@ int test(char *URL)
time_t start = time(NULL);
int state = 0;
ssize_t pos = 0;
+ int res = 0;
- curl_global_init(CURL_GLOBAL_DEFAULT);
- mcurl = curl_multi_init();
- if(!mcurl)
- goto fail;
- curl = curl_easy_init();
- if(!curl)
- goto fail;
+ global_init(CURL_GLOBAL_DEFAULT);
+ multi_init(mcurl);
+ easy_init(curl);
- curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
- if(curl_easy_setopt(curl, CURLOPT_URL, URL))
- goto fail;
- curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);
+ easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+ easy_setopt(curl, CURLOPT_URL, URL);
+ easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);
if(curl_multi_add_handle(mcurl, curl))
- goto fail;
+ goto test_cleanup;
while(time(NULL) - start < 5) {
struct curl_waitfd waitfd;
- if(curl_multi_perform(mcurl, &mrun))
- goto fail;
+ multi_perform(mcurl, &mrun);
for(;;) {
int i;
struct CURLMsg *m = curl_multi_info_read(mcurl, &i);
@@ -69,7 +64,7 @@ int test(char *URL)
if(m->msg == CURLMSG_DONE && m->easy_handle == curl) {
curl_easy_getinfo(curl, CURLINFO_ACTIVESOCKET, &sock);
if(sock == CURL_SOCKET_BAD)
- goto fail;
+ goto test_cleanup;
printf("Connected fine, extracted socket. Moving on\n");
}
}
@@ -86,7 +81,14 @@ int test(char *URL)
size_t len = 0;
if(!state) {
- curl_easy_send(curl, cmd + pos, sizeof(cmd) - 1 - pos, &len);
+ CURLcode ec;
+ ec = curl_easy_send(curl, cmd + pos, sizeof(cmd) - 1 - pos, &len);
+ if(ec != CURLE_OK) {
+ fprintf(stderr, "curl_easy_send() failed, with code %d (%s)\n",
+ (int)ec, curl_easy_strerror(ec));
+ res = ec;
+ goto test_cleanup;
+ }
if(len > 0)
pos += len;
else
@@ -97,7 +99,14 @@ int test(char *URL)
}
}
else if(pos < (ssize_t)sizeof(buf)) {
- curl_easy_recv(curl, buf + pos, sizeof(buf) - pos, &len);
+ CURLcode ec;
+ ec = curl_easy_recv(curl, buf + pos, sizeof(buf) - pos, &len);
+ if(ec != CURLE_OK) {
+ fprintf(stderr, "curl_easy_recv() failed, with code %d (%s)\n",
+ (int)ec, curl_easy_strerror(ec));
+ res = ec;
+ goto test_cleanup;
+ }
if(len > 0)
pos += len;
}
@@ -112,11 +121,10 @@ int test(char *URL)
}
curl_multi_remove_handle(mcurl, curl);
- fail:
+test_cleanup:
curl_easy_cleanup(curl);
curl_multi_cleanup(mcurl);
curl_global_cleanup();
- return 0;
+ return res;
}
-
diff --git a/tests/libtest/lib678.c b/tests/libtest/lib678.c
index 23c7f4d4d..942808e2a 100644
--- a/tests/libtest/lib678.c
+++ b/tests/libtest/lib678.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -44,12 +44,12 @@ static int loadfile(const char *filename, void **filedata, size_t *filesize)
else
datasize = (size_t)cert_tell;
if(continue_reading)
- continue_reading = fseek(fInCert, 0, SEEK_SET) == 0;
+ continue_reading = fseek(fInCert, 0, SEEK_SET) == 0;
if(continue_reading)
- data = malloc(datasize + 1);
+ data = malloc(datasize + 1);
if((!data) ||
- ((int)fread(data, datasize, 1, fInCert) != 1))
- continue_reading = FALSE;
+ ((int)fread(data, datasize, 1, fInCert) != 1))
+ continue_reading = FALSE;
fclose(fInCert);
if(!continue_reading) {
free(data);
diff --git a/tests/libtest/libauthretry.c b/tests/libtest/libauthretry.c
index 3de5b3f1d..a71fe20ed 100644
--- a/tests/libtest/libauthretry.c
+++ b/tests/libtest/libauthretry.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/libntlmconnect.c b/tests/libtest/libntlmconnect.c
index 18b1443ab..462b5481c 100644
--- a/tests/libtest/libntlmconnect.c
+++ b/tests/libtest/libntlmconnect.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2012 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -30,7 +30,7 @@
#include "warnless.h"
#include "memdebug.h"
-#define TEST_HANG_TIMEOUT 5 * 1000
+#define TEST_HANG_TIMEOUT 60 * 1000
#define MAX_EASY_HANDLES 3
static int counter[MAX_EASY_HANDLES];
@@ -50,7 +50,9 @@ static size_t callback(char *ptr, size_t size, size_t nmemb, void *data)
counter[idx] += (int)(size * nmemb);
/* Get socket being used for this easy handle, otherwise CURL_SOCKET_BAD */
- code = curl_easy_getinfo(easy[idx], CURLINFO_LASTSOCKET, &longdata);
+ CURL_IGNORE_DEPRECATION(
+ code = curl_easy_getinfo(easy[idx], CURLINFO_LASTSOCKET, &longdata);
+ )
if(CURLE_OK != code) {
fprintf(stderr, "%s:%d curl_easy_getinfo() failed, "
"with code %d (%s)\n",
@@ -117,12 +119,6 @@ int test(char *url)
multi_init(multi);
-#ifdef USE_PIPELINING
- multi_setopt(multi, CURLMOPT_PIPELINING, 1L);
- multi_setopt(multi, CURLMOPT_MAX_HOST_CONNECTIONS, 5L);
- multi_setopt(multi, CURLMOPT_MAX_TOTAL_CONNECTIONS, 10L);
-#endif
-
for(;;) {
struct timeval interval;
fd_set fdread;
@@ -196,7 +192,12 @@ int test(char *url)
__FILE__, __LINE__, num_handles, timeout, running);
if(timeout != -1L) {
- int itimeout = (timeout > (long)INT_MAX) ? INT_MAX : (int)timeout;
+ int itimeout;
+#if LONG_MAX > INT_MAX
+ itimeout = (timeout > (long)INT_MAX) ? INT_MAX : (int)timeout;
+#else
+ itimeout = (int)timeout;
+#endif
interval.tv_sec = itimeout/1000;
interval.tv_usec = (itimeout%1000)*1000;
}
diff --git a/tests/libtest/libprereq.c b/tests/libtest/libprereq.c
index 3aa475c5e..92369d838 100644
--- a/tests/libtest/libprereq.c
+++ b/tests/libtest/libprereq.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2021 - 2022, Max Dymond, <max.dymond@microsoft.com>
+ * Copyright (C) Max Dymond, <max.dymond@microsoft.com>
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/mk-lib1521.pl b/tests/libtest/mk-lib1521.pl
index 1e00be834..e1418a013 100755
--- a/tests/libtest/mk-lib1521.pl
+++ b/tests/libtest/mk-lib1521.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2017 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -31,6 +31,8 @@ my $minlong = "LONG_MIN";
my $maxlong = "LONG_MAX";
# maximum long unsigned value
my $maxulong = "ULONG_MAX";
+my $line = "";
+my $incomment = 0;
print <<HEADER
/***************************************************************************
@@ -40,7 +42,7 @@ print <<HEADER
* | (__| |_| | _ <| |___
* \\___|\\___/|_| \\_\\_____|
*
- * Copyright (C) 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -56,6 +58,7 @@ print <<HEADER
* SPDX-License-Identifier: curl
*
***************************************************************************/
+#define CURL_DISABLE_DEPRECATION /* Deprecated options are tested too */
#include "test.h"
#include "memdebug.h"
#include <limits.h>
@@ -182,7 +185,54 @@ HEADER
;
while(<STDIN>) {
- if($_ =~ /^ CURLOPT\(([^ ]*), ([^ ]*), (\d*)\)/) {
+ s/^\s*(.*?)\s*$/$1/; # Trim.
+ # Remove multi-line comment trail.
+ if($incomment) {
+ if($_ !~ /.*?\*\/\s*(.*)$/) {
+ next;
+ }
+ $_ = $1;
+ $incomment = 0;
+ }
+ if($line ne "") {
+ # Unfold line.
+ $_ = "$line $1";
+ $line = "";
+ }
+ # Remove comments.
+ while($_ =~ /^(.*?)\/\*.*?\*\/(.*)$/) {
+ $_ = "$1 $2";
+ }
+ s/^\s*(.*?)\s*$/$1/; # Trim again.
+ if($_ =~ /^(.*)\/\*/) {
+ $_ = $1;
+ $incomment = 1;
+ }
+ # Ignore preprocessor directives and blank lines.
+ if($_ =~ /^(?:#|$)/) {
+ next;
+ }
+ # Handle lines that may be continued as if they were folded.
+ if($_ !~ /[;,{}]$/) {
+ # Folded line.
+ $line = $_;
+ next;
+ }
+ if($_ =~ / CURL_DEPRECATED\(/) {
+ # Drop deprecation info.
+ if($_ !~ /^(.*?) CURL_DEPRECATED\(.*?"\)(.*)$/) {
+ # Needs unfolding.
+ $line = $_;
+ next;
+ }
+ $_ = $1 . $2;
+ }
+ if($_ =~ /^CURLOPT(?:DEPRECATED)?\(/ && $_ !~ /\),$/) {
+ # Multi-line CURLOPTs need unfolding.
+ $line = $_;
+ next;
+ }
+ if($_ =~ /^CURLOPT(?:DEPRECATED)?\(([^ ]*), ([^ ]*), (\d*)[,)]/) {
my ($name, $type, $val)=($1, $2, $3);
my $w=" ";
my $pref = "${w}res = curl_easy_setopt(curl, $name,";
@@ -258,11 +308,11 @@ while(<STDIN>) {
exit 22; # exit to make this noticed!
}
}
- elsif($_ =~ /^ CURLINFO_NONE/) {
+ elsif($_ =~ /^CURLINFO_NONE/) {
$infomode = 1;
}
elsif($infomode &&
- ($_ =~ /^ CURLINFO_([^ ]*) *= *CURLINFO_([^ ]*)/)) {
+ ($_ =~ /^CURLINFO_([^ ]*) *= *CURLINFO_([^ ]*)/)) {
my ($info, $type)=($1, $2);
my $c = " res = curl_easy_getinfo(curl, CURLINFO_$info,";
my $check = " if(UNEX(res)) {\n geterr(\"$info\", res, __LINE__);\n goto test_cleanup;\n }\n";
diff --git a/tests/libtest/notexists.pl b/tests/libtest/notexists.pl
index e4c13b748..2bc9bb5a3 100755
--- a/tests/libtest/notexists.pl
+++ b/tests/libtest/notexists.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/tests/libtest/sethostname.c b/tests/libtest/sethostname.c
index 3ab1241a9..1e07d26bc 100644
--- a/tests/libtest/sethostname.c
+++ b/tests/libtest/sethostname.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,8 +23,6 @@
***************************************************************************/
#include "curl_setup.h"
-#include "sethostname.h"
-
/*
* we force our own host name, in order to make some tests machine independent
*/
diff --git a/tests/libtest/stub_gssapi.c b/tests/libtest/stub_gssapi.c
index 1e9c80081..85c760c2d 100644
--- a/tests/libtest/stub_gssapi.c
+++ b/tests/libtest/stub_gssapi.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2017 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -65,6 +65,17 @@ struct gss_ctx_id_t_desc_struct {
char creds[MAX_CREDS_LENGTH];
};
+/* simple implementation of strndup(), which isn't portable */
+static char *my_strndup(const char *ptr, size_t len)
+{
+ char *copy = malloc(len + 1);
+ if(!copy)
+ return NULL;
+ memcpy(copy, ptr, len);
+ copy[len] = '\0';
+ return copy;
+}
+
OM_uint32 gss_init_sec_context(OM_uint32 *min,
gss_const_cred_id_t initiator_cred_handle,
gss_ctx_id_t *context_handle,
@@ -172,7 +183,7 @@ OM_uint32 gss_init_sec_context(OM_uint32 *min,
return GSS_S_FAILURE;
}
- ctx = (gss_ctx_id_t) calloc(sizeof(*ctx), 1);
+ ctx = (gss_ctx_id_t) calloc(1, sizeof(*ctx));
if(!ctx) {
*min = GSS_NO_MEMORY;
return GSS_S_FAILURE;
@@ -280,7 +291,7 @@ OM_uint32 gss_import_name(OM_uint32 *min,
return GSS_S_FAILURE;
}
- name = strndup(input_name_buffer->value, input_name_buffer->length);
+ name = my_strndup(input_name_buffer->value, input_name_buffer->length);
if(!name) {
*min = GSS_NO_MEMORY;
return GSS_S_FAILURE;
diff --git a/tests/libtest/stub_gssapi.h b/tests/libtest/stub_gssapi.h
index 36460e90c..d29c69e8a 100644
--- a/tests/libtest/stub_gssapi.h
+++ b/tests/libtest/stub_gssapi.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2017 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -100,85 +100,85 @@ typedef struct gss_channel_bindings_struct {
gss_buffer_desc application_data;
} *gss_channel_bindings_t;
-OM_uint32 gss_release_buffer(OM_uint32 * /*minor_status*/,
- gss_buffer_t /*buffer*/);
-
-OM_uint32 gss_init_sec_context(OM_uint32 * /*minor_status*/,
- gss_const_cred_id_t /*initiator_cred_handle*/,
- gss_ctx_id_t * /*context_handle*/,
- gss_const_name_t /*target_name*/,
- const gss_OID /*mech_type*/,
- OM_uint32 /*req_flags*/,
- OM_uint32 /*time_req*/,
- const gss_channel_bindings_t /*input_chan_bindings*/,
- const gss_buffer_t /*input_token*/,
- gss_OID * /*actual_mech_type*/,
- gss_buffer_t /*output_token*/,
- OM_uint32 * /*ret_flags*/,
- OM_uint32 * /*time_rec*/);
-
-OM_uint32 gss_delete_sec_context(OM_uint32 * /*minor_status*/,
- gss_ctx_id_t * /*context_handle*/,
- gss_buffer_t /*output_token*/);
-
-OM_uint32 gss_inquire_context(OM_uint32 * /*minor_status*/,
- gss_const_ctx_id_t /*context_handle*/,
- gss_name_t * /*src_name*/,
- gss_name_t * /*targ_name*/,
- OM_uint32 * /*lifetime_rec*/,
- gss_OID * /*mech_type*/,
- OM_uint32 * /*ctx_flags*/,
- int * /*locally_initiated*/,
- int * /*open_context*/);
-
-OM_uint32 gss_wrap(OM_uint32 * /*minor_status*/,
- gss_const_ctx_id_t /*context_handle*/,
- int /*conf_req_flag*/,
- gss_qop_t /*qop_req*/,
- const gss_buffer_t /*input_message_buffer*/,
- int * /*conf_state*/,
- gss_buffer_t /*output_message_buffer*/);
-
-OM_uint32 gss_unwrap(OM_uint32 * /*minor_status*/,
- gss_const_ctx_id_t /*context_handle*/,
- const gss_buffer_t /*input_message_buffer*/,
- gss_buffer_t /*output_message_buffer*/,
- int * /*conf_state*/,
- gss_qop_t * /*qop_state*/);
-
-OM_uint32 gss_seal(OM_uint32 * /*minor_status*/,
- gss_ctx_id_t /*context_handle*/,
- int /*conf_req_flag*/,
- int /*qop_req*/,
- gss_buffer_t /*input_message_buffer*/,
- int * /*conf_state*/,
- gss_buffer_t /*output_message_buffer*/);
-
-OM_uint32 gss_unseal(OM_uint32 * /*minor_status*/,
- gss_ctx_id_t /*context_handle*/,
- gss_buffer_t /*input_message_buffer*/,
- gss_buffer_t /*output_message_buffer*/,
- int * /*conf_state*/,
- int * /*qop_state*/);
-
-OM_uint32 gss_import_name(OM_uint32 * /*minor_status*/,
- const gss_buffer_t /*input_name_buffer*/,
- const gss_OID /*input_name_type*/,
- gss_name_t * /*output_name*/);
-
-OM_uint32 gss_release_name(OM_uint32 * /*minor_status*/,
- gss_name_t * /*input_name*/);
-
-OM_uint32 gss_display_name(OM_uint32 * /*minor_status*/,
- gss_const_name_t /*input_name*/,
- gss_buffer_t /*output_name_buffer*/,
- gss_OID * /*output_name_type*/);
-
-OM_uint32 gss_display_status(OM_uint32 * /*minor_status*/,
- OM_uint32 /*status_value*/,
- int /*status_type*/,
- const gss_OID /*mech_type*/,
- OM_uint32 * /*message_context*/,
- gss_buffer_t /*status_string*/);
+OM_uint32 gss_release_buffer(OM_uint32 * /* minor_status */,
+ gss_buffer_t /* buffer */);
+
+OM_uint32 gss_init_sec_context(OM_uint32 * /* minor_status */,
+ gss_const_cred_id_t /* initiator_cred_handle */,
+ gss_ctx_id_t * /* context_handle */,
+ gss_const_name_t /* target_name */,
+ const gss_OID /* mech_type */,
+ OM_uint32 /* req_flags */,
+ OM_uint32 /* time_req */,
+ const gss_channel_bindings_t /* input_chan_bindings */,
+ const gss_buffer_t /* input_token */,
+ gss_OID * /* actual_mech_type */,
+ gss_buffer_t /* output_token */,
+ OM_uint32 * /* ret_flags */,
+ OM_uint32 * /* time_rec */);
+
+OM_uint32 gss_delete_sec_context(OM_uint32 * /* minor_status */,
+ gss_ctx_id_t * /* context_handle */,
+ gss_buffer_t /* output_token */);
+
+OM_uint32 gss_inquire_context(OM_uint32 * /* minor_status */,
+ gss_const_ctx_id_t /* context_handle */,
+ gss_name_t * /* src_name */,
+ gss_name_t * /* targ_name */,
+ OM_uint32 * /* lifetime_rec */,
+ gss_OID * /* mech_type */,
+ OM_uint32 * /* ctx_flags */,
+ int * /* locally_initiated */,
+ int * /* open_context */);
+
+OM_uint32 gss_wrap(OM_uint32 * /* minor_status */,
+ gss_const_ctx_id_t /* context_handle */,
+ int /* conf_req_flag */,
+ gss_qop_t /* qop_req */,
+ const gss_buffer_t /* input_message_buffer */,
+ int * /* conf_state */,
+ gss_buffer_t /* output_message_buffer */);
+
+OM_uint32 gss_unwrap(OM_uint32 * /* minor_status */,
+ gss_const_ctx_id_t /* context_handle */,
+ const gss_buffer_t /* input_message_buffer */,
+ gss_buffer_t /* output_message_buffer */,
+ int * /* conf_state */,
+ gss_qop_t * /* qop_state */);
+
+OM_uint32 gss_seal(OM_uint32 * /* minor_status */,
+ gss_ctx_id_t /* context_handle n */,
+ int /* conf_req_flag */,
+ int /* qop_req */,
+ gss_buffer_t /* input_message_buffer */,
+ int * /* conf_state */,
+ gss_buffer_t /* output_message_buffer */);
+
+OM_uint32 gss_unseal(OM_uint32 * /* minor_status */,
+ gss_ctx_id_t /* context_handle */,
+ gss_buffer_t /* input_message_buffer */,
+ gss_buffer_t /* output_message_buffer */,
+ int * /* conf_state */,
+ int * /* qop_state */);
+
+OM_uint32 gss_import_name(OM_uint32 * /* minor_status */,
+ const gss_buffer_t /* input_name_buffer */,
+ const gss_OID /* input_name_type */,
+ gss_name_t * /* output_name */);
+
+OM_uint32 gss_release_name(OM_uint32 * /* minor_status */,
+ gss_name_t * /* input_name */);
+
+OM_uint32 gss_display_name(OM_uint32 * /* minor_status */,
+ gss_const_name_t /* input_name */,
+ gss_buffer_t /* output_name_buffer */,
+ gss_OID * /* output_name_type */);
+
+OM_uint32 gss_display_status(OM_uint32 * /* minor_status */,
+ OM_uint32 /* status_value */,
+ int /* status_type */,
+ const gss_OID /* mech_type */,
+ OM_uint32 * /* message_context */,
+ gss_buffer_t /* status_string */);
#endif /* HEADER_CURL_GSSAPI_STUBS_H */
diff --git a/tests/libtest/test.h b/tests/libtest/test.h
index badad1d10..7f29db117 100644
--- a/tests/libtest/test.h
+++ b/tests/libtest/test.h
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -42,6 +42,10 @@
#include "curl_printf.h"
+#ifdef _WIN32
+#define sleep(sec) Sleep ((sec)*1000)
+#endif
+
#define test_setopt(A,B,C) \
if((res = curl_easy_setopt((A), (B), (C))) != CURLE_OK) \
goto test_cleanup
@@ -69,9 +73,7 @@ extern int test(char *URL); /* the actual test function provided by each
extern char *hexdump(const unsigned char *buffer, size_t len);
-#ifdef UNITTESTS
extern int unitfail;
-#endif
/*
** TEST_ERR_* values must be greater than CURL_LAST CURLcode in order
@@ -438,12 +440,14 @@ extern int unitfail;
tv_test_start = tutil_tvnow(); \
} while(0)
-#define exe_test_timedout(Y,Z) do { \
- if(tutil_tvdiff(tutil_tvnow(), tv_test_start) > TEST_HANG_TIMEOUT) { \
- fprintf(stderr, "%s:%d ABORTING TEST, since it seems " \
- "that it would have run forever.\n", (Y), (Z)); \
- res = TEST_ERR_RUNS_FOREVER; \
- } \
+#define exe_test_timedout(Y,Z) do { \
+ long timediff = tutil_tvdiff(tutil_tvnow(), tv_test_start); \
+ if(timediff > (TEST_HANG_TIMEOUT)) { \
+ fprintf(stderr, "%s:%d ABORTING TEST, since it seems " \
+ "that it would have run forever (%ld ms > %ld ms)\n", \
+ (Y), (Z), timediff, (long) (TEST_HANG_TIMEOUT)); \
+ res = TEST_ERR_RUNS_FOREVER; \
+ } \
} while(0)
#define res_test_timedout() \
diff --git a/tests/libtest/test1013.pl b/tests/libtest/test1013.pl
index 37f798fb6..aec7fb902 100755
--- a/tests/libtest/test1013.pl
+++ b/tests/libtest/test1013.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/tests/libtest/test1022.pl b/tests/libtest/test1022.pl
index 7339bb4ed..583b8f856 100755
--- a/tests/libtest/test1022.pl
+++ b/tests/libtest/test1022.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/tests/libtest/test307.pl b/tests/libtest/test307.pl
index 688d93446..862f0e972 100755
--- a/tests/libtest/test307.pl
+++ b/tests/libtest/test307.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/tests/libtest/test610.pl b/tests/libtest/test610.pl
index 86c95b890..0ef933068 100755
--- a/tests/libtest/test610.pl
+++ b/tests/libtest/test610.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/tests/libtest/test613.pl b/tests/libtest/test613.pl
index 8d97ed9f7..dee3b1754 100755
--- a/tests/libtest/test613.pl
+++ b/tests/libtest/test613.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -81,7 +81,7 @@ elsif ($ARGV[0] eq "postprocess")
rmdir $dirname || die "$!";
- if ($logfile) {
+ if ($logfile && -s $logfile) {
# Process the directory file to remove all information that
# could be inconsistent from one test run to the next (e.g.
# file date) or may be unsupported on some platforms (e.g.
diff --git a/tests/libtest/testtrace.c b/tests/libtest/testtrace.c
index 6f0ae4ade..f78a9b943 100644
--- a/tests/libtest/testtrace.c
+++ b/tests/libtest/testtrace.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/testtrace.h b/tests/libtest/testtrace.h
index b0773dc8d..35f27b096 100644
--- a/tests/libtest/testtrace.h
+++ b/tests/libtest/testtrace.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/libtest/testutil.c b/tests/libtest/testutil.c
index a46e0f9fc..4a3cd944a 100644
--- a/tests/libtest/testutil.c
+++ b/tests/libtest/testutil.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -26,7 +26,7 @@
#include "testutil.h"
#include "memdebug.h"
-#if defined(WIN32) && !defined(MSDOS)
+#if defined(_WIN32)
struct timeval tutil_tvnow(void)
{
@@ -117,7 +117,6 @@ long tutil_tvdiff(struct timeval newer, struct timeval older)
(long)(newer.tv_usec-older.tv_usec)/1000;
}
-
/*
* Same as tutil_tvdiff but with full usec resolution.
*
@@ -130,3 +129,34 @@ double tutil_tvdiff_secs(struct timeval newer, struct timeval older)
(double)(newer.tv_usec-older.tv_usec)/1000000.0;
return (double)(newer.tv_usec-older.tv_usec)/1000000.0;
}
+
+#ifdef _WIN32
+HMODULE win32_load_system_library(const TCHAR *filename)
+{
+ size_t filenamelen = _tcslen(filename);
+ size_t systemdirlen = GetSystemDirectory(NULL, 0);
+ size_t written;
+ TCHAR *path;
+
+ if(!filenamelen || filenamelen > 32768 ||
+ !systemdirlen || systemdirlen > 32768)
+ return NULL;
+
+ /* systemdirlen includes null character */
+ path = malloc(sizeof(TCHAR) * (systemdirlen + 1 + filenamelen));
+ if(!path)
+ return NULL;
+
+ /* if written >= systemdirlen then nothing was written */
+ written = GetSystemDirectory(path, (unsigned int)systemdirlen);
+ if(!written || written >= systemdirlen)
+ return NULL;
+
+ if(path[written - 1] != _T('\\'))
+ path[written++] = _T('\\');
+
+ _tcscpy(path + written, filename);
+
+ return LoadLibrary(path);
+}
+#endif
diff --git a/tests/libtest/testutil.h b/tests/libtest/testutil.h
index 94550fc01..9f063795a 100644
--- a/tests/libtest/testutil.h
+++ b/tests/libtest/testutil.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -42,5 +42,8 @@ long tutil_tvdiff(struct timeval t1, struct timeval t2);
*/
double tutil_tvdiff_secs(struct timeval t1, struct timeval t2);
+#ifdef _WIN32
+HMODULE win32_load_system_library(const TCHAR *filename);
+#endif
#endif /* HEADER_CURL_LIBTEST_TESTUTIL_H */
diff --git a/tests/manpage-scan.pl b/tests/manpage-scan.pl
index 040d5177e..c09e979d0 100755
--- a/tests/manpage-scan.pl
+++ b/tests/manpage-scan.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2016 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -67,9 +67,9 @@ my %alias = (
sub scanmanpage {
my ($file, @words) = @_;
- open(M, "<$file");
+ open(my $mh, "<", "$file");
my @m;
- while(<M>) {
+ while(<$mh>) {
if($_ =~ /^\.IP (.*)/) {
my $w = $1;
# "unquote" minuses
@@ -77,7 +77,7 @@ sub scanmanpage {
push @m, $w;
}
}
- close(M);
+ close($mh);
foreach my $m (@words) {
my @g = grep(/$m/, @m);
@@ -88,22 +88,24 @@ sub scanmanpage {
}
}
-# check for define alises
-open(R, "<$curlh") ||
+my $r;
+
+# check for define aliases
+open($r, "<", "$curlh") ||
die "no curl.h";
-while(<R>) {
+while(<$r>) {
if(/^\#define (CURL(OPT|INFO|MOPT)_\w+) (.*)/) {
$alias{$1}=$3;
}
}
-close(R);
+close($r);
my @curlopt;
my @curlinfo;
my @curlmopt;
-open(R, "<$syms") ||
+open($r, "<", "$syms") ||
die "no input file";
-while(<R>) {
+while(<$r>) {
chomp;
my $l= $_;
if($l =~ /(CURL(OPT|INFO|MOPT)_\w+) *([0-9.]*) *([0-9.-]*) *([0-9.]*)/) {
@@ -133,7 +135,7 @@ while(<R>) {
}
}
}
-close(R);
+close($r);
scanmanpage("$root/docs/libcurl/curl_easy_setopt.3", @curlopt);
scanmanpage("$root/docs/libcurl/curl_easy_getinfo.3", @curlinfo);
@@ -174,12 +176,12 @@ my %opts = (
#########################################################################
# parse the curl code that parses the command line arguments!
-open(R, "<$root/src/tool_getparam.c") ||
+open($r, "<", "$root/src/tool_getparam.c") ||
die "no input file";
my $list;
my @getparam; # store all parsed parameters
-while(<R>) {
+while(<$r>) {
chomp;
my $l= $_;
if(/struct LongShort aliases/) {
@@ -206,15 +208,15 @@ while(<R>) {
}
}
}
-close(R);
+close($r);
#########################################################################
# parse the curl.1 man page, extract all documented command line options
# The man page may or may not be rebuilt, so check both possible locations
-open(R, "<$buildroot/docs/curl.1") || open(R, "<$root/docs/curl.1") ||
+open($r, "<", "$buildroot/docs/curl.1") || open($r, "<", "$root/docs/curl.1") ||
die "no input file";
my @manpage; # store all parsed parameters
-while(<R>) {
+while(<$r>) {
chomp;
my $l= $_;
$l =~ s/\\-/-/g;
@@ -235,15 +237,15 @@ while(<R>) {
}
}
}
-close(R);
+close($r);
#########################################################################
# parse the curl code that outputs the curl -h list
-open(R, "<$root/src/tool_listhelp.c") ||
+open($r, "<", "$root/src/tool_listhelp.c") ||
die "no input file";
my @toolhelp; # store all parsed parameters
-while(<R>) {
+while(<$r>) {
chomp;
my $l= $_;
if(/^ \{\" *(.*)/) {
@@ -264,7 +266,7 @@ while(<R>) {
}
}
-close(R);
+close($r);
#
# Now we have three arrays with options to cross-reference.
diff --git a/tests/manpage-syntax.pl b/tests/manpage-syntax.pl
index a83223d94..7457c7d44 100644..100755
--- a/tests/manpage-syntax.pl
+++ b/tests/manpage-syntax.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2019 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -29,6 +29,7 @@
use strict;
use warnings;
+use File::Basename;
# get the file name first
my $symbolsinversions=shift @ARGV;
@@ -37,6 +38,7 @@ my $symbolsinversions=shift @ARGV;
my @manpages=@ARGV;
my $errors = 0;
+my %docsdirs;
my %optblessed;
my %funcblessed;
my @optorder = (
@@ -75,9 +77,9 @@ my %deprecated = (
CURLINFO_SSL_DATA_OUT => 1,
);
sub allsymbols {
- open(F, "<$symbolsinversions") ||
+ open(my $f, "<", "$symbolsinversions") ||
die "$symbolsinversions: $|";
- while(<F>) {
+ while(<$f>) {
if($_ =~ /^([^ ]*) +(.*)/) {
my ($name, $info) = ($1, $2);
$symbol{$name}=$name;
@@ -87,12 +89,38 @@ sub allsymbols {
}
}
}
- close(F);
+ close($f);
+}
+
+
+my %ref = (
+ 'curl.1' => 1
+ );
+sub checkref {
+ my ($f, $sec, $file, $line)=@_;
+ my $present = 0;
+ #print STDERR "check $f.$sec\n";
+ if($ref{"$f.$sec"}) {
+ # present
+ return;
+ }
+ foreach my $d (keys %docsdirs) {
+ if( -f "$d/$f.$sec") {
+ $present = 1;
+ $ref{"$f.$sec"}=1;
+ last;
+ }
+ }
+ if(!$present) {
+ print STDERR "$file:$line broken reference to $f($sec)\n";
+ $errors++;
+ }
}
sub scanmanpage {
my ($file) = @_;
my $reqex = 0;
+ my $inseealso = 0;
my $inex = 0;
my $insynop = 0;
my $exsize = 0;
@@ -101,8 +129,10 @@ sub scanmanpage {
my $optpage = 0; # option or function
my @sh;
my $SH="";
+ my @separators;
+ my @sepline;
- open(M, "<$file") || die "no such file: $file";
+ open(my $m, "<", "$file") || die "no such file: $file";
if($file =~ /[\/\\](CURL|curl_)[^\/\\]*.3/) {
# This is a man page for libcurl. It requires an example!
$reqex = 1;
@@ -111,11 +141,11 @@ sub scanmanpage {
}
}
my $line = 1;
- while(<M>) {
+ while(<$m>) {
chomp;
if($_ =~ /^.so /) {
# this man page is just a referral
- close(M);
+ close($m);
return;
}
if(($_ =~ /^\.SH SYNOPSIS/i) && ($reqex)) {
@@ -127,10 +157,40 @@ sub scanmanpage {
$insynop = 0;
$inex = 1;
}
+ elsif($_ =~ /^\.SH \"SEE ALSO\"/i) {
+ $inseealso = 1;
+ }
elsif($_ =~ /^\.SH/i) {
$insynop = 0;
$inex = 0;
}
+ elsif($inseealso) {
+ if($_ =~ /^\.BR (.*)/i) {
+ my $f = $1;
+ if($f =~ /^(lib|)curl/i) {
+ $f =~ s/[\n\r]//g;
+ if($f =~ s/([a-z_0-9-]*) \(([13])\)([, ]*)//i) {
+ push @separators, $3;
+ push @sepline, $line;
+ checkref($1, $2, $file, $line);
+ }
+ if($f !~ /^ *$/) {
+ print STDERR "$file:$line bad SEE ALSO format\n";
+ $errors++;
+ }
+ }
+ else {
+ if($f =~ /.*(, *)\z/) {
+ push @separators, $1;
+ push @sepline, $line;
+ }
+ else {
+ push @separators, " ";
+ push @sepline, $line;
+ }
+ }
+ }
+ }
elsif($inex) {
$exsize++;
if($_ =~ /[^\\]\\n/) {
@@ -163,6 +223,15 @@ sub scanmanpage {
$errors++;
}
}
+ my $c = $_;
+ while($c =~ s/\\f([BI])((lib|)curl[a-z_0-9-]*)\(([13])\)//i) {
+ checkref($2, $4, $file, $line);
+ }
+ if(($_ =~ /\\f([BI])((libcurl|CURLOPT_|CURLSHOPT_|CURLINFO_|CURLMOPT_|curl_easy_|curl_multi_|curl_url|curl_mime|curl_global|curl_share)[a-zA-Z_0-9-]+)(.)/) &&
+ ($4 ne "(")) {
+ print STDERR "$file:$line curl ref to $2 without section\n";
+ $errors++;
+ }
if($_ =~ /(.*)\\f([^BIP])/) {
my ($pre, $format) = ($1, $2);
if($pre !~ /\\\z/) {
@@ -171,8 +240,16 @@ sub scanmanpage {
$errors++;
}
}
+ if(($SH =~ /^(DESCRIPTION|RETURN VALUE|AVAILABILITY)/i) &&
+ ($_ =~ /(.*)((curl_multi|curl_easy|curl_url|curl_global|curl_url|curl_share)[a-zA-Z_0-9-]+)/) &&
+ ($1 !~ /\\fI$/)) {
+ print STDERR "$file:$line unrefed curl call: $2\n";
+ $errors++;
+ }
+
+
if($optpage && $SH && ($SH !~ /^(SYNOPSIS|EXAMPLE|NAME|SEE ALSO)/i) &&
- ($_ =~ /(.*)(CURL(OPT_|MOPT_|INFO_)[A-Z0-9_]*)/)) {
+ ($_ =~ /(.*)(CURL(OPT_|MOPT_|INFO_|SHOPT_)[A-Z0-9_]*)/)) {
# an option with its own man page, check that it is tagged
# for linking
my ($pref, $symbol) = ($1, $2);
@@ -188,19 +265,29 @@ sub scanmanpage {
print STDERR "$file:$line trailing whitespace\n";
$errors++;
}
- if($_ =~ /\\f([BI])([^\\]*)\\fP/) {
- my $r = $2;
- if($r =~ /^(CURL.*)\(3\)/) {
- my $rr = $1;
- if(!$symbol{$rr}) {
- print STDERR "$file:$line link to non-libcurl option $rr!\n";
- $errors++;
- }
+ $line++;
+ }
+ close($m);
+
+ if(@separators) {
+ # all except the last one need comma
+ for(0 .. $#separators - 1) {
+ my $l = $_;
+ my $sep = $separators[$l];
+ if($sep ne ",") {
+ printf STDERR "$file:%d: bad not-last SEE ALSO separator: '%s'\n",
+ $sepline[$l], $sep;
+ $errors++;
}
}
- $line++;
+ # the last one should not do comma
+ my $sep = $separators[$#separators];
+ if($sep eq ",") {
+ printf STDERR "$file:%d: superfluous comma separator\n",
+ $sepline[$#separators];
+ $errors++;
+ }
}
- close(M);
if($reqex) {
# only for libcurl options man-pages
@@ -280,6 +367,10 @@ for my $s (@funcorder) {
}
for my $m (@manpages) {
+ $docsdirs{dirname($m)}++;
+}
+
+for my $m (@manpages) {
scanmanpage($m);
}
diff --git a/tests/markdown-uppercase.pl b/tests/markdown-uppercase.pl
index fe298d473..707f286cc 100644..100755
--- a/tests/markdown-uppercase.pl
+++ b/tests/markdown-uppercase.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2016 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -38,11 +38,11 @@ sub checkfile {
if($f !~ /\.md\z/) {
return;
}
- open(F, "<$f");
+ open(my $fh, "<", "$f");
my $l = 1;
my $prevl;
my $ignore = 0;
- while(<F>) {
+ while(<$fh>) {
my $line = $_;
chomp $line;
if($line =~ /^(\`\`\`|\~\~\~)/) {
@@ -86,7 +86,7 @@ sub checkfile {
$prevl = $line;
$l++;
}
- close(F);
+ close($fh);
}
diff --git a/tests/mem-include-scan.pl b/tests/mem-include-scan.pl
index 52b8155dc..e808c2e8c 100755
--- a/tests/mem-include-scan.pl
+++ b/tests/mem-include-scan.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2010 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -43,8 +43,8 @@ sub scanfile {
print STDERR "checking $file...\n";
- open(F, "<$file");
- while(<F>) {
+ open(my $f, "<", "$file");
+ while(<$f>) {
if($_ =~ /\W(free|alloc|strdup)\(/) {
$memfunc++;
}
@@ -56,14 +56,14 @@ sub scanfile {
}
elsif($_ =~ /mem-include-scan/) {
# free pass
- close(F);
+ close($f);
return 0;
}
if($memfunc && $memdebug && $curlmem) {
last;
}
}
- close(F);
+ close($f);
if($memfunc) {
diff --git a/tests/memanalyze.pl b/tests/memanalyze.pl
index ee344f733..4e164fe38 100755
--- a/tests/memanalyze.pl
+++ b/tests/memanalyze.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -81,22 +81,22 @@ if(! -f $file) {
exit;
}
-open(FILE, "<$file");
+open(my $fileh, "<", "$file");
if($showlimit) {
- while(<FILE>) {
+ while(<$fileh>) {
if(/^LIMIT.*memlimit$/) {
print $_;
last;
}
}
- close(FILE);
+ close($fileh);
exit;
}
my $lnum=0;
-while(<FILE>) {
+while(<$fileh>) {
chomp $_;
$line = $_;
$lnum++;
@@ -375,7 +375,7 @@ while(<FILE>) {
print "Not recognized prefix line: $line\n";
}
}
-close(FILE);
+close($fileh);
if($totalmem) {
print "Leak detected: memory still allocated: $totalmem bytes\n";
diff --git a/tests/negtelnetserver.py b/tests/negtelnetserver.py
index 2b748aff3..8c04bdc10 100755
--- a/tests/negtelnetserver.py
+++ b/tests/negtelnetserver.py
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2017 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -29,7 +29,9 @@ from __future__ import (absolute_import, division, print_function,
import argparse
import logging
import os
+import socket
import sys
+import time
from util import ClosingFileHandler
@@ -66,9 +68,9 @@ def telnetserver(options):
# Need to set the allow_reuse on the class, not on the instance.
socketserver.TCPServer.allow_reuse_address = True
- server = socketserver.TCPServer(local_bind, NegotiatingTelnetHandler)
- server.serve_forever()
-
+ with socketserver.TCPServer(local_bind, NegotiatingTelnetHandler) as server:
+ server.serve_forever()
+ # leaving `with` calls server.close() automatically
return ScriptRC.SUCCESS
@@ -90,7 +92,7 @@ class NegotiatingTelnetHandler(socketserver.BaseRequestHandler):
neg.send_wont("NAWS")
# Get the data passed through the negotiator
- data = neg.recv(1024)
+ data = neg.recv(4*1024)
log.debug("Incoming data: %r", data)
if VERIFIED_REQ.encode('utf-8') in data:
@@ -109,6 +111,12 @@ class NegotiatingTelnetHandler(socketserver.BaseRequestHandler):
log.debug("Sending %r", response_data)
self.request.sendall(response_data)
+ # put some effort into making a clean socket shutdown
+ # that does not give the client ECONNRESET
+ self.request.settimeout(0.1)
+ self.request.recv(4*1024)
+ self.request.shutdown(socket.SHUT_RDWR)
+
except IOError:
log.exception("IOError hit during request")
diff --git a/tests/nroff-scan.pl b/tests/nroff-scan.pl
index 161721ffa..4dddf7cf1 100755
--- a/tests/nroff-scan.pl
+++ b/tests/nroff-scan.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2016 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -56,14 +56,18 @@ sub manpresent {
sub file {
my ($f) = @_;
- open(F, "<$f") ||
+ open(my $fh, "<", "$f") ||
die "no file";
my $line = 1;
- while(<F>) {
+ while(<$fh>) {
chomp;
my $l = $_;
while($l =~ s/\\f(.)([^ ]*)\\f(.)//) {
my ($pre, $str, $post)=($1, $2, $3);
+ if($str =~ /^\\f[ib]/i) {
+ print "error: $f:$line: double-highlight\n";
+ $errors++;
+ }
if($post ne "P") {
print "error: $f:$line: missing \\fP after $str\n";
$errors++;
@@ -96,7 +100,7 @@ sub file {
}
$line++;
}
- close(F);
+ close($fh);
}
foreach my $f (@f) {
diff --git a/tests/option-check.pl b/tests/option-check.pl
new file mode 100755
index 000000000..74d465173
--- /dev/null
+++ b/tests/option-check.pl
@@ -0,0 +1,66 @@
+#!/usr/bin/env perl
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed 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
+#
+###########################################################################
+
+sub showline {
+ my ($l) = @_;
+ $l =~ s/([^\x20-\x7f])/sprintf "%%%02x", ord $1/eg;
+ return $l;
+}
+
+my $root = $ARGV[0];
+
+open(my $fh, "-|", "perl $root/lib/optiontable.pl < $root/include/curl/curl.h");
+binmode $fh;
+my @gen=<$fh>;
+close($fh);
+
+open($fh, "<", "$root/lib/easyoptions.c");
+binmode $fh;
+my @file=<$fh>;
+close($fh);
+
+if(join("", @gen) ne join("", @file)) {
+ print "easyoptions.c need to be regenerated!\n";
+
+ printf "easyoptions.c is %u lines\n", scalar(@file);
+ printf "generated file is %u lines\n", scalar(@gen);
+ my $e = 0;
+ for my $i (0 .. $#gen) {
+ # strip CRLFs to unify
+ $gen[$i] =~ s/[\r\n]//g;
+ $file[$i] =~ s/[\r\n]//g;
+ if($gen[$i] ne $file[$i]) {
+ printf "File: %u:%s\nGen: %u:%s\n",
+ $i+1, showline($file[$i]),
+ $i+1, showline($gen[$i]);
+ $e++;
+ if($e > 10) {
+ # only show 10 lines diff
+ last;
+ }
+ }
+ }
+ exit 1 if($e);
+}
diff --git a/tests/options-scan.pl b/tests/options-scan.pl
index de8412307..2014dc4f6 100644..100755
--- a/tests/options-scan.pl
+++ b/tests/options-scan.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2010 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -26,7 +26,7 @@
#
# - Get all options mentioned in the $cmddir.
# - Make sure they're all mentioned in the $opts document
-# - Make usre that the version in $opts matches the version in the file in
+# - Make sure that the version in $opts matches the version in the file in
# $cmddir
#
@@ -50,8 +50,8 @@ sub cmdfiles {
sub mentions {
my ($f) = @_;
my @options;
- open(F, "<$f");
- while(<F>) {
+ open(my $fh, "<", "$f");
+ while(<$fh>) {
chomp;
if(/(.*) +([0-9.]+)/) {
my ($flag, $version)=($1, $2);
@@ -71,13 +71,14 @@ sub mentions {
$oiv{$flag} = $version;
}
}
+ close($fh);
return @options;
}
sub versioncheck {
my ($f, $v)=@_;
- open(F, "<$cmddir/$f.d");
- while(<F>) {
+ open(my $fh, "<", "$cmddir/$f.d");
+ while(<$fh>) {
chomp;
if(/^Added: ([0-9.]+)/) {
if($1 ne $v) {
@@ -87,7 +88,7 @@ sub versioncheck {
last;
}
}
- close(F);
+ close($fh);
}
# get all the files
diff --git a/tests/pathhelp.pm b/tests/pathhelp.pm
index 2c6594705..3afc5dacb 100644
--- a/tests/pathhelp.pm
+++ b/tests/pathhelp.pm
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2016 - 2022, Evgeny Grin (Karlson2k), <k2k@narod.ru>.
+# Copyright (C) Evgeny Grin (Karlson2k), <k2k@narod.ru>.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -49,30 +49,24 @@
# interpreted incorrectly in Perl and Msys/Cygwin environment have low
# control on Win32 current drive and Win32 current path on specific drive.
-
package pathhelp;
+
use strict;
use warnings;
use Cwd 'abs_path';
BEGIN {
- require Exporter;
-
- our @ISA = qw(Exporter);
-
- our @EXPORT = qw(
- sys_native_abs_path
- sys_native_path
- );
+ use base qw(Exporter);
our @EXPORT_OK = qw(
- build_sys_abs_path
- sys_native_current_path
- normalize_path
- os_is_win
- $use_cygpath
- should_use_cygpath
- drives_mounted_on_cygdrive
+ os_is_win
+ exe_ext
+ sys_native_abs_path
+ sys_native_current_path
+ build_sys_abs_path
+ normalize_path
+ should_use_cygpath
+ drives_mounted_on_cygdrive
);
}
@@ -102,21 +96,19 @@ BEGIN {
}
}
-our $use_cygpath; # Only for Win32:
+my $use_cygpath; # Only for Win32:
# undef - autodetect
- # 1 - use cygpath
# 0 - do not use cygpath
+ # 1 - use cygpath
# Returns boolean true if 'cygpath' utility should be used for path conversion.
sub should_use_cygpath {
- unless (os_is_win()) {
+ return $use_cygpath if defined $use_cygpath;
+ if(os_is_win()) {
+ $use_cygpath = (qx{cygpath -u '.\\' 2>/dev/null} eq "./\n" && $? == 0);
+ } else {
$use_cygpath = 0;
- return 0;
}
- return $use_cygpath if defined $use_cygpath;
-
- $use_cygpath = (qx{cygpath -u '.\\' 2>/dev/null} eq "./\n" && $? == 0);
-
return $use_cygpath;
}
@@ -134,7 +126,7 @@ sub normalize_path;
# Returns current working directory in Win32 format on Windows.
#
sub sys_native_current_path {
- return Cwd::getcwd() unless os_is_win();
+ return Cwd::getcwd() if !os_is_win();
my $cur_dir;
if($^O eq 'msys') {
@@ -203,7 +195,7 @@ sub sys_native_path {
my ($path) = @_;
# Return untouched on non-Windows platforms.
- return $path unless (os_is_win());
+ return $path if (!os_is_win());
# Do not process empty path.
return $path if ($path eq '');
@@ -233,7 +225,7 @@ sub sys_native_path {
# Convert leading slash back to forward slash to indicate
# directory on Win32 current drive or capitalize drive letter.
- substr($path, 0, 1) = $first_char;
+ substr($path, 0, 1, $first_char);
return $path;
}
elsif(should_use_cygpath()) {
@@ -266,7 +258,7 @@ sub sys_native_path {
# program parameters if program is not Msys-based.
$path = do_msys_transform($path);
- return undef unless defined $path;
+ return undef if !defined $path;
# Capitalize drive letter for Win32 paths.
$path =~ s{^([a-z]:)}{\u$1};
@@ -303,7 +295,7 @@ sub sys_native_path {
sub sys_native_abs_path {
my ($path) = @_;
- unless(os_is_win()) {
+ if(!os_is_win()) {
# Convert path to absolute form.
$path = Cwd::abs_path($path);
@@ -362,7 +354,7 @@ sub sys_native_abs_path {
# Path is directory or filename on Win32 current drive. ('\Windows')
my $w32drive = get_win32_current_drive();
- return undef unless defined $w32drive;
+ return undef if !defined $w32drive;
# Combine drive and path.
# Replace any possible back slashes with forward slashes,
@@ -370,7 +362,7 @@ sub sys_native_abs_path {
return normalize_path($w32drive . $path);
}
- unless (substr($path, 0, 1) eq '/') {
+ if(substr($path, 0, 1) ne '/') {
# Path is in relative form. Resolve relative directories in Unix form
# *BEFORE* converting to Win32 form otherwise paths like
# '../../../cygdrive/c/windows' will not be resolved.
@@ -400,7 +392,7 @@ sub sys_native_abs_path {
# Msys transforms automatically path to Windows native form in staring
# program parameters if program is not Msys-based.
$path = do_msys_transform($path);
- return undef unless defined $path;
+ return undef if !defined $path;
# Replace any back and duplicated slashes with single forward slashes.
$path =~ s{[\\/]+}{/}g;
@@ -423,7 +415,7 @@ sub simple_transform_win32_to_unix;
sub build_sys_abs_path {
my ($path) = @_;
- unless(os_is_win()) {
+ if(!os_is_win()) {
# Convert path to absolute form.
$path = Cwd::abs_path($path);
@@ -442,7 +434,7 @@ sub build_sys_abs_path {
# Replace any possible back slashes with forward slashes,
# remove any duplicated slashes.
$path = get_abs_path_on_win32_drive($1, $2);
- return undef unless defined $path;
+ return undef if !defined $path;
return simple_transform_win32_to_unix($path);
}
@@ -475,7 +467,7 @@ sub build_sys_abs_path {
# Unix-style paths.
# Remove duplicated slashes, as they may be not processed.
$path = normalize_path($path);
- return undef unless defined $path;
+ return undef if !defined $path;
# Use 'cygpath', '-u' means Unix-stile path,
# '-a' means absolute path
@@ -500,7 +492,7 @@ sub build_sys_abs_path {
# Replace any possible back slashes with forward slashes,
# remove any duplicated slashes.
$path = normalize_path($path);
- return undef unless defined $path;
+ return undef if !defined $path;
return simple_transform_win32_to_unix($path);
}
@@ -508,7 +500,7 @@ sub build_sys_abs_path {
# Path is directory or filename on Win32 current drive. ('\Windows')
my $w32drive = get_win32_current_drive();
- return undef unless defined $w32drive;
+ return undef if !defined $w32drive;
# Combine drive and path.
# Resolve relative dirs in Win32-style path or paths like 'D:/../c/'
@@ -516,13 +508,13 @@ sub build_sys_abs_path {
# Replace any possible back slashes with forward slashes,
# remove any duplicated slashes.
$path = normalize_path($w32drive . $path);
- return undef unless defined $path;
+ return undef if !defined $path;
return simple_transform_win32_to_unix($path);
}
# Path is not in any Win32 form.
- unless (substr($path, 0, 1) eq '/') {
+ if(substr($path, 0, 1) ne '/') {
# Path in relative form. Resolve relative directories in Unix form
# *BEFORE* converting to Win32 form otherwise paths like
# '../../../cygdrive/c/windows' will not be resolved.
@@ -561,12 +553,12 @@ sub normalize_path {
# Don't process empty paths.
return $path if $path eq '';
- unless($path =~ m{(?:^|\\|/)\.{1,2}(?:\\|/|$)}) {
+ if($path !~ m{(?:^|\\|/)\.{1,2}(?:\\|/|$)}) {
# Speed up processing of simple paths.
my $first_char = substr($path, 0, 1);
$path =~ s{[\\/]+}{/}g;
# Restore starting backslash if any.
- substr($path, 0, 1) = $first_char;
+ substr($path, 0, 1, $first_char);
return $path;
}
@@ -581,7 +573,7 @@ sub normalize_path {
# Process path separately from drive letter.
@arr = split(m{\/|\\}, $3);
# Replace backslash with forward slash if required.
- substr($prefix, 2, 1) = '/' if $have_root;
+ substr($prefix, 2, 1, '/') if $have_root;
}
else {
if($path =~ m{^(\/|\\)}) {
@@ -601,7 +593,7 @@ sub normalize_path {
if(length($el) == 0 || $el eq '.') {
next;
}
- elsif($el eq '..' && @res > 0 && $res[$#res] ne '..') {
+ elsif($el eq '..' && @res > 0 && $res[-1] ne '..') {
pop @res;
next;
}
@@ -717,7 +709,7 @@ sub do_dumb_guessed_transform {
# '/bin/' can be mapped to '/usr/bin/'.
my $check_path = $path;
my $path_tail = '';
- do {
+ while(1) {
if(-d $check_path) {
my $res =
`(cd "$check_path" && cmd /c "echo %__CD__%") 2>/dev/null`;
@@ -732,7 +724,7 @@ sub do_dumb_guessed_transform {
return $res . $path_tail;
}
else {
- $res =~ s{/$}{} unless $check_path =~ m{/$};
+ $res =~ s{/$}{} if $check_path !~ m{/$};
return $res;
}
}
@@ -747,7 +739,7 @@ sub do_dumb_guessed_transform {
warn "Can't determine Win32 directory for path \"$path\".\n";
return undef;
}
- } while(1);
+ }
}
@@ -772,7 +764,7 @@ sub simple_transform_win32_to_unix {
}
# 'cygpath' is not available, use guessed transformation.
- unless($path =~ s{^([a-zA-Z]):(?:/|\\)}{/\l$1/}) {
+ if($path !~ s{^([a-zA-Z]):(?:/|\\)}{/\l$1/}) {
warn "Can't determine Unix-style directory for Win32 " .
"directory \"$path\".\n";
return undef;
@@ -781,5 +773,23 @@ sub simple_transform_win32_to_unix {
$path = '/cygdrive' . $path if(drives_mounted_on_cygdrive());
return $path;
}
+#
+#***************************************************************************
+# Return file extension for executable files on this operating system
+#
+sub exe_ext {
+ my ($component, @arr) = @_;
+ if ($ENV{'CURL_TEST_EXE_EXT'}) {
+ return $ENV{'CURL_TEST_EXE_EXT'};
+ }
+ if ($ENV{'CURL_TEST_EXE_EXT_'.$component}) {
+ return $ENV{'CURL_TEST_EXE_EXT_'.$component};
+ }
+ if ($^O eq 'MSWin32' || $^O eq 'cygwin' || $^O eq 'msys' ||
+ $^O eq 'dos' || $^O eq 'os2') {
+ return '.exe';
+ }
+ return '';
+}
1; # End of module
diff --git a/tests/ftp.pm b/tests/processhelp.pm
index 428befddf..170863f2f 100644
--- a/tests/ftp.pm
+++ b/tests/processhelp.pm
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -22,7 +22,27 @@
#
###########################################################################
+package processhelp;
+
+use strict;
+use warnings;
+
BEGIN {
+ use base qw(Exporter);
+
+ our @EXPORT = qw(
+ portable_sleep
+ pidfromfile
+ pidexists
+ pidwait
+ processexists
+ killpid
+ killsockfilters
+ killallsockfilters
+ set_advisor_read_lock
+ clear_advisor_read_lock
+ );
+
# portable sleeping needs Time::HiRes
eval {
no warnings "all";
@@ -35,9 +55,6 @@ BEGIN {
}
}
-use strict;
-use warnings;
-
use serverhelp qw(
servername_id
mainsockf_pidfilename
@@ -79,10 +96,10 @@ sub pidfromfile {
my $pidfile = $_[0];
my $pid = 0;
- if(-f $pidfile && -s $pidfile && open(PIDFH, "<$pidfile")) {
- $pid = 0 + <PIDFH>;
- close(PIDFH);
- $pid = 0 unless($pid > 0);
+ if(-f $pidfile && -s $pidfile && open(my $pidfh, "<", "$pidfile")) {
+ $pid = 0 + <$pidfh>;
+ close($pidfh);
+ $pid = 0 if($pid < 0);
}
return $pid;
}
@@ -230,8 +247,8 @@ sub processexists {
# with a SIGTERM signal and SIGKILLs those which haven't died on time.
#
sub killpid {
- use POSIX ":sys_wait_h";
my ($verbose, $pidlist) = @_;
+ use POSIX ":sys_wait_h";
my @requested;
my @signalled;
my @reapchild;
@@ -322,7 +339,7 @@ sub killpid {
# killsockfilters kills sockfilter processes for a given server.
#
sub killsockfilters {
- my ($proto, $ipvnum, $idnum, $verbose, $which) = @_;
+ my ($piddir, $proto, $ipvnum, $idnum, $verbose, $which) = @_;
my $server;
my $pidfile;
my $pid;
@@ -335,7 +352,7 @@ sub killsockfilters {
$server = servername_id($proto, $ipvnum, $idnum) if($verbose);
if(!$which || ($which eq 'main')) {
- $pidfile = mainsockf_pidfilename($proto, $ipvnum, $idnum);
+ $pidfile = mainsockf_pidfilename($piddir, $proto, $ipvnum, $idnum);
$pid = processexists($pidfile);
if($pid > 0) {
printf("* kill pid for %s-%s => %d\n", $server,
@@ -349,7 +366,7 @@ sub killsockfilters {
return if($proto ne 'ftp');
if(!$which || ($which eq 'data')) {
- $pidfile = datasockf_pidfilename($proto, $ipvnum, $idnum);
+ $pidfile = datasockf_pidfilename($piddir, $proto, $ipvnum, $idnum);
$pid = processexists($pidfile);
if($pid > 0) {
printf("* kill pid for %s-data => %d\n", $server,
@@ -365,12 +382,12 @@ sub killsockfilters {
# killallsockfilters kills sockfilter processes for all servers.
#
sub killallsockfilters {
- my $verbose = $_[0];
+ my ($piddir, $verbose) = @_;
for my $proto (('ftp', 'imap', 'pop3', 'smtp')) {
for my $ipvnum (('4', '6')) {
for my $idnum (('1', '2')) {
- killsockfilters($proto, $ipvnum, $idnum, $verbose);
+ killsockfilters($piddir, $proto, $ipvnum, $idnum, $verbose);
}
}
}
@@ -380,11 +397,11 @@ sub killallsockfilters {
sub set_advisor_read_lock {
my ($filename) = @_;
- if(open(FILEH, ">$filename")) {
- close(FILEH);
+ my $fileh;
+ if(open($fileh, ">", "$filename") && close($fileh)) {
return;
}
- printf "Error creating lock file $filename error: $!";
+ printf "Error creating lock file $filename error: $!\n";
}
diff --git a/tests/rtspserver.pl b/tests/rtspserver.pl
index 40b1bc779..3282d9c23 100755
--- a/tests/rtspserver.pl
+++ b/tests/rtspserver.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -23,20 +23,20 @@
#
#***************************************************************************
+use strict;
+use warnings;
+
BEGIN {
push(@INC, $ENV{'srcdir'}) if(defined $ENV{'srcdir'});
push(@INC, ".");
}
-use strict;
-use warnings;
-
use serverhelp qw(
server_pidfilename
server_logfilename
);
-use sshhelp qw(
+use pathhelp qw(
exe_ext
);
@@ -73,6 +73,12 @@ while(@ARGV) {
shift @ARGV;
}
}
+ elsif($ARGV[0] eq '--logdir') {
+ if($ARGV[1]) {
+ $logdir = $ARGV[1];
+ shift @ARGV;
+ }
+ }
elsif($ARGV[0] eq '--srcdir') {
if($ARGV[1]) {
$srcdir = $ARGV[1];
@@ -106,19 +112,24 @@ while(@ARGV) {
shift @ARGV;
}
+#***************************************************************************
+# Initialize command line option dependent variables
+#
+
+if(!$pidfile) {
+ $pidfile = server_pidfilename($path, $proto, $ipvnum, $idnum);
+}
if(!$srcdir) {
$srcdir = $ENV{'srcdir'} || '.';
}
-if(!$pidfile) {
- $pidfile = "$path/". server_pidfilename($proto, $ipvnum, $idnum);
-}
if(!$logfile) {
$logfile = server_logfilename($logdir, $proto, $ipvnum, $idnum);
}
$flags .= "--pidfile \"$pidfile\" ".
"--portfile \"$portfile\" ".
- "--logfile \"$logfile\" ";
+ "--logfile \"$logfile\" ".
+ "--logdir \"$logdir\" ";
$flags .= "--ipv$ipvnum --port $port --srcdir \"$srcdir\"";
$| = 1;
diff --git a/tests/runner.pm b/tests/runner.pm
new file mode 100644
index 000000000..8b61eb4b3
--- /dev/null
+++ b/tests/runner.pm
@@ -0,0 +1,1468 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed 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 module contains entry points to run a single test. runner_init
+# determines whether they will run in a separate process or in the process of
+# the caller. The relevant interface is asynchronous so it will work in either
+# case. Program arguments are marshalled and then written to the end of a pipe
+# (in controlleripccall) which is later read from and the arguments
+# unmarshalled (in ipcrecv) before the desired function is called normally.
+# The function return values are then marshalled and written into another pipe
+# (again in ipcrecv) when is later read from and unmarshalled (in runnerar)
+# before being returned to the caller.
+
+package runner;
+
+use strict;
+use warnings;
+use 5.006;
+
+BEGIN {
+ use base qw(Exporter);
+
+ our @EXPORT = qw(
+ checktestcmd
+ prepro
+ readtestkeywords
+ restore_test_env
+ runner_init
+ runnerac_clearlocks
+ runnerac_shutdown
+ runnerac_stopservers
+ runnerac_test_preprocess
+ runnerac_test_run
+ runnerar
+ runnerar_ready
+ stderrfilename
+ stdoutfilename
+ $DBGCURL
+ $gdb
+ $gdbthis
+ $gdbxwin
+ $shallow
+ $tortalloc
+ $valgrind_logfile
+ $valgrind_tool
+ );
+
+ # these are for debugging only
+ our @EXPORT_OK = qw(
+ singletest_preprocess
+ );
+}
+
+use B qw(
+ svref_2object
+ );
+use Storable qw(
+ freeze
+ thaw
+ );
+
+use pathhelp qw(
+ exe_ext
+ );
+use processhelp qw(
+ portable_sleep
+ );
+use servers qw(
+ checkcmd
+ clearlocks
+ initserverconfig
+ serverfortest
+ stopserver
+ stopservers
+ subvariables
+ );
+use getpart;
+use globalconfig;
+use testutil qw(
+ clearlogs
+ logmsg
+ runclient
+ shell_quote
+ subbase64
+ subnewlines
+ );
+use valgrind;
+
+
+#######################################################################
+# Global variables set elsewhere but used only by this package
+# These may only be set *before* runner_init is called
+our $DBGCURL=$CURL; #"../src/.libs/curl"; # alternative for debugging
+our $valgrind_logfile="--log-file"; # the option name for valgrind >=3
+our $valgrind_tool="--tool=memcheck";
+our $gdb = checktestcmd("gdb");
+our $gdbthis; # run test case with gdb debugger
+our $gdbxwin; # use windowed gdb when using gdb
+
+# torture test variables
+our $shallow;
+our $tortalloc;
+
+# local variables
+my %oldenv; # environment variables before test is started
+my $UNITDIR="./unit";
+my $CURLLOG="$LOGDIR/commands.log"; # all command lines run
+my $defserverlogslocktimeout = 5; # timeout to await server logs lock removal
+my $defpostcommanddelay = 0; # delay between command and postcheck sections
+my $multiprocess; # nonzero with a separate test runner process
+
+# pipes
+my $runnerr; # pipe that runner reads from
+my $runnerw; # pipe that runner writes to
+
+# per-runner variables, indexed by runner ID; these are used by controller only
+my %controllerr; # pipe that controller reads from
+my %controllerw; # pipe that controller writes to
+
+# redirected stdout/stderr to these files
+sub stdoutfilename {
+ my ($logdir, $testnum)=@_;
+ return "$logdir/stdout$testnum";
+}
+
+sub stderrfilename {
+ my ($logdir, $testnum)=@_;
+ return "$logdir/stderr$testnum";
+}
+
+#######################################################################
+# Initialize the runner and prepare it to run tests
+# The runner ID returned by this function must be passed into the other
+# runnerac_* functions
+# Called by controller
+sub runner_init {
+ my ($logdir, $jobs)=@_;
+
+ $multiprocess = !!$jobs;
+
+ # enable memory debugging if curl is compiled with it
+ $ENV{'CURL_MEMDEBUG'} = "$logdir/$MEMDUMP";
+ $ENV{'CURL_ENTROPY'}="12345678";
+ $ENV{'CURL_FORCETIME'}=1; # for debug NTLM magic
+ $ENV{'CURL_GLOBAL_INIT'}=1; # debug curl_global_init/cleanup use
+ $ENV{'HOME'}=$pwd;
+ $ENV{'CURL_HOME'}=$ENV{'HOME'};
+ $ENV{'XDG_CONFIG_HOME'}=$ENV{'HOME'};
+ $ENV{'COLUMNS'}=79; # screen width!
+
+ # Incorporate the $logdir into the random seed and re-seed the PRNG.
+ # This gives each runner a unique yet consistent seed which provides
+ # more unique port number selection in each runner, yet is deterministic
+ # across runs.
+ $randseed += unpack('%16C*', $logdir);
+ srand $randseed;
+
+ # create pipes for communication with runner
+ my ($thisrunnerr, $thiscontrollerw, $thiscontrollerr, $thisrunnerw);
+ pipe $thisrunnerr, $thiscontrollerw;
+ pipe $thiscontrollerr, $thisrunnerw;
+
+ my $thisrunnerid;
+ if($multiprocess) {
+ # Create a separate process in multiprocess mode
+ my $child = fork();
+ if(0 == $child) {
+ # TODO: set up better signal handlers
+ $SIG{INT} = 'IGNORE';
+ $SIG{TERM} = 'IGNORE';
+ eval {
+ # some msys2 perl versions don't define SIGUSR1
+ $SIG{USR1} = 'IGNORE';
+ };
+
+ $thisrunnerid = $$;
+ print "Runner $thisrunnerid starting\n" if($verbose);
+
+ # Here we are the child (runner).
+ close($thiscontrollerw);
+ close($thiscontrollerr);
+ $runnerr = $thisrunnerr;
+ $runnerw = $thisrunnerw;
+
+ # Set this directory as ours
+ $LOGDIR = $logdir;
+ mkdir("$LOGDIR/$PIDDIR", 0777);
+ mkdir("$LOGDIR/$LOCKDIR", 0777);
+
+ # Initialize various server variables
+ initserverconfig();
+
+ # handle IPC calls
+ event_loop();
+
+ # Can't rely on logmsg here in case it's buffered
+ print "Runner $thisrunnerid exiting\n" if($verbose);
+
+ # To reach this point, either the controller has sent
+ # runnerac_stopservers() and runnerac_shutdown() or we have called
+ # runnerabort(). In both cases, there are no more of our servers
+ # running and we can safely exit.
+ exit 0;
+ }
+
+ # Here we are the parent (controller).
+ close($thisrunnerw);
+ close($thisrunnerr);
+
+ $thisrunnerid = $child;
+
+ } else {
+ # Create our pid directory
+ mkdir("$LOGDIR/$PIDDIR", 0777);
+
+ # Don't create a separate process
+ $thisrunnerid = "integrated";
+ }
+
+ $controllerw{$thisrunnerid} = $thiscontrollerw;
+ $runnerr = $thisrunnerr;
+ $runnerw = $thisrunnerw;
+ $controllerr{$thisrunnerid} = $thiscontrollerr;
+
+ return $thisrunnerid;
+}
+
+#######################################################################
+# Loop to execute incoming IPC calls until the shutdown call
+sub event_loop {
+ while () {
+ if(ipcrecv()) {
+ last;
+ }
+ }
+}
+
+#######################################################################
+# Check for a command in the PATH of the machine running curl.
+#
+sub checktestcmd {
+ my ($cmd)=@_;
+ my @testpaths=("$LIBDIR/.libs", "$LIBDIR");
+ return checkcmd($cmd, @testpaths);
+}
+
+# See if Valgrind should actually be used
+sub use_valgrind {
+ if($valgrind) {
+ my @valgrindoption = getpart("verify", "valgrind");
+ if((!@valgrindoption) || ($valgrindoption[0] !~ /disable/)) {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+# Massage the command result code into a useful form
+sub normalize_cmdres {
+ my $cmdres = $_[0];
+ my $signal_num = $cmdres & 127;
+ my $dumped_core = $cmdres & 128;
+
+ if(!$anyway && ($signal_num || $dumped_core)) {
+ $cmdres = 1000;
+ }
+ else {
+ $cmdres >>= 8;
+ $cmdres = (2000 + $signal_num) if($signal_num && !$cmdres);
+ }
+ return ($cmdres, $dumped_core);
+}
+
+# 'prepro' processes the input array and replaces %-variables in the array
+# etc. Returns the processed version of the array
+sub prepro {
+ my $testnum = shift;
+ my (@entiretest) = @_;
+ my $show = 1;
+ my @out;
+ my $data_crlf;
+ my @pshow;
+ my @altshow;
+ my $plvl;
+ my $line;
+ for my $s (@entiretest) {
+ my $f = $s;
+ $line++;
+ if($s =~ /^ *%if (.*)/) {
+ my $cond = $1;
+ my $rev = 0;
+
+ if($cond =~ /^!(.*)/) {
+ $cond = $1;
+ $rev = 1;
+ }
+ $rev ^= $feature{$cond} ? 1 : 0;
+ push @pshow, $show; # push the previous state
+ $plvl++;
+ if($show) {
+ # only if this was showing before we can allow the alternative
+ # to go showing as well
+ push @altshow, $rev ^ 1; # push the reversed show state
+ }
+ else {
+ push @altshow, 0; # the alt should still hide
+ }
+ if($show) {
+ # we only allow show if already showing
+ $show = $rev;
+ }
+ next;
+ }
+ elsif($s =~ /^ *%else/) {
+ if(!$plvl) {
+ print STDERR "error: test$testnum:$line: %else no %if\n";
+ last;
+ }
+ $show = pop @altshow;
+ push @altshow, $show; # put it back for consistency
+ next;
+ }
+ elsif($s =~ /^ *%endif/) {
+ if(!$plvl--) {
+ print STDERR "error: test$testnum:$line: %endif had no %if\n";
+ last;
+ }
+ $show = pop @pshow;
+ pop @altshow; # not used here but we must pop it
+ next;
+ }
+ if($show) {
+ # The processor does CRLF replacements in the <data*> sections if
+ # necessary since those parts might be read by separate servers.
+ if($s =~ /^ *<data(.*)\>/) {
+ if($1 =~ /crlf="yes"/ ||
+ ($feature{"hyper"} && ($keywords{"HTTP"} || $keywords{"HTTPS"}))) {
+ $data_crlf = 1;
+ }
+ }
+ elsif(($s =~ /^ *<\/data/) && $data_crlf) {
+ $data_crlf = 0;
+ }
+ subvariables(\$s, $testnum, "%");
+ subbase64(\$s);
+ subnewlines(0, \$s) if($data_crlf);
+ push @out, $s;
+ }
+ }
+ return @out;
+}
+
+
+#######################################################################
+# Load test keywords into %keywords hash
+#
+sub readtestkeywords {
+ my @info_keywords = getpart("info", "keywords");
+
+ # Clear the list of keywords from the last test
+ %keywords = ();
+ for my $k (@info_keywords) {
+ chomp $k;
+ $keywords{$k} = 1;
+ }
+}
+
+
+#######################################################################
+# Return a list of log locks that still exist
+#
+sub logslocked {
+ opendir(my $lockdir, "$LOGDIR/$LOCKDIR");
+ my @locks;
+ foreach (readdir $lockdir) {
+ if(/^(.*)\.lock$/) {
+ push @locks, $1;
+ }
+ }
+ return @locks;
+}
+
+#######################################################################
+# Memory allocation test and failure torture testing.
+#
+sub torture {
+ my ($testcmd, $testnum, $gdbline) = @_;
+
+ # remove memdump first to be sure we get a new nice and clean one
+ unlink("$LOGDIR/$MEMDUMP");
+
+ # First get URL from test server, ignore the output/result
+ runclient($testcmd);
+
+ logmsg " CMD: $testcmd\n" if($verbose);
+
+ # memanalyze -v is our friend, get the number of allocations made
+ my $count=0;
+ my @out = `$memanalyze -v "$LOGDIR/$MEMDUMP"`;
+ for(@out) {
+ if(/^Operations: (\d+)/) {
+ $count = $1;
+ last;
+ }
+ }
+ if(!$count) {
+ logmsg " found no functions to make fail\n";
+ return 0;
+ }
+
+ my @ttests = (1 .. $count);
+ if($shallow && ($shallow < $count)) {
+ my $discard = scalar(@ttests) - $shallow;
+ my $percent = sprintf("%.2f%%", $shallow * 100 / scalar(@ttests));
+ logmsg " $count functions found, but only fail $shallow ($percent)\n";
+ while($discard) {
+ my $rm;
+ do {
+ # find a test to discard
+ $rm = rand(scalar(@ttests));
+ } while(!$ttests[$rm]);
+ $ttests[$rm] = undef;
+ $discard--;
+ }
+ }
+ else {
+ logmsg " $count functions to make fail\n";
+ }
+
+ for (@ttests) {
+ my $limit = $_;
+ my $fail;
+ my $dumped_core;
+
+ if(!defined($limit)) {
+ # --shallow can undefine them
+ next;
+ }
+ if($tortalloc && ($tortalloc != $limit)) {
+ next;
+ }
+
+ if($verbose) {
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
+ localtime(time());
+ my $now = sprintf("%02d:%02d:%02d ", $hour, $min, $sec);
+ logmsg "Fail function no: $limit at $now\r";
+ }
+
+ # make the memory allocation function number $limit return failure
+ $ENV{'CURL_MEMLIMIT'} = $limit;
+
+ # remove memdump first to be sure we get a new nice and clean one
+ unlink("$LOGDIR/$MEMDUMP");
+
+ my $cmd = $testcmd;
+ if($valgrind && !$gdbthis) {
+ my @valgrindoption = getpart("verify", "valgrind");
+ if((!@valgrindoption) || ($valgrindoption[0] !~ /disable/)) {
+ my $valgrindcmd = "$valgrind ";
+ $valgrindcmd .= "$valgrind_tool " if($valgrind_tool);
+ $valgrindcmd .= "--quiet --leak-check=yes ";
+ $valgrindcmd .= "--suppressions=$srcdir/valgrind.supp ";
+ # $valgrindcmd .= "--gen-suppressions=all ";
+ $valgrindcmd .= "--num-callers=16 ";
+ $valgrindcmd .= "${valgrind_logfile}=$LOGDIR/valgrind$testnum";
+ $cmd = "$valgrindcmd $testcmd";
+ }
+ }
+ logmsg "*** Function number $limit is now set to fail ***\n" if($gdbthis);
+
+ my $ret = 0;
+ if($gdbthis) {
+ runclient($gdbline);
+ }
+ else {
+ $ret = runclient($cmd);
+ }
+ #logmsg "$_ Returned " . ($ret >> 8) . "\n";
+
+ # Now clear the variable again
+ delete $ENV{'CURL_MEMLIMIT'} if($ENV{'CURL_MEMLIMIT'});
+
+ if(-r "core") {
+ # there's core file present now!
+ logmsg " core dumped\n";
+ $dumped_core = 1;
+ $fail = 2;
+ }
+
+ if($valgrind) {
+ my @e = valgrindparse("$LOGDIR/valgrind$testnum");
+ if(@e && $e[0]) {
+ if($automakestyle) {
+ logmsg "FAIL: torture $testnum - valgrind\n";
+ }
+ else {
+ logmsg " valgrind ERROR ";
+ logmsg @e;
+ }
+ $fail = 1;
+ }
+ }
+
+ # verify that it returns a proper error code, doesn't leak memory
+ # and doesn't core dump
+ if(($ret & 255) || ($ret >> 8) >= 128) {
+ logmsg " system() returned $ret\n";
+ $fail=1;
+ }
+ else {
+ my @memdata=`$memanalyze "$LOGDIR/$MEMDUMP"`;
+ my $leak=0;
+ for(@memdata) {
+ if($_ ne "") {
+ # well it could be other memory problems as well, but
+ # we call it leak for short here
+ $leak=1;
+ }
+ }
+ if($leak) {
+ logmsg "** MEMORY FAILURE\n";
+ logmsg @memdata;
+ logmsg `$memanalyze -l "$LOGDIR/$MEMDUMP"`;
+ $fail = 1;
+ }
+ }
+ if($fail) {
+ logmsg " $testnum: torture FAILED: function number $limit in test.\n",
+ " invoke with \"-t$limit\" to repeat this single case.\n";
+ stopservers($verbose);
+ return 1;
+ }
+ }
+
+ logmsg "\n" if($verbose);
+ logmsg "torture OK\n";
+ return 0;
+}
+
+
+#######################################################################
+# restore environment variables that were modified in test
+sub restore_test_env {
+ my $deleteoldenv = $_[0]; # 1 to delete the saved contents after restore
+ foreach my $var (keys %oldenv) {
+ if($oldenv{$var} eq 'notset') {
+ delete $ENV{$var} if($ENV{$var});
+ }
+ else {
+ $ENV{$var} = $oldenv{$var};
+ }
+ if($deleteoldenv) {
+ delete $oldenv{$var};
+ }
+ }
+}
+
+
+#######################################################################
+# Start the servers needed to run this test case
+sub singletest_startservers {
+ my ($testnum, $testtimings) = @_;
+
+ # remove old test server files before servers are started/verified
+ unlink("$LOGDIR/$SERVERCMD");
+ unlink("$LOGDIR/$SERVERIN");
+ unlink("$LOGDIR/$PROXYIN");
+
+ # timestamp required servers verification start
+ $$testtimings{"timesrvrini"} = Time::HiRes::time();
+
+ my $why;
+ my $error;
+ if (!$listonly) {
+ my @what = getpart("client", "server");
+ if(!$what[0]) {
+ warn "Test case $testnum has no server(s) specified";
+ $why = "no server specified";
+ $error = -1;
+ } else {
+ my $err;
+ ($why, $err) = serverfortest(@what);
+ if($err == 1) {
+ # Error indicates an actual problem starting the server
+ $error = -2;
+ } else {
+ $error = -1;
+ }
+ }
+ }
+
+ # timestamp required servers verification end
+ $$testtimings{"timesrvrend"} = Time::HiRes::time();
+
+ return ($why, $error);
+}
+
+
+#######################################################################
+# Generate preprocessed test file
+sub singletest_preprocess {
+ my $testnum = $_[0];
+
+ # Save a preprocessed version of the entire test file. This allows more
+ # "basic" test case readers to enjoy variable replacements.
+ my @entiretest = fulltest();
+ my $otest = "$LOGDIR/test$testnum";
+
+ @entiretest = prepro($testnum, @entiretest);
+
+ # save the new version
+ open(my $fulltesth, ">", "$otest") || die "Failure writing test file";
+ foreach my $bytes (@entiretest) {
+ print $fulltesth pack('a*', $bytes) or die "Failed to print '$bytes': $!";
+ }
+ close($fulltesth) || die "Failure writing test file";
+
+ # in case the process changed the file, reload it
+ loadtest("$LOGDIR/test${testnum}");
+}
+
+
+#######################################################################
+# Set up the test environment to run this test case
+sub singletest_setenv {
+ my @setenv = getpart("client", "setenv");
+ foreach my $s (@setenv) {
+ chomp $s;
+ if($s =~ /([^=]*)=(.*)/) {
+ my ($var, $content) = ($1, $2);
+ # remember current setting, to restore it once test runs
+ $oldenv{$var} = ($ENV{$var})?"$ENV{$var}":'notset';
+ # set new value
+ if(!$content) {
+ delete $ENV{$var} if($ENV{$var});
+ }
+ else {
+ if($var =~ /^LD_PRELOAD/) {
+ if(exe_ext('TOOL') && (exe_ext('TOOL') eq '.exe')) {
+ logmsg "Skipping LD_PRELOAD due to lack of OS support\n" if($verbose);
+ next;
+ }
+ if($feature{"debug"} || !$has_shared) {
+ logmsg "Skipping LD_PRELOAD due to no release shared build\n" if($verbose);
+ next;
+ }
+ }
+ $ENV{$var} = "$content";
+ logmsg "setenv $var = $content\n" if($verbose);
+ }
+ }
+ }
+ if($proxy_address) {
+ $ENV{http_proxy} = $proxy_address;
+ $ENV{HTTPS_PROXY} = $proxy_address;
+ }
+}
+
+
+#######################################################################
+# Check that test environment is fine to run this test case
+sub singletest_precheck {
+ my $testnum = $_[0];
+ my $why;
+ my @precheck = getpart("client", "precheck");
+ if(@precheck) {
+ my $cmd = $precheck[0];
+ chomp $cmd;
+ if($cmd) {
+ my @p = split(/ /, $cmd);
+ if($p[0] !~ /\//) {
+ # the first word, the command, does not contain a slash so
+ # we will scan the "improved" PATH to find the command to
+ # be able to run it
+ my $fullp = checktestcmd($p[0]);
+
+ if($fullp) {
+ $p[0] = $fullp;
+ }
+ $cmd = join(" ", @p);
+ }
+
+ my @o = `$cmd 2> $LOGDIR/precheck-$testnum`;
+ if($o[0]) {
+ $why = $o[0];
+ $why =~ s/[\r\n]//g;
+ }
+ elsif($?) {
+ $why = "precheck command error";
+ }
+ logmsg "prechecked $cmd\n" if($verbose);
+ }
+ }
+ return $why;
+}
+
+
+#######################################################################
+# Prepare the test environment to run this test case
+sub singletest_prepare {
+ my ($testnum) = @_;
+
+ if($feature{"TrackMemory"}) {
+ unlink("$LOGDIR/$MEMDUMP");
+ }
+ unlink("core");
+
+ # remove server output logfiles after servers are started/verified
+ unlink("$LOGDIR/$SERVERIN");
+ unlink("$LOGDIR/$PROXYIN");
+
+ # if this section exists, it might be FTP server instructions:
+ my @ftpservercmd = getpart("reply", "servercmd");
+ push @ftpservercmd, "Testnum $testnum\n";
+ # write the instructions to file
+ writearray("$LOGDIR/$SERVERCMD", \@ftpservercmd);
+
+ # create (possibly-empty) files before starting the test
+ for my $partsuffix (('', '1', '2', '3', '4')) {
+ my @inputfile=getpart("client", "file".$partsuffix);
+ my %fileattr = getpartattr("client", "file".$partsuffix);
+ my $filename=$fileattr{'name'};
+ if(@inputfile || $filename) {
+ if(!$filename) {
+ logmsg " $testnum: IGNORED: section client=>file has no name attribute\n";
+ return -1;
+ }
+ my $fileContent = join('', @inputfile);
+
+ # make directories if needed
+ my $path = $filename;
+ # cut off the file name part
+ $path =~ s/^(.*)\/[^\/]*/$1/;
+ my @ldparts = split(/\//, $LOGDIR);
+ my $nparts = @ldparts;
+ my @parts = split(/\//, $path);
+ if(join("/", @parts[0..$nparts-1]) eq $LOGDIR) {
+ # the file is in $LOGDIR/
+ my $d = shift @parts;
+ for(@parts) {
+ $d .= "/$_";
+ mkdir $d; # 0777
+ }
+ }
+ if (open(my $outfile, ">", "$filename")) {
+ binmode $outfile; # for crapage systems, use binary
+ if($fileattr{'nonewline'}) {
+ # cut off the final newline
+ chomp($fileContent);
+ }
+ print $outfile $fileContent;
+ close($outfile);
+ } else {
+ logmsg "ERROR: cannot write $filename\n";
+ }
+ }
+ }
+ return 0;
+}
+
+
+#######################################################################
+# Run the test command
+sub singletest_run {
+ my ($testnum, $testtimings) = @_;
+
+ # get the command line options to use
+ my ($cmd, @blaha)= getpart("client", "command");
+ if($cmd) {
+ # make some nice replace operations
+ $cmd =~ s/\n//g; # no newlines please
+ # substitute variables in the command line
+ }
+ else {
+ # there was no command given, use something silly
+ $cmd="-";
+ }
+
+ my $CURLOUT="$LOGDIR/curl$testnum.out"; # curl output if not stdout
+
+ # if stdout section exists, we verify that the stdout contained this:
+ my $out="";
+ my %cmdhash = getpartattr("client", "command");
+ if((!$cmdhash{'option'}) || ($cmdhash{'option'} !~ /no-output/)) {
+ #We may slap on --output!
+ if (!partexists("verify", "stdout") ||
+ ($cmdhash{'option'} && $cmdhash{'option'} =~ /force-output/)) {
+ $out=" --output $CURLOUT ";
+ }
+ }
+
+ my @codepieces = getpart("client", "tool");
+ my $tool="";
+ if(@codepieces) {
+ $tool = $codepieces[0];
+ chomp $tool;
+ $tool .= exe_ext('TOOL');
+ }
+
+ my $disablevalgrind;
+ my $CMDLINE="";
+ my $cmdargs;
+ my $cmdtype = $cmdhash{'type'} || "default";
+ my $fail_due_event_based = $run_event_based;
+ if($cmdtype eq "perl") {
+ # run the command line prepended with "perl"
+ $cmdargs ="$cmd";
+ $CMDLINE = "$perl ";
+ $tool=$CMDLINE;
+ $disablevalgrind=1;
+ }
+ elsif($cmdtype eq "shell") {
+ # run the command line prepended with "/bin/sh"
+ $cmdargs ="$cmd";
+ $CMDLINE = "/bin/sh ";
+ $tool=$CMDLINE;
+ $disablevalgrind=1;
+ }
+ elsif(!$tool && !$keywords{"unittest"}) {
+ # run curl, add suitable command line options
+ my $inc="";
+ if((!$cmdhash{'option'}) || ($cmdhash{'option'} !~ /no-include/)) {
+ $inc = " --include";
+ }
+ $cmdargs = "$out$inc ";
+
+ if($cmdhash{'option'} && ($cmdhash{'option'} =~ /binary-trace/)) {
+ $cmdargs .= "--trace $LOGDIR/trace$testnum ";
+ }
+ else {
+ $cmdargs .= "--trace-ascii $LOGDIR/trace$testnum ";
+ }
+ $cmdargs .= "--trace-time ";
+ if($run_event_based) {
+ $cmdargs .= "--test-event ";
+ $fail_due_event_based--;
+ }
+ $cmdargs .= $cmd;
+ if ($proxy_address) {
+ $cmdargs .= " --proxy $proxy_address ";
+ }
+ }
+ else {
+ $cmdargs = " $cmd"; # $cmd is the command line for the test file
+ $CURLOUT = stdoutfilename($LOGDIR, $testnum); # sends received data to stdout
+
+ # Default the tool to a unit test with the same name as the test spec
+ if($keywords{"unittest"} && !$tool) {
+ $tool="unit$testnum";
+ }
+
+ if($tool =~ /^lib/) {
+ $CMDLINE="$LIBDIR/$tool";
+ }
+ elsif($tool =~ /^unit/) {
+ $CMDLINE="$UNITDIR/$tool";
+ }
+
+ if(! -f $CMDLINE) {
+ logmsg " $testnum: IGNORED: The tool set in the test case for this: '$tool' does not exist\n";
+ return (-1, 0, 0, "", "", 0);
+ }
+ $DBGCURL=$CMDLINE;
+ }
+
+ if($fail_due_event_based) {
+ logmsg " $testnum: IGNORED: This test cannot run event based\n";
+ return (-1, 0, 0, "", "", 0);
+ }
+
+ if($gdbthis) {
+ # gdb is incompatible with valgrind, so disable it when debugging
+ # Perhaps a better approach would be to run it under valgrind anyway
+ # with --db-attach=yes or --vgdb=yes.
+ $disablevalgrind=1;
+ }
+
+ my @stdintest = getpart("client", "stdin");
+
+ if(@stdintest) {
+ my $stdinfile="$LOGDIR/stdin-for-$testnum";
+
+ my %hash = getpartattr("client", "stdin");
+ if($hash{'nonewline'}) {
+ # cut off the final newline from the final line of the stdin data
+ chomp($stdintest[-1]);
+ }
+
+ writearray($stdinfile, \@stdintest);
+
+ $cmdargs .= " <$stdinfile";
+ }
+
+ if(!$tool) {
+ $CMDLINE=shell_quote($CURL);
+ }
+
+ if(use_valgrind() && !$disablevalgrind) {
+ my $valgrindcmd = "$valgrind ";
+ $valgrindcmd .= "$valgrind_tool " if($valgrind_tool);
+ $valgrindcmd .= "--quiet --leak-check=yes ";
+ $valgrindcmd .= "--suppressions=$srcdir/valgrind.supp ";
+ # $valgrindcmd .= "--gen-suppressions=all ";
+ $valgrindcmd .= "--num-callers=16 ";
+ $valgrindcmd .= "${valgrind_logfile}=$LOGDIR/valgrind$testnum";
+ $CMDLINE = "$valgrindcmd $CMDLINE";
+ }
+
+ $CMDLINE .= "$cmdargs > " . stdoutfilename($LOGDIR, $testnum) .
+ " 2> " . stderrfilename($LOGDIR, $testnum);
+
+ if($verbose) {
+ logmsg "$CMDLINE\n";
+ }
+
+ open(my $cmdlog, ">", $CURLLOG) || die "Failure writing log file";
+ print $cmdlog "$CMDLINE\n";
+ close($cmdlog) || die "Failure writing log file";
+
+ my $dumped_core;
+ my $cmdres;
+
+ if($gdbthis) {
+ my $gdbinit = "$TESTDIR/gdbinit$testnum";
+ open(my $gdbcmd, ">", "$LOGDIR/gdbcmd") || die "Failure writing gdb file";
+ print $gdbcmd "set args $cmdargs\n";
+ print $gdbcmd "show args\n";
+ print $gdbcmd "source $gdbinit\n" if -e $gdbinit;
+ close($gdbcmd) || die "Failure writing gdb file";
+ }
+
+ # Flush output.
+ $| = 1;
+
+ # timestamp starting of test command
+ $$testtimings{"timetoolini"} = Time::HiRes::time();
+
+ # run the command line we built
+ if ($torture) {
+ $cmdres = torture($CMDLINE,
+ $testnum,
+ "$gdb --directory $LIBDIR " . shell_quote($DBGCURL) . " -x $LOGDIR/gdbcmd");
+ }
+ elsif($gdbthis) {
+ my $GDBW = ($gdbxwin) ? "-w" : "";
+ runclient("$gdb --directory $LIBDIR " . shell_quote($DBGCURL) . " $GDBW -x $LOGDIR/gdbcmd");
+ $cmdres=0; # makes it always continue after a debugged run
+ }
+ else {
+ # Convert the raw result code into a more useful one
+ ($cmdres, $dumped_core) = normalize_cmdres(runclient("$CMDLINE"));
+ }
+
+ # timestamp finishing of test command
+ $$testtimings{"timetoolend"} = Time::HiRes::time();
+
+ return (0, $cmdres, $dumped_core, $CURLOUT, $tool, use_valgrind() && !$disablevalgrind);
+}
+
+
+#######################################################################
+# Clean up after test command
+sub singletest_clean {
+ my ($testnum, $dumped_core, $testtimings)=@_;
+
+ if(!$dumped_core) {
+ if(-r "core") {
+ # there's core file present now!
+ $dumped_core = 1;
+ }
+ }
+
+ if($dumped_core) {
+ logmsg "core dumped\n";
+ if(0 && $gdb) {
+ logmsg "running gdb for post-mortem analysis:\n";
+ open(my $gdbcmd, ">", "$LOGDIR/gdbcmd2") || die "Failure writing gdb file";
+ print $gdbcmd "bt\n";
+ close($gdbcmd) || die "Failure writing gdb file";
+ runclient("$gdb --directory libtest -x $LOGDIR/gdbcmd2 -batch " . shell_quote($DBGCURL) . " core ");
+ # unlink("$LOGDIR/gdbcmd2");
+ }
+ }
+
+ # If a server logs advisor read lock file exists, it is an indication
+ # that the server has not yet finished writing out all its log files,
+ # including server request log files used for protocol verification.
+ # So, if the lock file exists the script waits here a certain amount
+ # of time until the server removes it, or the given time expires.
+ my $serverlogslocktimeout = $defserverlogslocktimeout;
+ my %cmdhash = getpartattr("client", "command");
+ if($cmdhash{'timeout'}) {
+ # test is allowed to override default server logs lock timeout
+ if($cmdhash{'timeout'} =~ /(\d+)/) {
+ $serverlogslocktimeout = $1 if($1 >= 0);
+ }
+ }
+ if($serverlogslocktimeout) {
+ my $lockretry = $serverlogslocktimeout * 20;
+ my @locks;
+ while((@locks = logslocked()) && $lockretry--) {
+ portable_sleep(0.05);
+ }
+ if(($lockretry < 0) &&
+ ($serverlogslocktimeout >= $defserverlogslocktimeout)) {
+ logmsg "Warning: server logs lock timeout ",
+ "($serverlogslocktimeout seconds) expired (locks: " .
+ join(", ", @locks) . ")\n";
+ }
+ }
+
+ # Test harness ssh server does not have this synchronization mechanism,
+ # this implies that some ssh server based tests might need a small delay
+ # once that the client command has run to avoid false test failures.
+ #
+ # gnutls-serv also lacks this synchronization mechanism, so gnutls-serv
+ # based tests might need a small delay once that the client command has
+ # run to avoid false test failures.
+ my $postcommanddelay = $defpostcommanddelay;
+ if($cmdhash{'delay'}) {
+ # test is allowed to specify a delay after command is executed
+ if($cmdhash{'delay'} =~ /(\d+)/) {
+ $postcommanddelay = $1 if($1 > 0);
+ }
+ }
+
+ portable_sleep($postcommanddelay) if($postcommanddelay);
+
+ # timestamp removal of server logs advisor read lock
+ $$testtimings{"timesrvrlog"} = Time::HiRes::time();
+
+ # test definition might instruct to stop some servers
+ # stop also all servers relative to the given one
+
+ my @killtestservers = getpart("client", "killserver");
+ if(@killtestservers) {
+ foreach my $server (@killtestservers) {
+ chomp $server;
+ if(stopserver($server)) {
+ logmsg " $testnum: killserver FAILED\n";
+ return 1; # normal error if asked to fail on unexpected alive
+ }
+ }
+ }
+ return 0;
+}
+
+#######################################################################
+# Verify that the postcheck succeeded
+sub singletest_postcheck {
+ my ($testnum)=@_;
+
+ # run the postcheck command
+ my @postcheck= getpart("client", "postcheck");
+ if(@postcheck) {
+ my $cmd = join("", @postcheck);
+ chomp $cmd;
+ if($cmd) {
+ logmsg "postcheck $cmd\n" if($verbose);
+ my $rc = runclient("$cmd");
+ # Must run the postcheck command in torture mode in order
+ # to clean up, but the result can't be relied upon.
+ if($rc != 0 && !$torture) {
+ logmsg " $testnum: postcheck FAILED\n";
+ return -1;
+ }
+ }
+ }
+ return 0;
+}
+
+
+
+###################################################################
+# Get ready to run a single test case
+sub runner_test_preprocess {
+ my ($testnum)=@_;
+ my %testtimings;
+
+ if(clearlogs()) {
+ logmsg "Warning: log messages were lost\n";
+ }
+
+ # timestamp test preparation start
+ # TODO: this metric now shows only a portion of the prep time; better would
+ # be to time singletest_preprocess below instead
+ $testtimings{"timeprepini"} = Time::HiRes::time();
+
+ ###################################################################
+ # Load test metadata
+ # ignore any error here--if there were one, it would have been
+ # caught during the selection phase and this test would not be
+ # running now
+ loadtest("${TESTDIR}/test${testnum}");
+ readtestkeywords();
+
+ ###################################################################
+ # Restore environment variables that were modified in a previous run.
+ # Test definition may instruct to (un)set environment vars.
+ restore_test_env(1);
+
+ ###################################################################
+ # Start the servers needed to run this test case
+ my ($why, $error) = singletest_startservers($testnum, \%testtimings);
+
+ if(!$why) {
+
+ ###############################################################
+ # Generate preprocessed test file
+ # This must be done after the servers are started so server
+ # variables are available for substitution.
+ singletest_preprocess($testnum);
+
+ ###############################################################
+ # Set up the test environment to run this test case
+ singletest_setenv();
+
+ ###############################################################
+ # Check that the test environment is fine to run this test case
+ if (!$listonly) {
+ $why = singletest_precheck($testnum);
+ $error = -1;
+ }
+ }
+ return ($why, $error, clearlogs(), \%testtimings);
+}
+
+
+###################################################################
+# Run a single test case with an environment that already been prepared
+# Returns 0=success, -1=skippable failure, -2=permanent error,
+# 1=unskippable test failure, as first integer, plus any log messages,
+# plus more return values when error is 0
+sub runner_test_run {
+ my ($testnum)=@_;
+
+ if(clearlogs()) {
+ logmsg "Warning: log messages were lost\n";
+ }
+
+ #######################################################################
+ # Prepare the test environment to run this test case
+ my $error = singletest_prepare($testnum);
+ if($error) {
+ return (-2, clearlogs());
+ }
+
+ #######################################################################
+ # Run the test command
+ my %testtimings;
+ my $cmdres;
+ my $dumped_core;
+ my $CURLOUT;
+ my $tool;
+ my $usedvalgrind;
+ ($error, $cmdres, $dumped_core, $CURLOUT, $tool, $usedvalgrind) = singletest_run($testnum, \%testtimings);
+ if($error) {
+ return (-2, clearlogs(), \%testtimings);
+ }
+
+ #######################################################################
+ # Clean up after test command
+ $error = singletest_clean($testnum, $dumped_core, \%testtimings);
+ if($error) {
+ return ($error, clearlogs(), \%testtimings);
+ }
+
+ #######################################################################
+ # Verify that the postcheck succeeded
+ $error = singletest_postcheck($testnum);
+ if($error) {
+ return ($error, clearlogs(), \%testtimings);
+ }
+
+ #######################################################################
+ # restore environment variables that were modified
+ restore_test_env(0);
+
+ return (0, clearlogs(), \%testtimings, $cmdres, $CURLOUT, $tool, $usedvalgrind);
+}
+
+# Async call runner_clearlocks
+# Called by controller
+sub runnerac_clearlocks {
+ return controlleripccall(\&runner_clearlocks, @_);
+}
+
+# Async call runner_shutdown
+# This call does NOT generate an IPC response and must be the last IPC call
+# received.
+# Called by controller
+sub runnerac_shutdown {
+ my ($runnerid)=$_[0];
+ my $err = controlleripccall(\&runner_shutdown, @_);
+
+ # These have no more use
+ close($controllerw{$runnerid});
+ undef $controllerw{$runnerid};
+ close($controllerr{$runnerid});
+ undef $controllerr{$runnerid};
+ return $err;
+}
+
+# Async call of runner_stopservers
+# Called by controller
+sub runnerac_stopservers {
+ return controlleripccall(\&runner_stopservers, @_);
+}
+
+# Async call of runner_test_preprocess
+# Called by controller
+sub runnerac_test_preprocess {
+ return controlleripccall(\&runner_test_preprocess, @_);
+}
+
+# Async call of runner_test_run
+# Called by controller
+sub runnerac_test_run {
+ return controlleripccall(\&runner_test_run, @_);
+}
+
+###################################################################
+# Call an arbitrary function via IPC
+# The first argument is the function reference, the second is the runner ID
+# Returns 0 on success, -1 on error writing to runner
+# Called by controller (indirectly, via a more specific function)
+sub controlleripccall {
+ my $funcref = shift @_;
+ my $runnerid = shift @_;
+ # Get the name of the function from the reference
+ my $cv = svref_2object($funcref);
+ my $gv = $cv->GV;
+ # Prepend the name to the function arguments so it's marshalled along with them
+ unshift @_, $gv->NAME;
+ # Marshall the arguments into a flat string
+ my $margs = freeze \@_;
+
+ # Send IPC call via pipe
+ my $err;
+ while(! defined ($err = syswrite($controllerw{$runnerid}, (pack "L", length($margs)) . $margs)) || $err <= 0) {
+ if((!defined $err && ! $!{EINTR}) || (defined $err && $err == 0)) {
+ # Runner has likely died
+ return -1;
+ }
+ # system call was interrupted, probably by ^C; restart it so we stay in sync
+ }
+
+ if(!$multiprocess) {
+ # Call the remote function here in single process mode
+ ipcrecv();
+ }
+ return 0;
+}
+
+###################################################################
+# Receive async response of a previous call via IPC
+# The first return value is the runner ID or undef on error
+# Called by controller
+sub runnerar {
+ my ($runnerid) = @_;
+ my $err;
+ my $datalen;
+ while(! defined ($err = sysread($controllerr{$runnerid}, $datalen, 4)) || $err <= 0) {
+ if((!defined $err && ! $!{EINTR}) || (defined $err && $err == 0)) {
+ # Runner is likely dead and closed the pipe
+ return undef;
+ }
+ # system call was interrupted, probably by ^C; restart it so we stay in sync
+ }
+ my $len=unpack("L", $datalen);
+ my $buf;
+ while(! defined ($err = sysread($controllerr{$runnerid}, $buf, $len)) || $err <= 0) {
+ if((!defined $err && ! $!{EINTR}) || (defined $err && $err == 0)) {
+ # Runner is likely dead and closed the pipe
+ return undef;
+ }
+ # system call was interrupted, probably by ^C; restart it so we stay in sync
+ }
+
+ # Decode response values
+ my $resarrayref = thaw $buf;
+
+ # First argument is runner ID
+ # TODO: remove this; it's unneeded since it's passed in
+ unshift @$resarrayref, $runnerid;
+ return @$resarrayref;
+}
+
+###################################################################
+# Returns runner ID if a response from an async call is ready or error
+# First value is ready, second is error, however an error case shows up
+# as ready in Linux, so you can't trust it.
+# argument is 0 for nonblocking, undef for blocking, anything else for timeout
+# Called by controller
+sub runnerar_ready {
+ my ($blocking) = @_;
+ my $rin = "";
+ my %idbyfileno;
+ my $maxfileno=0;
+ foreach my $p (keys(%controllerr)) {
+ my $fd = fileno($controllerr{$p});
+ vec($rin, $fd, 1) = 1;
+ $idbyfileno{$fd} = $p; # save the runner ID for each pipe fd
+ if($fd > $maxfileno) {
+ $maxfileno = $fd;
+ }
+ }
+ $maxfileno || die "Internal error: no runners are available to wait on\n";
+
+ # Wait for any pipe from any runner to be ready
+ # This may be interrupted and return EINTR, but this is ignored and the
+ # caller will need to later call this function again.
+ # TODO: this is relatively slow with hundreds of fds
+ my $ein = $rin;
+ if(select(my $rout=$rin, undef, my $eout=$ein, $blocking) >= 1) {
+ for my $fd (0..$maxfileno) {
+ # Return an error condition first in case it's both
+ if(vec($eout, $fd, 1)) {
+ return (undef, $idbyfileno{$fd});
+ }
+ if(vec($rout, $fd, 1)) {
+ return ($idbyfileno{$fd}, undef);
+ }
+ }
+ die "Internal pipe readiness inconsistency\n";
+ }
+ return (undef, undef);
+}
+
+
+###################################################################
+# Cleanly abort and exit the runner
+# This uses print since there is no longer any controller to write logs.
+sub runnerabort{
+ print "Controller is gone: runner $$ for $LOGDIR exiting\n";
+ my ($error, $logs) = runner_stopservers();
+ print $logs;
+ runner_shutdown();
+}
+
+###################################################################
+# Receive an IPC call in the runner and execute it
+# The IPC is read from the $runnerr pipe and the response is
+# written to the $runnerw pipe
+# Returns 0 if more IPC calls are expected or 1 if the runner should exit
+sub ipcrecv {
+ my $err;
+ my $datalen;
+ while(! defined ($err = sysread($runnerr, $datalen, 4)) || $err <= 0) {
+ if((!defined $err && ! $!{EINTR}) || (defined $err && $err == 0)) {
+ # pipe has closed; controller is gone and we must exit
+ runnerabort();
+ # Special case: no response will be forthcoming
+ return 1;
+ }
+ # system call was interrupted, probably by ^C; restart it so we stay in sync
+ }
+ my $len=unpack("L", $datalen);
+ my $buf;
+ while(! defined ($err = sysread($runnerr, $buf, $len)) || $err <= 0) {
+ if((!defined $err && ! $!{EINTR}) || (defined $err && $err == 0)) {
+ # pipe has closed; controller is gone and we must exit
+ runnerabort();
+ # Special case: no response will be forthcoming
+ return 1;
+ }
+ # system call was interrupted, probably by ^C; restart it so we stay in sync
+ }
+
+ # Decode the function name and arguments
+ my $argsarrayref = thaw $buf;
+
+ # The name of the function to call is the first argument
+ my $funcname = shift @$argsarrayref;
+
+ # print "ipcrecv $funcname\n";
+ # Synchronously call the desired function
+ my @res;
+ if($funcname eq "runner_clearlocks") {
+ @res = runner_clearlocks(@$argsarrayref);
+ }
+ elsif($funcname eq "runner_shutdown") {
+ runner_shutdown(@$argsarrayref);
+ # Special case: no response will be forthcoming
+ return 1;
+ }
+ elsif($funcname eq "runner_stopservers") {
+ @res = runner_stopservers(@$argsarrayref);
+ }
+ elsif($funcname eq "runner_test_preprocess") {
+ @res = runner_test_preprocess(@$argsarrayref);
+ }
+ elsif($funcname eq "runner_test_run") {
+ @res = runner_test_run(@$argsarrayref);
+ } else {
+ die "Unknown IPC function $funcname\n";
+ }
+ # print "ipcrecv results\n";
+
+ # Marshall the results to return
+ $buf = freeze \@res;
+
+ while(! defined ($err = syswrite($runnerw, (pack "L", length($buf)) . $buf)) || $err <= 0) {
+ if((!defined $err && ! $!{EINTR}) || (defined $err && $err == 0)) {
+ # pipe has closed; controller is gone and we must exit
+ runnerabort();
+ # Special case: no response will be forthcoming
+ return 1;
+ }
+ # system call was interrupted, probably by ^C; restart it so we stay in sync
+ }
+
+ return 0;
+}
+
+###################################################################
+# Kill the server processes that still have lock files in a directory
+sub runner_clearlocks {
+ my ($lockdir)=@_;
+ if(clearlogs()) {
+ logmsg "Warning: log messages were lost\n";
+ }
+ clearlocks($lockdir);
+ return clearlogs();
+}
+
+
+###################################################################
+# Kill all server processes
+sub runner_stopservers {
+ my $error = stopservers($verbose);
+ my $logs = clearlogs();
+ return ($error, $logs);
+}
+
+###################################################################
+# Shut down this runner
+sub runner_shutdown {
+ close($runnerr);
+ undef $runnerr;
+ close($runnerw);
+ undef $runnerw;
+}
+
+
+1;
diff --git a/tests/runtests.1 b/tests/runtests.1
index 8ab67245b..d7b863b9e 100644
--- a/tests/runtests.1
+++ b/tests/runtests.1
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH runtests.pl 1 "September 02, 2022" "Curl 7.86.0" "runtests"
+.TH runtests.pl 1 "October 24, 2023" "untests 8.5.0" runtests
.SH NAME
runtests.pl \- run one or more test cases
@@ -54,15 +54,50 @@ this keyword. Remember that the exclamation marks and spaces will need to be
quoted somehow when entered at many command shells.
Prefix a keyword with a tilde (~) to still run it, but ignore the results.
+
+.SH "OUTPUT"
+
+When running without -s (short output), for instance when running runtests.pl
+directly rather than via make, each test will emits a pair of lines like this:
+
+Test 0045...[simple HTTP Location: without protocol in initial URL]
+--pd---e-v- OK (45 out of 1427, remaining: 16:08, took 6.188s, duration: 00:31)
+
+the first line contains the test number and a description. On the second line,
+the characters at the beginning are flags indicating which aspects of curl's
+behavior were checked by the test:
+
+ s stdout
+ r stderr
+ p protocol
+ d data
+ u upload
+ P proxy
+ o output
+ e exit code
+ m memory
+ v valgrind
+ E the test was run event-based
+
+The remainder of the second line contains the test result, current test sequence,
+total number of tests to be run and an estimated amount of time to complete the
+test run.
+
.SH OPTIONS
.IP "-a"
Continue running the rest of the test cases even if one test fails. By
default, the test script stops as soon as an error is detected.
+.IP "-ac <curl>"
+Provide a path to a curl binary to talk to APIs (currently only CI test APIs).
+.IP "-am"
+Display test results in automake style output (PASS/FAIL: [number] [name]).
.IP "-c <curl>"
Provide a path to a custom curl binary to run the tests with. Default is the
curl executable in the build tree.
.IP "-d"
-Enable protocol debug: have the servers display protocol output.
+Enable protocol debug: have the servers display protocol output. If used in
+conjunction with parallel testing, it will be difficult to associate the logs
+with the test being run.
.IP "-E <exclude_file>"
Load the \fBexclude_file\fP with additional reasons why certain tests
should be skipped. Useful when testing with external HTTP proxies in
@@ -82,8 +117,17 @@ Run the given test(s) with gdb. This is best used on a single test case and
curl built --disable-shared. This then fires up gdb with command line set to
run the specified test case. Simply (set a break-point and) type 'run' to
start.
-.IP "-h"
+.IP "-gw"
+Run the given test(s) with gdb as a windowed application.
+.IP "-h, --help"
Displays a help text about this program's command line options.
+.IP "-j[num]"
+Spawn num processes to run tests. This defaults to 0 to run tests serially
+within a single process. Using a number greater than one allows multiple tests
+to run in parallel, speeding up a test run. The optimum number is dependent on
+the system and set of tests to run, but 7*number of CPU cores is a good figure
+to start with, or 1.3*number of CPU cores if Valgrind is in use. Enabling
+parallel tests is not recommended in conjunction with the \-g option.
.IP "-k"
Keep output and log files in log/ after a test run, even if no error was
detected. Useful for debugging.
@@ -96,6 +140,9 @@ using curl's regression test suite.
Lists all test case names.
.IP "-n"
Disable the check for and use of valgrind.
+.IP "--no-debuginfod"
+Delete the DEBUGINFOD_URLS variable if that is defined. Makes valgrind, gdb
+etc not able to use this functionality.
.IP "-o <variablename=value>"
Overwrite the specified internal \fBvariable\fP with \fBvalue\fP.
Useful to change variables that didn't get a dedicated flag to change them.
@@ -131,7 +178,7 @@ extended the test sequence.
.IP "-s"
Shorter output. Speaks less than default.
.IP "--seed=[num]"
-When using \fI--shallow\fP or \fI-R\rP that random certain aspects of the
+When using \fI--shallow\fP or \fI-R\fP that randomize certain aspects of the
behavior, this option can set the initial seed. If not set, the random seed
will be set based on the currently set local year and month and the first line
of the "curl -V" output.
@@ -153,7 +200,9 @@ combination with \fI-g\fP.
.IP "-u"
Error instead of warning on server unexpectedly alive.
.IP "-v"
-Enable verbose output. Speaks more than default.
+Enable verbose output. Speaks more than by default. If used in conjunction with
+parallel testing, it will be difficult to associate the logs with the test
+being run.
.IP "-vc <curl>"
Provide a path to a custom curl binary to run when verifying that the servers
running are indeed our test servers. Default is the curl executable in the
@@ -174,4 +223,4 @@ documented earlier.
.SH "WRITING TESTS"
The simplest way to write test cases is to start with a similar existing test,
save it with a new number and then adjust it to fit. There's an attempt to
-document the test case file format in the tests/FILEFORMAT.
+document the test case file format in the tests/FILEFORMAT.md.
diff --git a/tests/runtests.pl b/tests/runtests.pl
index 3f6197249..e7b9f01f6 100755
--- a/tests/runtests.pl
+++ b/tests/runtests.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -23,6 +23,8 @@
#
###########################################################################
+# For documentation, run `man ./runtests.1` and see README.md.
+
# Experimental hooks are available to run tests remotely on machines that
# are able to run curl but are unable to run the test harness.
# The following sections need to be modified:
@@ -54,6 +56,10 @@
# fixed. As long as the -g option is never given, and the -n is always
# given, this won't be a problem.
+use strict;
+# Promote all warnings to fatal
+use warnings FATAL => 'all';
+use 5.006;
# These should be the only variables that might be needed to get edited:
@@ -74,126 +80,30 @@ BEGIN {
}
}
-use strict;
-use warnings;
-use Cwd;
use Digest::MD5 qw(md5);
-use MIME::Base64;
-
-# Subs imported from serverhelp module
-use serverhelp qw(
- serverfactors
- servername_id
- servername_str
- servername_canon
- server_pidfilename
- server_portfilename
- server_logfilename
- );
+use List::Util 'sum';
-# Variables and subs imported from sshhelp module
-use sshhelp qw(
- $sshdexe
- $sshexe
- $sftpexe
- $sshconfig
- $sftpconfig
- $sshdlog
- $sshlog
- $sftplog
- $sftpcmds
- display_sshdconfig
- display_sshconfig
- display_sftpconfig
- display_sshdlog
- display_sshlog
- display_sftplog
+use pathhelp qw(
exe_ext
- find_sshd
- find_ssh
- find_sftp
- find_httptlssrv
- sshversioninfo
+ sys_native_current_path
+ );
+use processhelp qw(
+ portable_sleep
);
-use pathhelp;
-
-require "getpart.pm"; # array functions
-require "valgrind.pm"; # valgrind report parser
-require "ftp.pm";
-require "azure.pm";
-require "appveyor.pm";
-
-my $HOSTIP="127.0.0.1"; # address on which the test server listens
-my $HOST6IP="[::1]"; # address on which the test server listens
-my $CLIENTIP="127.0.0.1"; # address which curl uses for incoming connections
-my $CLIENT6IP="[::1]"; # address which curl uses for incoming connections
-
-my $noport="[not running]";
-
-my $NOLISTENPORT=47; # port number we use for a local non-listening service
-my $MQTTPORT=$noport; # MQTT server port
-my $HTTPPORT=$noport; # HTTP server port
-my $HTTP6PORT=$noport; # HTTP IPv6 server port
-my $HTTPSPORT=$noport; # HTTPS (stunnel) server port
-my $HTTPSPROXYPORT = $noport; # HTTPS-proxy (stunnel) port
-my $FTPPORT=$noport; # FTP server port
-my $FTPSPORT=$noport; # FTPS (stunnel) server port
-my $FTP6PORT=$noport; # FTP IPv6 server port
-my $TFTPPORT=$noport; # TFTP
-my $TFTP6PORT=$noport; # TFTP
-my $SSHPORT=$noport; # SCP/SFTP
-my $SOCKSPORT=$noport; # SOCKS4/5 port
-my $POP3PORT=$noport; # POP3
-my $POP36PORT=$noport; # POP3 IPv6 server port
-my $IMAPPORT=$noport; # IMAP
-my $IMAP6PORT=$noport; # IMAP IPv6 server port
-my $SMTPPORT=$noport; # SMTP
-my $SMTP6PORT=$noport; # SMTP IPv6 server port
-my $RTSPPORT=$noport; # RTSP
-my $RTSP6PORT=$noport; # RTSP IPv6 server port
-my $GOPHERPORT=$noport; # Gopher
-my $GOPHERSPORT=$noport; # Gophers
-my $GOPHER6PORT=$noport; # Gopher IPv6 server port
-my $HTTPTLSPORT=$noport; # HTTP TLS (non-stunnel) server port
-my $HTTPTLS6PORT=$noport; # HTTP TLS (non-stunnel) IPv6 server port
-my $HTTPPROXYPORT=$noport; # HTTP proxy port, when using CONNECT
-my $HTTP2PORT=$noport; # HTTP/2 server port
-my $DICTPORT=$noport; # DICT server port
-my $SMBPORT=$noport; # SMB server port
-my $SMBSPORT=$noport; # SMBS server port
-my $TELNETPORT=$noport; # TELNET server port with negotiation
-my $HTTPUNIXPATH; # HTTP server Unix domain socket path
-my $SOCKSUNIXPATH; # socks server Unix domain socket path
-
-my $use_external_proxy = 0;
-my $proxy_address;
-my %custom_skip_reasons;
+use appveyor;
+use azure;
+use getpart; # array functions
+use servers;
+use valgrind; # valgrind report parser
+use globalconfig;
+use runner;
+use testutil;
-my $SSHSRVMD5 = "[uninitialized]"; # MD5 of ssh server public key
-my $SSHSRVSHA256 = "[uninitialized]"; # SHA256 of ssh server public key
-my $VERSION=""; # curl's reported version number
+my %custom_skip_reasons;
-my $srcdir = $ENV{'srcdir'} || '.';
-my $CURL="../src/curl".exe_ext('TOOL'); # what curl binary to run on the tests
-my $VCURL=$CURL; # what curl binary to use to verify the servers with
- # VCURL is handy to set to the system one when the one you
- # just built hangs or crashes and thus prevent verification
my $ACURL=$VCURL; # what curl binary to use to talk to APIs (relevant for CI)
# ACURL is handy to set to the system one for reliability
-my $DBGCURL=$CURL; #"../src/.libs/curl"; # alternative for debugging
-my $LOGDIR="log";
-my $TESTDIR="$srcdir/data";
-my $LIBDIR="./libtest";
-my $UNITDIR="./unit";
-# TODO: change this to use server_inputfilename()
-my $SERVERIN="$LOGDIR/server.input"; # what curl sent the server
-my $SERVER2IN="$LOGDIR/server2.input"; # what curl sent the second server
-my $PROXYIN="$LOGDIR/proxy.input"; # what curl sent the proxy
-my $SOCKSIN="$LOGDIR/socksd-request.log"; # what curl sent to the SOCKS proxy
-my $CURLLOG="commands.log"; # all command lines run
-my $FTPDCMD="$LOGDIR/ftpserver.cmd"; # copy server instructions here
-my $SERVERLOGS_LOCK="$LOGDIR/serverlogs.lock"; # server logs advisor read lock
my $CURLCONFIG="../curl-config"; # curl-config from current build
# Normally, all test cases should be run, but at times it is handy to
@@ -207,107 +117,23 @@ my $TESTCASES="all";
# No variables below this point should need to be modified
#
-# invoke perl like this:
-my $perl="perl -I$srcdir";
-my $server_response_maxtime=13;
-
-my $debug_build=0; # built debug enabled (--enable-debug)
-my $has_memory_tracking=0; # built with memory tracking (--enable-curldebug)
my $libtool;
my $repeat = 0;
-# name of the file that the memory debugging creates:
-my $memdump="$LOGDIR/memdump";
-
-# the path to the script that analyzes the memory debug output file:
-my $memanalyze="$perl $srcdir/memanalyze.pl";
-
-my $pwd = getcwd(); # current working directory
-my $posix_pwd = $pwd;
-
-my $start;
-my $ftpchecktime=1; # time it took to verify our test FTP server
-my $scrambleorder;
-my $stunnel = checkcmd("stunnel4") || checkcmd("tstunnel") || checkcmd("stunnel");
-my $valgrind = checktestcmd("valgrind");
-my $valgrind_logfile="--logfile";
-my $valgrind_tool;
-my $gdb = checktestcmd("gdb");
-my $httptlssrv = find_httptlssrv();
+my $start; # time at which testing started
my $uname_release = `uname -r`;
my $is_wsl = $uname_release =~ /Microsoft$/;
-my $has_ssl; # set if libcurl is built with SSL support
-my $has_largefile; # set if libcurl is built with large file support
-my $has_idn; # set if libcurl is built with IDN support
my $http_ipv6; # set if HTTP server has IPv6 support
my $http_unix; # set if HTTP server has Unix sockets support
my $ftp_ipv6; # set if FTP server has IPv6 support
-my $tftp_ipv6; # set if TFTP server has IPv6 support
-my $gopher_ipv6; # set if Gopher server has IPv6 support
-my $has_ipv6; # set if libcurl is built with IPv6 support
-my $has_unix; # set if libcurl is built with Unix sockets support
-my $has_libz; # set if libcurl is built with libz support
-my $has_brotli; # set if libcurl is built with brotli support
-my $has_zstd; # set if libcurl is built with zstd support
-my $has_getrlimit; # set if system has getrlimit()
-my $has_ntlm; # set if libcurl is built with NTLM support
-my $has_ntlm_wb; # set if libcurl is built with NTLM delegation to winbind
-my $has_sspi; # set if libcurl is built with Windows SSPI
-my $has_gssapi; # set if libcurl is built with a GSS-API library
-my $has_kerberos; # set if libcurl is built with Kerberos support
-my $has_spnego; # set if libcurl is built with SPNEGO support
-my $has_charconv; # set if libcurl is built with CharConv support
-my $has_tls_srp; # set if libcurl is built with TLS-SRP support
-my $has_http2; # set if libcurl is built with HTTP2 support
-my $has_h2c; # set if libcurl is built with h2c support
-my $has_httpsproxy; # set if libcurl is built with HTTPS-proxy support
-my $has_crypto; # set if libcurl is built with cryptographic support
-my $has_cares; # set if built with c-ares
-my $has_threadedres;# set if built with threaded resolver
-my $has_psl; # set if libcurl is built with PSL support
-my $has_altsvc; # set if libcurl is built with alt-svc support
-my $has_hsts; # set if libcurl is built with HSTS support
-my $has_ldpreload; # set if built for systems supporting LD_PRELOAD
-my $has_multissl; # set if build with MultiSSL support
-my $has_manual; # set if built with built-in manual
-my $has_win32; # set if built for Windows
-my $has_mingw; # set if built with MinGW (as opposed to MinGW-w64)
-my $has_hyper = 0; # set if built with Hyper
-my $has_libssh2; # set if built with libssh2
-my $has_libssh; # set if built with libssh
-my $has_oldlibssh; # set if built with libssh < 0.9.4
-my $has_wolfssh; # set if built with wolfssh
-my $has_unicode; # set if libcurl is built with Unicode support
-my $has_threadsafe; # set if libcurl is built with thread-safety support
-
-# this version is decided by the particular nghttp2 library that is being used
-my $h2cver = "h2c";
-
-my $has_rustls; # built with rustls
-my $has_openssl; # built with a lib using an OpenSSL-like API
-my $has_gnutls; # built with GnuTLS
-my $has_nss; # built with NSS
-my $has_wolfssl; # built with wolfSSL
-my $has_bearssl; # built with BearSSL
-my $has_schannel; # built with Schannel
-my $has_sectransp; # built with Secure Transport
-my $has_boringssl; # built with BoringSSL
-my $has_libressl; # built with libressl
-my $has_mbedtls; # built with mbedTLS
-
-my $has_sslpinning; # built with a TLS backend that supports pinning
-
-my $has_shared = "unknown"; # built shared
my $resolver; # name of the resolver backend (for human presentation)
my $has_textaware; # set if running on a system that has a text mode concept
# on files. Windows for example
-my @protocols; # array of lowercase supported protocol servers
-my $skipped=0; # number of tests skipped; reported in main loop
my %skipped; # skipped{reason}=counter, reasons for skip
my @teststat; # teststat[testnum]=reason, reasons for skip
my %disabled_keywords; # key words of tests to skip
@@ -315,14 +141,7 @@ my %ignored_keywords; # key words of tests to ignore results
my %enabled_keywords; # key words of tests to run
my %disabled; # disabled test cases
my %ignored; # ignored results of test cases
-
-my $sshdid; # for socks server, ssh daemon version id
-my $sshdvernum; # for socks server, ssh daemon version number
-my $sshdverstr; # for socks server, ssh daemon version string
-my $sshderror; # for socks server, ssh daemon version error
-
-my $defserverlogslocktimeout = 2; # timeout to await server logs lock removal
-my $defpostcommanddelay = 0; # delay between command and postcheck sections
+my %ignoretestcodes; # if test results are to be ignored
my $timestats; # time stamping and stats generation
my $fullstats; # show time stats for every single test
@@ -333,43 +152,35 @@ my %timetoolini; # timestamp for each test command run starting
my %timetoolend; # timestamp for each test command run stopping
my %timesrvrlog; # timestamp for each test server logs lock removal
my %timevrfyend; # timestamp for each test result verification end
-
-my $testnumcheck; # test number, set in singletest sub.
-my %oldenv;
-my %feature; # array of enabled features
-my %keywords; # array of keywords from the test spec
+my $globalabort; # flag signalling program abort
+
+# values for $singletest_state
+use constant {
+ ST_INIT => 0,
+ ST_CLEARLOCKS => 1,
+ ST_INITED => 2,
+ ST_PREPROCESS => 3,
+ ST_RUN => 4,
+};
+my %singletest_state; # current state of singletest() by runner ID
+my %singletest_logs; # log messages while in singletest array ref by runner
+my $singletest_bufferedrunner; # runner ID which is buffering logs
+my %runnerids; # runner IDs by number
+my @runnersidle; # runner IDs idle and ready to execute a test
+my %countforrunner; # test count by runner ID
+my %runnersrunning; # tests currently running by runner ID
#######################################################################
# variables that command line options may set
#
-
my $short;
-my $automakestyle;
-my $verbose;
-my $debugprotocol;
-my $anyway;
-my $gdbthis; # run test case with gdb debugger
-my $gdbxwin; # use windowed gdb when using gdb
+my $no_debuginfod;
my $keepoutfiles; # keep stdout and stderr files after tests
my $clearlocks; # force removal of files by killing locking processes
-my $listonly; # only list the tests
my $postmortem; # display detailed info about failed tests
-my $err_unexpected; # error instead of warning on server unexpectedly alive
-my $run_event_based; # run curl with --test-event to test the event API
-my $run_disabeled; # run the specific tests even if listed in DISABLED
-
-my %run; # running server
-my %doesntrun; # servers that don't work, identified by pidfile
-my %serverpidfile;# all server pid file names, identified by server id
-my %serverportfile;# all server port file names, identified by server id
-my %runcert; # cert file currently in use by an ssl running server
-
-# torture test variables
-my $torture;
-my $tortnum;
-my $tortalloc;
-my $shallow;
-my $randseed = 0;
+my $run_disabled; # run the specific tests even if listed in DISABLED
+my $scrambleorder;
+my $jobs = 0;
# Azure Pipelines specific variables
my $AZURE_RUN_ID = 0;
@@ -379,8 +190,15 @@ my $AZURE_RESULT_ID = 0;
# logmsg is our general message logging subroutine.
#
sub logmsg {
+ if($singletest_bufferedrunner) {
+ # Logs are currently being buffered
+ return singletest_logmsg(@_);
+ }
for(@_) {
my $line = $_;
+ if(!$line) {
+ next;
+ }
if ($is_wsl) {
# use \r\n for WSL shell
$line =~ s/\r?\n$/\r\n/g;
@@ -389,40 +207,83 @@ sub logmsg {
}
}
-# get the name of the current user
-my $USER = $ENV{USER}; # Linux
-if (!$USER) {
- $USER = $ENV{USERNAME}; # Windows
- if (!$USER) {
- $USER = $ENV{LOGNAME}; # Some Unix (I think)
+#######################################################################
+# enable logmsg buffering for the given runner ID
+#
+sub logmsg_bufferfortest {
+ my ($runnerid)=@_;
+ if($jobs) {
+ # Only enable buffering in multiprocess mode
+ $singletest_bufferedrunner = $runnerid;
+ }
+}
+#######################################################################
+# Store a log message in a buffer for this test
+# The messages can then be displayed all at once at the end of the test
+# which prevents messages from different tests from being interleaved.
+sub singletest_logmsg {
+ if(!exists $singletest_logs{$singletest_bufferedrunner}) {
+ # initialize to a reference to an empty anonymous array
+ $singletest_logs{$singletest_bufferedrunner} = [];
}
+ my $logsref = $singletest_logs{$singletest_bufferedrunner};
+ push @$logsref, @_;
}
-# enable memory debugging if curl is compiled with it
-$ENV{'CURL_MEMDEBUG'} = $memdump;
-$ENV{'CURL_ENTROPY'}="12345678";
-$ENV{'CURL_FORCETIME'}=1; # for debug NTLM magic
-$ENV{'CURL_GLOBAL_INIT'}=1; # debug curl_global_init/cleanup use
-$ENV{'HOME'}=$pwd;
-$ENV{'CURL_HOME'}=$ENV{'HOME'};
-$ENV{'XDG_CONFIG_HOME'}=$ENV{'HOME'};
-$ENV{'COLUMNS'}=79; # screen width!
+#######################################################################
+# Stop buffering log messages, but don't touch them
+sub singletest_unbufferlogs {
+ undef $singletest_bufferedrunner;
+}
+
+#######################################################################
+# Clear the buffered log messages & stop buffering after returning them
+sub singletest_dumplogs {
+ if(!defined $singletest_bufferedrunner) {
+ # probably not multiprocess mode and logs weren't buffered
+ return undef;
+ }
+ my $logsref = $singletest_logs{$singletest_bufferedrunner};
+ my $msg = join("", @$logsref);
+ delete $singletest_logs{$singletest_bufferedrunner};
+ singletest_unbufferlogs();
+ return $msg;
+}
sub catch_zap {
my $signame = shift;
- logmsg "runtests.pl received SIG$signame, exiting\n";
- stopservers($verbose);
- die "Somebody sent me a SIG$signame";
+ print "runtests.pl received SIG$signame, exiting\r\n";
+ $globalabort = 1;
}
$SIG{INT} = \&catch_zap;
$SIG{TERM} = \&catch_zap;
+sub catch_usr1 {
+ print "runtests.pl internal state:\r\n";
+ print scalar(%runnersrunning) . " busy test runner(s) of " . scalar(keys %runnerids) . "\r\n";
+ foreach my $rid (sort(keys(%runnersrunning))) {
+ my $runnernum = "unknown";
+ foreach my $rnum (keys %runnerids) {
+ if($runnerids{$rnum} == $rid) {
+ $runnernum = $rnum;
+ last;
+ }
+ }
+ print "Runner $runnernum (id $rid) running test $runnersrunning{$rid} in state $singletest_state{$rid}\r\n";
+ }
+}
+
+eval {
+ # some msys2 perl versions don't define SIGUSR1
+ $SIG{USR1} = \&catch_usr1;
+};
+$SIG{PIPE} = 'IGNORE'; # these errors are captured in the read/write calls
+
##########################################################################
# Clear all possible '*_proxy' environment variables for various protocols
# to prevent them to interfere with our testing!
-my $protocol;
-foreach $protocol (('ftp', 'http', 'ftps', 'https', 'no', 'all')) {
+foreach my $protocol (('ftp', 'http', 'ftps', 'https', 'no', 'all')) {
my $proxy = "${protocol}_proxy";
# clear lowercase version
delete $ENV{$proxy} if($ENV{$proxy});
@@ -435,2409 +296,67 @@ foreach $protocol (('ftp', 'http', 'ftps', 'https', 'no', 'all')) {
delete $ENV{'SSL_CERT_DIR'} if($ENV{'SSL_CERT_DIR'});
delete $ENV{'SSL_CERT_PATH'} if($ENV{'SSL_CERT_PATH'});
-delete $ENV{'DEBUGINFOD_URLS'} if($ENV{'DEBUGINFOD_URLS'});
delete $ENV{'CURL_CA_BUNDLE'} if($ENV{'CURL_CA_BUNDLE'});
-#######################################################################
-# Load serverpidfile and serverportfile hashes with file names for all
-# possible servers.
-#
-sub init_serverpidfile_hash {
- for my $proto (('ftp', 'gopher', 'http', 'imap', 'pop3', 'smtp', 'http/2')) {
- for my $ssl (('', 's')) {
- for my $ipvnum ((4, 6)) {
- for my $idnum ((1, 2, 3)) {
- my $serv = servername_id("$proto$ssl", $ipvnum, $idnum);
- my $pidf = server_pidfilename("$proto$ssl", $ipvnum, $idnum);
- $serverpidfile{$serv} = $pidf;
- my $portf = server_portfilename("$proto$ssl", $ipvnum, $idnum);
- $serverportfile{$serv} = $portf;
- }
- }
- }
- }
- for my $proto (('tftp', 'sftp', 'socks', 'ssh', 'rtsp', 'httptls',
- 'dict', 'smb', 'smbs', 'telnet', 'mqtt')) {
- for my $ipvnum ((4, 6)) {
- for my $idnum ((1, 2)) {
- my $serv = servername_id($proto, $ipvnum, $idnum);
- my $pidf = server_pidfilename($proto, $ipvnum, $idnum);
- $serverpidfile{$serv} = $pidf;
- my $portf = server_portfilename($proto, $ipvnum, $idnum);
- $serverportfile{$serv} = $portf;
- }
- }
- }
- for my $proto (('http', 'imap', 'pop3', 'smtp', 'http/2')) {
- for my $ssl (('', 's')) {
- my $serv = servername_id("$proto$ssl", "unix", 1);
- my $pidf = server_pidfilename("$proto$ssl", "unix", 1);
- $serverpidfile{$serv} = $pidf;
- my $portf = server_portfilename("$proto$ssl", "unix", 1);
- $serverportfile{$serv} = $portf;
- }
- }
+# provide defaults from our config file for ENV vars not explicitly
+# set by the caller
+if (open(my $fd, "<", "config")) {
+ while(my $line = <$fd>) {
+ next if ($line =~ /^#/);
+ chomp $line;
+ my ($name, $val) = split(/\s*:\s*/, $line, 2);
+ $ENV{$name} = $val if(!$ENV{$name});
+ }
+ close($fd);
}
-#######################################################################
-# Check if a given child process has just died. Reaps it if so.
-#
-sub checkdied {
- use POSIX ":sys_wait_h";
- my $pid = $_[0];
- if((not defined $pid) || $pid <= 0) {
- return 0;
- }
- my $rc = pidwait($pid, &WNOHANG);
- return ($rc == $pid)?1:0;
+# Check if we have nghttpx available and if it talks http/3
+my $nghttpx_h3 = 0;
+if (!$ENV{"NGHTTPX"}) {
+ $ENV{"NGHTTPX"} = checktestcmd("nghttpx");
}
-
-#######################################################################
-# Start a new thread/process and run the given command line in there.
-# Return the pids (yes plural) of the new child process to the parent.
-#
-sub startnew {
- my ($cmd, $pidfile, $timeout, $fake)=@_;
-
- logmsg "startnew: $cmd\n" if ($verbose);
-
- my $child = fork();
- my $pid2 = 0;
-
- if(not defined $child) {
- logmsg "startnew: fork() failure detected\n";
- return (-1,-1);
- }
-
- if(0 == $child) {
- # Here we are the child. Run the given command.
-
- # Flush output.
- $| = 1;
-
- # Put an "exec" in front of the command so that the child process
- # keeps this child's process ID.
- exec("exec $cmd") || die "Can't exec() $cmd: $!";
-
- # exec() should never return back here to this process. We protect
- # ourselves by calling die() just in case something goes really bad.
- die "error: exec() has returned";
- }
-
- # Ugly hack but ssh client and gnutls-serv don't support pid files
- if ($fake) {
- if(open(OUT, ">$pidfile")) {
- print OUT $child . "\n";
- close(OUT);
- logmsg "startnew: $pidfile faked with pid=$child\n" if($verbose);
- }
- else {
- logmsg "startnew: failed to write fake $pidfile with pid=$child\n";
- }
- # could/should do a while connect fails sleep a bit and loop
- portable_sleep($timeout);
- if (checkdied($child)) {
- logmsg "startnew: child process has failed to start\n" if($verbose);
- return (-1,-1);
- }
- }
-
- my $count = $timeout;
- while($count--) {
- if(-f $pidfile && -s $pidfile && open(PID, "<$pidfile")) {
- $pid2 = 0 + <PID>;
- close(PID);
- if(($pid2 > 0) && pidexists($pid2)) {
- # if $pid2 is valid, then make sure this pid is alive, as
- # otherwise it is just likely to be the _previous_ pidfile or
- # similar!
- last;
- }
- # invalidate $pid2 if not actually alive
- $pid2 = 0;
- }
- if (checkdied($child)) {
- logmsg "startnew: child process has died, server might start up\n"
- if($verbose);
- # We can't just abort waiting for the server with a
- # return (-1,-1);
- # because the server might have forked and could still start
- # up normally. Instead, just reduce the amount of time we remain
- # waiting.
- $count >>= 2;
- }
- sleep(1);
- }
-
- # Return two PIDs, the one for the child process we spawned and the one
- # reported by the server itself (in case it forked again on its own).
- # Both (potentially) need to be killed at the end of the test.
- return ($child, $pid2);
+if ($ENV{"NGHTTPX"}) {
+ my $nghttpx_version=join(' ', `"$ENV{'NGHTTPX'}" -v 2>/dev/null`);
+ $nghttpx_h3 = $nghttpx_version =~ /nghttp3\//;
+ chomp $nghttpx_h3;
}
#######################################################################
-# Check for a command in the PATH of the test server.
-#
-sub checkcmd {
- my ($cmd)=@_;
- my @paths=(split(":", $ENV{'PATH'}), "/usr/sbin", "/usr/local/sbin",
- "/sbin", "/usr/bin", "/usr/local/bin",
- "$LIBDIR/.libs", "$LIBDIR");
- for(@paths) {
- if( -x "$_/$cmd" && ! -d "$_/$cmd") {
- # executable bit but not a directory!
- return "$_/$cmd";
- }
- }
-}
-
-#######################################################################
# Get the list of tests that the tests/data/Makefile.am knows about!
#
my $disttests = "";
sub get_disttests {
# If a non-default $TESTDIR is being used there may not be any
# Makefile.inc in which case there's nothing to do.
- open(D, "<$TESTDIR/Makefile.inc") or return;
- while(<D>) {
+ open(my $dh, "<", "$TESTDIR/Makefile.inc") or return;
+ while(<$dh>) {
chomp $_;
if(($_ =~ /^#/) ||($_ !~ /test/)) {
next;
}
$disttests .= $_;
}
- close(D);
-}
-
-#######################################################################
-# Check for a command in the PATH of the machine running curl.
-#
-sub checktestcmd {
- my ($cmd)=@_;
- return checkcmd($cmd);
-}
-
-#######################################################################
-# Run the application under test and return its return code
-#
-sub runclient {
- my ($cmd)=@_;
- my $ret = system($cmd);
- print "CMD ($ret): $cmd\n" if($verbose && !$torture);
- return $ret;
-
-# This is one way to test curl on a remote machine
-# my $out = system("ssh $CLIENTIP cd \'$pwd\' \\; \'$cmd\'");
-# sleep 2; # time to allow the NFS server to be updated
-# return $out;
-}
-
-#######################################################################
-# Run the application under test and return its stdout
-#
-sub runclientoutput {
- my ($cmd)=@_;
- return `$cmd`;
-
-# This is one way to test curl on a remote machine
-# my @out = `ssh $CLIENTIP cd \'$pwd\' \\; \'$cmd\'`;
-# sleep 2; # time to allow the NFS server to be updated
-# return @out;
- }
-
-#######################################################################
-# Memory allocation test and failure torture testing.
-#
-sub torture {
- my ($testcmd, $testnum, $gdbline) = @_;
-
- # remove memdump first to be sure we get a new nice and clean one
- unlink($memdump);
-
- # First get URL from test server, ignore the output/result
- runclient($testcmd);
-
- logmsg " CMD: $testcmd\n" if($verbose);
-
- # memanalyze -v is our friend, get the number of allocations made
- my $count=0;
- my @out = `$memanalyze -v $memdump`;
- for(@out) {
- if(/^Operations: (\d+)/) {
- $count = $1;
- last;
- }
- }
- if(!$count) {
- logmsg " found no functions to make fail\n";
- return 0;
- }
-
- my @ttests = (1 .. $count);
- if($shallow && ($shallow < $count)) {
- my $discard = scalar(@ttests) - $shallow;
- my $percent = sprintf("%.2f%%", $shallow * 100 / scalar(@ttests));
- logmsg " $count functions found, but only fail $shallow ($percent)\n";
- while($discard) {
- my $rm;
- do {
- # find a test to discard
- $rm = rand(scalar(@ttests));
- } while(!$ttests[$rm]);
- $ttests[$rm] = undef;
- $discard--;
- }
- }
- else {
- logmsg " $count functions to make fail\n";
- }
-
- for (@ttests) {
- my $limit = $_;
- my $fail;
- my $dumped_core;
-
- if(!defined($limit)) {
- # --shallow can undefine them
- next;
- }
- if($tortalloc && ($tortalloc != $limit)) {
- next;
- }
-
- if($verbose) {
- my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
- localtime(time());
- my $now = sprintf("%02d:%02d:%02d ", $hour, $min, $sec);
- logmsg "Fail function no: $limit at $now\r";
- }
-
- # make the memory allocation function number $limit return failure
- $ENV{'CURL_MEMLIMIT'} = $limit;
-
- # remove memdump first to be sure we get a new nice and clean one
- unlink($memdump);
-
- my $cmd = $testcmd;
- if($valgrind && !$gdbthis) {
- my @valgrindoption = getpart("verify", "valgrind");
- if((!@valgrindoption) || ($valgrindoption[0] !~ /disable/)) {
- my $valgrindcmd = "$valgrind ";
- $valgrindcmd .= "$valgrind_tool " if($valgrind_tool);
- $valgrindcmd .= "--quiet --leak-check=yes ";
- $valgrindcmd .= "--suppressions=$srcdir/valgrind.supp ";
- # $valgrindcmd .= "--gen-suppressions=all ";
- $valgrindcmd .= "--num-callers=16 ";
- $valgrindcmd .= "${valgrind_logfile}=$LOGDIR/valgrind$testnum";
- $cmd = "$valgrindcmd $testcmd";
- }
- }
- logmsg "*** Function number $limit is now set to fail ***\n" if($gdbthis);
-
- my $ret = 0;
- if($gdbthis) {
- runclient($gdbline);
- }
- else {
- $ret = runclient($cmd);
- }
- #logmsg "$_ Returned " . ($ret >> 8) . "\n";
-
- # Now clear the variable again
- delete $ENV{'CURL_MEMLIMIT'} if($ENV{'CURL_MEMLIMIT'});
-
- if(-r "core") {
- # there's core file present now!
- logmsg " core dumped\n";
- $dumped_core = 1;
- $fail = 2;
- }
-
- if($valgrind) {
- my @e = valgrindparse("$LOGDIR/valgrind$testnum");
- if(@e && $e[0]) {
- if($automakestyle) {
- logmsg "FAIL: torture $testnum - valgrind\n";
- }
- else {
- logmsg " valgrind ERROR ";
- logmsg @e;
- }
- $fail = 1;
- }
- }
-
- # verify that it returns a proper error code, doesn't leak memory
- # and doesn't core dump
- if(($ret & 255) || ($ret >> 8) >= 128) {
- logmsg " system() returned $ret\n";
- $fail=1;
- }
- else {
- my @memdata=`$memanalyze $memdump`;
- my $leak=0;
- for(@memdata) {
- if($_ ne "") {
- # well it could be other memory problems as well, but
- # we call it leak for short here
- $leak=1;
- }
- }
- if($leak) {
- logmsg "** MEMORY FAILURE\n";
- logmsg @memdata;
- logmsg `$memanalyze -l $memdump`;
- $fail = 1;
- }
- }
- if($fail) {
- logmsg " Failed on function number $limit in test.\n",
- " invoke with \"-t$limit\" to repeat this single case.\n";
- stopservers($verbose);
- return 1;
- }
- }
-
- logmsg "torture OK\n";
- return 0;
-}
-
-#######################################################################
-# Stop a test server along with pids which aren't in the %run hash yet.
-# This also stops all servers which are relative to the given one.
-#
-sub stopserver {
- my ($server, $pidlist) = @_;
-
- #
- # kill sockfilter processes for pingpong relative server
- #
- if($server =~ /^(ftp|imap|pop3|smtp)s?(\d*)(-ipv6|)$/) {
- my $proto = $1;
- my $idnum = ($2 && ($2 > 1)) ? $2 : 1;
- my $ipvnum = ($3 && ($3 =~ /6$/)) ? 6 : 4;
- killsockfilters($proto, $ipvnum, $idnum, $verbose);
- }
- #
- # All servers relative to the given one must be stopped also
- #
- my @killservers;
- if($server =~ /^(ftp|http|imap|pop3|smtp)s((\d*)(-ipv6|-unix|))$/) {
- # given a stunnel based ssl server, also kill non-ssl underlying one
- push @killservers, "${1}${2}";
- }
- elsif($server =~ /^(ftp|http|imap|pop3|smtp)((\d*)(-ipv6|-unix|))$/) {
- # given a non-ssl server, also kill stunnel based ssl piggybacking one
- push @killservers, "${1}s${2}";
- }
- elsif($server =~ /^(socks)((\d*)(-ipv6|))$/) {
- # given a socks server, also kill ssh underlying one
- push @killservers, "ssh${2}";
- }
- elsif($server =~ /^(ssh)((\d*)(-ipv6|))$/) {
- # given a ssh server, also kill socks piggybacking one
- push @killservers, "socks${2}";
- }
- if($server eq "http") {
- # since the http2 server is a proxy that needs to know about the
- # dynamic http port it too needs to get restarted when the http server
- # is killed
- push @killservers, "http/2";
- }
- push @killservers, $server;
- #
- # kill given pids and server relative ones clearing them in %run hash
- #
- foreach my $server (@killservers) {
- if($run{$server}) {
- # we must prepend a space since $pidlist may already contain a pid
- $pidlist .= " $run{$server}";
- $run{$server} = 0;
- }
- $runcert{$server} = 0 if($runcert{$server});
- }
- killpid($verbose, $pidlist);
- #
- # cleanup server pid files
- #
- my $result = 0;
- foreach my $server (@killservers) {
- my $pidfile = $serverpidfile{$server};
- my $pid = processexists($pidfile);
- if($pid > 0) {
- if($err_unexpected) {
- logmsg "ERROR: ";
- $result = -1;
- }
- else {
- logmsg "Warning: ";
- }
- logmsg "$server server unexpectedly alive\n";
- killpid($verbose, $pid);
- }
- unlink($pidfile) if(-f $pidfile);
- }
-
- return $result;
-}
-
-#######################################################################
-# Return flags to let curl use an external HTTP proxy
-#
-sub getexternalproxyflags {
- return " --proxy $proxy_address ";
-}
-
-#######################################################################
-# Verify that the server that runs on $ip, $port is our server. This also
-# implies that we can speak with it, as there might be occasions when the
-# server runs fine but we cannot talk to it ("Failed to connect to ::1: Can't
-# assign requested address")
-#
-sub verifyhttp {
- my ($proto, $ipvnum, $idnum, $ip, $port_or_path) = @_;
- my $server = servername_id($proto, $ipvnum, $idnum);
- my $pid = 0;
- my $bonus="";
- # $port_or_path contains a path for Unix sockets, sws ignores the port
- my $port = ($ipvnum eq "unix") ? 80 : $port_or_path;
-
- my $verifyout = "$LOGDIR/".
- servername_canon($proto, $ipvnum, $idnum) .'_verify.out';
- unlink($verifyout) if(-f $verifyout);
-
- my $verifylog = "$LOGDIR/".
- servername_canon($proto, $ipvnum, $idnum) .'_verify.log';
- unlink($verifylog) if(-f $verifylog);
-
- if($proto eq "gopher") {
- # gopher is funny
- $bonus="1/";
- }
-
- my $flags = "--max-time $server_response_maxtime ";
- $flags .= "--output $verifyout ";
- $flags .= "--silent ";
- $flags .= "--verbose ";
- $flags .= "--globoff ";
- $flags .= "--unix-socket '$port_or_path' " if $ipvnum eq "unix";
- $flags .= "--insecure " if($proto eq 'https');
- if($use_external_proxy) {
- $flags .= getexternalproxyflags();
- }
- $flags .= "\"$proto://$ip:$port/${bonus}verifiedserver\"";
-
- my $cmd = "$VCURL $flags 2>$verifylog";
-
- # verify if our/any server is running on this port
- logmsg "RUN: $cmd\n" if($verbose);
- my $res = runclient($cmd);
-
- $res >>= 8; # rotate the result
- if($res & 128) {
- logmsg "RUN: curl command died with a coredump\n";
- return -1;
- }
-
- if($res && $verbose) {
- logmsg "RUN: curl command returned $res\n";
- if(open(FILE, "<$verifylog")) {
- while(my $string = <FILE>) {
- logmsg "RUN: $string" if($string !~ /^([ \t]*)$/);
- }
- close(FILE);
- }
- }
-
- my $data;
- if(open(FILE, "<$verifyout")) {
- while(my $string = <FILE>) {
- $data = $string;
- last; # only want first line
- }
- close(FILE);
- }
-
- if($data && ($data =~ /WE ROOLZ: (\d+)/)) {
- $pid = 0+$1;
- }
- elsif($res == 6) {
- # curl: (6) Couldn't resolve host '::1'
- logmsg "RUN: failed to resolve host ($proto://$ip:$port/verifiedserver)\n";
- return -1;
- }
- elsif($data || ($res && ($res != 7))) {
- logmsg "RUN: Unknown server on our $server port: $port ($res)\n";
- return -1;
- }
- return $pid;
-}
-
-#######################################################################
-# Verify that the server that runs on $ip, $port is our server. This also
-# implies that we can speak with it, as there might be occasions when the
-# server runs fine but we cannot talk to it ("Failed to connect to ::1: Can't
-# assign requested address")
-#
-sub verifyftp {
- my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
- my $server = servername_id($proto, $ipvnum, $idnum);
- my $pid = 0;
- my $time=time();
- my $extra="";
-
- my $verifylog = "$LOGDIR/".
- servername_canon($proto, $ipvnum, $idnum) .'_verify.log';
- unlink($verifylog) if(-f $verifylog);
-
- if($proto eq "ftps") {
- $extra .= "--insecure --ftp-ssl-control ";
- }
-
- my $flags = "--max-time $server_response_maxtime ";
- $flags .= "--silent ";
- $flags .= "--verbose ";
- $flags .= "--globoff ";
- $flags .= $extra;
- if($use_external_proxy) {
- $flags .= getexternalproxyflags();
- }
- $flags .= "\"$proto://$ip:$port/verifiedserver\"";
-
- my $cmd = "$VCURL $flags 2>$verifylog";
-
- # check if this is our server running on this port:
- logmsg "RUN: $cmd\n" if($verbose);
- my @data = runclientoutput($cmd);
-
- my $res = $? >> 8; # rotate the result
- if($res & 128) {
- logmsg "RUN: curl command died with a coredump\n";
- return -1;
- }
-
- foreach my $line (@data) {
- if($line =~ /WE ROOLZ: (\d+)/) {
- # this is our test server with a known pid!
- $pid = 0+$1;
- last;
- }
- }
- if($pid <= 0 && @data && $data[0]) {
- # this is not a known server
- logmsg "RUN: Unknown server on our $server port: $port\n";
- return 0;
- }
- # we can/should use the time it took to verify the FTP server as a measure
- # on how fast/slow this host/FTP is.
- my $took = int(0.5+time()-$time);
-
- if($verbose) {
- logmsg "RUN: Verifying our test $server server took $took seconds\n";
- }
- $ftpchecktime = $took>=1?$took:1; # make sure it never is below 1
-
- return $pid;
+ close($dh);
}
-#######################################################################
-# Verify that the server that runs on $ip, $port is our server. This also
-# implies that we can speak with it, as there might be occasions when the
-# server runs fine but we cannot talk to it ("Failed to connect to ::1: Can't
-# assign requested address")
-#
-sub verifyrtsp {
- my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
- my $server = servername_id($proto, $ipvnum, $idnum);
- my $pid = 0;
-
- my $verifyout = "$LOGDIR/".
- servername_canon($proto, $ipvnum, $idnum) .'_verify.out';
- unlink($verifyout) if(-f $verifyout);
-
- my $verifylog = "$LOGDIR/".
- servername_canon($proto, $ipvnum, $idnum) .'_verify.log';
- unlink($verifylog) if(-f $verifylog);
-
- my $flags = "--max-time $server_response_maxtime ";
- $flags .= "--output $verifyout ";
- $flags .= "--silent ";
- $flags .= "--verbose ";
- $flags .= "--globoff ";
- if($use_external_proxy) {
- $flags .= getexternalproxyflags();
- }
- # currently verification is done using http
- $flags .= "\"http://$ip:$port/verifiedserver\"";
-
- my $cmd = "$VCURL $flags 2>$verifylog";
-
- # verify if our/any server is running on this port
- logmsg "RUN: $cmd\n" if($verbose);
- my $res = runclient($cmd);
-
- $res >>= 8; # rotate the result
- if($res & 128) {
- logmsg "RUN: curl command died with a coredump\n";
- return -1;
- }
-
- if($res && $verbose) {
- logmsg "RUN: curl command returned $res\n";
- if(open(FILE, "<$verifylog")) {
- while(my $string = <FILE>) {
- logmsg "RUN: $string" if($string !~ /^([ \t]*)$/);
- }
- close(FILE);
- }
- }
-
- my $data;
- if(open(FILE, "<$verifyout")) {
- while(my $string = <FILE>) {
- $data = $string;
- last; # only want first line
- }
- close(FILE);
- }
-
- if($data && ($data =~ /RTSP_SERVER WE ROOLZ: (\d+)/)) {
- $pid = 0+$1;
- }
- elsif($res == 6) {
- # curl: (6) Couldn't resolve host '::1'
- logmsg "RUN: failed to resolve host ($proto://$ip:$port/verifiedserver)\n";
- return -1;
- }
- elsif($data || ($res != 7)) {
- logmsg "RUN: Unknown server on our $server port: $port\n";
- return -1;
- }
- return $pid;
-}
-
-#######################################################################
-# Verify that the ssh server has written out its pidfile, recovering
-# the pid from the file and returning it if a process with that pid is
-# actually alive.
-#
-sub verifyssh {
- my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
- my $server = servername_id($proto, $ipvnum, $idnum);
- my $pidfile = server_pidfilename($proto, $ipvnum, $idnum);
- my $pid = 0;
- if(open(FILE, "<$pidfile")) {
- $pid=0+<FILE>;
- close(FILE);
- }
- if($pid > 0) {
- # if we have a pid it is actually our ssh server,
- # since runsshserver() unlinks previous pidfile
- if(!pidexists($pid)) {
- logmsg "RUN: SSH server has died after starting up\n";
- checkdied($pid);
- unlink($pidfile);
- $pid = -1;
- }
- }
- return $pid;
-}
-
-#######################################################################
-# Verify that we can connect to the sftp server, properly authenticate
-# with generated config and key files and run a simple remote pwd.
-#
-sub verifysftp {
- my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
- my $server = servername_id($proto, $ipvnum, $idnum);
- my $verified = 0;
- # Find out sftp client canonical file name
- my $sftp = find_sftp();
- if(!$sftp) {
- logmsg "RUN: SFTP server cannot find $sftpexe\n";
- return -1;
- }
- # Find out ssh client canonical file name
- my $ssh = find_ssh();
- if(!$ssh) {
- logmsg "RUN: SFTP server cannot find $sshexe\n";
- return -1;
- }
- # Connect to sftp server, authenticate and run a remote pwd
- # command using our generated configuration and key files
- my $cmd = "\"$sftp\" -b $sftpcmds -F $sftpconfig -S \"$ssh\" $ip > $sftplog 2>&1";
- my $res = runclient($cmd);
- # Search for pwd command response in log file
- if(open(SFTPLOGFILE, "<$sftplog")) {
- while(<SFTPLOGFILE>) {
- if(/^Remote working directory: /) {
- $verified = 1;
- last;
- }
- }
- close(SFTPLOGFILE);
- }
- return $verified;
-}
-
-#######################################################################
-# Verify that the non-stunnel HTTP TLS extensions capable server that runs
-# on $ip, $port is our server. This also implies that we can speak with it,
-# as there might be occasions when the server runs fine but we cannot talk
-# to it ("Failed to connect to ::1: Can't assign requested address")
-#
-sub verifyhttptls {
- my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
- my $server = servername_id($proto, $ipvnum, $idnum);
- my $pidfile = server_pidfilename($proto, $ipvnum, $idnum);
- my $pid = 0;
-
- my $verifyout = "$LOGDIR/".
- servername_canon($proto, $ipvnum, $idnum) .'_verify.out';
- unlink($verifyout) if(-f $verifyout);
-
- my $verifylog = "$LOGDIR/".
- servername_canon($proto, $ipvnum, $idnum) .'_verify.log';
- unlink($verifylog) if(-f $verifylog);
-
- my $flags = "--max-time $server_response_maxtime ";
- $flags .= "--output $verifyout ";
- $flags .= "--verbose ";
- $flags .= "--globoff ";
- $flags .= "--insecure ";
- $flags .= "--tlsauthtype SRP ";
- $flags .= "--tlsuser jsmith ";
- $flags .= "--tlspassword abc ";
- if($use_external_proxy) {
- $flags .= getexternalproxyflags();
- }
- $flags .= "\"https://$ip:$port/verifiedserver\"";
-
- my $cmd = "$VCURL $flags 2>$verifylog";
-
- # verify if our/any server is running on this port
- logmsg "RUN: $cmd\n" if($verbose);
- my $res = runclient($cmd);
-
- $res >>= 8; # rotate the result
- if($res & 128) {
- logmsg "RUN: curl command died with a coredump\n";
- return -1;
- }
-
- if($res && $verbose) {
- logmsg "RUN: curl command returned $res\n";
- if(open(FILE, "<$verifylog")) {
- while(my $string = <FILE>) {
- logmsg "RUN: $string" if($string !~ /^([ \t]*)$/);
- }
- close(FILE);
- }
- }
-
- my $data;
- if(open(FILE, "<$verifyout")) {
- while(my $string = <FILE>) {
- $data .= $string;
- }
- close(FILE);
- }
-
- if($data && ($data =~ /(GNUTLS|GnuTLS)/) && open(FILE, "<$pidfile")) {
- $pid=0+<FILE>;
- close(FILE);
- if($pid > 0) {
- # if we have a pid it is actually our httptls server,
- # since runhttptlsserver() unlinks previous pidfile
- if(!pidexists($pid)) {
- logmsg "RUN: $server server has died after starting up\n";
- checkdied($pid);
- unlink($pidfile);
- $pid = -1;
- }
- }
- return $pid;
- }
- elsif($res == 6) {
- # curl: (6) Couldn't resolve host '::1'
- logmsg "RUN: failed to resolve host (https://$ip:$port/verifiedserver)\n";
- return -1;
- }
- elsif($data || ($res && ($res != 7))) {
- logmsg "RUN: Unknown server on our $server port: $port ($res)\n";
- return -1;
- }
- return $pid;
-}
-
-#######################################################################
-# STUB for verifying socks
-#
-sub verifysocks {
- my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
- my $server = servername_id($proto, $ipvnum, $idnum);
- my $pidfile = server_pidfilename($proto, $ipvnum, $idnum);
- my $pid = 0;
- if(open(FILE, "<$pidfile")) {
- $pid=0+<FILE>;
- close(FILE);
- }
- if($pid > 0) {
- # if we have a pid it is actually our socks server,
- # since runsocksserver() unlinks previous pidfile
- if(!pidexists($pid)) {
- logmsg "RUN: SOCKS server has died after starting up\n";
- checkdied($pid);
- unlink($pidfile);
- $pid = -1;
- }
- }
- return $pid;
-}
-
-#######################################################################
-# Verify that the server that runs on $ip, $port is our server. This also
-# implies that we can speak with it, as there might be occasions when the
-# server runs fine but we cannot talk to it ("Failed to connect to ::1: Can't
-# assign requested address")
-#
-sub verifysmb {
- my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
- my $server = servername_id($proto, $ipvnum, $idnum);
- my $pid = 0;
- my $time=time();
- my $extra="";
-
- my $verifylog = "$LOGDIR/".
- servername_canon($proto, $ipvnum, $idnum) .'_verify.log';
- unlink($verifylog) if(-f $verifylog);
-
- my $flags = "--max-time $server_response_maxtime ";
- $flags .= "--silent ";
- $flags .= "--verbose ";
- $flags .= "--globoff ";
- $flags .= "-u 'curltest:curltest' ";
- $flags .= $extra;
- $flags .= "\"$proto://$ip:$port/SERVER/verifiedserver\"";
-
- my $cmd = "$VCURL $flags 2>$verifylog";
-
- # check if this is our server running on this port:
- logmsg "RUN: $cmd\n" if($verbose);
- my @data = runclientoutput($cmd);
-
- my $res = $? >> 8; # rotate the result
- if($res & 128) {
- logmsg "RUN: curl command died with a coredump\n";
- return -1;
- }
-
- foreach my $line (@data) {
- if($line =~ /WE ROOLZ: (\d+)/) {
- # this is our test server with a known pid!
- $pid = 0+$1;
- last;
- }
- }
- if($pid <= 0 && @data && $data[0]) {
- # this is not a known server
- logmsg "RUN: Unknown server on our $server port: $port\n";
- return 0;
- }
- # we can/should use the time it took to verify the server as a measure
- # on how fast/slow this host is.
- my $took = int(0.5+time()-$time);
-
- if($verbose) {
- logmsg "RUN: Verifying our test $server server took $took seconds\n";
- }
- $ftpchecktime = $took>=1?$took:1; # make sure it never is below 1
-
- return $pid;
-}
-
-#######################################################################
-# Verify that the server that runs on $ip, $port is our server. This also
-# implies that we can speak with it, as there might be occasions when the
-# server runs fine but we cannot talk to it ("Failed to connect to ::1: Can't
-# assign requested address")
-#
-sub verifytelnet {
- my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
- my $server = servername_id($proto, $ipvnum, $idnum);
- my $pid = 0;
- my $time=time();
- my $extra="";
-
- my $verifylog = "$LOGDIR/".
- servername_canon($proto, $ipvnum, $idnum) .'_verify.log';
- unlink($verifylog) if(-f $verifylog);
-
- my $flags = "--max-time $server_response_maxtime ";
- $flags .= "--silent ";
- $flags .= "--verbose ";
- $flags .= "--globoff ";
- $flags .= "--upload-file - ";
- $flags .= $extra;
- $flags .= "\"$proto://$ip:$port\"";
-
- my $cmd = "echo 'verifiedserver' | $VCURL $flags 2>$verifylog";
-
- # check if this is our server running on this port:
- logmsg "RUN: $cmd\n" if($verbose);
- my @data = runclientoutput($cmd);
-
- my $res = $? >> 8; # rotate the result
- if($res & 128) {
- logmsg "RUN: curl command died with a coredump\n";
- return -1;
- }
-
- foreach my $line (@data) {
- if($line =~ /WE ROOLZ: (\d+)/) {
- # this is our test server with a known pid!
- $pid = 0+$1;
- last;
- }
- }
- if($pid <= 0 && @data && $data[0]) {
- # this is not a known server
- logmsg "RUN: Unknown server on our $server port: $port\n";
- return 0;
- }
- # we can/should use the time it took to verify the server as a measure
- # on how fast/slow this host is.
- my $took = int(0.5+time()-$time);
-
- if($verbose) {
- logmsg "RUN: Verifying our test $server server took $took seconds\n";
- }
-
- return $pid;
-}
-
-
-#######################################################################
-# Verify that the server that runs on $ip, $port is our server.
-# Retry over several seconds before giving up. The ssh server in
-# particular can take a long time to start if it needs to generate
-# keys on a slow or loaded host.
-#
-# Just for convenience, test harness uses 'https' and 'httptls' literals
-# as values for 'proto' variable in order to differentiate different
-# servers. 'https' literal is used for stunnel based https test servers,
-# and 'httptls' is used for non-stunnel https test servers.
-#
-
-my %protofunc = ('http' => \&verifyhttp,
- 'https' => \&verifyhttp,
- 'rtsp' => \&verifyrtsp,
- 'ftp' => \&verifyftp,
- 'pop3' => \&verifyftp,
- 'imap' => \&verifyftp,
- 'smtp' => \&verifyftp,
- 'ftps' => \&verifyftp,
- 'tftp' => \&verifyftp,
- 'ssh' => \&verifyssh,
- 'socks' => \&verifysocks,
- 'socks5unix' => \&verifysocks,
- 'gopher' => \&verifyhttp,
- 'httptls' => \&verifyhttptls,
- 'dict' => \&verifyftp,
- 'smb' => \&verifysmb,
- 'telnet' => \&verifytelnet);
-
-sub verifyserver {
- my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
-
- my $count = 30; # try for this many seconds
- my $pid;
-
- while($count--) {
- my $fun = $protofunc{$proto};
-
- $pid = &$fun($proto, $ipvnum, $idnum, $ip, $port);
-
- if($pid > 0) {
- last;
- }
- elsif($pid < 0) {
- # a real failure, stop trying and bail out
- return 0;
- }
- sleep(1);
- }
- return $pid;
-}
-
-#######################################################################
-# Single shot server responsiveness test. This should only be used
-# to verify that a server present in %run hash is still functional
-#
-sub responsiveserver {
- my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
- my $prev_verbose = $verbose;
-
- $verbose = 0;
- my $fun = $protofunc{$proto};
- my $pid = &$fun($proto, $ipvnum, $idnum, $ip, $port);
- $verbose = $prev_verbose;
-
- if($pid > 0) {
- return 1; # responsive
- }
-
- my $srvrname = servername_str($proto, $ipvnum, $idnum);
- logmsg " server precheck FAILED (unresponsive $srvrname server)\n";
- return 0;
-}
-
-#######################################################################
-# start the http2 server
-#
-sub runhttp2server {
- my ($verbose) = @_;
- my $server;
- my $srvrname;
- my $pidfile;
- my $logfile;
- my $flags = "";
- my $proto="http/2";
- my $ipvnum = 4;
- my $idnum = 0;
- my $exe = "$perl $srcdir/http2-server.pl";
- my $verbose_flag = "--verbose ";
-
- $server = servername_id($proto, $ipvnum, $idnum);
-
- $pidfile = $serverpidfile{$server};
-
- # don't retry if the server doesn't work
- if ($doesntrun{$pidfile}) {
- return (0, 0, 0);
- }
-
- my $pid = processexists($pidfile);
- if($pid > 0) {
- stopserver($server, "$pid");
- }
- unlink($pidfile) if(-f $pidfile);
-
- $srvrname = servername_str($proto, $ipvnum, $idnum);
-
- $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
-
- $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
- $flags .= "--connect $HOSTIP:$HTTPPORT ";
- $flags .= $verbose_flag if($debugprotocol);
-
- my ($http2pid, $pid2);
- my $port = 23113;
- for(1 .. 10) {
- $port += int(rand(900));
- my $aflags = "--port $port $flags";
-
- my $cmd = "$exe $aflags";
- ($http2pid, $pid2) = startnew($cmd, $pidfile, 15, 0);
-
- if($http2pid <= 0 || !pidexists($http2pid)) {
- # it is NOT alive
- stopserver($server, "$pid2");
- $doesntrun{$pidfile} = 1;
- $http2pid = $pid2 = 0;
- next;
- }
- $doesntrun{$pidfile} = 0;
-
- if($verbose) {
- logmsg "RUN: $srvrname server PID $http2pid port $port\n";
- }
- last;
- }
-
- logmsg "RUN: failed to start the $srvrname server\n" if(!$http2pid);
-
- return ($http2pid, $pid2, $port);
-}
-
-#######################################################################
-# start the http server
-#
-sub runhttpserver {
- my ($proto, $verbose, $alt, $port_or_path) = @_;
- my $ip = $HOSTIP;
- my $ipvnum = 4;
- my $idnum = 1;
- my $server;
- my $srvrname;
- my $pidfile;
- my $logfile;
- my $flags = "";
- my $exe = "$perl $srcdir/httpserver.pl";
- my $verbose_flag = "--verbose ";
-
- if($alt eq "ipv6") {
- # if IPv6, use a different setup
- $ipvnum = 6;
- $ip = $HOST6IP;
- }
- elsif($alt eq "proxy") {
- # basically the same, but another ID
- $idnum = 2;
- }
- elsif($alt eq "unix") {
- # IP (protocol) is mutually exclusive with Unix sockets
- $ipvnum = "unix";
- }
-
- $server = servername_id($proto, $ipvnum, $idnum);
-
- $pidfile = $serverpidfile{$server};
- my $portfile = $serverportfile{$server};
-
- # don't retry if the server doesn't work
- if ($doesntrun{$pidfile}) {
- return (0, 0, 0);
- }
-
- my $pid = processexists($pidfile);
- if($pid > 0) {
- stopserver($server, "$pid");
- }
- unlink($pidfile) if(-f $pidfile);
-
- $srvrname = servername_str($proto, $ipvnum, $idnum);
-
- $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
-
- $flags .= "--gopher " if($proto eq "gopher");
- $flags .= "--connect $HOSTIP " if($alt eq "proxy");
- $flags .= $verbose_flag if($debugprotocol);
- $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
- $flags .= "--portfile $portfile ";
- $flags .= "--id $idnum " if($idnum > 1);
- if($ipvnum eq "unix") {
- $flags .= "--unix-socket '$port_or_path' ";
- } else {
- $flags .= "--ipv$ipvnum --port 0 ";
- }
- $flags .= "--srcdir \"$TESTDIR/..\"";
-
- my $cmd = "$exe $flags";
- my ($httppid, $pid2) = startnew($cmd, $pidfile, 15, 0);
-
- if($httppid <= 0 || !pidexists($httppid)) {
- # it is NOT alive
- logmsg "RUN: failed to start the $srvrname server\n";
- stopserver($server, "$pid2");
- displaylogs($testnumcheck);
- $doesntrun{$pidfile} = 1;
- return (0, 0, 0);
- }
-
- # where is it?
- my $port;
- if(!$port_or_path) {
- $port = $port_or_path = pidfromfile($portfile);
- }
-
- # Server is up. Verify that we can speak to it.
- my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port_or_path);
- if(!$pid3) {
- logmsg "RUN: $srvrname server failed verification\n";
- # failed to talk to it properly. Kill the server and return failure
- stopserver($server, "$httppid $pid2");
- displaylogs($testnumcheck);
- $doesntrun{$pidfile} = 1;
- return (0, 0, 0);
- }
- $pid2 = $pid3;
-
- if($verbose) {
- logmsg "RUN: $srvrname server is on PID $httppid port $port\n";
- }
-
- return ($httppid, $pid2, $port);
-}
-
-#######################################################################
-# start the https stunnel based server
-#
-sub runhttpsserver {
- my ($verbose, $proto, $proxy, $certfile) = @_;
- my $ip = $HOSTIP;
- my $ipvnum = 4;
- my $idnum = 1;
- my $server;
- my $srvrname;
- my $pidfile;
- my $logfile;
- my $flags = "";
-
- if($proxy eq "proxy") {
- # the https-proxy runs as https2
- $idnum = 2;
- }
-
- if(!$stunnel) {
- return (0, 0, 0);
- }
-
- $server = servername_id($proto, $ipvnum, $idnum);
-
- $pidfile = $serverpidfile{$server};
-
- # don't retry if the server doesn't work
- if ($doesntrun{$pidfile}) {
- return (0, 0, 0);
- }
-
- my $pid = processexists($pidfile);
- if($pid > 0) {
- stopserver($server, "$pid");
- }
- unlink($pidfile) if(-f $pidfile);
-
- $srvrname = servername_str($proto, $ipvnum, $idnum);
-
- $certfile = 'stunnel.pem' unless($certfile);
-
- $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
-
- $flags .= "--verbose " if($debugprotocol);
- $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
- $flags .= "--id $idnum " if($idnum > 1);
- $flags .= "--ipv$ipvnum --proto $proto ";
- $flags .= "--certfile \"$certfile\" " if($certfile ne 'stunnel.pem');
- $flags .= "--stunnel \"$stunnel\" --srcdir \"$srcdir\" ";
- if($proto eq "gophers") {
- $flags .= "--connect $GOPHERPORT";
- }
- elsif(!$proxy) {
- $flags .= "--connect $HTTPPORT";
- }
- else {
- # for HTTPS-proxy we connect to the HTTP proxy
- $flags .= "--connect $HTTPPROXYPORT";
- }
-
- my $pid2;
- my $httpspid;
- my $port = 24512; # start attempt
- for (1 .. 10) {
- $port += int(rand(600));
- my $options = "$flags --accept $port";
-
- my $cmd = "$perl $srcdir/secureserver.pl $options";
- ($httpspid, $pid2) = startnew($cmd, $pidfile, 15, 0);
-
- if($httpspid <= 0 || !pidexists($httpspid)) {
- # it is NOT alive
- stopserver($server, "$pid2");
- displaylogs($testnumcheck);
- $doesntrun{$pidfile} = 1;
- $httpspid = $pid2 = 0;
- next;
- }
- # we have a server!
- if($verbose) {
- logmsg "RUN: $srvrname server is PID $httpspid port $port\n";
- }
- last;
- }
- $runcert{$server} = $certfile;
- logmsg "RUN: failed to start the $srvrname server\n" if(!$httpspid);
-
- return ($httpspid, $pid2, $port);
-}
-
-#######################################################################
-# start the non-stunnel HTTP TLS extensions capable server
-#
-sub runhttptlsserver {
- my ($verbose, $ipv6) = @_;
- my $proto = "httptls";
- my $ip = ($ipv6 && ($ipv6 =~ /6$/)) ? "$HOST6IP" : "$HOSTIP";
- my $ipvnum = ($ipv6 && ($ipv6 =~ /6$/)) ? 6 : 4;
- my $idnum = 1;
- my $server;
- my $srvrname;
- my $pidfile;
- my $logfile;
- my $flags = "";
-
- if(!$httptlssrv) {
- return (0,0);
- }
-
- $server = servername_id($proto, $ipvnum, $idnum);
-
- $pidfile = $serverpidfile{$server};
-
- # don't retry if the server doesn't work
- if ($doesntrun{$pidfile}) {
- return (0, 0, 0);
- }
-
- my $pid = processexists($pidfile);
- if($pid > 0) {
- stopserver($server, "$pid");
- }
- unlink($pidfile) if(-f $pidfile);
-
- $srvrname = servername_str($proto, $ipvnum, $idnum);
-
- $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
-
- $flags .= "--http ";
- $flags .= "--debug 1 " if($debugprotocol);
- $flags .= "--priority NORMAL:+SRP ";
- $flags .= "--srppasswd $srcdir/certs/srp-verifier-db ";
- $flags .= "--srppasswdconf $srcdir/certs/srp-verifier-conf";
-
- my $port = 24367;
- my ($httptlspid, $pid2);
- for (1 .. 10) {
- $port += int(rand(800));
- my $allflags = "--port $port $flags";
-
- my $cmd = "$httptlssrv $allflags > $logfile 2>&1";
- ($httptlspid, $pid2) = startnew($cmd, $pidfile, 10, 1);
-
- if($httptlspid <= 0 || !pidexists($httptlspid)) {
- # it is NOT alive
- stopserver($server, "$pid2");
- displaylogs($testnumcheck);
- $doesntrun{$pidfile} = 1;
- $httptlspid = $pid2 = 0;
- next;
- }
- $doesntrun{$pidfile} = 0;
-
- if($verbose) {
- logmsg "RUN: $srvrname server PID $httptlspid port $port\n";
- }
- last;
- }
- logmsg "RUN: failed to start the $srvrname server\n" if(!$httptlspid);
- return ($httptlspid, $pid2, $port);
-}
-
-#######################################################################
-# start the pingpong server (FTP, POP3, IMAP, SMTP)
-#
-sub runpingpongserver {
- my ($proto, $id, $verbose, $ipv6) = @_;
- my $port;
- my $ip = ($ipv6 && ($ipv6 =~ /6$/)) ? "$HOST6IP" : "$HOSTIP";
- my $ipvnum = ($ipv6 && ($ipv6 =~ /6$/)) ? 6 : 4;
- my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
- my $server;
- my $srvrname;
- my $pidfile;
- my $logfile;
- my $flags = "";
-
- $server = servername_id($proto, $ipvnum, $idnum);
-
- $pidfile = $serverpidfile{$server};
- my $portfile = $serverportfile{$server};
-
- # don't retry if the server doesn't work
- if ($doesntrun{$pidfile}) {
- return (0,0);
- }
-
- my $pid = processexists($pidfile);
- if($pid > 0) {
- stopserver($server, "$pid");
- }
- unlink($pidfile) if(-f $pidfile);
-
- $srvrname = servername_str($proto, $ipvnum, $idnum);
-
- $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
-
- $flags .= "--verbose " if($debugprotocol);
- $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
- $flags .= "--portfile \"$portfile\" ";
- $flags .= "--srcdir \"$srcdir\" --proto $proto ";
- $flags .= "--id $idnum " if($idnum > 1);
- $flags .= "--ipv$ipvnum --port 0 --addr \"$ip\"";
-
- my $cmd = "$perl $srcdir/ftpserver.pl $flags";
- my ($ftppid, $pid2) = startnew($cmd, $pidfile, 15, 0);
-
- if($ftppid <= 0 || !pidexists($ftppid)) {
- # it is NOT alive
- logmsg "RUN: failed to start the $srvrname server\n";
- stopserver($server, "$pid2");
- displaylogs($testnumcheck);
- $doesntrun{$pidfile} = 1;
- return (0,0);
- }
-
- # where is it?
- $port = pidfromfile($portfile);
-
- logmsg "PINGPONG runs on port $port ($portfile)\n" if($verbose);
-
- # Server is up. Verify that we can speak to it.
- my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port);
- if(!$pid3) {
- logmsg "RUN: $srvrname server failed verification\n";
- # failed to talk to it properly. Kill the server and return failure
- stopserver($server, "$ftppid $pid2");
- displaylogs($testnumcheck);
- $doesntrun{$pidfile} = 1;
- return (0,0);
- }
- $pid2 = $pid3;
-
- logmsg "RUN: $srvrname server is PID $ftppid port $port\n" if($verbose);
-
- # Assign the correct port variable!
- if($proto eq "ftp") {
- if($ipvnum == 6) {
- # if IPv6, use a different setup
- $FTP6PORT = $port;
- }
- else {
- $FTPPORT = $port;
- }
- }
- elsif($proto eq "pop3") {
- if($ipvnum == 6) {
- $POP36PORT = $port;
- }
- else {
- $POP3PORT = $port;
- }
- }
- elsif($proto eq "imap") {
- if($ipvnum == 6) {
- $IMAP6PORT = $port;
- }
- else {
- $IMAPPORT = $port;
- }
- }
- elsif($proto eq "smtp") {
- if($ipvnum == 6) {
- $SMTP6PORT = $port;
- }
- else {
- $SMTPPORT = $port;
- }
- }
- else {
- print STDERR "Unsupported protocol $proto!!\n";
- return (0,0);
- }
-
- return ($pid2, $ftppid);
-}
-
-#######################################################################
-# start the ftps server (or rather, tunnel)
-#
-sub runftpsserver {
- my ($verbose, $ipv6, $certfile) = @_;
- my $proto = 'ftps';
- my $ip = ($ipv6 && ($ipv6 =~ /6$/)) ? "$HOST6IP" : "$HOSTIP";
- my $ipvnum = ($ipv6 && ($ipv6 =~ /6$/)) ? 6 : 4;
- my $idnum = 1;
- my $server;
- my $srvrname;
- my $pidfile;
- my $logfile;
- my $flags = "";
-
- if(!$stunnel) {
- return (0,0);
- }
-
- $server = servername_id($proto, $ipvnum, $idnum);
-
- $pidfile = $serverpidfile{$server};
-
- # don't retry if the server doesn't work
- if ($doesntrun{$pidfile}) {
- return (0, 0, 0);
- }
-
- my $pid = processexists($pidfile);
- if($pid > 0) {
- stopserver($server, "$pid");
- }
- unlink($pidfile) if(-f $pidfile);
-
- $srvrname = servername_str($proto, $ipvnum, $idnum);
-
- $certfile = 'stunnel.pem' unless($certfile);
-
- $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
-
- $flags .= "--verbose " if($debugprotocol);
- $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
- $flags .= "--id $idnum " if($idnum > 1);
- $flags .= "--ipv$ipvnum --proto $proto ";
- $flags .= "--certfile \"$certfile\" " if($certfile ne 'stunnel.pem');
- $flags .= "--stunnel \"$stunnel\" --srcdir \"$srcdir\" ";
- $flags .= "--connect $FTPPORT";
-
- my $ftpspid;
- my $pid2;
- my $port = 26713;
- for (1 .. 10) {
- $port += int(rand(700));
- my $options = "$flags --accept $port";
- my $cmd = "$perl $srcdir/secureserver.pl $options";
- ($ftpspid, $pid2) = startnew($cmd, $pidfile, 15, 0);
-
- if($ftpspid <= 0 || !pidexists($ftpspid)) {
- # it is NOT alive
- stopserver($server, "$pid2");
- displaylogs($testnumcheck);
- $doesntrun{$pidfile} = 1;
- $ftpspid = $pid2 = 0;
- next;
- }
-
- $doesntrun{$pidfile} = 0;
- $runcert{$server} = $certfile;
-
- if($verbose) {
- logmsg "RUN: $srvrname server is PID $ftpspid port $port\n";
- }
- last;
- }
-
- logmsg "RUN: failed to start the $srvrname server\n" if(!$ftpspid);
-
- return ($ftpspid, $pid2, $port);
-}
-
-#######################################################################
-# start the tftp server
-#
-sub runtftpserver {
- my ($id, $verbose, $ipv6) = @_;
- my $ip = $HOSTIP;
- my $proto = 'tftp';
- my $ipvnum = 4;
- my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
- my $server;
- my $srvrname;
- my $pidfile;
- my $logfile;
- my $flags = "";
-
- if($ipv6) {
- # if IPv6, use a different setup
- $ipvnum = 6;
- $ip = $HOST6IP;
- }
-
- $server = servername_id($proto, $ipvnum, $idnum);
-
- $pidfile = $serverpidfile{$server};
- my $portfile = $serverportfile{$server};
-
- # don't retry if the server doesn't work
- if ($doesntrun{$pidfile}) {
- return (0, 0, 0);
- }
-
- my $pid = processexists($pidfile);
- if($pid > 0) {
- stopserver($server, "$pid");
- }
- unlink($pidfile) if(-f $pidfile);
-
- $srvrname = servername_str($proto, $ipvnum, $idnum);
-
- $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
-
- $flags .= "--verbose " if($debugprotocol);
- $flags .= "--pidfile \"$pidfile\" ".
- "--portfile \"$portfile\" ".
- "--logfile \"$logfile\" ";
- $flags .= "--id $idnum " if($idnum > 1);
- $flags .= "--ipv$ipvnum --port 0 --srcdir \"$srcdir\"";
-
- my $cmd = "$perl $srcdir/tftpserver.pl $flags";
- my ($tftppid, $pid2) = startnew($cmd, $pidfile, 15, 0);
-
- if($tftppid <= 0 || !pidexists($tftppid)) {
- # it is NOT alive
- logmsg "RUN: failed to start the $srvrname server\n";
- stopserver($server, "$pid2");
- displaylogs($testnumcheck);
- $doesntrun{$pidfile} = 1;
- return (0, 0, 0);
- }
-
- my $port = pidfromfile($portfile);
-
- # Server is up. Verify that we can speak to it.
- my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port);
- if(!$pid3) {
- logmsg "RUN: $srvrname server failed verification\n";
- # failed to talk to it properly. Kill the server and return failure
- stopserver($server, "$tftppid $pid2");
- displaylogs($testnumcheck);
- $doesntrun{$pidfile} = 1;
- return (0, 0, 0);
- }
- $pid2 = $pid3;
-
- if($verbose) {
- logmsg "RUN: $srvrname server on PID $tftppid port $port\n";
- }
-
- return ($pid2, $tftppid, $port);
-}
-
-
-#######################################################################
-# start the rtsp server
-#
-sub runrtspserver {
- my ($verbose, $ipv6) = @_;
- my $ip = $HOSTIP;
- my $proto = 'rtsp';
- my $ipvnum = 4;
- my $idnum = 1;
- my $server;
- my $srvrname;
- my $pidfile;
- my $logfile;
- my $flags = "";
-
- if($ipv6) {
- # if IPv6, use a different setup
- $ipvnum = 6;
- $ip = $HOST6IP;
- }
-
- $server = servername_id($proto, $ipvnum, $idnum);
-
- $pidfile = $serverpidfile{$server};
- my $portfile = $serverportfile{$server};
-
- # don't retry if the server doesn't work
- if ($doesntrun{$pidfile}) {
- return (0, 0, 0);
- }
-
- my $pid = processexists($pidfile);
- if($pid > 0) {
- stopserver($server, "$pid");
- }
- unlink($pidfile) if(-f $pidfile);
-
- $srvrname = servername_str($proto, $ipvnum, $idnum);
-
- $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
-
- $flags .= "--verbose " if($debugprotocol);
- $flags .= "--pidfile \"$pidfile\" ".
- "--portfile \"$portfile\" ".
- "--logfile \"$logfile\" ";
- $flags .= "--id $idnum " if($idnum > 1);
- $flags .= "--ipv$ipvnum --port 0 --srcdir \"$srcdir\"";
-
- my $cmd = "$perl $srcdir/rtspserver.pl $flags";
- my ($rtsppid, $pid2) = startnew($cmd, $pidfile, 15, 0);
-
- if($rtsppid <= 0 || !pidexists($rtsppid)) {
- # it is NOT alive
- logmsg "RUN: failed to start the $srvrname server\n";
- stopserver($server, "$pid2");
- displaylogs($testnumcheck);
- $doesntrun{$pidfile} = 1;
- return (0, 0, 0);
- }
-
- my $port = pidfromfile($portfile);
-
- # Server is up. Verify that we can speak to it.
- my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port);
- if(!$pid3) {
- logmsg "RUN: $srvrname server failed verification\n";
- # failed to talk to it properly. Kill the server and return failure
- stopserver($server, "$rtsppid $pid2");
- displaylogs($testnumcheck);
- $doesntrun{$pidfile} = 1;
- return (0, 0, 0);
- }
- $pid2 = $pid3;
-
- if($verbose) {
- logmsg "RUN: $srvrname server PID $rtsppid port $port\n";
- }
-
- return ($rtsppid, $pid2, $port);
-}
-
-
-#######################################################################
-# Start the ssh (scp/sftp) server
-#
-sub runsshserver {
- my ($id, $verbose, $ipv6) = @_;
- my $ip=$HOSTIP;
- my $proto = 'ssh';
- my $ipvnum = 4;
- my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
- my $server;
- my $srvrname;
- my $pidfile;
- my $logfile;
- my $port = 20000; # no lower port
-
- if(!$USER) {
- logmsg "Can't start ssh server due to lack of USER name";
- return (0,0,0);
- }
-
- $server = servername_id($proto, $ipvnum, $idnum);
-
- $pidfile = $serverpidfile{$server};
-
- # don't retry if the server doesn't work
- if ($doesntrun{$pidfile}) {
- return (0, 0, 0);
- }
-
- my $sshd = find_sshd();
- if($sshd) {
- ($sshdid,$sshdvernum,$sshdverstr,$sshderror) = sshversioninfo($sshd);
- }
-
- my $pid = processexists($pidfile);
- if($pid > 0) {
- stopserver($server, "$pid");
- }
- unlink($pidfile) if(-f $pidfile);
-
- $srvrname = servername_str($proto, $ipvnum, $idnum);
-
- $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
-
- my $flags = "";
- $flags .= "--verbose " if($verbose);
- $flags .= "--debugprotocol " if($debugprotocol);
- $flags .= "--pidfile \"$pidfile\" ";
- $flags .= "--id $idnum " if($idnum > 1);
- $flags .= "--ipv$ipvnum --addr \"$ip\" ";
- $flags .= "--user \"$USER\"";
-
- my $sshpid;
- my $pid2;
-
- my $wport = 0,
- my @tports;
- for(1 .. 10) {
-
- # sshd doesn't have a way to pick an unused random port number, so
- # instead we iterate over possible port numbers to use until we find
- # one that works
- $port += int(rand(500));
- push @tports, $port;
-
- my $options = "$flags --sshport $port";
-
- my $cmd = "$perl $srcdir/sshserver.pl $options";
- ($sshpid, $pid2) = startnew($cmd, $pidfile, 60, 0);
-
- # on loaded systems sshserver start up can take longer than the
- # timeout passed to startnew, when this happens startnew completes
- # without being able to read the pidfile and consequently returns a
- # zero pid2 above.
- if($sshpid <= 0 || !pidexists($sshpid)) {
- # it is NOT alive
- stopserver($server, "$pid2");
- $doesntrun{$pidfile} = 1;
- $sshpid = $pid2 = 0;
- next;
- }
-
- # once it is known that the ssh server is alive, sftp server
- # verification is performed actually connecting to it, authenticating
- # and performing a very simple remote command. This verification is
- # tried only one time.
-
- $sshdlog = server_logfilename($LOGDIR, 'ssh', $ipvnum, $idnum);
- $sftplog = server_logfilename($LOGDIR, 'sftp', $ipvnum, $idnum);
-
- if(verifysftp('sftp', $ipvnum, $idnum, $ip, $port) < 1) {
- logmsg "RUN: SFTP server failed verification\n";
- # failed to talk to it properly. Kill the server and return failure
- display_sftplog();
- display_sftpconfig();
- display_sshdlog();
- display_sshdconfig();
- stopserver($server, "$sshpid $pid2");
- $doesntrun{$pidfile} = 1;
- $sshpid = $pid2 = 0;
- next;
- }
- # we're happy, no need to loop anymore!
- $doesntrun{$pidfile} = 0;
- $wport = $port;
- last;
- }
- logmsg "RUN: failed to start the $srvrname server on $port\n" if(!$sshpid);
-
- if(!$wport) {
- logmsg "RUN: couldn't start $srvrname. Tried these ports:";
- logmsg "RUN: ".join(", ", @tports);
- return (0,0,0);
- }
-
- my $hstpubmd5f = "curl_host_rsa_key.pub_md5";
- if(!open(PUBMD5FILE, "<", $hstpubmd5f) ||
- (read(PUBMD5FILE, $SSHSRVMD5, 32) != 32) ||
- !close(PUBMD5FILE) ||
- ($SSHSRVMD5 !~ /^[a-f0-9]{32}$/i))
- {
- my $msg = "Fatal: $srvrname pubkey md5 missing : \"$hstpubmd5f\" : $!";
- logmsg "$msg\n";
- stopservers($verbose);
- die $msg;
- }
-
- my $hstpubsha256f = "curl_host_rsa_key.pub_sha256";
- if(!open(PUBSHA256FILE, "<", $hstpubsha256f) ||
- (read(PUBSHA256FILE, $SSHSRVSHA256, 48) == 0) ||
- !close(PUBSHA256FILE))
- {
- my $msg = "Fatal: $srvrname pubkey sha256 missing : \"$hstpubsha256f\" : $!";
- logmsg "$msg\n";
- stopservers($verbose);
- die $msg;
- }
-
- logmsg "RUN: $srvrname on PID $pid2 port $wport\n" if($verbose);
-
- return ($pid2, $sshpid, $wport);
-}
-
-#######################################################################
-# Start the MQTT server
-#
-sub runmqttserver {
- my ($id, $verbose, $ipv6) = @_;
- my $ip=$HOSTIP;
- my $port = $MQTTPORT;
- my $proto = 'mqtt';
- my $ipvnum = 4;
- my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
- my $server;
- my $srvrname;
- my $pidfile;
- my $portfile;
- my $logfile;
- my $flags = "";
-
- $server = servername_id($proto, $ipvnum, $idnum);
- $pidfile = $serverpidfile{$server};
- $portfile = $serverportfile{$server};
-
- # don't retry if the server doesn't work
- if ($doesntrun{$pidfile}) {
- return (0,0);
- }
-
- my $pid = processexists($pidfile);
- if($pid > 0) {
- stopserver($server, "$pid");
- }
- unlink($pidfile) if(-f $pidfile);
-
- $srvrname = servername_str($proto, $ipvnum, $idnum);
-
- $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
-
- # start our MQTT server - on a random port!
- my $cmd="server/mqttd".exe_ext('SRV').
- " --port 0 ".
- " --pidfile $pidfile".
- " --portfile $portfile".
- " --config $FTPDCMD";
- my ($sockspid, $pid2) = startnew($cmd, $pidfile, 30, 0);
-
- if($sockspid <= 0 || !pidexists($sockspid)) {
- # it is NOT alive
- logmsg "RUN: failed to start the $srvrname server\n";
- stopserver($server, "$pid2");
- $doesntrun{$pidfile} = 1;
- return (0,0);
- }
-
- $MQTTPORT = pidfromfile($portfile);
-
- if($verbose) {
- logmsg "RUN: $srvrname server is now running PID $pid2 on PORT $MQTTPORT\n";
- }
-
- return ($pid2, $sockspid);
-}
-
-#######################################################################
-# Start the socks server
-#
-sub runsocksserver {
- my ($id, $verbose, $ipv6, $is_unix) = @_;
- my $ip=$HOSTIP;
- my $proto = 'socks';
- my $ipvnum = 4;
- my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
- my $server;
- my $srvrname;
- my $pidfile;
- my $logfile;
- my $flags = "";
-
- $server = servername_id($proto, $ipvnum, $idnum);
-
- $pidfile = $serverpidfile{$server};
- my $portfile = $serverportfile{$server};
-
- # don't retry if the server doesn't work
- if ($doesntrun{$pidfile}) {
- return (0, 0, 0);
- }
-
- my $pid = processexists($pidfile);
- if($pid > 0) {
- stopserver($server, "$pid");
- }
- unlink($pidfile) if(-f $pidfile);
-
- $srvrname = servername_str($proto, $ipvnum, $idnum);
-
- $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
-
- # start our socks server, get commands from the FTP cmd file
- my $cmd="";
- if($is_unix) {
- $cmd="server/socksd".exe_ext('SRV').
- " --pidfile $pidfile".
- " --unix-socket $SOCKSUNIXPATH".
- " --backend $HOSTIP".
- " --config $FTPDCMD";
- } else {
- $cmd="server/socksd".exe_ext('SRV').
- " --port 0 ".
- " --pidfile $pidfile".
- " --portfile $portfile".
- " --backend $HOSTIP".
- " --config $FTPDCMD";
- }
- my ($sockspid, $pid2) = startnew($cmd, $pidfile, 30, 0);
-
- if($sockspid <= 0 || !pidexists($sockspid)) {
- # it is NOT alive
- logmsg "RUN: failed to start the $srvrname server\n";
- stopserver($server, "$pid2");
- $doesntrun{$pidfile} = 1;
- return (0, 0, 0);
- }
-
- my $port = pidfromfile($portfile);
-
- if($verbose) {
- logmsg "RUN: $srvrname server is now running PID $pid2\n";
- }
-
- return ($pid2, $sockspid, $port);
-}
-
-#######################################################################
-# start the dict server
-#
-sub rundictserver {
- my ($verbose, $alt) = @_;
- my $proto = "dict";
- my $ip = $HOSTIP;
- my $ipvnum = 4;
- my $idnum = 1;
- my $server;
- my $srvrname;
- my $pidfile;
- my $logfile;
- my $flags = "";
-
- if($alt eq "ipv6") {
- # No IPv6
- }
-
- $server = servername_id($proto, $ipvnum, $idnum);
-
- $pidfile = $serverpidfile{$server};
-
- # don't retry if the server doesn't work
- if ($doesntrun{$pidfile}) {
- return (0, 0, 0);
- }
-
- my $pid = processexists($pidfile);
- if($pid > 0) {
- stopserver($server, "$pid");
- }
- unlink($pidfile) if(-f $pidfile);
-
- $srvrname = servername_str($proto, $ipvnum, $idnum);
-
- $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
-
- $flags .= "--verbose 1 " if($debugprotocol);
- $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
- $flags .= "--id $idnum " if($idnum > 1);
- $flags .= "--srcdir \"$srcdir\" ";
- $flags .= "--host $HOSTIP";
-
- my $port = 29000;
- my ($dictpid, $pid2);
- for(1 .. 10) {
- $port += int(rand(900));
- my $aflags = "--port $port $flags";
- my $cmd = "$srcdir/dictserver.py $aflags";
- ($dictpid, $pid2) = startnew($cmd, $pidfile, 15, 0);
-
- if($dictpid <= 0 || !pidexists($dictpid)) {
- # it is NOT alive
- stopserver($server, "$pid2");
- displaylogs($testnumcheck);
- $doesntrun{$pidfile} = 1;
- $dictpid = $pid2 = 0;
- next;
- }
- $doesntrun{$pidfile} = 0;
-
- if($verbose) {
- logmsg "RUN: $srvrname server PID $dictpid port $port\n";
- }
- last;
- }
- logmsg "RUN: failed to start the $srvrname server\n" if(!$dictpid);
-
- return ($dictpid, $pid2, $port);
-}
-
-#######################################################################
-# start the SMB server
-#
-sub runsmbserver {
- my ($verbose, $alt) = @_;
- my $proto = "smb";
- my $ip = $HOSTIP;
- my $ipvnum = 4;
- my $idnum = 1;
- my $server;
- my $srvrname;
- my $pidfile;
- my $logfile;
- my $flags = "";
-
- if($alt eq "ipv6") {
- # No IPv6
- }
-
- $server = servername_id($proto, $ipvnum, $idnum);
-
- $pidfile = $serverpidfile{$server};
-
- # don't retry if the server doesn't work
- if ($doesntrun{$pidfile}) {
- return (0, 0, 0);
- }
-
- my $pid = processexists($pidfile);
- if($pid > 0) {
- stopserver($server, "$pid");
- }
- unlink($pidfile) if(-f $pidfile);
-
- $srvrname = servername_str($proto, $ipvnum, $idnum);
-
- $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
-
- $flags .= "--verbose 1 " if($debugprotocol);
- $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
- $flags .= "--id $idnum " if($idnum > 1);
- $flags .= "--srcdir \"$srcdir\" ";
- $flags .= "--host $HOSTIP";
-
- my ($smbpid, $pid2);
- my $port = 31923;
- for(1 .. 10) {
- $port += int(rand(760));
- my $aflags = "--port $port $flags";
- my $cmd = "$srcdir/smbserver.py $aflags";
- ($smbpid, $pid2) = startnew($cmd, $pidfile, 15, 0);
-
- if($smbpid <= 0 || !pidexists($smbpid)) {
- # it is NOT alive
- stopserver($server, "$pid2");
- displaylogs($testnumcheck);
- $doesntrun{$pidfile} = 1;
- $smbpid = $pid2 = 0;
- next;
- }
- $doesntrun{$pidfile} = 0;
-
- if($verbose) {
- logmsg "RUN: $srvrname server PID $smbpid port $port\n";
- }
- last;
- }
- logmsg "RUN: failed to start the $srvrname server\n" if(!$smbpid);
-
- return ($smbpid, $pid2, $port);
-}
-
-#######################################################################
-# start the telnet server
-#
-sub runnegtelnetserver {
- my ($verbose, $alt) = @_;
- my $proto = "telnet";
- my $ip = $HOSTIP;
- my $ipvnum = 4;
- my $idnum = 1;
- my $server;
- my $srvrname;
- my $pidfile;
- my $logfile;
- my $flags = "";
-
- if($alt eq "ipv6") {
- # No IPv6
- }
-
- $server = servername_id($proto, $ipvnum, $idnum);
-
- $pidfile = $serverpidfile{$server};
-
- # don't retry if the server doesn't work
- if ($doesntrun{$pidfile}) {
- return (0, 0, 0);
- }
-
- my $pid = processexists($pidfile);
- if($pid > 0) {
- stopserver($server, "$pid");
- }
- unlink($pidfile) if(-f $pidfile);
-
- $srvrname = servername_str($proto, $ipvnum, $idnum);
-
- $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
-
- $flags .= "--verbose 1 " if($debugprotocol);
- $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
- $flags .= "--id $idnum " if($idnum > 1);
- $flags .= "--srcdir \"$srcdir\"";
-
- my ($ntelpid, $pid2);
- my $port = 32000;
- for(1 .. 10) {
- $port += int(rand(800));
- my $aflags = "--port $port $flags";
- my $cmd = "$srcdir/negtelnetserver.py $aflags";
- ($ntelpid, $pid2) = startnew($cmd, $pidfile, 15, 0);
-
- if($ntelpid <= 0 || !pidexists($ntelpid)) {
- # it is NOT alive
- stopserver($server, "$pid2");
- displaylogs($testnumcheck);
- $doesntrun{$pidfile} = 1;
- $ntelpid = $pid2 = 0;
- next;
- }
- $doesntrun{$pidfile} = 0;
-
- if($verbose) {
- logmsg "RUN: $srvrname server PID $ntelpid port $port\n";
- }
- last;
- }
- logmsg "RUN: failed to start the $srvrname server\n" if(!$ntelpid);
-
- return ($ntelpid, $pid2, $port);
-}
-
-
-#######################################################################
-# Single shot http and gopher server responsiveness test. This should only
-# be used to verify that a server present in %run hash is still functional
-#
-sub responsive_http_server {
- my ($proto, $verbose, $alt, $port_or_path) = @_;
- my $ip = $HOSTIP;
- my $ipvnum = 4;
- my $idnum = 1;
-
- if($alt eq "ipv6") {
- # if IPv6, use a different setup
- $ipvnum = 6;
- $ip = $HOST6IP;
- }
- elsif($alt eq "proxy") {
- $idnum = 2;
- }
- elsif($alt eq "unix") {
- # IP (protocol) is mutually exclusive with Unix sockets
- $ipvnum = "unix";
- }
-
- return &responsiveserver($proto, $ipvnum, $idnum, $ip, $port_or_path);
-}
-
-#######################################################################
-# Single shot pingpong server responsiveness test. This should only be
-# used to verify that a server present in %run hash is still functional
-#
-sub responsive_pingpong_server {
- my ($proto, $id, $verbose, $ipv6) = @_;
- my $port;
- my $ip = ($ipv6 && ($ipv6 =~ /6$/)) ? "$HOST6IP" : "$HOSTIP";
- my $ipvnum = ($ipv6 && ($ipv6 =~ /6$/)) ? 6 : 4;
- my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
-
- if($proto eq "ftp") {
- $port = $FTPPORT;
-
- if($ipvnum==6) {
- # if IPv6, use a different setup
- $port = $FTP6PORT;
- }
- }
- elsif($proto eq "pop3") {
- $port = ($ipvnum==6) ? $POP36PORT : $POP3PORT;
- }
- elsif($proto eq "imap") {
- $port = ($ipvnum==6) ? $IMAP6PORT : $IMAPPORT;
- }
- elsif($proto eq "smtp") {
- $port = ($ipvnum==6) ? $SMTP6PORT : $SMTPPORT;
- }
- else {
- print STDERR "Unsupported protocol $proto!!\n";
- return 0;
- }
-
- return &responsiveserver($proto, $ipvnum, $idnum, $ip, $port);
-}
-
-#######################################################################
-# Single shot rtsp server responsiveness test. This should only be
-# used to verify that a server present in %run hash is still functional
-#
-sub responsive_rtsp_server {
- my ($verbose, $ipv6) = @_;
- my $port = $RTSPPORT;
- my $ip = $HOSTIP;
- my $proto = 'rtsp';
- my $ipvnum = 4;
- my $idnum = 1;
-
- if($ipv6) {
- # if IPv6, use a different setup
- $ipvnum = 6;
- $port = $RTSP6PORT;
- $ip = $HOST6IP;
- }
-
- return &responsiveserver($proto, $ipvnum, $idnum, $ip, $port);
-}
-
-#######################################################################
-# Single shot tftp server responsiveness test. This should only be
-# used to verify that a server present in %run hash is still functional
-#
-sub responsive_tftp_server {
- my ($id, $verbose, $ipv6) = @_;
- my $port = $TFTPPORT;
- my $ip = $HOSTIP;
- my $proto = 'tftp';
- my $ipvnum = 4;
- my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
-
- if($ipv6) {
- # if IPv6, use a different setup
- $ipvnum = 6;
- $port = $TFTP6PORT;
- $ip = $HOST6IP;
- }
-
- return &responsiveserver($proto, $ipvnum, $idnum, $ip, $port);
-}
-
-#######################################################################
-# Single shot non-stunnel HTTP TLS extensions capable server
-# responsiveness test. This should only be used to verify that a
-# server present in %run hash is still functional
-#
-sub responsive_httptls_server {
- my ($verbose, $ipv6) = @_;
- my $proto = "httptls";
- my $port = ($ipv6 && ($ipv6 =~ /6$/)) ? $HTTPTLS6PORT : $HTTPTLSPORT;
- my $ip = ($ipv6 && ($ipv6 =~ /6$/)) ? "$HOST6IP" : "$HOSTIP";
- my $ipvnum = ($ipv6 && ($ipv6 =~ /6$/)) ? 6 : 4;
- my $idnum = 1;
-
- return &responsiveserver($proto, $ipvnum, $idnum, $ip, $port);
-}
-
-#######################################################################
-# Kill the processes that still lock files in a directory
-#
-sub clearlocks {
- my $dir = $_[0];
- my $done = 0;
-
- if(pathhelp::os_is_win()) {
- $dir = pathhelp::sys_native_abs_path($dir);
- $dir =~ s/\//\\\\/g;
- my $handle = "handle.exe";
- if($ENV{"PROCESSOR_ARCHITECTURE"} =~ /64$/) {
- $handle = "handle64.exe";
- }
- my @handles = `$handle $dir -accepteula -nobanner`;
- for $handle (@handles) {
- if($handle =~ /^(\S+)\s+pid:\s+(\d+)\s+type:\s+(\w+)\s+([0-9A-F]+):\s+(.+)\r\r/) {
- logmsg "Found $3 lock of '$5' ($4) by $1 ($2)\n";
- # Ignore stunnel since we cannot do anything about its locks
- if("$3" eq "File" && "$1" ne "tstunnel.exe") {
- logmsg "Killing IMAGENAME eq $1 and PID eq $2\n";
- system("taskkill.exe -f -fi \"IMAGENAME eq $1\" -fi \"PID eq $2\" >nul 2>&1");
- $done = 1;
- }
- }
- }
- }
- return $done;
-}
#######################################################################
# Remove all files in the specified directory
#
sub cleardir {
my $dir = $_[0];
- my $done = 1;
+ my $done = 1; # success
my $file;
# Get all files
opendir(my $dh, $dir) ||
return 0; # can't open dir
while($file = readdir($dh)) {
- if(($file !~ /^(\.|\.\.)\z/)) {
+ # Don't clear the $PIDDIR or $LOCKDIR since those need to live beyond
+ # one test
+ if(($file !~ /^(\.|\.\.)\z/) &&
+ "$file" ne $PIDDIR && "$file" ne $LOCKDIR) {
if(-d "$dir/$file") {
if(!cleardir("$dir/$file")) {
$done = 0;
@@ -2858,12 +377,53 @@ sub cleardir {
return $done;
}
+
+#######################################################################
+# Given two array references, this function will store them in two temporary
+# files, run 'diff' on them, store the result and return the diff output!
+sub showdiff {
+ my ($logdir, $firstref, $secondref)=@_;
+
+ my $file1="$logdir/check-generated";
+ my $file2="$logdir/check-expected";
+
+ open(my $temp, ">", "$file1") || die "Failure writing diff file";
+ for(@$firstref) {
+ my $l = $_;
+ $l =~ s/\r/[CR]/g;
+ $l =~ s/\n/[LF]/g;
+ $l =~ s/([^\x20-\x7f])/sprintf "%%%02x", ord $1/eg;
+ print $temp $l;
+ print $temp "\n";
+ }
+ close($temp) || die "Failure writing diff file";
+
+ open($temp, ">", "$file2") || die "Failure writing diff file";
+ for(@$secondref) {
+ my $l = $_;
+ $l =~ s/\r/[CR]/g;
+ $l =~ s/\n/[LF]/g;
+ $l =~ s/([^\x20-\x7f])/sprintf "%%%02x", ord $1/eg;
+ print $temp $l;
+ print $temp "\n";
+ }
+ close($temp) || die "Failure writing diff file";
+ my @out = `diff -u $file2 $file1 2>/dev/null`;
+
+ if(!$out[0]) {
+ @out = `diff -c $file2 $file1 2>/dev/null`;
+ }
+
+ return @out;
+}
+
+
#######################################################################
# compare test results with the expected output, we might filter off
# some pattern that is allowed to differ, output test results
#
sub compare {
- my ($testnum, $testname, $subject, $firstref, $secondref)=@_;
+ my ($runnerid, $testnum, $testname, $subject, $firstref, $secondref)=@_;
my $result = compareparts($firstref, $secondref);
@@ -2873,7 +433,8 @@ sub compare {
if(!$short) {
logmsg "\n $testnum: $subject FAILED:\n";
- logmsg showdiff($LOGDIR, $firstref, $secondref);
+ my $logdir = getrunnerlogdir($runnerid);
+ logmsg showdiff($logdir, $firstref, $secondref);
}
elsif(!$automakestyle) {
logmsg "FAILED\n";
@@ -2886,88 +447,32 @@ sub compare {
return $result;
}
-sub setupfeatures {
- $feature{"alt-svc"} = $has_altsvc;
- $feature{"bearssl"} = $has_bearssl;
- $feature{"brotli"} = $has_brotli;
- $feature{"c-ares"} = $has_cares;
- $feature{"crypto"} = $has_crypto;
- $feature{"debug"} = $debug_build;
- $feature{"getrlimit"} = $has_getrlimit;
- $feature{"GnuTLS"} = $has_gnutls;
- $feature{"GSS-API"} = $has_gssapi;
- $feature{"h2c"} = $has_h2c;
- $feature{"HSTS"} = $has_hsts;
- $feature{"http/2"} = $has_http2;
- $feature{"https-proxy"} = $has_httpsproxy;
- $feature{"hyper"} = $has_hyper;
- $feature{"idn"} = $has_idn;
- $feature{"ipv6"} = $has_ipv6;
- $feature{"Kerberos"} = $has_kerberos;
- $feature{"large_file"} = $has_largefile;
- $feature{"ld_preload"} = ($has_ldpreload && !$debug_build);
- $feature{"libssh"} = $has_libssh;
- $feature{"libssh2"} = $has_libssh2;
- $feature{"libz"} = $has_libz;
- $feature{"manual"} = $has_manual;
- $feature{"MinGW"} = $has_mingw;
- $feature{"MultiSSL"} = $has_multissl;
- $feature{"NSS"} = $has_nss;
- $feature{"NTLM"} = $has_ntlm;
- $feature{"NTLM_WB"} = $has_ntlm_wb;
- $feature{"oldlibssh"} = $has_oldlibssh;
- $feature{"OpenSSL"} = $has_openssl || $has_libressl || $has_boringssl;
- $feature{"PSL"} = $has_psl;
- $feature{"rustls"} = $has_rustls;
- $feature{"Schannel"} = $has_schannel;
- $feature{"sectransp"} = $has_sectransp;
- $feature{"SPNEGO"} = $has_spnego;
- $feature{"SSL"} = $has_ssl;
- $feature{"SSLpinning"} = $has_sslpinning;
- $feature{"SSPI"} = $has_sspi;
- $feature{"threaded-resolver"} = $has_threadedres;
- $feature{"threadsafe"} = $has_threadsafe;
- $feature{"TLS-SRP"} = $has_tls_srp;
- $feature{"TrackMemory"} = $has_memory_tracking;
- $feature{"Unicode"} = $has_unicode;
- $feature{"unittest"} = $debug_build;
- $feature{"unix-sockets"} = $has_unix;
- $feature{"win32"} = $has_win32;
- $feature{"wolfssh"} = $has_wolfssh;
- $feature{"wolfssl"} = $has_wolfssl;
- $feature{"zstd"} = $has_zstd;
+#######################################################################
+# Parse and store the protocols in curl's Protocols: line
+sub parseprotocols {
+ my ($line)=@_;
- # make each protocol an enabled "feature"
- for my $p (@protocols) {
- $feature{$p} = 1;
- }
- # 'socks' was once here but is now removed
+ @protocols = split(' ', lc($line));
- #
- # strings that must match the names used in server/disabled.c
- #
- $feature{"cookies"} = 1;
- $feature{"DoH"} = 1;
- $feature{"HTTP-auth"} = 1;
- $feature{"Mime"} = 1;
- $feature{"netrc"} = 1;
- $feature{"parsedate"} = 1;
- $feature{"proxy"} = 1;
- $feature{"shuffle-dns"} = 1;
- $feature{"typecheck"} = 1;
- $feature{"verbose-strings"} = 1;
- $feature{"wakeup"} = 1;
- $feature{"headers-api"} = 1;
- $feature{"xattr"} = 1;
-}
+ # Generate a "proto-ipv6" version of each protocol to match the
+ # IPv6 <server> name and a "proto-unix" to match the variant which
+ # uses Unix domain sockets. This works even if support isn't
+ # compiled in because the <features> test will fail.
+ push @protocols, map(("$_-ipv6", "$_-unix"), @protocols);
-#######################################################################
-# display information about curl and the host the test suite runs on
-#
-sub checksystem {
+ # 'http-proxy' is used in test cases to do CONNECT through
+ push @protocols, 'http-proxy';
+
+ # 'none' is used in test cases to mean no server
+ push @protocols, 'none';
+}
- unlink($memdump); # remove this if there was one left
+#######################################################################
+# Check & display information about curl and the host the test suite runs on.
+# Information to do with servers is displayed in displayserverfeatures, after
+# the server initialization is performed.
+sub checksystemfeatures {
my $feat;
my $curl;
my $libcurl;
@@ -2979,7 +484,7 @@ sub checksystem {
my $curlverout="$LOGDIR/curlverout.log";
my $curlvererr="$LOGDIR/curlvererr.log";
- my $versioncmd="$CURL --version 1>$curlverout 2>$curlvererr";
+ my $versioncmd=shell_quote($CURL) . " --version 1>$curlverout 2>$curlvererr";
unlink($curlverout);
unlink($curlvererr);
@@ -2987,16 +492,16 @@ sub checksystem {
$versretval = runclient($versioncmd);
$versnoexec = $!;
- open(VERSOUT, "<$curlverout");
- @version = <VERSOUT>;
- close(VERSOUT);
+ open(my $versout, "<", "$curlverout");
+ @version = <$versout>;
+ close($versout);
- open(DISABLED, "server/disabled".exe_ext('TOOL')."|");
- @disabled = <DISABLED>;
- close(DISABLED);
+ open(my $disabledh, "-|", "server/disabled".exe_ext('TOOL'));
+ @disabled = <$disabledh>;
+ close($disabledh);
if($disabled[0]) {
- map s/[\r\n]//g, @disabled;
+ s/[\r\n]//g for @disabled;
$dis = join(", ", @disabled);
}
@@ -3006,225 +511,169 @@ sub checksystem {
if($_ =~ /^curl ([^ ]*)/) {
$curl = $_;
- $VERSION = $1;
- $curl =~ s/^(.*)(libcurl.*)/$1/g;
+ $CURLVERSION = $1;
+ $curl =~ s/^(.*)(libcurl.*)/$1/g || die "Failure determining curl binary version";
$libcurl = $2;
if($curl =~ /linux|bsd|solaris/) {
- $has_ldpreload = 1;
+ # system support LD_PRELOAD; may be disabled later
+ $feature{"ld_preload"} = 1;
}
if($curl =~ /win32|Windows|mingw(32|64)/) {
# This is a Windows MinGW build or native build, we need to use
# Win32-style path.
- $pwd = pathhelp::sys_native_current_path();
+ $pwd = sys_native_current_path();
$has_textaware = 1;
- $has_win32 = 1;
- $has_mingw = 1 if ($curl =~ /-pc-mingw32/);
+ $feature{"win32"} = 1;
+ # set if built with MinGW (as opposed to MinGW-w64)
+ $feature{"MinGW"} = 1 if ($curl =~ /-pc-mingw32/);
}
- if ($libcurl =~ /(winssl|schannel)/i) {
- $has_schannel=1;
- $has_sslpinning=1;
+ if ($libcurl =~ /\s(winssl|schannel)\b/i) {
+ $feature{"Schannel"} = 1;
+ $feature{"SSLpinning"} = 1;
}
- elsif ($libcurl =~ /openssl/i) {
- $has_openssl=1;
- $has_sslpinning=1;
+ elsif ($libcurl =~ /\sopenssl\b/i) {
+ $feature{"OpenSSL"} = 1;
+ $feature{"SSLpinning"} = 1;
}
- elsif ($libcurl =~ /gnutls/i) {
- $has_gnutls=1;
- $has_sslpinning=1;
+ elsif ($libcurl =~ /\sgnutls\b/i) {
+ $feature{"GnuTLS"} = 1;
+ $feature{"SSLpinning"} = 1;
}
- elsif ($libcurl =~ /rustls-ffi/i) {
- $has_rustls=1;
+ elsif ($libcurl =~ /\srustls-ffi\b/i) {
+ $feature{"rustls"} = 1;
}
- elsif ($libcurl =~ /nss/i) {
- $has_nss=1;
- $has_sslpinning=1;
+ elsif ($libcurl =~ /\swolfssl\b/i) {
+ $feature{"wolfssl"} = 1;
+ $feature{"SSLpinning"} = 1;
}
- elsif ($libcurl =~ /wolfssl/i) {
- $has_wolfssl=1;
- $has_sslpinning=1;
+ elsif ($libcurl =~ /\sbearssl\b/i) {
+ $feature{"bearssl"} = 1;
}
- elsif ($libcurl =~ /bearssl/i) {
- $has_bearssl=1;
+ elsif ($libcurl =~ /\ssecuretransport\b/i) {
+ $feature{"sectransp"} = 1;
+ $feature{"SSLpinning"} = 1;
}
- elsif ($libcurl =~ /securetransport/i) {
- $has_sectransp=1;
- $has_sslpinning=1;
+ elsif ($libcurl =~ /\sBoringSSL\b/i) {
+ # OpenSSL compatible API
+ $feature{"OpenSSL"} = 1;
+ $feature{"SSLpinning"} = 1;
}
- elsif ($libcurl =~ /BoringSSL/i) {
- $has_boringssl=1;
- $has_sslpinning=1;
+ elsif ($libcurl =~ /\slibressl\b/i) {
+ # OpenSSL compatible API
+ $feature{"OpenSSL"} = 1;
+ $feature{"SSLpinning"} = 1;
}
- elsif ($libcurl =~ /libressl/i) {
- $has_libressl=1;
- $has_sslpinning=1;
- }
- elsif ($libcurl =~ /mbedTLS/i) {
- $has_mbedtls=1;
- $has_sslpinning=1;
+ elsif ($libcurl =~ /\smbedTLS\b/i) {
+ $feature{"mbedtls"} = 1;
+ $feature{"SSLpinning"} = 1;
}
if ($libcurl =~ /ares/i) {
- $has_cares=1;
+ $feature{"c-ares"} = 1;
$resolver="c-ares";
}
if ($libcurl =~ /Hyper/i) {
- $has_hyper=1;
+ $feature{"hyper"} = 1;
}
if ($libcurl =~ /nghttp2/i) {
# nghttp2 supports h2c, hyper does not
- $has_h2c=1;
+ $feature{"h2c"} = 1;
}
if ($libcurl =~ /libssh2/i) {
- $has_libssh2=1;
+ $feature{"libssh2"} = 1;
}
if ($libcurl =~ /libssh\/([0-9.]*)\//i) {
- $has_libssh=1;
+ $feature{"libssh"} = 1;
if($1 =~ /(\d+)\.(\d+).(\d+)/) {
my $v = $1 * 100 + $2 * 10 + $3;
if($v < 94) {
# before 0.9.4
- $has_oldlibssh = 1;
+ $feature{"oldlibssh"} = 1;
}
}
}
if ($libcurl =~ /wolfssh/i) {
- $has_wolfssh=1;
+ $feature{"wolfssh"} = 1;
}
}
elsif($_ =~ /^Protocols: (.*)/i) {
# these are the protocols compiled in to this libcurl
- @protocols = split(' ', lc($1));
-
- # Generate a "proto-ipv6" version of each protocol to match the
- # IPv6 <server> name and a "proto-unix" to match the variant which
- # uses Unix domain sockets. This works even if support isn't
- # compiled in because the <features> test will fail.
- push @protocols, map(("$_-ipv6", "$_-unix"), @protocols);
-
- # 'http-proxy' is used in test cases to do CONNECT through
- push @protocols, 'http-proxy';
-
- # 'none' is used in test cases to mean no server
- push @protocols, 'none';
+ parseprotocols($1);
}
elsif($_ =~ /^Features: (.*)/i) {
$feat = $1;
- if($feat =~ /TrackMemory/i) {
- # built with memory tracking support (--enable-curldebug)
- $has_memory_tracking = 1;
- }
- if($feat =~ /debug/i) {
- # curl was built with --enable-debug
- $debug_build = 1;
- }
- if($feat =~ /SSL/i) {
- # ssl enabled
- $has_ssl=1;
- }
- if($feat =~ /MultiSSL/i) {
- # multiple ssl backends available.
- $has_multissl=1;
- }
- if($feat =~ /Largefile/i) {
- # large file support
- $has_largefile=1;
- }
- if($feat =~ /IDN/i) {
- # IDN support
- $has_idn=1;
- }
- if($feat =~ /IPv6/i) {
- $has_ipv6 = 1;
- }
- if($feat =~ /UnixSockets/i) {
- $has_unix = 1;
- }
- if($feat =~ /libz/i) {
- $has_libz = 1;
- }
- if($feat =~ /brotli/i) {
- $has_brotli = 1;
- }
- if($feat =~ /zstd/i) {
- $has_zstd = 1;
- }
- if($feat =~ /NTLM/i) {
- # NTLM enabled
- $has_ntlm=1;
-
- # Use this as a proxy for any cryptographic authentication
- $has_crypto=1;
- }
- if($feat =~ /NTLM_WB/i) {
- # NTLM delegation to winbind daemon ntlm_auth helper enabled
- $has_ntlm_wb=1;
- }
- if($feat =~ /SSPI/i) {
- # SSPI enabled
- $has_sspi=1;
- }
- if($feat =~ /GSS-API/i) {
- # GSS-API enabled
- $has_gssapi=1;
- }
- if($feat =~ /Kerberos/i) {
- # Kerberos enabled
- $has_kerberos=1;
-
- # Use this as a proxy for any cryptographic authentication
- $has_crypto=1;
- }
- if($feat =~ /SPNEGO/i) {
- # SPNEGO enabled
- $has_spnego=1;
- # Use this as a proxy for any cryptographic authentication
- $has_crypto=1;
- }
- if($feat =~ /CharConv/i) {
- # CharConv enabled
- $has_charconv=1;
- }
- if($feat =~ /TLS-SRP/i) {
- # TLS-SRP enabled
- $has_tls_srp=1;
- }
- if($feat =~ /PSL/i) {
- # PSL enabled
- $has_psl=1;
- }
- if($feat =~ /alt-svc/i) {
- # alt-svc enabled
- $has_altsvc=1;
- }
- if($feat =~ /HSTS/i) {
- $has_hsts=1;
- }
+ # built with memory tracking support (--enable-curldebug); may be disabled later
+ $feature{"TrackMemory"} = $feat =~ /TrackMemory/i;
+ # curl was built with --enable-debug
+ $feature{"debug"} = $feat =~ /debug/i;
+ # ssl enabled
+ $feature{"SSL"} = $feat =~ /SSL/i;
+ # multiple ssl backends available.
+ $feature{"MultiSSL"} = $feat =~ /MultiSSL/i;
+ # large file support
+ $feature{"large_file"} = $feat =~ /Largefile/i;
+ # IDN support
+ $feature{"idn"} = $feat =~ /IDN/i;
+ # IPv6 support
+ $feature{"ipv6"} = $feat =~ /IPv6/i;
+ # Unix sockets support
+ $feature{"unix-sockets"} = $feat =~ /UnixSockets/i;
+ # libz compression
+ $feature{"libz"} = $feat =~ /libz/i;
+ # Brotli compression
+ $feature{"brotli"} = $feat =~ /brotli/i;
+ # Zstd compression
+ $feature{"zstd"} = $feat =~ /zstd/i;
+ # NTLM enabled
+ $feature{"NTLM"} = $feat =~ /NTLM/i;
+ # NTLM delegation to winbind daemon ntlm_auth helper enabled
+ $feature{"NTLM_WB"} = $feat =~ /NTLM_WB/i;
+ # SSPI enabled
+ $feature{"SSPI"} = $feat =~ /SSPI/i;
+ # GSS-API enabled
+ $feature{"GSS-API"} = $feat =~ /GSS-API/i;
+ # Kerberos enabled
+ $feature{"Kerberos"} = $feat =~ /Kerberos/i;
+ # SPNEGO enabled
+ $feature{"SPNEGO"} = $feat =~ /SPNEGO/i;
+ # CharConv enabled
+ $feature{"CharConv"} = $feat =~ /CharConv/i;
+ # TLS-SRP enabled
+ $feature{"TLS-SRP"} = $feat =~ /TLS-SRP/i;
+ # PSL enabled
+ $feature{"PSL"} = $feat =~ /PSL/i;
+ # alt-svc enabled
+ $feature{"alt-svc"} = $feat =~ /alt-svc/i;
+ # HSTS support
+ $feature{"HSTS"} = $feat =~ /HSTS/i;
if($feat =~ /AsynchDNS/i) {
- if(!$has_cares) {
+ if(!$feature{"c-ares"}) {
# this means threaded resolver
- $has_threadedres=1;
+ $feature{"threaded-resolver"} = 1;
$resolver="threaded";
}
}
- if($feat =~ /HTTP2/) {
- # http2 enabled
- $has_http2=1;
-
+ # http2 enabled
+ $feature{"http/2"} = $feat =~ /HTTP2/;
+ if($feature{"http/2"}) {
push @protocols, 'http/2';
}
- if($feat =~ /HTTPS-proxy/) {
- $has_httpsproxy=1;
-
+ # http3 enabled
+ $feature{"http/3"} = $feat =~ /HTTP3/;
+ if($feature{"http/3"}) {
+ push @protocols, 'http/3';
+ }
+ # https proxy support
+ $feature{"https-proxy"} = $feat =~ /HTTPS-proxy/;
+ if($feature{"https-proxy"}) {
# 'https-proxy' is used as "server" so consider it a protocol
push @protocols, 'https-proxy';
}
- if($feat =~ /Unicode/i) {
- $has_unicode = 1;
- }
- if($feat =~ /threadsafe/i) {
- $has_threadsafe = 1;
- }
+ # UNICODE support
+ $feature{"Unicode"} = $feat =~ /Unicode/i;
+ # Thread-safe init
+ $feature{"threadsafe"} = $feat =~ /threadsafe/i;
}
#
# Test harness currently uses a non-stunnel server in order to
@@ -3234,7 +683,7 @@ sub checksystem {
# to differentiate this from classic stunnel based 'https' test
# harness server.
#
- if($has_tls_srp) {
+ if($feature{"TLS-SRP"}) {
my $add_httptls;
for(@protocols) {
if($_ =~ /^https(-ipv6|)$/) {
@@ -3248,6 +697,7 @@ sub checksystem {
}
}
}
+
if(!$curl) {
logmsg "unable to get curl's version, further details are:\n";
logmsg "issued command: \n";
@@ -3271,16 +721,20 @@ sub checksystem {
}
if(-r "../lib/curl_config.h") {
- open(CONF, "<../lib/curl_config.h");
- while(<CONF>) {
+ open(my $conf, "<", "../lib/curl_config.h");
+ while(<$conf>) {
if($_ =~ /^\#define HAVE_GETRLIMIT/) {
- $has_getrlimit = 1;
+ # set if system has getrlimit()
+ $feature{"getrlimit"} = 1;
}
}
- close(CONF);
+ close($conf);
}
- if($has_ipv6) {
+ # allow this feature only if debug mode is disabled
+ $feature{"ld_preload"} = $feature{"ld_preload"} && !$feature{"debug"};
+
+ if($feature{"ipv6"}) {
# client has IPv6 support
# check if the HTTP server has it!
@@ -3289,7 +743,6 @@ sub checksystem {
if($sws[0] =~ /IPv6/) {
# HTTP server has IPv6 support!
$http_ipv6 = 1;
- $gopher_ipv6 = 1;
}
# check if the FTP server has it!
@@ -3301,36 +754,69 @@ sub checksystem {
}
}
- if($has_unix) {
+ if($feature{"unix-sockets"}) {
# client has Unix sockets support, check whether the HTTP server has it
my $cmd = "server/sws".exe_ext('SRV')." --version";
my @sws = `$cmd`;
$http_unix = 1 if($sws[0] =~ /unix/);
}
- if(!$has_memory_tracking && $torture) {
- die "can't run torture tests since curl was built without ".
- "TrackMemory feature (--enable-curldebug)";
- }
-
- open(M, "$CURL -M 2>&1|");
- while(my $s = <M>) {
+ open(my $manh, "-|", shell_quote($CURL) . " -M 2>&1");
+ while(my $s = <$manh>) {
if($s =~ /built-in manual was disabled at build-time/) {
- $has_manual = 0;
+ $feature{"manual"} = 0;
last;
}
- $has_manual = 1;
+ $feature{"manual"} = 1;
last;
}
- close(M);
+ close($manh);
+
+ $feature{"unittest"} = $feature{"debug"};
+ $feature{"nghttpx"} = !!$ENV{'NGHTTPX'};
+ $feature{"nghttpx-h3"} = !!$nghttpx_h3;
+
+ #
+ # strings that must exactly match the names used in server/disabled.c
+ #
+ $feature{"cookies"} = 1;
+ # Use this as a proxy for any cryptographic authentication
+ $feature{"crypto"} = $feature{"NTLM"} || $feature{"Kerberos"} || $feature{"SPNEGO"};
+ $feature{"DoH"} = 1;
+ $feature{"HTTP-auth"} = 1;
+ $feature{"Mime"} = 1;
+ $feature{"form-api"} = 1;
+ $feature{"netrc"} = 1;
+ $feature{"parsedate"} = 1;
+ $feature{"proxy"} = 1;
+ $feature{"shuffle-dns"} = 1;
+ $feature{"typecheck"} = 1;
+ $feature{"verbose-strings"} = 1;
+ $feature{"wakeup"} = 1;
+ $feature{"headers-api"} = 1;
+ $feature{"xattr"} = 1;
+ $feature{"large-time"} = 1;
+
+ # make each protocol an enabled "feature"
+ for my $p (@protocols) {
+ $feature{$p} = 1;
+ }
+ # 'socks' was once here but is now removed
$has_shared = `sh $CURLCONFIG --built-shared`;
chomp $has_shared;
+ $has_shared = $has_shared eq "yes";
+
+ if(!$feature{"TrackMemory"} && $torture) {
+ die "can't run torture tests since curl was built without ".
+ "TrackMemory feature (--enable-curldebug)";
+ }
my $hostname=join(' ', runclientoutput("hostname"));
my $hosttype=join(' ', runclientoutput("uname -a"));
my $hostos=$^O;
+ # display summary information about curl and the test host
logmsg ("********* System characteristics ******** \n",
"* $curl\n",
"* $libcurl\n",
@@ -3340,36 +826,25 @@ sub checksystem {
"* System: $hosttype",
"* OS: $hostos\n");
- if($has_memory_tracking && $has_threadedres) {
- $has_memory_tracking = 0;
+ if($jobs) {
+ # Only show if not the default for now
+ logmsg "* Jobs: $jobs\n";
+ }
+ if($feature{"TrackMemory"} && $feature{"threaded-resolver"}) {
logmsg("*\n",
"*** DISABLES memory tracking when using threaded resolver\n",
"*\n");
}
- logmsg sprintf("* Servers: %s", $stunnel?"SSL ":"");
- logmsg sprintf("%s", $http_ipv6?"HTTP-IPv6 ":"");
- logmsg sprintf("%s", $http_unix?"HTTP-unix ":"");
- logmsg sprintf("%s\n", $ftp_ipv6?"FTP-IPv6 ":"");
-
- logmsg sprintf("* Env: %s%s", $valgrind?"Valgrind ":"",
- $run_event_based?"event-based ":"");
+ logmsg sprintf("* Env: %s%s%s", $valgrind?"Valgrind ":"",
+ $run_event_based?"event-based ":"",
+ $nghttpx_h3);
logmsg sprintf("%s\n", $libtool?"Libtool ":"");
logmsg ("* Seed: $randseed\n");
- if($verbose) {
- if($has_unix) {
- logmsg "* Unix socket paths:\n";
- if($http_unix) {
- logmsg sprintf("* HTTP-Unix:%s\n", $HTTPUNIXPATH);
- logmsg sprintf("* Socks-Unix:%s\n", $SOCKSUNIXPATH);
- }
- }
- }
-
- logmsg "***************************************** \n";
+ # Disable memory tracking when using threaded resolver
+ $feature{"TrackMemory"} = $feature{"TrackMemory"} && !$feature{"threaded-resolver"};
- setupfeatures();
# toggle off the features that were disabled in the build
for my $d(@disabled) {
$feature{$d} = 0;
@@ -3377,155 +852,14 @@ sub checksystem {
}
#######################################################################
-# substitute the variable stuff into either a joined up file or
-# a command, in either case passed by reference
+# display information about server features
#
-sub subVariables {
- my ($thing, $testnum, $prefix) = @_;
-
- if(!$prefix) {
- $prefix = "%";
- }
-
- # test server ports
- $$thing =~ s/${prefix}FTP6PORT/$FTP6PORT/g;
- $$thing =~ s/${prefix}FTPSPORT/$FTPSPORT/g;
- $$thing =~ s/${prefix}FTPPORT/$FTPPORT/g;
- $$thing =~ s/${prefix}GOPHER6PORT/$GOPHER6PORT/g;
- $$thing =~ s/${prefix}GOPHERPORT/$GOPHERPORT/g;
- $$thing =~ s/${prefix}GOPHERSPORT/$GOPHERSPORT/g;
- $$thing =~ s/${prefix}HTTPTLS6PORT/$HTTPTLS6PORT/g;
- $$thing =~ s/${prefix}HTTPTLSPORT/$HTTPTLSPORT/g;
- $$thing =~ s/${prefix}HTTP6PORT/$HTTP6PORT/g;
- $$thing =~ s/${prefix}HTTPSPORT/$HTTPSPORT/g;
- $$thing =~ s/${prefix}HTTPSPROXYPORT/$HTTPSPROXYPORT/g;
- $$thing =~ s/${prefix}HTTP2PORT/$HTTP2PORT/g;
- $$thing =~ s/${prefix}HTTPPORT/$HTTPPORT/g;
- $$thing =~ s/${prefix}PROXYPORT/$HTTPPROXYPORT/g;
- $$thing =~ s/${prefix}MQTTPORT/$MQTTPORT/g;
- $$thing =~ s/${prefix}IMAP6PORT/$IMAP6PORT/g;
- $$thing =~ s/${prefix}IMAPPORT/$IMAPPORT/g;
- $$thing =~ s/${prefix}POP36PORT/$POP36PORT/g;
- $$thing =~ s/${prefix}POP3PORT/$POP3PORT/g;
- $$thing =~ s/${prefix}RTSP6PORT/$RTSP6PORT/g;
- $$thing =~ s/${prefix}RTSPPORT/$RTSPPORT/g;
- $$thing =~ s/${prefix}SMTP6PORT/$SMTP6PORT/g;
- $$thing =~ s/${prefix}SMTPPORT/$SMTPPORT/g;
- $$thing =~ s/${prefix}SOCKSPORT/$SOCKSPORT/g;
- $$thing =~ s/${prefix}SSHPORT/$SSHPORT/g;
- $$thing =~ s/${prefix}TFTP6PORT/$TFTP6PORT/g;
- $$thing =~ s/${prefix}TFTPPORT/$TFTPPORT/g;
- $$thing =~ s/${prefix}DICTPORT/$DICTPORT/g;
- $$thing =~ s/${prefix}SMBPORT/$SMBPORT/g;
- $$thing =~ s/${prefix}SMBSPORT/$SMBSPORT/g;
- $$thing =~ s/${prefix}TELNETPORT/$TELNETPORT/g;
- $$thing =~ s/${prefix}NOLISTENPORT/$NOLISTENPORT/g;
-
- # server Unix domain socket paths
- $$thing =~ s/${prefix}HTTPUNIXPATH/$HTTPUNIXPATH/g;
- $$thing =~ s/${prefix}SOCKSUNIXPATH/$SOCKSUNIXPATH/g;
-
- # client IP addresses
- $$thing =~ s/${prefix}CLIENT6IP/$CLIENT6IP/g;
- $$thing =~ s/${prefix}CLIENTIP/$CLIENTIP/g;
-
- # server IP addresses
- $$thing =~ s/${prefix}HOST6IP/$HOST6IP/g;
- $$thing =~ s/${prefix}HOSTIP/$HOSTIP/g;
-
- # misc
- $$thing =~ s/${prefix}CURL/$CURL/g;
- $$thing =~ s/${prefix}PWD/$pwd/g;
- $$thing =~ s/${prefix}POSIX_PWD/$posix_pwd/g;
- $$thing =~ s/${prefix}VERSION/$VERSION/g;
- $$thing =~ s/${prefix}TESTNUMBER/$testnum/g;
-
- my $file_pwd = $pwd;
- if($file_pwd !~ /^\//) {
- $file_pwd = "/$file_pwd";
- }
- my $ssh_pwd = $posix_pwd;
- if ($sshdid && $sshdid =~ /OpenSSH-Windows/) {
- $ssh_pwd = $file_pwd;
- }
-
- $$thing =~ s/${prefix}FILE_PWD/$file_pwd/g;
- $$thing =~ s/${prefix}SSH_PWD/$ssh_pwd/g;
- $$thing =~ s/${prefix}SRCDIR/$srcdir/g;
- $$thing =~ s/${prefix}USER/$USER/g;
-
- $$thing =~ s/${prefix}SSHSRVMD5/$SSHSRVMD5/g;
- $$thing =~ s/${prefix}SSHSRVSHA256/$SSHSRVSHA256/g;
-
- # The purpose of FTPTIME2 and FTPTIME3 is to provide times that can be
- # used for time-out tests and that would work on most hosts as these
- # adjust for the startup/check time for this particular host. We needed to
- # do this to make the test suite run better on very slow hosts.
- my $ftp2 = $ftpchecktime * 2;
- my $ftp3 = $ftpchecktime * 3;
-
- $$thing =~ s/${prefix}FTPTIME2/$ftp2/g;
- $$thing =~ s/${prefix}FTPTIME3/$ftp3/g;
-
- # HTTP2
- $$thing =~ s/${prefix}H2CVER/$h2cver/g;
-}
-
-sub subBase64 {
- my ($thing) = @_;
-
- # cut out the base64 piece
- if($$thing =~ s/%b64\[(.*)\]b64%/%%B64%%/i) {
- my $d = $1;
- # encode %NN characters
- $d =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
- my $enc = encode_base64($d, "");
- # put the result into there
- $$thing =~ s/%%B64%%/$enc/;
- }
- # hex decode
- if($$thing =~ s/%hex\[(.*)\]hex%/%%HEX%%/i) {
- # decode %NN characters
- my $d = $1;
- $d =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
- $$thing =~ s/%%HEX%%/$d/;
- }
- if($$thing =~ s/%repeat\[(\d+) x (.*)\]%/%%REPEAT%%/i) {
- # decode %NN characters
- my ($d, $n) = ($2, $1);
- $d =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
- my $all = $d x $n;
- $$thing =~ s/%%REPEAT%%/$all/;
- }
-}
-
-my $prevupdate;
-sub subNewlines {
- my ($thing) = @_;
-
- # When curl is built with Hyper, it gets all response headers delivered as
- # name/value pairs and curl "invents" the newlines when it saves the
- # headers. Therefore, curl will always save headers with CRLF newlines
- # when built to use Hyper. By making sure we deliver all tests using CRLF
- # as well, all test comparisons will survive without knowing about this
- # little quirk.
-
- if(($$thing =~ /^HTTP\/(1.1|1.0|2) [1-5][^\x0d]*\z/) ||
- (($$thing =~ /^[a-z0-9_-]+: [^\x0d]*\z/i) &&
- # skip curl error messages
- ($$thing !~ /^curl: \(\d+\) /))) {
- # enforce CRLF newline
- $$thing =~ s/\x0a/\x0d\x0a/;
- $prevupdate = 1;
- }
- else {
- if(($$thing =~ /^\n\z/) && $prevupdate) {
- # if there's a blank link after a line we update, we hope it is
- # the empty line following headers
- $$thing =~ s/\x0a/\x0d\x0a/;
- }
- $prevupdate = 0;
- }
+sub displayserverfeatures {
+ logmsg sprintf("* Servers: %s", $stunnel?"SSL ":"");
+ logmsg sprintf("%s", $http_ipv6?"HTTP-IPv6 ":"");
+ logmsg sprintf("%s", $http_unix?"HTTP-unix ":"");
+ logmsg sprintf("%s\n", $ftp_ipv6?"FTP-IPv6 ":"");
+ logmsg "***************************************** \n";
}
#######################################################################
@@ -3578,82 +912,119 @@ sub timestampskippedevents {
}
}
-#
-# 'prepro' processes the input array and replaces %-variables in the array
-# etc. Returns the processed version of the array
-
-sub prepro {
- my $testnum = shift;
- my (@entiretest) = @_;
- my $show = 1;
- my @out;
- for my $s (@entiretest) {
- my $f = $s;
- if($s =~ /^ *%if (.*)/) {
- my $cond = $1;
- my $rev = 0;
-
- if($cond =~ /^!(.*)/) {
- $cond = $1;
- $rev = 1;
- }
- $rev ^= $feature{$cond} ? 1 : 0;
- $show = $rev;
- next;
- }
- elsif($s =~ /^ *%else/) {
- $show ^= 1;
- next;
- }
- elsif($s =~ /^ *%endif/) {
- $show = 1;
- next;
- }
- if($show) {
- subVariables(\$s, $testnum, "%");
- subBase64(\$s);
- subNewlines(\$s) if($has_hyper && ($keywords{"HTTP"} ||
- $keywords{"HTTPS"}));
- push @out, $s;
- }
+
+# Setup CI Test Run
+sub citest_starttestrun {
+ if(azure_check_environment()) {
+ $AZURE_RUN_ID = azure_create_test_run($ACURL);
+ logmsg "Azure Run ID: $AZURE_RUN_ID\n" if ($verbose);
+ }
+ # Appveyor doesn't require anything here
+}
+
+
+# Register the test case with the CI runner
+sub citest_starttest {
+ my $testnum = $_[0];
+
+ # get the name of the test early
+ my $testname= (getpart("client", "name"))[0];
+ chomp $testname;
+
+ # create test result in CI services
+ if(azure_check_environment() && $AZURE_RUN_ID) {
+ $AZURE_RESULT_ID = azure_create_test_result($ACURL, $AZURE_RUN_ID, $testnum, $testname);
+ }
+ elsif(appveyor_check_environment()) {
+ appveyor_create_test_result($ACURL, $testnum, $testname);
+ }
+}
+
+
+# Submit the test case result with the CI runner
+sub citest_finishtest {
+ my ($testnum, $error) = @_;
+ # update test result in CI services
+ if(azure_check_environment() && $AZURE_RUN_ID && $AZURE_RESULT_ID) {
+ $AZURE_RESULT_ID = azure_update_test_result($ACURL, $AZURE_RUN_ID, $AZURE_RESULT_ID, $testnum, $error,
+ $timeprepini{$testnum}, $timevrfyend{$testnum});
+ }
+ elsif(appveyor_check_environment()) {
+ appveyor_update_test_result($ACURL, $testnum, $error, $timeprepini{$testnum}, $timevrfyend{$testnum});
+ }
+}
+
+# Complete CI test run
+sub citest_finishtestrun {
+ if(azure_check_environment() && $AZURE_RUN_ID) {
+ $AZURE_RUN_ID = azure_update_test_run($ACURL, $AZURE_RUN_ID);
+ }
+ # Appveyor doesn't require anything here
+}
+
+
+# add one set of test timings from the runner to global set
+sub updatetesttimings {
+ my ($testnum, %testtimings)=@_;
+
+ if(defined $testtimings{"timeprepini"}) {
+ $timeprepini{$testnum} = $testtimings{"timeprepini"};
+ }
+ if(defined $testtimings{"timesrvrini"}) {
+ $timesrvrini{$testnum} = $testtimings{"timesrvrini"};
+ }
+ if(defined $testtimings{"timesrvrend"}) {
+ $timesrvrend{$testnum} = $testtimings{"timesrvrend"};
+ }
+ if(defined $testtimings{"timetoolini"}) {
+ $timetoolini{$testnum} = $testtimings{"timetoolini"};
+ }
+ if(defined $testtimings{"timetoolend"}) {
+ $timetoolend{$testnum} = $testtimings{"timetoolend"};
+ }
+ if(defined $testtimings{"timesrvrlog"}) {
+ $timesrvrlog{$testnum} = $testtimings{"timesrvrlog"};
}
- return @out;
}
+
#######################################################################
-# Run a single specified test case
-#
-sub singletest {
- my ($evbased, # 1 means switch on if possible (and "curl" is tested)
- # returns "not a test" if it can't be used for this test
- $testnum,
- $count,
- $total)=@_;
-
- my @what;
- my $why;
- my $cmd;
- my $disablevalgrind;
- my $errorreturncode = 1; # 1 means normal error, 2 means ignored error
+# Return the log directory for the given test runner
+sub getrunnernumlogdir {
+ my $runnernum = $_[0];
+ return $jobs > 1 ? "$LOGDIR/$runnernum" : $LOGDIR;
+}
- # fist, remove all lingering log files
- if(!cleardir($LOGDIR) && $clearlocks) {
- clearlocks($LOGDIR);
- cleardir($LOGDIR);
+#######################################################################
+# Return the log directory for the given test runner ID
+sub getrunnerlogdir {
+ my $runnerid = $_[0];
+ if($jobs <= 1) {
+ return $LOGDIR;
}
+ # TODO: speed up this O(n) operation
+ for my $runnernum (keys %runnerids) {
+ if($runnerid eq $runnerids{$runnernum}) {
+ return "$LOGDIR/$runnernum";
+ }
+ }
+ die "Internal error: runner ID $runnerid not found";
+}
- # copy test number to a global scope var, this allows
- # testnum checking when starting test harness servers.
- $testnumcheck = $testnum;
- # timestamp test preparation start
- $timeprepini{$testnum} = Time::HiRes::time();
+#######################################################################
+# Verify that this test case should be run
+sub singletest_shouldrun {
+ my $testnum = $_[0];
+ my $why; # why the test won't be run
+ my $errorreturncode = 1; # 1 means normal error, 2 means ignored error
+ my @what; # what features are needed
if($disttests !~ /test$testnum(\W|\z)/ ) {
logmsg "Warning: test$testnum not present in tests/data/Makefile.inc\n";
}
if($disabled{$testnum}) {
- if(!$run_disabeled) {
+ if(!$run_disabled) {
$why = "listed in DISABLED";
}
else {
@@ -3665,7 +1036,6 @@ sub singletest {
$errorreturncode = 2;
}
- # load the test case file definition
if(loadtest("${TESTDIR}/test${testnum}")) {
if($verbose) {
# this is not a test
@@ -3712,31 +1082,27 @@ sub singletest {
}
}
+ my @info_keywords;
if(!$why) {
- my @info_keywords = getpart("info", "keywords");
- my $match;
- my $k;
-
- # Clear the list of keywords from the last test
- %keywords = ();
+ @info_keywords = getpart("info", "keywords");
if(!$info_keywords[0]) {
$why = "missing the <keywords> section!";
}
- for $k (@info_keywords) {
+ my $match;
+ for my $k (@info_keywords) {
chomp $k;
if ($disabled_keywords{lc($k)}) {
$why = "disabled by keyword";
- } elsif ($enabled_keywords{lc($k)}) {
+ }
+ elsif ($enabled_keywords{lc($k)}) {
$match = 1;
}
if ($ignored_keywords{lc($k)}) {
logmsg "Warning: test$testnum result is ignored due to $k\n";
$errorreturncode = 2;
}
-
- $keywords{$k} = 1;
}
if(!$why && !$match && %enabled_keywords) {
@@ -3759,7 +1125,7 @@ sub singletest {
}
if (!$why && defined $custom_skip_reasons{keyword}) {
- foreach my $keyword (getpart("info", "keywords")) {
+ foreach my $keyword (@info_keywords) {
foreach my $keyword_skip_pattern (keys %{$custom_skip_reasons{keyword}}) {
if ($keyword =~ /$keyword_skip_pattern/i) {
$why = $custom_skip_reasons{keyword}{$keyword_skip_pattern};
@@ -3768,133 +1134,17 @@ sub singletest {
}
}
+ return ($why, $errorreturncode);
+}
- # test definition may instruct to (un)set environment vars
- # this is done this early, so that the precheck can use environment
- # variables and still bail out fine on errors
-
- # restore environment variables that were modified in a previous run
- foreach my $var (keys %oldenv) {
- if($oldenv{$var} eq 'notset') {
- delete $ENV{$var} if($ENV{$var});
- }
- else {
- $ENV{$var} = $oldenv{$var};
- }
- delete $oldenv{$var};
- }
-
- # get the name of the test early
- my @testname= getpart("client", "name");
- my $testname = $testname[0];
- $testname =~ s/\n//g;
-
- # create test result in CI services
- if(azure_check_environment() && $AZURE_RUN_ID) {
- $AZURE_RESULT_ID = azure_create_test_result($ACURL, $AZURE_RUN_ID, $testnum, $testname);
- }
- elsif(appveyor_check_environment()) {
- appveyor_create_test_result($ACURL, $testnum, $testname);
- }
-
- # remove test server commands file before servers are started/verified
- unlink($FTPDCMD) if(-f $FTPDCMD);
-
- # timestamp required servers verification start
- $timesrvrini{$testnum} = Time::HiRes::time();
-
- if(!$why) {
- $why = serverfortest($testnum);
- }
-
- # Save a preprocessed version of the entire test file. This allows more
- # "basic" test case readers to enjoy variable replacements.
- my @entiretest = fulltest();
- my $otest = "log/test$testnum";
-
- @entiretest = prepro($testnum, @entiretest);
-
- # save the new version
- open(D, ">$otest");
- foreach my $bytes (@entiretest) {
- print D pack('a*', $bytes) or die "Failed to print '$bytes': $!";
- }
- close(D);
-
- # in case the process changed the file, reload it
- loadtest("log/test${testnum}");
-
- # timestamp required servers verification end
- $timesrvrend{$testnum} = Time::HiRes::time();
-
- my @setenv = getpart("client", "setenv");
- if(@setenv) {
- foreach my $s (@setenv) {
- chomp $s;
- if($s =~ /([^=]*)=(.*)/) {
- my ($var, $content) = ($1, $2);
- # remember current setting, to restore it once test runs
- $oldenv{$var} = ($ENV{$var})?"$ENV{$var}":'notset';
- # set new value
- if(!$content) {
- delete $ENV{$var} if($ENV{$var});
- }
- else {
- if($var =~ /^LD_PRELOAD/) {
- if(exe_ext('TOOL') && (exe_ext('TOOL') eq '.exe')) {
- # print "Skipping LD_PRELOAD due to lack of OS support\n";
- next;
- }
- if($debug_build || ($has_shared ne "yes")) {
- # print "Skipping LD_PRELOAD due to no release shared build\n";
- next;
- }
- }
- $ENV{$var} = "$content";
- print "setenv $var = $content\n" if($verbose);
- }
- }
- }
- }
- if($use_external_proxy) {
- $ENV{http_proxy} = $proxy_address;
- $ENV{HTTPS_PROXY} = $proxy_address;
- }
-
- if(!$why) {
- my @precheck = getpart("client", "precheck");
- if(@precheck) {
- $cmd = $precheck[0];
- chomp $cmd;
- if($cmd) {
- my @p = split(/ /, $cmd);
- if($p[0] !~ /\//) {
- # the first word, the command, does not contain a slash so
- # we will scan the "improved" PATH to find the command to
- # be able to run it
- my $fullp = checktestcmd($p[0]);
-
- if($fullp) {
- $p[0] = $fullp;
- }
- $cmd = join(" ", @p);
- }
- my @o = `$cmd 2>log/precheck-$testnum`;
- if($o[0]) {
- $why = $o[0];
- chomp $why;
- } elsif($?) {
- $why = "precheck command error";
- }
- logmsg "prechecked $cmd\n" if($verbose);
- }
- }
- }
+#######################################################################
+# Print the test name and count tests
+sub singletest_count {
+ my ($testnum, $why) = @_;
if($why && !$listonly) {
# there's a problem, count it as "skipped"
- $skipped++;
$skipped{$why}++;
$teststat[$testnum]=$why; # store reason for this test case
@@ -3908,472 +1158,62 @@ sub singletest {
timestampskippedevents($testnum);
return -1;
}
- logmsg sprintf("test %04d...", $testnum) if(!$automakestyle);
- my %replyattr = getpartattr("reply", "data");
- my @reply;
- if (partexists("reply", "datacheck")) {
- for my $partsuffix (('', '1', '2', '3', '4')) {
- my @replycheckpart = getpart("reply", "datacheck".$partsuffix);
- if(@replycheckpart) {
- my %replycheckpartattr = getpartattr("reply", "datacheck".$partsuffix);
- # get the mode attribute
- my $filemode=$replycheckpartattr{'mode'};
- if($filemode && ($filemode eq "text") && $has_textaware) {
- # text mode when running on windows: fix line endings
- map s/\r\n/\n/g, @replycheckpart;
- map s/\n/\r\n/g, @replycheckpart;
- }
- if($replycheckpartattr{'nonewline'}) {
- # Yes, we must cut off the final newline from the final line
- # of the datacheck
- chomp($replycheckpart[$#replycheckpart]);
- }
- push(@reply, @replycheckpart);
- }
- }
- }
- else {
- # check against the data section
- @reply = getpart("reply", "data");
- if(@reply) {
- my %hash = getpartattr("reply", "data");
- if($hash{'nonewline'}) {
- # cut off the final newline from the final line of the data
- chomp($reply[$#reply]);
- }
- }
- # get the mode attribute
- my $filemode=$replyattr{'mode'};
- if($filemode && ($filemode eq "text") && $has_textaware) {
- # text mode when running on windows: fix line endings
- map s/\r\n/\n/g, @reply;
- map s/\n/\r\n/g, @reply;
- }
- }
-
- # this is the valid protocol blurb curl should generate
- my @protocol= getpart("verify", "protocol");
-
- # this is the valid protocol blurb curl should generate to a proxy
- my @proxyprot = getpart("verify", "proxy");
-
- # redirected stdout/stderr to these files
- $STDOUT="$LOGDIR/stdout$testnum";
- $STDERR="$LOGDIR/stderr$testnum";
-
- # if this section exists, we verify that the stdout contained this:
- my @validstdout = getpart("verify", "stdout");
- my @validstderr = getpart("verify", "stderr");
-
- # if this section exists, we verify upload
- my @upload = getpart("verify", "upload");
- if(@upload) {
- my %hash = getpartattr("verify", "upload");
- if($hash{'nonewline'}) {
- # cut off the final newline from the final line of the upload data
- chomp($upload[$#upload]);
- }
- }
-
- # if this section exists, it might be FTP server instructions:
- my @ftpservercmd = getpart("reply", "servercmd");
-
- my $CURLOUT="$LOGDIR/curl$testnum.out"; # curl output if not stdout
+ # At this point we've committed to run this test
+ logmsg sprintf("test %04d...", $testnum) if(!$automakestyle);
# name of the test
+ my $testname= (getpart("client", "name"))[0];
+ chomp $testname;
logmsg "[$testname]\n" if(!$short);
if($listonly) {
timestampskippedevents($testnum);
- return 0; # look successful
- }
-
- my @codepieces = getpart("client", "tool");
-
- my $tool="";
- if(@codepieces) {
- $tool = $codepieces[0];
- chomp $tool;
- $tool .= exe_ext('TOOL');
- }
-
- # remove server output logfile
- unlink($SERVERIN);
- unlink($SERVER2IN);
- unlink($PROXYIN);
-
- push @ftpservercmd, "Testnum $testnum\n";
- # write the instructions to file
- writearray($FTPDCMD, \@ftpservercmd);
-
- # get the command line options to use
- my @blaha;
- ($cmd, @blaha)= getpart("client", "command");
-
- if($cmd) {
- # make some nice replace operations
- $cmd =~ s/\n//g; # no newlines please
- # substitute variables in the command line
- }
- else {
- # there was no command given, use something silly
- $cmd="-";
- }
- if($has_memory_tracking) {
- unlink($memdump);
- }
-
- # create (possibly-empty) files before starting the test
- for my $partsuffix (('', '1', '2', '3', '4')) {
- my @inputfile=getpart("client", "file".$partsuffix);
- my %fileattr = getpartattr("client", "file".$partsuffix);
- my $filename=$fileattr{'name'};
- if(@inputfile || $filename) {
- if(!$filename) {
- logmsg "ERROR: section client=>file has no name attribute\n";
- timestampskippedevents($testnum);
- return -1;
- }
- my $fileContent = join('', @inputfile);
-
- # make directories if needed
- my $path = $filename;
- # cut off the file name part
- $path =~ s/^(.*)\/[^\/]*/$1/;
- my @parts = split(/\//, $path);
- if($parts[0] eq "log") {
- # the file is in log/
- my $d = shift @parts;
- for(@parts) {
- $d .= "/$_";
- mkdir $d; # 0777
- }
- }
- open(OUTFILE, ">$filename");
- binmode OUTFILE; # for crapage systems, use binary
- if($fileattr{'nonewline'}) {
- # cut off the final newline
- chomp($fileContent);
- }
- print OUTFILE $fileContent;
- close(OUTFILE);
- }
- }
-
- my %cmdhash = getpartattr("client", "command");
-
- my $out="";
-
- if((!$cmdhash{'option'}) || ($cmdhash{'option'} !~ /no-output/)) {
- #We may slap on --output!
- if (!@validstdout ||
- ($cmdhash{'option'} && $cmdhash{'option'} =~ /force-output/)) {
- $out=" --output $CURLOUT ";
- }
- }
-
- my $serverlogslocktimeout = $defserverlogslocktimeout;
- if($cmdhash{'timeout'}) {
- # test is allowed to override default server logs lock timeout
- if($cmdhash{'timeout'} =~ /(\d+)/) {
- $serverlogslocktimeout = $1 if($1 >= 0);
- }
- }
-
- my $postcommanddelay = $defpostcommanddelay;
- if($cmdhash{'delay'}) {
- # test is allowed to specify a delay after command is executed
- if($cmdhash{'delay'} =~ /(\d+)/) {
- $postcommanddelay = $1 if($1 > 0);
- }
- }
-
- my $CMDLINE;
- my $cmdargs;
- my $cmdtype = $cmdhash{'type'} || "default";
- my $fail_due_event_based = $evbased;
- if($cmdtype eq "perl") {
- # run the command line prepended with "perl"
- $cmdargs ="$cmd";
- $CMDLINE = "$perl ";
- $tool=$CMDLINE;
- $disablevalgrind=1;
- }
- elsif($cmdtype eq "shell") {
- # run the command line prepended with "/bin/sh"
- $cmdargs ="$cmd";
- $CMDLINE = "/bin/sh ";
- $tool=$CMDLINE;
- $disablevalgrind=1;
- }
- elsif(!$tool && !$keywords{"unittest"}) {
- # run curl, add suitable command line options
- my $inc="";
- if((!$cmdhash{'option'}) || ($cmdhash{'option'} !~ /no-include/)) {
- $inc = " --include";
- }
- $cmdargs = "$out$inc ";
-
- if($cmdhash{'option'} && ($cmdhash{'option'} =~ /binary-trace/)) {
- $cmdargs .= "--trace log/trace$testnum ";
- }
- else {
- $cmdargs .= "--trace-ascii log/trace$testnum ";
- }
- $cmdargs .= "--trace-time ";
- if($evbased) {
- $cmdargs .= "--test-event ";
- $fail_due_event_based--;
- }
- $cmdargs .= $cmd;
- if ($use_external_proxy) {
- $cmdargs .= " --proxy $proxy_address ";
- }
- }
- else {
- $cmdargs = " $cmd"; # $cmd is the command line for the test file
- $CURLOUT = $STDOUT; # sends received data to stdout
-
- # Default the tool to a unit test with the same name as the test spec
- if($keywords{"unittest"} && !$tool) {
- $tool="unit$testnum";
- }
-
- if($tool =~ /^lib/) {
- $CMDLINE="$LIBDIR/$tool";
- }
- elsif($tool =~ /^unit/) {
- $CMDLINE="$UNITDIR/$tool";
- }
-
- if(! -f $CMDLINE) {
- logmsg "The tool set in the test case for this: '$tool' does not exist\n";
- timestampskippedevents($testnum);
- return -1;
- }
- $DBGCURL=$CMDLINE;
- }
-
- if($fail_due_event_based) {
- logmsg "This test cannot run event based\n";
- timestampskippedevents($testnum);
- return -1;
- }
-
- if($gdbthis) {
- # gdb is incompatible with valgrind, so disable it when debugging
- # Perhaps a better approach would be to run it under valgrind anyway
- # with --db-attach=yes or --vgdb=yes.
- $disablevalgrind=1;
- }
-
- my @stdintest = getpart("client", "stdin");
-
- if(@stdintest) {
- my $stdinfile="$LOGDIR/stdin-for-$testnum";
-
- my %hash = getpartattr("client", "stdin");
- if($hash{'nonewline'}) {
- # cut off the final newline from the final line of the stdin data
- chomp($stdintest[$#stdintest]);
- }
-
- writearray($stdinfile, \@stdintest);
-
- $cmdargs .= " <$stdinfile";
- }
-
- if(!$tool) {
- $CMDLINE="$CURL";
- }
-
- my $usevalgrind;
- if($valgrind && !$disablevalgrind) {
- my @valgrindoption = getpart("verify", "valgrind");
- if((!@valgrindoption) || ($valgrindoption[0] !~ /disable/)) {
- $usevalgrind = 1;
- my $valgrindcmd = "$valgrind ";
- $valgrindcmd .= "$valgrind_tool " if($valgrind_tool);
- $valgrindcmd .= "--quiet --leak-check=yes ";
- $valgrindcmd .= "--suppressions=$srcdir/valgrind.supp ";
- # $valgrindcmd .= "--gen-suppressions=all ";
- $valgrindcmd .= "--num-callers=16 ";
- $valgrindcmd .= "${valgrind_logfile}=$LOGDIR/valgrind$testnum";
- $CMDLINE = "$valgrindcmd $CMDLINE";
- }
- }
-
- $CMDLINE .= "$cmdargs >$STDOUT 2>$STDERR";
-
- if($verbose) {
- logmsg "$CMDLINE\n";
- }
-
- open(CMDLOG, ">", "$LOGDIR/$CURLLOG");
- print CMDLOG "$CMDLINE\n";
- close(CMDLOG);
-
- unlink("core");
-
- my $dumped_core;
- my $cmdres;
-
- if($gdbthis) {
- my $gdbinit = "$TESTDIR/gdbinit$testnum";
- open(GDBCMD, ">$LOGDIR/gdbcmd");
- print GDBCMD "set args $cmdargs\n";
- print GDBCMD "show args\n";
- print GDBCMD "source $gdbinit\n" if -e $gdbinit;
- close(GDBCMD);
- }
-
- # Flush output.
- $| = 1;
-
- # timestamp starting of test command
- $timetoolini{$testnum} = Time::HiRes::time();
-
- # run the command line we built
- if ($torture) {
- $cmdres = torture($CMDLINE,
- $testnum,
- "$gdb --directory $LIBDIR $DBGCURL -x $LOGDIR/gdbcmd");
- }
- elsif($gdbthis) {
- my $GDBW = ($gdbxwin) ? "-w" : "";
- runclient("$gdb --directory $LIBDIR $DBGCURL $GDBW -x $LOGDIR/gdbcmd");
- $cmdres=0; # makes it always continue after a debugged run
- }
- else {
- $cmdres = runclient("$CMDLINE");
- my $signal_num = $cmdres & 127;
- $dumped_core = $cmdres & 128;
-
- if(!$anyway && ($signal_num || $dumped_core)) {
- $cmdres = 1000;
- }
- else {
- $cmdres >>= 8;
- $cmdres = (2000 + $signal_num) if($signal_num && !$cmdres);
- }
- }
-
- # timestamp finishing of test command
- $timetoolend{$testnum} = Time::HiRes::time();
-
- if(!$dumped_core) {
- if(-r "core") {
- # there's core file present now!
- $dumped_core = 1;
- }
- }
-
- if($dumped_core) {
- logmsg "core dumped\n";
- if(0 && $gdb) {
- logmsg "running gdb for post-mortem analysis:\n";
- open(GDBCMD, ">$LOGDIR/gdbcmd2");
- print GDBCMD "bt\n";
- close(GDBCMD);
- runclient("$gdb --directory libtest -x $LOGDIR/gdbcmd2 -batch $DBGCURL core ");
- # unlink("$LOGDIR/gdbcmd2");
- }
- }
-
- # If a server logs advisor read lock file exists, it is an indication
- # that the server has not yet finished writing out all its log files,
- # including server request log files used for protocol verification.
- # So, if the lock file exists the script waits here a certain amount
- # of time until the server removes it, or the given time expires.
-
- if($serverlogslocktimeout) {
- my $lockretry = $serverlogslocktimeout * 20;
- while((-f $SERVERLOGS_LOCK) && $lockretry--) {
- portable_sleep(0.05);
- }
- if(($lockretry < 0) &&
- ($serverlogslocktimeout >= $defserverlogslocktimeout)) {
- logmsg "Warning: server logs lock timeout ",
- "($serverlogslocktimeout seconds) expired\n";
- }
- }
-
- # Test harness ssh server does not have this synchronization mechanism,
- # this implies that some ssh server based tests might need a small delay
- # once that the client command has run to avoid false test failures.
- #
- # gnutls-serv also lacks this synchronization mechanism, so gnutls-serv
- # based tests might need a small delay once that the client command has
- # run to avoid false test failures.
-
- portable_sleep($postcommanddelay) if($postcommanddelay);
-
- # timestamp removal of server logs advisor read lock
- $timesrvrlog{$testnum} = Time::HiRes::time();
-
- # test definition might instruct to stop some servers
- # stop also all servers relative to the given one
-
- my @killtestservers = getpart("client", "killserver");
- if(@killtestservers) {
- foreach my $server (@killtestservers) {
- chomp $server;
- if(stopserver($server)) {
- return 1; # normal error if asked to fail on unexpected alive
- }
- }
}
+ return 0;
+}
- # run the postcheck command
- my @postcheck= getpart("client", "postcheck");
- if(@postcheck) {
- $cmd = join("", @postcheck);
- chomp $cmd;
- if($cmd) {
- logmsg "postcheck $cmd\n" if($verbose);
- my $rc = runclient("$cmd");
- # Must run the postcheck command in torture mode in order
- # to clean up, but the result can't be relied upon.
- if($rc != 0 && !$torture) {
- logmsg " postcheck FAILED\n";
- # timestamp test result verification end
- $timevrfyend{$testnum} = Time::HiRes::time();
- return $errorreturncode;
- }
- }
- }
- # restore environment variables that were modified
- if(%oldenv) {
- foreach my $var (keys %oldenv) {
- if($oldenv{$var} eq 'notset') {
- delete $ENV{$var} if($ENV{$var});
- }
- else {
- $ENV{$var} = "$oldenv{$var}";
- }
- }
- }
+#######################################################################
+# Verify test succeeded
+sub singletest_check {
+ my ($runnerid, $testnum, $cmdres, $CURLOUT, $tool, $usedvalgrind)=@_;
# Skip all the verification on torture tests
if ($torture) {
# timestamp test result verification end
$timevrfyend{$testnum} = Time::HiRes::time();
- return $cmdres;
+ return -2;
}
+ my $logdir = getrunnerlogdir($runnerid);
my @err = getpart("verify", "errorcode");
my $errorcode = $err[0] || "0";
my $ok="";
my $res;
chomp $errorcode;
+ my $testname= (getpart("client", "name"))[0];
+ chomp $testname;
+ # what parts to cut off from stdout/stderr
+ my @stripfile = getpart("verify", "stripfile");
+
+ my @validstdout = getpart("verify", "stdout");
+ # get all attributes
+ my %hash = getpartattr("verify", "stdout");
+
+ my $loadfile = $hash{'loadfile'};
+ if ($loadfile) {
+ open(my $tmp, "<", "$loadfile") || die "Cannot open file $loadfile: $!";
+ @validstdout = <$tmp>;
+ close($tmp);
+
+ # Enforce LF newlines on load
+ s/\r\n/\n/g for @validstdout;
+ }
+
if (@validstdout) {
# verify redirected stdout
- my @actual = loadarray($STDOUT);
-
- # what parts to cut off from stdout
- my @stripfile = getpart("verify", "stripfile");
+ my @actual = loadarray(stdoutfilename($logdir, $testnum));
foreach my $strip (@stripfile) {
chomp $strip;
@@ -4389,26 +1229,29 @@ sub singletest {
@actual = @newgen;
}
- # get all attributes
- my %hash = getpartattr("verify", "stdout");
-
# get the mode attribute
my $filemode=$hash{'mode'};
if($filemode && ($filemode eq "text") && $has_textaware) {
# text mode when running on windows: fix line endings
- map s/\r\n/\n/g, @validstdout;
- map s/\n/\r\n/g, @validstdout;
+ s/\r\n/\n/g for @validstdout;
+ s/\n/\r\n/g for @validstdout;
}
if($hash{'nonewline'}) {
# Yes, we must cut off the final newline from the final line
# of the protocol data
- chomp($validstdout[$#validstdout]);
+ chomp($validstdout[-1]);
+ }
+
+ if($hash{'crlf'} ||
+ ($feature{"hyper"} && ($keywords{"HTTP"}
+ || $keywords{"HTTPS"}))) {
+ subnewlines(0, \$_) for @validstdout;
}
- $res = compare($testnum, $testname, "stdout", \@actual, \@validstdout);
+ $res = compare($runnerid, $testnum, $testname, "stdout", \@actual, \@validstdout);
if($res) {
- return $errorreturncode;
+ return -1;
}
$ok .= "s";
}
@@ -4416,12 +1259,10 @@ sub singletest {
$ok .= "-"; # stdout not checked
}
+ my @validstderr = getpart("verify", "stderr");
if (@validstderr) {
# verify redirected stderr
- my @actual = loadarray($STDERR);
-
- # what parts to cut off from stderr
- my @stripfile = getpart("verify", "stripfile");
+ my @actual = loadarray(stderrfilename($logdir, $testnum));
foreach my $strip (@stripfile) {
chomp $strip;
@@ -4442,27 +1283,27 @@ sub singletest {
# get the mode attribute
my $filemode=$hash{'mode'};
- if($filemode && ($filemode eq "text") && $has_hyper) {
+ if($filemode && ($filemode eq "text") && $feature{"hyper"}) {
# text mode check in hyper-mode. Sometimes necessary if the stderr
# data *looks* like HTTP and thus has gotten CRLF newlines
# mistakenly
- map s/\r\n/\n/g, @validstderr;
+ s/\r\n/\n/g for @validstderr;
}
if($filemode && ($filemode eq "text") && $has_textaware) {
# text mode when running on windows: fix line endings
- map s/\r\n/\n/g, @validstderr;
- map s/\n/\r\n/g, @validstderr;
+ s/\r\n/\n/g for @validstderr;
+ s/\n/\r\n/g for @validstderr;
}
if($hash{'nonewline'}) {
# Yes, we must cut off the final newline from the final line
# of the protocol data
- chomp($validstderr[$#validstderr]);
+ chomp($validstderr[-1]);
}
- $res = compare($testnum, $testname, "stderr", \@actual, \@validstderr);
+ $res = compare($runnerid, $testnum, $testname, "stderr", \@actual, \@validstderr);
if($res) {
- return $errorreturncode;
+ return -1;
}
$ok .= "r";
}
@@ -4470,14 +1311,17 @@ sub singletest {
$ok .= "-"; # stderr not checked
}
- if(@protocol) {
- # Verify the sent request
- my @out = loadarray($SERVERIN);
+ # what to cut off from the live protocol sent by curl
+ my @strip = getpart("verify", "strip");
- # what to cut off from the live protocol sent by curl
- my @strip = getpart("verify", "strip");
+ # what parts to cut off from the protocol & upload
+ my @strippart = getpart("verify", "strippart");
- my @protstrip=@protocol;
+ # this is the valid protocol blurb curl should generate
+ my @protocol= getpart("verify", "protocol");
+ if(@protocol) {
+ # Verify the sent request
+ my @out = loadarray("$logdir/$SERVERIN");
# check if there's any attributes on the verify/protocol section
my %hash = getpartattr("verify", "protocol");
@@ -4485,37 +1329,39 @@ sub singletest {
if($hash{'nonewline'}) {
# Yes, we must cut off the final newline from the final line
# of the protocol data
- chomp($protstrip[$#protstrip]);
+ chomp($protocol[-1]);
}
for(@strip) {
# strip off all lines that match the patterns from both arrays
chomp $_;
@out = striparray( $_, \@out);
- @protstrip= striparray( $_, \@protstrip);
+ @protocol= striparray( $_, \@protocol);
}
- # what parts to cut off from the protocol
- my @strippart = getpart("verify", "strippart");
- my $strip;
-
- for $strip (@strippart) {
+ for my $strip (@strippart) {
chomp $strip;
for(@out) {
eval $strip;
}
}
- if((!$out[0] || ($out[0] eq "")) && $protstrip[0]) {
+ if($hash{'crlf'}) {
+ subnewlines(1, \$_) for @protocol;
+ }
+
+ if((!$out[0] || ($out[0] eq "")) && $protocol[0]) {
logmsg "\n $testnum: protocol FAILED!\n".
- " There was no content at all in the file $SERVERIN.\n".
+ " There was no content at all in the file $logdir/$SERVERIN.\n".
" Server glitch? Total curl failure? Returned: $cmdres\n";
- return $errorreturncode;
+ # timestamp test result verification end
+ $timevrfyend{$testnum} = Time::HiRes::time();
+ return -1;
}
- $res = compare($testnum, $testname, "protocol", \@out, \@protstrip);
+ $res = compare($runnerid, $testnum, $testname, "protocol", \@out, \@protocol);
if($res) {
- return $errorreturncode;
+ return -1;
}
$ok .= "p";
@@ -4525,12 +1371,63 @@ sub singletest {
$ok .= "-"; # protocol not checked
}
+ my %replyattr = getpartattr("reply", "data");
+ my @reply;
+ if (partexists("reply", "datacheck")) {
+ for my $partsuffix (('', '1', '2', '3', '4')) {
+ my @replycheckpart = getpart("reply", "datacheck".$partsuffix);
+ if(@replycheckpart) {
+ my %replycheckpartattr = getpartattr("reply", "datacheck".$partsuffix);
+ # get the mode attribute
+ my $filemode=$replycheckpartattr{'mode'};
+ if($filemode && ($filemode eq "text") && $has_textaware) {
+ # text mode when running on windows: fix line endings
+ s/\r\n/\n/g for @replycheckpart;
+ s/\n/\r\n/g for @replycheckpart;
+ }
+ if($replycheckpartattr{'nonewline'}) {
+ # Yes, we must cut off the final newline from the final line
+ # of the datacheck
+ chomp($replycheckpart[-1]);
+ }
+ if($replycheckpartattr{'crlf'} ||
+ ($feature{"hyper"} && ($keywords{"HTTP"}
+ || $keywords{"HTTPS"}))) {
+ subnewlines(0, \$_) for @replycheckpart;
+ }
+ push(@reply, @replycheckpart);
+ }
+ }
+ }
+ else {
+ # check against the data section
+ @reply = getpart("reply", "data");
+ if(@reply) {
+ if($replyattr{'nonewline'}) {
+ # cut off the final newline from the final line of the data
+ chomp($reply[-1]);
+ }
+ }
+ # get the mode attribute
+ my $filemode=$replyattr{'mode'};
+ if($filemode && ($filemode eq "text") && $has_textaware) {
+ # text mode when running on windows: fix line endings
+ s/\r\n/\n/g for @reply;
+ s/\n/\r\n/g for @reply;
+ }
+ if($replyattr{'crlf'} ||
+ ($feature{"hyper"} && ($keywords{"HTTP"}
+ || $keywords{"HTTPS"}))) {
+ subnewlines(0, \$_) for @reply;
+ }
+ }
+
if(!$replyattr{'nocheck'} && (@reply || $replyattr{'sendzero'})) {
# verify the received data
my @out = loadarray($CURLOUT);
- $res = compare($testnum, $testname, "data", \@out, \@reply);
+ $res = compare($runnerid, $testnum, $testname, "data", \@out, \@reply);
if ($res) {
- return $errorreturncode;
+ return -1;
}
$ok .= "d";
}
@@ -4538,23 +1435,27 @@ sub singletest {
$ok .= "-"; # data not checked
}
+ # if this section exists, we verify upload
+ my @upload = getpart("verify", "upload");
if(@upload) {
- # verify uploaded data
- my @out = loadarray("$LOGDIR/upload.$testnum");
+ my %hash = getpartattr("verify", "upload");
+ if($hash{'nonewline'}) {
+ # cut off the final newline from the final line of the upload data
+ chomp($upload[-1]);
+ }
- # what parts to cut off from the upload
- my @strippart = getpart("verify", "strippart");
- my $strip;
- for $strip (@strippart) {
+ # verify uploaded data
+ my @out = loadarray("$logdir/upload.$testnum");
+ for my $strip (@strippart) {
chomp $strip;
for(@out) {
eval $strip;
}
}
- $res = compare($testnum, $testname, "upload", \@out, \@upload);
+ $res = compare($runnerid, $testnum, $testname, "upload", \@out, \@upload);
if ($res) {
- return $errorreturncode;
+ return -1;
}
$ok .= "u";
}
@@ -4562,52 +1463,49 @@ sub singletest {
$ok .= "-"; # upload not checked
}
+ # this is the valid protocol blurb curl should generate to a proxy
+ my @proxyprot = getpart("verify", "proxy");
if(@proxyprot) {
# Verify the sent proxy request
- my @out = loadarray($PROXYIN);
-
- # what to cut off from the live protocol sent by curl, we use the
- # same rules as for <protocol>
- my @strip = getpart("verify", "strip");
-
- my @protstrip=@proxyprot;
-
# check if there's any attributes on the verify/protocol section
my %hash = getpartattr("verify", "proxy");
if($hash{'nonewline'}) {
# Yes, we must cut off the final newline from the final line
# of the protocol data
- chomp($protstrip[$#protstrip]);
+ chomp($proxyprot[-1]);
}
+ my @out = loadarray("$logdir/$PROXYIN");
for(@strip) {
# strip off all lines that match the patterns from both arrays
chomp $_;
@out = striparray( $_, \@out);
- @protstrip= striparray( $_, \@protstrip);
+ @proxyprot= striparray( $_, \@proxyprot);
}
- # what parts to cut off from the protocol
- my @strippart = getpart("verify", "strippart");
- my $strip;
- for $strip (@strippart) {
+ for my $strip (@strippart) {
chomp $strip;
for(@out) {
eval $strip;
}
}
- $res = compare($testnum, $testname, "proxy", \@out, \@protstrip);
+ if($hash{'crlf'} ||
+ ($feature{"hyper"} && ($keywords{"HTTP"} || $keywords{"HTTPS"}))) {
+ subnewlines(0, \$_) for @proxyprot;
+ }
+
+ $res = compare($runnerid, $testnum, $testname, "proxy", \@out, \@proxyprot);
if($res) {
- return $errorreturncode;
+ return -1;
}
$ok .= "P";
}
else {
- $ok .= "-"; # protocol not checked
+ $ok .= "-"; # proxy not checked
}
my $outputok;
@@ -4619,9 +1517,25 @@ sub singletest {
my $filename=$hash{'name'};
if(!$filename) {
- logmsg "ERROR: section verify=>file$partsuffix ".
+ logmsg " $testnum: IGNORED: section verify=>file$partsuffix ".
"has no name attribute\n";
- stopservers($verbose);
+ if (runnerac_stopservers($runnerid)) {
+ logmsg "ERROR: runner $runnerid seems to have died\n";
+ } else {
+
+ # TODO: this is a blocking call that will stall the controller,
+ if($verbose) {
+ logmsg "WARNING: blocking call in async function\n";
+ }
+ # but this error condition should never happen except during
+ # development.
+ my ($rid, $unexpected, $logs) = runnerar($runnerid);
+ if(!$rid) {
+ logmsg "ERROR: runner $runnerid seems to have died\n";
+ } else {
+ logmsg $logs;
+ }
+ }
# timestamp test result verification end
$timevrfyend{$testnum} = Time::HiRes::time();
return -1;
@@ -4629,17 +1543,21 @@ sub singletest {
my @generated=loadarray($filename);
# what parts to cut off from the file
- my @stripfile = getpart("verify", "stripfile".$partsuffix);
+ my @stripfilepar = getpart("verify", "stripfile".$partsuffix);
my $filemode=$hash{'mode'};
if($filemode && ($filemode eq "text") && $has_textaware) {
# text mode when running on windows: fix line endings
- map s/\r\n/\n/g, @outfile;
- map s/\n/\r\n/g, @outfile;
+ s/\r\n/\n/g for @outfile;
+ s/\n/\r\n/g for @outfile;
+ }
+ if($hash{'crlf'} ||
+ ($feature{"hyper"} && ($keywords{"HTTP"}
+ || $keywords{"HTTPS"}))) {
+ subnewlines(0, \$_) for @outfile;
}
- my $strip;
- for $strip (@stripfile) {
+ for my $strip (@stripfilepar) {
chomp $strip;
my @newgen;
for(@generated) {
@@ -4653,10 +1571,16 @@ sub singletest {
@generated = @newgen;
}
- $res = compare($testnum, $testname, "output ($filename)",
+ if($hash{'nonewline'}) {
+ # cut off the final newline from the final line of the
+ # output data
+ chomp($outfile[-1]);
+ }
+
+ $res = compare($runnerid, $testnum, $testname, "output ($filename)",
\@generated, \@outfile);
if($res) {
- return $errorreturncode;
+ return -1;
}
$outputok = 1; # output checked
@@ -4668,10 +1592,10 @@ sub singletest {
my @socksprot = getpart("verify", "socks");
if(@socksprot) {
# Verify the sent SOCKS proxy details
- my @out = loadarray($SOCKSIN);
- $res = compare($testnum, $testname, "socks", \@out, \@socksprot);
+ my @out = loadarray("$logdir/$SOCKSIN");
+ $res = compare($runnerid, $testnum, $testname, "socks", \@out, \@socksprot);
if($res) {
- return $errorreturncode;
+ return -1;
}
}
@@ -4694,19 +1618,22 @@ sub singletest {
logmsg sprintf("\n%s returned $cmdres, when expecting %s\n",
(!$tool)?"curl":$tool, $errorcode);
}
- logmsg " exit FAILED\n";
+ logmsg " $testnum: exit FAILED\n";
# timestamp test result verification end
$timevrfyend{$testnum} = Time::HiRes::time();
- return $errorreturncode;
+ return -1;
}
- if($has_memory_tracking) {
- if(! -f $memdump) {
+ if($feature{"TrackMemory"}) {
+ if(! -f "$logdir/$MEMDUMP") {
+ my %cmdhash = getpartattr("client", "command");
+ my $cmdtype = $cmdhash{'type'} || "default";
logmsg "\n** ALERT! memory tracking with no output file?\n"
if(!$cmdtype eq "perl");
+ $ok .= "-"; # problem with memory checking
}
else {
- my @memdata=`$memanalyze $memdump`;
+ my @memdata=`$memanalyze "$logdir/$MEMDUMP"`;
my $leak=0;
for(@memdata) {
if($_ ne "") {
@@ -4720,7 +1647,7 @@ sub singletest {
logmsg @memdata;
# timestamp test result verification end
$timevrfyend{$testnum} = Time::HiRes::time();
- return $errorreturncode;
+ return -1;
}
else {
$ok .= "m";
@@ -4732,12 +1659,12 @@ sub singletest {
}
if($valgrind) {
- if($usevalgrind) {
- unless(opendir(DIR, "$LOGDIR")) {
- logmsg "ERROR: unable to read $LOGDIR\n";
+ if($usedvalgrind) {
+ if(!opendir(DIR, "$logdir")) {
+ logmsg "ERROR: unable to read $logdir\n";
# timestamp test result verification end
$timevrfyend{$testnum} = Time::HiRes::time();
- return $errorreturncode;
+ return -1;
}
my @files = readdir(DIR);
closedir(DIR);
@@ -4752,9 +1679,9 @@ sub singletest {
logmsg "ERROR: valgrind log file missing for test $testnum\n";
# timestamp test result verification end
$timevrfyend{$testnum} = Time::HiRes::time();
- return $errorreturncode;
+ return -1;
}
- my @e = valgrindparse("$LOGDIR/$vgfile");
+ my @e = valgrindparse("$logdir/$vgfile");
if(@e && $e[0]) {
if($automakestyle) {
logmsg "FAIL: $testnum - $testname - valgrind\n";
@@ -4765,12 +1692,12 @@ sub singletest {
}
# timestamp test result verification end
$timevrfyend{$testnum} = Time::HiRes::time();
- return $errorreturncode;
+ return -1;
}
$ok .= "v";
}
else {
- if($verbose && !$disablevalgrind) {
+ if($verbose) {
logmsg " valgrind SKIPPED\n";
}
$ok .= "-"; # skipped
@@ -4780,17 +1707,26 @@ sub singletest {
$ok .= "-"; # valgrind not checked
}
# add 'E' for event-based
- $ok .= $evbased ? "E" : "-";
+ $ok .= $run_event_based ? "E" : "-";
logmsg "$ok " if(!$short);
# timestamp test result verification end
$timevrfyend{$testnum} = Time::HiRes::time();
+ return 0;
+}
+
+
+#######################################################################
+# Report a successful test
+sub singletest_success {
+ my ($testnum, $count, $total, $errorreturncode)=@_;
+
my $sofar= time()-$start;
my $esttotal = $sofar/$count * $total;
my $estleft = $esttotal - $sofar;
- my $left=sprintf("remaining: %02d:%02d",
+ my $timeleft=sprintf("remaining: %02d:%02d",
$estleft/60,
$estleft%60);
my $took = $timevrfyend{$testnum} - $timeprepini{$testnum};
@@ -4798,636 +1734,223 @@ sub singletest {
$sofar/60, $sofar%60);
if(!$automakestyle) {
logmsg sprintf("OK (%-3d out of %-3d, %s, took %.3fs, %s)\n",
- $count, $total, $left, $took, $duration);
+ $count, $total, $timeleft, $took, $duration);
}
else {
+ my $testname= (getpart("client", "name"))[0];
+ chomp $testname;
logmsg "PASS: $testnum - $testname\n";
}
if($errorreturncode==2) {
logmsg "Warning: test$testnum result is ignored, but passed!\n";
}
-
- return 0;
-}
-
-#######################################################################
-# Stop all running test servers
-#
-sub stopservers {
- my $verbose = $_[0];
- #
- # kill sockfilter processes for all pingpong servers
- #
- killallsockfilters($verbose);
- #
- # kill all server pids from %run hash clearing them
- #
- my $pidlist;
- foreach my $server (keys %run) {
- if($run{$server}) {
- if($verbose) {
- my $prev = 0;
- my $pids = $run{$server};
- foreach my $pid (split(' ', $pids)) {
- if($pid != $prev) {
- logmsg sprintf("* kill pid for %s => %d\n",
- $server, $pid);
- $prev = $pid;
- }
- }
- }
- $pidlist .= "$run{$server} ";
- $run{$server} = 0;
- }
- $runcert{$server} = 0 if($runcert{$server});
- }
- killpid($verbose, $pidlist);
- #
- # cleanup all server pid files
- #
- my $result = 0;
- foreach my $server (keys %serverpidfile) {
- my $pidfile = $serverpidfile{$server};
- my $pid = processexists($pidfile);
- if($pid > 0) {
- if($err_unexpected) {
- logmsg "ERROR: ";
- $result = -1;
- }
- else {
- logmsg "Warning: ";
- }
- logmsg "$server server unexpectedly alive\n";
- killpid($verbose, $pid);
- }
- unlink($pidfile) if(-f $pidfile);
- }
-
- return $result;
}
#######################################################################
-# startservers() starts all the named servers
-#
-# Returns: string with error reason or blank for success
+# Run a single specified test case
+# This is structured as a state machine which changes state after an
+# asynchronous call is made that awaits a response. The function returns with
+# an error code and a flag that indicates if the state machine has completed,
+# which means (if not) the function must be called again once the response has
+# arrived.
#
-sub startservers {
- my @what = @_;
- my ($pid, $pid2);
- for(@what) {
- my (@whatlist) = split(/\s+/,$_);
- my $what = lc($whatlist[0]);
- $what =~ s/[^a-z0-9\/-]//g;
-
- my $certfile;
- if($what =~ /^(ftp|gopher|http|imap|pop3|smtp)s((\d*)(-ipv6|-unix|))$/) {
- $certfile = ($whatlist[1]) ? $whatlist[1] : 'stunnel.pem';
- }
-
- if(($what eq "pop3") ||
- ($what eq "ftp") ||
- ($what eq "imap") ||
- ($what eq "smtp")) {
- if($torture && $run{$what} &&
- !responsive_pingpong_server($what, "", $verbose)) {
- if(stopserver($what)) {
- return "failed stopping unresponsive ".uc($what)." server";
- }
- }
- if(!$run{$what}) {
- ($pid, $pid2) = runpingpongserver($what, "", $verbose);
- if($pid <= 0) {
- return "failed starting ". uc($what) ." server";
- }
- printf ("* pid $what => %d %d\n", $pid, $pid2) if($verbose);
- $run{$what}="$pid $pid2";
- }
- }
- elsif($what eq "ftp-ipv6") {
- if($torture && $run{'ftp-ipv6'} &&
- !responsive_pingpong_server("ftp", "", $verbose, "ipv6")) {
- if(stopserver('ftp-ipv6')) {
- return "failed stopping unresponsive FTP-IPv6 server";
- }
- }
- if(!$run{'ftp-ipv6'}) {
- ($pid, $pid2) = runpingpongserver("ftp", "", $verbose, "ipv6");
- if($pid <= 0) {
- return "failed starting FTP-IPv6 server";
- }
- logmsg sprintf("* pid ftp-ipv6 => %d %d\n", $pid,
- $pid2) if($verbose);
- $run{'ftp-ipv6'}="$pid $pid2";
- }
- }
- elsif($what eq "gopher") {
- if($torture && $run{'gopher'} &&
- !responsive_http_server("gopher", $verbose, 0, $GOPHERPORT)) {
- if(stopserver('gopher')) {
- return "failed stopping unresponsive GOPHER server";
- }
- }
- if(!$run{'gopher'}) {
- ($pid, $pid2, $GOPHERPORT) =
- runhttpserver("gopher", $verbose, 0);
- if($pid <= 0) {
- return "failed starting GOPHER server";
- }
- logmsg sprintf ("* pid gopher => %d %d\n", $pid, $pid2)
- if($verbose);
- $run{'gopher'}="$pid $pid2";
- }
- }
- elsif($what eq "gopher-ipv6") {
- if($torture && $run{'gopher-ipv6'} &&
- !responsive_http_server("gopher", $verbose, "ipv6",
- $GOPHER6PORT)) {
- if(stopserver('gopher-ipv6')) {
- return "failed stopping unresponsive GOPHER-IPv6 server";
- }
- }
- if(!$run{'gopher-ipv6'}) {
- ($pid, $pid2, $GOPHER6PORT) =
- runhttpserver("gopher", $verbose, "ipv6");
- if($pid <= 0) {
- return "failed starting GOPHER-IPv6 server";
- }
- logmsg sprintf("* pid gopher-ipv6 => %d %d\n", $pid,
- $pid2) if($verbose);
- $run{'gopher-ipv6'}="$pid $pid2";
- }
- }
- elsif($what eq "http/2") {
- if(!$run{'http/2'}) {
- ($pid, $pid2, $HTTP2PORT) = runhttp2server($verbose);
- if($pid <= 0) {
- return "failed starting HTTP/2 server";
- }
- logmsg sprintf ("* pid http/2 => %d %d\n", $pid, $pid2)
- if($verbose);
- $run{'http/2'}="$pid $pid2";
- }
- }
- elsif($what eq "http") {
- if($torture && $run{'http'} &&
- !responsive_http_server("http", $verbose, 0, $HTTPPORT)) {
- if(stopserver('http')) {
- return "failed stopping unresponsive HTTP server";
- }
- }
- if(!$run{'http'}) {
- ($pid, $pid2, $HTTPPORT) =
- runhttpserver("http", $verbose, 0);
- if($pid <= 0) {
- return "failed starting HTTP server";
- }
- logmsg sprintf ("* pid http => %d %d\n", $pid, $pid2)
- if($verbose);
- $run{'http'}="$pid $pid2";
- }
- }
- elsif($what eq "http-proxy") {
- if($torture && $run{'http-proxy'} &&
- !responsive_http_server("http", $verbose, "proxy",
- $HTTPPROXYPORT)) {
- if(stopserver('http-proxy')) {
- return "failed stopping unresponsive HTTP-proxy server";
- }
- }
- if(!$run{'http-proxy'}) {
- ($pid, $pid2, $HTTPPROXYPORT) =
- runhttpserver("http", $verbose, "proxy");
- if($pid <= 0) {
- return "failed starting HTTP-proxy server";
- }
- logmsg sprintf ("* pid http-proxy => %d %d\n", $pid, $pid2)
- if($verbose);
- $run{'http-proxy'}="$pid $pid2";
- }
- }
- elsif($what eq "http-ipv6") {
- if($torture && $run{'http-ipv6'} &&
- !responsive_http_server("http", $verbose, "ipv6", $HTTP6PORT)) {
- if(stopserver('http-ipv6')) {
- return "failed stopping unresponsive HTTP-IPv6 server";
- }
- }
- if(!$run{'http-ipv6'}) {
- ($pid, $pid2, $HTTP6PORT) =
- runhttpserver("http", $verbose, "ipv6");
- if($pid <= 0) {
- return "failed starting HTTP-IPv6 server";
- }
- logmsg sprintf("* pid http-ipv6 => %d %d\n", $pid, $pid2)
- if($verbose);
- $run{'http-ipv6'}="$pid $pid2";
- }
- }
- elsif($what eq "rtsp") {
- if($torture && $run{'rtsp'} &&
- !responsive_rtsp_server($verbose)) {
- if(stopserver('rtsp')) {
- return "failed stopping unresponsive RTSP server";
- }
- }
- if(!$run{'rtsp'}) {
- ($pid, $pid2, $RTSPPORT) = runrtspserver($verbose);
- if($pid <= 0) {
- return "failed starting RTSP server";
- }
- printf ("* pid rtsp => %d %d\n", $pid, $pid2) if($verbose);
- $run{'rtsp'}="$pid $pid2";
- }
- }
- elsif($what eq "rtsp-ipv6") {
- if($torture && $run{'rtsp-ipv6'} &&
- !responsive_rtsp_server($verbose, "ipv6")) {
- if(stopserver('rtsp-ipv6')) {
- return "failed stopping unresponsive RTSP-IPv6 server";
- }
- }
- if(!$run{'rtsp-ipv6'}) {
- ($pid, $pid2, $RTSP6PORT) = runrtspserver($verbose, "ipv6");
- if($pid <= 0) {
- return "failed starting RTSP-IPv6 server";
- }
- logmsg sprintf("* pid rtsp-ipv6 => %d %d\n", $pid, $pid2)
- if($verbose);
- $run{'rtsp-ipv6'}="$pid $pid2";
- }
- }
- elsif($what eq "ftps") {
- if(!$stunnel) {
- # we can't run ftps tests without stunnel
- return "no stunnel";
- }
- if($runcert{'ftps'} && ($runcert{'ftps'} ne $certfile)) {
- # stop server when running and using a different cert
- if(stopserver('ftps')) {
- return "failed stopping FTPS server with different cert";
- }
- }
- if($torture && $run{'ftp'} &&
- !responsive_pingpong_server("ftp", "", $verbose)) {
- if(stopserver('ftp')) {
- return "failed stopping unresponsive FTP server";
- }
- }
- if(!$run{'ftp'}) {
- ($pid, $pid2) = runpingpongserver("ftp", "", $verbose);
- if($pid <= 0) {
- return "failed starting FTP server";
- }
- printf ("* pid ftp => %d %d\n", $pid, $pid2) if($verbose);
- $run{'ftp'}="$pid $pid2";
- }
- if(!$run{'ftps'}) {
- ($pid, $pid2, $FTPSPORT) =
- runftpsserver($verbose, "", $certfile);
- if($pid <= 0) {
- return "failed starting FTPS server (stunnel)";
- }
- logmsg sprintf("* pid ftps => %d %d\n", $pid, $pid2)
- if($verbose);
- $run{'ftps'}="$pid $pid2";
- }
- }
- elsif($what eq "file") {
- # we support it but have no server!
- }
- elsif($what eq "https") {
- if(!$stunnel) {
- # we can't run https tests without stunnel
- return "no stunnel";
- }
- if($runcert{'https'} && ($runcert{'https'} ne $certfile)) {
- # stop server when running and using a different cert
- if(stopserver('https')) {
- return "failed stopping HTTPS server with different cert";
- }
- }
- if($torture && $run{'http'} &&
- !responsive_http_server("http", $verbose, 0, $HTTPPORT)) {
- if(stopserver('http')) {
- return "failed stopping unresponsive HTTP server";
- }
- }
- if(!$run{'http'}) {
- ($pid, $pid2, $HTTPPORT) =
- runhttpserver("http", $verbose, 0);
- if($pid <= 0) {
- return "failed starting HTTP server";
- }
- printf ("* pid http => %d %d\n", $pid, $pid2) if($verbose);
- $run{'http'}="$pid $pid2";
- }
- if(!$run{'https'}) {
- ($pid, $pid2, $HTTPSPORT) =
- runhttpsserver($verbose, "https", "", $certfile);
- if($pid <= 0) {
- return "failed starting HTTPS server (stunnel)";
- }
- logmsg sprintf("* pid https => %d %d\n", $pid, $pid2)
- if($verbose);
- $run{'https'}="$pid $pid2";
- }
- }
- elsif($what eq "gophers") {
- if(!$stunnel) {
- # we can't run TLS tests without stunnel
- return "no stunnel";
- }
- if($runcert{'gophers'} && ($runcert{'gophers'} ne $certfile)) {
- # stop server when running and using a different cert
- if(stopserver('gophers')) {
- return "failed stopping GOPHERS server with different crt";
- }
- }
- if($torture && $run{'gopher'} &&
- !responsive_http_server("gopher", $verbose, 0, $GOPHERPORT)) {
- if(stopserver('gopher')) {
- return "failed stopping unresponsive GOPHER server";
- }
- }
- if(!$run{'gopher'}) {
- ($pid, $pid2, $GOPHERPORT) =
- runhttpserver("gopher", $verbose, 0);
- if($pid <= 0) {
- return "failed starting GOPHER server";
- }
- printf ("* pid gopher => %d %d\n", $pid, $pid2) if($verbose);
- print "GOPHERPORT => $GOPHERPORT\n" if($verbose);
- $run{'gopher'}="$pid $pid2";
- }
- if(!$run{'gophers'}) {
- ($pid, $pid2, $GOPHERSPORT) =
- runhttpsserver($verbose, "gophers", "", $certfile);
- if($pid <= 0) {
- return "failed starting GOPHERS server (stunnel)";
- }
- logmsg sprintf("* pid gophers => %d %d\n", $pid, $pid2)
- if($verbose);
- print "GOPHERSPORT => $GOPHERSPORT\n" if($verbose);
- $run{'gophers'}="$pid $pid2";
- }
- }
- elsif($what eq "https-proxy") {
- if(!$stunnel) {
- # we can't run https-proxy tests without stunnel
- return "no stunnel";
- }
- if($runcert{'https-proxy'} &&
- ($runcert{'https-proxy'} ne $certfile)) {
- # stop server when running and using a different cert
- if(stopserver('https-proxy')) {
- return "failed stopping HTTPS-proxy with different cert";
- }
- }
-
- # we front the http-proxy with stunnel so we need to make sure the
- # proxy runs as well
- my $f = startservers("http-proxy");
- if($f) {
- return $f;1
- }
+sub singletest {
+ my ($runnerid, $testnum, $count, $total)=@_;
+
+ # start buffering logmsg; stop it on return
+ logmsg_bufferfortest($runnerid);
+ if(!exists $singletest_state{$runnerid}) {
+ # First time in singletest() for this test
+ $singletest_state{$runnerid} = ST_INIT;
+ }
+
+ if($singletest_state{$runnerid} == ST_INIT) {
+ my $logdir = getrunnerlogdir($runnerid);
+ # first, remove all lingering log & lock files
+ if((!cleardir($logdir) || !cleardir("$logdir/$LOCKDIR"))
+ && $clearlocks) {
+ # On Windows, lock files can't be deleted when the process still
+ # has them open, so kill those processes first
+ if(runnerac_clearlocks($runnerid, "$logdir/$LOCKDIR")) {
+ logmsg "ERROR: runner $runnerid seems to have died\n";
+ $singletest_state{$runnerid} = ST_INIT;
+ return (-1, 0);
+ }
+ $singletest_state{$runnerid} = ST_CLEARLOCKS;
+ } else {
+ $singletest_state{$runnerid} = ST_INITED;
+ # Recursively call the state machine again because there is no
+ # event expected that would otherwise trigger a new call.
+ return singletest(@_);
+ }
+
+ } elsif($singletest_state{$runnerid} == ST_CLEARLOCKS) {
+ my ($rid, $logs) = runnerar($runnerid);
+ if(!$rid) {
+ logmsg "ERROR: runner $runnerid seems to have died\n";
+ $singletest_state{$runnerid} = ST_INIT;
+ return (-1, 0);
+ }
+ logmsg $logs;
+ my $logdir = getrunnerlogdir($runnerid);
+ cleardir($logdir);
+ $singletest_state{$runnerid} = ST_INITED;
+ # Recursively call the state machine again because there is no
+ # event expected that would otherwise trigger a new call.
+ return singletest(@_);
+
+ } elsif($singletest_state{$runnerid} == ST_INITED) {
+ ###################################################################
+ # Restore environment variables that were modified in a previous run.
+ # Test definition may instruct to (un)set environment vars.
+ # This is done this early so that leftover variables don't affect
+ # starting servers or CI registration.
+ # restore_test_env(1);
+
+ ###################################################################
+ # Load test file so CI registration can get the right data before the
+ # runner is called
+ loadtest("${TESTDIR}/test${testnum}");
+
+ ###################################################################
+ # Register the test case with the CI environment
+ citest_starttest($testnum);
+
+ if(runnerac_test_preprocess($runnerid, $testnum)) {
+ logmsg "ERROR: runner $runnerid seems to have died\n";
+ $singletest_state{$runnerid} = ST_INIT;
+ return (-1, 0);
+ }
+ $singletest_state{$runnerid} = ST_PREPROCESS;
+
+ } elsif($singletest_state{$runnerid} == ST_PREPROCESS) {
+ my ($rid, $why, $error, $logs, $testtimings) = runnerar($runnerid);
+ if(!$rid) {
+ logmsg "ERROR: runner $runnerid seems to have died\n";
+ $singletest_state{$runnerid} = ST_INIT;
+ return (-1, 0);
+ }
+ logmsg $logs;
+ updatetesttimings($testnum, %$testtimings);
+ if($error == -2) {
+ if($postmortem) {
+ # Error indicates an actual problem starting the server, so
+ # display the server logs
+ displaylogs($rid, $testnum);
+ }
+ }
+
+ #######################################################################
+ # Load test file for this test number
+ my $logdir = getrunnerlogdir($runnerid);
+ loadtest("${logdir}/test${testnum}");
+
+ #######################################################################
+ # Print the test name and count tests
+ $error = singletest_count($testnum, $why);
+ if($error) {
+ # Submit the test case result with the CI environment
+ citest_finishtest($testnum, $error);
+ $singletest_state{$runnerid} = ST_INIT;
+ logmsg singletest_dumplogs();
+ return ($error, 0);
+ }
+
+ #######################################################################
+ # Execute this test number
+ my $cmdres;
+ my $CURLOUT;
+ my $tool;
+ my $usedvalgrind;
+ if(runnerac_test_run($runnerid, $testnum)) {
+ logmsg "ERROR: runner $runnerid seems to have died\n";
+ $singletest_state{$runnerid} = ST_INIT;
+ return (-1, 0);
+ }
+ $singletest_state{$runnerid} = ST_RUN;
+
+ } elsif($singletest_state{$runnerid} == ST_RUN) {
+ my ($rid, $error, $logs, $testtimings, $cmdres, $CURLOUT, $tool, $usedvalgrind) = runnerar($runnerid);
+ if(!$rid) {
+ logmsg "ERROR: runner $runnerid seems to have died\n";
+ $singletest_state{$runnerid} = ST_INIT;
+ return (-1, 0);
+ }
+ logmsg $logs;
+ updatetesttimings($testnum, %$testtimings);
+ if($error == -1) {
+ # no further verification will occur
+ $timevrfyend{$testnum} = Time::HiRes::time();
+ my $err = ignoreresultcode($testnum);
+ # Submit the test case result with the CI environment
+ citest_finishtest($testnum, $err);
+ $singletest_state{$runnerid} = ST_INIT;
+ logmsg singletest_dumplogs();
+ # return a test failure, either to be reported or to be ignored
+ return ($err, 0);
+ }
+ elsif($error == -2) {
+ # fill in the missing timings on error
+ timestampskippedevents($testnum);
+ # Submit the test case result with the CI environment
+ citest_finishtest($testnum, $error);
+ $singletest_state{$runnerid} = ST_INIT;
+ logmsg singletest_dumplogs();
+ return ($error, 0);
+ }
+ elsif($error > 0) {
+ # no further verification will occur
+ $timevrfyend{$testnum} = Time::HiRes::time();
+ # Submit the test case result with the CI environment
+ citest_finishtest($testnum, $error);
+ $singletest_state{$runnerid} = ST_INIT;
+ logmsg singletest_dumplogs();
+ return ($error, 0);
+ }
+
+ #######################################################################
+ # Verify that the test succeeded
+ #
+ # Load test file for this test number
+ my $logdir = getrunnerlogdir($runnerid);
+ loadtest("${logdir}/test${testnum}");
+ readtestkeywords();
- if(!$run{'https-proxy'}) {
- ($pid, $pid2, $HTTPSPROXYPORT) =
- runhttpsserver($verbose, "https", "proxy", $certfile);
- if($pid <= 0) {
- return "failed starting HTTPS-proxy (stunnel)";
- }
- logmsg sprintf("* pid https-proxy => %d %d\n", $pid, $pid2)
- if($verbose);
- $run{'https-proxy'}="$pid $pid2";
- }
- }
- elsif($what eq "httptls") {
- if(!$httptlssrv) {
- # for now, we can't run http TLS-EXT tests without gnutls-serv
- return "no gnutls-serv";
- }
- if($torture && $run{'httptls'} &&
- !responsive_httptls_server($verbose, "IPv4")) {
- if(stopserver('httptls')) {
- return "failed stopping unresponsive HTTPTLS server";
- }
- }
- if(!$run{'httptls'}) {
- ($pid, $pid2, $HTTPTLSPORT) =
- runhttptlsserver($verbose, "IPv4");
- if($pid <= 0) {
- return "failed starting HTTPTLS server (gnutls-serv)";
- }
- logmsg sprintf("* pid httptls => %d %d\n", $pid, $pid2)
- if($verbose);
- $run{'httptls'}="$pid $pid2";
- }
- }
- elsif($what eq "httptls-ipv6") {
- if(!$httptlssrv) {
- # for now, we can't run http TLS-EXT tests without gnutls-serv
- return "no gnutls-serv";
- }
- if($torture && $run{'httptls-ipv6'} &&
- !responsive_httptls_server($verbose, "ipv6")) {
- if(stopserver('httptls-ipv6')) {
- return "failed stopping unresponsive HTTPTLS-IPv6 server";
- }
- }
- if(!$run{'httptls-ipv6'}) {
- ($pid, $pid2, $HTTPTLS6PORT) =
- runhttptlsserver($verbose, "ipv6");
- if($pid <= 0) {
- return "failed starting HTTPTLS-IPv6 server (gnutls-serv)";
- }
- logmsg sprintf("* pid httptls-ipv6 => %d %d\n", $pid, $pid2)
- if($verbose);
- $run{'httptls-ipv6'}="$pid $pid2";
- }
- }
- elsif($what eq "tftp") {
- if($torture && $run{'tftp'} &&
- !responsive_tftp_server("", $verbose)) {
- if(stopserver('tftp')) {
- return "failed stopping unresponsive TFTP server";
- }
- }
- if(!$run{'tftp'}) {
- ($pid, $pid2, $TFTPPORT) =
- runtftpserver("", $verbose);
- if($pid <= 0) {
- return "failed starting TFTP server";
- }
- printf ("* pid tftp => %d %d\n", $pid, $pid2) if($verbose);
- $run{'tftp'}="$pid $pid2";
- }
- }
- elsif($what eq "tftp-ipv6") {
- if($torture && $run{'tftp-ipv6'} &&
- !responsive_tftp_server("", $verbose, "ipv6")) {
- if(stopserver('tftp-ipv6')) {
- return "failed stopping unresponsive TFTP-IPv6 server";
- }
- }
- if(!$run{'tftp-ipv6'}) {
- ($pid, $pid2, $TFTP6PORT) =
- runtftpserver("", $verbose, "ipv6");
- if($pid <= 0) {
- return "failed starting TFTP-IPv6 server";
- }
- printf("* pid tftp-ipv6 => %d %d\n", $pid, $pid2) if($verbose);
- $run{'tftp-ipv6'}="$pid $pid2";
- }
+ $error = singletest_check($runnerid, $testnum, $cmdres, $CURLOUT, $tool, $usedvalgrind);
+ if($error == -1) {
+ my $err = ignoreresultcode($testnum);
+ # Submit the test case result with the CI environment
+ citest_finishtest($testnum, $err);
+ $singletest_state{$runnerid} = ST_INIT;
+ logmsg singletest_dumplogs();
+ # return a test failure, either to be reported or to be ignored
+ return ($err, 0);
}
- elsif($what eq "sftp" || $what eq "scp") {
- if(!$run{'ssh'}) {
- ($pid, $pid2, $SSHPORT) = runsshserver("", $verbose);
- if($pid <= 0) {
- return "failed starting SSH server";
- }
- printf ("* pid ssh => %d %d\n", $pid, $pid2) if($verbose);
- $run{'ssh'}="$pid $pid2";
- }
- }
- elsif($what eq "socks4" || $what eq "socks5" ) {
- if(!$run{'socks'}) {
- ($pid, $pid2, $SOCKSPORT) = runsocksserver("", $verbose);
- if($pid <= 0) {
- return "failed starting socks server";
- }
- printf ("* pid socks => %d %d\n", $pid, $pid2) if($verbose);
- $run{'socks'}="$pid $pid2";
- }
- }
- elsif($what eq "socks5unix") {
- if(!$run{'socks5unix'}) {
- ($pid, $pid2) = runsocksserver("2", $verbose, "", "unix");
- if($pid <= 0) {
- return "failed starting socks5unix server";
- }
- printf ("* pid socks5unix => %d %d\n", $pid, $pid2) if($verbose);
- $run{'socks5unix'}="$pid $pid2";
- }
- }
- elsif($what eq "mqtt" ) {
- if(!$run{'mqtt'}) {
- ($pid, $pid2) = runmqttserver("", $verbose);
- if($pid <= 0) {
- return "failed starting mqtt server";
- }
- printf ("* pid mqtt => %d %d\n", $pid, $pid2) if($verbose);
- $run{'mqtt'}="$pid $pid2";
- }
- }
- elsif($what eq "http-unix") {
- if($torture && $run{'http-unix'} &&
- !responsive_http_server("http", $verbose, "unix", $HTTPUNIXPATH)) {
- if(stopserver('http-unix')) {
- return "failed stopping unresponsive HTTP-unix server";
- }
- }
- if(!$run{'http-unix'}) {
- my $unused;
- ($pid, $pid2, $unused) =
- runhttpserver("http", $verbose, "unix", $HTTPUNIXPATH);
- if($pid <= 0) {
- return "failed starting HTTP-unix server";
- }
- logmsg sprintf("* pid http-unix => %d %d\n", $pid, $pid2)
- if($verbose);
- $run{'http-unix'}="$pid $pid2";
- }
- }
- elsif($what eq "dict") {
- if(!$run{'dict'}) {
- ($pid, $pid2, $DICTPORT) = rundictserver($verbose, "");
- if($pid <= 0) {
- return "failed starting DICT server";
- }
- logmsg sprintf ("* pid DICT => %d %d\n", $pid, $pid2)
- if($verbose);
- $run{'dict'}="$pid $pid2";
- }
- }
- elsif($what eq "smb") {
- if(!$run{'smb'}) {
- ($pid, $pid2, $SMBPORT) = runsmbserver($verbose, "");
- if($pid <= 0) {
- return "failed starting SMB server";
- }
- logmsg sprintf ("* pid SMB => %d %d\n", $pid, $pid2)
- if($verbose);
- $run{'smb'}="$pid $pid2";
- }
- }
- elsif($what eq "telnet") {
- if(!$run{'telnet'}) {
- ($pid, $pid2, $TELNETPORT) =
- runnegtelnetserver($verbose, "");
- if($pid <= 0) {
- return "failed starting neg TELNET server";
- }
- logmsg sprintf ("* pid neg TELNET => %d %d\n", $pid, $pid2)
- if($verbose);
- $run{'telnet'}="$pid $pid2";
- }
- }
- elsif($what eq "none") {
- logmsg "* starts no server\n" if ($verbose);
- }
- else {
- warn "we don't support a server for $what";
- return "no server for $what";
+ elsif($error == -2) {
+ # torture test; there is no verification, so the run result holds the
+ # test success code
+ # Submit the test case result with the CI environment
+ citest_finishtest($testnum, $cmdres);
+ $singletest_state{$runnerid} = ST_INIT;
+ logmsg singletest_dumplogs();
+ return ($cmdres, 0);
}
- }
- return 0;
-}
-##############################################################################
-# This function makes sure the right set of server is running for the
-# specified test case. This is a useful design when we run single tests as not
-# all servers need to run then!
-#
-# Returns: a string, blank if everything is fine or a reason why it failed
-#
-sub serverfortest {
- my ($testnum)=@_;
- my @what = getpart("client", "server");
+ #######################################################################
+ # Report a successful test
+ singletest_success($testnum, $count, $total, ignoreresultcode($testnum));
- if(!$what[0]) {
- warn "Test case $testnum has no server(s) specified";
- return "no server specified";
- }
+ # Submit the test case result with the CI environment
+ citest_finishtest($testnum, 0);
+ $singletest_state{$runnerid} = ST_INIT;
- for(my $i = scalar(@what) - 1; $i >= 0; $i--) {
- my $srvrline = $what[$i];
- chomp $srvrline if($srvrline);
- if($srvrline =~ /^(\S+)((\s*)(.*))/) {
- my $server = "${1}";
- my $lnrest = "${2}";
- my $tlsext;
- if($server =~ /^(httptls)(\+)(ext|srp)(\d*)(-ipv6|)$/) {
- $server = "${1}${4}${5}";
- $tlsext = uc("TLS-${3}");
- }
- if(! grep /^\Q$server\E$/, @protocols) {
- if(substr($server,0,5) ne "socks") {
- if($tlsext) {
- return "curl lacks $tlsext support";
- }
- else {
- return "curl lacks $server server support";
- }
- }
- }
- $what[$i] = "$server$lnrest" if($tlsext);
- }
+ logmsg singletest_dumplogs();
+ return (0, 0); # state machine is finished
}
-
- return &startservers(@what);
+ singletest_unbufferlogs();
+ return (0, 1); # state machine must be called again on event
}
#######################################################################
@@ -5567,6 +2090,54 @@ sub runtimestats {
}
#######################################################################
+# returns code indicating why a test was skipped
+# 0=unknown test, 1=use test result, 2=ignore test result
+#
+sub ignoreresultcode {
+ my ($testnum)=@_;
+ if(defined $ignoretestcodes{$testnum}) {
+ return $ignoretestcodes{$testnum};
+ }
+ return 0;
+}
+
+#######################################################################
+# Put the given runner ID onto the queue of runners ready for a new task
+#
+sub runnerready {
+ my ($runnerid)=@_;
+ push @runnersidle, $runnerid;
+}
+
+#######################################################################
+# Create test runners
+#
+sub createrunners {
+ my ($numrunners)=@_;
+ if(! $numrunners) {
+ $numrunners++;
+ }
+ # create $numrunners runners with minimum 1
+ for my $runnernum (1..$numrunners) {
+ my $dir = getrunnernumlogdir($runnernum);
+ cleardir($dir);
+ mkdir($dir, 0777);
+ $runnerids{$runnernum} = runner_init($dir, $jobs);
+ runnerready($runnerids{$runnernum});
+ }
+}
+
+#######################################################################
+# Pick a test runner for the given test
+#
+sub pickrunner {
+ my ($testnum)=@_;
+ scalar(@runnersidle) || die "No runners available";
+
+ return pop @runnersidle;
+}
+
+#######################################################################
# Check options to this test program
#
@@ -5577,6 +2148,7 @@ if(@ARGV && $ARGV[-1] eq '$TFLAGS') {
push(@ARGV, split(' ', $ENV{'TFLAGS'})) if defined($ENV{'TFLAGS'});
}
+$valgrind = checktestcmd("valgrind");
my $number=0;
my $fromnum=-1;
my @testthis;
@@ -5587,7 +2159,7 @@ while(@ARGV) {
}
elsif ($ARGV[0] eq "-c") {
# use this path to curl instead of default
- $DBGCURL=$CURL="\"$ARGV[1]\"";
+ $DBGCURL=$CURL=$ARGV[1];
shift @ARGV;
}
elsif ($ARGV[0] eq "-vc") {
@@ -5597,12 +2169,12 @@ while(@ARGV) {
# the development version as then it won't be able to run any tests
# since it can't verify the servers!
- $VCURL="\"$ARGV[1]\"";
+ $VCURL=shell_quote($ARGV[1]);
shift @ARGV;
}
elsif ($ARGV[0] eq "-ac") {
# use this curl only to talk to APIs (currently only CI test APIs)
- $ACURL="\"$ARGV[1]\"";
+ $ACURL=shell_quote($ARGV[1]);
shift @ARGV;
}
elsif ($ARGV[0] eq "-d") {
@@ -5615,7 +2187,7 @@ while(@ARGV) {
}
elsif($ARGV[0] eq "-f") {
# force - run the test case even if listed in DISABLED
- $run_disabeled=1;
+ $run_disabled=1;
}
elsif($ARGV[0] eq "-E") {
# load additional reasons to skip tests
@@ -5630,7 +2202,7 @@ while(@ARGV) {
die "Unsupported type: $type\n" if($type !~ /^keyword|test|tool$/);
foreach my $pattern (split(/,/, $patterns)) {
- if($type =~ /^test$/) {
+ if($type eq "test") {
# Strip leading zeros in the test number
$pattern = int($pattern);
}
@@ -5661,6 +2233,10 @@ while(@ARGV) {
# no valgrind
undef $valgrind;
}
+ elsif($ARGV[0] eq "--no-debuginfod") {
+ # disable the valgrind debuginfod functionality
+ $no_debuginfod = 1;
+ }
elsif ($ARGV[0] eq "-R") {
# execute in scrambled order
$scrambleorder=1;
@@ -5706,7 +2282,6 @@ while(@ARGV) {
}
elsif($ARGV[0] eq "-P") {
shift @ARGV;
- $use_external_proxy=1;
$proxy_address=$ARGV[0];
}
elsif($ARGV[0] eq "-L") {
@@ -5718,6 +2293,14 @@ while(@ARGV) {
# lists the test case names only
$listonly=1;
}
+ elsif($ARGV[0] =~ /^-j(.*)/) {
+ # parallel jobs
+ $jobs=1;
+ my $xtra = $1;
+ if($xtra =~ s/(\d+)$//) {
+ $jobs = $1;
+ }
+ }
elsif($ARGV[0] eq "-k") {
# keep stdout and stderr files after tests
$keepoutfiles=1;
@@ -5725,13 +2308,14 @@ while(@ARGV) {
elsif($ARGV[0] eq "-r") {
# run time statistics needs Time::HiRes
if($Time::HiRes::VERSION) {
- keys(%timeprepini) = 1000;
- keys(%timesrvrini) = 1000;
- keys(%timesrvrend) = 1000;
- keys(%timetoolini) = 1000;
- keys(%timetoolend) = 1000;
- keys(%timesrvrlog) = 1000;
- keys(%timevrfyend) = 1000;
+ # presize hashes appropriately to hold an entire test run
+ keys(%timeprepini) = 2000;
+ keys(%timesrvrini) = 2000;
+ keys(%timesrvrend) = 2000;
+ keys(%timetoolini) = 2000;
+ keys(%timetoolend) = 2000;
+ keys(%timesrvrlog) = 2000;
+ keys(%timevrfyend) = 2000;
$timestats=1;
$fullstats=0;
}
@@ -5739,13 +2323,14 @@ while(@ARGV) {
elsif($ARGV[0] eq "-rf") {
# run time statistics needs Time::HiRes
if($Time::HiRes::VERSION) {
- keys(%timeprepini) = 1000;
- keys(%timesrvrini) = 1000;
- keys(%timesrvrend) = 1000;
- keys(%timetoolini) = 1000;
- keys(%timetoolend) = 1000;
- keys(%timesrvrlog) = 1000;
- keys(%timevrfyend) = 1000;
+ # presize hashes appropriately to hold an entire test run
+ keys(%timeprepini) = 2000;
+ keys(%timesrvrini) = 2000;
+ keys(%timesrvrend) = 2000;
+ keys(%timetoolini) = 2000;
+ keys(%timetoolend) = 2000;
+ keys(%timesrvrlog) = 2000;
+ keys(%timevrfyend) = 2000;
$timestats=1;
$fullstats=1;
}
@@ -5760,7 +2345,7 @@ while(@ARGV) {
}
elsif(($ARGV[0] eq "-h") || ($ARGV[0] eq "--help")) {
# show help text
- print <<EOHELP
+ print <<"EOHELP"
Usage: runtests.pl [options] [test selection(s)]
-a continue even if a test fails
-ac path use this curl only to talk to APIs (currently only CI test APIs)
@@ -5773,10 +2358,12 @@ Usage: runtests.pl [options] [test selection(s)]
-g run the test case with gdb
-gw run the test case with gdb as a windowed application
-h this help text
+ -j[N] spawn this number of processes to run tests (default 0)
-k keep stdout and stderr files present after tests
-L path require an additional perl library file to replace certain functions
-l list all test case names/descriptions
-n no valgrind
+ --no-debuginfod disable the valgrind debuginfod functionality
-o variable=value set internal variable to the specified value
-P proxy use the specified proxy
-p print log file contents when a test fails
@@ -5841,14 +2428,18 @@ EOHELP
shift @ARGV;
}
+delete $ENV{'DEBUGINFOD_URLS'} if($ENV{'DEBUGINFOD_URLS'} && $no_debuginfod);
+
if(!$randseed) {
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime(time);
# seed of the month. December 2019 becomes 201912
$randseed = ($year+1900)*100 + $mon+1;
- open(C, "$CURL --version 2>/dev/null|");
- my @c = <C>;
- close(C);
+ print "Using curl: $CURL\n";
+ open(my $curlvh, "-|", shell_quote($CURL) . " --version 2>/dev/null") ||
+ die "could not get curl version!";
+ my @c = <$curlvh>;
+ close($curlvh) || die "could not get curl version!";
# use the first line of output and get the md5 out of it
my $str = md5($c[0]);
$randseed += unpack('S', $str); # unsigned 16 bit value
@@ -5872,27 +2463,31 @@ if($valgrind) {
# since valgrind 2.1.x, '--tool' option is mandatory
# use it, if it is supported by the version installed on the system
+ # (this happened in 2003, so we could probably don't need to care about
+ # that old version any longer and just delete this check)
runclient("valgrind --help 2>&1 | grep -- --tool > /dev/null 2>&1");
- if (($? >> 8)==0) {
- $valgrind_tool="--tool=memcheck";
+ if (($? >> 8)) {
+ $valgrind_tool="";
}
- open(C, "<$CURL");
- my $l = <C>;
+ open(my $curlh, "<", "$CURL");
+ my $l = <$curlh>;
if($l =~ /^\#\!/) {
# A shell script. This is typically when built with libtool,
$valgrind="../libtool --mode=execute $valgrind";
}
- close(C);
+ close($curlh);
# valgrind 3 renamed the --logfile option to --log-file!!!
+ # (this happened in 2005, so we could probably don't need to care about
+ # that old version any longer and just delete this check)
my $ver=join(' ', runclientoutput("valgrind --version"));
# cut off all but digits and dots
$ver =~ s/[^0-9.]//g;
if($ver =~ /^(\d+)/) {
$ver = $1;
- if($ver >= 3) {
- $valgrind_logfile="--log-file";
+ if($ver < 3) {
+ $valgrind_logfile="--logfile";
}
}
}
@@ -5900,10 +2495,10 @@ if($valgrind) {
if ($gdbthis) {
# open the executable curl and read the first 4 bytes of it
- open(CHECK, "<$CURL");
+ open(my $check, "<", "$CURL");
my $c;
- sysread CHECK, $c, 4;
- close(CHECK);
+ sysread $check, $c, 4;
+ close($check);
if($c eq "#! /") {
# A shell script. This is typically when built with libtool,
$libtool = 1;
@@ -5911,33 +2506,47 @@ if ($gdbthis) {
}
}
-$HTTPUNIXPATH = "http$$.sock"; # HTTP server Unix domain socket path
-$SOCKSUNIXPATH = $pwd."/socks$$.sock"; # HTTP server Unix domain socket path, absolute path
-
#######################################################################
# clear and create logging directory:
#
+# TODO: figure how to get around this. This dir is needed for checksystemfeatures()
+# Maybe create & use & delete a temporary directory in that function
cleardir($LOGDIR);
mkdir($LOGDIR, 0777);
+mkdir("$LOGDIR/$LOCKDIR", 0777);
#######################################################################
# initialize some variables
#
get_disttests();
-init_serverpidfile_hash();
+if(!$jobs) {
+ # Disable buffered logging with only one test job
+ setlogfunc(\&logmsg);
+}
#######################################################################
# Output curl version and host info being tested
#
if(!$listonly) {
- checksystem();
+ checksystemfeatures();
}
-# globally disabled tests
-disabledtests("$TESTDIR/DISABLED");
+#######################################################################
+# initialize configuration needed to set up servers
+# TODO: rearrange things so this can be called only in runner_init()
+#
+initserverconfig();
+
+if(!$listonly) {
+ # these can only be displayed after initserverconfig() has been called
+ displayserverfeatures();
+
+ # globally disabled tests
+ disabledtests("$TESTDIR/DISABLED");
+}
#######################################################################
# Fetch all disabled tests, if there are any
@@ -5947,15 +2556,15 @@ sub disabledtests {
my ($file) = @_;
my @input;
- if(open(D, "<$file")) {
- while(<D>) {
+ if(open(my $disabledh, "<", "$file")) {
+ while(<$disabledh>) {
if(/^ *\#/) {
# allow comments
next;
}
push @input, $_;
}
- close(D);
+ close($disabledh);
# preprocess the input to make conditionally disabled tests depending
# on variables
@@ -6000,7 +2609,6 @@ if ( $TESTCASES eq "all") {
if($disabled{$n}) {
# skip disabled test cases
my $why = "configured as DISABLED";
- $skipped++;
$skipped{$why}++;
$teststat[$n]=$why; # store reason for this test case
next;
@@ -6010,11 +2618,11 @@ if ( $TESTCASES eq "all") {
}
else {
my $verified="";
- map {
+ for(split(" ", $TESTCASES)) {
if (-e "$TESTDIR/test$_") {
$verified.="$_ ";
}
- } split(" ", $TESTCASES);
+ }
if($verified eq "") {
print "No existing test cases were specified\n";
exit;
@@ -6050,16 +2658,16 @@ if($scrambleorder) {
# and excessively long files are elided
sub displaylogcontent {
my ($file)=@_;
- if(open(SINGLE, "<$file")) {
+ if(open(my $single, "<", "$file")) {
my $linecount = 0;
my $truncate;
my @tail;
- while(my $string = <SINGLE>) {
+ while(my $string = <$single>) {
$string =~ s/\r\n/\n/g;
$string =~ s/[\r\f\032]/\n/g;
$string .= "\n" unless ($string =~ /\n$/);
$string =~ tr/\n//;
- for my $line (split("\n", $string)) {
+ for my $line (split(m/\n/, $string)) {
$line =~ s/\s*\!$//;
if ($truncate) {
push @tail, " $line\n";
@@ -6067,9 +2675,10 @@ sub displaylogcontent {
logmsg " $line\n";
}
$linecount++;
- $truncate = $linecount > 1000;
+ $truncate = $linecount > 1200;
}
}
+ close($single);
if(@tail) {
my $tailshow = 200;
my $tailskip = 0;
@@ -6082,18 +2691,18 @@ sub displaylogcontent {
logmsg "$tail[$_]";
}
}
- close(SINGLE);
}
}
sub displaylogs {
- my ($testnum)=@_;
- opendir(DIR, "$LOGDIR") ||
+ my ($runnerid, $testnum)=@_;
+ my $logdir = getrunnerlogdir($runnerid);
+ opendir(DIR, "$logdir") ||
die "can't open dir: $!";
my @logs = readdir(DIR);
closedir(DIR);
- logmsg "== Contents of files in the $LOGDIR/ dir after test $testnum\n";
+ logmsg "== Contents of files in the $logdir/ dir after test $testnum\n";
foreach my $log (sort @logs) {
if($log =~ /\.(\.|)$/) {
next; # skip "." and ".."
@@ -6104,7 +2713,7 @@ sub displaylogs {
if(($log eq "memdump") || ($log eq "core")) {
next; # skip "memdump" and "core"
}
- if((-d "$LOGDIR/$log") || (! -s "$LOGDIR/$log")) {
+ if((-d "$logdir/$log") || (! -s "$logdir/$log")) {
next; # skip directory and empty files
}
if(($log =~ /^stdout\d+/) && ($log !~ /^stdout$testnum/)) {
@@ -6131,108 +2740,233 @@ sub displaylogs {
if(($log =~ /^trace\d+/) && ($log !~ /^trace$testnum/)) {
next; # skip traceNnn of other tests
}
- if(($log =~ /^valgrind\d+/) && ($log !~ /^valgrind$testnum(\..*|)$/)) {
+ if(($log =~ /^valgrind\d+/) && ($log !~ /^valgrind$testnum(?:\..*)?$/)) {
next; # skip valgrindNnn of other tests
}
if(($log =~ /^test$testnum$/)) {
next; # skip test$testnum since it can be very big
}
logmsg "=== Start of file $log\n";
- displaylogcontent("$LOGDIR/$log");
+ displaylogcontent("$logdir/$log");
logmsg "=== End of file $log\n";
}
}
#######################################################################
-# Setup Azure Pipelines Test Run (if running in Azure DevOps)
-#
-
-if(azure_check_environment()) {
- $AZURE_RUN_ID = azure_create_test_run($ACURL);
- logmsg "Azure Run ID: $AZURE_RUN_ID\n" if ($verbose);
-}
-
-#######################################################################
-# The main test-loop
+# Scan tests to find suitable candidates
#
my $failed;
my $failedign;
-my $testnum;
my $ok=0;
my $ign=0;
my $total=0;
my $lasttest=0;
my @at = split(" ", $TESTCASES);
my $count=0;
+my $endwaitcnt=0;
$start = time();
-foreach $testnum (@at) {
-
+# scan all tests to find ones we should try to run
+my @runtests;
+foreach my $testnum (@at) {
$lasttest = $testnum if($testnum > $lasttest);
- $count++;
+ my ($why, $errorreturncode) = singletest_shouldrun($testnum);
+ if($why || $listonly) {
+ # Display test name now--test will be completely skipped later
+ my $error = singletest_count($testnum, $why);
+ next;
+ }
+ $ignoretestcodes{$testnum} = $errorreturncode;
+ push(@runtests, $testnum);
+}
+my $totaltests = scalar(@runtests);
- my $error = singletest($run_event_based, $testnum, $count, scalar(@at));
+if($listonly) {
+ exit(0);
+}
- # update test result in CI services
- if(azure_check_environment() && $AZURE_RUN_ID && $AZURE_RESULT_ID) {
- $AZURE_RESULT_ID = azure_update_test_result($ACURL, $AZURE_RUN_ID, $AZURE_RESULT_ID, $testnum, $error,
- $timeprepini{$testnum}, $timevrfyend{$testnum});
+#######################################################################
+# Setup CI Test Run
+citest_starttestrun();
+
+#######################################################################
+# Start test runners
+#
+my $numrunners = $jobs < scalar(@runtests) ? $jobs : scalar(@runtests);
+createrunners($numrunners);
+
+#######################################################################
+# The main test-loop
+#
+# Every iteration through the loop consists of these steps:
+# - if the global abort flag is set, exit the loop; we are done
+# - if a runner is idle, start a new test on it
+# - if all runners are idle, exit the loop; we are done
+# - if a runner has a response for us, process the response
+
+# run through each candidate test and execute it
+while () {
+ # check the abort flag
+ if($globalabort) {
+ logmsg singletest_dumplogs();
+ logmsg "Aborting tests\n";
+ logmsg "Waiting for " . scalar((keys %runnersrunning)) . " outstanding test(s) to finish...\n";
+ # Wait for the last requests to complete and throw them away so
+ # that IPC calls & responses stay in sync
+ # TODO: send a signal to the runners to interrupt a long test
+ foreach my $rid (keys %runnersrunning) {
+ runnerar($rid);
+ delete $runnersrunning{$rid};
+ logmsg ".";
+ $| = 1;
+ }
+ logmsg "\n";
+ last;
}
- elsif(appveyor_check_environment()) {
- appveyor_update_test_result($ACURL, $testnum, $error, $timeprepini{$testnum}, $timevrfyend{$testnum});
+
+ # Start a new test if possible
+ if(scalar(@runnersidle) && scalar(@runtests)) {
+ # A runner is ready to run a test, and tests are still available to run
+ # so start a new test.
+ $count++;
+ my $testnum = shift(@runtests);
+
+ # pick a runner for this new test
+ my $runnerid = pickrunner($testnum);
+ $countforrunner{$runnerid} = $count;
+
+ # Start the test
+ my ($error, $again) = singletest($runnerid, $testnum, $countforrunner{$runnerid}, $totaltests);
+ if($again) {
+ # this runner is busy running a test
+ $runnersrunning{$runnerid} = $testnum;
+ } else {
+ runnerready($runnerid);
+ if($error >= 0) {
+ # We make this simplifying assumption to avoid having to handle
+ # $error properly here, but we must handle the case of runner
+ # death without abending here.
+ die "Internal error: test must not complete on first call";
+ }
+ }
}
- if($error < 0) {
- # not a test we can run
- next;
+ # See if we've completed all the tests
+ if(!scalar(%runnersrunning)) {
+ # No runners are running; we must be done
+ scalar(@runtests) && die 'Internal error: still have tests to run';
+ last;
}
- $total++; # number of tests we've run
+ # See if a test runner needs attention
+ # If we could be running more tests, don't wait so we can schedule a new
+ # one immediately. If all runners are busy, wait a fraction of a second
+ # for one to finish so we can still loop around to check the abort flag.
+ my $runnerwait = scalar(@runnersidle) && scalar(@runtests) ? 0 : 0.5;
+ my ($ridready, $riderror) = runnerar_ready($runnerwait);
+ if($ridready && ! defined $runnersrunning{$ridready}) {
+ # On Linux, a closed pipe still shows up as ready instead of error.
+ # Detect this here by seeing if we are expecting it to be ready and
+ # treat it as an error if not.
+ logmsg "ERROR: Runner $ridready is unexpectedly ready; is probably actually dead\n";
+ $riderror = $ridready;
+ undef $ridready;
+ }
+ if($ridready) {
+ # This runner is ready to be serviced
+ my $testnum = $runnersrunning{$ridready};
+ defined $testnum || die "Internal error: test for runner $ridready unknown";
+ delete $runnersrunning{$ridready};
+ my ($error, $again) = singletest($ridready, $testnum, $countforrunner{$ridready}, $totaltests);
+ if($again) {
+ # this runner is busy running a test
+ $runnersrunning{$ridready} = $testnum;
+ } else {
+ # Test is complete
+ runnerready($ridready);
- if($error>0) {
- if($error==2) {
- # ignored test failures
- $failedign .= "$testnum ";
- }
- else {
- $failed.= "$testnum ";
- }
- if($postmortem) {
- # display all files in log/ in a nice way
- displaylogs($testnum);
- }
- if($error==2) {
- $ign++; # ignored test result counter
- }
- elsif(!$anyway) {
- # a test failed, abort
- logmsg "\n - abort tests\n";
- last;
+ if($error < 0) {
+ # not a test we can run
+ next;
+ }
+
+ $total++; # number of tests we've run
+
+ if($error>0) {
+ if($error==2) {
+ # ignored test failures
+ $failedign .= "$testnum ";
+ }
+ else {
+ $failed.= "$testnum ";
+ }
+ if($postmortem) {
+ # display all files in $LOGDIR/ in a nice way
+ displaylogs($ridready, $testnum);
+ }
+ if($error==2) {
+ $ign++; # ignored test result counter
+ }
+ elsif(!$anyway) {
+ # a test failed, abort
+ logmsg "\n - abort tests\n";
+ undef @runtests; # empty out the remaining tests
+ }
+ }
+ elsif(!$error) {
+ $ok++; # successful test counter
+ }
}
}
- elsif(!$error) {
- $ok++; # successful test counter
+ if($riderror) {
+ logmsg "ERROR: runner $riderror is dead! aborting test run\n";
+ delete $runnersrunning{$riderror} if(defined $runnersrunning{$riderror});
+ $globalabort = 1;
+ }
+ if(!scalar(@runtests) && ++$endwaitcnt == (240 + $jobs)) {
+ # Once all tests have been scheduled on a runner at the end of a test
+ # run, we just wait for their results to come in. If we're still
+ # waiting after a couple of minutes ($endwaitcnt multiplied by
+ # $runnerwait, plus $jobs because that number won't time out), display
+ # the same test runner status as we give with a SIGUSR1. This will
+ # likely point to a single test that has hung.
+ logmsg "Hmmm, the tests are taking a while to finish. Here is the status:\n";
+ catch_usr1();
}
-
- # loop for next test
}
my $sofar = time() - $start;
#######################################################################
-# Finish Azure Pipelines Test Run (if running in Azure DevOps)
-#
+# Finish CI Test Run
+citest_finishtestrun();
-if(azure_check_environment() && $AZURE_RUN_ID) {
- $AZURE_RUN_ID = azure_update_test_run($ACURL, $AZURE_RUN_ID);
+# Tests done, stop the servers
+foreach my $runnerid (values %runnerids) {
+ runnerac_stopservers($runnerid);
}
-# Tests done, stop the servers
-my $unexpected = stopservers($verbose);
+# Wait for servers to stop
+my $unexpected;
+foreach my $runnerid (values %runnerids) {
+ my ($rid, $unexpect, $logs) = runnerar($runnerid);
+ $unexpected ||= $unexpect;
+ logmsg $logs;
+}
+
+# Kill the runners
+# There is a race condition here since we don't know exactly when the runners
+# have each finished shutting themselves down, but we're about to exit so it
+# doesn't make much difference.
+foreach my $runnerid (values %runnerids) {
+ runnerac_shutdown($runnerid);
+ sleep 0; # give runner a context switch so it can shut itself down
+}
-my $all = $total + $skipped;
+my $numskipped = %skipped ? sum values %skipped : 0;
+my $all = $total + $numskipped;
runtimestats($lasttest);
@@ -6241,12 +2975,12 @@ if($all) {
sprintf("%.0f", $sofar) ." seconds.\n";
}
-if($skipped && !$short) {
+if(%skipped && !$short) {
my $s=0;
# Temporary hash to print the restraints sorted by the number
# of their occurrences
my %restraints;
- logmsg "TESTINFO: $skipped tests were skipped due to these restraints:\n";
+ logmsg "TESTINFO: $numskipped tests were skipped due to these restraints:\n";
for(keys %skipped) {
my $r = $_;
diff --git a/tests/secureserver.pl b/tests/secureserver.pl
index 3d2ab1531..1b71c36c7 100755
--- a/tests/secureserver.pl
+++ b/tests/secureserver.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -27,15 +27,17 @@
# harness. Actually just a layer that runs stunnel properly using the
# non-secure test harness servers.
+use strict;
+use warnings;
+
BEGIN {
push(@INC, $ENV{'srcdir'}) if(defined $ENV{'srcdir'});
push(@INC, ".");
}
-use strict;
-use warnings;
use Cwd;
use Cwd 'abs_path';
+use File::Basename;
use serverhelp qw(
server_pidfilename
@@ -77,6 +79,7 @@ my $certfile; # certificate chain PEM file
my $path = getcwd();
my $srcdir = $path;
my $logdir = $path .'/log';
+my $piddir;
#***************************************************************************
# Signal handler to remove our stunnel 4.00 and newer configuration file.
@@ -120,12 +123,7 @@ while(@ARGV) {
}
elsif($ARGV[0] eq '--stunnel') {
if($ARGV[1]) {
- if($ARGV[1] =~ /^([\w\/]+)$/) {
- $stunnel = $ARGV[1];
- }
- else {
- $stunnel = "\"". $ARGV[1] ."\"";
- }
+ $stunnel = $ARGV[1];
shift @ARGV;
}
}
@@ -167,6 +165,12 @@ while(@ARGV) {
shift @ARGV;
}
}
+ elsif($ARGV[0] eq '--logdir') {
+ if($ARGV[1]) {
+ $logdir = "$path/". $ARGV[1];
+ shift @ARGV;
+ }
+ }
else {
print STDERR "\nWarning: secureserver.pl unknown parameter: $ARGV[0]\n";
}
@@ -176,14 +180,20 @@ while(@ARGV) {
#***************************************************************************
# Initialize command line option dependent variables
#
-if(!$pidfile) {
- $pidfile = "$path/". server_pidfilename($proto, $ipvnum, $idnum);
+if($pidfile) {
+ # Use our pidfile directory to store the conf files
+ $piddir = dirname($pidfile);
+}
+else {
+ # Use the current directory to store the conf files
+ $piddir = $path;
+ $pidfile = server_pidfilename($piddir, $proto, $ipvnum, $idnum);
}
if(!$logfile) {
$logfile = server_logfilename($logdir, $proto, $ipvnum, $idnum);
}
-$conffile = "$path/${proto}_stunnel.conf";
+$conffile = "$piddir/${proto}_stunnel.conf";
$capath = abs_path($path);
$certfile = "$srcdir/". ($stuncert?"certs/$stuncert":"stunnel.pem");
@@ -195,7 +205,7 @@ my $ssltext = uc($proto) ." SSL/TLS:";
# Find out version info for the given stunnel binary
#
foreach my $veropt (('-version', '-V')) {
- foreach my $verstr (qx($stunnel $veropt 2>&1)) {
+ foreach my $verstr (qx("$stunnel" $veropt 2>&1)) {
if($verstr =~ /^stunnel (\d+)\.(\d+) on /) {
$ver_major = $1;
$ver_minor = $2;
@@ -208,7 +218,7 @@ foreach my $veropt (('-version', '-V')) {
}
last if($ver_major);
}
-if((!$ver_major) || (!$ver_minor)) {
+if((!$ver_major) || !defined($ver_minor)) {
if(-x "$stunnel" && ! -d "$stunnel") {
print "$ssltext Unknown stunnel version\n";
}
@@ -230,7 +240,7 @@ if($stunnel_version < 310) {
#***************************************************************************
# Find out if we are running on Windows using the tstunnel binary
#
-if($stunnel =~ /tstunnel(\.exe)?"?$/) {
+if($stunnel =~ /tstunnel(\.exe)?$/) {
$tstunnel_windows = 1;
# convert Cygwin/MinGW paths to Win32 format
@@ -245,7 +255,7 @@ if($stunnel_version < 400) {
if($stunnel_version >= 319) {
$socketopt = "-O a:SO_REUSEADDR=1";
}
- $cmd = "$stunnel -p $certfile -P $pidfile ";
+ $cmd = "\"$stunnel\" -p $certfile -P $pidfile ";
$cmd .= "-d $accept_port -r $target_port -f -D $loglevel ";
$cmd .= ($socketopt) ? "$socketopt " : "";
$cmd .= ">$logfile 2>&1";
@@ -271,32 +281,32 @@ if($stunnel_version >= 400) {
# but does not work together with SO_REUSEADDR being on.
$socketopt .= "\nsocket = a:SO_EXCLUSIVEADDRUSE=0";
}
- $cmd = "$stunnel $conffile ";
+ $cmd = "\"$stunnel\" $conffile ";
$cmd .= ">$logfile 2>&1";
# setup signal handler
$SIG{INT} = \&exit_signal_handler;
$SIG{TERM} = \&exit_signal_handler;
# stunnel configuration file
- if(open(STUNCONF, ">$conffile")) {
- print STUNCONF "CApath = $capath\n";
- print STUNCONF "cert = $certfile\n";
- print STUNCONF "debug = $loglevel\n";
- print STUNCONF "socket = $socketopt\n";
+ if(open(my $stunconf, ">", "$conffile")) {
+ print $stunconf "CApath = $capath\n";
+ print $stunconf "cert = $certfile\n";
+ print $stunconf "debug = $loglevel\n";
+ print $stunconf "socket = $socketopt\n";
if($fips_support) {
# disable fips in case OpenSSL doesn't support it
- print STUNCONF "fips = no\n";
+ print $stunconf "fips = no\n";
}
if(!$tstunnel_windows) {
# do not use Linux-specific options on Windows
- print STUNCONF "output = $logfile\n";
- print STUNCONF "pid = $pidfile\n";
- print STUNCONF "foreground = yes\n";
+ print $stunconf "output = $logfile\n";
+ print $stunconf "pid = $pidfile\n";
+ print $stunconf "foreground = yes\n";
}
- print STUNCONF "\n";
- print STUNCONF "[curltest]\n";
- print STUNCONF "accept = $accept_port\n";
- print STUNCONF "connect = $target_port\n";
- if(!close(STUNCONF)) {
+ print $stunconf "\n";
+ print $stunconf "[curltest]\n";
+ print $stunconf "accept = $accept_port\n";
+ print $stunconf "connect = $target_port\n";
+ if(!close($stunconf)) {
print "$ssltext Error closing file $conffile\n";
exit 1;
}
@@ -338,9 +348,9 @@ print STDERR "RUN: $cmd\n" if($verbose);
#
if($tstunnel_windows) {
# Fake pidfile for tstunnel on Windows.
- if(open(OUT, ">$pidfile")) {
- print OUT $$ . "\n";
- close(OUT);
+ if(open(my $out, ">", "$pidfile")) {
+ print $out $$ . "\n";
+ close($out);
}
# Flush output.
diff --git a/tests/server/CMakeLists.txt b/tests/server/CMakeLists.txt
index bad6edf4d..46c943a8b 100644
--- a/tests/server/CMakeLists.txt
+++ b/tests/server/CMakeLists.txt
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2009 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -50,10 +50,8 @@ function(SETUP_EXECUTABLE TEST_NAME) # ARGN are the files in the test
# to build the servers. In order to achieve proper linkage of these
# files on Win32 targets it is necessary to build the test servers
# with CURL_STATICLIB defined, independently of how libcurl is built.
- if(BUILD_SHARED_LIBS)
- set_target_properties(${TEST_NAME} PROPERTIES
- COMPILE_DEFINITIONS CURL_STATICLIB) # ${UPPER_TEST_NAME}
- endif()
+ set_target_properties(${TEST_NAME} PROPERTIES
+ COMPILE_DEFINITIONS CURL_STATICLIB) # ${UPPER_TEST_NAME}
set_target_properties(${TEST_NAME} PROPERTIES
PROJECT_LABEL "${TARGET_LABEL_PREFIX}${TEST_NAME}")
endfunction()
diff --git a/tests/server/Makefile.am b/tests/server/Makefile.am
index 45ccf231d..b08942263 100644
--- a/tests/server/Makefile.am
+++ b/tests/server/Makefile.am
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/tests/server/Makefile.in b/tests/server/Makefile.in
index c51dcea9d..f2ba09823 100644
--- a/tests/server/Makefile.in
+++ b/tests/server/Makefile.in
@@ -21,7 +21,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2009 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -125,7 +125,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.m4 \
$(top_srcdir)/m4/curl-confopts.m4 \
$(top_srcdir)/m4/curl-functions.m4 \
$(top_srcdir)/m4/curl-gnutls.m4 \
- $(top_srcdir)/m4/curl-mbedtls.m4 $(top_srcdir)/m4/curl-nss.m4 \
+ $(top_srcdir)/m4/curl-mbedtls.m4 \
$(top_srcdir)/m4/curl-openssl.m4 \
$(top_srcdir)/m4/curl-override.m4 \
$(top_srcdir)/m4/curl-reentrant.m4 \
@@ -168,6 +168,7 @@ am__objects_1 = ../../lib/fake_ntlm-mprintf.$(OBJEXT) \
../../lib/fake_ntlm-timediff.$(OBJEXT) \
../../lib/fake_ntlm-dynbuf.$(OBJEXT) \
../../lib/fake_ntlm-strdup.$(OBJEXT) \
+ ../../lib/fake_ntlm-strcase.$(OBJEXT) \
../../lib/fake_ntlm-curl_multibyte.$(OBJEXT)
am__objects_2 =
am__objects_3 = fake_ntlm-getpart.$(OBJEXT) \
@@ -189,6 +190,7 @@ am__objects_5 = ../../lib/getpart-mprintf.$(OBJEXT) \
../../lib/getpart-timediff.$(OBJEXT) \
../../lib/getpart-dynbuf.$(OBJEXT) \
../../lib/getpart-strdup.$(OBJEXT) \
+ ../../lib/getpart-strcase.$(OBJEXT) \
../../lib/getpart-curl_multibyte.$(OBJEXT)
am__objects_6 = getpart-getpart.$(OBJEXT) \
../../lib/getpart-base64.$(OBJEXT) \
@@ -207,6 +209,7 @@ am__objects_7 = ../../lib/mqttd-mprintf.$(OBJEXT) \
../../lib/mqttd-timediff.$(OBJEXT) \
../../lib/mqttd-dynbuf.$(OBJEXT) \
../../lib/mqttd-strdup.$(OBJEXT) \
+ ../../lib/mqttd-strcase.$(OBJEXT) \
../../lib/mqttd-curl_multibyte.$(OBJEXT)
am__objects_8 = mqttd-getpart.$(OBJEXT) \
../../lib/mqttd-base64.$(OBJEXT) \
@@ -227,6 +230,7 @@ am__objects_10 = ../../lib/resolve-mprintf.$(OBJEXT) \
../../lib/resolve-timediff.$(OBJEXT) \
../../lib/resolve-dynbuf.$(OBJEXT) \
../../lib/resolve-strdup.$(OBJEXT) \
+ ../../lib/resolve-strcase.$(OBJEXT) \
../../lib/resolve-curl_multibyte.$(OBJEXT)
am__objects_11 = resolve-getpart.$(OBJEXT) \
../../lib/resolve-base64.$(OBJEXT) \
@@ -246,6 +250,7 @@ am__objects_13 = ../../lib/rtspd-mprintf.$(OBJEXT) \
../../lib/rtspd-timediff.$(OBJEXT) \
../../lib/rtspd-dynbuf.$(OBJEXT) \
../../lib/rtspd-strdup.$(OBJEXT) \
+ ../../lib/rtspd-strcase.$(OBJEXT) \
../../lib/rtspd-curl_multibyte.$(OBJEXT)
am__objects_14 = rtspd-getpart.$(OBJEXT) \
../../lib/rtspd-base64.$(OBJEXT) \
@@ -265,6 +270,7 @@ am__objects_16 = ../../lib/sockfilt-mprintf.$(OBJEXT) \
../../lib/sockfilt-timediff.$(OBJEXT) \
../../lib/sockfilt-dynbuf.$(OBJEXT) \
../../lib/sockfilt-strdup.$(OBJEXT) \
+ ../../lib/sockfilt-strcase.$(OBJEXT) \
../../lib/sockfilt-curl_multibyte.$(OBJEXT)
am__objects_17 = sockfilt-getpart.$(OBJEXT) \
../../lib/sockfilt-base64.$(OBJEXT) \
@@ -286,6 +292,7 @@ am__objects_19 = ../../lib/socksd-mprintf.$(OBJEXT) \
../../lib/socksd-timediff.$(OBJEXT) \
../../lib/socksd-dynbuf.$(OBJEXT) \
../../lib/socksd-strdup.$(OBJEXT) \
+ ../../lib/socksd-strcase.$(OBJEXT) \
../../lib/socksd-curl_multibyte.$(OBJEXT)
am__objects_20 = socksd-getpart.$(OBJEXT) \
../../lib/socksd-base64.$(OBJEXT) \
@@ -305,6 +312,7 @@ am__objects_22 = ../../lib/sws-mprintf.$(OBJEXT) \
../../lib/sws-warnless.$(OBJEXT) \
../../lib/sws-timediff.$(OBJEXT) \
../../lib/sws-dynbuf.$(OBJEXT) ../../lib/sws-strdup.$(OBJEXT) \
+ ../../lib/sws-strcase.$(OBJEXT) \
../../lib/sws-curl_multibyte.$(OBJEXT)
am__objects_23 = sws-getpart.$(OBJEXT) ../../lib/sws-base64.$(OBJEXT) \
../../lib/sws-memdebug.$(OBJEXT)
@@ -324,6 +332,7 @@ am__objects_25 = ../../lib/tftpd-mprintf.$(OBJEXT) \
../../lib/tftpd-timediff.$(OBJEXT) \
../../lib/tftpd-dynbuf.$(OBJEXT) \
../../lib/tftpd-strdup.$(OBJEXT) \
+ ../../lib/tftpd-strcase.$(OBJEXT) \
../../lib/tftpd-curl_multibyte.$(OBJEXT)
am__objects_26 = tftpd-getpart.$(OBJEXT) \
../../lib/tftpd-base64.$(OBJEXT) \
@@ -357,6 +366,7 @@ am__depfiles_remade = ../../lib/$(DEPDIR)/fake_ntlm-base64.Po \
../../lib/$(DEPDIR)/fake_ntlm-memdebug.Po \
../../lib/$(DEPDIR)/fake_ntlm-mprintf.Po \
../../lib/$(DEPDIR)/fake_ntlm-nonblock.Po \
+ ../../lib/$(DEPDIR)/fake_ntlm-strcase.Po \
../../lib/$(DEPDIR)/fake_ntlm-strdup.Po \
../../lib/$(DEPDIR)/fake_ntlm-strtoofft.Po \
../../lib/$(DEPDIR)/fake_ntlm-timediff.Po \
@@ -367,6 +377,7 @@ am__depfiles_remade = ../../lib/$(DEPDIR)/fake_ntlm-base64.Po \
../../lib/$(DEPDIR)/getpart-memdebug.Po \
../../lib/$(DEPDIR)/getpart-mprintf.Po \
../../lib/$(DEPDIR)/getpart-nonblock.Po \
+ ../../lib/$(DEPDIR)/getpart-strcase.Po \
../../lib/$(DEPDIR)/getpart-strdup.Po \
../../lib/$(DEPDIR)/getpart-strtoofft.Po \
../../lib/$(DEPDIR)/getpart-timediff.Po \
@@ -378,6 +389,7 @@ am__depfiles_remade = ../../lib/$(DEPDIR)/fake_ntlm-base64.Po \
../../lib/$(DEPDIR)/mqttd-memdebug.Po \
../../lib/$(DEPDIR)/mqttd-mprintf.Po \
../../lib/$(DEPDIR)/mqttd-nonblock.Po \
+ ../../lib/$(DEPDIR)/mqttd-strcase.Po \
../../lib/$(DEPDIR)/mqttd-strdup.Po \
../../lib/$(DEPDIR)/mqttd-strtoofft.Po \
../../lib/$(DEPDIR)/mqttd-timediff.Po \
@@ -388,6 +400,7 @@ am__depfiles_remade = ../../lib/$(DEPDIR)/fake_ntlm-base64.Po \
../../lib/$(DEPDIR)/resolve-memdebug.Po \
../../lib/$(DEPDIR)/resolve-mprintf.Po \
../../lib/$(DEPDIR)/resolve-nonblock.Po \
+ ../../lib/$(DEPDIR)/resolve-strcase.Po \
../../lib/$(DEPDIR)/resolve-strdup.Po \
../../lib/$(DEPDIR)/resolve-strtoofft.Po \
../../lib/$(DEPDIR)/resolve-timediff.Po \
@@ -398,6 +411,7 @@ am__depfiles_remade = ../../lib/$(DEPDIR)/fake_ntlm-base64.Po \
../../lib/$(DEPDIR)/rtspd-memdebug.Po \
../../lib/$(DEPDIR)/rtspd-mprintf.Po \
../../lib/$(DEPDIR)/rtspd-nonblock.Po \
+ ../../lib/$(DEPDIR)/rtspd-strcase.Po \
../../lib/$(DEPDIR)/rtspd-strdup.Po \
../../lib/$(DEPDIR)/rtspd-strtoofft.Po \
../../lib/$(DEPDIR)/rtspd-timediff.Po \
@@ -409,6 +423,7 @@ am__depfiles_remade = ../../lib/$(DEPDIR)/fake_ntlm-base64.Po \
../../lib/$(DEPDIR)/sockfilt-memdebug.Po \
../../lib/$(DEPDIR)/sockfilt-mprintf.Po \
../../lib/$(DEPDIR)/sockfilt-nonblock.Po \
+ ../../lib/$(DEPDIR)/sockfilt-strcase.Po \
../../lib/$(DEPDIR)/sockfilt-strdup.Po \
../../lib/$(DEPDIR)/sockfilt-strtoofft.Po \
../../lib/$(DEPDIR)/sockfilt-timediff.Po \
@@ -420,6 +435,7 @@ am__depfiles_remade = ../../lib/$(DEPDIR)/fake_ntlm-base64.Po \
../../lib/$(DEPDIR)/socksd-memdebug.Po \
../../lib/$(DEPDIR)/socksd-mprintf.Po \
../../lib/$(DEPDIR)/socksd-nonblock.Po \
+ ../../lib/$(DEPDIR)/socksd-strcase.Po \
../../lib/$(DEPDIR)/socksd-strdup.Po \
../../lib/$(DEPDIR)/socksd-strtoofft.Po \
../../lib/$(DEPDIR)/socksd-timediff.Po \
@@ -431,6 +447,7 @@ am__depfiles_remade = ../../lib/$(DEPDIR)/fake_ntlm-base64.Po \
../../lib/$(DEPDIR)/sws-memdebug.Po \
../../lib/$(DEPDIR)/sws-mprintf.Po \
../../lib/$(DEPDIR)/sws-nonblock.Po \
+ ../../lib/$(DEPDIR)/sws-strcase.Po \
../../lib/$(DEPDIR)/sws-strdup.Po \
../../lib/$(DEPDIR)/sws-strtoofft.Po \
../../lib/$(DEPDIR)/sws-timediff.Po \
@@ -441,6 +458,7 @@ am__depfiles_remade = ../../lib/$(DEPDIR)/fake_ntlm-base64.Po \
../../lib/$(DEPDIR)/tftpd-memdebug.Po \
../../lib/$(DEPDIR)/tftpd-mprintf.Po \
../../lib/$(DEPDIR)/tftpd-nonblock.Po \
+ ../../lib/$(DEPDIR)/tftpd-strcase.Po \
../../lib/$(DEPDIR)/tftpd-strdup.Po \
../../lib/$(DEPDIR)/tftpd-strtoofft.Po \
../../lib/$(DEPDIR)/tftpd-timediff.Po \
@@ -515,6 +533,8 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APACHECTL = @APACHECTL@
+APXS = @APXS@
AR = @AR@
AR_FLAGS = @AR_FLAGS@
AS = @AS@
@@ -523,6 +543,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@
+CADDY = @CADDY@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -584,6 +605,8 @@ HAVE_LIBZ = @HAVE_LIBZ@
HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
HAVE_PROTO_BSDSOCKET_H = @HAVE_PROTO_BSDSOCKET_H@
HAVE_ZSTD = @HAVE_ZSTD@
+HTTPD = @HTTPD@
+HTTPD_NGHTTPX = @HTTPD_NGHTTPX@
IDN_ENABLED = @IDN_ENABLED@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -613,7 +636,6 @@ MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
NROFF = @NROFF@
-NSS_LIBS = @NSS_LIBS@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
@@ -644,6 +666,7 @@ SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@
SUPPORT_FEATURES = @SUPPORT_FEATURES@
SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_NGHTTPX = @TEST_NGHTTPX@
USE_ARES = @USE_ARES@
USE_BEARSSL = @USE_BEARSSL@
USE_GNUTLS = @USE_GNUTLS@
@@ -657,9 +680,8 @@ USE_NGHTTP2 = @USE_NGHTTP2@
USE_NGHTTP3 = @USE_NGHTTP3@
USE_NGTCP2 = @USE_NGTCP2@
USE_NGTCP2_CRYPTO_GNUTLS = @USE_NGTCP2_CRYPTO_GNUTLS@
-USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@
+USE_NGTCP2_CRYPTO_QUICTLS = @USE_NGTCP2_CRYPTO_QUICTLS@
USE_NGTCP2_CRYPTO_WOLFSSL = @USE_NGTCP2_CRYPTO_WOLFSSL@
-USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_RUSTLS = @USE_RUSTLS@
@@ -738,7 +760,7 @@ top_srcdir = @top_srcdir@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -777,6 +799,7 @@ CURLX_SRCS = \
../../lib/timediff.c \
../../lib/dynbuf.c \
../../lib/strdup.c \
+ ../../lib/strcase.c \
../../lib/curl_multibyte.c
CURLX_HDRS = \
@@ -932,6 +955,8 @@ disabled$(EXEEXT): $(disabled_OBJECTS) $(disabled_DEPENDENCIES) $(EXTRA_disabled
../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/fake_ntlm-strdup.$(OBJEXT): ../../lib/$(am__dirstamp) \
../../lib/$(DEPDIR)/$(am__dirstamp)
+../../lib/fake_ntlm-strcase.$(OBJEXT): ../../lib/$(am__dirstamp) \
+ ../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/fake_ntlm-curl_multibyte.$(OBJEXT): \
../../lib/$(am__dirstamp) ../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/fake_ntlm-base64.$(OBJEXT): ../../lib/$(am__dirstamp) \
@@ -956,6 +981,8 @@ fake_ntlm$(EXEEXT): $(fake_ntlm_OBJECTS) $(fake_ntlm_DEPENDENCIES) $(EXTRA_fake_
../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/getpart-strdup.$(OBJEXT): ../../lib/$(am__dirstamp) \
../../lib/$(DEPDIR)/$(am__dirstamp)
+../../lib/getpart-strcase.$(OBJEXT): ../../lib/$(am__dirstamp) \
+ ../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/getpart-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/getpart-base64.$(OBJEXT): ../../lib/$(am__dirstamp) \
@@ -980,6 +1007,8 @@ getpart$(EXEEXT): $(getpart_OBJECTS) $(getpart_DEPENDENCIES) $(EXTRA_getpart_DEP
../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/mqttd-strdup.$(OBJEXT): ../../lib/$(am__dirstamp) \
../../lib/$(DEPDIR)/$(am__dirstamp)
+../../lib/mqttd-strcase.$(OBJEXT): ../../lib/$(am__dirstamp) \
+ ../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/mqttd-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/mqttd-base64.$(OBJEXT): ../../lib/$(am__dirstamp) \
@@ -1006,6 +1035,8 @@ mqttd$(EXEEXT): $(mqttd_OBJECTS) $(mqttd_DEPENDENCIES) $(EXTRA_mqttd_DEPENDENCIE
../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/resolve-strdup.$(OBJEXT): ../../lib/$(am__dirstamp) \
../../lib/$(DEPDIR)/$(am__dirstamp)
+../../lib/resolve-strcase.$(OBJEXT): ../../lib/$(am__dirstamp) \
+ ../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/resolve-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/resolve-base64.$(OBJEXT): ../../lib/$(am__dirstamp) \
@@ -1030,6 +1061,8 @@ resolve$(EXEEXT): $(resolve_OBJECTS) $(resolve_DEPENDENCIES) $(EXTRA_resolve_DEP
../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/rtspd-strdup.$(OBJEXT): ../../lib/$(am__dirstamp) \
../../lib/$(DEPDIR)/$(am__dirstamp)
+../../lib/rtspd-strcase.$(OBJEXT): ../../lib/$(am__dirstamp) \
+ ../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/rtspd-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/rtspd-base64.$(OBJEXT): ../../lib/$(am__dirstamp) \
@@ -1054,6 +1087,8 @@ rtspd$(EXEEXT): $(rtspd_OBJECTS) $(rtspd_DEPENDENCIES) $(EXTRA_rtspd_DEPENDENCIE
../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/sockfilt-strdup.$(OBJEXT): ../../lib/$(am__dirstamp) \
../../lib/$(DEPDIR)/$(am__dirstamp)
+../../lib/sockfilt-strcase.$(OBJEXT): ../../lib/$(am__dirstamp) \
+ ../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/sockfilt-curl_multibyte.$(OBJEXT): \
../../lib/$(am__dirstamp) ../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/sockfilt-base64.$(OBJEXT): ../../lib/$(am__dirstamp) \
@@ -1080,6 +1115,8 @@ sockfilt$(EXEEXT): $(sockfilt_OBJECTS) $(sockfilt_DEPENDENCIES) $(EXTRA_sockfilt
../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/socksd-strdup.$(OBJEXT): ../../lib/$(am__dirstamp) \
../../lib/$(DEPDIR)/$(am__dirstamp)
+../../lib/socksd-strcase.$(OBJEXT): ../../lib/$(am__dirstamp) \
+ ../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/socksd-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/socksd-base64.$(OBJEXT): ../../lib/$(am__dirstamp) \
@@ -1106,6 +1143,8 @@ socksd$(EXEEXT): $(socksd_OBJECTS) $(socksd_DEPENDENCIES) $(EXTRA_socksd_DEPENDE
../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/sws-strdup.$(OBJEXT): ../../lib/$(am__dirstamp) \
../../lib/$(DEPDIR)/$(am__dirstamp)
+../../lib/sws-strcase.$(OBJEXT): ../../lib/$(am__dirstamp) \
+ ../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/sws-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/sws-base64.$(OBJEXT): ../../lib/$(am__dirstamp) \
@@ -1132,6 +1171,8 @@ sws$(EXEEXT): $(sws_OBJECTS) $(sws_DEPENDENCIES) $(EXTRA_sws_DEPENDENCIES)
../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/tftpd-strdup.$(OBJEXT): ../../lib/$(am__dirstamp) \
../../lib/$(DEPDIR)/$(am__dirstamp)
+../../lib/tftpd-strcase.$(OBJEXT): ../../lib/$(am__dirstamp) \
+ ../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/tftpd-curl_multibyte.$(OBJEXT): ../../lib/$(am__dirstamp) \
../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/tftpd-base64.$(OBJEXT): ../../lib/$(am__dirstamp) \
@@ -1156,6 +1197,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/fake_ntlm-memdebug.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/fake_ntlm-mprintf.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/fake_ntlm-nonblock.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/fake_ntlm-strcase.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/fake_ntlm-strdup.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/fake_ntlm-strtoofft.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/fake_ntlm-timediff.Po@am__quote@ # am--include-marker
@@ -1166,6 +1208,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/getpart-memdebug.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/getpart-mprintf.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/getpart-nonblock.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/getpart-strcase.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/getpart-strdup.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/getpart-strtoofft.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/getpart-timediff.Po@am__quote@ # am--include-marker
@@ -1177,6 +1220,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/mqttd-memdebug.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/mqttd-mprintf.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/mqttd-nonblock.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/mqttd-strcase.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/mqttd-strdup.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/mqttd-strtoofft.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/mqttd-timediff.Po@am__quote@ # am--include-marker
@@ -1187,6 +1231,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/resolve-memdebug.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/resolve-mprintf.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/resolve-nonblock.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/resolve-strcase.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/resolve-strdup.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/resolve-strtoofft.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/resolve-timediff.Po@am__quote@ # am--include-marker
@@ -1197,6 +1242,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/rtspd-memdebug.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/rtspd-mprintf.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/rtspd-nonblock.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/rtspd-strcase.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/rtspd-strdup.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/rtspd-strtoofft.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/rtspd-timediff.Po@am__quote@ # am--include-marker
@@ -1208,6 +1254,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sockfilt-memdebug.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sockfilt-mprintf.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sockfilt-nonblock.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sockfilt-strcase.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sockfilt-strdup.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sockfilt-strtoofft.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sockfilt-timediff.Po@am__quote@ # am--include-marker
@@ -1219,6 +1266,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/socksd-memdebug.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/socksd-mprintf.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/socksd-nonblock.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/socksd-strcase.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/socksd-strdup.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/socksd-strtoofft.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/socksd-timediff.Po@am__quote@ # am--include-marker
@@ -1230,6 +1278,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sws-memdebug.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sws-mprintf.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sws-nonblock.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sws-strcase.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sws-strdup.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sws-strtoofft.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sws-timediff.Po@am__quote@ # am--include-marker
@@ -1240,6 +1289,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/tftpd-memdebug.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/tftpd-mprintf.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/tftpd-nonblock.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/tftpd-strcase.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/tftpd-strdup.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/tftpd-strtoofft.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/tftpd-timediff.Po@am__quote@ # am--include-marker
@@ -1414,6 +1464,20 @@ disabled-disabled.obj: disabled.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fake_ntlm_CFLAGS) $(CFLAGS) -c -o ../../lib/fake_ntlm-strdup.obj `if test -f '../../lib/strdup.c'; then $(CYGPATH_W) '../../lib/strdup.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strdup.c'; fi`
+../../lib/fake_ntlm-strcase.o: ../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fake_ntlm_CFLAGS) $(CFLAGS) -MT ../../lib/fake_ntlm-strcase.o -MD -MP -MF ../../lib/$(DEPDIR)/fake_ntlm-strcase.Tpo -c -o ../../lib/fake_ntlm-strcase.o `test -f '../../lib/strcase.c' || echo '$(srcdir)/'`../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/fake_ntlm-strcase.Tpo ../../lib/$(DEPDIR)/fake_ntlm-strcase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/strcase.c' object='../../lib/fake_ntlm-strcase.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fake_ntlm_CFLAGS) $(CFLAGS) -c -o ../../lib/fake_ntlm-strcase.o `test -f '../../lib/strcase.c' || echo '$(srcdir)/'`../../lib/strcase.c
+
+../../lib/fake_ntlm-strcase.obj: ../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fake_ntlm_CFLAGS) $(CFLAGS) -MT ../../lib/fake_ntlm-strcase.obj -MD -MP -MF ../../lib/$(DEPDIR)/fake_ntlm-strcase.Tpo -c -o ../../lib/fake_ntlm-strcase.obj `if test -f '../../lib/strcase.c'; then $(CYGPATH_W) '../../lib/strcase.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strcase.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/fake_ntlm-strcase.Tpo ../../lib/$(DEPDIR)/fake_ntlm-strcase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/strcase.c' object='../../lib/fake_ntlm-strcase.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fake_ntlm_CFLAGS) $(CFLAGS) -c -o ../../lib/fake_ntlm-strcase.obj `if test -f '../../lib/strcase.c'; then $(CYGPATH_W) '../../lib/strcase.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strcase.c'; fi`
+
../../lib/fake_ntlm-curl_multibyte.o: ../../lib/curl_multibyte.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fake_ntlm_CFLAGS) $(CFLAGS) -MT ../../lib/fake_ntlm-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/fake_ntlm-curl_multibyte.Tpo -c -o ../../lib/fake_ntlm-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/fake_ntlm-curl_multibyte.Tpo ../../lib/$(DEPDIR)/fake_ntlm-curl_multibyte.Po
@@ -1596,6 +1660,20 @@ fake_ntlm-fake_ntlm.obj: fake_ntlm.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o ../../lib/getpart-strdup.obj `if test -f '../../lib/strdup.c'; then $(CYGPATH_W) '../../lib/strdup.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strdup.c'; fi`
+../../lib/getpart-strcase.o: ../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT ../../lib/getpart-strcase.o -MD -MP -MF ../../lib/$(DEPDIR)/getpart-strcase.Tpo -c -o ../../lib/getpart-strcase.o `test -f '../../lib/strcase.c' || echo '$(srcdir)/'`../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/getpart-strcase.Tpo ../../lib/$(DEPDIR)/getpart-strcase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/strcase.c' object='../../lib/getpart-strcase.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o ../../lib/getpart-strcase.o `test -f '../../lib/strcase.c' || echo '$(srcdir)/'`../../lib/strcase.c
+
+../../lib/getpart-strcase.obj: ../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT ../../lib/getpart-strcase.obj -MD -MP -MF ../../lib/$(DEPDIR)/getpart-strcase.Tpo -c -o ../../lib/getpart-strcase.obj `if test -f '../../lib/strcase.c'; then $(CYGPATH_W) '../../lib/strcase.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strcase.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/getpart-strcase.Tpo ../../lib/$(DEPDIR)/getpart-strcase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/strcase.c' object='../../lib/getpart-strcase.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -c -o ../../lib/getpart-strcase.obj `if test -f '../../lib/strcase.c'; then $(CYGPATH_W) '../../lib/strcase.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strcase.c'; fi`
+
../../lib/getpart-curl_multibyte.o: ../../lib/curl_multibyte.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(getpart_CFLAGS) $(CFLAGS) -MT ../../lib/getpart-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/getpart-curl_multibyte.Tpo -c -o ../../lib/getpart-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/getpart-curl_multibyte.Tpo ../../lib/$(DEPDIR)/getpart-curl_multibyte.Po
@@ -1764,6 +1842,20 @@ getpart-testpart.obj: testpart.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mqttd_CFLAGS) $(CFLAGS) -c -o ../../lib/mqttd-strdup.obj `if test -f '../../lib/strdup.c'; then $(CYGPATH_W) '../../lib/strdup.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strdup.c'; fi`
+../../lib/mqttd-strcase.o: ../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mqttd_CFLAGS) $(CFLAGS) -MT ../../lib/mqttd-strcase.o -MD -MP -MF ../../lib/$(DEPDIR)/mqttd-strcase.Tpo -c -o ../../lib/mqttd-strcase.o `test -f '../../lib/strcase.c' || echo '$(srcdir)/'`../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/mqttd-strcase.Tpo ../../lib/$(DEPDIR)/mqttd-strcase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/strcase.c' object='../../lib/mqttd-strcase.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mqttd_CFLAGS) $(CFLAGS) -c -o ../../lib/mqttd-strcase.o `test -f '../../lib/strcase.c' || echo '$(srcdir)/'`../../lib/strcase.c
+
+../../lib/mqttd-strcase.obj: ../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mqttd_CFLAGS) $(CFLAGS) -MT ../../lib/mqttd-strcase.obj -MD -MP -MF ../../lib/$(DEPDIR)/mqttd-strcase.Tpo -c -o ../../lib/mqttd-strcase.obj `if test -f '../../lib/strcase.c'; then $(CYGPATH_W) '../../lib/strcase.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strcase.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/mqttd-strcase.Tpo ../../lib/$(DEPDIR)/mqttd-strcase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/strcase.c' object='../../lib/mqttd-strcase.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mqttd_CFLAGS) $(CFLAGS) -c -o ../../lib/mqttd-strcase.obj `if test -f '../../lib/strcase.c'; then $(CYGPATH_W) '../../lib/strcase.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strcase.c'; fi`
+
../../lib/mqttd-curl_multibyte.o: ../../lib/curl_multibyte.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mqttd_CFLAGS) $(CFLAGS) -MT ../../lib/mqttd-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/mqttd-curl_multibyte.Tpo -c -o ../../lib/mqttd-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/mqttd-curl_multibyte.Tpo ../../lib/$(DEPDIR)/mqttd-curl_multibyte.Po
@@ -1960,6 +2052,20 @@ mqttd-mqttd.obj: mqttd.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o ../../lib/resolve-strdup.obj `if test -f '../../lib/strdup.c'; then $(CYGPATH_W) '../../lib/strdup.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strdup.c'; fi`
+../../lib/resolve-strcase.o: ../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT ../../lib/resolve-strcase.o -MD -MP -MF ../../lib/$(DEPDIR)/resolve-strcase.Tpo -c -o ../../lib/resolve-strcase.o `test -f '../../lib/strcase.c' || echo '$(srcdir)/'`../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/resolve-strcase.Tpo ../../lib/$(DEPDIR)/resolve-strcase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/strcase.c' object='../../lib/resolve-strcase.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o ../../lib/resolve-strcase.o `test -f '../../lib/strcase.c' || echo '$(srcdir)/'`../../lib/strcase.c
+
+../../lib/resolve-strcase.obj: ../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT ../../lib/resolve-strcase.obj -MD -MP -MF ../../lib/$(DEPDIR)/resolve-strcase.Tpo -c -o ../../lib/resolve-strcase.obj `if test -f '../../lib/strcase.c'; then $(CYGPATH_W) '../../lib/strcase.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strcase.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/resolve-strcase.Tpo ../../lib/$(DEPDIR)/resolve-strcase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/strcase.c' object='../../lib/resolve-strcase.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -c -o ../../lib/resolve-strcase.obj `if test -f '../../lib/strcase.c'; then $(CYGPATH_W) '../../lib/strcase.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strcase.c'; fi`
+
../../lib/resolve-curl_multibyte.o: ../../lib/curl_multibyte.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(resolve_CFLAGS) $(CFLAGS) -MT ../../lib/resolve-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/resolve-curl_multibyte.Tpo -c -o ../../lib/resolve-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/resolve-curl_multibyte.Tpo ../../lib/$(DEPDIR)/resolve-curl_multibyte.Po
@@ -2142,6 +2248,20 @@ resolve-resolve.obj: resolve.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o ../../lib/rtspd-strdup.obj `if test -f '../../lib/strdup.c'; then $(CYGPATH_W) '../../lib/strdup.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strdup.c'; fi`
+../../lib/rtspd-strcase.o: ../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT ../../lib/rtspd-strcase.o -MD -MP -MF ../../lib/$(DEPDIR)/rtspd-strcase.Tpo -c -o ../../lib/rtspd-strcase.o `test -f '../../lib/strcase.c' || echo '$(srcdir)/'`../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/rtspd-strcase.Tpo ../../lib/$(DEPDIR)/rtspd-strcase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/strcase.c' object='../../lib/rtspd-strcase.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o ../../lib/rtspd-strcase.o `test -f '../../lib/strcase.c' || echo '$(srcdir)/'`../../lib/strcase.c
+
+../../lib/rtspd-strcase.obj: ../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT ../../lib/rtspd-strcase.obj -MD -MP -MF ../../lib/$(DEPDIR)/rtspd-strcase.Tpo -c -o ../../lib/rtspd-strcase.obj `if test -f '../../lib/strcase.c'; then $(CYGPATH_W) '../../lib/strcase.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strcase.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/rtspd-strcase.Tpo ../../lib/$(DEPDIR)/rtspd-strcase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/strcase.c' object='../../lib/rtspd-strcase.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -c -o ../../lib/rtspd-strcase.obj `if test -f '../../lib/strcase.c'; then $(CYGPATH_W) '../../lib/strcase.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strcase.c'; fi`
+
../../lib/rtspd-curl_multibyte.o: ../../lib/curl_multibyte.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rtspd_CFLAGS) $(CFLAGS) -MT ../../lib/rtspd-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/rtspd-curl_multibyte.Tpo -c -o ../../lib/rtspd-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/rtspd-curl_multibyte.Tpo ../../lib/$(DEPDIR)/rtspd-curl_multibyte.Po
@@ -2324,6 +2444,20 @@ rtspd-rtspd.obj: rtspd.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o ../../lib/sockfilt-strdup.obj `if test -f '../../lib/strdup.c'; then $(CYGPATH_W) '../../lib/strdup.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strdup.c'; fi`
+../../lib/sockfilt-strcase.o: ../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT ../../lib/sockfilt-strcase.o -MD -MP -MF ../../lib/$(DEPDIR)/sockfilt-strcase.Tpo -c -o ../../lib/sockfilt-strcase.o `test -f '../../lib/strcase.c' || echo '$(srcdir)/'`../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/sockfilt-strcase.Tpo ../../lib/$(DEPDIR)/sockfilt-strcase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/strcase.c' object='../../lib/sockfilt-strcase.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o ../../lib/sockfilt-strcase.o `test -f '../../lib/strcase.c' || echo '$(srcdir)/'`../../lib/strcase.c
+
+../../lib/sockfilt-strcase.obj: ../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT ../../lib/sockfilt-strcase.obj -MD -MP -MF ../../lib/$(DEPDIR)/sockfilt-strcase.Tpo -c -o ../../lib/sockfilt-strcase.obj `if test -f '../../lib/strcase.c'; then $(CYGPATH_W) '../../lib/strcase.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strcase.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/sockfilt-strcase.Tpo ../../lib/$(DEPDIR)/sockfilt-strcase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/strcase.c' object='../../lib/sockfilt-strcase.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o ../../lib/sockfilt-strcase.obj `if test -f '../../lib/strcase.c'; then $(CYGPATH_W) '../../lib/strcase.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strcase.c'; fi`
+
../../lib/sockfilt-curl_multibyte.o: ../../lib/curl_multibyte.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT ../../lib/sockfilt-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/sockfilt-curl_multibyte.Tpo -c -o ../../lib/sockfilt-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/sockfilt-curl_multibyte.Tpo ../../lib/$(DEPDIR)/sockfilt-curl_multibyte.Po
@@ -2520,6 +2654,20 @@ sockfilt-sockfilt.obj: sockfilt.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o ../../lib/socksd-strdup.obj `if test -f '../../lib/strdup.c'; then $(CYGPATH_W) '../../lib/strdup.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strdup.c'; fi`
+../../lib/socksd-strcase.o: ../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT ../../lib/socksd-strcase.o -MD -MP -MF ../../lib/$(DEPDIR)/socksd-strcase.Tpo -c -o ../../lib/socksd-strcase.o `test -f '../../lib/strcase.c' || echo '$(srcdir)/'`../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/socksd-strcase.Tpo ../../lib/$(DEPDIR)/socksd-strcase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/strcase.c' object='../../lib/socksd-strcase.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o ../../lib/socksd-strcase.o `test -f '../../lib/strcase.c' || echo '$(srcdir)/'`../../lib/strcase.c
+
+../../lib/socksd-strcase.obj: ../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT ../../lib/socksd-strcase.obj -MD -MP -MF ../../lib/$(DEPDIR)/socksd-strcase.Tpo -c -o ../../lib/socksd-strcase.obj `if test -f '../../lib/strcase.c'; then $(CYGPATH_W) '../../lib/strcase.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strcase.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/socksd-strcase.Tpo ../../lib/$(DEPDIR)/socksd-strcase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/strcase.c' object='../../lib/socksd-strcase.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o ../../lib/socksd-strcase.obj `if test -f '../../lib/strcase.c'; then $(CYGPATH_W) '../../lib/strcase.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strcase.c'; fi`
+
../../lib/socksd-curl_multibyte.o: ../../lib/curl_multibyte.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT ../../lib/socksd-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/socksd-curl_multibyte.Tpo -c -o ../../lib/socksd-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/socksd-curl_multibyte.Tpo ../../lib/$(DEPDIR)/socksd-curl_multibyte.Po
@@ -2716,6 +2864,20 @@ socksd-socksd.obj: socksd.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o ../../lib/sws-strdup.obj `if test -f '../../lib/strdup.c'; then $(CYGPATH_W) '../../lib/strdup.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strdup.c'; fi`
+../../lib/sws-strcase.o: ../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT ../../lib/sws-strcase.o -MD -MP -MF ../../lib/$(DEPDIR)/sws-strcase.Tpo -c -o ../../lib/sws-strcase.o `test -f '../../lib/strcase.c' || echo '$(srcdir)/'`../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/sws-strcase.Tpo ../../lib/$(DEPDIR)/sws-strcase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/strcase.c' object='../../lib/sws-strcase.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o ../../lib/sws-strcase.o `test -f '../../lib/strcase.c' || echo '$(srcdir)/'`../../lib/strcase.c
+
+../../lib/sws-strcase.obj: ../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT ../../lib/sws-strcase.obj -MD -MP -MF ../../lib/$(DEPDIR)/sws-strcase.Tpo -c -o ../../lib/sws-strcase.obj `if test -f '../../lib/strcase.c'; then $(CYGPATH_W) '../../lib/strcase.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strcase.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/sws-strcase.Tpo ../../lib/$(DEPDIR)/sws-strcase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/strcase.c' object='../../lib/sws-strcase.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o ../../lib/sws-strcase.obj `if test -f '../../lib/strcase.c'; then $(CYGPATH_W) '../../lib/strcase.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strcase.c'; fi`
+
../../lib/sws-curl_multibyte.o: ../../lib/curl_multibyte.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT ../../lib/sws-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/sws-curl_multibyte.Tpo -c -o ../../lib/sws-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/sws-curl_multibyte.Tpo ../../lib/$(DEPDIR)/sws-curl_multibyte.Po
@@ -2912,6 +3074,20 @@ sws-sws.obj: sws.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o ../../lib/tftpd-strdup.obj `if test -f '../../lib/strdup.c'; then $(CYGPATH_W) '../../lib/strdup.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strdup.c'; fi`
+../../lib/tftpd-strcase.o: ../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT ../../lib/tftpd-strcase.o -MD -MP -MF ../../lib/$(DEPDIR)/tftpd-strcase.Tpo -c -o ../../lib/tftpd-strcase.o `test -f '../../lib/strcase.c' || echo '$(srcdir)/'`../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/tftpd-strcase.Tpo ../../lib/$(DEPDIR)/tftpd-strcase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/strcase.c' object='../../lib/tftpd-strcase.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o ../../lib/tftpd-strcase.o `test -f '../../lib/strcase.c' || echo '$(srcdir)/'`../../lib/strcase.c
+
+../../lib/tftpd-strcase.obj: ../../lib/strcase.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT ../../lib/tftpd-strcase.obj -MD -MP -MF ../../lib/$(DEPDIR)/tftpd-strcase.Tpo -c -o ../../lib/tftpd-strcase.obj `if test -f '../../lib/strcase.c'; then $(CYGPATH_W) '../../lib/strcase.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strcase.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/tftpd-strcase.Tpo ../../lib/$(DEPDIR)/tftpd-strcase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../../lib/strcase.c' object='../../lib/tftpd-strcase.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -c -o ../../lib/tftpd-strcase.obj `if test -f '../../lib/strcase.c'; then $(CYGPATH_W) '../../lib/strcase.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strcase.c'; fi`
+
../../lib/tftpd-curl_multibyte.o: ../../lib/curl_multibyte.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tftpd_CFLAGS) $(CFLAGS) -MT ../../lib/tftpd-curl_multibyte.o -MD -MP -MF ../../lib/$(DEPDIR)/tftpd-curl_multibyte.Tpo -c -o ../../lib/tftpd-curl_multibyte.o `test -f '../../lib/curl_multibyte.c' || echo '$(srcdir)/'`../../lib/curl_multibyte.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/tftpd-curl_multibyte.Tpo ../../lib/$(DEPDIR)/tftpd-curl_multibyte.Po
@@ -3135,6 +3311,7 @@ distclean: distclean-am
-rm -f ../../lib/$(DEPDIR)/fake_ntlm-memdebug.Po
-rm -f ../../lib/$(DEPDIR)/fake_ntlm-mprintf.Po
-rm -f ../../lib/$(DEPDIR)/fake_ntlm-nonblock.Po
+ -rm -f ../../lib/$(DEPDIR)/fake_ntlm-strcase.Po
-rm -f ../../lib/$(DEPDIR)/fake_ntlm-strdup.Po
-rm -f ../../lib/$(DEPDIR)/fake_ntlm-strtoofft.Po
-rm -f ../../lib/$(DEPDIR)/fake_ntlm-timediff.Po
@@ -3145,6 +3322,7 @@ distclean: distclean-am
-rm -f ../../lib/$(DEPDIR)/getpart-memdebug.Po
-rm -f ../../lib/$(DEPDIR)/getpart-mprintf.Po
-rm -f ../../lib/$(DEPDIR)/getpart-nonblock.Po
+ -rm -f ../../lib/$(DEPDIR)/getpart-strcase.Po
-rm -f ../../lib/$(DEPDIR)/getpart-strdup.Po
-rm -f ../../lib/$(DEPDIR)/getpart-strtoofft.Po
-rm -f ../../lib/$(DEPDIR)/getpart-timediff.Po
@@ -3156,6 +3334,7 @@ distclean: distclean-am
-rm -f ../../lib/$(DEPDIR)/mqttd-memdebug.Po
-rm -f ../../lib/$(DEPDIR)/mqttd-mprintf.Po
-rm -f ../../lib/$(DEPDIR)/mqttd-nonblock.Po
+ -rm -f ../../lib/$(DEPDIR)/mqttd-strcase.Po
-rm -f ../../lib/$(DEPDIR)/mqttd-strdup.Po
-rm -f ../../lib/$(DEPDIR)/mqttd-strtoofft.Po
-rm -f ../../lib/$(DEPDIR)/mqttd-timediff.Po
@@ -3166,6 +3345,7 @@ distclean: distclean-am
-rm -f ../../lib/$(DEPDIR)/resolve-memdebug.Po
-rm -f ../../lib/$(DEPDIR)/resolve-mprintf.Po
-rm -f ../../lib/$(DEPDIR)/resolve-nonblock.Po
+ -rm -f ../../lib/$(DEPDIR)/resolve-strcase.Po
-rm -f ../../lib/$(DEPDIR)/resolve-strdup.Po
-rm -f ../../lib/$(DEPDIR)/resolve-strtoofft.Po
-rm -f ../../lib/$(DEPDIR)/resolve-timediff.Po
@@ -3176,6 +3356,7 @@ distclean: distclean-am
-rm -f ../../lib/$(DEPDIR)/rtspd-memdebug.Po
-rm -f ../../lib/$(DEPDIR)/rtspd-mprintf.Po
-rm -f ../../lib/$(DEPDIR)/rtspd-nonblock.Po
+ -rm -f ../../lib/$(DEPDIR)/rtspd-strcase.Po
-rm -f ../../lib/$(DEPDIR)/rtspd-strdup.Po
-rm -f ../../lib/$(DEPDIR)/rtspd-strtoofft.Po
-rm -f ../../lib/$(DEPDIR)/rtspd-timediff.Po
@@ -3187,6 +3368,7 @@ distclean: distclean-am
-rm -f ../../lib/$(DEPDIR)/sockfilt-memdebug.Po
-rm -f ../../lib/$(DEPDIR)/sockfilt-mprintf.Po
-rm -f ../../lib/$(DEPDIR)/sockfilt-nonblock.Po
+ -rm -f ../../lib/$(DEPDIR)/sockfilt-strcase.Po
-rm -f ../../lib/$(DEPDIR)/sockfilt-strdup.Po
-rm -f ../../lib/$(DEPDIR)/sockfilt-strtoofft.Po
-rm -f ../../lib/$(DEPDIR)/sockfilt-timediff.Po
@@ -3198,6 +3380,7 @@ distclean: distclean-am
-rm -f ../../lib/$(DEPDIR)/socksd-memdebug.Po
-rm -f ../../lib/$(DEPDIR)/socksd-mprintf.Po
-rm -f ../../lib/$(DEPDIR)/socksd-nonblock.Po
+ -rm -f ../../lib/$(DEPDIR)/socksd-strcase.Po
-rm -f ../../lib/$(DEPDIR)/socksd-strdup.Po
-rm -f ../../lib/$(DEPDIR)/socksd-strtoofft.Po
-rm -f ../../lib/$(DEPDIR)/socksd-timediff.Po
@@ -3209,6 +3392,7 @@ distclean: distclean-am
-rm -f ../../lib/$(DEPDIR)/sws-memdebug.Po
-rm -f ../../lib/$(DEPDIR)/sws-mprintf.Po
-rm -f ../../lib/$(DEPDIR)/sws-nonblock.Po
+ -rm -f ../../lib/$(DEPDIR)/sws-strcase.Po
-rm -f ../../lib/$(DEPDIR)/sws-strdup.Po
-rm -f ../../lib/$(DEPDIR)/sws-strtoofft.Po
-rm -f ../../lib/$(DEPDIR)/sws-timediff.Po
@@ -3219,6 +3403,7 @@ distclean: distclean-am
-rm -f ../../lib/$(DEPDIR)/tftpd-memdebug.Po
-rm -f ../../lib/$(DEPDIR)/tftpd-mprintf.Po
-rm -f ../../lib/$(DEPDIR)/tftpd-nonblock.Po
+ -rm -f ../../lib/$(DEPDIR)/tftpd-strcase.Po
-rm -f ../../lib/$(DEPDIR)/tftpd-strdup.Po
-rm -f ../../lib/$(DEPDIR)/tftpd-strtoofft.Po
-rm -f ../../lib/$(DEPDIR)/tftpd-timediff.Po
@@ -3301,6 +3486,7 @@ maintainer-clean: maintainer-clean-am
-rm -f ../../lib/$(DEPDIR)/fake_ntlm-memdebug.Po
-rm -f ../../lib/$(DEPDIR)/fake_ntlm-mprintf.Po
-rm -f ../../lib/$(DEPDIR)/fake_ntlm-nonblock.Po
+ -rm -f ../../lib/$(DEPDIR)/fake_ntlm-strcase.Po
-rm -f ../../lib/$(DEPDIR)/fake_ntlm-strdup.Po
-rm -f ../../lib/$(DEPDIR)/fake_ntlm-strtoofft.Po
-rm -f ../../lib/$(DEPDIR)/fake_ntlm-timediff.Po
@@ -3311,6 +3497,7 @@ maintainer-clean: maintainer-clean-am
-rm -f ../../lib/$(DEPDIR)/getpart-memdebug.Po
-rm -f ../../lib/$(DEPDIR)/getpart-mprintf.Po
-rm -f ../../lib/$(DEPDIR)/getpart-nonblock.Po
+ -rm -f ../../lib/$(DEPDIR)/getpart-strcase.Po
-rm -f ../../lib/$(DEPDIR)/getpart-strdup.Po
-rm -f ../../lib/$(DEPDIR)/getpart-strtoofft.Po
-rm -f ../../lib/$(DEPDIR)/getpart-timediff.Po
@@ -3322,6 +3509,7 @@ maintainer-clean: maintainer-clean-am
-rm -f ../../lib/$(DEPDIR)/mqttd-memdebug.Po
-rm -f ../../lib/$(DEPDIR)/mqttd-mprintf.Po
-rm -f ../../lib/$(DEPDIR)/mqttd-nonblock.Po
+ -rm -f ../../lib/$(DEPDIR)/mqttd-strcase.Po
-rm -f ../../lib/$(DEPDIR)/mqttd-strdup.Po
-rm -f ../../lib/$(DEPDIR)/mqttd-strtoofft.Po
-rm -f ../../lib/$(DEPDIR)/mqttd-timediff.Po
@@ -3332,6 +3520,7 @@ maintainer-clean: maintainer-clean-am
-rm -f ../../lib/$(DEPDIR)/resolve-memdebug.Po
-rm -f ../../lib/$(DEPDIR)/resolve-mprintf.Po
-rm -f ../../lib/$(DEPDIR)/resolve-nonblock.Po
+ -rm -f ../../lib/$(DEPDIR)/resolve-strcase.Po
-rm -f ../../lib/$(DEPDIR)/resolve-strdup.Po
-rm -f ../../lib/$(DEPDIR)/resolve-strtoofft.Po
-rm -f ../../lib/$(DEPDIR)/resolve-timediff.Po
@@ -3342,6 +3531,7 @@ maintainer-clean: maintainer-clean-am
-rm -f ../../lib/$(DEPDIR)/rtspd-memdebug.Po
-rm -f ../../lib/$(DEPDIR)/rtspd-mprintf.Po
-rm -f ../../lib/$(DEPDIR)/rtspd-nonblock.Po
+ -rm -f ../../lib/$(DEPDIR)/rtspd-strcase.Po
-rm -f ../../lib/$(DEPDIR)/rtspd-strdup.Po
-rm -f ../../lib/$(DEPDIR)/rtspd-strtoofft.Po
-rm -f ../../lib/$(DEPDIR)/rtspd-timediff.Po
@@ -3353,6 +3543,7 @@ maintainer-clean: maintainer-clean-am
-rm -f ../../lib/$(DEPDIR)/sockfilt-memdebug.Po
-rm -f ../../lib/$(DEPDIR)/sockfilt-mprintf.Po
-rm -f ../../lib/$(DEPDIR)/sockfilt-nonblock.Po
+ -rm -f ../../lib/$(DEPDIR)/sockfilt-strcase.Po
-rm -f ../../lib/$(DEPDIR)/sockfilt-strdup.Po
-rm -f ../../lib/$(DEPDIR)/sockfilt-strtoofft.Po
-rm -f ../../lib/$(DEPDIR)/sockfilt-timediff.Po
@@ -3364,6 +3555,7 @@ maintainer-clean: maintainer-clean-am
-rm -f ../../lib/$(DEPDIR)/socksd-memdebug.Po
-rm -f ../../lib/$(DEPDIR)/socksd-mprintf.Po
-rm -f ../../lib/$(DEPDIR)/socksd-nonblock.Po
+ -rm -f ../../lib/$(DEPDIR)/socksd-strcase.Po
-rm -f ../../lib/$(DEPDIR)/socksd-strdup.Po
-rm -f ../../lib/$(DEPDIR)/socksd-strtoofft.Po
-rm -f ../../lib/$(DEPDIR)/socksd-timediff.Po
@@ -3375,6 +3567,7 @@ maintainer-clean: maintainer-clean-am
-rm -f ../../lib/$(DEPDIR)/sws-memdebug.Po
-rm -f ../../lib/$(DEPDIR)/sws-mprintf.Po
-rm -f ../../lib/$(DEPDIR)/sws-nonblock.Po
+ -rm -f ../../lib/$(DEPDIR)/sws-strcase.Po
-rm -f ../../lib/$(DEPDIR)/sws-strdup.Po
-rm -f ../../lib/$(DEPDIR)/sws-strtoofft.Po
-rm -f ../../lib/$(DEPDIR)/sws-timediff.Po
@@ -3385,6 +3578,7 @@ maintainer-clean: maintainer-clean-am
-rm -f ../../lib/$(DEPDIR)/tftpd-memdebug.Po
-rm -f ../../lib/$(DEPDIR)/tftpd-mprintf.Po
-rm -f ../../lib/$(DEPDIR)/tftpd-nonblock.Po
+ -rm -f ../../lib/$(DEPDIR)/tftpd-strcase.Po
-rm -f ../../lib/$(DEPDIR)/tftpd-strdup.Po
-rm -f ../../lib/$(DEPDIR)/tftpd-strtoofft.Po
-rm -f ../../lib/$(DEPDIR)/tftpd-timediff.Po
diff --git a/tests/server/Makefile.inc b/tests/server/Makefile.inc
index ccc65d2b8..efd2fa05e 100644
--- a/tests/server/Makefile.inc
+++ b/tests/server/Makefile.inc
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2009 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -33,6 +33,7 @@ CURLX_SRCS = \
../../lib/timediff.c \
../../lib/dynbuf.c \
../../lib/strdup.c \
+ ../../lib/strcase.c \
../../lib/curl_multibyte.c
CURLX_HDRS = \
diff --git a/tests/server/base64.pl b/tests/server/base64.pl
index b0252551e..885e6f419 100755
--- a/tests/server/base64.pl
+++ b/tests/server/base64.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2004 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/tests/server/disabled.c b/tests/server/disabled.c
index 8a4a17ce5..0b84134fc 100644
--- a/tests/server/disabled.c
+++ b/tests/server/disabled.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -37,11 +37,26 @@
#include <stdio.h>
static const char *disabled[]={
+#ifdef CURL_DISABLE_BINDLOCAL
+ "bindlocal",
+#endif
#ifdef CURL_DISABLE_COOKIES
"cookies",
#endif
-#ifdef CURL_DISABLE_CRYPTO_AUTH
- "crypto",
+#ifdef CURL_DISABLE_BASIC_AUTH
+ "basic-auth",
+#endif
+#ifdef CURL_DISABLE_BEARER_AUTH
+ "bearer-auth",
+#endif
+#ifdef CURL_DISABLE_DIGEST_AUTH
+ "digest-auth",
+#endif
+#ifdef CURL_DISABLE_NEGOTIATE_AUTH
+ "negotiate-auth",
+#endif
+#ifdef CURL_DISABLE_AWS
+ "aws",
#endif
#ifdef CURL_DISABLE_DOH
"DoH",
@@ -79,12 +94,22 @@ static const char *disabled[]={
#ifndef USE_XATTR
"xattr",
#endif
+#ifdef CURL_DISABLE_FORM_API
+ "form-api",
+#endif
+#if (SIZEOF_TIME_T < 5)
+ "large-time",
+#endif
NULL
};
-int main(void)
+int main(int argc, char **argv)
{
int i;
+
+ (void) argc;
+ (void) argv;
+
for(i = 0; disabled[i]; i++)
printf("%s\n", disabled[i]);
diff --git a/tests/server/fake_ntlm.c b/tests/server/fake_ntlm.c
index 976096a9c..669345035 100644
--- a/tests/server/fake_ntlm.c
+++ b/tests/server/fake_ntlm.c
@@ -5,8 +5,8 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2010, Mandy Wu, <mandy.wu@intel.com>
- * Copyright (C) 2011 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Mandy Wu, <mandy.wu@intel.com>
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -39,7 +39,8 @@
/* include memdebug.h last */
#include "memdebug.h"
-#define LOGFILE "log/fake_ntlm%ld.log"
+#define LOGFILE "%s/fake_ntlm%ld.log"
+static const char *logdir = "log";
const char *serverlogfile;
@@ -159,6 +160,11 @@ int main(int argc, char *argv[])
}
}
+ env = getenv("CURL_NTLM_LOGDIR");
+ if(env) {
+ logdir = env;
+ }
+
env = getenv("CURL_NTLM_AUTH_TESTNUM");
if(env) {
char *endptr;
@@ -175,7 +181,7 @@ int main(int argc, char *argv[])
}
/* logmsg cannot be used until this file name is set */
- msnprintf(logfilename, sizeof(logfilename), LOGFILE, testnum);
+ msnprintf(logfilename, sizeof(logfilename), LOGFILE, logdir, testnum);
serverlogfile = logfilename;
logmsg("fake_ntlm (user: %s) (proto: %s) (domain: %s) (cached creds: %s)",
@@ -187,7 +193,7 @@ int main(int argc, char *argv[])
path = env;
}
- stream = test2fopen(testnum);
+ stream = test2fopen(testnum, logdir);
if(!stream) {
error = errno;
logmsg("fopen() failed with error: %d %s", error, strerror(error));
@@ -204,7 +210,7 @@ int main(int argc, char *argv[])
}
}
- stream = test2fopen(testnum);
+ stream = test2fopen(testnum, logdir);
if(!stream) {
error = errno;
logmsg("fopen() failed with error: %d %s", error, strerror(error));
@@ -222,7 +228,7 @@ int main(int argc, char *argv[])
while(fgets(buf, sizeof(buf), stdin)) {
if(strcmp(buf, type1_input) == 0) {
- stream = test2fopen(testnum);
+ stream = test2fopen(testnum, logdir);
if(!stream) {
error = errno;
logmsg("fopen() failed with error: %d %s", error, strerror(error));
@@ -243,7 +249,7 @@ int main(int argc, char *argv[])
fflush(stdout);
}
else if(strncmp(buf, type3_input, strlen(type3_input)) == 0) {
- stream = test2fopen(testnum);
+ stream = test2fopen(testnum, logdir);
if(!stream) {
error = errno;
logmsg("fopen() failed with error: %d %s", error, strerror(error));
diff --git a/tests/server/getpart.c b/tests/server/getpart.c
index fb54bfe8b..9ab9e88d5 100644
--- a/tests/server/getpart.c
+++ b/tests/server/getpart.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -60,7 +60,7 @@ curl_free_callback Curl_cfree = (curl_free_callback)free;
curl_realloc_callback Curl_crealloc = (curl_realloc_callback)realloc;
curl_strdup_callback Curl_cstrdup = (curl_strdup_callback)strdup;
curl_calloc_callback Curl_ccalloc = (curl_calloc_callback)calloc;
-#if defined(WIN32) && defined(UNICODE)
+#if defined(_WIN32) && defined(UNICODE)
curl_wcsdup_callback Curl_cwcsdup = (curl_wcsdup_callback)_wcsdup;
#endif
@@ -149,7 +149,7 @@ static int readline(char **buffer, size_t *bufsize, size_t *length,
char *newptr;
if(!*buffer) {
- *buffer = malloc(128);
+ *buffer = calloc(1, 128);
if(!*buffer)
return GPE_OUT_OF_MEMORY;
*bufsize = 128;
@@ -171,6 +171,7 @@ static int readline(char **buffer, size_t *bufsize, size_t *length,
newptr = realloc(*buffer, *bufsize * 2);
if(!newptr)
return GPE_OUT_OF_MEMORY;
+ memset(&newptr[*bufsize], 0, *bufsize);
*buffer = newptr;
*bufsize *= 2;
}
diff --git a/tests/server/getpart.h b/tests/server/getpart.h
index bb71c2d2d..e9323d4c9 100644
--- a/tests/server/getpart.h
+++ b/tests/server/getpart.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/server/mqttd.c b/tests/server/mqttd.c
index d653917ef..8a0da3ee6 100644
--- a/tests/server/mqttd.c
+++ b/tests/server/mqttd.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -40,9 +40,7 @@
/* based on sockfilt.c */
-#ifdef HAVE_SIGNAL_H
#include <signal.h>
-#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
@@ -62,7 +60,6 @@
#include "curlx.h" /* from the private lib dir */
#include "getpart.h"
#include "inet_pton.h"
-#include "util.h"
#include "server_sockaddr.h"
#include "warnless.h"
@@ -101,7 +98,6 @@
#define MQTT_CONNACK_LEN 4
#define MQTT_SUBACK_LEN 5
#define MQTT_CLIENTID_LEN 12 /* "curl0123abcd" */
-#define MQTT_HEADER_LEN 5 /* max 5 bytes */
struct configurable {
unsigned char version; /* initial version byte in the request must match
@@ -113,13 +109,15 @@ struct configurable {
int testnum;
};
-#define REQUEST_DUMP "log/server.input"
+#define REQUEST_DUMP "server.input"
#define CONFIG_VERSION 5
static struct configurable config;
const char *serverlogfile = DEFAULT_LOGFILE;
static const char *configfile = DEFAULT_CONFIG;
+static const char *logdir = "log";
+static char loglockfile[256];
#ifdef ENABLE_IPV6
static bool use_ipv6 = FALSE;
@@ -505,14 +503,16 @@ static curl_socket_t mqttit(curl_socket_t fd)
char client_id[MAX_CLIENT_ID_LENGTH];
long testno;
FILE *stream = NULL;
-
+ FILE *dump;
+ char dumpfile[256];
static const char protocol[7] = {
0x00, 0x04, /* protocol length */
'M','Q','T','T', /* protocol name */
0x04 /* protocol level */
};
- FILE *dump = fopen(REQUEST_DUMP, "ab");
+ msnprintf(dumpfile, sizeof(dumpfile), "%s/%s", logdir, REQUEST_DUMP);
+ dump = fopen(dumpfile, "ab");
if(!dump)
goto end;
@@ -643,7 +643,7 @@ static curl_socket_t mqttit(curl_socket_t fd)
/* there's a QoS byte (two bits) after the topic */
logmsg("SUBSCRIBE to '%s' [%d]", topic, packet_id);
- stream = test2fopen(testno);
+ stream = test2fopen(testno, logdir);
error = getpart(&data, &datalen, "reply", "data", stream);
if(!error) {
if(!config.publish_before_suback) {
@@ -699,7 +699,7 @@ static curl_socket_t mqttit(curl_socket_t fd)
}
} while(1);
- end:
+end:
if(buffer)
free(buffer);
if(dump)
@@ -768,14 +768,14 @@ static bool incoming(curl_socket_t listenfd)
if(CURL_SOCKET_BAD == newfd) {
error = SOCKERRNO;
logmsg("accept(%d, NULL, NULL) failed with error: (%d) %s",
- sockfd, error, strerror(error));
+ sockfd, error, sstrerror(error));
}
else {
logmsg("====> Client connect, fd %d. Read config from %s",
newfd, configfile);
- set_advisor_read_lock(SERVERLOGS_LOCK);
+ set_advisor_read_lock(loglockfile);
(void)mqttit(newfd); /* until done */
- clear_advisor_read_lock(SERVERLOGS_LOCK);
+ clear_advisor_read_lock(loglockfile);
logmsg("====> Client disconnect");
sclose(newfd);
@@ -807,7 +807,7 @@ static curl_socket_t sockdaemon(curl_socket_t sock,
if(rc) {
error = SOCKERRNO;
logmsg("setsockopt(SO_REUSEADDR) failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
if(maxretr) {
rc = wait_ms(delay);
if(rc) {
@@ -857,7 +857,7 @@ static curl_socket_t sockdaemon(curl_socket_t sock,
if(rc) {
error = SOCKERRNO;
logmsg("Error binding socket on port %hu: (%d) %s",
- *listenport, error, strerror(error));
+ *listenport, error, sstrerror(error));
sclose(sock);
return CURL_SOCKET_BAD;
}
@@ -879,7 +879,7 @@ static curl_socket_t sockdaemon(curl_socket_t sock,
if(getsockname(sock, &localaddr.sa, &la_size) < 0) {
error = SOCKERRNO;
logmsg("getsockname() failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
sclose(sock);
return CURL_SOCKET_BAD;
}
@@ -911,7 +911,7 @@ static curl_socket_t sockdaemon(curl_socket_t sock,
if(0 != rc) {
error = SOCKERRNO;
logmsg("listen(%d, 5) failed with error: (%d) %s",
- sock, error, strerror(error));
+ sock, error, sstrerror(error));
sclose(sock);
return CURL_SOCKET_BAD;
}
@@ -963,6 +963,11 @@ int main(int argc, char *argv[])
if(argc>arg)
serverlogfile = argv[arg++];
}
+ else if(!strcmp("--logdir", argv[arg])) {
+ arg++;
+ if(argc>arg)
+ logdir = argv[arg++];
+ }
else if(!strcmp("--ipv6", argv[arg])) {
#ifdef ENABLE_IPV6
ipv_inuse = "IPv6";
@@ -998,6 +1003,7 @@ int main(int argc, char *argv[])
" --config [file]\n"
" --version\n"
" --logfile [file]\n"
+ " --logdir [directory]\n"
" --pidfile [file]\n"
" --portfile [file]\n"
" --ipv4\n"
@@ -1007,7 +1013,10 @@ int main(int argc, char *argv[])
}
}
-#ifdef WIN32
+ msnprintf(loglockfile, sizeof(loglockfile), "%s/%s/mqtt-%s.lock",
+ logdir, SERVERLOGS_LOCKDIR, ipv_inuse);
+
+#ifdef _WIN32
win32_init();
atexit(win32_cleanup);
@@ -1029,8 +1038,7 @@ int main(int argc, char *argv[])
if(CURL_SOCKET_BAD == sock) {
error = SOCKERRNO;
- logmsg("Error creating socket: (%d) %s",
- error, strerror(error));
+ logmsg("Error creating socket: (%d) %s", error, sstrerror(error));
goto mqttd_cleanup;
}
diff --git a/tests/server/resolve.c b/tests/server/resolve.c
index 492ffdeef..8ae31bc59 100644
--- a/tests/server/resolve.c
+++ b/tests/server/resolve.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -33,9 +33,7 @@
*
*/
-#ifdef HAVE_SIGNAL_H
#include <signal.h>
-#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
@@ -104,7 +102,7 @@ int main(int argc, char *argv[])
return 1;
}
-#ifdef WIN32
+#ifdef _WIN32
win32_init();
atexit(win32_cleanup);
#endif
diff --git a/tests/server/rtspd.c b/tests/server/rtspd.c
index 32ab0afb0..9c01ce871 100644
--- a/tests/server/rtspd.c
+++ b/tests/server/rtspd.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -29,9 +29,7 @@
* This source file was started based on curl's HTTP test suite server.
*/
-#ifdef HAVE_SIGNAL_H
#include <signal.h>
-#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
@@ -133,11 +131,13 @@ static void storerequest(char *reqbuf, size_t totalsize);
#endif
const char *serverlogfile = DEFAULT_LOGFILE;
+static const char *logdir = "log";
+static char loglockfile[256];
#define RTSPDVERSION "curl test suite RTSP server/0.1"
-#define REQUEST_DUMP "log/server.input"
-#define RESPONSE_DUMP "log/server.response"
+#define REQUEST_DUMP "server.input"
+#define RESPONSE_DUMP "server.response"
/* very-big-path support */
#define MAXDOCNAMELEN 140000
@@ -201,7 +201,7 @@ static const char *doc404_RTSP = "RTSP/1.0 404 Not Found\r\n"
/* Default size to send away fake RTP data */
#define RTP_DATA_SIZE 12
-static const char *RTP_DATA = "$_1234\n\0asdf";
+static const char *RTP_DATA = "$_1234\n\0Rsdf";
static int ProcessRequest(struct httprequest *req)
{
@@ -288,7 +288,7 @@ static int ProcessRequest(struct httprequest *req)
req->testno, req->partno);
logmsg("%s", logbuf);
- stream = test2fopen(req->testno);
+ stream = test2fopen(req->testno, logdir);
if(!stream) {
int error = errno;
@@ -304,6 +304,7 @@ static int ProcessRequest(struct httprequest *req)
int rtp_channel = 0;
int rtp_size = 0;
+ int rtp_size_err = 0;
int rtp_partno = -1;
char *rtp_scratch = NULL;
@@ -320,6 +321,7 @@ static int ProcessRequest(struct httprequest *req)
if(cmdsize) {
logmsg("Found a reply-servercmd section!");
do {
+ rtp_size_err = 0;
if(!strncmp(CMD_AUTH_REQUIRED, ptr, strlen(CMD_AUTH_REQUIRED))) {
logmsg("instructed to require authorization header");
req->auth_req = TRUE;
@@ -345,13 +347,15 @@ static int ProcessRequest(struct httprequest *req)
logmsg("instructed to skip this number of bytes %d", num);
req->skip = num;
}
- else if(3 == sscanf(ptr, "rtp: part %d channel %d size %d",
- &rtp_partno, &rtp_channel, &rtp_size)) {
+ else if(3 <= sscanf(ptr,
+ "rtp: part %d channel %d size %d size_err %d",
+ &rtp_partno, &rtp_channel, &rtp_size,
+ &rtp_size_err)) {
if(rtp_partno == req->partno) {
int i = 0;
- logmsg("RTP: part %d channel %d size %d",
- rtp_partno, rtp_channel, rtp_size);
+ logmsg("RTP: part %d channel %d size %d size_err %d",
+ rtp_partno, rtp_channel, rtp_size, rtp_size_err);
/* Make our scratch buffer enough to fit all the
* desired data and one for padding */
@@ -364,7 +368,7 @@ static int ProcessRequest(struct httprequest *req)
SET_RTP_PKT_CHN(rtp_scratch, rtp_channel);
/* Length follows and is a two byte short in network order */
- SET_RTP_PKT_LEN(rtp_scratch, rtp_size);
+ SET_RTP_PKT_LEN(rtp_scratch, rtp_size + rtp_size_err);
/* Fill it with junk data */
for(i = 0; i < rtp_size; i += RTP_DATA_SIZE) {
@@ -450,10 +454,10 @@ static int ProcessRequest(struct httprequest *req)
/* **** Persistence ****
*
- * If the request is a HTTP/1.0 one, we close the connection unconditionally
+ * If the request is an HTTP/1.0 one, we close the connection unconditionally
* when we're done.
*
- * If the request is a HTTP/1.1 one, we MUST check for a "Connection:"
+ * If the request is an HTTP/1.1 one, we MUST check for a "Connection:"
* header that might say "close". If it does, we close a connection when
* this request is processed. Otherwise, we keep the connection alive for X
* seconds.
@@ -600,6 +604,9 @@ static void storerequest(char *reqbuf, size_t totalsize)
size_t written;
size_t writeleft;
FILE *dump;
+ char dumpfile[256];
+
+ msnprintf(dumpfile, sizeof(dumpfile), "%s/%s", logdir, REQUEST_DUMP);
if(!reqbuf)
return;
@@ -607,12 +614,12 @@ static void storerequest(char *reqbuf, size_t totalsize)
return;
do {
- dump = fopen(REQUEST_DUMP, "ab");
+ dump = fopen(dumpfile, "ab");
} while(!dump && ((error = errno) == EINTR));
if(!dump) {
logmsg("Error opening file %s error: %d %s",
- REQUEST_DUMP, error, strerror(error));
- logmsg("Failed to write request input to " REQUEST_DUMP);
+ dumpfile, error, strerror(error));
+ logmsg("Failed to write request input to %s", dumpfile);
return;
}
@@ -627,12 +634,12 @@ static void storerequest(char *reqbuf, size_t totalsize)
} while((writeleft > 0) && ((error = errno) == EINTR));
if(writeleft == 0)
- logmsg("Wrote request (%zu bytes) input to " REQUEST_DUMP, totalsize);
+ logmsg("Wrote request (%zu bytes) input to %s", totalsize, dumpfile);
else if(writeleft > 0) {
logmsg("Error writing file %s error: %d %s",
- REQUEST_DUMP, error, strerror(error));
+ dumpfile, error, strerror(error));
logmsg("Wrote only (%zu bytes) of (%zu bytes) request input to %s",
- totalsize-writeleft, totalsize, REQUEST_DUMP);
+ totalsize-writeleft, totalsize, dumpfile);
}
storerequest_cleanup:
@@ -642,7 +649,7 @@ storerequest_cleanup:
} while(res && ((error = errno) == EINTR));
if(res)
logmsg("Error closing file %s error: %d %s",
- REQUEST_DUMP, error, strerror(error));
+ dumpfile, error, strerror(error));
}
/* return 0 on success, non-zero on failure */
@@ -708,7 +715,7 @@ static int get_request(curl_socket_t sock, struct httprequest *req)
}
else if(got < 0) {
error = SOCKERRNO;
- logmsg("recv() returned error: (%d) %s", error, strerror(error));
+ logmsg("recv() returned error: (%d) %s", error, sstrerror(error));
fail = 1;
}
if(fail) {
@@ -771,8 +778,11 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
size_t responsesize;
int error = 0;
int res;
-
static char weare[256];
+ char responsedump[256];
+
+ msnprintf(responsedump, sizeof(responsedump), "%s/%s",
+ logdir, RESPONSE_DUMP);
logmsg("Send response number %ld part %ld", req->testno, req->partno);
@@ -846,7 +856,7 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
count = strlen(buffer);
}
else {
- FILE *stream = test2fopen(req->testno);
+ FILE *stream = test2fopen(req->testno, logdir);
char partbuf[80]="data";
if(0 != req->partno)
msnprintf(partbuf, sizeof(partbuf), "data%ld", req->partno);
@@ -872,7 +882,7 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
}
/* re-open the same file again */
- stream = test2fopen(req->testno);
+ stream = test2fopen(req->testno, logdir);
if(!stream) {
error = errno;
logmsg("fopen() failed with error: %d %s", error, strerror(error));
@@ -912,12 +922,12 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
else
prevbounce = FALSE;
- dump = fopen(RESPONSE_DUMP, "ab");
+ dump = fopen(responsedump, "ab");
if(!dump) {
error = errno;
logmsg("fopen() failed with error: %d %s", error, strerror(error));
- logmsg("Error opening file: %s", RESPONSE_DUMP);
- logmsg("couldn't create logfile: " RESPONSE_DUMP);
+ logmsg("Error opening file: %s", responsedump);
+ logmsg("couldn't create logfile: %s", responsedump);
free(ptr);
free(cmd);
return -1;
@@ -974,7 +984,7 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
} while(res && ((error = errno) == EINTR));
if(res)
logmsg("Error closing file %s error: %d %s",
- RESPONSE_DUMP, error, strerror(error));
+ responsedump, error, strerror(error));
if(got_exit_signal) {
free(ptr);
@@ -991,8 +1001,8 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
return -1;
}
- logmsg("Response sent (%zu bytes) and written to " RESPONSE_DUMP,
- responsesize);
+ logmsg("Response sent (%zu bytes) and written to %s",
+ responsesize, responsedump);
free(ptr);
if(cmdsize > 0) {
@@ -1087,6 +1097,11 @@ int main(int argc, char *argv[])
if(argc>arg)
serverlogfile = argv[arg++];
}
+ else if(!strcmp("--logdir", argv[arg])) {
+ arg++;
+ if(argc>arg)
+ logdir = argv[arg++];
+ }
else if(!strcmp("--ipv4", argv[arg])) {
#ifdef ENABLE_IPV6
ipv_inuse = "IPv4";
@@ -1121,6 +1136,7 @@ int main(int argc, char *argv[])
puts("Usage: rtspd [option]\n"
" --version\n"
" --logfile [file]\n"
+ " --logdir [directory]\n"
" --pidfile [file]\n"
" --portfile [file]\n"
" --ipv4\n"
@@ -1131,7 +1147,10 @@ int main(int argc, char *argv[])
}
}
-#ifdef WIN32
+ msnprintf(loglockfile, sizeof(loglockfile), "%s/%s/rtsp-%s.lock",
+ logdir, SERVERLOGS_LOCKDIR, ipv_inuse);
+
+#ifdef _WIN32
win32_init();
atexit(win32_cleanup);
#endif
@@ -1149,8 +1168,7 @@ int main(int argc, char *argv[])
if(CURL_SOCKET_BAD == sock) {
error = SOCKERRNO;
- logmsg("Error creating socket: (%d) %s",
- error, strerror(error));
+ logmsg("Error creating socket: (%d) %s", error, sstrerror(error));
goto server_cleanup;
}
@@ -1159,7 +1177,7 @@ int main(int argc, char *argv[])
(void *)&flag, sizeof(flag))) {
error = SOCKERRNO;
logmsg("setsockopt(SO_REUSEADDR) failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
goto server_cleanup;
}
@@ -1184,7 +1202,7 @@ int main(int argc, char *argv[])
if(0 != rc) {
error = SOCKERRNO;
logmsg("Error binding socket on port %hu: (%d) %s",
- port, error, strerror(error));
+ port, error, sstrerror(error));
goto server_cleanup;
}
@@ -1205,7 +1223,7 @@ int main(int argc, char *argv[])
if(getsockname(sock, &localaddr.sa, &la_size) < 0) {
error = SOCKERRNO;
logmsg("getsockname() failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
sclose(sock);
goto server_cleanup;
}
@@ -1238,7 +1256,7 @@ int main(int argc, char *argv[])
if(0 != rc) {
error = SOCKERRNO;
logmsg("listen() failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
goto server_cleanup;
}
@@ -1265,17 +1283,17 @@ int main(int argc, char *argv[])
if(CURL_SOCKET_BAD == msgsock) {
error = SOCKERRNO;
logmsg("MAJOR ERROR: accept() failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
break;
}
/*
- ** As soon as this server acepts a connection from the test harness it
+ ** As soon as this server accepts a connection from the test harness it
** must set the server logs advisor read lock to indicate that server
** logs should not be read until this lock is removed by this server.
*/
- set_advisor_read_lock(SERVERLOGS_LOCK);
+ set_advisor_read_lock(loglockfile);
serverlogslocked = 1;
logmsg("====> Client connect");
@@ -1347,7 +1365,7 @@ int main(int argc, char *argv[])
if(serverlogslocked) {
serverlogslocked = 0;
- clear_advisor_read_lock(SERVERLOGS_LOCK);
+ clear_advisor_read_lock(loglockfile);
}
if(req.testno == DOCNUMBER_QUIT)
@@ -1372,7 +1390,7 @@ server_cleanup:
if(serverlogslocked) {
serverlogslocked = 0;
- clear_advisor_read_lock(SERVERLOGS_LOCK);
+ clear_advisor_read_lock(loglockfile);
}
restore_signal_handlers(false);
diff --git a/tests/server/server_setup.h b/tests/server/server_setup.h
index 8c642e5d8..8bdcc913b 100644
--- a/tests/server/server_setup.h
+++ b/tests/server/server_setup.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/server/server_sockaddr.h b/tests/server/server_sockaddr.h
index 024cf70dd..c48c7c7c3 100644
--- a/tests/server/server_sockaddr.h
+++ b/tests/server/server_sockaddr.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/server/sockfilt.c b/tests/server/sockfilt.c
index 39cca069f..f87d1c8f9 100644
--- a/tests/server/sockfilt.c
+++ b/tests/server/sockfilt.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -85,9 +85,7 @@
* it!
*/
-#ifdef HAVE_SIGNAL_H
#include <signal.h>
-#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
@@ -132,6 +130,10 @@
#define DEFAULT_LOGFILE "log/sockfilt.log"
#endif
+/* buffer is this excessively large only to be able to support things like
+ test 1003 which tests exceedingly large server response lines */
+#define BUFFER_SIZE 17010
+
const char *serverlogfile = DEFAULT_LOGFILE;
static bool verbose = FALSE;
@@ -150,7 +152,7 @@ enum sockmode {
ACTIVE_DISCONNECT /* as a client, disconnected from server */
};
-#ifdef WIN32
+#ifdef _WIN32
/*
* read-wrapper to support reading from stdin on Windows.
*/
@@ -388,6 +390,36 @@ static void lograw(unsigned char *buffer, ssize_t len)
logmsg("'%s'", data);
}
+/*
+ * handle the DATA command
+ * maxlen is the available space in buffer (input)
+ * *buffer_len is the amount of data in the buffer (output)
+ */
+static bool read_data_block(unsigned char *buffer, ssize_t maxlen,
+ ssize_t *buffer_len)
+{
+ if(!read_stdin(buffer, 5))
+ return FALSE;
+
+ buffer[5] = '\0';
+
+ *buffer_len = (ssize_t)strtol((char *)buffer, NULL, 16);
+ if(*buffer_len > maxlen) {
+ logmsg("ERROR: Buffer size (%zd bytes) too small for data size "
+ "(%zd bytes)", maxlen, *buffer_len);
+ return FALSE;
+ }
+ logmsg("> %zd bytes data, server => client", *buffer_len);
+
+ if(!read_stdin(buffer, *buffer_len))
+ return FALSE;
+
+ lograw(buffer, *buffer_len);
+
+ return TRUE;
+}
+
+
#ifdef USE_WINSOCK
/*
* WinSock select() does not support standard file descriptors,
@@ -556,8 +588,6 @@ static HANDLE select_ws_wait(HANDLE handle, HANDLE signal, HANDLE abort)
{
#ifdef _WIN32_WCE
typedef HANDLE curl_win_thread_handle_t;
-#elif defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)
- typedef unsigned long curl_win_thread_handle_t;
#else
typedef uintptr_t curl_win_thread_handle_t;
#endif
@@ -861,6 +891,63 @@ static int select_ws(int nfds, fd_set *readfds, fd_set *writefds,
#define select(a,b,c,d,e) select_ws(a,b,c,d,e)
#endif /* USE_WINSOCK */
+
+/* Perform the disconnect handshake with sockfilt
+ * This involves waiting for the disconnect acknowledgmeent after the DISC
+ * command, while throwing away anything else that might come in before
+ * that.
+ */
+static bool disc_handshake(void)
+{
+ if(!write_stdout("DISC\n", 5))
+ return FALSE;
+
+ do {
+ unsigned char buffer[BUFFER_SIZE];
+ ssize_t buffer_len;
+ if(!read_stdin(buffer, 5))
+ return FALSE;
+ logmsg("Received %c%c%c%c (on stdin)",
+ buffer[0], buffer[1], buffer[2], buffer[3]);
+
+ if(!memcmp("ACKD", buffer, 4)) {
+ /* got the ack we were waiting for */
+ break;
+ }
+ else if(!memcmp("DISC", buffer, 4)) {
+ logmsg("Crikey! Client also wants to disconnect");
+ if(!write_stdout("ACKD\n", 5))
+ return FALSE;
+ }
+ else if(!memcmp("DATA", buffer, 4)) {
+ /* We must read more data to stay in sync */
+ if(!read_data_block(buffer, sizeof(buffer), &buffer_len))
+ return FALSE;
+
+ logmsg("Throwing again %zd data bytes", buffer_len);
+
+ }
+ else if(!memcmp("QUIT", buffer, 4)) {
+ /* just die */
+ logmsg("quits");
+ return FALSE;
+ }
+ else {
+ logmsg("Error: unexpected message; aborting");
+ /*
+ * The only other messages that could occur here are PING and PORT,
+ * and both of them occur at the start of a test when nothing should be
+ * trying to DISC. Therefore, we should not ever get here, but if we
+ * do, it's probably due to some kind of unclean shutdown situation so
+ * us shutting down is what we probably ought to be doing, anyway.
+ */
+ return FALSE;
+ }
+
+ } while(TRUE);
+ return TRUE;
+}
+
/*
sockfdp is a pointer to an established stream or CURL_SOCKET_BAD
@@ -880,9 +967,7 @@ static bool juggle(curl_socket_t *sockfdp,
ssize_t rc;
int error = 0;
- /* 'buffer' is this excessively large only to be able to support things like
- test 1003 which tests exceedingly large server response lines */
- unsigned char buffer[17010];
+ unsigned char buffer[BUFFER_SIZE];
char data[16];
if(got_exit_signal) {
@@ -1029,28 +1114,12 @@ static bool juggle(curl_socket_t *sockfdp,
}
else if(!memcmp("DATA", buffer, 4)) {
/* data IN => data OUT */
-
- if(!read_stdin(buffer, 5))
+ if(!read_data_block(buffer, sizeof(buffer), &buffer_len))
return FALSE;
- buffer[5] = '\0';
-
- buffer_len = (ssize_t)strtol((char *)buffer, NULL, 16);
- if(buffer_len > (ssize_t)sizeof(buffer)) {
- logmsg("ERROR: Buffer size (%zu bytes) too small for data size "
- "(%zd bytes)", sizeof(buffer), buffer_len);
- return FALSE;
- }
- logmsg("> %zd bytes data, server => client", buffer_len);
-
- if(!read_stdin(buffer, buffer_len))
- return FALSE;
-
- lograw(buffer, buffer_len);
-
if(*mode == PASSIVE_LISTEN) {
logmsg("*** We are disconnected!");
- if(!write_stdout("DISC\n", 5))
+ if(!disc_handshake())
return FALSE;
}
else {
@@ -1064,7 +1133,7 @@ static bool juggle(curl_socket_t *sockfdp,
}
else if(!memcmp("DISC", buffer, 4)) {
/* disconnect! */
- if(!write_stdout("DISC\n", 5))
+ if(!write_stdout("ACKD\n", 5))
return FALSE;
if(sockfd != CURL_SOCKET_BAD) {
logmsg("====> Client forcibly disconnected");
@@ -1091,7 +1160,7 @@ static bool juggle(curl_socket_t *sockfdp,
if(CURL_SOCKET_BAD == newfd) {
error = SOCKERRNO;
logmsg("accept(%d, NULL, NULL) failed with error: (%d) %s",
- sockfd, error, strerror(error));
+ sockfd, error, sstrerror(error));
}
else {
logmsg("====> Client connect");
@@ -1119,7 +1188,7 @@ static bool juggle(curl_socket_t *sockfdp,
if(nread_socket <= 0) {
logmsg("====> Client disconnect");
- if(!write_stdout("DISC\n", 5))
+ if(!disc_handshake())
return FALSE;
sclose(sockfd);
*sockfdp = CURL_SOCKET_BAD;
@@ -1155,7 +1224,7 @@ static curl_socket_t sockdaemon(curl_socket_t sock,
if(rc) {
error = SOCKERRNO;
logmsg("setsockopt(SO_REUSEADDR) failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
if(maxretr) {
rc = wait_ms(delay);
if(rc) {
@@ -1207,7 +1276,7 @@ static curl_socket_t sockdaemon(curl_socket_t sock,
if(rc) {
error = SOCKERRNO;
logmsg("Error binding socket on port %hu: (%d) %s",
- *listenport, error, strerror(error));
+ *listenport, error, sstrerror(error));
sclose(sock);
return CURL_SOCKET_BAD;
}
@@ -1229,7 +1298,7 @@ static curl_socket_t sockdaemon(curl_socket_t sock,
if(getsockname(sock, &localaddr.sa, &la_size) < 0) {
error = SOCKERRNO;
logmsg("getsockname() failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
sclose(sock);
return CURL_SOCKET_BAD;
}
@@ -1267,7 +1336,7 @@ static curl_socket_t sockdaemon(curl_socket_t sock,
if(0 != rc) {
error = SOCKERRNO;
logmsg("listen(%d, 5) failed with error: (%d) %s",
- sock, error, strerror(error));
+ sock, error, sstrerror(error));
sclose(sock);
return CURL_SOCKET_BAD;
}
@@ -1392,7 +1461,7 @@ int main(int argc, char *argv[])
}
}
-#ifdef WIN32
+#ifdef _WIN32
win32_init();
atexit(win32_cleanup);
@@ -1414,8 +1483,7 @@ int main(int argc, char *argv[])
if(CURL_SOCKET_BAD == sock) {
error = SOCKERRNO;
- logmsg("Error creating socket: (%d) %s",
- error, strerror(error));
+ logmsg("Error creating socket: (%d) %s", error, sstrerror(error));
write_stdout("FAIL\n", 5);
goto sockfilt_cleanup;
}
@@ -1451,7 +1519,7 @@ int main(int argc, char *argv[])
if(rc) {
error = SOCKERRNO;
logmsg("Error connecting to port %hu: (%d) %s",
- connectport, error, strerror(error));
+ connectport, error, sstrerror(error));
write_stdout("FAIL\n", 5);
goto sockfilt_cleanup;
}
diff --git a/tests/server/socksd.c b/tests/server/socksd.c
index d49efcf80..490085d49 100644
--- a/tests/server/socksd.c
+++ b/tests/server/socksd.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -57,9 +57,7 @@
/* based on sockfilt.c */
-#ifdef HAVE_SIGNAL_H
#include <signal.h>
-#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
@@ -304,7 +302,7 @@ static curl_socket_t socksconnect(unsigned short connectport,
if(rc) {
int error = SOCKERRNO;
logmsg("Error connecting to %s:%hu: (%d) %s",
- connectaddr, connectport, error, strerror(error));
+ connectaddr, connectport, error, sstrerror(error));
return CURL_SOCKET_BAD;
}
logmsg("Connected fine to %s:%d", connectaddr, connectport);
@@ -381,6 +379,10 @@ static curl_socket_t sockit(curl_socket_t fd)
getconfig();
rc = recv(fd, (char *)buffer, sizeof(buffer), 0);
+ if(rc <= 0) {
+ logmsg("SOCKS identifier message missing, recv returned %d", rc);
+ return CURL_SOCKET_BAD;
+ }
logmsg("READ %d bytes", rc);
loghex(buffer, rc);
@@ -388,6 +390,11 @@ static curl_socket_t sockit(curl_socket_t fd)
if(buffer[SOCKS5_VERSION] == 4)
return socks4(fd, buffer, rc);
+ if(rc < 3) {
+ logmsg("SOCKS5 identifier message too short: %d", rc);
+ return CURL_SOCKET_BAD;
+ }
+
if(buffer[SOCKS5_VERSION] != config.version) {
logmsg("VERSION byte not %d", config.version);
return CURL_SOCKET_BAD;
@@ -419,6 +426,10 @@ static curl_socket_t sockit(curl_socket_t fd)
/* expect the request or auth */
rc = recv(fd, (char *)buffer, sizeof(buffer), 0);
+ if(rc <= 0) {
+ logmsg("SOCKS5 request or auth message missing, recv returned %d", rc);
+ return CURL_SOCKET_BAD;
+ }
logmsg("READ %d bytes", rc);
loghex(buffer, rc);
@@ -474,6 +485,10 @@ static curl_socket_t sockit(curl_socket_t fd)
/* expect the request */
rc = recv(fd, (char *)buffer, sizeof(buffer), 0);
+ if(rc <= 0) {
+ logmsg("SOCKS5 request message missing, recv returned %d", rc);
+ return CURL_SOCKET_BAD;
+ }
logmsg("READ %d bytes", rc);
loghex(buffer, rc);
@@ -740,7 +755,7 @@ static bool incoming(curl_socket_t listenfd)
if(CURL_SOCKET_BAD == newfd) {
error = SOCKERRNO;
logmsg("accept(%d, NULL, NULL) failed with error: (%d) %s",
- sockfd, error, strerror(error));
+ sockfd, error, sstrerror(error));
}
else {
curl_socket_t remotefd;
@@ -810,7 +825,7 @@ static curl_socket_t sockdaemon(curl_socket_t sock,
if(rc) {
error = SOCKERRNO;
logmsg("setsockopt(SO_REUSEADDR) failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
if(maxretr) {
rc = wait_ms(delay);
if(rc) {
@@ -866,8 +881,14 @@ static curl_socket_t sockdaemon(curl_socket_t sock,
if(rc) {
error = SOCKERRNO;
- logmsg("Error binding socket on port %hu: (%d) %s",
- *listenport, error, strerror(error));
+#ifdef USE_UNIX_SOCKETS
+ if(socket_domain == AF_UNIX)
+ logmsg("Error binding socket on path %s: (%d) %s",
+ unix_socket, error, sstrerror(error));
+ else
+#endif
+ logmsg("Error binding socket on port %hu: (%d) %s",
+ *listenport, error, sstrerror(error));
sclose(sock);
return CURL_SOCKET_BAD;
}
@@ -891,7 +912,7 @@ static curl_socket_t sockdaemon(curl_socket_t sock,
if(getsockname(sock, &localaddr.sa, &la_size) < 0) {
error = SOCKERRNO;
logmsg("getsockname() failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
sclose(sock);
return CURL_SOCKET_BAD;
}
@@ -923,7 +944,7 @@ static curl_socket_t sockdaemon(curl_socket_t sock,
if(0 != rc) {
error = SOCKERRNO;
logmsg("listen(%d, 5) failed with error: (%d) %s",
- sock, error, strerror(error));
+ sock, error, sstrerror(error));
sclose(sock);
return CURL_SOCKET_BAD;
}
@@ -1017,8 +1038,8 @@ int main(int argc, char *argv[])
unix_socket = argv[arg];
if(strlen(unix_socket) >= sizeof(sau.sun_path)) {
fprintf(stderr,
- "socksd: socket path must be shorter than %zu chars\n",
- sizeof(sau.sun_path));
+ "socksd: socket path must be shorter than %zu chars: %s\n",
+ sizeof(sau.sun_path), unix_socket);
return 0;
}
socket_domain = AF_UNIX;
@@ -1055,7 +1076,7 @@ int main(int argc, char *argv[])
}
}
-#ifdef WIN32
+#ifdef _WIN32
win32_init();
atexit(win32_cleanup);
@@ -1071,7 +1092,7 @@ int main(int argc, char *argv[])
if(CURL_SOCKET_BAD == sock) {
error = SOCKERRNO;
logmsg("Error creating socket: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
goto socks5_cleanup;
}
@@ -1095,7 +1116,7 @@ int main(int argc, char *argv[])
#ifdef USE_UNIX_SOCKETS
if(socket_domain == AF_UNIX)
- logmsg("Listening on unix socket %s", unix_socket);
+ logmsg("Listening on unix socket %s", unix_socket);
else
#endif
logmsg("Listening on port %hu", port);
diff --git a/tests/server/sws.c b/tests/server/sws.c
index 55c1c1d60..fa9b1ac80 100644
--- a/tests/server/sws.c
+++ b/tests/server/sws.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -30,9 +30,7 @@
*/
-#ifdef HAVE_SIGNAL_H
#include <signal.h>
-#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
@@ -112,6 +110,7 @@ struct httprequest {
size_t cl; /* Content-Length of the incoming request */
bool digest; /* Authorization digest header found */
bool ntlm; /* Authorization ntlm header found */
+ int delay; /* if non-zero, delay this number of msec after connect */
int writedelay; /* if non-zero, delay this number of milliseconds between
writes in the response */
int skip; /* if non-zero, the server is instructed to not read this
@@ -146,19 +145,21 @@ static void storerequest(const char *reqbuf, size_t totalsize);
#endif
const char *serverlogfile = DEFAULT_LOGFILE;
+static const char *logdir = "log";
+static char loglockfile[256];
#define SWSVERSION "curl test suite HTTP server/0.1"
-#define REQUEST_DUMP "log/server.input"
-#define RESPONSE_DUMP "log/server.response"
+#define REQUEST_DUMP "server.input"
+#define RESPONSE_DUMP "server.response"
/* when told to run as proxy, we store the logs in different files so that
they can co-exist with the same program running as a "server" */
-#define REQUEST_PROXY_DUMP "log/proxy.input"
-#define RESPONSE_PROXY_DUMP "log/proxy.response"
+#define REQUEST_PROXY_DUMP "proxy.input"
+#define RESPONSE_PROXY_DUMP "proxy.response"
/* file in which additional instructions may be found */
-#define DEFAULT_CMDFILE "log/ftpserver.cmd"
+#define DEFAULT_CMDFILE "log/server.cmd"
const char *cmdfile = DEFAULT_CMDFILE;
/* very-big-path support */
@@ -262,7 +263,7 @@ static int parse_servercmd(struct httprequest *req)
FILE *stream;
int error;
- stream = test2fopen(req->testno);
+ stream = test2fopen(req->testno, logdir);
req->close = FALSE;
req->connmon = FALSE;
@@ -326,6 +327,10 @@ static int parse_servercmd(struct httprequest *req)
logmsg("instructed to reject Expect: 100-continue");
req->noexpect = TRUE;
}
+ else if(1 == sscanf(cmd, "delay: %d", &num)) {
+ logmsg("instructed to delay %d msecs after connect", num);
+ req->delay = num;
+ }
else if(1 == sscanf(cmd, "writedelay: %d", &num)) {
logmsg("instructed to delay %d msecs between packets", num);
req->writedelay = num;
@@ -431,7 +436,7 @@ static int ProcessRequest(struct httprequest *req)
if(*ptr == '/') {
if((npath + strlen(request)) < 400)
msnprintf(logbuf, sizeof(logbuf), "Got request: %s %.*s HTTP/%d.%d",
- request, npath, httppath, prot_major, prot_minor);
+ request, (int)npath, httppath, prot_major, prot_minor);
else
msnprintf(logbuf, sizeof(logbuf), "Got a *HUGE* request HTTP/%d.%d",
prot_major, prot_minor);
@@ -602,10 +607,10 @@ static int ProcessRequest(struct httprequest *req)
/* **** Persistence ****
*
- * If the request is a HTTP/1.0 one, we close the connection unconditionally
+ * If the request is an HTTP/1.0 one, we close the connection unconditionally
* when we're done.
*
- * If the request is a HTTP/1.1 one, we MUST check for a "Connection:"
+ * If the request is an HTTP/1.1 one, we MUST check for a "Connection:"
* header that might say "close". If it does, we close a connection when
* this request is processed. Otherwise, we keep the connection alive for X
* seconds.
@@ -787,7 +792,10 @@ static void storerequest(const char *reqbuf, size_t totalsize)
size_t written;
size_t writeleft;
FILE *dump;
- const char *dumpfile = is_proxy?REQUEST_PROXY_DUMP:REQUEST_DUMP;
+ char dumpfile[256];
+
+ msnprintf(dumpfile, sizeof(dumpfile), "%s/%s",
+ logdir, is_proxy?REQUEST_PROXY_DUMP:REQUEST_DUMP);
if(!reqbuf)
return;
@@ -849,6 +857,7 @@ static void init_httprequest(struct httprequest *req)
req->skip = 0;
req->skipall = FALSE;
req->noexpect = FALSE;
+ req->delay = 0;
req->writedelay = 0;
req->rcmd = RCMD_NORMALREQ;
req->prot_version = 0;
@@ -872,7 +881,7 @@ static int get_request(curl_socket_t sock, struct httprequest *req)
if(req->upgrade_request) {
/* upgraded connection, work it differently until end of connection */
- logmsg("Upgraded connection, this is a no longer HTTP/1");
+ logmsg("Upgraded connection, this is no longer HTTP/1");
send_doc(sock, req);
/* dump the request received so far to the external file */
@@ -881,33 +890,39 @@ static int get_request(curl_socket_t sock, struct httprequest *req)
req->offset = 0;
/* read websocket traffic */
- do {
-
- got = sread(sock, reqbuf + req->offset, REQBUFSIZ - req->offset);
- if(got > 0)
- req->offset += got;
- logmsg("Got: %d", (int)got);
-
- if((got == -1) && ((EAGAIN == errno) || (EWOULDBLOCK == errno))) {
- int rc;
- fd_set input;
- fd_set output;
- struct timeval timeout = {1, 0}; /* 1000 ms */
-
- FD_ZERO(&input);
- FD_ZERO(&output);
- got = 0;
- FD_SET(sock, &input);
- do {
- logmsg("Wait until readable");
- rc = select((int)sock + 1, &input, &output, NULL, &timeout);
- } while(rc < 0 && errno == EINTR && !got_exit_signal);
- logmsg("readable %d", rc);
- if(rc)
- got = 1;
- }
- } while(got > 0);
+ if(req->open) {
+ logmsg("wait for websocket traffic");
+ do {
+ got = sread(sock, reqbuf + req->offset, REQBUFSIZ - req->offset);
+ if(got > 0) {
+ req->offset += got;
+ logmsg("Got %zu bytes from client", got);
+ }
+ if((got == -1) && ((EAGAIN == errno) || (EWOULDBLOCK == errno))) {
+ int rc;
+ fd_set input;
+ fd_set output;
+ struct timeval timeout = {1, 0}; /* 1000 ms */
+
+ logmsg("Got EAGAIN from sread");
+ FD_ZERO(&input);
+ FD_ZERO(&output);
+ got = 0;
+ FD_SET(sock, &input);
+ do {
+ logmsg("Wait until readable");
+ rc = select((int)sock + 1, &input, &output, NULL, &timeout);
+ } while(rc < 0 && errno == EINTR && !got_exit_signal);
+ logmsg("readable %d", rc);
+ if(rc)
+ got = 1;
+ }
+ } while(got > 0);
+ }
+ else {
+ logmsg("NO wait for websocket traffic");
+ }
if(req->offset) {
logmsg("log the websocket traffic");
/* dump the incoming websocket traffic to the external file */
@@ -945,7 +960,7 @@ static int get_request(curl_socket_t sock, struct httprequest *req)
/* nothing to read at the moment */
return 0;
}
- logmsg("recv() returned error: (%d) %s", error, strerror(error));
+ logmsg("recv() returned error: (%d) %s", error, sstrerror(error));
fail = 1;
}
if(fail) {
@@ -1005,8 +1020,11 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
size_t responsesize;
int error = 0;
int res;
- const char *responsedump = is_proxy?RESPONSE_PROXY_DUMP:RESPONSE_DUMP;
static char weare[256];
+ char responsedump[256];
+
+ msnprintf(responsedump, sizeof(responsedump), "%s/%s",
+ logdir, is_proxy?RESPONSE_PROXY_DUMP:RESPONSE_DUMP);
switch(req->rcmd) {
default:
@@ -1078,7 +1096,7 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
logmsg("Send response test%ld section <%s>", req->testno, partbuf);
- stream = test2fopen(req->testno);
+ stream = test2fopen(req->testno, logdir);
if(!stream) {
error = errno;
logmsg("fopen() failed with error: %d %s", error, strerror(error));
@@ -1100,7 +1118,7 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
}
/* re-open the same file again */
- stream = test2fopen(req->testno);
+ stream = test2fopen(req->testno, logdir);
if(!stream) {
error = errno;
logmsg("fopen() failed with error: %d %s", error, strerror(error));
@@ -1158,7 +1176,7 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
if(num > 20)
num = 20;
- retry:
+retry:
written = swrite(sock, buffer, num);
if(written < 0) {
if((EWOULDBLOCK == SOCKERRNO) || (EAGAIN == SOCKERRNO)) {
@@ -1290,7 +1308,7 @@ static curl_socket_t connect_to(const char *ipaddr, unsigned short port)
if(CURL_SOCKET_BAD == serverfd) {
error = SOCKERRNO;
logmsg("Error creating socket for server connection: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
return CURL_SOCKET_BAD;
}
@@ -1346,7 +1364,7 @@ static curl_socket_t connect_to(const char *ipaddr, unsigned short port)
if(rc) {
error = SOCKERRNO;
logmsg("Error connecting to server port %hu: (%d) %s",
- port, error, strerror(error));
+ port, error, sstrerror(error));
sclose(serverfd);
return CURL_SOCKET_BAD;
}
@@ -1377,7 +1395,8 @@ static curl_socket_t connect_to(const char *ipaddr, unsigned short port)
static void http_connect(curl_socket_t *infdp,
curl_socket_t rootfd,
const char *ipaddr,
- unsigned short ipport)
+ unsigned short ipport,
+ int keepalive_secs)
{
curl_socket_t serverfd[2] = {CURL_SOCKET_BAD, CURL_SOCKET_BAD};
curl_socket_t clientfd[2] = {CURL_SOCKET_BAD, CURL_SOCKET_BAD};
@@ -1733,7 +1752,7 @@ static void http_connect(curl_socket_t *infdp,
} /* (rc > 0) */
else {
timeout_count++;
- if(timeout_count > 5) {
+ if(timeout_count > keepalive_secs) {
logmsg("CONNECT proxy timeout after %d idle seconds!", timeout_count);
break;
}
@@ -1798,14 +1817,14 @@ static curl_socket_t accept_connection(curl_socket_t sock)
return 0;
}
logmsg("MAJOR ERROR: accept() failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
return CURL_SOCKET_BAD;
}
if(0 != curlx_nonblock(msgsock, TRUE)) {
error = SOCKERRNO;
logmsg("curlx_nonblock failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
sclose(msgsock);
return CURL_SOCKET_BAD;
}
@@ -1814,7 +1833,7 @@ static curl_socket_t accept_connection(curl_socket_t sock)
(void *)&flag, sizeof(flag))) {
error = SOCKERRNO;
logmsg("setsockopt(SO_KEEPALIVE) failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
sclose(msgsock);
return CURL_SOCKET_BAD;
}
@@ -1826,7 +1845,7 @@ static curl_socket_t accept_connection(curl_socket_t sock)
*/
if(!serverlogslocked)
- set_advisor_read_lock(SERVERLOGS_LOCK);
+ set_advisor_read_lock(loglockfile);
serverlogslocked += 1;
logmsg("====> Client connect");
@@ -1853,7 +1872,8 @@ static curl_socket_t accept_connection(curl_socket_t sock)
is no data waiting, or < 0 if it should be closed */
static int service_connection(curl_socket_t msgsock, struct httprequest *req,
curl_socket_t listensock,
- const char *connecthost)
+ const char *connecthost,
+ int keepalive_secs)
{
if(got_exit_signal)
return -1;
@@ -1900,7 +1920,8 @@ static int service_connection(curl_socket_t msgsock, struct httprequest *req,
return 1;
}
else {
- http_connect(&msgsock, listensock, connecthost, req->connect_port);
+ http_connect(&msgsock, listensock, connecthost, req->connect_port,
+ keepalive_secs);
return -1;
}
}
@@ -1917,6 +1938,9 @@ static int service_connection(curl_socket_t msgsock, struct httprequest *req,
logmsg("=> persistent connection request ended, awaits new request\n");
return 1;
}
+ else {
+ logmsg("=> NOT a persistent connection, close close CLOSE\n");
+ }
return -1;
}
@@ -1943,6 +1967,8 @@ int main(int argc, char *argv[])
const char *socket_type = "IPv4";
char port_str[11];
const char *location_str = port_str;
+ int keepalive_secs = 5;
+ const char *protocol_type = "HTTP";
/* a default CONNECT port is basically pointless but still ... */
size_t socket_idx;
@@ -1974,6 +2000,11 @@ int main(int argc, char *argv[])
if(argc>arg)
serverlogfile = argv[arg++];
}
+ else if(!strcmp("--logdir", argv[arg])) {
+ arg++;
+ if(argc>arg)
+ logdir = argv[arg++];
+ }
else if(!strcmp("--cmdfile", argv[arg])) {
arg++;
if(argc>arg)
@@ -1982,6 +2013,7 @@ int main(int argc, char *argv[])
else if(!strcmp("--gopher", argv[arg])) {
arg++;
use_gopher = TRUE;
+ protocol_type = "GOPHER";
end_of_headers = "\r\n"; /* gopher style is much simpler */
}
else if(!strcmp("--ipv4", argv[arg])) {
@@ -2004,8 +2036,9 @@ int main(int argc, char *argv[])
#ifdef USE_UNIX_SOCKETS
unix_socket = argv[arg];
if(strlen(unix_socket) >= sizeof(me.sau.sun_path)) {
- fprintf(stderr, "sws: socket path must be shorter than %zu chars\n",
- sizeof(me.sau.sun_path));
+ fprintf(stderr,
+ "sws: socket path must be shorter than %zu chars: %s\n",
+ sizeof(me.sau.sun_path), unix_socket);
return 0;
}
socket_type = "unix";
@@ -2037,6 +2070,21 @@ int main(int argc, char *argv[])
arg++;
}
}
+ else if(!strcmp("--keepalive", argv[arg])) {
+ arg++;
+ if(argc>arg) {
+ char *endptr;
+ unsigned long ulnum = strtoul(argv[arg], &endptr, 10);
+ if((endptr != argv[arg] + strlen(argv[arg])) ||
+ (ulnum && (ulnum > 65535UL))) {
+ fprintf(stderr, "sws: invalid --keepalive argument (%s), must "
+ "be number of seconds\n", argv[arg]);
+ return 0;
+ }
+ keepalive_secs = curlx_ultous(ulnum);
+ arg++;
+ }
+ }
else if(!strcmp("--connect", argv[arg])) {
/* The connect host IP number that the proxy will connect to no matter
what the client asks for, but also use this as a hint that we run as
@@ -2053,6 +2101,7 @@ int main(int argc, char *argv[])
puts("Usage: sws [option]\n"
" --version\n"
" --logfile [file]\n"
+ " --logdir [directory]\n"
" --pidfile [file]\n"
" --portfile [file]\n"
" --ipv4\n"
@@ -2066,7 +2115,11 @@ int main(int argc, char *argv[])
}
}
-#ifdef WIN32
+ msnprintf(loglockfile, sizeof(loglockfile), "%s/%s/sws-%s%s-%s.lock",
+ logdir, SERVERLOGS_LOCKDIR, protocol_type,
+ is_proxy ? "-proxy" : "", socket_type);
+
+#ifdef _WIN32
win32_init();
atexit(win32_cleanup);
#endif
@@ -2084,8 +2137,7 @@ int main(int argc, char *argv[])
if(CURL_SOCKET_BAD == sock) {
error = SOCKERRNO;
- logmsg("Error creating socket: (%d) %s",
- error, strerror(error));
+ logmsg("Error creating socket: (%d) %s", error, sstrerror(error));
goto sws_cleanup;
}
@@ -2094,13 +2146,13 @@ int main(int argc, char *argv[])
(void *)&flag, sizeof(flag))) {
error = SOCKERRNO;
logmsg("setsockopt(SO_REUSEADDR) failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
goto sws_cleanup;
}
if(0 != curlx_nonblock(sock, TRUE)) {
error = SOCKERRNO;
logmsg("curlx_nonblock failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
goto sws_cleanup;
}
@@ -2128,7 +2180,14 @@ int main(int argc, char *argv[])
}
if(0 != rc) {
error = SOCKERRNO;
- logmsg("Error binding socket: (%d) %s", error, strerror(error));
+#ifdef USE_UNIX_SOCKETS
+ if(socket_domain == AF_UNIX)
+ logmsg("Error binding socket on path %s: (%d) %s",
+ unix_socket, error, sstrerror(error));
+ else
+#endif
+ logmsg("Error binding socket on port %hu: (%d) %s",
+ port, error, sstrerror(error));
goto sws_cleanup;
}
@@ -2149,7 +2208,7 @@ int main(int argc, char *argv[])
if(getsockname(sock, &localaddr.sa, &la_size) < 0) {
error = SOCKERRNO;
logmsg("getsockname() failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
sclose(sock);
goto sws_cleanup;
}
@@ -2181,14 +2240,13 @@ int main(int argc, char *argv[])
msnprintf(port_str, sizeof(port_str), "port %hu", port);
logmsg("Running %s %s version on %s",
- use_gopher?"GOPHER":"HTTP", socket_type, location_str);
+ protocol_type, socket_type, location_str);
/* start accepting connections */
rc = listen(sock, 5);
if(0 != rc) {
error = SOCKERRNO;
- logmsg("listen() failed with error: (%d) %s",
- error, strerror(error));
+ logmsg("listen() failed with error: (%d) %s", error, sstrerror(error));
goto sws_cleanup;
}
@@ -2260,8 +2318,7 @@ int main(int argc, char *argv[])
if(rc < 0) {
error = SOCKERRNO;
- logmsg("select() failed with error: (%d) %s",
- error, strerror(error));
+ logmsg("select() failed with error: (%d) %s", error, sstrerror(error));
goto sws_cleanup;
}
@@ -2280,6 +2337,8 @@ int main(int argc, char *argv[])
logmsg("accept_connection %d returned %d", sock, msgsock);
if(CURL_SOCKET_BAD == msgsock)
goto sws_cleanup;
+ if(req->delay)
+ wait_ms(req->delay);
} while(msgsock > 0);
active--;
}
@@ -2294,7 +2353,7 @@ int main(int argc, char *argv[])
/* Service this connection until it has nothing available */
do {
rc = service_connection(all_sockets[socket_idx], req, sock,
- connecthost);
+ connecthost, keepalive_secs);
if(got_exit_signal)
goto sws_cleanup;
@@ -2320,7 +2379,7 @@ int main(int argc, char *argv[])
serverlogslocked -= 1;
if(!serverlogslocked)
- clear_advisor_read_lock(SERVERLOGS_LOCK);
+ clear_advisor_read_lock(loglockfile);
if(req->testno == DOCNUMBER_QUIT)
goto sws_cleanup;
@@ -2328,6 +2387,19 @@ int main(int argc, char *argv[])
/* Reset the request, unless we're still in the middle of reading */
if(rc && !req->upgrade_request)
+ /* Note: resetting the HTTP request here can cause problems if:
+ * 1) req->skipall is TRUE,
+ * 2) the socket is still open, and
+ * 3) (stale) data is still available (or about to be available)
+ * on that socket
+ * In that case, this loop will run once more and treat that stale
+ * data (in service_connection()) as the first data received on
+ * this new HTTP request and report "** Unusual request" (skipall
+ * would have otherwise caused that data to be ignored). Normally,
+ * that socket will be closed by the client and there won't be any
+ * stale data to cause this, but stranger things have happened (see
+ * issue #11678).
+ */
init_httprequest(req);
} while(rc > 0);
}
@@ -2366,7 +2438,7 @@ sws_cleanup:
if(serverlogslocked) {
serverlogslocked = 0;
- clear_advisor_read_lock(SERVERLOGS_LOCK);
+ clear_advisor_read_lock(loglockfile);
}
restore_signal_handlers(false);
diff --git a/tests/server/testpart.c b/tests/server/testpart.c
index f54c71281..489b218a0 100644
--- a/tests/server/testpart.c
+++ b/tests/server/testpart.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/server/tftp.h b/tests/server/tftp.h
index d8328dcf4..70e219721 100644
--- a/tests/server/tftp.h
+++ b/tests/server/tftp.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -34,7 +34,7 @@
((__GNUC__ == 2) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ >= 7)))
# define PACKED_STRUCT __attribute__((__packed__))
#else
-# define PACKED_STRUCT /*NOTHING*/
+# define PACKED_STRUCT /* NOTHING */
#endif
/* Using a packed struct as binary in a program is begging for problems, but
diff --git a/tests/server/tftpd.c b/tests/server/tftpd.c
index c97c5a71f..9f93f4c6b 100644
--- a/tests/server/tftpd.c
+++ b/tests/server/tftpd.c
@@ -15,7 +15,7 @@
*/
/*
- * Copyright (C) 2005 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
* Copyright (c) 1983, Regents of the University of California.
* All rights reserved.
*
@@ -55,9 +55,7 @@
#ifdef HAVE_SYS_IOCTL_H
#include <sys/ioctl.h>
#endif
-#ifdef HAVE_SIGNAL_H
#include <signal.h>
-#endif
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
#endif
@@ -67,11 +65,6 @@
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
-#ifdef HAVE_ARPA_TFTP_H
-#include <arpa/tftp.h>
-#else
-#include "tftp.h"
-#endif
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
@@ -80,9 +73,7 @@
#include <sys/filio.h>
#endif
-#ifdef HAVE_SETJMP_H
#include <setjmp.h>
-#endif
#ifdef HAVE_PWD_H
#include <pwd.h>
@@ -97,6 +88,7 @@
#include "getpart.h"
#include "util.h"
#include "server_sockaddr.h"
+#include "tftp.h"
/* include memdebug.h last */
#include "memdebug.h"
@@ -163,7 +155,7 @@ struct bf {
#define DEFAULT_LOGFILE "log/tftpd.log"
#endif
-#define REQUEST_DUMP "log/server.input"
+#define REQUEST_DUMP "server.input"
#define DEFAULT_PORT 8999 /* UDP */
@@ -214,7 +206,9 @@ static bool use_ipv6 = FALSE;
#endif
static const char *ipv_inuse = "IPv4";
-const char *serverlogfile = DEFAULT_LOGFILE;
+const char *serverlogfile = DEFAULT_LOGFILE;
+static const char *logdir = "log";
+static char loglockfile[256];
static const char *pidname = ".tftpd.pid";
static const char *portname = NULL; /* none by default */
static int serverlogslocked = 0;
@@ -300,7 +294,7 @@ static void timer(int signum)
}
if(serverlogslocked) {
serverlogslocked = 0;
- clear_advisor_read_lock(SERVERLOGS_LOCK);
+ clear_advisor_read_lock(loglockfile);
}
exit(1);
}
@@ -458,8 +452,8 @@ static ssize_t write_behind(struct testcase *test, int convert)
if(!test->ofile) {
char outfile[256];
- msnprintf(outfile, sizeof(outfile), "log/upload.%ld", test->testno);
-#ifdef WIN32
+ msnprintf(outfile, sizeof(outfile), "%s/upload.%ld", logdir, test->testno);
+#ifdef _WIN32
test->ofile = open(outfile, O_CREAT|O_RDWR|O_BINARY, 0777);
#else
test->ofile = open(outfile, O_CREAT|O_RDWR, 0777);
@@ -498,7 +492,7 @@ static ssize_t write_behind(struct testcase *test, int convert)
putc(c, file); */
if(1 != write(test->ofile, &c, 1))
break;
- skipit:
+skipit:
prevchar = c;
}
return count;
@@ -595,6 +589,11 @@ int main(int argc, char **argv)
if(argc>arg)
serverlogfile = argv[arg++];
}
+ else if(!strcmp("--logdir", argv[arg])) {
+ arg++;
+ if(argc>arg)
+ logdir = argv[arg++];
+ }
else if(!strcmp("--ipv4", argv[arg])) {
#ifdef ENABLE_IPV6
ipv_inuse = "IPv4";
@@ -629,6 +628,7 @@ int main(int argc, char **argv)
puts("Usage: tftpd [option]\n"
" --version\n"
" --logfile [file]\n"
+ " --logdir [directory]\n"
" --pidfile [file]\n"
" --portfile [file]\n"
" --ipv4\n"
@@ -639,7 +639,10 @@ int main(int argc, char **argv)
}
}
-#ifdef WIN32
+ msnprintf(loglockfile, sizeof(loglockfile), "%s/%s/tftp-%s.lock",
+ logdir, SERVERLOGS_LOCKDIR, ipv_inuse);
+
+#ifdef _WIN32
win32_init();
atexit(win32_cleanup);
#endif
@@ -657,8 +660,7 @@ int main(int argc, char **argv)
if(CURL_SOCKET_BAD == sock) {
error = SOCKERRNO;
- logmsg("Error creating socket: (%d) %s",
- error, strerror(error));
+ logmsg("Error creating socket: (%d) %s", error, sstrerror(error));
result = 1;
goto tftpd_cleanup;
}
@@ -668,7 +670,7 @@ int main(int argc, char **argv)
(void *)&flag, sizeof(flag))) {
error = SOCKERRNO;
logmsg("setsockopt(SO_REUSEADDR) failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
result = 1;
goto tftpd_cleanup;
}
@@ -693,8 +695,8 @@ int main(int argc, char **argv)
#endif /* ENABLE_IPV6 */
if(0 != rc) {
error = SOCKERRNO;
- logmsg("Error binding socket on port %hu: (%d) %s",
- port, error, strerror(error));
+ logmsg("Error binding socket on port %hu: (%d) %s", port, error,
+ sstrerror(error));
result = 1;
goto tftpd_cleanup;
}
@@ -716,7 +718,7 @@ int main(int argc, char **argv)
if(getsockname(sock, &localaddr.sa, &la_size) < 0) {
error = SOCKERRNO;
logmsg("getsockname() failed with error: (%d) %s",
- error, strerror(error));
+ error, sstrerror(error));
sclose(sock);
goto tftpd_cleanup;
}
@@ -779,7 +781,7 @@ int main(int argc, char **argv)
break;
}
- set_advisor_read_lock(SERVERLOGS_LOCK);
+ set_advisor_read_lock(loglockfile);
serverlogslocked = 1;
#ifdef ENABLE_IPV6
@@ -833,7 +835,7 @@ int main(int argc, char **argv)
if(serverlogslocked) {
serverlogslocked = 0;
- clear_advisor_read_lock(SERVERLOGS_LOCK);
+ clear_advisor_read_lock(loglockfile);
}
logmsg("end of one transfer");
@@ -861,7 +863,7 @@ tftpd_cleanup:
if(serverlogslocked) {
serverlogslocked = 0;
- clear_advisor_read_lock(SERVERLOGS_LOCK);
+ clear_advisor_read_lock(loglockfile);
}
restore_signal_handlers(true);
@@ -895,13 +897,17 @@ static int do_tftp(struct testcase *test, struct tftphdr *tp, ssize_t size)
#endif
const char *option = "mode"; /* mode is implicit */
int toggle = 1;
+ FILE *server;
+ char dumpfile[256];
+
+ msnprintf(dumpfile, sizeof(dumpfile), "%s/%s", logdir, REQUEST_DUMP);
/* Open request dump file. */
- FILE *server = fopen(REQUEST_DUMP, "ab");
+ server = fopen(dumpfile, "ab");
if(!server) {
int error = errno;
logmsg("fopen() failed with error: %d %s", error, strerror(error));
- logmsg("Error opening file: %s", REQUEST_DUMP);
+ logmsg("Error opening file: %s", dumpfile);
return -1;
}
@@ -1004,7 +1010,7 @@ static int parse_servercmd(struct testcase *req)
FILE *stream;
int error;
- stream = test2fopen(req->testno);
+ stream = test2fopen(req->testno, logdir);
if(!stream) {
error = errno;
logmsg("fopen() failed with error: %d %s", error, strerror(error));
@@ -1115,7 +1121,7 @@ static int validate_access(struct testcase *test,
(void)parse_servercmd(test);
- stream = test2fopen(testno);
+ stream = test2fopen(testno, logdir);
if(0 != partno)
msnprintf(partbuf, sizeof(partbuf), "data%ld", partno);
@@ -1186,7 +1192,7 @@ static void sendtftp(struct testcase *test, const struct formats *pf)
wait_ms(1000*test->writedelay);
}
- send_data:
+send_data:
logmsg("write");
if(swrite(peer, sdp, size + 4) != size + 4) {
logmsg("write: fail");
diff --git a/tests/server/util.c b/tests/server/util.c
index d2214ee6e..5cfdab269 100644
--- a/tests/server/util.c
+++ b/tests/server/util.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,9 +23,7 @@
***************************************************************************/
#include "server_setup.h"
-#ifdef HAVE_SIGNAL_H
#include <signal.h>
-#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
@@ -67,7 +65,7 @@
((__W32API_MAJOR_VERSION == 3) && (__W32API_MINOR_VERSION < 6))
const struct in6_addr in6addr_any = {{ IN6ADDR_ANY_INIT }};
#endif /* w32api < 3.6 */
-#endif /* ENABLE_IPV6 && __MINGW32__*/
+#endif /* ENABLE_IPV6 && __MINGW32__ */
static struct timeval tvnow(void);
@@ -146,17 +144,23 @@ void logmsg(const char *msg, ...)
}
}
-#ifdef WIN32
+#ifdef _WIN32
+/* use instead of strerror() on generic Windows */
+static const char *win32_strerror(int err, char *buf, size_t buflen)
+{
+ if(!FormatMessageA((FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS), NULL, err,
+ LANG_NEUTRAL, buf, (DWORD)buflen, NULL))
+ msnprintf(buf, buflen, "Unknown error %lu (%#lx)", err, err);
+ return buf;
+}
+
/* use instead of perror() on generic windows */
void win32_perror(const char *msg)
{
char buf[512];
DWORD err = SOCKERRNO;
-
- if(!FormatMessageA((FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS), NULL, err,
- LANG_NEUTRAL, buf, sizeof(buf), NULL))
- msnprintf(buf, sizeof(buf), "Unknown error %lu (%#lx)", err, err);
+ win32_strerror(err, buf, sizeof(buf));
if(msg)
fprintf(stderr, "%s: ", msg);
fprintf(stderr, "%s\n", buf);
@@ -197,17 +201,24 @@ void win32_cleanup(void)
/* flush buffers of all streams regardless of their mode */
_flushall();
}
-#endif /* WIN32 */
+
+/* socket-safe strerror (works on WinSock errors, too */
+const char *sstrerror(int err)
+{
+ static char buf[512];
+ return win32_strerror(err, buf, sizeof(buf));
+}
+#endif /* _WIN32 */
/* set by the main code to point to where the test dir is */
const char *path = ".";
-FILE *test2fopen(long testno)
+FILE *test2fopen(long testno, const char *logdir)
{
FILE *stream;
char filename[256];
/* first try the alternative, preprocessed, file */
- msnprintf(filename, sizeof(filename), ALTTEST_DATA_PATH, ".", testno);
+ msnprintf(filename, sizeof(filename), ALTTEST_DATA_PATH, logdir, testno);
stream = fopen(filename, "rb");
if(stream)
return stream;
@@ -281,7 +292,7 @@ curl_off_t our_getpid(void)
curl_off_t pid;
pid = (curl_off_t)getpid();
-#if defined(WIN32) || defined(_WIN32)
+#if defined(_WIN32) || defined(_WIN32)
/* store pid + 65536 to avoid conflict with Cygwin/msys PIDs, see also:
* - https://cygwin.com/git/?p=newlib-cygwin.git;a=commit; ↵
* h=b5e1003722cb14235c4f166be72c09acdffc62ea
@@ -367,32 +378,7 @@ void clear_advisor_read_lock(const char *filename)
}
-/* Portable, consistent toupper (remember EBCDIC). Do not use toupper() because
- its behavior is altered by the current locale. */
-static char raw_toupper(char in)
-{
- if(in >= 'a' && in <= 'z')
- return (char)('A' + in - 'a');
- return in;
-}
-
-int strncasecompare(const char *first, const char *second, size_t max)
-{
- while(*first && *second && max) {
- if(raw_toupper(*first) != raw_toupper(*second)) {
- break;
- }
- max--;
- first++;
- second++;
- }
- if(0 == max)
- return 1; /* they are equal this far */
-
- return raw_toupper(*first) == raw_toupper(*second);
-}
-
-#if defined(WIN32) && !defined(MSDOS)
+#if defined(_WIN32) && !defined(MSDOS)
static struct timeval tvnow(void)
{
@@ -407,8 +393,7 @@ static struct timeval tvnow(void)
** is typically in the range of 10 milliseconds to 16 milliseconds.
*/
struct timeval now;
-#if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0600) && \
- (!defined(__MINGW32__) || defined(__MINGW64_VERSION_MAJOR))
+#if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0600)
ULONGLONG milliseconds = GetTickCount64();
#else
DWORD milliseconds = GetTickCount();
@@ -516,11 +501,11 @@ static SIGHANDLER_T old_sigint_handler = SIG_ERR;
static SIGHANDLER_T old_sigterm_handler = SIG_ERR;
#endif
-#if defined(SIGBREAK) && defined(WIN32)
+#if defined(SIGBREAK) && defined(_WIN32)
static SIGHANDLER_T old_sigbreak_handler = SIG_ERR;
#endif
-#ifdef WIN32
+#ifdef _WIN32
#ifdef _WIN32_WCE
static DWORD thread_main_id = 0;
#else
@@ -536,7 +521,7 @@ volatile int got_exit_signal = 0;
/* if next is set indicates the first signal handled in exit_signal_handler */
volatile int exit_signal = 0;
-#ifdef WIN32
+#ifdef _WIN32
/* event which if set indicates that the program should finish */
HANDLE exit_event = NULL;
#endif
@@ -553,7 +538,7 @@ static void exit_signal_handler(int signum)
if(got_exit_signal == 0) {
got_exit_signal = 1;
exit_signal = signum;
-#ifdef WIN32
+#ifdef _WIN32
if(exit_event)
(void)SetEvent(exit_event);
#endif
@@ -562,7 +547,7 @@ static void exit_signal_handler(int signum)
errno = old_errno;
}
-#ifdef WIN32
+#ifdef _WIN32
/* CTRL event handler for Windows Console applications to simulate
* SIGINT, SIGTERM and SIGBREAK on CTRL events and trigger signal handler.
*
@@ -713,11 +698,9 @@ static SIGHANDLER_T set_signal(int signum, SIGHANDLER_T handler,
void install_signal_handlers(bool keep_sigalrm)
{
-#ifdef WIN32
+#ifdef _WIN32
#ifdef _WIN32_WCE
typedef HANDLE curl_win_thread_handle_t;
-#elif defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)
- typedef unsigned long curl_win_thread_handle_t;
#else
typedef uintptr_t curl_win_thread_handle_t;
#endif
@@ -761,13 +744,13 @@ void install_signal_handlers(bool keep_sigalrm)
if(old_sigterm_handler == SIG_ERR)
logmsg("cannot install SIGTERM handler: %s", strerror(errno));
#endif
-#if defined(SIGBREAK) && defined(WIN32)
+#if defined(SIGBREAK) && defined(_WIN32)
/* handle SIGBREAK signal with our exit_signal_handler */
old_sigbreak_handler = set_signal(SIGBREAK, exit_signal_handler, TRUE);
if(old_sigbreak_handler == SIG_ERR)
logmsg("cannot install SIGBREAK handler: %s", strerror(errno));
#endif
-#ifdef WIN32
+#ifdef _WIN32
if(!SetConsoleCtrlHandler(ctrl_event_handler, TRUE))
logmsg("cannot install CTRL event handler");
#ifdef _WIN32_WCE
@@ -809,11 +792,11 @@ void restore_signal_handlers(bool keep_sigalrm)
if(SIG_ERR != old_sigterm_handler)
(void) set_signal(SIGTERM, old_sigterm_handler, FALSE);
#endif
-#if defined(SIGBREAK) && defined(WIN32)
+#if defined(SIGBREAK) && defined(_WIN32)
if(SIG_ERR != old_sigbreak_handler)
(void) set_signal(SIGBREAK, old_sigbreak_handler, FALSE);
#endif
-#ifdef WIN32
+#ifdef _WIN32
(void)SetConsoleCtrlHandler(ctrl_event_handler, FALSE);
if(thread_main_window && thread_main_id) {
if(PostThreadMessage(thread_main_id, WM_APP, 0, 0)) {
@@ -844,27 +827,26 @@ int bind_unix_socket(curl_socket_t sock, const char *unix_socket,
sau->sun_family = AF_UNIX;
strncpy(sau->sun_path, unix_socket, sizeof(sau->sun_path) - 1);
rc = bind(sock, (struct sockaddr*)sau, sizeof(struct sockaddr_un));
- if(0 != rc && errno == EADDRINUSE) {
+ if(0 != rc && SOCKERRNO == EADDRINUSE) {
struct_stat statbuf;
/* socket already exists. Perhaps it is stale? */
curl_socket_t unixfd = socket(AF_UNIX, SOCK_STREAM, 0);
if(CURL_SOCKET_BAD == unixfd) {
- error = SOCKERRNO;
- logmsg("Error binding socket, failed to create socket at %s: (%d) %s",
- unix_socket, error, strerror(error));
- return rc;
+ logmsg("Failed to create socket at %s: (%d) %s",
+ unix_socket, SOCKERRNO, sstrerror(SOCKERRNO));
+ return -1;
}
/* check whether the server is alive */
rc = connect(unixfd, (struct sockaddr*)sau, sizeof(struct sockaddr_un));
- error = errno;
+ error = SOCKERRNO;
sclose(unixfd);
- if(ECONNREFUSED != error) {
- logmsg("Error binding socket, failed to connect to %s: (%d) %s",
- unix_socket, error, strerror(error));
+ if(0 != rc && ECONNREFUSED != error) {
+ logmsg("Failed to connect to %s: (%d) %s",
+ unix_socket, error, sstrerror(error));
return rc;
}
/* socket server is not alive, now check if it was actually a socket. */
-#ifdef WIN32
+#ifdef _WIN32
/* Windows does not have lstat function. */
rc = curlx_win32_stat(unix_socket, &statbuf);
#else
@@ -877,9 +859,8 @@ int bind_unix_socket(curl_socket_t sock, const char *unix_socket,
}
#ifdef S_IFSOCK
if((statbuf.st_mode & S_IFSOCK) != S_IFSOCK) {
- logmsg("Error binding socket, failed to stat %s: (%d) %s",
- unix_socket, error, strerror(error));
- return rc;
+ logmsg("Error binding socket, failed to stat %s", unix_socket);
+ return -1;
}
#endif
/* dead socket, cleanup and retry bind */
diff --git a/tests/server/util.h b/tests/server/util.h
index 76ca37140..4dff40e81 100644
--- a/tests/server/util.h
+++ b/tests/server/util.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -30,9 +30,8 @@ void logmsg(const char *msg, ...);
long timediff(struct timeval newer, struct timeval older);
#define TEST_DATA_PATH "%s/data/test%ld"
-#define ALTTEST_DATA_PATH "%s/log/test%ld"
-
-#define SERVERLOGS_LOCK "log/serverlogs.lock"
+#define ALTTEST_DATA_PATH "%s/test%ld"
+#define SERVERLOGS_LOCKDIR "lock" /* within logdir */
/* global variable, where to find the 'data' dir */
extern const char *path;
@@ -42,7 +41,7 @@ extern const char *serverlogfile;
extern const char *cmdfile;
-#ifdef WIN32
+#ifdef _WIN32
#include <process.h>
#include <fcntl.h>
@@ -54,10 +53,14 @@ void win32_perror(const char *msg);
void win32_init(void);
void win32_cleanup(void);
-#endif /* WIN32 */
+const char *sstrerror(int err);
+#else /* _WIN32 */
+
+#define sstrerror(e) strerror(e)
+#endif /* _WIN32 */
/* fopens the test case file */
-FILE *test2fopen(long testno);
+FILE *test2fopen(long testno, const char *logdir);
int wait_ms(int timeout_ms);
curl_off_t our_getpid(void);
@@ -65,7 +68,6 @@ int write_pidfile(const char *filename);
int write_portfile(const char *filename, int port);
void set_advisor_read_lock(const char *filename);
void clear_advisor_read_lock(const char *filename);
-int strncasecompare(const char *first, const char *second, size_t max);
/* global variable which if set indicates that the program should finish */
extern volatile int got_exit_signal;
@@ -73,7 +75,7 @@ extern volatile int got_exit_signal;
/* global variable which if set indicates the first signal handled */
extern volatile int exit_signal;
-#ifdef WIN32
+#ifdef _WIN32
/* global event which if set indicates that the program should finish */
extern HANDLE exit_event;
#endif
diff --git a/tests/serverhelp.pm b/tests/serverhelp.pm
index 7d312cc03..502b6eb44 100644
--- a/tests/serverhelp.pm
+++ b/tests/serverhelp.pm
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -22,48 +22,45 @@
#
#***************************************************************************
+# This perl module contains functions useful in writing test servers.
+
package serverhelp;
use strict;
use warnings;
-use Exporter;
-
-#***************************************************************************
-# Global symbols allowed without explicit package name
-#
-use vars qw(
- @ISA
- @EXPORT_OK
+BEGIN {
+ use base qw(Exporter);
+
+ our @EXPORT_OK = qw(
+ logmsg
+ $logfile
+ serverfactors
+ servername_id
+ servername_str
+ servername_canon
+ server_pidfilename
+ server_portfilename
+ server_logfilename
+ server_cmdfilename
+ server_inputfilename
+ server_outputfilename
+ mainsockf_pidfilename
+ mainsockf_logfilename
+ datasockf_pidfilename
+ datasockf_logfilename
);
+ # sub second timestamping needs Time::HiRes
+ eval {
+ no warnings "all";
+ require Time::HiRes;
+ import Time::HiRes qw( gettimeofday );
+ }
+}
-#***************************************************************************
-# Inherit Exporter's capabilities
-#
-@ISA = qw(Exporter);
-
-
-#***************************************************************************
-# Global symbols this module will export upon request
-#
-@EXPORT_OK = qw(
- serverfactors
- servername_id
- servername_str
- servername_canon
- server_pidfilename
- server_portfilename
- server_logfilename
- server_cmdfilename
- server_inputfilename
- server_outputfilename
- mainsockf_pidfilename
- mainsockf_logfilename
- datasockf_pidfilename
- datasockf_logfilename
- );
+our $logfile; # server log file name, for logmsg
#***************************************************************************
# Just for convenience, test harness uses 'https' and 'httptls' literals as
@@ -71,6 +68,31 @@ use vars qw(
# 'https' literal is used for stunnel based https test servers, and 'httptls'
# is used for non-stunnel https test servers.
+#**********************************************************************
+# logmsg is general message logging subroutine for our test servers.
+#
+sub logmsg {
+ my $now;
+ # sub second timestamping needs Time::HiRes
+ if($Time::HiRes::VERSION) {
+ my ($seconds, $usec) = gettimeofday();
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
+ localtime($seconds);
+ $now = sprintf("%02d:%02d:%02d.%06d ", $hour, $min, $sec, $usec);
+ }
+ else {
+ my $seconds = time();
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
+ localtime($seconds);
+ $now = sprintf("%02d:%02d:%02d ", $hour, $min, $sec);
+ }
+ if(open(my $logfilefh, ">>", "$logfile")) {
+ print $logfilefh $now;
+ print $logfilefh @_;
+ close($logfilefh);
+ }
+}
+
#***************************************************************************
# Return server characterization factors given a server id string.
@@ -108,7 +130,7 @@ sub servername_str {
$proto = uc($proto) if($proto);
die "unsupported protocol: '$proto'" unless($proto &&
- ($proto =~ /^(((FTP|HTTP|HTTP\/2|IMAP|POP3|GOPHER|SMTP|HTTP-PIPE)S?)|(TFTP|SFTP|SOCKS|SSH|RTSP|HTTPTLS|DICT|SMB|SMBS|TELNET|MQTT))$/));
+ ($proto =~ /^(((FTP|HTTP|HTTP\/2|HTTP\/3|IMAP|POP3|GOPHER|SMTP|HTTP-PIPE)S?)|(TFTP|SFTP|SOCKS|SSH|RTSP|HTTPTLS|DICT|SMB|SMBS|TELNET|MQTT))$/));
$ipver = (not $ipver) ? 'ipv4' : lc($ipver);
die "unsupported IP version: '$ipver'" unless($ipver &&
@@ -118,7 +140,7 @@ sub servername_str {
$idnum = 1 if(not $idnum);
die "unsupported ID number: '$idnum'" unless($idnum &&
($idnum =~ /^(\d+)$/));
- $idnum = '' unless($idnum > 1);
+ $idnum = '' if($idnum <= 1);
return "${proto}${idnum}${ipver}";
}
@@ -149,18 +171,18 @@ sub servername_canon {
# Return file name for server pid file.
#
sub server_pidfilename {
- my ($proto, $ipver, $idnum) = @_;
+ my ($piddir, $proto, $ipver, $idnum) = @_;
my $trailer = '_server.pid';
- return '.'. servername_canon($proto, $ipver, $idnum) ."$trailer";
+ return "${piddir}/". servername_canon($proto, $ipver, $idnum) ."$trailer";
}
#***************************************************************************
# Return file name for server port file.
#
sub server_portfilename {
- my ($proto, $ipver, $idnum) = @_;
+ my ($piddir, $proto, $ipver, $idnum) = @_;
my $trailer = '_server.port';
- return '.'. servername_canon($proto, $ipver, $idnum) ."$trailer";
+ return "${piddir}/". servername_canon($proto, $ipver, $idnum) ."$trailer";
}
@@ -209,11 +231,11 @@ sub server_outputfilename {
# Return file name for main or primary sockfilter pid file.
#
sub mainsockf_pidfilename {
- my ($proto, $ipver, $idnum) = @_;
+ my ($piddir, $proto, $ipver, $idnum) = @_;
die "unsupported protocol: '$proto'" unless($proto &&
(lc($proto) =~ /^(ftp|imap|pop3|smtp)s?$/));
my $trailer = (lc($proto) =~ /^ftps?$/) ? '_sockctrl.pid':'_sockfilt.pid';
- return '.'. servername_canon($proto, $ipver, $idnum) ."$trailer";
+ return "${piddir}/". servername_canon($proto, $ipver, $idnum) ."$trailer";
}
@@ -233,11 +255,11 @@ sub mainsockf_logfilename {
# Return file name for data or secondary sockfilter pid file.
#
sub datasockf_pidfilename {
- my ($proto, $ipver, $idnum) = @_;
+ my ($piddir, $proto, $ipver, $idnum) = @_;
die "unsupported protocol: '$proto'" unless($proto &&
(lc($proto) =~ /^ftps?$/));
my $trailer = '_sockdata.pid';
- return '.'. servername_canon($proto, $ipver, $idnum) ."$trailer";
+ return "${piddir}/". servername_canon($proto, $ipver, $idnum) ."$trailer";
}
diff --git a/tests/servers.pm b/tests/servers.pm
new file mode 100644
index 000000000..9416ba758
--- /dev/null
+++ b/tests/servers.pm
@@ -0,0 +1,3010 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed 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 module contains functions that are useful for managing the lifecycle of
+# test servers required when running tests. It is not intended for use within
+# those servers, but rather for starting and stopping them.
+
+package servers;
+
+use IO::Socket;
+use strict;
+use warnings;
+
+BEGIN {
+ use base qw(Exporter);
+
+ our @EXPORT = (
+ # variables
+ qw(
+ $SOCKSIN
+ $err_unexpected
+ $debugprotocol
+ $stunnel
+ ),
+
+ # functions
+ qw(
+ initserverconfig
+ )
+ );
+
+ our @EXPORT_OK = (
+ # functions
+ qw(
+ checkcmd
+ clearlocks
+ serverfortest
+ stopserver
+ stopservers
+ subvariables
+ ),
+
+ # for debugging only
+ qw(
+ protoport
+ )
+ );
+}
+
+use serverhelp qw(
+ serverfactors
+ servername_id
+ servername_str
+ servername_canon
+ server_pidfilename
+ server_portfilename
+ server_logfilename
+ );
+
+use sshhelp qw(
+ $hstpubmd5f
+ $hstpubsha256f
+ $sshexe
+ $sftpexe
+ $sftpconfig
+ $sshdlog
+ $sftplog
+ $sftpcmds
+ display_sshdconfig
+ display_sftpconfig
+ display_sshdlog
+ display_sftplog
+ find_sshd
+ find_ssh
+ find_sftp
+ find_httptlssrv
+ sshversioninfo
+ );
+
+use pathhelp qw(
+ exe_ext
+ os_is_win
+ sys_native_abs_path
+ );
+
+use processhelp;
+use globalconfig;
+use testutil qw(
+ logmsg
+ runclient
+ runclientoutput
+ );
+
+
+my %serverpidfile; # all server pid file names, identified by server id
+my %serverportfile;# all server port file names, identified by server id
+my $sshdvernum; # for socks server, ssh daemon version number
+my $sshdverstr; # for socks server, ssh daemon version string
+my $sshderror; # for socks server, ssh daemon version error
+my %doesntrun; # servers that don't work, identified by pidfile
+my %PORT = (nolisten => 47); # port we use for a local non-listening service
+my $server_response_maxtime=13;
+my $httptlssrv = find_httptlssrv();
+my %run; # running server
+my %runcert; # cert file currently in use by an ssl running server
+my $CLIENTIP="127.0.0.1"; # address which curl uses for incoming connections
+my $CLIENT6IP="[::1]"; # address which curl uses for incoming connections
+my $posix_pwd=$pwd; # current working directory
+my $h2cver = "h2c"; # this version is decided by the nghttp2 lib being used
+my $portrange = 999; # space from which to choose a random port
+ # don't increase without making sure generated port
+ # numbers will always be valid (<=65535)
+my $HOSTIP="127.0.0.1"; # address on which the test server listens
+my $HOST6IP="[::1]"; # address on which the test server listens
+my $HTTPUNIXPATH; # HTTP server Unix domain socket path
+my $SOCKSUNIXPATH; # socks server Unix domain socket path
+my $SSHSRVMD5 = "[uninitialized]"; # MD5 of ssh server public key
+my $SSHSRVSHA256 = "[uninitialized]"; # SHA256 of ssh server public key
+my $USER; # name of the current user
+my $sshdid; # for socks server, ssh daemon version id
+my $ftpchecktime=1; # time it took to verify our test FTP server
+
+# Variables shared with runtests.pl
+our $SOCKSIN="socksd-request.log"; # what curl sent to the SOCKS proxy
+our $err_unexpected; # error instead of warning on server unexpectedly alive
+our $debugprotocol; # nonzero for verbose server logs
+our $stunnel; # path to stunnel command
+
+
+#######################################################################
+# Check for a command in the PATH of the test server.
+#
+sub checkcmd {
+ my ($cmd, @extrapaths)=@_;
+ my $sep = '[:]';
+ if ($^O eq 'MSWin32' || $^O eq 'dos' || $^O eq 'os2') {
+ # PATH separator is different
+ $sep = '[;]';
+ }
+ my @paths=(split(m/$sep/, $ENV{'PATH'}), "/usr/sbin", "/usr/local/sbin",
+ "/sbin", "/usr/bin", "/usr/local/bin", @extrapaths);
+ for(@paths) {
+ if( -x "$_/$cmd" . exe_ext('SYS') && ! -d "$_/$cmd" . exe_ext('SYS')) {
+ # executable bit but not a directory!
+ return "$_/$cmd";
+ }
+ }
+ return "";
+}
+
+#######################################################################
+# Create a server socket on a random (unused) port, then close it and
+# return the port number
+#
+sub getfreeport {
+ my ($ipnum) = @_;
+ my $server = IO::Socket->new(LocalPort => 0,
+ Domain => $ipnum == 6 ? AF_INET6 : AF_INET,
+ Type => SOCK_STREAM,
+ Reuse => 1,
+ Listen => 10 )
+ or die "Couldn't create tcp server socket: $@\n";
+
+ return $server->sockport();
+}
+
+use File::Temp qw/ tempfile/;
+
+#######################################################################
+# Initialize configuration variables
+sub initserverconfig {
+ my ($fh, $socks) = tempfile("/tmp/curl-socksd-XXXXXXXX");
+ close($fh);
+ unlink($socks);
+ my ($f2, $http) = tempfile("/tmp/curl-http-XXXXXXXX");
+ close($f2);
+ unlink($http);
+ $SOCKSUNIXPATH = $socks; # SOCKS Unix domain socket
+ $HTTPUNIXPATH = $http; # HTTP Unix domain socket
+ $stunnel = checkcmd("stunnel4") || checkcmd("tstunnel") || checkcmd("stunnel");
+
+ # get the name of the current user
+ $USER = $ENV{USER}; # Linux
+ if (!$USER) {
+ $USER = $ENV{USERNAME}; # Windows
+ if (!$USER) {
+ $USER = $ENV{LOGNAME}; # Some Unix (I think)
+ }
+ }
+ init_serverpidfile_hash();
+}
+
+#######################################################################
+# Load serverpidfile and serverportfile hashes with file names for all
+# possible servers.
+#
+sub init_serverpidfile_hash {
+ for my $proto (('ftp', 'gopher', 'http', 'imap', 'pop3', 'smtp', 'http/2', 'http/3')) {
+ for my $ssl (('', 's')) {
+ for my $ipvnum ((4, 6)) {
+ for my $idnum ((1, 2, 3)) {
+ my $serv = servername_id("$proto$ssl", $ipvnum, $idnum);
+ my $pidf = server_pidfilename("$LOGDIR/$PIDDIR", "$proto$ssl",
+ $ipvnum, $idnum);
+ $serverpidfile{$serv} = $pidf;
+ my $portf = server_portfilename("$LOGDIR/$PIDDIR", "$proto$ssl",
+ $ipvnum, $idnum);
+ $serverportfile{$serv} = $portf;
+ }
+ }
+ }
+ }
+ for my $proto (('tftp', 'sftp', 'socks', 'ssh', 'rtsp', 'httptls',
+ 'dict', 'smb', 'smbs', 'telnet', 'mqtt')) {
+ for my $ipvnum ((4, 6)) {
+ for my $idnum ((1, 2)) {
+ my $serv = servername_id($proto, $ipvnum, $idnum);
+ my $pidf = server_pidfilename("$LOGDIR/$PIDDIR", $proto, $ipvnum,
+ $idnum);
+ $serverpidfile{$serv} = $pidf;
+ my $portf = server_portfilename("$LOGDIR/$PIDDIR", $proto, $ipvnum,
+ $idnum);
+ $serverportfile{$serv} = $portf;
+ }
+ }
+ }
+ for my $proto (('http', 'imap', 'pop3', 'smtp', 'http/2', 'http/3')) {
+ for my $ssl (('', 's')) {
+ my $serv = servername_id("$proto$ssl", "unix", 1);
+ my $pidf = server_pidfilename("$LOGDIR/$PIDDIR", "$proto$ssl",
+ "unix", 1);
+ $serverpidfile{$serv} = $pidf;
+ my $portf = server_portfilename("$LOGDIR/$PIDDIR", "$proto$ssl",
+ "unix", 1);
+ $serverportfile{$serv} = $portf;
+ }
+ }
+}
+
+
+#######################################################################
+# Kill the processes that still have lock files in a directory
+#
+sub clearlocks {
+ my $dir = $_[0];
+ my $done = 0;
+
+ if(os_is_win()) {
+ $dir = sys_native_abs_path($dir);
+ $dir =~ s/\//\\\\/g;
+ my $handle = "handle";
+ if($ENV{"PROCESSOR_ARCHITECTURE"} =~ /64$/) {
+ $handle = "handle64";
+ }
+ if(checkcmd($handle)) {
+ my @handles = `$handle $dir -accepteula -nobanner`;
+ for my $tryhandle (@handles) {
+ # Skip the "No matching handles found." warning when returned
+ if($tryhandle =~ /^(\S+)\s+pid:\s+(\d+)\s+type:\s+(\w+)\s+([0-9A-F]+):\s+(.+)\r\r/) {
+ logmsg "Found $3 lock of '$5' ($4) by $1 ($2)\n";
+ # Ignore stunnel since we cannot do anything about its locks
+ if("$3" eq "File" && "$1" ne "tstunnel.exe") {
+ logmsg "Killing IMAGENAME eq $1 and PID eq $2\n";
+ system("taskkill.exe -f -fi \"IMAGENAME eq $1\" -fi \"PID eq $2\" >nul 2>&1");
+ $done = 1;
+ }
+ }
+ }
+ }
+ }
+ return $done;
+}
+
+#######################################################################
+# Check if a given child process has just died. Reaps it if so.
+#
+sub checkdied {
+ my $pid = $_[0];
+ if((not defined $pid) || $pid <= 0) {
+ return 0;
+ }
+ use POSIX ":sys_wait_h";
+ my $rc = pidwait($pid, &WNOHANG);
+ return ($rc == $pid)?1:0;
+}
+
+
+##############################################################################
+# This function makes sure the right set of server is running for the
+# specified test case. This is a useful design when we run single tests as not
+# all servers need to run then!
+#
+# Returns: a string, blank if everything is fine or a reason why it failed, and
+# an integer:
+# 0 for success
+# 1 for an error starting the server
+# 2 for not the first time getting an error starting the server
+# 3 for a failure to stop a server in order to restart it
+# 4 for an unsupported server type
+#
+sub serverfortest {
+ my (@what)=@_;
+
+ for(my $i = scalar(@what) - 1; $i >= 0; $i--) {
+ my $srvrline = $what[$i];
+ chomp $srvrline if($srvrline);
+ if($srvrline =~ /^(\S+)((\s*)(.*))/) {
+ my $server = "${1}";
+ my $lnrest = "${2}";
+ my $tlsext;
+ if($server =~ /^(httptls)(\+)(ext|srp)(\d*)(-ipv6|)$/) {
+ $server = "${1}${4}${5}";
+ $tlsext = uc("TLS-${3}");
+ }
+ if(! grep /^\Q$server\E$/, @protocols) {
+ if(substr($server,0,5) ne "socks") {
+ if($tlsext) {
+ return ("curl lacks $tlsext support", 4);
+ }
+ else {
+ return ("curl lacks $server server support", 4);
+ }
+ }
+ }
+ $what[$i] = "$server$lnrest" if($tlsext);
+ }
+ }
+
+ return &startservers(@what);
+}
+
+
+#######################################################################
+# Start a new thread/process and run the given command line in there.
+# Return the pids (yes plural) of the new child process to the parent.
+#
+sub startnew {
+ my ($cmd, $pidfile, $timeout, $fakepidfile)=@_;
+
+ logmsg "startnew: $cmd\n" if ($verbose);
+
+ my $child = fork();
+
+ if(not defined $child) {
+ logmsg "startnew: fork() failure detected\n";
+ return (-1,-1);
+ }
+
+ if(0 == $child) {
+ # Here we are the child. Run the given command.
+
+ # Flush output.
+ $| = 1;
+
+ # Put an "exec" in front of the command so that the child process
+ # keeps this child's process ID.
+ exec("exec $cmd") || die "Can't exec() $cmd: $!";
+
+ # exec() should never return back here to this process. We protect
+ # ourselves by calling die() just in case something goes really bad.
+ die "error: exec() has returned";
+ }
+
+ # Ugly hack but ssh client and gnutls-serv don't support pid files
+ if ($fakepidfile) {
+ if(open(my $out, ">", "$pidfile")) {
+ print $out $child . "\n";
+ close($out) || die "Failure writing pidfile";
+ logmsg "startnew: $pidfile faked with pid=$child\n" if($verbose);
+ }
+ else {
+ logmsg "startnew: failed to write fake $pidfile with pid=$child\n";
+ }
+ # could/should do a while connect fails sleep a bit and loop
+ portable_sleep($timeout);
+ if (checkdied($child)) {
+ logmsg "startnew: child process has failed to start\n" if($verbose);
+ return (-1,-1);
+ }
+ }
+
+ my $pid2 = 0;
+ my $count = $timeout;
+ while($count--) {
+ $pid2 = pidfromfile($pidfile);
+ if(($pid2 > 0) && pidexists($pid2)) {
+ # if $pid2 is valid, then make sure this pid is alive, as
+ # otherwise it is just likely to be the _previous_ pidfile or
+ # similar!
+ last;
+ }
+ if (checkdied($child)) {
+ logmsg "startnew: child process has died, server might start up\n"
+ if($verbose);
+ # We can't just abort waiting for the server with a
+ # return (-1,-1);
+ # because the server might have forked and could still start
+ # up normally. Instead, just reduce the amount of time we remain
+ # waiting.
+ $count >>= 2;
+ }
+ sleep(1);
+ }
+
+ # Return two PIDs, the one for the child process we spawned and the one
+ # reported by the server itself (in case it forked again on its own).
+ # Both (potentially) need to be killed at the end of the test.
+ return ($child, $pid2);
+}
+
+
+#######################################################################
+# Return the port to use for the given protocol.
+#
+sub protoport {
+ my ($proto) = @_;
+ return $PORT{$proto} || "[not running]";
+}
+
+
+#######################################################################
+# Stop a test server along with pids which aren't in the %run hash yet.
+# This also stops all servers which are relative to the given one.
+#
+sub stopserver {
+ my ($server, $pidlist) = @_;
+
+ #
+ # kill sockfilter processes for pingpong relative server
+ #
+ if($server =~ /^(ftp|imap|pop3|smtp)s?(\d*)(-ipv6|)$/) {
+ my $proto = $1;
+ my $idnum = ($2 && ($2 > 1)) ? $2 : 1;
+ my $ipvnum = ($3 && ($3 =~ /6$/)) ? 6 : 4;
+ killsockfilters("$LOGDIR/$PIDDIR", $proto, $ipvnum, $idnum, $verbose);
+ }
+ #
+ # All servers relative to the given one must be stopped also
+ #
+ my @killservers;
+ if($server =~ /^(ftp|http|imap|pop3|smtp)s((\d*)(-ipv6|-unix|))$/) {
+ # given a stunnel based ssl server, also kill non-ssl underlying one
+ push @killservers, "${1}${2}";
+ }
+ elsif($server =~ /^(ftp|http|imap|pop3|smtp)((\d*)(-ipv6|-unix|))$/) {
+ # given a non-ssl server, also kill stunnel based ssl piggybacking one
+ push @killservers, "${1}s${2}";
+ }
+ elsif($server =~ /^(socks)((\d*)(-ipv6|))$/) {
+ # given a socks server, also kill ssh underlying one
+ push @killservers, "ssh${2}";
+ }
+ elsif($server =~ /^(ssh)((\d*)(-ipv6|))$/) {
+ # given a ssh server, also kill socks piggybacking one
+ push @killservers, "socks${2}";
+ }
+ if($server eq "http" or $server eq "https") {
+ # since the http2+3 server is a proxy that needs to know about the
+ # dynamic http port it too needs to get restarted when the http server
+ # is killed
+ push @killservers, "http/2";
+ push @killservers, "http/3";
+ }
+ push @killservers, $server;
+ #
+ # kill given pids and server relative ones clearing them in %run hash
+ #
+ foreach my $server (@killservers) {
+ if($run{$server}) {
+ # we must prepend a space since $pidlist may already contain a pid
+ $pidlist .= " $run{$server}";
+ $run{$server} = 0;
+ }
+ $runcert{$server} = 0 if($runcert{$server});
+ }
+ killpid($verbose, $pidlist);
+ #
+ # cleanup server pid files
+ #
+ my $result = 0;
+ foreach my $server (@killservers) {
+ my $pidfile = $serverpidfile{$server};
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ if($err_unexpected) {
+ logmsg "ERROR: ";
+ $result = -1;
+ }
+ else {
+ logmsg "Warning: ";
+ }
+ logmsg "$server server unexpectedly alive\n";
+ killpid($verbose, $pid);
+ }
+ unlink($pidfile) if(-f $pidfile);
+ }
+
+ return $result;
+}
+
+
+#######################################################################
+# Return flags to let curl use an external HTTP proxy
+#
+sub getexternalproxyflags {
+ return " --proxy $proxy_address ";
+}
+
+#######################################################################
+# Verify that the server that runs on $ip, $port is our server. This also
+# implies that we can speak with it, as there might be occasions when the
+# server runs fine but we cannot talk to it ("Failed to connect to ::1: Can't
+# assign requested address")
+#
+sub verifyhttp {
+ my ($proto, $ipvnum, $idnum, $ip, $port_or_path) = @_;
+ my $server = servername_id($proto, $ipvnum, $idnum);
+ my $bonus="";
+ # $port_or_path contains a path for Unix sockets, sws ignores the port
+ my $port = ($ipvnum eq "unix") ? 80 : $port_or_path;
+
+ my $verifyout = "$LOGDIR/".
+ servername_canon($proto, $ipvnum, $idnum) .'_verify.out';
+ unlink($verifyout) if(-f $verifyout);
+
+ my $verifylog = "$LOGDIR/".
+ servername_canon($proto, $ipvnum, $idnum) .'_verify.log';
+ unlink($verifylog) if(-f $verifylog);
+
+ if($proto eq "gopher") {
+ # gopher is funny
+ $bonus="1/";
+ }
+
+ my $flags = "--max-time $server_response_maxtime ";
+ $flags .= "--output $verifyout ";
+ $flags .= "--silent ";
+ $flags .= "--verbose ";
+ $flags .= "--globoff ";
+ $flags .= "--unix-socket '$port_or_path' " if $ipvnum eq "unix";
+ $flags .= "--insecure " if($proto eq 'https');
+ if($proxy_address) {
+ $flags .= getexternalproxyflags();
+ }
+ $flags .= "\"$proto://$ip:$port/${bonus}verifiedserver\"";
+
+ my $cmd = "$VCURL $flags 2>$verifylog";
+
+ # verify if our/any server is running on this port
+ logmsg "RUN: $cmd\n" if($verbose);
+ my $res = runclient($cmd);
+
+ $res >>= 8; # rotate the result
+ if($res & 128) {
+ logmsg "RUN: curl command died with a coredump\n";
+ return -1;
+ }
+
+ if($res && $verbose) {
+ logmsg "RUN: curl command returned $res\n";
+ if(open(my $file, "<", "$verifylog")) {
+ while(my $string = <$file>) {
+ logmsg "RUN: $string" if($string !~ /^([ \t]*)$/);
+ }
+ close($file);
+ }
+ }
+
+ my $data;
+ if(open(my $file, "<", "$verifyout")) {
+ while(my $string = <$file>) {
+ $data = $string;
+ last; # only want first line
+ }
+ close($file);
+ }
+
+ my $pid = 0;
+ if($data && ($data =~ /WE ROOLZ: (\d+)/)) {
+ $pid = 0+$1;
+ }
+ elsif($res == 6) {
+ # curl: (6) Couldn't resolve host '::1'
+ logmsg "RUN: failed to resolve host ($proto://$ip:$port/verifiedserver)\n";
+ return -1;
+ }
+ elsif($data || ($res && ($res != 7))) {
+ logmsg "RUN: Unknown server on our $server port: $port ($res)\n";
+ return -1;
+ }
+ return $pid;
+}
+
+#######################################################################
+# Verify that the server that runs on $ip, $port is our server. This also
+# implies that we can speak with it, as there might be occasions when the
+# server runs fine but we cannot talk to it ("Failed to connect to ::1: Can't
+# assign requested address")
+#
+sub verifyftp {
+ my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
+ my $server = servername_id($proto, $ipvnum, $idnum);
+ my $time=time();
+ my $extra="";
+
+ my $verifylog = "$LOGDIR/".
+ servername_canon($proto, $ipvnum, $idnum) .'_verify.log';
+ unlink($verifylog) if(-f $verifylog);
+
+ if($proto eq "ftps") {
+ $extra .= "--insecure --ftp-ssl-control ";
+ }
+
+ my $flags = "--max-time $server_response_maxtime ";
+ $flags .= "--silent ";
+ $flags .= "--verbose ";
+ $flags .= "--globoff ";
+ $flags .= $extra;
+ if($proxy_address) {
+ $flags .= getexternalproxyflags();
+ }
+ $flags .= "\"$proto://$ip:$port/verifiedserver\"";
+
+ my $cmd = "$VCURL $flags 2>$verifylog";
+
+ # check if this is our server running on this port:
+ logmsg "RUN: $cmd\n" if($verbose);
+ my @data = runclientoutput($cmd);
+
+ my $res = $? >> 8; # rotate the result
+ if($res & 128) {
+ logmsg "RUN: curl command died with a coredump\n";
+ return -1;
+ }
+
+ my $pid = 0;
+ foreach my $line (@data) {
+ if($line =~ /WE ROOLZ: (\d+)/) {
+ # this is our test server with a known pid!
+ $pid = 0+$1;
+ last;
+ }
+ }
+ if($pid <= 0 && @data && $data[0]) {
+ # this is not a known server
+ logmsg "RUN: Unknown server on our $server port: $port\n";
+ return 0;
+ }
+ # we can/should use the time it took to verify the FTP server as a measure
+ # on how fast/slow this host/FTP is.
+ my $took = int(0.5+time()-$time);
+
+ if($verbose) {
+ logmsg "RUN: Verifying our test $server server took $took seconds\n";
+ }
+ $ftpchecktime = $took>=1?$took:1; # make sure it never is below 1
+
+ return $pid;
+}
+
+#######################################################################
+# Verify that the server that runs on $ip, $port is our server. This also
+# implies that we can speak with it, as there might be occasions when the
+# server runs fine but we cannot talk to it ("Failed to connect to ::1: Can't
+# assign requested address")
+#
+sub verifyrtsp {
+ my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
+ my $server = servername_id($proto, $ipvnum, $idnum);
+
+ my $verifyout = "$LOGDIR/".
+ servername_canon($proto, $ipvnum, $idnum) .'_verify.out';
+ unlink($verifyout) if(-f $verifyout);
+
+ my $verifylog = "$LOGDIR/".
+ servername_canon($proto, $ipvnum, $idnum) .'_verify.log';
+ unlink($verifylog) if(-f $verifylog);
+
+ my $flags = "--max-time $server_response_maxtime ";
+ $flags .= "--output $verifyout ";
+ $flags .= "--silent ";
+ $flags .= "--verbose ";
+ $flags .= "--globoff ";
+ if($proxy_address) {
+ $flags .= getexternalproxyflags();
+ }
+ # currently verification is done using http
+ $flags .= "\"http://$ip:$port/verifiedserver\"";
+
+ my $cmd = "$VCURL $flags 2>$verifylog";
+
+ # verify if our/any server is running on this port
+ logmsg "RUN: $cmd\n" if($verbose);
+ my $res = runclient($cmd);
+
+ $res >>= 8; # rotate the result
+ if($res & 128) {
+ logmsg "RUN: curl command died with a coredump\n";
+ return -1;
+ }
+
+ if($res && $verbose) {
+ logmsg "RUN: curl command returned $res\n";
+ if(open(my $file, "<", "$verifylog")) {
+ while(my $string = <$file>) {
+ logmsg "RUN: $string" if($string !~ /^[ \t]*$/);
+ }
+ close($file);
+ }
+ }
+
+ my $data;
+ if(open(my $file, "<", "$verifyout")) {
+ while(my $string = <$file>) {
+ $data = $string;
+ last; # only want first line
+ }
+ close($file);
+ }
+
+ my $pid = 0;
+ if($data && ($data =~ /RTSP_SERVER WE ROOLZ: (\d+)/)) {
+ $pid = 0+$1;
+ }
+ elsif($res == 6) {
+ # curl: (6) Couldn't resolve host '::1'
+ logmsg "RUN: failed to resolve host ($proto://$ip:$port/verifiedserver)\n";
+ return -1;
+ }
+ elsif($data || ($res != 7)) {
+ logmsg "RUN: Unknown server on our $server port: $port\n";
+ return -1;
+ }
+ return $pid;
+}
+
+#######################################################################
+# Verify that the ssh server has written out its pidfile, recovering
+# the pid from the file and returning it if a process with that pid is
+# actually alive, or a negative value if the process is dead.
+#
+sub verifyssh {
+ my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
+ my $pidfile = server_pidfilename("$LOGDIR/$PIDDIR", $proto, $ipvnum,
+ $idnum);
+ my $pid = processexists($pidfile);
+ if($pid < 0) {
+ logmsg "RUN: SSH server has died after starting up\n";
+ }
+ return $pid;
+}
+
+#######################################################################
+# Verify that we can connect to the sftp server, properly authenticate
+# with generated config and key files and run a simple remote pwd.
+#
+sub verifysftp {
+ my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
+ my $server = servername_id($proto, $ipvnum, $idnum);
+ my $verified = 0;
+ # Find out sftp client canonical file name
+ my $sftp = find_sftp();
+ if(!$sftp) {
+ logmsg "RUN: SFTP server cannot find $sftpexe\n";
+ return -1;
+ }
+ # Find out ssh client canonical file name
+ my $ssh = find_ssh();
+ if(!$ssh) {
+ logmsg "RUN: SFTP server cannot find $sshexe\n";
+ return -1;
+ }
+ # Connect to sftp server, authenticate and run a remote pwd
+ # command using our generated configuration and key files
+ my $cmd = "\"$sftp\" -b $LOGDIR/$PIDDIR/$sftpcmds -F $LOGDIR/$PIDDIR/$sftpconfig -S \"$ssh\" $ip > $sftplog 2>&1";
+ my $res = runclient($cmd);
+ # Search for pwd command response in log file
+ if(open(my $sftplogfile, "<", "$sftplog")) {
+ while(<$sftplogfile>) {
+ if(/^Remote working directory: /) {
+ $verified = 1;
+ last;
+ }
+ }
+ close($sftplogfile);
+ }
+ return $verified;
+}
+
+#######################################################################
+# Verify that the non-stunnel HTTP TLS extensions capable server that runs
+# on $ip, $port is our server. This also implies that we can speak with it,
+# as there might be occasions when the server runs fine but we cannot talk
+# to it ("Failed to connect to ::1: Can't assign requested address")
+#
+sub verifyhttptls {
+ my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
+ my $server = servername_id($proto, $ipvnum, $idnum);
+ my $pidfile = server_pidfilename("$LOGDIR/$PIDDIR", $proto, $ipvnum,
+ $idnum);
+
+ my $verifyout = "$LOGDIR/".
+ servername_canon($proto, $ipvnum, $idnum) .'_verify.out';
+ unlink($verifyout) if(-f $verifyout);
+
+ my $verifylog = "$LOGDIR/".
+ servername_canon($proto, $ipvnum, $idnum) .'_verify.log';
+ unlink($verifylog) if(-f $verifylog);
+
+ my $flags = "--max-time $server_response_maxtime ";
+ $flags .= "--output $verifyout ";
+ $flags .= "--verbose ";
+ $flags .= "--globoff ";
+ $flags .= "--insecure ";
+ $flags .= "--tlsauthtype SRP ";
+ $flags .= "--tlsuser jsmith ";
+ $flags .= "--tlspassword abc ";
+ if($proxy_address) {
+ $flags .= getexternalproxyflags();
+ }
+ $flags .= "\"https://$ip:$port/verifiedserver\"";
+
+ my $cmd = "$VCURL $flags 2>$verifylog";
+
+ # verify if our/any server is running on this port
+ logmsg "RUN: $cmd\n" if($verbose);
+ my $res = runclient($cmd);
+
+ $res >>= 8; # rotate the result
+ if($res & 128) {
+ logmsg "RUN: curl command died with a coredump\n";
+ return -1;
+ }
+
+ if($res && $verbose) {
+ logmsg "RUN: curl command returned $res\n";
+ if(open(my $file, "<", "$verifylog")) {
+ while(my $string = <$file>) {
+ logmsg "RUN: $string" if($string !~ /^([ \t]*)$/);
+ }
+ close($file);
+ }
+ }
+
+ my $data;
+ if(open(my $file, "<", "$verifyout")) {
+ while(my $string = <$file>) {
+ $data .= $string;
+ }
+ close($file);
+ }
+
+ my $pid = 0;
+ if($data && ($data =~ /(GNUTLS|GnuTLS)/) && ($pid = processexists($pidfile))) {
+ if($pid < 0) {
+ logmsg "RUN: $server server has died after starting up\n";
+ }
+ return $pid;
+ }
+ elsif($res == 6) {
+ # curl: (6) Couldn't resolve host '::1'
+ logmsg "RUN: failed to resolve host (https://$ip:$port/verifiedserver)\n";
+ return -1;
+ }
+ elsif($data || ($res && ($res != 7))) {
+ logmsg "RUN: Unknown server on our $server port: $port ($res)\n";
+ return -1;
+ }
+ return $pid;
+}
+
+#######################################################################
+# STUB for verifying socks
+#
+sub verifysocks {
+ my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
+ my $pidfile = server_pidfilename("$LOGDIR/$PIDDIR", $proto, $ipvnum,
+ $idnum);
+ my $pid = processexists($pidfile);
+ if($pid < 0) {
+ logmsg "RUN: SOCKS server has died after starting up\n";
+ }
+ return $pid;
+}
+
+#######################################################################
+# Verify that the server that runs on $ip, $port is our server. This also
+# implies that we can speak with it, as there might be occasions when the
+# server runs fine but we cannot talk to it ("Failed to connect to ::1: Can't
+# assign requested address")
+#
+sub verifysmb {
+ my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
+ my $server = servername_id($proto, $ipvnum, $idnum);
+ my $time=time();
+ my $extra="";
+
+ my $verifylog = "$LOGDIR/".
+ servername_canon($proto, $ipvnum, $idnum) .'_verify.log';
+ unlink($verifylog) if(-f $verifylog);
+
+ my $flags = "--max-time $server_response_maxtime ";
+ $flags .= "--silent ";
+ $flags .= "--verbose ";
+ $flags .= "--globoff ";
+ $flags .= "-u 'curltest:curltest' ";
+ $flags .= $extra;
+ $flags .= "\"$proto://$ip:$port/SERVER/verifiedserver\"";
+
+ my $cmd = "$VCURL $flags 2>$verifylog";
+
+ # check if this is our server running on this port:
+ logmsg "RUN: $cmd\n" if($verbose);
+ my @data = runclientoutput($cmd);
+
+ my $res = $? >> 8; # rotate the result
+ if($res & 128) {
+ logmsg "RUN: curl command died with a coredump\n";
+ return -1;
+ }
+
+ my $pid = 0;
+ foreach my $line (@data) {
+ if($line =~ /WE ROOLZ: (\d+)/) {
+ # this is our test server with a known pid!
+ $pid = 0+$1;
+ last;
+ }
+ }
+ if($pid <= 0 && @data && $data[0]) {
+ # this is not a known server
+ logmsg "RUN: Unknown server on our $server port: $port\n";
+ return 0;
+ }
+ # we can/should use the time it took to verify the server as a measure
+ # on how fast/slow this host is.
+ my $took = int(0.5+time()-$time);
+
+ if($verbose) {
+ logmsg "RUN: Verifying our test $server server took $took seconds\n";
+ }
+
+ return $pid;
+}
+
+#######################################################################
+# Verify that the server that runs on $ip, $port is our server. This also
+# implies that we can speak with it, as there might be occasions when the
+# server runs fine but we cannot talk to it ("Failed to connect to ::1: Can't
+# assign requested address")
+#
+sub verifytelnet {
+ my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
+ my $server = servername_id($proto, $ipvnum, $idnum);
+ my $time=time();
+ my $extra="";
+
+ my $verifylog = "$LOGDIR/".
+ servername_canon($proto, $ipvnum, $idnum) .'_verify.log';
+ unlink($verifylog) if(-f $verifylog);
+
+ my $flags = "--max-time $server_response_maxtime ";
+ $flags .= "--silent ";
+ $flags .= "--verbose ";
+ $flags .= "--globoff ";
+ $flags .= "--upload-file - ";
+ $flags .= $extra;
+ $flags .= "\"$proto://$ip:$port\"";
+
+ my $cmd = "echo 'verifiedserver' | $VCURL $flags 2>$verifylog";
+
+ # check if this is our server running on this port:
+ logmsg "RUN: $cmd\n" if($verbose);
+ my @data = runclientoutput($cmd);
+
+ my $res = $? >> 8; # rotate the result
+ if($res & 128) {
+ logmsg "RUN: curl command died with a coredump\n";
+ return -1;
+ }
+
+ my $pid = 0;
+ foreach my $line (@data) {
+ if($line =~ /WE ROOLZ: (\d+)/) {
+ # this is our test server with a known pid!
+ $pid = 0+$1;
+ last;
+ }
+ }
+ if($pid <= 0 && @data && $data[0]) {
+ # this is not a known server
+ logmsg "RUN: Unknown server on our $server port: $port\n";
+ return 0;
+ }
+ # we can/should use the time it took to verify the server as a measure
+ # on how fast/slow this host is.
+ my $took = int(0.5+time()-$time);
+
+ if($verbose) {
+ logmsg "RUN: Verifying our test $server server took $took seconds\n";
+ }
+
+ return $pid;
+}
+
+#######################################################################
+# Verify that the server that runs on $ip, $port is our server.
+# Retry over several seconds before giving up. The ssh server in
+# particular can take a long time to start if it needs to generate
+# keys on a slow or loaded host.
+#
+# Just for convenience, test harness uses 'https' and 'httptls' literals
+# as values for 'proto' variable in order to differentiate different
+# servers. 'https' literal is used for stunnel based https test servers,
+# and 'httptls' is used for non-stunnel https test servers.
+#
+
+my %protofunc = ('http' => \&verifyhttp,
+ 'https' => \&verifyhttp,
+ 'rtsp' => \&verifyrtsp,
+ 'ftp' => \&verifyftp,
+ 'pop3' => \&verifyftp,
+ 'imap' => \&verifyftp,
+ 'smtp' => \&verifyftp,
+ 'ftps' => \&verifyftp,
+ 'pop3s' => \&verifyftp,
+ 'imaps' => \&verifyftp,
+ 'smtps' => \&verifyftp,
+ 'tftp' => \&verifyftp,
+ 'ssh' => \&verifyssh,
+ 'socks' => \&verifysocks,
+ 'socks5unix' => \&verifysocks,
+ 'gopher' => \&verifyhttp,
+ 'httptls' => \&verifyhttptls,
+ 'dict' => \&verifyftp,
+ 'smb' => \&verifysmb,
+ 'telnet' => \&verifytelnet);
+
+sub verifyserver {
+ my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
+
+ my $count = 30; # try for this many seconds
+ my $pid;
+
+ while($count--) {
+ my $fun = $protofunc{$proto};
+
+ $pid = &$fun($proto, $ipvnum, $idnum, $ip, $port);
+
+ if($pid > 0) {
+ last;
+ }
+ elsif($pid < 0) {
+ # a real failure, stop trying and bail out
+ return 0;
+ }
+ sleep(1);
+ }
+ return $pid;
+}
+
+#######################################################################
+# Single shot server responsiveness test. This should only be used
+# to verify that a server present in %run hash is still functional
+#
+sub responsiveserver {
+ my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
+ my $prev_verbose = $verbose;
+
+ $verbose = 0;
+ my $fun = $protofunc{$proto};
+ my $pid = &$fun($proto, $ipvnum, $idnum, $ip, $port);
+ $verbose = $prev_verbose;
+
+ if($pid > 0) {
+ return 1; # responsive
+ }
+
+ my $srvrname = servername_str($proto, $ipvnum, $idnum);
+ logmsg " server precheck FAILED (unresponsive $srvrname server)\n";
+ return 0;
+}
+
+
+#######################################################################
+# start the http server
+#
+sub runhttpserver {
+ my ($proto, $verb, $alt, $port_or_path) = @_;
+ my $ip = $HOSTIP;
+ my $ipvnum = 4;
+ my $idnum = 1;
+ my $exe = "$perl $srcdir/http-server.pl";
+ my $verbose_flag = "--verbose ";
+ my $keepalive_secs = 30; # forwarded to sws, was 5 by default which
+ # led to pukes in CI jobs
+
+ if($alt eq "ipv6") {
+ # if IPv6, use a different setup
+ $ipvnum = 6;
+ $ip = $HOST6IP;
+ }
+ elsif($alt eq "proxy") {
+ # basically the same, but another ID
+ $idnum = 2;
+ }
+ elsif($alt eq "unix") {
+ # IP (protocol) is mutually exclusive with Unix sockets
+ $ipvnum = "unix";
+ }
+
+ my $server = servername_id($proto, $ipvnum, $idnum);
+
+ my $pidfile = $serverpidfile{$server};
+
+ # don't retry if the server doesn't work
+ if ($doesntrun{$pidfile}) {
+ return (2, 0, 0, 0);
+ }
+
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ stopserver($server, "$pid");
+ }
+ unlink($pidfile) if(-f $pidfile);
+
+ my $srvrname = servername_str($proto, $ipvnum, $idnum);
+ my $portfile = $serverportfile{$server};
+
+ my $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
+
+ my $flags = "";
+ $flags .= "--gopher " if($proto eq "gopher");
+ $flags .= "--connect $HOSTIP " if($alt eq "proxy");
+ $flags .= "--keepalive $keepalive_secs ";
+ $flags .= $verbose_flag if($debugprotocol);
+ $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
+ $flags .= "--logdir \"$LOGDIR\" ";
+ $flags .= "--portfile $portfile ";
+ $flags .= "--config $LOGDIR/$SERVERCMD ";
+ $flags .= "--id $idnum " if($idnum > 1);
+ if($ipvnum eq "unix") {
+ $flags .= "--unix-socket '$port_or_path' ";
+ } else {
+ $flags .= "--ipv$ipvnum --port 0 ";
+ }
+ $flags .= "--srcdir \"$srcdir\"";
+
+ my $cmd = "$exe $flags";
+ my ($httppid, $pid2) = startnew($cmd, $pidfile, 15, 0);
+
+ if($httppid <= 0 || !pidexists($httppid)) {
+ # it is NOT alive
+ logmsg "RUN: failed to start the $srvrname server\n";
+ stopserver($server, "$pid2");
+ $doesntrun{$pidfile} = 1;
+ return (1, 0, 0, 0);
+ }
+
+ # where is it?
+ my $port = 0;
+ if(!$port_or_path) {
+ $port = $port_or_path = pidfromfile($portfile);
+ }
+
+ # Server is up. Verify that we can speak to it.
+ my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port_or_path);
+ if(!$pid3) {
+ logmsg "RUN: $srvrname server failed verification\n";
+ # failed to talk to it properly. Kill the server and return failure
+ stopserver($server, "$httppid $pid2");
+ $doesntrun{$pidfile} = 1;
+ return (1, 0, 0, 0);
+ }
+ $pid2 = $pid3;
+
+ if($verb) {
+ logmsg "RUN: $srvrname server is on PID $httppid port $port_or_path\n";
+ }
+
+ return (0, $httppid, $pid2, $port);
+}
+
+
+#######################################################################
+# start the http2 server
+#
+sub runhttp2server {
+ my ($verb) = @_;
+ my $proto="http/2";
+ my $ipvnum = 4;
+ my $idnum = 0;
+ my $exe = "$perl $srcdir/http2-server.pl";
+ my $verbose_flag = "--verbose ";
+
+ my $server = servername_id($proto, $ipvnum, $idnum);
+
+ my $pidfile = $serverpidfile{$server};
+
+ # don't retry if the server doesn't work
+ if ($doesntrun{$pidfile}) {
+ return (2, 0, 0, 0, 0);
+ }
+
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ stopserver($server, "$pid");
+ }
+ unlink($pidfile) if(-f $pidfile);
+
+ my $srvrname = servername_str($proto, $ipvnum, $idnum);
+ my $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
+
+ my $flags = "";
+ $flags .= "--nghttpx \"$ENV{'NGHTTPX'}\" ";
+ $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
+ $flags .= "--logdir \"$LOGDIR\" ";
+ $flags .= "--connect $HOSTIP:" . protoport("http") . " ";
+ $flags .= $verbose_flag if($debugprotocol);
+
+ my $port = getfreeport($ipvnum);
+ my $port2 = getfreeport($ipvnum);
+ my $aflags = "--port $port --port2 $port2 $flags";
+ my $cmd = "$exe $aflags";
+ my ($http2pid, $pid2) = startnew($cmd, $pidfile, 15, 0);
+
+ if($http2pid <= 0 || !pidexists($http2pid)) {
+ # it is NOT alive
+ stopserver($server, "$pid2");
+ $doesntrun{$pidfile} = 1;
+ $http2pid = $pid2 = 0;
+ logmsg "RUN: failed to start the $srvrname server\n";
+ return (3, 0, 0, 0, 0);
+ }
+ $doesntrun{$pidfile} = 0;
+
+ if($verb) {
+ logmsg "RUN: $srvrname server PID $http2pid ".
+ "http-port $port https-port $port2 ".
+ "backend $HOSTIP:" . protoport("http") . "\n";
+ }
+
+ return (0+!$http2pid, $http2pid, $pid2, $port, $port2);
+}
+
+#######################################################################
+# start the http3 server
+#
+sub runhttp3server {
+ my ($verb, $cert) = @_;
+ my $proto="http/3";
+ my $ipvnum = 4;
+ my $idnum = 0;
+ my $exe = "$perl $srcdir/http3-server.pl";
+ my $verbose_flag = "--verbose ";
+
+ my $server = servername_id($proto, $ipvnum, $idnum);
+
+ my $pidfile = $serverpidfile{$server};
+
+ # don't retry if the server doesn't work
+ if ($doesntrun{$pidfile}) {
+ return (2, 0, 0, 0);
+ }
+
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ stopserver($server, "$pid");
+ }
+ unlink($pidfile) if(-f $pidfile);
+
+ my $srvrname = servername_str($proto, $ipvnum, $idnum);
+ my $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
+
+ my $flags = "";
+ $flags .= "--nghttpx \"$ENV{'NGHTTPX'}\" ";
+ $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
+ $flags .= "--logdir \"$LOGDIR\" ";
+ $flags .= "--connect $HOSTIP:" . protoport("http") . " ";
+ $flags .= "--cert \"$cert\" " if($cert);
+ $flags .= $verbose_flag if($debugprotocol);
+
+ my $port = getfreeport($ipvnum);
+ my $aflags = "--port $port $flags";
+ my $cmd = "$exe $aflags";
+ my ($http3pid, $pid3) = startnew($cmd, $pidfile, 15, 0);
+
+ if($http3pid <= 0 || !pidexists($http3pid)) {
+ # it is NOT alive
+ stopserver($server, "$pid3");
+ $doesntrun{$pidfile} = 1;
+ $http3pid = $pid3 = 0;
+ logmsg "RUN: failed to start the $srvrname server\n";
+ return (3, 0, 0, 0);
+ }
+ $doesntrun{$pidfile} = 0;
+
+ if($verb) {
+ logmsg "RUN: $srvrname server PID $http3pid port $port\n";
+ }
+
+ return (0+!$http3pid, $http3pid, $pid3, $port);
+}
+
+#######################################################################
+# start the https stunnel based server
+#
+sub runhttpsserver {
+ my ($verb, $proto, $proxy, $certfile) = @_;
+ my $ip = $HOSTIP;
+ my $ipvnum = 4;
+ my $idnum = 1;
+
+ if($proxy eq "proxy") {
+ # the https-proxy runs as https2
+ $idnum = 2;
+ }
+
+ if(!$stunnel) {
+ return (4, 0, 0, 0);
+ }
+
+ my $server = servername_id($proto, $ipvnum, $idnum);
+
+ my $pidfile = $serverpidfile{$server};
+
+ # don't retry if the server doesn't work
+ if ($doesntrun{$pidfile}) {
+ return (2, 0, 0, 0);
+ }
+
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ stopserver($server, "$pid");
+ }
+ unlink($pidfile) if(-f $pidfile);
+
+ my $srvrname = servername_str($proto, $ipvnum, $idnum);
+ $certfile = 'stunnel.pem' unless($certfile);
+ my $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
+
+ my $flags = "";
+ $flags .= "--verbose " if($debugprotocol);
+ $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
+ $flags .= "--logdir \"$LOGDIR\" ";
+ $flags .= "--id $idnum " if($idnum > 1);
+ $flags .= "--ipv$ipvnum --proto $proto ";
+ $flags .= "--certfile \"$certfile\" " if($certfile ne 'stunnel.pem');
+ $flags .= "--stunnel \"$stunnel\" --srcdir \"$srcdir\" ";
+ if($proto eq "gophers") {
+ $flags .= "--connect " . protoport("gopher");
+ }
+ elsif(!$proxy) {
+ $flags .= "--connect " . protoport("http");
+ }
+ else {
+ # for HTTPS-proxy we connect to the HTTP proxy
+ $flags .= "--connect " . protoport("httpproxy");
+ }
+
+ my $port = getfreeport($ipvnum);
+ my $options = "$flags --accept $port";
+ my $cmd = "$perl $srcdir/secureserver.pl $options";
+ my ($httpspid, $pid2) = startnew($cmd, $pidfile, 15, 0);
+
+ if($httpspid <= 0 || !pidexists($httpspid)) {
+ # it is NOT alive
+ # don't call stopserver since that will also kill the dependent
+ # server that has already been started properly
+ $doesntrun{$pidfile} = 1;
+ $httpspid = $pid2 = 0;
+ logmsg "RUN: failed to start the $srvrname server\n";
+ return (3, 0, 0, 0);
+ }
+
+ $doesntrun{$pidfile} = 0;
+ # we have a server!
+ if($verb) {
+ logmsg "RUN: $srvrname server is PID $httpspid port $port\n";
+ }
+
+ $runcert{$server} = $certfile;
+
+ return (0+!$httpspid, $httpspid, $pid2, $port);
+}
+
+#######################################################################
+# start the non-stunnel HTTP TLS extensions capable server
+#
+sub runhttptlsserver {
+ my ($verb, $ipv6) = @_;
+ my $proto = "httptls";
+ my $ip = ($ipv6 && ($ipv6 =~ /6$/)) ? "$HOST6IP" : "$HOSTIP";
+ my $ipvnum = ($ipv6 && ($ipv6 =~ /6$/)) ? 6 : 4;
+ my $idnum = 1;
+
+ if(!$httptlssrv) {
+ return (4, 0, 0);
+ }
+
+ my $server = servername_id($proto, $ipvnum, $idnum);
+
+ my $pidfile = $serverpidfile{$server};
+
+ # don't retry if the server doesn't work
+ if ($doesntrun{$pidfile}) {
+ return (2, 0, 0, 0);
+ }
+
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ stopserver($server, "$pid");
+ }
+ unlink($pidfile) if(-f $pidfile);
+
+ my $srvrname = servername_str($proto, $ipvnum, $idnum);
+ my $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
+
+ my $flags = "";
+ $flags .= "--http ";
+ $flags .= "--debug 1 " if($debugprotocol);
+ $flags .= "--priority NORMAL:+SRP ";
+ $flags .= "--srppasswd $srcdir/certs/srp-verifier-db ";
+ $flags .= "--srppasswdconf $srcdir/certs/srp-verifier-conf";
+
+ my $port = getfreeport($ipvnum);
+ my $allflags = "--port $port $flags";
+ my $cmd = "$httptlssrv $allflags > $logfile 2>&1";
+ my ($httptlspid, $pid2) = startnew($cmd, $pidfile, 10, 1);
+
+ if($httptlspid <= 0 || !pidexists($httptlspid)) {
+ # it is NOT alive
+ stopserver($server, "$pid2");
+ $doesntrun{$pidfile} = 1;
+ $httptlspid = $pid2 = 0;
+ logmsg "RUN: failed to start the $srvrname server\n";
+ return (3, 0, 0, 0);
+ }
+ $doesntrun{$pidfile} = 0;
+
+ if($verb) {
+ logmsg "RUN: $srvrname server PID $httptlspid port $port\n";
+ }
+ return (0+!$httptlspid, $httptlspid, $pid2, $port);
+}
+
+#######################################################################
+# start the pingpong server (FTP, POP3, IMAP, SMTP)
+#
+sub runpingpongserver {
+ my ($proto, $id, $verb, $ipv6) = @_;
+
+ # Check the requested server
+ if($proto !~ /^(?:ftp|imap|pop3|smtp)$/) {
+ logmsg "Unsupported protocol $proto!!\n";
+ return (4, 0, 0);
+ }
+
+ my $ip = ($ipv6 && ($ipv6 =~ /6$/)) ? "$HOST6IP" : "$HOSTIP";
+ my $ipvnum = ($ipv6 && ($ipv6 =~ /6$/)) ? 6 : 4;
+ my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
+
+ my $server = servername_id($proto, $ipvnum, $idnum);
+
+ my $pidfile = $serverpidfile{$server};
+ my $portfile = $serverportfile{$server};
+
+ # don't retry if the server doesn't work
+ if ($doesntrun{$pidfile}) {
+ return (2, 0, 0);
+ }
+
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ stopserver($server, "$pid");
+ }
+ unlink($pidfile) if(-f $pidfile);
+
+ my $srvrname = servername_str($proto, $ipvnum, $idnum);
+ my $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
+
+ my $flags = "";
+ $flags .= "--verbose " if($debugprotocol);
+ $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
+ $flags .= "--logdir \"$LOGDIR\" ";
+ $flags .= "--portfile \"$portfile\" ";
+ $flags .= "--srcdir \"$srcdir\" --proto $proto ";
+ $flags .= "--id $idnum " if($idnum > 1);
+ $flags .= "--ipv$ipvnum --port 0 --addr \"$ip\"";
+
+ my $cmd = "$perl $srcdir/ftpserver.pl $flags";
+ my ($ftppid, $pid2) = startnew($cmd, $pidfile, 15, 0);
+
+ if($ftppid <= 0 || !pidexists($ftppid)) {
+ # it is NOT alive
+ logmsg "RUN: failed to start the $srvrname server\n";
+ stopserver($server, "$pid2");
+ $doesntrun{$pidfile} = 1;
+ return (1, 0, 0);
+ }
+
+ # where is it?
+ my $port = pidfromfile($portfile);
+
+ logmsg "PINGPONG runs on port $port ($portfile)\n" if($verb);
+
+ # Server is up. Verify that we can speak to it.
+ my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port);
+ if(!$pid3) {
+ logmsg "RUN: $srvrname server failed verification\n";
+ # failed to talk to it properly. Kill the server and return failure
+ stopserver($server, "$ftppid $pid2");
+ $doesntrun{$pidfile} = 1;
+ return (1, 0, 0);
+ }
+ $pid2 = $pid3;
+
+ logmsg "RUN: $srvrname server is PID $ftppid port $port\n" if($verb);
+
+ # Assign the correct port variable!
+ $PORT{$proto . ($ipvnum == 6? '6': '')} = $port;
+
+ return (0, $pid2, $ftppid);
+}
+
+#######################################################################
+# start the ftps/imaps/pop3s/smtps server (or rather, tunnel)
+#
+sub runsecureserver {
+ my ($verb, $ipv6, $certfile, $proto, $clearport) = @_;
+ my $ip = ($ipv6 && ($ipv6 =~ /6$/)) ? "$HOST6IP" : "$HOSTIP";
+ my $ipvnum = ($ipv6 && ($ipv6 =~ /6$/)) ? 6 : 4;
+ my $idnum = 1;
+
+ if(!$stunnel) {
+ return (4, 0, 0, 0);
+ }
+
+ my $server = servername_id($proto, $ipvnum, $idnum);
+
+ my $pidfile = $serverpidfile{$server};
+
+ # don't retry if the server doesn't work
+ if ($doesntrun{$pidfile}) {
+ return (2, 0, 0, 0);
+ }
+
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ stopserver($server, "$pid");
+ }
+ unlink($pidfile) if(-f $pidfile);
+
+ my $srvrname = servername_str($proto, $ipvnum, $idnum);
+ $certfile = 'stunnel.pem' unless($certfile);
+ my $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
+
+ my $flags = "";
+ $flags .= "--verbose " if($debugprotocol);
+ $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
+ $flags .= "--logdir \"$LOGDIR\" ";
+ $flags .= "--id $idnum " if($idnum > 1);
+ $flags .= "--ipv$ipvnum --proto $proto ";
+ $flags .= "--certfile \"$certfile\" " if($certfile ne 'stunnel.pem');
+ $flags .= "--stunnel \"$stunnel\" --srcdir \"$srcdir\" ";
+ $flags .= "--connect $clearport";
+
+ my $port = getfreeport($ipvnum);
+ my $options = "$flags --accept $port";
+
+ my $cmd = "$perl $srcdir/secureserver.pl $options";
+ my ($protospid, $pid2) = startnew($cmd, $pidfile, 15, 0);
+
+ if($protospid <= 0 || !pidexists($protospid)) {
+ # it is NOT alive
+ # don't call stopserver since that will also kill the dependent
+ # server that has already been started properly
+ $doesntrun{$pidfile} = 1;
+ $protospid = $pid2 = 0;
+ logmsg "RUN: failed to start the $srvrname server\n";
+ return (3, 0, 0, 0);
+ }
+
+ $doesntrun{$pidfile} = 0;
+ $runcert{$server} = $certfile;
+
+ if($verb) {
+ logmsg "RUN: $srvrname server is PID $protospid port $port\n";
+ }
+
+ return (0+!$protospid, $protospid, $pid2, $port);
+}
+
+#######################################################################
+# start the tftp server
+#
+sub runtftpserver {
+ my ($id, $verb, $ipv6) = @_;
+ my $ip = $HOSTIP;
+ my $proto = 'tftp';
+ my $ipvnum = 4;
+ my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
+
+ if($ipv6) {
+ # if IPv6, use a different setup
+ $ipvnum = 6;
+ $ip = $HOST6IP;
+ }
+
+ my $server = servername_id($proto, $ipvnum, $idnum);
+
+ my $pidfile = $serverpidfile{$server};
+
+ # don't retry if the server doesn't work
+ if ($doesntrun{$pidfile}) {
+ return (2, 0, 0, 0);
+ }
+
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ stopserver($server, "$pid");
+ }
+ unlink($pidfile) if(-f $pidfile);
+
+ my $srvrname = servername_str($proto, $ipvnum, $idnum);
+ my $portfile = $serverportfile{$server};
+ my $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
+
+ my $flags = "";
+ $flags .= "--verbose " if($debugprotocol);
+ $flags .= "--pidfile \"$pidfile\" ";
+ $flags .= "--portfile \"$portfile\" ";
+ $flags .= "--logfile \"$logfile\" ";
+ $flags .= "--logdir \"$LOGDIR\" ";
+ $flags .= "--id $idnum " if($idnum > 1);
+ $flags .= "--ipv$ipvnum --port 0 --srcdir \"$srcdir\"";
+
+ my $cmd = "$perl $srcdir/tftpserver.pl $flags";
+ my ($tftppid, $pid2) = startnew($cmd, $pidfile, 15, 0);
+
+ if($tftppid <= 0 || !pidexists($tftppid)) {
+ # it is NOT alive
+ logmsg "RUN: failed to start the $srvrname server\n";
+ stopserver($server, "$pid2");
+ $doesntrun{$pidfile} = 1;
+ return (1, 0, 0, 0);
+ }
+
+ my $port = pidfromfile($portfile);
+
+ # Server is up. Verify that we can speak to it.
+ my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port);
+ if(!$pid3) {
+ logmsg "RUN: $srvrname server failed verification\n";
+ # failed to talk to it properly. Kill the server and return failure
+ stopserver($server, "$tftppid $pid2");
+ $doesntrun{$pidfile} = 1;
+ return (1, 0, 0, 0);
+ }
+ $pid2 = $pid3;
+
+ if($verb) {
+ logmsg "RUN: $srvrname server on PID $tftppid port $port\n";
+ }
+
+ return (0, $pid2, $tftppid, $port);
+}
+
+
+#######################################################################
+# start the rtsp server
+#
+sub runrtspserver {
+ my ($verb, $ipv6) = @_;
+ my $ip = $HOSTIP;
+ my $proto = 'rtsp';
+ my $ipvnum = 4;
+ my $idnum = 1;
+
+ if($ipv6) {
+ # if IPv6, use a different setup
+ $ipvnum = 6;
+ $ip = $HOST6IP;
+ }
+
+ my $server = servername_id($proto, $ipvnum, $idnum);
+
+ my $pidfile = $serverpidfile{$server};
+ my $portfile = $serverportfile{$server};
+
+ # don't retry if the server doesn't work
+ if ($doesntrun{$pidfile}) {
+ return (2, 0, 0, 0);
+ }
+
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ stopserver($server, "$pid");
+ }
+ unlink($pidfile) if(-f $pidfile);
+
+ my $srvrname = servername_str($proto, $ipvnum, $idnum);
+ my $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
+
+ my $flags = "";
+ $flags .= "--verbose " if($debugprotocol);
+ $flags .= "--pidfile \"$pidfile\" ";
+ $flags .= "--portfile \"$portfile\" ";
+ $flags .= "--logfile \"$logfile\" ";
+ $flags .= "--logdir \"$LOGDIR\" ";
+ $flags .= "--id $idnum " if($idnum > 1);
+ $flags .= "--ipv$ipvnum --port 0 --srcdir \"$srcdir\"";
+
+ my $cmd = "$perl $srcdir/rtspserver.pl $flags";
+ my ($rtsppid, $pid2) = startnew($cmd, $pidfile, 15, 0);
+
+ if($rtsppid <= 0 || !pidexists($rtsppid)) {
+ # it is NOT alive
+ logmsg "RUN: failed to start the $srvrname server\n";
+ stopserver($server, "$pid2");
+ $doesntrun{$pidfile} = 1;
+ return (1, 0, 0, 0);
+ }
+
+ my $port = pidfromfile($portfile);
+
+ # Server is up. Verify that we can speak to it.
+ my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port);
+ if(!$pid3) {
+ logmsg "RUN: $srvrname server failed verification\n";
+ # failed to talk to it properly. Kill the server and return failure
+ stopserver($server, "$rtsppid $pid2");
+ $doesntrun{$pidfile} = 1;
+ return (1, 0, 0, 0);
+ }
+ $pid2 = $pid3;
+
+ if($verb) {
+ logmsg "RUN: $srvrname server PID $rtsppid port $port\n";
+ }
+
+ return (0, $rtsppid, $pid2, $port);
+}
+
+
+#######################################################################
+# Start the ssh (scp/sftp) server
+#
+sub runsshserver {
+ my ($id, $verb, $ipv6) = @_;
+ my $ip=$HOSTIP;
+ my $proto = 'ssh';
+ my $ipvnum = 4;
+ my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
+
+ if(!$USER) {
+ logmsg "Can't start ssh server due to lack of USER name\n";
+ return (4, 0, 0, 0);
+ }
+
+ my $server = servername_id($proto, $ipvnum, $idnum);
+
+ my $pidfile = $serverpidfile{$server};
+
+ # don't retry if the server doesn't work
+ if ($doesntrun{$pidfile}) {
+ return (2, 0, 0, 0);
+ }
+
+ my $sshd = find_sshd();
+ if($sshd) {
+ ($sshdid,$sshdvernum,$sshdverstr,$sshderror) = sshversioninfo($sshd);
+ logmsg $sshderror if($sshderror);
+ }
+
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ stopserver($server, "$pid");
+ }
+ unlink($pidfile) if(-f $pidfile);
+
+ my $srvrname = servername_str($proto, $ipvnum, $idnum);
+ my $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
+
+ my $flags = "";
+ $flags .= "--verbose " if($verb);
+ $flags .= "--debugprotocol " if($debugprotocol);
+ $flags .= "--pidfile \"$pidfile\" ";
+ $flags .= "--logdir \"$LOGDIR\" ";
+ $flags .= "--id $idnum " if($idnum > 1);
+ $flags .= "--ipv$ipvnum --addr \"$ip\" ";
+ $flags .= "--user \"$USER\"";
+
+ my @tports;
+ my $port = getfreeport($ipvnum);
+
+ push @tports, $port;
+
+ my $options = "$flags --sshport $port";
+
+ my $cmd = "$perl $srcdir/sshserver.pl $options";
+ my ($sshpid, $pid2) = startnew($cmd, $pidfile, 60, 0);
+
+ # on loaded systems sshserver start up can take longer than the
+ # timeout passed to startnew, when this happens startnew completes
+ # without being able to read the pidfile and consequently returns a
+ # zero pid2 above.
+ if($sshpid <= 0 || !pidexists($sshpid)) {
+ # it is NOT alive
+ stopserver($server, "$pid2");
+ $doesntrun{$pidfile} = 1;
+ $sshpid = $pid2 = 0;
+ logmsg "RUN: failed to start the $srvrname server on $port\n";
+ return (3, 0, 0, 0);
+ }
+
+ # once it is known that the ssh server is alive, sftp server
+ # verification is performed actually connecting to it, authenticating
+ # and performing a very simple remote command. This verification is
+ # tried only one time.
+
+ $sshdlog = server_logfilename($LOGDIR, 'ssh', $ipvnum, $idnum);
+ $sftplog = server_logfilename($LOGDIR, 'sftp', $ipvnum, $idnum);
+
+ if(verifysftp('sftp', $ipvnum, $idnum, $ip, $port) < 1) {
+ logmsg "RUN: SFTP server failed verification\n";
+ # failed to talk to it properly. Kill the server and return failure
+ display_sftplog();
+ display_sftpconfig();
+ display_sshdlog();
+ display_sshdconfig();
+ stopserver($server, "$sshpid $pid2");
+ $doesntrun{$pidfile} = 1;
+ $sshpid = $pid2 = 0;
+ logmsg "RUN: failed to verify the $srvrname server on $port\n";
+ return (5, 0, 0, 0);
+ }
+ # we're happy, no need to loop anymore!
+ $doesntrun{$pidfile} = 0;
+
+ my $hostfile;
+ if(!open($hostfile, "<", "$LOGDIR/$PIDDIR/$hstpubmd5f") ||
+ (read($hostfile, $SSHSRVMD5, 32) != 32) ||
+ !close($hostfile) ||
+ ($SSHSRVMD5 !~ /^[a-f0-9]{32}$/i))
+ {
+ my $msg = "Fatal: $srvrname pubkey md5 missing : \"$hstpubmd5f\" : $!";
+ logmsg "$msg\n";
+ stopservers($verb);
+ die $msg;
+ }
+
+ if(!open($hostfile, "<", "$LOGDIR/$PIDDIR/$hstpubsha256f") ||
+ (read($hostfile, $SSHSRVSHA256, 48) == 0) ||
+ !close($hostfile))
+ {
+ my $msg = "Fatal: $srvrname pubkey sha256 missing : \"$hstpubsha256f\" : $!";
+ logmsg "$msg\n";
+ stopservers($verb);
+ die $msg;
+ }
+
+ logmsg "RUN: $srvrname on PID $pid2 port $port\n" if($verb);
+
+ return (0, $pid2, $sshpid, $port);
+}
+
+#######################################################################
+# Start the MQTT server
+#
+sub runmqttserver {
+ my ($id, $verb, $ipv6) = @_;
+ my $ip=$HOSTIP;
+ my $proto = 'mqtt';
+ my $port = protoport($proto);
+ my $ipvnum = 4;
+ my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
+
+ my $server = servername_id($proto, $ipvnum, $idnum);
+ my $pidfile = $serverpidfile{$server};
+ my $portfile = $serverportfile{$server};
+
+ # don't retry if the server doesn't work
+ if ($doesntrun{$pidfile}) {
+ return (2, 0, 0);
+ }
+
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ stopserver($server, "$pid");
+ }
+ unlink($pidfile) if(-f $pidfile);
+
+ my $srvrname = servername_str($proto, $ipvnum, $idnum);
+ my $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
+
+ # start our MQTT server - on a random port!
+ my $cmd="server/mqttd".exe_ext('SRV').
+ " --port 0 ".
+ " --pidfile $pidfile".
+ " --portfile $portfile".
+ " --config $LOGDIR/$SERVERCMD".
+ " --logfile $logfile".
+ " --logdir $LOGDIR";
+ my ($sockspid, $pid2) = startnew($cmd, $pidfile, 30, 0);
+
+ if($sockspid <= 0 || !pidexists($sockspid)) {
+ # it is NOT alive
+ logmsg "RUN: failed to start the $srvrname server\n";
+ stopserver($server, "$pid2");
+ $doesntrun{$pidfile} = 1;
+ return (1, 0, 0);
+ }
+
+ my $mqttport = pidfromfile($portfile);
+ $PORT{"mqtt"} = $mqttport;
+
+ if($verb) {
+ logmsg "RUN: $srvrname server is now running PID $pid2 on PORT $mqttport\n";
+ }
+
+ return (0, $pid2, $sockspid);
+}
+
+#######################################################################
+# Start the socks server
+#
+sub runsocksserver {
+ my ($id, $verb, $ipv6, $is_unix) = @_;
+ my $ip=$HOSTIP;
+ my $proto = 'socks';
+ my $ipvnum = 4;
+ my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
+
+ my $server = servername_id($proto, $ipvnum, $idnum);
+
+ my $pidfile = $serverpidfile{$server};
+
+ # don't retry if the server doesn't work
+ if ($doesntrun{$pidfile}) {
+ return (2, 0, 0, 0);
+ }
+
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ stopserver($server, "$pid");
+ }
+ unlink($pidfile) if(-f $pidfile);
+
+ my $srvrname = servername_str($proto, $ipvnum, $idnum);
+ my $portfile = $serverportfile{$server};
+ my $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
+
+ # start our socks server, get commands from the FTP cmd file
+ my $cmd="";
+ if($is_unix) {
+ $cmd="server/socksd".exe_ext('SRV').
+ " --pidfile $pidfile".
+ " --reqfile $LOGDIR/$SOCKSIN".
+ " --logfile $logfile".
+ " --unix-socket $SOCKSUNIXPATH".
+ " --backend $HOSTIP".
+ " --config $LOGDIR/$SERVERCMD";
+ } else {
+ $cmd="server/socksd".exe_ext('SRV').
+ " --port 0 ".
+ " --pidfile $pidfile".
+ " --portfile $portfile".
+ " --reqfile $LOGDIR/$SOCKSIN".
+ " --logfile $logfile".
+ " --backend $HOSTIP".
+ " --config $LOGDIR/$SERVERCMD";
+ }
+ my ($sockspid, $pid2) = startnew($cmd, $pidfile, 30, 0);
+
+ if($sockspid <= 0 || !pidexists($sockspid)) {
+ # it is NOT alive
+ logmsg "RUN: failed to start the $srvrname server\n";
+ stopserver($server, "$pid2");
+ $doesntrun{$pidfile} = 1;
+ return (1, 0, 0, 0);
+ }
+
+ my $port = pidfromfile($portfile);
+
+ if($verb) {
+ logmsg "RUN: $srvrname server is now running PID $pid2\n";
+ }
+
+ return (0, $pid2, $sockspid, $port);
+}
+
+#######################################################################
+# start the dict server
+#
+sub rundictserver {
+ my ($verb, $alt) = @_;
+ my $proto = "dict";
+ my $ip = $HOSTIP;
+ my $ipvnum = 4;
+ my $idnum = 1;
+
+ if($alt eq "ipv6") {
+ # No IPv6
+ }
+
+ my $server = servername_id($proto, $ipvnum, $idnum);
+
+ my $pidfile = $serverpidfile{$server};
+
+ # don't retry if the server doesn't work
+ if ($doesntrun{$pidfile}) {
+ return (2, 0, 0, 0);
+ }
+
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ stopserver($server, "$pid");
+ }
+ unlink($pidfile) if(-f $pidfile);
+
+ my $srvrname = servername_str($proto, $ipvnum, $idnum);
+ my $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
+
+ my $flags = "";
+ $flags .= "--verbose 1 " if($debugprotocol);
+ $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
+ $flags .= "--id $idnum " if($idnum > 1);
+ $flags .= "--srcdir \"$srcdir\" ";
+ $flags .= "--host $HOSTIP";
+
+ my $port = getfreeport($ipvnum);
+ my $aflags = "--port $port $flags";
+ my $cmd = "$srcdir/dictserver.py $aflags";
+ my ($dictpid, $pid2) = startnew($cmd, $pidfile, 15, 0);
+
+ if($dictpid <= 0 || !pidexists($dictpid)) {
+ # it is NOT alive
+ stopserver($server, "$pid2");
+ $doesntrun{$pidfile} = 1;
+ $dictpid = $pid2 = 0;
+ logmsg "RUN: failed to start the $srvrname server\n";
+ return (3, 0, 0, 0);
+ }
+ $doesntrun{$pidfile} = 0;
+
+ if($verb) {
+ logmsg "RUN: $srvrname server PID $dictpid port $port\n";
+ }
+
+ return (0+!$dictpid, $dictpid, $pid2, $port);
+}
+
+#######################################################################
+# start the SMB server
+#
+sub runsmbserver {
+ my ($verb, $alt) = @_;
+ my $proto = "smb";
+ my $ip = $HOSTIP;
+ my $ipvnum = 4;
+ my $idnum = 1;
+
+ if($alt eq "ipv6") {
+ # No IPv6
+ }
+
+ my $server = servername_id($proto, $ipvnum, $idnum);
+
+ my $pidfile = $serverpidfile{$server};
+
+ # don't retry if the server doesn't work
+ if ($doesntrun{$pidfile}) {
+ return (2, 0, 0, 0);
+ }
+
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ stopserver($server, "$pid");
+ }
+ unlink($pidfile) if(-f $pidfile);
+
+ my $srvrname = servername_str($proto, $ipvnum, $idnum);
+ my $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
+
+ my $flags = "";
+ $flags .= "--verbose 1 " if($debugprotocol);
+ $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
+ $flags .= "--id $idnum " if($idnum > 1);
+ $flags .= "--srcdir \"$srcdir\" ";
+ $flags .= "--host $HOSTIP";
+
+ my $port = getfreeport($ipvnum);
+ my $aflags = "--port $port $flags";
+ my $cmd = "$srcdir/smbserver.py $aflags";
+ my ($smbpid, $pid2) = startnew($cmd, $pidfile, 15, 0);
+
+ if($smbpid <= 0 || !pidexists($smbpid)) {
+ # it is NOT alive
+ stopserver($server, "$pid2");
+ $doesntrun{$pidfile} = 1;
+ $smbpid = $pid2 = 0;
+ logmsg "RUN: failed to start the $srvrname server\n";
+ return (3, 0, 0, 0);
+ }
+ $doesntrun{$pidfile} = 0;
+
+ if($verb) {
+ logmsg "RUN: $srvrname server PID $smbpid port $port\n";
+ }
+
+ return (0+!$smbpid, $smbpid, $pid2, $port);
+}
+
+#######################################################################
+# start the telnet server
+#
+sub runnegtelnetserver {
+ my ($verb, $alt) = @_;
+ my $proto = "telnet";
+ my $ip = $HOSTIP;
+ my $ipvnum = 4;
+ my $idnum = 1;
+
+ if($alt eq "ipv6") {
+ # No IPv6
+ }
+
+ my $server = servername_id($proto, $ipvnum, $idnum);
+
+ my $pidfile = $serverpidfile{$server};
+
+ # don't retry if the server doesn't work
+ if ($doesntrun{$pidfile}) {
+ return (2, 0, 0, 0);
+ }
+
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ stopserver($server, "$pid");
+ }
+ unlink($pidfile) if(-f $pidfile);
+
+ my $srvrname = servername_str($proto, $ipvnum, $idnum);
+ my $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
+
+ my $flags = "";
+ $flags .= "--verbose 1 " if($debugprotocol);
+ $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
+ $flags .= "--id $idnum " if($idnum > 1);
+ $flags .= "--srcdir \"$srcdir\"";
+
+ my $port = getfreeport($ipvnum);
+ my $aflags = "--port $port $flags";
+ my $cmd = "$srcdir/negtelnetserver.py $aflags";
+ my ($ntelpid, $pid2) = startnew($cmd, $pidfile, 15, 0);
+
+ if($ntelpid <= 0 || !pidexists($ntelpid)) {
+ # it is NOT alive
+ stopserver($server, "$pid2");
+ $doesntrun{$pidfile} = 1;
+ $ntelpid = $pid2 = 0;
+ logmsg "RUN: failed to start the $srvrname server\n";
+ return (3, 0, 0, 0);
+ }
+ $doesntrun{$pidfile} = 0;
+
+ if($verb) {
+ logmsg "RUN: $srvrname server PID $ntelpid port $port\n";
+ }
+
+ return (0+!$ntelpid, $ntelpid, $pid2, $port);
+}
+
+
+
+
+#######################################################################
+# Single shot http and gopher server responsiveness test. This should only
+# be used to verify that a server present in %run hash is still functional
+#
+sub responsive_http_server {
+ my ($proto, $verb, $alt, $port_or_path) = @_;
+ my $ip = $HOSTIP;
+ my $ipvnum = 4;
+ my $idnum = 1;
+
+ if($alt eq "ipv6") {
+ # if IPv6, use a different setup
+ $ipvnum = 6;
+ $ip = $HOST6IP;
+ }
+ elsif($alt eq "proxy") {
+ $idnum = 2;
+ }
+ elsif($alt eq "unix") {
+ # IP (protocol) is mutually exclusive with Unix sockets
+ $ipvnum = "unix";
+ }
+
+ return &responsiveserver($proto, $ipvnum, $idnum, $ip, $port_or_path);
+}
+
+#######################################################################
+# Single shot pingpong server responsiveness test. This should only be
+# used to verify that a server present in %run hash is still functional
+#
+sub responsive_pingpong_server {
+ my ($proto, $id, $verb, $ipv6) = @_;
+ my $port;
+ my $ip = ($ipv6 && ($ipv6 =~ /6$/)) ? "$HOST6IP" : "$HOSTIP";
+ my $ipvnum = ($ipv6 && ($ipv6 =~ /6$/)) ? 6 : 4;
+ my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
+ my $protoip = $proto . ($ipvnum == 6? '6': '');
+
+ if($proto =~ /^(?:ftp|imap|pop3|smtp)$/) {
+ $port = protoport($protoip);
+ }
+ else {
+ logmsg "Unsupported protocol $proto!!\n";
+ return 0;
+ }
+
+ return &responsiveserver($proto, $ipvnum, $idnum, $ip, $port);
+}
+
+#######################################################################
+# Single shot rtsp server responsiveness test. This should only be
+# used to verify that a server present in %run hash is still functional
+#
+sub responsive_rtsp_server {
+ my ($verb, $ipv6) = @_;
+ my $proto = 'rtsp';
+ my $port = protoport($proto);
+ my $ip = $HOSTIP;
+ my $ipvnum = 4;
+ my $idnum = 1;
+
+ if($ipv6) {
+ # if IPv6, use a different setup
+ $ipvnum = 6;
+ $port = protoport('rtsp6');
+ $ip = $HOST6IP;
+ }
+
+ return &responsiveserver($proto, $ipvnum, $idnum, $ip, $port);
+}
+
+#######################################################################
+# Single shot tftp server responsiveness test. This should only be
+# used to verify that a server present in %run hash is still functional
+#
+sub responsive_tftp_server {
+ my ($id, $verb, $ipv6) = @_;
+ my $proto = 'tftp';
+ my $port = protoport($proto);
+ my $ip = $HOSTIP;
+ my $ipvnum = 4;
+ my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
+
+ if($ipv6) {
+ # if IPv6, use a different setup
+ $ipvnum = 6;
+ $port = protoport('tftp6');
+ $ip = $HOST6IP;
+ }
+
+ return &responsiveserver($proto, $ipvnum, $idnum, $ip, $port);
+}
+
+#######################################################################
+# Single shot non-stunnel HTTP TLS extensions capable server
+# responsiveness test. This should only be used to verify that a
+# server present in %run hash is still functional
+#
+sub responsive_httptls_server {
+ my ($verb, $ipv6) = @_;
+ my $ipvnum = ($ipv6 && ($ipv6 =~ /6$/)) ? 6 : 4;
+ my $proto = "httptls";
+ my $port = protoport($proto);
+ my $ip = "$HOSTIP";
+ my $idnum = 1;
+
+ if ($ipvnum == 6) {
+ $port = protoport("httptls6");
+ $ip = "$HOST6IP";
+ }
+
+ return &responsiveserver($proto, $ipvnum, $idnum, $ip, $port);
+}
+
+#######################################################################
+# startservers() starts all the named servers
+#
+# Returns: string with error reason or blank for success, and an integer:
+# 0 for success
+# 1 for an error starting the server
+# 2 for not the first time getting an error starting the server
+# 3 for a failure to stop a server in order to restart it
+# 4 for an unsupported server type
+#
+sub startservers {
+ my @what = @_;
+ my ($pid, $pid2);
+ my $serr; # error while starting a server (as as the return enumerations)
+ for(@what) {
+ my (@whatlist) = split(/\s+/,$_);
+ my $what = lc($whatlist[0]);
+ $what =~ s/[^a-z0-9\/-]//g;
+
+ my $certfile;
+ if($what =~ /^(ftp|gopher|http|imap|pop3|smtp)s((\d*)(-ipv6|-unix|))$/) {
+ $certfile = ($whatlist[1]) ? $whatlist[1] : 'stunnel.pem';
+ }
+
+ if(($what eq "pop3") ||
+ ($what eq "ftp") ||
+ ($what eq "imap") ||
+ ($what eq "smtp")) {
+ if($torture && $run{$what} &&
+ !responsive_pingpong_server($what, "", $verbose)) {
+ if(stopserver($what)) {
+ return ("failed stopping unresponsive ".uc($what)." server", 3);
+ }
+ }
+ if(!$run{$what}) {
+ ($serr, $pid, $pid2) = runpingpongserver($what, "", $verbose);
+ if($pid <= 0) {
+ return ("failed starting ". uc($what) ." server", $serr);
+ }
+ logmsg sprintf("* pid $what => %d %d\n", $pid, $pid2) if($verbose);
+ $run{$what}="$pid $pid2";
+ }
+ }
+ elsif($what eq "ftp-ipv6") {
+ if($torture && $run{'ftp-ipv6'} &&
+ !responsive_pingpong_server("ftp", "", $verbose, "ipv6")) {
+ if(stopserver('ftp-ipv6')) {
+ return ("failed stopping unresponsive FTP-IPv6 server", 3);
+ }
+ }
+ if(!$run{'ftp-ipv6'}) {
+ ($serr, $pid, $pid2) = runpingpongserver("ftp", "", $verbose, "ipv6");
+ if($pid <= 0) {
+ return ("failed starting FTP-IPv6 server", $serr);
+ }
+ logmsg sprintf("* pid ftp-ipv6 => %d %d\n", $pid,
+ $pid2) if($verbose);
+ $run{'ftp-ipv6'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "gopher") {
+ if($torture && $run{'gopher'} &&
+ !responsive_http_server("gopher", $verbose, 0,
+ protoport("gopher"))) {
+ if(stopserver('gopher')) {
+ return ("failed stopping unresponsive GOPHER server", 3);
+ }
+ }
+ if(!$run{'gopher'}) {
+ ($serr, $pid, $pid2, $PORT{'gopher'}) =
+ runhttpserver("gopher", $verbose, 0);
+ if($pid <= 0) {
+ return ("failed starting GOPHER server", $serr);
+ }
+ logmsg sprintf ("* pid gopher => %d %d\n", $pid, $pid2)
+ if($verbose);
+ $run{'gopher'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "gopher-ipv6") {
+ if($torture && $run{'gopher-ipv6'} &&
+ !responsive_http_server("gopher", $verbose, "ipv6",
+ protoport("gopher"))) {
+ if(stopserver('gopher-ipv6')) {
+ return ("failed stopping unresponsive GOPHER-IPv6 server", 3);
+ }
+ }
+ if(!$run{'gopher-ipv6'}) {
+ ($serr, $pid, $pid2, $PORT{"gopher6"}) =
+ runhttpserver("gopher", $verbose, "ipv6");
+ if($pid <= 0) {
+ return ("failed starting GOPHER-IPv6 server", $serr);
+ }
+ logmsg sprintf("* pid gopher-ipv6 => %d %d\n", $pid,
+ $pid2) if($verbose);
+ $run{'gopher-ipv6'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "http/3") {
+ if(!$run{'http/3'}) {
+ ($serr, $pid, $pid2, $PORT{"http3"}) = runhttp3server($verbose);
+ if($pid <= 0) {
+ return ("failed starting HTTP/3 server", $serr);
+ }
+ logmsg sprintf ("* pid http/3 => %d %d\n", $pid, $pid2)
+ if($verbose);
+ $run{'http/3'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "http/2") {
+ if(!$run{'http/2'}) {
+ ($serr, $pid, $pid2, $PORT{"http2"}, $PORT{"http2tls"}) =
+ runhttp2server($verbose);
+ if($pid <= 0) {
+ return ("failed starting HTTP/2 server", $serr);
+ }
+ logmsg sprintf ("* pid http/2 => %d %d\n", $pid, $pid2)
+ if($verbose);
+ $run{'http/2'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "http") {
+ if($torture && $run{'http'} &&
+ !responsive_http_server("http", $verbose, 0, protoport('http'))) {
+ if(stopserver('http')) {
+ return ("failed stopping unresponsive HTTP server", 3);
+ }
+ }
+ if(!$run{'http'}) {
+ ($serr, $pid, $pid2, $PORT{'http'}) =
+ runhttpserver("http", $verbose, 0);
+ if($pid <= 0) {
+ return ("failed starting HTTP server", $serr);
+ }
+ logmsg sprintf ("* pid http => %d %d\n", $pid, $pid2)
+ if($verbose);
+ $run{'http'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "http-proxy") {
+ if($torture && $run{'http-proxy'} &&
+ !responsive_http_server("http", $verbose, "proxy",
+ protoport("httpproxy"))) {
+ if(stopserver('http-proxy')) {
+ return ("failed stopping unresponsive HTTP-proxy server", 3);
+ }
+ }
+ if(!$run{'http-proxy'}) {
+ ($serr, $pid, $pid2, $PORT{"httpproxy"}) =
+ runhttpserver("http", $verbose, "proxy");
+ if($pid <= 0) {
+ return ("failed starting HTTP-proxy server", $serr);
+ }
+ logmsg sprintf ("* pid http-proxy => %d %d\n", $pid, $pid2)
+ if($verbose);
+ $run{'http-proxy'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "http-ipv6") {
+ if($torture && $run{'http-ipv6'} &&
+ !responsive_http_server("http", $verbose, "ipv6",
+ protoport("http6"))) {
+ if(stopserver('http-ipv6')) {
+ return ("failed stopping unresponsive HTTP-IPv6 server", 3);
+ }
+ }
+ if(!$run{'http-ipv6'}) {
+ ($serr, $pid, $pid2, $PORT{"http6"}) =
+ runhttpserver("http", $verbose, "ipv6");
+ if($pid <= 0) {
+ return ("failed starting HTTP-IPv6 server", $serr);
+ }
+ logmsg sprintf("* pid http-ipv6 => %d %d\n", $pid, $pid2)
+ if($verbose);
+ $run{'http-ipv6'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "rtsp") {
+ if($torture && $run{'rtsp'} &&
+ !responsive_rtsp_server($verbose)) {
+ if(stopserver('rtsp')) {
+ return ("failed stopping unresponsive RTSP server", 3);
+ }
+ }
+ if(!$run{'rtsp'}) {
+ ($serr, $pid, $pid2, $PORT{'rtsp'}) = runrtspserver($verbose);
+ if($pid <= 0) {
+ return ("failed starting RTSP server", $serr);
+ }
+ logmsg sprintf("* pid rtsp => %d %d\n", $pid, $pid2) if($verbose);
+ $run{'rtsp'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "rtsp-ipv6") {
+ if($torture && $run{'rtsp-ipv6'} &&
+ !responsive_rtsp_server($verbose, "ipv6")) {
+ if(stopserver('rtsp-ipv6')) {
+ return ("failed stopping unresponsive RTSP-IPv6 server", 3);
+ }
+ }
+ if(!$run{'rtsp-ipv6'}) {
+ ($serr, $pid, $pid2, $PORT{'rtsp6'}) = runrtspserver($verbose, "ipv6");
+ if($pid <= 0) {
+ return ("failed starting RTSP-IPv6 server", $serr);
+ }
+ logmsg sprintf("* pid rtsp-ipv6 => %d %d\n", $pid, $pid2)
+ if($verbose);
+ $run{'rtsp-ipv6'}="$pid $pid2";
+ }
+ }
+ elsif($what =~ /^(ftp|imap|pop3|smtp)s$/) {
+ my $cproto = $1;
+ if(!$stunnel) {
+ # we can't run ftps tests without stunnel
+ return ("no stunnel", 4);
+ }
+ if($runcert{$what} && ($runcert{$what} ne $certfile)) {
+ # stop server when running and using a different cert
+ if(stopserver($what)) {
+ return ("failed stopping $what server with different cert", 3);
+ }
+ }
+ if($torture && $run{$cproto} &&
+ !responsive_pingpong_server($cproto, "", $verbose)) {
+ if(stopserver($cproto)) {
+ return ("failed stopping unresponsive $cproto server", 3);
+ }
+ }
+ if(!$run{$cproto}) {
+ ($serr, $pid, $pid2) = runpingpongserver($cproto, "", $verbose);
+ if($pid <= 0) {
+ return ("failed starting $cproto server", $serr);
+ }
+ logmsg sprintf("* pid $cproto => %d %d\n", $pid, $pid2) if($verbose);
+ $run{$cproto}="$pid $pid2";
+ }
+ if(!$run{$what}) {
+ ($serr, $pid, $pid2, $PORT{$what}) =
+ runsecureserver($verbose, "", $certfile, $what,
+ protoport($cproto));
+ if($pid <= 0) {
+ return ("failed starting $what server (stunnel)", $serr);
+ }
+ logmsg sprintf("* pid $what => %d %d\n", $pid, $pid2)
+ if($verbose);
+ $run{$what}="$pid $pid2";
+ }
+ }
+ elsif($what eq "file") {
+ # we support it but have no server!
+ }
+ elsif($what eq "https") {
+ if(!$stunnel) {
+ # we can't run https tests without stunnel
+ return ("no stunnel", 4);
+ }
+ if($runcert{'https'} && ($runcert{'https'} ne $certfile)) {
+ # stop server when running and using a different cert
+ if(stopserver('https')) {
+ return ("failed stopping HTTPS server with different cert", 3);
+ }
+ }
+ if($torture && $run{'http'} &&
+ !responsive_http_server("http", $verbose, 0,
+ protoport('http'))) {
+ if(stopserver('http')) {
+ return ("failed stopping unresponsive HTTP server", 3);
+ }
+ }
+ if(!$run{'http'}) {
+ ($serr, $pid, $pid2, $PORT{'http'}) =
+ runhttpserver("http", $verbose, 0);
+ if($pid <= 0) {
+ return ("failed starting HTTP server", $serr);
+ }
+ logmsg sprintf("* pid http => %d %d\n", $pid, $pid2) if($verbose);
+ $run{'http'}="$pid $pid2";
+ }
+ if(!$run{'https'}) {
+ ($serr, $pid, $pid2, $PORT{'https'}) =
+ runhttpsserver($verbose, "https", "", $certfile);
+ if($pid <= 0) {
+ return ("failed starting HTTPS server (stunnel)", $serr);
+ }
+ logmsg sprintf("* pid https => %d %d\n", $pid, $pid2)
+ if($verbose);
+ $run{'https'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "gophers") {
+ if(!$stunnel) {
+ # we can't run TLS tests without stunnel
+ return ("no stunnel", 4);
+ }
+ if($runcert{'gophers'} && ($runcert{'gophers'} ne $certfile)) {
+ # stop server when running and using a different cert
+ if(stopserver('gophers')) {
+ return ("failed stopping GOPHERS server with different cert", 3);
+ }
+ }
+ if($torture && $run{'gopher'} &&
+ !responsive_http_server("gopher", $verbose, 0,
+ protoport('gopher'))) {
+ if(stopserver('gopher')) {
+ return ("failed stopping unresponsive GOPHER server", 3);
+ }
+ }
+ if(!$run{'gopher'}) {
+ my $port;
+ ($serr, $pid, $pid2, $port) =
+ runhttpserver("gopher", $verbose, 0);
+ $PORT{'gopher'} = $port;
+ if($pid <= 0) {
+ return ("failed starting GOPHER server", $serr);
+ }
+ logmsg sprintf("* pid gopher => %d %d\n", $pid, $pid2) if($verbose);
+ logmsg "GOPHERPORT => $port\n" if($verbose);
+ $run{'gopher'}="$pid $pid2";
+ }
+ if(!$run{'gophers'}) {
+ my $port;
+ ($serr, $pid, $pid2, $port) =
+ runhttpsserver($verbose, "gophers", "", $certfile);
+ $PORT{'gophers'} = $port;
+ if($pid <= 0) {
+ return ("failed starting GOPHERS server (stunnel)", $serr);
+ }
+ logmsg sprintf("* pid gophers => %d %d\n", $pid, $pid2)
+ if($verbose);
+ logmsg "GOPHERSPORT => $port\n" if($verbose);
+ $run{'gophers'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "https-proxy") {
+ if(!$stunnel) {
+ # we can't run https-proxy tests without stunnel
+ return ("no stunnel", 4);
+ }
+ if($runcert{'https-proxy'} &&
+ ($runcert{'https-proxy'} ne $certfile)) {
+ # stop server when running and using a different cert
+ if(stopserver('https-proxy')) {
+ return ("failed stopping HTTPS-proxy with different cert", 3);
+ }
+ }
+
+ # we front the http-proxy with stunnel so we need to make sure the
+ # proxy runs as well
+ my ($f, $e) = startservers("http-proxy");
+ if($f) {
+ return ($f, $e);
+ }
+
+ if(!$run{'https-proxy'}) {
+ ($serr, $pid, $pid2, $PORT{"httpsproxy"}) =
+ runhttpsserver($verbose, "https", "proxy", $certfile);
+ if($pid <= 0) {
+ return ("failed starting HTTPS-proxy (stunnel)", $serr);
+ }
+ logmsg sprintf("* pid https-proxy => %d %d\n", $pid, $pid2)
+ if($verbose);
+ $run{'https-proxy'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "httptls") {
+ if(!$httptlssrv) {
+ # for now, we can't run http TLS-EXT tests without gnutls-serv
+ return ("no gnutls-serv (with SRP support)", 4);
+ }
+ if($torture && $run{'httptls'} &&
+ !responsive_httptls_server($verbose, "IPv4")) {
+ if(stopserver('httptls')) {
+ return ("failed stopping unresponsive HTTPTLS server", 3);
+ }
+ }
+ if(!$run{'httptls'}) {
+ ($serr, $pid, $pid2, $PORT{'httptls'}) =
+ runhttptlsserver($verbose, "IPv4");
+ if($pid <= 0) {
+ return ("failed starting HTTPTLS server (gnutls-serv)", $serr);
+ }
+ logmsg sprintf("* pid httptls => %d %d\n", $pid, $pid2)
+ if($verbose);
+ $run{'httptls'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "httptls-ipv6") {
+ if(!$httptlssrv) {
+ # for now, we can't run http TLS-EXT tests without gnutls-serv
+ return ("no gnutls-serv", 4);
+ }
+ if($torture && $run{'httptls-ipv6'} &&
+ !responsive_httptls_server($verbose, "ipv6")) {
+ if(stopserver('httptls-ipv6')) {
+ return ("failed stopping unresponsive HTTPTLS-IPv6 server", 3);
+ }
+ }
+ if(!$run{'httptls-ipv6'}) {
+ ($serr, $pid, $pid2, $PORT{"httptls6"}) =
+ runhttptlsserver($verbose, "ipv6");
+ if($pid <= 0) {
+ return ("failed starting HTTPTLS-IPv6 server (gnutls-serv)", $serr);
+ }
+ logmsg sprintf("* pid httptls-ipv6 => %d %d\n", $pid, $pid2)
+ if($verbose);
+ $run{'httptls-ipv6'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "tftp") {
+ if($torture && $run{'tftp'} &&
+ !responsive_tftp_server("", $verbose)) {
+ if(stopserver('tftp')) {
+ return ("failed stopping unresponsive TFTP server", 3);
+ }
+ }
+ if(!$run{'tftp'}) {
+ ($serr, $pid, $pid2, $PORT{'tftp'}) =
+ runtftpserver("", $verbose);
+ if($pid <= 0) {
+ return ("failed starting TFTP server", $serr);
+ }
+ logmsg sprintf("* pid tftp => %d %d\n", $pid, $pid2) if($verbose);
+ $run{'tftp'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "tftp-ipv6") {
+ if($torture && $run{'tftp-ipv6'} &&
+ !responsive_tftp_server("", $verbose, "ipv6")) {
+ if(stopserver('tftp-ipv6')) {
+ return ("failed stopping unresponsive TFTP-IPv6 server", 3);
+ }
+ }
+ if(!$run{'tftp-ipv6'}) {
+ ($serr, $pid, $pid2, $PORT{'tftp6'}) =
+ runtftpserver("", $verbose, "ipv6");
+ if($pid <= 0) {
+ return ("failed starting TFTP-IPv6 server", $serr);
+ }
+ logmsg sprintf("* pid tftp-ipv6 => %d %d\n", $pid, $pid2) if($verbose);
+ $run{'tftp-ipv6'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "sftp" || $what eq "scp") {
+ if(!$run{'ssh'}) {
+ ($serr, $pid, $pid2, $PORT{'ssh'}) = runsshserver("", $verbose);
+ if($pid <= 0) {
+ return ("failed starting SSH server", $serr);
+ }
+ logmsg sprintf("* pid ssh => %d %d\n", $pid, $pid2) if($verbose);
+ $run{'ssh'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "socks4" || $what eq "socks5" ) {
+ if(!$run{'socks'}) {
+ ($serr, $pid, $pid2, $PORT{"socks"}) = runsocksserver("", $verbose);
+ if($pid <= 0) {
+ return ("failed starting socks server", $serr);
+ }
+ logmsg sprintf("* pid socks => %d %d\n", $pid, $pid2) if($verbose);
+ $run{'socks'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "socks5unix") {
+ if(!$run{'socks5unix'}) {
+ ($serr, $pid, $pid2) = runsocksserver("2", $verbose, "", "unix");
+ if($pid <= 0) {
+ return ("failed starting socks5unix server", $serr);
+ }
+ logmsg sprintf("* pid socks5unix => %d %d\n", $pid, $pid2) if($verbose);
+ $run{'socks5unix'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "mqtt" ) {
+ if(!$run{'mqtt'}) {
+ ($serr, $pid, $pid2) = runmqttserver("", $verbose);
+ if($pid <= 0) {
+ return ("failed starting mqtt server", $serr);
+ }
+ logmsg sprintf("* pid mqtt => %d %d\n", $pid, $pid2) if($verbose);
+ $run{'mqtt'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "http-unix") {
+ if($torture && $run{'http-unix'} &&
+ !responsive_http_server("http", $verbose, "unix", $HTTPUNIXPATH)) {
+ if(stopserver('http-unix')) {
+ return ("failed stopping unresponsive HTTP-unix server", 3);
+ }
+ }
+ if(!$run{'http-unix'}) {
+ my $unused;
+ ($serr, $pid, $pid2, $unused) =
+ runhttpserver("http", $verbose, "unix", $HTTPUNIXPATH);
+ if($pid <= 0) {
+ return ("failed starting HTTP-unix server", $serr);
+ }
+ logmsg sprintf("* pid http-unix => %d %d\n", $pid, $pid2)
+ if($verbose);
+ $run{'http-unix'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "dict") {
+ if(!$run{'dict'}) {
+ ($serr, $pid, $pid2, $PORT{"dict"}) = rundictserver($verbose, "");
+ if($pid <= 0) {
+ return ("failed starting DICT server", $serr);
+ }
+ logmsg sprintf ("* pid DICT => %d %d\n", $pid, $pid2)
+ if($verbose);
+ $run{'dict'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "smb") {
+ if(!$run{'smb'}) {
+ ($serr, $pid, $pid2, $PORT{"smb"}) = runsmbserver($verbose, "");
+ if($pid <= 0) {
+ return ("failed starting SMB server", $serr);
+ }
+ logmsg sprintf ("* pid SMB => %d %d\n", $pid, $pid2)
+ if($verbose);
+ $run{'smb'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "telnet") {
+ if(!$run{'telnet'}) {
+ ($serr, $pid, $pid2, $PORT{"telnet"}) =
+ runnegtelnetserver($verbose, "");
+ if($pid <= 0) {
+ return ("failed starting neg TELNET server", $serr);
+ }
+ logmsg sprintf ("* pid neg TELNET => %d %d\n", $pid, $pid2)
+ if($verbose);
+ $run{'telnet'}="$pid $pid2";
+ }
+ }
+ elsif($what eq "none") {
+ logmsg "* starts no server\n" if ($verbose);
+ }
+ else {
+ warn "we don't support a server for $what";
+ return ("no server for $what", 4);
+ }
+ }
+ return ("", 0);
+}
+
+#######################################################################
+# Stop all running test servers
+#
+sub stopservers {
+ my $verb = $_[0];
+ #
+ # kill sockfilter processes for all pingpong servers
+ #
+ killallsockfilters("$LOGDIR/$PIDDIR", $verb);
+ #
+ # kill all server pids from %run hash clearing them
+ #
+ my $pidlist;
+ foreach my $server (keys %run) {
+ if($run{$server}) {
+ if($verb) {
+ my $prev = 0;
+ my $pids = $run{$server};
+ foreach my $pid (split(' ', $pids)) {
+ if($pid != $prev) {
+ logmsg sprintf("* kill pid for %s => %d\n",
+ $server, $pid);
+ $prev = $pid;
+ }
+ }
+ }
+ $pidlist .= "$run{$server} ";
+ $run{$server} = 0;
+ }
+ $runcert{$server} = 0 if($runcert{$server});
+ }
+ killpid($verb, $pidlist);
+ #
+ # cleanup all server pid files
+ #
+ my $result = 0;
+ foreach my $server (keys %serverpidfile) {
+ my $pidfile = $serverpidfile{$server};
+ my $pid = processexists($pidfile);
+ if($pid > 0) {
+ if($err_unexpected) {
+ logmsg "ERROR: ";
+ $result = -1;
+ }
+ else {
+ logmsg "Warning: ";
+ }
+ logmsg "$server server unexpectedly alive\n";
+ killpid($verb, $pid);
+ }
+ unlink($pidfile) if(-f $pidfile);
+ }
+
+ return $result;
+}
+
+
+#######################################################################
+# substitute the variable stuff into either a joined up file or
+# a command, in either case passed by reference
+#
+sub subvariables {
+ my ($thing, $testnum, $prefix) = @_;
+ my $port;
+
+ if(!$prefix) {
+ $prefix = "%";
+ }
+
+ # test server ports
+ # Substitutes variables like %HTTPPORT and %SMTP6PORT with the server ports
+ foreach my $proto ('DICT',
+ 'FTP', 'FTP6', 'FTPS',
+ 'GOPHER', 'GOPHER6', 'GOPHERS',
+ 'HTTP', 'HTTP6', 'HTTPS',
+ 'HTTPSPROXY', 'HTTPTLS', 'HTTPTLS6',
+ 'HTTP2', 'HTTP2TLS',
+ 'HTTP3',
+ 'IMAP', 'IMAP6', 'IMAPS',
+ 'MQTT',
+ 'NOLISTEN',
+ 'POP3', 'POP36', 'POP3S',
+ 'RTSP', 'RTSP6',
+ 'SMB', 'SMBS',
+ 'SMTP', 'SMTP6', 'SMTPS',
+ 'SOCKS',
+ 'SSH',
+ 'TELNET',
+ 'TFTP', 'TFTP6') {
+ $port = protoport(lc $proto);
+ $$thing =~ s/${prefix}(?:$proto)PORT/$port/g;
+ }
+ # Special case: for PROXYPORT substitution, use httpproxy.
+ $port = protoport('httpproxy');
+ $$thing =~ s/${prefix}PROXYPORT/$port/g;
+
+ # server Unix domain socket paths
+ $$thing =~ s/${prefix}HTTPUNIXPATH/$HTTPUNIXPATH/g;
+ $$thing =~ s/${prefix}SOCKSUNIXPATH/$SOCKSUNIXPATH/g;
+
+ # client IP addresses
+ $$thing =~ s/${prefix}CLIENT6IP/$CLIENT6IP/g;
+ $$thing =~ s/${prefix}CLIENTIP/$CLIENTIP/g;
+
+ # server IP addresses
+ $$thing =~ s/${prefix}HOST6IP/$HOST6IP/g;
+ $$thing =~ s/${prefix}HOSTIP/$HOSTIP/g;
+
+ # misc
+ $$thing =~ s/${prefix}CURL/$CURL/g;
+ $$thing =~ s/${prefix}LOGDIR/$LOGDIR/g;
+ $$thing =~ s/${prefix}PWD/$pwd/g;
+ $$thing =~ s/${prefix}POSIX_PWD/$posix_pwd/g;
+ $$thing =~ s/${prefix}VERSION/$CURLVERSION/g;
+ $$thing =~ s/${prefix}TESTNUMBER/$testnum/g;
+
+ my $file_pwd = $pwd;
+ if($file_pwd !~ /^\//) {
+ $file_pwd = "/$file_pwd";
+ }
+ my $ssh_pwd = $posix_pwd;
+ # this only works after the SSH server has been started
+ # TODO: call sshversioninfo early and store $sshdid so this substitution
+ # always works
+ if ($sshdid && $sshdid =~ /OpenSSH-Windows/) {
+ $ssh_pwd = $file_pwd;
+ }
+
+ $$thing =~ s/${prefix}FILE_PWD/$file_pwd/g;
+ $$thing =~ s/${prefix}SSH_PWD/$ssh_pwd/g;
+ $$thing =~ s/${prefix}SRCDIR/$srcdir/g;
+ $$thing =~ s/${prefix}USER/$USER/g;
+
+ $$thing =~ s/${prefix}SSHSRVMD5/$SSHSRVMD5/g;
+ $$thing =~ s/${prefix}SSHSRVSHA256/$SSHSRVSHA256/g;
+
+ # The purpose of FTPTIME2 and FTPTIME3 is to provide times that can be
+ # used for time-out tests and that would work on most hosts as these
+ # adjust for the startup/check time for this particular host. We needed to
+ # do this to make the test suite run better on very slow hosts.
+ my $ftp2 = $ftpchecktime * 8;
+ my $ftp3 = $ftpchecktime * 12;
+
+ $$thing =~ s/${prefix}FTPTIME2/$ftp2/g;
+ $$thing =~ s/${prefix}FTPTIME3/$ftp3/g;
+
+ # HTTP2
+ $$thing =~ s/${prefix}H2CVER/$h2cver/g;
+}
+
+
+1;
diff --git a/tests/smbserver.py b/tests/smbserver.py
index 62f2d7a0f..3de8d69c0 100755
--- a/tests/smbserver.py
+++ b/tests/smbserver.py
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2017 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -29,8 +29,10 @@ from __future__ import (absolute_import, division, print_function,
import argparse
import logging
import os
+import signal
import sys
import tempfile
+import threading
# Import our curl test data helper
from util import ClosingFileHandler, TestData
@@ -59,6 +61,49 @@ VERIFIED_REQ = "verifiedserver"
VERIFIED_RSP = "WE ROOLZ: {pid}\n"
+class ShutdownHandler(threading.Thread):
+ """Cleanly shut down the SMB server
+
+ This can only be done from another thread while the server is in
+ serve_forever(), so a thread is spawned here that waits for a shutdown
+ signal before doing its thing. Use in a with statement around the
+ serve_forever() call.
+ """
+
+ def __init__(self, server):
+ super(ShutdownHandler, self).__init__()
+ self.server = server
+ self.shutdown_event = threading.Event()
+
+ def __enter__(self):
+ self.start()
+ signal.signal(signal.SIGINT, self._sighandler)
+ signal.signal(signal.SIGTERM, self._sighandler)
+
+ def __exit__(self, *_):
+ # Call for shutdown just in case it wasn't done already
+ self.shutdown_event.set()
+ # Wait for thread, and therefore also the server, to finish
+ self.join()
+ # Uninstall our signal handlers
+ signal.signal(signal.SIGINT, signal.SIG_DFL)
+ signal.signal(signal.SIGTERM, signal.SIG_DFL)
+ # Delete any temporary files created by the server during its run
+ log.info("Deleting %d temporary files", len(self.server.tmpfiles))
+ for f in self.server.tmpfiles:
+ os.unlink(f)
+
+ def _sighandler(self, _signum, _frame):
+ # Wake up the cleanup task
+ self.shutdown_event.set()
+
+ def run(self):
+ # Wait for shutdown signal
+ self.shutdown_event.wait()
+ # Notify the server to shut down
+ self.server.shutdown()
+
+
def smbserver(options):
"""Start up a TCP SMB server that serves forever
@@ -105,7 +150,12 @@ def smbserver(options):
test_data_directory=test_data_dir)
log.info("[SMB] setting up SMB server on port %s", options.port)
smb_server.processConfigFile()
- smb_server.serve_forever()
+
+ # Start a thread that cleanly shuts down the server on a signal
+ with ShutdownHandler(smb_server):
+ # This will block until smb_server.shutdown() is called
+ smb_server.serve_forever()
+
return 0
@@ -122,6 +172,7 @@ class TestSmbServer(imp_smbserver.SMBSERVER):
imp_smbserver.SMBSERVER.__init__(self,
address,
config_parser=config_parser)
+ self.tmpfiles = []
# Set up a test data object so we can get test data later.
self.ctd = TestData(test_data_directory)
@@ -182,6 +233,8 @@ class TestSmbServer(imp_smbserver.SMBSERVER):
assert (path == TESTS_MAGIC)
fid, full_path = self.get_test_path(requested_file)
+ self.tmpfiles.append(full_path)
+
resp_parms = imp_smb.SMBNtCreateAndXResponse_Parameters()
resp_data = ""
diff --git a/tests/sshhelp.pm b/tests/sshhelp.pm
index 2d419c184..c8df594b2 100644
--- a/tests/sshhelp.pm
+++ b/tests/sshhelp.pm
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -26,118 +26,82 @@ package sshhelp;
use strict;
use warnings;
-use Exporter;
-use File::Spec;
-
-#***************************************************************************
-# Global symbols allowed without explicit package name
-#
-use vars qw(
- @ISA
- @EXPORT_OK
- $sshdexe
- $sshexe
- $sftpsrvexe
- $sftpexe
- $sshkeygenexe
- $httptlssrvexe
- $sshdconfig
- $sshconfig
- $sftpconfig
- $knownhosts
- $sshdlog
- $sshlog
- $sftplog
- $sftpcmds
- $hstprvkeyf
- $hstpubkeyf
- $hstpubmd5f
- $hstpubsha256f
- $cliprvkeyf
- $clipubkeyf
- @sftppath
- @httptlssrvpath
+BEGIN {
+ use base qw(Exporter);
+
+ our @EXPORT_OK = qw(
+ $sshdexe
+ $sshexe
+ $sftpsrvexe
+ $sftpexe
+ $sshkeygenexe
+ $sshdconfig
+ $sshconfig
+ $sftpconfig
+ $knownhosts
+ $sshdlog
+ $sshlog
+ $sftplog
+ $sftpcmds
+ $hstprvkeyf
+ $hstpubkeyf
+ $hstpubmd5f
+ $hstpubsha256f
+ $cliprvkeyf
+ $clipubkeyf
+ display_sshdconfig
+ display_sshconfig
+ display_sftpconfig
+ display_sshdlog
+ display_sshlog
+ display_sftplog
+ dump_array
+ find_sshd
+ find_ssh
+ find_sftpsrv
+ find_sftp
+ find_sshkeygen
+ find_httptlssrv
+ sshversioninfo
);
+}
+use File::Spec;
-#***************************************************************************
-# Inherit Exporter's capabilities
-#
-@ISA = qw(Exporter);
-
-
-#***************************************************************************
-# Global symbols this module will export upon request
-#
-@EXPORT_OK = qw(
- $sshdexe
- $sshexe
- $sftpsrvexe
- $sftpexe
- $sshkeygenexe
- $sshdconfig
- $sshconfig
- $sftpconfig
- $knownhosts
- $sshdlog
- $sshlog
- $sftplog
- $sftpcmds
- $hstprvkeyf
- $hstpubkeyf
- $hstpubmd5f
- $hstpubsha256f
- $cliprvkeyf
- $clipubkeyf
- display_sshdconfig
- display_sshconfig
- display_sftpconfig
- display_sshdlog
- display_sshlog
- display_sftplog
- dump_array
+use pathhelp qw(
exe_ext
- find_sshd
- find_ssh
- find_sftpsrv
- find_sftp
- find_sshkeygen
- find_httptlssrv
- logmsg
- sshversioninfo
);
-
#***************************************************************************
# Global variables initialization
#
-$sshdexe = 'sshd' .exe_ext('SSH'); # base name and ext of ssh daemon
-$sshexe = 'ssh' .exe_ext('SSH'); # base name and ext of ssh client
-$sftpsrvexe = 'sftp-server' .exe_ext('SSH'); # base name and ext of sftp-server
-$sftpexe = 'sftp' .exe_ext('SSH'); # base name and ext of sftp client
-$sshkeygenexe = 'ssh-keygen' .exe_ext('SSH'); # base name and ext of ssh-keygen
-$httptlssrvexe = 'gnutls-serv' .exe_ext('SSH'); # base name and ext of gnutls-serv
-$sshdconfig = 'curl_sshd_config'; # ssh daemon config file
-$sshconfig = 'curl_ssh_config'; # ssh client config file
-$sftpconfig = 'curl_sftp_config'; # sftp client config file
-$sshdlog = undef; # ssh daemon log file
-$sshlog = undef; # ssh client log file
-$sftplog = undef; # sftp client log file
-$sftpcmds = 'curl_sftp_cmds'; # sftp client commands batch file
-$knownhosts = 'curl_client_knownhosts'; # ssh knownhosts file
-$hstprvkeyf = 'curl_host_rsa_key'; # host private key file
-$hstpubkeyf = 'curl_host_rsa_key.pub'; # host public key file
-$hstpubmd5f = 'curl_host_rsa_key.pub_md5'; # md5 hash of host public key
-$hstpubsha256f = 'curl_host_rsa_key.pub_sha256'; # sha256 hash of host public key
-$cliprvkeyf = 'curl_client_key'; # client private key file
-$clipubkeyf = 'curl_client_key.pub'; # client public key file
+our $sshdexe = 'sshd' .exe_ext('SSH'); # base name and ext of ssh daemon
+our $sshexe = 'ssh' .exe_ext('SSH'); # base name and ext of ssh client
+our $sftpsrvexe = 'sftp-server' .exe_ext('SSH'); # base name and ext of sftp-server
+our $sftpexe = 'sftp' .exe_ext('SSH'); # base name and ext of sftp client
+our $sshkeygenexe = 'ssh-keygen' .exe_ext('SSH'); # base name and ext of ssh-keygen
+our $httptlssrvexe = 'gnutls-serv' .exe_ext('SSH'); # base name and ext of gnutls-serv
+our $sshdconfig = 'curl_sshd_config'; # ssh daemon config file
+our $sshconfig = 'curl_ssh_config'; # ssh client config file
+our $sftpconfig = 'curl_sftp_config'; # sftp client config file
+our $sshdlog = undef; # ssh daemon log file
+our $sshlog = undef; # ssh client log file
+our $sftplog = undef; # sftp client log file
+our $sftpcmds = 'curl_sftp_cmds'; # sftp client commands batch file
+our $knownhosts = 'curl_client_knownhosts'; # ssh knownhosts file
+our $hstprvkeyf = 'curl_host_rsa_key'; # host private key file
+our $hstpubkeyf = 'curl_host_rsa_key.pub'; # host public key file
+our $hstpubmd5f = 'curl_host_rsa_key.pub_md5'; # md5 hash of host public key
+our $hstpubsha256f = 'curl_host_rsa_key.pub_sha256'; # sha256 hash of host public key
+our $cliprvkeyf = 'curl_client_key'; # client private key file
+our $clipubkeyf = 'curl_client_key.pub'; # client public key file
#***************************************************************************
# Absolute paths where to look for sftp-server plugin, when not in PATH
#
-@sftppath = qw(
+our @sftppath = qw(
/usr/lib/openssh
/usr/libexec/openssh
/usr/libexec
@@ -163,7 +127,7 @@ $clipubkeyf = 'curl_client_key.pub'; # client public key file
#***************************************************************************
# Absolute paths where to look for httptlssrv (gnutls-serv), when not in PATH
#
-@httptlssrvpath = qw(
+our @httptlssrvpath = qw(
/usr/sbin
/usr/libexec
/usr/lib
@@ -185,24 +149,6 @@ $clipubkeyf = 'curl_client_key.pub'; # client public key file
#***************************************************************************
-# Return file extension for executable files on this operating system
-#
-sub exe_ext {
- my ($component, @arr) = @_;
- if ($ENV{'CURL_TEST_EXE_EXT'}) {
- return $ENV{'CURL_TEST_EXE_EXT'};
- }
- if ($ENV{'CURL_TEST_EXE_EXT_'.$component}) {
- return $ENV{'CURL_TEST_EXE_EXT_'.$component};
- }
- if ($^O eq 'MSWin32' || $^O eq 'cygwin' || $^O eq 'msys' ||
- $^O eq 'dos' || $^O eq 'os2') {
- return '.exe';
- }
-}
-
-
-#***************************************************************************
# Create or overwrite the given file with lines from an array of strings
#
sub dump_array {
@@ -212,12 +158,12 @@ sub dump_array {
if(!$filename) {
$error = 'Error: Missing argument 1 for dump_array()';
}
- elsif(open(TEXTFH, ">$filename")) {
+ elsif(open(my $textfh, ">", $filename)) {
foreach my $line (@arr) {
- $line .= "\n" unless($line =~ /\n$/);
- print TEXTFH $line;
+ $line .= "\n" if($line !~ /\n$/);
+ print $textfh $line;
}
- if(!close(TEXTFH)) {
+ if(!close($textfh)) {
$error = "Error: cannot close file $filename";
}
}
@@ -229,27 +175,16 @@ sub dump_array {
#***************************************************************************
-# Display a message
-#
-sub logmsg {
- my ($line) = @_;
- chomp $line if($line);
- $line .= "\n";
- print "$line";
-}
-
-
-#***************************************************************************
# Display contents of the given file
#
sub display_file {
my $filename = $_[0];
print "=== Start of file $filename\n";
- if(open(DISPLAYFH, "<$filename")) {
- while(my $line = <DISPLAYFH>) {
+ if(open(my $displayfh, "<", "$filename")) {
+ while(my $line = <$displayfh>) {
print "$line";
}
- close DISPLAYFH;
+ close $displayfh;
}
print "=== End of file $filename\n";
}
@@ -319,6 +254,7 @@ sub find_file {
return $file;
}
}
+ return "";
}
@@ -337,6 +273,7 @@ sub find_exe_file {
return $file if(($xext) && (lc($file) =~ /\Q$xext\E$/));
}
}
+ return "";
}
@@ -408,7 +345,19 @@ sub find_sshkeygen {
# Find httptlssrv (gnutls-serv) and return canonical filename
#
sub find_httptlssrv {
- return find_exe_file_hpath($httptlssrvexe);
+ my $p = find_exe_file_hpath($httptlssrvexe);
+ if($p) {
+ my @o = `"$p" -l`;
+ my $found;
+ for(@o) {
+ if(/Key exchange: SRP/) {
+ $found = 1;
+ last;
+ }
+ }
+ return $p if($found);
+ }
+ return "";
}
diff --git a/tests/sshserver.pl b/tests/sshserver.pl
index 576b70635..cba8a88ef 100644..100755
--- a/tests/sshserver.pl
+++ b/tests/sshserver.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -35,6 +35,7 @@ use Digest::MD5 'md5_hex';
use Digest::SHA;
use Digest::SHA 'sha256_base64';
use MIME::Base64;
+use File::Basename;
#***************************************************************************
# Variables and subs imported from sshhelp module
@@ -71,7 +72,6 @@ use sshhelp qw(
find_sftpsrv
find_sftp
find_sshkeygen
- logmsg
sshversioninfo
);
@@ -79,6 +79,8 @@ use sshhelp qw(
# Subs imported from serverhelp module
#
use serverhelp qw(
+ logmsg
+ $logfile
server_pidfilename
server_logfilename
);
@@ -96,6 +98,7 @@ my $idnum = 1; # default ssh daemon instance number
my $proto = 'ssh'; # protocol the ssh daemon speaks
my $path = getcwd(); # current working directory
my $logdir = $path .'/log'; # directory for log files
+my $piddir; # directory for server config files
my $username = $ENV{USER}; # default user
my $pidfile; # ssh daemon pid file
my $identity = 'curl_client_key'; # default identity file
@@ -103,6 +106,14 @@ my $identity = 'curl_client_key'; # default identity file
my $error;
my @cfgarr;
+#***************************************************************************
+# Returns a path of the given file name in the log directory (PiddirPath)
+#
+sub pp {
+ my $file = $_[0];
+ return "$piddir/$file";
+ # TODO: do Windows path conversion here
+}
#***************************************************************************
# Parse command line options
@@ -157,6 +168,12 @@ while(@ARGV) {
shift @ARGV;
}
}
+ elsif($ARGV[0] eq '--logdir') {
+ if($ARGV[1]) {
+ $logdir = "$path/". $ARGV[1];
+ shift @ARGV;
+ }
+ }
elsif($ARGV[0] eq '--sshport') {
if($ARGV[1]) {
if($ARGV[1] =~ /^(\d+)$/) {
@@ -171,21 +188,29 @@ while(@ARGV) {
shift @ARGV;
}
+#***************************************************************************
+# Initialize command line option dependent variables
+#
#***************************************************************************
-# Default ssh daemon pid file name
+# Default ssh daemon pid file name & directory
#
-if(!$pidfile) {
- $pidfile = "$path/". server_pidfilename($proto, $ipvnum, $idnum);
+if($pidfile) {
+ # Use our pidfile directory to store server config files
+ $piddir = dirname($pidfile);
+}
+else {
+ # Use the current directory to store server config files
+ $piddir = $path;
+ $pidfile = server_pidfilename($piddir, $proto, $ipvnum, $idnum);
}
-
#***************************************************************************
# ssh and sftp server log file names
#
$sshdlog = server_logfilename($logdir, 'ssh', $ipvnum, $idnum);
$sftplog = server_logfilename($logdir, 'sftp', $ipvnum, $idnum);
-
+$logfile = "$logdir/sshserver.log"; # used by logmsg
#***************************************************************************
# Logging level for ssh server and client
@@ -203,7 +228,7 @@ elsif($username eq 'root') {
$error = 'Will not run ssh server as root to mitigate security risks';
}
if($error) {
- logmsg $error;
+ logmsg "$error\n";
exit 1;
}
@@ -213,7 +238,7 @@ if($error) {
#
my $sshd = find_sshd();
if(!$sshd) {
- logmsg "cannot find $sshdexe";
+ logmsg "cannot find $sshdexe\n";
exit 1;
}
@@ -224,11 +249,11 @@ if(!$sshd) {
my ($sshdid, $sshdvernum, $sshdverstr, $sshderror) = sshversioninfo($sshd);
if(!$sshdid) {
# Not an OpenSSH or SunSSH ssh daemon
- logmsg $sshderror if($verbose);
- logmsg 'SCP and SFTP tests require OpenSSH 2.9.9 or later';
+ logmsg "$sshderror\n" if($verbose);
+ logmsg "SCP and SFTP tests require OpenSSH 2.9.9 or later\n";
exit 1;
}
-logmsg "ssh server found $sshd is $sshdverstr" if($verbose);
+logmsg "ssh server found $sshd is $sshdverstr\n" if($verbose);
#***************************************************************************
@@ -254,7 +279,7 @@ logmsg "ssh server found $sshd is $sshdverstr" if($verbose);
#
if((($sshdid =~ /OpenSSH/) && ($sshdvernum < 299)) ||
(($sshdid =~ /SunSSH/) && ($sshdvernum < 100))) {
- logmsg 'SCP and SFTP tests require OpenSSH 2.9.9 or later';
+ logmsg "SCP and SFTP tests require OpenSSH 2.9.9 or later\n";
exit 1;
}
@@ -264,10 +289,10 @@ if((($sshdid =~ /OpenSSH/) && ($sshdvernum < 299)) ||
#
my $sftpsrv = find_sftpsrv();
if(!$sftpsrv) {
- logmsg "cannot find $sftpsrvexe";
+ logmsg "cannot find $sftpsrvexe\n";
exit 1;
}
-logmsg "sftp server plugin found $sftpsrv" if($verbose);
+logmsg "sftp server plugin found $sftpsrv\n" if($verbose);
#***************************************************************************
@@ -275,10 +300,10 @@ logmsg "sftp server plugin found $sftpsrv" if($verbose);
#
my $sftp = find_sftp();
if(!$sftp) {
- logmsg "cannot find $sftpexe";
+ logmsg "cannot find $sftpexe\n";
exit 1;
}
-logmsg "sftp client found $sftp" if($verbose);
+logmsg "sftp client found $sftp\n" if($verbose);
#***************************************************************************
@@ -286,10 +311,10 @@ logmsg "sftp client found $sftp" if($verbose);
#
my $sshkeygen = find_sshkeygen();
if(!$sshkeygen) {
- logmsg "cannot find $sshkeygenexe";
+ logmsg "cannot find $sshkeygenexe\n";
exit 1;
}
-logmsg "ssh keygen found $sshkeygen" if($verbose);
+logmsg "ssh keygen found $sshkeygen\n" if($verbose);
#***************************************************************************
@@ -297,7 +322,7 @@ logmsg "ssh keygen found $sshkeygen" if($verbose);
#
my $ssh = find_ssh();
if(!$ssh) {
- logmsg "cannot find $sshexe";
+ logmsg "cannot find $sshexe\n";
exit 1;
}
@@ -308,11 +333,11 @@ if(!$ssh) {
my ($sshid, $sshvernum, $sshverstr, $ssherror) = sshversioninfo($ssh);
if(!$sshid) {
# Not an OpenSSH or SunSSH ssh client
- logmsg $ssherror if($verbose);
- logmsg 'SCP and SFTP tests require OpenSSH 2.9.9 or later';
+ logmsg "$ssherror\n" if($verbose);
+ logmsg "SCP and SFTP tests require OpenSSH 2.9.9 or later\n";
exit 1;
}
-logmsg "ssh client found $ssh is $sshverstr" if($verbose);
+logmsg "ssh client found $ssh is $sshverstr\n" if($verbose);
#***************************************************************************
@@ -340,7 +365,7 @@ logmsg "ssh client found $ssh is $sshverstr" if($verbose);
#
if((($sshid =~ /OpenSSH/) && ($sshvernum < 299)) ||
(($sshid =~ /SunSSH/) && ($sshvernum < 100))) {
- logmsg 'SCP and SFTP tests require OpenSSH 2.9.9 or later';
+ logmsg "SCP and SFTP tests require OpenSSH 2.9.9 or later\n";
exit 1;
}
@@ -364,48 +389,48 @@ if((($sshid =~ /OpenSSH/) && ($sshvernum < 299)) ||
#***************************************************************************
# Generate host and client key files for curl's tests
#
-if((! -e $hstprvkeyf) || (! -s $hstprvkeyf) ||
- (! -e $hstpubkeyf) || (! -s $hstpubkeyf) ||
- (! -e $hstpubmd5f) || (! -s $hstpubmd5f) ||
- (! -e $hstpubsha256f) || (! -s $hstpubsha256f) ||
- (! -e $cliprvkeyf) || (! -s $cliprvkeyf) ||
- (! -e $clipubkeyf) || (! -s $clipubkeyf)) {
+if((! -e pp($hstprvkeyf)) || (! -s pp($hstprvkeyf)) ||
+ (! -e pp($hstpubkeyf)) || (! -s pp($hstpubkeyf)) ||
+ (! -e pp($hstpubmd5f)) || (! -s pp($hstpubmd5f)) ||
+ (! -e pp($hstpubsha256f)) || (! -s pp($hstpubsha256f)) ||
+ (! -e pp($cliprvkeyf)) || (! -s pp($cliprvkeyf)) ||
+ (! -e pp($clipubkeyf)) || (! -s pp($clipubkeyf))) {
# Make sure all files are gone so ssh-keygen doesn't complain
- unlink($hstprvkeyf, $hstpubkeyf, $hstpubmd5f, $hstpubsha256f,
- $cliprvkeyf, $clipubkeyf);
- logmsg 'generating host keys...' if($verbose);
- if(system "\"$sshkeygen\" -q -t rsa -f $hstprvkeyf -C 'curl test server' -N ''") {
- logmsg 'Could not generate host key';
+ unlink(pp($hstprvkeyf), pp($hstpubkeyf), pp($hstpubmd5f),
+ pp($hstpubsha256f), pp($cliprvkeyf), pp($clipubkeyf));
+ logmsg "generating host keys...\n" if($verbose);
+ if(system "\"$sshkeygen\" -q -t rsa -f " . pp($hstprvkeyf) . " -C 'curl test server' -N ''") {
+ logmsg "Could not generate host key\n";
exit 1;
}
- logmsg 'generating client keys...' if($verbose);
- if(system "\"$sshkeygen\" -q -t rsa -f $cliprvkeyf -C 'curl test client' -N ''") {
- logmsg 'Could not generate client key';
+ logmsg "generating client keys...\n" if($verbose);
+ if(system "\"$sshkeygen\" -q -t rsa -f " . pp($cliprvkeyf) . " -C 'curl test client' -N ''") {
+ logmsg "Could not generate client key\n";
exit 1;
}
# Make sure that permissions are restricted so openssh doesn't complain
- system "chmod 600 $hstprvkeyf";
- system "chmod 600 $cliprvkeyf";
+ system "chmod 600 " . pp($hstprvkeyf);
+ system "chmod 600 " . pp($cliprvkeyf);
# Save md5 and sha256 hashes of public host key
- open(RSAKEYFILE, "<$hstpubkeyf");
- my @rsahostkey = do { local $/ = ' '; <RSAKEYFILE> };
- close(RSAKEYFILE);
+ open(my $rsakeyfile, "<", pp($hstpubkeyf));
+ my @rsahostkey = do { local $/ = ' '; <$rsakeyfile> };
+ close($rsakeyfile);
if(!$rsahostkey[1]) {
- logmsg 'Failed parsing base64 encoded RSA host key';
+ logmsg "Failed parsing base64 encoded RSA host key\n";
exit 1;
}
- open(PUBMD5FILE, ">$hstpubmd5f");
- print PUBMD5FILE md5_hex(decode_base64($rsahostkey[1]));
- close(PUBMD5FILE);
- if((! -e $hstpubmd5f) || (! -s $hstpubmd5f)) {
- logmsg 'Failed writing md5 hash of RSA host key';
+ open(my $pubmd5file, ">", pp($hstpubmd5f));
+ print $pubmd5file md5_hex(decode_base64($rsahostkey[1]));
+ close($pubmd5file);
+ if((! -e pp($hstpubmd5f)) || (! -s pp($hstpubmd5f))) {
+ logmsg "Failed writing md5 hash of RSA host key\n";
exit 1;
}
- open(PUBSHA256FILE, ">$hstpubsha256f");
- print PUBSHA256FILE sha256_base64(decode_base64($rsahostkey[1]));
- close(PUBSHA256FILE);
- if((! -e $hstpubsha256f) || (! -s $hstpubsha256f)) {
- logmsg 'Failed writing sha256 hash of RSA host key';
+ open(my $pubsha256file, ">", pp($hstpubsha256f));
+ print $pubsha256file sha256_base64(decode_base64($rsahostkey[1]));
+ close($pubsha256file);
+ if((! -e pp($hstpubsha256f)) || (! -s pp($hstpubsha256f))) {
+ logmsg "Failed writing sha256 hash of RSA host key\n";
exit 1;
}
}
@@ -414,29 +439,31 @@ if((! -e $hstprvkeyf) || (! -s $hstprvkeyf) ||
#***************************************************************************
# Convert paths for curl's tests running on Windows with Cygwin/Msys OpenSSH
#
-my $clipubkeyf_config = abs_path("$path/$clipubkeyf");
-my $hstprvkeyf_config = abs_path("$path/$hstprvkeyf");
-my $pidfile_config = $pidfile;
-my $sftpsrv_config = $sftpsrv;
-
-if (pathhelp::os_is_win()) {
+my $clipubkeyf_config;
+my $hstprvkeyf_config;
+my $pidfile_config;
+my $sftpsrv_config;
+if ($sshdid =~ /OpenSSH-Windows/) {
+ # Ensure to use native Windows paths with OpenSSH for Windows
+ $clipubkeyf_config = pathhelp::sys_native_abs_path(pp($clipubkeyf));
+ $hstprvkeyf_config = pathhelp::sys_native_abs_path(pp($hstprvkeyf));
+ $pidfile_config = pathhelp::sys_native_abs_path($pidfile);
+ $sftpsrv_config = pathhelp::sys_native_abs_path($sftpsrv);
+}
+elsif (pathhelp::os_is_win()) {
# Ensure to use MinGW/Cygwin paths
$clipubkeyf_config = pathhelp::build_sys_abs_path($clipubkeyf_config);
$hstprvkeyf_config = pathhelp::build_sys_abs_path($hstprvkeyf_config);
$pidfile_config = pathhelp::build_sys_abs_path($pidfile_config);
$sftpsrv_config = "internal-sftp";
}
-if ($sshdid =~ /OpenSSH-Windows/) {
- # Ensure to use native Windows paths with OpenSSH for Windows
- $clipubkeyf_config = pathhelp::sys_native_abs_path($clipubkeyf);
- $hstprvkeyf_config = pathhelp::sys_native_abs_path($hstprvkeyf);
- $pidfile_config = pathhelp::sys_native_abs_path($pidfile);
- $sftpsrv_config = pathhelp::sys_native_abs_path($sftpsrv);
-
- $sshdconfig = pathhelp::sys_native_abs_path($sshdconfig);
- $sshconfig = pathhelp::sys_native_abs_path($sshconfig);
- $sftpconfig = pathhelp::sys_native_abs_path($sftpconfig);
+else {
+ $clipubkeyf_config = abs_path(pp($clipubkeyf));
+ $hstprvkeyf_config = abs_path(pp($hstprvkeyf));
+ $pidfile_config = $pidfile;
+ $sftpsrv_config = $sftpsrv;
}
+my $sshdconfig_abs = pathhelp::sys_native_abs_path(pp($sshdconfig));
#***************************************************************************
# ssh daemon configuration file options we might use and version support
@@ -523,7 +550,7 @@ if ($sshdid =~ /OpenSSH-Windows/) {
#***************************************************************************
# Initialize sshd config with options actually supported in OpenSSH 2.9.9
#
-logmsg 'generating ssh server config file...' if($verbose);
+logmsg "generating ssh server config file...\n" if($verbose);
@cfgarr = ();
push @cfgarr, '# This is a generated file. Do not edit.';
push @cfgarr, "# $sshdverstr sshd configuration file for curl testing";
@@ -550,6 +577,11 @@ push @cfgarr, "AuthorizedKeysFile2 $clipubkeyf_config";
push @cfgarr, "HostKey $hstprvkeyf_config";
if ($sshdid !~ /OpenSSH-Windows/) {
push @cfgarr, "PidFile $pidfile_config";
+ push @cfgarr, '#';
+}
+if(($sshdid =~ /OpenSSH/) && ($sshdvernum >= 880)) {
+ push @cfgarr, 'HostKeyAlgorithms +ssh-rsa';
+ push @cfgarr, 'PubkeyAcceptedKeyTypes +ssh-rsa';
}
push @cfgarr, '#';
push @cfgarr, "Port $port";
@@ -590,9 +622,9 @@ push @cfgarr, '#';
#***************************************************************************
# Write out initial sshd configuration file for curl's tests
#
-$error = dump_array($sshdconfig, @cfgarr);
+$error = dump_array(pp($sshdconfig), @cfgarr);
if($error) {
- logmsg $error;
+ logmsg "$error\n";
exit 1;
}
@@ -608,19 +640,19 @@ sub sshd_supports_opt {
($sshdid =~ /SunSSH/)) {
# ssh daemon supports command line options -t -f and -o
$err = grep /((Unsupported)|(Bad configuration)|(Deprecated)) option.*$option/,
- qx("$sshd" -t -f $sshdconfig -o "$option=$value" 2>&1);
+ `\"$sshd\" -t -f $sshdconfig_abs -o \"$option=$value\" 2>&1`;
return !$err;
}
if(($sshdid =~ /OpenSSH/) && ($sshdvernum >= 299)) {
# ssh daemon supports command line options -t and -f
- $err = dump_array($sshdconfig, (@cfgarr, "$option $value"));
+ $err = dump_array(pp($sshdconfig), (@cfgarr, "$option $value"));
if($err) {
- logmsg $err;
+ logmsg "$err\n";
return 0;
}
$err = grep /((Unsupported)|(Bad configuration)|(Deprecated)) option.*$option/,
- qx("$sshd" -t -f $sshdconfig 2>&1);
- unlink $sshdconfig;
+ `\"$sshd\" -t -f $sshdconfig_abs 2>&1`;
+ unlink pp($sshdconfig);
return !$err;
}
return 0;
@@ -694,7 +726,7 @@ push @cfgarr, '#';
#
if(sshd_supports_opt('AddressFamily','any')) {
# Address family must be specified before ListenAddress
- splice @cfgarr, 14, 0, 'AddressFamily any';
+ splice @cfgarr, 11, 0, 'AddressFamily any';
}
if(sshd_supports_opt('Compression','no')) {
push @cfgarr, 'Compression no';
@@ -752,9 +784,9 @@ push @cfgarr, '#';
#***************************************************************************
# Write out resulting sshd configuration file for curl's tests
#
-$error = dump_array($sshdconfig, @cfgarr);
+$error = dump_array(pp($sshdconfig), @cfgarr);
if($error) {
- logmsg $error;
+ logmsg "$error\n";
exit 1;
}
@@ -762,8 +794,8 @@ if($error) {
#***************************************************************************
# Verify that sshd actually supports our generated configuration file
#
-if(system "\"$sshd\" -t -f $sshdconfig > $sshdlog 2>&1") {
- logmsg "sshd configuration file $sshdconfig failed verification";
+if(system "\"$sshd\" -t -f $sshdconfig_abs > $sshdlog 2>&1") {
+ logmsg "sshd configuration file $sshdconfig failed verification\n";
display_sshdlog();
display_sshdconfig();
exit 1;
@@ -773,15 +805,15 @@ if(system "\"$sshd\" -t -f $sshdconfig > $sshdlog 2>&1") {
#***************************************************************************
# Generate ssh client host key database file for curl's tests
#
-if((! -e $knownhosts) || (! -s $knownhosts)) {
- logmsg 'generating ssh client known hosts file...' if($verbose);
- unlink($knownhosts);
- if(open(RSAKEYFILE, "<$hstpubkeyf")) {
- my @rsahostkey = do { local $/ = ' '; <RSAKEYFILE> };
- if(close(RSAKEYFILE)) {
- if(open(KNOWNHOSTS, ">$knownhosts")) {
- print KNOWNHOSTS "$listenaddr ssh-rsa $rsahostkey[1]\n";
- if(!close(KNOWNHOSTS)) {
+if((! -e pp($knownhosts)) || (! -s pp($knownhosts))) {
+ logmsg "generating ssh client known hosts file...\n" if($verbose);
+ unlink(pp($knownhosts));
+ if(open(my $rsakeyfile, "<", pp($hstpubkeyf))) {
+ my @rsahostkey = do { local $/ = ' '; <$rsakeyfile> };
+ if(close($rsakeyfile)) {
+ if(open(my $knownhostsh, ">", pp($knownhosts))) {
+ print $knownhostsh "$listenaddr ssh-rsa $rsahostkey[1]\n";
+ if(!close($knownhostsh)) {
$error = "Error: cannot close file $knownhosts";
}
}
@@ -797,7 +829,7 @@ if((! -e $knownhosts) || (! -s $knownhosts)) {
$error = "Error: cannot read file $hstpubkeyf";
}
if($error) {
- logmsg $error;
+ logmsg "$error\n";
exit 1;
}
}
@@ -806,20 +838,24 @@ if((! -e $knownhosts) || (! -s $knownhosts)) {
#***************************************************************************
# Convert paths for curl's tests running on Windows using Cygwin OpenSSH
#
-my $identity_config = abs_path("$path/$identity");
-my $knownhosts_config = abs_path("$path/$knownhosts");
-
-if (pathhelp::os_is_win()) {
+my $identity_config;
+my $knownhosts_config;
+if ($sshdid =~ /OpenSSH-Windows/) {
+ # Ensure to use native Windows paths with OpenSSH for Windows
+ $identity_config = pathhelp::sys_native_abs_path(pp($identity));
+ $knownhosts_config = pathhelp::sys_native_abs_path(pp($knownhosts));
+}
+elsif (pathhelp::os_is_win()) {
# Ensure to use MinGW/Cygwin paths
$identity_config = pathhelp::build_sys_abs_path($identity_config);
$knownhosts_config = pathhelp::build_sys_abs_path($knownhosts_config);
}
-if ($sshdid =~ /OpenSSH-Windows/) {
- # Ensure to use native Windows paths with OpenSSH for Windows
- $identity_config = pathhelp::sys_native_abs_path($identity);
- $knownhosts_config = pathhelp::sys_native_abs_path($knownhosts);
+else {
+ $identity_config = abs_path(pp($identity));
+ $knownhosts_config = abs_path(pp($knownhosts));
}
+
#***************************************************************************
# ssh client configuration file options we might use and version support
#
@@ -900,7 +936,7 @@ if ($sshdid =~ /OpenSSH-Windows/) {
#***************************************************************************
# Initialize ssh config with options actually supported in OpenSSH 2.9.9
#
-logmsg 'generating ssh client config file...' if($verbose);
+logmsg "generating ssh client config file...\n" if($verbose);
@cfgarr = ();
push @cfgarr, '# This is a generated file. Do not edit.';
push @cfgarr, "# $sshverstr ssh client configuration file for curl testing";
@@ -1056,9 +1092,9 @@ push @cfgarr, '#';
#***************************************************************************
# Write out resulting ssh client configuration file for curl's tests
#
-$error = dump_array($sshconfig, @cfgarr);
+$error = dump_array(pp($sshconfig), @cfgarr);
if($error) {
- logmsg $error;
+ logmsg "$error\n";
exit 1;
}
@@ -1066,7 +1102,7 @@ if($error) {
#***************************************************************************
# Initialize client sftp config with options actually supported.
#
-logmsg 'generating sftp client config file...' if($verbose);
+logmsg "generating sftp client config file...\n" if($verbose);
splice @cfgarr, 1, 1, "# $sshverstr sftp client configuration file for curl testing";
#
for(my $i = scalar(@cfgarr) - 1; $i > 0; $i--) {
@@ -1084,9 +1120,9 @@ for(my $i = scalar(@cfgarr) - 1; $i > 0; $i--) {
#***************************************************************************
# Write out resulting sftp client configuration file for curl's tests
#
-$error = dump_array($sftpconfig, @cfgarr);
+$error = dump_array(pp($sftpconfig), @cfgarr);
if($error) {
- logmsg $error;
+ logmsg "$error\n";
exit 1;
}
@cfgarr = ();
@@ -1095,12 +1131,12 @@ if($error) {
#***************************************************************************
# Generate client sftp commands batch file for sftp server verification
#
-logmsg 'generating sftp client commands file...' if($verbose);
+logmsg "generating sftp client commands file...\n" if($verbose);
push @cfgarr, 'pwd';
push @cfgarr, 'quit';
-$error = dump_array($sftpcmds, @cfgarr);
+$error = dump_array(pp($sftpcmds), @cfgarr);
if($error) {
- logmsg $error;
+ logmsg "$error\n";
exit 1;
}
@cfgarr = ();
@@ -1108,18 +1144,18 @@ if($error) {
#***************************************************************************
# Prepare command line of ssh server daemon
#
-my $cmd = "\"$sshd\" -e -D -f $sshdconfig > $sshdlog 2>&1";
-logmsg "SCP/SFTP server listening on port $port" if($verbose);
-logmsg "RUN: $cmd" if($verbose);
+my $cmd = "\"$sshd\" -e -D -f $sshdconfig_abs > $sshdlog 2>&1";
+logmsg "SCP/SFTP server listening on port $port\n" if($verbose);
+logmsg "RUN: $cmd\n" if($verbose);
#***************************************************************************
# Start the ssh server daemon on Windows without forking it
#
if ($sshdid =~ /OpenSSH-Windows/) {
# Fake pidfile for ssh server on Windows.
- if(open(OUT, ">$pidfile")) {
- print OUT $$ . "\n";
- close(OUT);
+ if(open(my $out, ">", "$pidfile")) {
+ print $out $$ . "\n";
+ close($out);
}
# Flush output.
@@ -1139,24 +1175,25 @@ if ($sshdid =~ /OpenSSH-Windows/) {
#***************************************************************************
# Start the ssh server daemon without forking it
#
-my $rc = system($cmd);
+# "exec" avoids the shell process sticking around
+my $rc = system("exec " . $cmd);
if($rc == -1) {
- logmsg "\"$sshd\" failed with: $!";
+ logmsg "\"$sshd\" failed with: $!\n";
}
elsif($rc & 127) {
- logmsg sprintf("\"$sshd\" died with signal %d, and %s coredump",
+ logmsg sprintf("\"$sshd\" died with signal %d, and %s coredump\n",
($rc & 127), ($rc & 128)?'a':'no');
}
elsif($verbose && ($rc >> 8)) {
- logmsg sprintf("\"$sshd\" exited with %d", $rc >> 8);
+ logmsg sprintf("\"$sshd\" exited with %d\n", $rc >> 8);
}
#***************************************************************************
# Clean up once the server has stopped
#
-unlink($hstprvkeyf, $hstpubkeyf, $hstpubmd5f, $hstpubsha256f,
- $cliprvkeyf, $clipubkeyf, $knownhosts,
- $sshdconfig, $sshconfig, $sftpconfig);
+unlink(pp($hstprvkeyf), pp($hstpubkeyf), pp($hstpubmd5f), pp($hstpubsha256f),
+ pp($cliprvkeyf), pp($clipubkeyf), pp($knownhosts),
+ pp($sshdconfig), pp($sshconfig), pp($sftpconfig));
exit 0;
diff --git a/tests/stunnel.pem b/tests/stunnel.pem
index 2a059417c..b7dd1e879 100644
--- a/tests/stunnel.pem
+++ b/tests/stunnel.pem
@@ -1,172 +1,165 @@
-#
-# This file contains a private key and a certificate used for stunnel.
-# The certificate contains a number of extensions essentially being
-# used in the 509 test. The certificate has been generated using
-# openssl with the parameters listed below up to the line
-# contain [something], after that you find the result.
-#
-#
extensions = x509v3
[ x509v3 ]
-subjectAltName = DNS:localhost
-nsCertType = server
-nsComment = "CURL stunnel server test certificate"
-keyUsage = digitalSignature,keyEncipherment
+subjectAltName = DNS:localhost
+keyUsage = keyEncipherment,digitalSignature,keyAgreement
extendedKeyUsage = serverAuth
-basicConstraints = CA:false
subjectKeyIdentifier = hash
-subjectInfoAccess = AD_DVCS;URI:"https://localhost:8433/509"
-authorityInfoAccess = AD_DVCS;URI:"https://localhost:8433/509"
+authorityKeyIdentifier = keyid
+basicConstraints = CA:false
+authorityInfoAccess = @issuer_info
+crlDistributionPoints = @crl_info
+
+[ crl_ext ]
+authorityKeyIdentifier = keyid:always
+authorityInfoAccess = @issuer_info
+
+[ issuer_info ]
+caIssuers;URI.0 = http://test.curl.se/ca/EdelCurlRoot.cer
+
+[ crl_info ]
+URI.0 = http://test.curl.se/ca/EdelCurlRoot.crl
+
[ req ]
-default_bits = 1234
+default_bits = 12048
distinguished_name = req_DN
-default_md = sha1
-string_mask = pkix
+default_md = sha256
+string_mask = utf8only
[ req_DN ]
-countryName = "1. Country Name (2 letter code)"
-countryName_value = SE
-stateOrProvinceName = "2. State or Province Name (full name) "
-stateOrProvinceName_value = Solna
-localityName = "3. Locality Name (eg, city) "
-localityName_value = Mooo
-0.organizationName = "4. Organization Name (eg, company) "
-0.organizationName_value = Haxx
-organizationalUnitName = "5. Organizational Unit Name (eg, section) "
-organizationalUnitName_value = Coolx
-commonName = "6. Common Name (eg, FQDN) "
-commonName_value = "storbror"
-1.commonName = "6. Common Name (eg, FQDN) "
-1.commonName_value = "localhost"
+countryName = "Country Name is Northern Nowhere"
+countryName_value = NN
+organizationName = "Organization Name"
+organizationName_value = Edel Curl Arctic Illudium Research Cloud
+commonName = "Common Name"
+commonName_value = localhost
+
[something]
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEA4m+wAdU3ml4EGud+/rx3ZY9VnNIfRZo6yDGogOk/Pg1NM7zo
-+cXsRhQZuFNskxOgiYv9vTLJCocPXGJBRhosnCkUXypbaismZLGXBxyvUNvI4cNi
-/icPnq9RHwWCbX9UpSn6nsjcVyHacQeHEza8pC5MnFDC8tTTy3rCpWe2LKSp3X6g
-E4vKRiLFbXAZshrtk8wKiRuDuiNhxUyYcVs3s5+Il8Y9yu/kGkY6U15SizO+o224
-kfOHL6W9Ut4l2xY7aRZLWhqjyihlaHSLFEiLkR9fPMVDTOF6j/g2fFAjNePw6+9Y
-VbVq0PQF1cY0ew6wMNvu7cVLZo+xz5toebOH4wIDAQABAoIBAGLf1CIowVvVm8NH
-vIttLlGZkg+lLOSOoQZTsLmBoAzvb/ucjLqsMyyykDyNqQZb9qi5CTY5W9IOAaYc
-fVYoDbyur2eSrlIgv2YOqd0AKImNPx1d3PcPhWGMOkbqd/ZqOELansYA/T3K2YCr
-gc7hAuRKF0fWeBni1wyt8Rqau9Cn0AK/aAf/Fn28bCaS5DrkqvsM2wOIRWelGgCM
-3zfn+RbhcLbBPIyP6iC+8Gm39pK8JZznJXC0rhN05edvh0+ILlB7lMJ4t5lnLSxF
-vsfkxLGl5pMXWthJ0VYl+H5JIsD+7+dc45HjX21GLs6eTW0hMxPcrqaNlWgQPMxG
-DQNriPECgYEA8tfVQiyzT7rM2HI562BlV5b0PEafq2F7WAzNWMGiBxxRUpMnAtmn
-VVsWiRrHch4Y4nlbmjvQDhrvDOzpGuEPAi+FtePk23y87q8lB8VjOSDR86TPvSXK
-QqMDZ8ffYvRIh7MKYO8gvIYrjMEDeSQNzGxiyw3e0EIGuuQt+42t8JkCgYEA7rRL
-4sl3fl/npxacrtFNnqZP+R/KKBbdbeOgJPDPknMfzd6/B5Pyznz6dG3N3QwivPPF
-uAjPgqI8Pt+7SFW8Rw7XRVWZP9fZGPWrDdqdP/0lzDLYmmHXICqCVQXQapKofZbI
-HfV0HZSGuJtEiLG3bzjQiQx5jJlXtegMHHpMfdsCgYAzVrvIDKkv3t71l1h1UWC7
-XrdtksSot6ga2kIDVJRLiooKuf9SU+9TVTlzbMzjbEd4gY2DEsgOY1VMVz2EqDXD
-EYbkCDTWzg0nLLHYbbtnVW/tYVdltnqHEe1jYFbylZBL1+cGzScPlBHa5Oc2EhA0
-umk8YkdLodnIYvrxpmcyaQKBgQCd6UJGblcRkCp0e939PFNn/8fqG6ClsrKbjrkT
-lwcKcAR7Mb8YKUS4Wy9otHc6o1ubunxzScjVN7Q5N9LygF1EeMnqgT0XYhipjWOy
-j4v1l+dYVc67Gryw984upuEAj7LNGmGaiBVfuDEDkRvefgrGlkRGVa1XWN4QZckV
-UcamfwKBgQDO9xGun8Q97KonBRih4aNBM+89/8/deZNPAc8MAImzFHyTMNTD06C/
-3wnJwMiyNbZEUfKavapNz3+oe0fXMbgjfEypbaP7jKHSxr2tKwJV+MK1RVF4Sd3l
-ou6XtlnToLp/LO1X3E/IcYameT5VLi/4OyFOMKe9K0Woxvhz42PDww==
------END RSA PRIVATE KEY-----
+# The key
+# the certificate
+# some dhparam
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCrCrAD0Hb+Xs4V
+3mHV45FvfNa7yiaOeL4mNdGmWfHVPFU+CSzsoNSvDjxaorWweFGVYoCAcchOn1lZ
+k0ASsqnOss0Xi58n8+PPI3gG0gYjX5sg7EJ3Zq2kXoK0TZRy6hNkcvzLgyzXoYv1
+LkzTwYiyyJgZX++Y/GKAs2fMHyP8XzjNgm4tltk1k/4pomllwN9Fqz+sFxgAgEq3
+ybq4Xym7xKwWl8xXNBDJNmVsPtiJRcilQoR8Xs0a6PE+VbMhD9A2E/LEL7lzQfqH
+qtxE1mSW5FpQ+Uqf4KLnafStWs86IOWnCeLP6BmhAK6ouyICNFyzz7UkTHa/renx
+uNOGun2TAgMBAAECggEAH0BsKb5Ax7h90jwYRzL141d9isFkaxq/r46c2FbN24bT
+EmstxKycP8ILoAnjxbMuQOvHC/D+RvNRqY7Aocn4Qdakp50wvuWOpc3Ww/RC/9qb
+pxfUCyn9Jy/HlPcp3RdM5MknzG2S13Fid7F2gyh0+CmztMs1JZBT1S0ylXbJJfbY
+1pdlHcf9oEbYo36vGd9rtJHAFzsFfwua0idl76XYuOnR3bpOkHl1B5cJ8jpOliPv
+VTmzn0cIgAmk7IByHHqGQ0u30PFiElI9kEbkKWoxAM1hq1pFU58jQhvp0ZkjVENL
+bSFB2B4DbyosxPlbUgvJCN4B7nclqzYqBdrrk6/ZLQKBgQC1lDrPSGIGXLwvkZYS
+xc0wtaCC7u6m7zV8rzh5HGcEoVvtmya/VyoZR8KGIpSor8COIkZqFtan6C77C3MH
+wClbu2Kn3FkGb76D5U2Xwl38zepzjn8Z5qXc3bZfccrsDY1gXPicgsmcKUY9xV5/
+T0RjESDKB+xxkJpCjia6klm2NQKBgQDxJNuqB6frDYKaj7mW/rvyHqkeT94J6eDY
+BcMZVKeHRNWcBMOvJDChVmpsCjJPOWHhHOlAE755NxWn8wpgyiUcac3BiysMgvTT
+pyH8UVWaP/DWYOfpuhtcLPkIjKnPijOvshpyWBxfXNIejiovoT6E3IXKOxr5g5yq
+U/9a5+I9pwKBgDyJG4YpkoyedBrDxa2ihkL7+nRMZgH/c+yKmiA+aNXxWa2AcU2P
+KLje5KpFcxw948s/AAy0aoH19Vu6uHHYDbHIah6eZouvy2s7kj/LC/yRRd2anyMq
+cxeMTxXI4ScLaZu7wyKis8Y9OG61k0iMS7dfaXgRZjGCTPttWtoOmpwVAoGAd2k+
+EXuLDl15UBpd18S6wxGlw2nfVN9oxPBNhUyjTNusP38oe6EbJ7mIJ4oBEbQjoPrV
+EjL0vkelxK4YdIeFSwWlqvLEVYS/wdNgg/auwhxpoW8JSHctNz7Z7v7g0/Hm2FkE
+uZyiKCLptdHGWCGruNUOt27/U5F10e6YY6ayJL8CgYEAoE/ddHIlrKFzcZ0cu47R
+ky4D4x32ceC2au4eGPLMDItPjceXe8I6zgB5P8/U5U3PRw5oWabpAf5lAcRwa12c
+23xgy9O5QNlyps/rAdnVjwxqGwEd5E2LrZ2+JDflPRGunx2VO5v9CxXvsxu9F3Rj
+tREtebHe2H7u5jNsIQArnRI=
+-----END PRIVATE KEY-----
Certificate:
Data:
Version: 3 (0x2)
- Serial Number: 17862059579548371559 (0xf7e2c88ce3d80a67)
- Signature Algorithm: sha256WithRSAEncryption
- Issuer: C=SE, ST=Solna, L=Mooo, O=Haxx, OU=Coolx, CN=storbror, CN=localhost
+ Serial Number: 16717980999635 (0xf3475519fd3)
+ Signature Algorithm: sha256WithRSAEncryption
+ Issuer:
+ countryName = NN
+ organizationName = Edel Curl Arctic Illudium Research Cloud
+ commonName = Northern Nowhere Trust Anchor
Validity
- Not Before: Aug 31 23:39:18 2018 GMT
- Not After : Aug 28 23:39:18 2028 GMT
- Subject: C=SE, ST=Solna, L=Mooo, O=Haxx, OU=Coolx, CN=storbror, CN=localhost
+ Not Before: Dec 23 12:21:39 2022 GMT
+ Not After : Mar 11 12:21:39 2031 GMT
+ Subject:
+ countryName = NN
+ organizationName = Edel Curl Arctic Illudium Research Cloud
+ commonName = localhost
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
- 00:e2:6f:b0:01:d5:37:9a:5e:04:1a:e7:7e:fe:bc:
- 77:65:8f:55:9c:d2:1f:45:9a:3a:c8:31:a8:80:e9:
- 3f:3e:0d:4d:33:bc:e8:f9:c5:ec:46:14:19:b8:53:
- 6c:93:13:a0:89:8b:fd:bd:32:c9:0a:87:0f:5c:62:
- 41:46:1a:2c:9c:29:14:5f:2a:5b:6a:2b:26:64:b1:
- 97:07:1c:af:50:db:c8:e1:c3:62:fe:27:0f:9e:af:
- 51:1f:05:82:6d:7f:54:a5:29:fa:9e:c8:dc:57:21:
- da:71:07:87:13:36:bc:a4:2e:4c:9c:50:c2:f2:d4:
- d3:cb:7a:c2:a5:67:b6:2c:a4:a9:dd:7e:a0:13:8b:
- ca:46:22:c5:6d:70:19:b2:1a:ed:93:cc:0a:89:1b:
- 83:ba:23:61:c5:4c:98:71:5b:37:b3:9f:88:97:c6:
- 3d:ca:ef:e4:1a:46:3a:53:5e:52:8b:33:be:a3:6d:
- b8:91:f3:87:2f:a5:bd:52:de:25:db:16:3b:69:16:
- 4b:5a:1a:a3:ca:28:65:68:74:8b:14:48:8b:91:1f:
- 5f:3c:c5:43:4c:e1:7a:8f:f8:36:7c:50:23:35:e3:
- f0:eb:ef:58:55:b5:6a:d0:f4:05:d5:c6:34:7b:0e:
- b0:30:db:ee:ed:c5:4b:66:8f:b1:cf:9b:68:79:b3:
- 87:e3
+ 00:ab:0a:b0:03:d0:76:fe:5e:ce:15:de:61:d5:e3:
+ 91:6f:7c:d6:bb:ca:26:8e:78:be:26:35:d1:a6:59:
+ f1:d5:3c:55:3e:09:2c:ec:a0:d4:af:0e:3c:5a:a2:
+ b5:b0:78:51:95:62:80:80:71:c8:4e:9f:59:59:93:
+ 40:12:b2:a9:ce:b2:cd:17:8b:9f:27:f3:e3:cf:23:
+ 78:06:d2:06:23:5f:9b:20:ec:42:77:66:ad:a4:5e:
+ 82:b4:4d:94:72:ea:13:64:72:fc:cb:83:2c:d7:a1:
+ 8b:f5:2e:4c:d3:c1:88:b2:c8:98:19:5f:ef:98:fc:
+ 62:80:b3:67:cc:1f:23:fc:5f:38:cd:82:6e:2d:96:
+ d9:35:93:fe:29:a2:69:65:c0:df:45:ab:3f:ac:17:
+ 18:00:80:4a:b7:c9:ba:b8:5f:29:bb:c4:ac:16:97:
+ cc:57:34:10:c9:36:65:6c:3e:d8:89:45:c8:a5:42:
+ 84:7c:5e:cd:1a:e8:f1:3e:55:b3:21:0f:d0:36:13:
+ f2:c4:2f:b9:73:41:fa:87:aa:dc:44:d6:64:96:e4:
+ 5a:50:f9:4a:9f:e0:a2:e7:69:f4:ad:5a:cf:3a:20:
+ e5:a7:09:e2:cf:e8:19:a1:00:ae:a8:bb:22:02:34:
+ 5c:b3:cf:b5:24:4c:76:bf:ad:e9:f1:b8:d3:86:ba:
+ 7d:93
Exponent: 65537 (0x10001)
X509v3 extensions:
- X509v3 Subject Alternative Name:
+ X509v3 Subject Alternative Name:
DNS:localhost
- Netscape Cert Type:
- SSL Server
- Netscape Comment:
- CURL stunnel server test certificate
- X509v3 Key Usage:
- Digital Signature, Key Encipherment
- X509v3 Extended Key Usage:
+ X509v3 Key Usage:
+ Digital Signature, Key Encipherment, Key Agreement
+ X509v3 Extended Key Usage:
TLS Web Server Authentication
- X509v3 Basic Constraints:
+ X509v3 Subject Key Identifier:
+ 9C:97:B0:3D:B3:50:B1:F6:D4:71:E2:EB:CB:80:EA:93:7C:98:CC:72
+ X509v3 Authority Key Identifier:
+ 87:CB:B1:33:2E:C1:67:7E:71:E3:E5:2B:4C:4D:A4:B3:6E:D2:5B:A9
+ X509v3 Basic Constraints:
CA:FALSE
- X509v3 Subject Key Identifier:
- 5D:A5:DB:5A:C8:6D:31:A6:B0:E3:4D:47:50:AA:87:A9:B2:DE:9F:37
- Subject Information Access:
- ad dvcs - URI:https://localhost:8433/509
-
- Authority Information Access:
- ad dvcs - URI:https://localhost:8433/509
-
+ Authority Information Access:
+ CA Issuers - URI:http://test.curl.se/ca/EdelCurlRoot.cer
+ X509v3 CRL Distribution Points:
+ Full Name:
+ URI:http://test.curl.se/ca/EdelCurlRoot.crl
Signature Algorithm: sha256WithRSAEncryption
- 63:26:72:df:c4:68:af:f1:30:60:4e:ac:94:bd:37:3e:c4:1f:
- 6b:43:6e:0f:1c:67:49:f4:fb:19:83:23:b6:75:46:a0:84:bd:
- 8b:61:21:00:05:6b:d6:09:16:94:8f:5b:9d:98:98:d6:1e:86:
- 23:26:1e:e8:39:ac:0a:89:ea:17:b5:4f:60:20:9a:2b:4a:d4:
- 9f:4e:3d:d4:ac:05:db:25:94:56:e3:87:13:ea:ab:83:57:18:
- ff:26:e3:46:0c:e6:49:7e:74:2e:77:98:54:52:30:ea:6f:58:
- 35:dc:63:fb:e4:a2:c3:12:87:dd:e9:2a:18:5c:9c:cf:a4:d3:
- 58:7f:d0:50:50:0f:b9:b7:cb:a8:d9:bd:b8:7c:e4:29:d5:f3:
- fd:6f:3f:ea:fc:0f:21:3f:ad:2f:ac:3c:28:e3:74:87:43:a9:
- f0:46:81:4b:c8:a5:75:50:5b:e2:d5:75:0a:98:af:2c:6d:6b:
- 6a:cc:c6:37:5f:04:52:c4:d8:6a:a0:f6:99:76:c3:3b:3b:50:
- c8:bc:ea:50:04:a1:c0:54:82:b4:2f:09:b8:6e:ac:cc:64:12:
- ce:b8:24:7a:5a:e5:f5:e5:79:9f:28:da:a2:11:45:f5:2a:cb:
- e3:b0:96:6a:ac:2b:d3:02:01:21:6d:38:ef:52:60:5e:50:b1:
- 25:e5:4f:69
+ Signature Value:
+ 0b:8a:ed:6a:87:fa:71:15:88:25:58:85:1b:4a:09:bf:43:00:
+ 35:93:78:0d:72:14:30:51:e2:93:83:a1:da:1b:2f:a9:31:ae:
+ b7:c7:4c:72:c2:5e:32:24:f1:96:93:70:d5:3f:b5:85:80:13:
+ 75:32:cf:0e:f8:5d:c4:a2:29:84:43:2c:75:81:26:12:6a:a0:
+ cb:7b:57:c1:92:78:85:08:fa:64:50:c2:7b:83:02:4d:79:13:
+ bc:61:64:4d:b8:6b:d5:f1:84:6b:12:5c:69:90:ad:40:47:c0:
+ ed:dd:ea:8a:66:7e:87:85:19:aa:89:d3:3c:08:72:08:a1:4d:
+ 63:60:5b:9b:17:9e:00:12:a1:00:52:ca:78:01:88:18:c7:ed:
+ 5b:c7:e4:d9:eb:bd:3f:af:92:53:3f:fe:58:57:0d:fc:f4:7b:
+ 7b:a2:4f:e9:b9:5c:b5:a4:52:50:b4:56:5a:44:8e:d9:d0:ed:
+ de:8f:7e:ac:1c:58:76:5b:a8:79:c9:95:ab:85:1d:db:4c:13:
+ 82:4a:a5:41:1b:29:f5:d3:96:df:80:d1:1e:00:7d:ba:35:94:
+ 57:81:e1:08:2a:81:6b:1c:30:50:37:01:1a:0e:26:4f:6b:ed:
+ c9:50:17:37:2b:33:3f:68:fe:c6:f0:21:8c:e7:b2:79:55:f2:
+ 42:bd:2f:b0
-----BEGIN CERTIFICATE-----
-MIIEhzCCA2+gAwIBAgIJAPfiyIzj2ApnMA0GCSqGSIb3DQEBCwUAMHIxCzAJBgNV
-BAYTAlNFMQ4wDAYDVQQIEwVTb2xuYTENMAsGA1UEBxMETW9vbzENMAsGA1UEChME
-SGF4eDEOMAwGA1UECxMFQ29vbHgxETAPBgNVBAMTCHN0b3Jicm9yMRIwEAYDVQQD
-Ewlsb2NhbGhvc3QwHhcNMTgwODMxMjMzOTE4WhcNMjgwODI4MjMzOTE4WjByMQsw
-CQYDVQQGEwJTRTEOMAwGA1UECBMFU29sbmExDTALBgNVBAcTBE1vb28xDTALBgNV
-BAoTBEhheHgxDjAMBgNVBAsTBUNvb2x4MREwDwYDVQQDEwhzdG9yYnJvcjESMBAG
-A1UEAxMJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
-4m+wAdU3ml4EGud+/rx3ZY9VnNIfRZo6yDGogOk/Pg1NM7zo+cXsRhQZuFNskxOg
-iYv9vTLJCocPXGJBRhosnCkUXypbaismZLGXBxyvUNvI4cNi/icPnq9RHwWCbX9U
-pSn6nsjcVyHacQeHEza8pC5MnFDC8tTTy3rCpWe2LKSp3X6gE4vKRiLFbXAZshrt
-k8wKiRuDuiNhxUyYcVs3s5+Il8Y9yu/kGkY6U15SizO+o224kfOHL6W9Ut4l2xY7
-aRZLWhqjyihlaHSLFEiLkR9fPMVDTOF6j/g2fFAjNePw6+9YVbVq0PQF1cY0ew6w
-MNvu7cVLZo+xz5toebOH4wIDAQABo4IBHjCCARowFAYDVR0RBA0wC4IJbG9jYWxo
-b3N0MBEGCWCGSAGG+EIBAQQEAwIGQDAzBglghkgBhvhCAQ0EJhYkQ1VSTCBzdHVu
-bmVsIHNlcnZlciB0ZXN0IGNlcnRpZmljYXRlMAsGA1UdDwQEAwIFoDATBgNVHSUE
-DDAKBggrBgEFBQcDATAJBgNVHRMEAjAAMB0GA1UdDgQWBBRdpdtayG0xprDjTUdQ
-qoepst6fNzA2BggrBgEFBQcBCwQqMCgwJgYIKwYBBQUHMASGGmh0dHBzOi8vbG9j
-YWxob3N0Ojg0MzMvNTA5MDYGCCsGAQUFBwEBBCowKDAmBggrBgEFBQcwBIYaaHR0
-cHM6Ly9sb2NhbGhvc3Q6ODQzMy81MDkwDQYJKoZIhvcNAQELBQADggEBAGMmct/E
-aK/xMGBOrJS9Nz7EH2tDbg8cZ0n0+xmDI7Z1RqCEvYthIQAFa9YJFpSPW52YmNYe
-hiMmHug5rAqJ6he1T2AgmitK1J9OPdSsBdsllFbjhxPqq4NXGP8m40YM5kl+dC53
-mFRSMOpvWDXcY/vkosMSh93pKhhcnM+k01h/0FBQD7m3y6jZvbh85CnV8/1vP+r8
-DyE/rS+sPCjjdIdDqfBGgUvIpXVQW+LVdQqYryxta2rMxjdfBFLE2Gqg9pl2wzs7
-UMi86lAEocBUgrQvCbhurMxkEs64JHpa5fXleZ8o2qIRRfUqy+OwlmqsK9MCASFt
-OO9SYF5QsSXlT2k=
+MIIERDCCAyygAwIBAgIGDzR1UZ/TMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNVBAYT
+Ak5OMTEwLwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNo
+IENsb3VkMSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjAe
+Fw0yMjEyMjMxMjIxMzlaFw0zMTAzMTExMjIxMzlaMFQxCzAJBgNVBAYTAk5OMTEw
+LwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3Vk
+MRIwEAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQCrCrAD0Hb+Xs4V3mHV45FvfNa7yiaOeL4mNdGmWfHVPFU+CSzsoNSvDjxa
+orWweFGVYoCAcchOn1lZk0ASsqnOss0Xi58n8+PPI3gG0gYjX5sg7EJ3Zq2kXoK0
+TZRy6hNkcvzLgyzXoYv1LkzTwYiyyJgZX++Y/GKAs2fMHyP8XzjNgm4tltk1k/4p
+omllwN9Fqz+sFxgAgEq3ybq4Xym7xKwWl8xXNBDJNmVsPtiJRcilQoR8Xs0a6PE+
+VbMhD9A2E/LEL7lzQfqHqtxE1mSW5FpQ+Uqf4KLnafStWs86IOWnCeLP6BmhAK6o
+uyICNFyzz7UkTHa/renxuNOGun2TAgMBAAGjggEGMIIBAjAUBgNVHREEDTALggls
+b2NhbGhvc3QwCwYDVR0PBAQDAgOoMBMGA1UdJQQMMAoGCCsGAQUFBwMBMB0GA1Ud
+DgQWBBScl7A9s1Cx9tRx4uvLgOqTfJjMcjAfBgNVHSMEGDAWgBSHy7EzLsFnfnHj
+5StMTaSzbtJbqTAJBgNVHRMEAjAAMEMGCCsGAQUFBwEBBDcwNTAzBggrBgEFBQcw
+AoYnaHR0cDovL3Rlc3QuY3VybC5zZS9jYS9FZGVsQ3VybFJvb3QuY2VyMDgGA1Ud
+HwQxMC8wLaAroCmGJ2h0dHA6Ly90ZXN0LmN1cmwuc2UvY2EvRWRlbEN1cmxSb290
+LmNybDANBgkqhkiG9w0BAQsFAAOCAQEAC4rtaof6cRWIJViFG0oJv0MANZN4DXIU
+MFHik4Oh2hsvqTGut8dMcsJeMiTxlpNw1T+1hYATdTLPDvhdxKIphEMsdYEmEmqg
+y3tXwZJ4hQj6ZFDCe4MCTXkTvGFkTbhr1fGEaxJcaZCtQEfA7d3qimZ+h4UZqonT
+PAhyCKFNY2BbmxeeABKhAFLKeAGIGMftW8fk2eu9P6+SUz/+WFcN/PR7e6JP6blc
+taRSULRWWkSO2dDt3o9+rBxYdluoecmVq4Ud20wTgkqlQRsp9dOW34DRHgB9ujWU
+V4HhCCqBaxwwUDcBGg4mT2vtyVAXNyszP2j+xvAhjOeyeVXyQr0vsA==
-----END CERTIFICATE-----
------BEGIN DH PARAMETERS-----
-MIIBCAKCAQEA5H4005OFRDtVlHgJ5AGLRMAqvc+f4g7fApALq/1qJCwF7xq3POya
-hFr/O+9WtdlaiXLi0tqJzj5Cfv0ChIUcSOD7qBfUpIYcDFqQhYaRexMP6h0Ugk9x
-sIs2tcUfix7xemGLdawkGD041MJW8SK0+iY/s2wIXH/Pp5w7/e/RmTcjTa3QnL8O
-zbyXnZVvCEpDhRefgYrY5lR4SeZHl8+A6qe+M37g9Lai+ASCDuGfiynRW8JqAA3n
-5ozPhlQF3HaHglvEONUM0Qxd5a4jVjTXQYfV+hqvkz/Ykv8rZa8rVjx/bi1sKM66
-+WwPhqnjh31d+nFezqDJC4j0wLmxorDkMwIBAg==
------END DH PARAMETERS----- \ No newline at end of file
diff --git a/tests/symbol-scan.pl b/tests/symbol-scan.pl
index 8efa30791..2b9ac3759 100755
--- a/tests/symbol-scan.pl
+++ b/tests/symbol-scan.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2010 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -66,8 +66,8 @@ my %rem;
# included by it, which *should* be all headers
sub scanenum {
my ($file) = @_;
- open H_IN, "-|", "$Cpreprocessor $i$file" || die "Cannot preprocess $file";
- while ( <H_IN> ) {
+ open my $h_in, "-|", "$Cpreprocessor $i$file" || die "Cannot preprocess $file";
+ while ( <$h_in> ) {
if ( /enum\s+(\S+\s+)?{/ .. /}/ ) {
s/^\s+//;
next unless /^CURL/;
@@ -76,18 +76,18 @@ sub scanenum {
push @syms, $_;
}
}
- close H_IN || die "Error preprocessing $file";
+ close $h_in || die "Error preprocessing $file";
}
sub scanheader {
my ($f)=@_;
- open H, "<$f";
- while(<H>) {
+ open my $h, "<", "$f";
+ while(<$h>) {
if (/^#define ((LIB|)CURL[A-Za-z0-9_]*)/) {
push @syms, $1;
}
}
- close H;
+ close $h;
}
sub scanallheaders {
@@ -105,9 +105,9 @@ sub scanallheaders {
sub checkmanpage {
my ($m) = @_;
- open(M, "<$m");
+ open(my $mh, "<", "$m");
my $line = 1;
- while(<M>) {
+ while(<$mh>) {
# strip off formatting
$_ =~ s/\\f[BPRI]//;
# detect global-looking 'CURL[BLABLA]_*' symbols
@@ -120,7 +120,7 @@ sub checkmanpage {
}
$line++;
}
- close(M);
+ close($mh);
}
sub scanman3dir {
@@ -139,8 +139,8 @@ scanallheaders();
scanman3dir("$root/docs/libcurl");
scanman3dir("$root/docs/libcurl/opts");
-open S, "<$root/docs/libcurl/symbols-in-versions";
-while(<S>) {
+open my $s, "<", "$root/docs/libcurl/symbols-in-versions";
+while(<$s>) {
if(/(^[^ \n]+) +(.*)/) {
my ($sym, $rest)=($1, $2);
if($doc{$sym}) {
@@ -157,7 +157,7 @@ while(<S>) {
}
}
}
-close S;
+close $s;
my $ignored=0;
for my $e (sort @syms) {
@@ -170,11 +170,13 @@ for my $e (sort @syms) {
#
# CURLINC_ - defines for header dual-include prevention, ignore those.
#
+ # CURL_TEMP_ - are defined and *undefined* again within the file
+ #
# *_LAST and *_LASTENTRY are just prefix for the placeholders used for the
# last entry in many enum series.
#
- if($e =~ /(OBSOLETE|^CURL_EXTERN|^CURLINC_|_LAST\z|_LASTENTRY\z)/) {
+ if($e =~ /(OBSOLETE|^CURL_EXTERN|^CURLINC_|_LAST\z|_LASTENTRY\z|^CURL_TEMP_)/) {
$ignored++;
next;
}
diff --git a/tests/testcurl.1 b/tests/testcurl.1
index 75374447b..a4ef0c35a 100644
--- a/tests/testcurl.1
+++ b/tests/testcurl.1
@@ -5,7 +5,7 @@
.\" * | (__| |_| | _ <| |___
.\" * \___|\___/|_| \_\_____|
.\" *
-.\" * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
@@ -22,7 +22,7 @@
.\" *
.\" **************************************************************************
.\"
-.TH testcurl.pl 1 "May 17, 2022" "Curl 7.86.0" "testcurl"
+.TH testcurl.pl 1 "April 26, 2023" "estcurl 8.5.0" testcurl
.SH NAME
testcurl.pl \- (automatically) test curl
diff --git a/tests/testcurl.pl b/tests/testcurl.pl
index acf2c6b06..09b0d98b1 100755
--- a/tests/testcurl.pl
+++ b/tests/testcurl.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -77,7 +77,7 @@ use vars qw($name $email $desc $confopts $runtestopts $setupfile $mktarball
$timestamp $notes);
# version of this script
-$version='2014-11-25';
+$version='2023-03-28';
$fixed=0;
# Determine if we're running from git or a canned copy of curl,
@@ -195,14 +195,14 @@ sub rmtree($) {
sub grepfile($$) {
my ($target, $fn) = @_;
- open(F, $fn) or die;
- while (<F>) {
+ open(my $fh, "<", $fn) or die;
+ while (<$fh>) {
if (/$target/) {
- close(F);
+ close($fh);
return 1;
}
}
- close(F);
+ close($fh);
return 0;
}
@@ -243,14 +243,14 @@ sub get_host_triplet {
my $triplet;
my $configfile = "$pwd/$build/lib/curl_config.h";
- if(-f $configfile && -s $configfile && open(LIBCONFIGH, "<$configfile")) {
- while(<LIBCONFIGH>) {
+ if(-f $configfile && -s $configfile && open(my $libconfigh, "<", "$configfile")) {
+ while(<$libconfigh>) {
if($_ =~ /^\#define\s+OS\s+"*([^"][^"]*)"*\s*/) {
$triplet = $1;
last;
}
}
- close(LIBCONFIGH);
+ close($libconfigh);
}
return $triplet;
}
@@ -261,13 +261,13 @@ if($name && $email && $desc) {
$infixed=4;
$fixed=4;
}
-elsif (open(F, "$setupfile")) {
- while (<F>) {
+elsif (open(my $f, "<", "$setupfile")) {
+ while (<$f>) {
if (/(\w+)=(.*)/) {
eval "\$$1=$2;";
}
}
- close(F);
+ close($f);
$infixed=$fixed;
}
else {
@@ -307,14 +307,14 @@ if (!$confopts) {
if ($fixed < 4) {
$fixed=4;
- open(F, ">$setupfile") or die;
- print F "name='$name'\n";
- print F "email='$email'\n";
- print F "desc='$desc'\n";
- print F "confopts='$confopts'\n";
- print F "notes='$notes'\n";
- print F "fixed='$fixed'\n";
- close(F);
+ open(my $f, ">", "$setupfile") or die;
+ print $f "name='$name'\n";
+ print $f "email='$email'\n";
+ print $f "desc='$desc'\n";
+ print $f "confopts='$confopts'\n";
+ print $f "notes='$notes'\n";
+ print $f "fixed='$fixed'\n";
+ close($f);
}
# Enable picky compiler warnings unless explicitly disabled
@@ -469,15 +469,15 @@ if ($git) {
# generate the build files
logit "invoke autoreconf";
- open(F, "autoreconf -fi 2>&1 |") or die;
- open(LOG, ">$buildlog") or die;
- while (<F>) {
+ open(my $f, "-|", "autoreconf -fi 2>&1") or die;
+ open(my $log, ">", "$buildlog") or die;
+ while (<$f>) {
my $ll = $_;
print $ll;
- print LOG $ll;
+ print $log $ll;
}
- close(F);
- close(LOG);
+ close($f);
+ close($log);
logit "buildconf was successful";
}
@@ -488,8 +488,8 @@ if ($git) {
# Set timestamp to the one in curlver.h if this isn't a git test build.
if ((-f "include/curl/curlver.h") &&
- (open(F, "<include/curl/curlver.h"))) {
- while (<F>) {
+ (open(my $f, "<", "include/curl/curlver.h"))) {
+ while (<$f>) {
chomp;
if ($_ =~ /^\#define\s+LIBCURL_TIMESTAMP\s+\"(.+)\".*$/) {
my $stampstring = $1;
@@ -500,7 +500,7 @@ if ((-f "include/curl/curlver.h") &&
last;
}
}
- close(F);
+ close($f);
}
# Show timestamp we are using for this test build.
@@ -572,21 +572,21 @@ if ($configurebuild) {
if(-f "./libcurl.pc") {
logit_spaced "display libcurl.pc";
- if(open(F, "<./libcurl.pc")) {
- while(<F>) {
+ if(open(my $f, "<", "libcurl.pc")) {
+ while(<$f>) {
my $ll = $_;
print $ll if(($ll !~ /^ *#/) && ($ll !~ /^ *$/));
}
- close(F);
+ close($f);
}
}
logit_spaced "display lib/$confheader";
-open(F, "lib/$confheader") or die "lib/$confheader: $!";
-while (<F>) {
+open(my $f, "<", "lib/$confheader") or die "lib/$confheader: $!";
+while (<$f>) {
print if /^ *#/;
}
-close(F);
+close($f);
if (($have_embedded_ares) &&
(grepfile("^#define USE_ARES", "lib/$confheader"))) {
@@ -595,23 +595,23 @@ if (($have_embedded_ares) &&
if(-f "./ares/libcares.pc") {
logit_spaced "display ares/libcares.pc";
- if(open(F, "<./ares/libcares.pc")) {
- while(<F>) {
+ if(open($f, "<", "ares/libcares.pc")) {
+ while(<$f>) {
my $ll = $_;
print $ll if(($ll !~ /^ *#/) && ($ll !~ /^ *$/));
}
- close(F);
+ close($f);
}
}
if(-f "./ares/ares_build.h") {
logit_spaced "display ares/ares_build.h";
- if(open(F, "<./ares/ares_build.h")) {
- while(<F>) {
+ if(open($f, "<", "ares/ares_build.h")) {
+ while(<$f>) {
my $ll = $_;
print $ll if(($ll =~ /^ *# *define *CARES_/) && ($ll !~ /__CARES_BUILD_H/));
}
- close(F);
+ close($f);
}
}
else {
@@ -620,11 +620,11 @@ if (($have_embedded_ares) &&
$confheader =~ s/curl/ares/;
logit_spaced "display ares/$confheader";
- if(open(F, "ares/$confheader")) {
- while (<F>) {
+ if(open($f, "<", "ares/$confheader")) {
+ while (<$f>) {
print if /^ *#/;
}
- close(F);
+ close($f);
}
print "\n";
@@ -633,17 +633,17 @@ if (($have_embedded_ares) &&
if ($targetos && !$configurebuild) {
logit "$make -f Makefile.$targetos";
- open(F, "$make -f Makefile.$targetos 2>&1 |") or die;
+ open($f, "-|", "$make -f Makefile.$targetos 2>&1") or die;
}
else {
logit "$make";
- open(F, "$make 2>&1 |") or die;
+ open($f, "-|", "$make 2>&1") or die;
}
- while (<F>) {
+ while (<$f>) {
s/$pwd//g;
print;
}
- close(F);
+ close($f);
if (-f "libcares$libext") {
logit "ares is now built successfully (libcares$libext)";
@@ -657,12 +657,12 @@ if (($have_embedded_ares) &&
my $mkcmd = "$make -i" . ($targetos && !$configurebuild ? " $targetos" : "");
logit "$mkcmd";
-open(F, "$mkcmd 2>&1 |") or die;
-while (<F>) {
+open(my $f, "-|", "$mkcmd 2>&1") or die;
+while (<$f>) {
s/$pwd//g;
print;
}
-close(F);
+close($f);
if (-f "lib/libcurl$libext") {
logit "libcurl was created fine (libcurl$libext)";
@@ -681,13 +681,13 @@ else {
if (!$crosscompile || (($extvercmd ne '') && (-x $extvercmd))) {
logit "display curl${binext} --version output";
my $cmd = ($extvercmd ne '' ? $extvercmd.' ' : '')."./src/curl${binext} --version|";
- open(F, $cmd);
- while(<F>) {
+ open($f, "<", $cmd);
+ while(<$f>) {
# strip CR from output on non-win32 platforms (wine on Linux)
s/\r// if ($^O ne 'MSWin32');
print;
}
- close(F);
+ close($f);
}
if ($configurebuild && !$crosscompile) {
@@ -699,15 +699,15 @@ if ($configurebuild && !$crosscompile) {
($host_triplet =~ /([^-]+)-([^-]+)-solaris2(.*)/)) {
chdir "$pwd/$build/docs/examples";
logit_spaced "build examples";
- open(F, "$make -i 2>&1 |") or die;
- open(LOG, ">$buildlog") or die;
- while (<F>) {
+ open($f, "-|", "$make -i 2>&1") or die;
+ open(my $log, ">", "$buildlog") or die;
+ while (<$f>) {
s/$pwd//g;
print;
- print LOG;
+ print $log $_;
}
- close(F);
- close(LOG);
+ close($f);
+ close($log);
chdir "$pwd/$build";
}
# build and run full test suite
@@ -716,15 +716,15 @@ if ($configurebuild && !$crosscompile) {
$o = "TEST_F=\"$runtestopts\" ";
}
logit "$make -k ${o}test-full";
- open(F, "$make -k ${o}test-full 2>&1 |") or die;
- open(LOG, ">$buildlog") or die;
- while (<F>) {
+ open($f, "-|", "$make -k ${o}test-full 2>&1") or die;
+ open(my $log, ">", "$buildlog") or die;
+ while (<$f>) {
s/$pwd//g;
print;
- print LOG;
+ print $log $_;
}
- close(F);
- close(LOG);
+ close($f);
+ close($log);
if (grepfile("^TEST", $buildlog)) {
logit "tests were run";
@@ -746,30 +746,30 @@ else {
($host_triplet =~ /([^-]+)-([^-]+)-android(.*)/)) {
chdir "$pwd/$build/docs/examples";
logit_spaced "build examples";
- open(F, "$make -i 2>&1 |") or die;
- open(LOG, ">$buildlog") or die;
- while (<F>) {
+ open($f, "-|", "$make -i 2>&1") or die;
+ open(my $log, ">", "$buildlog") or die;
+ while (<$f>) {
s/$pwd//g;
print;
- print LOG;
+ print $log $_;
}
- close(F);
- close(LOG);
+ close($f);
+ close($log);
chdir "$pwd/$build";
}
# build test harness programs for selected cross-compiles
if($host_triplet =~ /([^-]+)-([^-]+)-mingw(.*)/) {
chdir "$pwd/$build/tests";
logit_spaced "build test harness";
- open(F, "$make -i 2>&1 |") or die;
- open(LOG, ">$buildlog") or die;
- while (<F>) {
+ open(my $f, "-|", "$make -i 2>&1") or die;
+ open(my $log, ">", "$buildlog") or die;
+ while (<$f>) {
s/$pwd//g;
print;
- print LOG;
+ print $log $_;
}
- close(F);
- close(LOG);
+ close($f);
+ close($log);
chdir "$pwd/$build";
}
logit_spaced "cross-compiling, can't run tests";
diff --git a/tests/testutil.pm b/tests/testutil.pm
new file mode 100644
index 000000000..ece0b6e05
--- /dev/null
+++ b/tests/testutil.pm
@@ -0,0 +1,204 @@
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed 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 module contains miscellaneous functions needed in several parts of
+# the test suite.
+
+package testutil;
+
+use strict;
+use warnings;
+
+BEGIN {
+ use base qw(Exporter);
+
+ our @EXPORT = qw(
+ runclient
+ runclientoutput
+ setlogfunc
+ shell_quote
+ subbase64
+ subnewlines
+ );
+
+ our @EXPORT_OK = qw(
+ clearlogs
+ logmsg
+ );
+}
+
+use MIME::Base64;
+
+use globalconfig qw(
+ $torture
+ $verbose
+);
+
+my $logfunc; # optional reference to function for logging
+my @logmessages; # array holding logged messages
+
+
+#######################################################################
+# Log an informational message
+# If a log callback function was set in setlogfunc, it is called. If not,
+# then the log message is buffered until retrieved by clearlogs.
+#
+# logmsg must only be called by one of the runner_* entry points and functions
+# called by them, or else logs risk being lost, since those are the only
+# functions that know about and will return buffered logs.
+sub logmsg {
+ if(!scalar(@_)) {
+ return;
+ }
+ if(defined $logfunc) {
+ &$logfunc(@_);
+ return;
+ }
+ push @logmessages, @_;
+}
+
+#######################################################################
+# Set the function to use for logging
+sub setlogfunc {
+ ($logfunc)=@_;
+}
+
+#######################################################################
+# Clear the buffered log messages after returning them
+sub clearlogs {
+ my $loglines = join('', @logmessages);
+ undef @logmessages;
+ return $loglines;
+}
+
+
+#######################################################################
+sub subbase64 {
+ my ($thing) = @_;
+
+ # cut out the base64 piece
+ while($$thing =~ s/%b64\[(.*?)\]b64%/%%B64%%/i) {
+ my $d = $1;
+ # encode %NN characters
+ $d =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
+ my $enc = encode_base64($d, "");
+ # put the result into there
+ $$thing =~ s/%%B64%%/$enc/;
+ }
+ # hex decode
+ while($$thing =~ s/%hex\[(.*?)\]hex%/%%HEX%%/i) {
+ # decode %NN characters
+ my $d = $1;
+ $d =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
+ $$thing =~ s/%%HEX%%/$d/;
+ }
+ while($$thing =~ s/%repeat\[(\d+) x (.*?)\]%/%%REPEAT%%/i) {
+ # decode %NN characters
+ my ($d, $n) = ($2, $1);
+ $d =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
+ my $all = $d x $n;
+ $$thing =~ s/%%REPEAT%%/$all/;
+ }
+}
+
+my $prevupdate; # module scope so it remembers the last value
+sub subnewlines {
+ my ($force, $thing) = @_;
+
+ if($force) {
+ # enforce CRLF newline
+ $$thing =~ s/\x0d*\x0a/\x0d\x0a/;
+ return;
+ }
+
+ # When curl is built with Hyper, it gets all response headers delivered as
+ # name/value pairs and curl "invents" the newlines when it saves the
+ # headers. Therefore, curl will always save headers with CRLF newlines
+ # when built to use Hyper. By making sure we deliver all tests using CRLF
+ # as well, all test comparisons will survive without knowing about this
+ # little quirk.
+
+ if(($$thing =~ /^HTTP\/(1.1|1.0|2|3) [1-5][^\x0d]*\z/) ||
+ ($$thing =~ /^(GET|POST|PUT|DELETE) \S+ HTTP\/\d+(\.\d+)?/) ||
+ (($$thing =~ /^[a-z0-9_-]+: [^\x0d]*\z/i) &&
+ # skip curl error messages
+ ($$thing !~ /^curl: \(\d+\) /))) {
+ # enforce CRLF newline
+ $$thing =~ s/\x0d*\x0a/\x0d\x0a/;
+ $prevupdate = 1;
+ }
+ else {
+ if(($$thing =~ /^\n\z/) && $prevupdate) {
+ # if there's a blank link after a line we update, we hope it is
+ # the empty line following headers
+ $$thing =~ s/\x0a/\x0d\x0a/;
+ }
+ $prevupdate = 0;
+ }
+}
+
+#######################################################################
+# Run the application under test and return its return code
+#
+sub runclient {
+ my ($cmd)=@_;
+ my $ret = system($cmd);
+ print "CMD ($ret): $cmd\n" if($verbose && !$torture);
+ return $ret;
+
+# This is one way to test curl on a remote machine
+# my $out = system("ssh $CLIENTIP cd \'$pwd\' \\; \'$cmd\'");
+# sleep 2; # time to allow the NFS server to be updated
+# return $out;
+}
+
+#######################################################################
+# Run the application under test and return its stdout
+#
+sub runclientoutput {
+ my ($cmd)=@_;
+ return `$cmd 2>/dev/null`;
+
+# This is one way to test curl on a remote machine
+# my @out = `ssh $CLIENTIP cd \'$pwd\' \\; \'$cmd\'`;
+# sleep 2; # time to allow the NFS server to be updated
+# return @out;
+}
+
+
+#######################################################################
+# Quote an argument for passing safely to a Bourne shell
+# This does the same thing as String::ShellQuote but doesn't need a package.
+#
+sub shell_quote {
+ my ($s)=@_;
+ if($s !~ m/^[-+=.,_\/:a-zA-Z0-9]+$/) {
+ # string contains a "dangerous" character--quote it
+ $s =~ s/'/'"'"'/g;
+ $s = "'" . $s . "'";
+ }
+ return $s;
+}
+
+1;
diff --git a/tests/tftpserver.pl b/tests/tftpserver.pl
index 9db734330..52ad01f0c 100755
--- a/tests/tftpserver.pl
+++ b/tests/tftpserver.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -23,20 +23,20 @@
#
#***************************************************************************
+use strict;
+use warnings;
+
BEGIN {
push(@INC, $ENV{'srcdir'}) if(defined $ENV{'srcdir'});
push(@INC, ".");
}
-use strict;
-use warnings;
-
use serverhelp qw(
server_pidfilename
server_logfilename
);
-use sshhelp qw(
+use pathhelp qw(
exe_ext
);
@@ -74,6 +74,12 @@ while(@ARGV) {
shift @ARGV;
}
}
+ elsif($ARGV[0] eq '--logdir') {
+ if($ARGV[1]) {
+ $logdir = $ARGV[1];
+ shift @ARGV;
+ }
+ }
elsif($ARGV[0] eq '--srcdir') {
if($ARGV[1]) {
$srcdir = $ARGV[1];
@@ -111,7 +117,7 @@ if(!$srcdir) {
$srcdir = $ENV{'srcdir'} || '.';
}
if(!$pidfile) {
- $pidfile = "$path/". server_pidfilename($proto, $ipvnum, $idnum);
+ $pidfile = server_pidfilename($path, $proto, $ipvnum, $idnum);
}
if(!$logfile) {
$logfile = server_logfilename($logdir, $proto, $ipvnum, $idnum);
@@ -119,7 +125,8 @@ if(!$logfile) {
$flags .= "--pidfile \"$pidfile\" ".
"--portfile \"$portfile\" ".
- "--logfile \"$logfile\" ";
+ "--logfile \"$logfile\" ".
+ "--logdir \"$logdir\" ";
$flags .= "--ipv$ipvnum --port $port --srcdir \"$srcdir\"";
$| = 1;
diff --git a/tests/unit/CMakeLists.txt b/tests/unit/CMakeLists.txt
index 8798165c8..9ca9a97cc 100644
--- a/tests/unit/CMakeLists.txt
+++ b/tests/unit/CMakeLists.txt
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -22,36 +22,9 @@
#
###########################################################################
-# TODO build a special libcurlu library for unittests.
-return()
+transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake")
+include(${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake)
-set(UT_SRC
- unit1300.c
- unit1301.c
- unit1302.c
- unit1303.c
- unit1304.c
- unit1305.c
- unit1307.c
- unit1308.c
- unit1309.c
- unit1330.c
-# Broken link on Linux
-# unit1394.c
- unit1395.c
- unit1396.c
- unit1397.c
- unit1398.c
- unit1600.c
- unit1601.c
- unit1603.c
-# Broken link on Linux
-# unit1604.c
- unit1620.c
- unit1655.c
- )
-
-set(UT_COMMON_FILES ../libtest/first.c ../libtest/test.h curlcheck.h)
include_directories(
${CURL_SOURCE_DIR}/lib # To be able to reach "curl_setup_once.h"
${CURL_SOURCE_DIR}/tests/libtest
@@ -60,12 +33,10 @@ include_directories(
${CURL_BINARY_DIR}/include # To be able to reach "curl/curl.h"
)
-foreach(_testfile ${UT_SRC})
-
- get_filename_component(_testname ${_testfile} NAME_WE)
- add_executable(${_testname} EXCLUDE_FROM_ALL ${_testfile} ${UT_COMMON_FILES})
- #add_dependencies(testdeps ${_testname})
- target_link_libraries(${_testname} libcurl ${CURL_LIBS})
- set_target_properties(${_testname}
- PROPERTIES COMPILE_DEFINITIONS "UNITTESTS")
-endforeach()
+if (ENABLE_CURLDEBUG) # running unittests require curl to compiled with CURLDEBUG
+ foreach(_testfile ${UNITPROGS})
+ add_executable(${_testfile} EXCLUDE_FROM_ALL ${_testfile}.c ${UNITFILES})
+ add_dependencies(testdeps ${_testfile})
+ target_link_libraries(${_testfile} curltool curlu)
+ endforeach()
+endif()
diff --git a/tests/unit/Makefile.am b/tests/unit/Makefile.am
index a0d7a9495..dc10b890e 100644
--- a/tests/unit/Makefile.am
+++ b/tests/unit/Makefile.am
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -47,13 +47,10 @@ LIBS = $(BLANK_AT_MAKETIME)
LDADD = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la \
- @LDFLAGS@ @LIBCURL_LIBS@ @NSS_LIBS@
+ @LDFLAGS@ @LIBCURL_LIBS@
AM_CPPFLAGS += -DCURL_STATICLIB -DUNITTESTS
-# Makefile.inc provides neat definitions
-include Makefile.inc
-
CHECKSRC = $(CS_$(V))
CS_0 = @echo " RUN " $@;
CS_1 =
@@ -62,6 +59,9 @@ CS_ = $(CS_0)
checksrc:
$(CHECKSRC)@PERL@ $(top_srcdir)/scripts/checksrc.pl $(srcdir)/*.[ch]
+# Makefile.inc provides neat definitions
+include Makefile.inc
+
if BUILD_UNITTESTS
noinst_PROGRAMS = $(UNITPROGS)
else
diff --git a/tests/unit/Makefile.in b/tests/unit/Makefile.in
index 30ab92a3b..925564a05 100644
--- a/tests/unit/Makefile.in
+++ b/tests/unit/Makefile.in
@@ -21,7 +21,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -123,7 +123,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.m4 \
$(top_srcdir)/m4/curl-confopts.m4 \
$(top_srcdir)/m4/curl-functions.m4 \
$(top_srcdir)/m4/curl-gnutls.m4 \
- $(top_srcdir)/m4/curl-mbedtls.m4 $(top_srcdir)/m4/curl-nss.m4 \
+ $(top_srcdir)/m4/curl-mbedtls.m4 \
$(top_srcdir)/m4/curl-openssl.m4 \
$(top_srcdir)/m4/curl-override.m4 \
$(top_srcdir)/m4/curl-reentrant.m4 \
@@ -150,24 +150,25 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/lib/curl_config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-am__EXEEXT_1 = unit1300$(EXEEXT) unit1301$(EXEEXT) unit1302$(EXEEXT) \
- unit1303$(EXEEXT) unit1304$(EXEEXT) unit1305$(EXEEXT) \
- unit1307$(EXEEXT) unit1308$(EXEEXT) unit1309$(EXEEXT) \
- unit1323$(EXEEXT) unit1330$(EXEEXT) unit1394$(EXEEXT) \
- unit1395$(EXEEXT) unit1396$(EXEEXT) unit1397$(EXEEXT) \
- unit1398$(EXEEXT) unit1399$(EXEEXT) unit1600$(EXEEXT) \
- unit1601$(EXEEXT) unit1602$(EXEEXT) unit1603$(EXEEXT) \
- unit1604$(EXEEXT) unit1605$(EXEEXT) unit1606$(EXEEXT) \
- unit1607$(EXEEXT) unit1608$(EXEEXT) unit1609$(EXEEXT) \
- unit1610$(EXEEXT) unit1611$(EXEEXT) unit1612$(EXEEXT) \
- unit1614$(EXEEXT) unit1620$(EXEEXT) unit1621$(EXEEXT) \
- unit1650$(EXEEXT) unit1651$(EXEEXT) unit1652$(EXEEXT) \
- unit1653$(EXEEXT) unit1654$(EXEEXT) unit1655$(EXEEXT) \
- unit1660$(EXEEXT) unit1661$(EXEEXT)
+am__EXEEXT_1 = unit1300$(EXEEXT) unit1302$(EXEEXT) unit1303$(EXEEXT) \
+ unit1304$(EXEEXT) unit1305$(EXEEXT) unit1307$(EXEEXT) \
+ unit1308$(EXEEXT) unit1309$(EXEEXT) unit1323$(EXEEXT) \
+ unit1330$(EXEEXT) unit1394$(EXEEXT) unit1395$(EXEEXT) \
+ unit1396$(EXEEXT) unit1397$(EXEEXT) unit1398$(EXEEXT) \
+ unit1399$(EXEEXT) unit1600$(EXEEXT) unit1601$(EXEEXT) \
+ unit1602$(EXEEXT) unit1603$(EXEEXT) unit1604$(EXEEXT) \
+ unit1605$(EXEEXT) unit1606$(EXEEXT) unit1607$(EXEEXT) \
+ unit1608$(EXEEXT) unit1609$(EXEEXT) unit1610$(EXEEXT) \
+ unit1611$(EXEEXT) unit1612$(EXEEXT) unit1614$(EXEEXT) \
+ unit1620$(EXEEXT) unit1621$(EXEEXT) unit1650$(EXEEXT) \
+ unit1651$(EXEEXT) unit1652$(EXEEXT) unit1653$(EXEEXT) \
+ unit1654$(EXEEXT) unit1655$(EXEEXT) unit1660$(EXEEXT) \
+ unit1661$(EXEEXT) unit2600$(EXEEXT) unit2601$(EXEEXT) \
+ unit2602$(EXEEXT) unit2603$(EXEEXT) unit3200$(EXEEXT)
PROGRAMS = $(noinst_PROGRAMS)
am__dirstamp = $(am__leading_dot)dirstamp
-am__objects_1 = ../libtest/unit1300-first.$(OBJEXT)
-am_unit1300_OBJECTS = unit1300-unit1300.$(OBJEXT) $(am__objects_1)
+am__objects_1 = ../libtest/first.$(OBJEXT)
+am_unit1300_OBJECTS = unit1300.$(OBJEXT) $(am__objects_1)
unit1300_OBJECTS = $(am_unit1300_OBJECTS)
unit1300_LDADD = $(LDADD)
unit1300_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
@@ -176,246 +177,226 @@ AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
-am__objects_2 = ../libtest/unit1301-first.$(OBJEXT)
-am_unit1301_OBJECTS = unit1301-unit1301.$(OBJEXT) $(am__objects_2)
-unit1301_OBJECTS = $(am_unit1301_OBJECTS)
-unit1301_LDADD = $(LDADD)
-unit1301_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
- $(top_builddir)/lib/libcurlu.la
-am__objects_3 = ../libtest/unit1302-first.$(OBJEXT)
-am_unit1302_OBJECTS = unit1302-unit1302.$(OBJEXT) $(am__objects_3)
+am_unit1302_OBJECTS = unit1302.$(OBJEXT) $(am__objects_1)
unit1302_OBJECTS = $(am_unit1302_OBJECTS)
unit1302_LDADD = $(LDADD)
unit1302_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_4 = ../libtest/unit1303-first.$(OBJEXT)
-am_unit1303_OBJECTS = unit1303-unit1303.$(OBJEXT) $(am__objects_4)
+am_unit1303_OBJECTS = unit1303.$(OBJEXT) $(am__objects_1)
unit1303_OBJECTS = $(am_unit1303_OBJECTS)
unit1303_LDADD = $(LDADD)
unit1303_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_5 = ../libtest/unit1304-first.$(OBJEXT)
-am_unit1304_OBJECTS = unit1304-unit1304.$(OBJEXT) $(am__objects_5)
+am_unit1304_OBJECTS = unit1304.$(OBJEXT) $(am__objects_1)
unit1304_OBJECTS = $(am_unit1304_OBJECTS)
unit1304_LDADD = $(LDADD)
unit1304_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_6 = ../libtest/unit1305-first.$(OBJEXT)
-am_unit1305_OBJECTS = unit1305-unit1305.$(OBJEXT) $(am__objects_6)
+am_unit1305_OBJECTS = unit1305.$(OBJEXT) $(am__objects_1)
unit1305_OBJECTS = $(am_unit1305_OBJECTS)
unit1305_LDADD = $(LDADD)
unit1305_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_7 = ../libtest/unit1307-first.$(OBJEXT)
-am_unit1307_OBJECTS = unit1307-unit1307.$(OBJEXT) $(am__objects_7)
+am_unit1307_OBJECTS = unit1307.$(OBJEXT) $(am__objects_1)
unit1307_OBJECTS = $(am_unit1307_OBJECTS)
unit1307_LDADD = $(LDADD)
unit1307_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_8 = ../libtest/unit1308-first.$(OBJEXT)
-am_unit1308_OBJECTS = unit1308-unit1308.$(OBJEXT) $(am__objects_8)
+am_unit1308_OBJECTS = unit1308.$(OBJEXT) $(am__objects_1)
unit1308_OBJECTS = $(am_unit1308_OBJECTS)
unit1308_LDADD = $(LDADD)
unit1308_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_9 = ../libtest/unit1309-first.$(OBJEXT)
-am_unit1309_OBJECTS = unit1309-unit1309.$(OBJEXT) $(am__objects_9)
+am_unit1309_OBJECTS = unit1309.$(OBJEXT) $(am__objects_1)
unit1309_OBJECTS = $(am_unit1309_OBJECTS)
unit1309_LDADD = $(LDADD)
unit1309_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_10 = ../libtest/unit1323-first.$(OBJEXT)
-am_unit1323_OBJECTS = unit1323-unit1323.$(OBJEXT) $(am__objects_10)
+am_unit1323_OBJECTS = unit1323.$(OBJEXT) $(am__objects_1)
unit1323_OBJECTS = $(am_unit1323_OBJECTS)
unit1323_LDADD = $(LDADD)
unit1323_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_11 = ../libtest/unit1330-first.$(OBJEXT)
-am_unit1330_OBJECTS = unit1330-unit1330.$(OBJEXT) $(am__objects_11)
+am_unit1330_OBJECTS = unit1330.$(OBJEXT) $(am__objects_1)
unit1330_OBJECTS = $(am_unit1330_OBJECTS)
unit1330_LDADD = $(LDADD)
unit1330_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_12 = ../libtest/unit1394-first.$(OBJEXT)
-am_unit1394_OBJECTS = unit1394-unit1394.$(OBJEXT) $(am__objects_12)
+am_unit1394_OBJECTS = unit1394.$(OBJEXT) $(am__objects_1)
unit1394_OBJECTS = $(am_unit1394_OBJECTS)
-unit1394_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
-unit1394_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
- $(unit1394_LDFLAGS) $(LDFLAGS) -o $@
-am__objects_13 = ../libtest/unit1395-first.$(OBJEXT)
-am_unit1395_OBJECTS = unit1395-unit1395.$(OBJEXT) $(am__objects_13)
+unit1394_LDADD = $(LDADD)
+unit1394_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
+ $(top_builddir)/lib/libcurlu.la
+am_unit1395_OBJECTS = unit1395.$(OBJEXT) $(am__objects_1)
unit1395_OBJECTS = $(am_unit1395_OBJECTS)
unit1395_LDADD = $(LDADD)
unit1395_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_14 = ../libtest/unit1396-first.$(OBJEXT)
-am_unit1396_OBJECTS = unit1396-unit1396.$(OBJEXT) $(am__objects_14)
+am_unit1396_OBJECTS = unit1396.$(OBJEXT) $(am__objects_1)
unit1396_OBJECTS = $(am_unit1396_OBJECTS)
unit1396_LDADD = $(LDADD)
unit1396_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_15 = ../libtest/unit1397-first.$(OBJEXT)
-am_unit1397_OBJECTS = unit1397-unit1397.$(OBJEXT) $(am__objects_15)
+am_unit1397_OBJECTS = unit1397.$(OBJEXT) $(am__objects_1)
unit1397_OBJECTS = $(am_unit1397_OBJECTS)
unit1397_LDADD = $(LDADD)
unit1397_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_16 = ../libtest/unit1398-first.$(OBJEXT)
-am_unit1398_OBJECTS = unit1398-unit1398.$(OBJEXT) $(am__objects_16)
+am_unit1398_OBJECTS = unit1398.$(OBJEXT) $(am__objects_1)
unit1398_OBJECTS = $(am_unit1398_OBJECTS)
unit1398_LDADD = $(LDADD)
unit1398_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_17 = ../libtest/unit1399-first.$(OBJEXT)
-am_unit1399_OBJECTS = unit1399-unit1399.$(OBJEXT) $(am__objects_17)
+am_unit1399_OBJECTS = unit1399.$(OBJEXT) $(am__objects_1)
unit1399_OBJECTS = $(am_unit1399_OBJECTS)
unit1399_LDADD = $(LDADD)
unit1399_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_18 = ../libtest/unit1600-first.$(OBJEXT)
-am_unit1600_OBJECTS = unit1600-unit1600.$(OBJEXT) $(am__objects_18)
+am_unit1600_OBJECTS = unit1600.$(OBJEXT) $(am__objects_1)
unit1600_OBJECTS = $(am_unit1600_OBJECTS)
unit1600_LDADD = $(LDADD)
unit1600_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_19 = ../libtest/unit1601-first.$(OBJEXT)
-am_unit1601_OBJECTS = unit1601-unit1601.$(OBJEXT) $(am__objects_19)
+am_unit1601_OBJECTS = unit1601.$(OBJEXT) $(am__objects_1)
unit1601_OBJECTS = $(am_unit1601_OBJECTS)
unit1601_LDADD = $(LDADD)
unit1601_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_20 = ../libtest/unit1602-first.$(OBJEXT)
-am_unit1602_OBJECTS = unit1602-unit1602.$(OBJEXT) $(am__objects_20)
+am_unit1602_OBJECTS = unit1602.$(OBJEXT) $(am__objects_1)
unit1602_OBJECTS = $(am_unit1602_OBJECTS)
unit1602_LDADD = $(LDADD)
unit1602_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_21 = ../libtest/unit1603-first.$(OBJEXT)
-am_unit1603_OBJECTS = unit1603-unit1603.$(OBJEXT) $(am__objects_21)
+am_unit1603_OBJECTS = unit1603.$(OBJEXT) $(am__objects_1)
unit1603_OBJECTS = $(am_unit1603_OBJECTS)
unit1603_LDADD = $(LDADD)
unit1603_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_22 = ../libtest/unit1604-first.$(OBJEXT)
-am_unit1604_OBJECTS = unit1604-unit1604.$(OBJEXT) $(am__objects_22)
+am_unit1604_OBJECTS = unit1604.$(OBJEXT) $(am__objects_1)
unit1604_OBJECTS = $(am_unit1604_OBJECTS)
unit1604_LDADD = $(LDADD)
unit1604_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_23 = ../libtest/unit1605-first.$(OBJEXT)
-am_unit1605_OBJECTS = unit1605-unit1605.$(OBJEXT) $(am__objects_23)
+am_unit1605_OBJECTS = unit1605.$(OBJEXT) $(am__objects_1)
unit1605_OBJECTS = $(am_unit1605_OBJECTS)
unit1605_LDADD = $(LDADD)
unit1605_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_24 = ../libtest/unit1606-first.$(OBJEXT)
-am_unit1606_OBJECTS = unit1606-unit1606.$(OBJEXT) $(am__objects_24)
+am_unit1606_OBJECTS = unit1606.$(OBJEXT) $(am__objects_1)
unit1606_OBJECTS = $(am_unit1606_OBJECTS)
unit1606_LDADD = $(LDADD)
unit1606_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_25 = ../libtest/unit1607-first.$(OBJEXT)
-am_unit1607_OBJECTS = unit1607-unit1607.$(OBJEXT) $(am__objects_25)
+am_unit1607_OBJECTS = unit1607.$(OBJEXT) $(am__objects_1)
unit1607_OBJECTS = $(am_unit1607_OBJECTS)
unit1607_LDADD = $(LDADD)
unit1607_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_26 = ../libtest/unit1608-first.$(OBJEXT)
-am_unit1608_OBJECTS = unit1608-unit1608.$(OBJEXT) $(am__objects_26)
+am_unit1608_OBJECTS = unit1608.$(OBJEXT) $(am__objects_1)
unit1608_OBJECTS = $(am_unit1608_OBJECTS)
unit1608_LDADD = $(LDADD)
unit1608_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_27 = ../libtest/unit1609-first.$(OBJEXT)
-am_unit1609_OBJECTS = unit1609-unit1609.$(OBJEXT) $(am__objects_27)
+am_unit1609_OBJECTS = unit1609.$(OBJEXT) $(am__objects_1)
unit1609_OBJECTS = $(am_unit1609_OBJECTS)
unit1609_LDADD = $(LDADD)
unit1609_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_28 = ../libtest/unit1610-first.$(OBJEXT)
-am_unit1610_OBJECTS = unit1610-unit1610.$(OBJEXT) $(am__objects_28)
+am_unit1610_OBJECTS = unit1610.$(OBJEXT) $(am__objects_1)
unit1610_OBJECTS = $(am_unit1610_OBJECTS)
unit1610_LDADD = $(LDADD)
unit1610_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_29 = ../libtest/unit1611-first.$(OBJEXT)
-am_unit1611_OBJECTS = unit1611-unit1611.$(OBJEXT) $(am__objects_29)
+am_unit1611_OBJECTS = unit1611.$(OBJEXT) $(am__objects_1)
unit1611_OBJECTS = $(am_unit1611_OBJECTS)
unit1611_LDADD = $(LDADD)
unit1611_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_30 = ../libtest/unit1612-first.$(OBJEXT)
-am_unit1612_OBJECTS = unit1612-unit1612.$(OBJEXT) $(am__objects_30)
+am_unit1612_OBJECTS = unit1612.$(OBJEXT) $(am__objects_1)
unit1612_OBJECTS = $(am_unit1612_OBJECTS)
unit1612_LDADD = $(LDADD)
unit1612_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_31 = ../libtest/unit1614-first.$(OBJEXT)
-am_unit1614_OBJECTS = unit1614-unit1614.$(OBJEXT) $(am__objects_31)
+am_unit1614_OBJECTS = unit1614.$(OBJEXT) $(am__objects_1)
unit1614_OBJECTS = $(am_unit1614_OBJECTS)
unit1614_LDADD = $(LDADD)
unit1614_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_32 = ../libtest/unit1620-first.$(OBJEXT)
-am_unit1620_OBJECTS = unit1620-unit1620.$(OBJEXT) $(am__objects_32)
+am_unit1620_OBJECTS = unit1620.$(OBJEXT) $(am__objects_1)
unit1620_OBJECTS = $(am_unit1620_OBJECTS)
unit1620_LDADD = $(LDADD)
unit1620_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_33 = ../libtest/unit1621-first.$(OBJEXT)
-am_unit1621_OBJECTS = unit1621-unit1621.$(OBJEXT) $(am__objects_33)
+am_unit1621_OBJECTS = unit1621.$(OBJEXT) $(am__objects_1)
unit1621_OBJECTS = $(am_unit1621_OBJECTS)
+unit1621_LDADD = $(LDADD)
unit1621_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
- $(top_builddir)/lib/libcurl.la
-am__objects_34 = ../libtest/unit1650-first.$(OBJEXT)
-am_unit1650_OBJECTS = unit1650-unit1650.$(OBJEXT) $(am__objects_34)
+ $(top_builddir)/lib/libcurlu.la
+am_unit1650_OBJECTS = unit1650.$(OBJEXT) $(am__objects_1)
unit1650_OBJECTS = $(am_unit1650_OBJECTS)
unit1650_LDADD = $(LDADD)
unit1650_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_35 = ../libtest/unit1651-first.$(OBJEXT)
-am_unit1651_OBJECTS = unit1651-unit1651.$(OBJEXT) $(am__objects_35)
+am_unit1651_OBJECTS = unit1651.$(OBJEXT) $(am__objects_1)
unit1651_OBJECTS = $(am_unit1651_OBJECTS)
unit1651_LDADD = $(LDADD)
unit1651_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_36 = ../libtest/unit1652-first.$(OBJEXT)
-am_unit1652_OBJECTS = unit1652-unit1652.$(OBJEXT) $(am__objects_36)
+am_unit1652_OBJECTS = unit1652.$(OBJEXT) $(am__objects_1)
unit1652_OBJECTS = $(am_unit1652_OBJECTS)
unit1652_LDADD = $(LDADD)
unit1652_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_37 = ../libtest/unit1653-first.$(OBJEXT)
-am_unit1653_OBJECTS = unit1653-unit1653.$(OBJEXT) $(am__objects_37)
+am_unit1653_OBJECTS = unit1653.$(OBJEXT) $(am__objects_1)
unit1653_OBJECTS = $(am_unit1653_OBJECTS)
unit1653_LDADD = $(LDADD)
unit1653_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_38 = ../libtest/unit1654-first.$(OBJEXT)
-am_unit1654_OBJECTS = unit1654-unit1654.$(OBJEXT) $(am__objects_38)
+am_unit1654_OBJECTS = unit1654.$(OBJEXT) $(am__objects_1)
unit1654_OBJECTS = $(am_unit1654_OBJECTS)
unit1654_LDADD = $(LDADD)
unit1654_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_39 = ../libtest/unit1655-first.$(OBJEXT)
-am_unit1655_OBJECTS = unit1655-unit1655.$(OBJEXT) $(am__objects_39)
+am_unit1655_OBJECTS = unit1655.$(OBJEXT) $(am__objects_1)
unit1655_OBJECTS = $(am_unit1655_OBJECTS)
unit1655_LDADD = $(LDADD)
unit1655_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_40 = ../libtest/unit1660-first.$(OBJEXT)
-am_unit1660_OBJECTS = unit1660-unit1660.$(OBJEXT) $(am__objects_40)
+am_unit1660_OBJECTS = unit1660.$(OBJEXT) $(am__objects_1)
unit1660_OBJECTS = $(am_unit1660_OBJECTS)
unit1660_LDADD = $(LDADD)
unit1660_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
-am__objects_41 = ../libtest/unit1661-first.$(OBJEXT)
-am_unit1661_OBJECTS = unit1661-unit1661.$(OBJEXT) $(am__objects_41)
+am_unit1661_OBJECTS = unit1661.$(OBJEXT) $(am__objects_1)
unit1661_OBJECTS = $(am_unit1661_OBJECTS)
unit1661_LDADD = $(LDADD)
unit1661_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la
+am_unit2600_OBJECTS = unit2600.$(OBJEXT) $(am__objects_1)
+unit2600_OBJECTS = $(am_unit2600_OBJECTS)
+unit2600_LDADD = $(LDADD)
+unit2600_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
+ $(top_builddir)/lib/libcurlu.la
+am_unit2601_OBJECTS = unit2601.$(OBJEXT) $(am__objects_1)
+unit2601_OBJECTS = $(am_unit2601_OBJECTS)
+unit2601_LDADD = $(LDADD)
+unit2601_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
+ $(top_builddir)/lib/libcurlu.la
+am_unit2602_OBJECTS = unit2602.$(OBJEXT) $(am__objects_1)
+unit2602_OBJECTS = $(am_unit2602_OBJECTS)
+unit2602_LDADD = $(LDADD)
+unit2602_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
+ $(top_builddir)/lib/libcurlu.la
+am_unit2603_OBJECTS = unit2603.$(OBJEXT) $(am__objects_1)
+unit2603_OBJECTS = $(am_unit2603_OBJECTS)
+unit2603_LDADD = $(LDADD)
+unit2603_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
+ $(top_builddir)/lib/libcurlu.la
+am_unit3200_OBJECTS = unit3200.$(OBJEXT) $(am__objects_1)
+unit3200_OBJECTS = $(am_unit3200_OBJECTS)
+unit3200_LDADD = $(LDADD)
+unit3200_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
+ $(top_builddir)/lib/libcurlu.la
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -431,88 +412,30 @@ am__v_at_1 =
DEFAULT_INCLUDES =
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__maybe_remake_depfiles = depfiles
-am__depfiles_remade = ../libtest/$(DEPDIR)/unit1300-first.Po \
- ../libtest/$(DEPDIR)/unit1301-first.Po \
- ../libtest/$(DEPDIR)/unit1302-first.Po \
- ../libtest/$(DEPDIR)/unit1303-first.Po \
- ../libtest/$(DEPDIR)/unit1304-first.Po \
- ../libtest/$(DEPDIR)/unit1305-first.Po \
- ../libtest/$(DEPDIR)/unit1307-first.Po \
- ../libtest/$(DEPDIR)/unit1308-first.Po \
- ../libtest/$(DEPDIR)/unit1309-first.Po \
- ../libtest/$(DEPDIR)/unit1323-first.Po \
- ../libtest/$(DEPDIR)/unit1330-first.Po \
- ../libtest/$(DEPDIR)/unit1394-first.Po \
- ../libtest/$(DEPDIR)/unit1395-first.Po \
- ../libtest/$(DEPDIR)/unit1396-first.Po \
- ../libtest/$(DEPDIR)/unit1397-first.Po \
- ../libtest/$(DEPDIR)/unit1398-first.Po \
- ../libtest/$(DEPDIR)/unit1399-first.Po \
- ../libtest/$(DEPDIR)/unit1600-first.Po \
- ../libtest/$(DEPDIR)/unit1601-first.Po \
- ../libtest/$(DEPDIR)/unit1602-first.Po \
- ../libtest/$(DEPDIR)/unit1603-first.Po \
- ../libtest/$(DEPDIR)/unit1604-first.Po \
- ../libtest/$(DEPDIR)/unit1605-first.Po \
- ../libtest/$(DEPDIR)/unit1606-first.Po \
- ../libtest/$(DEPDIR)/unit1607-first.Po \
- ../libtest/$(DEPDIR)/unit1608-first.Po \
- ../libtest/$(DEPDIR)/unit1609-first.Po \
- ../libtest/$(DEPDIR)/unit1610-first.Po \
- ../libtest/$(DEPDIR)/unit1611-first.Po \
- ../libtest/$(DEPDIR)/unit1612-first.Po \
- ../libtest/$(DEPDIR)/unit1614-first.Po \
- ../libtest/$(DEPDIR)/unit1620-first.Po \
- ../libtest/$(DEPDIR)/unit1621-first.Po \
- ../libtest/$(DEPDIR)/unit1650-first.Po \
- ../libtest/$(DEPDIR)/unit1651-first.Po \
- ../libtest/$(DEPDIR)/unit1652-first.Po \
- ../libtest/$(DEPDIR)/unit1653-first.Po \
- ../libtest/$(DEPDIR)/unit1654-first.Po \
- ../libtest/$(DEPDIR)/unit1655-first.Po \
- ../libtest/$(DEPDIR)/unit1660-first.Po \
- ../libtest/$(DEPDIR)/unit1661-first.Po \
- ./$(DEPDIR)/unit1300-unit1300.Po \
- ./$(DEPDIR)/unit1301-unit1301.Po \
- ./$(DEPDIR)/unit1302-unit1302.Po \
- ./$(DEPDIR)/unit1303-unit1303.Po \
- ./$(DEPDIR)/unit1304-unit1304.Po \
- ./$(DEPDIR)/unit1305-unit1305.Po \
- ./$(DEPDIR)/unit1307-unit1307.Po \
- ./$(DEPDIR)/unit1308-unit1308.Po \
- ./$(DEPDIR)/unit1309-unit1309.Po \
- ./$(DEPDIR)/unit1323-unit1323.Po \
- ./$(DEPDIR)/unit1330-unit1330.Po \
- ./$(DEPDIR)/unit1394-unit1394.Po \
- ./$(DEPDIR)/unit1395-unit1395.Po \
- ./$(DEPDIR)/unit1396-unit1396.Po \
- ./$(DEPDIR)/unit1397-unit1397.Po \
- ./$(DEPDIR)/unit1398-unit1398.Po \
- ./$(DEPDIR)/unit1399-unit1399.Po \
- ./$(DEPDIR)/unit1600-unit1600.Po \
- ./$(DEPDIR)/unit1601-unit1601.Po \
- ./$(DEPDIR)/unit1602-unit1602.Po \
- ./$(DEPDIR)/unit1603-unit1603.Po \
- ./$(DEPDIR)/unit1604-unit1604.Po \
- ./$(DEPDIR)/unit1605-unit1605.Po \
- ./$(DEPDIR)/unit1606-unit1606.Po \
- ./$(DEPDIR)/unit1607-unit1607.Po \
- ./$(DEPDIR)/unit1608-unit1608.Po \
- ./$(DEPDIR)/unit1609-unit1609.Po \
- ./$(DEPDIR)/unit1610-unit1610.Po \
- ./$(DEPDIR)/unit1611-unit1611.Po \
- ./$(DEPDIR)/unit1612-unit1612.Po \
- ./$(DEPDIR)/unit1614-unit1614.Po \
- ./$(DEPDIR)/unit1620-unit1620.Po \
- ./$(DEPDIR)/unit1621-unit1621.Po \
- ./$(DEPDIR)/unit1650-unit1650.Po \
- ./$(DEPDIR)/unit1651-unit1651.Po \
- ./$(DEPDIR)/unit1652-unit1652.Po \
- ./$(DEPDIR)/unit1653-unit1653.Po \
- ./$(DEPDIR)/unit1654-unit1654.Po \
- ./$(DEPDIR)/unit1655-unit1655.Po \
- ./$(DEPDIR)/unit1660-unit1660.Po \
- ./$(DEPDIR)/unit1661-unit1661.Po
+am__depfiles_remade = ../libtest/$(DEPDIR)/first.Po \
+ ./$(DEPDIR)/unit1300.Po ./$(DEPDIR)/unit1302.Po \
+ ./$(DEPDIR)/unit1303.Po ./$(DEPDIR)/unit1304.Po \
+ ./$(DEPDIR)/unit1305.Po ./$(DEPDIR)/unit1307.Po \
+ ./$(DEPDIR)/unit1308.Po ./$(DEPDIR)/unit1309.Po \
+ ./$(DEPDIR)/unit1323.Po ./$(DEPDIR)/unit1330.Po \
+ ./$(DEPDIR)/unit1394.Po ./$(DEPDIR)/unit1395.Po \
+ ./$(DEPDIR)/unit1396.Po ./$(DEPDIR)/unit1397.Po \
+ ./$(DEPDIR)/unit1398.Po ./$(DEPDIR)/unit1399.Po \
+ ./$(DEPDIR)/unit1600.Po ./$(DEPDIR)/unit1601.Po \
+ ./$(DEPDIR)/unit1602.Po ./$(DEPDIR)/unit1603.Po \
+ ./$(DEPDIR)/unit1604.Po ./$(DEPDIR)/unit1605.Po \
+ ./$(DEPDIR)/unit1606.Po ./$(DEPDIR)/unit1607.Po \
+ ./$(DEPDIR)/unit1608.Po ./$(DEPDIR)/unit1609.Po \
+ ./$(DEPDIR)/unit1610.Po ./$(DEPDIR)/unit1611.Po \
+ ./$(DEPDIR)/unit1612.Po ./$(DEPDIR)/unit1614.Po \
+ ./$(DEPDIR)/unit1620.Po ./$(DEPDIR)/unit1621.Po \
+ ./$(DEPDIR)/unit1650.Po ./$(DEPDIR)/unit1651.Po \
+ ./$(DEPDIR)/unit1652.Po ./$(DEPDIR)/unit1653.Po \
+ ./$(DEPDIR)/unit1654.Po ./$(DEPDIR)/unit1655.Po \
+ ./$(DEPDIR)/unit1660.Po ./$(DEPDIR)/unit1661.Po \
+ ./$(DEPDIR)/unit2600.Po ./$(DEPDIR)/unit2601.Po \
+ ./$(DEPDIR)/unit2602.Po ./$(DEPDIR)/unit2603.Po \
+ ./$(DEPDIR)/unit3200.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -532,7 +455,22 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(unit1300_SOURCES) $(unit1301_SOURCES) $(unit1302_SOURCES) \
+SOURCES = $(unit1300_SOURCES) $(unit1302_SOURCES) $(unit1303_SOURCES) \
+ $(unit1304_SOURCES) $(unit1305_SOURCES) $(unit1307_SOURCES) \
+ $(unit1308_SOURCES) $(unit1309_SOURCES) $(unit1323_SOURCES) \
+ $(unit1330_SOURCES) $(unit1394_SOURCES) $(unit1395_SOURCES) \
+ $(unit1396_SOURCES) $(unit1397_SOURCES) $(unit1398_SOURCES) \
+ $(unit1399_SOURCES) $(unit1600_SOURCES) $(unit1601_SOURCES) \
+ $(unit1602_SOURCES) $(unit1603_SOURCES) $(unit1604_SOURCES) \
+ $(unit1605_SOURCES) $(unit1606_SOURCES) $(unit1607_SOURCES) \
+ $(unit1608_SOURCES) $(unit1609_SOURCES) $(unit1610_SOURCES) \
+ $(unit1611_SOURCES) $(unit1612_SOURCES) $(unit1614_SOURCES) \
+ $(unit1620_SOURCES) $(unit1621_SOURCES) $(unit1650_SOURCES) \
+ $(unit1651_SOURCES) $(unit1652_SOURCES) $(unit1653_SOURCES) \
+ $(unit1654_SOURCES) $(unit1655_SOURCES) $(unit1660_SOURCES) \
+ $(unit1661_SOURCES) $(unit2600_SOURCES) $(unit2601_SOURCES) \
+ $(unit2602_SOURCES) $(unit2603_SOURCES) $(unit3200_SOURCES)
+DIST_SOURCES = $(unit1300_SOURCES) $(unit1302_SOURCES) \
$(unit1303_SOURCES) $(unit1304_SOURCES) $(unit1305_SOURCES) \
$(unit1307_SOURCES) $(unit1308_SOURCES) $(unit1309_SOURCES) \
$(unit1323_SOURCES) $(unit1330_SOURCES) $(unit1394_SOURCES) \
@@ -545,21 +483,9 @@ SOURCES = $(unit1300_SOURCES) $(unit1301_SOURCES) $(unit1302_SOURCES) \
$(unit1614_SOURCES) $(unit1620_SOURCES) $(unit1621_SOURCES) \
$(unit1650_SOURCES) $(unit1651_SOURCES) $(unit1652_SOURCES) \
$(unit1653_SOURCES) $(unit1654_SOURCES) $(unit1655_SOURCES) \
- $(unit1660_SOURCES) $(unit1661_SOURCES)
-DIST_SOURCES = $(unit1300_SOURCES) $(unit1301_SOURCES) \
- $(unit1302_SOURCES) $(unit1303_SOURCES) $(unit1304_SOURCES) \
- $(unit1305_SOURCES) $(unit1307_SOURCES) $(unit1308_SOURCES) \
- $(unit1309_SOURCES) $(unit1323_SOURCES) $(unit1330_SOURCES) \
- $(unit1394_SOURCES) $(unit1395_SOURCES) $(unit1396_SOURCES) \
- $(unit1397_SOURCES) $(unit1398_SOURCES) $(unit1399_SOURCES) \
- $(unit1600_SOURCES) $(unit1601_SOURCES) $(unit1602_SOURCES) \
- $(unit1603_SOURCES) $(unit1604_SOURCES) $(unit1605_SOURCES) \
- $(unit1606_SOURCES) $(unit1607_SOURCES) $(unit1608_SOURCES) \
- $(unit1609_SOURCES) $(unit1610_SOURCES) $(unit1611_SOURCES) \
- $(unit1612_SOURCES) $(unit1614_SOURCES) $(unit1620_SOURCES) \
- $(unit1621_SOURCES) $(unit1650_SOURCES) $(unit1651_SOURCES) \
- $(unit1652_SOURCES) $(unit1653_SOURCES) $(unit1654_SOURCES) \
- $(unit1655_SOURCES) $(unit1660_SOURCES) $(unit1661_SOURCES)
+ $(unit1660_SOURCES) $(unit1661_SOURCES) $(unit2600_SOURCES) \
+ $(unit2601_SOURCES) $(unit2602_SOURCES) $(unit2603_SOURCES) \
+ $(unit3200_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -588,6 +514,8 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APACHECTL = @APACHECTL@
+APXS = @APXS@
AR = @AR@
AR_FLAGS = @AR_FLAGS@
AS = @AS@
@@ -596,6 +524,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@
+CADDY = @CADDY@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@ @CURL_CFLAG_EXTRAS@
@@ -657,6 +586,8 @@ HAVE_LIBZ = @HAVE_LIBZ@
HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
HAVE_PROTO_BSDSOCKET_H = @HAVE_PROTO_BSDSOCKET_H@
HAVE_ZSTD = @HAVE_ZSTD@
+HTTPD = @HTTPD@
+HTTPD_NGHTTPX = @HTTPD_NGHTTPX@
IDN_ENABLED = @IDN_ENABLED@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
@@ -686,7 +617,6 @@ MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
NROFF = @NROFF@
-NSS_LIBS = @NSS_LIBS@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
@@ -717,6 +647,7 @@ SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@
SUPPORT_FEATURES = @SUPPORT_FEATURES@
SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+TEST_NGHTTPX = @TEST_NGHTTPX@
USE_ARES = @USE_ARES@
USE_BEARSSL = @USE_BEARSSL@
USE_GNUTLS = @USE_GNUTLS@
@@ -730,9 +661,8 @@ USE_NGHTTP2 = @USE_NGHTTP2@
USE_NGHTTP3 = @USE_NGHTTP3@
USE_NGTCP2 = @USE_NGTCP2@
USE_NGTCP2_CRYPTO_GNUTLS = @USE_NGTCP2_CRYPTO_GNUTLS@
-USE_NGTCP2_CRYPTO_OPENSSL = @USE_NGTCP2_CRYPTO_OPENSSL@
+USE_NGTCP2_CRYPTO_QUICTLS = @USE_NGTCP2_CRYPTO_QUICTLS@
USE_NGTCP2_CRYPTO_WOLFSSL = @USE_NGTCP2_CRYPTO_WOLFSSL@
-USE_NSS = @USE_NSS@
USE_OPENLDAP = @USE_OPENLDAP@
USE_QUICHE = @USE_QUICHE@
USE_RUSTLS = @USE_RUSTLS@
@@ -811,7 +741,7 @@ top_srcdir = @top_srcdir@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -843,15 +773,19 @@ AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/lib \
EXTRA_DIST = Makefile.inc CMakeLists.txt README.md
LDADD = $(top_builddir)/src/libcurltool.la \
$(top_builddir)/lib/libcurlu.la \
- @LDFLAGS@ @LIBCURL_LIBS@ @NSS_LIBS@
+ @LDFLAGS@ @LIBCURL_LIBS@
+CHECKSRC = $(CS_$(V))
+CS_0 = @echo " RUN " $@;
+CS_1 =
+CS_ = $(CS_0)
UNITFILES = curlcheck.h \
../libtest/test.h \
../libtest/first.c
# These are all unit test programs
-UNITPROGS = unit1300 unit1301 unit1302 unit1303 unit1304 unit1305 unit1307 \
+UNITPROGS = unit1300 unit1302 unit1303 unit1304 unit1305 unit1307 \
unit1308 unit1309 unit1323 \
unit1330 unit1394 unit1395 unit1396 unit1397 unit1398 \
unit1399 \
@@ -859,100 +793,55 @@ UNITPROGS = unit1300 unit1301 unit1302 unit1303 unit1304 unit1305 unit1307 \
unit1608 unit1609 unit1610 unit1611 unit1612 unit1614 \
unit1620 unit1621 \
unit1650 unit1651 unit1652 unit1653 unit1654 unit1655 \
- unit1660 unit1661
+ unit1660 unit1661 \
+ unit2600 unit2601 unit2602 unit2603 \
+ unit3200
unit1300_SOURCES = unit1300.c $(UNITFILES)
-unit1300_CPPFLAGS = $(AM_CPPFLAGS)
-unit1301_SOURCES = unit1301.c $(UNITFILES)
-unit1301_CPPFLAGS = $(AM_CPPFLAGS)
unit1302_SOURCES = unit1302.c $(UNITFILES)
-unit1302_CPPFLAGS = $(AM_CPPFLAGS)
unit1303_SOURCES = unit1303.c $(UNITFILES)
-unit1303_CPPFLAGS = $(AM_CPPFLAGS)
unit1304_SOURCES = unit1304.c $(UNITFILES)
-unit1304_CPPFLAGS = $(AM_CPPFLAGS)
unit1305_SOURCES = unit1305.c $(UNITFILES)
-unit1305_CPPFLAGS = $(AM_CPPFLAGS)
unit1307_SOURCES = unit1307.c $(UNITFILES)
-unit1307_CPPFLAGS = $(AM_CPPFLAGS)
unit1308_SOURCES = unit1308.c $(UNITFILES)
-unit1308_CPPFLAGS = $(AM_CPPFLAGS)
unit1309_SOURCES = unit1309.c $(UNITFILES)
-unit1309_CPPFLAGS = $(AM_CPPFLAGS)
unit1323_SOURCES = unit1323.c $(UNITFILES)
-unit1323_CPPFLAGS = $(AM_CPPFLAGS)
unit1330_SOURCES = unit1330.c $(UNITFILES)
-unit1330_CPPFLAGS = $(AM_CPPFLAGS)
unit1394_SOURCES = unit1394.c $(UNITFILES)
-unit1394_CPPFLAGS = $(AM_CPPFLAGS)
-unit1394_LDADD = $(top_builddir)/lib/libcurl.la @LIBCURL_LIBS@
-unit1394_LDFLAGS = $(top_builddir)/src/libcurltool.la
-unit1394_LIBS =
unit1395_SOURCES = unit1395.c $(UNITFILES)
-unit1395_CPPFLAGS = $(AM_CPPFLAGS)
unit1396_SOURCES = unit1396.c $(UNITFILES)
-unit1396_CPPFLAGS = $(AM_CPPFLAGS)
unit1397_SOURCES = unit1397.c $(UNITFILES)
-unit1397_CPPFLAGS = $(AM_CPPFLAGS)
unit1398_SOURCES = unit1398.c $(UNITFILES)
-unit1398_CPPFLAGS = $(AM_CPPFLAGS)
unit1399_SOURCES = unit1399.c $(UNITFILES)
-unit1399_CPPFLAGS = $(AM_CPPFLAGS)
unit1600_SOURCES = unit1600.c $(UNITFILES)
-unit1600_CPPFLAGS = $(AM_CPPFLAGS)
unit1601_SOURCES = unit1601.c $(UNITFILES)
-unit1601_CPPFLAGS = $(AM_CPPFLAGS)
unit1602_SOURCES = unit1602.c $(UNITFILES)
-unit1602_CPPFLAGS = $(AM_CPPFLAGS)
unit1603_SOURCES = unit1603.c $(UNITFILES)
-unit1603_CPPFLAGS = $(AM_CPPFLAGS)
unit1604_SOURCES = unit1604.c $(UNITFILES)
-unit1604_CPPFLAGS = $(AM_CPPFLAGS)
unit1605_SOURCES = unit1605.c $(UNITFILES)
-unit1605_CPPFLAGS = $(AM_CPPFLAGS)
unit1606_SOURCES = unit1606.c $(UNITFILES)
-unit1606_CPPFLAGS = $(AM_CPPFLAGS)
unit1607_SOURCES = unit1607.c $(UNITFILES)
-unit1607_CPPFLAGS = $(AM_CPPFLAGS)
unit1608_SOURCES = unit1608.c $(UNITFILES)
-unit1608_CPPFLAGS = $(AM_CPPFLAGS)
unit1609_SOURCES = unit1609.c $(UNITFILES)
-unit1609_CPPFLAGS = $(AM_CPPFLAGS)
unit1610_SOURCES = unit1610.c $(UNITFILES)
-unit1610_CPPFLAGS = $(AM_CPPFLAGS)
unit1611_SOURCES = unit1611.c $(UNITFILES)
-unit1611_CPPFLAGS = $(AM_CPPFLAGS)
unit1612_SOURCES = unit1612.c $(UNITFILES)
-unit1612_CPPFLAGS = $(AM_CPPFLAGS)
unit1614_SOURCES = unit1614.c $(UNITFILES)
-unit1614_CPPFLAGS = $(AM_CPPFLAGS)
unit1620_SOURCES = unit1620.c $(UNITFILES)
-unit1620_CPPFLAGS = $(AM_CPPFLAGS)
unit1621_SOURCES = unit1621.c $(UNITFILES)
-unit1621_CPPFLAGS = $(AM_CPPFLAGS)
-unit1621_LDADD = $(top_builddir)/src/libcurltool.la $(top_builddir)/lib/libcurl.la @NSS_LIBS@
unit1650_SOURCES = unit1650.c $(UNITFILES)
-unit1650_CPPFLAGS = $(AM_CPPFLAGS)
unit1651_SOURCES = unit1651.c $(UNITFILES)
-unit1651_CPPFLAGS = $(AM_CPPFLAGS)
unit1652_SOURCES = unit1652.c $(UNITFILES)
-unit1652_CPPFLAGS = $(AM_CPPFLAGS)
unit1653_SOURCES = unit1653.c $(UNITFILES)
-unit1653_CPPFLAGS = $(AM_CPPFLAGS)
unit1654_SOURCES = unit1654.c $(UNITFILES)
-unit1654_CPPFLAGS = $(AM_CPPFLAGS)
unit1655_SOURCES = unit1655.c $(UNITFILES)
-unit1655_CPPFLAGS = $(AM_CPPFLAGS)
unit1660_SOURCES = unit1660.c $(UNITFILES)
-unit1660_CPPFLAGS = $(AM_CPPFLAGS)
unit1661_SOURCES = unit1661.c $(UNITFILES)
-unit1661_CPPFLAGS = $(AM_CPPFLAGS)
-
-# Makefile.inc provides neat definitions
-CHECKSRC = $(CS_$(V))
-CS_0 = @echo " RUN " $@;
-CS_1 =
-CS_ = $(CS_0)
+unit2600_SOURCES = unit2600.c $(UNITFILES)
+unit2601_SOURCES = unit2601.c $(UNITFILES)
+unit2602_SOURCES = unit2602.c $(UNITFILES)
+unit2603_SOURCES = unit2603.c $(UNITFILES)
+unit3200_SOURCES = unit3200.c $(UNITFILES)
all: all-am
.SUFFIXES:
@@ -1002,253 +891,189 @@ clean-noinstPROGRAMS:
../libtest/$(DEPDIR)/$(am__dirstamp):
@$(MKDIR_P) ../libtest/$(DEPDIR)
@: > ../libtest/$(DEPDIR)/$(am__dirstamp)
-../libtest/unit1300-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
+../libtest/first.$(OBJEXT): ../libtest/$(am__dirstamp) \
../libtest/$(DEPDIR)/$(am__dirstamp)
unit1300$(EXEEXT): $(unit1300_OBJECTS) $(unit1300_DEPENDENCIES) $(EXTRA_unit1300_DEPENDENCIES)
@rm -f unit1300$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1300_OBJECTS) $(unit1300_LDADD) $(LIBS)
-../libtest/unit1301-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
-
-unit1301$(EXEEXT): $(unit1301_OBJECTS) $(unit1301_DEPENDENCIES) $(EXTRA_unit1301_DEPENDENCIES)
- @rm -f unit1301$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(unit1301_OBJECTS) $(unit1301_LDADD) $(LIBS)
-../libtest/unit1302-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1302$(EXEEXT): $(unit1302_OBJECTS) $(unit1302_DEPENDENCIES) $(EXTRA_unit1302_DEPENDENCIES)
@rm -f unit1302$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1302_OBJECTS) $(unit1302_LDADD) $(LIBS)
-../libtest/unit1303-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1303$(EXEEXT): $(unit1303_OBJECTS) $(unit1303_DEPENDENCIES) $(EXTRA_unit1303_DEPENDENCIES)
@rm -f unit1303$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1303_OBJECTS) $(unit1303_LDADD) $(LIBS)
-../libtest/unit1304-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1304$(EXEEXT): $(unit1304_OBJECTS) $(unit1304_DEPENDENCIES) $(EXTRA_unit1304_DEPENDENCIES)
@rm -f unit1304$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1304_OBJECTS) $(unit1304_LDADD) $(LIBS)
-../libtest/unit1305-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1305$(EXEEXT): $(unit1305_OBJECTS) $(unit1305_DEPENDENCIES) $(EXTRA_unit1305_DEPENDENCIES)
@rm -f unit1305$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1305_OBJECTS) $(unit1305_LDADD) $(LIBS)
-../libtest/unit1307-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1307$(EXEEXT): $(unit1307_OBJECTS) $(unit1307_DEPENDENCIES) $(EXTRA_unit1307_DEPENDENCIES)
@rm -f unit1307$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1307_OBJECTS) $(unit1307_LDADD) $(LIBS)
-../libtest/unit1308-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1308$(EXEEXT): $(unit1308_OBJECTS) $(unit1308_DEPENDENCIES) $(EXTRA_unit1308_DEPENDENCIES)
@rm -f unit1308$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1308_OBJECTS) $(unit1308_LDADD) $(LIBS)
-../libtest/unit1309-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1309$(EXEEXT): $(unit1309_OBJECTS) $(unit1309_DEPENDENCIES) $(EXTRA_unit1309_DEPENDENCIES)
@rm -f unit1309$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1309_OBJECTS) $(unit1309_LDADD) $(LIBS)
-../libtest/unit1323-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1323$(EXEEXT): $(unit1323_OBJECTS) $(unit1323_DEPENDENCIES) $(EXTRA_unit1323_DEPENDENCIES)
@rm -f unit1323$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1323_OBJECTS) $(unit1323_LDADD) $(LIBS)
-../libtest/unit1330-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1330$(EXEEXT): $(unit1330_OBJECTS) $(unit1330_DEPENDENCIES) $(EXTRA_unit1330_DEPENDENCIES)
@rm -f unit1330$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1330_OBJECTS) $(unit1330_LDADD) $(LIBS)
-../libtest/unit1394-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1394$(EXEEXT): $(unit1394_OBJECTS) $(unit1394_DEPENDENCIES) $(EXTRA_unit1394_DEPENDENCIES)
@rm -f unit1394$(EXEEXT)
- $(AM_V_CCLD)$(unit1394_LINK) $(unit1394_OBJECTS) $(unit1394_LDADD) $(LIBS)
-../libtest/unit1395-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
+ $(AM_V_CCLD)$(LINK) $(unit1394_OBJECTS) $(unit1394_LDADD) $(LIBS)
unit1395$(EXEEXT): $(unit1395_OBJECTS) $(unit1395_DEPENDENCIES) $(EXTRA_unit1395_DEPENDENCIES)
@rm -f unit1395$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1395_OBJECTS) $(unit1395_LDADD) $(LIBS)
-../libtest/unit1396-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1396$(EXEEXT): $(unit1396_OBJECTS) $(unit1396_DEPENDENCIES) $(EXTRA_unit1396_DEPENDENCIES)
@rm -f unit1396$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1396_OBJECTS) $(unit1396_LDADD) $(LIBS)
-../libtest/unit1397-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1397$(EXEEXT): $(unit1397_OBJECTS) $(unit1397_DEPENDENCIES) $(EXTRA_unit1397_DEPENDENCIES)
@rm -f unit1397$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1397_OBJECTS) $(unit1397_LDADD) $(LIBS)
-../libtest/unit1398-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1398$(EXEEXT): $(unit1398_OBJECTS) $(unit1398_DEPENDENCIES) $(EXTRA_unit1398_DEPENDENCIES)
@rm -f unit1398$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1398_OBJECTS) $(unit1398_LDADD) $(LIBS)
-../libtest/unit1399-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1399$(EXEEXT): $(unit1399_OBJECTS) $(unit1399_DEPENDENCIES) $(EXTRA_unit1399_DEPENDENCIES)
@rm -f unit1399$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1399_OBJECTS) $(unit1399_LDADD) $(LIBS)
-../libtest/unit1600-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1600$(EXEEXT): $(unit1600_OBJECTS) $(unit1600_DEPENDENCIES) $(EXTRA_unit1600_DEPENDENCIES)
@rm -f unit1600$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1600_OBJECTS) $(unit1600_LDADD) $(LIBS)
-../libtest/unit1601-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1601$(EXEEXT): $(unit1601_OBJECTS) $(unit1601_DEPENDENCIES) $(EXTRA_unit1601_DEPENDENCIES)
@rm -f unit1601$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1601_OBJECTS) $(unit1601_LDADD) $(LIBS)
-../libtest/unit1602-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1602$(EXEEXT): $(unit1602_OBJECTS) $(unit1602_DEPENDENCIES) $(EXTRA_unit1602_DEPENDENCIES)
@rm -f unit1602$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1602_OBJECTS) $(unit1602_LDADD) $(LIBS)
-../libtest/unit1603-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1603$(EXEEXT): $(unit1603_OBJECTS) $(unit1603_DEPENDENCIES) $(EXTRA_unit1603_DEPENDENCIES)
@rm -f unit1603$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1603_OBJECTS) $(unit1603_LDADD) $(LIBS)
-../libtest/unit1604-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1604$(EXEEXT): $(unit1604_OBJECTS) $(unit1604_DEPENDENCIES) $(EXTRA_unit1604_DEPENDENCIES)
@rm -f unit1604$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1604_OBJECTS) $(unit1604_LDADD) $(LIBS)
-../libtest/unit1605-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1605$(EXEEXT): $(unit1605_OBJECTS) $(unit1605_DEPENDENCIES) $(EXTRA_unit1605_DEPENDENCIES)
@rm -f unit1605$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1605_OBJECTS) $(unit1605_LDADD) $(LIBS)
-../libtest/unit1606-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1606$(EXEEXT): $(unit1606_OBJECTS) $(unit1606_DEPENDENCIES) $(EXTRA_unit1606_DEPENDENCIES)
@rm -f unit1606$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1606_OBJECTS) $(unit1606_LDADD) $(LIBS)
-../libtest/unit1607-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1607$(EXEEXT): $(unit1607_OBJECTS) $(unit1607_DEPENDENCIES) $(EXTRA_unit1607_DEPENDENCIES)
@rm -f unit1607$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1607_OBJECTS) $(unit1607_LDADD) $(LIBS)
-../libtest/unit1608-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1608$(EXEEXT): $(unit1608_OBJECTS) $(unit1608_DEPENDENCIES) $(EXTRA_unit1608_DEPENDENCIES)
@rm -f unit1608$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1608_OBJECTS) $(unit1608_LDADD) $(LIBS)
-../libtest/unit1609-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1609$(EXEEXT): $(unit1609_OBJECTS) $(unit1609_DEPENDENCIES) $(EXTRA_unit1609_DEPENDENCIES)
@rm -f unit1609$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1609_OBJECTS) $(unit1609_LDADD) $(LIBS)
-../libtest/unit1610-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1610$(EXEEXT): $(unit1610_OBJECTS) $(unit1610_DEPENDENCIES) $(EXTRA_unit1610_DEPENDENCIES)
@rm -f unit1610$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1610_OBJECTS) $(unit1610_LDADD) $(LIBS)
-../libtest/unit1611-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1611$(EXEEXT): $(unit1611_OBJECTS) $(unit1611_DEPENDENCIES) $(EXTRA_unit1611_DEPENDENCIES)
@rm -f unit1611$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1611_OBJECTS) $(unit1611_LDADD) $(LIBS)
-../libtest/unit1612-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1612$(EXEEXT): $(unit1612_OBJECTS) $(unit1612_DEPENDENCIES) $(EXTRA_unit1612_DEPENDENCIES)
@rm -f unit1612$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1612_OBJECTS) $(unit1612_LDADD) $(LIBS)
-../libtest/unit1614-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1614$(EXEEXT): $(unit1614_OBJECTS) $(unit1614_DEPENDENCIES) $(EXTRA_unit1614_DEPENDENCIES)
@rm -f unit1614$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1614_OBJECTS) $(unit1614_LDADD) $(LIBS)
-../libtest/unit1620-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1620$(EXEEXT): $(unit1620_OBJECTS) $(unit1620_DEPENDENCIES) $(EXTRA_unit1620_DEPENDENCIES)
@rm -f unit1620$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1620_OBJECTS) $(unit1620_LDADD) $(LIBS)
-../libtest/unit1621-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1621$(EXEEXT): $(unit1621_OBJECTS) $(unit1621_DEPENDENCIES) $(EXTRA_unit1621_DEPENDENCIES)
@rm -f unit1621$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1621_OBJECTS) $(unit1621_LDADD) $(LIBS)
-../libtest/unit1650-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1650$(EXEEXT): $(unit1650_OBJECTS) $(unit1650_DEPENDENCIES) $(EXTRA_unit1650_DEPENDENCIES)
@rm -f unit1650$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1650_OBJECTS) $(unit1650_LDADD) $(LIBS)
-../libtest/unit1651-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1651$(EXEEXT): $(unit1651_OBJECTS) $(unit1651_DEPENDENCIES) $(EXTRA_unit1651_DEPENDENCIES)
@rm -f unit1651$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1651_OBJECTS) $(unit1651_LDADD) $(LIBS)
-../libtest/unit1652-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1652$(EXEEXT): $(unit1652_OBJECTS) $(unit1652_DEPENDENCIES) $(EXTRA_unit1652_DEPENDENCIES)
@rm -f unit1652$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1652_OBJECTS) $(unit1652_LDADD) $(LIBS)
-../libtest/unit1653-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1653$(EXEEXT): $(unit1653_OBJECTS) $(unit1653_DEPENDENCIES) $(EXTRA_unit1653_DEPENDENCIES)
@rm -f unit1653$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1653_OBJECTS) $(unit1653_LDADD) $(LIBS)
-../libtest/unit1654-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1654$(EXEEXT): $(unit1654_OBJECTS) $(unit1654_DEPENDENCIES) $(EXTRA_unit1654_DEPENDENCIES)
@rm -f unit1654$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1654_OBJECTS) $(unit1654_LDADD) $(LIBS)
-../libtest/unit1655-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1655$(EXEEXT): $(unit1655_OBJECTS) $(unit1655_DEPENDENCIES) $(EXTRA_unit1655_DEPENDENCIES)
@rm -f unit1655$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1655_OBJECTS) $(unit1655_LDADD) $(LIBS)
-../libtest/unit1660-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1660$(EXEEXT): $(unit1660_OBJECTS) $(unit1660_DEPENDENCIES) $(EXTRA_unit1660_DEPENDENCIES)
@rm -f unit1660$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1660_OBJECTS) $(unit1660_LDADD) $(LIBS)
-../libtest/unit1661-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
- ../libtest/$(DEPDIR)/$(am__dirstamp)
unit1661$(EXEEXT): $(unit1661_OBJECTS) $(unit1661_DEPENDENCIES) $(EXTRA_unit1661_DEPENDENCIES)
@rm -f unit1661$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(unit1661_OBJECTS) $(unit1661_LDADD) $(LIBS)
+unit2600$(EXEEXT): $(unit2600_OBJECTS) $(unit2600_DEPENDENCIES) $(EXTRA_unit2600_DEPENDENCIES)
+ @rm -f unit2600$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(unit2600_OBJECTS) $(unit2600_LDADD) $(LIBS)
+
+unit2601$(EXEEXT): $(unit2601_OBJECTS) $(unit2601_DEPENDENCIES) $(EXTRA_unit2601_DEPENDENCIES)
+ @rm -f unit2601$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(unit2601_OBJECTS) $(unit2601_LDADD) $(LIBS)
+
+unit2602$(EXEEXT): $(unit2602_OBJECTS) $(unit2602_DEPENDENCIES) $(EXTRA_unit2602_DEPENDENCIES)
+ @rm -f unit2602$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(unit2602_OBJECTS) $(unit2602_LDADD) $(LIBS)
+
+unit2603$(EXEEXT): $(unit2603_OBJECTS) $(unit2603_DEPENDENCIES) $(EXTRA_unit2603_DEPENDENCIES)
+ @rm -f unit2603$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(unit2603_OBJECTS) $(unit2603_LDADD) $(LIBS)
+
+unit3200$(EXEEXT): $(unit3200_OBJECTS) $(unit3200_DEPENDENCIES) $(EXTRA_unit3200_DEPENDENCIES)
+ @rm -f unit3200$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(unit3200_OBJECTS) $(unit3200_LDADD) $(LIBS)
+
mostlyclean-compile:
-rm -f *.$(OBJEXT)
-rm -f ../libtest/*.$(OBJEXT)
@@ -1256,88 +1081,52 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1300-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1301-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1302-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1303-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1304-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1305-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1307-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1308-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1309-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1323-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1330-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1394-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1395-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1396-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1397-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1398-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1399-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1600-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1601-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1602-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1603-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1604-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1605-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1606-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1607-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1608-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1609-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1610-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1611-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1612-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1614-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1620-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1621-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1650-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1651-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1652-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1653-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1654-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1655-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1660-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1661-first.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1300-unit1300.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1301-unit1301.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1302-unit1302.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1303-unit1303.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1304-unit1304.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1305-unit1305.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1307-unit1307.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1308-unit1308.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1309-unit1309.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1323-unit1323.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1330-unit1330.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1394-unit1394.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1395-unit1395.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1396-unit1396.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1397-unit1397.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1398-unit1398.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1399-unit1399.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1600-unit1600.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1601-unit1601.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1602-unit1602.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1603-unit1603.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1604-unit1604.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1605-unit1605.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1606-unit1606.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1607-unit1607.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1608-unit1608.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1609-unit1609.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1610-unit1610.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1611-unit1611.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1612-unit1612.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1614-unit1614.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1620-unit1620.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1621-unit1621.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1650-unit1650.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1651-unit1651.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1652-unit1652.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1653-unit1653.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1654-unit1654.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1655-unit1655.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1660-unit1660.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1661-unit1661.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/first.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1300.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1302.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1303.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1304.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1305.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1307.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1308.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1309.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1323.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1330.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1394.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1395.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1396.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1397.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1398.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1399.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1600.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1601.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1602.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1603.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1604.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1605.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1606.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1607.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1608.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1609.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1610.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1611.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1612.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1614.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1620.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1621.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1650.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1651.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1652.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1653.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1654.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1655.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1660.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1661.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit2600.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit2601.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit2602.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit2603.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit3200.Po@am__quote@ # am--include-marker
$(am__depfiles_remade):
@$(MKDIR_P) $(@D)
@@ -1369,1154 +1158,6 @@ am--depfiles: $(am__depfiles_remade)
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-unit1300-unit1300.o: unit1300.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1300_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1300-unit1300.o -MD -MP -MF $(DEPDIR)/unit1300-unit1300.Tpo -c -o unit1300-unit1300.o `test -f 'unit1300.c' || echo '$(srcdir)/'`unit1300.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1300-unit1300.Tpo $(DEPDIR)/unit1300-unit1300.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1300.c' object='unit1300-unit1300.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1300_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1300-unit1300.o `test -f 'unit1300.c' || echo '$(srcdir)/'`unit1300.c
-
-unit1300-unit1300.obj: unit1300.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1300_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1300-unit1300.obj -MD -MP -MF $(DEPDIR)/unit1300-unit1300.Tpo -c -o unit1300-unit1300.obj `if test -f 'unit1300.c'; then $(CYGPATH_W) 'unit1300.c'; else $(CYGPATH_W) '$(srcdir)/unit1300.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1300-unit1300.Tpo $(DEPDIR)/unit1300-unit1300.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1300.c' object='unit1300-unit1300.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1300_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1300-unit1300.obj `if test -f 'unit1300.c'; then $(CYGPATH_W) 'unit1300.c'; else $(CYGPATH_W) '$(srcdir)/unit1300.c'; fi`
-
-../libtest/unit1300-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1300_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1300-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1300-first.Tpo -c -o ../libtest/unit1300-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1300-first.Tpo ../libtest/$(DEPDIR)/unit1300-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1300-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1300_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1300-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1300-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1300_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1300-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1300-first.Tpo -c -o ../libtest/unit1300-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1300-first.Tpo ../libtest/$(DEPDIR)/unit1300-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1300-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1300_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1300-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1301-unit1301.o: unit1301.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1301_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1301-unit1301.o -MD -MP -MF $(DEPDIR)/unit1301-unit1301.Tpo -c -o unit1301-unit1301.o `test -f 'unit1301.c' || echo '$(srcdir)/'`unit1301.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1301-unit1301.Tpo $(DEPDIR)/unit1301-unit1301.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1301.c' object='unit1301-unit1301.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1301_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1301-unit1301.o `test -f 'unit1301.c' || echo '$(srcdir)/'`unit1301.c
-
-unit1301-unit1301.obj: unit1301.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1301_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1301-unit1301.obj -MD -MP -MF $(DEPDIR)/unit1301-unit1301.Tpo -c -o unit1301-unit1301.obj `if test -f 'unit1301.c'; then $(CYGPATH_W) 'unit1301.c'; else $(CYGPATH_W) '$(srcdir)/unit1301.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1301-unit1301.Tpo $(DEPDIR)/unit1301-unit1301.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1301.c' object='unit1301-unit1301.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1301_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1301-unit1301.obj `if test -f 'unit1301.c'; then $(CYGPATH_W) 'unit1301.c'; else $(CYGPATH_W) '$(srcdir)/unit1301.c'; fi`
-
-../libtest/unit1301-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1301_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1301-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1301-first.Tpo -c -o ../libtest/unit1301-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1301-first.Tpo ../libtest/$(DEPDIR)/unit1301-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1301-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1301_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1301-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1301-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1301_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1301-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1301-first.Tpo -c -o ../libtest/unit1301-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1301-first.Tpo ../libtest/$(DEPDIR)/unit1301-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1301-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1301_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1301-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1302-unit1302.o: unit1302.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1302_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1302-unit1302.o -MD -MP -MF $(DEPDIR)/unit1302-unit1302.Tpo -c -o unit1302-unit1302.o `test -f 'unit1302.c' || echo '$(srcdir)/'`unit1302.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1302-unit1302.Tpo $(DEPDIR)/unit1302-unit1302.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1302.c' object='unit1302-unit1302.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1302_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1302-unit1302.o `test -f 'unit1302.c' || echo '$(srcdir)/'`unit1302.c
-
-unit1302-unit1302.obj: unit1302.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1302_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1302-unit1302.obj -MD -MP -MF $(DEPDIR)/unit1302-unit1302.Tpo -c -o unit1302-unit1302.obj `if test -f 'unit1302.c'; then $(CYGPATH_W) 'unit1302.c'; else $(CYGPATH_W) '$(srcdir)/unit1302.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1302-unit1302.Tpo $(DEPDIR)/unit1302-unit1302.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1302.c' object='unit1302-unit1302.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1302_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1302-unit1302.obj `if test -f 'unit1302.c'; then $(CYGPATH_W) 'unit1302.c'; else $(CYGPATH_W) '$(srcdir)/unit1302.c'; fi`
-
-../libtest/unit1302-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1302_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1302-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1302-first.Tpo -c -o ../libtest/unit1302-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1302-first.Tpo ../libtest/$(DEPDIR)/unit1302-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1302-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1302_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1302-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1302-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1302_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1302-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1302-first.Tpo -c -o ../libtest/unit1302-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1302-first.Tpo ../libtest/$(DEPDIR)/unit1302-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1302-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1302_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1302-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1303-unit1303.o: unit1303.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1303_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1303-unit1303.o -MD -MP -MF $(DEPDIR)/unit1303-unit1303.Tpo -c -o unit1303-unit1303.o `test -f 'unit1303.c' || echo '$(srcdir)/'`unit1303.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1303-unit1303.Tpo $(DEPDIR)/unit1303-unit1303.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1303.c' object='unit1303-unit1303.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1303_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1303-unit1303.o `test -f 'unit1303.c' || echo '$(srcdir)/'`unit1303.c
-
-unit1303-unit1303.obj: unit1303.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1303_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1303-unit1303.obj -MD -MP -MF $(DEPDIR)/unit1303-unit1303.Tpo -c -o unit1303-unit1303.obj `if test -f 'unit1303.c'; then $(CYGPATH_W) 'unit1303.c'; else $(CYGPATH_W) '$(srcdir)/unit1303.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1303-unit1303.Tpo $(DEPDIR)/unit1303-unit1303.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1303.c' object='unit1303-unit1303.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1303_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1303-unit1303.obj `if test -f 'unit1303.c'; then $(CYGPATH_W) 'unit1303.c'; else $(CYGPATH_W) '$(srcdir)/unit1303.c'; fi`
-
-../libtest/unit1303-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1303_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1303-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1303-first.Tpo -c -o ../libtest/unit1303-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1303-first.Tpo ../libtest/$(DEPDIR)/unit1303-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1303-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1303_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1303-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1303-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1303_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1303-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1303-first.Tpo -c -o ../libtest/unit1303-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1303-first.Tpo ../libtest/$(DEPDIR)/unit1303-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1303-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1303_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1303-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1304-unit1304.o: unit1304.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1304_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1304-unit1304.o -MD -MP -MF $(DEPDIR)/unit1304-unit1304.Tpo -c -o unit1304-unit1304.o `test -f 'unit1304.c' || echo '$(srcdir)/'`unit1304.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1304-unit1304.Tpo $(DEPDIR)/unit1304-unit1304.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1304.c' object='unit1304-unit1304.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1304_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1304-unit1304.o `test -f 'unit1304.c' || echo '$(srcdir)/'`unit1304.c
-
-unit1304-unit1304.obj: unit1304.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1304_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1304-unit1304.obj -MD -MP -MF $(DEPDIR)/unit1304-unit1304.Tpo -c -o unit1304-unit1304.obj `if test -f 'unit1304.c'; then $(CYGPATH_W) 'unit1304.c'; else $(CYGPATH_W) '$(srcdir)/unit1304.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1304-unit1304.Tpo $(DEPDIR)/unit1304-unit1304.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1304.c' object='unit1304-unit1304.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1304_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1304-unit1304.obj `if test -f 'unit1304.c'; then $(CYGPATH_W) 'unit1304.c'; else $(CYGPATH_W) '$(srcdir)/unit1304.c'; fi`
-
-../libtest/unit1304-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1304_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1304-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1304-first.Tpo -c -o ../libtest/unit1304-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1304-first.Tpo ../libtest/$(DEPDIR)/unit1304-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1304-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1304_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1304-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1304-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1304_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1304-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1304-first.Tpo -c -o ../libtest/unit1304-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1304-first.Tpo ../libtest/$(DEPDIR)/unit1304-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1304-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1304_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1304-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1305-unit1305.o: unit1305.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1305_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1305-unit1305.o -MD -MP -MF $(DEPDIR)/unit1305-unit1305.Tpo -c -o unit1305-unit1305.o `test -f 'unit1305.c' || echo '$(srcdir)/'`unit1305.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1305-unit1305.Tpo $(DEPDIR)/unit1305-unit1305.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1305.c' object='unit1305-unit1305.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1305_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1305-unit1305.o `test -f 'unit1305.c' || echo '$(srcdir)/'`unit1305.c
-
-unit1305-unit1305.obj: unit1305.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1305_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1305-unit1305.obj -MD -MP -MF $(DEPDIR)/unit1305-unit1305.Tpo -c -o unit1305-unit1305.obj `if test -f 'unit1305.c'; then $(CYGPATH_W) 'unit1305.c'; else $(CYGPATH_W) '$(srcdir)/unit1305.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1305-unit1305.Tpo $(DEPDIR)/unit1305-unit1305.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1305.c' object='unit1305-unit1305.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1305_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1305-unit1305.obj `if test -f 'unit1305.c'; then $(CYGPATH_W) 'unit1305.c'; else $(CYGPATH_W) '$(srcdir)/unit1305.c'; fi`
-
-../libtest/unit1305-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1305_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1305-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1305-first.Tpo -c -o ../libtest/unit1305-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1305-first.Tpo ../libtest/$(DEPDIR)/unit1305-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1305-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1305_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1305-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1305-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1305_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1305-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1305-first.Tpo -c -o ../libtest/unit1305-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1305-first.Tpo ../libtest/$(DEPDIR)/unit1305-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1305-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1305_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1305-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1307-unit1307.o: unit1307.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1307_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1307-unit1307.o -MD -MP -MF $(DEPDIR)/unit1307-unit1307.Tpo -c -o unit1307-unit1307.o `test -f 'unit1307.c' || echo '$(srcdir)/'`unit1307.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1307-unit1307.Tpo $(DEPDIR)/unit1307-unit1307.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1307.c' object='unit1307-unit1307.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1307_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1307-unit1307.o `test -f 'unit1307.c' || echo '$(srcdir)/'`unit1307.c
-
-unit1307-unit1307.obj: unit1307.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1307_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1307-unit1307.obj -MD -MP -MF $(DEPDIR)/unit1307-unit1307.Tpo -c -o unit1307-unit1307.obj `if test -f 'unit1307.c'; then $(CYGPATH_W) 'unit1307.c'; else $(CYGPATH_W) '$(srcdir)/unit1307.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1307-unit1307.Tpo $(DEPDIR)/unit1307-unit1307.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1307.c' object='unit1307-unit1307.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1307_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1307-unit1307.obj `if test -f 'unit1307.c'; then $(CYGPATH_W) 'unit1307.c'; else $(CYGPATH_W) '$(srcdir)/unit1307.c'; fi`
-
-../libtest/unit1307-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1307_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1307-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1307-first.Tpo -c -o ../libtest/unit1307-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1307-first.Tpo ../libtest/$(DEPDIR)/unit1307-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1307-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1307_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1307-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1307-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1307_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1307-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1307-first.Tpo -c -o ../libtest/unit1307-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1307-first.Tpo ../libtest/$(DEPDIR)/unit1307-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1307-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1307_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1307-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1308-unit1308.o: unit1308.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1308_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1308-unit1308.o -MD -MP -MF $(DEPDIR)/unit1308-unit1308.Tpo -c -o unit1308-unit1308.o `test -f 'unit1308.c' || echo '$(srcdir)/'`unit1308.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1308-unit1308.Tpo $(DEPDIR)/unit1308-unit1308.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1308.c' object='unit1308-unit1308.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1308_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1308-unit1308.o `test -f 'unit1308.c' || echo '$(srcdir)/'`unit1308.c
-
-unit1308-unit1308.obj: unit1308.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1308_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1308-unit1308.obj -MD -MP -MF $(DEPDIR)/unit1308-unit1308.Tpo -c -o unit1308-unit1308.obj `if test -f 'unit1308.c'; then $(CYGPATH_W) 'unit1308.c'; else $(CYGPATH_W) '$(srcdir)/unit1308.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1308-unit1308.Tpo $(DEPDIR)/unit1308-unit1308.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1308.c' object='unit1308-unit1308.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1308_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1308-unit1308.obj `if test -f 'unit1308.c'; then $(CYGPATH_W) 'unit1308.c'; else $(CYGPATH_W) '$(srcdir)/unit1308.c'; fi`
-
-../libtest/unit1308-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1308_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1308-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1308-first.Tpo -c -o ../libtest/unit1308-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1308-first.Tpo ../libtest/$(DEPDIR)/unit1308-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1308-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1308_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1308-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1308-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1308_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1308-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1308-first.Tpo -c -o ../libtest/unit1308-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1308-first.Tpo ../libtest/$(DEPDIR)/unit1308-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1308-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1308_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1308-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1309-unit1309.o: unit1309.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1309_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1309-unit1309.o -MD -MP -MF $(DEPDIR)/unit1309-unit1309.Tpo -c -o unit1309-unit1309.o `test -f 'unit1309.c' || echo '$(srcdir)/'`unit1309.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1309-unit1309.Tpo $(DEPDIR)/unit1309-unit1309.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1309.c' object='unit1309-unit1309.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1309_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1309-unit1309.o `test -f 'unit1309.c' || echo '$(srcdir)/'`unit1309.c
-
-unit1309-unit1309.obj: unit1309.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1309_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1309-unit1309.obj -MD -MP -MF $(DEPDIR)/unit1309-unit1309.Tpo -c -o unit1309-unit1309.obj `if test -f 'unit1309.c'; then $(CYGPATH_W) 'unit1309.c'; else $(CYGPATH_W) '$(srcdir)/unit1309.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1309-unit1309.Tpo $(DEPDIR)/unit1309-unit1309.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1309.c' object='unit1309-unit1309.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1309_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1309-unit1309.obj `if test -f 'unit1309.c'; then $(CYGPATH_W) 'unit1309.c'; else $(CYGPATH_W) '$(srcdir)/unit1309.c'; fi`
-
-../libtest/unit1309-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1309_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1309-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1309-first.Tpo -c -o ../libtest/unit1309-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1309-first.Tpo ../libtest/$(DEPDIR)/unit1309-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1309-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1309_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1309-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1309-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1309_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1309-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1309-first.Tpo -c -o ../libtest/unit1309-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1309-first.Tpo ../libtest/$(DEPDIR)/unit1309-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1309-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1309_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1309-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1323-unit1323.o: unit1323.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1323_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1323-unit1323.o -MD -MP -MF $(DEPDIR)/unit1323-unit1323.Tpo -c -o unit1323-unit1323.o `test -f 'unit1323.c' || echo '$(srcdir)/'`unit1323.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1323-unit1323.Tpo $(DEPDIR)/unit1323-unit1323.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1323.c' object='unit1323-unit1323.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1323_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1323-unit1323.o `test -f 'unit1323.c' || echo '$(srcdir)/'`unit1323.c
-
-unit1323-unit1323.obj: unit1323.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1323_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1323-unit1323.obj -MD -MP -MF $(DEPDIR)/unit1323-unit1323.Tpo -c -o unit1323-unit1323.obj `if test -f 'unit1323.c'; then $(CYGPATH_W) 'unit1323.c'; else $(CYGPATH_W) '$(srcdir)/unit1323.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1323-unit1323.Tpo $(DEPDIR)/unit1323-unit1323.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1323.c' object='unit1323-unit1323.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1323_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1323-unit1323.obj `if test -f 'unit1323.c'; then $(CYGPATH_W) 'unit1323.c'; else $(CYGPATH_W) '$(srcdir)/unit1323.c'; fi`
-
-../libtest/unit1323-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1323_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1323-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1323-first.Tpo -c -o ../libtest/unit1323-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1323-first.Tpo ../libtest/$(DEPDIR)/unit1323-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1323-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1323_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1323-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1323-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1323_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1323-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1323-first.Tpo -c -o ../libtest/unit1323-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1323-first.Tpo ../libtest/$(DEPDIR)/unit1323-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1323-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1323_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1323-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1330-unit1330.o: unit1330.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1330_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1330-unit1330.o -MD -MP -MF $(DEPDIR)/unit1330-unit1330.Tpo -c -o unit1330-unit1330.o `test -f 'unit1330.c' || echo '$(srcdir)/'`unit1330.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1330-unit1330.Tpo $(DEPDIR)/unit1330-unit1330.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1330.c' object='unit1330-unit1330.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1330_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1330-unit1330.o `test -f 'unit1330.c' || echo '$(srcdir)/'`unit1330.c
-
-unit1330-unit1330.obj: unit1330.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1330_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1330-unit1330.obj -MD -MP -MF $(DEPDIR)/unit1330-unit1330.Tpo -c -o unit1330-unit1330.obj `if test -f 'unit1330.c'; then $(CYGPATH_W) 'unit1330.c'; else $(CYGPATH_W) '$(srcdir)/unit1330.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1330-unit1330.Tpo $(DEPDIR)/unit1330-unit1330.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1330.c' object='unit1330-unit1330.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1330_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1330-unit1330.obj `if test -f 'unit1330.c'; then $(CYGPATH_W) 'unit1330.c'; else $(CYGPATH_W) '$(srcdir)/unit1330.c'; fi`
-
-../libtest/unit1330-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1330_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1330-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1330-first.Tpo -c -o ../libtest/unit1330-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1330-first.Tpo ../libtest/$(DEPDIR)/unit1330-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1330-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1330_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1330-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1330-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1330_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1330-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1330-first.Tpo -c -o ../libtest/unit1330-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1330-first.Tpo ../libtest/$(DEPDIR)/unit1330-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1330-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1330_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1330-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1394-unit1394.o: unit1394.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1394_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1394-unit1394.o -MD -MP -MF $(DEPDIR)/unit1394-unit1394.Tpo -c -o unit1394-unit1394.o `test -f 'unit1394.c' || echo '$(srcdir)/'`unit1394.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1394-unit1394.Tpo $(DEPDIR)/unit1394-unit1394.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1394.c' object='unit1394-unit1394.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1394_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1394-unit1394.o `test -f 'unit1394.c' || echo '$(srcdir)/'`unit1394.c
-
-unit1394-unit1394.obj: unit1394.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1394_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1394-unit1394.obj -MD -MP -MF $(DEPDIR)/unit1394-unit1394.Tpo -c -o unit1394-unit1394.obj `if test -f 'unit1394.c'; then $(CYGPATH_W) 'unit1394.c'; else $(CYGPATH_W) '$(srcdir)/unit1394.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1394-unit1394.Tpo $(DEPDIR)/unit1394-unit1394.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1394.c' object='unit1394-unit1394.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1394_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1394-unit1394.obj `if test -f 'unit1394.c'; then $(CYGPATH_W) 'unit1394.c'; else $(CYGPATH_W) '$(srcdir)/unit1394.c'; fi`
-
-../libtest/unit1394-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1394_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1394-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1394-first.Tpo -c -o ../libtest/unit1394-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1394-first.Tpo ../libtest/$(DEPDIR)/unit1394-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1394-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1394_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1394-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1394-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1394_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1394-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1394-first.Tpo -c -o ../libtest/unit1394-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1394-first.Tpo ../libtest/$(DEPDIR)/unit1394-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1394-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1394_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1394-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1395-unit1395.o: unit1395.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1395_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1395-unit1395.o -MD -MP -MF $(DEPDIR)/unit1395-unit1395.Tpo -c -o unit1395-unit1395.o `test -f 'unit1395.c' || echo '$(srcdir)/'`unit1395.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1395-unit1395.Tpo $(DEPDIR)/unit1395-unit1395.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1395.c' object='unit1395-unit1395.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1395_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1395-unit1395.o `test -f 'unit1395.c' || echo '$(srcdir)/'`unit1395.c
-
-unit1395-unit1395.obj: unit1395.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1395_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1395-unit1395.obj -MD -MP -MF $(DEPDIR)/unit1395-unit1395.Tpo -c -o unit1395-unit1395.obj `if test -f 'unit1395.c'; then $(CYGPATH_W) 'unit1395.c'; else $(CYGPATH_W) '$(srcdir)/unit1395.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1395-unit1395.Tpo $(DEPDIR)/unit1395-unit1395.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1395.c' object='unit1395-unit1395.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1395_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1395-unit1395.obj `if test -f 'unit1395.c'; then $(CYGPATH_W) 'unit1395.c'; else $(CYGPATH_W) '$(srcdir)/unit1395.c'; fi`
-
-../libtest/unit1395-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1395_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1395-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1395-first.Tpo -c -o ../libtest/unit1395-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1395-first.Tpo ../libtest/$(DEPDIR)/unit1395-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1395-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1395_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1395-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1395-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1395_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1395-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1395-first.Tpo -c -o ../libtest/unit1395-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1395-first.Tpo ../libtest/$(DEPDIR)/unit1395-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1395-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1395_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1395-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1396-unit1396.o: unit1396.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1396_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1396-unit1396.o -MD -MP -MF $(DEPDIR)/unit1396-unit1396.Tpo -c -o unit1396-unit1396.o `test -f 'unit1396.c' || echo '$(srcdir)/'`unit1396.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1396-unit1396.Tpo $(DEPDIR)/unit1396-unit1396.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1396.c' object='unit1396-unit1396.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1396_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1396-unit1396.o `test -f 'unit1396.c' || echo '$(srcdir)/'`unit1396.c
-
-unit1396-unit1396.obj: unit1396.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1396_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1396-unit1396.obj -MD -MP -MF $(DEPDIR)/unit1396-unit1396.Tpo -c -o unit1396-unit1396.obj `if test -f 'unit1396.c'; then $(CYGPATH_W) 'unit1396.c'; else $(CYGPATH_W) '$(srcdir)/unit1396.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1396-unit1396.Tpo $(DEPDIR)/unit1396-unit1396.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1396.c' object='unit1396-unit1396.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1396_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1396-unit1396.obj `if test -f 'unit1396.c'; then $(CYGPATH_W) 'unit1396.c'; else $(CYGPATH_W) '$(srcdir)/unit1396.c'; fi`
-
-../libtest/unit1396-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1396_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1396-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1396-first.Tpo -c -o ../libtest/unit1396-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1396-first.Tpo ../libtest/$(DEPDIR)/unit1396-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1396-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1396_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1396-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1396-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1396_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1396-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1396-first.Tpo -c -o ../libtest/unit1396-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1396-first.Tpo ../libtest/$(DEPDIR)/unit1396-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1396-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1396_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1396-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1397-unit1397.o: unit1397.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1397_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1397-unit1397.o -MD -MP -MF $(DEPDIR)/unit1397-unit1397.Tpo -c -o unit1397-unit1397.o `test -f 'unit1397.c' || echo '$(srcdir)/'`unit1397.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1397-unit1397.Tpo $(DEPDIR)/unit1397-unit1397.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1397.c' object='unit1397-unit1397.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1397_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1397-unit1397.o `test -f 'unit1397.c' || echo '$(srcdir)/'`unit1397.c
-
-unit1397-unit1397.obj: unit1397.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1397_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1397-unit1397.obj -MD -MP -MF $(DEPDIR)/unit1397-unit1397.Tpo -c -o unit1397-unit1397.obj `if test -f 'unit1397.c'; then $(CYGPATH_W) 'unit1397.c'; else $(CYGPATH_W) '$(srcdir)/unit1397.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1397-unit1397.Tpo $(DEPDIR)/unit1397-unit1397.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1397.c' object='unit1397-unit1397.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1397_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1397-unit1397.obj `if test -f 'unit1397.c'; then $(CYGPATH_W) 'unit1397.c'; else $(CYGPATH_W) '$(srcdir)/unit1397.c'; fi`
-
-../libtest/unit1397-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1397_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1397-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1397-first.Tpo -c -o ../libtest/unit1397-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1397-first.Tpo ../libtest/$(DEPDIR)/unit1397-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1397-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1397_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1397-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1397-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1397_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1397-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1397-first.Tpo -c -o ../libtest/unit1397-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1397-first.Tpo ../libtest/$(DEPDIR)/unit1397-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1397-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1397_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1397-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1398-unit1398.o: unit1398.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1398_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1398-unit1398.o -MD -MP -MF $(DEPDIR)/unit1398-unit1398.Tpo -c -o unit1398-unit1398.o `test -f 'unit1398.c' || echo '$(srcdir)/'`unit1398.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1398-unit1398.Tpo $(DEPDIR)/unit1398-unit1398.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1398.c' object='unit1398-unit1398.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1398_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1398-unit1398.o `test -f 'unit1398.c' || echo '$(srcdir)/'`unit1398.c
-
-unit1398-unit1398.obj: unit1398.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1398_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1398-unit1398.obj -MD -MP -MF $(DEPDIR)/unit1398-unit1398.Tpo -c -o unit1398-unit1398.obj `if test -f 'unit1398.c'; then $(CYGPATH_W) 'unit1398.c'; else $(CYGPATH_W) '$(srcdir)/unit1398.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1398-unit1398.Tpo $(DEPDIR)/unit1398-unit1398.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1398.c' object='unit1398-unit1398.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1398_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1398-unit1398.obj `if test -f 'unit1398.c'; then $(CYGPATH_W) 'unit1398.c'; else $(CYGPATH_W) '$(srcdir)/unit1398.c'; fi`
-
-../libtest/unit1398-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1398_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1398-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1398-first.Tpo -c -o ../libtest/unit1398-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1398-first.Tpo ../libtest/$(DEPDIR)/unit1398-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1398-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1398_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1398-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1398-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1398_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1398-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1398-first.Tpo -c -o ../libtest/unit1398-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1398-first.Tpo ../libtest/$(DEPDIR)/unit1398-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1398-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1398_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1398-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1399-unit1399.o: unit1399.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1399_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1399-unit1399.o -MD -MP -MF $(DEPDIR)/unit1399-unit1399.Tpo -c -o unit1399-unit1399.o `test -f 'unit1399.c' || echo '$(srcdir)/'`unit1399.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1399-unit1399.Tpo $(DEPDIR)/unit1399-unit1399.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1399.c' object='unit1399-unit1399.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1399_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1399-unit1399.o `test -f 'unit1399.c' || echo '$(srcdir)/'`unit1399.c
-
-unit1399-unit1399.obj: unit1399.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1399_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1399-unit1399.obj -MD -MP -MF $(DEPDIR)/unit1399-unit1399.Tpo -c -o unit1399-unit1399.obj `if test -f 'unit1399.c'; then $(CYGPATH_W) 'unit1399.c'; else $(CYGPATH_W) '$(srcdir)/unit1399.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1399-unit1399.Tpo $(DEPDIR)/unit1399-unit1399.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1399.c' object='unit1399-unit1399.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1399_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1399-unit1399.obj `if test -f 'unit1399.c'; then $(CYGPATH_W) 'unit1399.c'; else $(CYGPATH_W) '$(srcdir)/unit1399.c'; fi`
-
-../libtest/unit1399-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1399_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1399-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1399-first.Tpo -c -o ../libtest/unit1399-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1399-first.Tpo ../libtest/$(DEPDIR)/unit1399-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1399-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1399_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1399-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1399-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1399_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1399-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1399-first.Tpo -c -o ../libtest/unit1399-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1399-first.Tpo ../libtest/$(DEPDIR)/unit1399-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1399-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1399_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1399-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1600-unit1600.o: unit1600.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1600_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1600-unit1600.o -MD -MP -MF $(DEPDIR)/unit1600-unit1600.Tpo -c -o unit1600-unit1600.o `test -f 'unit1600.c' || echo '$(srcdir)/'`unit1600.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1600-unit1600.Tpo $(DEPDIR)/unit1600-unit1600.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1600.c' object='unit1600-unit1600.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1600_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1600-unit1600.o `test -f 'unit1600.c' || echo '$(srcdir)/'`unit1600.c
-
-unit1600-unit1600.obj: unit1600.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1600_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1600-unit1600.obj -MD -MP -MF $(DEPDIR)/unit1600-unit1600.Tpo -c -o unit1600-unit1600.obj `if test -f 'unit1600.c'; then $(CYGPATH_W) 'unit1600.c'; else $(CYGPATH_W) '$(srcdir)/unit1600.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1600-unit1600.Tpo $(DEPDIR)/unit1600-unit1600.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1600.c' object='unit1600-unit1600.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1600_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1600-unit1600.obj `if test -f 'unit1600.c'; then $(CYGPATH_W) 'unit1600.c'; else $(CYGPATH_W) '$(srcdir)/unit1600.c'; fi`
-
-../libtest/unit1600-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1600_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1600-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1600-first.Tpo -c -o ../libtest/unit1600-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1600-first.Tpo ../libtest/$(DEPDIR)/unit1600-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1600-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1600_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1600-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1600-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1600_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1600-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1600-first.Tpo -c -o ../libtest/unit1600-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1600-first.Tpo ../libtest/$(DEPDIR)/unit1600-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1600-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1600_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1600-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1601-unit1601.o: unit1601.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1601_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1601-unit1601.o -MD -MP -MF $(DEPDIR)/unit1601-unit1601.Tpo -c -o unit1601-unit1601.o `test -f 'unit1601.c' || echo '$(srcdir)/'`unit1601.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1601-unit1601.Tpo $(DEPDIR)/unit1601-unit1601.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1601.c' object='unit1601-unit1601.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1601_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1601-unit1601.o `test -f 'unit1601.c' || echo '$(srcdir)/'`unit1601.c
-
-unit1601-unit1601.obj: unit1601.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1601_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1601-unit1601.obj -MD -MP -MF $(DEPDIR)/unit1601-unit1601.Tpo -c -o unit1601-unit1601.obj `if test -f 'unit1601.c'; then $(CYGPATH_W) 'unit1601.c'; else $(CYGPATH_W) '$(srcdir)/unit1601.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1601-unit1601.Tpo $(DEPDIR)/unit1601-unit1601.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1601.c' object='unit1601-unit1601.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1601_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1601-unit1601.obj `if test -f 'unit1601.c'; then $(CYGPATH_W) 'unit1601.c'; else $(CYGPATH_W) '$(srcdir)/unit1601.c'; fi`
-
-../libtest/unit1601-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1601_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1601-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1601-first.Tpo -c -o ../libtest/unit1601-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1601-first.Tpo ../libtest/$(DEPDIR)/unit1601-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1601-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1601_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1601-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1601-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1601_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1601-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1601-first.Tpo -c -o ../libtest/unit1601-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1601-first.Tpo ../libtest/$(DEPDIR)/unit1601-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1601-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1601_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1601-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1602-unit1602.o: unit1602.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1602_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1602-unit1602.o -MD -MP -MF $(DEPDIR)/unit1602-unit1602.Tpo -c -o unit1602-unit1602.o `test -f 'unit1602.c' || echo '$(srcdir)/'`unit1602.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1602-unit1602.Tpo $(DEPDIR)/unit1602-unit1602.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1602.c' object='unit1602-unit1602.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1602_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1602-unit1602.o `test -f 'unit1602.c' || echo '$(srcdir)/'`unit1602.c
-
-unit1602-unit1602.obj: unit1602.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1602_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1602-unit1602.obj -MD -MP -MF $(DEPDIR)/unit1602-unit1602.Tpo -c -o unit1602-unit1602.obj `if test -f 'unit1602.c'; then $(CYGPATH_W) 'unit1602.c'; else $(CYGPATH_W) '$(srcdir)/unit1602.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1602-unit1602.Tpo $(DEPDIR)/unit1602-unit1602.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1602.c' object='unit1602-unit1602.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1602_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1602-unit1602.obj `if test -f 'unit1602.c'; then $(CYGPATH_W) 'unit1602.c'; else $(CYGPATH_W) '$(srcdir)/unit1602.c'; fi`
-
-../libtest/unit1602-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1602_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1602-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1602-first.Tpo -c -o ../libtest/unit1602-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1602-first.Tpo ../libtest/$(DEPDIR)/unit1602-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1602-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1602_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1602-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1602-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1602_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1602-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1602-first.Tpo -c -o ../libtest/unit1602-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1602-first.Tpo ../libtest/$(DEPDIR)/unit1602-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1602-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1602_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1602-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1603-unit1603.o: unit1603.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1603_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1603-unit1603.o -MD -MP -MF $(DEPDIR)/unit1603-unit1603.Tpo -c -o unit1603-unit1603.o `test -f 'unit1603.c' || echo '$(srcdir)/'`unit1603.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1603-unit1603.Tpo $(DEPDIR)/unit1603-unit1603.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1603.c' object='unit1603-unit1603.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1603_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1603-unit1603.o `test -f 'unit1603.c' || echo '$(srcdir)/'`unit1603.c
-
-unit1603-unit1603.obj: unit1603.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1603_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1603-unit1603.obj -MD -MP -MF $(DEPDIR)/unit1603-unit1603.Tpo -c -o unit1603-unit1603.obj `if test -f 'unit1603.c'; then $(CYGPATH_W) 'unit1603.c'; else $(CYGPATH_W) '$(srcdir)/unit1603.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1603-unit1603.Tpo $(DEPDIR)/unit1603-unit1603.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1603.c' object='unit1603-unit1603.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1603_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1603-unit1603.obj `if test -f 'unit1603.c'; then $(CYGPATH_W) 'unit1603.c'; else $(CYGPATH_W) '$(srcdir)/unit1603.c'; fi`
-
-../libtest/unit1603-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1603_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1603-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1603-first.Tpo -c -o ../libtest/unit1603-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1603-first.Tpo ../libtest/$(DEPDIR)/unit1603-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1603-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1603_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1603-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1603-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1603_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1603-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1603-first.Tpo -c -o ../libtest/unit1603-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1603-first.Tpo ../libtest/$(DEPDIR)/unit1603-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1603-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1603_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1603-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1604-unit1604.o: unit1604.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1604_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1604-unit1604.o -MD -MP -MF $(DEPDIR)/unit1604-unit1604.Tpo -c -o unit1604-unit1604.o `test -f 'unit1604.c' || echo '$(srcdir)/'`unit1604.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1604-unit1604.Tpo $(DEPDIR)/unit1604-unit1604.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1604.c' object='unit1604-unit1604.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1604_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1604-unit1604.o `test -f 'unit1604.c' || echo '$(srcdir)/'`unit1604.c
-
-unit1604-unit1604.obj: unit1604.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1604_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1604-unit1604.obj -MD -MP -MF $(DEPDIR)/unit1604-unit1604.Tpo -c -o unit1604-unit1604.obj `if test -f 'unit1604.c'; then $(CYGPATH_W) 'unit1604.c'; else $(CYGPATH_W) '$(srcdir)/unit1604.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1604-unit1604.Tpo $(DEPDIR)/unit1604-unit1604.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1604.c' object='unit1604-unit1604.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1604_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1604-unit1604.obj `if test -f 'unit1604.c'; then $(CYGPATH_W) 'unit1604.c'; else $(CYGPATH_W) '$(srcdir)/unit1604.c'; fi`
-
-../libtest/unit1604-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1604_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1604-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1604-first.Tpo -c -o ../libtest/unit1604-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1604-first.Tpo ../libtest/$(DEPDIR)/unit1604-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1604-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1604_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1604-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1604-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1604_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1604-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1604-first.Tpo -c -o ../libtest/unit1604-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1604-first.Tpo ../libtest/$(DEPDIR)/unit1604-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1604-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1604_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1604-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1605-unit1605.o: unit1605.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1605_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1605-unit1605.o -MD -MP -MF $(DEPDIR)/unit1605-unit1605.Tpo -c -o unit1605-unit1605.o `test -f 'unit1605.c' || echo '$(srcdir)/'`unit1605.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1605-unit1605.Tpo $(DEPDIR)/unit1605-unit1605.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1605.c' object='unit1605-unit1605.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1605_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1605-unit1605.o `test -f 'unit1605.c' || echo '$(srcdir)/'`unit1605.c
-
-unit1605-unit1605.obj: unit1605.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1605_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1605-unit1605.obj -MD -MP -MF $(DEPDIR)/unit1605-unit1605.Tpo -c -o unit1605-unit1605.obj `if test -f 'unit1605.c'; then $(CYGPATH_W) 'unit1605.c'; else $(CYGPATH_W) '$(srcdir)/unit1605.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1605-unit1605.Tpo $(DEPDIR)/unit1605-unit1605.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1605.c' object='unit1605-unit1605.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1605_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1605-unit1605.obj `if test -f 'unit1605.c'; then $(CYGPATH_W) 'unit1605.c'; else $(CYGPATH_W) '$(srcdir)/unit1605.c'; fi`
-
-../libtest/unit1605-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1605_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1605-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1605-first.Tpo -c -o ../libtest/unit1605-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1605-first.Tpo ../libtest/$(DEPDIR)/unit1605-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1605-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1605_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1605-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1605-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1605_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1605-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1605-first.Tpo -c -o ../libtest/unit1605-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1605-first.Tpo ../libtest/$(DEPDIR)/unit1605-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1605-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1605_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1605-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1606-unit1606.o: unit1606.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1606_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1606-unit1606.o -MD -MP -MF $(DEPDIR)/unit1606-unit1606.Tpo -c -o unit1606-unit1606.o `test -f 'unit1606.c' || echo '$(srcdir)/'`unit1606.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1606-unit1606.Tpo $(DEPDIR)/unit1606-unit1606.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1606.c' object='unit1606-unit1606.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1606_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1606-unit1606.o `test -f 'unit1606.c' || echo '$(srcdir)/'`unit1606.c
-
-unit1606-unit1606.obj: unit1606.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1606_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1606-unit1606.obj -MD -MP -MF $(DEPDIR)/unit1606-unit1606.Tpo -c -o unit1606-unit1606.obj `if test -f 'unit1606.c'; then $(CYGPATH_W) 'unit1606.c'; else $(CYGPATH_W) '$(srcdir)/unit1606.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1606-unit1606.Tpo $(DEPDIR)/unit1606-unit1606.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1606.c' object='unit1606-unit1606.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1606_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1606-unit1606.obj `if test -f 'unit1606.c'; then $(CYGPATH_W) 'unit1606.c'; else $(CYGPATH_W) '$(srcdir)/unit1606.c'; fi`
-
-../libtest/unit1606-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1606_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1606-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1606-first.Tpo -c -o ../libtest/unit1606-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1606-first.Tpo ../libtest/$(DEPDIR)/unit1606-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1606-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1606_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1606-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1606-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1606_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1606-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1606-first.Tpo -c -o ../libtest/unit1606-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1606-first.Tpo ../libtest/$(DEPDIR)/unit1606-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1606-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1606_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1606-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1607-unit1607.o: unit1607.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1607_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1607-unit1607.o -MD -MP -MF $(DEPDIR)/unit1607-unit1607.Tpo -c -o unit1607-unit1607.o `test -f 'unit1607.c' || echo '$(srcdir)/'`unit1607.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1607-unit1607.Tpo $(DEPDIR)/unit1607-unit1607.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1607.c' object='unit1607-unit1607.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1607_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1607-unit1607.o `test -f 'unit1607.c' || echo '$(srcdir)/'`unit1607.c
-
-unit1607-unit1607.obj: unit1607.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1607_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1607-unit1607.obj -MD -MP -MF $(DEPDIR)/unit1607-unit1607.Tpo -c -o unit1607-unit1607.obj `if test -f 'unit1607.c'; then $(CYGPATH_W) 'unit1607.c'; else $(CYGPATH_W) '$(srcdir)/unit1607.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1607-unit1607.Tpo $(DEPDIR)/unit1607-unit1607.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1607.c' object='unit1607-unit1607.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1607_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1607-unit1607.obj `if test -f 'unit1607.c'; then $(CYGPATH_W) 'unit1607.c'; else $(CYGPATH_W) '$(srcdir)/unit1607.c'; fi`
-
-../libtest/unit1607-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1607_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1607-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1607-first.Tpo -c -o ../libtest/unit1607-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1607-first.Tpo ../libtest/$(DEPDIR)/unit1607-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1607-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1607_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1607-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1607-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1607_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1607-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1607-first.Tpo -c -o ../libtest/unit1607-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1607-first.Tpo ../libtest/$(DEPDIR)/unit1607-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1607-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1607_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1607-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1608-unit1608.o: unit1608.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1608_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1608-unit1608.o -MD -MP -MF $(DEPDIR)/unit1608-unit1608.Tpo -c -o unit1608-unit1608.o `test -f 'unit1608.c' || echo '$(srcdir)/'`unit1608.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1608-unit1608.Tpo $(DEPDIR)/unit1608-unit1608.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1608.c' object='unit1608-unit1608.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1608_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1608-unit1608.o `test -f 'unit1608.c' || echo '$(srcdir)/'`unit1608.c
-
-unit1608-unit1608.obj: unit1608.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1608_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1608-unit1608.obj -MD -MP -MF $(DEPDIR)/unit1608-unit1608.Tpo -c -o unit1608-unit1608.obj `if test -f 'unit1608.c'; then $(CYGPATH_W) 'unit1608.c'; else $(CYGPATH_W) '$(srcdir)/unit1608.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1608-unit1608.Tpo $(DEPDIR)/unit1608-unit1608.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1608.c' object='unit1608-unit1608.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1608_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1608-unit1608.obj `if test -f 'unit1608.c'; then $(CYGPATH_W) 'unit1608.c'; else $(CYGPATH_W) '$(srcdir)/unit1608.c'; fi`
-
-../libtest/unit1608-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1608_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1608-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1608-first.Tpo -c -o ../libtest/unit1608-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1608-first.Tpo ../libtest/$(DEPDIR)/unit1608-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1608-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1608_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1608-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1608-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1608_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1608-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1608-first.Tpo -c -o ../libtest/unit1608-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1608-first.Tpo ../libtest/$(DEPDIR)/unit1608-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1608-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1608_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1608-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1609-unit1609.o: unit1609.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1609_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1609-unit1609.o -MD -MP -MF $(DEPDIR)/unit1609-unit1609.Tpo -c -o unit1609-unit1609.o `test -f 'unit1609.c' || echo '$(srcdir)/'`unit1609.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1609-unit1609.Tpo $(DEPDIR)/unit1609-unit1609.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1609.c' object='unit1609-unit1609.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1609_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1609-unit1609.o `test -f 'unit1609.c' || echo '$(srcdir)/'`unit1609.c
-
-unit1609-unit1609.obj: unit1609.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1609_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1609-unit1609.obj -MD -MP -MF $(DEPDIR)/unit1609-unit1609.Tpo -c -o unit1609-unit1609.obj `if test -f 'unit1609.c'; then $(CYGPATH_W) 'unit1609.c'; else $(CYGPATH_W) '$(srcdir)/unit1609.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1609-unit1609.Tpo $(DEPDIR)/unit1609-unit1609.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1609.c' object='unit1609-unit1609.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1609_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1609-unit1609.obj `if test -f 'unit1609.c'; then $(CYGPATH_W) 'unit1609.c'; else $(CYGPATH_W) '$(srcdir)/unit1609.c'; fi`
-
-../libtest/unit1609-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1609_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1609-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1609-first.Tpo -c -o ../libtest/unit1609-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1609-first.Tpo ../libtest/$(DEPDIR)/unit1609-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1609-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1609_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1609-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1609-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1609_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1609-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1609-first.Tpo -c -o ../libtest/unit1609-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1609-first.Tpo ../libtest/$(DEPDIR)/unit1609-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1609-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1609_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1609-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1610-unit1610.o: unit1610.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1610_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1610-unit1610.o -MD -MP -MF $(DEPDIR)/unit1610-unit1610.Tpo -c -o unit1610-unit1610.o `test -f 'unit1610.c' || echo '$(srcdir)/'`unit1610.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1610-unit1610.Tpo $(DEPDIR)/unit1610-unit1610.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1610.c' object='unit1610-unit1610.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1610_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1610-unit1610.o `test -f 'unit1610.c' || echo '$(srcdir)/'`unit1610.c
-
-unit1610-unit1610.obj: unit1610.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1610_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1610-unit1610.obj -MD -MP -MF $(DEPDIR)/unit1610-unit1610.Tpo -c -o unit1610-unit1610.obj `if test -f 'unit1610.c'; then $(CYGPATH_W) 'unit1610.c'; else $(CYGPATH_W) '$(srcdir)/unit1610.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1610-unit1610.Tpo $(DEPDIR)/unit1610-unit1610.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1610.c' object='unit1610-unit1610.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1610_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1610-unit1610.obj `if test -f 'unit1610.c'; then $(CYGPATH_W) 'unit1610.c'; else $(CYGPATH_W) '$(srcdir)/unit1610.c'; fi`
-
-../libtest/unit1610-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1610_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1610-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1610-first.Tpo -c -o ../libtest/unit1610-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1610-first.Tpo ../libtest/$(DEPDIR)/unit1610-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1610-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1610_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1610-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1610-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1610_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1610-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1610-first.Tpo -c -o ../libtest/unit1610-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1610-first.Tpo ../libtest/$(DEPDIR)/unit1610-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1610-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1610_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1610-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1611-unit1611.o: unit1611.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1611_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1611-unit1611.o -MD -MP -MF $(DEPDIR)/unit1611-unit1611.Tpo -c -o unit1611-unit1611.o `test -f 'unit1611.c' || echo '$(srcdir)/'`unit1611.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1611-unit1611.Tpo $(DEPDIR)/unit1611-unit1611.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1611.c' object='unit1611-unit1611.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1611_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1611-unit1611.o `test -f 'unit1611.c' || echo '$(srcdir)/'`unit1611.c
-
-unit1611-unit1611.obj: unit1611.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1611_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1611-unit1611.obj -MD -MP -MF $(DEPDIR)/unit1611-unit1611.Tpo -c -o unit1611-unit1611.obj `if test -f 'unit1611.c'; then $(CYGPATH_W) 'unit1611.c'; else $(CYGPATH_W) '$(srcdir)/unit1611.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1611-unit1611.Tpo $(DEPDIR)/unit1611-unit1611.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1611.c' object='unit1611-unit1611.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1611_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1611-unit1611.obj `if test -f 'unit1611.c'; then $(CYGPATH_W) 'unit1611.c'; else $(CYGPATH_W) '$(srcdir)/unit1611.c'; fi`
-
-../libtest/unit1611-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1611_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1611-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1611-first.Tpo -c -o ../libtest/unit1611-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1611-first.Tpo ../libtest/$(DEPDIR)/unit1611-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1611-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1611_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1611-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1611-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1611_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1611-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1611-first.Tpo -c -o ../libtest/unit1611-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1611-first.Tpo ../libtest/$(DEPDIR)/unit1611-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1611-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1611_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1611-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1612-unit1612.o: unit1612.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1612_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1612-unit1612.o -MD -MP -MF $(DEPDIR)/unit1612-unit1612.Tpo -c -o unit1612-unit1612.o `test -f 'unit1612.c' || echo '$(srcdir)/'`unit1612.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1612-unit1612.Tpo $(DEPDIR)/unit1612-unit1612.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1612.c' object='unit1612-unit1612.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1612_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1612-unit1612.o `test -f 'unit1612.c' || echo '$(srcdir)/'`unit1612.c
-
-unit1612-unit1612.obj: unit1612.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1612_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1612-unit1612.obj -MD -MP -MF $(DEPDIR)/unit1612-unit1612.Tpo -c -o unit1612-unit1612.obj `if test -f 'unit1612.c'; then $(CYGPATH_W) 'unit1612.c'; else $(CYGPATH_W) '$(srcdir)/unit1612.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1612-unit1612.Tpo $(DEPDIR)/unit1612-unit1612.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1612.c' object='unit1612-unit1612.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1612_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1612-unit1612.obj `if test -f 'unit1612.c'; then $(CYGPATH_W) 'unit1612.c'; else $(CYGPATH_W) '$(srcdir)/unit1612.c'; fi`
-
-../libtest/unit1612-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1612_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1612-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1612-first.Tpo -c -o ../libtest/unit1612-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1612-first.Tpo ../libtest/$(DEPDIR)/unit1612-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1612-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1612_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1612-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1612-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1612_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1612-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1612-first.Tpo -c -o ../libtest/unit1612-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1612-first.Tpo ../libtest/$(DEPDIR)/unit1612-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1612-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1612_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1612-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1614-unit1614.o: unit1614.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1614_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1614-unit1614.o -MD -MP -MF $(DEPDIR)/unit1614-unit1614.Tpo -c -o unit1614-unit1614.o `test -f 'unit1614.c' || echo '$(srcdir)/'`unit1614.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1614-unit1614.Tpo $(DEPDIR)/unit1614-unit1614.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1614.c' object='unit1614-unit1614.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1614_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1614-unit1614.o `test -f 'unit1614.c' || echo '$(srcdir)/'`unit1614.c
-
-unit1614-unit1614.obj: unit1614.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1614_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1614-unit1614.obj -MD -MP -MF $(DEPDIR)/unit1614-unit1614.Tpo -c -o unit1614-unit1614.obj `if test -f 'unit1614.c'; then $(CYGPATH_W) 'unit1614.c'; else $(CYGPATH_W) '$(srcdir)/unit1614.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1614-unit1614.Tpo $(DEPDIR)/unit1614-unit1614.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1614.c' object='unit1614-unit1614.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1614_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1614-unit1614.obj `if test -f 'unit1614.c'; then $(CYGPATH_W) 'unit1614.c'; else $(CYGPATH_W) '$(srcdir)/unit1614.c'; fi`
-
-../libtest/unit1614-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1614_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1614-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1614-first.Tpo -c -o ../libtest/unit1614-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1614-first.Tpo ../libtest/$(DEPDIR)/unit1614-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1614-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1614_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1614-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1614-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1614_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1614-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1614-first.Tpo -c -o ../libtest/unit1614-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1614-first.Tpo ../libtest/$(DEPDIR)/unit1614-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1614-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1614_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1614-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1620-unit1620.o: unit1620.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1620_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1620-unit1620.o -MD -MP -MF $(DEPDIR)/unit1620-unit1620.Tpo -c -o unit1620-unit1620.o `test -f 'unit1620.c' || echo '$(srcdir)/'`unit1620.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1620-unit1620.Tpo $(DEPDIR)/unit1620-unit1620.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1620.c' object='unit1620-unit1620.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1620_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1620-unit1620.o `test -f 'unit1620.c' || echo '$(srcdir)/'`unit1620.c
-
-unit1620-unit1620.obj: unit1620.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1620_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1620-unit1620.obj -MD -MP -MF $(DEPDIR)/unit1620-unit1620.Tpo -c -o unit1620-unit1620.obj `if test -f 'unit1620.c'; then $(CYGPATH_W) 'unit1620.c'; else $(CYGPATH_W) '$(srcdir)/unit1620.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1620-unit1620.Tpo $(DEPDIR)/unit1620-unit1620.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1620.c' object='unit1620-unit1620.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1620_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1620-unit1620.obj `if test -f 'unit1620.c'; then $(CYGPATH_W) 'unit1620.c'; else $(CYGPATH_W) '$(srcdir)/unit1620.c'; fi`
-
-../libtest/unit1620-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1620_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1620-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1620-first.Tpo -c -o ../libtest/unit1620-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1620-first.Tpo ../libtest/$(DEPDIR)/unit1620-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1620-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1620_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1620-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1620-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1620_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1620-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1620-first.Tpo -c -o ../libtest/unit1620-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1620-first.Tpo ../libtest/$(DEPDIR)/unit1620-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1620-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1620_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1620-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1621-unit1621.o: unit1621.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1621_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1621-unit1621.o -MD -MP -MF $(DEPDIR)/unit1621-unit1621.Tpo -c -o unit1621-unit1621.o `test -f 'unit1621.c' || echo '$(srcdir)/'`unit1621.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1621-unit1621.Tpo $(DEPDIR)/unit1621-unit1621.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1621.c' object='unit1621-unit1621.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1621_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1621-unit1621.o `test -f 'unit1621.c' || echo '$(srcdir)/'`unit1621.c
-
-unit1621-unit1621.obj: unit1621.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1621_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1621-unit1621.obj -MD -MP -MF $(DEPDIR)/unit1621-unit1621.Tpo -c -o unit1621-unit1621.obj `if test -f 'unit1621.c'; then $(CYGPATH_W) 'unit1621.c'; else $(CYGPATH_W) '$(srcdir)/unit1621.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1621-unit1621.Tpo $(DEPDIR)/unit1621-unit1621.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1621.c' object='unit1621-unit1621.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1621_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1621-unit1621.obj `if test -f 'unit1621.c'; then $(CYGPATH_W) 'unit1621.c'; else $(CYGPATH_W) '$(srcdir)/unit1621.c'; fi`
-
-../libtest/unit1621-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1621_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1621-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1621-first.Tpo -c -o ../libtest/unit1621-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1621-first.Tpo ../libtest/$(DEPDIR)/unit1621-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1621-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1621_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1621-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1621-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1621_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1621-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1621-first.Tpo -c -o ../libtest/unit1621-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1621-first.Tpo ../libtest/$(DEPDIR)/unit1621-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1621-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1621_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1621-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1650-unit1650.o: unit1650.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1650_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1650-unit1650.o -MD -MP -MF $(DEPDIR)/unit1650-unit1650.Tpo -c -o unit1650-unit1650.o `test -f 'unit1650.c' || echo '$(srcdir)/'`unit1650.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1650-unit1650.Tpo $(DEPDIR)/unit1650-unit1650.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1650.c' object='unit1650-unit1650.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1650_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1650-unit1650.o `test -f 'unit1650.c' || echo '$(srcdir)/'`unit1650.c
-
-unit1650-unit1650.obj: unit1650.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1650_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1650-unit1650.obj -MD -MP -MF $(DEPDIR)/unit1650-unit1650.Tpo -c -o unit1650-unit1650.obj `if test -f 'unit1650.c'; then $(CYGPATH_W) 'unit1650.c'; else $(CYGPATH_W) '$(srcdir)/unit1650.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1650-unit1650.Tpo $(DEPDIR)/unit1650-unit1650.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1650.c' object='unit1650-unit1650.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1650_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1650-unit1650.obj `if test -f 'unit1650.c'; then $(CYGPATH_W) 'unit1650.c'; else $(CYGPATH_W) '$(srcdir)/unit1650.c'; fi`
-
-../libtest/unit1650-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1650_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1650-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1650-first.Tpo -c -o ../libtest/unit1650-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1650-first.Tpo ../libtest/$(DEPDIR)/unit1650-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1650-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1650_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1650-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1650-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1650_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1650-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1650-first.Tpo -c -o ../libtest/unit1650-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1650-first.Tpo ../libtest/$(DEPDIR)/unit1650-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1650-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1650_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1650-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1651-unit1651.o: unit1651.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1651_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1651-unit1651.o -MD -MP -MF $(DEPDIR)/unit1651-unit1651.Tpo -c -o unit1651-unit1651.o `test -f 'unit1651.c' || echo '$(srcdir)/'`unit1651.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1651-unit1651.Tpo $(DEPDIR)/unit1651-unit1651.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1651.c' object='unit1651-unit1651.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1651_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1651-unit1651.o `test -f 'unit1651.c' || echo '$(srcdir)/'`unit1651.c
-
-unit1651-unit1651.obj: unit1651.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1651_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1651-unit1651.obj -MD -MP -MF $(DEPDIR)/unit1651-unit1651.Tpo -c -o unit1651-unit1651.obj `if test -f 'unit1651.c'; then $(CYGPATH_W) 'unit1651.c'; else $(CYGPATH_W) '$(srcdir)/unit1651.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1651-unit1651.Tpo $(DEPDIR)/unit1651-unit1651.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1651.c' object='unit1651-unit1651.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1651_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1651-unit1651.obj `if test -f 'unit1651.c'; then $(CYGPATH_W) 'unit1651.c'; else $(CYGPATH_W) '$(srcdir)/unit1651.c'; fi`
-
-../libtest/unit1651-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1651_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1651-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1651-first.Tpo -c -o ../libtest/unit1651-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1651-first.Tpo ../libtest/$(DEPDIR)/unit1651-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1651-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1651_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1651-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1651-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1651_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1651-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1651-first.Tpo -c -o ../libtest/unit1651-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1651-first.Tpo ../libtest/$(DEPDIR)/unit1651-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1651-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1651_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1651-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1652-unit1652.o: unit1652.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1652_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1652-unit1652.o -MD -MP -MF $(DEPDIR)/unit1652-unit1652.Tpo -c -o unit1652-unit1652.o `test -f 'unit1652.c' || echo '$(srcdir)/'`unit1652.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1652-unit1652.Tpo $(DEPDIR)/unit1652-unit1652.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1652.c' object='unit1652-unit1652.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1652_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1652-unit1652.o `test -f 'unit1652.c' || echo '$(srcdir)/'`unit1652.c
-
-unit1652-unit1652.obj: unit1652.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1652_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1652-unit1652.obj -MD -MP -MF $(DEPDIR)/unit1652-unit1652.Tpo -c -o unit1652-unit1652.obj `if test -f 'unit1652.c'; then $(CYGPATH_W) 'unit1652.c'; else $(CYGPATH_W) '$(srcdir)/unit1652.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1652-unit1652.Tpo $(DEPDIR)/unit1652-unit1652.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1652.c' object='unit1652-unit1652.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1652_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1652-unit1652.obj `if test -f 'unit1652.c'; then $(CYGPATH_W) 'unit1652.c'; else $(CYGPATH_W) '$(srcdir)/unit1652.c'; fi`
-
-../libtest/unit1652-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1652_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1652-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1652-first.Tpo -c -o ../libtest/unit1652-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1652-first.Tpo ../libtest/$(DEPDIR)/unit1652-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1652-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1652_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1652-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1652-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1652_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1652-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1652-first.Tpo -c -o ../libtest/unit1652-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1652-first.Tpo ../libtest/$(DEPDIR)/unit1652-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1652-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1652_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1652-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1653-unit1653.o: unit1653.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1653_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1653-unit1653.o -MD -MP -MF $(DEPDIR)/unit1653-unit1653.Tpo -c -o unit1653-unit1653.o `test -f 'unit1653.c' || echo '$(srcdir)/'`unit1653.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1653-unit1653.Tpo $(DEPDIR)/unit1653-unit1653.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1653.c' object='unit1653-unit1653.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1653_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1653-unit1653.o `test -f 'unit1653.c' || echo '$(srcdir)/'`unit1653.c
-
-unit1653-unit1653.obj: unit1653.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1653_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1653-unit1653.obj -MD -MP -MF $(DEPDIR)/unit1653-unit1653.Tpo -c -o unit1653-unit1653.obj `if test -f 'unit1653.c'; then $(CYGPATH_W) 'unit1653.c'; else $(CYGPATH_W) '$(srcdir)/unit1653.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1653-unit1653.Tpo $(DEPDIR)/unit1653-unit1653.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1653.c' object='unit1653-unit1653.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1653_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1653-unit1653.obj `if test -f 'unit1653.c'; then $(CYGPATH_W) 'unit1653.c'; else $(CYGPATH_W) '$(srcdir)/unit1653.c'; fi`
-
-../libtest/unit1653-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1653_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1653-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1653-first.Tpo -c -o ../libtest/unit1653-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1653-first.Tpo ../libtest/$(DEPDIR)/unit1653-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1653-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1653_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1653-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1653-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1653_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1653-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1653-first.Tpo -c -o ../libtest/unit1653-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1653-first.Tpo ../libtest/$(DEPDIR)/unit1653-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1653-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1653_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1653-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1654-unit1654.o: unit1654.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1654_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1654-unit1654.o -MD -MP -MF $(DEPDIR)/unit1654-unit1654.Tpo -c -o unit1654-unit1654.o `test -f 'unit1654.c' || echo '$(srcdir)/'`unit1654.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1654-unit1654.Tpo $(DEPDIR)/unit1654-unit1654.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1654.c' object='unit1654-unit1654.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1654_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1654-unit1654.o `test -f 'unit1654.c' || echo '$(srcdir)/'`unit1654.c
-
-unit1654-unit1654.obj: unit1654.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1654_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1654-unit1654.obj -MD -MP -MF $(DEPDIR)/unit1654-unit1654.Tpo -c -o unit1654-unit1654.obj `if test -f 'unit1654.c'; then $(CYGPATH_W) 'unit1654.c'; else $(CYGPATH_W) '$(srcdir)/unit1654.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1654-unit1654.Tpo $(DEPDIR)/unit1654-unit1654.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1654.c' object='unit1654-unit1654.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1654_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1654-unit1654.obj `if test -f 'unit1654.c'; then $(CYGPATH_W) 'unit1654.c'; else $(CYGPATH_W) '$(srcdir)/unit1654.c'; fi`
-
-../libtest/unit1654-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1654_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1654-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1654-first.Tpo -c -o ../libtest/unit1654-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1654-first.Tpo ../libtest/$(DEPDIR)/unit1654-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1654-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1654_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1654-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1654-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1654_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1654-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1654-first.Tpo -c -o ../libtest/unit1654-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1654-first.Tpo ../libtest/$(DEPDIR)/unit1654-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1654-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1654_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1654-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1655-unit1655.o: unit1655.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1655_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1655-unit1655.o -MD -MP -MF $(DEPDIR)/unit1655-unit1655.Tpo -c -o unit1655-unit1655.o `test -f 'unit1655.c' || echo '$(srcdir)/'`unit1655.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1655-unit1655.Tpo $(DEPDIR)/unit1655-unit1655.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1655.c' object='unit1655-unit1655.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1655_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1655-unit1655.o `test -f 'unit1655.c' || echo '$(srcdir)/'`unit1655.c
-
-unit1655-unit1655.obj: unit1655.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1655_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1655-unit1655.obj -MD -MP -MF $(DEPDIR)/unit1655-unit1655.Tpo -c -o unit1655-unit1655.obj `if test -f 'unit1655.c'; then $(CYGPATH_W) 'unit1655.c'; else $(CYGPATH_W) '$(srcdir)/unit1655.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1655-unit1655.Tpo $(DEPDIR)/unit1655-unit1655.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1655.c' object='unit1655-unit1655.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1655_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1655-unit1655.obj `if test -f 'unit1655.c'; then $(CYGPATH_W) 'unit1655.c'; else $(CYGPATH_W) '$(srcdir)/unit1655.c'; fi`
-
-../libtest/unit1655-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1655_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1655-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1655-first.Tpo -c -o ../libtest/unit1655-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1655-first.Tpo ../libtest/$(DEPDIR)/unit1655-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1655-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1655_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1655-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1655-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1655_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1655-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1655-first.Tpo -c -o ../libtest/unit1655-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1655-first.Tpo ../libtest/$(DEPDIR)/unit1655-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1655-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1655_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1655-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1660-unit1660.o: unit1660.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1660_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1660-unit1660.o -MD -MP -MF $(DEPDIR)/unit1660-unit1660.Tpo -c -o unit1660-unit1660.o `test -f 'unit1660.c' || echo '$(srcdir)/'`unit1660.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1660-unit1660.Tpo $(DEPDIR)/unit1660-unit1660.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1660.c' object='unit1660-unit1660.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1660_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1660-unit1660.o `test -f 'unit1660.c' || echo '$(srcdir)/'`unit1660.c
-
-unit1660-unit1660.obj: unit1660.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1660_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1660-unit1660.obj -MD -MP -MF $(DEPDIR)/unit1660-unit1660.Tpo -c -o unit1660-unit1660.obj `if test -f 'unit1660.c'; then $(CYGPATH_W) 'unit1660.c'; else $(CYGPATH_W) '$(srcdir)/unit1660.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1660-unit1660.Tpo $(DEPDIR)/unit1660-unit1660.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1660.c' object='unit1660-unit1660.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1660_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1660-unit1660.obj `if test -f 'unit1660.c'; then $(CYGPATH_W) 'unit1660.c'; else $(CYGPATH_W) '$(srcdir)/unit1660.c'; fi`
-
-../libtest/unit1660-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1660_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1660-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1660-first.Tpo -c -o ../libtest/unit1660-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1660-first.Tpo ../libtest/$(DEPDIR)/unit1660-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1660-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1660_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1660-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1660-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1660_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1660-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1660-first.Tpo -c -o ../libtest/unit1660-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1660-first.Tpo ../libtest/$(DEPDIR)/unit1660-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1660-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1660_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1660-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
-unit1661-unit1661.o: unit1661.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1661_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1661-unit1661.o -MD -MP -MF $(DEPDIR)/unit1661-unit1661.Tpo -c -o unit1661-unit1661.o `test -f 'unit1661.c' || echo '$(srcdir)/'`unit1661.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1661-unit1661.Tpo $(DEPDIR)/unit1661-unit1661.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1661.c' object='unit1661-unit1661.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1661_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1661-unit1661.o `test -f 'unit1661.c' || echo '$(srcdir)/'`unit1661.c
-
-unit1661-unit1661.obj: unit1661.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1661_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1661-unit1661.obj -MD -MP -MF $(DEPDIR)/unit1661-unit1661.Tpo -c -o unit1661-unit1661.obj `if test -f 'unit1661.c'; then $(CYGPATH_W) 'unit1661.c'; else $(CYGPATH_W) '$(srcdir)/unit1661.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit1661-unit1661.Tpo $(DEPDIR)/unit1661-unit1661.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unit1661.c' object='unit1661-unit1661.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1661_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1661-unit1661.obj `if test -f 'unit1661.c'; then $(CYGPATH_W) 'unit1661.c'; else $(CYGPATH_W) '$(srcdir)/unit1661.c'; fi`
-
-../libtest/unit1661-first.o: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1661_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1661-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1661-first.Tpo -c -o ../libtest/unit1661-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1661-first.Tpo ../libtest/$(DEPDIR)/unit1661-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1661-first.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1661_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1661-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
-
-../libtest/unit1661-first.obj: ../libtest/first.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1661_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1661-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1661-first.Tpo -c -o ../libtest/unit1661-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1661-first.Tpo ../libtest/$(DEPDIR)/unit1661-first.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1661-first.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1661_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1661-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
-
mostlyclean-libtool:
-rm -f *.lo
@@ -2649,88 +1290,52 @@ clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
mostlyclean-am
distclean: distclean-am
- -rm -f ../libtest/$(DEPDIR)/unit1300-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1301-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1302-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1303-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1304-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1305-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1307-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1308-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1309-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1323-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1330-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1394-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1395-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1396-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1397-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1398-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1399-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1600-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1601-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1602-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1603-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1604-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1605-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1606-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1607-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1608-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1609-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1610-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1611-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1612-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1614-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1620-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1621-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1650-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1651-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1652-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1653-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1654-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1655-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1660-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1661-first.Po
- -rm -f ./$(DEPDIR)/unit1300-unit1300.Po
- -rm -f ./$(DEPDIR)/unit1301-unit1301.Po
- -rm -f ./$(DEPDIR)/unit1302-unit1302.Po
- -rm -f ./$(DEPDIR)/unit1303-unit1303.Po
- -rm -f ./$(DEPDIR)/unit1304-unit1304.Po
- -rm -f ./$(DEPDIR)/unit1305-unit1305.Po
- -rm -f ./$(DEPDIR)/unit1307-unit1307.Po
- -rm -f ./$(DEPDIR)/unit1308-unit1308.Po
- -rm -f ./$(DEPDIR)/unit1309-unit1309.Po
- -rm -f ./$(DEPDIR)/unit1323-unit1323.Po
- -rm -f ./$(DEPDIR)/unit1330-unit1330.Po
- -rm -f ./$(DEPDIR)/unit1394-unit1394.Po
- -rm -f ./$(DEPDIR)/unit1395-unit1395.Po
- -rm -f ./$(DEPDIR)/unit1396-unit1396.Po
- -rm -f ./$(DEPDIR)/unit1397-unit1397.Po
- -rm -f ./$(DEPDIR)/unit1398-unit1398.Po
- -rm -f ./$(DEPDIR)/unit1399-unit1399.Po
- -rm -f ./$(DEPDIR)/unit1600-unit1600.Po
- -rm -f ./$(DEPDIR)/unit1601-unit1601.Po
- -rm -f ./$(DEPDIR)/unit1602-unit1602.Po
- -rm -f ./$(DEPDIR)/unit1603-unit1603.Po
- -rm -f ./$(DEPDIR)/unit1604-unit1604.Po
- -rm -f ./$(DEPDIR)/unit1605-unit1605.Po
- -rm -f ./$(DEPDIR)/unit1606-unit1606.Po
- -rm -f ./$(DEPDIR)/unit1607-unit1607.Po
- -rm -f ./$(DEPDIR)/unit1608-unit1608.Po
- -rm -f ./$(DEPDIR)/unit1609-unit1609.Po
- -rm -f ./$(DEPDIR)/unit1610-unit1610.Po
- -rm -f ./$(DEPDIR)/unit1611-unit1611.Po
- -rm -f ./$(DEPDIR)/unit1612-unit1612.Po
- -rm -f ./$(DEPDIR)/unit1614-unit1614.Po
- -rm -f ./$(DEPDIR)/unit1620-unit1620.Po
- -rm -f ./$(DEPDIR)/unit1621-unit1621.Po
- -rm -f ./$(DEPDIR)/unit1650-unit1650.Po
- -rm -f ./$(DEPDIR)/unit1651-unit1651.Po
- -rm -f ./$(DEPDIR)/unit1652-unit1652.Po
- -rm -f ./$(DEPDIR)/unit1653-unit1653.Po
- -rm -f ./$(DEPDIR)/unit1654-unit1654.Po
- -rm -f ./$(DEPDIR)/unit1655-unit1655.Po
- -rm -f ./$(DEPDIR)/unit1660-unit1660.Po
- -rm -f ./$(DEPDIR)/unit1661-unit1661.Po
+ -rm -f ../libtest/$(DEPDIR)/first.Po
+ -rm -f ./$(DEPDIR)/unit1300.Po
+ -rm -f ./$(DEPDIR)/unit1302.Po
+ -rm -f ./$(DEPDIR)/unit1303.Po
+ -rm -f ./$(DEPDIR)/unit1304.Po
+ -rm -f ./$(DEPDIR)/unit1305.Po
+ -rm -f ./$(DEPDIR)/unit1307.Po
+ -rm -f ./$(DEPDIR)/unit1308.Po
+ -rm -f ./$(DEPDIR)/unit1309.Po
+ -rm -f ./$(DEPDIR)/unit1323.Po
+ -rm -f ./$(DEPDIR)/unit1330.Po
+ -rm -f ./$(DEPDIR)/unit1394.Po
+ -rm -f ./$(DEPDIR)/unit1395.Po
+ -rm -f ./$(DEPDIR)/unit1396.Po
+ -rm -f ./$(DEPDIR)/unit1397.Po
+ -rm -f ./$(DEPDIR)/unit1398.Po
+ -rm -f ./$(DEPDIR)/unit1399.Po
+ -rm -f ./$(DEPDIR)/unit1600.Po
+ -rm -f ./$(DEPDIR)/unit1601.Po
+ -rm -f ./$(DEPDIR)/unit1602.Po
+ -rm -f ./$(DEPDIR)/unit1603.Po
+ -rm -f ./$(DEPDIR)/unit1604.Po
+ -rm -f ./$(DEPDIR)/unit1605.Po
+ -rm -f ./$(DEPDIR)/unit1606.Po
+ -rm -f ./$(DEPDIR)/unit1607.Po
+ -rm -f ./$(DEPDIR)/unit1608.Po
+ -rm -f ./$(DEPDIR)/unit1609.Po
+ -rm -f ./$(DEPDIR)/unit1610.Po
+ -rm -f ./$(DEPDIR)/unit1611.Po
+ -rm -f ./$(DEPDIR)/unit1612.Po
+ -rm -f ./$(DEPDIR)/unit1614.Po
+ -rm -f ./$(DEPDIR)/unit1620.Po
+ -rm -f ./$(DEPDIR)/unit1621.Po
+ -rm -f ./$(DEPDIR)/unit1650.Po
+ -rm -f ./$(DEPDIR)/unit1651.Po
+ -rm -f ./$(DEPDIR)/unit1652.Po
+ -rm -f ./$(DEPDIR)/unit1653.Po
+ -rm -f ./$(DEPDIR)/unit1654.Po
+ -rm -f ./$(DEPDIR)/unit1655.Po
+ -rm -f ./$(DEPDIR)/unit1660.Po
+ -rm -f ./$(DEPDIR)/unit1661.Po
+ -rm -f ./$(DEPDIR)/unit2600.Po
+ -rm -f ./$(DEPDIR)/unit2601.Po
+ -rm -f ./$(DEPDIR)/unit2602.Po
+ -rm -f ./$(DEPDIR)/unit2603.Po
+ -rm -f ./$(DEPDIR)/unit3200.Po
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
@@ -2776,88 +1381,52 @@ install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
- -rm -f ../libtest/$(DEPDIR)/unit1300-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1301-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1302-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1303-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1304-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1305-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1307-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1308-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1309-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1323-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1330-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1394-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1395-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1396-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1397-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1398-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1399-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1600-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1601-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1602-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1603-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1604-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1605-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1606-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1607-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1608-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1609-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1610-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1611-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1612-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1614-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1620-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1621-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1650-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1651-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1652-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1653-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1654-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1655-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1660-first.Po
- -rm -f ../libtest/$(DEPDIR)/unit1661-first.Po
- -rm -f ./$(DEPDIR)/unit1300-unit1300.Po
- -rm -f ./$(DEPDIR)/unit1301-unit1301.Po
- -rm -f ./$(DEPDIR)/unit1302-unit1302.Po
- -rm -f ./$(DEPDIR)/unit1303-unit1303.Po
- -rm -f ./$(DEPDIR)/unit1304-unit1304.Po
- -rm -f ./$(DEPDIR)/unit1305-unit1305.Po
- -rm -f ./$(DEPDIR)/unit1307-unit1307.Po
- -rm -f ./$(DEPDIR)/unit1308-unit1308.Po
- -rm -f ./$(DEPDIR)/unit1309-unit1309.Po
- -rm -f ./$(DEPDIR)/unit1323-unit1323.Po
- -rm -f ./$(DEPDIR)/unit1330-unit1330.Po
- -rm -f ./$(DEPDIR)/unit1394-unit1394.Po
- -rm -f ./$(DEPDIR)/unit1395-unit1395.Po
- -rm -f ./$(DEPDIR)/unit1396-unit1396.Po
- -rm -f ./$(DEPDIR)/unit1397-unit1397.Po
- -rm -f ./$(DEPDIR)/unit1398-unit1398.Po
- -rm -f ./$(DEPDIR)/unit1399-unit1399.Po
- -rm -f ./$(DEPDIR)/unit1600-unit1600.Po
- -rm -f ./$(DEPDIR)/unit1601-unit1601.Po
- -rm -f ./$(DEPDIR)/unit1602-unit1602.Po
- -rm -f ./$(DEPDIR)/unit1603-unit1603.Po
- -rm -f ./$(DEPDIR)/unit1604-unit1604.Po
- -rm -f ./$(DEPDIR)/unit1605-unit1605.Po
- -rm -f ./$(DEPDIR)/unit1606-unit1606.Po
- -rm -f ./$(DEPDIR)/unit1607-unit1607.Po
- -rm -f ./$(DEPDIR)/unit1608-unit1608.Po
- -rm -f ./$(DEPDIR)/unit1609-unit1609.Po
- -rm -f ./$(DEPDIR)/unit1610-unit1610.Po
- -rm -f ./$(DEPDIR)/unit1611-unit1611.Po
- -rm -f ./$(DEPDIR)/unit1612-unit1612.Po
- -rm -f ./$(DEPDIR)/unit1614-unit1614.Po
- -rm -f ./$(DEPDIR)/unit1620-unit1620.Po
- -rm -f ./$(DEPDIR)/unit1621-unit1621.Po
- -rm -f ./$(DEPDIR)/unit1650-unit1650.Po
- -rm -f ./$(DEPDIR)/unit1651-unit1651.Po
- -rm -f ./$(DEPDIR)/unit1652-unit1652.Po
- -rm -f ./$(DEPDIR)/unit1653-unit1653.Po
- -rm -f ./$(DEPDIR)/unit1654-unit1654.Po
- -rm -f ./$(DEPDIR)/unit1655-unit1655.Po
- -rm -f ./$(DEPDIR)/unit1660-unit1660.Po
- -rm -f ./$(DEPDIR)/unit1661-unit1661.Po
+ -rm -f ../libtest/$(DEPDIR)/first.Po
+ -rm -f ./$(DEPDIR)/unit1300.Po
+ -rm -f ./$(DEPDIR)/unit1302.Po
+ -rm -f ./$(DEPDIR)/unit1303.Po
+ -rm -f ./$(DEPDIR)/unit1304.Po
+ -rm -f ./$(DEPDIR)/unit1305.Po
+ -rm -f ./$(DEPDIR)/unit1307.Po
+ -rm -f ./$(DEPDIR)/unit1308.Po
+ -rm -f ./$(DEPDIR)/unit1309.Po
+ -rm -f ./$(DEPDIR)/unit1323.Po
+ -rm -f ./$(DEPDIR)/unit1330.Po
+ -rm -f ./$(DEPDIR)/unit1394.Po
+ -rm -f ./$(DEPDIR)/unit1395.Po
+ -rm -f ./$(DEPDIR)/unit1396.Po
+ -rm -f ./$(DEPDIR)/unit1397.Po
+ -rm -f ./$(DEPDIR)/unit1398.Po
+ -rm -f ./$(DEPDIR)/unit1399.Po
+ -rm -f ./$(DEPDIR)/unit1600.Po
+ -rm -f ./$(DEPDIR)/unit1601.Po
+ -rm -f ./$(DEPDIR)/unit1602.Po
+ -rm -f ./$(DEPDIR)/unit1603.Po
+ -rm -f ./$(DEPDIR)/unit1604.Po
+ -rm -f ./$(DEPDIR)/unit1605.Po
+ -rm -f ./$(DEPDIR)/unit1606.Po
+ -rm -f ./$(DEPDIR)/unit1607.Po
+ -rm -f ./$(DEPDIR)/unit1608.Po
+ -rm -f ./$(DEPDIR)/unit1609.Po
+ -rm -f ./$(DEPDIR)/unit1610.Po
+ -rm -f ./$(DEPDIR)/unit1611.Po
+ -rm -f ./$(DEPDIR)/unit1612.Po
+ -rm -f ./$(DEPDIR)/unit1614.Po
+ -rm -f ./$(DEPDIR)/unit1620.Po
+ -rm -f ./$(DEPDIR)/unit1621.Po
+ -rm -f ./$(DEPDIR)/unit1650.Po
+ -rm -f ./$(DEPDIR)/unit1651.Po
+ -rm -f ./$(DEPDIR)/unit1652.Po
+ -rm -f ./$(DEPDIR)/unit1653.Po
+ -rm -f ./$(DEPDIR)/unit1654.Po
+ -rm -f ./$(DEPDIR)/unit1655.Po
+ -rm -f ./$(DEPDIR)/unit1660.Po
+ -rm -f ./$(DEPDIR)/unit1661.Po
+ -rm -f ./$(DEPDIR)/unit2600.Po
+ -rm -f ./$(DEPDIR)/unit2601.Po
+ -rm -f ./$(DEPDIR)/unit2602.Po
+ -rm -f ./$(DEPDIR)/unit2603.Po
+ -rm -f ./$(DEPDIR)/unit3200.Po
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
diff --git a/tests/unit/Makefile.inc b/tests/unit/Makefile.inc
index 831a82033..36e922b2a 100644
--- a/tests/unit/Makefile.inc
+++ b/tests/unit/Makefile.inc
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -29,7 +29,7 @@ UNITFILES = curlcheck.h \
../libtest/first.c
# These are all unit test programs
-UNITPROGS = unit1300 unit1301 unit1302 unit1303 unit1304 unit1305 unit1307 \
+UNITPROGS = unit1300 unit1302 unit1303 unit1304 unit1305 unit1307 \
unit1308 unit1309 unit1323 \
unit1330 unit1394 unit1395 unit1396 unit1397 unit1398 \
unit1399 \
@@ -37,131 +37,96 @@ UNITPROGS = unit1300 unit1301 unit1302 unit1303 unit1304 unit1305 unit1307 \
unit1608 unit1609 unit1610 unit1611 unit1612 unit1614 \
unit1620 unit1621 \
unit1650 unit1651 unit1652 unit1653 unit1654 unit1655 \
- unit1660 unit1661
+ unit1660 unit1661 \
+ unit2600 unit2601 unit2602 unit2603 \
+ unit3200
unit1300_SOURCES = unit1300.c $(UNITFILES)
-unit1300_CPPFLAGS = $(AM_CPPFLAGS)
-
-unit1301_SOURCES = unit1301.c $(UNITFILES)
-unit1301_CPPFLAGS = $(AM_CPPFLAGS)
unit1302_SOURCES = unit1302.c $(UNITFILES)
-unit1302_CPPFLAGS = $(AM_CPPFLAGS)
unit1303_SOURCES = unit1303.c $(UNITFILES)
-unit1303_CPPFLAGS = $(AM_CPPFLAGS)
unit1304_SOURCES = unit1304.c $(UNITFILES)
-unit1304_CPPFLAGS = $(AM_CPPFLAGS)
unit1305_SOURCES = unit1305.c $(UNITFILES)
-unit1305_CPPFLAGS = $(AM_CPPFLAGS)
unit1307_SOURCES = unit1307.c $(UNITFILES)
-unit1307_CPPFLAGS = $(AM_CPPFLAGS)
unit1308_SOURCES = unit1308.c $(UNITFILES)
-unit1308_CPPFLAGS = $(AM_CPPFLAGS)
unit1309_SOURCES = unit1309.c $(UNITFILES)
-unit1309_CPPFLAGS = $(AM_CPPFLAGS)
unit1323_SOURCES = unit1323.c $(UNITFILES)
-unit1323_CPPFLAGS = $(AM_CPPFLAGS)
unit1330_SOURCES = unit1330.c $(UNITFILES)
-unit1330_CPPFLAGS = $(AM_CPPFLAGS)
unit1394_SOURCES = unit1394.c $(UNITFILES)
-unit1394_CPPFLAGS = $(AM_CPPFLAGS)
-unit1394_LDADD = $(top_builddir)/lib/libcurl.la @LIBCURL_LIBS@
-unit1394_LDFLAGS = $(top_builddir)/src/libcurltool.la
-unit1394_LIBS =
unit1395_SOURCES = unit1395.c $(UNITFILES)
-unit1395_CPPFLAGS = $(AM_CPPFLAGS)
unit1396_SOURCES = unit1396.c $(UNITFILES)
-unit1396_CPPFLAGS = $(AM_CPPFLAGS)
unit1397_SOURCES = unit1397.c $(UNITFILES)
-unit1397_CPPFLAGS = $(AM_CPPFLAGS)
unit1398_SOURCES = unit1398.c $(UNITFILES)
-unit1398_CPPFLAGS = $(AM_CPPFLAGS)
unit1399_SOURCES = unit1399.c $(UNITFILES)
-unit1399_CPPFLAGS = $(AM_CPPFLAGS)
unit1600_SOURCES = unit1600.c $(UNITFILES)
-unit1600_CPPFLAGS = $(AM_CPPFLAGS)
unit1601_SOURCES = unit1601.c $(UNITFILES)
-unit1601_CPPFLAGS = $(AM_CPPFLAGS)
unit1602_SOURCES = unit1602.c $(UNITFILES)
-unit1602_CPPFLAGS = $(AM_CPPFLAGS)
unit1603_SOURCES = unit1603.c $(UNITFILES)
-unit1603_CPPFLAGS = $(AM_CPPFLAGS)
unit1604_SOURCES = unit1604.c $(UNITFILES)
-unit1604_CPPFLAGS = $(AM_CPPFLAGS)
unit1605_SOURCES = unit1605.c $(UNITFILES)
-unit1605_CPPFLAGS = $(AM_CPPFLAGS)
unit1606_SOURCES = unit1606.c $(UNITFILES)
-unit1606_CPPFLAGS = $(AM_CPPFLAGS)
unit1607_SOURCES = unit1607.c $(UNITFILES)
-unit1607_CPPFLAGS = $(AM_CPPFLAGS)
unit1608_SOURCES = unit1608.c $(UNITFILES)
-unit1608_CPPFLAGS = $(AM_CPPFLAGS)
unit1609_SOURCES = unit1609.c $(UNITFILES)
-unit1609_CPPFLAGS = $(AM_CPPFLAGS)
unit1610_SOURCES = unit1610.c $(UNITFILES)
-unit1610_CPPFLAGS = $(AM_CPPFLAGS)
unit1611_SOURCES = unit1611.c $(UNITFILES)
-unit1611_CPPFLAGS = $(AM_CPPFLAGS)
unit1612_SOURCES = unit1612.c $(UNITFILES)
-unit1612_CPPFLAGS = $(AM_CPPFLAGS)
unit1614_SOURCES = unit1614.c $(UNITFILES)
-unit1614_CPPFLAGS = $(AM_CPPFLAGS)
unit1620_SOURCES = unit1620.c $(UNITFILES)
-unit1620_CPPFLAGS = $(AM_CPPFLAGS)
unit1621_SOURCES = unit1621.c $(UNITFILES)
-unit1621_CPPFLAGS = $(AM_CPPFLAGS)
-unit1621_LDADD = $(top_builddir)/src/libcurltool.la $(top_builddir)/lib/libcurl.la @NSS_LIBS@
unit1650_SOURCES = unit1650.c $(UNITFILES)
-unit1650_CPPFLAGS = $(AM_CPPFLAGS)
unit1651_SOURCES = unit1651.c $(UNITFILES)
-unit1651_CPPFLAGS = $(AM_CPPFLAGS)
unit1652_SOURCES = unit1652.c $(UNITFILES)
-unit1652_CPPFLAGS = $(AM_CPPFLAGS)
unit1653_SOURCES = unit1653.c $(UNITFILES)
-unit1653_CPPFLAGS = $(AM_CPPFLAGS)
unit1654_SOURCES = unit1654.c $(UNITFILES)
-unit1654_CPPFLAGS = $(AM_CPPFLAGS)
unit1655_SOURCES = unit1655.c $(UNITFILES)
-unit1655_CPPFLAGS = $(AM_CPPFLAGS)
unit1660_SOURCES = unit1660.c $(UNITFILES)
-unit1660_CPPFLAGS = $(AM_CPPFLAGS)
unit1661_SOURCES = unit1661.c $(UNITFILES)
-unit1661_CPPFLAGS = $(AM_CPPFLAGS)
+
+unit2600_SOURCES = unit2600.c $(UNITFILES)
+
+unit2601_SOURCES = unit2601.c $(UNITFILES)
+
+unit2602_SOURCES = unit2602.c $(UNITFILES)
+
+unit2603_SOURCES = unit2603.c $(UNITFILES)
+
+unit3200_SOURCES = unit3200.c $(UNITFILES)
diff --git a/tests/unit/README.md b/tests/unit/README.md
index d17b249a0..f11119005 100644
--- a/tests/unit/README.md
+++ b/tests/unit/README.md
@@ -1,5 +1,5 @@
<!--
-Copyright (C) 1998 - 2022 Daniel Stenberg, <daniel@haxx.se>, et al.
+Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
-->
@@ -26,7 +26,7 @@ can `cd tests` and `make` and then invoke individual unit tests with
## Debug Unit Tests
If a specific test fails you will get told. The test case then has output left
-in the log/ subdirectory, but most importantly you can re-run the test again
+in the %LOGDIR subdirectory, but most importantly you can re-run the test again
using gdb by doing `./runtests.pl -g NNNN`. That is, add a `-g` to make it
start up gdb and run the same case using that.
diff --git a/tests/unit/curlcheck.h b/tests/unit/curlcheck.h
index 1e8ca0e8e..928964422 100644
--- a/tests/unit/curlcheck.h
+++ b/tests/unit/curlcheck.h
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,19 +24,19 @@
#include "test.h"
/* The fail macros mark the current test step as failed, and continue */
-#define fail_if(expr, msg) \
- do { \
- if(expr) { \
- fprintf(stderr, "%s:%d Assertion '%s' met: %s\n", \
- __FILE__, __LINE__, #expr, msg); \
- unitfail++; \
- } \
+#define fail_if(expr, msg) \
+ do { \
+ if(expr) { \
+ fprintf(stderr, "%s:%d FAILED Assertion '%s' met: %s\n", \
+ __FILE__, __LINE__, #expr, msg); \
+ unitfail++; \
+ } \
} while(0)
#define fail_unless(expr, msg) \
do { \
if(!(expr)) { \
- fprintf(stderr, "%s:%d Assertion '%s' failed: %s\n", \
+ fprintf(stderr, "%s:%d Assertion '%s' FAILED: %s\n", \
__FILE__, __LINE__, #expr, msg); \
unitfail++; \
} \
@@ -44,9 +44,9 @@
#define verify_memory(dynamic, check, len) \
do { \
- if(dynamic && memcmp(dynamic, check, len)) { \
- fprintf(stderr, "%s:%d Memory buffer mismatch size %d. '%s' is not\n", \
- __FILE__, __LINE__, len, \
+ if(dynamic && memcmp(dynamic, check, len)) { \
+ fprintf(stderr, "%s:%d Memory buffer FAILED match size %d. " \
+ "'%s' is not\n", __FILE__, __LINE__, len, \
hexdump((const unsigned char *)check, len)); \
fprintf(stderr, "%s:%d the same as '%s'\n", __FILE__, __LINE__, \
hexdump((const unsigned char *)dynamic, len)); \
@@ -57,7 +57,7 @@
/* fail() is for when the test case figured out by itself that a check
proved a failure */
#define fail(msg) do { \
- fprintf(stderr, "%s:%d test failed: '%s'\n", \
+ fprintf(stderr, "%s:%d test FAILED: '%s'\n", \
__FILE__, __LINE__, msg); \
unitfail++; \
} while(0)
@@ -67,7 +67,7 @@
#define abort_if(expr, msg) \
do { \
if(expr) { \
- fprintf(stderr, "%s:%d Abort assertion '%s' met: %s\n", \
+ fprintf(stderr, "%s:%d ABORT assertion '%s' met: %s\n", \
__FILE__, __LINE__, #expr, msg); \
unitfail++; \
goto unit_test_abort; \
@@ -77,7 +77,7 @@
#define abort_unless(expr, msg) \
do { \
if(!(expr)) { \
- fprintf(stderr, "%s:%d Abort assertion '%s' failed: %s\n", \
+ fprintf(stderr, "%s:%d ABORT assertion '%s' failed: %s\n", \
__FILE__, __LINE__, #expr, msg); \
unitfail++; \
goto unit_test_abort; \
@@ -86,21 +86,19 @@
#define abort_test(msg) \
do { \
- fprintf(stderr, "%s:%d test aborted: '%s'\n", \
+ fprintf(stderr, "%s:%d test ABORTED: '%s'\n", \
__FILE__, __LINE__, msg); \
unitfail++; \
goto unit_test_abort; \
} while(0)
-extern int unitfail;
-
#define UNITTEST_START \
int test(char *arg) \
{ \
(void)arg; \
if(unit_setup()) { \
- fail("unit_setup() failure"); \
+ fail("unit_setup() FAILURE"); \
} \
else {
diff --git a/tests/unit/unit1300.c b/tests/unit/unit1300.c
index 493a2f11a..66fb5d02d 100644
--- a/tests/unit/unit1300.c
+++ b/tests/unit/unit1300.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -75,7 +75,7 @@ UNITTEST_START
fail_unless(llist.size == 0, "list initial size should be zero");
fail_unless(llist.head == NULL, "list head should initiate to NULL");
- fail_unless(llist.tail == NULL, "list tail should intiate to NULL");
+ fail_unless(llist.tail == NULL, "list tail should initiate to NULL");
fail_unless(llist.dtor == test_Curl_llist_dtor,
"list dtor should initiate to test_Curl_llist_dtor");
@@ -93,10 +93,10 @@ UNITTEST_START
fail_unless(Curl_llist_count(&llist) == 1,
"List size should be 1 after adding a new element");
- /*test that the list head data holds my unusedData */
+ /* test that the list head data holds my unusedData */
fail_unless(llist.head->ptr == &unusedData_case1,
"head ptr should be first entry");
- /*same goes for the list tail */
+ /* same goes for the list tail */
fail_unless(llist.tail == llist.head,
"tail and head should be the same");
diff --git a/tests/unit/unit1301.c b/tests/unit/unit1301.c
deleted file mode 100644
index 17b2700ba..000000000
--- a/tests/unit/unit1301.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed 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 "curlcheck.h"
-
-#include "strcase.h"
-
-static CURLcode unit_setup(void) {return CURLE_OK;}
-static void unit_stop(void) {}
-
-UNITTEST_START
-
-int rc;
-
-rc = curl_strequal("iii", "III");
-fail_unless(rc != 0, "return code should be non-zero");
-
-rc = curl_strequal("iiia", "III");
-fail_unless(rc == 0, "return code should be zero");
-
-rc = curl_strequal("iii", "IIIa");
-fail_unless(rc == 0, "return code should be zero");
-
-rc = curl_strequal("iiiA", "IIIa");
-fail_unless(rc != 0, "return code should be non-zero");
-
-rc = curl_strnequal("iii", "III", 3);
-fail_unless(rc != 0, "return code should be non-zero");
-
-rc = curl_strnequal("iiiABC", "IIIcba", 3);
-fail_unless(rc != 0, "return code should be non-zero");
-
-rc = curl_strnequal("ii", "II", 3);
-fail_unless(rc != 0, "return code should be non-zero");
-
-UNITTEST_STOP
diff --git a/tests/unit/unit1302.c b/tests/unit/unit1302.c
index afc571662..cf3c9b07e 100644
--- a/tests/unit/unit1302.c
+++ b/tests/unit/unit1302.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -169,6 +169,15 @@ fail_unless(rc == CURLE_BAD_CONTENT_ENCODING,
fail_unless(size == 0, "size should be 0");
fail_if(decoded, "returned pointer should be NULL");
+/* This is also illegal input as it contains a padding character mid input */
+size = 1; /* not zero */
+decoded = &anychar; /* not NULL */
+rc = Curl_base64_decode("aWlpa=Q=", &decoded, &size);
+fail_unless(rc == CURLE_BAD_CONTENT_ENCODING,
+ "return code should be CURLE_BAD_CONTENT_ENCODING");
+fail_unless(size == 0, "size should be 0");
+fail_if(decoded, "returned pointer should be NULL");
+
/* This is garbage input as it contains an illegal base64 character */
size = 1; /* not zero */
decoded = &anychar; /* not NULL */
@@ -178,4 +187,5 @@ fail_unless(rc == CURLE_BAD_CONTENT_ENCODING,
fail_unless(size == 0, "size should be 0");
fail_if(decoded, "returned pointer should be NULL");
+
UNITTEST_STOP
diff --git a/tests/unit/unit1303.c b/tests/unit/unit1303.c
index acc3ed7bf..c022496c3 100644
--- a/tests/unit/unit1303.c
+++ b/tests/unit/unit1303.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/unit/unit1304.c b/tests/unit/unit1304.c
index 3fab94b85..0288562c6 100644
--- a/tests/unit/unit1304.c
+++ b/tests/unit/unit1304.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -25,9 +25,10 @@
#include "netrc.h"
#include "memdebug.h" /* LAST include file */
+#ifndef CURL_DISABLE_NETRC
+
static char *login;
static char *password;
-static char filename[64];
static CURLcode unit_setup(void)
{
@@ -50,14 +51,10 @@ static void unit_stop(void)
UNITTEST_START
int result;
- static const char * const filename1 = "log/netrc1304";
- memcpy(filename, filename1, strlen(filename1));
-
/*
* Test a non existent host in our netrc file.
*/
- result = Curl_parsenetrc("test.example.com", &login, &password,
- filename);
+ result = Curl_parsenetrc("test.example.com", &login, &password, arg);
fail_unless(result == 1, "Host not found should return 1");
abort_unless(password != NULL, "returned NULL!");
fail_unless(password[0] == 0, "password should not have been changed");
@@ -70,8 +67,7 @@ UNITTEST_START
free(login);
login = strdup("me");
abort_unless(login != NULL, "returned NULL!");
- result = Curl_parsenetrc("example.com", &login, &password,
- filename);
+ result = Curl_parsenetrc("example.com", &login, &password, arg);
fail_unless(result == 0, "Host should have been found");
abort_unless(password != NULL, "returned NULL!");
fail_unless(password[0] == 0, "password should not have been changed");
@@ -85,8 +81,7 @@ UNITTEST_START
free(login);
login = strdup("me");
abort_unless(login != NULL, "returned NULL!");
- result = Curl_parsenetrc("test.example.com", &login, &password,
- filename);
+ result = Curl_parsenetrc("test.example.com", &login, &password, arg);
fail_unless(result == 1, "Host not found should return 1");
abort_unless(password != NULL, "returned NULL!");
fail_unless(password[0] == 0, "password should not have been changed");
@@ -101,8 +96,7 @@ UNITTEST_START
free(login);
login = strdup("admi");
abort_unless(login != NULL, "returned NULL!");
- result = Curl_parsenetrc("example.com", &login, &password,
- filename);
+ result = Curl_parsenetrc("example.com", &login, &password, arg);
fail_unless(result == 0, "Host should have been found");
abort_unless(password != NULL, "returned NULL!");
fail_unless(password[0] == 0, "password should not have been changed");
@@ -117,8 +111,7 @@ UNITTEST_START
free(login);
login = strdup("adminn");
abort_unless(login != NULL, "returned NULL!");
- result = Curl_parsenetrc("example.com", &login, &password,
- filename);
+ result = Curl_parsenetrc("example.com", &login, &password, arg);
fail_unless(result == 0, "Host should have been found");
abort_unless(password != NULL, "returned NULL!");
fail_unless(password[0] == 0, "password should not have been changed");
@@ -133,8 +126,7 @@ UNITTEST_START
free(login);
login = strdup("");
abort_unless(login != NULL, "returned NULL!");
- result = Curl_parsenetrc("example.com", &login, &password,
- filename);
+ result = Curl_parsenetrc("example.com", &login, &password, arg);
fail_unless(result == 0, "Host should have been found");
abort_unless(password != NULL, "returned NULL!");
fail_unless(strncmp(password, "passwd", 6) == 0,
@@ -149,7 +141,7 @@ UNITTEST_START
free(password);
password = strdup("");
abort_unless(password != NULL, "returned NULL!");
- result = Curl_parsenetrc("example.com", &login, &password, filename);
+ result = Curl_parsenetrc("example.com", &login, &password, arg);
fail_unless(result == 0, "Host should have been found");
abort_unless(password != NULL, "returned NULL!");
fail_unless(strncmp(password, "passwd", 6) == 0,
@@ -167,8 +159,7 @@ UNITTEST_START
free(login);
login = strdup("");
abort_unless(login != NULL, "returned NULL!");
- result = Curl_parsenetrc("curl.example.com", &login, &password,
- filename);
+ result = Curl_parsenetrc("curl.example.com", &login, &password, arg);
fail_unless(result == 0, "Host should have been found");
abort_unless(password != NULL, "returned NULL!");
fail_unless(strncmp(password, "none", 4) == 0,
@@ -183,8 +174,7 @@ UNITTEST_START
free(password);
password = strdup("");
abort_unless(password != NULL, "returned NULL!");
- result = Curl_parsenetrc("curl.example.com", &login, &password,
- filename);
+ result = Curl_parsenetrc("curl.example.com", &login, &password, arg);
fail_unless(result == 0, "Host should have been found");
abort_unless(password != NULL, "returned NULL!");
fail_unless(strncmp(password, "none", 4) == 0,
@@ -193,3 +183,16 @@ UNITTEST_START
fail_unless(strncmp(login, "none", 4) == 0, "login should be 'none'");
UNITTEST_STOP
+
+#else
+static CURLcode unit_setup(void)
+{
+ return CURLE_OK;
+}
+static void unit_stop(void)
+{
+}
+UNITTEST_START
+UNITTEST_STOP
+
+#endif
diff --git a/tests/unit/unit1305.c b/tests/unit/unit1305.c
index a4f70d1d5..19cc62c44 100644
--- a/tests/unit/unit1305.c
+++ b/tests/unit/unit1305.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/unit/unit1307.c b/tests/unit/unit1307.c
index d8fcb8016..440b39060 100644
--- a/tests/unit/unit1307.c
+++ b/tests/unit/unit1307.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -316,10 +316,6 @@ UNITTEST_STOP
#else
UNITTEST_START
-{
- /* nothing to do, just fail */
- return 1;
-}
UNITTEST_STOP
#endif
diff --git a/tests/unit/unit1308.c b/tests/unit/unit1308.c
index 2a866e78a..a6e500487 100644
--- a/tests/unit/unit1308.c
+++ b/tests/unit/unit1308.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -21,6 +21,7 @@
* SPDX-License-Identifier: curl
*
***************************************************************************/
+#define CURL_DISABLE_DEPRECATION /* Testing the form api */
#include "curlcheck.h"
#include <curl/curl.h>
@@ -73,7 +74,7 @@ UNITTEST_START
fail_unless(rc == 0, "curl_formget returned error");
- fail_unless(total_size == 488, "curl_formget got wrong size back");
+ fail_unless(total_size == 518, "curl_formget got wrong size back");
curl_formfree(post);
@@ -82,7 +83,7 @@ UNITTEST_START
rc = curl_formadd(&post, &last,
CURLFORM_PTRNAME, "name of file field",
- CURLFORM_FILE, "log/test-1308",
+ CURLFORM_FILE, arg,
CURLFORM_FILENAME, "custom named file",
CURLFORM_END);
@@ -90,7 +91,7 @@ UNITTEST_START
rc = curl_formget(post, &total_size, print_httppost_callback);
fail_unless(rc == 0, "curl_formget returned error");
- fail_unless(total_size == 851, "curl_formget got wrong size back");
+ fail_unless(total_size == 899, "curl_formget got wrong size back");
curl_formfree(post);
diff --git a/tests/unit/unit1309.c b/tests/unit/unit1309.c
index 121dfedec..5c5801abd 100644
--- a/tests/unit/unit1309.c
+++ b/tests/unit/unit1309.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/unit/unit1323.c b/tests/unit/unit1323.c
index b089282f3..bdd02b5de 100644
--- a/tests/unit/unit1323.c
+++ b/tests/unit/unit1323.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -54,13 +54,13 @@ UNITTEST_START
for(i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) {
timediff_t result = Curl_timediff(tests[i].first, tests[i].second);
if(result != tests[i].result) {
- printf("%d.%06u to %d.%06u got %d, but expected %d\n",
- tests[i].first.tv_sec,
+ printf("%ld.%06u to %ld.%06u got %d, but expected %ld\n",
+ (long)tests[i].first.tv_sec,
tests[i].first.tv_usec,
- tests[i].second.tv_sec,
+ (long)tests[i].second.tv_sec,
tests[i].second.tv_usec,
- result,
- tests[i].result);
+ (int)result,
+ (long)tests[i].result);
fail("unexpected result!");
}
}
diff --git a/tests/unit/unit1330.c b/tests/unit/unit1330.c
index ea6f99699..2e27e8093 100644
--- a/tests/unit/unit1330.c
+++ b/tests/unit/unit1330.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/unit/unit1394.c b/tests/unit/unit1394.c
index f4f05a06c..ef398ab22 100644
--- a/tests/unit/unit1394.c
+++ b/tests/unit/unit1394.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -61,7 +61,7 @@ UNITTEST_START
"pkcs11:foobar", "pkcs11:foobar", NULL,
"PKCS11:foobar", "PKCS11:foobar", NULL,
"PkCs11:foobar", "PkCs11:foobar", NULL,
-#ifdef WIN32
+#ifdef _WIN32
"c:\\foo:bar:baz", "c:\\foo", "bar:baz",
"c:\\foo\\:bar:baz", "c:\\foo:bar", "baz",
"c:\\foo\\\\:bar:baz", "c:\\foo\\", "bar:baz",
diff --git a/tests/unit/unit1395.c b/tests/unit/unit1395.c
index c37f942d3..017b45a0e 100644
--- a/tests/unit/unit1395.c
+++ b/tests/unit/unit1395.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -24,7 +24,7 @@
#include "curlcheck.h"
/* copied from urlapi.c */
-extern char *dedotdotify(const char *input, size_t clen);
+extern int dedotdotify(const char *input, size_t clen, char **out);
#include "memdebug.h"
@@ -58,35 +58,45 @@ UNITTEST_START
{ "/1/./..", "/" },
{ "/1/./../2", "/2" },
{ "/hello/1/./../2", "/hello/2" },
- { "test/this", "test/this" },
+ { "test/this", NULL },
{ "test/this/../now", "test/now" },
{ "/1../moo../foo", "/1../moo../foo"},
{ "/../../moo", "/moo"},
- { "/../../moo?andnot/../yay", "/moo?andnot/../yay"},
- { "/123?foo=/./&bar=/../", "/123?foo=/./&bar=/../"},
- { "/../moo/..?what", "/?what" },
- { "/", "/" },
- { "", "" },
+ { "/../../moo?", "/moo?"},
+ { "/123?", NULL},
+ { "/../moo/..?", "/" },
+ { "/", NULL },
+ { "", NULL },
{ "/.../", "/.../" },
{ "./moo", "moo" },
{ "../moo", "moo" },
{ "/.", "/" },
{ "/..", "/" },
{ "/moo/..", "/" },
- { "..", "" },
- { ".", "" },
+ { "/..", "/" },
+ { "/.", "/" },
};
for(i = 0; i < sizeof(pairs)/sizeof(pairs[0]); i++) {
- char *out = dedotdotify(pairs[i].input, strlen(pairs[i].input));
- abort_unless(out != NULL, "returned NULL!");
+ char *out;
+ int err = dedotdotify(pairs[i].input, strlen(pairs[i].input), &out);
+ abort_unless(err == 0, "returned error");
+ abort_if(err && out, "returned error with output");
- if(strcmp(out, pairs[i].output)) {
+ if(out && pairs[i].output && strcmp(out, pairs[i].output)) {
fprintf(stderr, "Test %u: '%s' gave '%s' instead of '%s'\n",
i, pairs[i].input, out, pairs[i].output);
fail("Test case output mismatched");
fails++;
}
+ else if((!out && pairs[i].output) ||
+ (out && !pairs[i].output)) {
+ fprintf(stderr, "Test %u: '%s' gave '%s' instead of '%s'\n",
+ i, pairs[i].input, out ? out : "(null)",
+ pairs[i].output ? pairs[i].output : "(null)");
+ fail("Test case output mismatched");
+ fails++;
+ }
else
fprintf(stderr, "Test %u: OK\n", i);
free(out);
diff --git a/tests/unit/unit1396.c b/tests/unit/unit1396.c
index 05b3323da..43f9c8667 100644
--- a/tests/unit/unit1396.c
+++ b/tests/unit/unit1396.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/unit/unit1397.c b/tests/unit/unit1397.c
index 90ec31c68..bf65d9231 100644
--- a/tests/unit/unit1397.c
+++ b/tests/unit/unit1397.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -23,7 +23,6 @@
***************************************************************************/
#include "curlcheck.h"
-#include "vtls/hostcheck.h" /* from the lib dir */
static CURLcode unit_setup(void)
{
@@ -32,63 +31,94 @@ static CURLcode unit_setup(void)
static void unit_stop(void)
{
- /* done before shutting down and exiting */
}
-UNITTEST_START
-
/* only these backends define the tested functions */
-#if defined(USE_OPENSSL) || defined(USE_GSKIT)
-
- /* here you start doing things and checking that the results are good */
+#if defined(USE_OPENSSL) || defined(USE_SCHANNEL)
+#include "vtls/hostcheck.h"
+struct testcase {
+ const char *host;
+ const char *pattern;
+ bool match;
+};
-fail_unless(Curl_cert_hostcheck(STRCONST("www.example.com"),
- STRCONST("www.example.com")), "good 1");
-fail_unless(Curl_cert_hostcheck(STRCONST("*.example.com"),
- STRCONST("www.example.com")),
- "good 2");
-fail_unless(Curl_cert_hostcheck(STRCONST("xxx*.example.com"),
- STRCONST("xxxwww.example.com")), "good 3");
-fail_unless(Curl_cert_hostcheck(STRCONST("f*.example.com"),
- STRCONST("foo.example.com")), "good 4");
-fail_unless(Curl_cert_hostcheck(STRCONST("192.168.0.0"),
- STRCONST("192.168.0.0")), "good 5");
+static struct testcase tests[] = {
+ {"", "", FALSE},
+ {"a", "", FALSE},
+ {"", "b", FALSE},
+ {"a", "b", FALSE},
+ {"aa", "bb", FALSE},
+ {"\xff", "\xff", TRUE},
+ {"aa.aa.aa", "aa.aa.bb", FALSE},
+ {"aa.aa.aa", "aa.aa.aa", TRUE},
+ {"aa.aa.aa", "*.aa.bb", FALSE},
+ {"aa.aa.aa", "*.aa.aa", TRUE},
+ {"192.168.0.1", "192.168.0.1", TRUE},
+ {"192.168.0.1", "*.168.0.1", FALSE},
+ {"192.168.0.1", "*.0.1", FALSE},
+ {"h.ello", "*.ello", FALSE},
+ {"h.ello.", "*.ello", FALSE},
+ {"h.ello", "*.ello.", FALSE},
+ {"h.e.llo", "*.e.llo", TRUE},
+ {"h.e.llo", " *.e.llo", FALSE},
+ {" h.e.llo", "*.e.llo", TRUE},
+ {"h.e.llo.", "*.e.llo", TRUE},
+ {"*.e.llo.", "*.e.llo", TRUE},
+ {"************.e.llo.", "*.e.llo", TRUE},
+ {"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+ "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
+ "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
+ "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
+ "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
+ ".e.llo.", "*.e.llo", TRUE},
+ {"\xfe\xfe.e.llo.", "*.e.llo", TRUE},
+ {"h.e.llo.", "*.e.llo.", TRUE},
+ {"h.e.llo", "*.e.llo.", TRUE},
+ {".h.e.llo", "*.e.llo.", FALSE},
+ {"h.e.llo", "*.*.llo.", FALSE},
+ {"h.e.llo", "h.*.llo", FALSE},
+ {"h.e.llo", "h.e.*", FALSE},
+ {"hello", "*.ello", FALSE},
+ {"hello", "**llo", FALSE},
+ {"bar.foo.example.com", "*.example.com", FALSE},
+ {"foo.example.com", "*.example.com", TRUE},
+ {"baz.example.net", "b*z.example.net", FALSE},
+ {"foobaz.example.net", "*baz.example.net", FALSE},
+ {"xn--l8j.example.local", "x*.example.local", FALSE},
+ {"xn--l8j.example.net", "*.example.net", TRUE},
+ {"xn--l8j.example.net", "*j.example.net", FALSE},
+ {"xn--l8j.example.net", "xn--l8j.example.net", TRUE},
+ {"xn--l8j.example.net", "xn--l8j.*.net", FALSE},
+ {"xl8j.example.net", "*.example.net", TRUE},
+ {"fe80::3285:a9ff:fe46:b619", "*::3285:a9ff:fe46:b619", FALSE},
+ {"fe80::3285:a9ff:fe46:b619", "fe80::3285:a9ff:fe46:b619", TRUE},
+ {NULL, NULL, FALSE}
+};
-fail_if(Curl_cert_hostcheck(STRCONST("xxx.example.com"),
- STRCONST("www.example.com")), "bad 1");
-fail_if(Curl_cert_hostcheck(STRCONST("*"),
- STRCONST("www.example.com")),"bad 2");
-fail_if(Curl_cert_hostcheck(STRCONST("*.*.com"),
- STRCONST("www.example.com")), "bad 3");
-fail_if(Curl_cert_hostcheck(STRCONST("*.example.com"),
- STRCONST("baa.foo.example.com")), "bad 4");
-fail_if(Curl_cert_hostcheck(STRCONST("f*.example.com"),
- STRCONST("baa.example.com")), "bad 5");
-fail_if(Curl_cert_hostcheck(STRCONST("*.com"),
- STRCONST("example.com")), "bad 6");
-fail_if(Curl_cert_hostcheck(STRCONST("*fail.com"),
- STRCONST("example.com")), "bad 7");
-fail_if(Curl_cert_hostcheck(STRCONST("*.example."),
- STRCONST("www.example.")), "bad 8");
-fail_if(Curl_cert_hostcheck(STRCONST("*.example."),
- STRCONST("www.example")), "bad 9");
-fail_if(Curl_cert_hostcheck(STRCONST(""), STRCONST("www")), "bad 10");
-fail_if(Curl_cert_hostcheck(STRCONST("*"), STRCONST("www")), "bad 11");
-fail_if(Curl_cert_hostcheck(STRCONST("*.168.0.0"),
- STRCONST("192.168.0.0")), "bad 12");
-fail_if(Curl_cert_hostcheck(STRCONST("www.example.com"),
- STRCONST("192.168.0.0")), "bad 13");
-
-#ifdef ENABLE_IPV6
-fail_if(Curl_cert_hostcheck(STRCONST("*::3285:a9ff:fe46:b619"),
- STRCONST("fe80::3285:a9ff:fe46:b619")), "bad 14");
-fail_unless(Curl_cert_hostcheck(STRCONST("fe80::3285:a9ff:fe46:b619"),
- STRCONST("fe80::3285:a9ff:fe46:b619")),
- "good 6");
-#endif
+UNITTEST_START
+{
+ int i;
+ for(i = 0; tests[i].host; i++) {
+ if(tests[i].match != Curl_cert_hostcheck(tests[i].pattern,
+ strlen(tests[i].pattern),
+ tests[i].host,
+ strlen(tests[i].host))) {
+ fprintf(stderr,
+ "HOST: %s\n"
+ "PTRN: %s\n"
+ "did %sMATCH\n",
+ tests[i].host,
+ tests[i].pattern,
+ tests[i].match ? "NOT ": "");
+ unitfail++;
+ }
+ }
+}
-#endif
+UNITTEST_STOP
+#else
- /* you end the test code like this: */
+UNITTEST_START
UNITTEST_STOP
+#endif
diff --git a/tests/unit/unit1398.c b/tests/unit/unit1398.c
index 662e3bdbc..bf8af12d3 100644
--- a/tests/unit/unit1398.c
+++ b/tests/unit/unit1398.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -21,6 +21,8 @@
* SPDX-License-Identifier: curl
*
***************************************************************************/
+#define CURL_NO_FMT_CHECKS
+
#include "curlcheck.h"
#include "curl/mprintf.h"
diff --git a/tests/unit/unit1399.c b/tests/unit/unit1399.c
index c364650fc..1a293ac76 100644
--- a/tests/unit/unit1399.c
+++ b/tests/unit/unit1399.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -76,7 +76,7 @@ static void expect_timer_seconds(struct Curl_easy *data, int seconds)
}
/* Scenario: simulate a redirect. When a redirect occurs, t_nslookup,
- * t_connect, t_appconnect, t_pretransfer, and t_starttransfer are addative.
+ * t_connect, t_appconnect, t_pretransfer, and t_starttransfer are additive.
* E.g., if t_starttransfer took 2 seconds initially and took another 1
* second for the redirect request, then the resulting t_starttransfer should
* be 3 seconds. */
diff --git a/tests/unit/unit1600.c b/tests/unit/unit1600.c
index 544744840..ee36c5e65 100644
--- a/tests/unit/unit1600.c
+++ b/tests/unit/unit1600.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/unit/unit1601.c b/tests/unit/unit1601.c
index c598c0cf7..4623bb776 100644
--- a/tests/unit/unit1601.c
+++ b/tests/unit/unit1601.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -37,7 +37,9 @@ static void unit_stop(void)
UNITTEST_START
-#ifndef CURL_DISABLE_CRYPTO_AUTH
+#if (defined(USE_CURL_NTLM_CORE) && !defined(USE_WINDOWS_SSPI)) \
+ || !defined(CURL_DISABLE_DIGEST_AUTH)
+
const char string1[] = "1";
const char string2[] = "hello-you-fool";
unsigned char output[MD5_DIGEST_LEN];
diff --git a/tests/unit/unit1602.c b/tests/unit/unit1602.c
index aa2b463aa..f7dc4a212 100644
--- a/tests/unit/unit1602.c
+++ b/tests/unit/unit1602.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/unit/unit1603.c b/tests/unit/unit1603.c
index e8640a760..004fdbccb 100644
--- a/tests/unit/unit1603.c
+++ b/tests/unit/unit1603.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2015 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/unit/unit1604.c b/tests/unit/unit1604.c
index f7f8cee3d..cba3dfcf6 100644
--- a/tests/unit/unit1604.c
+++ b/tests/unit/unit1604.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -42,7 +42,7 @@ static void unit_stop(void)
}
-#if defined(MSDOS) || defined(WIN32)
+#if defined(_WIN32) || defined(MSDOS)
static char *getflagstr(int flags)
{
@@ -353,6 +353,6 @@ UNITTEST_START
{
fprintf(stderr, "Skipped test not for this platform\n");
}
-#endif /* MSDOS || WIN32 */
+#endif /* _WIN32 || MSDOS */
UNITTEST_STOP
diff --git a/tests/unit/unit1605.c b/tests/unit/unit1605.c
index 34a3690fa..d0006d2b5 100644
--- a/tests/unit/unit1605.c
+++ b/tests/unit/unit1605.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/unit/unit1606.c b/tests/unit/unit1606.c
index 0519b7c89..faa894155 100644
--- a/tests/unit/unit1606.c
+++ b/tests/unit/unit1606.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/unit/unit1607.c b/tests/unit/unit1607.c
index 7295f1883..cd2657147 100644
--- a/tests/unit/unit1607.c
+++ b/tests/unit/unit1607.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -190,7 +190,7 @@ UNITTEST_START
if(port != tests[i].port) {
fprintf(stderr, "%s:%d tests[%d] failed. the retrieved port "
- "for tests[%d].address[%d] is %ld but tests[%d].port is %d.\n",
+ "for tests[%d].address[%d] is %d but tests[%d].port is %d.\n",
__FILE__, __LINE__, i, i, j, port, i, tests[i].port);
problem = true;
break;
@@ -227,7 +227,7 @@ UNITTEST_START
continue;
}
}
- error:
+error:
curl_easy_cleanup(easy);
curl_multi_cleanup(multi);
curl_slist_free_all(list);
diff --git a/tests/unit/unit1608.c b/tests/unit/unit1608.c
index 64ef90fe8..f734b7788 100644
--- a/tests/unit/unit1608.c
+++ b/tests/unit/unit1608.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -25,6 +25,8 @@
#include "hostip.h"
+#ifndef CURL_DISABLE_SHUFFLE_DNS
+
CURLcode Curl_shuffle_addr(struct Curl_easy *data,
struct Curl_addrinfo **addr);
@@ -47,7 +49,7 @@ static void unit_stop(void)
}
UNITTEST_START
-{
+
int i;
CURLcode code;
struct Curl_addrinfo *addrhead = addrs;
@@ -71,6 +73,17 @@ UNITTEST_START
abort_unless(addrhead != addrs, "addresses are not being reordered");
- return 0;
+UNITTEST_STOP
+
+#else
+static CURLcode unit_setup(void)
+{
+ return CURLE_OK;
+}
+static void unit_stop(void)
+{
}
+UNITTEST_START
UNITTEST_STOP
+
+#endif
diff --git a/tests/unit/unit1609.c b/tests/unit/unit1609.c
index cab8383d0..19c59ada3 100644
--- a/tests/unit/unit1609.c
+++ b/tests/unit/unit1609.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -189,7 +189,7 @@ UNITTEST_START
if(port != tests[i].port) {
fprintf(stderr, "%s:%d tests[%d] failed. the retrieved port "
- "for tests[%d].address[%d] is %ld but tests[%d].port is %d.\n",
+ "for tests[%d].address[%d] is %d but tests[%d].port is %d.\n",
__FILE__, __LINE__, i, i, j, port, i, tests[i].port);
problem = true;
break;
@@ -212,7 +212,7 @@ UNITTEST_START
}
}
goto unit_test_abort;
- error:
+error:
curl_easy_cleanup(easy);
curl_multi_cleanup(multi);
curl_slist_free_all(list);
diff --git a/tests/unit/unit1610.c b/tests/unit/unit1610.c
index 78d415c18..b4c6ef4d3 100644
--- a/tests/unit/unit1610.c
+++ b/tests/unit/unit1610.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -39,7 +39,9 @@ static void unit_stop(void)
UNITTEST_START
-#ifndef CURL_DISABLE_CRYPTO_AUTH
+#if !defined(CURL_DISABLE_AWS) || !defined(CURL_DISABLE_DIGEST_AUTH) \
+ || defined(USE_LIBSSH2)
+
const char string1[] = "1";
const char string2[] = "hello-you-fool";
unsigned char output[SHA256_DIGEST_LENGTH];
diff --git a/tests/unit/unit1611.c b/tests/unit/unit1611.c
index 46f9aa85a..0062ac6c3 100644
--- a/tests/unit/unit1611.c
+++ b/tests/unit/unit1611.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -37,7 +37,7 @@ static void unit_stop(void)
UNITTEST_START
-#ifndef CURL_DISABLE_CRYPTO_AUTH
+#ifdef USE_CURL_NTLM_CORE
const char string1[] = "1";
const char string2[] = "hello-you-fool";
unsigned char output[MD4_DIGEST_LENGTH];
diff --git a/tests/unit/unit1612.c b/tests/unit/unit1612.c
index d0e221cbd..1f5b34d13 100644
--- a/tests/unit/unit1612.c
+++ b/tests/unit/unit1612.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -38,7 +38,9 @@ static void unit_stop(void)
UNITTEST_START
-#ifndef CURL_DISABLE_CRYPTO_AUTH
+#if (defined(USE_CURL_NTLM_CORE) && !defined(USE_WINDOWS_SSPI)) \
+ || !defined(CURL_DISABLE_DIGEST_AUTH)
+
const char password[] = "Pa55worD";
const char string1[] = "1";
const char string2[] = "hello-you-fool";
diff --git a/tests/unit/unit1614.c b/tests/unit/unit1614.c
index 60285450c..ef03e3b4c 100644
--- a/tests/unit/unit1614.c
+++ b/tests/unit/unit1614.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -46,6 +46,7 @@ struct noproxy {
const char *a;
const char *n;
bool match;
+ bool space; /* space separated */
};
UNITTEST_START
@@ -77,26 +78,52 @@ UNITTEST_START
{ NULL, NULL, 0, FALSE} /* end marker */
};
struct noproxy list[]= {
- { "foobar", "barfoo", FALSE},
- { "foobar", "foobar", TRUE},
- { "192.168.0.1", "foobar", FALSE},
- { "192.168.0.1", "192.168.0.0/16", TRUE},
- { "192.168.0.1", "192.168.0.0/24", TRUE},
- { "192.168.0.1", "192.168.0.0/32", FALSE},
- { "192.168.0.1", "192.168.0.0", FALSE},
- { "192.168.1.1", "192.168.0.0/24", FALSE},
- { "192.168.1.1", "foo, bar, 192.168.0.0/24", FALSE},
- { "192.168.1.1", "foo, bar, 192.168.0.0/16", TRUE},
- { "[::1]", "foo, bar, 192.168.0.0/16", FALSE},
- { "[::1]", "foo, bar, ::1/64", TRUE},
- { "bar", "foo, bar, ::1/64", TRUE},
- { "BAr", "foo, bar, ::1/64", TRUE},
- { "BAr", "foo,,,,, bar, ::1/64", TRUE},
- { "www.example.com", "foo, .example.com", TRUE},
- { "www.example.com", "www2.example.com, .example.net", FALSE},
- { "example.com", ".example.com, .example.net", TRUE},
- { "nonexample.com", ".example.com, .example.net", FALSE},
- { NULL, NULL, FALSE}
+ { "www.example.com", "localhost .example.com .example.de", TRUE, TRUE},
+ { "www.example.com", "localhost,.example.com,.example.de", TRUE, FALSE},
+ { "www.example.com.", "localhost,.example.com,.example.de", TRUE, FALSE},
+ { "example.com", "localhost,.example.com,.example.de", TRUE, FALSE},
+ { "example.com.", "localhost,.example.com,.example.de", TRUE, FALSE},
+ { "www.example.com", "localhost,.example.com.,.example.de", TRUE, FALSE},
+ { "www.example.com", "localhost,www.example.com.,.example.de",
+ TRUE, FALSE},
+ { "example.com", "localhost,example.com,.example.de", TRUE, FALSE},
+ { "example.com.", "localhost,example.com,.example.de", TRUE, FALSE},
+ { "nexample.com", "localhost,example.com,.example.de", FALSE, FALSE},
+ { "www.example.com", "localhost,example.com,.example.de", TRUE, FALSE},
+ { "127.0.0.1", "127.0.0.1,localhost", TRUE, FALSE},
+ { "127.0.0.1", "127.0.0.1,localhost,", TRUE, FALSE},
+ { "127.0.0.1", "127.0.0.1/8,localhost,", TRUE, FALSE},
+ { "127.0.0.1", "127.0.0.1/28,localhost,", TRUE, FALSE},
+ { "127.0.0.1", "127.0.0.1/31,localhost,", TRUE, FALSE},
+ { "127.0.0.1", "localhost,127.0.0.1", TRUE, FALSE},
+ { "127.0.0.1", "localhost,127.0.0.1.127.0.0.1.127.0.0.1.127.0.0.1."
+ "127.0.0.1.127.0.0.1.127.0.0.1.127.0.0.1.127.0.0.1.127.0.0.1.127."
+ "0.0.1.127.0.0.1.127.0.0." /* 128 bytes "address" */, FALSE, FALSE},
+ { "127.0.0.1", "localhost,127.0.0.1.127.0.0.1.127.0.0.1.127.0.0.1."
+ "127.0.0.1.127.0.0.1.127.0.0.1.127.0.0.1.127.0.0.1.127.0.0.1.127."
+ "0.0.1.127.0.0.1.127.0.0" /* 127 bytes "address" */, FALSE, FALSE},
+ { "localhost", "localhost,127.0.0.1", TRUE, FALSE},
+ { "localhost", "127.0.0.1,localhost", TRUE, FALSE},
+ { "foobar", "barfoo", FALSE, FALSE},
+ { "foobar", "foobar", TRUE, FALSE},
+ { "192.168.0.1", "foobar", FALSE, FALSE},
+ { "192.168.0.1", "192.168.0.0/16", TRUE, FALSE},
+ { "192.168.0.1", "192.168.0.0/24", TRUE, FALSE},
+ { "192.168.0.1", "192.168.0.0/32", FALSE, FALSE},
+ { "192.168.0.1", "192.168.0.0", FALSE, FALSE},
+ { "192.168.1.1", "192.168.0.0/24", FALSE, FALSE},
+ { "192.168.1.1", "foo, bar, 192.168.0.0/24", FALSE, FALSE},
+ { "192.168.1.1", "foo, bar, 192.168.0.0/16", TRUE, FALSE},
+ { "[::1]", "foo, bar, 192.168.0.0/16", FALSE, FALSE},
+ { "[::1]", "foo, bar, ::1/64", TRUE, FALSE},
+ { "bar", "foo, bar, ::1/64", TRUE, FALSE},
+ { "BAr", "foo, bar, ::1/64", TRUE, FALSE},
+ { "BAr", "foo,,,,, bar, ::1/64", TRUE, FALSE},
+ { "www.example.com", "foo, .example.com", TRUE, FALSE},
+ { "www.example.com", "www2.example.com, .example.net", FALSE, FALSE},
+ { "example.com", ".example.com, .example.net", TRUE, FALSE},
+ { "nonexample.com", ".example.com, .example.net", FALSE, FALSE},
+ { NULL, NULL, FALSE, FALSE}
};
for(i = 0; list4[i].a; i++) {
bool match = Curl_cidr4_match(list4[i].a, list4[i].n, list4[i].bits);
@@ -117,17 +144,21 @@ UNITTEST_START
}
}
for(i = 0; list[i].a; i++) {
- bool match = Curl_check_noproxy(list[i].a, list[i].n);
+ bool spacesep = FALSE;
+ bool match = Curl_check_noproxy(list[i].a, list[i].n, &spacesep);
if(match != list[i].match) {
fprintf(stderr, "%s in %s should %smatch\n",
list[i].a, list[i].n,
list[i].match ? "": "not ");
err++;
}
+ if(spacesep != list[i].space) {
+ fprintf(stderr, "%s is claimed to be %sspace separated\n",
+ list[i].n, list[i].space?"":"NOT ");
+ err++;
+ }
}
- return err;
+ fail_if(err, "errors");
}
-#else
-return 0;
#endif
UNITTEST_STOP
diff --git a/tests/unit/unit1620.c b/tests/unit/unit1620.c
index cd4623d6b..8b6f34ca7 100644
--- a/tests/unit/unit1620.c
+++ b/tests/unit/unit1620.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/unit/unit1621.c b/tests/unit/unit1621.c
index 9147d4070..c384e044d 100644
--- a/tests/unit/unit1621.c
+++ b/tests/unit/unit1621.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -41,9 +41,6 @@ static void unit_stop(void)
(!defined(HAVE_FSETXATTR) && \
(!defined(__FreeBSD_version) || (__FreeBSD_version < 500000)))
UNITTEST_START
-{
- return 0;
-}
UNITTEST_STOP
#else
@@ -68,7 +65,6 @@ static const struct checkthis tests[] = {
UNITTEST_START
{
int i;
- int rc = 0;
for(i = 0; tests[i].input; i++) {
const char *url = tests[i].input;
@@ -76,15 +72,10 @@ UNITTEST_START
printf("Test %u got input \"%s\", output: \"%s\"\n",
i, tests[i].input, stripped);
- if(stripped && strcmp(tests[i].output, stripped)) {
- fprintf(stderr, "Test %u got input \"%s\", expected output \"%s\"\n"
- " Actual output: \"%s\"\n", i, tests[i].input, tests[i].output,
- stripped);
- rc++;
- }
+ fail_if(stripped && strcmp(tests[i].output, stripped),
+ tests[i].output);
curl_free(stripped);
}
- return rc;
}
UNITTEST_STOP
#endif
diff --git a/tests/unit/unit1650.c b/tests/unit/unit1650.c
index ae748a971..1993616bf 100644
--- a/tests/unit/unit1650.c
+++ b/tests/unit/unit1650.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2018 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -159,25 +159,27 @@ UNITTEST_START
unsigned char buffer[256];
size_t i;
unsigned char *p;
+
for(i = 0; i < sizeof(req) / sizeof(req[0]); i++) {
int rc = doh_encode(req[i].name, req[i].type,
buffer, sizeof(buffer), &size);
if(rc != req[i].rc) {
fprintf(stderr, "req %zu: Expected return code %d got %d\n", i,
req[i].rc, rc);
- return 1;
+ abort_if(rc != req[i].rc, "return code");
}
- else if(size != req[i].size) {
+ if(size != req[i].size) {
fprintf(stderr, "req %zu: Expected size %zu got %zu\n", i,
req[i].size, size);
fprintf(stderr, "DNS encode made: %s\n", hexdump(buffer, size));
- return 2;
+ abort_if(size != req[i].size, "size");
}
- else if(req[i].packet && memcmp(req[i].packet, buffer, size)) {
+ if(req[i].packet && memcmp(req[i].packet, buffer, size)) {
fprintf(stderr, "DNS encode made: %s\n", hexdump(buffer, size));
fprintf(stderr, "... instead of: %s\n",
hexdump((unsigned char *)req[i].packet, size));
- return 3;
+ abort_if(req[i].packet && memcmp(req[i].packet, buffer, size),
+ "contents");
}
}
@@ -193,7 +195,7 @@ UNITTEST_START
if(rc != resp[i].rc) {
fprintf(stderr, "resp %zu: Expected return code %d got %d\n", i,
resp[i].rc, rc);
- return 4;
+ abort_if(rc != resp[i].rc, "return code");
}
len = sizeof(buffer);
ptr = (char *)buffer;
@@ -234,63 +236,61 @@ UNITTEST_START
if(resp[i].out && strcmp((char *)buffer, resp[i].out)) {
fprintf(stderr, "resp %zu: Expected %s got %s\n", i,
resp[i].out, buffer);
- return 1;
+ abort_if(resp[i].out && strcmp((char *)buffer, resp[i].out), "content");
}
}
- {
- /* pass all sizes into the decoder until full */
- for(i = 0; i < sizeof(full49)-1; i++) {
- struct dohentry d;
- int rc;
- memset(&d, 0, sizeof(d));
- rc = doh_decode((const unsigned char *)full49, i, DNS_TYPE_A, &d);
- if(!rc) {
- /* none of them should work */
- fprintf(stderr, "%zu: %d\n", i, rc);
- return 5;
- }
+ /* pass all sizes into the decoder until full */
+ for(i = 0; i < sizeof(full49)-1; i++) {
+ struct dohentry d;
+ int rc;
+ memset(&d, 0, sizeof(d));
+ rc = doh_decode((const unsigned char *)full49, i, DNS_TYPE_A, &d);
+ if(!rc) {
+ /* none of them should work */
+ fprintf(stderr, "%zu: %d\n", i, rc);
+ abort_if(!rc, "error rc");
}
- /* and try all pieces from the other end of the packet */
- for(i = 1; i < sizeof(full49); i++) {
- struct dohentry d;
- int rc;
- memset(&d, 0, sizeof(d));
- rc = doh_decode((const unsigned char *)&full49[i], sizeof(full49)-i-1,
- DNS_TYPE_A, &d);
- if(!rc) {
- /* none of them should work */
- fprintf(stderr, "2 %zu: %d\n", i, rc);
- return 7;
- }
+ }
+
+ /* and try all pieces from the other end of the packet */
+ for(i = 1; i < sizeof(full49); i++) {
+ struct dohentry d;
+ int rc;
+ memset(&d, 0, sizeof(d));
+ rc = doh_decode((const unsigned char *)&full49[i], sizeof(full49)-i-1,
+ DNS_TYPE_A, &d);
+ if(!rc) {
+ /* none of them should work */
+ fprintf(stderr, "2 %zu: %d\n", i, rc);
+ abort_if(!rc, "error rc");
}
- {
- int rc;
- struct dohentry d;
- struct dohaddr *a;
- memset(&d, 0, sizeof(d));
- rc = doh_decode((const unsigned char *)full49, sizeof(full49)-1,
- DNS_TYPE_A, &d);
- fail_if(d.numaddr != 1, "missing address");
- a = &d.addr[0];
- p = &a->ip.v4[0];
- msnprintf((char *)buffer, sizeof(buffer),
- "%u.%u.%u.%u", p[0], p[1], p[2], p[3]);
- if(rc || strcmp((char *)buffer, "127.0.0.1")) {
- fprintf(stderr, "bad address decoded: %s, rc == %d\n", buffer, rc);
- return 7;
- }
- fail_if(d.numcname, "bad cname counter");
+ }
+
+ {
+ int rc;
+ struct dohentry d;
+ struct dohaddr *a;
+ memset(&d, 0, sizeof(d));
+ rc = doh_decode((const unsigned char *)full49, sizeof(full49)-1,
+ DNS_TYPE_A, &d);
+ fail_if(d.numaddr != 1, "missing address");
+ a = &d.addr[0];
+ p = &a->ip.v4[0];
+ msnprintf((char *)buffer, sizeof(buffer),
+ "%u.%u.%u.%u", p[0], p[1], p[2], p[3]);
+ if(rc || strcmp((char *)buffer, "127.0.0.1")) {
+ fprintf(stderr, "bad address decoded: %s, rc == %d\n", buffer, rc);
+ abort_if(rc || strcmp((char *)buffer, "127.0.0.1"), "bad address");
}
+ fail_if(d.numcname, "bad cname counter");
}
}
UNITTEST_STOP
#else /* CURL_DISABLE_DOH */
UNITTEST_START
-{
- return 1; /* nothing to do, just fail */
-}
+/* nothing to do, just succeed */
UNITTEST_STOP
diff --git a/tests/unit/unit1651.c b/tests/unit/unit1651.c
index 3f92f820c..58d2f1076 100644
--- a/tests/unit/unit1651.c
+++ b/tests/unit/unit1651.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2018 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -34,8 +34,7 @@ static void unit_stop(void)
{
}
-#if defined(USE_GSKIT) || defined(USE_NSS) || defined(USE_GNUTLS) || \
- defined(USE_SCHANNEL) || defined(USE_SECTRANSP)
+#if defined(USE_GNUTLS) || defined(USE_SCHANNEL) || defined(USE_SECTRANSP)
/* cert captured from gdb when connecting to curl.se on October 26
2018 */
diff --git a/tests/unit/unit1652.c b/tests/unit/unit1652.c
index 761bf8c64..ef2726216 100644
--- a/tests/unit/unit1652.c
+++ b/tests/unit/unit1652.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/unit/unit1653.c b/tests/unit/unit1653.c
index 40a21dd06..d543fb027 100644
--- a/tests/unit/unit1653.c
+++ b/tests/unit/unit1653.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -92,11 +92,16 @@ UNITTEST_START
u = curl_url();
if(!u)
goto fail;
- ipv6port = strdup("[fe80::250:56ff;fea7:da15]:80");
+ ipv6port = strdup("[fe80::250:56ff;fea7:da15]:808");
if(!ipv6port)
goto fail;
ret = parse_port(u, ipv6port, FALSE);
- fail_unless(ret != CURLUE_OK, "parse_port true on error");
+ fail_unless(ret == CURLUE_OK, "parse_port returned error");
+ ret = curl_url_get(u, CURLUPART_PORT, &portnum, 0);
+ fail_unless(ret == CURLUE_OK, "curl_url_get portnum returned error");
+ fail_unless(portnum && !strcmp(portnum, "808"), "Check portnumber");
+
+ curl_free(portnum);
free_and_clear(ipv6port);
curl_url_cleanup(u);
@@ -180,15 +185,19 @@ UNITTEST_START
free_and_clear(ipv6port);
curl_url_cleanup(u);
- /* Incorrect zone index syntax */
+ /* Incorrect zone index syntax, but the port extractor doesn't care */
u = curl_url();
if(!u)
goto fail;
- ipv6port = strdup("[fe80::250:56ff:fea7:da15!25eth3]:80");
+ ipv6port = strdup("[fe80::250:56ff:fea7:da15!25eth3]:180");
if(!ipv6port)
goto fail;
ret = parse_port(u, ipv6port, FALSE);
- fail_unless(ret != CURLUE_OK, "parse_port returned non-error");
+ fail_unless(ret == CURLUE_OK, "parse_port returned error");
+ ret = curl_url_get(u, CURLUPART_PORT, &portnum, 0);
+ fail_unless(ret == CURLUE_OK, "curl_url_get portnum returned error");
+ fail_unless(portnum && !strcmp(portnum, "180"), "Check portnumber");
+ curl_free(portnum);
free_and_clear(ipv6port);
curl_url_cleanup(u);
@@ -215,7 +224,7 @@ UNITTEST_START
goto fail;
ret = parse_port(u, ipv6port, FALSE);
fail_unless(ret == CURLUE_BAD_PORT_NUMBER, "parse_port did wrong");
- fail:
+fail:
free(ipv6port);
curl_url_cleanup(u);
diff --git a/tests/unit/unit1654.c b/tests/unit/unit1654.c
index 1e4a53550..f7ca3911b 100644
--- a/tests/unit/unit1654.c
+++ b/tests/unit/unit1654.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2019 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -38,105 +38,76 @@ unit_stop(void)
curl_global_cleanup();
}
-#if defined(CURL_DISABLE_HTTP) || defined(CURL_DISABLE_ALTSVC)
-UNITTEST_START
-{
- return 0; /* nothing to do when HTTP or alt-svc is disabled */
-}
-UNITTEST_STOP
-#else
UNITTEST_START
+#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_ALTSVC)
{
char outname[256];
CURL *curl;
CURLcode result;
struct altsvcinfo *asi = Curl_altsvc_init();
- if(!asi)
- return 1;
+ abort_if(!asi, "Curl_altsvc_i");
result = Curl_altsvc_load(asi, arg);
if(result) {
- Curl_altsvc_cleanup(&asi);
- return result;
+ fail_if(result, "Curl_altsvc_load");
+ goto fail;
}
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
- if(!curl)
+ if(!curl) {
+ fail_if(!curl, "curl_easy_init");
goto fail;
+ }
fail_unless(asi->list.size == 4, "wrong number of entries");
msnprintf(outname, sizeof(outname), "%s-out", arg);
result = Curl_altsvc_parse(curl, asi, "h2=\"example.com:8080\"\r\n",
ALPN_h1, "example.org", 8080);
- if(result) {
- fprintf(stderr, "Curl_altsvc_parse() failed!\n");
- unitfail++;
- }
+ fail_if(result, "Curl_altsvc_parse() failed!");
fail_unless(asi->list.size == 5, "wrong number of entries");
result = Curl_altsvc_parse(curl, asi, "h3=\":8080\"\r\n",
ALPN_h1, "2.example.org", 8080);
- if(result) {
- fprintf(stderr, "Curl_altsvc_parse(2) failed!\n");
- unitfail++;
- }
+ fail_if(result, "Curl_altsvc_parse(2) failed!");
fail_unless(asi->list.size == 6, "wrong number of entries");
result = Curl_altsvc_parse(curl, asi,
"h2=\"example.com:8080\", h3=\"yesyes.com\"\r\n",
ALPN_h1, "3.example.org", 8080);
- if(result) {
- fprintf(stderr, "Curl_altsvc_parse(3) failed!\n");
- unitfail++;
- }
+ fail_if(result, "Curl_altsvc_parse(3) failed!");
/* that one should make two entries */
fail_unless(asi->list.size == 8, "wrong number of entries");
result = Curl_altsvc_parse(curl, asi,
"h2=\"example.com:443\"; ma = 120;\r\n",
ALPN_h2, "example.org", 80);
- if(result) {
- fprintf(stderr, "Curl_altsvc_parse(4) failed!\n");
- unitfail++;
- }
+ fail_if(result, "Curl_altsvc_parse(4) failed!");
fail_unless(asi->list.size == 9, "wrong number of entries");
/* quoted 'ma' value */
result = Curl_altsvc_parse(curl, asi,
"h2=\"example.net:443\"; ma=\"180\";\r\n",
ALPN_h2, "example.net", 80);
- if(result) {
- fprintf(stderr, "Curl_altsvc_parse(4) failed!\n");
- unitfail++;
- }
+ fail_if(result, "Curl_altsvc_parse(4) failed!");
fail_unless(asi->list.size == 10, "wrong number of entries");
result =
Curl_altsvc_parse(curl, asi,
"h2=\":443\", h3=\":443\"; ma = 120; persist = 1\r\n",
ALPN_h1, "curl.se", 80);
- if(result) {
- fprintf(stderr, "Curl_altsvc_parse(5) failed!\n");
- unitfail++;
- }
+ fail_if(result, "Curl_altsvc_parse(5) failed!");
fail_unless(asi->list.size == 12, "wrong number of entries");
/* clear that one again and decrease the counter */
result = Curl_altsvc_parse(curl, asi, "clear;\r\n",
ALPN_h1, "curl.se", 80);
- if(result) {
- fprintf(stderr, "Curl_altsvc_parse(6) failed!\n");
- unitfail++;
- }
+ fail_if(result, "Curl_altsvc_parse(6) failed!");
fail_unless(asi->list.size == 10, "wrong number of entries");
Curl_altsvc_save(curl, asi, outname);
curl_easy_cleanup(curl);
- curl_global_cleanup();
- fail:
+fail:
Curl_altsvc_cleanup(&asi);
- curl_global_cleanup();
- return unitfail;
}
-UNITTEST_STOP
#endif
+UNITTEST_STOP
diff --git a/tests/unit/unit1655.c b/tests/unit/unit1655.c
index b5c9a3672..ca88f7150 100644
--- a/tests/unit/unit1655.c
+++ b/tests/unit/unit1655.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2019 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -184,9 +184,7 @@ UNITTEST_STOP
#else /* CURL_DISABLE_DOH */
UNITTEST_START
-{
- return 1; /* nothing to do, just fail */
-}
+/* nothing to do, just succeed */
UNITTEST_STOP
#endif
diff --git a/tests/unit/unit1660.c b/tests/unit/unit1660.c
index 4ef7faa73..938d1a185 100644
--- a/tests/unit/unit1660.c
+++ b/tests/unit/unit1660.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 2020 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -118,25 +118,25 @@ static void showsts(struct stsentry *e, const char *chost)
}
UNITTEST_START
-{
CURLcode result;
struct stsentry *e;
struct hsts *h = Curl_hsts_init();
int i;
const char *chost;
CURL *easy;
- if(!h)
- return 1;
+ char savename[256];
+
+ abort_unless(h, "Curl_hsts_init()");
curl_global_init(CURL_GLOBAL_ALL);
easy = curl_easy_init();
if(!easy) {
Curl_hsts_cleanup(&h);
curl_global_cleanup();
- return 1;
+ abort_unless(easy, "curl_easy_init()");
}
- Curl_hsts_loadfile(easy, h, "log/input1660");
+ Curl_hsts_loadfile(easy, h, arg);
for(i = 0; headers[i].host ; i++) {
if(headers[i].hdr) {
@@ -169,11 +169,11 @@ UNITTEST_START
deltatime++; /* another second passed */
}
- (void)Curl_hsts_save(easy, h, "log/hsts1660");
+ msnprintf(savename, sizeof(savename), "%s.save", arg);
+ (void)Curl_hsts_save(easy, h, savename);
Curl_hsts_cleanup(&h);
curl_easy_cleanup(easy);
curl_global_cleanup();
- return unitfail;
-}
+
UNITTEST_STOP
#endif
diff --git a/tests/unit/unit1661.c b/tests/unit/unit1661.c
index 59cc5a9ec..265e483b5 100644
--- a/tests/unit/unit1661.c
+++ b/tests/unit/unit1661.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
diff --git a/tests/unit/unit2600.c b/tests/unit/unit2600.c
new file mode 100644
index 000000000..a2089b275
--- /dev/null
+++ b/tests/unit/unit2600.c
@@ -0,0 +1,399 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curlcheck.h"
+
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_NETINET_IN6_H
+#include <netinet/in6.h>
+#endif
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
+#ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+#ifdef __VMS
+#include <in.h>
+#include <inet.h>
+#endif
+
+#include <setjmp.h>
+#include <signal.h>
+
+#include "urldata.h"
+#include "connect.h"
+#include "cfilters.h"
+#include "multiif.h"
+#include "curl_trc.h"
+
+
+static CURL *easy;
+
+static CURLcode unit_setup(void)
+{
+ CURLcode res = CURLE_OK;
+
+ global_init(CURL_GLOBAL_ALL);
+ easy = curl_easy_init();
+ if(!easy) {
+ curl_global_cleanup();
+ return CURLE_OUT_OF_MEMORY;
+ }
+ curl_easy_setopt(easy, CURLOPT_VERBOSE, 1L);
+ return res;
+}
+
+static void unit_stop(void)
+{
+ curl_easy_cleanup(easy);
+ curl_global_cleanup();
+}
+
+#ifdef DEBUGBUILD
+
+struct test_case {
+ int id;
+ const char *url;
+ const char *resolve_info;
+ unsigned char ip_version;
+ timediff_t connect_timeout_ms;
+ timediff_t he_timeout_ms;
+ timediff_t cf4_fail_delay_ms;
+ timediff_t cf6_fail_delay_ms;
+
+ int exp_cf4_creations;
+ int exp_cf6_creations;
+ timediff_t min_duration_ms;
+ timediff_t max_duration_ms;
+ CURLcode exp_result;
+ const char *pref_family;
+};
+
+struct ai_family_stats {
+ const char *family;
+ int creations;
+ timediff_t first_created;
+ timediff_t last_created;
+};
+
+struct test_result {
+ CURLcode result;
+ struct curltime started;
+ struct curltime ended;
+ struct ai_family_stats cf4;
+ struct ai_family_stats cf6;
+};
+
+static struct test_case *current_tc;
+static struct test_result *current_tr;
+
+struct cf_test_ctx {
+ int ai_family;
+ int transport;
+ char id[16];
+ struct curltime started;
+ timediff_t fail_delay_ms;
+ struct ai_family_stats *stats;
+};
+
+static void cf_test_destroy(struct Curl_cfilter *cf, struct Curl_easy *data)
+{
+ struct cf_test_ctx *ctx = cf->ctx;
+#ifndef CURL_DISABLE_VERBOSE_STRINGS
+ infof(data, "%04dms: cf[%s] destroyed",
+ (int)Curl_timediff(Curl_now(), current_tr->started), ctx->id);
+#else
+ (void)data;
+#endif
+ free(ctx);
+ cf->ctx = NULL;
+}
+
+static CURLcode cf_test_connect(struct Curl_cfilter *cf,
+ struct Curl_easy *data,
+ bool blocking, bool *done)
+{
+ struct cf_test_ctx *ctx = cf->ctx;
+ timediff_t duration_ms;
+
+ (void)data;
+ (void)blocking;
+ *done = FALSE;
+ duration_ms = Curl_timediff(Curl_now(), ctx->started);
+ if(duration_ms >= ctx->fail_delay_ms) {
+ infof(data, "%04dms: cf[%s] fail delay reached",
+ (int)duration_ms, ctx->id);
+ return CURLE_COULDNT_CONNECT;
+ }
+ if(duration_ms)
+ infof(data, "%04dms: cf[%s] continuing", (int)duration_ms, ctx->id);
+ Curl_expire(data, ctx->fail_delay_ms - duration_ms, EXPIRE_RUN_NOW);
+ return CURLE_OK;
+}
+
+static struct Curl_cftype cft_test = {
+ "TEST",
+ CF_TYPE_IP_CONNECT,
+ CURL_LOG_LVL_NONE,
+ cf_test_destroy,
+ cf_test_connect,
+ Curl_cf_def_close,
+ Curl_cf_def_get_host,
+ Curl_cf_def_adjust_pollset,
+ Curl_cf_def_data_pending,
+ Curl_cf_def_send,
+ Curl_cf_def_recv,
+ Curl_cf_def_cntrl,
+ Curl_cf_def_conn_is_alive,
+ Curl_cf_def_conn_keep_alive,
+ Curl_cf_def_query,
+};
+
+static CURLcode cf_test_create(struct Curl_cfilter **pcf,
+ struct Curl_easy *data,
+ struct connectdata *conn,
+ const struct Curl_addrinfo *ai,
+ int transport)
+{
+ struct cf_test_ctx *ctx = NULL;
+ struct Curl_cfilter *cf = NULL;
+ timediff_t created_at;
+ CURLcode result;
+
+ (void)data;
+ (void)conn;
+ ctx = calloc(1, sizeof(*ctx));
+ if(!ctx) {
+ result = CURLE_OUT_OF_MEMORY;
+ goto out;
+ }
+ ctx->ai_family = ai->ai_family;
+ ctx->transport = transport;
+ ctx->started = Curl_now();
+#ifdef ENABLE_IPV6
+ if(ctx->ai_family == AF_INET6) {
+ ctx->stats = &current_tr->cf6;
+ ctx->fail_delay_ms = current_tc->cf6_fail_delay_ms;
+ curl_msprintf(ctx->id, "v6-%d", ctx->stats->creations);
+ ctx->stats->creations++;
+ }
+ else
+#endif
+ {
+ ctx->stats = &current_tr->cf4;
+ ctx->fail_delay_ms = current_tc->cf4_fail_delay_ms;
+ curl_msprintf(ctx->id, "v4-%d", ctx->stats->creations);
+ ctx->stats->creations++;
+ }
+
+ created_at = Curl_timediff(ctx->started, current_tr->started);
+ if(ctx->stats->creations == 1)
+ ctx->stats->first_created = created_at;
+ ctx->stats->last_created = created_at;
+ infof(data, "%04dms: cf[%s] created", (int)created_at, ctx->id);
+
+ result = Curl_cf_create(&cf, &cft_test, ctx);
+ if(result)
+ goto out;
+
+ Curl_expire(data, ctx->fail_delay_ms, EXPIRE_RUN_NOW);
+
+out:
+ *pcf = (!result)? cf : NULL;
+ if(result) {
+ free(cf);
+ free(ctx);
+ }
+ return result;
+}
+
+static void check_result(struct test_case *tc,
+ struct test_result *tr)
+{
+ char msg[256];
+ timediff_t duration_ms;
+
+ duration_ms = Curl_timediff(tr->ended, tr->started);
+ fprintf(stderr, "%d: test case took %dms\n", tc->id, (int)duration_ms);
+
+ if(tr->result != tc->exp_result
+ && CURLE_OPERATION_TIMEDOUT != tr->result) {
+ /* on CI we encounter the TIMEOUT result, since images get less CPU
+ * and events are not as sharply timed. */
+ curl_msprintf(msg, "%d: expected result %d but got %d",
+ tc->id, tc->exp_result, tr->result);
+ fail(msg);
+ }
+ if(tr->cf4.creations != tc->exp_cf4_creations) {
+ curl_msprintf(msg, "%d: expected %d ipv4 creations, but got %d",
+ tc->id, tc->exp_cf4_creations, tr->cf4.creations);
+ fail(msg);
+ }
+ if(tr->cf6.creations != tc->exp_cf6_creations) {
+ curl_msprintf(msg, "%d: expected %d ipv6 creations, but got %d",
+ tc->id, tc->exp_cf6_creations, tr->cf6.creations);
+ fail(msg);
+ }
+
+ duration_ms = Curl_timediff(tr->ended, tr->started);
+ if(duration_ms < tc->min_duration_ms) {
+ curl_msprintf(msg, "%d: expected min duration of %dms, but took %dms",
+ tc->id, (int)tc->min_duration_ms, (int)duration_ms);
+ fail(msg);
+ }
+ if(duration_ms > tc->max_duration_ms) {
+ curl_msprintf(msg, "%d: expected max duration of %dms, but took %dms",
+ tc->id, (int)tc->max_duration_ms, (int)duration_ms);
+ fail(msg);
+ }
+ if(tr->cf6.creations && tr->cf4.creations && tc->pref_family) {
+ /* did ipv4 and ipv6 both, expect the preferred family to start right arway
+ * with the other being delayed by the happy_eyeball_timeout */
+ struct ai_family_stats *stats1 = !strcmp(tc->pref_family, "v6")?
+ &tr->cf6 : &tr->cf4;
+ struct ai_family_stats *stats2 = !strcmp(tc->pref_family, "v6")?
+ &tr->cf4 : &tr->cf6;
+
+ if(stats1->first_created > 100) {
+ curl_msprintf(msg, "%d: expected ip%s to start right away, instead "
+ "first attempt made after %dms",
+ tc->id, stats1->family, (int)stats1->first_created);
+ fail(msg);
+ }
+ if(stats2->first_created < tc->he_timeout_ms) {
+ curl_msprintf(msg, "%d: expected ip%s to start delayed after %dms, "
+ "instead first attempt made after %dms",
+ tc->id, stats2->family, (int)tc->he_timeout_ms,
+ (int)stats2->first_created);
+ fail(msg);
+ }
+ }
+}
+
+static void test_connect(struct test_case *tc)
+{
+ struct test_result tr;
+ struct curl_slist *list = NULL;
+
+ Curl_debug_set_transport_provider(TRNSPRT_TCP, cf_test_create);
+ current_tc = tc;
+ current_tr = &tr;
+
+ list = curl_slist_append(NULL, tc->resolve_info);
+ fail_unless(list, "error allocating resolve list entry");
+ curl_easy_setopt(easy, CURLOPT_RESOLVE, list);
+ curl_easy_setopt(easy, CURLOPT_IPRESOLVE, (long)tc->ip_version);
+ curl_easy_setopt(easy, CURLOPT_CONNECTTIMEOUT_MS,
+ (long)tc->connect_timeout_ms);
+ curl_easy_setopt(easy, CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS,
+ (long)tc->he_timeout_ms);
+
+ curl_easy_setopt(easy, CURLOPT_URL, tc->url);
+ memset(&tr, 0, sizeof(tr));
+ tr.cf6.family = "v6";
+ tr.cf4.family = "v4";
+
+ tr.started = Curl_now();
+ tr.result = curl_easy_perform(easy);
+ tr.ended = Curl_now();
+
+ curl_easy_setopt(easy, CURLOPT_RESOLVE, NULL);
+ curl_slist_free_all(list);
+ list = NULL;
+ current_tc = NULL;
+ current_tr = NULL;
+
+ check_result(tc, &tr);
+}
+
+#endif /* DEBUGBUILD */
+
+/*
+ * How these test cases work:
+ * - replace the creation of the TCP socket filter with our test filter
+ * - test filter does nothing and reports failure after configured delay
+ * - we feed addresses into the resolve cache to simulate different cases
+ * - we monitor how many instances of ipv4/v6 attempts are made and when
+ * - for mixed families, we expect HAPPY_EYEBALLS_TIMEOUT to trigger
+ *
+ * Max Duration checks needs to be conservative since CI jobs are not
+ * as sharp.
+ */
+#define TURL "http://test.com:123"
+
+#define R_FAIL CURLE_COULDNT_CONNECT
+/* timeout values accounting for low cpu resources in CI */
+#define TC_TMOT 90000 /* 90 sec max test duration */
+#define CNCT_TMOT 60000 /* 60sec connect timeout */
+
+static struct test_case TEST_CASES[] = {
+ /* TIMEOUT_MS, FAIL_MS CREATED DURATION Result, HE_PREF */
+ /* CNCT HE v4 v6 v4 v6 MIN MAX */
+ { 1, TURL, "test.com:123:192.0.2.1", CURL_IPRESOLVE_WHATEVER,
+ CNCT_TMOT, 150, 200, 200, 1, 0, 200, TC_TMOT, R_FAIL, NULL },
+ /* 1 ipv4, fails after ~200ms, reports COULDNT_CONNECT */
+ { 2, TURL, "test.com:123:192.0.2.1,192.0.2.2", CURL_IPRESOLVE_WHATEVER,
+ CNCT_TMOT, 150, 200, 200, 2, 0, 400, TC_TMOT, R_FAIL, NULL },
+ /* 2 ipv4, fails after ~400ms, reports COULDNT_CONNECT */
+#ifdef ENABLE_IPV6
+ { 3, TURL, "test.com:123:::1", CURL_IPRESOLVE_WHATEVER,
+ CNCT_TMOT, 150, 200, 200, 0, 1, 200, TC_TMOT, R_FAIL, NULL },
+ /* 1 ipv6, fails after ~200ms, reports COULDNT_CONNECT */
+ { 4, TURL, "test.com:123:::1,::2", CURL_IPRESOLVE_WHATEVER,
+ CNCT_TMOT, 150, 200, 200, 0, 2, 400, TC_TMOT, R_FAIL, NULL },
+ /* 2 ipv6, fails after ~400ms, reports COULDNT_CONNECT */
+
+ { 5, TURL, "test.com:123:192.0.2.1,::1", CURL_IPRESOLVE_WHATEVER,
+ CNCT_TMOT, 150, 200, 200, 1, 1, 350, TC_TMOT, R_FAIL, "v4" },
+ /* mixed ip4+6, v4 starts, v6 kicks in on HE, fails after ~350ms */
+ { 6, TURL, "test.com:123:::1,192.0.2.1", CURL_IPRESOLVE_WHATEVER,
+ CNCT_TMOT, 150, 200, 200, 1, 1, 350, TC_TMOT, R_FAIL, "v6" },
+ /* mixed ip6+4, v6 starts, v4 never starts due to high HE, TIMEOUT */
+ { 7, TURL, "test.com:123:192.0.2.1,::1", CURL_IPRESOLVE_V4,
+ CNCT_TMOT, 150, 500, 500, 1, 0, 400, TC_TMOT, R_FAIL, NULL },
+ /* mixed ip4+6, but only use v4, check it uses full connect timeout,
+ although another address of the 'wrong' family is available */
+ { 8, TURL, "test.com:123:::1,192.0.2.1", CURL_IPRESOLVE_V6,
+ CNCT_TMOT, 150, 500, 500, 0, 1, 400, TC_TMOT, R_FAIL, NULL },
+ /* mixed ip4+6, but only use v6, check it uses full connect timeout,
+ although another address of the 'wrong' family is available */
+#endif
+};
+
+UNITTEST_START
+
+#if defined(DEBUGBUILD)
+ size_t i;
+
+ for(i = 0; i < sizeof(TEST_CASES)/sizeof(TEST_CASES[0]); ++i) {
+ test_connect(&TEST_CASES[i]);
+ }
+#else
+ (void)TEST_CASES;
+ (void)test_connect;
+#endif
+
+UNITTEST_STOP
diff --git a/tests/unit/unit2601.c b/tests/unit/unit2601.c
new file mode 100644
index 000000000..c0c413be5
--- /dev/null
+++ b/tests/unit/unit2601.c
@@ -0,0 +1,246 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curlcheck.h"
+
+#include "urldata.h"
+#include "bufq.h"
+#include "curl_trc.h"
+
+static CURLcode unit_setup(void)
+{
+ CURLcode res = CURLE_OK;
+ return res;
+}
+
+static void unit_stop(void)
+{
+}
+
+static const char *tail_err(struct bufq *q)
+{
+ struct buf_chunk *chunk;
+
+ if(!q->tail) {
+ return q->head? "tail is NULL, but head is not" : NULL;
+ }
+
+ chunk = q->head;
+ while(chunk) {
+ if(chunk == q->tail) {
+ if(chunk->next) {
+ return "tail points to queue, but not at the end";
+ }
+ return NULL;
+ }
+ chunk = chunk->next;
+ }
+ return "tail not part of queue";
+}
+
+static void dump_bufq(struct bufq *q, const char *msg)
+{
+ struct buf_chunk *chunk;
+ const char *terr;
+ size_t n;
+
+ fprintf(stderr, "bufq[chunk_size=%zu, max_chunks=%zu] %s\n",
+ q->chunk_size, q->max_chunks, msg);
+ fprintf(stderr, "- queue[\n");
+ chunk = q->head;
+ while(chunk) {
+ fprintf(stderr, " chunk[len=%zu, roff=%zu, woff=%zu]\n",
+ chunk->dlen, chunk->r_offset, chunk->w_offset);
+ chunk = chunk->next;
+ }
+ fprintf(stderr, " ]\n");
+ terr = tail_err(q);
+ fprintf(stderr, "- tail: %s\n", terr? terr : "ok");
+ n = 0;
+ chunk = q->spare;
+ while(chunk) {
+ ++n;
+ chunk = chunk->next;
+ }
+ fprintf(stderr, "- chunks: %zu\n", q->chunk_count);
+ fprintf(stderr, "- spares: %zu\n", n);
+}
+
+static unsigned char test_data[32*1024];
+
+static void check_bufq(size_t pool_spares,
+ size_t chunk_size, size_t max_chunks,
+ size_t wsize, size_t rsize, int opts)
+{
+ struct bufq q;
+ struct bufc_pool pool;
+ size_t max_len = chunk_size * max_chunks;
+ CURLcode result;
+ ssize_t n, i;
+ size_t nwritten, nread;
+
+ if(pool_spares > 0) {
+ Curl_bufcp_init(&pool, chunk_size, pool_spares);
+ Curl_bufq_initp(&q, &pool, max_chunks, opts);
+ }
+ else {
+ Curl_bufq_init2(&q, chunk_size, max_chunks, opts);
+ }
+
+ fail_unless(q.chunk_size == chunk_size, "chunk_size init wrong");
+ fail_unless(q.max_chunks == max_chunks, "max_chunks init wrong");
+ fail_unless(q.head == NULL, "init: head not NULL");
+ fail_unless(q.tail == NULL, "init: tail not NULL");
+ fail_unless(q.spare == NULL, "init: spare not NULL");
+ fail_unless(Curl_bufq_len(&q) == 0, "init: bufq length != 0");
+
+ n = Curl_bufq_write(&q, test_data, wsize, &result);
+ fail_unless(n >= 0, "write: negative size returned");
+ fail_unless((size_t)n <= wsize, "write: wrong size returned");
+ fail_unless(result == CURLE_OK, "write: wrong result returned");
+
+ /* write empty bufq full */
+ nwritten = 0;
+ Curl_bufq_reset(&q);
+ while(!Curl_bufq_is_full(&q)) {
+ n = Curl_bufq_write(&q, test_data, wsize, &result);
+ if(n >= 0) {
+ nwritten += (size_t)n;
+ }
+ else if(result != CURLE_AGAIN) {
+ fail_unless(result == CURLE_AGAIN, "write-loop: unexpected result");
+ break;
+ }
+ }
+ if(nwritten != max_len) {
+ fprintf(stderr, "%zu bytes written, but max_len=%zu\n",
+ nwritten, max_len);
+ dump_bufq(&q, "after writing full");
+ fail_if(TRUE, "write: bufq full but nwritten wrong");
+ }
+
+ /* read full bufq empty */
+ nread = 0;
+ while(!Curl_bufq_is_empty(&q)) {
+ n = Curl_bufq_read(&q, test_data, rsize, &result);
+ if(n >= 0) {
+ nread += (size_t)n;
+ }
+ else if(result != CURLE_AGAIN) {
+ fail_unless(result == CURLE_AGAIN, "read-loop: unexpected result");
+ break;
+ }
+ }
+ if(nread != max_len) {
+ fprintf(stderr, "%zu bytes read, but max_len=%zu\n",
+ nwritten, max_len);
+ dump_bufq(&q, "after reading empty");
+ fail_if(TRUE, "read: bufq empty but nread wrong");
+ }
+ if(q.tail) {
+ dump_bufq(&q, "after reading empty");
+ fail_if(TRUE, "read empty, but tail is not NULL");
+ }
+
+ for(i = 0; i < 1000; ++i) {
+ n = Curl_bufq_write(&q, test_data, wsize, &result);
+ if(n < 0 && result != CURLE_AGAIN) {
+ fail_unless(result == CURLE_AGAIN, "rw-loop: unexpected write result");
+ break;
+ }
+ n = Curl_bufq_read(&q, test_data, rsize, &result);
+ if(n < 0 && result != CURLE_AGAIN) {
+ fail_unless(result == CURLE_AGAIN, "rw-loop: unexpected read result");
+ break;
+ }
+ }
+
+ /* Test SOFT_LIMIT option */
+ Curl_bufq_free(&q);
+ Curl_bufq_init2(&q, chunk_size, max_chunks, (opts|BUFQ_OPT_SOFT_LIMIT));
+ nwritten = 0;
+ while(!Curl_bufq_is_full(&q)) {
+ n = Curl_bufq_write(&q, test_data, wsize, &result);
+ if(n < 0 || (size_t)n != wsize) {
+ fail_unless(n > 0 && (size_t)n == wsize, "write should be complete");
+ break;
+ }
+ nwritten += (size_t)n;
+ }
+ if(nwritten < max_len) {
+ fprintf(stderr, "%zu bytes written, but max_len=%zu\n",
+ nwritten, max_len);
+ dump_bufq(&q, "after writing full");
+ fail_if(TRUE, "write: bufq full but nwritten wrong");
+ }
+ /* do one more write on a full bufq, should work */
+ n = Curl_bufq_write(&q, test_data, wsize, &result);
+ fail_unless(n > 0 && (size_t)n == wsize, "write should be complete");
+ nwritten += (size_t)n;
+ /* see that we get all out again */
+ nread = 0;
+ while(!Curl_bufq_is_empty(&q)) {
+ n = Curl_bufq_read(&q, test_data, rsize, &result);
+ if(n <= 0) {
+ fail_unless(n > 0, "read-loop: unexpected fail");
+ break;
+ }
+ nread += (size_t)n;
+ }
+ fail_unless(nread == nwritten, "did not get the same out as put in");
+
+ dump_bufq(&q, "at end of test");
+ Curl_bufq_free(&q);
+ if(pool_spares > 0)
+ Curl_bufcp_free(&pool);
+}
+
+UNITTEST_START
+ struct bufq q;
+ ssize_t n;
+ CURLcode result;
+ unsigned char buf[16*1024];
+
+ Curl_bufq_init(&q, 8*1024, 12);
+ n = Curl_bufq_read(&q, buf, 128, &result);
+ fail_unless(n < 0 && result == CURLE_AGAIN, "read empty fail");
+ Curl_bufq_free(&q);
+
+ check_bufq(0, 1024, 4, 128, 128, BUFQ_OPT_NONE);
+ check_bufq(0, 1024, 4, 129, 127, BUFQ_OPT_NONE);
+ check_bufq(0, 1024, 4, 2000, 16000, BUFQ_OPT_NONE);
+ check_bufq(0, 1024, 4, 16000, 3000, BUFQ_OPT_NONE);
+
+ check_bufq(0, 8000, 10, 1234, 1234, BUFQ_OPT_NONE);
+ check_bufq(0, 8000, 10, 8*1024, 4*1024, BUFQ_OPT_NONE);
+
+ check_bufq(0, 1024, 4, 128, 128, BUFQ_OPT_NO_SPARES);
+ check_bufq(0, 1024, 4, 129, 127, BUFQ_OPT_NO_SPARES);
+ check_bufq(0, 1024, 4, 2000, 16000, BUFQ_OPT_NO_SPARES);
+ check_bufq(0, 1024, 4, 16000, 3000, BUFQ_OPT_NO_SPARES);
+
+ check_bufq(8, 1024, 4, 128, 128, BUFQ_OPT_NONE);
+ check_bufq(8, 8000, 10, 1234, 1234, BUFQ_OPT_NONE);
+ check_bufq(8, 1024, 4, 129, 127, BUFQ_OPT_NO_SPARES);
+
+UNITTEST_STOP
diff --git a/tests/unit/unit2602.c b/tests/unit/unit2602.c
new file mode 100644
index 000000000..41476c60f
--- /dev/null
+++ b/tests/unit/unit2602.c
@@ -0,0 +1,148 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curlcheck.h"
+
+#include "urldata.h"
+#include "dynbuf.h"
+#include "dynhds.h"
+#include "curl_trc.h"
+
+static CURLcode unit_setup(void)
+{
+ return CURLE_OK;
+}
+
+static void unit_stop(void)
+{
+}
+
+
+UNITTEST_START
+
+ struct dynhds hds;
+ struct dynbuf dbuf;
+ CURLcode result;
+ size_t i;
+
+ /* add 1 more header than allowed */
+ Curl_dynhds_init(&hds, 2, 128);
+ fail_if(Curl_dynhds_count(&hds), "should be empty");
+ fail_if(Curl_dynhds_add(&hds, "test1", 5, "123", 3), "add failed");
+ fail_if(Curl_dynhds_add(&hds, "test2", 5, "456", 3), "add failed");
+ /* remove and add without exceeding limits */
+ for(i = 0; i < 100; ++i) {
+ if(Curl_dynhds_remove(&hds, "test2", 5) != 1) {
+ fail_if(TRUE, "should");
+ break;
+ }
+ if(Curl_dynhds_add(&hds, "test2", 5, "456", 3)) {
+ fail_if(TRUE, "add failed");
+ break;
+ }
+ }
+ fail_unless(Curl_dynhds_count(&hds) == 2, "should hold 2");
+ /* set, replacing previous entry without exceeding limits */
+ for(i = 0; i < 100; ++i) {
+ if(Curl_dynhds_set(&hds, "test2", 5, "456", 3)) {
+ fail_if(TRUE, "add failed");
+ break;
+ }
+ }
+ fail_unless(Curl_dynhds_count(&hds) == 2, "should hold 2");
+ /* exceed limit on # of entries */
+ result = Curl_dynhds_add(&hds, "test3", 5, "789", 3);
+ fail_unless(result, "add should have failed");
+
+ fail_unless(Curl_dynhds_count_name(&hds, "test", 4) == 0, "false positive");
+ fail_unless(Curl_dynhds_count_name(&hds, "test1", 4) == 0, "false positive");
+ fail_if(Curl_dynhds_get(&hds, "test1", 4), "false positive");
+ fail_unless(Curl_dynhds_get(&hds, "test1", 5), "false negative");
+ fail_unless(Curl_dynhds_count_name(&hds, "test1", 5) == 1, "should");
+ fail_unless(Curl_dynhds_ccount_name(&hds, "test2") == 1, "should");
+ fail_unless(Curl_dynhds_cget(&hds, "test2"), "should");
+ fail_unless(Curl_dynhds_ccount_name(&hds, "TEST2") == 1, "should");
+ fail_unless(Curl_dynhds_ccontains(&hds, "TesT2"), "should");
+ fail_unless(Curl_dynhds_contains(&hds, "TeSt2", 5), "should");
+ Curl_dynhds_free(&hds);
+
+ /* add header exceeding max overall length */
+ Curl_dynhds_init(&hds, 128, 10);
+ fail_if(Curl_dynhds_add(&hds, "test1", 5, "123", 3), "add failed");
+ fail_unless(Curl_dynhds_add(&hds, "test2", 5, "456", 3), "should fail");
+ fail_if(Curl_dynhds_add(&hds, "t", 1, "1", 1), "add failed");
+ Curl_dynhds_reset(&hds);
+ Curl_dynhds_free(&hds);
+
+ Curl_dynhds_init(&hds, 128, 4*1024);
+ fail_if(Curl_dynhds_add(&hds, "test1", 5, "123", 3), "add failed");
+ fail_if(Curl_dynhds_add(&hds, "test1", 5, "123", 3), "add failed");
+ fail_if(Curl_dynhds_cadd(&hds, "blablabla", "thingies"), "add failed");
+ fail_if(Curl_dynhds_h1_cadd_line(&hds, "blablabla: thingies"), "add failed");
+ fail_unless(Curl_dynhds_ccount_name(&hds, "blablabla") == 2, "should");
+ fail_unless(Curl_dynhds_cremove(&hds, "blablabla") == 2, "should");
+ fail_if(Curl_dynhds_ccontains(&hds, "blablabla"), "should not");
+
+ result = Curl_dynhds_h1_cadd_line(&hds, "blablabla thingies");
+ fail_unless(result, "add should have failed");
+ if(!result) {
+ fail_unless(Curl_dynhds_ccount_name(&hds, "bLABlaBlA") == 0, "should");
+ fail_if(Curl_dynhds_cadd(&hds, "Bla-Bla", "thingies"), "add failed");
+
+ Curl_dyn_init(&dbuf, 32*1024);
+ fail_if(Curl_dynhds_h1_dprint(&hds, &dbuf), "h1 print failed");
+ if(Curl_dyn_ptr(&dbuf)) {
+ fail_if(strcmp(Curl_dyn_ptr(&dbuf),
+ "test1: 123\r\ntest1: 123\r\nBla-Bla: thingies\r\n"),
+ "h1 format differs");
+ }
+ Curl_dyn_free(&dbuf);
+ }
+
+ Curl_dynhds_free(&hds);
+ Curl_dynhds_init(&hds, 128, 4*1024);
+ /* continuation without previous header fails */
+ result = Curl_dynhds_h1_cadd_line(&hds, " indented value");
+ fail_unless(result, "add should have failed");
+
+ /* continuation with previous header must succeed */
+ fail_if(Curl_dynhds_h1_cadd_line(&hds, "ti1: val1"), "add");
+ fail_if(Curl_dynhds_h1_cadd_line(&hds, " val2"), "add indent");
+ fail_if(Curl_dynhds_h1_cadd_line(&hds, "ti2: val1"), "add");
+ fail_if(Curl_dynhds_h1_cadd_line(&hds, "\tval2"), "add indent");
+ fail_if(Curl_dynhds_h1_cadd_line(&hds, "ti3: val1"), "add");
+ fail_if(Curl_dynhds_h1_cadd_line(&hds, " val2"), "add indent");
+
+ Curl_dyn_init(&dbuf, 32*1024);
+ fail_if(Curl_dynhds_h1_dprint(&hds, &dbuf), "h1 print failed");
+ if(Curl_dyn_ptr(&dbuf)) {
+ fprintf(stderr, "indent concat: %s\n", Curl_dyn_ptr(&dbuf));
+ fail_if(strcmp(Curl_dyn_ptr(&dbuf),
+ "ti1: val1 val2\r\nti2: val1 val2\r\nti3: val1 val2\r\n"),
+ "wrong format");
+ }
+ Curl_dyn_free(&dbuf);
+
+ Curl_dynhds_free(&hds);
+
+UNITTEST_STOP
diff --git a/tests/unit/unit2603.c b/tests/unit/unit2603.c
new file mode 100644
index 000000000..3c6177636
--- /dev/null
+++ b/tests/unit/unit2603.c
@@ -0,0 +1,190 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curlcheck.h"
+
+#include "urldata.h"
+#include "http.h"
+#include "http1.h"
+#include "curl_trc.h"
+
+static CURLcode unit_setup(void)
+{
+ return CURLE_OK;
+}
+
+static void unit_stop(void)
+{
+}
+
+struct tcase {
+ const char **input;
+ const char *default_scheme;
+ const char *method;
+ const char *scheme;
+ const char *authority;
+ const char *path;
+ size_t header_count;
+ size_t input_remain;
+};
+
+static void check_eq(const char *s, const char *exp_s, const char *name)
+{
+ if(s && exp_s) {
+ if(strcmp(s, exp_s)) {
+ fprintf(stderr, "expected %s: '%s' but got '%s'\n", name, exp_s, s);
+ fail("unexpected req component");
+ }
+ }
+ else if(!s && exp_s) {
+ fprintf(stderr, "expected %s: '%s' but got NULL\n", name, exp_s);
+ fail("unexpected req component");
+ }
+ else if(s && !exp_s) {
+ fprintf(stderr, "expected %s: NULL but got '%s'\n", name, s);
+ fail("unexpected req component");
+ }
+}
+
+static void parse_success(struct tcase *t)
+{
+ struct h1_req_parser p;
+ const char *buf;
+ size_t buflen, i, in_len, in_consumed;
+ CURLcode err;
+ ssize_t nread;
+
+ Curl_h1_req_parse_init(&p, 1024);
+ in_len = in_consumed = 0;
+ for(i = 0; t->input[i]; ++i) {
+ buf = t->input[i];
+ buflen = strlen(buf);
+ in_len += buflen;
+ nread = Curl_h1_req_parse_read(&p, buf, buflen, t->default_scheme,
+ 0, &err);
+ if(nread < 0) {
+ fprintf(stderr, "got err %d parsing: '%s'\n", err, buf);
+ fail("error consuming");
+ }
+ in_consumed += (size_t)nread;
+ if((size_t)nread != buflen) {
+ if(!p.done) {
+ fprintf(stderr, "only %zd/%zu consumed for: '%s'\n",
+ nread, buflen, buf);
+ fail("not all consumed");
+ }
+ }
+ }
+
+ fail_if(!p.done, "end not detected");
+ fail_if(!p.req, "not request created");
+ if(t->input_remain != (in_len - in_consumed)) {
+ fprintf(stderr, "expected %zu input bytes to remain, but got %zu\n",
+ t->input_remain, in_len - in_consumed);
+ fail("unexpected input consumption");
+ }
+ if(p.req) {
+ check_eq(p.req->method, t->method, "method");
+ check_eq(p.req->scheme, t->scheme, "scheme");
+ check_eq(p.req->authority, t->authority, "authority");
+ check_eq(p.req->path, t->path, "path");
+ if(Curl_dynhds_count(&p.req->headers) != t->header_count) {
+ fprintf(stderr, "expected %zu headers but got %zu\n", t->header_count,
+ Curl_dynhds_count(&p.req->headers));
+ fail("unexpected req header count");
+ }
+ }
+
+ Curl_h1_req_parse_free(&p);
+}
+
+static const char *T1_INPUT[] = {
+ "GET /path HTTP/1.1\r\nHost: test.curl.se\r\n\r\n",
+ NULL,
+};
+static struct tcase TEST1a = {
+ T1_INPUT, NULL, "GET", NULL, NULL, "/path", 1, 0
+};
+static struct tcase TEST1b = {
+ T1_INPUT, "https", "GET", "https", NULL, "/path", 1, 0
+};
+
+static const char *T2_INPUT[] = {
+ "GET /path HTT",
+ "P/1.1\r\nHost: te",
+ "st.curl.se\r\n\r",
+ "\n12345678",
+ NULL,
+};
+static struct tcase TEST2 = {
+ T2_INPUT, NULL, "GET", NULL, NULL, "/path", 1, 8
+};
+
+static const char *T3_INPUT[] = {
+ "GET ftp://ftp.curl.se/xxx?a=2 HTTP/1.1\r\nContent-Length: 0\r",
+ "\nUser-Agent: xxx\r\n\r\n",
+ NULL,
+};
+static struct tcase TEST3a = {
+ T3_INPUT, NULL, "GET", "ftp", "ftp.curl.se", "/xxx?a=2", 2, 0
+};
+
+static const char *T4_INPUT[] = {
+ "CONNECT ftp.curl.se:123 HTTP/1.1\r\nContent-Length: 0\r\n",
+ "User-Agent: xxx\r\n",
+ "nothing: \r\n\r\n\n\n",
+ NULL,
+};
+static struct tcase TEST4a = {
+ T4_INPUT, NULL, "CONNECT", NULL, "ftp.curl.se:123", NULL, 3, 2
+};
+
+static const char *T5_INPUT[] = {
+ "OPTIONS * HTTP/1.1\r\nContent-Length: 0\r\nBlabla: xxx.yyy\r",
+ "\n\tzzzzzz\r\n\r\n",
+ "123",
+ NULL,
+};
+static struct tcase TEST5a = {
+ T5_INPUT, NULL, "OPTIONS", NULL, NULL, "*", 2, 3
+};
+
+static const char *T6_INPUT[] = {
+ "PUT /path HTTP/1.1\nHost: test.curl.se\n\n123",
+ NULL,
+};
+static struct tcase TEST6a = {
+ T6_INPUT, NULL, "PUT", NULL, NULL, "/path", 1, 3
+};
+
+UNITTEST_START
+
+ parse_success(&TEST1a);
+ parse_success(&TEST1b);
+ parse_success(&TEST2);
+ parse_success(&TEST3a);
+ parse_success(&TEST4a);
+ parse_success(&TEST5a);
+ parse_success(&TEST6a);
+
+UNITTEST_STOP
diff --git a/tests/unit/unit3200.c b/tests/unit/unit3200.c
new file mode 100644
index 000000000..0544bcc93
--- /dev/null
+++ b/tests/unit/unit3200.c
@@ -0,0 +1,180 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed 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 "curlcheck.h"
+#include "curl_get_line.h"
+
+#if !defined(CURL_DISABLE_COOKIES) || !defined(CURL_DISABLE_ALTSVC) || \
+ !defined(CURL_DISABLE_HSTS) || !defined(CURL_DISABLE_NETRC)
+
+/* The test XML does not supply a way to write files without newlines
+ * so we write our own
+ */
+
+#define C64 "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
+#define C256 C64 C64 C64 C64
+#define C1024 C256 C256 C256 C256
+#define C4096 C1024 C1024 C1024 C1024
+
+static CURLcode unit_setup(void)
+{
+ return CURLE_OK;
+}
+
+static CURLcode unit_stop(void)
+{
+ return CURLE_OK;
+}
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Woverlength-strings"
+#endif
+
+#define NUMTESTS 6
+static const char *filecontents[] = {
+ /* Both should be read */
+ "LINE1\n"
+ "LINE2 NEWLINE\n",
+
+ /* Both should be read */
+ "LINE1\n"
+ "LINE2 NONEWLINE",
+
+ /* Only first should be read */
+ "LINE1\n"
+ C4096,
+
+ /* First line should be read */
+ "LINE1\n"
+ C4096 "SOME EXTRA TEXT",
+
+ /* First and third line should be read */
+ "LINE1\n"
+ C4096 "SOME EXTRA TEXT\n"
+ "LINE3\n",
+
+ "LINE1\x1aTEST"
+};
+
+#ifdef __GNUC__
+#pragma GCC diagnostic warning "-Woverlength-strings"
+#endif
+
+
+UNITTEST_START
+ size_t i;
+ for(i = 0; i < NUMTESTS; i++) {
+ FILE *fp;
+ char buf[4096];
+ int len = 4096;
+ char *line;
+
+ fp = fopen(arg, "wb");
+ abort_unless(fp != NULL, "Cannot open testfile");
+ fwrite(filecontents[i], 1, strlen(filecontents[i]), fp);
+ fclose(fp);
+
+ fp = fopen(arg, "rb");
+ abort_unless(fp != NULL, "Cannot open testfile");
+
+ fprintf(stderr, "Test %zd...", i);
+ switch(i) {
+ case 0:
+ line = Curl_get_line(buf, len, fp);
+ fail_unless(line && !strcmp("LINE1\n", line),
+ "First line failed (1)");
+ line = Curl_get_line(buf, len, fp);
+ fail_unless(line && !strcmp("LINE2 NEWLINE\n", line),
+ "Second line failed (1)");
+ line = Curl_get_line(buf, len, fp);
+ abort_unless(line == NULL, "Missed EOF (1)");
+ break;
+ case 1:
+ line = Curl_get_line(buf, len, fp);
+ fail_unless(line && !strcmp("LINE1\n", line),
+ "First line failed (2)");
+ line = Curl_get_line(buf, len, fp);
+ fail_unless(line && !strcmp("LINE2 NONEWLINE\n", line),
+ "Second line failed (2)");
+ line = Curl_get_line(buf, len, fp);
+ abort_unless(line == NULL, "Missed EOF (2)");
+ break;
+ case 2:
+ line = Curl_get_line(buf, len, fp);
+ fail_unless(line && !strcmp("LINE1\n", line),
+ "First line failed (3)");
+ line = Curl_get_line(buf, len, fp);
+ fail_unless(line == NULL,
+ "Did not detect max read on EOF (3)");
+ break;
+ case 3:
+ line = Curl_get_line(buf, len, fp);
+ fail_unless(line && !strcmp("LINE1\n", line),
+ "First line failed (4)");
+ line = Curl_get_line(buf, len, fp);
+ fail_unless(line == NULL,
+ "Did not ignore partial on EOF (4)");
+ break;
+ case 4:
+ line = Curl_get_line(buf, len, fp);
+ fail_unless(line && !strcmp("LINE1\n", line),
+ "First line failed (5)");
+ line = Curl_get_line(buf, len, fp);
+ fail_unless(line && !strcmp("LINE3\n", line),
+ "Third line failed (5)");
+ line = Curl_get_line(buf, len, fp);
+ abort_unless(line == NULL, "Missed EOF (5)");
+ break;
+ case 5:
+ line = Curl_get_line(buf, len, fp);
+ fail_unless(line && !strcmp("LINE1\x1aTEST\n", line),
+ "Missed/Misinterpreted ^Z (6)");
+ line = Curl_get_line(buf, len, fp);
+ abort_unless(line == NULL, "Missed EOF (6)");
+ break;
+ default:
+ abort_unless(1, "Unknown case");
+ break;
+ }
+ fclose(fp);
+ fprintf(stderr, "OK\n");
+ }
+UNITTEST_STOP
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
+
+#else
+static CURLcode unit_setup(void)
+{
+ return CURLE_OK;
+}
+static void unit_stop(void)
+{
+}
+UNITTEST_START
+UNITTEST_STOP
+
+#endif
diff --git a/tests/util.py b/tests/util.py
index b8c4ebd53..051c6934d 100755
--- a/tests/util.py
+++ b/tests/util.py
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2017 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
diff --git a/tests/valgrind.pm b/tests/valgrind.pm
index 8916b5925..a0bce30c8 100644
--- a/tests/valgrind.pm
+++ b/tests/valgrind.pm
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -22,14 +22,28 @@
#
###########################################################################
+package valgrind;
+
+use strict;
+use warnings;
+
+BEGIN {
+ use base qw(Exporter);
+
+ our @EXPORT = qw(
+ valgrindparse
+ );
+}
+
+
use File::Basename;
sub valgrindparse {
my ($file) = @_;
my @o;
- open(VAL, "<$file");
- @o = <VAL>;
- close(VAL);
+ open(my $val, "<", "$file");
+ @o = <$val>;
+ close($val);
return @o;
}
diff --git a/tests/version-scan.pl b/tests/version-scan.pl
index b52459d0a..3c055d9b3 100755
--- a/tests/version-scan.pl
+++ b/tests/version-scan.pl
@@ -6,7 +6,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 2010 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -32,25 +32,39 @@ use warnings;
my $manpage=$ARGV[0];
my $header=$ARGV[1];
+my $source=$ARGV[2];
my %manversion;
my %headerversion;
-my $error;
+my %manname;
+my %sourcename;
+my $error=0;
-open(M, "<$manpage");
-while(<M>) {
- if($_ =~ /^.ip (CURL_VERSION_[A-Z0-9_]+)/i) {
+open(my $m, "<", "$manpage");
+while(<$m>) {
+ if($_ =~ / mask bit: (CURL_VERSION_[A-Z0-9_]+)/i) {
$manversion{$1}++;
}
+ if($_ =~ /^\.ip """([^"]+)"""/i) {
+ $manname{$1}++;
+ }
}
-close(M);
+close($m);
-open(H, "<$header");
-while(<H>) {
+open(my $h, "<", "$header");
+while(<$h>) {
if($_ =~ /^\#define (CURL_VERSION_[A-Z0-9_]+)/i) {
$headerversion{$1}++;
}
}
-close(H);
+close($h);
+
+open(my $s, "<", "$source");
+while(<$s>) {
+ if($_ =~ /FEATURE\("([^"]*)"/) {
+ $sourcename{$1}++;
+ }
+}
+close($s);
for my $h (keys %headerversion) {
if(!$manversion{$h}) {
@@ -64,5 +78,17 @@ for my $h (keys %manversion) {
$error++;
}
}
+for my $n (keys %sourcename) {
+ if(!$manname{$n}) {
+ print STDERR "$manpage: missing feature name $n\n";
+ $error++;
+ }
+}
+for my $n (keys %manname) {
+ if(!$sourcename{$n}) {
+ print STDERR "$manpage: $n is not in the source!\n";
+ $error++;
+ }
+}
exit $error;
diff --git a/winbuild/Makefile.vc b/winbuild/Makefile.vc
index 594b16fcc..44d9604ba 100644
--- a/winbuild/Makefile.vc
+++ b/winbuild/Makefile.vc
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1999 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -265,6 +265,10 @@ CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-msh3
!MESSAGE configuration name: $(CONFIG_NAME_LIB)
+# Note these directories are removed by this makefile's 'clean' so they should
+# not be changed to point to user-specified directories that may contain other
+# data. MakefileBuild.vc uses the same variable names but allows some user
+# changes and therefore does not remove the directories.
BUILD_DIR=../builds/$(CONFIG_NAME_LIB)
LIBCURL_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-lib
CURL_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-curl
@@ -300,4 +304,7 @@ copy_from_lib:
FOR %%i IN ($(CURLX_CFILES:/=\)) DO copy %%i ..\src\
clean:
+ @if exist $(LIBCURL_DIROBJ) rd /s /q $(LIBCURL_DIROBJ)
+ @if exist $(CURL_DIROBJ) rd /s /q $(CURL_DIROBJ)
+ @if exist $(DIRDIST) rd /s /q $(DIRDIST)
$(MAKE) /NOLOGO /F MakefileBuild.vc $@
diff --git a/winbuild/MakefileBuild.vc b/winbuild/MakefileBuild.vc
index 727ef0850..9b165537a 100644
--- a/winbuild/MakefileBuild.vc
+++ b/winbuild/MakefileBuild.vc
@@ -5,7 +5,7 @@
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
-# Copyright (C) 1999 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
@@ -136,9 +136,6 @@ WIN_LIBS = $(WIN_LIBS) gdi32.lib user32.lib crypt32.lib
!IFDEF USE_SSL
SSL_CFLAGS = /DUSE_OPENSSL /I"$(SSL_INC_DIR)"
-!IF EXISTS("$(SSL_INC_DIR)\is_boringssl.h")
-SSL_CFLAGS = $(SSL_CFLAGS) /DHAVE_BORINGSSL
-!ENDIF
!IF "$(ENABLE_OPENSSL_AUTO_LOAD_CONFIG)"=="false"
SSL_CFLAGS = $(SSL_CFLAGS) /DCURL_DISABLE_OPENSSL_AUTO_LOAD_CONFIG
!ENDIF
@@ -265,6 +262,8 @@ ZLIB = dll
!IF EXISTS("$(ZLIB_LIB_DIR)\zlibstat.lib")
ZLIB_LIBS = zlibstat.lib
ADDITIONAL_ZLIB_CFLAGS = /DZLIB_WINAPI
+!ELSEIF EXISTS("$(ZLIB_LIB_DIR)\zlibstatic.lib")
+ZLIB_LIBS = zlibstatic.lib
!ELSEIF EXISTS("$(ZLIB_LIB_DIR)\zlib.lib")
ZLIB_LIBS = zlib.lib
!ELSE
@@ -338,7 +337,7 @@ USE_IDN = true
!ENDIF
!IF "$(USE_IDN)"=="true"
-IDN_CFLAGS = $(IDN_CFLAGS) /DUSE_WIN32_IDN /DWANT_IDN_PROTOTYPES
+IDN_CFLAGS = $(IDN_CFLAGS) /DUSE_WIN32_IDN
WIN_LIBS = $(WIN_LIBS) Normaliz.lib
!ENDIF
@@ -664,7 +663,8 @@ CURL_FROM_LIBCURL=$(CURL_DIROBJ)\tool_hugehelp.obj \
$(CURL_DIROBJ)\warnless.obj \
$(CURL_DIROBJ)\curl_multibyte.obj \
$(CURL_DIROBJ)\version_win32.obj \
- $(CURL_DIROBJ)\dynbuf.obj
+ $(CURL_DIROBJ)\dynbuf.obj \
+ $(CURL_DIROBJ)\base64.obj
$(PROGRAM_NAME): $(CURL_DIROBJ) $(CURL_FROM_LIBCURL) $(EXE_OBJS)
$(CURL_LINK) $(CURL_LFLAGS) $(CURL_LIBCURL_LIBNAME) $(WIN_LIBS) $(CURL_FROM_LIBCURL) $(EXE_OBJS)
@@ -687,11 +687,19 @@ $(CURL_DIROBJ)\version_win32.obj: ../lib/version_win32.c
$(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/version_win32.c
$(CURL_DIROBJ)\dynbuf.obj: ../lib/dynbuf.c
$(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/dynbuf.c
+$(CURL_DIROBJ)\base64.obj: ../lib/base64.c
+ $(CURL_CC) $(CURL_CFLAGS) /Fo"$@" ../lib/base64.c
$(CURL_DIROBJ)\curl.res: $(CURL_SRC_DIR)\curl.rc
rc $(CURL_RC_FLAGS)
!ENDIF # End of case where a config was provided.
+# Makefile.vc's clean removes (LIB)CURL_DIROBJ and DIRDIST dirs then calls
+# this clean. Note those are the original directories we control and not the
+# directories possibly modified by this makefile to point to user-specified
+# directories.
+# For example, don't remove DIRDIST here since it may contain user files if it
+# has been changed by WITH_PREFIX to a different output dir (eg C:\usr\local).
clean:
@-erase /s *.dll 2> NUL
@-erase /s *.exp 2> NUL
@@ -701,6 +709,3 @@ clean:
@-erase /s *.pch 2> NUL
@-erase /s *.pdb 2> NUL
@-erase /s *.res 2> NUL
- @if exist $(LIB_DIROBJ) rd /s/q $(LIB_DIROBJ)
- @if exist $(CURL_DIROBJ)rd /s/q $(CURL_DIROBJ)
- @if exist $(DIRDIST) rd /s/q $(DIRDIST)
diff --git a/winbuild/README.md b/winbuild/README.md
index fe35a2145..1ecde7cee 100644
--- a/winbuild/README.md
+++ b/winbuild/README.md
@@ -1,5 +1,5 @@
<!--
-Copyright (C) 2000 - 2022 Daniel Stenberg, <daniel@haxx.se>, et al.
+Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
-->
@@ -104,7 +104,7 @@ where `<options>` is one or many of:
- `GEN_PDB=<yes/no>` - Generate External Program Database
(debug symbols for release build)
- `DEBUG=<yes/no>` - Debug builds
- - `MACHINE=<x86/x64>` - Target architecture (default is x86)
+ - `MACHINE=<x86/x64/arm64>` - Target architecture (default is x86)
- `CARES_PATH=<path>` - Custom path for c-ares
- `MBEDTLS_PATH=<path>` - Custom path for mbedTLS
- `NGHTTP2_PATH=<path>` - Custom path for nghttp2
diff --git a/winbuild/gen_resp_file.bat b/winbuild/gen_resp_file.bat
index f8fe5625f..6286fd082 100755
--- a/winbuild/gen_resp_file.bat
+++ b/winbuild/gen_resp_file.bat
@@ -6,7 +6,7 @@ rem * / __| | | | |_) | |
rem * | (__| |_| | _ <| |___
rem * \___|\___/|_| \_\_____|
rem *
-rem * Copyright (C) 2011 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
+rem * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, 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
@@ -18,7 +18,7 @@ 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 *
rem * SPDX-License-Identifier: curl
rem *
rem ***************************************************************************
@@ -28,7 +28,7 @@ if exist %OUTFILE% (
)
echo %MACRO_NAME% = \> %OUTFILE%
-for %%i in (%*) do echo %DIROBJ%/%%i \>> %OUTFILE%
-echo. >> %OUTFILE%
+for %%i in (%*) do echo %DIROBJ%/%%i \>> %OUTFILE%
+echo. >> %OUTFILE%
:END